pax_global_header00006660000000000000000000000064142041675430014520gustar00rootroot0000000000000052 comment=7b8eeef343ae4fd3405361ea06753a26e75f6a89 Carla-2.4.2/000077500000000000000000000000001420416754300125475ustar00rootroot00000000000000Carla-2.4.2/.github/000077500000000000000000000000001420416754300141075ustar00rootroot00000000000000Carla-2.4.2/.github/FUNDING.yml000066400000000000000000000001241420416754300157210ustar00rootroot00000000000000github: falkTX liberapay: falkTX patreon: falkTX custom: "https://paypal.me/falkTX" Carla-2.4.2/.github/workflows/000077500000000000000000000000001420416754300161445ustar00rootroot00000000000000Carla-2.4.2/.github/workflows/build.yml000066400000000000000000000126511420416754300177730ustar00rootroot00000000000000name: build on: push: branches: - '*' pull_request: branches: - '*' env: DEBIAN_FRONTEND: noninteractive HOMEBREW_NO_AUTO_UPDATE: 1 jobs: macos-10_15: runs-on: macos-10.15 steps: - uses: actions/checkout@v2 - name: Set up dependencies run: | brew install fluid-synth liblo libmagic libsndfile pkg-config pyqt@5 - name: make features run: make features - name: make run: make -j $(sysctl -n hw.logicalcpu) msys2-i686: runs-on: windows-latest defaults: run: shell: msys2 {0} steps: - uses: actions/checkout@v2 - uses: msys2/setup-msys2@v2 with: msystem: mingw32 install: base-devel make mingw-w64-i686-toolchain mingw-w64-i686-fluidsynth mingw-w64-i686-liblo mingw-w64-i686-libsndfile mingw-w64-i686-pkg-config mingw-w64-i686-python-pyqt5 - name: make features run: make features - name: make run: make -j $(nproc) msys2-x86_64: runs-on: windows-latest defaults: run: shell: msys2 {0} steps: - uses: actions/checkout@v2 - uses: msys2/setup-msys2@v2 with: msystem: mingw64 install: base-devel make mingw-w64-x86_64-toolchain mingw-w64-x86_64-fluidsynth mingw-w64-x86_64-liblo mingw-w64-x86_64-libsndfile mingw-w64-x86_64-pkg-config mingw-w64-x86_64-python-pyqt5 - name: make features run: make features - name: make run: make -j $(nproc) ubuntu-18_04: runs-on: ubuntu-18.04 steps: - uses: actions/checkout@v2 - name: Set up dependencies run: | sudo dpkg --add-architecture i386 sudo apt-get update -qq sudo apt-get install -yq libasound2-dev libfluidsynth-dev libgl1-mesa-dev liblo-dev libmagic-dev libpulse-dev libqt4-dev libsndfile1-dev libx11-dev libxcursor-dev libxext-dev libxrandr-dev pkg-config pyqt5-dev-tools qtbase5-dev sudo apt-get install -yq g++-multilib libfreetype6:i386 libx11-6:i386 libxext6:i386 # Fix 32bit bridge build sudo ln -s /usr/lib/i386-linux-gnu/libX11.so.6 /usr/lib/i386-linux-gnu/libX11.so sudo ln -s /usr/lib/i386-linux-gnu/libXext.so.6 /usr/lib/i386-linux-gnu/libXext.so sudo ln -s /usr/lib/i386-linux-gnu/libfreetype.so.6 /usr/lib/i386-linux-gnu/libfreetype.so - name: make features run: make features - name: make run: make -j $(nproc) - name: make posix32 run: make posix32 -j $(nproc) ubuntu-20_04: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - name: Fix GitHub's mess run: | sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list sudo apt-get update -qq sudo apt-get install -yqq --allow-downgrades libpcre2-8-0/focal libpcre2-16-0/focal libpcre2-32-0/focal libpcre2-posix2/focal - name: Set up dependencies run: | sudo dpkg --add-architecture i386 sudo apt-get update -qq sudo apt-get install -yq libasound2-dev libfluidsynth-dev libgl1-mesa-dev liblo-dev libmagic-dev libpulse-dev libsndfile1-dev libx11-dev libxcursor-dev libxext-dev libxrandr-dev pkg-config pyqt5-dev-tools qtbase5-dev sudo apt-get install -yq g++-multilib libfreetype6:i386 libx11-6:i386 libxext6:i386 # Fix 32bit bridge build sudo ln -s /usr/lib/i386-linux-gnu/libX11.so.6 /usr/lib/i386-linux-gnu/libX11.so sudo ln -s /usr/lib/i386-linux-gnu/libXext.so.6 /usr/lib/i386-linux-gnu/libXext.so sudo ln -s /usr/lib/i386-linux-gnu/libfreetype.so.6 /usr/lib/i386-linux-gnu/libfreetype.so - name: make features run: make features - name: make run: make -j $(nproc) - name: make posix32 run: make posix32 -j $(nproc) ubuntu-mingw-win32: runs-on: ubuntu-20.04 env: CC: i686-w64-mingw32-gcc CXX: i686-w64-mingw32-g++ EXE_WRAPPER: wine PKG_CONFIG: "false" WINEDEBUG: "-all" steps: - uses: actions/checkout@v2 - name: Fix GitHub's mess run: | sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list sudo apt-get update -qq sudo apt-get install -yqq --allow-downgrades libpcre2-8-0/focal libpcre2-16-0/focal libpcre2-32-0/focal libpcre2-posix2/focal - name: Set up dependencies run: | sudo dpkg --add-architecture i386 sudo apt-get update -qq sudo apt-get install -yq binutils-mingw-w64-i686 g++-mingw-w64-i686 mingw-w64 wine-stable:i386 - name: make features run: make features - name: make run: make -j $(nproc) ubuntu-mingw-win64: runs-on: ubuntu-20.04 env: CC: x86_64-w64-mingw32-gcc CXX: x86_64-w64-mingw32-g++ EXE_WRAPPER: wine PKG_CONFIG: "false" WINEDEBUG: "-all" steps: - uses: actions/checkout@v2 - name: Fix GitHub's mess run: | sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list sudo apt-get update -qq sudo apt-get install -yqq --allow-downgrades libpcre2-8-0/focal libpcre2-16-0/focal libpcre2-32-0/focal libpcre2-posix2/focal - name: Set up dependencies run: | sudo apt-get update -qq sudo apt-get install -yq binutils-mingw-w64-x86-64 g++-mingw-w64-x86-64 mingw-w64 wine-stable - name: make features run: make features - name: make run: make -j $(nproc) Carla-2.4.2/.github/workflows/irc.yml000066400000000000000000000011041420416754300174400ustar00rootroot00000000000000name: irc on: [push] jobs: notification: runs-on: ubuntu-latest name: IRC notification steps: - name: Format message id: message run: | message="${{ github.actor }} pushed $(echo '${{ github.event.commits[0].message }}' | head -n 1) ${{ github.event.commits[0].url }}" echo ::set-output name=message::"${message}" - name: IRC notification uses: Gottox/irc-message-action@v2 with: channel: '#kxstudio' nickname: kxstudio-bot message: ${{ steps.message.outputs.message }} Carla-2.4.2/.github/workflows/wine.yml000066400000000000000000000060241420416754300176330ustar00rootroot00000000000000name: wine on: push: branches: - '*' pull_request: branches: - '*' env: DEBIAN_FRONTEND: noninteractive HOMEBREW_NO_AUTO_UPDATE: 1 jobs: ubuntu-18_04: runs-on: ubuntu-18.04 env: WINECC: winegcc-stable WINEDEBUG: "-all" steps: - uses: actions/checkout@v2 - name: Set up dependencies run: | sudo dpkg --add-architecture i386 sudo apt-get update -qq sudo apt-get install -yq g++-multilib libfreetype6-dev libgl1-mesa-dev libx11-dev libxcursor-dev libxext-dev pkg-config wine-stable wine64-tools sudo apt-get install -yq binutils-mingw-w64-i686 binutils-mingw-w64-x86-64 g++-mingw-w64-i686 g++-mingw-w64-x86-64 mingw-w64 - name: make run: make -j $(nproc) #- name: make wine32 #run: make wine32 -j $(nproc) - name: make wine64 run: make wine64 -j $(nproc) - name: make win32 CC=i686-w64-mingw32-gcc CXX=i686-w64-mingw32-g++ run: make win32 CC=i686-w64-mingw32-gcc CXX=i686-w64-mingw32-g++ -j $(nproc) - name: make win64 CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ run: make win64 CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ -j $(nproc) - name: make plugin-wine run: make plugin-wine -j $(nproc) - name: make plugin-wine CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ run: make plugin-wine CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ -j $(nproc) ubuntu-20_04: runs-on: ubuntu-20.04 env: WINECC: winegcc-stable WINEDEBUG: "-all" steps: - uses: actions/checkout@v2 - name: Fix GitHub's mess run: | sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list sudo apt-get update -qq sudo apt-get install -yqq --allow-downgrades libpcre2-8-0/focal libpcre2-16-0/focal libpcre2-32-0/focal libpcre2-posix2/focal - name: Set up dependencies run: | sudo dpkg --add-architecture i386 sudo apt-get update -qq sudo apt-get install -yq g++-multilib libfreetype6-dev libgl1-mesa-dev libx11-dev libxcursor-dev libxext-dev pkg-config wine-stable wine64-tools sudo apt-get install -yq binutils-mingw-w64-i686 binutils-mingw-w64-x86-64 g++-mingw-w64-i686 g++-mingw-w64-x86-64 mingw-w64 - name: make run: make -j $(nproc) #- name: make wine32 #run: make wine32 -j $(nproc) - name: make wine64 run: make wine64 -j $(nproc) - name: make win32 CC=i686-w64-mingw32-gcc CXX=i686-w64-mingw32-g++ run: make win32 CC=i686-w64-mingw32-gcc CXX=i686-w64-mingw32-g++ -j $(nproc) - name: make win64 CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ run: make win64 CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ -j $(nproc) - name: make plugin-wine run: make plugin-wine -j $(nproc) - name: make plugin-wine CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ run: make plugin-wine CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ -j $(nproc) Carla-2.4.2/.gitignore000066400000000000000000000055071420416754300145460ustar00rootroot00000000000000# Hidden files .directory .fuse-* .*.kate-swp .libmagic-tmp .libmagic-tmp.bc .kdev4/ .DS_Store # Temp files *~ *.bak *.swp *.swo # Binary files *.7z *.bz2 *.a *.o *.dll *.dll.def *.dmg *.dylib *.exe *.msi *.so *.vst *.vst3 # Binary dir /bin/ansi-pedantic-test_* /bin/carla /bin/carla.lv2/carla-bridge-* /bin/carla-database /bin/carla-settings /bin/jack/ /bin/resources/ /bin/styles/ /build/ # Project files *.carxp *.carxs *.pro.user # C++ files *.moc moc_*.cpp ui_*.h resources.*.cpp qrc_resources.cpp # Python files *.pyc # Qt files *_rc.cpp *_rc.py ui_*.hpp ui_*.py # Translation files *.qm # Misc files *.aria2 *.deb *.gz *.meta4 *.tar *.ttl *.xz *.zip # Binaries carla-bridge-qtcreator carla-bridge-arm32 carla-bridge-native carla-bridge-posix32 carla-bridge-posix64 carla-bridge-lv2-cocoa carla-bridge-lv2-external carla-bridge-lv2-gtk2 carla-bridge-lv2-gtk3 carla-bridge-lv2-qt4 carla-bridge-lv2-qt5 carla-bridge-lv2-x11 carla-bridge-vst2-carbon carla-bridge-vst2-cocoa carla-bridge-vst2-x11 carla-discovery-qtcreator carla-discovery-native carla-discovery-arm32 carla-discovery-posix32 carla-discovery-posix64 carla-lv2-export carla-native-plugin carla-rest-server zynaddsubfx-ui stoat-output.png source/tests/ansi-pedantic-test_* source/tests/CachedPlugins source/tests/CarlaRingBuffer source/tests/CarlaPipeUtils source/tests/CarlaString source/tests/CarlaUtils1 source/tests/CarlaUtils2 source/tests/CarlaUtils3 source/tests/CarlaUtils4 source/tests/Exceptions source/tests/Print source/tests/RDF source/tests/EngineEvents source/tests/PipeServer source/tests/RtLinkedList source/tests/RtLinkedListGnu # Docs doc/CarlaBackend/ doc/CarlaBridge/ doc/DISTRHO/ # CX-Freeze builds source/dist/ # QtCreator builds *build-*Debug/ *build-*Release/ # python files in plugin resources dir bin/resources/*.py bin/resources/patchcanvas bin/resources/widgets source/native-plugins/resources/*.py # Other source/frontend/carla_config.py source/includes/asio/ source/includes/rewire/ source/includes/vst2 source/includes/vst3 source/includes/config.h source/modules/dgl/src/Resources.cpp source/modules/dgl/src/Resources.hpp source/modules/dgl/src/resources/ source/modules/dgl/src/sofd/ source/modules/distrho/src/DistrhoPluginJack.cpp source/modules/distrho/src/DistrhoPluginLADSPA+DSSI.cpp source/modules/distrho/src/DistrhoPluginLV2.cpp source/modules/distrho/src/DistrhoPluginLV2export.cpp source/modules/distrho/src/DistrhoPluginVST.cpp source/modules/distrho/src/DistrhoUIDSSI.cpp source/modules/distrho/src/DistrhoUILV2.cpp data/linux/*.gz data/linux/*.tgz data/linux/*.xz data/linux/*.*/ data/macos/*.gz data/macos/*.tgz data/macos/*-svn/ data/macos/*.*/ data/macos/Carla/ data/windows/Carla data/windows/CarlaControl data/windows/Carla-*-win32/ data/windows/Carla-*-win64/ data/windows/Carla.lv2/ data/windows/Carla_* data/windows/python/ Makefile.user.mk Carla-2.4.2/.gitmodules000066400000000000000000000002031420416754300147170ustar00rootroot00000000000000[submodule "source/native-plugins/external"] path = source/native-plugins/external url = https://github.com/falkTX/Carla-Plugins Carla-2.4.2/.travis.yml000066400000000000000000000022401420416754300146560ustar00rootroot00000000000000language: cpp os: linux dist: focal jobs: include: # linux with default, builds native and bridges - os: linux compiler: gcc env: - TARGET="linux" # linux with macOS cross-compilation - os: linux compiler: gcc dist: trusty env: - TARGET="macos" # linux with win32 cross-compilation - os: linux compiler: gcc env: - TARGET="win32" # linux with win64 cross-compilation - os: linux compiler: gcc env: - TARGET="win64" # linux with gcc 8, strict build - os: linux compiler: gcc env: - TARGET="linux-strict" # linux with gcc 8, strict build, using juce - os: linux compiler: gcc env: - TARGET="linux-juce-strict" # linux with default, tests python code - os: linux compiler: gcc env: - TARGET="pylint" before_install: - bash ${TRAVIS_BUILD_DIR}/.travis/before_install.sh install: - bash ${TRAVIS_BUILD_DIR}/.travis/install.sh script: - bash ${TRAVIS_BUILD_DIR}/.travis/script-${TARGET}.sh notifications: email: true irc: "ircs://chat.libera.chat:7070/#kxstudio" Carla-2.4.2/.travis/000077500000000000000000000000001420416754300141355ustar00rootroot00000000000000Carla-2.4.2/.travis/before_install.sh000066400000000000000000000033521420416754300174640ustar00rootroot00000000000000#!/bin/bash set -e if [ "${TARGET}" = "macos-native" ] || [ "${TARGET}" = "macos-universal" ]; then exit 0 fi if [ "${TARGET}" = "macos" ]; then # sudo rm /etc/apt/sources.list.d/cassandra.list # sudo rm /etc/apt/sources.list.d/chris-lea-redis-server.list # sudo rm /etc/apt/sources.list.d/computology_apt-backport.list # sudo rm /etc/apt/sources.list.d/couchdb.list # sudo rm /etc/apt/sources.list.d/docker.list # sudo rm /etc/apt/sources.list.d/github_git-lfs.list # sudo rm /etc/apt/sources.list.d/git-ppa.list sudo rm /etc/apt/sources.list.d/google-chrome.list # sudo rm /etc/apt/sources.list.d/heroku-toolbelt.list # sudo rm /etc/apt/sources.list.d/mongodb-3.4.list # sudo rm /etc/apt/sources.list.d/openjdk-r-java-ppa.list # sudo rm /etc/apt/sources.list.d/pgdg.list # sudo rm /etc/apt/sources.list.d/pollinate.list # sudo rm /etc/apt/sources.list.d/rabbitmq_rabbitmq-server.list # sudo rm /etc/apt/sources.list.d/webupd8team-java-ppa.list sudo add-apt-repository -y ppa:kxstudio-debian/kxstudio sudo add-apt-repository -y ppa:kxstudio-debian/mingw sudo add-apt-repository -y ppa:kxstudio-debian/toolchain sudo apt-get update -qq sudo apt-get install kxstudio-repos sudo apt-get update -qq exit 0 fi if [ "${TARGET}" = "linux" ] || [ "${TARGET}" = "win32" ] || [ "${TARGET}" = "win64" ]; then wget -qO- https://dl.winehq.org/wine-builds/winehq.key | sudo apt-key add - sudo apt-add-repository -y 'deb https://dl.winehq.org/wine-builds/ubuntu/ focal main' sudo dpkg --add-architecture i386 sudo apt-get update -qq sudo apt-get install -y -o APT::Immediate-Configure=false libc6 libc6:i386 libgcc-s1:i386 sudo apt-get install -y -f exit 0 fi Carla-2.4.2/.travis/install.sh000077500000000000000000000063361420416754300161520ustar00rootroot00000000000000#!/bin/bash set -e if [ "${TARGET}" = "linux" ]; then sudo apt-get install -y \ g++-multilib \ pkg-config \ pyqt5-dev-tools \ python3-pyqt5.qtsvg \ python3-rdflib \ libgtk2.0-dev \ libgtk-3-dev \ qtbase5-dev \ libasound2-dev \ libpulse-dev \ libmagic-dev \ libgl1-mesa-dev \ libx11-dev \ libx11-6:i386 \ liblo-static \ fluidsynth2-static \ mingw-w64 \ binutils-mingw-w64-i686 \ binutils-mingw-w64-x86-64 \ g++-mingw-w64-i686 \ g++-mingw-w64-x86-64 \ wine-devel-dev \ winehq-stable # Fix for 32bit bridge link sudo ln -s /usr/lib/i386-linux-gnu/libX11.so.6 /usr/lib/i386-linux-gnu/libX11.so elif [ "${TARGET}" = "linux-strict" ]; then sudo apt-get install -y \ g++-multilib \ g++-9-multilib \ pkg-config \ pyqt5-dev-tools \ python3-pyqt5.qtsvg \ python3-rdflib \ libgtk2.0-dev \ libgtk-3-dev \ qtbase5-dev \ libasound2-dev \ libpulse-dev \ libmagic-dev \ libgl1-mesa-dev \ libx11-dev \ libx11-6:i386 \ liblo-static \ fluidsynth2-static # Fix for 32bit bridge link sudo ln -s /usr/lib/i386-linux-gnu/libX11.so.6 /usr/lib/i386-linux-gnu/libX11.so elif [ "${TARGET}" = "linux-juce-strict" ]; then sudo apt-get install -y \ g++-multilib \ g++-9-multilib \ pkg-config \ pyqt5-dev-tools \ python3-pyqt5.qtsvg \ python3-rdflib \ libgtk2.0-dev \ libgtk-3-dev \ qtbase5-dev \ libasound2-dev \ libjack-jackd2-dev \ libfreetype6-dev \ libmagic-dev \ libgl1-mesa-dev \ libx11-dev \ libxext-dev \ libx11-6:i386 \ libxext6:i386 \ libfreetype6:i386 \ liblo-static \ fluidsynth2-static # Fix for 32bit bridge links sudo ln -s /usr/lib/i386-linux-gnu/libX11.so.6 /usr/lib/i386-linux-gnu/libX11.so sudo ln -s /usr/lib/i386-linux-gnu/libXext.so.6 /usr/lib/i386-linux-gnu/libXext.so sudo ln -s /usr/lib/i386-linux-gnu/libfreetype.so.6 /usr/lib/i386-linux-gnu/libfreetype.so elif [ "${TARGET}" = "macos" ]; then sudo apt-get install -y \ pkg-config \ apple-x86-setup elif [ "${TARGET}" = "macos-native" ] || [ "${TARGET}" = "macos-universal" ]; then HOMEBREW_NO_AUTO_UPDATE=1 brew install cmake jq meson exit 0 fi elif [ "${TARGET}" = "win32" ]; then sudo apt-get install -y \ g++-multilib \ mingw-w64 \ binutils-mingw-w64-i686 \ binutils-mingw-w64-x86-64 \ g++-mingw-w64-i686 \ g++-mingw-w64-x86-64 \ wine-devel-dev \ winehq-stable elif [ "${TARGET}" = "win64" ]; then sudo apt-get install -y \ mingw-w64 \ binutils-mingw-w64-x86-64 \ g++-mingw-w64-x86-64 \ wine-devel-dev \ winehq-stable elif [ "${TARGET}" = "pylint" ]; then sudo apt-get install -y \ pylint3 \ python3-liblo \ python3-pyqt5 python3-pyqt5.qtsvg python3-pyqt5.qtopengl python3-rdflib \ pyqt5-dev-tools \ qtbase5-dev fi Carla-2.4.2/.travis/script-linux-juce-strict.sh000077500000000000000000000021231420416754300213650ustar00rootroot00000000000000#!/bin/bash set -e # Preparation export CC=gcc-9 export CXX=g++-9 export PKG_CONFIG_PATH=/opt/kxstudio/lib/pkgconfig:${PKG_CONFIG_PATH} unset CFLAGS unset CXXFLAGS unset LDFLAGS # Start clean make distclean >/dev/null # Print available features make USING_JUCE=true features # Build things that we skip strict tests for make USING_JUCE=true 3rd frontend make USING_JUCE=true -C source/modules/juce_audio_basics posix32 make USING_JUCE=true -C source/modules/juce_audio_devices posix32 make USING_JUCE=true -C source/modules/juce_audio_processors posix32 make USING_JUCE=true -C source/modules/juce_core posix32 make USING_JUCE=true -C source/modules/juce_data_structures posix32 make USING_JUCE=true -C source/modules/juce_events posix32 make USING_JUCE=true -C source/modules/juce_graphics posix32 make USING_JUCE=true -C source/modules/juce_gui_basics posix32 make USING_JUCE=true -C source/modules/juce_gui_extra posix32 make USING_JUCE=true -C source/modules/water posix32 # Build native stuff make USING_JUCE=true TESTBUILD=true # Build 32bit bridges make USING_JUCE=true TESTBUILD=true posix32 Carla-2.4.2/.travis/script-linux-strict.sh000077500000000000000000000010361420416754300204430ustar00rootroot00000000000000#!/bin/bash set -e # Preparation export CC=gcc-9 export CXX=g++-9 export PKG_CONFIG_PATH=/opt/kxstudio/lib/pkgconfig:${PKG_CONFIG_PATH} unset CFLAGS unset CXXFLAGS unset LDFLAGS # Start clean make distclean >/dev/null # Print available features make USING_JUCE=false features # Build things that we skip strict tests for make USING_JUCE=false 3rd frontend make USING_JUCE=false -C source/modules/water posix32 # Build native stuff make USING_JUCE=false TESTBUILD=true # Build 32bit bridges make USING_JUCE=false TESTBUILD=true posix32 Carla-2.4.2/.travis/script-linux.sh000077500000000000000000000013551420416754300171410ustar00rootroot00000000000000#!/bin/bash set -e # Preparation _FLAGS="-Werror" export CFLAGS="${_FLAGS}" export CXXFLAGS="${_FLAGS}" export LDFLAGS="-L/opt/kxstudio/lib" export PATH=/opt/kxstudio/bin:${PATH} export PKG_CONFIG_PATH=/opt/kxstudio/lib/pkgconfig:${PKG_CONFIG_PATH} # Start clean make distclean >/dev/null # Print available features make USING_JUCE=false features # Build native stuff make USING_JUCE=false all posix32 posix64 # Build wine bridges make USING_JUCE=false wine32 wine64 plugin-wine # Build windows binaries for bridges env PATH=/opt/mingw32/bin:${PATH} make win32 USING_JUCE=false CC=i686-w64-mingw32-gcc CXX=i686-w64-mingw32-g++ env PATH=/opt/mingw64/bin:${PATH} make win64 USING_JUCE=false CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ Carla-2.4.2/.travis/script-macos.sh000077500000000000000000000005521420416754300171020ustar00rootroot00000000000000#!/bin/bash set -e # Preparation _FLAGS="-Wno-attributes -Wno-deprecated-declarations -Werror -DBUILDING_FOR_CI" export CFLAGS="${_FLAGS}" export CXXFLAGS="${_FLAGS}" export MACOS_OLD=true export CROSS_COMPILING=true . /usr/bin/apple-cross-setup.env # Start clean make distclean >/dev/null # Print available features make features # Build native stuff make Carla-2.4.2/.travis/script-pylint.sh000077500000000000000000000024361420416754300173220ustar00rootroot00000000000000#!/bin/bash set -e make -C source/frontend ln -sf ../patchcanvas source/frontend/widgets/ if which pylint3 >/dev/null; then pylint='pylint3' else pylint='pylint' fi # widget code, check all errors ${pylint} \ --extension-pkg-whitelist=PyQt5 \ --max-attributes=25 \ --max-line-length=120 \ --max-locals=25 \ --max-statements=100 \ --enable=\ bad-continuation,\ len-as-condition \ --disable=\ bad-whitespace,\ broad-except,\ fixme,\ invalid-name,\ missing-docstring \ source/frontend/widgets/canvaspreviewframe.py \ source/frontend/widgets/racklistwidget.py # main app code, ignore some errors ${pylint} \ --extension-pkg-whitelist=PyQt5 \ --max-line-length=120 \ --disable=\ bad-whitespace,\ bare-except,\ blacklisted-name,\ duplicate-code,\ fixme,\ invalid-name,\ missing-docstring,\ too-few-public-methods,\ too-many-arguments,\ too-many-branches,\ too-many-instance-attributes,\ too-many-lines,\ too-many-locals,\ too-many-public-methods,\ too-many-return-statements,\ too-many-statements,\ unused-argument,\ wrong-import-position \ source/frontend/carla_{app,backend,backend_qt,settings,shared,utils,widgets}.py # code not updated yet ${pylint} \ --extension-pkg-whitelist=PyQt5 \ -E \ source/frontend/carla_{database,host,skin}.py Carla-2.4.2/.travis/script-win32.sh000077500000000000000000000014231420416754300167400ustar00rootroot00000000000000#!/bin/bash set -e # Preparation _FLAGS="-DFLUIDSYNTH_NOT_A_DLL -DPTW32_STATIC_LIB -Werror -DBUILDING_FOR_CI" _PREFIX=i686-w64-mingw32 export AR=${_PREFIX}-ar export CC=${_PREFIX}-gcc export CXX=${_PREFIX}-g++ export CFLAGS="${_FLAGS}" export CXXFLAGS="${_FLAGS}" export PATH=/opt/mingw32/${_PREFIX}/bin:/opt/mingw32/bin:${PATH} export PKG_CONFIG_PATH=/opt/mingw32/lib/pkgconfig:${PKG_CONFIG_PATH} export CROSS_COMPILING=true MAKE_ARGS="BUILDING_FOR_WINDOWS=true CROSS_COMPILING=true USING_JUCE=false USING_JUCE_AUDIO_DEVICES=false" MAKE_ARGS="${MAKE_ARGS} HAVE_FLUIDSYNTH=false HAVE_LIBLO=false HAVE_QT5=false HAVE_SNDFILE=false NEEDS_WINE=false" # Start clean make distclean >/dev/null # Print available features make ${MAKE_ARGS} features # Build native stuff make ${MAKE_ARGS} Carla-2.4.2/.travis/script-win64.sh000077500000000000000000000014251420416754300167470ustar00rootroot00000000000000#!/bin/bash set -e # Preparation _FLAGS="-DFLUIDSYNTH_NOT_A_DLL -DPTW32_STATIC_LIB -Werror -DBUILDING_FOR_CI" _PREFIX=x86_64-w64-mingw32 export AR=${_PREFIX}-ar export CC=${_PREFIX}-gcc export CXX=${_PREFIX}-g++ export CFLAGS="${_FLAGS}" export CXXFLAGS="${_FLAGS}" export PATH=/opt/mingw64/${_PREFIX}/bin:/opt/mingw64/bin:${PATH} export PKG_CONFIG_PATH=/opt/mingw64/lib/pkgconfig:${PKG_CONFIG_PATH} export CROSS_COMPILING=true MAKE_ARGS="BUILDING_FOR_WINDOWS=true CROSS_COMPILING=true USING_JUCE=false USING_JUCE_AUDIO_DEVICES=false" MAKE_ARGS="${MAKE_ARGS} HAVE_FLUIDSYNTH=false HAVE_LIBLO=false HAVE_QT5=false HAVE_SNDFILE=false NEEDS_WINE=false" # Start clean make distclean >/dev/null # Print available features make ${MAKE_ARGS} features # Build native stuff make ${MAKE_ARGS} Carla-2.4.2/INSTALL.md000066400000000000000000000055601420416754300142050ustar00rootroot00000000000000# INSTALL for Carla NOTE: when using MSYS2 on Windows, an additional step is necessary in order to solve an issue with symbolic links to some dependency folders before build: ``` $ make msys2fix ``` To install Carla, simply run as usual: ``` $ make $ [sudo] make install ``` You can run it without installing, by using instead: ``` $ make $ ./source/frontend/carla ``` Packagers can make use of the `PREFIX` and `DESTDIR` variable during install, like this: ``` $ make install PREFIX=/usr DESTDIR=./test-dir ``` ## BUILD DEPENDENCIES There are no required build dependencies. The default build is probably not what you want though. If you want the frontend (which is likely), you will need PyQt5 (python3 version). You likely will also want: - libmagic/file (for auto-detection of binary types, needed for plugin-bridges) - liblo (for OSC support, also a requirement for DSSI UIs) Optional for extra Linux-only engine features: - ALSA - PulseAudio - X11 (LV2/VST X11 UI support) Optional for extended LV2 UIs support: (Linux only) - Gtk2 - Gtk3 - Qt4 - Qt5 Optional for extra samplers support: - FluidSynth (SF2/3) Optional for extra LADSPA plugin information: - python3-rdflib You can use: ``` $ make features ``` To find out which dependencies are missing. Under Debian based systems, you can use this command to install everything: ``` sudo apt install python3-pyqt5.qtsvg python3-rdflib pyqt5-dev-tools \ libmagic-dev liblo-dev libasound2-dev libpulse-dev libx11-dev \ libgtk2.0-dev libgtk-3-dev libqt4-dev qtbase5-dev libfluidsynth-dev ``` Under Fedora, you can use the following command instead: ``` sudo dnf install python3-qt5-devel python3-rdflib \ file-devel liblo-devel alsa-lib-devel pulseaudio-libs-devel libX11-devel gtk2-devel gtk3-devel qt4-devel qt5-devel fluidsynth-devel libsndfile-devel ``` ## BUILD BRIDGES (Experimental) Carla can make use of plugin bridges to load additional plugin types. ### 32bit plugins on 64bit systems Simply run `make posix32` after a regular Carla build, and install or run Carla locally.
This feature requires a compiler capable of building 32bit binaries. ### JACK Applications inside Carla This is built by default on Linux systems.
Requires LD_PRELOAD support by the OS and the GCC compiler.
Does not work with clang. (if you discover why, please let me know!) ### Windows plugins (via Wine) Requires a mingw compiler, and winegcc. First, we build the Windows bridges using mingw, like this: (adjust as needed) ``` make win32 CC=i686-w64-mingw32-gcc CXX=i686-w64-mingw32-g++ make win64 CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ ``` To finalize, we build the wine<->native bridges using winegcc: ``` make wine32 make wine64 ``` Then install or run Carla locally as usual.
Don't forget to enable experimental options and plugin bridges in Carla settings to actually be able to use them. Carla-2.4.2/Makefile000066400000000000000000000676771420416754300142360ustar00rootroot00000000000000#!/usr/bin/make -f # Makefile for Carla # # ------------------ # # Created by falkTX # CWD=source include source/Makefile.mk # --------------------------------------------------------------------------------------------------------------------- PREFIX := /usr/local BINDIR := $(PREFIX)/bin LIBDIR := $(PREFIX)/lib DATADIR := $(PREFIX)/share INCLUDEDIR := $(PREFIX)/include DESTDIR := ifeq ($(DEBUG),true) MODULEDIR := $(CURDIR)/build/modules/Debug else MODULEDIR := $(CURDIR)/build/modules/Release endif VERSION := 2.4.2 -include Makefile.user.mk # --------------------------------------------------------------------------------------------------------------------- all: backend discovery bridges-plugin bridges-ui frontend interposer libjack plugin theme # --------------------------------------------------------------------------------------------------------------------- # Binaries (native) ifneq ($(STATIC_PLUGIN_TARGET),true) ALL_LIBS += $(MODULEDIR)/carla_engine.a endif ALL_LIBS += $(MODULEDIR)/carla_engine_plugin.a ALL_LIBS += $(MODULEDIR)/carla_plugin.a ALL_LIBS += $(MODULEDIR)/jackbridge.a ifeq ($(STATIC_PLUGIN_TARGET),true) ALL_LIBS += $(MODULEDIR)/jackbridge.min.a endif ALL_LIBS += $(MODULEDIR)/native-plugins.a ALL_LIBS += $(MODULEDIR)/rtmempool.a 3RD_LIBS += $(MODULEDIR)/audio_decoder.a 3RD_LIBS += $(MODULEDIR)/lilv.a 3RD_LIBS += $(MODULEDIR)/sfzero.a 3RD_LIBS += $(MODULEDIR)/water.a 3RD_LIBS += $(MODULEDIR)/zita-resampler.a ifeq ($(HAVE_DGL),true) 3RD_LIBS += $(MODULEDIR)/dgl.a endif ifeq ($(HAVE_HYLIA),true) 3RD_LIBS += $(MODULEDIR)/hylia.a endif ifeq ($(HAVE_QT4),true) 3RD_LIBS += $(MODULEDIR)/theme.qt4.a endif ifeq ($(HAVE_QT5),true) 3RD_LIBS += $(MODULEDIR)/theme.qt5.a endif ifeq ($(USING_JUCE),true) 3RD_LIBS += $(MODULEDIR)/juce_audio_basics.a ifeq ($(USING_JUCE_AUDIO_DEVICES),true) 3RD_LIBS += $(MODULEDIR)/juce_audio_devices.a endif 3RD_LIBS += $(MODULEDIR)/juce_audio_processors.a 3RD_LIBS += $(MODULEDIR)/juce_core.a 3RD_LIBS += $(MODULEDIR)/juce_data_structures.a 3RD_LIBS += $(MODULEDIR)/juce_events.a 3RD_LIBS += $(MODULEDIR)/juce_graphics.a 3RD_LIBS += $(MODULEDIR)/juce_gui_basics.a ifeq ($(USING_JUCE_GUI_EXTRA),true) 3RD_LIBS += $(MODULEDIR)/juce_gui_extra.a endif endif ifeq ($(USING_RTAUDIO),true) 3RD_LIBS += $(MODULEDIR)/rtaudio.a 3RD_LIBS += $(MODULEDIR)/rtmidi.a endif ALL_LIBS += $(3RD_LIBS) 3rd: $(3RD_LIBS) @$(MAKE) -C source/theme ifeq ($(HAVE_QT4),true) @$(MAKE) -C source/bridges-ui ui_lv2-qt4 endif libs: $(ALL_LIBS) $(MODULEDIR)/carla_engine.a: .FORCE @$(MAKE) -C source/backend/engine $(MODULEDIR)/carla_engine_plugin.a: $(MODULEDIR)/carla_engine.a @$(MAKE) -C source/backend/engine $(MODULEDIR)/carla_plugin.a: .FORCE @$(MAKE) -C source/backend/plugin $(MODULEDIR)/jackbridge.a: .FORCE @$(MAKE) -C source/jackbridge $(MODULEDIR)/jackbridge.%.a: $(MODULEDIR)/jackbridge.a @$(MAKE) -C source/jackbridge $* $(MODULEDIR)/native-plugins.a: .FORCE @$(MAKE) -C source/native-plugins $(MODULEDIR)/theme.qt4.a: .FORCE @$(MAKE) -C source/theme qt4 $(MODULEDIR)/theme.qt5.a: .FORCE @$(MAKE) -C source/theme qt5 $(MODULEDIR)/%.arm32.a: .FORCE ifneq ($(WIN32),true) @$(MAKE) -C source/modules/$* arm32 else $(error Trying to build ARM binaries with a Windows toolchain, this cannot work) endif $(MODULEDIR)/%.posix32.a: .FORCE ifneq ($(WIN32),true) @$(MAKE) -C source/modules/$* posix32 else $(error Trying to build POSIX binaries with a Windows toolchain, this cannot work) endif $(MODULEDIR)/%.posix64.a: .FORCE ifneq ($(WIN32),true) @$(MAKE) -C source/modules/$* posix64 else $(error Trying to build POSIX binaries with a Windows toolchain, this cannot work) endif $(MODULEDIR)/%.win32.a: .FORCE ifeq ($(WIN32),true) @$(MAKE) -C source/modules/$* win32 else $(error Trying to build Windows binaries with a regular toolchain, this cannot work) endif $(MODULEDIR)/%.win64.a: .FORCE ifeq ($(WIN32),true) @$(MAKE) -C source/modules/$* win64 else $(error Trying to build Windows binaries with a regular toolchain, this cannot work) endif $(MODULEDIR)/dgl.wine.a: .FORCE @$(MAKE) -C source/modules/dgl wine $(MODULEDIR)/water.files.a: .FORCE @$(MAKE) -C source/modules/water files $(MODULEDIR)/%.a: .FORCE @$(MAKE) -C source/modules/$* # --------------------------------------------------------------------------------------------------------------------- backend: libs @$(MAKE) -C source/backend bridges-plugin: libs @$(MAKE) -C source/bridges-plugin bridges-ui: libs @$(MAKE) -C source/bridges-ui discovery: libs @$(MAKE) -C source/discovery frontend: libs ifeq ($(HAVE_PYQT),true) @$(MAKE) -C source/frontend endif interposer: ifeq ($(LINUX),true) @$(MAKE) -C source/interposer endif libjack: libs @$(MAKE) -C source/libjack lv2-bundles-dep: $(MODULEDIR)/audio_decoder.a $(MODULEDIR)/water.a $(MODULEDIR)/zita-resampler.a @$(MAKE) -C source/native-plugins bundles lv2-bundles: lv2-bundles-dep @$(MAKE) -C source/plugin bundles plugin: backend bridges-plugin bridges-ui discovery @$(MAKE) -C source/plugin ifeq ($(WIN32),true) plugin-wine: @$(MAKE) -C source/plugin wine else plugin-wine: $(MODULEDIR)/dgl.wine.a @$(MAKE) -C source/plugin wine endif rest: libs @$(MAKE) -C source/rest theme: libs @$(MAKE) -C source/theme # --------------------------------------------------------------------------------------------------------------------- # static targets static-backend: libs @$(MAKE) -C source/backend static static-plugin: static-backend @$(MAKE) -C source/plugin static # --------------------------------------------------------------------------------------------------------------------- # hacks msys2fix: rm -rf source/includes/serd rm -rf source/includes/sord rm -rf source/includes/sratom rm -rf source/includes/lilv cp -r source/modules/lilv/serd-0.24.0/serd source/includes/serd cp -r source/modules/lilv/sord-0.16.0/sord source/includes/sord cp -r source/modules/lilv/sratom-0.6.0/sratom source/includes/sratom cp -r source/modules/lilv/lilv-0.24.0/lilv source/includes/lilv # --------------------------------------------------------------------------------------------------------------------- # Binaries (arm32) LIBS_ARM32 = $(MODULEDIR)/jackbridge.arm32.a LIBS_ARM32 += $(MODULEDIR)/lilv.arm32.a LIBS_ARM32 += $(MODULEDIR)/rtmempool.arm32.a LIBS_ARM32 += $(MODULEDIR)/water.arm32.a arm32: $(LIBS_ARM32) $(MAKE) -C source/bridges-plugin arm32 $(MAKE) -C source/discovery arm32 # --------------------------------------------------------------------------------------------------------------------- # Binaries (posix32) LIBS_POSIX32 = $(MODULEDIR)/jackbridge.posix32.a LIBS_POSIX32 += $(MODULEDIR)/lilv.posix32.a LIBS_POSIX32 += $(MODULEDIR)/rtmempool.posix32.a LIBS_POSIX32 += $(MODULEDIR)/water.posix32.a ifeq ($(USING_JUCE),true) LIBS_POSIX32 += $(MODULEDIR)/juce_audio_basics.posix32.a LIBS_POSIX32 += $(MODULEDIR)/juce_audio_processors.posix32.a LIBS_POSIX32 += $(MODULEDIR)/juce_data_structures.posix32.a LIBS_POSIX32 += $(MODULEDIR)/juce_core.posix32.a LIBS_POSIX32 += $(MODULEDIR)/juce_events.posix32.a LIBS_POSIX32 += $(MODULEDIR)/juce_graphics.posix32.a LIBS_POSIX32 += $(MODULEDIR)/juce_gui_basics.posix32.a ifeq ($(USING_JUCE_GUI_EXTRA),true) LIBS_POSIX32 += $(MODULEDIR)/juce_gui_extra.posix32.a endif endif posix32: $(LIBS_POSIX32) $(MAKE) -C source/bridges-plugin posix32 $(MAKE) -C source/discovery posix32 # --------------------------------------------------------------------------------------------------------------------- # Binaries (posix64) LIBS_POSIX64 = $(MODULEDIR)/jackbridge.posix64.a LIBS_POSIX64 += $(MODULEDIR)/lilv.posix64.a LIBS_POSIX64 += $(MODULEDIR)/rtmempool.posix64.a LIBS_POSIX64 += $(MODULEDIR)/water.posix64.a ifeq ($(USING_JUCE),true) LIBS_POSIX64 += $(MODULEDIR)/juce_audio_basics.posix64.a LIBS_POSIX64 += $(MODULEDIR)/juce_audio_processors.posix64.a LIBS_POSIX64 += $(MODULEDIR)/juce_data_structures.posix64.a LIBS_POSIX64 += $(MODULEDIR)/juce_core.posix64.a LIBS_POSIX64 += $(MODULEDIR)/juce_events.posix64.a LIBS_POSIX64 += $(MODULEDIR)/juce_graphics.posix64.a LIBS_POSIX64 += $(MODULEDIR)/juce_gui_basics.posix64.a ifeq ($(USING_JUCE_GUI_EXTRA),true) LIBS_POSIX64 += $(MODULEDIR)/juce_gui_extra.posix64.a endif endif posix64: $(LIBS_POSIX64) $(MAKE) -C source/bridges-plugin posix64 $(MAKE) -C source/discovery posix64 # --------------------------------------------------------------------------------------------------------------------- # Binaries (win32) LIBS_WIN32 += $(MODULEDIR)/lilv.win32.a LIBS_WIN32 += $(MODULEDIR)/rtmempool.win32.a LIBS_WIN32 += $(MODULEDIR)/water.win32.a ifeq ($(USING_JUCE),true) LIBS_WIN32 += $(MODULEDIR)/juce_audio_basics.win32.a LIBS_WIN32 += $(MODULEDIR)/juce_audio_processors.win32.a LIBS_WIN32 += $(MODULEDIR)/juce_data_structures.win32.a LIBS_WIN32 += $(MODULEDIR)/juce_core.win32.a LIBS_WIN32 += $(MODULEDIR)/juce_events.win32.a LIBS_WIN32 += $(MODULEDIR)/juce_graphics.win32.a LIBS_WIN32 += $(MODULEDIR)/juce_gui_basics.win32.a ifeq ($(USING_JUCE_GUI_EXTRA),true) LIBS_WIN32 += $(MODULEDIR)/juce_gui_extra.win32.a endif endif LIBS_WINE32 = $(LIBS_WIN32) $(MODULEDIR)/jackbridge.win32e.a LIBS_RWIN32 = $(LIBS_WIN32) $(MODULEDIR)/jackbridge.win32.a win32: $(LIBS_WINE32) $(MAKE) BUILDING_FOR_WINE=true -C source/bridges-plugin win32 $(MAKE) BUILDING_FOR_WINE=true -C source/discovery win32 win32r: $(LIBS_RWIN32) ifeq ($(CC),x86_64-w64-mingw32-gcc) $(MAKE) CC=i686-w64-mingw32-gcc CXX=i686-w64-mingw32-g++ -C source/bridges-plugin win32 $(MAKE) CC=i686-w64-mingw32-gcc CXX=i686-w64-mingw32-g++ -C source/discovery win32 else $(MAKE) -C source/bridges-plugin win32 $(MAKE) -C source/discovery win32 endif # --------------------------------------------------------------------------------------------------------------------- # Binaries (win64) LIBS_WIN64 += $(MODULEDIR)/lilv.win64.a LIBS_WIN64 += $(MODULEDIR)/rtmempool.win64.a LIBS_WIN64 += $(MODULEDIR)/water.win64.a ifeq ($(USING_JUCE),true) LIBS_WIN64 += $(MODULEDIR)/juce_audio_basics.win64.a LIBS_WIN64 += $(MODULEDIR)/juce_audio_processors.win64.a LIBS_WIN64 += $(MODULEDIR)/juce_data_structures.win64.a LIBS_WIN64 += $(MODULEDIR)/juce_core.win64.a LIBS_WIN64 += $(MODULEDIR)/juce_events.win64.a LIBS_WIN64 += $(MODULEDIR)/juce_graphics.win64.a LIBS_WIN64 += $(MODULEDIR)/juce_gui_basics.win64.a ifeq ($(USING_JUCE_GUI_EXTRA),true) LIBS_WIN64 += $(MODULEDIR)/juce_gui_extra.win64.a endif endif LIBS_WINE64 = $(LIBS_WIN64) $(MODULEDIR)/jackbridge.win64e.a LIBS_RWIN64 = $(LIBS_WIN64) $(MODULEDIR)/jackbridge.win64.a win64: $(LIBS_WINE64) $(MAKE) BUILDING_FOR_WINE=true -C source/bridges-plugin win64 $(MAKE) BUILDING_FOR_WINE=true -C source/discovery win64 win64r: $(LIBS_RWIN64) ifeq ($(CC),i686-w64-mingw32-gcc) $(MAKE) CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ -C source/bridges-plugin win64 $(MAKE) CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ -C source/discovery win64 else $(MAKE) -C source/bridges-plugin win64 $(MAKE) -C source/discovery win64 endif # --------------------------------------------------------------------------------------------------------------------- # Binaries (wine) wine32: $(MAKE) -C source/jackbridge wine32 cp -f $(MODULEDIR)/jackbridge-wine32.dll.so $(CURDIR)/bin/jackbridge-wine32.dll wine64: $(MAKE) -C source/jackbridge wine64 cp -f $(MODULEDIR)/jackbridge-wine64.dll.so $(CURDIR)/bin/jackbridge-wine64.dll # --------------------------------------------------------------------------------------------------------------------- clean: $(MAKE) clean -C source/backend $(MAKE) clean -C source/bridges-plugin $(MAKE) clean -C source/bridges-ui $(MAKE) clean -C source/modules $(MAKE) clean -C source/native-plugins $(MAKE) clean -C source/plugin ifneq ($(STATIC_PLUGIN_TARGET),true) $(MAKE) clean -C source/discovery $(MAKE) clean -C source/frontend $(MAKE) clean -C source/interposer $(MAKE) clean -C source/libjack $(MAKE) clean -C source/tests $(MAKE) clean -C source/theme endif rm -f *~ source/*~ distclean: clean rm -f bin/*.exe bin/*.dll bin/*.dylib bin/*.so rm -rf build build-lv2 cpp: $(MAKE) CPPMODE=true debug: $(MAKE) DEBUG=true doxygen: $(MAKE) doxygen -C source/backend tests: $(MAKE) -C source/tests stoat: stoat --recursive ./build/ --suppression ./data/stoat-supression.txt --whitelist ./data/stoat-whitelist.txt --graph-view ./data/stoat-callgraph.png # stoat --recursive ./build/ \ # --suppression ./data/stoat-supression.txt \ # --whitelist ./data/stoat-whitelist.txt \ # --graph-view ./data/stoat-callgraph.png # --------------------------------------------------------------------------------------------------------------------- install_main: # Create directories install -d $(DESTDIR)$(BINDIR) install -d $(DESTDIR)$(DATADIR)/carla/resources ifeq ($(LINUX),true) install -d $(DESTDIR)$(LIBDIR)/carla/jack else install -d $(DESTDIR)$(LIBDIR)/carla endif install -d $(DESTDIR)$(LIBDIR)/pkgconfig install -d $(DESTDIR)$(INCLUDEDIR)/carla/includes ifeq ($(LINUX),true) ifeq ($(HAVE_JACK),true) ifeq ($(JACKBRIDGE_DIRECT),true) install -d $(DESTDIR)$(JACK_LIBDIR) endif endif endif ifeq ($(HAVE_PYQT),true) # Create directories (gui) install -d $(DESTDIR)$(LIBDIR)/carla/styles install -d $(DESTDIR)$(PREFIX)/share/appdata install -d $(DESTDIR)$(DATADIR)/applications install -d $(DESTDIR)$(DATADIR)/icons/hicolor/16x16/apps install -d $(DESTDIR)$(DATADIR)/icons/hicolor/32x32/apps install -d $(DESTDIR)$(DATADIR)/icons/hicolor/48x48/apps install -d $(DESTDIR)$(DATADIR)/icons/hicolor/128x128/apps install -d $(DESTDIR)$(DATADIR)/icons/hicolor/256x256/apps install -d $(DESTDIR)$(DATADIR)/icons/hicolor/scalable/apps install -d $(DESTDIR)$(DATADIR)/mime/packages install -d $(DESTDIR)$(DATADIR)/carla/resources/translations install -d $(DESTDIR)$(DATADIR)/carla/modgui install -d $(DESTDIR)$(DATADIR)/carla/patchcanvas install -d $(DESTDIR)$(DATADIR)/carla/widgets endif # ------------------------------------------------------------------------------------------------------------- # Install script files (non-gui) install -m 755 \ data/carla-single \ $(DESTDIR)$(BINDIR) # Adjust PREFIX value in script files (non-gui) sed $(SED_ARGS) 's?X-PREFIX-X?$(PREFIX)?' \ $(DESTDIR)$(BINDIR)/carla-single # Install backend libs install -m 644 \ bin/libcarla_*.* \ $(DESTDIR)$(LIBDIR)/carla # Install other binaries install -m 755 \ bin/*bridge-* \ bin/carla-discovery-* \ $(DESTDIR)$(LIBDIR)/carla ifeq ($(LINUX),true) ifeq ($(HAVE_JACK),true) ifeq ($(JACKBRIDGE_DIRECT),true) # Install internal jack client ln -sf \ $(LIBDIR)/carla/libcarla_standalone2.so \ $(DESTDIR)$(JACK_LIBDIR)/carla.so endif endif ifneq ($(JACKBRIDGE_DIRECT),true) # Install custom libjack install -m 755 \ bin/jack/libjack.so.0 \ $(DESTDIR)$(LIBDIR)/carla/jack endif endif # Install pkg-config files install -m 644 \ data/pkgconfig/*.pc \ $(DESTDIR)$(LIBDIR)/pkgconfig # Adjust PREFIX, LIBDIR, INCLUDEDIR and VERSION in pkg-config files sed $(SED_ARGS) 's?X-PREFIX-X?$(PREFIX)?' \ $(DESTDIR)$(LIBDIR)/pkgconfig/carla-host-plugin.pc \ $(DESTDIR)$(LIBDIR)/pkgconfig/carla-native-plugin.pc \ $(DESTDIR)$(LIBDIR)/pkgconfig/carla-standalone.pc \ $(DESTDIR)$(LIBDIR)/pkgconfig/carla-utils.pc sed $(SED_ARGS) 's?X-LIBDIR-X?$(LIBDIR)?' \ $(DESTDIR)$(LIBDIR)/pkgconfig/carla-host-plugin.pc \ $(DESTDIR)$(LIBDIR)/pkgconfig/carla-native-plugin.pc \ $(DESTDIR)$(LIBDIR)/pkgconfig/carla-standalone.pc \ $(DESTDIR)$(LIBDIR)/pkgconfig/carla-utils.pc sed $(SED_ARGS) 's?X-INCLUDEDIR-X?$(INCLUDEDIR)?' \ $(DESTDIR)$(LIBDIR)/pkgconfig/carla-host-plugin.pc \ $(DESTDIR)$(LIBDIR)/pkgconfig/carla-native-plugin.pc \ $(DESTDIR)$(LIBDIR)/pkgconfig/carla-standalone.pc \ $(DESTDIR)$(LIBDIR)/pkgconfig/carla-utils.pc sed $(SED_ARGS) 's?X-VERSION-X?$(VERSION)?' \ $(DESTDIR)$(LIBDIR)/pkgconfig/carla-host-plugin.pc \ $(DESTDIR)$(LIBDIR)/pkgconfig/carla-native-plugin.pc \ $(DESTDIR)$(LIBDIR)/pkgconfig/carla-standalone.pc \ $(DESTDIR)$(LIBDIR)/pkgconfig/carla-utils.pc # Install headers install -m 644 \ source/backend/CarlaBackend.h \ source/backend/CarlaHost.h \ source/backend/CarlaUtils.h \ source/backend/CarlaEngine.hpp \ source/backend/CarlaPlugin.hpp \ source/backend/CarlaPluginPtr.hpp \ source/includes/CarlaNative.h \ source/includes/CarlaNativePlugin.h \ $(DESTDIR)$(INCLUDEDIR)/carla install -m 644 \ source/includes/CarlaDefines.h \ source/includes/CarlaMIDI.h \ source/includes/CarlaNative.h \ source/includes/CarlaNativePlugin.h \ $(DESTDIR)$(INCLUDEDIR)/carla/includes # ------------------------------------------------------------------------------------------------------------- ifeq ($(HAVE_PYQT),true) ifneq ($(CPPMODE),true) # Install script files (gui) install -m 755 \ data/carla \ data/carla-database \ data/carla-jack-multi \ data/carla-jack-single \ data/carla-jack-patchbayplugin \ data/carla-osc-gui \ data/carla-patchbay \ data/carla-rack \ data/carla-settings \ $(DESTDIR)$(BINDIR) # Adjust PREFIX value in script files (gui) sed $(SED_ARGS) 's?X-PREFIX-X?$(PREFIX)?' \ $(DESTDIR)$(BINDIR)/carla \ $(DESTDIR)$(BINDIR)/carla-database \ $(DESTDIR)$(BINDIR)/carla-jack-multi \ $(DESTDIR)$(BINDIR)/carla-jack-single \ $(DESTDIR)$(BINDIR)/carla-jack-patchbayplugin \ $(DESTDIR)$(BINDIR)/carla-osc-gui \ $(DESTDIR)$(BINDIR)/carla-patchbay \ $(DESTDIR)$(BINDIR)/carla-rack \ $(DESTDIR)$(BINDIR)/carla-settings ifeq ($(HAVE_LIBLO),true) install -m 755 \ data/carla-control \ $(DESTDIR)$(BINDIR) sed $(SED_ARGS) 's?X-PREFIX-X?$(PREFIX)?' \ $(DESTDIR)$(BINDIR)/carla-control endif # Install the real modgui bridge install -m 755 \ data/carla-bridge-lv2-modgui \ $(DESTDIR)$(LIBDIR)/carla sed $(SED_ARGS) 's?X-PREFIX-X?$(PREFIX)?' \ $(DESTDIR)$(LIBDIR)/carla/carla-bridge-lv2-modgui # Install frontend install -m 644 \ source/frontend/carla \ source/frontend/carla-control \ source/frontend/carla-jack-multi \ source/frontend/carla-jack-single \ source/frontend/carla-patchbay \ source/frontend/carla-rack \ source/frontend/*.py \ $(DESTDIR)$(DATADIR)/carla/ install -m 644 \ source/frontend/modgui/*.py \ $(DESTDIR)$(DATADIR)/carla/modgui/ install -m 644 \ source/frontend/patchcanvas/*.py \ $(DESTDIR)$(DATADIR)/carla/patchcanvas/ install -m 644 \ source/frontend/widgets/*.py \ $(DESTDIR)$(DATADIR)/carla/widgets/ # Adjust LIBDIR and DATADIR value in python code sed $(SED_ARGS) 's?X_LIBDIR_X = None?X_LIBDIR_X = "$(LIBDIR)"?' \ $(DESTDIR)$(DATADIR)/carla/carla_shared.py sed $(SED_ARGS) 's?X_DATADIR_X = None?X_DATADIR_X = "$(DATADIR)"?' \ $(DESTDIR)$(DATADIR)/carla/carla_shared.py # Install resources (gui) install -m 755 \ bin/resources/carla-plugin \ bin/resources/carla-plugin-patchbay \ bin/resources/*-ui \ $(DESTDIR)$(DATADIR)/carla/resources endif # CPPMODE ifeq ($(HAVE_THEME),true) # Install theme install -m 644 \ bin/styles/* \ $(DESTDIR)$(LIBDIR)/carla/styles endif # Install desktop files install -m 644 data/desktop/carla.desktop $(DESTDIR)$(DATADIR)/applications install -m 644 data/desktop/carla-rack.desktop $(DESTDIR)$(DATADIR)/applications install -m 644 data/desktop/carla-patchbay.desktop $(DESTDIR)$(DATADIR)/applications install -m 644 data/desktop/carla-jack-single.desktop $(DESTDIR)$(DATADIR)/applications install -m 644 data/desktop/carla-jack-multi.desktop $(DESTDIR)$(DATADIR)/applications ifeq ($(HAVE_LIBLO),true) install -m 644 data/desktop/carla-control.desktop $(DESTDIR)$(DATADIR)/applications endif # Install app data sed -e 's?X-VERSION-X?$(VERSION)?' \ data/appdata.xml > $(DESTDIR)$(PREFIX)/share/appdata/studio.kx.carla.appdata.xml # Install mime package install -m 644 data/carla.xml $(DESTDIR)$(DATADIR)/mime/packages # Install icons, 16x16 install -m 644 resources/16x16/carla.png $(DESTDIR)$(DATADIR)/icons/hicolor/16x16/apps install -m 644 resources/16x16/carla-control.png $(DESTDIR)$(DATADIR)/icons/hicolor/16x16/apps # Install icons, 32x32 install -m 644 resources/32x32/carla.png $(DESTDIR)$(DATADIR)/icons/hicolor/32x32/apps install -m 644 resources/32x32/carla-control.png $(DESTDIR)$(DATADIR)/icons/hicolor/32x32/apps # Install icons, 48x48 install -m 644 resources/48x48/carla.png $(DESTDIR)$(DATADIR)/icons/hicolor/48x48/apps install -m 644 resources/48x48/carla-control.png $(DESTDIR)$(DATADIR)/icons/hicolor/48x48/apps # Install icons, 128x128 install -m 644 resources/128x128/carla.png $(DESTDIR)$(DATADIR)/icons/hicolor/128x128/apps install -m 644 resources/128x128/carla-control.png $(DESTDIR)$(DATADIR)/icons/hicolor/128x128/apps # Install icons, 256x256 install -m 644 resources/256x256/carla.png $(DESTDIR)$(DATADIR)/icons/hicolor/256x256/apps install -m 644 resources/256x256/carla-control.png $(DESTDIR)$(DATADIR)/icons/hicolor/256x256/apps # Install icons, scalable install -m 644 resources/scalable/carla.svg $(DESTDIR)$(DATADIR)/icons/hicolor/scalable/apps install -m 644 resources/scalable/carla-control.svg $(DESTDIR)$(DATADIR)/icons/hicolor/scalable/apps # Install resources (re-use python files) $(LINK) ../modgui $(DESTDIR)$(DATADIR)/carla/resources $(LINK) ../patchcanvas $(DESTDIR)$(DATADIR)/carla/resources $(LINK) ../widgets $(DESTDIR)$(DATADIR)/carla/resources $(LINK) ../carla_app.py $(DESTDIR)$(DATADIR)/carla/resources $(LINK) ../carla_backend.py $(DESTDIR)$(DATADIR)/carla/resources $(LINK) ../carla_backend_qt.py $(DESTDIR)$(DATADIR)/carla/resources $(LINK) ../carla_database.py $(DESTDIR)$(DATADIR)/carla/resources $(LINK) ../carla_host.py $(DESTDIR)$(DATADIR)/carla/resources $(LINK) ../carla_host_control.py $(DESTDIR)$(DATADIR)/carla/resources $(LINK) ../carla_settings.py $(DESTDIR)$(DATADIR)/carla/resources $(LINK) ../carla_skin.py $(DESTDIR)$(DATADIR)/carla/resources $(LINK) ../carla_shared.py $(DESTDIR)$(DATADIR)/carla/resources $(LINK) ../carla_utils.py $(DESTDIR)$(DATADIR)/carla/resources $(LINK) ../carla_widgets.py $(DESTDIR)$(DATADIR)/carla/resources $(LINK) ../externalui.py $(DESTDIR)$(DATADIR)/carla/resources $(LINK) ../resources_rc.py $(DESTDIR)$(DATADIR)/carla/resources $(LINK) ../ui_carla_about.py $(DESTDIR)$(DATADIR)/carla/resources $(LINK) ../ui_carla_about_juce.py $(DESTDIR)$(DATADIR)/carla/resources $(LINK) ../ui_carla_add_jack.py $(DESTDIR)$(DATADIR)/carla/resources $(LINK) ../ui_carla_database.py $(DESTDIR)$(DATADIR)/carla/resources $(LINK) ../ui_carla_edit.py $(DESTDIR)$(DATADIR)/carla/resources $(LINK) ../ui_carla_host.py $(DESTDIR)$(DATADIR)/carla/resources $(LINK) ../ui_carla_parameter.py $(DESTDIR)$(DATADIR)/carla/resources $(LINK) ../ui_carla_plugin_calf.py $(DESTDIR)$(DATADIR)/carla/resources $(LINK) ../ui_carla_plugin_classic.py $(DESTDIR)$(DATADIR)/carla/resources $(LINK) ../ui_carla_plugin_compact.py $(DESTDIR)$(DATADIR)/carla/resources $(LINK) ../ui_carla_plugin_default.py $(DESTDIR)$(DATADIR)/carla/resources $(LINK) ../ui_carla_plugin_presets.py $(DESTDIR)$(DATADIR)/carla/resources $(LINK) ../ui_carla_refresh.py $(DESTDIR)$(DATADIR)/carla/resources $(LINK) ../ui_carla_settings.py $(DESTDIR)$(DATADIR)/carla/resources $(LINK) ../ui_carla_settings_driver.py $(DESTDIR)$(DATADIR)/carla/resources $(LINK) ../ui_inputdialog_value.py $(DESTDIR)$(DATADIR)/carla/resources $(LINK) ../ui_midipattern.py $(DESTDIR)$(DATADIR)/carla/resources $(LINK) ../ui_xycontroller.py $(DESTDIR)$(DATADIR)/carla/resources # Install translations $(foreach l,$(I18N_LANGUAGES),install -m 644 \ source/frontend/translations/carla_$(l).qm \ $(DESTDIR)$(DATADIR)/carla/resources/translations/;) endif # HAVE_PYQT # ------------------------------------------------------------------------------------------------------------- ifeq ($(CAN_GENERATE_LV2_TTL),true) # Install lv2 plugin install -d $(DESTDIR)$(LIBDIR)/lv2/carla.lv2 install -m 644 \ bin/carla.lv2/carla.* \ bin/carla.lv2/*.ttl \ $(DESTDIR)$(LIBDIR)/lv2/carla.lv2 # Link binaries for lv2 plugin @for i in `find $(DESTDIR)$(LIBDIR)/carla/ -maxdepth 1 -type f -exec basename {} ';'`; do \ $(LINK) ../../carla/$$i $(DESTDIR)$(LIBDIR)/lv2/carla.lv2/$$i; \ done rm -f $(DESTDIR)$(LIBDIR)/lv2/carla.lv2/libcarla_standalone2.* ifeq ($(LINUX),true) # Link jack app bridge rm -rf $(DESTDIR)$(LIBDIR)/lv2/carla.lv2/jack $(LINK) ../../carla/jack $(DESTDIR)$(LIBDIR)/lv2/carla.lv2/jack endif endif # CAN_GENERATE_LV2_TTL ifeq ($(HAVE_PYQT),true) # Link resources for lv2 plugin rm -rf $(DESTDIR)$(LIBDIR)/lv2/carla.lv2/resources $(LINK) ../../../share/carla/resources $(DESTDIR)$(LIBDIR)/lv2/carla.lv2/resources # Link styles for lv2 plugin rm -rf $(DESTDIR)$(LIBDIR)/lv2/carla.lv2/styles $(LINK) ../../carla/styles $(DESTDIR)$(LIBDIR)/lv2/carla.lv2/styles endif # ------------------------------------------------------------------------------------------------------------- ifneq ($(HAIKU),true) ifeq ($(HAVE_PYQT),true) # Install vst plugin install -d $(DESTDIR)$(LIBDIR)/vst/carla.vst install -m 644 \ bin/CarlaRack*.* \ bin/CarlaPatchbay*.* \ $(DESTDIR)$(LIBDIR)/vst/carla.vst # Link binaries for vst plugin @for i in `find $(DESTDIR)$(LIBDIR)/carla/ -maxdepth 1 -type f -exec basename {} ';'`; do \ $(LINK) ../../carla/$$i $(DESTDIR)$(LIBDIR)/vst/carla.vst/$$i; \ done rm -f $(DESTDIR)$(LIBDIR)/vst/carla.vst/libcarla_standalone2.* # Link jack app bridge rm -rf $(DESTDIR)$(LIBDIR)/vst/carla.vst/jack $(LINK) ../../carla/jack $(DESTDIR)$(LIBDIR)/vst/carla.vst/jack # Link resources for vst plugin rm -rf $(DESTDIR)$(LIBDIR)/vst/carla.vst/resources $(LINK) ../../../share/carla/resources $(DESTDIR)$(LIBDIR)/vst/carla.vst/resources # Link styles for vst plugin rm -rf $(DESTDIR)$(LIBDIR)/vst/carla.vst/styles $(LINK) ../../carla/styles $(DESTDIR)$(LIBDIR)/vst/carla.vst/styles endif endif # ------------------------------------------------------------------------------------------------------------- ifneq ($(HAVE_PYQT),true) # Remove gui files for non-gui build rm $(DESTDIR)$(LIBDIR)/carla/carla-bridge-lv2-modgui ifeq ($(CAN_GENERATE_LV2_TTL),true) rm $(DESTDIR)$(LIBDIR)/lv2/carla.lv2/carla-bridge-lv2-modgui endif endif # --------------------------------------------------------------------------------------------------------------------- ifneq ($(EXTERNAL_PLUGINS),true) install_external_plugins: endif install: install_main install_external_plugins # --------------------------------------------------------------------------------------------------------------------- uninstall: rm -f $(DESTDIR)$(BINDIR)/carla* rm -f $(DESTDIR)$(LIBDIR)/pkgconfig/carla-host-plugin.pc rm -f $(DESTDIR)$(LIBDIR)/pkgconfig/carla-native-plugin.pc rm -f $(DESTDIR)$(LIBDIR)/pkgconfig/carla-standalone.pc rm -f $(DESTDIR)$(LIBDIR)/pkgconfig/carla-utils.pc rm -f $(DESTDIR)$(DATADIR)/applications/carla.desktop rm -f $(DESTDIR)$(DATADIR)/applications/carla-control.desktop rm -f $(DESTDIR)$(DATADIR)/icons/hicolor/*/apps/carla.png rm -f $(DESTDIR)$(DATADIR)/icons/hicolor/*/apps/carla-control.png rm -f $(DESTDIR)$(DATADIR)/icons/hicolor/scalable/apps/carla.svg rm -f $(DESTDIR)$(DATADIR)/icons/hicolor/scalable/apps/carla-control.svg rm -f $(DESTDIR)$(DATADIR)/mime/packages/carla.xml rm -rf $(DESTDIR)$(LIBDIR)/carla rm -rf $(DESTDIR)$(LIBDIR)/lv2/carla.lv2 rm -rf $(DESTDIR)$(LIBDIR)/lv2/carla-native.lv2 rm -rf $(DESTDIR)$(LIBDIR)/vst/carla.vst rm -rf $(DESTDIR)$(DATADIR)/carla rm -rf $(DESTDIR)$(INCLUDEDIR)/carla # ---------------------------------------------------------------------------------------------------------------------------- ifeq ($(MACOS),true) ifneq ($(MACOS_OLD),true) HAVE_DIST = true endif endif ifeq ($(WIN32),true) HAVE_DIST = true endif ifeq ($(HAVE_DIST),true) include Makefile.dist.mk else dist: endif include Makefile.print.mk # --------------------------------------------------------------------------------------------------------------------- .FORCE: .PHONY: .FORCE # --------------------------------------------------------------------------------------------------------------------- Carla-2.4.2/Makefile.dist.mk000066400000000000000000000551111420416754300155620ustar00rootroot00000000000000#!/usr/bin/make -f # Makefile for Carla # # ------------------ # # Created by falkTX # # NOTE to be imported from main Makefile # --------------------------------------------------------------------------------------------------------------------- PYTHON = $(EXE_WRAPPER) $(shell which python3$(APP_EXT)) ifeq ($(WIN32),true) QT5_DLL_EXT = .dll QT5_DLL_V = 5 endif ifeq ($(MACOS),true) QT5_LIB_PREFIX = lib endif ifeq ($(HAVE_QT5PKG),true) QT5_PREFIX = $(shell pkg-config --variable=prefix Qt5OpenGLExtensions) endif # --------------------------------------------------------------------------------------------------------------------- _PLUGIN_UIS = \ carla-plugin \ carla-plugin-patchbay \ bigmeter-ui \ midipattern-ui \ notes-ui \ xycontroller-ui _QT5_DLLS = \ Qt$(QT5_DLL_V)Core$(QT5_DLL_EXT) \ Qt$(QT5_DLL_V)Gui$(QT5_DLL_EXT) \ Qt$(QT5_DLL_V)OpenGL$(QT5_DLL_EXT) \ Qt$(QT5_DLL_V)PrintSupport$(QT5_DLL_EXT) \ Qt$(QT5_DLL_V)Svg$(QT5_DLL_EXT) \ Qt$(QT5_DLL_V)Widgets$(QT5_DLL_EXT) _QT5_PLUGINS = \ iconengines/$(QT5_LIB_PREFIX)qsvgicon$(LIB_EXT) \ imageformats/$(QT5_LIB_PREFIX)qjpeg$(LIB_EXT) \ imageformats/$(QT5_LIB_PREFIX)qsvg$(LIB_EXT) ifeq ($(MACOS),true) _QT5_PLUGINS += platforms/$(QT5_LIB_PREFIX)qcocoa$(LIB_EXT) else ifeq ($(WIN32),true) _QT5_PLUGINS += platforms/$(QT5_LIB_PREFIX)qwindows$(LIB_EXT) endif # NOTE this has to be hardcoded for now. oh well ifeq ($(WIN32),true) _PYTHON_FILES = \ libpython3.8.dll endif _THEME_FILES = \ styles/carlastyle.json \ styles/carlastyle$(LIB_EXT) _CARLA_HOST_FILES = \ carla-bridge-lv2$(LIB_EXT) \ carla-bridge-lv2-gtk2$(APP_EXT) \ carla-bridge-lv2-gtk3$(APP_EXT) \ carla-bridge-native$(APP_EXT) \ carla-discovery-native$(APP_EXT) \ libcarla_utils$(LIB_EXT) \ $(_PLUGIN_UIS:%=resources/%$(APP_EXT)) ifeq ($(MACOS),true) _CARLA_HOST_FILES += carla-bridge-lv2-cocoa$(APP_EXT) _CARLA_HOST_FILES += magic.mgc else ifeq ($(WIN32),true) _CARLA_HOST_FILES += carla-bridge-lv2-windows$(APP_EXT) endif ifeq ($(MACOS),true) ifneq ($(MACOS_UNIVERSAL),true) _CARLA_HOST_FILES += carla-bridge-posix32 _CARLA_HOST_FILES += carla-discovery-posix32 endif endif ifeq ($(WIN64),true) _CARLA_HOST_FILES += carla-bridge-win32$(APP_EXT) _CARLA_HOST_FILES += carla-discovery-win32$(APP_EXT) endif _CARLA_APP_FILES = \ Carla$(APP_EXT) \ libcarla_host-plugin$(LIB_EXT) \ libcarla_native-plugin$(LIB_EXT) \ libcarla_standalone2$(LIB_EXT) \ $(_CARLA_HOST_FILES) \ $(_PYTHON_FILES) \ $(_QT5_DLLS) \ $(_QT5_PLUGINS) \ $(_THEME_FILES) \ resources/lib _CARLA_CONTROL_APP_FILES = \ Carla-Control$(APP_EXT) \ libcarla_utils$(LIB_EXT) \ $(_PYTHON_FILES) \ $(_QT5_DLLS) \ $(_QT5_PLUGINS) \ $(_THEME_FILES) _CARLA_LV2_PLUGIN_FILES = \ carla.lv2/carla$(LIB_EXT) \ carla.lv2/manifest.ttl \ carla.lv2/resources/lib/library.zip \ $(_CARLA_HOST_FILES:%=carla.lv2/%) \ $(_PYTHON_FILES:%=carla.lv2/resources/%) \ $(_QT5_DLLS:%=carla.lv2/resources/%) \ $(_QT5_PLUGINS:%=carla.lv2/resources/%) \ $(_THEME_FILES:%=carla.lv2/resources/%) ifeq ($(MACOS),true) _CARLA_VST2FX_PLUGIN_FILES = \ carlafx.vst/Contents/MacOS/CarlaVstFxShell \ carlafx.vst/Contents/MacOS/resources/lib/library.zip \ $(_CARLA_HOST_FILES:%=carlafx.vst/Contents/MacOS/%) \ $(_QT5_DLLS:%=carlafx.vst/Contents/MacOS/resources/%) \ $(_QT5_PLUGINS:%=carlafx.vst/Contents/MacOS/resources/%) \ $(_THEME_FILES:%=carlafx.vst/Contents/MacOS/resources/%) _CARLA_VST2SYN_PLUGIN_FILES = \ carla.vst/Contents/MacOS/CarlaVstShell \ carla.vst/Contents/MacOS/resources/lib/library.zip \ $(_CARLA_HOST_FILES:%=carla.vst/Contents/MacOS/%) \ $(_QT5_DLLS:%=carla.vst/Contents/MacOS/resources/%) \ $(_QT5_PLUGINS:%=carla.vst/Contents/MacOS/resources/%) \ $(_THEME_FILES:%=carla.vst/Contents/MacOS/resources/%) else ifeq ($(WIN32),true) _CARLA_VST2_PLUGIN_FILES = \ carla.vst/CarlaVstShell.dll \ carla.vst/CarlaVstFxShell.dll \ carla.vst/resources/lib/library.zip \ $(_CARLA_HOST_FILES:%=carla.vst/%) \ $(_PYTHON_FILES:%=carla.vst/resources/%) \ $(_QT5_DLLS:%=carla.vst/resources/%) \ $(_QT5_PLUGINS:%=carla.vst/resources/%) \ $(_THEME_FILES:%=carla.vst/resources/%) endif ifeq ($(MACOS),true) CARLA_APP_FILES = $(_CARLA_APP_FILES:%=build/Carla.app/Contents/MacOS/%) CARLA_CONTROL_APP_FILES = $(_CARLA_CONTROL_APP_FILES:%=build/Carla-Control.app/Contents/MacOS/%) CARLA_PLUGIN_ZIPS = $(_PLUGIN_UIS:%=build/%.app/Contents/MacOS/lib/library.zip) else ifeq ($(WIN32),true) CARLA_APP_FILES = $(_CARLA_APP_FILES:%=build/Carla/%) CARLA_CONTROL_APP_FILES = $(_CARLA_CONTROL_APP_FILES:%=build/Carla-Control/%) CARLA_PLUGIN_FILES = $(_CARLA_LV2_PLUGIN_FILES:%=build/%) $(_CARLA_VST2_PLUGIN_FILES:%=build/%) CARLA_PLUGIN_ZIPS = $(_PLUGIN_UIS:%=build/%-resources/lib/library.zip) endif # --------------------------------------------------------------------------------------------------------------------- # entry point ifeq ($(MACOS_UNIVERSAL),true) TARGETS = Carla-$(VERSION)-macOS-universal.dmg else ifeq ($(MACOS),true) TARGETS = Carla-$(VERSION)-macOS.dmg else ifeq ($(WIN64),true) TARGETS = Carla-$(VERSION)-win64.zip else ifeq ($(WIN32),true) TARGETS = Carla-$(VERSION)-win32.zip endif ifeq ($(HAVE_QT5PKG),true) dist: $(TARGETS) else dist: @echo make dist not supported in this configuration endif # --------------------------------------------------------------------------------------------------------------------- # create final file Carla-$(VERSION)-macOS.dmg: $(CARLA_APP_FILES) $(CARLA_CONTROL_APP_FILES) $(CARLA_PLUGIN_FILES)build/Carla.app/Contents/Info.plist build/Carla-Control.app/Contents/Info.plist build/Carla-Plugins.pkg $(call GENERATE_FINAL_DMG,intel) Carla-$(VERSION)-macOS-universal.dmg: $(CARLA_APP_FILES) $(CARLA_CONTROL_APP_FILES) $(CARLA_PLUGIN_FILES)build/Carla.app/Contents/Info.plist build/Carla-Control.app/Contents/Info.plist build/Carla-Plugins.pkg $(call GENERATE_FINAL_DMG,universal) Carla-$(VERSION)-win32.zip: $(CARLA_APP_FILES) $(CARLA_CONTROL_APP_FILES) $(CARLA_PLUGIN_FILES) $(call GENERATE_FINAL_ZIP,win32) Carla-$(VERSION)-win64.zip: $(CARLA_APP_FILES) $(CARLA_CONTROL_APP_FILES) $(CARLA_PLUGIN_FILES) $(call GENERATE_FINAL_ZIP,win64) ifneq ($(TESTING),true) define GENERATE_FINAL_DMG rm -rf build/macos-pkg $@ mkdir build/macos-pkg cp -r build/Carla.app build/Carla-Control.app build/Carla-Plugins.pkg data/macos/README build/macos-pkg/ hdiutil create $@ -srcfolder build/macos-pkg -volname "Carla-$(VERSION)-${1}" -fs HFS+ -ov rm -rf build/macos-pkg endef define GENERATE_FINAL_ZIP rm -rf build/Carla-$(VERSION)-${1} $@ mkdir build/Carla-$(VERSION)-${1} cp -r build/Carla build/Carla-Control data/windows/README.txt build/Carla-$(VERSION)-${1}/ cp -r build/carla.lv2 build/Carla-$(VERSION)-${1}/Carla.lv2 cp -r build/carla.vst build/Carla-$(VERSION)-${1}/Carla.vst (cd build && \ zip -r -9 ../$@ Carla-$(VERSION)-${1}) rm -rf build/Carla-$(VERSION)-${1} endef else define GENERATE_FINAL_DMG endef define GENERATE_FINAL_ZIP endef endif # --------------------------------------------------------------------------------------------------------------------- # macOS plist files build/Carla.app/Contents/Info.plist: build/Carla.app/Contents/MacOS/Carla $(call CLEANUP_AND_PATCH_CXFREEZE_FILES,Carla) # extra step for standalone, symlink resources used in plugin UIs mkdir -p build/Carla.app/Contents/MacOS/resources (cd build/Carla.app/Contents/MacOS/resources && \ ln -sf ../Qt* ../lib ../iconengines ../imageformats ../platforms ../styles .) # mark as done touch $@ build/Carla-Control.app/Contents/Info.plist: build/Carla-Control.app/Contents/MacOS/Carla-Control $(call CLEANUP_AND_PATCH_CXFREEZE_FILES,Carla-Control) # mark as done touch $@ # --------------------------------------------------------------------------------------------------------------------- # macOS main executables build/Carla.app/Contents/MacOS/Carla: build/Carla.app/Contents/MacOS/lib/library.zip $(call CLEANUP_AND_PATCH_CXFREEZE_FILES,Carla) # mark as done touch $@ build/Carla-Control.app/Contents/MacOS/Carla-Control: build/Carla-Control.app/Contents/MacOS/lib/library.zip $(call CLEANUP_AND_PATCH_CXFREEZE_FILES,Carla-Control) # mark as done touch $@ # --------------------------------------------------------------------------------------------------------------------- # win32 main executables build/Carla/Carla.exe: build/Carla/lib/library.zip $(call CLEANUP_AND_PATCH_CXFREEZE_FILES,Carla) # mark as done touch $@ build/Carla-Control/Carla-Control.exe: build/Carla-Control/lib/library.zip $(call CLEANUP_AND_PATCH_CXFREEZE_FILES,Carla-Control) # mark as done touch $@ # --------------------------------------------------------------------------------------------------------------------- # cleanup functions ifeq ($(MACOS),true) define PATCH_QT_DEPENDENCIES install_name_tool -change "@rpath/QtCore.framework/Versions/5/QtCore" @executable_path/QtCore ${1} && \ install_name_tool -change "@rpath/QtGui.framework/Versions/5/QtGui" @executable_path/QtGui ${1} && \ install_name_tool -change "@rpath/QtOpenGL.framework/Versions/5/QtOpenGL" @executable_path/QtOpenGL ${1} && \ install_name_tool -change "@rpath/QtPrintSupport.framework/Versions/5/QtPrintSupport" @executable_path/QtPrintSupport ${1} && \ install_name_tool -change "@rpath/QtSvg.framework/Versions/5/QtSvg" @executable_path/QtSvg ${1} && \ install_name_tool -change "@rpath/QtWidgets.framework/Versions/5/QtWidgets" @executable_path/QtWidgets ${1} && \ install_name_tool -change "@rpath/QtMacExtras.framework/Versions/5/QtMacExtras" @executable_path/QtMacExtras ${1} endef define CLEANUP_AND_PATCH_CXFREEZE_FILES # cleanup find build/${1}.app/Contents/MacOS/ -type f -name "*.py" -delete find build/${1}.app/Contents/MacOS/ -type f -name "*.pyi" -delete find build/${1}.app/Contents/MacOS/ -type f -name "pylupdate.so" -delete find build/${1}.app/Contents/MacOS/ -type f -name "pyrcc.so" -delete find build/${1}.app/Contents/MacOS/ -type f -name "QtMacExtras*" -delete find build/${1}.app/Contents/MacOS/ -type f -name "QtNetwork*" -delete find build/${1}.app/Contents/MacOS/ -type f -name "QtSql*" -delete find build/${1}.app/Contents/MacOS/ -type f -name "QtTest*" -delete find build/${1}.app/Contents/MacOS/ -type f -name "QtXml*" -delete #find build/${1}.app/Contents/MacOS/ -type f -name "*.pyc" -delete rm -rf build/${1}.app/Contents/MacOS/lib/PyQt5/uic # adjust binaries (cd build/${1}.app/Contents/MacOS && \ for f in `find . -type f | grep -e /Qt -e QOpenGL -e libq -e carlastyle.dylib -e sip.so`; do \ $(call PATCH_QT_DEPENDENCIES,$$f); \ done) endef else ifeq ($(WIN32),true) define CLEANUP_AND_PATCH_CXFREEZE_FILES # cleanup find build/${1}/ -type f -name "*.py" -delete find build/${1}/ -type f -name "*.pyi" -delete find build/${1}/ -type f -name "pylupdate.so" -delete find build/${1}/ -type f -name "pyrcc.so" -delete find build/${1}/ -type f -name "QtMacExtras*" -delete find build/${1}/ -type f -name "QtNetwork*" -delete find build/${1}/ -type f -name "QtSql*" -delete find build/${1}/ -type f -name "QtTest*" -delete find build/${1}/ -type f -name "QtXml*" -delete #find build/${1}/ -type f -name "*.pyc" -delete rm -rf build/${1}/lib/PyQt5/uic endef endif # --------------------------------------------------------------------------------------------------------------------- # cxfreeze library.zip generation function ifeq ($(MACOS),true) define GENERATE_LIBRARY_ZIP rm -rf build/exe.* env PYTHONPATH=$(CURDIR)/source/frontend SCRIPT_NAME=${1} $(PYTHON) ./data/macos/bundle.py bdist_mac --bundle-name=${1} 1>/dev/null endef else ifeq ($(WIN32),true) define GENERATE_LIBRARY_ZIP env PYTHONPATH="$(CURDIR)/source/frontend;$(QT5_PREFIX)/lib/python3/site-packages" SCRIPT_NAME=${1} $(PYTHON) ./data/windows/app-gui.py build_exe 1>/dev/null endef endif # --------------------------------------------------------------------------------------------------------------------- # macOS application library zip files build/Carla.app/Contents/MacOS/lib/library.zip: $(CARLA_PLUGIN_ZIPS) data/macos/bundle.py data/macos/Carla.plist source/frontend/* $(call GENERATE_LIBRARY_ZIP,Carla) # merge all zips into 1 rm -rf build/Carla.app/Contents/MacOS/lib/_lib mkdir build/Carla.app/Contents/MacOS/lib/_lib (cd build/Carla.app/Contents/MacOS/lib/_lib && \ mv ../library.zip ../library-main.zip && \ $(_PLUGIN_UIS:%=unzip -n $(CURDIR)/build/%.app/Contents/MacOS/lib/library.zip &&) \ unzip -o ../library-main.zip && \ zip -r -9 ../library.zip *) rm -rf build/Carla.app/Contents/MacOS/lib/_lib rm -rf build/Carla.app/Contents/MacOS/lib/library-main.zip build/Carla-Control.app/Contents/MacOS/lib/library.zip: data/macos/bundle.py data/macos/Carla-Control.plist source/frontend/* $(call GENERATE_LIBRARY_ZIP,Carla-Control) build/%.app/Contents/MacOS/lib/library.zip: data/macos/bundle.py source/frontend/% $(call GENERATE_LIBRARY_ZIP,$*) # --------------------------------------------------------------------------------------------------------------------- # win32 application library zip files build/Carla/lib/library.zip: $(CARLA_PLUGIN_ZIPS) data/windows/app-gui.py source/frontend/* resources/ico/carla.ico $(call GENERATE_LIBRARY_ZIP,Carla) # merge all zips into 1 rm -rf build/Carla/lib/_lib mkdir build/Carla/lib/_lib (cd build/Carla/lib/_lib && \ mv ../library.zip ../library-main.zip && \ $(_PLUGIN_UIS:%=unzip -n $(CURDIR)/build/%-resources/lib/library.zip &&) \ unzip -o ../library-main.zip && \ zip -r -9 ../library.zip *) rm -rf build/Carla/lib/_lib rm -rf build/Carla/lib/library-main.zip build/Carla-Control/lib/library.zip: data/windows/app-gui.py source/frontend/* resources/ico/carla-control.ico $(call GENERATE_LIBRARY_ZIP,Carla-Control) build/%-resources/lib/library.zip: data/windows/app-gui.py source/frontend/% resources/ico/carla.ico $(call GENERATE_LIBRARY_ZIP,$*) # delete useless files rm -rf build/$*-resources/lib/*.dll build/$*-resources/lib/*.pyd build/$*-resources/lib/PyQt5 # --------------------------------------------------------------------------------------------------------------------- # macOS plugin UIs (stored in resources, depend on their respective library.zip) build/Carla.app/Contents/MacOS/resources/%: build/%.app/Contents/MacOS/lib/library.zip -@mkdir -p $(shell dirname $@) @cp -v build/$*.app/Contents/MacOS/$* $@ # --------------------------------------------------------------------------------------------------------------------- # win32 plugin UIs (stored in resources, depend on their respective library.zip) build/Carla/resources/%.exe: build/%-resources/lib/library.zip -@mkdir -p $(shell dirname $@) @cp -v build/$*-resources/$*.exe $@ # --------------------------------------------------------------------------------------------------------------------- # common generic bundle files (either Qt or Carla binaries) ifeq ($(MACOS),true) _BUNDLE_EXTRA_PATH = /Contents/MacOS _APP_BUNDLE_EXTRA_PATH = .app$(_BUNDLE_EXTRA_PATH) endif build/Carla$(_APP_BUNDLE_EXTRA_PATH)/iconengines/% build/Carla-Control$(_APP_BUNDLE_EXTRA_PATH)/iconengines/%: $(QT5_PREFIX)/lib/qt5/plugins/iconengines/% -@mkdir -p $(shell dirname $@) @cp -v $< $@ build/Carla$(_APP_BUNDLE_EXTRA_PATH)/imageformats/% build/Carla-Control$(_APP_BUNDLE_EXTRA_PATH)/imageformats/%: $(QT5_PREFIX)/lib/qt5/plugins/imageformats/% -@mkdir -p $(shell dirname $@) @cp -v $< $@ build/Carla$(_APP_BUNDLE_EXTRA_PATH)/platforms/% build/Carla-Control$(_APP_BUNDLE_EXTRA_PATH)/platforms/%: $(QT5_PREFIX)/lib/qt5/plugins/platforms/% -@mkdir -p $(shell dirname $@) @cp -v $< $@ build/Carla$(_APP_BUNDLE_EXTRA_PATH)/styles/% build/Carla-Control$(_APP_BUNDLE_EXTRA_PATH)/styles/%: bin/styles/% -@mkdir -p $(shell dirname $@) @cp -v $< $@ build/Carla$(_APP_BUNDLE_EXTRA_PATH)/resources/lib: build/Carla$(_APP_BUNDLE_EXTRA_PATH)/lib/library.zip -@mkdir -p $(shell dirname $@) @ln -sfv ../lib $@ build/Carla$(_APP_BUNDLE_EXTRA_PATH)/% build/Carla-Control$(_APP_BUNDLE_EXTRA_PATH)/%: bin/% -@mkdir -p $(shell dirname $@) @cp -v $< $@ # --------------------------------------------------------------------------------------------------------------------- # macOS generic bundle files (either Qt or Carla binaries) build/Carla.app/Contents/MacOS/Qt% build/Carla-Control.app/Contents/MacOS/Qt%: $(QT5_PREFIX)/lib/Qt%.framework -@mkdir -p $(shell dirname $@) @cp -v $ $@ build/carla-lv2.pkg: $(_CARLA_LV2_PLUGIN_FILES:%=build/%) pkgbuild \ --identifier "studio.kx.carla.lv2" \ --install-location "/Library/Audio/Plug-Ins/LV2/carla.lv2/" \ --root "build/carla.lv2/" \ "$@" build/carla-vst2fx.pkg: $(_CARLA_VST2FX_PLUGIN_FILES:%=build/%) pkgbuild \ --identifier "studio.kx.carla.vst2fx" \ --install-location "/Library/Audio/Plug-Ins/VST/carlafx.vst/" \ --root "build/carlafx.vst/" \ "$@" build/carla-vst2syn.pkg: $(_CARLA_VST2SYN_PLUGIN_FILES:%=build/%) pkgbuild \ --identifier "studio.kx.carla.vst2syn" \ --install-location "/Library/Audio/Plug-Ins/VST/carla.vst/" \ --root "build/carla.vst/" \ "$@" # --------------------------------------------------------------------------------------------------------------------- # macOS VST2 specific files _MACVST_FILES = Contents/Info.plist Contents/PkgInfo Contents/Resources/empty.lproj build/carla.vst/Contents/MacOS/CarlaVstShell: bin/CarlaVstShell.dylib $(_MACVST_FILES:%=build/carla.vst/%) -@mkdir -p $(shell dirname $@) @cp -v $< $@ build/carlafx.vst/Contents/MacOS/CarlaVstFxShell: bin/CarlaVstFxShell.dylib $(_MACVST_FILES:%=build/carlafx.vst/%) -@mkdir -p $(shell dirname $@) @cp -v $< $@ # --------------------------------------------------------------------------------------------------------------------- build/carla.vst/Contents/Info.plist: data/macos/CarlaVstShell.plist -@mkdir -p $(shell dirname $@) @cp -v $< $@ build/carlafx.vst/Contents/Info.plist: data/macos/CarlaVstFxShell.plist -@mkdir -p $(shell dirname $@) @cp -v $< $@ build/%.vst/Contents/PkgInfo: -@mkdir -p $(shell dirname $@) @echo "BNDL????" > $@ build/%.vst/Contents/Resources/empty.lproj: -@mkdir -p $(shell dirname $@) @touch $@ # --------------------------------------------------------------------------------------------------------------------- Carla-2.4.2/Makefile.print.mk000066400000000000000000000150701420416754300157530ustar00rootroot00000000000000#!/usr/bin/make -f # Makefile for Carla # # ------------------ # # Created by falkTX # # NOTE to be imported from main Makefile # ---------------------------------------------------------------------------------------------------------------------------- ifneq ($(MAKE_TERMOUT),) ANS_NO=\033[31mNO\033[0m ANS_YES=\033[32mYES\033[0m mS=\033[33m[ mZ=\033[30;1m[ mE=]\033[0m tS=\033[36m tE=\033[0m else ANS_NO=NO ANS_YES=YES mS=[ mZ=[ mE=] endif features_print_main: @printf -- "$(tS)---> Main features $(tE)\n" ifeq ($(HAVE_PYQT),true) @printf -- "Front-End: $(ANS_YES)\n" @printf -- "LV2 plugin: $(ANS_YES)\n" ifneq ($(HAIKU),true) @printf -- "VST2 plugin: $(ANS_YES)\n" else @printf -- "VST2 plugin: $(ANS_NO) $(mZ)Not available for Haiku$(mE)\n" endif else @printf -- "Front-End: $(ANS_NO) $(mS)Missing PyQt$(mE)\n" @printf -- "LV2 plugin: $(ANS_NO) $(mS)No front-end$(mE)\n" @printf -- "VST2 plugin: $(ANS_NO) $(mS)No front-end$(mE)\n" endif ifeq ($(HAVE_HYLIA),true) @printf -- "Link support: $(ANS_YES)\n" else ifeq ($(MACOS_OLD),true) @printf -- "Link support: $(ANS_NO) $(mZ)MacOS >= 10.8 only$(mE)\n" else @printf -- "Link support: $(ANS_NO) $(mZ)Linux, MacOS and Windows only$(mE)\n" endif endif ifeq ($(HAVE_LIBLO),true) @printf -- "OSC support: $(ANS_YES)\n" else @printf -- "OSC support: $(ANS_NO) $(mS)Missing liblo$(mE)\n" endif ifeq ($(WIN32),true) @printf -- "Binary detect: $(ANS_YES)\n" else ifeq ($(HAVE_LIBMAGIC),true) @printf -- "Binary detect: $(ANS_YES)\n" else @printf -- "Binary detect: $(ANS_NO) $(mS)Missing libmagic/file$(mE)\n" endif endif @printf -- "\n" @printf -- "$(tS)---> Engine drivers $(tE)\n" @printf -- "JACK: $(ANS_YES)\n" ifeq ($(LINUX),true) ifeq ($(HAVE_ALSA),true) @printf -- "ALSA: $(ANS_YES)\n" else @printf -- "ALSA: $(ANS_NO) $(mS)Missing ALSA$(mE)\n" endif else @printf -- "ALSA: $(ANS_NO) $(mZ)Linux only$(mE)\n" endif ifeq ($(UNIX),true) ifneq ($(MACOS),true) ifeq ($(HAVE_PULSEAUDIO),true) @printf -- "PulseAudio: $(ANS_YES)\n" else @printf -- "PulseAudio: $(ANS_NO) $(mS)Missing PulseAudio$(mE)\n" endif else @printf -- "PulseAudio: $(ANS_NO) $(mZ)Not available for MacOS$(mE)\n" endif else @printf -- "PulseAudio: $(ANS_NO) $(mZ)Only available for Unix systems$(mE)\n" endif ifeq ($(MACOS),true) @printf -- "CoreAudio: $(ANS_YES)\n" else @printf -- "CoreAudio: $(ANS_NO) $(mZ)MacOS only$(mE)\n" endif ifeq ($(WIN32),true) @printf -- "ASIO: $(ANS_YES)\n" @printf -- "DirectSound: $(ANS_YES)\n" @printf -- "WASAPI: $(ANS_YES)\n" else @printf -- "ASIO: $(ANS_NO) $(mZ)Windows only$(mE)\n" @printf -- "DirectSound: $(ANS_NO) $(mZ)Windows only$(mE)\n" @printf -- "WASAPI: $(ANS_NO) $(mZ)Windows only$(mE)\n" endif @printf -- "\n" @printf -- "$(tS)---> Plugin formats: $(tE)\n" @printf -- "Internal: $(ANS_YES)\n" @printf -- "LADSPA: $(ANS_YES)\n" @printf -- "DSSI: $(ANS_YES)\n" @printf -- "LV2: $(ANS_YES)\n" ifeq ($(MACOS_OR_WIN32),true) ifeq ($(USING_JUCE),true) @printf -- "VST2: $(ANS_YES) (with UI, using JUCE)\n" @printf -- "VST3: $(ANS_YES) (with UI, using JUCE)\n" else # USING_JUCE @printf -- "VST2: $(ANS_YES) (with UI)\n" @printf -- "VST3: $(ANS_NO)\n" endif # USING_JUCE else # MACOS_OR_WIN32 ifeq ($(HAIKU),true) @printf -- "VST2: $(ANS_YES) (without UI)\n" @printf -- "VST3: $(ANS_NO)\n" else # HAIKU ifeq ($(HAVE_X11),true) @printf -- "VST2: $(ANS_YES) (with UI)\n" ifeq ($(USING_JUCE),true) @printf -- "VST3: $(ANS_YES) (with UI, using JUCE)\n" else # USING_JUCE @printf -- "VST3: $(ANS_NO)\n" endif # USING_JUCE else # HAVE_X11 @printf -- "VST2: $(ANS_YES) (without UI) $(mS)Missing X11$(mE)\n" @printf -- "VST3: $(ANS_NO)\n" endif # HAVE_X11 endif # HAIKU endif # MACOS_OR_WIN32 ifeq ($(MACOS),true) ifeq ($(USING_JUCE),true) @printf -- "AU: $(ANS_YES) (with UI, using JUCE)\n" else # USING_JUCE @printf -- "AU: $(ANS_NO)\n" endif # USING_JUCE else # MACOS @printf -- "AU: $(ANS_NO) $(mZ)MacOS only$(mE)\n" endif # MACOS @printf -- "\n" @printf -- "$(tS)---> LV2 UI toolkit support: $(tE)\n" @printf -- "External: $(ANS_YES) (direct)\n" @printf -- "Gtk2: $(ANS_YES) (bridge)\n" @printf -- "Gtk3: $(ANS_YES) (bridge)\n" ifneq ($(MACOS_OR_WIN32),true) ifeq ($(HAVE_QT4),true) @printf -- "Qt4: $(ANS_YES) (bridge)\n" else @printf -- "Qt4: $(ANS_NO) $(mS)Qt4 missing$(mE)\n" endif ifeq ($(HAVE_QT5),true) @printf -- "Qt5: $(ANS_YES) (bridge)\n" else @printf -- "Qt5: $(ANS_NO) $(mS)Qt5 missing$(mE)\n" endif ifeq ($(HAVE_X11),true) @printf -- "X11: $(ANS_YES) (direct+bridge)\n" else @printf -- "X11: $(ANS_NO) $(mS)X11 missing$(mE)\n" endif else # !MACOS_OR_WIN32 @printf -- "Qt4: $(ANS_NO) $(mZ)Not available for Windows or MacOS$(mE)\n" @printf -- "Qt5: $(ANS_NO) $(mZ)Not available for Windows or MacOS$(mE)\n" @printf -- "X11: $(ANS_NO) $(mZ)Not available for Windows or MacOS$(mE)\n" endif # !MACOS_OR_WIN32 ifeq ($(MACOS),true) @printf -- "Cocoa: $(ANS_YES) (direct+bridge)\n" else @printf -- "Cocoa: $(ANS_NO) $(mZ)MacOS only$(mE)\n" endif ifeq ($(WIN32),true) @printf -- "Windows: $(ANS_YES) (direct+bridge)\n" else @printf -- "Windows: $(ANS_NO) $(mZ)Windows only$(mE)\n" endif @printf -- "\n" @printf -- "$(tS)---> File formats: $(tE)\n" ifeq ($(HAVE_SNDFILE),true) @printf -- "Basic: $(ANS_YES)\n" else @printf -- "Basic: $(ANS_NO) $(mS)libsndfile missing$(mE)\n" endif @printf -- "MP3: $(ANS_YES)\n" ifeq ($(HAVE_FFMPEG),true) @printf -- "Extra: $(ANS_YES)\n" else @printf -- "Extra: $(ANS_NO) $(mS)FFmpeg missing or too new$(mE)\n" endif # ifeq ($(HAVE_FLUIDSYNTH_INSTPATCH),true) # @printf -- "DLS: $(ANS_YES)\n" # else # @printf -- "DLS: $(ANS_NO) $(mS)FluidSynth/instpatch missing or too old$(mE)\n" # endif ifeq ($(HAVE_FLUIDSYNTH),true) @printf -- "SF2/3: $(ANS_YES)\n" else @printf -- "SF2/3: $(ANS_NO) $(mS)FluidSynth missing or too old$(mE)\n" endif @printf -- "SFZ: $(ANS_YES)\n" @printf -- "\n" @printf -- "$(tS)---> Internal plugins: $(tE)\n" @printf -- "Basic Plugins: $(ANS_YES)\n" @printf -- "Carla-Patchbay: $(ANS_YES)\n" @printf -- "Carla-Rack: $(ANS_YES)\n" ifeq ($(EXTERNAL_PLUGINS),true) @printf -- "External Plugins: $(ANS_YES)\n" else @printf -- "External Plugins: $(ANS_NO)\n" endif ifneq ($(EXTERNAL_PLUGINS),true) features_print_external_plugins: endif features: features_print_main features_print_external_plugins # --------------------------------------------------------------------------------------------------------------------- Carla-2.4.2/README.md000066400000000000000000000024511420416754300140300ustar00rootroot00000000000000# ![Carla Logo](resources/48x48/carla.png) Carla Plugin Host [![build](https://github.com/falkTX/Carla/actions/workflows/build.yml/badge.svg)](https://github.com/falkTX/Carla/actions/workflows/build.yml) What is Carla? --------------- Carla is a fully-featured audio plugin host, with support for many audio drivers and plugin formats.
It's open source and licensed under the GNU General Public License, version 2 or later. Features --------- * LADSPA, DSSI, LV2 and VST2, VST3 and AU plugin formats * SF2/3 and SFZ sound banks * Internal audio and midi file player * Automation of plugin parameters via MIDI CC * Remote control over OSC * Rack and Patchbay processing modes, plus Single and Multi-Client if using JACK * Native audio drivers (ALSA, DirectSound, CoreAudio, etc) and JACK In experimental phase / work in progress: * Export any Carla loadable plugin or sound bank as an LV2 plugin * Plugin bridge support (such as running 32bit plugins on a 64bit Carla, or Windows plugins on Linux) * Run JACK applications as audio plugins * Transport controls, sync with JACK Transport or Ableton Link Carla is also available as an LV2 plugin and VST2 plugin. Screenshot ---------- ![Screenshot](https://kx.studio/screenshots/carla.png) See the [official webpage](https://kx.studio/Applications:Carla) also. Carla-2.4.2/bin/000077500000000000000000000000001420416754300133175ustar00rootroot00000000000000Carla-2.4.2/bin/carla-bridge-lv2-modgui000077500000000000000000000001761420416754300175500ustar00rootroot00000000000000#!/bin/bash ASPATH=$(readlink -f $0) BINDIR=$(dirname $ASPATH) exec python3 $BINDIR/../source/frontend/carla_modgui.py "$@" Carla-2.4.2/bin/carla.lv2/000077500000000000000000000000001420416754300151035ustar00rootroot00000000000000Carla-2.4.2/bin/carla.lv2/resources000077700000000000000000000000001420416754300212032../resourcesustar00rootroot00000000000000Carla-2.4.2/data/000077500000000000000000000000001420416754300134605ustar00rootroot00000000000000Carla-2.4.2/data/about.xcf000066400000000000000000013535131420416754300153070ustar00rootroot00000000000000gimp xcf file/¾BœBœ" ® icc-profile H HLinomntrRGB XYZ Î 1acspMSFTIEC sRGBöÖÓ-HP cprtP3desc„lwtptðbkptrXYZgXYZ,bXYZ@dmndTpdmddĈvuedL†viewÔ$lumiømeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ óQÌXYZ XYZ o¢8õXYZ b™·…ÚXYZ $ „¶ÏdescIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view¤þ_.ÏíÌ \žXYZ L VPWçmeassig CRT curv #(-27;@EJOTY^chmrw|†‹•šŸ¤©®²·¼ÁÆËÐÕÛàåëðöû %+28>ELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y ¤ º Ï å û  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<' >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·OOIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿgimp-image-grid(style solid) (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000)) (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000)) (xspacing 10.000000) (yspacing 10.000000) (spacing-unit inches) (xoffset 0.000000) (yoffset 0.000000) (offset-unit inches) icc-profile-namePhotoshop ICC profile!‹±c¯tTOPÿ     ÿÿÿÒ¿gimp-text-layer£(markup "Plugin developed by falkTX,\nArtwork by nieee,\nCat from oneko by Masayuki Koba.\n\nBased on Nekobee by Sean Bolton and others.\nUsing the DISTRHO Plugin Toolkit, OpenGL UI.") (font "Kozuka Gothic Pr6N") (font-size 12.000000) (font-size-unit pixels) (antialias yes) (hint-style full) (language "en-us") (base-direction ltr) (color (color-rgb 0.654902 0.654902 0.654902)) (justify center) (line-spacing 3.000000) (box-mode fixed) (box-width 399.000000) (box-height 116.000000) (box-unit pixels) (hinting yes) ¨tÈŠëŠ÷‹t a,tDuK¼KÌKÜKìY jIzËŠ›ŠÛ½ü¦§¦;ü§U;þ§=ü§Ž›;§<þ§=þ§=þ§=þ§¿ý¥§(þ¢¦¦þ¤þ¥ý¦¥'ø ¦¦Ž–þ§ý§™'ý¥¦þ¤¦¦ù¥™¦§¦¥ü¦§¦'¦÷£™¥¦§þ§(ý¦¢ú™¦§þ§(ý¦¡÷•¦¦§§§þ§(ý¥§¦ø¤™§§€þ§(¥’ ™§¦¦§€§¢þ§)þ¡¦¦÷£¥§¦¥§™¦¦þ§@½ü¦§¦;ü§U;þ§=ü§Ž›;§<þ§=þ§=þ§=þ§¿ý¥§(þ¢¦¦þ¤þ¥ý¦¥'ø ¦¦Ž–þ§ý§™'ý¥¦þ¤¦¦ù¥™¦§¦¥ü¦§¦'¦÷£™¥¦§þ§(ý¦¢ú™¦§þ§(ý¦¡÷•¦¦§§§þ§(ý¥§¦ø¤™§§€þ§(¥’ ™§¦¦§€§¢þ§)þ¡¦¦÷£¥§¦¥§™¦¦þ§@½ü¦§¦;ü§U;þ§=ü§Ž›;§<þ§=þ§=þ§=þ§¿ý¥§(þ¢¦¦þ¤þ¥ý¦¥'ø ¦¦Ž–þ§ý§™'ý¥¦þ¤¦¦ù¥™¦§¦¥ü¦§¦'¦÷£™¥¦§þ§(ý¦¢ú™¦§þ§(ý¦¡÷•¦¦§§§þ§(ý¥§¦ø¤™§§€þ§(¥’ ™§¦¦§€§¢þ§)þ¡¦¦÷£¥§¦¥§™¦¦þ§@½üßÌÖ;üÿ;þÿ=üÿ;ÿþì;þÿ=þÿ=þÿ=þÿ¿ý5×(ù ‰ÐÜâHþ\ýÅe'øËt þÿý÷'ýv‰õ?ÂËÊ/ÈÿÈŠü¶ÿÈ'ý»*÷ ZÇÿþÿ(ýÞ úùÿþÿ(ýÂ%÷ ‰Ùôÿÿþÿ(ýŠ~ö¥ˆ)ÿÿþÿ(ïÞjÚ'Rÿè(þÿ)ï¢ÞÜÜG\Ý¿|ãåoþÿ@Cþ§þ§þ§ú¦¤§þ¥þ§þ§¦þ§þ§þ§÷–§§§ñ§€¥¦§¦§¦§¦¦þ¡þU¦¦Ý§€¥¦¦ §£§¦€¥¦¦ §U§§¦¦§§í§¥§™€¦¦¦§¥¥§Ø¥¦’€¥§¦¦§¦¥¥§¦¦¦§¦§¦¦€¥¡§§í§¦£€¦¦§¤£¦ᦤœ§¦¢¡§¡¦€§€¦¢¡§§¦¦ô§§€§¦™ø§§§þ§ý¦™û§¦§§÷§¡¥¦¦§§ú§¦Žꧦ¥¤§¦¦™§§§þ§õ¦¢™§¦™÷¦¥§¦¦™û§¦¢ê§§¤™§§¥§€€¥¦¦§þ§ô¥§€U¥§§§€ö¥§¦€§§€ú§¤¦€ê§¢¦§¥§™¥§¦¤¦¦§þ§ö€¥¦¦¥§™¦¦ú¤¦¦þ™¦¦ø¤§€¥¦ý•¦8¡ûU¦¦8ù¥§¦§¦™)þ§ü¢§£þ¥þ§ü¥¦¦þ§þ§ú€¦¤¦’þ§¦¦ñ§¦¥§¦•¦¡Ž¦ U§§õ §¦¦§¢ú¡¦¦¦ß§¦Ž§¦¦¥§¦¤§¦¦€€¦§§¦Ž§€§¦ü¥¦õ§£§¤¦¦¦ì¦¦¦¦¢§§£§¥¦ý€¦§§è¦ §U§™¦€§€¦™¦¦Žø¦§U§§ý£¦¦þ§÷§€¦¤¦¦¦ö¦¢ §§ü§•§ý¦¥ú¥¦§é§¢§¦£¦¦¥¤¦€U¥¥§ü§¤¦ú§Ž§¦ì¤§Ž §¢€¥¦§¦™§þ§ý¦¡+þ§ ý§€,þ§ þ§-þ§ ø§¦§¦¦U§§ó §¥¦§¡¦§¦¥þU§§û §¦¦ð¡€¥¦¦ §¢¦¦U§§þ è§§¦Ž¦¦€€¦§§¦§§¦¦¦¦€ã¦§§¥¥§¦¦§¦§€§§¦¦€€¦§è§§£¦¦¢§§™™§¢¥¦¦㢧§¤£¦¦¢¡§§¥¦€¦¦¢§÷§§U¦Žû¦§ú§€§ý¦Žû¦§û§¦§§þ§§û€¦Žþ¦𧧦¢ §§þ§þ§ö¦¢ §§ú§¦™ô§•§¦¦¢ §𧧤¦€U¥¥§þ§þ§ö¤¦€U¥¥§ù§§§€ô§¤§¥¤¦€U¥¥ð§§€¥¦§¦™§þ§þ§ö€¥¦§¦™§û§™¦¦ò¤§§¦€¥¦§¦™þ§?Cþ§þ§þ§ú¦¤§þ¥þ§þ§¦þ§þ§þ§÷–§§§ñ§€¥¦§¦§¦§¦¦þ¡þU¦¦Ý§€¥¦¦ §£§¦€¥¦¦ §U§§¦¦§§í§¥§™€¦¦¦§¥¥§Ø¥¦’€¥§¦¦§¦¥¥§¦¦¦§¦§¦¦€¥¡§§í§¦£€¦¦§¤£¦ᦤœ§¦¢¡§¡¦€§€¦¢¡§§¦¦ô§§€§¦™ø§§§þ§ý¦™û§¦§§÷§¡¥¦¦§§ú§¦Žꧦ¥¤§¦¦™§§§þ§õ¦¢™§¦™÷¦¥§¦¦™û§¦¢ê§§¤™§§¥§€€¥¦¦§þ§ô¥§€U¥§§§€ö¥§¦€§§€ú§¤¦€ê§¢¦§¥§™¥§¦¤¦¦§þ§ö€¥¦¦¥§™¦¦ú¤¦¦þ™¦¦ø¤§€¥¦ý•¦8¡ûU¦¦8ù¥§¦§¦™)þ§ü¢§£þ¥þ§ü¥¦¦þ§þ§ú€¦¤¦’þ§¦¦ñ§¦¥§¦•¦¡Ž¦ U§§õ §¦¦§¢ú¡¦¦¦ß§¦Ž§¦¦¥§¦¤§¦¦€€¦§§¦Ž§€§¦ü¥¦õ§£§¤¦¦¦ì¦¦¦¦¢§§£§¥¦ý€¦§§è¦ §U§™¦€§€¦™¦¦Žø¦§U§§ý£¦¦þ§÷§€¦¤¦¦¦ö¦¢ §§ü§•§ý¦¥ú¥¦§é§¢§¦£¦¦¥¤¦€U¥¥§ü§¤¦ú§Ž§¦ì¤§Ž §¢€¥¦§¦™§þ§ý¦¡+þ§ ý§€,þ§ þ§-þ§ ø§¦§¦¦U§§ó §¥¦§¡¦§¦¥þU§§û §¦¦ð¡€¥¦¦ §¢¦¦U§§þ è§§¦Ž¦¦€€¦§§¦§§¦¦¦¦€ã¦§§¥¥§¦¦§¦§€§§¦¦€€¦§è§§£¦¦¢§§™™§¢¥¦¦㢧§¤£¦¦¢¡§§¥¦€¦¦¢§÷§§U¦Žû¦§ú§€§ý¦Žû¦§û§¦§§þ§§û€¦Žþ¦𧧦¢ §§þ§þ§ö¦¢ §§ú§¦™ô§•§¦¦¢ §𧧤¦€U¥¥§þ§þ§ö¤¦€U¥¥§ù§§§€ô§¤§¥¤¦€U¥¥ð§§€¥¦§¦™§þ§þ§ö€¥¦§¦™§û§™¦¦ò¤§§¦€¥¦§¦™þ§?Cþ§þ§þ§ú¦¤§þ¥þ§þ§¦þ§þ§þ§÷–§§§ñ§€¥¦§¦§¦§¦¦þ¡þU¦¦Ý§€¥¦¦ §£§¦€¥¦¦ §U§§¦¦§§í§¥§™€¦¦¦§¥¥§Ø¥¦’€¥§¦¦§¦¥¥§¦¦¦§¦§¦¦€¥¡§§í§¦£€¦¦§¤£¦ᦤœ§¦¢¡§¡¦€§€¦¢¡§§¦¦ô§§€§¦™ø§§§þ§ý¦™û§¦§§÷§¡¥¦¦§§ú§¦Žꧦ¥¤§¦¦™§§§þ§õ¦¢™§¦™÷¦¥§¦¦™û§¦¢ê§§¤™§§¥§€€¥¦¦§þ§ô¥§€U¥§§§€ö¥§¦€§§€ú§¤¦€ê§¢¦§¥§™¥§¦¤¦¦§þ§ö€¥¦¦¥§™¦¦ú¤¦¦þ™¦¦ø¤§€¥¦ý•¦8¡ûU¦¦8ù¥§¦§¦™)þ§ü¢§£þ¥þ§ü¥¦¦þ§þ§ú€¦¤¦’þ§¦¦ñ§¦¥§¦•¦¡Ž¦ U§§õ §¦¦§¢ú¡¦¦¦ß§¦Ž§¦¦¥§¦¤§¦¦€€¦§§¦Ž§€§¦ü¥¦õ§£§¤¦¦¦ì¦¦¦¦¢§§£§¥¦ý€¦§§è¦ §U§™¦€§€¦™¦¦Žø¦§U§§ý£¦¦þ§÷§€¦¤¦¦¦ö¦¢ §§ü§•§ý¦¥ú¥¦§é§¢§¦£¦¦¥¤¦€U¥¥§ü§¤¦ú§Ž§¦ì¤§Ž §¢€¥¦§¦™§þ§ý¦¡+þ§ ý§€,þ§ þ§-þ§ ø§¦§¦¦U§§ó §¥¦§¡¦§¦¥þU§§û §¦¦ð¡€¥¦¦ §¢¦¦U§§þ è§§¦Ž¦¦€€¦§§¦§§¦¦¦¦€ã¦§§¥¥§¦¦§¦§€§§¦¦€€¦§è§§£¦¦¢§§™™§¢¥¦¦㢧§¤£¦¦¢¡§§¥¦€¦¦¢§÷§§U¦Žû¦§ú§€§ý¦Žû¦§û§¦§§þ§§û€¦Žþ¦𧧦¢ §§þ§þ§ö¦¢ §§ú§¦™ô§•§¦¦¢ §𧧤¦€U¥¥§þ§þ§ö¤¦€U¥¥§ù§§§€ô§¤§¥¤¦€U¥¥ð§§€¥¦§¦™§þ§þ§ö€¥¦§¦™§û§™¦¦ò¤§§¦€¥¦§¦™þ§?Cþÿþÿþÿú¶&ÿþþÿþÿú]Ðÿþÿþÿ÷ñÿÿíÿsÕ½qèêÿ[ÄÕ0Ø}Ö¿iÿ¹Ô9a§¹ÿuÌ”­ÿÿíÿWµ nþíÿpbÀØ_±„ÿnƒa¤|вLnƒa¤ÿ]ª¡ÿÿíÿ».õðÿ óá¿,ÿÎ(ë%Û ãÎ(ëÿ¿*ôÿÿÿÞ øèôÿþÿýß ûÿòÿÿ÷Ì-T–òÿÿúÿßêÿò ÿÇ'÷÷ÿþÿõÇ(ÿí÷t|£;íûÿÄ+êÿÃdxÿm¬pþûÿþÿôp¬‡ÿ£~öÉË£~úÿg®êÿ6ÜÌ\ÿŠÚ¶däþÿþÿîÞ·KÿªÐ·MÄ…ôªÐ·MÿÐý Ù8û‰ˆ8ù5ÌÐÒ” )þÿü3ÿGþ\þÿü‡¤þÿþÿúÕäßÿXåÈÿÈŠÝ' ø%êuÌÑÿXáÿ ú0­§IßÿŽÿ—fNÆnB¯]ª—~ÿŽÿ£ú…OK ßÿ1ÿP¤™D¶†c¿*Úÿ1ÿj ýÙÿÿèðÿÿÞÉÎ ÇßõçÿÿѲý.Åú¾LÿéÿÂE™ŽLÇÄ+Òÿüÿ Æý‚vúj¢ÿéè({ÁJDÁg®žsÿüÿ)ýÖ'úïÿéåo4ôô6Ðσÿþÿýí+þÿ ýÿ,þÿ þÿ-þÿ èÿtÿXáuÌÑÿZÂÏ0oÆØ2ßuÌÑÿ[ÄÕ0¹ÿ ÎUuÌÑèÿÿŽ]ª—~ÿwaéniÁß]ª—~ÿpbÀnƒa¤ÿ£x]ª—~èÿÿ1¿*Úÿÿ òß¿*Úÿ óÎ(ëÿj ¿*Ú÷ÿÿßûçÿúÿÿýßûçÿûÿòÿÿ÷ÿѲßþçðÿÿÄ+ÒÿþÿþÿöÄ+Òÿúÿíôÿ Æ`Ä+Òðÿÿg®žsÿþÿþÿög®žsÿùÿ£~ôÿ)ég®žsðÿÿÐσÿþÿþÿöÐσÿëÿªÐ·Mÿx¼Ðσþÿ?Uþ§þ§ û¡§¦§ú§¦§¦þ§þ§ §þ¥ú§¦§¦þžþ§þ§ ü¦§’ú§¦§¦÷ §§ §£¦¦÷’€¥¦¦ U¦¦þ§þ§¦¦ø §•¦¤þ¦§§¦Ù§¦¦¡§¦§¦¦§¥€¦§§§€’¦¦¦¦§¦¥¦’€¥§§€¦ú¤ž¦’Ó¤§¦¤¡§¦¥§§§¦§¦¤§¦¢§§¢¦¦¦¢¡§¦¤œ§ô§¢¦¦¤§¥¥𧦤¦¦§¦§¦§¦¦þ û¦§û™¦¦§§ý¦™þ§þ§ø™¦¦›§¡û§¦¥§§ù¦§¦§§î¦™ §§–¦¦¦™ù¦¢™§õ§™¢§§¥¦Ô§¦§§¤€§¦§¦§§¦§¦U¥¥§¦€™¦¤§§€¥§€U¥§õ§¥€€¦§¡¦¤Þ§¦¦§¥¦§¦§¦§¦Ž§§¥§¦™§¥¦§¥€™¦¦ø¤€¥¦¦¥§þ§¦¦úU¤§û§¦¥¦¦§ö§¦§¦¤§¦þ§ý§¥þ§ü¦§™þ§ý¤€áþ§=þ§§&þ§¦ ¦þ§¦¦ø §•¦¤§¦ø§¢§¦€¦§§û€¦§§û€¦§§þ þ§§€¦ú¤ž¦’§ä¦§§¦§¦¦§¥¤§¦¦§¥¤§¦¦§¥¤§¦ þ€ô§¢¦¦¤§¥¥⧦U¡§¦§¦¦§§¦¦§¦§§¦¦§¦§§¦¦§ þ€þ§ø™¦¦›§¡ö§¦§¦§¦§§þ§§þ§§ þ¦õ§™¢§§¥¦󧦧¦§¦§§¡§þ¡§þ¡ý§¥õ§¥€€¦§¡¦¤󧦧¦§¦£§¦¥¥û£§¦¥¥û£§¦¥¥ü ¢ü§¦Uþ§¦¦úU¤§ß§¦§¦§¦€¥§¦§¥€¥§¦§¥€¥§¦§¥¥¦ý§¥#¦ü¦§™#ý§Žý¤€*ý§¦ö¥§§U§§¦ý§¦ù¦§§¥¢§§ ý§¦¦ø §•¦¤쥧¦§¦§§¥¦¦§¦¦¡¤¦§¦¦â§¦¦¡§¦™¦¦™§¦§¦§¦¦§¥§€€¦¦ú¤ž¦’í¥¦¦§¦¦§§¤§¦¥§§¦§¦¦Ù¤§¦¥§§¥§¦ §§§¦§¦§¦¤§¦¢¦¦¤§¥¥ú¦§¦¦¢¦¦ë¤¦¦§¦¦§¥–¤¦¦§¦ž¦¦ô§¤§¦§¦§¦¦þ ø™¦¦›§¡¦ø§¦§¤¦¦¥§§÷¦¦¦§§¥¥§§ï¦§§¦§ §¦§¦§§ò¦™™¢§§¥¦¦í€§¦¦§¦§§¤€§¦€¥¦§§ù¤€§¦§§å¦§¦€¤§¦§§¦§¦¥€€¦§¡¦¤ø¦§§§¦¦¦ö§¥¦§¦¥¦¤¦¦ä§¥¦§¦™§§¥§§¦¦§¦§¦Ž§§¥¦¦úU¤§¦÷¥§¢§¦¥¦¦§ø¦§¦¦¥¥¦¦§í¦§Ž¢§§¦§¦§¦¤§¦ý§¥!û€¦§¥ü¦§™!û¥§§™ý¤€"ü¥¦ ‘Uþ§þ§ û¡§¦§ú§¦§¦þ§þ§ §þ¥ú§¦§¦þžþ§þ§ ü¦§’ú§¦§¦÷ §§ §£¦¦÷’€¥¦¦ U¦¦þ§þ§¦¦ø §•¦¤þ¦§§¦Ù§¦¦¡§¦§¦¦§¥€¦§§§€’¦¦¦¦§¦¥¦’€¥§§€¦ú¤ž¦’Ó¤§¦¤¡§¦¥§§§¦§¦¤§¦¢§§¢¦¦¦¢¡§¦¤œ§ô§¢¦¦¤§¥¥𧦤¦¦§¦§¦§¦¦þ û¦§û™¦¦§§ý¦™þ§þ§ø™¦¦›§¡û§¦¥§§ù¦§¦§§î¦™ §§–¦¦¦™ù¦¢™§õ§™¢§§¥¦Ô§¦§§¤€§¦§¦§§¦§¦U¥¥§¦€™¦¤§§€¥§€U¥§õ§¥€€¦§¡¦¤Þ§¦¦§¥¦§¦§¦§¦Ž§§¥§¦™§¥¦§¥€™¦¦ø¤€¥¦¦¥§þ§¦¦úU¤§û§¦¥¦¦§ö§¦§¦¤§¦þ§ý§¥þ§ü¦§™þ§ý¤€áþ§=þ§§&þ§¦ ¦þ§¦¦ø §•¦¤§¦ø§¢§¦€¦§§û€¦§§û€¦§§þ þ§§€¦ú¤ž¦’§ä¦§§¦§¦¦§¥¤§¦¦§¥¤§¦¦§¥¤§¦ þ€ô§¢¦¦¤§¥¥⧦U¡§¦§¦¦§§¦¦§¦§§¦¦§¦§§¦¦§ þ€þ§ø™¦¦›§¡ö§¦§¦§¦§§þ§§þ§§ þ¦õ§™¢§§¥¦󧦧¦§¦§§¡§þ¡§þ¡ý§¥õ§¥€€¦§¡¦¤󧦧¦§¦£§¦¥¥û£§¦¥¥û£§¦¥¥ü ¢ü§¦Uþ§¦¦úU¤§ß§¦§¦§¦€¥§¦§¥€¥§¦§¥€¥§¦§¥¥¦ý§¥#¦ü¦§™#ý§Žý¤€*ý§¦ö¥§§U§§¦ý§¦ù¦§§¥¢§§ ý§¦¦ø §•¦¤쥧¦§¦§§¥¦¦§¦¦¡¤¦§¦¦â§¦¦¡§¦™¦¦™§¦§¦§¦¦§¥§€€¦¦ú¤ž¦’í¥¦¦§¦¦§§¤§¦¥§§¦§¦¦Ù¤§¦¥§§¥§¦ §§§¦§¦§¦¤§¦¢¦¦¤§¥¥ú¦§¦¦¢¦¦ë¤¦¦§¦¦§¥–¤¦¦§¦ž¦¦ô§¤§¦§¦§¦¦þ ø™¦¦›§¡¦ø§¦§¤¦¦¥§§÷¦¦¦§§¥¥§§ï¦§§¦§ §¦§¦§§ò¦™™¢§§¥¦¦í€§¦¦§¦§§¤€§¦€¥¦§§ù¤€§¦§§å¦§¦€¤§¦§§¦§¦¥€€¦§¡¦¤ø¦§§§¦¦¦ö§¥¦§¦¥¦¤¦¦ä§¥¦§¦™§§¥§§¦¦§¦§¦Ž§§¥¦¦úU¤§¦÷¥§¢§¦¥¦¦§ø¦§¦¦¥¥¦¦§í¦§Ž¢§§¦§¦§¦¤§¦ý§¥!û€¦§¥ü¦§™!û¥§§™ý¤€"ü¥¦ ‘Uþ§þ§ û¡§¦§ú§¦§¦þ§þ§ §þ¥ú§¦§¦þžþ§þ§ ü¦§’ú§¦§¦÷ §§ §£¦¦÷’€¥¦¦ U¦¦þ§þ§¦¦ø §•¦¤þ¦§§¦Ù§¦¦¡§¦§¦¦§¥€¦§§§€’¦¦¦¦§¦¥¦’€¥§§€¦ú¤ž¦’Ó¤§¦¤¡§¦¥§§§¦§¦¤§¦¢§§¢¦¦¦¢¡§¦¤œ§ô§¢¦¦¤§¥¥𧦤¦¦§¦§¦§¦¦þ û¦§û™¦¦§§ý¦™þ§þ§ø™¦¦›§¡û§¦¥§§ù¦§¦§§î¦™ §§–¦¦¦™ù¦¢™§õ§™¢§§¥¦Ô§¦§§¤€§¦§¦§§¦§¦U¥¥§¦€™¦¤§§€¥§€U¥§õ§¥€€¦§¡¦¤Þ§¦¦§¥¦§¦§¦§¦Ž§§¥§¦™§¥¦§¥€™¦¦ø¤€¥¦¦¥§þ§¦¦úU¤§û§¦¥¦¦§ö§¦§¦¤§¦þ§ý§¥þ§ü¦§™þ§ý¤€áþ§=þ§§&þ§¦ ¦þ§¦¦ø §•¦¤§¦ø§¢§¦€¦§§û€¦§§û€¦§§þ þ§§€¦ú¤ž¦’§ä¦§§¦§¦¦§¥¤§¦¦§¥¤§¦¦§¥¤§¦ þ€ô§¢¦¦¤§¥¥⧦U¡§¦§¦¦§§¦¦§¦§§¦¦§¦§§¦¦§ þ€þ§ø™¦¦›§¡ö§¦§¦§¦§§þ§§þ§§ þ¦õ§™¢§§¥¦󧦧¦§¦§§¡§þ¡§þ¡ý§¥õ§¥€€¦§¡¦¤󧦧¦§¦£§¦¥¥û£§¦¥¥û£§¦¥¥ü ¢ü§¦Uþ§¦¦úU¤§ß§¦§¦§¦€¥§¦§¥€¥§¦§¥€¥§¦§¥¥¦ý§¥#¦ü¦§™#ý§Žý¤€*ý§¦ö¥§§U§§¦ý§¦ù¦§§¥¢§§ ý§¦¦ø §•¦¤쥧¦§¦§§¥¦¦§¦¦¡¤¦§¦¦â§¦¦¡§¦™¦¦™§¦§¦§¦¦§¥§€€¦¦ú¤ž¦’í¥¦¦§¦¦§§¤§¦¥§§¦§¦¦Ù¤§¦¥§§¥§¦ §§§¦§¦§¦¤§¦¢¦¦¤§¥¥ú¦§¦¦¢¦¦ë¤¦¦§¦¦§¥–¤¦¦§¦ž¦¦ô§¤§¦§¦§¦¦þ ø™¦¦›§¡¦ø§¦§¤¦¦¥§§÷¦¦¦§§¥¥§§ï¦§§¦§ §¦§¦§§ò¦™™¢§§¥¦¦í€§¦¦§¦§§¤€§¦€¥¦§§ù¤€§¦§§å¦§¦€¤§¦§§¦§¦¥€€¦§¡¦¤ø¦§§§¦¦¦ö§¥¦§¦¥¦¤¦¦ä§¥¦§¦™§§¥§§¦¦§¦§¦Ž§§¥¦¦úU¤§¦÷¥§¢§¦¥¦¦§ø¦§¦¦¥¥¦¦§í¦§Ž¢§§¦§¦§¦¤§¦ý§¥!û€¦§¥ü¦§™!û¥§§™ý¤€"ü¥¦ ‘Uþÿþÿ û%Ãõ~úÿØÿØþÿþÿ û½ÿëmúÿØÿØþþÿþÿ üõîúÿØÿØçÑÿG»Þ”¹}Ö¿iÿóÿI»Þ—É »Pþäÿÿ×L¿ìí¨ÿØÿاÿW—~ÿ’®rnƒa¤_±„ÿóÿ’­tYçÓHÿåPxR|ÿ’ÿØÿØEÿ”Úÿ*ÇÎ(ë¿,ÿôÿ*Ç)µeìÿØYÈðÿÍÿØÿÛÖÎûçÿû Þòÿÿýß þÿþÿø Þͺ0ñÿØ\ÿÿìÿØÿØÿÿîß Òÿ*¾íùÇ(ÿõÿ+½{vËÔÿغÿ:ÿØÿØÿïƒÿžsÿƒªd£~p¬‡ÿõÿ­a%ógÔÿØÁÿv‹ÿÛÿØÿØã÷!σÿbÁׄªÐ·MÞ·KÿõÿRÁÛ‚ è ëÿØ5Õò¥ÝæÿØÿØdÿ°þÿýŒ|þÿü½þÿýEáþÿ=þÿýÛ%þÿýzýÎUóÿI»Þ—É »Pâÿ£¨ðÃÿØlÚñ¯lÚñ¯lÚñ¯ þxóÿ’­tYçÿä±²ÿœÿØUÿ‡dý«Uÿ‡dý«Uÿ‡dý« þôÿ*Ç)µeâÿêÿÎÿØ·ÿÚØûî·ÿÚØûî·ÿÚØûî þþÿø Þͺ0õÿØÿØÿØÏÿÿüúÏÿÿüúÏÿÿþú þ`õÿ+½{vËóÿØÿØÿدÿü¯ÿü¯ÿýéõÿ­a%ógßÿØÿØÿØJÿÈeT!JÿÈeT!JÿÈeT!3üx¼õÿRÁÛ‚ è ßÿØÿØÿØb×õÏ\b×õÏ\b×õÏ\Q¶ýŒ|#ý‘Uü½#ý¸ýE*ýÿØömÿèÏÿƒýÿØöÿÿ2ÿÿ’ýÿØôI»Þ—É »PÃæð{iéë¡$¿ìí¨°ñä¥$¿ìí¨Òþ¿üÿØÿØÿاÿW’­tYçġٶó¥ã¯ xR|ÿ’®ÿqcc xR|ÿ’vÿX÷ºÿØÿØÿØEÿ”*Ç)µeгÏzø ð`ܾYÈðÿͰÿŠYÈðÿÍþ ;ÿgÿØÿØÿÛÖÎø Þͺ0ÕÄÅ;ÿlÿÕÍ\ÿÿìÿØ$¿ÿèN\ÿÿìÿؽèzýÿÙÿØÿÿòß +½{vËÅÕ¹ñáÍÉÛºÿ:ÿØQûëºÿ:ÿØaÿÚ¿ôöÿØÿïƒÿ­a%ógÅ笯ÿ€¼êÁÿv‹ÿÛvodùÖÁÿv‹ÿÛ÷ÿ\Æÿ ÄÿØÿØã÷!RÁÛ‚ è äøŸhÿ3¯ù5Õò¥Ýæ–ñó¿/5Õò¥ÝæíÍî6Úë“ÃØÿØdÿ°ýŒ|!ûzÿyü½!ûhÿÃýE"ü!t‘€§÷¤¦§¦£§¦0¦§¦ø¢§¦¦¦¥2ý¦§ú¥§¥§¥3ý¦§ú §¦§™3ý¦§ü¦§§4ý¦§ú¥§§¦¦3ý¦§ú§¦¦§¦3ý¦§ö£§¦¦§¢ ¢0ý¦§ö¦§¦¤§¦¥¦<¦=ý§ŽCý§¦(§û§¦Ž¦¦ý§¦(¦ù§¦¥§¦ý§¦(ý§¦÷§¦¥¦¦€¥¦¦ú¥§§¦¦ø¡¦¦§¦¦¡ý§¦§ç¦§ž¦§§¦¦§£§§¦¦§¦¤§¦¥§§ý§¦§¦ê§§£¦§§§§’ §§¤¦¦§¦ý§¦ꧦ¦§¦¦§––§¦§¦§§¥§§þ¦ý§¦姦¦§£§§¥¥§¦§§™¡§¦§§¤€§¦ý§¦ñ§¦¦§§¤§¦§¦§¤§§ö¦§¥¦§¦¦ý§¦ꧦ¦§¥¥§¦§¥§¥¦¦§Ž¥¦¦§þ§\€§÷¤¦§¦£§¦0¦§¦ø¢§¦¦¦¥2ý¦§ú¥§¥§¥3ý¦§ú §¦§™3ý¦§ü¦§§4ý¦§ú¥§§¦¦3ý¦§ú§¦¦§¦3ý¦§ö£§¦¦§¢ ¢0ý¦§ö¦§¦¤§¦¥¦<¦=ý§ŽCý§¦(§û§¦Ž¦¦ý§¦(¦ù§¦¥§¦ý§¦(ý§¦÷§¦¥¦¦€¥¦¦ú¥§§¦¦ø¡¦¦§¦¦¡ý§¦§ç¦§ž¦§§¦¦§£§§¦¦§¦¤§¦¥§§ý§¦§¦ê§§£¦§§§§’ §§¤¦¦§¦ý§¦ꧦ¦§¦¦§––§¦§¦§§¥§§þ¦ý§¦姦¦§£§§¥¥§¦§§™¡§¦§§¤€§¦ý§¦ñ§¦¦§§¤§¦§¦§¤§§ö¦§¥¦§¦¦ý§¦ꧦ¦§¥¥§¦§¥§¥¦¦§Ž¥¦¦§þ§\€§÷¤¦§¦£§¦0¦§¦ø¢§¦¦¦¥2ý¦§ú¥§¥§¥3ý¦§ú §¦§™3ý¦§ü¦§§4ý¦§ú¥§§¦¦3ý¦§ú§¦¦§¦3ý¦§ö£§¦¦§¢ ¢0ý¦§ö¦§¦¤§¦¥¦<¦=ý§ŽCý§¦(§û§¦Ž¦¦ý§¦(¦ù§¦¥§¦ý§¦(ý§¦÷§¦¥¦¦€¥¦¦ú¥§§¦¦ø¡¦¦§¦¦¡ý§¦§ç¦§ž¦§§¦¦§£§§¦¦§¦¤§¦¥§§ý§¦§¦ê§§£¦§§§§’ §§¤¦¦§¦ý§¦ꧦ¦§¦¦§––§¦§¦§§¥§§þ¦ý§¦姦¦§£§§¥¥§¦§§™¡§¦§§¤€§¦ý§¦ñ§¦¦§§¤§¦§¦§¤§§ö¦§¥¦§¦¦ý§¦ꧦ¦§¥¥§¦§¥§¥¦¦§Ž¥¦¦§þ§\€ÿ÷HªÿLJÿŸ0ˆóîÿˆˆ'(ýļù2ýØÿúžÿ\ÿ3ýØÿúúùñ3ýØÿü¿ÿ¬4ýØÿú/ÿîû$3ýØÿú²ö>ÿ¨3ýØÿö9ÿš´ÿ330ýØÿö¾ÿ*:ÿ»Q¶<ý‘U<ý¸CýÿØ(ýÛøÿØØü8ýÿØ(ýzùÿ؇ÿzýÿØ(ýÿØåÿØ2ü¿QÎõÓZÿÝŸð³$¿ìí¨ýÿØåÿÚÊñAÿÌcÊÿGÿÿ«³ÿ– xR|ÿ’ýÿØÿèü*¬ÿ<;ÿ¯ÿñÿãYÈðÿÍýÿØåÿùiÿ·ÎÿÿÍÿØæ÷\ÿÿìÿØýÿØåÿØ®ÿG¯ÿ@@ÿ§ÿîÿÖºÿ:ÿØýÿØâÿØ*ýÔMÿËaÊÿBÿÿ©²ÿ{Áÿv‹ÿÛLýÿØâÿØÿhZÔöÒTÿ¡Áð˜5Õò¥Ýæµ\ÀÀÀÀ    hþ§!¦ý§¡þ§!ú§€¦§þ§!ø§U¦¤¦¦ñ¥¤§¦¦€¥¦¦ U¦¦þ§þU§§û §¦¦þ¡â§œ¦¦£™¥¦§¦™¦¦§¦¥¦’€¥§¦€ö¦§§¥¥§§þ뙦¦¦’¦¢¡§¦¤œ§¦ö¢§§¤£¦ì§€£¦¦•¦¦§§£¦¦¤¦§§ý¦™þ§ý¦Žû¦§þ§ô§U§¦¦¤™§ú¤¦¦™ù¦¢™§ö¦¢ §§þ§â§€¤§§¦¦§€ £¦§§€¥§€U¥§ö¤¦€U¥¥§þ§¦ô§¦¥¥§¦¥§™¦¦ü£™¦¦ø¤€¥¦¦¥§ö€¥¦§¦™§þ§·þ§þ§þ§þ¥þ¥þ§þ§þ§þ§þ§þ§󧤧¦¦¦§¦¦÷¡€¥¦§¦§홦§¦¥§¤§¦£€¥¦¦  þ§è§§¦™¦§¥¥§¥§™€¦¦þ§§õ€¤¦¦¦§¦ þ§触¦’¦§¤£¦¦£€¦þ§󧙦¦¢¡§ î§  §£¦¦¤§§û§¦™þ§þ§þ§û§¦§§ù§¢¦¦ø¤¦§§÷§¦¦™§ú§€§ú§¦™€™§¥ £¦¦§÷§¥§€€¥¦ú§¢§ù§§§€÷¦§¦§ ¦¦ù£¦§÷§™¥§¦¤¦¦ý§û§™¦¦þ¤'ý•¦8¡ûU¦¦8ù¥§¦§¦™•hþ§!¦ý§¡þ§!ú§€¦§þ§!ø§U¦¤¦¦ñ¥¤§¦¦€¥¦¦ U¦¦þ§þU§§û §¦¦þ¡â§œ¦¦£™¥¦§¦™¦¦§¦¥¦’€¥§¦€ö¦§§¥¥§§þ뙦¦¦’¦¢¡§¦¤œ§¦ö¢§§¤£¦ì§€£¦¦•¦¦§§£¦¦¤¦§§ý¦™þ§ý¦Žû¦§þ§ô§U§¦¦¤™§ú¤¦¦™ù¦¢™§ö¦¢ §§þ§â§€¤§§¦¦§€ £¦§§€¥§€U¥§ö¤¦€U¥¥§þ§¦ô§¦¥¥§¦¥§™¦¦ü£™¦¦ø¤€¥¦¦¥§ö€¥¦§¦™§þ§·þ§þ§þ§þ¥þ¥þ§þ§þ§þ§þ§þ§󧤧¦¦¦§¦¦÷¡€¥¦§¦§홦§¦¥§¤§¦£€¥¦¦  þ§è§§¦™¦§¥¥§¥§™€¦¦þ§§õ€¤¦¦¦§¦ þ§触¦’¦§¤£¦¦£€¦þ§󧙦¦¢¡§ î§  §£¦¦¤§§û§¦™þ§þ§þ§û§¦§§ù§¢¦¦ø¤¦§§÷§¦¦™§ú§€§ú§¦™€™§¥ £¦¦§÷§¥§€€¥¦ú§¢§ù§§§€÷¦§¦§ ¦¦ù£¦§÷§™¥§¦¤¦¦ý§û§™¦¦þ¤'ý•¦8¡ûU¦¦8ù¥§¦§¦™•hþ§!¦ý§¡þ§!ú§€¦§þ§!ø§U¦¤¦¦ñ¥¤§¦¦€¥¦¦ U¦¦þ§þU§§û §¦¦þ¡â§œ¦¦£™¥¦§¦™¦¦§¦¥¦’€¥§¦€ö¦§§¥¥§§þ뙦¦¦’¦¢¡§¦¤œ§¦ö¢§§¤£¦ì§€£¦¦•¦¦§§£¦¦¤¦§§ý¦™þ§ý¦Žû¦§þ§ô§U§¦¦¤™§ú¤¦¦™ù¦¢™§ö¦¢ §§þ§â§€¤§§¦¦§€ £¦§§€¥§€U¥§ö¤¦€U¥¥§þ§¦ô§¦¥¥§¦¥§™¦¦ü£™¦¦ø¤€¥¦¦¥§ö€¥¦§¦™§þ§·þ§þ§þ§þ¥þ¥þ§þ§þ§þ§þ§þ§󧤧¦¦¦§¦¦÷¡€¥¦§¦§홦§¦¥§¤§¦£€¥¦¦  þ§è§§¦™¦§¥¥§¥§™€¦¦þ§§õ€¤¦¦¦§¦ þ§触¦’¦§¤£¦¦£€¦þ§󧙦¦¢¡§ î§  §£¦¦¤§§û§¦™þ§þ§þ§û§¦§§ù§¢¦¦ø¤¦§§÷§¦¦™§ú§€§ú§¦™€™§¥ £¦¦§÷§¥§€€¥¦ú§¢§ù§§§€÷¦§¦§ ¦¦ù£¦§÷§™¥§¦¤¦¦ý§û§™¦¦þ¤'ý•¦8¡ûU¦¦8ù¥§¦§¦™•hþÿ!úÜÇÖ½-þÿ!úÿAÑþÿ!âÿß?ÂËÊ/Mѹ}Ö¿iÿòuÌÑÿ[ÄÕ0âÿ†† ZÇé$ nƒa¤_±„ÿò]ª—~ÿpbÀÿýÔ ëù€Î(ë¿,ÿò¿*Úÿ óìÿ#…· ‰Ùôÿ§Õ7òÿÿýß þÿýßûçÿþÿôÿ쥈)ÿúVáíùÇ(ÿöÄ+ÒÿþÿâÿMÆÚ'Rÿ.å£~p¬‡ÿög®žsÿþÿâðÎÔ®!\Ý¿|ã§ÄÓGªÐ·MÞ·KÿöÐσÿþÿ·þÿþÿþÿþþ\þÿþÿþÿþÿþÿþÿèÿMÑÂêÿ[ÄÕ0sÕ½qèíÈÿÈŠÿVÉØ1¹ þÿèÿé$ íÿpbÀWµ nþþÿóÿudÁnƒa¤ þÿèÿ€ðÿ ó».õþÿóÿóÎ(ë îú÷§Õ7ôÿûÿÞ þèþÿþÿûÿòÿÿùÚ(*ÕøVá÷ÿ÷ÿÇ'÷úÿÿúÿí¦y.åûÿ÷ÿm¬pþúè(ÿùÿ£~î ÚÖŒ§ÄÓGþÿ÷ÿŠÚ¶däúåoÿ÷ÿªÐ·M'ý Ù8û‰ˆ8ù5ÌÐÒ” •Mþ§ þ§þ§ ý§¥þ§þ§ þ§þ§ ù§¦’§þ§ þ§þ§ ë§¥¥§€¥¦¦ §¢¦¦U§§û §¦¦ò €¥¦¦ €¥¦¦ þ§¦¦ø §•¦¤Ò§ ¦§¦¦§¦§€§§¦¦€€¦§§§€€¦¦¦¦§¦¦¦§¦§€¦ú¤ž¦’Ò§¦§§¦¢¡§§¥¦€¦¦¢§§¢¦¦¦¢¡§¦¢¡§ô§¢¦¦¤§¥¥ö§ ¦§¦§§þ§§û€¦Žû¦§û™¦¦§§ý¦§§þ§ø™¦¦›§¡õ§¦¦§¦™é§•§¦¦¢ §§™¢§¦™ý¦™õ§™¢§§¥¦ô§€¦§§§€觤§¥¤¦€U¥¥§¥€€¦§§§€§þ€õ§¥€€¦§¡¦¤þ§ú¤§™¦¦ï¤§§¦€¥¦§¦™§¦¦üU™¦¦ü¤™¦¦þ¤þ§¦¦úU¤§;ý§¥;ü¦§™;ý¤€þ§þ§¦¦ý§™𧡦¦§¦§¦¦§¦¦§¦¦ú§¥§ö§™¦§¦§¤÷¦§¦¦¤§î§U¦¦ §§¤€›þ§÷§€¥§§õ§•¦¤™U¥¦¢÷§U¦¦§þ§ö¦¥§¦¡þ§÷§U¦§û§§§¦÷§–§§þ§õ §§§§¤þ§÷§ §¦§û§¦¦ý™¦÷§Ž›¦¦§þ§ó§§€¥¦¥™þ§§üU§§ü¦™þ¦§ú¥¡§þ§ú¥¦§ü ¦¥þ§÷§£¦¥§û§§¦ý §þ§þ§þ§ú¥¦§ý›§þ§÷§¦¦§û§¦¥¦þ§þ§î§ ¥¦€§¢€¥¦þ§÷§¤§U§õ§¡¦¥€U¦¦þ§þ§ù¦§§¦¦’÷§¦§¦¦žþ§þ§û¦¡§ö§ž¦¦§¦¥þ§þ§AMþ§ þ§þ§ ý§¥þ§þ§ þ§þ§ ù§¦’§þ§ þ§þ§ ë§¥¥§€¥¦¦ §¢¦¦U§§û §¦¦ò €¥¦¦ €¥¦¦ þ§¦¦ø §•¦¤Ò§ ¦§¦¦§¦§€§§¦¦€€¦§§§€€¦¦¦¦§¦¦¦§¦§€¦ú¤ž¦’Ò§¦§§¦¢¡§§¥¦€¦¦¢§§¢¦¦¦¢¡§¦¢¡§ô§¢¦¦¤§¥¥ö§ ¦§¦§§þ§§û€¦Žû¦§û™¦¦§§ý¦§§þ§ø™¦¦›§¡õ§¦¦§¦™é§•§¦¦¢ §§™¢§¦™ý¦™õ§™¢§§¥¦ô§€¦§§§€觤§¥¤¦€U¥¥§¥€€¦§§§€§þ€õ§¥€€¦§¡¦¤þ§ú¤§™¦¦ï¤§§¦€¥¦§¦™§¦¦üU™¦¦ü¤™¦¦þ¤þ§¦¦úU¤§;ý§¥;ü¦§™;ý¤€þ§þ§¦¦ý§™𧡦¦§¦§¦¦§¦¦§¦¦ú§¥§ö§™¦§¦§¤÷¦§¦¦¤§î§U¦¦ §§¤€›þ§÷§€¥§§õ§•¦¤™U¥¦¢÷§U¦¦§þ§ö¦¥§¦¡þ§÷§U¦§û§§§¦÷§–§§þ§õ §§§§¤þ§÷§ §¦§û§¦¦ý™¦÷§Ž›¦¦§þ§ó§§€¥¦¥™þ§§üU§§ü¦™þ¦§ú¥¡§þ§ú¥¦§ü ¦¥þ§÷§£¦¥§û§§¦ý §þ§þ§þ§ú¥¦§ý›§þ§÷§¦¦§û§¦¥¦þ§þ§î§ ¥¦€§¢€¥¦þ§÷§¤§U§õ§¡¦¥€U¦¦þ§þ§ù¦§§¦¦’÷§¦§¦¦žþ§þ§û¦¡§ö§ž¦¦§¦¥þ§þ§AMþ§ þ§þ§ ý§¥þ§þ§ þ§þ§ ù§¦’§þ§ þ§þ§ ë§¥¥§€¥¦¦ §¢¦¦U§§û §¦¦ò €¥¦¦ €¥¦¦ þ§¦¦ø §•¦¤Ò§ ¦§¦¦§¦§€§§¦¦€€¦§§§€€¦¦¦¦§¦¦¦§¦§€¦ú¤ž¦’Ò§¦§§¦¢¡§§¥¦€¦¦¢§§¢¦¦¦¢¡§¦¢¡§ô§¢¦¦¤§¥¥ö§ ¦§¦§§þ§§û€¦Žû¦§û™¦¦§§ý¦§§þ§ø™¦¦›§¡õ§¦¦§¦™é§•§¦¦¢ §§™¢§¦™ý¦™õ§™¢§§¥¦ô§€¦§§§€觤§¥¤¦€U¥¥§¥€€¦§§§€§þ€õ§¥€€¦§¡¦¤þ§ú¤§™¦¦ï¤§§¦€¥¦§¦™§¦¦üU™¦¦ü¤™¦¦þ¤þ§¦¦úU¤§;ý§¥;ü¦§™;ý¤€þ§þ§¦¦ý§™𧡦¦§¦§¦¦§¦¦§¦¦ú§¥§ö§™¦§¦§¤÷¦§¦¦¤§î§U¦¦ §§¤€›þ§÷§€¥§§õ§•¦¤™U¥¦¢÷§U¦¦§þ§ö¦¥§¦¡þ§÷§U¦§û§§§¦÷§–§§þ§õ §§§§¤þ§÷§ §¦§û§¦¦ý™¦÷§Ž›¦¦§þ§ó§§€¥¦¥™þ§§üU§§ü¦™þ¦§ú¥¡§þ§ú¥¦§ü ¦¥þ§÷§£¦¥§û§§¦ý §þ§þ§þ§ú¥¦§ý›§þ§÷§¦¦§û§¦¥¦þ§þ§î§ ¥¦€§¢€¥¦þ§÷§¤§U§õ§¡¦¥€U¦¦þ§þ§ù¦§§¦¦’÷§¦§¦¦žþ§þ§û¦¡§ö§ž¦¦§¦¥þ§þ§AMþÿ þÿþÿ ýÿ\þÿþÿ þÿþÿ ùÿ·ÿþÿ þÿþÿ Òÿbmÿ¹ÿ ÎUuÌÑÿI»Þ—¹¹óÿI»Þ—É »PÒÿÎ ÿnƒa¤ÿ£x]ª—~ÿ’­tnƒa¤nƒa¤óÿ’­tYçÒÿn~ÿÎ(ëÿj ¿*Úÿ*ÇÎ(ëÎ(ëôÿ*Ç)µeöÿÎ ÿòÿÿ÷ÿѲßûçÿû Þòÿÿýòÿÿþÿø Þͺ0õÿ`qÿíéÿ Æ`Ä+Òÿ+½íýíõÿ+½{vËôÿ¹ÿ£~èÿ)ég®žsÿ­a£~ü£~õÿ­a%ógþÿÖPÿªÐ·Mÿx¼ÐσÿRÁÛ‚ªÐ·MªÐ·MõÿRÁÛ‚ è ;ýŒ|;ü½;ýEþÿùÚÍËÄ•èÿ%¹ØÝ“•ØØÿØØ˜ÜÊÙÀ/ÿöÿŸÔÙ²&÷ßÌÖ¶&ÿîÿ`ÛÿÉHþÿ÷ÿFÒÿõÿ ÖYKå ÷ÿ]Ðÿþÿörÿíþÿ÷ÿêÿûÿ~~ýi ÷ÿñÿþÿõ"Ìÿ¸&þÿ÷ÿ~Ÿÿûÿ¾$ýÛ÷ÿ”­ÿþÿó ÝÿNÕ„ þÿÿûºÿÿüß þçÿùì¡ÿþÿú/¹ÿü“¡þÿ÷ÿÍNÿûÿÃ$ýÔþÿþÿþÿúoÿýÝþÿ÷ÿX­ÿûÿ‰ýi™þÿþÿîÿyÇÿ+j¥þÿ÷ÿ éÿõÿá\IßþÿþÿùòÏÆÂw÷ÿ¨ÚÕ¤þÿþÿûÅ0ÿöÿªÙ×®!þÿþÿAný§¦úž§¦§§§¦þ¤ú§¦¦§ ý¦§¦¦ù§¦¥¥§¦ú§¦¦§ ¦þ€ý€¦§§ï¦¦§¦¦¡§§¦¦§¢ö§¦Ž¥§§¥¦¦ú¥§¦§§ý¥¦¦Þ¥§§¦§¦ž¦§¥¤§¦¤§¦¥§§§§¦§§¦§È™¦§§¦¦§£§¦¤¦§¤¤¦§§¦¦§£§§¡¦§¦¥¦§§¦¦§¤¦¦§¦§¦U¡§¦§Ü¦¥§§£¦§§§¦¦§§§£¦§§§¦€§§¦§§ý¥§§ö¦§¦§¦ß§¦¡¦§¦§––§¦§¦¦§¦§––§¦§¦ø€§§§§¡§ó¤€§¦§¦§¦Õ§¦€§¦§§¥¥§¦§¦¦§¢§§¥¥§¦§¦¦§¦§§£§¦¥¥ð¦§¥¦§¦§¦§¦Þ§¦¥¦§§¦§¦§¦§¤§¦§§¦¤¦§¦§¦§¤§¦¦¦õ€¥§¦§¥¥¦¦§ù§¦§¦í§¦¦§¥¤¥§¦§¥§¦¦¦ô¤¥§¦§¥§¦®û§§þ¥ ø§¦¦§¦¦§ û§§û¥¥þ§û§§þ§þ§ñ§€¥¦§¦§¦§¦¦þ¡û§U§§ü U§§ê §§¢¦¦¦™¦§¦¥§í§¥§™€¦¦¦§¥¥§০¦€€¦§¦¦€€¦§§§€§§¦§þ§í§¦£€¦¦§¤£¦০¦¢§¦¦¢§§§¥¦€¦§÷§€§¦™ø§§§þ§ú§¦Žû¦¦Žù¦§§§ø€§§í¦¥¤§¦¦™§§§þ§ß§¦¢ §¦¢ §§§•§¦§§€í§¤™§§¥§€€¥¦¦§þ§ʧ¤¦€U¥¥¤¦€U¥¥§§¤§¥¦§¢ ¢¢¦§¥§™¥§¦¤¦¦§þ§á§€¥¦§¦™€¥¦§¦™§§§¦U¦¦¦ý¥¦ý•¦0¦¡ûU¦¦0ý§Žù¥§¦§¦™³ný§¦úž§¦§§§¦þ¤ú§¦¦§ ý¦§¦¦ù§¦¥¥§¦ú§¦¦§ ¦þ€ý€¦§§ï¦¦§¦¦¡§§¦¦§¢ö§¦Ž¥§§¥¦¦ú¥§¦§§ý¥¦¦Þ¥§§¦§¦ž¦§¥¤§¦¤§¦¥§§§§¦§§¦§È™¦§§¦¦§£§¦¤¦§¤¤¦§§¦¦§£§§¡¦§¦¥¦§§¦¦§¤¦¦§¦§¦U¡§¦§Ü¦¥§§£¦§§§¦¦§§§£¦§§§¦€§§¦§§ý¥§§ö¦§¦§¦ß§¦¡¦§¦§––§¦§¦¦§¦§––§¦§¦ø€§§§§¡§ó¤€§¦§¦§¦Õ§¦€§¦§§¥¥§¦§¦¦§¢§§¥¥§¦§¦¦§¦§§£§¦¥¥ð¦§¥¦§¦§¦§¦Þ§¦¥¦§§¦§¦§¦§¤§¦§§¦¤¦§¦§¦§¤§¦¦¦õ€¥§¦§¥¥¦¦§ù§¦§¦í§¦¦§¥¤¥§¦§¥§¦¦¦ô¤¥§¦§¥§¦®û§§þ¥ ø§¦¦§¦¦§ û§§û¥¥þ§û§§þ§þ§ñ§€¥¦§¦§¦§¦¦þ¡û§U§§ü U§§ê §§¢¦¦¦™¦§¦¥§í§¥§™€¦¦¦§¥¥§০¦€€¦§¦¦€€¦§§§€§§¦§þ§í§¦£€¦¦§¤£¦০¦¢§¦¦¢§§§¥¦€¦§÷§€§¦™ø§§§þ§ú§¦Žû¦¦Žù¦§§§ø€§§í¦¥¤§¦¦™§§§þ§ß§¦¢ §¦¢ §§§•§¦§§€í§¤™§§¥§€€¥¦¦§þ§ʧ¤¦€U¥¥¤¦€U¥¥§§¤§¥¦§¢ ¢¢¦§¥§™¥§¦¤¦¦§þ§á§€¥¦§¦™€¥¦§¦™§§§¦U¦¦¦ý¥¦ý•¦0¦¡ûU¦¦0ý§Žù¥§¦§¦™³ný§¦úž§¦§§§¦þ¤ú§¦¦§ ý¦§¦¦ù§¦¥¥§¦ú§¦¦§ ¦þ€ý€¦§§ï¦¦§¦¦¡§§¦¦§¢ö§¦Ž¥§§¥¦¦ú¥§¦§§ý¥¦¦Þ¥§§¦§¦ž¦§¥¤§¦¤§¦¥§§§§¦§§¦§È™¦§§¦¦§£§¦¤¦§¤¤¦§§¦¦§£§§¡¦§¦¥¦§§¦¦§¤¦¦§¦§¦U¡§¦§Ü¦¥§§£¦§§§¦¦§§§£¦§§§¦€§§¦§§ý¥§§ö¦§¦§¦ß§¦¡¦§¦§––§¦§¦¦§¦§––§¦§¦ø€§§§§¡§ó¤€§¦§¦§¦Õ§¦€§¦§§¥¥§¦§¦¦§¢§§¥¥§¦§¦¦§¦§§£§¦¥¥ð¦§¥¦§¦§¦§¦Þ§¦¥¦§§¦§¦§¦§¤§¦§§¦¤¦§¦§¦§¤§¦¦¦õ€¥§¦§¥¥¦¦§ù§¦§¦í§¦¦§¥¤¥§¦§¥§¦¦¦ô¤¥§¦§¥§¦®û§§þ¥ ø§¦¦§¦¦§ û§§û¥¥þ§û§§þ§þ§ñ§€¥¦§¦§¦§¦¦þ¡û§U§§ü U§§ê §§¢¦¦¦™¦§¦¥§í§¥§™€¦¦¦§¥¥§০¦€€¦§¦¦€€¦§§§€§§¦§þ§í§¦£€¦¦§¤£¦০¦¢§¦¦¢§§§¥¦€¦§÷§€§¦™ø§§§þ§ú§¦Žû¦¦Žù¦§§§ø€§§í¦¥¤§¦¦™§§§þ§ß§¦¢ §¦¢ §§§•§¦§§€í§¤™§§¥§€€¥¦¦§þ§ʧ¤¦€U¥¥¤¦€U¥¥§§¤§¥¦§¢ ¢¢¦§¥§™¥§¦¤¦¦§þ§á§€¥¦§¦™€¥¦§¦™§§§¦U¦¦¦ý¥¦ý•¦0¦¡ûU¦¦0ý§Žù¥§¦§¦™³nýÿØú²òî¯ùÚîûê¨úÿØI˜ ú¹ÿš‘…ùÿçWÿ´úÿØØÿ üõðêlÚñ¯$¿ìí¨ÿ£¨ðÃíÿØWÿ£QÎõÓZÿظÿÿØxQÎõÓZÿ£Äÿ¤Uÿ‡dý« xR|ÿ’ÿÿ±²ÿœÿǦAÿÌcÊÿGÿØ:åÿP&AÿÌcÊÿGÿÿ¿ÿâ5·ÿÚØûîYÈðÿÍÿêÿÎ×ÿúãÿûQ¬ÿ<;ÿ¯ÿØØÿ¬ÿ<;ÿ¯ÿêxÿÖÏÿÿïú\ÿÿìÿØÿØÿØßÿØ0ûÚÎÿÿÍÿØØÿÎÿÿÍÿØøïô¯ÿñºÿ:ÿØÿØÿØÃÿØéò¯ÿ@@ÿ§ÿØØÿ ¯ÿ@@ÿ§ÿس’¥ÿ²JÿÈeT!Áÿv‹ÿÛÿØÿØÃÿç_«ÿ£IÿËaÊÿBÿØÀÿ¢,IÿËaÊÿBÿØ«íð­b×õÏ\5Õò¥ÝæÿØÿØßèøóׄ ZÔöÒTÿØ>ÙõVZÔöÒTÿØ®ûÿÿþ ø•ØØÿØØ˜ ûÿÿû\þÿûÿÿþÿþÿíÿsÕ½qèêÿ[ÄÕ0ÛÿuÌÑuÌÑÿÿ ÎUêÈÿÈŠÿíÿWµ nþíÿpbÀàÿ]ª—~]ª—~ÿÿ£xíÿþÿíÿ».õðÿ óàÿ¿*Ú¿*Úÿÿj ðÿ÷ÿÿÞ øèôÿþÿúÿßûçßïçÿÿѲôÿíò ÿÇ'÷÷ÿþÿßÿÄ+ÒÄ+Òÿÿ Æ`÷ÿíÃdxÿm¬pþûÿþÿÊÿg®žsg®žsÿÿ)éûè(36ÜÌ\ÿŠÚ¶däþÿþÿÜÿÐσÐσÿÿx¼þåoQ¶ý Ù0ý‘Uû‰ˆ0ý¸ù5ÌÐÒ” ³Xþ§þ§,þ§ þ¥þ§,þ§ þ§þ§¦ý§¢þ¤¦¦û¥§¦¦ü¡U¦¦þ§þU§§Þ ™¦§¦¥§¤§¦£€¥¦¦ §¦¦¤§¦¦¦§§¦죙¥¦§¥¥§¥¦’€¥§¦€ú¦§§§ç€¤¦¦¦§¦§¦Ž§¦™U¡§¦§¤£¦¦¤œ§¦ú¢§§ë§™¦¦¢¡§§£¦¦’ý§¦÷•¦¦§§§û§¦™þ§ý¦Žû¦§þ§û§¦§§ö§U£¦¦¤ý§¦¦ù¤™§§÷§¦¢™§ò¦¢ §§€§ú§¦™þ§ý¤¦ý§¦÷§¦¦§€§÷§¥§€U¥§ò¤¦€U¥¥§¢§ù§§§€þ§û £¦ý§¦÷¥§¦¥§™§÷§€¥¦¦¥§÷€¥¦§¦™¦¦ý§û§™¦¦ü¤§¦þ£Åù™¦§¦§¤öU¤¦§¦§¦§þ§û§§÷•¦¤™U¥¦¢õ€§¦ €€ž§þ§û§§§¦ý§£¦¦ö’€¥¦¦ §¦¦û¡¥¥þ§þ§û§§¦晦§§€’¦¦¦¦§¦§¥¥§§¡þ§þ§û§§ý¦™䦧¢¦¦¦¢¡§§¤£¦§–¤§§ý§þ§û§§ý§¦ú §§û™¦¦§§ý§û§§¦ü§§ö§  §§ý¦¥¦ö§–¦¦¦™þ§ú§§¦€ü§§ö§¢¦¦§롦¥€U¦¦§¦€™¦¤§§€þ§󧙦¦ž’§§󦧀™§¥§¦ùž¦¦§¦¥÷§¥¦§¥€™¦¦ü¤§û§™¦¦§ý§¦¦þ§󦧦§ §§ þ§=þ§=þ§°Xþ§þ§,þ§ þ¥þ§,þ§ þ§þ§¦ý§¢þ¤¦¦û¥§¦¦ü¡U¦¦þ§þU§§Þ ™¦§¦¥§¤§¦£€¥¦¦ §¦¦¤§¦¦¦§§¦죙¥¦§¥¥§¥¦’€¥§¦€ú¦§§§ç€¤¦¦¦§¦§¦Ž§¦™U¡§¦§¤£¦¦¤œ§¦ú¢§§ë§™¦¦¢¡§§£¦¦’ý§¦÷•¦¦§§§û§¦™þ§ý¦Žû¦§þ§û§¦§§ö§U£¦¦¤ý§¦¦ù¤™§§÷§¦¢™§ò¦¢ §§€§ú§¦™þ§ý¤¦ý§¦÷§¦¦§€§÷§¥§€U¥§ò¤¦€U¥¥§¢§ù§§§€þ§û £¦ý§¦÷¥§¦¥§™§÷§€¥¦¦¥§÷€¥¦§¦™¦¦ý§û§™¦¦ü¤§¦þ£Åù™¦§¦§¤öU¤¦§¦§¦§þ§û§§÷•¦¤™U¥¦¢õ€§¦ €€ž§þ§û§§§¦ý§£¦¦ö’€¥¦¦ §¦¦û¡¥¥þ§þ§û§§¦晦§§€’¦¦¦¦§¦§¥¥§§¡þ§þ§û§§ý¦™䦧¢¦¦¦¢¡§§¤£¦§–¤§§ý§þ§û§§ý§¦ú §§û™¦¦§§ý§û§§¦ü§§ö§  §§ý¦¥¦ö§–¦¦¦™þ§ú§§¦€ü§§ö§¢¦¦§롦¥€U¦¦§¦€™¦¤§§€þ§󧙦¦ž’§§󦧀™§¥§¦ùž¦¦§¦¥÷§¥¦§¥€™¦¦ü¤§û§™¦¦§ý§¦¦þ§󦧦§ §§ þ§=þ§=þ§°Xþ§þ§,þ§ þ¥þ§,þ§ þ§þ§¦ý§¢þ¤¦¦û¥§¦¦ü¡U¦¦þ§þU§§Þ ™¦§¦¥§¤§¦£€¥¦¦ §¦¦¤§¦¦¦§§¦죙¥¦§¥¥§¥¦’€¥§¦€ú¦§§§ç€¤¦¦¦§¦§¦Ž§¦™U¡§¦§¤£¦¦¤œ§¦ú¢§§ë§™¦¦¢¡§§£¦¦’ý§¦÷•¦¦§§§û§¦™þ§ý¦Žû¦§þ§û§¦§§ö§U£¦¦¤ý§¦¦ù¤™§§÷§¦¢™§ò¦¢ §§€§ú§¦™þ§ý¤¦ý§¦÷§¦¦§€§÷§¥§€U¥§ò¤¦€U¥¥§¢§ù§§§€þ§û £¦ý§¦÷¥§¦¥§™§÷§€¥¦¦¥§÷€¥¦§¦™¦¦ý§û§™¦¦ü¤§¦þ£Åù™¦§¦§¤öU¤¦§¦§¦§þ§û§§÷•¦¤™U¥¦¢õ€§¦ €€ž§þ§û§§§¦ý§£¦¦ö’€¥¦¦ §¦¦û¡¥¥þ§þ§û§§¦晦§§€’¦¦¦¦§¦§¥¥§§¡þ§þ§û§§ý¦™䦧¢¦¦¦¢¡§§¤£¦§–¤§§ý§þ§û§§ý§¦ú §§û™¦¦§§ý§û§§¦ü§§ö§  §§ý¦¥¦ö§–¦¦¦™þ§ú§§¦€ü§§ö§¢¦¦§롦¥€U¦¦§¦€™¦¤§§€þ§󧙦¦ž’§§󦧀™§¥§¦ùž¦¦§¦¥÷§¥¦§¥€™¦¦ü¤§û§™¦¦§ý§¦¦þ§󦧦§ §§ þ§=þ§=þ§°Xþÿþÿ,þÿ þ\þÿ,þÿ þÿþÿû¨ðÃì?ÂËÊ/ÿ[ÄÕ0}Ö¿iÿÙuÌÑÈÿÈŠÿVÉØ1¹ÿXáMѱ²ÿœì ZÇÿpbÀ_±„ÿö]ª—~ÿåÿudÁnƒa¤ÿŽé$ ÿÎïùÿ ó¿,ÿö¿*ÚÿëÿóÎ(ëÿ1€ýÿØ÷ ‰Ùôÿÿûÿß þÿýßûçÿþÿûÿòÿÿöÿ§Õ7ýÿØ÷¥ˆ)ÿÿ÷ÿÇ(ÿòÄ+ÒÿÿúÿíþÿýVáýÿØ÷Ú'Rÿÿ÷ÿp¬‡ÿòg®žsè(ÿùÿ£~þÿû.åýÿØ÷\Ý¿|ãÿ÷ÿÞ·KÿòÐσåoÿõÿªÐ·Mÿû§ÄÓGÅùŸÔÙ²&öV»ÔÜæ¥ÿþÿûÿÿ÷ ÖYKå õµ–"ÿþÿûÿÿ~æi ÿG»Þ”¹ÿ[ÄÕ0vþÿþÿûÿÿý¾$æÛÿ’®rnƒa¤ÿpbÀÀ%þÿþÿûÿÿýß äçÿ*ÇÎ(ëÿ óÝ4ÿÿýÿþÿûÿÿýÃ$úÔÿû Þòÿÿýÿûÿ½;üÿÿöú÷ÿý‰òi™ÿ*¾íþÿúÿ^³üÿÿöÚ(*Õÿëá\Ißÿƒªd£~þÿóÿ¤ÿÿ󈣦yÿLùªÙ×®!ñÿbÁׄªÐ·Mÿóÿ wÐÜÔÚ©ÿÜÜþ¬ó ÚÖŒÿµ þÿ=þÿ=þÿ°@þ¦=þ§ ~@þ¦=þ§ ~@þ¦=þ§ ~@þL=þµ ~    Ç:c11%BOTTOMÿ     ÿÿÿÿgimp-text-layerq(text "For more information see distrho.sf.net/plugins.php") (font "Kozuka Gothic Pr6N") (font-size 12.000000) (font-size-unit pixels) (antialias yes) (hint-style full) (language "en-us") (base-direction ltr) (color (color-rgb 0.654902 0.654902 0.654902)) (justify center) (box-mode fixed) (box-width 305.000000) (box-height 37.000000) (box-unit pixels) (hinting yes) _1%°ò°þ± 1%Ÿ“v›®£+¬-þ§¦¦þ¥9þ§=þ§þU§§ù §¦¦ô§¥¦§¡¦§¦¥U§§ó §¦¦€¥¦¦ þ§¦€ø¦§§¦Ž䧦§§¦¦¦¦¦€€¦§§¦Ž¦¦§¦§ô¥¦¦¢§§£ä§™™§¢¥¦¦¦¢§§£¦¢¡§þ§ý¦Žú¦§Uþ§÷§€§¦Ž÷¦§U¦§§þ§ö¦¢ §§þ§þ§ô§¦¢ §§ý¦™þ§ö¤¦€U¥¥§þ§þ§ô§¤¦€U¥¥§§þ€þ§ö€¥¦§¦™§þ§þ§ô§€¥¦§¦™§þ™¦¦þ¤€þ§¦¦þ¥9þ§=þ§þU§§ù §¦¦ô§¥¦§¡¦§¦¥U§§ó §¦¦€¥¦¦ þ§¦€ø¦§§¦Ž䧦§§¦¦¦¦¦€€¦§§¦Ž¦¦§¦§ô¥¦¦¢§§£ä§™™§¢¥¦¦¦¢§§£¦¢¡§þ§ý¦Žú¦§Uþ§÷§€§¦Ž÷¦§U¦§§þ§ö¦¢ §§þ§þ§ô§¦¢ §§ý¦™þ§ö¤¦€U¥¥§þ§þ§ô§¤¦€U¥¥§§þ€þ§ö€¥¦§¦™§þ§þ§ô§€¥¦§¦™§þ™¦¦þ¤€þ§¦¦þ¥9þ§=þ§þU§§ù §¦¦ô§¥¦§¡¦§¦¥U§§ó §¦¦€¥¦¦ þ§¦€ø¦§§¦Ž䧦§§¦¦¦¦¦€€¦§§¦Ž¦¦§¦§ô¥¦¦¢§§£ä§™™§¢¥¦¦¦¢§§£¦¢¡§þ§ý¦Žú¦§Uþ§÷§€§¦Ž÷¦§U¦§§þ§ö¦¢ §§þ§þ§ô§¦¢ §§ý¦™þ§ö¤¦€U¥¥§þ§þ§ô§¤¦€U¥¥§§þ€þ§ö€¥¦§¦™§þ§þ§ô§€¥¦§¦™§þ™¦¦þ¤€þÿØØþ„9þÿ=þÿôuÌÑÿXáäÿZÂÏ0oÆØ2uÌÑÿXá¹þÿô]ª—~ÿŽäÿwaéniÁ]ª—~ÿŽnƒa¤ÿôT¿*Úÿ1äÿÿ ò¿*Úÿ1Î(ëþÿýßúçÿþÿ÷ÿÿß÷çÿòÿÿþÿöÄ+ÒÿþÿþÿôÿÄ+Òÿýíþÿög®žsÿþÿþÿôÿg®žsÿü£~þÿöÐσÿþÿþÿôÿÐσÿúªÐ·M€Lû¥§¦¡0þ¥ü¦¥€þ¥þ¥ý§™þ§û¦§¦¦ø¡¦§¦¦U§§í §¦¦§¥¦§¡¦§¦¥¤¦¦õ¥™¦§¦¥¦U§§û §¦¦þ¡Ô¦§¥¥§§¦¦€€¦§§¦Ž§¦§§¦¦¦£™¥¦§𦦦€€¦§§¥¥§ݦ§¤£¦§¦¦¢§§£§™™§¢¥¦ú™¦§𦦦¢§§¤£¦û§§÷§§¦Ž÷¦§U§ñ§€§•¦¦§§§û§¦Žû¦§þ§û§§𧧦¢ §§þ§þ§秦¦¤™§§€§¦¢ §§þ§û¦§𧧤¦€U¥¥§þ§þ§ç§§¦¦§€§¢¦¤¦€U¥¥§þ§û¦§ð§§€¥¦§¦™§þ§þ§ö§¥§¦¥§™¦¦ó¦€¥¦§¦™§þ§Lû¥§¦¡0þ¥ü¦¥€þ¥þ¥ý§™þ§û¦§¦¦ø¡¦§¦¦U§§í §¦¦§¥¦§¡¦§¦¥¤¦¦õ¥™¦§¦¥¦U§§û §¦¦þ¡Ô¦§¥¥§§¦¦€€¦§§¦Ž§¦§§¦¦¦£™¥¦§𦦦€€¦§§¥¥§ݦ§¤£¦§¦¦¢§§£§™™§¢¥¦ú™¦§𦦦¢§§¤£¦û§§÷§§¦Ž÷¦§U§ñ§€§•¦¦§§§û§¦Žû¦§þ§û§§𧧦¢ §§þ§þ§秦¦¤™§§€§¦¢ §§þ§û¦§𧧤¦€U¥¥§þ§þ§ç§§¦¦§€§¢¦¤¦€U¥¥§þ§û¦§ð§§€¥¦§¦™§þ§þ§ö§¥§¦¥§™¦¦ó¦€¥¦§¦™§þ§Lû¥§¦¡0þ¥ü¦¥€þ¥þ¥ý§™þ§û¦§¦¦ø¡¦§¦¦U§§í §¦¦§¥¦§¡¦§¦¥¤¦¦õ¥™¦§¦¥¦U§§û §¦¦þ¡Ô¦§¥¥§§¦¦€€¦§§¦Ž§¦§§¦¦¦£™¥¦§𦦦€€¦§§¥¥§ݦ§¤£¦§¦¦¢§§£§™™§¢¥¦ú™¦§𦦦¢§§¤£¦û§§÷§§¦Ž÷¦§U§ñ§€§•¦¦§§§û§¦Žû¦§þ§û§§𧧦¢ §§þ§þ§秦¦¤™§§€§¦¢ §§þ§û¦§𧧤¦€U¥¥§þ§þ§ç§§¦¦§€§¢¦¤¦€U¥¥§þ§û¦§ð§§€¥¦§¦™§þ§þ§ö§¥§¦¥§™¦¦ó¦€¥¦§¦™§þ§Lû5×í0þüÅeþ\þý÷þÿÂêÿ[ÄÕ0¶ÿÈtuÌÑÿXáÿZÂÏ0oÆØ2?ÂËÊ/ÈÿÈŠêuÌÑÿ[ÄÕ0ÔíÿpbÀÿ]ª—~ÿŽÿwaéniÁ ZÇÿðí]ª—~ÿpbÀÝðÿ óÿ¿*Úÿ1ÿÿ òúùÿðð¿*Úÿ óûôÿ÷ÿÿß÷çÿÿñÿÿ ‰Ùôÿÿûôßûçÿþÿû÷ÿðÿÿÄ+Òÿþÿþÿçÿ¥ˆ)ÿÿ÷Ä+Òÿþÿûûÿðÿÿg®žsÿþÿþÿçÿÚ'Rÿè(ûg®žsÿþÿûþÿðÿÿÐσÿþÿþÿçÿ\Ý¿|ãåoþÐσÿþÿ\þ§þ§*û§¥þ¥þ§*þ§þ§þ§蠟¦¦€¥¦¦ €¥¦¦ þU¦¦å§¦¤§¦¥¦§¦¥§¦¦§¤§¦£U§§þ 罹™¦¦§¦¦¦§¦’€¥§¦§¦™§ï§¦Ž§§€¤¦¦¦€€¦§¦ñ’¦¢¡§¦¢¡§œ§¦¦¦’§ï§£§™¦¦¦¢§ù£¦¦¤¦§§ý¦§§ý¦™ó§§£¦¦¤§ú§U§û§¦Žþ¦ ú¤¦¦™ý¦™ö¦¢™§§÷¤¦§€§þ§÷§¦¢ §÷ £¦§§€§þ€ꥧ€U¥§¦ £¦§¢§þ§ô§¤¦€U¥¥¦¦ü£™¦¦ü¤™¦¦þ¤ô€¥¦¦¥§¦¦¦ý£¦¦ý§þ§ô§€¥¦§¦™§€\þ§þ§*û§¥þ¥þ§*þ§þ§þ§蠟¦¦€¥¦¦ €¥¦¦ þU¦¦å§¦¤§¦¥¦§¦¥§¦¦§¤§¦£U§§þ 罹™¦¦§¦¦¦§¦’€¥§¦§¦™§ï§¦Ž§§€¤¦¦¦€€¦§¦ñ’¦¢¡§¦¢¡§œ§¦¦¦’§ï§£§™¦¦¦¢§ù£¦¦¤¦§§ý¦§§ý¦™ó§§£¦¦¤§ú§U§û§¦Žþ¦ ú¤¦¦™ý¦™ö¦¢™§§÷¤¦§€§þ§÷§¦¢ §÷ £¦§§€§þ€ꥧ€U¥§¦ £¦§¢§þ§ô§¤¦€U¥¥¦¦ü£™¦¦ü¤™¦¦þ¤ô€¥¦¦¥§¦¦¦ý£¦¦ý§þ§ô§€¥¦§¦™§€\þ§þ§*û§¥þ¥þ§*þ§þ§þ§蠟¦¦€¥¦¦ €¥¦¦ þU¦¦å§¦¤§¦¥¦§¦¥§¦¦§¤§¦£U§§þ 罹™¦¦§¦¦¦§¦’€¥§¦§¦™§ï§¦Ž§§€¤¦¦¦€€¦§¦ñ’¦¢¡§¦¢¡§œ§¦¦¦’§ï§£§™¦¦¦¢§ù£¦¦¤¦§§ý¦§§ý¦™ó§§£¦¦¤§ú§U§û§¦Žþ¦ ú¤¦¦™ý¦™ö¦¢™§§÷¤¦§€§þ§÷§¦¢ §÷ £¦§§€§þ€ꥧ€U¥§¦ £¦§¢§þ§ô§¤¦€U¥¥¦¦ü£™¦¦ü¤™¦¦þ¤ô€¥¦¦¥§¦¦¦ý£¦¦ý§þ§ô§€¥¦§¦™§€\þÿþÿ*ûÿþ\þÿ*þÿþÿþÿïMѹ¹Û}Ö¿iÿêMÑ¡ÈÿÈŠÿXáÿVÉØ1uÌÑïé$ nƒa¤nƒa¤î_±„ÿíé$ ÿïÿŽÿudÁ]ª—~ï€Î(ëÎ(ëî¿,ÿð€ÿïÿ1ÿó¿*Úù§Õ7òÿÿýòÿÿýß óÿô§Õ7ÿúÿÿûÿßþç úVáíýíöÇ(ÿ÷÷Váÿÿþÿ÷ÿÄ+Ò÷.å£~ü£~êp¬‡ÿû.åè(ÿþÿôÿg®žsLï§ÄÓGªÐ·MªÐ·MêÞ·Kÿþ§ÄÓGåoÿþÿôÿÐσµ€Eû¥§¦¡þ§ü¦¥€þ¥ý¥¦þ§þ¥ý§™þ§ý¦¥þ§ý¤§¦¦ü§¦¦þ§¦¦ë¡€¥¦¦¤¦§¦¥ ¦Ž§£¦¦ù’§§é§€¥¦§¦§¦§¦§¦™§ñ§¥¥§¦¦§¦§𥦧§€’¦¦§§é§¥§™€¦¦¦§¥¦¦’§ñ§¤£¦¦¢¡§§𦢧¢¦¦§§駦£€¦¦§¤£¦¦¤§þ§û§¦§§ý§ý¥¦þ§ñ™¦§§€§¦™ø§§§û¤¦§þ§ú§¦™ù§€¦¤Û§–¦¦§¦¥¤§¦¦™§§§ £¦§û¦§ù§§§€ù§¢¡§U᧦€™¦¤§§¤™§§¥§€€¥¦¦§¦¦ü£§û§§û§™¦¦ý¤¦¦ý¥¦ã§¥¦§¥€§¢¦§¥§™¥§¦¤¦¦§ý¦ þ§ý•¦(þ§ ¡ûU¦¦(þ§ ù¥§¦§¦™ÆEû¥§¦¡þ§ü¦¥€þ¥ý¥¦þ§þ¥ý§™þ§ý¦¥þ§ý¤§¦¦ü§¦¦þ§¦¦ë¡€¥¦¦¤¦§¦¥ ¦Ž§£¦¦ù’§§é§€¥¦§¦§¦§¦§¦™§ñ§¥¥§¦¦§¦§𥦧§€’¦¦§§é§¥§™€¦¦¦§¥¦¦’§ñ§¤£¦¦¢¡§§𦢧¢¦¦§§駦£€¦¦§¤£¦¦¤§þ§û§¦§§ý§ý¥¦þ§ñ™¦§§€§¦™ø§§§û¤¦§þ§ú§¦™ù§€¦¤Û§–¦¦§¦¥¤§¦¦™§§§ £¦§û¦§ù§§§€ù§¢¡§U᧦€™¦¤§§¤™§§¥§€€¥¦¦§¦¦ü£§û§§û§™¦¦ý¤¦¦ý¥¦ã§¥¦§¥€§¢¦§¥§™¥§¦¤¦¦§ý¦ þ§ý•¦(þ§ ¡ûU¦¦(þ§ ù¥§¦§¦™ÆEû¥§¦¡þ§ü¦¥€þ¥ý¥¦þ§þ¥ý§™þ§ý¦¥þ§ý¤§¦¦ü§¦¦þ§¦¦ë¡€¥¦¦¤¦§¦¥ ¦Ž§£¦¦ù’§§é§€¥¦§¦§¦§¦§¦™§ñ§¥¥§¦¦§¦§𥦧§€’¦¦§§é§¥§™€¦¦¦§¥¦¦’§ñ§¤£¦¦¢¡§§𦢧¢¦¦§§駦£€¦¦§¤£¦¦¤§þ§û§¦§§ý§ý¥¦þ§ñ™¦§§€§¦™ø§§§û¤¦§þ§ú§¦™ù§€¦¤Û§–¦¦§¦¥¤§¦¦™§§§ £¦§û¦§ù§§§€ù§¢¡§U᧦€™¦¤§§¤™§§¥§€€¥¦¦§¦¦ü£§û§§û§™¦¦ý¤¦¦ý¥¦ã§¥¦§¥€§¢¦§¥§™¥§¦¤¦¦§ý¦ þ§ý•¦(þ§ ¡ûU¦¦(þ§ ù¥§¦§¦™ÆEû5×íþÿüÅeþ\ýÇþÿþý÷þÿý†_þÿ÷MѶÿÈtÞÿ[ÄÕ0¹ÈÿÈŠÕÿG»Þ”ÿÿéÿsÕ½qèêÿ[é$ ÿñÿpbÀnƒa¤ÿð\ˆÿ’®rÿÿéÿWµ nþíÿp€ÿñÿ óÎ(ëÿðÄ ÿ*Çÿÿéÿ».õðÿ §Õ7ÿþÿûÿòÿÿýÿý2±þÿñ ÞÿÿÿÞ øèôÿûVáÿþÿúÿíùÿEÛÿ*¾ÿò ÿÇ'÷÷ÿ.åÿûLÿùÿ£~ùè(ÏÛÿƒªdÿÃdxÿm¬pþûÿ§ÄÓGÿûµÿñÿªÐ·MåosnãÿbÁׄÿ6ÜÌ\ÿŠÚ¶däþÿý«þÿý Ù(þÿ û‰ˆ(þÿ ù5ÌÐÒ” ÆDþ§.þ§.þ§¦ø¡¤§¦¦ý§£¦¦ô’§¤§¦£§£¦¦þ’÷¥§§¦™§í€’¦¦§§€¤¦§§€’¦¦ø£¦¦¦’ë§¢¦¦§™¦§¢¦¦ø§£¦¦¤þ§û™¦§û§§ý™¦þ§ý¤¦÷§–¦¦§ö§§–¦¦ì§ £¦¦§¦€™¦¤§ö§§¦€™¦¤ü§¦¦ò£§§¥¦§¥€§ö§§¥¦§¥€þ§ þ§ þ§ þ§ þ§ þ§{Dþ§.þ§.þ§¦ø¡¤§¦¦ý§£¦¦ô’§¤§¦£§£¦¦þ’÷¥§§¦™§í€’¦¦§§€¤¦§§€’¦¦ø£¦¦¦’ë§¢¦¦§™¦§¢¦¦ø§£¦¦¤þ§û™¦§û§§ý™¦þ§ý¤¦÷§–¦¦§ö§§–¦¦ì§ £¦¦§¦€™¦¤§ö§§¦€™¦¤ü§¦¦ò£§§¥¦§¥€§ö§§¥¦§¥€þ§ þ§ þ§ þ§ þ§ þ§{Dþ§.þ§.þ§¦ø¡¤§¦¦ý§£¦¦ô’§¤§¦£§£¦¦þ’÷¥§§¦™§í€’¦¦§§€¤¦§§€’¦¦ø£¦¦¦’ë§¢¦¦§™¦§¢¦¦ø§£¦¦¤þ§û™¦§û§§ý™¦þ§ý¤¦÷§–¦¦§ö§§–¦¦ì§ £¦¦§¦€™¦¤§ö§§¦€™¦¤ü§¦¦ò£§§¥¦§¥€§ö§§¥¦§¥€þ§ þ§ þ§ þ§ þ§ þ§{Dþÿ.þÿ.þÿöÄÕ0MÑÂëÿG»Þ”ÿVÉØ1ÿG»Þ”÷bÀé$ ëÿ’®rÿudÁÿ’®røó€ëÿ*Çÿóÿ*Çøÿ§Õ7þÿû Þÿûÿÿý ÞþÿýVá÷ÿ*¾ÿöÿÿ*¾ìÿ.åLÿƒªdÿöÿÿƒªdìÿ§ÄÓGµÿbÁׄÿöÿÿbÁׄþÿ þÿ þÿ þÿ þÿ þÿ{˜L &/¾aboutnoise.pngÿ     ±Í/¾±íc‹c—c£/¾²5ãQFE2vKšAË]ür-¡^݂ѲKá¹3@¯ú.2020..þ0//î0/10..0.0..//23/.00ú20/0211ð/0030/100122/1211ø21120/-ûôèö2ýóþñì0íüøóú/þú¥/ß/óêë/ðîè/ûà.ñõïò-úþÌ0þéüÞ0ðÚ-ý÷Ò1÷ñµ/-Ðö1ùþýøõ¿0ùù/ûÀ-Á/éò.òîÓ0üùâ-õùéÒ/ëí/òúŽ--÷í0Êû.ñàó-ÙÜ.øþùí,õìÚ-ùÌ-óùúì,ñüûæ,èó×-çÝ-ôÆ.îû.É,îÞä-æÛ/üûúù-Ë÷+Öúú-ûÇ.Üî-ïéþþì-ðòöÛ-Ý+üÃ.÷åÚ-ëÒ,ê/áøí-èÓ*ùÕ-Ùî.æÌ+ïøù,ûåñ÷,÷×÷.2/1/-.-//ô.0/0/-./-0-..ê13/-00/1/./2100.//2/.00é21.011011001/.-øåú1ýóûñ×/òúúö/úÛÌ.Î.ûñù/ôýûÔ/üîã.Ñ-ùóúá/øîÎ0ä,ûãã0ýçüá.æû,õûúñí0ùù¦/ò.Ù¨-/Ô.ìÇ/ôùôü,éìå.ðêí/òúÄ-Ø,öôí0ñî¥.-ôçÆ-øö,ßÚ,ù®-þë,úúûðä,Ê-ðçÝ-ô¼.´.,ò¼-âü/Ëü-çëÙ+ôª--äóü-ñ¶,ôöÛ,ðò+¸.ÚÅ-Õ,è/á÷í-Üï)Îë-Ùí.ûÓ+ø×ò,æüûþ÷,õïì÷.2/1/-.-//ô.0/0/-./-0-..ê13/-00/1/./2100.//2/.00Û21.011011001/.-çö1ýøùñ×/òúüî/«.üß.óûé/ôýÊ/åâ.ýÚ-úêã/êüõ«0,öõã0âüá.æã,öñö0ûùúâ/íÝò.Ü€ª-/.»/ì-éÎ.ðêí/¿-ïóÛ,ôì0ñîè.âá-ׯ-øö,ßÚ,ùóîÓ-þî,òûðò,ìÅ-çÞ-ôî.•.ï,ìÞä-Û/Ûòü-äëË+ùû-¼-Õü-Øë,æöþÛ,–+.ñüñ÷-Ñä,ôê/â÷î-æðû)ïáå-·.ð¿+ñ,éüûý÷,÷×þ/00é/1023210211.1042420102112÷3200203011û451022ú4212433ø1225213øÎúåìÍùøèùð›¸ü÷Ôö÷ñÃ÷ôúÛóÂûå÷ùö€³æúÊôýâùèïçÛûçüÂÄþßóõªöúìÉðÞýùýõóéóòÕüÑíïøøü³æåéÉÎôïýõÒîÜèðúÕïîíÝýüïýïþçûìùêàä ïëõúáÑ ×öóýäüçùôýðÊðúõÉþÛôüù÷þíäú®þ÷ãüíæûúíÕéþ.//é.0/1211/100-0/4131/0/1001÷21//1/1/00é340/11031013211/114102ùØúêøýÂúøöúÜûýÈØÍüû±âàëóÓéþø×ìñùð åð¸úöÏûÜèçï¿úûÁäáúî÷ãýêýÞñ×ÙÞýÁÃÛñîþéõò÷èýüóàÚæ³çòÙÉÂêòÃï îóýâöÐîùåîþüýöèýáå¿ýÙ èüü ج îóýâüûêêýâ×êóóçóâüôüùøÃôßõïþòë ýíäùúòü¸þ.//é.0/1211/100-0/4131/0/1001÷21//1/1/00é340/11031013211/114102ùóõôúûåýøüÖùþþîþáö÷ÔØÍü«ðùÚîô¸óöæþþñìùðšî¦üÂûÜèçïÛúñôÐöäëùãýâÁñäõóèßüÁÃÛæöõ÷óò÷îüýþýùÖä–ìçäÎýþÄëÃóð îüóÝöåíîùÌüïîÜåíÞÌ ëüúú‹ þöðýâüûàóùäØ éóõØÙúüüùøÃ® Ô ÏðêûèÛ2ù34412433ø433421122í13245432433032645422ò433243432232422ø57314ôñÝïôúëÕûøõòüóä¹öÖößýôÛåï±ðâøöñÍDzçþíðÛˆìïðþàúïóöÇòðýûÜþáááâþðÕîôþýþçþÌþÍôäüñÑßÇÙþýððóþÑõíëüÜþäéþ”Óïúø´»ÚìææØþöôâþáíïëïòÃþêöêüîïôíþúÃçþþùñôÃôþñ“ ÜíÝèûðúßàýþ1î2330132123223100100î2024320211/215343112ô1323201203011÷46203ðþýîîùòöìøÚøõòüóñ÷ßþüéöÞúüâïÙêïûüáöïïØôÑòÇîùüÙãíðìóõ€’íøÞñóöµôõÜäþç•èßýØýÈØööêþüñßÝü³ê÷ÝóþÚí£èæùËùÖûþöÝýøäûêßËðóýüñʨôÝøþâãò§ãúÖñ÷øýòüÊßøñÀáé½òîÞíÞööûèßùéù1î2330132123223100100î2024320211/215343112ô1323201203011ø46203ÑíùâëÏàúüóúÅúùòùÐüáïÙêîùôêãÑøô¼ÇþîùüÙçéïãûûü€•øú½ðöÌýÝýùÝÞà¬ÕÜþüüÜÎØööäÇöéü³ùïýàóþÄíÐê̶ÖûþöÙóúÊßèåáüíÊšþáõáöïò§öÓõùòçòüÊïúþþùñÀæþé™ÜíÃûøòßùàï435424654424363244ï565345545544642233í243565435441437565334õ35úòöùúåùïáþëûáõæÎßÏëä¬ÌöâñÜÕ ÃüýáÌõÚÜÊóÒðöýØúúÞ®üþÚíÍÉÜÖëò÷ßþüæïþÔþÜïïùÜñüýóÒñôàîåüô¸ÞÙååîòÙýÛúÌÞú÷¤óöïûìÀ÷ÐñóÓúïý£ððåúáùßë»öùùòЗâíÜûÇñûøüâóìø324212533å1225213223441243234334211211ë3135431322/32635312133õ23úýûþüþñÉØäæÜü÷ûëùßõöðúÝïèÇîþýåù×ñ÷ôêå”óæ÷ûðÀÐå×ìóöÎöìëúïëûïËñþöÓÍûûÜÜîêù°üæþñÔþæëñêÛíôÃõúúòòù÷ÕÍÞµåêýõùÝ÷ÖëÚôòûàîäëøõóûø÷çÜ×ðïôèéôýþÚåÙÕûõÈûëÞâþùùùõèÃñÞºñæñÜõþûøüÀûø324212533å1225213223441243234334211211ë3135431322/32635312133õ23úýýþüþýóöïïáúýéôôêôü÷ûîùêêäøëÈúÑîûüåýåôñéêåÚêïòëæ÷âäåøÚëþ×ÝþúÐöñäúüÞûîÊùþõòâÍûöìòíñïÑÖëüåíÔþÜäúòíðíüù¿õâòùúþݧµûïêýËöÖ÷öÞðíêÝÓóöóûø÷éÜ÷âð÷üôèéÁõòüßÕûõÈùë°ùúòèéÍ­îúßþõìðõþûòøÉûö45423425233û684244ñ6434654424464244é56634654554õöñ3÷ùüÛ4÷ú4ûÄ2üñ5¿4üð4öÛ4Ú4õüð2ìê4¶7ó1äå4ò¯53à4÷òÇ52Ì3õð4Ì3í×5ù®33å5×4çí6îà5ûë6üØ3÷È2Þ4Ô4ï÷5óýÑ6ú1ùÂ6ýó5ñøØ4Ö3€²5344ó®55üé4¼2Ý3ë4íê4òá4êñ5þöé3óúþú5ýéúÕ4Ô3÷3‘52üøØ5þû7÷3431131311ê56213324313543313252133ú5413433ò43ô÷ò2÷ðÜ2þô2ú¾1ð4ñÞ3ôùð3öðæ3á3õüõù1éè3óæ6èç/ðÙ3ê4îö1úùÝ3íÅ41úÔ1ã2ë¡24ùã2Ø1ù¶42×4õûà4ûð¤41æ1è2ù©33óöá5òö0úÅ4ì3îüþØ3º14ˆ23ç2öû3·4üÅ31ãÛ1ñ3òüð3ôøë3Ö4»2ò4óÆ2÷2Üø1ôíà4÷è1þùûâ4öý6÷3431131311ê56213324313543313252133ú5413433ò43õöô2ôðÙ2ñ2ûéÅ14¿3ùä3ðð3Ù3õýõù1ñýê3óë6èå/ñé3Ø4Ð1Ú3íÅ41øÝ1ùõÙ2ñâ2Ô4ùà2Ï1º42þûÞ4õûà4ý’41æ1è2ùÝ3ôÞ3óøü×5÷0ùýÅ4ì3íüþà3²14ß2æÖ3øÓ2û3ìÏ4Ç3û1ðõüß1ð3òüð3ôµ34ýà2íòú4ýóùž22õ1ôþÓ4Ý1þòâ4öû6ä,õùò,åüíÞ+½+ùýøä.’* ,ßê,óðøø,ûýßà*ÝŠ. ,ä-íùÏ-øöè+ûñ÷ç+éÞ/ýæÜ-úý¿, ô,ãòê,Ò,ôüûñó,ìöµ,Ø*ûå-åóö-÷ùö‹*.õÃ,ì*Á.ðÈ-á ý©,*Ð ,ýýûíÝ ,îÍ-úþì*úþöûýÐ ,ñò§-+¬*õÕ-ïû,ñúèÉ+öð+úÓ*½*ôÊ*æì*æýÝ*éÚ+æí+Ë ,÷ìûË+úÍ *ëÌ+úý-ÑÛ+ýà)éýüùú+Öì+àê+Çí,ù÷ç,çþñß+¹+ýýþüö.úúçã*ãî ,ßÛ,ãì,Úç*ý€¸.,-òþþ¾-ýï+ôßç*åã/ýéÜ-úþóî,éö â,õóê,Ð,öüýéüâ,üõÛ+÷Ó*Å-êç-üýðê*¼.êÎ,ëë*€Œ.-ûéýó,çÙ*Ð ,ñùöÝ ,íó Ü-õì*úþôüñÛ ,½-éæ+×*ýðóøó-Ã,Îë+üçÛ+äñ*Üã*Á*µ*úß*þúÆ+åÝ+à ,ý÷ìÄ,þæ!*ÓÃ+Õ-óø+þæå)éìÙ+íô+àþøú+ñýîòä,öç,çýþñß+Þ+äûýç.úùöÕ*ãî ,ßÛ,åì,ìðä*¹.’ ,-ïþÞ-Ê+ôÄ*îä/ýé Ü-úöî,Û Ó,ñê,Ð ,ôüýúñã,ûüõÝ+õÓ*õÓ-ìç-÷î¤*.ðÈ,‰*.¸-ä ó,Ðê*Ð ,øûùöÆ ,ó Ü-óì*úþõýÛ ,—-æ+áø*ëðüô-Ý×,ßë+¹+â ñ*ãûã*àõµ**ðûæ*üüúïøä+åú+õôÙ ,÷îç,àþæ!*Óâ+ãØ-é+ÕÔ)ìÙ+íô+Ôã+ýøøòàôûöû ùƒ   !à ûÚÝ ÕÜ þØíæïýàèýüë  æ ã ß!ô ë!áøóáÖ!îùØù óýòéÛ   úøíúñ÷Ê   õ÷ò!Ó  ë ãá  öø çúôõ üð üúÒ  ç  ÷ðë!ñç"  ó !ç î ú!üÈ  !"!þõþð Á ! ñ ûï å ! Ô ! Í  þŠ!   !!è !á! " "  Ø  üþç é  ûþ€¥        ò é! â  Ä !! Ï  ëìÞ  ùæ!  þïÙ ôÍ !! Õ!ï  òÎ þè þô!Ú æ ò !ôë  !ì  þÞ  ñóË "   Ö  ãú Õ ù!î  ý!ùùô úú úüþóÙ   äîù úú÷õ è! !þò þØ! áÙ ¶ É   ÍóõýôüÜìêÜ Üþíìüê÷íãå!Ç  à þøë!áåîúÕ  ñôÏ ì÷þèÛ  ðüíç÷é ã é§    äã ìþïæö!à Õ  ö! ÷ýåýÍ!"Ú  !ù ã !ü·  ! "!þò¸ ! úå á! €¨!  ! ñ€‹!  !! " "    Ë  õð Õ     ø þœ    é! œ   !! è ½ öé   ëô! üïéò ôÑ   Ï"ï   ûßü îó÷ ÷û"úþã ã î !ùýý í!ñ  þò õ çüüÎ"  Î ñúÍ   ù à    ùó úò Öé   äãÛ Ù! ! úþä!ö àøûá å ùéõ Ô  ÍóúèþÂêß ÃìüòüÞèýøñ!ùõþã ß ô ë!áåúîÕ  ñúþÏ ì÷þé Û   úøÓ ÷é ã éò Ò  ÷ö äá ëþïþìõ!ä úõä  ë! úå Ñ!ù"û  ç ù ì  ÷!±  !  "!ò¸ ! úç á ! õç! Å  ¾! ïä!  è!!Ñ" "   â  ãè  ýþï Õ    â   ò÷È !  ï!  ýâ  úÄ !! è!ñ Ò øé   ùôô! àÕ  ú¦ !  !ï  Øû É û"úä õ òí  !úÑ  !  þò õ ÷ñþûÐ  "   ½ ûË   û!à    ùë  õùà   ä ãá  üà! !û úþä!ø ûÎõÈùäéè¾þïñ×ï÷íñûþÔýóäÀëõè÷ÖòøÙùçíþûîÞãË ý÷ðþýûþýÈ ÙñöÆ èöå ýöüüæ­üæòúö÷îúäá÷óÇðåô ðïüî÷íôúÐä âûÚúõâûÐû×åþú›øÖìÜÞñðýî— öúä ûòçá  êæëðøòò½ø÷êìðÕÑ ãñìë·!÷ÐôèÛãÅø– »õýþíúûâðûÚ¿çå¹ûûüñ ÞùåáüùþûËäÑòæþòúõÖèûñóùçéûõùçùõñËý÷÷÷öþðèï åõðø÷Ô éÄüüÑÂæñõëðùùäêùÔî õýýãÙ ìòèîíïùãííÕýÖ ï× ýöêüûÑÐÔ øüÝûÎëûñþñ÷Ò Ôøóõúæû×å öíûÞ ðøðèÊúþü¿âðû½  öüüݶ øëæï˜÷äñŠ÷Æñôúûâóûõð¶èã¿üôüñ ÞìõÑþüËäìçÝïòúõÖþÃùàòû÷åýùóîâëò÷ûýòýúøèü úýííø þøÆ øòöüæþúüüæîÂæì õùøðùùäêù­ ÚÙ þìòúÂíÚÞü×Í È üýöëüûÑÐÕ øüÝúôëõëöòëüÒ Ôéìöñ Ù÷æ  öíëì ðøØÇùþðæüü»Ý  þøóöýþݶ üéé’ò÷òåôñÄç¾óôúûþêïóüç°ó×÷ÉéñÔÁþÕüýþÉæöúÜÝÛÚ§ñù÷øøþëô÷ñÝþñùûÒûáÙøÙêöêêüì˹øüüôüûèðêòè©ñúßûèöûÙÕÊïðæïäûõðþýåýîùÔÉùÐá´«Ñþßëäõ¨ôøòåÒèð÷óòÙüýõðòúõâàïûÐËìüë÷÷ÖêãúÏñïüïÎáîçÅìïü÷Þïúò÷ûþÊüô£òÚ÷ýèÐðÔóèêþøúçüþþõö²û¼ÄàçÒþùùø÷èûòþñåýûðøúõãýáíýúüøûöÈãÓùÕÅþñüæüâôþþãÇÇôûßûÕ¼÷ûÓïðæâïûßùæýïÑüØëßóºçûÌô¼àûÆÅéõéÁÛüýûæòâðõéøùþõ‰ëôÛ×úùâêôöãöÛùÖïëôüùåúûãñ÷é×üóÞ÷úí÷õ×üüüôõ°îòì÷ýèÐðÔóèêþøúñøüþþåþΠØàÑÚúõùøëõúòñåýþè÷öæÇóåÔ×ÓåëÅþñüìüùýöþîþúòóëâ¸ûöÈïñþÇÌïðæâñûãþýòûøíùÞòÞîлãÌôóÍØò×ûéÊõéòðçÕõùñÄõéïü÷âáïûçëô²þúùãêúüöåõÛöêïïëôóÖØüøæØüóÞïúøþ÷øûûõã2þû­44™05Æ54óÞ4êþØ2ò2ÛÒ3õ6øùùò2Ò2Î4ïþô3ùöÌ3ö3áÞ2ûñ4ñûë4üëð3ööúô4þüÖ3ýýò1èñ3îöø6Ö0ûë·34æ2úû÷ã3óýè4ïÈ12 22õñ4öôúÈ22óÎ4Ý2­44üüê4þæî1÷ùûù1×2úýÉ3ï3ùïï5Ü0¡43ïÐ2ì1é¤31Ê2Þ2×3ôÖ3æ2ñúþ0íûÜ1óá3Ù3þâ/¹3õ4Ùü2óé÷3êþï1ïò1ëç2æì5ðí1üÑ1áö2òýô1øòÐ2°20ß3ûë2üýûÍ2úî2ùÔ2üÙ0ö2ýðê5ýÊ/ïó2üÒ3æ1úîê2É3³00éÝ1º13¶1î0¾3ã1ü¦33ã3ûæî0çÎ/1þûüùûÏ2õ2æýô4ö€È/321ß0ý¤20öï1Æ1öä2Î2üî1éûþ/ñþÕ1û°33Þ/Ì3ïÌ4ü2õé÷3æò1ïò1øõç2Æ5ùøø1Ñ1Ñ2éô1ùöþï2ãÞ2¬03ä2üüß2öüôî2ùÖ2üð0ëö2ýî—5/ì2Ø3þæ1ú»2þè3Æ0ì0îýâ1Þ1ùë3ßõ1üôç0¾3å1ü¦33ä3ûæø0Úù/×1ñøûõ2òüüúõ2æþó4€ž/32úÝ1úò0­2à0öï1ùÏ1öî2ûÎ2üï1èõ/Þ+öþÏ*ôê)éÜ ,èùþú+þèëþí*íÙ-äýñ+øþôã(òâî+® ,ðÙ)üÉ*õøþ÷*Å*üùëé*æÝ)ãç)âþÐ,óÒ)í•*+½*«)Ë,Î+ùó,¿+Ê*êúùúú)ëëþò.öøÆ,ýùÜ+ñûôÓ+Ù+Ò+ðýÁ+“*)íþã,ëý÷ñ,ôôþî)¸-íõûýç+Ö)ßïë-úùÌ,øôñ+îþÙ*ü¶,Â+Ò,Þ*âûùç+Ûþ,òúùû×*áó*ê÷õÕ-È+Ò*æÛ+Ý)*,++á*,++*+-,*+,))**+(++,,-*,*,*(+*,,+ê*,*+,-,,-+*.+*+*+*-.*'Ê+á+÷á)éÈ ,øò÷+ÑÛ*ýØ-åî+ôô²(ì+» ,áô)çúþÜ*ìûøÕ*Ø*íé*äññ)×Ó)þé,ýþæ»)é *®+ìÕ*üç)óÝñ,úåÁ+ó,æà+üßõê*éúå)ëä.þû¾,ýì+öïîÕ+üá+Õ+òý¼+™*)ýõýþÇ,ý÷ó,ç)-úüïµ+)áïë-úøâ,íøîó+®*þöŸ,+Ýä,üÞ*Ûøæ+×,ÜÙ*ïôù*Úþõú-ª+ûÚ*þÙö+ñçö)*,++á*,++*+-,*+,))**+(++,,-*,*,*(+*,,+ê*,*+,-,,-+*.+*+*+*-.*'Þ+ðÏ+Ç)Ù ,èí+ÍÛ*ú¹-ì+÷ô€ˆ(+ß ,Ó)çüþÜ*äùè*îç*óëé*äóñ)×ó)âé,ûþù®)ç *±+Ý*âüç)ßé,òåÊ+ê,óÏ+þßí*Ûøä)ëñ.öþûÄ,øì+þúåøÕ+©++òýýþâ+öð™*)õýûç,üäüð,è™)-úüïý„+)õ-øúùá,áîó+º*ôþÝ,È+Á,ñüÜ*éûúæ+Ùþ,ÜÙ*Ò*ßóú-àÎ+ýñå*å¾+ö)*,++á*,++*+-,*+,))**+(++,,-*,*,*(+*,,+ê*,*+,-,,-+*.+*+*+*-.*'ô  Ü!Á !ÝùÃàïÊ  êõ üûÙÏ  õåò úò µ î  Æ êþßïñõ ãùýæúþΣ «ú÷Ê¡ ñå×àüþåñ÷» ØÓ óúíôñêÔèôóðöû¼úêýêåÔÔçïî÷Öåëþ÷øúöòúöôûöüëåãÉ òûÞÍ ËðÊ÷ÎéñèÐÙþÛøéêÍúàêõ¥ñú±ÎÐùùÍì÷ëùûæî+**ï(+)+,,+*++,++)*,++ý*,++ø-,*+-))++ç(++-,.+,*,*)+*,--+,,*-+,-ã•!  òùêýüçêöè» ô!üûùòò ãî õøõá ¢  ï îÅþßðüèãûëîééâÝå ÑÖ½þìøð¢ ßÜÄ» õäìó íáþþ÷ðêõâèôõÚ¶ªã­úþôôËõòþñýåüþòë÷ûöûúôüàÖì ööþðèæÎ ÙüÔïäæòê‹áõ«ùýðûìÝÄîñôõ¶þÀÝ¥Þùàî+**ï(+)+,,+*++,++)+,++þ-++Ý-,*+-))++,(+,-,.+,*,*)+*,--+,,*-+,-ïöí!œ  ùÞçêö¥ ýø!þüæýò ã î õíþû‰     ï ïÆ þþßðâáû×þ€Œ !º¦ì” Óü¹ê» õæ ëó áðþöîëÜèôûþå÷¶äÌã¬ûþôûÕøåüì÷ðüþõõúùûïëýàÖß ëøèôôé ¾üÔïäôþýý÷ï›ùûìðþ÷ÑÓýðûìðð²ñôúÜÜÑïÝùÑßüéüàî+**ï(+)+,,+*++,++)+,++þ-++Ý-,*+-))++,(+,-,.+,*,*)+*,--+,,*-+,-ýàé ûåïÑ ×ñíðüÌþâóø´øèíðò íØþñ×èüëþáßìóøøßþÖíÔæâåùíýþóþõÔØïíüõþûùßûùÛêøøüóúðÔòûìïøîÖûûíõûüûùôøðûòõþõýêšéÕéÂó¼òÎüõøô÷òÞéœþ÷éý©ß·ûóúóèñþÞýùöëüåûìû»ÇçöñïÁñóú¾ßûöëþ“ööñýøóóòá--,.,+/,+,*,+./+(,++Õ),*,--,+,,-,,+,--,-,.,-,,/.+,.++,,-*--.-/,.ýýëÊ ßß ÔûûñííüÌíõþåÁöÛüïö ûÛýàí°þëúßìõ‘€ŸìôùþõÔä÷æùýüõî«ýçà·ëûìÊåæíõûîêðýÞþôûÔüõ¯Õ§óß…è÷ïðãÒÀóýîä÷ÖùûòéÉ÷óéçñüÕýîØìÊÀïçöýÀæñÖÓØÛÈÏÜûãòÑ--,.,+/,+,*,+./*(,++ï),*,--,+,,-,,*,-,,é.,-,,/-+,.++,,-*,-.-/,-ýý³ ßö ÀûæíëüÌíýüìºôÛüïö ûôéêÜÓüåþëþëàõ÷ößÒÁÇØÙùþõÔÜþòûôüÝÏßýçãÜÁûìýçÎæíõûîêðùïöüòúÔüøæäéÕ»îóß˼ê÷ôöü½øÀóýîýÞöÓðéÑúèé÷òìüÚøîßàÆï×ïçþúýö¬ñöåÙüßûÛž÷õêûþèôÑ--,.,+/,+,*,+./*(,++Õ),*,--,+,,-,,*,-,,-,.,-,,/-+,.++,,-*,-.-/,-üöèäÈÍýæîÖûùúÊüÆê¦ùãÑçýúííüÑþüùÍöþüöïöçî›ùÜëþôëåÈÙöûþø×ùßÄîúíä÷ßµìÑõûÕúúýòýûìðïöûÝúûûôúôûêÏÎäñ×ÚåñîêñòõãîÓä€ÁÀêþûàïäßú¼ðîöÞ÷Ûþöáûøçâúìòþô—þÛüôàÊõÖñøç,.,*-,.//--è,.-../..0.,1.-.,.-01,*.--æ+.,.//.-../..,.//./.0./..1èûÖäÉçëûñÍòñÛ¥öéõÚüà¸ýúöàþÍø÷éÔóõÚýÔ¿îÜêþëï«Øïôàùü±ãüêøµþï„ôûðçø÷òüåñíöïøýæùÈûËÑãÞåÊöøûêûý÷ñý÷õËâÓùµó÷ûéýéôÀøôþ×ïõñÝ÷÷ßçâàѵïÙìòþ§åûß÷€ƒúíñÞ,-+*-+-..--ó,.,-./../-,0--÷,.-00,*.--û+-,-..þ-..ü,-/..ù-/..-.0ìþóþî«ääüûþÅýöÛüáçêÝõÚüàÐîúúöãþñï÷ýíêÑèÚýÔ³ùÜ÷õÖöûþøýåùü±Ýêø²ï…ëðçøúòüåðíýûúúøáùþÈÄÑòóóïèÊóõêûý÷ë÷õÊæñàùê¿÷ÝéóÀùôÓÞôÝüìô°Û¼ðâçÚìòþ§ÞÔõ—õäñëõ,-+*-+-..--ó,.,-./../-,0--÷,.-00,*.--û+-,-..þ-..ü,-/..ù-/..-.0ëôýë1÷ýì2îê2ùþÆ2ê3óê1ðç3ôøí2¶1÷0Ø3íýþÞ0ðâ3øè5ûýÜ0ûõê2Ð2ùæ.ûã2þëÔ3úÚ1È20üß0æÕ1üé3Ý0Ò0Ø1ëýõ0úÒ0õüæ0ûÕ/üî2ìì1üýûøã1¶11üëÓ.÷0îê4èó-ø²02øøá/û×0ëì1ìú.²/à0Ý/ëù1ðþüò/ñûó/ðß1ïã/üô¿11üúî1üº.È.0-.0--../,//001.0.0.,/.011//0.0/0011020/30/0.0/ëôýì0úúñ1êë1÷Â1ê2öï0þÑ2üùùï1äÉ0/òè2äÎ/þâ2úþó4ýöØ/õ§11ô-Ê2ìÔ2Ù0ûå1üí/üß/Ò0æã3Ü/Ò/Ø0âô/úÊ0þüß0Õ.üî1ìà0ûÚ0þóï0Ù0ëì.êò0ìë3ýèõ,ø™01é.ûõÔ/óþì1Þ-Ô.Û/´.ñ0íâ.ùûó.º0©/1é0úýê1üìê.ñï-/-.0,,..Û+./0/1./-/-,.-/00.//-0./010/1/.2/././/Ýþê0üñ1Ó1ùÂ1ê2øþî0áõ2êî1äÓ0ø/Â2þþÑ/þâ2ùþì4öÒ/ª11Ü-Ö2ëÔ2Ù0üæ1ùí/üîõ/ÛÝ0ã3¬//éó0ïöô/¸0÷0êÕ.üî1Ï0ýÓ0ïï0Ê0ûì.ïýö0üðê3ýèó,øë”01.ùê/ïòè1®-.æß/ñë.â0óþÙ.ûó.Í0ïí/ùüß1Ô0üýî1üìæ.ñí-/-.0,,..Û+./0/1./-/-,.-/00.//-0./01001/.2/././/—_K/%/¾ Backgroundÿ     db/¾d‚×'×3×?/¾dÊ’½ééÂi6ªd [½?éò 6{`öŒC·g9:;ü<9õóùüù9ýù÷ýß9ñïü8üóüþøþø8ùïþüï8þþòúõ8üìùýú8ýèùöö8ûþîúð8öþþþ é8ýüüþûî8ûûþöþüü8ô ùþí8ûþõþð8ùþú÷üþö8þþþþýöüú8üþõúüô8ùëûë7íòþþú7öúþï÷7ûîÞ7úýöñ7ûüüóö7þýþõúç7ýêë7ìúüýü7üóòê7ý ûúùð7÷æþú7úòü÷þø7õüøü7ýûüòúö7ðþóõ7þþôþñ6ùðüþü6ùýùçï6þòüûû6õü÷úõ6üýø÷üþ6óüþþüüð6ûþùøýó6þþüûöù6üùþûþþó6 ñûþô6þüûõýñ6÷þëøù6þýñúñ6ýüûüýýþý6õþøûû6÷ø÷ðî5ûýøúø÷5ûöùüýñ5÷ûá5öéûý5úøþþùøý5üùôþùøø5ö÷ýüûò5üôúõ5þþúöþøô5Þúýý5üõûý÷ú5ôòüê5úýþüôü89:û8ðýöþþù8óìûô8ûúøõþú8üûóüþù÷7þþüþûýøûý7÷þþþûûþä7þûöûûø7îüýþí7úþøüûú7þùúïö7þôþþýð7éþ÷ü7øúñþûð7üþþþþé7þþóû÷7þþþýþþýï7þþþùþýøþø7úþîþü÷7ýüý÷öþü7òþþþì7öýç÷7ýþþï6ïþþüù6ýööúûñ6þõþû÷÷6úýõ÷úü6þýðøñ6ûþøöþý6þþôöôû6ý÷þúîø6ùþþôûð6üüûüÚ6þùø6ûþþþüþ÷þë6ùùúþþú6òüøûô6þ÷þûùûþõ6úüýüü÷6õûòý÷6ûôß6öø5üèþö5ïøôþö5þàúø5õû÷øà5ö÷û5òýûúþú5ýúúûüþö5þýþþûý5þíñý5ùôûúþý5üý÷ýøýþø5þüúûüú÷5ýõûþùñ5þøõúô5ðýöþû5üýæüç5ïûþù5û÷þüþê5 ùúùü5þþúþôï4üýâø4ìýõ÷89:ü8þþþúúüþþý8öþëôø8ûüøõýú8ùüýê7þ þýýúþüý7öþýö÷þø7ôþüç÷7ýöüþøô7þüþýþý÷7ïÖ7ùþþþþþì7óó÷÷7ôøùõ7üþþûùæ7 öþø÷7þýòüó7ùýüûðë7þøì7ûüêþü7øöþþþþù7óòüû7þþóþüï6ñþüþùûù6üø òôó6üööýüûü6ðý÷ô6ý÷úþþöù6ûüõùøú6üþüüúüöûû6þúþþå6úþýüþýû6ûöõö6êüõõ6þþþýþþþþî6þòøü÷6ýüùúüí6þðþýþþý6þýþüýó6ø ý üî6ùþüñö6þþùýø5úûþó÷5ùô÷þýô5øúýþøò5õñúýõ5ùþþöþù5ýþ þýþö5üþõò÷5þüýþþûú5ëûþýí5ùüúýü5ýçöþþó5þþúûþö5ýú÷ü5úþþôúô5îýúø÷5÷øóýûó5þýûôø5úïþþüþü5üþþüþîæ5õøø4þüø÷üø4îüýúþþþ<=>üòü öýýýþóøüýñùéþöøîúþùäþòþþãóúüþúýùûõýþþâúý÷þïùòóüòþþûûøúññõþúúþþøüùøûüþþêúùýûóýøãùþþþüýñòñëýûýöý÷øþþ÷þ÷þóõôñòòîðõþüþóøþþíûûýûöùþüþþçý ûû þùøüýöúþûþøùðüþúüýôþþþûúûüúþøüÜýýøýùóþ÷üþöþûíòþüþûêøûþòïü÷÷þöüüùýûüøûíþñøúþúþõñþþüûúþøüùþûþ÷üüûóüýìûûíü ôþ öúýü÷þûùøøýþýþþøþüý÷ýñûøññåüò÷þ÷þþûõþ÷ åûöþýþþþüýò÷üöýúìåûüðñüóóòþþþóúûþûýßìüõþøý÷üøýýñûþðþ :;<þóõûþøóûþøüþüö÷ðýøþùùûþýóùïúûûýóüûúúüüñøõþøüüûþüíþûýþýîûúþöüúùûõýþýóöþöúðùþõþþþøþüùþùü÷ûþúûôöúþü÷þûýúüýýûÐþøù üþøöûþþøøø þýéþüïþýùùýþþöýç÷þùüúüüëþ÷ú÷ûþñ úðûøý þûþûüþùþ÷ûûøè÷þüþûýýøîþûüéûûûûüõôýýüþþþý ýóîþûòúõþïöøûñ×ûýîøùþùþùùòþýþõøøúþôæýüþýúöüþýüüþõüþýøõþûþüøýýþþ÷ñþüþþþüöúýûþöþþþñûþþþøòóþûõý üøìôûöøþüüýýôüþþýöþúûûú÷÷ûöýúøùøøóòýöýþûöýþþòýûþõüþþûúûöôúñýýþñþûûýüëè :;<öîþüþüòþúðþýöþþàùóþýòùûûýñùüþüóî÷ûùþüöüþþ ÷öúúùüóúùþ÷üøýþþýõóú üüþùüþýùþþþýûþñþüâúüôüìùýþðûþùûûþûøüñùüõýñþýþùðöøþþýöþþþóøãýþýüýúüüþö÷ðùþþõôüþþûýþþöþþþéþüøþõûïýþýøþýþòþþþþøúýñûüûùþüüôûüøýþþõþúûþþúþþúüþòýýùöüúùýúþüóûñüûàþöþü÷þýóþýúþúôúþøüöþ÷úü÷ýüûýûýýøùüþüüúþþþüüýýðýþñöþþù þý÷úüùþýûüúøþóùöõ÷þüþþüøéõúýø ùþï þþþýñýùþù÷þëûüûùþöüþþòþþþôùüþþüüýþâùþþþýõ îúþìýþýöùþ÷þùðþõ >?@öøúüýþôüöüýþù÷ìÒûþþäüîþýþüþþþöþüúêþøþøøïùöþûñùüþþñïùïöùøþþóøþéüðúþýúöþöôþøþïúþðþùüñùùþúýðþðúþõüõúýþþýüüþûþþøùüøéòþùïìðüô ëëùþñöéúòñýùûöüûøþþþùçôýòñü÷÷þéîýýøýýøþýþöýûþùûþýúóþþòþþûøùùæþûñùþù ùþüþ÷ôþùýæùûûüúýøûæúýþþøþúúüþîþþþýþûîÜüýïþ üüþçûøýþñðûýöõüýûýýüþû÷ùþøöööþßãüûýüøúþùüþíûðýöüýþûúüùôþþýþúþýüíúùûüúñæûýüþöþöýôüúõýýûöýþþùûþòïóüüîüýüûô÷úüýüþ <$=>øþüýöþûðóûþþøúùýþýþüøüôüðýêýþþûþüûññþüø þøòþ ûýöþòóðþü÷þêýúûùþþþòþýøýøüýþù÷ üüþ÷ñõùîüþþïôüýûõòüýüðþûýþüúþþùøþþùþþ÷æþþûûûñûüþùûøþôùôþüý÷ùþùîúþéã ôúûöúþýúûêüë ûø÷þï÷ü÷ú ÷þþþðüùøþüðùþöüþÛþùþþþ÷þþþõùøýùúðþýüüöùþüýìü÷ùô÷þñèöûõôöýûûüñþþúþøöþýûýøþøþüûþþñþþíîþþþþêþþþîüúóþûþýëüúþûþüõþûþúèþýýøþø÷þñúý øþò÷ûãûúù÷úþôùúøþúùùüþøûüþüüýþóþýþûüüõíþúþüþþúþþúýþùøýüü ûú<%=>õûûúõ÷þùôþþóûý÷øûþëþýðû÷þüüþôú÷þæþõì÷ûîþúóûõþõ÷õêþüøõóúú üùýüìüùóþûþýþþ÷Þýí öîþýöþòèûù÷÷þþúùþúúþýþ÷ ñõûüý öþûüþðþûþõ÷òýþüùóûþúþõûüôý÷þþöþýýûúûúþþùûøøýýüû üûþ þþóúüþþöøþþþúúøü÷þøöþýþþþþþóéøùþþþþúþþþüêú÷üúþþþþüùòòùüþöøöíôúóôþþþþýþþøþù þûþþýñ þôûûúûþùüýýøþüûþûýþþ÷ûú÷ùüþþ÷ ÷þñõùþýùêþýþýþþþþþþþöþûþýýýüþ÷üýþþûúûóòõüóôúþûùüûôþüþü÷þþüôýûþþúûûþ üøûüúüþ þúûõ÷þþ þöþþýùþûþõüýìõüøú@,Aþûöå÷÷öêúüþýúõýûýýúðþöîþúõþþýõûòùöþüþîóþöîûþþüýþþùþþûýø ðöþöüþüüûüþùùþôôþõüüþùýþü÷ùü÷úüé÷óóûüù÷üùýüþûáøüøûøëéýþúöúöýüþýöüöüíö÷ûþüþúùðúþùüþúûýöûþþþûþøüýþõøýþþûþüôþùèýñþúïêýõüõþúôûýüööýúýþúúèü÷÷þûþûûûûûüþþþêøøù÷óýýõðôûýôþýüþþûþùýïþúûüþþýö÷þþüûþëþõøüýýþóûúíþþþþýþàõþùñùøþúþýûþîûöøúüùûþòîùúþâþþûýûøþýþñý÷øøüñþþüûþýüüùþýþøþä÷òýüüùûþþðùþï õþóñòþûýûôþôþ÷úûýüôþñùúýþýúü?>þþô÷åþýùúþþõùþ÷þöûûøüñúûö üþ üúûøþþüûøûûúþøûüþËðþûþüúþþýúïññþù÷þüýöõòüúþùðüñüþþóþöþóúóøúýþþ þþýýûéøøø üý ûúïþûþõûîãûéùþûþöýùúþþ þþûüþûûûþûþüûþþøþü÷üýýûþüþþüþúýýú÷úúðùóúþþõòùþþîõûýþúùû÷ò÷ôûüåü÷ûþþúúûòúûõý÷ñûýþðþøôöú÷øôüùþþþïüþòþþþõý ÷ùüùú î÷ýúõþûýúúþõþþüôþùþþùñþ÷üúóþûþûþùñýþþýáûúòüüòûô ùòýûúûþüüýûþýùûþüþýþøûöþû þñþïúúüõêúýîüüóüýþþúýîüôöþôùëùñ ýþþüýôýúþþìþûþýô?> ô÷ ÷ýþùýó þù÷ûøþ òûûøþþýõþþþ÷ûþþýþþþûþûûõþþþûúñþþòöþþûþøþóþþôýú ý÷þýúöúûñ÷þüýøðøþùú÷éûôúùþ÷þúøþý÷þûóþüþüý üþýòûùþó ýñêþþüñþüþþþøéûò÷ûýþþõûþþýú þþþ÷ûý üþþüù ýþþóöüüüþüòýõøûùýüúþïüöÐðüôõôþú÷ùýþòýüùûüþèõýøüøûýûûúùþø÷úùýúþûùþðøþóýñ ûþûôþüþòýþúþúþüþüþôøýûúþþùúóþþöþûþþüöþîïùøûûþøøþþþø÷þùúùðóøüôøüü ôþôúýüûøýþúþýôþþûüý ûùõþþþðøôýþøþûþöùúýøüúõþúøüþþýöþýýäþþòþþóóþØèûüú.Aôù üAý÷ýëAòýûAýùþúþûAòüøäAù÷AêøAüþüüõAõüûAû ýúúAãíAöþ÷AøûýúôAþ÷æAþáAûþøAñúþúAýèùAþþù÷úýAûûþåAûþôíAëúAþúïýñAûõòAüòþòAýþüûAýøñûAýðûïAúùüAýýõAùöþúAùûþóAûúùøAüþýùûãAûýøAöûòAûù÷þùAùüùôAûþûýøüAþõèAöúíAûþúóAýýþóõAþþôüAûðøýAýûöýüýA÷ïóAüøýôAúüôúôAüõúêAþüýAóïüAþâAþñòóAìý÷AüöþþøAùùùïA÷ýõüAþúþþùA ôúþñAó÷ùAõüöýù@þñü@.>þûü÷ü>÷ýøõ>îû÷>þûþýð>ëúó>ùþþâ>þþý> þýýþú>þü÷þúû>ýþûþì>þð>ýþüô>øþúø>þþôï>úúüð>ûõ÷û>õúûû>þûî÷>üóüþû>úüûõ>úýþù>þõüýûý>úø÷>û÷üû>þõúúð>óüö>þýùúþð>ûþüø>ùõûñ>ýúþúþû>þøþ÷>ûìø>÷üñ>ôî>÷þýô>þþòûü>÷þùûë>þúüû>ýþýøö>üüøýô>þüûû>þüë>þðþî>ýüç>óï>üý>ùëüû>üüþð>üûùô>üùýð>ôþùø>ôòõ>þûùñ>óà>ú÷ñ>ùþûû>þüúùû>þëÝ>ô>ûôí>õï>è÷>üøï>.>üôþù>þûñí>êó>þýøù>÷îõ>ýýøûþö>÷ôø>óþúý>þûùþüû>ûþü÷ö>ùöú>û÷>þüüûö>÷÷þõ>ú÷ùýú>üþøýé>óý>þûøûô>üþè>þþùûù>þþûþý>ûüþüöô>þéö>þû÷÷>ïù÷>üôüö>üþýüõ>úûþü÷>ùöüü>ùþýúñ>þüøî>÷ñú>þöë>íõ>üþê>þþöøý>þüýøú>üýóì>üúû>õýüñ>þùûó>þþüö>þúþþûõ>þûþþýê>ã>øúüî>ûöì>þûö>ý þûè>õò>þöûú>óõï>þþýþúú>ýýûù÷ó>úè>þýþùù>ûûþýüø>òã>ûüýû>þþûüýþï>þûüø>úîúý>þþôó>û5ùüûúþà5úöþõ÷5øüóúú5÷óþ÷ó4èýøô4é÷÷4úðþï4ùýìí4þëà4þúøüå4ûþûöô4ôôøð4ëþúþå4ùûþùö4ùþôú÷4ýüùûö4þùüþÜ4øöõ÷4ðüùýþû÷4üôúþý4óþøë4ùüûúû4÷þýþÝ3þûñýû3ýôþã3üóüýû3ôüóþó3þþüðþýý3òúðø3ûþýüüõø3þûòüøý3ñýõþ÷3äþù÷3ýþìüýì3öùýí3ùøþùûý3õøýôï3ûø÷øó3øþûúþüý3þîúþþö3úùúòýû3öõüôý3õýðùø3úþîýø2ýøýûþ ýù2þòòþò2üýúõüþö2øõýüûýñ2öúþöö2ùüðø2öùþþôø2þðùøöì2þôüó2ûüüè2íýþúú2úþü÷ýþøó2ùú÷ô2üþýùöö2ùþîüùð2þöõüñ2þò÷îû2éþ÷þþó2ýþõæ2òðùý4ùûþé4÷ûþýþ÷4þùúûþùô4üôóý4ùòüöö4ýúúú ø4úúýùýù4ùþùâô4ûù÷ýü4÷úþûûýù4øþûýþüù4öûûþþýñ4ýþüöûþ÷4ûùíø4þþùù ýð4õþúþý4ûýýþýýä4þúöû4÷þ÷ùõï3þþôøþþý3üüýà3øýþþúõ3úõ ýó3óìøÞ3îö3þüüûüýûýû3ýüþùþþù3öùóù3þéöûú3 ýöýþüø3þüõ÷ý3ýúõüúø3ûóþúýõ3üõ÷þù3ýüþúþó3üõúúùö3ûôþþóú3üøøþöô3þþøþûü3÷üþúþþô3÷üüúù3úþþþôýú3üøþóüû3þþéüþú3ýùùùýþûü2öþûüö2ûôûðý2üýúùúûþú2ü÷øüò2ú üúí2÷úóþýüé2æú2ñþúþþû2øýúûúö2òûüï2÷úúþþýûû2ûøûðþò2ýüûûþê2îþý÷2ýúõ ýú2ýüû÷ûã2ýýôð2÷üþþþý2ûòùõý4þþûþýþá4úüýü÷4ýðõñ4ýýúüùüý4ùðþöùù4ãý ø4ýþ÷ùùû4÷þù÷ð4ü ûöýû4ûú÷þù4òýþü÷4ïøþñ4þ÷üóü4óúüüþ÷4þüþùòþ÷4ôþüþúú4þþýþþôí4úûþý4ýþøöûï4þúýþô3þööøõ3ýüþýû3úûûú ýó3úûþûþ÷üñ3õþöüû3ûüþþýýûö3ûûþùýùó3÷þùá3àûû÷3ûùöñþ3üþõøø3ùþúúî3ûõþþýû3îúþýú3þøóê3õúùõ3ýþþþûë3ýóûüð3ûþùýûüüù3üöýþôô3þø÷þøë3þôþô3÷ýþþýó3þþùýôå3ùô ûý3ùüýþö2ýû÷óï2ùûüúþüö2ôþþøùñ2ü ôþï2òþþúòú2ùüíù2òþþþýû2ôýû2÷þþúýô2ëùþúýô2øùþõþú2ñüþûþþøý2ýþóýþþ ù2øþòþû2þóûùþý2èüúê2þþþú2üüîþ÷õüëþþþûõýþöõþýúúþöùþù÷õþþþòøþ÷þúüþûûþûôþúúýþïøýþøþõýøþîïûûòýüþþýêûüøýýòýøúþúüùûøþ÷ôû÷÷þýùúý÷þóýùþüýùýüöùûøþùþøþüüþþíûòýûþüúûíýóþü÷ìöøþþùçõù÷þøôþúýüøñøíþ÷ý þþþþûûûóþùýòòþ÷þöüø øõþýüõþöñûúôûþùöùúöýþúæøòèþúûöýúùþß÷øûþþùüóøùüôýûþüþþüúùüþ þýÝùôüþúö÷ñëúýúúóþúöù÷þþþùþýù÷üöýýþìùýùõýôúóýþþüêõ÷öýõóýýûôùýúüÞìþýþúþþüîþùþú÷ûþþùþþüþüþþöôþùþûýóúþîúóþûûþûýúöõùø÷ úõðùûúú÷ýôüØúïüû þûüþþþûø ý÷ùýùþýóûüüóùöüùðþøýþìúúýüþþøþ÷úùúþúþööüþïþúðôýþýäüîþ÷þýüüùþü ù÷þþþøøû îûëúüúýøøó÷ûþúýûüþøþùøþùùôúð÷öðúþýüþóëþüýõýüøøøùõõûòýþüøúüþ ôæþñþûò þ÷ôþýûüþûôðòþýøþùôøöûþùþþýþüûûûþùüþúóöûýüüþôóìþ÷üýúþòúýøðúþúãù÷þûûýîüôþýþþûúôøüóíñûñþöîñ÷øþûýõýþüýýúøøþûôõòûüûñûöúýþöþõ öþûöòéþîþôýöþõúþìöúýôþöýýþóñüûøù ùøöûýóþþþýþùþýø÷øþûýòýëùüþù þþýþûþúûþïýüùûûøüøûýþúþþûþûîþþúýþúýüþüùýùþüýøëùøò÷úþþüùåúòþþþþþùüýøýþþþöþþüýüðùôþùüüõõúöþúùúüýþþùþýùúôúùúõøþúôþöüþûïþþüùþûþùø÷ùþùþþüü÷óýýüúðýùþúùýþ÷þþûøþò÷êþûýúêüþþüûý ûúíûþô÷ýü øôóúýûüðþñüõùöýúúýþøõþûúûþ÷üûòôþþ÷þüüüúö÷þúþþðûüþòñýþõûíýøýøõýþþüùþöûüüþçüúþúùûýúýøþýýø þúý÷þýóõõýùûþöûýûþúþúù øýþüõúåþÞýûúûôö ÷üûúó÷ýúüûûû÷ïüõúþäýú÷ôúþýþûôúûüþûùüçþü÷þþþøþþ÷ýûüøøþþûúòûúþýóþ þþþþüýúûüøþþüúîôýøóþôøýôþî÷óÞþúýû÷öô÷õüòýúýõôûøþþüþøûíþúûúþëòñöõûõøó üõóòþýñøöüþþöôúûóòþâüýüùþóüüôùöøüúýìýûûþøþõüþýûõøýþüþüúþýúþüùþýýúûøþôý÷ýüóü÷òþòýþóùñýýýñþùøûõùþíþýúþþýðôúîøþüööù÷þùø÷üùýüôþóùûåþïöùüþøûâõþûéõýòþôòþúðþüöúøõûþçõûúýùýþöíúþëþûúúýíøûüþþþþöðúõõæòüïþþýþþùöþñúýúþýøüüð÷ùúùúýýüüòþõöúûåþüúýûþéþùûýïúæþþçþøïýøîýü÷þüóüþú þþôüòýþýþãþýïõýúþòü÷úñþüþúüûýûðûûí÷þù üþþôúþûüöûðñøþþøõùöõüþöûûüôøùþôøûþþûþüþþòþþõíþ÷þþúööøýùù÷ýþõùüûþûúûöüþýûúøöüôüùþûþþûööóûøýù ûþýüþþüòúúñþùûþúüûøûûõþþ÷þùþüôþúýýöþù÷öþþãþþýøýýùëõþûýúþþýùýû÷û÷îüþüþýýþíøûôúþýþûüýþûþù÷þþýöúýýýìú÷ðõøóøúëþ÷ýþùûþüêþñûþýûûúýðüýûûýýýýùúòðúøþúþ÷úûø þûúøüþþþùýúûüõ÷úùþþüüýþ÷úýþþþüûøùõüüýùûóüøðþñùü÷óüùôûû÷ýþýþûúúþûìúûøûüý÷õûòü÷ôþþûûóúýüùþûþúóõõüöòþöùüýøüúýúüùýìþûûþýÚýüóüøóþøîû÷û÷üûõþüúøûùþýþ÷üþïìüþþùüûûýýþüòûüûéûúþþüøúûùþýþùùþöþþõþòþþþþõýëþ÷þ÷üûûòæøþüûýüüê þûùõýúòýûúîúùúú÷ûþ÷þûþúø úñþøô÷ôþõýöíþýúûñùóùôþúþöùùþûþ÷þúüýýþþ÷ýàýüþüüüþüþûýþþúúþþûøüüóûþøûýúùþþü÷üùþýþöúúýõýö÷þôþûþþþ÷öøûðúýìõùüýô üûøþòö÷ ÷øóþýüü òþüúûýö òöúøþúüóõýûûûøþîýøþûþþýüôîþþüþþöüùûôóóüþñúþúþþýþúþûôüûòýþüþûööüþöþóýòþò÷þýóüùúþþóýõöü÷ýîüæýõ÷þþùù÷ýòüóûñüüüþëýïþøùþýõùÏþðþñþýüüþþþûþïýïþþùóþþþúþ÷ýþúþö÷þû÷öþúøûóúþþùþìúýåð÷üþøþôõöýýðùûûúþøóîñýú÷ñ÷ûþýþûýûôúþûó÷ùýõøóøþþþýýøüïþýïõþýöüüàþïþþóýúó÷þøþûýûúþýôýûüýîûþèèþþñýôúýöýýýøýúüûýùûûüöûðûþåþùîýöõûüü÷ûþýþùúüþõø÷÷õþýùòþû÷õüóóþûùôûýùýùõúýþööòüë÷ûïþõûöþþûùõùðéûøøýþ þüõ÷ùþùÝøûöúäþøäüùøýúüéøüüòûýõîþðüïôü÷ùüþþìþþþ÷ûüûõþüûïþþüåûúôýòþü÷þýòúûùùòøûýúûýóýýþâñþýøûùþüùþøô÷úòüûùðþþöþþüöñôþýíùúýþþ÷ôûôþ ýúþþùõùô åòûþüþüüûþùùõûþýûþþû÷öýýê÷Ïôí÷ýõþõîúþýúý ùðüúþùüóüûýþ þõûöþüýðþóýõþÞþäüþþîýþù÷þöûñúíþúòóùòýûþöùöøùóýþþóýüüøþþþþ÷üøûþøþþþ÷ôöþøúûþú÷þíûþîüøþöýþþþóûþøþïöùóùòýýúúöúûýëúýýþôù÷ã÷öøô ýöö÷ùùþþýøýüýïñþþúúûüûþüîüþþþûþüûúú÷ûþðéûô÷úòûýüýúøþþþþûôþýþéúþüþýûþüëþùýýúþíýüþ÷øùþþþþþþöüõþþ óûûüþýûúüøþôûïëôùþþùöúýöþùûüüþüýùþýüùõüüþò÷ùýïîýúîüûþþþþþîþóã÷ðþþþüòðûþýþ÷ýþ ûôöîüüþùûùþî þùûñðççû÷÷÷ý÷ìïýõôþþþþðþñýþýúýýþýþüïúûûþýòþþüúþèöùýðöüíøþþèúþîøû÷úþþþýþþûïüæþøùüòþîòüþþ÷øþþ÷þóúþôýüïúþýþñûþýõúûþúþ õþùþúúýðñýýþùùúýùþüéøùþþí úüÛþýúüþñöþóþýíöùþù÷ô÷ýù ùîöûýéýüìþþüþûüúþþüúñ÷ýùýþþþþûúüòþýýþûóîþýüýüþöýü÷úúüúóþþüýþõúþþýñýþÝþúþøöþýþþíýüýþþûþþûþüþþüþþñ÷ûùþþïüõüùýýòþõþýþüûþþûüþôûûüûþùóþþ÷üþüþþôüõüñú@öüþð@ õùò@óþñ@õýþí@üýþþõ@óöù@ýýýü×@ýþü@øþñ@ùþã@üêó@úþûå@ýùñ@úùûù@òüùù@þðó@ûüî@þþôä@þ÷ù@ûþ ýýø@þø÷ýû@ýþíñ@þ÷î@øû ô?þ÷ûûî?ýûó?ýùýùø?íöö?üþå?þþ÷÷?ýûýþü?ùùþó?òùñ?ûýõû?þúþûò?ùñ?þùüþýü?õûñ?ý õûö?úþþùö?õþóýý?øù÷ö?ùùþüë?ùüí?ù÷ó>ýøþã>ùþúê>þùøù>üôþê>óê>þàû>ðøþú>úýýøõ>þûóù>ûþþ÷þé>þþüü>ýóùþõ>û ýþýý>ñúð>ýþþýþû>õþýý>þýíþí>þþý=òüûü>ýþ þþûþû>ùûç>ûûõ>þýúùü>üû÷ùô>þþüüø>þýìú>éð>ñù>úòüú>üðô>þýñýý>ùþ ùø>þüùö÷>þüùþï>ü ûö>þþüúî>þúþúñ>ñùþü>ýûþüô>ûþû÷ý=þ òþô= øþæ= ï=ýõþûýý=óúþð=ýþþþüú=úýþþø=ûüÞ=òû=ýúûþø=þúøüü=üôþö=ôöþø=ýòöû=öþ÷ò=þþøýï=ýøþúï=ìüð=øýýú=ù öü=÷üýò=þþþûýý=þùüþû=÷üðú=üöúë<þùúò<ûþûøý<þþüûö<øæ<üúñó<ûôùò<ûñú<þûøýù<äþý<÷þöþç<þþî<øþûý<ûþüþýø<øüê<þþüûý<þþýþöø<ùþûô<ïýôü>ýþ þüï>óýù> ôûþù>ü þþ÷>ûùûï>ûöû>þòþý>îü>÷ùüò>ûûþö>ûøûû>üþûúýú>óûùü>þòþõ>öâ>þöýï>þþç>óúñ>ûþüýò>úþýø>öþûüõ=þùúô=þðð=öþ÷ù=÷ öý=éð=þöúû=ûûþöõ=õí=öøûñ=þøþû= üþøù=õðû=þýþþøþú=ü ýù=ûýöúú=þþë÷=ûõü÷=ýëýó=þúøýù=ù ùú=þûþûð=þþýúë= þþû=÷ûõþú=þüüþùð=úûõ÷<þüé<ùþýþþú<øñð<ùøúý<÷ûûûò<îø<þþûþþó<í÷ü<üüüú<ó÷ùþû<ùþëý< ûþþé<þö<ý ìü<þ÷üöø<óôû<ý2õý÷óü2úýþþóô2óßø2þñõö2þùøüñ2þûöø2ùýþú÷ú2üõþúû2øþþûúþþü2ýþóýþõ1ùüûùûø1ôþüøôü1ûùýûøþù1üúøÞ1æýùó1þîþþè1óûúù1î÷ùï1üý÷þûß1üüüüò1úæñ1õúýüõú1úüûüþõý1úøøó÷1êü÷ù1þûëùýú1ýøþýé1öþþþðüù1úøýðí1úüöýç1õöü1üöûþüæ1üþþþýù1ï÷ï÷1þûðöø1øùþüúü1õüøüú1øàö1ùýþý÷þü1úùúúúö1üøþüûé1ôìô1ùüþ÷ ø1þùá÷1ýûúøþâ1üûòùü1þýñþü1þôûþð1ýþåò1þüûùô1÷ûüýù1þýìýû1øûóüþøï1üùíý1þüûöþüù1þþúúüûï1ýþüüç1öþþøýþö1û÷üë1úûþûþò1ùüýöö1>1þ2þûùýýü÷2ýúþþøù2öþýïþì2üûþüúò2ûþüþþþüö2üýù÷ûï2þöìúù2ûþñø÷2üöüüûï2úýöþþ÷ù2ûùùþùù2ööú÷é2üýþýýô2þ÷ûüí2þíûüþúó2úþúþî2øûþ÷2ýøùûòù2üûþüùýë2÷üýï2ü÷ù÷ú2ìüé2ñûòç2ùöø2íûôú2ñùùþþþõ2öøóþü2ûðï2øþûýûð2ûýïî2þüüûü ü2ùûüõü÷2ïþþúüý2ôúþùú÷2îíúü2ïþýùüü2ðíþûô2ýóéæ2ûúé2þíø ø2óþûþôô2ýüúöùå2÷úøû2ýþýþøüýë2øüúõ2øûûûíü2üþñüû2þ÷øúø2úõüþç2þûøúûò2øýøþó2þþóóñ2îýþá2øõ÷÷2úùúþüý2üþþþøùó2åþï2øõ÷ûý÷2ùþûþýüýó2ú÷ùøþø2ôþôú2>2þ2õûþþðý2ûõûýøü2þýþýïôý2ùøüûþú2ýýþýúþüö2ýõþýð2þûûúûì2÷üþí2þüúüúþøû2ûýö÷þþüú2ýöÙ2÷ñúþó2õþüþýýï2þüô÷í2þþüþú þó2ô÷ýõ2ýýøúþý2ôþþøþûò2ûûþûùþù2þùøýûü2ðþýúþí2ìûüõ2òúïò2üý÷ýþø2ïøóÑ2ù2ýýþüýë÷2üþúçé2úýüþý÷2þûýüøú÷2ûýúþü ü2ùþýùþø2ùôþûôý2òþþþüúú2þþúæüý2÷ú ÷ùë2ñ÷ýü2õ÷þã2þûýõþõ2íûþùñ2ýþûõê2ýöùì2ýýþþúý2ûöôè2þþüþúõ2óúüä2öúóúû2üúùúù2úõþýþýùñ2þûúüþþô2üøþþù2þðþýøÜ2úî2ýýûþþûîü2úþûüûü2 ÷þî2ñþúýö2þýõùþý÷2ùôöë2þüýüì2þùüýþþù2>2ýýûçú÷ýúùóýõüùý÷úúý÷úûðþóþþþúùøóùéþþþöôûýûþøû÷îýôþþúòü þüôüýùùûûüþþðûé÷þõõúüûôúúúøþöüâûûòþþþþþýüûüúþûþýýý÷þûöýþé üüúþòþùüúùíûìøþþüüüþ÷øöýþùüþùõüìôéûûüþ öúþüþûýñù÷ûëþüöæüûûùüûþûúîþøýùõüùþûþþþöøôýüýüûøòüþûþë÷þýüìøýùþþýúûòóüåøøþõëöüýû÷þþúøúó÷ûúþûúò÷úûôýþþþûñúþûþúæþùþýþýøùîþõüü÷úðöþüýõ ñýýøûþýìüêþýýúæüýüþþþóõõþûúîôþþü ûüóìûîþæþôýþþûî÷üõûùüþðþþúúþûúþýþ1 1+23þ ïõûýúõ÷þûþòóúþüäýþúþõúþþøûüü ïû÷üýþþûýùþò÷úú÷üçööþøýþûõúùûåþûýüþýýùõüúü÷ùøöúûðþüýþùþðïþúõ÷úþùìþþúøøýþöúõþü üýþþþü÷þýþùõùú þùùþýþîþöûþúüëööýüûþùþçö÷öòöþþþúþþþüþþþýúþþüøþýûþüþôìúþþûóûþúñ þýþþùûùýüúþþúøøþûúøóþùòýþòôûþýþýüúþþöúýþôý÷ú÷þßþüüþ÷óþùúûþûü÷úûþþí÷þøúþûûüöö÷áþ ûöüúþþõ÷üòúôûþýþüøüúþ÷ûüýýûûúùôûôúýýþüýûþüøýåþ÷þýþùþþâòþøþüýüöüúþþþùþúíþúûö÷öûúýùûþþüðôþýúû2723ùþùîýþþýúù õ÷þüûþþúýüóýùþõþþüõ þùõýýþúüÞüùúõîêþýêûþùûþýòðýþùýþûýôøûüüþþúõüöüüû÷÷ïþýýâæþöýþþûõ öþöüþüû÷÷ üûþýüüþûüýòþúùøþúóùöûþûóþñûþùû÷ùýù åþøûþþòðúýþþþûüþùùþþùòú÷ýüýûüþû÷þþïüûþþþþõþþýþòøüþú÷þîûþþøýþÜúùäüþþüûõþôùûþ÷ýõôúùüööþþþøþþúýþþöüùúù÷çýþþüþûûþþþöûþïûüþôþó þþûþþþýùñøõþýþþïûüøöþöþþúûüþòô ûüþüþý óþúýûþøûôûþþüíü üøúýýûö÷þòüþþüýþüùû üüúüùþþúþûõûûùôüóþûþüû2623ðþàùôúýòþùûúûûùóú÷ùëûþýúóõþüúðûðùþõøúþþüùüøôëûùùýüþïüö÷úçûäüþþþûþùþûþùþþú÷þþúýüþüù÷÷øþüþøþúýýúüüïýøúëþåòüõüûüþûññôýûûþýýúêýóóýýøùûþøýü ýúøýþ þýþþþøþñíùâð÷øúõþýþþü üöøýìþøþøýòõþù ýýþîýùþþþþéùüþþøéþøùþü÷úþïõìûúýûþûôøûòùýûúþúúùñüëúýäþúýþýøþüöøüôõþýüþüþúùþõûüþôñûûüúúþò÷øû÷üñûþþþ÷ûþþþ ð÷þûúþùþìúöîùþþþüïíþúùþúêøýúõþþû÷æÞòôöñÑýøþúîþçþôúþüýüýôû345ðþû÷üýüñþüðüêþú÷ýîùäûøöüüþ÷þôýëþûþ÷ïýúüêüþôüøþþûúþúêôõþùûéüþüýüýûþûþøûüûþþ ïûöôüû÷ýæûþþôýüúþõõúþûý øùùþûüþôýþûþûýùçýøûûýúþüþýúþé÷þùúýòþþþþêûóþüýôï÷þçþøðü÷ü éñþñúùøôùüùûöþûüõûþûøýüûöúýûüþûøòþúü÷þþ÷ýþþþ þüùþûýþýýøþóþþûùþùíüüùúûöþøþóù÷þþõøõýüòþû÷úýþûý÷õíýõþþ÷þþþöýùøþþöûþùûþøüìþþüþûûöòýþöýúõþûþýùñùþúþþúïûëýþûþþøüûþüûúþÙíñûûþýþüþïôøýüý÷þþõþþëüûúüûöüþ34ïô÷ûýîûúùïì÷þþúþöôäúüûóúþôþ÷ýþûýþþýþüúþþùôõð÷ûûøþûóþüõëþöþñìþþýòýþüýûýûýúöþýúóþúôüòýþûõúùúýùôüüþþüýþøþûôõõþêü÷ûúþöýûú÷þýüýüþùþöõüþþöøýþöþþûûûüøùþýþüüþþþþñýþöõùúýùûòüüý÷üñûùñúýýþýûøùúý÷þûúþøûþðúö÷ýþúûùþüüéýüýüûþúþüüûþüñþþþûüùþþûü÷ûüýûüþùýïòþûöüûïûüòüýùûùýöþúùúñûýûüþ÷åûüþúðúýùþûûþþþù ûþüûóþðþùþùþ  ñ÷ü÷ýýõüûûýôþôùûëùþþýüúðûïþûúïöù÷öþúüýñüñùúýþôùþúúñýþþûüýøþýçþþ3 4þþþüüûýþôáþþþýûùûçùýêþýýùüôýþúòúþôþíùûìúýøîþäýýüúû÷õþïþûýòóøþóþùõõôü ùüùòýüþûõøþõýúúþþýþþþûþ÷øþûùùùôóåðûùðõþúúþôþïúþôüúüöúúýüúûõùþúîûûïûþúýûùûþýóúöññûûñùøüïþûüûõúþýýÚþúðþì÷þüýøøúüþýýþþþýþðþûóýòõöüùõûü÷ü÷øþùøðþûýûôûûóþûþüþêüþûýþúöùêðô÷ìõþ÷âüýüüðþùúþýýõùòþþüýþåýþüþîøþûòóüúùþþþò ü þþííðí÷øýüýþìýúøþúúåôþüþûúûüæøûöúöû ùúéýüüûüú÷øüöþóùùý5567þþåýøûùýïùöýûüþüþþûþýöõûúþ÷êþüûþöûûýþûúéùþþôô÷ìüýôþþþûúûüþüø ûþþõüüúüÚúíýìûôýþùøþøó÷ýøþøýýúþúþýúþùýøýú üþúöþüóýþóûöîýý÷üûþþ÷ûûþþõ ýùþöýýþýþøþýþüöþñþüüûýøùãý÷ûûúýýþ ýþþúþúùûóüýúýùöôõ ùñþýýøüûÝþþèöþüüøþûþþüþþþùþøþúóúùýöøýôüüþûûúø÷ùùýûùýþðûüþùü÷ùõúýüêþþòôüûþûþ÷þüýúíÞúþûþôýþøþúíúøþüüýíüüþþþõüþûë÷ôóÖþüðóø÷ñöûûúûþþüþþùúþþûúþêðùøûôýþøùþùþõûõþüòðüüûþ÷öô÷ìýù úþ5567øÝþúùýïúúüûöþøýþþõöûüüûý÷øòú÷üúþþþþýøçþûþõôòüüùñûþûøþ÷þþõûûúøÝòüýþìþýýþýûþýúþøûðýýúûþýüøþúýþýþþûüþôôýýþúýúþóñþûöþüúþýúüþþûôü ûùþøüýúüúùúûþöúóüþüüïûûþûþööæýþýþþýþý ûûþýýíüûýöþêõüí÷ýüýóûûòüôþ÷úûøòøüüý÷ úþþûûýòþû÷ýöûýûúþñþðúýûþý÷üþüþûüñþüýþüùþûüþøþþþùûóüûý÷òýýûúùõúüþøþöýþþôüüûûð÷üýøþôüúþþþûðöõüôóþôúüüýûüôüùøòïþùúûþüþñûýþþúýþøïùüþþøþýþòòøúôþþþûþú ÷ý÷üýþòéìýõýø5567öüüûì=íô=üþýûû=ôþûþò=ýõï=úø=ùüô=óþý÷=úþþþýã=ùþû=þüþôü=÷ìú=ùþþö÷=øëú=ýùûýú=þùþýý= úýé< þð<óôó<úþðò<ûôüö<çýó<ùþõüø<ýüõø<ýýûúû<üûùé<öþè<õûë<þûüî<þþýø<þü÷ô<ãþü<úøýüñ;ùþúü;ðþó;þüþë;õüûýû;ýúúï;ðøú;üøøúù;ýõï; þõþý;ûþþûüþï;ü÷ç;þþüü;ôþûð;ýûè;øú:ýõúü:øñð:ñò:ûüùõ:þþýþã:úýò:ûã:þþýüüöü:ô ñù:ûøá:ðþó:þûøæ:óõ:889:øþøþò<êúø<þùå<ýþþþû<üüùúô;úðù;ýôþñ;üöþûø;þþþö;þþøûýù;þüñû;þüüøôõ;þþøøø;þþùþñ;ûüúú;ûý÷ü;þøþþû;ûüýþã;ýýüý;þùêû;þøúð;ýöíû;ûþþõú;þþýüþý;ýôõ÷:þüøî:üþþýû:ùüþô:úùüþë:ùö:þüûñ:ùòø:üøùò:þúô:üþõûýõ:þöúý:þüýç:ûüüþþü:øôúö:ïûû:÷û÷õ:üöü:øúþü÷9üùüþü9þúÊ9öü9ëøþý9üûç9ýûøü9úü÷üó9þúð9ýüõù9 øöýø9ñüó9ùôô9ôôý9üùé9ôýí9ùê9ú÷ôû9þûû÷8778ø÷þüù<îúø<ùþüûç<þþþû<üþüûó;þó÷;ýþûõü;÷öþí;þýþö;ùüõþñ;þüúñ;üþú÷;þþúüù;þþþþûó;þúýøü;þõî;þûùõ;ü þî;þüùüø;éûû;þ ôûþû;÷óþô;ûþþøúý;þþþöþø;þ÷ç:þýþýþñ:øþþû:ùþûî:øôê:ûô: ðþø:Ýý:þþøý÷:þü÷ñ:üþþû:þûóý: þþûå:üüþø: öúûû:úúûþù:þõúó:ûûþç:ûúüý÷9îþû9þþþå9ñþô÷9ûúôù9éøø9ùø÷ü9úõýû9üúúýô9ûööþú9ûûûýû9üùûò9üóþö9úýþþó9þþþì9üýùî9òü9þóì9íõ8778—_K/%Carla-2.4.2/data/appdata.xml000066400000000000000000000020011420416754300156050ustar00rootroot00000000000000 studio.kx.carla CC0-1.0 GPL-2.0 Carla Audio Plugin Host

Carla is a fully-featured audio plugin host, with support for many audio drivers and plugin formats.

https://kx.studio/screenshots/carla.png https://kx.studio/screenshots/carla-patchbay.png studio.kx.carla.desktop https://kx.studio/Applications:Carla https://github.com/falkTX/Carla/issues
Carla-2.4.2/data/build-haiku.sh000066400000000000000000000003771420416754300162210ustar00rootroot00000000000000#!/bin/bash export HAIKU=true export CC=gcc-x86 export CXX=g++-x86 export MOC_QT4=moc-x86 export RCC_QT4=rcc-x86 export UIC_QT4=uic-x86 export PKG_CONFIG_PATH=/boot/home/config/develop/lib/x86/pkgconfig:/boot/system/non-packaged/lib/pkgconfig exec "$@" Carla-2.4.2/data/carla000077500000000000000000000005271420416754300144740ustar00rootroot00000000000000#!/bin/bash PYTHON=$(which python3 2>/dev/null) if [ ! -f ${PYTHON} ]; then PYTHON=python fi if [ "$1" = "--gdb" ]; then PYTHON="gdb --args $PYTHON" fi INSTALL_PREFIX="X-PREFIX-X" export PATH="$INSTALL_PREFIX"/lib/carla:$PATH exec $PYTHON "$INSTALL_PREFIX"/share/carla/carla --with-appname="$0" --with-libprefix="$INSTALL_PREFIX" "$@" Carla-2.4.2/data/carla-bridge-lv2-modgui000066400000000000000000000003501420416754300177000ustar00rootroot00000000000000#!/bin/bash PYTHON=$(which python3 2>/dev/null) if [ ! -f ${PYTHON} ]; then PYTHON=python fi INSTALL_PREFIX="X-PREFIX-X" export CARLA_LIB_PREFIX="$INSTALL_PREFIX" exec $PYTHON "$INSTALL_PREFIX"/share/carla/carla_modgui.py "$@" Carla-2.4.2/data/carla-control000077500000000000000000000005371420416754300161530ustar00rootroot00000000000000#!/bin/bash PYTHON=$(which python3 2>/dev/null) if [ ! -f ${PYTHON} ]; then PYTHON=python fi if [ "$1" = "--gdb" ]; then PYTHON="gdb --args $PYTHON" fi INSTALL_PREFIX="X-PREFIX-X" export PATH="$INSTALL_PREFIX"/lib/carla:$PATH exec $PYTHON "$INSTALL_PREFIX"/share/carla/carla-control --with-appname="$0" --with-libprefix="$INSTALL_PREFIX" "$@" Carla-2.4.2/data/carla-database000077500000000000000000000005171420416754300162350ustar00rootroot00000000000000#!/bin/bash PYTHON=$(which python3 2>/dev/null) if [ ! -f ${PYTHON} ]; then PYTHON=python fi if [ "$1" = "--gdb" ]; then PYTHON="gdb --args $PYTHON" fi INSTALL_PREFIX="X-PREFIX-X" export PATH="$INSTALL_PREFIX"/lib/carla:$PATH exec $PYTHON "$INSTALL_PREFIX"/share/carla/carla_database.py --with-libprefix="$INSTALL_PREFIX" "$@" Carla-2.4.2/data/carla-jack-multi000077500000000000000000000005421420416754300165270ustar00rootroot00000000000000#!/bin/bash PYTHON=$(which python3 2>/dev/null) if [ ! -f ${PYTHON} ]; then PYTHON=python fi if [ "$1" = "--gdb" ]; then PYTHON="gdb --args $PYTHON" fi INSTALL_PREFIX="X-PREFIX-X" export PATH="$INSTALL_PREFIX"/lib/carla:$PATH exec $PYTHON "$INSTALL_PREFIX"/share/carla/carla-jack-multi --with-appname="$0" --with-libprefix="$INSTALL_PREFIX" "$@" Carla-2.4.2/data/carla-jack-patchbayplugin000077500000000000000000000006421420416754300204100ustar00rootroot00000000000000#!/bin/bash if [ -f "$(dirname ${0})/carla-utils.pc" ]; then cd "$(dirname ${0})/.." export ENGINE_OPTION_PATH_BINARIES="$(pwd)/bin" else INSTALL_PREFIX="X-PREFIX-X" export ENGINE_OPTION_PATH_BINARIES="${INSTALL_PREFIX}/lib/carla" export ENGINE_OPTION_PATH_RESOURCES="${INSTALL_PREFIX}/share/carla/resources" fi exec "${ENGINE_OPTION_PATH_BINARIES}/carla-bridge-native" internal "" carlapatchbay Carla-2.4.2/data/carla-jack-single000077500000000000000000000005431420416754300166570ustar00rootroot00000000000000#!/bin/bash PYTHON=$(which python3 2>/dev/null) if [ ! -f ${PYTHON} ]; then PYTHON=python fi if [ "$1" = "--gdb" ]; then PYTHON="gdb --args $PYTHON" fi INSTALL_PREFIX="X-PREFIX-X" export PATH="$INSTALL_PREFIX"/lib/carla:$PATH exec $PYTHON "$INSTALL_PREFIX"/share/carla/carla-jack-single --with-appname="$0" --with-libprefix="$INSTALL_PREFIX" "$@" Carla-2.4.2/data/carla-libdir000077500000000000000000000003451420416754300157350ustar00rootroot00000000000000#!/bin/bash # small script that only prints carla's libdir. # can be used to detect if carla is installed, and where to find its libcarla_standalone2.so file CARLA_LIBDIR="X-LIBDIR-X" printf -- "%s" ${CARLA_LIBDIR}/carla exit 0 Carla-2.4.2/data/carla-osc-gui000077500000000000000000000016271420416754300160420ustar00rootroot00000000000000#!/bin/bash set -e PYTHON=$(which python3 2>/dev/null) if [ ! -f ${PYTHON} ]; then PYTHON=python fi if [ "$1" = "--gdb" ]; then PYTHON="gdb --args $PYTHON" fi INSTALL_ARGS="--with-appname="${0}"" if [ -f "$(dirname ${0})/carla-utils.pc" ]; then cd "$(dirname ${0})/.." INSTALL_PREFIX="$(pwd)" INSTALL_FRONTENDDIR="${INSTALL_PREFIX}/source/frontend" else INSTALL_PREFIX="X-PREFIX-X" INSTALL_FRONTENDDIR="${INSTALL_PREFIX}/share/carla" INSTALL_ARGS="${INSTALL_ARGS} --with-libprefix="${INSTALL_PREFIX}"" fi if lsof -i:21337 > /dev/null; then echo "NOTICE: Backend already running" else ${PYTHON} "${INSTALL_FRONTENDDIR}/carla" ${INSTALL_ARGS} --osc-gui=21337 "$@" --with-appname="carla-osc-dsp" echo "NOTICE: Backend was not running yet, start was triggered now" fi exec ${PYTHON} "${INSTALL_FRONTENDDIR}/carla-control" ${INSTALL_ARGS} osc.tcp://127.0.0.1:21337/Carla "$@" Carla-2.4.2/data/carla-patchbay000077500000000000000000000005401420416754300162600ustar00rootroot00000000000000#!/bin/bash PYTHON=$(which python3 2>/dev/null) if [ ! -f ${PYTHON} ]; then PYTHON=python fi if [ "$1" = "--gdb" ]; then PYTHON="gdb --args $PYTHON" fi INSTALL_PREFIX="X-PREFIX-X" export PATH="$INSTALL_PREFIX"/lib/carla:$PATH exec $PYTHON "$INSTALL_PREFIX"/share/carla/carla-patchbay --with-appname="$0" --with-libprefix="$INSTALL_PREFIX" "$@" Carla-2.4.2/data/carla-rack000077500000000000000000000005341420416754300154100ustar00rootroot00000000000000#!/bin/bash PYTHON=$(which python3 2>/dev/null) if [ ! -f ${PYTHON} ]; then PYTHON=python fi if [ "$1" = "--gdb" ]; then PYTHON="gdb --args $PYTHON" fi INSTALL_PREFIX="X-PREFIX-X" export PATH="$INSTALL_PREFIX"/lib/carla:$PATH exec $PYTHON "$INSTALL_PREFIX"/share/carla/carla-rack --with-appname="$0" --with-libprefix="$INSTALL_PREFIX" "$@" Carla-2.4.2/data/carla-settings000077500000000000000000000005171420416754300163310ustar00rootroot00000000000000#!/bin/bash PYTHON=$(which python3 2>/dev/null) if [ ! -f ${PYTHON} ]; then PYTHON=python fi if [ "$1" = "--gdb" ]; then PYTHON="gdb --args $PYTHON" fi INSTALL_PREFIX="X-PREFIX-X" export PATH="$INSTALL_PREFIX"/lib/carla:$PATH exec $PYTHON "$INSTALL_PREFIX"/share/carla/carla_settings.py --with-libprefix="$INSTALL_PREFIX" "$@" Carla-2.4.2/data/carla-single000077500000000000000000000204631420416754300157540ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Script to start carla plugin bridges # Copyright (C) 2015-2018 Filipe Coelho # # 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 2 of # the License, or 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. # # For a full copy of the GNU General Public License see the doc/GPL.txt file. # -------------------------------------------------------------------------------------------------------- # Imports import os import sys # -------------------------------------------------------------------------------------------------------- # Setup INSTALL_PREFIX = "X-PREFIX-X" CARLA_LIBDIR = os.path.join(INSTALL_PREFIX, "lib", "carla") CARLA_RESDIR = os.path.join(INSTALL_PREFIX, "share", "carla", "resources") # -------------------------------------------------------------------------------------------------------- # Check for enough arguments usageMsg = """\ usage: %s [arch (optional)] [format] [filename/uri] [label (optional)] [uniqueId (optional)] Possible archs: - native (default) - linux32 - linux64 - win32 - win64 Possible formats: - internal - ladspa - dssi - lv2 - vst|vst2 - vst3 - sf2 - sfz Examples: $ %s internal midisplit $ %s dssi /usr/lib/dssi/whysynth.so $ %s lv2 http://calf.sourceforge.net/plugins/Compressor $ %s native vst /usr/lib/vst/TAL-NoiseMaker.so $ %s win32 vst \"~/.wine/drive_c/Program Files (x86)/VstPlugins/Kontakt 5.dll\" $ CARLA_BRIDGE_PLUGIN_BINARY_TYPE=win64 %s vst \"~/.wine/drive_c/Program Files/Common Files/VST2/Sytrus VSTi.dll\" Format can be skipped for internal and lv2 plugins (auto-detected), like this: $ %s midipattern $ %s http://synthv1.sourceforge.net/lv2""" % ((sys.argv[0],)*9) def printUsageAndQuit(): print(usageMsg) sys.exit(0) if len(sys.argv) < 2: printUsageAndQuit() # -------------------------------------------------------------------------------------------------------- # Initialize variables to null ARCH = os.getenv("CARLA_BRIDGE_PLUGIN_BINARY_TYPE", "native") TESTING = os.getenv("CARLA_BRIDGE_TESTING", None) FORMAT = "none" FILENAME = "" LABEL = "" UNIQUEID = 0 # -------------------------------------------------------------------------------------------------------- # Set arch arg = 1 if sys.argv[arg] in ("native", "posix32", "posix64", "linux32", "linux64", "mac32", "mac64", "win32", "win64"): ARCH = sys.argv[arg].replace("linux", "posix").replace("mac", "posix") arg += 1 if len(sys.argv) == arg: printUsageAndQuit() # -------------------------------------------------------------------------------------------------------- # Set format if sys.argv[arg] in ("internal", "ladspa", "dssi", "lv2", "vst", "vst2", "vst3", "au", "sf2", "sfz"): FORMAT = sys.argv[arg] arg += 1 if FORMAT == "vst": FORMAT = "vst2" elif len(sys.argv) == arg+1: FORMAT = "lv2" if ":" in sys.argv[arg] else "internal" else: print("Invalid format") sys.exit(1) if len(sys.argv) == arg: printUsageAndQuit() # -------------------------------------------------------------------------------------------------------- # Set filename/uri if FORMAT in ("internal", "lv2"): LABEL = sys.argv[arg] arg += 1 else: FILENAME = os.path.expanduser(sys.argv[arg]) arg += 1 # -------------------------------------------------------------------------------------------------------- # Set label (optional) if len(sys.argv) > arg: if FORMAT == "internal": print("label/uri already set, ignoring 2nd label") elif FORMAT == "lv2": newpwd = sys.argv[arg] if os.path.exists(newpwd): print("using path hack for lv2 plugin") os.chdir(newpwd) else: LABEL = sys.argv[arg] arg += 1 # -------------------------------------------------------------------------------------------------------- # Set uniqueId (optional) if len(sys.argv) > arg: if FORMAT in ("internal", "dssi", "lv2", "au", "sf2", "sfz"): print("uniqueId is not used in this format, ignored") else: try: UNIQUEID = int(sys.argv[arg]) except: print("uniqueId must be a number") sys.exit(1) arg += 1 # -------------------------------------------------------------------------------------------------------- # Others? if len(sys.argv) > arg: print("Got too many arguments, ignoring past uniqueId") # -------------------------------------------------------------------------------------------------------- # Set bridge binary BRIDGE = os.path.join(CARLA_LIBDIR, "carla-bridge-" + ARCH) if ARCH in ("win32", "win64") or TESTING in ("win32", "win64"): BRIDGE = BRIDGE + ".exe" # -------------------------------------------------------------------------------------------------------- # Check for existing carla folder if not os.path.exists(CARLA_LIBDIR): print("Carla library folder does not exist, is Carla installed?") sys.exit(2) if not os.path.exists(CARLA_RESDIR): print("Carla resource folder does not exist, is Carla installed?") sys.exit(2) # -------------------------------------------------------------------------------------------------------- # Check for existing arch binary if not os.path.exists(BRIDGE): print("Carla plugin bridge (%s) for the requested arch (%s) does not exist" % (os.path.basename(BRIDGE), ARCH,)) sys.exit(2) # -------------------------------------------------------------------------------------------------------- # Final checks if ARCH not in ("native", "posix32", "posix64", "win32", "win64"): print("Invalid arch") sys.exit(1) if FORMAT not in ("internal", "ladspa", "dssi", "lv2", "vst2", "vst3", "au", "sf2", "sfz"): print("Invalid format") sys.exit(1) if FILENAME and not os.path.exists(FILENAME): print("Requested filename does not exist") sys.exit(1) # -------------------------------------------------------------------------------------------------------- # Setup environment LADSPA_PATH = os.getenv("LADSPA_PATH") DSSI_PATH = os.getenv("DSSI_PATH") LV2_PATH = os.getenv("LV2_PATH") VST2_PATH = os.getenv("VST_PATH") VST3_PATH = os.getenv("VST3_PATH") SF2_PATH = os.getenv("SF2_PATH") SFZ_PATH = os.getenv("SFZ_PATH") if LADSPA_PATH is not None: os.environ["ENGINE_OPTION_PLUGIN_PATH_LADSPA"] = LADSPA_PATH if DSSI_PATH is not None: os.environ["ENGINE_OPTION_PLUGIN_PATH_DSSI"] = DSSI_PATH if LV2_PATH is not None: os.environ["ENGINE_OPTION_PLUGIN_PATH_LV2"] = LV2_PATH if VST2_PATH is not None: os.environ["ENGINE_OPTION_PLUGIN_PATH_VST2"] = VST2_PATH if VST3_PATH is not None: os.environ["ENGINE_OPTION_PLUGIN_PATH_VST3"] = VST3_PATH if SF2_PATH is not None: os.environ["ENGINE_OPTION_PLUGIN_PATH_SF2"] = SF2_PATH if SFZ_PATH is not None: os.environ["ENGINE_OPTION_PLUGIN_PATH_SFZ"] = SFZ_PATH os.environ["ENGINE_OPTION_PATH_BINARIES"] = CARLA_LIBDIR os.environ["ENGINE_OPTION_PATH_RESOURCES"] = CARLA_RESDIR # -------------------------------------------------------------------------------------------------------- CARLA_CLIENT_NAME = os.getenv("CARLA_CLIENT_NAME") LADISH_APP_NAME = os.getenv("LADISH_APP_NAME") if CARLA_CLIENT_NAME is not None: os.environ["CARLA_CLIENT_NAME"] = CARLA_CLIENT_NAME elif LADISH_APP_NAME is not None: os.environ["CARLA_CLIENT_NAME"] = LADISH_APP_NAME else: os.environ["CARLA_CLIENT_NAME"] = "(none)" # -------------------------------------------------------------------------------------------------------- # Exec command = [] if os.getenv("CARLA_BRIDGE_PLUGIN_BINARY_TYPE") is not None: BRIDGE = os.path.join(CARLA_LIBDIR, "carla-bridge-native") elif ARCH == "win32" or TESTING == "win32": command.append("wine") elif ARCH == "win64" or TESTING == "win64": command.append("wine64") command.append(BRIDGE) command.append(FORMAT) command.append(FILENAME or "(none)") command.append(LABEL or "(none)") command.append(str(UNIQUEID)) print(command) os.execvp(command[0], command) # -------------------------------------------------------------------------------------------------------- Carla-2.4.2/data/carla.xml000066400000000000000000000007451420416754300152720ustar00rootroot00000000000000 Carla project Carla plugin preset Carla-2.4.2/data/copy-dpf-stuff000077500000000000000000000112201420416754300162500ustar00rootroot00000000000000#!/bin/bash set -e cp -v /home/falktx/FOSS/GIT-mine/DISTRHO/DPF/dgl/*.hpp /home/falktx/FOSS/GIT-mine/falkTX/Carla/source/modules/dgl/ cp -r -v /home/falktx/FOSS/GIT-mine/DISTRHO/DPF/dgl/src /home/falktx/FOSS/GIT-mine/falkTX/Carla/source/modules/dgl/ cp -r -v /home/falktx/FOSS/GIT-mine/DISTRHO/DPF/distrho/* /home/falktx/FOSS/GIT-mine/falkTX/Carla/source/modules/distrho/ || true rm -r /home/falktx/FOSS/GIT-mine/falkTX/Carla/source/modules/dgl/src/resources rm -r /home/falktx/FOSS/GIT-mine/falkTX/Carla/source/modules/dgl/src/sofd rm /home/falktx/FOSS/GIT-mine/falkTX/Carla/source/modules/dgl/src/Resources.* rm /home/falktx/FOSS/GIT-mine/falkTX/Carla/source/modules/distrho/src/DistrhoPlugin{Jack,LADSPA+DSSI,LV2,LV2export,VST}.cpp rm /home/falktx/FOSS/GIT-mine/falkTX/Carla/source/modules/distrho/src/DistrhoUI{DSSI,LV2}.cpp # cp -v /home/falktx/FOSS/GIT-mine/DISTRHO/DISTRHO_mini-series/plugins/3BandEQ/{*.cpp,*.hpp,*.h} /home/falktx/FOSS/GIT-mine/falkTX/Carla/source/modules/native-plugins/3bandeq/ # cp -v /home/falktx/FOSS/GIT-mine/DISTRHO/DISTRHO_mini-series/plugins/3BandSplitter/{*.cpp,*.hpp,*.h} /home/falktx/FOSS/GIT-mine/falkTX/Carla/source/modules/native-plugins/3bandsplitter/ # cp -v /home/falktx/FOSS/GIT-mine/DISTRHO/DISTRHO_mini-series/plugins/PingPongPan/{*.cpp,*.hpp,*.h} /home/falktx/FOSS/GIT-mine/falkTX/Carla/source/modules/native-plugins/pingpongpan/ # # cp -v /home/falktx/FOSS/GIT-mine/DISTRHO/DISTRHO_nekobi/plugins/Nekobi/{*.cpp,*.hpp,*.h} /home/falktx/FOSS/GIT-mine/falkTX/Carla/source/modules/native-plugins/nekobi/ # cp -v /home/falktx/FOSS/GIT-mine/DISTRHO/DISTRHO_nekobi/plugins/Nekobi/nekobee-src/{*.c,*.h} /home/falktx/FOSS/GIT-mine/falkTX/Carla/source/modules/native-plugins/nekobi/nekobee-src/ # # cp -v /home/falktx/FOSS/GIT-mine/DISTRHO/DISTRHO_prom/plugins/ProM/{*.cpp,*.hpp,*.h} /home/falktx/FOSS/GIT-mine/falkTX/Carla/source/modules/native-plugins/prom/ # # cp -v /home/falktx/FOSS/GIT-mine/DISTRHO/JuicePlugins/plugins/GrooveJuice/{*.cpp,*.hpp,*.hxx,*.h} /home/falktx/FOSS/GIT-mine/falkTX/Carla/source/modules/native-plugins/groovejuice/ # cp -v /home/falktx/FOSS/GIT-mine/DISTRHO/JuicePlugins/plugins/PowerJuice/{*.cpp,*.hpp,*.h} /home/falktx/FOSS/GIT-mine/falkTX/Carla/source/modules/native-plugins/powerjuice/ # # cp -v /home/falktx/FOSS/GIT-mine/DISTRHO/JuicePlugins/plugins/PowerJuiceX2/{*.cpp,*.hpp,*.hxx,*.h} /home/falktx/FOSS/GIT-mine/falkTX/Carla/source/modules/native-plugins/powerjuicex2/ # cp -v /home/falktx/FOSS/GIT-mine/DISTRHO/JuicePlugins/plugins/SegmentJuice/{*.cpp,*.hpp,*.hxx,*.h} /home/falktx/FOSS/GIT-mine/falkTX/Carla/source/modules/native-plugins/segmentjuice/ # # cp -v /home/falktx/FOSS/GIT-mine/DISTRHO/JuicePlugins/plugins/StutterJuice/{*.cpp,*.hpp,*.hxx,*.h} /home/falktx/FOSS/GIT-mine/falkTX/Carla/source/modules/native-plugins/stutterjuice/ # # cp -v /home/falktx/FOSS/GIT-mine/DISTRHO/JuicePlugins/plugins/TriggerJuice/{*.cpp,*.hpp,*.hxx,*.h} /home/falktx/FOSS/GIT-mine/falkTX/Carla/source/modules/native-plugins/triggerjuice/ # cp -v /home/falktx/FOSS/GIT-mine/DISTRHO/JuicePlugins/plugins/VectorJuice/{*.cpp,*.hpp,*.h} /home/falktx/FOSS/GIT-mine/falkTX/Carla/source/modules/native-plugins/vectorjuice/ # cp -v /home/falktx/FOSS/GIT-mine/DISTRHO/JuicePlugins/plugins/WobbleJuice/{*.cpp,*.hpp,*.hxx,*.h} /home/falktx/FOSS/GIT-mine/falkTX/Carla/source/modules/native-plugins/wobblejuice/ # # cp -v /home/falktx/FOSS/GIT-mine/zam-plugins-DPF/plugins/ZamComp/{*.cpp,*.hpp,*.h} /home/falktx/FOSS/GIT-mine/falkTX/Carla/source/modules/native-plugins/zamcomp/ # cp -v /home/falktx/FOSS/GIT-mine/zam-plugins-DPF/plugins/ZamCompX2/{*.cpp,*.hpp,*.h} /home/falktx/FOSS/GIT-mine/falkTX/Carla/source/modules/native-plugins/zamcompx2/ # cp -v /home/falktx/FOSS/GIT-mine/zam-plugins-DPF/plugins/ZamEQ2/{*.cpp,*.hpp,*.h} /home/falktx/FOSS/GIT-mine/falkTX/Carla/source/modules/native-plugins/zameq2/ # cp -v /home/falktx/FOSS/GIT-mine/zam-plugins-DPF/plugins/ZamSynth/{*.cpp,*.hpp,*.h} /home/falktx/FOSS/GIT-mine/falkTX/Carla/source/modules/native-plugins/zamsynth/ # cp -v /home/falktx/FOSS/GIT-mine/zam-plugins-DPF/plugins/ZamTube/{*.cpp,*.hpp,*.h} /home/falktx/FOSS/GIT-mine/falkTX/Carla/source/modules/native-plugins/zamtube/ # cp -v /home/falktx/FOSS/GIT-mine/zam-plugins-DPF/plugins/ZaMultiComp/{*.cpp,*.hpp,*.h} /home/falktx/FOSS/GIT-mine/falkTX/Carla/source/modules/native-plugins/zamulticomp/ # cp -v /home/falktx/FOSS/GIT-mine/zam-plugins-DPF/plugins/ZaMultiCompX2/{*.cpp,*.hpp,*.h} /home/falktx/FOSS/GIT-mine/falkTX/Carla/source/modules/native-plugins/zamulticompx2/ Carla-2.4.2/data/copy-juce000077500000000000000000000021441420416754300153050ustar00rootroot00000000000000#!/bin/bash set -e JUCE_MODULES_DIR="/Shared/Personal/FOSS/GIT/DISTRHO/juce/modules" CARLA_MODULES_DIR="/Shared/Personal/FOSS/GIT/falkTX/Carla/source/modules" MODULES=("juce_audio_basics juce_audio_devices juce_audio_processors juce_core juce_data_structures juce_events juce_graphics juce_gui_basics juce_gui_extra") for M in $MODULES; do echo $CARLA_MODULES_DIR/$M; rm -f $CARLA_MODULES_DIR/$M/juce_* rm -rf $CARLA_MODULES_DIR/$M/{a..z}* cp -r -v $JUCE_MODULES_DIR/$M/* $CARLA_MODULES_DIR/$M/ rm $CARLA_MODULES_DIR/$M/juce_*.mm done find $CARLA_MODULES_DIR -name juce_module_info -delete rm -rf $CARLA_MODULES_DIR/juce_*/native/java/ rm -rf $CARLA_MODULES_DIR/juce_*/native/javacore/ rm -rf $CARLA_MODULES_DIR/juce_*/native/javaopt/ rm -rf $CARLA_MODULES_DIR/juce_*/native/oboe/ sed -i "s|Juce VST Host|Carla Plugin Host|" $CARLA_MODULES_DIR/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp rm -rf $CARLA_MODULES_DIR/../includes/vst3sdk mv $CARLA_MODULES_DIR/juce_audio_processors/format_types/VST3_SDK $CARLA_MODULES_DIR/../includes/vst3sdk rm -rf $CARLA_MODULES_DIR/../includes/vst3sdk/*.pdf Carla-2.4.2/data/copy-zynaddsubfx000077500000000000000000000044621420416754300167250ustar00rootroot00000000000000#!/bin/bash set -e ORIG_ZYN_DIR="/home/falktx/FOSS/GIT-mine/falkTX/zynaddsubfx" CARLA_ZYN_DIR="/home/falktx/FOSS/GIT-mine/falkTX/Carla/source/native-plugins/zynaddsubfx" rm -f $CARLA_ZYN_DIR/*.cpp rm -f $CARLA_ZYN_DIR/*.h rm -f $CARLA_ZYN_DIR/Containers/* rm -f $CARLA_ZYN_DIR/DSP/* rm -f $CARLA_ZYN_DIR/Effects/* rm -f $CARLA_ZYN_DIR/Misc/* rm -f $CARLA_ZYN_DIR/Nio/* rm -f $CARLA_ZYN_DIR/Params/* rm -f $CARLA_ZYN_DIR/Synth/* rm -f $CARLA_ZYN_DIR/Tests/* rm -fr $CARLA_ZYN_DIR/UI/* rm -fr $CARLA_ZYN_DIR/rtosc/* rm -f $CARLA_ZYN_DIR/tlsf/* cp $ORIG_ZYN_DIR/src/*.cpp $CARLA_ZYN_DIR/ cp $ORIG_ZYN_DIR/src/*.h $CARLA_ZYN_DIR/ cp $ORIG_ZYN_DIR/src/Containers/* $CARLA_ZYN_DIR/Containers/ cp $ORIG_ZYN_DIR/src/DSP/* $CARLA_ZYN_DIR/DSP/ cp $ORIG_ZYN_DIR/src/Effects/* $CARLA_ZYN_DIR/Effects/ cp $ORIG_ZYN_DIR/src/Misc/* $CARLA_ZYN_DIR/Misc/ cp $ORIG_ZYN_DIR/src/Nio/* $CARLA_ZYN_DIR/Nio/ cp $ORIG_ZYN_DIR/src/Params/* $CARLA_ZYN_DIR/Params/ cp $ORIG_ZYN_DIR/src/Synth/* $CARLA_ZYN_DIR/Synth/ cp -r $ORIG_ZYN_DIR/src/UI/* $CARLA_ZYN_DIR/UI/ cp $ORIG_ZYN_DIR/rtosc/include/rtosc/* $CARLA_ZYN_DIR/rtosc/ cp -r $ORIG_ZYN_DIR/rtosc/src/* $CARLA_ZYN_DIR/rtosc/ cp $ORIG_ZYN_DIR/tlsf/*.h $CARLA_ZYN_DIR/tlsf/ cp $ORIG_ZYN_DIR/tlsf/*.c $CARLA_ZYN_DIR/tlsf/ rm $CARLA_ZYN_DIR/*/CMakeLists.txt rm $CARLA_ZYN_DIR/UI/zynaddsubfx.xpm cp $ORIG_ZYN_DIR/src/zyn-version.h.in $CARLA_ZYN_DIR/zyn-version.h sed -i 's|${VERSION_MAJOR}|3|' $CARLA_ZYN_DIR/zyn-version.h sed -i 's|${VERSION_MINOR}|0|' $CARLA_ZYN_DIR/zyn-version.h sed -i 's|${VERSION_REVISION}|2|' $CARLA_ZYN_DIR/zyn-version.h find $CARLA_ZYN_DIR -name "*.h" -type f | xargs sed -i "s|namespace zyn|namespace zyncarla|g" find $CARLA_ZYN_DIR -name "*.fl" -type f | xargs sed -i "s|namespace zyn|namespace zyncarla|g" find $CARLA_ZYN_DIR -name "*.cpp" -type f | xargs sed -i "s|namespace zyn|namespace zyncarla|g" sed -i "s|zyn::|zyncarla::|g" $CARLA_ZYN_DIR/*/*.h sed -i "s|zyn::|zyncarla::|g" $CARLA_ZYN_DIR/*/*.cpp sed -i "s|emplace_uint32(|emplace_uint32_cpp(|" $CARLA_ZYN_DIR/rtosc/cpp/subtree-serialize.cpp sed -i "s|../../include/rtosc/|../|" $CARLA_ZYN_DIR/rtosc/cpp/*.cpp sed -i "s|../../tlsf/tlsf.h|tlsf/tlsf.h|" $CARLA_ZYN_DIR/Misc/Allocator.cpp sed -i "s|../src/globals.h|globals.h|" $CARLA_ZYN_DIR/Misc/Config.cpp sed -i "s|identity|identity_ts|" $CARLA_ZYN_DIR/UI/Fl_Osc_TSlider.cpp Carla-2.4.2/data/desktop/000077500000000000000000000000001420416754300151315ustar00rootroot00000000000000Carla-2.4.2/data/desktop/carla-control.desktop000066400000000000000000000005031420416754300212620ustar00rootroot00000000000000[Desktop Entry] Name=Carla Control GenericName=Carla OSC Control GenericName[fr]=Contrôle OSC pour Carla Comment=Audio Plugin Host (OSC Control) Comment[fr]=Hôte de greffon audio (contrôle OSC) Exec=carla-control %u Icon=carla-control Terminal=false Type=Application Categories=AudioVideo;X-AudioEditing;Qt; Version=1.0 Carla-2.4.2/data/desktop/carla-jack-multi.desktop000066400000000000000000000004151420416754300216440ustar00rootroot00000000000000[Desktop Entry] Name=Carla (JACK multi-client) GenericName=Carla Plugin Host (JACK multi-client mode) Comment=Audio Plugin Host, in JACK multi-client mode Exec=carla-jack-multi %u Icon=carla Terminal=false Type=Application Version=1.0 NoDisplay=true X-NSM-capable=true Carla-2.4.2/data/desktop/carla-jack-single.desktop000066400000000000000000000004211420416754300217700ustar00rootroot00000000000000[Desktop Entry] Name=Carla (JACK single client) GenericName=Carla Plugin Host (JACK single-client mode) Comment=Audio Plugin Host, in JACK single-client mode Exec=carla-jack-single %u Icon=carla Terminal=false Type=Application Version=1.0 NoDisplay=true X-NSM-capable=true Carla-2.4.2/data/desktop/carla-patchbay.desktop000066400000000000000000000004001420416754300213710ustar00rootroot00000000000000[Desktop Entry] Name=Carla-Patchbay GenericName=Carla Plugin Host (Internal Patchbay mode) Comment=Audio Plugin Host, in internal Patchbay mode Exec=carla-patchbay %u Icon=carla Terminal=false Type=Application Version=1.0 NoDisplay=true X-NSM-capable=true Carla-2.4.2/data/desktop/carla-rack.desktop000066400000000000000000000003361420416754300205260ustar00rootroot00000000000000[Desktop Entry] Name=Carla-Rack GenericName=Carla Plugin Host (Rack mode) Comment=Audio Plugin Host, in Rack mode Exec=carla-rack %u Icon=carla Terminal=false Type=Application Version=1.0 NoDisplay=true X-NSM-capable=true Carla-2.4.2/data/desktop/carla.desktop000066400000000000000000000004611420416754300176070ustar00rootroot00000000000000[Desktop Entry] Name=Carla GenericName=Carla Plugin Host GenericName[fr]=Hôte de greffon Carla Comment=Audio Plugin Host Comment[fr]=Hôte de greffon audio Exec=carla %u Icon=carla Terminal=false Type=Application Categories=AudioVideo;X-AudioEditing;Qt; MimeType=application/x-carla-project; Version=1.0 Carla-2.4.2/data/linux/000077500000000000000000000000001420416754300146175ustar00rootroot00000000000000Carla-2.4.2/data/linux/README000066400000000000000000000020751420416754300155030ustar00rootroot00000000000000# --- README for Carla - Linux build --- What is Carla? --------------- Carla is a fully-featured audio plugin host, with support for many audio drivers and plugin formats.
It's open source and licensed under the GNU General Public License, version 2 or later. Features --------- * LADSPA, DSSI, LV2 and VST2 plugin formats * SF2/3 and SFZ sound banks * Internal audio and midi file player * Automation of plugin parameters via MIDI CC * Remote control over OSC * Rack and Patchbay processing modes, plus Single and Multi-Client if using JACK * Native audio drivers (ALSA, DirectSound, CoreAudio, etc) and JACK * Transport controls, sync with JACK Transport or Ableton Link In experimental phase / work in progress: * Export any Carla loadable plugin or sound bank as an LV2 plugin * Plugin bridge support (such as running 32bit plugins on a 64bit Carla, or Windows plugins on Linux) * Run JACK applications as audio plugins Carla is also available as an LV2 and VST2 plugin for Linux. For a complete and updated description of Carla, please check: https://kx.studio/carla Carla-2.4.2/data/linux/app-carla-control.py000066400000000000000000000020721420416754300205100ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------------------------------------ # Imports (cx_Freeze) from cx_Freeze import setup, Executable # ------------------------------------------------------------------------------------------------------------ # Imports (Custom Stuff) from carla_host import VERSION # ------------------------------------------------------------------------------------------------------------ options = { "zip_include_packages": ["*"], "zip_exclude_packages": ["PyQt5"], "replace_paths": [["*","./lib/"]], "build_exe": "./build-carla-control", "optimize": True, } exe_options = { "script": "./source/frontend/carla-control", "targetName": "carla-control", } setup(name = "CarlaControl", version = VERSION, description = "Carla Plugin Host", options = {"build_exe": options}, executables = [Executable(**exe_options)]) # ------------------------------------------------------------------------------------------------------------ Carla-2.4.2/data/linux/app-carla.py000066400000000000000000000020331420416754300170270ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------------------------------------ # Imports (cx_Freeze) from cx_Freeze import setup, Executable # ------------------------------------------------------------------------------------------------------------ # Imports (Custom Stuff) from carla_host import VERSION # ------------------------------------------------------------------------------------------------------------ options = { "zip_include_packages": ["*"], "zip_exclude_packages": ["PyQt5"], "replace_paths": [["*","./lib/"]], "build_exe": "./build-carla", "optimize": True, } exe_options = { "script": "./source/frontend/carla", "targetName": "carla", } setup(name = "Carla", version = VERSION, description = "Carla Plugin Host", options = {"build_exe": options}, executables = [Executable(**exe_options)]) # ------------------------------------------------------------------------------------------------------------ Carla-2.4.2/data/linux/app-plugin.py000066400000000000000000000021051420416754300172430ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------------------------------------ # Imports (cx_Freeze) from cx_Freeze import setup, Executable # ------------------------------------------------------------------------------------------------------------ # Imports (Custom Stuff) from carla_host import VERSION from os import getenv # ------------------------------------------------------------------------------------------------------------ name = getenv("TARGET_NAME") options = { "zip_include_packages": ["*"], "zip_exclude_packages": ["PyQt5"], "replace_paths": [["*","./lib/"]], "build_exe": "./build-carla", "optimize": True, } exe_options = { "script": "./bin/resources/{}".format(name), "targetName": name, } setup(name = "Carla", version = VERSION, description = name, options = {"build_exe": options}, executables = [Executable(**exe_options)]) # ------------------------------------------------------------------------------------------------------------ Carla-2.4.2/data/linux/build-all.sh000077500000000000000000000403251420416754300170270ustar00rootroot00000000000000#!/bin/bash VERSION="2.3.0-alpha1" # --------------------------------------------------------------------------------------------------------------------- # check dependencies if ! which debootstrap > /dev/null; then echo "debootstrap not found, please install it" exit 1 fi # --------------------------------------------------------------------------------------------------------------------- # startup as main script if [ -z "${SOURCED_BY_DOCKER}" ]; then # stop on error set -e # cd to correct path cd $(dirname $0) fi # --------------------------------------------------------------------------------------------------------------------- # set variables source common.env # where we build stuff inside the chroot CHROOT_CARLA_DIR="/tmp/carla-src" # used for downloading packages from kxstudio repos, in order to get lv2-gtk3 and windows bridges CARLA_GIT_VER="2.2~rc1+git20200718" PKGS_NUM="20200718" # --------------------------------------------------------------------------------------------------------------------- # function to remove old stuff cleanup() { if [ -d ${TARGETDIR}/chroot32 ]; then sudo umount -lf ${TARGETDIR}/chroot32/dev/pts || true sudo umount -lf ${TARGETDIR}/chroot32/sys || true sudo umount -lf ${TARGETDIR}/chroot32/proc || true fi if [ -d ${TARGETDIR}/chroot64 ]; then sudo umount -lf ${TARGETDIR}/chroot64/dev/pts || true sudo umount -lf ${TARGETDIR}/chroot64/sys || true sudo umount -lf ${TARGETDIR}/chroot64/proc || true fi if [ -d ${TARGETDIR}/chroot32 ]; then sudo mv ${TARGETDIR}/chroot32 ${TARGETDIR}/chroot32-deleteme2 sudo rm -rf ${TARGETDIR}/chroot32-deleteme || true fi if [ -d ${TARGETDIR}/chroot64 ]; then sudo mv ${TARGETDIR}/chroot64 ${TARGETDIR}/chroot64-deleteme2 sudo rm -rf ${TARGETDIR}/chroot64-deleteme || true fi } # --------------------------------------------------------------------------------------------------------------------- # create chroots prepare() { if [ ! -d ${TARGETDIR}/chroot32 ]; then sudo debootstrap --no-check-gpg --arch=i386 lucid ${TARGETDIR}/chroot32 http://old-releases.ubuntu.com/ubuntu/ fi if [ ! -d ${TARGETDIR}/chroot64 ]; then sudo debootstrap --no-check-gpg --arch=amd64 lucid ${TARGETDIR}/chroot64 http://old-releases.ubuntu.com/ubuntu/ fi } # --------------------------------------------------------------------------------------------------------------------- # setup chroots chroot_setup() { CHROOT_DIR=${TARGETDIR}/chroot${ARCH} if [ ! -f ${CHROOT_DIR}/tmp/setup-aria2 ]; then pushd ${CHROOT_DIR}/tmp if [ x"${ARCH}" = x"32" ]; then wget -c https://github.com/q3aql/aria2-static-builds/releases/download/v1.34.0/aria2-1.34.0-linux-gnu-32bit-build1.tar.bz2 else wget -c https://github.com/q3aql/aria2-static-builds/releases/download/v1.34.0/aria2-1.34.0-linux-gnu-64bit-build1.tar.bz2 fi tar xf aria2-*.tar.bz2 popd fi cat < /etc/apt/sources.list apt-get update touch /tmp/setup-repo-list fi if [ ! -f /tmp/setup-repo-upgrade ]; then dpkg-divert --local --rename --add /sbin/initctl ln -s /bin/true /sbin/initctl apt-get dist-upgrade touch /tmp/setup-repo-upgrade fi if [ ! -f /tmp/setup-repo-packages ]; then apt-get install -y build-essential autoconf libtool cmake libglib2.0-dev libgl1-mesa-dev git-core apt-get clean touch /tmp/setup-repo-packages fi if [ ! -f /tmp/setup-aria2 ]; then pushd /tmp/aria2-* make install popd rm -r /tmp/aria2-* touch /tmp/setup-aria2 fi if [ ! -d ${CHROOT_CARLA_DIR} ]; then git clone --depth=1 -b develop git://github.com/falkTX/Carla ${CHROOT_CARLA_DIR} fi if [ ! -f ${CHROOT_CARLA_DIR}/source/native-plugins/external/README.md ]; then git clone git://github.com/falkTX/Carla-Plugins ${CHROOT_CARLA_DIR}/source/native-plugins/external fi cd ${CHROOT_CARLA_DIR} git checkout . git pull git submodule init git submodule update # might be updated by git pull chmod 777 data/linux/*.sh chmod 777 data/linux/common.env sync EOF } # --------------------------------------------------------------------------------------------------------------------- # build base libs chroot_build_deps() { CHROOT_DIR=${TARGETDIR}/chroot${ARCH} cp build-deps.sh build-pyqt.sh common.env ${CHROOT_DIR}${CHROOT_CARLA_DIR}/data/linux/ sudo cp /etc/ca-certificates.conf ${CHROOT_DIR}/etc/ sudo cp -r /usr/share/ca-certificates/* ${CHROOT_DIR}/usr/share/ca-certificates/ cat < Carla chmod +x Carla rm -rf carla carla-${VERSION} carla.zip mv build-carla-control carla-control-${VERSION} zip --symlinks -r -9 carla-control.zip carla-control-${VERSION} cat data/windows/unzipfx-carla-control/unzipfx2cat carla-control.zip > CarlaControl chmod +x CarlaControl rm -rf carla-control carla-control-${VERSION} carla-control.zip rm -rf ${PKG_FOLDER}${ARCH} mkdir ${PKG_FOLDER}${ARCH} cp data/linux/README ${PKG_FOLDER}${ARCH}/ mv Carla CarlaControl build-lv2/*.lv2 build-vst/*.vst ${PKG_FOLDER}${ARCH}/ rmdir build-lv2 build-vst tar cJf ${PKG_FOLDER}${ARCH}.tar.xz ${PKG_FOLDER}${ARCH} mv ${PKG_FOLDER}${ARCH}.tar.xz /tmp/ EOF } # --------------------------------------------------------------------------------------------------------------------- # run the functions if [ -z "${SOURCED_BY_DOCKER}" ]; then # name of final dir and xz file, needed only by chroot_pack_carla export PKG_FOLDER="Carla_${VERSION}-linux" # cleanup prepare # 32bit build export ARCH=32 chroot_setup chroot_build_deps chroot_build_carla download_carla_extras chroot_pack_carla # 64bit build export ARCH=64 chroot_setup chroot_build_deps chroot_build_carla download_carla_extras chroot_pack_carla fi # --------------------------------------------------------------------------------------------------------------------- Carla-2.4.2/data/linux/build-deps.sh000077500000000000000000000277771420416754300172320ustar00rootroot00000000000000#!/bin/bash # apt-get install build-essential autoconf libtool cmake libglib2.0-dev libgl1-mesa-dev # --------------------------------------------------------------------------------------------------------------------- # stop on error set -e # --------------------------------------------------------------------------------------------------------------------- # cd to correct path cd $(dirname $0) # --------------------------------------------------------------------------------------------------------------------- # set variables source common.env # --------------------------------------------------------------------------------------------------------------------- # function to remove old stuff cleanup() { rm -rf ${TARGETDIR}/carla32/ ${TARGETDIR}/carla64/ rm -rf file-* rm -rf flac-* rm -rf fltk-* rm -rf fluidsynth-* rm -rf liblo-* rm -rf libogg-* rm -rf libsndfile-* rm -rf libvorbis-* rm -rf pkg-config-* rm -rf qtbase-* rm -rf qtsvg-* rm -rf zlib-* } # --------------------------------------------------------------------------------------------------------------------- # function to build base libs build_base() { export CC=gcc export CXX=g++ export PREFIX=${TARGETDIR}/carla${ARCH} export PATH=${PREFIX}/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin export PKG_CONFIG_PATH=${PREFIX}/lib/pkgconfig export CFLAGS="-O3 -mtune=generic -msse -msse2 -mfpmath=sse -fvisibility=hidden -fdata-sections -ffunction-sections" export CFLAGS="${CFLAGS} -fPIC -DPIC -DNDEBUG -I${PREFIX}/include -m${ARCH}" export CXXFLAGS="${CFLAGS} -fvisibility-inlines-hidden" export LDFLAGS="-fdata-sections -ffunction-sections -Wl,--gc-sections -Wl,-O1 -Wl,--as-needed -Wl,--strip-all" export LDFLAGS="${LDFLAGS} -L${PREFIX}/lib -m${ARCH}" # --------------------------------------------------------------------------------------------------------------------- # pkgconfig if [ ! -d pkg-config-${PKG_CONFIG_VERSION} ]; then aria2c https://pkg-config.freedesktop.org/releases/pkg-config-${PKG_CONFIG_VERSION}.tar.gz tar -xf pkg-config-${PKG_CONFIG_VERSION}.tar.gz fi if [ ! -f pkg-config-${PKG_CONFIG_VERSION}_$ARCH/build-done ]; then cp -r pkg-config-${PKG_CONFIG_VERSION} pkg-config-${PKG_CONFIG_VERSION}_$ARCH cd pkg-config-${PKG_CONFIG_VERSION}_$ARCH ./configure --enable-indirect-deps --with-internal-glib --with-pc-path=$PKG_CONFIG_PATH --prefix=${PREFIX} make ${MAKE_ARGS} make install touch build-done cd .. fi # --------------------------------------------------------------------------------------------------------------------- # liblo if [ ! -d liblo-${LIBLO_VERSION} ]; then aria2c https://download.sourceforge.net/liblo/liblo-${LIBLO_VERSION}.tar.gz tar -xf liblo-${LIBLO_VERSION}.tar.gz fi if [ ! -f liblo-${LIBLO_VERSION}_$ARCH/build-done ]; then cp -r liblo-${LIBLO_VERSION} liblo-${LIBLO_VERSION}_$ARCH cd liblo-${LIBLO_VERSION}_$ARCH ./configure --enable-static --disable-shared --prefix=${PREFIX} \ --enable-threads \ --disable-examples --disable-tools make ${MAKE_ARGS} make install touch build-done cd .. fi # --------------------------------------------------------------------------------------------------------------------- if [ x"${ARCH}" = x"32" ] && [ x"${TARGET}" != x"32" ]; then return fi # --------------------------------------------------------------------------------------------------------------------- # qt if [ ! -d qtbase-opensource-src-${QT5_VERSION} ]; then aria2c http://download.qt.io/archive/qt/${QT5_MVERSION}/${QT5_VERSION}/submodules/qtbase-opensource-src-${QT5_VERSION}.tar.xz tar xf qtbase-opensource-src-${QT5_VERSION}.tar.xz fi if [ ! -f qtbase-opensource-src-${QT5_VERSION}/build-done ]; then cd qtbase-opensource-src-${QT5_VERSION} if [ ! -f configured ]; then ./configure -release -strip -silent \ -sse2 \ -no-sse3 -no-ssse3 -no-sse4.1 -no-sse4.2 \ -no-avx -no-avx2 -no-avx512 \ -prefix ${PREFIX} \ -opensource -confirm-license \ -optimize-size -optimized-qmake \ -qt-freetype \ -qt-harfbuzz \ -qt-libjpeg \ -qt-libpng \ -qt-pcre \ -qt-sqlite \ -qt-xcb \ -qt-zlib \ -opengl desktop \ -no-cups \ -no-gtk \ -no-icu \ -no-openssl \ -make libs \ -make tools \ -nomake examples \ -nomake tests touch configured fi make ${MAKE_ARGS} make install touch build-done cd .. fi # --------------------------------------------------------------------------------------------------------------------- # qt5-svg if [ ! -d qtsvg-opensource-src-${QT5_VERSION} ]; then aria2c http://download.qt.io/archive/qt/${QT5_MVERSION}/${QT5_VERSION}/submodules/qtsvg-opensource-src-${QT5_VERSION}.tar.xz tar xf qtsvg-opensource-src-${QT5_VERSION}.tar.xz fi if [ ! -f qtsvg-opensource-src-${QT5_VERSION}/build-done ]; then cd qtsvg-opensource-src-${QT5_VERSION} qmake make ${MAKE_ARGS} make install touch build-done cd .. fi # --------------------------------------------------------------------------------------------------------------------- # zlib if [ ! -d zlib-${ZLIB_VERSION} ]; then aria2c https://github.com/madler/zlib/archive/v${ZLIB_VERSION}.tar.gz tar -xf zlib-${ZLIB_VERSION}.tar.gz fi if [ ! -f zlib-${ZLIB_VERSION}/build-done ]; then cd zlib-${ZLIB_VERSION} ./configure --static --prefix=${PREFIX} make ${MAKE_ARGS} make install touch build-done cd .. fi # --------------------------------------------------------------------------------------------------------------------- # file/magic if [ ! -d file-${FILE_VERSION} ]; then wget ftp://ftp.astron.com/pub/file/file-${FILE_VERSION}.tar.gz tar -xf file-${FILE_VERSION}.tar.gz fi if [ ! -f file-${FILE_VERSION}/build-done ]; then cd file-${FILE_VERSION} ./configure --enable-static --disable-shared --prefix=${PREFIX} make ${MAKE_ARGS} make install touch build-done cd .. fi # --------------------------------------------------------------------------------------------------------------------- # libogg if [ ! -d libogg-${LIBOGG_VERSION} ]; then aria2c https://ftp.osuosl.org/pub/xiph/releases/ogg/libogg-${LIBOGG_VERSION}.tar.gz tar -xf libogg-${LIBOGG_VERSION}.tar.gz fi if [ ! -f libogg-${LIBOGG_VERSION}/build-done ]; then cd libogg-${LIBOGG_VERSION} ./configure --enable-static --disable-shared --prefix=${PREFIX} make ${MAKE_ARGS} make install touch build-done cd .. fi # --------------------------------------------------------------------------------------------------------------------- # libvorbis if [ ! -d libvorbis-${LIBVORBIS_VERSION} ]; then aria2c https://ftp.osuosl.org/pub/xiph/releases/vorbis/libvorbis-${LIBVORBIS_VERSION}.tar.gz tar -xf libvorbis-${LIBVORBIS_VERSION}.tar.gz fi if [ ! -f libvorbis-${LIBVORBIS_VERSION}/build-done ]; then cd libvorbis-${LIBVORBIS_VERSION} ./configure --enable-static --disable-shared --prefix=${PREFIX} make ${MAKE_ARGS} make install touch build-done cd .. fi # --------------------------------------------------------------------------------------------------------------------- # flac if [ ! -d flac-${FLAC_VERSION} ]; then aria2c https://ftp.osuosl.org/pub/xiph/releases/flac/flac-${FLAC_VERSION}.tar.xz tar -xf flac-${FLAC_VERSION}.tar.xz fi if [ ! -f flac-${FLAC_VERSION}/build-done ]; then cd flac-${FLAC_VERSION} chmod +x configure install-sh ./configure --enable-static --disable-shared --prefix=${PREFIX} \ --disable-cpplibs make ${MAKE_ARGS} make install touch build-done cd .. fi # --------------------------------------------------------------------------------------------------------------------- # libsndfile if [ ! -d libsndfile-${LIBSNDFILE_VERSION} ]; then wget http://www.mega-nerd.com/libsndfile/files/libsndfile-${LIBSNDFILE_VERSION}.tar.gz tar -xf libsndfile-${LIBSNDFILE_VERSION}.tar.gz fi if [ ! -f libsndfile-${LIBSNDFILE_VERSION}/build-done ]; then cd libsndfile-${LIBSNDFILE_VERSION} ./configure --enable-static --disable-shared --prefix=${PREFIX} \ --disable-full-suite --disable-alsa --disable-sqlite make ${MAKE_ARGS} make install touch build-done cd .. fi # --------------------------------------------------------------------------------------------------------------------- # glib if [ ! -d ${PREFIX}/include/glib-2.0 ]; then cp -r /usr/include/glib-2.0 ${PREFIX}/include/ fi if [ ! -f ${PREFIX}/lib/pkgconfig/glib-2.0.pc ]; then if [ -f /usr/lib/x86_64-linux-gnu/pkgconfig/glib-2.0.pc ]; then cp /usr/lib/x86_64-linux-gnu/pkgconfig/glib-2.0.pc ${PREFIX}/lib/pkgconfig/ cp /usr/lib/x86_64-linux-gnu/pkgconfig/gthread-2.0.pc ${PREFIX}/lib/pkgconfig/ cp /usr/lib/x86_64-linux-gnu/pkgconfig/libpcre.pc ${PREFIX}/lib/pkgconfig/ else cp /usr/lib/pkgconfig/glib-2.0.pc ${PREFIX}/lib/pkgconfig/ cp /usr/lib/pkgconfig/gthread-2.0.pc ${PREFIX}/lib/pkgconfig/ fi fi # --------------------------------------------------------------------------------------------------------------------- # fluidsynth if [ ! -d fluidsynth-${FLUIDSYNTH_VERSION} ]; then aria2c https://github.com/FluidSynth/fluidsynth/archive/v${FLUIDSYNTH_VERSION}.tar.gz tar -xf fluidsynth-${FLUIDSYNTH_VERSION}.tar.gz fi if [ ! -f fluidsynth-${FLUIDSYNTH_VERSION}/build-done ]; then cd fluidsynth-${FLUIDSYNTH_VERSION} if [ ! -f patched ]; then patch -p1 -i ../../patches/fluidsynth-skip-drivers-build.patch touch patched fi sed -i "s/3.0.2/2.8.0/" CMakeLists.txt sed -i 's/_init_lib_suffix "64"/_init_lib_suffix ""/' CMakeLists.txt cmake . -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${PREFIX} -DBUILD_SHARED_LIBS=OFF \ -Denable-debug=OFF -Denable-profiling=OFF -Denable-ladspa=OFF -Denable-fpe-check=OFF -Denable-portaudio=OFF \ -Denable-trap-on-fpe=OFF -Denable-aufile=OFF -Denable-dbus=OFF -Denable-ipv6=OFF -Denable-jack=OFF \ -Denable-midishare=OFF -Denable-oss=OFF -Denable-pulseaudio=OFF -Denable-readline=OFF -Denable-ladcca=OFF \ -Denable-lash=OFF -Denable-alsa=OFF -Denable-coreaudio=OFF -Denable-coremidi=OFF -Denable-framework=OFF \ -Denable-floats=ON make ${MAKE_ARGS} make install sed -i -e "s|-lfluidsynth|-lfluidsynth -lglib-2.0 -lgthread-2.0 -lsndfile -lFLAC -lvorbisenc -lvorbis -logg -pthread -lm|" ${PREFIX}/lib/pkgconfig/fluidsynth.pc touch build-done cd .. fi # --------------------------------------------------------------------------------------------------------------------- # mxml if [ ! -d mxml-${MXML_VERSION} ]; then aria2c https://github.com/michaelrsweet/mxml/releases/download/v${MXML_VERSION}/mxml-${MXML_VERSION}.tar.gz tar -xf mxml-${MXML_VERSION}.tar.gz fi if [ ! -f mxml-${MXML_VERSION}/build-done ]; then cd mxml-${MXML_VERSION} ./configure --disable-shared --prefix=$PREFIX make libmxml.a cp *.a $PREFIX/lib/ cp *.pc $PREFIX/lib/pkgconfig/ cp mxml.h $PREFIX/include/ touch build-done cd .. fi # --------------------------------------------------------------------------------------------------------------------- # fftw3 (needs to be last as it modifies C[XX]FLAGS) if [ ! -d fftw-${FFTW3_VERSION} ]; then aria2c http://www.fftw.org/fftw-${FFTW3_VERSION}.tar.gz tar -xf fftw-${FFTW3_VERSION}.tar.gz fi if [ ! -f fftw-${FFTW3_VERSION}/build-done ]; then export CFLAGS="${CFLAGS} -ffast-math" export CXXFLAGS="${CXXFLAGS} -ffast-math" cd fftw-${FFTW3_VERSION} ./configure --enable-static --disable-shared --prefix=${PREFIX} \ --enable-sse2 \ --disable-debug --disable-alloca --disable-fortran \ --with-our-malloc make make install make clean ./configure --enable-static --disable-shared --prefix=${PREFIX} \ --enable-sse2 --enable-sse --enable-single \ --disable-debug --disable-alloca --disable-fortran \ --with-our-malloc make make install make clean touch build-done cd .. fi } # --------------------------------------------------------------------------------------------------------------------- # build base libs export ARCH=32 export TARGET="${1}" build_base if [ x"${TARGET}" != x"32" ]; then export ARCH=64 build_base fi # --------------------------------------------------------------------------------------------------------------------- Carla-2.4.2/data/linux/build-pyqt.sh000077500000000000000000000105531420416754300172540ustar00rootroot00000000000000#!/bin/bash # apt-get install build-essential autoconf libtool cmake libglib2.0-dev libgl1-mesa-dev # --------------------------------------------------------------------------------------------------------------------- # stop on error set -e # --------------------------------------------------------------------------------------------------------------------- # cd to correct path cd $(dirname $0) # --------------------------------------------------------------------------------------------------------------------- # set variables source common.env # --------------------------------------------------------------------------------------------------------------------- # function to remove old stuff cleanup() { rm -rf cx_Freeze-* rm -rf Python-* rm -rf PyQt-* rm -rf PyQt5_* rm -rf pyliblo-* rm -rf sip-* } # --------------------------------------------------------------------------------------------------------------------- # function to build base libs build_pyqt() { export CC=gcc export CXX=g++ export PREFIX=${TARGETDIR}/carla${ARCH} export PATH=${PREFIX}/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin export PKG_CONFIG_PATH=${PREFIX}/lib/pkgconfig export CFLAGS="-O3 -mtune=generic -msse -msse2 -mfpmath=sse -fPIC -DPIC -DNDEBUG -m${ARCH}" export CXXFLAGS="${CFLAGS}" export LDFLAGS="-m${ARCH} -Wl,-O1" # TODO build libffi statically # --------------------------------------------------------------------------------------------------------------------- # python if [ ! -d Python-${PYTHON_VERSION} ]; then aria2c https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz tar -xf Python-${PYTHON_VERSION}.tgz fi if [ ! -f Python-${PYTHON_VERSION}/build-done ]; then cd Python-${PYTHON_VERSION} ./configure --prefix=${PREFIX} make make install touch build-done cd .. fi # --------------------------------------------------------------------------------------------------------------------- # sip if [ ! -d sip-${SIP_VERSION} ]; then aria2c http://sourceforge.net/projects/pyqt/files/sip/sip-${SIP_VERSION}/sip-${SIP_VERSION}.tar.gz tar -xf sip-${SIP_VERSION}.tar.gz fi if [ ! -f sip-${SIP_VERSION}/build-done ]; then cd sip-${SIP_VERSION} python3 configure.py --sip-module PyQt5.sip make ${MAKE_ARGS} make install touch build-done cd .. fi # --------------------------------------------------------------------------------------------------------------------- # pyqt5 if [ ! -d PyQt5_gpl-${PYQT5_VERSION} ]; then aria2c http://sourceforge.net/projects/pyqt/files/PyQt5/PyQt-${PYQT5_VERSION}/PyQt5_gpl-${PYQT5_VERSION}.tar.gz tar -xf PyQt5_gpl-${PYQT5_VERSION}.tar.gz fi if [ ! -f PyQt5_gpl-${PYQT5_VERSION}/build-done ]; then cd PyQt5_gpl-${PYQT5_VERSION} python3 configure.py --confirm-license -c make ${MAKE_ARGS} make install touch build-done cd .. fi # --------------------------------------------------------------------------------------------------------------------- # cxfreeze if [ ! -d cx_Freeze-${CXFREEZE_VERSION} ]; then aria2c https://github.com/anthony-tuininga/cx_Freeze/archive/${CXFREEZE_VERSION}.tar.gz tar -xf cx_Freeze-${CXFREEZE_VERSION}.tar.gz fi if [ ! -f cx_Freeze-${CXFREEZE_VERSION}/build-done ]; then cd cx_Freeze-${CXFREEZE_VERSION} python3 setup.py build python3 setup.py install --prefix=${PREFIX} touch build-done cd .. fi # --------------------------------------------------------------------------------------------------------------------- # pyliblo (needs to be last as it modifies CFLAGS) if [ ! -d pyliblo-${PYLIBLO_VERSION} ]; then aria2c http://das.nasophon.de/download/pyliblo-${PYLIBLO_VERSION}.tar.gz tar -xf pyliblo-${PYLIBLO_VERSION}.tar.gz fi if [ ! -f pyliblo-${PYLIBLO_VERSION}/build-done ]; then cd pyliblo-${PYLIBLO_VERSION} if [ ! -f patched ]; then patch -p1 -i ../../patches/pyliblo-python3.7.patch touch patched fi export CFLAGS="${CFLAGS} -I${PREFIX}/include -L${PREFIX}/lib" python3 setup.py build python3 setup.py install --prefix=${PREFIX} touch build-done cd .. fi } # --------------------------------------------------------------------------------------------------------------------- # build base libs export TARGET="${1}" if [ x"${TARGET}" = x"32" ]; then export ARCH=32 else export ARCH=64 fi build_pyqt # --------------------------------------------------------------------------------------------------------------------- Carla-2.4.2/data/linux/build64.sh000077500000000000000000000027371420416754300164400ustar00rootroot00000000000000#!/bin/bash # --------------------------------------------------------------------------------------------------------------------- # stop on error set -e # --------------------------------------------------------------------------------------------------------------------- # cd to correct path if [ ! -f Makefile ]; then cd $(dirname $0)/../.. fi # --------------------------------------------------------------------------------------------------------------------- # set variables source data/linux/common.env MAKE_ARGS="${MAKE_ARGS} HAVE_FFMPEG=false HAVE_PULSEAUDIO=false EXTERNAL_PLUGINS=false" export LINUX="true" export CC=gcc export CXX=g++ unset CPPFLAGS # --------------------------------------------------------------------------------------------------------------------- # Complete 64bit build export CFLAGS="-I${TARGETDIR}/carla64/include -m64" export CXXFLAGS=${CFLAGS} export LDFLAGS="-L${TARGETDIR}/carla64/lib -m64" export PKG_CONFIG_PATH=${TARGETDIR}/carla64/lib/pkgconfig make ${MAKE_ARGS} # --------------------------------------------------------------------------------------------------------------------- # Build 32bit bridges export CFLAGS="-I${TARGETDIR}/carla32/include -m32" export CXXFLAGS=${CFLAGS} export LDFLAGS="-L${TARGETDIR}/carla32/lib -m32" export PKG_CONFIG_PATH=${TARGETDIR}/carla32/lib/pkgconfig make posix32 ${MAKE_ARGS} # --------------------------------------------------------------------------------------------------------------------- Carla-2.4.2/data/linux/common.env000066400000000000000000000006761420416754300166320ustar00rootroot00000000000000#!/bin/bash PKG_CONFIG_VERSION=0.28 LIBLO_VERSION=0.30 ZLIB_VERSION=1.2.11 FILE_VERSION=5.34 LIBOGG_VERSION=1.3.4 LIBVORBIS_VERSION=1.3.6 FLAC_VERSION=1.3.2 LIBSNDFILE_VERSION=1.0.28 FLUIDSYNTH_VERSION=1.1.11 MXML_VERSION=2.12 FFTW3_VERSION=3.3.8 QT5_VERSION=5.9.8 QT5_MVERSION=5.9 PYTHON_VERSION=3.7.3 SIP_VERSION=4.19.13 PYLIBLO_VERSION=0.9.2 PYQT5_VERSION=5.11.3 CXFREEZE_VERSION=6.0 MAKE_ARGS="-j 1 USING_JUCE=false" TARGETDIR=$HOME/builds Carla-2.4.2/data/lv2-bundles/000077500000000000000000000000001420416754300156155ustar00rootroot00000000000000Carla-2.4.2/data/lv2-bundles/audiogain/000077500000000000000000000000001420416754300175555ustar00rootroot00000000000000Carla-2.4.2/data/lv2-bundles/audiogain/audiogain.ttl000066400000000000000000000040341420416754300222430ustar00rootroot00000000000000@prefix doap: . @prefix foaf: . @prefix lv2: . @prefix opts: . @prefix unit: . a lv2:UtilityPlugin, lv2:Plugin ; lv2:optionalFeature ; lv2:requiredFeature , , ; lv2:extensionData ; lv2:extensionData ; opts:supportedOption , , ; lv2:port [ a lv2:InputPort, lv2:ControlPort ; lv2:index 0 ; lv2:symbol "lv2_freewheel" ; lv2:name "Freewheel" ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; lv2:designation ; lv2:portProperty lv2:toggled, ; ] ; lv2:port [ a lv2:InputPort, lv2:AudioPort ; lv2:index 1 ; lv2:symbol "lv2_audio_in_1" ; lv2:name "Audio Input 1" ; ] ; lv2:port [ a lv2:OutputPort, lv2:AudioPort ; lv2:index 2 ; lv2:symbol "lv2_audio_out_1" ; lv2:name "Audio Output 1" ; ] ; lv2:port [ a lv2:InputPort, lv2:ControlPort ; lv2:index 3 ; lv2:symbol "gain" ; lv2:name "Gain" ; lv2:default 1.000000 ; lv2:minimum 0.000000 ; lv2:maximum 4.000000 ; unit:unit unit:coef ; ] ; doap:name "Audio Gain (Mono)" ; doap:maintainer [ foaf:name "falkTX" ] . Carla-2.4.2/data/lv2-bundles/audiogain/audiogain_s.ttl000066400000000000000000000055531420416754300225740ustar00rootroot00000000000000@prefix doap: . @prefix foaf: . @prefix lv2: . @prefix opts: . @prefix unit: . a lv2:UtilityPlugin, lv2:Plugin ; lv2:optionalFeature ; lv2:requiredFeature , , ; lv2:extensionData ; lv2:extensionData ; opts:supportedOption , , ; lv2:port [ a lv2:InputPort, lv2:ControlPort ; lv2:index 0 ; lv2:symbol "lv2_freewheel" ; lv2:name "Freewheel" ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; lv2:designation ; lv2:portProperty lv2:toggled, ; ] ; lv2:port [ a lv2:InputPort, lv2:AudioPort ; lv2:index 1 ; lv2:symbol "lv2_audio_in_1" ; lv2:name "Audio Input 1" ; ] , [ a lv2:InputPort, lv2:AudioPort ; lv2:index 2 ; lv2:symbol "lv2_audio_in_2" ; lv2:name "Audio Input 2" ; ] ; lv2:port [ a lv2:OutputPort, lv2:AudioPort ; lv2:index 3 ; lv2:symbol "lv2_audio_out_1" ; lv2:name "Audio Output 1" ; ] , [ a lv2:OutputPort, lv2:AudioPort ; lv2:index 4 ; lv2:symbol "lv2_audio_out_2" ; lv2:name "Audio Output 2" ; ] ; lv2:port [ a lv2:InputPort, lv2:ControlPort ; lv2:index 5 ; lv2:symbol "gain" ; lv2:name "Gain" ; lv2:default 1.000000 ; lv2:minimum 0.000000 ; lv2:maximum 4.000000 ; unit:unit unit:coef ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 6 ; lv2:symbol "apply_left" ; lv2:name "Apply Left" ; lv2:default 1.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 7 ; lv2:symbol "apply_right" ; lv2:name "Apply Right" ; lv2:default 1.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; ] ; doap:name "Audio Gain (Stereo)" ; doap:maintainer [ foaf:name "falkTX" ] . Carla-2.4.2/data/lv2-bundles/audiogain/manifest.ttl000066400000000000000000000005641420416754300221150ustar00rootroot00000000000000@prefix lv2: . @prefix rdfs: . a lv2:Plugin ; lv2:binary ; rdfs:seeAlso . a lv2:Plugin ; lv2:binary ; rdfs:seeAlso . Carla-2.4.2/data/lv2-bundles/files/000077500000000000000000000000001420416754300167175ustar00rootroot00000000000000Carla-2.4.2/data/lv2-bundles/files/audiofile.ttl000066400000000000000000000147221420416754300214130ustar00rootroot00000000000000@prefix atom: . @prefix doap: . @prefix foaf: . @prefix lv2: . @prefix opts: . @prefix patch: . @prefix rdfs: . @prefix unit: . a lv2:UtilityPlugin, lv2:Plugin ; lv2:optionalFeature ; lv2:optionalFeature ; lv2:optionalFeature ; lv2:requiredFeature , , , ; lv2:extensionData ; lv2:extensionData ; lv2:extensionData ; lv2:extensionData ; lv2:extensionData ; opts:supportedOption , , ; lv2:port [ a lv2:InputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; atom:supports ; lv2:designation lv2:control ; lv2:index 0 ; lv2:symbol "lv2_events_in" ; lv2:name "Events Input" ; ] ; patch:writable ; patch:readable ; lv2:port [ a lv2:OutputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 1 ; lv2:symbol "lv2_events_out" ; lv2:name "Events Output" ; ] ; lv2:port [ a lv2:InputPort, lv2:ControlPort ; lv2:index 2 ; lv2:symbol "lv2_freewheel" ; lv2:name "Freewheel" ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; lv2:designation ; lv2:portProperty lv2:toggled, ; ] ; lv2:port [ a lv2:OutputPort, lv2:AudioPort ; lv2:index 3 ; lv2:symbol "lv2_audio_out_1" ; lv2:name "Audio Output 1" ; ] , [ a lv2:OutputPort, lv2:AudioPort ; lv2:index 4 ; lv2:symbol "lv2_audio_out_2" ; lv2:name "Audio Output 2" ; ] ; lv2:port [ a lv2:InputPort, lv2:ControlPort ; lv2:index 5 ; lv2:symbol "loop_mode" ; lv2:name "Loop Mode" ; lv2:default 1.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 6 ; lv2:symbol "host_sync" ; lv2:name "Host Sync" ; lv2:default 1.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 7 ; lv2:symbol "volume" ; lv2:name "Volume" ; lv2:default 100.000000 ; lv2:minimum 0.000000 ; lv2:maximum 127.000000 ; unit:unit [ a unit:Unit ; rdfs:label "%" ; unit:symbol "%" ; unit:render "%f %" ; ] ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 8 ; lv2:symbol "enabled" ; lv2:name "Enabled" ; lv2:default 1.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; ] , [ a lv2:OutputPort, lv2:ControlPort ; lv2:index 9 ; lv2:symbol "num_channels" ; lv2:name "Num Channels" ; lv2:minimum 0.000000 ; lv2:maximum 2.000000 ; lv2:portProperty lv2:integer ; ] , [ a lv2:OutputPort, lv2:ControlPort ; lv2:index 10 ; lv2:symbol "bit_rate" ; lv2:name "Bit Rate" ; lv2:minimum -1.000000 ; lv2:maximum 49152000.000000 ; lv2:portProperty lv2:integer ; ] , [ a lv2:OutputPort, lv2:ControlPort ; lv2:index 11 ; lv2:symbol "bit_depth" ; lv2:name "Bit Depth" ; lv2:minimum 0.000000 ; lv2:maximum 64.000000 ; lv2:portProperty lv2:integer ; ] , [ a lv2:OutputPort, lv2:ControlPort ; lv2:index 12 ; lv2:symbol "sample_rate" ; lv2:name "Sample Rate" ; lv2:minimum 0.000000 ; lv2:maximum 384000.000000 ; lv2:portProperty lv2:integer ; ] , [ a lv2:OutputPort, lv2:ControlPort ; lv2:index 13 ; lv2:symbol "length" ; lv2:name "Length" ; lv2:minimum 0.000000 ; lv2:maximum 9223372036854775808.000000 ; unit:unit [ a unit:Unit ; rdfs:label "s" ; unit:symbol "s" ; unit:render "%f s" ; ] ; ] , [ a lv2:OutputPort, lv2:ControlPort ; lv2:index 14 ; lv2:symbol "position" ; lv2:name "Position" ; lv2:minimum 0.000000 ; lv2:maximum 100.000000 ; unit:unit [ a unit:Unit ; rdfs:label "%" ; unit:symbol "%" ; unit:render "%f %" ; ] ; ] , [ a lv2:OutputPort, lv2:ControlPort ; lv2:index 15 ; lv2:symbol "pool_fill" ; lv2:name "Pool Fill" ; lv2:minimum 0.000000 ; lv2:maximum 100.000000 ; unit:unit [ a unit:Unit ; rdfs:label "%" ; unit:symbol "%" ; unit:render "%f %" ; ] ; ] ; doap:license ; doap:name "Audio File" ; doap:developer [ foaf:name "falkTX" ] ; doap:maintainer [ foaf:name "falkTX" ] ; lv2:microVersion 22 ; lv2:minorVersion 149 ; lv2:symbol "audiofile" . Carla-2.4.2/data/lv2-bundles/files/manifest.ttl000066400000000000000000000021501420416754300212500ustar00rootroot00000000000000@prefix atom: . @prefix lv2: . @prefix mod: . @prefix opts: . @prefix rdfs: . @prefix ui: . a lv2:Plugin ; lv2:binary ; rdfs:seeAlso . a lv2:Plugin ; lv2:binary ; rdfs:seeAlso . a lv2:Parameter ; rdfs:label "file" ; rdfs:range atom:Path . a lv2:Parameter ; mod:fileTypes "audioloop,audiorecording,audiotrack" ; rdfs:label "audio file" ; rdfs:range atom:Path . a lv2:Parameter ; mod:fileTypes "midisong" ; rdfs:label "midi file" ; rdfs:range atom:Path . a lv2:Parameter ; rdfs:label "preview" ; rdfs:range atom:Vector . Carla-2.4.2/data/lv2-bundles/files/midifile.ttl000066400000000000000000000105661420416754300212360ustar00rootroot00000000000000@prefix atom: . @prefix doap: . @prefix foaf: . @prefix lv2: . @prefix opts: . @prefix patch: . a lv2:UtilityPlugin, lv2:Plugin ; lv2:optionalFeature ; lv2:optionalFeature ; lv2:requiredFeature , , ; lv2:extensionData ; lv2:extensionData ; lv2:extensionData ; lv2:extensionData ; opts:supportedOption , , ; lv2:port [ a lv2:InputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; atom:supports ; lv2:designation lv2:control ; lv2:index 0 ; lv2:symbol "lv2_events_in" ; lv2:name "Events Input" ; ] ; patch:writable ; lv2:port [ a lv2:OutputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; atom:supports ; lv2:index 1 ; lv2:symbol "lv2_events_out" ; lv2:name "Events Output" ; ] ; lv2:port [ a lv2:InputPort, lv2:ControlPort ; lv2:index 2 ; lv2:symbol "lv2_freewheel" ; lv2:name "Freewheel" ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; lv2:designation ; lv2:portProperty lv2:toggled, ; ] ; lv2:port [ a lv2:InputPort, lv2:ControlPort ; lv2:index 3 ; lv2:symbol "repeat_mode" ; lv2:name "Repeat Mode" ; lv2:default 0.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 4 ; lv2:symbol "host_sync" ; lv2:name "Host Sync" ; lv2:default 1.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 5 ; lv2:symbol "enabled" ; lv2:name "Enabled" ; lv2:default 1.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; ] , [ a lv2:OutputPort, lv2:ControlPort ; lv2:index 6 ; lv2:symbol "num_tracks" ; lv2:name "Num Tracks" ; lv2:minimum 0.000000 ; lv2:maximum 256.000000 ; lv2:portProperty lv2:integer ; ] , [ a lv2:OutputPort, lv2:ControlPort ; lv2:index 7 ; lv2:symbol "length" ; lv2:name "Length" ; lv2:minimum 0.000000 ; lv2:maximum 9223372036854775808.000000 ; unit:unit [ a unit:Unit ; rdfs:label "s" ; unit:symbol "s" ; unit:render "%f s" ; ] ; ] , [ a lv2:OutputPort, lv2:ControlPort ; lv2:index 8 ; lv2:symbol "position" ; lv2:name "Position" ; lv2:minimum 0.000000 ; lv2:maximum 100.000000 ; unit:unit [ a unit:Unit ; rdfs:label "%" ; unit:symbol "%" ; unit:render "%f %" ; ] ; ] ; doap:license ; doap:name "MIDI File" ; doap:developer [ foaf:name "falkTX" ] ; doap:maintainer [ foaf:name "falkTX" ] ; lv2:microVersion 22 ; lv2:minorVersion 149 ; lv2:symbol "midifile" . Carla-2.4.2/data/lv2-bundles/miditools/000077500000000000000000000000001420416754300176205ustar00rootroot00000000000000Carla-2.4.2/data/lv2-bundles/miditools/manifest.ttl000066400000000000000000000020361420416754300221540ustar00rootroot00000000000000@prefix lv2: . @prefix rdfs: . a lv2:Plugin ; lv2:binary ; rdfs:seeAlso . a lv2:Plugin ; lv2:binary ; rdfs:seeAlso . a lv2:Plugin ; lv2:binary ; rdfs:seeAlso . a lv2:Plugin ; lv2:binary ; rdfs:seeAlso . a lv2:Plugin ; lv2:binary ; rdfs:seeAlso . a lv2:Plugin ; lv2:binary ; rdfs:seeAlso . a lv2:Plugin ; lv2:binary ; rdfs:seeAlso . Carla-2.4.2/data/lv2-bundles/miditools/midichanab.ttl000066400000000000000000000245021420416754300224270ustar00rootroot00000000000000@prefix atom: . @prefix doap: . @prefix foaf: . @prefix lv2: . @prefix opts: . @prefix patch: . @prefix rdf: . @prefix rdfs: . @prefix ui: . @prefix unit: . a lv2:UtilityPlugin, lv2:Plugin ; lv2:optionalFeature ; lv2:requiredFeature , , ; lv2:extensionData ; lv2:extensionData ; opts:supportedOption , , ; lv2:port [ a lv2:InputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:designation lv2:control ; lv2:index 0 ; lv2:symbol "lv2_midi_in" ; lv2:name "MIDI Input" ; ] ; lv2:port [ a lv2:OutputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 1 ; lv2:symbol "lv2_midi_out_1" ; lv2:name "MIDI Output #1" ; ] ; lv2:port [ a lv2:OutputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 2 ; lv2:symbol "lv2_midi_out_2" ; lv2:name "MIDI Output #2" ; ] ; lv2:port [ a lv2:InputPort, lv2:ControlPort ; lv2:index 3 ; lv2:symbol "lv2_freewheel" ; lv2:name "Freewheel" ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; lv2:designation ; lv2:portProperty lv2:toggled, ; ] ; lv2:port [ a lv2:InputPort, lv2:ControlPort ; lv2:index 4 ; lv2:symbol "_1" ; lv2:name "1" ; lv2:default 0.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; lv2:portProperty lv2:enumeration ; lv2:scalePoint [ rdfs:label "Output A" ; rdf:value 0.000000 ] , [ rdfs:label "Output B" ; rdf:value 1.000000 ] ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 5 ; lv2:symbol "_2" ; lv2:name "2" ; lv2:default 0.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; lv2:portProperty lv2:enumeration ; lv2:scalePoint [ rdfs:label "Output A" ; rdf:value 0.000000 ] , [ rdfs:label "Output B" ; rdf:value 1.000000 ] ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 6 ; lv2:symbol "_3" ; lv2:name "3" ; lv2:default 0.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; lv2:portProperty lv2:enumeration ; lv2:scalePoint [ rdfs:label "Output A" ; rdf:value 0.000000 ] , [ rdfs:label "Output B" ; rdf:value 1.000000 ] ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 7 ; lv2:symbol "_4" ; lv2:name "4" ; lv2:default 0.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; lv2:portProperty lv2:enumeration ; lv2:scalePoint [ rdfs:label "Output A" ; rdf:value 0.000000 ] , [ rdfs:label "Output B" ; rdf:value 1.000000 ] ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 8 ; lv2:symbol "_5" ; lv2:name "5" ; lv2:default 0.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; lv2:portProperty lv2:enumeration ; lv2:scalePoint [ rdfs:label "Output A" ; rdf:value 0.000000 ] , [ rdfs:label "Output B" ; rdf:value 1.000000 ] ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 9 ; lv2:symbol "_6" ; lv2:name "6" ; lv2:default 0.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; lv2:portProperty lv2:enumeration ; lv2:scalePoint [ rdfs:label "Output A" ; rdf:value 0.000000 ] , [ rdfs:label "Output B" ; rdf:value 1.000000 ] ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 10 ; lv2:symbol "_7" ; lv2:name "7" ; lv2:default 0.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; lv2:portProperty lv2:enumeration ; lv2:scalePoint [ rdfs:label "Output A" ; rdf:value 0.000000 ] , [ rdfs:label "Output B" ; rdf:value 1.000000 ] ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 11 ; lv2:symbol "_8" ; lv2:name "8" ; lv2:default 0.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; lv2:portProperty lv2:enumeration ; lv2:scalePoint [ rdfs:label "Output A" ; rdf:value 0.000000 ] , [ rdfs:label "Output B" ; rdf:value 1.000000 ] ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 12 ; lv2:symbol "_9" ; lv2:name "9" ; lv2:default 0.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; lv2:portProperty lv2:enumeration ; lv2:scalePoint [ rdfs:label "Output A" ; rdf:value 0.000000 ] , [ rdfs:label "Output B" ; rdf:value 1.000000 ] ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 13 ; lv2:symbol "_10" ; lv2:name "10" ; lv2:default 0.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; lv2:portProperty lv2:enumeration ; lv2:scalePoint [ rdfs:label "Output A" ; rdf:value 0.000000 ] , [ rdfs:label "Output B" ; rdf:value 1.000000 ] ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 14 ; lv2:symbol "_11" ; lv2:name "11" ; lv2:default 0.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; lv2:portProperty lv2:enumeration ; lv2:scalePoint [ rdfs:label "Output A" ; rdf:value 0.000000 ] , [ rdfs:label "Output B" ; rdf:value 1.000000 ] ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 15 ; lv2:symbol "_12" ; lv2:name "12" ; lv2:default 0.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; lv2:portProperty lv2:enumeration ; lv2:scalePoint [ rdfs:label "Output A" ; rdf:value 0.000000 ] , [ rdfs:label "Output B" ; rdf:value 1.000000 ] ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 16 ; lv2:symbol "_13" ; lv2:name "13" ; lv2:default 0.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; lv2:portProperty lv2:enumeration ; lv2:scalePoint [ rdfs:label "Output A" ; rdf:value 0.000000 ] , [ rdfs:label "Output B" ; rdf:value 1.000000 ] ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 17 ; lv2:symbol "_14" ; lv2:name "14" ; lv2:default 0.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; lv2:portProperty lv2:enumeration ; lv2:scalePoint [ rdfs:label "Output A" ; rdf:value 0.000000 ] , [ rdfs:label "Output B" ; rdf:value 1.000000 ] ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 18 ; lv2:symbol "_15" ; lv2:name "15" ; lv2:default 0.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; lv2:portProperty lv2:enumeration ; lv2:scalePoint [ rdfs:label "Output A" ; rdf:value 0.000000 ] , [ rdfs:label "Output B" ; rdf:value 1.000000 ] ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 19 ; lv2:symbol "_16" ; lv2:name "16" ; lv2:default 0.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; lv2:portProperty lv2:enumeration ; lv2:scalePoint [ rdfs:label "Output A" ; rdf:value 0.000000 ] , [ rdfs:label "Output B" ; rdf:value 1.000000 ] ; ] ; doap:name "MIDI Channel A/B" ; doap:maintainer [ foaf:name "Milk Brewster" ] . Carla-2.4.2/data/lv2-bundles/miditools/midichanfilter.ttl000066400000000000000000000236001420416754300233300ustar00rootroot00000000000000@prefix atom: . @prefix doap: . @prefix foaf: . @prefix lv2: . @prefix opts: . @prefix patch: . @prefix rdf: . @prefix rdfs: . @prefix ui: . @prefix unit: . a lv2:UtilityPlugin, lv2:Plugin ; lv2:optionalFeature ; lv2:requiredFeature , , ; lv2:extensionData ; lv2:extensionData ; opts:supportedOption , , ; lv2:port [ a lv2:InputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:designation lv2:control ; lv2:index 0 ; lv2:symbol "lv2_midi_in" ; lv2:name "MIDI Input" ; ] ; lv2:port [ a lv2:OutputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 1 ; lv2:symbol "lv2_midi_out" ; lv2:name "MIDI Output" ; ] ; lv2:port [ a lv2:InputPort, lv2:ControlPort ; lv2:index 2 ; lv2:symbol "lv2_freewheel" ; lv2:name "Freewheel" ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; lv2:designation ; lv2:portProperty lv2:toggled, ; ] ; lv2:port [ a lv2:InputPort, lv2:ControlPort ; lv2:index 3 ; lv2:symbol "_1" ; lv2:name "1" ; lv2:default 1.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; lv2:portProperty lv2:enumeration ; lv2:scalePoint [ rdfs:label "Off" ; rdf:value 0.000000 ] , [ rdfs:label "On" ; rdf:value 1.000000 ] ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 4 ; lv2:symbol "_2" ; lv2:name "2" ; lv2:default 1.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; lv2:portProperty lv2:enumeration ; lv2:scalePoint [ rdfs:label "Off" ; rdf:value 0.000000 ] , [ rdfs:label "On" ; rdf:value 1.000000 ] ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 5 ; lv2:symbol "_3" ; lv2:name "3" ; lv2:default 1.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; lv2:portProperty lv2:enumeration ; lv2:scalePoint [ rdfs:label "Off" ; rdf:value 0.000000 ] , [ rdfs:label "On" ; rdf:value 1.000000 ] ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 6 ; lv2:symbol "_4" ; lv2:name "4" ; lv2:default 1.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; lv2:portProperty lv2:enumeration ; lv2:scalePoint [ rdfs:label "Off" ; rdf:value 0.000000 ] , [ rdfs:label "On" ; rdf:value 1.000000 ] ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 7 ; lv2:symbol "_5" ; lv2:name "5" ; lv2:default 1.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; lv2:portProperty lv2:enumeration ; lv2:scalePoint [ rdfs:label "Off" ; rdf:value 0.000000 ] , [ rdfs:label "On" ; rdf:value 1.000000 ] ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 8 ; lv2:symbol "_6" ; lv2:name "6" ; lv2:default 1.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; lv2:portProperty lv2:enumeration ; lv2:scalePoint [ rdfs:label "Off" ; rdf:value 0.000000 ] , [ rdfs:label "On" ; rdf:value 1.000000 ] ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 9 ; lv2:symbol "_7" ; lv2:name "7" ; lv2:default 1.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; lv2:portProperty lv2:enumeration ; lv2:scalePoint [ rdfs:label "Off" ; rdf:value 0.000000 ] , [ rdfs:label "On" ; rdf:value 1.000000 ] ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 10 ; lv2:symbol "_8" ; lv2:name "8" ; lv2:default 1.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; lv2:portProperty lv2:enumeration ; lv2:scalePoint [ rdfs:label "Off" ; rdf:value 0.000000 ] , [ rdfs:label "On" ; rdf:value 1.000000 ] ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 11 ; lv2:symbol "_9" ; lv2:name "9" ; lv2:default 1.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; lv2:portProperty lv2:enumeration ; lv2:scalePoint [ rdfs:label "Off" ; rdf:value 0.000000 ] , [ rdfs:label "On" ; rdf:value 1.000000 ] ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 12 ; lv2:symbol "_10" ; lv2:name "10" ; lv2:default 1.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; lv2:portProperty lv2:enumeration ; lv2:scalePoint [ rdfs:label "Off" ; rdf:value 0.000000 ] , [ rdfs:label "On" ; rdf:value 1.000000 ] ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 13 ; lv2:symbol "_11" ; lv2:name "11" ; lv2:default 1.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; lv2:portProperty lv2:enumeration ; lv2:scalePoint [ rdfs:label "Off" ; rdf:value 0.000000 ] , [ rdfs:label "On" ; rdf:value 1.000000 ] ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 14 ; lv2:symbol "_12" ; lv2:name "12" ; lv2:default 1.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; lv2:portProperty lv2:enumeration ; lv2:scalePoint [ rdfs:label "Off" ; rdf:value 0.000000 ] , [ rdfs:label "On" ; rdf:value 1.000000 ] ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 15 ; lv2:symbol "_13" ; lv2:name "13" ; lv2:default 1.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; lv2:portProperty lv2:enumeration ; lv2:scalePoint [ rdfs:label "Off" ; rdf:value 0.000000 ] , [ rdfs:label "On" ; rdf:value 1.000000 ] ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 16 ; lv2:symbol "_14" ; lv2:name "14" ; lv2:default 1.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; lv2:portProperty lv2:enumeration ; lv2:scalePoint [ rdfs:label "Off" ; rdf:value 0.000000 ] , [ rdfs:label "On" ; rdf:value 1.000000 ] ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 17 ; lv2:symbol "_15" ; lv2:name "15" ; lv2:default 1.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; lv2:portProperty lv2:enumeration ; lv2:scalePoint [ rdfs:label "Off" ; rdf:value 0.000000 ] , [ rdfs:label "On" ; rdf:value 1.000000 ] ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 18 ; lv2:symbol "_16" ; lv2:name "16" ; lv2:default 1.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; lv2:portProperty lv2:enumeration ; lv2:scalePoint [ rdfs:label "Off" ; rdf:value 0.000000 ] , [ rdfs:label "On" ; rdf:value 1.000000 ] ; ] ; doap:name "MIDI Channel Filter" ; doap:maintainer [ foaf:name "falkTX" ] . Carla-2.4.2/data/lv2-bundles/miditools/midichannelize.ttl000066400000000000000000000050611420416754300233320ustar00rootroot00000000000000@prefix atom: . @prefix doap: . @prefix foaf: . @prefix lv2: . @prefix opts: . @prefix patch: . @prefix rdf: . @prefix rdfs: . @prefix ui: . @prefix unit: . a lv2:UtilityPlugin, lv2:Plugin ; lv2:optionalFeature ; lv2:requiredFeature , , ; lv2:extensionData ; lv2:extensionData ; opts:supportedOption , , ; lv2:port [ a lv2:InputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:designation lv2:control ; lv2:index 0 ; lv2:symbol "lv2_midi_in" ; lv2:name "MIDI Input" ; ] ; lv2:port [ a lv2:OutputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 1 ; lv2:symbol "lv2_midi_out" ; lv2:name "MIDI Output" ; ] ; lv2:port [ a lv2:InputPort, lv2:ControlPort ; lv2:index 2 ; lv2:symbol "lv2_freewheel" ; lv2:name "Freewheel" ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; lv2:designation ; lv2:portProperty lv2:toggled, ; ] ; lv2:port [ a lv2:InputPort, lv2:ControlPort ; lv2:index 3 ; lv2:symbol "channel" ; lv2:name "Channel" ; lv2:default 1.000000 ; lv2:minimum 1.000000 ; lv2:maximum 16.000000 ; lv2:portProperty lv2:integer ; ] ; doap:name "MIDI Channelize" ; doap:maintainer [ foaf:name "falkTX" ] . Carla-2.4.2/data/lv2-bundles/miditools/midigain.ttl000066400000000000000000000064641420416754300221400ustar00rootroot00000000000000@prefix atom: . @prefix doap: . @prefix foaf: . @prefix lv2: . @prefix opts: . @prefix patch: . @prefix rdf: . @prefix rdfs: . @prefix ui: . @prefix unit: . a lv2:UtilityPlugin, lv2:Plugin ; lv2:optionalFeature ; lv2:requiredFeature , , ; lv2:extensionData ; lv2:extensionData ; opts:supportedOption , , ; lv2:port [ a lv2:InputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:designation lv2:control ; lv2:index 0 ; lv2:symbol "lv2_midi_in" ; lv2:name "MIDI Input" ; ] ; lv2:port [ a lv2:OutputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 1 ; lv2:symbol "lv2_midi_out" ; lv2:name "MIDI Output" ; ] ; lv2:port [ a lv2:InputPort, lv2:ControlPort ; lv2:index 2 ; lv2:symbol "lv2_freewheel" ; lv2:name "Freewheel" ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; lv2:designation ; lv2:portProperty lv2:toggled, ; ] ; lv2:port [ a lv2:InputPort, lv2:ControlPort ; lv2:index 3 ; lv2:symbol "gain" ; lv2:name "Gain" ; lv2:default 1.000000 ; lv2:minimum 0.001000 ; lv2:maximum 4.000000 ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 4 ; lv2:symbol "apply_notes" ; lv2:name "Apply Notes" ; lv2:default 1.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 5 ; lv2:symbol "apply_aftertouch" ; lv2:name "Apply Aftertouch" ; lv2:default 1.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 6 ; lv2:symbol "apply_cc" ; lv2:name "Apply CC" ; lv2:default 0.000000 ; lv2:minimum 0.000000 ; lv2:maximum 1.000000 ; lv2:portProperty lv2:toggled ; ] ; doap:name "MIDI Gain" ; doap:maintainer [ foaf:name "falkTX" ] . Carla-2.4.2/data/lv2-bundles/miditools/midijoin.ttl000066400000000000000000000137511420416754300221560ustar00rootroot00000000000000@prefix atom: . @prefix doap: . @prefix foaf: . @prefix lv2: . @prefix opts: . @prefix patch: . @prefix rdf: . @prefix rdfs: . @prefix ui: . @prefix unit: . a lv2:UtilityPlugin, lv2:Plugin ; lv2:optionalFeature ; lv2:requiredFeature , , ; lv2:extensionData ; lv2:extensionData ; opts:supportedOption , , ; lv2:port [ a lv2:InputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:designation lv2:control ; lv2:index 0 ; lv2:symbol "lv2_midi_in_1" ; lv2:name "MIDI Input #1" ; ] ; lv2:port [ a lv2:InputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 1 ; lv2:symbol "lv2_midi_in_2" ; lv2:name "MIDI Input #2" ; ] , [ a lv2:InputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 2 ; lv2:symbol "lv2_midi_in_3" ; lv2:name "MIDI Input #3" ; ] , [ a lv2:InputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 3 ; lv2:symbol "lv2_midi_in_4" ; lv2:name "MIDI Input #4" ; ] , [ a lv2:InputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 4 ; lv2:symbol "lv2_midi_in_5" ; lv2:name "MIDI Input #5" ; ] , [ a lv2:InputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 5 ; lv2:symbol "lv2_midi_in_6" ; lv2:name "MIDI Input #6" ; ] , [ a lv2:InputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 6 ; lv2:symbol "lv2_midi_in_7" ; lv2:name "MIDI Input #7" ; ] , [ a lv2:InputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 7 ; lv2:symbol "lv2_midi_in_8" ; lv2:name "MIDI Input #8" ; ] , [ a lv2:InputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 8 ; lv2:symbol "lv2_midi_in_9" ; lv2:name "MIDI Input #9" ; ] , [ a lv2:InputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 9 ; lv2:symbol "lv2_midi_in_10" ; lv2:name "MIDI Input #10" ; ] , [ a lv2:InputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 10 ; lv2:symbol "lv2_midi_in_11" ; lv2:name "MIDI Input #11" ; ] , [ a lv2:InputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 11 ; lv2:symbol "lv2_midi_in_12" ; lv2:name "MIDI Input #12" ; ] , [ a lv2:InputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 12 ; lv2:symbol "lv2_midi_in_13" ; lv2:name "MIDI Input #13" ; ] , [ a lv2:InputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 13 ; lv2:symbol "lv2_midi_in_14" ; lv2:name "MIDI Input #14" ; ] , [ a lv2:InputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 14 ; lv2:symbol "lv2_midi_in_15" ; lv2:name "MIDI Input #15" ; ] , [ a lv2:InputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 15 ; lv2:symbol "lv2_midi_in_16" ; lv2:name "MIDI Input #16" ; ] ; lv2:port [ a lv2:OutputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 16 ; lv2:symbol "lv2_midi_out" ; lv2:name "MIDI Output" ; ] ; lv2:port [ a lv2:InputPort, lv2:ControlPort ; lv2:index 17 ; lv2:symbol "lv2_freewheel" ; lv2:name "Freewheel" ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; lv2:designation ; lv2:portProperty lv2:toggled, ; ] ; doap:name "MIDI Join" ; doap:maintainer [ foaf:name "falkTX" ] . Carla-2.4.2/data/lv2-bundles/miditools/midisplit.ttl000066400000000000000000000140301420416754300223410ustar00rootroot00000000000000@prefix atom: . @prefix doap: . @prefix foaf: . @prefix lv2: . @prefix opts: . @prefix patch: . @prefix rdf: . @prefix rdfs: . @prefix ui: . @prefix unit: . a lv2:UtilityPlugin, lv2:Plugin ; lv2:optionalFeature ; lv2:requiredFeature , , ; lv2:extensionData ; lv2:extensionData ; opts:supportedOption , , ; lv2:port [ a lv2:InputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:designation lv2:control ; lv2:index 0 ; lv2:symbol "lv2_midi_in" ; lv2:name "MIDI Input" ; ] ; lv2:port [ a lv2:OutputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 1 ; lv2:symbol "lv2_midi_out_1" ; lv2:name "MIDI Output #1" ; ] ; lv2:port [ a lv2:OutputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 2 ; lv2:symbol "lv2_midi_out_2" ; lv2:name "MIDI Output #2" ; ] , [ a lv2:OutputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 3 ; lv2:symbol "lv2_midi_out_3" ; lv2:name "MIDI Output #3" ; ] , [ a lv2:OutputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 4 ; lv2:symbol "lv2_midi_out_4" ; lv2:name "MIDI Output #4" ; ] , [ a lv2:OutputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 5 ; lv2:symbol "lv2_midi_out_5" ; lv2:name "MIDI Output #5" ; ] , [ a lv2:OutputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 6 ; lv2:symbol "lv2_midi_out_6" ; lv2:name "MIDI Output #6" ; ] , [ a lv2:OutputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 7 ; lv2:symbol "lv2_midi_out_7" ; lv2:name "MIDI Output #7" ; ] , [ a lv2:OutputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 8 ; lv2:symbol "lv2_midi_out_8" ; lv2:name "MIDI Output #8" ; ] , [ a lv2:OutputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 9 ; lv2:symbol "lv2_midi_out_9" ; lv2:name "MIDI Output #9" ; ] , [ a lv2:OutputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 10 ; lv2:symbol "lv2_midi_out_10" ; lv2:name "MIDI Output #10" ; ] , [ a lv2:OutputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 11 ; lv2:symbol "lv2_midi_out_11" ; lv2:name "MIDI Output #11" ; ] , [ a lv2:OutputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 12 ; lv2:symbol "lv2_midi_out_12" ; lv2:name "MIDI Output #12" ; ] , [ a lv2:OutputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 13 ; lv2:symbol "lv2_midi_out_13" ; lv2:name "MIDI Output #13" ; ] , [ a lv2:OutputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 14 ; lv2:symbol "lv2_midi_out_14" ; lv2:name "MIDI Output #14" ; ] , [ a lv2:OutputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 15 ; lv2:symbol "lv2_midi_out_15" ; lv2:name "MIDI Output #15" ; ] , [ a lv2:OutputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 16 ; lv2:symbol "lv2_midi_out_16" ; lv2:name "MIDI Output #16" ; ] ; lv2:port [ a lv2:InputPort, lv2:ControlPort ; lv2:index 17 ; lv2:symbol "lv2_freewheel" ; lv2:name "Freewheel" ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; lv2:designation ; lv2:portProperty lv2:toggled, ; ] ; doap:name "MIDI Split" ; doap:maintainer [ foaf:name "falkTX" ] . Carla-2.4.2/data/lv2-bundles/miditools/miditranspose.ttl000066400000000000000000000055011420416754300232270ustar00rootroot00000000000000@prefix atom: . @prefix doap: . @prefix foaf: . @prefix lv2: . @prefix opts: . @prefix patch: . @prefix rdf: . @prefix rdfs: . @prefix ui: . @prefix unit: . a lv2:UtilityPlugin, lv2:Plugin ; lv2:optionalFeature ; lv2:requiredFeature , , ; lv2:extensionData ; lv2:extensionData ; opts:supportedOption , , ; lv2:port [ a lv2:InputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:designation lv2:control ; lv2:index 0 ; lv2:symbol "lv2_midi_in" ; lv2:name "MIDI Input" ; ] ; lv2:port [ a lv2:OutputPort, atom:AtomPort ; atom:bufferType atom:Sequence ; atom:supports ; lv2:index 1 ; lv2:symbol "lv2_midi_out" ; lv2:name "MIDI Output" ; ] ; lv2:port [ a lv2:InputPort, lv2:ControlPort ; lv2:index 2 ; lv2:symbol "lv2_freewheel" ; lv2:name "Freewheel" ; lv2:default 0.0 ; lv2:minimum 0.0 ; lv2:maximum 1.0 ; lv2:designation ; lv2:portProperty lv2:toggled, ; ] ; lv2:port [ a lv2:InputPort, lv2:ControlPort ; lv2:index 3 ; lv2:symbol "octaves" ; lv2:name "Octaves" ; lv2:default 0.000000 ; lv2:minimum -8.000000 ; lv2:maximum 8.000000 ; lv2:portProperty lv2:integer ; ] , [ a lv2:InputPort, lv2:ControlPort ; lv2:index 4 ; lv2:symbol "semitones" ; lv2:name "Semitones" ; lv2:default 0.000000 ; lv2:minimum -12.000000 ; lv2:maximum 12.000000 ; lv2:portProperty lv2:integer ; ] ; doap:name "MIDI Transpose" ; doap:maintainer [ foaf:name "falkTX" ] . Carla-2.4.2/data/macos/000077500000000000000000000000001420416754300145625ustar00rootroot00000000000000Carla-2.4.2/data/macos/Carla-Control.plist000066400000000000000000000010231420416754300202730ustar00rootroot00000000000000 CFBundleDevelopmentRegion English CFBundleExecutable CarlaControl CFBundleIconFile icon.icns CFBundleIdentifier CarlaControl NSHighResolutionCapable NSRequiresAquaSystemAppearance Carla-2.4.2/data/macos/Carla.plist000066400000000000000000000013571420416754300166670ustar00rootroot00000000000000 CFBundleDevelopmentRegion English CFBundleExecutable Carla CFBundleIconFile icon.icns CFBundleIdentifier Carla NSHighResolutionCapable NSRequiresAquaSystemAppearance NSLocalNetworkUsageDescription Carla requires network permissions for remote OSC control. NSMicrophoneUsageDescription Carla requires microphone permissions for audio input. Carla-2.4.2/data/macos/CarlaVstFxShell.plist000066400000000000000000000015051420416754300206450ustar00rootroot00000000000000 CFBundleDevelopmentRegion English CFBundleExecutable CarlaVstFxShell CFBundleIconFile CFBundleIdentifier studio.kx.carla.vst2fx CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType BNDL CFBundleSignature ???? CFBundleVersion 1.0 CSResourcesFileMapped Carla-2.4.2/data/macos/CarlaVstShell.plist000066400000000000000000000015041420416754300203460ustar00rootroot00000000000000 CFBundleDevelopmentRegion English CFBundleExecutable CarlaVstShell CFBundleIconFile CFBundleIdentifier studio.kx.carla.vst2syn CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType BNDL CFBundleSignature ???? CFBundleVersion 1.0 CSResourcesFileMapped Carla-2.4.2/data/macos/README000066400000000000000000000021761420416754300154500ustar00rootroot00000000000000# --- README for Carla - macOS build --- What is Carla? --------------- Carla is a fully-featured audio plugin host, with support for many audio drivers and plugin formats. It's open source and licensed under the GNU General Public License, version 2 or later. Features --------- * LADSPA, DSSI, LV2 and VST2, VST3 and AU plugin formats * SF2/3 and SFZ sound banks * Internal audio and midi file player * Automation of plugin parameters via MIDI CC * Remote control over OSC * Rack and Patchbay processing modes, plus Single and Multi-Client if using JACK * Native audio drivers (ALSA, DirectSound, CoreAudio, etc) and JACK * Transport controls, sync with JACK Transport or Ableton Link In experimental phase / work in progress: * Export any Carla loadable plugin or sound bank as an LV2 plugin * Plugin bridge support (such as running 32bit plugins on a 64bit Carla, or Windows plugins on Linux) Carla is also available as an LV2 and VST2 plugin for macOS. They are packaged as Carla-Plugins.pkg, in where you can choose which plugin formats to install. For a complete and updated description of Carla, please check: https://kx.studio/carla Carla-2.4.2/data/macos/bundle.py000066400000000000000000000024101420416754300164020ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------------------------------------ # Imports (cx_Freeze) from cx_Freeze import setup, Executable from os import getenv # ------------------------------------------------------------------------------------------------------------ # Imports (Custom Stuff) from carla_host import VERSION # ------------------------------------------------------------------------------------------------------------ SCRIPT_NAME = getenv("SCRIPT_NAME") options = { "zip_include_packages": ["*"], "zip_exclude_packages": ["PyQt5"], "replace_paths": [["*","@executable_path/"]], "optimize": True, } boptions = { "iconfile": "./resources/ico/carla%s.icns" % ("-control" if SCRIPT_NAME == "Carla-Control" else "") } if SCRIPT_NAME in ("Carla", "Carla-Control"): boptions["custom_info_plist"] = "./data/macos/%s.plist" % SCRIPT_NAME setup(name = "Carla", version = VERSION, description = "Carla Plugin Host", options = {"build_exe": options, "bdist_mac": boptions}, executables = [Executable("./source/frontend/%s" % SCRIPT_NAME)]) # ------------------------------------------------------------------------------------------------------------ Carla-2.4.2/data/macos/package.xml000066400000000000000000000020121420416754300166720ustar00rootroot00000000000000 Carla Plugin carla-lv2.pkg carla-vst2fx.pkg carla-vst2syn.pkg Carla-2.4.2/data/patches/000077500000000000000000000000001420416754300151075ustar00rootroot00000000000000Carla-2.4.2/data/patches/cxfreeze-py37.patch000066400000000000000000000026331420416754300205470ustar00rootroot00000000000000From 76542754e01d2d4b21c6744c563dda8d5c72b3b2 Mon Sep 17 00:00:00 2001 From: egormartiniuc Date: Tue, 3 Jul 2018 16:38:06 +0200 Subject: [PATCH] Update freezer.py python 3.7.0 64Bit --- cx_Freeze/freezer.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/cx_Freeze/freezer.py b/cx_Freeze/freezer.py index 27a78c2..cfcc3b4 100644 --- a/cx_Freeze/freezer.py +++ b/cx_Freeze/freezer.py @@ -555,10 +555,16 @@ def _WriteModules(self, fileName, finder): # the file is up to date so we can safely set this value to zero if module.code is not None: if module.file is not None and os.path.exists(module.file): - mtime = os.stat(module.file).st_mtime + stat = os.stat(module.file) + mtime = stat.st_mtime + size = stat.st_size & 0xFFFFFFFF else: mtime = time.time() - header = magic + struct.pack(" #include +#define ngettext(t1, t2, n) t1 + /** * SECTION:gunixconnection * @title: GUnixConnection diff --git a/glib/ggettext.c b/glib/ggettext.c index bf74ccb..2430a0d 100644 --- a/glib/ggettext.c +++ b/glib/ggettext.c @@ -40,7 +40,6 @@ #include #include -#include #ifdef G_OS_WIN32 diff --git a/glib/gi18n.h b/glib/gi18n.h index f765c3d..2c950cd 100644 --- a/glib/gi18n.h +++ b/glib/gi18n.h @@ -20,13 +20,13 @@ #include -#include #include -#define _(String) gettext (String) -#define Q_(String) g_dpgettext (NULL, String, 0) +#define _(String) String #define N_(String) (String) -#define C_(Context,String) g_dpgettext (NULL, Context "\004" String, strlen (Context) + 1) #define NC_(Context, String) (String) +#define textdomain(...) +#define bindtextdomain(...) + #endif /* __G_I18N_H__ */ diff --git a/m4macros/Makefile.am b/m4macros/Makefile.am index 971871c..8a4f40c 100644 --- a/m4macros/Makefile.am +++ b/m4macros/Makefile.am @@ -1,6 +1,6 @@ include $(top_srcdir)/glib.mk -installed_m4= glib-2.0.m4 glib-gettext.m4 gsettings.m4 +installed_m4= glib-2.0.m4 gsettings.m4 EXTRA_DIST+=$(installed_m4) Carla-2.4.2/data/patches/pyliblo-python3.7.patch000066400000000000000000000042661420416754300213610ustar00rootroot00000000000000diff --git a/src/liblo.c b/src/liblo.c index bb314a5..6535baf 100644 --- a/src/liblo.c +++ b/src/liblo.c @@ -13882,12 +13882,12 @@ static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) *value = local_value; *tb = local_tb; #if CYTHON_COMPILING_IN_CPYTHON - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = local_type; - tstate->exc_value = local_value; - tstate->exc_traceback = local_tb; + tmp_type = tstate->exc_state.exc_type; + tmp_value = tstate->exc_state.exc_value; + tmp_tb = tstate->exc_state.exc_traceback; + tstate->exc_state.exc_type = local_type; + tstate->exc_state.exc_value = local_value; + tstate->exc_state.exc_traceback = local_tb; /* Make sure tstate is in a consistent state when we XDECREF these objects (DECREF may run arbitrary code). */ Py_XDECREF(tmp_type); @@ -13927,9 +13927,9 @@ bad: static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb) { #if CYTHON_COMPILING_IN_CPYTHON PyThreadState *tstate = PyThreadState_GET(); - *type = tstate->exc_type; - *value = tstate->exc_value; - *tb = tstate->exc_traceback; + *type = tstate->exc_state.exc_type; + *value = tstate->exc_state.exc_value; + *tb = tstate->exc_state.exc_traceback; Py_XINCREF(*type); Py_XINCREF(*value); Py_XINCREF(*tb); @@ -13941,12 +13941,12 @@ static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb) #if CYTHON_COMPILING_IN_CPYTHON PyObject *tmp_type, *tmp_value, *tmp_tb; PyThreadState *tstate = PyThreadState_GET(); - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = type; - tstate->exc_value = value; - tstate->exc_traceback = tb; + tmp_type = tstate->exc_state.exc_type; + tmp_value = tstate->exc_state.exc_value; + tmp_tb = tstate->exc_state.exc_traceback; + tstate->exc_state.exc_type = type; + tstate->exc_state.exc_value = value; + tstate->exc_state.exc_traceback = tb; Py_XDECREF(tmp_type); Py_XDECREF(tmp_value); Py_XDECREF(tmp_tb); Carla-2.4.2/data/patches/qt55-newosx-fix.patch000066400000000000000000000072741420416754300210450ustar00rootroot00000000000000From 0707260a4f8e64dfadf1df5f935e74cabb7c7d27 Mon Sep 17 00:00:00 2001 From: Jake Petroules Date: Sun, 1 Oct 2017 21:48:17 -0700 Subject: [PATCH] Fix build error with macOS 10.13 SDK MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Several of these variables/macros are no longer defined. We didn't validate the preconditions on iOS, tvOS, or watchOS, so no need to bother validating them on macOS either. Nor did we check the OSStatus result on any platform anyways. Task-number: QTBUG-63401 Change-Id: Ife64dff767cf6d3f4b839fc53ec486181c176bf3 (cherry-picked from 861544583511d4e6f7745d2339b26ff1cd44132b) Reviewed-by: Timur Pocheptsov Reviewed-by: Tor Arne Vestbø --- src/plugins/platforms/cocoa/qcocoahelpers.h | 2 +- src/plugins/platforms/cocoa/qcocoahelpers.mm | 13 +------------ 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/src/plugins/platforms/cocoa/qcocoahelpers.h b/src/plugins/platforms/cocoa/qcocoahelpers.h index bbb3793..74371d5 100644 --- a/src/plugins/platforms/cocoa/qcocoahelpers.h +++ b/src/plugins/platforms/cocoa/qcocoahelpers.h @@ -80,7 +80,7 @@ QColor qt_mac_toQColor(CGColorRef color); // Creates a mutable shape, it's the caller's responsibility to release. HIMutableShapeRef qt_mac_QRegionToHIMutableShape(const QRegion ®ion); -OSStatus qt_mac_drawCGImage(CGContextRef inContext, const CGRect *inBounds, CGImageRef inImage); +void qt_mac_drawCGImage(CGContextRef inContext, const CGRect *inBounds, CGImageRef inImage); NSDragOperation qt_mac_mapDropAction(Qt::DropAction action); NSDragOperation qt_mac_mapDropActions(Qt::DropActions actions); diff --git a/src/plugins/platforms/cocoa/qcocoahelpers.mm b/src/plugins/platforms/cocoa/qcocoahelpers.mm index cd73148..3f8429e 100644 --- a/src/plugins/platforms/cocoa/qcocoahelpers.mm +++ b/src/plugins/platforms/cocoa/qcocoahelpers.mm @@ -544,15 +544,8 @@ NSRect qt_mac_flipRect(const QRect &rect) return NSMakeRect(rect.x(), flippedY, rect.width(), rect.height()); } -OSStatus qt_mac_drawCGImage(CGContextRef inContext, const CGRect *inBounds, CGImageRef inImage) +void qt_mac_drawCGImage(CGContextRef inContext, const CGRect *inBounds, CGImageRef inImage) { - // Verbatim copy if HIViewDrawCGImage (as shown on Carbon-Dev) - OSStatus err = noErr; - - require_action(inContext != NULL, InvalidContext, err = paramErr); - require_action(inBounds != NULL, InvalidBounds, err = paramErr); - require_action(inImage != NULL, InvalidImage, err = paramErr); - CGContextSaveGState( inContext ); CGContextTranslateCTM (inContext, 0, inBounds->origin.y + CGRectGetMaxY(*inBounds)); CGContextScaleCTM(inContext, 1, -1); @@ -560,10 +553,6 @@ OSStatus qt_mac_drawCGImage(CGContextRef inContext, const CGRect *inBounds, CGIm CGContextDrawImage(inContext, *inBounds, inImage); CGContextRestoreGState(inContext); -InvalidImage: -InvalidBounds: -InvalidContext: - return err; } Qt::MouseButton cocoaButton2QtButton(NSInteger buttonNum) -- 2.7.4 diff --git a/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm b/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm index 7e1dfd9..674c037 100644 --- a/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm +++ b/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm @@ -736,7 +736,7 @@ void QCoreTextFontEngine::getUnscaledGlyph(glyph_t glyph, QPainterPath *path, gl QFixed QCoreTextFontEngine::emSquareSize() const { - return QFixed::QFixed(int(CTFontGetUnitsPerEm(ctfont))); + return QFixed(int(CTFontGetUnitsPerEm(ctfont))); } QFontEngine *QCoreTextFontEngine::cloneWithSize(qreal pixelSize) const Carla-2.4.2/data/patches/qt56-cpp98-compat.patch000066400000000000000000000020601420416754300211470ustar00rootroot00000000000000diff --git a/qcocoawindow.mm b/qcocoawindow.mm index 0e5655f..6ab3a21 100644 --- a/qcocoawindow.mm +++ b/qcocoawindow.mm @@ -272,7 +272,7 @@ static bool isMouseEvent(NSEvent *ev) + (void)applicationActivationChanged:(NSNotification*)notification { const id sender = self; - NSEnumerator *windowEnumerator = nullptr; + NSEnumerator *windowEnumerator = Q_NULLPTR; NSApplication *application = [NSApplication sharedApplication]; #if QT_OSX_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_10_12) @@ -313,7 +313,7 @@ static bool isMouseEvent(NSEvent *ev) continue; if ([window conformsToProtocol:@protocol(QNSWindowProtocol)]) { - QCocoaWindow *cocoaWindow = static_cast>(window).helper.platformWindow; + QCocoaWindow *cocoaWindow = static_cast< id >(window).helper.platformWindow; window.level = notification.name == NSApplicationWillResignActiveNotification ? NSNormalWindowLevel : cocoaWindow->windowLevel(cocoaWindow->window()->flags()); } Carla-2.4.2/data/patches/qt59-osx10.12-compat.patch000066400000000000000000000000001420416754300213720ustar00rootroot00000000000000Carla-2.4.2/data/patches/qt59-osx10.8-compat.patch000066400000000000000000000444061420416754300213410ustar00rootroot00000000000000diff --git a/mkspecs/common/clang-mac.conf b/mkspecs/common/clang-mac.conf index cbae2e62..dc4694fa 100644 --- a/mkspecs/common/clang-mac.conf +++ b/mkspecs/common/clang-mac.conf @@ -10,4 +10,5 @@ QMAKE_CXXFLAGS += -stdlib=libc++ QMAKE_LFLAGS += -stdlib=libc++ QMAKE_AR_LTCG = libtool -static -o -QMAKE_CFLAGS_APPLICATION_EXTENSION = -fapplication-extension +QMAKE_CFLAGS_APPLICATION_EXTENSION = +# -fapplication-extension diff --git a/src/corelib/global/qoperatingsystemversion_darwin.mm b/src/corelib/global/qoperatingsystemversion_darwin.mm index d8b927ff..9a690adc 100644 --- a/src/corelib/global/qoperatingsystemversion_darwin.mm +++ b/src/corelib/global/qoperatingsystemversion_darwin.mm @@ -40,16 +40,37 @@ #include "qoperatingsystemversion_p.h" #import +typedef qint16 (*GestaltFunction)(quint32 selector, qint32 *response); + QT_BEGIN_NAMESPACE QOperatingSystemVersion QOperatingSystemVersion::current() { - NSOperatingSystemVersion osv = NSProcessInfo.processInfo.operatingSystemVersion; QOperatingSystemVersion v; v.m_os = currentType(); - v.m_major = osv.majorVersion; - v.m_minor = osv.minorVersion; - v.m_micro = osv.patchVersion; + v.m_major = -1; + v.m_minor = -1; + v.m_micro = -1; + static GestaltFunction pGestalt = 0; + if (!pGestalt) { + CFBundleRef b = CFBundleGetBundleWithIdentifier(CFSTR("com.apple.CoreServices")); + pGestalt = reinterpret_cast(CFBundleGetFunctionPointerForName(b, + CFSTR("Gestalt"))); + } + // Use temporary variables so we can return 0.0.0 (unknown version) + // in case of an error partway through determining the OS version + qint32 major = 0, minor = 0, patch = 0; + if (!pGestalt) + return v; + if (pGestalt('sys1', &major) != 0) + return v; + if (pGestalt('sys2', &minor) != 0) + return v; + if (pGestalt('sys3', &patch) != 0) + return v; + v.m_major = major; + v.m_minor = minor; + v.m_micro = patch; return v; } diff --git a/src/corelib/io/qfilesystemengine_unix.cpp b/src/corelib/io/qfilesystemengine_unix.cpp index 7fed54f7..bbf5e6d6 100644 --- a/src/corelib/io/qfilesystemengine_unix.cpp +++ b/src/corelib/io/qfilesystemengine_unix.cpp @@ -126,8 +126,11 @@ static bool isPackage(const QFileSystemMetaData &data, const QFileSystemEntry &e #ifdef Q_OS_MACOS // Find if an application other than Finder claims to know how to handle the package - QCFType application = LSCopyDefaultApplicationURLForURL(url, - kLSRolesEditor | kLSRolesViewer, nullptr); + QCFType application; + LSGetApplicationForURL(url, + kLSRolesEditor|kLSRolesViewer, + NULL, + &application); if (application) { QCFType bundle = CFBundleCreate(kCFAllocatorDefault, application); diff --git a/src/corelib/kernel/qcore_foundation.mm b/src/corelib/kernel/qcore_foundation.mm index 56eabc4b..c48a7979 100644 --- a/src/corelib/kernel/qcore_foundation.mm +++ b/src/corelib/kernel/qcore_foundation.mm @@ -46,7 +46,7 @@ #include #include -#if QT_CONFIG(timezone) && !defined(QT_NO_SYSTEMLOCALE) +#if 0 #include #include #include @@ -433,7 +433,7 @@ NSDate *QDateTime::toNSDate() const // ---------------------------------------------------------------------------- -#if QT_CONFIG(timezone) && !defined(QT_NO_SYSTEMLOCALE) +#if 0 /*! \since 5.9 diff --git a/src/corelib/tools/qtimezone.h b/src/corelib/tools/qtimezone.h index bd87139f..d154cbf9 100644 --- a/src/corelib/tools/qtimezone.h +++ b/src/corelib/tools/qtimezone.h @@ -47,7 +47,7 @@ QT_REQUIRE_CONFIG(timezone); -#if (defined(Q_OS_DARWIN) || defined(Q_QDOC)) && !defined(QT_NO_SYSTEMLOCALE) +#if 0 Q_FORWARD_DECLARE_CF_TYPE(CFTimeZone); Q_FORWARD_DECLARE_OBJC_CLASS(NSTimeZone); #endif @@ -147,7 +147,7 @@ public: static QList windowsIdToIanaIds(const QByteArray &windowsId, QLocale::Country country); -#if (defined(Q_OS_DARWIN) || defined(Q_QDOC)) && !defined(QT_NO_SYSTEMLOCALE) +#if 0 static QTimeZone fromCFTimeZone(CFTimeZoneRef timeZone); CFTimeZoneRef toCFTimeZone() const Q_DECL_CF_RETURNS_RETAINED; static QTimeZone fromNSTimeZone(const NSTimeZone *timeZone); diff --git a/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm b/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm index f8fe160e..3c350b3c 100644 --- a/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm +++ b/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm @@ -456,7 +456,6 @@ QFontEngine *QCoreTextFontDatabaseEngineFactory::fontEngine(const return QFontEngineFT::create(*fontData, fontDef.pixelSize, static_cast(fontDef.hintingPreference)); } else if (NSURL *url = descriptorAttribute(descriptor, kCTFontURLAttribute)) { - Q_ASSERT(url.fileURL); QFontEngine::FaceId faceId; faceId.filename = QString::fromNSString(url.path).toUtf8(); return QFontEngineFT::create(fontDef, faceId); diff --git a/src/plugins/platforms/cocoa/qcocoamenu.mm b/src/plugins/platforms/cocoa/qcocoamenu.mm index e41c70b8..815028b7 100644 --- a/src/plugins/platforms/cocoa/qcocoamenu.mm +++ b/src/plugins/platforms/cocoa/qcocoamenu.mm @@ -329,13 +329,6 @@ void QCocoaMenu::insertMenuItem(QPlatformMenuItem *menuItem, QPlatformMenuItem * } insertNative(cocoaItem, beforeItem); - - // Empty menus on a menubar are hidden by default. If the menu gets - // added to the menubar before it contains any item, we need to sync. - if (isVisible() && attachedItem().hidden) { - if (auto *mb = qobject_cast(menuParent())) - mb->syncMenu(this); - } } void QCocoaMenu::insertNative(QCocoaMenuItem *item, QCocoaMenuItem *beforeItem) diff --git a/src/plugins/platforms/cocoa/qcocoamenubar.mm b/src/plugins/platforms/cocoa/qcocoamenubar.mm index a4cd465d..06d63f7d 100644 --- a/src/plugins/platforms/cocoa/qcocoamenubar.mm +++ b/src/plugins/platforms/cocoa/qcocoamenubar.mm @@ -369,7 +369,7 @@ void QCocoaMenuBar::updateMenuBarImmediately() QCocoaMenuLoader *loader = [QCocoaMenuLoader sharedMenuLoader]; [loader ensureAppMenuInMenu:mb->nsMenu()]; - NSMutableSet *mergedItems = [[NSMutableSet setWithCapacity:mb->merged().count()] retain]; + NSMutableSet *mergedItems = [[NSMutableSet setWithCapacity:0] retain]; foreach (QCocoaMenuItem *m, mb->merged()) { [mergedItems addObject:m->nsItem()]; m->syncMerged(); diff --git a/src/plugins/platforms/cocoa/qcocoanativeinterface.mm b/src/plugins/platforms/cocoa/qcocoanativeinterface.mm index 5504c242..fa0b7f71 100644 --- a/src/plugins/platforms/cocoa/qcocoanativeinterface.mm +++ b/src/plugins/platforms/cocoa/qcocoanativeinterface.mm @@ -172,12 +172,11 @@ void *QCocoaNativeInterface::NSPrintInfoForPrintEngine(QPrintEngine *printEngine QPixmap QCocoaNativeInterface::defaultBackgroundPixmapForQWizard() { + QCFType url; const int ExpectedImageWidth = 242; const int ExpectedImageHeight = 414; - QCFType urls = LSCopyApplicationURLsForBundleIdentifier( - CFSTR("com.apple.KeyboardSetupAssistant"), nullptr); - if (urls && CFArrayGetCount(urls) > 0) { - CFURLRef url = (CFURLRef)CFArrayGetValueAtIndex(urls, 0); + if (LSFindApplicationForInfo(kLSUnknownCreator, CFSTR("com.apple.KeyboardSetupAssistant"), + 0, 0, &url) == noErr) { QCFType bundle = CFBundleCreate(kCFAllocatorDefault, url); if (bundle) { url = CFBundleCopyResourceURL(bundle, CFSTR("Background"), CFSTR("png"), 0); diff --git a/src/plugins/platforms/cocoa/qcocoawindow.h b/src/plugins/platforms/cocoa/qcocoawindow.h index aa8fffdf..191553e6 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.h +++ b/src/plugins/platforms/cocoa/qcocoawindow.h @@ -316,6 +316,8 @@ public: // for QNSView bool m_viewIsEmbedded; // true if the m_view is actually embedded in a "foreign" NSView hiearchy bool m_viewIsToBeEmbedded; // true if the m_view is intended to be embedded in a "foreign" NSView hiearchy + QCocoaWindow *m_parentCocoaWindow; + Qt::WindowFlags m_windowFlags; Qt::WindowState m_lastReportedWindowState; Qt::WindowModality m_windowModality; diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm index 86fd7b8a..c7aa5792 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.mm +++ b/src/plugins/platforms/cocoa/qcocoawindow.mm @@ -325,7 +325,7 @@ static void qt_closePopups() + (void)applicationActivationChanged:(NSNotification*)notification { const id sender = self; - NSEnumerator *windowEnumerator = nullptr; + NSEnumerator* windowEnumerator = nullptr; NSApplication *application = [NSApplication sharedApplication]; #if QT_MACOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_10_12) @@ -526,6 +526,7 @@ QCocoaWindow::QCocoaWindow(QWindow *tlw, WId nativeHandle) , m_nsWindow(0) , m_viewIsEmbedded(false) , m_viewIsToBeEmbedded(false) + , m_parentCocoaWindow(0) , m_lastReportedWindowState(Qt::WindowNoState) , m_windowModality(Qt::NonModal) , m_windowUnderMouse(false) @@ -594,10 +595,12 @@ QCocoaWindow::~QCocoaWindow() [m_nsWindow makeFirstResponder:nil]; [m_nsWindow setContentView:nil]; [m_nsWindow.helper detachFromPlatformWindow]; - if (m_view.window.parentWindow) - [m_view.window.parentWindow removeChildWindow:m_view.window]; - else if ([m_view superview]) + if (m_view.window.parentWindow) { + if (m_parentCocoaWindow) + m_parentCocoaWindow->removeChildWindow(this); + } else if ([m_view superview]) { [m_view removeFromSuperview]; + } removeMonitor(); @@ -614,6 +617,7 @@ QCocoaWindow::~QCocoaWindow() foreachChildNSWindow(^(QCocoaWindow *childWindow) { [m_nsWindow removeChildWindow:childWindow->m_nsWindow]; + childWindow->m_parentCocoaWindow = 0; }); [m_view release]; @@ -690,7 +694,7 @@ void QCocoaWindow::setCocoaGeometry(const QRect &rect) if (isChildNSWindow()) { QPlatformWindow::setGeometry(rect); - NSWindow *parentNSWindow = m_view.window.parentWindow; + NSWindow *parentNSWindow = m_parentCocoaWindow->m_nsWindow; NSRect parentWindowFrame = [parentNSWindow contentRectForFrameRect:parentNSWindow.frame]; clipWindow(parentWindowFrame); @@ -744,7 +748,7 @@ void QCocoaWindow::clipWindow(const NSRect &clipRect) m_hiddenByClipping = false; if (!m_hiddenByAncestor) { [m_nsWindow orderFront:nil]; - static_cast(QPlatformWindow::parent())->reinsertChildWindow(this); + m_parentCocoaWindow->reinsertChildWindow(this); } } } @@ -781,7 +785,7 @@ void QCocoaWindow::show(bool becauseOfAncestor) if ([m_nsWindow isVisible]) return; - if (m_view.window.parentWindow && !m_view.window.parentWindow.visible) { + if (m_parentCocoaWindow && ![m_parentCocoaWindow->m_nsWindow isVisible]) { m_hiddenByAncestor = true; // Parent still hidden, don't show now } else if ((becauseOfAncestor == m_hiddenByAncestor) // Was NEITHER explicitly hidden && !m_hiddenByClipping) { // ... NOR clipped @@ -792,7 +796,7 @@ void QCocoaWindow::show(bool becauseOfAncestor) if (!m_hiddenByClipping) { // setCocoaGeometry() can change the clipping status [m_nsWindow orderFront:nil]; if (isChildNSWindow()) - static_cast(QPlatformWindow::parent())->reinsertChildWindow(this); + m_parentCocoaWindow->reinsertChildWindow(this); foreachChildNSWindow(^(QCocoaWindow *childWindow) { childWindow->show(true); }); @@ -1190,7 +1194,7 @@ void QCocoaWindow::raise() // -[NSWindow orderFront:] doesn't work with attached windows. // The only solution is to remove and add the child window. // This will place it on top of all the other NSWindows. - NSWindow *parentNSWindow = m_view.window.parentWindow; + NSWindow *parentNSWindow = m_parentCocoaWindow->m_nsWindow; [parentNSWindow removeChildWindow:m_nsWindow]; [parentNSWindow addChildWindow:m_nsWindow ordered:NSWindowAbove]; } else { @@ -1226,7 +1230,7 @@ void QCocoaWindow::lower() // The only solution is to remove and add all the child windows except this one. // This will keep the current window at the bottom while adding the others on top of it, // hopefully in the same order (this is not documented anywhere in the Cocoa documentation). - NSWindow *parentNSWindow = m_view.window.parentWindow; + NSWindow *parentNSWindow = m_parentCocoaWindow->m_nsWindow; NSArray *children = [parentNSWindow.childWindows copy]; for (NSWindow *child in children) if (m_nsWindow != child) { @@ -1698,14 +1702,15 @@ void QCocoaWindow::recreateWindowIfNeeded() qCDebug(lcQpaCocoaWindow) << "Reconfiguring NSWindow due to" << recreateReason; - QCocoaWindow *parentCocoaWindow = static_cast(parentWindow); + // FIXME: Replace member with direct parentWindow usage (possibly cast) + m_parentCocoaWindow = static_cast(parentWindow); if (shouldBeChildNSWindow) { QWindow *parentQWindow = parentWindow->window(); // Ensure that all parents in the hierarchy are also child NSWindows if (!parentQWindow->property("_q_platform_MacUseNSWindow").toBool()) { parentQWindow->setProperty("_q_platform_MacUseNSWindow", QVariant(true)); - parentCocoaWindow->recreateWindowIfNeeded(); + m_parentCocoaWindow->recreateWindowIfNeeded(); } } @@ -1713,8 +1718,8 @@ void QCocoaWindow::recreateWindowIfNeeded() if ((isContentView() && !shouldBeContentView) || (recreateReason & PanelChanged)) { qCDebug(lcQpaCocoaWindow) << "Getting rid of existing window" << m_nsWindow; [m_nsWindow closeAndRelease]; - if (isChildNSWindow()) - [m_view.window.parentWindow removeChildWindow:m_view.window]; + if (isChildNSWindow() && oldParentCocoaWindow) + oldParentCocoaWindow->removeChildWindow(this); if (isContentView()) { // We explicitly disassociate m_view from the window's contentView, // as AppKit does not automatically do this in response to removing @@ -1730,9 +1735,9 @@ void QCocoaWindow::recreateWindowIfNeeded() if (noPreviousWindow) m_nsWindow = createNSWindow(shouldBeChildNSWindow, shouldBePanel); - if (m_view.window.parentWindow) { - if (!shouldBeChildNSWindow || (recreateReason & ParentChanged)) - [m_view.window.parentWindow removeChildWindow:m_view.window]; + if (oldParentCocoaWindow) { + if (!shouldBeChildNSWindow || oldParentCocoaWindow != m_parentCocoaWindow) + oldParentCocoaWindow->removeChildWindow(this); m_forwardWindow = oldParentCocoaWindow; } @@ -1759,8 +1764,8 @@ void QCocoaWindow::recreateWindowIfNeeded() setWindowState(window()->windowState()); } else if (shouldBeChildNSWindow) { if (!m_hiddenByClipping) { - [parentCocoaWindow->m_nsWindow addChildWindow:m_nsWindow ordered:NSWindowAbove]; - parentCocoaWindow->reinsertChildWindow(this); + [m_parentCocoaWindow->m_nsWindow addChildWindow:m_nsWindow ordered:NSWindowAbove]; + m_parentCocoaWindow->reinsertChildWindow(this); } // Set properties after the window has been made a child NSWindow @@ -1771,7 +1776,7 @@ void QCocoaWindow::recreateWindowIfNeeded() if ([m_view superview]) [m_view removeFromSuperview]; - [parentCocoaWindow->m_view addSubview:m_view]; + [m_parentCocoaWindow->m_view addSubview:m_view]; QRect rect = windowGeometry(); // Prevent setting a (0,0) window size; causes opengl context // "Invalid Drawable" warnings. @@ -1915,6 +1920,11 @@ bool QCocoaWindow::alwaysShowToolWindow() const return qt_mac_resolveOption(false, window(), "_q_macAlwaysShowToolWindow", ""); } +void QCocoaWindow::removeChildWindow(QCocoaWindow *child) +{ + [m_nsWindow removeChildWindow:child->m_nsWindow]; +} + void QCocoaWindow::removeMonitor() { if (!monitor) @@ -2046,12 +2056,14 @@ Qt::WindowState QCocoaWindow::windowState() const // FIXME: Support compound states (Qt::WindowStates) NSWindow *window = m_view.window; + /* if (window.miniaturized) return Qt::WindowMinimized; + */ if (window.qt_fullScreen) return Qt::WindowFullScreen; - if ((window.zoomed && !isTransitioningToFullScreen()) - || (m_lastReportedWindowState == Qt::WindowMaximized && isTransitioningToFullScreen())) + if (/*(window.zoomed && !isTransitioningToFullScreen()) + ||*/ (m_lastReportedWindowState == Qt::WindowMaximized && isTransitioningToFullScreen())) return Qt::WindowMaximized; // Note: We do not report Qt::WindowActive, even if isActive() @@ -2181,7 +2193,6 @@ void QCocoaWindow::applyContentBorderThickness(NSWindow *window) if (!m_drawContentBorderGradient) { [window setStyleMask:[window styleMask] & ~NSTexturedBackgroundWindowMask]; [[[window contentView] superview] setNeedsDisplay:YES]; - window.titlebarAppearsTransparent = NO; return; } @@ -2206,7 +2217,6 @@ void QCocoaWindow::applyContentBorderThickness(NSWindow *window) int effectiveBottomContentBorderThickness = m_bottomContentBorderThickness; [window setStyleMask:[window styleMask] | NSTexturedBackgroundWindowMask]; - window.titlebarAppearsTransparent = YES; [window setContentBorderThickness:effectiveTopContentBorderThickness forEdge:NSMaxYEdge]; [window setAutorecalculatesContentBorderThickness:NO forEdge:NSMaxYEdge]; Carla-2.4.2/data/patches/qt59-osx10.8-compat2.patch000066400000000000000000000253551420416754300214250ustar00rootroot00000000000000diff --git a/src/plugins/platforms/cocoa/qcocoacolordialoghelper.mm b/src/plugins/platforms/cocoa/qcocoacolordialoghelper.mm index aa61245..2423378 100644 --- a/src/plugins/platforms/cocoa/qcocoacolordialoghelper.mm +++ b/src/plugins/platforms/cocoa/qcocoacolordialoghelper.mm @@ -78,7 +78,7 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSColorPanelDelegate); mHelper = 0; mStolenContentView = 0; mPanelButtons = nil; - mResultCode = NSModalResponseCancel; + mResultCode = NSCancelButton; mDialogIsExecuting = false; mResultSet = false; mClosingDueToKnownButton = false; @@ -166,7 +166,7 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSColorPanelDelegate); mClosingDueToKnownButton = true; [mColorPanel close]; [self updateQtColor]; - [self finishOffWithCode:NSModalResponseOK]; + [self finishOffWithCode:NSOKButton]; } - (void)onCancelClicked @@ -175,7 +175,7 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSColorPanelDelegate); mClosingDueToKnownButton = true; [mColorPanel close]; mQtColor = QColor(); - [self finishOffWithCode:NSModalResponseCancel]; + [self finishOffWithCode:NSCancelButton]; } } @@ -236,12 +236,12 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSColorPanelDelegate); [NSApp runModalForWindow:mColorPanel]; mDialogIsExecuting = false; - return (mResultCode == NSModalResponseOK); + return (mResultCode == NSOKButton); } - (QPlatformDialogHelper::DialogCode)dialogResultCode { - return (mResultCode == NSModalResponseOK) ? QPlatformDialogHelper::Accepted : QPlatformDialogHelper::Rejected; + return (mResultCode == NSOKButton) ? QPlatformDialogHelper::Accepted : QPlatformDialogHelper::Rejected; } - (BOOL)windowShouldClose:(id)window @@ -250,7 +250,7 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSColorPanelDelegate); if (!mPanelButtons) [self updateQtColor]; if (mDialogIsExecuting) { - [self finishOffWithCode:NSModalResponseCancel]; + [self finishOffWithCode:NSCancelButton]; } else { mResultSet = true; if (mHelper) @@ -276,7 +276,7 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSColorPanelDelegate); // This check will prevent any such recursion. if (!mResultSet) { mResultSet = true; - if (mResultCode == NSModalResponseCancel) { + if (mResultCode == NSCancelButton) { emit mHelper->reject(); } else { emit mHelper->accept(); diff --git a/src/plugins/platforms/cocoa/qcocoaeventdispatcher.mm b/src/plugins/platforms/cocoa/qcocoaeventdispatcher.mm index b22f1b1..d2dd645 100644 --- a/src/plugins/platforms/cocoa/qcocoaeventdispatcher.mm +++ b/src/plugins/platforms/cocoa/qcocoaeventdispatcher.mm @@ -401,7 +401,7 @@ bool QCocoaEventDispatcher::processEvents(QEventLoop::ProcessEventsFlags flags) // [NSApp run], which is the normal code path for cocoa applications. if (NSModalSession session = d->currentModalSession()) { QBoolBlocker execGuard(d->currentExecIsNSAppRun, false); - while ([NSApp runModalSession:session] == NSModalResponseContinue && !d->interrupt) { + while ([NSApp runModalSession:session] == NSRunContinuesResponse && !d->interrupt) { qt_mac_waitForMoreEvents(NSModalPanelRunLoopMode); if (session != d->currentModalSessionCached) { // It's possible to release the current modal session @@ -445,7 +445,7 @@ bool QCocoaEventDispatcher::processEvents(QEventLoop::ProcessEventsFlags flags) if (flags & QEventLoop::WaitForMoreEvents) qt_mac_waitForMoreEvents(NSModalPanelRunLoopMode); NSInteger status = [NSApp runModalSession:session]; - if (status != NSModalResponseContinue && session == d->currentModalSessionCached) { + if (status != NSRunContinuesResponse && session == d->currentModalSessionCached) { // INVARIANT: Someone called [NSApp stopModal:] from outside the event // dispatcher (e.g to stop a native dialog). But that call wrongly stopped // 'session' as well. As a result, we need to restart all internal sessions: diff --git a/src/plugins/platforms/cocoa/qcocoafontdialoghelper.mm b/src/plugins/platforms/cocoa/qcocoafontdialoghelper.mm index 9a96895..b227794 100644 --- a/src/plugins/platforms/cocoa/qcocoafontdialoghelper.mm +++ b/src/plugins/platforms/cocoa/qcocoafontdialoghelper.mm @@ -104,7 +104,7 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSFontPanelDelegate); mHelper = 0; mStolenContentView = 0; mPanelButtons = 0; - mResultCode = NSModalResponseCancel; + mResultCode = NSCancelButton; mDialogIsExecuting = false; mResultSet = false; @@ -169,7 +169,7 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSFontPanelDelegate); - (void)onOkClicked { [mFontPanel close]; - [self finishOffWithCode:NSModalResponseOK]; + [self finishOffWithCode:NSOKButton]; } - (void)onCancelClicked @@ -177,7 +177,7 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSFontPanelDelegate); if (mPanelButtons) { [mFontPanel close]; mQtFont = QFont(); - [self finishOffWithCode:NSModalResponseCancel]; + [self finishOffWithCode:NSCancelButton]; } } @@ -222,12 +222,12 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSFontPanelDelegate); [NSApp runModalForWindow:mFontPanel]; mDialogIsExecuting = false; - return (mResultCode == NSModalResponseOK); + return (mResultCode == NSOKButton); } - (QPlatformDialogHelper::DialogCode)dialogResultCode { - return (mResultCode == NSModalResponseOK) ? QPlatformDialogHelper::Accepted : QPlatformDialogHelper::Rejected; + return (mResultCode == NSOKButton) ? QPlatformDialogHelper::Accepted : QPlatformDialogHelper::Rejected; } - (BOOL)windowShouldClose:(id)window @@ -236,7 +236,7 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSFontPanelDelegate); if (!mPanelButtons) [self updateQtFont]; if (mDialogIsExecuting) { - [self finishOffWithCode:NSModalResponseCancel]; + [self finishOffWithCode:NSCancelButton]; } else { mResultSet = true; if (mHelper) @@ -262,7 +262,7 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSFontPanelDelegate); // This check will prevent any such recursion. if (!mResultSet) { mResultSet = true; - if (mResultCode == NSModalResponseCancel) { + if (mResultCode == NSCancelButton) { emit mHelper->reject(); } else { emit mHelper->accept(); diff --git a/src/plugins/platforms/cocoa/qcocoawindow.h b/src/plugins/platforms/cocoa/qcocoawindow.h index 191553e..e6abf49 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.h +++ b/src/plugins/platforms/cocoa/qcocoawindow.h @@ -217,7 +217,9 @@ public: Q_NOTIFICATION_HANDLER(NSWindowDidExitFullScreenNotification) void windowDidExitFullScreen(); Q_NOTIFICATION_HANDLER(NSWindowDidOrderOffScreenNotification) void windowDidOrderOffScreen(); Q_NOTIFICATION_HANDLER(NSWindowDidOrderOnScreenAndFinishAnimatingNotification) void windowDidOrderOnScreen(); +#if 0 Q_NOTIFICATION_HANDLER(NSWindowDidChangeOcclusionStateNotification) void windowDidChangeOcclusionState(); +#endif Q_NOTIFICATION_HANDLER(NSWindowDidChangeScreenNotification) void windowDidChangeScreen(); Q_NOTIFICATION_HANDLER(NSWindowWillCloseNotification) void windowWillClose(); diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm index c7aa579..56eb291 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.mm +++ b/src/plugins/platforms/cocoa/qcocoawindow.mm @@ -1532,6 +1532,7 @@ void QCocoaWindow::windowDidOrderOnScreen() exposeWindow(); } +#if 0 void QCocoaWindow::windowDidChangeOcclusionState() { // Several unit tests expect paint and/or expose events for windows that are @@ -1547,6 +1548,7 @@ void QCocoaWindow::windowDidChangeOcclusionState() } } } +#endif void QCocoaWindow::windowDidChangeScreen() { diff --git a/src/printsupport/dialogs/qpagesetupdialog_mac.mm b/src/printsupport/dialogs/qpagesetupdialog_mac.mm index 1e39845..9305566 100644 --- a/src/printsupport/dialogs/qpagesetupdialog_mac.mm +++ b/src/printsupport/dialogs/qpagesetupdialog_mac.mm @@ -77,7 +77,7 @@ QT_USE_NAMESPACE QPageSetupDialog *dialog = static_cast(contextInfo); QPrinter *printer = dialog->printer(); - if (returnCode == NSModalResponseOK) { + if (returnCode == NSOKButton) { PMPageFormat format = static_cast([printInfo PMPageFormat]); PMRect paperRect; PMGetUnadjustedPaperRect(format, &paperRect); @@ -88,7 +88,7 @@ QT_USE_NAMESPACE printer->printEngine()->setProperty(QPrintEngine::PPK_Orientation, orientation == kPMLandscape ? QPrinter::Landscape : QPrinter::Portrait); } - dialog->done((returnCode == NSModalResponseOK) ? QDialog::Accepted : QDialog::Rejected); + dialog->done((returnCode == NSOKButton) ? QDialog::Accepted : QDialog::Rejected); } @end diff --git a/src/printsupport/dialogs/qprintdialog_mac.mm b/src/printsupport/dialogs/qprintdialog_mac.mm index 8547799..f7bbb59 100644 --- a/src/printsupport/dialogs/qprintdialog_mac.mm +++ b/src/printsupport/dialogs/qprintdialog_mac.mm @@ -101,7 +101,7 @@ QT_USE_NAMESPACE QPrintDialog *dialog = static_cast(contextInfo); QPrinter *printer = dialog->printer(); - if (returnCode == NSModalResponseOK) { + if (returnCode == NSOKButton) { PMPrintSession session = static_cast([printInfo PMPrintSession]); PMPrintSettings settings = static_cast([printInfo PMPrintSettings]); @@ -190,7 +190,7 @@ QT_USE_NAMESPACE printer->setPageSize(pageSize); printer->setOrientation(orientation == kPMLandscape ? QPrinter::Landscape : QPrinter::Portrait); - dialog->done((returnCode == NSModalResponseOK) ? QDialog::Accepted : QDialog::Rejected); + dialog->done((returnCode == NSOKButton) ? QDialog::Accepted : QDialog::Rejected); } @end diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp index 4c5c9e1..5b4a95e 100644 --- a/src/testlib/qtestcase.cpp +++ b/src/testlib/qtestcase.cpp @@ -147,6 +147,7 @@ static bool debuggerPresent() return CFStringCompare(str1, str2, kCFCompareCaseInsensitive) == kCFCompareEqualTo; }; +#if 0 // Check if there is an exception handler for the process: mach_msg_type_number_t portCount = 0; exception_mask_t masks[EXC_TYPES_COUNT]; @@ -163,6 +164,7 @@ static bool debuggerPresent() } } } +#endif // Ok, no debugger attached. So, let's see if CrashReporter will throw up a dialog. If so, we // leave it to the OS to do the stack trace. Carla-2.4.2/data/patches/qt59-osx10.8-compat3.patch000066400000000000000000000130141420416754300214130ustar00rootroot00000000000000diff --git a/src/gui/.obj/qcoregraphics.o b/src/gui/.obj/qcoregraphics.o index 00f0647..2d1b7da 100644 Binary files a/src/gui/.obj/qcoregraphics.o and b/src/gui/.obj/qcoregraphics.o differ diff --git a/src/gui/painting/qcoregraphics.mm b/src/gui/painting/qcoregraphics.mm index c4fb8af..91875cd 100644 --- a/src/gui/painting/qcoregraphics.mm +++ b/src/gui/painting/qcoregraphics.mm @@ -47,6 +47,21 @@ #include #include +@interface NSGraphicsContext (QtAdditions) + ++ (NSGraphicsContext *)qt_graphicsContextWithCGContext:(CGContextRef)graphicsPort flipped:(BOOL)initialFlippedState; + +@end + +@implementation NSGraphicsContext (QtAdditions) + ++ (NSGraphicsContext *)qt_graphicsContextWithCGContext:(CGContextRef)graphicsPort flipped:(BOOL)initialFlippedState +{ + return [self graphicsContextWithGraphicsPort:graphicsPort flipped:initialFlippedState]; +} + +@end + QT_BEGIN_NAMESPACE // ---------------------- Images ---------------------- @@ -147,7 +162,7 @@ QPixmap qt_mac_toQPixmap(const NSImage *image, const QSizeF &size) QMacCGContext ctx(&pixmap); if (!ctx) return QPixmap(); - NSGraphicsContext *gc = [NSGraphicsContext graphicsContextWithCGContext:ctx flipped:YES]; + NSGraphicsContext *gc = [NSGraphicsContext qt_graphicsContextWithCGContext:ctx flipped:YES]; if (!gc) return QPixmap(); [NSGraphicsContext saveGraphicsState]; diff --git a/src/plugins/platforms/cocoa/qcocoaintegration.mm b/src/plugins/platforms/cocoa/qcocoaintegration.mm index bac49cf..83b51cd 100644 --- a/src/plugins/platforms/cocoa/qcocoaintegration.mm +++ b/src/plugins/platforms/cocoa/qcocoaintegration.mm @@ -144,7 +144,7 @@ void QCocoaScreen::updateGeometry() // The reference screen for the geometry is always the primary screen, but since // we may be in the process of creating and registering the primary screen, we // must special-case that and assign it direcly. - QCocoaScreen *primaryScreen = (nsScreen == [[NSScreen screens] firstObject]) ? + QCocoaScreen *primaryScreen = (nsScreen == [[NSScreen screens] objectAtIndex:0]) ? this : static_cast(QGuiApplication::primaryScreen()->handle()); m_geometry = primaryScreen->mapFromNative(m_geometry).toRect(); diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm index 56eb291..5d63dea 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.mm +++ b/src/plugins/platforms/cocoa/qcocoawindow.mm @@ -858,12 +858,7 @@ void QCocoaWindow::setVisible(bool visible) applyWindowState(window()->windowState()); if (window()->windowState() != Qt::WindowMinimized) { - if ((window()->modality() == Qt::WindowModal - || window()->type() == Qt::Sheet) - && parentCocoaWindow) { - // show the window as a sheet - [parentCocoaWindow->m_nsWindow beginSheet:m_nsWindow completionHandler:nil]; - } else if (window()->modality() != Qt::NonModal) { + if (window()->modality() != Qt::NonModal) { // show the window as application modal QCocoaEventDispatcher *cocoaEventDispatcher = qobject_cast(QGuiApplication::instance()->eventDispatcher()); Q_ASSERT(cocoaEventDispatcher != 0); @@ -923,11 +918,6 @@ void QCocoaWindow::setVisible(bool visible) if (cocoaEventDispatcherPrivate) cocoaEventDispatcherPrivate->endModalSession(window()); m_hasModalSession = false; - } else { - if ([m_nsWindow isSheet]) { - Q_ASSERT_X(parentCocoaWindow, "QCocoaWindow", "Window modal dialog has no transient parent."); - [parentCocoaWindow->m_nsWindow endSheet:m_nsWindow]; - } } hide(); diff --git a/src/widgets/styles/qmacstyle_mac.mm b/src/widgets/styles/qmacstyle_mac.mm index e6436f8..db1878a 100644 --- a/src/widgets/styles/qmacstyle_mac.mm +++ b/src/widgets/styles/qmacstyle_mac.mm @@ -137,6 +137,21 @@ #include #include +@interface NSGraphicsContext (QtAdditions) + ++ (NSGraphicsContext *)qt_graphicsContextWithCGContext:(CGContextRef)graphicsPort flipped:(BOOL)initialFlippedState; + +@end + +@implementation NSGraphicsContext (QtAdditions) + ++ (NSGraphicsContext *)qt_graphicsContextWithCGContext:(CGContextRef)graphicsPort flipped:(BOOL)initialFlippedState +{ + return [self graphicsContextWithGraphicsPort:graphicsPort flipped:initialFlippedState]; +} + +@end + QT_USE_NAMESPACE static QWindow *qt_getWindow(const QWidget *widget) @@ -1036,8 +1051,8 @@ void QMacStylePrivate::drawFocusRing(QPainter *p, const QRect &targetRect, int h CGContextSetAlpha(ctx, 0.5); // As applied to the stroke color below [NSGraphicsContext saveGraphicsState]; - [NSGraphicsContext setCurrentContext:[NSGraphicsContext graphicsContextWithCGContext:ctx - flipped:NO]]; + [NSGraphicsContext setCurrentContext:[NSGraphicsContext qt_graphicsContextWithCGContext:ctx + flipped:NO]]; CGRect focusRingRect = CGRectMake(hMargin, vMargin, size, size); NSBezierPath *focusRingPath; if (radius > 0) { Carla-2.4.2/data/pkgconfig/000077500000000000000000000000001420416754300154275ustar00rootroot00000000000000Carla-2.4.2/data/pkgconfig/carla-host-plugin.pc000066400000000000000000000004321420416754300213030ustar00rootroot00000000000000prefix=X-PREFIX-X libdir=X-LIBDIR-X/carla includedir=X-INCLUDEDIR-X/carla Name: carla-host-plugin Version: X-VERSION-X Description: Carla Host as Native Plugin Libs: -Wl,-rpath,${libdir} -L${libdir} -lcarla_host-plugin Cflags: -DREAL_BUILD -I${includedir} -I${includedir}/includes Carla-2.4.2/data/pkgconfig/carla-native-plugin.pc000066400000000000000000000004261420416754300216170ustar00rootroot00000000000000prefix=X-PREFIX-X libdir=X-LIBDIR-X/carla includedir=X-INCLUDEDIR-X/carla Name: carla-native-plugin Version: X-VERSION-X Description: Carla Native Plugin Libs: -Wl,-rpath,${libdir} -L${libdir} -lcarla_native-plugin Cflags: -DREAL_BUILD -I${includedir} -I${includedir}/includes Carla-2.4.2/data/pkgconfig/carla-standalone.pc000066400000000000000000000004231420416754300211620ustar00rootroot00000000000000prefix=X-PREFIX-X libdir=X-LIBDIR-X/carla includedir=X-INCLUDEDIR-X/carla Name: carla-standalone Version: X-VERSION-X Description: Carla Host Standalone Libs: -Wl,-rpath,${libdir} -L${libdir} -lcarla_standalone2 Cflags: -DREAL_BUILD -I${includedir} -I${includedir}/includes Carla-2.4.2/data/pkgconfig/carla-utils.pc000066400000000000000000000004351420416754300201750ustar00rootroot00000000000000prefix=X-PREFIX-X libdir=X-LIBDIR-X/carla includedir=X-INCLUDEDIR-X/carla Name: carla-utils Version: X-VERSION-X Description: Carla Host Utilities Libs: -Wl,-rpath,${libdir} -L${libdir} -lcarla_utils Cflags: -DREAL_BUILD -I${includedir} -I${includedir}/includes -I${includedir}/utils Carla-2.4.2/data/png2rgba.py000077500000000000000000000107751420416754300155510ustar00rootroot00000000000000#!/usr/bin/env python import os, numpy, sys import Image # ----------------------------------------------------- def png2rgba(namespace, filenames): fdH = open("%s.hpp" % namespace, "w") fdH.write("/* (Auto-generated binary data file). */\n") fdH.write("\n") fdH.write("#ifndef BINARY_%s_HPP\n" % namespace.upper()) fdH.write("#define BINARY_%s_HPP\n" % namespace.upper()) fdH.write("\n") fdH.write("namespace %s\n" % namespace) fdH.write("{\n") fdC = open("%s.cpp" % namespace, "w") fdC.write("/* (Auto-generated binary data file). */\n") fdC.write("\n") fdC.write("#include \"%s.hpp\"\n" % namespace) fdC.write("\n") tempIndex = 1 for filename in filenames: shortFilename = filename.rsplit(os.sep, 1)[-1].split(".", 1)[0] shortFilename = shortFilename.replace("-", "_") png = Image.open(filename) pngNumpy = numpy.array(png) pngData = pngNumpy.tolist() pngData.reverse() height = len(pngData) for dataBlock in pngData: width = len(dataBlock) channels = len(dataBlock[0]) break else: print("Invalid image found, cannot continue!") quit() if channels not in (3, 4): print("Invalid image channel count, cannot continue!") quit() print("Generating data for \"%s\" using '%s' type" % (filename, "GL_BGR" if channels == 3 else "GL_BGRA")) #print(" Width: %i" % width) #print(" Height: %i" % height) #print(" DataSize: %i" % (width * height * channels)) fdH.write(" extern const char* %sData;\n" % shortFilename) fdH.write(" const unsigned int %sDataSize = %i;\n" % (shortFilename, width * height * channels)) fdH.write(" const unsigned int %sWidth = %i;\n" % (shortFilename, width)) fdH.write(" const unsigned int %sHeight = %i;\n" % (shortFilename, height)) if tempIndex != len(filenames): fdH.write("\n") fdC.write("static const unsigned char temp%i[] = {\n" % tempIndex) curColumn = 1 fdC.write(" ") for dataBlock in pngData: if curColumn == 0: fdC.write(" ") for data in dataBlock: if channels == 3: r, g, b = data fdC.write(" %3u, %3u, %3u," % (b, g, r)) else: r, g, b, a = data if filename in ("artwork/claw1.png", "artwork/claw2.png", "artwork/run1.png", "artwork/run2.png", "artwork/run3.png", "artwork/run4.png", "artwork/scratch1.png", "artwork/scratch2.png", "artwork/sit.png", "artwork/tail.png"): if r == 255: a -= 38 if a < 0: a = 0 #a = 0 #else: #r = g = b = 255 fdC.write(" %3u, %3u, %3u, %3u," % (b, g, r, a)) if curColumn > 20: fdC.write("\n ") curColumn = 1 else: curColumn += 1 fdC.write("};\n") fdC.write("const char* %s::%sData = (const char*)temp%i;\n" % (namespace, shortFilename, tempIndex)) if tempIndex != len(filenames): fdC.write("\n") tempIndex += 1 fdH.write("}\n") fdH.write("\n") fdH.write("#endif // BINARY_%s_HPP\n" % namespace.upper()) fdH.write("\n") fdH.close() fdC.write("\n") fdC.close() # ----------------------------------------------------- if __name__ == '__main__': if len(sys.argv) != 3: print("Usage: %s " % sys.argv[0]) quit() namespace = sys.argv[1] artFolder = sys.argv[2] if not os.path.exists(artFolder): print("Folder '%s' does not exist" % artFolder) quit() # find png files pngFiles = [] for root, dirs, files in os.walk(artFolder): for name in [name for name in files if name.lower().endswith(".png")]: pngFiles.append(os.path.join(root, name)) pngFiles.sort() # create code now png2rgba(namespace, pngFiles) Carla-2.4.2/data/presentation/000077500000000000000000000000001420416754300161735ustar00rootroot00000000000000Carla-2.4.2/data/presentation/lac2015-carla-workshop.pdf000066400000000000000000003240641420416754300227000ustar00rootroot00000000000000%PDF-1.4 %äüöß 2 0 obj <> stream xœ…Ž;k1„ûý[,žw‡ ŽmHºAŠ*ñãK°ÿ}¯$_‘€ í ™ù´Pš¯tfðÊpÓYØw^ôeKo3þ&Íù\ö„lðH9Ô}âªK÷4A²¨îv3ø¾y„?ßmÔº²Sës¤ÅËèxõÃÃ_ÚÃe—‰l'4¥/^lÄpœv=tLGZ§ñÊÿ—Žg_#†]+‘wÉÀDÓÉøH¯÷¼6AÖ2ÁLPõáã\÷Q®m¹*ãÃS™-–xÆ*–Ç56Ó߈Ø\ endstream endobj 3 0 obj 222 endobj 4 0 obj <> stream ÿØÿàJFIFÿÛC     ÿÛC   ÿÂ"ÿÄÿÄÿÚ üõ•¾ÇÀee®›ŸPIDäîäν¾n¾~¼|bû£ÚèG£ÊžG³ägY,˜Ü±©òwrŒ½Ÿ'ØsáNÉŽ½ UÖW»µÊ+«•óý îB‹ŽšWyÝRèÎú•Ó§% –³±¤äìæ5(uKl¤©e¤Ï™giÒ‡§PCA.:d*¹ÓN³rÒ¡°ÊuƒˆìÚY±Ö$Ù©v4¥°Œ]'¨©[0H‡ÐlY%i8Œí;P8ë5lu€q¨¥:–ØÕsW€Ä¢8dý«{¾k+•¹ô,¬ƒ“³Œ×½ÍÕÍÓ•±ãè÷/G•|gÇΊU3¸°a^NÎCKìxþÂx‰IóëÔ®šÎíãìÖX"ùþ‡6ªË´«2âéçèÎû'DéÉAÃÉiXÒòõs ÆÑÇGVZ(ë#FUœeeµˆ6S!Xã¥U—:yÖzÊâ †R´IÚ¨Ar„5)ư:³¬ ”J!‚D0ÆÉ “f ìi/ Ç9¹Í¬ŒrEs¸ârÐ’‚ŠèX2+½dowÎu"¸Y[ŸV*Îwg¯›§›§/mËÑîôóô÷òÙñÍ´ë7³£ÃJOŸ^¤uÖ7ws”VTÞw£ççh®¸ÛFÒž.žnœïµ:qLpòZVΗ—«–V†:º²‘GJÇf2¬ë+(â ("€"”í(sªN“r1§+K(!¤íªŽ­¬Í•éNѶ3Ž4Õ’“§ Ó.®Óâ â3éç裱Öz6±±)Ï:¦wŽu]²N¨X3•¢Ñ>½‘½^7#ã£4y:¹ßç´:ñóÜ}ïG/O£ÊÞG«äåª2çhÈù:¹ ogÅöuŸ|úõ«¦°{x»\ #Y¡çãj¬¸èÒ¬§‹§›«;ìGNœW<–ó¤åêå•…áÏ­–Š:1ÛSJ±¢C9Q°€E ´¢°Î©:OYâÊÀÔåYea;«+k3txS‹µtg ,Á]s½DxHÞ±gÓÍÔÇã¡Õ÷‰NyÖyÜv9Õqɪ”‚êÚ®~©‘½>7WÍñÑŠ”<\¹×»Ïhuãæ•<»û×ïå#Õòsª©\éYÖåéåìø¾ËŸn˜ëÖŽšËvñv¸@Êäyþ‡ŸžŠ¬¸ÛJÑ®.®^¬ôíGNœW`<·'7W(¬/ uee"”³ÖU*%ØÔÁÝgIë*q% ãi;b«£ët£) CÇ0Ç GD 9 ”LoQ(‰ŽqÄ6u.®^¶;c¡ÃožÄÇ4ë<ô†':®95gX.¯¡j•Ö>•‘½VÀG##c«)¹ºyrûœö‡N^q—nü÷ïåo+ÓòÍQJçA‘‡stòšÞÇìk>2<ñÓ±·wv°ªÊ›Ïô<üíU—iVSÅÕËÕö£/N+ˆ[F¼½\¦–ççÕÁgI±ÛSJ²Œ5ˆ.TAX ªa—;ªRz¤r´s¬CV;M])¬IÒ”§h ¯#@âY)6¦9Ì'DÆÍ8tó!†=|”NÚÇS«ïžÄ·*Vxß9Ç:°a ZU¦uw"³¶³ô¿•ÀÍÆó~}©mÍÑÊ>Ü-œx0Ü»û=×ïæo3Ñó3ª©\è4ØO7G4ïcÆö\øÈÉŽ½jˬÞ.ÝaA8;üüì+&7HÖUÅÕËÓžªËÓŠ‚šÑ±¥åêå…Ꭾ¥I§D\A²eYÈe.B° DcªjËÚtž±Ò€ÎU–\A“¶›:SX•'JSŒ++VÄV8É©¶s¤ó³YV“Ÿ§˜Cörv18¸êu~œö:9§YçpÇgv&´­EÕõy[YöšmÛÎàhädltb¦7G0ûP¬zràÃsíìts_·¼¿KÌ5Q—: 7ÍÑÍ;Øñ½‡:²c¯Z•Ö[·‡»X UÉóûüüì+.6ò¬g§›§;íV^œ@Øym š^^žaXZ8êèÀŒÝhÎ’¬K2²*°¡¶$W\îÓ¤õŒE#ieÇ«¥5‰Rt‘±EerÊëX†’”šSç);:¨`Ú³ª¥5‘xÝǨTõâàhådltb¥77O)¯f5‡N\YO.¾½ùíÛƒy¾‡œ4W›‘ç¿8cÇõµŸ%qÓ­pÖOwk€0Ѹ;üüè¸Ûʲž.®^¬ôíGNœØyo š^N®QX^êêÊLŒŒv4gIÀ ²p06Å0FwiÒzÆÛPWQœ«<è¤j´Jk¢R†9Õ‡ ™XJQ˜ç<󬱳iY“—¯”C5Þ.ØcŽñÖëMòågŽœÄìîÊëÒ³κÀ¼z5ŽÖC¾O—73Mñ¶Êhóßž}yR;åöçÛÖ·=»yßÎï󳪀 › sÛžO­äzÎ<”eÏ^¡ƒ†íáíÖÁwt\ôyÒUÇÓÍÓž¨éÓ€À-£léyzy¥axsêêËEí¡§IÐZ$ @8mH¬¸Õæé¬ŒE@¤«#X‚8íV¤ë¬F“«´++– «™XZu›šSžU–6o¢rõò Ô;¸»¡ö;ç×E}óØ”ägŽœçlêÊê‚ò³κÈèF±vC®o€®fS±RÇžüãëJ‘éË Ë·«hW·¼ïCÎ5U*h:1{Âw«äú®|¥eÇN¥+¬·gf°W'ƒ»‡; ôy¼ë“§—§íR½x °òÚ6Η—«”D-uuebŽ„vÈÒ¬è-fÊâ((c¦jËÙu¶  ŠJÒ5¶Äv3gJo¬«Cˆêã•Ò³£“N³JœužiVXèÖá9zù2¹®~þôcޱØëNœ¶%9%ic§>;;²ºÆ´¬D®³º!Ѭ1Båð ÎÈØÙ#CsÚêÊ‘ß>L7>¾¥cN¼Ïîà5A€†F…c;Ôò½Gb•ÏN¥*å»8»5œrÜ=¼9Þgo7rtótg]ªW§!°žkFÙÒòõrˆ…ណ¢Ž”p0Ò¬«-fV²ÔԊò:km@)*Ë.Û$µe]ó•eY)DqÊëA•å§Y¥XÒ´qÐôC¡““³.tqçïàôÎ;çÙD¯N@“’´±Ó›Ù]P^7†¬ë¬žˆtï(ÔÙLs•9ÛÔдÔ“Ï|ù0ØëéÒTëÁ¸{x T—254+Þ§•éë>j•ÇN¥+¬7g^³†xû8³ 0Îé*N¹:yº3¾ÔdéÇa‡ž±±¥æéæ£žŽ¬¤U–Žšt DæSdm¨+ªjËÝ7ˆ¬r¬ÄdàÃjN»çÊÔ1´+¥fVšJ³K\sFÒÇMцNNÎ2®k›ÑóýfÇ|ûh”éËS’V–7͉ÇK#«‘ц6•µÕÏÕ¬q•"ØfFÆË.F… >œž{Ç.ß_J’~¼ƒ·ˆÕš5ˆïOËôœùÊW;ék-×ÇÔä´>¾<ë.ÙÓÍç\ÝÝßb•éË ‹ž°±¡ÍÑÌ"U–::²ÑVI;diVU¶Åвe"°Ú°Æ¦Æí:&ó¶Ä”VT˜â íˆÞ“®ùƲ­lB+¥%ƒ«Kγsr žhÞèzyúY8»xÈQ×?£çz5BN]ÔJtå›4qÆòÇNSŽwiÖiº!Ñ i[y=\Ýzçæ9Ûª §;$dhZ})´÷Ïœ޾…$ýx¿_Z€24´i*Þ—™è§ž¤g}+•Ëõñuë8`äòuñšÃlíæó.kóôg}jW§€žzÆÂ9º9‡F³ÇFVZ*Ë8 :M° s+9ŠÀ­bÌÎ®Ž›ÆØEeYÄ8½e]ó£jÛdWJNGHÎŽ4&—!µŽXÞúžn¦N>Þ!G5ÍéyÞ”;ÓŸuR9‹ž8ÞXéÊqÇKN¨çtC¢ã}àõóuTóêùrE‘±²T£BÐFo=ã›aŽž…$ý8¿_ª 25RC½7ÑÖ|ñ†7Ð0Ö[§—¥ÎØ!äêä5†Æ šüýßZ•éËkšÐ¶t9ú9§J²ÇGVZ*Ë[†tTs©s†Ô6ˆ55aŽ–GMsÀ‰À‰IVYNImY[|áxÚ†9ˆôQÒ³£'Iè¹ ã–ÇCÓÏÒÉÇÛÅ”Rt5Íéù¾”PãÓŸ}½8ã›G¯}9N8Ý’‰£tC¢ å}`örvïŸÏ”<û¾Sdlè‘©¡hÏz4õˆa±Ó½¦ý8·'W$Ð`kb2¤«zw œ ï eÖ_§“©Î#rtò‰gnŒ±Í~{ç}hËÓ–+÷ç*Ë=(Œ´U–¶Úštš`@æVA°Œ6¬F$gvGMã¤'Ie;i$µ¥]óãVÛk+IÒJ:Pt ¼ë4¹ ¬r㟧›ª‡»ŠE'\ë—Óó=6©Ç|»ë:õã›â•厜‡t²VnwD:¯`öröo—Ì•Ü}†i4Ûb24i#]ódÞ!†ÇNæ›ôâܽ<¢ûÍ6–•$[¿ÏïÑÂή0rzyzSaœžnŽSDa:2·=ùïõ!ã° ʦ‡?G9iÒyèèéEYH™‘çm9‘Ð ¨m£`E—:º<õŒAPE%Ye;Ľe]ó•efÛk)IÖLÝ+:8Òtž³ÐC9å‡D1Ðôóu"ð÷q¤ërú~g¨”`zrô+:ôäNgîœþD©óú[ “d9Û``Ê’žäiëc§c#täü<£A„æF#7nîäâØ¸ÁÉèæès°ÎO7O)¢0ÎH®{BÙßR•éË *5Mn{ÀL©­×ÉØ‹ÁßÀ:² òúÞO¬Ö*Ý8úvºñfVsÇËŸ^RwÓ*ɯ“­)×ÇÙ¾vôü¿K§Ë2ŸÓfC”ÉÀÓ#!\a¬®Û:®YxÒUL0æFb¥Ktòô$pª0MXÕ6Tˆ¶h¤da²2ë 3¤©9dêDVJ‘[aY(í‹dfØÄVGž°ØÃYÒBHÒĽcnœåhضÅÊVU“:N³£ÍgI¹éd}c—Ÿ£ŸŸVëäëAÁß牤è<¾·“êµ™[§Nз^.ÊÎx¥XóëÊÊÙßDé$n¾N¸§__Nvô¼ÏC§ËJŸÓbŒÁ•„á©•’¬0s†«†ÖTÓ XƒEH‘ÑÏw1àÂ5dèrêy<醜lÈÖª¹\¦¦Ó¤™²‚ 2²ÖR#(«+b3m´l51S@jÓtÖ1H –T™£±¢Tíoœo 1Û9ZJ¢Ót­I¸Öt–³ÒèúÇ/=áÏ«uñõ¦óûøHVU5Ëêù^­Y”õåéÚ5ëÁÙYÏk}yж7Ó*I«“©)×ÇÕÓ½;Ðß/ËòŸÓb¦3MŲ”dešŒàAª`¼©9|5º˜aZð´K,0bò¢l44ÞrÃ| !V4à®±ˆ5'GŽ’Ûa*ËXCaYXìPm£¨•jƒTGMdí¨ŒeY ‘ Íë*QÃ"ÖU’Ž): ’ÖzYXå…ùùõn¾N´ü©:æõ|ŸV.TõåéÚ5éÁÙG©.}9ж:tÆ“FêäêJuruo}7Ðß/Ì ïÒfF¬ÈÒHÔÊV*C²š Ë¬º2ì(àd‚(Z6I"ãÏ7ŒW3ÍŽÚÓ0Œ¤]YuœA©º9dt–Ä V1•…lDŠ Emµf”0ËDtÞq° VU–S±œÀÕ­ïœíVÛ"ÒU–›¤gF“¤µž–VsÍÏxc£uòu áîàYT×/«åz‘r­×—¥XÛ§tg•a^œœ©NYRXéÌTã§LÚn_£›¡©~{kìáìß?ÎJïÑfF†*Óˆ0ÀŠl 0 J°rÊÉO¶¬ÊÕˆÊ+*Âm… ™ZŠ:ÛK`aZ]Hs¶57GŽ’ÀŠ`EDã´ee£¶ À ÄAN  Ù(šÀ$P ¢’´‡Gªõ•w‰Z6Œ1IÖt:N³¥%çI¹»)Ö9¡xc«urô âìâYS:çô¼ßN(ÀôåßYÓ§& §$m,tå#g}tFèæèŠ_šúÍ;8{7Ïó¢§Åô +32µmŒ0"‰%HGR´ûjÌ­XíKYÕ'¶ µ™]‚…ƒ­´#+Kâ MÑÄΉD2ÓZÊËGm%Ycb(•hfØêĘ`jÉDÖÚ€e•d'l9«ZUÞ#hÞÙ“¤™Ñ:R^t››²gšŽ:ž~¤N.î,¡Ò†¹½?;Ö‚öéÞ ö§N<¦¥<évË<ÝDÎí7š7G5â—ç¶óN¾>­òü÷âú,ÈðÄ;`E 0"peGFÛj̦‰…eXžÚXY•Ðm ¥''mM¶„eiueLq©:¸éÑ)ƒ-2° “¶‚޵¶ÓŽ.F:†:¶:&M](šÈ;PVQYVYqÚ±oiWx£häeQ3¤«:<ÖT“ž†Rçš6–:7¦Éæý'—‚® rû¾gÒÕþ‡ë=Êð¾ö?ÌwÏæºýKoŸ‘Å÷^—>¿Œqý—É4çX¸Ý÷g¿=õ‡êãêß?Àøþtxb Š0"› ’¬‘Ö˜ƒX«V;P¬ªÓÛ+:: rÑ'm‰ˆ57G§VTÄ'AÓ¢S+-0e¬¬'b ««m±fVM¶¶­¶”VÑ:&³¶Ô”Ruí´â tZ5Þ#hÞ9'IÐLé:G—&æägšU—>ׇíϧáúÞq¯8úý|/¦ñ}ªúÏ¡‡Mvü¯ÕüÞñÍúOÎwÊý?øýþv°œ}œZη=Ò–…u‡êäéÖ>ƒãú‘ܱIaM¶†Q#+-1‰ŽÚ…eZžÚ˜2ÖttÛf)I‘I8ÄÙZ\çjn””J*ëL¬µƒ­mµul ÊÈ1ÐÕ±Í5a](šÎØÒ£¨¤«1ÛiĽ¥]⣚u›‘'YÑåçI¹³+9棎”íàô*™¯·éñ¾>nÏç§·Ùòž¹ýçoæÞæ³ûäþSìøú?3üëî4éËÏáîmË~tÖ绚VÞ_£—¡ÇÄ|žòÊèHhÌ u´0"ˆ!])ˆ5ˆjØê[FÍ-±8"…ШΉ[,A‰º<º°r›£‰'Ž’Á–а­¶¦GFØâ̬›l›m[b2 £Ð”Md¨#¨¤«1éb謭¼Bñµ`BN³¡iÑ(<è/:OEŽÎy£ic¡ëäꆅùÍvöy—ε|žæëô8¡®~¿¯á{›çö?­þkú·Oá¿ûåÇÊóuñ££#xY)H×Y~Ž^cã>Oqet,­‚ÇG ¬QÑÒ˜ƒ9Ž¥´ªÒÇ:RÆŒé:8‰mŒM•¦•Î ÔÝ(:tš2:šea2ÎÇAJ#lqfWr6,641Õ%eκ‘ÓXÛEu•d;l8ƒ]•·ˆZ6¬D¤è&U”gG'¢Çg<ñ¬±Ñûù}ÊãßKÛü·—÷>W­Áw5¦ñëý7Î}³ŸÖþ£á>ëÏêù¿Ç?køW?ˆùIóÝ9¤é=g_žÉJJŽ£›£Yù —ÚYY +Sm‘Õ±ÐvÔAÈë,A¬A£¶hÕ$v6t¢)Ø RrAÄB¯49Ä•eYÒ¬¡•ÐÓP;fd¢VÇuwÃCQ ¦ú‘ÓXÛjUuβ¶v.‹J»Ä//®–ßMdøêûÝÃò“ý5ðoô>=Fw›—k}J|D>¯æñ·úß•íŸÙ>3å“÷|{¦=[‡Y…׫\ýßG›“YúÿØÿûtý â>Ÿàyõüççý_§!:IɬlISYkó_YùC·—ØY] +V8¡ )†ÐÀŠ!‚4è’ÇjÌ D Fí 0:³¥ l[N²"–ÛB2´ÔçjU•gJ²†VQ!…`ËGbÍ:$lD—JB“«ª*Ã;êJ&¹´ªº J³Ž‘±.‹FÛÄÿmüKõìî¿™~¡ò5ú'ç¿Sãeú•åûŠÎú¾ qú~§ZK×ózçæÇse_οGüóYå¼:«í=ß+ÕÇ_™ùßW9ð=:ú;çåwö{ºÏ7Þû>ç.¿‘|¿é—§Éù½¼:É% Ö6†¤©¬µù®ãæ6>oaed,¯X‚Œ†ÛQÛQ3+¡1Ù1 XZѲKb,mIÖâšut¶Ù&èãPÃYgZ´¨¥&.¬+Z;d¤ãlg:»•;VÛV **Ã:êJ&°Ò‰D•d;m;l=÷ÎÇzìõ>{U}µô¼ÞÇÒéðÞ¾¯Êó$ŸO¾'ZyÑÆþ“ËàéN¾ß"y×ÜûÙÝDü«êkôËSÐô^GÃ'ëvüoíFÿ’}ån|;£“y¢29ÖiÞo¬5amgæÈ>oYudÌŽÅ"›cDÌŽ”äÛÀê‡B@ì.­IÕÙ ë)Ù6Ú¦èóPÃYÄ¥Z´i§D ¬U…4ë:ØèÔGAŽ¡ˆ¬TU—:ëJ&°ʈê3e—¤F÷…÷Ïžñ½BN“ éÒpÓʲK\óFÐÆÛ£›¡—žüƒÑNGίôŸ%í×ìÞÏå^©¯£øyù8úoámgÑñ§ÍJ@gVR4FÔÏ7rkë?>Aóú‹+¦ezÄ`VŸmGÌŽ”Ç ê…Ú'bu`²² ŒVTvÂÛj›¥*¡—YÄ5BÒ°ˆÞ5’² ¬C- <蕃.”…;VÛVTU—:ëJ&ð1Ô‰D4‘´Gm„G¢Ñ¾ùóÞ6¬¬±:N’eYPtqyÒIc³žXÚ8èoÏÑIÉ×ÉYæÙÒz^W{z/çç´ ÛÄ ¼±¸à ÜCXÖÑœšFºÏ‚qóú³«&uj;d`E8:!X :$1Úƒ$ Ñ ¤vÂàä•X ÊÑ¢–ÄT©:•C gj6•KFñ­:LÓ‚(««tJØêÔJ ÛF0 ¥Ëõ«®ð1ˆëNVˆìD±tÚ6Þ!hÞ€"%D¤éVT^U’XŒçš6Ž:óÞ—¯s# {¸{iðÚÇcÉ÷ƒ†NiÒXÜpÙÝÆk*S²>³©*9ñnœÊé™ZŽÙ2Óí‚ ÁÌR“‡ØÈ!¨‚ tsô$2àˆÕPkJÒ­¶–ÄD©:ƒ d05J¥¡xQ•dj€„*éLA§f›lMIÑ6Ù†:‚º—8#;ìJ&ð1Õ4¢gS•¤ 2ÈØM£móç¼/YYbt$Ʋ èâò¬’Ûå¡›Âôœ|‚XÔ{8»aòg­‘÷Ïa«žo<î; êã5•ʲjIõŸÿÄ, 12A3B!"0#$%ÿÚýŽÕ£ûQÓÍõýÓù ?ªâ#øú/§öŠƒûRõ©¥Aý€þWÑ7k·Ò—êGö`þ ÝS‚ Njhþ\?Ÿ¢ú/¢ÈÍÅ}ØWÑ>‹è¾D•ôAô_Eô_Oã踻ô_DÕRÂÖ%ÙNËrWÑ}B#ùú'æÇè,v­ÚŽžo­v†«ˆá~qSj~Úš?a“ ÞÇm˵9j67rŽNM˳ df𜆠Æño,ÕRѬ K²–æZŽS³cô±Ú·j:y¾µÚÉÂüâ¦Ôýµ4~Ã0ݬ;"Ÿ—jrÔlnéØ È'&åÙ‚†²3q‡#q¸¡p³œ\]ÕR†°1.Êv[“-]NÍŽÐXí[µ<ßZí dá~qSj~ÚšTØfµŽÚ—jrÔlnèà'!—&åÙ‘¬·7r67Å¿Šâ膪–`b]”ì·&ZŽS³cô;VíG׿ú×hj¸Žç6¥í©¥M†QMØØí¡ùv§-FÆîQÂrrn]•Ô5‘›Œ9 ŠÚ-ââ膪–Ý`b]”ì·&ZŽS³cô;VíGO7×5\G óŠ›RöTÒ¦Ãhfö;h~]©Ëplfèá9äÜ»+¥ e¹¸Ã‘°Á¼A°[ø®.ˆj«aMÖ%ÙNËs-G)Ù±ú «v£§›ë]¡ªâ8_œUÚ—¶¦•6næÇm˵;5º8 È'&åÙ‚†²ÜÜaØ67ËEœââ膪¶Ý`b]”ì·&XŽÉÙ±ú «v£§›ë]¡ªâ8_œTÚ—¶®•6Cv6;h~]©ËQ±»£ªr ɹ~dk#7ru† áÉÙø®.ˆj«aMÖ%ùNËreˆå;6;AcµnÔtó}k´5\G óŠ›RöÔÒ¦ÃhfÆÇmNÔå¸67tpœ‚rn]™Ësq‡'Xaׄs6~+‹¢ªØSu†â_”ì·&XŽSö±ú «v£§™ë]¡ªâ8_œTÚ—¶®•6E7sc¶‡§jvj63tpœ‚rn]™Ësq‡#aƒx¸#g⸻ Ul)ºÃq.Êv[“,GdüØýŽÕ»QÓÌõ®ÐÕq/Î*mKÛWJ› ˜fö;h~]©Ù¨ØÍÑÂrrn]˜(k-ɸðl0qiBàŒóñ\]ÅV›¬7ü§e¹2ÄvOÍÒÇjݨéæz×hk'o6¥í«¥M†È¦nlvÐôíNÍÅÝSË“²ºPÖ[“q‚†ø8A?ÅØb­aMÖ‰~S²Ì™b;'æÇè,:·jZyžµÚ:ÉÂüâ¦Ô½µt©°Ú¹±ÛC²íN[‹º:§ œ›—f ÈɸÁFÃâ‚2p‚3Áªâì1VŽ¢›¬7ü§e™2ÄvOÍŽÒèږžg­v޳ÅùÅM©{jiSa´3cc¶‡§jrÔlnèá=äÌ»+¥ dfãFÃñ‚¸ŽFyø®.ˆb«(¦ëü§å™2ÄvOÚÇicµnÔ´òô]£¬œ/Î*mOÛSJ› ˜nÆÇm˵9n ŒÝ' œ›—et¡¬·7(Ø`Þ“„ž~+‹°ÅU2Šn°Ýeû'e™t±“ö±ÚXíFiiåè»GYâü¢¦Ô½µ4©°É†ìlvÐôíNÍÁ±»£„ô“2ìÁCYnn("Žƒ&ÁaÂj3ÏÅqtCdPÊ)ºCu—ì–eÒÄvU6±Ú‹£4´òô]£¬ñ â¦Ô½µ4©°Ì3k´?.ÔìÄlfèá=äÌ»+¥ e¹¸ÁFÇA“`Ââ8MÁž~av«@Ê)ºCu—å?,ÙÒÄvU6±ÚXu¥§—¤QÖx¿(©µ/mM°Ì7k´=;S³Q±›£„ô“2쮡¬·&ã 6s#<üWDSU ALÒ‰©”ü³.šh쟵ŽÔXu¥§•¤QÖx¿(©µ?eM°Ú¹±ÛCÓµ9n ŒÝ' œ›—eu e¹¸ÁFÃÅÁÁÂj3ÏÅ .ˆ¦«GQLÒ¬¿dü³.šhìªmÉv‚ësK_+H£¬œ/ʵ?eM°Ì3cc¶‡åÚœ²ÖnŽË“rìÁCYnn0Q°Á“`Eq&à£#D0º"š¯ fÜMM“ò̺i£²©µŽÔXuniéåiu“…ùCö§ì©£öCv±ÛCÓµ9m¬Ý' œ›—f Ërn0Q±ÐdØÌ&£<üÂèŠjº(.Í!ºÍM“ò̺i£²©·%Ú‹£4õò´ŠZÉÂü¡ûSöTÑû Ã6±ÛCòíN[‹º8NA93.Ìe¹7(Øè2læpgƒD0º"š®ŠáLÒ¬ÔÙ?,˦š;ª›XíE‡4õòt]¥¬ñ~Pý©û*hý†a»Xí¡ùv§-FÆnŽNM˳ e¹¸ÁFÇA“`G0p›‚Œph†bš®ŠE3Hn³Sdü³/šhîªmÉv¢Ã¨Í=|"޳ÅùCö§ì~ØfµŽÚ—jrÄlfè꜂rf]™Ësq‚† ›xŽQF84CäE5]2œ™¤7Y©²~Y³¦š;ª›r]­‡Qšzù:E,IÂü¡ûSö?Wì3 ØØv‡eÚœµ¹G È'&eÙ]CYnMÆ 68ƒ`ÁÌ&¢Œph†ÈŠjº(g…3Hn³SdüÓËæš;ª›r]­‡Qšzù:E,IÂü¡ûSö?Gäf±±ÛCòíN[k7G È'&åÙ‘¬·7(Ø`ɰ`®'a7àÑ #‘ÕtPÊrfÍf¦Éù§³æšvê¦Öl:ŒÓ×ÉÑv–'‹ò‡íOØý_‘˜nÖ¡Ùv§-FÆîŽNM˳ e¹7(Øè2l9â8MEçà†«±MWE §&i ÖjlŸš{>i#º©·$ëaÀÍ=|ibx¿(~ÔýÕù†íaÚ—jrܺ:§ œ™—et¡¬ŒÜPEMƒ0p›‡#!„s•tPÊ*žÝf¦Éù§³æ’vê¦öl:ŒÓ×ÈÒ)bx¿(~Ôý•5~Fa»Xv‡åØ9j67tpœ‚rn]˜(k-ÍÆ 6: Ø0sÄp›‚Œph†ÈŠJº(eOHf³SeS4ö|ÓNÝTÛ’u°àfž¾F‘OÅùCög±ú»#0ݬ;C²íNZŒÝ' œ›—f ÈÍÆ 6: Ø0sÄì&§#&ሤ«¢†xU=!šÍ]•M©ìù¤Žê¦ü“­‡,×ÈÒ)âx¿(~Yì~®Øfµ‡hrv§-FÆîŽNM˳ ddÜ`£c â ÁÌ; ©ÈLjaˆ¤¼„PÏ §ë†k5vU6§³æ’vê®ü“­‡,Ö¾±OYâü¡ùg±ú»#0݇hr:œ¶ÖîŽNM˳#YnMÆ 6: ›aØLÃ‘Ž Â9Iy¡žO× ÖjìªfžÏšIÛª»òN¢Ã–k_X§‰âü¡ÙfïÕÙ†íaÚ©ÈFÆîŽ©È'&åÙ‚†²ÜÜ`£aƒˆ6 ÁÂnŒph†ÈŠKÈE7<*Ÿ®¬ÕÙTڞϚIÞÎÕß’u°àeš×ÔE¸§¬ÖÝUÚ–Õ&‚w´f·°bx,â~ ]Ø9w°3g`®uË‚(dæF²3qAl0q naØLNG+ƒDÜ#°Š+ÉNMÏ©zâž³[uSj[Tšw·µ½ƒÁgÃñîÁÈÙØìŒÙØ+l. ŽdbGø¹ 6 ñ; ‰Èljº£°Š+ÉNMÏ©zášÍmÕM©mVh§{;[Ø1<q ?݃‘±Åƒ6v äË‚(#™‘Ÿðr68ƒ`Áϰ™‡#&ሢ¼”äÜñÊ—®)é5·U6¥µI íío`Äð\0ü@Ž‚ºqglìÈ6 —$ ŽdbEæ 68ƒ`Gi'nªïËæ „'³ÓolìÈ6 —PG21#76º ›aØLÃ‘Ž Â;GŽß©òXÛôLoÕÎajú*ÿçGÆ.T¾"³•_…¥GâªÐû[ö*?ê8|uZ¢§ˆúj»?³Gö©4‘ßµwå‚óh³³ÓolìÈ2Ùp"‚(#™–æãl9âvpäcƒD0º"Ž<Ï ÔZa«éö”¼ZòðhS§M­^pÿù.pûG‹N¢o‡QЇ”…F=|í0ß$íRi'nªïËçÈB{=6öÎÁ\ƒcv\C'21#7(Øè8ƒcpsÂnŒsðCUЛ–0ýþO–+±ô‹GÙô?oñüá‚ÖøÞEJB—È…_äÞ#Ü©øu OáèÓ¥òô­V“é¯7ê絟޻>Ù¤º«¿?ÌÁ¿³Ó‹;g`®A±».PEìÈÖ[›ŒltA±¸9âv0äcƒD5]/Ì­Ay>y®Ÿú%Q§÷:§Šà×RøôÙJ/Ù´ªÞ¥à±Ê—QŒeZì¾Cûypý?)çïcÃ_]ÁÂ)'nªoËçȳ³Ó‹;g`®A±».¡“™Ësq‚Žƒ&Áƒž'a3G+Ÿ‚GaUb¾Áú‰J°ò>.6¿Å{SCÖ}í¾V£Wÿc÷7Æø¬}v}«âÒª¾oÅoŽêÿG/$Ÿ½Œÿ¥v–¤º©¿,œ"…Ýž›{!v ä ».PEs#Ynn0Q±ÐqÆàç‰ØMNF84CTr#ÇÑWu4ø¿5´*ù~m'Rw’¼$UL®ênò* ”éUþåYÿe*nþ(9x.!ïkŸCäXÿ!WËv|ÓGuSn™Â(@³³ù{g`®A±».¦£™Ësq‚Žƒˆ6 ð™‡#&ሤ«¯¢cKœâ)‡Í)ÿÌicÇÏÃxÿ«\7è?ô~7ý|¦*ãû7gÍ4wU6å‚ó„W³³ù{g`®A›²àEPG25–æãlnx„Ì9çà†«òAªµ5ú@Úoy{¾ªŽ&§‘㾉jû§ÚU:DŠ*|pð©ôÏ×ôÈTôUj/¿ê¾(^§ŽY_Ìñ¿Lý¿Óè©S/}j§AŠ_柯•T=ß-Wþ¾S¿·äù¦ŽÊ¦Ö‹Ý`³°Wäm킹Æì¸A95;25–æãMÀßÿ3ãþãã~oÈÿçSýS÷ü}*+â|§žï+Ëgé|¿Çü‡Âù>"øz´Ùñ-4<ï?äüVQó|ÿ¤Ï ô7Ä>mO¾OêËÈ?ØeøŠhìªmþ‡ YØ(lqglìÈ67eÀŠ É©Ù‘¬·7(Øè8ƒcp6ø:ß§ðíò©|å&ü=Oßy2ß«ó~‡ÆyLgÇ~­â¿ïàø”Ýáùÿ)ñÕªyÿ4ßÛøß/AÞsã»Åøãÿ‡Hô>á ^FFΚhìªmËîÂ2žÁ_‘·²`®A±».PNMNÌe¹¹ÐQ±ðdØÜv—›V•ù¥ÿ3ä§V$ÓóêŠ~gÈñÛåü½)QójPu’­ä&|ï”ÚþB­vøŸ/_Åe_–¯U¿¾ªâü…OþWÌySiŸ¹Õßü³ö¿ SÿÓòõ?â_õ?Q®ñM<3¦¨|=*TÙE´êµãê¾@ÿÓäê1¾_”>Úƒ.šhìªmh¼â‰ì68³¶vyÆì¸A95;25–æçAFÇAÄx„Ü9àÑ7äE%X åáù‡Æ©[Ë}s÷ÿ> _±SþÀ/#ÌýŸ‡ä|JëÇù'øîñ>n—¿ô!úU|Š¿Uä?îsréb;*›YÁyÄv YÙ °W ØÝ—A97.Ìe¹¹Ðm|A±¸9âv0ôr¸4CTr"𮾍;ùûrñ_ý~:¿ßã~¢ùŸ/úÔ®¿p¿r¼Ÿ-Õ ê}UCü·.–#²©µ¢÷bÀ„ö:68°fÎÁ\ê2v\ œ›—eu e¹¹ÐQ±ðqÁƒž'a3F84CäE%ä"†WÕPўʇçOÓÈó w:¢û×Þª¿ù.OË2éb;'íþ‡$Ogò8°fBìΣ!7eÀРɹveºËss £càâ ƒ×1ˆuˆ^*Ñ \š#Ôqê…ØúcQ—k˜Ä:Ä/è´CáŒËDzt/Ô}1¨ËµÌbb‚ôZ!ðÆe¢=G¨_¨úcQ—kŠºÄ/è´Cá#æˆô!Ǫ=Æ*Œ»\ƺÄ/‹D>òeÍê=лª2íqWX…â1h†cÉ—4G¨ãÕ ±˜é—kŠ!Ö!xN1h†cÉ—5ôz{.ÕQ—kŠ!Ö/ Ö-øcÉ—4G¨ãÛÝUv¸«¬S×€ëˆ|1äË‘ÄzŽ=Qî­2íqWX…à±Æ-øcÉ—4\=|T.Õ¦]®*ë„Ç´Cá&\Ñ„8õBíUWu‹ÂcŒZ#.òeÈâáèCö÷UFUÅ^‹ÂcŒZ#.òeÈâáèC›{«GÚâÝxLqˆupǃ2äq„1ouh늽„LJQ— y2äqpô.ƒ6÷VµÅ³„LJQ— y2äq…ÁðcÛÝZ:âÝxLq‹DeÃL¹\=cÞêÑ×ëÂcŒC¨ÈÇ“.GBÇͽգ®/%Ž1£.òeÈâ=c6÷Vì^bFF<—#‹‡¡pcÚõ^KbÑpǃ2äqpô!Çö¿9Ž1£.òeÈâ=còØãˆ|1äÏ‘ÅÃЇü7X´F\1äËš#ЇòÝbц<™r8B~Jðbц<™sDzÆ>-Ž1h‡ÃL¹¯¨ãþ[¬C¨f3. 4| 8ÿœÅ¢£Œ_æŽ?åºÅ¢&\Ÿ?è¿Ñž£ùn±h†cÉ•ÀhõÞüçX´C1CBá’®?å¹ð| |TþfWð1ÇòÙˆÿÑð_ìøìF\1™Ob:ãþ[Ñ;ò!˜óO”…ÝÍz-Ìyò6|èþ÷ç:Å¢¹5õ–¼'Xµf1ëê?è1jÌcú¿ÿÄ 01@APÿÚ?ÁMVÍíynx²›0zFÉÌhßòÛfž,¦ÌÙ36<·Êl²=g4cí[†›)³ªG4cîÓŸSe‘HØ#Zs6<·Êl³¬bÂ5§h£/-À²›0z¤paÓÎ>ѱå¸SÜ1aÌkN öŠ2òÜ )ÈHØa5Vœ}Àç/-À²›,LØ&ªÓÎ>ÑFËe9½"°š«O8ûE.”ï†ÁÓÎ öŠ7K)íGUiç{E¥ÂŠ-„ÕZyÇØÂÒÎÙ ØMU§œ}Œ! ÒÊ{Fl&ªÓÎ>Ɔégp·j­8<Ïc 7Nù°F´àÏh£tøäÕZpg´QóˆàÂj­83Ú(Ý>3 ª´ó´Qºm3a„kN>ÑGÎ#ƒÖžqöŠ>›Öœ}ÀÝ>ƒÖžqöó¼l0öigìý³ë¢ˆôÎñƒ‰+òq >i²F‹Õ >iƒ“[ >i_³ö~ä”^¢Ó¨Âûg3UûSó8s?!öHÑ? }²4}Ò4}‡4mÿÄ8 0!@Pq1Q"Aa2BbrÁ#R`‚‘±3cÑðÿÚ?«k4!°£d°Ð©k_Û€£þ‰m`¡æ­…%†…KZž18 =¸êÛX)/š¶l–-jxèŠ=¸êÛX)/š¶l–-jxÄà(ã;Õ¶°R_5l(Ù,4*ZÔñ‰ÀQíŧLÚÁI|Õ°£d°Ð©kSÆ'G·3k%óVÂ’ÃB¥­lNŽ3±–3k%óWÍ…%†…KZþÝG·3k%óVÂ’ÃB¥­lNn-:fÖ jØQ²XhTµ©ã€£Û‹N™µ‚‡š¶l–-jxÄà(öâÓ¦m`¤¾jØQ²XhTµ¯í‰ÀQíŦröÖ jØQ²XhTµ©_Þ÷GØËN™µ‚‡š¶l–-r¸ =¸´é›X(y«aFÉa¡RÖ§ŒNn-:fÖ Kæ­…%†…K\®n-:ÖÖ kûØQ²XhTµ©ã€£Û‹Jk5l(Ù,4*ZÔÄà(öâÓ9{k5l(Ù,4*Z×öÄà(öâÒ§FÚÁCÍå%†…KZž18 =¸´Î^ÚÁCÍå%†…KZž18 8ÎÆZTÀcm`¡æò’ÃB¥­OœÜZc,/n(y¼£d°Ð©k•ÀQíM…¥L…íÅ7”l–-jxÄà(öâÓ9{k7”l–-kûbp{3caiSa{qCÍå%†…K\®jl-*`,(ÚÜPóyFÂ-jxèŠ8ν°´©€°£k€óV„4*ZÔñ‰ÀQìÎÒ¦¬mpo(ØCB¥­OœÜZTÀU‚®Í[ ˆm-jxÄà(öfÆÂÒ¦®ÍåÄ4*Z×öÄà(ã:öÂÒ¦¬mpo(ØCB¥­LNfhQ°´©€«MO7—ЩkÒ”q²[J˜ °QÊy¼¸†…K\®Xæl-*`*ÁG7—ЩkS¢(öfÆÂÒ¦¬Ï7—Щk•ÀQìÍ…¥LX(å<ál!¡R×+€£ØŒ ’ÚTÀXQÆPó…°†…K^”£Ú›%´©€«§œ¤6–µ18 =Ô6KiSV 8Ê—ÚZô¥ÌØÙ-¥LX(å/.!´µÊà(öfÆÉm*`*ÁF×”†Ò×+€£ÑLí’ÚTÀU‚ŽS)qk•ÀQëM’Û-LX(å2ÚZô¥gBâll–Ò¦¬r™K‹\®Xæl–Ò¦¬r™K‹^”£Ù›%´©€«2K‹^”£Ù›%´©€«¦Rãª(ö¦Ém*`*ÁF †Râ×¥(öfÆÉm–¦¬r™NÀQí%´©€«¦S°{3cd¶•0`£C)Ø =™±²[e©€«2NÀQíM’ÚTÀU‰hÁÊvfll–Ò¦¬`êNÀv†ÆÉm–¦¬z£Ò”zÇcd¶•0`£Rv'³66Klµ0`£Õ€ÊuíH–Ùj`*ÁF¤ìgVØÙ-²ÔÀU‚TvV^XØÙ-¥LX(å;iG³66KiSV =QØ =™±²[J˜ °QïEÔÙ-¥LX(÷¢fhQ²[J˜ °QïEÔÙ-¥LX(÷¢Ž3¡s6KiSV 9L§`(öfÆÉm*`*ÁG½{Sd¶•0`£Õ€£Ú›%´©€«¨ìÔØZTÀU‚z(öfÆÂÒ¦¬z£°q ™°´©€«ôQëMy¼0pîù山͎t– ãômæ>j?4—ÞûúQü ´qK&ä}R'’¥X(÷¢Ž3¡s5 ¢Yz¾¬§ðÀJñMø^pÆï¤mêzûÒÞ8'—Š_¶Þ¤}»~'6Ž.ú¥çN~är˜¹±¹B¬{ÑGµ47ŽG/Ç´êŸVÛ|Ãï·¦ñÊi]ýšƒö–sxý(/¤sÛþ¡Ñâ–]þîñôðÏý,p$ϹŒ»ÎÇÓÇ7/U]iÈæ›íö«‘ïëÓx«ôQ닜“Ká‰~|’ê~}8IÏ,m,lj㞎ßÒÇÜòA¶ÏïÒ›þ9Gê~qóx·ØôeŽz{KÒÍ©,¿Ìr§†éñyMù‰¾YÅ7´üÙ“oh%MÍ·Þ7&š>™ÿæVY¤›üÒÆúZŸ2_ÇÿQÏœ|™÷~ûoÍ4òϦsú¼rô«Lcsœ›}ÞqôÍûMjoÅù”=˜Ù6jÁG½q qœ¤Þb^SKûï=Èú”—hfâçöÔD›zѼ®ÌI¬rfå1ù‚vc‚o×ö}ãxI_¦^UÚ%=¬(õG`(ôF'3aNNÑìû”)§§íõ>`¤©ë¼NJì»ìÄÒÌl–z£°q ‰±°¦Á¹ÍïB>dßí#wÖ Kí/6Ÿ0öçaaÖÞ”£Œè\Í„Ÿ´.Û¾Õ&Ÿôû{Æí ßõ>´GÓhO·Ú¥‡XuŽ2ó¨k¼Ï ¾ñ)£¥þè&æ_èiùƒv¤|ù¿SËLþñògyÿ Y÷ûz@~.:ÃÒ”q £Y?ò—åm.ix?øþÑ¥Á6þ±«'¾›M·¥ ï3Ã¥!¼óGÜ'¤²û#²A7ñ}Èý¢Y?Í4LûÜu‡`(ôFšºäÛ|¿·¼pHy} øs^WžÜ{rÞ&Ó˜æFž®¤Á6§¤Ÿx5µu%ÐÓ}¾ñ6¦—ÅiêðúËèÆ®¬»péúØF·Ä+¼ˆmº®¦Ú²»~öåêËJþ¹GòÁBSÕ‰>IúTó™©7ðýÈ⼤[ΰìˆÇñ{íű¼? ðò²Ç?ÞhýãO[^UŸG’íúˆšwÓì{ðúrkK§«¦mÁ4qÍ.òšXøôG€8¿š4%>]9x¶Aõi$8e&äGÁM,4òï3ï$ú&¶¼çÅèGÄO£/¦ò{;‘ñ:¬¿â€ÄßñüÃ~$÷M94 pÞVW“B7Ž7Õ cf6)6§ñ?L¿Þ Ên°psÕ—Ÿ˜áõöÞ5f›×‡ûŒìˆÇño¶Ñÿ®ðüAú5=àÐáÚ}ÿüÆž‡Ã¿áèúÿ3üVþ^~’—3,Æã/8ø—âw—Gƒ‘<|v”œçe6#BmifÓ8ÏÔmŒºsMÄî!"ó%Oú‰ÒäšM¾Ÿ´kñòšdv|‘ñ_Öhùz\õ4§Ý–'øaÓÓÓ•ç4,Kö=â] ôÏhçL¼µ4äö—þéÃ$»±»ÏSÞ“Í/)žq¨-çXvŽ3¢›NYÒY½OxÞ8¾tü^›ïGKù{þŸ´šÓ¶ñ¶¦¤Ó~8¤‘÷•ÔÔš}¿ÌÇ­7˜”šu%ô´m§©4¿ˆœu&I½yúÄÚdïó–8¤•÷#mMY¦=©,¿Â}£D—õnñGûb_4Ó—ˆâ>ÑõJ>H߀ßósnïö¥ HÞY‰Å?hÞ_÷Bv#Ò”q—˜Hs6f ݶç›zI7´–UäG×?/cÒ7’m£†g‚ÏÞ>\¾©ëÙ oJQÆ^bs6‘#øÚš:~ÒïgÕ2ìmϲ€£Œ¼ê HáØ˜ÐÌq?è‚Dbs6Ÿè²Ž2ó™°´ígPà(ôF'3aiS´€£Œ¼Äæl-;YØ 8Ì…„9› NØõågBâll-:?ÿÄ(1A!q¡ ±Q‘ÁaðÑ0áñÿÚ?! :b¢?b…Ú&¿ó¡ûì·I—é#CCª~ÀQè¶ÁpƇ ûÆgxvŽÁa©]ÞÇgPH×ýÞÍ£½›qCÐÐh^£òJ†Øž PM¥ª %±¸Í6P›Av‡¾/d¥·1ˆÐ‘‡ìš<ÀJðMˆÆðÐBŽŸ‹¤vDÛìÿü©ÉÚ4Ü`H×B|Îäo™Úƒ£º;ãµ è ©_rhHÚÂ!Áoe‹3ÇÈ>C–=áà±I8Â*f!Û(u á^0£, ËE„+†U5y„ð(»)/0(GLU :Gd¦P©ÉÚÙˆH×B|Îà£ò;C3¾1ÏuË ,>¥}›†8»Øì³ˆ%ý•>бßeø~ Êxž ËÁ¤“d;c¨ucÄ:Ìb[#(9XFeT×ÿÂ,&ã[F.ñ­…ë”ðé”RÃþTäíF›1-¥®„53¹âv†:g|cžÈÆtÇÔ¯¸9¸hOÕäû›c¾òc2œˆ§Yx•!­ÜºŠGC¡[ÀíaàV`eSTé㋲‘—šl(GNJ:Ge{B¡Þ‡oº—ôqó;þheß“Q܆tÇÔ§¹9éþO±Y¶|G HeÃðq€Šx°0TÌ< IEŒ(ucÄ: òÐv(9ßñ*Í#A|€¢ì¦xèBÓ’Ò;e'ü?à…k“½Ц„¿B•êv£üNàÇLìŽÜ8ì¸gP[ÒN,ö3¬#ù/î?bñŸe °pã1D"ž< 4‡C(‡nN„Pj¡Ðé Þh9³Ä«44›I'N‘¡wmLèÉGH좸*èvO] ú2™ñ;þ'rŽì̶1”p/>…}‰¸Ìþƒ:ÐþK{+ã3ÆA Eƒ¹ 9¢–¨RT¹u†ãÈ æ< ÌIiÿðËBnÊeæ!G@ ¡c²RËþTçà è_ÑÇÌìÃøÁØèï–ã¶á”p.>¥}–âñ—p#ù/ì©ö…™â8èqwòÀEGv/Äî!Ž™Ûƒva–\ ©öñÿqaÉe|/gbÀï ¡Ýñv\;/ÁÐ]½ÉÜŒëþKû*}¡fxÄØ8cœP¬äÆ+/Ê!Û(t`¬21Ò¡R2 °¡àɇ%¤&Ø^]b(³(Ü´t)éøºGdmœŸõ‚9÷FB„…Чæv!üô‘øvÜ3 .>…}ɉÂÎäú>Åã3ÇÄYñ-áQ€¤é˜ðž*!Û1‘‚¾Ê!ØÆáùŠ º@ð+0üA6y·ˆÝ”Ð›Ì ߤRŽ‘Ù)€B§'hÔÓô/ìj|ÎáÓ>peÙƒw¡–\ ¡öÄ_ìgPX?“ìT·¸Ùñòoˆ¯‹¬¼K"ÌÓo ¾ÌGc¡Ð­ °ÖáPË@ð+1âÔÆžLâ(³€ì]æ!1þ£°>ßgüà…C¼j:b£¡ ¡gæv Åð;ƒ3³&#½ ê"écÅ:¢þ‹{*}¢fxÁ¼;¸ð?ñã„· è Ï¡Opsþ£Øëþ û*}'øù-œürb"°Ì#©˜ÂY@í˜ 1¹+Bm4„3 Ãÿë“L•™E†Äj?è©©©Ô;ÅPÈVŽÄk°‡êQ©ð;Èí tÎøÇ=· ·]}ÁÂ-ÖüöTúOñ³ˆ?VzEPÅÚp2ˆ°Âð«ìÀv`ÀW0*ñA–õÁcÄ+Ãn8E£:Â0࿲§Ú6|GOÀv9f T¬8ÆG†UQ@¨¡ˆÿƒ‚¼SÅ/qÝ"“òð\EefDÜh„u<ê©yEœÆ˜Ñ.¥áw üÐÇGoÅÙž€°ú”ö;5`ΰäú>ѳ©ºŒ"³€¡‹²,åö„E60‹ ¶Š þ!x,:qèEq¤'ƒñ‹1KMÄÜi´&ju¥¬?è;CìÉ™EœÆ» ÂÔOõ#SQú©`c£¾3QÇmŒe¸ ©Occ‹Fu„ý•>Ó猚ð-,r~Jø°ŠN†Q^»ã-ÑL;Á—PàXpõ¥CIO¨P›²³%†™ÖñuðûF2f»¡÷sìÅ!u/ ¼0|ŽðØÎØã] NˆtÇÔû ÈâÁ±¿P俲§Ò\ñ›—B+âÂ+8 DXaxVC¸À°ÁD;ˆ3pÛÇ×a¤h| ðyEÜL–šle¿WŠþñYÿwø#îMMvÁ1?Ô§äv†߸c£¾2ÆÏÑ»žG¸ú•÷6(!ÉeO´Xñð‹x1840_ N†Q^…Qe…‘L2C.¡¢Ó.t¼b4§‹Šâd´Ó`§¤7ƒnàïÅ#(mÜš˜ ©OÌïM;ášÇaÃ:ÓêSߎÁAÉoeO¤lÏËqw¿,WÀŒb³„º(,035=•E£7E1luÄ4P:eޤ®ÃAyˆ‘¡g"o4 šš!ƧPïNHÊ/æ0'Qt#SSäw‡/ÚŽŽñcSXî8e\ ©_eçRÿpëþKû*}!gÄ~/á'ሊø2U‰ÆÊ GÚ*ʢфŠ|˜Ã„ÅÿøX½#ç(ÝÄÓróM‘©©ÒjjYÁÞ)H×t[Ìk° !?Ñ?#´8|NÐÇGxaŽ;pÊ8E‡Ô§±ŽýGgHGò_ÙSí>xŽ{ìcN"+ '¬á,¨³ä´„‘TZ0,Š|˜ŸÜ¶e޼ h(^ž›p3 uõ šËnàíÁ#ÞMMv ‚ýPÛñ;CØï5Žä3¨,>¥}ÃBÄmýÆ_À࿲§Ø¶3ÆU-–Gá/+¬à(eE†÷Šû*‹F°¨¢*u:pëù é8)$ÝÆÓxÊ‚rÿ¨BKø)ä¦ ¨×aÕà7íñ;C NSÜîC:‚Ãê} Æá÷ŒêþKû+ã>>Ow¿#ÅbçgC*,0¼;Œ ÂEqo"eÄxDéǤiá4—ž‚È¡¦Êu:‚¨Ö,à§’ƒx‘®èmüš˜à]J‘‹âv:;CðîF§@Z}J{ƒŸì3¤#ù/ì¬Ó3ÇÁÜYÀüF"*SÃŒqi*‹ ݲ¸¶ ²?¹ŒNœz~F‡Ê>'Ȭ¯¦èRT5ÐÁ©ÔJ-à§‘¶E#(ïšì'°ÃQ=ÜBpwc|ÊyèoØ7)ÈgPX}JûñÙìgHFÿÑoef™ž2Чæ?¬à`ûN†&ÂÎL ¬Uò`Z0‘O‚2ˈñ‰Ø¹Óó_N‡Âq²(%³Ã¨*”ËJ9+€FPûù50* En!»äv:gd~Èeв{–¢.Ò?‚þÊøxÁ<¸-àæVWÀÌ HÐNƒà(F… ² %²5Ž ¼-(ä®1÷sì*KªñöŽ_3´1½†ð Øeø(¾¥=Ž‹†t„½•›c¾#Œ¿ø-MLEeDðݤWÀ¡•r*^œ˜Œ!`_ õ1‰Ø¹Ñ„u#CCãå‹Aiº€–ÃSX»£Xér>ÈÄkº-æ5ØT8¸5}ø3°1ÑØ©¨Žá¬]p‹©_cJ.÷p#ù/ì¤Ëð•Sð†±@Šø(ÄÁG3€¡Ä³‘R°‹¹0,`À²+ŽÔuÄXÀíŒô„§ãäT$hZІ³wð·‚ŽJãÊ-æ5ØC`˜­Â…þñ¢{c¡¿pÆj#¸á•p‹Æ[°çRÁìΠෲ“,øÉ¨e¼Ëñc3K*;QÌU•EŒ ‚´V)FcÁýʨ‹YBP„ê#à|… -•R5‹¼#± #]ÆßÌaˆp+ð1[÷ŒMÔí oa¿`åÆj3¨8fžäÙ©pÇ~%½”™gÄp8\\äÄE`æŠ(f02¢ÃGÔE_%aа0UàŒ²Õ@ìXêÆ‡XÒñ‘ò‰Eà°x¨)}Ü Á·ðQÉD"¢Þa=Š ÝÄ(ûq>"ìèì ÔÔLíM\@ÏÒN±Áoe ÂÏŒº›rñ1W Â00Vp2¢Ã£ê#ìU„ª£½Yp/ÙŒÅΨ¡T(øÇÀøÀÜ|&’[8ð¸hÖyG#C’þctº”'l`n§hf»DaÂ;W‡Ô§¹2ˆt„½”“fxJ!ŃñLÄE±FUlSá ²ƒ‹ëJ¬|ÏŒ /¦Èɲ5†ÝÀ¼…NFŽ!Úw2‡A ü(Q÷dtr1ÑØ£µ ê诱§RáÙÒü—öRAÑž#ñ—p;‡f'Y_!ôœŠ‹90¼Š¢ÆBø¢;ÅYAU±c¦(ë ó½dа^‘Zæ5ÔÖ…Ù~áÑ1®Âc+pj!Ïtx^F:ˆãQ¨Ô£ˆßÙ_~'Ü1·ð#ø-ì¤Ë2Ῐ©_ "³€¡•Qõ‹9*‹Œ!`¢;RYЪر×u„!#å#á‘hUHpk-»Á¨îQhFKy55ØCÄ÷ñá÷g-³‘¸rlÔÔGj[g v¾äÍK†t„%½”‘fC€¦Ášøà(ãᇳAC+,ä‘•EÌ!`¢;Ñfô1‚ÂÇLQÖ„„|æø” ,>Q-ÔDÙǃ5›Hû müš‰ì&:Wâoû'jœŽcDÆýÓGãú+ïÄûÆPä·²…¡c°üGÀ~XB¾*x¬%œ˜\GÚ,äÇ’Ètb[l#µcª+ 1l#¬!GÊ>õE¡Õ9ÙÄêX(ÔÔv#ïÈÛ¹50!ÐB·p¸ù œŒÄg(íCe(_Ù_f÷š–ŒÙÄ#ù,P±hÇ|<¢ÎüQ€ cY¢ñ°:6¡Ø—ÔEœ”E†*ÂÁG„3vœترÒŽ ¡(ø‹×´:[ÙÁ©¬Z/÷ ÑYÜ”YÌ&&:Bø…dx5NFáɽ MDÆýÓG£4ö6þŒ³FÞÊȱß>ò VWÁ©E÷ÄPÊŽÁ…Ä}XQs£X(âëƒúE‡bÇ^P‘¦çÂ>'Î%8–Èq:–‹ÁØV‡=ˆes „: ŠüBƒ°_{9ã9GhÖ(â)ìiÔmã@£oe<<$Ý瀊Âç¬á&WúÅœ”P3Ó”e×ô(¢v,uÅ!B>ñ>q!‡Tþ?ž eß±• ~ÁÀû¹…EA üB‰÷Ÿ!Zäc¨ÎS;RÛ8…ý÷' wâK{(ZðN'.pBã†PYÉ…Ár}Š)'Qè3ìUEac§=1OÀGÌù• ,>qP^?T'Š5‡aZ‡´#%ÜšŠ„:B¡L->BµÈÇQ›”v¦ŽËú{5ÜE£¸mì¡hXì7ˆù(fK0_ ²Š+;ô:*,äÂàGÖ6{\ÀèU‘@¥‰ýЍ¬.uáGÊ>3Ê- –ȉ·÷‹Ã!Zä`ÿ°C²îMEBc¤!^É·ŸS‘Ær‹y5Š8Æ)ïÀœ,wâÁý-;Å|‡å€Šø¨¢¾Ç Ag"¥Ä}bŒÄ±P´ÁDw Ì8ŠˆùÐuáB>B>'̨QaòЇýxõx;ø²ÝAÜ컘T# áI­ƒ(f°›5„÷;Pʸcúð&Z1Û‰mì¡hXì8ÊwG〦!F1YÂL¬³“úÅÜ•EQ„ê#±]pbŠh:ÐŽ”!#ç‹G'ý8+ãÁÜQ¬de@ß°C²ÎMDÄaW…þâØ®GŒÖïÌÝp†_ÑOe¥ŒwâK{*^&;ÿã#4Æ)8C*,0¨¡EÌXK$)f]qV–:óÒ|ãæ|àB/ G'ý¸oþ&÷ Ô]‚ƒ,æ ˜P¯ md œŽ(555ù†]p2¯c”^1Û‰-î•ß"ùÃQB+à£~ž6†PYÉ„}bŒ¢™VUB;e×c±c¯èB>Qò>q¡)Ióüõx; Ã!Zv„;,äÔB0„+›YW#…^Gr˜ïÌÝp0¯~Z1Ûˆ`[Ün\88J`î8xSa‰ÄÁYÀU ¨³“ ðª,1V #µ+®ìQDîXëB:B„|ŒhE¡häùþiÔv¬jdeEÞʾMD#LWñµƒaZ‚Êù†]p†]‰íïÀ‹c{¸’ÞÊ—™ß.üˆÀE`Ícg 2¢Ã"¾LR*–Eb;fت‚ÒçOá ωó…¿¡òs ­:™x²2 ïeÆ¢0„+Â’Y´1Ъ7¹©¨‡xe\!†{-:–Œv’Þãx™üÙ¬¨ÀE|[t0V^ŠnL.}EEœ•E !`¢;e—ö* wƒ¦(ÙÂ(GÂ>Î…T>ƒþ©Ôw¬àÊŠžD1öp…F…hSFÜ0Ê‚‘ø¹†]p†нápÌ ÂþÆód2ßî=ø<¯‹¡¨Œ  vù0ðl(‹ T‘@Žä¬¸gö( °±Ò„t„!ø2¡´-ÌSǃ·ƒXeAG"W ˆÂ55Ý ixÆ0P7‰²uÀì0«ßDÇh2Þü1Ø~—qá®ó„+àF&<*):)…ÁgÖ*c"¤+)؃.¸?±D|‡rÇ^zBŸ€‘ó‰HùEA¥á—‘•<ˆcìáÂŒ¡ `´6`¤nPíÌ2ë‡b¯~8fPrÚ-L¡ÂSqøkÿì<¤jc÷8 û }"¥QxU6 #¹bc‹ië ì!3ç‹ÃªD§ƒY×w‘•mæ £„&aV… ¸v+CfÚ9C·0Ë®˜ö6ò¢lˈ3ú*^&fŠNüe¦ ¢Ñ€ûâ˜ïA–áÅŽ´# &(øùŸ8”X|¢{"7êL¡¬àÊ‚žD9¨ÂŒDXEpìÊèU£)ºàaÙcJ‰™b¦v%7cðœÐ"±ÌÕø Bš"äEœ˜—«*˜îA—\EE…ް„tE/Ò>g̨Qaò‰ì §#XÔÁ”!_"G ”e`™\dÊPw(væÛ® ìÇ¿/”ýFÓ;†\~O+àÉŒR2aã,ù05>‘ô‚ÆXX(Ã,¸+ìQ@ìXéŠ:‚™ð‰óðŸxuCäø6Þ MM|MLî„;ƒ V„# ¡ ±Ù”8T£.fëˆ;1ïÀ¢fPe½ÆÓd8JwÀüš¡–L•QIÃ"†TXaE<˜>†0`T•DŠ Æ ¨àëÏNžçÀGÄsR¡÷‡Oað íãÃ,B¡öò(*~+B, ¸ve À¨9FSuÄ2cßDÌ å´ÎÄ¡ÀïÅ) œ"³€¡•“ ƒÖ>…ð0*ŒX(Úƒ.¸‚ª yéOA3çú••áÕ9gF³ƒ(B®D2ŽÆ˜­v*—ÌŽ(Êl¸vcß…Dìˈ3ú¦v„¼,Α ÖÈE%˜Æ+02¢ÌǨúÉDZ0-ŠK;Pfô* °¹×„t… Ò>Ìp¡·8©Éð ·5œB¢ŽENC 2„;J1ّ åM×É~±Ûˆ3ú¦È~ÄÍ|^WÁ¡ŒVp–TXai(¤TñC¹aÁý ¨‹8Q„|ãä|`QxuA‰¶F²^?¢ŽEN0¡ZìU,2dpª9FPË®2cÙiP3(3úæÈcLâf††gðh.ËÂFÞQ¹Œ.} öU=!P²(5;ÐfЪرÑíMD|D|„ - ©ÈÄžÎ< 諘1=¡2†Œ¡ÅR¬vdp¨9FSuÀóü &e[ÙRód8KÂq¤hPà¡CCñQIÀPÑT .<±DXf±@¦±®èUعÓuá Ÿ8ùŸÃáÙ=œF°¨^…GpPU*B2…c±XÆF`À~ ¦ëˆ;1ïÀ‹Æ;AŸÔo6C„¦ãòx…Jxbc¢ Ê¢ÎL(úˆ´ª- ²©Ø“ìU@ìXèÂõ ƧÎ>gÄi\0뺌©à«Äªr(*pŠB2…c±T¸É‘˜àÊl¸vcß Ê ·¸Þ&d1)š‰ù`"®J11áQFƒ+,äÂðhÊ!Ü*–ÃìðF5pbª'bçF5Œ„j|ÍO” .>c*pk8)à¨b¢ŽER¡„#(V;U™28ÀrŒ¦ëˆ;1ïÀœ ˈ2ÞÊ—›< OÈ~O)âª1àa,¨»“ûˆ°ªŠ…‘G‚3ýЍÜXêˆHéx|MO‘ð`¢ðxFOg)ኊ98PÂ…iv"£2df àÊl¸É~³(2ÞÊ—›!ß’œfQ€Šx’<  ¨°ÂàÌöP1T´Á@ŽÄu TÅί†PŒ|°”ZÉ=ž)àª\Š ¥CFRìU*Ì™`?SuÄ2cÀ‹e[ÙRñ3!Ü%6p? "ˆE|XxØ Qa…cQŒ$Wá ºâ(‹Q5|Ä„êh|” -”9'³E<1 Š®D1W¿2„;U™2‡ ždiõf=ø vâ ·¿d8KÀ~‘P»/CC*‰Qõ‹ .| ±P¦»®ûd(kq¸kðš£Þ-¬S5ýF4}ðͼ»¨XÊ¢ž ¡QD(*p›1 Ñ“"©VdÈãÊ2›.2cßÇn Ë{çÈw OÈf†ž /Š)8 T (§˜°ª,:0•\wh%I)¥´>µô5Õéþ†ÇÀÝ!þ…í&ñ®ãÞ3SmÐÅÎ’V Oký$6h·Mu4u¾°÷ YþoD'=…¶–¢ýUþv CKÂ6þ  Ux•B¢‹‘ U$b¡ÅR¬vdp¨9FSPÉ~%Ã2âK{æÏø«8ÿá"¾,#‡íq2£'àT*¡Qø0UÈ¡I#FP‡b ±Ù”8T£)ºàÈvï ˈ3ú*[ÜLwÀ~#áã¤T"¾f< E ¨ì ”}âÎJ¢ÑŒ,ÇjK\p5âlÒ­ùÒ—õõš^\ÿ¯üÙ«=[cjZè?o®—òìÒP÷¦Ù¢Ñùüš-øÊÔ»‰’ÓE#HÃ?¢®EcH# 2„;UŽÌ¡˜(}Ë® ìÿßÁŽÜIoeKû‰™à8ªlà~r+âÃÆÄPÊÁIX³’¨¿¡˜ŠÑT>È$j5Á©Q³ŽÞ²b«V›I—‡²³ÀÁsèAu'¬–­á9™¿ßÿ?ôKaCjÚpÛ·äÑa4ðWq–Š”¡W‹W"‚§$aV„XApìÊ*ŽQ—3uÄнø`Ï”–öT¼™f‘ðŽ‘(¿!eˆ¡•–rax£*‹ ÓadWº:Âô1þ uãý7ÙÛwû¤5¡ &Û,¾+ðj˜ô[jj(¥¥¶¿9õ,jnÇ”k#{p4®º·ú+<•¿{ÿM&#(™y‡‚¡x!øŠ¹,’£B´!Ø‚áØ­J åHʸƒ±|´c¿[ÙRêW|/g󗌬Â+5RÊNñ¦ÃAß¼+ÕÈ»!Úl`Zb"Cý£hãh‰µ¼-…#šÚKCÂÑ¥ž—©V”&°mhV¦„ëY1š›Ý‰§”^²‚/ýc+¬H×\µM`NtI·âq‰'ÆOöV°Ælâ;-0¼0/ 3ð"®D2À­v «ŠÐáP~ ¹†]q нøhìvàH[ÙRÒ;áäŸ1ø£ó«C´Õù!jè{ui?,L‘ü(ÝlÚ¦¿#¸¦ºtü³T~üžЗuÀÿˆÙ§­îõü‚tÇù\ écNÏV¿ôL•;-WmÄ͈ÑѲâØ5妜~Ej¿ m ÷´·Sü O·ˆ_Vh|I°ôþ—Ö3ÕÔ¾ ·æBN‰Zk&²jþÆÆ³ŒfÎ6»¡·šíà«À…P¨£’ƒ9#B´" ±Ø­ À¨9C·0Ë®2*ö$¢ØwâöP´Žø"›x–"ó¬œE ¤³‘zBÈ#Nâÿ”'£œi-tÿ¿¦Ñ:´ýB7X½ºk²Zô.å&©êÁ»·¦¼;±éÕ Ñ#jä¡–Åãål¼­ªÀ bÿV¨ÈŒ¿ö´ÍhÃ6hz6e®ŸF§Ö“zÔBѪbR8œ˜ßËþüŽ'1¨áh„KGÝàä©'è;®ÆÁ®ÑÐk±©fVd°ÂðT/GàTUÉHQÉQ„#(E \;2‡ ƒ”eÌ2댊½øhÇ~$·²…¡fCñŸ1ùb+ŠñŠ¡C)-äÓg£A¥J:;£g+­%ü}K…î_÷ú'ËÅ4{àT°¶ïI™À ·bx†jíš­D€7О¢×±§› Ñ®¥­‰uüÅ%±¨“uÿûaª[O_ýè~šš4ÕþšÍ[{ÁþÀN–“v?éú`üm´ZššÛ7Xפּ߃E%™ó»ÿ ¦ÂÓ#g¿ÇüCÒ„ã¢Ù†Ëý›nšÁ·Ž7é6q²‹$„*ñ`ü Š98¤0„e°‚¬veJ üüÃ.¸v*÷-Z1ßBÐ3Üô†ùŒ¬>M5'á¶àÆê"ßàCp´Ôc„¾ì¬ÉaN^,B¢®D2ŽIB2„ZÆL¡˜Gà}“uÀÎE^á¡ ‹F;ð"彔ШÏÆSóiâ"£ÿâXŠIÜ#ïrQL¨[GjXð6Ÿ¸ë¬Ý4Or·Zž¶6¡m'›íÿønØŸòkÒŽG@Û]¿5Ëœfì¬Ê,5Ú*ñbr!ŠŸ…Bó(f G(væn¸aW¿ÑØïĶöSÀ>ަîs§‰_$F&!•—˜E|˜,äª,`Ķ+ŽÑA˜pS†»3c=d|Õ]ÝJäk‹v—ÃYAΠñZ§2¡ÙqBðÁøs%"†+BŠ…Ã³(f Fi,¹†]p; *÷ %xÇ~!ü—öSÀsÀpÔüüðŠËH¤>“ˆ¡•ã#ïrUô3ئ;Pe×÷ tÆÜÒá4ÎBÖž%u‘Âs+–”*bðÁør(Q„#(EŠ ‡fPÌŽUŽÜÍ×,Sß ¼hkÉp´¹à8êoàwæ+*?ÚiÄPÊÎá‡÷‹9*‹Æ¹‚¨ïA˜ñ7¸¸ÿª]¬·Hh¸KÙPˇR¼…EŠ~…i´ ‡fPâ‘ʹ†UÀË ½ÃCA"ѨQ¿²…ýËž#ަþ倭•ÿä,%ÑIÞ#ïBˆ´`X2©ÔuÄx@íý^S_!pœÊ†ÇÜ:ðÇ‹àTQÈ¡G B¡ n ºC0R8ÐC¿0ÑuÀË÷â^1߈%ÊE|gˆÅ57ð8ÓÄü•)ä}§ fÄ;‚¤}⨷¡˜ ñDv ÌaÂL¹Öš#Xùx3‘@ËÌx+x•Q@‹p¡„!ZhC*0SIÛ˜e×vÑObx7~%½Ê¾3ÄqÔßÇ–‘"¾,M<áÆï ‘÷0XUõ+b¯f1á±s¤kF¦±ë1U9•ˇRŒx°~E<ˆe‘„!Z@c(f G(wæn¸C,SÜ4…ø‡ò_ÙO øŽ:›Gç"£# e'pÂ>æ ¢þ†a*¯ eÔx@ì\èM3©òð7£XÈmƒ²ÓÿÚ ôÆ´£8Ó~1­Þ*iªöÍÓbÃãÁÞ0y%|ŠÜé}s&úéÜũֵœQ»Üv.ý··”WU3k¼!ã[œbþfñЉµ ±¯¾×{þÇÇžiܚȟ¦h}ÉR?Ê O5ÈŸ÷÷#ñjDÝØ½ö››ZÏëþâ£M, Òb·~¢ÖUgßÚÿ½ûþgÑÊ[šýôÚ §67å}½ÙÑ›œáþ:O'úyÆ7æïûG3dºÖ]'ÞþƒftíxTëøë×cúìiiŸ‚Nky¬ÚTÝó'ßǃ‡Œ¹Ï<¾×#iÛžÝÄ}ÞÍöïùÞyh;ŸãÿîTõ‘Õ~2ÈWæþçÞº÷çýð@™8ƒóÖ«ûÓ¯åâ¥3Z'¨ÿ«×]ò;aéªÁÉu^ö<_Ÿޝ÷4 ¤„·Ó@µs†l¾ÓÑ{Ùmü~tʽõ·Õ·:`;9¢eí“£ÑîsW¯Ú/þçɵDê•ñW¼å­ò†›rçNXœŒ2ÓWйïíˆÿ&ìþq̼³Õx»3­îí÷Êíß÷Ï´†§¯¬çmž}ÊñÎ,ùÛPjé;o+1nÂ2¥ä3ßúŒµ`rO¼þO]}ÆV‚Ü$†ªÍèú…²‰M?ó‡Bá¤ø“Û´''jä“ûÙ/ñþáÛFj®ËÓ'¢_õ£×äwÅÍà½\òªú{,·ÆolãiôWl¤Þu[ }œÂßö4ý,߬OŽÃé9%ÓÞþgåýV¿C_l»n¼ú.Gcñ͘™Ï§K<ölâ]áÑLùw·|U:<3Þí´wן0Ü>ø‹ð]¥ã?ìg½Œzù‡ùT{L5$Uwéúý=þ}b¾þý6ûÚuV(+Ï*ˆjû«Hf~}òýx˜·ç4Ô$ÿ½#µvý«1³åKôäíV;^±{Ûß«3 ,«üd¹µ¯}V»”i6°Ÿb³CÒ.ËÏ¥÷Í·ëÏBXW3¦=t„Éþ¸Æ×JüÖo㥙‡Àùü¦üi¢nSw´™wñÍèõ8ö4>ÿ½û‡ªßF>ká•÷¾þ¿¡LZ¯æïŽ¥ëï _¸Ùëžmì°W£lëÑø^½ßm{Ú>·þ‹Î*è$n³$ çM5vþzïê?`ΪéSS1¼Qªéþk¯âÞû2rFaµ¡[Ë{Á¹ýÙ¿g8ë |—ŸãõÏ.Sì¤|Z»éï_ç¿ÿÝ ”O½Yñ9§7óþ®Ï¸!ó4ÎÍzsfhjß—ÿ­?gí”?³µì5o¶mù:UÛ<àûQ›Ôf²9οöJçWÿ|lqèxæw{bLŸ¯Ï¯ãï=÷§‹aÖ•üÏ™ýÏLu;ì§0úç9Eû8ãœÂ iAo½üßp¡ÏB“¯þØÏŽð¦mƒh´Ó ›2†ž»õiêšËkõO~Þì~…_ÅÏÅ!z&GFèìê¤ë5,‹ÀO¿y˜Ÿ*v9Åqϵ¤Ò :s»´&6µñ¬Š¡¯—cÀåݽ:eNßÌ«d¯¡Þ똬m“úÝ”ËÔ§å³æ›ÛYœïN­€nÜGxM×ÿ1´ì¯ðç}Á¦½gƦ÷ú®‚è0Ü?VïïŪÍÐ}¼äË8Òÿ¿¦¹v/[oÆ)_ÓÊ•‘MùUcᘻßöwýÞâ©»œéñÓYâúOóO ô×ùwN¤Fãûïš(Z£Ò•Áry{ßZú^*?ðJxÊk\õ¨‹› ‡lËŸÌ”ƒí•G6Ì/œ¡Ï’™Q=0+¹³¢e½Î–‡§9üÜúÖÇç8Ð0ê$¿€ÄOóÑgÏHDî¬õ÷†²žo•¤’¿<w96Íc^cã|¿úÃûz}zʯ¸¿Û¼æÖÁá<ígî{ê{›ºÛCŒßËkNoŸ¿¦Ïé„›u’Ȱ°úŒ›í2.½û¾Úé3ó7ÊoÂIÆ[ó矅˜z'kºín\Îþ®,¿×"÷+}0‡<±P°þîÜê-ÿ!”k§O²‹{åídG_Þ´Ê`Ô-~D–­qÜ¡Ý{M÷¤ÈÑ×ÿ=ñÒ‰x|°å/ÏÒÎ9ÓÑWlR®~÷¹mÉÛíÿìõ/ì`k„'ÕIwWÖõvc+ש=Y,‡h\ÓF›Ï7w ëÿLóû5Ì4ô <Ÿ;ùÞÿ½úìùoW¥ñßÄ”C»Únàa×dâM1;Ofe¸ªß!¶§çùbµá³ª/H9ÛßÞ9j¦ÅM’§ô¶">kyϸíÏûc°ã ={;¿Ï¸ºf}žîÏ*²i5uµSÂûöiùêMO˜ßc×õìút®­±•ëåõÂÏo¿è7æ¥ü>nø>îµõç¬þ*ÝvõùuúÒ@²â!_ŠÅî¥o.éÙžÛÜ÷¹AÏ5óá?Å$­]æóé™öéEyËo õ”jË&ñ\ûí¶2gºr‡Z«—ñ»†îþuXÑ91©'¢A®´ßy] uÒSÈšù„ááêñ—´ò¡à§ù­º£»]YY)ÌÎtßµóGyÃ^"R>K³l/Zà¿OË2ËWûÏÈ“n×WÈzÓ/ééºòsR†âÏ ßç]<ŒùÖð¥C£G%±ÎišmüÊMúyßãkÝâǪp¾g>d£¨vN/3Ì¿ä+ì%³Ù6²cu«Ãûo–СݞTÛÓ±Á÷}sÙ`žcnž§¬6¾å!ýµ×xé¹Ã´ÔÃ{Ï÷Á9©Ñ7ÙÑ¿KH½¥{|«V~U¿;¦æˆ²áEv÷ >1¤Õ{lŸ°îŽêÞµVB½zÊ=ÑgˆoYú_‘ó¸Øð´{goƒvÍÎsÃ¥Õ©knícoßž;@®²ðnVûñÍ´a|ÿ¾^寸š¬0øæ3¿d8|Ó®Vh?i ¼´]¼ç†÷ݳææKµ›~šÆçjäÓÙÉÊ]”!0F;âì_dûÇ'ë¼aì8=ßþ¤^·‘÷¯öûxýûº›ø³nSiŸ½×ÅØõ†Ÿ¾Ýý«›µF¯']æuûß3îÚŒ¿Óà.]×X׋~ІÎå«%>¼ÿÄ1A! QÿÚ?:66K&z7ÐôLô£ü üÇûs¾ (ƒ|=ø'‹ÕDõ ç£øtpOçá2ÏEü=ÈÐÆC%ôv,²B‚/(BáDpXºAÝTBÄ!\ps¦,C„ŒƒÝP÷áÁŒ|ÎŒd2Yc± ±þb)ˆà‘L¡È8)‹¸îª!bÑŒb£‚ŧ:OáC‚ùœCÉgÎ(v,²±ÄpH²‰ à¦.㢱b‚Æ üYçÝ(t)”HS/(G‹+0pX«ÇEˆB=úpC˜b:F‡HÆò q†…sÂ0ð¡Ð Ê$)–"Ä.„2³бŽê«ð„wNc˜béé@wgFBÄ ðp…ØÍ D¾eÅû”!p‘eAÁLUã¢Å Xà©bèé@t†;°¡ˆqgqõO¬ïD2òÏ© à¦.ŒtX¨µAMcˆT‚.ŽNèèÈXPð…Šã# bj_H |yyÁÊ$ƒ‚˜»Ž‹Æ-PSY¤1tt‚IÇqE„ q³Ï¸Ð ™w>|Ê s//8#8Q"‡1wÞ‹TÀâ ‹£¤$?¬Æþ²ŸÂÂw=]Ï2ˆ eeâáÊ%ŠaLþ㺮!ŠZq ‘†.Ž‘”I ÷!aBá+<ú<,»”†…H e¼\#h‚ qÝW(#ºàT‚F*ÇHÊC¤†ÇrŒ YÑþK¸X©χ…~ „g˜‘C‚ƒ;ªâÅ+¨B¤1tde!ÒXîBÌ8‰YçÑâjî™E!L³Â±pO›DŠ81\wUü(!jª ‘ˆtŒ$:K(d0ß!O1 çÁ”Rüéà¾x@±Ò~8;ªþ²B¤eˆtŒ$:K+!ˆ$qñžj‚çZ©#™Yx¸9ž‹ðSÄAÝTZ„y¨B¨‚pº;¢EÊÈY‚HD£Ãº °èš‹G2¿ÂŽ(pSðîª!b;¨B¤lº:F%”2B%ùBøæ*Hà‘G›\Ï PিÇD,PPWP…H' £¤a!ÒC(d/À¡¿XwÅKGWà¸8,k ~:1ÑâºÅ¨B¤1ttœ$:He1’ÄBýE1àî9-bB}ü$1Ò1~Õq à‰ø œ.ŽA!ÒC)Œ† –B$yøSN‰½)bÇ…b±ÑAC›ÜwU‡ˆî¡ œ.Ž‘„‡I ¦2 ’¿•<;…3¥-w½k釸wV,Bü8 œ!Ò$Q,¡þ,„/Å­b;¨PðóéKÿ&!ŒG ðî÷(#ºàTŒ±ttŒ$Q,¬† _ƒˆ_ˆóóÝBÅJ9ŒðK^º!C‚ü:pôïã‚È! ‘¢èÈÂC¤²² ’¿æ5žÔs::ŽcÅútB8}ü=X±LîA¤1tde!ÒC!ˆ q ñkÄtðbü:µâ<²„#‚™ÜwÜZŽD1V20é,yðÀŸ¾"WãÌW ¿¬CÄ1ê¿5Õ¯ÿ.sôî«øP_ƒ‚¤1tt‚ÄI ! A"õüs_cÅøXèŽbü:|¯áAÔ ‹£ ±!Òƒ_O¾,%ðð„x?Ç>kÅøXè¡ÏÓ<®,P_ƒ‚¤l‡H$OàGD§ðMè–ž/D!<Îþ^>kÅ­ˆçåUü(#¸Æt‚.ŒƒÇŸO´†¾’„ŸmýRN > ñkÞþ9¯šñkÆ:#‡?g™Ñ ¿HËÈ ‘ñŸßà½ý uïÁ…D,Žêü>ků]9¨c»ÜX…ø1Rº2 to‹ã<¾ ('ÁÁÅžj;«psà³ø1 tPSð«ÇuSÁb‚dž*´bèÈáðBxÉÄúyƒÐpP¯ˆ…Œ{ÝZÇÍx³ø1 tPS*ñÝTBÅ6&ø6ðjB1*&lKÁ¿§ˆhO˜þ?Pß kââ×ú_‡Íx³ø1c¢‚ŸqÝWð ±â¾ˆÙ4}øGôCˆ^>޵Á±=G…Kè|c__®êÝ|×qgðb×ÑACŸ—u~©æ~¿x6ÄÙê Çõ ùà߈ñ (g!ÁBÁÅŒcÝ_‡ÍxqžžŽŠ9¿ÜwUÅœ´à¨æº;ˆ :7Á/‡³Ç¿ ð|Z÷¿®þâ§¿–&(s¸îªtX …táÒµ:Hôe„A¯‹ñ;«:>g£¸¿c‡7ûŽê¢Åø8*AºF(A¤¬wÂ#Xǽ;«:>k¸±k¡ÍþãÕqb‚ש C „tœw8!Ìkâ?ÿÄ1A !Q0ÿÚ?ÚXü ã` îNþ OÑâ˜kôùú5Cà¦3žáðø*%ˆhø5©~á‰~c§qbÎ )kˆ‚ƒ¹98ÊØ££ÇçžõoGኔ"±c_§NŠçs‚KAÀÄAAÑ““Œ¡ŒE,¡â˜££ÏàÅ5]ª#‚£æ1R„YðS:?ÆV+Ž +X9FO’‡‘Š:<|¦tc×u ‹pàÊ++>ÅÜyô¥¬¢  èÉÎ|#)õŒæ!xñ”^[ÅŽ©ÑWæ–?HG8ˆ(;“âÊF:<|Å5ÁÍc9ˆX†!ˆe"Ï‚…;Šxõ¿ÑæÎ" #ÛÃÅ0éÑœ?ƒÆppxÆ,­P¡Ó£Ïæ)®ª,Tb¸ Ê-ŠŠc§GJÅ_—G…<%ŽänŒ¡ä:txø1k߃ª*8+„1 ¢Å Å1Ü2…EY÷1áOgr2q”\P¡Ó£ÇÁŠo®Uò!–[o>áÑQ ¼à±Ü¡Æ¸K;áʨ££ºÅ5ÚèÎb¥b£²Ëb)â˜éÑÒ„*õcðp–:2O£c+`c§Gsø1MxÄ? ‹(tCˆE[LB˜îúb¥?. i –w#ÁÒµL:txñMc:3˜„p¬!ðX¢Ø¡LSÃ(TUùc‡†IÜ}Å:wùŠkÄ:3˜¨©Â†!Šh¶(V,¬:'èŠb~ð¦á'r<¨üŽ)¼ÇŽãÊÅF!ðS¶SLB˜îý)å iwÐÊØ(tî¼S\ßÅpà¨Ä>(¡B‚Ç^(E2gÑ pà¼,îA÷LYôXtï”äc>ŒYôPc§GŸÌZÆ,¶"Þ("„(T§ãèÇ5øŒb˜ó¢(1Ñß<Þ]ÌTGF!Äpt²„SÅV(To×åþœÆ7áAâ˜ñ‹Pó£ð„8=tg1Q+|ÅÅ x¦V(T§ëšñc~jÇŒZ†3£ñÏlg1Q ŒCà¦-Å b˜î(E3î}.s^²1Šz¶§åÑœÏÓ*1!LQlP¦}>Žá¿Ò…Jzž^ðSŸæ=C†wÃæ-ç‡FsVÅŠ-Šh¦;‡JO}ÇíMSÔŽŸîw¼s…5Lg* _‡FsÂÖQb/ÇNŒTYÿÄ'!1AQqa‘±¡ÁðÑáñ ÿÚ?ÀÃn„KøÈ)B›B›O¹5:ˆÿU¢wìÆêÂcA_†¤[3ÏÊ DàI7)×vF4äüæ¬kC¿]‰ÛZËðC¥ZédëZcÑí R*nõÁöû W$;Þ`LÔûoö…ºS}r"5%ëz‹Z?à~jú¾B‡ÿ‘aœ8Àˆæ£ö„KÇ¥JJ§]EÙ)ìG¤½Å²èÔ&5ù#W"ÒbaöY¤!'·mº/ðÿ±¡Э\ÿۗаñCÃK=D³‘Ôhºh5z=½¸dúuÛô@"Kµ Cú$õµ¤îQmcÑí‚å-ÄD¯Ie£PTa"ê°"‰íCµ… ‰-&6Ô‘u±Ic:–¶’U ÉB´û´Ü_BžÑ ¬XS“ÜD–«àã™G!8DȂ߱+¿è¡jˆZ"BÃyˆû ŠàY«7&Z‘o–Cƒ¥¡A~øÑfâ°%:Úë‚ Uû$’{ÿ‡HÃh±y[ h'ç°ž³È{ oa'¨‘Æö$¶ÿò†òô¬N„šê­‡}ľE•ãþ‚Ö´$·âë°–Þ„ÆfzÛìI•§QeU;‰ -*zê$­gþ ™Äl*qìM~ÊEn3u©Ü}ÕZiÔK†‰þà¥ãBÌ.…Ž¬Ò»Ðù¬’k=6þ¯LL Ëü_BñI‹[_bËvFGµ«ì´í‘g³ÜQp5: ×A,ÿ,U?#if^ƒNZ4†«·y|œ‰lgKŸö7)<ÆâWR)î]hèE Må‘mønQw +i²;!-L«1ô-ZËr:ÿ)½u¬‰YÅ*"(YnŒHYdVšÑ¤ÇÀžb+H!'rGþè5nÄÂÊ'–-4ÎDJªþ ¤JB™=½Ÿ¡%^âøÄ¯W{»‹ðâÅ•Ü`GA~'sþ—!<CP¢4èÄåï$+…îîê-7N,Y?$Hñ_Ñð¾Ð¾gìøÏLP“À??C!ÁCôa«ƒ¥Söȸy2¥ö1hEÕð-¬*RxpAF˜ïÿKö¾ÎÝ/´-ìº ódFªX`G ï;ŽŸÄ{"¦'"¥µÞÉ 84„<«Ç"$ü 9ÿÚ â:À—¹dØ–!vº0x3B>ùü‹‘16Ǥ%+Q; ,6 J¬¤kð/LHy(k'$u!¨yì$Dã¡™NS:ã÷‘«]aÐÕÞù.ܱ!…ˆë uðDú3«Oqáwc ÙEfÇ]9p ¶„¬TŸøZF@,ïK“`Ä$ÚÿÓëÜJSóÁȱk—Ô% Uâ„ô-5ˆ¡)Ú’ˆbÞ¾èJœ 85‘e`ÕˆZ}W ]ø;%ð4{ô÷_B+©¸«DÂ12EæÏB Yê„$ö ì%DEÍ‹nÆñ§±mvÉÐ1è ÿ`o 2ayåp6]…–,]˜¯‚¼ñ?V¢ùŸ±Ä–Öš»è¦å]×OãK=n3Êß‘õ,¾2'§%e{*Ó°Ç·üˆç§êk3°óר”5"Ï{°éskXä‰ksï ÐÌ’ê-ØÁíä¼™uʼn(ù,‹oB¬Î,JUfˆü†¥ÜÇC/ü mü7&¢/¢1³³qKQsèœQêk2‹Jß“”:ŠJ³ë)wôV]Æ –àLðŠ›«c­ldÌàÞÜÓqlWxßÖ«ïƒU×ø,.µô_u#¶(J”+%©n£g˜ñè%®1Ü\ñšð?àßК_ø Í^ÌÜ¡vN>¿Ãt=ºþ±Ìuëû “>´¼ÒßAfO̘TéÀLµzb÷-¨OŠü®ŒYì}÷$ÊIØö¾Ç®œ‹Ä|_hIwÀÔïÎ¥.×É—9ÿF´R0úuü­dL‰q%ýŽ›ýdZìö"[0¤k‡úU3Ÿ(YÏé%͉×ÈÔ )ëÿ„bi"BS¶›˜1õz HVÙìþˆ—SÐvÖ1þ”’¯È^j.djªù$ïA#UL@°¾É‰¡‰Z]˜ø °%ˆßðD~À½Z5Í %BüOÆ.?ÒÝ¢„qò5o¬ó—x>(¡Õ%"˜è4ÁP;x2³ Î%Šhjê„î&Pó—#ò·CrËö~ÎŒiÐù¯ç<îËdÆ5<Eˆ¢Óöè×M= <5Œöš lLŠã¬XШץIv˦{”ág”%¾õÔD›„Ûq=ÿ~‘%MYdý Co1¸¸0órÍAF¯/]Füšì{BÃ0•ÕíìAi\ë±4ÖšسîQæ¿Ág«ûB¥›,Þæ WãF/¥Ð¢ëgzÿÒš•üµ<Á/þ¸Ž>‰Q¨”'wÉ})özæèѧVb5s‘+¸Õ¦K1BüѪ~HYÔÖtÌ‹$§þLÏAëÎPá½Ø££&’U# ™Ì2ø~±b™RÕh5 j£‚'tn„á} sઉÐjœiÈÕt“T²*nêÈ…z‰K6Z‘Žºïú¨êÌŠIµµ‹oô%·[ж'ƒìVÚD´Õ`])qÄ JqìkÎa ³)dˆÅ§7ÚÄ÷ú,ˆ$Õœ A>!ªö¥#*ÛqEëÔn›•íü°jEÚþi.)>†ó<ò<ɳØyFG²Êü¤M“m;ìp#­(uÝ“/­ ê‹K½­Šö6¨Ÿùe›Ó"@Q.e-÷BË<õ.ØN³sÀ»é¯yšÑÞ;Z#Uzô±›‘â}ä³ÅZ)ÙÛÿLΫ îcÛþJ¦‹J].Æ™zã«)e2'x#;<ÊØ”µlººfžµ9Ø$vŒ|ý(Y—„Xt¯Ê&¤¦ÃŠîYly1¸oAzÖö„–â²µDD~’”þ¡¥£"gEÔ¢ßfO‘.`»z"‰–B–²Gø4õÁ*o±[lËzA ¸Á‚Ã0ê<ÁU¡ ªˆ)Îß69$Ú„% ü&NRÁ创½';F¸Ðj“¶‚WA®ÒNGŽMw¡(OF*àÿHS_ôkÌ츼—k‡O‘e?5àj›QPòû"Ú”ûÂIt.\Ä}‘ÒºG¢>KµØª¬Ñ‡‡ô/cŸ¢pEì$·Hí{S°³½UÙ IVƒ~‘SSÄõŸ³¤ lNçQ¼h5/OWÃøÐÞWìmI¯¦< ùW±ïëô‰î7:TÊ'tIF<±gDYþnâ[Äš¬¿DgÀè4e}–iŒ|YNäLù½±ßbs:,5"Sœ`Lh%._b=í÷cÕúæ¤YŽìøGíÉ”bí1•$;ИžÄF’ú-‡àVþyÔJñð(ñ n¿š É‹U(im¨x\²5êþDž “‹xul·œ›Ð×oÔRTÄÞG d¾kNK•¤y‚Ë¿¦Åç¹Gú•´ªÄŠÒ×ÈÓKw¹áZò‰E·&˜’šÛô8Ÿ²ÿ…>E_ÅQ2ìéþ åR' Ï!Hðœ™u±7"Xé4iiÜI[ Z›Näv E…9ù#«lÂ$·HÅîåßÑô —ßícìEð,Ó¦¢Hžcq/Ð't"'°Ÿ,¯}£uü°)¤'a#ÙØJp„Í'”(tÈêþGèYHÕú†¡¥p4=¸ÐhÏ—¡£ì~ïØoßf5á{>a8‘¹à¶¬¿Ó¾ÞÜ7b|fŠì§£?ϱ³‰_glhóe]¨ »Ø³.!ÓQUè÷cvš¾25 Öš“wMhÎ7ºJ÷¹“ÉÙÃÅnÅ[‹Vo cAÊ”Ý=õ+‚Ó°oQ—F猑MêÉ8·z}‰ó§Ñ‚µ½PͬF !ënÁ¬MíéàpÛö†¹ÚÄæ‡ûØ÷ ëŒð%¢Íκ2x–D·œÍiJ}ŸB\VÒvDDj<4­˜Mzt<ÑÝÏü1éf;I‡yØÂÕúÅK~‡Ae?"³ŽNËÓï¨ÔÝ´cÿôÿLKièF¡k#¤ãý0çþ¬#M Hâx!T-< Dûÿ*+‹tóÉïÈ‘ùÐJ{Hð35¨ÿJ$E¬ï‹çŠ"_™Xf—óÒX•ßô/ñ'°/ç©@HR0„pQ”<-úõ…}†™3°mÄô‡ÐOyV7=£‚—²ßº±€ÿ–çáìL2gƒèhCNÌ;îÍCÆ:±ë‘Ðá·Ëa8#£•úÇ”V>Ìk4“W·Ú(Ýõ±eâ¦Gð»ö#Úåi_ûòf%gQ(öc¥ôM·É\Ø¢¢íÀJDÏüœ¼XÒ—éšÂߨ…#oß÷íÅÆEw,ð$À–ªEwS¶ ]ò¼? üÌd÷Ÿç_ºà™èV^‚Û“®ÂK8±´•^£×OcžDæëƒ~£þžæAtVÿà·+ïu+-E ÓýeÓCNý¡‘ìþ‡sÐÕy±:'¡”ÂQг§nÇk¼‚…uÔTù£á‹²fŠ2ÓF˜(ÕÑdàJC…BG °ð%t‹±%?—S³–ìÁ5Žnû]„”àÈÈDøØ”<íª$Û ™ë$Eè”àˆîcáìx*«¸“ÐËýá§ÿ¢yNµ…ð5]á ô¿ôNužp­C(Ԫǘò'9ÈÐW•èøŒò7û´¾ŸðÓ~ƒæ_Âþˆ¶!Z ®©ûe†§ôXm¶²’ÐÊ2Å·6Y?´$`ÑÑYzè‹Ù³¢íý’Qp4K< £=‹EFP–§l‰bqò,Bõûcž…ZÓBKð`I‡¦y3Oå OÝ ªZ^Q ÎÜ’n’ŸüòÒÀº‡#µa~ý% ÝŽ ¡§ŠÝCÊc%–D§Â?$Ø»d£{œ*Ýõ3Ôyc¹ënt+©Ž;¡«ÞuZBÊ5ò5w<àƒXîk*ìX½:ª7›ûM*„ÉI­Vu’«p:[ô%æð;oAgFè—ÈO* N}‹}NXà›ÁŒuö%9Ä JŒ¡!›p6QA!§ä¢â`¾•²!$¥PºyίS{ËÉp¢ÓFÓ5q3ƒ¿Eø¡a‰àÇvFºìÈì&®‚Rð-âXÃ∽ŅW„'Á‹]ÿB׌ÿ> ½)É}>†¨µb E¦·÷ƒJŸâ&·W¡¼?d\¾ÃOØjËö?ã±—_cx˜Á¸åí‹#o±9]‡ƒFˆi={C×3©í lmïB¹UÑ|ˆåÔ|N¿àæXÓX~)5KR˜sé©Åi#ÓpŽ'kA®àx}-{*_ø&›~÷'J.g°œ)äkpë?¿n,3Ù½M+7à^‹l]Rù‘™ñz,¼˜Ÿ@×á T°?™èɲ£<›ö)k(t¾I¯Ó$ÛÇüqƒD|–éÀÔßý&]ZéäÇ»è[vUÍt¬q ë=Œ¹¤±´‘u¡"ɼ‘Uc×K·ÔIÉ*_fâSò%4IdHŸ2Í·ÐÔô{ šsþ˜^hùÙBÊO¯áÀÖÈÕ4¤%«É…·$Ø©jeÕut¿²ü„§&iìž6)åé / %¿x¿Ò$JO‚²% ÁjÄ0ðˆ.¼/±>3ô.óüYì±~?lÉr½‹ÿ~¥1…ènª†u ÖI½!ñìWÉ œ‹q¥ÙìxÙ–7‡ìb~6ãÏã„d8m4èTÏÛ&^ÃNMÀôvМ6áGD<õÀmJü ãZ ŠÚ|‘—þê]ö¸„sCRªÄþýcµˆ{Š^©/HÅë_,꟡ó£ø;¿ 0^¾»…mröõ.íÊê756» ʺ˜vQôsàIÐÜùm·*V‘ÔX†)¹À²Öc|–ˆŒ‹2¬>†§&mMØm‡øt3jašðH|o Õ«6F| }uJ¿dkÿ41È6W¨ÔÖ£x–ÜüŸù{¾D¹T¸XýÔxÙk<‘2ž>Gw®cèYÝÿÃEàºëlzí˜5Ýz1ÑÔMá˜û.˜ž š=Ý“h¤k좞e}‰wlm¦ñØHTMÌH”ãQ¯Ì""T²,«äiËšbùŠ¡;±/¡?gK£ëà5%›ý ¾/²'üDX³·– /BáÈŸ®H¾…(X^?Á($%_g~½‰NEŽÎ{NF5=è}Ö¤ÿÄâžw¡ãŒ7û&âúcÐÑʆò}#'gÀ~‹§Àýÿ¹Ôoj†ø ͘=*œõâû>?ÚÞe‰ Ã/½³Ð÷áàm'¢ÐdÍËÚÄZë§wˆÚ¯#[j¾—| v³^Ì™åÉ}þN„>…¿VF”uĉیø25´<Ëé߬Ðn½©—Ž¥#W!£xÅÌß+ì«v< uµ+\—­èSS“ë©)¿÷ø¾ïµS¸xž8&—¦†%iÔ¦Ž!”¶2R{–}Å—¢->‹q*k}-C¾š˜inrL¥T¿DDͽ̖g©F™‰ôJ ÿQ.ß8>9æÞ4!»¡$±À“n1ûÿ¦r¾Íµ0º»ÆÆ °Þ¿¿IF—F;‰)‰ÔÁtò+ͦâI,@±«nŒÖÄ£µ)àXj¯+Ñ€³p"‹0$¾Eðýš‰k“Äà_ ƒàŒþ²$רÓwg} )Çø%wý3+ðû§F„ø½!©^œÆãü£Nü‡˜`ëüo;Ðó¿g`oÙ7ï†<‰Ãzý™ÈDÛ9U©ô»‡ìNÙä¶Ic)ŽÞ¼ p†ÚU#WJ_‘üzî5½dxe~XYL:.C¥\ Þ# „ò”OQçsv6¢£ý’›¿BÔë4ödßý]ŠK[½ª„ìÕf”¼Ãß÷]’E’íûàF¶ÛSîiýF…›í¶’Qß@ÖâGÜÐÒC[y¬‰Dé#–¶lzèý”ë7Ъ^%r;X‡vo] Õ˜†©¨’¼z@ñ=ÌÙ‚5³Zð:E––¹ðb7ߨÝ\›#P…_#U™…„7S”¸IpVwêi¿ÔxíЯR¤T˜÷¡Ng”D·ëY<Ïа³ÌqhjA©XÌhWªÞ(ÓBË=L‹À³¯lZHK~R›¦%wý à'Àjî‚ÏXvãìXºYÐ(}”¬H½ð¹!!g±jbè„¢‚]Ų“Ùö5ä{~„¥xCM¡“Ûüs½“nìÐ¥ "·À¡ÈþPþ±µ.XÑùáŽ7™‹¤L7±wáúPñÆý±;ÿGüÚ±¾{‹ÿ"ìHÓ¬>οhkØyÁ£]†ŸFv5¢_ëâeömîFû²í©sv´¢:ú}¶”=g:|zé¯"V8ÛÉ.3þèW«ý°bû™}×ïÔ&¼)b¢ŠÃøÁš¹R;°…‘£¢2v«æ*L…Rþõ6é0ó.²9s·R;sßþ Ön5V§‘ÒtÞ²†ân>÷ÊÎב’YÃoè£|à«%Ÿø#iM1Ü×ÐKt”¾ÅÓ2ѧc6ôàóȲ±½ Ñ©M“½žYA±©q¨üréèˆêRNÔ-ëxتôhŠÝ §¯ µ•1!8ù–>ˆŠ2‘Öäüp^½3܃ ‰ _‘)ËÙU«&!Ó†5Ò¡oÀ“>#NâQ$Gmœq’/q.ýÕ “]û JgÅýŒ5Çü„CýX‘ØâǤaÎ(‚JV4ó¬ÁNW^¤ þw¡§ìjrý?žðž}þÏ5ôŒµ¿ÐЇv_±AŸ¬ÜnPÞ–ÞßÂi*¼`àJcÆ},­uÍ) /:QªØncAKq…‰"âßìmF°7-àüÍ„ÉVŸÉŸ¨ÐÔɳM‡….y5~ÐɹÞký*È¥.v"šzø­fÞû ÒfúŒX΃ÏbÊ6q¨›:^†¾§>õSuÇ]‡šÎF¿/£›Ô WÈåL‹l%·{Ëê59[l|¿Ù\i´aVâJvÞDë¶R"cMÍxk^æ‹èÁZ¿HKÖLÍuF˧ؗ1ÉIx‚[Â;^´:GE+ü*3±®ÜÀðg­E«SyÛý _Pœj|·ô5Q¶…5œó{Ÿ=ÿJDiLï-P±Ôz†¿ö•zû"%z"¶<Çð’–Ó¾UèX¶Á㸕¥ü‹=¢Wx•ޱ>cR¼Ÿé8 Q§¡S}nO;î'+a8}Çò= Esh?èxוö7ÄxÝ€ó;gæ†å/X]4ýÜÉè·È´¦Š1í|±¯7ØËhgV“ôñ_ƒ>Ÿô<¯î†fù膜·*²,ºî0þ$ŠÇkØÕyûáô…á!XN8’!šJÄÄäLhç$> ÃÐů+í 8Çý|f77£Ü±8††õš&K”B¶¶b!äÔ.~ÆæðiÓ‘¿6…4¢5êdÖ…×+D¦s¦~ \ñ=î<7ºÌþäK·Pß±“GI,­Ž¿,ðhÊÖr>9tÙàjóôcÚ]GL|±“Ðt±!\GØÞR·4&¤sdb˜QÝËaoÿƒ·…FÆ…š]¬žü·]Š·ßß%¾ˆKIïFº½Eo•U–7Nu1é ÷Àó°”lõÎGQ«3ð$#ô]zÿ¢÷Ômûþ—N-ž$•öÿÂq_¬Umcb= Eïz Ë?BG/ôo‰ß¨íT¤*ØQÅk®êÅœ K*¶äEÿ³H| zÝ¡{¡‰âÂåuÿDà•‹Ö¬ KÕ‰œ¶)nÒЉ6†?ž±1èÄ®ï¡% x%~cTäY˧¤/ /'¸=K’‹ò!9ƒÌ†ž7±¼ÏØóúa˜ æ;‹ú5­?DCøþØš¬ú5dÂÔMÏ Ã#k~!›Ð¯ðõ,ØðBlJâ ä]+¨FD­x£äà„.±dlYÜ·§¹ô,´Æ‚x„ä/í» _ÅŽÛ¡&¬IÐTº!gµ}‘{±!8_bü£*B°½}‰ð{"“kÓШ‘ÔÀ¿ð)ƒpóÿE9Xhä â NXúÚ=1èŸ7ØÉ~Ø&åÃðÈþ?¶ óú-Š …&?ÅC@5»´Y=¹> ÞOôǤ|¥ìÛdJ˜2Êš†ñ¿l¡àžßñ;=!ãè›FÚ»4öÇð=,ymãÀÞÐ7Sìn9bmS¥¸Ñ¨§ì×*ÿ†èÿ–ïGă×â:…ì5½c¸íCxž¸-qvý•N¥©ÀøùŽ^‰µûÀ­Ç!+·ü NGžÅmU·r|Ë+3—KÞ…Më —Ôxs&^¿aè÷ÿLª'¢ù[] I걨Œ#.ó·þsÿ†oGfcÚÛüÈÖ¯&[ßöI¥ŽZ‚jÖÄÚrÇ®“ò*ÙPë`Jw0øø’0I¾zŒ/DÃz}hó|FEiâRzÏÖ‚%·/x,œ+®›âEy_{=…·\H–Ž,K:³GA)Æ¢¹âý‰­Œ?v*ÚÓ8(=]ÈÕÜK±x/ü –ns"¬\ÿДÿÁ{a ð7 ~„…ü_èý‰Br,q/HJx‰ÔNzH¤y…Ške DÙ6솎±üØÓÄôÌDüŸcÇ;Ò‹<ì<îFVbÆœ2›Ó,–ƒÌ~*>íƒØ?| åÓ s 6Ç™í—õe\Ý&EBSÓBÏrTeG±Ä“¿Ú“cÃ…=MRšÌhÍiC[}uœh'šPjôê7®ŒË¨Wô4Ƶ4y~Îóœ¼ÆìV×Ú<ïc¨U‘kõ”½Dh$õ[CZ+‘aµÔª+ «i{§ÜV˜S‚i7¶¦-àËÃÄ-çA6ÿô ”‹°DÅ šð%Eø¾Ä,/'F?Á+º„¥tÀ…ø}‰W”EØô…á/BsÀœ@¶dyúƒ‰DNcaü¢ü/cG3±zeS)Ì&ôŒ„帤؂ÙÜg'¨hý°p- ^gÂûšØktï¸ü,;‘µ53²¢a]~ȳo¡×åì–úÆÃË· ¢õ=/¹“x]þx#ä„ÄBÌÂs*tûKG} WŒ@ý[ga%4±°Ÿƒ’½Ë¹gƒÈ÷ O0M{E«9%=Ò+sË¡s¶hv³=Èž\ÞÛÑ&Ó*ðQÒ„»Óß±“å¨,îq<ÐÕnÅm$k;\²Íþäiû~ð='y;|?·1ÉfÌ*çS”ÇZ¤NŠžW-½rD¦ÖåÀ³˜\¯Ð°Õ¯ÐªÛÏÁD«„çÉD÷ˆGG©êQý>Ì;M±#~X”¶þxX½|„®ó/ O÷)ûj$%=¹U.âKN¹¤)%P˜°¼>ȯñ‰ñ}‰=Á>O¡)"ð‰no³Å/Bx5ü…ØÇ8Oq1¡¡üïGÅs?cu?á’goÓddÅgÈþ±C©µáöMpY£>ÁÄý•%WXA§FžÆ–ìhkÐØðÉwQ¸÷®šFgìxßž9cUöd³Èó¹¡Â)âûná+®ÿZ—‘Ú–žºŽaío°µMÂ]†ˆ¡­ [¢êñìÇÌ3·Ñ‰E‹9W’é¼ NO$}0Q óM>™fÆÛ Mpìxú‘áëË-?àÊ\%Ç»P-âºàv¹±¥¥£ýôDEÖ>⨻|™9Ý‹ÚNÃGTÏÓFuû%|;ãAhÌ—Mm#PôÛ‘[ZÞD‹ñcR™xŒÒ’oQ‹ù’„°*L§Î¦ ?à^‹MÎÂV.صãý¦µøÄŠu˜°';N¼Šºé¹ÃЃCP“ÕoezlüI~„ôbK®…È—éÀ•n$áJ•n$õÆÂ¥ùHœô%ÿ¥½²Wx”E‹· »ú VœÏÙÒ1é3¢^Ž@ð$L°ÏÔ¶7…éŽc“ìƒö›Cý±XøìòÆåc_ø¦Ãu— ú—äâ{¶^í‡bšxçq¸Ÿbð‡óë»&3ðIÏsHz`éìöá¢õùàxKAÛu#§GuV4·t<]¾ ãÎã,³b$±;}Ž«–ƒÚ-±MW“/ xÜ1Obë#¾±a¥Cwªš59ó'¡oÝÿncKjôãÿ ´¬h5¾Ÿ\cKÑ™a b­Ü{¬ô#W ©‡ Ýµƒ)«‡Ø”¯È“qê§Á4]%Íýõ¥Û¸ÐÓ_ü§žFÔc¨´ÆŒ-Æ—/lu.ÉóDëÚî‡I7”D­Á×;z4aÄk¸´¾Øñ fœj$ó»ï“7‡×C=<‰KW ³)[V G §ìX\Ýø?ÃÃðÏŠfÐYÝ–yb£·ÈZ‘S0F˜á Ïcà»™$NØ¥ì_Âø„ø~ÈžeìHÒ¥Kƒ@Ñ ŠBp<è9NIì,¯¡¼oÐþ7±¼ØóÆô<˜|‰=®0+5­GûGð=²p5¡§´@)0þçHu‘D=odYvEÎ6c Aìé1‡Ðƒ£âGOJ[¤ÛÂ%¸v>Ò[jÏ#K~dh]öö+æ:ð7—*kÀײue£M9Á.µ5êäÔÓ—¡©gÐö¶‘Z}9‹•ög½Š.‚qKÓ'm\h<6²57¹2÷3œìFS·Ùæ)¤¢i<Œ“K0¬m-k§²JœfUIeYN“ð<7ÙɸäÉ£VM¯ý1S(z`£…‡èðËôk°¡8—Z"ñ—ô%mö%/èz‘¡¸Ö5ýþZ*^$´ÏE×0&Ó— ®¸È²»ÊÈ­iÉ#ZP´¤ë펴¡WF£wŽPŸNj$ˆj±By„®‚Sû(÷J…‡êìJ9Q£/Ð[p,áô*ªØJèÄœÁ(ê* ÁEüyƒ lûæªÕ¿¡+ø³™`M=…¸Ïغ[zD’l½ ÂqÕ4H¿‹p´¯Ê8ÞÏ$Æ—ôz*j7^Ç×üH“'qƒÏöÄáô4iöhÖ¼~ öÿ1gµgäêdçÈÉ>“§bÜa¯7±MÜi#’cgO‘— {P<=úhF=bë“EvìYødx8ÑànŸýç2"W Ñu ÔBUÓrÚ¶ô<Æ?ÂÍ\Æ­ø>ŒU¨ÑŽ¨ÎŒ?Ã'«ì´”*MHôÇÿúÐks.jðLOµ–9{NF°» %׬˜KH±±kE7æËëL¤.ßVÄ7m¥te¾¶c½Éžð_I¶ô5/a+XúlÁßRë…VµßA£tÝ F* iŸ!'IÓ…´ ÓoȰ²¦{5SðK7¡Dl¼£q—q/“[ׂeiÜWŽáý‰sÀ±Ì¼kü-2Ôê¶X²Š[ã„Íðoqö"öàJµtY¬=:Šôß80?̉H°›Cì_›è_#$ÿ‚‚ê/Åö/Ãö%äûø½!â^„øÜsb&É‘8cO*Šq†KBØÞ7¦PO‘ ¯H’Í­3Ëûb[Ôiü–ÆépQ=ˆ€Þ'ìyÙKìxÅ0.x›kðEÂ3Ø£è‘ñCη,}äkø±ðÒóPóÖf}m%.¯¦ÓœO+A©×¿q;oü_c+aÀíž ¶[ ¯`zrJ7ªû*Ü HoÈ\miŠx2²a¿A»ˆžF…}Jè["Þã÷ÈïH×vC‹QÒu%}1ô;nûÿÃõ¿©Ïqñ˜¡(Z÷ε´þµ1Òß©Åý `ó±ËO©U§"U¸–:=שQû‚Ÿ#¸”ñ¥ðiŽÂb˜ÿ¡(_eU–Ø”eÈ”ÖZ‹ÅÇïb+¨³çù+gZœºBÂ5‘Mâ%»;oè$l[;ŽÐá•iBùÞÙäJO¨Ü±BĉùŒiZ>Ï‘Ëì,÷½•wßbH­Eñ/±'…{b^eìOƒÐ³†! J>»‰ãBr'üp,7ˆ<¯/Øþ¦b:y$åzDßB~aåà~ØžFñ¾ÆѰÑ´ãìæÿèoÚ[ w:3aåËÎw¥w+m:ûŠFƒO^F [í‚çX{•¤çü‹)ë æÜÌM²Gx÷ú©vç/÷&G–ôVcõ/‚Sס§«1ëÃèÅÈʪ[G ˜Ð·4”:‚oþßC¹I“¼Û¦5ôKlŽ'ŽXÛ·MdJž!,£)U¹\V^ š,þÈ´•(¡¥jçМÇQ%ª…ÆÄÇ%×XmÙ«ô™¼Øµþ ©«ï"ÐÄKÝ £R×D'¥.5¯Q#‡Ø—‘f®Îß»‘m™¼‰]+^KZàHÁ¿ôYé7DGQñX¯¶w>cþ5ꦲEyUØùŒôQ íÏý kB¶KBHI:a~H]D•üÔ^Ù}÷äJþ'‹ì[øö%Á?gmH_“Ö„ãø*¤'¸œ<˜hæ~Æž¡å! –0Ë1ƒø>ØÅ4xØÝ¡¨oŠtCcœ}Ü¿ÑßCØöÞƒÝç ×©´Èö4s‰cË^är¯ñKÛ'áè7†¯­¤| ÊÔ~ޱíõì:hJçè{Xž¤ª¢5jc¿È*º_ú:IÊûÓÑ­ó¾ÇÚº‰' Ñ·_±ºê<£ ù2oa¼y&ŸN´®÷â«¡’¦ôÑŒ-qû‘å¸3å½òMÄ:…ÌB®| BNmþÿE[ž¦Æ³èK(#YúFbk “Oú‹¬vöÀ†­EŒ*ßóRª+¤²u—³ÂØ®)œ=0.IvóÜ/ƒäjÀ”q#ÙÁ§^…µáx±$߸¸·bÊÉ.Lø¿bòn–ʼnôeøÄ·™.ˆJ^ GN#A<äYbhJ5©Œ ’F!b‚|‚Bƾńqí‘:‰(ZzGƒBwüˆ6ŽƒàOëGñȽ•9cø^ŸònS‘ÿ-—ð’ZCø~ØÖ7àÕ‚ƒI<{ƒø†ñ OÙ”)ÄY…5ð§‚ôŵêL?¶7ÿ£u}Ї‡»•ívíÒt?ôe©·Š&\b>7u‡ÆØË[ÿ·úžVp5Î8&¢µQеúcÒµCCUPõÀÜc¦5n4?ÖN¬l7›éT<}äù¡Ê”B̽Fê„è–»î7{§UÝ-þÈñ¦omÔ£Õu4Tí"·×aÍ>òõ]| [—^ IÀµÚ_pöû òkk†b7¸MrEKBSTþŅÆrM*î&i{äŠ[æv2¶HÁݽÌ8Â| kô/‰h'”n(I{z V ›‘,è5RÑ8*ŠÇ`±ÞJö”ý²%=„¯fÅq‚Õž ˜¯œ½äJx’=Ï¡+›ú—óÖâöÅ¡Õ{BÏcÒ×…èO"Ñ9þI鼉¿ø&<ñ•oG²,hãz1þ žïH™‘9O¸ð†ð¿lÈiý™¯b½¨i#'fþÇ–àiㆿ{ì[~…Xê7E¨×3‘£þh6ûµ“•Åð7acÂ;F˜YÊòÁ]Xò´´®´tB®cWÀÉɇ6p?²IzJŸ y±mc/BW‡Ñ‡õîbç>G¾n $ownÚ}F}=žL'º†7-{Ô˜gËå•;ô,ڕУ4Ó’,²áã÷ê½úlSˆ”úýQuÛ•¨’Úz1á,s©-üÖú SSPYÏÐå%JõcÑ×Gbx„/1©»¤XÿƒX¼ì_bÍ 8áçäØðò'4¬!'4áþÿD…zʱiRqáp…s´­éöB5¦½Æ•4ܶòByyÕ‰CèJÓŸ¡cøM-¾È?L±:Jà®ÈGÛ^‰…ö'"r<·¡¤[‹[F?ìx^_²¥~ÃFK^Æò‰¾âƒw_ÛÞ·ü4?ô›µ M£lšÂö=±¯½Ñm¡ÿ1>µ…¬ŽÓ3Àòÿxt,Mj9KÀòÝ!è”ïôê{wä FñÔeh)s Ÿ&†¾Må$Ùcã‘óC#8c#CSŠSzøÛ%çKކ§¶æ´7+n–}2>³;àÒå5§îÆSÂÖǸ΅¶øn{ µ‚…¢1X޾–þǸ’§iÊ¢%f¥Újobe®¾o\OB9_"VܦÔ>ÃÖºf;ìD¯\H“禆†è——VòD;½ á%t%xc8bˆoZ¶4M¤…߉y¡)¥§%‹{AeØi³4-\ÖD£+¦Åq^ZÀ’ ²‚º4빆í^ ûËdð|3/·Ó,-0øg _boOBl‡]Ĺuþ11êö„…ßô*  ñû9W³Ñô„K‘äLñ#LTž¼¨jòÆžŠúÃtå ùl¿…`ô{žÍË:>ÉÀðzQR3zÔÆ¦pAÆÙ4÷³{™45!:´´3gÎ{>Gú?“%ì’¦èÏ<ø¸™á`dž­`Rˆ·°Ùºç“'£+dþ ÇB‘ÈÅòðQsŸ¡”6•ö=×D[‘õé3[¨ªò×Q¯h¡¸—‹Ò‹`µ¯(K¤rjá ¥Ätý Ûo P³2û'Sð=k·{ªe[ÞnÌ^5ê3ŒGÁ-áËÛNã…㸔½çü0ÎÜNEkœR˜·SÁ:íD\f ±^´Ôi0ðjVÐÉYq$kŒÅˆV¶yÂ]´1ëé¡]ô„•õÉ|XXîYl%Xß®Ïø5®Qø[;‘-Fž!§öL ;èˆ=!×hyNóžG‡¦Jò¡ã_úLëÌàå}ا¸ó¬3⾆Oêäòî<Íß ð¥ÔPô½Ú‚m¯8qŸGCϲHׄ|ö8cÄn6²ô=x}¶º9ÛS§A¼&¿²ôø\ôŸÐ,u%-T±Ê2Ëy³˱¿üÜžúÿ»1;©’ï55}Œ›ý“#Ó|Òüθzì'}gRk;y9±cf`«—^ Ö_¡¹p$+ïDã3GÏQ«ý.ÆÔF7>x˜Ý‚#*oÐÉ«Z¥®â´µã¡m«lQÆN›lFàj< ó“_EµQ’Þ¬œY†¹Šñ´|‹ sŸ¢½ÃáLÃègàžßµ³‚:ˆhõA'¹Mmö%ßB×€”5×i{BÖˆŸH¦‹<D»>Äð‰ôm8zþrü,ÄNE•ˆ<ñ³æ¯cB÷v>˜ã¤äüm‹N¢vŽ£ÑìCx_cr!¡z%ü/Šcì{?s¿ŸóøbI“'˜Ü¾Ô¸È±´>œ?òÿžGø¤~PÔaì7mRx[Í eØù£_e/|Hj[H…tjåþìòû=uœX~’>LM;ˆEJ׬ã§rmvIéÿÁ!##–Ú/úfÄKø80ZIÐÌ ;M¿£t$gÇÙ3zdN£–UQˆ©´ÛØÝ?ˆénEø²=¼™casTý„•|‰œ5!">Äkш¹ãA[N©bSÀ”áíŒ_ga!wØ• dIì{g“^Ï‹ôxw¡w DÈñÆ= Á>DìðLo:Ìý<_LxÀß§í„7d‰ð)¡µôûcOîƒxßdÆK9âŠÉùšþÕ…öW„q ÓÆ£—6œ•4êYþb›WD7¦,ó &¤7N .ÏCóQîû0ü‰‘dn:“1Pö½}:¦dßü¿àÙw_fR3FŽ‹b«²ÿ¸-$nÐÖ\>³>‡…¹xbÍ™k ë:î5£FÇ(fÛ¤¯$Û¶ôØV—Z…ˆ[µŒ‹™Œ ×Õ†oØuOM³&šÀ¡Â~rY¤¸±4T_×ø:PÜ$aQ{4-SÆý ÆÏaN†ì­riZû‰%tÓ"Æ1Tcà®ô(¿"Ö¼ÄxFÖGÓÊ“&炊ËWØYm¶ iß œš‡Þ?¡'ª×µ˜þ´)¢$v²¼eß/ÛìÄ£¨©}Z¥àYsÊ£°)&©hÄŽ¨ GQ!?5~ãñ?#|b~[³É¯bÇgÒÏBp'"€Ò¾ŸüÛÄÇó"ïìyâú,?+ÐÝ™4¡ë°ÞÁ§öLuጦ†‡á –ñý¡’퓼ޤiNk#u-’qéæ´'°ó×|÷¶ì7ÍgªËÒj¾ØÐ…”ÅôØÍ± HùÿÁ¥½«<©bÒúu'Ýg“º·tlDâà_Iã±³ü‘õùxÄ¥/bÇQ;¶Ìw)ù¯ð%iÏÑ‚gГƄøý±'•{><〥þÿ# (šê7ÐÞ&/™ Üð_LؾGëlMì42Cx_¶43á½±äkô°y’Lc~¹OG±íþc[k̨e1c}‰­\hXè}é—Ù:PÜ7è‚›L{?nOý‡ÇLh7mテSR'/~¬ŸJ×È÷2Å·)WÐô¸g¡ô2…Üø;7þ–k\ ZvÐnãtð"ôEæÅ 3˜'ó2Ò~GM¶ŽLžÿ°F6Ä¡º»oæ†ñûýiÆŽçAejóEÒ¸¼5ÔÉ–<$DÂÈå&×Qhõ±ö*üv—Q©ÑËðSÿ ­¾†ˆvÂ1záóÐÿ9r(‰L´¬Z}‡®’ÕþäJ‘W%ð…ï½nL\D1ÒØhÛ,›Ÿ6ˆ­º”×nhN–FçMZ#h—ÙŸ7²Q×þ ôd³V‡W0tn?þ…r%l“¨'xBRàJа•0‚4–û‹GùlY»Õô,èæÄ#°ž5ö$þ™byþÉ?l"~¡=ÁZ¡£ŒyhB†ð1¼È¯æå¿|?á¸NG󾌌ƒÔÜ1¡ýá_ÌJ>iñÆ'ñ½šÆ·q¼Èƒ#x{ôÆ}Iu·£)«þ[ãNÖ<·òÛ"fµojv|ý#÷éû¨Ý™¡§Æß™/ücSEèÆ¦´ú?éò5™€ÓÂÜ™5DVE†Lº| èßÈð׫èÊpb%Ë»…%·a¢4å™…·zA8cN?Hð–wȳ:Ã.Û±í;ˆÏø)»™Ðvã,²{£¡Öü¢¥²-ZÜÕjð*ŠÄÇÁúð<-ÚƒŸžÃ–y|mÿ O2”»‹6M‘Jßn¼5±¡8þÜ0…OrZí#Çb·é†nûuåø4Áއ¥ç’0ÜŠ÷~ŠO£>‰éBÎÿúb£ä'V`/šÛs-¸/­JwŒ\ NbÊo Zï—Ø”‰âGá#ÂBÚÞ_bTVþhÐõú=ƒã™8 žÿ%–ºxBS°‘ækBÓf’ÙŽâ_Sñ¬¾…\ýº‰^éGÈŸ†çžÐ½%CÄ2'üO¸þ¿©Úž胗Q¥ycOã hNà nÆ·qèn¾‚ΣGû&è×Cß‚¼£.¯ýâ¾Äã 26†?ZÐæâ(7ÝnEKðÝ“=T¾Ãßµ÷ü¡¡._CÛÍì7 ÌéÏ7Œ¼PüWìhnÚeöÛuÜÐ2®3ü9úcuå}mŒ p‹o{³óÐi{¨+#[Ôí%ìoR™ØlfvW4ùÀßFßÑ¢ÔN!Ú’ZuÔÍÊ ÔrÓÿN‹Žºœ~Ȳ¢y#¾¬ÊS®£8®£I¾«ÌÛ\äzÙtØb>ÅÆ'2,§F²,O ÕÜW%(V+s„J!CCF‚ÿºs}°$tÛÀž)P„ªÓ—žF«£ÔÞ»ØOYo‚;°Æ;‰ f,ëÛØÿ:L—¶ÌçÑšô!wäŠS¬”OUŒÌ¯æ¢×¾ÿBJ,”½ž {ÀH×uÚ‚N|=ù‰Ç"ræ#øF–|íÿ2âÒØy÷NÙñÞÇÎ`xcCz«î4=…¸žÃßÐþW·üoÈ ûS7 r3üt¦é“*ë^Hw‹ÑŒ¢+¸ñÞÞ½ÝËÓà»YÀŸòì{¾Œ|/Øjh¦ÃCÛÝh$;'fŒyý X¯©³Èæ(” YÑŠc¸¼—ün/ムnþŠ¥ü$7¢ö'Ãì@z>ƒ ú™n¥'°œ4Qô>Pð½Çüvfí!ÀÝn”øÅŸ£à¡9éEyGß1ðŽ…±º}Æ×Ô}Q¶¢½4?”Æë¦ìk¬ŸèyeZg“7'íØ{zjJ­Ð›o1;ŽÛo½PÓ¹~ÆS›kÕÜ£×ý3S³=+ð`‡¯(£}n§ÌzþŠíº9èJUqŠJzjQçª| ¦Þ| ÛO8&nº½¤O1ŒE ~$„¼gäILâ]½Lû˜,i’!b±:˜¹-Vñ[~öT¼ÒÎæVŒ/¯|"aháþýÀÜ=´úa}ëÁâ'YŽuºÇqóÝï"§Zm/¬’¶œ-(Å{ ÑhZ¨¼öEyt0ñö<“elç_ØÜ/±æ¾dh|ßï’}YSánvÑM5é–{ßCüö=,}¼a}§þ˜KS4û1ºtI2­a5”$uCìE× ÷‘D×çñ‰áGîêÄò¯bH èO¹3üoø¯æü#G1W¿ñ‡”äxCÓï¥oGìaôtDÀ×'¤¯(Íþõ{Ÿ‰ìÌtŸqû?a„q0Oúbã•üyÙ _G£>®½nGì´–²O†æ6ê>r”ÑÍ÷Î+þ’ZvôÇøàÏHÅo&Pßô÷Ønød{Ë}GJ¨PhàÌ#¬î$ôöŠ[xè$”åó‘¥½WMEW1ßDTPÜ8qÔk6,ÌjØ—Ë*ZR­‘2Å~Ô˜´õxÚúW•yÿ¥›–òa©Sþ /+©Ó”³C(­á5+µ¯ËŒ²pþÉÓÛ ô©_bëêË+Åé[‰Õü‹N~ŠkÛôÿK- øng¶§+'O†mõ¨ûößËr+{2~ÆÆpþ„:²ÏK½‡ñ¼ž¢´\½±9È«n|–·zÖ.äÍp=8X´~Ìa£¼=w}„$³á,žŸ¶[~ÄðdzˆHŸþ  oõüMȃø\ßcW¿±üOLzì<¿þ›#&=>ãPßûÁ¼ ÛÀÿƒ|·¨ÚõÿNm ç^ƶ6›}p7j5õ7ÔŸ8ó-ëîDÛ×Ð=»å’»ÿ‚íÍÿ£oþ³Œ®ƒÃœ2³V{Xñ±nËíx4.ŸÑc½P÷ë wÀžÞG">ëBô™í¸½jÆu4+ZüþòÉo}Q¥÷ÜTÛˆ]^‚Þ;‰’H¦·ž» ò=õb«a§gÇ„K}“™ÿ…”jdN:·^ĬèߢfzÜ ßOdàQlèœíÐó'[j„Ëwö% PÜ+¨,”ø‚R’?RñÛ÷‚éë1iKìt¶äO­ÌÜ[WJp4¿4ùÈ‘Ü[z¿”®ÂKélò=nlbþÂ+}™ÁÍ!!ø){èîÅàKðof:¯üa]«?ò3l¤x0pþf¤êÍ0dwé`4~cxÇ«é ;'È¿ oÄ4¯ä±1¿¾o±è4«¤Å-r?‘ý1©¢¿ û2> öÆé ÇøçÁ?¼IíCy—²RõÃùrq 2Én?n£®ë&Σ¹AáÇù#ÿGcc©KXŸ‚TõÏ"ƒØö2dö0VÌx•Íhz(jò7¨Ô7àÔ{ùo︕ ·Öµ:_b7YZZ$oW[rSµkW°Þqÿ3á/¶f6é Ò•Õ¾»-ïeßèv’ê¾ñ"˜Ö1 6­îU¡ ÓìH]mç8ÜNg)бÓtäœbgцå÷2kþSáêTP¦uCª—’0ŒC°è×¾ø$Ì©@¶°‡©=[í&ÉÖ{‰¥5.¬²Y¥ÔhÇ2²*›ät¿’=F—b­Á—¦ŒjÌ´zÀœ×èÆÞŦ¤ÓXQ±Šb—ìNQ†v6ßFTr?ÆäwÞ|hp‘»jÆ—·´Ç»Î{ ëRN» ŒKhy2ïþ!~y2vî>}”õäiy¾¥~ãØx¨#+¼>ºm)kþ1ªMºÉj6Z ºFÁ;Xw ¢¼Û·Øhmc6eðb¸VB*ÆÂÞøÿ¢•OIC¸×Ƹ&L;Ê» íLU`J|eµcQ;é“òá¸Á]~Ä⤔&Aµ®³ñþ |5ÔN>–]|àn«—œ+ÑkÜx;ˆY*ªÛíh˜MI¶ôxÈœVþ?de‘×ú0êQOrŽº?e—xEÅëÁ:Îþ1¾%ö¿Ñ†']¾ðEðyê¶hEÑöVu1h´yæ%ÎþŒRlö5ü{9ÐËÇèø¡|¥/êpL·µ x¡¤{\æéÑ2ð},§‚Ìõ0v8ø>RöHÆáˆ9FS’dïäq9aútô5û{=¢Äo'A¹[òižÙœ;–`oWSø#©Šá™ #¬ bÇð?C®°4aíüC,<»¹†:“TñHRïd%nú¬þ¢qµ 7 êÍRn9©ý#îL¼öØài|÷4õÑa‰*©Õ·ÓèÂIÃX7Vý=ô…*ä¿qRÒÈ¢µäH­çà²ØS7ŸC4´OwEeV”Ö½KÚòÜçRgÂô'M+ëÔjk(&Õ2F ÏÑ¥«eÖ6ÿGkÿ:(Öù¾ƒwÐxÓI<äÛ: wØÔ¢o6¼—²-ížÖ[W8=gÆ2ð4o¦f°4£Wi —QñÄ÷‚‰œ×·Aë¼3ÜhNC×Ðô…ÀÞ5ì§á“ͯc|~ôI?ÃqÄ`´ÿᯂ|ˆiòö7wý/k°öåš¾GpÇ‘êbv'â^ÆõŸ8~Q¥xBù>Ïc&šdküÍaßÕû2;gÆz2~Qú}‹¯Â䙬“™ÇS&¹Ü]Ñú+Oƒ>æ+b‹ÊÈ’Úà}äö bXº 0*ÿƒt²WYÇÚÕÇGf¤$¼ Å)ISJ Feè6“Y‘¨ÏC7µ—}¶ï&¼Ža5rŸ agµ4IK:²ÊG„Þ_M Íø±+”{?t(u Þ¼õ;ô£›+Ž%‰dpšú%8ÊváÌáUi+9æçâ'ˆ”o8±·ÙeúD Ƹ+Éu•¦Kmß±8oU±dÅI|˜jY õbXÒÆ•(i·e%¯ÈLë±¹F~ý7f¡£s€ƒRÅC…@¢:;’¥èöÅIKÑömî/Êþ†i ØÞ%íŽÿ O2ˆ¸ýü°õü‘n 𘆾?ƒÓö¥ø^Ÿóšçìx渘Ô7‡ìNÔOÀ7„=Ÿ“˜yþOÈ\nXãØÚ™$¶;ÆF—õ{&´ñCwý¨ß?àÖMNd˜$ëµM޶<jÌ•¡£‡Ð‘ïCXn´ÄèSÏó'¡:ž/¡žM‘¡ô•þ,wº1 ©è‰sþµ‹‡½cÿL¸^ .™'yà»ûZ y¡kÔv–¥K”3‡Äñ.LwM÷Vœò*Oe³5ØJ#§øiíh;ª"µÓY4wkBZš% VMÌí·ê,»´Uk_ôXê2’~X˜EÓ-Û’)Tè:€Ü¨E5»×”6ÖJ9+£LKY‡}§W2=-†…סÛÈo ´}G†áðg}ŒÿŒjÐQ¹½ÐYèBU‰sv`Õ@NŒ<=±±ê·Ê} NO¯Èß¶?•{Ê[ÀZþ›p5/þ~s?Mƒã°óÈL¶=v1ž&&[}Œ{;Oš13ðDæßìn7)çØ‘9éàoÊ÷üx)Äô6§ÛØß!¹h ãÑŒv¸3wÉfB\LlhÄ¥­3Ж86÷CKn ~ÌàͼqܦMQGgºÝЯ¶k2lõò;¥ÏPêŸ]DÓÚ:’'vç°öù"žub\ri‰ýÿ¢ˆ/ÈÂTÏïô§Fv騸Fyf­cìY[î6ñ¢mê;kõ‘ÝQâÆKVç}hMG7 —)Ó[¾¥u)ö&´VèÉÊ{éR6ûcËF6žˆ·1Ii*¿x¾¾Äá)ŠØi]åý•Ù×c ô¦<¤ç^q¯Ã/Âfààît„ÿô¶†Rft G¦ÿN–@*¼Žw$Œ?c|ŸCL žk4qìë<èÏÑì= õ„'¾44Dçøœ? Ÿ þçzËDÄåLeø²z à_Ê1›ð>gòzPŸ‘{ɰþs=ÍvàÂÖyÆösöKø¾‹Y£ÐòŸÖ?uü*Ǩœv;±mûQ-ÒÈ|‰ °»3%È–Û‹ò.뢡ªÿHv U-èÅœ-Õñ1d´j+•M}¡$·_DÛB§T÷&&íîQ·ìX­p$Ï-‰{HH¬Û®ÂpâÖ| D;W¥bÚÍÓr¥ú_èÚN¡1en¼ +=DÅuˆÕø0Û^‡ýÁĦö(èjva®ÆM'-Ùƒ&»;!úîx,Kêk WÁ'!†Û©%®£,´û/¬.¿ÒÄ–½;óô.οG©™}žÒü¶'"˜gV¤¤ ¨Ö„™xô Ç#Sf׆Ö7Ëô,ø+ìo‡Û? ’jãÒ$ág9ÿ„’Mø—ôœ~ü‹Ù÷{Ï#ào6;Ÿr¿“ØÂÜHzA õŸ<Ï­ ~ÿó‰hÌÁK±îêýŽFȾ!—"|ȰËb/ùyÌ£6Öv¹¾W£G³è̱ ¼åŽæHÔjŸLêYp"íhy|L¡¯8ð{•`w¡Õ4;tD³5À¨³´‘CŸb[ÔM¨ºJ!Æv¡V„½ËZ)ë?…ž¤)µ6oW¶ÇÈ ÿ‚(èOfcÿIÏP·3ú¿f:'°âR§N¢¨ùdTœÙ™âã´:’æÜèaê®s©0±ß"¬]™¿ßÓÌîq9‚Ûý*fIùXŸF7“á>‡˜ßÌÀIìKß#¾½LÞäS÷ö ;²Å kCèQ¯Í !sœ2S=‡ãbðf„»&%"U[2a¨FQÜÊ JãàYVEU$R†ä›ë›'bsÜe aZ‘k™¡Y*lV•êû : Œý#W°ÔFxÈõÓ9; –¨líÑÏ‚7Ó—à„­¡4×IŽGæ åÛ›§¶w×®7¡åowCSXR:Y£àê{ÞÕ“Z4kUZÇï¡wcsË‘æ%CÃ}dsfƒÊœëôBýñOúïþ„ûAå>ꡨwÕFÃÃc|^Øœð‡žÇ¿æyZÔ¿¡„ú¹„6æžØÚš¯f秤x4'Ò&ú Øz_Ì ŸVkÉo³ót.Œ—#ù„bÆ¢Zî О%í˜Ý’YòÊ‹õ4sühS”œêM}šƒÞò>x& €ôdì7óþj†#¼oa­Üe.†ßkèÐ`ŸFd¿41Gµ}’N<âÿD¿¢ƒòMD'¥}¢Ž5ú£Ô‚y‰²5eiŸÙíÔˆzw(³ÈÐÞrÌÂR[Æ#aª}uuD-ëaIïC¶Ï8ÿK&ò4¥å4#½¶ÔƵÐX ÊyèPJóZ{š0kì6r/ú:Z*7ê+(øµLižµÓW¤+ÈÐ<«µGòÇù¾‡®ÿá?ÛwEö7Çìl?’IÚôuÚe}(zŸêwày\ýXê<þX0Ñg’’H{“‘» ’—س“,=¢yÄ‚ôš92dTŸ,«'²3ÑÙ«–M`n< à} o®Fù¡ü„“Äç¡Å–ÌÝÆRÆâ¸§èCNŠ€.G»ý>àmvߨ’ØŸèÇñ¡,ÖÎöÀ®bXÔEÆGn“¨³§%\ Ajk|à£zÙ•”Ê*!£ µL«3/Šf•odÕp{þˆ™ý"«•T#K»óJŠ!TI"ŸBDU_bJ±{ªìY©îŒW‡ã$q¥ mSÕØâ¹žÅxÓ¸Ô©ïbø‘±„›ù&Ÿk-—Üx[µ©mÆôF'Ç¡ÖT¨i•M=ºà¶ˆµ›ù­Qqaˆì'±Û457çrÍßÉë}‰Ë˜´öÇüp6ýïÀ°„ìnô`p#º½ñz5ý¿‹øËÀðœ’Ääÿ~†ñÊ0Ÿ<(2Eß’#~Ä¡áVvE|_é[²ƒÖ'i6ø9þ5´³ìLizÖTHÝ:>èyöæ~™bBø]Ä“‘!½„[p™H1U£2_š Hö£'aà}áýšÄ²…ä‹àxB]ôlI‘8‰–;}N²án:xSûèJ,tÓ§w2zd»‰ ÛƒFå2[®íÀî^{N`iÖ•ó/þq«ÔyåQ‹ßó(˜×¶^Ç•ƒÿÀþì­Thbõìö,ý1¢(©È³"ÕÄ CBÝC̘¤•ähèÿ‚Žñ:þW´|V9b†•ý=‹ì‡ñ§ðJþL uÐÃø˜œ/Ã5Êö5;û, hIæXôÿƒR 'â5ÿ øŸ$”£¾ÓG&£QÑäÎÉáÿ§½û"F¦Ež£/íOi*X,y3Ðn£OBE·Ð…­ ƒ­3ió_cËö0ÂQõÈçp—o£e£›3qö…rµ‘)KèUÇúDµìRÿèð¶Ü¢¾õà¬ó÷üÜfV£ZÉLÃÔ‰jT=…Q¾ù5AƒKwØVßGð-ò$jŠ!vF Tnx‹“¥ÏBÚ6ö%ri¦‘ªœÎ5ÖZT'›QyÓ1ñö?;Ã1”fÂwö…ŽH°R&uCµ®ÛcGü)%ÑÑœ­3c¼,s:‹|Ä2ûðÌÜ X[n+-¨e–+Èɬ¹Ù’Äö?èóÄÏ: NGëT|Ðô'ô) ‹ Ÿ‘{E,ÛÒÛïüNÜëø¬Nü1¦Uìj݇ñ’äçY1#Êfvh¶_bv'e»Qò¿™ú9"äÔ"wüì6+9g䑺>"û {Ø~ÿd ‚})- ëà|ê5»e‘©ß‡“G,ÓÀôüÐYNOzÈ·ì5RG…ýÿ.>:‰J›³ Ô•iWÚçN¢u:º5žÃ´öv+HKPÊ.ûß²rß ´µ—|ÿéK »H:߃ ‡.HÈ’¥y1ÒÿðY^ˆÜª[hÄ™R¥¨Ó‡/Û¸¥¶„Ò%Æ£Jo?è°¨xfTÿ…µlºq44­èÊ-ÑoÚ;¿ál3jm*ÈþQàbÉ®Š~ʨõ·Ûü¥é³¡¦;­E—Óþ0ªžû‰«p‰aè'B:œº~jivCÊïøÿѾÄúŽã›zDøð'jN<‰ÜÀ$˜—æ\`Û“òWöÃþË·&ŸàØX_(NÙéE§ßøØÑÈ–Í´÷G?ëK+¾ÄÐõÀúC÷6ußñÇ'Á¥¶ÓôièiàÅù¡‹‘þ韱>6=‡›Œï¡Æý:ocCæ·— “”õeôM[K¾âËga,icS?¤nRÚJT[ÔJŽî>ºòJY6êcM„£¬Æ®ÿ¡1Ýÿ,ž¢ÎÞH¸ñ-|‰ÅõQ´âz˜ãC©\\ EeªÇhÇv:X2¹¨BGYÇ¡ÒCõÒOØ®ô(Þ¯Û¡«¤‰OAa½^ÅMwˆª]ŒHáÐô î¯#aT2Ù¥ª’\uÑãÉ&’Bµ£ì”@®£Çù½¢ËK¿Hv–âp<öêãìŸ24 £²§¢g‘8Ä¿Âeæ?‰H²àj×?d!ßßÿ ç¯ÄGRìÀxðìeþ‹¢>÷ñ?Q_'Ù• ùÒdØÔó¿ÄS%Ø<³¡“‘+ ÍKb¥bKÖæBMk#N$ÓÃ0oÈß/ôÏ{PÒŒ‹ž™“Ó©lK.èdꟴQ©‡ð1-*r<â&:>IŒhaÝ^–û‰mŽÕÖú‹Ïȉ·r+,óØRÓ~ŒOYyìD6ó¨­þˆpéF¨JÛ©-|«_¶(T¿Üá¿(HFꕣȕt0]ß ‡4½ ÃÚS~WК7/èm%%Ÿ•Ñðo#À9·²ŒæÞw:v¢29mÁc*²ÆA™Ô3s{.[›"Ô9íZè7TT5M±è…®ìjÓÀûÕ¢Ôÿ3¦þ„á&'¾ÆøóÉÕe“§¤&—Wüh~?„wè,×ó/q¼g(Jiÿ§Ïþ2\ß_É nœ1d§û@~¨§?ñ?SG"š åFBIô «÷_² WA–ö÷š²Þkùù…Bî]辂×HbÓ‡Ñt‰õÚû*Ú®£µþ >ËÒ*ß% $ªÈ©·Vëª^ÅM„ʳÔ`Š×“]Å•¦Þ; ¥ÃßÙƒÜWYƆŠWúFbº‹1½ÃÜÞ»P±žÂ×; I×bq©Gø]ºšÝTAÆ·L9l¾…—98‚p¿lEáVóÂwSÎåWZûþ ÙÐùV¼Ó§}غùì$òŠã"—{àšÅ6ÓYÙ'õÕ‰$…´)-7ìB»º•c_òDV⦛|!ž´!ÊÊî‘$ ZI‘iºpåL®åXMƒmÑG£§ÄÞxÏÀÉ4"kp£«'RÒ¦•' ¾¦”FÊ_*­Ð‚ÛR*McIuqðâ\æTe–“zCÇ]œ?IÑ!3èãÑœZ åÑ“NÅ#ÄdÊNŒ}m¯°›“t°$ú0'&z0è'ù"[¸ò·£íOŽõýc>~Yƒ14pý‹'Âÿ ô‰ç!¬eàÑÉ)f‡Ë»ŠyØ©¡ýoG¡ä?rõ¶B[àQ;3ÜƦ}Ú(ÑÇð`¹qÔ[íCÆœ mŒž§Zg¹ºŽOœú½Àò·bùШ憧YÌÜ]¸›*Úê#q´ 2‡ixJÌì$+‘ ©‹Ÿ¡©ocQb{N;_Ŧ²ÍBy[à7‡4AÄé©Ò¾¢F¤‘›yo³CT²ª§®­ÊÂq­'2åµ^k¡ÂС5²"†í3À =¿²|Èiwˆ8© s'ýYð5Ê0GâçøÉr,ͿђfT¸b â_bÎÍ#—z–¨wÚhäkf„;âK™y_³_ã.ÓÐÜ¿?gÖ,MêB[ìFé—Ц*œm¿³0U.è-9Z̃øÙŸSËb7%)Ö ìŶ“Ó·Èáåô£bvèK>™k¿Q+Ùº"ZD·90»÷P7‘55Z‹L¦îEÝ‹ÏaêtJô)ê.:ŽêþÓƒ%nú1ôÚ°–}ž…o˜òaÑÁo£è,ü:\î¶1ÎßcŽÊ‚cƒSš¥‘Ú銗طudf=Šî–Ó17 {â!*ž–CŠ’ÚXxCM®’›HXUâhMuPá4¦¸˜©hi¸Hcš§DWj4œÖa©[·)ùàΛ´”áÁ'ݾ§nnéoBäHLt{%¼¯¢ìF&‚HŽ“ KK\)дùsä„ kó¶ßT·é qß0Ó˜X‡µÛcƒdFåÓNKFóÏP4Þì¬ÙA1ŒºMpZ5餲“œx1±4Ôe#}·5kx>(ètö/){:¥/Hð Яø¾?‹Ô!tD· ¢[Êö5;û>;×ñ’äÏÏÑ6˧ü¿ÿ†žôH£Øô¢úwüÐÑÉ“4þô@‹½G=÷üxeªÑèɧþ‹ó5|ŒÿA}ÏcßòkÎ0 ‹Ðö/ä¿1'Ä¢ð¾ãôP¢•} MˆJªMÏètÜ?ðcBÍéèÏúÈcÕg"Ûîdߨøô$¬XÏþ‰:ÓúU]¶§è¸raåú·bÎò$FhÇ%IMë[ÙðQ®Ã¶³}Ä©Âhu,Þ^{ K/醧 B+­šGäÌ©gÞ­&Ü,à]mJœ·/=¤h ÃYª¦UÙø§Í”‘Æç3 ÉC” àE;>Ù:Ú¯cÏô†‹4ŽH"n¿¿á0Ä¥hc©fàzsö,(ëì_âd¹Íôj5=?—‚±Gq|KìIšI ôbe=h_0Ù4ÎUÿfÞ¨k_V'Áʧ¡¨ÚžÒT²ìu$ÍA=é?0ÒùwÝ?Eã"ã¿%ö*ž¸³Fð'„[ÿެ ‡cÑì°Üh$¶öΤMÿá‡Ðm¦³·"c>Ä„˜ø^E¸’¶ÀïY £G•]]ÏR–ïbIyC§ƒT,-9p`,­z”éÉ_·s]£~Å\Bröiù†L.#K>JlXY»lÄ0ØNfÚëߨœ-ÑÝÇÙ7jFÄÛ ª·Á _-¬š8‰]²ç({O1nß$usß&I:›e4ë×q›~ ñ~‡yrQµ¶ÒsQ «G¨Þ„Q¿ãä^‘©6©Ö‰}îB 5”’”¦wDrc•ÆÆ­¨§4Mæ’vE^ ž©­W‚$$9¤ûtiê:Wm©çe)why‹)=¸´&Å·)ödÒ‘v0©zçXB¥{›4úî²PÇl¥›í˜9CÏô&ðz: ëR ø!LL‹‘SðÇ•ÏØËäv?Ã%È—åú0]1a8bÈ«‰}˜bü—üÞ´/›øÐIå3³bðŒ‡ó¿d#àøCÌKò%A’$‰Ñˆ$wD—ØÅú„¾HW OálæÑn7GÁ.Äš‰3×°á/¡%øv¹^<‹9yñüoNDˆuضÚäXq)i©‰_N6¥]…”¸i¿¡áôit¸\AKÔF¿lÇìŠÔ¯ýlгÌöÅ=HR%=DábÇøk¦?Â% ­Ie¹®5fèø’y]xFŒŸ–Œ”Bš9öÆ”Š&„ªŠÐ¹ݓò!G ÉXÄ/Ð{!ÈÌKWÏd5'Í­UÆtÔš_,­a¹¡¥Z¢.ô¥Ê]U2W¹r(•å®;=rÜ>8#ΨJ‹H4ãýŸL1©rY!î133"¡VŒ&‡ ˜±2“)7T÷õ\–ZËŠ]ºYõî$›4¢Ì)nºKo»viâY‡Ó•ž-|Êí£‰‡³i|Æ£t†åðtãÛ¯íFø½!Q­!w´!ü„+x±(,ãʨ´%;ûø™.GžoðI2¬(ô?bľĠÈõ îL¨zÜ\¸çL4¡UCIkÚ7Ø5RM¥*>¹2—öÇ;šo]GeÑa¸I.¯aÕ8p?#RÆêëJ¸5òu ô ¤þr: 6ò¡ë¤3KÒùfßOðìü)¸êuø=a¿‹Øß¤@œ}‚I¢Žz„6z&Lœ Or%È×­_£]Ì·ø_ûþ,±a¸GÈþ<…Zÿ)ø`‚Ù–†¬?Æ5¢ˆÒü^œ‹ÉTôbnæµîkaØjêK›FT—ÈíkÀ…Å|Hݬ¤êâôÖ£E2¥¶»,ô£ÀmĘš4)²I¦ßU«CuN*J%I-I%›û;E!ƒßI"[Ù%ËÒª…yRé&¹}å\æÆ ºr›Ñÿ5ÿ§cÙEºþ„ÚKè™æ¬xد±¥ymzzC<Ú} >£]t0J¯;1åkbÇíÄËÊÑ󾄠JfÚHøKïûô <ŸÁ|ßct”$7ªȱ#?ðiºõæ –«ï?Äœºÿ=•™G Í!¢8(X¹¼£/ÀÔ§£1)nÂþÆ„SòöI±«ÑVõÔžƒS¨¡îXµ«&lÄ\TÒÁÿMÐB´çèjž§ÈF8ˆÓì²­]˜F¥y븫f¼rö%;D¶,"×ü1crk¼ø>å×Z-ÐI‰cQ|N¾ gˆ0Ôé«ÔæY–‹6™DVÓ¼ËD”ŸCk«a"Joun‘tK+.åK7¦a»mÍד‰W¢=b)7I·z¦úê¹½\Z¤nmµÝ¶û¾¥c2LÖÄ{p:yM 0bÚPº¾„KS¤M2Çš¶»ôàr&¸2´.Ãç¢Ô•[(ò’'Á–3 xýèH›3íáö7 ÊöbQ>èJESìXü J´Oп™8žä,(ê~.‚ÈÖp,…,¢bȈ €¾ÈbZ¹=gÎú(8xEÔf‚qÊþ&,Í yŸ²ð±Àô<ûÔ`X‘ "ÏpHd;¡b3ɧ‚…‹“ç# æó…£àD’œzž·'TÅ…‡’%ô"4f:po‡ÔQYì=wo—LňÜhFaËZ[F¢%L˜®2ha­]v^®ìJZ«Ÿ¡*4²‰ô¯XyÄÕäï3xOª 5Ȇ” D§`×ÕŠ+‡š¥Vêd¦Ì»™ÔËUŠàÂÄÆÃ•ÿEŠr*¥§?à…ÕeM–pÛmÇ”=§†Šà4ÔÞPäÅÁ´©)©Ñøuñ’SQ ‘¸ç…:˜ZÂjyS¤½ Ëo-¾£S‡«Ù+FBƒU’Z\BêBKw²¢Ã$àá|ËÔlÅ!²ršø$ Ú¥³ýiˆš›;ÚQ®[´&5ú†Èl›Ââ~ï¥3 9&¿Ž/GƯ>ø}HBR/ÈzBÓq(‰¯‘D»‹ãîi>QÙƒî5 ø?„OZ—ØÛ“-Qó>„ƒjð7™ šK! Øj9_×Âz}‡Ÿ'áØg"süYŽDÿÀ›ù@˜àY„äJò%øCÇQ'œ%1'lJ3©øê$5jíby!1®Œ4žSßQ/ »Ë6ãf/ìXK±)á‰ølj蟣Mœ±¬Ì$Òëf=ÇÉ4/²Ÿ¨gŠX7-š¯"½¬ÑlŒtøb~J6…’”Ún¯úFö$T‘ìÔ5Íà ŒèÕÚ(‡•Öÿ"½næ)ë¥!N”©,”LŽs¬ ùRV„tyb4ÖH¢Zj¬jIɦBŽëob¢¨ä”o*%] Îþä‹5-Òx“lA6éd{Íêç#â/q̳#”*=©oéÐÏ„¢ ÜÂX™™îõ' Ô83…%òÈPG)k;ì·er3 “á-è’‘)f„"=1×ÜÊê³ÿëäjSBjª¿F4™¦1þŠ\½†•û°Ýº¸{Cò‘&þøT%_Ë?R—=ÿŒ½Ç•ÏØ”ïìO {\Ÿ;èJ_ø`äĈî{þÄŽæ[ô;4|ÂF•á! f­O–d"y3Ûÿ†|w£/oc÷BS?ˆè–HHŠ!ƒqäo+ù«nŸÁEäI^Ñ/'å°ð!¥‰G],T÷?Ò(Æ£©ÔSÙ#ið%ˆ*»þ…†÷“®J¥ÚМ $IQ‚AB|ÍX•¯c×Ñ£aî]p3íájbKÑH£Kè8J˜9B[±„uÆ,7Ȇ¿št2iÿDÛx½Æ·ø83ÿýw"Õ{x*Õ¨”û’F4"V ‹dCY0Ñl¶·1rE½Íz¯©‡ó±Œa}‰c•MP¼Æ:¹þt¼·u(%n[´×H¶'ãvzÅ7wq–ãAiøC*–­-7Ûb'®íeA»C½`R2£hÝ$o%*Vâ%¡PpÚ0»­ÆøgDLR´›‚c<š(žqNU¾hOÔ ôr]„´<Í"N3˜ùJZ PeL:{"3!”©›5WKWxÖѤ¾ÁP8—Ž›”hRÛÓ’‘¡¹Ój‹ÚN7„¦+Mºm¶îöŒ ,I§O]•Œ@Õ4·K ”Qéx_ï‚Ï9ÅFÍ¥[VµpàÕDÐ”Ž´ÛìÐsŸ@õbiBêo ubÊ•|Ž_¡Xó¬Z…c#]¤C§,TwDAiC¨5‡ñ~“'ùè’ñ{Ža¾?Hšoü~ 6–%<‰C>ƒoËìÅßÙdôz*Œ–¥y¾¿ˆäJz޳!v¡3{Jòy‡^¥v*ó˺#q!£ä½žQÂz÷úDù‰(YH\ê*]Á%‰å "ãJ2ïþ ÏÓ1®ª ý¿†§˜.uEc°þ¡'‘ô"o¡nq°Ö„ Z´+ô…†ù¤’KªVI½P”‰Ç¢Ë¼ŠƒÞý d¿ý.„¥"Ö³¹M:&+F"Ù±C¡*†½ÇÓzT6œ¬^ã-°úƒ—fIçB[iÎD奵è™Jú ñá)ôM+¯©L4}0žÂÂÖ”Dó CÉÃ%6•ëa‰ŠÚ„’yUˆc2R‘ĤÙÂÇAC;#ÄÅ­#»ù½¦W%:4¼-Œú/MCjršWÑéùR`‹MΜ¦´ÜÁopJÈ“LÞ -ÿp?B{‰K‰eºôZ$>Ú¦¢†•pú’%8XÃ"‰oaYlu!$¹VuN‡ÔÊ{_#%$²4­‹G½¤´â”麭ü):·×’"£¦IY´ÝŽ60aö:¥,$ÚiW,ç—ÙÑm„Ô¸k£Ïrï xšmdNØé¢ÍàiìûcUõCçééâЂ J œ È”¢ ¼öù>+шö‘ò¾ˆ²©È’#Àÿ€°5ü¤öžª`à…[ÿ ZJó™dð!q“å?æƒâ½ }ôkæ,‚YÍd]Á.„ˆ÷z[[C?NÂWŸ¡6ê…·cüáZoùþ„dj$ÍËÚ6Ña”ûî+-Œ!¸–ó—ü¨šÖ„_C(×v#„Ëò4þäôEº2WЕ§ð¾Nt!g˜F¼Ó°“}`š]SGð.üó»!ã[Ó†§„›ï¡îßQ±âí+‹±¤˜tèn$bjâ!ø“߯ª†C1ù LÀð“m[Y¨Ä÷- ¡:“D´ý%KÛ°ÆF©Ü?ø0PÞ%£Z|ÀéiBÝ|¥ân[Ä“Äh6¦ÝÊg-ºùÙt&ÚV‰5CTw±ì÷˞ǜÒêáÿî(®dq4´î4©O <ôÇÈð»þ…kùñ#|ctåPÏó²…W×ð”›‹à—¡R8\%rN¿gÅzeP¶†â“3 ŠQè°¡q!ؤ¼O$‹_%çB [ìù¢I ù’þ"ð4+\FgDZ¹Qçõ±GüBJ2ÝÁ/©óF&‹óOáì_ÈÔyÆ¡E ™¿4ÁºÏÀ¼•BBî2îÅ #]Èq²ØNv»»àˆYòJ»ôD¾¢Wº§_¡(L^æ§a8¥,èbIÿÜ1è¿2+?D7<ä²qö<=Šq :6ýJÔZG–. Ô>FÑwÍìÞzbÓÿ¬¢¿Á³TèÆE7±™é?,Kd}A2·)/$%’qi‰[À“ê“>ã“ý„è¶H$C$tecYËB’Cþ¡?7±X]ÜŒµÃà,¼ýåög­¿ž×ضÅÜÔI~g³%Q]H¸þ¿B溛ן¡eòèûˆÖ°F>Ï0%.>E|@][ýe5WЊÛZ–Êœ¿bá¤GíOÁŠfv.§e/¡b½YUãìb<+%;¿DÓ;8!§;ÿ£Á 0~†ºM²4¯˜f–—C–Êdó7LÞbX‡³‘=`¬‰´$ÒjTVÚ±†’êµâhË!aD]2ã¨æKÈöwÄÍ}†<æ¿Ñ™ä­¯ôzpþ‰—Oü¯ãKí>ÙuCü#uãèÀ¯%¸—àÒ%"BF¾ãÏ#ÎÀÉ æ5*Ÿq$5ÏâsB‘%‹ñCÇ)'Ãö%xBùWðì,hØ’ÿˆƒ$?Û« ¿BVïQBcZY!® ô²ðuɦ<úÿ¢]R[‹]ÿBBþ$NÚ‹"y¥ü-547M[Ò¶%9ã¯B¿$!„b…gø‘yä-{ûÄû12GÊ*E“ðõ3!|Kø²zO’(åà÷/Äàjs&_ÅÓäYA<ïdÀÏ‚2þÔö¡)ù¡—òÉóDŒóoB([\„…áôb¹ÿOz3qüKÎE‡üz–ö'W&(Óž’A¨õÉýmå–Ãqf'h¡Ñ»ßr&5$ÀE10êì+k'ßô7ò« ³N²›{ü¶!lÅ…áèT„–U¶x4µbWy$_…aµð7ÝCËt¶h¼œ« +®åQw†V?½éV}à ݇þZ‰Ôk‘òÍAŠV6ßa½õ¢…ö íòI؇áCRõF1¯bÃéû,×#òÖ½¯RAaSo!xþ–|®~į±cèZ2BMÚ‰A„˜i‘ðд©Jv‰ä(9xÍü%(\;‰bQü\_W¿æ'…è[vöfäó–!øD*ó{2Üùƒ4&8bJðœý11è낾gضÿ“®[CPŠD¦½‘,…ÁCØZæþ„ù†0[Â"S×’2Ä­f :¦ü Öíý Fâ‰Çy»þ…âX…;jtƒJ» Õ×ׇ¢ >é¾–Ì\^"ÿbGmÆèõî'Z æ(0ÕeïÖ¼KÈ÷àî!whÖÿ$Ïé‡Ðo×A¿nôw%öaÿƒSô·c<þ„ðw×sײÅÊ>%*öDôˆJüŠ‹>¯³Ù½ÏÉÏñ’Íõüª†£¸43᯲alY£â˜N }Ð_0„\O)gý-Ñ^QÁá)ÁìBL²Ù,Â0ÈËp'1Ž…Þ,Gó ¤Üñäo0èb>„¥ìħ棴S¨ãáå¥ðòY â3kôLâÓv*zÖÇh01ø3îú½Lѳ´‹°ÏöÕv:| <(˜|kÀÚW¸ý Ocà ìÚªvN;þ„ècßLñûZäyíý ÓJ¡9g`%!x?‰.kÉyó—Ù‰€ùBË¡e1+èoc_b\kìk zFŽAmý‘ú yS¨óз(Ôÿ9Î…üvaë n~¸$þGú"†î<Ÿ5ö,Á§°Ÿš÷ÿOqèÌ3ɇñ‹ä} dü"zò@Ö~ÅÐH]÷àHmuf”¸!™ÔÔY]3ôa"JK¹~ÔHíËÿ‹»èXÑFÜë2öS>D¤yON ÔW“éײÊKƼ˯³G°ôr5þXðŽ­˜™p~ÆÛ¿Ððrpþ‹tQê?WWü?OŠhYîC¯Oã¤xËú?“P4==?fPémס“N‰ ú!˜³}TÅ¢P³áŠß/³í”äe(LÁ‹(öd|5üÌhìÊP¡ (NyPÐÞ„[¸žQ%ÿóÊö/✶íìŠ~Düp$¿âñ—¸‡Ï}|†O=C¨sô:}ÈÌ6¾QfÏ_øŠÈò[ˆ†ÄW&¬ÄoЂDªÆ~ˆKåûJÒí]‡O”ì% Zï~…‚ëz¿HjãäøÔªïÏc+©#¨hËžP»ð½`Çãyž;Nl‚_ÍL™!#¹¯ÑN¬™ä§#(ŒOˆý–ó#äeÃ+ÀzŽÏý àÈþ1ÛÞ Šq°ò›nî7c|WØñÕ T~ì* ¤=…xÆ…äy×ÿÁ¸IÙÿÙ endstream endobj 6 0 obj <> stream xœ…MOÃ0 †ïù>OZf糑ªHëºIp«‰â „VÐváïã$-ˆÁ´öÇ~ýøuP|Š# ,Q*ðAK6XŽOÏânï‚ ÿ§¹£È"_âÔ¸ôfHjõUìb€_x œÊXÛ¥ž»G±º ô0œÓ.ší’Ði”ž`µã‚´o‘bzÛT%VÚkæX°èxX)0 ‹îY…*ª5ÒíÔavd”å·- (Èæœëó²†l®LXS°Dè"µ¨Ðc …&.yH“Sn°ÇÝ<‹ŸB6Ž¿?g}2B;Ív¦ZUç!û3g¸J $Í¿$Ò쑲Câ]ÊéŠßuô–s%“÷°5OŽšr§èùhý­“¢ãM§ô†ú ü5òõm†Óögƒ¾¡•—Ê endstream endobj 7 0 obj 316 endobj 9 0 obj <> stream xœ¥QMKÃ@½ï¯˜³ÐtföB mZÐ[ àA<©U¤UÚ‹ßÙÝÄbm-brØù|óæ Vj¬|Ô•­Øû'u{oŠ ýûg…)[•Š|¶7PìÜ»A’Q²/j}¥:øïÏÁï†4–öJ][5½Þhß¡;F;KvÞ+Í õ0]IÂ@¿®‘šþU-ûRb+{©Fp,Xt2,1˜ EwR…Üp÷ýÍÐa‚02lEÛÜ bŽq}ZÖM™ÖdX"t ÕÈè1£i&2$¤ÐØâjœ%RTÁÉ÷ã- äÚi¡3ŒÐ\˜ÇÄ;Ž8ÝE¤H•9‰DZ8RbH²K~]æ;k¼•Xޤ=l‰“£}j¼x‘f_q¨˜Ë¦CxAm‹"F±|ñ›ÀiyØ`ÔÉÒ—tg˲Ð/º‹È±ܧpÌŒVriqZÆœÿÛ)(ÆÃµÿuŠSHé,§Ð5¦,©cάg§Uó¬ã;ø Þ0 endstream endobj 10 0 obj 383 endobj 12 0 obj <> stream xœ…PMK1½çW̹Ðt2ù†eA[ z[X𠞪U¤UÚ‹ßÉ$‹Z-Ý…ÍLæ½·ï jŸêsÔ1[ÀgÏõñYÝÏà](ïñEaÀ^P”zµîn)E¾ªíL ðK>ž“?´1Vº¶k³W‹Û½ƒÕ §jgÍ^ÊfVsÈBã,Öµ[#ÙMàÎ;þ±¤/è(ߌWr&ÞüZ‚ƪˆéj‰¡¢‹÷ж&Užwd§+áQú8ÀT¨m endstream endobj 13 0 obj 342 endobj 15 0 obj <> stream xœ¥SMKA ½Ï¯ÈYèšd>v–‚öôVXð žÔ*Ò*öâß7ÉÌZëElag&yy›÷2‹ Á›{„ 6 möM‚˜£ìw÷îêžþw5[§ Öö({«ÝŒ$º)ÙG·>q+8 o£­i,å«n·îôb`þ«¯l¿6{>8Ÿ…-  wpº”D€aÝ#M‡'· $6ñFx"DLò21„N@ׂBžrƒln†ËZ:é(po­Àå¦ûÊÛªØ@Q3•6-‡é„z žpϳ®È8ŸRm=Ú í0ã¤5,IxMͬ8IÈãrlN¼kº$¿ok±ÌzòÉKÿµ'ÏEjV¡yäYeÊÔ„™ÈcV…, ­wâh'»%ÓNIN1È‹M½¢[{f<³µç—&´-ŒØ}BÍ0´öžªk(ôâ‘CVÇÝ^à8GN$ž›#G½‡s”ëa“HÚ¢¬öä,!b½1r{ŠŠd8>ÿÓ”(çýÍù×”~bÒ)&áüÃ:'Œú¶àìÃb'½Ìlï9ò¼ŽJX"e&lÜßQýÆß7×ùô endstream endobj 16 0 obj 438 endobj 18 0 obj <> stream xœ…PMkÃ0 ½ûWè\¨+ËrC´éÛ-Øaì´­£Ýh/ûû“儱n¥1؊߇Ÿ„ÖÁ—9Â-ALÞVRúôbîðaäuz5˜8˜LŠZï¡ÔªÝÏ&¹(è›Ù-Ì¿ìã%ûãc‘[?«žfu{`Ø~Âpîv1ìf4>‰£ϰê`w ºv|77c¡®qÄ'@ÀJS×BzRK zd)Ç»IÁµ$b 2[xpÉÖç¾17Ë.dd²eµõ(n®¡®]ÊŽyÇ„„[Œr®õŸäiŽs=’§Â¢ V)b?Ç‘iÙº’ïÏY†¤)|å%ñ”ÂSi.åÖÒì3\uJÎò¿NΗØbÇ­o°Ö²×=¹ ;Üj½)Š®Ã0±²À!v”dØ,gÔk8Ô„¥ç|1‰Ör#+eê ?½ ð êÀ¡ endstream endobj 19 0 obj 335 endobj 21 0 obj <> stream xœ¥RKKÄ@ ¾Ï¯ÈY°&™™NJÁÝuAo âÉ'â*»ÿ¾Ifêº>XÄfÒäË—ÇWlÞÜޱaHÙ7-ÄÅÞÞ¹Ë#xqúnjÖNAÉìg(¶å>O$j”裻?r+Ø£O¿ÑojKz㧬›µ;9_X¼Âê+Û¯ÍÎFç³°¢ñN–0Þ÷HÃøäÎÆ‰M<„ž[)f †Ð èJPÈ÷è1ˆq=^ÔŒÐIG£ìÖˉzbFÆ&¹O훥´Å=ÑÙsAñ [Lœp9µ#ÛjºVžowY’uá[/×.<—᲎–'žÕA¦LMø‘‰|i[èÂà{ìÌ\Ú™©Å9.Ìž'šc¬(M Ä9gYv;™Û­Ã2³:j0ó©x¤(ƒÙºFãn–I$nIÆ?$G–ÑöEâ³±×:Œ:‹nߪ«tûŽÑv8³qÿ"å¼ûEþ%ÎOL*uŸZ—è«(¼“Aþ>¢! .S‘3×pÖí 0º–LRô¹‚wóò endstream endobj 22 0 obj 426 endobj 24 0 obj <> stream xœ…PMK1½çW̹Ðt&“ ,˶ ·…âI­"­Ò^üûN>V°ZºämÞ›—7ƒšàKa‰Ú@ˆ¬=¸èŸ^Ôý>A^§W…™€ƒÊ¢Pð*.µûÙ$ƒÊ¾©ÝBðË>\²?6k¹æ¹êé V· Ã'Œçnî'ÅQÜ,ŠÑô «­¦]”¦wµ™ªÄiwM#>zy¬ˆ ØND¢B“LŒVÀãt×*l'‰¬q2ÛRÀ@Qwç¾!7kÉe¦ÙÚbkòiIÙ>6Ô‘!“xdBŒiizf¹0›äBÏ–ºreñ&‘Éìæ@2/ÝyùþœuL%{–Ì-›Ú^ÌÍÅÙg¼êIÛˆ1Jë’}Ùi‚¶‰å`ù‘•Ÿ¥ú[w®§Y aB†2øP©q[àl1”=ÈìZu“nçRÑÿ´4Â7z‹¢· endstream endobj 25 0 obj 334 endobj 27 0 obj <> stream xœ¥RMkÜ0½ëWÌ9°ÎŒF²,0‚ì:†ô¶`è¡ô”–MI.ýû™É›&MXJmŸ53O3ï ;‚ßî 6ØyH™»bŽ‚ŸoÝ×3xtú>ÿp¨88MJ† b«}XIÔèOwwæöð†>}FÿÔÂXË;^«®îüê`úû÷lŸ6»]ga (DË œÏ°ÜHe¹w—KM‰]<•#<"ör˜%yƒ$}“,ôÅÈ|_¾´Š0HGÁGÑÖ (wÃ{ޤÊi´ÁhýD}ÙÒç†òä‹€™sÙø‘Y6üe‰iä@ƒm¼(äuƒãÚèÕ ½<}«LÖ÷,=·>Ø×ñ²—WžýI¦L]ø‰³Œ.boë$Cpá°œ"Ú¼z,Õߺrýú­|R(§Ògƒ+ÅdkíZuK×RÉ?Ž´ºå{N¹å£— ߺ%Š«CÜâ'9wFµw­‘­ú”´KOXÇ(À~ÿÍ>Êùõý—}1©}d²Ò…­3îô6Í@BFÕu×> stream xœ•‘MOÃ0 †ïù>OZæ$m¤ªÒÚ1 n“*q@œ€ÐÚ.ü}œ¤1ƒVJßÔÎóÚZ‚7³„)Z†*Š à£W½0×x1éÝ?LØš”Te½¢óÙÍ’D‰>™õÄ¬à ¾:…ßa,Ç­NÝmÍìrë`ñ «cÚÉb»ÁHTšC ÷0[jÀÁ°nÚáÙ\ %Å[&‡]m#x j–“\­I7 b®Zn¸ÇY:Œ1¨$l§Ôä0.ÛÛájÄ)Mìuð™&@ÑÖǦUš„#Ÿ"£§+ž{ž·T7ºN9PƒÂ.T$Sõ‹i‹µP¹Ã€•ª:t†¶ú|û–Ñe{ ¢¥ŽöÂÙcê'8«³¤HÖýH"ÑQ•r97Ò3þ[ äêT‰ŽóB&ä>}…ònY<…ÿéÆÚÊ/nÒ¸3»Ë«Ó«I~}JñX—Ÿ­h=z…±Ô”è6§–ãNTvy›W$öåjõ*‹‹“ÜøÏ>Vðؾϋ endstream endobj 31 0 obj 385 endobj 33 0 obj <> stream xœ­SKkÛ@¾ï¯ØsÀÊ<ö¡!°åÚ›AÐCé©mZJÜ’\ú÷;)i“¸i 6H³;3ß7OÐaün#Ä tkã®ÄܲØwŸÃ»‹ø=`Ôÿݗꈧ AÕì›è¶åÞ¬ j¸÷k¸¾Çø|=»¸ÁÓ;^³>žÂå›SŠûñøíl±»9p´4Š—q¤8_€ãü-\Í’»üB ¥¾k1C2 ¢˜z z?`A¢:Ò@L@b@‚Æ Š˜ãsÃaü0¿]àM(Ëà #¶®LZu ³zÎäœ&ÚŽØòÜàLöb(©ð5=ÂNŠÚ‹ÕhªX÷uÈ »¾ÈïÉÛGgô\XJ]虌šöÓVœã‹H »ô,²ŒÊË%kd"øwX/ê¹¶ŽŒ@“¾ítpN¦W²‘´ò6,:nÃÞÙ3Éj”oÒ ½_Ž,õÈ ›×dr´PO·¢2S²£=)ûje•ΒغãüÐÇ*/2é¿$/bÝ<‘WQAíy{¯%Ó™_³ô¦¢^}Rk‘j7¦q•»|¢¼¦¥IxXóx½E™Þï+‰µÊ§ø?ù’nqÌyxïË­whƒƒ Õeµ¬¡¹w]ЬÓ÷¢ƒ[\ì"Á±  M ·’÷;Šï_èû…¯::Æ_Ì[4v endstream endobj 34 0 obj 517 endobj 36 0 obj <> stream xœ…Mk1E÷ïWܵ`|yI& õ ìn Ð…¸jkEœŠnüû¾™Ì,,HÉæ’{î!„Å®`LÙbéLPÍ·oú˜à—,ºsû!î ´ÔA±ÏgäÜoÏ£¤ ¹=ÒaB žôñ•þ:ÔœçÆ«Ï–fÛÖcuAó×öò±‹D®T›g¥/Ì6Zx¤CŶN'Z§ŒþcÔ8dDàçŠì”a©¥bÇ^Ã>½¼ë§J!£TPp¿° å•È¥óJ÷±¶*¨§¶’7YêÅ jðyÝVˆ endstream endobj 37 0 obj 213 endobj 39 0 obj <> stream xœ…Ž1kÃ0„÷÷+nD9=Kv ÆCš’Í èP:µMKˆ[’¥?Ï–=´Š@¾ï>™ÎãG. –tŠª.\‰XGË×wyZàK<†sýz jÌgä> stream xœ…Ž=kÃ0„÷÷W܈rzõጇ|AºJ§¶i qK²äïG¶â¡…P´œ¸ç‰Æâ*gsEU;êóåCžgø‹á\>…C^¨ó %ÛÓ$Bi¿ä0“¿ôÕ#ýù^³Ì›Vo½,ö½ÇæÝ_ÛÃÏ®’¸:Û<³(½c±Ë…G:4´m:Ê6$˜ð“=¡ ¿ÌÈKf¨­6tô9¼¦§;¯.æw5ê$UDŽ ·âR«Ö6ÜYrÍÈÍxaíÖ“ Ã ÓÒU endstream endobj 43 0 obj 206 endobj 45 0 obj <> stream xœ…ŽMKADïý+êpRÓ3³°ì!¬‚Þ<ˆ'MÉ*ÉÅ¿oïNö d.5Ô«GÓy|Ë Ä ¢nƒ«Údù¼—Ç >Åc~ç7á\`’ª—|DÉËö¸JæPÚw9ldÄ/}}MºÔ,sÖÕË$Ûû)bøÂø×võØ]–К-ÒDùÛ;+"ò¡£ïó‡Üæ‚$—þcÌ“˜ ¢ˆ!OÆP{í-<ç‡ ¯±qZé*UT\~lá÷’mPVlì†u>â&+Tx endstream endobj 46 0 obj 205 endobj 48 0 obj <> stream xœå7ml[×uç¾GJ”,‹”cn阗}–k)ÛIf;–EK"EY²E}0!å,æù(Ò!ù¾'©v„+Ô ãÅu±dI<¤?Š -ø1Ê:¥ðjuk6ëm(t‹[k-‚½4)†t±vî}O´¤8 6ìß.yï;ßçÜsÎ}¼Ô˳ ´@D¦ ri+!€ã§dKjN§=£ÛFø&€ðO™ÒLáå¿xìCÛ[oÍäÏf€–,[³ŠœÉïtYøCY$DîœmDüÛˆïÎô¯r þcÄy5%[úè ò×Jÿi{P@ügˆÓ¢\Pvõ ÄÑ禹’ªéiؽ°#Ïø¥²RyyúÄŸ/!1 "ØÀñÿçÃ~¶AÄÞN(ñuÝ߀/ÁK+ï3ìîzgdåãÿË(æãOá5x .ÂÏá,F¢ƒY¤¬?‚D*Q˜‚ïAõ3̾‹È7å’ð<ÛÉ=G^„øÛu^¢P€'1–?‡Ÿ“}ðl> ø#x­~€´÷2%´âbv}f õ_áá~…ÈKŒ#ü®ÇѲŽû¼Xßñ‘Oý<…ëdaa>ì=ÿõ/дòÜÕSp¾Ç ¿FãyUlÆúM«˜ÓqZ`•ÙÏß„O¾…È7a§LpïÂEñØgdè<Äl&b;4Ý‹+<Î; ûW>wC3ÄVn¯ÒV†W~#ÊwжӶöÛß}ž†oÚ ¨ +¿¾óä´ý¤ý5¬ÖëÁÁSS‰xlrb|,:zòÄÈðñ¡È`84Ðßw,Ø{´çÈÇüý‡Ü×ðwuîýêžöÝÒW¼ž[Û\ÎÖÍ›š› v›(è¤I† ±¶…e)$É‘®NÚ‘èê Iá¤AejàöGŠD8I’ š¤Æ|ÈkÈI#ˆ’™ ’AS2X—$.zŽ05þ~@¢‹dj,ŽðÅ)AeŸà°mG6#âõ¢ŠEKCFx.[ %1FRÛÔÜ/õ+Í]PkÞ„à&„Œ½R©Fö%ö†×plfnq§!9mDÇâ¡·×›èê2Z¥΂~nÒhè7¹Išc¡ÃZë\ª>·è‚餯%-¥åÇâ†(£nU U«ß0Ú|F‡4`tœûÕܹbtJ!ÃǬ×ý ßuI {»K¢Õ·#-¿¿ž"[”†v×GÀ@Cè7Èx܈;Œ¹®Và W“Uyq¥2-Q—T­µ´TK!L7DãhbqåÜFø¹„áJfÉᄵõðø°qߨ©¸!´‡iVF ~{%ïA··­.ý,6`Z09˜a¯—¥áÂb¦1*cq§0í~‚_Â’Œ³´ÊÙcœÊ*§®ž”°¶ÃñªakJK!ÌøÙ¨Lcwa…‘\FëoÝ^©º¥ $¸,Ũ†Ò9jØ÷`’Pk­ö S©º8Òú[ó±ìF{Ú¶ÐCšavBR(i}ç²;ÐÅDG|f#LÆàAÙªX¨Ö@ 9‰Ë ðb©dl•úêÕea…rq®b©[û H¦,-#â犆ªÉ3fK‹¿ VnÖ î…ð$˜ðö~ì²=¡j<1yÊ}ŽùÚÃdx²¯«_m}5‰œ«Éù‰©øÛ.¼žŸŒ¿)¡?Ù—¨íF^ümŠ?œ*0*#2„2„YGÄÁåÝo*œkãާ pšc•F µ(˜4—éhw96“\•¶!ÍaÒ*œÆG XÊ‚Íö #Øl6 îa¤7‘ò¼¹6Xh!›‰»†Z㜼H*µ¦ Û”¨ DÐŒð|ì®ëØT|¡Ý|EG}l`»ìÈb±ñg%DÓ¬Qþ0‘­&ì°Áv, ~‰A¤£X&é(ÒÐb4KJŸ±Iêcô^Fï5é ŒÞˆ-J¶T¯`í£ap*îÅ#I¿üwÕµÌ*•À—JÕõë.~Ç›ýw_ôÿÙiç‘y'üé·îÜã§ßQ‡P¯Ñ{'®¥¬¿l4â¦aÄ]‚.¼=†À_‹ƒÿsw)Öí§£µ¬\–S˜1L[.¥ñŒ`"hI.v…fËjIÁH¹+ˆšÙÔÔüzfÒEEI3öœ’G%tœWÕ'Ø~2jMëÙ®5‘gÔ¢Žª*•ÓiÜ8fKMÍX0Íújprª¬"¯”—u´RÐüY]/æççý²UšVÆ–ŸÇÓÏ–«ef¥ÁòYéfy}Ù&&†Fèh óÆà¨%ÐIW[sŸŸåÓ˜+éš_Ëåýjy&0ü<ƒSÇyHÅ)#.#”JpÊ\*‹T {‘ÚÏýÐ ûpRD)ùyÔ§ÐpµØ*s»*ÁÿÁú¿ÐÚ~„Æ­("\»¡!ÔO¡…Ô›FîZ»ÿñ*Üb†kÎÀ,Æ!#åh¨¥ LšKPèÂùE6¾ˆÿ‡´:g?ÆÕ?F/Ý/²œC[”çZçkÇÿÒTÔû¼ŒP”Sxý4ä(Ks«Ìv %&¸T”k²\èÜ[‘KMÞÃã(zÌ ~Š×rU2Åm³ž0-«g­¬žÁŒ—yi®·º7 =º÷îŽ Ý÷y‚Ó®q^âšµ/3g“< ©,ó ó›å°Ìó™æÚ¬ËŠ–æ4öý\?ÔÒ•­º¹9+J¦Óiå;ÃWû-¢Êã3«¼Þ7åy’yÖÍJ«sÙÒóø9k³fÅô5m¤y~.³ÖŽ Ü.…“øœç]¡òº½_á5¾›³o2V§R®[BXå»XÍc¯ Û‰Â#eÌÏþ4jä¹o3¶,ï™×V±j­ó¬æ+mí”E]â”.ñ¾`'^±rú(¾)FîiÑÌàÚÞd5Éóxµ5¶‹<Út}f¶™TÞòdî8ÏßHOÔë“áýff4Í­u}FÎ3<7ºåUå¥ñcVÜì-ugy=Ìódv³þ©ÌÉ<¿ª¥Wâï%ÝŠ¥ÀÏG–w` ãÝ2€Ñ±Ÿ÷áÚS“²ÎŒßŠ9ð¿Öcq•xמr=–Æ8bþbýÔÍ®9¿«•˜ÀwÐ_”¬þ [™£,°S³ñ­¹¿/×ïÂìÆâ:Gã¹ôó=Ì =Œð{4+^Œé£Ö=6M $Kfà>ð$œ$§!FŽA âÿx‘>|ö#Ξ~Ò”ëAúQÄ ýa|yzpíÅ9Šóyœ6œ¦D7Jð°ð.Ä;Qã]\ ŸŒÚ‹Tö<ŽxŸƒÖ3Œô>C>„8>!Iñ"ÞË×ëÄ\ 7?!ï~Bè'äéß‘èïHåƒKÿq»ÃsõöõÛÂè­Ó·®Þ»oç-â€e×rt9¹\ZþörC³ó}ÒÿNÚþíæAÏ/{nÄ~Ñó^ nàÎnt߈ިÜ0nØo1öž¸ÝãZ¢KÝK¥¥ÊÒ?,Ý\º½ä¨üðÒ…¿¼ð8¯y® ž…Ñ…§ÄäëÄùºçu!úJòáÒâ¼â¹¸"¾ü’ßóÒà.Ï‹/|Õsó…Û/‹+K /ln _#£dz0‡'ÄÏÕcÛÈ Ü–WÎÎQœ*Îçqâÿ÷à ‘àAñôŸM—Ý—}—Ÿ¼|á²½ôlåÙKÏŠ•g.=#\»>'hÑZôyŠƒ¿çùÒ±Æb¬Ý ÷àÐtûÞpòtÐs…NMu{¦;<÷سã†m(è=b¯8*ªâóâu±Ñ1ÝåÃy3z;*£M-aç¨g40*.®Ü *Ã^´v¼t¼r\ wx"ƒ=ÎAÏ``ðÝÁ_Þl8=H^ÅoøjøzX †;á`x—7¼3âŽm?°-ÖFœ1×gL Xè 8Wœ‚ÓyÚù´StB/•íÄNÉ¥Úä„Ï7¼Ø¸2>l8¢§ rÞhŸ`kplÊh8o@lêT¼FÈ'ž¹xúî6öOÄäý‰a#@\÷×¶C_BÓtÄçCxWðÍúø¸fR¡ÎŸF4|Gi\‰ø˜€‰\}Œ‡¦GPûq ØÂ˜>S‰ik–9®l.Øñøx8Ù endstream endobj 49 0 obj 3854 endobj 50 0 obj <> endobj 51 0 obj <> stream xœ]AOÄ …ïüŠ9î6О›&fÍ&=è«?€Â´’ØLé¡ÿÞ)VM<@òxïƒ7èk÷ØQÈú…£ë1ÃÈ3.qe‡0àHU5øàò¡Êîf›”¶ß–ŒsGcl¥_Å[2opzðqÀ³ÒwöÈ&8½_{ÑýšÒ'ÎHŒj[ð8Ê=O6=Ûu¡.;äí"È_àmKuÑÕw=.É:dKªÆ˜šÛ­UHþŸwÃè>,K²’¤1µ)Ùãt§ö±~Ú€[™¥I™½TØ„¿ß“bÚ©²¾}Ymu endstream endobj 52 0 obj <> endobj 53 0 obj <> stream xœÝ{{|SU¶ð^ç‘““wÒ$M{ 9mÚòHiKë€4­Å¢(ЀІ>hÚØT´*TFA`ÔQ@„ðPPDªã …ßãe”êèÌãEÇš~ëì“”Ñ{÷ûþúRr²÷Zk¯½öÚk¯½ÖÞ‡–æ›j‰´–ø«…Âæï>=FÁ/ت·ÈlÙ‡ÙXî$„YU^°è‘×%„«'DØ¿`áÒº¢¿K"ÄFH>©¯ ÕÔ×Mò2ëdD=î‹Ý!`½ë™õ‹Zn~1õ·ßcýf¬_XØTz»Î 䊬·- ݾÅ`û rchQícÆÀ„Œ³¢ŸnŠ´Ühb'KéþV©]|Æfý¿•B«þì'‡Én²µjY†Ï}`GÈÈÓ´´‘¬ù¶Ï“ñÒz²Üý‹tדÈç ìÿâ§ ¡KÉo±çƒä)4” ða¯7ı'ÉÑ˳‚Ïá(y€lCÊÈ|nÄ•q+ó=y€™F™ÙåärŽq 4µH_Ež€9dBÕÏA9×°WþŠ6ÿ¯?šåèìÜÛŠ u¿kEÙOâ ½€ÚxÇÕœÙÁŠåÓ§M L¹öšÉeWO*½ª¤xâ„ñWú‹Æ]1vÌèÂQ#G šŸ—;$gà€ì¬LOFºÛe·ZÌ&£^'j ϱ 9 UÅQ6K¶–„<ÅžP鹨U?qHN±§¤**‡ä(þpÙžÒR ò„¢r•ÍÆŸP/pUÔ”u—PúUJ%Xä±d¬Ò…GŽŸè‘Âì©X^3Ñ”£ßÑò5´ÌeÓŠ+é騂J¥H+GK×·W¡Œ°G¯›à™P«’CöèôXÔc):ÐÞÇ-0‹GïaˆÖ¨t‹#-ÕDS+Š'JééÁ!9“¢&ÏDŠ"(˨fBT ,åEt²ZÞ“ÓÑ~ïA ™_å5ÔxjB×UDÙ¶mg‹ÛÛïŽZ½ÑAž‰ÑA·|é‘×Fs<‹£^…kÙ´ž~Ê.v Q>Ëâ‘Û 8Ïwßö…„âM–墣̄(L«HW>R 꺽½Ä#—´Wµ‡v·Í÷ÈOûƒ¡=\Œê& dq°û…ÕR´äÞ`ÔRU£ƒñ¡—L+‹&MSe²JäúBð_‘'}””ní¡ üš ZP9¨áôtE «úÉ|¬DÛ¦V¨u™Ì—öž7eªLG㘡`Ú˜žæUœÛ²éíQ.kR§5¾:m›Öu½21KÔô£”îi·Yå¼ ¥•QªI5 r”ÏF%a«Þ Ðn”&íZ1ý¨þ|'aÙV›\èA6 ŸbOqUüßâz2QÑ¥^ÕÊ+¢þ‰Xð‡â3V¼'?[„ªpÂ&ÒÉŒæyÂQ»g|Ïì*b7L¯ MâÍ¢ö QRUoÍ+¦ëJ.n¯š¨Š ðòL­xžøº;÷ “¥}>2Œ'*ÄÎ heÙÅí5uQw•Tƒë®N®Ò£þ ÎpÐSQTÌ54¨S¢Æ¤¶R^Q6ÝS6uvŨ¸ *BaÇe_ÂÆS!©lУÚ,­\ÁHl -K°à?ŸQ!K‹_ *œBÃ?V®‰$¨QŒè ¹¸vbœN©÷aÊ+æ4¡4ÁM£T‘Ï„R)=˜®~†ä0ˆ–ãc ­¢ÔÒ Ý"´hŸJ)HÑ¥K1z¹ÂSë zêå¨?P¡ŒMQÕr\Tçñ¹*ïSë¥,TIGt¢¢(3Zâ•z+7z­÷TK/AOJ åv­§lz»ÂÜgHPòIQ¢˜°”U¢¾@YÐô½²—4]Ðí{ü~e1×V˜x&Õ´{¦WŒ¥ÔèOn—nQú²‘2(+?$]Ûø=X5uVMŸ]ñ¼c¹Uå{`&TîÉD\Åó2!~ e¨T*²RQ8MÊ–ÒKÏû1x¤XŽh½ú  Ó&`@ª2*Ì¢v”M;ò1œŠñ'¨9„iUX…ÑÏ¢¨Ì¯ãýZ¿è70FFÚ h/B^ÀØS²ÏFö`«i|Úöˆ~I¥hC ¿*᪻ž1»bŸ`3úÄŽÆ+4W=N6n+Årb(·ëÛ«‚Êb#NœüQðŒÃiòŒCA4†¨ÎS;>ª÷ŒWàE ¼H…k¸€& NÀæm8÷((0§"—¤œzTj·|§ÌTJ»å«!(ÜqŒD 0nd‰@Ü~#£áY +jy–CPÑñ¼ãVZ}VßÐü¤tkz’5Ýzœ«=¿q2{œ_~®•~>™û»©ïþ–_Ê?DRÈ<!kIvjEÑiaS%s2Ùää¤$RLâˆÖ¢õkÚuÚ­ÚÚN­ÖÀâ× © ’d æ’"¯•ø\y•óæ^,¡ÉT EÈ V ñÉIÉΓ‘É ·ô.YÈÖõuì˜ÿ³iVìµÆŽ> aüç{Õ³C?áÎÅÞ‹uÅ^ƒ¬kŸ{iLú¦Â²è3co¥áCfuËE¸k‰Óûü3åAƒÁa2粬ّÊ íçšì甉U45(VRd³©ÉÄèY“ÉjÕ‚(Yf Hœ°µÖ@[„  ªOsoŒp¨Äuq7Zm…y^«*À‹#VGÍgd6¢†Ëödh„¶ô§Ãjwú F:4žŒì (W€`bv'l~ü‰Oü¯ðÍKõ/æÂÊc<&5}âU5s4šâ³« ¾Öº¢¤Ò¾ó¡mû5ܘ•ÍÓf[!óОXn`ª¶4„o[p÷ìG§9&¿fjE•:Ç«”<õ“D<~‹&II í³Fgá̘{ù|½,Æg6ÀçtøÆ¯ Ù¡ˆí°Þ§Ù¡å¼áºÌ¬Ì±áÅì¸æöƒY«ët¿×½¼¿ëí£ã0fÉbÿT ”Ãuç8ÃC'§xèà16-<´ñæÁ̓™‡3½P[yXÇúi“ÞCÁèP‚QY‚Ñù4ø2Á«- ˜0íߟET~’Ÿ´}„¥e0„ÿòê§>~ó(®‰;q ßp£I*©ô±iµzHѧ¤I6ÞÉ‚N§Ñ!3Z~GDÓà }v§A']*p+]/=6BW`Au†½Æ‚J·Úûƒ"u|ŒâçÐÝ ·ÂèÁ×ïxh¿f0,ÃŽ{|éÞßs£»¦Ý°xØÞÍLäÂ3‡ó9…SÂs÷cÞE½ã:æ¾Æu¬#V2Ö/›yžZ…-ÉÌUÍf^L•Aåmr࿹¨bU¿®äåƒ9Îäà ZÐ΋¯Áže©ØN©ýô²¡>;Ýf³ŒDÝËÖី=Ù|ŠA 1Ò‡žÜÂË…Ä*Læž÷ú?k»µŒŒoï’7=ÙžËh¹§5ûJWLo_¶x팕¥±Y«ÛR˦˜]õ  IYõ ¡þë…;.¼ž¾òH훟½RsˆêëtÀWн@ þRVÇiEÞÌ9€Lé¡S„S"tˆa‹mè Dpc &™^¨­"¬a E]Îý+ªˆoj¸3Üç`Q÷ìß¿Ÿ—wî<×É>ÿºº²ÿ@ß’JBþ±6QÔ‘T]ª”fsjü£YGÿKãÇ™ècjèU£¹á^ÚŸI¦›)nüláÏ­ŸÙEm¿k ;ý¢íwå©{/£íëI³?Y`YN‹Ž†ÓŒS Ð)€p°ûsnÒ¤¥Â=c@+¢Úd#t!j„­Fh3BØUFá=>^ßW˜§XÕÜ{¯uÊjñáÓgåB]š#G˜sG˜5]~y×N¦6Ýg ѧ<‡kc0©ñ4Ž4ÉHˆäÐpÞcër¹Á4—…Õp•:-9@ràLtæ@GTå@[åÂ{ žù”Yõ©ÞǾ•UL£¦‘ªw–¹ XŠ… q»Æ­¨?Ë>÷·oLß’¼®ížÖŠùË7®¸úý·ö½Ÿö˜yEã--ùó^»lÒ@ðnxòÎ5îYSËËýÔŒ×4Öo\¶Ú^zÍÕe¹cge^quH£»û ƒ3Cì¤ØŸi´Ûõf³ÈqN‡‰×¢íèÍ"Xѯ53¶@q¶9i8ŒCH=Žñ¡/á©…(ƒÈÂ1 ·z†ûFú>‡G ™ÁÁ¹º}åð›ß|ÓW”9QëúyoÅ÷߯èšqm‘‰$b.íǨ߄1‡{0KØÊ ±©ƧP †ÒÛŽ0oòËÏK›pM®ŒÍ½õ’L2É\ÿHq[µZ‘ˆÙYVÎÁ8$ôXƒY+1Ê¢ÙP” ë²!œ îlèΆÎlèÈŽORÏÂ+ê™#ÕrânzÆ³ÇøÕHRÝ|MØ}cÍçfòÜ~Í.àx.óò7_?|Ë7,-Zµá®[™Œ®·^Ô> òš§FpCë’jæÆÎÆ>ýâ•ÙG6|øÖk„tw“ÿ‚—à9櫆ØGáª8@*Ii%ìÜ᪮!~óú ߮芲1hFÏŀߜ] $Ï;×›·qèðÒŸÿ¬ø/×Ý4Ô³@,dŽ„ˆa5¼–°èÆÖf5àú3hÂe‹Ú `ƒ36è°Á:TÙ ßy6˜{Ñm+‹,‘ øl……ø—›Îzc#A#`1{·öw]Ë{)ú„Ñ5GLºŸ1?›–›b5JÞÆý3mú±¡ðnñ,êgÿP‹rŠÙçø“Í¼MÃîÐàŽ¨aysewEGÂûÄDvFÙ ÓeÂZˆ²Œ°ñµ;boëú'¼upgGì󨙨?aôÆo–1ïüGìù]üò؆س ¤ó{VÕñ\Œ×~ÂÜqf]né—æqjxÞ™†Všk°$9K'‚†k6€ç`÷!‚J<3=uÖègð°))re°©ûAY?4æ~ òýR8V¬ Vi`š&j@Ã&¡O˜«î}>\RJ`«Z^%õ]s½?ó\ºÌ&œF¹ìða™é—8 žû)öNì›®®iÏË'ö=´¨ysÕSÏÔ 0gb¾Ý»Ù¾·øŽW®\¾xÁd/Üù‡ .«uIë­Å3Ge;³®žsË”g_}pOz¸6ÜtåŒ1^³Û;º¼õr0v–““8/~+Ç-¯Õé ¿mŽ–lÄož·÷\d9ìÁ3b¸g8,Ïx뼊“Û®¿ïÊUËNªv|·Ñ\ÿ^Hµc–Øü<äó ó`A³æ¡ðL"‡Ât©Š‡~Š8Ó+½R–|7M¸zÓËüÅ­á²IÃ%ÙÖá#ŠQ¢Œ"Úá5(£–Œóg Zì€e^ËêDYÐ1ùº*Ý:]‡îŒŽÏÓÀ°< ¿Â´»Ãì9ù¢ëHÇÕɘF°¦×»^> w•—ÃÊ£˜'Èÿþ7ÛIõ±U`@›ë}ÉiÄdÖ:ú9Ì„sËÚ4“ͦm&A$­%H\¤¨'1'¸êúœGø†ãY¹º;ÛM˜„ƒîXà{ð±-mSV-üÆxÐþ¯W>üªlý»‘Uý™S­7í»ÿ¶ÛVÍli»ýFëö7>?í±ÇvÌ{¸d•-eÛ¯ø È÷ Ǭ¨ÅÃH•gÁv«e"Œ!S„ó"¼-Â!6аZ„V˜Jçä‹€ûÉ €Þ¡ÐZT„9!|7™Âå§±ÑiŠB`%b©‘ˆ8Ac¨6Š ˆG'(—u´kŽŒd,"¨ÑÙ‘DðUEQE‹B½ÒÄ/o'—ÁÌ»˜ÎUó´DÒ\¨& ™Ow0'^Š¥qwq_—¸¯6mR×éþ–)¤ñdÒ†'ÊÉB’b‹@'Ò67Çì|ç9Y¡¿ýR ÚÈ@Rí/4Rš#Ã@HF–%M£48Ëj±ZZ‚VWÒ×à®1[qU`0/¹Ý®HГÁX%%‡¨¦Cz¼ÞD¬w¹Ä™N#/ ïI×z,K#8ú—òÓ_?êv½ æU÷l=w×ÊÈòMË›o\qK“é™W^‹Þ½½?gÝKu±¹û[~ÚX™äÏ1ZΡáò,Ña„î¾ÃQlu@›Â¨r@ÀÊ6p1ê£~´— â32³i¦æL¤lŽ9ùL,vß‘WŸéý—îý˾ìÌ“ìò k_~ó7Øš ÷?ýÓ 5/^©äì87ÉÄ£Äýy“Éè"F’™Å[‡W‰ÎÁ¤Ó¸" в`]„³ÀÝYЙYÿ]\¡f6Wdð¨ÞRRèXh.Æ·>îc´Ì.Í~Ž£Éòá›ïþíêUV-UŠ`µ»U7b;÷],xeEýìØ·±/þòê‰/>|û¨z†Å±8=Yã_ A'ê8¢× ¸í nc‘‘Q•Æn#g6ªÅV#_hôOŸYZel3n5vOùS0Õ:GŒc¾ÑGvÏEAÇiÍhÈõø­(¹æ)…ŸÍV›*bœ`KÌO:4WB6?öÀÊýûáäû±IðGøÇ¢X+ìBˆ1ÆòºVü#ÚÇVêçûÇ#Ir¹4Å?:h!Np±N§ÄJ–Ê ”Ä¢Ñä ~Y't Œ€m“¡JYêî}y˜$’Mu ôñ¡I=g¸õt·`ÄÈḌ­êïÃ5_Cæ”çÆ¾ÿèÙX lß·Ÿ¾:6‡™ŽzéÓXÇvæ ˜7oÞ5âæÆØ'ãý{»¼4¶5–Ú|{Ê1ïý4Æáï˜ýk «ÓúTÌþI<û×+qNïÌ?9ë` Ló~,`mþq„ý;÷U×ÙÍ]¯ñËãþåJìãqÚÇÕ~¯–aQàN§L¼ê»-h±?[›Âz¨ÒC@~=Ä7EzLŸ¾^ý‚á x4Hç?¿™}á4ûõ…'Ù{Ör37­>ÿ¤Ò¯Œ¹S=ök!%þÁ,#šLz†µÚ zŒ.Y¢© úY`ÑéÉ4¬Ä(ÓoY,•°2on"®KôÉ÷=Š3Åe GcL8d[VY3sÇ?³C³»å޵ílñ¦ žãßÄsÌ"šcóKD¯•¦öÃØ’ŽGyüx„ÝåøÚM‹™Wâw&.îZÌSÈI’U#¤b0¸¦j4÷¿@И‚‘tJŠh6;A³EdAÑyB‚ ¶J°N‚6 ÂTI _‚/Jõ3·¡”~¶s*>{d2“®SÉVÇŸ `dýMkR6‡bÛΜ?ÿwøôóº»WlÐÀ¿^xk^éný! пëeWûÓîVã¯d´¯¯Ñ¾ôPîߪزŽÃÔŠgX–D=o4¬4Âb#L4–kŒ,æu™Fp3ÂFøÒáU#õ%ü:ŠW nʘ¾«¡ªg¸ž:©÷cýÀ瀆ý¿ýíw• â)÷>{àÂ$öÀŠ[Ößa¸G[r]hEâNãÁ57–ù»]ƒIÓe›V”Eïà´¬@0ÍⲇƒSÏbÒEâ¨ñB™мàõ‚Û f/|ã…S^8ä…§½°Ú ·z¡É c(Vï…ëý6Eï¦èV/ÌñÂ/H^8ï…Ó´qÁz/¨x)ç…³^8™`moðÂ0ŠÂŽ ÏS¶ÜJ[¶PÖe Ñô´µû'¨\*V¢LOxé -×y¡J‘·Ï|/äyxÕÓîÄ•ÕÏýáÏmóï­Þ§ q.[xñàƒ^b&/s>ÛsLëIàY23¹k_ü¸vôC o]›ÆŽÚrã¿Ù;3¼x³ëÑ›£[/žÜFfÏ¿aQÕÞ·»òÌîßu­¡ó޾–} ç=…Ôù‹‰Ñž¤„$#›*Y’A·½Õ¾Ö~ÊÎÙ틬 kÚ4'4žh,š*Zí@€ ²N‡&¯sºû޷ߨ„i}㲄cí} ž|@Òª{ª–›ŸstîüËé3OžL{ÞÔܰ¶ÉøÓ‰ú…†M/€’À î›f_ÿ’ã‡0¦ücJI%ùþT‡ÖŒ©¾”¦·Uõçª rImôòqî/5õÜ÷Û IÄŠ„ÿx{ìÕ?‰½ö$4ÃÕÃØ§þû÷™ïc?þ»³À3o|Û¿7 ×|Óàö§c/|äÄþ„Qâ¿bGaÕ­HˆpÆ/)p×TŠVq*vÁ Z X-œV@Ï F(9{ /¥®–@긭µ´P‚Á¤H “àß|-Á'¼%ÁA î‘6HÛ%öf $-]-Í–ØA¤J` ¾K‚o%øT‚c–ài 6I€\o“à ®“ L‚±x%H“@/Á ¾‘àϼ-Á‹ z²F‚V IP)Á5äIEÓO³Èÿ4åÿå¿[‚G%X«ÐÞ.1s(õ †à0$0J0ê¼ßIpR‚ã’¿ IðŒ%Àn¥”Is$¦ ”Bú7èS*:€Gén§˜Kp…J´4¦Rj•¶HG¤SR·¤!h]NdíF#h• çÊ3·òÆ+o¼ì ýyøÒ{1W^ž¼/½BàíÙ””su\Ésç*õäˆÍ`V }FØ’”Ÿ‘ã|üß¾<ëÊMÍìþ2z£kH¶«èÇ?Œ’E)´o°­åŸ´lºPÃ/¿°|ÛÞFàØüø7žÈýì^štw)ok+odÃ.7« 1˜Ml’h`­¬]+Øq©iµ ×:XS«5ƒÁÊ ŽÅN¨sB¹Jœ0 ™Np:sÂY'üÕ ¯:a¯žpÂCN¸+A9‘RÚ qBÃNøÂ 8áu'E£<ç)j«ÂÞŸ·:¡†ræÉ gho;a?í~%Å9±8sMűWþâaQßS¡¹¿h8}íæbˆ™ìØyÌC ˜«X=\ïyGÁÃ^4ˆ‘hʃ{èÝÙböó'bïî= dZ¿xùp®ûx”éÚ>d{W>Èé®]W³sºR^Zͦöœ±+9š‘8É, Ib¦H&‘"Ç&» LSLJ"»S¡3z€[S!œzÉ'=-²õ¹â„‹;eÏU§rn$À£¿=úÔ³ƒ«f´nØ¿‡³üúêÝTvÄæ¦aÑßtÝÁ‹-»âÊËÇf±pm¡ù»“´f« ý4k¶q®dm’9)Ù*š éÜá‚Ô¸`š Æ»`˜ 2]`sコ.øÒï¹àìwÁ.èM?³½“Ò/P|Ô«ÁC¿Ú 7=D]°Õë]°2ñJ¹ &Ò÷PpÂí.à\pÆ.øÀ¯ºþGô#;]þÙqúâʲž½i˜@‚qAGâõæ¹ÀB='¶¿äl/uÌ}¬ÊÿÖ5÷m‘8^Œ¿4Ô+/MÊ0ã’"tÊIsársäê‚ìÜmó­±é_ò¦ÉlÉw/Ū&´¬‰ÍÒß­ù——ÞµÃ4à3ãkÌžó¯?³}:Ýó[cÌf´sÉð[¢×±œŽ#¬Ù¢“X¢^Rô>£²ôi”((Ù“ÍX[Ÿ}qסÝÏÞux?c‡t8öö‰XNìëØ7±Ü÷Áqp+w‡ØÉ2rs–d¿ŽÞ¹Ø8‡¼žûB½/<¿£1 <Þ‹ò°œ^G8"a¥Kå #xFجf€Ïi³2^èÅ]»)Yb§bÃÞ~Þ…dü{ïÝc1_ìs5«Ÿi+ïüÞ~VAù®^Ãz2­©öÔ›‚v;+ЦHÐlXk`t¼AX9Tα÷f—wCjŒFEåõL![)Òå-ô>YMùþÃ\Í÷P4}çð}lº7ò‡¯özÝ$~mAoÛ™-Æ*`Ûƒ°©Š•ÃÎ`g¬üÒë=#Î\ÑéŒÇñFÞlÒƒ†ÕÞ&›¡Ã Q3l5C›Âf¨2CÀ ïY`J¬ÕûEÍÄù[ü:¤kí8mÙ⚉c†E&׊ K*Æ4¯¼÷Ãë¼þŠ£GQþçÑZÕw¾•Ý’†ãD­ Ø-˜Xàý¿iǰˆ°R„fæ‹P.ÂD DÈÁ.'Â÷"|!Â"¼*Â^ža}‚¾&A?ŒÞPªô Ίð¼ÛEØ Â=",a’Wˆ0„Þ0šémáiN&î3ŸáQÖˆp{â.R½óôŠ ‰ ¡K„ïDøT„ã zõ éoaŽ×PþƒDH¡ô#Ï‹ðMßDÿœ¸0 ´‰ÚŠÔO…X•æHâ¢ôVʺGšy‡¢·ÐûÕÖħûÒ Î>éLåÿ|ü•ŒËì—hU©.Ë•wz»\ˆ,,XïzõõW` {ö\+šý¿´ !ÕûaC¥yìŒ[ýœÇìwUâÿüuwÅfaV¬¼™­íù€ØN»–Lè éó)ÒrœƒÔs2‹ÙAVÁ¤]³ƒlÃúÌø÷N¦½ÙL†ø{ðw¶ÙÆRˆ87ÖÜJlÿ_X?„´œ‚Çß¹X?ˆßÃX‘f÷’«ðÃòµH³Yi‡|Ú5…· ¿Wb]¦ý¡øŠ\ø›Œ¼ç`»~(Û*¬ÏBú°†ˆüÝ]T–¹Oy‰éZð×€0e\yÜNR£ÐÀݤ^i‡°r¤ÁõE²qÄ.¸`2/°iìbü;ȸG¸³| ¿ IÕÜ¡y@8a¢pBøQ[ª]¦=&Þ,®cºÝN½I¿X¿Mÿ¥!Ûp1Ãx¯i¦©ÙôgóŸ,£,wYŸ³=—dHª±·Ù£ö7íç×96;þäLsŽp>â<çRg£ˆ ¥ï¡W&Ü/¯Ã©~‚á(„þÐØ3g³zæˆkj™!©‹—Y’JÅËÒÜ/ó§</k°üD¼,[ÈÞxY‹ùnN¼,øãe4Àµñ²ž¤1zþgw.ó~¼l$ÃÙÄÿø6‘TvJ‚®k»Ø@¼ ¤?‹—bâÒâe– ãÇËéÏÍ‹—y’ÆÝ/k°üÛxY g¹ýñ²– ä·ÅË"IãOÄË:æ=þÛxYOFi_Š— ä:íñ²‘\/N‹—Md˜øâĆ - ·ÔÖÈ5¡–\Ý^Úܰ ¾EX=H.Èš/_ÕÔ´`a­<¡©9ÜÔjihjÌ•u.¥+§!ÒPKŽ<©±:wrÃüZ•XžjŒL«]pÓÂPó•‘êÚÆšÚfyˆ| Á%Õ™µÍ¥\›ŸŸ;ô"òÒ†ˆ’[šC5µ‹BÍ7ÈMu}…›k4DZj›ØÐ(ÏÈž+B-µ-r¨±F.ïi8¥®®¡º–«k›[BHÜÔRr^SsC¤¦¡Zé-’Û#~/]Lo©]\+_ji©45ŽE°/”ìÊæ†EM9ò’ú†êzyI("×ÔF4"rþR¹o±!KccÓbd¹¸6å®k®Ô74.#8b9RÛÜPg!·Ô‡Z”‘/ªmin¨-\¸gmQ›ÎÇiZÒÐR¯ôZ¸#W•ÕR‡ê”…››Sñ†Dª›kk±ŸPMh~ÆäQjU£²Pc Õª Ô5)¾©¹)\‹BκjòEBKUd¤iáâÚ¥n¬­­‰(QƒC\ˆ°ã…MM7(C©kjFñjZê‡ô’·®©±›6É¡š3*ª©ú¦EÊ¡†[Â…ª››^jA.‹"¹õ--áÑyyK–,É Åg¥'%9çý®ei¸6>Í —E 'ãÌ7*³vZeÓ'M–§„Q?%(œ'È‘F94wh¼ TcC¸%’iX˜ÛÔ¼ oJÉd2‘4ømÁï-¤ãp¿!¬‡°TMšH˜,%Í”ª¡²òö„¿$½b>–®Bª&Ä/Äö2îcMH¦ÏåÛDI.bt÷ëü °4-.G)mŸƒ¥IÈ¡yLÆvóÛ›³L¦c­‘Dh»ä&”#„W"¤!ÈKi!“!øýu¿ŽI1‘xJ”¹(÷åZþ:×ÄÈTË-£H¹ˆJ~šp¿ø5MÈHWKg.‚˜ZZ«¡\Þ3b:¥ ЖŠZho”ªü2=NÁë°}5Åe5å­XƒÊ¹ Ëõq}^ºn¦ÔÐv‰±E°çŸkÿòv1J·˜öy …+õÅÇz$>.UgWÒþaMÑÅ”Dé·ž–CTŸ5´µb]ñ–óÑÞä_íGŽ· Åç¥ÿšV•Ri“×w}Fh¿Ø‡ŒeuŽe*©"]Ý%RÈTc!ªuÎ!¶…ÒV#|!þ-¯µE¨µ×ùñÕ´„®Íúž±#}zÙ‹ºP­¥.n2…†±ÜDeOhoEþZ*•R ѵ>[,¤ý¨rÔS›Ñ­Ïp •6¡¥šø¨ Ã2„SkPÖwm\“³Ð3L¾,GU[½-R™‰…TÞH/ÞTÚ kêѬBµ0Þ“:â…ÔÝÐ3+uÔÊTíÕPnC~A¿uT7-ñ^›¨D5ø§Î³jQMØö&:kê*Rm¸ågš Qý6ÅÛ…©j‰Ë²ˆ®Šzjwa2cÈ<”NùË¥Ö×{­TÇWJn\æ¼ÿu;E®0Õ`ïUÑÜ#Ë"”qr|Í7ö¬µ›z­ÚÄLLGÏ3™z‰pÜ~Jâš“/á ¬•K=åPê#ûŽBµÆ¬·Py"T—¹t ?{˜Lãe5w€Ññe>W¦Š@!™ãâ¿ã12¶7\‰¿nüC|0á£ðñÄ‚òÿGès pþÐÑ»»0çÝ”ó Ÿ‡Ýß— tÿ³d°ûL‰×]yºõ4c>=åtåéµ§wŸæõ_}Ùßý—/JÜæ/ÀÿE‰Óýyg‰ûÎS§;Y§oDIg‰ËýïºÝßÁÎø¶ô›_ÿÏÿœñ·R2㯤Ûýé§fœvÆgW°3þÌv»Íº?dèÃÿ–K*yç8Ü1Öýr ÛýâKÝÝÏCà`ø`ÛAVyɤû ­ Ä} èÀ”MZl9°û€àzÂ{·îîeÍ{aݳ}Ìςּ¯hßé}l[t]”‰F;¢'¢lÞî¢ÝÌÖg¢Ï0Ïœx†ÉÛY´“Ùò4tì8±ƒ™²}ív&o{Óö#Û»·s›6fº¡é!8òi‰´ÜäU> H‹×‰(%Pj^GKà ɰVZn"o¤"\--À<,GÐ× <Ø¿oœ'ì`2ÂG‹ÚE$‚í"È'ïÎ5üúå endstream endobj 54 0 obj 12353 endobj 55 0 obj <> endobj 56 0 obj <> stream xœ]“ËnÛ0E÷ú -ÓE q¨Güˆ/ú@~€,ÑŽ€Xhyá¿/ï\¶º°qHÍ Gšl{ØÆaÉ~ø©;º%=cïÝmºûÎ¥'wÆÄHÚÝWúß]Û9ÉBîñq[Üõ0ž§Õ*É~†g·Å?Ò§u?Ü—$ûî{ç‡ñ’>ýÚÃúxŸçOwuã’æIÓ¤½;‡:_Ûù[{u™f=úðxXÏ!å_Àûcv©èÚP¥›zw›ÛÎùv¼¸d•çMºÚï›ÄýϪ˜r:w­¡&„æya›À¢\°U®\p .¿WÜ߃kr~an ~U–¼V.•7Œ¯Á[ò+xG~¿ñ¬ðž5áir2Î2Ñn†þ5êúoPßпÀ½Lô×\ú—Z“þ¢uè_ÀÇп¬Àô·è‰¡©uè/胡¿Õšô/ÑCÿ ¹BÿjŽþðú8Kè_®ÁÑ_9úk.ýkýÇYû¾Iì?Þ—Ð¿ÒøØÝý‡³Ð¿À]$ú«[ì?ØÒ¿Ä],ý+œecÿÑ7KÑ}ú Þ©¥¿h ý-|,ý-úié/¸£¥¡¹ôuˆýÇ;µô·p¶ômÅÇ¿rŒæôÏx¥ÝÝû0Z:Ì:S˜¦atç}žfdéï7*{ú> endstream endobj 57 0 obj <> endobj 58 0 obj <> stream xœíU[oE>c{í4mçBIqY¶W¼Î­(P)mMb§qÒ$ÆvÊ.X¢g“8òM¶5HUZÄ%Xj¥JPµ¢Rㄸ B}è¨ðF@Uª"úP‰(H<€HË™õ6 U~»žï|sîë™Íg§uØÇÁ ÞXRË4x}@b3yÝ|J@| ¹àxf"y}WùgK}"1;þöé©¶³¸~eRׯN¾él‚(wN"ñÊòó”çQÞ6™Ì•H_Ê£\•HÇ4¢…ÏðaOjG3Ö­˜€pešÒ’ú™oOü‚òMëÑL:—o‚©{"|=“Õ3Íî?.£œG¹#}¬ˆÝÿ¿Þ‚Óð&\†\Zá)¡ŽÀs ºA„/ákø®Á»ð:œð,ƒ÷Á sð*9[¬KÂáxQ¨g 3h`OÖ?£243»[Ù§Ü1•^g¤±¥ÙÈLo°Mn³È!Å/©¢‡Yåx3eÞ "2¯êa6™›Š’ø²ò£kQu¡ž²ìº£º$‘ n…õΨƂª¢?A®‰¾àav¹ô™Çèt>u1@7¹´Í ¼+T•ÜPO÷¶zØ™ãA¾B7”Y·$Êl;ú•‚^Ð(ϸDQu )T‘xÀêJvN—SDeú½QÎ&™¶2‡;ªPzPêÕ¦¨BÇF+.¸^ Œ¡i,ôjR$#œÄ3/jb}œ`^ hSkDÚ·Ô,Š.ºTÀ6 Q³1s µ:Y¢Kfp‰*a—Ȉª° €Th!P4nP1ᓇ9ùkhÀ¼ëy4 ½»œ½;)Œüý‘϶üDø Ï“9ÛÔÀv(#ãfŽÅû3aµ­Ì¶Ä6.â¯TGÜÐÖ.Ò;œOwŠôáÍN‡Ýê¹ûû……… ¤ŽÔ\ºxñRqÁòØB±X\¾],TNœñsçž½ÕøáKu]ÂãUÆ&\üë½âÚM)Ìaexb• 퇗çÖ¨Tìòì_µôôøý¾U›áD|&®giŸ–H¤¹U`Ðo˜DBà!?­¦ú:¨å'ãZÕs9=‘ÔR©áŒž Ï&GÓ‰>1в«Ä*:¬gsñtж·u´t®Ò° ·ÍnÜІ÷^Da˜†΃ǵ,¤!³8ò CgŠ'x WZð D üÂAqŸ ãF4„(‚³Ô xmœv¼)ôcœÆÐhC Á(â> endobj 61 0 obj <> stream xœ]Ak„0…ïùsÜ=,Q¡7ŠeÁC»¥¶? &£ ÔIãÁß1k[è!—÷¾äMtÛ=uä“~å`{L0zrŒKXÙ" 8yReÎÛt¨¼ÛÙD¥…í·%áÜÑêZé7ñ–Äœ]ð¬ô²§ Nm/º_cüÂ)A¡šŽrϳ‰/fF©KçÄöi»òxß"B•uy¯bƒÃ%‹lhBUEõõÚ($÷Ï;ˆa´Ÿ†%YJ²zhïÙãt§ö±~Ú€]™¥Iž=WØ÷„¿ßCÜ©¼¾Šôm£ endstream endobj 62 0 obj <> endobj 63 0 obj <> endobj 64 0 obj <> /ProcSet[/PDF/Text/ImageC/ImageI/ImageB] >> endobj 1 0 obj <>/Contents 2 0 R>> endobj 5 0 obj <>/Contents 6 0 R>> endobj 8 0 obj <>/Contents 9 0 R>> endobj 11 0 obj <>/Contents 12 0 R>> endobj 14 0 obj <>/Contents 15 0 R>> endobj 17 0 obj <>/Contents 18 0 R>> endobj 20 0 obj <>/Contents 21 0 R>> endobj 23 0 obj <>/Contents 24 0 R>> endobj 26 0 obj <>/Contents 27 0 R>> endobj 29 0 obj <>/Contents 30 0 R>> endobj 32 0 obj <>/Contents 33 0 R>> endobj 35 0 obj <>/Contents 36 0 R>> endobj 38 0 obj <>/Contents 39 0 R>> endobj 41 0 obj <>/Contents 42 0 R>> endobj 44 0 obj <>/Contents 45 0 R>> endobj 65 0 obj <> endobj 66 0 obj < /Dest[1 0 R/XYZ 0 595 0]/Parent 65 0 R/Next 67 0 R>> endobj 67 0 obj < /Dest[5 0 R/XYZ 0 595 0]/Parent 65 0 R/Prev 66 0 R/Next 68 0 R>> endobj 68 0 obj < /Dest[8 0 R/XYZ 0 595 0]/Parent 65 0 R/Prev 67 0 R/Next 69 0 R>> endobj 69 0 obj < /Dest[11 0 R/XYZ 0 595 0]/Parent 65 0 R/Prev 68 0 R/Next 70 0 R>> endobj 70 0 obj < /Dest[14 0 R/XYZ 0 595 0]/Parent 65 0 R/Prev 69 0 R/Next 71 0 R>> endobj 71 0 obj < /Dest[17 0 R/XYZ 0 595 0]/Parent 65 0 R/Prev 70 0 R/Next 72 0 R>> endobj 72 0 obj < /Dest[20 0 R/XYZ 0 595 0]/Parent 65 0 R/Prev 71 0 R/Next 73 0 R>> endobj 73 0 obj < /Dest[23 0 R/XYZ 0 595 0]/Parent 65 0 R/Prev 72 0 R/Next 74 0 R>> endobj 74 0 obj < /Dest[26 0 R/XYZ 0 595 0]/Parent 65 0 R/Prev 73 0 R/Next 75 0 R>> endobj 75 0 obj < /Dest[29 0 R/XYZ 0 595 0]/Parent 65 0 R/Prev 74 0 R/Next 76 0 R>> endobj 76 0 obj < /Dest[32 0 R/XYZ 0 595 0]/Parent 65 0 R/Prev 75 0 R/Next 77 0 R>> endobj 77 0 obj < /Dest[35 0 R/XYZ 0 595 0]/Parent 65 0 R/Prev 76 0 R/Next 78 0 R>> endobj 78 0 obj < /Dest[38 0 R/XYZ 0 595 0]/Parent 65 0 R/Prev 77 0 R/Next 79 0 R>> endobj 79 0 obj < /Dest[41 0 R/XYZ 0 595 0]/Parent 65 0 R/Prev 78 0 R/Next 80 0 R>> endobj 80 0 obj < /Dest[44 0 R/XYZ 0 595 0]/Parent 65 0 R/Prev 79 0 R>> endobj 47 0 obj <> endobj 81 0 obj <> endobj 82 0 obj < /Producer /CreationDate(D:20150426050946+02'00')>> endobj xref 0 83 0000000000 65535 f 0000102005 00000 n 0000000019 00000 n 0000000312 00000 n 0000000332 00000 n 0000102149 00000 n 0000075347 00000 n 0000075734 00000 n 0000102293 00000 n 0000075754 00000 n 0000076209 00000 n 0000102437 00000 n 0000076230 00000 n 0000076645 00000 n 0000102583 00000 n 0000076666 00000 n 0000077177 00000 n 0000102729 00000 n 0000077198 00000 n 0000077606 00000 n 0000102875 00000 n 0000077627 00000 n 0000078126 00000 n 0000103021 00000 n 0000078147 00000 n 0000078554 00000 n 0000103167 00000 n 0000078575 00000 n 0000079103 00000 n 0000103313 00000 n 0000079124 00000 n 0000079582 00000 n 0000103459 00000 n 0000079603 00000 n 0000080193 00000 n 0000103605 00000 n 0000080214 00000 n 0000080500 00000 n 0000103751 00000 n 0000080521 00000 n 0000080801 00000 n 0000103897 00000 n 0000080822 00000 n 0000081101 00000 n 0000104043 00000 n 0000081122 00000 n 0000081400 00000 n 0000106253 00000 n 0000081421 00000 n 0000085361 00000 n 0000085383 00000 n 0000085580 00000 n 0000085871 00000 n 0000086037 00000 n 0000098477 00000 n 0000098500 00000 n 0000098696 00000 n 0000099256 00000 n 0000099662 00000 n 0000101186 00000 n 0000101208 00000 n 0000101400 00000 n 0000101692 00000 n 0000101853 00000 n 0000101906 00000 n 0000104189 00000 n 0000104246 00000 n 0000104367 00000 n 0000104500 00000 n 0000104633 00000 n 0000104767 00000 n 0000104901 00000 n 0000105035 00000 n 0000105169 00000 n 0000105303 00000 n 0000105437 00000 n 0000105575 00000 n 0000105713 00000 n 0000105851 00000 n 0000105989 00000 n 0000106127 00000 n 0000106450 00000 n 0000106552 00000 n trailer < <8EC7EE584DD4C6E26B4FE07EE6B5BB71> ] /DocChecksum /EC2E9519F4B9FC16E0EDBA85D13E86D9 >> startxref 106731 %%EOF Carla-2.4.2/data/presentation/lac2018/000077500000000000000000000000001420416754300172455ustar00rootroot00000000000000Carla-2.4.2/data/presentation/lac2018/.gitignore000066400000000000000000000000741420416754300212360ustar00rootroot00000000000000lac2018.aux lac2018.bbl lac2018.blg lac2018.log lac2018.pdf Carla-2.4.2/data/presentation/lac2018/Makefile000066400000000000000000000002611420416754300207040ustar00rootroot00000000000000SAMPLES=lac2018.pdf all: $(SAMPLES) clean: cleantmp rm -f *.pdf cleantmp: rm -f *.aux rm -f *.bbl rm -f *.blg rm -f *.log %.pdf: %.tex pdflatex "$<" .PHONY:all clean Carla-2.4.2/data/presentation/lac2018/acl.bst000066400000000000000000000610131420416754300205170ustar00rootroot00000000000000% BibTeX `acl' style file for BibTeX version 0.99c, LaTeX version 2.09 % This version was made by modifying `aaai-named' format based on the master % file by Oren Patashnik (PATASHNIK@SCORE.STANFORD.EDU) % Copyright (C) 1985, all rights reserved. % Modifications Copyright 1988, Peter F. Patel-Schneider % Further modifictions by Stuart Shieber, 1991, and Fernando Pereira, 1992. % Copying of this file is authorized only if either % (1) you make absolutely no changes to your copy, including name, or % (2) if you do make changes, you name it something other than % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst. % This restriction helps ensure that all standard styles are identical. % There are undoubtably bugs in this style. If you make bug fixes, % improvements, etc. please let me know. My e-mail address is: % pfps@spar.slb.com % Citation format: [author-last-name, year] % [author-last-name and author-last-name, year] % [author-last-name {\em et al.}, year] % % Reference list ordering: alphabetical by author or whatever passes % for author in the absence of one. % % This BibTeX style has support for short (year only) citations. This % is done by having the citations actually look like % \citename{name-info, }year % The LaTeX style has to have the following % \let\@internalcite\cite % \def\cite{\def\citename##1{##1}\@internalcite} % \def\shortcite{\def\citename##1{}\@internalcite} % \def\@biblabel#1{\def\citename##1{##1}[#1]\hfill} % which makes \shortcite the macro for short citations. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Changes made by SMS for thesis style % no emphasis on "et al." % "Ph.D." includes periods (not "PhD") % moved year to immediately after author's name %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ENTRY { address author booktitle chapter edition editor howpublished institution journal key month note number organization pages publisher school series title type volume year } {} { label extra.label sort.label } INTEGERS { output.state before.all mid.sentence after.sentence after.block } FUNCTION {init.state.consts} { #0 'before.all := #1 'mid.sentence := #2 'after.sentence := #3 'after.block := } STRINGS { s t } FUNCTION {output.nonnull} { 's := output.state mid.sentence = { ", " * write$ } { output.state after.block = { add.period$ write$ newline$ "\newblock " write$ } { output.state before.all = 'write$ { add.period$ " " * write$ } if$ } if$ mid.sentence 'output.state := } if$ s } FUNCTION {output} { duplicate$ empty$ 'pop$ 'output.nonnull if$ } FUNCTION {output.check} { 't := duplicate$ empty$ { pop$ "empty " t * " in " * cite$ * warning$ } 'output.nonnull if$ } FUNCTION {output.bibitem} { newline$ "\bibitem[" write$ label write$ "]{" write$ cite$ write$ "}" write$ newline$ "" before.all 'output.state := } FUNCTION {fin.entry} { add.period$ write$ newline$ } FUNCTION {new.block} { output.state before.all = 'skip$ { after.block 'output.state := } if$ } FUNCTION {new.sentence} { output.state after.block = 'skip$ { output.state before.all = 'skip$ { after.sentence 'output.state := } if$ } if$ } FUNCTION {not} { { #0 } { #1 } if$ } FUNCTION {and} { 'skip$ { pop$ #0 } if$ } FUNCTION {or} { { pop$ #1 } 'skip$ if$ } FUNCTION {new.block.checka} { empty$ 'skip$ 'new.block if$ } FUNCTION {new.block.checkb} { empty$ swap$ empty$ and 'skip$ 'new.block if$ } FUNCTION {new.sentence.checka} { empty$ 'skip$ 'new.sentence if$ } FUNCTION {new.sentence.checkb} { empty$ swap$ empty$ and 'skip$ 'new.sentence if$ } FUNCTION {field.or.null} { duplicate$ empty$ { pop$ "" } 'skip$ if$ } FUNCTION {emphasize} { duplicate$ empty$ { pop$ "" } { "{\em " swap$ * "}" * } if$ } INTEGERS { nameptr namesleft numnames } FUNCTION {format.names} { 's := #1 'nameptr := s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't := nameptr #1 > { namesleft #1 > { ", " * t * } { numnames #2 > { "," * } 'skip$ if$ t "others" = { " et~al." * } { " and " * t * } if$ } if$ } 't if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ } FUNCTION {format.authors} { author empty$ { "" } { author format.names } if$ } FUNCTION {format.editors} { editor empty$ { "" } { editor format.names editor num.names$ #1 > { ", editors" * } { ", editor" * } if$ } if$ } FUNCTION {format.title} { title empty$ { "" } { title "t" change.case$ } if$ } FUNCTION {n.dashify} { 't := "" { t empty$ not } { t #1 #1 substring$ "-" = { t #1 #2 substring$ "--" = not { "--" * t #2 global.max$ substring$ 't := } { { t #1 #1 substring$ "-" = } { "-" * t #2 global.max$ substring$ 't := } while$ } if$ } { t #1 #1 substring$ * t #2 global.max$ substring$ 't := } if$ } while$ } FUNCTION {format.date} { year empty$ { month empty$ { "" } { "there's a month but no year in " cite$ * warning$ month } if$ } { month empty$ { "" } { month } if$ } if$ } FUNCTION {format.btitle} { title emphasize } FUNCTION {tie.or.space.connect} { duplicate$ text.length$ #3 < { "~" } { " " } if$ swap$ * * } FUNCTION {either.or.check} { empty$ 'pop$ { "can't use both " swap$ * " fields in " * cite$ * warning$ } if$ } FUNCTION {format.bvolume} { volume empty$ { "" } { "volume" volume tie.or.space.connect series empty$ 'skip$ { " of " * series emphasize * } if$ "volume and number" number either.or.check } if$ } FUNCTION {format.number.series} { volume empty$ { number empty$ { series field.or.null } { output.state mid.sentence = { "number" } { "Number" } if$ number tie.or.space.connect series empty$ { "there's a number but no series in " cite$ * warning$ } { " in " * series * } if$ } if$ } { "" } if$ } FUNCTION {format.edition} { edition empty$ { "" } { output.state mid.sentence = { edition "l" change.case$ " edition" * } { edition "t" change.case$ " edition" * } if$ } if$ } INTEGERS { multiresult } FUNCTION {multi.page.check} { 't := #0 'multiresult := { multiresult not t empty$ not and } { t #1 #1 substring$ duplicate$ "-" = swap$ duplicate$ "," = swap$ "+" = or or { #1 'multiresult := } { t #2 global.max$ substring$ 't := } if$ } while$ multiresult } FUNCTION {format.pages} { pages empty$ { "" } { pages multi.page.check { "pages" pages n.dashify tie.or.space.connect } { "page" pages tie.or.space.connect } if$ } if$ } FUNCTION {format.year.label} { year extra.label * } FUNCTION {format.vol.num.pages} { volume field.or.null number empty$ 'skip$ { "(" number * ")" * * volume empty$ { "there's a number but no volume in " cite$ * warning$ } 'skip$ if$ } if$ pages empty$ 'skip$ { duplicate$ empty$ { pop$ format.pages } { ":" * pages n.dashify * } if$ } if$ } FUNCTION {format.chapter.pages} { chapter empty$ 'format.pages { type empty$ { "chapter" } { type "l" change.case$ } if$ chapter tie.or.space.connect pages empty$ 'skip$ { ", " * format.pages * } if$ } if$ } FUNCTION {format.in.ed.booktitle} { booktitle empty$ { "" } { editor empty$ { "In " booktitle emphasize * } { "In " format.editors * ", " * booktitle emphasize * } if$ } if$ } FUNCTION {empty.misc.check} { author empty$ title empty$ howpublished empty$ month empty$ year empty$ note empty$ and and and and and key empty$ not and { "all relevant fields are empty in " cite$ * warning$ } 'skip$ if$ } FUNCTION {format.thesis.type} { type empty$ 'skip$ { pop$ type "t" change.case$ } if$ } FUNCTION {format.tr.number} { type empty$ { "Technical Report" } 'type if$ number empty$ { "t" change.case$ } { number tie.or.space.connect } if$ } FUNCTION {format.article.crossref} { key empty$ { journal empty$ { "need key or journal for " cite$ * " to crossref " * crossref * warning$ "" } { "In {\em " journal * "\/}" * } if$ } { "In " key * } if$ " \cite{" * crossref * "}" * } FUNCTION {format.crossref.editor} { editor #1 "{vv~}{ll}" format.name$ editor num.names$ duplicate$ #2 > { pop$ " et~al." * } { #2 < 'skip$ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = { " et~al." * } { " and " * editor #2 "{vv~}{ll}" format.name$ * } if$ } if$ } if$ } FUNCTION {format.book.crossref} { volume empty$ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ "In " } { "Volume" volume tie.or.space.connect " of " * } if$ editor empty$ editor field.or.null author field.or.null = or { key empty$ { series empty$ { "need editor, key, or series for " cite$ * " to crossref " * crossref * warning$ "" * } { "{\em " * series * "\/}" * } if$ } { key * } if$ } { format.crossref.editor * } if$ " \cite{" * crossref * "}" * } FUNCTION {format.incoll.inproc.crossref} { editor empty$ editor field.or.null author field.or.null = or { key empty$ { booktitle empty$ { "need editor, key, or booktitle for " cite$ * " to crossref " * crossref * warning$ "" } { "In {\em " booktitle * "\/}" * } if$ } { "In " key * } if$ } { "In " format.crossref.editor * } if$ " \cite{" * crossref * "}" * } FUNCTION {article} { output.bibitem format.authors "author" output.check new.block format.year.label "year" output.check new.block format.title "title" output.check new.block crossref missing$ { journal emphasize "journal" output.check format.vol.num.pages output format.date output } { format.article.crossref output.nonnull format.pages output } if$ new.block note output fin.entry } FUNCTION {book} { output.bibitem author empty$ { format.editors "author and editor" output.check } { format.authors output.nonnull crossref missing$ { "author and editor" editor either.or.check } 'skip$ if$ } if$ new.block format.year.label "year" output.check new.block format.btitle "title" output.check crossref missing$ { format.bvolume output new.block format.number.series output new.sentence publisher "publisher" output.check address output } { new.block format.book.crossref output.nonnull } if$ format.edition output format.date output new.block note output fin.entry } FUNCTION {booklet} { output.bibitem format.authors output new.block format.year.label "year" output.check new.block format.title "title" output.check howpublished address new.block.checkb howpublished output address output format.date output new.block note output fin.entry } FUNCTION {inbook} { output.bibitem author empty$ { format.editors "author and editor" output.check } { format.authors output.nonnull crossref missing$ { "author and editor" editor either.or.check } 'skip$ if$ } if$ format.year.label "year" output.check new.block new.block format.btitle "title" output.check crossref missing$ { format.bvolume output format.chapter.pages "chapter and pages" output.check new.block format.number.series output new.sentence publisher "publisher" output.check address output } { format.chapter.pages "chapter and pages" output.check new.block format.book.crossref output.nonnull } if$ format.edition output format.date output new.block note output fin.entry } FUNCTION {incollection} { output.bibitem format.authors "author" output.check new.block format.year.label "year" output.check new.block format.title "title" output.check new.block crossref missing$ { format.in.ed.booktitle "booktitle" output.check format.bvolume output format.number.series output format.chapter.pages output new.sentence publisher "publisher" output.check address output format.edition output format.date output } { format.incoll.inproc.crossref output.nonnull format.chapter.pages output } if$ new.block note output fin.entry } FUNCTION {inproceedings} { output.bibitem format.authors "author" output.check new.block format.year.label "year" output.check new.block format.title "title" output.check new.block crossref missing$ { format.in.ed.booktitle "booktitle" output.check format.bvolume output format.number.series output format.pages output address empty$ { organization publisher new.sentence.checkb organization output publisher output format.date output } { address output.nonnull format.date output new.sentence organization output publisher output } if$ } { format.incoll.inproc.crossref output.nonnull format.pages output } if$ new.block note output fin.entry } FUNCTION {conference} { inproceedings } FUNCTION {manual} { output.bibitem author empty$ { organization empty$ 'skip$ { organization output.nonnull address output } if$ } { format.authors output.nonnull } if$ format.year.label "year" output.check new.block new.block format.btitle "title" output.check author empty$ { organization empty$ { address new.block.checka address output } 'skip$ if$ } { organization address new.block.checkb organization output address output } if$ format.edition output format.date output new.block note output fin.entry } FUNCTION {mastersthesis} { output.bibitem format.authors "author" output.check new.block format.year.label "year" output.check new.block format.title "title" output.check new.block "Master's thesis" format.thesis.type output.nonnull school "school" output.check address output format.date output new.block note output fin.entry } FUNCTION {misc} { output.bibitem format.authors output new.block format.year.label output new.block title howpublished new.block.checkb format.title output howpublished new.block.checka howpublished output format.date output new.block note output fin.entry empty.misc.check } FUNCTION {phdthesis} { output.bibitem format.authors "author" output.check new.block format.year.label "year" output.check new.block format.btitle "title" output.check new.block "{Ph.D.} thesis" format.thesis.type output.nonnull school "school" output.check address output format.date output new.block note output fin.entry } FUNCTION {proceedings} { output.bibitem editor empty$ { organization output } { format.editors output.nonnull } if$ new.block format.year.label "year" output.check new.block format.btitle "title" output.check format.bvolume output format.number.series output address empty$ { editor empty$ { publisher new.sentence.checka } { organization publisher new.sentence.checkb organization output } if$ publisher output format.date output } { address output.nonnull format.date output new.sentence editor empty$ 'skip$ { organization output } if$ publisher output } if$ new.block note output fin.entry } FUNCTION {techreport} { output.bibitem format.authors "author" output.check new.block format.year.label "year" output.check new.block format.title "title" output.check new.block format.tr.number output.nonnull institution "institution" output.check address output format.date output new.block note output fin.entry } FUNCTION {unpublished} { output.bibitem format.authors "author" output.check new.block format.year.label "year" output.check new.block format.title "title" output.check new.block note "note" output.check format.date output fin.entry } FUNCTION {default.type} { misc } MACRO {jan} {"January"} MACRO {feb} {"February"} MACRO {mar} {"March"} MACRO {apr} {"April"} MACRO {may} {"May"} MACRO {jun} {"June"} MACRO {jul} {"July"} MACRO {aug} {"August"} MACRO {sep} {"September"} MACRO {oct} {"October"} MACRO {nov} {"November"} MACRO {dec} {"December"} MACRO {acmcs} {"ACM Computing Surveys"} MACRO {acta} {"Acta Informatica"} MACRO {cacm} {"Communications of the ACM"} MACRO {ibmjrd} {"IBM Journal of Research and Development"} MACRO {ibmsj} {"IBM Systems Journal"} MACRO {ieeese} {"IEEE Transactions on Software Engineering"} MACRO {ieeetc} {"IEEE Transactions on Computers"} MACRO {ieeetcad} {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} MACRO {ipl} {"Information Processing Letters"} MACRO {jacm} {"Journal of the ACM"} MACRO {jcss} {"Journal of Computer and System Sciences"} MACRO {scp} {"Science of Computer Programming"} MACRO {sicomp} {"SIAM Journal on Computing"} MACRO {tocs} {"ACM Transactions on Computer Systems"} MACRO {tods} {"ACM Transactions on Database Systems"} MACRO {tog} {"ACM Transactions on Graphics"} MACRO {toms} {"ACM Transactions on Mathematical Software"} MACRO {toois} {"ACM Transactions on Office Information Systems"} MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} MACRO {tcs} {"Theoretical Computer Science"} READ FUNCTION {sortify} { purify$ "l" change.case$ } INTEGERS { len } FUNCTION {chop.word} { 's := 'len := s #1 len substring$ = { s len #1 + global.max$ substring$ } 's if$ } INTEGERS { et.al.char.used } FUNCTION {initialize.et.al.char.used} { #0 'et.al.char.used := } EXECUTE {initialize.et.al.char.used} FUNCTION {format.lab.names} { 's := s num.names$ 'numnames := numnames #1 = { s #1 "{vv }{ll}" format.name$ } { numnames #2 = { s #1 "{vv }{ll }and " format.name$ s #2 "{vv }{ll}" format.name$ * } { s #1 "{vv }{ll }\bgroup et al.\egroup " format.name$ } if$ } if$ } FUNCTION {author.key.label} { author empty$ { key empty$ { cite$ #1 #3 substring$ } { key #3 text.prefix$ } if$ } { author format.lab.names } if$ } FUNCTION {author.editor.key.label} { author empty$ { editor empty$ { key empty$ { cite$ #1 #3 substring$ } { key #3 text.prefix$ } if$ } { editor format.lab.names } if$ } { author format.lab.names } if$ } FUNCTION {author.key.organization.label} { author empty$ { key empty$ { organization empty$ { cite$ #1 #3 substring$ } { "The " #4 organization chop.word #3 text.prefix$ } if$ } { key #3 text.prefix$ } if$ } { author format.lab.names } if$ } FUNCTION {editor.key.organization.label} { editor empty$ { key empty$ { organization empty$ { cite$ #1 #3 substring$ } { "The " #4 organization chop.word #3 text.prefix$ } if$ } { key #3 text.prefix$ } if$ } { editor format.lab.names } if$ } FUNCTION {calc.label} { type$ "book" = type$ "inbook" = or 'author.editor.key.label { type$ "proceedings" = 'editor.key.organization.label { type$ "manual" = 'author.key.organization.label 'author.key.label if$ } if$ } if$ duplicate$ "\protect\citename{" swap$ * "}" * year field.or.null purify$ * 'label := year field.or.null purify$ * sortify 'sort.label := } FUNCTION {sort.format.names} { 's := #1 'nameptr := "" s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } { nameptr #1 > { " " * } 'skip$ if$ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't := nameptr numnames = t "others" = and { "et al" * } { t sortify * } if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ } FUNCTION {sort.format.title} { 't := "A " #2 "An " #3 "The " #4 t chop.word chop.word chop.word sortify #1 global.max$ substring$ } FUNCTION {author.sort} { author empty$ { key empty$ { "to sort, need author or key in " cite$ * warning$ "" } { key sortify } if$ } { author sort.format.names } if$ } FUNCTION {author.editor.sort} { author empty$ { editor empty$ { key empty$ { "to sort, need author, editor, or key in " cite$ * warning$ "" } { key sortify } if$ } { editor sort.format.names } if$ } { author sort.format.names } if$ } FUNCTION {author.organization.sort} { author empty$ { organization empty$ { key empty$ { "to sort, need author, organization, or key in " cite$ * warning$ "" } { key sortify } if$ } { "The " #4 organization chop.word sortify } if$ } { author sort.format.names } if$ } FUNCTION {editor.organization.sort} { editor empty$ { organization empty$ { key empty$ { "to sort, need editor, organization, or key in " cite$ * warning$ "" } { key sortify } if$ } { "The " #4 organization chop.word sortify } if$ } { editor sort.format.names } if$ } FUNCTION {presort} { calc.label sort.label " " * type$ "book" = type$ "inbook" = or 'author.editor.sort { type$ "proceedings" = 'editor.organization.sort { type$ "manual" = 'author.organization.sort 'author.sort if$ } if$ } if$ * " " * year field.or.null sortify * " " * title field.or.null sort.format.title * #1 entry.max$ substring$ 'sort.key$ := } ITERATE {presort} SORT STRINGS { longest.label last.sort.label next.extra } INTEGERS { longest.label.width last.extra.num } FUNCTION {initialize.longest.label} { "" 'longest.label := #0 int.to.chr$ 'last.sort.label := "" 'next.extra := #0 'longest.label.width := #0 'last.extra.num := } FUNCTION {forward.pass} { last.sort.label sort.label = { last.extra.num #1 + 'last.extra.num := last.extra.num int.to.chr$ 'extra.label := } { "a" chr.to.int$ 'last.extra.num := "" 'extra.label := sort.label 'last.sort.label := } if$ } FUNCTION {reverse.pass} { next.extra "b" = { "a" 'extra.label := } 'skip$ if$ label extra.label * 'label := label width$ longest.label.width > { label 'longest.label := label width$ 'longest.label.width := } 'skip$ if$ extra.label 'next.extra := } EXECUTE {initialize.longest.label} ITERATE {forward.pass} REVERSE {reverse.pass} FUNCTION {begin.bib} { et.al.char.used { "\newcommand{\etalchar}[1]{$^{#1}$}" write$ newline$ } 'skip$ if$ preamble$ empty$ 'skip$ { preamble$ write$ newline$ } if$ "\begin{thebibliography}{" "}" * write$ newline$ } EXECUTE {begin.bib} EXECUTE {init.state.consts} ITERATE {call.type$} FUNCTION {end.bib} { newline$ "\end{thebibliography}" write$ newline$ } EXECUTE {end.bib} Carla-2.4.2/data/presentation/lac2018/lac2018.sty000066400000000000000000000550621420416754300210700ustar00rootroot00000000000000% % lac2018.sty % \typeout{} \typeout{LAC2018 Proceedings style -- January 2018} %\typeout{only slightly different from} %\typeout{Coling 2004 Proceedings style -- February 2004} %\typeout{only slightly different from} %\typeout{ACL-COLING 1998 Proceedings style -- March 31st 1998} \typeout{} % % ---------------------------------------------------------------------- % % This is the LaTeX style file for the Linux Audio Conference % It is an almost unmodified copy of colacl.sty, the style file % of Coling (International Conference on Computational Linguistics). % Many thanks to Coling for their permission to use it! % The original may be found here: % http://www.issco.unige.ch/coling2004/coling2004downloads.html % % ---------------------------------------------------------------------- % % This is the LaTeX style file for ACL-COLING 1998. It is based on % a series of similar files prepared for previous conferences by % Fernando Pereira, Paul Jacobs, Stuart Shieber, Peter F. % Patel-Schneider and others. Various changes have been made, chiefly % to save space in the final output or remove redundant definitions. % % colacl.sty is designed for use as a package or option with the % standard LaTeX article class, and the BibTeX style acl.bst. % % Author/title and citation formatting differs slightly from standard % LaTeX; see AUTHOR FORMATS and CITATION FORMATS below for more % information. % % This file is supplied as a hopefully convenient implementation of % some of the "instructions for authors" repeated below. It is not % guaranteed to work in any given LaTeX installation or in conjunction % with any given class, package or style, and it is not intended as % a LaTeX tutorial. % % ---------------------------------------------------------------------- % Instructions for authors % % (i) Maximum length of full papers: 8 pages. % % (ii) Paper size: A4. % % (iii) Margins: set so that text lies within a rectangle 9in (23cm) % high and 6.5in (16.5cm) wide. % % (iv) Body of text to be set in two columns. Full-width figures % (i.e. using \begin{figure*}) and tables may be used if % necessary. % % (v) Use standard fonts, e.g. Computer Modern Roman, Times Roman, no % smaller than 10pt. % % (vi) No page numbering. % % Items (iii), (iv) and (vi) are handled by this file, and should % therefore not be overridden by resetting \textwidth, \textheight, % \pagestyle etc. in your document, or by using styles or packages % which have the same effect. % % ---------------------------------------------------------------------- % To convert papers prepared with colaclsub.sty to the final format % for use with colacl.sty: % % (1) Remove commands specific to the original submission format % (\type, \subject, \contact, \conference, \makeidpage). % % (2) Replace \summary{...} with an abstract, using the normal % abstract environment, placed after \maketitle. % % A simple document template: % % \documentclass[11pt,letterpaper]{article} % \usepackage{lac2012} % \title{...} % \author{...} % see below for possible formats % \begin{document} % \maketitle % \begin{abstract} % ... % contents of abstract % \end{abstract} % ... % contents of article % \bibliographystyle{acl} % use acl.bst % \bibliography{...} % \end{document} % % Users of obsolete LaTeX versions can try: % % \documentstyle[lac2012]{article} % or [11pt,lac2012] % \title{...} % ... % % % ---------------------------------------------------------------------- % AUTHOR FORMATS % % Author information can be set in various styles. % % For several authors from the same institution: % \author{Author 1 \and ... \and Author n \\ % Address line \\ ... \\ Address line} % if the names do not fit well on one line use % Author 1 \\ {\bf Author 2} \\ ... \\ {\bf Author n} \\ % % For authors from different institutions: % \author{Author 1 \\ Address line \\ ... \\ Address line % \And ... \And % Author n \\ Address line \\ ... \\ Address line} % % To start a separate "row" of authors use \AND, as in % \author{Author 1 \\ Address line \\ ... \\ Address line % \AND % Author 2 \\ Address line \\ ... \\ Address line \And % Author 3 \\ Address line \\ ... \\ Address line} % % If the title and author information does not fit in the area allocated, % place \setlength\titlebox{} after \usepackage{colacl}, % where can be something larger than 2.0in % % ---------------------------------------------------------------------- % CITATION FORMATS % % Three possible citation formats: % "\cite{...}" produces a citation like "(Author, 1999)" % "\shortcite{...}" produces a citation like "(1999)" % "\newcite{...}" produces a citation like "Author (1999)" % % All three take an optional argument which can be used to add page % references, etc.: % "\newcite[1--6]{...}" produces a citation like "Author (1999, 1--6)" % % ---------------------------------------------------------------------- % IF IT DOESN'T WORK % % The error message "File `colacl.sty' not found." indicates that this % file has not been installed in a location which is visible to your % LaTeX. Try putting it in the same directory as your paper, and % running LaTeX there. Consult your `Local Guide' documentation or % your system administrator to find out how LaTeX searches for input % files. % % "\documentclass..." is a LaTeX2e declaration. An error message % "Undefined control sequence." followed by a line ending in % "\documentclass" indicates that you have used this with an obsolete % LaTeX installation. Use the "\documentstyle" variant shown above. % % As a last resort, forget about colacl.sty and simply copy the % following lines (uncommented, obviously) into your document before % the "\begin{document}": % % \setlength\topmargin{0.0in} % \setlength\oddsidemargin{-0.0in} % \setlength\textheight{9.0in} % \setlength\textwidth{6.5in} % \setlength\columnsep{0.25in} % \setlength\headheight{0pt} % \setlength\headsep{0pt} % \thispagestyle{empty} % \pagestyle{empty} % \flushbottom % \twocolumn % \sloppy % % Some interactions with other packages may still occur. In order to % remove the page number from the first page, you may have to place the % "\thispagestyle{empty}" command immediately after "\maketitle". % % ---------------------------------------------------------------------- % NOTE: Some laser printers have a serious problem printing TeX output. % These printing devices, commonly known as "write-white" laser % printers, tend to make characters too light. To get around this % problem, a darker set of fonts must be created for these devices. % % ---------------------------------------------------------------------- % Physical page layout - slightly modified from IJCAI by pj % Physical page layout - slightly modified by rg for LAC \newlength\myavierh \setlength\myavierh{297mm} %\message{The page height is \the\paperheight} \ifdim \paperheight = \myavierh \message{ !! Using ISO-A4 paper} %% A4paper \setlength\topmargin{0.0in} \setlength\oddsidemargin{-0.0in} \setlength\textheight{9.5in} %%sm was 9.0in \setlength\textwidth{6.5in} \setlength\columnsep{0.25in} \newlength\titlebox \setlength\titlebox{2.0in} % was 2.25in \setlength\headheight{0pt} \setlength\headsep{0pt} \setlength\footskip{0pt} % irrelevant when no footers. \else %% US-Letter \message{ !! Using US-Letter paper} \setlength{\pdfpagewidth}{8.5in} \setlength{\pdfpageheight}{11in} \setlength\topmargin{0.0in} \setlength\oddsidemargin{-0.2in} \setlength\textheight{8.8in} \setlength\textwidth{6.9in} \setlength\columnsep{0.4in} \newlength\titlebox \setlength\titlebox{2.1in} \setlength\headheight{0pt} \setlength\headsep{0pt} \setlength\footskip{0pt} % irrelevant when no footers. \fi \pagestyle{empty} % no page numbers \thispagestyle{empty} % no page numbers \flushbottom \twocolumn \sloppy % We're never going to need a table of contents, so just flush it to % save space --- suggested by drstrip@sandia-2 \def\addcontentsline#1#2#3{} % ---------------------------------------------------------------------- % Title stuff, taken from deproc. \def\maketitle{% \par% \begingroup% \def\thefootnote{\fnsymbol{footnote}}% \def\@makefnmark{\rlap{$^{\@thefnmark}$\hss}}% % no paragraph breaks in \thanks \long\def\@makefntext##1{% \parindent 1em\noindent% \hbox to 1em{$^{\@thefnmark}$}##1} \twocolumn[\@maketitle] \@thanks% \endgroup% \setcounter{footnote}{0}% \let\maketitle\relax\let\@maketitle\relax% \gdef\@thanks{}\gdef\@author{}\gdef\@title{}% \let\thanks\relax} % some vertical space removed here: skip above and below title % \def\@maketitle{% \vbox to \titlebox{% \hsize\textwidth\linewidth\hsize% \vskip 0.125in minus 0.05in% \centering{\Large\bf \@title \par}% \vskip 0.2in plus 0.1fil minus 0.1in {\def\and{\unskip\enspace{\rm and}\enspace}% \def\And{\end{tabular}\hss \egroup \hskip 1in plus 2fil \hbox to 0pt\bgroup\hss \begin{tabular}[t]{c}\bf}% \def\AND{\end{tabular}\hss\egroup \hfil\hfil\egroup \vskip 0.25in plus 1fil minus 0.125in \hbox to \linewidth\bgroup\large \hfil\hfil \hbox to 0pt\bgroup\hss \begin{tabular}[t]{c}\bf} \hbox to \linewidth \bgroup\large \hfil\hfil \hbox to 0pt\bgroup\hss \begin{tabular}[t]{c}\bf\@author \end{tabular}\hss\egroup \hfil\hfil\egroup} \vskip 0.3in plus 2fil minus 0.1in }} % ---------------------------------------------------------------------- % abstract, changed for LAC2005 % \renewenvironment{abstract}{\section*{\centerline{Abstract}}}{} \renewenvironment{abstract}{\section*{Abstract}}{} % ---------------------------------------------------------------------- % keywords, added for LAC2005 \def\keywords{\section*{Keywords}} % ---------------------------------------------------------------------- % bibliography and citations % most of cite format is from aclsub.sty by SMS % don't box citations, separate with ; and a space % Replaced for multiple citations (pj) % don't box citations and also add space, semicolon between multiple % citations % \def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi \def\@citea{}\@cite{\@for\@citeb:=#2\do {\@citea\def\@citea{; }\@ifundefined {b@\@citeb}{{\bf ?}\@warning {Citation `\@citeb' on page \thepage \space undefined}}% {\csname b@\@citeb\endcsname}}}{#1}} % Allow short (name-less) citations, when used in % conjunction with a bibliography style that creates labels like % \citename{, } % \let\@internalcite\cite \def\cite{\def\citename##1{##1, }\@internalcite} \def\longcite{\def\citename##1{##1, }\@internalcite} \def\shortcite{\def\citename##1{}\@internalcite} \def\newcite{\def\citename##1{{##1}\ (}\@internalciteb} % Macros for \newcite, which leaves name in running text, and is % otherwise like \shortcite. % \def\@citexb[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi \def\@citea{}\@newcite{\@for\@citeb:=#2\do {\@citea\def\@citea{;\penalty\@m\ }\@ifundefined {b@\@citeb}{{\bf ?}\@warning {Citation `\@citeb' on page \thepage \space undefined}}% % gjr: hbox causes too many bad linebreaks %\hbox{\csname b@\@citeb\endcsname}}}{#1}} {\csname b@\@citeb\endcsname}}}{#1}} \def\@internalciteb{% \@ifnextchar [{\@tempswatrue\@citexb}{\@tempswafalse\@citexb[]}} \def\@newcite#1#2{{#1\if@tempswa, #2\fi)}} % gjr: no labels in this bibliography style % \def\@biblabel#1{\def\citename##1{##1}[#1]\hfill} \def\@biblabel#1{} % use square brackets after all %%% More changes made by SMS (originals in latex.tex) % Use parentheses instead of square brackets in the text. % \def\@cite#1#2{({#1\if@tempswa , #2\fi})} % Don't put a label in the bibliography at all. Just use the unlabeled format % instead. % gjr: removed \@mkboth -- no headers here. % gjr: reduced vertical space between entries (plus was .33em) % \def\thebibliography#1{\section*{References}\list {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth \advance\leftmargin\labelsep \usecounter{enumi}} \def\newblock{\hskip .11em plus .11em minus .07em} \sloppy\clubpenalty4000\widowpenalty4000 \sfcode`\.=1000\relax} \let\endthebibliography=\endlist % \def\thebibliography#1{% % \section*{References} % \list{}{\setlength{\labelwidth}{0pt} % \setlength{\leftmargin}{\parindent} % \setlength{\itemsep}{0.11ex plus 0.11ex} % \setlength{\parsep}{0ex} % \setlength{\itemindent}{-\parindent}} % \def\newblock{\hskip .11em plus .11em minus -.07em} % \sloppy\clubpenalty4000\widowpenalty4000 % \sfcode`\.=1000\relax} % \let\endthebibliography=\endlist % Allow for a bibliography of sources of attested examples \def\thesourcebibliography#1{% \section*{Sources of Attested Examples} \list{}{\setlength{\labelwidth}{0pt} \setlength{\leftmargin}{\parindent} \setlength{\itemsep}{0.11ex plus 0.11ex} \setlength{\parsep}{0ex} \setlength{\itemindent}{-\parindent}} \def\newblock{\hskip .11em plus .11em minus -.07em} \sloppy\clubpenalty4000\widowpenalty4000 \sfcode`\.=1000\relax} \let\endthesourcebibliography=\endlist \def\@lbibitem[#1]#2{\item[]\if@filesw { \def\protect##1{\string ##1\space}\immediate \write\@auxout{\string\bibcite{#2}{#1}}\fi\ignorespaces}} \def\@bibitem#1{\item\if@filesw \immediate\write\@auxout {\string\bibcite{#1}{\the\c@enumi}}\fi\ignorespaces} % ---------------------------------------------------------------------- % Section headings with less space \def\section{% \@startsection{section}{1}{\z@}% {-2.0ex plus -0.5ex minus -0.3ex}% {0.8ex plus 0.3ex minus 0.2ex}% {\large\bf\raggedright}} \def\subsection{% \@startsection{subsection}{2}{\z@}% {-1.4ex plus -0.4ex minus -0.2ex}% {0.6ex plus 0.2ex minus 0.1ex}% {\normalsize\bf\raggedright}} \def\subsubsection{% \@startsection{subsubsection}{3}{\z@}% {-0.8ex plus -0.3ex minus -0.1ex}% {0.4ex plus 0.1ex minus 0.1ex}% {\normalsize\bf\raggedright}} \def\paragraph{% \@startsection{paragraph}{4}{\z@}% {-0.8ex plus -0.3ex minus -0.1ex}% {-1em}% {\normalsize\bf}} \def\subparagraph{% \@startsection{subparagraph}{5}{\parindent}% {0.4ex plus 0.3ex minus 0.1ex}% {-1em}% {\normalsize\bf}} % ---------------------------------------------------------------------- % Footnotes %\footnotesep 6.65pt % %\skip\footins 9pt plus 4pt minus 2pt %\def\footnoterule{\kern-3pt \hrule width 5pc \kern 2.6pt } %\setcounter{footnote}{0} % ---------------------------------------------------------------------- % Lists and paragraphs \setlength\parindent{1em} \leftmargin 2em \leftmargini\leftmargin \leftmarginii 2em \leftmarginiii 1.5em \leftmarginiv 1.0em \leftmarginv .5em \leftmarginvi .5em \labelwidth\leftmargini\advance\labelwidth-\labelsep \labelsep 5pt % ---------------------------------------------------------------------- % Floats (figures, tables etc.) % % Allow a larger proportion of the column/page to be taken up with % floats than the standard classes. Also discourage the creation of % columns/pages containing only floats. % Maximum fraction of the page that can be occupied by floats: % \renewcommand\topfraction{.9} \renewcommand\bottomfraction{.5} \renewcommand\dbltopfraction{.9} % 2-column floats % Minimum fraction of page that can be occupied by text: % \renewcommand\textfraction{.1} % Maximum fraction of a page that can be occupied by floats before a % separate float page is produced: % \renewcommand\floatpagefraction{0.9} \renewcommand\dblfloatpagefraction{.9} % 2-column floats % ---------------------------------------------------------------------- % % Since we're using two columns, lines are short and we can get away % with less vertical space between lines, within lists and around % various kinds of display. % % Normally, these parameters are set in the size option to the class % file (standard definitions are in classes.dtx). Here we want to % accommodate 10pt, 11pt and 12pt, so we wrap the definitions in % \ifcase. % % \normalsize % \ifcase\@ptsize% \renewcommand{\normalsize}{% 10pt \@setsize\normalsize{11.3pt}\xpt\@xpt% \abovedisplayskip 10\p@\@plus2\p@\@minus5\p@% \abovedisplayshortskip\z@\@plus3\p@% \belowdisplayshortskip 4\p@\@plus3\p@\@minus3\p@% \belowdisplayskip\abovedisplayskip% \let\@listi\@listI}% \or% \renewcommand{\normalsize}{% 11pt \@setsize\normalsize{12.6pt}\xipt\@xipt% \abovedisplayskip11\p@\@plus2\p@\@minus4\p@% \abovedisplayshortskip\z@\@plus3\p@% \belowdisplayshortskip5\p@\@plus3\p@\@minus2\p@% \belowdisplayskip\abovedisplayskip% \let\@listi\@listI}% \or% \renewcommand{\normalsize}{% 12pt \@setsize\normalsize{13pt}\xiipt\@xiipt% \abovedisplayskip 11\p@ \@plus3\p@ \@minus5\p@% \abovedisplayshortskip \z@ \@plus3\p@% \belowdisplayshortskip 5\p@ \@plus3\p@ \@minus2\p@% \belowdisplayskip\abovedisplayskip% \let\@listi\@listI}% \fi % \small % \ifcase\@ptsize% \renewcommand{\small}{% 10pt \@setsize\small{10.5pt}\ixpt\@ixpt% \abovedisplayskip 8\p@ \@plus3\p@ \@minus3\p@% \abovedisplayshortskip \z@ \@plus2\p@% \belowdisplayshortskip 3\p@ \@plus2\p@ \@minus2\p@% \belowdisplayskip\abovedisplayskip% \def\@listi{\leftmargin\leftmargini% \topsep 3.5\p@ \@plus1.5\p@ \@minus1.5\p@% \parsep 1.5\p@ \@plus\p@ \@minus\p@% \itemsep \parsep}}% \or% \renewcommand{\small}{% 11pt \@setsize\small{11.3pt}\xpt\@xpt% \abovedisplayskip 9\p@ \@plus2\p@ \@minus4\p@% \abovedisplayshortskip \z@ \@plus3\p@% \belowdisplayshortskip 5\p@ \@plus2.5\p@ \@minus2.5\p@% \belowdisplayskip\abovedisplayskip% \def\@listi{\leftmargin\leftmargini% \topsep 5\p@ \@plus2\p@ \@minus2\p@% \parsep 2\p@ \@plus2\p@ \@minus\p@% \itemsep \parsep}}% \or% \renewcommand{\small}{% 12pt \@setsize\small{12pt}\xipt\@xipt% \abovedisplayskip 9\p@ \@plus3\p@ \@minus4\p@% \abovedisplayshortskip \z@ \@plus3\p@% \belowdisplayshortskip 5\p@ \@plus2.5\p@ \@minus2\p@% \belowdisplayskip\abovedisplayskip% \def\@listi{\leftmargin\leftmargini% \topsep 5.5\p@ \@plus2.5\p@ \@minus2.5\p@% \parsep 4\p@ \@plus1.5\p@ \@minus\p@% \itemsep \parsep}}% \fi % \footnotesize % \ifcase\@ptsize \renewcommand{\footnotesize}{% 10pt \@setsize\footnotesize{9.3pt}\viiipt\@viiipt% \abovedisplayskip 5\p@ \@plus2\p@ \@minus3\p@% \abovedisplayshortskip \z@ \@plus\p@% \belowdisplayshortskip 2.5\p@\@plus\p@\@minus2\p@% \belowdisplayskip\abovedisplayskip% \def\@listi{\leftmargin\leftmargini% \topsep 2.5\p@ \@plus\p@ \@minus\p@% \parsep 1.5\p@ \@plus\p@ \@minus\p@% \itemsep \parsep}}% \or% \renewcommand{\footnotesize}{% 11pt \@setsize\footnotesize{10.3pt}\ixpt\@ixpt% \abovedisplayskip 7\p@ \@plus2\p@ \@minus4\p@% \abovedisplayshortskip \z@ \@plus\p@% \belowdisplayshortskip 3\p@ \@plus2\p@ \@minus2\p@% \belowdisplayskip\abovedisplayskip% \def\@listi{\leftmargin\leftmargini% \topsep 3\p@ \@plus2\p@ \@minus2\p@% \parsep 2\p@ \@plus\p@ \@minus\p@% \itemsep \parsep}}% \or% \renewcommand{\footnotesize}{% 12pt \@setsize\footnotesize{11pt}\xpt\@xpt% \abovedisplayskip 9\p@ \@plus2\p@ \@minus4\p@% \abovedisplayshortskip \z@ \@plus3\p@% \belowdisplayshortskip 5\p@ \@plus3\p@ \@minus3\p@% \belowdisplayskip\abovedisplayskip% \def\@listi{\leftmargin\leftmargini% \topsep 4.5\p@ \@plus2\p@ \@minus2\p@% \parsep 3\p@ \@plus\p@ \@minus\p@% \itemsep \parsep}}% \fi % \large % \ifcase\@ptsize% \renewcommand{\large}{\@setsize\large{13pt}\xiipt\@xiipt}% 10pt \or% \renewcommand{\large}{\@setsize\large{13pt}\xiipt\@xiipt}% 11pt \or% \renewcommand{\large}{\@setsize\large{16pt}\xivpt\@xivpt}% 12pt \fi % \Large % \ifcase\@ptsize% \renewcommand{\Large}{\@setsize\Large{16pt}\xivpt\@xivpt}% 10pt \or% \renewcommand{\Large}{\@setsize\Large{16pt}\xivpt\@xivpt}% 11pt \or% \renewcommand{\Large}{\@setsize\Large{16pt}\xivpt\@xivpt}% 12pt \fi % Leave \scriptsize, \tiny, \huge, \Huge unchanged? % % Float separations, single and double-column % \ifcase\@ptsize% \setlength\floatsep{10\p@ \@plus 2\p@ \@minus 2\p@}% 10pt \setlength\textfloatsep{16\p@ \@plus 2\p@ \@minus 4\p@}% \setlength\intextsep{10\p@ \@plus 2\p@ \@minus 2\p@}% \setlength\dblfloatsep{10\p@ \@plus 2\p@ \@minus 2\p@}% \setlength\dbltextfloatsep{16\p@ \@plus 2\p@ \@minus 4\p@}% \or% \setlength\floatsep{10\p@ \@plus 2\p@ \@minus 2\p@}% 11pt \setlength\textfloatsep{16\p@ \@plus 2\p@ \@minus 4\p@}% \setlength\intextsep{10\p@ \@plus 2\p@ \@minus 2\p@}% \setlength\dblfloatsep{10\p@ \@plus 2\p@ \@minus 2\p@}% \setlength\dbltextfloatsep{16\p@ \@plus 2\p@ \@minus 4\p@}% \or% \setlength\floatsep{12\p@ \@plus 3\p@ \@minus 3\p@}% 12pt \setlength\textfloatsep{18\p@ \@plus 2\p@ \@minus 4\p@}% \setlength\intextsep{12\p@ \@plus 3\p@ \@minus 3\p@}% \setlength\dblfloatsep{12\p@ \@plus 2\p@ \@minus 4\p@}% \setlength\dbltextfloatsep{18\p@ \@plus 2\p@ \@minus 4\p@}% \fi % % Top-level list in \normalsize text % \ifcase\@ptsize% \def\@listi{\leftmargin\leftmargini% 10pt \topsep 6\p@ \@plus2\p@ \@minus2\p@% \parsep 2\p@ \@plus0.5\p@ \@minus\p@% \itemsep 2.5\p@ \@plus\p@ \@minus0.5\p@}% \or% \def\@listi{\leftmargin\leftmargini% 11pt \topsep 8\p@ \@plus2\p@ \@minus2\p@% \parsep 3\p@ \@plus1.5\p@ \@minus\p@% \itemsep 3\p@ \@plus1.5\p@ \@minus\p@}% \or% \def\@listi{\leftmargin\leftmargini% 12pt \topsep 9\p@ \@plus3\p@ \@minus4\p@% \parsep 4\p@ \@plus2\p@ \@minus\p@% \itemsep 4\p@ \@plus2\p@ \@minus\p@}% \fi \let\@listI\@listi % % Embedded lists unchanged. % % ---------------------------------------------------------------------- % End of colacl.sty % ---------------------------------------------------------------------- Carla-2.4.2/data/presentation/lac2018/lac2018.tex000066400000000000000000000064071420416754300210500ustar00rootroot00000000000000\documentclass[11pt,a4paper]{article} \usepackage{lac2018} \sloppy \newenvironment{contentsmall}{\small} \title{Carla Plugin Host - Feature overview and workflows, c-base Berlin} %see lac2018.sty for how to format multiple authors! \author {Filipe Coelho \\ falkTX, Linux Audio Developer \\ Berlin, Germany, \\ falktx@falktx.com } \begin{document} \maketitle \begin{abstract} \begin{contentsmall} Carla is a fully-featured audio plugin host with support for many plugin formats, featuring automation of plugin parameters via MIDI CC, remote control over OSC, among others. This workshop plans to give a quick overview of Carla and go through some workflows together with the audience. \end{contentsmall} \end{abstract} \keywords{ \begin{contentsmall} Plugin, Host, Modular, MIDI, OSC, Rack, Patchbay \end{contentsmall} } \section{Introduction} The first part of the workshop is a quick personal introduction, followed by a small musical demo. The demo features a MIDI sequencer to generate events, but the entire output sound comes from Carla. It serves as a demonstration of what we can with it. \section{Overview} After showing a demo song, the workshop continues by a quick overview of Carla's features and its graphical interface. This will allow for those that don't know Carla yet to easily catch up on its current status. \subsection{Features} First, we describe the main Carla features, to inform those that don't know the application yet. \subsection{Interface} Next, we go through the most important elements of Carla's UI and explain what they do, and what they mean. We also describe the possible settings, and do a local scan for plugins (so we can actually use them). \section{Workflows} This is the main content of the workshop. We will go through a few Carla setups to cover as many use-cases as possible. \subsection{The First Sound} To get the audience acquainted with Carla, we will first load a few plugins and have them make some sound. We introduce managing plugins and connections here. If possible, we demonstrate the use of a MIDI keyboard together with Carla. \subsection{Rack Mode} One of the main features of Carla is the Rack mode. We will describe how it works, and how we can use it in creative ways to produce sounds using multiple plugins. \subsection{Sequencing MIDI} In a modular host, we can create sound without user input by using MIDI generator plugins. We will demonstrate two of such plugins. and use them to drive a basic drum kit and synth. \subsection{Modular Side-chain} Modular setups make it easy to setup side-chains. We will quickly go through one of these, using what we learned so far. \subsection{Carla as a plugin} Carla works as a plugin, not just a standalone application. We will show some possible use-cases for this feature, showing Carla running inside Carla and in regular DAWs. \subsection{Remote OSC Control} OSC is a common protocol used to control audio applications remotely. Carla-Control can be used to control a remote Carla instance over the network. We will connect two Carla instances together, running on different systems. \section{Questions} We reserve a space at the end of the workshop for questions from the audience. \section{Conclusions} We conclude the workshop with a thank you to the audience. \end{document} Carla-2.4.2/data/presentation/lac2018/projects/000077500000000000000000000000001420416754300210765ustar00rootroot00000000000000Carla-2.4.2/data/presentation/lac2018/projects/1.carxp000066400000000000000000017462141420416754300223140ustar00rootroot00000000000000 false false true false 200 4000 DSSI EQ10Q Stereo /usr/lib/dssi/ls16.so Yes 1 0x0 0 Mute 01 0 1 Mute 02 0 2 Mute 03 0 3 Mute 04 0 4 Mute 05 0 5 Mute 06 0 6 Mute 07 0 7 Mute 08 0 8 Mute 09 0 9 Mute 10 0 10 Mute 11 0 11 Mute 12 0 12 Mute 13 0 13 Mute 14 1 14 Mute 15 1 15 Mute 16 1 16 Solo 01 1 17 Solo 02 1 18 Solo 03 1 19 Solo 04 1 20 Solo 05 1 21 Solo 06 1 22 Solo 07 1 23 Solo 08 1 24 Solo 09 1 25 Solo 10 1 26 Solo 11 1 27 Solo 12 1 28 Solo 13 1 29 Solo 14 1 30 Solo 15 1 31 Solo 16 1 32 Volume 01 1 1 0 33 Volume 02 3.16227769851685 34 Volume 03 3.16227769851685 35 Volume 04 3.16227769851685 36 Volume 05 3.16227769851685 37 Volume 06 3.16227769851685 38 Volume 07 3.16227769851685 39 Volume 08 3.16227769851685 40 Volume 09 3.16227769851685 41 Volume 10 3.16227769851685 42 Volume 11 2 43 Volume 12 0 44 Volume 13 0 45 Volume 14 0 46 Volume 15 0 47 Volume 16 0 48 Pan 01 0 49 Pan 02 0 50 Pan 03 0 51 Pan 04 0 52 Pan 05 0 53 Pan 06 0 54 Pan 07 0 55 Pan 08 0 56 Pan 09 0 57 Pan 10 0 58 Pan 11 0 59 Pan 12 0 60 Pan 13 0 61 Pan 14 0 62 Pan 15 0 63 Pan 16 0 http://kxstudio.sf.net/ns/carla/property CarlaSkinIsCompacted false VST2 Minihost Modular /home/falktx/.wineflstudio/drive_c/Program Files (x86)/VstPlugins/IL Minihost Modular.dll 1296583985 Yes 1 0x1e9 http://kxstudio.sf.net/ns/carla/property CarlaSkinIsCompacted false GBcfHxIRzasDAVJmvKuaGUlMR1JBUEgAABAAWGMAAAcQAAAABgAAAAIAR3JhcGgACgAEAAgABhAAAE1vZHVsZQAFAAAACGdyYXBoT2JqZWN0AAAQAAAABgAA AAIAVW50aXRsZWQgR3JhcGgABQAAAAAABQAAAAAABQAAAMhCBQAAAABCAgA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KDQptZXRh ZGF0YQ0KPG1ldGFkYXRhIGJwbT0iMTIwIiBzaHVmZmxlPSIwIiBtZXRyb25vbWVWb2x1bWU9IjAiLz4NCgADZWRpdG9yWAD/////A2VkaXRvclkA/////wFl ZGl0b3JPcGVuAAABc2xlZXBFbmFibGVkAAEIAAkQAAAAAQAAAAMAAAAAAAgAChAAAAABAAAAAwAAAAAACAAIEAAAAAUAAAADAAQAAAAIAAMQAAAABAAAAAgA ARAAAFBpbgADAAAACAAAEAAAAAYAAAACAEF1ZGlvIEluAAUAAAAgQQUAAAAgQQUAAADIQQUAAAAgQQIAAAMAAAAAAAMAAAAAAAMAAgAAAAEAAQMAAAAAAAgA AhAAAAADAAAACAABEAAAUGluAAMAAAAIAAAQAAAABgAAAAIATUlESSBJbgAFAAAAIEEFAAAA8EEFAAAAyEEFAAAAIEECAAADAAAAAAADAAEAAAABAAEDAAAA AAAIAAMQAAAABAAAAAgAARAAAFBpbgADAAAACAAAEAAAAAYAAAACAEF1ZGlvIE91dAAFAAAASEQFAAAAIEEFAAAAyEEFAAAAIEECAAADAAEAAAADAAAAAAAD AAIAAAABAAEDAAAAAAAIAAIQAAAAAwAAAAgAARAAAFBpbgADAAAACAAAEAAAAAYAAAACAE1JREkgT3V0AAUAAABIRAUAAADwQQUAAADIQQUAAAAgQQIAAAMA AQAAAAMAAQAAAAEAAQMAAAAAAFYDAABYAgAA VST2 DirectWave VSTi /home/falktx/.wineflstudio/drive_c/Program Files (x86)/VstPlugins/DirectWave/DirectWave VSTi.dll 1095976023 Yes 1 0x1e8 http://kxstudio.sf.net/ns/carla/property CarlaSkinIsCompacted false JQAAAAYAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAgAABQAAAAAAAAAAAAAAAAUAAAB0AgAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAJpNJPwAAAD8AAIA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAdAIAAAAAAAABAAAAPAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACaTST8AAAA/AACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAHQCAAAAAAAAAgAAADwAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmk0k/AAAAPwAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAB0AgAAAAAA AAMAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAADIAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJpNJPwAAAD8AAIA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF AAAAdAIAAAAAAAAEAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAA AAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACaTST8AAAA/AACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAABQAAAHQCAAAAAAAABQAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAUAAAAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmk0k/AAAAPwAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAUAAAB0AgAAAAAAAAYAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAGAAAAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJpNJPwAAAD8AAIA/AAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAdAIAAAAAAAAHAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACaTST8AAAA/AACAPwAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAHQCAAAAAAAACAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmk0k/AAAA PwAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAB0AgAAAAAAAAkAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAJpNJPwAAAD8AAIA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAdAIAAAAAAAAKAAAAPAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACaTST8AAAA/AACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAHQCAAAAAAAACwAAADwAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmk0k/AAAAPwAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAB0AgAAAAAA AAwAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAADIAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJpNJPwAAAD8AAIA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF AAAAdAIAAAAAAAANAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAAAAAAA AAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACaTST8AAAA/AACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAABQAAAHQCAAAAAAAADgAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AA4AAAAAAAAAAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmk0k/AAAAPwAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAUAAAB0AgAAAAAAAA8AAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAPAAAAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJpNJPwAAAD8AAIA/AAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwsAAAAAAABkAAAAHgAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAAAwAA AAAAAAAtLS1nAAAAAAAAAAAAAABoAAAACgAAAAAAAAAAAAAAAAAAAAAAaQAAABIAAAAAAAAAAAAAAEA/AABAPwAAAD8AAEA/agAAABEAAAAAAAAAAAAAgD4A AAA/AABAPwAAgD5rAAAAEQAAAAAAAAAAAACAPgAAAD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbAAAABQAAAAAAAAAAAAAAM3M zD0AAIA/AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbgAAAA0AAAAAAAAA AAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAEAAAAAAACAPwAAAABuAAAADQAAAAAAAAACAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAAQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAcAAAAA AACAPwAAAABuAAAADQAAAAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAoAAAAAAACAPwAAAABuAAAADQAA AAAAAAALAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAOAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABAAAAAAAACAPwAAAABuAAAADQAAAAAAAAARAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA EgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAABYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABkAAAAA AACAPwAAAABuAAAADQAAAAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABwAAAAAAACAPwAAAABuAAAADQAA AAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAgAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA JAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAmAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAACgAAAAAAACAPwAAAABuAAAADQAAAAAAAAApAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACsAAAAA AACAPwAAAABuAAAADQAAAAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC4AAAAAAACAPwAAAABuAAAADQAA AAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAyAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADQAAAAAAACAPwAAAABuAAAADQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA NgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADcAAAAAAACAPwAAAABuAAAADQAAAAAAAAA4AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAADoAAAAAAACAPwAAAABuAAAADQAAAAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD0AAAAA AACAPwAAAABuAAAADQAAAAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEAAAAAAAACAPwAAAABuAAAADQAA AAAAAABBAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEMAAAAAAACAPwAAAABuAAAADQAAAAAAAABEAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEYAAAAAAACAPwAAAABuAAAADQAAAAAAAABHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA SAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEkAAAAAAACAPwAAAABuAAAADQAAAAAAAABKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAEwAAAAAAACAPwAAAABuAAAADQAAAAAAAABNAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE8AAAAA AACAPwAAAABuAAAADQAAAAAAAABQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFIAAAAAAACAPwAAAABuAAAADQAA AAAAAABTAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFUAAAAAAACAPwAAAABuAAAADQAAAAAAAABWAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFgAAAAAAACAPwAAAABuAAAADQAAAAAAAABZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA WgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFsAAAAAAACAPwAAAABuAAAADQAAAAAAAABcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAF4AAAAAAACAPwAAAABuAAAADQAAAAAAAABfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGEAAAAA AACAPwAAAABuAAAADQAAAAAAAABiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/AAAAAAIAAAAAAAAAAAAAAAEAAAADCwAAAAAAAGQAAAAeAAAA AAAAAAEAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAGYAAAADAAAAAAAAAC0tLWcAAAAAAAAAAAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAAAABpAAAAEgAA AAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/AACAPmsAAAARAAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAAbAAAABQAAAAA AAAAAAAAAM3MzD0AAIA/AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAA AAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABuAAAADQAAAAAAAAAAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AAIAAAAAAACAPwAAAABuAAAADQAAAAAAAAADAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAUAAAAAAACAPwAAAABu AAAADQAAAAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAJAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAADQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAABEAAAAAAACAPwAAAABuAAAADQAAAAAAAAASAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ABQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABcAAAAAAACAPwAAAABu AAAADQAAAAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAbAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAHwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAACMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAkAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ACYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACkAAAAAAACAPwAAAABu AAAADQAAAAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAtAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAMQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAzAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAADUAAAAAAACAPwAAAABuAAAADQAAAAAAAAA2AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ADgAAAAAAACAPwAAAABuAAAADQAAAAAAAAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADsAAAAAAACAPwAAAABu AAAADQAAAAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD4AAAAAAACAPwAAAABuAAAADQAAAAAAAAA/AAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEEAAAAAAACAPwAAAABuAAAADQAAAAAAAABCAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAQwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEQAAAAAAACAPwAAAABuAAAADQAAAAAAAABFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAEcAAAAAAACAPwAAAABuAAAADQAAAAAAAABIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AEoAAAAAAACAPwAAAABuAAAADQAAAAAAAABLAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE0AAAAAAACAPwAAAABu AAAADQAAAAAAAABOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFAAAAAAAACAPwAAAABuAAAADQAAAAAAAABRAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFMAAAAAAACAPwAAAABuAAAADQAAAAAAAABUAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAVQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFYAAAAAAACAPwAAAABuAAAADQAAAAAAAABXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAFkAAAAAAACAPwAAAABuAAAADQAAAAAAAABaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AFwAAAAAAACAPwAAAABuAAAADQAAAAAAAABdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF8AAAAAAACAPwAAAABu AAAADQAAAAAAAABgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGIAAAAAAACAPwAAAABuAAAADQAAAAAAAABjAAAA AAAAgD8AAAAAAgAAAAAAAAAAAAAAAQAAAAMLAAAAAAAAZAAAAB4AAAAAAAAAAgAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAMAAAAAAAAALS0t ZwAAAAAAAAAAAAAAaAAAAAoAAAAAAAAAAAAAAAAAAAAAAGkAAAASAAAAAAAAAAAAAABAPwAAQD8AAAA/AABAP2oAAAARAAAAAAAAAAAAAIA+AAAAPwAAQD8A AIA+awAAABEAAAAAAAAAAAAAgD4AAAA/AACAPgAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAA AAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG4AAAANAAAAAAAAAAAAAAAAAACA PwAAAABuAAAADQAAAAAAAAABAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAMAAAAAAACAPwAAAABuAAAADQAAAAAA AAAEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAHAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAACAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAAwAAAAAAACAPwAAAABuAAAADQAAAAAAAAANAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAA8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABIAAAAAAACA PwAAAABuAAAADQAAAAAAAAATAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABUAAAAAAACAPwAAAABuAAAADQAAAAAA AAAWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAZAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAGgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAB4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAACEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACQAAAAAAACA PwAAAABuAAAADQAAAAAAAAAlAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACcAAAAAAACAPwAAAABuAAAADQAAAAAA AAAoAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACoAAAAAAACAPwAAAABuAAAADQAAAAAAAAArAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAALAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAuAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAADAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAxAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAADMAAAAAAACAPwAAAABuAAAADQAAAAAAAAA0AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADYAAAAAAACA PwAAAABuAAAADQAAAAAAAAA3AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADkAAAAAAACAPwAAAABuAAAADQAAAAAA AAA6AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADwAAAAAAACAPwAAAABuAAAADQAAAAAAAAA9AAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAPgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD8AAAAAAACAPwAAAABuAAAADQAAAAAAAABAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAEIAAAAAAACAPwAAAABuAAAADQAAAAAAAABDAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAEUAAAAAAACAPwAAAABuAAAADQAAAAAAAABGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEgAAAAAAACA PwAAAABuAAAADQAAAAAAAABJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEsAAAAAAACAPwAAAABuAAAADQAAAAAA AABMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE4AAAAAAACAPwAAAABuAAAADQAAAAAAAABPAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAUAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFEAAAAAAACAPwAAAABuAAAADQAAAAAAAABSAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAFQAAAAAAACAPwAAAABuAAAADQAAAAAAAABVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAFcAAAAAAACAPwAAAABuAAAADQAAAAAAAABYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFoAAAAAAACA PwAAAABuAAAADQAAAAAAAABbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF0AAAAAAACAPwAAAABuAAAADQAAAAAA AABeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGAAAAAAAACAPwAAAABuAAAADQAAAAAAAABhAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAYgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGMAAAAAAACAPwAAAAACAAAAAAAAAAAAAAABAAAAAwsAAAAAAABkAAAAHgAAAAAAAAADAAAA AAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAAAwAAAAAAAAAtLS1nAAAAAAAAAAAAAABoAAAACgAAAAAAAAAAAAAAAAAAAAAAaQAAABIAAAAAAAAAAAAA AEA/AABAPwAAAD8AAEA/agAAABEAAAAAAAAAAAAAgD4AAAA/AABAPwAAgD5rAAAAEQAAAAAAAAAAAACAPgAAAD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAAAADN zMw9AACAPwAAAAAAAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAA AAAAAABtAAAABAAAAAAAAAAAAAAAbgAAAA0AAAAAAAAAAAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAEAAAAAAACAPwAAAABuAAAADQAAAAAAAAACAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAABgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAAoAAAAAAACAPwAAAABuAAAADQAAAAAAAAALAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA0A AAAAAACAPwAAAABuAAAADQAAAAAAAAAOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABAAAAAAAACAPwAAAABuAAAA DQAAAAAAAAARAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAUAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAGAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAABwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB8A AAAAAACAPwAAAABuAAAADQAAAAAAAAAgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACIAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAmAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACgAAAAAAACAPwAAAABuAAAADQAAAAAAAAApAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAKgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAC4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADEA AAAAAACAPwAAAABuAAAADQAAAAAAAAAyAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADQAAAAAAACAPwAAAABuAAAA DQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADcAAAAAAACAPwAAAABuAAAADQAAAAAAAAA4AAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADoAAAAAAACAPwAAAABuAAAADQAAAAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAPAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD0AAAAAAACAPwAAAABuAAAADQAAAAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAEAAAAAAAACAPwAAAABuAAAADQAAAAAAAABBAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEMA AAAAAACAPwAAAABuAAAADQAAAAAAAABEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEYAAAAAAACAPwAAAABuAAAA DQAAAAAAAABHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEkAAAAAAACAPwAAAABuAAAADQAAAAAAAABKAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAASwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEwAAAAAAACAPwAAAABuAAAADQAAAAAAAABNAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAATgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE8AAAAAAACAPwAAAABuAAAADQAAAAAAAABQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAFIAAAAAAACAPwAAAABuAAAADQAAAAAAAABTAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFUA AAAAAACAPwAAAABuAAAADQAAAAAAAABWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFgAAAAAAACAPwAAAABuAAAA DQAAAAAAAABZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFsAAAAAAACAPwAAAABuAAAADQAAAAAAAABcAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF4AAAAAAACAPwAAAABuAAAADQAAAAAAAABfAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAYAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGEAAAAAAACAPwAAAABuAAAADQAAAAAAAABiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/AAAA AAIAAAAAAAAAAAAAAAEAAAADCwAAAAAAAGQAAAAeAAAAAAAAAAQAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAGYAAAADAAAAAAAAAC0tLWcAAAAAAAAA AAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAAAABpAAAAEgAAAAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/AACAPmsAAAAR AAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAG0A AAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABuAAAADQAAAAAAAAAAAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAIAAAAAAACAPwAAAABuAAAADQAAAAAAAAADAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAAUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAAgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAsAAAAAAACAPwAA AABuAAAADQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAP AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABEAAAAAAACAPwAAAABuAAAADQAAAAAAAAASAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAABcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAABoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB0AAAAAAACAPwAA AABuAAAADQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAh AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAkAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAACkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAACwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAtAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC8AAAAAAACAPwAA AABuAAAADQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAz AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADUAAAAAAACAPwAAAABuAAAADQAAAAAAAAA2AAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAANwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADgAAAAAAACAPwAAAABuAAAADQAAAAAAAAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAADsAAAAAAACAPwAAAABuAAAADQAAAAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAD4AAAAAAACAPwAAAABuAAAADQAAAAAAAAA/AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEEAAAAAAACAPwAA AABuAAAADQAAAAAAAABCAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEQAAAAAAACAPwAAAABuAAAADQAAAAAAAABF AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEcAAAAAAACAPwAAAABuAAAADQAAAAAAAABIAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAASQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEoAAAAAAACAPwAAAABuAAAADQAAAAAAAABLAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAE0AAAAAAACAPwAAAABuAAAADQAAAAAAAABOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAFAAAAAAAACAPwAAAABuAAAADQAAAAAAAABRAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFMAAAAAAACAPwAA AABuAAAADQAAAAAAAABUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFYAAAAAAACAPwAAAABuAAAADQAAAAAAAABX AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFkAAAAAAACAPwAAAABuAAAADQAAAAAAAABaAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFwAAAAAAACAPwAAAABuAAAADQAAAAAAAABdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAF8AAAAAAACAPwAAAABuAAAADQAAAAAAAABgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAGIAAAAAAACAPwAAAABuAAAADQAAAAAAAABjAAAAAAAAgD8AAAAAAgAAAAAAAAAAAAAAAQAAAAMLAAAAAAAAZAAAAB4AAAAAAAAABQAAAAAAAACAPwAA AAAAAAAAAAAAAAAAAAAAAAAAZgAAAAMAAAAAAAAALS0tZwAAAAAAAAAAAAAAaAAAAAoAAAAAAAAAAAAAAAAAAAAAAGkAAAASAAAAAAAAAAAAAABAPwAAQD8A AAA/AABAP2oAAAARAAAAAAAAAAAAAIA+AAAAPwAAQD8AAIA+awAAABEAAAAAAAAAAAAAgD4AAAA/AACAPgAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8A AAAAAAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAA AAQAAAAAAAAAAAAAAG4AAAANAAAAAAAAAAAAAAAAAACAPwAAAABuAAAADQAAAAAAAAABAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAAMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAYAAAAA AACAPwAAAABuAAAADQAAAAAAAAAHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAkAAAAAAACAPwAAAABuAAAADQAA AAAAAAAKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAwAAAAAAACAPwAAAABuAAAADQAAAAAAAAANAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAADgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA EQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABIAAAAAAACAPwAAAABuAAAADQAAAAAAAAATAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAABUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABgAAAAA AACAPwAAAABuAAAADQAAAAAAAAAZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABsAAAAAAACAPwAAAABuAAAADQAA AAAAAAAcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAfAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAIAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA IwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAlAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAACcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAoAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACoAAAAA AACAPwAAAABuAAAADQAAAAAAAAArAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC0AAAAAAACAPwAAAABuAAAADQAA AAAAAAAuAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAxAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAMgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADMAAAAAAACAPwAAAABuAAAADQAAAAAAAAA0AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA NQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADYAAAAAAACAPwAAAABuAAAADQAAAAAAAAA3AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAADkAAAAAAACAPwAAAABuAAAADQAAAAAAAAA6AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADwAAAAA AACAPwAAAABuAAAADQAAAAAAAAA9AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD8AAAAAAACAPwAAAABuAAAADQAA AAAAAABAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEIAAAAAAACAPwAAAABuAAAADQAAAAAAAABDAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAARAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEUAAAAAAACAPwAAAABuAAAADQAAAAAAAABGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA RwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEgAAAAAAACAPwAAAABuAAAADQAAAAAAAABJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAEsAAAAAAACAPwAAAABuAAAADQAAAAAAAABMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE4AAAAA AACAPwAAAABuAAAADQAAAAAAAABPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFEAAAAAAACAPwAAAABuAAAADQAA AAAAAABSAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFQAAAAAAACAPwAAAABuAAAADQAAAAAAAABVAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAVgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFcAAAAAAACAPwAAAABuAAAADQAAAAAAAABYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA WQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFoAAAAAAACAPwAAAABuAAAADQAAAAAAAABbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAF0AAAAAAACAPwAAAABuAAAADQAAAAAAAABeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGAAAAAA AACAPwAAAABuAAAADQAAAAAAAABhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGMAAAAAAACAPwAAAAACAAAAAAAA AAAAAAABAAAAAwsAAAAAAABkAAAAHgAAAAAAAAAGAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAAAwAAAAAAAAAtLS1nAAAAAAAAAAAAAABoAAAA CgAAAAAAAAAAAAAAAAAAAAAAaQAAABIAAAAAAAAAAAAAAEA/AABAPwAAAD8AAEA/agAAABEAAAAAAAAAAAAAgD4AAAA/AABAPwAAgD5rAAAAEQAAAAAAAAAA AACAPgAAAD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABtAAAABAAAAAAA AAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbgAAAA0AAAAAAAAAAAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AAEAAAAAAACAPwAAAABuAAAADQAAAAAAAAACAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAQAAAAAAACAPwAAAABu AAAADQAAAAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAIAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAoAAAAAAACAPwAAAABuAAAADQAAAAAAAAALAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAADAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAABAAAAAAAACAPwAAAABuAAAADQAAAAAAAAARAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ABMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABYAAAAAAACAPwAAAABu AAAADQAAAAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAaAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAHgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAACIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ACUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAmAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACgAAAAAAACAPwAAAABu AAAADQAAAAAAAAApAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAsAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAMAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAyAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAADQAAAAAAACAPwAAAABuAAAADQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ADcAAAAAAACAPwAAAABuAAAADQAAAAAAAAA4AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADoAAAAAAACAPwAAAABu AAAADQAAAAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD0AAAAAAACAPwAAAABuAAAADQAAAAAAAAA+AAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEAAAAAAAACAPwAAAABuAAAADQAAAAAAAABBAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAQgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEMAAAAAAACAPwAAAABuAAAADQAAAAAAAABEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAEYAAAAAAACAPwAAAABuAAAADQAAAAAAAABHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AEkAAAAAAACAPwAAAABuAAAADQAAAAAAAABKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEwAAAAAAACAPwAAAABu AAAADQAAAAAAAABNAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE8AAAAAAACAPwAAAABuAAAADQAAAAAAAABQAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFIAAAAAAACAPwAAAABuAAAADQAAAAAAAABTAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAVAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFUAAAAAAACAPwAAAABuAAAADQAAAAAAAABWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAFgAAAAAAACAPwAAAABuAAAADQAAAAAAAABZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AFsAAAAAAACAPwAAAABuAAAADQAAAAAAAABcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF4AAAAAAACAPwAAAABu AAAADQAAAAAAAABfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGEAAAAAAACAPwAAAABuAAAADQAAAAAAAABiAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/AAAAAAIAAAAAAAAAAAAAAAEAAAADCwAAAAAAAGQAAAAeAAAAAAAAAAcAAAAAAAAAgD8AAAAAAAAAAAAA AAAAAAAAAAAAAGYAAAADAAAAAAAAAC0tLWcAAAAAAAAAAAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAAAABpAAAAEgAAAAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9q AAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/AACAPmsAAAARAAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABs AAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAA AAAAAABuAAAADQAAAAAAAAAAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAIAAAAAAACAPwAAAABuAAAADQAAAAAA AAADAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAGAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAABwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAAsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAA4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABEAAAAAAACA PwAAAABuAAAADQAAAAAAAAASAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABQAAAAAAACAPwAAAABuAAAADQAAAAAA AAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAYAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAB0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAACAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACMAAAAAAACA PwAAAABuAAAADQAAAAAAAAAkAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACYAAAAAAACAPwAAAABuAAAADQAAAAAA AAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAqAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAtAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAC8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAADIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAzAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADUAAAAAAACA PwAAAABuAAAADQAAAAAAAAA2AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADgAAAAAAACAPwAAAABuAAAADQAAAAAA AAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADsAAAAAAACAPwAAAABuAAAADQAAAAAAAAA8AAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD4AAAAAAACAPwAAAABuAAAADQAAAAAAAAA/AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAEEAAAAAAACAPwAAAABuAAAADQAAAAAAAABCAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAEQAAAAAAACAPwAAAABuAAAADQAAAAAAAABFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEcAAAAAAACA PwAAAABuAAAADQAAAAAAAABIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEoAAAAAAACAPwAAAABuAAAADQAAAAAA AABLAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE0AAAAAAACAPwAAAABuAAAADQAAAAAAAABOAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAATwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFAAAAAAAACAPwAAAABuAAAADQAAAAAAAABRAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAFMAAAAAAACAPwAAAABuAAAADQAAAAAAAABUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAFYAAAAAAACAPwAAAABuAAAADQAAAAAAAABXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFkAAAAAAACA PwAAAABuAAAADQAAAAAAAABaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFwAAAAAAACAPwAAAABuAAAADQAAAAAA AABdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF8AAAAAAACAPwAAAABuAAAADQAAAAAAAABgAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGIAAAAAAACAPwAAAABuAAAADQAAAAAAAABjAAAAAAAAgD8AAAAAAgAAAAAAAAAAAAAAAQAA AAMLAAAAAAAAZAAAAB4AAAAAAAAACAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAMAAAAAAAAALS0tZwAAAAAAAAAAAAAAaAAAAAoAAAAAAAAA AAAAAAAAAAAAAGkAAAASAAAAAAAAAAAAAABAPwAAQD8AAAA/AABAP2oAAAARAAAAAAAAAAAAAIA+AAAAPwAAQD8AAIA+awAAABEAAAAAAAAAAAAAgD4AAAA/ AACAPgAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0A AAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG4AAAANAAAAAAAAAAAAAAAAAACAPwAAAABuAAAADQAAAAAAAAABAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAAgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAEAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAABQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAAkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAwA AAAAAACAPwAAAABuAAAADQAAAAAAAAANAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA8AAAAAAACAPwAAAABuAAAA DQAAAAAAAAAQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABIAAAAAAACAPwAAAABuAAAADQAAAAAAAAATAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAFAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAWAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAFwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAABsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB4A AAAAAACAPwAAAABuAAAADQAAAAAAAAAfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACEAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAlAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAJgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAoAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAKQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACoAAAAAAACAPwAAAABuAAAADQAAAAAAAAArAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAC0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAuAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADAA AAAAAACAPwAAAABuAAAADQAAAAAAAAAxAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADMAAAAAAACAPwAAAABuAAAA DQAAAAAAAAA0AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADYAAAAAAACAPwAAAABuAAAADQAAAAAAAAA3AAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAOAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADkAAAAAAACAPwAAAABuAAAADQAAAAAAAAA6AAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAOwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADwAAAAAAACAPwAAAABuAAAADQAAAAAAAAA9AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAD8AAAAAAACAPwAAAABuAAAADQAAAAAAAABAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEIA AAAAAACAPwAAAABuAAAADQAAAAAAAABDAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEUAAAAAAACAPwAAAABuAAAA DQAAAAAAAABGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEgAAAAAAACAPwAAAABuAAAADQAAAAAAAABJAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAASgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEsAAAAAAACAPwAAAABuAAAADQAAAAAAAABMAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAATQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE4AAAAAAACAPwAAAABuAAAADQAAAAAAAABPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAFEAAAAAAACAPwAAAABuAAAADQAAAAAAAABSAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFQA AAAAAACAPwAAAABuAAAADQAAAAAAAABVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFcAAAAAAACAPwAAAABuAAAA DQAAAAAAAABYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFoAAAAAAACAPwAAAABuAAAADQAAAAAAAABbAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAXAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF0AAAAAAACAPwAAAABuAAAADQAAAAAAAABeAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAXwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGAAAAAAAACAPwAAAABuAAAADQAAAAAAAABhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAGMAAAAAAACAPwAAAAACAAAAAAAAAAAAAAABAAAAAwsAAAAAAABkAAAAHgAAAAAAAAAJAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAA AABmAAAAAwAAAAAAAAAtLS1nAAAAAAAAAAAAAABoAAAACgAAAAAAAAAAAAAAAAAAAAAAaQAAABIAAAAAAAAAAAAAAEA/AABAPwAAAD8AAEA/agAAABEAAAAA AAAAAAAAgD4AAAA/AABAPwAAgD5rAAAAEQAAAAAAAAAAAACAPgAAAD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbAAAABQAAAAA AAAAAAAAAM3MzD0AAIA/AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbgAA AA0AAAAAAAAAAAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAEAAAAAAACAPwAAAABuAAAADQAAAAAAAAACAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAAQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAAcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAoAAAAAAACAPwAA AABuAAAADQAAAAAAAAALAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAO AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABAAAAAAAACAPwAAAABuAAAADQAAAAAAAAARAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAEgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAABYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAABkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABwAAAAAAACAPwAA AABuAAAADQAAAAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAg AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAJAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAmAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAA AIA/AAAAAG4AAAANAAAAAAAAACgAAAAAAACAPwAAAABuAAAADQAAAAAAAAApAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAACsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC4AAAAAAACAPwAA AABuAAAADQAAAAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAy AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADQAAAAAAACAPwAAAABuAAAADQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAANgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADcAAAAAAACAPwAAAABuAAAADQAAAAAAAAA4AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAADoAAAAAAACAPwAAAABuAAAADQAAAAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAD0AAAAAAACAPwAAAABuAAAADQAAAAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEAAAAAAAACAPwAA AABuAAAADQAAAAAAAABBAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEMAAAAAAACAPwAAAABuAAAADQAAAAAAAABE AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEYAAAAAAACAPwAAAABuAAAADQAAAAAAAABHAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAASAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEkAAAAAAACAPwAAAABuAAAADQAAAAAAAABKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASwAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAEwAAAAAAACAPwAAAABuAAAADQAAAAAAAABNAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAE8AAAAAAACAPwAAAABuAAAADQAAAAAAAABQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFIAAAAAAACAPwAA AABuAAAADQAAAAAAAABTAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFUAAAAAAACAPwAAAABuAAAADQAAAAAAAABW AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFgAAAAAAACAPwAAAABuAAAADQAAAAAAAABZAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAWgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFsAAAAAAACAPwAAAABuAAAADQAAAAAAAABcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAF4AAAAAAACAPwAAAABuAAAADQAAAAAAAABfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAGEAAAAAAACAPwAAAABuAAAADQAAAAAAAABiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/AAAAAAIAAAAAAAAAAAAAAAEAAAADCwAAAAAA AGQAAAAeAAAAAAAAAAoAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAGYAAAADAAAAAAAAAC0tLWcAAAAAAAAAAAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAA AABpAAAAEgAAAAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/AACAPmsAAAARAAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAA bAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAA AAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABuAAAADQAAAAAAAAAAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAAIAAAAAAACAPwAAAABuAAAADQAAAAAAAAADAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAUAAAAA AACAPwAAAABuAAAADQAAAAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAgAAAAAAACAPwAAAABuAAAADQAA AAAAAAAJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAMAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAADQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA EAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABEAAAAAAACAPwAAAABuAAAADQAAAAAAAAASAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAABQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABcAAAAA AACAPwAAAABuAAAADQAAAAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABoAAAAAAACAPwAAAABuAAAADQAA AAAAAAAbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAeAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAHwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA IgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAkAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAACYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACkAAAAA AACAPwAAAABuAAAADQAAAAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACwAAAAAAACAPwAAAABuAAAADQAA AAAAAAAtAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAwAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAMQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAzAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA NAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADUAAAAAAACAPwAAAABuAAAADQAAAAAAAAA2AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAADgAAAAAAACAPwAAAABuAAAADQAAAAAAAAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADsAAAAA AACAPwAAAABuAAAADQAAAAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD4AAAAAAACAPwAAAABuAAAADQAA AAAAAAA/AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEEAAAAAAACAPwAAAABuAAAADQAAAAAAAABCAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAQwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEQAAAAAAACAPwAAAABuAAAADQAAAAAAAABFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA RgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEcAAAAAAACAPwAAAABuAAAADQAAAAAAAABIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAEoAAAAAAACAPwAAAABuAAAADQAAAAAAAABLAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE0AAAAA AACAPwAAAABuAAAADQAAAAAAAABOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFAAAAAAAACAPwAAAABuAAAADQAA AAAAAABRAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFMAAAAAAACAPwAAAABuAAAADQAAAAAAAABUAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAVQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFYAAAAAAACAPwAAAABuAAAADQAAAAAAAABXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA WAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFkAAAAAAACAPwAAAABuAAAADQAAAAAAAABaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAFwAAAAAAACAPwAAAABuAAAADQAAAAAAAABdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF8AAAAA AACAPwAAAABuAAAADQAAAAAAAABgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGIAAAAAAACAPwAAAABuAAAADQAA AAAAAABjAAAAAAAAgD8AAAAAAgAAAAAAAAAAAAAAAQAAAAMLAAAAAAAAZAAAAB4AAAAAAAAACwAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAMA AAAAAAAALS0tZwAAAAAAAAAAAAAAaAAAAAoAAAAAAAAAAAAAAAAAAAAAAGkAAAASAAAAAAAAAAAAAABAPwAAQD8AAAA/AABAP2oAAAARAAAAAAAAAAAAAIA+ AAAAPwAAQD8AAIA+awAAABEAAAAAAAAAAAAAgD4AAAA/AACAPgAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAGwAAAAUAAAAAAAAAAAAAADN zMw9AACAPwAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG4AAAANAAAAAAAA AAAAAAAAAACAPwAAAABuAAAADQAAAAAAAAABAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAMAAAAAAACAPwAAAABu AAAADQAAAAAAAAAEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAHAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAACAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAKAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAACwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAwAAAAAAACAPwAAAABuAAAADQAAAAAAAAANAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAA8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ABIAAAAAAACAPwAAAABuAAAADQAAAAAAAAATAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABUAAAAAAACAPwAAAABu AAAADQAAAAAAAAAWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAZAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAGgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAcAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAHQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAACEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ACQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAlAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACcAAAAAAACAPwAAAABu AAAADQAAAAAAAAAoAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACoAAAAAAACAPwAAAABuAAAADQAAAAAAAAArAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAALAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAuAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAALwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAxAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAADMAAAAAAACAPwAAAABuAAAADQAAAAAAAAA0AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ADYAAAAAAACAPwAAAABuAAAADQAAAAAAAAA3AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADkAAAAAAACAPwAAAABu AAAADQAAAAAAAAA6AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADwAAAAAAACAPwAAAABuAAAADQAAAAAAAAA9AAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAPgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD8AAAAAAACAPwAAAABuAAAADQAAAAAAAABAAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAQQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEIAAAAAAACAPwAAAABuAAAADQAAAAAAAABDAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAEUAAAAAAACAPwAAAABuAAAADQAAAAAAAABGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AEgAAAAAAACAPwAAAABuAAAADQAAAAAAAABJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEsAAAAAAACAPwAAAABu AAAADQAAAAAAAABMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE4AAAAAAACAPwAAAABuAAAADQAAAAAAAABPAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAUAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFEAAAAAAACAPwAAAABuAAAADQAAAAAAAABSAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAUwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFQAAAAAAACAPwAAAABuAAAADQAAAAAAAABVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAFcAAAAAAACAPwAAAABuAAAADQAAAAAAAABYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AFoAAAAAAACAPwAAAABuAAAADQAAAAAAAABbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF0AAAAAAACAPwAAAABu AAAADQAAAAAAAABeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGAAAAAAAACAPwAAAABuAAAADQAAAAAAAABhAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAYgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGMAAAAAAACAPwAAAAACAAAAAAAAAAAAAAABAAAAAwsAAAAAAABkAAAAHgAA AAAAAAAMAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAAAwAAAAAAAAAtLS1nAAAAAAAAAAAAAABoAAAACgAAAAAAAAAAAAAAAAAAAAAAaQAAABIA AAAAAAAAAAAAAEA/AABAPwAAAD8AAEA/agAAABEAAAAAAAAAAAAAgD4AAAA/AABAPwAAgD5rAAAAEQAAAAAAAAAAAACAPgAAAD8AAIA+AAAAAGwAAAAUAAAA AAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0A AAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbgAAAA0AAAAAAAAAAAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAEAAAAAAACAPwAAAABuAAAADQAAAAAA AAACAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAFAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAABgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAAoAAAAAAACAPwAAAABuAAAADQAAAAAAAAALAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAA0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABAAAAAAAACA PwAAAABuAAAADQAAAAAAAAARAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABMAAAAAAACAPwAAAABuAAAADQAAAAAA AAAUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAXAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAGAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAABwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAB8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACIAAAAAAACA PwAAAABuAAAADQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACUAAAAAAACAPwAAAABuAAAADQAAAAAA AAAmAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACgAAAAAAACAPwAAAABuAAAADQAAAAAAAAApAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAKgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAC4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAADEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAyAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADQAAAAAAACA PwAAAABuAAAADQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADcAAAAAAACAPwAAAABuAAAADQAAAAAA AAA4AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADoAAAAAAACAPwAAAABuAAAADQAAAAAAAAA7AAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAPAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD0AAAAAAACAPwAAAABuAAAADQAAAAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAEAAAAAAAACAPwAAAABuAAAADQAAAAAAAABBAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAEMAAAAAAACAPwAAAABuAAAADQAAAAAAAABEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEYAAAAAAACA PwAAAABuAAAADQAAAAAAAABHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEkAAAAAAACAPwAAAABuAAAADQAAAAAA AABKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEwAAAAAAACAPwAAAABuAAAADQAAAAAAAABNAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAATgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE8AAAAAAACAPwAAAABuAAAADQAAAAAAAABQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAFIAAAAAAACAPwAAAABuAAAADQAAAAAAAABTAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAFUAAAAAAACAPwAAAABuAAAADQAAAAAAAABWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFgAAAAAAACA PwAAAABuAAAADQAAAAAAAABZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFsAAAAAAACAPwAAAABuAAAADQAAAAAA AABcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF4AAAAAAACAPwAAAABuAAAADQAAAAAAAABfAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAYAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGEAAAAAAACAPwAAAABuAAAADQAAAAAAAABiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAA AAAAAIA/AAAAAAIAAAAAAAAAAAAAAAEAAAADCwAAAAAAAGQAAAAeAAAAAAAAAA0AAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAGYAAAADAAAAAAAAAC0t LWcAAAAAAAAAAAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAAAABpAAAAEgAAAAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/ AACAPmsAAAARAAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8A AAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABuAAAADQAAAAAAAAAAAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAIAAAAAAACAPwAAAABuAAAADQAAAAAAAAADAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAABAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAAgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAsA AAAAAACAPwAAAABuAAAADQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA4AAAAAAACAPwAAAABuAAAA DQAAAAAAAAAPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABEAAAAAAACAPwAAAABuAAAADQAAAAAAAAASAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAFgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAABoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB0A AAAAAACAPwAAAABuAAAADQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACAAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAkAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAKAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAACwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAtAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC8A AAAAAACAPwAAAABuAAAADQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADIAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAzAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADUAAAAAAACAPwAAAABuAAAADQAAAAAAAAA2AAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAANwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADgAAAAAAACAPwAAAABuAAAADQAAAAAAAAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAOgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADsAAAAAAACAPwAAAABuAAAADQAAAAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAD4AAAAAAACAPwAAAABuAAAADQAAAAAAAAA/AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEEA AAAAAACAPwAAAABuAAAADQAAAAAAAABCAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEQAAAAAAACAPwAAAABuAAAA DQAAAAAAAABFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEcAAAAAAACAPwAAAABuAAAADQAAAAAAAABIAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAASQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEoAAAAAAACAPwAAAABuAAAADQAAAAAAAABLAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAATAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE0AAAAAAACAPwAAAABuAAAADQAAAAAAAABOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAFAAAAAAAACAPwAAAABuAAAADQAAAAAAAABRAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFMA AAAAAACAPwAAAABuAAAADQAAAAAAAABUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFYAAAAAAACAPwAAAABuAAAA DQAAAAAAAABXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFkAAAAAAACAPwAAAABuAAAADQAAAAAAAABaAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFwAAAAAAACAPwAAAABuAAAADQAAAAAAAABdAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAXgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF8AAAAAAACAPwAAAABuAAAADQAAAAAAAABgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAGIAAAAAAACAPwAAAABuAAAADQAAAAAAAABjAAAAAAAAgD8AAAAAAgAAAAAAAAAAAAAAAQAAAAMLAAAAAAAAZAAAAB4AAAAAAAAADgAA AAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAMAAAAAAAAALS0tZwAAAAAAAAAAAAAAaAAAAAoAAAAAAAAAAAAAAAAAAAAAAGkAAAASAAAAAAAAAAAA AABAPwAAQD8AAAA/AABAP2oAAAARAAAAAAAAAAAAAIA+AAAAPwAAQD8AAIA+awAAABEAAAAAAAAAAAAAgD4AAAA/AACAPgAAAABsAAAAFAAAAAAAAAAAAAAA zczMPQAAgD8AAAAAAAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAA AAAAAAAAbQAAAAQAAAAAAAAAAAAAAG4AAAANAAAAAAAAAAAAAAAAAACAPwAAAABuAAAADQAAAAAAAAABAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAAMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAAYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAkAAAAAAACAPwAA AABuAAAADQAAAAAAAAAKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAN AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAQAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAEQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABIAAAAAAACAPwAAAABuAAAADQAAAAAAAAATAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAABUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAABgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABsAAAAAAACAPwAA AABuAAAADQAAAAAAAAAcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAf AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAiAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAIwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAlAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAACcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAoAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAACoAAAAAAACAPwAAAABuAAAADQAAAAAAAAArAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC0AAAAAAACAPwAA AABuAAAADQAAAAAAAAAuAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAx AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADMAAAAAAACAPwAAAABuAAAADQAAAAAAAAA0AAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAANQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADYAAAAAAACAPwAAAABuAAAADQAAAAAAAAA3AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAADkAAAAAAACAPwAAAABuAAAADQAAAAAAAAA6AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAADwAAAAAAACAPwAAAABuAAAADQAAAAAAAAA9AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD8AAAAAAACAPwAA AABuAAAADQAAAAAAAABAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEIAAAAAAACAPwAAAABuAAAADQAAAAAAAABD AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEUAAAAAAACAPwAAAABuAAAADQAAAAAAAABGAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAARwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEgAAAAAAACAPwAAAABuAAAADQAAAAAAAABJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAEsAAAAAAACAPwAAAABuAAAADQAAAAAAAABMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAE4AAAAAAACAPwAAAABuAAAADQAAAAAAAABPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFEAAAAAAACAPwAA AABuAAAADQAAAAAAAABSAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFQAAAAAAACAPwAAAABuAAAADQAAAAAAAABV AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFcAAAAAAACAPwAAAABuAAAADQAAAAAAAABYAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAWQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFoAAAAAAACAPwAAAABuAAAADQAAAAAAAABbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAF0AAAAAAACAPwAAAABuAAAADQAAAAAAAABeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAGAAAAAAAACAPwAAAABuAAAADQAAAAAAAABhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGMAAAAAAACAPwAA AAACAAAAAAAAAAAAAAABAAAAAwsAAAAAAABkAAAAHgAAAAAAAAAPAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAAAwAAAAAAAAAtLS1nAAAAAAAA AAAAAABoAAAACgAAAAAAAAAAAAAAAAAAAAAAaQAAABIAAAAAAAAAAAAAAEA/AABAPwAAAD8AAEA/agAAABEAAAAAAAAAAAAAgD4AAAA/AABAPwAAgD5rAAAA EQAAAAAAAAAAAACAPgAAAD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABt AAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbgAAAA0AAAAAAAAAAAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAAEAAAAAAACAPwAAAABuAAAADQAAAAAAAAACAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAQAAAAA AACAPwAAAABuAAAADQAAAAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAcAAAAAAACAPwAAAABuAAAADQAA AAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAoAAAAAAACAPwAAAABuAAAADQAAAAAAAAALAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA DwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABAAAAAAAACAPwAAAABuAAAADQAAAAAAAAARAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAABMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABYAAAAA AACAPwAAAABuAAAADQAAAAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABkAAAAAAACAPwAAAABuAAAADQAA AAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAdAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA IQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAACUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAmAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACgAAAAA AACAPwAAAABuAAAADQAAAAAAAAApAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACsAAAAAAACAPwAAAABuAAAADQAA AAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAvAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAyAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA MwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADQAAAAAAACAPwAAAABuAAAADQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAADcAAAAAAACAPwAAAABuAAAADQAAAAAAAAA4AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADoAAAAA AACAPwAAAABuAAAADQAAAAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD0AAAAAAACAPwAAAABuAAAADQAA AAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEAAAAAAAACAPwAAAABuAAAADQAAAAAAAABBAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEMAAAAAAACAPwAAAABuAAAADQAAAAAAAABEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA RQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEYAAAAAAACAPwAAAABuAAAADQAAAAAAAABHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAEkAAAAAAACAPwAAAABuAAAADQAAAAAAAABKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEwAAAAA AACAPwAAAABuAAAADQAAAAAAAABNAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE8AAAAAAACAPwAAAABuAAAADQAA AAAAAABQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFIAAAAAAACAPwAAAABuAAAADQAAAAAAAABTAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFUAAAAAAACAPwAAAABuAAAADQAAAAAAAABWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA VwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFgAAAAAAACAPwAAAABuAAAADQAAAAAAAABZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAFsAAAAAAACAPwAAAABuAAAADQAAAAAAAABcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF4AAAAA AACAPwAAAABuAAAADQAAAAAAAABfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGEAAAAAAACAPwAAAABuAAAADQAA AAAAAABiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/AAAAAAIAAAAAAAAAAAAAAAEAAAADCwAAAAAAAGQAAAAeAAAAAAAAABAAAAAAAAAAgD8A AAAAAAAAAAAAAAAAAAAAAAAAAGYAAAADAAAAAAAAAC0tLWcAAAAAAAAAAAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAAAABpAAAAEgAAAAAAAAAAAAAAQD8AAEA/ AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/AACAPmsAAAARAAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/ AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0A AAAEAAAAAAAAAAAAAABuAAAADQAAAAAAAAAAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAIAAAAAAACAPwAAAABu AAAADQAAAAAAAAADAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAGAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAABwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAJAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAACgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAA4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ABEAAAAAAACAPwAAAABuAAAADQAAAAAAAAASAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABQAAAAAAACAPwAAAABu AAAADQAAAAAAAAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAYAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAbAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAHAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAACAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ACMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAkAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACYAAAAAAACAPwAAAABu AAAADQAAAAAAAAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAqAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAtAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAALgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAADIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAzAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ADUAAAAAAACAPwAAAABuAAAADQAAAAAAAAA2AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADgAAAAAAACAPwAAAABu AAAADQAAAAAAAAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADsAAAAAAACAPwAAAABuAAAADQAAAAAAAAA8AAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD4AAAAAAACAPwAAAABuAAAADQAAAAAAAAA/AAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAQAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEEAAAAAAACAPwAAAABuAAAADQAAAAAAAABCAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAEQAAAAAAACAPwAAAABuAAAADQAAAAAAAABFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AEcAAAAAAACAPwAAAABuAAAADQAAAAAAAABIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEoAAAAAAACAPwAAAABu AAAADQAAAAAAAABLAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE0AAAAAAACAPwAAAABuAAAADQAAAAAAAABOAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAATwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFAAAAAAAACAPwAAAABuAAAADQAAAAAAAABRAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAUgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFMAAAAAAACAPwAAAABuAAAADQAAAAAAAABUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAFYAAAAAAACAPwAAAABuAAAADQAAAAAAAABXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AFkAAAAAAACAPwAAAABuAAAADQAAAAAAAABaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFwAAAAAAACAPwAAAABu AAAADQAAAAAAAABdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF8AAAAAAACAPwAAAABuAAAADQAAAAAAAABgAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGIAAAAAAACAPwAAAABuAAAADQAAAAAAAABjAAAAAAAAgD8AAAAAAgAAAAAA AAAAAAAAAQAAAAMLAAAAAAAAZAAAAB4AAAAAAAAAEQAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAMAAAAAAAAALS0tZwAAAAAAAAAAAAAAaAAA AAoAAAAAAAAAAAAAAAAAAAAAAGkAAAASAAAAAAAAAAAAAABAPwAAQD8AAAA/AABAP2oAAAARAAAAAAAAAAAAAIA+AAAAPwAAQD8AAIA+awAAABEAAAAAAAAA AAAAgD4AAAA/AACAPgAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbQAAAAQAAAAA AAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG4AAAANAAAAAAAAAAAAAAAAAACAPwAAAABuAAAADQAAAAAA AAABAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAEAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAABQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAAkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAAwAAAAAAACAPwAAAABuAAAADQAAAAAAAAANAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA8AAAAAAACA PwAAAABuAAAADQAAAAAAAAAQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABIAAAAAAACAPwAAAABuAAAADQAAAAAA AAATAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAWAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAFwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAABsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAB4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACEAAAAAAACA PwAAAABuAAAADQAAAAAAAAAiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACQAAAAAAACAPwAAAABuAAAADQAAAAAA AAAlAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAoAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAKQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACoAAAAAAACAPwAAAABuAAAADQAAAAAAAAArAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAC0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAuAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAADAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAxAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADMAAAAAAACA PwAAAABuAAAADQAAAAAAAAA0AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADYAAAAAAACAPwAAAABuAAAADQAAAAAA AAA3AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADkAAAAAAACAPwAAAABuAAAADQAAAAAAAAA6AAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAOwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADwAAAAAAACAPwAAAABuAAAADQAAAAAAAAA9AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAD8AAAAAAACAPwAAAABuAAAADQAAAAAAAABAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAEIAAAAAAACAPwAAAABuAAAADQAAAAAAAABDAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEUAAAAAAACA PwAAAABuAAAADQAAAAAAAABGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEgAAAAAAACAPwAAAABuAAAADQAAAAAA AABJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEsAAAAAAACAPwAAAABuAAAADQAAAAAAAABMAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAATQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE4AAAAAAACAPwAAAABuAAAADQAAAAAAAABPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAFEAAAAAAACAPwAAAABuAAAADQAAAAAAAABSAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAFQAAAAAAACAPwAAAABuAAAADQAAAAAAAABVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFcAAAAAAACA PwAAAABuAAAADQAAAAAAAABYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFoAAAAAAACAPwAAAABuAAAADQAAAAAA AABbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF0AAAAAAACAPwAAAABuAAAADQAAAAAAAABeAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAXwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGAAAAAAAACAPwAAAABuAAAADQAAAAAAAABhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAGMAAAAAAACAPwAAAAACAAAAAAAAAAAAAAABAAAAAwsAAAAAAABkAAAAHgAAAAAAAAASAAAAAAAAAIA/AAAAAAAAAAAA AAAAAAAAAAAAAABmAAAAAwAAAAAAAAAtLS1nAAAAAAAAAAAAAABoAAAACgAAAAAAAAAAAAAAAAAAAAAAaQAAABIAAAAAAAAAAAAAAEA/AABAPwAAAD8AAEA/ agAAABEAAAAAAAAAAAAAgD4AAAA/AABAPwAAgD5rAAAAEQAAAAAAAAAAAACAPgAAAD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAA bAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAA AAAAAAAAbgAAAA0AAAAAAAAAAAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAEAAAAAAACAPwAAAABuAAAADQAAAAAAAAACAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAAwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAAcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAoA AAAAAACAPwAAAABuAAAADQAAAAAAAAALAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA0AAAAAAACAPwAAAABuAAAA DQAAAAAAAAAOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABAAAAAAAACAPwAAAABuAAAADQAAAAAAAAARAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAEgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAUAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAFQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAABkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABwA AAAAAACAPwAAAABuAAAADQAAAAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB8AAAAAAACAPwAAAABuAAAA DQAAAAAAAAAgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAjAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAJAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAmAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAJwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACgAAAAAAACAPwAAAABuAAAADQAAAAAAAAApAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAACsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC4A AAAAAACAPwAAAABuAAAADQAAAAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADEAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAyAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADQAAAAAAACAPwAAAABuAAAADQAAAAAAAAA1AAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAANgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADcAAAAAAACAPwAAAABuAAAADQAAAAAAAAA4AAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAOQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADoAAAAAAACAPwAAAABuAAAADQAAAAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAD0AAAAAAACAPwAAAABuAAAADQAAAAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEAA AAAAAACAPwAAAABuAAAADQAAAAAAAABBAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEMAAAAAAACAPwAAAABuAAAA DQAAAAAAAABEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEYAAAAAAACAPwAAAABuAAAADQAAAAAAAABHAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAASAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEkAAAAAAACAPwAAAABuAAAADQAAAAAAAABKAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAASwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEwAAAAAAACAPwAAAABuAAAADQAAAAAAAABNAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAE8AAAAAAACAPwAAAABuAAAADQAAAAAAAABQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFIA AAAAAACAPwAAAABuAAAADQAAAAAAAABTAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFUAAAAAAACAPwAAAABuAAAA DQAAAAAAAABWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFgAAAAAAACAPwAAAABuAAAADQAAAAAAAABZAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAWgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFsAAAAAAACAPwAAAABuAAAADQAAAAAAAABcAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAXQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF4AAAAAAACAPwAAAABuAAAADQAAAAAAAABfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAGEAAAAAAACAPwAAAABuAAAADQAAAAAAAABiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/AAAAAAIAAAAAAAAAAAAAAAEA AAADCwAAAAAAAGQAAAAeAAAAAAAAABMAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAGYAAAADAAAAAAAAAC0tLWcAAAAAAAAAAAAAAGgAAAAKAAAAAAAA AAAAAAAAAAAAAABpAAAAEgAAAAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/AACAPmsAAAARAAAAAAAAAAAAAIA+AAAA PwAAgD4AAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABt AAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABuAAAADQAAAAAAAAAAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAAIAAAAAAACAPwAAAABuAAAADQAAAAAAAAADAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAAUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAgAAAAAAACAPwAA AABuAAAADQAAAAAAAAAJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAM AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAPAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAEAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABEAAAAAAACAPwAAAABuAAAADQAAAAAAAAASAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEwAAAAAA AIA/AAAAAG4AAAANAAAAAAAAABQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAABcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABoAAAAAAACAPwAA AABuAAAADQAAAAAAAAAbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAe AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAhAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAIgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAkAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAACYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAACkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACwAAAAAAACAPwAA AABuAAAADQAAAAAAAAAtAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAw AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAzAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAANAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADUAAAAAAACAPwAAAABuAAAADQAAAAAAAAA2AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANwAAAAAA AIA/AAAAAG4AAAANAAAAAAAAADgAAAAAAACAPwAAAABuAAAADQAAAAAAAAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAADsAAAAAAACAPwAAAABuAAAADQAAAAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD4AAAAAAACAPwAA AABuAAAADQAAAAAAAAA/AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEEAAAAAAACAPwAAAABuAAAADQAAAAAAAABC AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEQAAAAAAACAPwAAAABuAAAADQAAAAAAAABFAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAARgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEcAAAAAAACAPwAAAABuAAAADQAAAAAAAABIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAEoAAAAAAACAPwAAAABuAAAADQAAAAAAAABLAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAE0AAAAAAACAPwAAAABuAAAADQAAAAAAAABOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFAAAAAAAACAPwAA AABuAAAADQAAAAAAAABRAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFMAAAAAAACAPwAAAABuAAAADQAAAAAAAABU AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFYAAAAAAACAPwAAAABuAAAADQAAAAAAAABXAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAWAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFkAAAAAAACAPwAAAABuAAAADQAAAAAAAABaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWwAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAFwAAAAAAACAPwAAAABuAAAADQAAAAAAAABdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAF8AAAAAAACAPwAAAABuAAAADQAAAAAAAABgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGIAAAAAAACAPwAA AABuAAAADQAAAAAAAABjAAAAAAAAgD8AAAAAAgAAAAAAAAAAAAAAAQAAAAMLAAAAAAAAZAAAAB4AAAAAAAAAFAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAA AAAAZgAAAAMAAAAAAAAALS0tZwAAAAAAAAAAAAAAaAAAAAoAAAAAAAAAAAAAAAAAAAAAAGkAAAASAAAAAAAAAAAAAABAPwAAQD8AAAA/AABAP2oAAAARAAAA AAAAAAAAAIA+AAAAPwAAQD8AAIA+awAAABEAAAAAAAAAAAAAgD4AAAA/AACAPgAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAGwAAAAUAAAA AAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG4A AAANAAAAAAAAAAAAAAAAAACAPwAAAABuAAAADQAAAAAAAAABAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAMAAAAA AACAPwAAAABuAAAADQAAAAAAAAAEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAYAAAAAAACAPwAAAABuAAAADQAA AAAAAAAHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAKAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAACwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAwAAAAAAACAPwAAAABuAAAADQAAAAAAAAANAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA DgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAABIAAAAAAACAPwAAAABuAAAADQAAAAAAAAATAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABUAAAAA AACAPwAAAABuAAAADQAAAAAAAAAWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABgAAAAAAACAPwAAAABuAAAADQAA AAAAAAAZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAcAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAHQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA IAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAACQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAlAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACcAAAAA AACAPwAAAABuAAAADQAAAAAAAAAoAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACoAAAAAAACAPwAAAABuAAAADQAA AAAAAAArAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAuAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAALwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAxAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA MgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADMAAAAAAACAPwAAAABuAAAADQAAAAAAAAA0AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAADYAAAAAAACAPwAAAABuAAAADQAAAAAAAAA3AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADkAAAAA AACAPwAAAABuAAAADQAAAAAAAAA6AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADwAAAAAAACAPwAAAABuAAAADQAA AAAAAAA9AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD8AAAAAAACAPwAAAABuAAAADQAAAAAAAABAAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAQQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEIAAAAAAACAPwAAAABuAAAADQAAAAAAAABDAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA RAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEUAAAAAAACAPwAAAABuAAAADQAAAAAAAABGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAEgAAAAAAACAPwAAAABuAAAADQAAAAAAAABJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEsAAAAA AACAPwAAAABuAAAADQAAAAAAAABMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE4AAAAAAACAPwAAAABuAAAADQAA AAAAAABPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFEAAAAAAACAPwAAAABuAAAADQAAAAAAAABSAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAUwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFQAAAAAAACAPwAAAABuAAAADQAAAAAAAABVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA VgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFcAAAAAAACAPwAAAABuAAAADQAAAAAAAABYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAFoAAAAAAACAPwAAAABuAAAADQAAAAAAAABbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF0AAAAA AACAPwAAAABuAAAADQAAAAAAAABeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGAAAAAAAACAPwAAAABuAAAADQAA AAAAAABhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGMAAAAAAACAPwAAAAACAAAAAAAAAAAAAAABAAAAAwsAAAAA AABkAAAAHgAAAAAAAAAVAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAAAwAAAAAAAAAtLS1nAAAAAAAAAAAAAABoAAAACgAAAAAAAAAAAAAAAAAA AAAAaQAAABIAAAAAAAAAAAAAAEA/AABAPwAAAD8AAEA/agAAABEAAAAAAAAAAAAAgD4AAAA/AABAPwAAgD5rAAAAEQAAAAAAAAAAAACAPgAAAD8AAIA+AAAA AGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAA AAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbgAAAA0AAAAAAAAAAAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAEAAAAAAACAPwAAAABu AAAADQAAAAAAAAACAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAFAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAABgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAACQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAoAAAAAAACAPwAAAABuAAAADQAAAAAAAAALAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAA0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ABAAAAAAAACAPwAAAABuAAAADQAAAAAAAAARAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABMAAAAAAACAPwAAAABu AAAADQAAAAAAAAAUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAXAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAGAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAGwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAB8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ACIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACUAAAAAAACAPwAAAABu AAAADQAAAAAAAAAmAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACgAAAAAAACAPwAAAABuAAAADQAAAAAAAAApAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAKgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAALQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAADEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAyAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ADQAAAAAAACAPwAAAABuAAAADQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADcAAAAAAACAPwAAAABu AAAADQAAAAAAAAA4AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADoAAAAAAACAPwAAAABuAAAADQAAAAAAAAA7AAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAPAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD0AAAAAAACAPwAAAABuAAAADQAAAAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAPwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEAAAAAAAACAPwAAAABuAAAADQAAAAAAAABBAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAEMAAAAAAACAPwAAAABuAAAADQAAAAAAAABEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AEYAAAAAAACAPwAAAABuAAAADQAAAAAAAABHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEkAAAAAAACAPwAAAABu AAAADQAAAAAAAABKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEwAAAAAAACAPwAAAABuAAAADQAAAAAAAABNAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAATgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE8AAAAAAACAPwAAAABuAAAADQAAAAAAAABQAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAUQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFIAAAAAAACAPwAAAABuAAAADQAAAAAAAABTAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAFUAAAAAAACAPwAAAABuAAAADQAAAAAAAABWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AFgAAAAAAACAPwAAAABuAAAADQAAAAAAAABZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFsAAAAAAACAPwAAAABu AAAADQAAAAAAAABcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF4AAAAAAACAPwAAAABuAAAADQAAAAAAAABfAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAYAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGEAAAAAAACAPwAAAABuAAAADQAAAAAAAABiAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAYwAAAAAAAIA/AAAAAAIAAAAAAAAAAAAAAAEAAAADCwAAAAAAAGQAAAAeAAAAAAAAABYAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAGYAAAAD AAAAAAAAAC0tLWcAAAAAAAAAAAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAAAABpAAAAEgAAAAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACA PgAAAD8AAEA/AACAPmsAAAARAAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAA zczMPQAAgD8AAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABuAAAADQAAAAAA AAAAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAIAAAAAAACAPwAAAABuAAAADQAAAAAAAAADAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAABAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAAgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAAsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA4AAAAAAACA PwAAAABuAAAADQAAAAAAAAAPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABEAAAAAAACAPwAAAABuAAAADQAAAAAA AAASAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAVAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAFgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAABoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAB0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACAAAAAAAACA PwAAAABuAAAADQAAAAAAAAAhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACMAAAAAAACAPwAAAABuAAAADQAAAAAA AAAkAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAnAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAKAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAACwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAtAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAC8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADIAAAAAAACA PwAAAABuAAAADQAAAAAAAAAzAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADUAAAAAAACAPwAAAABuAAAADQAAAAAA AAA2AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADgAAAAAAACAPwAAAABuAAAADQAAAAAAAAA5AAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAOgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADsAAAAAAACAPwAAAABuAAAADQAAAAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAD4AAAAAAACAPwAAAABuAAAADQAAAAAAAAA/AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAEEAAAAAAACAPwAAAABuAAAADQAAAAAAAABCAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEQAAAAAAACA PwAAAABuAAAADQAAAAAAAABFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEcAAAAAAACAPwAAAABuAAAADQAAAAAA AABIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEoAAAAAAACAPwAAAABuAAAADQAAAAAAAABLAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAATAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE0AAAAAAACAPwAAAABuAAAADQAAAAAAAABOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAFAAAAAAAACAPwAAAABuAAAADQAAAAAAAABRAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAFMAAAAAAACAPwAAAABuAAAADQAAAAAAAABUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFYAAAAAAACA PwAAAABuAAAADQAAAAAAAABXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFkAAAAAAACAPwAAAABuAAAADQAAAAAA AABaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFwAAAAAAACAPwAAAABuAAAADQAAAAAAAABdAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAXgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF8AAAAAAACAPwAAAABuAAAADQAAAAAAAABgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAGIAAAAAAACAPwAAAABuAAAADQAAAAAAAABjAAAAAAAAgD8AAAAAAgAAAAAAAAAAAAAAAQAAAAMLAAAAAAAAZAAAAB4A AAAAAAAAFwAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAMAAAAAAAAALS0tZwAAAAAAAAAAAAAAaAAAAAoAAAAAAAAAAAAAAAAAAAAAAGkAAAAS AAAAAAAAAAAAAABAPwAAQD8AAAA/AABAP2oAAAARAAAAAAAAAAAAAIA+AAAAPwAAQD8AAIA+awAAABEAAAAAAAAAAAAAgD4AAAA/AACAPgAAAABsAAAAFAAA AAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABt AAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG4AAAANAAAAAAAAAAAAAAAAAACAPwAAAABuAAAADQAAAAAAAAABAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAAgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAAYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAkA AAAAAACAPwAAAABuAAAADQAAAAAAAAAKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAwAAAAAAACAPwAAAABuAAAA DQAAAAAAAAANAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAQAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAEQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABIAAAAAAACAPwAAAABuAAAADQAAAAAAAAATAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAFAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAABgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABsA AAAAAACAPwAAAABuAAAADQAAAAAAAAAcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB4AAAAAAACAPwAAAABuAAAA DQAAAAAAAAAfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAiAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAIwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAlAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAJgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAoAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAACoAAAAAAACAPwAAAABuAAAADQAAAAAAAAArAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC0A AAAAAACAPwAAAABuAAAADQAAAAAAAAAuAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADAAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAxAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADMAAAAAAACAPwAAAABuAAAADQAAAAAAAAA0AAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAANQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADYAAAAAAACAPwAAAABuAAAADQAAAAAAAAA3AAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAOAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADkAAAAAAACAPwAAAABuAAAADQAAAAAAAAA6AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAADwAAAAAAACAPwAAAABuAAAADQAAAAAAAAA9AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD8A AAAAAACAPwAAAABuAAAADQAAAAAAAABAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEIAAAAAAACAPwAAAABuAAAA DQAAAAAAAABDAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEUAAAAAAACAPwAAAABuAAAADQAAAAAAAABGAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAARwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEgAAAAAAACAPwAAAABuAAAADQAAAAAAAABJAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAASgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEsAAAAAAACAPwAAAABuAAAADQAAAAAAAABMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAE4AAAAAAACAPwAAAABuAAAADQAAAAAAAABPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFEA AAAAAACAPwAAAABuAAAADQAAAAAAAABSAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFQAAAAAAACAPwAAAABuAAAA DQAAAAAAAABVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFcAAAAAAACAPwAAAABuAAAADQAAAAAAAABYAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAWQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFoAAAAAAACAPwAAAABuAAAADQAAAAAAAABbAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAXAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF0AAAAAAACAPwAAAABuAAAADQAAAAAAAABeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAGAAAAAAAACAPwAAAABuAAAADQAAAAAAAABhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGMA AAAAAACAPwAAAAACAAAAAAAAAAAAAAABAAAAAwsAAAAAAABkAAAAHgAAAAAAAAAYAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAAAwAAAAAAAAAt LS1nAAAAAAAAAAAAAABoAAAACgAAAAAAAAAAAAAAAAAAAAAAaQAAABIAAAAAAAAAAAAAAEA/AABAPwAAAD8AAEA/agAAABEAAAAAAAAAAAAAgD4AAAA/AABA PwAAgD5rAAAAEQAAAAAAAAAAAACAPgAAAD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/ AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbgAAAA0AAAAAAAAAAAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAAEAAAAAAACAPwAAAABuAAAADQAAAAAAAAACAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAAQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAcAAAAAAACAPwAA AABuAAAADQAAAAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAL AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAOAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAADwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABAAAAAAAACAPwAAAABuAAAADQAAAAAAAAARAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAABMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAABYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABkAAAAAAACAPwAA AABuAAAADQAAAAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAd AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAgAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAACUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAmAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAACgAAAAAAACAPwAAAABuAAAADQAAAAAAAAApAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACsAAAAAAACAPwAA AABuAAAADQAAAAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAv AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAyAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADQAAAAAAACAPwAAAABuAAAADQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAADcAAAAAAACAPwAAAABuAAAADQAAAAAAAAA4AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAADoAAAAAAACAPwAAAABuAAAADQAAAAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD0AAAAAAACAPwAA AABuAAAADQAAAAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEAAAAAAAACAPwAAAABuAAAADQAAAAAAAABB AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEMAAAAAAACAPwAAAABuAAAADQAAAAAAAABEAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAARQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEYAAAAAAACAPwAAAABuAAAADQAAAAAAAABHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAEkAAAAAAACAPwAAAABuAAAADQAAAAAAAABKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAEwAAAAAAACAPwAAAABuAAAADQAAAAAAAABNAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE8AAAAAAACAPwAA AABuAAAADQAAAAAAAABQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFIAAAAAAACAPwAAAABuAAAADQAAAAAAAABT AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFUAAAAAAACAPwAAAABuAAAADQAAAAAAAABWAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFgAAAAAAACAPwAAAABuAAAADQAAAAAAAABZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAFsAAAAAAACAPwAAAABuAAAADQAAAAAAAABcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAF4AAAAAAACAPwAAAABuAAAADQAAAAAAAABfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGEAAAAAAACAPwAA AABuAAAADQAAAAAAAABiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/AAAAAAIAAAAAAAAAAAAAAAEAAAADCwAAAAAAAGQAAAAeAAAAAAAAABkA AAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAGYAAAADAAAAAAAAAC0tLWcAAAAAAAAAAAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAAAABpAAAAEgAAAAAAAAAA AAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/AACAPmsAAAARAAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAAbAAAABQAAAAAAAAAAAAA AM3MzD0AAIA/AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAA AAAAAAAAAG0AAAAEAAAAAAAAAAAAAABuAAAADQAAAAAAAAAAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAIAAAAA AACAPwAAAABuAAAADQAAAAAAAAADAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAUAAAAAAACAPwAAAABuAAAADQAA AAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAJAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA DQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAABEAAAAAAACAPwAAAABuAAAADQAAAAAAAAASAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABQAAAAA AACAPwAAAABuAAAADQAAAAAAAAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABcAAAAAAACAPwAAAABuAAAADQAA AAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAbAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA HwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAACMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAkAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACYAAAAA AACAPwAAAABuAAAADQAAAAAAAAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACkAAAAAAACAPwAAAABuAAAADQAA AAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAtAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA MQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAzAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAADUAAAAAAACAPwAAAABuAAAADQAAAAAAAAA2AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADgAAAAA AACAPwAAAABuAAAADQAAAAAAAAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADsAAAAAAACAPwAAAABuAAAADQAA AAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD4AAAAAAACAPwAAAABuAAAADQAAAAAAAAA/AAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEEAAAAAAACAPwAAAABuAAAADQAAAAAAAABCAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA QwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEQAAAAAAACAPwAAAABuAAAADQAAAAAAAABFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAEcAAAAAAACAPwAAAABuAAAADQAAAAAAAABIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEoAAAAA AACAPwAAAABuAAAADQAAAAAAAABLAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE0AAAAAAACAPwAAAABuAAAADQAA AAAAAABOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFAAAAAAAACAPwAAAABuAAAADQAAAAAAAABRAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFMAAAAAAACAPwAAAABuAAAADQAAAAAAAABUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA VQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFYAAAAAAACAPwAAAABuAAAADQAAAAAAAABXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAFkAAAAAAACAPwAAAABuAAAADQAAAAAAAABaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFwAAAAA AACAPwAAAABuAAAADQAAAAAAAABdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF8AAAAAAACAPwAAAABuAAAADQAA AAAAAABgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGIAAAAAAACAPwAAAABuAAAADQAAAAAAAABjAAAAAAAAgD8A AAAAAgAAAAAAAAAAAAAAAQAAAAMLAAAAAAAAZAAAAB4AAAAAAAAAGgAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAMAAAAAAAAALS0tZwAAAAAA AAAAAAAAaAAAAAoAAAAAAAAAAAAAAAAAAAAAAGkAAAASAAAAAAAAAAAAAABAPwAAQD8AAAA/AABAP2oAAAARAAAAAAAAAAAAAIA+AAAAPwAAQD8AAIA+awAA ABEAAAAAAAAAAAAAgD4AAAA/AACAPgAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAA bQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG4AAAANAAAAAAAAAAAAAAAAAACAPwAAAABu AAAADQAAAAAAAAABAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAEAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAABQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAHAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAACAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAAwAAAAAAACAPwAAAABuAAAADQAAAAAAAAANAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AA8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABIAAAAAAACAPwAAAABu AAAADQAAAAAAAAATAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAWAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAFwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAZAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAGgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAB4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ACEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACQAAAAAAACAPwAAAABu AAAADQAAAAAAAAAlAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAoAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAKQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACoAAAAAAACAPwAAAABuAAAADQAAAAAAAAArAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAALAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAuAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAADAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAxAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ADMAAAAAAACAPwAAAABuAAAADQAAAAAAAAA0AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADYAAAAAAACAPwAAAABu AAAADQAAAAAAAAA3AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADkAAAAAAACAPwAAAABuAAAADQAAAAAAAAA6AAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAOwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADwAAAAAAACAPwAAAABuAAAADQAAAAAAAAA9AAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAPgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD8AAAAAAACAPwAAAABuAAAADQAAAAAAAABAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAEIAAAAAAACAPwAAAABuAAAADQAAAAAAAABDAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AEUAAAAAAACAPwAAAABuAAAADQAAAAAAAABGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEgAAAAAAACAPwAAAABu AAAADQAAAAAAAABJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEsAAAAAAACAPwAAAABuAAAADQAAAAAAAABMAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAATQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE4AAAAAAACAPwAAAABuAAAADQAAAAAAAABPAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAUAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFEAAAAAAACAPwAAAABuAAAADQAAAAAAAABSAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAFQAAAAAAACAPwAAAABuAAAADQAAAAAAAABVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AFcAAAAAAACAPwAAAABuAAAADQAAAAAAAABYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFoAAAAAAACAPwAAAABu AAAADQAAAAAAAABbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF0AAAAAAACAPwAAAABuAAAADQAAAAAAAABeAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAXwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGAAAAAAAACAPwAAAABuAAAADQAAAAAAAABhAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAYgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGMAAAAAAACAPwAAAAACAAAAAAAAAAAAAAABAAAAAwsAAAAAAABkAAAAHgAAAAAAAAAbAAAAAAAAAIA/ AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAAAwAAAAAAAAAtLS1nAAAAAAAAAAAAAABoAAAACgAAAAAAAAAAAAAAAAAAAAAAaQAAABIAAAAAAAAAAAAAAEA/AABA PwAAAD8AAEA/agAAABEAAAAAAAAAAAAAgD4AAAA/AABAPwAAgD5rAAAAEQAAAAAAAAAAAACAPgAAAD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACA PwAAAAAAAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABt AAAABAAAAAAAAAAAAAAAbgAAAA0AAAAAAAAAAAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAEAAAAAAACAPwAAAABuAAAADQAAAAAAAAACAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAAcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAAoAAAAAAACAPwAAAABuAAAADQAAAAAAAAALAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA0AAAAAAACA PwAAAABuAAAADQAAAAAAAAAOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABAAAAAAAACAPwAAAABuAAAADQAAAAAA AAARAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAUAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAABkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAABwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB8AAAAAAACA PwAAAABuAAAADQAAAAAAAAAgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACIAAAAAAACAPwAAAABuAAAADQAAAAAA AAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAmAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACgAAAAAAACAPwAAAABuAAAADQAAAAAAAAApAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAACsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAC4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADEAAAAAAACA PwAAAABuAAAADQAAAAAAAAAyAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADQAAAAAAACAPwAAAABuAAAADQAAAAAA AAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADcAAAAAAACAPwAAAABuAAAADQAAAAAAAAA4AAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADoAAAAAAACAPwAAAABuAAAADQAAAAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAD0AAAAAAACAPwAAAABuAAAADQAAAAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAEAAAAAAAACAPwAAAABuAAAADQAAAAAAAABBAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEMAAAAAAACA PwAAAABuAAAADQAAAAAAAABEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEYAAAAAAACAPwAAAABuAAAADQAAAAAA AABHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEkAAAAAAACAPwAAAABuAAAADQAAAAAAAABKAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAASwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEwAAAAAAACAPwAAAABuAAAADQAAAAAAAABNAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAE8AAAAAAACAPwAAAABuAAAADQAAAAAAAABQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAFIAAAAAAACAPwAAAABuAAAADQAAAAAAAABTAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFUAAAAAAACA PwAAAABuAAAADQAAAAAAAABWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFgAAAAAAACAPwAAAABuAAAADQAAAAAA AABZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFsAAAAAAACAPwAAAABuAAAADQAAAAAAAABcAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF4AAAAAAACAPwAAAABuAAAADQAAAAAAAABfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAGEAAAAAAACAPwAAAABuAAAADQAAAAAAAABiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/AAAAAAIAAAAA AAAAAAAAAAEAAAADCwAAAAAAAGQAAAAeAAAAAAAAABwAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAGYAAAADAAAAAAAAAC0tLWcAAAAAAAAAAAAAAGgA AAAKAAAAAAAAAAAAAAAAAAAAAABpAAAAEgAAAAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/AACAPmsAAAARAAAAAAAA AAAAAIA+AAAAPwAAgD4AAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAG0AAAAEAAAA AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABuAAAADQAAAAAAAAAAAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAAQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAIAAAAAAACAPwAAAABuAAAADQAAAAAAAAADAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAAUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAgA AAAAAACAPwAAAABuAAAADQAAAAAAAAAJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAsAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAPAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABEAAAAAAACAPwAAAABuAAAADQAAAAAAAAASAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAEwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAABcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABoA AAAAAACAPwAAAABuAAAADQAAAAAAAAAbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB0AAAAAAACAPwAAAABuAAAA DQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAhAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAkAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAJQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAACkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACwA AAAAAACAPwAAAABuAAAADQAAAAAAAAAtAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC8AAAAAAACAPwAAAABuAAAA DQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAzAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAANAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADUAAAAAAACAPwAAAABuAAAADQAAAAAAAAA2AAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAANwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADgAAAAAAACAPwAAAABuAAAADQAAAAAAAAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAADsAAAAAAACAPwAAAABuAAAADQAAAAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD4A AAAAAACAPwAAAABuAAAADQAAAAAAAAA/AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEEAAAAAAACAPwAAAABuAAAA DQAAAAAAAABCAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEQAAAAAAACAPwAAAABuAAAADQAAAAAAAABFAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAARgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEcAAAAAAACAPwAAAABuAAAADQAAAAAAAABIAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAASQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEoAAAAAAACAPwAAAABuAAAADQAAAAAAAABLAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAE0AAAAAAACAPwAAAABuAAAADQAAAAAAAABOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFAA AAAAAACAPwAAAABuAAAADQAAAAAAAABRAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFMAAAAAAACAPwAAAABuAAAA DQAAAAAAAABUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFYAAAAAAACAPwAAAABuAAAADQAAAAAAAABXAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFkAAAAAAACAPwAAAABuAAAADQAAAAAAAABaAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAWwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFwAAAAAAACAPwAAAABuAAAADQAAAAAAAABdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAF8AAAAAAACAPwAAAABuAAAADQAAAAAAAABgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGIA AAAAAACAPwAAAABuAAAADQAAAAAAAABjAAAAAAAAgD8AAAAAAgAAAAAAAAAAAAAAAQAAAAMLAAAAAAAAZAAAAB4AAAAAAAAAHQAAAAAAAACAPwAAAAAAAAAA AAAAAAAAAAAAAAAAZgAAAAMAAAAAAAAALS0tZwAAAAAAAAAAAAAAaAAAAAoAAAAAAAAAAAAAAAAAAAAAAGkAAAASAAAAAAAAAAAAAABAPwAAQD8AAAA/AABA P2oAAAARAAAAAAAAAAAAAIA+AAAAPwAAQD8AAIA+awAAABEAAAAAAAAAAAAAgD4AAAA/AACAPgAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAA AGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAA AAAAAAAAAG4AAAANAAAAAAAAAAAAAAAAAACAPwAAAABuAAAADQAAAAAAAAABAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAAMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAYAAAAAAACAPwAA AABuAAAADQAAAAAAAAAHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAK AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAwAAAAAAACAPwAAAABuAAAADQAAAAAAAAANAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAADgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAABIAAAAAAACAPwAAAABuAAAADQAAAAAAAAATAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAABUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABgAAAAAAACAPwAA AABuAAAADQAAAAAAAAAZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAc AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAfAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAIAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIwAAAAAA AIA/AAAAAG4AAAANAAAAAAAAACQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAlAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAACcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAoAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACoAAAAAAACAPwAA AABuAAAADQAAAAAAAAArAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAu AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAxAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAMgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADMAAAAAAACAPwAAAABuAAAADQAAAAAAAAA0AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAADYAAAAAAACAPwAAAABuAAAADQAAAAAAAAA3AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAADkAAAAAAACAPwAAAABuAAAADQAAAAAAAAA6AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADwAAAAAAACAPwAA AABuAAAADQAAAAAAAAA9AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD8AAAAAAACAPwAAAABuAAAADQAAAAAAAABA AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEIAAAAAAACAPwAAAABuAAAADQAAAAAAAABDAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAARAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEUAAAAAAACAPwAAAABuAAAADQAAAAAAAABGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARwAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAEgAAAAAAACAPwAAAABuAAAADQAAAAAAAABJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAEsAAAAAAACAPwAAAABuAAAADQAAAAAAAABMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE4AAAAAAACAPwAA AABuAAAADQAAAAAAAABPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFEAAAAAAACAPwAAAABuAAAADQAAAAAAAABS AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFQAAAAAAACAPwAAAABuAAAADQAAAAAAAABVAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAVgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFcAAAAAAACAPwAAAABuAAAADQAAAAAAAABYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAFoAAAAAAACAPwAAAABuAAAADQAAAAAAAABbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAF0AAAAAAACAPwAAAABuAAAADQAAAAAAAABeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGAAAAAAAACAPwAA AABuAAAADQAAAAAAAABhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGMAAAAAAACAPwAAAAACAAAAAAAAAAAAAAAB AAAAAwsAAAAAAABkAAAAHgAAAAAAAAAeAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAAAwAAAAAAAAAtLS1nAAAAAAAAAAAAAABoAAAACgAAAAAA AAAAAAAAAAAAAAAAaQAAABIAAAAAAAAAAAAAAEA/AABAPwAAAD8AAEA/agAAABEAAAAAAAAAAAAAgD4AAAA/AABAPwAAgD5rAAAAEQAAAAAAAAAAAACAPgAA AD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABtAAAABAAAAAAAAAAAAAAA bQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbgAAAA0AAAAAAAAAAAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAEAAAAA AACAPwAAAABuAAAADQAAAAAAAAACAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAQAAAAAAACAPwAAAABuAAAADQAA AAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAIAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAoAAAAAAACAPwAAAABuAAAADQAAAAAAAAALAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA DAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAABAAAAAAAACAPwAAAABuAAAADQAAAAAAAAARAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABMAAAAA AACAPwAAAABuAAAADQAAAAAAAAAUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABYAAAAAAACAPwAAAABuAAAADQAA AAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAaAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA HgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAACIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACUAAAAA AACAPwAAAABuAAAADQAAAAAAAAAmAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACgAAAAAAACAPwAAAABuAAAADQAA AAAAAAApAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAsAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA MAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAyAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAADQAAAAAAACAPwAAAABuAAAADQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADcAAAAA AACAPwAAAABuAAAADQAAAAAAAAA4AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADoAAAAAAACAPwAAAABuAAAADQAA AAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD0AAAAAAACAPwAAAABuAAAADQAAAAAAAAA+AAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEAAAAAAAACAPwAAAABuAAAADQAAAAAAAABBAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA QgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEMAAAAAAACAPwAAAABuAAAADQAAAAAAAABEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAEYAAAAAAACAPwAAAABuAAAADQAAAAAAAABHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEkAAAAA AACAPwAAAABuAAAADQAAAAAAAABKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEwAAAAAAACAPwAAAABuAAAADQAA AAAAAABNAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE8AAAAAAACAPwAAAABuAAAADQAAAAAAAABQAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFIAAAAAAACAPwAAAABuAAAADQAAAAAAAABTAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA VAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFUAAAAAAACAPwAAAABuAAAADQAAAAAAAABWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAFgAAAAAAACAPwAAAABuAAAADQAAAAAAAABZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFsAAAAA AACAPwAAAABuAAAADQAAAAAAAABcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF4AAAAAAACAPwAAAABuAAAADQAA AAAAAABfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGEAAAAAAACAPwAAAABuAAAADQAAAAAAAABiAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/AAAAAAIAAAAAAAAAAAAAAAEAAAADCwAAAAAAAGQAAAAeAAAAAAAAAB8AAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAA AAAAAGYAAAADAAAAAAAAAC0tLWcAAAAAAAAAAAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAAAABpAAAAEgAAAAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAA AAAAAAAAAACAPgAAAD8AAEA/AACAPmsAAAARAAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABsAAAAFAAA AAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABu AAAADQAAAAAAAAAAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAIAAAAAAACAPwAAAABuAAAADQAAAAAAAAADAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAABAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAABwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAAsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AA4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABEAAAAAAACAPwAAAABu AAAADQAAAAAAAAASAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAVAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAGQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAB0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ACAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACMAAAAAAACAPwAAAABu AAAADQAAAAAAAAAkAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAnAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAKwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAtAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAC8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ADIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAzAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADUAAAAAAACAPwAAAABu AAAADQAAAAAAAAA2AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADgAAAAAAACAPwAAAABuAAAADQAAAAAAAAA5AAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADsAAAAAAACAPwAAAABuAAAADQAAAAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAPQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD4AAAAAAACAPwAAAABuAAAADQAAAAAAAAA/AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAEEAAAAAAACAPwAAAABuAAAADQAAAAAAAABCAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AEQAAAAAAACAPwAAAABuAAAADQAAAAAAAABFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEcAAAAAAACAPwAAAABu AAAADQAAAAAAAABIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEoAAAAAAACAPwAAAABuAAAADQAAAAAAAABLAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAATAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE0AAAAAAACAPwAAAABuAAAADQAAAAAAAABOAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAATwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFAAAAAAAACAPwAAAABuAAAADQAAAAAAAABRAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAFMAAAAAAACAPwAAAABuAAAADQAAAAAAAABUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AFYAAAAAAACAPwAAAABuAAAADQAAAAAAAABXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFkAAAAAAACAPwAAAABu AAAADQAAAAAAAABaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFwAAAAAAACAPwAAAABuAAAADQAAAAAAAABdAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF8AAAAAAACAPwAAAABuAAAADQAAAAAAAABgAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAYQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGIAAAAAAACAPwAAAABuAAAADQAAAAAAAABjAAAAAAAAgD8AAAAAAgAAAAAAAAAAAAAAAQAAAAMLAAAA AAAAZAAAAB4AAAAAAAAAIAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAMAAAAAAAAALS0tZwAAAAAAAAAAAAAAaAAAAAoAAAAAAAAAAAAAAAAA AAAAAGkAAAASAAAAAAAAAAAAAABAPwAAQD8AAAA/AABAP2oAAAARAAAAAAAAAAAAAIA+AAAAPwAAQD8AAIA+awAAABEAAAAAAAAAAAAAgD4AAAA/AACAPgAA AABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAA AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG4AAAANAAAAAAAAAAAAAAAAAACAPwAAAABuAAAADQAAAAAAAAABAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAAgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAAYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAAkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAwAAAAAAACA PwAAAABuAAAADQAAAAAAAAANAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA8AAAAAAACAPwAAAABuAAAADQAAAAAA AAAQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABIAAAAAAACAPwAAAABuAAAADQAAAAAAAAATAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAFAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAABgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAABsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB4AAAAAAACA PwAAAABuAAAADQAAAAAAAAAfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACEAAAAAAACAPwAAAABuAAAADQAAAAAA AAAiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAlAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAJgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAoAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAACoAAAAAAACAPwAAAABuAAAADQAAAAAAAAArAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAC0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAuAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADAAAAAAAACA PwAAAABuAAAADQAAAAAAAAAxAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADMAAAAAAACAPwAAAABuAAAADQAAAAAA AAA0AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADYAAAAAAACAPwAAAABuAAAADQAAAAAAAAA3AAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAOAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADkAAAAAAACAPwAAAABuAAAADQAAAAAAAAA6AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAADwAAAAAAACAPwAAAABuAAAADQAAAAAAAAA9AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAD8AAAAAAACAPwAAAABuAAAADQAAAAAAAABAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEIAAAAAAACA PwAAAABuAAAADQAAAAAAAABDAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEUAAAAAAACAPwAAAABuAAAADQAAAAAA AABGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEgAAAAAAACAPwAAAABuAAAADQAAAAAAAABJAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAASgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEsAAAAAAACAPwAAAABuAAAADQAAAAAAAABMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAE4AAAAAAACAPwAAAABuAAAADQAAAAAAAABPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAFEAAAAAAACAPwAAAABuAAAADQAAAAAAAABSAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFQAAAAAAACA PwAAAABuAAAADQAAAAAAAABVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFcAAAAAAACAPwAAAABuAAAADQAAAAAA AABYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFoAAAAAAACAPwAAAABuAAAADQAAAAAAAABbAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAXAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF0AAAAAAACAPwAAAABuAAAADQAAAAAAAABeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAGAAAAAAAACAPwAAAABuAAAADQAAAAAAAABhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAGMAAAAAAACAPwAAAAACAAAAAAAAAAAAAAABAAAAAwsAAAAAAABkAAAAHgAAAAAAAAAhAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAA AwAAAAAAAAAtLS1nAAAAAAAAAAAAAABoAAAACgAAAAAAAAAAAAAAAAAAAAAAaQAAABIAAAAAAAAAAAAAAEA/AABAPwAAAD8AAEA/agAAABEAAAAAAAAAAAAA gD4AAAA/AABAPwAAgD5rAAAAEQAAAAAAAAAAAACAPgAAAD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbAAAABQAAAAAAAAAAAAA AM3MzD0AAIA/AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbgAAAA0AAAAA AAAAAAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAEAAAAAAACAPwAAAABuAAAADQAAAAAAAAACAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAAQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAcA AAAAAACAPwAAAABuAAAADQAAAAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAoAAAAAAACAPwAAAABuAAAA DQAAAAAAAAALAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAOAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABAAAAAAAACAPwAAAABuAAAADQAAAAAAAAARAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAEgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAABYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABkA AAAAAACAPwAAAABuAAAADQAAAAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABwAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAgAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAJAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAmAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAACgAAAAAAACAPwAAAABuAAAADQAAAAAAAAApAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACsA AAAAAACAPwAAAABuAAAADQAAAAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC4AAAAAAACAPwAAAABuAAAA DQAAAAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAyAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADQAAAAAAACAPwAAAABuAAAADQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAANgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADcAAAAAAACAPwAAAABuAAAADQAAAAAAAAA4AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAADoAAAAAAACAPwAAAABuAAAADQAAAAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD0A AAAAAACAPwAAAABuAAAADQAAAAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEAAAAAAAACAPwAAAABuAAAA DQAAAAAAAABBAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEMAAAAAAACAPwAAAABuAAAADQAAAAAAAABEAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEYAAAAAAACAPwAAAABuAAAADQAAAAAAAABHAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAASAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEkAAAAAAACAPwAAAABuAAAADQAAAAAAAABKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAEwAAAAAAACAPwAAAABuAAAADQAAAAAAAABNAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE8A AAAAAACAPwAAAABuAAAADQAAAAAAAABQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFIAAAAAAACAPwAAAABuAAAA DQAAAAAAAABTAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFUAAAAAAACAPwAAAABuAAAADQAAAAAAAABWAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFgAAAAAAACAPwAAAABuAAAADQAAAAAAAABZAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAWgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFsAAAAAAACAPwAAAABuAAAADQAAAAAAAABcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAF4AAAAAAACAPwAAAABuAAAADQAAAAAAAABfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGEA AAAAAACAPwAAAABuAAAADQAAAAAAAABiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/AAAAAAIAAAAAAAAAAAAAAAEAAAADCwAAAAAAAGQAAAAe AAAAAAAAACIAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAGYAAAADAAAAAAAAAC0tLWcAAAAAAAAAAAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAAAABpAAAA EgAAAAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/AACAPmsAAAARAAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAAbAAAABQA AAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAA bQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABuAAAADQAAAAAAAAAAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAAIAAAAAAACAPwAAAABuAAAADQAAAAAAAAADAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAUAAAAAAACAPwAA AABuAAAADQAAAAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAJ AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAADQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAABEAAAAAAACAPwAAAABuAAAADQAAAAAAAAASAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAABQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABcAAAAAAACAPwAA AABuAAAADQAAAAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAb AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAHwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAACMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAkAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAACYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACkAAAAAAACAPwAA AABuAAAADQAAAAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAt AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAMQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAzAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAADUAAAAAAACAPwAAAABuAAAADQAAAAAAAAA2AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAADgAAAAAAACAPwAAAABuAAAADQAAAAAAAAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADsAAAAAAACAPwAA AABuAAAADQAAAAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD4AAAAAAACAPwAAAABuAAAADQAAAAAAAAA/ AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEEAAAAAAACAPwAAAABuAAAADQAAAAAAAABCAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAQwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEQAAAAAAACAPwAAAABuAAAADQAAAAAAAABFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAEcAAAAAAACAPwAAAABuAAAADQAAAAAAAABIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAEoAAAAAAACAPwAAAABuAAAADQAAAAAAAABLAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE0AAAAAAACAPwAA AABuAAAADQAAAAAAAABOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFAAAAAAAACAPwAAAABuAAAADQAAAAAAAABR AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFMAAAAAAACAPwAAAABuAAAADQAAAAAAAABUAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAVQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFYAAAAAAACAPwAAAABuAAAADQAAAAAAAABXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAFkAAAAAAACAPwAAAABuAAAADQAAAAAAAABaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAFwAAAAAAACAPwAAAABuAAAADQAAAAAAAABdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF8AAAAAAACAPwAA AABuAAAADQAAAAAAAABgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGIAAAAAAACAPwAAAABuAAAADQAAAAAAAABj AAAAAAAAgD8AAAAAAgAAAAAAAAAAAAAAAQAAAAMLAAAAAAAAZAAAAB4AAAAAAAAAIwAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAMAAAAAAAAA LS0tZwAAAAAAAAAAAAAAaAAAAAoAAAAAAAAAAAAAAAAAAAAAAGkAAAASAAAAAAAAAAAAAABAPwAAQD8AAAA/AABAP2oAAAARAAAAAAAAAAAAAIA+AAAAPwAA QD8AAIA+awAAABEAAAAAAAAAAAAAgD4AAAA/AACAPgAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACA PwAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG4AAAANAAAAAAAAAAAAAAAA AACAPwAAAABuAAAADQAAAAAAAAABAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAMAAAAAAACAPwAAAABuAAAADQAA AAAAAAAEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAHAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAACAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA CwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAwAAAAAAACAPwAAAABuAAAADQAAAAAAAAANAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAA8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABIAAAAA AACAPwAAAABuAAAADQAAAAAAAAATAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABUAAAAAAACAPwAAAABuAAAADQAA AAAAAAAWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAZAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAGgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA HQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAACEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACQAAAAA AACAPwAAAABuAAAADQAAAAAAAAAlAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACcAAAAAAACAPwAAAABuAAAADQAA AAAAAAAoAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACoAAAAAAACAPwAAAABuAAAADQAAAAAAAAArAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAALAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAuAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA LwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAxAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAADMAAAAAAACAPwAAAABuAAAADQAAAAAAAAA0AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADYAAAAA AACAPwAAAABuAAAADQAAAAAAAAA3AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADkAAAAAAACAPwAAAABuAAAADQAA AAAAAAA6AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADwAAAAAAACAPwAAAABuAAAADQAAAAAAAAA9AAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAPgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD8AAAAAAACAPwAAAABuAAAADQAAAAAAAABAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA QQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEIAAAAAAACAPwAAAABuAAAADQAAAAAAAABDAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAEUAAAAAAACAPwAAAABuAAAADQAAAAAAAABGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEgAAAAA AACAPwAAAABuAAAADQAAAAAAAABJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEsAAAAAAACAPwAAAABuAAAADQAA AAAAAABMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE4AAAAAAACAPwAAAABuAAAADQAAAAAAAABPAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAUAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFEAAAAAAACAPwAAAABuAAAADQAAAAAAAABSAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA UwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFQAAAAAAACAPwAAAABuAAAADQAAAAAAAABVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAFcAAAAAAACAPwAAAABuAAAADQAAAAAAAABYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFoAAAAA AACAPwAAAABuAAAADQAAAAAAAABbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF0AAAAAAACAPwAAAABuAAAADQAA AAAAAABeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGAAAAAAAACAPwAAAABuAAAADQAAAAAAAABhAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAYgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGMAAAAAAACAPwAAAAACAAAAAAAAAAAAAAABAAAAAwsAAAAAAABkAAAAHgAAAAAAAAAk AAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAAAwAAAAAAAAAtLS1nAAAAAAAAAAAAAABoAAAACgAAAAAAAAAAAAAAAAAAAAAAaQAAABIAAAAAAAAA AAAAAEA/AABAPwAAAD8AAEA/agAAABEAAAAAAAAAAAAAgD4AAAA/AABAPwAAgD5rAAAAEQAAAAAAAAAAAACAPgAAAD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAA AADNzMw9AACAPwAAAAAAAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAA AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbgAAAA0AAAAAAAAAAAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAEAAAAAAACAPwAAAABuAAAADQAAAAAAAAACAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAABgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAAoAAAAAAACAPwAAAABuAAAADQAAAAAAAAALAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AA0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABAAAAAAAACAPwAAAABu AAAADQAAAAAAAAARAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAUAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAGAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAABwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AB8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACIAAAAAAACAPwAAAABu AAAADQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAmAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACgAAAAAAACAPwAAAABuAAAADQAAAAAAAAApAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAKgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAC4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ADEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAyAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADQAAAAAAACAPwAAAABu AAAADQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADcAAAAAAACAPwAAAABuAAAADQAAAAAAAAA4AAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADoAAAAAAACAPwAAAABuAAAADQAAAAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAPAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD0AAAAAAACAPwAAAABuAAAADQAAAAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAEAAAAAAAACAPwAAAABuAAAADQAAAAAAAABBAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AEMAAAAAAACAPwAAAABuAAAADQAAAAAAAABEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEYAAAAAAACAPwAAAABu AAAADQAAAAAAAABHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEkAAAAAAACAPwAAAABuAAAADQAAAAAAAABKAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAASwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEwAAAAAAACAPwAAAABuAAAADQAAAAAAAABNAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAATgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE8AAAAAAACAPwAAAABuAAAADQAAAAAAAABQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAFIAAAAAAACAPwAAAABuAAAADQAAAAAAAABTAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AFUAAAAAAACAPwAAAABuAAAADQAAAAAAAABWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFgAAAAAAACAPwAAAABu AAAADQAAAAAAAABZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFsAAAAAAACAPwAAAABuAAAADQAAAAAAAABcAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF4AAAAAAACAPwAAAABuAAAADQAAAAAAAABfAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAYAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGEAAAAAAACAPwAAAABuAAAADQAAAAAAAABiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/ AAAAAAIAAAAAAAAAAAAAAAEAAAADCwAAAAAAAGQAAAAeAAAAAAAAACUAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAGYAAAADAAAAAAAAAC0tLWcAAAAA AAAAAAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAAAABpAAAAEgAAAAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/AACAPmsA AAARAAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAA AG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABuAAAADQAAAAAAAAAAAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAIAAAAAAACAPwAAAABuAAAADQAAAAAAAAADAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAAUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAAgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAsAAAAAAACA PwAAAABuAAAADQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA4AAAAAAACAPwAAAABuAAAADQAAAAAA AAAPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABEAAAAAAACAPwAAAABuAAAADQAAAAAAAAASAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAABcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAABoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB0AAAAAAACA PwAAAABuAAAADQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACAAAAAAAACAPwAAAABuAAAADQAAAAAA AAAhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAkAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAACkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAACwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAtAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC8AAAAAAACA PwAAAABuAAAADQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADIAAAAAAACAPwAAAABuAAAADQAAAAAA AAAzAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADUAAAAAAACAPwAAAABuAAAADQAAAAAAAAA2AAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAANwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADgAAAAAAACAPwAAAABuAAAADQAAAAAAAAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAADsAAAAAAACAPwAAAABuAAAADQAAAAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAD4AAAAAAACAPwAAAABuAAAADQAAAAAAAAA/AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEEAAAAAAACA PwAAAABuAAAADQAAAAAAAABCAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEQAAAAAAACAPwAAAABuAAAADQAAAAAA AABFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEcAAAAAAACAPwAAAABuAAAADQAAAAAAAABIAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAASQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEoAAAAAAACAPwAAAABuAAAADQAAAAAAAABLAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAE0AAAAAAACAPwAAAABuAAAADQAAAAAAAABOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAFAAAAAAAACAPwAAAABuAAAADQAAAAAAAABRAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFMAAAAAAACA PwAAAABuAAAADQAAAAAAAABUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFYAAAAAAACAPwAAAABuAAAADQAAAAAA AABXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFkAAAAAAACAPwAAAABuAAAADQAAAAAAAABaAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFwAAAAAAACAPwAAAABuAAAADQAAAAAAAABdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAF8AAAAAAACAPwAAAABuAAAADQAAAAAAAABgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAGIAAAAAAACAPwAAAABuAAAADQAAAAAAAABjAAAAAAAAgD8AAAAAAgAAAAAAAAAAAAAAAQAAAAMLAAAAAAAAZAAAAB4AAAAAAAAAJgAAAAAAAACA PwAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAMAAAAAAAAALS0tZwAAAAAAAAAAAAAAaAAAAAoAAAAAAAAAAAAAAAAAAAAAAGkAAAASAAAAAAAAAAAAAABAPwAA QD8AAAA/AABAP2oAAAARAAAAAAAAAAAAAIA+AAAAPwAAQD8AAIA+awAAABEAAAAAAAAAAAAAgD4AAAA/AACAPgAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAA gD8AAAAAAAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAA bQAAAAQAAAAAAAAAAAAAAG4AAAANAAAAAAAAAAAAAAAAAACAPwAAAABuAAAADQAAAAAAAAABAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAAMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAYA AAAAAACAPwAAAABuAAAADQAAAAAAAAAHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAkAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAwAAAAAAACAPwAAAABuAAAADQAAAAAAAAANAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAADgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAQAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAEQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABIAAAAAAACAPwAAAABuAAAADQAAAAAAAAATAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAABUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABgA AAAAAACAPwAAAABuAAAADQAAAAAAAAAZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABsAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAfAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAIAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAiAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAIwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAlAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAACcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAoAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACoA AAAAAACAPwAAAABuAAAADQAAAAAAAAArAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC0AAAAAAACAPwAAAABuAAAA DQAAAAAAAAAuAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAxAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAMgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADMAAAAAAACAPwAAAABuAAAADQAAAAAAAAA0AAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAANQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADYAAAAAAACAPwAAAABuAAAADQAAAAAAAAA3AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAADkAAAAAAACAPwAAAABuAAAADQAAAAAAAAA6AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADwA AAAAAACAPwAAAABuAAAADQAAAAAAAAA9AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD8AAAAAAACAPwAAAABuAAAA DQAAAAAAAABAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEIAAAAAAACAPwAAAABuAAAADQAAAAAAAABDAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAARAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEUAAAAAAACAPwAAAABuAAAADQAAAAAAAABGAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAARwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEgAAAAAAACAPwAAAABuAAAADQAAAAAAAABJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAEsAAAAAAACAPwAAAABuAAAADQAAAAAAAABMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE4A AAAAAACAPwAAAABuAAAADQAAAAAAAABPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFEAAAAAAACAPwAAAABuAAAA DQAAAAAAAABSAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFQAAAAAAACAPwAAAABuAAAADQAAAAAAAABVAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAVgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFcAAAAAAACAPwAAAABuAAAADQAAAAAAAABYAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAWQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFoAAAAAAACAPwAAAABuAAAADQAAAAAAAABbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAF0AAAAAAACAPwAAAABuAAAADQAAAAAAAABeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGAA AAAAAACAPwAAAABuAAAADQAAAAAAAABhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGMAAAAAAACAPwAAAAACAAAA AAAAAAAAAAABAAAAAwsAAAAAAABkAAAAHgAAAAAAAAAnAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAAAwAAAAAAAAAtLS1nAAAAAAAAAAAAAABo AAAACgAAAAAAAAAAAAAAAAAAAAAAaQAAABIAAAAAAAAAAAAAAEA/AABAPwAAAD8AAEA/agAAABEAAAAAAAAAAAAAgD4AAAA/AABAPwAAgD5rAAAAEQAAAAAA AAAAAACAPgAAAD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABtAAAABAAA AAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbgAAAA0AAAAAAAAAAAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAAEAAAAAAACAPwAAAABuAAAADQAAAAAAAAACAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAQAAAAAAACAPwAA AABuAAAADQAAAAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAI AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAoAAAAAAACAPwAAAABuAAAADQAAAAAAAAALAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAADAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADwAAAAAA AIA/AAAAAG4AAAANAAAAAAAAABAAAAAAAACAPwAAAABuAAAADQAAAAAAAAARAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAABMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABYAAAAAAACAPwAA AABuAAAADQAAAAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAa AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAdAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAHgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAACIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAACUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAmAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACgAAAAAAACAPwAA AABuAAAADQAAAAAAAAApAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAs AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAvAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAMAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAyAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMwAAAAAA AIA/AAAAAG4AAAANAAAAAAAAADQAAAAAAACAPwAAAABuAAAADQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAADcAAAAAAACAPwAAAABuAAAADQAAAAAAAAA4AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADoAAAAAAACAPwAA AABuAAAADQAAAAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD0AAAAAAACAPwAAAABuAAAADQAAAAAAAAA+ AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEAAAAAAAACAPwAAAABuAAAADQAAAAAAAABBAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAQgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEMAAAAAAACAPwAAAABuAAAADQAAAAAAAABEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAEYAAAAAAACAPwAAAABuAAAADQAAAAAAAABHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAEkAAAAAAACAPwAAAABuAAAADQAAAAAAAABKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEwAAAAAAACAPwAA AABuAAAADQAAAAAAAABNAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE8AAAAAAACAPwAAAABuAAAADQAAAAAAAABQ AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFIAAAAAAACAPwAAAABuAAAADQAAAAAAAABTAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAVAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFUAAAAAAACAPwAAAABuAAAADQAAAAAAAABWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVwAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAFgAAAAAAACAPwAAAABuAAAADQAAAAAAAABZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAFsAAAAAAACAPwAAAABuAAAADQAAAAAAAABcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF4AAAAAAACAPwAA AABuAAAADQAAAAAAAABfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGEAAAAAAACAPwAAAABuAAAADQAAAAAAAABi AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/AAAAAAIAAAAAAAAAAAAAAAEAAAADCwAAAAAAAGQAAAAeAAAAAAAAACgAAAAAAAAAgD8AAAAAAAAA AAAAAAAAAAAAAAAAAGYAAAADAAAAAAAAAC0tLWcAAAAAAAAAAAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAAAABpAAAAEgAAAAAAAAAAAAAAQD8AAEA/AAAAPwAA QD9qAAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/AACAPmsAAAARAAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAA AABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAA AAAAAAAAAABuAAAADQAAAAAAAAAAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAIAAAAAAACAPwAAAABuAAAADQAA AAAAAAADAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAGAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAABwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA CgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAA4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABEAAAAA AACAPwAAAABuAAAADQAAAAAAAAASAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABQAAAAAAACAPwAAAABuAAAADQAA AAAAAAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAYAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA HAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAACAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACMAAAAA AACAPwAAAABuAAAADQAAAAAAAAAkAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACYAAAAAAACAPwAAAABuAAAADQAA AAAAAAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAqAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAtAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA LgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAADIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAzAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADUAAAAA AACAPwAAAABuAAAADQAAAAAAAAA2AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADgAAAAAAACAPwAAAABuAAAADQAA AAAAAAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADsAAAAAAACAPwAAAABuAAAADQAAAAAAAAA8AAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD4AAAAAAACAPwAAAABuAAAADQAAAAAAAAA/AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA QAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEEAAAAAAACAPwAAAABuAAAADQAAAAAAAABCAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAEQAAAAAAACAPwAAAABuAAAADQAAAAAAAABFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEcAAAAA AACAPwAAAABuAAAADQAAAAAAAABIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEoAAAAAAACAPwAAAABuAAAADQAA AAAAAABLAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE0AAAAAAACAPwAAAABuAAAADQAAAAAAAABOAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAATwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFAAAAAAAACAPwAAAABuAAAADQAAAAAAAABRAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA UgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFMAAAAAAACAPwAAAABuAAAADQAAAAAAAABUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAFYAAAAAAACAPwAAAABuAAAADQAAAAAAAABXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFkAAAAA AACAPwAAAABuAAAADQAAAAAAAABaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFwAAAAAAACAPwAAAABuAAAADQAA AAAAAABdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF8AAAAAAACAPwAAAABuAAAADQAAAAAAAABgAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGIAAAAAAACAPwAAAABuAAAADQAAAAAAAABjAAAAAAAAgD8AAAAAAgAAAAAAAAAAAAAA AQAAAAMLAAAAAAAAZAAAAB4AAAAAAAAAKQAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAMAAAAAAAAALS0tZwAAAAAAAAAAAAAAaAAAAAoAAAAA AAAAAAAAAAAAAAAAAGkAAAASAAAAAAAAAAAAAABAPwAAQD8AAAA/AABAP2oAAAARAAAAAAAAAAAAAIA+AAAAPwAAQD8AAIA+awAAABEAAAAAAAAAAAAAgD4A AAA/AACAPgAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbQAAAAQAAAAAAAAAAAAA AG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG4AAAANAAAAAAAAAAAAAAAAAACAPwAAAABuAAAADQAAAAAAAAABAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAAgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAEAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAABQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAAkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AAwAAAAAAACAPwAAAABuAAAADQAAAAAAAAANAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA8AAAAAAACAPwAAAABu AAAADQAAAAAAAAAQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABIAAAAAAACAPwAAAABuAAAADQAAAAAAAAATAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAFAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAWAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAFwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAABsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AB4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACEAAAAAAACAPwAAAABu AAAADQAAAAAAAAAiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAlAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAJgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAoAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAKQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACoAAAAAAACAPwAAAABuAAAADQAAAAAAAAArAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAC0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAuAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ADAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAxAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADMAAAAAAACAPwAAAABu AAAADQAAAAAAAAA0AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADYAAAAAAACAPwAAAABuAAAADQAAAAAAAAA3AAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAOAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADkAAAAAAACAPwAAAABuAAAADQAAAAAAAAA6AAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAOwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADwAAAAAAACAPwAAAABuAAAADQAAAAAAAAA9AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAD8AAAAAAACAPwAAAABuAAAADQAAAAAAAABAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AEIAAAAAAACAPwAAAABuAAAADQAAAAAAAABDAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEUAAAAAAACAPwAAAABu AAAADQAAAAAAAABGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEgAAAAAAACAPwAAAABuAAAADQAAAAAAAABJAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAASgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEsAAAAAAACAPwAAAABuAAAADQAAAAAAAABMAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAATQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE4AAAAAAACAPwAAAABuAAAADQAAAAAAAABPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAFEAAAAAAACAPwAAAABuAAAADQAAAAAAAABSAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AFQAAAAAAACAPwAAAABuAAAADQAAAAAAAABVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFcAAAAAAACAPwAAAABu AAAADQAAAAAAAABYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFoAAAAAAACAPwAAAABuAAAADQAAAAAAAABbAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAXAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF0AAAAAAACAPwAAAABuAAAADQAAAAAAAABeAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAXwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGAAAAAAAACAPwAAAABuAAAADQAAAAAAAABhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAGMAAAAAAACAPwAAAAACAAAAAAAAAAAAAAABAAAAAwsAAAAAAABkAAAAHgAAAAAAAAAqAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAA AAAAAABmAAAAAwAAAAAAAAAtLS1nAAAAAAAAAAAAAABoAAAACgAAAAAAAAAAAAAAAAAAAAAAaQAAABIAAAAAAAAAAAAAAEA/AABAPwAAAD8AAEA/agAAABEA AAAAAAAAAAAAgD4AAAA/AABAPwAAgD5rAAAAEQAAAAAAAAAAAACAPgAAAD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbAAAABQA AAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAA bgAAAA0AAAAAAAAAAAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAEAAAAAAACAPwAAAABuAAAADQAAAAAAAAACAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAAQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAAcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAoAAAAAAACA PwAAAABuAAAADQAAAAAAAAALAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA0AAAAAAACAPwAAAABuAAAADQAAAAAA AAAOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABAAAAAAAACAPwAAAABuAAAADQAAAAAAAAARAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAEgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAABYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAABkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABwAAAAAAACA PwAAAABuAAAADQAAAAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB8AAAAAAACAPwAAAABuAAAADQAAAAAA AAAgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAjAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAJAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAmAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAACgAAAAAAACAPwAAAABuAAAADQAAAAAAAAApAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAACsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC4AAAAAAACA PwAAAABuAAAADQAAAAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADEAAAAAAACAPwAAAABuAAAADQAAAAAA AAAyAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADQAAAAAAACAPwAAAABuAAAADQAAAAAAAAA1AAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAANgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADcAAAAAAACAPwAAAABuAAAADQAAAAAAAAA4AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAADoAAAAAAACAPwAAAABuAAAADQAAAAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAD0AAAAAAACAPwAAAABuAAAADQAAAAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEAAAAAAAACA PwAAAABuAAAADQAAAAAAAABBAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEMAAAAAAACAPwAAAABuAAAADQAAAAAA AABEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEYAAAAAAACAPwAAAABuAAAADQAAAAAAAABHAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAASAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEkAAAAAAACAPwAAAABuAAAADQAAAAAAAABKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAEwAAAAAAACAPwAAAABuAAAADQAAAAAAAABNAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAE8AAAAAAACAPwAAAABuAAAADQAAAAAAAABQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFIAAAAAAACA PwAAAABuAAAADQAAAAAAAABTAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFUAAAAAAACAPwAAAABuAAAADQAAAAAA AABWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFgAAAAAAACAPwAAAABuAAAADQAAAAAAAABZAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAWgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFsAAAAAAACAPwAAAABuAAAADQAAAAAAAABcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAF4AAAAAAACAPwAAAABuAAAADQAAAAAAAABfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAGEAAAAAAACAPwAAAABuAAAADQAAAAAAAABiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/AAAAAAIAAAAAAAAAAAAAAAEAAAADCwAA AAAAAGQAAAAeAAAAAAAAACsAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAGYAAAADAAAAAAAAAC0tLWcAAAAAAAAAAAAAAGgAAAAKAAAAAAAAAAAAAAAA AAAAAABpAAAAEgAAAAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/AACAPmsAAAARAAAAAAAAAAAAAIA+AAAAPwAAgD4A AAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAA AAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABuAAAADQAAAAAAAAAAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAAIAAAAAAACAPwAAAABuAAAADQAAAAAAAAADAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAUA AAAAAACAPwAAAABuAAAADQAAAAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAgAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAMAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAADQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAPAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAEAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABEAAAAAAACAPwAAAABuAAAADQAAAAAAAAASAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAABQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABcA AAAAAACAPwAAAABuAAAADQAAAAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABoAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAeAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAHwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAhAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAIgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAkAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAACYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACkA AAAAAACAPwAAAABuAAAADQAAAAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACwAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAtAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAwAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAMQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAzAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAANAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADUAAAAAAACAPwAAAABuAAAADQAAAAAAAAA2AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAADgAAAAAAACAPwAAAABuAAAADQAAAAAAAAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADsA AAAAAACAPwAAAABuAAAADQAAAAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD4AAAAAAACAPwAAAABuAAAA DQAAAAAAAAA/AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEEAAAAAAACAPwAAAABuAAAADQAAAAAAAABCAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAQwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEQAAAAAAACAPwAAAABuAAAADQAAAAAAAABFAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAARgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEcAAAAAAACAPwAAAABuAAAADQAAAAAAAABIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAEoAAAAAAACAPwAAAABuAAAADQAAAAAAAABLAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE0A AAAAAACAPwAAAABuAAAADQAAAAAAAABOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFAAAAAAAACAPwAAAABuAAAA DQAAAAAAAABRAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFMAAAAAAACAPwAAAABuAAAADQAAAAAAAABUAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAVQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFYAAAAAAACAPwAAAABuAAAADQAAAAAAAABXAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAWAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFkAAAAAAACAPwAAAABuAAAADQAAAAAAAABaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAFwAAAAAAACAPwAAAABuAAAADQAAAAAAAABdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF8A AAAAAACAPwAAAABuAAAADQAAAAAAAABgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGIAAAAAAACAPwAAAABuAAAA DQAAAAAAAABjAAAAAAAAgD8AAAAAAgAAAAAAAAAAAAAAAQAAAAMLAAAAAAAAZAAAAB4AAAAAAAAALAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAZgAA AAMAAAAAAAAALS0tZwAAAAAAAAAAAAAAaAAAAAoAAAAAAAAAAAAAAAAAAAAAAGkAAAASAAAAAAAAAAAAAABAPwAAQD8AAAA/AABAP2oAAAARAAAAAAAAAAAA AIA+AAAAPwAAQD8AAIA+awAAABEAAAAAAAAAAAAAgD4AAAA/AACAPgAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAGwAAAAUAAAAAAAAAAAA AADNzMw9AACAPwAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG4AAAANAAAA AAAAAAAAAAAAAACAPwAAAABuAAAADQAAAAAAAAABAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAMAAAAAAACAPwAA AABuAAAADQAAAAAAAAAEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAH AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAKAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAACwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAwAAAAAAACAPwAAAABuAAAADQAAAAAAAAANAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAA8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAABIAAAAAAACAPwAAAABuAAAADQAAAAAAAAATAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABUAAAAAAACAPwAA AABuAAAADQAAAAAAAAAWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAZ AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAcAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAHQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAACEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAACQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAlAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACcAAAAAAACAPwAA AABuAAAADQAAAAAAAAAoAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAr AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAuAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAALwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAxAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAADMAAAAAAACAPwAAAABuAAAADQAAAAAAAAA0AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAADYAAAAAAACAPwAAAABuAAAADQAAAAAAAAA3AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADkAAAAAAACAPwAA AABuAAAADQAAAAAAAAA6AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADwAAAAAAACAPwAAAABuAAAADQAAAAAAAAA9 AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD8AAAAAAACAPwAAAABuAAAADQAAAAAAAABAAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAQQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEIAAAAAAACAPwAAAABuAAAADQAAAAAAAABDAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAEUAAAAAAACAPwAAAABuAAAADQAAAAAAAABGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAEgAAAAAAACAPwAAAABuAAAADQAAAAAAAABJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEsAAAAAAACAPwAA AABuAAAADQAAAAAAAABMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE4AAAAAAACAPwAAAABuAAAADQAAAAAAAABP AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFEAAAAAAACAPwAAAABuAAAADQAAAAAAAABSAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAUwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFQAAAAAAACAPwAAAABuAAAADQAAAAAAAABVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAFcAAAAAAACAPwAAAABuAAAADQAAAAAAAABYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAFoAAAAAAACAPwAAAABuAAAADQAAAAAAAABbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF0AAAAAAACAPwAA AABuAAAADQAAAAAAAABeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGAAAAAAAACAPwAAAABuAAAADQAAAAAAAABh AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGMAAAAAAACAPwAAAAACAAAAAAAAAAAAAAABAAAAAwsAAAAAAABkAAAA HgAAAAAAAAAtAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAAAwAAAAAAAAAtLS1nAAAAAAAAAAAAAABoAAAACgAAAAAAAAAAAAAAAAAAAAAAaQAA ABIAAAAAAAAAAAAAAEA/AABAPwAAAD8AAEA/agAAABEAAAAAAAAAAAAAgD4AAAA/AABAPwAAgD5rAAAAEQAAAAAAAAAAAACAPgAAAD8AAIA+AAAAAGwAAAAU AAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAA AG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbgAAAA0AAAAAAAAAAAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAEAAAAAAACAPwAAAABuAAAADQAA AAAAAAACAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAFAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAABgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA CQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAoAAAAAAACAPwAAAABuAAAADQAAAAAAAAALAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAA0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABAAAAAA AACAPwAAAABuAAAADQAAAAAAAAARAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABMAAAAAAACAPwAAAABuAAAADQAA AAAAAAAUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAXAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAGAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA GwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAB8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACIAAAAA AACAPwAAAABuAAAADQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACUAAAAAAACAPwAAAABuAAAADQAA AAAAAAAmAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACgAAAAAAACAPwAAAABuAAAADQAAAAAAAAApAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAKgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA LQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAADEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAyAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADQAAAAA AACAPwAAAABuAAAADQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADcAAAAAAACAPwAAAABuAAAADQAA AAAAAAA4AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADoAAAAAAACAPwAAAABuAAAADQAAAAAAAAA7AAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAPAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD0AAAAAAACAPwAAAABuAAAADQAAAAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA PwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEAAAAAAAACAPwAAAABuAAAADQAAAAAAAABBAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAEMAAAAAAACAPwAAAABuAAAADQAAAAAAAABEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEYAAAAA AACAPwAAAABuAAAADQAAAAAAAABHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEkAAAAAAACAPwAAAABuAAAADQAA AAAAAABKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEwAAAAAAACAPwAAAABuAAAADQAAAAAAAABNAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAATgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE8AAAAAAACAPwAAAABuAAAADQAAAAAAAABQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA UQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFIAAAAAAACAPwAAAABuAAAADQAAAAAAAABTAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAFUAAAAAAACAPwAAAABuAAAADQAAAAAAAABWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFgAAAAA AACAPwAAAABuAAAADQAAAAAAAABZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFsAAAAAAACAPwAAAABuAAAADQAA AAAAAABcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF4AAAAAAACAPwAAAABuAAAADQAAAAAAAABfAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAYAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGEAAAAAAACAPwAAAABuAAAADQAAAAAAAABiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA YwAAAAAAAIA/AAAAAAIAAAAAAAAAAAAAAAEAAAADCwAAAAAAAGQAAAAeAAAAAAAAAC4AAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAGYAAAADAAAAAAAA AC0tLWcAAAAAAAAAAAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAAAABpAAAAEgAAAAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACAPgAAAD8A AEA/AACAPmsAAAARAAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAA gD8AAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABuAAAADQAAAAAAAAAAAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAIAAAAAAACAPwAAAABuAAAADQAAAAAAAAADAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAABAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAAgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AAsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA4AAAAAAACAPwAAAABu AAAADQAAAAAAAAAPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABEAAAAAAACAPwAAAABuAAAADQAAAAAAAAASAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAVAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAFgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAABoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AB0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACAAAAAAAACAPwAAAABu AAAADQAAAAAAAAAhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAkAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAnAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAKAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAACwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAtAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AC8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADIAAAAAAACAPwAAAABu AAAADQAAAAAAAAAzAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADUAAAAAAACAPwAAAABuAAAADQAAAAAAAAA2AAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAANwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADgAAAAAAACAPwAAAABuAAAADQAAAAAAAAA5AAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAOgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADsAAAAAAACAPwAAAABuAAAADQAAAAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAD4AAAAAAACAPwAAAABuAAAADQAAAAAAAAA/AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AEEAAAAAAACAPwAAAABuAAAADQAAAAAAAABCAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEQAAAAAAACAPwAAAABu AAAADQAAAAAAAABFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEcAAAAAAACAPwAAAABuAAAADQAAAAAAAABIAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAASQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEoAAAAAAACAPwAAAABuAAAADQAAAAAAAABLAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAATAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE0AAAAAAACAPwAAAABuAAAADQAAAAAAAABOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAFAAAAAAAACAPwAAAABuAAAADQAAAAAAAABRAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AFMAAAAAAACAPwAAAABuAAAADQAAAAAAAABUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFYAAAAAAACAPwAAAABu AAAADQAAAAAAAABXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFkAAAAAAACAPwAAAABuAAAADQAAAAAAAABaAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFwAAAAAAACAPwAAAABuAAAADQAAAAAAAABdAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAXgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF8AAAAAAACAPwAAAABuAAAADQAAAAAAAABgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAGIAAAAAAACAPwAAAABuAAAADQAAAAAAAABjAAAAAAAAgD8AAAAAAgAAAAAAAAAAAAAAAQAAAAMLAAAAAAAAZAAAAB4AAAAAAAAA LwAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAMAAAAAAAAALS0tZwAAAAAAAAAAAAAAaAAAAAoAAAAAAAAAAAAAAAAAAAAAAGkAAAASAAAAAAAA AAAAAABAPwAAQD8AAAA/AABAP2oAAAARAAAAAAAAAAAAAIA+AAAAPwAAQD8AAIA+awAAABEAAAAAAAAAAAAAgD4AAAA/AACAPgAAAABsAAAAFAAAAAAAAAAA AAAAzczMPQAAgD8AAAAAAAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAA AAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG4AAAANAAAAAAAAAAAAAAAAAACAPwAAAABuAAAADQAAAAAAAAABAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAAMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAAYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAkAAAAAAACA PwAAAABuAAAADQAAAAAAAAAKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAwAAAAAAACAPwAAAABuAAAADQAAAAAA AAANAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAQAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAEQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABIAAAAAAACAPwAAAABuAAAADQAAAAAAAAATAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAABUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAABgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABsAAAAAAACA PwAAAABuAAAADQAAAAAAAAAcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB4AAAAAAACAPwAAAABuAAAADQAAAAAA AAAfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAiAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAIwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAlAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAACcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAoAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAACoAAAAAAACAPwAAAABuAAAADQAAAAAAAAArAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC0AAAAAAACA PwAAAABuAAAADQAAAAAAAAAuAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADAAAAAAAACAPwAAAABuAAAADQAAAAAA AAAxAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADMAAAAAAACAPwAAAABuAAAADQAAAAAAAAA0AAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAANQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADYAAAAAAACAPwAAAABuAAAADQAAAAAAAAA3AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAADkAAAAAAACAPwAAAABuAAAADQAAAAAAAAA6AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAADwAAAAAAACAPwAAAABuAAAADQAAAAAAAAA9AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD8AAAAAAACA PwAAAABuAAAADQAAAAAAAABAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEIAAAAAAACAPwAAAABuAAAADQAAAAAA AABDAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEUAAAAAAACAPwAAAABuAAAADQAAAAAAAABGAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAARwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEgAAAAAAACAPwAAAABuAAAADQAAAAAAAABJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAEsAAAAAAACAPwAAAABuAAAADQAAAAAAAABMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAE4AAAAAAACAPwAAAABuAAAADQAAAAAAAABPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFEAAAAAAACA PwAAAABuAAAADQAAAAAAAABSAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFQAAAAAAACAPwAAAABuAAAADQAAAAAA AABVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFcAAAAAAACAPwAAAABuAAAADQAAAAAAAABYAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAWQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFoAAAAAAACAPwAAAABuAAAADQAAAAAAAABbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAF0AAAAAAACAPwAAAABuAAAADQAAAAAAAABeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAGAAAAAAAACAPwAAAABuAAAADQAAAAAAAABhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGMAAAAAAACA PwAAAAACAAAAAAAAAAAAAAABAAAAAwsAAAAAAABkAAAAHgAAAAAAAAAwAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAAAwAAAAAAAAAtLS1nAAAA AAAAAAAAAABoAAAACgAAAAAAAAAAAAAAAAAAAAAAaQAAABIAAAAAAAAAAAAAAEA/AABAPwAAAD8AAEA/agAAABEAAAAAAAAAAAAAgD4AAAA/AABAPwAAgD5r AAAAEQAAAAAAAAAAAACAPgAAAD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAA AABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbgAAAA0AAAAAAAAAAAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAAEAAAAAAACAPwAAAABuAAAADQAAAAAAAAACAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAQA AAAAAACAPwAAAABuAAAADQAAAAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAcAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAoAAAAAAACAPwAAAABuAAAADQAAAAAAAAALAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAOAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAADwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABAAAAAAAACAPwAAAABuAAAADQAAAAAAAAARAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAABMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABYA AAAAAACAPwAAAABuAAAADQAAAAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABkAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAdAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAgAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAIQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAACUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAmAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACgA AAAAAACAPwAAAABuAAAADQAAAAAAAAApAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACsAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAvAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAyAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAMwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADQAAAAAAACAPwAAAABuAAAADQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAADcAAAAAAACAPwAAAABuAAAADQAAAAAAAAA4AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADoA AAAAAACAPwAAAABuAAAADQAAAAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD0AAAAAAACAPwAAAABuAAAA DQAAAAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEAAAAAAAACAPwAAAABuAAAADQAAAAAAAABBAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEMAAAAAAACAPwAAAABuAAAADQAAAAAAAABEAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAARQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEYAAAAAAACAPwAAAABuAAAADQAAAAAAAABHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAEkAAAAAAACAPwAAAABuAAAADQAAAAAAAABKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEwA AAAAAACAPwAAAABuAAAADQAAAAAAAABNAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE8AAAAAAACAPwAAAABuAAAA DQAAAAAAAABQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFIAAAAAAACAPwAAAABuAAAADQAAAAAAAABTAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFUAAAAAAACAPwAAAABuAAAADQAAAAAAAABWAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAVwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFgAAAAAAACAPwAAAABuAAAADQAAAAAAAABZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAFsAAAAAAACAPwAAAABuAAAADQAAAAAAAABcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF4A AAAAAACAPwAAAABuAAAADQAAAAAAAABfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGEAAAAAAACAPwAAAABuAAAA DQAAAAAAAABiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/AAAAAAIAAAAAAAAAAAAAAAEAAAADCwAAAAAAAGQAAAAeAAAAAAAAADEAAAAAAAAA gD8AAAAAAAAAAAAAAAAAAAAAAAAAAGYAAAADAAAAAAAAAC0tLWcAAAAAAAAAAAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAAAABpAAAAEgAAAAAAAAAAAAAAQD8A AEA/AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/AACAPmsAAAARAAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0A AIA/AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAA AG0AAAAEAAAAAAAAAAAAAABuAAAADQAAAAAAAAAAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAIAAAAAAACAPwAA AABuAAAADQAAAAAAAAADAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAG AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAJAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAACgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAA4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAABEAAAAAAACAPwAAAABuAAAADQAAAAAAAAASAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABQAAAAAAACAPwAA AABuAAAADQAAAAAAAAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAY AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAbAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAHAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHwAAAAAA AIA/AAAAAG4AAAANAAAAAAAAACAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAACMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAkAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACYAAAAAAACAPwAA AABuAAAADQAAAAAAAAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAq AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAtAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAALgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAADIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAzAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAADUAAAAAAACAPwAAAABuAAAADQAAAAAAAAA2AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADgAAAAAAACAPwAA AABuAAAADQAAAAAAAAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADsAAAAAAACAPwAAAABuAAAADQAAAAAAAAA8 AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD4AAAAAAACAPwAAAABuAAAADQAAAAAAAAA/AAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAQAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEEAAAAAAACAPwAAAABuAAAADQAAAAAAAABCAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQwAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAEQAAAAAAACAPwAAAABuAAAADQAAAAAAAABFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAEcAAAAAAACAPwAAAABuAAAADQAAAAAAAABIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEoAAAAAAACAPwAA AABuAAAADQAAAAAAAABLAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE0AAAAAAACAPwAAAABuAAAADQAAAAAAAABO AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFAAAAAAAACAPwAAAABuAAAADQAAAAAAAABRAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAUgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFMAAAAAAACAPwAAAABuAAAADQAAAAAAAABUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAFYAAAAAAACAPwAAAABuAAAADQAAAAAAAABXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAFkAAAAAAACAPwAAAABuAAAADQAAAAAAAABaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFwAAAAAAACAPwAA AABuAAAADQAAAAAAAABdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF8AAAAAAACAPwAAAABuAAAADQAAAAAAAABg AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGIAAAAAAACAPwAAAABuAAAADQAAAAAAAABjAAAAAAAAgD8AAAAAAgAA AAAAAAAAAAAAAQAAAAMLAAAAAAAAZAAAAB4AAAAAAAAAMgAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAMAAAAAAAAALS0tZwAAAAAAAAAAAAAA aAAAAAoAAAAAAAAAAAAAAAAAAAAAAGkAAAASAAAAAAAAAAAAAABAPwAAQD8AAAA/AABAP2oAAAARAAAAAAAAAAAAAIA+AAAAPwAAQD8AAIA+awAAABEAAAAA AAAAAAAAgD4AAAA/AACAPgAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbQAAAAQA AAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG4AAAANAAAAAAAAAAAAAAAAAACAPwAAAABuAAAADQAA AAAAAAABAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAEAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAABQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA CAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAAwAAAAAAACAPwAAAABuAAAADQAAAAAAAAANAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA8AAAAA AACAPwAAAABuAAAADQAAAAAAAAAQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABIAAAAAAACAPwAAAABuAAAADQAA AAAAAAATAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAWAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAFwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA GgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAB4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACEAAAAA AACAPwAAAABuAAAADQAAAAAAAAAiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACQAAAAAAACAPwAAAABuAAAADQAA AAAAAAAlAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAoAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAKQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACoAAAAAAACAPwAAAABuAAAADQAAAAAAAAArAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA LAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAuAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAADAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAxAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADMAAAAA AACAPwAAAABuAAAADQAAAAAAAAA0AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADYAAAAAAACAPwAAAABuAAAADQAA AAAAAAA3AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADkAAAAAAACAPwAAAABuAAAADQAAAAAAAAA6AAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAOwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADwAAAAAAACAPwAAAABuAAAADQAAAAAAAAA9AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA PgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD8AAAAAAACAPwAAAABuAAAADQAAAAAAAABAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAEIAAAAAAACAPwAAAABuAAAADQAAAAAAAABDAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEUAAAAA AACAPwAAAABuAAAADQAAAAAAAABGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEgAAAAAAACAPwAAAABuAAAADQAA AAAAAABJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEsAAAAAAACAPwAAAABuAAAADQAAAAAAAABMAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAATQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE4AAAAAAACAPwAAAABuAAAADQAAAAAAAABPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA UAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFEAAAAAAACAPwAAAABuAAAADQAAAAAAAABSAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAFQAAAAAAACAPwAAAABuAAAADQAAAAAAAABVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFcAAAAA AACAPwAAAABuAAAADQAAAAAAAABYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFoAAAAAAACAPwAAAABuAAAADQAA AAAAAABbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF0AAAAAAACAPwAAAABuAAAADQAAAAAAAABeAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAXwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGAAAAAAAACAPwAAAABuAAAADQAAAAAAAABhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA YgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGMAAAAAAACAPwAAAAACAAAAAAAAAAAAAAABAAAAAwsAAAAAAABkAAAAHgAAAAAAAAAzAAAAAAAAAIA/AAAAAAAA AAAAAAAAAAAAAAAAAABmAAAAAwAAAAAAAAAtLS1nAAAAAAAAAAAAAABoAAAACgAAAAAAAAAAAAAAAAAAAAAAaQAAABIAAAAAAAAAAAAAAEA/AABAPwAAAD8A AEA/agAAABEAAAAAAAAAAAAAgD4AAAA/AABAPwAAgD5rAAAAEQAAAAAAAAAAAACAPgAAAD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAA AAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAA AAAAAAAAAAAAbgAAAA0AAAAAAAAAAAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAEAAAAAAACAPwAAAABuAAAADQAAAAAAAAACAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAAwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAAcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AAoAAAAAAACAPwAAAABuAAAADQAAAAAAAAALAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA0AAAAAAACAPwAAAABu AAAADQAAAAAAAAAOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABAAAAAAAACAPwAAAABuAAAADQAAAAAAAAARAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAEgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAUAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAFQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAABkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ABwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB8AAAAAAACAPwAAAABu AAAADQAAAAAAAAAgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAjAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAJAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAmAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAJwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACgAAAAAAACAPwAAAABuAAAADQAAAAAAAAApAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAACsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AC4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADEAAAAAAACAPwAAAABu AAAADQAAAAAAAAAyAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADQAAAAAAACAPwAAAABuAAAADQAAAAAAAAA1AAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAANgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADcAAAAAAACAPwAAAABuAAAADQAAAAAAAAA4AAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAOQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADoAAAAAAACAPwAAAABuAAAADQAAAAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAD0AAAAAAACAPwAAAABuAAAADQAAAAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AEAAAAAAAACAPwAAAABuAAAADQAAAAAAAABBAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEMAAAAAAACAPwAAAABu AAAADQAAAAAAAABEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEYAAAAAAACAPwAAAABuAAAADQAAAAAAAABHAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAASAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEkAAAAAAACAPwAAAABuAAAADQAAAAAAAABKAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAASwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEwAAAAAAACAPwAAAABuAAAADQAAAAAAAABNAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAE8AAAAAAACAPwAAAABuAAAADQAAAAAAAABQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AFIAAAAAAACAPwAAAABuAAAADQAAAAAAAABTAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFUAAAAAAACAPwAAAABu AAAADQAAAAAAAABWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFgAAAAAAACAPwAAAABuAAAADQAAAAAAAABZAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAWgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFsAAAAAAACAPwAAAABuAAAADQAAAAAAAABcAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAXQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF4AAAAAAACAPwAAAABuAAAADQAAAAAAAABfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAGEAAAAAAACAPwAAAABuAAAADQAAAAAAAABiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/AAAAAAIAAAAAAAAAAAAA AAEAAAADCwAAAAAAAGQAAAAeAAAAAAAAADQAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAGYAAAADAAAAAAAAAC0tLWcAAAAAAAAAAAAAAGgAAAAKAAAA AAAAAAAAAAAAAAAAAABpAAAAEgAAAAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/AACAPmsAAAARAAAAAAAAAAAAAIA+ AAAAPwAAgD4AAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAG0AAAAEAAAAAAAAAAAA AABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABuAAAADQAAAAAAAAAAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAAIAAAAAAACAPwAAAABuAAAADQAAAAAAAAADAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAAUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAgAAAAAAACA PwAAAABuAAAADQAAAAAAAAAJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAsAAAAAAACAPwAAAABuAAAADQAAAAAA AAAMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAPAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAEAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABEAAAAAAACAPwAAAABuAAAADQAAAAAAAAASAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAABQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAABcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABoAAAAAAACA PwAAAABuAAAADQAAAAAAAAAbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB0AAAAAAACAPwAAAABuAAAADQAAAAAA AAAeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAhAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAIgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAkAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAACYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAACkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACwAAAAAAACA PwAAAABuAAAADQAAAAAAAAAtAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC8AAAAAAACAPwAAAABuAAAADQAAAAAA AAAwAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAzAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAANAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADUAAAAAAACAPwAAAABuAAAADQAAAAAAAAA2AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAADgAAAAAAACAPwAAAABuAAAADQAAAAAAAAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAADsAAAAAAACAPwAAAABuAAAADQAAAAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD4AAAAAAACA PwAAAABuAAAADQAAAAAAAAA/AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEEAAAAAAACAPwAAAABuAAAADQAAAAAA AABCAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEQAAAAAAACAPwAAAABuAAAADQAAAAAAAABFAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAARgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEcAAAAAAACAPwAAAABuAAAADQAAAAAAAABIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAEoAAAAAAACAPwAAAABuAAAADQAAAAAAAABLAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAE0AAAAAAACAPwAAAABuAAAADQAAAAAAAABOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFAAAAAAAACA PwAAAABuAAAADQAAAAAAAABRAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFMAAAAAAACAPwAAAABuAAAADQAAAAAA AABUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFYAAAAAAACAPwAAAABuAAAADQAAAAAAAABXAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAWAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFkAAAAAAACAPwAAAABuAAAADQAAAAAAAABaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAFwAAAAAAACAPwAAAABuAAAADQAAAAAAAABdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAF8AAAAAAACAPwAAAABuAAAADQAAAAAAAABgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGIAAAAAAACA PwAAAABuAAAADQAAAAAAAABjAAAAAAAAgD8AAAAAAgAAAAAAAAAAAAAAAQAAAAMLAAAAAAAAZAAAAB4AAAAAAAAANQAAAAAAAACAPwAAAAAAAAAAAAAAAAAA AAAAAAAAZgAAAAMAAAAAAAAALS0tZwAAAAAAAAAAAAAAaAAAAAoAAAAAAAAAAAAAAAAAAAAAAGkAAAASAAAAAAAAAAAAAABAPwAAQD8AAAA/AABAP2oAAAAR AAAAAAAAAAAAAIA+AAAAPwAAQD8AAIA+awAAABEAAAAAAAAAAAAAgD4AAAA/AACAPgAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAGwAAAAU AAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAA AG4AAAANAAAAAAAAAAAAAAAAAACAPwAAAABuAAAADQAAAAAAAAABAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAMA AAAAAACAPwAAAABuAAAADQAAAAAAAAAEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAYAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAKAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAACwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAwAAAAAAACAPwAAAABuAAAADQAAAAAAAAANAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAADgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAABIAAAAAAACAPwAAAABuAAAADQAAAAAAAAATAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABUA AAAAAACAPwAAAABuAAAADQAAAAAAAAAWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABgAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAcAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAHQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAfAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAIAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAACQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAlAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACcA AAAAAACAPwAAAABuAAAADQAAAAAAAAAoAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACoAAAAAAACAPwAAAABuAAAA DQAAAAAAAAArAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAuAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAALwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAxAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAMgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADMAAAAAAACAPwAAAABuAAAADQAAAAAAAAA0AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAADYAAAAAAACAPwAAAABuAAAADQAAAAAAAAA3AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADkA AAAAAACAPwAAAABuAAAADQAAAAAAAAA6AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADwAAAAAAACAPwAAAABuAAAA DQAAAAAAAAA9AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD8AAAAAAACAPwAAAABuAAAADQAAAAAAAABAAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAQQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEIAAAAAAACAPwAAAABuAAAADQAAAAAAAABDAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAARAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEUAAAAAAACAPwAAAABuAAAADQAAAAAAAABGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAEgAAAAAAACAPwAAAABuAAAADQAAAAAAAABJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEsA AAAAAACAPwAAAABuAAAADQAAAAAAAABMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE4AAAAAAACAPwAAAABuAAAA DQAAAAAAAABPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFEAAAAAAACAPwAAAABuAAAADQAAAAAAAABSAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAUwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFQAAAAAAACAPwAAAABuAAAADQAAAAAAAABVAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAVgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFcAAAAAAACAPwAAAABuAAAADQAAAAAAAABYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAFoAAAAAAACAPwAAAABuAAAADQAAAAAAAABbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF0A AAAAAACAPwAAAABuAAAADQAAAAAAAABeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGAAAAAAAACAPwAAAABuAAAA DQAAAAAAAABhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGMAAAAAAACAPwAAAAACAAAAAAAAAAAAAAABAAAAAwsA AAAAAABkAAAAHgAAAAAAAAA2AAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAAAwAAAAAAAAAtLS1nAAAAAAAAAAAAAABoAAAACgAAAAAAAAAAAAAA AAAAAAAAaQAAABIAAAAAAAAAAAAAAEA/AABAPwAAAD8AAEA/agAAABEAAAAAAAAAAAAAgD4AAAA/AABAPwAAgD5rAAAAEQAAAAAAAAAAAACAPgAAAD8AAIA+ AAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQA AAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbgAAAA0AAAAAAAAAAAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAEAAAAAAACAPwAA AABuAAAADQAAAAAAAAACAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAF AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAIAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAACQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAoAAAAAAACAPwAAAABuAAAADQAAAAAAAAALAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAA0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAABAAAAAAAACAPwAAAABuAAAADQAAAAAAAAARAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABMAAAAAAACAPwAA AABuAAAADQAAAAAAAAAUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAX AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAaAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAGwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAB8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAACIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACUAAAAAAACAPwAA AABuAAAADQAAAAAAAAAmAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAp AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAsAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAALQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAADEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAyAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAADQAAAAAAACAPwAAAABuAAAADQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADcAAAAAAACAPwAA AABuAAAADQAAAAAAAAA4AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADoAAAAAAACAPwAAAABuAAAADQAAAAAAAAA7 AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD0AAAAAAACAPwAAAABuAAAADQAAAAAAAAA+AAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAPwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEAAAAAAAACAPwAAAABuAAAADQAAAAAAAABBAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAEMAAAAAAACAPwAAAABuAAAADQAAAAAAAABEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAEYAAAAAAACAPwAAAABuAAAADQAAAAAAAABHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEkAAAAAAACAPwAA AABuAAAADQAAAAAAAABKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEwAAAAAAACAPwAAAABuAAAADQAAAAAAAABN AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE8AAAAAAACAPwAAAABuAAAADQAAAAAAAABQAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAUQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFIAAAAAAACAPwAAAABuAAAADQAAAAAAAABTAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAFUAAAAAAACAPwAAAABuAAAADQAAAAAAAABWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAFgAAAAAAACAPwAAAABuAAAADQAAAAAAAABZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFsAAAAAAACAPwAA AABuAAAADQAAAAAAAABcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF4AAAAAAACAPwAAAABuAAAADQAAAAAAAABf AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGEAAAAAAACAPwAAAABuAAAADQAAAAAAAABiAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAYwAAAAAAAIA/AAAAAAIAAAAAAAAAAAAAAAEAAAADCwAAAAAAAGQAAAAeAAAAAAAAADcAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAGYA AAADAAAAAAAAAC0tLWcAAAAAAAAAAAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAAAABpAAAAEgAAAAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAAAAAAAAAA AACAPgAAAD8AAEA/AACAPmsAAAARAAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABsAAAAFAAAAAAAAAAA AAAAzczMPQAAgD8AAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABuAAAADQAA AAAAAAAAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAIAAAAAAACAPwAAAABuAAAADQAAAAAAAAADAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAABAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA BwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAAsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA4AAAAA AACAPwAAAABuAAAADQAAAAAAAAAPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABEAAAAAAACAPwAAAABuAAAADQAA AAAAAAASAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAVAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAFgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA GQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAB0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACAAAAAA AACAPwAAAABuAAAADQAAAAAAAAAhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACMAAAAAAACAPwAAAABuAAAADQAA AAAAAAAkAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAnAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAKAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA KwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAtAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAC8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADIAAAAA AACAPwAAAABuAAAADQAAAAAAAAAzAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADUAAAAAAACAPwAAAABuAAAADQAA AAAAAAA2AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADgAAAAAAACAPwAAAABuAAAADQAAAAAAAAA5AAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAOgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADsAAAAAAACAPwAAAABuAAAADQAAAAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA PQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD4AAAAAAACAPwAAAABuAAAADQAAAAAAAAA/AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAEEAAAAAAACAPwAAAABuAAAADQAAAAAAAABCAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEQAAAAA AACAPwAAAABuAAAADQAAAAAAAABFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEcAAAAAAACAPwAAAABuAAAADQAA AAAAAABIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEoAAAAAAACAPwAAAABuAAAADQAAAAAAAABLAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAATAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE0AAAAAAACAPwAAAABuAAAADQAAAAAAAABOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA TwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFAAAAAAAACAPwAAAABuAAAADQAAAAAAAABRAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAFMAAAAAAACAPwAAAABuAAAADQAAAAAAAABUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFYAAAAA AACAPwAAAABuAAAADQAAAAAAAABXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFkAAAAAAACAPwAAAABuAAAADQAA AAAAAABaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFwAAAAAAACAPwAAAABuAAAADQAAAAAAAABdAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAXgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF8AAAAAAACAPwAAAABuAAAADQAAAAAAAABgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA YQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGIAAAAAAACAPwAAAABuAAAADQAAAAAAAABjAAAAAAAAgD8AAAAAAgAAAAAAAAAAAAAAAQAAAAMLAAAAAAAAZAAA AB4AAAAAAAAAOAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAMAAAAAAAAALS0tZwAAAAAAAAAAAAAAaAAAAAoAAAAAAAAAAAAAAAAAAAAAAGkA AAASAAAAAAAAAAAAAABAPwAAQD8AAAA/AABAP2oAAAARAAAAAAAAAAAAAIA+AAAAPwAAQD8AAIA+awAAABEAAAAAAAAAAAAAgD4AAAA/AACAPgAAAABsAAAA FAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAA AABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG4AAAANAAAAAAAAAAAAAAAAAACAPwAAAABuAAAADQAAAAAAAAABAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAAgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAAYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AAkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAwAAAAAAACAPwAAAABu AAAADQAAAAAAAAANAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAQAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAEQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABIAAAAAAACAPwAAAABuAAAADQAAAAAAAAATAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAFAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAABgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ABsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB4AAAAAAACAPwAAAABu AAAADQAAAAAAAAAfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAiAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAIwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAlAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAJgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAoAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAACoAAAAAAACAPwAAAABuAAAADQAAAAAAAAArAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AC0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAuAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADAAAAAAAACAPwAAAABu AAAADQAAAAAAAAAxAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADMAAAAAAACAPwAAAABuAAAADQAAAAAAAAA0AAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAANQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADYAAAAAAACAPwAAAABuAAAADQAAAAAAAAA3AAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAOAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADkAAAAAAACAPwAAAABuAAAADQAAAAAAAAA6AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAADwAAAAAAACAPwAAAABuAAAADQAAAAAAAAA9AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AD8AAAAAAACAPwAAAABuAAAADQAAAAAAAABAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEIAAAAAAACAPwAAAABu AAAADQAAAAAAAABDAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEUAAAAAAACAPwAAAABuAAAADQAAAAAAAABGAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAARwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEgAAAAAAACAPwAAAABuAAAADQAAAAAAAABJAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAASgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEsAAAAAAACAPwAAAABuAAAADQAAAAAAAABMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAE4AAAAAAACAPwAAAABuAAAADQAAAAAAAABPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AFEAAAAAAACAPwAAAABuAAAADQAAAAAAAABSAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFQAAAAAAACAPwAAAABu AAAADQAAAAAAAABVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFcAAAAAAACAPwAAAABuAAAADQAAAAAAAABYAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAWQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFoAAAAAAACAPwAAAABuAAAADQAAAAAAAABbAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAXAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF0AAAAAAACAPwAAAABuAAAADQAAAAAAAABeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAGAAAAAAAACAPwAAAABuAAAADQAAAAAAAABhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AGMAAAAAAACAPwAAAAACAAAAAAAAAAAAAAABAAAAAwsAAAAAAABkAAAAHgAAAAAAAAA5AAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAAAwAAAAAA AAAtLS1nAAAAAAAAAAAAAABoAAAACgAAAAAAAAAAAAAAAAAAAAAAaQAAABIAAAAAAAAAAAAAAEA/AABAPwAAAD8AAEA/agAAABEAAAAAAAAAAAAAgD4AAAA/ AABAPwAAgD5rAAAAEQAAAAAAAAAAAACAPgAAAD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0A AIA/AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbgAAAA0AAAAAAAAAAAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAAEAAAAAAACAPwAAAABuAAAADQAAAAAAAAACAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAAQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAcAAAAAAACA PwAAAABuAAAADQAAAAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAoAAAAAAACAPwAAAABuAAAADQAAAAAA AAALAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAOAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAADwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABAAAAAAAACAPwAAAABuAAAADQAAAAAAAAARAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAABMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAABYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABkAAAAAAACA PwAAAABuAAAADQAAAAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABwAAAAAAACAPwAAAABuAAAADQAAAAAA AAAdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAgAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAACUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAmAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAACgAAAAAAACAPwAAAABuAAAADQAAAAAAAAApAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACsAAAAAAACA PwAAAABuAAAADQAAAAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC4AAAAAAACAPwAAAABuAAAADQAAAAAA AAAvAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAyAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADQAAAAAAACAPwAAAABuAAAADQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAADcAAAAAAACAPwAAAABuAAAADQAAAAAAAAA4AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAADoAAAAAAACAPwAAAABuAAAADQAAAAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD0AAAAAAACA PwAAAABuAAAADQAAAAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEAAAAAAAACAPwAAAABuAAAADQAAAAAA AABBAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEMAAAAAAACAPwAAAABuAAAADQAAAAAAAABEAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAARQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEYAAAAAAACAPwAAAABuAAAADQAAAAAAAABHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAEkAAAAAAACAPwAAAABuAAAADQAAAAAAAABKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAEwAAAAAAACAPwAAAABuAAAADQAAAAAAAABNAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE8AAAAAAACA PwAAAABuAAAADQAAAAAAAABQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFIAAAAAAACAPwAAAABuAAAADQAAAAAA AABTAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFUAAAAAAACAPwAAAABuAAAADQAAAAAAAABWAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFgAAAAAAACAPwAAAABuAAAADQAAAAAAAABZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAFsAAAAAAACAPwAAAABuAAAADQAAAAAAAABcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAF4AAAAAAACAPwAAAABuAAAADQAAAAAAAABfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGEAAAAAAACA PwAAAABuAAAADQAAAAAAAABiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/AAAAAAIAAAAAAAAAAAAAAAEAAAADCwAAAAAAAGQAAAAeAAAAAAAA ADoAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAGYAAAADAAAAAAAAAC0tLWcAAAAAAAAAAAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAAAABpAAAAEgAAAAAA AAAAAAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/AACAPmsAAAARAAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAAbAAAABQAAAAAAAAA AAAAAM3MzD0AAIA/AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQA AAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABuAAAADQAAAAAAAAAAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAIA AAAAAACAPwAAAABuAAAADQAAAAAAAAADAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAUAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAJAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAADQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAABEAAAAAAACAPwAAAABuAAAADQAAAAAAAAASAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABQA AAAAAACAPwAAAABuAAAADQAAAAAAAAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABcAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAbAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAHwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAACMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAkAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACYA AAAAAACAPwAAAABuAAAADQAAAAAAAAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACkAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAtAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAMQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAzAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAADUAAAAAAACAPwAAAABuAAAADQAAAAAAAAA2AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADgA AAAAAACAPwAAAABuAAAADQAAAAAAAAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADsAAAAAAACAPwAAAABuAAAA DQAAAAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD4AAAAAAACAPwAAAABuAAAADQAAAAAAAAA/AAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEEAAAAAAACAPwAAAABuAAAADQAAAAAAAABCAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAQwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEQAAAAAAACAPwAAAABuAAAADQAAAAAAAABFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAEcAAAAAAACAPwAAAABuAAAADQAAAAAAAABIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEoA AAAAAACAPwAAAABuAAAADQAAAAAAAABLAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE0AAAAAAACAPwAAAABuAAAA DQAAAAAAAABOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFAAAAAAAACAPwAAAABuAAAADQAAAAAAAABRAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFMAAAAAAACAPwAAAABuAAAADQAAAAAAAABUAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAVQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFYAAAAAAACAPwAAAABuAAAADQAAAAAAAABXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAFkAAAAAAACAPwAAAABuAAAADQAAAAAAAABaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFwA AAAAAACAPwAAAABuAAAADQAAAAAAAABdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF8AAAAAAACAPwAAAABuAAAA DQAAAAAAAABgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGIAAAAAAACAPwAAAABuAAAADQAAAAAAAABjAAAAAAAA gD8AAAAAAgAAAAAAAAAAAAAAAQAAAAMLAAAAAAAAZAAAAB4AAAAAAAAAOwAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAMAAAAAAAAALS0tZwAA AAAAAAAAAAAAaAAAAAoAAAAAAAAAAAAAAAAAAAAAAGkAAAASAAAAAAAAAAAAAABAPwAAQD8AAAA/AABAP2oAAAARAAAAAAAAAAAAAIA+AAAAPwAAQD8AAIA+ awAAABEAAAAAAAAAAAAAgD4AAAA/AACAPgAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAA AAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG4AAAANAAAAAAAAAAAAAAAAAACAPwAA AABuAAAADQAAAAAAAAABAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAE AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAHAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAACAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACwAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAAwAAAAAAACAPwAAAABuAAAADQAAAAAAAAANAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAA8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABIAAAAAAACAPwAA AABuAAAADQAAAAAAAAATAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAW AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAZAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAGgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAB4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAACEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACQAAAAAAACAPwAA AABuAAAADQAAAAAAAAAlAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAo AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACoAAAAAAACAPwAAAABuAAAADQAAAAAAAAArAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAALAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAuAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALwAAAAAA AIA/AAAAAG4AAAANAAAAAAAAADAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAxAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAADMAAAAAAACAPwAAAABuAAAADQAAAAAAAAA0AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADYAAAAAAACAPwAA AABuAAAADQAAAAAAAAA3AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADkAAAAAAACAPwAAAABuAAAADQAAAAAAAAA6 AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADwAAAAAAACAPwAAAABuAAAADQAAAAAAAAA9AAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAPgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD8AAAAAAACAPwAAAABuAAAADQAAAAAAAABAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAEIAAAAAAACAPwAAAABuAAAADQAAAAAAAABDAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAEUAAAAAAACAPwAAAABuAAAADQAAAAAAAABGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEgAAAAAAACAPwAA AABuAAAADQAAAAAAAABJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEsAAAAAAACAPwAAAABuAAAADQAAAAAAAABM AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE4AAAAAAACAPwAAAABuAAAADQAAAAAAAABPAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAUAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFEAAAAAAACAPwAAAABuAAAADQAAAAAAAABSAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUwAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAFQAAAAAAACAPwAAAABuAAAADQAAAAAAAABVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAFcAAAAAAACAPwAAAABuAAAADQAAAAAAAABYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFoAAAAAAACAPwAA AABuAAAADQAAAAAAAABbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF0AAAAAAACAPwAAAABuAAAADQAAAAAAAABe AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGAAAAAAAACAPwAAAABuAAAADQAAAAAAAABhAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAYgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGMAAAAAAACAPwAAAAACAAAAAAAAAAAAAAABAAAAAwsAAAAAAABkAAAAHgAAAAAAAAA8AAAAAAAA AIA/AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAAAwAAAAAAAAAtLS1nAAAAAAAAAAAAAABoAAAACgAAAAAAAAAAAAAAAAAAAAAAaQAAABIAAAAAAAAAAAAAAEA/ AABAPwAAAD8AAEA/agAAABEAAAAAAAAAAAAAgD4AAAA/AABAPwAAgD5rAAAAEQAAAAAAAAAAAACAPgAAAD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9 AACAPwAAAAAAAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAA AABtAAAABAAAAAAAAAAAAAAAbgAAAA0AAAAAAAAAAAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAEAAAAAAACAPwAAAABuAAAADQAAAAAAAAACAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA BgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAAoAAAAAAACAPwAAAABuAAAADQAAAAAAAAALAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA0AAAAA AACAPwAAAABuAAAADQAAAAAAAAAOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABAAAAAAAACAPwAAAABuAAAADQAA AAAAAAARAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAUAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA GAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAABwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB8AAAAA AACAPwAAAABuAAAADQAAAAAAAAAgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACIAAAAAAACAPwAAAABuAAAADQAA AAAAAAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAmAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACgAAAAAAACAPwAAAABuAAAADQAAAAAAAAApAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA KgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAC4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADEAAAAA AACAPwAAAABuAAAADQAAAAAAAAAyAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADQAAAAAAACAPwAAAABuAAAADQAA AAAAAAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADcAAAAAAACAPwAAAABuAAAADQAAAAAAAAA4AAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADoAAAAAAACAPwAAAABuAAAADQAAAAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA PAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD0AAAAAAACAPwAAAABuAAAADQAAAAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAEAAAAAAAACAPwAAAABuAAAADQAAAAAAAABBAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEMAAAAA AACAPwAAAABuAAAADQAAAAAAAABEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEYAAAAAAACAPwAAAABuAAAADQAA AAAAAABHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEkAAAAAAACAPwAAAABuAAAADQAAAAAAAABKAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAASwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEwAAAAAAACAPwAAAABuAAAADQAAAAAAAABNAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA TgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE8AAAAAAACAPwAAAABuAAAADQAAAAAAAABQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAFIAAAAAAACAPwAAAABuAAAADQAAAAAAAABTAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFUAAAAA AACAPwAAAABuAAAADQAAAAAAAABWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFgAAAAAAACAPwAAAABuAAAADQAA AAAAAABZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFsAAAAAAACAPwAAAABuAAAADQAAAAAAAABcAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF4AAAAAAACAPwAAAABuAAAADQAAAAAAAABfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA YAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGEAAAAAAACAPwAAAABuAAAADQAAAAAAAABiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/AAAAAAIA AAAAAAAAAAAAAAEAAAADCwAAAAAAAGQAAAAeAAAAAAAAAD0AAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAGYAAAADAAAAAAAAAC0tLWcAAAAAAAAAAAAA AGgAAAAKAAAAAAAAAAAAAAAAAAAAAABpAAAAEgAAAAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/AACAPmsAAAARAAAA AAAAAAAAAIA+AAAAPwAAgD4AAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAG0AAAAE AAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABuAAAADQAAAAAAAAAAAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAAQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAIAAAAAAACAPwAAAABuAAAADQAAAAAAAAADAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAAUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AAgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAsAAAAAAACAPwAAAABu AAAADQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAPAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABEAAAAAAACAPwAAAABuAAAADQAAAAAAAAASAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAEwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAABcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ABoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB0AAAAAAACAPwAAAABu AAAADQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAhAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAkAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAJQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAACkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ACwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAtAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC8AAAAAAACAPwAAAABu AAAADQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAzAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAANAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADUAAAAAAACAPwAAAABuAAAADQAAAAAAAAA2AAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAANwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADgAAAAAAACAPwAAAABuAAAADQAAAAAAAAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAADsAAAAAAACAPwAAAABuAAAADQAAAAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AD4AAAAAAACAPwAAAABuAAAADQAAAAAAAAA/AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEEAAAAAAACAPwAAAABu AAAADQAAAAAAAABCAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEQAAAAAAACAPwAAAABuAAAADQAAAAAAAABFAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAARgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEcAAAAAAACAPwAAAABuAAAADQAAAAAAAABIAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAASQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEoAAAAAAACAPwAAAABuAAAADQAAAAAAAABLAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAE0AAAAAAACAPwAAAABuAAAADQAAAAAAAABOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AFAAAAAAAACAPwAAAABuAAAADQAAAAAAAABRAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFMAAAAAAACAPwAAAABu AAAADQAAAAAAAABUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFYAAAAAAACAPwAAAABuAAAADQAAAAAAAABXAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFkAAAAAAACAPwAAAABuAAAADQAAAAAAAABaAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAWwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFwAAAAAAACAPwAAAABuAAAADQAAAAAAAABdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAF8AAAAAAACAPwAAAABuAAAADQAAAAAAAABgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AGIAAAAAAACAPwAAAABuAAAADQAAAAAAAABjAAAAAAAAgD8AAAAAAgAAAAAAAAAAAAAAAQAAAAMLAAAAAAAAZAAAAB4AAAAAAAAAPgAAAAAAAACAPwAAAAAA AAAAAAAAAAAAAAAAAAAAZgAAAAMAAAAAAAAALS0tZwAAAAAAAAAAAAAAaAAAAAoAAAAAAAAAAAAAAAAAAAAAAGkAAAASAAAAAAAAAAAAAABAPwAAQD8AAAA/ AABAP2oAAAARAAAAAAAAAAAAAIA+AAAAPwAAQD8AAIA+awAAABEAAAAAAAAAAAAAgD4AAAA/AACAPgAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAA AAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQA AAAAAAAAAAAAAG4AAAANAAAAAAAAAAAAAAAAAACAPwAAAABuAAAADQAAAAAAAAABAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAAMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAYAAAAAAACA PwAAAABuAAAADQAAAAAAAAAHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAkAAAAAAACAPwAAAABuAAAADQAAAAAA AAAKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAwAAAAAAACAPwAAAABuAAAADQAAAAAAAAANAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAADgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAABIAAAAAAACAPwAAAABuAAAADQAAAAAAAAATAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAABUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABgAAAAAAACA PwAAAABuAAAADQAAAAAAAAAZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABsAAAAAAACAPwAAAABuAAAADQAAAAAA AAAcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAfAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAIAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAACQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAlAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAACcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAoAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACoAAAAAAACA PwAAAABuAAAADQAAAAAAAAArAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC0AAAAAAACAPwAAAABuAAAADQAAAAAA AAAuAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAxAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAMgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADMAAAAAAACAPwAAAABuAAAADQAAAAAAAAA0AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAADYAAAAAAACAPwAAAABuAAAADQAAAAAAAAA3AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAADkAAAAAAACAPwAAAABuAAAADQAAAAAAAAA6AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADwAAAAAAACA PwAAAABuAAAADQAAAAAAAAA9AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD8AAAAAAACAPwAAAABuAAAADQAAAAAA AABAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEIAAAAAAACAPwAAAABuAAAADQAAAAAAAABDAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAARAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEUAAAAAAACAPwAAAABuAAAADQAAAAAAAABGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAEgAAAAAAACAPwAAAABuAAAADQAAAAAAAABJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAEsAAAAAAACAPwAAAABuAAAADQAAAAAAAABMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE4AAAAAAACA PwAAAABuAAAADQAAAAAAAABPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFEAAAAAAACAPwAAAABuAAAADQAAAAAA AABSAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFQAAAAAAACAPwAAAABuAAAADQAAAAAAAABVAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAVgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFcAAAAAAACAPwAAAABuAAAADQAAAAAAAABYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAFoAAAAAAACAPwAAAABuAAAADQAAAAAAAABbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAF0AAAAAAACAPwAAAABuAAAADQAAAAAAAABeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGAAAAAAAACA PwAAAABuAAAADQAAAAAAAABhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGMAAAAAAACAPwAAAAACAAAAAAAAAAAA AAABAAAAAwsAAAAAAABkAAAAHgAAAAAAAAA/AAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAAAwAAAAAAAAAtLS1nAAAAAAAAAAAAAABoAAAACgAA AAAAAAAAAAAAAAAAAAAAaQAAABIAAAAAAAAAAAAAAEA/AABAPwAAAD8AAEA/agAAABEAAAAAAAAAAAAAgD4AAAA/AABAPwAAgD5rAAAAEQAAAAAAAAAAAACA PgAAAD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABtAAAABAAAAAAAAAAA AAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbgAAAA0AAAAAAAAAAAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAEA AAAAAACAPwAAAABuAAAADQAAAAAAAAACAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAQAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAIAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAoAAAAAAACAPwAAAABuAAAADQAAAAAAAAALAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAADAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAABAAAAAAAACAPwAAAABuAAAADQAAAAAAAAARAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABMA AAAAAACAPwAAAABuAAAADQAAAAAAAAAUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABYAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAaAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAHgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAACIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACUA AAAAAACAPwAAAABuAAAADQAAAAAAAAAmAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACgAAAAAAACAPwAAAABuAAAA DQAAAAAAAAApAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAsAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAMAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAyAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAADQAAAAAAACAPwAAAABuAAAADQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADcA AAAAAACAPwAAAABuAAAADQAAAAAAAAA4AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADoAAAAAAACAPwAAAABuAAAA DQAAAAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD0AAAAAAACAPwAAAABuAAAADQAAAAAAAAA+AAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEAAAAAAAACAPwAAAABuAAAADQAAAAAAAABBAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAQgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEMAAAAAAACAPwAAAABuAAAADQAAAAAAAABEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAEYAAAAAAACAPwAAAABuAAAADQAAAAAAAABHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEkA AAAAAACAPwAAAABuAAAADQAAAAAAAABKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEwAAAAAAACAPwAAAABuAAAA DQAAAAAAAABNAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE8AAAAAAACAPwAAAABuAAAADQAAAAAAAABQAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFIAAAAAAACAPwAAAABuAAAADQAAAAAAAABTAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAVAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFUAAAAAAACAPwAAAABuAAAADQAAAAAAAABWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAFgAAAAAAACAPwAAAABuAAAADQAAAAAAAABZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFsA AAAAAACAPwAAAABuAAAADQAAAAAAAABcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF4AAAAAAACAPwAAAABuAAAA DQAAAAAAAABfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGEAAAAAAACAPwAAAABuAAAADQAAAAAAAABiAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/AAAAAAIAAAAAAAAAAAAAAAEAAAADCwAAAAAAAGQAAAAeAAAAAAAAAEAAAAAAAAAAgD8AAAAAAAAAAAAAAAAA AAAAAAAAAGYAAAADAAAAAAAAAC0tLWcAAAAAAAAAAAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAAAABpAAAAEgAAAAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9qAAAA EQAAAAAAAAAAAACAPgAAAD8AAEA/AACAPmsAAAARAAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABsAAAA FAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAA AABuAAAADQAAAAAAAAAAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAD AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAGAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAABwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAAsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAA4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABEAAAAAAACAPwAA AABuAAAADQAAAAAAAAASAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAV AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAYAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAGQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAB0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAACAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACMAAAAAAACAPwAA AABuAAAADQAAAAAAAAAkAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAn AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAqAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAKwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAtAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAC8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAADIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAzAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADUAAAAAAACAPwAA AABuAAAADQAAAAAAAAA2AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADgAAAAAAACAPwAAAABuAAAADQAAAAAAAAA5 AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADsAAAAAAACAPwAAAABuAAAADQAAAAAAAAA8AAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAPQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD4AAAAAAACAPwAAAABuAAAADQAAAAAAAAA/AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAEEAAAAAAACAPwAAAABuAAAADQAAAAAAAABCAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAEQAAAAAAACAPwAAAABuAAAADQAAAAAAAABFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEcAAAAAAACAPwAA AABuAAAADQAAAAAAAABIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEoAAAAAAACAPwAAAABuAAAADQAAAAAAAABL AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE0AAAAAAACAPwAAAABuAAAADQAAAAAAAABOAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAATwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFAAAAAAAACAPwAAAABuAAAADQAAAAAAAABRAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAFMAAAAAAACAPwAAAABuAAAADQAAAAAAAABUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAFYAAAAAAACAPwAAAABuAAAADQAAAAAAAABXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFkAAAAAAACAPwAA AABuAAAADQAAAAAAAABaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFwAAAAAAACAPwAAAABuAAAADQAAAAAAAABd AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF8AAAAAAACAPwAAAABuAAAADQAAAAAAAABgAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAYQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGIAAAAAAACAPwAAAABuAAAADQAAAAAAAABjAAAAAAAAgD8AAAAAAgAAAAAAAAAAAAAAAQAAAAML AAAAAAAAZAAAAB4AAAAAAAAAQQAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAMAAAAAAAAALS0tZwAAAAAAAAAAAAAAaAAAAAoAAAAAAAAAAAAA AAAAAAAAAGkAAAASAAAAAAAAAAAAAABAPwAAQD8AAAA/AABAP2oAAAARAAAAAAAAAAAAAIA+AAAAPwAAQD8AAIA+awAAABEAAAAAAAAAAAAAgD4AAAA/AACA PgAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAE AAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG4AAAANAAAAAAAAAAAAAAAAAACAPwAAAABuAAAADQAAAAAAAAABAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAAgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA BQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAAkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAwAAAAA AACAPwAAAABuAAAADQAAAAAAAAANAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA8AAAAAAACAPwAAAABuAAAADQAA AAAAAAAQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABIAAAAAAACAPwAAAABuAAAADQAAAAAAAAATAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAFAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA FwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAABsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB4AAAAA AACAPwAAAABuAAAADQAAAAAAAAAfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACEAAAAAAACAPwAAAABuAAAADQAA AAAAAAAiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAlAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAJgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAoAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA KQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACoAAAAAAACAPwAAAABuAAAADQAAAAAAAAArAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAC0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAuAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADAAAAAA AACAPwAAAABuAAAADQAAAAAAAAAxAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADMAAAAAAACAPwAAAABuAAAADQAA AAAAAAA0AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADYAAAAAAACAPwAAAABuAAAADQAAAAAAAAA3AAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAOAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADkAAAAAAACAPwAAAABuAAAADQAAAAAAAAA6AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA OwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADwAAAAAAACAPwAAAABuAAAADQAAAAAAAAA9AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAD8AAAAAAACAPwAAAABuAAAADQAAAAAAAABAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEIAAAAA AACAPwAAAABuAAAADQAAAAAAAABDAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEUAAAAAAACAPwAAAABuAAAADQAA AAAAAABGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEgAAAAAAACAPwAAAABuAAAADQAAAAAAAABJAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAASgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEsAAAAAAACAPwAAAABuAAAADQAAAAAAAABMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA TQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE4AAAAAAACAPwAAAABuAAAADQAAAAAAAABPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAFEAAAAAAACAPwAAAABuAAAADQAAAAAAAABSAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFQAAAAA AACAPwAAAABuAAAADQAAAAAAAABVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFcAAAAAAACAPwAAAABuAAAADQAA AAAAAABYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFoAAAAAAACAPwAAAABuAAAADQAAAAAAAABbAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAXAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF0AAAAAAACAPwAAAABuAAAADQAAAAAAAABeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA XwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGAAAAAAAACAPwAAAABuAAAADQAAAAAAAABhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAGMAAAAAAACAPwAAAAACAAAAAAAAAAAAAAABAAAAAwsAAAAAAABkAAAAHgAAAAAAAABCAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAABm AAAAAwAAAAAAAAAtLS1nAAAAAAAAAAAAAABoAAAACgAAAAAAAAAAAAAAAAAAAAAAaQAAABIAAAAAAAAAAAAAAEA/AABAPwAAAD8AAEA/agAAABEAAAAAAAAA AAAAgD4AAAA/AABAPwAAgD5rAAAAEQAAAAAAAAAAAACAPgAAAD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbAAAABQAAAAAAAAA AAAAAM3MzD0AAIA/AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbgAAAA0A AAAAAAAAAAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAEAAAAAAACAPwAAAABuAAAADQAAAAAAAAACAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAAQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AAcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAoAAAAAAACAPwAAAABu AAAADQAAAAAAAAALAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAOAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABAAAAAAAACAPwAAAABuAAAADQAAAAAAAAARAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAEgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAABYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ABkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABwAAAAAAACAPwAAAABu AAAADQAAAAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAgAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAJAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAmAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAACgAAAAAAACAPwAAAABuAAAADQAAAAAAAAApAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ACsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC4AAAAAAACAPwAAAABu AAAADQAAAAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAyAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADQAAAAAAACAPwAAAABuAAAADQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAANgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADcAAAAAAACAPwAAAABuAAAADQAAAAAAAAA4AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAADoAAAAAAACAPwAAAABuAAAADQAAAAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AD0AAAAAAACAPwAAAABuAAAADQAAAAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEAAAAAAAACAPwAAAABu AAAADQAAAAAAAABBAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEMAAAAAAACAPwAAAABuAAAADQAAAAAAAABEAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEYAAAAAAACAPwAAAABuAAAADQAAAAAAAABHAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAASAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEkAAAAAAACAPwAAAABuAAAADQAAAAAAAABKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAEwAAAAAAACAPwAAAABuAAAADQAAAAAAAABNAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AE8AAAAAAACAPwAAAABuAAAADQAAAAAAAABQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFIAAAAAAACAPwAAAABu AAAADQAAAAAAAABTAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFUAAAAAAACAPwAAAABuAAAADQAAAAAAAABWAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFgAAAAAAACAPwAAAABuAAAADQAAAAAAAABZAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAWgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFsAAAAAAACAPwAAAABuAAAADQAAAAAAAABcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAF4AAAAAAACAPwAAAABuAAAADQAAAAAAAABfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AGEAAAAAAACAPwAAAABuAAAADQAAAAAAAABiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/AAAAAAIAAAAAAAAAAAAAAAEAAAADCwAAAAAAAGQA AAAeAAAAAAAAAEMAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAGYAAAADAAAAAAAAAC0tLWcAAAAAAAAAAAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAAAABp AAAAEgAAAAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/AACAPmsAAAARAAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAAbAAA ABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAA AAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABuAAAADQAAAAAAAAAAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAAIAAAAAAACAPwAAAABuAAAADQAAAAAAAAADAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAUAAAAAAACA PwAAAABuAAAADQAAAAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAgAAAAAAACAPwAAAABuAAAADQAAAAAA AAAJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAMAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAADQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAABEAAAAAAACAPwAAAABuAAAADQAAAAAAAAASAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAABQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABcAAAAAAACA PwAAAABuAAAADQAAAAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABoAAAAAAACAPwAAAABuAAAADQAAAAAA AAAbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAeAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAHwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAACMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAkAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAACYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACkAAAAAAACA PwAAAABuAAAADQAAAAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACwAAAAAAACAPwAAAABuAAAADQAAAAAA AAAtAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAwAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAMQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAzAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAADUAAAAAAACAPwAAAABuAAAADQAAAAAAAAA2AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAADgAAAAAAACAPwAAAABuAAAADQAAAAAAAAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADsAAAAAAACA PwAAAABuAAAADQAAAAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD4AAAAAAACAPwAAAABuAAAADQAAAAAA AAA/AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEEAAAAAAACAPwAAAABuAAAADQAAAAAAAABCAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAQwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEQAAAAAAACAPwAAAABuAAAADQAAAAAAAABFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAEcAAAAAAACAPwAAAABuAAAADQAAAAAAAABIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAEoAAAAAAACAPwAAAABuAAAADQAAAAAAAABLAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE0AAAAAAACA PwAAAABuAAAADQAAAAAAAABOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFAAAAAAAACAPwAAAABuAAAADQAAAAAA AABRAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFMAAAAAAACAPwAAAABuAAAADQAAAAAAAABUAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAVQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFYAAAAAAACAPwAAAABuAAAADQAAAAAAAABXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAFkAAAAAAACAPwAAAABuAAAADQAAAAAAAABaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAFwAAAAAAACAPwAAAABuAAAADQAAAAAAAABdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF8AAAAAAACA PwAAAABuAAAADQAAAAAAAABgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGIAAAAAAACAPwAAAABuAAAADQAAAAAA AABjAAAAAAAAgD8AAAAAAgAAAAAAAAAAAAAAAQAAAAMLAAAAAAAAZAAAAB4AAAAAAAAARAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAMAAAAA AAAALS0tZwAAAAAAAAAAAAAAaAAAAAoAAAAAAAAAAAAAAAAAAAAAAGkAAAASAAAAAAAAAAAAAABAPwAAQD8AAAA/AABAP2oAAAARAAAAAAAAAAAAAIA+AAAA PwAAQD8AAIA+awAAABEAAAAAAAAAAAAAgD4AAAA/AACAPgAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9 AACAPwAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG4AAAANAAAAAAAAAAAA AAAAAACAPwAAAABuAAAADQAAAAAAAAABAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAMAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAHAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAACAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAKAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAACwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAwAAAAAAACAPwAAAABuAAAADQAAAAAAAAANAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAA8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABIA AAAAAACAPwAAAABuAAAADQAAAAAAAAATAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABUAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAZAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAGgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAcAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAHQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAACEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACQA AAAAAACAPwAAAABuAAAADQAAAAAAAAAlAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACcAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAoAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACoAAAAAAACAPwAAAABuAAAADQAAAAAAAAArAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAALAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAuAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAALwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAxAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAADMAAAAAAACAPwAAAABuAAAADQAAAAAAAAA0AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADYA AAAAAACAPwAAAABuAAAADQAAAAAAAAA3AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADkAAAAAAACAPwAAAABuAAAA DQAAAAAAAAA6AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADwAAAAAAACAPwAAAABuAAAADQAAAAAAAAA9AAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAPgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD8AAAAAAACAPwAAAABuAAAADQAAAAAAAABAAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAQQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEIAAAAAAACAPwAAAABuAAAADQAAAAAAAABDAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAEUAAAAAAACAPwAAAABuAAAADQAAAAAAAABGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEgA AAAAAACAPwAAAABuAAAADQAAAAAAAABJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEsAAAAAAACAPwAAAABuAAAA DQAAAAAAAABMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE4AAAAAAACAPwAAAABuAAAADQAAAAAAAABPAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAUAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFEAAAAAAACAPwAAAABuAAAADQAAAAAAAABSAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAUwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFQAAAAAAACAPwAAAABuAAAADQAAAAAAAABVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAFcAAAAAAACAPwAAAABuAAAADQAAAAAAAABYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFoA AAAAAACAPwAAAABuAAAADQAAAAAAAABbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF0AAAAAAACAPwAAAABuAAAA DQAAAAAAAABeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGAAAAAAAACAPwAAAABuAAAADQAAAAAAAABhAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAYgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGMAAAAAAACAPwAAAAACAAAAAAAAAAAAAAABAAAAAwsAAAAAAABkAAAAHgAAAAAA AABFAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAAAwAAAAAAAAAtLS1nAAAAAAAAAAAAAABoAAAACgAAAAAAAAAAAAAAAAAAAAAAaQAAABIAAAAA AAAAAAAAAEA/AABAPwAAAD8AAEA/agAAABEAAAAAAAAAAAAAgD4AAAA/AABAPwAAgD5rAAAAEQAAAAAAAAAAAACAPgAAAD8AAIA+AAAAAGwAAAAUAAAAAAAA AAAAAADNzMw9AACAPwAAAAAAAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAE AAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbgAAAA0AAAAAAAAAAAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAC AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAFAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAABgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAAoAAAAAAACAPwAAAABuAAAADQAAAAAAAAALAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAA0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABAAAAAAAACAPwAA AABuAAAADQAAAAAAAAARAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAU AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAXAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAGAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAAAAAA AIA/AAAAAG4AAAANAAAAAAAAABwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAB8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACIAAAAAAACAPwAA AABuAAAADQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAm AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACgAAAAAAACAPwAAAABuAAAADQAAAAAAAAApAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAKgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAC4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAADEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAyAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADQAAAAAAACAPwAA AABuAAAADQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADcAAAAAAACAPwAAAABuAAAADQAAAAAAAAA4 AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADoAAAAAAACAPwAAAABuAAAADQAAAAAAAAA7AAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAPAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD0AAAAAAACAPwAAAABuAAAADQAAAAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAEAAAAAAAACAPwAAAABuAAAADQAAAAAAAABBAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAEMAAAAAAACAPwAAAABuAAAADQAAAAAAAABEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEYAAAAAAACAPwAA AABuAAAADQAAAAAAAABHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEkAAAAAAACAPwAAAABuAAAADQAAAAAAAABK AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEwAAAAAAACAPwAAAABuAAAADQAAAAAAAABNAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAATgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE8AAAAAAACAPwAAAABuAAAADQAAAAAAAABQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAFIAAAAAAACAPwAAAABuAAAADQAAAAAAAABTAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAFUAAAAAAACAPwAAAABuAAAADQAAAAAAAABWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFgAAAAAAACAPwAA AABuAAAADQAAAAAAAABZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFsAAAAAAACAPwAAAABuAAAADQAAAAAAAABc AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF4AAAAAAACAPwAAAABuAAAADQAAAAAAAABfAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAYAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGEAAAAAAACAPwAAAABuAAAADQAAAAAAAABiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAAAAAA AIA/AAAAAAIAAAAAAAAAAAAAAAEAAAADCwAAAAAAAGQAAAAeAAAAAAAAAEYAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAGYAAAADAAAAAAAAAC0tLWcA AAAAAAAAAAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAAAABpAAAAEgAAAAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/AACA PmsAAAARAAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAA AAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABuAAAADQAAAAAAAAAAAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAIAAAAAAACAPwAAAABuAAAADQAAAAAAAAADAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA BAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAAgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAsAAAAA AACAPwAAAABuAAAADQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA4AAAAAAACAPwAAAABuAAAADQAA AAAAAAAPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABEAAAAAAACAPwAAAABuAAAADQAAAAAAAAASAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA FgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAABoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB0AAAAA AACAPwAAAABuAAAADQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACAAAAAAAACAPwAAAABuAAAADQAA AAAAAAAhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAkAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA KAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAACwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAtAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC8AAAAA AACAPwAAAABuAAAADQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADIAAAAAAACAPwAAAABuAAAADQAA AAAAAAAzAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADUAAAAAAACAPwAAAABuAAAADQAAAAAAAAA2AAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAANwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADgAAAAAAACAPwAAAABuAAAADQAAAAAAAAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA OgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADsAAAAAAACAPwAAAABuAAAADQAAAAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAD4AAAAAAACAPwAAAABuAAAADQAAAAAAAAA/AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEEAAAAA AACAPwAAAABuAAAADQAAAAAAAABCAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEQAAAAAAACAPwAAAABuAAAADQAA AAAAAABFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEcAAAAAAACAPwAAAABuAAAADQAAAAAAAABIAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAASQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEoAAAAAAACAPwAAAABuAAAADQAAAAAAAABLAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA TAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE0AAAAAAACAPwAAAABuAAAADQAAAAAAAABOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAFAAAAAAAACAPwAAAABuAAAADQAAAAAAAABRAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFMAAAAA AACAPwAAAABuAAAADQAAAAAAAABUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFYAAAAAAACAPwAAAABuAAAADQAA AAAAAABXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFkAAAAAAACAPwAAAABuAAAADQAAAAAAAABaAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFwAAAAAAACAPwAAAABuAAAADQAAAAAAAABdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA XgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF8AAAAAAACAPwAAAABuAAAADQAAAAAAAABgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAGIAAAAAAACAPwAAAABuAAAADQAAAAAAAABjAAAAAAAAgD8AAAAAAgAAAAAAAAAAAAAAAQAAAAMLAAAAAAAAZAAAAB4AAAAAAAAARwAAAAAA AACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAMAAAAAAAAALS0tZwAAAAAAAAAAAAAAaAAAAAoAAAAAAAAAAAAAAAAAAAAAAGkAAAASAAAAAAAAAAAAAABA PwAAQD8AAAA/AABAP2oAAAARAAAAAAAAAAAAAIA+AAAAPwAAQD8AAIA+awAAABEAAAAAAAAAAAAAgD4AAAA/AACAPgAAAABsAAAAFAAAAAAAAAAAAAAAzczM PQAAgD8AAAAAAAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAA AAAAbQAAAAQAAAAAAAAAAAAAAG4AAAANAAAAAAAAAAAAAAAAAACAPwAAAABuAAAADQAAAAAAAAABAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAAMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AAYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAkAAAAAAACAPwAAAABu AAAADQAAAAAAAAAKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAwAAAAAAACAPwAAAABuAAAADQAAAAAAAAANAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAADgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAQAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAEQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABIAAAAAAACAPwAAAABuAAAADQAAAAAAAAATAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAABUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ABgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABsAAAAAAACAPwAAAABu AAAADQAAAAAAAAAcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAfAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAIAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAiAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAIwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAlAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAACcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAoAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ACoAAAAAAACAPwAAAABuAAAADQAAAAAAAAArAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC0AAAAAAACAPwAAAABu AAAADQAAAAAAAAAuAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAxAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAMgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADMAAAAAAACAPwAAAABuAAAADQAAAAAAAAA0AAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAANQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADYAAAAAAACAPwAAAABuAAAADQAAAAAAAAA3AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAADkAAAAAAACAPwAAAABuAAAADQAAAAAAAAA6AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ADwAAAAAAACAPwAAAABuAAAADQAAAAAAAAA9AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD8AAAAAAACAPwAAAABu AAAADQAAAAAAAABAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEIAAAAAAACAPwAAAABuAAAADQAAAAAAAABDAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAARAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEUAAAAAAACAPwAAAABuAAAADQAAAAAAAABGAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAARwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEgAAAAAAACAPwAAAABuAAAADQAAAAAAAABJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAEsAAAAAAACAPwAAAABuAAAADQAAAAAAAABMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AE4AAAAAAACAPwAAAABuAAAADQAAAAAAAABPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFEAAAAAAACAPwAAAABu AAAADQAAAAAAAABSAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFQAAAAAAACAPwAAAABuAAAADQAAAAAAAABVAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAVgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFcAAAAAAACAPwAAAABuAAAADQAAAAAAAABYAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAWQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFoAAAAAAACAPwAAAABuAAAADQAAAAAAAABbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAF0AAAAAAACAPwAAAABuAAAADQAAAAAAAABeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AGAAAAAAAACAPwAAAABuAAAADQAAAAAAAABhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGMAAAAAAACAPwAAAAAC AAAAAAAAAAAAAAABAAAAAwsAAAAAAABkAAAAHgAAAAAAAABIAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAAAwAAAAAAAAAtLS1nAAAAAAAAAAAA AABoAAAACgAAAAAAAAAAAAAAAAAAAAAAaQAAABIAAAAAAAAAAAAAAEA/AABAPwAAAD8AAEA/agAAABEAAAAAAAAAAAAAgD4AAAA/AABAPwAAgD5rAAAAEQAA AAAAAAAAAACAPgAAAD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABtAAAA BAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbgAAAA0AAAAAAAAAAAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAAEAAAAAAACAPwAAAABuAAAADQAAAAAAAAACAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAQAAAAAAACA PwAAAABuAAAADQAAAAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAcAAAAAAACAPwAAAABuAAAADQAAAAAA AAAIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAoAAAAAAACAPwAAAABuAAAADQAAAAAAAAALAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAADAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAABAAAAAAAACAPwAAAABuAAAADQAAAAAAAAARAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAABMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABYAAAAAAACA PwAAAABuAAAADQAAAAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABkAAAAAAACAPwAAAABuAAAADQAAAAAA AAAaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAdAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAHgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAACIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAACUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAmAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACgAAAAAAACA PwAAAABuAAAADQAAAAAAAAApAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACsAAAAAAACAPwAAAABuAAAADQAAAAAA AAAsAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAvAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAMAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAyAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAADQAAAAAAACAPwAAAABuAAAADQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAADcAAAAAAACAPwAAAABuAAAADQAAAAAAAAA4AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADoAAAAAAACA PwAAAABuAAAADQAAAAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD0AAAAAAACAPwAAAABuAAAADQAAAAAA AAA+AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEAAAAAAAACAPwAAAABuAAAADQAAAAAAAABBAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAQgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEMAAAAAAACAPwAAAABuAAAADQAAAAAAAABEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAEYAAAAAAACAPwAAAABuAAAADQAAAAAAAABHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAEkAAAAAAACAPwAAAABuAAAADQAAAAAAAABKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEwAAAAAAACA PwAAAABuAAAADQAAAAAAAABNAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE8AAAAAAACAPwAAAABuAAAADQAAAAAA AABQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFIAAAAAAACAPwAAAABuAAAADQAAAAAAAABTAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAVAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFUAAAAAAACAPwAAAABuAAAADQAAAAAAAABWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAFgAAAAAAACAPwAAAABuAAAADQAAAAAAAABZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAFsAAAAAAACAPwAAAABuAAAADQAAAAAAAABcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF4AAAAAAACA PwAAAABuAAAADQAAAAAAAABfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGEAAAAAAACAPwAAAABuAAAADQAAAAAA AABiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/AAAAAAIAAAAAAAAAAAAAAAEAAAADCwAAAAAAAGQAAAAeAAAAAAAAAEkAAAAAAAAAgD8AAAAA AAAAAAAAAAAAAAAAAAAAAGYAAAADAAAAAAAAAC0tLWcAAAAAAAAAAAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAAAABpAAAAEgAAAAAAAAAAAAAAQD8AAEA/AAAA PwAAQD9qAAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/AACAPmsAAAARAAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAA AAAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAE AAAAAAAAAAAAAABuAAAADQAAAAAAAAAAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAIAAAAAAACAPwAAAABuAAAA DQAAAAAAAAADAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAGAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAABwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAJAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAACgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAA4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABEA AAAAAACAPwAAAABuAAAADQAAAAAAAAASAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABQAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAYAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAbAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAHAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAACAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACMA AAAAAACAPwAAAABuAAAADQAAAAAAAAAkAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACYAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAqAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAtAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAALgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAADIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAzAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADUA AAAAAACAPwAAAABuAAAADQAAAAAAAAA2AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADgAAAAAAACAPwAAAABuAAAA DQAAAAAAAAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADsAAAAAAACAPwAAAABuAAAADQAAAAAAAAA8AAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD4AAAAAAACAPwAAAABuAAAADQAAAAAAAAA/AAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAQAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEEAAAAAAACAPwAAAABuAAAADQAAAAAAAABCAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAEQAAAAAAACAPwAAAABuAAAADQAAAAAAAABFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEcA AAAAAACAPwAAAABuAAAADQAAAAAAAABIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEoAAAAAAACAPwAAAABuAAAA DQAAAAAAAABLAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE0AAAAAAACAPwAAAABuAAAADQAAAAAAAABOAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAATwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFAAAAAAAACAPwAAAABuAAAADQAAAAAAAABRAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAUgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFMAAAAAAACAPwAAAABuAAAADQAAAAAAAABUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAFYAAAAAAACAPwAAAABuAAAADQAAAAAAAABXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFkA AAAAAACAPwAAAABuAAAADQAAAAAAAABaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFwAAAAAAACAPwAAAABuAAAA DQAAAAAAAABdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF8AAAAAAACAPwAAAABuAAAADQAAAAAAAABgAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGIAAAAAAACAPwAAAABuAAAADQAAAAAAAABjAAAAAAAAgD8AAAAAAgAAAAAAAAAA AAAAAQAAAAMLAAAAAAAAZAAAAB4AAAAAAAAASgAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAMAAAAAAAAALS0tZwAAAAAAAAAAAAAAaAAAAAoA AAAAAAAAAAAAAAAAAAAAAGkAAAASAAAAAAAAAAAAAABAPwAAQD8AAAA/AABAP2oAAAARAAAAAAAAAAAAAIA+AAAAPwAAQD8AAIA+awAAABEAAAAAAAAAAAAA gD4AAAA/AACAPgAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbQAAAAQAAAAAAAAA AAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG4AAAANAAAAAAAAAAAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAB AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAEAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAABQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAAkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAAwAAAAAAACAPwAAAABuAAAADQAAAAAAAAANAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA8AAAAAAACAPwAA AABuAAAADQAAAAAAAAAQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAT AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAWAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAFwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAABsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAB4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACEAAAAAAACAPwAA AABuAAAADQAAAAAAAAAiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAl AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAoAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAKQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACoAAAAAAACAPwAAAABuAAAADQAAAAAAAAArAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAC0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAuAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAADAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAxAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADMAAAAAAACAPwAA AABuAAAADQAAAAAAAAA0AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADYAAAAAAACAPwAAAABuAAAADQAAAAAAAAA3 AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADkAAAAAAACAPwAAAABuAAAADQAAAAAAAAA6AAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAOwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADwAAAAAAACAPwAAAABuAAAADQAAAAAAAAA9AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAD8AAAAAAACAPwAAAABuAAAADQAAAAAAAABAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAEIAAAAAAACAPwAAAABuAAAADQAAAAAAAABDAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEUAAAAAAACAPwAA AABuAAAADQAAAAAAAABGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEgAAAAAAACAPwAAAABuAAAADQAAAAAAAABJ AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEsAAAAAAACAPwAAAABuAAAADQAAAAAAAABMAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAATQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE4AAAAAAACAPwAAAABuAAAADQAAAAAAAABPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAFEAAAAAAACAPwAAAABuAAAADQAAAAAAAABSAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAFQAAAAAAACAPwAAAABuAAAADQAAAAAAAABVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFcAAAAAAACAPwAA AABuAAAADQAAAAAAAABYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFoAAAAAAACAPwAAAABuAAAADQAAAAAAAABb AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF0AAAAAAACAPwAAAABuAAAADQAAAAAAAABeAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAXwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGAAAAAAAACAPwAAAABuAAAADQAAAAAAAABhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAGMAAAAAAACAPwAAAAACAAAAAAAAAAAAAAABAAAAAwsAAAAAAABkAAAAHgAAAAAAAABLAAAAAAAAAIA/AAAAAAAAAAAAAAAA AAAAAAAAAABmAAAAAwAAAAAAAAAtLS1nAAAAAAAAAAAAAABoAAAACgAAAAAAAAAAAAAAAAAAAAAAaQAAABIAAAAAAAAAAAAAAEA/AABAPwAAAD8AAEA/agAA ABEAAAAAAAAAAAAAgD4AAAA/AABAPwAAgD5rAAAAEQAAAAAAAAAAAACAPgAAAD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbAAA ABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAA AAAAbgAAAA0AAAAAAAAAAAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAEAAAAAAACAPwAAAABuAAAADQAAAAAAAAACAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA AwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAAcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAoAAAAA AACAPwAAAABuAAAADQAAAAAAAAALAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA0AAAAAAACAPwAAAABuAAAADQAA AAAAAAAOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABAAAAAAAACAPwAAAABuAAAADQAAAAAAAAARAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAEgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA FQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAABkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABwAAAAA AACAPwAAAABuAAAADQAAAAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB8AAAAAAACAPwAAAABuAAAADQAA AAAAAAAgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAjAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAJAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAmAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA JwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACgAAAAAAACAPwAAAABuAAAADQAAAAAAAAApAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAACsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC4AAAAA AACAPwAAAABuAAAADQAAAAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADEAAAAAAACAPwAAAABuAAAADQAA AAAAAAAyAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADQAAAAAAACAPwAAAABuAAAADQAAAAAAAAA1AAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAANgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADcAAAAAAACAPwAAAABuAAAADQAAAAAAAAA4AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA OQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADoAAAAAAACAPwAAAABuAAAADQAAAAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAD0AAAAAAACAPwAAAABuAAAADQAAAAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEAAAAAA AACAPwAAAABuAAAADQAAAAAAAABBAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEMAAAAAAACAPwAAAABuAAAADQAA AAAAAABEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEYAAAAAAACAPwAAAABuAAAADQAAAAAAAABHAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAASAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEkAAAAAAACAPwAAAABuAAAADQAAAAAAAABKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA SwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEwAAAAAAACAPwAAAABuAAAADQAAAAAAAABNAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAE8AAAAAAACAPwAAAABuAAAADQAAAAAAAABQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFIAAAAA AACAPwAAAABuAAAADQAAAAAAAABTAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFUAAAAAAACAPwAAAABuAAAADQAA AAAAAABWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFgAAAAAAACAPwAAAABuAAAADQAAAAAAAABZAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAWgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFsAAAAAAACAPwAAAABuAAAADQAAAAAAAABcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA XQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF4AAAAAAACAPwAAAABuAAAADQAAAAAAAABfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAGEAAAAAAACAPwAAAABuAAAADQAAAAAAAABiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/AAAAAAIAAAAAAAAAAAAAAAEAAAAD CwAAAAAAAGQAAAAeAAAAAAAAAEwAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAGYAAAADAAAAAAAAAC0tLWcAAAAAAAAAAAAAAGgAAAAKAAAAAAAAAAAA AAAAAAAAAABpAAAAEgAAAAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/AACAPmsAAAARAAAAAAAAAAAAAIA+AAAAPwAA gD4AAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAA BAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABuAAAADQAAAAAAAAAAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAAIAAAAAAACAPwAAAABuAAAADQAAAAAAAAADAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AAUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAgAAAAAAACAPwAAAABu AAAADQAAAAAAAAAJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAMAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAADQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAPAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAEAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABEAAAAAAACAPwAAAABuAAAADQAAAAAAAAASAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAABQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ABcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABoAAAAAAACAPwAAAABu AAAADQAAAAAAAAAbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAeAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAHwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAhAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAIgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAkAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAACYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ACkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACwAAAAAAACAPwAAAABu AAAADQAAAAAAAAAtAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAwAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAMQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAzAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAANAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADUAAAAAAACAPwAAAABuAAAADQAAAAAAAAA2AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAADgAAAAAAACAPwAAAABuAAAADQAAAAAAAAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ADsAAAAAAACAPwAAAABuAAAADQAAAAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD4AAAAAAACAPwAAAABu AAAADQAAAAAAAAA/AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEEAAAAAAACAPwAAAABuAAAADQAAAAAAAABCAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAQwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEQAAAAAAACAPwAAAABuAAAADQAAAAAAAABFAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAARgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEcAAAAAAACAPwAAAABuAAAADQAAAAAAAABIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAEoAAAAAAACAPwAAAABuAAAADQAAAAAAAABLAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AE0AAAAAAACAPwAAAABuAAAADQAAAAAAAABOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFAAAAAAAACAPwAAAABu AAAADQAAAAAAAABRAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFMAAAAAAACAPwAAAABuAAAADQAAAAAAAABUAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAVQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFYAAAAAAACAPwAAAABuAAAADQAAAAAAAABXAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAWAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFkAAAAAAACAPwAAAABuAAAADQAAAAAAAABaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAFwAAAAAAACAPwAAAABuAAAADQAAAAAAAABdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AF8AAAAAAACAPwAAAABuAAAADQAAAAAAAABgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGIAAAAAAACAPwAAAABu AAAADQAAAAAAAABjAAAAAAAAgD8AAAAAAgAAAAAAAAAAAAAAAQAAAAMLAAAAAAAAZAAAAB4AAAAAAAAATQAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAA ZgAAAAMAAAAAAAAALS0tZwAAAAAAAAAAAAAAaAAAAAoAAAAAAAAAAAAAAAAAAAAAAGkAAAASAAAAAAAAAAAAAABAPwAAQD8AAAA/AABAP2oAAAARAAAAAAAA AAAAAIA+AAAAPwAAQD8AAIA+awAAABEAAAAAAAAAAAAAgD4AAAA/AACAPgAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAGwAAAAUAAAAAAAA AAAAAADNzMw9AACAPwAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG4AAAAN AAAAAAAAAAAAAAAAAACAPwAAAABuAAAADQAAAAAAAAABAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAMAAAAAAACA PwAAAABuAAAADQAAAAAAAAAEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAYAAAAAAACAPwAAAABuAAAADQAAAAAA AAAHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAKAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAACwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAwAAAAAAACAPwAAAABuAAAADQAAAAAAAAANAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAA8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAABIAAAAAAACAPwAAAABuAAAADQAAAAAAAAATAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABUAAAAAAACA PwAAAABuAAAADQAAAAAAAAAWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABgAAAAAAACAPwAAAABuAAAADQAAAAAA AAAZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAcAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAHQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAACEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAACQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAlAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACcAAAAAAACA PwAAAABuAAAADQAAAAAAAAAoAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACoAAAAAAACAPwAAAABuAAAADQAAAAAA AAArAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAuAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAALwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAxAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAADMAAAAAAACAPwAAAABuAAAADQAAAAAAAAA0AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAADYAAAAAAACAPwAAAABuAAAADQAAAAAAAAA3AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADkAAAAAAACA PwAAAABuAAAADQAAAAAAAAA6AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADwAAAAAAACAPwAAAABuAAAADQAAAAAA AAA9AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD8AAAAAAACAPwAAAABuAAAADQAAAAAAAABAAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAQQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEIAAAAAAACAPwAAAABuAAAADQAAAAAAAABDAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAEUAAAAAAACAPwAAAABuAAAADQAAAAAAAABGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAEgAAAAAAACAPwAAAABuAAAADQAAAAAAAABJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEsAAAAAAACA PwAAAABuAAAADQAAAAAAAABMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE4AAAAAAACAPwAAAABuAAAADQAAAAAA AABPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFEAAAAAAACAPwAAAABuAAAADQAAAAAAAABSAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAUwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFQAAAAAAACAPwAAAABuAAAADQAAAAAAAABVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAFcAAAAAAACAPwAAAABuAAAADQAAAAAAAABYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAFoAAAAAAACAPwAAAABuAAAADQAAAAAAAABbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF0AAAAAAACA PwAAAABuAAAADQAAAAAAAABeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGAAAAAAAACAPwAAAABuAAAADQAAAAAA AABhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGMAAAAAAACAPwAAAAACAAAAAAAAAAAAAAABAAAAAwsAAAAAAABk AAAAHgAAAAAAAABOAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAAAwAAAAAAAAAtLS1nAAAAAAAAAAAAAABoAAAACgAAAAAAAAAAAAAAAAAAAAAA aQAAABIAAAAAAAAAAAAAAEA/AABAPwAAAD8AAEA/agAAABEAAAAAAAAAAAAAgD4AAAA/AABAPwAAgD5rAAAAEQAAAAAAAAAAAACAPgAAAD8AAIA+AAAAAGwA AAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAA AAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbgAAAA0AAAAAAAAAAAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAEAAAAAAACAPwAAAABuAAAA DQAAAAAAAAACAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAFAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAABgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAACQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAoAAAAAAACAPwAAAABuAAAADQAAAAAAAAALAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAA0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABAA AAAAAACAPwAAAABuAAAADQAAAAAAAAARAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABMAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAXAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAGAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAGwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAB8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACIA AAAAAACAPwAAAABuAAAADQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACUAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAmAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACgAAAAAAACAPwAAAABuAAAADQAAAAAAAAApAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAKgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAALQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAADEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAyAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADQA AAAAAACAPwAAAABuAAAADQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADcAAAAAAACAPwAAAABuAAAA DQAAAAAAAAA4AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADoAAAAAAACAPwAAAABuAAAADQAAAAAAAAA7AAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAPAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD0AAAAAAACAPwAAAABuAAAADQAAAAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAPwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEAAAAAAAACAPwAAAABuAAAADQAAAAAAAABBAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAEMAAAAAAACAPwAAAABuAAAADQAAAAAAAABEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEYA AAAAAACAPwAAAABuAAAADQAAAAAAAABHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEkAAAAAAACAPwAAAABuAAAA DQAAAAAAAABKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEwAAAAAAACAPwAAAABuAAAADQAAAAAAAABNAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAATgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE8AAAAAAACAPwAAAABuAAAADQAAAAAAAABQAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAUQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFIAAAAAAACAPwAAAABuAAAADQAAAAAAAABTAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAFUAAAAAAACAPwAAAABuAAAADQAAAAAAAABWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFgA AAAAAACAPwAAAABuAAAADQAAAAAAAABZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFsAAAAAAACAPwAAAABuAAAA DQAAAAAAAABcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF4AAAAAAACAPwAAAABuAAAADQAAAAAAAABfAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAYAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGEAAAAAAACAPwAAAABuAAAADQAAAAAAAABiAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAYwAAAAAAAIA/AAAAAAIAAAAAAAAAAAAAAAEAAAADCwAAAAAAAGQAAAAeAAAAAAAAAE8AAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAGYAAAADAAAA AAAAAC0tLWcAAAAAAAAAAAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAAAABpAAAAEgAAAAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACAPgAA AD8AAEA/AACAPmsAAAARAAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAAzczM PQAAgD8AAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABuAAAADQAAAAAAAAAA AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAIAAAAAAACAPwAAAABuAAAADQAAAAAAAAADAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAABAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABwAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAAgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAAsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA4AAAAAAACAPwAA AABuAAAADQAAAAAAAAAPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAS AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAVAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAFgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAABoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAB0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACAAAAAAAACAPwAA AABuAAAADQAAAAAAAAAhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAk AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAnAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAKAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAAAAAA AIA/AAAAAG4AAAANAAAAAAAAACwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAtAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAC8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADIAAAAAAACAPwAA AABuAAAADQAAAAAAAAAzAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADUAAAAAAACAPwAAAABuAAAADQAAAAAAAAA2 AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADgAAAAAAACAPwAAAABuAAAADQAAAAAAAAA5AAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAOgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADsAAAAAAACAPwAAAABuAAAADQAAAAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAD4AAAAAAACAPwAAAABuAAAADQAAAAAAAAA/AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAEEAAAAAAACAPwAAAABuAAAADQAAAAAAAABCAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEQAAAAAAACAPwAA AABuAAAADQAAAAAAAABFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEcAAAAAAACAPwAAAABuAAAADQAAAAAAAABI AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEoAAAAAAACAPwAAAABuAAAADQAAAAAAAABLAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAATAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE0AAAAAAACAPwAAAABuAAAADQAAAAAAAABOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATwAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAFAAAAAAAACAPwAAAABuAAAADQAAAAAAAABRAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAFMAAAAAAACAPwAAAABuAAAADQAAAAAAAABUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFYAAAAAAACAPwAA AABuAAAADQAAAAAAAABXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFkAAAAAAACAPwAAAABuAAAADQAAAAAAAABa AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFwAAAAAAACAPwAAAABuAAAADQAAAAAAAABdAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAXgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF8AAAAAAACAPwAAAABuAAAADQAAAAAAAABgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAGIAAAAAAACAPwAAAABuAAAADQAAAAAAAABjAAAAAAAAgD8AAAAAAgAAAAAAAAAAAAAAAQAAAAMLAAAAAAAAZAAAAB4AAAAA AAAAUAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAMAAAAAAAAALS0tZwAAAAAAAAAAAAAAaAAAAAoAAAAAAAAAAAAAAAAAAAAAAGkAAAASAAAA AAAAAAAAAABAPwAAQD8AAAA/AABAP2oAAAARAAAAAAAAAAAAAIA+AAAAPwAAQD8AAIA+awAAABEAAAAAAAAAAAAAgD4AAAA/AACAPgAAAABsAAAAFAAAAAAA AAAAAAAAzczMPQAAgD8AAAAAAAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAA BAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG4AAAANAAAAAAAAAAAAAAAAAACAPwAAAABuAAAADQAAAAAAAAABAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA AgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAAYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAkAAAAA AACAPwAAAABuAAAADQAAAAAAAAAKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAwAAAAAAACAPwAAAABuAAAADQAA AAAAAAANAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAQAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAEQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABIAAAAAAACAPwAAAABuAAAADQAAAAAAAAATAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA FAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAABgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABsAAAAA AACAPwAAAABuAAAADQAAAAAAAAAcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB4AAAAAAACAPwAAAABuAAAADQAA AAAAAAAfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAiAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAIwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAlAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA JgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAoAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAACoAAAAAAACAPwAAAABuAAAADQAAAAAAAAArAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC0AAAAA AACAPwAAAABuAAAADQAAAAAAAAAuAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADAAAAAAAACAPwAAAABuAAAADQAA AAAAAAAxAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADMAAAAAAACAPwAAAABuAAAADQAAAAAAAAA0AAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAANQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADYAAAAAAACAPwAAAABuAAAADQAAAAAAAAA3AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA OAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADkAAAAAAACAPwAAAABuAAAADQAAAAAAAAA6AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAADwAAAAAAACAPwAAAABuAAAADQAAAAAAAAA9AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD8AAAAA AACAPwAAAABuAAAADQAAAAAAAABAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEIAAAAAAACAPwAAAABuAAAADQAA AAAAAABDAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEUAAAAAAACAPwAAAABuAAAADQAAAAAAAABGAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAARwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEgAAAAAAACAPwAAAABuAAAADQAAAAAAAABJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA SgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEsAAAAAAACAPwAAAABuAAAADQAAAAAAAABMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAE4AAAAAAACAPwAAAABuAAAADQAAAAAAAABPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFEAAAAA AACAPwAAAABuAAAADQAAAAAAAABSAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFQAAAAAAACAPwAAAABuAAAADQAA AAAAAABVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFcAAAAAAACAPwAAAABuAAAADQAAAAAAAABYAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAWQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFoAAAAAAACAPwAAAABuAAAADQAAAAAAAABbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA XAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF0AAAAAAACAPwAAAABuAAAADQAAAAAAAABeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAGAAAAAAAACAPwAAAABuAAAADQAAAAAAAABhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGMAAAAA AACAPwAAAAACAAAAAAAAAAAAAAABAAAAAwsAAAAAAABkAAAAHgAAAAAAAABRAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAAAwAAAAAAAAAtLS1n AAAAAAAAAAAAAABoAAAACgAAAAAAAAAAAAAAAAAAAAAAaQAAABIAAAAAAAAAAAAAAEA/AABAPwAAAD8AAEA/agAAABEAAAAAAAAAAAAAgD4AAAA/AABAPwAA gD5rAAAAEQAAAAAAAAAAAACAPgAAAD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAA AAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbgAAAA0AAAAAAAAAAAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAAEAAAAAAACAPwAAAABuAAAADQAAAAAAAAACAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AAQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAcAAAAAAACAPwAAAABu AAAADQAAAAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAoAAAAAAACAPwAAAABuAAAADQAAAAAAAAALAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAOAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAADwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABAAAAAAAACAPwAAAABuAAAADQAAAAAAAAARAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAABMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ABYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABkAAAAAAACAPwAAAABu AAAADQAAAAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAdAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAgAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAIQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAACUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAmAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ACgAAAAAAACAPwAAAABuAAAADQAAAAAAAAApAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACsAAAAAAACAPwAAAABu AAAADQAAAAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAvAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAyAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAMwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADQAAAAAAACAPwAAAABuAAAADQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAADcAAAAAAACAPwAAAABuAAAADQAAAAAAAAA4AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ADoAAAAAAACAPwAAAABuAAAADQAAAAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD0AAAAAAACAPwAAAABu AAAADQAAAAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEAAAAAAAACAPwAAAABuAAAADQAAAAAAAABBAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEMAAAAAAACAPwAAAABuAAAADQAAAAAAAABEAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAARQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEYAAAAAAACAPwAAAABuAAAADQAAAAAAAABHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAEkAAAAAAACAPwAAAABuAAAADQAAAAAAAABKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AEwAAAAAAACAPwAAAABuAAAADQAAAAAAAABNAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE8AAAAAAACAPwAAAABu AAAADQAAAAAAAABQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFIAAAAAAACAPwAAAABuAAAADQAAAAAAAABTAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFUAAAAAAACAPwAAAABuAAAADQAAAAAAAABWAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAVwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFgAAAAAAACAPwAAAABuAAAADQAAAAAAAABZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAFsAAAAAAACAPwAAAABuAAAADQAAAAAAAABcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AF4AAAAAAACAPwAAAABuAAAADQAAAAAAAABfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGEAAAAAAACAPwAAAABu AAAADQAAAAAAAABiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/AAAAAAIAAAAAAAAAAAAAAAEAAAADCwAAAAAAAGQAAAAeAAAAAAAAAFIAAAAA AAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAGYAAAADAAAAAAAAAC0tLWcAAAAAAAAAAAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAAAABpAAAAEgAAAAAAAAAAAAAA QD8AAEA/AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/AACAPmsAAAARAAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAAbAAAABQAAAAAAAAAAAAAAM3M zD0AAIA/AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAA AAAAAG0AAAAEAAAAAAAAAAAAAABuAAAADQAAAAAAAAAAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAIAAAAAAACA PwAAAABuAAAADQAAAAAAAAADAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAUAAAAAAACAPwAAAABuAAAADQAAAAAA AAAGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAJAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAACgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAA4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAABEAAAAAAACAPwAAAABuAAAADQAAAAAAAAASAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABQAAAAAAACA PwAAAABuAAAADQAAAAAAAAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABcAAAAAAACAPwAAAABuAAAADQAAAAAA AAAYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAbAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAHAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAACAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAACMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAkAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACYAAAAAAACA PwAAAABuAAAADQAAAAAAAAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACkAAAAAAACAPwAAAABuAAAADQAAAAAA AAAqAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAtAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAALgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAADIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAzAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAADUAAAAAAACAPwAAAABuAAAADQAAAAAAAAA2AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADgAAAAAAACA PwAAAABuAAAADQAAAAAAAAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADsAAAAAAACAPwAAAABuAAAADQAAAAAA AAA8AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD4AAAAAAACAPwAAAABuAAAADQAAAAAAAAA/AAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAQAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEEAAAAAAACAPwAAAABuAAAADQAAAAAAAABCAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAEQAAAAAAACAPwAAAABuAAAADQAAAAAAAABFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAEcAAAAAAACAPwAAAABuAAAADQAAAAAAAABIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEoAAAAAAACA PwAAAABuAAAADQAAAAAAAABLAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE0AAAAAAACAPwAAAABuAAAADQAAAAAA AABOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFAAAAAAAACAPwAAAABuAAAADQAAAAAAAABRAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAUgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFMAAAAAAACAPwAAAABuAAAADQAAAAAAAABUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAFYAAAAAAACAPwAAAABuAAAADQAAAAAAAABXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAFkAAAAAAACAPwAAAABuAAAADQAAAAAAAABaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFwAAAAAAACA PwAAAABuAAAADQAAAAAAAABdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF8AAAAAAACAPwAAAABuAAAADQAAAAAA AABgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGIAAAAAAACAPwAAAABuAAAADQAAAAAAAABjAAAAAAAAgD8AAAAA AgAAAAAAAAAAAAAAAQAAAAMLAAAAAAAAZAAAAB4AAAAAAAAAUwAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAMAAAAAAAAALS0tZwAAAAAAAAAA AAAAaAAAAAoAAAAAAAAAAAAAAAAAAAAAAGkAAAASAAAAAAAAAAAAAABAPwAAQD8AAAA/AABAP2oAAAARAAAAAAAAAAAAAIA+AAAAPwAAQD8AAIA+awAAABEA AAAAAAAAAAAAgD4AAAA/AACAPgAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbQAA AAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG4AAAANAAAAAAAAAAAAAAAAAACAPwAAAABuAAAA DQAAAAAAAAABAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAEAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAABQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAHAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAACAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAAwAAAAAAACAPwAAAABuAAAADQAAAAAAAAANAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA8A AAAAAACAPwAAAABuAAAADQAAAAAAAAAQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABIAAAAAAACAPwAAAABuAAAA DQAAAAAAAAATAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAWAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAFwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAZAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAGgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAB4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACEA AAAAAACAPwAAAABuAAAADQAAAAAAAAAiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACQAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAlAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAoAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAKQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACoAAAAAAACAPwAAAABuAAAADQAAAAAAAAArAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAALAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAuAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAADAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAxAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADMA AAAAAACAPwAAAABuAAAADQAAAAAAAAA0AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADYAAAAAAACAPwAAAABuAAAA DQAAAAAAAAA3AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADkAAAAAAACAPwAAAABuAAAADQAAAAAAAAA6AAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAOwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADwAAAAAAACAPwAAAABuAAAADQAAAAAAAAA9AAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAPgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD8AAAAAAACAPwAAAABuAAAADQAAAAAAAABAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAEIAAAAAAACAPwAAAABuAAAADQAAAAAAAABDAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEUA AAAAAACAPwAAAABuAAAADQAAAAAAAABGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEgAAAAAAACAPwAAAABuAAAA DQAAAAAAAABJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEsAAAAAAACAPwAAAABuAAAADQAAAAAAAABMAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAATQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE4AAAAAAACAPwAAAABuAAAADQAAAAAAAABPAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAUAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFEAAAAAAACAPwAAAABuAAAADQAAAAAAAABSAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAFQAAAAAAACAPwAAAABuAAAADQAAAAAAAABVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFcA AAAAAACAPwAAAABuAAAADQAAAAAAAABYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFoAAAAAAACAPwAAAABuAAAA DQAAAAAAAABbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF0AAAAAAACAPwAAAABuAAAADQAAAAAAAABeAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAXwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGAAAAAAAACAPwAAAABuAAAADQAAAAAAAABhAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAYgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGMAAAAAAACAPwAAAAACAAAAAAAAAAAAAAABAAAAAwsAAAAAAABkAAAAHgAAAAAAAABUAAAAAAAAAIA/AAAA AAAAAAAAAAAAAAAAAAAAAABmAAAAAwAAAAAAAAAtLS1nAAAAAAAAAAAAAABoAAAACgAAAAAAAAAAAAAAAAAAAAAAaQAAABIAAAAAAAAAAAAAAEA/AABAPwAA AD8AAEA/agAAABEAAAAAAAAAAAAAgD4AAAA/AABAPwAAgD5rAAAAEQAAAAAAAAAAAACAPgAAAD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAA AAAAAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAA BAAAAAAAAAAAAAAAbgAAAA0AAAAAAAAAAAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAEAAAAAAACAPwAAAABuAAAADQAAAAAAAAACAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAAwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAAcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAAoAAAAAAACAPwAAAABuAAAADQAAAAAAAAALAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA0AAAAAAACAPwAA AABuAAAADQAAAAAAAAAOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAR AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAUAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAFQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAABkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAABwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB8AAAAAAACAPwAA AABuAAAADQAAAAAAAAAgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAj AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAmAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAJwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACgAAAAAAACAPwAAAABuAAAADQAAAAAAAAApAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAACsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAC4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADEAAAAAAACAPwAA AABuAAAADQAAAAAAAAAyAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADQAAAAAAACAPwAAAABuAAAADQAAAAAAAAA1 AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADcAAAAAAACAPwAAAABuAAAADQAAAAAAAAA4AAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAOQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADoAAAAAAACAPwAAAABuAAAADQAAAAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAD0AAAAAAACAPwAAAABuAAAADQAAAAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAEAAAAAAAACAPwAAAABuAAAADQAAAAAAAABBAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEMAAAAAAACAPwAA AABuAAAADQAAAAAAAABEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEYAAAAAAACAPwAAAABuAAAADQAAAAAAAABH AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEkAAAAAAACAPwAAAABuAAAADQAAAAAAAABKAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAASwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEwAAAAAAACAPwAAAABuAAAADQAAAAAAAABNAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAE8AAAAAAACAPwAAAABuAAAADQAAAAAAAABQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAFIAAAAAAACAPwAAAABuAAAADQAAAAAAAABTAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFUAAAAAAACAPwAA AABuAAAADQAAAAAAAABWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFgAAAAAAACAPwAAAABuAAAADQAAAAAAAABZ AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFsAAAAAAACAPwAAAABuAAAADQAAAAAAAABcAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAXQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF4AAAAAAACAPwAAAABuAAAADQAAAAAAAABfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAGEAAAAAAACAPwAAAABuAAAADQAAAAAAAABiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/AAAAAAIAAAAAAAAA AAAAAAEAAAADCwAAAAAAAGQAAAAeAAAAAAAAAFUAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAGYAAAADAAAAAAAAAC0tLWcAAAAAAAAAAAAAAGgAAAAK AAAAAAAAAAAAAAAAAAAAAABpAAAAEgAAAAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/AACAPmsAAAARAAAAAAAAAAAA AIA+AAAAPwAAgD4AAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAG0AAAAEAAAAAAAA AAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABuAAAADQAAAAAAAAAAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA AQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAIAAAAAAACAPwAAAABuAAAADQAAAAAAAAADAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAAUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAgAAAAA AACAPwAAAABuAAAADQAAAAAAAAAJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAsAAAAAAACAPwAAAABuAAAADQAA AAAAAAAMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAPAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAEAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABEAAAAAAACAPwAAAABuAAAADQAAAAAAAAASAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA EwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAABcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABoAAAAA AACAPwAAAABuAAAADQAAAAAAAAAbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB0AAAAAAACAPwAAAABuAAAADQAA AAAAAAAeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAhAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAIgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAkAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA JQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAACkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACwAAAAA AACAPwAAAABuAAAADQAAAAAAAAAtAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC8AAAAAAACAPwAAAABuAAAADQAA AAAAAAAwAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAzAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAANAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADUAAAAAAACAPwAAAABuAAAADQAAAAAAAAA2AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA NwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADgAAAAAAACAPwAAAABuAAAADQAAAAAAAAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAADsAAAAAAACAPwAAAABuAAAADQAAAAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD4AAAAA AACAPwAAAABuAAAADQAAAAAAAAA/AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEEAAAAAAACAPwAAAABuAAAADQAA AAAAAABCAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEQAAAAAAACAPwAAAABuAAAADQAAAAAAAABFAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAARgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEcAAAAAAACAPwAAAABuAAAADQAAAAAAAABIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA SQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEoAAAAAAACAPwAAAABuAAAADQAAAAAAAABLAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAE0AAAAAAACAPwAAAABuAAAADQAAAAAAAABOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFAAAAAA AACAPwAAAABuAAAADQAAAAAAAABRAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFMAAAAAAACAPwAAAABuAAAADQAA AAAAAABUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFYAAAAAAACAPwAAAABuAAAADQAAAAAAAABXAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAWAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFkAAAAAAACAPwAAAABuAAAADQAAAAAAAABaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA WwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFwAAAAAAACAPwAAAABuAAAADQAAAAAAAABdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAF8AAAAAAACAPwAAAABuAAAADQAAAAAAAABgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGIAAAAA AACAPwAAAABuAAAADQAAAAAAAABjAAAAAAAAgD8AAAAAAgAAAAAAAAAAAAAAAQAAAAMLAAAAAAAAZAAAAB4AAAAAAAAAVgAAAAAAAACAPwAAAAAAAAAAAAAA AAAAAAAAAAAAZgAAAAMAAAAAAAAALS0tZwAAAAAAAAAAAAAAaAAAAAoAAAAAAAAAAAAAAAAAAAAAAGkAAAASAAAAAAAAAAAAAABAPwAAQD8AAAA/AABAP2oA AAARAAAAAAAAAAAAAIA+AAAAPwAAQD8AAIA+awAAABEAAAAAAAAAAAAAgD4AAAA/AACAPgAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAGwA AAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAA AAAAAG4AAAANAAAAAAAAAAAAAAAAAACAPwAAAABuAAAADQAAAAAAAAABAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AAMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAYAAAAAAACAPwAAAABu AAAADQAAAAAAAAAHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAKAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAACwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAwAAAAAAACAPwAAAABuAAAADQAAAAAAAAANAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAADgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAABIAAAAAAACAPwAAAABuAAAADQAAAAAAAAATAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ABUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABgAAAAAAACAPwAAAABu AAAADQAAAAAAAAAZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAcAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAHQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAfAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAIAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAACQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAlAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ACcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAoAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACoAAAAAAACAPwAAAABu AAAADQAAAAAAAAArAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAuAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAALwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAxAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAMgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADMAAAAAAACAPwAAAABuAAAADQAAAAAAAAA0AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAADYAAAAAAACAPwAAAABuAAAADQAAAAAAAAA3AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ADkAAAAAAACAPwAAAABuAAAADQAAAAAAAAA6AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADwAAAAAAACAPwAAAABu AAAADQAAAAAAAAA9AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD8AAAAAAACAPwAAAABuAAAADQAAAAAAAABAAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAQQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEIAAAAAAACAPwAAAABuAAAADQAAAAAAAABDAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAARAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEUAAAAAAACAPwAAAABuAAAADQAAAAAAAABGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAEgAAAAAAACAPwAAAABuAAAADQAAAAAAAABJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AEsAAAAAAACAPwAAAABuAAAADQAAAAAAAABMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE4AAAAAAACAPwAAAABu AAAADQAAAAAAAABPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFEAAAAAAACAPwAAAABuAAAADQAAAAAAAABSAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAUwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFQAAAAAAACAPwAAAABuAAAADQAAAAAAAABVAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAVgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFcAAAAAAACAPwAAAABuAAAADQAAAAAAAABYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAFoAAAAAAACAPwAAAABuAAAADQAAAAAAAABbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AF0AAAAAAACAPwAAAABuAAAADQAAAAAAAABeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGAAAAAAAACAPwAAAABu AAAADQAAAAAAAABhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGMAAAAAAACAPwAAAAACAAAAAAAAAAAAAAABAAAA AwsAAAAAAABkAAAAHgAAAAAAAABXAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAAAwAAAAAAAAAtLS1nAAAAAAAAAAAAAABoAAAACgAAAAAAAAAA AAAAAAAAAAAAaQAAABIAAAAAAAAAAAAAAEA/AABAPwAAAD8AAEA/agAAABEAAAAAAAAAAAAAgD4AAAA/AABAPwAAgD5rAAAAEQAAAAAAAAAAAACAPgAAAD8A AIA+AAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAA AAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbgAAAA0AAAAAAAAAAAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAEAAAAAAACA PwAAAABuAAAADQAAAAAAAAACAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAQAAAAAAACAPwAAAABuAAAADQAAAAAA AAAFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAIAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAACQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAoAAAAAAACAPwAAAABuAAAADQAAAAAAAAALAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAA0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAABAAAAAAAACAPwAAAABuAAAADQAAAAAAAAARAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABMAAAAAAACA PwAAAABuAAAADQAAAAAAAAAUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABYAAAAAAACAPwAAAABuAAAADQAAAAAA AAAXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAaAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAGwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAB8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAACIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACUAAAAAAACA PwAAAABuAAAADQAAAAAAAAAmAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACgAAAAAAACAPwAAAABuAAAADQAAAAAA AAApAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAsAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAALQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAADEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAyAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAADQAAAAAAACAPwAAAABuAAAADQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADcAAAAAAACA PwAAAABuAAAADQAAAAAAAAA4AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADoAAAAAAACAPwAAAABuAAAADQAAAAAA AAA7AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD0AAAAAAACAPwAAAABuAAAADQAAAAAAAAA+AAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAPwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEAAAAAAAACAPwAAAABuAAAADQAAAAAAAABBAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAEMAAAAAAACAPwAAAABuAAAADQAAAAAAAABEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAEYAAAAAAACAPwAAAABuAAAADQAAAAAAAABHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEkAAAAAAACA PwAAAABuAAAADQAAAAAAAABKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEwAAAAAAACAPwAAAABuAAAADQAAAAAA AABNAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE8AAAAAAACAPwAAAABuAAAADQAAAAAAAABQAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAUQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFIAAAAAAACAPwAAAABuAAAADQAAAAAAAABTAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAFUAAAAAAACAPwAAAABuAAAADQAAAAAAAABWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAFgAAAAAAACAPwAAAABuAAAADQAAAAAAAABZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFsAAAAAAACA PwAAAABuAAAADQAAAAAAAABcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF4AAAAAAACAPwAAAABuAAAADQAAAAAA AABfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGEAAAAAAACAPwAAAABuAAAADQAAAAAAAABiAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAYwAAAAAAAIA/AAAAAAIAAAAAAAAAAAAAAAEAAAADCwAAAAAAAGQAAAAeAAAAAAAAAFgAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAA AGYAAAADAAAAAAAAAC0tLWcAAAAAAAAAAAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAAAABpAAAAEgAAAAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAAAAAA AAAAAACAPgAAAD8AAEA/AACAPmsAAAARAAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABsAAAAFAAAAAAA AAAAAAAAzczMPQAAgD8AAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABuAAAA DQAAAAAAAAAAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAIAAAAAAACAPwAAAABuAAAADQAAAAAAAAADAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAABAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAABwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAAsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA4A AAAAAACAPwAAAABuAAAADQAAAAAAAAAPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABEAAAAAAACAPwAAAABuAAAA DQAAAAAAAAASAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAVAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAFgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAGQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAB0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACAA AAAAAACAPwAAAABuAAAADQAAAAAAAAAhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACMAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAkAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAnAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAKAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAKwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAtAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAC8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADIA AAAAAACAPwAAAABuAAAADQAAAAAAAAAzAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADUAAAAAAACAPwAAAABuAAAA DQAAAAAAAAA2AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADgAAAAAAACAPwAAAABuAAAADQAAAAAAAAA5AAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAOgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADsAAAAAAACAPwAAAABuAAAADQAAAAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAPQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD4AAAAAAACAPwAAAABuAAAADQAAAAAAAAA/AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAEEAAAAAAACAPwAAAABuAAAADQAAAAAAAABCAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEQA AAAAAACAPwAAAABuAAAADQAAAAAAAABFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEcAAAAAAACAPwAAAABuAAAA DQAAAAAAAABIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEoAAAAAAACAPwAAAABuAAAADQAAAAAAAABLAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAATAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE0AAAAAAACAPwAAAABuAAAADQAAAAAAAABOAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAATwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFAAAAAAAACAPwAAAABuAAAADQAAAAAAAABRAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAFMAAAAAAACAPwAAAABuAAAADQAAAAAAAABUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFYA AAAAAACAPwAAAABuAAAADQAAAAAAAABXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFkAAAAAAACAPwAAAABuAAAA DQAAAAAAAABaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFwAAAAAAACAPwAAAABuAAAADQAAAAAAAABdAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAXgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF8AAAAAAACAPwAAAABuAAAADQAAAAAAAABgAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAYQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGIAAAAAAACAPwAAAABuAAAADQAAAAAAAABjAAAAAAAAgD8AAAAAAgAAAAAAAAAAAAAAAQAAAAMLAAAAAAAA ZAAAAB4AAAAAAAAAWQAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAMAAAAAAAAALS0tZwAAAAAAAAAAAAAAaAAAAAoAAAAAAAAAAAAAAAAAAAAA AGkAAAASAAAAAAAAAAAAAABAPwAAQD8AAAA/AABAP2oAAAARAAAAAAAAAAAAAIA+AAAAPwAAQD8AAIA+awAAABEAAAAAAAAAAAAAgD4AAAA/AACAPgAAAABs AAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAA AAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG4AAAANAAAAAAAAAAAAAAAAAACAPwAAAABuAAAADQAAAAAAAAABAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAAgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAAYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAAkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAwAAAAAAACAPwAA AABuAAAADQAAAAAAAAANAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAQ AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABIAAAAAAACAPwAAAABuAAAADQAAAAAAAAATAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAFAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFwAAAAAA AIA/AAAAAG4AAAANAAAAAAAAABgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAABsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB4AAAAAAACAPwAA AABuAAAADQAAAAAAAAAfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAi AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAlAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAJgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAoAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAACoAAAAAAACAPwAAAABuAAAADQAAAAAAAAArAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAC0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAuAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADAAAAAAAACAPwAA AABuAAAADQAAAAAAAAAxAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADMAAAAAAACAPwAAAABuAAAADQAAAAAAAAA0 AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADYAAAAAAACAPwAAAABuAAAADQAAAAAAAAA3AAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAOAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADkAAAAAAACAPwAAAABuAAAADQAAAAAAAAA6AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOwAAAAAA AIA/AAAAAG4AAAANAAAAAAAAADwAAAAAAACAPwAAAABuAAAADQAAAAAAAAA9AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAD8AAAAAAACAPwAAAABuAAAADQAAAAAAAABAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEIAAAAAAACAPwAA AABuAAAADQAAAAAAAABDAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEUAAAAAAACAPwAAAABuAAAADQAAAAAAAABG AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEgAAAAAAACAPwAAAABuAAAADQAAAAAAAABJAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAASgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEsAAAAAAACAPwAAAABuAAAADQAAAAAAAABMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAE4AAAAAAACAPwAAAABuAAAADQAAAAAAAABPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAFEAAAAAAACAPwAAAABuAAAADQAAAAAAAABSAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFQAAAAAAACAPwAA AABuAAAADQAAAAAAAABVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFcAAAAAAACAPwAAAABuAAAADQAAAAAAAABY AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFoAAAAAAACAPwAAAABuAAAADQAAAAAAAABbAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAXAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF0AAAAAAACAPwAAAABuAAAADQAAAAAAAABeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXwAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAGAAAAAAAACAPwAAAABuAAAADQAAAAAAAABhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAGMAAAAAAACAPwAAAAACAAAAAAAAAAAAAAABAAAAAwsAAAAAAABkAAAAHgAAAAAAAABaAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAAAwAA AAAAAAAtLS1nAAAAAAAAAAAAAABoAAAACgAAAAAAAAAAAAAAAAAAAAAAaQAAABIAAAAAAAAAAAAAAEA/AABAPwAAAD8AAEA/agAAABEAAAAAAAAAAAAAgD4A AAA/AABAPwAAgD5rAAAAEQAAAAAAAAAAAACAPgAAAD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbAAAABQAAAAAAAAAAAAAAM3M zD0AAIA/AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbgAAAA0AAAAAAAAA AAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAEAAAAAAACAPwAAAABuAAAADQAAAAAAAAACAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAAQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAcAAAAA AACAPwAAAABuAAAADQAAAAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAoAAAAAAACAPwAAAABuAAAADQAA AAAAAAALAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAOAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABAAAAAAAACAPwAAAABuAAAADQAAAAAAAAARAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA EgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAABYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABkAAAAA AACAPwAAAABuAAAADQAAAAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABwAAAAAAACAPwAAAABuAAAADQAA AAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAgAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA JAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAmAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAACgAAAAAAACAPwAAAABuAAAADQAAAAAAAAApAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACsAAAAA AACAPwAAAABuAAAADQAAAAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC4AAAAAAACAPwAAAABuAAAADQAA AAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAyAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADQAAAAAAACAPwAAAABuAAAADQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA NgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADcAAAAAAACAPwAAAABuAAAADQAAAAAAAAA4AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAADoAAAAAAACAPwAAAABuAAAADQAAAAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD0AAAAA AACAPwAAAABuAAAADQAAAAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEAAAAAAAACAPwAAAABuAAAADQAA AAAAAABBAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEMAAAAAAACAPwAAAABuAAAADQAAAAAAAABEAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEYAAAAAAACAPwAAAABuAAAADQAAAAAAAABHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA SAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEkAAAAAAACAPwAAAABuAAAADQAAAAAAAABKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAEwAAAAAAACAPwAAAABuAAAADQAAAAAAAABNAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE8AAAAA AACAPwAAAABuAAAADQAAAAAAAABQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFIAAAAAAACAPwAAAABuAAAADQAA AAAAAABTAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFUAAAAAAACAPwAAAABuAAAADQAAAAAAAABWAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFgAAAAAAACAPwAAAABuAAAADQAAAAAAAABZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA WgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFsAAAAAAACAPwAAAABuAAAADQAAAAAAAABcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAF4AAAAAAACAPwAAAABuAAAADQAAAAAAAABfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGEAAAAA AACAPwAAAABuAAAADQAAAAAAAABiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/AAAAAAIAAAAAAAAAAAAAAAEAAAADCwAAAAAAAGQAAAAeAAAA AAAAAFsAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAGYAAAADAAAAAAAAAC0tLWcAAAAAAAAAAAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAAAABpAAAAEgAA AAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/AACAPmsAAAARAAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAAbAAAABQAAAAA AAAAAAAAAM3MzD0AAIA/AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAA AAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABuAAAADQAAAAAAAAAAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AAIAAAAAAACAPwAAAABuAAAADQAAAAAAAAADAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAUAAAAAAACAPwAAAABu AAAADQAAAAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAJAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAADQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAABEAAAAAAACAPwAAAABuAAAADQAAAAAAAAASAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ABQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABcAAAAAAACAPwAAAABu AAAADQAAAAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAbAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAHwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAACMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAkAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ACYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACkAAAAAAACAPwAAAABu AAAADQAAAAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAtAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAMQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAzAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAADUAAAAAAACAPwAAAABuAAAADQAAAAAAAAA2AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ADgAAAAAAACAPwAAAABuAAAADQAAAAAAAAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADsAAAAAAACAPwAAAABu AAAADQAAAAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD4AAAAAAACAPwAAAABuAAAADQAAAAAAAAA/AAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEEAAAAAAACAPwAAAABuAAAADQAAAAAAAABCAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAQwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEQAAAAAAACAPwAAAABuAAAADQAAAAAAAABFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAEcAAAAAAACAPwAAAABuAAAADQAAAAAAAABIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AEoAAAAAAACAPwAAAABuAAAADQAAAAAAAABLAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE0AAAAAAACAPwAAAABu AAAADQAAAAAAAABOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFAAAAAAAACAPwAAAABuAAAADQAAAAAAAABRAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFMAAAAAAACAPwAAAABuAAAADQAAAAAAAABUAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAVQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFYAAAAAAACAPwAAAABuAAAADQAAAAAAAABXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAFkAAAAAAACAPwAAAABuAAAADQAAAAAAAABaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AFwAAAAAAACAPwAAAABuAAAADQAAAAAAAABdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF8AAAAAAACAPwAAAABu AAAADQAAAAAAAABgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGIAAAAAAACAPwAAAABuAAAADQAAAAAAAABjAAAA AAAAgD8AAAAAAgAAAAAAAAAAAAAAAQAAAAMLAAAAAAAAZAAAAB4AAAAAAAAAXAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAMAAAAAAAAALS0t ZwAAAAAAAAAAAAAAaAAAAAoAAAAAAAAAAAAAAAAAAAAAAGkAAAASAAAAAAAAAAAAAABAPwAAQD8AAAA/AABAP2oAAAARAAAAAAAAAAAAAIA+AAAAPwAAQD8A AIA+awAAABEAAAAAAAAAAAAAgD4AAAA/AACAPgAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAA AAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG4AAAANAAAAAAAAAAAAAAAAAACA PwAAAABuAAAADQAAAAAAAAABAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAMAAAAAAACAPwAAAABuAAAADQAAAAAA AAAEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAHAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAACAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAAwAAAAAAACAPwAAAABuAAAADQAAAAAAAAANAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAA8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABIAAAAAAACA PwAAAABuAAAADQAAAAAAAAATAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABUAAAAAAACAPwAAAABuAAAADQAAAAAA AAAWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAZAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAGgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAB4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAACEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACQAAAAAAACA PwAAAABuAAAADQAAAAAAAAAlAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACcAAAAAAACAPwAAAABuAAAADQAAAAAA AAAoAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACoAAAAAAACAPwAAAABuAAAADQAAAAAAAAArAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAALAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAuAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAADAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAxAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAADMAAAAAAACAPwAAAABuAAAADQAAAAAAAAA0AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADYAAAAAAACA PwAAAABuAAAADQAAAAAAAAA3AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADkAAAAAAACAPwAAAABuAAAADQAAAAAA AAA6AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADwAAAAAAACAPwAAAABuAAAADQAAAAAAAAA9AAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAPgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD8AAAAAAACAPwAAAABuAAAADQAAAAAAAABAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAEIAAAAAAACAPwAAAABuAAAADQAAAAAAAABDAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAEUAAAAAAACAPwAAAABuAAAADQAAAAAAAABGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEgAAAAAAACA PwAAAABuAAAADQAAAAAAAABJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEsAAAAAAACAPwAAAABuAAAADQAAAAAA AABMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE4AAAAAAACAPwAAAABuAAAADQAAAAAAAABPAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAUAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFEAAAAAAACAPwAAAABuAAAADQAAAAAAAABSAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAFQAAAAAAACAPwAAAABuAAAADQAAAAAAAABVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAFcAAAAAAACAPwAAAABuAAAADQAAAAAAAABYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFoAAAAAAACA PwAAAABuAAAADQAAAAAAAABbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF0AAAAAAACAPwAAAABuAAAADQAAAAAA AABeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGAAAAAAAACAPwAAAABuAAAADQAAAAAAAABhAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAYgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGMAAAAAAACAPwAAAAACAAAAAAAAAAAAAAABAAAAAwsAAAAAAABkAAAAHgAAAAAAAABdAAAA AAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAAAwAAAAAAAAAtLS1nAAAAAAAAAAAAAABoAAAACgAAAAAAAAAAAAAAAAAAAAAAaQAAABIAAAAAAAAAAAAA AEA/AABAPwAAAD8AAEA/agAAABEAAAAAAAAAAAAAgD4AAAA/AABAPwAAgD5rAAAAEQAAAAAAAAAAAACAPgAAAD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAAAADN zMw9AACAPwAAAAAAAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAA AAAAAABtAAAABAAAAAAAAAAAAAAAbgAAAA0AAAAAAAAAAAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAEAAAAAAACAPwAAAABuAAAADQAAAAAAAAACAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAABgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAAoAAAAAAACAPwAAAABuAAAADQAAAAAAAAALAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA0A AAAAAACAPwAAAABuAAAADQAAAAAAAAAOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABAAAAAAAACAPwAAAABuAAAA DQAAAAAAAAARAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAUAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAGAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAABwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB8A AAAAAACAPwAAAABuAAAADQAAAAAAAAAgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACIAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAmAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACgAAAAAAACAPwAAAABuAAAADQAAAAAAAAApAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAKgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAC4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADEA AAAAAACAPwAAAABuAAAADQAAAAAAAAAyAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADQAAAAAAACAPwAAAABuAAAA DQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADcAAAAAAACAPwAAAABuAAAADQAAAAAAAAA4AAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADoAAAAAAACAPwAAAABuAAAADQAAAAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAPAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD0AAAAAAACAPwAAAABuAAAADQAAAAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAEAAAAAAAACAPwAAAABuAAAADQAAAAAAAABBAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEMA AAAAAACAPwAAAABuAAAADQAAAAAAAABEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEYAAAAAAACAPwAAAABuAAAA DQAAAAAAAABHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEkAAAAAAACAPwAAAABuAAAADQAAAAAAAABKAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAASwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEwAAAAAAACAPwAAAABuAAAADQAAAAAAAABNAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAATgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE8AAAAAAACAPwAAAABuAAAADQAAAAAAAABQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAFIAAAAAAACAPwAAAABuAAAADQAAAAAAAABTAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFUA AAAAAACAPwAAAABuAAAADQAAAAAAAABWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFgAAAAAAACAPwAAAABuAAAA DQAAAAAAAABZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFsAAAAAAACAPwAAAABuAAAADQAAAAAAAABcAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF4AAAAAAACAPwAAAABuAAAADQAAAAAAAABfAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAYAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGEAAAAAAACAPwAAAABuAAAADQAAAAAAAABiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/AAAA AAIAAAAAAAAAAAAAAAEAAAADCwAAAAAAAGQAAAAeAAAAAAAAAF4AAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAGYAAAADAAAAAAAAAC0tLWcAAAAAAAAA AAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAAAABpAAAAEgAAAAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/AACAPmsAAAAR AAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAG0A AAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABuAAAADQAAAAAAAAAAAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAIAAAAAAACAPwAAAABuAAAADQAAAAAAAAADAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAAUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAAgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAsAAAAAAACAPwAA AABuAAAADQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAP AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABEAAAAAAACAPwAAAABuAAAADQAAAAAAAAASAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAABcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAABoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB0AAAAAAACAPwAA AABuAAAADQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAh AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAkAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAACkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAACwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAtAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC8AAAAAAACAPwAA AABuAAAADQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAz AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADUAAAAAAACAPwAAAABuAAAADQAAAAAAAAA2AAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAANwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADgAAAAAAACAPwAAAABuAAAADQAAAAAAAAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAADsAAAAAAACAPwAAAABuAAAADQAAAAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAD4AAAAAAACAPwAAAABuAAAADQAAAAAAAAA/AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEEAAAAAAACAPwAA AABuAAAADQAAAAAAAABCAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEQAAAAAAACAPwAAAABuAAAADQAAAAAAAABF AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEcAAAAAAACAPwAAAABuAAAADQAAAAAAAABIAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAASQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEoAAAAAAACAPwAAAABuAAAADQAAAAAAAABLAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAE0AAAAAAACAPwAAAABuAAAADQAAAAAAAABOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAFAAAAAAAACAPwAAAABuAAAADQAAAAAAAABRAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFMAAAAAAACAPwAA AABuAAAADQAAAAAAAABUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFYAAAAAAACAPwAAAABuAAAADQAAAAAAAABX AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFkAAAAAAACAPwAAAABuAAAADQAAAAAAAABaAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFwAAAAAAACAPwAAAABuAAAADQAAAAAAAABdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAF8AAAAAAACAPwAAAABuAAAADQAAAAAAAABgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAGIAAAAAAACAPwAAAABuAAAADQAAAAAAAABjAAAAAAAAgD8AAAAAAgAAAAAAAAAAAAAAAQAAAAMLAAAAAAAAZAAAAB4AAAAAAAAAXwAAAAAAAACAPwAA AAAAAAAAAAAAAAAAAAAAAAAAZgAAAAMAAAAAAAAALS0tZwAAAAAAAAAAAAAAaAAAAAoAAAAAAAAAAAAAAAAAAAAAAGkAAAASAAAAAAAAAAAAAABAPwAAQD8A AAA/AABAP2oAAAARAAAAAAAAAAAAAIA+AAAAPwAAQD8AAIA+awAAABEAAAAAAAAAAAAAgD4AAAA/AACAPgAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8A AAAAAAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAA AAQAAAAAAAAAAAAAAG4AAAANAAAAAAAAAAAAAAAAAACAPwAAAABuAAAADQAAAAAAAAABAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAAMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAYAAAAA AACAPwAAAABuAAAADQAAAAAAAAAHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAkAAAAAAACAPwAAAABuAAAADQAA AAAAAAAKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAwAAAAAAACAPwAAAABuAAAADQAAAAAAAAANAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAADgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA EQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABIAAAAAAACAPwAAAABuAAAADQAAAAAAAAATAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAABUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABgAAAAA AACAPwAAAABuAAAADQAAAAAAAAAZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABsAAAAAAACAPwAAAABuAAAADQAA AAAAAAAcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAfAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAIAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA IwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAlAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAACcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAoAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACoAAAAA AACAPwAAAABuAAAADQAAAAAAAAArAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC0AAAAAAACAPwAAAABuAAAADQAA AAAAAAAuAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAxAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAMgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADMAAAAAAACAPwAAAABuAAAADQAAAAAAAAA0AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA NQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADYAAAAAAACAPwAAAABuAAAADQAAAAAAAAA3AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAADkAAAAAAACAPwAAAABuAAAADQAAAAAAAAA6AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADwAAAAA AACAPwAAAABuAAAADQAAAAAAAAA9AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD8AAAAAAACAPwAAAABuAAAADQAA AAAAAABAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEIAAAAAAACAPwAAAABuAAAADQAAAAAAAABDAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAARAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEUAAAAAAACAPwAAAABuAAAADQAAAAAAAABGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA RwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEgAAAAAAACAPwAAAABuAAAADQAAAAAAAABJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAEsAAAAAAACAPwAAAABuAAAADQAAAAAAAABMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE4AAAAA AACAPwAAAABuAAAADQAAAAAAAABPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFEAAAAAAACAPwAAAABuAAAADQAA AAAAAABSAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFQAAAAAAACAPwAAAABuAAAADQAAAAAAAABVAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAVgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFcAAAAAAACAPwAAAABuAAAADQAAAAAAAABYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA WQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFoAAAAAAACAPwAAAABuAAAADQAAAAAAAABbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAF0AAAAAAACAPwAAAABuAAAADQAAAAAAAABeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGAAAAAA AACAPwAAAABuAAAADQAAAAAAAABhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGMAAAAAAACAPwAAAAACAAAAAAAA AAAAAAABAAAAAwsAAAAAAABkAAAAHgAAAAAAAABgAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAAAwAAAAAAAAAtLS1nAAAAAAAAAAAAAABoAAAA CgAAAAAAAAAAAAAAAAAAAAAAaQAAABIAAAAAAAAAAAAAAEA/AABAPwAAAD8AAEA/agAAABEAAAAAAAAAAAAAgD4AAAA/AABAPwAAgD5rAAAAEQAAAAAAAAAA AACAPgAAAD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABtAAAABAAAAAAA AAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbgAAAA0AAAAAAAAAAAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AAEAAAAAAACAPwAAAABuAAAADQAAAAAAAAACAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAQAAAAAAACAPwAAAABu AAAADQAAAAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAIAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAoAAAAAAACAPwAAAABuAAAADQAAAAAAAAALAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAADAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAABAAAAAAAACAPwAAAABuAAAADQAAAAAAAAARAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ABMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABYAAAAAAACAPwAAAABu AAAADQAAAAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAaAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAHgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAACIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ACUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAmAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACgAAAAAAACAPwAAAABu AAAADQAAAAAAAAApAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAsAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAMAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAyAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAADQAAAAAAACAPwAAAABuAAAADQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ADcAAAAAAACAPwAAAABuAAAADQAAAAAAAAA4AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADoAAAAAAACAPwAAAABu AAAADQAAAAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD0AAAAAAACAPwAAAABuAAAADQAAAAAAAAA+AAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEAAAAAAAACAPwAAAABuAAAADQAAAAAAAABBAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAQgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEMAAAAAAACAPwAAAABuAAAADQAAAAAAAABEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAEYAAAAAAACAPwAAAABuAAAADQAAAAAAAABHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AEkAAAAAAACAPwAAAABuAAAADQAAAAAAAABKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEwAAAAAAACAPwAAAABu AAAADQAAAAAAAABNAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE8AAAAAAACAPwAAAABuAAAADQAAAAAAAABQAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFIAAAAAAACAPwAAAABuAAAADQAAAAAAAABTAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAVAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFUAAAAAAACAPwAAAABuAAAADQAAAAAAAABWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAFgAAAAAAACAPwAAAABuAAAADQAAAAAAAABZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AFsAAAAAAACAPwAAAABuAAAADQAAAAAAAABcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF4AAAAAAACAPwAAAABu AAAADQAAAAAAAABfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGEAAAAAAACAPwAAAABuAAAADQAAAAAAAABiAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/AAAAAAIAAAAAAAAAAAAAAAEAAAADCwAAAAAAAGQAAAAeAAAAAAAAAGEAAAAAAAAAgD8AAAAAAAAAAAAA AAAAAAAAAAAAAGYAAAADAAAAAAAAAC0tLWcAAAAAAAAAAAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAAAABpAAAAEgAAAAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9q AAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/AACAPmsAAAARAAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABs AAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAA AAAAAABuAAAADQAAAAAAAAAAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAIAAAAAAACAPwAAAABuAAAADQAAAAAA AAADAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAGAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAABwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAAsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAA4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABEAAAAAAACA PwAAAABuAAAADQAAAAAAAAASAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABQAAAAAAACAPwAAAABuAAAADQAAAAAA AAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAYAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAB0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAACAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACMAAAAAAACA PwAAAABuAAAADQAAAAAAAAAkAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACYAAAAAAACAPwAAAABuAAAADQAAAAAA AAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAqAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAtAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAC8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAADIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAzAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADUAAAAAAACA PwAAAABuAAAADQAAAAAAAAA2AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADgAAAAAAACAPwAAAABuAAAADQAAAAAA AAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADsAAAAAAACAPwAAAABuAAAADQAAAAAAAAA8AAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD4AAAAAAACAPwAAAABuAAAADQAAAAAAAAA/AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAEEAAAAAAACAPwAAAABuAAAADQAAAAAAAABCAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAEQAAAAAAACAPwAAAABuAAAADQAAAAAAAABFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEcAAAAAAACA PwAAAABuAAAADQAAAAAAAABIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEoAAAAAAACAPwAAAABuAAAADQAAAAAA AABLAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE0AAAAAAACAPwAAAABuAAAADQAAAAAAAABOAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAATwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFAAAAAAAACAPwAAAABuAAAADQAAAAAAAABRAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAFMAAAAAAACAPwAAAABuAAAADQAAAAAAAABUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAFYAAAAAAACAPwAAAABuAAAADQAAAAAAAABXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFkAAAAAAACA PwAAAABuAAAADQAAAAAAAABaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFwAAAAAAACAPwAAAABuAAAADQAAAAAA AABdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF8AAAAAAACAPwAAAABuAAAADQAAAAAAAABgAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGIAAAAAAACAPwAAAABuAAAADQAAAAAAAABjAAAAAAAAgD8AAAAAAgAAAAAAAAAAAAAAAQAA AAMLAAAAAAAAZAAAAB4AAAAAAAAAYgAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAMAAAAAAAAALS0tZwAAAAAAAAAAAAAAaAAAAAoAAAAAAAAA AAAAAAAAAAAAAGkAAAASAAAAAAAAAAAAAABAPwAAQD8AAAA/AABAP2oAAAARAAAAAAAAAAAAAIA+AAAAPwAAQD8AAIA+awAAABEAAAAAAAAAAAAAgD4AAAA/ AACAPgAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0A AAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG4AAAANAAAAAAAAAAAAAAAAAACAPwAAAABuAAAADQAAAAAAAAABAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAAgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAEAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAABQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAAkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAwA AAAAAACAPwAAAABuAAAADQAAAAAAAAANAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA8AAAAAAACAPwAAAABuAAAA DQAAAAAAAAAQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABIAAAAAAACAPwAAAABuAAAADQAAAAAAAAATAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAFAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAWAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAFwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAABsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB4A AAAAAACAPwAAAABuAAAADQAAAAAAAAAfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACEAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAlAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAJgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAoAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAKQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACoAAAAAAACAPwAAAABuAAAADQAAAAAAAAArAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAC0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAuAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADAA AAAAAACAPwAAAABuAAAADQAAAAAAAAAxAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADMAAAAAAACAPwAAAABuAAAA DQAAAAAAAAA0AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADYAAAAAAACAPwAAAABuAAAADQAAAAAAAAA3AAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAOAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADkAAAAAAACAPwAAAABuAAAADQAAAAAAAAA6AAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAOwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADwAAAAAAACAPwAAAABuAAAADQAAAAAAAAA9AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAD8AAAAAAACAPwAAAABuAAAADQAAAAAAAABAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEIA AAAAAACAPwAAAABuAAAADQAAAAAAAABDAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEUAAAAAAACAPwAAAABuAAAA DQAAAAAAAABGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEgAAAAAAACAPwAAAABuAAAADQAAAAAAAABJAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAASgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEsAAAAAAACAPwAAAABuAAAADQAAAAAAAABMAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAATQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE4AAAAAAACAPwAAAABuAAAADQAAAAAAAABPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAFEAAAAAAACAPwAAAABuAAAADQAAAAAAAABSAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFQA AAAAAACAPwAAAABuAAAADQAAAAAAAABVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFcAAAAAAACAPwAAAABuAAAA DQAAAAAAAABYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFoAAAAAAACAPwAAAABuAAAADQAAAAAAAABbAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAXAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF0AAAAAAACAPwAAAABuAAAADQAAAAAAAABeAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAXwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGAAAAAAAACAPwAAAABuAAAADQAAAAAAAABhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAGMAAAAAAACAPwAAAAACAAAAAAAAAAAAAAABAAAAAwsAAAAAAABkAAAAHgAAAAAAAABjAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAA AABmAAAAAwAAAAAAAAAtLS1nAAAAAAAAAAAAAABoAAAACgAAAAAAAAAAAAAAAAAAAAAAaQAAABIAAAAAAAAAAAAAAEA/AABAPwAAAD8AAEA/agAAABEAAAAA AAAAAAAAgD4AAAA/AABAPwAAgD5rAAAAEQAAAAAAAAAAAACAPgAAAD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbAAAABQAAAAA AAAAAAAAAM3MzD0AAIA/AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbgAA AA0AAAAAAAAAAAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAEAAAAAAACAPwAAAABuAAAADQAAAAAAAAACAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAAQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAAcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAoAAAAAAACAPwAA AABuAAAADQAAAAAAAAALAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAO AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABAAAAAAAACAPwAAAABuAAAADQAAAAAAAAARAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAEgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAABYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAABkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABwAAAAAAACAPwAA AABuAAAADQAAAAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAg AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAJAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAmAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAA AIA/AAAAAG4AAAANAAAAAAAAACgAAAAAAACAPwAAAABuAAAADQAAAAAAAAApAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAACsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC4AAAAAAACAPwAA AABuAAAADQAAAAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAy AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADQAAAAAAACAPwAAAABuAAAADQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAANgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADcAAAAAAACAPwAAAABuAAAADQAAAAAAAAA4AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAADoAAAAAAACAPwAAAABuAAAADQAAAAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAD0AAAAAAACAPwAAAABuAAAADQAAAAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEAAAAAAAACAPwAA AABuAAAADQAAAAAAAABBAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEMAAAAAAACAPwAAAABuAAAADQAAAAAAAABE AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEYAAAAAAACAPwAAAABuAAAADQAAAAAAAABHAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAASAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEkAAAAAAACAPwAAAABuAAAADQAAAAAAAABKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASwAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAEwAAAAAAACAPwAAAABuAAAADQAAAAAAAABNAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAE8AAAAAAACAPwAAAABuAAAADQAAAAAAAABQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFIAAAAAAACAPwAA AABuAAAADQAAAAAAAABTAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFUAAAAAAACAPwAAAABuAAAADQAAAAAAAABW AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFgAAAAAAACAPwAAAABuAAAADQAAAAAAAABZAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAWgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFsAAAAAAACAPwAAAABuAAAADQAAAAAAAABcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAF4AAAAAAACAPwAAAABuAAAADQAAAAAAAABfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAGEAAAAAAACAPwAAAABuAAAADQAAAAAAAABiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/AAAAAAIAAAAAAAAAAAAAAAEAAAADCwAAAAAA AGQAAAAeAAAAAAAAAGQAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAGYAAAADAAAAAAAAAC0tLWcAAAAAAAAAAAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAA AABpAAAAEgAAAAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/AACAPmsAAAARAAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAA bAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAA AAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABuAAAADQAAAAAAAAAAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAAIAAAAAAACAPwAAAABuAAAADQAAAAAAAAADAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAUAAAAA AACAPwAAAABuAAAADQAAAAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAgAAAAAAACAPwAAAABuAAAADQAA AAAAAAAJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAMAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAADQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA EAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABEAAAAAAACAPwAAAABuAAAADQAAAAAAAAASAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAABQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABcAAAAA AACAPwAAAABuAAAADQAAAAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABoAAAAAAACAPwAAAABuAAAADQAA AAAAAAAbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAeAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAHwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA IgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAkAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAACYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACkAAAAA AACAPwAAAABuAAAADQAAAAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACwAAAAAAACAPwAAAABuAAAADQAA AAAAAAAtAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAwAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAMQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAzAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA NAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADUAAAAAAACAPwAAAABuAAAADQAAAAAAAAA2AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAADgAAAAAAACAPwAAAABuAAAADQAAAAAAAAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADsAAAAA AACAPwAAAABuAAAADQAAAAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD4AAAAAAACAPwAAAABuAAAADQAA AAAAAAA/AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEEAAAAAAACAPwAAAABuAAAADQAAAAAAAABCAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAQwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEQAAAAAAACAPwAAAABuAAAADQAAAAAAAABFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA RgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEcAAAAAAACAPwAAAABuAAAADQAAAAAAAABIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAEoAAAAAAACAPwAAAABuAAAADQAAAAAAAABLAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE0AAAAA AACAPwAAAABuAAAADQAAAAAAAABOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFAAAAAAAACAPwAAAABuAAAADQAA AAAAAABRAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFMAAAAAAACAPwAAAABuAAAADQAAAAAAAABUAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAVQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFYAAAAAAACAPwAAAABuAAAADQAAAAAAAABXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA WAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFkAAAAAAACAPwAAAABuAAAADQAAAAAAAABaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAFwAAAAAAACAPwAAAABuAAAADQAAAAAAAABdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF8AAAAA AACAPwAAAABuAAAADQAAAAAAAABgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGIAAAAAAACAPwAAAABuAAAADQAA AAAAAABjAAAAAAAAgD8AAAAAAgAAAAAAAAAAAAAAAQAAAAMLAAAAAAAAZAAAAB4AAAAAAAAAZQAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAMA AAAAAAAALS0tZwAAAAAAAAAAAAAAaAAAAAoAAAAAAAAAAAAAAAAAAAAAAGkAAAASAAAAAAAAAAAAAABAPwAAQD8AAAA/AABAP2oAAAARAAAAAAAAAAAAAIA+ AAAAPwAAQD8AAIA+awAAABEAAAAAAAAAAAAAgD4AAAA/AACAPgAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAGwAAAAUAAAAAAAAAAAAAADN zMw9AACAPwAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG4AAAANAAAAAAAA AAAAAAAAAACAPwAAAABuAAAADQAAAAAAAAABAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAMAAAAAAACAPwAAAABu AAAADQAAAAAAAAAEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAHAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAACAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAKAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAACwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAwAAAAAAACAPwAAAABuAAAADQAAAAAAAAANAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAA8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ABIAAAAAAACAPwAAAABuAAAADQAAAAAAAAATAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABUAAAAAAACAPwAAAABu AAAADQAAAAAAAAAWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAZAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAGgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAcAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAHQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAACEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ACQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAlAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACcAAAAAAACAPwAAAABu AAAADQAAAAAAAAAoAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACoAAAAAAACAPwAAAABuAAAADQAAAAAAAAArAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAALAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAuAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAALwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAxAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAADMAAAAAAACAPwAAAABuAAAADQAAAAAAAAA0AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ADYAAAAAAACAPwAAAABuAAAADQAAAAAAAAA3AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADkAAAAAAACAPwAAAABu AAAADQAAAAAAAAA6AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADwAAAAAAACAPwAAAABuAAAADQAAAAAAAAA9AAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAPgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD8AAAAAAACAPwAAAABuAAAADQAAAAAAAABAAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAQQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEIAAAAAAACAPwAAAABuAAAADQAAAAAAAABDAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAEUAAAAAAACAPwAAAABuAAAADQAAAAAAAABGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AEgAAAAAAACAPwAAAABuAAAADQAAAAAAAABJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEsAAAAAAACAPwAAAABu AAAADQAAAAAAAABMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE4AAAAAAACAPwAAAABuAAAADQAAAAAAAABPAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAUAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFEAAAAAAACAPwAAAABuAAAADQAAAAAAAABSAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAUwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFQAAAAAAACAPwAAAABuAAAADQAAAAAAAABVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAFcAAAAAAACAPwAAAABuAAAADQAAAAAAAABYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AFoAAAAAAACAPwAAAABuAAAADQAAAAAAAABbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF0AAAAAAACAPwAAAABu AAAADQAAAAAAAABeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGAAAAAAAACAPwAAAABuAAAADQAAAAAAAABhAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAYgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGMAAAAAAACAPwAAAAACAAAAAAAAAAAAAAABAAAAAwsAAAAAAABkAAAAHgAA AAAAAABmAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAAAwAAAAAAAAAtLS1nAAAAAAAAAAAAAABoAAAACgAAAAAAAAAAAAAAAAAAAAAAaQAAABIA AAAAAAAAAAAAAEA/AABAPwAAAD8AAEA/agAAABEAAAAAAAAAAAAAgD4AAAA/AABAPwAAgD5rAAAAEQAAAAAAAAAAAACAPgAAAD8AAIA+AAAAAGwAAAAUAAAA AAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0A AAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbgAAAA0AAAAAAAAAAAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAEAAAAAAACAPwAAAABuAAAADQAAAAAA AAACAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAFAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAABgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAAoAAAAAAACAPwAAAABuAAAADQAAAAAAAAALAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAA0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABAAAAAAAACA PwAAAABuAAAADQAAAAAAAAARAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABMAAAAAAACAPwAAAABuAAAADQAAAAAA AAAUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAXAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAGAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAABwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAB8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACIAAAAAAACA PwAAAABuAAAADQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACUAAAAAAACAPwAAAABuAAAADQAAAAAA AAAmAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACgAAAAAAACAPwAAAABuAAAADQAAAAAAAAApAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAKgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAC4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAADEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAyAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADQAAAAAAACA PwAAAABuAAAADQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADcAAAAAAACAPwAAAABuAAAADQAAAAAA AAA4AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADoAAAAAAACAPwAAAABuAAAADQAAAAAAAAA7AAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAPAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD0AAAAAAACAPwAAAABuAAAADQAAAAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAEAAAAAAAACAPwAAAABuAAAADQAAAAAAAABBAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAEMAAAAAAACAPwAAAABuAAAADQAAAAAAAABEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEYAAAAAAACA PwAAAABuAAAADQAAAAAAAABHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEkAAAAAAACAPwAAAABuAAAADQAAAAAA AABKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEwAAAAAAACAPwAAAABuAAAADQAAAAAAAABNAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAATgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE8AAAAAAACAPwAAAABuAAAADQAAAAAAAABQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAFIAAAAAAACAPwAAAABuAAAADQAAAAAAAABTAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAFUAAAAAAACAPwAAAABuAAAADQAAAAAAAABWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFgAAAAAAACA PwAAAABuAAAADQAAAAAAAABZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFsAAAAAAACAPwAAAABuAAAADQAAAAAA AABcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF4AAAAAAACAPwAAAABuAAAADQAAAAAAAABfAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAYAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGEAAAAAAACAPwAAAABuAAAADQAAAAAAAABiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAA AAAAAIA/AAAAAAIAAAAAAAAAAAAAAAEAAAADCwAAAAAAAGQAAAAeAAAAAAAAAGcAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAGYAAAADAAAAAAAAAC0t LWcAAAAAAAAAAAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAAAABpAAAAEgAAAAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/ AACAPmsAAAARAAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8A AAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABuAAAADQAAAAAAAAAAAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAIAAAAAAACAPwAAAABuAAAADQAAAAAAAAADAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAABAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAAgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAsA AAAAAACAPwAAAABuAAAADQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA4AAAAAAACAPwAAAABuAAAA DQAAAAAAAAAPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABEAAAAAAACAPwAAAABuAAAADQAAAAAAAAASAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAFgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAABoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB0A AAAAAACAPwAAAABuAAAADQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACAAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAkAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAKAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAACwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAtAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC8A AAAAAACAPwAAAABuAAAADQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADIAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAzAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADUAAAAAAACAPwAAAABuAAAADQAAAAAAAAA2AAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAANwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADgAAAAAAACAPwAAAABuAAAADQAAAAAAAAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAOgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADsAAAAAAACAPwAAAABuAAAADQAAAAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAD4AAAAAAACAPwAAAABuAAAADQAAAAAAAAA/AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEEA AAAAAACAPwAAAABuAAAADQAAAAAAAABCAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEQAAAAAAACAPwAAAABuAAAA DQAAAAAAAABFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEcAAAAAAACAPwAAAABuAAAADQAAAAAAAABIAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAASQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEoAAAAAAACAPwAAAABuAAAADQAAAAAAAABLAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAATAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE0AAAAAAACAPwAAAABuAAAADQAAAAAAAABOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAFAAAAAAAACAPwAAAABuAAAADQAAAAAAAABRAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFMA AAAAAACAPwAAAABuAAAADQAAAAAAAABUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFYAAAAAAACAPwAAAABuAAAA DQAAAAAAAABXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFkAAAAAAACAPwAAAABuAAAADQAAAAAAAABaAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFwAAAAAAACAPwAAAABuAAAADQAAAAAAAABdAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAXgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF8AAAAAAACAPwAAAABuAAAADQAAAAAAAABgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAGIAAAAAAACAPwAAAABuAAAADQAAAAAAAABjAAAAAAAAgD8AAAAAAgAAAAAAAAAAAAAAAQAAAAMLAAAAAAAAZAAAAB4AAAAAAAAAaAAA AAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAMAAAAAAAAALS0tZwAAAAAAAAAAAAAAaAAAAAoAAAAAAAAAAAAAAAAAAAAAAGkAAAASAAAAAAAAAAAA AABAPwAAQD8AAAA/AABAP2oAAAARAAAAAAAAAAAAAIA+AAAAPwAAQD8AAIA+awAAABEAAAAAAAAAAAAAgD4AAAA/AACAPgAAAABsAAAAFAAAAAAAAAAAAAAA zczMPQAAgD8AAAAAAAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAA AAAAAAAAbQAAAAQAAAAAAAAAAAAAAG4AAAANAAAAAAAAAAAAAAAAAACAPwAAAABuAAAADQAAAAAAAAABAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAAMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAAYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAkAAAAAAACAPwAA AABuAAAADQAAAAAAAAAKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAN AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAQAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAEQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABIAAAAAAACAPwAAAABuAAAADQAAAAAAAAATAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAABUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAABgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABsAAAAAAACAPwAA AABuAAAADQAAAAAAAAAcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAf AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAiAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAIwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAlAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAACcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAoAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAACoAAAAAAACAPwAAAABuAAAADQAAAAAAAAArAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC0AAAAAAACAPwAA AABuAAAADQAAAAAAAAAuAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAx AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADMAAAAAAACAPwAAAABuAAAADQAAAAAAAAA0AAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAANQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADYAAAAAAACAPwAAAABuAAAADQAAAAAAAAA3AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAADkAAAAAAACAPwAAAABuAAAADQAAAAAAAAA6AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAADwAAAAAAACAPwAAAABuAAAADQAAAAAAAAA9AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD8AAAAAAACAPwAA AABuAAAADQAAAAAAAABAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEIAAAAAAACAPwAAAABuAAAADQAAAAAAAABD AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEUAAAAAAACAPwAAAABuAAAADQAAAAAAAABGAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAARwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEgAAAAAAACAPwAAAABuAAAADQAAAAAAAABJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAEsAAAAAAACAPwAAAABuAAAADQAAAAAAAABMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAE4AAAAAAACAPwAAAABuAAAADQAAAAAAAABPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFEAAAAAAACAPwAA AABuAAAADQAAAAAAAABSAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFQAAAAAAACAPwAAAABuAAAADQAAAAAAAABV AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFcAAAAAAACAPwAAAABuAAAADQAAAAAAAABYAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAWQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFoAAAAAAACAPwAAAABuAAAADQAAAAAAAABbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAF0AAAAAAACAPwAAAABuAAAADQAAAAAAAABeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAGAAAAAAAACAPwAAAABuAAAADQAAAAAAAABhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGMAAAAAAACAPwAA AAACAAAAAAAAAAAAAAABAAAAAwsAAAAAAABkAAAAHgAAAAAAAABpAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAAAwAAAAAAAAAtLS1nAAAAAAAA AAAAAABoAAAACgAAAAAAAAAAAAAAAAAAAAAAaQAAABIAAAAAAAAAAAAAAEA/AABAPwAAAD8AAEA/agAAABEAAAAAAAAAAAAAgD4AAAA/AABAPwAAgD5rAAAA EQAAAAAAAAAAAACAPgAAAD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABt AAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbgAAAA0AAAAAAAAAAAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAAEAAAAAAACAPwAAAABuAAAADQAAAAAAAAACAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAQAAAAA AACAPwAAAABuAAAADQAAAAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAcAAAAAAACAPwAAAABuAAAADQAA AAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAoAAAAAAACAPwAAAABuAAAADQAAAAAAAAALAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA DwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABAAAAAAAACAPwAAAABuAAAADQAAAAAAAAARAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAABMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABYAAAAA AACAPwAAAABuAAAADQAAAAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABkAAAAAAACAPwAAAABuAAAADQAA AAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAdAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA IQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAACUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAmAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACgAAAAA AACAPwAAAABuAAAADQAAAAAAAAApAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACsAAAAAAACAPwAAAABuAAAADQAA AAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAvAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAyAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA MwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADQAAAAAAACAPwAAAABuAAAADQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAADcAAAAAAACAPwAAAABuAAAADQAAAAAAAAA4AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADoAAAAA AACAPwAAAABuAAAADQAAAAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD0AAAAAAACAPwAAAABuAAAADQAA AAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEAAAAAAAACAPwAAAABuAAAADQAAAAAAAABBAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEMAAAAAAACAPwAAAABuAAAADQAAAAAAAABEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA RQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEYAAAAAAACAPwAAAABuAAAADQAAAAAAAABHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAEkAAAAAAACAPwAAAABuAAAADQAAAAAAAABKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEwAAAAA AACAPwAAAABuAAAADQAAAAAAAABNAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE8AAAAAAACAPwAAAABuAAAADQAA AAAAAABQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFIAAAAAAACAPwAAAABuAAAADQAAAAAAAABTAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFUAAAAAAACAPwAAAABuAAAADQAAAAAAAABWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA VwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFgAAAAAAACAPwAAAABuAAAADQAAAAAAAABZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAFsAAAAAAACAPwAAAABuAAAADQAAAAAAAABcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF4AAAAA AACAPwAAAABuAAAADQAAAAAAAABfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGEAAAAAAACAPwAAAABuAAAADQAA AAAAAABiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/AAAAAAIAAAAAAAAAAAAAAAEAAAADCwAAAAAAAGQAAAAeAAAAAAAAAGoAAAAAAAAAgD8A AAAAAAAAAAAAAAAAAAAAAAAAAGYAAAADAAAAAAAAAC0tLWcAAAAAAAAAAAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAAAABpAAAAEgAAAAAAAAAAAAAAQD8AAEA/ AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/AACAPmsAAAARAAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/ AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0A AAAEAAAAAAAAAAAAAABuAAAADQAAAAAAAAAAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAIAAAAAAACAPwAAAABu AAAADQAAAAAAAAADAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAGAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAABwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAJAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAACgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAA4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ABEAAAAAAACAPwAAAABuAAAADQAAAAAAAAASAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABQAAAAAAACAPwAAAABu AAAADQAAAAAAAAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAYAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAbAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAHAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAACAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ACMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAkAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACYAAAAAAACAPwAAAABu AAAADQAAAAAAAAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAqAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAtAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAALgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAADIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAzAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ADUAAAAAAACAPwAAAABuAAAADQAAAAAAAAA2AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADgAAAAAAACAPwAAAABu AAAADQAAAAAAAAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADsAAAAAAACAPwAAAABuAAAADQAAAAAAAAA8AAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD4AAAAAAACAPwAAAABuAAAADQAAAAAAAAA/AAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAQAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEEAAAAAAACAPwAAAABuAAAADQAAAAAAAABCAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAEQAAAAAAACAPwAAAABuAAAADQAAAAAAAABFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AEcAAAAAAACAPwAAAABuAAAADQAAAAAAAABIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEoAAAAAAACAPwAAAABu AAAADQAAAAAAAABLAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE0AAAAAAACAPwAAAABuAAAADQAAAAAAAABOAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAATwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFAAAAAAAACAPwAAAABuAAAADQAAAAAAAABRAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAUgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFMAAAAAAACAPwAAAABuAAAADQAAAAAAAABUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAFYAAAAAAACAPwAAAABuAAAADQAAAAAAAABXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AFkAAAAAAACAPwAAAABuAAAADQAAAAAAAABaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFwAAAAAAACAPwAAAABu AAAADQAAAAAAAABdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF8AAAAAAACAPwAAAABuAAAADQAAAAAAAABgAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGIAAAAAAACAPwAAAABuAAAADQAAAAAAAABjAAAAAAAAgD8AAAAAAgAAAAAA AAAAAAAAAQAAAAMLAAAAAAAAZAAAAB4AAAAAAAAAawAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAMAAAAAAAAALS0tZwAAAAAAAAAAAAAAaAAA AAoAAAAAAAAAAAAAAAAAAAAAAGkAAAASAAAAAAAAAAAAAABAPwAAQD8AAAA/AABAP2oAAAARAAAAAAAAAAAAAIA+AAAAPwAAQD8AAIA+awAAABEAAAAAAAAA AAAAgD4AAAA/AACAPgAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbQAAAAQAAAAA AAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG4AAAANAAAAAAAAAAAAAAAAAACAPwAAAABuAAAADQAAAAAA AAABAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAEAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAABQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAAkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAAwAAAAAAACAPwAAAABuAAAADQAAAAAAAAANAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA8AAAAAAACA PwAAAABuAAAADQAAAAAAAAAQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABIAAAAAAACAPwAAAABuAAAADQAAAAAA AAATAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAWAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAFwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAABsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAB4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACEAAAAAAACA PwAAAABuAAAADQAAAAAAAAAiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACQAAAAAAACAPwAAAABuAAAADQAAAAAA AAAlAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAoAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAKQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACoAAAAAAACAPwAAAABuAAAADQAAAAAAAAArAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAC0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAuAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAADAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAxAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADMAAAAAAACA PwAAAABuAAAADQAAAAAAAAA0AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADYAAAAAAACAPwAAAABuAAAADQAAAAAA AAA3AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADkAAAAAAACAPwAAAABuAAAADQAAAAAAAAA6AAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAOwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADwAAAAAAACAPwAAAABuAAAADQAAAAAAAAA9AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAD8AAAAAAACAPwAAAABuAAAADQAAAAAAAABAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAEIAAAAAAACAPwAAAABuAAAADQAAAAAAAABDAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEUAAAAAAACA PwAAAABuAAAADQAAAAAAAABGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEgAAAAAAACAPwAAAABuAAAADQAAAAAA AABJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEsAAAAAAACAPwAAAABuAAAADQAAAAAAAABMAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAATQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE4AAAAAAACAPwAAAABuAAAADQAAAAAAAABPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAFEAAAAAAACAPwAAAABuAAAADQAAAAAAAABSAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAFQAAAAAAACAPwAAAABuAAAADQAAAAAAAABVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFcAAAAAAACA PwAAAABuAAAADQAAAAAAAABYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFoAAAAAAACAPwAAAABuAAAADQAAAAAA AABbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF0AAAAAAACAPwAAAABuAAAADQAAAAAAAABeAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAXwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGAAAAAAAACAPwAAAABuAAAADQAAAAAAAABhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAGMAAAAAAACAPwAAAAACAAAAAAAAAAAAAAABAAAAAwsAAAAAAABkAAAAHgAAAAAAAABsAAAAAAAAAIA/AAAAAAAAAAAA AAAAAAAAAAAAAABmAAAAAwAAAAAAAAAtLS1nAAAAAAAAAAAAAABoAAAACgAAAAAAAAAAAAAAAAAAAAAAaQAAABIAAAAAAAAAAAAAAEA/AABAPwAAAD8AAEA/ agAAABEAAAAAAAAAAAAAgD4AAAA/AABAPwAAgD5rAAAAEQAAAAAAAAAAAACAPgAAAD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAA bAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAA AAAAAAAAbgAAAA0AAAAAAAAAAAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAEAAAAAAACAPwAAAABuAAAADQAAAAAAAAACAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAAwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAAcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAoA AAAAAACAPwAAAABuAAAADQAAAAAAAAALAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA0AAAAAAACAPwAAAABuAAAA DQAAAAAAAAAOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABAAAAAAAACAPwAAAABuAAAADQAAAAAAAAARAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAEgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAUAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAFQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAABkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABwA AAAAAACAPwAAAABuAAAADQAAAAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB8AAAAAAACAPwAAAABuAAAA DQAAAAAAAAAgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAjAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAJAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAmAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAJwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACgAAAAAAACAPwAAAABuAAAADQAAAAAAAAApAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAACsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC4A AAAAAACAPwAAAABuAAAADQAAAAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADEAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAyAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADQAAAAAAACAPwAAAABuAAAADQAAAAAAAAA1AAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAANgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADcAAAAAAACAPwAAAABuAAAADQAAAAAAAAA4AAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAOQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADoAAAAAAACAPwAAAABuAAAADQAAAAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAD0AAAAAAACAPwAAAABuAAAADQAAAAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEAA AAAAAACAPwAAAABuAAAADQAAAAAAAABBAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEMAAAAAAACAPwAAAABuAAAA DQAAAAAAAABEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEYAAAAAAACAPwAAAABuAAAADQAAAAAAAABHAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAASAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEkAAAAAAACAPwAAAABuAAAADQAAAAAAAABKAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAASwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEwAAAAAAACAPwAAAABuAAAADQAAAAAAAABNAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAE8AAAAAAACAPwAAAABuAAAADQAAAAAAAABQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFIA AAAAAACAPwAAAABuAAAADQAAAAAAAABTAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFUAAAAAAACAPwAAAABuAAAA DQAAAAAAAABWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFgAAAAAAACAPwAAAABuAAAADQAAAAAAAABZAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAWgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFsAAAAAAACAPwAAAABuAAAADQAAAAAAAABcAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAXQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF4AAAAAAACAPwAAAABuAAAADQAAAAAAAABfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAGEAAAAAAACAPwAAAABuAAAADQAAAAAAAABiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/AAAAAAIAAAAAAAAAAAAAAAEA AAADCwAAAAAAAGQAAAAeAAAAAAAAAG0AAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAGYAAAADAAAAAAAAAC0tLWcAAAAAAAAAAAAAAGgAAAAKAAAAAAAA AAAAAAAAAAAAAABpAAAAEgAAAAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/AACAPmsAAAARAAAAAAAAAAAAAIA+AAAA PwAAgD4AAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABt AAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABuAAAADQAAAAAAAAAAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAAIAAAAAAACAPwAAAABuAAAADQAAAAAAAAADAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAAUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAgAAAAAAACAPwAA AABuAAAADQAAAAAAAAAJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAM AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAPAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAEAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABEAAAAAAACAPwAAAABuAAAADQAAAAAAAAASAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEwAAAAAA AIA/AAAAAG4AAAANAAAAAAAAABQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAABcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABoAAAAAAACAPwAA AABuAAAADQAAAAAAAAAbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAe AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAhAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAIgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAkAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAACYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAACkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACwAAAAAAACAPwAA AABuAAAADQAAAAAAAAAtAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAw AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAzAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAANAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADUAAAAAAACAPwAAAABuAAAADQAAAAAAAAA2AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANwAAAAAA AIA/AAAAAG4AAAANAAAAAAAAADgAAAAAAACAPwAAAABuAAAADQAAAAAAAAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAADsAAAAAAACAPwAAAABuAAAADQAAAAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD4AAAAAAACAPwAA AABuAAAADQAAAAAAAAA/AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEEAAAAAAACAPwAAAABuAAAADQAAAAAAAABC AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEQAAAAAAACAPwAAAABuAAAADQAAAAAAAABFAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAARgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEcAAAAAAACAPwAAAABuAAAADQAAAAAAAABIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAEoAAAAAAACAPwAAAABuAAAADQAAAAAAAABLAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAE0AAAAAAACAPwAAAABuAAAADQAAAAAAAABOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFAAAAAAAACAPwAA AABuAAAADQAAAAAAAABRAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFMAAAAAAACAPwAAAABuAAAADQAAAAAAAABU AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFYAAAAAAACAPwAAAABuAAAADQAAAAAAAABXAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAWAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFkAAAAAAACAPwAAAABuAAAADQAAAAAAAABaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWwAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAFwAAAAAAACAPwAAAABuAAAADQAAAAAAAABdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAF8AAAAAAACAPwAAAABuAAAADQAAAAAAAABgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGIAAAAAAACAPwAA AABuAAAADQAAAAAAAABjAAAAAAAAgD8AAAAAAgAAAAAAAAAAAAAAAQAAAAMLAAAAAAAAZAAAAB4AAAAAAAAAbgAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAA AAAAZgAAAAMAAAAAAAAALS0tZwAAAAAAAAAAAAAAaAAAAAoAAAAAAAAAAAAAAAAAAAAAAGkAAAASAAAAAAAAAAAAAABAPwAAQD8AAAA/AABAP2oAAAARAAAA AAAAAAAAAIA+AAAAPwAAQD8AAIA+awAAABEAAAAAAAAAAAAAgD4AAAA/AACAPgAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAGwAAAAUAAAA AAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG4A AAANAAAAAAAAAAAAAAAAAACAPwAAAABuAAAADQAAAAAAAAABAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAMAAAAA AACAPwAAAABuAAAADQAAAAAAAAAEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAYAAAAAAACAPwAAAABuAAAADQAA AAAAAAAHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAKAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAACwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAwAAAAAAACAPwAAAABuAAAADQAAAAAAAAANAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA DgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAABIAAAAAAACAPwAAAABuAAAADQAAAAAAAAATAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABUAAAAA AACAPwAAAABuAAAADQAAAAAAAAAWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABgAAAAAAACAPwAAAABuAAAADQAA AAAAAAAZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAcAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAHQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA IAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAACQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAlAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACcAAAAA AACAPwAAAABuAAAADQAAAAAAAAAoAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACoAAAAAAACAPwAAAABuAAAADQAA AAAAAAArAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAuAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAALwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAxAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA MgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADMAAAAAAACAPwAAAABuAAAADQAAAAAAAAA0AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAADYAAAAAAACAPwAAAABuAAAADQAAAAAAAAA3AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADkAAAAA AACAPwAAAABuAAAADQAAAAAAAAA6AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADwAAAAAAACAPwAAAABuAAAADQAA AAAAAAA9AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD8AAAAAAACAPwAAAABuAAAADQAAAAAAAABAAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAQQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEIAAAAAAACAPwAAAABuAAAADQAAAAAAAABDAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA RAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEUAAAAAAACAPwAAAABuAAAADQAAAAAAAABGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAEgAAAAAAACAPwAAAABuAAAADQAAAAAAAABJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEsAAAAA AACAPwAAAABuAAAADQAAAAAAAABMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE4AAAAAAACAPwAAAABuAAAADQAA AAAAAABPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFEAAAAAAACAPwAAAABuAAAADQAAAAAAAABSAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAUwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFQAAAAAAACAPwAAAABuAAAADQAAAAAAAABVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA VgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFcAAAAAAACAPwAAAABuAAAADQAAAAAAAABYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAFoAAAAAAACAPwAAAABuAAAADQAAAAAAAABbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF0AAAAA AACAPwAAAABuAAAADQAAAAAAAABeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGAAAAAAAACAPwAAAABuAAAADQAA AAAAAABhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGMAAAAAAACAPwAAAAACAAAAAAAAAAAAAAABAAAAAwsAAAAA AABkAAAAHgAAAAAAAABvAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAAAwAAAAAAAAAtLS1nAAAAAAAAAAAAAABoAAAACgAAAAAAAAAAAAAAAAAA AAAAaQAAABIAAAAAAAAAAAAAAEA/AABAPwAAAD8AAEA/agAAABEAAAAAAAAAAAAAgD4AAAA/AABAPwAAgD5rAAAAEQAAAAAAAAAAAACAPgAAAD8AAIA+AAAA AGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAA AAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbgAAAA0AAAAAAAAAAAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAEAAAAAAACAPwAAAABu AAAADQAAAAAAAAACAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAFAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAABgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAACQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAoAAAAAAACAPwAAAABuAAAADQAAAAAAAAALAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAA0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ABAAAAAAAACAPwAAAABuAAAADQAAAAAAAAARAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABMAAAAAAACAPwAAAABu AAAADQAAAAAAAAAUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAXAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAGAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAGwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAB8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ACIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACUAAAAAAACAPwAAAABu AAAADQAAAAAAAAAmAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACgAAAAAAACAPwAAAABuAAAADQAAAAAAAAApAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAKgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAALQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAADEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAyAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ADQAAAAAAACAPwAAAABuAAAADQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADcAAAAAAACAPwAAAABu AAAADQAAAAAAAAA4AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADoAAAAAAACAPwAAAABuAAAADQAAAAAAAAA7AAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAPAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD0AAAAAAACAPwAAAABuAAAADQAAAAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAPwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEAAAAAAAACAPwAAAABuAAAADQAAAAAAAABBAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAEMAAAAAAACAPwAAAABuAAAADQAAAAAAAABEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AEYAAAAAAACAPwAAAABuAAAADQAAAAAAAABHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEkAAAAAAACAPwAAAABu AAAADQAAAAAAAABKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEwAAAAAAACAPwAAAABuAAAADQAAAAAAAABNAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAATgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE8AAAAAAACAPwAAAABuAAAADQAAAAAAAABQAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAUQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFIAAAAAAACAPwAAAABuAAAADQAAAAAAAABTAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAFUAAAAAAACAPwAAAABuAAAADQAAAAAAAABWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AFgAAAAAAACAPwAAAABuAAAADQAAAAAAAABZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFsAAAAAAACAPwAAAABu AAAADQAAAAAAAABcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF4AAAAAAACAPwAAAABuAAAADQAAAAAAAABfAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAYAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGEAAAAAAACAPwAAAABuAAAADQAAAAAAAABiAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAYwAAAAAAAIA/AAAAAAIAAAAAAAAAAAAAAAEAAAADCwAAAAAAAGQAAAAeAAAAAAAAAHAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAGYAAAAD AAAAAAAAAC0tLWcAAAAAAAAAAAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAAAABpAAAAEgAAAAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACA PgAAAD8AAEA/AACAPmsAAAARAAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAA zczMPQAAgD8AAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABuAAAADQAAAAAA AAAAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAIAAAAAAACAPwAAAABuAAAADQAAAAAAAAADAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAABAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAAgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAAsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA4AAAAAAACA PwAAAABuAAAADQAAAAAAAAAPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABEAAAAAAACAPwAAAABuAAAADQAAAAAA AAASAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAVAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAFgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAABoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAB0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACAAAAAAAACA PwAAAABuAAAADQAAAAAAAAAhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACMAAAAAAACAPwAAAABuAAAADQAAAAAA AAAkAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAnAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAKAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAACwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAtAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAC8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADIAAAAAAACA PwAAAABuAAAADQAAAAAAAAAzAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADUAAAAAAACAPwAAAABuAAAADQAAAAAA AAA2AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADgAAAAAAACAPwAAAABuAAAADQAAAAAAAAA5AAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAOgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADsAAAAAAACAPwAAAABuAAAADQAAAAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAD4AAAAAAACAPwAAAABuAAAADQAAAAAAAAA/AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAEEAAAAAAACAPwAAAABuAAAADQAAAAAAAABCAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEQAAAAAAACA PwAAAABuAAAADQAAAAAAAABFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEcAAAAAAACAPwAAAABuAAAADQAAAAAA AABIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEoAAAAAAACAPwAAAABuAAAADQAAAAAAAABLAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAATAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE0AAAAAAACAPwAAAABuAAAADQAAAAAAAABOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAFAAAAAAAACAPwAAAABuAAAADQAAAAAAAABRAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAFMAAAAAAACAPwAAAABuAAAADQAAAAAAAABUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFYAAAAAAACA PwAAAABuAAAADQAAAAAAAABXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFkAAAAAAACAPwAAAABuAAAADQAAAAAA AABaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFwAAAAAAACAPwAAAABuAAAADQAAAAAAAABdAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAXgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF8AAAAAAACAPwAAAABuAAAADQAAAAAAAABgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAGIAAAAAAACAPwAAAABuAAAADQAAAAAAAABjAAAAAAAAgD8AAAAAAgAAAAAAAAAAAAAAAQAAAAMLAAAAAAAAZAAAAB4A AAAAAAAAcQAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAMAAAAAAAAALS0tZwAAAAAAAAAAAAAAaAAAAAoAAAAAAAAAAAAAAAAAAAAAAGkAAAAS AAAAAAAAAAAAAABAPwAAQD8AAAA/AABAP2oAAAARAAAAAAAAAAAAAIA+AAAAPwAAQD8AAIA+awAAABEAAAAAAAAAAAAAgD4AAAA/AACAPgAAAABsAAAAFAAA AAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABt AAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG4AAAANAAAAAAAAAAAAAAAAAACAPwAAAABuAAAADQAAAAAAAAABAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAAgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAAYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAkA AAAAAACAPwAAAABuAAAADQAAAAAAAAAKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAwAAAAAAACAPwAAAABuAAAA DQAAAAAAAAANAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAQAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAEQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABIAAAAAAACAPwAAAABuAAAADQAAAAAAAAATAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAFAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAABgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABsA AAAAAACAPwAAAABuAAAADQAAAAAAAAAcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB4AAAAAAACAPwAAAABuAAAA DQAAAAAAAAAfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAiAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAIwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAlAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAJgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAoAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAACoAAAAAAACAPwAAAABuAAAADQAAAAAAAAArAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC0A AAAAAACAPwAAAABuAAAADQAAAAAAAAAuAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADAAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAxAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADMAAAAAAACAPwAAAABuAAAADQAAAAAAAAA0AAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAANQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADYAAAAAAACAPwAAAABuAAAADQAAAAAAAAA3AAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAOAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADkAAAAAAACAPwAAAABuAAAADQAAAAAAAAA6AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAADwAAAAAAACAPwAAAABuAAAADQAAAAAAAAA9AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD8A AAAAAACAPwAAAABuAAAADQAAAAAAAABAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEIAAAAAAACAPwAAAABuAAAA DQAAAAAAAABDAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEUAAAAAAACAPwAAAABuAAAADQAAAAAAAABGAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAARwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEgAAAAAAACAPwAAAABuAAAADQAAAAAAAABJAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAASgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEsAAAAAAACAPwAAAABuAAAADQAAAAAAAABMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAE4AAAAAAACAPwAAAABuAAAADQAAAAAAAABPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFEA AAAAAACAPwAAAABuAAAADQAAAAAAAABSAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFQAAAAAAACAPwAAAABuAAAA DQAAAAAAAABVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFcAAAAAAACAPwAAAABuAAAADQAAAAAAAABYAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAWQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFoAAAAAAACAPwAAAABuAAAADQAAAAAAAABbAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAXAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF0AAAAAAACAPwAAAABuAAAADQAAAAAAAABeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAGAAAAAAAACAPwAAAABuAAAADQAAAAAAAABhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGMA AAAAAACAPwAAAAACAAAAAAAAAAAAAAABAAAAAwsAAAAAAABkAAAAHgAAAAAAAAByAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAAAwAAAAAAAAAt LS1nAAAAAAAAAAAAAABoAAAACgAAAAAAAAAAAAAAAAAAAAAAaQAAABIAAAAAAAAAAAAAAEA/AABAPwAAAD8AAEA/agAAABEAAAAAAAAAAAAAgD4AAAA/AABA PwAAgD5rAAAAEQAAAAAAAAAAAACAPgAAAD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/ AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbgAAAA0AAAAAAAAAAAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAAEAAAAAAACAPwAAAABuAAAADQAAAAAAAAACAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAAQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAcAAAAAAACAPwAA AABuAAAADQAAAAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAL AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAOAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAADwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABAAAAAAAACAPwAAAABuAAAADQAAAAAAAAARAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAABMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAABYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABkAAAAAAACAPwAA AABuAAAADQAAAAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAd AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAgAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAACUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAmAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAACgAAAAAAACAPwAAAABuAAAADQAAAAAAAAApAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACsAAAAAAACAPwAA AABuAAAADQAAAAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAv AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAyAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADQAAAAAAACAPwAAAABuAAAADQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAADcAAAAAAACAPwAAAABuAAAADQAAAAAAAAA4AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAADoAAAAAAACAPwAAAABuAAAADQAAAAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD0AAAAAAACAPwAA AABuAAAADQAAAAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEAAAAAAAACAPwAAAABuAAAADQAAAAAAAABB AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEMAAAAAAACAPwAAAABuAAAADQAAAAAAAABEAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAARQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEYAAAAAAACAPwAAAABuAAAADQAAAAAAAABHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAEkAAAAAAACAPwAAAABuAAAADQAAAAAAAABKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAEwAAAAAAACAPwAAAABuAAAADQAAAAAAAABNAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE8AAAAAAACAPwAA AABuAAAADQAAAAAAAABQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFIAAAAAAACAPwAAAABuAAAADQAAAAAAAABT AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFUAAAAAAACAPwAAAABuAAAADQAAAAAAAABWAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFgAAAAAAACAPwAAAABuAAAADQAAAAAAAABZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAFsAAAAAAACAPwAAAABuAAAADQAAAAAAAABcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAF4AAAAAAACAPwAAAABuAAAADQAAAAAAAABfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGEAAAAAAACAPwAA AABuAAAADQAAAAAAAABiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/AAAAAAIAAAAAAAAAAAAAAAEAAAADCwAAAAAAAGQAAAAeAAAAAAAAAHMA AAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAGYAAAADAAAAAAAAAC0tLWcAAAAAAAAAAAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAAAABpAAAAEgAAAAAAAAAA AAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/AACAPmsAAAARAAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAAbAAAABQAAAAAAAAAAAAA AM3MzD0AAIA/AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAA AAAAAAAAAG0AAAAEAAAAAAAAAAAAAABuAAAADQAAAAAAAAAAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAIAAAAA AACAPwAAAABuAAAADQAAAAAAAAADAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAUAAAAAAACAPwAAAABuAAAADQAA AAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAJAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA DQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAABEAAAAAAACAPwAAAABuAAAADQAAAAAAAAASAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABQAAAAA AACAPwAAAABuAAAADQAAAAAAAAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABcAAAAAAACAPwAAAABuAAAADQAA AAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAbAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA HwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAACMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAkAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACYAAAAA AACAPwAAAABuAAAADQAAAAAAAAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACkAAAAAAACAPwAAAABuAAAADQAA AAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAtAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA MQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAzAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAADUAAAAAAACAPwAAAABuAAAADQAAAAAAAAA2AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADgAAAAA AACAPwAAAABuAAAADQAAAAAAAAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADsAAAAAAACAPwAAAABuAAAADQAA AAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD4AAAAAAACAPwAAAABuAAAADQAAAAAAAAA/AAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEEAAAAAAACAPwAAAABuAAAADQAAAAAAAABCAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA QwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEQAAAAAAACAPwAAAABuAAAADQAAAAAAAABFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAEcAAAAAAACAPwAAAABuAAAADQAAAAAAAABIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEoAAAAA AACAPwAAAABuAAAADQAAAAAAAABLAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE0AAAAAAACAPwAAAABuAAAADQAA AAAAAABOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFAAAAAAAACAPwAAAABuAAAADQAAAAAAAABRAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFMAAAAAAACAPwAAAABuAAAADQAAAAAAAABUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA VQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFYAAAAAAACAPwAAAABuAAAADQAAAAAAAABXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAFkAAAAAAACAPwAAAABuAAAADQAAAAAAAABaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFwAAAAA AACAPwAAAABuAAAADQAAAAAAAABdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF8AAAAAAACAPwAAAABuAAAADQAA AAAAAABgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGIAAAAAAACAPwAAAABuAAAADQAAAAAAAABjAAAAAAAAgD8A AAAAAgAAAAAAAAAAAAAAAQAAAAMLAAAAAAAAZAAAAB4AAAAAAAAAdAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAMAAAAAAAAALS0tZwAAAAAA AAAAAAAAaAAAAAoAAAAAAAAAAAAAAAAAAAAAAGkAAAASAAAAAAAAAAAAAABAPwAAQD8AAAA/AABAP2oAAAARAAAAAAAAAAAAAIA+AAAAPwAAQD8AAIA+awAA ABEAAAAAAAAAAAAAgD4AAAA/AACAPgAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAA bQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG4AAAANAAAAAAAAAAAAAAAAAACAPwAAAABu AAAADQAAAAAAAAABAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAEAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAABQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAHAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAACAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAAwAAAAAAACAPwAAAABuAAAADQAAAAAAAAANAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AA8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABIAAAAAAACAPwAAAABu AAAADQAAAAAAAAATAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAWAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAFwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAZAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAGgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAB4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ACEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACQAAAAAAACAPwAAAABu AAAADQAAAAAAAAAlAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAoAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAKQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACoAAAAAAACAPwAAAABuAAAADQAAAAAAAAArAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAALAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAuAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAADAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAxAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ADMAAAAAAACAPwAAAABuAAAADQAAAAAAAAA0AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADYAAAAAAACAPwAAAABu AAAADQAAAAAAAAA3AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADkAAAAAAACAPwAAAABuAAAADQAAAAAAAAA6AAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAOwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADwAAAAAAACAPwAAAABuAAAADQAAAAAAAAA9AAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAPgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD8AAAAAAACAPwAAAABuAAAADQAAAAAAAABAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAEIAAAAAAACAPwAAAABuAAAADQAAAAAAAABDAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AEUAAAAAAACAPwAAAABuAAAADQAAAAAAAABGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEgAAAAAAACAPwAAAABu AAAADQAAAAAAAABJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEsAAAAAAACAPwAAAABuAAAADQAAAAAAAABMAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAATQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE4AAAAAAACAPwAAAABuAAAADQAAAAAAAABPAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAUAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFEAAAAAAACAPwAAAABuAAAADQAAAAAAAABSAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAFQAAAAAAACAPwAAAABuAAAADQAAAAAAAABVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AFcAAAAAAACAPwAAAABuAAAADQAAAAAAAABYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFoAAAAAAACAPwAAAABu AAAADQAAAAAAAABbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF0AAAAAAACAPwAAAABuAAAADQAAAAAAAABeAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAXwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGAAAAAAAACAPwAAAABuAAAADQAAAAAAAABhAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAYgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGMAAAAAAACAPwAAAAACAAAAAAAAAAAAAAABAAAAAwsAAAAAAABkAAAAHgAAAAAAAAB1AAAAAAAAAIA/ AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAAAwAAAAAAAAAtLS1nAAAAAAAAAAAAAABoAAAACgAAAAAAAAAAAAAAAAAAAAAAaQAAABIAAAAAAAAAAAAAAEA/AABA PwAAAD8AAEA/agAAABEAAAAAAAAAAAAAgD4AAAA/AABAPwAAgD5rAAAAEQAAAAAAAAAAAACAPgAAAD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACA PwAAAAAAAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABt AAAABAAAAAAAAAAAAAAAbgAAAA0AAAAAAAAAAAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAEAAAAAAACAPwAAAABuAAAADQAAAAAAAAACAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAAcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAAoAAAAAAACAPwAAAABuAAAADQAAAAAAAAALAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA0AAAAAAACA PwAAAABuAAAADQAAAAAAAAAOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABAAAAAAAACAPwAAAABuAAAADQAAAAAA AAARAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAUAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAABkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAABwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB8AAAAAAACA PwAAAABuAAAADQAAAAAAAAAgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACIAAAAAAACAPwAAAABuAAAADQAAAAAA AAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAmAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACgAAAAAAACAPwAAAABuAAAADQAAAAAAAAApAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAACsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAC4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADEAAAAAAACA PwAAAABuAAAADQAAAAAAAAAyAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADQAAAAAAACAPwAAAABuAAAADQAAAAAA AAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADcAAAAAAACAPwAAAABuAAAADQAAAAAAAAA4AAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADoAAAAAAACAPwAAAABuAAAADQAAAAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAD0AAAAAAACAPwAAAABuAAAADQAAAAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAEAAAAAAAACAPwAAAABuAAAADQAAAAAAAABBAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEMAAAAAAACA PwAAAABuAAAADQAAAAAAAABEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEYAAAAAAACAPwAAAABuAAAADQAAAAAA AABHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEkAAAAAAACAPwAAAABuAAAADQAAAAAAAABKAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAASwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEwAAAAAAACAPwAAAABuAAAADQAAAAAAAABNAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAE8AAAAAAACAPwAAAABuAAAADQAAAAAAAABQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAFIAAAAAAACAPwAAAABuAAAADQAAAAAAAABTAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFUAAAAAAACA PwAAAABuAAAADQAAAAAAAABWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFgAAAAAAACAPwAAAABuAAAADQAAAAAA AABZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFsAAAAAAACAPwAAAABuAAAADQAAAAAAAABcAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF4AAAAAAACAPwAAAABuAAAADQAAAAAAAABfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAGEAAAAAAACAPwAAAABuAAAADQAAAAAAAABiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/AAAAAAIAAAAA AAAAAAAAAAEAAAADCwAAAAAAAGQAAAAeAAAAAAAAAHYAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAGYAAAADAAAAAAAAAC0tLWcAAAAAAAAAAAAAAGgA AAAKAAAAAAAAAAAAAAAAAAAAAABpAAAAEgAAAAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/AACAPmsAAAARAAAAAAAA AAAAAIA+AAAAPwAAgD4AAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAG0AAAAEAAAA AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABuAAAADQAAAAAAAAAAAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAAQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAIAAAAAAACAPwAAAABuAAAADQAAAAAAAAADAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAAUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAgA AAAAAACAPwAAAABuAAAADQAAAAAAAAAJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAsAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAPAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABEAAAAAAACAPwAAAABuAAAADQAAAAAAAAASAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAEwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAABcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABoA AAAAAACAPwAAAABuAAAADQAAAAAAAAAbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB0AAAAAAACAPwAAAABuAAAA DQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAhAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAkAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAJQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAACkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACwA AAAAAACAPwAAAABuAAAADQAAAAAAAAAtAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC8AAAAAAACAPwAAAABuAAAA DQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAzAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAANAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADUAAAAAAACAPwAAAABuAAAADQAAAAAAAAA2AAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAANwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADgAAAAAAACAPwAAAABuAAAADQAAAAAAAAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAADsAAAAAAACAPwAAAABuAAAADQAAAAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD4A AAAAAACAPwAAAABuAAAADQAAAAAAAAA/AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEEAAAAAAACAPwAAAABuAAAA DQAAAAAAAABCAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEQAAAAAAACAPwAAAABuAAAADQAAAAAAAABFAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAARgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEcAAAAAAACAPwAAAABuAAAADQAAAAAAAABIAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAASQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEoAAAAAAACAPwAAAABuAAAADQAAAAAAAABLAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATAAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAE0AAAAAAACAPwAAAABuAAAADQAAAAAAAABOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFAA AAAAAACAPwAAAABuAAAADQAAAAAAAABRAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFMAAAAAAACAPwAAAABuAAAA DQAAAAAAAABUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFYAAAAAAACAPwAAAABuAAAADQAAAAAAAABXAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFkAAAAAAACAPwAAAABuAAAADQAAAAAAAABaAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAWwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFwAAAAAAACAPwAAAABuAAAADQAAAAAAAABdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAF8AAAAAAACAPwAAAABuAAAADQAAAAAAAABgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGIA AAAAAACAPwAAAABuAAAADQAAAAAAAABjAAAAAAAAgD8AAAAAAgAAAAAAAAAAAAAAAQAAAAMLAAAAAAAAZAAAAB4AAAAAAAAAdwAAAAAAAACAPwAAAAAAAAAA AAAAAAAAAAAAAAAAZgAAAAMAAAAAAAAALS0tZwAAAAAAAAAAAAAAaAAAAAoAAAAAAAAAAAAAAAAAAAAAAGkAAAASAAAAAAAAAAAAAABAPwAAQD8AAAA/AABA P2oAAAARAAAAAAAAAAAAAIA+AAAAPwAAQD8AAIA+awAAABEAAAAAAAAAAAAAgD4AAAA/AACAPgAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAA AGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAA AAAAAAAAAG4AAAANAAAAAAAAAAAAAAAAAACAPwAAAABuAAAADQAAAAAAAAABAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAAMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAYAAAAAAACAPwAA AABuAAAADQAAAAAAAAAHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAK AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAwAAAAAAACAPwAAAABuAAAADQAAAAAAAAANAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAADgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAABIAAAAAAACAPwAAAABuAAAADQAAAAAAAAATAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAABUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABgAAAAAAACAPwAA AABuAAAADQAAAAAAAAAZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAc AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAfAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAIAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIwAAAAAA AIA/AAAAAG4AAAANAAAAAAAAACQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAlAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAACcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAoAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACoAAAAAAACAPwAA AABuAAAADQAAAAAAAAArAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAu AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAxAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAMgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADMAAAAAAACAPwAAAABuAAAADQAAAAAAAAA0AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAADYAAAAAAACAPwAAAABuAAAADQAAAAAAAAA3AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAADkAAAAAAACAPwAAAABuAAAADQAAAAAAAAA6AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADwAAAAAAACAPwAA AABuAAAADQAAAAAAAAA9AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD8AAAAAAACAPwAAAABuAAAADQAAAAAAAABA AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEIAAAAAAACAPwAAAABuAAAADQAAAAAAAABDAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAARAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEUAAAAAAACAPwAAAABuAAAADQAAAAAAAABGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARwAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAEgAAAAAAACAPwAAAABuAAAADQAAAAAAAABJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASgAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAEsAAAAAAACAPwAAAABuAAAADQAAAAAAAABMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE4AAAAAAACAPwAA AABuAAAADQAAAAAAAABPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFEAAAAAAACAPwAAAABuAAAADQAAAAAAAABS AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFQAAAAAAACAPwAAAABuAAAADQAAAAAAAABVAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAVgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFcAAAAAAACAPwAAAABuAAAADQAAAAAAAABYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWQAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAFoAAAAAAACAPwAAAABuAAAADQAAAAAAAABbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXAAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAF0AAAAAAACAPwAAAABuAAAADQAAAAAAAABeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGAAAAAAAACAPwAA AABuAAAADQAAAAAAAABhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGMAAAAAAACAPwAAAAACAAAAAAAAAAAAAAAB AAAAAwsAAAAAAABkAAAAHgAAAAAAAAB4AAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAAAwAAAAAAAAAtLS1nAAAAAAAAAAAAAABoAAAACgAAAAAA AAAAAAAAAAAAAAAAaQAAABIAAAAAAAAAAAAAAEA/AABAPwAAAD8AAEA/agAAABEAAAAAAAAAAAAAgD4AAAA/AABAPwAAgD5rAAAAEQAAAAAAAAAAAACAPgAA AD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABtAAAABAAAAAAAAAAAAAAA bQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbgAAAA0AAAAAAAAAAAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAEAAAAA AACAPwAAAABuAAAADQAAAAAAAAACAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAQAAAAAAACAPwAAAABuAAAADQAA AAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAIAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAoAAAAAAACAPwAAAABuAAAADQAAAAAAAAALAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA DAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAABAAAAAAAACAPwAAAABuAAAADQAAAAAAAAARAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABMAAAAA AACAPwAAAABuAAAADQAAAAAAAAAUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABYAAAAAAACAPwAAAABuAAAADQAA AAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAaAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA HgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAACIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACUAAAAA AACAPwAAAABuAAAADQAAAAAAAAAmAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACgAAAAAAACAPwAAAABuAAAADQAA AAAAAAApAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAsAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA MAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAyAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAADQAAAAAAACAPwAAAABuAAAADQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADcAAAAA AACAPwAAAABuAAAADQAAAAAAAAA4AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADoAAAAAAACAPwAAAABuAAAADQAA AAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD0AAAAAAACAPwAAAABuAAAADQAAAAAAAAA+AAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEAAAAAAAACAPwAAAABuAAAADQAAAAAAAABBAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA QgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEMAAAAAAACAPwAAAABuAAAADQAAAAAAAABEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAEYAAAAAAACAPwAAAABuAAAADQAAAAAAAABHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEkAAAAA AACAPwAAAABuAAAADQAAAAAAAABKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEwAAAAAAACAPwAAAABuAAAADQAA AAAAAABNAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE8AAAAAAACAPwAAAABuAAAADQAAAAAAAABQAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFIAAAAAAACAPwAAAABuAAAADQAAAAAAAABTAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA VAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFUAAAAAAACAPwAAAABuAAAADQAAAAAAAABWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAFgAAAAAAACAPwAAAABuAAAADQAAAAAAAABZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFsAAAAA AACAPwAAAABuAAAADQAAAAAAAABcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF4AAAAAAACAPwAAAABuAAAADQAA AAAAAABfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGEAAAAAAACAPwAAAABuAAAADQAAAAAAAABiAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/AAAAAAIAAAAAAAAAAAAAAAEAAAADCwAAAAAAAGQAAAAeAAAAAAAAAHkAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAA AAAAAGYAAAADAAAAAAAAAC0tLWcAAAAAAAAAAAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAAAABpAAAAEgAAAAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAA AAAAAAAAAACAPgAAAD8AAEA/AACAPmsAAAARAAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABsAAAAFAAA AAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABu AAAADQAAAAAAAAAAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAIAAAAAAACAPwAAAABuAAAADQAAAAAAAAADAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAABAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAABwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAAsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AA4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABEAAAAAAACAPwAAAABu AAAADQAAAAAAAAASAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAVAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAGQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAB0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ACAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACMAAAAAAACAPwAAAABu AAAADQAAAAAAAAAkAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAnAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAKwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAtAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAC8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ADIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAzAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADUAAAAAAACAPwAAAABu AAAADQAAAAAAAAA2AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADgAAAAAAACAPwAAAABuAAAADQAAAAAAAAA5AAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADsAAAAAAACAPwAAAABuAAAADQAAAAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAPQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD4AAAAAAACAPwAAAABuAAAADQAAAAAAAAA/AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAEEAAAAAAACAPwAAAABuAAAADQAAAAAAAABCAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQwAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AEQAAAAAAACAPwAAAABuAAAADQAAAAAAAABFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEcAAAAAAACAPwAAAABu AAAADQAAAAAAAABIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEoAAAAAAACAPwAAAABuAAAADQAAAAAAAABLAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAATAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE0AAAAAAACAPwAAAABuAAAADQAAAAAAAABOAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAATwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFAAAAAAAACAPwAAAABuAAAADQAAAAAAAABRAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAFMAAAAAAACAPwAAAABuAAAADQAAAAAAAABUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVQAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AFYAAAAAAACAPwAAAABuAAAADQAAAAAAAABXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFkAAAAAAACAPwAAAABu AAAADQAAAAAAAABaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFwAAAAAAACAPwAAAABuAAAADQAAAAAAAABdAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF8AAAAAAACAPwAAAABuAAAADQAAAAAAAABgAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAYQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGIAAAAAAACAPwAAAABuAAAADQAAAAAAAABjAAAAAAAAgD8AAAAAAgAAAAAAAAAAAAAAAQAAAAMLAAAA AAAAZAAAAB4AAAAAAAAAegAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAMAAAAAAAAALS0tZwAAAAAAAAAAAAAAaAAAAAoAAAAAAAAAAAAAAAAA AAAAAGkAAAASAAAAAAAAAAAAAABAPwAAQD8AAAA/AABAP2oAAAARAAAAAAAAAAAAAIA+AAAAPwAAQD8AAIA+awAAABEAAAAAAAAAAAAAgD4AAAA/AACAPgAA AABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAA AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG4AAAANAAAAAAAAAAAAAAAAAACAPwAAAABuAAAADQAAAAAAAAABAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAAgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAAYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAAkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAwAAAAAAACA PwAAAABuAAAADQAAAAAAAAANAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA8AAAAAAACAPwAAAABuAAAADQAAAAAA AAAQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABIAAAAAAACAPwAAAABuAAAADQAAAAAAAAATAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAFAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAABgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAABsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB4AAAAAAACA PwAAAABuAAAADQAAAAAAAAAfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACEAAAAAAACAPwAAAABuAAAADQAAAAAA AAAiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAlAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAJgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAoAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAACoAAAAAAACAPwAAAABuAAAADQAAAAAAAAArAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAC0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAuAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADAAAAAAAACA PwAAAABuAAAADQAAAAAAAAAxAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADMAAAAAAACAPwAAAABuAAAADQAAAAAA AAA0AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADYAAAAAAACAPwAAAABuAAAADQAAAAAAAAA3AAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAOAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADkAAAAAAACAPwAAAABuAAAADQAAAAAAAAA6AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAADwAAAAAAACAPwAAAABuAAAADQAAAAAAAAA9AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAD8AAAAAAACAPwAAAABuAAAADQAAAAAAAABAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEIAAAAAAACA PwAAAABuAAAADQAAAAAAAABDAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEUAAAAAAACAPwAAAABuAAAADQAAAAAA AABGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEgAAAAAAACAPwAAAABuAAAADQAAAAAAAABJAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAASgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEsAAAAAAACAPwAAAABuAAAADQAAAAAAAABMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATQAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAE4AAAAAAACAPwAAAABuAAAADQAAAAAAAABPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUAAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAFEAAAAAAACAPwAAAABuAAAADQAAAAAAAABSAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFQAAAAAAACA PwAAAABuAAAADQAAAAAAAABVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFcAAAAAAACAPwAAAABuAAAADQAAAAAA AABYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFoAAAAAAACAPwAAAABuAAAADQAAAAAAAABbAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAXAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF0AAAAAAACAPwAAAABuAAAADQAAAAAAAABeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXwAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAGAAAAAAAACAPwAAAABuAAAADQAAAAAAAABhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYgAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAGMAAAAAAACAPwAAAAACAAAAAAAAAAAAAAABAAAAAwsAAAAAAABkAAAAHgAAAAAAAAB7AAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAA AwAAAAAAAAAtLS1nAAAAAAAAAAAAAABoAAAACgAAAAAAAAAAAAAAAAAAAAAAaQAAABIAAAAAAAAAAAAAAEA/AABAPwAAAD8AAEA/agAAABEAAAAAAAAAAAAA gD4AAAA/AABAPwAAgD5rAAAAEQAAAAAAAAAAAACAPgAAAD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACAPwAAAAAAAAAAbAAAABQAAAAAAAAAAAAA AM3MzD0AAIA/AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbgAAAA0AAAAA AAAAAAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAEAAAAAAACAPwAAAABuAAAADQAAAAAAAAACAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAAQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAcA AAAAAACAPwAAAABuAAAADQAAAAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAoAAAAAAACAPwAAAABuAAAA DQAAAAAAAAALAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAOAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABAAAAAAAACAPwAAAABuAAAADQAAAAAAAAARAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAEgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAABYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABkA AAAAAACAPwAAAABuAAAADQAAAAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABwAAAAAAACAPwAAAABuAAAA DQAAAAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAgAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAJAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAmAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAACgAAAAAAACAPwAAAABuAAAADQAAAAAAAAApAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACsA AAAAAACAPwAAAABuAAAADQAAAAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC4AAAAAAACAPwAAAABuAAAA DQAAAAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAyAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADQAAAAAAACAPwAAAABuAAAADQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAANgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADcAAAAAAACAPwAAAABuAAAADQAAAAAAAAA4AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAADoAAAAAAACAPwAAAABuAAAADQAAAAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD0A AAAAAACAPwAAAABuAAAADQAAAAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEAAAAAAAACAPwAAAABuAAAA DQAAAAAAAABBAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEMAAAAAAACAPwAAAABuAAAADQAAAAAAAABEAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEYAAAAAAACAPwAAAABuAAAADQAAAAAAAABHAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAASAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEkAAAAAAACAPwAAAABuAAAADQAAAAAAAABKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASwAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAEwAAAAAAACAPwAAAABuAAAADQAAAAAAAABNAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE8A AAAAAACAPwAAAABuAAAADQAAAAAAAABQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFIAAAAAAACAPwAAAABuAAAA DQAAAAAAAABTAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFUAAAAAAACAPwAAAABuAAAADQAAAAAAAABWAAAAAAAA gD8AAAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFgAAAAAAACAPwAAAABuAAAADQAAAAAAAABZAAAAAAAAgD8AAAAAbgAAAA0AAAAA AAAAWgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFsAAAAAAACAPwAAAABuAAAADQAAAAAAAABcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAA AG4AAAANAAAAAAAAAF4AAAAAAACAPwAAAABuAAAADQAAAAAAAABfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGEA AAAAAACAPwAAAABuAAAADQAAAAAAAABiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/AAAAAAIAAAAAAAAAAAAAAAEAAAADCwAAAAAAAGQAAAAe AAAAAAAAAHwAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAGYAAAADAAAAAAAAAC0tLWcAAAAAAAAAAAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAAAABpAAAA EgAAAAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/AACAPmsAAAARAAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAAbAAAABQA AAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAA bQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABuAAAADQAAAAAAAAAAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAAIAAAAAAACAPwAAAABuAAAADQAAAAAAAAADAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAUAAAAAAACAPwAA AABuAAAADQAAAAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAJ AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAADQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAABEAAAAAAACAPwAAAABuAAAADQAAAAAAAAASAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAABQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABcAAAAAAACAPwAA AABuAAAADQAAAAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAb AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAHwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAACMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAkAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAACYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACkAAAAAAACAPwAA AABuAAAADQAAAAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAt AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAMQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADIAAAAAAACAPwAAAABuAAAADQAAAAAAAAAzAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAADUAAAAAAACAPwAAAABuAAAADQAAAAAAAAA2AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAADgAAAAAAACAPwAAAABuAAAADQAAAAAAAAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADsAAAAAAACAPwAA AABuAAAADQAAAAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD4AAAAAAACAPwAAAABuAAAADQAAAAAAAAA/ AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEEAAAAAAACAPwAAAABuAAAADQAAAAAAAABCAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAQwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEQAAAAAAACAPwAAAABuAAAADQAAAAAAAABFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARgAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAEcAAAAAAACAPwAAAABuAAAADQAAAAAAAABIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASQAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAEoAAAAAAACAPwAAAABuAAAADQAAAAAAAABLAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE0AAAAAAACAPwAA AABuAAAADQAAAAAAAABOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFAAAAAAAACAPwAAAABuAAAADQAAAAAAAABR AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFMAAAAAAACAPwAAAABuAAAADQAAAAAAAABUAAAAAAAAgD8AAAAAbgAA AA0AAAAAAAAAVQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFYAAAAAAACAPwAAAABuAAAADQAAAAAAAABXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAA AIA/AAAAAG4AAAANAAAAAAAAAFkAAAAAAACAPwAAAABuAAAADQAAAAAAAABaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4AAAANAAAA AAAAAFwAAAAAAACAPwAAAABuAAAADQAAAAAAAABdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF8AAAAAAACAPwAA AABuAAAADQAAAAAAAABgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGIAAAAAAACAPwAAAABuAAAADQAAAAAAAABj AAAAAAAAgD8AAAAAAgAAAAAAAAAAAAAAAQAAAAMLAAAAAAAAZAAAAB4AAAAAAAAAfQAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAAMAAAAAAAAA LS0tZwAAAAAAAAAAAAAAaAAAAAoAAAAAAAAAAAAAAAAAAAAAAGkAAAASAAAAAAAAAAAAAABAPwAAQD8AAAA/AABAP2oAAAARAAAAAAAAAAAAAIA+AAAAPwAA QD8AAIA+awAAABEAAAAAAAAAAAAAgD4AAAA/AACAPgAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAAAGwAAAAUAAAAAAAAAAAAAADNzMw9AACA PwAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG4AAAANAAAAAAAAAAAAAAAA AACAPwAAAABuAAAADQAAAAAAAAABAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAAgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAMAAAAAAACAPwAAAABuAAAADQAA AAAAAAAEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAHAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAACAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAKAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA CwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAwAAAAAAACAPwAAAABuAAAADQAAAAAAAAANAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAA8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABIAAAAA AACAPwAAAABuAAAADQAAAAAAAAATAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABUAAAAAAACAPwAAAABuAAAADQAA AAAAAAAWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAZAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAGgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAcAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA HQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAfAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAACEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACQAAAAA AACAPwAAAABuAAAADQAAAAAAAAAlAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACcAAAAAAACAPwAAAABuAAAADQAA AAAAAAAoAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACoAAAAAAACAPwAAAABuAAAADQAAAAAAAAArAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAALAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAuAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA LwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADAAAAAAAACAPwAAAABuAAAADQAAAAAAAAAxAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAADMAAAAAAACAPwAAAABuAAAADQAAAAAAAAA0AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADYAAAAA AACAPwAAAABuAAAADQAAAAAAAAA3AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADkAAAAAAACAPwAAAABuAAAADQAA AAAAAAA6AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADwAAAAAAACAPwAAAABuAAAADQAAAAAAAAA9AAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAPgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD8AAAAAAACAPwAAAABuAAAADQAAAAAAAABAAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA QQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEIAAAAAAACAPwAAAABuAAAADQAAAAAAAABDAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARAAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAEUAAAAAAACAPwAAAABuAAAADQAAAAAAAABGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEgAAAAA AACAPwAAAABuAAAADQAAAAAAAABJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEsAAAAAAACAPwAAAABuAAAADQAA AAAAAABMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE4AAAAAAACAPwAAAABuAAAADQAAAAAAAABPAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAUAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFEAAAAAAACAPwAAAABuAAAADQAAAAAAAABSAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAA UwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFQAAAAAAACAPwAAAABuAAAADQAAAAAAAABVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVgAAAAAAAIA/AAAAAG4A AAANAAAAAAAAAFcAAAAAAACAPwAAAABuAAAADQAAAAAAAABYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFoAAAAA AACAPwAAAABuAAAADQAAAAAAAABbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF0AAAAAAACAPwAAAABuAAAADQAA AAAAAABeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGAAAAAAAACAPwAAAABuAAAADQAAAAAAAABhAAAAAAAAgD8A AAAAbgAAAA0AAAAAAAAAYgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGMAAAAAAACAPwAAAAACAAAAAAAAAAAAAAABAAAAAwsAAAAAAABkAAAAHgAAAAAAAAB+ AAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAABmAAAAAwAAAAAAAAAtLS1nAAAAAAAAAAAAAABoAAAACgAAAAAAAAAAAAAAAAAAAAAAaQAAABIAAAAAAAAA AAAAAEA/AABAPwAAAD8AAEA/agAAABEAAAAAAAAAAAAAgD4AAAA/AABAPwAAgD5rAAAAEQAAAAAAAAAAAACAPgAAAD8AAIA+AAAAAGwAAAAUAAAAAAAAAAAA AADNzMw9AACAPwAAAAAAAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAA AAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbgAAAA0AAAAAAAAAAAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAEAAAAAAACAPwAAAABuAAAADQAAAAAAAAACAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAAwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAFAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAABgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAIAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAAoAAAAAAACAPwAAAABuAAAADQAAAAAAAAALAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AA0AAAAAAACAPwAAAABuAAAADQAAAAAAAAAOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABAAAAAAAACAPwAAAABu AAAADQAAAAAAAAARAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAUAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAFQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAXAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAGAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAaAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAABwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AB8AAAAAAACAPwAAAABuAAAADQAAAAAAAAAgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACIAAAAAAACAPwAAAABu AAAADQAAAAAAAAAjAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAJAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAmAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAJwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACgAAAAAAACAPwAAAABuAAAADQAAAAAAAAApAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAKgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACsAAAAAAACAPwAAAABuAAAADQAAAAAAAAAsAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAC4AAAAAAACAPwAAAABuAAAADQAAAAAAAAAvAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA ADEAAAAAAACAPwAAAABuAAAADQAAAAAAAAAyAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADQAAAAAAACAPwAAAABu AAAADQAAAAAAAAA1AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADcAAAAAAACAPwAAAABuAAAADQAAAAAAAAA4AAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAOQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADoAAAAAAACAPwAAAABuAAAADQAAAAAAAAA7AAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAPAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAD0AAAAAAACAPwAAAABuAAAADQAAAAAAAAA+AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPwAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAEAAAAAAAACAPwAAAABuAAAADQAAAAAAAABBAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQgAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AEMAAAAAAACAPwAAAABuAAAADQAAAAAAAABEAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEYAAAAAAACAPwAAAABu AAAADQAAAAAAAABHAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAASAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEkAAAAAAACAPwAAAABuAAAADQAAAAAAAABKAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAASwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEwAAAAAAACAPwAAAABuAAAADQAAAAAAAABNAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAATgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAE8AAAAAAACAPwAAAABuAAAADQAAAAAAAABQAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUQAAAAAAAIA/ AAAAAG4AAAANAAAAAAAAAFIAAAAAAACAPwAAAABuAAAADQAAAAAAAABTAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVAAAAAAAAIA/AAAAAG4AAAANAAAAAAAA AFUAAAAAAACAPwAAAABuAAAADQAAAAAAAABWAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFgAAAAAAACAPwAAAABu AAAADQAAAAAAAABZAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFsAAAAAAACAPwAAAABuAAAADQAAAAAAAABcAAAA AAAAgD8AAAAAbgAAAA0AAAAAAAAAXQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAF4AAAAAAACAPwAAAABuAAAADQAAAAAAAABfAAAAAAAAgD8AAAAAbgAAAA0A AAAAAAAAYAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAGEAAAAAAACAPwAAAABuAAAADQAAAAAAAABiAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYwAAAAAAAIA/ AAAAAAIAAAAAAAAAAAAAAAEAAAADCwAAAAAAAGQAAAAeAAAAAAAAAH8AAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAAAAAGYAAAADAAAAAAAAAC0tLWcAAAAA AAAAAAAAAGgAAAAKAAAAAAAAAAAAAAAAAAAAAABpAAAAEgAAAAAAAAAAAAAAQD8AAEA/AAAAPwAAQD9qAAAAEQAAAAAAAAAAAACAPgAAAD8AAEA/AACAPmsA AAARAAAAAAAAAAAAAIA+AAAAPwAAgD4AAAAAbAAAABQAAAAAAAAAAAAAAM3MzD0AAIA/AAAAAAAAAABsAAAAFAAAAAAAAAAAAAAAzczMPQAAgD8AAAAAAAAA AG0AAAAEAAAAAAAAAAAAAABtAAAABAAAAAAAAAAAAAAAbQAAAAQAAAAAAAAAAAAAAG0AAAAEAAAAAAAAAAAAAABuAAAADQAAAAAAAAAAAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAAQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAIAAAAAAACAPwAAAABuAAAADQAAAAAAAAADAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAAUAAAAAAACAPwAAAABuAAAADQAAAAAAAAAGAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAABwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAAgAAAAAAACAPwAAAABuAAAADQAAAAAAAAAJAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAACgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAAsAAAAAAACA PwAAAABuAAAADQAAAAAAAAAMAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAADQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAA4AAAAAAACAPwAAAABuAAAADQAAAAAA AAAPAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAEAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABEAAAAAAACAPwAAAABuAAAADQAAAAAAAAASAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAEwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAABQAAAAAAACAPwAAAABuAAAADQAAAAAAAAAVAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAFgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAABcAAAAAAACAPwAAAABuAAAADQAAAAAAAAAYAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAGQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAABoAAAAAAACAPwAAAABuAAAADQAAAAAAAAAbAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAB0AAAAAAACA PwAAAABuAAAADQAAAAAAAAAeAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAHwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACAAAAAAAACAPwAAAABuAAAADQAAAAAA AAAhAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAIgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACMAAAAAAACAPwAAAABuAAAADQAAAAAAAAAkAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAJQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAACYAAAAAAACAPwAAAABuAAAADQAAAAAAAAAnAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAACkAAAAAAACAPwAAAABuAAAADQAAAAAAAAAqAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAKwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAACwAAAAAAACAPwAAAABuAAAADQAAAAAAAAAtAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAALgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAC8AAAAAAACA PwAAAABuAAAADQAAAAAAAAAwAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAMQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADIAAAAAAACAPwAAAABuAAAADQAAAAAA AAAzAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAANAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADUAAAAAAACAPwAAAABuAAAADQAAAAAAAAA2AAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAANwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAADgAAAAAAACAPwAAAABuAAAADQAAAAAAAAA5AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAOgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAADsAAAAAAACAPwAAAABuAAAADQAAAAAAAAA8AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAPQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAD4AAAAAAACAPwAAAABuAAAADQAAAAAAAAA/AAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEEAAAAAAACA PwAAAABuAAAADQAAAAAAAABCAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAQwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEQAAAAAAACAPwAAAABuAAAADQAAAAAA AABFAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAARgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEcAAAAAAACAPwAAAABuAAAADQAAAAAAAABIAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAASQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAEoAAAAAAACAPwAAAABuAAAADQAAAAAAAABLAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATAAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAE0AAAAAAACAPwAAAABuAAAADQAAAAAAAABOAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAATwAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAFAAAAAAAACAPwAAAABuAAAADQAAAAAAAABRAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAUgAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFMAAAAAAACA PwAAAABuAAAADQAAAAAAAABUAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAVQAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFYAAAAAAACAPwAAAABuAAAADQAAAAAA AABXAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAWAAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFkAAAAAAACAPwAAAABuAAAADQAAAAAAAABaAAAAAAAAgD8AAAAA bgAAAA0AAAAAAAAAWwAAAAAAAIA/AAAAAG4AAAANAAAAAAAAAFwAAAAAAACAPwAAAABuAAAADQAAAAAAAABdAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAXgAA AAAAAIA/AAAAAG4AAAANAAAAAAAAAF8AAAAAAACAPwAAAABuAAAADQAAAAAAAABgAAAAAAAAgD8AAAAAbgAAAA0AAAAAAAAAYQAAAAAAAIA/AAAAAG4AAAAN AAAAAAAAAGIAAAAAAACAPwAAAABuAAAADQAAAAAAAABjAAAAAAAAgD8AAAAAAgAAAAAAAAAAAAAA system:capture_1 PulseAudio JACK Source:front-left system:capture_2 PulseAudio JACK Source:front-right PulseAudio JACK Sink:front-left system:playback_1 PulseAudio JACK Sink:front-right system:playback_2 Carla-2.4.2/data/presentation/lac2018/projects/2.carxp000066400000000000000000001024511420416754300223010ustar00rootroot00000000000000 false false true false 200 4000 INTERNAL ZynReverb Yes 0 1 0x5 0 Time 93 1 Delay 15 2 Feedback 0 5 Low-Pass Filter 114 6 High-Pass Filter 0 7 Damp 77 8 Type 0 9 Room size 95 10 Bandwidth 20 1 12 SFZ AcousticGuitar /home/falktx/Personal/Muzyks/Kits/SFZ/AcousticGuitarFREE Samples/AcousticGuitar.sfz Yes 1 0x1f0 1 AcousticGuitar http://kxstudio.sf.net/ns/carla/property CarlaSkinIsCompacted true LV2 MIDI Seq Guitar http://gareus.org/oss/lv2/stepseq#s8n8 Yes 1 0x1 0 Sync sync 1 1 BPM bpm 120 2 Step Duration (4/4) div 2 3 Swing swing 0 4 Drum Mode drummode 0 5 Midi Channel chn 0 6 MIDI Panic panic 0 9 Note 1 note1 69 10 Note 2 note2 67 11 Note 3 note3 65 12 Note 4 note4 64 13 Note 5 note5 62 14 Note 6 note6 60 15 Note 7 note7 59 16 Note 8 note8 57 17 Grid S: 1 N: 1 grid_1_1 127 18 Grid S: 2 N: 1 grid_2_1 0 19 Grid S: 3 N: 1 grid_3_1 127 20 Grid S: 4 N: 1 grid_4_1 127 21 Grid S: 5 N: 1 grid_5_1 0 22 Grid S: 6 N: 1 grid_6_1 0 23 Grid S: 7 N: 1 grid_7_1 0 24 Grid S: 8 N: 1 grid_8_1 0 25 Grid S: 1 N: 2 grid_1_2 0 26 Grid S: 2 N: 2 grid_2_2 127 27 Grid S: 3 N: 2 grid_3_2 0 28 Grid S: 4 N: 2 grid_4_2 0 29 Grid S: 5 N: 2 grid_5_2 0 30 Grid S: 6 N: 2 grid_6_2 0 31 Grid S: 7 N: 2 grid_7_2 0 32 Grid S: 8 N: 2 grid_8_2 0 33 Grid S: 1 N: 3 grid_1_3 0 34 Grid S: 2 N: 3 grid_2_3 0 35 Grid S: 3 N: 3 grid_3_3 0 36 Grid S: 4 N: 3 grid_4_3 0 37 Grid S: 5 N: 3 grid_5_3 0 38 Grid S: 6 N: 3 grid_6_3 0 39 Grid S: 7 N: 3 grid_7_3 127 40 Grid S: 8 N: 3 grid_8_3 127 41 Grid S: 1 N: 4 grid_1_4 0 42 Grid S: 2 N: 4 grid_2_4 0 43 Grid S: 3 N: 4 grid_3_4 0 44 Grid S: 4 N: 4 grid_4_4 0 45 Grid S: 5 N: 4 grid_5_4 127 46 Grid S: 6 N: 4 grid_6_4 0 47 Grid S: 7 N: 4 grid_7_4 0 48 Grid S: 8 N: 4 grid_8_4 0 49 Grid S: 1 N: 5 grid_1_5 0 50 Grid S: 2 N: 5 grid_2_5 0 51 Grid S: 3 N: 5 grid_3_5 0 52 Grid S: 4 N: 5 grid_4_5 0 53 Grid S: 5 N: 5 grid_5_5 0 54 Grid S: 6 N: 5 grid_6_5 127 55 Grid S: 7 N: 5 grid_7_5 0 56 Grid S: 8 N: 5 grid_8_5 0 57 Grid S: 1 N: 6 grid_1_6 0 58 Grid S: 2 N: 6 grid_2_6 0 59 Grid S: 3 N: 6 grid_3_6 0 60 Grid S: 4 N: 6 grid_4_6 0 61 Grid S: 5 N: 6 grid_5_6 0 62 Grid S: 6 N: 6 grid_6_6 0 63 Grid S: 7 N: 6 grid_7_6 0 64 Grid S: 8 N: 6 grid_8_6 0 65 Grid S: 1 N: 7 grid_1_7 0 66 Grid S: 2 N: 7 grid_2_7 0 67 Grid S: 3 N: 7 grid_3_7 0 68 Grid S: 4 N: 7 grid_4_7 0 69 Grid S: 5 N: 7 grid_5_7 0 70 Grid S: 6 N: 7 grid_6_7 0 71 Grid S: 7 N: 7 grid_7_7 0 72 Grid S: 8 N: 7 grid_8_7 0 73 Grid S: 1 N: 8 grid_1_8 0 74 Grid S: 2 N: 8 grid_2_8 0 75 Grid S: 3 N: 8 grid_3_8 0 76 Grid S: 4 N: 8 grid_4_8 0 77 Grid S: 5 N: 8 grid_5_8 0 78 Grid S: 6 N: 8 grid_6_8 0 79 Grid S: 7 N: 8 grid_7_8 0 80 Grid S: 8 N: 8 grid_8_8 0 LV2 x42-eq - Parametric Equalizer Stereo http://gareus.org/oss/lv2/fil4#stereo No 1 0x0 0 Enable enable 1 1 Gain gain 0 3 Reset Peak Hold peakreset 1 4 Highpass HighPass 0 5 Highpass Frequency HPfreq 20 6 HighPass Resonance HPQ 0.699999988079071 7 Lowpass LowPass 1 8 Lowpass Frequency LPfreq 3006.10034179688 9 LowPass Resonance LPQ 1 10 Lowshelf LSsec 1 11 Lowshelf Frequency LSfreq 80 12 Lowshelf Bandwidth LSq 1 13 Lowshelf Gain LSgain 0 14 Section 1 sec1 1 15 Frequency 1 freq1 159.999984741211 16 Bandwidth 1 q1 0.600000023841858 17 Gain 1 gain1 0 18 Section 2 sec2 1 19 Frequency 2 freq2 397.000030517578 20 Bandwidth 2 q2 0.600000023841858 21 Gain 2 gain2 0 22 Section 3 sec3 1 23 Frequency 3 freq3 1250.00012207031 24 Bandwidth 3 q3 0.600000023841858 25 Gain 3 gain3 0 26 Section 4 sec4 1 27 Frequency 4 freq4 2500.00024414062 28 Bandwidth 4 q4 0.600000023841858 29 Gain 4 gain4 0 30 Highshelf HSsec 1 31 Highshelf Frequency HSfreq 3131.60424804688 32 Highshelf Bandwidth HSq 1 33 Highshelf Gain HSgain -18 http://lv2plug.in/ns/ext/atom#Float http://gareus.org/oss/lv2/fil4#dbscale AADwQQ== http://lv2plug.in/ns/ext/atom#Float http://gareus.org/oss/lv2/fil4#fftgain AAAAAA== http://lv2plug.in/ns/ext/atom#Float http://gareus.org/oss/lv2/fil4#uiscale AACAPw== http://lv2plug.in/ns/ext/atom#Int http://gareus.org/oss/lv2/fil4#fftmode ARIAAA== http://lv2plug.in/ns/ext/atom#Int http://gareus.org/oss/lv2/fil4#fftchannel /////w== LV2 MIDI Seq Drums http://gareus.org/oss/lv2/stepseq#s8n8 No 1 0x1 0 Sync sync 1 1 BPM bpm 120 2 Step Duration (4/4) div 1 3 Swing swing 0 4 Drum Mode drummode 1 5 Midi Channel chn 0 6 MIDI Panic panic 0 9 Note 1 note1 36 10 Note 2 note2 56 11 Note 3 note3 61 12 Note 4 note4 51 13 Note 5 note5 47 14 Note 6 note6 60 15 Note 7 note7 59 16 Note 8 note8 57 17 Grid S: 1 N: 1 grid_1_1 127 18 Grid S: 2 N: 1 grid_2_1 0 19 Grid S: 3 N: 1 grid_3_1 0 20 Grid S: 4 N: 1 grid_4_1 0 21 Grid S: 5 N: 1 grid_5_1 127 22 Grid S: 6 N: 1 grid_6_1 0 23 Grid S: 7 N: 1 grid_7_1 0 24 Grid S: 8 N: 1 grid_8_1 0 25 Grid S: 1 N: 2 grid_1_2 0 26 Grid S: 2 N: 2 grid_2_2 0 27 Grid S: 3 N: 2 grid_3_2 0 28 Grid S: 4 N: 2 grid_4_2 38 29 Grid S: 5 N: 2 grid_5_2 0 30 Grid S: 6 N: 2 grid_6_2 39 31 Grid S: 7 N: 2 grid_7_2 0 32 Grid S: 8 N: 2 grid_8_2 0 33 Grid S: 1 N: 3 grid_1_3 0 34 Grid S: 2 N: 3 grid_2_3 0 35 Grid S: 3 N: 3 grid_3_3 127 36 Grid S: 4 N: 3 grid_4_3 0 37 Grid S: 5 N: 3 grid_5_3 0 38 Grid S: 6 N: 3 grid_6_3 0 39 Grid S: 7 N: 3 grid_7_3 127 40 Grid S: 8 N: 3 grid_8_3 0 41 Grid S: 1 N: 4 grid_1_4 0 42 Grid S: 2 N: 4 grid_2_4 0 43 Grid S: 3 N: 4 grid_3_4 0 44 Grid S: 4 N: 4 grid_4_4 0 45 Grid S: 5 N: 4 grid_5_4 0 46 Grid S: 6 N: 4 grid_6_4 0 47 Grid S: 7 N: 4 grid_7_4 0 48 Grid S: 8 N: 4 grid_8_4 0 49 Grid S: 1 N: 5 grid_1_5 0 50 Grid S: 2 N: 5 grid_2_5 0 51 Grid S: 3 N: 5 grid_3_5 0 52 Grid S: 4 N: 5 grid_4_5 0 53 Grid S: 5 N: 5 grid_5_5 0 54 Grid S: 6 N: 5 grid_6_5 60 55 Grid S: 7 N: 5 grid_7_5 0 56 Grid S: 8 N: 5 grid_8_5 57 57 Grid S: 1 N: 6 grid_1_6 0 58 Grid S: 2 N: 6 grid_2_6 0 59 Grid S: 3 N: 6 grid_3_6 0 60 Grid S: 4 N: 6 grid_4_6 0 61 Grid S: 5 N: 6 grid_5_6 0 62 Grid S: 6 N: 6 grid_6_6 0 63 Grid S: 7 N: 6 grid_7_6 0 64 Grid S: 8 N: 6 grid_8_6 0 65 Grid S: 1 N: 7 grid_1_7 0 66 Grid S: 2 N: 7 grid_2_7 0 67 Grid S: 3 N: 7 grid_3_7 0 68 Grid S: 4 N: 7 grid_4_7 0 69 Grid S: 5 N: 7 grid_5_7 0 70 Grid S: 6 N: 7 grid_6_7 0 71 Grid S: 7 N: 7 grid_7_7 0 72 Grid S: 8 N: 7 grid_8_7 0 73 Grid S: 1 N: 8 grid_1_8 0 74 Grid S: 2 N: 8 grid_2_8 0 75 Grid S: 3 N: 8 grid_3_8 0 76 Grid S: 4 N: 8 grid_4_8 0 77 Grid S: 5 N: 8 grid_5_8 0 78 Grid S: 6 N: 8 grid_6_8 0 79 Grid S: 7 N: 8 grid_7_8 0 80 Grid S: 8 N: 8 grid_8_8 0 LV2 ZamCompX2 urn:zamaudio:ZamCompX2 Yes 0.1987794 1 0x4 0 Attack att 10 1 Release rel 10 2 Knee kn 1 3 Ratio rat 5 4 Threshold thr -18 5 Makeup mak 6 6 Slew slew 20 7 Stereo Detection stereodet 1 8 Sidechain sidechain 1 LV2 Black Pearl Drumkit http://gareus.org/oss/lv2/avldrums#BlackPearl Yes 1 0x1e0 system:capture_1 PulseAudio JACK Source:front-left system:capture_2 PulseAudio JACK Source:front-right PulseAudio JACK Sink:front-left system:playback_1 PulseAudio JACK Sink:front-right system:playback_2 ZynReverb:output_1 ZamCompX2:Audio Input 1 ZynReverb:output_2 ZamCompX2:Audio Input 2 x42-eq - Parametric Equalizer Stereo:Out Left ZamCompX2:Audio Input 1 MIDI Seq Guitar:events-out AcousticGuitar:events-in MIDI Seq Drums:events-out Black Pearl Drumkit:events-in AcousticGuitar:out-left x42-eq - Parametric Equalizer Stereo:In Left AcousticGuitar:out-left ZynReverb:input_1 AcousticGuitar:out-right x42-eq - Parametric Equalizer Stereo:In Right AcousticGuitar:out-right ZynReverb:input_2 x42-eq - Parametric Equalizer Stereo:Out Right ZamCompX2:Audio Input 2 ZamCompX2:Audio Output 1 system:playback_1 ZamCompX2:Audio Output 2 system:playback_2 Black Pearl Drumkit:Output Left ZamCompX2:Sidechain Input Black Pearl Drumkit:Output Left system:playback_1 Black Pearl Drumkit:Output Right system:playback_2 Black Pearl Drumkit:Output Right ZamCompX2:Sidechain Input Carla-2.4.2/data/presentation/lac2018/projects/3.carxp000066400000000000000000002241751420416754300223120ustar00rootroot00000000000000 false false true false 200 4000 LV2 MIDI Step Sequencer8x8 http://gareus.org/oss/lv2/stepseq#s8n8 Yes 1 0x1 0 Sync sync 1 1 BPM bpm 120 2 Step Duration (4/4) div 7 3 Swing swing 0 4 Drum Mode drummode 0 5 Midi Channel chn 0 6 MIDI Panic panic 0 9 Note 1 note1 69 10 Note 2 note2 67 11 Note 3 note3 65 12 Note 4 note4 64 13 Note 5 note5 62 14 Note 6 note6 60 15 Note 7 note7 59 16 Note 8 note8 57 17 Grid S: 1 N: 1 grid_1_1 127 18 Grid S: 2 N: 1 grid_2_1 0 19 Grid S: 3 N: 1 grid_3_1 0 20 Grid S: 4 N: 1 grid_4_1 0 21 Grid S: 5 N: 1 grid_5_1 0 22 Grid S: 6 N: 1 grid_6_1 0 23 Grid S: 7 N: 1 grid_7_1 0 24 Grid S: 8 N: 1 grid_8_1 0 25 Grid S: 1 N: 2 grid_1_2 0 26 Grid S: 2 N: 2 grid_2_2 127 27 Grid S: 3 N: 2 grid_3_2 0 28 Grid S: 4 N: 2 grid_4_2 0 29 Grid S: 5 N: 2 grid_5_2 0 30 Grid S: 6 N: 2 grid_6_2 0 31 Grid S: 7 N: 2 grid_7_2 0 32 Grid S: 8 N: 2 grid_8_2 127 33 Grid S: 1 N: 3 grid_1_3 0 34 Grid S: 2 N: 3 grid_2_3 0 35 Grid S: 3 N: 3 grid_3_3 127 36 Grid S: 4 N: 3 grid_4_3 0 37 Grid S: 5 N: 3 grid_5_3 127 38 Grid S: 6 N: 3 grid_6_3 0 39 Grid S: 7 N: 3 grid_7_3 127 40 Grid S: 8 N: 3 grid_8_3 0 41 Grid S: 1 N: 4 grid_1_4 0 42 Grid S: 2 N: 4 grid_2_4 0 43 Grid S: 3 N: 4 grid_3_4 0 44 Grid S: 4 N: 4 grid_4_4 127 45 Grid S: 5 N: 4 grid_5_4 0 46 Grid S: 6 N: 4 grid_6_4 127 47 Grid S: 7 N: 4 grid_7_4 0 48 Grid S: 8 N: 4 grid_8_4 0 49 Grid S: 1 N: 5 grid_1_5 0 50 Grid S: 2 N: 5 grid_2_5 0 51 Grid S: 3 N: 5 grid_3_5 0 52 Grid S: 4 N: 5 grid_4_5 0 53 Grid S: 5 N: 5 grid_5_5 0 54 Grid S: 6 N: 5 grid_6_5 0 55 Grid S: 7 N: 5 grid_7_5 0 56 Grid S: 8 N: 5 grid_8_5 0 57 Grid S: 1 N: 6 grid_1_6 0 58 Grid S: 2 N: 6 grid_2_6 0 59 Grid S: 3 N: 6 grid_3_6 0 60 Grid S: 4 N: 6 grid_4_6 0 61 Grid S: 5 N: 6 grid_5_6 0 62 Grid S: 6 N: 6 grid_6_6 0 63 Grid S: 7 N: 6 grid_7_6 0 64 Grid S: 8 N: 6 grid_8_6 0 65 Grid S: 1 N: 7 grid_1_7 0 66 Grid S: 2 N: 7 grid_2_7 0 67 Grid S: 3 N: 7 grid_3_7 0 68 Grid S: 4 N: 7 grid_4_7 0 69 Grid S: 5 N: 7 grid_5_7 0 70 Grid S: 6 N: 7 grid_6_7 0 71 Grid S: 7 N: 7 grid_7_7 0 72 Grid S: 8 N: 7 grid_8_7 0 73 Grid S: 1 N: 8 grid_1_8 0 74 Grid S: 2 N: 8 grid_2_8 0 75 Grid S: 3 N: 8 grid_3_8 0 76 Grid S: 4 N: 8 grid_4_8 0 77 Grid S: 5 N: 8 grid_5_8 0 78 Grid S: 6 N: 8 grid_6_8 0 79 Grid S: 7 N: 8 grid_7_8 0 80 Grid S: 8 N: 8 grid_8_8 0 LV2 Pianoteq 5 http://pianoteq.com/lv2/Pianoteq5 Yes 1 0x1e5 0 Sustain Pedal lv2_port_1 0 1 Soft Pedal lv2_port_2 0 2 Sostenuto Pedal lv2_port_3 0 3 Harmonic Pedal lv2_port_4 0 4 Pitch Bend lv2_port_5 0.5 5 Volume lv2_port_6 0.727272748947144 6 Dynamics lv2_port_7 0.393939405679703 7 Diapason lv2_port_8 0.333333343267441 8 Temperament lv2_port_9 0 9 Microtonal lv2_port_10 0 10 Octave Stretch. lv2_port_11 0.231088206171989 11 Unison Width lv2_port_12 0.5 12 Direct Sound Duration lv2_port_13 0.5 13 Hard. Piano lv2_port_14 0.150000005960464 14 Hard. Mezzo lv2_port_15 0.400000005960464 15 Hard. Forte lv2_port_16 0.800000011920929 16 Profile 1 lv2_port_17 0.5 17 Profile 2 lv2_port_18 0.5 18 Profile 3 lv2_port_19 0.5 19 Profile 4 lv2_port_20 0.5 20 Profile 5 lv2_port_21 0.5 21 Profile 6 lv2_port_22 0.5 22 Profile 7 lv2_port_23 0.5 23 Profile 8 lv2_port_24 0.5 24 Hammer Noise lv2_port_25 0.28571429848671 25 Strike Point lv2_port_26 0.551161646842957 26 Character lv2_port_27 0.5 27 Pickup Symmetry lv2_port_28 0 28 Pickup Distance lv2_port_29 0.444444477558136 29 Soft Level lv2_port_30 0.300000011920929 30 Impedance lv2_port_31 0.5 31 Cutoff lv2_port_32 0.5 32 Q Factor lv2_port_33 0.5 33 String Length lv2_port_34 0.5 34 Sympa lv2_port_35 0.5 35 Duplex lv2_port_36 0.499999970197678 36 Quadratic Effect lv2_port_37 0.569824278354645 37 Bounce Switch lv2_port_38 0 38 Bounce Delay lv2_port_39 0.458333343267441 39 Bounce Sync lv2_port_40 0 40 MBSyncS lv2_port_41 0.56521737575531 41 MBVelS lv2_port_42 0.5 42 MBAccel lv2_port_43 0.5 43 MBVelL lv2_port_44 0.5 44 MBHuma lv2_port_45 0.5 45 Eff 1 Switch lv2_port_46 1 46 Eff 1 Param 1 lv2_port_47 0.100000001490116 47 Eff 1 Param 2 lv2_port_48 0.22833614051342 48 Eff 1 Param 3 lv2_port_49 0 49 Eff 1 Param 4 lv2_port_50 0.25 50 Eff 1 Param 5 lv2_port_51 1 51 Eff 1 Param 6 lv2_port_52 0 52 Eff 1 Param 7 lv2_port_53 0 53 Eff 1 Param 8 lv2_port_54 0 54 Eff 2 Switch lv2_port_55 0 55 Eff 2 Param 1 lv2_port_56 0 56 Eff 2 Param 2 lv2_port_57 0 57 Eff 2 Param 3 lv2_port_58 0 58 Eff 2 Param 4 lv2_port_59 0 59 Eff 2 Param 5 lv2_port_60 0 60 Eff 2 Param 6 lv2_port_61 0 61 Eff 2 Param 7 lv2_port_62 0 62 Eff 2 Param 8 lv2_port_63 0 63 Eff 3 Switch lv2_port_64 0 64 Eff 3 Param 1 lv2_port_65 0 65 Eff 3 Param 2 lv2_port_66 0 66 Eff 3 Param 3 lv2_port_67 0 67 Eff 3 Param 4 lv2_port_68 0 68 Eff 3 Param 5 lv2_port_69 0 69 Eff 3 Param 6 lv2_port_70 0 70 Eff 3 Param 7 lv2_port_71 0 71 Eff 3 Param 8 lv2_port_72 0 72 Reverb Switch lv2_port_73 1 73 Reverb Duration lv2_port_74 0.273276418447495 74 Reverb Mix lv2_port_75 0.5 75 Room Dimensions lv2_port_76 0.333333343267441 76 Reverb Pre-delay lv2_port_77 0.52955836057663 77 RevEarl lv2_port_78 0.5 78 Reverb Tone lv2_port_79 0.5 79 Reverb Envelope lv2_port_80 1 80 RevRes lv2_port_81 0.5 81 Limiter Switch lv2_port_82 1 82 Limiter Sharp. lv2_port_83 0.5 83 Limiter Thresh. lv2_port_84 0.519999980926514 84 Limiter Gain lv2_port_85 0.833333313465118 85 Damper Noise lv2_port_86 0.499999970197678 86 Damper Position lv2_port_87 0.668858230113983 87 Last Damper lv2_port_88 0.7109375 88 Pedal Noise lv2_port_89 0.5 89 Key Rel. Noise lv2_port_90 0.5 90 Damping Duration lv2_port_91 0.5 91 Lid Position lv2_port_92 1 92 Output Mode lv2_port_93 0.666666686534882 93 Mic Level Comp. lv2_port_94 1 94 Mic Delay Comp. lv2_port_95 0 95 Head X position lv2_port_96 0.534999966621399 96 Head Y position lv2_port_97 0.5 97 Head Z position lv2_port_98 0.371428549289703 98 Head Diameter lv2_port_99 0.200000002980232 99 Head Angle lv2_port_100 0.5 100 Mic 1 Mic Switch lv2_port_101 1 101 Mic 1 X position lv2_port_102 0.574999988079071 102 Mic 1 Y position lv2_port_103 0.604166686534882 103 Mic 1 Z position lv2_port_104 0.428571432828903 104 Mic 1 Azimuth lv2_port_105 0 105 Mic 1 Elevation lv2_port_106 0.488764733076096 106 Mic 1 Level 1 lv2_port_107 0.837499976158142 107 Mic 1 Delay 1 lv2_port_108 0.5 108 Mic 1 Level 2 lv2_port_109 0.59375 109 Mic 1 Delay 2 lv2_port_110 0.6875 110 Mic 1 Level 3 lv2_port_111 0 111 Mic 1 Delay 3 lv2_port_112 0.5 112 Mic 1 Level 4 lv2_port_113 0 113 Mic 1 Delay 4 lv2_port_114 0.5 114 Mic 1 Level 5 lv2_port_115 0 115 Mic 1 Delay 5 lv2_port_116 0.5 116 Mic 2 Mic Switch lv2_port_117 1 117 Mic 2 X position lv2_port_118 0.574999988079071 118 Mic 2 Y position lv2_port_119 0.5625 119 Mic 2 Z position lv2_port_120 0.428571432828903 120 Mic 2 Azimuth lv2_port_121 0.625 121 Mic 2 Elevation lv2_port_122 0.488764733076096 122 Mic 2 Level 1 lv2_port_123 0.59375 123 Mic 2 Delay 1 lv2_port_124 0.75 124 Mic 2 Level 2 lv2_port_125 0.837499976158142 125 Mic 2 Delay 2 lv2_port_126 0.509375035762787 126 Mic 2 Level 3 lv2_port_127 0 127 Mic 2 Delay 3 lv2_port_128 0.5 128 Mic 2 Level 4 lv2_port_129 0 129 Mic 2 Delay 4 lv2_port_130 0.5 130 Mic 2 Level 5 lv2_port_131 0 131 Mic 2 Delay 5 lv2_port_132 0.5 132 Mic 3 Mic Switch lv2_port_133 0 133 Mic 3 X position lv2_port_134 0.596000015735626 134 Mic 3 Y position lv2_port_135 0.429999977350235 135 Mic 3 Z position lv2_port_136 0.262857139110565 136 Mic 3 Azimuth lv2_port_137 0.75 137 Mic 3 Elevation lv2_port_138 0.5 138 Mic 3 Level 1 lv2_port_139 0.512499988079071 139 Mic 3 Delay 1 lv2_port_140 0.5 140 Mic 3 Level 2 lv2_port_141 0.512499988079071 141 Mic 3 Delay 2 lv2_port_142 0.5 142 Mic 3 Level 3 lv2_port_143 0 143 Mic 3 Delay 3 lv2_port_144 0.5 144 Mic 3 Level 4 lv2_port_145 0 145 Mic 3 Delay 4 lv2_port_146 0.5 146 Mic 3 Level 5 lv2_port_147 0 147 Mic 3 Delay 5 lv2_port_148 0.5 148 Mic 4 Mic Switch lv2_port_149 0 149 Mic 4 X position lv2_port_150 0.465000003576279 150 Mic 4 Y position lv2_port_151 0.531666696071625 151 Mic 4 Z position lv2_port_152 0.251428574323654 152 Mic 4 Azimuth lv2_port_153 0.5 153 Mic 4 Elevation lv2_port_154 0.5 154 Mic 4 Level 1 lv2_port_155 0.512499988079071 155 Mic 4 Delay 1 lv2_port_156 0.5 156 Mic 4 Level 2 lv2_port_157 0.512499988079071 157 Mic 4 Delay 2 lv2_port_158 0.5 158 Mic 4 Level 3 lv2_port_159 0 159 Mic 4 Delay 3 lv2_port_160 0.5 160 Mic 4 Level 4 lv2_port_161 0 161 Mic 4 Delay 4 lv2_port_162 0.5 162 Mic 4 Level 5 lv2_port_163 0 163 Mic 4 Delay 5 lv2_port_164 0.5 164 Mic 5 Mic Switch lv2_port_165 0 165 Mic 5 X position lv2_port_166 0.577000021934509 166 Mic 5 Y position lv2_port_167 0.569999992847443 167 Mic 5 Z position lv2_port_168 0.502857148647308 168 Mic 5 Azimuth lv2_port_169 0.5 169 Mic 5 Elevation lv2_port_170 0.5 170 Mic 5 Level 1 lv2_port_171 0.512499988079071 171 Mic 5 Delay 1 lv2_port_172 0.5 172 Mic 5 Level 2 lv2_port_173 0.512499988079071 173 Mic 5 Delay 2 lv2_port_174 0.5 174 Mic 5 Level 3 lv2_port_175 0 175 Mic 5 Delay 3 lv2_port_176 0.5 176 Mic 5 Level 4 lv2_port_177 0 177 Mic 5 Delay 4 lv2_port_178 0.5 178 Mic 5 Level 5 lv2_port_179 0 179 Mic 5 Delay 5 lv2_port_180 0.5 180 Stereo Width lv2_port_181 0.674031317234039 181 Sound Speed lv2_port_182 0.500000059604645 182 Mute lv2_port_183 0 183 Clavinet Low Mic lv2_port_184 1 184 ClvMicH lv2_port_185 1 185 Equalizer Switch lv2_port_186 1 186 HTinNois lv2_port_187 0.5 187 Blooming Energy lv2_port_188 0 188 Blooming Inertia lv2_port_189 0.5 189 Aftertouch lv2_port_190 0 190 Wall distance lv2_port_191 0 191 Unison Balance lv2_port_192 0.5 192 Condition lv2_port_193 0 193 Condition Seed lv2_port_194 0.12341234087944 194 Rattle Pedal lv2_port_195 0 195 Lute Stop Pedal lv2_port_196 0 196 Celeste Pedal lv2_port_197 0 197 Super Sostenuto lv2_port_198 0 http://lv2plug.in/ns/ext/atom#Chunk urn:juce:stateBinary UHJWSxQAAAJYRlRQpBsAAAoAAAAyMDE3LzExLzA0FwAAAFBpYW5vdGVxIDUuMy4wLzIwMTUwNzE1o9QvMCuNhmEarickC02mrGRsbGFjGwAAdGR0TXIGAAARAAAARDQgRGFpbHkgUHJhY3RpY2UAAAAAGgAAAENvcHlyaWdodCAoYykgMjAxNSBNb2RhcnR0hwAAAFRoaXMgcHJlc2V0IG9mZmVycyBhIGNsZWFuIHNvdW5kLCB5b3UgbWF5IGxpa2UgdG8gdXNlIGl0IGZvciB5b3VyIGRhaWx5IHByYWN0aWNlLiBBbHNvIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgcHJlcGFyaW5nIG5ldyBwcmVzZXRzLgAAAACEAAAAEQAAAEQ0IERhaWx5IFByYWN0aWNlAAAAAIsFAABHUlVVAAAABgAAAAEDwE1UcmsAAAV1AP8CDyBQaWV0IERlIFJpZGRlcgCQKil4gCpVBpArJIMxgCsNaJAkKoIHgCQcMpA3LYEJgDdPgmaQPDGBToA8RVaQKyoFPzuBTIA/bFaQQy8qNyCBGIBDUgQ3K0orJYERkD80CCUlcoA/Wz0lTVKQQisIJiKBOoBCSoEskDkhghSAOUqBICYbNJA+MINMLUKBIoAtSoJCkDI9gVeAMjtCkCsyQoA+bIMlkDItghwvPCCAK2kKMi19L09FkDpPCjVKgVWAOmMbkDs+CYA1IoImO0AEkDw4gSuAPGlHkEFBFDI5gSKAMmZYkDhQgk0kSoJXgDhggSaQNz4GP083gEFFgxYkCSiQMEGBcoA3QB6QK0EqgDA2Zz9dfJAwOFKAKwUcMFKBAJAkUIEggCRjbZA8RYFwgDxmB5A/MYIJQVkGgD9yFJAwQoFggEFveTAFfpBCZoE5gEJSLpBDVFIwLXeAQ2k6kERPgR6AME81RGk5kEVGBCYxhBIwLiiAJm+BaZBDVS+ARVuCQjA0YZBEWgyAQ00AkC1BBTA2gR2AMF0ARGxVkEVeEjAdgRaAMGAtRWktkEZbCSo3UIAtNBxGYzQqYFSQR0wNKzGBeIBHLQmQQSCBcIBBWx2QQiqBSIBCWwkrGUyQQ1UIMkaBMYAyYCVDbIF2kEttgQyAS2OCZZAvPQ1KXoEzgEpFWy9pBpBIPAQwOYFugEhpMDA9gTaQJC+BQ4AkJ2eQQ2OBSIBDRYIpkEJVCjBVcoBCZoEEkENFaoAwIYEEkCstEkZFIYBDY4EmRmkCK0U3kChKBUhbggmASGMZkEZCHYAoSoELRjiCPpA0TQA6RwBATzkiNIFZgDpsWjRsRUBsPSIyGJAoRoF7LlBPgChsgSOQPV+BNIA9WwkuZkWQPkULKUWBYYA+YCSQPC6BV4A8VYFkKUdIkDhLHDA2gx+AOGwhkDdZgRqAMGkyN1sukDVQCyxUgSyALFgvNWANkDdGEDA9gU+AN2AIMEookCZPAjhFgS+AOG9XkDkvggQ8LCCAORxJJlWBJ5A/SwiAPGkPkDBQgSuAMEUukEJgEjAJD4A/aWxCbzswSjqQRWgtMBJjgEVsEjBmV5BEViYqRoFYQ1AzgERNIENjHypmgQWQQkoTK0KBHoBCaVCQQzmBNYBDYEaQRE9/gERpRitYTpBFaAYvU4F/gEVsSC82gRmQMloARmeBO4BGbCuQR0w8gDIYgUKQL0qBL4AvXQRHYz2QSFsHMGaBX4BIbA0wWxKQS28bM2hQgEtsgQczW4FSkEhVADBkgQGASGBlMEIokENpEStMgSCAQ2A7K2ZQkCc4BD9FgTeAJz0NP2aBNZBDVgAra4EggENjbpAnSwI/PBWAK1V9P0ceJ2ZOkCZNAj48gTOAPi07kCo4AEJAboAmUhRCPSUqW1SQRWQTLVUALxSBB4BFaUYvbBQtZoF/kCxqBERqgUOARGktLGmBXJAqYQdCZ4ExgEJsISpvM5ArWgJDVoExgCtvE0NmghqQRmEEQV8EK1g5R18agEZyc0FmPStVH0dggVOQMmcJSmoCQWmCD4BBJ0gyQhVKY4QbkDA6gXAzPiWAMACBcJA3K4EcgDcALzMAHZA8U4F/gDwACpA/U4FsQ1IQgD8AgUJDAB6QSEqBEYBIAHqQSzuCHIBLAAOQT1CBVIBPAIJPkFBjCCtcB0piAjdkBFNggVCASgARUAAAUwBjNwACKwCCVZAkZwIwZAhPYgNIVwRUYxJLXwArYAVRXIELgCsAE1QABCQAC1EAJ0sAMTAAEU8AgQ0kQAArQAAwQAAzQAA3QAA8QAA/QABDQABIQABKQABLQABPQABQQABRQABTQABUQAD/LwBQcnNV4RQAACoAAAACAAAAZDQAAAAACAAAAEdyYW5kIEQ0AAAAAAMAAAADAAAAAACoQQAAcEIAANhCAwAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAEAAAAAAAAA3H8iPgMAAAAKAAAAAACoQQAA6EEAABhCAAAgQgAAJEIAACxCAABgQgAAkkIAAJRCAAC2QgoAAABhpkk/CNJOPwnMaT94/Fw/WUNUPzMOYD8dCIA/jz6zP48+sz+PPrM/AAAAAAAAtkIAAAAAAwAAAAEAAAAAAHBCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAACgwAAAoEAAAAAAAwAAAAIAAAAAAKhBAADYQgIAAAAAAAAAAAAAAAAAAAADAAAAAgAAAAAAqEEAANhCAgAAAAAAgD8AAIA/AAAAAIAAAAAAAAAA0gQAAAAAgD8DAAAAAQAAAAAAcEIBAAAAAAAAAAAAAAADAAAAaQAAAAAAEEEAACBBAAAwQQAAQEEAAFBBAABgQQAAcEEAAIBBAACIQQAAkEEAAJhBAACgQQAAqEEAALBBAAC4QQAAwEEAAMhBAADQQQAA2EEAAOBBAADoQQAA8EEAAPhBAAAAQgAABEIAAAhCAAAMQgAAEEIAABRCAAAYQgAAHEIAACBCAAAkQgAAKEIAACxCAAAwQgAANEIAADhCAAA8QgAAQEIAAERCAABIQgAATEIAAFBCAABUQgAAWEIAAFxCAABgQgAAZEIAAGhCAABsQgAAcEIAAHRCAAB4QgAAfEIAAIBCAACCQgAAhEIAAIZCAACIQgAAikIAAIxCAACOQgAAkEIAAJJCAACUQgAAlkIAAJhCAACaQgAAnEIAAJ5CAACgQgAAokIAAKRCAACmQgAAqEIAAKpCAACsQgAArkIAALBCAACyQgAAtEIAALZCAAC4QgAAukIAALxCAAC+QgAAwEIAAMJCAADEQgAAxkIAAMhCAADKQgAAzEIAAM5CAADQQgAA0kIAANRCAADWQgAA2EIAANpCAADcQgAA3kIAAOBCAADiQmkAAAAAAADAAACAvwAAQMAAAEDAAABAQAAAAEAAAMBAAACAPwAAgD8AAMBAAABAQAAAgEAAAADAAABAwAAAgEAAAIBAAACgQAAAwEAAAIBAAAAAgAAAgD8AAADAAACAPwAAQMAAAEDAAABAQAAAgEAAAKBAAACgQAAAQMAAAKBAAAAAgAAAAEAAAEDAAACgQAAAoEAAAEBAAACAQAAAAEAAAADAAACAPwAAgEAAAABAAACgQAAAQEAAAEDAAAAAgAAAgEAAAEDAAAAAgAAAgD8AAIC/AABAwAAAoEAAAEDAAAAAwAAAAIAAAACAAACgQAAAQMAAAADAAACAvwAAQMAAAEDAAACgQAAAAMAAAEDAAABAwAAAgEAAAIA/AABAwAAAgEAAAAAAAACAQAAAgL8AAABAAACgQAAAQMAAAIC/AAAAwAAAwEAAAKBAAABAwAAAQMAAAADAAACAPwAAQMAAAEDAAACAvwAAgL8AAMBAAACAQAAAQMAAAAAAAAAAAAAAgD8AAEDAAAAAwAAAwEAAAEDAAADAQAAAQMAAAEDAAABAwAAAAEAAAAAAAwAAAAIAAAAAAKhBAADYQgIAAAAAAIA/AACAPwAAAAAAANxDAAAAAAEAAAAAAAAABwAAAERlZmF1bHQMAAAAAADIQgAASEMAAJZDAADIQwAA+kMAABZEAAAvRAAASEQAAGFEAAB6RACAiUQAAJZEAQAAAAAA3EM8AAAARQAAAAAAAAAAAAAABwAAAERlZmF1bHQDAAAABAAAAAAAwEEAABBCAABAQgAA2EIEAAAAAACgwAAAgL8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgD8AAIA/AwAAAAIAAAAAAKhBAADYQgIAAAAAAIA/AACAPwAAAAADAAAAAgAAAAAAqEEAANhCAgAAAAAAgD8AAIA/AAAAAAAAAAADAAAAAQAAAAAAcEIBAAAAAAAAAAAAAAAAAIA/AwAAAAEAAAAAAHBCAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAzczMvc3MzD0BAAAAAAAAAAAAAAAAAAC/AAAAPwAAgD8DAAAAAwAAAAAAqEEAAHBCAADYQgMAAAAAAIA/AACAPwAAgD8AAAAAAAAAAAMAAAACAAAAAACoQQAA2EICAAAAAAAAAAAAAAAAAAAAAACAPwMAAAACAAAAAACoQQAA2EICAAAAAACAPwAAgD8AAAAAAAAgQgMAAAAHAAAAAACoQQAAkEIAAKhCAAC0QgAAwEIAAMhCAADYQgcAAAAAAAAAAAAAAAAAQEAAAMBAAAAQQQAAIEEAADBBAAAAAAAAgD8DAAAAAwAAAAAAqEEAAHBCAADYQgMAAAAAAIA/AACAPwAAgD8AAAAAAwAAAAAAAAABAAAAAAAAAAAAAAABAAAAAwAAAAIAAAAAAAAAAACAPwIAAAAAAAAAAACAPwAAAAADAAAAAgAAAAAAAAAAAIA/AgAAAAAAgD8AAIA/AAAAAAMAAAAEAAAAAAAAACaTST7+fj8/AACAPwQAAAAAAAAAAAAAAAAAgD8AAIA/AAAAAAMAAAACAAAAAAAAAAAAgD8CAAAAAAAAAAAAAAAAAAAAzcwsQAMAAAACAAAAAACoQQAA2EICAAAAAACAPwAAgD8AAAAAAACAvwAAAD8DAAAAAgAAAAAAwEEAAMBCAgAAAAAAgD8AAIA/AAAAAAEAAAABAAAAAQAAAAoAAABTbWFsbCBIYWxsCwAAAG1lZGl1bWhhbGwxAAAAAAAAoEEAAIA/ZmZmPwAAAABCYGU9AAAAAAAAAAAAAAAAAACqQwAAgD8AAIA/BQAAAAAAgD8AAIA/AwAAAF0AAAAAAKhBAACwQQAAuEEAAMBBAADIQQAA0EEAANhBAADgQQAA6EEAAPBBAAD4QQAAAEIAAARCAAAIQgAADEIAABBCAAAUQgAAGEIAABxCAAAgQgAAJEIAAChCAAAsQgAAMEIAADRCAAA4QgAAPEIAAEBCAABEQgAASEIAAExCAABQQgAAVEIAAFhCAABcQgAAYEIAAGRCAABoQgAAbEIAAHBCAAB0QgAAeEIAAHxCAACAQgAAgkIAAIRCAACGQgAAiEIAAIpCAACMQgAAjkIAAJBCAACSQgAAlEIAAJZCAACYQgAAmkIAAJxCAACeQgAAoEIAAKJCAACkQgAApkIAAKhCAACqQgAArEIAAK5CAACwQgAAskIAALRCAAC2QgAAuEIAALpCAAC8QgAAvkIAAMBCAADCQgAAxEIAAMZCAADIQgAAykIAAMxCAADOQgAA0EIAANJCAADUQgAA1kIAANhCAADaQgAA3EIAAN5CAADgQgAA4kJdAAAAAACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD9xPYo/heuRP/YonD/sUZg/j8KVP3E9ij+amZk/j8KVP3sUjj+PwpU/mpmZP7gepT/NzIw/CtejP1K4nj+amZk/16OQP9ejkD+4HqU/KVyPP+F6lD89Cpc/exSOP4/ClT9I4Zo/exSuP65HoT8AAIA/KVyPP1K4nj8AAIA/4XqUP1yPoj/sUZg/XI+iPx+Fqz+kcJ0/MzOzP3sUrj+uR6E/SOGaP3E9ij9cj6I/w/WIP+xRmD/NzIw/FK6HPx+Fiz/sUZg/UrieP3sUjj+uR6E/KVyPP5qZmT9cj6I/CtejP2Zmpj+kcJ0/MzOTP4/CtT9SuJ4/mpmZP5qZuT+4HqU/AACgP83MrD+ambk/pHCdP0jhmj/NzKw/PQqXPylcjz/D9ag/PQqXP6RwnT+amZk/cT2qP0jhmj9SuJ4/UrieP0jhmj97FK4/4XqUP/YonD+kcJ0/AAAAAAMAAAADAAAAAACoQQAAcEIAANhCAwAAAAAAgD8AAIA/AACAPwAAAAAAAAAAAwAAAF0AAAAAAKhBAACwQQAAuEEAAMBBAADIQQAA0EEAANhBAADgQQAA6EEAAPBBAAD4QQAAAEIAAARCAAAIQgAADEIAABBCAAAUQgAAGEIAABxCAAAgQgAAJEIAAChCAAAsQgAAMEIAADRCAAA4QgAAPEIAAEBCAABEQgAASEIAAExCAABQQgAAVEIAAFhCAABcQgAAYEIAAGRCAABoQgAAbEIAAHBCAAB0QgAAeEIAAHxCAACAQgAAgkIAAIRCAACGQgAAiEIAAIpCAACMQgAAjkIAAJBCAACSQgAAlEIAAJZCAACYQgAAmkIAAJxCAACeQgAAoEIAAKJCAACkQgAApkIAAKhCAACqQgAArEIAAK5CAACwQgAAskIAALRCAAC2QgAAuEIAALpCAAC8QgAAvkIAAMBCAADCQgAAxEIAAMZCAADIQgAAykIAAMxCAADOQgAA0EIAANJCAADUQgAA1kIAANhCAADaQgAA3EIAAN5CAADgQgAA4kJdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxmuW8SOFIvRdVB71AGWE80EJ4vV/YST2wNkm93jniudhVqr0uuGu9OCETOtdjgLwW24S9RFIFPaiJjzyCl7C67ryqPZLitb218bo92mxJPUMvoT3kFqu7vQhvvQR/oL3X3K292xWdPYeDQz28BZW9MjXGPNl7sb1R4a68jIzyPHT/wT1b5ja7ZmKPuhApuj3cZ7M9IC6aPaW0Er3O34W8jcm2PFJHqDxKNLo9cuRnvbkagD3/Na291GWdPYkdXTw2jls9rlyQvTrpXb1gYKE8fIdGPRFnCj2OWQM9G/zWO8bUsbxXGHs9ARhlvR18wjwzmiS9TzBSvUlvOr33Tk49bNO2Pcm2J70VS6U9PV6dPUUter0+pHg9leXfvB3hl7wlwYw9fkrZOWb3xz1aWSE9lUvOPAMPnL3ammu9bMGSPSgz8Dwlv7O97aNfPUb8jj2w+UC9AAAAAAMAAAAAAIA/AACAPwAAgD8DAAAAAwAAAAAAqEEAAHBCAADYQgMAAAAAAIA/AACAPwAAgD8AAAAAAwAAAAMAAAAAAKhBAABwQgAA2EIDAAAAAACAPwAAgD8AAIA/AAAAAAMAAAADAAAAAACoQQAAcEIAANhCAwAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwYAAAAAAIA/mpmZPs3MTD/NzMw/mpmZPggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAADAAAAAACoQQAAcEIAANhCAwAAAAAAgD8AAIA/AACAPwAAAAADAAAAAwAAAAAAqEEAAHBCAADYQgMAAAAAAIA/AACAPwAAgD8AAAAAAwAAAAMAAAAAAKhBAABwQgAA2EIDAAAAAACAPwAAgD8AAIA/AAAAAAMAAAADAAAAAACoQQAAcEIAANhCAwAAAAAAgD8AAIA/AACAPwAAAAABAAAAAQAAAAAAcEIDAAAAAQAAAAAAAAABAAAAAAAAAAAAAABOI9g9AwAAABYAAAAAABBBAACoQQAAwEEAAOBBAADoQQAAAEIAAAhCAAAYQgAAJEIAADBCAABAQgAATEIAAGBCAABwQgAAgEIAAIhCAACQQgAAmEIAAKBCAACoQgAAwEIAANhCFgAAAHh0JD/p5Y8/DGGSP3jylD9Ng5Q/TYOUP02DlD9Ng5Q/6oqRP02DlD9Ng5Q/6oqRP1mwjj/qipE/WbCOP1mwjj9ZsI4/54RcP+eEXD9+JEo/2kMtPzGS8j4AAAAAAQAAAAAAAAABAAAAMzMzP2Zmpj8BAAAAAQAAAAEAAABmZmY/zcyMPwEAAAAAAAAAAADwQgAAAAAOAAAAAAAAP83MzD3NzEw+AAAAPwQAAAACAAAAAwAAAAQAAAABAAAAAgAAAAcAAAABAAAAAAAAAA4AAAAQAAAAAAAAAM3MzD0AAIA/AAAAAAAAAL8AAHBCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAOAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAADgAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAAAIA/AABAwQAAAAACAAAAAwAAAAEAAAAFAAAABAAAAAEAAAADAAAAAADAPwAAoD8AAMA/AABhwxxugcAAAAAABQAAAAAAAAAAABDBAADAwgAAwMIAAMDCBQAAAAAAAACPwvU8AAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAEAAAAAQAAAAMAAAAAAMA/AABAPwAAwD8AADRCHG6BwAAAAAAFAAAAAAAQwQAAAAAAAMDCAADAwgAAwMIFAAAACtcjPaabxDoAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAQAAAAAAAAAAwAAAI/C9T89Cle/H4VrPwAAtEIAAAAAAAAAAAUAAAAAAEDBAABAwQAAcMIAAHDCAABwwgUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAABAAAAAAAAAADAAAAMzMzv1yPwj6uR2E/AAAAAAAAAAAAAAAABQAAAAAAQMEAAEDBAABwwgAAcMIAAHDCBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAEAAAAAAAAAAMAAAC4HsU/PQpXP65H4T8AAAAAAAAAAAAAAAAFAAAAAABAwQAAQMEAAHDCAABwwgAAcMIFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAMAAAAzMzM/AAAAAGZmpj8AAJBBAAAAAAAAAAAAAAAA LV2 MIDI Chord http://gareus.org/oss/lv2/midifilter#midichord Yes 1 0x1e1 1 Filter Channel channelf 0 2 Scale scale 0 3 prime c1 1 4 3rd c3 1 5 5th c5 1 6 6th c6 0 7 7th c7 1 8 octave c8 1 9 9th c9 0 10 11th c11 0 11 13th c13 0 12 bass _8 0 http://kxstudio.sf.net/ns/carla/property CarlaSkinIsCompacted true INTERNAL Carla-Rack (no midi out) Yes 1 0x3e0 http://kxstudio.sf.net/ns/carla/chunk State <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE CARLA-PROJECT> <CARLA-PROJECT VERSION='2.0'> <EngineSettings> <ForceStereo>false</ForceStereo> <PreferPluginBridges>false</PreferPluginBridges> <PreferUiBridges>true</PreferUiBridges> <UIsAlwaysOnTop>false</UIsAlwaysOnTop> <MaxParameters>200</MaxParameters> <UIBridgesTimeout>4000</UIBridgesTimeout> <LADSPA_PATH>/home/falktx/.ladspa:/usr/lib/ladspa:/usr/local/lib/ladspa</LADSPA_PATH> <DSSI_PATH>/home/falktx/.dssi:/usr/lib/dssi:/usr/local/lib/dssi</DSSI_PATH> <LV2_PATH>/home/falktx/.lv2:/usr/lib/lv2:/usr/local/lib/lv2</LV2_PATH> <VST2_PATH>/home/falktx/.vst:/usr/lib/vst:/usr/local/lib/vst</VST2_PATH> <GIG_PATH>/home/falktx/.sounds/gig:/usr/share/sounds/gig</GIG_PATH> <SF2_PATH>/home/falktx/.sounds/sf2:/home/falktx/Personal/Muzyks/Kits/SoundFonts:/usr/share/sounds/sf2</SF2_PATH> <SFZ_PATH>/home/falktx/.sounds/sfz:/home/falktx/Personal/Muzyks/Kits/SFZ:/usr/share/sounds/sfz</SFZ_PATH> </EngineSettings> <!-- QMidiArp Arp --> <Plugin> <Info> <Type>LV2</Type> <Name>QMidiArp Arp</Name> <URI>https://git.code.sf.net/p/qmidiarp/arp</URI> </Info> <Data> <Active>Yes</Active> <ControlChannel>1</ControlChannel> <Options>0x1e1</Options> <Parameter> <Index>0</Index> <Name>Attack</Name> <Symbol>ATTACK</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>1</Index> <Name>Release</Name> <Symbol>RELEASE</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>2</Index> <Name>Random Tick</Name> <Symbol>RANDOM_TICK</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>3</Index> <Name>Random Length</Name> <Symbol>RANDOM_LEN</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>4</Index> <Name>Random Velocity</Name> <Symbol>RANDOM_VEL</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>5</Index> <Name>Output Channel</Name> <Symbol>CH_OUT</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>6</Index> <Name>Input Channel</Name> <Symbol>CH_IN</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>8</Index> <Name>Restart</Name> <Symbol>ENABLE_RESTARTBYKBD</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>9</Index> <Name>Trigger</Name> <Symbol>ENABLE_TRIGBYKBD</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>10</Index> <Name>Mute Output</Name> <Symbol>MUTE</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>11</Index> <Name>Latch mode</Name> <Symbol>LATCH_MODE</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>12</Index> <Name>Octave Mode</Name> <Symbol>OCTAVE_MODE</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>13</Index> <Name>Low octave limit</Name> <Symbol>OCTAVE_LOW</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>14</Index> <Name>High octave limit</Name> <Symbol>OCTAVE_HIGH</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>15</Index> <Name>Index In 1</Name> <Symbol>INDEX_IN1</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>16</Index> <Name>Index In 2</Name> <Symbol>INDEX_IN2</Symbol> <Value>127</Value> </Parameter> <Parameter> <Index>17</Index> <Name>Range In 1</Name> <Symbol>RANGE_IN1</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>18</Index> <Name>Range In 2</Name> <Symbol>RANGE_IN2</Symbol> <Value>127</Value> </Parameter> <Parameter> <Index>19</Index> <Name>Trigger Legato</Name> <Symbol>ENABLE_TRIGLEGATO</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>20</Index> <Name>Repeat Mode</Name> <Symbol>REPEAT_MODE</Symbol> <Value>1</Value> </Parameter> <Parameter> <Index>22</Index> <Name>Defer mute</Name> <Symbol>DEFER</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>23</Index> <Name>Pattern Preset</Name> <Symbol>PATTERN_PRESET</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>24</Index> <Name>Transport Mode</Name> <Symbol>TRANSPORT_MODE</Symbol> <Value>1</Value> </Parameter> <Parameter> <Index>25</Index> <Name>Internal Tempo</Name> <Symbol>TEMPO</Symbol> <Value>120</Value> </Parameter> <CustomData> <Type>http://lv2plug.in/ns/ext/atom#String</Type> <Key>https://git.code.sf.net/p/qmidiarp#ARPPATTERN</Key> <Value>&gt;0</Value> </CustomData> </Data> </Plugin> <Plugin> <Info> <Type>SFZ</Type> <Name>concert_harp</Name> <Filename>/home/falktx/Personal/Muzyks/Kits/SFZ/Sonatina Symphonic Orchestra/concert_harp.sfz</Filename> </Info> <Data> <Active>Yes</Active> <ControlChannel>1</ControlChannel> <Options>0x1f0</Options> <CurrentProgramIndex>1</CurrentProgramIndex> <CurrentProgramName>concert_harp</CurrentProgramName> </Data> </Plugin> </CARLA-PROJECT> http://kxstudio.sf.net/ns/carla/property CarlaSkinIsCompacted true INTERNAL arp xylo + 3d delay Yes 1 0x3e0 http://kxstudio.sf.net/ns/carla/chunk State <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE CARLA-PROJECT> <CARLA-PROJECT VERSION='2.0'> <EngineSettings> <ForceStereo>false</ForceStereo> <PreferPluginBridges>false</PreferPluginBridges> <PreferUiBridges>true</PreferUiBridges> <UIsAlwaysOnTop>false</UIsAlwaysOnTop> <MaxParameters>200</MaxParameters> <UIBridgesTimeout>4000</UIBridgesTimeout> <LADSPA_PATH>/home/falktx/.ladspa:/usr/lib/ladspa:/usr/local/lib/ladspa</LADSPA_PATH> <DSSI_PATH>/home/falktx/.dssi:/usr/lib/dssi:/usr/local/lib/dssi</DSSI_PATH> <LV2_PATH>/home/falktx/.lv2:/usr/lib/lv2:/usr/local/lib/lv2</LV2_PATH> <VST2_PATH>/home/falktx/.vst:/usr/lib/vst:/usr/local/lib/vst</VST2_PATH> <GIG_PATH>/home/falktx/.sounds/gig:/usr/share/sounds/gig</GIG_PATH> <SF2_PATH>/home/falktx/.sounds/sf2:/home/falktx/Personal/Muzyks/Kits/SoundFonts:/usr/share/sounds/sf2</SF2_PATH> <SFZ_PATH>/home/falktx/.sounds/sfz:/home/falktx/Personal/Muzyks/Kits/SFZ:/usr/share/sounds/sfz</SFZ_PATH> </EngineSettings> <!-- QMidiArp Arp --> <Plugin> <Info> <Type>LV2</Type> <Name>QMidiArp Arp</Name> <URI>https://git.code.sf.net/p/qmidiarp/arp</URI> </Info> <Data> <Active>Yes</Active> <ControlChannel>1</ControlChannel> <Options>0x1e1</Options> <Parameter> <Index>0</Index> <Name>Attack</Name> <Symbol>ATTACK</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>1</Index> <Name>Release</Name> <Symbol>RELEASE</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>2</Index> <Name>Random Tick</Name> <Symbol>RANDOM_TICK</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>3</Index> <Name>Random Length</Name> <Symbol>RANDOM_LEN</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>4</Index> <Name>Random Velocity</Name> <Symbol>RANDOM_VEL</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>5</Index> <Name>Output Channel</Name> <Symbol>CH_OUT</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>6</Index> <Name>Input Channel</Name> <Symbol>CH_IN</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>8</Index> <Name>Restart</Name> <Symbol>ENABLE_RESTARTBYKBD</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>9</Index> <Name>Trigger</Name> <Symbol>ENABLE_TRIGBYKBD</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>10</Index> <Name>Mute Output</Name> <Symbol>MUTE</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>11</Index> <Name>Latch mode</Name> <Symbol>LATCH_MODE</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>12</Index> <Name>Octave Mode</Name> <Symbol>OCTAVE_MODE</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>13</Index> <Name>Low octave limit</Name> <Symbol>OCTAVE_LOW</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>14</Index> <Name>High octave limit</Name> <Symbol>OCTAVE_HIGH</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>15</Index> <Name>Index In 1</Name> <Symbol>INDEX_IN1</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>16</Index> <Name>Index In 2</Name> <Symbol>INDEX_IN2</Symbol> <Value>127</Value> </Parameter> <Parameter> <Index>17</Index> <Name>Range In 1</Name> <Symbol>RANGE_IN1</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>18</Index> <Name>Range In 2</Name> <Symbol>RANGE_IN2</Symbol> <Value>127</Value> </Parameter> <Parameter> <Index>19</Index> <Name>Trigger Legato</Name> <Symbol>ENABLE_TRIGLEGATO</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>20</Index> <Name>Repeat Mode</Name> <Symbol>REPEAT_MODE</Symbol> <Value>1</Value> </Parameter> <Parameter> <Index>22</Index> <Name>Defer mute</Name> <Symbol>DEFER</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>23</Index> <Name>Pattern Preset</Name> <Symbol>PATTERN_PRESET</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>24</Index> <Name>Transport Mode</Name> <Symbol>TRANSPORT_MODE</Symbol> <Value>1</Value> </Parameter> <Parameter> <Index>25</Index> <Name>Internal Tempo</Name> <Symbol>TEMPO</Symbol> <Value>120</Value> </Parameter> <CustomData> <Type>http://lv2plug.in/ns/ext/atom#String</Type> <Key>https://git.code.sf.net/p/qmidiarp#ARPPATTERN</Key> <Value>0</Value> </CustomData> </Data> </Plugin> <Plugin> <Info> <Type>SFZ</Type> <Name>percussion_-_xylophone</Name> <Filename>/home/falktx/Personal/Muzyks/Kits/SFZ/Sonatina Symphonic Orchestra/percussion_-_xylophone.sfz</Filename> </Info> <Data> <Active>Yes</Active> <ControlChannel>1</ControlChannel> <Options>0x1f0</Options> <CurrentProgramIndex>1</CurrentProgramIndex> <CurrentProgramName>percussion_-_xylophone</CurrentProgramName> </Data> </Plugin> <!-- 3D Triple Delay (Stereo) --> <Plugin> <Info> <Type>LV2</Type> <Name>3D Triple Delay (Stereo)</Name> <URI>http://harrisonconsoles.com/lv2/har_delay/stereo</URI> </Info> <Data> <Active>Yes</Active> <ControlChannel>1</ControlChannel> <Options>0x0</Options> <Parameter> <Index>0</Index> <Name>Wet Mix</Name> <Symbol>mix</Symbol> <Value>100</Value> </Parameter> <Parameter> <Index>1</Index> <Name>Output Trim</Name> <Symbol>out_trim</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>2</Index> <Name>Input High Cut</Name> <Symbol>hicut</Symbol> <Value>18000</Value> </Parameter> <Parameter> <Index>3</Index> <Name>Input Low Cut</Name> <Symbol>locut</Symbol> <Value>100</Value> </Parameter> <Parameter> <Index>4</Index> <Name>Left Input</Name> <Symbol>inputlev_l</Symbol> <Value>-2.79999995231628</Value> </Parameter> <Parameter> <Index>5</Index> <Name>Left Output</Name> <Symbol>level_l</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>6</Index> <Name>Left Pan</Name> <Symbol>pan_l</Symbol> <Value>-90</Value> </Parameter> <Parameter> <Index>7</Index> <Name>Left Delay (16ths)</Name> <Symbol>delay_16_l</Symbol> <Value>2</Value> </Parameter> <Parameter> <Index>8</Index> <Name>Left Delay (fine)</Name> <Symbol>delay_fine_l</Symbol> <Value>11</Value> </Parameter> <Parameter> <Index>9</Index> <Name>Center Input</Name> <Symbol>inputlev_c</Symbol> <Value>-70</Value> </Parameter> <Parameter> <Index>10</Index> <Name>Center Output</Name> <Symbol>level_c</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>11</Index> <Name>Center Pan</Name> <Symbol>pan_c</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>12</Index> <Name>Center Delay (16ths)</Name> <Symbol>delay_16_c</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>13</Index> <Name>Center Delay (fine)</Name> <Symbol>delay_fine_c</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>14</Index> <Name>Right Input</Name> <Symbol>inputlev_r</Symbol> <Value>-70</Value> </Parameter> <Parameter> <Index>15</Index> <Name>Right Output</Name> <Symbol>level_r</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>16</Index> <Name>Right Pan</Name> <Symbol>pan_r</Symbol> <Value>90</Value> </Parameter> <Parameter> <Index>17</Index> <Name>Right Delay (16ths)</Name> <Symbol>delay_16_r</Symbol> <Value>2</Value> </Parameter> <Parameter> <Index>18</Index> <Name>Right Delay (fine)</Name> <Symbol>delay_fine_r</Symbol> <Value>7</Value> </Parameter> <Parameter> <Index>19</Index> <Name>Linear Feedback</Name> <Symbol>linear_feedback</Symbol> <Value>-17.2999992370605</Value> </Parameter> <Parameter> <Index>20</Index> <Name>Linear Damping</Name> <Symbol>linear_damping</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>21</Index> <Name>Feedback: LR-C-LR</Name> <Symbol>feedback_lrc</Symbol> <Value>-0.0399999991059303</Value> </Parameter> <Parameter> <Index>22</Index> <Name>Feedback: L-R</Name> <Symbol>feedback_lr</Symbol> <Value>5</Value> </Parameter> <Parameter> <Index>23</Index> <Name>Feedback Override</Name> <Symbol>feedback_all</Symbol> <Value>0.899999976158142</Value> </Parameter> <Parameter> <Index>24</Index> <Name>Modulation</Name> <Symbol>modulation</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>25</Index> <Name>BPM (User)</Name> <Symbol>bpm</Symbol> <Value>59.4000015258789</Value> </Parameter> <Parameter> <Index>26</Index> <Name>BPM Sync</Name> <Symbol>bpm_sync</Symbol> <Value>1</Value> </Parameter> <Parameter> <Index>27</Index> <Name>Snap</Name> <Symbol>snap</Symbol> <Value>1</Value> </Parameter> <Parameter> <Index>31</Index> <Name>Oversample</Name> <Symbol>oversample</Symbol> <Value>1</Value> </Parameter> </Data> </Plugin> </CARLA-PROJECT> http://kxstudio.sf.net/ns/carla/property CarlaSkinIsCompacted true LV2 MIDI Strum http://gareus.org/oss/lv2/midifilter#midistrum Yes 1 0x1e1 1 BPM source bpmsrc 1 2 BPM bpm 120 3 Strum Direction mode 2 4 Note Collect Timeout [ms] collect 15 5 Strum Duration in Beats duration 1.39999997615814 6 Strum Acceleration adjspeed 0 7 Velocity Change adjvelocity 0 8 Randomize Acceleration randspeed 0 9 Randomize Velocity randvelocity 0 SFZ AcousticGuitar /home/falktx/Personal/Muzyks/Kits/SFZ/AcousticGuitarFREE Samples/AcousticGuitar.sfz Yes 0.3500588 1 0x1f0 1 AcousticGuitar system:capture_1 PulseAudio JACK Source:front-left system:capture_2 PulseAudio JACK Source:front-right Carla:audio-out1 system:playback_1 Carla:audio-out2 system:playback_2 Carla-2.4.2/data/presentation/lac2018/projects/3_2.carxp000066400000000000000000003151241420416754300225260ustar00rootroot00000000000000 false false true false 200 4000 INTERNAL Carla-Rack Yes 1 0x3e0 http://kxstudio.sf.net/ns/carla/property CarlaSkinIsCompacted false http://kxstudio.sf.net/ns/carla/chunk State <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE CARLA-PROJECT> <CARLA-PROJECT VERSION='2.0'> <EngineSettings> <ForceStereo>false</ForceStereo> <PreferPluginBridges>false</PreferPluginBridges> <PreferUiBridges>true</PreferUiBridges> <UIsAlwaysOnTop>false</UIsAlwaysOnTop> <MaxParameters>200</MaxParameters> <UIBridgesTimeout>4000</UIBridgesTimeout> <LADSPA_PATH>/home/falktx/.ladspa:/usr/lib/ladspa:/usr/local/lib/ladspa</LADSPA_PATH> <DSSI_PATH>/home/falktx/.dssi:/usr/lib/dssi:/usr/local/lib/dssi</DSSI_PATH> <LV2_PATH>/home/falktx/.lv2:/usr/lib/lv2:/usr/local/lib/lv2</LV2_PATH> <VST2_PATH>/home/falktx/.vst:/home/falktx/.wineflstudio/drive_c/Program Files (x86)/VstPlugins/:/usr/lib/vst:/usr/local/lib/vst</VST2_PATH> <GIG_PATH>/home/falktx/.sounds/gig:/usr/share/sounds/gig</GIG_PATH> <SF2_PATH>/home/falktx/.sounds/sf2:/home/falktx/Personal/Muzyks/Kits/SoundFonts:/usr/share/sounds/sf2</SF2_PATH> <SFZ_PATH>/home/falktx/.sounds/sfz:/home/falktx/Personal/Muzyks/Kits/SFZ:/usr/share/sounds/sfz</SFZ_PATH> </EngineSettings> <!-- MIDI Step Sequencer8x8 --> <Plugin> <Info> <Type>LV2</Type> <Name>MIDI Step Sequencer8x8</Name> <URI>http://gareus.org/oss/lv2/stepseq#s8n8</URI> </Info> <Data> <Active>Yes</Active> <ControlChannel>1</ControlChannel> <Options>0x1</Options> <Parameter> <Index>0</Index> <Name>Sync</Name> <Symbol>sync</Symbol> <Value>1</Value> </Parameter> <Parameter> <Index>1</Index> <Name>BPM</Name> <Symbol>bpm</Symbol> <Value>120</Value> </Parameter> <Parameter> <Index>2</Index> <Name>Step Duration (4/4)</Name> <Symbol>div</Symbol> <Value>7</Value> </Parameter> <Parameter> <Index>3</Index> <Name>Swing</Name> <Symbol>swing</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>4</Index> <Name>Drum Mode</Name> <Symbol>drummode</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>5</Index> <Name>Midi Channel</Name> <Symbol>chn</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>6</Index> <Name>MIDI Panic</Name> <Symbol>panic</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>9</Index> <Name>Note 1</Name> <Symbol>note1</Symbol> <Value>69</Value> </Parameter> <Parameter> <Index>10</Index> <Name>Note 2</Name> <Symbol>note2</Symbol> <Value>67</Value> </Parameter> <Parameter> <Index>11</Index> <Name>Note 3</Name> <Symbol>note3</Symbol> <Value>65</Value> </Parameter> <Parameter> <Index>12</Index> <Name>Note 4</Name> <Symbol>note4</Symbol> <Value>64</Value> </Parameter> <Parameter> <Index>13</Index> <Name>Note 5</Name> <Symbol>note5</Symbol> <Value>62</Value> </Parameter> <Parameter> <Index>14</Index> <Name>Note 6</Name> <Symbol>note6</Symbol> <Value>60</Value> </Parameter> <Parameter> <Index>15</Index> <Name>Note 7</Name> <Symbol>note7</Symbol> <Value>59</Value> </Parameter> <Parameter> <Index>16</Index> <Name>Note 8</Name> <Symbol>note8</Symbol> <Value>57</Value> </Parameter> <Parameter> <Index>17</Index> <Name>Grid S: 1 N: 1</Name> <Symbol>grid_1_1</Symbol> <Value>127</Value> </Parameter> <Parameter> <Index>18</Index> <Name>Grid S: 2 N: 1</Name> <Symbol>grid_2_1</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>19</Index> <Name>Grid S: 3 N: 1</Name> <Symbol>grid_3_1</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>20</Index> <Name>Grid S: 4 N: 1</Name> <Symbol>grid_4_1</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>21</Index> <Name>Grid S: 5 N: 1</Name> <Symbol>grid_5_1</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>22</Index> <Name>Grid S: 6 N: 1</Name> <Symbol>grid_6_1</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>23</Index> <Name>Grid S: 7 N: 1</Name> <Symbol>grid_7_1</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>24</Index> <Name>Grid S: 8 N: 1</Name> <Symbol>grid_8_1</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>25</Index> <Name>Grid S: 1 N: 2</Name> <Symbol>grid_1_2</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>26</Index> <Name>Grid S: 2 N: 2</Name> <Symbol>grid_2_2</Symbol> <Value>127</Value> </Parameter> <Parameter> <Index>27</Index> <Name>Grid S: 3 N: 2</Name> <Symbol>grid_3_2</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>28</Index> <Name>Grid S: 4 N: 2</Name> <Symbol>grid_4_2</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>29</Index> <Name>Grid S: 5 N: 2</Name> <Symbol>grid_5_2</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>30</Index> <Name>Grid S: 6 N: 2</Name> <Symbol>grid_6_2</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>31</Index> <Name>Grid S: 7 N: 2</Name> <Symbol>grid_7_2</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>32</Index> <Name>Grid S: 8 N: 2</Name> <Symbol>grid_8_2</Symbol> <Value>127</Value> </Parameter> <Parameter> <Index>33</Index> <Name>Grid S: 1 N: 3</Name> <Symbol>grid_1_3</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>34</Index> <Name>Grid S: 2 N: 3</Name> <Symbol>grid_2_3</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>35</Index> <Name>Grid S: 3 N: 3</Name> <Symbol>grid_3_3</Symbol> <Value>127</Value> </Parameter> <Parameter> <Index>36</Index> <Name>Grid S: 4 N: 3</Name> <Symbol>grid_4_3</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>37</Index> <Name>Grid S: 5 N: 3</Name> <Symbol>grid_5_3</Symbol> <Value>127</Value> </Parameter> <Parameter> <Index>38</Index> <Name>Grid S: 6 N: 3</Name> <Symbol>grid_6_3</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>39</Index> <Name>Grid S: 7 N: 3</Name> <Symbol>grid_7_3</Symbol> <Value>127</Value> </Parameter> <Parameter> <Index>40</Index> <Name>Grid S: 8 N: 3</Name> <Symbol>grid_8_3</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>41</Index> <Name>Grid S: 1 N: 4</Name> <Symbol>grid_1_4</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>42</Index> <Name>Grid S: 2 N: 4</Name> <Symbol>grid_2_4</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>43</Index> <Name>Grid S: 3 N: 4</Name> <Symbol>grid_3_4</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>44</Index> <Name>Grid S: 4 N: 4</Name> <Symbol>grid_4_4</Symbol> <Value>127</Value> </Parameter> <Parameter> <Index>45</Index> <Name>Grid S: 5 N: 4</Name> <Symbol>grid_5_4</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>46</Index> <Name>Grid S: 6 N: 4</Name> <Symbol>grid_6_4</Symbol> <Value>127</Value> </Parameter> <Parameter> <Index>47</Index> <Name>Grid S: 7 N: 4</Name> <Symbol>grid_7_4</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>48</Index> <Name>Grid S: 8 N: 4</Name> <Symbol>grid_8_4</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>49</Index> <Name>Grid S: 1 N: 5</Name> <Symbol>grid_1_5</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>50</Index> <Name>Grid S: 2 N: 5</Name> <Symbol>grid_2_5</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>51</Index> <Name>Grid S: 3 N: 5</Name> <Symbol>grid_3_5</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>52</Index> <Name>Grid S: 4 N: 5</Name> <Symbol>grid_4_5</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>53</Index> <Name>Grid S: 5 N: 5</Name> <Symbol>grid_5_5</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>54</Index> <Name>Grid S: 6 N: 5</Name> <Symbol>grid_6_5</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>55</Index> <Name>Grid S: 7 N: 5</Name> <Symbol>grid_7_5</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>56</Index> <Name>Grid S: 8 N: 5</Name> <Symbol>grid_8_5</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>57</Index> <Name>Grid S: 1 N: 6</Name> <Symbol>grid_1_6</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>58</Index> <Name>Grid S: 2 N: 6</Name> <Symbol>grid_2_6</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>59</Index> <Name>Grid S: 3 N: 6</Name> <Symbol>grid_3_6</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>60</Index> <Name>Grid S: 4 N: 6</Name> <Symbol>grid_4_6</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>61</Index> <Name>Grid S: 5 N: 6</Name> <Symbol>grid_5_6</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>62</Index> <Name>Grid S: 6 N: 6</Name> <Symbol>grid_6_6</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>63</Index> <Name>Grid S: 7 N: 6</Name> <Symbol>grid_7_6</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>64</Index> <Name>Grid S: 8 N: 6</Name> <Symbol>grid_8_6</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>65</Index> <Name>Grid S: 1 N: 7</Name> <Symbol>grid_1_7</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>66</Index> <Name>Grid S: 2 N: 7</Name> <Symbol>grid_2_7</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>67</Index> <Name>Grid S: 3 N: 7</Name> <Symbol>grid_3_7</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>68</Index> <Name>Grid S: 4 N: 7</Name> <Symbol>grid_4_7</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>69</Index> <Name>Grid S: 5 N: 7</Name> <Symbol>grid_5_7</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>70</Index> <Name>Grid S: 6 N: 7</Name> <Symbol>grid_6_7</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>71</Index> <Name>Grid S: 7 N: 7</Name> <Symbol>grid_7_7</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>72</Index> <Name>Grid S: 8 N: 7</Name> <Symbol>grid_8_7</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>73</Index> <Name>Grid S: 1 N: 8</Name> <Symbol>grid_1_8</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>74</Index> <Name>Grid S: 2 N: 8</Name> <Symbol>grid_2_8</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>75</Index> <Name>Grid S: 3 N: 8</Name> <Symbol>grid_3_8</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>76</Index> <Name>Grid S: 4 N: 8</Name> <Symbol>grid_4_8</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>77</Index> <Name>Grid S: 5 N: 8</Name> <Symbol>grid_5_8</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>78</Index> <Name>Grid S: 6 N: 8</Name> <Symbol>grid_6_8</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>79</Index> <Name>Grid S: 7 N: 8</Name> <Symbol>grid_7_8</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>80</Index> <Name>Grid S: 8 N: 8</Name> <Symbol>grid_8_8</Symbol> <Value>0</Value> </Parameter> </Data> </Plugin> <!-- Pianoteq 5 --> <Plugin> <Info> <Type>LV2</Type> <Name>Pianoteq 5</Name> <URI>http://pianoteq.com/lv2/Pianoteq5</URI> </Info> <Data> <Active>Yes</Active> <ControlChannel>1</ControlChannel> <Options>0x1e5</Options> <Parameter> <Index>0</Index> <Name>Sustain Pedal</Name> <Symbol>lv2_port_1</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>1</Index> <Name>Soft Pedal</Name> <Symbol>lv2_port_2</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>2</Index> <Name>Sostenuto Pedal</Name> <Symbol>lv2_port_3</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>3</Index> <Name>Harmonic Pedal</Name> <Symbol>lv2_port_4</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>4</Index> <Name>Pitch Bend</Name> <Symbol>lv2_port_5</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>5</Index> <Name>Volume</Name> <Symbol>lv2_port_6</Symbol> <Value>0.727272748947144</Value> </Parameter> <Parameter> <Index>6</Index> <Name>Dynamics</Name> <Symbol>lv2_port_7</Symbol> <Value>0.393939405679703</Value> </Parameter> <Parameter> <Index>7</Index> <Name>Diapason</Name> <Symbol>lv2_port_8</Symbol> <Value>0.333333343267441</Value> </Parameter> <Parameter> <Index>8</Index> <Name>Temperament</Name> <Symbol>lv2_port_9</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>9</Index> <Name>Microtonal</Name> <Symbol>lv2_port_10</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>10</Index> <Name>Octave Stretch.</Name> <Symbol>lv2_port_11</Symbol> <Value>0.231088206171989</Value> </Parameter> <Parameter> <Index>11</Index> <Name>Unison Width</Name> <Symbol>lv2_port_12</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>12</Index> <Name>Direct Sound Duration</Name> <Symbol>lv2_port_13</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>13</Index> <Name>Hard. Piano</Name> <Symbol>lv2_port_14</Symbol> <Value>0.150000005960464</Value> </Parameter> <Parameter> <Index>14</Index> <Name>Hard. Mezzo</Name> <Symbol>lv2_port_15</Symbol> <Value>0.400000005960464</Value> </Parameter> <Parameter> <Index>15</Index> <Name>Hard. Forte</Name> <Symbol>lv2_port_16</Symbol> <Value>0.800000011920929</Value> </Parameter> <Parameter> <Index>16</Index> <Name>Profile 1</Name> <Symbol>lv2_port_17</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>17</Index> <Name>Profile 2</Name> <Symbol>lv2_port_18</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>18</Index> <Name>Profile 3</Name> <Symbol>lv2_port_19</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>19</Index> <Name>Profile 4</Name> <Symbol>lv2_port_20</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>20</Index> <Name>Profile 5</Name> <Symbol>lv2_port_21</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>21</Index> <Name>Profile 6</Name> <Symbol>lv2_port_22</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>22</Index> <Name>Profile 7</Name> <Symbol>lv2_port_23</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>23</Index> <Name>Profile 8</Name> <Symbol>lv2_port_24</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>24</Index> <Name>Hammer Noise</Name> <Symbol>lv2_port_25</Symbol> <Value>0.28571429848671</Value> </Parameter> <Parameter> <Index>25</Index> <Name>Strike Point</Name> <Symbol>lv2_port_26</Symbol> <Value>0.551161646842957</Value> </Parameter> <Parameter> <Index>26</Index> <Name>Character</Name> <Symbol>lv2_port_27</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>27</Index> <Name>Pickup Symmetry</Name> <Symbol>lv2_port_28</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>28</Index> <Name>Pickup Distance</Name> <Symbol>lv2_port_29</Symbol> <Value>0.444444477558136</Value> </Parameter> <Parameter> <Index>29</Index> <Name>Soft Level</Name> <Symbol>lv2_port_30</Symbol> <Value>0.300000011920929</Value> </Parameter> <Parameter> <Index>30</Index> <Name>Impedance</Name> <Symbol>lv2_port_31</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>31</Index> <Name>Cutoff</Name> <Symbol>lv2_port_32</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>32</Index> <Name>Q Factor</Name> <Symbol>lv2_port_33</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>33</Index> <Name>String Length</Name> <Symbol>lv2_port_34</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>34</Index> <Name>Sympa</Name> <Symbol>lv2_port_35</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>35</Index> <Name>Duplex</Name> <Symbol>lv2_port_36</Symbol> <Value>0.499999970197678</Value> </Parameter> <Parameter> <Index>36</Index> <Name>Quadratic Effect</Name> <Symbol>lv2_port_37</Symbol> <Value>0.569824278354645</Value> </Parameter> <Parameter> <Index>37</Index> <Name>Bounce Switch</Name> <Symbol>lv2_port_38</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>38</Index> <Name>Bounce Delay</Name> <Symbol>lv2_port_39</Symbol> <Value>0.458333343267441</Value> </Parameter> <Parameter> <Index>39</Index> <Name>Bounce Sync</Name> <Symbol>lv2_port_40</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>40</Index> <Name>MBSyncS</Name> <Symbol>lv2_port_41</Symbol> <Value>0.56521737575531</Value> </Parameter> <Parameter> <Index>41</Index> <Name>MBVelS</Name> <Symbol>lv2_port_42</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>42</Index> <Name>MBAccel</Name> <Symbol>lv2_port_43</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>43</Index> <Name>MBVelL</Name> <Symbol>lv2_port_44</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>44</Index> <Name>MBHuma</Name> <Symbol>lv2_port_45</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>45</Index> <Name>Eff 1 Switch</Name> <Symbol>lv2_port_46</Symbol> <Value>1</Value> </Parameter> <Parameter> <Index>46</Index> <Name>Eff 1 Param 1</Name> <Symbol>lv2_port_47</Symbol> <Value>0.100000001490116</Value> </Parameter> <Parameter> <Index>47</Index> <Name>Eff 1 Param 2</Name> <Symbol>lv2_port_48</Symbol> <Value>0.22833614051342</Value> </Parameter> <Parameter> <Index>48</Index> <Name>Eff 1 Param 3</Name> <Symbol>lv2_port_49</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>49</Index> <Name>Eff 1 Param 4</Name> <Symbol>lv2_port_50</Symbol> <Value>0.25</Value> </Parameter> <Parameter> <Index>50</Index> <Name>Eff 1 Param 5</Name> <Symbol>lv2_port_51</Symbol> <Value>1</Value> </Parameter> <Parameter> <Index>51</Index> <Name>Eff 1 Param 6</Name> <Symbol>lv2_port_52</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>52</Index> <Name>Eff 1 Param 7</Name> <Symbol>lv2_port_53</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>53</Index> <Name>Eff 1 Param 8</Name> <Symbol>lv2_port_54</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>54</Index> <Name>Eff 2 Switch</Name> <Symbol>lv2_port_55</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>55</Index> <Name>Eff 2 Param 1</Name> <Symbol>lv2_port_56</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>56</Index> <Name>Eff 2 Param 2</Name> <Symbol>lv2_port_57</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>57</Index> <Name>Eff 2 Param 3</Name> <Symbol>lv2_port_58</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>58</Index> <Name>Eff 2 Param 4</Name> <Symbol>lv2_port_59</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>59</Index> <Name>Eff 2 Param 5</Name> <Symbol>lv2_port_60</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>60</Index> <Name>Eff 2 Param 6</Name> <Symbol>lv2_port_61</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>61</Index> <Name>Eff 2 Param 7</Name> <Symbol>lv2_port_62</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>62</Index> <Name>Eff 2 Param 8</Name> <Symbol>lv2_port_63</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>63</Index> <Name>Eff 3 Switch</Name> <Symbol>lv2_port_64</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>64</Index> <Name>Eff 3 Param 1</Name> <Symbol>lv2_port_65</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>65</Index> <Name>Eff 3 Param 2</Name> <Symbol>lv2_port_66</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>66</Index> <Name>Eff 3 Param 3</Name> <Symbol>lv2_port_67</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>67</Index> <Name>Eff 3 Param 4</Name> <Symbol>lv2_port_68</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>68</Index> <Name>Eff 3 Param 5</Name> <Symbol>lv2_port_69</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>69</Index> <Name>Eff 3 Param 6</Name> <Symbol>lv2_port_70</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>70</Index> <Name>Eff 3 Param 7</Name> <Symbol>lv2_port_71</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>71</Index> <Name>Eff 3 Param 8</Name> <Symbol>lv2_port_72</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>72</Index> <Name>Reverb Switch</Name> <Symbol>lv2_port_73</Symbol> <Value>1</Value> </Parameter> <Parameter> <Index>73</Index> <Name>Reverb Duration</Name> <Symbol>lv2_port_74</Symbol> <Value>0.273276418447495</Value> </Parameter> <Parameter> <Index>74</Index> <Name>Reverb Mix</Name> <Symbol>lv2_port_75</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>75</Index> <Name>Room Dimensions</Name> <Symbol>lv2_port_76</Symbol> <Value>0.333333343267441</Value> </Parameter> <Parameter> <Index>76</Index> <Name>Reverb Pre-delay</Name> <Symbol>lv2_port_77</Symbol> <Value>0.52955836057663</Value> </Parameter> <Parameter> <Index>77</Index> <Name>RevEarl</Name> <Symbol>lv2_port_78</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>78</Index> <Name>Reverb Tone</Name> <Symbol>lv2_port_79</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>79</Index> <Name>Reverb Envelope</Name> <Symbol>lv2_port_80</Symbol> <Value>1</Value> </Parameter> <Parameter> <Index>80</Index> <Name>RevRes</Name> <Symbol>lv2_port_81</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>81</Index> <Name>Limiter Switch</Name> <Symbol>lv2_port_82</Symbol> <Value>1</Value> </Parameter> <Parameter> <Index>82</Index> <Name>Limiter Sharp.</Name> <Symbol>lv2_port_83</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>83</Index> <Name>Limiter Thresh.</Name> <Symbol>lv2_port_84</Symbol> <Value>0.519999980926514</Value> </Parameter> <Parameter> <Index>84</Index> <Name>Limiter Gain</Name> <Symbol>lv2_port_85</Symbol> <Value>0.833333313465118</Value> </Parameter> <Parameter> <Index>85</Index> <Name>Damper Noise</Name> <Symbol>lv2_port_86</Symbol> <Value>0.499999970197678</Value> </Parameter> <Parameter> <Index>86</Index> <Name>Damper Position</Name> <Symbol>lv2_port_87</Symbol> <Value>0.668858230113983</Value> </Parameter> <Parameter> <Index>87</Index> <Name>Last Damper</Name> <Symbol>lv2_port_88</Symbol> <Value>0.7109375</Value> </Parameter> <Parameter> <Index>88</Index> <Name>Pedal Noise</Name> <Symbol>lv2_port_89</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>89</Index> <Name>Key Rel. Noise</Name> <Symbol>lv2_port_90</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>90</Index> <Name>Damping Duration</Name> <Symbol>lv2_port_91</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>91</Index> <Name>Lid Position</Name> <Symbol>lv2_port_92</Symbol> <Value>1</Value> </Parameter> <Parameter> <Index>92</Index> <Name>Output Mode</Name> <Symbol>lv2_port_93</Symbol> <Value>0.666666686534882</Value> </Parameter> <Parameter> <Index>93</Index> <Name>Mic Level Comp.</Name> <Symbol>lv2_port_94</Symbol> <Value>1</Value> </Parameter> <Parameter> <Index>94</Index> <Name>Mic Delay Comp.</Name> <Symbol>lv2_port_95</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>95</Index> <Name>Head X position</Name> <Symbol>lv2_port_96</Symbol> <Value>0.534999966621399</Value> </Parameter> <Parameter> <Index>96</Index> <Name>Head Y position</Name> <Symbol>lv2_port_97</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>97</Index> <Name>Head Z position</Name> <Symbol>lv2_port_98</Symbol> <Value>0.371428549289703</Value> </Parameter> <Parameter> <Index>98</Index> <Name>Head Diameter</Name> <Symbol>lv2_port_99</Symbol> <Value>0.200000002980232</Value> </Parameter> <Parameter> <Index>99</Index> <Name>Head Angle</Name> <Symbol>lv2_port_100</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>100</Index> <Name>Mic 1 Mic Switch</Name> <Symbol>lv2_port_101</Symbol> <Value>1</Value> </Parameter> <Parameter> <Index>101</Index> <Name>Mic 1 X position</Name> <Symbol>lv2_port_102</Symbol> <Value>0.574999988079071</Value> </Parameter> <Parameter> <Index>102</Index> <Name>Mic 1 Y position</Name> <Symbol>lv2_port_103</Symbol> <Value>0.604166686534882</Value> </Parameter> <Parameter> <Index>103</Index> <Name>Mic 1 Z position</Name> <Symbol>lv2_port_104</Symbol> <Value>0.428571432828903</Value> </Parameter> <Parameter> <Index>104</Index> <Name>Mic 1 Azimuth</Name> <Symbol>lv2_port_105</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>105</Index> <Name>Mic 1 Elevation</Name> <Symbol>lv2_port_106</Symbol> <Value>0.488764733076096</Value> </Parameter> <Parameter> <Index>106</Index> <Name>Mic 1 Level 1</Name> <Symbol>lv2_port_107</Symbol> <Value>0.837499976158142</Value> </Parameter> <Parameter> <Index>107</Index> <Name>Mic 1 Delay 1</Name> <Symbol>lv2_port_108</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>108</Index> <Name>Mic 1 Level 2</Name> <Symbol>lv2_port_109</Symbol> <Value>0.59375</Value> </Parameter> <Parameter> <Index>109</Index> <Name>Mic 1 Delay 2</Name> <Symbol>lv2_port_110</Symbol> <Value>0.6875</Value> </Parameter> <Parameter> <Index>110</Index> <Name>Mic 1 Level 3</Name> <Symbol>lv2_port_111</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>111</Index> <Name>Mic 1 Delay 3</Name> <Symbol>lv2_port_112</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>112</Index> <Name>Mic 1 Level 4</Name> <Symbol>lv2_port_113</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>113</Index> <Name>Mic 1 Delay 4</Name> <Symbol>lv2_port_114</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>114</Index> <Name>Mic 1 Level 5</Name> <Symbol>lv2_port_115</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>115</Index> <Name>Mic 1 Delay 5</Name> <Symbol>lv2_port_116</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>116</Index> <Name>Mic 2 Mic Switch</Name> <Symbol>lv2_port_117</Symbol> <Value>1</Value> </Parameter> <Parameter> <Index>117</Index> <Name>Mic 2 X position</Name> <Symbol>lv2_port_118</Symbol> <Value>0.574999988079071</Value> </Parameter> <Parameter> <Index>118</Index> <Name>Mic 2 Y position</Name> <Symbol>lv2_port_119</Symbol> <Value>0.5625</Value> </Parameter> <Parameter> <Index>119</Index> <Name>Mic 2 Z position</Name> <Symbol>lv2_port_120</Symbol> <Value>0.428571432828903</Value> </Parameter> <Parameter> <Index>120</Index> <Name>Mic 2 Azimuth</Name> <Symbol>lv2_port_121</Symbol> <Value>0.625</Value> </Parameter> <Parameter> <Index>121</Index> <Name>Mic 2 Elevation</Name> <Symbol>lv2_port_122</Symbol> <Value>0.488764733076096</Value> </Parameter> <Parameter> <Index>122</Index> <Name>Mic 2 Level 1</Name> <Symbol>lv2_port_123</Symbol> <Value>0.59375</Value> </Parameter> <Parameter> <Index>123</Index> <Name>Mic 2 Delay 1</Name> <Symbol>lv2_port_124</Symbol> <Value>0.75</Value> </Parameter> <Parameter> <Index>124</Index> <Name>Mic 2 Level 2</Name> <Symbol>lv2_port_125</Symbol> <Value>0.837499976158142</Value> </Parameter> <Parameter> <Index>125</Index> <Name>Mic 2 Delay 2</Name> <Symbol>lv2_port_126</Symbol> <Value>0.509375035762787</Value> </Parameter> <Parameter> <Index>126</Index> <Name>Mic 2 Level 3</Name> <Symbol>lv2_port_127</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>127</Index> <Name>Mic 2 Delay 3</Name> <Symbol>lv2_port_128</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>128</Index> <Name>Mic 2 Level 4</Name> <Symbol>lv2_port_129</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>129</Index> <Name>Mic 2 Delay 4</Name> <Symbol>lv2_port_130</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>130</Index> <Name>Mic 2 Level 5</Name> <Symbol>lv2_port_131</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>131</Index> <Name>Mic 2 Delay 5</Name> <Symbol>lv2_port_132</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>132</Index> <Name>Mic 3 Mic Switch</Name> <Symbol>lv2_port_133</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>133</Index> <Name>Mic 3 X position</Name> <Symbol>lv2_port_134</Symbol> <Value>0.596000015735626</Value> </Parameter> <Parameter> <Index>134</Index> <Name>Mic 3 Y position</Name> <Symbol>lv2_port_135</Symbol> <Value>0.429999977350235</Value> </Parameter> <Parameter> <Index>135</Index> <Name>Mic 3 Z position</Name> <Symbol>lv2_port_136</Symbol> <Value>0.262857139110565</Value> </Parameter> <Parameter> <Index>136</Index> <Name>Mic 3 Azimuth</Name> <Symbol>lv2_port_137</Symbol> <Value>0.75</Value> </Parameter> <Parameter> <Index>137</Index> <Name>Mic 3 Elevation</Name> <Symbol>lv2_port_138</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>138</Index> <Name>Mic 3 Level 1</Name> <Symbol>lv2_port_139</Symbol> <Value>0.512499988079071</Value> </Parameter> <Parameter> <Index>139</Index> <Name>Mic 3 Delay 1</Name> <Symbol>lv2_port_140</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>140</Index> <Name>Mic 3 Level 2</Name> <Symbol>lv2_port_141</Symbol> <Value>0.512499988079071</Value> </Parameter> <Parameter> <Index>141</Index> <Name>Mic 3 Delay 2</Name> <Symbol>lv2_port_142</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>142</Index> <Name>Mic 3 Level 3</Name> <Symbol>lv2_port_143</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>143</Index> <Name>Mic 3 Delay 3</Name> <Symbol>lv2_port_144</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>144</Index> <Name>Mic 3 Level 4</Name> <Symbol>lv2_port_145</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>145</Index> <Name>Mic 3 Delay 4</Name> <Symbol>lv2_port_146</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>146</Index> <Name>Mic 3 Level 5</Name> <Symbol>lv2_port_147</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>147</Index> <Name>Mic 3 Delay 5</Name> <Symbol>lv2_port_148</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>148</Index> <Name>Mic 4 Mic Switch</Name> <Symbol>lv2_port_149</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>149</Index> <Name>Mic 4 X position</Name> <Symbol>lv2_port_150</Symbol> <Value>0.465000003576279</Value> </Parameter> <Parameter> <Index>150</Index> <Name>Mic 4 Y position</Name> <Symbol>lv2_port_151</Symbol> <Value>0.531666696071625</Value> </Parameter> <Parameter> <Index>151</Index> <Name>Mic 4 Z position</Name> <Symbol>lv2_port_152</Symbol> <Value>0.251428574323654</Value> </Parameter> <Parameter> <Index>152</Index> <Name>Mic 4 Azimuth</Name> <Symbol>lv2_port_153</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>153</Index> <Name>Mic 4 Elevation</Name> <Symbol>lv2_port_154</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>154</Index> <Name>Mic 4 Level 1</Name> <Symbol>lv2_port_155</Symbol> <Value>0.512499988079071</Value> </Parameter> <Parameter> <Index>155</Index> <Name>Mic 4 Delay 1</Name> <Symbol>lv2_port_156</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>156</Index> <Name>Mic 4 Level 2</Name> <Symbol>lv2_port_157</Symbol> <Value>0.512499988079071</Value> </Parameter> <Parameter> <Index>157</Index> <Name>Mic 4 Delay 2</Name> <Symbol>lv2_port_158</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>158</Index> <Name>Mic 4 Level 3</Name> <Symbol>lv2_port_159</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>159</Index> <Name>Mic 4 Delay 3</Name> <Symbol>lv2_port_160</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>160</Index> <Name>Mic 4 Level 4</Name> <Symbol>lv2_port_161</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>161</Index> <Name>Mic 4 Delay 4</Name> <Symbol>lv2_port_162</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>162</Index> <Name>Mic 4 Level 5</Name> <Symbol>lv2_port_163</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>163</Index> <Name>Mic 4 Delay 5</Name> <Symbol>lv2_port_164</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>164</Index> <Name>Mic 5 Mic Switch</Name> <Symbol>lv2_port_165</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>165</Index> <Name>Mic 5 X position</Name> <Symbol>lv2_port_166</Symbol> <Value>0.577000021934509</Value> </Parameter> <Parameter> <Index>166</Index> <Name>Mic 5 Y position</Name> <Symbol>lv2_port_167</Symbol> <Value>0.569999992847443</Value> </Parameter> <Parameter> <Index>167</Index> <Name>Mic 5 Z position</Name> <Symbol>lv2_port_168</Symbol> <Value>0.502857148647308</Value> </Parameter> <Parameter> <Index>168</Index> <Name>Mic 5 Azimuth</Name> <Symbol>lv2_port_169</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>169</Index> <Name>Mic 5 Elevation</Name> <Symbol>lv2_port_170</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>170</Index> <Name>Mic 5 Level 1</Name> <Symbol>lv2_port_171</Symbol> <Value>0.512499988079071</Value> </Parameter> <Parameter> <Index>171</Index> <Name>Mic 5 Delay 1</Name> <Symbol>lv2_port_172</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>172</Index> <Name>Mic 5 Level 2</Name> <Symbol>lv2_port_173</Symbol> <Value>0.512499988079071</Value> </Parameter> <Parameter> <Index>173</Index> <Name>Mic 5 Delay 2</Name> <Symbol>lv2_port_174</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>174</Index> <Name>Mic 5 Level 3</Name> <Symbol>lv2_port_175</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>175</Index> <Name>Mic 5 Delay 3</Name> <Symbol>lv2_port_176</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>176</Index> <Name>Mic 5 Level 4</Name> <Symbol>lv2_port_177</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>177</Index> <Name>Mic 5 Delay 4</Name> <Symbol>lv2_port_178</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>178</Index> <Name>Mic 5 Level 5</Name> <Symbol>lv2_port_179</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>179</Index> <Name>Mic 5 Delay 5</Name> <Symbol>lv2_port_180</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>180</Index> <Name>Stereo Width</Name> <Symbol>lv2_port_181</Symbol> <Value>0.674031317234039</Value> </Parameter> <Parameter> <Index>181</Index> <Name>Sound Speed</Name> <Symbol>lv2_port_182</Symbol> <Value>0.500000059604645</Value> </Parameter> <Parameter> <Index>182</Index> <Name>Mute</Name> <Symbol>lv2_port_183</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>183</Index> <Name>Clavinet Low Mic</Name> <Symbol>lv2_port_184</Symbol> <Value>1</Value> </Parameter> <Parameter> <Index>184</Index> <Name>ClvMicH</Name> <Symbol>lv2_port_185</Symbol> <Value>1</Value> </Parameter> <Parameter> <Index>185</Index> <Name>Equalizer Switch</Name> <Symbol>lv2_port_186</Symbol> <Value>1</Value> </Parameter> <Parameter> <Index>186</Index> <Name>HTinNois</Name> <Symbol>lv2_port_187</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>187</Index> <Name>Blooming Energy</Name> <Symbol>lv2_port_188</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>188</Index> <Name>Blooming Inertia</Name> <Symbol>lv2_port_189</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>189</Index> <Name>Aftertouch</Name> <Symbol>lv2_port_190</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>190</Index> <Name>Wall distance</Name> <Symbol>lv2_port_191</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>191</Index> <Name>Unison Balance</Name> <Symbol>lv2_port_192</Symbol> <Value>0.5</Value> </Parameter> <Parameter> <Index>192</Index> <Name>Condition</Name> <Symbol>lv2_port_193</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>193</Index> <Name>Condition Seed</Name> <Symbol>lv2_port_194</Symbol> <Value>0.12341234087944</Value> </Parameter> <Parameter> <Index>194</Index> <Name>Rattle Pedal</Name> <Symbol>lv2_port_195</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>195</Index> <Name>Lute Stop Pedal</Name> <Symbol>lv2_port_196</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>196</Index> <Name>Celeste Pedal</Name> <Symbol>lv2_port_197</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>197</Index> <Name>Super Sostenuto</Name> <Symbol>lv2_port_198</Symbol> <Value>0</Value> </Parameter> <CustomData> <Type>http://lv2plug.in/ns/ext/atom#Chunk</Type> <Key>urn:juce:stateBinary</Key> <Value> UHJWSxQAAAJYRlRQpBsAAAoAAAAyMDE3LzEyLzEzFwAAAFBpYW5vdGVxIDUuMy4wLzIwMTUwNzE1o9QvMCuNhmEarickC02mrGRsbGFjGwAAdGR0TXIGAAARAAAARDQgRGFpbHkgUHJhY3RpY2UAAAAAGgAAAENvcHlyaWdodCAoYykgMjAxNSBNb2RhcnR0hwAAAFRoaXMgcHJlc2V0IG9mZmVycyBhIGNsZWFuIHNvdW5kLCB5b3UgbWF5IGxpa2UgdG8gdXNlIGl0IGZvciB5b3VyIGRhaWx5IHByYWN0aWNlLiBBbHNvIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgcHJlcGFyaW5nIG5ldyBwcmVzZXRzLgAAAACEAAAAEQAAAEQ0IERhaWx5IFByYWN0aWNlAAAAAIsFAABHUlVVAAAABgAAAAEDwE1UcmsAAAV1AP8CDyBQaWV0IERlIFJpZGRlcgCQKil4gCpVBpArJIMxgCsNaJAkKoIHgCQcMpA3LYEJgDdPgmaQPDGBToA8RVaQKyoFPzuBTIA/bFaQQy8qNyCBGIBDUgQ3K0orJYERkD80CCUlcoA/Wz0lTVKQQisIJiKBOoBCSoEskDkhghSAOUqBICYbNJA+MINMLUKBIoAtSoJCkDI9gVeAMjtCkCsyQoA+bIMlkDItghwvPCCAK2kKMi19L09FkDpPCjVKgVWAOmMbkDs+CYA1IoImO0AEkDw4gSuAPGlHkEFBFDI5gSKAMmZYkDhQgk0kSoJXgDhggSaQNz4GP083gEFFgxYkCSiQMEGBcoA3QB6QK0EqgDA2Zz9dfJAwOFKAKwUcMFKBAJAkUIEggCRjbZA8RYFwgDxmB5A/MYIJQVkGgD9yFJAwQoFggEFveTAFfpBCZoE5gEJSLpBDVFIwLXeAQ2k6kERPgR6AME81RGk5kEVGBCYxhBIwLiiAJm+BaZBDVS+ARVuCQjA0YZBEWgyAQ00AkC1BBTA2gR2AMF0ARGxVkEVeEjAdgRaAMGAtRWktkEZbCSo3UIAtNBxGYzQqYFSQR0wNKzGBeIBHLQmQQSCBcIBBWx2QQiqBSIBCWwkrGUyQQ1UIMkaBMYAyYCVDbIF2kEttgQyAS2OCZZAvPQ1KXoEzgEpFWy9pBpBIPAQwOYFugEhpMDA9gTaQJC+BQ4AkJ2eQQ2OBSIBDRYIpkEJVCjBVcoBCZoEEkENFaoAwIYEEkCstEkZFIYBDY4EmRmkCK0U3kChKBUhbggmASGMZkEZCHYAoSoELRjiCPpA0TQA6RwBATzkiNIFZgDpsWjRsRUBsPSIyGJAoRoF7LlBPgChsgSOQPV+BNIA9WwkuZkWQPkULKUWBYYA+YCSQPC6BV4A8VYFkKUdIkDhLHDA2gx+AOGwhkDdZgRqAMGkyN1sukDVQCyxUgSyALFgvNWANkDdGEDA9gU+AN2AIMEookCZPAjhFgS+AOG9XkDkvggQ8LCCAORxJJlWBJ5A/SwiAPGkPkDBQgSuAMEUukEJgEjAJD4A/aWxCbzswSjqQRWgtMBJjgEVsEjBmV5BEViYqRoFYQ1AzgERNIENjHypmgQWQQkoTK0KBHoBCaVCQQzmBNYBDYEaQRE9/gERpRitYTpBFaAYvU4F/gEVsSC82gRmQMloARmeBO4BGbCuQR0w8gDIYgUKQL0qBL4AvXQRHYz2QSFsHMGaBX4BIbA0wWxKQS28bM2hQgEtsgQczW4FSkEhVADBkgQGASGBlMEIokENpEStMgSCAQ2A7K2ZQkCc4BD9FgTeAJz0NP2aBNZBDVgAra4EggENjbpAnSwI/PBWAK1V9P0ceJ2ZOkCZNAj48gTOAPi07kCo4AEJAboAmUhRCPSUqW1SQRWQTLVUALxSBB4BFaUYvbBQtZoF/kCxqBERqgUOARGktLGmBXJAqYQdCZ4ExgEJsISpvM5ArWgJDVoExgCtvE0NmghqQRmEEQV8EK1g5R18agEZyc0FmPStVH0dggVOQMmcJSmoCQWmCD4BBJ0gyQhVKY4QbkDA6gXAzPiWAMACBcJA3K4EcgDcALzMAHZA8U4F/gDwACpA/U4FsQ1IQgD8AgUJDAB6QSEqBEYBIAHqQSzuCHIBLAAOQT1CBVIBPAIJPkFBjCCtcB0piAjdkBFNggVCASgARUAAAUwBjNwACKwCCVZAkZwIwZAhPYgNIVwRUYxJLXwArYAVRXIELgCsAE1QABCQAC1EAJ0sAMTAAEU8AgQ0kQAArQAAwQAAzQAA3QAA8QAA/QABDQABIQABKQABLQABPQABQQABRQABTQABUQAD/LwBQcnNV4RQAACoAAAACAAAAZDQAAAAACAAAAEdyYW5kIEQ0AAAAAAMAAAADAAAAAACoQQAAcEIAANhCAwAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAEAAAAAAAAA3H8iPgMAAAAKAAAAAACoQQAA6EEAABhCAAAgQgAAJEIAACxCAABgQgAAkkIAAJRCAAC2QgoAAABhpkk/CNJOPwnMaT94/Fw/WUNUPzMOYD8dCIA/jz6zP48+sz+PPrM/AAAAAAAAtkIAAAAAAwAAAAEAAAAAAHBCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAACgwAAAoEAAAAAAAwAAAAIAAAAAAKhBAADYQgIAAAAAAAAAAAAAAAAAAAADAAAAAgAAAAAAqEEAANhCAgAAAAAAgD8AAIA/AAAAAIAAAAAAAAAA0gQAAAAAgD8DAAAAAQAAAAAAcEIBAAAAAAAAAAAAAAADAAAAaQAAAAAAEEEAACBBAAAwQQAAQEEAAFBBAABgQQAAcEEAAIBBAACIQQAAkEEAAJhBAACgQQAAqEEAALBBAAC4QQAAwEEAAMhBAADQQQAA2EEAAOBBAADoQQAA8EEAAPhBAAAAQgAABEIAAAhCAAAMQgAAEEIAABRCAAAYQgAAHEIAACBCAAAkQgAAKEIAACxCAAAwQgAANEIAADhCAAA8QgAAQEIAAERCAABIQgAATEIAAFBCAABUQgAAWEIAAFxCAABgQgAAZEIAAGhCAABsQgAAcEIAAHRCAAB4QgAAfEIAAIBCAACCQgAAhEIAAIZCAACIQgAAikIAAIxCAACOQgAAkEIAAJJCAACUQgAAlkIAAJhCAACaQgAAnEIAAJ5CAACgQgAAokIAAKRCAACmQgAAqEIAAKpCAACsQgAArkIAALBCAACyQgAAtEIAALZCAAC4QgAAukIAALxCAAC+QgAAwEIAAMJCAADEQgAAxkIAAMhCAADKQgAAzEIAAM5CAADQQgAA0kIAANRCAADWQgAA2EIAANpCAADcQgAA3kIAAOBCAADiQmkAAAAAAADAAACAvwAAQMAAAEDAAABAQAAAAEAAAMBAAACAPwAAgD8AAMBAAABAQAAAgEAAAADAAABAwAAAgEAAAIBAAACgQAAAwEAAAIBAAAAAgAAAgD8AAADAAACAPwAAQMAAAEDAAABAQAAAgEAAAKBAAACgQAAAQMAAAKBAAAAAgAAAAEAAAEDAAACgQAAAoEAAAEBAAACAQAAAAEAAAADAAACAPwAAgEAAAABAAACgQAAAQEAAAEDAAAAAgAAAgEAAAEDAAAAAgAAAgD8AAIC/AABAwAAAoEAAAEDAAAAAwAAAAIAAAACAAACgQAAAQMAAAADAAACAvwAAQMAAAEDAAACgQAAAAMAAAEDAAABAwAAAgEAAAIA/AABAwAAAgEAAAAAAAACAQAAAgL8AAABAAACgQAAAQMAAAIC/AAAAwAAAwEAAAKBAAABAwAAAQMAAAADAAACAPwAAQMAAAEDAAACAvwAAgL8AAMBAAACAQAAAQMAAAAAAAAAAAAAAgD8AAEDAAAAAwAAAwEAAAEDAAADAQAAAQMAAAEDAAABAwAAAAEAAAAAAAwAAAAIAAAAAAKhBAADYQgIAAAAAAIA/AACAPwAAAAAAANxDAAAAAAEAAAAAAAAABwAAAERlZmF1bHQMAAAAAADIQgAASEMAAJZDAADIQwAA+kMAABZEAAAvRAAASEQAAGFEAAB6RACAiUQAAJZEAQAAAAAA3EM8AAAARQAAAAAAAAAAAAAABwAAAERlZmF1bHQDAAAABAAAAAAAwEEAABBCAABAQgAA2EIEAAAAAACgwAAAgL8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgD8AAIA/AwAAAAIAAAAAAKhBAADYQgIAAAAAAIA/AACAPwAAAAADAAAAAgAAAAAAqEEAANhCAgAAAAAAgD8AAIA/AAAAAAAAAAADAAAAAQAAAAAAcEIBAAAAAAAAAAAAAAAAAIA/AwAAAAEAAAAAAHBCAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAzczMvc3MzD0BAAAAAAAAAAAAAAAAAAC/AAAAPwAAgD8DAAAAAwAAAAAAqEEAAHBCAADYQgMAAAAAAIA/AACAPwAAgD8AAAAAAAAAAAMAAAACAAAAAACoQQAA2EICAAAAAAAAAAAAAAAAAAAAAACAPwMAAAACAAAAAACoQQAA2EICAAAAAACAPwAAgD8AAAAAAAAgQgMAAAAHAAAAAACoQQAAkEIAAKhCAAC0QgAAwEIAAMhCAADYQgcAAAAAAAAAAAAAAAAAQEAAAMBAAAAQQQAAIEEAADBBAAAAAAAAgD8DAAAAAwAAAAAAqEEAAHBCAADYQgMAAAAAAIA/AACAPwAAgD8AAAAAAwAAAAAAAAABAAAAAAAAAAAAAAABAAAAAwAAAAIAAAAAAAAAAACAPwIAAAAAAAAAAACAPwAAAAADAAAAAgAAAAAAAAAAAIA/AgAAAAAAgD8AAIA/AAAAAAMAAAAEAAAAAAAAACaTST7+fj8/AACAPwQAAAAAAAAAAAAAAAAAgD8AAIA/AAAAAAMAAAACAAAAAAAAAAAAgD8CAAAAAAAAAAAAAAAAAAAAzcwsQAMAAAACAAAAAACoQQAA2EICAAAAAACAPwAAgD8AAAAAAACAvwAAAD8DAAAAAgAAAAAAwEEAAMBCAgAAAAAAgD8AAIA/AAAAAAEAAAABAAAAAQAAAAoAAABTbWFsbCBIYWxsCwAAAG1lZGl1bWhhbGwxAAAAAAAAoEEAAIA/ZmZmPwAAAABCYGU9AAAAAAAAAAAAAAAAAACqQwAAgD8AAIA/BQAAAAAAgD8AAIA/AwAAAF0AAAAAAKhBAACwQQAAuEEAAMBBAADIQQAA0EEAANhBAADgQQAA6EEAAPBBAAD4QQAAAEIAAARCAAAIQgAADEIAABBCAAAUQgAAGEIAABxCAAAgQgAAJEIAAChCAAAsQgAAMEIAADRCAAA4QgAAPEIAAEBCAABEQgAASEIAAExCAABQQgAAVEIAAFhCAABcQgAAYEIAAGRCAABoQgAAbEIAAHBCAAB0QgAAeEIAAHxCAACAQgAAgkIAAIRCAACGQgAAiEIAAIpCAACMQgAAjkIAAJBCAACSQgAAlEIAAJZCAACYQgAAmkIAAJxCAACeQgAAoEIAAKJCAACkQgAApkIAAKhCAACqQgAArEIAAK5CAACwQgAAskIAALRCAAC2QgAAuEIAALpCAAC8QgAAvkIAAMBCAADCQgAAxEIAAMZCAADIQgAAykIAAMxCAADOQgAA0EIAANJCAADUQgAA1kIAANhCAADaQgAA3EIAAN5CAADgQgAA4kJdAAAAAACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD9xPYo/heuRP/YonD/sUZg/j8KVP3E9ij+amZk/j8KVP3sUjj+PwpU/mpmZP7gepT/NzIw/CtejP1K4nj+amZk/16OQP9ejkD+4HqU/KVyPP+F6lD89Cpc/exSOP4/ClT9I4Zo/exSuP65HoT8AAIA/KVyPP1K4nj8AAIA/4XqUP1yPoj/sUZg/XI+iPx+Fqz+kcJ0/MzOzP3sUrj+uR6E/SOGaP3E9ij9cj6I/w/WIP+xRmD/NzIw/FK6HPx+Fiz/sUZg/UrieP3sUjj+uR6E/KVyPP5qZmT9cj6I/CtejP2Zmpj+kcJ0/MzOTP4/CtT9SuJ4/mpmZP5qZuT+4HqU/AACgP83MrD+ambk/pHCdP0jhmj/NzKw/PQqXPylcjz/D9ag/PQqXP6RwnT+amZk/cT2qP0jhmj9SuJ4/UrieP0jhmj97FK4/4XqUP/YonD+kcJ0/AAAAAAMAAAADAAAAAACoQQAAcEIAANhCAwAAAAAAgD8AAIA/AACAPwAAAAAAAAAAAwAAAF0AAAAAAKhBAACwQQAAuEEAAMBBAADIQQAA0EEAANhBAADgQQAA6EEAAPBBAAD4QQAAAEIAAARCAAAIQgAADEIAABBCAAAUQgAAGEIAABxCAAAgQgAAJEIAAChCAAAsQgAAMEIAADRCAAA4QgAAPEIAAEBCAABEQgAASEIAAExCAABQQgAAVEIAAFhCAABcQgAAYEIAAGRCAABoQgAAbEIAAHBCAAB0QgAAeEIAAHxCAACAQgAAgkIAAIRCAACGQgAAiEIAAIpCAACMQgAAjkIAAJBCAACSQgAAlEIAAJZCAACYQgAAmkIAAJxCAACeQgAAoEIAAKJCAACkQgAApkIAAKhCAACqQgAArEIAAK5CAACwQgAAskIAALRCAAC2QgAAuEIAALpCAAC8QgAAvkIAAMBCAADCQgAAxEIAAMZCAADIQgAAykIAAMxCAADOQgAA0EIAANJCAADUQgAA1kIAANhCAADaQgAA3EIAAN5CAADgQgAA4kJdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxmuW8SOFIvRdVB71AGWE80EJ4vV/YST2wNkm93jniudhVqr0uuGu9OCETOtdjgLwW24S9RFIFPaiJjzyCl7C67ryqPZLitb218bo92mxJPUMvoT3kFqu7vQhvvQR/oL3X3K292xWdPYeDQz28BZW9MjXGPNl7sb1R4a68jIzyPHT/wT1b5ja7ZmKPuhApuj3cZ7M9IC6aPaW0Er3O34W8jcm2PFJHqDxKNLo9cuRnvbkagD3/Na291GWdPYkdXTw2jls9rlyQvTrpXb1gYKE8fIdGPRFnCj2OWQM9G/zWO8bUsbxXGHs9ARhlvR18wjwzmiS9TzBSvUlvOr33Tk49bNO2Pcm2J70VS6U9PV6dPUUter0+pHg9leXfvB3hl7wlwYw9fkrZOWb3xz1aWSE9lUvOPAMPnL3ammu9bMGSPSgz8Dwlv7O97aNfPUb8jj2w+UC9AAAAAAMAAAAAAIA/AACAPwAAgD8DAAAAAwAAAAAAqEEAAHBCAADYQgMAAAAAAIA/AACAPwAAgD8AAAAAAwAAAAMAAAAAAKhBAABwQgAA2EIDAAAAAACAPwAAgD8AAIA/AAAAAAMAAAADAAAAAACoQQAAcEIAANhCAwAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwYAAAAAAIA/mpmZPs3MTD/NzMw/mpmZPggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAADAAAAAACoQQAAcEIAANhCAwAAAAAAgD8AAIA/AACAPwAAAAADAAAAAwAAAAAAqEEAAHBCAADYQgMAAAAAAIA/AACAPwAAgD8AAAAAAwAAAAMAAAAAAKhBAABwQgAA2EIDAAAAAACAPwAAgD8AAIA/AAAAAAMAAAADAAAAAACoQQAAcEIAANhCAwAAAAAAgD8AAIA/AACAPwAAAAABAAAAAQAAAAAAcEIDAAAAAQAAAAAAAAABAAAAAAAAAAAAAABOI9g9AwAAABYAAAAAABBBAACoQQAAwEEAAOBBAADoQQAAAEIAAAhCAAAYQgAAJEIAADBCAABAQgAATEIAAGBCAABwQgAAgEIAAIhCAACQQgAAmEIAAKBCAACoQgAAwEIAANhCFgAAAHh0JD/p5Y8/DGGSP3jylD9Ng5Q/TYOUP02DlD9Ng5Q/6oqRP02DlD9Ng5Q/6oqRP1mwjj/qipE/WbCOP1mwjj9ZsI4/54RcP+eEXD9+JEo/2kMtPzGS8j4AAAAAAQAAAAAAAAABAAAAMzMzP2Zmpj8BAAAAAQAAAAEAAABmZmY/zcyMPwEAAAAAAAAAAADwQgAAAAAOAAAAAAAAP83MzD3NzEw+AAAAPwQAAAACAAAAAwAAAAQAAAABAAAAAgAAAAcAAAABAAAAAAAAAA4AAAAQAAAAAAAAAM3MzD0AAIA/AAAAAAAAAL8AAHBCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAOAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAADgAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAAAIA/AABAwQAAAAACAAAAAwAAAAEAAAAFAAAABAAAAAEAAAADAAAAAADAPwAAoD8AAMA/AABhwxxugcAAAAAABQAAAAAAAAAAABDBAADAwgAAwMIAAMDCBQAAAAAAAACPwvU8AAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAEAAAAAQAAAAMAAAAAAMA/AABAPwAAwD8AADRCHG6BwAAAAAAFAAAAAAAQwQAAAAAAAMDCAADAwgAAwMIFAAAACtcjPaabxDoAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAQAAAAAAAAAAwAAAI/C9T89Cle/H4VrPwAAtEIAAAAAAAAAAAUAAAAAAEDBAABAwQAAcMIAAHDCAABwwgUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAABAAAAAAAAAADAAAAMzMzv1yPwj6uR2E/AAAAAAAAAAAAAAAABQAAAAAAQMEAAEDBAABwwgAAcMIAAHDCBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAEAAAAAAAAAAMAAAC4HsU/PQpXP65H4T8AAAAAAAAAAAAAAAAFAAAAAABAwQAAQMEAAHDCAABwwgAAcMIFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAMAAAAzMzM/AAAAAGZmpj8AAJBBAAAAAAAAAAAAAAAA </Value> </CustomData> </Data> </Plugin> <!-- MIDI Chord --> <Plugin> <Info> <Type>LV2</Type> <Name>MIDI Chord</Name> <URI>http://gareus.org/oss/lv2/midifilter#midichord</URI> </Info> <Data> <Active>Yes</Active> <ControlChannel>1</ControlChannel> <Options>0x1e1</Options> <Parameter> <Index>1</Index> <Name>Filter Channel</Name> <Symbol>channelf</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>2</Index> <Name>Scale</Name> <Symbol>scale</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>3</Index> <Name>prime</Name> <Symbol>c1</Symbol> <Value>1</Value> </Parameter> <Parameter> <Index>4</Index> <Name>3rd</Name> <Symbol>c3</Symbol> <Value>1</Value> </Parameter> <Parameter> <Index>5</Index> <Name>5th</Name> <Symbol>c5</Symbol> <Value>1</Value> </Parameter> <Parameter> <Index>6</Index> <Name>6th</Name> <Symbol>c6</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>7</Index> <Name>7th</Name> <Symbol>c7</Symbol> <Value>1</Value> </Parameter> <Parameter> <Index>8</Index> <Name>octave</Name> <Symbol>c8</Symbol> <Value>1</Value> </Parameter> <Parameter> <Index>9</Index> <Name>9th</Name> <Symbol>c9</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>10</Index> <Name>11th</Name> <Symbol>c11</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>11</Index> <Name>13th</Name> <Symbol>c13</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>12</Index> <Name>bass</Name> <Symbol>_8</Symbol> <Value>0</Value> </Parameter> <CustomData> <Type>http://kxstudio.sf.net/ns/carla/property</Type> <Key>CarlaSkinIsCompacted</Key> <Value>true</Value> </CustomData> </Data> </Plugin> <!-- Carla-Rack (no midi out) --> <Plugin> <Info> <Type>INTERNAL</Type> <Name>Carla-Rack (no midi out)</Name> <Label>carlarack-nomidiout</Label> </Info> <Data> <Active>Yes</Active> <ControlChannel>1</ControlChannel> <Options>0x3e0</Options> <CustomData> <Type>http://kxstudio.sf.net/ns/carla/chunk</Type> <Key>State</Key> <Value> &lt;?xml version=&apos;1.0&apos; encoding=&apos;UTF-8&apos;?&gt; &lt;!DOCTYPE CARLA-PROJECT&gt; &lt;CARLA-PROJECT VERSION=&apos;2.0&apos;&gt; &lt;EngineSettings&gt; &lt;ForceStereo&gt;false&lt;/ForceStereo&gt; &lt;PreferPluginBridges&gt;false&lt;/PreferPluginBridges&gt; &lt;PreferUiBridges&gt;true&lt;/PreferUiBridges&gt; &lt;UIsAlwaysOnTop&gt;false&lt;/UIsAlwaysOnTop&gt; &lt;MaxParameters&gt;200&lt;/MaxParameters&gt; &lt;UIBridgesTimeout&gt;4000&lt;/UIBridgesTimeout&gt; &lt;LADSPA_PATH&gt;/home/falktx/.ladspa:/usr/lib/ladspa:/usr/local/lib/ladspa&lt;/LADSPA_PATH&gt; &lt;DSSI_PATH&gt;/home/falktx/.dssi:/usr/lib/dssi:/usr/local/lib/dssi&lt;/DSSI_PATH&gt; &lt;LV2_PATH&gt;/home/falktx/.lv2:/usr/lib/lv2:/usr/local/lib/lv2&lt;/LV2_PATH&gt; &lt;VST2_PATH&gt;/home/falktx/.vst:/home/falktx/.wineflstudio/drive_c/Program Files (x86)/VstPlugins/:/usr/lib/vst:/usr/local/lib/vst&lt;/VST2_PATH&gt; &lt;GIG_PATH&gt;/home/falktx/.sounds/gig:/usr/share/sounds/gig&lt;/GIG_PATH&gt; &lt;SF2_PATH&gt;/home/falktx/.sounds/sf2:/home/falktx/Personal/Muzyks/Kits/SoundFonts:/usr/share/sounds/sf2&lt;/SF2_PATH&gt; &lt;SFZ_PATH&gt;/home/falktx/.sounds/sfz:/home/falktx/Personal/Muzyks/Kits/SFZ:/usr/share/sounds/sfz&lt;/SFZ_PATH&gt; &lt;/EngineSettings&gt; &lt;!-- QMidiArp Arp --&gt; &lt;Plugin&gt; &lt;Info&gt; &lt;Type&gt;LV2&lt;/Type&gt; &lt;Name&gt;QMidiArp Arp&lt;/Name&gt; &lt;URI&gt;https://git.code.sf.net/p/qmidiarp/arp&lt;/URI&gt; &lt;/Info&gt; &lt;Data&gt; &lt;Active&gt;Yes&lt;/Active&gt; &lt;ControlChannel&gt;1&lt;/ControlChannel&gt; &lt;Options&gt;0x1e1&lt;/Options&gt; &lt;Parameter&gt; &lt;Index&gt;0&lt;/Index&gt; &lt;Name&gt;Attack&lt;/Name&gt; &lt;Symbol&gt;ATTACK&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;1&lt;/Index&gt; &lt;Name&gt;Release&lt;/Name&gt; &lt;Symbol&gt;RELEASE&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;2&lt;/Index&gt; &lt;Name&gt;Random Tick&lt;/Name&gt; &lt;Symbol&gt;RANDOM_TICK&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;3&lt;/Index&gt; &lt;Name&gt;Random Length&lt;/Name&gt; &lt;Symbol&gt;RANDOM_LEN&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;4&lt;/Index&gt; &lt;Name&gt;Random Velocity&lt;/Name&gt; &lt;Symbol&gt;RANDOM_VEL&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;5&lt;/Index&gt; &lt;Name&gt;Output Channel&lt;/Name&gt; &lt;Symbol&gt;CH_OUT&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;6&lt;/Index&gt; &lt;Name&gt;Input Channel&lt;/Name&gt; &lt;Symbol&gt;CH_IN&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;8&lt;/Index&gt; &lt;Name&gt;Restart&lt;/Name&gt; &lt;Symbol&gt;ENABLE_RESTARTBYKBD&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;9&lt;/Index&gt; &lt;Name&gt;Trigger&lt;/Name&gt; &lt;Symbol&gt;ENABLE_TRIGBYKBD&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;10&lt;/Index&gt; &lt;Name&gt;Mute Output&lt;/Name&gt; &lt;Symbol&gt;MUTE&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;11&lt;/Index&gt; &lt;Name&gt;Latch mode&lt;/Name&gt; &lt;Symbol&gt;LATCH_MODE&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;12&lt;/Index&gt; &lt;Name&gt;Octave Mode&lt;/Name&gt; &lt;Symbol&gt;OCTAVE_MODE&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;13&lt;/Index&gt; &lt;Name&gt;Low octave limit&lt;/Name&gt; &lt;Symbol&gt;OCTAVE_LOW&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;14&lt;/Index&gt; &lt;Name&gt;High octave limit&lt;/Name&gt; &lt;Symbol&gt;OCTAVE_HIGH&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;15&lt;/Index&gt; &lt;Name&gt;Index In 1&lt;/Name&gt; &lt;Symbol&gt;INDEX_IN1&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;16&lt;/Index&gt; &lt;Name&gt;Index In 2&lt;/Name&gt; &lt;Symbol&gt;INDEX_IN2&lt;/Symbol&gt; &lt;Value&gt;127&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;17&lt;/Index&gt; &lt;Name&gt;Range In 1&lt;/Name&gt; &lt;Symbol&gt;RANGE_IN1&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;18&lt;/Index&gt; &lt;Name&gt;Range In 2&lt;/Name&gt; &lt;Symbol&gt;RANGE_IN2&lt;/Symbol&gt; &lt;Value&gt;127&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;19&lt;/Index&gt; &lt;Name&gt;Trigger Legato&lt;/Name&gt; &lt;Symbol&gt;ENABLE_TRIGLEGATO&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;20&lt;/Index&gt; &lt;Name&gt;Repeat Mode&lt;/Name&gt; &lt;Symbol&gt;REPEAT_MODE&lt;/Symbol&gt; &lt;Value&gt;1&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;22&lt;/Index&gt; &lt;Name&gt;Defer mute&lt;/Name&gt; &lt;Symbol&gt;DEFER&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;23&lt;/Index&gt; &lt;Name&gt;Pattern Preset&lt;/Name&gt; &lt;Symbol&gt;PATTERN_PRESET&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;24&lt;/Index&gt; &lt;Name&gt;Transport Mode&lt;/Name&gt; &lt;Symbol&gt;TRANSPORT_MODE&lt;/Symbol&gt; &lt;Value&gt;1&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;25&lt;/Index&gt; &lt;Name&gt;Internal Tempo&lt;/Name&gt; &lt;Symbol&gt;TEMPO&lt;/Symbol&gt; &lt;Value&gt;120&lt;/Value&gt; &lt;/Parameter&gt; &lt;CustomData&gt; &lt;Type&gt;http://lv2plug.in/ns/ext/atom#String&lt;/Type&gt; &lt;Key&gt;https://git.code.sf.net/p/qmidiarp#ARPPATTERN&lt;/Key&gt; &lt;Value&gt;&amp;gt;0&lt;/Value&gt; &lt;/CustomData&gt; &lt;/Data&gt; &lt;/Plugin&gt; &lt;Plugin&gt; &lt;Info&gt; &lt;Type&gt;SFZ&lt;/Type&gt; &lt;Name&gt;concert_harp&lt;/Name&gt; &lt;Filename&gt;/home/falktx/Personal/Muzyks/Kits/SFZ/Sonatina Symphonic Orchestra/concert_harp.sfz&lt;/Filename&gt; &lt;/Info&gt; &lt;Data&gt; &lt;Active&gt;Yes&lt;/Active&gt; &lt;ControlChannel&gt;1&lt;/ControlChannel&gt; &lt;Options&gt;0x1f0&lt;/Options&gt; &lt;CurrentProgramIndex&gt;1&lt;/CurrentProgramIndex&gt; &lt;CurrentProgramName&gt;concert_harp&lt;/CurrentProgramName&gt; &lt;/Data&gt; &lt;/Plugin&gt; &lt;/CARLA-PROJECT&gt; </Value> </CustomData> <CustomData> <Type>http://kxstudio.sf.net/ns/carla/property</Type> <Key>CarlaSkinIsCompacted</Key> <Value>true</Value> </CustomData> </Data> </Plugin> <!-- Carla-Rack (no midi out) --> <Plugin> <Info> <Type>INTERNAL</Type> <Name>arp xylo + 3d delay</Name> <Label>carlarack-nomidiout</Label> </Info> <Data> <Active>Yes</Active> <ControlChannel>1</ControlChannel> <Options>0x3e0</Options> <CustomData> <Type>http://kxstudio.sf.net/ns/carla/chunk</Type> <Key>State</Key> <Value> &lt;?xml version=&apos;1.0&apos; encoding=&apos;UTF-8&apos;?&gt; &lt;!DOCTYPE CARLA-PROJECT&gt; &lt;CARLA-PROJECT VERSION=&apos;2.0&apos;&gt; &lt;EngineSettings&gt; &lt;ForceStereo&gt;false&lt;/ForceStereo&gt; &lt;PreferPluginBridges&gt;false&lt;/PreferPluginBridges&gt; &lt;PreferUiBridges&gt;true&lt;/PreferUiBridges&gt; &lt;UIsAlwaysOnTop&gt;false&lt;/UIsAlwaysOnTop&gt; &lt;MaxParameters&gt;200&lt;/MaxParameters&gt; &lt;UIBridgesTimeout&gt;4000&lt;/UIBridgesTimeout&gt; &lt;LADSPA_PATH&gt;/home/falktx/.ladspa:/usr/lib/ladspa:/usr/local/lib/ladspa&lt;/LADSPA_PATH&gt; &lt;DSSI_PATH&gt;/home/falktx/.dssi:/usr/lib/dssi:/usr/local/lib/dssi&lt;/DSSI_PATH&gt; &lt;LV2_PATH&gt;/home/falktx/.lv2:/usr/lib/lv2:/usr/local/lib/lv2&lt;/LV2_PATH&gt; &lt;VST2_PATH&gt;/home/falktx/.vst:/home/falktx/.wineflstudio/drive_c/Program Files (x86)/VstPlugins/:/usr/lib/vst:/usr/local/lib/vst&lt;/VST2_PATH&gt; &lt;GIG_PATH&gt;/home/falktx/.sounds/gig:/usr/share/sounds/gig&lt;/GIG_PATH&gt; &lt;SF2_PATH&gt;/home/falktx/.sounds/sf2:/home/falktx/Personal/Muzyks/Kits/SoundFonts:/usr/share/sounds/sf2&lt;/SF2_PATH&gt; &lt;SFZ_PATH&gt;/home/falktx/.sounds/sfz:/home/falktx/Personal/Muzyks/Kits/SFZ:/usr/share/sounds/sfz&lt;/SFZ_PATH&gt; &lt;/EngineSettings&gt; &lt;!-- QMidiArp Arp --&gt; &lt;Plugin&gt; &lt;Info&gt; &lt;Type&gt;LV2&lt;/Type&gt; &lt;Name&gt;QMidiArp Arp&lt;/Name&gt; &lt;URI&gt;https://git.code.sf.net/p/qmidiarp/arp&lt;/URI&gt; &lt;/Info&gt; &lt;Data&gt; &lt;Active&gt;Yes&lt;/Active&gt; &lt;ControlChannel&gt;1&lt;/ControlChannel&gt; &lt;Options&gt;0x1e1&lt;/Options&gt; &lt;Parameter&gt; &lt;Index&gt;0&lt;/Index&gt; &lt;Name&gt;Attack&lt;/Name&gt; &lt;Symbol&gt;ATTACK&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;1&lt;/Index&gt; &lt;Name&gt;Release&lt;/Name&gt; &lt;Symbol&gt;RELEASE&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;2&lt;/Index&gt; &lt;Name&gt;Random Tick&lt;/Name&gt; &lt;Symbol&gt;RANDOM_TICK&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;3&lt;/Index&gt; &lt;Name&gt;Random Length&lt;/Name&gt; &lt;Symbol&gt;RANDOM_LEN&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;4&lt;/Index&gt; &lt;Name&gt;Random Velocity&lt;/Name&gt; &lt;Symbol&gt;RANDOM_VEL&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;5&lt;/Index&gt; &lt;Name&gt;Output Channel&lt;/Name&gt; &lt;Symbol&gt;CH_OUT&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;6&lt;/Index&gt; &lt;Name&gt;Input Channel&lt;/Name&gt; &lt;Symbol&gt;CH_IN&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;8&lt;/Index&gt; &lt;Name&gt;Restart&lt;/Name&gt; &lt;Symbol&gt;ENABLE_RESTARTBYKBD&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;9&lt;/Index&gt; &lt;Name&gt;Trigger&lt;/Name&gt; &lt;Symbol&gt;ENABLE_TRIGBYKBD&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;10&lt;/Index&gt; &lt;Name&gt;Mute Output&lt;/Name&gt; &lt;Symbol&gt;MUTE&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;11&lt;/Index&gt; &lt;Name&gt;Latch mode&lt;/Name&gt; &lt;Symbol&gt;LATCH_MODE&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;12&lt;/Index&gt; &lt;Name&gt;Octave Mode&lt;/Name&gt; &lt;Symbol&gt;OCTAVE_MODE&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;13&lt;/Index&gt; &lt;Name&gt;Low octave limit&lt;/Name&gt; &lt;Symbol&gt;OCTAVE_LOW&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;14&lt;/Index&gt; &lt;Name&gt;High octave limit&lt;/Name&gt; &lt;Symbol&gt;OCTAVE_HIGH&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;15&lt;/Index&gt; &lt;Name&gt;Index In 1&lt;/Name&gt; &lt;Symbol&gt;INDEX_IN1&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;16&lt;/Index&gt; &lt;Name&gt;Index In 2&lt;/Name&gt; &lt;Symbol&gt;INDEX_IN2&lt;/Symbol&gt; &lt;Value&gt;127&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;17&lt;/Index&gt; &lt;Name&gt;Range In 1&lt;/Name&gt; &lt;Symbol&gt;RANGE_IN1&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;18&lt;/Index&gt; &lt;Name&gt;Range In 2&lt;/Name&gt; &lt;Symbol&gt;RANGE_IN2&lt;/Symbol&gt; &lt;Value&gt;127&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;19&lt;/Index&gt; &lt;Name&gt;Trigger Legato&lt;/Name&gt; &lt;Symbol&gt;ENABLE_TRIGLEGATO&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;20&lt;/Index&gt; &lt;Name&gt;Repeat Mode&lt;/Name&gt; &lt;Symbol&gt;REPEAT_MODE&lt;/Symbol&gt; &lt;Value&gt;1&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;22&lt;/Index&gt; &lt;Name&gt;Defer mute&lt;/Name&gt; &lt;Symbol&gt;DEFER&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;23&lt;/Index&gt; &lt;Name&gt;Pattern Preset&lt;/Name&gt; &lt;Symbol&gt;PATTERN_PRESET&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;24&lt;/Index&gt; &lt;Name&gt;Transport Mode&lt;/Name&gt; &lt;Symbol&gt;TRANSPORT_MODE&lt;/Symbol&gt; &lt;Value&gt;1&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;25&lt;/Index&gt; &lt;Name&gt;Internal Tempo&lt;/Name&gt; &lt;Symbol&gt;TEMPO&lt;/Symbol&gt; &lt;Value&gt;120&lt;/Value&gt; &lt;/Parameter&gt; &lt;CustomData&gt; &lt;Type&gt;http://lv2plug.in/ns/ext/atom#String&lt;/Type&gt; &lt;Key&gt;https://git.code.sf.net/p/qmidiarp#ARPPATTERN&lt;/Key&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/CustomData&gt; &lt;/Data&gt; &lt;/Plugin&gt; &lt;Plugin&gt; &lt;Info&gt; &lt;Type&gt;SFZ&lt;/Type&gt; &lt;Name&gt;percussion_-_xylophone (2)&lt;/Name&gt; &lt;Filename&gt;/home/falktx/Personal/Muzyks/Kits/SFZ/Sonatina Symphonic Orchestra/percussion_-_xylophone.sfz&lt;/Filename&gt; &lt;/Info&gt; &lt;Data&gt; &lt;Active&gt;Yes&lt;/Active&gt; &lt;ControlChannel&gt;1&lt;/ControlChannel&gt; &lt;Options&gt;0x1f0&lt;/Options&gt; &lt;CurrentProgramIndex&gt;1&lt;/CurrentProgramIndex&gt; &lt;CurrentProgramName&gt;percussion_-_xylophone&lt;/CurrentProgramName&gt; &lt;CustomData&gt; &lt;Type&gt;http://kxstudio.sf.net/ns/carla/property&lt;/Type&gt; &lt;Key&gt;CarlaSkinIsCompacted&lt;/Key&gt; &lt;Value&gt;false&lt;/Value&gt; &lt;/CustomData&gt; &lt;/Data&gt; &lt;/Plugin&gt; &lt;!-- 3D Triple Delay (Stereo) --&gt; &lt;Plugin&gt; &lt;Info&gt; &lt;Type&gt;LV2&lt;/Type&gt; &lt;Name&gt;3D Triple Delay (Stereo)&lt;/Name&gt; &lt;URI&gt;http://harrisonconsoles.com/lv2/har_delay/stereo&lt;/URI&gt; &lt;/Info&gt; &lt;Data&gt; &lt;Active&gt;Yes&lt;/Active&gt; &lt;ControlChannel&gt;1&lt;/ControlChannel&gt; &lt;Options&gt;0x0&lt;/Options&gt; &lt;Parameter&gt; &lt;Index&gt;0&lt;/Index&gt; &lt;Name&gt;Wet Mix&lt;/Name&gt; &lt;Symbol&gt;mix&lt;/Symbol&gt; &lt;Value&gt;100&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;1&lt;/Index&gt; &lt;Name&gt;Output Trim&lt;/Name&gt; &lt;Symbol&gt;out_trim&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;2&lt;/Index&gt; &lt;Name&gt;Input High Cut&lt;/Name&gt; &lt;Symbol&gt;hicut&lt;/Symbol&gt; &lt;Value&gt;18000&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;3&lt;/Index&gt; &lt;Name&gt;Input Low Cut&lt;/Name&gt; &lt;Symbol&gt;locut&lt;/Symbol&gt; &lt;Value&gt;100&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;4&lt;/Index&gt; &lt;Name&gt;Left Input&lt;/Name&gt; &lt;Symbol&gt;inputlev_l&lt;/Symbol&gt; &lt;Value&gt;-2.79999995231628&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;5&lt;/Index&gt; &lt;Name&gt;Left Output&lt;/Name&gt; &lt;Symbol&gt;level_l&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;6&lt;/Index&gt; &lt;Name&gt;Left Pan&lt;/Name&gt; &lt;Symbol&gt;pan_l&lt;/Symbol&gt; &lt;Value&gt;-90&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;7&lt;/Index&gt; &lt;Name&gt;Left Delay (16ths)&lt;/Name&gt; &lt;Symbol&gt;delay_16_l&lt;/Symbol&gt; &lt;Value&gt;2&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;8&lt;/Index&gt; &lt;Name&gt;Left Delay (fine)&lt;/Name&gt; &lt;Symbol&gt;delay_fine_l&lt;/Symbol&gt; &lt;Value&gt;11&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;9&lt;/Index&gt; &lt;Name&gt;Center Input&lt;/Name&gt; &lt;Symbol&gt;inputlev_c&lt;/Symbol&gt; &lt;Value&gt;-70&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;10&lt;/Index&gt; &lt;Name&gt;Center Output&lt;/Name&gt; &lt;Symbol&gt;level_c&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;11&lt;/Index&gt; &lt;Name&gt;Center Pan&lt;/Name&gt; &lt;Symbol&gt;pan_c&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;12&lt;/Index&gt; &lt;Name&gt;Center Delay (16ths)&lt;/Name&gt; &lt;Symbol&gt;delay_16_c&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;13&lt;/Index&gt; &lt;Name&gt;Center Delay (fine)&lt;/Name&gt; &lt;Symbol&gt;delay_fine_c&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;14&lt;/Index&gt; &lt;Name&gt;Right Input&lt;/Name&gt; &lt;Symbol&gt;inputlev_r&lt;/Symbol&gt; &lt;Value&gt;-70&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;15&lt;/Index&gt; &lt;Name&gt;Right Output&lt;/Name&gt; &lt;Symbol&gt;level_r&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;16&lt;/Index&gt; &lt;Name&gt;Right Pan&lt;/Name&gt; &lt;Symbol&gt;pan_r&lt;/Symbol&gt; &lt;Value&gt;90&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;17&lt;/Index&gt; &lt;Name&gt;Right Delay (16ths)&lt;/Name&gt; &lt;Symbol&gt;delay_16_r&lt;/Symbol&gt; &lt;Value&gt;2&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;18&lt;/Index&gt; &lt;Name&gt;Right Delay (fine)&lt;/Name&gt; &lt;Symbol&gt;delay_fine_r&lt;/Symbol&gt; &lt;Value&gt;7&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;19&lt;/Index&gt; &lt;Name&gt;Linear Feedback&lt;/Name&gt; &lt;Symbol&gt;linear_feedback&lt;/Symbol&gt; &lt;Value&gt;-17.2999992370605&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;20&lt;/Index&gt; &lt;Name&gt;Linear Damping&lt;/Name&gt; &lt;Symbol&gt;linear_damping&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;21&lt;/Index&gt; &lt;Name&gt;Feedback: LR-C-LR&lt;/Name&gt; &lt;Symbol&gt;feedback_lrc&lt;/Symbol&gt; &lt;Value&gt;-0.0399999991059303&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;22&lt;/Index&gt; &lt;Name&gt;Feedback: L-R&lt;/Name&gt; &lt;Symbol&gt;feedback_lr&lt;/Symbol&gt; &lt;Value&gt;5&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;23&lt;/Index&gt; &lt;Name&gt;Feedback Override&lt;/Name&gt; &lt;Symbol&gt;feedback_all&lt;/Symbol&gt; &lt;Value&gt;0.899999976158142&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;24&lt;/Index&gt; &lt;Name&gt;Modulation&lt;/Name&gt; &lt;Symbol&gt;modulation&lt;/Symbol&gt; &lt;Value&gt;0&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;25&lt;/Index&gt; &lt;Name&gt;BPM (User)&lt;/Name&gt; &lt;Symbol&gt;bpm&lt;/Symbol&gt; &lt;Value&gt;59.4000015258789&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;26&lt;/Index&gt; &lt;Name&gt;BPM Sync&lt;/Name&gt; &lt;Symbol&gt;bpm_sync&lt;/Symbol&gt; &lt;Value&gt;1&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;27&lt;/Index&gt; &lt;Name&gt;Snap&lt;/Name&gt; &lt;Symbol&gt;snap&lt;/Symbol&gt; &lt;Value&gt;1&lt;/Value&gt; &lt;/Parameter&gt; &lt;Parameter&gt; &lt;Index&gt;31&lt;/Index&gt; &lt;Name&gt;Oversample&lt;/Name&gt; &lt;Symbol&gt;oversample&lt;/Symbol&gt; &lt;Value&gt;1&lt;/Value&gt; &lt;/Parameter&gt; &lt;/Data&gt; &lt;/Plugin&gt; &lt;/CARLA-PROJECT&gt; </Value> </CustomData> <CustomData> <Type>http://kxstudio.sf.net/ns/carla/property</Type> <Key>CarlaSkinIsCompacted</Key> <Value>true</Value> </CustomData> </Data> </Plugin> <!-- MIDI Strum --> <Plugin> <Info> <Type>LV2</Type> <Name>MIDI Strum</Name> <URI>http://gareus.org/oss/lv2/midifilter#midistrum</URI> </Info> <Data> <Active>Yes</Active> <ControlChannel>1</ControlChannel> <Options>0x1e1</Options> <Parameter> <Index>1</Index> <Name>BPM source</Name> <Symbol>bpmsrc</Symbol> <Value>1</Value> </Parameter> <Parameter> <Index>2</Index> <Name>BPM</Name> <Symbol>bpm</Symbol> <Value>120</Value> </Parameter> <Parameter> <Index>3</Index> <Name>Strum Direction</Name> <Symbol>mode</Symbol> <Value>2</Value> </Parameter> <Parameter> <Index>4</Index> <Name>Note Collect Timeout [ms]</Name> <Symbol>collect</Symbol> <Value>15</Value> </Parameter> <Parameter> <Index>5</Index> <Name>Strum Duration in Beats</Name> <Symbol>duration</Symbol> <Value>1.39999997615814</Value> </Parameter> <Parameter> <Index>6</Index> <Name>Strum Acceleration</Name> <Symbol>adjspeed</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>7</Index> <Name>Velocity Change</Name> <Symbol>adjvelocity</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>8</Index> <Name>Randomize Acceleration</Name> <Symbol>randspeed</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>9</Index> <Name>Randomize Velocity</Name> <Symbol>randvelocity</Symbol> <Value>0</Value> </Parameter> </Data> </Plugin> <Plugin> <Info> <Type>SFZ</Type> <Name>AcousticGuitar</Name> <Filename>/home/falktx/Personal/Muzyks/Kits/SFZ/AcousticGuitarFREE Samples/AcousticGuitar.sfz</Filename> </Info> <Data> <Active>Yes</Active> <Volume>0.3500588</Volume> <ControlChannel>1</ControlChannel> <Options>0x1f0</Options> <CurrentProgramIndex>1</CurrentProgramIndex> <CurrentProgramName>AcousticGuitar</CurrentProgramName> </Data> </Plugin> </CARLA-PROJECT> system:capture_1 PulseAudio JACK Source:front-left system:capture_2 PulseAudio JACK Source:front-right PulseAudio JACK Sink:front-left system:playback_1 PulseAudio JACK Sink:front-right system:playback_2 Carla-Rack:output_1 system:playback_1 Carla-Rack:output_2 system:playback_2 Carla-2.4.2/data/presentation/lac2018/projects/4.carxp000066400000000000000000002010051420416754300222760ustar00rootroot00000000000000 false false true false 200 4000 INTERNAL MIDI Through Yes 1 0x3e0 http://kxstudio.sf.net/ns/carla/property CarlaSkinIsCompacted false LV2 MIDI Chord http://gareus.org/oss/lv2/midifilter#midichord Yes 1 0x1e1 1 Filter Channel channelf 0 2 Scale scale 0 3 prime c1 1 4 3rd c3 1 5 5th c5 1 6 6th c6 0 7 7th c7 0 8 octave c8 1 9 9th c9 0 10 11th c11 0 11 13th c13 0 12 bass _8 0 http://kxstudio.sf.net/ns/carla/property CarlaSkinIsCompacted false LV2 Pianoteq 5 http://pianoteq.com/lv2/Pianoteq5 Yes 0.7841 1 0x1e5 0 Sustain Pedal lv2_port_1 0 1 Soft Pedal lv2_port_2 0 2 Sostenuto Pedal lv2_port_3 0 3 Harmonic Pedal lv2_port_4 0 4 Pitch Bend lv2_port_5 0.5 5 Volume lv2_port_6 0.727272748947144 6 Dynamics lv2_port_7 0.393939405679703 7 Diapason lv2_port_8 0.333333343267441 8 Temperament lv2_port_9 0 9 Microtonal lv2_port_10 0 10 Octave Stretch. lv2_port_11 0.231088206171989 11 Unison Width lv2_port_12 0.5 12 Direct Sound Duration lv2_port_13 0.5 13 Hard. Piano lv2_port_14 0.150000005960464 14 Hard. Mezzo lv2_port_15 0.400000005960464 15 Hard. Forte lv2_port_16 0.800000011920929 16 Profile 1 lv2_port_17 0.5 17 Profile 2 lv2_port_18 0.5 18 Profile 3 lv2_port_19 0.5 19 Profile 4 lv2_port_20 0.5 20 Profile 5 lv2_port_21 0.5 21 Profile 6 lv2_port_22 0.5 22 Profile 7 lv2_port_23 0.5 23 Profile 8 lv2_port_24 0.5 24 Hammer Noise lv2_port_25 0.28571429848671 25 Strike Point lv2_port_26 0.551161646842957 26 Character lv2_port_27 0.5 27 Pickup Symmetry lv2_port_28 0 28 Pickup Distance lv2_port_29 0.444444477558136 29 Soft Level lv2_port_30 0.300000011920929 30 Impedance lv2_port_31 0.5 31 Cutoff lv2_port_32 0.5 32 Q Factor lv2_port_33 0.5 33 String Length lv2_port_34 0.5 34 Sympa lv2_port_35 0.5 35 Duplex lv2_port_36 0.499999970197678 36 Quadratic Effect lv2_port_37 0.569824278354645 37 Bounce Switch lv2_port_38 0 38 Bounce Delay lv2_port_39 0.458333343267441 39 Bounce Sync lv2_port_40 0 40 MBSyncS lv2_port_41 0.56521737575531 41 MBVelS lv2_port_42 0.5 42 MBAccel lv2_port_43 0.5 43 MBVelL lv2_port_44 0.5 44 MBHuma lv2_port_45 0.5 45 Eff 1 Switch lv2_port_46 1 46 Eff 1 Param 1 lv2_port_47 0.100000001490116 47 Eff 1 Param 2 lv2_port_48 0.22833614051342 48 Eff 1 Param 3 lv2_port_49 0 49 Eff 1 Param 4 lv2_port_50 0.25 50 Eff 1 Param 5 lv2_port_51 1 51 Eff 1 Param 6 lv2_port_52 0 52 Eff 1 Param 7 lv2_port_53 0 53 Eff 1 Param 8 lv2_port_54 0 54 Eff 2 Switch lv2_port_55 0 55 Eff 2 Param 1 lv2_port_56 0 56 Eff 2 Param 2 lv2_port_57 0 57 Eff 2 Param 3 lv2_port_58 0 58 Eff 2 Param 4 lv2_port_59 0 59 Eff 2 Param 5 lv2_port_60 0 60 Eff 2 Param 6 lv2_port_61 0 61 Eff 2 Param 7 lv2_port_62 0 62 Eff 2 Param 8 lv2_port_63 0 63 Eff 3 Switch lv2_port_64 0 64 Eff 3 Param 1 lv2_port_65 0 65 Eff 3 Param 2 lv2_port_66 0 66 Eff 3 Param 3 lv2_port_67 0 67 Eff 3 Param 4 lv2_port_68 0 68 Eff 3 Param 5 lv2_port_69 0 69 Eff 3 Param 6 lv2_port_70 0 70 Eff 3 Param 7 lv2_port_71 0 71 Eff 3 Param 8 lv2_port_72 0 72 Reverb Switch lv2_port_73 1 73 Reverb Duration lv2_port_74 0.273276418447495 74 Reverb Mix lv2_port_75 0.5 75 Room Dimensions lv2_port_76 0.333333343267441 76 Reverb Pre-delay lv2_port_77 0.52955836057663 77 RevEarl lv2_port_78 0.5 78 Reverb Tone lv2_port_79 0.5 79 Reverb Envelope lv2_port_80 1 80 RevRes lv2_port_81 0.5 81 Limiter Switch lv2_port_82 1 82 Limiter Sharp. lv2_port_83 0.5 83 Limiter Thresh. lv2_port_84 0.519999980926514 84 Limiter Gain lv2_port_85 0.833333313465118 85 Damper Noise lv2_port_86 0.499999970197678 86 Damper Position lv2_port_87 0.668858230113983 87 Last Damper lv2_port_88 0.7109375 88 Pedal Noise lv2_port_89 0.5 89 Key Rel. Noise lv2_port_90 0.5 90 Damping Duration lv2_port_91 0.5 91 Lid Position lv2_port_92 1 92 Output Mode lv2_port_93 0.666666686534882 93 Mic Level Comp. lv2_port_94 1 94 Mic Delay Comp. lv2_port_95 0 95 Head X position lv2_port_96 0.534999966621399 96 Head Y position lv2_port_97 0.5 97 Head Z position lv2_port_98 0.371428549289703 98 Head Diameter lv2_port_99 0.200000002980232 99 Head Angle lv2_port_100 0.5 100 Mic 1 Mic Switch lv2_port_101 1 101 Mic 1 X position lv2_port_102 0.574999988079071 102 Mic 1 Y position lv2_port_103 0.604166686534882 103 Mic 1 Z position lv2_port_104 0.428571432828903 104 Mic 1 Azimuth lv2_port_105 0 105 Mic 1 Elevation lv2_port_106 0.488764733076096 106 Mic 1 Level 1 lv2_port_107 0.837499976158142 107 Mic 1 Delay 1 lv2_port_108 0.5 108 Mic 1 Level 2 lv2_port_109 0.59375 109 Mic 1 Delay 2 lv2_port_110 0.6875 110 Mic 1 Level 3 lv2_port_111 0 111 Mic 1 Delay 3 lv2_port_112 0.5 112 Mic 1 Level 4 lv2_port_113 0 113 Mic 1 Delay 4 lv2_port_114 0.5 114 Mic 1 Level 5 lv2_port_115 0 115 Mic 1 Delay 5 lv2_port_116 0.5 116 Mic 2 Mic Switch lv2_port_117 1 117 Mic 2 X position lv2_port_118 0.574999988079071 118 Mic 2 Y position lv2_port_119 0.5625 119 Mic 2 Z position lv2_port_120 0.428571432828903 120 Mic 2 Azimuth lv2_port_121 0.625 121 Mic 2 Elevation lv2_port_122 0.488764733076096 122 Mic 2 Level 1 lv2_port_123 0.59375 123 Mic 2 Delay 1 lv2_port_124 0.75 124 Mic 2 Level 2 lv2_port_125 0.837499976158142 125 Mic 2 Delay 2 lv2_port_126 0.509375035762787 126 Mic 2 Level 3 lv2_port_127 0 127 Mic 2 Delay 3 lv2_port_128 0.5 128 Mic 2 Level 4 lv2_port_129 0 129 Mic 2 Delay 4 lv2_port_130 0.5 130 Mic 2 Level 5 lv2_port_131 0 131 Mic 2 Delay 5 lv2_port_132 0.5 132 Mic 3 Mic Switch lv2_port_133 0 133 Mic 3 X position lv2_port_134 0.596000015735626 134 Mic 3 Y position lv2_port_135 0.429999977350235 135 Mic 3 Z position lv2_port_136 0.262857139110565 136 Mic 3 Azimuth lv2_port_137 0.75 137 Mic 3 Elevation lv2_port_138 0.5 138 Mic 3 Level 1 lv2_port_139 0.512499988079071 139 Mic 3 Delay 1 lv2_port_140 0.5 140 Mic 3 Level 2 lv2_port_141 0.512499988079071 141 Mic 3 Delay 2 lv2_port_142 0.5 142 Mic 3 Level 3 lv2_port_143 0 143 Mic 3 Delay 3 lv2_port_144 0.5 144 Mic 3 Level 4 lv2_port_145 0 145 Mic 3 Delay 4 lv2_port_146 0.5 146 Mic 3 Level 5 lv2_port_147 0 147 Mic 3 Delay 5 lv2_port_148 0.5 148 Mic 4 Mic Switch lv2_port_149 0 149 Mic 4 X position lv2_port_150 0.465000003576279 150 Mic 4 Y position lv2_port_151 0.531666696071625 151 Mic 4 Z position lv2_port_152 0.251428574323654 152 Mic 4 Azimuth lv2_port_153 0.5 153 Mic 4 Elevation lv2_port_154 0.5 154 Mic 4 Level 1 lv2_port_155 0.512499988079071 155 Mic 4 Delay 1 lv2_port_156 0.5 156 Mic 4 Level 2 lv2_port_157 0.512499988079071 157 Mic 4 Delay 2 lv2_port_158 0.5 158 Mic 4 Level 3 lv2_port_159 0 159 Mic 4 Delay 3 lv2_port_160 0.5 160 Mic 4 Level 4 lv2_port_161 0 161 Mic 4 Delay 4 lv2_port_162 0.5 162 Mic 4 Level 5 lv2_port_163 0 163 Mic 4 Delay 5 lv2_port_164 0.5 164 Mic 5 Mic Switch lv2_port_165 0 165 Mic 5 X position lv2_port_166 0.577000021934509 166 Mic 5 Y position lv2_port_167 0.569999992847443 167 Mic 5 Z position lv2_port_168 0.502857148647308 168 Mic 5 Azimuth lv2_port_169 0.5 169 Mic 5 Elevation lv2_port_170 0.5 170 Mic 5 Level 1 lv2_port_171 0.512499988079071 171 Mic 5 Delay 1 lv2_port_172 0.5 172 Mic 5 Level 2 lv2_port_173 0.512499988079071 173 Mic 5 Delay 2 lv2_port_174 0.5 174 Mic 5 Level 3 lv2_port_175 0 175 Mic 5 Delay 3 lv2_port_176 0.5 176 Mic 5 Level 4 lv2_port_177 0 177 Mic 5 Delay 4 lv2_port_178 0.5 178 Mic 5 Level 5 lv2_port_179 0 179 Mic 5 Delay 5 lv2_port_180 0.5 180 Stereo Width lv2_port_181 0.674031317234039 181 Sound Speed lv2_port_182 0.500000059604645 182 Mute lv2_port_183 0 183 Clavinet Low Mic lv2_port_184 1 184 ClvMicH lv2_port_185 1 185 Equalizer Switch lv2_port_186 1 186 HTinNois lv2_port_187 0.5 187 Blooming Energy lv2_port_188 0 188 Blooming Inertia lv2_port_189 0.5 189 Aftertouch lv2_port_190 0 190 Wall distance lv2_port_191 0 191 Unison Balance lv2_port_192 0.5 192 Condition lv2_port_193 0 193 Condition Seed lv2_port_194 0.12341234087944 194 Rattle Pedal lv2_port_195 0 195 Lute Stop Pedal lv2_port_196 0 196 Celeste Pedal lv2_port_197 0 197 Super Sostenuto lv2_port_198 0 http://lv2plug.in/ns/ext/atom#Chunk urn:juce:stateBinary UHJWSxQAAAJYRlRQpBsAAAoAAAAyMDE3LzExLzA0FwAAAFBpYW5vdGVxIDUuMy4wLzIwMTUwNzE1o9QvMCuNhmEarickC02mrGRsbGFjGwAAdGR0TXIGAAARAAAARDQgRGFpbHkgUHJhY3RpY2UAAAAAGgAAAENvcHlyaWdodCAoYykgMjAxNSBNb2RhcnR0hwAAAFRoaXMgcHJlc2V0IG9mZmVycyBhIGNsZWFuIHNvdW5kLCB5b3UgbWF5IGxpa2UgdG8gdXNlIGl0IGZvciB5b3VyIGRhaWx5IHByYWN0aWNlLiBBbHNvIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgcHJlcGFyaW5nIG5ldyBwcmVzZXRzLgAAAACEAAAAEQAAAEQ0IERhaWx5IFByYWN0aWNlAAAAAIsFAABHUlVVAAAABgAAAAEDwE1UcmsAAAV1AP8CDyBQaWV0IERlIFJpZGRlcgCQKil4gCpVBpArJIMxgCsNaJAkKoIHgCQcMpA3LYEJgDdPgmaQPDGBToA8RVaQKyoFPzuBTIA/bFaQQy8qNyCBGIBDUgQ3K0orJYERkD80CCUlcoA/Wz0lTVKQQisIJiKBOoBCSoEskDkhghSAOUqBICYbNJA+MINMLUKBIoAtSoJCkDI9gVeAMjtCkCsyQoA+bIMlkDItghwvPCCAK2kKMi19L09FkDpPCjVKgVWAOmMbkDs+CYA1IoImO0AEkDw4gSuAPGlHkEFBFDI5gSKAMmZYkDhQgk0kSoJXgDhggSaQNz4GP083gEFFgxYkCSiQMEGBcoA3QB6QK0EqgDA2Zz9dfJAwOFKAKwUcMFKBAJAkUIEggCRjbZA8RYFwgDxmB5A/MYIJQVkGgD9yFJAwQoFggEFveTAFfpBCZoE5gEJSLpBDVFIwLXeAQ2k6kERPgR6AME81RGk5kEVGBCYxhBIwLiiAJm+BaZBDVS+ARVuCQjA0YZBEWgyAQ00AkC1BBTA2gR2AMF0ARGxVkEVeEjAdgRaAMGAtRWktkEZbCSo3UIAtNBxGYzQqYFSQR0wNKzGBeIBHLQmQQSCBcIBBWx2QQiqBSIBCWwkrGUyQQ1UIMkaBMYAyYCVDbIF2kEttgQyAS2OCZZAvPQ1KXoEzgEpFWy9pBpBIPAQwOYFugEhpMDA9gTaQJC+BQ4AkJ2eQQ2OBSIBDRYIpkEJVCjBVcoBCZoEEkENFaoAwIYEEkCstEkZFIYBDY4EmRmkCK0U3kChKBUhbggmASGMZkEZCHYAoSoELRjiCPpA0TQA6RwBATzkiNIFZgDpsWjRsRUBsPSIyGJAoRoF7LlBPgChsgSOQPV+BNIA9WwkuZkWQPkULKUWBYYA+YCSQPC6BV4A8VYFkKUdIkDhLHDA2gx+AOGwhkDdZgRqAMGkyN1sukDVQCyxUgSyALFgvNWANkDdGEDA9gU+AN2AIMEookCZPAjhFgS+AOG9XkDkvggQ8LCCAORxJJlWBJ5A/SwiAPGkPkDBQgSuAMEUukEJgEjAJD4A/aWxCbzswSjqQRWgtMBJjgEVsEjBmV5BEViYqRoFYQ1AzgERNIENjHypmgQWQQkoTK0KBHoBCaVCQQzmBNYBDYEaQRE9/gERpRitYTpBFaAYvU4F/gEVsSC82gRmQMloARmeBO4BGbCuQR0w8gDIYgUKQL0qBL4AvXQRHYz2QSFsHMGaBX4BIbA0wWxKQS28bM2hQgEtsgQczW4FSkEhVADBkgQGASGBlMEIokENpEStMgSCAQ2A7K2ZQkCc4BD9FgTeAJz0NP2aBNZBDVgAra4EggENjbpAnSwI/PBWAK1V9P0ceJ2ZOkCZNAj48gTOAPi07kCo4AEJAboAmUhRCPSUqW1SQRWQTLVUALxSBB4BFaUYvbBQtZoF/kCxqBERqgUOARGktLGmBXJAqYQdCZ4ExgEJsISpvM5ArWgJDVoExgCtvE0NmghqQRmEEQV8EK1g5R18agEZyc0FmPStVH0dggVOQMmcJSmoCQWmCD4BBJ0gyQhVKY4QbkDA6gXAzPiWAMACBcJA3K4EcgDcALzMAHZA8U4F/gDwACpA/U4FsQ1IQgD8AgUJDAB6QSEqBEYBIAHqQSzuCHIBLAAOQT1CBVIBPAIJPkFBjCCtcB0piAjdkBFNggVCASgARUAAAUwBjNwACKwCCVZAkZwIwZAhPYgNIVwRUYxJLXwArYAVRXIELgCsAE1QABCQAC1EAJ0sAMTAAEU8AgQ0kQAArQAAwQAAzQAA3QAA8QAA/QABDQABIQABKQABLQABPQABQQABRQABTQABUQAD/LwBQcnNV4RQAACoAAAACAAAAZDQAAAAACAAAAEdyYW5kIEQ0AAAAAAMAAAADAAAAAACoQQAAcEIAANhCAwAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAEAAAAAAAAA3H8iPgMAAAAKAAAAAACoQQAA6EEAABhCAAAgQgAAJEIAACxCAABgQgAAkkIAAJRCAAC2QgoAAABhpkk/CNJOPwnMaT94/Fw/WUNUPzMOYD8dCIA/jz6zP48+sz+PPrM/AAAAAAAAtkIAAAAAAwAAAAEAAAAAAHBCAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAACgwAAAoEAAAAAAAwAAAAIAAAAAAKhBAADYQgIAAAAAAAAAAAAAAAAAAAADAAAAAgAAAAAAqEEAANhCAgAAAAAAgD8AAIA/AAAAAIAAAAAAAAAA0gQAAAAAgD8DAAAAAQAAAAAAcEIBAAAAAAAAAAAAAAADAAAAaQAAAAAAEEEAACBBAAAwQQAAQEEAAFBBAABgQQAAcEEAAIBBAACIQQAAkEEAAJhBAACgQQAAqEEAALBBAAC4QQAAwEEAAMhBAADQQQAA2EEAAOBBAADoQQAA8EEAAPhBAAAAQgAABEIAAAhCAAAMQgAAEEIAABRCAAAYQgAAHEIAACBCAAAkQgAAKEIAACxCAAAwQgAANEIAADhCAAA8QgAAQEIAAERCAABIQgAATEIAAFBCAABUQgAAWEIAAFxCAABgQgAAZEIAAGhCAABsQgAAcEIAAHRCAAB4QgAAfEIAAIBCAACCQgAAhEIAAIZCAACIQgAAikIAAIxCAACOQgAAkEIAAJJCAACUQgAAlkIAAJhCAACaQgAAnEIAAJ5CAACgQgAAokIAAKRCAACmQgAAqEIAAKpCAACsQgAArkIAALBCAACyQgAAtEIAALZCAAC4QgAAukIAALxCAAC+QgAAwEIAAMJCAADEQgAAxkIAAMhCAADKQgAAzEIAAM5CAADQQgAA0kIAANRCAADWQgAA2EIAANpCAADcQgAA3kIAAOBCAADiQmkAAAAAAADAAACAvwAAQMAAAEDAAABAQAAAAEAAAMBAAACAPwAAgD8AAMBAAABAQAAAgEAAAADAAABAwAAAgEAAAIBAAACgQAAAwEAAAIBAAAAAgAAAgD8AAADAAACAPwAAQMAAAEDAAABAQAAAgEAAAKBAAACgQAAAQMAAAKBAAAAAgAAAAEAAAEDAAACgQAAAoEAAAEBAAACAQAAAAEAAAADAAACAPwAAgEAAAABAAACgQAAAQEAAAEDAAAAAgAAAgEAAAEDAAAAAgAAAgD8AAIC/AABAwAAAoEAAAEDAAAAAwAAAAIAAAACAAACgQAAAQMAAAADAAACAvwAAQMAAAEDAAACgQAAAAMAAAEDAAABAwAAAgEAAAIA/AABAwAAAgEAAAAAAAACAQAAAgL8AAABAAACgQAAAQMAAAIC/AAAAwAAAwEAAAKBAAABAwAAAQMAAAADAAACAPwAAQMAAAEDAAACAvwAAgL8AAMBAAACAQAAAQMAAAAAAAAAAAAAAgD8AAEDAAAAAwAAAwEAAAEDAAADAQAAAQMAAAEDAAABAwAAAAEAAAAAAAwAAAAIAAAAAAKhBAADYQgIAAAAAAIA/AACAPwAAAAAAANxDAAAAAAEAAAAAAAAABwAAAERlZmF1bHQMAAAAAADIQgAASEMAAJZDAADIQwAA+kMAABZEAAAvRAAASEQAAGFEAAB6RACAiUQAAJZEAQAAAAAA3EM8AAAARQAAAAAAAAAAAAAABwAAAERlZmF1bHQDAAAABAAAAAAAwEEAABBCAABAQgAA2EIEAAAAAACgwAAAgL8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgD8AAIA/AwAAAAIAAAAAAKhBAADYQgIAAAAAAIA/AACAPwAAAAADAAAAAgAAAAAAqEEAANhCAgAAAAAAgD8AAIA/AAAAAAAAAAADAAAAAQAAAAAAcEIBAAAAAAAAAAAAAAAAAIA/AwAAAAEAAAAAAHBCAQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAzczMvc3MzD0BAAAAAAAAAAAAAAAAAAC/AAAAPwAAgD8DAAAAAwAAAAAAqEEAAHBCAADYQgMAAAAAAIA/AACAPwAAgD8AAAAAAAAAAAMAAAACAAAAAACoQQAA2EICAAAAAAAAAAAAAAAAAAAAAACAPwMAAAACAAAAAACoQQAA2EICAAAAAACAPwAAgD8AAAAAAAAgQgMAAAAHAAAAAACoQQAAkEIAAKhCAAC0QgAAwEIAAMhCAADYQgcAAAAAAAAAAAAAAAAAQEAAAMBAAAAQQQAAIEEAADBBAAAAAAAAgD8DAAAAAwAAAAAAqEEAAHBCAADYQgMAAAAAAIA/AACAPwAAgD8AAAAAAwAAAAAAAAABAAAAAAAAAAAAAAABAAAAAwAAAAIAAAAAAAAAAACAPwIAAAAAAAAAAACAPwAAAAADAAAAAgAAAAAAAAAAAIA/AgAAAAAAgD8AAIA/AAAAAAMAAAAEAAAAAAAAACaTST7+fj8/AACAPwQAAAAAAAAAAAAAAAAAgD8AAIA/AAAAAAMAAAACAAAAAAAAAAAAgD8CAAAAAAAAAAAAAAAAAAAAzcwsQAMAAAACAAAAAACoQQAA2EICAAAAAACAPwAAgD8AAAAAAACAvwAAAD8DAAAAAgAAAAAAwEEAAMBCAgAAAAAAgD8AAIA/AAAAAAEAAAABAAAAAQAAAAoAAABTbWFsbCBIYWxsCwAAAG1lZGl1bWhhbGwxAAAAAAAAoEEAAIA/ZmZmPwAAAABCYGU9AAAAAAAAAAAAAAAAAACqQwAAgD8AAIA/BQAAAAAAgD8AAIA/AwAAAF0AAAAAAKhBAACwQQAAuEEAAMBBAADIQQAA0EEAANhBAADgQQAA6EEAAPBBAAD4QQAAAEIAAARCAAAIQgAADEIAABBCAAAUQgAAGEIAABxCAAAgQgAAJEIAAChCAAAsQgAAMEIAADRCAAA4QgAAPEIAAEBCAABEQgAASEIAAExCAABQQgAAVEIAAFhCAABcQgAAYEIAAGRCAABoQgAAbEIAAHBCAAB0QgAAeEIAAHxCAACAQgAAgkIAAIRCAACGQgAAiEIAAIpCAACMQgAAjkIAAJBCAACSQgAAlEIAAJZCAACYQgAAmkIAAJxCAACeQgAAoEIAAKJCAACkQgAApkIAAKhCAACqQgAArEIAAK5CAACwQgAAskIAALRCAAC2QgAAuEIAALpCAAC8QgAAvkIAAMBCAADCQgAAxEIAAMZCAADIQgAAykIAAMxCAADOQgAA0EIAANJCAADUQgAA1kIAANhCAADaQgAA3EIAAN5CAADgQgAA4kJdAAAAAACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD9xPYo/heuRP/YonD/sUZg/j8KVP3E9ij+amZk/j8KVP3sUjj+PwpU/mpmZP7gepT/NzIw/CtejP1K4nj+amZk/16OQP9ejkD+4HqU/KVyPP+F6lD89Cpc/exSOP4/ClT9I4Zo/exSuP65HoT8AAIA/KVyPP1K4nj8AAIA/4XqUP1yPoj/sUZg/XI+iPx+Fqz+kcJ0/MzOzP3sUrj+uR6E/SOGaP3E9ij9cj6I/w/WIP+xRmD/NzIw/FK6HPx+Fiz/sUZg/UrieP3sUjj+uR6E/KVyPP5qZmT9cj6I/CtejP2Zmpj+kcJ0/MzOTP4/CtT9SuJ4/mpmZP5qZuT+4HqU/AACgP83MrD+ambk/pHCdP0jhmj/NzKw/PQqXPylcjz/D9ag/PQqXP6RwnT+amZk/cT2qP0jhmj9SuJ4/UrieP0jhmj97FK4/4XqUP/YonD+kcJ0/AAAAAAMAAAADAAAAAACoQQAAcEIAANhCAwAAAAAAgD8AAIA/AACAPwAAAAAAAAAAAwAAAF0AAAAAAKhBAACwQQAAuEEAAMBBAADIQQAA0EEAANhBAADgQQAA6EEAAPBBAAD4QQAAAEIAAARCAAAIQgAADEIAABBCAAAUQgAAGEIAABxCAAAgQgAAJEIAAChCAAAsQgAAMEIAADRCAAA4QgAAPEIAAEBCAABEQgAASEIAAExCAABQQgAAVEIAAFhCAABcQgAAYEIAAGRCAABoQgAAbEIAAHBCAAB0QgAAeEIAAHxCAACAQgAAgkIAAIRCAACGQgAAiEIAAIpCAACMQgAAjkIAAJBCAACSQgAAlEIAAJZCAACYQgAAmkIAAJxCAACeQgAAoEIAAKJCAACkQgAApkIAAKhCAACqQgAArEIAAK5CAACwQgAAskIAALRCAAC2QgAAuEIAALpCAAC8QgAAvkIAAMBCAADCQgAAxEIAAMZCAADIQgAAykIAAMxCAADOQgAA0EIAANJCAADUQgAA1kIAANhCAADaQgAA3EIAAN5CAADgQgAA4kJdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxmuW8SOFIvRdVB71AGWE80EJ4vV/YST2wNkm93jniudhVqr0uuGu9OCETOtdjgLwW24S9RFIFPaiJjzyCl7C67ryqPZLitb218bo92mxJPUMvoT3kFqu7vQhvvQR/oL3X3K292xWdPYeDQz28BZW9MjXGPNl7sb1R4a68jIzyPHT/wT1b5ja7ZmKPuhApuj3cZ7M9IC6aPaW0Er3O34W8jcm2PFJHqDxKNLo9cuRnvbkagD3/Na291GWdPYkdXTw2jls9rlyQvTrpXb1gYKE8fIdGPRFnCj2OWQM9G/zWO8bUsbxXGHs9ARhlvR18wjwzmiS9TzBSvUlvOr33Tk49bNO2Pcm2J70VS6U9PV6dPUUter0+pHg9leXfvB3hl7wlwYw9fkrZOWb3xz1aWSE9lUvOPAMPnL3ammu9bMGSPSgz8Dwlv7O97aNfPUb8jj2w+UC9AAAAAAMAAAAAAIA/AACAPwAAgD8DAAAAAwAAAAAAqEEAAHBCAADYQgMAAAAAAIA/AACAPwAAgD8AAAAAAwAAAAMAAAAAAKhBAABwQgAA2EIDAAAAAACAPwAAgD8AAIA/AAAAAAMAAAADAAAAAACoQQAAcEIAANhCAwAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwYAAAAAAIA/mpmZPs3MTD/NzMw/mpmZPggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAADAAAAAACoQQAAcEIAANhCAwAAAAAAgD8AAIA/AACAPwAAAAADAAAAAwAAAAAAqEEAAHBCAADYQgMAAAAAAIA/AACAPwAAgD8AAAAAAwAAAAMAAAAAAKhBAABwQgAA2EIDAAAAAACAPwAAgD8AAIA/AAAAAAMAAAADAAAAAACoQQAAcEIAANhCAwAAAAAAgD8AAIA/AACAPwAAAAABAAAAAQAAAAAAcEIDAAAAAQAAAAAAAAABAAAAAAAAAAAAAABOI9g9AwAAABYAAAAAABBBAACoQQAAwEEAAOBBAADoQQAAAEIAAAhCAAAYQgAAJEIAADBCAABAQgAATEIAAGBCAABwQgAAgEIAAIhCAACQQgAAmEIAAKBCAACoQgAAwEIAANhCFgAAAHh0JD/p5Y8/DGGSP3jylD9Ng5Q/TYOUP02DlD9Ng5Q/6oqRP02DlD9Ng5Q/6oqRP1mwjj/qipE/WbCOP1mwjj9ZsI4/54RcP+eEXD9+JEo/2kMtPzGS8j4AAAAAAQAAAAAAAAABAAAAMzMzP2Zmpj8BAAAAAQAAAAEAAABmZmY/zcyMPwEAAAAAAAAAAADwQgAAAAAOAAAAAAAAP83MzD3NzEw+AAAAPwQAAAACAAAAAwAAAAQAAAABAAAAAgAAAAcAAAABAAAAAAAAAA4AAAAQAAAAAAAAAM3MzD0AAIA/AAAAAAAAAL8AAHBCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAOAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAADgAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAAAIA/AABAwQAAAAACAAAAAwAAAAEAAAAFAAAABAAAAAEAAAADAAAAAADAPwAAoD8AAMA/AABhwxxugcAAAAAABQAAAAAAAAAAABDBAADAwgAAwMIAAMDCBQAAAAAAAACPwvU8AAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAEAAAAAQAAAAMAAAAAAMA/AABAPwAAwD8AADRCHG6BwAAAAAAFAAAAAAAQwQAAAAAAAMDCAADAwgAAwMIFAAAACtcjPaabxDoAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAQAAAAAAAAAAwAAAI/C9T89Cle/H4VrPwAAtEIAAAAAAAAAAAUAAAAAAEDBAABAwQAAcMIAAHDCAABwwgUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAABAAAAAAAAAADAAAAMzMzv1yPwj6uR2E/AAAAAAAAAAAAAAAABQAAAAAAQMEAAEDBAABwwgAAcMIAAHDCBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAEAAAAAAAAAAMAAAC4HsU/PQpXP65H4T8AAAAAAAAAAAAAAAAFAAAAAABAwQAAQMEAAHDCAABwwgAAcMIFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAMAAAAzMzM/AAAAAGZmpj8AAJBBAAAAAAAAAAAAAAAA http://kxstudio.sf.net/ns/carla/property CarlaSkinIsCompacted false INTERNAL Carla-Rack (no midi out) Yes 1 0x3e0 http://kxstudio.sf.net/ns/carla/chunk State <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE CARLA-PROJECT> <CARLA-PROJECT VERSION='2.0'> <EngineSettings> <ForceStereo>false</ForceStereo> <PreferPluginBridges>false</PreferPluginBridges> <PreferUiBridges>true</PreferUiBridges> <UIsAlwaysOnTop>false</UIsAlwaysOnTop> <MaxParameters>200</MaxParameters> <UIBridgesTimeout>4000</UIBridgesTimeout> <LADSPA_PATH>/home/falktx/.ladspa:/usr/lib/ladspa:/usr/local/lib/ladspa</LADSPA_PATH> <DSSI_PATH>/home/falktx/.dssi:/usr/lib/dssi:/usr/local/lib/dssi</DSSI_PATH> <LV2_PATH>/home/falktx/.lv2:/usr/lib/lv2:/usr/local/lib/lv2</LV2_PATH> <VST2_PATH>/home/falktx/.vst:/usr/lib/vst:/usr/local/lib/vst</VST2_PATH> <GIG_PATH>/home/falktx/.sounds/gig:/usr/share/sounds/gig</GIG_PATH> <SF2_PATH>/home/falktx/.sounds/sf2:/home/falktx/Personal/Muzyks/Kits/SoundFonts:/usr/share/sounds/sf2</SF2_PATH> <SFZ_PATH>/home/falktx/.sounds/sfz:/home/falktx/Personal/Muzyks/Kits/SFZ:/usr/share/sounds/sfz</SFZ_PATH> </EngineSettings> <!-- QMidiArp Arp --> <Plugin> <Info> <Type>LV2</Type> <Name>QMidiArp Arp</Name> <URI>https://git.code.sf.net/p/qmidiarp/arp</URI> </Info> <Data> <Active>Yes</Active> <ControlChannel>1</ControlChannel> <Options>0x1e1</Options> <Parameter> <Index>0</Index> <Name>Attack</Name> <Symbol>ATTACK</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>1</Index> <Name>Release</Name> <Symbol>RELEASE</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>2</Index> <Name>Random Tick</Name> <Symbol>RANDOM_TICK</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>3</Index> <Name>Random Length</Name> <Symbol>RANDOM_LEN</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>4</Index> <Name>Random Velocity</Name> <Symbol>RANDOM_VEL</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>5</Index> <Name>Output Channel</Name> <Symbol>CH_OUT</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>6</Index> <Name>Input Channel</Name> <Symbol>CH_IN</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>8</Index> <Name>Restart</Name> <Symbol>ENABLE_RESTARTBYKBD</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>9</Index> <Name>Trigger</Name> <Symbol>ENABLE_TRIGBYKBD</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>10</Index> <Name>Mute Output</Name> <Symbol>MUTE</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>11</Index> <Name>Latch mode</Name> <Symbol>LATCH_MODE</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>12</Index> <Name>Octave Mode</Name> <Symbol>OCTAVE_MODE</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>13</Index> <Name>Low octave limit</Name> <Symbol>OCTAVE_LOW</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>14</Index> <Name>High octave limit</Name> <Symbol>OCTAVE_HIGH</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>15</Index> <Name>Index In 1</Name> <Symbol>INDEX_IN1</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>16</Index> <Name>Index In 2</Name> <Symbol>INDEX_IN2</Symbol> <Value>127</Value> </Parameter> <Parameter> <Index>17</Index> <Name>Range In 1</Name> <Symbol>RANGE_IN1</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>18</Index> <Name>Range In 2</Name> <Symbol>RANGE_IN2</Symbol> <Value>127</Value> </Parameter> <Parameter> <Index>19</Index> <Name>Trigger Legato</Name> <Symbol>ENABLE_TRIGLEGATO</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>20</Index> <Name>Repeat Mode</Name> <Symbol>REPEAT_MODE</Symbol> <Value>1</Value> </Parameter> <Parameter> <Index>22</Index> <Name>Defer mute</Name> <Symbol>DEFER</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>23</Index> <Name>Pattern Preset</Name> <Symbol>PATTERN_PRESET</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>24</Index> <Name>Transport Mode</Name> <Symbol>TRANSPORT_MODE</Symbol> <Value>1</Value> </Parameter> <Parameter> <Index>25</Index> <Name>Internal Tempo</Name> <Symbol>TEMPO</Symbol> <Value>120</Value> </Parameter> <CustomData> <Type>http://lv2plug.in/ns/ext/atom#String</Type> <Key>https://git.code.sf.net/p/qmidiarp#ARPPATTERN</Key> <Value>&gt;0</Value> </CustomData> </Data> </Plugin> <Plugin> <Info> <Type>SFZ</Type> <Name>concert_harp</Name> <Filename>/home/falktx/Personal/Muzyks/Kits/SFZ/Sonatina Symphonic Orchestra/concert_harp.sfz</Filename> </Info> <Data> <Active>Yes</Active> <ControlChannel>1</ControlChannel> <Options>0x1f0</Options> <CurrentProgramIndex>1</CurrentProgramIndex> <CurrentProgramName>concert_harp</CurrentProgramName> </Data> </Plugin> </CARLA-PROJECT> http://kxstudio.sf.net/ns/carla/property CarlaSkinIsCompacted false INTERNAL Carla-Rack (no midi out) (2) Yes 1 0x3e0 http://kxstudio.sf.net/ns/carla/chunk State <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE CARLA-PROJECT> <CARLA-PROJECT VERSION='2.0'> <EngineSettings> <ForceStereo>false</ForceStereo> <PreferPluginBridges>false</PreferPluginBridges> <PreferUiBridges>true</PreferUiBridges> <UIsAlwaysOnTop>false</UIsAlwaysOnTop> <MaxParameters>200</MaxParameters> <UIBridgesTimeout>4000</UIBridgesTimeout> <LADSPA_PATH>/home/falktx/.ladspa:/usr/lib/ladspa:/usr/local/lib/ladspa</LADSPA_PATH> <DSSI_PATH>/home/falktx/.dssi:/usr/lib/dssi:/usr/local/lib/dssi</DSSI_PATH> <LV2_PATH>/home/falktx/.lv2:/usr/lib/lv2:/usr/local/lib/lv2</LV2_PATH> <VST2_PATH>/home/falktx/.vst:/usr/lib/vst:/usr/local/lib/vst</VST2_PATH> <GIG_PATH>/home/falktx/.sounds/gig:/usr/share/sounds/gig</GIG_PATH> <SF2_PATH>/home/falktx/.sounds/sf2:/home/falktx/Personal/Muzyks/Kits/SoundFonts:/usr/share/sounds/sf2</SF2_PATH> <SFZ_PATH>/home/falktx/.sounds/sfz:/home/falktx/Personal/Muzyks/Kits/SFZ:/usr/share/sounds/sfz</SFZ_PATH> </EngineSettings> <!-- QMidiArp Arp --> <Plugin> <Info> <Type>LV2</Type> <Name>QMidiArp Arp</Name> <URI>https://git.code.sf.net/p/qmidiarp/arp</URI> </Info> <Data> <Active>Yes</Active> <ControlChannel>1</ControlChannel> <Options>0x1e1</Options> <Parameter> <Index>0</Index> <Name>Attack</Name> <Symbol>ATTACK</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>1</Index> <Name>Release</Name> <Symbol>RELEASE</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>2</Index> <Name>Random Tick</Name> <Symbol>RANDOM_TICK</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>3</Index> <Name>Random Length</Name> <Symbol>RANDOM_LEN</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>4</Index> <Name>Random Velocity</Name> <Symbol>RANDOM_VEL</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>5</Index> <Name>Output Channel</Name> <Symbol>CH_OUT</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>6</Index> <Name>Input Channel</Name> <Symbol>CH_IN</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>8</Index> <Name>Restart</Name> <Symbol>ENABLE_RESTARTBYKBD</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>9</Index> <Name>Trigger</Name> <Symbol>ENABLE_TRIGBYKBD</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>10</Index> <Name>Mute Output</Name> <Symbol>MUTE</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>11</Index> <Name>Latch mode</Name> <Symbol>LATCH_MODE</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>12</Index> <Name>Octave Mode</Name> <Symbol>OCTAVE_MODE</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>13</Index> <Name>Low octave limit</Name> <Symbol>OCTAVE_LOW</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>14</Index> <Name>High octave limit</Name> <Symbol>OCTAVE_HIGH</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>15</Index> <Name>Index In 1</Name> <Symbol>INDEX_IN1</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>16</Index> <Name>Index In 2</Name> <Symbol>INDEX_IN2</Symbol> <Value>127</Value> </Parameter> <Parameter> <Index>17</Index> <Name>Range In 1</Name> <Symbol>RANGE_IN1</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>18</Index> <Name>Range In 2</Name> <Symbol>RANGE_IN2</Symbol> <Value>127</Value> </Parameter> <Parameter> <Index>19</Index> <Name>Trigger Legato</Name> <Symbol>ENABLE_TRIGLEGATO</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>20</Index> <Name>Repeat Mode</Name> <Symbol>REPEAT_MODE</Symbol> <Value>1</Value> </Parameter> <Parameter> <Index>22</Index> <Name>Defer mute</Name> <Symbol>DEFER</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>23</Index> <Name>Pattern Preset</Name> <Symbol>PATTERN_PRESET</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>24</Index> <Name>Transport Mode</Name> <Symbol>TRANSPORT_MODE</Symbol> <Value>1</Value> </Parameter> <Parameter> <Index>25</Index> <Name>Internal Tempo</Name> <Symbol>TEMPO</Symbol> <Value>120</Value> </Parameter> <CustomData> <Type>http://lv2plug.in/ns/ext/atom#String</Type> <Key>https://git.code.sf.net/p/qmidiarp#ARPPATTERN</Key> <Value>-0</Value> </CustomData> </Data> </Plugin> <Plugin> <Info> <Type>SFZ</Type> <Name>percussion_-_xylophone</Name> <Filename>/home/falktx/Personal/Muzyks/Kits/SFZ/Sonatina Symphonic Orchestra/percussion_-_xylophone.sfz</Filename> </Info> <Data> <Active>Yes</Active> <ControlChannel>1</ControlChannel> <Options>0x1f0</Options> <CurrentProgramIndex>1</CurrentProgramIndex> <CurrentProgramName>percussion_-_xylophone</CurrentProgramName> </Data> </Plugin> <!-- 3D Triple Delay (Stereo) --> <Plugin> <Info> <Type>LV2</Type> <Name>3D Triple Delay (Stereo)</Name> <URI>http://harrisonconsoles.com/lv2/har_delay/stereo</URI> </Info> <Data> <Active>Yes</Active> <ControlChannel>1</ControlChannel> <Options>0x1</Options> <Parameter> <Index>0</Index> <Name>Wet Mix</Name> <Symbol>mix</Symbol> <Value>100</Value> </Parameter> <Parameter> <Index>1</Index> <Name>Output Trim</Name> <Symbol>out_trim</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>2</Index> <Name>Input High Cut</Name> <Symbol>hicut</Symbol> <Value>18000</Value> </Parameter> <Parameter> <Index>3</Index> <Name>Input Low Cut</Name> <Symbol>locut</Symbol> <Value>100</Value> </Parameter> <Parameter> <Index>4</Index> <Name>Left Input</Name> <Symbol>inputlev_l</Symbol> <Value>-2.79999995231628</Value> </Parameter> <Parameter> <Index>5</Index> <Name>Left Output</Name> <Symbol>level_l</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>6</Index> <Name>Left Pan</Name> <Symbol>pan_l</Symbol> <Value>-90</Value> </Parameter> <Parameter> <Index>7</Index> <Name>Left Delay (16ths)</Name> <Symbol>delay_16_l</Symbol> <Value>2</Value> </Parameter> <Parameter> <Index>8</Index> <Name>Left Delay (fine)</Name> <Symbol>delay_fine_l</Symbol> <Value>11</Value> </Parameter> <Parameter> <Index>9</Index> <Name>Center Input</Name> <Symbol>inputlev_c</Symbol> <Value>-70</Value> </Parameter> <Parameter> <Index>10</Index> <Name>Center Output</Name> <Symbol>level_c</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>11</Index> <Name>Center Pan</Name> <Symbol>pan_c</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>12</Index> <Name>Center Delay (16ths)</Name> <Symbol>delay_16_c</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>13</Index> <Name>Center Delay (fine)</Name> <Symbol>delay_fine_c</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>14</Index> <Name>Right Input</Name> <Symbol>inputlev_r</Symbol> <Value>-70</Value> </Parameter> <Parameter> <Index>15</Index> <Name>Right Output</Name> <Symbol>level_r</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>16</Index> <Name>Right Pan</Name> <Symbol>pan_r</Symbol> <Value>90</Value> </Parameter> <Parameter> <Index>17</Index> <Name>Right Delay (16ths)</Name> <Symbol>delay_16_r</Symbol> <Value>2</Value> </Parameter> <Parameter> <Index>18</Index> <Name>Right Delay (fine)</Name> <Symbol>delay_fine_r</Symbol> <Value>7</Value> </Parameter> <Parameter> <Index>19</Index> <Name>Linear Feedback</Name> <Symbol>linear_feedback</Symbol> <Value>-17.2999992370605</Value> </Parameter> <Parameter> <Index>20</Index> <Name>Linear Damping</Name> <Symbol>linear_damping</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>21</Index> <Name>Feedback: LR-C-LR</Name> <Symbol>feedback_lrc</Symbol> <Value>-0.0399999991059303</Value> </Parameter> <Parameter> <Index>22</Index> <Name>Feedback: L-R</Name> <Symbol>feedback_lr</Symbol> <Value>5</Value> </Parameter> <Parameter> <Index>23</Index> <Name>Feedback Override</Name> <Symbol>feedback_all</Symbol> <Value>0.899999976158142</Value> </Parameter> <Parameter> <Index>24</Index> <Name>Modulation</Name> <Symbol>modulation</Symbol> <Value>0</Value> </Parameter> <Parameter> <Index>25</Index> <Name>BPM (User)</Name> <Symbol>bpm</Symbol> <Value>59.4000015258789</Value> </Parameter> <Parameter> <Index>26</Index> <Name>BPM Sync</Name> <Symbol>bpm_sync</Symbol> <Value>1</Value> </Parameter> <Parameter> <Index>27</Index> <Name>Snap</Name> <Symbol>snap</Symbol> <Value>1</Value> </Parameter> <Parameter> <Index>31</Index> <Name>Oversample</Name> <Symbol>oversample</Symbol> <Value>1</Value> </Parameter> </Data> </Plugin> </CARLA-PROJECT> http://kxstudio.sf.net/ns/carla/property CarlaSkinIsCompacted false LV2 MIDI Strum http://gareus.org/oss/lv2/midifilter#midistrum Yes 1 0x1e1 1 BPM source bpmsrc 1 2 BPM bpm 120 3 Strum Direction mode 2 4 Note Collect Timeout [ms] collect 15 5 Strum Duration in Beats duration 1 6 Strum Acceleration adjspeed 0 7 Velocity Change adjvelocity 0 8 Randomize Acceleration randspeed 0 9 Randomize Velocity randvelocity 0 http://kxstudio.sf.net/ns/carla/property CarlaSkinIsCompacted false SFZ AcousticGuitar /home/falktx/Personal/Muzyks/Kits/SFZ/AcousticGuitarFREE Samples/AcousticGuitar.sfz Yes 0.1326648 1 0x1f0 1 AcousticGuitar http://kxstudio.sf.net/ns/carla/property CarlaSkinIsCompacted false system:capture_1 PulseAudio JACK Source:front-left system:capture_2 PulseAudio JACK Source:front-right PulseAudio JACK Sink:front-left system:playback_1 PulseAudio JACK Sink:front-right system:playback_2 Carla:audio-out1 system:playback_1 Carla:audio-out2 system:playback_2 Carla-2.4.2/data/presentation/sonoj2017.odg000066400000000000000000003174411420416754300203420ustar00rootroot00000000000000PKÙYdKŸ.Ä++mimetypeapplication/vnd.oasis.opendocument.graphicsPKÙYdKù½’×P×PThumbnails/thumbnail.png‰PNG  IHDRнE£ŽPLTE    $ (%( &!*$0 &#,&1)4-9+6-:0=1="16#4<(6<*9>3@7H9J5B8F;J>P#6A#9D =L+H >P1>C@N@REYI\K`!@N.@G,AJ"BS$FX&I[*DP(GY(K]2@E4EK4HO8FL;IM2IS2O]QW=RY%Ma)Na"Pf$Tk$Xo+Qd,Ui.Xm&Zs&^x-[q)_x3Sa0Vj0Yn;Xf1\r'b})a|3`v5cz6h~8f~8hANOANRCQUETYGX]ITUJVYMZ\Q\]M]aQ^`UbcUfiVhlXccYfh]jjbmkbopepniqnfrrfvxjtroxunyxpwsqyus|yx}wx{+e+i…-k‰.pŽ.r‘7f€6h8g€8j‚0qŽ0t“1w˜1x—2z›4 s€~z‚}5‚¥6†ª7ˆ­8ˆ­9Œ²:¶<“»=—À>™Ât€{„~Šˆ@œÆ@žÈA¡ÍC¥ÑD¨ÖF­ÛG°ßH°ßG±àH³ãJ·èKºìL¾ñNÂö€†ƒŠ…†Ž‰ˆŽ†ˆŽ‰†‘‹’‹‹•’–Ž•™‘–”™’™•˜Ÿ˜œ —œ¢™¢¥›¤¨ž¨ªŸ¦«¡ª­¢­°¥²³¦³µ©µ¸«ºº­¾¾°¿À²À¿±ÃõÆÇ¸ÈÆ·ÈǸËʺÐξÑоÏÏÀÔÒÁØÕÄÜÙÆÝÚÈáÞËåáÍçãÐéåÑíèÓñëÖóíØöðÚúóÝýöàÿøáÿÿÿݱܘNIDATxÚu½ {[å•.ì7Ø–,k{hïí‰-ÙQì$:lÉ\Ð3–S)mç¸C§ÐP(-ܶ¼…^ô*.:…–¡-H¡‡$¦(§ÐRh˜B™„„Iç½ïµž-‹9×+ÇIl˶ž{ßë^ÏzÖ;pàÀúúÁõNíF¯olÔc<lðÏáóõŸW*ÍÃmü]‘'4ù¥••F«Tª”J¥Z©¹nT‰«µÒ>J¥b)ò}ϱ]×¶}׿\Çåøp<²|ã#Â#›æƒÿKM¤¶ã<ðQj[*5™â?ãø›Ÿ‘· y²>ß²í’K.ßvÉØ?žœHágÉOO_‚oÅ¿ø!SxˤðKÇ:dõ­v»ÝŒ›6®kÄ{ëÍÃ?À[«Ýi·[úõåZ¥¹NâæjvøÉ•V«Z©U*¥¸ÂåΗâ¹x¡´¸P B1òÃ0çär9—ïNΕW4,Ç"VÖÎZv:eOelyµ ÁÄĶñda|Lާ 2£ ÁdÛø$aR.—¤t©é¬"ж]‚¿ˆáäT&•ÉØ)›$ 0ëo·—ë×m4uqÝÀ€68¤mò.þ’ñ1á €ŸˆwjŸ¢\‚¥X¿:ë‡ @¨Ã¾Øh@òß÷ÃûÀ€ÎaEOhÂîtb,·Ù\^®·:@`ÌÕˆ€˜€_âÅZi±bL Œr,p×ó7'×Þ¥ØßÀ×eˆ@JM{R.-—mH1™,^ÿL+“@jbB5Ë'Ôܳ¼þXÈåø%‰%eEƒ8¸~ð0`$`­µÔ8²q_³¾¼®ƒtÚ‡¹Ny4—âÖúZ\ƒ%,×—ë9Ð^iÉâG/,ÖTKQaÌ |£„žJׯF…SÒ0-diñ“Ôm 0ÅeNŽè…2›â[J%sWˆÉ1› ¸øP0IÝÀïrl'“uœ±Ng}m}ýók"ò‡®ñ}×7—›4<6:k‡;‡:M ¾¢µÞY®ÅqÔ[B0 Žkjå0š'âR¼P‹J‹ d@˜S䔀¦`‰ À,aäp¡Sãæ¢§FÙ?Íg(ge`)ŒXDoR ¦ôêÛd8x^ÀxÁN»µ·±þÅëaK­õû~pÝ}?èt†   ´6:u\càS¯¯tö㳫pƒq­V…+ˆ±Ú¢Æ¥^® ÎÃ|j•Pà©Úže¹– ,xBI;£"0¹ë7> =Š]åtv*;€A5*HþŸKÔ;ˆ{Á;ÿ?–À L¥fhŽíÀÁ5˜ÀÚqcÝ0`ý:0àd@ç1˜&P_ª.µõeŠ @C€XªTËQXž[$æjµ"8£ÀÂ}2€LpC× è „ûžc‘¼þY\|˜€“5~pÈþ7DO ¸~òz‹01.æ>ŽÏe³cdÓ`€ÆX?¼‚VÐÕwZk­åÆ‘ë¿k6×i÷µ€NëPGXTëd@"¸"€ ®Vi‹d@5^¨D26Œ°=ª€CY‹Ñ( ”M«}L`0¡˜Ç´~©DØ—šÆ*/¹£¾"Ô™Ÿ˜ç9¥qhÖ%Ò.SpE)‚Ê€¥–hÀ}ka@§}HІT—êM¼ÕÁ˜Î*e *"€·rVJ`6¯”æ`Ñ”_Ý P¸–ªL K/àd‡ ¯áÌyiSÿÒ°€iø€iæÂXa &pÉÄ&ÓY!;‚,šœ™™B¼Éëï2'D4„´êM n°¶vø@ç× öÆíÎr\?€>×2 /‘á|U4Š@ Xˆ”Û]õžçz¾g‚aר©ÜZki4êð9€X¨½&A uR¤±BÛ  ÆD  q,€Õzã-/@ÌÕàê €¨€çxæúCø˜ÉÄ_Ó’M“š&%ÜO¥Õ¹d€0`6! ]~ë·j9dÀLjfzŠ #Â@  hAZËËë?lh$ˆÇ €¬MMàH§N Ø/ð’×è ÌÏÕcú‰¹jO@ Àêg X<ŽR€èˆ+ä‹”ØÌÑËo¥mò6)Žÿ¿2 %Æb§…†p ÿr±±¨q¬?;mà ä24¼ 2  ÚMƒ@‡ð2`™^à‡F˜Œ`‰ hV!Vh®?®-UEªõE  XŒx0Àñ½œa€ 0±°C Èò pù&þA8k2;¹èæú3w ˜€@+0!Ÿ¥ù¿ ÀØ©é©é™ie°÷ÄMà5 ±Žt˜^àð}_¼ï‡k½XýáX5 ^nàyÀ~¬,P¯T+þ|&À`¨!Zæ}j€/q€çûÄ(8®BVò‡z,]}œ ñ ¯e65 ‘ÔQ@á”–ˆCWL[J/ßfC#f²!qÈA À嘊pð…cpý ’ÿcõå®ïíÐ4Õ:¢Ô€¸V¯V*aT\\Œi ÅO0ÀS Èy Š;GÈ⊠•fìš2 q éé´Èß4\|š&c' ``¸M3\–Á6]&`Ña"(àC„©°ƒ‡ÛIE¨Óª××7®GªË\`ƒ¡0rÌ18^Z!â ‰Pùu†Bq´€œ°":„ À»ËëO°6B¬$°™½ HâI S/ʦ4óÅ2i[¾6¡f2>  è$SY¦xw³{†"™¦dMÈ=em`ÈD»Ã×___Æãð®Û\@h–7Auƒ @½R«ød@}2ÏER“P € ¸¾øÀ×"`0ä@Þ¡ È¥ÝÒã§¹|p›åSDCÈ+ @À€i€Ütì—’ Ü L€"§,&ІÊï18ÔZ6šKHöÖ7XX  ð‹ 嘆+Ëu~ó~ UWˆÁ°Gl@0§äüy‡ðé(‚À³”¢T’£:º|‘AñäÛÔº§ÓÑ~}Ò”˜Í&«" ùÑøø0Ÿ˜Áò§³®y€/’Ñ`àè<Û5ppùJ‚jýðÆPo®aù×m´;\¿Bn 1h2X5 Ø; –ታÁ؄’Ó|O!a€çº[( 4…L Î.ù#_··`%&à2n".¡àã›¶À¥'²3øF7g Ášqû 0À°T?°A¬/³(zD˜ ! ‚Ú-µŽt‰äú ·Å #‚âÈÄÃŒiÿÄ@H!¥§Ø#³- X*íSßle€pcZ’糬“0`‚•2€Å¦Š†ˆ>MÕ™ 1 à€E ½,€,+b°ÆšèF›a „;’‹@$”ÌU‘¸Á8?bðQš€«q€5ʇ^ÀRP˜œÔj8D0­Â—N[)cöŒ0@uc:¥š€L‘SP‰¬Y?°)‚Z ¢z>~¿¯`@d`9®>rXª”}U0Rb€šFâV:Õkô …ë’Ò .…Ûý¡¤ȹ"ž XÍ”`f8 )ãrZ€E lq›-Ñ0ÁÚ0T`‚eïÌܳðkܬ˜É×ñ”¡à`»¾Ü\n âøðút¾^ïll˜²x§½O/X®Æ @k½Ã„8Ѽ—üùrµA  ..,hI(§^@䀩TEø&|&ÒD€®.ÅZ÷¤Z÷´„ˆY RÄH4€9¤|OÖ$¿²o2!dñdyõ ¥*è sCGX#X^Þ£F€0ï//)G4^M "È”IÐY/  €”èÅ"ÀD‚¡ „ü„¾§'l@pù („ ³£Ì×/)XÚf™–êM€ëG$4yp=}8¶TƒÜЦùõ“M1ƒe2àÈR¼\]îlÙØ8hÈHöâš0€Ù  ¡0ŒÀÄ5h>L ‘ˆàb¼P1 Øîz‘†ÂÊA€"hÖ?Ù„X£cR€«‡ýÉõ[Ô?ËÉÈ÷ئDäêΙš@O4ë÷øÓyäð"üÐÃK¢ ”;Ø¢ à­Õ\®.u6ÖëKKËË#GŽli­Rš²oÒ/0À¸Aü)ˆÔöÎÕ*!L`*Ø Š ‹‰ „ZÜŠ¸IÂâX >”dãa"0º`K¸CpFÀggt_A*ä–›Ö­C€•ß„4Àèh5ÐusÆ´Θ•~˜¼ÀÚú:®áRu 9({"ûí–n±*Ì¢(ЊÛ4KrÍk™Hp¡X[X$Ô| …%$ûV`¹b¤V“8²J[¡IÍÀÙÂÍ,>Ë&(.T€¡>|ä4?SÀ#ã¤ñㆠÀ²á(Ô׿¤,I0|9 B_1¬®³¾ŽAÀ:ŸÐÀ›ÙcQëmÑZ&ÖH&ŒÊõº ‚x!1í¾Š à{¡« pàãÍdý 8ÝÛ¦²ïY  uAúÖma€ì¡"@ÄrpñA6€røÚ!åCÀ{ê´¬M€ XªW×Ö|~ýÈÊJ[ hÊÖXÅ0 …P1–t¸­&`âBsõ]À ÎGº5¦q\’$L‡W®¿e‰r«isc\íŒÄÂÛ éŒ@l‡u]K`QãSÙ5a „ë²|<˜oQ$m-„®Ÿ‹\\›±ÖŠH|‹‘ß(`Ëm1BÔl7öa4ÿÀdö®j %ð} „JìŽEâ¡ðiòðÂ@È9@C8à©d¸A„¥áò;N:Ép‚ K;X–*©lƒRZf`˜ÊÚ sýˆµ€E¸õ#/qÂä@k¥%$ðV¯T[`©Zí<|äàzsKo6Vè"5nŽ.Wª1%@DPªÂbÿpƒ‰jÐͶܠÔ/—s àò•Z©—† ‹Þ-=€Œ”¶E$Ræ…à?–h˜fÞŸRL*Á(Ó,„f&pdÀ ‹ `/òŸå=Ë•¥öÁõ¸ºT]Ÿ__obù{ö­à­ïˆù—Vð\°_š%`·ÄµÅ‘@HBa‰ÈŸ­À®õ)«™1.7Ë#[a6I!.R°Lâ`ÃwX’ï§§‘ï:ž1‰‰)‡„ú$d–B\’ÈV„{êÈáH‚åe2`-&Ü7f± ÔGÜ4Ôâf½7[¦*œÔÀ€D ×@lØN„Ò)áåúÑO€D€Û•.#ÈXÝÌP2ÜÈ$ØN‘ÍŠb²ÚI£ÎJ²Çl϶½´ œÆ'Y µP–ŸÏ [;S(I š ¶x´áÔcယÀaVwh ‡×Bì›Ò „êµ+È€Zm Š'[c«f_€fÏ­±z½Á\ †HpÙà|R¸ÊqPä€ìp»ŽyQVƒôÒó‰ H¶àŠÄz@¦¢S)‹0@2¨ä±ú|>â& ‚cÏqr ÃQ\—¨5V´TeüNª•¥ÖÁ5¼ºÔZ?xøðaä<€€ûH€céÂb©—Ò ¡=aÀ.0`7áF4`+¢/ °:¬„FK,Õ€O˜@– °’f 6,pZ$˜Ás¼¬ñœ0yÈêñÆX6#M9@À\˜(Ž!žmÀ šu­äẂ‡@µÖ‹ñ (~C¥Jó ?·4 0[c  $¨E´€‘d(TøoR@óO•ŽJM¶Àn7ÀH Ö_à€„Yä¿E¡pŠ àÞS> "@±*µ@dá (€Xa›×ž*bf€uÐWðbwìÔ@«Qo0ý«WðÉ´n ‘0¢Á¶65-ˆød@L”tx±lÇ¢“²8Ý ( ¹€å‹$ h‹ Ñi[dmm*£ð»â¹·Âp—"€hyš ЭtÃ7a+ñ¶š€#ª(œ 9ÐBøC?¾×—ÀÚZ•]OÍÃk2 ![eÍÆP9ÐÆ—ðLn•›Ö™æœš@¥6¯Ua „ [ép$nÝR û¤€È›.?@dL@²SMzZ¸jrŸ_¶Èª >,OMù®ë©œJÁ Êþ;¯~"VE2G ¿dXÁù’—(„U\äÎÿ®h謑t1Å®}ó@k‰}‚H—ã¦`• ¨ÉÎÐhEˆ XÔ.±Ñ¢¨+F`Éú%Âë,K ƒ#ÀЉ­ô°³,$‰ pEä(‹ÿ`õS©Ì”0*E‚p|à;²E=ŸÃ•Š¢ŠbL»Ê¾¿V‡ÉL€>_’e€Ý0ËtMÙ.k ØPû/ `£2`V &à3 åú†ðøØ„n´viµ?ÉVŒdÿ€NŸÁ:Z[M`± È  Ò˜”󄀨TbÃvÃv:\?ÖÊdOòÄf,©‚|ѸšCµW›U˜@…óaX5Uáx1‚T Ìü¤*ÌHp„F|šÀÒ3äd?¡ÊÝê¶XëµÄÍçÖUD³n`ŒOI ’§Pˆ@€Â6kRæ@Y€ì ¥8y”·‚.>â£XÊìTE¤U¶½§I/ mr5³3T5û±¸ÁPw†ˆCÂFB‰øC_½€c¶Škk»#a€›ÕÎZ€ãʶºôY Xóc‹0`j2359‘JL€ÀÞ=_à9lR £p €F^c±&2¾D4:­ê€v}iáA¼¼ÔXjèÙ‡0¨^Ãÿ[LZUhM R†¬×çtgD$ÌÞ oÞ0pƒÀ +£#ÉNv€ì´Ä>—¹¢ìªŠ0¨LƒÓ‰¸~/*àú—¢ {Óðt)G"1… ÊQiNP¯ïnÔKIi?.—†Ë¶…ð `@CÒüJ¹ÑiJ·8iÞ6Q6KSjÚ"SÕP‰ !«ÂÌÝLL@àI:,¬– ¹)0dåOÄÎ¥?gN¥E)Á²Y®&bè( ÜcË6~kF ðš Öaœ|½´PjµR¥ÑjWÊ Àj§ F%Öiý`@±R[Ž÷ÖâF›Ë_ÙÃnqé¬à\«š/rkL;Df%’TXêš³"æ&*ÈÚ°“aÁš«×€W˜–~P‰ÿ³º‹ÀàW#g؀¶0À¡€TÊ'¼¨Š¥"Y‡ïˆ\v)ùá|P˜¯°l?†˜…Fc­™`®\Bö3' ÐÞaÉÀx˜">ШUØ.Ž56V%Œ&* ñy>bT½“jáhYܘ€fC¾·U«f=ÀÕ29¢eÀ´ìŒZ­¡;¶2À– fe€`O› l¡æú]¯T(*x¸!‡oð˜ÀªøÜbœçîp1  „bp¬ˆŠ8=D|?Qñ²Buú# HpMÖd M@ ”HÌ óN¥¸0%»ï`@Äõ— ¼€Ö'a Pf ¨/6v×Ùí^ ¨KˆŽKe@Poë¾_«§>2H(#5Š+Å1Ì¥$ÌÉò«ìž-°St±³Yšn5HxRÓl2¨nÐ!T8-šœÐ ›"–a€x@a€Bhzœ¶PS]vìØ´Žø› ˆ<š€Uür¡Ê®f2€Eì¸TÝ«Åe2€g`°øø•}‹1wƒyÅC¥ÄEñÞš{–çhüSy©dP " ¹àF¦?@v‡!^tb¾ž%V q€#"àŠd 0-õnÃGÀàÏQ?8>ËúHM³ -AϬ¿ ÃSYŒ @1,ÌWK—¸—Ê5XPÄ›¥"d0nµö­®˜Õ³î½ 5$²T•*®Q@è!å%Üù öô”ìƒÂr°_»„—!å‚Ñh Šå¨\ªVª`Q/oW•VP+E帹  ¹cuúuá<$ Xƒ K*˜õ¦¦[0É8sx˜ÒÐ$ôDMˆ€”Å=ïÆoø–õI(ßr…4JȆŸtzH `{C<£l¸òòºõ/SiÙ uù 0 tm·èù³^‚XBò7–d°y¬¢Ìh¾ˆì@ãCò¸ëË~ø%ü§\¬ïk f-Þ÷ *<4å—E Ò.¿Õ,­öG ŠPnñ¬w6«óBS në?ÃV‘´ô…ƒiä‚ 4øU¸žj@^àY0•š¢Âl¯&æC<5 a/>ÀS~ÈZÆJUÆ,ñb±ˆåSÈ@4©òr­µâY¬­R'+â1ëªõbGNñÔœËÜ\ILÈ¡©(”!©@´|Ùàå?>ôßÙÜáˆh2D2Ü6xFM@fµÙ'+û’.) EL)òl9MΨ >^Â\…»ôQÁaxQàó[±1pë1,lË"–ÅZq¾+€$Ê" çë;hõ2¨©ÑØÝØUW "¸ÁK°EÐàk$èî}ù›¹k_¹ÑÿÆË;æïzñùß8ûñ+7½óñ7^¼Óµvüó‹ïä^¼åÎçoné†ÔtÒLxFLþ§@—äó !´“©™„X?®Æˆ˜„€&PVñ‚U\¬Å…"캈§XŠ Ô^_Ñ;Ä | °­í«/Ð<þ•$“f2AçTTèk0=6'g†È€ù §ýWú¯ùï/¿ß;Ó{nðùÞǧï|·ÿÑùÞ/ ç.žé=}éfïìææµ0ÿþñ{¹¬öHO§ŒšŽŠD5reóÓ•"©WpÁ€Œ€!–_›[¬FØáú<ňG±fhŒ‘«ÈÜ nXXP+†@H0ömÂD<à"j+u²Tø¸ü] .Ò °üÅ"ÁJrn ðßÜÜyæÂÙ›¯ÝÕÿmùÕ͈Ï^ÝwzW}ºwÊùÒ|îâéK7O»öïºmðúû¯±Ùì™ÕÆH7ëI¬@Â'pÜ0 ª­2<™aéß‹æ°zy$•a¿È놚À²@…ŠLšŠ ÁZƒeŒK#@59 @•kµ*Ø ØE€=" ´¯xŽ'‡ͱ¹ää¨~»Wïéþ]ýo¾Øß¼ðÑGWÁìÏ~>.ïè½åßòðâÒÍw¬oö½mðqï=×Öõkg¨ëˆ€4W‘r)À’32 =•ánÃp R$¡ Z©WêŒ`q”K‚øÑ¨/Å*!b}áU‡QÐÁßå9--E<`>øVðJ°X]àO€ÛãþŽÍ³çËÎ^¨ÜÕÿ•î`$(lîØqñí[z¯~éÂÙK{o»wô½½ÿÌKƒïf³Ú#=ÍÞ—l"‚Ì›%¡dÓÍ#¼ Ží›&àÀ 僨:ÏIuJ K# "{ÐTæ(øF7<ymƒµ¬¾jŽFÇHvˆN,AòP’RÁ.("4äXtø(âàß¼î½ÙË+ŸÙ|ûìvjþûàßÙœßÑ;ugﯧȀ·­;Á€þ3—^¸°}‰)0-¡°—5 H0 ð ¬,9j®Í#èˆm?au®ªê-€@¥6W•F‹T+$lTá/•‹ºF¬žëkÄš$ßWTéÕš`R0Ñë¿ €M”Ê<Påéù Dð&€÷WûϺ/ö_ô¼»úýþ)¶±??¼ôNoÇŽÞÛWõú½¿ž½ôãwœ;hÏÚÿ>¸Y䳯 z–øËM`—U}Fù|žGÀ@É pì ¶€Aa/çWxýÂà¸YAÖ7ÆÑU° ŠÄõƒa´°Xù U­‚É£h¨‚Ì1bÔ€O%ÄdÏø¨áÅO$UPˆ”Îðô8|³ËèM†®/õtWAWÏÓZÚ” 5Úað‡ró7ð²ˆól¿èfí óBÑ€A‰¶n,–ò%P‚S6T@‹PªkôVR<+‹ ÔiéBi€yÀÒ/I_^dõoW5®#çŒJÆæKÆžø©2@!jŸ0+zvžH½™/!o9¦*<Ì¥ ç§¦Ùó+'ì¼DFD|€B˜/ ÎçÆgXpõTlz ð#0€ëßUG %DÛá©çÁ€¸©”Ô]Ïð+C}¢•X(WÊED@H÷"¸®ç£$è2 Š“´Hx€ÐÍ)žœWf>ì›} %–º Å#„Û‘PÚþ,ÝSÚb@>š€ÜU„åaAr½ÅÆn64¦a±²Tâþ.@õ†°f`&C[Që!@X›ÄÉåh‘~1Ú®a“¦Œ#‹½~$"Xáσ²À¢R>2 d€¡°žf³´ìH9ÄÄøs””mOÜ¡Êq€&Ïô|7XA§ˆ•ò+rj€4Žd¦¦Hö/hŠËduq‰ñÚ›ÕV( @ÐIó éX+2O*È‚"³ý*#¿bM—Oø¨DÅî¾R(•|æƒy?ÐÆ<žstŽˆ›€7Ìݤ"&G^SÓ `ŠRS…   €ìL?&@½/Të*å|}^.$‡ãÕâr·¸¹;Få/À]‰êAÞ)Ôc€ @U”Å D"¶G`õ”/j•dÑ øAU]ɬ`(‚®+óÃõk„çZ Ú1ä˜cBìT,SAQôÅ ‚‚˜@NL ËZ¡ pû§H¨6 T`­¸©°lZˆôA Kqêv™Ø¶„en0TÄ>æ“’0 4*²¤¢Ë/|Öäó^¨¹€#^@5ÀLQñ´FàšŠM€ @H8(îÇÀÒ†ã^0Œ£`€c§X™š éï ¼þ‹ú®Ò´óZ½HZöX$&@âÏ+ b(—WÔ©$Aí£F!¡(ˆH¨ æP4ñݾ¿  Ì{?ï‡Ü’6Sdd~€˜¯ã:¦$D IUØ“¾À”yxÚ÷)E‘Äx+(„Â׵Ò' ÈMÁ(`·?ùò™É"˵¥ÒÞ¸­D|•LYÌcž¹RLô¢ò"RåZD ¤…0@‰«‹1¨A<  ÌEb3…yè¿(‹G|ßæ¹q9,¥â[&0ì"Rô³ŒH³L³-é´Bà‰Rv¥á–&íl7,z¶=#&Á«ÌÃ`uë«Î×ä"ªX™A>¾Ðb§ë½A´£WÈŸ>â9 *€Ú‘3ÿêâbM<(³!4’Ô0‚ ÐùF¬Ì‘N¨3tÌYe€iõ‡s|‚›åYÕR`š=?Á<Ÿy /&Pó ç4ÃY’˜@£¾R§M†®e/€vcUˆx±$@T€R, ‡^[¨D²öPI@$é§x!V"®4ªHæË ‰àDEO>íñ˜ ÏÞP=)” 績•pÀt‰9iÏìI£Œ™£ÀO0ÀS/ÀR€2?ɇ  „Æ Ó@ ä¬HÅWÏj\~αÀ€cº}. ð2 RÃu¤?›«, tŠé! `FÄ™Çc+Ê€yÑ€P=ðŠBNÙösv(Í ¾»ÅØ#XÃ’˜@àë¾€ÊN§X÷œ-ä æÄ âݘM)Ð#A6ÀÞ5•¨x ¤¿Íú¡F»sp,é ð Ba`üY­ÂÅF  ZeÒ!ô§†Õ”4ùDP<~Ž•x!Ç„r›qb¾7ìõµGHÀ3“Uˆe¼€B B· ö¢ã%OÅä쩬tI—¯€±ð8B"´ÔèÔÛaù¡é¼Þr©âKL‹<˜á/Ä¿lx@€í$<þÔ$“,ÕÔx :2Hv¤ùü×ßüó›üå ‚lÀö?:Š,>p¿qö%" ì—å¿üÓ;yù«&ðt T×/àfGÀ2(ý ü^50ÀS Øbb€Ý•ÆœP¨–¥ðïk$üHjE´b¬d†3«Hžbå¤A‘ÕÿŽÊìý)rù o"iјˆJ›ƒA0¸pŠ‹nïõne2ëžê_œ×†‡Î"Aî÷z/' BjtÃ8 HDP¼€2 ,Ph_šòÂ!¤j¥Áô ‹ÄÕcé^ Yë‡Ç£þžod ô|X#Œ€þʦ„ò͈KÔ Õ”’©}«‚²ÿ¦"1a±xqðÖÿ{³ÿŽŽ² ÀàV\¾åÝgœ²ÇùþG~ùè«çº–5l6C’H!0 3Ì{C@Ò8–Û.5ÀQ HÙ ëÖì‚[ÀJò`y ‘oV›Îrg}},ÐVÒ¼¯žoÀK)UÍ"©„ó €> µÄŽd\Á¡€ßò¯õ7}÷†—ÞxùhŽüóz4t¿ùÆ‹Î]o|ùÛ|e/Ã@ÿù~ï&-ô»îM¯üéù%×zíµùç~Ÿµ¿õÚkß²í«ßxÓõ¾ýæ³^pçÿxg`@èrÞŒ ¸Ê$a]I›WV(葟gDOškõÎAà²\¶ðŸÈá28ÈÅ—åQä)¤a¨ (˜ WJ¿ f©D ¸9ø}>ÿfÿŒ÷ÝÞ`0è=çnÿxpqÐï¿îþ¶Úy¥¿ÙïÎÍó‚Ÿé¿ë;Ú,ý¬fp~‡s¡º!÷6>¼1s´7½Wúïà_~NH4ÀÃúçCiw¢’ïÈ¡({&+}I»[M–5™"q‡Ä) a`7¡‡¤MHÀjr©SÎù2 ŽžO¼CD3_¯÷|²ùœç— %Ë,ؘ•7ïüê½þ·¯Øì½ôß~2øøZ0àµÿöl¿·W8ÿå/î‚ú¯Ã'|ïÿýÞíÎ5Ï߸ãtÿYë|óÕï=ÝûàÊ+?è=:ä¼ß€Íþ{ïª(¼œBž_ ‘ш£<Ø- hÁ[WÚU$§áa‡æÚÊšÀ†jßóð£xˆY;ÕŽ- ЋˆrPjŒtk¬zÈå‡ …hKQ8˶` -ñØìC{ßöþaðñå^îÂà'ónv/ïõo'/÷ÿâºgû"û÷Ï÷ÿì;;{½þ»®Þt×{ý×À€ßÚé¿>xã?¡KœïŸùÕî‚‚zˆ":X2 4 ˜¶5Æ \i5¯Tp™bæô@«s„€õy°À“Þ _P,²¡‘ÿ} ˆ à‡ ({CBÑi‡D 6û§~ÙëÿÞûepžë=·”{½ÛŸ¼í9gû¿¢ç{³ÿ¼ÂÑ7ïºß¼@ðp—þÁ{¿{á…þŽ ð_·œô7ot9A^²t‚’9Àœ+ @¨ZÒVè•ÕC:ÆñenbÉq—ÃÍÃGŽŒ±xžÏ‡²ð0)pð”Ò„bIƒd“È€’|‘ÃC}VYN)€ˆ¡£~#ùèbÿ÷ÐÀÞM7÷û_Ê]úñà[0›s_é nP¼í¬ÞÔïÿüvðny³ÿèŽ? ¾›Í¾Þ?•ÍNÍN}µ7Ø.&àåoyoðï‰`…ùÈhÀœç〒h€ ¹o‘5ý°¸$›x5 0~Ê´›×¤Aä!בæyˆ—¤D„ ²½Äÿk5Š$ʖϱ H¯Øµ ƒÓÑéþéß¾;8·=ì Þ{öƒÁi÷¹þûÀ³ÄÁó½ÁÅ·ßîõÞ»ª×ÿæíçÍÞмþÌ{v~ª7x㥋Áçoz³ÿÇ-¸ûã èÜ-°mÑ@šÀ ;š‘°TÉ€š”öêûâCÍíƒ €Ä4{ßãÖ5¾Õ—vBæ;$«ˆØéS’¡(†Ä|%€ä úB]~Á Á£ƒþ3W½ 5øàzïõ\ë>g`ƒ HØóÓ½A¯÷þQ÷~ÿ¢2¤ï¸€èèÙ駃߼]9 óxï OEP4Àó A!¢pƒslÑ\€ÙÒÀy©ˆ×‘³)r#jµÖ[ëGxŸ÷ó²”o7Qr4b†#abŽÐ_Ìóc&’D‰… ŸA¤ÃT— m¹ù¶¿ÄÜtóMnîš›¯e.xó×r7| IÑU7Õ¹úë7xÖM_ßḒ¹W~ùèNV5>ýÕyç¦kð•Ë™ ä¾òµOÍ ¼¿êkW_¿Ñó®½åoHIG€härÏaðœo€¤ωÈÔÓZÌM+é©ì]‰Û@à1àŒ7,Ö ÿuùišä« HŸ—0 g¢¦‚xü’i; ØŠ]d7pó²qÍL0çK¤f'y`2XyXÓñ¢3RðüCV‡êAÒ™ êŽÔÔM†@^h€Çj´ ©L`à•ìd\i·Ù …•¥¹»€í¸Ù à±R!³îdµ» (æ%Ÿ'|Ñîð•Têñø` ðƒH÷?ˆý(@€¯3ந4´1td’®«AŸm›CÓÉ`Í´éÑS# §²ÙŒ "ö27à†xÀ@¿3ÏëàI©%œB¶Piè¹ÈÖb¥¼R]öùj0C[  _ǼHù–'Lrò/¸z_¥6R’ÍNŤ@à)!F$~Ž#£¡… ŒXÁ€ÇVè3™-.ãü’ú©JIÌt‹3´™à|fc|Ý@KbÊ€ T0nÐ-T}“ ÌPŠ¥jc¥¹ /ØB RƒWh·×Ûë×yÚO(çä4«VQ$Õ+na#X«'€¹NIÏór'uDzŠÀSŸö/ç5ȳ7 À'kF'˜ étÒ$•œ ’‚¨ `ËN¨”Ѥ,΂ˆq”†Ê¢xÎ0ˆƒ²UÑ\i¶tà_ L©¡ÝÍvÜn×¹fÄ‚kfþÊÌ¿<& Q…`”(<ð) t¡V Äã„!ßÙŠžÓ…KHo“­ã„e(1sdJ(ÀSa€@&ç‰8ÙÀuG<üê€U}Úì†ÕP$Àu€[ÿ¡lùf8½€2@8rÝÆ˜´‹SÍIÍRÇåÃ0dŒ/~‚þQEžá`N€©Ã3,aG‚ HËô߀ú†fžº>2¦úg ÷C3CÈÎ-;céÔTz†EQWM@d‡É7£rAÑèrÎŒºÁØæ||9È ¨‰4Ûuà‹cºSAA2ÀÑaØnN2¬ q"+{Œ“J1„ËÕ׌ÙtQÕƒ  eùAèœX$& ^ §#¥mùÇÒ±ºæŠËÞhÚ,Ÿ‚ Ǧ „SYPÀµ† ðD} 0(DRs|ŽHÓdòÞÆJ{…Ç;¡ܽàY‡špàHçÈ} ™é&%ûœV ¼0ÏDY9È Ùk] fñJBÎÄÒœ0Ïr { C™’Æ—%±Uè„zHÔ5^@fH—¿-{: ¡âŒ2@L@÷³©)„ XîÈÖ˜\·ÐG.Ê â­ 8ƊŹ抌YWQÄVÏšp¨s¤½qß}c:WÑBƒµ}Àx= e‰¾ëÌÈ=ªµ$ ¤Yž1~$„¬^Ë.çH”ÎÕë¡Ï¬›ÑÃr™-/ ÍÒŽ4ˆqŠ”-ûö¨$Ü ,Ðä,P%äŸum£5éá¼7èëz,t:@ª©¢Í¬ì… Àš ·<9ïÈæ^! §`áäYL"ÒÜ•¼ ‚›C°\+& §–mª¿*€NSNêrhLÍ™S`€)‹‹š€ñ®ˆ 2€&  Qâȹ®ö~p ¨Ôv€µz{m&@hÿ©c†ó›øú¡´S(”9ÿ2[˜•j…€14 àa`±ò‡&Š=8žéåîNpI–ÏA!zí³:WU†ž8Æ™1ã©iŽF™cI=Óaé5ñ p>4^ßC$(@ÊÜõ¬¬Œˆ`1*CjÈ š‡êíÎõmÃËMb3×DlXµœ²ÉdÀ§7— nÄ·J>Wz3°~¼k߃¯G’\]>ÉX¬„9á3<óì¤+9*.ëf$¨°n[ɘõiÈ EÐñâ¸}Öþ¶¨‰˜E -ºdÀj{K4 -4„q³S_ko¬9}¯íFªxð$9 L7õR¥Ý9³ù@à“ñÐúbâíØµ¦A»a€¬[†w Èt°¼ / Àè€]mNëÆˆ›T…O7ÑŠ #COÓaRy:1U0 ÓapEQÝ 2оžÈžèÉbVÌsÉNæ‘ð~NÜ.“nʈÆà&JÈy ”@ê«|;a€›Ð_е§¾ër-’œ”¡ìVƒ„+‰Ël¼—8 P‰tJgT¥æψ`±F'Ð^* A2àL@0i†™rï/p$t3nL®¢§Vàæ”¢ïX;¿9T7âþ¯mÀ‹µÅ½pßÚÎÉäaAÆÑúo†6 CÅ97…g~W>eî½CT¦õ¼€ÒlÐ2 z­>zHxI$7ýI€“>T+uGÖþ:Ž×á+Ëä2ÂùX½N A¢Îe”Ú»|Ffa1Œ<éÓäS~Ö]‘„7òT³~†ýàã¹Ç0³Üg:é•G{0/sÕe~–cßß]áÿÕfmëÞ»SÙÿ0o…Ëõƒr¡ð£ãDÀ‹Là™P¸XE&°ÚêìoÇUö.ÊÁ00 m Óh’ØLÂ[Γ°t9ÚäJªL»ÐyÚõ¨¹d ÇÒ݇» ê]tâ³^éÄ~ϵ©–0`þÄ=«ÝX§ÙŽw¬{ÌÚuò×|\æªë5°Gl"-[ÃNöÁîªô±CÂ0@·Æ´$F`B<þHN "Õ ‡7âWôæ1‹âJˆ`L¬uÖ%°*Ûrõ3¤¨@ úk_‡'£pg9”H BÖ´ññgÝý«±ëÞÓý§Æ½Ýï/.îvï‘€ÍÎýí‰ègûWlgeÅq~|òÉc™»¬ÇO8&ØïÍíw³tW?ãY««Ž5·¿àY‹÷xÁ~k×nðyq¿h¯WøÌ*pÙçöä½¹ÏD«õ`õ3hÀjw?K‚!.h6;ãli@ge¿qƒŽg.Щ·Ö6:뀭øÎP`¶ˆˆÈ•kò¤ií \™JLs×£à y$›þY÷©n÷ž'»'Oâýñ»»¿>Ñý¹wìrý—ðÄœ=¹òùî½™Ït¿ÿØ1öž<îYiË^í>qüä1 x¨»Ë:þ„s?~‰Ÿ>ÐÝý™î'ºO?ÜížØdè 'Nvá=ÐÅßùüM÷Ä#'º¿†üì‰Pb¸hQ"A†ÂŽj€œn§,ˆ4ätä'@#¤ót2 9OWr_°$O~^ê¿AÀñ“i}ž¸ÐŸuï[<ñk÷îÝù‡ºŸÏßÝ}0ÿHw÷#¿píJ·s÷‰È)8öÄãNáø¿:Kƒé÷wïµ »æ‚=ÝG¼‡N~ ÙãOx'+×½ x xÒzìøCǓزdÚ½ìÝ'¾ïyÙEåyßïÞÈ~þýîÝÁSO~Ô½;ºûäŠLëv")ˆ M@5€¹€T„ŠêÈ€Ü Bá[îÂâH“µp ÿø)3Éáä!¥V2è d8¨Ëx_’=ðÔSî?u? €{Üñ/¾úÄã“ûñ3Žè>”}è©§ž:yò!ûî“?…Ü.»Ì#XÏ`Ý}üá{=KpOêáîeÎê#Ý/x˜ÉùB÷Þ`÷a¬Ü;þPxäg„0šS 0 (–äVh•Îb —yÔ´ÛGZG66Ædô†Þþ2È÷ 5ž{Fó£,T\èÓRN(‘d T†Àm™ÜϺ»€óýîÃûÿ ïww¿ÿÄSùcO8«ÝúOá;~tòó??¹Â&ð¹“'ýBˆÇžî÷>y²îé>òàÉ'­_œü9¾Ÿ~¸»ëüK÷³Ï?Þ}𡟎¿ÿØÉý@Ì?þ›ÔOþˆ5AßáÆˆ«\žÞò †Å D’ R°þ ÓJmAÁ@ö—lS)0U\w)ëz”[àHÒhc?~*vsJÇŽ?ü¸÷ä¶=ñˆ½ë‰Ÿ3ïäçÎÃO=õäSOíâ˜ÌÕîã¿>¶jÝûÔnïá'þ—ǽGŽ=üX÷Þ{ŸÚµú¿¾}ðÉË|â×÷z>ž¿ìáÿõø¬Ý<ùØç¼»óyÿرÂ÷s÷Ž×óŒDÈÙÓª0$ ¼Àª0ü€”Ĥ"$‡Äyà›eñë¯ãhrŽ­Òk!€£±ÛŒc!² <±Ÿ›`$<7!O6SîéÞÃÞ~|ÿÁ’÷·žíjdkÌ rz(Gåî XVš7 ‰‰—uÿå³÷Ÿü‚ÜD‰Gg§§³î°W˜“÷4”¢¨ï…Ÿÿ ÏP¢  «(µVdÖO{€ 8ΰ 7ªÐ1ÅNbf\¡ë˜¹ç¶‚ C <3”0ç k&•ÈÉÕYàû¾ðäßJ˜#.F‡¿Éï€Ür'-3±ùgÏ“÷Ê´T;#w°¬ûŸ<þä½:.:-3ÒåÜ`Ò%–BZÔ!)kƒÓ¬ãl‰ ŽŒä©?1" Ùª¶Ìƈު„hµÁÐá@jG/–Ó3#`h(9= m¸4GS}”»(:ß(+߯‹7™Çó>Î u’[ èÀXN‰æúmœÕcf”šC‡¬“ÂGà\<)ŠJœ&é°ì :ÓŽ45Õdo°Õ^¡ „ÊÁÞÕáÎÞ«ÇNg¦í‚ŒmL@o5#C«’\žÈGÌp\µϵ œ¡ päŸ+{|ò|Ãç!ß,Õ€­åS xŸ!Ž 5É€mÀNAi–šRrÊÏC.é­‹¢a—Ø+œõÓ^Y¬-ÄQX¬—·ÇÁiÐ[{euÿIed´«$n:ë5'í—†ÐGþוaf®)'H¡()!XÇ—»<é·™˜áôhaÐ©æŽ 4Œ”‘äÎ)en(`éÖrͼ G÷Fs‰D¦*l!¾Fî d&°P«…Åb}¡X+6H¬µ€Œ'àys`ÆÜˆÒv§íä‚;G=cV1ÃàÀ‘ÿØÊ=ÒÐ_ŸÜLÕÕõkA¶š@Zþ¢˜û©Xi2?­7Y±>q'b™$ÃÜPÆ­pµ(*^&ÍGR{÷“.1nI«b©)#WZsµ…P«a冶Ȭm¬é \ø{€)¬ÊF3ªÚÓ3z÷ cFJEöŒãØ[Å=Àœ ²5þÁl}9ÎÐøNq C2:'[o,Ä”ˆ¿ÚÜeÆ’±ºY@97èÈüœ- ðxby)U Ûä€[#œp@œ+ÕØð 6In±KLYfë×>E5pÈ€§•ÀƒœaM"ÙéÆÐ³™Qà%›àQd4êà´ì´¥Ã²eZ¾x¹ûª%Ãåõqæð´coš’yÑrdFú9/,2’sÞ1i‘'\áù0 ¦”*Ú%ÖìzçVî@Ê.äTv DT>(ä”}Z[² °¨œIöûÔC$šè*S>!‚™´©ˆÉ X'c‚!Þ)@4@Š é-7(hrrÆMz…}Ah4J:tƒI›œL† TØé½ ‡àêÍÊ:¨‡ÿˆ ØróދǬyzÆšQ2סtnd«s œu)Y¶3*‚m¥duŽ8w„lá…NRÔøi¨€¬·e<9êš^a_Àm[‡¹€aÀ Cá¼vŠRÕJµJØ-¿P\Ô;Ž%ë¦2AÊžššâÍ ¨‰¼"rWl@:¶ tDÿH…ßu“R߆¨öÛ£NÔÄjiG¼%!1±ã‰ÓFxãÑ€áÔ1oË ä4¢æ’NÑœž(šVYx†tŠا‹åz£Òl¬5Ø+l¦ÐrøŒìÀLæG3J’Sâäi'¹îîp)ÉRõÌç§îø{êàP/ã{üçªW¯5q›OH3HëuI ,IxsÿE'mî‘N}ûOáÌ'à pÕKŸ–Q1Aú¡¨à;zä¼@^ZeIÕJ¥Te¯pQÏ 4á:u$„Cü>Žâ“9õꇼ0›9óúÎØöÕ½÷ßûð·î¾›ûݹsÿ`fÿðá™?¼<ûÕ¿žëêÜÙ×OÕµ¿þîùSWΞ{ñÔ)ç{§Ï½q•óÞ™ÜÕ^qž>{îÅøŸgþóÌ`§ýÌþé ë÷gŸ?ûÎ>ÿÙÓçÿXyôbïÌéÓ§ïô¾üÎùÿ¼3zôÃ>8ss¨g†r¹¡ p cÎ?óCvz š¥F½-GfFnh>£wòÍLqÕH §2¢¥åþ\sÕxUùEè«ý7nÿKï…W{¯:çzNÙ¹+~{ºwÃ?~r[ï`¹z/¿ÑûÃÕ›gž>{fûÅÞ §úw\³yúÑs§ç7ûç^¹«êß.žóÏ]È]Óý«ý¿üÛ«N*}Cïô¯>ì|zðÆ¿}|ÚýcÿÔóƒS—ž~ù÷ý—n:×{úÑ7ßÞ{ñü³ÿÙ»å™þ{Ï]<GDÅ Äq¡zhŠÃ£šœ*ÆKsË€ à»'ÌÍêð& H<˜°Ù¼GcÆ`îÒ4“›I¼ ÜºÜË8ßéßµ³÷®“¹pÑù°·¯áêÁŸìgß·öÞ¿cO¹wÛ ½£O÷_ÿÞ©Þ—.œ¶oí?÷ÛÁk?y«íų9çÝÞ¥öÿéÝüÁGàK½Óߙů~ypëôW~ÐË9î]ûzï¿Ï:îå7Þr߃ <:øå¯ú¿Œ¾ÑíWýo¹ï_¼‚g†f¸ËÅ£³ùˆ]ÔA2 ¤ç}†çñc¼MÝDJoI-ñДaÀ´Ü¢Ð5™„šŠ€«{q2g{¹³) ×ôÞ°Ÿéý#°¿ó×Þû0O}Ø»ø²ýÛÁ©÷Â΋§3à…þ›/½øÂÎÍwçtoÖù]ÿ¶så®í½î€MçfÓ©W7Ìüi°ó£‹ŽóÚàk\ë]<{ù[NÞqßÛ¼üó3ƒoG_¼ù«þíøÌEqzt6 ðج96Wâd-†Gd@i¹Þª¯(&ä~n„€ ä0%RHÈPSvÊÞŠG4 ‰(qßé/wîâWŽöþš9w‘Ÿ¿FpÇÿüäÒÜù—Þ§lèä ·}%w´÷æÎ£wÌ*ní¿~ùÑÛ·o¾Ÿq^îßuå™ÍïoÞðÝþëþwv¾Þ¿&›úÉà™O½7Øùúàök>¼*Ïõo¾±ÿ–÷nïFpÓàÏû~ßÿå³ýÛs€"˜È„Qä‹ñ"g5vË<?d8LÄ==nL@m`Jïe€@HÝãêmIFòšÙD ÝñÍöÑó½ÞÙ/öÃ]5 îîèõzÀ“â_ÐâwøûíO)ÎËøàÔåß³KßÅ¿ãÜÕëëýá뛽þ)$³çz!‚—þÇ wñ[6L|³ÿñ¹óoy/÷{>Úÿçà¥^¿ÿfñ™þíŽÀ—ê°[œÝíùR}·È`CFë’!Aòì°`b·OMNéÉ™Êl^0 MW€9“2ËŸ j“ÏÎ[wÂý œÝ×’Ûo¾&wå­—_~ëNçÒ£×ð»þræS;ÏÃS^4¾jo¿õ*Û¾Š_»õ+¬þÝQh‡sõ×ü¯~ ßr-åg:wôÒÙ£P¿»ùR7{Ãßo÷nþº{íMå½_sý¿¿}þª[öºÞÒ-寺årç«7G<=ž1&àçóˆ}9AdW#&`€wä h RÛ&„Xûdf&¦$(’,- IfõúçLqHïèaALx0ãjæ û ø.ýÅ¿³HšhXyÉŒ¤Øò%F‚S3Ó3xH=^{„‰=½oo Q”çÈX9<í1ã OîÂâ†pà26y{œ Áónµ¥ÂR½ÅáðcãÛxÊ ¹+Á¤ˆÀoi‚xxf*#å©ÍlAÀ—?;òÿ¤÷¶Ñ‚HÎt„ÎpOa$ ÌýÝwì”íçŒÙŠ1µb­:ŸH¯¤€.%ñ ò£¥M ŽBÜ–ÛwJ¯Z2BÃcübÀƒ~qcQƽñ07à ¬ˆ{„ÂŽÐÐ5C§Æ¹tò@B‚Þ¦Þ&©¬ø€­‚¡1„aÛOμôŒ {ìâf>¹þÙÄ•êúeBKk|Ū­ÎVzÁ9ÁZ©˜¦YÛÚ#$‘L‡¥;‰@ˆÀu7£ãÈ(1€\þÝŒ4ØËéi¶ù¨ÄÍj£Ý0m¼=Õ”ÞÛ’olΤ ØQ›²§3Ò«¨d>©RKÒ½ðzÌH¯™>kÖü›ÉéÏ%²È Iàˆ± SI71¬~F›¥5ÐÓrÜ––,ÞÅu†s„J2IÊ–)2D (C‘ñ`ìÊi¬Äå¸Ú’9B0q¹µ©J Üž`ʘ€¬P E[F0;3b[ ˜5 ½¥ag”~!#Ïrœ!x,š˜ w$½Òè’c²3Ùi$Ó%&ay2ÀE*y¢Â9BÄÎ;Ø»“è;É4•zr=!™‹jÿt-´ÆA:À@|›…mS‚>?k˜l)I_ûÊ1Éõµ7ñ˜;ãÙtW^¥U½ž“fWõÂmÎvÔ¦ùZðô|×½P[ùf]·p]g(®}¦¡È“§z4§DUòkÔëñòý,+v|¸bà =H×[­ãÞ¬è[m¡¡WÓõ~>5FñP^\ÖøÎ?N‚ÐøyCØë`‘íEé¿·‘?€s*õFò®<å–iäÕŽ‹ß^,—3°­³nvyñvq•´oxKÉÀ5B²îûF%¤t7.ǘñ½MË£^YÕ&@­kÜã<\“än#ñSÛ:bk!SŽîƒáhÔj@N”6™¹ïÞNƒQxDµû쾬¶V£´ax§ïûD£&ªRðu+Àþj°ÂC;¬SjcÑÇýNÒÏ»¾Ñåj—ÉM_蚉‰°óþÿÀ¡áð7ÓnþPKE™»Ä:Ù&PKÙYdKConfigurations2/popupmenu/PKÙYdKConfigurations2/toolpanel/PKÙYdKConfigurations2/menubar/PKÙYdK'Configurations2/accelerator/current.xmlPKPKÙYdKConfigurations2/statusbar/PKÙYdKConfigurations2/floater/PKÙYdKConfigurations2/toolbar/PKÙYdKConfigurations2/images/Bitmaps/PKÙYdKConfigurations2/progressbar/PKÙYdKÄöïvf$f$5Pictures/100000000000040000000300B5F9E555E6F721F5.jpgÿØÿàJFIFÿÛC     ÿÛC   ÿÂ"ÿÄÿÄÿÚ üõ•¾ÇÀee®›ŸPIDäîäν¾n¾~¼|bû£ÚèG£ÊžG³ägY,˜Ü±©òwrŒ½Ÿ'ØsáNÉŽ½ UÖW»µÊ+«•óý îB‹ŽšWyÝRèÎú•Ó§% –³±¤äìæ5(uKl¤©e¤Ï™giÒ‡§PCA.:d*¹ÓN³rÒ¡°ÊuƒˆìÚY±Ö$Ù©v4¥°Œ]'¨©[0H‡ÐlY%i8Œí;P8ë5lu€q¨¥:–ØÕsW€Ä¢8dý«{¾k+•¹ô,¬ƒ“³Œ×½ÍÕÍÓ•±ãè÷/G•|gÇΊU3¸°a^NÎCKìxþÂx‰IóëÔ®šÎíãìÖX"ùþ‡6ªË´«2âéçèÎû'DéÉAÃÉiXÒòõs ÆÑÇGVZ(ë#FUœeeµˆ6S!Xã¥U—:yÖzÊâ †R´IÚ¨Ar„5)ư:³¬ ”J!‚D0ÆÉ “f ìi/ Ç9¹Í¬ŒrEs¸ârÐ’‚ŠèX2+½dowÎu"¸Y[ŸV*Îwg¯›§›§/mËÑîôóô÷òÙñÍ´ë7³£ÃJOŸ^¤uÖ7ws”VTÞw£ççh®¸ÛFÒž.žnœïµ:qLpòZVΗ—«–V†:º²‘GJÇf2¬ë+(â ("€"”í(sªN“r1§+K(!¤íªŽ­¬Í•éNѶ3Ž4Õ’“§ Ó.®Óâ â3éç裱Öz6±±)Ï:¦wŽu]²N¨X3•¢Ñ>½‘½^7#ã£4y:¹ßç´:ñóÜ}ïG/O£ÊÞG«äåª2çhÈù:¹ ogÅöuŸ|úõ«¦°{x»\ #Y¡çãj¬¸èÒ¬§‹§›«;ìGNœW<–ó¤åêå•…áÏ­–Š:1ÛSJ±¢C9Q°€E ´¢°Î©:OYâÊÀÔåYea;«+k3txS‹µtg ,Á]s½DxHÞ±gÓÍÔÇã¡Õ÷‰NyÖyÜv9Õqɪ”‚êÚ®~©‘½>7WÍñÑŠ”<\¹×»Ïhuãæ•<»û×ïå#Õòsª©\éYÖåéåìø¾ËŸn˜ëÖŽšËvñv¸@Êäyþ‡ŸžŠ¬¸ÛJÑ®.®^¬ôíGNœW`<·'7W(¬/ uee"”³ÖU*%ØÔÁÝgIë*q% ãi;b«£ët£) CÇ0Ç GD 9 ”LoQ(‰ŽqÄ6u.®^¶;c¡ÃožÄÇ4ë<ô†':®95gX.¯¡j•Ö>•‘½VÀG##c«)¹ºyrûœö‡N^q—nü÷ïåo+ÓòÍQJçA‘‡stòšÞÇìk>2<ñÓ±·wv°ªÊ›Ïô<üíU—iVSÅÕËÕö£/N+ˆ[F¼½\¦–ççÕÁgI±ÛSJ²Œ5ˆ.TAX ªa—;ªRz¤r´s¬CV;M])¬IÒ”§h ¯#@âY)6¦9Ì'DÆÍ8tó!†=|”NÚÇS«ïžÄ·*Vxß9Ç:°a ZU¦uw"³¶³ô¿•ÀÍÆó~}©mÍÑÊ>Ü-œx0Ü»û=×ïæo3Ñó3ª©\è4ØO7G4ïcÆö\øÈÉŽ½jˬÞ.ÝaA8;üüì+&7HÖUÅÕËÓžªËÓŠ‚šÑ±¥åêå…Ꭾ¥I§D\A²eYÈe.B° DcªjËÚtž±Ò€ÎU–\A“¶›:SX•'JSŒ++VÄV8É©¶s¤ó³YV“Ÿ§˜Cörv18¸êu~œö:9§YçpÇgv&´­EÕõy[YöšmÛÎàhädltb¦7G0ûP¬zràÃsíìts_·¼¿KÌ5Q—: 7ÍÑÍ;Øñ½‡:²c¯Z•Ö[·‡»X UÉóûüüì+.6ò¬g§›§;íV^œ@Øym š^^žaXZ8êèÀŒÝhÎ’¬K2²*°¡¶$W\îÓ¤õŒE#ieÇ«¥5‰Rt‘±EerÊëX†’”šSç);:¨`Ú³ª¥5‘xÝǨTõâàhådltb¥77O)¯f5‡N\YO.¾½ùíÛƒy¾‡œ4W›‘ç¿8cÇõµŸ%qÓ­pÖOwk€0Ѹ;üüè¸Ûʲž.®^¬ôíGNœØyo š^N®QX^êêÊLŒŒv4gIÀ ²p06Å0FwiÒzÆÛPWQœ«<è¤j´Jk¢R†9Õ‡ ™XJQ˜ç<󬱳iY“—¯”C5Þ.ØcŽñÖëMòågŽœÄìîÊëÒ³κÀ¼z5ŽÖC¾O—73Mñ¶Êhóßž}yR;åöçÛÖ·=»yßÎï󳪀 › sÛžO­äzÎ<”eÏ^¡ƒ†íáíÖÁwt\ôyÒUÇÓÍÓž¨éÓ€À-£léyzy¥axsêêËEí¡§IÐZ$ @8mH¬¸Õæé¬ŒE@¤«#X‚8íV¤ë¬F“«´++– «™XZu›šSžU–6o¢rõò Ô;¸»¡ö;ç×E}óØ”ägŽœçlêÊê‚ò³κÈèF±vC®o€®fS±RÇžüãëJ‘éË Ë·«hW·¼ïCÎ5U*h:1{Âw«äú®|¥eÇN¥+¬·gf°W'ƒ»‡; ôy¼ë“§—§íR½x °òÚ6Η—«”D-uuebŽ„vÈÒ¬è-fÊâ((c¦jËÙu¶  ŠJÒ5¶Äv3gJo¬«Cˆêã•Ò³£“N³JœužiVXèÖá9zù2¹®~þôcޱØëNœ¶%9%ic§>;;²ºÆ´¬D®³º!Ѭ1Båð ÎÈØÙ#CsÚêÊ‘ß>L7>¾¥cN¼Ïîà5A€†F…c;Ôò½Gb•ÏN¥*å»8»5œrÜ=¼9Þgo7rtótg]ªW§!°žkFÙÒòõrˆ…ណ¢Ž”p0Ò¬«-fV²ÔԊò:km@)*Ë.Û$µe]ó•eY)DqÊëA•å§Y¥XÒ´qÐôC¡““³.tqçïàôÎ;çÙD¯N@“’´±Ó›Ù]P^7†¬ë¬žˆtï(ÔÙLs•9ÛÔдÔ“Ï|ù0ØëéÒTëÁ¸{x T—254+Þ§•éë>j•ÇN¥+¬7g^³†xû8³ 0Îé*N¹:yº3¾ÔdéÇa‡ž±±¥æéæ£žŽ¬¤U–Žšt DæSdm¨+ªjËÝ7ˆ¬r¬ÄdàÃjN»çÊÔ1´+¥fVšJ³K\sFÒÇMцNNÎ2®k›ÑóýfÇ|ûh”éËS’V–7͉ÇK#«‘ц6•µÕÏÕ¬q•"ØfFÆË.F… >œž{Ç.ß_J’~¼ƒ·ˆÕš5ˆïOËôœùÊW;ék-×ÇÔä´>¾<ë.ÙÓÍç\ÝÝßb•éË ‹ž°±¡ÍÑÌ"U–::²ÑVI;diVU¶Åвe"°Ú°Æ¦Æí:&ó¶Ä”VT˜â íˆÞ“®ùƲ­lB+¥%ƒ«Kγsr žhÞèzyúY8»xÈQ×?£çz5BN]ÔJtå›4qÆòÇNSŽwiÖiº!Ñ i[y=\Ýzçæ9Ûª §;$dhZ})´÷Ïœ޾…$ýx¿_Z€24´i*Þ—™è§ž¤g}+•Ëõñuë8`äòuñšÃlíæó.kóôg}jW§€žzÆÂ9º9‡F³ÇFVZ*Ë8 :M° s+9ŠÀ­bÌÎ®Ž›ÆØEeYÄ8½e]ó£jÛdWJNGHÎŽ4&—!µŽXÞúžn¦N>Þ!G5ÍéyÞ”;ÓŸuR9‹ž8ÞXéÊqÇKN¨çtC¢ã}àõóuTóêùrE‘±²T£BÐFo=ã›aŽž…$ý8¿_ª 25RC½7ÑÖ|ñ†7Ð0Ö[§—¥ÎØ!äêä5†Æ šüýßZ•éËkšÐ¶t9ú9§J²ÇGVZ*Ë[†tTs©s†Ô6ˆ55aŽ–GMsÀ‰À‰IVYNImY[|áxÚ†9ˆôQÒ³£'Iè¹ ã–ÇCÓÏÒÉÇÛÅ”Rt5Íéù¾”PãÓŸ}½8ã›G¯}9N8Ý’‰£tC¢ å}`örvïŸÏ”<û¾Sdlè‘©¡hÏz4õˆa±Ó½¦ý8·'W$Ð`kb2¤«zw œ ï eÖ_§“©Î#rtò‰gnŒ±Í~{ç}hËÓ–+÷ç*Ë=(Œ´U–¶Úštš`@æVA°Œ6¬F$gvGMã¤'Ie;i$µ¥]óãVÛk+IÒJ:Pt ¼ë4¹ ¬r㟧›ª‡»ŠE'\ë—Óó=6©Ç|»ë:õã›â•厜‡t²VnwD:¯`öröo—Ì•Ü}†i4Ûb24i#]ódÞ!†ÇNæ›ôâܽ<¢ûÍ6–•$[¿ÏïÑÂή0rzyzSaœžnŽSDa:2·=ùïõ!ã° ʦ‡?G9iÒyèèéEYH™‘çm9‘Ð ¨m£`E—:º<õŒAPE%Ye;Ľe]ó•efÛk)IÖLÝ+:8Òtž³ÐC9å‡D1Ðôóu"ð÷q¤ërú~g¨”`zrô+:ôäNgîœþD©óú[ “d9Û``Ê’žäiëc§c#täü<£A„æF#7nîäâØ¸ÁÉèæès°ÎO7O)¢0ÎH®{BÙßR•éË *5Mn{ÀL©­×ÉØ‹ÁßÀ:² òúÞO¬Ö*Ý8úvºñfVsÇËŸ^RwÓ*ɯ“­)×ÇÙ¾vôü¿K§Ë2ŸÓfC”ÉÀÓ#!\a¬®Û:®YxÒUL0æFb¥Ktòô$pª0MXÕ6Tˆ¶h¤da²2ë 3¤©9dêDVJ‘[aY(í‹dfØÄVGž°ØÃYÒBHÒĽcnœåhضÅÊVU“:N³£ÍgI¹éd}c—Ÿ£ŸŸVëäëAÁß牤è<¾·“êµ™[§Nз^.ÊÎx¥XóëÊÊÙßDé$n¾N¸§__Nvô¼ÏC§ËJŸÓbŒÁ•„á©•’¬0s†«†ÖTÓ XƒEH‘ÑÏw1àÂ5dèrêy<醜lÈÖª¹\¦¦Ó¤™²‚ 2²ÖR#(«+b3m´l51S@jÓtÖ1H –T™£±¢Tíoœo 1Û9ZJ¢Ót­I¸Öt–³ÒèúÇ/=áÏ«uñõ¦óûøHVU5Ëêù^­Y”õåéÚ5ëÁÙYÏk}yж7Ó*I«“©)×ÇÕÓ½;Ðß/ËòŸÓb¦3MŲ”dešŒàAª`¼©9|5º˜aZð´K,0bò¢l44ÞrÃ| !V4à®±ˆ5'GŽ’Ûa*ËXCaYXìPm£¨•jƒTGMdí¨ŒeY ‘ Íë*QÃ"ÖU’Ž): ’ÖzYXå…ùùõn¾N´ü©:æõ|ŸV.TõåéÚ5éÁÙG©.}9ж:tÆ“FêäêJuruo}7Ðß/Ì ïÒfF¬ÈÒHÔÊV*C²š Ë¬º2ì(àd‚(Z6I"ãÏ7ŒW3ÍŽÚÓ0Œ¤]YuœA©º9dt–Ä V1•…lDŠ Emµf”0ËDtÞq° VU–S±œÀÕ­ïœíVÛ"ÒU–›¤gF“¤µž–VsÍÏxc£uòu áîàYT×/«åz‘r­×—¥XÛ§tg•a^œœ©NYRXéÌTã§LÚn_£›¡©~{kìáìß?ÎJïÑfF†*Óˆ0ÀŠl 0 J°rÊÉO¶¬ÊÕˆÊ+*Âm… ™ZŠ:ÛK`aZ]Hs¶57GŽ’ÀŠ`EDã´ee£¶ À ÄAN  Ù(šÀ$P ¢’´‡Gªõ•w‰Z6Œ1IÖt:N³¥%çI¹»)Ö9¡xc«urô âìâYS:çô¼ßN(ÀôåßYÓ§& §$m,tå#g}tFèæèŠ_šúÍ;8{7Ïó¢§Åô +32µmŒ0"‰%HGR´ûjÌ­XíKYÕ'¶ µ™]‚…ƒ­´#+Kâ MÑÄΉD2ÓZÊËGm%Ycb(•hfØêĘ`jÉDÖÚ€e•d'l9«ZUÞ#hÞÙ“¤™Ñ:R^t››²gšŽ:ž~¤N.î,¡Ò†¹½?;Ö‚öéÞ ö§N<¦¥<évË<ÝDÎí7š7G5â—ç¶óN¾>­òü÷âú,ÈðÄ;`E 0"peGFÛj̦‰…eXžÚXY•Ðm ¥''mM¶„eiueLq©:¸éÑ)ƒ-2° “¶‚޵¶ÓŽ.F:†:¶:&M](šÈ;PVQYVYqÚ±oiWx£häeQ3¤«:<ÖT“ž†Rçš6–:7¦Éæý'—‚® rû¾gÒÕþ‡ë=Êð¾ö?ÌwÏæºýKoŸ‘Å÷^—>¿Œqý—É4çX¸Ý÷g¿=õ‡êãêß?Àøþtxb Š0"› ’¬‘Ö˜ƒX«V;P¬ªÓÛ+:: rÑ'm‰ˆ57G§VTÄ'AÓ¢S+-0e¬¬'b ««m±fVM¶¶­¶”VÑ:&³¶Ô”Ruí´â tZ5Þ#hÞ9'IÐLé:G—&æägšU—>ׇíϧáúÞq¯8úý|/¦ñ}ªúÏ¡‡Mvü¯ÕüÞñÍúOÎwÊý?øýþv°œ}œZη=Ò–…u‡êäéÖ>ƒãú‘ܱIaM¶†Q#+-1‰ŽÚ…eZžÚ˜2ÖttÛf)I‘I8ÄÙZ\çjn””J*ëL¬µƒ­mµul ÊÈ1ÐÕ±Í5a](šÎØÒ£¨¤«1ÛiĽ¥]⣚u›‘'YÑåçI¹³+9棎”íàô*™¯·éñ¾>nÏç§·Ùòž¹ýçoæÞæ³ûäþSìøú?3üëî4éËÏáîmË~tÖ绚VÞ_£—¡ÇÄ|žòÊèHhÌ u´0"ˆ!])ˆ5ˆjØê[FÍ-±8"…ШΉ[,A‰º<º°r›£‰'Ž’Á–а­¶¦GFØâ̬›l›m[b2 £Ð”Md¨#¨¤«1éb謭¼Bñµ`BN³¡iÑ(<è/:OEŽÎy£ic¡ëäꆅùÍvöy—ε|žæëô8¡®~¿¯á{›çö?­þkú·Oá¿ûåÇÊóuñ££#xY)H×Y~Ž^cã>Oqet,­‚ÇG ¬QÑÒ˜ƒ9Ž¥´ªÒÇ:RÆŒé:8‰mŒM•¦•Î ÔÝ(:tš2:šea2ÎÇAJ#lqfWr6,641Õ%eκ‘ÓXÛEu•d;l8ƒ]•·ˆZ6¬D¤è&U”gG'¢Çg<ñ¬±Ñûù}ÊãßKÛü·—÷>W­Áw5¦ñëý7Î}³ŸÖþ£á>ëÏêù¿Ç?køW?ˆùIóÝ9¤é=g_žÉJJŽ£›£Yù —ÚYY +Sm‘Õ±ÐvÔAÈë,A¬A£¶hÕ$v6t¢)Ø RrAÄB¯49Ä•eYÒ¬¡•ÐÓP;fd¢VÇuwÃCQ ¦ú‘ÓXÛjUuβ¶v.‹J»Ä//®–ßMdøêûÝÃò“ý5ðoô>=Fw›—k}J|D>¯æñ·úß•íŸÙ>3å“÷|{¦=[‡Y…׫\ýßG›“YúÿØÿûtý â>Ÿàyõüççý_§!:IɬlISYkó_YùC·—ØY] +V8¡ )†ÐÀŠ!‚4è’ÇjÌ D Fí 0:³¥ l[N²"–ÛB2´ÔçjU•gJ²†VQ!…`ËGbÍ:$lD—JB“«ª*Ã;êJ&¹´ªº J³Ž‘±.‹FÛÄÿmüKõìî¿™~¡ò5ú'ç¿Sãeú•åûŠÎú¾ qú~§ZK×ózçæÇse_οGüóYå¼:«í=ß+ÕÇ_™ùßW9ð=:ú;çåwö{ºÏ7Þû>ç.¿‘|¿é—§Éù½¼:É% Ö6†¤©¬µù®ãæ6>oaed,¯X‚Œ†ÛQÛQ3+¡1Ù1 XZѲKb,mIÖâšut¶Ù&èãPÃYgZ´¨¥&.¬+Z;d¤ãlg:»•;VÛV **Ã:êJ&°Ò‰D•d;m;l=÷ÎÇzìõ>{U}µô¼ÞÇÒéðÞ¾¯Êó$ŸO¾'ZyÑÆþ“ËàéN¾ß"y×ÜûÙÝDü«êkôËSÐô^GÃ'ëvüoíFÿ’}ån|;£“y¢29ÖiÞo¬5amgæÈ>oYudÌŽÅ"›cDÌŽ”äÛÀê‡B@ì.­IÕÙ ë)Ù6Ú¦èóPÃYÄ¥Z´i§D ¬U…4ë:ØèÔGAŽ¡ˆ¬TU—:ëJ&°ʈê3e—¤F÷…÷Ïžñ½BN“ éÒpÓʲK\óFÐÆÛ£›¡—žüƒÑNGίôŸ%í×ìÞÏå^©¯£øyù8úoámgÑñ§ÍJ@gVR4FÔÏ7rkë?>Aóú‹+¦ezÄ`VŸmGÌŽ”Ç ê…Ú'bu`²² ŒVTvÂÛj›¥*¡—YÄ5BÒ°ˆÞ5’² ¬C- <蕃.”…;VÛVTU—:ëJ&ð1Ô‰D4‘´Gm„G¢Ñ¾ùóÞ6¬¬±:N’eYPtqyÒIc³žXÚ8èoÏÑIÉ×ÉYæÙÒz^W{z/çç´ ÛÄ ¼±¸à ÜCXÖÑœšFºÏ‚qóú³«&uj;d`E8:!X :$1Úƒ$ Ñ ¤vÂàä•X ÊÑ¢–ÄT©:•C gj6•KFñ­:LÓ‚(««tJØêÔJ ÛF0 ¥Ëõ«®ð1ˆëNVˆìD±tÚ6Þ!hÞ€"%D¤éVT^U’XŒçš6Ž:óÞ—¯s# {¸{iðÚÇcÉ÷ƒ†NiÒXÜpÙÝÆk*S²>³©*9ñnœÊé™ZŽÙ2Óí‚ ÁÌR“‡ØÈ!¨‚ tsô$2àˆÕPkJÒ­¶–ÄD©:ƒ d05J¥¡xQ•dj€„*éLA§f›lMIÑ6Ù†:‚º—8#;ìJ&ð1Õ4¢gS•¤ 2ÈØM£móç¼/YYbt$Ʋ èâò¬’Ûå¡›Âôœ|‚XÔ{8»aòg­‘÷Ïa«žo<î; êã5•ʲjIõŸÿÄ, 12A3B!"0#$%ÿÚýŽÕ£ûQÓÍõýÓù ?ªâ#øú/§öŠƒûRõ©¥Aý€þWÑ7k·Ò—êGö`þ ÝS‚ Njhþ\?Ÿ¢ú/¢ÈÍÅ}ØWÑ>‹è¾D•ôAô_Eô_Oã踻ô_DÕRÂÖ%ÙNËrWÑ}B#ùú'æÇè,v­ÚŽžo­v†«ˆá~qSj~Úš?a“ ÞÇm˵9j67rŽNM˳ df𜆠Æño,ÕRѬ K²–æZŽS³cô±Ú·j:y¾µÚÉÂüâ¦Ôýµ4~Ã0ݬ;"Ÿ—jrÔlnéØ È'&åÙ‚†²3q‡#q¸¡p³œ\]ÕR†°1.Êv[“-]NÍŽÐXí[µ<ßZí dá~qSj~ÚšTØfµŽÚ—jrÔlnèà'!—&åÙ‘¬·7r67Å¿Šâ膪–`b]”ì·&ZŽS³cô;VíG׿ú×hj¸Žç6¥í©¥M†QMØØí¡ùv§-FÆîQÂrrn]•Ô5‘›Œ9 ŠÚ-ââ膪–Ý`b]”ì·&ZŽS³cô;VíGO7×5\G óŠ›RöTÒ¦Ãhfö;h~]©Ëplfèá9äÜ»+¥ e¹¸Ã‘°Á¼A°[ø®.ˆj«aMÖ%ÙNËs-G)Ù±ú «v£§›ë]¡ªâ8_œUÚ—¶¦•6næÇm˵;5º8 È'&åÙ‚†²ÜÜaØ67ËEœââ膪¶Ý`b]”ì·&XŽÉÙ±ú «v£§›ë]¡ªâ8_œTÚ—¶®•6Cv6;h~]©ËQ±»£ªr ɹ~dk#7ru† áÉÙø®.ˆj«aMÖ%ùNËreˆå;6;AcµnÔtó}k´5\G óŠ›RöÔÒ¦ÃhfÆÇmNÔå¸67tpœ‚rn]™Ësq‡'Xaׄs6~+‹¢ªØSu†â_”ì·&XŽSö±ú «v£§™ë]¡ªâ8_œTÚ—¶®•6E7sc¶‡§jvj63tpœ‚rn]™Ësq‡#aƒx¸#g⸻ Ul)ºÃq.Êv[“,GdüØýŽÕ»QÓÌõ®ÐÕq/Î*mKÛWJ› ˜fö;h~]©Ù¨ØÍÑÂrrn]˜(k-ɸðl0qiBàŒóñ\]ÅV›¬7ü§e¹2ÄvOÍÒÇjݨéæz×hk'o6¥í«¥M†È¦nlvÐôíNÍÅÝSË“²ºPÖ[“q‚†ø8A?ÅØb­aMÖ‰~S²Ì™b;'æÇè,:·jZyžµÚ:ÉÂüâ¦Ô½µt©°Ú¹±ÛC²íN[‹º:§ œ›—f ÈɸÁFÃâ‚2p‚3Áªâì1VŽ¢›¬7ü§e™2ÄvOÍŽÒèږžg­v޳ÅùÅM©{jiSa´3cc¶‡§jrÔlnèá=äÌ»+¥ dfãFÃñ‚¸ŽFyø®.ˆb«(¦ëü§å™2ÄvOÚÇicµnÔ´òô]£¬œ/Î*mOÛSJ› ˜nÆÇm˵9n ŒÝ' œ›—et¡¬·7(Ø`Þ“„ž~+‹°ÅU2Šn°Ýeû'e™t±“ö±ÚXíFiiåè»GYâü¢¦Ô½µ4©°É†ìlvÐôíNÍÁ±»£„ô“2ìÁCYnn("Žƒ&ÁaÂj3ÏÅqtCdPÊ)ºCu—ì–eÒÄvU6±Ú‹£4´òô]£¬ñ â¦Ô½µ4©°Ì3k´?.ÔìÄlfèá=äÌ»+¥ e¹¸ÁFÇA“`Ââ8MÁž~av«@Ê)ºCu—å?,ÙÒÄvU6±ÚXu¥§—¤QÖx¿(©µ/mM°Ì7k´=;S³Q±›£„ô“2쮡¬·&ã 6s#<üWDSU ALÒ‰©”ü³.šh쟵ŽÔXu¥§•¤QÖx¿(©µ?eM°Ú¹±ÛCÓµ9n ŒÝ' œ›—eu e¹¸ÁFÃÅÁÁÂj3ÏÅ .ˆ¦«GQLÒ¬¿dü³.šhìªmÉv‚ësK_+H£¬œ/ʵ?eM°Ì3cc¶‡åÚœ²ÖnŽË“rìÁCYnn0Q°Á“`Eq&à£#D0º"š¯ fÜMM“ò̺i£²©µŽÔXuniéåiu“…ùCö§ì©£öCv±ÛCÓµ9m¬Ý' œ›—f Ërn0Q±ÐdØÌ&£<üÂèŠjº(.Í!ºÍM“ò̺i£²©·%Ú‹£4õò´ŠZÉÂü¡ûSöTÑû Ã6±ÛCòíN[‹º8NA93.Ìe¹7(Øè2læpgƒD0º"š®ŠáLÒ¬ÔÙ?,˦š;ª›XíE‡4õòt]¥¬ñ~Pý©û*hý†a»Xí¡ùv§-FÆnŽNM˳ e¹¸ÁFÇA“`G0p›‚Œph†bš®ŠE3Hn³Sdü³/šhîªmÉv¢Ã¨Í=|"޳ÅùCö§ì~ØfµŽÚ—jrÄlfè꜂rf]™Ësq‚† ›xŽQF84CäE5]2œ™¤7Y©²~Y³¦š;ª›r]­‡Qšzù:E,IÂü¡ûSö?Wì3 ØØv‡eÚœµ¹G È'&eÙ]CYnMÆ 68ƒ`ÁÌ&¢Œph†ÈŠjº(g…3Hn³SdüÓËæš;ª›r]­‡Qšzù:E,IÂü¡ûSö?Gäf±±ÛCòíN[k7G È'&åÙ‘¬·7(Ø`ɰ`®'a7àÑ #‘ÕtPÊrfÍf¦Éù§³æšvê¦Öl:ŒÓ×ÉÑv–'‹ò‡íOØý_‘˜nÖ¡Ùv§-FÆîŽNM˳ e¹7(Øè2l9â8MEçà†«±MWE §&i ÖjlŸš{>i#º©·$ëaÀÍ=|ibx¿(~ÔýÕù†íaÚ—jrܺ:§ œ™—et¡¬ŒÜPEMƒ0p›‡#!„s•tPÊ*žÝf¦Éù§³æ’vê¦öl:ŒÓ×ÈÒ)bx¿(~Ôý•5~Fa»Xv‡åØ9j67tpœ‚rn]˜(k-ÍÆ 6: Ø0sÄp›‚Œph†ÈŠJº(eOHf³SeS4ö|ÓNÝTÛ’u°àfž¾F‘OÅùCög±ú»#0ݬ;C²íNZŒÝ' œ›—f ÈÍÆ 6: Ø0sÄì&§#&ሤ«¢†xU=!šÍ]•M©ìù¤Žê¦ü“­‡,×ÈÒ)âx¿(~Yì~®Øfµ‡hrv§-FÆîŽNM˳ ddÜ`£c â ÁÌ; ©ÈLjaˆ¤¼„PÏ §ë†k5vU6§³æ’vê®ü“­‡,Ö¾±OYâü¡ùg±ú»#0݇hr:œ¶ÖîŽNM˳#YnMÆ 6: ›aØLÃ‘Ž Â9Iy¡žO× ÖjìªfžÏšIÛª»òN¢Ã–k_X§‰âü¡ÙfïÕÙ†íaÚ©ÈFÆîŽ©È'&åÙ‚†²ÜÜ`£aƒˆ6 ÁÂnŒph†ÈŠKÈE7<*Ÿ®¬ÕÙTڞϚIÞÎÕß’u°àeš×ÔE¸§¬ÖÝUÚ–Õ&‚w´f·°bx,â~ ]Ø9w°3g`®uË‚(dæF²3qAl0q naØLNG+ƒDÜ#°Š+ÉNMÏ©zâž³[uSj[Tšw·µ½ƒÁgÃñîÁÈÙØìŒÙØ+l. ŽdbGø¹ 6 ñ; ‰Èljº£°Š+ÉNMÏ©zášÍmÕM©mVh§{;[Ø1<q ?݃‘±Åƒ6v äË‚(#™‘Ÿðr68ƒ`Áϰ™‡#&ሢ¼”äÜñÊ—®)é5·U6¥µI íío`Äð\0ü@Ž‚ºqglìÈ6 —$ ŽdbEæ 68ƒ`Gi'nªïËæ „'³ÓolìÈ6 —PG21#76º ›aØLÃ‘Ž Â;GŽß©òXÛôLoÕÎajú*ÿçGÆ.T¾"³•_…¥GâªÐû[ö*?ê8|uZ¢§ˆúj»?³Gö©4‘ßµwå‚óh³³ÓolìÈ2Ùp"‚(#™–æãl9âvpäcƒD0º"Ž<Ï ÔZa«éö”¼ZòðhS§M­^pÿù.pûG‹N¢o‡QЇ”…F=|í0ß$íRi'nªïËçÈB{=6öÎÁ\ƒcv\C'21#7(Øè8ƒcpsÂnŒsðCUЛ–0ýþO–+±ô‹GÙô?oñüá‚ÖøÞEJB—È…_äÞ#Ü©øu OáèÓ¥òô­V“é¯7ê絟޻>Ù¤º«¿?ÌÁ¿³Ó‹;g`®A±».PEìÈÖ[›ŒltA±¸9âv0äcƒD5]/Ì­Ay>y®Ÿú%Q§÷:§Šà×RøôÙJ/Ù´ªÞ¥à±Ê—QŒeZì¾Cûypý?)çïcÃ_]ÁÂ)'nªoËçȳ³Ó‹;g`®A±».¡“™Ësq‚Žƒ&Áƒž'a3G+Ÿ‚GaUb¾Áú‰J°ò>.6¿Å{SCÖ}í¾V£Wÿc÷7Æø¬}v}«âÒª¾oÅoŽêÿG/$Ÿ½Œÿ¥v–¤º©¿,œ"…Ýž›{!v ä ».PEs#Ynn0Q±ÐqÆàç‰ØMNF84CTr#ÇÑWu4ø¿5´*ù~m'Rw’¼$UL®ênò* ”éUþåYÿe*nþ(9x.!ïkŸCäXÿ!WËv|ÓGuSn™Â(@³³ù{g`®A±».¦£™Ësq‚Žƒˆ6 ð™‡#&ሤ«¯¢cKœâ)‡Í)ÿÌicÇÏÃxÿ«\7è?ô~7ý|¦*ãû7gÍ4wU6å‚ó„W³³ù{g`®A›²àEPG25–æãlnx„Ì9çà†«òAªµ5ú@Úoy{¾ªŽ&§‘㾉jû§ÚU:DŠ*|pð©ôÏ×ôÈTôUj/¿ê¾(^§ŽY_Ìñ¿Lý¿Óè©S/}j§AŠ_柯•T=ß-Wþ¾S¿·äù¦ŽÊ¦Ö‹Ý`³°Wäm킹Æì¸A95;25–æãMÀßÿ3ãþãã~oÈÿçSýS÷ü}*+â|§žï+Ëgé|¿Çü‡Âù>"øz´Ùñ-4<ï?äüVQó|ÿ¤Ï ô7Ä>mO¾OêËÈ?ØeøŠhìªmþ‡ YØ(lqglìÈ67eÀŠ É©Ù‘¬·7(Øè8ƒcp6ø:ß§ðíò©|å&ü=Oßy2ß«ó~‡ÆyLgÇ~­â¿ïàø”Ýáùÿ)ñÕªyÿ4ßÛøß/AÞsã»Åøãÿ‡Hô>á ^FFΚhìªmËîÂ2žÁ_‘·²`®A±».PNMNÌe¹¹ÐQ±ðdØÜv—›V•ù¥ÿ3ä§V$ÓóêŠ~gÈñÛåü½)QójPu’­ä&|ï”ÚþB­vøŸ/_Åe_–¯U¿¾ªâü…OþWÌySiŸ¹Õßü³ö¿ SÿÓòõ?â_õ?Q®ñM<3¦¨|=*TÙE´êµãê¾@ÿÓäê1¾_”>Úƒ.šhìªmh¼â‰ì68³¶vyÆì¸A95;25–æçAFÇAÄx„Ü9àÑ7äE%X åáù‡Æ©[Ë}s÷ÿ> _±SþÀ/#ÌýŸ‡ä|JëÇù'øîñ>n—¿ô!úU|Š¿Uä?îsréb;*›YÁyÄv YÙ °W ØÝ—A97.Ìe¹¹Ðm|A±¸9âv0ôr¸4CTr"𮾍;ùûrñ_ý~:¿ßã~¢ùŸ/úÔ®¿p¿r¼Ÿ-Õ ê}UCü·.–#²©µ¢÷bÀ„ö:68°fÎÁ\ê2v\ œ›—eu e¹¹ÐQ±ðqÁƒž'a3F84CäE%ä"†WÕPўʇçOÓÈó w:¢û×Þª¿ù.OË2éb;'íþ‡$Ogò8°fBìΣ!7eÀРɹveºËss £càâ ƒ×1ˆuˆ^*Ñ \š#Ôqê…ØúcQ—k˜Ä:Ä/è´CáŒËDzt/Ô}1¨ËµÌbb‚ôZ!ðÆe¢=G¨_¨úcQ—kŠºÄ/è´Cá#æˆô!Ǫ=Æ*Œ»\ƺÄ/‹D>òeÍê=лª2íqWX…â1h†cÉ—4G¨ãÕ ±˜é—kŠ!Ö!xN1h†cÉ—5ôz{.ÕQ—kŠ!Ö/ Ö-øcÉ—4G¨ãÛÝUv¸«¬S×€ëˆ|1äË‘ÄzŽ=Qî­2íqWX…à±Æ-øcÉ—4\=|T.Õ¦]®*ë„Ç´Cá&\Ñ„8õBíUWu‹ÂcŒZ#.òeÈâáèCö÷UFUÅ^‹ÂcŒZ#.òeÈâáèC›{«GÚâÝxLqˆupǃ2äq„1ouh늽„LJQ— y2äqpô.ƒ6÷VµÅ³„LJQ— y2äq…ÁðcÛÝZ:âÝxLq‹DeÃL¹\=cÞêÑ×ëÂcŒC¨ÈÇ“.GBÇͽգ®/%Ž1£.òeÈâ=c6÷Vì^bFF<—#‹‡¡pcÚõ^KbÑpǃ2äqpô!Çö¿9Ž1£.òeÈâ=còØãˆ|1äÏ‘ÅÃЇü7X´F\1äËš#ЇòÝbц<™r8B~Jðbц<™sDzÆ>-Ž1h‡ÃL¹¯¨ãþ[¬C¨f3. 4| 8ÿœÅ¢£Œ_æŽ?åºÅ¢&\Ÿ?è¿Ñž£ùn±h†cÉ•ÀhõÞüçX´C1CBá’®?å¹ð| |TþfWð1ÇòÙˆÿÑð_ìøìF\1™Ob:ãþ[Ñ;ò!˜óO”…ÝÍz-Ìyò6|èþ÷ç:Å¢¹5õ–¼'Xµf1ëê?è1jÌcú¿ÿÄ 01@APÿÚ?ÁMVÍíynx²›0zFÉÌhßòÛfž,¦ÌÙ36<·Êl²=g4cí[†›)³ªG4cîÓŸSe‘HØ#Zs6<·Êl³¬bÂ5§h£/-À²›0z¤paÓÎ>ѱå¸SÜ1aÌkN öŠ2òÜ )ÈHØa5Vœ}Àç/-À²›,LØ&ªÓÎ>ÑFËe9½"°š«O8ûE.”ï†ÁÓÎ öŠ7K)íGUiç{E¥ÂŠ-„ÕZyÇØÂÒÎÙ ØMU§œ}Œ! ÒÊ{Fl&ªÓÎ>Ɔégp·j­8<Ïc 7Nù°F´àÏh£tøäÕZpg´QóˆàÂj­83Ú(Ý>3 ª´ó´Qºm3a„kN>ÑGÎ#ƒÖžqöŠ>›Öœ}ÀÝ>ƒÖžqöó¼l0öigìý³ë¢ˆôÎñƒ‰+òq >i²F‹Õ >iƒ“[ >i_³ö~ä”^¢Ó¨Âûg3UûSó8s?!öHÑ? }²4}Ò4}‡4mÿÄ8 0!@Pq1Q"Aa2BbrÁ#R`‚‘±3cÑðÿÚ?«k4!°£d°Ð©k_Û€£þ‰m`¡æ­…%†…KZž18 =¸êÛX)/š¶l–-jxèŠ=¸êÛX)/š¶l–-jxÄà(ã;Õ¶°R_5l(Ù,4*ZÔñ‰ÀQíŧLÚÁI|Õ°£d°Ð©kSÆ'G·3k%óVÂ’ÃB¥­lNŽ3±–3k%óWÍ…%†…KZþÝG·3k%óVÂ’ÃB¥­lNn-:fÖ jØQ²XhTµ©ã€£Û‹N™µ‚‡š¶l–-jxÄà(öâÓ¦m`¤¾jØQ²XhTµ¯í‰ÀQíŦröÖ jØQ²XhTµ©_Þ÷GØËN™µ‚‡š¶l–-r¸ =¸´é›X(y«aFÉa¡RÖ§ŒNn-:fÖ Kæ­…%†…K\®n-:ÖÖ kûØQ²XhTµ©ã€£Û‹Jk5l(Ù,4*ZÔÄà(öâÓ9{k5l(Ù,4*Z×öÄà(öâÒ§FÚÁCÍå%†…KZž18 =¸´Î^ÚÁCÍå%†…KZž18 8ÎÆZTÀcm`¡æò’ÃB¥­OœÜZc,/n(y¼£d°Ð©k•ÀQíM…¥L…íÅ7”l–-jxÄà(öâÓ9{k7”l–-kûbp{3caiSa{qCÍå%†…K\®jl-*`,(ÚÜPóyFÂ-jxèŠ8ν°´©€°£k€óV„4*ZÔñ‰ÀQìÎÒ¦¬mpo(ØCB¥­OœÜZTÀU‚®Í[ ˆm-jxÄà(öfÆÂÒ¦®ÍåÄ4*Z×öÄà(ã:öÂÒ¦¬mpo(ØCB¥­LNfhQ°´©€«MO7—ЩkÒ”q²[J˜ °QÊy¼¸†…K\®Xæl-*`*ÁG7—ЩkS¢(öfÆÂÒ¦¬Ï7—Щk•ÀQìÍ…¥LX(å<ál!¡R×+€£ØŒ ’ÚTÀXQÆPó…°†…K^”£Ú›%´©€«§œ¤6–µ18 =Ô6KiSV 8Ê—ÚZô¥ÌØÙ-¥LX(å/.!´µÊà(öfÆÉm*`*ÁF×”†Ò×+€£ÑLí’ÚTÀU‚ŽS)qk•ÀQëM’Û-LX(å2ÚZô¥gBâll–Ò¦¬r™K‹\®Xæl–Ò¦¬r™K‹^”£Ù›%´©€«2K‹^”£Ù›%´©€«¦Rãª(ö¦Ém*`*ÁF †Râ×¥(öfÆÉm–¦¬r™NÀQí%´©€«¦S°{3cd¶•0`£C)Ø =™±²[e©€«2NÀQíM’ÚTÀU‰hÁÊvfll–Ò¦¬`êNÀv†ÆÉm–¦¬z£Ò”zÇcd¶•0`£Rv'³66Klµ0`£Õ€ÊuíH–Ùj`*ÁF¤ìgVØÙ-²ÔÀU‚TvV^XØÙ-¥LX(å;iG³66KiSV =QØ =™±²[J˜ °QïEÔÙ-¥LX(÷¢fhQ²[J˜ °QïEÔÙ-¥LX(÷¢Ž3¡s6KiSV 9L§`(öfÆÉm*`*ÁG½{Sd¶•0`£Õ€£Ú›%´©€«¨ìÔØZTÀU‚z(öfÆÂÒ¦¬z£°q ™°´©€«ôQëMy¼0pîù山͎t– ãômæ>j?4—ÞûúQü ´qK&ä}R'’¥X(÷¢Ž3¡s5 ¢Yz¾¬§ðÀJñMø^pÆï¤mêzûÒÞ8'—Š_¶Þ¤}»~'6Ž.ú¥çN~är˜¹±¹B¬{ÑGµ47ŽG/Ç´êŸVÛ|Ãï·¦ñÊi]ýšƒö–sxý(/¤sÛþ¡Ñâ–]þîñôðÏý,p$ϹŒ»ÎÇÓÇ7/U]iÈæ›íö«‘ïëÓx«ôQ닜“Ká‰~|’ê~}8IÏ,m,lj㞎ßÒÇÜòA¶ÏïÒ›þ9Gê~qóx·ØôeŽz{KÒÍ©,¿Ìr§†éñyMù‰¾YÅ7´üÙ“oh%MÍ·Þ7&š>™ÿæVY¤›üÒÆúZŸ2_ÇÿQÏœ|™÷~ûoÍ4òϦsú¼rô«Lcsœ›}ÞqôÍûMjoÅù”=˜Ù6jÁG½q qœ¤Þb^SKûï=Èú”—hfâçöÔD›zѼ®ÌI¬rfå1ù‚vc‚o×ö}ãxI_¦^UÚ%=¬(õG`(ôF'3aNNÑìû”)§§íõ>`¤©ë¼NJì»ìÄÒÌl–z£°q ‰±°¦Á¹ÍïB>dßí#wÖ Kí/6Ÿ0öçaaÖÞ”£Œè\Í„Ÿ´.Û¾Õ&Ÿôû{Æí ßõ>´GÓhO·Ú¥‡XuŽ2ó¨k¼Ï ¾ñ)£¥þè&æ_èiùƒv¤|ù¿SËLþñògyÿ Y÷ûz@~.:ÃÒ”q £Y?ò—åm.ix?øþÑ¥Á6þ±«'¾›M·¥ ï3Ã¥!¼óGÜ'¤²û#²A7ñ}Èý¢Y?Í4LûÜu‡`(ôFšºäÛ|¿·¼pHy} øs^WžÜ{rÞ&Ó˜æFž®¤Á6§¤Ÿx5µu%ÐÓ}¾ñ6¦—ÅiêðúËèÆ®¬»péúØF·Ä+¼ˆmº®¦Ú²»~öåêËJþ¹GòÁBSÕ‰>IúTó™©7ðýÈ⼤[ΰìˆÇñ{íű¼? ðò²Ç?ÞhýãO[^UŸG’íúˆšwÓì{ðúrkK§«¦mÁ4qÍ.òšXøôG€8¿š4%>]9x¶Aõi$8e&äGÁM,4òï3ï$ú&¶¼çÅèGÄO£/¦ò{;‘ñ:¬¿â€ÄßñüÃ~$÷M94 pÞVW“B7Ž7Õ cf6)6§ñ?L¿Þ Ên°psÕ—Ÿ˜áõöÞ5f›×‡ûŒìˆÇño¶Ñÿ®ðüAú5=àÐáÚ}ÿüÆž‡Ã¿áèúÿ3üVþ^~’—3,Æã/8ø—âw—Gƒ‘<|v”œçe6#BmifÓ8ÏÔmŒºsMÄî!"ó%Oú‰ÒäšM¾Ÿ´kñòšdv|‘ñ_Öhùz\õ4§Ý–'øaÓÓÓ•ç4,Kö=â] ôÏhçL¼µ4äö—þéÃ$»±»ÏSÞ“Í/)žq¨-çXvŽ3¢›NYÒY½OxÞ8¾tü^›ïGKù{þŸ´šÓ¶ñ¶¦¤Ó~8¤‘÷•ÔÔš}¿ÌÇ­7˜”šu%ô´m§©4¿ˆœu&I½yúÄÚdïó–8¤•÷#mMY¦=©,¿Â}£D—õnñGûb_4Ó—ˆâ>ÑõJ>H߀ßósnïö¥ HÞY‰Å?hÞ_÷Bv#Ò”q—˜Hs6f ݶç›zI7´–UäG×?/cÒ7’m£†g‚ÏÞ>\¾©ëÙ oJQÆ^bs6‘#øÚš:~ÒïgÕ2ìmϲ€£Œ¼ê HáØ˜ÐÌq?è‚Dbs6Ÿè²Ž2ó™°´ígPà(ôF'3aiS´€£Œ¼Äæl-;YØ 8Ì…„9› NØõågBâll-:?ÿÄ(1A!q¡ ±Q‘ÁaðÑ0áñÿÚ?! :b¢?b…Ú&¿ó¡ûì·I—é#CCª~ÀQè¶ÁpƇ ûÆgxvŽÁa©]ÞÇgPH×ýÞÍ£½›qCÐÐh^£òJ†Øž PM¥ª %±¸Í6P›Av‡¾/d¥·1ˆÐ‘‡ìš<ÀJðMˆÆðÐBŽŸ‹¤vDÛìÿü©ÉÚ4Ü`H×B|Îäo™Úƒ£º;ãµ è ©_rhHÚÂ!Áoe‹3ÇÈ>C–=áà±I8Â*f!Û(u á^0£, ËE„+†U5y„ð(»)/0(GLU :Gd¦P©ÉÚÙˆH×B|Îà£ò;C3¾1ÏuË ,>¥}›†8»Øì³ˆ%ý•>бßeø~ Êxž ËÁ¤“d;c¨ucÄ:Ìb[#(9XFeT×ÿÂ,&ã[F.ñ­…ë”ðé”RÃþTäíF›1-¥®„53¹âv†:g|cžÈÆtÇÔ¯¸9¸hOÕäû›c¾òc2œˆ§Yx•!­ÜºŠGC¡[ÀíaàV`eSTé㋲‘—šl(GNJ:Ge{B¡Þ‡oº—ôqó;þheß“Q܆tÇÔ§¹9éþO±Y¶|G HeÃðq€Šx°0TÌ< IEŒ(ucÄ: òÐv(9ßñ*Í#A|€¢ì¦xèBÓ’Ò;e'ü?à…k“½Ц„¿B•êv£üNàÇLìŽÜ8ì¸gP[ÒN,ö3¬#ù/î?bñŸe °pã1D"ž< 4‡C(‡nN„Pj¡Ðé Þh9³Ä«44›I'N‘¡wmLèÉGH좸*èvO] ú2™ñ;þ'rŽì̶1”p/>…}‰¸Ìþƒ:ÐþK{+ã3ÆA Eƒ¹ 9¢–¨RT¹u†ãÈ æ< ÌIiÿðËBnÊeæ!G@ ¡c²RËþTçà è_ÑÇÌìÃøÁØèï–ã¶á”p.>¥}–âñ—p#ù/ì©ö…™â8èqwòÀEGv/Äî!Ž™Ûƒva–\ ©öñÿqaÉe|/gbÀï ¡Ýñv\;/ÁÐ]½ÉÜŒëþKû*}¡fxÄØ8cœP¬äÆ+/Ê!Û(t`¬21Ò¡R2 °¡àɇ%¤&Ø^]b(³(Ü´t)éøºGdmœŸõ‚9÷FB„…Чæv!üô‘øvÜ3 .>…}ɉÂÎäú>Åã3ÇÄYñ-áQ€¤é˜ðž*!Û1‘‚¾Ê!ØÆáùŠ º@ð+0üA6y·ˆÝ”Ð›Ì ߤRŽ‘Ù)€B§'hÔÓô/ìj|ÎáÓ>peÙƒw¡–\ ¡öÄ_ìgPX?“ìT·¸Ùñòoˆ¯‹¬¼K"ÌÓo ¾ÌGc¡Ð­ °ÖáPË@ð+1âÔÆžLâ(³€ì]æ!1þ£°>ßgüà…C¼j:b£¡ ¡gæv Åð;ƒ3³&#½ ê"écÅ:¢þ‹{*}¢fxÁ¼;¸ð?ñã„· è Ï¡Opsþ£Øëþ û*}'øù-œürb"°Ì#©˜ÂY@í˜ 1¹+Bm4„3 Ãÿë“L•™E†Äj?è©©©Ô;ÅPÈVŽÄk°‡êQ©ð;Èí tÎøÇ=· ·]}ÁÂ-ÖüöTúOñ³ˆ?VzEPÅÚp2ˆ°Âð«ìÀv`ÀW0*ñA–õÁcÄ+Ãn8E£:Â0࿲§Ú6|GOÀv9f T¬8ÆG†UQ@¨¡ˆÿƒ‚¼SÅ/qÝ"“òð\EefDÜh„u<ê©yEœÆ˜Ñ.¥áw üÐÇGoÅÙž€°ú”ö;5`ΰäú>ѳ©ºŒ"³€¡‹²,åö„E60‹ ¶Š þ!x,:qèEq¤'ƒñ‹1KMÄÜi´&ju¥¬?è;CìÉ™EœÆ» ÂÔOõ#SQú©`c£¾3QÇmŒe¸ ©Occ‹Fu„ý•>Ó猚ð-,r~Jø°ŠN†Q^»ã-ÑL;Á—PàXpõ¥CIO¨P›²³%†™ÖñuðûF2f»¡÷sìÅ!u/ ¼0|ŽðØÎØã] NˆtÇÔû ÈâÁ±¿P俲§Ò\ñ›—B+âÂ+8 DXaxVC¸À°ÁD;ˆ3pÛÇ×a¤h| ðyEÜL–šle¿WŠþñYÿwø#îMMvÁ1?Ô§äv†߸c£¾2ÆÏÑ»žG¸ú•÷6(!ÉeO´Xñð‹x1840_ N†Q^…Qe…‘L2C.¡¢Ó.t¼b4§‹Šâd´Ó`§¤7ƒnàïÅ#(mÜš˜ ©OÌïM;ášÇaÃ:ÓêSߎÁAÉoeO¤lÏËqw¿,WÀŒb³„º(,035=•E£7E1luÄ4P:eޤ®ÃAyˆ‘¡g"o4 šš!ƧPïNHÊ/æ0'Qt#SSäw‡/ÚŽŽñcSXî8e\ ©_eçRÿpëþKû*}!gÄ~/á'ሊø2U‰ÆÊ GÚ*ʢфŠ|˜Ã„ÅÿøX½#ç(ÝÄÓróM‘©©ÒjjYÁÞ)H×t[Ìk° !?Ñ?#´8|NÐÇGxaŽ;pÊ8E‡Ô§±ŽýGgHGò_ÙSí>xŽ{ìcN"+ '¬á,¨³ä´„‘TZ0,Š|˜ŸÜ¶e޼ h(^ž›p3 uõ šËnàíÁ#ÞMMv ‚ýPÛñ;CØï5Žä3¨,>¥}ÃBÄmýÆ_À࿲§Ø¶3ÆU-–Gá/+¬à(eE†÷Šû*‹F°¨¢*u:pëù é8)$ÝÆÓxÊ‚rÿ¨BKø)ä¦ ¨×aÕà7íñ;C NSÜîC:‚Ãê} Æá÷ŒêþKû+ã>>Ow¿#ÅbçgC*,0¼;Œ ÂEqo"eÄxDéǤiá4—ž‚È¡¦Êu:‚¨Ö,à§’ƒx‘®èmüš˜à]J‘‹âv:;CðîF§@Z}J{ƒŸì3¤#ù/ì¬Ó3ÇÁÜYÀüF"*SÃŒqi*‹ ݲ¸¶ ²?¹ŒNœz~F‡Ê>'Ȭ¯¦èRT5ÐÁ©ÔJ-à§‘¶E#(ïšì'°ÃQ=ÜBpwc|ÊyèoØ7)ÈgPX}JûñÙìgHFÿÑoef™ž2Чæ?¬à`ûN†&ÂÎL ¬Uò`Z0‘O‚2ˈñ‰Ø¹Óó_N‡Âq²(%³Ã¨*”ËJ9+€FPûù50* En!»äv:gd~Èeв{–¢.Ò?‚þÊøxÁ<¸-àæVWÀÌ HÐNƒà(F… ² %²5Ž ¼-(ä®1÷sì*KªñöŽ_3´1½†ð Øeø(¾¥=Ž‹†t„½•›c¾#Œ¿ø-MLEeDðݤWÀ¡•r*^œ˜Œ!`_ õ1‰Ø¹Ñ„u#CCãå‹Aiº€–ÃSX»£Xér>ÈÄkº-æ5ØT8¸5}ø3°1ÑØ©¨Žá¬]p‹©_cJ.÷p#ù/ì¤Ëð•Sð†±@Šø(ÄÁG3€¡Ä³‘R°‹¹0,`À²+ŽÔuÄXÀíŒô„§ãäT$hZІ³wð·‚ŽJãÊ-æ5ØC`˜­Â…þñ¢{c¡¿pÆj#¸á•p‹Æ[°çRÁìΠෲ“,øÉ¨e¼Ëñc3K*;QÌU•EŒ ‚´V)FcÁýʨ‹YBP„ê#à|… -•R5‹¼#± #]ÆßÌaˆp+ð1[÷ŒMÔí oa¿`åÆj3¨8fžäÙ©pÇ~%½”™gÄp8\\äÄE`æŠ(f02¢ÃGÔE_%aа0UàŒ²Õ@ìXêÆ‡XÒñ‘ò‰Eà°x¨)}Ü Á·ðQÉD"¢Þa=Š ÝÄ(ûq>"ìèì ÔÔLíM\@ÏÒN±Áoe ÂÏŒº›rñ1W Â00Vp2¢Ã£ê#ìU„ª£½Yp/ÙŒÅΨ¡T(øÇÀøÀÜ|&’[8ð¸hÖyG#C’þctº”'l`n§hf»DaÂ;W‡Ô§¹2ˆt„½”“fxJ!ŃñLÄE±FUlSá ²ƒ‹ëJ¬|ÏŒ /¦Èɲ5†ÝÀ¼…NFŽ!Úw2‡A ü(Q÷dtr1ÑØ£µ ê诱§RáÙÒü—öRAÑž#ñ—p;‡f'Y_!ôœŠ‹90¼Š¢ÆBø¢;ÅYAU±c¦(ë ó½dа^‘Zæ5ÔÖ…Ù~áÑ1®Âc+pj!Ïtx^F:ˆãQ¨Ô£ˆßÙ_~'Ü1·ð#ø-ì¤Ë2Ῐ©_ "³€¡•Qõ‹9*‹Œ!`¢;RYЪر×u„!#å#á‘hUHpk-»Á¨îQhFKy55ØCÄ÷ñá÷g-³‘¸rlÔÔGj[g v¾äÍK†t„%½”‘fC€¦Ášøà(ãᇳAC+,ä‘•EÌ!`¢;Ñfô1‚ÂÇLQÖ„„|æø” ,>Q-ÔDÙǃ5›Hû müš‰ì&:Wâoû'jœŽcDÆýÓGãú+ïÄûÆPä·²…¡c°üGÀ~XB¾*x¬%œ˜\GÚ,äÇ’Ètb[l#µcª+ 1l#¬!GÊ>õE¡Õ9ÙÄêX(ÔÔv#ïÈÛ¹50!ÐB·p¸ù œŒÄg(íCe(_Ù_f÷š–ŒÙÄ#ù,P±hÇ|<¢ÎüQ€ cY¢ñ°:6¡Ø—ÔEœ”E†*ÂÁG„3vœترÒŽ ¡(ø‹×´:[ÙÁ©¬Z/÷ ÑYÜ”YÌ&&:Bø…dx5NFáɽ MDÆýÓG£4ö6þŒ³FÞÊȱß>ò VWÁ©E÷ÄPÊŽÁ…Ä}XQs£X(âëƒúE‡bÇ^P‘¦çÂ>'Î%8–Èq:–‹ÁØV‡=ˆes „: ŠüBƒ°_{9ã9GhÖ(â)ìiÔmã@£oe<<$Ý瀊Âç¬á&WúÅœ”P3Ó”e×ô(¢v,uÅ!B>ñ>q!‡Tþ?ž eß±• ~ÁÀû¹…EA üB‰÷Ÿ!Zäc¨ÎS;RÛ8…ý÷' wâK{(ZðN'.pBã†PYÉ…Ár}Š)'Qè3ìUEac§=1OÀGÌù• ,>qP^?T'Š5‡aZ‡´#%ÜšŠ„:B¡L->BµÈÇQ›”v¦ŽËú{5ÜE£¸mì¡hXì7ˆù(fK0_ ²Š+;ô:*,äÂàGÖ6{\ÀèU‘@¥‰ýЍ¬.uáGÊ>3Ê- –ȉ·÷‹Ã!Zä`ÿ°C²îMEBc¤!^É·ŸS‘Ær‹y5Š8Æ)ïÀœ,wâÁý-;Å|‡å€Šø¨¢¾Ç Ag"¥Ä}bŒÄ±P´ÁDw Ì8ŠˆùÐuáB>B>'̨QaòЇýxõx;ø²ÝAÜ컘T# áI­ƒ(f°›5„÷;Pʸcúð&Z1Û‰mì¡hXì8ÊwG〦!F1YÂL¬³“úÅÜ•EQ„ê#±]pbŠh:ÐŽ”!#ç‹G'ý8+ãÁÜQ¬de@ß°C²ÎMDÄaW…þâØ®GŒÖïÌÝp†_ÑOe¥ŒwâK{*^&;ÿã#4Æ)8C*,0¨¡EÌXK$)f]qV–:óÒ|ãæ|àB/ G'ý¸oþ&÷ Ô]‚ƒ,æ ˜P¯ md œŽ(555ù†]p2¯c”^1Û‰-î•ß"ùÃQB+à£~ž6†PYÉ„}bŒ¢™VUB;e×c±c¯èB>Qò>q¡)Ióüõx; Ã!Zv„;,äÔB0„+›YW#…^Gr˜ïÌÝp0¯~Z1Ûˆ`[Ün\88J`î8xSa‰ÄÁYÀU ¨³“ ðª,1V #µ+®ìQDîXëB:B„|ŒhE¡häùþiÔv¬jdeEÞʾMD#LWñµƒaZ‚Êù†]p†]‰íïÀ‹c{¸’ÞÊ—™ß.üˆÀE`Ícg 2¢Ã"¾LR*–Eb;fت‚ÒçOá ωó…¿¡òs ­:™x²2 ïeÆ¢0„+Â’Y´1Ъ7¹©¨‡xe\!†{-:–Œv’Þãx™üÙ¬¨ÀE|[t0V^ŠnL.}EEœ•E !`¢;e—ö* wƒ¦(ÙÂ(GÂ>Î…T>ƒþ©Ôw¬àÊŠžD1öp…F…hSFÜ0Ê‚‘ø¹†]p†нápÌ ÂþÆód2ßî=ø<¯‹¡¨Œ  vù0ðl(‹ T‘@Žä¬¸gö( °±Ò„t„!ø2¡´-ÌSǃ·ƒXeAG"W ˆÂ55Ý ixÆ0P7‰²uÀì0«ßDÇh2Þü1Ø~—qá®ó„+àF&<*):)…ÁgÖ*c"¤+)؃.¸?±D|‡rÇ^zBŸ€‘ó‰HùEA¥á—‘•<ˆcìáÂŒ¡ `´6`¤nPíÌ2ë‡b¯~8fPrÚ-L¡ÂSqøkÿì<¤jc÷8 û }"¥QxU6 #¹bc‹ië ì!3ç‹ÃªD§ƒY×w‘•mæ £„&aV… ¸v+CfÚ9C·0Ë®˜ö6ò¢lˈ3ú*^&fŠNüe¦ ¢Ñ€ûâ˜ïA–áÅŽ´# &(øùŸ8”X|¢{"7êL¡¬àÊ‚žD9¨ÂŒDXEpìÊèU£)ºàaÙcJ‰™b¦v%7cðœÐ"±ÌÕø Bš"äEœ˜—«*˜îA—\EE…ް„tE/Ò>g̨Qaò‰ì §#XÔÁ”!_"G ”e`™\dÊPw(væÛ® ìÇ¿/”ýFÓ;†\~O+àÉŒR2aã,ù05>‘ô‚ÆXX(Ã,¸+ìQ@ìXéŠ:‚™ð‰óðŸxuCäø6Þ MM|MLî„;ƒ V„# ¡ ±Ù”8T£.fëˆ;1ïÀ¢fPe½ÆÓd8JwÀüš¡–L•QIÃ"†TXaE<˜>†0`T•DŠ Æ ¨àëÏNžçÀGÄsR¡÷‡Oað íãÃ,B¡öò(*~+B, ¸ve À¨9FSuÄ2cßDÌ å´ÎÄ¡ÀïÅ) œ"³€¡•“ ƒÖ>…ð0*ŒX(Úƒ.¸‚ª yéOA3çú••áÕ9gF³ƒ(B®D2ŽÆ˜­v*—ÌŽ(Êl¸vcß…Dìˈ3ú¦v„¼,Α ÖÈE%˜Æ+02¢ÌǨúÉDZ0-ŠK;Pfô* °¹×„t… Ò>Ìp¡·8©Éð ·5œB¢ŽENC 2„;J1ّ åM×É~±Ûˆ3ú¦È~ÄÍ|^WÁ¡ŒVp–TXai(¤TñC¹aÁý ¨‹8Q„|ãä|`QxuA‰¶F²^?¢ŽEN0¡ZìU,2dpª9FPË®2cÙiP3(3úæÈcLâf††gðh.ËÂFÞQ¹Œ.} öU=!P²(5;ÐfЪرÑíMD|D|„ - ©ÈÄžÎ< 諘1=¡2†Œ¡ÅR¬vdp¨9FSuÀóü &e[ÙRód8KÂq¤hPà¡CCñQIÀPÑT .<±DXf±@¦±®èUعÓuá Ÿ8ùŸÃáÙ=œF°¨^…GpPU*B2…c±XÆF`À~ ¦ëˆ;1ïÀ‹Æ;AŸÔo6C„¦ãòx…Jxbc¢ Ê¢ÎL(úˆ´ª- ²©Ø“ìU@ìXèÂõ ƧÎ>gÄi\0뺌©à«Äªr(*pŠB2…c±T¸É‘˜àÊl¸vcß Ê ·¸Þ&d1)š‰ù`"®J11áQFƒ+,äÂðhÊ!Ü*–ÃìðF5pbª'bçF5Œ„j|ÍO” .>c*pk8)à¨b¢ŽER¡„#(V;U™28ÀrŒ¦ëˆ;1ïÀœ ˈ2ÞÊ—›< OÈ~O)âª1àa,¨»“ûˆ°ªŠ…‘G‚3ýЍÜXêˆHéx|MO‘ð`¢ðxFOg)ኊ98PÂ…iv"£2df àÊl¸É~³(2ÞÊ—›!ß’œfQ€Šx’<  ¨°ÂàÌöP1T´Á@ŽÄu TÅί†PŒ|°”ZÉ=ž)àª\Š ¥CFRìU*Ì™`?SuÄ2cÀ‹e[ÙRñ3!Ü%6p? "ˆE|XxØ Qa…cQŒ$Wá ºâ(‹Q5|Ä„êh|” -”9'³E<1 Š®D1W¿2„;U™2‡ ždiõf=ø vâ ·¿d8KÀ~‘P»/CC*‰Qõ‹ .| ±P¦»®ûd(kq¸kðš£Þ-¬S5ýF4}ðͼ»¨XÊ¢ž ¡QD(*p›1 Ñ“"©VdÈãÊ2›.2cßÇn Ë{çÈw OÈf†ž /Š)8 T (§˜°ª,:0•\wh%I)¥´>µô5Õéþ†ÇÀÝ!þ…í&ñ®ãÞ3SmÐÅÎ’V Oký$6h·Mu4u¾°÷ YþoD'=…¶–¢ýUþv CKÂ6þ  Ux•B¢‹‘ U$b¡ÅR¬vdp¨9FSPÉ~%Ã2âK{æÏø«8ÿá"¾,#‡íq2£'àT*¡Qø0UÈ¡I#FP‡b ±Ù”8T£)ºàÈvï ˈ3ú*[ÜLwÀ~#áã¤T"¾f< E ¨ì ”}âÎJ¢ÑŒ,ÇjK\p5âlÒ­ùÒ—õõš^\ÿ¯üÙ«=[cjZè?o®—òìÒP÷¦Ù¢Ñùüš-øÊÔ»‰’ÓE#HÃ?¢®EcH# 2„;UŽÌ¡˜(}Ë® ìÿßÁŽÜIoeKû‰™à8ªlà~r+âÃÆÄPÊÁIX³’¨¿¡˜ŠÑT>È$j5Á©Q³ŽÞ²b«V›I—‡²³ÀÁsèAu'¬–­á9™¿ßÿ?ôKaCjÚpÛ·äÑa4ðWq–Š”¡W‹W"‚§$aV„XApìÊ*ŽQ—3uÄнø`Ï”–öT¼™f‘ðŽ‘(¿!eˆ¡•–rax£*‹ ÓadWº:Âô1þ uãý7ÙÛwû¤5¡ &Û,¾+ðj˜ô[jj(¥¥¶¿9õ,jnÇ”k#{p4®º·ú+<•¿{ÿM&#(™y‡‚¡x!øŠ¹,’£B´!Ø‚áØ­J åHʸƒ±|´c¿[ÙRêW|/g󗌬Â+5RÊNñ¦ÃAß¼+ÕÈ»!Úl`Zb"Cý£hãh‰µ¼-…#šÚKCÂÑ¥ž—©V”&°mhV¦„ëY1š›Ý‰§”^²‚/ýc+¬H×\µM`NtI·âq‰'ÆOöV°Ælâ;-0¼0/ 3ð"®D2À­v «ŠÐáP~ ¹†]q нøhìvàH[ÙRÒ;áäŸ1ø£ó«C´Õù!jè{ui?,L‘ü(ÝlÚ¦¿#¸¦ºtü³T~üžЗuÀÿˆÙ§­îõü‚tÇù\ écNÏV¿ôL•;-WmÄ͈ÑѲâØ5妜~Ej¿ m ÷´·Sü O·ˆ_Vh|I°ôþ—Ö3ÕÔ¾ ·æBN‰Zk&²jþÆÆ³ŒfÎ6»¡·šíà«À…P¨£’ƒ9#B´" ±Ø­ À¨9C·0Ë®2*ö$¢ØwâöP´Žø"›x–"ó¬œE ¤³‘zBÈ#Nâÿ”'£œi-tÿ¿¦Ñ:´ýB7X½ºk²Zô.å&©êÁ»·¦¼;±éÕ Ñ#jä¡–Åãål¼­ªÀ bÿV¨ÈŒ¿ö´ÍhÃ6hz6e®ŸF§Ö“zÔBѪbR8œ˜ßËþüŽ'1¨áh„KGÝàä©'è;®ÆÁ®ÑÐk±©fVd°ÂðT/GàTUÉHQÉQ„#(E \;2‡ ƒ”eÌ2댊½øhÇ~$·²…¡fCñŸ1ùb+ŠñŠ¡C)-äÓg£A¥J:;£g+­%ü}K…î_÷ú'ËÅ4{àT°¶ïI™À ·bx†jíš­D€7О¢×±§› Ñ®¥­‰uüÅ%±¨“uÿûaª[O_ýè~šš4ÕþšÍ[{ÁþÀN–“v?éú`üm´ZššÛ7Xפּ߃E%™ó»ÿ ¦ÂÓ#g¿ÇüCÒ„ã¢Ù†Ëý›nšÁ·Ž7é6q²‹$„*ñ`ü Š98¤0„e°‚¬veJ üüÃ.¸v*÷-Z1ßBÐ3Üô†ùŒ¬>M5'á¶àÆê"ßàCp´Ôc„¾ì¬ÉaN^,B¢®D2ŽIB2„ZÆL¡˜Gà}“uÀÎE^á¡ ‹F;ð"彔ШÏÆSóiâ"£ÿâXŠIÜ#ïrQL¨[GjXð6Ÿ¸ë¬Ý4Or·Zž¶6¡m'›íÿønØŸòkÒŽG@Û]¿5Ëœfì¬Ê,5Ú*ñbr!ŠŸ…Bó(f G(væn¸aW¿ÑØïĶöSÀ>ަîs§‰_$F&!•—˜E|˜,äª,`Ķ+ŽÑA˜pS†»3c=d|Õ]ÝJäk‹v—ÃYAΠñZ§2¡ÙqBðÁøs%"†+BŠ…Ã³(f Fi,¹†]p; *÷ %xÇ~!ü—öSÀsÀpÔüüðŠËH¤>“ˆ¡•ã#ïrUô3ئ;Pe×÷ tÆÜÒá4ÎBÖž%u‘Âs+–”*bðÁør(Q„#(EŠ ‡fPÌŽUŽÜÍ×,Sß ¼hkÉp´¹à8êoàwæ+*?ÚiÄPÊÎá‡÷‹9*‹Æ¹‚¨ïA˜ñ7¸¸ÿª]¬·Hh¸KÙPˇR¼…EŠ~…i´ ‡fPâ‘ʹ†UÀË ½ÃCA"ѨQ¿²…ýËž#ަþ倭•ÿä,%ÑIÞ#ïBˆ´`X2©ÔuÄx@íý^S_!pœÊ†ÇÜ:ðÇ‹àTQÈ¡G B¡ n ºC0R8ÐC¿0ÑuÀË÷â^1߈%ÊE|gˆÅ57ð8ÓÄü•)ä}§ fÄ;‚¤}⨷¡˜ ñDv ÌaÂL¹Öš#Xùx3‘@ËÌx+x•Q@‹p¡„!ZhC*0SIÛ˜e×vÑObx7~%½Ê¾3ÄqÔßÇ–‘"¾,M<áÆï ‘÷0XUõ+b¯f1á±s¤kF¦±ë1U9•ˇRŒx°~E<ˆe‘„!Z@c(f G(wæn¸C,SÜ4…ø‡ò_ÙO øŽ:›Gç"£# e'pÂ>æ ¢þ†a*¯ eÔx@ì\èM3©òð7£XÈmƒ²ÓÿÚ ôÆ´£8Ó~1­Þ*iªöÍÓbÃãÁÞ0y%|ŠÜé}s&úéÜũֵœQ»Üv.ý··”WU3k¼!ã[œbþfñЉµ ±¯¾×{þÇÇžiܚȟ¦h}ÉR?Ê O5ÈŸ÷÷#ñjDÝØ½ö››ZÏëþâ£M, Òb·~¢ÖUgßÚÿ½ûþgÑÊ[šýôÚ §67å}½ÙÑ›œáþ:O'úyÆ7æïûG3dºÖ]'ÞþƒftíxTëøë×cúìiiŸ‚Nky¬ÚTÝó'ßǃ‡Œ¹Ï<¾×#iÛžÝÄ}ÞÍöïùÞyh;ŸãÿîTõ‘Õ~2ÈWæþçÞº÷çýð@™8ƒóÖ«ûÓ¯åâ¥3Z'¨ÿ«×]ò;aéªÁÉu^ö<_Ÿޝ÷4 ¤„·Ó@µs†l¾ÓÑ{Ùmü~tʽõ·Õ·:`;9¢eí“£ÑîsW¯Ú/þçɵDê•ñW¼å­ò†›rçNXœŒ2ÓWйïíˆÿ&ìþq̼³Õx»3­îí÷Êíß÷Ï´†§¯¬çmž}ÊñÎ,ùÛPjé;o+1nÂ2¥ä3ßúŒµ`rO¼þO]}ÆV‚Ü$†ªÍèú…²‰M?ó‡Bá¤ø“Û´''jä“ûÙ/ñþáÛFj®ËÓ'¢_õ£×äwÅÍà½\òªú{,·ÆolãiôWl¤Þu[ }œÂßö4ý,߬OŽÃé9%ÓÞþgåýV¿C_l»n¼ú.Gcñ͘™Ï§K<ölâ]áÑLùw·|U:<3Þí´wן0Ü>ø‹ð]¥ã?ìg½Œzù‡ùT{L5$Uwéúý=þ}b¾þý6ûÚuV(+Ï*ˆjû«Hf~}òýx˜·ç4Ô$ÿ½#µvý«1³åKôäíV;^±{Ûß«3 ,«üd¹µ¯}V»”i6°Ÿb³CÒ.ËÏ¥÷Í·ëÏBXW3¦=t„Éþ¸Æ×JüÖo㥙‡Àùü¦üi¢nSw´™wñÍèõ8ö4>ÿ½û‡ªßF>ká•÷¾þ¿¡LZ¯æïŽ¥ëï _¸Ùëžmì°W£lëÑø^½ßm{Ú>·þ‹Î*è$n³$ çM5vþzïê?`ΪéSS1¼Qªéþk¯âÞû2rFaµ¡[Ë{Á¹ýÙ¿g8ë |—ŸãõÏ.Sì¤|Z»éï_ç¿ÿÝ ”O½Yñ9§7óþ®Ï¸!ó4ÎÍzsfhjß—ÿ­?gí”?³µì5o¶mù:UÛ<àûQ›Ôf²9οöJçWÿ|lqèxæw{bLŸ¯Ï¯ãï=÷§‹aÖ•üÏ™ýÏLu;ì§0úç9Eû8ãœÂ iAo½üßp¡ÏB“¯þØÏŽð¦mƒh´Ó ›2†ž»õiêšËkõO~Þì~…_ÅÏÅ!z&GFèìê¤ë5,‹ÀO¿y˜Ÿ*v9Åqϵ¤Ò :s»´&6µñ¬Š¡¯—cÀåݽ:eNßÌ«d¯¡Þ똬m“úÝ”ËÔ§å³æ›ÛYœïN­€nÜGxM×ÿ1´ì¯ðç}Á¦½gƦ÷ú®‚è0Ü?VïïŪÍÐ}¼äË8Òÿ¿¦¹v/[oÆ)_ÓÊ•‘MùUcᘻßöwýÞâ©»œéñÓYâúOóO ô×ùwN¤Fãûïš(Z£Ò•Áry{ßZú^*?ðJxÊk\õ¨‹› ‡lËŸÌ”ƒí•G6Ì/œ¡Ï’™Q=0+¹³¢e½Î–‡§9üÜúÖÇç8Ð0ê$¿€ÄOóÑgÏHDî¬õ÷†²žo•¤’¿<w96Íc^cã|¿úÃûz}zʯ¸¿Û¼æÖÁá<ígî{ê{›ºÛCŒßËkNoŸ¿¦Ïé„›u’Ȱ°úŒ›í2.½û¾Úé3ó7ÊoÂIÆ[ó矅˜z'kºín\Îþ®,¿×"÷+}0‡<±P°þîÜê-ÿ!”k§O²‹{åídG_Þ´Ê`Ô-~D–­qÜ¡Ý{M÷¤ÈÑ×ÿ=ñÒ‰x|°å/ÏÒÎ9ÓÑWlR®~÷¹mÉÛíÿìõ/ì`k„'ÕIwWÖõvc+ש=Y,‡h\ÓF›Ï7w ëÿLóû5Ì4ô <Ÿ;ùÞÿ½úìùoW¥ñßÄ”C»Únàa×dâM1;Ofe¸ªß!¶§çùbµá³ª/H9ÛßÞ9j¦ÅM’§ô¶">kyϸíÏûc°ã ={;¿Ï¸ºf}žîÏ*²i5uµSÂûöiùêMO˜ßc×õìút®­±•ëåõÂÏo¿è7æ¥ü>nø>îµõç¬þ*ÝvõùuúÒ@²â!_ŠÅî¥o.éÙžÛÜ÷¹AÏ5óá?Å$­]æóé™öéEyËo õ”jË&ñ\ûí¶2gºr‡Z«—ñ»†îþuXÑ91©'¢A®´ßy] uÒSÈšù„ááêñ—´ò¡à§ù­º£»]YY)ÌÎtßµóGyÃ^"R>K³l/Zà¿OË2ËWûÏÈ“n×WÈzÓ/ééºòsR†âÏ ßç]<ŒùÖð¥C£G%±ÎišmüÊMúyßãkÝâǪp¾g>d£¨vN/3Ì¿ä+ì%³Ù6²cu«Ãûo–СݞTÛÓ±Á÷}sÙ`žcnž§¬6¾å!ýµ×xé¹Ã´ÔÃ{Ï÷Á9©Ñ7ÙÑ¿KH½¥{|«V~U¿;¦æˆ²áEv÷ >1¤Õ{lŸ°îŽêÞµVB½zÊ=ÑgˆoYú_‘ó¸Øð´{goƒvÍÎsÃ¥Õ©knícoßž;@®²ðnVûñÍ´a|ÿ¾^寸š¬0øæ3¿d8|Ó®Vh?i ¼´]¼ç†÷ݳææKµ›~šÆçjäÓÙÉÊ]”!0F;âì_dûÇ'ë¼aì8=ßþ¤^·‘÷¯öûxýûº›ø³nSiŸ½×ÅØõ†Ÿ¾Ýý«›µF¯']æuûß3îÚŒ¿Óà.]×X׋~ІÎå«%>¼ÿÄ1A! QÿÚ?:66K&z7ÐôLô£ü üÇûs¾ (ƒ|=ø'‹ÕDõ ç£øtpOçá2ÏEü=ÈÐÆC%ôv,²B‚/(BáDpXºAÝTBÄ!\ps¦,C„ŒƒÝP÷áÁŒ|ÎŒd2Yc± ±þb)ˆà‘L¡È8)‹¸îª!bÑŒb£‚ŧ:OáC‚ùœCÉgÎ(v,²±ÄpH²‰ à¦.㢱b‚Æ üYçÝ(t)”HS/(G‹+0pX«ÇEˆB=úpC˜b:F‡HÆò q†…sÂ0ð¡Ð Ê$)–"Ä.„2³бŽê«ð„wNc˜béé@wgFBÄ ðp…ØÍ D¾eÅû”!p‘eAÁLUã¢Å Xà©bèé@t†;°¡ˆqgqõO¬ïD2òÏ© à¦.ŒtX¨µAMcˆT‚.ŽNèèÈXPð…Šã# bj_H |yyÁÊ$ƒ‚˜»Ž‹Æ-PSY¤1tt‚IÇqE„ q³Ï¸Ð ™w>|Ê s//8#8Q"‡1wÞ‹TÀâ ‹£¤$?¬Æþ²ŸÂÂw=]Ï2ˆ eeâáÊ%ŠaLþ㺮!ŠZq ‘†.Ž‘”I ÷!aBá+<ú<,»”†…H e¼\#h‚ qÝW(#ºàT‚F*ÇHÊC¤†ÇrŒ YÑþK¸X©χ…~ „g˜‘C‚ƒ;ªâÅ+¨B¤1tde!ÒXîBÌ8‰YçÑâjî™E!L³Â±pO›DŠ81\wUü(!jª ‘ˆtŒ$:K(d0ß!O1 çÁ”Rüéà¾x@±Ò~8;ªþ²B¤eˆtŒ$:K+!ˆ$qñžj‚çZ©#™Yx¸9ž‹ðSÄAÝTZ„y¨B¨‚pº;¢EÊÈY‚HD£Ãº °èš‹G2¿ÂŽ(pSðîª!b;¨B¤lº:F%”2B%ùBøæ*Hà‘G›\Ï PিÇD,PPWP…H' £¤a!ÒC(d/À¡¿XwÅKGWà¸8,k ~:1ÑâºÅ¨B¤1ttœ$:He1’ÄBýE1àî9-bB}ü$1Ò1~Õq à‰ø œ.ŽA!ÒC)Œ† –B$yøSN‰½)bÇ…b±ÑAC›ÜwU‡ˆî¡ œ.Ž‘„‡I ¦2 ’¿•<;…3¥-w½k釸wV,Bü8 œ!Ò$Q,¡þ,„/Å­b;¨PðóéKÿ&!ŒG ðî÷(#ºàTŒ±ttŒ$Q,¬† _ƒˆ_ˆóóÝBÅJ9ŒðK^º!C‚ü:pôïã‚È! ‘¢èÈÂC¤²² ’¿æ5žÔs::ŽcÅútB8}ü=X±LîA¤1tde!ÒC!ˆ q ñkÄtðbü:µâ<²„#‚™ÜwÜZŽD1V20é,yðÀŸ¾"WãÌW ¿¬CÄ1ê¿5Õ¯ÿ.sôî«øP_ƒ‚¤1tt‚ÄI ! A"õüs_cÅøXèŽbü:|¯áAÔ ‹£ ±!Òƒ_O¾,%ðð„x?Ç>kÅøXè¡ÏÓ<®,P_ƒ‚¤l‡H$OàGD§ðMè–ž/D!<Îþ^>kÅ­ˆçåUü(#¸Æt‚.ŒƒÇŸO´†¾’„ŸmýRN > ñkÞþ9¯šñkÆ:#‡?g™Ñ ¿HËÈ ‘ñŸßà½ý uïÁ…D,Žêü>ků]9¨c»ÜX…ø1Rº2 to‹ã<¾ ('ÁÁÅžj;«psà³ø1 tPSð«ÇuSÁb‚dž*´bèÈáðBxÉÄúyƒÐpP¯ˆ…Œ{ÝZÇÍx³ø1 tPS*ñÝTBÅ6&ø6ðjB1*&lKÁ¿§ˆhO˜þ?Pß kââ×ú_‡Íx³ø1c¢‚ŸqÝWð ±â¾ˆÙ4}øGôCˆ^>޵Á±=G…Kè|c__®êÝ|×qgðb×ÑACŸ—u~©æ~¿x6ÄÙê Çõ ùà߈ñ (g!ÁBÁÅŒcÝ_‡ÍxqžžŽŠ9¿ÜwUÅœ´à¨æº;ˆ :7Á/‡³Ç¿ ð|Z÷¿®þâ§¿–&(s¸îªtX …táÒµ:Hôe„A¯‹ñ;«:>g£¸¿c‡7ûŽê¢Åø8*AºF(A¤¬wÂ#Xǽ;«:>k¸±k¡ÍþãÕqb‚ש C „tœw8!Ìkâ?ÿÄ1A !Q0ÿÚ?ÚXü ã` îNþ OÑâ˜kôùú5Cà¦3žáðø*%ˆhø5©~á‰~c§qbÎ )kˆ‚ƒ¹98ÊØ££ÇçžõoGኔ"±c_§NŠçs‚KAÀÄAAÑ““Œ¡ŒE,¡â˜££ÏàÅ5]ª#‚£æ1R„YðS:?ÆV+Ž +X9FO’‡‘Š:<|¦tc×u ‹pàÊ++>ÅÜyô¥¬¢  èÉÎ|#)õŒæ!xñ”^[ÅŽ©ÑWæ–?HG8ˆ(;“âÊF:<|Å5ÁÍc9ˆX†!ˆe"Ï‚…;Šxõ¿ÑæÎ" #ÛÃÅ0éÑœ?ƒÆppxÆ,­P¡Ó£Ïæ)®ª,Tb¸ Ê-ŠŠc§GJÅ_—G…<%ŽänŒ¡ä:txø1k߃ª*8+„1 ¢Å Å1Ü2…EY÷1áOgr2q”\P¡Ó£ÇÁŠo®Uò!–[o>áÑQ ¼à±Ü¡Æ¸K;áʨ££ºÅ5ÚèÎb¥b£²Ëb)â˜éÑÒ„*õcðp–:2O£c+`c§Gsø1MxÄ? ‹(tCˆE[LB˜îúb¥?. i –w#ÁÒµL:txñMc:3˜„p¬!ðX¢Ø¡LSÃ(TUùc‡†IÜ}Å:wùŠkÄ:3˜¨©Â†!Šh¶(V,¬:'èŠb~ð¦á'r<¨üŽ)¼ÇŽãÊÅF!ðS¶SLB˜îý)å iwÐÊØ(tî¼S\ßÅpà¨Ä>(¡B‚Ç^(E2gÑ pà¼,îA÷LYôXtï”äc>ŒYôPc§GŸÌZÆ,¶"Þ("„(T§ãèÇ5øŒb˜ó¢(1Ñß<Þ]ÌTGF!Äpt²„SÅV(To×åþœÆ7áAâ˜ñ‹Pó£ð„8=tg1Q+|ÅÅ x¦V(T§ëšñc~jÇŒZ†3£ñÏlg1Q ŒCà¦-Å b˜î(E3î}.s^²1Šz¶§åÑœÏÓ*1!LQlP¦}>Žá¿Ò…Jzž^ðSŸæ=C†wÃæ-ç‡FsVÅŠ-Šh¦;‡JO}ÇíMSÔŽŸîw¼s…5Lg* _‡FsÂÖQb/ÇNŒTYÿÄ'!1AQqa‘±¡ÁðÑáñ ÿÚ?ÀÃn„KøÈ)B›B›O¹5:ˆÿU¢wìÆêÂcA_†¤[3ÏÊ DàI7)×vF4äüæ¬kC¿]‰ÛZËðC¥ZédëZcÑí R*nõÁöû W$;Þ`LÔûoö…ºS}r"5%ëz‹Z?à~jú¾B‡ÿ‘aœ8Àˆæ£ö„KÇ¥JJ§]EÙ)ìG¤½Å²èÔ&5ù#W"ÒbaöY¤!'·mº/ðÿ±¡Э\ÿۗаñCÃK=D³‘Ôhºh5z=½¸dúuÛô@"Kµ Cú$õµ¤îQmcÑí‚å-ÄD¯Ie£PTa"ê°"‰íCµ… ‰-&6Ô‘u±Ic:–¶’U ÉB´û´Ü_BžÑ ¬XS“ÜD–«àã™G!8DȂ߱+¿è¡jˆZ"BÃyˆû ŠàY«7&Z‘o–Cƒ¥¡A~øÑfâ°%:Úë‚ Uû$’{ÿ‡HÃh±y[ h'ç°ž³È{ oa'¨‘Æö$¶ÿò†òô¬N„šê­‡}ľE•ãþ‚Ö´$·âë°–Þ„ÆfzÛìI•§QeU;‰ -*zê$­gþ ™Äl*qìM~ÊEn3u©Ü}ÕZiÔK†‰þà¥ãBÌ.…Ž¬Ò»Ðù¬’k=6þ¯LL Ëü_BñI‹[_bËvFGµ«ì´í‘g³ÜQp5: ×A,ÿ,U?#if^ƒNZ4†«·y|œ‰lgKŸö7)<ÆâWR)î]hèE Må‘mønQw +i²;!-L«1ô-ZËr:ÿ)½u¬‰YÅ*"(YnŒHYdVšÑ¤ÇÀžb+H!'rGþè5nÄÂÊ'–-4ÎDJªþ ¤JB™=½Ÿ¡%^âøÄ¯W{»‹ðâÅ•Ü`GA~'sþ—!<CP¢4èÄåï$+…îîê-7N,Y?$Hñ_Ñð¾Ð¾gìøÏLP“À??C!ÁCôa«ƒ¥Söȸy2¥ö1hEÕð-¬*RxpAF˜ïÿKö¾ÎÝ/´-ìº ódFªX`G ï;ŽŸÄ{"¦'"¥µÞÉ 84„<«Ç"$ü 9ÿÚ â:À—¹dØ–!vº0x3B>ùü‹‘16Ǥ%+Q; ,6 J¬¤kð/LHy(k'$u!¨yì$Dã¡™NS:ã÷‘«]aÐÕÞù.ܱ!…ˆë uðDú3«Oqáwc ÙEfÇ]9p ¶„¬TŸøZF@,ïK“`Ä$ÚÿÓëÜJSóÁȱk—Ô% Uâ„ô-5ˆ¡)Ú’ˆbÞ¾èJœ 85‘e`ÕˆZ}W ]ø;%ð4{ô÷_B+©¸«DÂ12EæÏB Yê„$ö ì%DEÍ‹nÆñ§±mvÉÐ1è ÿ`o 2ayåp6]…–,]˜¯‚¼ñ?V¢ùŸ±Ä–Öš»è¦å]×OãK=n3Êß‘õ,¾2'§%e{*Ó°Ç·üˆç§êk3°óר”5"Ï{°éskXä‰ksï ÐÌ’ê-ØÁíä¼™uʼn(ù,‹oB¬Î,JUfˆü†¥ÜÇC/ü mü7&¢/¢1³³qKQsèœQêk2‹Jß“”:ŠJ³ë)wôV]Æ –àLðŠ›«c­ldÌàÞÜÓqlWxßÖ«ïƒU×ø,.µô_u#¶(J”+%©n£g˜ñè%®1Ü\ñšð?àßК_ø Í^ÌÜ¡vN>¿Ãt=ºþ±Ìuëû “>´¼ÒßAfO̘TéÀLµzb÷-¨OŠü®ŒYì}÷$ÊIØö¾Ç®œ‹Ä|_hIwÀÔïÎ¥.×É—9ÿF´R0úuü­dL‰q%ýŽ›ýdZìö"[0¤k‡úU3Ÿ(YÏé%͉×ÈÔ )ëÿ„bi"BS¶›˜1õz HVÙìþˆ—SÐvÖ1þ”’¯È^j.djªù$ïA#UL@°¾É‰¡‰Z]˜ø °%ˆßðD~À½Z5Í %BüOÆ.?ÒÝ¢„qò5o¬ó—x>(¡Õ%"˜è4ÁP;x2³ Î%Šhjê„î&Pó—#ò·CrËö~ÎŒiÐù¯ç<îËdÆ5<Eˆ¢Óöè×M= <5Œöš lLŠã¬XШץIv˦{”ág”%¾õÔD›„Ûq=ÿ~‘%MYdý Co1¸¸0órÍAF¯/]Füšì{BÃ0•ÕíìAi\ë±4ÖšسîQæ¿Ág«ûB¥›,Þæ WãF/¥Ð¢ëgzÿÒš•üµ<Á/þ¸Ž>‰Q¨”'wÉ})özæèѧVb5s‘+¸Õ¦K1BüѪ~HYÔÖtÌ‹$§þLÏAëÎPá½Ø££&’U# ™Ì2ø~±b™RÕh5 j£‚'tn„á} sઉÐjœiÈÕt“T²*nêÈ…z‰K6Z‘Žºïú¨êÌŠIµµ‹oô%·[ж'ƒìVÚD´Õ`])qÄ JqìkÎa ³)dˆÅ§7ÚÄ÷ú,ˆ$Õœ A>!ªö¥#*ÛqEëÔn›•íü°jEÚþi.)>†ó<ò<ɳØyFG²Êü¤M“m;ìp#­(uÝ“/­ ê‹K½­Šö6¨Ÿùe›Ó"@Q.e-÷BË<õ.ØN³sÀ»é¯yšÑÞ;Z#Uzô±›‘â}ä³ÅZ)ÙÛÿLΫ îcÛþJ¦‹J].Æ™zã«)e2'x#;<ÊØ”µlººfžµ9Ø$vŒ|ý(Y—„Xt¯Ê&¤¦ÃŠîYly1¸oAzÖö„–â²µDD~’”þ¡¥£"gEÔ¢ßfO‘.`»z"‰–B–²Gø4õÁ*o±[lËzA ¸Á‚Ã0ê<ÁU¡ ªˆ)Îß69$Ú„% ü&NRÁ创½';F¸Ðj“¶‚WA®ÒNGŽMw¡(OF*àÿHS_ôkÌ츼—k‡O‘e?5àj›QPòû"Ú”ûÂIt.\Ä}‘ÒºG¢>KµØª¬Ñ‡‡ô/cŸ¢pEì$·Hí{S°³½UÙ IVƒ~‘SSÄõŸ³¤ lNçQ¼h5/OWÃøÐÞWìmI¯¦< ùW±ïëô‰î7:TÊ'tIF<±gDYþnâ[Äš¬¿DgÀè4e}–iŒ|YNäLù½±ßbs:,5"Sœ`Lh%._b=í÷cÕúæ¤YŽìøGíÉ”bí1•$;ИžÄF’ú-‡àVþyÔJñð(ñ n¿š É‹U(im¨x\²5êþDž “‹xul·œ›Ð×oÔRTÄÞG d¾kNK•¤y‚Ë¿¦Åç¹Gú•´ªÄŠÒ×ÈÓKw¹áZò‰E·&˜’šÛô8Ÿ²ÿ…>E_ÅQ2ìéþ åR' Ï!Hðœ™u±7"Xé4iiÜI[ Z›Näv E…9ù#«lÂ$·HÅîåßÑô —ßícìEð,Ó¦¢Hžcq/Ð't"'°Ÿ,¯}£uü°)¤'a#ÙØJp„Í'”(tÈêþGèYHÕú†¡¥p4=¸ÐhÏ—¡£ì~ïØoßf5á{>a8‘¹à¶¬¿Ó¾ÞÜ7b|fŠì§£?ϱ³‰_glhóe]¨ »Ø³.!ÓQUè÷cvš¾25 Öš“wMhÎ7ºJ÷¹“ÉÙÃÅnÅ[‹Vo cAÊ”Ý=õ+‚Ó°oQ—F猑MêÉ8·z}‰ó§Ñ‚µ½PͬF !ënÁ¬MíéàpÛö†¹ÚÄæ‡ûØ÷ ëŒð%¢Íκ2x–D·œÍiJ}ŸB\VÒvDDj<4­˜Mzt<ÑÝÏü1éf;I‡yØÂÕúÅK~‡Ae?"³ŽNËÓï¨ÔÝ´cÿôÿLKièF¡k#¤ãý0çþ¬#M Hâx!T-< Dûÿ*+‹tóÉïÈ‘ùÐJ{Hð35¨ÿJ$E¬ï‹çŠ"_™Xf—óÒX•ßô/ñ'°/ç©@HR0„pQ”<-úõ…}†™3°mÄô‡ÐOyV7=£‚—²ßº±€ÿ–çáìL2gƒèhCNÌ;îÍCÆ:±ë‘Ðá·Ëa8#£•úÇ”V>Ìk4“W·Ú(Ýõ±eâ¦Gð»ö#Úåi_ûòf%gQ(öc¥ôM·É\Ø¢¢íÀJDÏüœ¼XÒ—éšÂߨ…#oß÷íÅÆEw,ð$À–ªEwS¶ ]ò¼? üÌd÷Ÿç_ºà™èV^‚Û“®ÂK8±´•^£×OcžDæëƒ~£þžæAtVÿà·+ïu+-E ÓýeÓCNý¡‘ìþ‡sÐÕy±:'¡”ÂQг§nÇk¼‚…uÔTù£á‹²fŠ2ÓF˜(ÕÑdàJC…BG °ð%t‹±%?—S³–ìÁ5Žnû]„”àÈÈDøØ”<íª$Û ™ë$Eè”àˆîcáìx*«¸“ÐËýá§ÿ¢yNµ…ð5]á ô¿ôNužp­C(Ԫǘò'9ÈÐW•èøŒò7û´¾ŸðÓ~ƒæ_Âþˆ¶!Z ®©ûe†§ôXm¶²’ÐÊ2Å·6Y?´$`ÑÑYzè‹Ù³¢íý’Qp4K< £=‹EFP–§l‰bqò,Bõûcž…ZÓBKð`I‡¦y3Oå OÝ ªZ^Q ÎÜ’n’ŸüòÒÀº‡#µa~ý% ÝŽ ¡§ŠÝCÊc%–D§Â?$Ø»d£{œ*Ýõ3Ôyc¹ënt+©Ž;¡«ÞuZBÊ5ò5w<àƒXîk*ìX½:ª7›ûM*„ÉI­Vu’«p:[ô%æð;oAgFè—ÈO* N}‹}NXà›ÁŒuö%9Ä JŒ¡!›p6QA!§ä¢â`¾•²!$¥PºyίS{ËÉp¢ÓFÓ5q3ƒ¿Eø¡a‰àÇvFºìÈì&®‚Rð-âXÃ∽ŅW„'Á‹]ÿB׌ÿ> ½)É}>†¨µb E¦·÷ƒJŸâ&·W¡¼?d\¾ÃOØjËö?ã±—_cx˜Á¸åí‹#o±9]‡ƒFˆi={C×3©í lmïB¹UÑ|ˆåÔ|N¿àæXÓX~)5KR˜sé©Åi#ÓpŽ'kA®àx}-{*_ø&›~÷'J.g°œ)äkpë?¿n,3Ù½M+7à^‹l]Rù‘™ñz,¼˜Ÿ@×á T°?™èɲ£<›ö)k(t¾I¯Ó$ÛÇüqƒD|–éÀÔßý&]ZéäÇ»è[vUÍt¬q ë=Œ¹¤±´‘u¡"ɼ‘Uc×K·ÔIÉ*_fâSò%4IdHŸ2Í·ÐÔô{ šsþ˜^hùÙBÊO¯áÀÖÈÕ4¤%«É…·$Ø©jeÕut¿²ü„§&iìž6)åé / %¿x¿Ò$JO‚²% ÁjÄ0ðˆ.¼/±>3ô.óüYì±~?lÉr½‹ÿ~¥1…ènª†u ÖI½!ñìWÉ œ‹q¥ÙìxÙ–7‡ìb~6ãÏã„d8m4èTÏÛ&^ÃNMÀôvМ6áGD<õÀmJü ãZ ŠÚ|‘—þê]ö¸„sCRªÄþýcµˆ{Š^©/HÅë_,꟡ó£ø;¿ 0^¾»…mröõ.íÊê756» ʺ˜vQôsàIÐÜùm·*V‘ÔX†)¹À²Öc|–ˆŒ‹2¬>†§&mMØm‡øt3jašðH|o Õ«6F| }uJ¿dkÿ41È6W¨ÔÖ£x–ÜüŸù{¾D¹T¸XýÔxÙk<‘2ž>Gw®cèYÝÿÃEàºëlzí˜5Ýz1ÑÔMá˜û.˜ž š=Ý“h¤k좞e}‰wlm¦ñØHTMÌH”ãQ¯Ì""T²,«äiËšbùŠ¡;±/¡?gK£ëà5%›ý ¾/²'üDX³·– /BáÈŸ®H¾…(X^?Á($%_g~½‰NEŽÎ{NF5=è}Ö¤ÿÄâžw¡ãŒ7û&âúcÐÑʆò}#'gÀ~‹§Àýÿ¹Ôoj†ø ͘=*œõâû>?ÚÞe‰ Ã/½³Ð÷áàm'¢ÐdÍËÚÄZë§wˆÚ¯#[j¾—| v³^Ì™åÉ}þN„>…¿VF”uĉیø25´<Ëé߬Ðn½©—Ž¥#W!£xÅÌß+ì«v< uµ+\—­èSS“ë©)¿÷ø¾ïµS¸xž8&—¦†%iÔ¦Ž!”¶2R{–}Å—¢->‹q*k}-C¾š˜inrL¥T¿DDͽ̖g©F™‰ôJ ÿQ.ß8>9æÞ4!»¡$±À“n1ûÿ¦r¾Íµ0º»ÆÆ °Þ¿¿IF—F;‰)‰ÔÁtò+ͦâI,@±«nŒÖÄ£µ)àXj¯+Ñ€³p"‹0$¾Eðýš‰k“Äà_ ƒàŒþ²$רÓwg} )Çø%wý3+ðû§F„ø½!©^œÆãü£Nü‡˜`ëüo;Ðó¿g`oÙ7ï†<‰Ãzý™ÈDÛ9U©ô»‡ìNÙä¶Ic)ŽÞ¼ p†ÚU#WJ_‘üzî5½dxe~XYL:.C¥\ Þ# „ò”OQçsv6¢£ý’›¿BÔë4ödßý]ŠK[½ª„ìÕf”¼Ãß÷]’E’íûàF¶ÛSîiýF…›í¶’Qß@ÖâGÜÐÒC[y¬‰Dé#–¶lzèý”ë7Ъ^%r;X‡vo] Õ˜†©¨’¼z@ñ=ÌÙ‚5³Zð:E––¹ðb7ߨÝ\›#P…_#U™…„7S”¸IpVwêi¿ÔxíЯR¤T˜÷¡Ng”D·ëY<Ïа³ÌqhjA©XÌhWªÞ(ÓBË=L‹À³¯lZHK~R›¦%wý à'Àjî‚ÏXvãìXºYÐ(}”¬H½ð¹!!g±jbè„¢‚]Ų“Ùö5ä{~„¥xCM¡“Ûüs½“nìÐ¥ "·À¡ÈþPþ±µ.XÑùáŽ7™‹¤L7±wáúPñÆý±;ÿGüÚ±¾{‹ÿ"ìHÓ¬>οhkØyÁ£]†ŸFv5¢_ëâeömîFû²í©sv´¢:ú}¶”=g:|zé¯"V8ÛÉ.3þèW«ý°bû™}×ïÔ&¼)b¢ŠÃøÁš¹R;°…‘£¢2v«æ*L…Rþõ6é0ó.²9s·R;sßþ Ön5V§‘ÒtÞ²†ân>÷ÊÎב’YÃoè£|à«%Ÿø#iM1Ü×ÐKt”¾ÅÓ2ѧc6ôàóȲ±½ Ñ©M“½žYA±©q¨üréèˆêRNÔ-ëxتôhŠÝ §¯ µ•1!8ù–>ˆŠ2‘Öäüp^½3܃ ‰ _‘)ËÙU«&!Ó†5Ò¡oÀ“>#NâQ$Gmœq’/q.ýÕ “]û JgÅýŒ5Çü„CýX‘ØâǤaÎ(‚JV4ó¬ÁNW^¤ þw¡§ìjrý?žðž}þÏ5ôŒµ¿ÐЇv_±AŸ¬ÜnPÞ–ÞßÂi*¼`àJcÆ},­uÍ) /:QªØncAKq…‰"âßìmF°7-àüÍ„ÉVŸÉŸ¨ÐÔɳM‡….y5~ÐɹÞký*È¥.v"šzø­fÞû ÒfúŒX΃ÏbÊ6q¨›:^†¾§>õSuÇ]‡šÎF¿/£›Ô WÈåL‹l%·{Ëê59[l|¿Ù\i´aVâJvÞDë¶R"cMÍxk^æ‹èÁZ¿HKÖLÍuF˧ؗ1ÉIx‚[Â;^´:GE+ü*3±®ÜÀðg­E«SyÛý _Pœj|·ô5Q¶…5œó{Ÿ=ÿJDiLï-P±Ôz†¿ö•zû"%z"¶<Çð’–Ó¾UèX¶Á㸕¥ü‹=¢Wx•ޱ>cR¼Ÿé8 Q§¡S}nO;î'+a8}Çò= Esh?èxוö7ÄxÝ€ó;gæ†å/X]4ýÜÉè·È´¦Š1í|±¯7ØËhgV“ôñ_ƒ>Ÿô<¯î†fù膜·*²,ºî0þ$ŠÇkØÕyûáô…á!XN8’!šJÄÄäLhç$> ÃÐů+í 8Çý|f77£Ü±8††õš&K”B¶¶b!äÔ.~ÆæðiÓ‘¿6…4¢5êdÖ…×+D¦s¦~ \ñ=î<7ºÌþäK·Pß±“GI,­Ž¿,ðhÊÖr>9tÙàjóôcÚ]GL|±“Ðt±!\GØÞR·4&¤sdb˜QÝËaoÿƒ·…FÆ…š]¬žü·]Š·ßß%¾ˆKIïFº½Eo•U–7Nu1é ÷Àó°”lõÎGQ«3ð$#ô]zÿ¢÷Ômûþ—N-ž$•öÿÂq_¬Umcb= Eïz Ë?BG/ôo‰ß¨íT¤*ØQÅk®êÅœ K*¶äEÿ³H| zÝ¡{¡‰âÂåuÿDà•‹Ö¬ KÕ‰œ¶)nÒЉ6†?ž±1èÄ®ï¡% x%~cTäY˧¤/ /'¸=K’‹ò!9ƒÌ†ž7±¼ÏØóúa˜ æ;‹ú5­?DCøþØš¬ú5dÂÔMÏ Ã#k~!›Ð¯ðõ,ØðBlJâ ä]+¨FD­x£äà„.±dlYÜ·§¹ô,´Æ‚x„ä/í» _ÅŽÛ¡&¬IÐTº!gµ}‘{±!8_bü£*B°½}‰ð{"“kÓШ‘ÔÀ¿ð)ƒpóÿE9Xhä â NXúÚ=1èŸ7ØÉ~Ø&åÃðÈþ?¶ óú-Š …&?ÅC@5»´Y=¹> ÞOôǤ|¥ìÛdJ˜2Êš†ñ¿l¡àžßñ;=!ãè›FÚ»4öÇð=,ymãÀÞÐ7Sìn9bmS¥¸Ñ¨§ì×*ÿ†èÿ–ïGă×â:…ì5½c¸íCxž¸-qvý•N¥©ÀøùŽ^‰µûÀ­Ç!+·ü NGžÅmU·r|Ë+3—KÞ…Më —Ôxs&^¿aè÷ÿLª'¢ù[] I걨Œ#.ó·þsÿ†oGfcÚÛüÈÖ¯&[ßöI¥ŽZ‚jÖÄÚrÇ®“ò*ÙPë`Jw0øø’0I¾zŒ/DÃz}hó|FEiâRzÏÖ‚%·/x,œ+®›âEy_{=…·\H–Ž,K:³GA)Æ¢¹âý‰­Œ?v*ÚÓ8(=]ÈÕÜK±x/ü –ns"¬\ÿДÿÁ{a ð7 ~„…ü_èý‰Br,q/HJx‰ÔNzH¤y…Ške DÙ6솎±üØÓÄôÌDüŸcÇ;Ò‹<ì<îFVbÆœ2›Ó,–ƒÌ~*>íƒØ?| åÓ s 6Ç™í—õe\Ý&EBSÓBÏrTeG±Ä“¿Ú“cÃ…=MRšÌhÍiC[}uœh'šPjôê7®ŒË¨Wô4Ƶ4y~Îóœ¼ÆìV×Ú<ïc¨U‘kõ”½Dh$õ[CZ+‘aµÔª+ «i{§ÜV˜S‚i7¶¦-àËÃÄ-çA6ÿô ”‹°DÅ šð%Eø¾Ä,/'F?Á+º„¥tÀ…ø}‰W”EØô…á/BsÀœ@¶dyúƒ‰DNcaü¢ü/cG3±zeS)Ì&ôŒ„帤؂ÙÜg'¨hý°p- ^gÂûšØktï¸ü,;‘µ53²¢a]~ȳo¡×åì–úÆÃË· ¢õ=/¹“x]þx#ä„ÄBÌÂs*tûKG} WŒ@ý[ga%4±°Ÿƒ’½Ë¹gƒÈ÷ O0M{E«9%=Ò+sË¡s¶hv³=Èž\ÞÛÑ&Ó*ðQÒ„»Óß±“å¨,îq<ÐÕnÅm$k;\²Íþäiû~ð='y;|?·1ÉfÌ*çS”ÇZ¤NŠžW-½rD¦ÖåÀ³˜\¯Ð°Õ¯ÐªÛÏÁD«„çÉD÷ˆGG©êQý>Ì;M±#~X”¶þxX½|„®ó/ O÷)ûj$%=¹U.âKN¹¤)%P˜°¼>ȯñ‰ñ}‰=Á>O¡)"ð‰no³Å/Bx5ü…ØÇ8Oq1¡¡üïGÅs?cu?á’goÓddÅgÈþ±C©µáöMpY£>ÁÄý•%WXA§FžÆ–ìhkÐØðÉwQ¸÷®šFgìxßž9cUöd³Èó¹¡Â)âûná+®ÿZ—‘Ú–žºŽaío°µMÂ]†ˆ¡­ [¢êñìÇÌ3·Ñ‰E‹9W’é¼ NO$}0Q óM>™fÆÛ Mpìxú‘áëË-?àÊ\%Ç»P-âºàv¹±¥¥£ýôDEÖ>⨻|™9Ý‹ÚNÃGTÏÓFuû%|;ãAhÌ—Mm#PôÛ‘[ZÞD‹ñcR™xŒÒ’oQ‹ù’„°*L§Î¦ ?à^‹MÎÂV.صãý¦µøÄŠu˜°';N¼Šºé¹ÃЃCP“ÕoezlüI~„ôbK®…È—éÀ•n$áJ•n$õÆÂ¥ùHœô%ÿ¥½²Wx”E‹· »ú VœÏÙÒ1é3¢^Ž@ð$L°ÏÔ¶7…éŽc“ìƒö›Cý±XøìòÆåc_ø¦Ãu— ú—äâ{¶^í‡bšxçq¸Ÿbð‡óë»&3ðIÏsHz`éìöá¢õùàxKAÛu#§GuV4·t<]¾ ãÎã,³b$±;}Ž«–ƒÚ-±MW“/ xÜ1Obë#¾±a¥Cwªš59ó'¡oÝÿncKjôãÿ ´¬h5¾Ÿ\cKÑ™a b­Ü{¬ô#W ©‡ Ýµƒ)«‡Ø”¯È“qê§Á4]%Íýõ¥Û¸ÐÓ_ü§žFÔc¨´ÆŒ-Æ—/lu.ÉóDëÚî‡I7”D­Á×;z4aÄk¸´¾Øñ fœj$ó»ï“7‡×C=<‰KW ³)[V G §ìX\Ýø?ÃÃðÏŠfÐYÝ–yb£·ÈZ‘S0F˜á Ïcà»™$NØ¥ì_Âø„ø~ÈžeìHÒ¥Kƒ@Ñ ŠBp<è9NIì,¯¡¼oÐþ7±¼ØóÆô<˜|‰=®0+5­GûGð=²p5¡§´@)0þçHu‘D=odYvEÎ6c Aìé1‡Ðƒ£âGOJ[¤ÛÂ%¸v>Ò[jÏ#K~dh]öö+æ:ð7—*kÀײue£M9Á.µ5êäÔÓ—¡©gÐö¶‘Z}9‹•ög½Š.‚qKÓ'm\h<6²57¹2÷3œìFS·Ùæ)¤¢i<Œ“K0¬m-k§²JœfUIeYN“ð<7ÙɸäÉ£VM¯ý1S(z`£…‡èðËôk°¡8—Z"ñ—ô%mö%/èz‘¡¸Ö5ýþZ*^$´ÏE×0&Ó— ®¸È²»ÊÈ­iÉ#ZP´¤ë펴¡WF£wŽPŸNj$ˆj±By„®‚Sû(÷J…‡êìJ9Q£/Ð[p,áô*ªØJèÄœÁ(ê* ÁEüyƒ lûæªÕ¿¡+ø³™`M=…¸Ïغ[zD’l½ ÂqÕ4H¿‹p´¯Ê8ÞÏ$Æ—ôz*j7^Ç×üH“'qƒÏöÄáô4iöhÖ¼~ öÿ1gµgäêdçÈÉ>“§bÜa¯7±MÜi#’cgO‘— {P<=úhF=bë“EvìYødx8ÑànŸýç2"W Ñu ÔBUÓrÚ¶ô<Æ?ÂÍ\Æ­ø>ŒU¨ÑŽ¨ÎŒ?Ã'«ì´”*MHôÇÿúÐks.jðLOµ–9{NF°» %׬˜KH±±kE7æËëL¤.ßVÄ7m¥te¾¶c½Éžð_I¶ô5/a+XúlÁßRë…VµßA£tÝ F* iŸ!'IÓ…´ ÓoȰ²¦{5SðK7¡Dl¼£q—q/“[ׂeiÜWŽáý‰sÀ±Ì¼kü-2Ôê¶X²Š[ã„Íðoqö"öàJµtY¬=:Šôß80?̉H°›Cì_›è_#$ÿ‚‚ê/Åö/Ãö%äûø½!â^„øÜsb&É‘8cO*Šq†KBØÞ7¦PO‘ ¯H’Í­3Ëûb[Ôiü–ÆépQ=ˆ€Þ'ìyÙKìxÅ0.x›kðEÂ3Ø£è‘ñCη,}äkø±ðÒóPóÖf}m%.¯¦ÓœO+A©×¿q;oü_c+aÀíž ¶[ ¯`zrJ7ªû*Ü HoÈ\miŠx2²a¿A»ˆžF…}Jè["Þã÷ÈïH×vC‹QÒu%}1ô;nûÿÃõ¿©Ïqñ˜¡(Z÷ε´þµ1Òß©Åý `ó±ËO©U§"U¸–:=שQû‚Ÿ#¸”ñ¥ðiŽÂb˜ÿ¡(_eU–Ø”eÈ”ÖZ‹ÅÇïb+¨³çù+gZœºBÂ5‘Mâ%»;oè$l[;ŽÐá•iBùÞÙäJO¨Ü±BĉùŒiZ>Ï‘Ëì,÷½•wßbH­Eñ/±'…{b^eìOƒÐ³†! J>»‰ãBr'üp,7ˆ<¯/Øþ¦b:y$åzDßB~aåà~ØžFñ¾ÆѰÑ´ãìæÿèoÚ[ w:3aåËÎw¥w+m:ûŠFƒO^F [í‚çX{•¤çü‹)ë æÜÌM²Gx÷ú©vç/÷&G–ôVcõ/‚Sס§«1ëÃèÅÈʪ[G ˜Ð·4”:‚oþßC¹I“¼Û¦5ôKlŽ'ŽXÛ·MdJž!,£)U¹\V^ š,þÈ´•(¡¥jçМÇQ%ª…ÆÄÇ%×XmÙ«ô™¼Øµþ ©«ï"ÐÄKÝ £R×D'¥.5¯Q#‡Ø—‘f®Îß»‘m™¼‰]+^KZàHÁ¿ôYé7DGQñX¯¶w>cþ5ꦲEyUØùŒôQ íÏý kB¶KBHI:a~H]D•üÔ^Ù}÷äJþ'‹ì[øö%Á?gmH_“Ö„ãø*¤'¸œ<˜hæ~Æž¡å! –0Ë1ƒø>ØÅ4xØÝ¡¨oŠtCcœ}Ü¿ÑßCØöÞƒÝç ×©´Èö4s‰cË^är¯ñKÛ'áè7†¯­¤| ÊÔ~ޱíõì:hJçè{Xž¤ª¢5jc¿È*º_ú:IÊûÓÑ­ó¾ÇÚº‰' Ñ·_±ºê<£ ù2oa¼y&ŸN´®÷â«¡’¦ôÑŒ-qû‘å¸3å½òMÄ:…ÌB®| BNmþÿE[ž¦Æ³èK(#YúFbk “Oú‹¬vöÀ†­EŒ*ßóRª+¤²u—³ÂØ®)œ=0.IvóÜ/ƒäjÀ”q#ÙÁ§^…µáx±$߸¸·bÊÉ.Lø¿bòn–ʼnôeøÄ·™.ˆJ^ GN#A<äYbhJ5©Œ ’F!b‚|‚Bƾńqí‘:‰(ZzGƒBwüˆ6ŽƒàOëGñȽ•9cø^ŸònS‘ÿ-—ð’ZCø~ØÖ7àÕ‚ƒI<{ƒø†ñ OÙ”)ÄY…5ð§‚ôŵêL?¶7ÿ£u}Ї‡»•ívíÒt?ôe©·Š&\b>7u‡ÆØË[ÿ·úžVp5Î8&¢µQеúcÒµCCUPõÀÜc¦5n4?ÖN¬l7›éT<}äù¡Ê”B̽Fê„è–»î7{§UÝ-þÈñ¦omÔ£Õu4Tí"·×aÍ>òõ]| [—^ IÀµÚ_pöû òkk†b7¸MrEKBSTþŅÆrM*î&i{äŠ[æv2¶HÁݽÌ8Â| kô/‰h'”n(I{z V ›‘,è5RÑ8*ŠÇ`±ÞJö”ý²%=„¯fÅq‚Õž ˜¯œ½äJx’=Ï¡+›ú—óÖâöÅ¡Õ{BÏcÒ×…èO"Ñ9þI鼉¿ø&<ñ•oG²,hãz1þ žïH™‘9O¸ð†ð¿lÈiý™¯b½¨i#'fþÇ–àiㆿ{ì[~…Xê7E¨×3‘£þh6ûµ“•Åð7acÂ;F˜YÊòÁ]Xò´´®´tB®cWÀÉɇ6p?²IzJŸ y±mc/BW‡Ñ‡õîbç>G¾n $ownÚ}F}=žL'º†7-{Ô˜gËå•;ô,ڕУ4Ó’,²áã÷ê½úlSˆ”úýQuÛ•¨’Úz1á,s©-üÖú SSPYÏÐå%JõcÑ×Gbx„/1©»¤XÿƒX¼ì_bÍ 8áçäØðò'4¬!'4áþÿD…zʱiRqáp…s´­éöB5¦½Æ•4ܶòByyÕ‰CèJÓŸ¡cøM-¾È?L±:Jà®ÈGÛ^‰…ö'"r<·¡¤[‹[F?ìx^_²¥~ÃFK^Æò‰¾âƒw_ÛÞ·ü4?ô›µ M£lšÂö=±¯½Ñm¡ÿ1>µ…¬ŽÓ3Àòÿxt,Mj9KÀòÝ!è”ïôê{wä FñÔeh)s Ÿ&†¾Må$Ùcã‘óC#8c#CSŠSzøÛ%çKކ§¶æ´7+n–}2>³;àÒå5§îÆSÂÖǸ΅¶øn{ µ‚…¢1X޾–þǸ’§iÊ¢%f¥Újobe®¾o\OB9_"VܦÔ>ÃÖºf;ìD¯\H“禆†è——VòD;½ á%t%xc8bˆoZ¶4M¤…߉y¡)¥§%‹{AeØi³4-\ÖD£+¦Åq^ZÀ’ ²‚º4빆í^ ûËdð|3/·Ó,-0øg _boOBl‡]Ĺuþ11êö„…ßô*  ñû9W³Ñô„K‘äLñ#LTž¼¨jòÆžŠúÃtå ùl¿…`ô{žÍË:>ÉÀðzQR3zÔÆ¦pAÆÙ4÷³{™45!:´´3gÎ{>Gú?“%ì’¦èÏ<ø¸™á`dž­`Rˆ·°Ùºç“'£+dþ ÇB‘ÈÅòðQsŸ¡”6•ö=×D[‘õé3[¨ªò×Q¯h¡¸—‹Ò‹`µ¯(K¤rjá ¥Ätý Ûo P³2û'Sð=k·{ªe[ÞnÌ^5ê3ŒGÁ-áËÛNã…㸔½çü0ÎÜNEkœR˜·SÁ:íD\f ±^´Ôi0ðjVÐÉYq$kŒÅˆV¶yÂ]´1ëé¡]ô„•õÉ|XXîYl%Xß®Ïø5®Qø[;‘-Fž!§öL ;èˆ=!×hyNóžG‡¦Jò¡ã_úLëÌàå}ا¸ó¬3⾆Oêäòî<Íß ð¥ÔPô½Ú‚m¯8qŸGCϲHׄ|ö8cÄn6²ô=x}¶º9ÛS§A¼&¿²ôø\ôŸÐ,u%-T±Ê2Ëy³˱¿üÜžúÿ»1;©’ï55}Œ›ý“#Ó|Òüθzì'}gRk;y9±cf`«—^ Ö_¡¹p$+ïDã3GÏQ«ý.ÆÔF7>x˜Ý‚#*oÐÉ«Z¥®â´µã¡m«lQÆN›lFàj< ó“_EµQ’Þ¬œY†¹Šñ´|‹ sŸ¢½ÃáLÃègàžßµ³‚:ˆhõA'¹Mmö%ßB×€”5×i{BÖˆŸH¦‹<D»>Äð‰ôm8zþrü,ÄNE•ˆ<ñ³æ¯cB÷v>˜ã¤äüm‹N¢vŽ£ÑìCx_cr!¡z%ü/Šcì{?s¿ŸóøbI“'˜Ü¾Ô¸È±´>œ?òÿžGø¤~PÔaì7mRx[Í eØù£_e/|Hj[H…tjåþìòû=uœX~’>LM;ˆEJ׬ã§rmvIéÿÁ!##–Ú/úfÄKø80ZIÐÌ ;M¿£t$gÇÙ3zdN£–UQˆ©´ÛØÝ?ˆénEø²=¼™casTý„•|‰œ5!">Äkш¹ãA[N©bSÀ”áíŒ_ga!wØ• dIì{g“^Ï‹ôxw¡w DÈñÆ= Á>DìðLo:Ìý<_LxÀß§í„7d‰ð)¡µôûcOîƒxßdÆK9âŠÉùšþÕ…öW„q ÓÆ£—6œ•4êYþb›WD7¦,ó &¤7N .ÏCóQîû0ü‰‘dn:“1Pö½}:¦dßü¿àÙw_fR3FŽ‹b«²ÿ¸-$nÐÖ\>³>‡…¹xbÍ™k ë:î5£FÇ(fÛ¤¯$Û¶ôØV—Z…ˆ[µŒ‹™Œ ×Õ†oØuOM³&šÀ¡Â~rY¤¸±4T_×ø:PÜ$aQ{4-SÆý ÆÏaN†ì­riZû‰%tÓ"Æ1Tcà®ô(¿"Ö¼ÄxFÖGÓÊ“&炊ËWØYm¶ iß œš‡Þ?¡'ª×µ˜þ´)¢$v²¼eß/ÛìÄ£¨©}Z¥àYsÊ£°)&©hÄŽ¨ GQ!?5~ãñ?#|b~[³É¯bÇgÒÏBp'"€Ò¾ŸüÛÄÇó"ïìyâú,?+ÐÝ™4¡ë°ÞÁ§öLuጦ†‡á –ñý¡’퓼ޤiNk#u-’qéæ´'°ó×|÷¶ì7ÍgªËÒj¾ØÐ…”ÅôØÍ± HùÿÁ¥½«<©bÒúu'Ýg“º·tlDâà_Iã±³ü‘õùxÄ¥/bÇQ;¶Ìw)ù¯ð%iÏÑ‚gГƄøý±'•{><〥þÿ# (šê7ÐÞ&/™ Üð_LؾGëlMì42Cx_¶43á½±äkô°y’Lc~¹OG±íþc[k̨e1c}‰­\hXè}é—Ù:PÜ7è‚›L{?nOý‡ÇLh7mテSR'/~¬ŸJ×È÷2Å·)WÐô¸g¡ô2…Üø;7þ–k\ ZvÐnãtð"ôEæÅ 3˜'ó2Ò~GM¶ŽLžÿ°F6Ä¡º»oæ†ñûýiÆŽçAejóEÒ¸¼5ÔÉ–<$DÂÈå&×Qhõ±ö*üv—Q©ÑËðSÿ ­¾†ˆvÂ1záóÐÿ9r(‰L´¬Z}‡®’ÕþäJ‘W%ð…ï½nL\D1ÒØhÛ,›Ÿ6ˆ­º”×nhN–FçMZ#h—ÙŸ7²Q×þ ôd³V‡W0tn?þ…r%l“¨'xBRàJа•0‚4–û‹GùlY»Õô,èæÄ#°ž5ö$þ™byþÉ?l"~¡=ÁZ¡£ŒyhB†ð1¼È¯æå¿|?á¸NG󾌌ƒÔÜ1¡ýá_ÌJ>iñÆ'ñ½šÆ·q¼Èƒ#x{ôÆ}Iu·£)«þ[ãNÖ<·òÛ"fµojv|ý#÷éû¨Ý™¡§Æß™/ücSEèÆ¦´ú?éò5™€ÓÂÜ™5DVE†Lº| èßÈð׫èÊpb%Ë»…%·a¢4å™…·zA8cN?Hð–wȳ:Ã.Û±í;ˆÏø)»™Ðvã,²{£¡Öü¢¥²-ZÜÕjð*ŠÄÇÁúð<-ÚƒŸžÃ–y|mÿ O2”»‹6M‘Jßn¼5±¡8þÜ0…OrZí#Çb·é†nûuåø4Áއ¥ç’0ÜŠ÷~ŠO£>‰éBÎÿúb£ä'V`/šÛs-¸/­JwŒ\ NbÊo Zï—Ø”‰âGá#ÂBÚÞ_bTVþhÐõú=ƒã™8 žÿ%–ºxBS°‘ækBÓf’ÙŽâ_Sñ¬¾…\ýº‰^éGÈŸ†çžÐ½%CÄ2'üO¸þ¿©Úž胗Q¥ycOã hNà nÆ·qèn¾‚ΣGû&è×Cß‚¼£.¯ýâ¾Äã 26†?ZÐæâ(7ÝnEKðÝ“=T¾Ãßµ÷ü¡¡._CÛÍì7 ÌéÏ7Œ¼PüWìhnÚeöÛuÜÐ2®3ü9úcuå}mŒ p‹o{³óÐi{¨+#[Ôí%ìoR™ØlfvW4ùÀßFßÑ¢ÔN!Ú’ZuÔÍÊ ÔrÓÿN‹Žºœ~Ȳ¢y#¾¬ÊS®£8®£I¾«ÌÛ\äzÙtØb>ÅÆ'2,§F²,O ÕÜW%(V+s„J!CCF‚ÿºs}°$tÛÀž)P„ªÓ—žF«£ÔÞ»ØOYo‚;°Æ;‰ f,ëÛØÿ:L—¶ÌçÑšô!wäŠS¬”OUŒÌ¯æ¢×¾ÿBJ,”½ž {ÀH×uÚ‚N|=ù‰Ç"ræ#øF–|íÿ2âÒØy÷NÙñÞÇÎ`xcCz«î4=…¸žÃßÐþW·üoÈ ûS7 r3üt¦é“*ë^Hw‹ÑŒ¢+¸ñÞÞ½ÝËÓà»YÀŸòì{¾Œ|/Øjh¦ÃCÛÝh$;'fŒyý X¯©³Èæ(” YÑŠc¸¼—ün/ムnþŠ¥ü$7¢ö'Ãì@z>ƒ ú™n¥'°œ4Qô>Pð½Çüvfí!ÀÝn”øÅŸ£à¡9éEyGß1ðŽ…±º}Æ×Ô}Q¶¢½4?”Æë¦ìk¬ŸèyeZg“7'íØ{zjJ­Ð›o1;ŽÛo½PÓ¹~ÆS›kÕÜ£×ý3S³=+ð`‡¯(£}n§ÌzþŠíº9èJUqŠJzjQçª| ¦Þ| ÛO8&nº½¤O1ŒE ~$„¼gäILâ]½Lû˜,i’!b±:˜¹-Vñ[~öT¼ÒÎæVŒ/¯|"aháþýÀÜ=´úa}ëÁâ'YŽuºÇqóÝï"§Zm/¬’¶œ-(Å{ ÑhZ¨¼öEyt0ñö<“elç_ØÜ/±æ¾dh|ßï’}YSánvÑM5é–{ßCüö=,}¼a}§þ˜KS4û1ºtI2­a5”$uCìE× ÷‘D×çñ‰áGîêÄò¯bH èO¹3üoø¯æü#G1W¿ñ‡”äxCÓï¥oGìaôtDÀ×'¤¯(Íþõ{Ÿ‰ìÌtŸqû?a„q0Oúbã•üyÙ _G£>®½nGì´–²O†æ6ê>r”ÑÍ÷Î+þ’ZvôÇøàÏHÅo&Pßô÷Ønød{Ë}GJ¨PhàÌ#¬î$ôöŠ[xè$”åó‘¥½WMEW1ßDTPÜ8qÔk6,ÌjØ—Ë*ZR­‘2Å~Ô˜´õxÚúW•yÿ¥›–òa©Sþ /+©Ó”³C(­á5+µ¯ËŒ²pþÉÓÛ ô©_bëêË+Åé[‰Õü‹N~ŠkÛôÿK- øng¶§+'O†mõ¨ûößËr+{2~ÆÆpþ„:²ÏK½‡ñ¼ž¢´\½±9È«n|–·zÖ.äÍp=8X´~Ìa£¼=w}„$³á,žŸ¶[~ÄðdzˆHŸþ  oõüMȃø\ßcW¿±üOLzì<¿þ›#&=>ãPßûÁ¼ ÛÀÿƒ|·¨ÚõÿNm ç^ƶ6›}p7j5õ7ÔŸ8ó-ëîDÛ×Ð=»å’»ÿ‚íÍÿ£oþ³Œ®ƒÃœ2³V{Xñ±nËíx4.ŸÑc½P÷ë wÀžÞG">ëBô™í¸½jÆu4+ZüþòÉo}Q¥÷ÜTÛˆ]^‚Þ;‰’H¦·ž» ò=õb«a§gÇ„K}“™ÿ…”jdN:·^ĬèߢfzÜ ßOdàQlèœíÐó'[j„Ëwö% PÜ+¨,”ø‚R’?RñÛ÷‚éë1iKìt¶äO­ÌÜ[WJp4¿4ùÈ‘Ü[z¿”®ÂKélò=nlbþÂ+}™ÁÍ!!ø){èîÅàKðof:¯üa]«?ò3l¤x0pþf¤êÍ0dwé`4~cxÇ«é ;'È¿ oÄ4¯ä±1¿¾o±è4«¤Å-r?‘ý1©¢¿ û2> öÆé ÇøçÁ?¼IíCy—²RõÃùrq 2Én?n£®ë&Σ¹AáÇù#ÿGcc©KXŸ‚TõÏ"ƒØö2dö0VÌx•Íhz(jò7¨Ô7àÔ{ùo︕ ·Öµ:_b7YZZ$oW[rSµkW°Þqÿ3á/¶f6é Ò•Õ¾»-ïeßèv’ê¾ñ"˜Ö1 6­îU¡ ÓìH]mç8ÜNg)бÓtäœbgцå÷2kþSáêTP¦uCª—’0ŒC°è×¾ø$Ì©@¶°‡©=[í&ÉÖ{‰¥5.¬²Y¥ÔhÇ2²*›ät¿’=F—b­Á—¦ŒjÌ´zÀœ×èÆÞŦ¤ÓXQ±Šb—ìNQ†v6ßFTr?ÆäwÞ|hp‘»jÆ—·´Ç»Î{ ëRN» ŒKhy2ïþ!~y2vî>}”õäiy¾¥~ãØx¨#+¼>ºm)kþ1ªMºÉj6Z ºFÁ;Xw ¢¼Û·Øhmc6eðb¸VB*ÆÂÞøÿ¢•OIC¸×Ƹ&L;Ê» íLU`J|eµcQ;é“òá¸Á]~Ä⤔&Aµ®³ñþ |5ÔN>–]|àn«—œ+ÑkÜx;ˆY*ªÛíh˜MI¶ôxÈœVþ?de‘×ú0êQOrŽº?e—xEÅëÁ:Îþ1¾%ö¿Ñ†']¾ðEðyê¶hEÑöVu1h´yæ%ÎþŒRlö5ü{9ÐËÇèø¡|¥/êpL·µ x¡¤{\æéÑ2ð},§‚Ìõ0v8ø>RöHÆáˆ9FS’dïäq9aútô5û{=¢Äo'A¹[òižÙœ;–`oWSø#©Šá™ #¬ bÇð?C®°4aíüC,<»¹†:“TñHRïd%nú¬þ¢qµ 7 êÍRn9©ý#îL¼öØài|÷4õÑa‰*©Õ·ÓèÂIÃX7Vý=ô…*ä¿qRÒÈ¢µäH­çà²ØS7ŸC4´OwEeV”Ö½KÚòÜçRgÂô'M+ëÔjk(&Õ2F ÏÑ¥«eÖ6ÿGkÿ:(Öù¾ƒwÐxÓI<äÛ: wØÔ¢o6¼—²-ížÖ[W8=gÆ2ð4o¦f°4£Wi —QñÄ÷‚‰œ×·Aë¼3ÜhNC×Ðô…ÀÞ5ì§á“ͯc|~ôI?ÃqÄ`´ÿᯂ|ˆiòö7wý/k°öåš¾GpÇ‘êbv'â^ÆõŸ8~Q¥xBù>Ïc&šdküÍaßÕû2;gÆz2~Qú}‹¯Â䙬“™ÇS&¹Ü]Ñú+Oƒ>æ+b‹ÊÈ’Úà}äö bXº 0*ÿƒt²WYÇÚÕÇGf¤$¼ Å)ISJ Feè6“Y‘¨ÏC7µ—}¶ï&¼Ža5rŸ agµ4IK:²ÊG„Þ_M Íø±+”{?t(u Þ¼õ;ô£›+Ž%‰dpšú%8ÊváÌáUi+9æçâ'ˆ”o8±·ÙeúD Ƹ+Éu•¦Kmß±8oU±dÅI|˜jY õbXÒÆ•(i·e%¯ÈLë±¹F~ý7f¡£s€ƒRÅC…@¢:;’¥èöÅIKÑömî/Êþ†i ØÞ%íŽÿ O2ˆ¸ýü°õü‘n 𘆾?ƒÓö¥ø^Ÿóšçìx渘Ô7‡ìNÔOÀ7„=Ÿ“˜yþOÈ\nXãØÚ™$¶;ÆF—õ{&´ñCwý¨ß?àÖMNd˜$ëµM޶<jÌ•¡£‡Ð‘ïCXn´ÄèSÏó'¡:ž/¡žM‘¡ô•þ,wº1 ©è‰sþµ‹‡½cÿL¸^ .™'yà»ûZ y¡kÔv–¥K”3‡Äñ.LwM÷Vœò*Oe³5ØJ#§øiíh;ª"µÓY4wkBZš% VMÌí·ê,»´Uk_ôXê2’~X˜EÓ-Û’)Tè:€Ü¨E5»×”6ÖJ9+£LKY‡}§W2=-†…סÛÈo ´}G†áðg}ŒÿŒjÐQ¹½ÐYèBU‰sv`Õ@NŒ<=±±ê·Ê} NO¯Èß¶?•{Ê[ÀZþ›p5/þ~s?Mƒã°óÈL¶=v1ž&&[}Œ{;Oš13ðDæßìn7)çØ‘9éàoÊ÷üx)Äô6§ÛØß!¹h ãÑŒv¸3wÉfB\LlhÄ¥­3Ж86÷CKn ~ÌàͼqܦMQGgºÝЯ¶k2lõò;¥ÏPêŸ]DÓÚ:’'vç°öù"žub\ri‰ýÿ¢ˆ/ÈÂTÏïô§Fv騸Fyf­cìY[î6ñ¢mê;kõ‘ÝQâÆKVç}hMG7 —)Ó[¾¥u)ö&´VèÉÊ{éR6ûcËF6žˆ·1Ii*¿x¾¾Äá)ŠØi]åý•Ù×c ô¦<¤ç^q¯Ã/Âfààît„ÿô¶†Rft G¦ÿN–@*¼Žw$Œ?c|ŸCL žk4qìë<èÏÑì= õ„'¾44Dçøœ? Ÿ þçzËDÄåLeø²z à_Ê1›ð>gòzPŸ‘{ɰþs=ÍvàÂÖyÆösöKø¾‹Y£ÐòŸÖ?uü*Ǩœv;±mûQ-ÒÈ|‰ °»3%È–Û‹ò.뢡ªÿHv U-èÅœ-Õñ1d´j+•M}¡$·_DÛB§T÷&&íîQ·ìX­p$Ï-‰{HH¬Û®ÂpâÖ| D;W¥bÚÍÓr¥ú_èÚN¡1en¼ +=DÅuˆÕø0Û^‡ýÁĦö(èjva®ÆM'-Ùƒ&»;!úîx,Kêk WÁ'!†Û©%®£,´û/¬.¿ÒÄ–½;óô.οG©™}žÒü¶'"˜gV¤¤ ¨Ö„™xô Ç#Sf׆Ö7Ëô,ø+ìo‡Û? ’jãÒ$ág9ÿ„’Mø—ôœ~ü‹Ù÷{Ï#ào6;Ÿr¿“ØÂÜHzA õŸ<Ï­ ~ÿó‰hÌÁK±îêýŽFȾ!—"|ȰËb/ùyÌ£6Öv¹¾W£G³è̱ ¼åŽæHÔjŸLêYp"íhy|L¡¯8ð{•`w¡Õ4;tD³5À¨³´‘CŸb[ÔM¨ºJ!Æv¡V„½ËZ)ë?…ž¤)µ6oW¶ÇÈ ÿ‚(èOfcÿIÏP·3ú¿f:'°âR§N¢¨ùdTœÙ™âã´:’æÜèaê®s©0±ß"¬]™¿ßÓÌîq9‚Ûý*fIùXŸF7“á>‡˜ßÌÀIìKß#¾½LÞäS÷ö ;²Å kCèQ¯Í !sœ2S=‡ãbðf„»&%"U[2a¨FQÜÊ JãàYVEU$R†ä›ë›'bsÜe aZ‘k™¡Y*lV•êû : Œý#W°ÔFxÈõÓ9; –¨líÑÏ‚7Ó—à„­¡4×IŽGæ åÛ›§¶w×®7¡åowCSXR:Y£àê{ÞÕ“Z4kUZÇï¡wcsË‘æ%CÃ}dsfƒÊœëôBýñOúïþ„ûAå>ꡨwÕFÃÃc|^Øœð‡žÇ¿æyZÔ¿¡„ú¹„6æžØÚš¯f秤x4'Ò&ú Øz_Ì ŸVkÉo³ót.Œ—#ù„bÆ¢Zî О%í˜Ý’YòÊ‹õ4sühS”œêM}šƒÞò>x& €ôdì7óþj†#¼oa­Üe.†ßkèÐ`ŸFd¿41Gµ}’N<âÿD¿¢ƒòMD'¥}¢Ž5ú£Ô‚y‰²5eiŸÙíÔˆzw(³ÈÐÞrÌÂR[Æ#aª}uuD-ëaIïC¶Ï8ÿK&ò4¥å4#½¶ÔƵÐX ÊyèPJóZ{š0kì6r/ú:Z*7ê+(øµLižµÓW¤+ÈÐ<«µGòÇù¾‡®ÿá?ÛwEö7Çìl?’IÚôuÚe}(zŸêwày\ýXê<þX0Ñg’’H{“‘» ’—س“,=¢yÄ‚ôš92dTŸ,«'²3ÑÙ«–M`n< à} o®Fù¡ü„“Äç¡Å–ÌÝÆRÆâ¸§èCNŠ€.G»ý>àmvߨ’ØŸèÇñ¡,ÖÎöÀ®bXÔEÆGn“¨³§%\ Ajk|à£zÙ•”Ê*!£ µL«3/Šf•odÕp{þˆ™ý"«•T#K»óJŠ!TI"ŸBDU_bJ±{ªìY©îŒW‡ã$q¥ mSÕØâ¹žÅxÓ¸Ô©ïbø‘±„›ù&Ÿk-—Üx[µ©mÆôF'Ç¡ÖT¨i•M=ºà¶ˆµ›ù­Qqaˆì'±Û457çrÍßÉë}‰Ë˜´öÇüp6ýïÀ°„ìnô`p#º½ñz5ý¿‹øËÀðœ’Ääÿ~†ñÊ0Ÿ<(2Eß’#~Ä¡áVvE|_é[²ƒÖ'i6ø9þ5´³ìLizÖTHÝ:>èyöæ~™bBø]Ä“‘!½„[p™H1U£2_š Hö£'aà}áýšÄ²…ä‹àxB]ôlI‘8‰–;}N²án:xSûèJ,tÓ§w2zd»‰ ÛƒFå2[®íÀî^{N`iÖ•ó/þq«ÔyåQ‹ßó(˜×¶^Ç•ƒÿÀþì­Thbõìö,ý1¢(©È³"ÕÄ CBÝC̘¤•ähèÿ‚Žñ:þW´|V9b†•ý=‹ì‡ñ§ðJþL uÐÃø˜œ/Ã5Êö5;û, hIæXôÿƒR 'â5ÿ øŸ$”£¾ÓG&£QÑäÎÉáÿ§½û"F¦Ež£/íOi*X,y3Ðn£OBE·Ð…­ ƒ­3ió_cËö0ÂQõÈçp—o£e£›3qö…rµ‘)KèUÇúDµìRÿèð¶Ü¢¾õà¬ó÷üÜfV£ZÉLÃÔ‰jT=…Q¾ù5AƒKwØVßGð-ò$jŠ!vF Tnx‹“¥ÏBÚ6ö%ri¦‘ªœÎ5ÖZT'›QyÓ1ñö?;Ã1”fÂwö…ŽH°R&uCµ®ÛcGü)%ÑÑœ­3c¼,s:‹|Ä2ûðÌÜ X[n+-¨e–+Èɬ¹Ù’Äö?èóÄÏ: NGëT|Ðô'ô) ‹ Ÿ‘{E,ÛÒÛïüNÜëø¬Nü1¦Uìj݇ñ’äçY1#Êfvh¶_bv'e»Qò¿™ú9"äÔ"wüì6+9g䑺>"û {Ø~ÿd ‚})- ëà|ê5»e‘©ß‡“G,ÓÀôüÐYNOzÈ·ì5RG…ýÿ.>:‰J›³ Ô•iWÚçN¢u:º5žÃ´öv+HKPÊ.ûß²rß ´µ—|ÿéK »H:߃ ‡.HÈ’¥y1ÒÿðY^ˆÜª[hÄ™R¥¨Ó‡/Û¸¥¶„Ò%Æ£Jo?è°¨xfTÿ…µlºq44­èÊ-ÑoÚ;¿ál3jm*ÈþQàbÉ®Š~ʨõ·Ûü¥é³¡¦;­E—Óþ0ªžû‰«p‰aè'B:œº~jivCÊïøÿѾÄúŽã›zDøð'jN<‰ÜÀ$˜—æ\`Û“òWöÃþË·&ŸàØX_(NÙéE§ßøØÑÈ–Í´÷G?ëK+¾ÄÐõÀúC÷6ußñÇ'Á¥¶ÓôièiàÅù¡‹‘þ韱>6=‡›Œï¡Æý:ocCæ·— “”õeôM[K¾âËga,icS?¤nRÚJT[ÔJŽî>ºòJY6êcM„£¬Æ®ÿ¡1Ýÿ,ž¢ÎÞH¸ñ-|‰ÅõQ´âz˜ãC©\\ EeªÇhÇv:X2¹¨BGYÇ¡ÒCõÒOØ®ô(Þ¯Û¡«¤‰OAa½^ÅMwˆª]ŒHáÐô î¯#aT2Ù¥ª’\uÑãÉ&’Bµ£ì”@®£Çù½¢ËK¿Hv–âp<öêãìŸ24 £²§¢g‘8Ä¿Âeæ?‰H²àj×?d!ßßÿ ç¯ÄGRìÀxðìeþ‹¢>÷ñ?Q_'Ù• ùÒdØÔó¿ÄS%Ø<³¡“‘+ ÍKb¥bKÖæBMk#N$ÓÃ0oÈß/ôÏ{PÒŒ‹ž™“Ó©lK.èdꟴQ©‡ð1-*r<â&:>IŒhaÝ^–û‰mŽÕÖú‹Ïȉ·r+,óØRÓ~ŒOYyìD6ó¨­þˆpéF¨JÛ©-|«_¶(T¿Üá¿(HFꕣȕt0]ß ‡4½ ÃÚS~WК7/èm%%Ÿ•Ñðo#À9·²ŒæÞw:v¢29mÁc*²ÆA™Ô3s{.[›"Ô9íZè7TT5M±è…®ìjÓÀûÕ¢Ôÿ3¦þ„á&'¾ÆøóÉÕe“§¤&—Wüh~?„wè,×ó/q¼g(Jiÿ§Ïþ2\ß_É nœ1d§û@~¨§?ñ?SG"š åFBIô «÷_² WA–ö÷š²Þkùù…Bî]辂×HbÓ‡Ñt‰õÚû*Ú®£µþ >ËÒ*ß% $ªÈ©·Vëª^ÅM„ʳÔ`Š×“]Å•¦Þ; ¥ÃßÙƒÜWYƆŠWúFbº‹1½ÃÜÞ»P±žÂ×; I×bq©Gø]ºšÝTAÆ·L9l¾…—98‚p¿lEáVóÂwSÎåWZûþ ÙÐùV¼Ó§}غùì$òŠã"—{àšÅ6ÓYÙ'õÕ‰$…´)-7ìB»º•c_òDV⦛|!ž´!ÊÊî‘$ ZI‘iºpåL®åXMƒmÑG£§ÄÞxÏÀÉ4"kp£«'RÒ¦•' ¾¦”FÊ_*­Ð‚ÛR*McIuqðâ\æTe–“zCÇ]œ?IÑ!3èãÑœZ åÑ“NÅ#ÄdÊNŒ}m¯°›“t°$ú0'&z0è'ù"[¸ò·£íOŽõýc>~Yƒ14pý‹'Âÿ ô‰ç!¬eàÑÉ)f‡Ë»ŠyØ©¡ýoG¡ä?rõ¶B[àQ;3ÜƦ}Ú(ÑÇð`¹qÔ[íCÆœ mŒž§Zg¹ºŽOœú½Àò·bùШ憧YÌÜ]¸›*Úê#q´ 2‡ixJÌì$+‘ ©‹Ÿ¡©ocQb{N;_Ŧ²ÍBy[à7‡4AÄé©Ò¾¢F¤‘›yo³CT²ª§®­ÊÂq­'2åµ^k¡ÂС5²"†í3À =¿²|Èiwˆ8© s'ýYð5Ê0GâçøÉr,ͿђfT¸b â_bÎÍ#—z–¨wÚhäkf„;âK™y_³_ã.ÓÐÜ¿?gÖ,MêB[ìFé—Ц*œm¿³0U.è-9Z̃øÙŸSËb7%)Ö ìŶ“Ó·Èáåô£bvèK>™k¿Q+Ùº"ZD·90»÷P7‘55Z‹L¦îEÝ‹ÏaêtJô)ê.:ŽêþÓƒ%nú1ôÚ°–}ž…o˜òaÑÁo£è,ü:\î¶1ÎßcŽÊ‚cƒSš¥‘Ú銗طudf=Šî–Ó17 {â!*ž–CŠ’ÚXxCM®’›HXUâhMuPá4¦¸˜©hi¸Hcš§DWj4œÖa©[·)ùàΛ´”áÁ'ݾ§nnéoBäHLt{%¼¯¢ìF&‚HŽ“ KK\)дùsä„ kó¶ßT·é qß0Ó˜X‡µÛcƒdFåÓNKFóÏP4Þì¬ÙA1ŒºMpZ5餲“œx1±4Ôe#}·5kx>(ètö/){:¥/Hð Яø¾?‹Ô!tD· ¢[Êö5;û>;×ñ’äÏÏÑ6˧ü¿ÿ†žôH£Øô¢úwüÐÑÉ“4þô@‹½G=÷üxeªÑèɧþ‹ó5|ŒÿA}ÏcßòkÎ0 ‹Ðö/ä¿1'Ä¢ð¾ãôP¢•} MˆJªMÏètÜ?ðcBÍéèÏúÈcÕg"Ûîdߨøô$¬XÏþ‰:ÓúU]¶§è¸raåú·bÎò$FhÇ%IMë[ÙðQ®Ã¶³}Ä©Âhu,Þ^{ K/醧 B+­šGäÌ©gÞ­&Ü,à]mJœ·/=¤h ÃYª¦UÙø§Í”‘Æç3 ÉC” àE;>Ù:Ú¯cÏô†‹4ŽH"n¿¿á0Ä¥hc©fàzsö,(ëì_âd¹Íôj5=?—‚±Gq|KìIšI ôbe=h_0Ù4ÎUÿfÞ¨k_V'Áʧ¡¨ÚžÒT²ìu$ÍA=é?0ÒùwÝ?Eã"ã¿%ö*ž¸³Fð'„[ÿެ ‡cÑì°Üh$¶öΤMÿá‡Ðm¦³·"c>Ä„˜ø^E¸’¶ÀïY £G•]]ÏR–ïbIyC§ƒT,-9p`,­z”éÉ_·s]£~Å\Bröiù†L.#K>JlXY»lÄ0ØNfÚëߨœ-ÑÝÇÙ7jFÄÛ ª·Á _-¬š8‰]²ç({O1nß$usß&I:›e4ë×q›~ ñ~‡yrQµ¶ÒsQ «G¨Þ„Q¿ãä^‘©6©Ö‰}îB 5”’”¦wDrc•ÆÆ­¨§4Mæ’vE^ ž©­W‚$$9¤ûtiê:Wm©çe)why‹)=¸´&Å·)ödÒ‘v0©zçXB¥{›4úî²PÇl¥›í˜9CÏô&ðz: ëR ø!LL‹‘SðÇ•ÏØËäv?Ã%È—åú0]1a8bÈ«‰}˜bü—üÞ´/›øÐIå3³bðŒ‡ó¿d#àøCÌKò%A’$‰Ñˆ$wD—ØÅú„¾HW OálæÑn7GÁ.Äš‰3×°á/¡%øv¹^<‹9yñüoNDˆuضÚäXq)i©‰_N6¥]…”¸i¿¡áôit¸\AKÔF¿lÇìŠÔ¯ýlгÌöÅ=HR%=DábÇøk¦?Â% ­Ie¹®5fèø’y]xFŒŸ–Œ”Bš9öÆ”Š&„ªŠÐ¹ݓò!G ÉXÄ/Ð{!ÈÌKWÏd5'Í­UÆtÔš_,­a¹¡¥Z¢.ô¥Ê]U2W¹r(•å®;=rÜ>8#ΨJ‹H4ãýŸL1©rY!î133"¡VŒ&‡ ˜±2“)7T÷õ\–ZËŠ]ºYõî$›4¢Ì)nºKo»viâY‡Ó•ž-|Êí£‰‡³i|Æ£t†åðtãÛ¯íFø½!Q­!w´!ü„+x±(,ãʨ´%;ûø™.GžoðI2¬(ô?bľĠÈõ îL¨zÜ\¸çL4¡UCIkÚ7Ø5RM¥*>¹2—öÇ;šo]GeÑa¸I.¯aÕ8p?#RÆêëJ¸5òu ô ¤þr: 6ò¡ë¤3KÒùfßOðìü)¸êuø=a¿‹Øß¤@œ}‚I¢Žz„6z&Lœ Or%È×­_£]Ì·ø_ûþ,±a¸GÈþ<…Zÿ)ø`‚Ù–†¬?Æ5¢ˆÒü^œ‹ÉTôbnæµîkaØjêK›FT—ÈíkÀ…Å|Hݬ¤êâôÖ£E2¥¶»,ô£ÀmĘš4)²I¦ßU«CuN*J%I-I%›û;E!ƒßI"[Ù%ËÒª…yRé&¹}å\æÆ ºr›Ñÿ5ÿ§cÙEºþ„ÚKè™æ¬xد±¥ymzzC<Ú} >£]t0J¯;1åkbÇíÄËÊÑ󾄠JfÚHøKïûô <ŸÁ|ßct”$7ªȱ#?ðiºõæ –«ï?Äœºÿ=•™G Í!¢8(X¹¼£/ÀÔ§£1)nÂþÆ„SòöI±«ÑVõÔžƒS¨¡îXµ«&lÄ\TÒÁÿMÐB´çèjž§ÈF8ˆÓì²­]˜F¥y븫f¼rö%;D¶,"×ü1crk¼ø>å×Z-ÐI‰cQ|N¾ gˆ0Ôé«ÔæY–‹6™DVÓ¼ËD”ŸCk«a"Joun‘tK+.åK7¦a»mÍד‰W¢=b)7I·z¦úê¹½\Z¤nmµÝ¶û¾¥c2LÖÄ{p:yM 0bÚPº¾„KS¤M2Çš¶»ôàr&¸2´.Ãç¢Ô•[(ò’'Á–3 xýèH›3íáö7 ÊöbQ>èJESìXü J´Oп™8žä,(ê~.‚ÈÖp,…,¢bȈ €¾ÈbZ¹=gÎú(8xEÔf‚qÊþ&,Í yŸ²ð±Àô<ûÔ`X‘ "ÏpHd;¡b3ɧ‚…‹“ç# æó…£àD’œzž·'TÅ…‡’%ô"4f:po‡ÔQYì=wo—LňÜhFaËZ[F¢%L˜®2ha­]v^®ìJZ«Ÿ¡*4²‰ô¯XyÄÕäï3xOª 5Ȇ” D§`×ÕŠ+‡š¥Vêd¦Ì»™ÔËUŠàÂÄÆÃ•ÿEŠr*¥§?à…ÕeM–pÛmÇ”=§†Šà4ÔÞPäÅÁ´©)©Ñøuñ’SQ ‘¸ç…:˜ZÂjyS¤½ Ëo-¾£S‡«Ù+FBƒU’Z\BêBKw²¢Ã$àá|ËÔlÅ!²ršø$ Ú¥³ýiˆš›;ÚQ®[´&5ú†Èl›Ââ~ï¥3 9&¿Ž/GƯ>ø}HBR/ÈzBÓq(‰¯‘D»‹ãîi>QÙƒî5 ø?„OZ—ØÛ“-Qó>„ƒjð7™ šK! Øj9_×Âz}‡Ÿ'áØg"süYŽDÿÀ›ù@˜àY„äJò%øCÇQ'œ%1'lJ3©øê$5jíby!1®Œ4žSßQ/ »Ë6ãf/ìXK±)á‰ølj蟣Mœ±¬Ì$Òëf=ÇÉ4/²Ÿ¨gŠX7-š¯"½¬ÑlŒtøb~J6…’”Ún¯úFö$T‘ìÔ5Íà ŒèÕÚ(‡•Öÿ"½næ)ë¥!N”©,”LŽs¬ ùRV„tyb4ÖH¢Zj¬jIɦBŽëob¢¨ä”o*%] Îþä‹5-Òx“lA6éd{Íêç#â/q̳#”*=©oéÐÏ„¢ ÜÂX™™îõ' Ô83…%òÈPG)k;ì·er3 “á-è’‘)f„"=1×ÜÊê³ÿëäjSBjª¿F4™¦1þŠ\½†•û°Ýº¸{Cò‘&þøT%_Ë?R—=ÿŒ½Ç•ÏØ”ïìO {\Ÿ;èJ_ø`äĈî{þÄŽæ[ô;4|ÂF•á! f­O–d"y3Ûÿ†|w£/oc÷BS?ˆè–HHŠ!ƒqäo+ù«nŸÁEäI^Ñ/'å°ð!¥‰G],T÷?Ò(Æ£©ÔSÙ#ið%ˆ*»þ…†÷“®J¥ÚМ $IQ‚AB|ÍX•¯c×Ñ£aî]p3íájbKÑH£Kè8J˜9B[±„uÆ,7Ȇ¿št2iÿDÛx½Æ·ø83ÿýw"Õ{x*Õ¨”û’F4"V ‹dCY0Ñl¶·1rE½Íz¯©‡ó±Œa}‰c•MP¼Æ:¹þt¼·u(%n[´×H¶'ãvzÅ7wq–ãAiøC*–­-7Ûb'®íeA»C½`R2£hÝ$o%*Vâ%¡PpÚ0»­ÆøgDLR´›‚c<š(žqNU¾hOÔ ôr]„´<Í"N3˜ùJZ PeL:{"3!”©›5WKWxÖѤ¾ÁP8—Ž›”hRÛÓ’‘¡¹Ój‹ÚN7„¦+Mºm¶îöŒ ,I§O]•Œ@Õ4·K ”Qéx_ï‚Ï9ÅFÍ¥[VµpàÕDÐ”Ž´ÛìÐsŸ@õbiBêo ubÊ•|Ž_¡Xó¬Z…c#]¤C§,TwDAiC¨5‡ñ~“'ùè’ñ{Ža¾?Hšoü~ 6–%<‰C>ƒoËìÅßÙdôz*Œ–¥y¾¿ˆäJz޳!v¡3{Jòy‡^¥v*ó˺#q!£ä½žQÂz÷úDù‰(YH\ê*]Á%‰å "ãJ2ïþ ÏÓ1®ª ý¿†§˜.uEc°þ¡'‘ô"o¡nq°Ö„ Z´+ô…†ù¤’KªVI½P”‰Ç¢Ë¼ŠƒÞý d¿ý.„¥"Ö³¹M:&+F"Ù±C¡*†½ÇÓzT6œ¬^ã-°úƒ—fIçB[iÎD奵è™Jú ñá)ôM+¯©L4}0žÂÂÖ”Dó CÉÃ%6•ëa‰ŠÚ„’yUˆc2R‘ĤÙÂÇAC;#ÄÅ­#»ù½¦W%:4¼-Œú/MCjršWÑéùR`‹MΜ¦´ÜÁopJÈ“LÞ -ÿp?B{‰K‰eºôZ$>Ú¦¢†•pú’%8XÃ"‰oaYlu!$¹VuN‡ÔÊ{_#%$²4­‹G½¤´â”麭ü):·×’"£¦IY´ÝŽ60aö:¥,$ÚiW,ç—ÙÑm„Ô¸k£Ïrï xšmdNØé¢ÍàiìûcUõCçééâЂ J œ È”¢ ¼öù>+шö‘ò¾ˆ²©È’#Àÿ€°5ü¤öžª`à…[ÿ ZJó™dð!q“å?æƒâ½ }ôkæ,‚YÍd]Á.„ˆ÷z[[C?NÂWŸ¡6ê…·cüáZoùþ„dj$ÍËÚ6Ña”ûî+-Œ!¸–ó—ü¨šÖ„_C(×v#„Ëò4þäôEº2WЕ§ð¾Nt!g˜F¼Ó°“}`š]SGð.üó»!ã[Ó†§„›ï¡îßQ±âí+‹±¤˜tèn$bjâ!ø“߯ª†C1ù LÀð“m[Y¨Ä÷- ¡:“D´ý%KÛ°ÆF©Ü?ø0PÞ%£Z|ÀéiBÝ|¥ân[Ä“Äh6¦ÝÊg-ºùÙt&ÚV‰5CTw±ì÷˞ǜÒêáÿî(®dq4´î4©O <ôÇÈð»þ…kùñ#|ctåPÏó²…W×ð”›‹à—¡R8\%rN¿gÅzeP¶†â“3 ŠQè°¡q!ؤ¼O$‹_%çB [ìù¢I ù’þ"ð4+\FgDZ¹Qçõ±GüBJ2ÝÁ/©óF&‹óOáì_ÈÔyÆ¡E ™¿4ÁºÏÀ¼•BBî2îÅ #]Èq²ØNv»»àˆYòJ»ôD¾¢Wº§_¡(L^æ§a8¥,èbIÿÜ1è¿2+?D7<ä²qö<=Šq :6ýJÔZG–. Ô>FÑwÍìÞzbÓÿ¬¢¿Á³TèÆE7±™é?,Kd}A2·)/$%’qi‰[À“ê“>ã“ý„è¶H$C$tecYËB’Cþ¡?7±X]ÜŒµÃà,¼ýåög­¿ž×ضÅÜÔI~g³%Q]H¸þ¿B溛ן¡eòèûˆÖ°F>Ï0%.>E|@][ýe5WЊÛZ–Êœ¿bá¤GíOÁŠfv.§e/¡b½YUãìb<+%;¿DÓ;8!§;ÿ£Á 0~†ºM²4¯˜f–—C–Êdó7LÞbX‡³‘=`¬‰´$ÒjTVÚ±†’êµâhË!aD]2ã¨æKÈöwÄÍ}†<æ¿Ñ™ä­¯ôzpþ‰—Oü¯ãKí>ÙuCü#uãèÀ¯%¸—àÒ%"BF¾ãÏ#ÎÀÉ æ5*Ÿq$5ÏâsB‘%‹ñCÇ)'Ãö%xBùWðì,hØ’ÿˆƒ$?Û« ¿BVïQBcZY!® ô²ðuɦ<úÿ¢]R[‹]ÿBBþ$NÚ‹"y¥ü-547M[Ò¶%9ã¯B¿$!„b…gø‘yä-{ûÄû12GÊ*E“ðõ3!|Kø²zO’(åà÷/Äàjs&_ÅÓäYA<ïdÀÏ‚2þÔö¡)ù¡—òÉóDŒóoB([\„…áôb¹ÿOz3qüKÎE‡üz–ö'W&(Óž’A¨õÉýmå–Ãqf'h¡Ñ»ßr&5$ÀE10êì+k'ßô7ò« ³N²›{ü¶!lÅ…áèT„–U¶x4µbWy$_…aµð7ÝCËt¶h¼œ« +®åQw†V?½éV}à ݇þZ‰Ôk‘òÍAŠV6ßa½õ¢…ö íòI؇áCRõF1¯bÃéû,×#òÖ½¯RAaSo!xþ–|®~į±cèZ2BMÚ‰A„˜i‘ðд©Jv‰ä(9xÍü%(\;‰bQü\_W¿æ'…è[vöfäó–!øD*ó{2Üùƒ4&8bJðœý11è낾gضÿ“®[CPŠD¦½‘,…ÁCØZæþ„ù†0[Â"S×’2Ä­f :¦ü Öíý Fâ‰Çy»þ…âX…;jtƒJ» Õ×ׇ¢ >é¾–Ì\^"ÿbGmÆèõî'Z æ(0ÕeïÖ¼KÈ÷àî!whÖÿ$Ïé‡Ðo×A¿nôw%öaÿƒSô·c<þ„ðw×sײÅÊ>%*öDôˆJüŠ‹>¯³Ù½ÏÉÏñ’Íõüª†£¸43᯲alY£â˜N }Ð_0„\O)gý-Ñ^QÁá)ÁìBL²Ù,Â0ÈËp'1Ž…Þ,Gó ¤Üñäo0èb>„¥ìħ棴S¨ãáå¥ðòY â3kôLâÓv*zÖÇh01ø3îú½Lѳ´‹°ÏöÕv:| <(˜|kÀÚW¸ý Ocà ìÚªvN;þ„ècßLñûZäyíý ÓJ¡9g`%!x?‰.kÉyó—Ù‰€ùBË¡e1+èoc_b\kìk zFŽAmý‘ú yS¨óз(Ôÿ9Î…üvaë n~¸$þGú"†î<Ÿ5ö,Á§°Ÿš÷ÿOqèÌ3ɇñ‹ä} dü"zò@Ö~ÅÐH]÷àHmuf”¸!™ÔÔY]3ôa"JK¹~ÔHíËÿ‹»èXÑFÜë2öS>D¤yON ÔW“éײÊKƼ˯³G°ôr5þXðŽ­˜™p~ÆÛ¿Ððrpþ‹tQê?WWü?OŠhYîC¯Oã¤xËú?“P4==?fPémס“N‰ ú!˜³}TÅ¢P³áŠß/³í”äe(LÁ‹(öd|5üÌhìÊP¡ (NyPÐÞ„[¸žQ%ÿóÊö/✶íìŠ~Düp$¿âñ—¸‡Ï}|†O=C¨sô:}ÈÌ6¾QfÏ_øŠÈò[ˆ†ÄW&¬ÄoЂDªÆ~ˆKåûJÒí]‡O”ì% Zï~…‚ëz¿HjãäøÔªïÏc+©#¨hËžP»ð½`Çãyž;Nl‚_ÍL™!#¹¯ÑN¬™ä§#(ŒOˆý–ó#äeÃ+ÀzŽÏý àÈþ1ÛÞ Šq°ò›nî7c|WØñÕ T~ì* ¤=…xÆ…äy×ÿÁ¸IÙÿÙPKÙYdK settings.xmlÝZ[sâ6~ï¯Èx¶3»Ä!· L`’°a–$4À¶Û7a@,y$9„ß#) 6qd»Óir±¥ïû$¹üò°ƒgŠ Þpª‡GÎpOø”OÎhØ©\8_š¿\ŠÉ„zP÷…ÀuEÖ8Dàt®êË× '’¼.ˆ¢ªÎIª®½º¯§Õ7G×c²å“FùSÙiÖ]w>ŸÎO…œºÕZ­æÆo×CC ¡ˆŽg#Üœ³Ië >¡Ó¬(Ëћ󅯢̈́åÂbáÇGG§îòïõhP–•ËŒ­x"Qó˜ý´W„Ó +Œ»³ê¥ªýÚk¯ÚW‡µa"ÇNsmk3h^®6gù£B5ÆFVƆƒ”õg óWëq’æý<ç;UfZÈP„Îú¥^„ø’rí4+'Õ‹Kwç]Ø=˜èDð³ó³Znôß©¯gIð'5ÄÏ  t:K”\ý|–¿°B¹/àosÁ<ù°â9hor‘E1Ì»þ–L¥%Z‚Ó4vQµÛ‰¯’ú]µÚ-ø± wšÂäÁïHÁ·÷¸ô®p…aIƒ×2ʉÞ'S¸#rJ¹*Ä|ïQ©lÓÃø/ðtGâÃÒYú/Q9‹é³HÝî3P-6'‹Íט.þr-Ét€W¥½Ü0PN4ô[ÄÛÖúeè’üRõìèÈv5»\eÑêºHMþ+jzÂ{ÿm)îÛP÷¢¥ÑÿË8À{q%˜Ø•˜ßØ#òÍ€co|õ7ŒÃÛ‘r&$^Ë{3† |^(pWŦp'ü¶¢«®E„›|Ũ÷4„}ãÓÔ œ‡&&¸š>…G±,Ч0êƒêƒ|óä38µt¿¸+ »ZËcýÿçÝç%çÝ–ø&¼D*HU_=þlyªÿ€§kχÞÁüoŸð|È{UÛC›¤/ýÇ=VÏ’h!K䏯b;Î`RX àøñ/¬ãG9ëèª8k447Ü$=©UQŽäÀ —œþ)DðÀBlÍ 7«ë´×«‚=y€½5³|É8ú½§GÓ C¶)×D“âÃf›j\èÐØÂè±—Ò?øðK[ýÉU3"Á CùðëIûÃÇ…}Z»JcÑE¤¨ÄØN & ’`&%¯D`úЦ+6D)…&UqêZøŠ=;1×DÍ ×â[j ‰˜F9œ–؇¯›` ~GUO¦·Ó:BŽ©ïµ¥ü͵¦®QBn¿: ආþÔÑÀ2‡"’’nÚ 5CÝØ†)å¦ÓdpÃý½óó:ã·#)ñ)‚~¯¦v'rK´Wü%ŸÙ¦ß@ò–BéGÜÓÑÞz,_δVÚB<ábJ'h社âu“co›:7 ørZ”1z‡jËÜ)#Ámìu G)]ð˜Ã ß—ÕŽ†”A¹û4¤¥è7oánÆVŽ þ#_p¶àŠXíIñŽÕ*7´,Âb‹0W‘˜G$±¶ì#õ1™JÎQ”åtc û-"ŒêímÏÓ°ŠaAv1›ÏÁ1¶öÈBD)IF“‰y³wÁ"³Ì\” ·={"²Â€Ž¶ÓÙ÷vÓä¾/?¦àWL¨2îðÀà YNåCïo\ØBãFÆ`AÈöİtïŸZ]»;ÿ á¦ý³LóoPKzån#PKÙYdK content.xmlí]Û–ãF}ç+„Yd•u¿t25éÉ„ =dˆ›Àâ­,—mѲJHr_ø‰<ò)¼ó)| U’,KÖ­lKŒÜ©^YÓiÕMÚ§Î9ûÔõ˯ž6žð€ÂÈÅþë‰ ¤‰€|/\õzòç»w¢5ùêú_âåÒuÐÕ;Û òcÑÁ~L~ ¤´]¥©¯'ÛпÂ0r£+nPt;W8@þ®ÔU1÷UÒVú$ŠŸ=æâIæbé=Ŭ…iÞRY8go9É\,½á#kaš—€Z,¾Ä¬…Ÿ"O\b‚ú&€±{ðOžëß¿ž¬ã8¸šNÁ£ p¸šÊ¶mO“Ôü…<_° ½$×™"ÑÆ¢© äé.ïÅõýhÞâ+ùÛÍ…ÌÐÀV¤„("YÈçÒŽÉVQ±L©=¬˜{×êfg Cæ~–d.wuÁÞUÔE±ìÆëùZÓ$1ùçÃí¾_…Ö¶hÞTNèÌŸ™æ.–Çç¯J ¤Êž¼®"IÚ4ý»û±5ûcèÆ(,dwZ³;ÐsrÄñ¦4’Ož’"z ]>W" DÔP@™¦ÉyæhÑXõ_?ÜΜ5ÚÀ}f·;³èúQ ý=2ÑÆõ˜¥@ò6tZè»Ì]æ­¨NH;C#âú4Dã\@Kv'@ZQrŒÖñÆk6a4u—u.µYÉë¨SbΈ1\ôø«IÉ;µwLû c&¦¾«H’©è Z ÈÒ”æÉÍ éª{Ç®rߺÄ[‘Ê!=(tiô’bW¥ŠÒòð Ufþ¸PCÉI¹ÈÛY®ü“j«ÁXÜD¤#…ÅÁU¡tÙç…›'¶ê¨’âÅò°ÆƒåD‘×õ‡»¦4M¤.Ÿ8µ¬¥ÕQ&×;^“Ú±hš?X~#.¡ƒÄr¼èúËÔ?å…ôoúÞ¯'·0Æ_{й—'ñ»\D+Ÿ ‰“iG-.q™‰„ô#¥¦®Ï`€£/2¦©€¼d«žæd«ÿ{"ÌÙóf޽:ö©]õ¼E‡?n“««(}™B¦ìí„B;Ä_>ÀÐM´ ™\@mÂ;§²¼š?«^°=µLEÉÖtAèg´]ykèØ3pMó‹+ä“'#Äè÷‰ü9À÷þrõ9QÅ_)zŽb´9çÞ…5¼P!iÈ7ø#Žqò½ÂÍwf7Âhµõ`ØQSÞðš69£ì9ÜÆ˜26GLêɽTòoéÛœ7–}CŠ\ ©]…•¢«k×Ù=`H‡’?Ä´å² .&»z³"b@9 cE}Ò^ˆïIû„I%–®ç•PNš€â‡î?1e"ôÜqâZƇ¹hýÎ>OŒƒ, ÅK\…øQ\#wµ&¬!·¨’øè.h¼•¦-ñÕÆõó’³ÉŸeùv¸ £&"i¯úpŽã˜Æ#‡ÏéTŸ†…ÆRü6nâ0ƒ…v‚¸Úd§pÙåd [fU~:P5mP!/•Ë+/ I«‘— ì±HKãÒêÒ.Y¦fE`:X§À4`裱‡X—=$¦ÊÊXf~ EØs…'¢ƒ=Ê–~µL~Žy‹w¸=ÙºnÔ^ ÙêXú›ÍåU°è–mU奻¡E^²ÄV°èªQ#0Ù’1‰ñø¿h­\2%“hØ£!¹2ú‹6ÑÔäªÀ,`ÉÆhÆ£þ¢À£†å*my4ã‘§ŠÉ 0¥ÑÄ%2ý;uL&nÌ ³—yìß­c0Ls4û$Áÿh%ÖäÇTkäÑ­c*ÐÕÑŒy(|Ì£;S€­ŽÇñ1?6ž{…yt«˜2‰ñ!N£ôh€)|ăEÅ”q{>âÑ-1Œˆ(òβ4m4“c*ðØKL²^çÅT I£Ñ1•xì%¦ß Q‡Û«|À£hk—QjQŽÊÇ;º©½”Ñ )ª|¸£{˜RM0¦òñŽî¥¥ ÐÌÑ,ñPùxÇ^b&óåRE‰™„ŒfúYåÝ:F¬¥=šE9*ðè–‰ŸÍ‘ÄÏ+±L@Ä‘ÏÓ$ŽöìíU"‰b{yIŸ[$ßI…¶“é3ô¨´=¶‹°Á Ò„Šñüˆ7ªPåSè÷íÓĤT¹¢ä|†Èý'ɬš@òŠòF.$ͨ1 ôGQMÉj³Òƒ¼<ôT›™à {½ 5«ôÝF žšL‰þ˜†b«v;ž5™Ùñ¬pËcñìmâÇ i:O´íµøësÀ“döïªP‹!¿K³ÚºUmâ¾#YG}WÅù]†Ôò]õ‰ùw%ÉìßU˜´ÚÀ천»^ÉußG«™pÕ•‘îA»l›*Ö'î»ìqªXÝó7䇩J›Ë¬MÜ;Iå¸ke;½K¬Më÷;N«{È.ÇáS·[;Hò“lû ÆÕMLà ™éýÇå™î*Ö‹¾Ù¤å5 \ÌBréEªG|/JÏÆþiKûO.*:DˆpW1…¢ÄBÔÙ8ý (Cüï*v•%mé¨KógÒ—*Æòˆ¾D£Ÿ”ªÖž™Rsn?QÌ]ÅD÷ŠDz0ð9¡L3Ù¡ÃZtTÔsW‰RÇá8s2Gú¢JT{6¥£–‡bRexʧ;Á·î*QòðzsT]ËŽŒN&¿'«™Òfn*‰'¡Ôš›äÞ#ϲy¾·ò¤˜ÁCÈ˦ç[ÏC±&ÒçÄÈOÒ?Ó$‘^tózòßý”cW¨¤€`R†N¹ypNRöK´Ò¹±FØKçnÏb–ßFˆÔå/ð£˜ä̤”Oþ;¢þë—¶/=å ¢€æ=GK¢/!µ7„d ¼H„´²^$Bzo)@{‘½!¤¾H|Ìþðy¡vÚê !í…Úi»G„^¦¦ÑZOé—e¨ Éמ6^Ï’%Ìñâ9ÿƒNÎ óúËd–†ÞÆ’Îפܜþ-Ov‹ížózÉ….ÉÓ Œb&׸di…'ê$«w’¤j5Éå.ùú»ÒÀ»>Ó«<É/¼¥1ÊÃêj·üÛ¶,ÿ¦ó5vòîÉ•—$åˆô•oö^î†~prGéÕ:DKÒ®ëÄÛESY*ühÙoU’¾ÖßÙßèºþñÎTäw:ø{°šdUì‚v ížEkzÇ$ÚÌÑb÷’&`LrbÿÃÅ.ü ¨´÷¯µû#Á® G¥GµG¨†|c~<†¤L(^IXÉÙÙ‹%íÎñÓîS2Í*¾ˆ²ûN¢o~5ýŽ„Hˆ×пÏz5͸ëáÁŽ}KGÀ£6£u“]øQêc»£ð3pHÓ.€c9ÙúÓ8$ý"µuýôáK°— ÐzïRÿws©ö`.ì=¯°_'³Q,ú©S"O‹r‘ 2ÉÿŸ^ý5¦©‚$(±…‚"Ù¶•5`×#’ú*KÍ'¹„ìwÕÔeŸú©ýÄÏÁGXæWø!̯ûÙùbóŠ>B¶¬Ø½j´–§çv&ox€T`ëÊ#d7"dv"”ß*Tö Ùù4{ša›%§Œž‚>¹¾¡{‡i5 cu»Ìü Ÿ2Ëȶfðh@3Œ˰;Ö:Æäú^Ð[‰…I8&üGñPÎRãÎ’;Kî,/Ñpg9Fg©[Æ…8Ëf#e3ôcD妵\ÁŠÐè@Õûåæäú¿ÿú©`š‡rr‚ÑŒL~MY¹ßd§'eÈ( È!4`ËýŽRÏEͰçöQóä€Ìàáò‹ÁÊeÕbdYïW±ì<=Mtè±#ÔQþ?ÿnß¼}|óJx;›½%Üþ¨¼~œÝ)s5¤K]OUú áÍŸ‡by:gyœåq–w‰†³<Îò8Ëã,³¼Ÿ3Ë—’ƒ(Ëý.ÖJË›é0hùþ>\v5OndíwDx§çÞ’þ3‡þýºÞ<ÛÌ ëûkhÙu^•¤ŒP׿}ÿí+aöNI”uöîoCÅdÉxLÆc²KŒ8xLÆc² ¢k—“5¯dakùÍêŸ8(ûîÍÍö@×¹=Ð/%ÿ†p¶fÏŸ©uKÐ/1>£ˆ¿ÞÜÎÞ$¸Üzz³]¸X äèÖõ·OC±8“³8Îâ8‹»DŽÂYgqœÅqÇYÜKfqãRâ 9ov,ZL'F1r~â(ÆKnú‡©ÙG²i¯$ÕxÉK7Oô•°Î÷³WÂ_’¢D‘q¼&†SøíP1˜Åc0ƒñì# ƒñì‚èÛÅÄ`JóN8öfݬ@ó b° sŸÆ0vÖsø,Ð[,úÁ”gÇÄâ,C{1ØGo ³äå釭»âç"?N€è^~¥ ÅälÎä8“ãLîy grœÉq&Ç™gr/ÉK‘/gD]9kÇ qºzä–“aFÔÿ‚ÃûH€ä¿ì€’þ‘:kã  W_È ú{z“£½dÓIb?龓¡Â¯¼òø‹Ç_<þº¨è‚Ç_<þº Úv9ñ×y;-P=Sî„_Þ¿}/ÜÜ$ âûÙ0ÛO9U®­ó¶´”#™ÛXïìÇ!öèy½´{ƒbº‚ îŧľl,®Û'8‹ã,޳8ÎâF‡gqœÅqÇYܳ¸qéð  Ÿµ±„¹ãÿ?~žê=ÝÅ EÂçß<(t7È¡÷›þA;k{ Ñe¥nþðÇÒUeîÆ»Ã²è–C£Ö8Š…ßÑë¨ð[6Q0€o€ºŸ2ö:°´Ÿ3€Þó½@>@@ç¡°DÉÂH 8ñŠØÁHøâ”žËÎöqýgy8ËÃYÎŽ!åœx–ðM«9b±ÐZÀ,]7H<; ãBOø#ŽXÕó)âÚ~ïÙˆ«-«Ã”n;®Ã\a*‰ÅÚÛ~£"Üë·îr‰Bº: ù„ž¡¶Õaç44í ö³V™ÑEyÕñ½xýP »¦€7€eöÛ'SZLWæõ t¶-[é7H奅mNº°íódË>ö½ç2zF›Ì‡Óò; 9§åœö"ç´œÓ^*§½ˆ¹šOÃi{¾&žsZVNÛûX%ç´}sÚŽŽÓ²¯¡û¦òZK&ܺJ8ƒQ2÷ På~=âPƬe+Ü•”šíH‡sVêÁçlƒÞ÷¬Õ[ì}Ó½C+ 1"‡d'ov‰Ú2qÏ@ê Vrͤßáô•b•&°4 (½‡Ú=Ì`½ÙÆXL0§!ÙÃE·…0×BÜçõçs¡þJE&8xëÇÃÍÞð †y¤Ë#Ý‹Œãx¤;ÆÅˆ†Ö/cl1¢Ú¼ŠÌêŽ' ™•¤ðB˜ûø‚ cKéw½Ž1¹¾[£tæ:§,aó“üŠVî'¹Ÿ¼H/Àý$÷“çøÉ–e­ÝÆY6dTNZ6¼¿¸0Y%h–Æ,ÒޛŗµnOù5Œ\G çC,=üxìP'K SæXרUFÌ"ç!‚÷GÄÛ¤ô[´Áz rýÕþÁ/ž ÉØÙÒM¥¢ƒý˜ü¾þPKÓƒSý÷9PKÙYdKmeta.xml“ËŽÛ †÷} ‹ÎÖÆ8ÎÅÈa¤.ª.¦j¥¦Rw‘LJ‹Á˜N ’Š>Â8ò7)08ðlšôÖý×~—$/iñ¼JÓtõP<ΦEJ·öº…[ c=Äöqý¿‹í\ðºS¿ÃÕ€üFÐ9ûñO,>PK—¹ËAbPKÙYdKŸ.Ä++mimetypePKÙYdKù½’×P×PQThumbnails/thumbnail.pngPKÙYdKE™»Ä:Ù& ^Qstyles.xmlPKÙYdKÐXConfigurations2/popupmenu/PKÙYdKYConfigurations2/toolpanel/PKÙYdK@YConfigurations2/menubar/PKÙYdK'vYConfigurations2/accelerator/current.xmlPKÙYdKÍYConfigurations2/statusbar/PKÙYdKZConfigurations2/floater/PKÙYdK;ZConfigurations2/toolbar/PKÙYdKqZConfigurations2/images/Bitmaps/PKÙYdK®ZConfigurations2/progressbar/PKÙYdKÄöïvf$f$5èZPictures/100000000000040000000300B5F9E555E6F721F5.jpgPKÙYdKzån# ¡settings.xmlPKÙYdKÓƒSý÷9 ß„content.xmlPKÙYdK–¯ÙÚ©ç—meta.xmlPKÙYdK—¹ËAbî˜META-INF/manifest.xmlPK™ršCarla-2.4.2/data/stoat-supression.txt000066400000000000000000000000511420416754300175570ustar00rootroot00000000000000getBridgeInstance JackBridge::JackBridge Carla-2.4.2/data/stoat-whitelist.txt000066400000000000000000000000661420416754300173670ustar00rootroot00000000000000jackbridge_port_get_buffer jackbridge_transport_query Carla-2.4.2/data/stoat/000077500000000000000000000000001420416754300146125ustar00rootroot00000000000000Carla-2.4.2/data/stoat/blacklist.txt000066400000000000000000000002411420416754300173200ustar00rootroot00000000000000malloc free realloc fwrite vfprintf access pthread_mutex_lock std::mutex::lock std::condition_variable::wait getcwd open _ZNSo5flushEv _ZdlPv _ZdaPv _Znwm _Znaj Carla-2.4.2/data/stoat/run-stoat.sh000077500000000000000000000005571420416754300171140ustar00rootroot00000000000000#!/bin/bash cd $(dirname $0)/../.. # make distclean export CC=stoat-compile export CXX=stoat-compile++ export CFLAGS="-DJACKBRIDGE_DIRECT=1 -DSTOAT_TEST_BUILD=1" export CXXFLAGS=${CFLAGS} export LDFLAGS="-ljack" make -j 8 EXTERNAL_PLUGINS=false backend && \ stoat --recursive build/ -b data/stoat/blacklist.txt -w data/stoat/whitelist.txt # -G stoat-output.png Carla-2.4.2/data/stoat/whitelist.txt000066400000000000000000000076461420416754300174040ustar00rootroot00000000000000cos cosl cosf sin sinl sinf tan tanl tanf tanh tanhl tanhf abs fabs fabsf fabsl cabs fmin fminf fminl fmax fmaxf fmaxl exp exp2f expf expl pow powf powl fmod fmodf fmodl memset memcpy strlen strcpy strcmp snprintf strtol strcasecmp toupper towupper strcasestr index jack_port_get_buffer jack_midi_clear_buffer jack_midi_get_event_count jack_midi_event_get jack_get_sample_rate jack_ringbuffer_read_space jack_ringbuffer_read_advance jack_ringbuffer_write_space jack_ringbuffer_get_read_vector jack_transport_query jack_get_current_transport_frame jack_get_buffer_size jack_midi_event_write jack_ringbuffer_peek jack_last_frame_time jack_midi_max_event_size jack_client_thread_id jack_get_cycle_times std::__throw_bad_function_call std::__throw_bad_alloc std::_Rb_tree_increment sem_post sem_getvalue sem_trywait pthread_cond_signal pthread_mutex_trylock pthread_mutex_unlock pthread_rwlock_unlock pthread_rwlock_tryrdlock pthread_self pthread_setspecific pthread_getspecific jack_ringbuffer_read jack_ringbuffer_write jack_midi_event_reserve (process_callback) isalnum isalpha isascii isblank iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit sprintf # std::basic_string, std::allocator >::c_str _ZNKSs5c_strEv _ZNKSs6lengthEv ceil ceilf rint isnan atoi atof strncmp strstr memmove strncpy sinh log logf logl log10 log10f log10l log2 log2f log2l asinh atan atanh atanf sqrt floor floorf sqrtf ffs ffsl ffsll rint rintf rintl lrint lrintf lrintl llrint llrintf llrintl nearbyintf round roundf roundl trunc truncf truncl modf modff modfl carg asinf copysign copysignf copysignl errx warnx cexp cabsf __fmod_finite __fmodf_finite __expf_finite __logf_finite __log_finite __log10_finite __exp_finite __expf_finite __muldc3 __asinf_finite __log10f_finite __sinh_finite __sinhf_finite __ctype_b_loc std::rint rint strcat strncat memcmp vsnprintf abort __assert_fail fftw_execute rtosc_message rtosc_vmessage rtosc_amessage rtosc_narguments rtosc_type rtosc_argument rtosc_message_length rtosc_message_ring_length rtosc_argument_string rtosc_bundle rtosc_bundle_elements rtosc_bundle_fetch rtosc_bundle_size rtosc_bundle_p rtosc_bundle_timetag rtosc_match rtosc_match_path rtosc::Ports::dispatch rtosc::RtData::RtData std::__throw_out_of_range std::__throw_length_error __cxa_begin_catch __cxa_rethrow __cxa_call_unexpected __cxa_end_catch __cxa_guard_acquire __cxa_atexit __cxa_guard_release __cxa_guard_abort __dynamic_cast _ZSt9terminatev rand scalbnf strchr __log2_finite __divdc3 __mulsc3 _ZNSt6chrono3_V212system_clock3nowEv _ZNSt3__16chrono12steady_clock3nowEv _ZNSt18condition_variable10notify_allEv _ZNSt18condition_variable10notify_oneEv # hacks here struct.rtosc::RtData0 struct.rtosc::RtData1 struct.rtosc::RtData2 # This might not be 100% RT safe, but they're external libs outside of our control fluid_synth_all_notes_off fluid_synth_all_sounds_off fluid_synth_cc fluid_synth_channel_pressure fluid_synth_get_active_voice_count fluid_synth_noteoff fluid_synth_noteon fluid_synth_program_select fluid_synth_pitch_bend fluid_synth_process fluid_synth_write_float LinuxSampler::AudioOutputDevice::RenderAudio LinuxSampler::AudioOutputDevicePlugin::Render LinuxSampler::MidiInputPort::DispatchControlChange LinuxSampler::MidiInputPort::DispatchNoteOff LinuxSampler::MidiInputPort::DispatchNoteOn LinuxSampler::MidiInputPort::DispatchControlChange LinuxSampler::MidiInputPort::DispatchRaw LinuxSampler::EngineChannel::GetDiskStreamCount LinuxSampler::EngineChannel::GetVoiceCount # TODO __carla_fopen carla_safe_assert carla_stderr2 carla_sem_timedwait # TODO: recheck LinuxSampler::AudioOutputDevice::Channel # FIXME: real non-rt safe stuff fluid_synth_set_reverb_on fluid_synth_set_reverb fluid_synth_set_chorus_on fluid_synth_set_chorus fluid_synth_set_polyphony fluid_synth_set_interp_method LinuxSampler::InstrumentManager::LoadInstrumentInBackground # Report upstream llround llabs clock_gettime RtLinkedList$vtable3 Carla-2.4.2/data/valgrind.sh000077500000000000000000000013621420416754300156270ustar00rootroot00000000000000#!/bin/bash export CARLA_VALGRIND_TEST=1 export WINEDEBUG=-all # export CARLA_DEV=1 # export PYTHONMALLOC=malloc # export SKIP_STRIPPING=true valgrind \ --tool=memcheck \ --leak-check=full \ --show-leak-kinds=all \ --track-origins=yes \ --gen-suppressions=all \ --suppressions=./data/valgrind.supp \ -- ./bin/carla-bridge-native internal "" carlapatchbay & PID=$! while true; do if jack_lsp | grep -q Carla-Patchbay:output_1; then jack_connect Carla-Patchbay:output_2 system:playback_2 jack_connect Carla-Patchbay:output_1 system:playback_1 # jack_connect Carla-Patchbay:events-out "a2j:ZynAddSubFX [129] (playback): ZynAddSubFX" break else sleep 1 fi done wait ${PID} Carla-2.4.2/data/valgrind.supp000066400000000000000000000015121420416754300161760ustar00rootroot00000000000000# ld related errors, unfixed since the dawn of time { _dl_init-1 Memcheck:Leak match-leak-kinds: reachable ... fun:call_init fun:_dl_init obj:/lib/x86_64-linux-gnu/ld-2.27.so } { _dl_init-2 Memcheck:Leak match-leak-kinds: possible ... fun:call_init fun:_dl_init obj:/lib/x86_64-linux-gnu/ld-2.27.so } { _dl_init-3 Memcheck:Leak match-leak-kinds: definite ... fun:call_init fun:_dl_init obj:/lib/x86_64-linux-gnu/ld-2.27.so } { dlclose-1 Memcheck:Leak match-leak-kinds: reachable fun:calloc fun:_dlerror_run fun:dlopen@@GLIBC_2.2.5 ... } { dlclose-2 Memcheck:Leak match-leak-kinds: reachable ... fun:_dl_open ... } # XInitThreads { XInitThreads Memcheck:Leak match-leak-kinds: reachable fun:malloc fun:XInitThreads ... } Carla-2.4.2/data/windows/000077500000000000000000000000001420416754300151525ustar00rootroot00000000000000Carla-2.4.2/data/windows/README.txt000066400000000000000000000025321420416754300166520ustar00rootroot00000000000000# --- README for Carla - Windows build --- What is Carla? --------------- Carla is a fully-featured audio plugin host, with support for many audio drivers and plugin formats. It's open source and licensed under the GNU General Public License, version 2 or later. Features --------- * LADSPA, DSSI, LV2 and VST2 and VST3 plugin formats * SF2/3 and SFZ sound banks * Internal audio and midi file player * Automation of plugin parameters via MIDI CC * Remote control over OSC * Rack and Patchbay processing modes, plus Single and Multi-Client if using JACK * Native audio drivers (ALSA, DirectSound, CoreAudio, etc) and JACK * Transport controls, sync with JACK Transport or Ableton Link In experimental phase / work in progress: * Export any Carla loadable plugin or sound bank as an LV2 plugin * Plugin bridge support (such as running 32bit plugins on a 64bit Carla, or Windows plugins on Linux) Carla is also available as an LV2 and VST2 plugin for Windows. For the LV2 plugin, create the "C:\Program Files\Common Files\LV2" folder (if it does not exist yet), then copy Carla.lv2 into it and restart your LV2 host. For the VST2 plugin, create the "C:\Program Files\Common Files\VST2" folder (if it does not exist yet), then copy Carla.vst into it and restart your VST2 host. For a complete and updated description of Carla, please check: https://kx.studio/carla Carla-2.4.2/data/windows/app-gui.py000066400000000000000000000027711420416754300170750ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # ------------------------------------------------------------------------------------------------------------ # Imports (cx_Freeze) from cx_Freeze import setup, Executable # ------------------------------------------------------------------------------------------------------------ # Imports (Custom Stuff) from carla_host import VERSION from os import getenv # ------------------------------------------------------------------------------------------------------------ name = getenv("SCRIPT_NAME") if name == "Carla": description = "Carla Plugin Host" build_exe = ".\\build\\Carla\\" elif name == "Carla-Control": description = "Carla Remote Control" build_exe = ".\\build\\Carla-Control\\" else: description = name build_exe = ".\\build\\{}-resources\\".format(name) options = { "zip_include_packages": ["*"], "zip_exclude_packages": ["PyQt5"], "replace_paths": [["*",".\\lib\\"]], "build_exe": build_exe, "optimize": True, } exe_options = { "script": ".\\source\\frontend\\{}".format(name), "icon": ".\\resources\\ico\\carla.ico", "copyright": "Copyright (C) 2011-2021 Filipe Coelho", "base": "Win32GUI", "targetName": "{}.exe".format(name), } setup(name = name, version = VERSION, description = description, options = {"build_exe": options}, executables = [Executable(**exe_options)]) # ------------------------------------------------------------------------------------------------------------ Carla-2.4.2/data/windows/unzipfx-carla-control/000077500000000000000000000000001420416754300214135ustar00rootroot00000000000000Carla-2.4.2/data/windows/unzipfx-carla-control/.gitignore000066400000000000000000000000411420416754300233760ustar00rootroot00000000000000 *~ *.o *.exe *.zip unzipfx2cat Carla-2.4.2/data/windows/unzipfx-carla-control/Makefile.linux000066400000000000000000000012051420416754300242070ustar00rootroot00000000000000#!/usr/bin/Makefile -f CC ?= gcc BUILD_FLAGS = -DSFX -DLINUX -I. -I.. $(CFLAGS) -O2 BUILD_FLAGS += -DLARGE_FILE_SUPPORT -DUNICODE_SUPPORT -DUNICODE_WCHAR -DUTF8_MAYBE_NATIVE BUILD_FLAGS += -DNO_LCHMOD -DHAVE_DIRENT_H -DHAVE_TERMIOS_H -D_MBCS LINK_FLAGS = -static $(LDFLAGS) OBJ = crc32.o crypt.o extract.o fileio.o globals.o inflate.o match.o process.o ttyio.o ubz2err.o unzip.o zipinfo.o OBJ += unix/unix.o OBJ += unzipfx/appDetails.o # ----------------------------- all: unzipfx2cat unzipfx2cat: $(OBJ) $(CC) $^ $(LINK_FLAGS) -o $@ clean: rm -f *~ $(OBJ) # ----------------------------- .c.o: $(CC) $< $(BUILD_FLAGS) -c -o $@ Carla-2.4.2/data/windows/unzipfx-carla-control/Makefile.win32000066400000000000000000000015361420416754300240210ustar00rootroot00000000000000#!/usr/bin/Makefile -f CC ?= gcc WINDRES ?= windres BUILD_FLAGS = -DSFX -DWIN32 -DWINDOWS -DFORCE_UNIX_OVER_WIN32 -I. -I.. $(CFLAGS) -O2 BUILD_FLAGS += -DLARGE_FILE_SUPPORT -DUNICODE_SUPPORT -DUNICODE_WCHAR -DUTF8_MAYBE_NATIVE BUILD_FLAGS += -DNO_LCHMOD -DHAVE_DIRENT_H -DHAVE_TERMIOS_H -D_MBCS LINK_FLAGS = -static -mwindows -lkernel32 -lshell32 $(LDFLAGS) OBJ = crc32.o crypt.o extract.o fileio.o globals.o inflate.o match.o process.o ttyio.o ubz2err.o unzip.o zipinfo.o OBJ += win32/nt.o win32/win32.o win32/win32i64.o OBJ += unzipfx/appDetails.o OBJ += icon.o # ----------------------------- all: unzipfx2cat.exe unzipfx2cat.exe: $(OBJ) $(CC) $^ $(LINK_FLAGS) -o $@ icon.o: ../../../resources/ico/carla-control.rc $(WINDRES) -i $< -o $@ -O coff clean: rm -f *~ $(OBJ) # ----------------------------- .c.o: $(CC) $< $(BUILD_FLAGS) -c -o $@ Carla-2.4.2/data/windows/unzipfx-carla-control/README000066400000000000000000000016061420416754300222760ustar00rootroot00000000000000This is a special build of unzip's unzipfx tool, modified to allow full application bundles. You get a static linked binary that extracts your files into a temporary location, then executes the main program (defined by you). Currently working under Linux only, but should be fairly easy to get it into other OSes (unzip itself is already available in many, including Windows, MacOS, Linux and BeOS). To get a static unzipfx application, you do: 1 - create a zip file of your application bundle, with a single parent/root directory (this directory and the main app-name must match) 2 - edit unzipfx/appDetails.h and set SFX_APP_MININAME as the directory name set in step 1 3 - compile this tool using the appropriate makefile (eg: make -f Makefile.linux). That will give you 'unzipfx2cat' binary 4 - concatenate your zip file over the 'unzipfx2cat' binary (eg: cat unzipfx2cat myapp.zip > myapp) Carla-2.4.2/data/windows/unzipfx-carla-control/consts.h000066400000000000000000000037341420416754300231040ustar00rootroot00000000000000/* Copyright (c) 1990-2001 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2000-Apr-09 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- consts.h This file contains global, initialized variables that never change. It is included by unzip.c and windll/windll.c. ---------------------------------------------------------------------------*/ /* And'ing with mask_bits[n] masks the lower n bits */ ZCONST unsigned near mask_bits[17] = { 0x0000, 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff, 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff }; ZCONST char Far VersionDate[] = UZ_VERSION_DATE; /* now defined in unzvers.h */ #ifndef SFX ZCONST char Far EndSigMsg[] = "\nnote: didn't find end-of-central-dir signature at end of central dir.\n"; #endif ZCONST char Far CentSigMsg[] = "error: expected central file header signature not found (file #%lu).\n"; ZCONST char Far SeekMsg[] = "error [%s]: attempt to seek before beginning of zipfile\n%s"; ZCONST char Far FilenameNotMatched[] = "caution: filename not matched: %s\n"; ZCONST char Far ExclFilenameNotMatched[] = "caution: excluded filename not matched: %s\n"; #ifdef VMS ZCONST char Far ReportMsg[] = "\ (please check that you have transferred or created the zipfile in the\n\ appropriate BINARY mode--this includes ftp, Kermit, AND unzip'd zipfiles)\n"; #else ZCONST char Far ReportMsg[] = "\ (please check that you have transferred or created the zipfile in the\n\ appropriate BINARY mode and that you have compiled UnZip properly)\n"; #endif #ifndef SFX ZCONST char Far Zipnfo[] = "zipinfo"; ZCONST char Far CompiledWith[] = "Compiled with %s%s for %s%s%s%s.\n\n"; #endif Carla-2.4.2/data/windows/unzipfx-carla-control/crc32.c000066400000000000000000001133561420416754300225040ustar00rootroot00000000000000/* Copyright (c) 1990-2007 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2005-Feb-10 or later (the contents of which are also included in zip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /* crc32.c -- compute the CRC-32 of a data stream * Copyright (C) 1995 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h * * Thanks to Rodney Brown for his contribution of faster * CRC methods: exclusive-oring 32 bits of data at a time, and pre-computing * tables for updating the shift register in one step with three exclusive-ors * instead of four steps with four exclusive-ors. This results about a factor * of two increase in speed on a Power PC G4 (PPC7455) using gcc -O3. */ /* $Id: crc32.c,v 2.0 2007/01/07 05:20:36 spc Exp $ */ #define __CRC32_C /* identifies this source module */ #include "zip.h" #if (!defined(USE_ZLIB) || defined(USE_OWN_CRCTAB)) #ifndef ZCONST # define ZCONST const #endif #include "crc32.h" /* When only the table of precomputed CRC values is needed, only the basic system-independent table containing 256 entries is created; any support for "unfolding" optimization is disabled. */ #if (defined(USE_ZLIB) || defined(CRC_TABLE_ONLY)) # ifdef IZ_CRCOPTIM_UNFOLDTBL # undef IZ_CRCOPTIM_UNFOLDTBL # endif #endif /* (USE_ZLIB || CRC_TABLE_ONLY) */ #if defined(IZ_CRCOPTIM_UNFOLDTBL) # define CRC_TBLS 4 #else # define CRC_TBLS 1 #endif /* Generate tables for a byte-wise 32-bit CRC calculation on the polynomial: x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. Polynomials over GF(2) are represented in binary, one bit per coefficient, with the lowest powers in the most significant bit. Then adding polynomials is just exclusive-or, and multiplying a polynomial by x is a right shift by one. If we call the above polynomial p, and represent a byte as the polynomial q, also with the lowest power in the most significant bit (so the byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p, where a mod b means the remainder after dividing a by b. This calculation is done using the shift-register method of multiplying and taking the remainder. The register is initialized to zero, and for each incoming bit, x^32 is added mod p to the register if the bit is a one (where x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by x (which is shifting right by one and adding x^32 mod p if the bit shifted out is a one). We start with the highest power (least significant bit) of q and repeat for all eight bits of q. The first (or only) table is simply the CRC of all possible eight bit values. This is all the information needed to generate CRC's on data a byte-at-a-time for all combinations of CRC register values and incoming bytes. The remaining 3 tables (if IZ_CRCOPTIM_UNFOLDTBL is enabled) allow for word-at-a-time CRC calculation, where a word is four bytes. */ #ifdef DYNAMIC_CRC_TABLE /* ========================================================================= * Make the crc table. This function is needed only if you want to compute * the table dynamically. */ local void make_crc_table OF((void)); #if (defined(DYNALLOC_CRCTAB) && defined(REENTRANT)) error: Dynamic allocation of CRC table not safe with reentrant code. #endif /* DYNALLOC_CRCTAB && REENTRANT */ #ifdef DYNALLOC_CRCTAB local ulg near *crc_table = NULL; # if 0 /* not used, since sizeof("near *") <= sizeof(int) */ /* Use this section when access to a "local int" is faster than access to a "local pointer" (e.g.: i86 16bit code with far pointers). */ local int crc_table_empty = 1; # define CRC_TABLE_IS_EMPTY (crc_table_empty != 0) # define MARK_CRCTAB_FILLED crc_table_empty = 0 # define MARK_CRCTAB_EMPTY crc_table_empty = 1 # else /* Use this section on systems where the size of pointers and ints is equal (e.g.: all 32bit systems). */ # define CRC_TABLE_IS_EMPTY (crc_table == NULL) # define MARK_CRCTAB_FILLED crc_table = crctab_p # define MARK_CRCTAB_EMPTY crc_table = NULL # endif #else /* !DYNALLOC_CRCTAB */ local ulg near crc_table[CRC_TBLS*256]; local int crc_table_empty = 1; # define CRC_TABLE_IS_EMPTY (crc_table_empty != 0) # define MARK_CRCTAB_FILLED crc_table_empty = 0 #endif /* ?DYNALLOC_CRCTAB */ local void make_crc_table() { ulg c; /* crc shift register */ int n; /* counter for all possible eight bit values */ int k; /* byte being shifted into crc apparatus */ #ifdef DYNALLOC_CRCTAB ulg near *crctab_p; /* temporary pointer to allocated crc_table area */ #else /* !DYNALLOC_CRCTAB */ # define crctab_p crc_table #endif /* DYNALLOC_CRCTAB */ #ifdef COMPUTE_XOR_PATTERN /* This piece of code has been left here to explain how the XOR pattern * used in the creation of the crc_table values can be recomputed. * For production versions of this function, it is more efficient to * supply the resultant pattern at compile time. */ ulg xor; /* polynomial exclusive-or pattern */ /* terms of polynomial defining this crc (except x^32): */ static ZCONST uch p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26}; /* make exclusive-or pattern from polynomial (0xedb88320L) */ xor = 0L; for (n = 0; n < sizeof(p)/sizeof(uch); n++) xor |= 1L << (31 - p[n]); #else # define xor 0xedb88320L #endif #ifdef DYNALLOC_CRCTAB crctab_p = (ulg near *) nearmalloc (CRC_TBLS*256*sizeof(ulg)); if (crctab_p == NULL) { ziperr(ZE_MEM, "crc_table allocation"); } #endif /* DYNALLOC_CRCTAB */ /* generate a crc for every 8-bit value */ for (n = 0; n < 256; n++) { c = (ulg)n; for (k = 8; k; k--) c = c & 1 ? xor ^ (c >> 1) : c >> 1; crctab_p[n] = REV_BE(c); } #ifdef IZ_CRCOPTIM_UNFOLDTBL /* generate crc for each value followed by one, two, and three zeros */ for (n = 0; n < 256; n++) { c = crctab_p[n]; for (k = 1; k < 4; k++) { c = CRC32(c, 0, crctab_p); crctab_p[k*256+n] = c; } } #endif /* IZ_CRCOPTIM_UNFOLDTBL */ MARK_CRCTAB_FILLED; } #else /* !DYNAMIC_CRC_TABLE */ #ifdef DYNALLOC_CRCTAB error: Inconsistent flags, DYNALLOC_CRCTAB without DYNAMIC_CRC_TABLE. #endif /* ======================================================================== * Table of CRC-32's of all single-byte values (made by make_crc_table) */ local ZCONST ulg near crc_table[CRC_TBLS*256] = { # ifdef IZ_CRC_BE_OPTIMIZ 0x00000000L, 0x96300777L, 0x2c610eeeL, 0xba510999L, 0x19c46d07L, 0x8ff46a70L, 0x35a563e9L, 0xa395649eL, 0x3288db0eL, 0xa4b8dc79L, 0x1ee9d5e0L, 0x88d9d297L, 0x2b4cb609L, 0xbd7cb17eL, 0x072db8e7L, 0x911dbf90L, 0x6410b71dL, 0xf220b06aL, 0x4871b9f3L, 0xde41be84L, 0x7dd4da1aL, 0xebe4dd6dL, 0x51b5d4f4L, 0xc785d383L, 0x56986c13L, 0xc0a86b64L, 0x7af962fdL, 0xecc9658aL, 0x4f5c0114L, 0xd96c0663L, 0x633d0ffaL, 0xf50d088dL, 0xc8206e3bL, 0x5e10694cL, 0xe44160d5L, 0x727167a2L, 0xd1e4033cL, 0x47d4044bL, 0xfd850dd2L, 0x6bb50aa5L, 0xfaa8b535L, 0x6c98b242L, 0xd6c9bbdbL, 0x40f9bcacL, 0xe36cd832L, 0x755cdf45L, 0xcf0dd6dcL, 0x593dd1abL, 0xac30d926L, 0x3a00de51L, 0x8051d7c8L, 0x1661d0bfL, 0xb5f4b421L, 0x23c4b356L, 0x9995bacfL, 0x0fa5bdb8L, 0x9eb80228L, 0x0888055fL, 0xb2d90cc6L, 0x24e90bb1L, 0x877c6f2fL, 0x114c6858L, 0xab1d61c1L, 0x3d2d66b6L, 0x9041dc76L, 0x0671db01L, 0xbc20d298L, 0x2a10d5efL, 0x8985b171L, 0x1fb5b606L, 0xa5e4bf9fL, 0x33d4b8e8L, 0xa2c90778L, 0x34f9000fL, 0x8ea80996L, 0x18980ee1L, 0xbb0d6a7fL, 0x2d3d6d08L, 0x976c6491L, 0x015c63e6L, 0xf4516b6bL, 0x62616c1cL, 0xd8306585L, 0x4e0062f2L, 0xed95066cL, 0x7ba5011bL, 0xc1f40882L, 0x57c40ff5L, 0xc6d9b065L, 0x50e9b712L, 0xeab8be8bL, 0x7c88b9fcL, 0xdf1ddd62L, 0x492dda15L, 0xf37cd38cL, 0x654cd4fbL, 0x5861b24dL, 0xce51b53aL, 0x7400bca3L, 0xe230bbd4L, 0x41a5df4aL, 0xd795d83dL, 0x6dc4d1a4L, 0xfbf4d6d3L, 0x6ae96943L, 0xfcd96e34L, 0x468867adL, 0xd0b860daL, 0x732d0444L, 0xe51d0333L, 0x5f4c0aaaL, 0xc97c0dddL, 0x3c710550L, 0xaa410227L, 0x10100bbeL, 0x86200cc9L, 0x25b56857L, 0xb3856f20L, 0x09d466b9L, 0x9fe461ceL, 0x0ef9de5eL, 0x98c9d929L, 0x2298d0b0L, 0xb4a8d7c7L, 0x173db359L, 0x810db42eL, 0x3b5cbdb7L, 0xad6cbac0L, 0x2083b8edL, 0xb6b3bf9aL, 0x0ce2b603L, 0x9ad2b174L, 0x3947d5eaL, 0xaf77d29dL, 0x1526db04L, 0x8316dc73L, 0x120b63e3L, 0x843b6494L, 0x3e6a6d0dL, 0xa85a6a7aL, 0x0bcf0ee4L, 0x9dff0993L, 0x27ae000aL, 0xb19e077dL, 0x44930ff0L, 0xd2a30887L, 0x68f2011eL, 0xfec20669L, 0x5d5762f7L, 0xcb676580L, 0x71366c19L, 0xe7066b6eL, 0x761bd4feL, 0xe02bd389L, 0x5a7ada10L, 0xcc4add67L, 0x6fdfb9f9L, 0xf9efbe8eL, 0x43beb717L, 0xd58eb060L, 0xe8a3d6d6L, 0x7e93d1a1L, 0xc4c2d838L, 0x52f2df4fL, 0xf167bbd1L, 0x6757bca6L, 0xdd06b53fL, 0x4b36b248L, 0xda2b0dd8L, 0x4c1b0aafL, 0xf64a0336L, 0x607a0441L, 0xc3ef60dfL, 0x55df67a8L, 0xef8e6e31L, 0x79be6946L, 0x8cb361cbL, 0x1a8366bcL, 0xa0d26f25L, 0x36e26852L, 0x95770cccL, 0x03470bbbL, 0xb9160222L, 0x2f260555L, 0xbe3bbac5L, 0x280bbdb2L, 0x925ab42bL, 0x046ab35cL, 0xa7ffd7c2L, 0x31cfd0b5L, 0x8b9ed92cL, 0x1daede5bL, 0xb0c2649bL, 0x26f263ecL, 0x9ca36a75L, 0x0a936d02L, 0xa906099cL, 0x3f360eebL, 0x85670772L, 0x13570005L, 0x824abf95L, 0x147ab8e2L, 0xae2bb17bL, 0x381bb60cL, 0x9b8ed292L, 0x0dbed5e5L, 0xb7efdc7cL, 0x21dfdb0bL, 0xd4d2d386L, 0x42e2d4f1L, 0xf8b3dd68L, 0x6e83da1fL, 0xcd16be81L, 0x5b26b9f6L, 0xe177b06fL, 0x7747b718L, 0xe65a0888L, 0x706a0fffL, 0xca3b0666L, 0x5c0b0111L, 0xff9e658fL, 0x69ae62f8L, 0xd3ff6b61L, 0x45cf6c16L, 0x78e20aa0L, 0xeed20dd7L, 0x5483044eL, 0xc2b30339L, 0x612667a7L, 0xf71660d0L, 0x4d476949L, 0xdb776e3eL, 0x4a6ad1aeL, 0xdc5ad6d9L, 0x660bdf40L, 0xf03bd837L, 0x53aebca9L, 0xc59ebbdeL, 0x7fcfb247L, 0xe9ffb530L, 0x1cf2bdbdL, 0x8ac2bacaL, 0x3093b353L, 0xa6a3b424L, 0x0536d0baL, 0x9306d7cdL, 0x2957de54L, 0xbf67d923L, 0x2e7a66b3L, 0xb84a61c4L, 0x021b685dL, 0x942b6f2aL, 0x37be0bb4L, 0xa18e0cc3L, 0x1bdf055aL, 0x8def022dL # ifdef IZ_CRCOPTIM_UNFOLDTBL , 0x00000000L, 0x41311b19L, 0x82623632L, 0xc3532d2bL, 0x04c56c64L, 0x45f4777dL, 0x86a75a56L, 0xc796414fL, 0x088ad9c8L, 0x49bbc2d1L, 0x8ae8effaL, 0xcbd9f4e3L, 0x0c4fb5acL, 0x4d7eaeb5L, 0x8e2d839eL, 0xcf1c9887L, 0x5112c24aL, 0x1023d953L, 0xd370f478L, 0x9241ef61L, 0x55d7ae2eL, 0x14e6b537L, 0xd7b5981cL, 0x96848305L, 0x59981b82L, 0x18a9009bL, 0xdbfa2db0L, 0x9acb36a9L, 0x5d5d77e6L, 0x1c6c6cffL, 0xdf3f41d4L, 0x9e0e5acdL, 0xa2248495L, 0xe3159f8cL, 0x2046b2a7L, 0x6177a9beL, 0xa6e1e8f1L, 0xe7d0f3e8L, 0x2483dec3L, 0x65b2c5daL, 0xaaae5d5dL, 0xeb9f4644L, 0x28cc6b6fL, 0x69fd7076L, 0xae6b3139L, 0xef5a2a20L, 0x2c09070bL, 0x6d381c12L, 0xf33646dfL, 0xb2075dc6L, 0x715470edL, 0x30656bf4L, 0xf7f32abbL, 0xb6c231a2L, 0x75911c89L, 0x34a00790L, 0xfbbc9f17L, 0xba8d840eL, 0x79dea925L, 0x38efb23cL, 0xff79f373L, 0xbe48e86aL, 0x7d1bc541L, 0x3c2ade58L, 0x054f79f0L, 0x447e62e9L, 0x872d4fc2L, 0xc61c54dbL, 0x018a1594L, 0x40bb0e8dL, 0x83e823a6L, 0xc2d938bfL, 0x0dc5a038L, 0x4cf4bb21L, 0x8fa7960aL, 0xce968d13L, 0x0900cc5cL, 0x4831d745L, 0x8b62fa6eL, 0xca53e177L, 0x545dbbbaL, 0x156ca0a3L, 0xd63f8d88L, 0x970e9691L, 0x5098d7deL, 0x11a9ccc7L, 0xd2fae1ecL, 0x93cbfaf5L, 0x5cd76272L, 0x1de6796bL, 0xdeb55440L, 0x9f844f59L, 0x58120e16L, 0x1923150fL, 0xda703824L, 0x9b41233dL, 0xa76bfd65L, 0xe65ae67cL, 0x2509cb57L, 0x6438d04eL, 0xa3ae9101L, 0xe29f8a18L, 0x21cca733L, 0x60fdbc2aL, 0xafe124adL, 0xeed03fb4L, 0x2d83129fL, 0x6cb20986L, 0xab2448c9L, 0xea1553d0L, 0x29467efbL, 0x687765e2L, 0xf6793f2fL, 0xb7482436L, 0x741b091dL, 0x352a1204L, 0xf2bc534bL, 0xb38d4852L, 0x70de6579L, 0x31ef7e60L, 0xfef3e6e7L, 0xbfc2fdfeL, 0x7c91d0d5L, 0x3da0cbccL, 0xfa368a83L, 0xbb07919aL, 0x7854bcb1L, 0x3965a7a8L, 0x4b98833bL, 0x0aa99822L, 0xc9fab509L, 0x88cbae10L, 0x4f5def5fL, 0x0e6cf446L, 0xcd3fd96dL, 0x8c0ec274L, 0x43125af3L, 0x022341eaL, 0xc1706cc1L, 0x804177d8L, 0x47d73697L, 0x06e62d8eL, 0xc5b500a5L, 0x84841bbcL, 0x1a8a4171L, 0x5bbb5a68L, 0x98e87743L, 0xd9d96c5aL, 0x1e4f2d15L, 0x5f7e360cL, 0x9c2d1b27L, 0xdd1c003eL, 0x120098b9L, 0x533183a0L, 0x9062ae8bL, 0xd153b592L, 0x16c5f4ddL, 0x57f4efc4L, 0x94a7c2efL, 0xd596d9f6L, 0xe9bc07aeL, 0xa88d1cb7L, 0x6bde319cL, 0x2aef2a85L, 0xed796bcaL, 0xac4870d3L, 0x6f1b5df8L, 0x2e2a46e1L, 0xe136de66L, 0xa007c57fL, 0x6354e854L, 0x2265f34dL, 0xe5f3b202L, 0xa4c2a91bL, 0x67918430L, 0x26a09f29L, 0xb8aec5e4L, 0xf99fdefdL, 0x3accf3d6L, 0x7bfde8cfL, 0xbc6ba980L, 0xfd5ab299L, 0x3e099fb2L, 0x7f3884abL, 0xb0241c2cL, 0xf1150735L, 0x32462a1eL, 0x73773107L, 0xb4e17048L, 0xf5d06b51L, 0x3683467aL, 0x77b25d63L, 0x4ed7facbL, 0x0fe6e1d2L, 0xccb5ccf9L, 0x8d84d7e0L, 0x4a1296afL, 0x0b238db6L, 0xc870a09dL, 0x8941bb84L, 0x465d2303L, 0x076c381aL, 0xc43f1531L, 0x850e0e28L, 0x42984f67L, 0x03a9547eL, 0xc0fa7955L, 0x81cb624cL, 0x1fc53881L, 0x5ef42398L, 0x9da70eb3L, 0xdc9615aaL, 0x1b0054e5L, 0x5a314ffcL, 0x996262d7L, 0xd85379ceL, 0x174fe149L, 0x567efa50L, 0x952dd77bL, 0xd41ccc62L, 0x138a8d2dL, 0x52bb9634L, 0x91e8bb1fL, 0xd0d9a006L, 0xecf37e5eL, 0xadc26547L, 0x6e91486cL, 0x2fa05375L, 0xe836123aL, 0xa9070923L, 0x6a542408L, 0x2b653f11L, 0xe479a796L, 0xa548bc8fL, 0x661b91a4L, 0x272a8abdL, 0xe0bccbf2L, 0xa18dd0ebL, 0x62defdc0L, 0x23efe6d9L, 0xbde1bc14L, 0xfcd0a70dL, 0x3f838a26L, 0x7eb2913fL, 0xb924d070L, 0xf815cb69L, 0x3b46e642L, 0x7a77fd5bL, 0xb56b65dcL, 0xf45a7ec5L, 0x370953eeL, 0x763848f7L, 0xb1ae09b8L, 0xf09f12a1L, 0x33cc3f8aL, 0x72fd2493L , 0x00000000L, 0x376ac201L, 0x6ed48403L, 0x59be4602L, 0xdca80907L, 0xebc2cb06L, 0xb27c8d04L, 0x85164f05L, 0xb851130eL, 0x8f3bd10fL, 0xd685970dL, 0xe1ef550cL, 0x64f91a09L, 0x5393d808L, 0x0a2d9e0aL, 0x3d475c0bL, 0x70a3261cL, 0x47c9e41dL, 0x1e77a21fL, 0x291d601eL, 0xac0b2f1bL, 0x9b61ed1aL, 0xc2dfab18L, 0xf5b56919L, 0xc8f23512L, 0xff98f713L, 0xa626b111L, 0x914c7310L, 0x145a3c15L, 0x2330fe14L, 0x7a8eb816L, 0x4de47a17L, 0xe0464d38L, 0xd72c8f39L, 0x8e92c93bL, 0xb9f80b3aL, 0x3cee443fL, 0x0b84863eL, 0x523ac03cL, 0x6550023dL, 0x58175e36L, 0x6f7d9c37L, 0x36c3da35L, 0x01a91834L, 0x84bf5731L, 0xb3d59530L, 0xea6bd332L, 0xdd011133L, 0x90e56b24L, 0xa78fa925L, 0xfe31ef27L, 0xc95b2d26L, 0x4c4d6223L, 0x7b27a022L, 0x2299e620L, 0x15f32421L, 0x28b4782aL, 0x1fdeba2bL, 0x4660fc29L, 0x710a3e28L, 0xf41c712dL, 0xc376b32cL, 0x9ac8f52eL, 0xada2372fL, 0xc08d9a70L, 0xf7e75871L, 0xae591e73L, 0x9933dc72L, 0x1c259377L, 0x2b4f5176L, 0x72f11774L, 0x459bd575L, 0x78dc897eL, 0x4fb64b7fL, 0x16080d7dL, 0x2162cf7cL, 0xa4748079L, 0x931e4278L, 0xcaa0047aL, 0xfdcac67bL, 0xb02ebc6cL, 0x87447e6dL, 0xdefa386fL, 0xe990fa6eL, 0x6c86b56bL, 0x5bec776aL, 0x02523168L, 0x3538f369L, 0x087faf62L, 0x3f156d63L, 0x66ab2b61L, 0x51c1e960L, 0xd4d7a665L, 0xe3bd6464L, 0xba032266L, 0x8d69e067L, 0x20cbd748L, 0x17a11549L, 0x4e1f534bL, 0x7975914aL, 0xfc63de4fL, 0xcb091c4eL, 0x92b75a4cL, 0xa5dd984dL, 0x989ac446L, 0xaff00647L, 0xf64e4045L, 0xc1248244L, 0x4432cd41L, 0x73580f40L, 0x2ae64942L, 0x1d8c8b43L, 0x5068f154L, 0x67023355L, 0x3ebc7557L, 0x09d6b756L, 0x8cc0f853L, 0xbbaa3a52L, 0xe2147c50L, 0xd57ebe51L, 0xe839e25aL, 0xdf53205bL, 0x86ed6659L, 0xb187a458L, 0x3491eb5dL, 0x03fb295cL, 0x5a456f5eL, 0x6d2fad5fL, 0x801b35e1L, 0xb771f7e0L, 0xeecfb1e2L, 0xd9a573e3L, 0x5cb33ce6L, 0x6bd9fee7L, 0x3267b8e5L, 0x050d7ae4L, 0x384a26efL, 0x0f20e4eeL, 0x569ea2ecL, 0x61f460edL, 0xe4e22fe8L, 0xd388ede9L, 0x8a36abebL, 0xbd5c69eaL, 0xf0b813fdL, 0xc7d2d1fcL, 0x9e6c97feL, 0xa90655ffL, 0x2c101afaL, 0x1b7ad8fbL, 0x42c49ef9L, 0x75ae5cf8L, 0x48e900f3L, 0x7f83c2f2L, 0x263d84f0L, 0x115746f1L, 0x944109f4L, 0xa32bcbf5L, 0xfa958df7L, 0xcdff4ff6L, 0x605d78d9L, 0x5737bad8L, 0x0e89fcdaL, 0x39e33edbL, 0xbcf571deL, 0x8b9fb3dfL, 0xd221f5ddL, 0xe54b37dcL, 0xd80c6bd7L, 0xef66a9d6L, 0xb6d8efd4L, 0x81b22dd5L, 0x04a462d0L, 0x33cea0d1L, 0x6a70e6d3L, 0x5d1a24d2L, 0x10fe5ec5L, 0x27949cc4L, 0x7e2adac6L, 0x494018c7L, 0xcc5657c2L, 0xfb3c95c3L, 0xa282d3c1L, 0x95e811c0L, 0xa8af4dcbL, 0x9fc58fcaL, 0xc67bc9c8L, 0xf1110bc9L, 0x740744ccL, 0x436d86cdL, 0x1ad3c0cfL, 0x2db902ceL, 0x4096af91L, 0x77fc6d90L, 0x2e422b92L, 0x1928e993L, 0x9c3ea696L, 0xab546497L, 0xf2ea2295L, 0xc580e094L, 0xf8c7bc9fL, 0xcfad7e9eL, 0x9613389cL, 0xa179fa9dL, 0x246fb598L, 0x13057799L, 0x4abb319bL, 0x7dd1f39aL, 0x3035898dL, 0x075f4b8cL, 0x5ee10d8eL, 0x698bcf8fL, 0xec9d808aL, 0xdbf7428bL, 0x82490489L, 0xb523c688L, 0x88649a83L, 0xbf0e5882L, 0xe6b01e80L, 0xd1dadc81L, 0x54cc9384L, 0x63a65185L, 0x3a181787L, 0x0d72d586L, 0xa0d0e2a9L, 0x97ba20a8L, 0xce0466aaL, 0xf96ea4abL, 0x7c78ebaeL, 0x4b1229afL, 0x12ac6fadL, 0x25c6adacL, 0x1881f1a7L, 0x2feb33a6L, 0x765575a4L, 0x413fb7a5L, 0xc429f8a0L, 0xf3433aa1L, 0xaafd7ca3L, 0x9d97bea2L, 0xd073c4b5L, 0xe71906b4L, 0xbea740b6L, 0x89cd82b7L, 0x0cdbcdb2L, 0x3bb10fb3L, 0x620f49b1L, 0x55658bb0L, 0x6822d7bbL, 0x5f4815baL, 0x06f653b8L, 0x319c91b9L, 0xb48adebcL, 0x83e01cbdL, 0xda5e5abfL, 0xed3498beL , 0x00000000L, 0x6567bcb8L, 0x8bc809aaL, 0xeeafb512L, 0x5797628fL, 0x32f0de37L, 0xdc5f6b25L, 0xb938d79dL, 0xef28b4c5L, 0x8a4f087dL, 0x64e0bd6fL, 0x018701d7L, 0xb8bfd64aL, 0xddd86af2L, 0x3377dfe0L, 0x56106358L, 0x9f571950L, 0xfa30a5e8L, 0x149f10faL, 0x71f8ac42L, 0xc8c07bdfL, 0xada7c767L, 0x43087275L, 0x266fcecdL, 0x707fad95L, 0x1518112dL, 0xfbb7a43fL, 0x9ed01887L, 0x27e8cf1aL, 0x428f73a2L, 0xac20c6b0L, 0xc9477a08L, 0x3eaf32a0L, 0x5bc88e18L, 0xb5673b0aL, 0xd00087b2L, 0x6938502fL, 0x0c5fec97L, 0xe2f05985L, 0x8797e53dL, 0xd1878665L, 0xb4e03addL, 0x5a4f8fcfL, 0x3f283377L, 0x8610e4eaL, 0xe3775852L, 0x0dd8ed40L, 0x68bf51f8L, 0xa1f82bf0L, 0xc49f9748L, 0x2a30225aL, 0x4f579ee2L, 0xf66f497fL, 0x9308f5c7L, 0x7da740d5L, 0x18c0fc6dL, 0x4ed09f35L, 0x2bb7238dL, 0xc518969fL, 0xa07f2a27L, 0x1947fdbaL, 0x7c204102L, 0x928ff410L, 0xf7e848a8L, 0x3d58149bL, 0x583fa823L, 0xb6901d31L, 0xd3f7a189L, 0x6acf7614L, 0x0fa8caacL, 0xe1077fbeL, 0x8460c306L, 0xd270a05eL, 0xb7171ce6L, 0x59b8a9f4L, 0x3cdf154cL, 0x85e7c2d1L, 0xe0807e69L, 0x0e2fcb7bL, 0x6b4877c3L, 0xa20f0dcbL, 0xc768b173L, 0x29c70461L, 0x4ca0b8d9L, 0xf5986f44L, 0x90ffd3fcL, 0x7e5066eeL, 0x1b37da56L, 0x4d27b90eL, 0x284005b6L, 0xc6efb0a4L, 0xa3880c1cL, 0x1ab0db81L, 0x7fd76739L, 0x9178d22bL, 0xf41f6e93L, 0x03f7263bL, 0x66909a83L, 0x883f2f91L, 0xed589329L, 0x546044b4L, 0x3107f80cL, 0xdfa84d1eL, 0xbacff1a6L, 0xecdf92feL, 0x89b82e46L, 0x67179b54L, 0x027027ecL, 0xbb48f071L, 0xde2f4cc9L, 0x3080f9dbL, 0x55e74563L, 0x9ca03f6bL, 0xf9c783d3L, 0x176836c1L, 0x720f8a79L, 0xcb375de4L, 0xae50e15cL, 0x40ff544eL, 0x2598e8f6L, 0x73888baeL, 0x16ef3716L, 0xf8408204L, 0x9d273ebcL, 0x241fe921L, 0x41785599L, 0xafd7e08bL, 0xcab05c33L, 0x3bb659edL, 0x5ed1e555L, 0xb07e5047L, 0xd519ecffL, 0x6c213b62L, 0x094687daL, 0xe7e932c8L, 0x828e8e70L, 0xd49eed28L, 0xb1f95190L, 0x5f56e482L, 0x3a31583aL, 0x83098fa7L, 0xe66e331fL, 0x08c1860dL, 0x6da63ab5L, 0xa4e140bdL, 0xc186fc05L, 0x2f294917L, 0x4a4ef5afL, 0xf3762232L, 0x96119e8aL, 0x78be2b98L, 0x1dd99720L, 0x4bc9f478L, 0x2eae48c0L, 0xc001fdd2L, 0xa566416aL, 0x1c5e96f7L, 0x79392a4fL, 0x97969f5dL, 0xf2f123e5L, 0x05196b4dL, 0x607ed7f5L, 0x8ed162e7L, 0xebb6de5fL, 0x528e09c2L, 0x37e9b57aL, 0xd9460068L, 0xbc21bcd0L, 0xea31df88L, 0x8f566330L, 0x61f9d622L, 0x049e6a9aL, 0xbda6bd07L, 0xd8c101bfL, 0x366eb4adL, 0x53090815L, 0x9a4e721dL, 0xff29cea5L, 0x11867bb7L, 0x74e1c70fL, 0xcdd91092L, 0xa8beac2aL, 0x46111938L, 0x2376a580L, 0x7566c6d8L, 0x10017a60L, 0xfeaecf72L, 0x9bc973caL, 0x22f1a457L, 0x479618efL, 0xa939adfdL, 0xcc5e1145L, 0x06ee4d76L, 0x6389f1ceL, 0x8d2644dcL, 0xe841f864L, 0x51792ff9L, 0x341e9341L, 0xdab12653L, 0xbfd69aebL, 0xe9c6f9b3L, 0x8ca1450bL, 0x620ef019L, 0x07694ca1L, 0xbe519b3cL, 0xdb362784L, 0x35999296L, 0x50fe2e2eL, 0x99b95426L, 0xfcdee89eL, 0x12715d8cL, 0x7716e134L, 0xce2e36a9L, 0xab498a11L, 0x45e63f03L, 0x208183bbL, 0x7691e0e3L, 0x13f65c5bL, 0xfd59e949L, 0x983e55f1L, 0x2106826cL, 0x44613ed4L, 0xaace8bc6L, 0xcfa9377eL, 0x38417fd6L, 0x5d26c36eL, 0xb389767cL, 0xd6eecac4L, 0x6fd61d59L, 0x0ab1a1e1L, 0xe41e14f3L, 0x8179a84bL, 0xd769cb13L, 0xb20e77abL, 0x5ca1c2b9L, 0x39c67e01L, 0x80fea99cL, 0xe5991524L, 0x0b36a036L, 0x6e511c8eL, 0xa7166686L, 0xc271da3eL, 0x2cde6f2cL, 0x49b9d394L, 0xf0810409L, 0x95e6b8b1L, 0x7b490da3L, 0x1e2eb11bL, 0x483ed243L, 0x2d596efbL, 0xc3f6dbe9L, 0xa6916751L, 0x1fa9b0ccL, 0x7ace0c74L, 0x9461b966L, 0xf10605deL # endif /* IZ_CRCOPTIM_UNFOLDTBL */ # else /* !IZ_CRC_BE_OPTIMIZ */ 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L, 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L, 0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L, 0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL, 0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L, 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L, 0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L, 0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL, 0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L, 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL, 0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L, 0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L, 0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L, 0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL, 0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL, 0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L, 0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL, 0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L, 0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L, 0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L, 0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL, 0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L, 0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L, 0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL, 0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L, 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L, 0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L, 0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L, 0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L, 0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL, 0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL, 0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L, 0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L, 0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL, 0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL, 0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L, 0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL, 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L, 0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL, 0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L, 0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL, 0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L, 0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L, 0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL, 0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L, 0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L, 0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L, 0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L, 0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L, 0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L, 0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL, 0x2d02ef8dL # ifdef IZ_CRCOPTIM_UNFOLDTBL , 0x00000000L, 0x191b3141L, 0x32366282L, 0x2b2d53c3L, 0x646cc504L, 0x7d77f445L, 0x565aa786L, 0x4f4196c7L, 0xc8d98a08L, 0xd1c2bb49L, 0xfaefe88aL, 0xe3f4d9cbL, 0xacb54f0cL, 0xb5ae7e4dL, 0x9e832d8eL, 0x87981ccfL, 0x4ac21251L, 0x53d92310L, 0x78f470d3L, 0x61ef4192L, 0x2eaed755L, 0x37b5e614L, 0x1c98b5d7L, 0x05838496L, 0x821b9859L, 0x9b00a918L, 0xb02dfadbL, 0xa936cb9aL, 0xe6775d5dL, 0xff6c6c1cL, 0xd4413fdfL, 0xcd5a0e9eL, 0x958424a2L, 0x8c9f15e3L, 0xa7b24620L, 0xbea97761L, 0xf1e8e1a6L, 0xe8f3d0e7L, 0xc3de8324L, 0xdac5b265L, 0x5d5daeaaL, 0x44469febL, 0x6f6bcc28L, 0x7670fd69L, 0x39316baeL, 0x202a5aefL, 0x0b07092cL, 0x121c386dL, 0xdf4636f3L, 0xc65d07b2L, 0xed705471L, 0xf46b6530L, 0xbb2af3f7L, 0xa231c2b6L, 0x891c9175L, 0x9007a034L, 0x179fbcfbL, 0x0e848dbaL, 0x25a9de79L, 0x3cb2ef38L, 0x73f379ffL, 0x6ae848beL, 0x41c51b7dL, 0x58de2a3cL, 0xf0794f05L, 0xe9627e44L, 0xc24f2d87L, 0xdb541cc6L, 0x94158a01L, 0x8d0ebb40L, 0xa623e883L, 0xbf38d9c2L, 0x38a0c50dL, 0x21bbf44cL, 0x0a96a78fL, 0x138d96ceL, 0x5ccc0009L, 0x45d73148L, 0x6efa628bL, 0x77e153caL, 0xbabb5d54L, 0xa3a06c15L, 0x888d3fd6L, 0x91960e97L, 0xded79850L, 0xc7cca911L, 0xece1fad2L, 0xf5facb93L, 0x7262d75cL, 0x6b79e61dL, 0x4054b5deL, 0x594f849fL, 0x160e1258L, 0x0f152319L, 0x243870daL, 0x3d23419bL, 0x65fd6ba7L, 0x7ce65ae6L, 0x57cb0925L, 0x4ed03864L, 0x0191aea3L, 0x188a9fe2L, 0x33a7cc21L, 0x2abcfd60L, 0xad24e1afL, 0xb43fd0eeL, 0x9f12832dL, 0x8609b26cL, 0xc94824abL, 0xd05315eaL, 0xfb7e4629L, 0xe2657768L, 0x2f3f79f6L, 0x362448b7L, 0x1d091b74L, 0x04122a35L, 0x4b53bcf2L, 0x52488db3L, 0x7965de70L, 0x607eef31L, 0xe7e6f3feL, 0xfefdc2bfL, 0xd5d0917cL, 0xcccba03dL, 0x838a36faL, 0x9a9107bbL, 0xb1bc5478L, 0xa8a76539L, 0x3b83984bL, 0x2298a90aL, 0x09b5fac9L, 0x10aecb88L, 0x5fef5d4fL, 0x46f46c0eL, 0x6dd93fcdL, 0x74c20e8cL, 0xf35a1243L, 0xea412302L, 0xc16c70c1L, 0xd8774180L, 0x9736d747L, 0x8e2de606L, 0xa500b5c5L, 0xbc1b8484L, 0x71418a1aL, 0x685abb5bL, 0x4377e898L, 0x5a6cd9d9L, 0x152d4f1eL, 0x0c367e5fL, 0x271b2d9cL, 0x3e001cddL, 0xb9980012L, 0xa0833153L, 0x8bae6290L, 0x92b553d1L, 0xddf4c516L, 0xc4eff457L, 0xefc2a794L, 0xf6d996d5L, 0xae07bce9L, 0xb71c8da8L, 0x9c31de6bL, 0x852aef2aL, 0xca6b79edL, 0xd37048acL, 0xf85d1b6fL, 0xe1462a2eL, 0x66de36e1L, 0x7fc507a0L, 0x54e85463L, 0x4df36522L, 0x02b2f3e5L, 0x1ba9c2a4L, 0x30849167L, 0x299fa026L, 0xe4c5aeb8L, 0xfdde9ff9L, 0xd6f3cc3aL, 0xcfe8fd7bL, 0x80a96bbcL, 0x99b25afdL, 0xb29f093eL, 0xab84387fL, 0x2c1c24b0L, 0x350715f1L, 0x1e2a4632L, 0x07317773L, 0x4870e1b4L, 0x516bd0f5L, 0x7a468336L, 0x635db277L, 0xcbfad74eL, 0xd2e1e60fL, 0xf9ccb5ccL, 0xe0d7848dL, 0xaf96124aL, 0xb68d230bL, 0x9da070c8L, 0x84bb4189L, 0x03235d46L, 0x1a386c07L, 0x31153fc4L, 0x280e0e85L, 0x674f9842L, 0x7e54a903L, 0x5579fac0L, 0x4c62cb81L, 0x8138c51fL, 0x9823f45eL, 0xb30ea79dL, 0xaa1596dcL, 0xe554001bL, 0xfc4f315aL, 0xd7626299L, 0xce7953d8L, 0x49e14f17L, 0x50fa7e56L, 0x7bd72d95L, 0x62cc1cd4L, 0x2d8d8a13L, 0x3496bb52L, 0x1fbbe891L, 0x06a0d9d0L, 0x5e7ef3ecL, 0x4765c2adL, 0x6c48916eL, 0x7553a02fL, 0x3a1236e8L, 0x230907a9L, 0x0824546aL, 0x113f652bL, 0x96a779e4L, 0x8fbc48a5L, 0xa4911b66L, 0xbd8a2a27L, 0xf2cbbce0L, 0xebd08da1L, 0xc0fdde62L, 0xd9e6ef23L, 0x14bce1bdL, 0x0da7d0fcL, 0x268a833fL, 0x3f91b27eL, 0x70d024b9L, 0x69cb15f8L, 0x42e6463bL, 0x5bfd777aL, 0xdc656bb5L, 0xc57e5af4L, 0xee530937L, 0xf7483876L, 0xb809aeb1L, 0xa1129ff0L, 0x8a3fcc33L, 0x9324fd72L , 0x00000000L, 0x01c26a37L, 0x0384d46eL, 0x0246be59L, 0x0709a8dcL, 0x06cbc2ebL, 0x048d7cb2L, 0x054f1685L, 0x0e1351b8L, 0x0fd13b8fL, 0x0d9785d6L, 0x0c55efe1L, 0x091af964L, 0x08d89353L, 0x0a9e2d0aL, 0x0b5c473dL, 0x1c26a370L, 0x1de4c947L, 0x1fa2771eL, 0x1e601d29L, 0x1b2f0bacL, 0x1aed619bL, 0x18abdfc2L, 0x1969b5f5L, 0x1235f2c8L, 0x13f798ffL, 0x11b126a6L, 0x10734c91L, 0x153c5a14L, 0x14fe3023L, 0x16b88e7aL, 0x177ae44dL, 0x384d46e0L, 0x398f2cd7L, 0x3bc9928eL, 0x3a0bf8b9L, 0x3f44ee3cL, 0x3e86840bL, 0x3cc03a52L, 0x3d025065L, 0x365e1758L, 0x379c7d6fL, 0x35dac336L, 0x3418a901L, 0x3157bf84L, 0x3095d5b3L, 0x32d36beaL, 0x331101ddL, 0x246be590L, 0x25a98fa7L, 0x27ef31feL, 0x262d5bc9L, 0x23624d4cL, 0x22a0277bL, 0x20e69922L, 0x2124f315L, 0x2a78b428L, 0x2bbade1fL, 0x29fc6046L, 0x283e0a71L, 0x2d711cf4L, 0x2cb376c3L, 0x2ef5c89aL, 0x2f37a2adL, 0x709a8dc0L, 0x7158e7f7L, 0x731e59aeL, 0x72dc3399L, 0x7793251cL, 0x76514f2bL, 0x7417f172L, 0x75d59b45L, 0x7e89dc78L, 0x7f4bb64fL, 0x7d0d0816L, 0x7ccf6221L, 0x798074a4L, 0x78421e93L, 0x7a04a0caL, 0x7bc6cafdL, 0x6cbc2eb0L, 0x6d7e4487L, 0x6f38fadeL, 0x6efa90e9L, 0x6bb5866cL, 0x6a77ec5bL, 0x68315202L, 0x69f33835L, 0x62af7f08L, 0x636d153fL, 0x612bab66L, 0x60e9c151L, 0x65a6d7d4L, 0x6464bde3L, 0x662203baL, 0x67e0698dL, 0x48d7cb20L, 0x4915a117L, 0x4b531f4eL, 0x4a917579L, 0x4fde63fcL, 0x4e1c09cbL, 0x4c5ab792L, 0x4d98dda5L, 0x46c49a98L, 0x4706f0afL, 0x45404ef6L, 0x448224c1L, 0x41cd3244L, 0x400f5873L, 0x4249e62aL, 0x438b8c1dL, 0x54f16850L, 0x55330267L, 0x5775bc3eL, 0x56b7d609L, 0x53f8c08cL, 0x523aaabbL, 0x507c14e2L, 0x51be7ed5L, 0x5ae239e8L, 0x5b2053dfL, 0x5966ed86L, 0x58a487b1L, 0x5deb9134L, 0x5c29fb03L, 0x5e6f455aL, 0x5fad2f6dL, 0xe1351b80L, 0xe0f771b7L, 0xe2b1cfeeL, 0xe373a5d9L, 0xe63cb35cL, 0xe7fed96bL, 0xe5b86732L, 0xe47a0d05L, 0xef264a38L, 0xeee4200fL, 0xeca29e56L, 0xed60f461L, 0xe82fe2e4L, 0xe9ed88d3L, 0xebab368aL, 0xea695cbdL, 0xfd13b8f0L, 0xfcd1d2c7L, 0xfe976c9eL, 0xff5506a9L, 0xfa1a102cL, 0xfbd87a1bL, 0xf99ec442L, 0xf85cae75L, 0xf300e948L, 0xf2c2837fL, 0xf0843d26L, 0xf1465711L, 0xf4094194L, 0xf5cb2ba3L, 0xf78d95faL, 0xf64fffcdL, 0xd9785d60L, 0xd8ba3757L, 0xdafc890eL, 0xdb3ee339L, 0xde71f5bcL, 0xdfb39f8bL, 0xddf521d2L, 0xdc374be5L, 0xd76b0cd8L, 0xd6a966efL, 0xd4efd8b6L, 0xd52db281L, 0xd062a404L, 0xd1a0ce33L, 0xd3e6706aL, 0xd2241a5dL, 0xc55efe10L, 0xc49c9427L, 0xc6da2a7eL, 0xc7184049L, 0xc25756ccL, 0xc3953cfbL, 0xc1d382a2L, 0xc011e895L, 0xcb4dafa8L, 0xca8fc59fL, 0xc8c97bc6L, 0xc90b11f1L, 0xcc440774L, 0xcd866d43L, 0xcfc0d31aL, 0xce02b92dL, 0x91af9640L, 0x906dfc77L, 0x922b422eL, 0x93e92819L, 0x96a63e9cL, 0x976454abL, 0x9522eaf2L, 0x94e080c5L, 0x9fbcc7f8L, 0x9e7eadcfL, 0x9c381396L, 0x9dfa79a1L, 0x98b56f24L, 0x99770513L, 0x9b31bb4aL, 0x9af3d17dL, 0x8d893530L, 0x8c4b5f07L, 0x8e0de15eL, 0x8fcf8b69L, 0x8a809decL, 0x8b42f7dbL, 0x89044982L, 0x88c623b5L, 0x839a6488L, 0x82580ebfL, 0x801eb0e6L, 0x81dcdad1L, 0x8493cc54L, 0x8551a663L, 0x8717183aL, 0x86d5720dL, 0xa9e2d0a0L, 0xa820ba97L, 0xaa6604ceL, 0xaba46ef9L, 0xaeeb787cL, 0xaf29124bL, 0xad6fac12L, 0xacadc625L, 0xa7f18118L, 0xa633eb2fL, 0xa4755576L, 0xa5b73f41L, 0xa0f829c4L, 0xa13a43f3L, 0xa37cfdaaL, 0xa2be979dL, 0xb5c473d0L, 0xb40619e7L, 0xb640a7beL, 0xb782cd89L, 0xb2cddb0cL, 0xb30fb13bL, 0xb1490f62L, 0xb08b6555L, 0xbbd72268L, 0xba15485fL, 0xb853f606L, 0xb9919c31L, 0xbcde8ab4L, 0xbd1ce083L, 0xbf5a5edaL, 0xbe9834edL , 0x00000000L, 0xb8bc6765L, 0xaa09c88bL, 0x12b5afeeL, 0x8f629757L, 0x37def032L, 0x256b5fdcL, 0x9dd738b9L, 0xc5b428efL, 0x7d084f8aL, 0x6fbde064L, 0xd7018701L, 0x4ad6bfb8L, 0xf26ad8ddL, 0xe0df7733L, 0x58631056L, 0x5019579fL, 0xe8a530faL, 0xfa109f14L, 0x42acf871L, 0xdf7bc0c8L, 0x67c7a7adL, 0x75720843L, 0xcdce6f26L, 0x95ad7f70L, 0x2d111815L, 0x3fa4b7fbL, 0x8718d09eL, 0x1acfe827L, 0xa2738f42L, 0xb0c620acL, 0x087a47c9L, 0xa032af3eL, 0x188ec85bL, 0x0a3b67b5L, 0xb28700d0L, 0x2f503869L, 0x97ec5f0cL, 0x8559f0e2L, 0x3de59787L, 0x658687d1L, 0xdd3ae0b4L, 0xcf8f4f5aL, 0x7733283fL, 0xeae41086L, 0x525877e3L, 0x40edd80dL, 0xf851bf68L, 0xf02bf8a1L, 0x48979fc4L, 0x5a22302aL, 0xe29e574fL, 0x7f496ff6L, 0xc7f50893L, 0xd540a77dL, 0x6dfcc018L, 0x359fd04eL, 0x8d23b72bL, 0x9f9618c5L, 0x272a7fa0L, 0xbafd4719L, 0x0241207cL, 0x10f48f92L, 0xa848e8f7L, 0x9b14583dL, 0x23a83f58L, 0x311d90b6L, 0x89a1f7d3L, 0x1476cf6aL, 0xaccaa80fL, 0xbe7f07e1L, 0x06c36084L, 0x5ea070d2L, 0xe61c17b7L, 0xf4a9b859L, 0x4c15df3cL, 0xd1c2e785L, 0x697e80e0L, 0x7bcb2f0eL, 0xc377486bL, 0xcb0d0fa2L, 0x73b168c7L, 0x6104c729L, 0xd9b8a04cL, 0x446f98f5L, 0xfcd3ff90L, 0xee66507eL, 0x56da371bL, 0x0eb9274dL, 0xb6054028L, 0xa4b0efc6L, 0x1c0c88a3L, 0x81dbb01aL, 0x3967d77fL, 0x2bd27891L, 0x936e1ff4L, 0x3b26f703L, 0x839a9066L, 0x912f3f88L, 0x299358edL, 0xb4446054L, 0x0cf80731L, 0x1e4da8dfL, 0xa6f1cfbaL, 0xfe92dfecL, 0x462eb889L, 0x549b1767L, 0xec277002L, 0x71f048bbL, 0xc94c2fdeL, 0xdbf98030L, 0x6345e755L, 0x6b3fa09cL, 0xd383c7f9L, 0xc1366817L, 0x798a0f72L, 0xe45d37cbL, 0x5ce150aeL, 0x4e54ff40L, 0xf6e89825L, 0xae8b8873L, 0x1637ef16L, 0x048240f8L, 0xbc3e279dL, 0x21e91f24L, 0x99557841L, 0x8be0d7afL, 0x335cb0caL, 0xed59b63bL, 0x55e5d15eL, 0x47507eb0L, 0xffec19d5L, 0x623b216cL, 0xda874609L, 0xc832e9e7L, 0x708e8e82L, 0x28ed9ed4L, 0x9051f9b1L, 0x82e4565fL, 0x3a58313aL, 0xa78f0983L, 0x1f336ee6L, 0x0d86c108L, 0xb53aa66dL, 0xbd40e1a4L, 0x05fc86c1L, 0x1749292fL, 0xaff54e4aL, 0x322276f3L, 0x8a9e1196L, 0x982bbe78L, 0x2097d91dL, 0x78f4c94bL, 0xc048ae2eL, 0xd2fd01c0L, 0x6a4166a5L, 0xf7965e1cL, 0x4f2a3979L, 0x5d9f9697L, 0xe523f1f2L, 0x4d6b1905L, 0xf5d77e60L, 0xe762d18eL, 0x5fdeb6ebL, 0xc2098e52L, 0x7ab5e937L, 0x680046d9L, 0xd0bc21bcL, 0x88df31eaL, 0x3063568fL, 0x22d6f961L, 0x9a6a9e04L, 0x07bda6bdL, 0xbf01c1d8L, 0xadb46e36L, 0x15080953L, 0x1d724e9aL, 0xa5ce29ffL, 0xb77b8611L, 0x0fc7e174L, 0x9210d9cdL, 0x2aacbea8L, 0x38191146L, 0x80a57623L, 0xd8c66675L, 0x607a0110L, 0x72cfaefeL, 0xca73c99bL, 0x57a4f122L, 0xef189647L, 0xfdad39a9L, 0x45115eccL, 0x764dee06L, 0xcef18963L, 0xdc44268dL, 0x64f841e8L, 0xf92f7951L, 0x41931e34L, 0x5326b1daL, 0xeb9ad6bfL, 0xb3f9c6e9L, 0x0b45a18cL, 0x19f00e62L, 0xa14c6907L, 0x3c9b51beL, 0x842736dbL, 0x96929935L, 0x2e2efe50L, 0x2654b999L, 0x9ee8defcL, 0x8c5d7112L, 0x34e11677L, 0xa9362eceL, 0x118a49abL, 0x033fe645L, 0xbb838120L, 0xe3e09176L, 0x5b5cf613L, 0x49e959fdL, 0xf1553e98L, 0x6c820621L, 0xd43e6144L, 0xc68bceaaL, 0x7e37a9cfL, 0xd67f4138L, 0x6ec3265dL, 0x7c7689b3L, 0xc4caeed6L, 0x591dd66fL, 0xe1a1b10aL, 0xf3141ee4L, 0x4ba87981L, 0x13cb69d7L, 0xab770eb2L, 0xb9c2a15cL, 0x017ec639L, 0x9ca9fe80L, 0x241599e5L, 0x36a0360bL, 0x8e1c516eL, 0x866616a7L, 0x3eda71c2L, 0x2c6fde2cL, 0x94d3b949L, 0x090481f0L, 0xb1b8e695L, 0xa30d497bL, 0x1bb12e1eL, 0x43d23e48L, 0xfb6e592dL, 0xe9dbf6c3L, 0x516791a6L, 0xccb0a91fL, 0x740cce7aL, 0x66b96194L, 0xde0506f1L # endif /* IZ_CRCOPTIM_UNFOLDTBL */ # endif /* ? IZ_CRC_BE_OPTIMIZ */ }; #endif /* ?DYNAMIC_CRC_TABLE */ /* use "OF((void))" here to work around a Borland TC++ 1.0 problem */ #ifdef USE_ZLIB ZCONST uLongf *get_crc_table OF((void)) #else ZCONST ulg near *get_crc_table OF((void)) #endif { #ifdef DYNAMIC_CRC_TABLE if (CRC_TABLE_IS_EMPTY) make_crc_table(); #endif #ifdef USE_ZLIB return (ZCONST uLongf *)crc_table; #else return crc_table; #endif } #ifdef DYNALLOC_CRCTAB void free_crc_table() { if (!CRC_TABLE_IS_EMPTY) { nearfree((ulg near *)crc_table); MARK_CRCTAB_EMPTY; } } #endif #ifndef USE_ZLIB #ifndef CRC_TABLE_ONLY #ifndef ASM_CRC #define DO1(crc, buf) crc = CRC32(crc, *buf++, crc_32_tab) #define DO2(crc, buf) DO1(crc, buf); DO1(crc, buf) #define DO4(crc, buf) DO2(crc, buf); DO2(crc, buf) #define DO8(crc, buf) DO4(crc, buf); DO4(crc, buf) #if (defined(IZ_CRC_BE_OPTIMIZ) || defined(IZ_CRC_LE_OPTIMIZ)) # ifdef IZ_CRCOPTIM_UNFOLDTBL # ifdef IZ_CRC_BE_OPTIMIZ # define DO_OPT4(c, buf4) c ^= *(buf4)++; \ c = crc_32_tab[c & 0xff] ^ crc_32_tab[256+((c>>8) & 0xff)] ^ \ crc_32_tab[2*256+((c>>16) & 0xff)] ^ crc_32_tab[3*256+(c>>24)] # else /* !IZ_CRC_BE_OPTIMIZ */ # define DO_OPT4(c, buf4) c ^= *(buf4)++; \ c = crc_32_tab[3*256+(c & 0xff)] ^ crc_32_tab[2*256+((c>>8) & 0xff)] \ ^ crc_32_tab[256+((c>>16) & 0xff)] ^ crc_32_tab[c>>24] # endif /* ?IZ_CRC_BE_OPTIMIZ */ # else /* !IZ_CRCOPTIM_UNFOLDTBL */ # define DO_OPT4(c, buf4) c ^= *(buf4)++; \ c = CRC32UPD(c, crc_32_tab); \ c = CRC32UPD(c, crc_32_tab); \ c = CRC32UPD(c, crc_32_tab); \ c = CRC32UPD(c, crc_32_tab) # endif /* ?IZ_CRCOPTIM_UNFOLDTBL */ # define DO_OPT16(crc, buf4) DO_OPT4(crc, buf4); DO_OPT4(crc, buf4); \ DO_OPT4(crc, buf4); DO_OPT4(crc, buf4); #endif /* (IZ_CRC_BE_OPTIMIZ || IZ_CRC_LE_OPTIMIZ) */ /* ========================================================================= */ ulg crc32(crc, buf, len) ulg crc; /* crc shift register */ register ZCONST uch *buf; /* pointer to bytes to pump through */ extent len; /* number of bytes in buf[] */ /* Run a set of bytes through the crc shift register. If buf is a NULL pointer, then initialize the crc shift register contents instead. Return the current crc in either case. */ { register z_uint4 c; register ZCONST ulg near *crc_32_tab; if (buf == NULL) return 0L; crc_32_tab = get_crc_table(); c = (REV_BE((z_uint4)crc) ^ 0xffffffffL); #if (defined(IZ_CRC_BE_OPTIMIZ) || defined(IZ_CRC_LE_OPTIMIZ)) /* Align buf pointer to next DWORD boundary. */ while (len && ((ptrdiff_t)buf & 3)) { DO1(c, buf); len--; } { ZCONST z_uint4 *buf4 = (ZCONST z_uint4 *)buf; while (len >= 16) { DO_OPT16(c, buf4); len -= 16; } while (len >= 4) { DO_OPT4(c, buf4); len -= 4; } buf = (ZCONST uch *)buf4; } #else /* !(IZ_CRC_BE_OPTIMIZ || IZ_CRC_LE_OPTIMIZ) */ #ifndef NO_UNROLLED_LOOPS while (len >= 8) { DO8(c, buf); len -= 8; } #endif /* !NO_UNROLLED_LOOPS */ #endif /* ?(IZ_CRC_BE_OPTIMIZ || IZ_CRC_LE_OPTIMIZ) */ if (len) do { DO1(c, buf); } while (--len); return REV_BE(c) ^ 0xffffffffL; /* (instead of ~c for 64-bit machines) */ } #endif /* !ASM_CRC */ #endif /* !CRC_TABLE_ONLY */ #endif /* !USE_ZLIB */ #endif /* !USE_ZLIB || USE_OWN_CRCTAB */ Carla-2.4.2/data/windows/unzipfx-carla-control/crc32.h000066400000000000000000000033611420416754300225030ustar00rootroot00000000000000/* Copyright (c) 1990-2008 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2000-Apr-09 or later (the contents of which are also included in zip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /* crc32.h -- compute the CRC-32 of a data stream * Copyright (C) 1995 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ #ifndef __crc32_h #define __crc32_h /* identifies this source module */ /* This header should be read AFTER zip.h resp. unzip.h * (the latter with UNZIP_INTERNAL defined...). */ #ifndef OF # define OF(a) a #endif #ifndef ZCONST # define ZCONST const #endif #ifdef DYNALLOC_CRCTAB void free_crc_table OF((void)); #endif #ifndef USE_ZLIB ZCONST ulg near *get_crc_table OF((void)); #endif #if (defined(USE_ZLIB) || defined(CRC_TABLE_ONLY)) # ifdef IZ_CRC_BE_OPTIMIZ # undef IZ_CRC_BE_OPTIMIZ # endif #else /* !(USE_ZLIB || CRC_TABLE_ONLY) */ ulg crc32 OF((ulg crc, ZCONST uch *buf, extent len)); #endif /* ?(USE_ZLIB || CRC_TABLE_ONLY) */ #ifndef CRC_32_TAB # define CRC_32_TAB crc_32_tab #endif #ifdef CRC32 # undef CRC32 #endif #ifdef IZ_CRC_BE_OPTIMIZ # define CRC32UPD(c, crctab) (crctab[((c) >> 24)] ^ ((c) << 8)) # define CRC32(c, b, crctab) (crctab[(((int)(c) >> 24) ^ (b))] ^ ((c) << 8)) # define REV_BE(w) (((w)>>24)+(((w)>>8)&0xff00)+ \ (((w)&0xff00)<<8)+(((w)&0xff)<<24)) #else # define CRC32UPD(c, crctab) (crctab[((int)(c)) & 0xff] ^ ((c) >> 8)) # define CRC32(c, b, crctab) (crctab[((int)(c) ^ (b)) & 0xff] ^ ((c) >> 8)) # define REV_BE(w) w #endif #endif /* !__crc32_h */ Carla-2.4.2/data/windows/unzipfx-carla-control/crypt.c000066400000000000000000000533761420416754300227360ustar00rootroot00000000000000/* Copyright (c) 1990-2007 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2005-Feb-10 or later (the contents of which are also included in (un)zip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /* crypt.c (full version) by Info-ZIP. Last revised: [see crypt.h] The main encryption/decryption source code for Info-Zip software was originally written in Europe. To the best of our knowledge, it can be freely distributed in both source and object forms from any country, including the USA under License Exception TSU of the U.S. Export Administration Regulations (section 740.13(e)) of 6 June 2002. NOTE on copyright history: Previous versions of this source package (up to version 2.8) were not copyrighted and put in the public domain. If you cannot comply with the Info-Zip LICENSE, you may want to look for one of those public domain versions. */ /* This encryption code is a direct transcription of the algorithm from Roger Schlafly, described by Phil Katz in the file appnote.txt. This file (appnote.txt) is distributed with the PKZIP program (even in the version without encryption capabilities). */ #define ZCRYPT_INTERNAL #include "zip.h" #include "crypt.h" #include "ttyio.h" #if CRYPT #ifndef FALSE # define FALSE 0 #endif #ifdef ZIP /* For the encoding task used in Zip (and ZipCloak), we want to initialize the crypt algorithm with some reasonably unpredictable bytes, see the crypthead() function. The standard rand() library function is used to supply these `random' bytes, which in turn is initialized by a srand() call. The srand() function takes an "unsigned" (at least 16bit) seed value as argument to determine the starting point of the rand() pseudo-random number generator. This seed number is constructed as "Seed = Seed1 .XOR. Seed2" with Seed1 supplied by the current time (= "(unsigned)time()") and Seed2 as some (hopefully) nondeterministic bitmask. On many (most) systems, we use some "process specific" number, as the PID or something similar, but when nothing unpredictable is available, a fixed number may be sufficient. NOTE: 1.) This implementation requires the availability of the following standard UNIX C runtime library functions: time(), rand(), srand(). On systems where some of them are missing, the environment that incorporates the crypt routines must supply suitable replacement functions. 2.) It is a very bad idea to use a second call to time() to set the "Seed2" number! In this case, both "Seed1" and "Seed2" would be (almost) identical, resulting in a (mostly) "zero" constant seed number passed to srand(). The implementation environment defined in the "zip.h" header should supply a reasonable definition for ZCR_SEED2 (an unsigned number; for most implementations of rand() and srand(), only the lower 16 bits are significant!). An example that works on many systems would be "#define ZCR_SEED2 (unsigned)getpid()". The default definition for ZCR_SEED2 supplied below should be regarded as a fallback to allow successful compilation in "beta state" environments. */ # include /* time() function supplies first part of crypt seed */ /* "last resort" source for second part of crypt seed pattern */ # ifndef ZCR_SEED2 # define ZCR_SEED2 (unsigned)3141592654L /* use PI as default pattern */ # endif # ifdef GLOBAL /* used in Amiga system headers, maybe others too */ # undef GLOBAL # endif # define GLOBAL(g) g #else /* !ZIP */ # define GLOBAL(g) G.g #endif /* ?ZIP */ #ifdef UNZIP /* char *key = (char *)NULL; moved to globals.h */ # ifndef FUNZIP local int testp OF((__GPRO__ ZCONST uch *h)); local int testkey OF((__GPRO__ ZCONST uch *h, ZCONST char *key)); # endif #endif /* UNZIP */ #ifndef UNZIP /* moved to globals.h for UnZip */ # ifndef Z_UINT4_DEFINED # if !defined(NO_LIMITS_H) # if (defined(UINT_MAX) && (UINT_MAX == 0xffffffffUL)) typedef unsigned int z_uint4; # define Z_UINT4_DEFINED # else # if (defined(ULONG_MAX) && (ULONG_MAX == 0xffffffffUL)) typedef unsigned long z_uint4; # define Z_UINT4_DEFINED # else # if (defined(USHRT_MAX) && (USHRT_MAX == 0xffffffffUL)) typedef unsigned short z_uint4; # define Z_UINT4_DEFINED # endif # endif # endif # endif /* !NO_LIMITS_H */ # endif /* !Z_UINT4_DEFINED */ # ifndef Z_UINT4_DEFINED typedef ulg z_uint4; # define Z_UINT4_DEFINED # endif local z_uint4 keys[3]; /* keys defining the pseudo-random sequence */ #endif /* !UNZIP */ #ifndef Trace # ifdef CRYPT_DEBUG # define Trace(x) fprintf x # else # define Trace(x) # endif #endif #include "crc32.h" #ifdef IZ_CRC_BE_OPTIMIZ local z_uint4 near crycrctab[256]; local z_uint4 near *cry_crctb_p = NULL; local z_uint4 near *crytab_init OF((__GPRO)); # define CRY_CRC_TAB cry_crctb_p # undef CRC32 # define CRC32(c, b, crctab) (crctab[((int)(c) ^ (b)) & 0xff] ^ ((c) >> 8)) #else # define CRY_CRC_TAB CRC_32_TAB #endif /* ?IZ_CRC_BE_OPTIMIZ */ /*********************************************************************** * Return the next byte in the pseudo-random sequence */ int decrypt_byte(__G) __GDEF { unsigned temp; /* POTENTIAL BUG: temp*(temp^1) may overflow in an * unpredictable manner on 16-bit systems; not a problem * with any known compiler so far, though */ temp = ((unsigned)GLOBAL(keys[2]) & 0xffff) | 2; return (int)(((temp * (temp ^ 1)) >> 8) & 0xff); } /*********************************************************************** * Update the encryption keys with the next byte of plain text */ int update_keys(__G__ c) __GDEF int c; /* byte of plain text */ { GLOBAL(keys[0]) = CRC32(GLOBAL(keys[0]), c, CRY_CRC_TAB); GLOBAL(keys[1]) = (GLOBAL(keys[1]) + (GLOBAL(keys[0]) & 0xff)) * 134775813L + 1; { register int keyshift = (int)(GLOBAL(keys[1]) >> 24); GLOBAL(keys[2]) = CRC32(GLOBAL(keys[2]), keyshift, CRY_CRC_TAB); } return c; } /*********************************************************************** * Initialize the encryption keys and the random header according to * the given password. */ void init_keys(__G__ passwd) __GDEF ZCONST char *passwd; /* password string with which to modify keys */ { #ifdef IZ_CRC_BE_OPTIMIZ if (cry_crctb_p == NULL) { cry_crctb_p = crytab_init(__G); } #endif GLOBAL(keys[0]) = 305419896L; GLOBAL(keys[1]) = 591751049L; GLOBAL(keys[2]) = 878082192L; while (*passwd != '\0') { update_keys(__G__ (int)*passwd); passwd++; } } /*********************************************************************** * Initialize the local copy of the table of precomputed crc32 values. * Whereas the public crc32-table is optimized for crc32 calculations * on arrays of bytes, the crypt code needs the crc32 values in an * byte-order-independent form as 32-bit unsigned numbers. On systems * with Big-Endian byte order using the optimized crc32 code, this * requires inverting the byte-order of the values in the * crypt-crc32-table. */ #ifdef IZ_CRC_BE_OPTIMIZ local z_uint4 near *crytab_init(__G) __GDEF { int i; for (i = 0; i < 256; i++) { crycrctab[i] = REV_BE(CRC_32_TAB[i]); } return crycrctab; } #endif #ifdef ZIP /*********************************************************************** * Write encryption header to file zfile using the password passwd * and the cyclic redundancy check crc. */ void crypthead(passwd, crc, zfile) ZCONST char *passwd; /* password string */ ulg crc; /* crc of file being encrypted */ FILE *zfile; /* where to write header */ { int n; /* index in random header */ int t; /* temporary */ int c; /* random byte */ uch header[RAND_HEAD_LEN]; /* random header */ static unsigned calls = 0; /* ensure different random header each time */ /* First generate RAND_HEAD_LEN-2 random bytes. We encrypt the * output of rand() to get less predictability, since rand() is * often poorly implemented. */ if (++calls == 1) { srand((unsigned)time(NULL) ^ ZCR_SEED2); } init_keys(passwd); for (n = 0; n < RAND_HEAD_LEN-2; n++) { c = (rand() >> 7) & 0xff; header[n] = (uch)zencode(c, t); } /* Encrypt random header (last two bytes is high word of crc) */ init_keys(passwd); for (n = 0; n < RAND_HEAD_LEN-2; n++) { header[n] = (uch)zencode(header[n], t); } header[RAND_HEAD_LEN-2] = (uch)zencode((int)(crc >> 16) & 0xff, t); header[RAND_HEAD_LEN-1] = (uch)zencode((int)(crc >> 24) & 0xff, t); fwrite(header, 1, RAND_HEAD_LEN, f); } #ifdef UTIL /*********************************************************************** * Encrypt the zip entry described by z from file source to file dest * using the password passwd. Return an error code in the ZE_ class. */ int zipcloak(z, source, dest, passwd) struct zlist far *z; /* zip entry to encrypt */ FILE *source, *dest; /* source and destination files */ ZCONST char *passwd; /* password string */ { int c; /* input byte */ int res; /* result code */ ulg n; /* holds offset and counts size */ ush flag; /* previous flags */ int t; /* temporary */ int ztemp; /* temporary storage for zencode value */ /* Set encrypted bit, clear extended local header bit and write local header to output file */ if ((n = (ulg)ftell(dest)) == (ulg)-1L) return ZE_TEMP; z->off = n; flag = z->flg; z->flg |= 1, z->flg &= ~8; z->lflg |= 1, z->lflg &= ~8; z->siz += RAND_HEAD_LEN; if ((res = putlocal(z, dest)) != ZE_OK) return res; /* Initialize keys with password and write random header */ crypthead(passwd, z->crc, dest); /* Skip local header in input file */ if (fseek(source, (long)((4 + LOCHEAD) + (ulg)z->nam + (ulg)z->ext), SEEK_CUR)) { return ferror(source) ? ZE_READ : ZE_EOF; } /* Encrypt data */ for (n = z->siz - RAND_HEAD_LEN; n; n--) { if ((c = getc(source)) == EOF) { return ferror(source) ? ZE_READ : ZE_EOF; } ztemp = zencode(c, t); putc(ztemp, dest); } /* Skip extended local header in input file if there is one */ if ((flag & 8) != 0 && fseek(source, 16L, SEEK_CUR)) { return ferror(source) ? ZE_READ : ZE_EOF; } if (fflush(dest) == EOF) return ZE_TEMP; /* Update number of bytes written to output file */ tempzn += (4 + LOCHEAD) + z->nam + z->ext + z->siz; return ZE_OK; } /*********************************************************************** * Decrypt the zip entry described by z from file source to file dest * using the password passwd. Return an error code in the ZE_ class. */ int zipbare(z, source, dest, passwd) struct zlist far *z; /* zip entry to encrypt */ FILE *source, *dest; /* source and destination files */ ZCONST char *passwd; /* password string */ { #ifdef ZIP10 int c0 /* byte preceding the last input byte */ #endif int c1; /* last input byte */ ulg offset; /* used for file offsets */ ulg size; /* size of input data */ int r; /* size of encryption header */ int res; /* return code */ ush flag; /* previous flags */ /* Save position and skip local header in input file */ if ((offset = (ulg)ftell(source)) == (ulg)-1L || fseek(source, (long)((4 + LOCHEAD) + (ulg)z->nam + (ulg)z->ext), SEEK_CUR)) { return ferror(source) ? ZE_READ : ZE_EOF; } /* Initialize keys with password */ init_keys(passwd); /* Decrypt encryption header, save last two bytes */ c1 = 0; for (r = RAND_HEAD_LEN; r; r--) { #ifdef ZIP10 c0 = c1; #endif if ((c1 = getc(source)) == EOF) { return ferror(source) ? ZE_READ : ZE_EOF; } Trace((stdout, " (%02x)", c1)); zdecode(c1); Trace((stdout, " %02x", c1)); } Trace((stdout, "\n")); /* If last two bytes of header don't match crc (or file time in the * case of an extended local header), back up and just copy. For * pkzip 2.0, the check has been reduced to one byte only. */ #ifdef ZIP10 if ((ush)(c0 | (c1<<8)) != (z->flg & 8 ? (ush) z->tim & 0xffff : (ush)(z->crc >> 16))) { #else if ((ush)c1 != (z->flg & 8 ? (ush) z->tim >> 8 : (ush)(z->crc >> 24))) { #endif if (fseek(source, offset, SEEK_SET)) { return ferror(source) ? ZE_READ : ZE_EOF; } if ((res = zipcopy(z, source, dest)) != ZE_OK) return res; return ZE_MISS; } /* Clear encrypted bit and local header bit, and write local header to output file */ if ((offset = (ulg)ftell(dest)) == (ulg)-1L) return ZE_TEMP; z->off = offset; flag = z->flg; z->flg &= ~9; z->lflg &= ~9; z->siz -= RAND_HEAD_LEN; if ((res = putlocal(z, dest)) != ZE_OK) return res; /* Decrypt data */ for (size = z->siz; size; size--) { if ((c1 = getc(source)) == EOF) { return ferror(source) ? ZE_READ : ZE_EOF; } zdecode(c1); putc(c1, dest); } /* Skip extended local header in input file if there is one */ if ((flag & 8) != 0 && fseek(source, 16L, SEEK_CUR)) { return ferror(source) ? ZE_READ : ZE_EOF; } if (fflush(dest) == EOF) return ZE_TEMP; /* Update number of bytes written to output file */ tempzn += (4 + LOCHEAD) + z->nam + z->ext + z->siz; return ZE_OK; } #else /* !UTIL */ /*********************************************************************** * If requested, encrypt the data in buf, and in any case call fwrite() * with the arguments to zfwrite(). Return what fwrite() returns. * * A bug has been found when encrypting large files. See trees.c * for details and the fix. */ unsigned zfwrite(buf, item_size, nb, f) zvoid *buf; /* data buffer */ extent item_size; /* size of each item in bytes */ extent nb; /* number of items */ FILE *f; /* file to write to */ { int t; /* temporary */ if (key != (char *)NULL) { /* key is the global password pointer */ ulg size; /* buffer size */ char *p = (char*)buf; /* steps through buffer */ /* Encrypt data in buffer */ for (size = item_size*(ulg)nb; size != 0; p++, size--) { *p = (char)zencode(*p, t); } } /* Write the buffer out */ return fwrite(buf, item_size, nb, f); } #endif /* ?UTIL */ #endif /* ZIP */ #if (defined(UNZIP) && !defined(FUNZIP)) /*********************************************************************** * Get the password and set up keys for current zipfile member. * Return PK_ class error. */ int decrypt(__G__ passwrd) __GDEF ZCONST char *passwrd; { ush b; int n, r; uch h[RAND_HEAD_LEN]; Trace((stdout, "\n[incnt = %d]: ", GLOBAL(incnt))); /* get header once (turn off "encrypted" flag temporarily so we don't * try to decrypt the same data twice) */ GLOBAL(pInfo->encrypted) = FALSE; defer_leftover_input(__G); for (n = 0; n < RAND_HEAD_LEN; n++) { b = NEXTBYTE; h[n] = (uch)b; Trace((stdout, " (%02x)", h[n])); } undefer_input(__G); GLOBAL(pInfo->encrypted) = TRUE; if (GLOBAL(newzip)) { /* this is first encrypted member in this zipfile */ GLOBAL(newzip) = FALSE; if (passwrd != (char *)NULL) { /* user gave password on command line */ if (!GLOBAL(key)) { if ((GLOBAL(key) = (char *)malloc(strlen(passwrd)+1)) == (char *)NULL) return PK_MEM2; strcpy(GLOBAL(key), passwrd); GLOBAL(nopwd) = TRUE; /* inhibit password prompting! */ } } else if (GLOBAL(key)) { /* get rid of previous zipfile's key */ free(GLOBAL(key)); GLOBAL(key) = (char *)NULL; } } /* if have key already, test it; else allocate memory for it */ if (GLOBAL(key)) { if (!testp(__G__ h)) return PK_COOL; /* existing password OK (else prompt for new) */ else if (GLOBAL(nopwd)) return PK_WARN; /* user indicated no more prompting */ } else if ((GLOBAL(key) = (char *)malloc(IZ_PWLEN+1)) == (char *)NULL) return PK_MEM2; /* try a few keys */ n = 0; do { r = (*G.decr_passwd)((zvoid *)&G, &n, GLOBAL(key), IZ_PWLEN+1, GLOBAL(zipfn), GLOBAL(filename)); if (r == IZ_PW_ERROR) { /* internal error in fetch of PW */ free (GLOBAL(key)); GLOBAL(key) = NULL; return PK_MEM2; } if (r != IZ_PW_ENTERED) { /* user replied "skip" or "skip all" */ *GLOBAL(key) = '\0'; /* We try the NIL password, ... */ n = 0; /* and cancel fetch for this item. */ } if (!testp(__G__ h)) return PK_COOL; if (r == IZ_PW_CANCELALL) /* User replied "Skip all" */ GLOBAL(nopwd) = TRUE; /* inhibit any further PW prompt! */ } while (n > 0); return PK_WARN; } /* end function decrypt() */ /*********************************************************************** * Test the password. Return -1 if bad, 0 if OK. */ local int testp(__G__ h) __GDEF ZCONST uch *h; { int r; char *key_translated; /* On systems with "obscure" native character coding (e.g., EBCDIC), * the first test translates the password to the "main standard" * character coding. */ #ifdef STR_TO_CP1 /* allocate buffer for translated password */ if ((key_translated = malloc(strlen(GLOBAL(key)) + 1)) == (char *)NULL) return -1; /* first try, test password translated "standard" charset */ r = testkey(__G__ h, STR_TO_CP1(key_translated, GLOBAL(key))); #else /* !STR_TO_CP1 */ /* first try, test password as supplied on the extractor's host */ r = testkey(__G__ h, GLOBAL(key)); #endif /* ?STR_TO_CP1 */ #ifdef STR_TO_CP2 if (r != 0) { #ifndef STR_TO_CP1 /* now prepare for second (and maybe third) test with translated pwd */ if ((key_translated = malloc(strlen(GLOBAL(key)) + 1)) == (char *)NULL) return -1; #endif /* second try, password translated to alternate ("standard") charset */ r = testkey(__G__ h, STR_TO_CP2(key_translated, GLOBAL(key))); #ifdef STR_TO_CP3 if (r != 0) /* third try, password translated to another "standard" charset */ r = testkey(__G__ h, STR_TO_CP3(key_translated, GLOBAL(key))); #endif #ifndef STR_TO_CP1 free(key_translated); #endif } #endif /* STR_TO_CP2 */ #ifdef STR_TO_CP1 free(key_translated); if (r != 0) { /* last resort, test password as supplied on the extractor's host */ r = testkey(__G__ h, GLOBAL(key)); } #endif /* STR_TO_CP1 */ return r; } /* end function testp() */ local int testkey(__G__ h, key) __GDEF ZCONST uch *h; /* decrypted header */ ZCONST char *key; /* decryption password to test */ { ush b; #ifdef ZIP10 ush c; #endif int n; uch *p; uch hh[RAND_HEAD_LEN]; /* decrypted header */ /* set keys and save the encrypted header */ init_keys(__G__ key); memcpy(hh, h, RAND_HEAD_LEN); /* check password */ for (n = 0; n < RAND_HEAD_LEN; n++) { zdecode(hh[n]); Trace((stdout, " %02x", hh[n])); } Trace((stdout, "\n lrec.crc= %08lx crec.crc= %08lx pInfo->ExtLocHdr= %s\n", GLOBAL(lrec.crc32), GLOBAL(pInfo->crc), GLOBAL(pInfo->ExtLocHdr) ? "true":"false")); Trace((stdout, " incnt = %d unzip offset into zipfile = %ld\n", GLOBAL(incnt), GLOBAL(cur_zipfile_bufstart)+(GLOBAL(inptr)-GLOBAL(inbuf)))); /* same test as in zipbare(): */ #ifdef ZIP10 /* check two bytes */ c = hh[RAND_HEAD_LEN-2], b = hh[RAND_HEAD_LEN-1]; Trace((stdout, " (c | (b<<8)) = %04x (crc >> 16) = %04x lrec.time = %04x\n", (ush)(c | (b<<8)), (ush)(GLOBAL(lrec.crc32) >> 16), ((ush)GLOBAL(lrec.last_mod_dos_datetime) & 0xffff)))); if ((ush)(c | (b<<8)) != (GLOBAL(pInfo->ExtLocHdr) ? ((ush)GLOBAL(lrec.last_mod_dos_datetime) & 0xffff) : (ush)(GLOBAL(lrec.crc32) >> 16))) return -1; /* bad */ #else b = hh[RAND_HEAD_LEN-1]; Trace((stdout, " b = %02x (crc >> 24) = %02x (lrec.time >> 8) = %02x\n", b, (ush)(GLOBAL(lrec.crc32) >> 24), ((ush)GLOBAL(lrec.last_mod_dos_datetime) >> 8) & 0xff)); if (b != (GLOBAL(pInfo->ExtLocHdr) ? ((ush)GLOBAL(lrec.last_mod_dos_datetime) >> 8) & 0xff : (ush)(GLOBAL(lrec.crc32) >> 24))) return -1; /* bad */ #endif /* password OK: decrypt current buffer contents before leaving */ for (n = (long)GLOBAL(incnt) > GLOBAL(csize) ? (int)GLOBAL(csize) : GLOBAL(incnt), p = GLOBAL(inptr); n--; p++) zdecode(*p); return 0; /* OK */ } /* end function testkey() */ #endif /* UNZIP && !FUNZIP */ #else /* !CRYPT */ /* something "externally visible" to shut up compiler/linker warnings */ int zcr_dummy; #endif /* ?CRYPT */ Carla-2.4.2/data/windows/unzipfx-carla-control/crypt.h000066400000000000000000000112251420416754300227260ustar00rootroot00000000000000/* Copyright (c) 1990-2007 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2005-Feb-10 or later (the contents of which are also included in (un)zip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /* crypt.h (full version) by Info-ZIP. Last revised: [see CR_VERSION_DATE] The main encryption/decryption source code for Info-Zip software was originally written in Europe. To the best of our knowledge, it can be freely distributed in both source and object forms from any country, including the USA under License Exception TSU of the U.S. Export Administration Regulations (section 740.13(e)) of 6 June 2002. NOTE on copyright history: Previous versions of this source package (up to version 2.8) were not copyrighted and put in the public domain. If you cannot comply with the Info-Zip LICENSE, you may want to look for one of those public domain versions. */ #ifndef __crypt_h /* don't include more than once */ #define __crypt_h #ifdef CRYPT # undef CRYPT #endif /* Logic of selecting "full crypt" code: a) default behaviour: - dummy crypt code when compiling UnZipSFX stub, to minimize size - full crypt code when used to compile Zip, UnZip and fUnZip b) USE_CRYPT defined: - always full crypt code c) NO_CRYPT defined: - never full crypt code NO_CRYPT takes precedence over USE_CRYPT */ #if defined(NO_CRYPT) # define CRYPT 0 /* dummy version */ #else #if defined(USE_CRYPT) # define CRYPT 1 /* full version */ #else #if !defined(SFX) # define CRYPT 1 /* full version for zip and main unzip */ #else # define CRYPT 0 /* dummy version for unzip sfx */ #endif #endif /* ?USE_CRYPT */ #endif /* ?NO_CRYPT */ #if CRYPT /* full version */ #ifdef CR_BETA # undef CR_BETA /* this is not a beta release */ #endif #define CR_MAJORVER 2 #define CR_MINORVER 11 #ifdef CR_BETA # define CR_BETA_VER "c BETA" # define CR_VERSION_DATE "05 Jan 2007" /* last real code change */ #else # define CR_BETA_VER "" # define CR_VERSION_DATE "05 Jan 2007" /* last public release date */ # define CR_RELEASE #endif #ifndef __G /* UnZip only, for now (DLL stuff) */ # define __G # define __G__ # define __GDEF # define __GPRO void # define __GPRO__ #endif #if defined(MSDOS) || defined(OS2) || defined(WIN32) # ifndef DOS_OS2_W32 # define DOS_OS2_W32 # endif #endif #if defined(DOS_OS2_W32) || defined(__human68k__) # ifndef DOS_H68_OS2_W32 # define DOS_H68_OS2_W32 # endif #endif #if defined(VM_CMS) || defined(MVS) # ifndef CMS_MVS # define CMS_MVS # endif #endif /* To allow combining of Zip and UnZip static libraries in a single binary, * the Zip and UnZip versions of the crypt core functions have to be named * differently. */ #ifdef ZIP # ifdef REALLY_SHORT_SYMS # define decrypt_byte zdcrby # else # define decrypt_byte zp_decrypt_byte # endif # define update_keys zp_update_keys # define init_keys zp_init_keys #else /* !ZIP */ # ifdef REALLY_SHORT_SYMS # define decrypt_byte dcrbyt # endif #endif /* ?ZIP */ #define IZ_PWLEN 80 /* input buffer size for reading encryption key */ #ifndef PWLEN /* for compatibility with previous zcrypt release... */ # define PWLEN IZ_PWLEN #endif #define RAND_HEAD_LEN 12 /* length of encryption random header */ /* the crc_32_tab array has to be provided externally for the crypt calculus */ /* encode byte c, using temp t. Warning: c must not have side effects. */ #define zencode(c,t) (t=decrypt_byte(__G), update_keys(c), t^(c)) /* decode byte c in place */ #define zdecode(c) update_keys(__G__ c ^= decrypt_byte(__G)) int decrypt_byte OF((__GPRO)); int update_keys OF((__GPRO__ int c)); void init_keys OF((__GPRO__ ZCONST char *passwd)); #ifdef ZIP void crypthead OF((ZCONST char *, ulg, FILE *)); # ifdef UTIL int zipcloak OF((struct zlist far *, FILE *, FILE *, ZCONST char *)); int zipbare OF((struct zlist far *, FILE *, FILE *, ZCONST char *)); # else unsigned zfwrite OF((zvoid *, extent, extent, FILE *)); extern char *key; # endif #endif /* ZIP */ #if (defined(UNZIP) && !defined(FUNZIP)) int decrypt OF((__GPRO__ ZCONST char *passwrd)); #endif #ifdef FUNZIP extern int encrypted; # ifdef NEXTBYTE # undef NEXTBYTE # endif # define NEXTBYTE \ (encrypted? update_keys(__G__ getc(G.in)^decrypt_byte(__G)) : getc(G.in)) #endif /* FUNZIP */ #else /* !CRYPT */ /* dummy version */ #define zencode #define zdecode #define zfwrite fwrite #endif /* ?CRYPT */ #endif /* !__crypt_h */ Carla-2.4.2/data/windows/unzipfx-carla-control/ebcdic.h000066400000000000000000000365531420416754300230110ustar00rootroot00000000000000/* Copyright (c) 1990-2008 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2000-Apr-09 or later (the contents of which are also included in zip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- ebcdic.h The CECP 1047 (Extended de-facto EBCDIC) <-> ISO 8859-1 conversion tables, from ftp://aix1.segi.ulg.ac.be/pub/docs/iso8859/iso8859.networking NOTES: (OS/390 port 12/97) These table no longer represent the standard mappings (for example in the OS/390 iconv utility). In order to follow current standards I remapped ebcdic x0a to ascii x15 and ebcdic x85 to ascii x25 (and vice-versa) Without these changes, newlines in auto-convert text files appeared as literal \045. I'm not sure what effect this remap would have on the MVS and CMS ports, so I ifdef'd these changes. Hopefully these ifdef's can be removed when the MVS/CMS folks test the new mappings. Christian Spieler , 27-Apr-1998 The problem mentioned by Paul von Behren was already observed previously on VM/CMS, during the preparation of the CMS&MVS port of UnZip 5.20 in 1996. At that point, the ebcdic tables were not changed since they seemed to be an adopted standard (to my knowledge, these tables are still used as presented in mainfraime KERMIT). Instead, the "end-of-line" conversion feature of Zip's and UnZip's "text-translation" mode was used to force correct mappings between ASCII and EBCDIC newline markers. Before interchanging the ASCII mappings of the EBCDIC control characters "NL" 0x25 and "LF" 0x15 according to the OS/390 setting, we have to make sure that EBCDIC 0x15 is never used as line termination. ---------------------------------------------------------------------------*/ #ifndef __ebcdic_h /* prevent multiple inclusions */ #define __ebcdic_h #ifndef ZCONST # define ZCONST const #endif #ifdef EBCDIC #ifndef MTS /* MTS uses a slightly "special" EBCDIC code page */ ZCONST uch ebcdic[] = { 0x00, 0x01, 0x02, 0x03, 0x37, 0x2D, 0x2E, 0x2F, /* 00 - 07 */ #ifdef OS390 0x16, 0x05, 0x15, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, /* 08 - 0F */ #else 0x16, 0x05, 0x25, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, /* 08 - 0F */ #endif 0x10, 0x11, 0x12, 0x13, 0x3C, 0x3D, 0x32, 0x26, /* 10 - 17 */ 0x18, 0x19, 0x3F, 0x27, 0x1C, 0x1D, 0x1E, 0x1F, /* 18 - 1F */ 0x40, 0x5A, 0x7F, 0x7B, 0x5B, 0x6C, 0x50, 0x7D, /* 20 - 27 */ 0x4D, 0x5D, 0x5C, 0x4E, 0x6B, 0x60, 0x4B, 0x61, /* 28 - 2F */ 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 30 - 37 */ 0xF8, 0xF9, 0x7A, 0x5E, 0x4C, 0x7E, 0x6E, 0x6F, /* 38 - 3F */ 0x7C, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 40 - 47 */ 0xC8, 0xC9, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, /* 48 - 4F */ 0xD7, 0xD8, 0xD9, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, /* 50 - 57 */ 0xE7, 0xE8, 0xE9, 0xAD, 0xE0, 0xBD, 0x5F, 0x6D, /* 58 - 5F */ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 60 - 67 */ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 68 - 6F */ 0x97, 0x98, 0x99, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, /* 70 - 77 */ 0xA7, 0xA8, 0xA9, 0xC0, 0x4F, 0xD0, 0xA1, 0x07, /* 78 - 7F */ #ifdef OS390 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x06, 0x17, /* 80 - 87 */ #else 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 80 - 87 */ #endif 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x09, 0x0A, 0x1B, /* 88 - 8F */ 0x30, 0x31, 0x1A, 0x33, 0x34, 0x35, 0x36, 0x08, /* 90 - 97 */ 0x38, 0x39, 0x3A, 0x3B, 0x04, 0x14, 0x3E, 0xFF, /* 98 - 9F */ 0x41, 0xAA, 0x4A, 0xB1, 0x9F, 0xB2, 0x6A, 0xB5, /* A0 - A7 */ 0xBB, 0xB4, 0x9A, 0x8A, 0xB0, 0xCA, 0xAF, 0xBC, /* A8 - AF */ 0x90, 0x8F, 0xEA, 0xFA, 0xBE, 0xA0, 0xB6, 0xB3, /* B0 - B7 */ 0x9D, 0xDA, 0x9B, 0x8B, 0xB7, 0xB8, 0xB9, 0xAB, /* B8 - BF */ 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9E, 0x68, /* C0 - C7 */ 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* C8 - CF */ 0xAC, 0x69, 0xED, 0xEE, 0xEB, 0xEF, 0xEC, 0xBF, /* D0 - D7 */ 0x80, 0xFD, 0xFE, 0xFB, 0xFC, 0xBA, 0xAE, 0x59, /* D8 - DF */ 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9C, 0x48, /* E0 - E7 */ 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* E8 - EF */ 0x8C, 0x49, 0xCD, 0xCE, 0xCB, 0xCF, 0xCC, 0xE1, /* F0 - F7 */ 0x70, 0xDD, 0xDE, 0xDB, 0xDC, 0x8D, 0x8E, 0xDF /* F8 - FF */ }; #if (defined(ZIP) || CRYPT) ZCONST uch ascii[] = { 0x00, 0x01, 0x02, 0x03, 0x9C, 0x09, 0x86, 0x7F, /* 00 - 07 */ 0x97, 0x8D, 0x8E, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, /* 08 - 0F */ #ifdef OS390 0x10, 0x11, 0x12, 0x13, 0x9D, 0x0A, 0x08, 0x87, /* 10 - 17 */ #else 0x10, 0x11, 0x12, 0x13, 0x9D, 0x85, 0x08, 0x87, /* 10 - 17 */ #endif 0x18, 0x19, 0x92, 0x8F, 0x1C, 0x1D, 0x1E, 0x1F, /* 18 - 1F */ #ifdef OS390 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x17, 0x1B, /* 20 - 27 */ #else 0x80, 0x81, 0x82, 0x83, 0x84, 0x0A, 0x17, 0x1B, /* 20 - 27 */ #endif 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x05, 0x06, 0x07, /* 28 - 2F */ 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04, /* 30 - 37 */ 0x98, 0x99, 0x9A, 0x9B, 0x14, 0x15, 0x9E, 0x1A, /* 38 - 3F */ 0x20, 0xA0, 0xE2, 0xE4, 0xE0, 0xE1, 0xE3, 0xE5, /* 40 - 47 */ 0xE7, 0xF1, 0xA2, 0x2E, 0x3C, 0x28, 0x2B, 0x7C, /* 48 - 4F */ 0x26, 0xE9, 0xEA, 0xEB, 0xE8, 0xED, 0xEE, 0xEF, /* 50 - 57 */ 0xEC, 0xDF, 0x21, 0x24, 0x2A, 0x29, 0x3B, 0x5E, /* 58 - 5F */ 0x2D, 0x2F, 0xC2, 0xC4, 0xC0, 0xC1, 0xC3, 0xC5, /* 60 - 67 */ 0xC7, 0xD1, 0xA6, 0x2C, 0x25, 0x5F, 0x3E, 0x3F, /* 68 - 6F */ 0xF8, 0xC9, 0xCA, 0xCB, 0xC8, 0xCD, 0xCE, 0xCF, /* 70 - 77 */ 0xCC, 0x60, 0x3A, 0x23, 0x40, 0x27, 0x3D, 0x22, /* 78 - 7F */ 0xD8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 80 - 87 */ 0x68, 0x69, 0xAB, 0xBB, 0xF0, 0xFD, 0xFE, 0xB1, /* 88 - 8F */ 0xB0, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, /* 90 - 97 */ 0x71, 0x72, 0xAA, 0xBA, 0xE6, 0xB8, 0xC6, 0xA4, /* 98 - 9F */ 0xB5, 0x7E, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, /* A0 - A7 */ 0x79, 0x7A, 0xA1, 0xBF, 0xD0, 0x5B, 0xDE, 0xAE, /* A8 - AF */ 0xAC, 0xA3, 0xA5, 0xB7, 0xA9, 0xA7, 0xB6, 0xBC, /* B0 - B7 */ 0xBD, 0xBE, 0xDD, 0xA8, 0xAF, 0x5D, 0xB4, 0xD7, /* B8 - BF */ 0x7B, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* C0 - C7 */ 0x48, 0x49, 0xAD, 0xF4, 0xF6, 0xF2, 0xF3, 0xF5, /* C8 - CF */ 0x7D, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, /* D0 - D7 */ 0x51, 0x52, 0xB9, 0xFB, 0xFC, 0xF9, 0xFA, 0xFF, /* D8 - DF */ 0x5C, 0xF7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, /* E0 - E7 */ 0x59, 0x5A, 0xB2, 0xD4, 0xD6, 0xD2, 0xD3, 0xD5, /* E8 - EF */ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* F0 - F7 */ 0x38, 0x39, 0xB3, 0xDB, 0xDC, 0xD9, 0xDA, 0x9F /* F8 - FF */ }; #endif /* ZIP || CRYPT */ #else /* MTS */ /* * This is the MTS ASCII->EBCDIC translation table. It provides a 1-1 * translation from ISO 8859/1 8-bit ASCII to IBM Code Page 37 EBCDIC. */ ZCONST uch ebcdic[] = { 0x00, 0x01, 0x02, 0x03, 0x37, 0x2D, 0x2E, 0x2F, /* 00 - 07 */ 0x16, 0x05, 0x25, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, /* 08 - 0F */ 0x10, 0x11, 0x12, 0x13, 0x3C, 0x3D, 0x32, 0x26, /* 10 - 17 */ 0x18, 0x19, 0x3F, 0x27, 0x1C, 0x1D, 0x1E, 0x1F, /* 18 - 1F */ 0x40, 0x5A, 0x7F, 0x7B, 0x5B, 0x6C, 0x50, 0x7D, /* 20 - 27 */ 0x4D, 0x5D, 0x5C, 0x4E, 0x6B, 0x60, 0x4B, 0x61, /* 28 - 2F */ 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 30 - 37 */ 0xF8, 0xF9, 0x7A, 0x5E, 0x4C, 0x7E, 0x6E, 0x6F, /* 38 - 3F */ 0x7C, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 40 - 47 */ 0xC8, 0xC9, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, /* 48 - 4F */ 0xD7, 0xD8, 0xD9, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, /* 50 - 57 */ 0xE7, 0xE8, 0xE9, 0xBA, 0xE0, 0xBB, 0xB0, 0x6D, /* 58 - 5F */ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 60 - 67 */ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 68 - 6F */ 0x97, 0x98, 0x99, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, /* 70 - 77 */ 0xA7, 0xA8, 0xA9, 0xC0, 0x4F, 0xD0, 0xA1, 0x07, /* 78 - 7F */ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 80 - 87 */ 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x09, 0x0A, 0x1B, /* 88 - 8F */ 0x30, 0x31, 0x1A, 0x33, 0x34, 0x35, 0x36, 0x08, /* 90 - 97 */ 0x38, 0x39, 0x3A, 0x3B, 0x04, 0x14, 0x3E, 0xFF, /* 98 - 9F */ 0x41, 0xAA, 0x4A, 0xB1, 0x9F, 0xB2, 0x6A, 0xB5, /* A0 - A7 */ 0xBD, 0xB4, 0x9A, 0x8A, 0x5F, 0xCA, 0xAF, 0xBC, /* A8 - AF */ 0x90, 0x8F, 0xEA, 0xFA, 0xBE, 0xA0, 0xB6, 0xB3, /* B0 - B7 */ 0x9D, 0xDA, 0x9B, 0x8B, 0xB7, 0xB8, 0xB9, 0xAB, /* B8 - BF */ 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9E, 0x68, /* C0 - C7 */ 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* C8 - CF */ 0xAC, 0x69, 0xED, 0xEE, 0xEB, 0xEF, 0xEC, 0xBF, /* D0 - D7 */ 0x80, 0xFD, 0xFE, 0xFB, 0xFC, 0xAD, 0xAE, 0x59, /* D8 - DF */ 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9C, 0x48, /* E0 - E7 */ 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* E8 - EF */ 0x8C, 0x49, 0xCD, 0xCE, 0xCB, 0xCF, 0xCC, 0xE1, /* F0 - F7 */ 0x70, 0xDD, 0xDE, 0xDB, 0xDC, 0x8D, 0x8E, 0xDF /* F8 - FF */ }; #if (defined(ZIP) || CRYPT) ZCONST uch ascii[] = { 0x00, 0x01, 0x02, 0x03, 0x9C, 0x09, 0x86, 0x7F, /* 00 - 07 */ 0x97, 0x8D, 0x8E, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, /* 08 - 0F */ 0x10, 0x11, 0x12, 0x13, 0x9D, 0x85, 0x08, 0x87, /* 10 - 17 */ 0x18, 0x19, 0x92, 0x8F, 0x1C, 0x1D, 0x1E, 0x1F, /* 18 - 1F */ 0x80, 0x81, 0x82, 0x83, 0x84, 0x0A, 0x17, 0x1B, /* 20 - 27 */ 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x05, 0x06, 0x07, /* 28 - 2F */ 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04, /* 30 - 37 */ 0x98, 0x99, 0x9A, 0x9B, 0x14, 0x15, 0x9E, 0x1A, /* 38 - 3F */ 0x20, 0xA0, 0xE2, 0xE4, 0xE0, 0xE1, 0xE3, 0xE5, /* 40 - 47 */ 0xE7, 0xF1, 0xA2, 0x2E, 0x3C, 0x28, 0x2B, 0x7C, /* 48 - 4F */ 0x26, 0xE9, 0xEA, 0xEB, 0xE8, 0xED, 0xEE, 0xEF, /* 50 - 57 */ 0xEC, 0xDF, 0x21, 0x24, 0x2A, 0x29, 0x3B, 0xAC, /* 58 - 5F */ 0x2D, 0x2F, 0xC2, 0xC4, 0xC0, 0xC1, 0xC3, 0xC5, /* 60 - 67 */ 0xC7, 0xD1, 0xA6, 0x2C, 0x25, 0x5F, 0x3E, 0x3F, /* 68 - 6F */ 0xF8, 0xC9, 0xCA, 0xCB, 0xC8, 0xCD, 0xCE, 0xCF, /* 70 - 77 */ 0xCC, 0x60, 0x3A, 0x23, 0x40, 0x27, 0x3D, 0x22, /* 78 - 7F */ 0xD8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 80 - 87 */ 0x68, 0x69, 0xAB, 0xBB, 0xF0, 0xFD, 0xFE, 0xB1, /* 88 - 8F */ 0xB0, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, /* 90 - 97 */ 0x71, 0x72, 0xAA, 0xBA, 0xE6, 0xB8, 0xC6, 0xA4, /* 98 - 9F */ 0xB5, 0x7E, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, /* A0 - A7 */ 0x79, 0x7A, 0xA1, 0xBF, 0xD0, 0xDD, 0xDE, 0xAE, /* A8 - AF */ 0x5E, 0xA3, 0xA5, 0xB7, 0xA9, 0xA7, 0xB6, 0xBC, /* B0 - B7 */ 0xBD, 0xBE, 0x5B, 0x5D, 0xAF, 0xA8, 0xB4, 0xD7, /* B8 - BF */ 0x7B, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* C0 - C7 */ 0x48, 0x49, 0xAD, 0xF4, 0xF6, 0xF2, 0xF3, 0xF5, /* C8 - CF */ 0x7D, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, /* D0 - D7 */ 0x51, 0x52, 0xB9, 0xFB, 0xFC, 0xF9, 0xFA, 0xFF, /* D8 - DF */ 0x5C, 0xF7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, /* E0 - E7 */ 0x59, 0x5A, 0xB2, 0xD4, 0xD6, 0xD2, 0xD3, 0xD5, /* E8 - EF */ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* F0 - F7 */ 0x38, 0x39, 0xB3, 0xDB, 0xDC, 0xD9, 0xDA, 0x9F /* F8 - FF */ }; #endif /* ZIP || CRYPT */ #endif /* ?MTS */ #endif /* EBCDIC */ /*--------------------------------------------------------------------------- The following conversion tables translate between IBM PC CP 850 (OEM codepage) and the "Western Europe & America" Windows codepage 1252. The Windows codepage 1252 contains the ISO 8859-1 "Latin 1" codepage, with some additional printable characters in the range (0x80 - 0x9F), that is reserved to control codes in the ISO 8859-1 character table. The ISO <--> OEM conversion tables were constructed with the help of the WIN32 (Win16?) API's OemToAnsi() and AnsiToOem() conversion functions and have been checked against the CP850 and LATIN1 tables provided in the MS-Kermit 3.14 distribution. ---------------------------------------------------------------------------*/ #ifdef IZ_ISO2OEM_ARRAY ZCONST uch Far iso2oem_850[] = { 0x3F, 0x3F, 0x27, 0x9F, 0x22, 0x2E, 0xC5, 0xCE, /* 80 - 87 */ 0x5E, 0x25, 0x53, 0x3C, 0x4F, 0x3F, 0x3F, 0x3F, /* 88 - 8F */ 0x3F, 0x27, 0x27, 0x22, 0x22, 0x07, 0x2D, 0x2D, /* 90 - 97 */ 0x7E, 0x54, 0x73, 0x3E, 0x6F, 0x3F, 0x3F, 0x59, /* 98 - 9F */ 0xFF, 0xAD, 0xBD, 0x9C, 0xCF, 0xBE, 0xDD, 0xF5, /* A0 - A7 */ 0xF9, 0xB8, 0xA6, 0xAE, 0xAA, 0xF0, 0xA9, 0xEE, /* A8 - AF */ 0xF8, 0xF1, 0xFD, 0xFC, 0xEF, 0xE6, 0xF4, 0xFA, /* B0 - B7 */ 0xF7, 0xFB, 0xA7, 0xAF, 0xAC, 0xAB, 0xF3, 0xA8, /* B8 - BF */ 0xB7, 0xB5, 0xB6, 0xC7, 0x8E, 0x8F, 0x92, 0x80, /* C0 - C7 */ 0xD4, 0x90, 0xD2, 0xD3, 0xDE, 0xD6, 0xD7, 0xD8, /* C8 - CF */ 0xD1, 0xA5, 0xE3, 0xE0, 0xE2, 0xE5, 0x99, 0x9E, /* D0 - D7 */ 0x9D, 0xEB, 0xE9, 0xEA, 0x9A, 0xED, 0xE8, 0xE1, /* D8 - DF */ 0x85, 0xA0, 0x83, 0xC6, 0x84, 0x86, 0x91, 0x87, /* E0 - E7 */ 0x8A, 0x82, 0x88, 0x89, 0x8D, 0xA1, 0x8C, 0x8B, /* E8 - EF */ 0xD0, 0xA4, 0x95, 0xA2, 0x93, 0xE4, 0x94, 0xF6, /* F0 - F7 */ 0x9B, 0x97, 0xA3, 0x96, 0x81, 0xEC, 0xE7, 0x98 /* F8 - FF */ }; #endif /* IZ_ISO2OEM_ARRAY */ #ifdef IZ_OEM2ISO_ARRAY ZCONST uch Far oem2iso_850[] = { 0xC7, 0xFC, 0xE9, 0xE2, 0xE4, 0xE0, 0xE5, 0xE7, /* 80 - 87 */ 0xEA, 0xEB, 0xE8, 0xEF, 0xEE, 0xEC, 0xC4, 0xC5, /* 88 - 8F */ 0xC9, 0xE6, 0xC6, 0xF4, 0xF6, 0xF2, 0xFB, 0xF9, /* 90 - 97 */ 0xFF, 0xD6, 0xDC, 0xF8, 0xA3, 0xD8, 0xD7, 0x83, /* 98 - 9F */ 0xE1, 0xED, 0xF3, 0xFA, 0xF1, 0xD1, 0xAA, 0xBA, /* A0 - A7 */ 0xBF, 0xAE, 0xAC, 0xBD, 0xBC, 0xA1, 0xAB, 0xBB, /* A8 - AF */ 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xC1, 0xC2, 0xC0, /* B0 - B7 */ 0xA9, 0xA6, 0xA6, 0x2B, 0x2B, 0xA2, 0xA5, 0x2B, /* B8 - BF */ 0x2B, 0x2D, 0x2D, 0x2B, 0x2D, 0x2B, 0xE3, 0xC3, /* C0 - C7 */ 0x2B, 0x2B, 0x2D, 0x2D, 0xA6, 0x2D, 0x2B, 0xA4, /* C8 - CF */ 0xF0, 0xD0, 0xCA, 0xCB, 0xC8, 0x69, 0xCD, 0xCE, /* D0 - D7 */ 0xCF, 0x2B, 0x2B, 0xA6, 0x5F, 0xA6, 0xCC, 0xAF, /* D8 - DF */ 0xD3, 0xDF, 0xD4, 0xD2, 0xF5, 0xD5, 0xB5, 0xFE, /* E0 - E7 */ 0xDE, 0xDA, 0xDB, 0xD9, 0xFD, 0xDD, 0xAF, 0xB4, /* E8 - EF */ 0xAD, 0xB1, 0x3D, 0xBE, 0xB6, 0xA7, 0xF7, 0xB8, /* F0 - F7 */ 0xB0, 0xA8, 0xB7, 0xB9, 0xB3, 0xB2, 0xA6, 0xA0 /* F8 - FF */ }; #endif /* IZ_OEM2ISO_ARRAY */ /* The following pointers to the OEM<-->ISO translation tables are used by the translation code portions. They may get initialized at program startup to point to the matching static translation tables, or to NULL to disable OEM-ISO translation. The compile-time initialization used here provides the backward compatible setting, as can be found in UnZip 5.52 and earlier. In case this mechanism will ever get used on a multithreading system that allows different codepage setups for concurrently running threads, these pointers should get moved into UnZip's thread-safe global data structure. */ #ifdef IZ_ISO2OEM_ARRAY ZCONST uch Far *iso2oem = iso2oem_850; /* backward compatibility default */ #endif /* IZ_ISO2OEM_ARRAY */ #ifdef IZ_OEM2ISO_ARRAY ZCONST uch Far *oem2iso = oem2iso_850; /* backward compatibility default */ #endif /* IZ_OEM2ISO_ARRAY */ #if defined(THEOS) || defined(THEOS_SUPPORT) # include "theos/charconv.h" #endif #endif /* __ebcdic_h */ Carla-2.4.2/data/windows/unzipfx-carla-control/extract.c000066400000000000000000003137161420416754300232440ustar00rootroot00000000000000/* Copyright (c) 1990-2009 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2009-Jan-02 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- extract.c This file contains the high-level routines ("driver routines") for extrac- ting and testing zipfile members. It calls the low-level routines in files explode.c, inflate.c, unreduce.c and unshrink.c. Contains: extract_or_test_files() store_info() find_compr_idx() extract_or_test_entrylist() extract_or_test_member() TestExtraField() test_compr_eb() memextract() memflush() extract_izvms_block() (VMS or VMS_TEXT_CONV) set_deferred_symlink() (SYMLINKS only) fnfilter() dircomp() (SET_DIR_ATTRIB only) UZbunzip2() (USE_BZIP2 only) ---------------------------------------------------------------------------*/ #define __EXTRACT_C /* identifies this source module */ #define UNZIP_INTERNAL #include "unzip.h" #ifdef WINDLL # ifdef POCKET_UNZIP # include "wince/intrface.h" # else # include "windll/windll.h" # endif #endif #include "crc32.h" #include "crypt.h" #define GRRDUMP(buf,len) { \ int i, j; \ \ for (j = 0; j < (len)/16; ++j) { \ printf(" "); \ for (i = 0; i < 16; ++i) \ printf("%02x ", (uch)(buf)[i+(j<<4)]); \ printf("\n "); \ for (i = 0; i < 16; ++i) { \ char c = (char)(buf)[i+(j<<4)]; \ \ if (c == '\n') \ printf("\\n "); \ else if (c == '\r') \ printf("\\r "); \ else \ printf(" %c ", c); \ } \ printf("\n"); \ } \ if ((len) % 16) { \ printf(" "); \ for (i = j<<4; i < (len); ++i) \ printf("%02x ", (uch)(buf)[i]); \ printf("\n "); \ for (i = j<<4; i < (len); ++i) { \ char c = (char)(buf)[i]; \ \ if (c == '\n') \ printf("\\n "); \ else if (c == '\r') \ printf("\\r "); \ else \ printf(" %c ", c); \ } \ printf("\n"); \ } \ } static int store_info OF((__GPRO)); #ifdef SET_DIR_ATTRIB static int extract_or_test_entrylist OF((__GPRO__ unsigned numchunk, ulg *pfilnum, ulg *pnum_bad_pwd, zoff_t *pold_extra_bytes, unsigned *pnum_dirs, direntry **pdirlist, int error_in_archive)); #else static int extract_or_test_entrylist OF((__GPRO__ unsigned numchunk, ulg *pfilnum, ulg *pnum_bad_pwd, zoff_t *pold_extra_bytes, int error_in_archive)); #endif static int extract_or_test_member OF((__GPRO)); #ifndef SFX static int TestExtraField OF((__GPRO__ uch *ef, unsigned ef_len)); static int test_compr_eb OF((__GPRO__ uch *eb, unsigned eb_size, unsigned compr_offset, int (*test_uc_ebdata)(__GPRO__ uch *eb, unsigned eb_size, uch *eb_ucptr, ulg eb_ucsize))); #endif #if (defined(VMS) || defined(VMS_TEXT_CONV)) static void decompress_bits OF((uch *outptr, unsigned needlen, ZCONST uch *bitptr)); #endif #ifdef SYMLINKS static void set_deferred_symlink OF((__GPRO__ slinkentry *slnk_entry)); #endif #ifdef SET_DIR_ATTRIB static int Cdecl dircomp OF((ZCONST zvoid *a, ZCONST zvoid *b)); #endif /*******************************/ /* Strings used in extract.c */ /*******************************/ static ZCONST char Far VersionMsg[] = " skipping: %-22s need %s compat. v%u.%u (can do v%u.%u)\n"; static ZCONST char Far ComprMsgNum[] = " skipping: %-22s unsupported compression method %u\n"; #ifndef SFX static ZCONST char Far ComprMsgName[] = " skipping: %-22s `%s' method not supported\n"; static ZCONST char Far CmprNone[] = "store"; static ZCONST char Far CmprShrink[] = "shrink"; static ZCONST char Far CmprReduce[] = "reduce"; static ZCONST char Far CmprImplode[] = "implode"; static ZCONST char Far CmprTokenize[] = "tokenize"; static ZCONST char Far CmprDeflate[] = "deflate"; static ZCONST char Far CmprDeflat64[] = "deflate64"; static ZCONST char Far CmprDCLImplode[] = "DCL implode"; static ZCONST char Far CmprBzip[] = "bzip2"; static ZCONST char Far CmprLZMA[] = "LZMA"; static ZCONST char Far CmprIBMTerse[] = "IBM/Terse"; static ZCONST char Far CmprIBMLZ77[] = "IBM LZ77"; static ZCONST char Far CmprWavPack[] = "WavPack"; static ZCONST char Far CmprPPMd[] = "PPMd"; static ZCONST char Far *ComprNames[NUM_METHODS] = { CmprNone, CmprShrink, CmprReduce, CmprReduce, CmprReduce, CmprReduce, CmprImplode, CmprTokenize, CmprDeflate, CmprDeflat64, CmprDCLImplode, CmprBzip, CmprLZMA, CmprIBMTerse, CmprIBMLZ77, CmprWavPack, CmprPPMd }; static ZCONST unsigned ComprIDs[NUM_METHODS] = { STORED, SHRUNK, REDUCED1, REDUCED2, REDUCED3, REDUCED4, IMPLODED, TOKENIZED, DEFLATED, ENHDEFLATED, DCLIMPLODED, BZIPPED, LZMAED, IBMTERSED, IBMLZ77ED, WAVPACKED, PPMDED }; #endif /* !SFX */ static ZCONST char Far FilNamMsg[] = "%s: bad filename length (%s)\n"; #ifndef SFX static ZCONST char Far WarnNoMemCFName[] = "%s: warning, no memory for comparison with local header\n"; static ZCONST char Far LvsCFNamMsg[] = "%s: mismatching \"local\" filename (%s),\n\ continuing with \"central\" filename version\n"; #endif /* !SFX */ #if (!defined(SFX) && defined(UNICODE_SUPPORT)) static ZCONST char Far GP11FlagsDiffer[] = "file #%lu (%s):\n\ mismatch between local and central GPF bit 11 (\"UTF-8\"),\n\ continuing with central flag (IsUTF8 = %d)\n"; #endif /* !SFX && UNICODE_SUPPORT */ static ZCONST char Far WrnStorUCSizCSizDiff[] = "%s: ucsize %s <> csize %s for STORED entry\n\ continuing with \"compressed\" size value\n"; static ZCONST char Far ExtFieldMsg[] = "%s: bad extra field length (%s)\n"; static ZCONST char Far OffsetMsg[] = "file #%lu: bad zipfile offset (%s): %ld\n"; static ZCONST char Far ExtractMsg[] = "%8sing: %-22s %s%s"; #ifndef SFX static ZCONST char Far LengthMsg[] = "%s %s: %s bytes required to uncompress to %s bytes;\n %s\ supposed to require %s bytes%s%s%s\n"; #endif static ZCONST char Far BadFileCommLength[] = "%s: bad file comment length\n"; static ZCONST char Far LocalHdrSig[] = "local header sig"; static ZCONST char Far BadLocalHdr[] = "file #%lu: bad local header\n"; static ZCONST char Far AttemptRecompensate[] = " (attempting to re-compensate)\n"; #ifndef SFX static ZCONST char Far BackslashPathSep[] = "warning: %s appears to use backslashes as path separators\n"; #endif static ZCONST char Far AbsolutePathWarning[] = "warning: stripped absolute path spec from %s\n"; static ZCONST char Far SkipVolumeLabel[] = " skipping: %-22s %svolume label\n"; #ifdef SET_DIR_ATTRIB /* messages of code for setting directory attributes */ static ZCONST char Far DirlistEntryNoMem[] = "warning: cannot alloc memory for dir times/permissions/UID/GID\n"; static ZCONST char Far DirlistSortNoMem[] = "warning: cannot alloc memory to sort dir times/perms/etc.\n"; static ZCONST char Far DirlistSetAttrFailed[] = "warning: set times/attribs failed for %s\n"; static ZCONST char Far DirlistFailAttrSum[] = " failed setting times/attribs for %lu dir entries"; #endif #ifdef SYMLINKS /* messages of the deferred symlinks handler */ static ZCONST char Far SymLnkWarnNoMem[] = "warning: deferred symlink (%s) failed:\n\ out of memory\n"; static ZCONST char Far SymLnkWarnInvalid[] = "warning: deferred symlink (%s) failed:\n\ invalid placeholder file\n"; static ZCONST char Far SymLnkDeferred[] = "finishing deferred symbolic links:\n"; static ZCONST char Far SymLnkFinish[] = " %-22s -> %s\n"; #endif #ifndef WINDLL static ZCONST char Far ReplaceQuery[] = # ifdef VMS "new version of %s? [y]es, [n]o, [A]ll, [N]one, [r]ename: "; # else "replace %s? [y]es, [n]o, [A]ll, [N]one, [r]ename: "; # endif static ZCONST char Far AssumeNone[] = " NULL\n(EOF or read error, treating as \"[N]one\" ...)\n"; static ZCONST char Far NewNameQuery[] = "new name: "; static ZCONST char Far InvalidResponse[] = "error: invalid response [%s]\n"; #endif /* !WINDLL */ static ZCONST char Far ErrorInArchive[] = "At least one %serror was detected in %s.\n"; static ZCONST char Far ZeroFilesTested[] = "Caution: zero files tested in %s.\n"; #ifndef VMS static ZCONST char Far VMSFormatQuery[] = "\n%s: stored in VMS format. Extract anyway? (y/n) "; #endif #if CRYPT static ZCONST char Far SkipCannotGetPasswd[] = " skipping: %-22s unable to get password\n"; static ZCONST char Far SkipIncorrectPasswd[] = " skipping: %-22s incorrect password\n"; static ZCONST char Far FilesSkipBadPasswd[] = "%lu file%s skipped because of incorrect password.\n"; static ZCONST char Far MaybeBadPasswd[] = " (may instead be incorrect password)\n"; #else static ZCONST char Far SkipEncrypted[] = " skipping: %-22s encrypted (not supported)\n"; #endif static ZCONST char Far NoErrInCompData[] = "No errors detected in compressed data of %s.\n"; static ZCONST char Far NoErrInTestedFiles[] = "No errors detected in %s for the %lu file%s tested.\n"; static ZCONST char Far FilesSkipped[] = "%lu file%s skipped because of unsupported compression or encoding.\n"; static ZCONST char Far ErrUnzipFile[] = " error: %s%s %s\n"; static ZCONST char Far ErrUnzipNoFile[] = "\n error: %s%s\n"; static ZCONST char Far NotEnoughMem[] = "not enough memory to "; static ZCONST char Far InvalidComprData[] = "invalid compressed data to "; static ZCONST char Far Inflate[] = "inflate"; #ifdef USE_BZIP2 static ZCONST char Far BUnzip[] = "bunzip"; #endif #ifndef SFX static ZCONST char Far Explode[] = "explode"; #ifndef LZW_CLEAN static ZCONST char Far Unshrink[] = "unshrink"; #endif #endif #if (!defined(DELETE_IF_FULL) || !defined(HAVE_UNLINK)) static ZCONST char Far FileTruncated[] = "warning: %s is probably truncated\n"; #endif static ZCONST char Far FileUnknownCompMethod[] = "%s: unknown compression method\n"; static ZCONST char Far BadCRC[] = " bad CRC %08lx (should be %08lx)\n"; /* TruncEAs[] also used in OS/2 mapname(), close_outfile() */ char ZCONST Far TruncEAs[] = " compressed EA data missing (%d bytes)%s"; char ZCONST Far TruncNTSD[] = " compressed WinNT security data missing (%d bytes)%s"; #ifndef SFX static ZCONST char Far InconsistEFlength[] = "bad extra-field entry:\n \ EF block length (%u bytes) exceeds remaining EF data (%u bytes)\n"; static ZCONST char Far InvalidComprDataEAs[] = " invalid compressed data for EAs\n"; # if (defined(WIN32) && defined(NTSD_EAS)) static ZCONST char Far InvalidSecurityEAs[] = " EAs fail security check\n"; # endif static ZCONST char Far UnsuppNTSDVersEAs[] = " unsupported NTSD EAs version %d\n"; static ZCONST char Far BadCRC_EAs[] = " bad CRC for extended attributes\n"; static ZCONST char Far UnknComprMethodEAs[] = " unknown compression method for EAs (%u)\n"; static ZCONST char Far NotEnoughMemEAs[] = " out of memory while inflating EAs\n"; static ZCONST char Far UnknErrorEAs[] = " unknown error on extended attributes\n"; #endif /* !SFX */ static ZCONST char Far UnsupportedExtraField[] = "\nerror: unsupported extra-field compression type (%u)--skipping\n"; static ZCONST char Far BadExtraFieldCRC[] = "error [%s]: bad extra-field CRC %08lx (should be %08lx)\n"; /**************************************/ /* Function extract_or_test_files() */ /**************************************/ int extract_or_test_files(__G) /* return PK-type error code */ __GDEF { unsigned i, j; zoff_t cd_bufstart; uch *cd_inptr; int cd_incnt; ulg filnum=0L, blknum=0L; int reached_end; #ifndef SFX int no_endsig_found; #endif int error, error_in_archive=PK_COOL; int *fn_matched=NULL, *xn_matched=NULL; zucn_t members_processed; ulg num_skipped=0L, num_bad_pwd=0L; zoff_t old_extra_bytes = 0L; #ifdef SET_DIR_ATTRIB unsigned num_dirs=0; direntry *dirlist=(direntry *)NULL, **sorted_dirlist=(direntry **)NULL; #endif /* * First, two general initializations are applied. These have been moved * here from process_zipfiles() because they are only needed for accessing * and/or extracting the data content of the zip archive. */ /* a) initialize the CRC table pointer (once) */ if (CRC_32_TAB == NULL) { if ((CRC_32_TAB = get_crc_table()) == NULL) { return PK_MEM; } } #if (!defined(SFX) || defined(SFX_EXDIR)) /* b) check out if specified extraction root directory exists */ if (uO.exdir != (char *)NULL && G.extract_flag) { G.create_dirs = !uO.fflag; if ((error = checkdir(__G__ uO.exdir, ROOT)) > MPN_INF_SKIP) { /* out of memory, or file in way */ return (error == MPN_NOMEM ? PK_MEM : PK_ERR); } } #endif /* !SFX || SFX_EXDIR */ /*--------------------------------------------------------------------------- The basic idea of this function is as follows. Since the central di- rectory lies at the end of the zipfile and the member files lie at the beginning or middle or wherever, it is not very desirable to simply read a central directory entry, jump to the member and extract it, and then jump back to the central directory. In the case of a large zipfile this would lead to a whole lot of disk-grinding, especially if each mem- ber file is small. Instead, we read from the central directory the per- tinent information for a block of files, then go extract/test the whole block. Thus this routine contains two small(er) loops within a very large outer loop: the first of the small ones reads a block of files from the central directory; the second extracts or tests each file; and the outer one loops over blocks. There's some file-pointer positioning stuff in between, but that's about it. Btw, it's because of this jump- ing around that we can afford to be lenient if an error occurs in one of the member files: we should still be able to go find the other members, since we know the offset of each from the beginning of the zipfile. ---------------------------------------------------------------------------*/ G.pInfo = G.info; #if CRYPT G.newzip = TRUE; #endif #ifndef SFX G.reported_backslash = FALSE; #endif /* malloc space for check on unmatched filespecs (OK if one or both NULL) */ if (G.filespecs > 0 && (fn_matched=(int *)malloc(G.filespecs*sizeof(int))) != (int *)NULL) for (i = 0; i < G.filespecs; ++i) fn_matched[i] = FALSE; if (G.xfilespecs > 0 && (xn_matched=(int *)malloc(G.xfilespecs*sizeof(int))) != (int *)NULL) for (i = 0; i < G.xfilespecs; ++i) xn_matched[i] = FALSE; /*--------------------------------------------------------------------------- Begin main loop over blocks of member files. We know the entire central directory is on this disk: we would not have any of this information un- less the end-of-central-directory record was on this disk, and we would not have gotten to this routine unless this is also the disk on which the central directory starts. In practice, this had better be the ONLY disk in the archive, but we'll add multi-disk support soon. ---------------------------------------------------------------------------*/ members_processed = 0; #ifndef SFX no_endsig_found = FALSE; #endif reached_end = FALSE; while (!reached_end) { j = 0; #ifdef AMIGA memzero(G.filenotes, DIR_BLKSIZ * sizeof(char *)); #endif /* * Loop through files in central directory, storing offsets, file * attributes, case-conversion and text-conversion flags until block * size is reached. */ while ((j < DIR_BLKSIZ)) { G.pInfo = &G.info[j]; if (readbuf(__G__ G.sig, 4) == 0) { error_in_archive = PK_EOF; reached_end = TRUE; /* ...so no more left to do */ break; } if (memcmp(G.sig, central_hdr_sig, 4)) { /* is it a new entry? */ /* no new central directory entry * -> is the number of processed entries compatible with the * number of entries as stored in the end_central record? */ if ((members_processed & (G.ecrec.have_ecr64 ? MASK_ZUCN64 : MASK_ZUCN16)) == G.ecrec.total_entries_central_dir) { #ifndef SFX /* yes, so look if we ARE back at the end_central record */ no_endsig_found = ( (memcmp(G.sig, (G.ecrec.have_ecr64 ? end_central64_sig : end_central_sig), 4) != 0) && (!G.ecrec.is_zip64_archive) && (memcmp(G.sig, end_central_sig, 4) != 0) ); #endif /* !SFX */ } else { /* no; we have found an error in the central directory * -> report it and stop searching for more Zip entries */ Info(slide, 0x401, ((char *)slide, LoadFarString(CentSigMsg), j + blknum*DIR_BLKSIZ + 1)); Info(slide, 0x401, ((char *)slide, LoadFarString(ReportMsg))); error_in_archive = PK_BADERR; } reached_end = TRUE; /* ...so no more left to do */ break; } /* process_cdir_file_hdr() sets pInfo->hostnum, pInfo->lcflag */ if ((error = process_cdir_file_hdr(__G)) != PK_COOL) { error_in_archive = error; /* only PK_EOF defined */ reached_end = TRUE; /* ...so no more left to do */ break; } if ((error = do_string(__G__ G.crec.filename_length, DS_FN)) != PK_COOL) { if (error > error_in_archive) error_in_archive = error; if (error > PK_WARN) { /* fatal: no more left to do */ Info(slide, 0x401, ((char *)slide, LoadFarString(FilNamMsg), FnFilter1(G.filename), "central")); reached_end = TRUE; break; } } if ((error = do_string(__G__ G.crec.extra_field_length, EXTRA_FIELD)) != 0) { if (error > error_in_archive) error_in_archive = error; if (error > PK_WARN) { /* fatal */ Info(slide, 0x401, ((char *)slide, LoadFarString(ExtFieldMsg), FnFilter1(G.filename), "central")); reached_end = TRUE; break; } } #ifdef AMIGA G.filenote_slot = j; if ((error = do_string(__G__ G.crec.file_comment_length, uO.N_flag ? FILENOTE : SKIP)) != PK_COOL) #else if ((error = do_string(__G__ G.crec.file_comment_length, SKIP)) != PK_COOL) #endif { if (error > error_in_archive) error_in_archive = error; if (error > PK_WARN) { /* fatal */ Info(slide, 0x421, ((char *)slide, LoadFarString(BadFileCommLength), FnFilter1(G.filename))); reached_end = TRUE; break; } } if (G.process_all_files) { if (store_info(__G)) ++j; /* file is OK; info[] stored; continue with next */ else ++num_skipped; } else { int do_this_file; if (G.filespecs == 0) do_this_file = TRUE; else { /* check if this entry matches an `include' argument */ do_this_file = FALSE; for (i = 0; i < G.filespecs; i++) if (match(G.filename, G.pfnames[i], uO.C_flag WISEP)) { do_this_file = TRUE; /* ^-- ignore case or not? */ if (fn_matched) fn_matched[i] = TRUE; break; /* found match, so stop looping */ } } if (do_this_file) { /* check if this is an excluded file */ for (i = 0; i < G.xfilespecs; i++) if (match(G.filename, G.pxnames[i], uO.C_flag WISEP)) { do_this_file = FALSE; /* ^-- ignore case or not? */ if (xn_matched) xn_matched[i] = TRUE; break; } } if (do_this_file) { if (store_info(__G)) ++j; /* file is OK */ else ++num_skipped; /* unsupp. compression or encryption */ } } /* end if (process_all_files) */ members_processed++; } /* end while-loop (adding files to current block) */ /* save position in central directory so can come back later */ cd_bufstart = G.cur_zipfile_bufstart; cd_inptr = G.inptr; cd_incnt = G.incnt; /*----------------------------------------------------------------------- Second loop: process files in current block, extracting or testing each one. -----------------------------------------------------------------------*/ error = extract_or_test_entrylist(__G__ j, &filnum, &num_bad_pwd, &old_extra_bytes, #ifdef SET_DIR_ATTRIB &num_dirs, &dirlist, #endif error_in_archive); if (error != PK_COOL) { if (error > error_in_archive) error_in_archive = error; /* ...and keep going (unless disk full or user break) */ if (G.disk_full > 1 || error_in_archive == IZ_CTRLC) { /* clear reached_end to signal premature stop ... */ reached_end = FALSE; /* ... and cancel scanning the central directory */ break; } } /* * Jump back to where we were in the central directory, then go and do * the next batch of files. */ #ifdef USE_STRM_INPUT zfseeko(G.zipfd, cd_bufstart, SEEK_SET); G.cur_zipfile_bufstart = zftello(G.zipfd); #else /* !USE_STRM_INPUT */ G.cur_zipfile_bufstart = zlseek(G.zipfd, cd_bufstart, SEEK_SET); #endif /* ?USE_STRM_INPUT */ read(G.zipfd, (char *)G.inbuf, INBUFSIZ); /* been here before... */ G.inptr = cd_inptr; G.incnt = cd_incnt; ++blknum; #ifdef TEST printf("\ncd_bufstart = %ld (%.8lXh)\n", cd_bufstart, cd_bufstart); printf("cur_zipfile_bufstart = %ld (%.8lXh)\n", cur_zipfile_bufstart, cur_zipfile_bufstart); printf("inptr-inbuf = %d\n", G.inptr-G.inbuf); printf("incnt = %d\n\n", G.incnt); #endif } /* end while-loop (blocks of files in central directory) */ /*--------------------------------------------------------------------------- Process the list of deferred symlink extractions and finish up the symbolic links. ---------------------------------------------------------------------------*/ #ifdef SYMLINKS if (G.slink_last != NULL) { if (QCOND2) Info(slide, 0, ((char *)slide, LoadFarString(SymLnkDeferred))); while (G.slink_head != NULL) { set_deferred_symlink(__G__ G.slink_head); /* remove the processed entry from the chain and free its memory */ G.slink_last = G.slink_head; G.slink_head = G.slink_last->next; free(G.slink_last); } G.slink_last = NULL; } #endif /* SYMLINKS */ /*--------------------------------------------------------------------------- Go back through saved list of directories, sort and set times/perms/UIDs and GIDs from the deepest level on up. ---------------------------------------------------------------------------*/ #ifdef SET_DIR_ATTRIB if (num_dirs > 0) { sorted_dirlist = (direntry **)malloc(num_dirs*sizeof(direntry *)); if (sorted_dirlist == (direntry **)NULL) { Info(slide, 0x401, ((char *)slide, LoadFarString(DirlistSortNoMem))); while (dirlist != (direntry *)NULL) { direntry *d = dirlist; dirlist = dirlist->next; free(d); } } else { ulg ndirs_fail = 0; if (num_dirs == 1) sorted_dirlist[0] = dirlist; else { for (i = 0; i < num_dirs; ++i) { sorted_dirlist[i] = dirlist; dirlist = dirlist->next; } qsort((char *)sorted_dirlist, num_dirs, sizeof(direntry *), dircomp); } Trace((stderr, "setting directory times/perms/attributes\n")); for (i = 0; i < num_dirs; ++i) { direntry *d = sorted_dirlist[i]; Trace((stderr, "dir = %s\n", d->fn)); if ((error = set_direc_attribs(__G__ d)) != PK_OK) { ndirs_fail++; Info(slide, 0x201, ((char *)slide, LoadFarString(DirlistSetAttrFailed), d->fn)); if (!error_in_archive) error_in_archive = error; } free(d); } free(sorted_dirlist); if (!uO.tflag && QCOND2) { if (ndirs_fail > 0) Info(slide, 0, ((char *)slide, LoadFarString(DirlistFailAttrSum), ndirs_fail)); } } } #endif /* SET_DIR_ATTRIB */ /*--------------------------------------------------------------------------- Check for unmatched filespecs on command line and print warning if any found. Free allocated memory. (But suppress check when central dir scan was interrupted prematurely.) ---------------------------------------------------------------------------*/ if (fn_matched) { if (reached_end) for (i = 0; i < G.filespecs; ++i) if (!fn_matched[i]) { #ifdef DLL if (!G.redirect_data && !G.redirect_text) Info(slide, 0x401, ((char *)slide, LoadFarString(FilenameNotMatched), G.pfnames[i])); else setFileNotFound(__G); #else Info(slide, 1, ((char *)slide, LoadFarString(FilenameNotMatched), G.pfnames[i])); #endif if (error_in_archive <= PK_WARN) error_in_archive = PK_FIND; /* some files not found */ } free((zvoid *)fn_matched); } if (xn_matched) { if (reached_end) for (i = 0; i < G.xfilespecs; ++i) if (!xn_matched[i]) Info(slide, 0x401, ((char *)slide, LoadFarString(ExclFilenameNotMatched), G.pxnames[i])); free((zvoid *)xn_matched); } /*--------------------------------------------------------------------------- Now, all locally allocated memory has been released. When the central directory processing has been interrupted prematurely, it is safe to return immediately. All completeness checks and summary messages are skipped in this case. ---------------------------------------------------------------------------*/ if (!reached_end) return error_in_archive; /*--------------------------------------------------------------------------- Double-check that we're back at the end-of-central-directory record, and print quick summary of results, if we were just testing the archive. We send the summary to stdout so that people doing the testing in the back- ground and redirecting to a file can just do a "tail" on the output file. ---------------------------------------------------------------------------*/ #ifndef SFX if (no_endsig_found) { /* just to make sure */ Info(slide, 0x401, ((char *)slide, LoadFarString(EndSigMsg))); Info(slide, 0x401, ((char *)slide, LoadFarString(ReportMsg))); if (!error_in_archive) /* don't overwrite stronger error */ error_in_archive = PK_WARN; } #endif /* !SFX */ if (uO.tflag) { ulg num = filnum - num_bad_pwd; if (uO.qflag < 2) { /* GRR 930710: was (uO.qflag == 1) */ if (error_in_archive) Info(slide, 0, ((char *)slide, LoadFarString(ErrorInArchive), (error_in_archive == PK_WARN)? "warning-" : "", G.zipfn)); else if (num == 0L) Info(slide, 0, ((char *)slide, LoadFarString(ZeroFilesTested), G.zipfn)); else if (G.process_all_files && (num_skipped+num_bad_pwd == 0L)) Info(slide, 0, ((char *)slide, LoadFarString(NoErrInCompData), G.zipfn)); else Info(slide, 0, ((char *)slide, LoadFarString(NoErrInTestedFiles) , G.zipfn, num, (num==1L)? "":"s")); if (num_skipped > 0L) Info(slide, 0, ((char *)slide, LoadFarString(FilesSkipped), num_skipped, (num_skipped==1L)? "":"s")); #if CRYPT if (num_bad_pwd > 0L) Info(slide, 0, ((char *)slide, LoadFarString(FilesSkipBadPasswd) , num_bad_pwd, (num_bad_pwd==1L)? "":"s")); #endif /* CRYPT */ } } /* give warning if files not tested or extracted (first condition can still * happen if zipfile is empty and no files specified on command line) */ if ((filnum == 0) && error_in_archive <= PK_WARN) { if (num_skipped > 0L) error_in_archive = IZ_UNSUP; /* unsupport. compression/encryption */ else error_in_archive = PK_FIND; /* no files found at all */ } #if CRYPT else if ((filnum == num_bad_pwd) && error_in_archive <= PK_WARN) error_in_archive = IZ_BADPWD; /* bad passwd => all files skipped */ #endif else if ((num_skipped > 0L) && error_in_archive <= PK_WARN) error_in_archive = IZ_UNSUP; /* was PK_WARN; Jean-loup complained */ #if CRYPT else if ((num_bad_pwd > 0L) && !error_in_archive) error_in_archive = PK_WARN; #endif return error_in_archive; } /* end function extract_or_test_files() */ /***************************/ /* Function store_info() */ /***************************/ static int store_info(__G) /* return 0 if skipping, 1 if OK */ __GDEF { #ifdef USE_BZIP2 # define UNKN_BZ2 (G.crec.compression_method!=BZIPPED) #else # define UNKN_BZ2 TRUE /* bzip2 unknown */ #endif #ifdef USE_LZMA # define UNKN_LZMA (G.crec.compression_method!=LZMAED) #else # define UNKN_LZMA TRUE /* LZMA unknown */ #endif #ifdef USE_WAVP # define UNKN_WAVP (G.crec.compression_method!=WAVPACKED) #else # define UNKN_WAVP TRUE /* WavPack unknown */ #endif #ifdef USE_PPMD # define UNKN_PPMD (G.crec.compression_method!=PPMDED) #else # define UNKN_PPMD TRUE /* PPMd unknown */ #endif #ifdef SFX # ifdef USE_DEFLATE64 # define UNKN_COMPR \ (G.crec.compression_method!=STORED && G.crec.compression_methodENHDEFLATED \ && UNKN_BZ2 && UNKN_LZMA && UNKN_WAVP && UNKN_PPMD) # else # define UNKN_COMPR \ (G.crec.compression_method!=STORED && G.crec.compression_method!=DEFLATED\ && UNKN_BZ2 && UNKN_LZMA && UNKN_WAVP && UNKN_PPMD) # endif #else # ifdef COPYRIGHT_CLEAN /* no reduced files */ # define UNKN_RED (G.crec.compression_method >= REDUCED1 && \ G.crec.compression_method <= REDUCED4) # else # define UNKN_RED FALSE /* reducing not unknown */ # endif # ifdef LZW_CLEAN /* no shrunk files */ # define UNKN_SHR (G.crec.compression_method == SHRUNK) # else # define UNKN_SHR FALSE /* unshrinking not unknown */ # endif # ifdef USE_DEFLATE64 # define UNKN_COMPR (UNKN_RED || UNKN_SHR || \ G.crec.compression_method==TOKENIZED || \ (G.crec.compression_method>ENHDEFLATED && UNKN_BZ2 && UNKN_LZMA \ && UNKN_WAVP && UNKN_PPMD)) # else # define UNKN_COMPR (UNKN_RED || UNKN_SHR || \ G.crec.compression_method==TOKENIZED || \ (G.crec.compression_method>DEFLATED && UNKN_BZ2 && UNKN_LZMA \ && UNKN_WAVP && UNKN_PPMD)) # endif #endif #if (defined(USE_BZIP2) && (UNZIP_VERSION < UNZIP_BZ2VERS)) int unzvers_support = (UNKN_BZ2 ? UNZIP_VERSION : UNZIP_BZ2VERS); # define UNZVERS_SUPPORT unzvers_support #else # define UNZVERS_SUPPORT UNZIP_VERSION #endif /*--------------------------------------------------------------------------- Check central directory info for version/compatibility requirements. ---------------------------------------------------------------------------*/ G.pInfo->encrypted = G.crec.general_purpose_bit_flag & 1; /* bit field */ G.pInfo->ExtLocHdr = (G.crec.general_purpose_bit_flag & 8) == 8; /* bit */ G.pInfo->textfile = G.crec.internal_file_attributes & 1; /* bit field */ G.pInfo->crc = G.crec.crc32; G.pInfo->compr_size = G.crec.csize; G.pInfo->uncompr_size = G.crec.ucsize; switch (uO.aflag) { case 0: G.pInfo->textmode = FALSE; /* bit field */ break; case 1: G.pInfo->textmode = G.pInfo->textfile; /* auto-convert mode */ break; default: /* case 2: */ G.pInfo->textmode = TRUE; break; } if (G.crec.version_needed_to_extract[1] == VMS_) { if (G.crec.version_needed_to_extract[0] > VMS_UNZIP_VERSION) { if (!((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2))) Info(slide, 0x401, ((char *)slide, LoadFarString(VersionMsg), FnFilter1(G.filename), "VMS", G.crec.version_needed_to_extract[0] / 10, G.crec.version_needed_to_extract[0] % 10, VMS_UNZIP_VERSION / 10, VMS_UNZIP_VERSION % 10)); return 0; } #ifndef VMS /* won't be able to use extra field, but still have data */ else if (!uO.tflag && !IS_OVERWRT_ALL) { /* if -o, extract anyway */ Info(slide, 0x481, ((char *)slide, LoadFarString(VMSFormatQuery), FnFilter1(G.filename))); fgets(G.answerbuf, sizeof(G.answerbuf), stdin); if ((*G.answerbuf != 'y') && (*G.answerbuf != 'Y')) return 0; } #endif /* !VMS */ /* usual file type: don't need VMS to extract */ } else if (G.crec.version_needed_to_extract[0] > UNZVERS_SUPPORT) { if (!((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2))) Info(slide, 0x401, ((char *)slide, LoadFarString(VersionMsg), FnFilter1(G.filename), "PK", G.crec.version_needed_to_extract[0] / 10, G.crec.version_needed_to_extract[0] % 10, UNZVERS_SUPPORT / 10, UNZVERS_SUPPORT % 10)); return 0; } if (UNKN_COMPR) { if (!((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2))) { #ifndef SFX unsigned cmpridx; if ((cmpridx = find_compr_idx(G.crec.compression_method)) < NUM_METHODS) Info(slide, 0x401, ((char *)slide, LoadFarString(ComprMsgName), FnFilter1(G.filename), LoadFarStringSmall(ComprNames[cmpridx]))); else #endif Info(slide, 0x401, ((char *)slide, LoadFarString(ComprMsgNum), FnFilter1(G.filename), G.crec.compression_method)); } return 0; } #if (!CRYPT) if (G.pInfo->encrypted) { if (!((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2))) Info(slide, 0x401, ((char *)slide, LoadFarString(SkipEncrypted), FnFilter1(G.filename))); return 0; } #endif /* !CRYPT */ #ifndef SFX /* store a copy of the central header filename for later comparison */ if ((G.pInfo->cfilname = zfmalloc(strlen(G.filename) + 1)) == NULL) { Info(slide, 0x401, ((char *)slide, LoadFarString(WarnNoMemCFName), FnFilter1(G.filename))); } else zfstrcpy(G.pInfo->cfilname, G.filename); #endif /* !SFX */ /* map whatever file attributes we have into the local format */ mapattr(__G); /* GRR: worry about return value later */ G.pInfo->diskstart = G.crec.disk_number_start; G.pInfo->offset = (zoff_t)G.crec.relative_offset_local_header; return 1; } /* end function store_info() */ #ifndef SFX /*******************************/ /* Function find_compr_idx() */ /*******************************/ unsigned find_compr_idx(compr_methodnum) unsigned compr_methodnum; { unsigned i; for (i = 0; i < NUM_METHODS; i++) { if (ComprIDs[i] == compr_methodnum) break; } return i; } #endif /* !SFX */ /******************************************/ /* Function extract_or_test_entrylist() */ /******************************************/ static int extract_or_test_entrylist(__G__ numchunk, pfilnum, pnum_bad_pwd, pold_extra_bytes, #ifdef SET_DIR_ATTRIB pnum_dirs, pdirlist, #endif error_in_archive) /* return PK-type error code */ __GDEF unsigned numchunk; ulg *pfilnum; ulg *pnum_bad_pwd; zoff_t *pold_extra_bytes; #ifdef SET_DIR_ATTRIB unsigned *pnum_dirs; direntry **pdirlist; #endif int error_in_archive; { unsigned i; int renamed, query; int skip_entry; zoff_t bufstart, inbuf_offset, request; int error, errcode; /* possible values for local skip_entry flag: */ #define SKIP_NO 0 /* do not skip this entry */ #define SKIP_Y_EXISTING 1 /* skip this entry, do not overwrite file */ #define SKIP_Y_NONEXIST 2 /* skip this entry, do not create new file */ /*----------------------------------------------------------------------- Second loop: process files in current block, extracting or testing each one. -----------------------------------------------------------------------*/ for (i = 0; i < numchunk; ++i) { (*pfilnum)++; /* *pfilnum = i + blknum*DIR_BLKSIZ + 1; */ G.pInfo = &G.info[i]; #ifdef NOVELL_BUG_FAILSAFE G.dne = FALSE; /* assume file exists until stat() says otherwise */ #endif /* if the target position is not within the current input buffer * (either haven't yet read far enough, or (maybe) skipping back- * ward), skip to the target position and reset readbuf(). */ /* seek_zipf(__G__ pInfo->offset); */ request = G.pInfo->offset + G.extra_bytes; inbuf_offset = request % INBUFSIZ; bufstart = request - inbuf_offset; Trace((stderr, "\ndebug: request = %ld, inbuf_offset = %ld\n", (long)request, (long)inbuf_offset)); Trace((stderr, "debug: bufstart = %ld, cur_zipfile_bufstart = %ld\n", (long)bufstart, (long)G.cur_zipfile_bufstart)); if (request < 0) { Info(slide, 0x401, ((char *)slide, LoadFarStringSmall(SeekMsg), G.zipfn, LoadFarString(ReportMsg))); error_in_archive = PK_ERR; if (*pfilnum == 1 && G.extra_bytes != 0L) { Info(slide, 0x401, ((char *)slide, LoadFarString(AttemptRecompensate))); *pold_extra_bytes = G.extra_bytes; G.extra_bytes = 0L; request = G.pInfo->offset; /* could also check if != 0 */ inbuf_offset = request % INBUFSIZ; bufstart = request - inbuf_offset; Trace((stderr, "debug: request = %ld, inbuf_offset = %ld\n", (long)request, (long)inbuf_offset)); Trace((stderr, "debug: bufstart = %ld, cur_zipfile_bufstart = %ld\n", (long)bufstart, (long)G.cur_zipfile_bufstart)); /* try again */ if (request < 0) { Trace((stderr, "debug: recompensated request still < 0\n")); Info(slide, 0x401, ((char *)slide, LoadFarStringSmall(SeekMsg), G.zipfn, LoadFarString(ReportMsg))); error_in_archive = PK_BADERR; continue; } } else { error_in_archive = PK_BADERR; continue; /* this one hosed; try next */ } } if (bufstart != G.cur_zipfile_bufstart) { Trace((stderr, "debug: bufstart != cur_zipfile_bufstart\n")); #ifdef USE_STRM_INPUT zfseeko(G.zipfd, bufstart, SEEK_SET); G.cur_zipfile_bufstart = zftello(G.zipfd); #else /* !USE_STRM_INPUT */ G.cur_zipfile_bufstart = zlseek(G.zipfd, bufstart, SEEK_SET); #endif /* ?USE_STRM_INPUT */ if ((G.incnt = read(G.zipfd, (char *)G.inbuf, INBUFSIZ)) <= 0) { Info(slide, 0x401, ((char *)slide, LoadFarString(OffsetMsg), *pfilnum, "lseek", (long)bufstart)); error_in_archive = PK_BADERR; continue; /* can still do next file */ } G.inptr = G.inbuf + (int)inbuf_offset; G.incnt -= (int)inbuf_offset; } else { G.incnt += (int)(G.inptr-G.inbuf) - (int)inbuf_offset; G.inptr = G.inbuf + (int)inbuf_offset; } /* should be in proper position now, so check for sig */ if (readbuf(__G__ G.sig, 4) == 0) { /* bad offset */ Info(slide, 0x401, ((char *)slide, LoadFarString(OffsetMsg), *pfilnum, "EOF", (long)request)); error_in_archive = PK_BADERR; continue; /* but can still try next one */ } if (memcmp(G.sig, local_hdr_sig, 4)) { Info(slide, 0x401, ((char *)slide, LoadFarString(OffsetMsg), *pfilnum, LoadFarStringSmall(LocalHdrSig), (long)request)); /* GRRDUMP(G.sig, 4) GRRDUMP(local_hdr_sig, 4) */ error_in_archive = PK_ERR; if ((*pfilnum == 1 && G.extra_bytes != 0L) || (G.extra_bytes == 0L && *pold_extra_bytes != 0L)) { Info(slide, 0x401, ((char *)slide, LoadFarString(AttemptRecompensate))); if (G.extra_bytes) { *pold_extra_bytes = G.extra_bytes; G.extra_bytes = 0L; } else G.extra_bytes = *pold_extra_bytes; /* third attempt */ if (((error = seek_zipf(__G__ G.pInfo->offset)) != PK_OK) || (readbuf(__G__ G.sig, 4) == 0)) { /* bad offset */ if (error != PK_BADERR) Info(slide, 0x401, ((char *)slide, LoadFarString(OffsetMsg), *pfilnum, "EOF", (long)request)); error_in_archive = PK_BADERR; continue; /* but can still try next one */ } if (memcmp(G.sig, local_hdr_sig, 4)) { Info(slide, 0x401, ((char *)slide, LoadFarString(OffsetMsg), *pfilnum, LoadFarStringSmall(LocalHdrSig), (long)request)); error_in_archive = PK_BADERR; continue; } } else continue; /* this one hosed; try next */ } if ((error = process_local_file_hdr(__G)) != PK_COOL) { Info(slide, 0x421, ((char *)slide, LoadFarString(BadLocalHdr), *pfilnum)); error_in_archive = error; /* only PK_EOF defined */ continue; /* can still try next one */ } #if (!defined(SFX) && defined(UNICODE_SUPPORT)) if (((G.lrec.general_purpose_bit_flag & (1 << 11)) == (1 << 11)) != (G.pInfo->GPFIsUTF8 != 0)) { if (QCOND2) { # ifdef SMALL_MEM char *temp_cfilnam = slide + (7 * (WSIZE>>3)); zfstrcpy((char Far *)temp_cfilnam, G.pInfo->cfilname); # define cFile_PrintBuf temp_cfilnam # else # define cFile_PrintBuf G.pInfo->cfilname # endif Info(slide, 0x421, ((char *)slide, LoadFarStringSmall2(GP11FlagsDiffer), *pfilnum, FnFilter1(cFile_PrintBuf), G.pInfo->GPFIsUTF8)); # undef cFile_PrintBuf } if (error_in_archive < PK_WARN) error_in_archive = PK_WARN; } #endif /* !SFX && UNICODE_SUPPORT */ if ((error = do_string(__G__ G.lrec.filename_length, DS_FN_L)) != PK_COOL) { if (error > error_in_archive) error_in_archive = error; if (error > PK_WARN) { Info(slide, 0x401, ((char *)slide, LoadFarString(FilNamMsg), FnFilter1(G.filename), "local")); continue; /* go on to next one */ } } if (G.extra_field != (uch *)NULL) { free(G.extra_field); G.extra_field = (uch *)NULL; } if ((error = do_string(__G__ G.lrec.extra_field_length, EXTRA_FIELD)) != 0) { if (error > error_in_archive) error_in_archive = error; if (error > PK_WARN) { Info(slide, 0x401, ((char *)slide, LoadFarString(ExtFieldMsg), FnFilter1(G.filename), "local")); continue; /* go on */ } } #ifndef SFX /* Filename consistency checks must come after reading in the local * extra field, so that a UTF-8 entry name e.f. block has already * been processed. */ if (G.pInfo->cfilname != (char Far *)NULL) { if (zfstrcmp(G.pInfo->cfilname, G.filename) != 0) { # ifdef SMALL_MEM char *temp_cfilnam = slide + (7 * (WSIZE>>3)); zfstrcpy((char Far *)temp_cfilnam, G.pInfo->cfilname); # define cFile_PrintBuf temp_cfilnam # else # define cFile_PrintBuf G.pInfo->cfilname # endif Info(slide, 0x401, ((char *)slide, LoadFarStringSmall2(LvsCFNamMsg), FnFilter2(cFile_PrintBuf), FnFilter1(G.filename))); # undef cFile_PrintBuf zfstrcpy(G.filename, G.pInfo->cfilname); if (error_in_archive < PK_WARN) error_in_archive = PK_WARN; } zffree(G.pInfo->cfilname); G.pInfo->cfilname = (char Far *)NULL; } #endif /* !SFX */ /* Size consistency checks must come after reading in the local extra * field, so that any Zip64 extension local e.f. block has already * been processed. */ if (G.lrec.compression_method == STORED) { zusz_t csiz_decrypted = G.lrec.csize; if (G.pInfo->encrypted) csiz_decrypted -= 12; if (G.lrec.ucsize != csiz_decrypted) { Info(slide, 0x401, ((char *)slide, LoadFarStringSmall2(WrnStorUCSizCSizDiff), FnFilter1(G.filename), FmZofft(G.lrec.ucsize, NULL, "u"), FmZofft(csiz_decrypted, NULL, "u"))); G.lrec.ucsize = csiz_decrypted; if (error_in_archive < PK_WARN) error_in_archive = PK_WARN; } } #if CRYPT if (G.pInfo->encrypted && (error = decrypt(__G__ uO.pwdarg)) != PK_COOL) { if (error == PK_WARN) { if (!((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2))) Info(slide, 0x401, ((char *)slide, LoadFarString(SkipIncorrectPasswd), FnFilter1(G.filename))); ++(*pnum_bad_pwd); } else { /* (error > PK_WARN) */ if (error > error_in_archive) error_in_archive = error; Info(slide, 0x401, ((char *)slide, LoadFarString(SkipCannotGetPasswd), FnFilter1(G.filename))); } continue; /* go on to next file */ } #endif /* CRYPT */ /* * just about to extract file: if extracting to disk, check if * already exists, and if so, take appropriate action according to * fflag/uflag/overwrite_all/etc. (we couldn't do this in upper * loop because we don't store the possibly renamed filename[] in * info[]) */ #ifdef DLL if (!uO.tflag && !uO.cflag && !G.redirect_data) #else if (!uO.tflag && !uO.cflag) #endif { renamed = FALSE; /* user hasn't renamed output file yet */ startover: query = FALSE; skip_entry = SKIP_NO; /* for files from DOS FAT, check for use of backslash instead * of slash as directory separator (bug in some zipper(s); so * far, not a problem in HPFS, NTFS or VFAT systems) */ #ifndef SFX if (G.pInfo->hostnum == FS_FAT_ && !MBSCHR(G.filename, '/')) { char *p=G.filename; if (*p) do { if (*p == '\\') { if (!G.reported_backslash) { Info(slide, 0x21, ((char *)slide, LoadFarString(BackslashPathSep), G.zipfn)); G.reported_backslash = TRUE; if (!error_in_archive) error_in_archive = PK_WARN; } *p = '/'; } } while (*PREINCSTR(p)); } #endif /* !SFX */ if (!renamed) { /* remove absolute path specs */ if (G.filename[0] == '/') { Info(slide, 0x401, ((char *)slide, LoadFarString(AbsolutePathWarning), FnFilter1(G.filename))); if (!error_in_archive) error_in_archive = PK_WARN; do { char *p = G.filename + 1; do { *(p-1) = *p; } while (*p++ != '\0'); } while (G.filename[0] == '/'); } } /* mapname can create dirs if not freshening or if renamed */ error = mapname(__G__ renamed); if ((errcode = error & ~MPN_MASK) != PK_OK && error_in_archive < errcode) error_in_archive = errcode; if ((errcode = error & MPN_MASK) > MPN_INF_TRUNC) { if (errcode == MPN_CREATED_DIR) { #ifdef SET_DIR_ATTRIB direntry *d_entry; error = defer_dir_attribs(__G__ &d_entry); if (d_entry == (direntry *)NULL) { /* There may be no dir_attribs info available, or * we have encountered a mem allocation error. * In case of an error, report it and set program * error state to warning level. */ if (error) { Info(slide, 0x401, ((char *)slide, LoadFarString(DirlistEntryNoMem))); if (!error_in_archive) error_in_archive = PK_WARN; } } else { d_entry->next = (*pdirlist); (*pdirlist) = d_entry; ++(*pnum_dirs); } #endif /* SET_DIR_ATTRIB */ } else if (errcode == MPN_VOL_LABEL) { #ifdef DOS_OS2_W32 Info(slide, 0x401, ((char *)slide, LoadFarString(SkipVolumeLabel), FnFilter1(G.filename), uO.volflag? "hard disk " : "")); #else Info(slide, 1, ((char *)slide, LoadFarString(SkipVolumeLabel), FnFilter1(G.filename), "")); #endif } else if (errcode > MPN_INF_SKIP && error_in_archive < PK_ERR) error_in_archive = PK_ERR; Trace((stderr, "mapname(%s) returns error code = %d\n", FnFilter1(G.filename), error)); continue; /* go on to next file */ } #ifdef QDOS QFilename(__G__ G.filename); #endif switch (check_for_newer(__G__ G.filename)) { case DOES_NOT_EXIST: #ifdef NOVELL_BUG_FAILSAFE G.dne = TRUE; /* stat() says file DOES NOT EXIST */ #endif /* freshen (no new files): skip unless just renamed */ if (uO.fflag && !renamed) skip_entry = SKIP_Y_NONEXIST; break; case EXISTS_AND_OLDER: #ifdef UNIXBACKUP if (!uO.B_flag) #endif { if (IS_OVERWRT_NONE) /* never overwrite: skip file */ skip_entry = SKIP_Y_EXISTING; else if (!IS_OVERWRT_ALL) query = TRUE; } break; case EXISTS_AND_NEWER: /* (or equal) */ #ifdef UNIXBACKUP if ((!uO.B_flag && IS_OVERWRT_NONE) || #else if (IS_OVERWRT_NONE || #endif (uO.uflag && !renamed)) { /* skip if update/freshen & orig name */ skip_entry = SKIP_Y_EXISTING; } else { #ifdef UNIXBACKUP if (!IS_OVERWRT_ALL && !uO.B_flag) #else if (!IS_OVERWRT_ALL) #endif query = TRUE; } break; } #ifdef VMS /* 2008-07-24 SMS. * On VMS, if the file name includes a version number, * and "-V" ("retain VMS version numbers", V_flag) is in * effect, then the VMS-specific code will handle any * conflicts with an existing file, making this query * redundant. (Implicit "y" response here.) */ if (query && uO.V_flag) { /* Not discarding file versions. Look for one. */ int cndx = strlen(G.filename) - 1; while ((cndx > 0) && (isdigit(G.filename[cndx]))) cndx--; if (G.filename[cndx] == ';') /* File version found; skip the generic query, * proceeding with its default response "y". */ query = FALSE; } #endif /* VMS */ if (query) { #ifdef WINDLL switch (G.lpUserFunctions->replace != NULL ? (*G.lpUserFunctions->replace)(G.filename, FILNAMSIZ) : IDM_REPLACE_NONE) { case IDM_REPLACE_RENAME: _ISO_INTERN(G.filename); renamed = TRUE; goto startover; case IDM_REPLACE_ALL: G.overwrite_mode = OVERWRT_ALWAYS; /* FALL THROUGH, extract */ case IDM_REPLACE_YES: break; case IDM_REPLACE_NONE: G.overwrite_mode = OVERWRT_NEVER; /* FALL THROUGH, skip */ case IDM_REPLACE_NO: skip_entry = SKIP_Y_EXISTING; break; } #else /* !WINDLL */ extent fnlen; reprompt: Info(slide, 0x81, ((char *)slide, LoadFarString(ReplaceQuery), FnFilter1(G.filename))); if (fgets(G.answerbuf, sizeof(G.answerbuf), stdin) == (char *)NULL) { Info(slide, 1, ((char *)slide, LoadFarString(AssumeNone))); *G.answerbuf = 'N'; if (!error_in_archive) error_in_archive = 1; /* not extracted: warning */ } switch (*G.answerbuf) { case 'r': case 'R': do { Info(slide, 0x81, ((char *)slide, LoadFarString(NewNameQuery))); fgets(G.filename, FILNAMSIZ, stdin); /* usually get \n here: better check for it */ fnlen = strlen(G.filename); if (lastchar(G.filename, fnlen) == '\n') G.filename[--fnlen] = '\0'; } while (fnlen == 0); #ifdef WIN32 /* WIN32 fgets( ... , stdin) returns OEM coded strings */ _OEM_INTERN(G.filename); #endif renamed = TRUE; goto startover; /* sorry for a goto */ case 'A': /* dangerous option: force caps */ G.overwrite_mode = OVERWRT_ALWAYS; /* FALL THROUGH, extract */ case 'y': case 'Y': break; case 'N': G.overwrite_mode = OVERWRT_NEVER; /* FALL THROUGH, skip */ case 'n': /* skip file */ skip_entry = SKIP_Y_EXISTING; break; case '\n': case '\r': /* Improve echo of '\n' and/or '\r' (sizeof(G.answerbuf) == 10 (see globals.h), so there is enough space for the provided text...) */ strcpy(G.answerbuf, "{ENTER}"); /* fall through ... */ default: /* usually get \n here: remove it for nice display (fnlen can be re-used here, we are outside the "enter new filename" loop) */ fnlen = strlen(G.answerbuf); if (lastchar(G.answerbuf, fnlen) == '\n') G.answerbuf[--fnlen] = '\0'; Info(slide, 1, ((char *)slide, LoadFarString(InvalidResponse), G.answerbuf)); goto reprompt; /* yet another goto? */ } /* end switch (*answerbuf) */ #endif /* ?WINDLL */ } /* end if (query) */ if (skip_entry != SKIP_NO) { #ifdef WINDLL if (skip_entry == SKIP_Y_EXISTING) { /* report skipping of an existing entry */ Info(slide, 0, ((char *)slide, ((IS_OVERWRT_NONE || !uO.uflag || renamed) ? "Target file exists. Skipping %s\n" : "Target file newer. Skipping %s\n"), FnFilter1(G.filename))); } #endif /* WINDLL */ continue; } } /* end if (extracting to disk) */ #ifdef DLL if ((G.statreportcb != NULL) && (*G.statreportcb)(__G__ UZ_ST_START_EXTRACT, G.zipfn, G.filename, NULL)) { return IZ_CTRLC; /* cancel operation by user request */ } #endif #ifdef MACOS /* MacOS is no preemptive OS, thus call event-handling by hand */ UserStop(); #endif #ifdef AMIGA G.filenote_slot = i; #endif G.disk_full = 0; if ((error = extract_or_test_member(__G)) != PK_COOL) { if (error > error_in_archive) error_in_archive = error; /* ...and keep going */ #ifdef DLL if (G.disk_full > 1 || error_in_archive == IZ_CTRLC) { #else if (G.disk_full > 1) { #endif return error_in_archive; /* (unless disk full) */ } } #ifdef DLL if ((G.statreportcb != NULL) && (*G.statreportcb)(__G__ UZ_ST_FINISH_MEMBER, G.zipfn, G.filename, (zvoid *)&G.lrec.ucsize)) { return IZ_CTRLC; /* cancel operation by user request */ } #endif #ifdef MACOS /* MacOS is no preemptive OS, thus call event-handling by hand */ UserStop(); #endif } /* end for-loop (i: files in current block) */ return error_in_archive; } /* end function extract_or_test_entrylist() */ /* wsize is used in extract_or_test_member() and UZbunzip2() */ #if (defined(DLL) && !defined(NO_SLIDE_REDIR)) # define wsize G._wsize /* wsize is a variable */ #else # define wsize WSIZE /* wsize is a constant */ #endif /***************************************/ /* Function extract_or_test_member() */ /***************************************/ static int extract_or_test_member(__G) /* return PK-type error code */ __GDEF { char *nul="[empty] ", *txt="[text] ", *bin="[binary]"; #ifdef CMS_MVS char *ebc="[ebcdic]"; #endif register int b; int r, error=PK_COOL; /*--------------------------------------------------------------------------- Initialize variables, buffers, etc. ---------------------------------------------------------------------------*/ G.bits_left = 0; G.bitbuf = 0L; /* unreduce and unshrink only */ G.zipeof = 0; G.newfile = TRUE; G.crc32val = CRCVAL_INITIAL; #ifdef SYMLINKS /* If file is a (POSIX-compatible) symbolic link and we are extracting * to disk, prepare to restore the link. */ G.symlnk = (G.pInfo->symlink && !uO.tflag && !uO.cflag && (G.lrec.ucsize > 0)); #endif /* SYMLINKS */ if (uO.tflag) { if (!uO.qflag) Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg), "test", FnFilter1(G.filename), "", "")); } else { #ifdef DLL if (uO.cflag && !G.redirect_data) #else if (uO.cflag) #endif { #if (defined(OS2) && defined(__IBMC__) && (__IBMC__ >= 200)) G.outfile = freopen("", "wb", stdout); /* VAC++ ignores setmode */ #else G.outfile = stdout; #endif #ifdef DOS_FLX_NLM_OS2_W32 #if (defined(__HIGHC__) && !defined(FLEXOS)) setmode(G.outfile, _BINARY); #else /* !(defined(__HIGHC__) && !defined(FLEXOS)) */ setmode(fileno(G.outfile), O_BINARY); #endif /* ?(defined(__HIGHC__) && !defined(FLEXOS)) */ # define NEWLINE "\r\n" #else /* !DOS_FLX_NLM_OS2_W32 */ # define NEWLINE "\n" #endif /* ?DOS_FLX_NLM_OS2_W32 */ #ifdef VMS /* VMS: required even for stdout! */ if ((r = open_outfile(__G)) != 0) switch (r) { case OPENOUT_SKIPOK: return PK_OK; case OPENOUT_SKIPWARN: return PK_WARN; default: return PK_DISK; } } else if ((r = open_outfile(__G)) != 0) switch (r) { case OPENOUT_SKIPOK: return PK_OK; case OPENOUT_SKIPWARN: return PK_WARN; default: return PK_DISK; } #else /* !VMS */ } else if (open_outfile(__G)) return PK_DISK; #endif /* ?VMS */ } /*--------------------------------------------------------------------------- Unpack the file. ---------------------------------------------------------------------------*/ defer_leftover_input(__G); /* so NEXTBYTE bounds check will work */ switch (G.lrec.compression_method) { case STORED: if (!uO.tflag && QCOND2) { #ifdef SYMLINKS if (G.symlnk) /* can also be deflated, but rarer... */ Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg), "link", FnFilter1(G.filename), "", "")); else #endif /* SYMLINKS */ Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg), "extract", FnFilter1(G.filename), (uO.aflag != 1 /* && G.pInfo->textfile==G.pInfo->textmode */)? "" : (G.lrec.ucsize == 0L? nul : (G.pInfo->textfile? txt : bin)), uO.cflag? NEWLINE : "")); } #if (defined(DLL) && !defined(NO_SLIDE_REDIR)) if (G.redirect_slide) { wsize = G.redirect_size; redirSlide = G.redirect_buffer; } else { wsize = WSIZE; redirSlide = slide; } #endif G.outptr = redirSlide; G.outcnt = 0L; while ((b = NEXTBYTE) != EOF) { *G.outptr++ = (uch)b; if (++G.outcnt == wsize) { error = flush(__G__ redirSlide, G.outcnt, 0); G.outptr = redirSlide; G.outcnt = 0L; if (error != PK_COOL || G.disk_full) break; } } if (G.outcnt) { /* flush final (partial) buffer */ r = flush(__G__ redirSlide, G.outcnt, 0); if (error < r) error = r; } break; #ifndef SFX #ifndef LZW_CLEAN case SHRUNK: if (!uO.tflag && QCOND2) { Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg), LoadFarStringSmall(Unshrink), FnFilter1(G.filename), (uO.aflag != 1 /* && G.pInfo->textfile==G.pInfo->textmode */)? "" : (G.pInfo->textfile? txt : bin), uO.cflag? NEWLINE : "")); } if ((r = unshrink(__G)) != PK_COOL) { if (r < PK_DISK) { if ((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2)) Info(slide, 0x401, ((char *)slide, LoadFarStringSmall(ErrUnzipFile), r == PK_MEM3 ? LoadFarString(NotEnoughMem) : LoadFarString(InvalidComprData), LoadFarStringSmall2(Unshrink), FnFilter1(G.filename))); else Info(slide, 0x401, ((char *)slide, LoadFarStringSmall(ErrUnzipNoFile), r == PK_MEM3 ? LoadFarString(NotEnoughMem) : LoadFarString(InvalidComprData), LoadFarStringSmall2(Unshrink))); } error = r; } break; #endif /* !LZW_CLEAN */ #ifndef COPYRIGHT_CLEAN case REDUCED1: case REDUCED2: case REDUCED3: case REDUCED4: if (!uO.tflag && QCOND2) { Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg), "unreduc", FnFilter1(G.filename), (uO.aflag != 1 /* && G.pInfo->textfile==G.pInfo->textmode */)? "" : (G.pInfo->textfile? txt : bin), uO.cflag? NEWLINE : "")); } if ((r = unreduce(__G)) != PK_COOL) { /* unreduce() returns only PK_COOL, PK_DISK, or IZ_CTRLC */ error = r; } break; #endif /* !COPYRIGHT_CLEAN */ case IMPLODED: if (!uO.tflag && QCOND2) { Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg), "explod", FnFilter1(G.filename), (uO.aflag != 1 /* && G.pInfo->textfile==G.pInfo->textmode */)? "" : (G.pInfo->textfile? txt : bin), uO.cflag? NEWLINE : "")); } if ((r = explode(__G)) != 0) { if (r == 5) { /* treat 5 specially */ int warning = ((zusz_t)G.used_csize <= G.lrec.csize); if ((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2)) Info(slide, 0x401, ((char *)slide, LoadFarString(LengthMsg), "", warning ? "warning" : "error", FmZofft(G.used_csize, NULL, NULL), FmZofft(G.lrec.ucsize, NULL, "u"), warning ? " " : "", FmZofft(G.lrec.csize, NULL, "u"), " [", FnFilter1(G.filename), "]")); else Info(slide, 0x401, ((char *)slide, LoadFarString(LengthMsg), "\n", warning ? "warning" : "error", FmZofft(G.used_csize, NULL, NULL), FmZofft(G.lrec.ucsize, NULL, "u"), warning ? " " : "", FmZofft(G.lrec.csize, NULL, "u"), "", "", ".")); error = warning ? PK_WARN : PK_ERR; } else if (r < PK_DISK) { if ((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2)) Info(slide, 0x401, ((char *)slide, LoadFarStringSmall(ErrUnzipFile), r == 3? LoadFarString(NotEnoughMem) : LoadFarString(InvalidComprData), LoadFarStringSmall2(Explode), FnFilter1(G.filename))); else Info(slide, 0x401, ((char *)slide, LoadFarStringSmall(ErrUnzipNoFile), r == 3? LoadFarString(NotEnoughMem) : LoadFarString(InvalidComprData), LoadFarStringSmall2(Explode))); error = ((r == 3) ? PK_MEM3 : PK_ERR); } else { error = r; } } break; #endif /* !SFX */ case DEFLATED: #ifdef USE_DEFLATE64 case ENHDEFLATED: #endif if (!uO.tflag && QCOND2) { Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg), "inflat", FnFilter1(G.filename), (uO.aflag != 1 /* && G.pInfo->textfile==G.pInfo->textmode */)? "" : (G.pInfo->textfile? txt : bin), uO.cflag? NEWLINE : "")); } #ifndef USE_ZLIB /* zlib's function is called inflate(), too */ # define UZinflate inflate #endif if ((r = UZinflate(__G__ (G.lrec.compression_method == ENHDEFLATED))) != 0) { if (r < PK_DISK) { if ((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2)) Info(slide, 0x401, ((char *)slide, LoadFarStringSmall(ErrUnzipFile), r == 3? LoadFarString(NotEnoughMem) : LoadFarString(InvalidComprData), LoadFarStringSmall2(Inflate), FnFilter1(G.filename))); else Info(slide, 0x401, ((char *)slide, LoadFarStringSmall(ErrUnzipNoFile), r == 3? LoadFarString(NotEnoughMem) : LoadFarString(InvalidComprData), LoadFarStringSmall2(Inflate))); error = ((r == 3) ? PK_MEM3 : PK_ERR); } else { error = r; } } break; #ifdef USE_BZIP2 case BZIPPED: if (!uO.tflag && QCOND2) { Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg), "bunzipp", FnFilter1(G.filename), (uO.aflag != 1 /* && G.pInfo->textfile==G.pInfo->textmode */)? "" : (G.pInfo->textfile? txt : bin), uO.cflag? NEWLINE : "")); } if ((r = UZbunzip2(__G)) != 0) { if (r < PK_DISK) { if ((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2)) Info(slide, 0x401, ((char *)slide, LoadFarStringSmall(ErrUnzipFile), r == 3? LoadFarString(NotEnoughMem) : LoadFarString(InvalidComprData), LoadFarStringSmall2(BUnzip), FnFilter1(G.filename))); else Info(slide, 0x401, ((char *)slide, LoadFarStringSmall(ErrUnzipNoFile), r == 3? LoadFarString(NotEnoughMem) : LoadFarString(InvalidComprData), LoadFarStringSmall2(BUnzip))); error = ((r == 3) ? PK_MEM3 : PK_ERR); } else { error = r; } } break; #endif /* USE_BZIP2 */ default: /* should never get to this point */ Info(slide, 0x401, ((char *)slide, LoadFarString(FileUnknownCompMethod), FnFilter1(G.filename))); /* close and delete file before return? */ undefer_input(__G); return PK_WARN; } /* end switch (compression method) */ /*--------------------------------------------------------------------------- Close the file and set its date and time (not necessarily in that order), and make sure the CRC checked out OK. Logical-AND the CRC for 64-bit machines (redundant on 32-bit machines). ---------------------------------------------------------------------------*/ #ifdef VMS /* VMS: required even for stdout! (final flush) */ if (!uO.tflag) /* don't close NULL file */ close_outfile(__G); #else #ifdef DLL if (!uO.tflag && (!uO.cflag || G.redirect_data)) { if (G.redirect_data) FINISH_REDIRECT(); else close_outfile(__G); } #else if (!uO.tflag && !uO.cflag) /* don't close NULL file or stdout */ close_outfile(__G); #endif #endif /* VMS */ /* GRR: CONVERT close_outfile() TO NON-VOID: CHECK FOR ERRORS! */ if (G.disk_full) { /* set by flush() */ if (G.disk_full > 1) { #if (defined(DELETE_IF_FULL) && defined(HAVE_UNLINK)) /* delete the incomplete file if we can */ if (unlink(G.filename) != 0) Trace((stderr, "extract.c: could not delete %s\n", FnFilter1(G.filename))); #else /* warn user about the incomplete file */ Info(slide, 0x421, ((char *)slide, LoadFarString(FileTruncated), FnFilter1(G.filename))); #endif error = PK_DISK; } else { error = PK_WARN; } } if (error > PK_WARN) {/* don't print redundant CRC error if error already */ undefer_input(__G); return error; } if (G.crc32val != G.lrec.crc32) { /* if quiet enough, we haven't output the filename yet: do it */ if ((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2)) Info(slide, 0x401, ((char *)slide, "%-22s ", FnFilter1(G.filename))); Info(slide, 0x401, ((char *)slide, LoadFarString(BadCRC), G.crc32val, G.lrec.crc32)); #if CRYPT if (G.pInfo->encrypted) Info(slide, 0x401, ((char *)slide, LoadFarString(MaybeBadPasswd))); #endif error = PK_ERR; } else if (uO.tflag) { #ifndef SFX if (G.extra_field) { if ((r = TestExtraField(__G__ G.extra_field, G.lrec.extra_field_length)) > error) error = r; } else #endif /* !SFX */ if (!uO.qflag) Info(slide, 0, ((char *)slide, " OK\n")); } else { if (QCOND2 && !error) /* GRR: is stdout reset to text mode yet? */ Info(slide, 0, ((char *)slide, "\n")); } undefer_input(__G); return error; } /* end function extract_or_test_member() */ #ifndef SFX /*******************************/ /* Function TestExtraField() */ /*******************************/ static int TestExtraField(__G__ ef, ef_len) __GDEF uch *ef; unsigned ef_len; { ush ebID; unsigned ebLen; unsigned eb_cmpr_offs = 0; int r; /* we know the regular compressed file data tested out OK, or else we * wouldn't be here ==> print filename if any extra-field errors found */ while (ef_len >= EB_HEADSIZE) { ebID = makeword(ef); ebLen = (unsigned)makeword(ef+EB_LEN); if (ebLen > (ef_len - EB_HEADSIZE)) { /* Discovered some extra field inconsistency! */ if (uO.qflag) Info(slide, 1, ((char *)slide, "%-22s ", FnFilter1(G.filename))); Info(slide, 1, ((char *)slide, LoadFarString(InconsistEFlength), ebLen, (ef_len - EB_HEADSIZE))); return PK_ERR; } switch (ebID) { case EF_OS2: case EF_ACL: case EF_MAC3: case EF_BEOS: case EF_ATHEOS: switch (ebID) { case EF_OS2: case EF_ACL: eb_cmpr_offs = EB_OS2_HLEN; break; case EF_MAC3: if (ebLen >= EB_MAC3_HLEN && (makeword(ef+(EB_HEADSIZE+EB_FLGS_OFFS)) & EB_M3_FL_UNCMPR) && (makelong(ef+EB_HEADSIZE) == ebLen - EB_MAC3_HLEN)) eb_cmpr_offs = 0; else eb_cmpr_offs = EB_MAC3_HLEN; break; case EF_BEOS: case EF_ATHEOS: if (ebLen >= EB_BEOS_HLEN && (*(ef+(EB_HEADSIZE+EB_FLGS_OFFS)) & EB_BE_FL_UNCMPR) && (makelong(ef+EB_HEADSIZE) == ebLen - EB_BEOS_HLEN)) eb_cmpr_offs = 0; else eb_cmpr_offs = EB_BEOS_HLEN; break; } if ((r = test_compr_eb(__G__ ef, ebLen, eb_cmpr_offs, NULL)) != PK_OK) { if (uO.qflag) Info(slide, 1, ((char *)slide, "%-22s ", FnFilter1(G.filename))); switch (r) { case IZ_EF_TRUNC: Info(slide, 1, ((char *)slide, LoadFarString(TruncEAs), ebLen-(eb_cmpr_offs+EB_CMPRHEADLEN), "\n")); break; case PK_ERR: Info(slide, 1, ((char *)slide, LoadFarString(InvalidComprDataEAs))); break; case PK_MEM3: case PK_MEM4: Info(slide, 1, ((char *)slide, LoadFarString(NotEnoughMemEAs))); break; default: if ((r & 0xff) != PK_ERR) Info(slide, 1, ((char *)slide, LoadFarString(UnknErrorEAs))); else { ush m = (ush)(r >> 8); if (m == DEFLATED) /* GRR KLUDGE! */ Info(slide, 1, ((char *)slide, LoadFarString(BadCRC_EAs))); else Info(slide, 1, ((char *)slide, LoadFarString(UnknComprMethodEAs), m)); } break; } return r; } break; case EF_NTSD: Trace((stderr, "ebID: %i / ebLen: %u\n", ebID, ebLen)); r = ebLen < EB_NTSD_L_LEN ? IZ_EF_TRUNC : ((ef[EB_HEADSIZE+EB_NTSD_VERSION] > EB_NTSD_MAX_VER) ? (PK_WARN | 0x4000) : test_compr_eb(__G__ ef, ebLen, EB_NTSD_L_LEN, TEST_NTSD)); if (r != PK_OK) { if (uO.qflag) Info(slide, 1, ((char *)slide, "%-22s ", FnFilter1(G.filename))); switch (r) { case IZ_EF_TRUNC: Info(slide, 1, ((char *)slide, LoadFarString(TruncNTSD), ebLen-(EB_NTSD_L_LEN+EB_CMPRHEADLEN), "\n")); break; #if (defined(WIN32) && defined(NTSD_EAS)) case PK_WARN: Info(slide, 1, ((char *)slide, LoadFarString(InvalidSecurityEAs))); break; #endif case PK_ERR: Info(slide, 1, ((char *)slide, LoadFarString(InvalidComprDataEAs))); break; case PK_MEM3: case PK_MEM4: Info(slide, 1, ((char *)slide, LoadFarString(NotEnoughMemEAs))); break; case (PK_WARN | 0x4000): Info(slide, 1, ((char *)slide, LoadFarString(UnsuppNTSDVersEAs), (int)ef[EB_HEADSIZE+EB_NTSD_VERSION])); r = PK_WARN; break; default: if ((r & 0xff) != PK_ERR) Info(slide, 1, ((char *)slide, LoadFarString(UnknErrorEAs))); else { ush m = (ush)(r >> 8); if (m == DEFLATED) /* GRR KLUDGE! */ Info(slide, 1, ((char *)slide, LoadFarString(BadCRC_EAs))); else Info(slide, 1, ((char *)slide, LoadFarString(UnknComprMethodEAs), m)); } break; } return r; } break; case EF_PKVMS: if (makelong(ef+EB_HEADSIZE) != crc32(CRCVAL_INITIAL, ef+(EB_HEADSIZE+4), (extent)(ebLen-4))) Info(slide, 1, ((char *)slide, LoadFarString(BadCRC_EAs))); break; case EF_PKW32: case EF_PKUNIX: case EF_ASIUNIX: case EF_IZVMS: case EF_IZUNIX: case EF_VMCMS: case EF_MVS: case EF_SPARK: case EF_TANDEM: case EF_THEOS: case EF_AV: default: break; } ef_len -= (ebLen + EB_HEADSIZE); ef += (ebLen + EB_HEADSIZE); } if (!uO.qflag) Info(slide, 0, ((char *)slide, " OK\n")); return PK_COOL; } /* end function TestExtraField() */ /******************************/ /* Function test_compr_eb() */ /******************************/ #ifdef PROTO static int test_compr_eb( __GPRO__ uch *eb, unsigned eb_size, unsigned compr_offset, int (*test_uc_ebdata)(__GPRO__ uch *eb, unsigned eb_size, uch *eb_ucptr, ulg eb_ucsize)) #else /* !PROTO */ static int test_compr_eb(__G__ eb, eb_size, compr_offset, test_uc_ebdata) __GDEF uch *eb; unsigned eb_size; unsigned compr_offset; int (*test_uc_ebdata)(); #endif /* ?PROTO */ { ulg eb_ucsize; uch *eb_ucptr; int r; if (compr_offset < 4) /* field is not compressed: */ return PK_OK; /* do nothing and signal OK */ if ((eb_size < (EB_UCSIZE_P + 4)) || ((eb_ucsize = makelong(eb+(EB_HEADSIZE+EB_UCSIZE_P))) > 0L && eb_size <= (compr_offset + EB_CMPRHEADLEN))) return IZ_EF_TRUNC; /* no compressed data! */ if ( #ifdef INT_16BIT (((ulg)(extent)eb_ucsize) != eb_ucsize) || #endif (eb_ucptr = (uch *)malloc((extent)eb_ucsize)) == (uch *)NULL) return PK_MEM4; r = memextract(__G__ eb_ucptr, eb_ucsize, eb + (EB_HEADSIZE + compr_offset), (ulg)(eb_size - compr_offset)); if (r == PK_OK && test_uc_ebdata != NULL) r = (*test_uc_ebdata)(__G__ eb, eb_size, eb_ucptr, eb_ucsize); free(eb_ucptr); return r; } /* end function test_compr_eb() */ #endif /* !SFX */ /***************************/ /* Function memextract() */ /***************************/ int memextract(__G__ tgt, tgtsize, src, srcsize) /* extract compressed */ __GDEF /* extra field block; */ uch *tgt; /* return PK-type error */ ulg tgtsize; /* level */ ZCONST uch *src; ulg srcsize; { zoff_t old_csize=G.csize; uch *old_inptr=G.inptr; int old_incnt=G.incnt; int r, error=PK_OK; ush method; ulg extra_field_crc; method = makeword(src); extra_field_crc = makelong(src+2); /* compressed extra field exists completely in memory at this location: */ G.inptr = (uch *)src + (2 + 4); /* method and extra_field_crc */ G.incnt = (int)(G.csize = (long)(srcsize - (2 + 4))); G.mem_mode = TRUE; G.outbufptr = tgt; G.outsize = tgtsize; switch (method) { case STORED: memcpy((char *)tgt, (char *)G.inptr, (extent)G.incnt); G.outcnt = (ulg)G.csize; /* for CRC calculation */ break; case DEFLATED: #ifdef USE_DEFLATE64 case ENHDEFLATED: #endif G.outcnt = 0L; if ((r = UZinflate(__G__ (method == ENHDEFLATED))) != 0) { if (!uO.tflag) Info(slide, 0x401, ((char *)slide, LoadFarStringSmall(ErrUnzipNoFile), r == 3? LoadFarString(NotEnoughMem) : LoadFarString(InvalidComprData), LoadFarStringSmall2(Inflate))); error = (r == 3)? PK_MEM3 : PK_ERR; } if (G.outcnt == 0L) /* inflate's final FLUSH sets outcnt */ break; break; default: if (uO.tflag) error = PK_ERR | ((int)method << 8); else { Info(slide, 0x401, ((char *)slide, LoadFarString(UnsupportedExtraField), method)); error = PK_ERR; /* GRR: should be passed on up via SetEAs() */ } break; } G.inptr = old_inptr; G.incnt = old_incnt; G.csize = old_csize; G.mem_mode = FALSE; if (!error) { register ulg crcval = crc32(CRCVAL_INITIAL, tgt, (extent)G.outcnt); if (crcval != extra_field_crc) { if (uO.tflag) error = PK_ERR | (DEFLATED << 8); /* kludge for now */ else { Info(slide, 0x401, ((char *)slide, LoadFarString(BadExtraFieldCRC), G.zipfn, crcval, extra_field_crc)); error = PK_ERR; } } } return error; } /* end function memextract() */ /*************************/ /* Function memflush() */ /*************************/ int memflush(__G__ rawbuf, size) __GDEF ZCONST uch *rawbuf; ulg size; { if (size > G.outsize) /* Here, PK_DISK is a bit off-topic, but in the sense of marking "overflow of output space", its use may be tolerated. */ return PK_DISK; /* more data than output buffer can hold */ memcpy((char *)G.outbufptr, (char *)rawbuf, (extent)size); G.outbufptr += (unsigned int)size; G.outsize -= size; G.outcnt += size; return 0; } /* end function memflush() */ #if (defined(VMS) || defined(VMS_TEXT_CONV)) /************************************/ /* Function extract_izvms_block() */ /************************************/ /* * Extracts block from p. If resulting length is less than needed, fill * extra space with corresponding bytes from 'init'. * Currently understands 3 formats of block compression: * - Simple storing * - Compression of zero bytes to zero bits * - Deflation (see memextract()) * The IZVMS block data is returned in malloc'd space. */ uch *extract_izvms_block(__G__ ebdata, size, retlen, init, needlen) __GDEF ZCONST uch *ebdata; unsigned size; unsigned *retlen; ZCONST uch *init; unsigned needlen; { uch *ucdata; /* Pointer to block allocated */ int cmptype; unsigned usiz, csiz; cmptype = (makeword(ebdata+EB_IZVMS_FLGS) & EB_IZVMS_BCMASK); csiz = size - EB_IZVMS_HLEN; usiz = (cmptype == EB_IZVMS_BCSTOR ? csiz : makeword(ebdata+EB_IZVMS_UCSIZ)); if (retlen) *retlen = usiz; if ((ucdata = (uch *)malloc(MAX(needlen, usiz))) == NULL) return NULL; if (init && (usiz < needlen)) memcpy((char *)ucdata, (ZCONST char *)init, needlen); switch (cmptype) { case EB_IZVMS_BCSTOR: /* The simplest case */ memcpy(ucdata, ebdata+EB_IZVMS_HLEN, usiz); break; case EB_IZVMS_BC00: decompress_bits(ucdata, usiz, ebdata+EB_IZVMS_HLEN); break; case EB_IZVMS_BCDEFL: memextract(__G__ ucdata, (ulg)usiz, ebdata+EB_IZVMS_HLEN, (ulg)csiz); break; default: free(ucdata); ucdata = NULL; } return ucdata; } /* end of extract_izvms_block */ /********************************/ /* Function decompress_bits() */ /********************************/ /* * Simple uncompression routine. The compression uses bit stream. * Compression scheme: * * if (byte!=0) * putbit(1),putbyte(byte) * else * putbit(0) */ static void decompress_bits(outptr, needlen, bitptr) uch *outptr; /* Pointer into output block */ unsigned needlen; /* Size of uncompressed block */ ZCONST uch *bitptr; /* Pointer into compressed data */ { ulg bitbuf = 0; int bitcnt = 0; #define _FILL { bitbuf |= (*bitptr++) << bitcnt;\ bitcnt += 8; \ } while (needlen--) { if (bitcnt <= 0) _FILL; if (bitbuf & 1) { bitbuf >>= 1; if ((bitcnt -= 1) < 8) _FILL; *outptr++ = (uch)bitbuf; bitcnt -= 8; bitbuf >>= 8; } else { *outptr++ = '\0'; bitcnt -= 1; bitbuf >>= 1; } } } /* end function decompress_bits() */ #endif /* VMS || VMS_TEXT_CONV */ #ifdef SYMLINKS /***********************************/ /* Function set_deferred_symlink() */ /***********************************/ static void set_deferred_symlink(__G__ slnk_entry) __GDEF slinkentry *slnk_entry; { extent ucsize = slnk_entry->targetlen; char *linkfname = slnk_entry->fname; char *linktarget = (char *)malloc(ucsize+1); if (!linktarget) { Info(slide, 0x201, ((char *)slide, LoadFarString(SymLnkWarnNoMem), FnFilter1(linkfname))); return; } linktarget[ucsize] = '\0'; G.outfile = zfopen(linkfname, FOPR); /* open link placeholder for reading */ /* Check that the following conditions are all fulfilled: * a) the placeholder file exists, * b) the placeholder file contains exactly "ucsize" bytes * (read the expected placeholder content length + 1 extra byte, this * should return the expected content length), * c) the placeholder content matches the link target specification as * stored in the symlink control structure. */ if (!G.outfile || fread(linktarget, 1, ucsize+1, G.outfile) != ucsize || strcmp(slnk_entry->target, linktarget)) { Info(slide, 0x201, ((char *)slide, LoadFarString(SymLnkWarnInvalid), FnFilter1(linkfname))); free(linktarget); if (G.outfile) fclose(G.outfile); return; } fclose(G.outfile); /* close "data" file for good... */ unlink(linkfname); /* ...and delete it */ if (QCOND2) Info(slide, 0, ((char *)slide, LoadFarString(SymLnkFinish), FnFilter1(linkfname), FnFilter2(linktarget))); if (symlink(linktarget, linkfname)) /* create the real link */ perror("symlink error"); free(linktarget); #ifdef SET_SYMLINK_ATTRIBS set_symlnk_attribs(__G__ slnk_entry); #endif return; /* can't set time on symlinks */ } /* end function set_deferred_symlink() */ #endif /* SYMLINKS */ /*************************/ /* Function fnfilter() */ /* here instead of in list.c for SFX */ /*************************/ char *fnfilter(raw, space, size) /* convert name to safely printable form */ ZCONST char *raw; uch *space; extent size; { #ifndef NATIVE /* ASCII: filter ANSI escape codes, etc. */ ZCONST uch *r=(ZCONST uch *)raw; uch *s=space; uch *slim=NULL; uch *se=NULL; int have_overflow = FALSE; if (size > 0) { slim = space + size #ifdef _MBCS - (MB_CUR_MAX - 1) #endif - 4; } while (*r) { if (size > 0 && s >= slim && se == NULL) { se = s; } #ifdef QDOS if (qlflag & 2) { if (*r == '/' || *r == '.') { if (se != NULL && (s > (space + (size-3)))) { have_overflow = TRUE; break; } ++r; *s++ = '_'; continue; } } else #endif #ifdef HAVE_WORKING_ISPRINT # ifndef UZ_FNFILTER_REPLACECHAR /* A convenient choice for the replacement of unprintable char codes is * the "single char wildcard", as this character is quite unlikely to * appear in filenames by itself. The following default definition * sets the replacement char to a question mark as the most common * "single char wildcard"; this setting should be overridden in the * appropiate system-specific configuration header when needed. */ # define UZ_FNFILTER_REPLACECHAR '?' # endif if (!isprint(*r)) { if (*r < 32) { /* ASCII control codes are escaped as "^{letter}". */ if (se != NULL && (s > (space + (size-4)))) { have_overflow = TRUE; break; } *s++ = '^', *s++ = (uch)(64 + *r++); } else { /* Other unprintable codes are replaced by the * placeholder character. */ if (se != NULL && (s > (space + (size-3)))) { have_overflow = TRUE; break; } *s++ = UZ_FNFILTER_REPLACECHAR; INCSTR(r); } #else /* !HAVE_WORKING_ISPRINT */ if (*r < 32) { /* ASCII control codes are escaped as "^{letter}". */ if (se != NULL && (s > (space + (size-4)))) { have_overflow = TRUE; break; } *s++ = '^', *s++ = (uch)(64 + *r++); #endif /* ?HAVE_WORKING_ISPRINT */ } else { #ifdef _MBCS unsigned i = CLEN(r); if (se != NULL && (s > (space + (size-i-2)))) { have_overflow = TRUE; break; } for (; i > 0; i--) *s++ = *r++; #else if (se != NULL && (s > (space + (size-3)))) { have_overflow = TRUE; break; } *s++ = *r++; #endif } } if (have_overflow) { strcpy((char *)se, "..."); } else { *s = '\0'; } #ifdef WINDLL INTERN_TO_ISO((char *)space, (char *)space); /* translate to ANSI */ #else #if (defined(WIN32) && !defined(_WIN32_WCE)) /* Win9x console always uses OEM character coding, and WinNT console is set to OEM charset by default, too */ INTERN_TO_OEM((char *)space, (char *)space); #endif /* (WIN32 && !_WIN32_WCE) */ #endif /* ?WINDLL */ return (char *)space; #else /* NATIVE: EBCDIC or whatever */ return (char *)raw; #endif } /* end function fnfilter() */ #ifdef SET_DIR_ATTRIB /* must sort saved directories so can set perms from bottom up */ /************************/ /* Function dircomp() */ /************************/ static int Cdecl dircomp(a, b) /* used by qsort(); swiped from Zip */ ZCONST zvoid *a, *b; { /* order is significant: this sorts in reverse order (deepest first) */ return strcmp((*(direntry **)b)->fn, (*(direntry **)a)->fn); /* return namecmp((*(direntry **)b)->fn, (*(direntry **)a)->fn); */ } #endif /* SET_DIR_ATTRIB */ #ifdef USE_BZIP2 /**************************/ /* Function UZbunzip2() */ /**************************/ int UZbunzip2(__G) __GDEF /* decompress a bzipped entry using the libbz2 routines */ { int retval = 0; /* return code: 0 = "no error" */ int err=BZ_OK; int repeated_buf_err; bz_stream bstrm; #if (defined(DLL) && !defined(NO_SLIDE_REDIR)) if (G.redirect_slide) wsize = G.redirect_size, redirSlide = G.redirect_buffer; else wsize = WSIZE, redirSlide = slide; #endif bstrm.next_out = (char *)redirSlide; bstrm.avail_out = wsize; bstrm.next_in = (char *)G.inptr; bstrm.avail_in = G.incnt; { /* local buffer for efficiency */ /* $TODO Check for BZIP LIB version? */ bstrm.bzalloc = NULL; bstrm.bzfree = NULL; bstrm.opaque = NULL; Trace((stderr, "initializing bzlib()\n")); err = BZ2_bzDecompressInit(&bstrm, 0, 0); if (err == BZ_MEM_ERROR) return 3; else if (err != BZ_OK) Trace((stderr, "oops! (BZ2_bzDecompressInit() err = %d)\n", err)); } #ifdef FUNZIP while (err != BZ_STREAM_END) { #else /* !FUNZIP */ while (G.csize > 0) { Trace((stderr, "first loop: G.csize = %ld\n", G.csize)); #endif /* ?FUNZIP */ while (bstrm.avail_out > 0) { err = BZ2_bzDecompress(&bstrm); if (err == BZ_DATA_ERROR) { retval = 2; goto uzbunzip_cleanup_exit; } else if (err == BZ_MEM_ERROR) { retval = 3; goto uzbunzip_cleanup_exit; } else if (err != BZ_OK && err != BZ_STREAM_END) Trace((stderr, "oops! (bzip(first loop) err = %d)\n", err)); #ifdef FUNZIP if (err == BZ_STREAM_END) /* "END-of-entry-condition" ? */ #else /* !FUNZIP */ if (G.csize <= 0L) /* "END-of-entry-condition" ? */ #endif /* ?FUNZIP */ break; if (bstrm.avail_in == 0) { if (fillinbuf(__G) == 0) { /* no "END-condition" yet, but no more data */ retval = 2; goto uzbunzip_cleanup_exit; } bstrm.next_in = (char *)G.inptr; bstrm.avail_in = G.incnt; } Trace((stderr, " avail_in = %u\n", bstrm.avail_in)); } /* flush slide[] */ if ((retval = FLUSH(wsize - bstrm.avail_out)) != 0) goto uzbunzip_cleanup_exit; Trace((stderr, "inside loop: flushing %ld bytes (ptr diff = %ld)\n", (long)(wsize - bstrm.avail_out), (long)(bstrm.next_out-(char *)redirSlide))); bstrm.next_out = (char *)redirSlide; bstrm.avail_out = wsize; } /* no more input, so loop until we have all output */ Trace((stderr, "beginning final loop: err = %d\n", err)); repeated_buf_err = FALSE; while (err != BZ_STREAM_END) { err = BZ2_bzDecompress(&bstrm); if (err == BZ_DATA_ERROR) { retval = 2; goto uzbunzip_cleanup_exit; } else if (err == BZ_MEM_ERROR) { retval = 3; goto uzbunzip_cleanup_exit; } else if (err != BZ_OK && err != BZ_STREAM_END) { Trace((stderr, "oops! (bzip(final loop) err = %d)\n", err)); DESTROYGLOBALS(); EXIT(PK_MEM3); } /* final flush of slide[] */ if ((retval = FLUSH(wsize - bstrm.avail_out)) != 0) goto uzbunzip_cleanup_exit; Trace((stderr, "final loop: flushing %ld bytes (ptr diff = %ld)\n", (long)(wsize - bstrm.avail_out), (long)(bstrm.next_out-(char *)redirSlide))); bstrm.next_out = (char *)redirSlide; bstrm.avail_out = wsize; } #ifdef LARGE_FILE_SUPPORT Trace((stderr, "total in = %llu, total out = %llu\n", (zusz_t)(bstrm.total_in_lo32) + ((zusz_t)(bstrm.total_in_hi32))<<32, (zusz_t)(bstrm.total_out_lo32) + ((zusz_t)(bstrm.total_out_hi32))<<32)); #else Trace((stderr, "total in = %lu, total out = %lu\n", bstrm.total_in_lo32, bstrm.total_out_lo32)); #endif G.inptr = (uch *)bstrm.next_in; G.incnt = (G.inbuf + INBUFSIZ) - G.inptr; /* reset for other routines */ uzbunzip_cleanup_exit: err = BZ2_bzDecompressEnd(&bstrm); if (err != BZ_OK) Trace((stderr, "oops! (BZ2_bzDecompressEnd() err = %d)\n", err)); return retval; } /* end function UZbunzip2() */ #endif /* USE_BZIP2 */ Carla-2.4.2/data/windows/unzipfx-carla-control/fileio.c000066400000000000000000002707121420416754300230370ustar00rootroot00000000000000/* Copyright (c) 1990-2009 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2009-Jan-02 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- fileio.c This file contains routines for doing direct but relatively generic input/ output, file-related sorts of things, plus some miscellaneous stuff. Most of the stuff has to do with opening, closing, reading and/or writing files. Contains: open_input_file() open_outfile() (not: VMS, AOS/VS, CMSMVS, MACOS, TANDEM) undefer_input() defer_leftover_input() readbuf() readbyte() fillinbuf() seek_zipf() flush() (non-VMS) is_vms_varlen_txt() (non-VMS, VMS_TEXT_CONV only) disk_error() (non-VMS) UzpMessagePrnt() UzpMessageNull() (DLL only) UzpInput() UzpMorePause() UzpPassword() (non-WINDLL) handler() dos_to_unix_time() (non-VMS, non-VM/CMS, non-MVS) check_for_newer() (non-VMS, non-OS/2, non-VM/CMS, non-MVS) do_string() makeword() makelong() makeint64() fzofft() str2iso() (CRYPT && NEED_STR2ISO, only) str2oem() (CRYPT && NEED_STR2OEM, only) memset() (ZMEM only) memcpy() (ZMEM only) zstrnicmp() (NO_STRNICMP only) zstat() (REGULUS only) plastchar() (_MBCS only) uzmbclen() (_MBCS && NEED_UZMBCLEN, only) uzmbschr() (_MBCS && NEED_UZMBSCHR, only) uzmbsrchr() (_MBCS && NEED_UZMBSRCHR, only) fLoadFarString() (SMALL_MEM only) fLoadFarStringSmall() (SMALL_MEM only) fLoadFarStringSmall2() (SMALL_MEM only) zfstrcpy() (SMALL_MEM only) zfstrcmp() (SMALL_MEM && !(SFX || FUNZIP) only) ---------------------------------------------------------------------------*/ #define __FILEIO_C /* identifies this source module */ #define UNZIP_INTERNAL #include "unzip.h" #ifdef WINDLL # ifdef POCKET_UNZIP # include "wince/intrface.h" # else # include "windll/windll.h" # endif # include #endif #include "crc32.h" #include "crypt.h" #include "ttyio.h" /* setup of codepage conversion for decryption passwords */ #if CRYPT # if (defined(CRYP_USES_ISO2OEM) && !defined(IZ_ISO2OEM_ARRAY)) # define IZ_ISO2OEM_ARRAY /* pull in iso2oem[] table */ # endif # if (defined(CRYP_USES_OEM2ISO) && !defined(IZ_OEM2ISO_ARRAY)) # define IZ_OEM2ISO_ARRAY /* pull in oem2iso[] table */ # endif #endif #include "ebcdic.h" /* definition/initialization of ebcdic[] */ /* Note: Under Windows, the maximum size of the buffer that can be used with any of the *printf calls is 16,384, so win_fprintf was used to feed the fprintf clone no more than 16K chunks at a time. This should be valid for anything up to 64K (and probably beyond, assuming your buffers are that big). */ #ifdef WINDLL # define WriteError(buf,len,strm) \ (win_fprintf(pG, strm, (extent)len, (char far *)buf) != (int)(len)) #else /* !WINDLL */ # ifdef USE_FWRITE # define WriteError(buf,len,strm) \ ((extent)fwrite((char *)(buf),1,(extent)(len),strm) != (extent)(len)) # else # define WriteError(buf,len,strm) \ ((extent)write(fileno(strm),(char *)(buf),(extent)(len)) != (extent)(len)) # endif #endif /* ?WINDLL */ /* 2005-09-16 SMS. On VMS, when output is redirected to a file, as in a command like "PIPE UNZIP -v > X.OUT", the output file is created with VFC record format, and multiple calls to write() or fwrite() will produce multiple records, even when there's no newline terminator in the buffer. The result is unsightly output with spurious newlines. Using fprintf() instead of write() here, and disabling a fflush(stdout) in UzpMessagePrnt() below, together seem to solve the problem. According to the C RTL manual, "The write and decc$record_write functions always generate at least one record." Also, "[T]he fwrite function always generates at least records." So, "fwrite(buf, len, 1, strm)" is much better ("1" record) than "fwrite(buf, 1, len, strm)" ("len" (1-character) records, _really_ ugly), but neither is better than write(). Similarly, "The fflush function always generates a record if there is unwritten data in the buffer." Apparently fprintf() buffers the stuff somewhere, and puts out a record (only) when it sees a newline. */ #ifdef VMS # define WriteTxtErr(buf,len,strm) \ ((extent)fprintf(strm, "%.*s", len, buf) != (extent)(len)) #else # define WriteTxtErr(buf,len,strm) WriteError(buf,len,strm) #endif #if (defined(USE_DEFLATE64) && defined(__16BIT__)) static int partflush OF((__GPRO__ uch *rawbuf, ulg size, int unshrink)); #endif #ifdef VMS_TEXT_CONV static int is_vms_varlen_txt OF((__GPRO__ uch *ef_buf, unsigned ef_len)); #endif static int disk_error OF((__GPRO)); /****************************/ /* Strings used in fileio.c */ /****************************/ static ZCONST char Far CannotOpenZipfile[] = "error: cannot open zipfile [ %s ]\n %s\n"; #if (!defined(VMS) && !defined(AOS_VS) && !defined(CMS_MVS) && !defined(MACOS)) #if (!defined(TANDEM)) #if (defined(ATH_BEO_THS_UNX) || defined(DOS_FLX_NLM_OS2_W32)) static ZCONST char Far CannotDeleteOldFile[] = "error: cannot delete old %s\n %s\n"; #ifdef UNIXBACKUP static ZCONST char Far CannotRenameOldFile[] = "error: cannot rename old %s\n %s\n"; static ZCONST char Far BackupSuffix[] = "~"; #endif #endif /* ATH_BEO_THS_UNX || DOS_FLX_NLM_OS2_W32 */ #ifdef NOVELL_BUG_FAILSAFE static ZCONST char Far NovellBug[] = "error: %s: stat() says does not exist, but fopen() found anyway\n"; #endif static ZCONST char Far CannotCreateFile[] = "error: cannot create %s\n %s\n"; #endif /* !TANDEM */ #endif /* !VMS && !AOS_VS && !CMS_MVS && !MACOS */ static ZCONST char Far ReadError[] = "error: zipfile read error\n"; static ZCONST char Far FilenameTooLongTrunc[] = "warning: filename too long--truncating.\n"; #ifdef UNICODE_SUPPORT static ZCONST char Far UFilenameTooLongTrunc[] = "warning: Converted unicode filename too long--truncating.\n"; #endif static ZCONST char Far ExtraFieldTooLong[] = "warning: extra field too long (%d). Ignoring...\n"; #ifdef WINDLL static ZCONST char Far DiskFullQuery[] = "%s: write error (disk full?).\n"; #else static ZCONST char Far DiskFullQuery[] = "%s: write error (disk full?). Continue? (y/n/^C) "; static ZCONST char Far ZipfileCorrupt[] = "error: zipfile probably corrupt (%s)\n"; # ifdef SYMLINKS static ZCONST char Far FileIsSymLink[] = "%s exists and is a symbolic link%s.\n"; # endif # ifdef MORE static ZCONST char Far MorePrompt[] = "--More--(%lu)"; # endif static ZCONST char Far QuitPrompt[] = "--- Press `Q' to quit, or any other key to continue ---"; static ZCONST char Far HidePrompt[] = /* "\r \r"; */ "\r \r"; # if CRYPT # ifdef MACOS /* SPC: are names on MacOS REALLY so much longer than elsewhere ??? */ static ZCONST char Far PasswPrompt[] = "[%s]\n %s password: "; # else static ZCONST char Far PasswPrompt[] = "[%s] %s password: "; # endif static ZCONST char Far PasswPrompt2[] = "Enter password: "; static ZCONST char Far PasswRetry[] = "password incorrect--reenter: "; # endif /* CRYPT */ #endif /* !WINDLL */ /******************************/ /* Function open_input_file() */ /******************************/ int open_input_file(__G) /* return 1 if open failed */ __GDEF { /* * open the zipfile for reading and in BINARY mode to prevent cr/lf * translation, which would corrupt the bitstreams */ #ifdef VMS G.zipfd = open(G.zipfn, O_RDONLY, 0, OPNZIP_RMS_ARGS); #else /* !VMS */ #ifdef MACOS G.zipfd = open(G.zipfn, 0); #else /* !MACOS */ #ifdef CMS_MVS G.zipfd = vmmvs_open_infile(__G); #else /* !CMS_MVS */ #ifdef USE_STRM_INPUT G.zipfd = fopen(G.zipfn, FOPR); #else /* !USE_STRM_INPUT */ G.zipfd = open(G.zipfn, O_RDONLY | O_BINARY); #endif /* ?USE_STRM_INPUT */ #endif /* ?CMS_MVS */ #endif /* ?MACOS */ #endif /* ?VMS */ #ifdef USE_STRM_INPUT if (G.zipfd == NULL) #else /* if (G.zipfd < 0) */ /* no good for Windows CE port */ if (G.zipfd == -1) #endif { Info(slide, 0x401, ((char *)slide, LoadFarString(CannotOpenZipfile), G.zipfn, strerror(errno))); return 1; } return 0; } /* end function open_input_file() */ #if (!defined(VMS) && !defined(AOS_VS) && !defined(CMS_MVS) && !defined(MACOS)) #if (!defined(TANDEM)) /***************************/ /* Function open_outfile() */ /***************************/ int open_outfile(__G) /* return 1 if fail */ __GDEF { #ifdef DLL if (G.redirect_data) return (redirect_outfile(__G) == FALSE); #endif #ifdef QDOS QFilename(__G__ G.filename); #endif #if (defined(DOS_FLX_NLM_OS2_W32) || defined(ATH_BEO_THS_UNX)) #ifdef BORLAND_STAT_BUG /* Borland 5.0's stat() barfs if the filename has no extension and the * file doesn't exist. */ if (access(G.filename, 0) == -1) { FILE *tmp = fopen(G.filename, "wb+"); /* file doesn't exist, so create a dummy file to keep stat() from * failing (will be over-written anyway) */ fputc('0', tmp); /* just to have something in the file */ fclose(tmp); } #endif /* BORLAND_STAT_BUG */ #ifdef SYMLINKS if (SSTAT(G.filename, &G.statbuf) == 0 || lstat(G.filename, &G.statbuf) == 0) #else if (SSTAT(G.filename, &G.statbuf) == 0) #endif /* ?SYMLINKS */ { Trace((stderr, "open_outfile: stat(%s) returns 0: file exists\n", FnFilter1(G.filename))); #ifdef UNIXBACKUP if (uO.B_flag) { /* do backup */ char *tname; z_stat tmpstat; int blen, flen, tlen; blen = strlen(BackupSuffix); flen = strlen(G.filename); tlen = flen + blen + 6; /* includes space for 5 digits */ if (tlen >= FILNAMSIZ) { /* in case name is too long, truncate */ tname = (char *)malloc(FILNAMSIZ); if (tname == NULL) return 1; /* in case we run out of space */ tlen = FILNAMSIZ - 1 - blen; strcpy(tname, G.filename); /* make backup name */ tname[tlen] = '\0'; if (flen > tlen) flen = tlen; tlen = FILNAMSIZ; } else { tname = (char *)malloc(tlen); if (tname == NULL) return 1; /* in case we run out of space */ strcpy(tname, G.filename); /* make backup name */ } strcpy(tname+flen, BackupSuffix); if (IS_OVERWRT_ALL) { /* If there is a previous backup file, delete it, * otherwise the following rename operation may fail. */ if (SSTAT(tname, &tmpstat) == 0) unlink(tname); } else { /* Check if backupname exists, and, if it's true, try * appending numbers of up to 5 digits (or the maximum * "unsigned int" number on 16-bit systems) to the * BackupSuffix, until an unused name is found. */ unsigned maxtail, i; char *numtail = tname + flen + blen; /* take account of the "unsigned" limit on 16-bit systems: */ maxtail = ( ((~0) >= 99999L) ? 99999 : (~0) ); switch (tlen - flen - blen - 1) { case 4: maxtail = 9999; break; case 3: maxtail = 999; break; case 2: maxtail = 99; break; case 1: maxtail = 9; break; case 0: maxtail = 0; break; } /* while filename exists */ for (i = 0; (i < maxtail) && (SSTAT(tname, &tmpstat) == 0);) sprintf(numtail,"%u", ++i); } if (rename(G.filename, tname) != 0) { /* move file */ Info(slide, 0x401, ((char *)slide, LoadFarString(CannotRenameOldFile), FnFilter1(G.filename), strerror(errno))); free(tname); return 1; } Trace((stderr, "open_outfile: %s now renamed into %s\n", FnFilter1(G.filename), FnFilter2(tname))); free(tname); } else #endif /* UNIXBACKUP */ { #ifdef DOS_FLX_OS2_W32 if (!(G.statbuf.st_mode & S_IWRITE)) { Trace((stderr, "open_outfile: existing file %s is read-only\n", FnFilter1(G.filename))); chmod(G.filename, S_IREAD | S_IWRITE); Trace((stderr, "open_outfile: %s now writable\n", FnFilter1(G.filename))); } #endif /* DOS_FLX_OS2_W32 */ #ifdef NLM /* Give the file read/write permission (non-POSIX shortcut) */ chmod(G.filename, 0); #endif /* NLM */ if (unlink(G.filename) != 0) { Info(slide, 0x401, ((char *)slide, LoadFarString(CannotDeleteOldFile), FnFilter1(G.filename), strerror(errno))); return 1; } Trace((stderr, "open_outfile: %s now deleted\n", FnFilter1(G.filename))); } } #endif /* DOS_FLX_NLM_OS2_W32 || ATH_BEO_THS_UNX */ #ifdef RISCOS if (SWI_OS_File_7(G.filename,0xDEADDEAD,0xDEADDEAD,G.lrec.ucsize)!=NULL) { Info(slide, 1, ((char *)slide, LoadFarString(CannotCreateFile), FnFilter1(G.filename), strerror(errno))); return 1; } #endif /* RISCOS */ #ifdef TOPS20 char *tfilnam; if ((tfilnam = (char *)malloc(2*strlen(G.filename)+1)) == (char *)NULL) return 1; strcpy(tfilnam, G.filename); upper(tfilnam); enquote(tfilnam); if ((G.outfile = fopen(tfilnam, FOPW)) == (FILE *)NULL) { Info(slide, 1, ((char *)slide, LoadFarString(CannotCreateFile), tfilnam, strerror(errno))); free(tfilnam); return 1; } free(tfilnam); #else /* !TOPS20 */ #ifdef MTS if (uO.aflag) G.outfile = zfopen(G.filename, FOPWT); else G.outfile = zfopen(G.filename, FOPW); if (G.outfile == (FILE *)NULL) { Info(slide, 1, ((char *)slide, LoadFarString(CannotCreateFile), FnFilter1(G.filename), strerror(errno))); return 1; } #else /* !MTS */ #ifdef DEBUG Info(slide, 1, ((char *)slide, "open_outfile: doing fopen(%s) for reading\n", FnFilter1(G.filename))); if ((G.outfile = zfopen(G.filename, FOPR)) == (FILE *)NULL) Info(slide, 1, ((char *)slide, "open_outfile: fopen(%s) for reading failed: does not exist\n", FnFilter1(G.filename))); else { Info(slide, 1, ((char *)slide, "open_outfile: fopen(%s) for reading succeeded: file exists\n", FnFilter1(G.filename))); fclose(G.outfile); } #endif /* DEBUG */ #ifdef NOVELL_BUG_FAILSAFE if (G.dne && ((G.outfile = zfopen(G.filename, FOPR)) != (FILE *)NULL)) { Info(slide, 0x401, ((char *)slide, LoadFarString(NovellBug), FnFilter1(G.filename))); fclose(G.outfile); return 1; /* with "./" fix in checkdir(), should never reach here */ } #endif /* NOVELL_BUG_FAILSAFE */ Trace((stderr, "open_outfile: doing fopen(%s) for writing\n", FnFilter1(G.filename))); { #if defined(ATH_BE_UNX) || defined(AOS_VS) || defined(QDOS) || defined(TANDEM) mode_t umask_sav = umask(0077); #endif #if defined(SYMLINKS) || defined(QLZIP) /* These features require the ability to re-read extracted data from the output files. Output files are created with Read&Write access. */ G.outfile = zfopen(G.filename, FOPWR); #else G.outfile = zfopen(G.filename, FOPW); #endif #if defined(ATH_BE_UNX) || defined(AOS_VS) || defined(QDOS) || defined(TANDEM) umask(umask_sav); #endif } if (G.outfile == (FILE *)NULL) { Info(slide, 0x401, ((char *)slide, LoadFarString(CannotCreateFile), FnFilter1(G.filename), strerror(errno))); return 1; } Trace((stderr, "open_outfile: fopen(%s) for writing succeeded\n", FnFilter1(G.filename))); #endif /* !MTS */ #endif /* !TOPS20 */ #ifdef USE_FWRITE #ifdef DOS_NLM_OS2_W32 /* 16-bit MSC: buffer size must be strictly LESS than 32K (WSIZE): bogus */ setbuf(G.outfile, (char *)NULL); /* make output unbuffered */ #else /* !DOS_NLM_OS2_W32 */ #ifndef RISCOS #ifdef _IOFBF /* make output fully buffered (works just about like write()) */ setvbuf(G.outfile, (char *)slide, _IOFBF, WSIZE); #else setbuf(G.outfile, (char *)slide); #endif #endif /* !RISCOS */ #endif /* ?DOS_NLM_OS2_W32 */ #endif /* USE_FWRITE */ #ifdef OS2_W32 /* preallocate the final file size to prevent file fragmentation */ SetFileSize(G.outfile, G.lrec.ucsize); #endif return 0; } /* end function open_outfile() */ #endif /* !TANDEM */ #endif /* !VMS && !AOS_VS && !CMS_MVS && !MACOS */ /* * These functions allow NEXTBYTE to function without needing two bounds * checks. Call defer_leftover_input() if you ever have filled G.inbuf * by some means other than readbyte(), and you then want to start using * NEXTBYTE. When going back to processing bytes without NEXTBYTE, call * undefer_input(). For example, extract_or_test_member brackets its * central section that does the decompression with these two functions. * If you need to check the number of bytes remaining in the current * file while using NEXTBYTE, check (G.csize + G.incnt), not G.csize. */ /****************************/ /* function undefer_input() */ /****************************/ void undefer_input(__G) __GDEF { if (G.incnt > 0) G.csize += G.incnt; if (G.incnt_leftover > 0) { /* We know that "(G.csize < MAXINT)" so we can cast G.csize to int: * This condition was checked when G.incnt_leftover was set > 0 in * defer_leftover_input(), and it is NOT allowed to touch G.csize * before calling undefer_input() when (G.incnt_leftover > 0) * (single exception: see read_byte()'s "G.csize <= 0" handling) !! */ G.incnt = G.incnt_leftover + (int)G.csize; G.inptr = G.inptr_leftover - (int)G.csize; G.incnt_leftover = 0; } else if (G.incnt < 0) G.incnt = 0; } /* end function undefer_input() */ /***********************************/ /* function defer_leftover_input() */ /***********************************/ void defer_leftover_input(__G) __GDEF { if ((zoff_t)G.incnt > G.csize) { /* (G.csize < MAXINT), we can safely cast it to int !! */ if (G.csize < 0L) G.csize = 0L; G.inptr_leftover = G.inptr + (int)G.csize; G.incnt_leftover = G.incnt - (int)G.csize; G.incnt = (int)G.csize; } else G.incnt_leftover = 0; G.csize -= G.incnt; } /* end function defer_leftover_input() */ /**********************/ /* Function readbuf() */ /**********************/ unsigned readbuf(__G__ buf, size) /* return number of bytes read into buf */ __GDEF char *buf; register unsigned size; { register unsigned count; unsigned n; n = size; while (size) { if (G.incnt <= 0) { if ((G.incnt = read(G.zipfd, (char *)G.inbuf, INBUFSIZ)) == 0) return (n-size); else if (G.incnt < 0) { /* another hack, but no real harm copying same thing twice */ (*G.message)((zvoid *)&G, (uch *)LoadFarString(ReadError), /* CANNOT use slide */ (ulg)strlen(LoadFarString(ReadError)), 0x401); return 0; /* discarding some data; better than lock-up */ } /* buffer ALWAYS starts on a block boundary: */ G.cur_zipfile_bufstart += INBUFSIZ; G.inptr = G.inbuf; } count = MIN(size, (unsigned)G.incnt); memcpy(buf, G.inptr, count); buf += count; G.inptr += count; G.incnt -= count; size -= count; } return n; } /* end function readbuf() */ /***********************/ /* Function readbyte() */ /***********************/ int readbyte(__G) /* refill inbuf and return a byte if available, else EOF */ __GDEF { if (G.mem_mode) return EOF; if (G.csize <= 0) { G.csize--; /* for tests done after exploding */ G.incnt = 0; return EOF; } if (G.incnt <= 0) { if ((G.incnt = read(G.zipfd, (char *)G.inbuf, INBUFSIZ)) == 0) { return EOF; } else if (G.incnt < 0) { /* "fail" (abort, retry, ...) returns this */ /* another hack, but no real harm copying same thing twice */ (*G.message)((zvoid *)&G, (uch *)LoadFarString(ReadError), (ulg)strlen(LoadFarString(ReadError)), 0x401); echon(); #ifdef WINDLL longjmp(dll_error_return, 1); #else DESTROYGLOBALS(); EXIT(PK_BADERR); /* totally bailing; better than lock-up */ #endif } G.cur_zipfile_bufstart += INBUFSIZ; /* always starts on block bndry */ G.inptr = G.inbuf; defer_leftover_input(__G); /* decrements G.csize */ } #if CRYPT if (G.pInfo->encrypted) { uch *p; int n; /* This was previously set to decrypt one byte beyond G.csize, when * incnt reached that far. GRR said, "but it's required: why?" This * was a bug in fillinbuf() -- was it also a bug here? */ for (n = G.incnt, p = G.inptr; n--; p++) zdecode(*p); } #endif /* CRYPT */ --G.incnt; return *G.inptr++; } /* end function readbyte() */ #if defined(USE_ZLIB) || defined(USE_BZIP2) /************************/ /* Function fillinbuf() */ /************************/ int fillinbuf(__G) /* like readbyte() except returns number of bytes in inbuf */ __GDEF { if (G.mem_mode || (G.incnt = read(G.zipfd, (char *)G.inbuf, INBUFSIZ)) <= 0) return 0; G.cur_zipfile_bufstart += INBUFSIZ; /* always starts on a block boundary */ G.inptr = G.inbuf; defer_leftover_input(__G); /* decrements G.csize */ #if CRYPT if (G.pInfo->encrypted) { uch *p; int n; for (n = G.incnt, p = G.inptr; n--; p++) zdecode(*p); } #endif /* CRYPT */ return G.incnt; } /* end function fillinbuf() */ #endif /* USE_ZLIB || USE_BZIP2 */ /************************/ /* Function seek_zipf() */ /************************/ int seek_zipf(__G__ abs_offset) __GDEF zoff_t abs_offset; { /* * Seek to the block boundary of the block which includes abs_offset, * then read block into input buffer and set pointers appropriately. * If block is already in the buffer, just set the pointers. This function * is used by do_seekable (process.c), extract_or_test_entrylist (extract.c) * and do_string (fileio.c). Also, a slightly modified version is embedded * within extract_or_test_entrylist (extract.c). readbyte() and readbuf() * (fileio.c) are compatible. NOTE THAT abs_offset is intended to be the * "proper offset" (i.e., if there were no extra bytes prepended); * cur_zipfile_bufstart contains the corrected offset. * * Since seek_zipf() is never used during decompression, it is safe to * use the slide[] buffer for the error message. * * returns PK error codes: * PK_BADERR if effective offset in zipfile is negative * PK_EOF if seeking past end of zipfile * PK_OK when seek was successful */ zoff_t request = abs_offset + G.extra_bytes; zoff_t inbuf_offset = request % INBUFSIZ; zoff_t bufstart = request - inbuf_offset; if (request < 0) { Info(slide, 1, ((char *)slide, LoadFarStringSmall(SeekMsg), G.zipfn, LoadFarString(ReportMsg))); return(PK_BADERR); } else if (bufstart != G.cur_zipfile_bufstart) { Trace((stderr, "fpos_zip: abs_offset = %s, G.extra_bytes = %s\n", FmZofft(abs_offset, NULL, NULL), FmZofft(G.extra_bytes, NULL, NULL))); #ifdef USE_STRM_INPUT zfseeko(G.zipfd, bufstart, SEEK_SET); G.cur_zipfile_bufstart = zftello(G.zipfd); #else /* !USE_STRM_INPUT */ G.cur_zipfile_bufstart = zlseek(G.zipfd, bufstart, SEEK_SET); #endif /* ?USE_STRM_INPUT */ Trace((stderr, " request = %s, (abs+extra) = %s, inbuf_offset = %s\n", FmZofft(request, NULL, NULL), FmZofft((abs_offset+G.extra_bytes), NULL, NULL), FmZofft(inbuf_offset, NULL, NULL))); Trace((stderr, " bufstart = %s, cur_zipfile_bufstart = %s\n", FmZofft(bufstart, NULL, NULL), FmZofft(G.cur_zipfile_bufstart, NULL, NULL))); if ((G.incnt = read(G.zipfd, (char *)G.inbuf, INBUFSIZ)) <= 0) return(PK_EOF); G.incnt -= (int)inbuf_offset; G.inptr = G.inbuf + (int)inbuf_offset; } else { G.incnt += (G.inptr-G.inbuf) - (int)inbuf_offset; G.inptr = G.inbuf + (int)inbuf_offset; } return(PK_OK); } /* end function seek_zipf() */ #ifndef VMS /* for VMS use code in vms.c */ /********************/ /* Function flush() */ /* returns PK error codes: */ /********************/ /* if tflag => always 0; PK_DISK if write error */ int flush(__G__ rawbuf, size, unshrink) __GDEF uch *rawbuf; ulg size; int unshrink; #if (defined(USE_DEFLATE64) && defined(__16BIT__)) { int ret; /* On 16-bit systems (MSDOS, OS/2 1.x), the standard C library functions * cannot handle writes of 64k blocks at once. For these systems, the * blocks to flush are split into pieces of 32k or less. */ while (size > 0x8000L) { ret = partflush(__G__ rawbuf, 0x8000L, unshrink); if (ret != PK_OK) return ret; size -= 0x8000L; rawbuf += (extent)0x8000; } return partflush(__G__ rawbuf, size, unshrink); } /* end function flush() */ /************************/ /* Function partflush() */ /* returns PK error codes: */ /************************/ /* if tflag => always 0; PK_DISK if write error */ static int partflush(__G__ rawbuf, size, unshrink) __GDEF uch *rawbuf; /* cannot be ZCONST, gets passed to (*G.message)() */ ulg size; int unshrink; #endif /* USE_DEFLATE64 && __16BIT__ */ { register uch *p; register uch *q; uch *transbuf; #if (defined(SMALL_MEM) || defined(MED_MEM) || defined(VMS_TEXT_CONV)) ulg transbufsiz; #endif /* static int didCRlast = FALSE; moved to globals.h */ /*--------------------------------------------------------------------------- Compute the CRC first; if testing or if disk is full, that's it. ---------------------------------------------------------------------------*/ G.crc32val = crc32(G.crc32val, rawbuf, (extent)size); #ifdef DLL if ((G.statreportcb != NULL) && (*G.statreportcb)(__G__ UZ_ST_IN_PROGRESS, G.zipfn, G.filename, NULL)) return IZ_CTRLC; /* cancel operation by user request */ #endif if (uO.tflag || size == 0L) /* testing or nothing to write: all done */ return PK_OK; if (G.disk_full) return PK_DISK; /* disk already full: ignore rest of file */ /*--------------------------------------------------------------------------- Write the bytes rawbuf[0..size-1] to the output device, first converting end-of-lines and ASCII/EBCDIC as needed. If SMALL_MEM or MED_MEM are NOT defined, outbuf is assumed to be at least as large as rawbuf and is not necessarily checked for overflow. ---------------------------------------------------------------------------*/ if (!G.pInfo->textmode) { /* write raw binary data */ /* GRR: note that for standard MS-DOS compilers, size argument to * fwrite() can never be more than 65534, so WriteError macro will * have to be rewritten if size can ever be that large. For now, * never more than 32K. Also note that write() returns an int, which * doesn't necessarily limit size to 32767 bytes if write() is used * on 16-bit systems but does make it more of a pain; however, because * at least MSC 5.1 has a lousy implementation of fwrite() (as does * DEC Ultrix cc), write() is used anyway. */ #ifdef DLL if (G.redirect_data) { #ifdef NO_SLIDE_REDIR if (writeToMemory(__G__ rawbuf, (extent)size)) return PK_ERR; #else writeToMemory(__G__ rawbuf, (extent)size); #endif } else #endif if (!uO.cflag && WriteError(rawbuf, size, G.outfile)) return disk_error(__G); else if (uO.cflag && (*G.message)((zvoid *)&G, rawbuf, size, 0)) return PK_OK; } else { /* textmode: aflag is true */ if (unshrink) { /* rawbuf = outbuf */ transbuf = G.outbuf2; #if (defined(SMALL_MEM) || defined(MED_MEM) || defined(VMS_TEXT_CONV)) transbufsiz = TRANSBUFSIZ; #endif } else { /* rawbuf = slide */ transbuf = G.outbuf; #if (defined(SMALL_MEM) || defined(MED_MEM) || defined(VMS_TEXT_CONV)) transbufsiz = OUTBUFSIZ; Trace((stderr, "\ntransbufsiz = OUTBUFSIZ = %u\n", (unsigned)OUTBUFSIZ)); #endif } if (G.newfile) { #ifdef VMS_TEXT_CONV if (G.pInfo->hostnum == VMS_ && G.extra_field && is_vms_varlen_txt(__G__ G.extra_field, G.lrec.extra_field_length)) G.VMS_line_state = 0; /* 0: ready to read line length */ else G.VMS_line_state = -1; /* -1: don't treat as VMS text */ #endif G.didCRlast = FALSE; /* no previous buffers written */ G.newfile = FALSE; } #ifdef VMS_TEXT_CONV if (G.VMS_line_state >= 0) { p = rawbuf; q = transbuf; while ((extent)(p-rawbuf) < (extent)size) { switch (G.VMS_line_state) { /* 0: ready to read line length */ case 0: G.VMS_line_length = 0; if ((extent)(p-rawbuf) == (extent)size-1) { /* last char */ G.VMS_line_length = (unsigned)(*p++); G.VMS_line_state = 1; } else { G.VMS_line_length = makeword(p); p += 2; G.VMS_line_state = 2; } G.VMS_line_pad = ((G.VMS_line_length & 1) != 0); /* odd */ break; /* 1: read one byte of length, need second */ case 1: G.VMS_line_length += ((unsigned)(*p++) << 8); G.VMS_line_state = 2; break; /* 2: ready to read VMS_line_length chars */ case 2: { extent remaining = (extent)size+(rawbuf-p); extent outroom; if (G.VMS_line_length < remaining) { remaining = G.VMS_line_length; G.VMS_line_state = 3; } outroom = transbuf+(extent)transbufsiz-q; if (remaining >= outroom) { remaining -= outroom; for (;outroom > 0; p++, outroom--) *q++ = native(*p); #ifdef DLL if (G.redirect_data) { if (writeToMemory(__G__ transbuf, (extent)(q-transbuf))) return PK_ERR; } else #endif if (!uO.cflag && WriteError(transbuf, (extent)(q-transbuf), G.outfile)) return disk_error(__G); else if (uO.cflag && (*G.message)((zvoid *)&G, transbuf, (ulg)(q-transbuf), 0)) return PK_OK; q = transbuf; /* fall through to normal case */ } G.VMS_line_length -= remaining; for (;remaining > 0; p++, remaining--) *q++ = native(*p); } break; /* 3: ready to PutNativeEOL */ case 3: if (q > transbuf+(extent)transbufsiz-lenEOL) { #ifdef DLL if (G.redirect_data) { if (writeToMemory(__G__ transbuf, (extent)(q-transbuf))) return PK_ERR; } else #endif if (!uO.cflag && WriteError(transbuf, (extent)(q-transbuf), G.outfile)) return disk_error(__G); else if (uO.cflag && (*G.message)((zvoid *)&G, transbuf, (ulg)(q-transbuf), 0)) return PK_OK; q = transbuf; } PutNativeEOL G.VMS_line_state = G.VMS_line_pad ? 4 : 0; break; /* 4: ready to read pad byte */ case 4: ++p; G.VMS_line_state = 0; break; } } /* end while */ } else #endif /* VMS_TEXT_CONV */ /*----------------------------------------------------------------------- Algorithm: CR/LF => native; lone CR => native; lone LF => native. This routine is only for non-raw-VMS, non-raw-VM/CMS files (i.e., stream-oriented files, not record-oriented). -----------------------------------------------------------------------*/ /* else not VMS text */ { p = rawbuf; if (*p == LF && G.didCRlast) ++p; G.didCRlast = FALSE; for (q = transbuf; (extent)(p-rawbuf) < (extent)size; ++p) { if (*p == CR) { /* lone CR or CR/LF: treat as EOL */ PutNativeEOL if ((extent)(p-rawbuf) == (extent)size-1) /* last char in buffer */ G.didCRlast = TRUE; else if (p[1] == LF) /* get rid of accompanying LF */ ++p; } else if (*p == LF) /* lone LF */ PutNativeEOL else #ifndef DOS_FLX_OS2_W32 if (*p != CTRLZ) /* lose all ^Z's */ #endif *q++ = native(*p); #if (defined(SMALL_MEM) || defined(MED_MEM)) # if (lenEOL == 1) /* don't check unshrink: both buffers small but equal */ if (!unshrink) # endif /* check for danger of buffer overflow and flush */ if (q > transbuf+(extent)transbufsiz-lenEOL) { Trace((stderr, "p - rawbuf = %u q-transbuf = %u size = %lu\n", (unsigned)(p-rawbuf), (unsigned)(q-transbuf), size)); if (!uO.cflag && WriteError(transbuf, (extent)(q-transbuf), G.outfile)) return disk_error(__G); else if (uO.cflag && (*G.message)((zvoid *)&G, transbuf, (ulg)(q-transbuf), 0)) return PK_OK; q = transbuf; continue; } #endif /* SMALL_MEM || MED_MEM */ } } /*----------------------------------------------------------------------- Done translating: write whatever we've got to file (or screen). -----------------------------------------------------------------------*/ Trace((stderr, "p - rawbuf = %u q-transbuf = %u size = %lu\n", (unsigned)(p-rawbuf), (unsigned)(q-transbuf), size)); if (q > transbuf) { #ifdef DLL if (G.redirect_data) { if (writeToMemory(__G__ transbuf, (extent)(q-transbuf))) return PK_ERR; } else #endif if (!uO.cflag && WriteError(transbuf, (extent)(q-transbuf), G.outfile)) return disk_error(__G); else if (uO.cflag && (*G.message)((zvoid *)&G, transbuf, (ulg)(q-transbuf), 0)) return PK_OK; } } return PK_OK; } /* end function flush() [resp. partflush() for 16-bit Deflate64 support] */ #ifdef VMS_TEXT_CONV /********************************/ /* Function is_vms_varlen_txt() */ /********************************/ static int is_vms_varlen_txt(__G__ ef_buf, ef_len) __GDEF uch *ef_buf; /* buffer containing extra field */ unsigned ef_len; /* total length of extra field */ { unsigned eb_id; unsigned eb_len; uch *eb_data; unsigned eb_datlen; #define VMSREC_C_UNDEF 0 #define VMSREC_C_VAR 2 uch vms_rectype = VMSREC_C_UNDEF; /* uch vms_fileorg = 0; */ /* currently, fileorg is not used... */ #define VMSPK_ITEMID 0 #define VMSPK_ITEMLEN 2 #define VMSPK_ITEMHEADSZ 4 #define VMSATR_C_RECATTR 4 #define VMS_FABSIG 0x42414656 /* "VFAB" */ /* offsets of interesting fields in VMS fabdef structure */ #define VMSFAB_B_RFM 31 /* record format byte */ #define VMSFAB_B_ORG 29 /* file organization byte */ if (ef_len == 0 || ef_buf == NULL) return FALSE; while (ef_len >= EB_HEADSIZE) { eb_id = makeword(EB_ID + ef_buf); eb_len = makeword(EB_LEN + ef_buf); if (eb_len > (ef_len - EB_HEADSIZE)) { /* discovered some extra field inconsistency! */ Trace((stderr, "is_vms_varlen_txt: block length %u > rest ef_size %u\n", eb_len, ef_len - EB_HEADSIZE)); break; } switch (eb_id) { case EF_PKVMS: /* The PKVMS e.f. raw data part consists of: * a) 4 bytes CRC checksum * b) list of uncompressed variable-length data items * Each data item is introduced by a fixed header * - 2 bytes data type ID * - 2 bytes of data * - bytes of actual attribute data */ /* get pointer to start of data and its total length */ eb_data = ef_buf+(EB_HEADSIZE+4); eb_datlen = eb_len-4; /* test the CRC checksum */ if (makelong(ef_buf+EB_HEADSIZE) != crc32(CRCVAL_INITIAL, eb_data, (extent)eb_datlen)) { Info(slide, 1, ((char *)slide, "[Warning: CRC error, discarding PKWARE extra field]\n")); /* skip over the data analysis code */ break; } /* scan through the attribute data items */ while (eb_datlen > 4) { unsigned fldsize = makeword(&eb_data[VMSPK_ITEMLEN]); /* check the item type word */ switch (makeword(&eb_data[VMSPK_ITEMID])) { case VMSATR_C_RECATTR: /* we have found the (currently only) interesting * data item */ if (fldsize >= 1) { vms_rectype = eb_data[VMSPK_ITEMHEADSZ] & 15; /* vms_fileorg = eb_data[VMSPK_ITEMHEADSZ] >> 4; */ } break; default: break; } /* skip to next data item */ eb_datlen -= fldsize + VMSPK_ITEMHEADSZ; eb_data += fldsize + VMSPK_ITEMHEADSZ; } break; case EF_IZVMS: if (makelong(ef_buf+EB_HEADSIZE) == VMS_FABSIG) { if ((eb_data = extract_izvms_block(__G__ ef_buf+EB_HEADSIZE, eb_len, &eb_datlen, NULL, 0)) != NULL) { if (eb_datlen >= VMSFAB_B_RFM+1) { vms_rectype = eb_data[VMSFAB_B_RFM] & 15; /* vms_fileorg = eb_data[VMSFAB_B_ORG] >> 4; */ } free(eb_data); } } break; default: break; } /* Skip this extra field block */ ef_buf += (eb_len + EB_HEADSIZE); ef_len -= (eb_len + EB_HEADSIZE); } return (vms_rectype == VMSREC_C_VAR); } /* end function is_vms_varlen_txtfile() */ #endif /* VMS_TEXT_CONV */ /*************************/ /* Function disk_error() */ /*************************/ static int disk_error(__G) __GDEF { /* OK to use slide[] here because this file is finished regardless */ Info(slide, 0x4a1, ((char *)slide, LoadFarString(DiskFullQuery), FnFilter1(G.filename))); #ifndef WINDLL fgets(G.answerbuf, sizeof(G.answerbuf), stdin); if (*G.answerbuf == 'y') /* stop writing to this file */ G.disk_full = 1; /* (outfile bad?), but new OK */ else #endif G.disk_full = 2; /* no: exit program */ return PK_DISK; } /* end function disk_error() */ #endif /* !VMS */ /*****************************/ /* Function UzpMessagePrnt() */ /*****************************/ int UZ_EXP UzpMessagePrnt(pG, buf, size, flag) zvoid *pG; /* globals struct: always passed */ uch *buf; /* preformatted string to be printed */ ulg size; /* length of string (may include nulls) */ int flag; /* flag bits */ { /* IMPORTANT NOTE: * The name of the first parameter of UzpMessagePrnt(), which passes * the "Uz_Globs" address, >>> MUST <<< be identical to the string * expansion of the __G__ macro in the REENTRANT case (see globals.h). * This name identity is mandatory for the LoadFarString() macro * (in the SMALL_MEM case) !!! */ int error; uch *q=buf, *endbuf=buf+(unsigned)size; #ifdef MORE uch *p=buf; #if (defined(SCREENWIDTH) && defined(SCREENLWRAP)) int islinefeed = FALSE; #endif #endif FILE *outfp; /*--------------------------------------------------------------------------- These tests are here to allow fine-tuning of UnZip's output messages, but none of them will do anything without setting the appropriate bit in the flag argument of every Info() statement which is to be turned *off*. That is, all messages are currently turned on for all ports. To turn off *all* messages, use the UzpMessageNull() function instead of this one. ---------------------------------------------------------------------------*/ #if (defined(OS2) && defined(DLL)) if (MSG_NO_DLL2(flag)) /* if OS/2 DLL bit is set, do NOT print this msg */ return 0; #endif #ifdef WINDLL if (MSG_NO_WDLL(flag)) return 0; #endif #ifdef WINDLL if (MSG_NO_WGUI(flag)) return 0; #endif /* #ifdef ACORN_GUI if (MSG_NO_AGUI(flag)) return 0; #endif */ #ifdef DLL /* don't display message if data is redirected */ if (((Uz_Globs *)pG)->redirect_data && !((Uz_Globs *)pG)->redirect_text) return 0; #endif if (MSG_STDERR(flag) && !((Uz_Globs *)pG)->UzO.tflag) outfp = (FILE *)stderr; else outfp = (FILE *)stdout; #ifdef QUERY_TRNEWLN /* some systems require termination of query prompts with '\n' to force * immediate display */ if (MSG_MNEWLN(flag)) { /* assumes writable buffer (e.g., slide[]) */ *endbuf++ = '\n'; /* with room for one more char at end of buf */ ++size; /* (safe assumption: only used for four */ } /* short queries in extract.c and fileio.c) */ #endif if (MSG_TNEWLN(flag)) { /* again assumes writable buffer: fragile... */ if ((!size && !((Uz_Globs *)pG)->sol) || (size && (endbuf[-1] != '\n'))) { *endbuf++ = '\n'; ++size; } } #ifdef MORE # ifdef SCREENSIZE /* room for --More-- and one line of overlap: */ # if (defined(SCREENWIDTH) && defined(SCREENLWRAP)) SCREENSIZE(&((Uz_Globs *)pG)->height, &((Uz_Globs *)pG)->width); # else SCREENSIZE(&((Uz_Globs *)pG)->height, (int *)NULL); # endif ((Uz_Globs *)pG)->height -= 2; # else /* room for --More-- and one line of overlap: */ ((Uz_Globs *)pG)->height = SCREENLINES - 2; # if (defined(SCREENWIDTH) && defined(SCREENLWRAP)) ((Uz_Globs *)pG)->width = SCREENWIDTH; # endif # endif #endif /* MORE */ if (MSG_LNEWLN(flag) && !((Uz_Globs *)pG)->sol) { /* not at start of line: want newline */ #ifdef OS2DLL if (!((Uz_Globs *)pG)->redirect_text) { #endif putc('\n', outfp); fflush(outfp); #ifdef MORE if (((Uz_Globs *)pG)->M_flag) { #if (defined(SCREENWIDTH) && defined(SCREENLWRAP)) ((Uz_Globs *)pG)->chars = 0; #endif ++((Uz_Globs *)pG)->numlines; ++((Uz_Globs *)pG)->lines; if (((Uz_Globs *)pG)->lines >= ((Uz_Globs *)pG)->height) (*((Uz_Globs *)pG)->mpause)((zvoid *)pG, LoadFarString(MorePrompt), 1); } #endif /* MORE */ if (MSG_STDERR(flag) && ((Uz_Globs *)pG)->UzO.tflag && !isatty(1) && isatty(2)) { /* error output from testing redirected: also send to stderr */ putc('\n', stderr); fflush(stderr); } #ifdef OS2DLL } else REDIRECTC('\n'); #endif ((Uz_Globs *)pG)->sol = TRUE; } /* put zipfile name, filename and/or error/warning keywords here */ #ifdef MORE if (((Uz_Globs *)pG)->M_flag #ifdef OS2DLL && !((Uz_Globs *)pG)->redirect_text #endif ) { while (p < endbuf) { if (*p == '\n') { #if (defined(SCREENWIDTH) && defined(SCREENLWRAP)) islinefeed = TRUE; } else if (SCREENLWRAP) { if (*p == '\r') { ((Uz_Globs *)pG)->chars = 0; } else { # ifdef TABSIZE if (*p == '\t') ((Uz_Globs *)pG)->chars += (TABSIZE - (((Uz_Globs *)pG)->chars % TABSIZE)); else # endif ++((Uz_Globs *)pG)->chars; if (((Uz_Globs *)pG)->chars >= ((Uz_Globs *)pG)->width) islinefeed = TRUE; } } if (islinefeed) { islinefeed = FALSE; ((Uz_Globs *)pG)->chars = 0; #endif /* (SCREENWIDTH && SCREEN_LWRAP) */ ++((Uz_Globs *)pG)->numlines; ++((Uz_Globs *)pG)->lines; if (((Uz_Globs *)pG)->lines >= ((Uz_Globs *)pG)->height) { if ((error = WriteTxtErr(q, p-q+1, outfp)) != 0) return error; fflush(outfp); ((Uz_Globs *)pG)->sol = TRUE; q = p + 1; (*((Uz_Globs *)pG)->mpause)((zvoid *)pG, LoadFarString(MorePrompt), 1); } } INCSTR(p); } /* end while */ size = (ulg)(p - q); /* remaining text */ } #endif /* MORE */ if (size) { #ifdef OS2DLL if (!((Uz_Globs *)pG)->redirect_text) { #endif if ((error = WriteTxtErr(q, size, outfp)) != 0) return error; #ifndef VMS /* 2005-09-16 SMS. See note at "WriteTxtErr()", above. */ fflush(outfp); #endif if (MSG_STDERR(flag) && ((Uz_Globs *)pG)->UzO.tflag && !isatty(1) && isatty(2)) { /* error output from testing redirected: also send to stderr */ if ((error = WriteTxtErr(q, size, stderr)) != 0) return error; fflush(stderr); } #ifdef OS2DLL } else { /* GRR: this is ugly: hide with macro */ if ((error = REDIRECTPRINT(q, size)) != 0) return error; } #endif /* OS2DLL */ ((Uz_Globs *)pG)->sol = (endbuf[-1] == '\n'); } return 0; } /* end function UzpMessagePrnt() */ #ifdef DLL /*****************************/ /* Function UzpMessageNull() */ /* convenience routine for no output at all */ /*****************************/ int UZ_EXP UzpMessageNull(pG, buf, size, flag) zvoid *pG; /* globals struct: always passed */ uch *buf; /* preformatted string to be printed */ ulg size; /* length of string (may include nulls) */ int flag; /* flag bits */ { return 0; } /* end function UzpMessageNull() */ #endif /* DLL */ /***********************/ /* Function UzpInput() */ /* GRR: this is a placeholder for now */ /***********************/ int UZ_EXP UzpInput(pG, buf, size, flag) zvoid *pG; /* globals struct: always passed */ uch *buf; /* preformatted string to be printed */ int *size; /* (address of) size of buf and of returned string */ int flag; /* flag bits (bit 0: no echo) */ { /* tell picky compilers to shut up about "unused variable" warnings */ pG = pG; buf = buf; flag = flag; *size = 0; return 0; } /* end function UzpInput() */ #if (!defined(WINDLL) && !defined(MACOS)) /***************************/ /* Function UzpMorePause() */ /***************************/ void UZ_EXP UzpMorePause(pG, prompt, flag) zvoid *pG; /* globals struct: always passed */ ZCONST char *prompt; /* "--More--" prompt */ int flag; /* 0 = any char OK; 1 = accept only '\n', ' ', q */ { uch c; /*--------------------------------------------------------------------------- Print a prompt and wait for the user to press a key, then erase prompt if possible. ---------------------------------------------------------------------------*/ if (!((Uz_Globs *)pG)->sol) fprintf(stderr, "\n"); /* numlines may or may not be used: */ fprintf(stderr, prompt, ((Uz_Globs *)pG)->numlines); fflush(stderr); if (flag & 1) { do { c = (uch)FGETCH(0); } while ( #ifdef THEOS c != 17 && /* standard QUIT key */ #endif c != '\r' && c != '\n' && c != ' ' && c != 'q' && c != 'Q'); } else c = (uch)FGETCH(0); /* newline was not echoed, so cover up prompt line */ fprintf(stderr, LoadFarString(HidePrompt)); fflush(stderr); if ( #ifdef THEOS (c == 17) || /* standard QUIT key */ #endif (ToLower(c) == 'q')) { DESTROYGLOBALS(); EXIT(PK_COOL); } ((Uz_Globs *)pG)->sol = TRUE; #ifdef MORE /* space for another screen, enter for another line. */ if ((flag & 1) && c == ' ') ((Uz_Globs *)pG)->lines = 0; #endif /* MORE */ } /* end function UzpMorePause() */ #endif /* !WINDLL && !MACOS */ #ifndef WINDLL /**************************/ /* Function UzpPassword() */ /**************************/ int UZ_EXP UzpPassword (pG, rcnt, pwbuf, size, zfn, efn) zvoid *pG; /* pointer to UnZip's internal global vars */ int *rcnt; /* retry counter */ char *pwbuf; /* buffer for password */ int size; /* size of password buffer */ ZCONST char *zfn; /* name of zip archive */ ZCONST char *efn; /* name of archive entry being processed */ { #if CRYPT int r = IZ_PW_ENTERED; char *m; char *prompt; #ifndef REENTRANT /* tell picky compilers to shut up about "unused variable" warnings */ pG = pG; #endif if (*rcnt == 0) { /* First call for current entry */ *rcnt = 2; if ((prompt = (char *)malloc(2*FILNAMSIZ + 15)) != (char *)NULL) { sprintf(prompt, LoadFarString(PasswPrompt), FnFilter1(zfn), FnFilter2(efn)); m = prompt; } else m = (char *)LoadFarString(PasswPrompt2); } else { /* Retry call, previous password was wrong */ (*rcnt)--; prompt = NULL; m = (char *)LoadFarString(PasswRetry); } m = getp(__G__ m, pwbuf, size); if (prompt != (char *)NULL) { free(prompt); } if (m == (char *)NULL) { r = IZ_PW_ERROR; } else if (*pwbuf == '\0') { r = IZ_PW_CANCELALL; } return r; #else /* !CRYPT */ /* tell picky compilers to shut up about "unused variable" warnings */ pG = pG; rcnt = rcnt; pwbuf = pwbuf; size = size; zfn = zfn; efn = efn; return IZ_PW_ERROR; /* internal error; function should never get called */ #endif /* ?CRYPT */ } /* end function UzpPassword() */ /**********************/ /* Function handler() */ /**********************/ void handler(signal) /* upon interrupt, turn on echo and exit cleanly */ int signal; { GETGLOBALS(); #if !(defined(SIGBUS) || defined(SIGSEGV)) /* add a newline if not at */ (*G.message)((zvoid *)&G, slide, 0L, 0x41); /* start of line (to stderr; */ #endif /* slide[] should be safe) */ echon(); #ifdef SIGBUS if (signal == SIGBUS) { Info(slide, 0x421, ((char *)slide, LoadFarString(ZipfileCorrupt), "bus error")); DESTROYGLOBALS(); EXIT(PK_BADERR); } #endif /* SIGBUS */ #ifdef SIGILL if (signal == SIGILL) { Info(slide, 0x421, ((char *)slide, LoadFarString(ZipfileCorrupt), "illegal instruction")); DESTROYGLOBALS(); EXIT(PK_BADERR); } #endif /* SIGILL */ #ifdef SIGSEGV if (signal == SIGSEGV) { Info(slide, 0x421, ((char *)slide, LoadFarString(ZipfileCorrupt), "segmentation violation")); DESTROYGLOBALS(); EXIT(PK_BADERR); } #endif /* SIGSEGV */ /* probably ctrl-C */ DESTROYGLOBALS(); #if defined(AMIGA) && defined(__SASC) _abort(); #endif EXIT(IZ_CTRLC); /* was EXIT(0), then EXIT(PK_ERR) */ } #endif /* !WINDLL */ #if (!defined(VMS) && !defined(CMS_MVS)) #if (!defined(OS2) || defined(TIMESTAMP)) #if (!defined(HAVE_MKTIME) || defined(WIN32)) /* also used in amiga/filedate.c and win32/win32.c */ ZCONST ush ydays[] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }; #endif /*******************************/ /* Function dos_to_unix_time() */ /* used for freshening/updating/timestamps */ /*******************************/ time_t dos_to_unix_time(dosdatetime) ulg dosdatetime; { time_t m_time; #ifdef HAVE_MKTIME ZCONST time_t now = time(NULL); struct tm *tm; # define YRBASE 1900 tm = localtime(&now); tm->tm_isdst = -1; /* let mktime determine if DST is in effect */ /* dissect date */ tm->tm_year = ((int)(dosdatetime >> 25) & 0x7f) + (1980 - YRBASE); tm->tm_mon = ((int)(dosdatetime >> 21) & 0x0f) - 1; tm->tm_mday = ((int)(dosdatetime >> 16) & 0x1f); /* dissect time */ tm->tm_hour = (int)((unsigned)dosdatetime >> 11) & 0x1f; tm->tm_min = (int)((unsigned)dosdatetime >> 5) & 0x3f; tm->tm_sec = (int)((unsigned)dosdatetime << 1) & 0x3e; m_time = mktime(tm); NATIVE_TO_TIMET(m_time) /* NOP unless MSC 7.0 or Macintosh */ TTrace((stderr, " final m_time = %lu\n", (ulg)m_time)); #else /* !HAVE_MKTIME */ int yr, mo, dy, hh, mm, ss; #ifdef TOPS20 # define YRBASE 1900 struct tmx *tmx; char temp[20]; #else /* !TOPS20 */ # define YRBASE 1970 int leap; unsigned days; struct tm *tm; #if (!defined(MACOS) && !defined(RISCOS) && !defined(QDOS) && !defined(TANDEM)) #ifdef WIN32 TIME_ZONE_INFORMATION tzinfo; DWORD res; #else /* ! WIN32 */ #ifndef BSD4_4 /* GRR: change to !defined(MODERN) ? */ #if (defined(BSD) || defined(MTS) || defined(__GO32__)) struct timeb tbp; #else /* !(BSD || MTS || __GO32__) */ #ifdef DECLARE_TIMEZONE extern time_t timezone; #endif #endif /* ?(BSD || MTS || __GO32__) */ #endif /* !BSD4_4 */ #endif /* ?WIN32 */ #endif /* !MACOS && !RISCOS && !QDOS && !TANDEM */ #endif /* ?TOPS20 */ /* dissect date */ yr = ((int)(dosdatetime >> 25) & 0x7f) + (1980 - YRBASE); mo = ((int)(dosdatetime >> 21) & 0x0f) - 1; dy = ((int)(dosdatetime >> 16) & 0x1f) - 1; /* dissect time */ hh = (int)((unsigned)dosdatetime >> 11) & 0x1f; mm = (int)((unsigned)dosdatetime >> 5) & 0x3f; ss = (int)((unsigned)dosdatetime & 0x1f) * 2; #ifdef TOPS20 tmx = (struct tmx *)malloc(sizeof(struct tmx)); sprintf (temp, "%02d/%02d/%02d %02d:%02d:%02d", mo+1, dy+1, yr, hh, mm, ss); time_parse(temp, tmx, (char *)0); m_time = time_make(tmx); free(tmx); #else /* !TOPS20 */ /*--------------------------------------------------------------------------- Calculate the number of seconds since the epoch, usually 1 January 1970. ---------------------------------------------------------------------------*/ /* leap = # of leap yrs from YRBASE up to but not including current year */ leap = ((yr + YRBASE - 1) / 4); /* leap year base factor */ /* calculate days from BASE to this year and add expired days this year */ days = (yr * 365) + (leap - 492) + ydays[mo]; /* if year is a leap year and month is after February, add another day */ if ((mo > 1) && ((yr+YRBASE)%4 == 0) && ((yr+YRBASE) != 2100)) ++days; /* OK through 2199 */ /* convert date & time to seconds relative to 00:00:00, 01/01/YRBASE */ m_time = (time_t)((unsigned long)(days + dy) * 86400L + (unsigned long)hh * 3600L + (unsigned long)(mm * 60 + ss)); /* - 1; MS-DOS times always rounded up to nearest even second */ TTrace((stderr, "dos_to_unix_time:\n")); TTrace((stderr, " m_time before timezone = %lu\n", (ulg)m_time)); /*--------------------------------------------------------------------------- Adjust for local standard timezone offset. ---------------------------------------------------------------------------*/ #if (!defined(MACOS) && !defined(RISCOS) && !defined(QDOS) && !defined(TANDEM)) #ifdef WIN32 /* account for timezone differences */ res = GetTimeZoneInformation(&tzinfo); if (res != TIME_ZONE_ID_INVALID) { m_time += 60*(tzinfo.Bias); #else /* !WIN32 */ #if (defined(BSD) || defined(MTS) || defined(__GO32__)) #ifdef BSD4_4 if ( (dosdatetime >= DOSTIME_2038_01_18) && (m_time < (time_t)0x70000000L) ) m_time = U_TIME_T_MAX; /* saturate in case of (unsigned) overflow */ if (m_time < (time_t)0L) /* a converted DOS time cannot be negative */ m_time = S_TIME_T_MAX; /* -> saturate at max signed time_t value */ if ((tm = localtime(&m_time)) != (struct tm *)NULL) m_time -= tm->tm_gmtoff; /* sec. EAST of GMT: subtr. */ #else /* !(BSD4_4 */ ftime(&tbp); /* get `timezone' */ m_time += tbp.timezone * 60L; /* seconds WEST of GMT: add */ #endif /* ?(BSD4_4 || __EMX__) */ #else /* !(BSD || MTS || __GO32__) */ /* tzset was already called at start of process_zipfiles() */ /* tzset(); */ /* set `timezone' variable */ #ifndef __BEOS__ /* BeOS DR8 has no timezones... */ m_time += timezone; /* seconds WEST of GMT: add */ #endif #endif /* ?(BSD || MTS || __GO32__) */ #endif /* ?WIN32 */ TTrace((stderr, " m_time after timezone = %lu\n", (ulg)m_time)); /*--------------------------------------------------------------------------- Adjust for local daylight savings (summer) time. ---------------------------------------------------------------------------*/ #ifndef BSD4_4 /* (DST already added to tm_gmtoff, so skip tm_isdst) */ if ( (dosdatetime >= DOSTIME_2038_01_18) && (m_time < (time_t)0x70000000L) ) m_time = U_TIME_T_MAX; /* saturate in case of (unsigned) overflow */ if (m_time < (time_t)0L) /* a converted DOS time cannot be negative */ m_time = S_TIME_T_MAX; /* -> saturate at max signed time_t value */ TIMET_TO_NATIVE(m_time) /* NOP unless MSC 7.0 or Macintosh */ if (((tm = localtime((time_t *)&m_time)) != NULL) && tm->tm_isdst) #ifdef WIN32 m_time += 60L * tzinfo.DaylightBias; /* adjust with DST bias */ else m_time += 60L * tzinfo.StandardBias; /* add StdBias (normally 0) */ #else m_time -= 60L * 60L; /* adjust for daylight savings time */ #endif NATIVE_TO_TIMET(m_time) /* NOP unless MSC 7.0 or Macintosh */ TTrace((stderr, " m_time after DST = %lu\n", (ulg)m_time)); #endif /* !BSD4_4 */ #ifdef WIN32 } #endif #endif /* !MACOS && !RISCOS && !QDOS && !TANDEM */ #endif /* ?TOPS20 */ #endif /* ?HAVE_MKTIME */ if ( (dosdatetime >= DOSTIME_2038_01_18) && (m_time < (time_t)0x70000000L) ) m_time = U_TIME_T_MAX; /* saturate in case of (unsigned) overflow */ if (m_time < (time_t)0L) /* a converted DOS time cannot be negative */ m_time = S_TIME_T_MAX; /* -> saturate at max signed time_t value */ return m_time; } /* end function dos_to_unix_time() */ #endif /* !OS2 || TIMESTAMP */ #endif /* !VMS && !CMS_MVS */ #if (!defined(VMS) && !defined(OS2) && !defined(CMS_MVS)) /******************************/ /* Function check_for_newer() */ /* used for overwriting/freshening/updating */ /******************************/ int check_for_newer(__G__ filename) /* return 1 if existing file is newer */ __GDEF /* or equal; 0 if older; -1 if doesn't */ char *filename; /* exist yet */ { time_t existing, archive; #ifdef USE_EF_UT_TIME iztimes z_utime; #endif #ifdef AOS_VS long dyy, dmm, ddd, dhh, dmin, dss; dyy = (lrec.last_mod_dos_datetime >> 25) + 1980; dmm = (lrec.last_mod_dos_datetime >> 21) & 0x0f; ddd = (lrec.last_mod_dos_datetime >> 16) & 0x1f; dhh = (lrec.last_mod_dos_datetime >> 11) & 0x1f; dmin = (lrec.last_mod_dos_datetime >> 5) & 0x3f; dss = (lrec.last_mod_dos_datetime & 0x1f) * 2; /* under AOS/VS, file times can only be set at creation time, * with the info in a special DG format. Make sure we can create * it here - we delete it later & re-create it, whether or not * it exists now. */ if (!zvs_create(filename, (((ulg)dgdate(dmm, ddd, dyy)) << 16) | (dhh*1800L + dmin*30L + dss/2L), -1L, -1L, (char *) -1, -1, -1, -1)) return DOES_NOT_EXIST; #endif /* AOS_VS */ Trace((stderr, "check_for_newer: doing stat(%s)\n", FnFilter1(filename))); if (SSTAT(filename, &G.statbuf)) { Trace((stderr, "check_for_newer: stat(%s) returns %d: file does not exist\n", FnFilter1(filename), SSTAT(filename, &G.statbuf))); #ifdef SYMLINKS Trace((stderr, "check_for_newer: doing lstat(%s)\n", FnFilter1(filename))); /* GRR OPTION: could instead do this test ONLY if G.symlnk is true */ if (lstat(filename, &G.statbuf) == 0) { Trace((stderr, "check_for_newer: lstat(%s) returns 0: symlink does exist\n", FnFilter1(filename))); if (QCOND2 && !IS_OVERWRT_ALL) Info(slide, 0, ((char *)slide, LoadFarString(FileIsSymLink), FnFilter1(filename), " with no real file")); return EXISTS_AND_OLDER; /* symlink dates are meaningless */ } #endif /* SYMLINKS */ return DOES_NOT_EXIST; } Trace((stderr, "check_for_newer: stat(%s) returns 0: file exists\n", FnFilter1(filename))); #ifdef SYMLINKS /* GRR OPTION: could instead do this test ONLY if G.symlnk is true */ if (lstat(filename, &G.statbuf) == 0 && S_ISLNK(G.statbuf.st_mode)) { Trace((stderr, "check_for_newer: %s is a symbolic link\n", FnFilter1(filename))); if (QCOND2 && !IS_OVERWRT_ALL) Info(slide, 0, ((char *)slide, LoadFarString(FileIsSymLink), FnFilter1(filename), "")); return EXISTS_AND_OLDER; /* symlink dates are meaningless */ } #endif /* SYMLINKS */ NATIVE_TO_TIMET(G.statbuf.st_mtime) /* NOP unless MSC 7.0 or Macintosh */ #ifdef USE_EF_UT_TIME /* The `Unix extra field mtime' should be used for comparison with the * time stamp of the existing file >>>ONLY<<< when the EF info is also * used to set the modification time of the extracted file. */ if (G.extra_field && #ifdef IZ_CHECK_TZ G.tz_is_valid && #endif (ef_scan_for_izux(G.extra_field, G.lrec.extra_field_length, 0, G.lrec.last_mod_dos_datetime, &z_utime, NULL) & EB_UT_FL_MTIME)) { TTrace((stderr, "check_for_newer: using Unix extra field mtime\n")); existing = G.statbuf.st_mtime; archive = z_utime.mtime; } else { /* round up existing filetime to nearest 2 seconds for comparison, * but saturate in case of arithmetic overflow */ existing = ((G.statbuf.st_mtime & 1) && (G.statbuf.st_mtime + 1 > G.statbuf.st_mtime)) ? G.statbuf.st_mtime + 1 : G.statbuf.st_mtime; archive = dos_to_unix_time(G.lrec.last_mod_dos_datetime); } #else /* !USE_EF_UT_TIME */ /* round up existing filetime to nearest 2 seconds for comparison, * but saturate in case of arithmetic overflow */ existing = ((G.statbuf.st_mtime & 1) && (G.statbuf.st_mtime + 1 > G.statbuf.st_mtime)) ? G.statbuf.st_mtime + 1 : G.statbuf.st_mtime; archive = dos_to_unix_time(G.lrec.last_mod_dos_datetime); #endif /* ?USE_EF_UT_TIME */ TTrace((stderr, "check_for_newer: existing %lu, archive %lu, e-a %ld\n", (ulg)existing, (ulg)archive, (long)(existing-archive))); return (existing >= archive); } /* end function check_for_newer() */ #endif /* !VMS && !OS2 && !CMS_MVS */ /************************/ /* Function do_string() */ /************************/ int do_string(__G__ length, option) /* return PK-type error code */ __GDEF unsigned int length; /* without prototype, ush converted to this */ int option; { unsigned comment_bytes_left; unsigned int block_len; int error=PK_OK; #ifdef AMIGA char tmp_fnote[2 * AMIGA_FILENOTELEN]; /* extra room for squozen chars */ #endif /*--------------------------------------------------------------------------- This function processes arbitrary-length (well, usually) strings. Four major options are allowed: SKIP, wherein the string is skipped (pretty logical, eh?); DISPLAY, wherein the string is printed to standard output after undergoing any necessary or unnecessary character conversions; DS_FN, wherein the string is put into the filename[] array after under- going appropriate conversions (including case-conversion, if that is indicated: see the global variable pInfo->lcflag); and EXTRA_FIELD, wherein the `string' is assumed to be an extra field and is copied to the (freshly malloced) buffer G.extra_field. The third option should be OK since filename is dimensioned at 1025, but we check anyway. The string, by the way, is assumed to start at the current file-pointer position; its length is given by 'length'. So start off by checking the length of the string: if zero, we're already done. ---------------------------------------------------------------------------*/ if (!length) return PK_COOL; switch (option) { #if (defined(SFX) && defined(CHEAP_SFX_AUTORUN)) /* * Special case: See if the comment begins with an autorun command line. * Save that and display (or skip) the remainder. */ case CHECK_AUTORUN: case CHECK_AUTORUN_Q: comment_bytes_left = length; if (length >= 10) { block_len = readbuf(__G__ (char *)G.outbuf, 10); if (block_len == 0) return PK_EOF; comment_bytes_left -= block_len; G.outbuf[block_len] = '\0'; if (!strcmp((char *)G.outbuf, "$AUTORUN$>")) { char *eol; length -= 10; block_len = readbuf(__G__ G.autorun_command, MIN(length, sizeof(G.autorun_command)-1)); if (block_len == 0) return PK_EOF; comment_bytes_left -= block_len; G.autorun_command[block_len] = '\0'; A_TO_N(G.autorun_command); eol = strchr(G.autorun_command, '\n'); if (!eol) eol = G.autorun_command + strlen(G.autorun_command) - 1; length -= eol + 1 - G.autorun_command; while (eol >= G.autorun_command && isspace(*eol)) *eol-- = '\0'; #if (defined(WIN32) && !defined(_WIN32_WCE)) /* Win9x console always uses OEM character coding, and WinNT console is set to OEM charset by default, too */ INTERN_TO_OEM(G.autorun_command, G.autorun_command); #endif /* (WIN32 && !_WIN32_WCE) */ } } if (option == CHECK_AUTORUN_Q) /* don't display the remainder */ length = 0; /* seek to beginning of remaining part of comment -- rewind if */ /* displaying entire comment, or skip to end if discarding it */ seek_zipf(__G__ G.cur_zipfile_bufstart - G.extra_bytes + (G.inptr - G.inbuf) + comment_bytes_left - length); if (!length) break; /* FALL THROUGH... */ #endif /* SFX && CHEAP_SFX_AUTORUN */ /* * First normal case: print string on standard output. First set loop * variables, then loop through the comment in chunks of OUTBUFSIZ bytes, * converting formats and printing as we go. The second half of the * loop conditional was added because the file might be truncated, in * which case comment_bytes_left will remain at some non-zero value for * all time. outbuf and slide are used as scratch buffers because they * are available (we should be either before or in between any file pro- * cessing). */ case DISPLAY: case DISPL_8: comment_bytes_left = length; block_len = OUTBUFSIZ; /* for the while statement, first time */ while (comment_bytes_left > 0 && block_len > 0) { register uch *p = G.outbuf; register uch *q = G.outbuf; if ((block_len = readbuf(__G__ (char *)G.outbuf, MIN((unsigned)OUTBUFSIZ, comment_bytes_left))) == 0) return PK_EOF; comment_bytes_left -= block_len; /* this is why we allocated an extra byte for outbuf: terminate * with zero (ASCIIZ) */ G.outbuf[block_len] = '\0'; /* remove all ASCII carriage returns from comment before printing * (since used before A_TO_N(), check for CR instead of '\r') */ while (*p) { while (*p == CR) ++p; *q++ = *p++; } /* could check whether (p - outbuf) == block_len here */ *q = '\0'; if (option == DISPL_8) { /* translate the text coded in the entry's host-dependent "extended ASCII" charset into the compiler's (system's) internal text code page */ Ext_ASCII_TO_Native((char *)G.outbuf, G.pInfo->hostnum, G.pInfo->hostver, G.pInfo->HasUxAtt, FALSE); #ifdef WINDLL /* translate to ANSI (RTL internal codepage may be OEM) */ INTERN_TO_ISO((char *)G.outbuf, (char *)G.outbuf); #else /* !WINDLL */ #if (defined(WIN32) && !defined(_WIN32_WCE)) /* Win9x console always uses OEM character coding, and WinNT console is set to OEM charset by default, too */ INTERN_TO_OEM((char *)G.outbuf, (char *)G.outbuf); #endif /* (WIN32 && !_WIN32_WCE) */ #endif /* ?WINDLL */ } else { A_TO_N(G.outbuf); /* translate string to native */ } #ifdef WINDLL /* ran out of local mem -- had to cheat */ win_fprintf((zvoid *)&G, stdout, (extent)(q-G.outbuf), (char *)G.outbuf); win_fprintf((zvoid *)&G, stdout, 2, (char *)"\n\n"); #else /* !WINDLL */ #ifdef NOANSIFILT /* GRR: can ANSI be used with EBCDIC? */ (*G.message)((zvoid *)&G, G.outbuf, (ulg)(q-G.outbuf), 0); #else /* ASCII, filter out ANSI escape sequences and handle ^S (pause) */ p = G.outbuf - 1; q = slide; while (*++p) { int pause = FALSE; if (*p == 0x1B) { /* ASCII escape char */ *q++ = '^'; *q++ = '['; } else if (*p == 0x13) { /* ASCII ^S (pause) */ pause = TRUE; if (p[1] == LF) /* ASCII LF */ *q++ = *++p; else if (p[1] == CR && p[2] == LF) { /* ASCII CR LF */ *q++ = *++p; *q++ = *++p; } } else *q++ = *p; if ((unsigned)(q-slide) > WSIZE-3 || pause) { /* flush */ (*G.message)((zvoid *)&G, slide, (ulg)(q-slide), 0); q = slide; if (pause && G.extract_flag) /* don't pause for list/test */ (*G.mpause)((zvoid *)&G, LoadFarString(QuitPrompt), 0); } } (*G.message)((zvoid *)&G, slide, (ulg)(q-slide), 0); #endif /* ?NOANSIFILT */ #endif /* ?WINDLL */ } /* add '\n' if not at start of line */ (*G.message)((zvoid *)&G, slide, 0L, 0x40); break; /* * Second case: read string into filename[] array. The filename should * never ever be longer than FILNAMSIZ-1 (1024), but for now we'll check, * just to be sure. */ case DS_FN: case DS_FN_L: #ifdef UNICODE_SUPPORT /* get the whole filename as need it for Unicode checksum */ if (G.fnfull_bufsize <= length) { extent fnbufsiz = FILNAMSIZ; if (fnbufsiz <= length) fnbufsiz = length + 1; if (G.filename_full) free(G.filename_full); G.filename_full = malloc(fnbufsiz); if (G.filename_full == NULL) return PK_MEM; G.fnfull_bufsize = fnbufsiz; } if (readbuf(__G__ G.filename_full, length) == 0) return PK_EOF; G.filename_full[length] = '\0'; /* terminate w/zero: ASCIIZ */ /* if needed, chop off end so standard filename is a valid length */ if (length >= FILNAMSIZ) { Info(slide, 0x401, ((char *)slide, LoadFarString(FilenameTooLongTrunc))); error = PK_WARN; length = FILNAMSIZ - 1; } /* no excess size */ block_len = 0; strncpy(G.filename, G.filename_full, length); G.filename[length] = '\0'; /* terminate w/zero: ASCIIZ */ #else /* !UNICODE_SUPPORT */ if (length >= FILNAMSIZ) { Info(slide, 0x401, ((char *)slide, LoadFarString(FilenameTooLongTrunc))); error = PK_WARN; /* remember excess length in block_len */ block_len = length - (FILNAMSIZ - 1); length = FILNAMSIZ - 1; } else /* no excess size */ block_len = 0; if (readbuf(__G__ G.filename, length) == 0) return PK_EOF; G.filename[length] = '\0'; /* terminate w/zero: ASCIIZ */ #endif /* ?UNICODE_SUPPORT */ /* translate the Zip entry filename coded in host-dependent "extended ASCII" into the compiler's (system's) internal text code page */ Ext_ASCII_TO_Native(G.filename, G.pInfo->hostnum, G.pInfo->hostver, G.pInfo->HasUxAtt, (option == DS_FN_L)); if (G.pInfo->lcflag) /* replace with lowercase filename */ STRLOWER(G.filename, G.filename); if (G.pInfo->vollabel && length > 8 && G.filename[8] == '.') { char *p = G.filename+8; while (*p++) p[-1] = *p; /* disk label, and 8th char is dot: remove dot */ } if (!block_len) /* no overflow, we're done here */ break; /* * We truncated the filename, so print what's left and then fall * through to the SKIP routine. */ Info(slide, 0x401, ((char *)slide, "[ %s ]\n", FnFilter1(G.filename))); length = block_len; /* SKIP the excess bytes... */ /* FALL THROUGH... */ /* * Third case: skip string, adjusting readbuf's internal variables * as necessary (and possibly skipping to and reading a new block of * data). */ case SKIP: /* cur_zipfile_bufstart already takes account of extra_bytes, so don't * correct for it twice: */ seek_zipf(__G__ G.cur_zipfile_bufstart - G.extra_bytes + (G.inptr-G.inbuf) + length); break; /* * Fourth case: assume we're at the start of an "extra field"; malloc * storage for it and read data into the allocated space. */ case EXTRA_FIELD: if (G.extra_field != (uch *)NULL) free(G.extra_field); if ((G.extra_field = (uch *)malloc(length)) == (uch *)NULL) { Info(slide, 0x401, ((char *)slide, LoadFarString(ExtraFieldTooLong), length)); /* cur_zipfile_bufstart already takes account of extra_bytes, * so don't correct for it twice: */ seek_zipf(__G__ G.cur_zipfile_bufstart - G.extra_bytes + (G.inptr-G.inbuf) + length); } else { if (readbuf(__G__ (char *)G.extra_field, length) == 0) return PK_EOF; /* Looks like here is where extra fields are read */ getZip64Data(__G__ G.extra_field, length); #ifdef UNICODE_SUPPORT G.unipath_filename = NULL; if (G.UzO.U_flag < 2) { /* check if GPB11 (General Purpuse Bit 11) is set indicating the standard path and comment are UTF-8 */ if (G.pInfo->GPFIsUTF8) { /* if GPB11 set then filename_full is untruncated UTF-8 */ G.unipath_filename = G.filename_full; } else { /* Get the Unicode fields if exist */ getUnicodeData(__G__ G.extra_field, length); if (G.unipath_filename && strlen(G.unipath_filename) == 0) { /* the standard filename field is UTF-8 */ free(G.unipath_filename); G.unipath_filename = G.filename_full; } } if (G.unipath_filename) { # ifdef UTF8_MAYBE_NATIVE if (G.native_is_utf8 # ifdef UNICODE_WCHAR && (!G.unicode_escape_all) # endif ) { strncpy(G.filename, G.unipath_filename, FILNAMSIZ - 1); /* make sure filename is short enough */ if (strlen(G.unipath_filename) >= FILNAMSIZ) { G.filename[FILNAMSIZ - 1] = '\0'; Info(slide, 0x401, ((char *)slide, LoadFarString(UFilenameTooLongTrunc))); error = PK_WARN; } } # ifdef UNICODE_WCHAR else # endif # endif /* UTF8_MAYBE_NATIVE */ # ifdef UNICODE_WCHAR { char *fn; /* convert UTF-8 to local character set */ fn = utf8_to_local_string(G.unipath_filename, G.unicode_escape_all); /* make sure filename is short enough */ if (strlen(fn) >= FILNAMSIZ) { fn[FILNAMSIZ - 1] = '\0'; Info(slide, 0x401, ((char *)slide, LoadFarString(UFilenameTooLongTrunc))); error = PK_WARN; } /* replace filename with converted UTF-8 */ strcpy(G.filename, fn); free(fn); } # endif /* UNICODE_WCHAR */ if (G.unipath_filename != G.filename_full) free(G.unipath_filename); G.unipath_filename = NULL; } } #endif /* UNICODE_SUPPORT */ } break; #ifdef AMIGA /* * Fifth case, for the Amiga only: take the comment that would ordinarily * be skipped over, and turn it into a 79 character string that will be * attached to the file as a "filenote" after it is extracted. */ case FILENOTE: if ((block_len = readbuf(__G__ tmp_fnote, (unsigned) MIN(length, 2 * AMIGA_FILENOTELEN - 1))) == 0) return PK_EOF; if ((length -= block_len) > 0) /* treat remainder as in case SKIP: */ seek_zipf(__G__ G.cur_zipfile_bufstart - G.extra_bytes + (G.inptr - G.inbuf) + length); /* convert multi-line text into single line with no ctl-chars: */ tmp_fnote[block_len] = '\0'; while ((short int) --block_len >= 0) if ((unsigned) tmp_fnote[block_len] < ' ') if (tmp_fnote[block_len+1] == ' ') /* no excess */ strcpy(tmp_fnote+block_len, tmp_fnote+block_len+1); else tmp_fnote[block_len] = ' '; tmp_fnote[AMIGA_FILENOTELEN - 1] = '\0'; if (G.filenotes[G.filenote_slot]) free(G.filenotes[G.filenote_slot]); /* should not happen */ G.filenotes[G.filenote_slot] = NULL; if (tmp_fnote[0]) { if (!(G.filenotes[G.filenote_slot] = malloc(strlen(tmp_fnote)+1))) return PK_MEM; strcpy(G.filenotes[G.filenote_slot], tmp_fnote); } break; #endif /* AMIGA */ } /* end switch (option) */ return error; } /* end function do_string() */ /***********************/ /* Function makeword() */ /***********************/ ush makeword(b) ZCONST uch *b; { /* * Convert Intel style 'short' integer to non-Intel non-16-bit * host format. This routine also takes care of byte-ordering. */ return (ush)((b[1] << 8) | b[0]); } /***********************/ /* Function makelong() */ /***********************/ ulg makelong(sig) ZCONST uch *sig; { /* * Convert intel style 'long' variable to non-Intel non-16-bit * host format. This routine also takes care of byte-ordering. */ return (((ulg)sig[3]) << 24) + (((ulg)sig[2]) << 16) + (ulg)((((unsigned)sig[1]) << 8) + ((unsigned)sig[0])); } /************************/ /* Function makeint64() */ /************************/ zusz_t makeint64(sig) ZCONST uch *sig; { #ifdef LARGE_FILE_SUPPORT /* * Convert intel style 'int64' variable to non-Intel non-16-bit * host format. This routine also takes care of byte-ordering. */ return (((zusz_t)sig[7]) << 56) + (((zusz_t)sig[6]) << 48) + (((zusz_t)sig[4]) << 32) + (zusz_t)((((ulg)sig[3]) << 24) + (((ulg)sig[2]) << 16) + (((unsigned)sig[1]) << 8) + (sig[0])); #else /* !LARGE_FILE_SUPPORT */ if ((sig[7] | sig[6] | sig[5] | sig[4]) != 0) return (zusz_t)0xffffffffL; else return (zusz_t)((((ulg)sig[3]) << 24) + (((ulg)sig[2]) << 16) + (((unsigned)sig[1]) << 8) + (sig[0])); #endif /* ?LARGE_FILE_SUPPORT */ } /*********************/ /* Function fzofft() */ /*********************/ /* Format a zoff_t value in a cylindrical buffer set. */ char *fzofft(__G__ val, pre, post) __GDEF zoff_t val; ZCONST char *pre; ZCONST char *post; { /* Storage cylinder. (now in globals.h) */ /*static char fzofft_buf[FZOFFT_NUM][FZOFFT_LEN];*/ /*static int fzofft_index = 0;*/ /* Temporary format string storage. */ char fmt[16]; /* Assemble the format string. */ fmt[0] = '%'; fmt[1] = '\0'; /* Start after initial "%". */ if (pre == FZOFFT_HEX_WID) /* Special hex width. */ { strcat(fmt, FZOFFT_HEX_WID_VALUE); } else if (pre == FZOFFT_HEX_DOT_WID) /* Special hex ".width". */ { strcat(fmt, "."); strcat(fmt, FZOFFT_HEX_WID_VALUE); } else if (pre != NULL) /* Caller's prefix (width). */ { strcat(fmt, pre); } strcat(fmt, FZOFFT_FMT); /* Long or long-long or whatever. */ if (post == NULL) strcat(fmt, "d"); /* Default radix = decimal. */ else strcat(fmt, post); /* Caller's radix. */ /* Advance the cylinder. */ G.fzofft_index = (G.fzofft_index + 1) % FZOFFT_NUM; /* Write into the current chamber. */ sprintf(G.fzofft_buf[G.fzofft_index], fmt, val); /* Return a pointer to this chamber. */ return G.fzofft_buf[G.fzofft_index]; } #if CRYPT #ifdef NEED_STR2ISO /**********************/ /* Function str2iso() */ /**********************/ char *str2iso(dst, src) char *dst; /* destination buffer */ register ZCONST char *src; /* source string */ { #ifdef INTERN_TO_ISO INTERN_TO_ISO(src, dst); #else register uch c; register char *dstp = dst; do { c = (uch)foreign(*src++); *dstp++ = (char)ASCII2ISO(c); } while (c != '\0'); #endif return dst; } #endif /* NEED_STR2ISO */ #ifdef NEED_STR2OEM /**********************/ /* Function str2oem() */ /**********************/ char *str2oem(dst, src) char *dst; /* destination buffer */ register ZCONST char *src; /* source string */ { #ifdef INTERN_TO_OEM INTERN_TO_OEM(src, dst); #else register uch c; register char *dstp = dst; do { c = (uch)foreign(*src++); *dstp++ = (char)ASCII2OEM(c); } while (c != '\0'); #endif return dst; } #endif /* NEED_STR2OEM */ #endif /* CRYPT */ #ifdef ZMEM /* memset/memcmp/memcpy for systems without either them or */ /* bzero/bcmp/bcopy */ /* (no known systems as of 960211) */ /*********************/ /* Function memset() */ /*********************/ zvoid *memset(buf, init, len) register zvoid *buf; /* buffer location */ register int init; /* initializer character */ register unsigned int len; /* length of the buffer */ { zvoid *start; start = buf; while (len--) *((char *)buf++) = (char)init; return start; } /*********************/ /* Function memcmp() */ /*********************/ int memcmp(b1, b2, len) register ZCONST zvoid *b1; register ZCONST zvoid *b2; register unsigned int len; { register int c; if (len > 0) do { if ((c = (int)(*((ZCONST unsigned char *)b1)++) - (int)(*((ZCONST unsigned char *)b2)++)) != 0) return c; } while (--len > 0) return 0; } /*********************/ /* Function memcpy() */ /*********************/ zvoid *memcpy(dst, src, len) register zvoid *dst; register ZCONST zvoid *src; register unsigned int len; { zvoid *start; start = dst; while (len-- > 0) *((char *)dst)++ = *((ZCONST char *)src)++; return start; } #endif /* ZMEM */ #ifdef NO_STRNICMP /************************/ /* Function zstrnicmp() */ /************************/ int zstrnicmp(s1, s2, n) register ZCONST char *s1, *s2; register unsigned n; { for (; n > 0; --n, ++s1, ++s2) { if (ToLower(*s1) != ToLower(*s2)) /* test includes early termination of one string */ return ((uch)ToLower(*s1) < (uch)ToLower(*s2))? -1 : 1; if (*s1 == '\0') /* both strings terminate early */ return 0; } return 0; } #endif /* NO_STRNICMP */ #ifdef REGULUS /* returns the inode number on success(!)...argh argh argh */ # undef stat /********************/ /* Function zstat() */ /********************/ int zstat(p, s) ZCONST char *p; struct stat *s; { return (stat((char *)p,s) >= 0? 0 : (-1)); } #endif /* REGULUS */ #ifdef _MBCS /* DBCS support for Info-ZIP's zip (mainly for japanese (-: ) * by Yoshioka Tsuneo (QWF00133@nifty.ne.jp,tsuneo-y@is.aist-nara.ac.jp) * This code is public domain! Date: 1998/12/20 */ /************************/ /* Function plastchar() */ /************************/ char *plastchar(ptr, len) ZCONST char *ptr; extent len; { unsigned clen; ZCONST char *oldptr = ptr; while(*ptr != '\0' && len > 0){ oldptr = ptr; clen = CLEN(ptr); ptr += clen; len -= clen; } return (char *)oldptr; } #ifdef NEED_UZMBCLEN /***********************/ /* Function uzmbclen() */ /***********************/ extent uzmbclen(ptr) ZCONST unsigned char *ptr; { int mbl; mbl = mblen((ZCONST char *)ptr, MB_CUR_MAX); /* For use in code scanning through MBCS strings, we need a strictly positive "MB char bytes count". For our scanning purpose, it is not not relevant whether the MB character is valid or not. And, the NUL char '\0' has a byte count of 1, but mblen() returns 0. So, we make sure that the uzmbclen() return value is not less than 1. */ return (extent)(mbl > 0 ? mbl : 1); } #endif /* NEED_UZMBCLEN */ #ifdef NEED_UZMBSCHR /***********************/ /* Function uzmbschr() */ /***********************/ unsigned char *uzmbschr(str, c) ZCONST unsigned char *str; unsigned int c; { while(*str != '\0'){ if (*str == c) {return (unsigned char *)str;} INCSTR(str); } return NULL; } #endif /* NEED_UZMBSCHR */ #ifdef NEED_UZMBSRCHR /************************/ /* Function uzmbsrchr() */ /************************/ unsigned char *uzmbsrchr(str, c) ZCONST unsigned char *str; unsigned int c; { unsigned char *match = NULL; while(*str != '\0'){ if (*str == c) {match = (unsigned char *)str;} INCSTR(str); } return match; } #endif /* NEED_UZMBSRCHR */ #endif /* _MBCS */ #ifdef SMALL_MEM /*******************************/ /* Function fLoadFarString() */ /* (and friends...) */ /*******************************/ char *fLoadFarString(__GPRO__ const char Far *sz) { (void)zfstrcpy(G.rgchBigBuffer, sz); return G.rgchBigBuffer; } char *fLoadFarStringSmall(__GPRO__ const char Far *sz) { (void)zfstrcpy(G.rgchSmallBuffer, sz); return G.rgchSmallBuffer; } char *fLoadFarStringSmall2(__GPRO__ const char Far *sz) { (void)zfstrcpy(G.rgchSmallBuffer2, sz); return G.rgchSmallBuffer2; } #if (!defined(_MSC_VER) || (_MSC_VER < 600)) /*************************/ /* Function zfstrcpy() */ /* portable clone of _fstrcpy() */ /*************************/ char Far * Far zfstrcpy(char Far *s1, const char Far *s2) { char Far *p = s1; while ((*s1++ = *s2++) != '\0'); return p; } #if (!(defined(SFX) || defined(FUNZIP))) /*************************/ /* Function zfstrcmp() */ /* portable clone of _fstrcmp() */ /*************************/ int Far zfstrcmp(const char Far *s1, const char Far *s2) { int ret; while ((ret = (int)(uch)*s1 - (int)(uch)*s2) == 0 && *s2 != '\0') { ++s2; ++s1; } return ret; } #endif /* !(SFX || FUNZIP) */ #endif /* !_MSC_VER || (_MSC_VER < 600) */ #endif /* SMALL_MEM */ Carla-2.4.2/data/windows/unzipfx-carla-control/globals.c000066400000000000000000000145331420416754300232100ustar00rootroot00000000000000/* Copyright (c) 1990-2007 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2003-May-08 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- globals.c Routines to allocate and initialize globals, with or without threads. Contents: registerGlobalPointer() deregisterGlobalPointer() getGlobalPointer() globalsCtor() ---------------------------------------------------------------------------*/ #define UNZIP_INTERNAL #include "unzip.h" #ifndef FUNZIP /* initialization of sigs is completed at runtime so unzip(sfx) executable * won't look like a zipfile */ char central_hdr_sig[4] = {0, 0, 0x01, 0x02}; char local_hdr_sig[4] = {0, 0, 0x03, 0x04}; char end_central_sig[4] = {0, 0, 0x05, 0x06}; char end_central64_sig[4] = {0, 0, 0x06, 0x06}; char end_centloc64_sig[4] = {0, 0, 0x06, 0x07}; /* extern char extd_local_sig[4] = {0, 0, 0x07, 0x08}; NOT USED YET */ ZCONST char *fnames[2] = {"*", NULL}; /* default filenames vector */ #endif #ifndef REENTRANT Uz_Globs G; #else /* REENTRANT */ # ifndef USETHREADID Uz_Globs *GG; # else /* USETHREADID */ # define THREADID_ENTRIES 0x40 int lastScan; Uz_Globs *threadPtrTable[THREADID_ENTRIES]; ulg threadIdTable [THREADID_ENTRIES] = { 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* Make sure there are */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* THREADID_ENTRIES 0s */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 }; static ZCONST char Far TooManyThreads[] = "error: more than %d simultaneous threads.\n\ Some threads are probably not calling DESTROYTHREAD()\n"; static ZCONST char Far EntryNotFound[] = "error: couldn't find global pointer in table.\n\ Maybe somebody accidentally called DESTROYTHREAD() twice.\n"; static ZCONST char Far GlobalPointerMismatch[] = "error: global pointer in table does not match pointer passed as\ parameter\n"; static void registerGlobalPointer OF((__GPRO)); static void registerGlobalPointer(__G) __GDEF { int scan=0; ulg tid = GetThreadId(); while (threadIdTable[scan] && scan < THREADID_ENTRIES) scan++; if (scan == THREADID_ENTRIES) { ZCONST char *tooMany = LoadFarString(TooManyThreads); Info(slide, 0x421, ((char *)slide, tooMany, THREADID_ENTRIES)); free(pG); EXIT(PK_MEM); /* essentially memory error before we've started */ } threadIdTable [scan] = tid; threadPtrTable[scan] = pG; lastScan = scan; } void deregisterGlobalPointer(__G) __GDEF { int scan=0; ulg tid = GetThreadId(); while (threadIdTable[scan] != tid && scan < THREADID_ENTRIES) scan++; /*--------------------------------------------------------------------------- There are two things we can do if we can't find the entry: ignore it or scream. The most likely reason for it not to be here is the user calling this routine twice. Since this could cause BIG problems if any globals are accessed after the first call, we'd better scream. ---------------------------------------------------------------------------*/ if (scan == THREADID_ENTRIES || threadPtrTable[scan] != pG) { ZCONST char *noEntry; if (scan == THREADID_ENTRIES) noEntry = LoadFarString(EntryNotFound); else noEntry = LoadFarString(GlobalPointerMismatch); Info(slide, 0x421, ((char *)slide, noEntry)); EXIT(PK_WARN); /* programming error, but after we're all done */ } threadIdTable [scan] = 0; lastScan = scan; free(threadPtrTable[scan]); } Uz_Globs *getGlobalPointer() { int scan=0; ulg tid = GetThreadId(); while (threadIdTable[scan] != tid && scan < THREADID_ENTRIES) scan++; /*--------------------------------------------------------------------------- There are two things we can do if we can't find the entry: ignore it or scream. The most likely reason for it not to be here is the user calling this routine twice. Since this could cause BIG problems if any globals are accessed after the first call, we'd better scream. ---------------------------------------------------------------------------*/ if (scan == THREADID_ENTRIES) { ZCONST char *noEntry = LoadFarString(EntryNotFound); fprintf(stderr, noEntry); /* can't use Info w/o a global pointer */ EXIT(PK_ERR); /* programming error while still working */ } return threadPtrTable[scan]; } # endif /* ?USETHREADID */ #endif /* ?REENTRANT */ Uz_Globs *globalsCtor() { #ifdef REENTRANT Uz_Globs *pG = (Uz_Globs *)malloc(sizeof(Uz_Globs)); if (!pG) return (Uz_Globs *)NULL; #endif /* REENTRANT */ /* for REENTRANT version, G is defined as (*pG) */ memzero(&G, sizeof(Uz_Globs)); #ifndef FUNZIP #ifdef CMS_MVS uO.aflag=1; uO.C_flag=1; #endif #ifdef TANDEM uO.aflag=1; /* default to '-a' auto create Text Files as type 101 */ #endif #ifdef VMS # if (!defined(NO_TIMESTAMPS)) uO.D_flag=1; /* default to '-D', no restoration of dir timestamps */ # endif #endif uO.lflag=(-1); G.wildzipfn = ""; G.pfnames = (char **)fnames; G.pxnames = (char **)&fnames[1]; G.pInfo = G.info; G.sol = TRUE; /* at start of line */ G.message = UzpMessagePrnt; G.input = UzpInput; /* not used by anyone at the moment... */ #if defined(WINDLL) || defined(MACOS) G.mpause = NULL; /* has scrollbars: no need for pausing */ #else G.mpause = UzpMorePause; #endif G.decr_passwd = UzpPassword; #endif /* !FUNZIP */ #if (!defined(DOS_FLX_H68_NLM_OS2_W32) && !defined(AMIGA) && !defined(RISCOS)) #if (!defined(MACOS) && !defined(ATARI) && !defined(VMS)) G.echofd = -1; #endif /* !(MACOS || ATARI || VMS) */ #endif /* !(DOS_FLX_H68_NLM_OS2_W32 || AMIGA || RISCOS) */ #ifdef SYSTEM_SPECIFIC_CTOR SYSTEM_SPECIFIC_CTOR(__G); #endif #ifdef REENTRANT #ifdef USETHREADID registerGlobalPointer(__G); #else GG = &G; #endif /* ?USETHREADID */ #endif /* REENTRANT */ return &G; } Carla-2.4.2/data/windows/unzipfx-carla-control/globals.h000066400000000000000000000410711420416754300232120ustar00rootroot00000000000000/* Copyright (c) 1990-2009 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2009-Jan-02 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- globals.h There is usually no need to include this file since unzip.h includes it. This header file is used by all of the UnZip source files. It contains a struct definition that is used to "house" all of the global variables. This is done to allow for multithreaded environments (OS/2, NT, Win95, Unix) to call UnZip through an API without a semaphore. REENTRANT should be defined for all platforms that require this. GLOBAL CONSTRUCTOR AND DESTRUCTOR (API WRITERS READ THIS!!!) ------------------------------------------------------------ No, it's not C++, but it's as close as we can get with K&R. The main() of each process that uses these globals must include the CONSTRUCTGLOBALS; statement. This will malloc enough memory for the structure and initialize any variables that require it. This must also be done by any API function that jumps into the middle of the code. The DESTROYGLOBALS(); statement should be inserted before EVERY "EXIT(n)". Naturally, it also needs to be put before any API returns as well. In fact, it's much more important in API functions since the process will NOT end, and therefore the memory WON'T automatically be freed by the operating system. USING VARIABLES FROM THE STRUCTURE ---------------------------------- All global variables must now be prefixed with `G.' which is either a global struct (in which case it should be the only global variable) or a macro for the value of a local pointer variable that is passed from function to function. Yes, this is a pain. But it's the only way to allow full reentrancy. ADDING VARIABLES TO THE STRUCTURE --------------------------------- If you make the inclusion of any variables conditional, be sure to only check macros that are GUARANTEED to be included in every module. For instance, newzip and pwdarg are needed only if CRYPT is TRUE, but this is defined after unzip.h has been read. If you are not careful, some modules will expect your variable to be part of this struct while others won't. This will cause BIG problems. (Inexplicable crashes at strange times, car fires, etc.) When in doubt, always include it! Note also that UnZipSFX needs a few variables that UnZip doesn't. However, it also includes some object files from UnZip. If we were to conditionally include the extra variables that UnZipSFX needs, the object files from UnZip would not mesh with the UnZipSFX object files. Result: we just include the UnZipSFX variables every time. (It's only an extra 4 bytes so who cares!) ADDING FUNCTIONS ---------------- To support this new global struct, all functions must now conditionally pass the globals pointer (pG) to each other. This is supported by 5 macros: __GPRO, __GPRO__, __G, __G__ and __GDEF. A function that needs no other parameters would look like this: int extract_or_test_files(__G) __GDEF { ... stuff ... } A function with other parameters would look like: int memextract(__G__ tgt, tgtsize, src, srcsize) __GDEF uch *tgt, *src; ulg tgtsize, srcsize; { ... stuff ... } In the Function Prototypes section of unzpriv.h, you should use __GPRO and __GPRO__ instead: int uz_opts OF((__GPRO__ int *pargc, char ***pargv)); int process_zipfiles OF((__GPRO)); Note that there is NO comma after __G__ or __GPRO__ and no semi-colon after __GDEF. I wish there was another way but I don't think there is. TESTING THE CODE ----------------- Whether your platform requires reentrancy or not, you should always try building with REENTRANT defined if any functions have been added. It is pretty easy to forget a __G__ or a __GDEF and this mistake will only show up if REENTRANT is defined. All platforms should run with REENTRANT defined. Platforms that can't take advantage of it will just be paying a performance penalty needlessly. SIGNAL MADNESS -------------- This whole pointer passing scheme falls apart when it comes to SIGNALs. I handle this situation 2 ways right now. If you define USETHREADID, UnZip will include a 64-entry table. Each entry can hold a global pointer and thread ID for one thread. This should allow up to 64 threads to access UnZip simultaneously. Calling DESTROYGLOBALS() will free the global struct and zero the table entry. If somebody forgets to call DESTROYGLOBALS(), this table will eventually fill up and UnZip will exit with an error message. A good way to test your code to make sure you didn't forget a DESTROYGLOBALS() is to change THREADID_ENTRIES to 3 or 4 in globals.c, making the table real small. Then make a small test program that calls your API a dozen times. Those platforms that don't have threads still need to be able to compile with REENTRANT defined to test and see if new code is correctly written to work either way. For these platforms, I simply keep a global pointer called GG that points to the Globals structure. Good enough for testing. I believe that NT has thread level storage. This could probably be used to store a global pointer for the sake of the signal handler more cleanly than my table approach. ---------------------------------------------------------------------------*/ #ifndef __globals_h #define __globals_h #ifdef USE_ZLIB # include "zlib.h" # ifdef zlib_version /* This name is used internally in unzip */ # undef zlib_version /* and must not be defined as a macro. */ # endif #endif #ifdef USE_BZIP2 # include "bzlib.h" #endif /*************/ /* Globals */ /*************/ typedef struct Globals { #ifdef DLL zvoid *callerglobs; /* pointer to structure of pass-through global vars */ #endif /* command options of general use */ UzpOpts UzO; /* command options of general use */ #ifndef FUNZIP /* command options specific to the high level command line interface */ #ifdef MORE int M_flag; /* -M: built-in "more" function */ #endif /* internal flags and general globals */ #ifdef MORE int height; /* check for SIGWINCH, etc., eventually... */ int lines; /* count of lines displayed on current screen */ # if (defined(SCREENWIDTH) && defined(SCREENLWRAP)) int width; int chars; /* count of screen characters in current line */ # endif #endif /* MORE */ #if (defined(IZ_CHECK_TZ) && defined(USE_EF_UT_TIME)) int tz_is_valid; /* indicates that timezone info can be used */ #endif int noargs; /* did true command line have *any* arguments? */ unsigned filespecs; /* number of real file specifications to be matched */ unsigned xfilespecs; /* number of excluded filespecs to be matched */ int process_all_files; int overwrite_mode; /* 0 - query, 1 - always, 2 - never */ int create_dirs; /* used by main(), mapname(), checkdir() */ int extract_flag; int newzip; /* reset in extract.c; used in crypt.c */ zoff_t real_ecrec_offset; zoff_t expect_ecrec_offset; zoff_t csize; /* used by decompr. (NEXTBYTE): must be signed */ zoff_t used_csize; /* used by extract_or_test_member(), explode() */ #ifdef DLL int fValidate; /* true if only validating an archive */ int filenotfound; int redirect_data; /* redirect data to memory buffer */ int redirect_text; /* redirect text output to buffer */ # ifndef NO_SLIDE_REDIR int redirect_slide; /* redirect decompression area to mem buffer */ # if (defined(USE_DEFLATE64) && defined(INT_16BIT)) ulg _wsize; /* size of sliding window exceeds "unsigned" range */ # else unsigned _wsize; /* sliding window size can be hold in unsigned */ # endif # endif ulg redirect_size; /* size of redirected output buffer */ uch *redirect_buffer; /* pointer to head of allocated buffer */ uch *redirect_pointer; /* pointer past end of written data */ # ifndef NO_SLIDE_REDIR uch *redirect_sldptr; /* head of decompression slide buffer */ # endif # ifdef OS2DLL cbList(processExternally); /* call-back list */ # endif #endif /* DLL */ char **pfnames; char **pxnames; char sig[4]; char answerbuf[10]; min_info info[DIR_BLKSIZ]; min_info *pInfo; #endif /* !FUNZIP */ union work area; /* see unzpriv.h for definition of work */ #if (!defined(USE_ZLIB) || defined(USE_OWN_CRCTAB)) ZCONST ulg near *crc_32_tab; #else ZCONST ulg Far *crc_32_tab; #endif ulg crc32val; /* CRC shift reg. (was static in funzip) */ #ifdef FUNZIP FILE *in; /* file descriptor of compressed stream */ #endif uch *inbuf; /* input buffer (any size is OK) */ uch *inptr; /* pointer into input buffer */ int incnt; #ifndef FUNZIP ulg bitbuf; int bits_left; /* unreduce and unshrink only */ int zipeof; char *argv0; /* used for NT and EXE_EXTENSION */ char *wildzipfn; char *zipfn; /* GRR: WINDLL: must nuke any malloc'd zipfn... */ #ifdef USE_STRM_INPUT FILE *zipfd; /* zipfile file descriptor */ #else int zipfd; /* zipfile file handle */ #endif zoff_t ziplen; zoff_t cur_zipfile_bufstart; /* extract_or_test, readbuf, ReadByte */ zoff_t extra_bytes; /* used in unzip.c, misc.c */ uch *extra_field; /* Unix, VMS, Mac, OS/2, Acorn, ... */ uch *hold; local_file_hdr lrec; /* used in unzip.c, extract.c */ cdir_file_hdr crec; /* used in unzip.c, extract.c, misc.c */ ecdir_rec ecrec; /* used in unzip.c, extract.c */ z_stat statbuf; /* used by main, mapname, check_for_newer */ int mem_mode; uch *outbufptr; /* extract.c static */ ulg outsize; /* extract.c static */ int reported_backslash; /* extract.c static */ int disk_full; int newfile; int didCRlast; /* fileio static */ ulg numlines; /* fileio static: number of lines printed */ int sol; /* fileio static: at start of line */ int no_ecrec; /* process static */ #ifdef SYMLINKS int symlnk; slinkentry *slink_head; /* pointer to head of symlinks list */ slinkentry *slink_last; /* pointer to last entry in symlinks list */ #endif #ifdef NOVELL_BUG_FAILSAFE int dne; /* true if stat() says file doesn't exist */ #endif FILE *outfile; uch *outbuf; uch *realbuf; #ifndef VMS /* if SMALL_MEM, outbuf2 is initialized in */ uch *outbuf2; /* process_zipfiles() (never changes); */ #endif /* else malloc'd ONLY if unshrink and -a */ #endif /* !FUNZIP */ uch *outptr; ulg outcnt; /* number of chars stored in outbuf */ #ifndef FUNZIP char filename[FILNAMSIZ]; /* also used by NT for temporary SFX path */ #ifdef UNICODE_SUPPORT char *filename_full; /* the full path so Unicode checks work */ extent fnfull_bufsize; /* size of allocated filename buffer */ int unicode_escape_all; int unicode_mismatch; #ifdef UTF8_MAYBE_NATIVE int native_is_utf8; /* bool, TRUE => native charset == UTF-8 */ #endif int unipath_version; /* version of Unicode field */ ulg unipath_checksum; /* Unicode field checksum */ char *unipath_filename; /* UTF-8 path */ #endif /* UNICODE_SUPPORT */ #ifdef CMS_MVS char *tempfn; /* temp file used; erase on close */ #endif char *key; /* crypt static: decryption password or NULL */ int nopwd; /* crypt static */ #endif /* !FUNZIP */ z_uint4 keys[3]; /* crypt static: keys defining pseudo-random sequence */ #if (!defined(DOS_FLX_H68_NLM_OS2_W32) && !defined(AMIGA) && !defined(RISCOS)) #if (!defined(MACOS) && !defined(ATARI) && !defined(VMS)) int echofd; /* ttyio static: file descriptor whose echo is off */ #endif /* !(MACOS || ATARI || VMS) */ #endif /* !(DOS_FLX_H68_NLM_OS2_W32 || AMIGA || RISCOS) */ unsigned hufts; /* track memory usage */ #ifdef USE_ZLIB int inflInit; /* inflate static: zlib inflate() initialized */ z_stream dstrm; /* inflate global: decompression stream */ #else struct huft *fixed_tl; /* inflate static */ struct huft *fixed_td; /* inflate static */ unsigned fixed_bl, fixed_bd; /* inflate static */ #ifdef USE_DEFLATE64 struct huft *fixed_tl64; /* inflate static */ struct huft *fixed_td64; /* inflate static */ unsigned fixed_bl64, fixed_bd64; /* inflate static */ struct huft *fixed_tl32; /* inflate static */ struct huft *fixed_td32; /* inflate static */ unsigned fixed_bl32, fixed_bd32; /* inflate static */ ZCONST ush *cplens; /* inflate static */ ZCONST uch *cplext; /* inflate static */ ZCONST uch *cpdext; /* inflate static */ #endif unsigned wp; /* inflate static: current position in slide */ ulg bb; /* inflate static: bit buffer */ unsigned bk; /* inflate static: bits count in bit buffer */ #endif /* ?USE_ZLIB */ #ifndef FUNZIP /* cylindric buffer space for formatting zoff_t values (fileio static) */ char fzofft_buf[FZOFFT_NUM][FZOFFT_LEN]; int fzofft_index; #ifdef SMALL_MEM char rgchBigBuffer[512]; char rgchSmallBuffer[96]; char rgchSmallBuffer2[160]; /* boosted to 160 for local3[] in unzip.c */ #endif MsgFn *message; InputFn *input; PauseFn *mpause; PasswdFn *decr_passwd; StatCBFn *statreportcb; #ifdef WINDLL LPUSERFUNCTIONS lpUserFunctions; #endif int incnt_leftover; /* so improved NEXTBYTE does not waste input */ uch *inptr_leftover; #ifdef VMS_TEXT_CONV unsigned VMS_line_length; /* so native VMS variable-length text files */ int VMS_line_state; /* are readable on other platforms */ int VMS_line_pad; #endif #if (defined(SFX) && defined(CHEAP_SFX_AUTORUN)) char autorun_command[FILNAMSIZ]; #endif #endif /* !FUNZIP */ #ifdef SYSTEM_SPECIFIC_GLOBALS SYSTEM_SPECIFIC_GLOBALS #endif } Uz_Globs; /* end of struct Globals */ /***************************************************************************/ #define CRC_32_TAB G.crc_32_tab Uz_Globs *globalsCtor OF((void)); /* pseudo constant sigs; they are initialized at runtime so unzip executable * won't look like a zipfile */ extern char local_hdr_sig[4]; extern char central_hdr_sig[4]; extern char end_central_sig[4]; extern char end_central32_sig[4]; extern char end_central64_sig[4]; extern char end_centloc64_sig[4]; /* extern char extd_local_sig[4]; NOT USED YET */ #ifdef REENTRANT # define G (*(Uz_Globs *)pG) # define __G pG # define __G__ pG, # define __GPRO Uz_Globs *pG # define __GPRO__ Uz_Globs *pG, # define __GDEF Uz_Globs *pG; # ifdef USETHREADID extern int lastScan; void deregisterGlobalPointer OF((__GPRO)); Uz_Globs *getGlobalPointer OF((void)); # define GETGLOBALS() Uz_Globs *pG = getGlobalPointer() # define DESTROYGLOBALS() do {free_G_buffers(pG); \ deregisterGlobalPointer(pG);} while (0) # else extern Uz_Globs *GG; # define GETGLOBALS() Uz_Globs *pG = GG # define DESTROYGLOBALS() do {free_G_buffers(pG); free(pG);} while (0) # endif /* ?USETHREADID */ # define CONSTRUCTGLOBALS() Uz_Globs *pG = globalsCtor() #else /* !REENTRANT */ extern Uz_Globs G; # define __G # define __G__ # define __GPRO void # define __GPRO__ # define __GDEF # define GETGLOBALS() # define CONSTRUCTGLOBALS() globalsCtor() # define DESTROYGLOBALS() #endif /* ?REENTRANT */ #define uO G.UzO #endif /* __globals_h */ Carla-2.4.2/data/windows/unzipfx-carla-control/inflate.c000066400000000000000000001742151420416754300232130ustar00rootroot00000000000000/* Copyright (c) 1990-2008 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2007-Mar-04 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /* inflate.c -- by Mark Adler version c17e, 30 Mar 2007 */ /* Copyright history: - Starting with UnZip 5.41 of 16-April-2000, this source file is covered by the Info-Zip LICENSE cited above. - Prior versions of this source file, found in UnZip source packages up to UnZip 5.40, were put in the public domain. The original copyright note by Mark Adler was: "You can do whatever you like with this source file, though I would prefer that if you modify it and redistribute it that you include comments to that effect with your name and the date. Thank you." History: vers date who what ---- --------- -------------- ------------------------------------ a ~~ Feb 92 M. Adler used full (large, one-step) lookup table b1 21 Mar 92 M. Adler first version with partial lookup tables b2 21 Mar 92 M. Adler fixed bug in fixed-code blocks b3 22 Mar 92 M. Adler sped up match copies, cleaned up some b4 25 Mar 92 M. Adler added prototypes; removed window[] (now is the responsibility of unzip.h--also changed name to slide[]), so needs diffs for unzip.c and unzip.h (this allows compiling in the small model on MSDOS); fixed cast of q in huft_build(); b5 26 Mar 92 M. Adler got rid of unintended macro recursion. b6 27 Mar 92 M. Adler got rid of nextbyte() routine. fixed bug in inflate_fixed(). c1 30 Mar 92 M. Adler removed lbits, dbits environment variables. changed BMAX to 16 for explode. Removed OUTB usage, and replaced it with flush()-- this was a 20% speed improvement! Added an explode.c (to replace unimplod.c) that uses the huft routines here. Removed register union. c2 4 Apr 92 M. Adler fixed bug for file sizes a multiple of 32k. c3 10 Apr 92 M. Adler reduced memory of code tables made by huft_build significantly (factor of two to three). c4 15 Apr 92 M. Adler added NOMEMCPY do kill use of memcpy(). worked around a Turbo C optimization bug. c5 21 Apr 92 M. Adler added the WSIZE #define to allow reducing the 32K window size for specialized applications. c6 31 May 92 M. Adler added some typecasts to eliminate warnings c7 27 Jun 92 G. Roelofs added some more typecasts (444: MSC bug). c8 5 Oct 92 J-l. Gailly added ifdef'd code to deal with PKZIP bug. c9 9 Oct 92 M. Adler removed a memory error message (~line 416). c10 17 Oct 92 G. Roelofs changed ULONG/UWORD/byte to ulg/ush/uch, removed old inflate, renamed inflate_entry to inflate, added Mark's fix to a comment. c10.5 14 Dec 92 M. Adler fix up error messages for incomplete trees. c11 2 Jan 93 M. Adler fixed bug in detection of incomplete tables, and removed assumption that EOB is the longest code (bad assumption). c12 3 Jan 93 M. Adler make tables for fixed blocks only once. c13 5 Jan 93 M. Adler allow all zero length codes (pkzip 2.04c outputs one zero length code for an empty distance tree). c14 12 Mar 93 M. Adler made inflate.c standalone with the introduction of inflate.h. c14b 16 Jul 93 G. Roelofs added (unsigned) typecast to w at 470. c14c 19 Jul 93 J. Bush changed v[N_MAX], l[288], ll[28x+3x] arrays to static for Amiga. c14d 13 Aug 93 J-l. Gailly de-complicatified Mark's c[*p++]++ thing. c14e 8 Oct 93 G. Roelofs changed memset() to memzero(). c14f 22 Oct 93 G. Roelofs renamed quietflg to qflag; made Trace() conditional; added inflate_free(). c14g 28 Oct 93 G. Roelofs changed l/(lx+1) macro to pointer (Cray bug) c14h 7 Dec 93 C. Ghisler huft_build() optimizations. c14i 9 Jan 94 A. Verheijen set fixed_t{d,l} to NULL after freeing; G. Roelofs check NEXTBYTE macro for EOF. c14j 23 Jan 94 G. Roelofs removed Ghisler "optimizations"; ifdef'd EOF check. c14k 27 Feb 94 G. Roelofs added some typecasts to avoid warnings. c14l 9 Apr 94 G. Roelofs fixed split comments on preprocessor lines to avoid bug in Encore compiler. c14m 7 Jul 94 P. Kienitz modified to allow assembler version of inflate_codes() (define ASM_INFLATECODES) c14n 22 Jul 94 G. Roelofs changed fprintf to macro for DLL versions c14o 23 Aug 94 C. Spieler added a newline to a debug statement; G. Roelofs added another typecast to avoid MSC warning c14p 4 Oct 94 G. Roelofs added (voidp *) cast to free() argument c14q 30 Oct 94 G. Roelofs changed fprintf macro to MESSAGE() c14r 1 Nov 94 G. Roelofs fixed possible redefinition of CHECK_EOF c14s 7 May 95 S. Maxwell OS/2 DLL globals stuff incorporated; P. Kienitz "fixed" ASM_INFLATECODES macro/prototype c14t 18 Aug 95 G. Roelofs added UZinflate() to use zlib functions; changed voidp to zvoid; moved huft_build() and huft_free() to end of file c14u 1 Oct 95 G. Roelofs moved G into definition of MESSAGE macro c14v 8 Nov 95 P. Kienitz changed ASM_INFLATECODES to use a regular call with __G__ instead of a macro c15 3 Aug 96 M. Adler fixed bomb-bug on random input data (Adobe) c15b 24 Aug 96 M. Adler more fixes for random input data c15c 28 Mar 97 G. Roelofs changed USE_ZLIB fatal exit code from PK_MEM2 to PK_MEM3 c16 20 Apr 97 J. Altman added memzero(v[]) in huft_build() c16b 29 Mar 98 C. Spieler modified DLL code for slide redirection c16c 04 Apr 99 C. Spieler fixed memory leaks when processing gets stopped because of input data errors c16d 05 Jul 99 C. Spieler take care of FLUSH() return values and stop processing in case of errors c17 31 Dec 00 C. Spieler added preliminary support for Deflate64 c17a 04 Feb 01 C. Spieler complete integration of Deflate64 support c17b 16 Feb 02 C. Spieler changed type of "extra bits" arrays and corresponding huft_build() parameter e from ush into uch, to save space c17c 9 Mar 02 C. Spieler fixed NEEDBITS() "read beyond EOF" problem with CHECK_EOF enabled c17d 23 Jul 05 C. Spieler fixed memory leaks in inflate_dynamic() when processing invalid compressed literal/ distance table data c17e 30 Mar 07 C. Spieler in inflate_dynamic(), initialize tl and td to prevent freeing unallocated huft tables when processing invalid compressed data and hitting premature EOF, do not reuse td as temp work ptr during tables decoding */ /* Inflate deflated (PKZIP's method 8 compressed) data. The compression method searches for as much of the current string of bytes (up to a length of 258) in the previous 32K bytes. If it doesn't find any matches (of at least length 3), it codes the next byte. Otherwise, it codes the length of the matched string and its distance backwards from the current position. There is a single Huffman code that codes both single bytes (called "literals") and match lengths. A second Huffman code codes the distance information, which follows a length code. Each length or distance code actually represents a base value and a number of "extra" (sometimes zero) bits to get to add to the base value. At the end of each deflated block is a special end-of-block (EOB) literal/ length code. The decoding process is basically: get a literal/length code; if EOB then done; if a literal, emit the decoded byte; if a length then get the distance and emit the referred-to bytes from the sliding window of previously emitted data. There are (currently) three kinds of inflate blocks: stored, fixed, and dynamic. The compressor outputs a chunk of data at a time and decides which method to use on a chunk-by-chunk basis. A chunk might typically be 32K to 64K, uncompressed. If the chunk is uncompressible, then the "stored" method is used. In this case, the bytes are simply stored as is, eight bits per byte, with none of the above coding. The bytes are preceded by a count, since there is no longer an EOB code. If the data are compressible, then either the fixed or dynamic methods are used. In the dynamic method, the compressed data are preceded by an encoding of the literal/length and distance Huffman codes that are to be used to decode this block. The representation is itself Huffman coded, and so is preceded by a description of that code. These code descriptions take up a little space, and so for small blocks, there is a predefined set of codes, called the fixed codes. The fixed method is used if the block ends up smaller that way (usually for quite small chunks); otherwise the dynamic method is used. In the latter case, the codes are customized to the probabilities in the current block and so can code it much better than the pre-determined fixed codes can. The Huffman codes themselves are decoded using a multi-level table lookup, in order to maximize the speed of decoding plus the speed of building the decoding tables. See the comments below that precede the lbits and dbits tuning parameters. GRR: return values(?) 0 OK 1 incomplete table 2 bad input 3 not enough memory the following return codes are passed through from FLUSH() errors 50 (PK_DISK) "overflow of output space" 80 (IZ_CTRLC) "canceled by user's request" */ /* Notes beyond the 1.93a appnote.txt: 1. Distance pointers never point before the beginning of the output stream. 2. Distance pointers can point back across blocks, up to 32k away. 3. There is an implied maximum of 7 bits for the bit length table and 15 bits for the actual data. 4. If only one code exists, then it is encoded using one bit. (Zero would be more efficient, but perhaps a little confusing.) If two codes exist, they are coded using one bit each (0 and 1). 5. There is no way of sending zero distance codes--a dummy must be sent if there are none. (History: a pre 2.0 version of PKZIP would store blocks with no distance codes, but this was discovered to be too harsh a criterion.) Valid only for 1.93a. 2.04c does allow zero distance codes, which is sent as one code of zero bits in length. 6. There are up to 286 literal/length codes. Code 256 represents the end-of-block. Note however that the static length tree defines 288 codes just to fill out the Huffman codes. Codes 286 and 287 cannot be used though, since there is no length base or extra bits defined for them. Similarily, there are up to 30 distance codes. However, static trees define 32 codes (all 5 bits) to fill out the Huffman codes, but the last two had better not show up in the data. 7. Unzip can check dynamic Huffman blocks for complete code sets. The exception is that a single code would not be complete (see #4). 8. The five bits following the block type is really the number of literal codes sent minus 257. 9. Length codes 8,16,16 are interpreted as 13 length codes of 8 bits (1+6+6). Therefore, to output three times the length, you output three codes (1+1+1), whereas to output four times the same length, you only need two codes (1+3). Hmm. 10. In the tree reconstruction algorithm, Code = Code + Increment only if BitLength(i) is not zero. (Pretty obvious.) 11. Correction: 4 Bits: # of Bit Length codes - 4 (4 - 19) 12. Note: length code 284 can represent 227-258, but length code 285 really is 258. The last length deserves its own, short code since it gets used a lot in very redundant files. The length 258 is special since 258 - 3 (the min match length) is 255. 13. The literal/length and distance code bit lengths are read as a single stream of lengths. It is possible (and advantageous) for a repeat code (16, 17, or 18) to go across the boundary between the two sets of lengths. 14. The Deflate64 (PKZIP method 9) variant of the compression algorithm differs from "classic" deflate in the following 3 aspect: a) The size of the sliding history window is expanded to 64 kByte. b) The previously unused distance codes #30 and #31 code distances from 32769 to 49152 and 49153 to 65536. Both codes take 14 bits of extra data to determine the exact position in their 16 kByte range. c) The last lit/length code #285 gets a different meaning. Instead of coding a fixed maximum match length of 258, it is used as a "generic" match length code, capable of coding any length from 3 (min match length + 0) to 65538 (min match length + 65535). This means that the length code #285 takes 16 bits (!) of uncoded extra data, added to a fixed min length of 3. Changes a) and b) would have been transparent for valid deflated data, but change c) requires to switch decoder configurations between Deflate and Deflate64 modes. */ #define PKZIP_BUG_WORKAROUND /* PKZIP 1.93a problem--live with it */ /* inflate.h must supply the uch slide[WSIZE] array, the zvoid typedef (void if (void *) is accepted, else char) and the NEXTBYTE, FLUSH() and memzero macros. If the window size is not 32K, it should also define WSIZE. If INFMOD is defined, it can include compiled functions to support the NEXTBYTE and/or FLUSH() macros. There are defaults for NEXTBYTE and FLUSH() below for use as examples of what those functions need to do. Normally, you would also want FLUSH() to compute a crc on the data. inflate.h also needs to provide these typedefs: typedef unsigned char uch; typedef unsigned short ush; typedef unsigned long ulg; This module uses the external functions malloc() and free() (and probably memset() or bzero() in the memzero() macro). Their prototypes are normally found in and . */ #define __INFLATE_C /* identifies this source module */ /* #define DEBUG */ #define INFMOD /* tell inflate.h to include code to be compiled */ #include "inflate.h" /* marker for "unused" huft code, and corresponding check macro */ #define INVALID_CODE 99 #define IS_INVALID_CODE(c) ((c) == INVALID_CODE) #ifndef WSIZE /* default is 32K resp. 64K */ # ifdef USE_DEFLATE64 # define WSIZE 65536L /* window size--must be a power of two, and */ # else /* at least 64K for PKZip's deflate64 method */ # define WSIZE 0x8000 /* window size--must be a power of two, and */ # endif /* at least 32K for zip's deflate method */ #endif /* some buffer counters must be capable of holding 64k for Deflate64 */ #if (defined(USE_DEFLATE64) && defined(INT_16BIT)) # define UINT_D64 ulg #else # define UINT_D64 unsigned #endif #if (defined(DLL) && !defined(NO_SLIDE_REDIR)) # define wsize G._wsize /* wsize is a variable */ #else # define wsize WSIZE /* wsize is a constant */ #endif #ifndef NEXTBYTE /* default is to simply get a byte from stdin */ # define NEXTBYTE getchar() #endif #ifndef MESSAGE /* only used twice, for fixed strings--NOT general-purpose */ # define MESSAGE(str,len,flag) fprintf(stderr,(char *)(str)) #endif #ifndef FLUSH /* default is to simply write the buffer to stdout */ # define FLUSH(n) \ (((extent)fwrite(redirSlide, 1, (extent)(n), stdout) == (extent)(n)) ? \ 0 : PKDISK) #endif /* Warning: the fwrite above might not work on 16-bit compilers, since 0x8000 might be interpreted as -32,768 by the library function. When support for Deflate64 is enabled, the window size is 64K and the simple fwrite statement is definitely broken for 16-bit compilers. */ #ifndef Trace # ifdef DEBUG # define Trace(x) fprintf x # else # define Trace(x) # endif #endif /*---------------------------------------------------------------------------*/ #ifdef USE_ZLIB /* Beginning with zlib version 1.2.0, a new inflate callback interface is provided that allows tighter integration of the zlib inflate service into unzip's extraction framework. The advantages are: - uses the windows buffer supplied by the unzip code; this saves one copy process between zlib's internal decompression buffer and unzip's post-decompression output buffer and improves performance. - does not pull in unused checksum code (adler32). The preprocessor flag NO_ZLIBCALLBCK can be set to force usage of the old zlib 1.1.x interface, for testing purpose. */ #ifdef USE_ZLIB_INFLATCB # undef USE_ZLIB_INFLATCB #endif #if (defined(ZLIB_VERNUM) && ZLIB_VERNUM >= 0x1200 && !defined(NO_ZLIBCALLBCK)) # define USE_ZLIB_INFLATCB 1 #else # define USE_ZLIB_INFLATCB 0 #endif /* Check for incompatible combinations of zlib and Deflate64 support. */ #if defined(USE_DEFLATE64) # if !USE_ZLIB_INFLATCB #error Deflate64 is incompatible with traditional (pre-1.2.x) zlib interface! # else /* The Deflate64 callback function in the framework of zlib 1.2.x requires the inclusion of the unsupported infback9 header file: */ # include "infback9.h" # endif #endif /* USE_DEFLATE64 */ #if USE_ZLIB_INFLATCB static unsigned zlib_inCB OF((void FAR *pG, unsigned char FAR * FAR * pInbuf)); static int zlib_outCB OF((void FAR *pG, unsigned char FAR *outbuf, unsigned outcnt)); static unsigned zlib_inCB(pG, pInbuf) void FAR *pG; unsigned char FAR * FAR * pInbuf; { *pInbuf = G.inbuf; return fillinbuf(__G); } static int zlib_outCB(pG, outbuf, outcnt) void FAR *pG; unsigned char FAR *outbuf; unsigned outcnt; { #ifdef FUNZIP return flush(__G__ (ulg)(outcnt)); #else return ((G.mem_mode) ? memflush(__G__ outbuf, (ulg)(outcnt)) : flush(__G__ outbuf, (ulg)(outcnt), 0)); #endif } #endif /* USE_ZLIB_INFLATCB */ /* GRR: return values for both original inflate() and UZinflate() 0 OK 1 incomplete table(?) 2 bad input 3 not enough memory */ /**************************/ /* Function UZinflate() */ /**************************/ int UZinflate(__G__ is_defl64) __GDEF int is_defl64; /* decompress an inflated entry using the zlib routines */ { int retval = 0; /* return code: 0 = "no error" */ int err=Z_OK; #if USE_ZLIB_INFLATCB #if (defined(DLL) && !defined(NO_SLIDE_REDIR)) if (G.redirect_slide) wsize = G.redirect_size, redirSlide = G.redirect_buffer; else wsize = WSIZE, redirSlide = slide; #endif if (!G.inflInit) { /* local buffer for efficiency */ ZCONST char *zlib_RtVersion = zlibVersion(); /* only need to test this stuff once */ if ((zlib_RtVersion[0] != ZLIB_VERSION[0]) || (zlib_RtVersion[2] != ZLIB_VERSION[2])) { Info(slide, 0x21, ((char *)slide, "error: incompatible zlib version (expected %s, found %s)\n", ZLIB_VERSION, zlib_RtVersion)); return 3; } else if (strcmp(zlib_RtVersion, ZLIB_VERSION) != 0) Info(slide, 0x21, ((char *)slide, "warning: different zlib version (expected %s, using %s)\n", ZLIB_VERSION, zlib_RtVersion)); G.dstrm.zalloc = (alloc_func)Z_NULL; G.dstrm.zfree = (free_func)Z_NULL; G.inflInit = 1; } #ifdef USE_DEFLATE64 if (is_defl64) { Trace((stderr, "initializing inflate9()\n")); err = inflateBack9Init(&G.dstrm, redirSlide); if (err == Z_MEM_ERROR) return 3; else if (err != Z_OK) { Trace((stderr, "oops! (inflateBack9Init() err = %d)\n", err)); return 2; } G.dstrm.next_in = G.inptr; G.dstrm.avail_in = G.incnt; err = inflateBack9(&G.dstrm, zlib_inCB, &G, zlib_outCB, &G); if (err != Z_STREAM_END) { if (err == Z_DATA_ERROR || err == Z_STREAM_ERROR) { Trace((stderr, "oops! (inflateBack9() err = %d)\n", err)); retval = 2; } else if (err == Z_MEM_ERROR) { retval = 3; } else if (err == Z_BUF_ERROR) { Trace((stderr, "oops! (inflateBack9() err = %d)\n", err)); if (G.dstrm.next_in == Z_NULL) { /* input failure */ Trace((stderr, " inflateBack9() input failure\n")); retval = 2; } else { /* output write failure */ retval = (G.disk_full != 0 ? PK_DISK : IZ_CTRLC); } } else { Trace((stderr, "oops! (inflateBack9() err = %d)\n", err)); retval = 2; } } if (G.dstrm.next_in != NULL) { G.inptr = (uch *)G.dstrm.next_in; G.incnt = G.dstrm.avail_in; } err = inflateBack9End(&G.dstrm); if (err != Z_OK) { Trace((stderr, "oops! (inflateBack9End() err = %d)\n", err)); if (retval == 0) retval = 2; } } else #endif /* USE_DEFLATE64 */ { /* For the callback interface, inflate initialization has to be called before each decompression call. */ { unsigned i; int windowBits; /* windowBits = log2(wsize) */ for (i = (unsigned)wsize, windowBits = 0; !(i & 1); i >>= 1, ++windowBits); if ((unsigned)windowBits > (unsigned)15) windowBits = 15; else if (windowBits < 8) windowBits = 8; Trace((stderr, "initializing inflate()\n")); err = inflateBackInit(&G.dstrm, windowBits, redirSlide); if (err == Z_MEM_ERROR) return 3; else if (err != Z_OK) { Trace((stderr, "oops! (inflateBackInit() err = %d)\n", err)); return 2; } } G.dstrm.next_in = G.inptr; G.dstrm.avail_in = G.incnt; err = inflateBack(&G.dstrm, zlib_inCB, &G, zlib_outCB, &G); if (err != Z_STREAM_END) { if (err == Z_DATA_ERROR || err == Z_STREAM_ERROR) { Trace((stderr, "oops! (inflateBack() err = %d)\n", err)); retval = 2; } else if (err == Z_MEM_ERROR) { retval = 3; } else if (err == Z_BUF_ERROR) { Trace((stderr, "oops! (inflateBack() err = %d)\n", err)); if (G.dstrm.next_in == Z_NULL) { /* input failure */ Trace((stderr, " inflateBack() input failure\n")); retval = 2; } else { /* output write failure */ retval = (G.disk_full != 0 ? PK_DISK : IZ_CTRLC); } } else { Trace((stderr, "oops! (inflateBack() err = %d)\n", err)); retval = 2; } } if (G.dstrm.next_in != NULL) { G.inptr = (uch *)G.dstrm.next_in; G.incnt = G.dstrm.avail_in; } err = inflateBackEnd(&G.dstrm); if (err != Z_OK) { Trace((stderr, "oops! (inflateBackEnd() err = %d)\n", err)); if (retval == 0) retval = 2; } } #else /* !USE_ZLIB_INFLATCB */ int repeated_buf_err; #if (defined(DLL) && !defined(NO_SLIDE_REDIR)) if (G.redirect_slide) wsize = G.redirect_size, redirSlide = G.redirect_buffer; else wsize = WSIZE, redirSlide = slide; #endif G.dstrm.next_out = redirSlide; G.dstrm.avail_out = wsize; G.dstrm.next_in = G.inptr; G.dstrm.avail_in = G.incnt; if (!G.inflInit) { unsigned i; int windowBits; /* local buffer for efficiency */ ZCONST char *zlib_RtVersion = zlibVersion(); /* only need to test this stuff once */ if (zlib_RtVersion[0] != ZLIB_VERSION[0]) { Info(slide, 0x21, ((char *)slide, "error: incompatible zlib version (expected %s, found %s)\n", ZLIB_VERSION, zlib_RtVersion)); return 3; } else if (strcmp(zlib_RtVersion, ZLIB_VERSION) != 0) Info(slide, 0x21, ((char *)slide, "warning: different zlib version (expected %s, using %s)\n", ZLIB_VERSION, zlib_RtVersion)); /* windowBits = log2(wsize) */ for (i = (unsigned)wsize, windowBits = 0; !(i & 1); i >>= 1, ++windowBits); if ((unsigned)windowBits > (unsigned)15) windowBits = 15; else if (windowBits < 8) windowBits = 8; G.dstrm.zalloc = (alloc_func)Z_NULL; G.dstrm.zfree = (free_func)Z_NULL; Trace((stderr, "initializing inflate()\n")); err = inflateInit2(&G.dstrm, -windowBits); if (err == Z_MEM_ERROR) return 3; else if (err != Z_OK) Trace((stderr, "oops! (inflateInit2() err = %d)\n", err)); G.inflInit = 1; } #ifdef FUNZIP while (err != Z_STREAM_END) { #else /* !FUNZIP */ while (G.csize > 0) { Trace((stderr, "first loop: G.csize = %ld\n", G.csize)); #endif /* ?FUNZIP */ while (G.dstrm.avail_out > 0) { err = inflate(&G.dstrm, Z_PARTIAL_FLUSH); if (err == Z_DATA_ERROR) { retval = 2; goto uzinflate_cleanup_exit; } else if (err == Z_MEM_ERROR) { retval = 3; goto uzinflate_cleanup_exit; } else if (err != Z_OK && err != Z_STREAM_END) Trace((stderr, "oops! (inflate(first loop) err = %d)\n", err)); #ifdef FUNZIP if (err == Z_STREAM_END) /* "END-of-entry-condition" ? */ #else /* !FUNZIP */ if (G.csize <= 0L) /* "END-of-entry-condition" ? */ #endif /* ?FUNZIP */ break; if (G.dstrm.avail_in == 0) { if (fillinbuf(__G) == 0) { /* no "END-condition" yet, but no more data */ retval = 2; goto uzinflate_cleanup_exit; } G.dstrm.next_in = G.inptr; G.dstrm.avail_in = G.incnt; } Trace((stderr, " avail_in = %u\n", G.dstrm.avail_in)); } /* flush slide[] */ if ((retval = FLUSH(wsize - G.dstrm.avail_out)) != 0) goto uzinflate_cleanup_exit; Trace((stderr, "inside loop: flushing %ld bytes (ptr diff = %ld)\n", (long)(wsize - G.dstrm.avail_out), (long)(G.dstrm.next_out-(Bytef *)redirSlide))); G.dstrm.next_out = redirSlide; G.dstrm.avail_out = wsize; } /* no more input, so loop until we have all output */ Trace((stderr, "beginning final loop: err = %d\n", err)); repeated_buf_err = FALSE; while (err != Z_STREAM_END) { err = inflate(&G.dstrm, Z_PARTIAL_FLUSH); if (err == Z_DATA_ERROR) { retval = 2; goto uzinflate_cleanup_exit; } else if (err == Z_MEM_ERROR) { retval = 3; goto uzinflate_cleanup_exit; } else if (err == Z_BUF_ERROR) { /* DEBUG */ #ifdef FUNZIP Trace((stderr, "zlib inflate() did not detect stream end\n")); #else Trace((stderr, "zlib inflate() did not detect stream end (%s, %s)\n", G.zipfn, G.filename)); #endif if ((!repeated_buf_err) && (G.dstrm.avail_in == 0)) { /* when detecting this problem for the first time, try to provide one fake byte beyond "EOF"... */ G.dstrm.next_in = ""; G.dstrm.avail_in = 1; repeated_buf_err = TRUE; } else break; } else if (err != Z_OK && err != Z_STREAM_END) { Trace((stderr, "oops! (inflate(final loop) err = %d)\n", err)); DESTROYGLOBALS(); EXIT(PK_MEM3); } /* final flush of slide[] */ if ((retval = FLUSH(wsize - G.dstrm.avail_out)) != 0) goto uzinflate_cleanup_exit; Trace((stderr, "final loop: flushing %ld bytes (ptr diff = %ld)\n", (long)(wsize - G.dstrm.avail_out), (long)(G.dstrm.next_out-(Bytef *)redirSlide))); G.dstrm.next_out = redirSlide; G.dstrm.avail_out = wsize; } Trace((stderr, "total in = %lu, total out = %lu\n", G.dstrm.total_in, G.dstrm.total_out)); G.inptr = (uch *)G.dstrm.next_in; G.incnt = (G.inbuf + INBUFSIZ) - G.inptr; /* reset for other routines */ uzinflate_cleanup_exit: err = inflateReset(&G.dstrm); if (err != Z_OK) Trace((stderr, "oops! (inflateReset() err = %d)\n", err)); #endif /* ?USE_ZLIB_INFLATCB */ return retval; } /*---------------------------------------------------------------------------*/ #else /* !USE_ZLIB */ /* Function prototypes */ #ifndef OF # ifdef __STDC__ # define OF(a) a # else # define OF(a) () # endif #endif /* !OF */ int inflate_codes OF((__GPRO__ struct huft *tl, struct huft *td, unsigned bl, unsigned bd)); static int inflate_stored OF((__GPRO)); static int inflate_fixed OF((__GPRO)); static int inflate_dynamic OF((__GPRO)); static int inflate_block OF((__GPRO__ int *e)); /* The inflate algorithm uses a sliding 32K byte window on the uncompressed stream to find repeated byte strings. This is implemented here as a circular buffer. The index is updated simply by incrementing and then and'ing with 0x7fff (32K-1). */ /* It is left to other modules to supply the 32K area. It is assumed to be usable as if it were declared "uch slide[32768];" or as just "uch *slide;" and then malloc'ed in the latter case. The definition must be in unzip.h, included above. */ /* unsigned wp; moved to globals.h */ /* current position in slide */ /* Tables for deflate from PKZIP's appnote.txt. */ /* - Order of the bit length code lengths */ static ZCONST unsigned border[] = { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; /* - Copy lengths for literal codes 257..285 */ #ifdef USE_DEFLATE64 static ZCONST ush cplens64[] = { 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 3, 0, 0}; /* For Deflate64, the code 285 is defined differently. */ #else # define cplens32 cplens #endif static ZCONST ush cplens32[] = { 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; /* note: see note #13 above about the 258 in this list. */ /* - Extra bits for literal codes 257..285 */ #ifdef USE_DEFLATE64 static ZCONST uch cplext64[] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 16, INVALID_CODE, INVALID_CODE}; #else # define cplext32 cplext #endif static ZCONST uch cplext32[] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, INVALID_CODE, INVALID_CODE}; /* - Copy offsets for distance codes 0..29 (0..31 for Deflate64) */ static ZCONST ush cpdist[] = { 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, #if (defined(USE_DEFLATE64) || defined(PKZIP_BUG_WORKAROUND)) 8193, 12289, 16385, 24577, 32769, 49153}; #else 8193, 12289, 16385, 24577}; #endif /* - Extra bits for distance codes 0..29 (0..31 for Deflate64) */ #ifdef USE_DEFLATE64 static ZCONST uch cpdext64[] = { 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14}; #else # define cpdext32 cpdext #endif static ZCONST uch cpdext32[] = { 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, #ifdef PKZIP_BUG_WORKAROUND 12, 12, 13, 13, INVALID_CODE, INVALID_CODE}; #else 12, 12, 13, 13}; #endif #ifdef PKZIP_BUG_WORKAROUND # define MAXLITLENS 288 #else # define MAXLITLENS 286 #endif #if (defined(USE_DEFLATE64) || defined(PKZIP_BUG_WORKAROUND)) # define MAXDISTS 32 #else # define MAXDISTS 30 #endif /* moved to consts.h (included in unzip.c), resp. funzip.c */ #if 0 /* And'ing with mask_bits[n] masks the lower n bits */ ZCONST unsigned near mask_bits[17] = { 0x0000, 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff, 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff }; #endif /* 0 */ /* Macros for inflate() bit peeking and grabbing. The usage is: NEEDBITS(j) x = b & mask_bits[j]; DUMPBITS(j) where NEEDBITS makes sure that b has at least j bits in it, and DUMPBITS removes the bits from b. The macros use the variable k for the number of bits in b. Normally, b and k are register variables for speed and are initialized at the beginning of a routine that uses these macros from a global bit buffer and count. In order to not ask for more bits than there are in the compressed stream, the Huffman tables are constructed to only ask for just enough bits to make up the end-of-block code (value 256). Then no bytes need to be "returned" to the buffer at the end of the last block. See the huft_build() routine. Actually, the precautions mentioned above are not sufficient to prevent fetches of bits beyound the end of the last block in every case. When the last code fetched before the end-of-block code was a very short distance code (shorter than "distance-prefetch-bits" - "end-of-block code bits"), this last distance code fetch already exausts the available data. To prevent failure of extraction in this case, the "read beyond EOF" check delays the raise of the "invalid data" error until an actual overflow of "used data" is detected. This error condition is only fulfilled when the "number of available bits" counter k is found to be negative in the NEEDBITS() macro. An alternate fix for that problem adjusts the size of the distance code base table so that it does not exceed the length of the end-of-block code plus the minimum length of a distance code. This alternate fix can be enabled by defining the preprocessor symbol FIX_PAST_EOB_BY_TABLEADJUST. */ /* These have been moved to globals.h */ #if 0 ulg bb; /* bit buffer */ unsigned bk; /* bits in bit buffer */ #endif #ifndef CHECK_EOF # define CHECK_EOF /* default as of 5.13/5.2 */ #endif #ifndef CHECK_EOF # define NEEDBITS(n) {while(k<(n)){b|=((ulg)NEXTBYTE)<=0)break;retval=1;goto cleanup_and_exit;}\ b|=((ulg)c)<>=(n);k-=(n);} /* Huffman code decoding is performed using a multi-level table lookup. The fastest way to decode is to simply build a lookup table whose size is determined by the longest code. However, the time it takes to build this table can also be a factor if the data being decoded are not very long. The most common codes are necessarily the shortest codes, so those codes dominate the decoding time, and hence the speed. The idea is you can have a shorter table that decodes the shorter, more probable codes, and then point to subsidiary tables for the longer codes. The time it costs to decode the longer codes is then traded against the time it takes to make longer tables. This results of this trade are in the variables lbits and dbits below. lbits is the number of bits the first level table for literal/ length codes can decode in one step, and dbits is the same thing for the distance codes. Subsequent tables are also less than or equal to those sizes. These values may be adjusted either when all of the codes are shorter than that, in which case the longest code length in bits is used, or when the shortest code is *longer* than the requested table size, in which case the length of the shortest code in bits is used. There are two different values for the two tables, since they code a different number of possibilities each. The literal/length table codes 286 possible values, or in a flat code, a little over eight bits. The distance table codes 30 possible values, or a little less than five bits, flat. The optimum values for speed end up being about one bit more than those, so lbits is 8+1 and dbits is 5+1. The optimum values may differ though from machine to machine, and possibly even between compilers. Your mileage may vary. */ /* bits in base literal/length lookup table */ static ZCONST unsigned lbits = 9; /* bits in base distance lookup table */ static ZCONST unsigned dbits = 6; #ifndef ASM_INFLATECODES int inflate_codes(__G__ tl, td, bl, bd) __GDEF struct huft *tl, *td; /* literal/length and distance decoder tables */ unsigned bl, bd; /* number of bits decoded by tl[] and td[] */ /* inflate (decompress) the codes in a deflated (compressed) block. Return an error code or zero if it all goes ok. */ { register unsigned e; /* table entry flag/number of extra bits */ unsigned d; /* index for copy */ UINT_D64 n; /* length for copy (deflate64: might be 64k+2) */ UINT_D64 w; /* current window position (deflate64: up to 64k) */ struct huft *t; /* pointer to table entry */ unsigned ml, md; /* masks for bl and bd bits */ register ulg b; /* bit buffer */ register unsigned k; /* number of bits in bit buffer */ int retval = 0; /* error code returned: initialized to "no error" */ /* make local copies of globals */ b = G.bb; /* initialize bit buffer */ k = G.bk; w = G.wp; /* initialize window position */ /* inflate the coded data */ ml = mask_bits[bl]; /* precompute masks for speed */ md = mask_bits[bd]; while (1) /* do until end of block */ { NEEDBITS(bl) t = tl + ((unsigned)b & ml); while (1) { DUMPBITS(t->b) if ((e = t->e) == 32) /* then it's a literal */ { redirSlide[w++] = (uch)t->v.n; if (w == wsize) { if ((retval = FLUSH(w)) != 0) goto cleanup_and_exit; w = 0; } break; } if (e < 31) /* then it's a length */ { /* get length of block to copy */ NEEDBITS(e) n = t->v.n + ((unsigned)b & mask_bits[e]); DUMPBITS(e) /* decode distance of block to copy */ NEEDBITS(bd) t = td + ((unsigned)b & md); while (1) { DUMPBITS(t->b) if ((e = t->e) < 32) break; if (IS_INVALID_CODE(e)) return 1; e &= 31; NEEDBITS(e) t = t->v.t + ((unsigned)b & mask_bits[e]); } NEEDBITS(e) d = (unsigned)w - t->v.n - ((unsigned)b & mask_bits[e]); DUMPBITS(e) /* do the copy */ do { #if (defined(DLL) && !defined(NO_SLIDE_REDIR)) if (G.redirect_slide) { /* &= w/ wsize unnecessary & wrong if redirect */ if ((UINT_D64)d >= wsize) return 1; /* invalid compressed data */ e = (unsigned)(wsize - (d > (unsigned)w ? (UINT_D64)d : w)); } else #endif e = (unsigned)(wsize - ((d &= (unsigned)(wsize-1)) > (unsigned)w ? (UINT_D64)d : w)); if ((UINT_D64)e > n) e = (unsigned)n; n -= e; #ifndef NOMEMCPY if ((unsigned)w - d >= e) /* (this test assumes unsigned comparison) */ { memcpy(redirSlide + (unsigned)w, redirSlide + d, e); w += e; d += e; } else /* do it slowly to avoid memcpy() overlap */ #endif /* !NOMEMCPY */ do { redirSlide[w++] = redirSlide[d++]; } while (--e); if (w == wsize) { if ((retval = FLUSH(w)) != 0) goto cleanup_and_exit; w = 0; } } while (n); break; } if (e == 31) /* it's the EOB signal */ { /* sorry for this goto, but we have to exit two loops at once */ goto cleanup_decode; } if (IS_INVALID_CODE(e)) return 1; e &= 31; NEEDBITS(e) t = t->v.t + ((unsigned)b & mask_bits[e]); } } cleanup_decode: /* restore the globals from the locals */ G.wp = (unsigned)w; /* restore global window pointer */ G.bb = b; /* restore global bit buffer */ G.bk = k; cleanup_and_exit: /* done */ return retval; } #endif /* ASM_INFLATECODES */ static int inflate_stored(__G) __GDEF /* "decompress" an inflated type 0 (stored) block. */ { UINT_D64 w; /* current window position (deflate64: up to 64k!) */ unsigned n; /* number of bytes in block */ register ulg b; /* bit buffer */ register unsigned k; /* number of bits in bit buffer */ int retval = 0; /* error code returned: initialized to "no error" */ /* make local copies of globals */ Trace((stderr, "\nstored block")); b = G.bb; /* initialize bit buffer */ k = G.bk; w = G.wp; /* initialize window position */ /* go to byte boundary */ n = k & 7; DUMPBITS(n); /* get the length and its complement */ NEEDBITS(16) n = ((unsigned)b & 0xffff); DUMPBITS(16) NEEDBITS(16) if (n != (unsigned)((~b) & 0xffff)) return 1; /* error in compressed data */ DUMPBITS(16) /* read and output the compressed data */ while (n--) { NEEDBITS(8) redirSlide[w++] = (uch)b; if (w == wsize) { if ((retval = FLUSH(w)) != 0) goto cleanup_and_exit; w = 0; } DUMPBITS(8) } /* restore the globals from the locals */ G.wp = (unsigned)w; /* restore global window pointer */ G.bb = b; /* restore global bit buffer */ G.bk = k; cleanup_and_exit: return retval; } /* Globals for literal tables (built once) */ /* Moved to globals.h */ #if 0 struct huft *fixed_tl = (struct huft *)NULL; struct huft *fixed_td; int fixed_bl, fixed_bd; #endif static int inflate_fixed(__G) __GDEF /* decompress an inflated type 1 (fixed Huffman codes) block. We should either replace this with a custom decoder, or at least precompute the Huffman tables. */ { /* if first time, set up tables for fixed blocks */ Trace((stderr, "\nliteral block")); if (G.fixed_tl == (struct huft *)NULL) { int i; /* temporary variable */ unsigned l[288]; /* length list for huft_build */ /* literal table */ for (i = 0; i < 144; i++) l[i] = 8; for (; i < 256; i++) l[i] = 9; for (; i < 280; i++) l[i] = 7; for (; i < 288; i++) /* make a complete, but wrong code set */ l[i] = 8; G.fixed_bl = 7; #ifdef USE_DEFLATE64 if ((i = huft_build(__G__ l, 288, 257, G.cplens, G.cplext, &G.fixed_tl, &G.fixed_bl)) != 0) #else if ((i = huft_build(__G__ l, 288, 257, cplens, cplext, &G.fixed_tl, &G.fixed_bl)) != 0) #endif { G.fixed_tl = (struct huft *)NULL; return i; } /* distance table */ for (i = 0; i < MAXDISTS; i++) /* make an incomplete code set */ l[i] = 5; G.fixed_bd = 5; #ifdef USE_DEFLATE64 if ((i = huft_build(__G__ l, MAXDISTS, 0, cpdist, G.cpdext, &G.fixed_td, &G.fixed_bd)) > 1) #else if ((i = huft_build(__G__ l, MAXDISTS, 0, cpdist, cpdext, &G.fixed_td, &G.fixed_bd)) > 1) #endif { huft_free(G.fixed_tl); G.fixed_td = G.fixed_tl = (struct huft *)NULL; return i; } } /* decompress until an end-of-block code */ return inflate_codes(__G__ G.fixed_tl, G.fixed_td, G.fixed_bl, G.fixed_bd); } static int inflate_dynamic(__G) __GDEF /* decompress an inflated type 2 (dynamic Huffman codes) block. */ { unsigned i; /* temporary variables */ unsigned j; unsigned l; /* last length */ unsigned m; /* mask for bit lengths table */ unsigned n; /* number of lengths to get */ struct huft *tl = (struct huft *)NULL; /* literal/length code table */ struct huft *td = (struct huft *)NULL; /* distance code table */ struct huft *th; /* temp huft table pointer used in tables decoding */ unsigned bl; /* lookup bits for tl */ unsigned bd; /* lookup bits for td */ unsigned nb; /* number of bit length codes */ unsigned nl; /* number of literal/length codes */ unsigned nd; /* number of distance codes */ unsigned ll[MAXLITLENS+MAXDISTS]; /* lit./length and distance code lengths */ register ulg b; /* bit buffer */ register unsigned k; /* number of bits in bit buffer */ int retval = 0; /* error code returned: initialized to "no error" */ /* make local bit buffer */ Trace((stderr, "\ndynamic block")); b = G.bb; k = G.bk; /* read in table lengths */ NEEDBITS(5) nl = 257 + ((unsigned)b & 0x1f); /* number of literal/length codes */ DUMPBITS(5) NEEDBITS(5) nd = 1 + ((unsigned)b & 0x1f); /* number of distance codes */ DUMPBITS(5) NEEDBITS(4) nb = 4 + ((unsigned)b & 0xf); /* number of bit length codes */ DUMPBITS(4) if (nl > MAXLITLENS || nd > MAXDISTS) return 1; /* bad lengths */ /* read in bit-length-code lengths */ for (j = 0; j < nb; j++) { NEEDBITS(3) ll[border[j]] = (unsigned)b & 7; DUMPBITS(3) } for (; j < 19; j++) ll[border[j]] = 0; /* build decoding table for trees--single level, 7 bit lookup */ bl = 7; retval = huft_build(__G__ ll, 19, 19, NULL, NULL, &tl, &bl); if (bl == 0) /* no bit lengths */ retval = 1; if (retval) { if (retval == 1) huft_free(tl); return retval; /* incomplete code set */ } /* read in literal and distance code lengths */ n = nl + nd; m = mask_bits[bl]; i = l = 0; while (i < n) { NEEDBITS(bl) j = (th = tl + ((unsigned)b & m))->b; DUMPBITS(j) j = th->v.n; if (j < 16) /* length of code in bits (0..15) */ ll[i++] = l = j; /* save last length in l */ else if (j == 16) /* repeat last length 3 to 6 times */ { NEEDBITS(2) j = 3 + ((unsigned)b & 3); DUMPBITS(2) if ((unsigned)i + j > n) { huft_free(tl); return 1; } while (j--) ll[i++] = l; } else if (j == 17) /* 3 to 10 zero length codes */ { NEEDBITS(3) j = 3 + ((unsigned)b & 7); DUMPBITS(3) if ((unsigned)i + j > n) { huft_free(tl); return 1; } while (j--) ll[i++] = 0; l = 0; } else /* j == 18: 11 to 138 zero length codes */ { NEEDBITS(7) j = 11 + ((unsigned)b & 0x7f); DUMPBITS(7) if ((unsigned)i + j > n) { huft_free(tl); return 1; } while (j--) ll[i++] = 0; l = 0; } } /* free decoding table for trees */ huft_free(tl); /* restore the global bit buffer */ G.bb = b; G.bk = k; /* build the decoding tables for literal/length and distance codes */ bl = lbits; #ifdef USE_DEFLATE64 retval = huft_build(__G__ ll, nl, 257, G.cplens, G.cplext, &tl, &bl); #else retval = huft_build(__G__ ll, nl, 257, cplens, cplext, &tl, &bl); #endif if (bl == 0) /* no literals or lengths */ retval = 1; if (retval) { if (retval == 1) { if (!uO.qflag) MESSAGE((uch *)"(incomplete l-tree) ", 21L, 1); huft_free(tl); } return retval; /* incomplete code set */ } #ifdef FIX_PAST_EOB_BY_TABLEADJUST /* Adjust the requested distance base table size so that a distance code fetch never tries to get bits behind an immediatly following end-of-block code. */ bd = (dbits <= bl+1 ? dbits : bl+1); #else bd = dbits; #endif #ifdef USE_DEFLATE64 retval = huft_build(__G__ ll + nl, nd, 0, cpdist, G.cpdext, &td, &bd); #else retval = huft_build(__G__ ll + nl, nd, 0, cpdist, cpdext, &td, &bd); #endif #ifdef PKZIP_BUG_WORKAROUND if (retval == 1) retval = 0; #endif if (bd == 0 && nl > 257) /* lengths but no distances */ retval = 1; if (retval) { if (retval == 1) { if (!uO.qflag) MESSAGE((uch *)"(incomplete d-tree) ", 21L, 1); huft_free(td); } huft_free(tl); return retval; } /* decompress until an end-of-block code */ retval = inflate_codes(__G__ tl, td, bl, bd); cleanup_and_exit: /* free the decoding tables, return */ if (tl != (struct huft *)NULL) huft_free(tl); if (td != (struct huft *)NULL) huft_free(td); return retval; } static int inflate_block(__G__ e) __GDEF int *e; /* last block flag */ /* decompress an inflated block */ { unsigned t; /* block type */ register ulg b; /* bit buffer */ register unsigned k; /* number of bits in bit buffer */ int retval = 0; /* error code returned: initialized to "no error" */ /* make local bit buffer */ b = G.bb; k = G.bk; /* read in last block bit */ NEEDBITS(1) *e = (int)b & 1; DUMPBITS(1) /* read in block type */ NEEDBITS(2) t = (unsigned)b & 3; DUMPBITS(2) /* restore the global bit buffer */ G.bb = b; G.bk = k; /* inflate that block type */ if (t == 2) return inflate_dynamic(__G); if (t == 0) return inflate_stored(__G); if (t == 1) return inflate_fixed(__G); /* bad block type */ retval = 2; cleanup_and_exit: return retval; } int inflate(__G__ is_defl64) __GDEF int is_defl64; /* decompress an inflated entry */ { int e; /* last block flag */ int r; /* result code */ #ifdef DEBUG unsigned h = 0; /* maximum struct huft's malloc'ed */ #endif #if (defined(DLL) && !defined(NO_SLIDE_REDIR)) if (G.redirect_slide) wsize = G.redirect_size, redirSlide = G.redirect_buffer; else wsize = WSIZE, redirSlide = slide; /* how they're #defined if !DLL */ #endif /* initialize window, bit buffer */ G.wp = 0; G.bk = 0; G.bb = 0; #ifdef USE_DEFLATE64 if (is_defl64) { G.cplens = cplens64; G.cplext = cplext64; G.cpdext = cpdext64; G.fixed_tl = G.fixed_tl64; G.fixed_bl = G.fixed_bl64; G.fixed_td = G.fixed_td64; G.fixed_bd = G.fixed_bd64; } else { G.cplens = cplens32; G.cplext = cplext32; G.cpdext = cpdext32; G.fixed_tl = G.fixed_tl32; G.fixed_bl = G.fixed_bl32; G.fixed_td = G.fixed_td32; G.fixed_bd = G.fixed_bd32; } #else /* !USE_DEFLATE64 */ if (is_defl64) { /* This should not happen unless UnZip is built from object files * compiled with inconsistent option setting. Handle this by * returning with "bad input" error code. */ Trace((stderr, "\nThis inflate() cannot handle Deflate64!\n")); return 2; } #endif /* ?USE_DEFLATE64 */ /* decompress until the last block */ do { #ifdef DEBUG G.hufts = 0; #endif if ((r = inflate_block(__G__ &e)) != 0) return r; #ifdef DEBUG if (G.hufts > h) h = G.hufts; #endif } while (!e); Trace((stderr, "\n%u bytes in Huffman tables (%u/entry)\n", h * (unsigned)sizeof(struct huft), (unsigned)sizeof(struct huft))); #ifdef USE_DEFLATE64 if (is_defl64) { G.fixed_tl64 = G.fixed_tl; G.fixed_bl64 = G.fixed_bl; G.fixed_td64 = G.fixed_td; G.fixed_bd64 = G.fixed_bd; } else { G.fixed_tl32 = G.fixed_tl; G.fixed_bl32 = G.fixed_bl; G.fixed_td32 = G.fixed_td; G.fixed_bd32 = G.fixed_bd; } #endif /* flush out redirSlide and return (success, unless final FLUSH failed) */ return (FLUSH(G.wp)); } int inflate_free(__G) __GDEF { if (G.fixed_tl != (struct huft *)NULL) { huft_free(G.fixed_td); huft_free(G.fixed_tl); G.fixed_td = G.fixed_tl = (struct huft *)NULL; } return 0; } #endif /* ?USE_ZLIB */ /* * GRR: moved huft_build() and huft_free() down here; used by explode() * and fUnZip regardless of whether USE_ZLIB defined or not */ /* If BMAX needs to be larger than 16, then h and x[] should be ulg. */ #define BMAX 16 /* maximum bit length of any code (16 for explode) */ #define N_MAX 288 /* maximum number of codes in any set */ int huft_build(__G__ b, n, s, d, e, t, m) __GDEF ZCONST unsigned *b; /* code lengths in bits (all assumed <= BMAX) */ unsigned n; /* number of codes (assumed <= N_MAX) */ unsigned s; /* number of simple-valued codes (0..s-1) */ ZCONST ush *d; /* list of base values for non-simple codes */ ZCONST uch *e; /* list of extra bits for non-simple codes */ struct huft **t; /* result: starting table */ unsigned *m; /* maximum lookup bits, returns actual */ /* Given a list of code lengths and a maximum table size, make a set of tables to decode that set of codes. Return zero on success, one if the given code set is incomplete (the tables are still built in this case), two if the input is invalid (all zero length codes or an oversubscribed set of lengths), and three if not enough memory. The code with value 256 is special, and the tables are constructed so that no bits beyond that code are fetched when that code is decoded. */ { unsigned a; /* counter for codes of length k */ unsigned c[BMAX+1]; /* bit length count table */ unsigned el; /* length of EOB code (value 256) */ unsigned f; /* i repeats in table every f entries */ int g; /* maximum code length */ int h; /* table level */ register unsigned i; /* counter, current code */ register unsigned j; /* counter */ register int k; /* number of bits in current code */ int lx[BMAX+1]; /* memory for l[-1..BMAX-1] */ int *l = lx+1; /* stack of bits per table */ register unsigned *p; /* pointer into c[], b[], or v[] */ register struct huft *q; /* points to current table */ struct huft r; /* table entry for structure assignment */ struct huft *u[BMAX]; /* table stack */ unsigned v[N_MAX]; /* values in order of bit length */ register int w; /* bits before this table == (l * h) */ unsigned x[BMAX+1]; /* bit offsets, then code stack */ unsigned *xp; /* pointer into x */ int y; /* number of dummy codes added */ unsigned z; /* number of entries in current table */ /* Generate counts for each bit length */ el = n > 256 ? b[256] : BMAX; /* set length of EOB code, if any */ memzero((char *)c, sizeof(c)); p = (unsigned *)b; i = n; do { c[*p]++; p++; /* assume all entries <= BMAX */ } while (--i); if (c[0] == n) /* null input--all zero length codes */ { *t = (struct huft *)NULL; *m = 0; return 0; } /* Find minimum and maximum length, bound *m by those */ for (j = 1; j <= BMAX; j++) if (c[j]) break; k = j; /* minimum code length */ if (*m < j) *m = j; for (i = BMAX; i; i--) if (c[i]) break; g = i; /* maximum code length */ if (*m > i) *m = i; /* Adjust last length count to fill out codes, if needed */ for (y = 1 << j; j < i; j++, y <<= 1) if ((y -= c[j]) < 0) return 2; /* bad input: more codes than bits */ if ((y -= c[i]) < 0) return 2; c[i] += y; /* Generate starting offsets into the value table for each length */ x[1] = j = 0; p = c + 1; xp = x + 2; while (--i) { /* note that i == g from above */ *xp++ = (j += *p++); } /* Make a table of values in order of bit lengths */ memzero((char *)v, sizeof(v)); p = (unsigned *)b; i = 0; do { if ((j = *p++) != 0) v[x[j]++] = i; } while (++i < n); n = x[g]; /* set n to length of v */ /* Generate the Huffman codes and for each, make the table entries */ x[0] = i = 0; /* first Huffman code is zero */ p = v; /* grab values in bit order */ h = -1; /* no tables yet--level -1 */ w = l[-1] = 0; /* no bits decoded yet */ u[0] = (struct huft *)NULL; /* just to keep compilers happy */ q = (struct huft *)NULL; /* ditto */ z = 0; /* ditto */ /* go through the bit lengths (k already is bits in shortest code) */ for (; k <= g; k++) { a = c[k]; while (a--) { /* here i is the Huffman code of length k bits for value *p */ /* make tables up to required level */ while (k > w + l[h]) { w += l[h++]; /* add bits already decoded */ /* compute minimum size table less than or equal to *m bits */ z = (z = g - w) > *m ? *m : z; /* upper limit */ if ((f = 1 << (j = k - w)) > a + 1) /* try a k-w bit table */ { /* too few codes for k-w bit table */ f -= a + 1; /* deduct codes from patterns left */ xp = c + k; while (++j < z) /* try smaller tables up to z bits */ { if ((f <<= 1) <= *++xp) break; /* enough codes to use up j bits */ f -= *xp; /* else deduct codes from patterns */ } } if ((unsigned)w + j > el && (unsigned)w < el) j = el - w; /* make EOB code end at table */ z = 1 << j; /* table entries for j-bit table */ l[h] = j; /* set table size in stack */ /* allocate and link in new table */ if ((q = (struct huft *)malloc((z + 1)*sizeof(struct huft))) == (struct huft *)NULL) { if (h) huft_free(u[0]); return 3; /* not enough memory */ } #ifdef DEBUG G.hufts += z + 1; /* track memory usage */ #endif *t = q + 1; /* link to list for huft_free() */ *(t = &(q->v.t)) = (struct huft *)NULL; u[h] = ++q; /* table starts after link */ /* connect to last table, if there is one */ if (h) { x[h] = i; /* save pattern for backing up */ r.b = (uch)l[h-1]; /* bits to dump before this table */ r.e = (uch)(32 + j); /* bits in this table */ r.v.t = q; /* pointer to this table */ j = (i & ((1 << w) - 1)) >> (w - l[h-1]); u[h-1][j] = r; /* connect to last table */ } } /* set up table entry in r */ r.b = (uch)(k - w); if (p >= v + n) r.e = INVALID_CODE; /* out of values--invalid code */ else if (*p < s) { r.e = (uch)(*p < 256 ? 32 : 31); /* 256 is end-of-block code */ r.v.n = (ush)*p++; /* simple code is just the value */ } else { r.e = e[*p - s]; /* non-simple--look up in lists */ r.v.n = d[*p++ - s]; } /* fill code-like entries with r */ f = 1 << (k - w); for (j = i >> w; j < z; j += f) q[j] = r; /* backwards increment the k-bit code i */ for (j = 1 << (k - 1); i & j; j >>= 1) i ^= j; i ^= j; /* backup over finished tables */ while ((i & ((1 << w) - 1)) != x[h]) w -= l[--h]; /* don't need to update q */ } } /* return actual size of base table */ *m = l[0]; /* Return true (1) if we were given an incomplete table */ return y != 0 && g != 1; } int huft_free(t) struct huft *t; /* table to free */ /* Free the malloc'ed tables built by huft_build(), which makes a linked list of the tables it made, with the links in a dummy first entry of each table. */ { register struct huft *p, *q; /* Go through linked list, freeing from the malloced (t[-1]) address. */ p = t; while (p != (struct huft *)NULL) { q = (--p)->v.t; free((zvoid *)p); p = q; } return 0; } Carla-2.4.2/data/windows/unzipfx-carla-control/inflate.h000066400000000000000000000033051420416754300232070ustar00rootroot00000000000000/* Copyright (c) 1990-2000 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2000-Apr-09 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /* inflate.h for UnZip -- by Mark Adler version c14f, 23 November 1995 */ /* Copyright history: - Starting with UnZip 5.41 of 16-April-2000, this source file is covered by the Info-Zip LICENSE cited above. - Prior versions of this source file, found in UnZip source packages up to UnZip 5.40, were put in the public domain. The original copyright note by Mark Adler was: "You can do whatever you like with this source file, though I would prefer that if you modify it and redistribute it that you include comments to that effect with your name and the date. Thank you." History: vers date who what ---- --------- -------------- ------------------------------------ c14 12 Mar 93 M. Adler made inflate.c standalone with the introduction of inflate.h. c14d 28 Aug 93 G. Roelofs replaced flush/FlushOutput with new version c14e 29 Sep 93 G. Roelofs moved everything into unzip.h; added crypt.h c14f 23 Nov 95 G. Roelofs added UNZIP_INTERNAL to accommodate newly split unzip.h */ #define UNZIP_INTERNAL #include "unzip.h" /* provides slide[], typedefs and macros */ #ifdef FUNZIP # include "crypt.h" /* provides NEXTBYTE macro for crypt version of funzip */ #endif Carla-2.4.2/data/windows/unzipfx-carla-control/match.c000066400000000000000000000367721420416754300226720ustar00rootroot00000000000000/* Copyright (c) 1990-2005 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2000-Apr-09 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- match.c The match() routine recursively compares a string to a "pattern" (regular expression), returning TRUE if a match is found or FALSE if not. This version is specifically for use with unzip.c: as did the previous match() routines from SEA and J. Kercheval, it leaves the case (upper, lower, or mixed) of the string alone, but converts any uppercase characters in the pattern to lowercase if indicated by the global var pInfo->lcflag (which is to say, string is assumed to have been converted to lowercase already, if such was necessary). GRR: reversed order of text, pattern in matche() (now same as match()); added ignore_case/ic flags, Case() macro. PaulK: replaced matche() with recmatch() from Zip, modified to have an ignore_case argument; replaced test frame with simpler one. --------------------------------------------------------------------------- Copyright on recmatch() from Zip's util.c (although recmatch() was almost certainly written by Mark Adler...ask me how I can tell :-) ): Copyright (C) 1990-1992 Mark Adler, Richard B. Wales, Jean-loup Gailly, Kai Uwe Rommel and Igor Mandrichenko. Permission is granted to any individual or institution to use, copy, or redistribute this software so long as all of the original files are included unmodified, that it is not sold for profit, and that this copy- right notice is retained. --------------------------------------------------------------------------- Match the pattern (wildcard) against the string (fixed): match(string, pattern, ignore_case, sepc); returns TRUE if string matches pattern, FALSE otherwise. In the pattern: `*' matches any sequence of characters (zero or more) `?' matches any single character [SET] matches any character in the specified set, [!SET] or [^SET] matches any character not in the specified set. A set is composed of characters or ranges; a range looks like ``character hyphen character'' (as in 0-9 or A-Z). [0-9a-zA-Z_] is the minimal set of characters allowed in the [..] pattern construct. Other characters are allowed (i.e., 8-bit characters) if your system will support them. To suppress the special syntactic significance of any of ``[]*?!^-\'', in- side or outside a [..] construct, and match the character exactly, precede it with a ``\'' (backslash). Note that "*.*" and "*." are treated specially under MS-DOS if DOSWILD is defined. See the DOSWILD section below for an explanation. Note also that with VMSWILD defined, '%' is used instead of '?', and sets (ranges) are delimited by () instead of []. ---------------------------------------------------------------------------*/ #define __MATCH_C /* identifies this source module */ /* define ToLower() in here (for Unix, define ToLower to be macro (using * isupper()); otherwise just use tolower() */ #define UNZIP_INTERNAL #include "unzip.h" #ifndef THEOS /* the Theos port defines its own variant of match() */ #if 0 /* this is not useful until it matches Amiga names insensitively */ #ifdef AMIGA /* some other platforms might also want to use this */ # define ANSI_CHARSET /* MOVE INTO UNZIP.H EVENTUALLY */ #endif #endif /* 0 */ #ifdef ANSI_CHARSET # ifdef ToLower # undef ToLower # endif /* uppercase letters are values 41 thru 5A, C0 thru D6, and D8 thru DE */ # define IsUpper(c) (c>=0xC0 ? c<=0xDE && c!=0xD7 : c>=0x41 && c<=0x5A) # define ToLower(c) (IsUpper((uch) c) ? (unsigned) c | 0x20 : (unsigned) c) #endif #define Case(x) (ic? ToLower(x) : (x)) #ifdef VMSWILD # define WILDCHAR '%' # define BEG_RANGE '(' # define END_RANGE ')' #else # define WILDCHAR '?' # define BEG_RANGE '[' # define END_RANGE ']' #endif #if 0 /* GRR: add this to unzip.h someday... */ #if !(defined(MSDOS) && defined(DOSWILD)) #ifdef WILD_STOP_AT_DIR #define match(s,p,ic,sc) (recmatch((ZCONST uch *)p,(ZCONST uch *)s,ic,sc) == 1) #else #define match(s,p,ic) (recmatch((ZCONST uch *)p,(ZCONST uch *)s,ic) == 1) #endif int recmatch OF((ZCONST uch *pattern, ZCONST uch *string, int ignore_case __WDLPRO)); #endif #endif /* 0 */ static int recmatch OF((ZCONST uch *pattern, ZCONST uch *string, int ignore_case __WDLPRO)); static char *isshexp OF((ZCONST char *p)); static int namecmp OF((ZCONST char *s1, ZCONST char *s2)); /* match() is a shell to recmatch() to return only Boolean values. */ int match(string, pattern, ignore_case __WDL) ZCONST char *string, *pattern; int ignore_case; __WDLDEF { #if (defined(MSDOS) && defined(DOSWILD)) char *dospattern; int j = strlen(pattern); /*--------------------------------------------------------------------------- Optional MS-DOS preprocessing section: compare last three chars of the wildcard to "*.*" and translate to "*" if found; else compare the last two characters to "*." and, if found, scan the non-wild string for dots. If in the latter case a dot is found, return failure; else translate the "*." to "*". In either case, continue with the normal (Unix-like) match procedure after translation. (If not enough memory, default to normal match.) This causes "a*.*" and "a*." to behave as MS-DOS users expect. ---------------------------------------------------------------------------*/ if ((dospattern = (char *)malloc(j+1)) != NULL) { strcpy(dospattern, pattern); if (!strcmp(dospattern+j-3, "*.*")) { dospattern[j-2] = '\0'; /* nuke the ".*" */ } else if (!strcmp(dospattern+j-2, "*.")) { char *p = MBSCHR(string, '.'); if (p) { /* found a dot: match fails */ free(dospattern); return 0; } dospattern[j-1] = '\0'; /* nuke the end "." */ } j = recmatch((uch *)dospattern, (uch *)string, ignore_case __WDL); free(dospattern); return j == 1; } else #endif /* MSDOS && DOSWILD */ return recmatch((uch *)pattern, (uch *)string, ignore_case __WDL) == 1; } static int recmatch(p, s, ic __WDL) ZCONST uch *p; /* sh pattern to match */ ZCONST uch *s; /* string to which to match it */ int ic; /* true for case insensitivity */ __WDLDEF /* directory sepchar for WildStopAtDir mode, or 0 */ /* Recursively compare the sh pattern p with the string s and return 1 if * they match, and 0 or 2 if they don't or if there is a syntax error in the * pattern. This routine recurses on itself no more deeply than the number * of characters in the pattern. */ { unsigned int c; /* pattern char or start of range in [-] loop */ /* Get first character, the pattern for new recmatch calls follows */ c = *p; INCSTR(p); /* If that was the end of the pattern, match if string empty too */ if (c == 0) return *s == 0; /* '?' (or '%') matches any character (but not an empty string). */ if (c == WILDCHAR) #ifdef WILD_STOP_AT_DIR /* If uO.W_flag is non-zero, it won't match '/' */ return (*s && (!sepc || *s != (uch)sepc)) ? recmatch(p, s + CLEN(s), ic, sepc) : 0; #else return *s ? recmatch(p, s + CLEN(s), ic) : 0; #endif /* '*' matches any number of characters, including zero */ #ifdef AMIGA if (c == '#' && *p == '?') /* "#?" is Amiga-ese for "*" */ c = '*', p++; #endif /* AMIGA */ if (c == '*') { #ifdef WILD_STOP_AT_DIR if (sepc) { /* check for single "*" or double "**" */ # ifdef AMIGA if ((c = p[0]) == '#' && p[1] == '?') /* "#?" is Amiga-ese for "*" */ c = '*', p++; if (c != '*') { # else /* !AMIGA */ if (*p != '*') { # endif /* ?AMIGA */ /* single "*": this doesn't match the dirsep character */ for (; *s && *s != (uch)sepc; INCSTR(s)) if ((c = recmatch(p, s, ic, sepc)) != 0) return (int)c; /* end of pattern: matched if at end of string, else continue */ if (*p == '\0') return (*s == 0); /* continue to match if at sepc in pattern, else give up */ return (*p == (uch)sepc || (*p == '\\' && p[1] == (uch)sepc)) ? recmatch(p, s, ic, sepc) : 2; } /* "**": this matches slashes */ ++p; /* move p behind the second '*' */ /* and continue with the non-W_flag code variant */ } #endif /* WILD_STOP_AT_DIR */ if (*p == 0) return 1; if (isshexp((ZCONST char *)p) == NULL) { /* Optimization for rest of pattern being a literal string: * If there are no other shell expression chars in the rest * of the pattern behind the multi-char wildcard, then just * compare the literal string tail. */ ZCONST uch *srest; srest = s + (strlen((ZCONST char *)s) - strlen((ZCONST char *)p)); if (srest - s < 0) /* remaining literal string from pattern is longer than rest * of test string, there can't be a match */ return 0; else /* compare the remaining literal pattern string with the last * bytes of the test string to check for a match */ #ifdef _MBCS { ZCONST uch *q = s; /* MBCS-aware code must not scan backwards into a string from * the end. * So, we have to move forward by character from our well-known * character position s in the test string until we have * advanced to the srest position. */ while (q < srest) INCSTR(q); /* In case the byte *srest is a trailing byte of a multibyte * character in the test string s, we have actually advanced * past the position (srest). * For this case, the match has failed! */ if (q != srest) return 0; return ((ic ? namecmp((ZCONST char *)p, (ZCONST char *)q) : strcmp((ZCONST char *)p, (ZCONST char *)q) ) == 0); } #else /* !_MBCS */ return ((ic ? namecmp((ZCONST char *)p, (ZCONST char *)srest) : strcmp((ZCONST char *)p, (ZCONST char *)srest) ) == 0); #endif /* ?_MBCS */ } else { /* pattern contains more wildcards, continue with recursion... */ for (; *s; INCSTR(s)) if ((c = recmatch(p, s, ic __WDL)) != 0) return (int)c; return 2; /* 2 means give up--match will return false */ } } /* Parse and process the list of characters and ranges in brackets */ if (c == BEG_RANGE) { int e; /* flag true if next char to be taken literally */ ZCONST uch *q; /* pointer to end of [-] group */ int r; /* flag true to match anything but the range */ if (*s == 0) /* need a character to match */ return 0; p += (r = (*p == '!' || *p == '^')); /* see if reverse */ for (q = p, e = 0; *q; INCSTR(q)) /* find closing bracket */ if (e) e = 0; else if (*q == '\\') /* GRR: change to ^ for MS-DOS, OS/2? */ e = 1; else if (*q == END_RANGE) break; if (*q != END_RANGE) /* nothing matches if bad syntax */ return 0; for (c = 0, e = (*p == '-'); p < q; INCSTR(p)) { /* go through the list */ if (!e && *p == '\\') /* set escape flag if \ */ e = 1; else if (!e && *p == '-') /* set start of range if - */ c = *(p-1); else { unsigned int cc = Case(*s); if (*(p+1) != '-') for (c = c ? c : *p; c <= *p; c++) /* compare range */ if ((unsigned)Case(c) == cc) /* typecast for MSC bug */ return r ? 0 : recmatch(q + 1, s + 1, ic __WDL); c = e = 0; /* clear range, escape flags */ } } return r ? recmatch(q + CLEN(q), s + CLEN(s), ic __WDL) : 0; /* bracket match failed */ } /* if escape ('\\'), just compare next character */ if (c == '\\' && (c = *p++) == 0) /* if \ at end, then syntax error */ return 0; /* just a character--compare it */ #ifdef QDOS return QMatch(Case((uch)c), Case(*s)) ? recmatch(p, s + CLEN(s), ic __WDL) : 0; #else return Case((uch)c) == Case(*s) ? recmatch(p, s + CLEN(s), ic __WDL) : 0; #endif } /* end function recmatch() */ static char *isshexp(p) ZCONST char *p; /* If p is a sh expression, a pointer to the first special character is returned. Otherwise, NULL is returned. */ { for (; *p; INCSTR(p)) if (*p == '\\' && *(p+1)) p++; else if (*p == WILDCHAR || *p == '*' || *p == BEG_RANGE) return (char *)p; return NULL; } /* end function isshexp() */ static int namecmp(s1, s2) ZCONST char *s1, *s2; { int d; for (;;) { d = (int)ToLower((uch)*s1) - (int)ToLower((uch)*s2); if (d || *s1 == 0 || *s2 == 0) return d; s1++; s2++; } } /* end function namecmp() */ #endif /* !THEOS */ int iswild(p) /* originally only used for stat()-bug workaround in */ ZCONST char *p; /* VAX C, Turbo/Borland C, Watcom C, Atari MiNT libs; */ { /* now used in process_zipfiles() as well */ for (; *p; INCSTR(p)) if (*p == '\\' && *(p+1)) ++p; #ifdef THEOS else if (*p == '?' || *p == '*' || *p=='#'|| *p == '@') #else /* !THEOS */ #ifdef VMS else if (*p == '%' || *p == '*') #else /* !VMS */ #ifdef AMIGA else if (*p == '?' || *p == '*' || (*p=='#' && p[1]=='?') || *p == '[') #else /* !AMIGA */ else if (*p == '?' || *p == '*' || *p == '[') #endif /* ?AMIGA */ #endif /* ?VMS */ #endif /* ?THEOS */ #ifdef QDOS return (int)p; #else return TRUE; #endif return FALSE; } /* end function iswild() */ #ifdef TEST_MATCH #define put(s) {fputs(s,stdout); fflush(stdout);} #ifdef main # undef main #endif int main(int argc, char **argv) { char pat[256], str[256]; for (;;) { put("Pattern (return to exit): "); gets(pat); if (!pat[0]) break; for (;;) { put("String (return for new pattern): "); gets(str); if (!str[0]) break; printf("Case sensitive: %s insensitive: %s\n", match(str, pat, 0) ? "YES" : "NO", match(str, pat, 1) ? "YES" : "NO"); } } EXIT(0); } #endif /* TEST_MATCH */ Carla-2.4.2/data/windows/unzipfx-carla-control/process.c000066400000000000000000003250071420416754300232440ustar00rootroot00000000000000/* Copyright (c) 1990-2009 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2009-Jan-02 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- process.c This file contains the top-level routines for processing multiple zipfiles. Contains: process_zipfiles() free_G_buffers() do_seekable() file_size() rec_find() find_ecrec64() find_ecrec() process_zip_cmmnt() process_cdir_file_hdr() get_cdir_ent() process_local_file_hdr() getZip64Data() ef_scan_for_izux() getRISCOSexfield() ---------------------------------------------------------------------------*/ #define UNZIP_INTERNAL #include "unzip.h" #ifdef WINDLL # ifdef POCKET_UNZIP # include "wince/intrface.h" # else # include "windll/windll.h" # endif #endif #if defined(DYNALLOC_CRCTAB) || defined(UNICODE_SUPPORT) # include "crc32.h" #endif #include "unzipfx/appDetails.h" static int do_seekable OF((__GPRO__ int lastchance)); #ifdef DO_SAFECHECK_2GB # ifdef USE_STRM_INPUT static zoff_t file_size OF((FILE *file)); # else static zoff_t file_size OF((int fh)); # endif #endif /* DO_SAFECHECK_2GB */ static int rec_find OF((__GPRO__ zoff_t, char *, int)); static int find_ecrec64 OF((__GPRO__ zoff_t searchlen)); static int find_ecrec OF((__GPRO__ zoff_t searchlen)); static int process_zip_cmmnt OF((__GPRO)); static int get_cdir_ent OF((__GPRO)); #ifdef IZ_HAVE_UXUIDGID static int read_ux3_value OF((ZCONST uch *dbuf, unsigned uidgid_sz, ulg *p_uidgid)); #endif /* IZ_HAVE_UXUIDGID */ static ZCONST char Far CannotAllocateBuffers[] = "error: cannot allocate unzip buffers\n"; #ifdef SFX static ZCONST char Far CannotFindMyself[] = "unzipsfx: cannot find myself! [%s]\n"; # ifdef CHEAP_SFX_AUTORUN static ZCONST char Far AutorunPrompt[] = "\nAuto-run command: %s\nExecute this command? [y/n] "; static ZCONST char Far NotAutoRunning[] = "Not executing auto-run command."; # endif #else /* !SFX */ /* process_zipfiles() strings */ # if (defined(IZ_CHECK_TZ) && defined(USE_EF_UT_TIME)) static ZCONST char Far WarnInvalidTZ[] = "Warning: TZ environment variable not found, cannot use UTC times!!\n"; # endif # if !(defined(UNIX) || defined(AMIGA)) static ZCONST char Far CannotFindWildcardMatch[] = "%s: cannot find any matches for wildcard specification \"%s\".\n"; # endif /* !(UNIX || AMIGA) */ static ZCONST char Far FilesProcessOK[] = "%d archive%s successfully processed.\n"; static ZCONST char Far ArchiveWarning[] = "%d archive%s had warnings but no fatal errors.\n"; static ZCONST char Far ArchiveFatalError[] = "%d archive%s had fatal errors.\n"; static ZCONST char Far FileHadNoZipfileDir[] = "%d file%s had no zipfile directory.\n"; static ZCONST char Far ZipfileWasDir[] = "1 \"zipfile\" was a directory.\n"; static ZCONST char Far ManyZipfilesWereDir[] = "%d \"zipfiles\" were directories.\n"; static ZCONST char Far NoZipfileFound[] = "No zipfiles found.\n"; /* do_seekable() strings */ # ifdef UNIX static ZCONST char Far CannotFindZipfileDirMsg[] = "%s: cannot find zipfile directory in one of %s or\n\ %s%s.zip, and cannot find %s, period.\n"; static ZCONST char Far CannotFindEitherZipfile[] = "%s: cannot find or open %s, %s.zip or %s.\n"; # else /* !UNIX */ static ZCONST char Far CannotFindZipfileDirMsg[] = "%s: cannot find zipfile directory in %s,\n\ %sand cannot find %s, period.\n"; # ifdef VMS static ZCONST char Far CannotFindEitherZipfile[] = "%s: cannot find %s (%s).\n"; # else /* !VMS */ static ZCONST char Far CannotFindEitherZipfile[] = "%s: cannot find either %s or %s.\n"; # endif /* ?VMS */ # endif /* ?UNIX */ extern ZCONST char Far Zipnfo[]; /* in unzip.c */ #ifndef WINDLL static ZCONST char Far Unzip[] = "unzip"; #else static ZCONST char Far Unzip[] = "UnZip DLL"; #endif #ifdef DO_SAFECHECK_2GB static ZCONST char Far ZipfileTooBig[] = "Trying to read large file (> 2 GiB) without large file support\n"; #endif /* DO_SAFECHECK_2GB */ static ZCONST char Far MaybeExe[] = "note: %s may be a plain executable, not an archive\n"; static ZCONST char Far CentDirNotInZipMsg[] = "\n\ [%s]:\n\ Zipfile is disk %lu of a multi-disk archive, and this is not the disk on\n\ which the central zipfile directory begins (disk %lu).\n"; static ZCONST char Far EndCentDirBogus[] = "\nwarning [%s]: end-of-central-directory record claims this\n\ is disk %lu but that the central directory starts on disk %lu; this is a\n\ contradiction. Attempting to process anyway.\n"; # ifdef NO_MULTIPART static ZCONST char Far NoMultiDiskArcSupport[] = "\nerror [%s]: zipfile is part of multi-disk archive\n\ (sorry, not yet supported).\n"; static ZCONST char Far MaybePakBug[] = "warning [%s]:\ zipfile claims to be 2nd disk of a 2-part archive;\n\ attempting to process anyway. If no further errors occur, this archive\n\ was probably created by PAK v2.51 or earlier. This bug was reported to\n\ NoGate in March 1991 and was supposed to have been fixed by mid-1991; as\n\ of mid-1992 it still hadn't been. (If further errors do occur, archive\n\ was probably created by PKZIP 2.04c or later; UnZip does not yet support\n\ multi-part archives.)\n"; # else static ZCONST char Far MaybePakBug[] = "warning [%s]:\ zipfile claims to be last disk of a multi-part archive;\n\ attempting to process anyway, assuming all parts have been concatenated\n\ together in order. Expect \"errors\" and warnings...true multi-part support\ \n doesn't exist yet (coming soon).\n"; # endif static ZCONST char Far ExtraBytesAtStart[] = "warning [%s]: %s extra byte%s at beginning or within zipfile\n\ (attempting to process anyway)\n"; #endif /* ?SFX */ #if ((!defined(WINDLL) && !defined(SFX)) || !defined(NO_ZIPINFO)) static ZCONST char Far LogInitline[] = "Archive: %s\n"; #endif static ZCONST char Far MissingBytes[] = "error [%s]: missing %s bytes in zipfile\n\ (attempting to process anyway)\n"; static ZCONST char Far NullCentDirOffset[] = "error [%s]: NULL central directory offset\n\ (attempting to process anyway)\n"; static ZCONST char Far ZipfileEmpty[] = "warning [%s]: zipfile is empty\n"; static ZCONST char Far CentDirStartNotFound[] = "error [%s]: start of central directory not found;\n\ zipfile corrupt.\n%s"; static ZCONST char Far Cent64EndSigSearchErr[] = "fatal error: read failure while seeking for End-of-centdir-64 signature.\n\ This zipfile is corrupt.\n"; static ZCONST char Far Cent64EndSigSearchOff[] = "error: End-of-centdir-64 signature not where expected (prepended bytes?)\n\ (attempting to process anyway)\n"; #ifndef SFX static ZCONST char Far CentDirTooLong[] = "error [%s]: reported length of central directory is\n\ %s bytes too long (Atari STZip zipfile? J.H.Holm ZIPSPLIT 1.1\n\ zipfile?). Compensating...\n"; static ZCONST char Far CentDirEndSigNotFound[] = "\ End-of-central-directory signature not found. Either this file is not\n\ a zipfile, or it constitutes one disk of a multi-part archive. In the\n\ latter case the central directory and zipfile comment will be found on\n\ the last disk(s) of this archive.\n"; #else /* SFX */ static ZCONST char Far CentDirEndSigNotFound[] = " End-of-central-directory signature not found.\n"; #endif /* ?SFX */ #ifdef TIMESTAMP static ZCONST char Far ZipTimeStampFailed[] = "warning: cannot set time for %s\n"; static ZCONST char Far ZipTimeStampSuccess[] = "Updated time stamp for %s.\n"; #endif static ZCONST char Far ZipfileCommTrunc1[] = "\ncaution: zipfile comment truncated\n"; #ifndef NO_ZIPINFO static ZCONST char Far NoZipfileComment[] = "There is no zipfile comment.\n"; static ZCONST char Far ZipfileCommentDesc[] = "The zipfile comment is %u bytes long and contains the following text:\n"; static ZCONST char Far ZipfileCommBegin[] = "======================== zipfile comment begins\ ==========================\n"; static ZCONST char Far ZipfileCommEnd[] = "========================= zipfile comment ends\ ===========================\n"; static ZCONST char Far ZipfileCommTrunc2[] = "\n The zipfile comment is truncated.\n"; #endif /* !NO_ZIPINFO */ #ifdef UNICODE_SUPPORT static ZCONST char Far UnicodeVersionError[] = "\nwarning: Unicode Path version > 1\n"; static ZCONST char Far UnicodeMismatchError[] = "\nwarning: Unicode Path checksum invalid\n"; #endif /*******************************/ /* Function process_zipfiles() */ /*******************************/ int process_zipfiles(__G) /* return PK-type error code */ __GDEF { #ifndef SFX char *lastzipfn = (char *)NULL; int NumWinFiles, NumLoseFiles, NumWarnFiles; int NumMissDirs, NumMissFiles; #endif int error=0, error_in_archive=0; /*--------------------------------------------------------------------------- Start by allocating buffers and (re)constructing the various PK signature strings. ---------------------------------------------------------------------------*/ G.inbuf = (uch *)malloc(INBUFSIZ + 4); /* 4 extra for hold[] (below) */ G.outbuf = (uch *)malloc(OUTBUFSIZ + 1); /* 1 extra for string term. */ if ((G.inbuf == (uch *)NULL) || (G.outbuf == (uch *)NULL)) { Info(slide, 0x401, ((char *)slide, LoadFarString(CannotAllocateBuffers))); return(PK_MEM); } G.hold = G.inbuf + INBUFSIZ; /* to check for boundary-spanning sigs */ #ifndef VMS /* VMS uses its own buffer scheme for textmode flush(). */ #ifdef SMALL_MEM G.outbuf2 = G.outbuf+RAWBUFSIZ; /* never changes */ #endif #endif /* !VMS */ #if 0 /* CRC_32_TAB has been NULLified by CONSTRUCTGLOBALS !!!! */ /* allocate the CRC table later when we know we can read zipfile data */ CRC_32_TAB = NULL; #endif /* 0 */ /* finish up initialization of magic signature strings */ local_hdr_sig[0] /* = extd_local_sig[0] */ = /* ASCII 'P', */ central_hdr_sig[0] = end_central_sig[0] = /* not EBCDIC */ end_centloc64_sig[0] = end_central64_sig[0] = 0x50; local_hdr_sig[1] /* = extd_local_sig[1] */ = /* ASCII 'K', */ central_hdr_sig[1] = end_central_sig[1] = /* not EBCDIC */ end_centloc64_sig[1] = end_central64_sig[1] = 0x4B; /*--------------------------------------------------------------------------- Make sure timezone info is set correctly; localtime() returns GMT on some OSes (e.g., Solaris 2.x) if this isn't done first. The ifdefs around tzset() were initially copied from dos_to_unix_time() in fileio.c. They may still be too strict; any listed OS that supplies tzset(), regardless of whether the function does anything, should be removed from the ifdefs. ---------------------------------------------------------------------------*/ #if (defined(WIN32) && defined(USE_EF_UT_TIME)) /* For the Win32 environment, we may have to "prepare" the environment prior to the tzset() call, to work around tzset() implementation bugs. */ iz_w32_prepareTZenv(); #endif #if (defined(IZ_CHECK_TZ) && defined(USE_EF_UT_TIME)) # ifndef VALID_TIMEZONE # define VALID_TIMEZONE(tmp) \ (((tmp = getenv("TZ")) != NULL) && (*tmp != '\0')) # endif { char *p; G.tz_is_valid = VALID_TIMEZONE(p); # ifndef SFX if (!G.tz_is_valid) { Info(slide, 0x401, ((char *)slide, LoadFarString(WarnInvalidTZ))); error_in_archive = error = PK_WARN; } # endif /* !SFX */ } #endif /* IZ_CHECK_TZ && USE_EF_UT_TIME */ /* For systems that do not have tzset() but supply this function using another name (_tzset() or something similar), an appropiate "#define tzset ..." should be added to the system specifc configuration section. */ #if (!defined(T20_VMS) && !defined(MACOS) && !defined(RISCOS) && !defined(QDOS)) #if (!defined(BSD) && !defined(MTS) && !defined(CMS_MVS) && !defined(TANDEM)) tzset(); #endif #endif /* Initialize UnZip's built-in pseudo hard-coded "ISO <--> OEM" translation, depending on the detected codepage setup. */ #ifdef NEED_ISO_OEM_INIT prepare_ISO_OEM_translat(__G); #endif /*--------------------------------------------------------------------------- Initialize the internal flag holding the mode of processing "overwrite existing file" cases. We do not use the calling interface flags directly because the overwrite mode may be changed by user interaction while processing archive files. Such a change should not affect the option settings as passed through the DLL calling interface. In case of conflicting options, the 'safer' flag uO.overwrite_none takes precedence. ---------------------------------------------------------------------------*/ G.overwrite_mode = (uO.overwrite_none ? OVERWRT_NEVER : (uO.overwrite_all ? OVERWRT_ALWAYS : OVERWRT_QUERY)); /*--------------------------------------------------------------------------- Match (possible) wildcard zipfile specification with existing files and attempt to process each. If no hits, try again after appending ".zip" suffix. If still no luck, give up. ---------------------------------------------------------------------------*/ #ifdef SFX if ((error = do_seekable(__G__ 0)) == PK_NOZIP) { #ifdef EXE_EXTENSION int len=strlen(G.argv0); /* append .exe if appropriate; also .sfx? */ if ( (G.zipfn = (char *)malloc(len+sizeof(EXE_EXTENSION))) != (char *)NULL ) { strcpy(G.zipfn, G.argv0); strcpy(G.zipfn+len, EXE_EXTENSION); error = do_seekable(__G__ 0); free(G.zipfn); G.zipfn = G.argv0; /* for "cannot find myself" message only */ } #endif /* EXE_EXTENSION */ #ifdef WIN32 G.zipfn = G.argv0; /* for "cannot find myself" message only */ #endif } if (error) { if (error == IZ_DIR) error_in_archive = PK_NOZIP; else error_in_archive = error; if (error == PK_NOZIP) Info(slide, 1, ((char *)slide, LoadFarString(CannotFindMyself), G.zipfn)); } #ifdef CHEAP_SFX_AUTORUN if (G.autorun_command[0] && !uO.qflag) { /* NO autorun without prompt! */ Info(slide, 0x81, ((char *)slide, LoadFarString(AutorunPrompt), FnFilter1(G.autorun_command))); if (fgets(G.answerbuf, 9, stdin) != (char *)NULL && toupper(*G.answerbuf) == 'Y') system(G.autorun_command); else Info(slide, 1, ((char *)slide, LoadFarString(NotAutoRunning))); } #endif /* CHEAP_SFX_AUTORUN */ int sfx_app_ret = sfx_app_autorun_now(); #else /* !SFX */ NumWinFiles = NumLoseFiles = NumWarnFiles = 0; NumMissDirs = NumMissFiles = 0; while ((G.zipfn = do_wild(__G__ G.wildzipfn)) != (char *)NULL) { Trace((stderr, "do_wild( %s ) returns %s\n", G.wildzipfn, G.zipfn)); lastzipfn = G.zipfn; /* print a blank line between the output of different zipfiles */ if (!uO.qflag && error != PK_NOZIP && error != IZ_DIR #ifdef TIMESTAMP && (!uO.T_flag || uO.zipinfo_mode) #endif && (NumWinFiles+NumLoseFiles+NumWarnFiles+NumMissFiles) > 0) (*G.message)((zvoid *)&G, (uch *)"\n", 1L, 0); if ((error = do_seekable(__G__ 0)) == PK_WARN) ++NumWarnFiles; else if (error == IZ_DIR) ++NumMissDirs; else if (error == PK_NOZIP) ++NumMissFiles; else if (error != PK_OK) ++NumLoseFiles; else ++NumWinFiles; Trace((stderr, "do_seekable(0) returns %d\n", error)); if (error != IZ_DIR && error > error_in_archive) error_in_archive = error; #ifdef WINDLL if (error == IZ_CTRLC) { free_G_buffers(__G); return error; } #endif } /* end while-loop (wildcard zipfiles) */ if ((NumWinFiles + NumWarnFiles + NumLoseFiles) == 0 && (NumMissDirs + NumMissFiles) == 1 && lastzipfn != (char *)NULL) { #if (!defined(UNIX) && !defined(AMIGA)) /* filenames with wildcard characters */ if (iswild(G.wildzipfn)) { if (iswild(lastzipfn)) { NumMissDirs = NumMissFiles = 0; error_in_archive = PK_COOL; if (uO.qflag < 3) Info(slide, 0x401, ((char *)slide, LoadFarString(CannotFindWildcardMatch), LoadFarStringSmall((uO.zipinfo_mode ? Zipnfo : Unzip)), G.wildzipfn)); } } else #endif { #ifndef VMS /* 2004-11-24 SMS. * VMS has already tried a default file type of ".zip" in * do_wild(), so adding ZSUFX here only causes confusion by * corrupting some valid (though nonexistent) file names. * Complaining below about "fred;4.zip" is unlikely to be * helpful to the victim. */ /* 2005-08-14 Chr. Spieler * Although we already "know" the failure result, we call * do_seekable() again with the same zipfile name (and the * lastchance flag set), just to trigger the error report... */ #if defined(UNIX) || defined(QDOS) char *p = #endif strcpy(lastzipfn + strlen(lastzipfn), ZSUFX); #endif /* !VMS */ G.zipfn = lastzipfn; NumMissDirs = NumMissFiles = 0; error_in_archive = PK_COOL; #if defined(UNIX) || defined(QDOS) /* only Unix has case-sensitive filesystems */ /* Well FlexOS (sometimes) also has them, but support is per media */ /* and a pig to code for, so treat as case insensitive for now */ /* we do this under QDOS to check for .zip as well as _zip */ if ((error = do_seekable(__G__ 0)) == PK_NOZIP || error == IZ_DIR) { if (error == IZ_DIR) ++NumMissDirs; strcpy(p, ALT_ZSUFX); error = do_seekable(__G__ 1); } #else error = do_seekable(__G__ 1); #endif Trace((stderr, "do_seekable(1) returns %d\n", error)); switch (error) { case PK_WARN: ++NumWarnFiles; break; case IZ_DIR: ++NumMissDirs; error = PK_NOZIP; break; case PK_NOZIP: /* increment again => bug: "1 file had no zipfile directory." */ /* ++NumMissFiles */ ; break; default: if (error) ++NumLoseFiles; else ++NumWinFiles; break; } if (error > error_in_archive) error_in_archive = error; #ifdef WINDLL if (error == IZ_CTRLC) { free_G_buffers(__G); return error; } #endif } } #endif /* ?SFX */ /*--------------------------------------------------------------------------- Print summary of all zipfiles, assuming zipfile spec was a wildcard (no need for a summary if just one zipfile). ---------------------------------------------------------------------------*/ #ifndef SFX if (iswild(G.wildzipfn) && uO.qflag < 3 #ifdef TIMESTAMP && !(uO.T_flag && !uO.zipinfo_mode && uO.qflag > 1) #endif ) { if ((NumMissFiles + NumLoseFiles + NumWarnFiles > 0 || NumWinFiles != 1) #ifdef TIMESTAMP && !(uO.T_flag && !uO.zipinfo_mode && uO.qflag) #endif && !(uO.tflag && uO.qflag > 1)) (*G.message)((zvoid *)&G, (uch *)"\n", 1L, 0x401); if ((NumWinFiles > 1) || (NumWinFiles == 1 && NumMissDirs + NumMissFiles + NumLoseFiles + NumWarnFiles > 0)) Info(slide, 0x401, ((char *)slide, LoadFarString(FilesProcessOK), NumWinFiles, (NumWinFiles == 1)? " was" : "s were")); if (NumWarnFiles > 0) Info(slide, 0x401, ((char *)slide, LoadFarString(ArchiveWarning), NumWarnFiles, (NumWarnFiles == 1)? "" : "s")); if (NumLoseFiles > 0) Info(slide, 0x401, ((char *)slide, LoadFarString(ArchiveFatalError), NumLoseFiles, (NumLoseFiles == 1)? "" : "s")); if (NumMissFiles > 0) Info(slide, 0x401, ((char *)slide, LoadFarString(FileHadNoZipfileDir), NumMissFiles, (NumMissFiles == 1)? "" : "s")); if (NumMissDirs == 1) Info(slide, 0x401, ((char *)slide, LoadFarString(ZipfileWasDir))); else if (NumMissDirs > 0) Info(slide, 0x401, ((char *)slide, LoadFarString(ManyZipfilesWereDir), NumMissDirs)); if (NumWinFiles + NumLoseFiles + NumWarnFiles == 0) Info(slide, 0x401, ((char *)slide, LoadFarString(NoZipfileFound))); } #endif /* !SFX */ /* free allocated memory */ free_G_buffers(__G); return sfx_app_ret; } /* end function process_zipfiles() */ /*****************************/ /* Function free_G_buffers() */ /*****************************/ void free_G_buffers(__G) /* releases all memory allocated in global vars */ __GDEF { #ifndef SFX unsigned i; #endif #ifdef SYSTEM_SPECIFIC_DTOR SYSTEM_SPECIFIC_DTOR(__G); #endif inflate_free(__G); checkdir(__G__ (char *)NULL, END); #ifdef DYNALLOC_CRCTAB if (CRC_32_TAB) { free_crc_table(); CRC_32_TAB = NULL; } #endif if (G.key != (char *)NULL) { free(G.key); G.key = (char *)NULL; } if (G.extra_field != (uch *)NULL) { free(G.extra_field); G.extra_field = (uch *)NULL; } #if (!defined(VMS) && !defined(SMALL_MEM)) /* VMS uses its own buffer scheme for textmode flush() */ if (G.outbuf2) { free(G.outbuf2); /* malloc'd ONLY if unshrink and -a */ G.outbuf2 = (uch *)NULL; } #endif if (G.outbuf) free(G.outbuf); if (G.inbuf) free(G.inbuf); G.inbuf = G.outbuf = (uch *)NULL; #ifdef UNICODE_SUPPORT if (G.filename_full) { free(G.filename_full); G.filename_full = (char *)NULL; G.fnfull_bufsize = 0; } #endif /* UNICODE_SUPPORT */ #ifndef SFX for (i = 0; i < DIR_BLKSIZ; i++) { if (G.info[i].cfilname != (char Far *)NULL) { zffree(G.info[i].cfilname); G.info[i].cfilname = (char Far *)NULL; } } #endif #ifdef MALLOC_WORK if (G.area.Slide) { free(G.area.Slide); G.area.Slide = (uch *)NULL; } #endif } /* end function free_G_buffers() */ /**************************/ /* Function do_seekable() */ /**************************/ static int do_seekable(__G__ lastchance) /* return PK-type error code */ __GDEF int lastchance; { #ifndef SFX /* static int no_ecrec = FALSE; SKM: moved to globals.h */ int maybe_exe=FALSE; int too_weird_to_continue=FALSE; #ifdef TIMESTAMP time_t uxstamp; ulg nmember = 0L; #endif #endif int error=0, error_in_archive; /*--------------------------------------------------------------------------- Open the zipfile for reading in BINARY mode to prevent CR/LF translation, which would corrupt the bit streams. ---------------------------------------------------------------------------*/ if (SSTAT(G.zipfn, &G.statbuf) || #ifdef THEOS (error = S_ISLIB(G.statbuf.st_mode)) != 0 || #endif (error = S_ISDIR(G.statbuf.st_mode)) != 0) { #ifndef SFX if (lastchance && (uO.qflag < 3)) { #if defined(UNIX) || defined(QDOS) if (G.no_ecrec) Info(slide, 1, ((char *)slide, LoadFarString(CannotFindZipfileDirMsg), LoadFarStringSmall((uO.zipinfo_mode ? Zipnfo : Unzip)), G.wildzipfn, uO.zipinfo_mode? " " : "", G.wildzipfn, G.zipfn)); else Info(slide, 1, ((char *)slide, LoadFarString(CannotFindEitherZipfile), LoadFarStringSmall((uO.zipinfo_mode ? Zipnfo : Unzip)), G.wildzipfn, G.wildzipfn, G.zipfn)); #else /* !(UNIX || QDOS) */ if (G.no_ecrec) Info(slide, 0x401, ((char *)slide, LoadFarString(CannotFindZipfileDirMsg), LoadFarStringSmall((uO.zipinfo_mode ? Zipnfo : Unzip)), G.wildzipfn, uO.zipinfo_mode? " " : "", G.zipfn)); else #ifdef VMS Info(slide, 0x401, ((char *)slide, LoadFarString(CannotFindEitherZipfile), LoadFarStringSmall((uO.zipinfo_mode ? Zipnfo : Unzip)), G.wildzipfn, (*G.zipfn ? G.zipfn : vms_msg_text()))); #else /* !VMS */ Info(slide, 0x401, ((char *)slide, LoadFarString(CannotFindEitherZipfile), LoadFarStringSmall((uO.zipinfo_mode ? Zipnfo : Unzip)), G.wildzipfn, G.zipfn)); #endif /* ?VMS */ #endif /* ?(UNIX || QDOS) */ } #endif /* !SFX */ return error? IZ_DIR : PK_NOZIP; } G.ziplen = G.statbuf.st_size; #ifndef SFX #if defined(UNIX) || defined(DOS_OS2_W32) || defined(THEOS) if (G.statbuf.st_mode & S_IEXEC) /* no extension on Unix exes: might */ maybe_exe = TRUE; /* find unzip, not unzip.zip; etc. */ #endif #endif /* !SFX */ #ifdef VMS if (check_format(__G)) /* check for variable-length format */ return PK_ERR; #endif if (open_input_file(__G)) /* this should never happen, given */ return PK_NOZIP; /* the stat() test above, but... */ #ifdef DO_SAFECHECK_2GB /* Need more care: Do not trust the size returned by stat() but determine it by reading beyond the end of the file. */ G.ziplen = file_size(G.zipfd); if (G.ziplen == EOF) { Info(slide, 0x401, ((char *)slide, LoadFarString(ZipfileTooBig))); /* printf( " We need a better error message for: 64-bit file, 32-bit program.\n"); */ CLOSE_INFILE(); return IZ_ERRBF; } #endif /* DO_SAFECHECK_2GB */ /*--------------------------------------------------------------------------- Find and process the end-of-central-directory header. UnZip need only check last 65557 bytes of zipfile: comment may be up to 65535, end-of- central-directory record is 18 bytes, and signature itself is 4 bytes; add some to allow for appended garbage. Since ZipInfo is often used as a debugging tool, search the whole zipfile if zipinfo_mode is true. ---------------------------------------------------------------------------*/ G.cur_zipfile_bufstart = 0; G.inptr = G.inbuf; #if ((!defined(WINDLL) && !defined(SFX)) || !defined(NO_ZIPINFO)) # if (!defined(WINDLL) && !defined(SFX)) if ( (!uO.zipinfo_mode && !uO.qflag # ifdef TIMESTAMP && !uO.T_flag # endif ) # ifndef NO_ZIPINFO || (uO.zipinfo_mode && uO.hflag) # endif ) # else /* not (!WINDLL && !SFX) ==> !NO_ZIPINFO !! */ if (uO.zipinfo_mode && uO.hflag) # endif /* if..else..: (!WINDLL && !SFX) */ # ifdef WIN32 /* Win32 console may require codepage conversion for G.zipfn */ Info(slide, 0, ((char *)slide, LoadFarString(LogInitline), FnFilter1(G.zipfn))); # else Info(slide, 0, ((char *)slide, LoadFarString(LogInitline), G.zipfn)); # endif #endif /* (!WINDLL && !SFX) || !NO_ZIPINFO */ if ( (error_in_archive = find_ecrec(__G__ #ifndef NO_ZIPINFO uO.zipinfo_mode ? G.ziplen : #endif MIN(G.ziplen, 66000L))) > PK_WARN ) { CLOSE_INFILE(); #ifdef SFX ++lastchance; /* avoid picky compiler warnings */ return error_in_archive; #else if (maybe_exe) Info(slide, 0x401, ((char *)slide, LoadFarString(MaybeExe), G.zipfn)); if (lastchance) return error_in_archive; else { G.no_ecrec = TRUE; /* assume we found wrong file: e.g., */ return PK_NOZIP; /* unzip instead of unzip.zip */ } #endif /* ?SFX */ } if ((uO.zflag > 0) && !uO.zipinfo_mode) { /* unzip: zflag = comment ONLY */ CLOSE_INFILE(); return error_in_archive; } /*--------------------------------------------------------------------------- Test the end-of-central-directory info for incompatibilities (multi-disk archives) or inconsistencies (missing or extra bytes in zipfile). ---------------------------------------------------------------------------*/ #ifdef NO_MULTIPART error = !uO.zipinfo_mode && (G.ecrec.number_this_disk == 1) && (G.ecrec.num_disk_start_cdir == 1); #else error = !uO.zipinfo_mode && (G.ecrec.number_this_disk != 0); #endif #ifndef SFX if (uO.zipinfo_mode && G.ecrec.number_this_disk != G.ecrec.num_disk_start_cdir) { if (G.ecrec.number_this_disk > G.ecrec.num_disk_start_cdir) { Info(slide, 0x401, ((char *)slide, LoadFarString(CentDirNotInZipMsg), G.zipfn, (ulg)G.ecrec.number_this_disk, (ulg)G.ecrec.num_disk_start_cdir)); error_in_archive = PK_FIND; too_weird_to_continue = TRUE; } else { Info(slide, 0x401, ((char *)slide, LoadFarString(EndCentDirBogus), G.zipfn, (ulg)G.ecrec.number_this_disk, (ulg)G.ecrec.num_disk_start_cdir)); error_in_archive = PK_WARN; } #ifdef NO_MULTIPART /* concatenation of multiple parts works in some cases */ } else if (!uO.zipinfo_mode && !error && G.ecrec.number_this_disk != 0) { Info(slide, 0x401, ((char *)slide, LoadFarString(NoMultiDiskArcSupport), G.zipfn)); error_in_archive = PK_FIND; too_weird_to_continue = TRUE; #endif } if (!too_weird_to_continue) { /* (relatively) normal zipfile: go for it */ if (error) { Info(slide, 0x401, ((char *)slide, LoadFarString(MaybePakBug), G.zipfn)); error_in_archive = PK_WARN; } #endif /* !SFX */ if ((G.extra_bytes = G.real_ecrec_offset-G.expect_ecrec_offset) < (zoff_t)0) { Info(slide, 0x401, ((char *)slide, LoadFarString(MissingBytes), G.zipfn, FmZofft((-G.extra_bytes), NULL, NULL))); error_in_archive = PK_ERR; } else if (G.extra_bytes > 0) { if ((G.ecrec.offset_start_central_directory == 0) && (G.ecrec.size_central_directory != 0)) /* zip 1.5 -go bug */ { Info(slide, 0x401, ((char *)slide, LoadFarString(NullCentDirOffset), G.zipfn)); G.ecrec.offset_start_central_directory = G.extra_bytes; G.extra_bytes = 0; error_in_archive = PK_ERR; } #ifndef SFX else { Info(slide, 0x401, ((char *)slide, LoadFarString(ExtraBytesAtStart), G.zipfn, FmZofft(G.extra_bytes, NULL, NULL), (G.extra_bytes == 1)? "":"s")); error_in_archive = PK_WARN; } #endif /* !SFX */ } /*----------------------------------------------------------------------- Check for empty zipfile and exit now if so. -----------------------------------------------------------------------*/ if (G.expect_ecrec_offset==0L && G.ecrec.size_central_directory==0) { if (uO.zipinfo_mode) Info(slide, 0, ((char *)slide, "%sEmpty zipfile.\n", uO.lflag>9? "\n " : "")); else Info(slide, 0x401, ((char *)slide, LoadFarString(ZipfileEmpty), G.zipfn)); CLOSE_INFILE(); return (error_in_archive > PK_WARN)? error_in_archive : PK_WARN; } /*----------------------------------------------------------------------- Compensate for missing or extra bytes, and seek to where the start of central directory should be. If header not found, uncompensate and try again (necessary for at least some Atari archives created with STZip, as well as archives created by J.H. Holm's ZIPSPLIT 1.1). -----------------------------------------------------------------------*/ error = seek_zipf(__G__ G.ecrec.offset_start_central_directory); if (error == PK_BADERR) { CLOSE_INFILE(); return PK_BADERR; } #ifdef OLD_SEEK_TEST if (error != PK_OK || readbuf(__G__ G.sig, 4) == 0) { CLOSE_INFILE(); return PK_ERR; /* file may be locked, or possibly disk error(?) */ } if (memcmp(G.sig, central_hdr_sig, 4)) #else if ((error != PK_OK) || (readbuf(__G__ G.sig, 4) == 0) || memcmp(G.sig, central_hdr_sig, 4)) #endif { #ifndef SFX zoff_t tmp = G.extra_bytes; #endif G.extra_bytes = 0; error = seek_zipf(__G__ G.ecrec.offset_start_central_directory); if ((error != PK_OK) || (readbuf(__G__ G.sig, 4) == 0) || memcmp(G.sig, central_hdr_sig, 4)) { if (error != PK_BADERR) Info(slide, 0x401, ((char *)slide, LoadFarString(CentDirStartNotFound), G.zipfn, LoadFarStringSmall(ReportMsg))); CLOSE_INFILE(); return (error != PK_OK ? error : PK_BADERR); } #ifndef SFX Info(slide, 0x401, ((char *)slide, LoadFarString(CentDirTooLong), G.zipfn, FmZofft((-tmp), NULL, NULL))); #endif error_in_archive = PK_ERR; } /*----------------------------------------------------------------------- Seek to the start of the central directory one last time, since we have just read the first entry's signature bytes; then list, extract or test member files as instructed, and close the zipfile. -----------------------------------------------------------------------*/ error = seek_zipf(__G__ G.ecrec.offset_start_central_directory); if (error != PK_OK) { CLOSE_INFILE(); return error; } Trace((stderr, "about to extract/list files (error = %d)\n", error_in_archive)); #ifdef DLL /* G.fValidate is used only to look at an archive to see if it appears to be a valid archive. There is no interest in what the archive contains, nor in validating that the entries in the archive are in good condition. This is currently used only in the Windows DLLs for purposes of checking archives within an archive to determine whether or not to display the inner archives. */ if (!G.fValidate) #endif { #ifndef NO_ZIPINFO if (uO.zipinfo_mode) error = zipinfo(__G); /* ZIPINFO 'EM */ else #endif #ifndef SFX #ifdef TIMESTAMP if (uO.T_flag) error = get_time_stamp(__G__ &uxstamp, &nmember); else #endif if (uO.vflag && !uO.tflag && !uO.cflag) error = list_files(__G); /* LIST 'EM */ else #endif /* !SFX */ error = extract_or_test_files(__G); /* EXTRACT OR TEST 'EM */ Trace((stderr, "done with extract/list files (error = %d)\n", error)); } if (error > error_in_archive) /* don't overwrite stronger error */ error_in_archive = error; /* with (for example) a warning */ #ifndef SFX } /* end if (!too_weird_to_continue) */ #endif CLOSE_INFILE(); #ifdef TIMESTAMP if (uO.T_flag && !uO.zipinfo_mode && (nmember > 0L)) { # ifdef WIN32 if (stamp_file(__G__ G.zipfn, uxstamp)) { /* TIME-STAMP 'EM */ # else if (stamp_file(G.zipfn, uxstamp)) { /* TIME-STAMP 'EM */ # endif if (uO.qflag < 3) Info(slide, 0x201, ((char *)slide, LoadFarString(ZipTimeStampFailed), G.zipfn)); if (error_in_archive < PK_WARN) error_in_archive = PK_WARN; } else { if (!uO.qflag) Info(slide, 0, ((char *)slide, LoadFarString(ZipTimeStampSuccess), G.zipfn)); } } #endif return error_in_archive; } /* end function do_seekable() */ #ifdef DO_SAFECHECK_2GB /************************/ /* Function file_size() */ /************************/ /* File size determination which does not mislead for large files in a small-file program. Probably should be somewhere else. The file has to be opened previously */ #ifdef USE_STRM_INPUT static zoff_t file_size(file) FILE *file; { int sts; size_t siz; #else /* !USE_STRM_INPUT */ static zoff_t file_size(fh) int fh; { int siz; #endif /* ?USE_STRM_INPUT */ zoff_t ofs; char waste[4]; #ifdef USE_STRM_INPUT /* Seek to actual EOF. */ sts = zfseeko(file, 0, SEEK_END); if (sts != 0) { /* fseeko() failed. (Unlikely.) */ ofs = EOF; } else { /* Get apparent offset at EOF. */ ofs = zftello(file); if (ofs < 0) { /* Offset negative (overflow). File too big. */ ofs = EOF; } else { /* Seek to apparent EOF offset. Won't be at actual EOF if offset was truncated. */ sts = zfseeko(file, ofs, SEEK_SET); if (sts != 0) { /* fseeko() failed. (Unlikely.) */ ofs = EOF; } else { /* Read a byte at apparent EOF. Should set EOF flag. */ siz = fread(waste, 1, 1, file); if (feof(file) == 0) { /* Not at EOF, but should be. File too big. */ ofs = EOF; } } } } #else /* !USE_STRM_INPUT */ /* Seek to actual EOF. */ ofs = zlseek(fh, 0, SEEK_END); if (ofs == (zoff_t) -1) { /* zlseek() failed. (Unlikely.) */ ofs = EOF; } else if (ofs < 0) { /* Offset negative (overflow). File too big. */ ofs = EOF; } else { /* Seek to apparent EOF offset. Won't be at actual EOF if offset was truncated. */ ofs = zlseek(fh, ofs, SEEK_SET); if (ofs == (zoff_t) -1) { /* zlseek() failed. (Unlikely.) */ ofs = EOF; } else { /* Read a byte at apparent EOF. Should set EOF flag. */ siz = read(fh, waste, 1); if (siz != 0) { /* Not at EOF, but should be. File too big. */ ofs = EOF; } } } #endif /* ?USE_STRM_INPUT */ return ofs; } /* end function file_size() */ #endif /* DO_SAFECHECK_2GB */ /***********************/ /* Function rec_find() */ /***********************/ static int rec_find(__G__ searchlen, signature, rec_size) /* return 0 when rec found, 1 when not found, 2 in case of read error */ __GDEF zoff_t searchlen; char* signature; int rec_size; { int i, numblks, found=FALSE; zoff_t tail_len; /*--------------------------------------------------------------------------- Zipfile is longer than INBUFSIZ: may need to loop. Start with short block at end of zipfile (if not TOO short). ---------------------------------------------------------------------------*/ if ((tail_len = G.ziplen % INBUFSIZ) > rec_size) { #ifdef USE_STRM_INPUT zfseeko(G.zipfd, G.ziplen-tail_len, SEEK_SET); G.cur_zipfile_bufstart = zftello(G.zipfd); #else /* !USE_STRM_INPUT */ G.cur_zipfile_bufstart = zlseek(G.zipfd, G.ziplen-tail_len, SEEK_SET); #endif /* ?USE_STRM_INPUT */ if ((G.incnt = read(G.zipfd, (char *)G.inbuf, (unsigned int)tail_len)) != (int)tail_len) return 2; /* it's expedient... */ /* 'P' must be at least (rec_size+4) bytes from end of zipfile */ for (G.inptr = G.inbuf+(int)tail_len-(rec_size+4); G.inptr >= G.inbuf; --G.inptr) { if ( (*G.inptr == (uch)0x50) && /* ASCII 'P' */ !memcmp((char *)G.inptr, signature, 4) ) { G.incnt -= (int)(G.inptr - G.inbuf); found = TRUE; break; } } /* sig may span block boundary: */ memcpy((char *)G.hold, (char *)G.inbuf, 3); } else G.cur_zipfile_bufstart = G.ziplen - tail_len; /*----------------------------------------------------------------------- Loop through blocks of zipfile data, starting at the end and going toward the beginning. In general, need not check whole zipfile for signature, but may want to do so if testing. -----------------------------------------------------------------------*/ numblks = (int)((searchlen - tail_len + (INBUFSIZ-1)) / INBUFSIZ); /* ==amount= ==done== ==rounding== =blksiz= */ for (i = 1; !found && (i <= numblks); ++i) { G.cur_zipfile_bufstart -= INBUFSIZ; #ifdef USE_STRM_INPUT zfseeko(G.zipfd, G.cur_zipfile_bufstart, SEEK_SET); #else /* !USE_STRM_INPUT */ zlseek(G.zipfd, G.cur_zipfile_bufstart, SEEK_SET); #endif /* ?USE_STRM_INPUT */ if ((G.incnt = read(G.zipfd,(char *)G.inbuf,INBUFSIZ)) != INBUFSIZ) return 2; /* read error is fatal failure */ for (G.inptr = G.inbuf+INBUFSIZ-1; G.inptr >= G.inbuf; --G.inptr) if ( (*G.inptr == (uch)0x50) && /* ASCII 'P' */ !memcmp((char *)G.inptr, signature, 4) ) { G.incnt -= (int)(G.inptr - G.inbuf); found = TRUE; break; } /* sig may span block boundary: */ memcpy((char *)G.hold, (char *)G.inbuf, 3); } return (found ? 0 : 1); } /* end function rec_find() */ #if 0 /********************************/ /* Function check_ecrec_zip64() */ /********************************/ static int check_ecrec_zip64(__G) __GDEF { return G.ecrec.offset_start_central_directory == 0xFFFFFFFFL || G.ecrec.size_central_directory == 0xFFFFFFFFL || G.ecrec.total_entries_central_dir == 0xFFFF || G.ecrec.num_entries_centrl_dir_ths_disk == 0xFFFF || G.ecrec.num_disk_start_cdir == 0xFFFF || G.ecrec.number_this_disk == 0xFFFF; } /* end function check_ecrec_zip64() */ #endif /* never */ /***************************/ /* Function find_ecrec64() */ /***************************/ static int find_ecrec64(__G__ searchlen) /* return PK-class error */ __GDEF zoff_t searchlen; { ec_byte_rec64 byterec; /* buf for ecrec64 */ ec_byte_loc64 byterecL; /* buf for ecrec64 locator */ zoff_t ecloc64_start_offset; /* start offset of ecrec64 locator */ zusz_t ecrec64_start_offset; /* start offset of ecrec64 */ zuvl_t ecrec64_start_disk; /* start disk of ecrec64 */ zuvl_t ecloc64_total_disks; /* total disks */ zuvl_t ecrec64_disk_cdstart; /* disk number of central dir start */ zucn_t ecrec64_this_entries; /* entries on disk with ecrec64 */ zucn_t ecrec64_tot_entries; /* total number of entries */ zusz_t ecrec64_cdirsize; /* length of central dir */ zusz_t ecrec64_offs_cdstart; /* offset of central dir start */ /* First, find the ecrec64 locator. By definition, this must be before ecrec with nothing in between. We back up the size of the ecrec64 locator and check. */ ecloc64_start_offset = G.real_ecrec_offset - (ECLOC64_SIZE+4); if (ecloc64_start_offset < 0) /* Seeking would go past beginning, so probably empty archive */ return PK_COOL; #ifdef USE_STRM_INPUT zfseeko(G.zipfd, ecloc64_start_offset, SEEK_SET); G.cur_zipfile_bufstart = zftello(G.zipfd); #else /* !USE_STRM_INPUT */ G.cur_zipfile_bufstart = zlseek(G.zipfd, ecloc64_start_offset, SEEK_SET); #endif /* ?USE_STRM_INPUT */ if ((G.incnt = read(G.zipfd, (char *)byterecL, ECLOC64_SIZE+4)) != (ECLOC64_SIZE+4)) { if (uO.qflag || uO.zipinfo_mode) Info(slide, 0x401, ((char *)slide, "[%s]\n", G.zipfn)); Info(slide, 0x401, ((char *)slide, LoadFarString(Cent64EndSigSearchErr))); return PK_ERR; } if (memcmp((char *)byterecL, end_centloc64_sig, 4) ) { /* not found */ return PK_COOL; } /* Read the locator. */ ecrec64_start_disk = (zuvl_t)makelong(&byterecL[NUM_DISK_START_EOCDR64]); ecrec64_start_offset = (zusz_t)makeint64(&byterecL[OFFSET_START_EOCDR64]); ecloc64_total_disks = (zuvl_t)makelong(&byterecL[NUM_THIS_DISK_LOC64]); /* Check for consistency */ #ifdef TEST fprintf(stdout,"\nnumber of disks (ECR) %u, (ECLOC64) %lu\n", G.ecrec.number_this_disk, ecloc64_total_disks); fflush(stdout); #endif if ((G.ecrec.number_this_disk != 0xFFFF) && (G.ecrec.number_this_disk != ecloc64_total_disks - 1)) { /* Note: For some unknown reason, the developers at PKWARE decided to store the "zip64 total disks" value as a counter starting from 1, whereas all other "split/span volume" related fields use 0-based volume numbers. Sigh... */ /* When the total number of disks as found in the traditional ecrec is not 0xFFFF, the disk numbers in ecrec and ecloc64 must match. When this is not the case, the found ecrec64 locator cannot be valid. -> This is not a Zip64 archive. */ Trace((stderr, "\ninvalid ECLOC64, differing disk# (ECR %u, ECL64 %lu)\n", G.ecrec.number_this_disk, ecloc64_total_disks - 1)); return PK_COOL; } /* If found locator, look for ecrec64 where the locator says it is. */ /* For now assume that ecrec64 is on the same disk as ecloc64 and ecrec, which is usually the case and is how Zip writes it. To do this right, however, we should allow the ecrec64 to be on another disk since the AppNote allows it and the ecrec64 can be large, especially if Version 2 is used (AppNote uses 8 bytes for the size of this record). */ /* FIX BELOW IF ADD SUPPORT FOR MULTIPLE DISKS */ if (ecrec64_start_offset > (zusz_t)ecloc64_start_offset) { /* ecrec64 has to be before ecrec64 locator */ if (uO.qflag || uO.zipinfo_mode) Info(slide, 0x401, ((char *)slide, "[%s]\n", G.zipfn)); Info(slide, 0x401, ((char *)slide, LoadFarString(Cent64EndSigSearchErr))); return PK_ERR; } #ifdef USE_STRM_INPUT zfseeko(G.zipfd, ecrec64_start_offset, SEEK_SET); G.cur_zipfile_bufstart = zftello(G.zipfd); #else /* !USE_STRM_INPUT */ G.cur_zipfile_bufstart = zlseek(G.zipfd, ecrec64_start_offset, SEEK_SET); #endif /* ?USE_STRM_INPUT */ if ((G.incnt = read(G.zipfd, (char *)byterec, ECREC64_SIZE+4)) != (ECREC64_SIZE+4)) { if (uO.qflag || uO.zipinfo_mode) Info(slide, 0x401, ((char *)slide, "[%s]\n", G.zipfn)); Info(slide, 0x401, ((char *)slide, LoadFarString(Cent64EndSigSearchErr))); return PK_ERR; } if (memcmp((char *)byterec, end_central64_sig, 4) ) { /* Zip64 EOCD Record not found */ /* Since we already have seen the Zip64 EOCD Locator, it's possible we got here because there are bytes prepended to the archive, like the sfx prefix. */ /* Make a guess as to where the Zip64 EOCD Record might be */ ecrec64_start_offset = ecloc64_start_offset - ECREC64_SIZE - 4; #ifdef USE_STRM_INPUT zfseeko(G.zipfd, ecrec64_start_offset, SEEK_SET); G.cur_zipfile_bufstart = zftello(G.zipfd); #else /* !USE_STRM_INPUT */ G.cur_zipfile_bufstart = zlseek(G.zipfd, ecrec64_start_offset, SEEK_SET); #endif /* ?USE_STRM_INPUT */ if ((G.incnt = read(G.zipfd, (char *)byterec, ECREC64_SIZE+4)) != (ECREC64_SIZE+4)) { if (uO.qflag || uO.zipinfo_mode) Info(slide, 0x401, ((char *)slide, "[%s]\n", G.zipfn)); Info(slide, 0x401, ((char *)slide, LoadFarString(Cent64EndSigSearchErr))); return PK_ERR; } if (memcmp((char *)byterec, end_central64_sig, 4) ) { /* Zip64 EOCD Record not found */ /* Probably something not so easy to handle so exit */ if (uO.qflag || uO.zipinfo_mode) Info(slide, 0x401, ((char *)slide, "[%s]\n", G.zipfn)); Info(slide, 0x401, ((char *)slide, LoadFarString(Cent64EndSigSearchErr))); return PK_ERR; } if (uO.qflag || uO.zipinfo_mode) Info(slide, 0x401, ((char *)slide, "[%s]\n", G.zipfn)); Info(slide, 0x401, ((char *)slide, LoadFarString(Cent64EndSigSearchOff))); } /* Check consistency of found ecrec64 with ecloc64 (and ecrec): */ if ( (zuvl_t)makelong(&byterec[NUMBER_THIS_DSK_REC64]) != ecrec64_start_disk ) /* found ecrec64 does not match ecloc64 info -> no Zip64 archive */ return PK_COOL; /* Read all relevant ecrec64 fields and compare them to the corresponding ecrec fields unless those are set to "all-ones". */ ecrec64_disk_cdstart = (zuvl_t)makelong(&byterec[NUM_DISK_START_CEN_DIR64]); if ( (G.ecrec.num_disk_start_cdir != 0xFFFF) && (G.ecrec.num_disk_start_cdir != ecrec64_disk_cdstart) ) return PK_COOL; ecrec64_this_entries = makeint64(&byterec[NUM_ENTRIES_CEN_DIR_THS_DISK64]); if ( (G.ecrec.num_entries_centrl_dir_ths_disk != 0xFFFF) && (G.ecrec.num_entries_centrl_dir_ths_disk != ecrec64_this_entries) ) return PK_COOL; ecrec64_tot_entries = makeint64(&byterec[TOTAL_ENTRIES_CENTRAL_DIR64]); if ( (G.ecrec.total_entries_central_dir != 0xFFFF) && (G.ecrec.total_entries_central_dir != ecrec64_tot_entries) ) return PK_COOL; ecrec64_cdirsize = makeint64(&byterec[SIZE_CENTRAL_DIRECTORY64]); if ( (G.ecrec.size_central_directory != 0xFFFFFFFFL) && (G.ecrec.size_central_directory != ecrec64_cdirsize) ) return PK_COOL; ecrec64_offs_cdstart = makeint64(&byterec[OFFSET_START_CENTRAL_DIRECT64]); if ( (G.ecrec.offset_start_central_directory != 0xFFFFFFFFL) && (G.ecrec.offset_start_central_directory != ecrec64_offs_cdstart) ) return PK_COOL; /* Now, we are (almost) sure that we have a Zip64 archive. */ G.ecrec.have_ecr64 = 1; /* Update the "end-of-central-dir offset" for later checks. */ G.real_ecrec_offset = ecrec64_start_offset; /* Update all ecdir_rec data that are flagged to be invalid in Zip64 mode. Set the ecrec64-mandatory flag when such a case is found. */ if (G.ecrec.number_this_disk == 0xFFFF) { G.ecrec.number_this_disk = ecrec64_start_disk; if (ecrec64_start_disk != 0xFFFF) G.ecrec.is_zip64_archive = TRUE; } if (G.ecrec.num_disk_start_cdir == 0xFFFF) { G.ecrec.num_disk_start_cdir = ecrec64_disk_cdstart; if (ecrec64_disk_cdstart != 0xFFFF) G.ecrec.is_zip64_archive = TRUE; } if (G.ecrec.num_entries_centrl_dir_ths_disk == 0xFFFF) { G.ecrec.num_entries_centrl_dir_ths_disk = ecrec64_this_entries; if (ecrec64_this_entries != 0xFFFF) G.ecrec.is_zip64_archive = TRUE; } if (G.ecrec.total_entries_central_dir == 0xFFFF) { G.ecrec.total_entries_central_dir = ecrec64_tot_entries; if (ecrec64_tot_entries != 0xFFFF) G.ecrec.is_zip64_archive = TRUE; } if (G.ecrec.size_central_directory == 0xFFFFFFFFL) { G.ecrec.size_central_directory = ecrec64_cdirsize; if (ecrec64_cdirsize != 0xFFFFFFFF) G.ecrec.is_zip64_archive = TRUE; } if (G.ecrec.offset_start_central_directory == 0xFFFFFFFFL) { G.ecrec.offset_start_central_directory = ecrec64_offs_cdstart; if (ecrec64_offs_cdstart != 0xFFFFFFFF) G.ecrec.is_zip64_archive = TRUE; } return PK_COOL; } /* end function find_ecrec64() */ /*************************/ /* Function find_ecrec() */ /*************************/ static int find_ecrec(__G__ searchlen) /* return PK-class error */ __GDEF zoff_t searchlen; { int found = FALSE; int error_in_archive; int result; ec_byte_rec byterec; /*--------------------------------------------------------------------------- Treat case of short zipfile separately. ---------------------------------------------------------------------------*/ if (G.ziplen <= INBUFSIZ) { #ifdef USE_STRM_INPUT zfseeko(G.zipfd, 0L, SEEK_SET); #else /* !USE_STRM_INPUT */ zlseek(G.zipfd, 0L, SEEK_SET); #endif /* ?USE_STRM_INPUT */ if ((G.incnt = read(G.zipfd,(char *)G.inbuf,(unsigned int)G.ziplen)) == (int)G.ziplen) /* 'P' must be at least (ECREC_SIZE+4) bytes from end of zipfile */ for (G.inptr = G.inbuf+(int)G.ziplen-(ECREC_SIZE+4); G.inptr >= G.inbuf; --G.inptr) { if ( (*G.inptr == (uch)0x50) && /* ASCII 'P' */ !memcmp((char *)G.inptr, end_central_sig, 4)) { G.incnt -= (int)(G.inptr - G.inbuf); found = TRUE; break; } } /*--------------------------------------------------------------------------- Zipfile is longer than INBUFSIZ: MB - this next block of code moved to rec_find so that same code can be used to look for zip64 ec record. No need to include code above since a zip64 ec record will only be looked for if it is a BIG file. ---------------------------------------------------------------------------*/ } else { found = (rec_find(__G__ searchlen, end_central_sig, ECREC_SIZE) == 0 ? TRUE : FALSE); } /* end if (ziplen > INBUFSIZ) */ /*--------------------------------------------------------------------------- Searched through whole region where signature should be without finding it. Print informational message and die a horrible death. ---------------------------------------------------------------------------*/ if (!found) { if (uO.qflag || uO.zipinfo_mode) Info(slide, 0x401, ((char *)slide, "[%s]\n", G.zipfn)); Info(slide, 0x401, ((char *)slide, LoadFarString(CentDirEndSigNotFound))); return PK_ERR; /* failed */ } /*--------------------------------------------------------------------------- Found the signature, so get the end-central data before returning. Do any necessary machine-type conversions (byte ordering, structure padding compensation) by reading data into character array and copying to struct. ---------------------------------------------------------------------------*/ G.real_ecrec_offset = G.cur_zipfile_bufstart + (G.inptr-G.inbuf); #ifdef TEST printf("\n found end-of-central-dir signature at offset %s (%sh)\n", FmZofft(G.real_ecrec_offset, NULL, NULL), FmZofft(G.real_ecrec_offset, FZOFFT_HEX_DOT_WID, "X")); printf(" from beginning of file; offset %d (%.4Xh) within block\n", G.inptr-G.inbuf, G.inptr-G.inbuf); #endif if (readbuf(__G__ (char *)byterec, ECREC_SIZE+4) == 0) return PK_EOF; G.ecrec.number_this_disk = makeword(&byterec[NUMBER_THIS_DISK]); G.ecrec.num_disk_start_cdir = makeword(&byterec[NUM_DISK_WITH_START_CEN_DIR]); G.ecrec.num_entries_centrl_dir_ths_disk = makeword(&byterec[NUM_ENTRIES_CEN_DIR_THS_DISK]); G.ecrec.total_entries_central_dir = makeword(&byterec[TOTAL_ENTRIES_CENTRAL_DIR]); G.ecrec.size_central_directory = makelong(&byterec[SIZE_CENTRAL_DIRECTORY]); G.ecrec.offset_start_central_directory = makelong(&byterec[OFFSET_START_CENTRAL_DIRECTORY]); G.ecrec.zipfile_comment_length = makeword(&byterec[ZIPFILE_COMMENT_LENGTH]); /* Now, we have to read the archive comment, BEFORE the file pointer is moved away backwards to seek for a Zip64 ECLOC64 structure. */ if ( (error_in_archive = process_zip_cmmnt(__G)) > PK_WARN ) return error_in_archive; /* Next: Check for existence of Zip64 end-of-cent-dir locator ECLOC64. This structure must reside on the same volume as the classic ECREC, at exactly (ECLOC64_SIZE+4) bytes in front of the ECREC. The ECLOC64 structure directs to the longer ECREC64 structure A ECREC64 will ALWAYS exist for a proper Zip64 archive, as the "Version Needed To Extract" field is required to be set to 4.5 or higher whenever any Zip64 features are used anywhere in the archive, so just check for that to see if this is a Zip64 archive. */ result = find_ecrec64(__G__ searchlen+76); /* 76 bytes for zip64ec & zip64 locator */ if (result != PK_COOL) { if (error_in_archive < result) error_in_archive = result; return error_in_archive; } G.expect_ecrec_offset = G.ecrec.offset_start_central_directory + G.ecrec.size_central_directory; #ifndef NO_ZIPINFO if (uO.zipinfo_mode) { /* In ZipInfo mode, additional info about the data found in the end-of-central-directory areas is printed out. */ zi_end_central(__G); } #endif return error_in_archive; } /* end function find_ecrec() */ /********************************/ /* Function process_zip_cmmnt() */ /********************************/ static int process_zip_cmmnt(__G) /* return PK-type error code */ __GDEF { int error = PK_COOL; /*--------------------------------------------------------------------------- Get the zipfile comment (up to 64KB long), if any, and print it out. ---------------------------------------------------------------------------*/ #ifdef WINDLL /* for comment button: */ if ((!G.fValidate) && (G.lpUserFunctions != NULL)) G.lpUserFunctions->cchComment = G.ecrec.zipfile_comment_length; #endif /* WINDLL */ #ifndef NO_ZIPINFO /* ZipInfo, verbose format */ if (uO.zipinfo_mode && uO.lflag > 9) { /*------------------------------------------------------------------- Get the zipfile comment, if any, and print it out. (Comment may be up to 64KB long. May the fleas of a thousand camels infest the arm-pits of anyone who actually takes advantage of this fact.) -------------------------------------------------------------------*/ if (!G.ecrec.zipfile_comment_length) Info(slide, 0, ((char *)slide, LoadFarString(NoZipfileComment))); else { Info(slide, 0, ((char *)slide, LoadFarString(ZipfileCommentDesc), G.ecrec.zipfile_comment_length)); Info(slide, 0, ((char *)slide, LoadFarString(ZipfileCommBegin))); if (do_string(__G__ G.ecrec.zipfile_comment_length, DISPLAY)) error = PK_WARN; Info(slide, 0, ((char *)slide, LoadFarString(ZipfileCommEnd))); if (error) Info(slide, 0, ((char *)slide, LoadFarString(ZipfileCommTrunc2))); } /* endif (comment exists) */ /* ZipInfo, non-verbose mode: print zipfile comment only if requested */ } else if (G.ecrec.zipfile_comment_length && (uO.zflag > 0) && uO.zipinfo_mode) { if (do_string(__G__ G.ecrec.zipfile_comment_length, DISPLAY)) { Info(slide, 0x401, ((char *)slide, LoadFarString(ZipfileCommTrunc1))); error = PK_WARN; } } else #endif /* !NO_ZIPINFO */ if ( G.ecrec.zipfile_comment_length && (uO.zflag > 0 #ifndef WINDLL || (uO.zflag == 0 # ifndef NO_ZIPINFO && !uO.zipinfo_mode # endif # ifdef TIMESTAMP && !uO.T_flag # endif && !uO.qflag) #endif /* !WINDLL */ ) ) { if (do_string(__G__ G.ecrec.zipfile_comment_length, #if (defined(SFX) && defined(CHEAP_SFX_AUTORUN)) # ifndef NO_ZIPINFO (oU.zipinfo_mode ? DISPLAY : CHECK_AUTORUN) # else CHECK_AUTORUN # endif #else DISPLAY #endif )) { Info(slide, 0x401, ((char *)slide, LoadFarString(ZipfileCommTrunc1))); error = PK_WARN; } } #if (defined(SFX) && defined(CHEAP_SFX_AUTORUN)) else if (G.ecrec.zipfile_comment_length) { if (do_string(__G__ G.ecrec.zipfile_comment_length, CHECK_AUTORUN_Q)) { Info(slide, 0x401, ((char *)slide, LoadFarString(ZipfileCommTrunc1))); error = PK_WARN; } } #endif return error; } /* end function process_zip_cmmnt() */ /************************************/ /* Function process_cdir_file_hdr() */ /************************************/ int process_cdir_file_hdr(__G) /* return PK-type error code */ __GDEF { int error; /*--------------------------------------------------------------------------- Get central directory info, save host and method numbers, and set flag for lowercase conversion of filename, depending on the OS from which the file is coming. ---------------------------------------------------------------------------*/ if ((error = get_cdir_ent(__G)) != 0) return error; G.pInfo->hostver = G.crec.version_made_by[0]; G.pInfo->hostnum = MIN(G.crec.version_made_by[1], NUM_HOSTS); /* extnum = MIN(crec.version_needed_to_extract[1], NUM_HOSTS); */ G.pInfo->lcflag = 0; if (uO.L_flag == 1) /* name conversion for monocase systems */ switch (G.pInfo->hostnum) { case FS_FAT_: /* PKZIP and zip -k store in uppercase */ case CPM_: /* like MS-DOS, right? */ case VM_CMS_: /* all caps? */ case MVS_: /* all caps? */ case TANDEM_: case TOPS20_: case VMS_: /* our Zip uses lowercase, but ASi's doesn't */ /* case Z_SYSTEM_: ? */ /* case QDOS_: ? */ G.pInfo->lcflag = 1; /* convert filename to lowercase */ break; default: /* AMIGA_, FS_HPFS_, FS_NTFS_, MAC_, UNIX_, ATARI_, */ break; /* FS_VFAT_, ATHEOS_, BEOS_ (Z_SYSTEM_), THEOS_: */ /* no conversion */ } else if (uO.L_flag > 1) /* let -LL force lower case for all names */ G.pInfo->lcflag = 1; /* do Amigas (AMIGA_) also have volume labels? */ if (IS_VOLID(G.crec.external_file_attributes) && (G.pInfo->hostnum == FS_FAT_ || G.pInfo->hostnum == FS_HPFS_ || G.pInfo->hostnum == FS_NTFS_ || G.pInfo->hostnum == ATARI_)) { G.pInfo->vollabel = TRUE; G.pInfo->lcflag = 0; /* preserve case of volume labels */ } else G.pInfo->vollabel = FALSE; /* this flag is needed to detect archives made by "PKZIP for Unix" when deciding which kind of codepage conversion has to be applied to strings (see do_string() function in fileio.c) */ G.pInfo->HasUxAtt = (G.crec.external_file_attributes & 0xffff0000L) != 0L; #ifdef UNICODE_SUPPORT /* remember the state of GPB11 (General Purpuse Bit 11) which indicates that the standard path and comment are UTF-8. */ G.pInfo->GPFIsUTF8 = (G.crec.general_purpose_bit_flag & (1 << 11)) == (1 << 11); #endif return PK_COOL; } /* end function process_cdir_file_hdr() */ /***************************/ /* Function get_cdir_ent() */ /***************************/ static int get_cdir_ent(__G) /* return PK-type error code */ __GDEF { cdir_byte_hdr byterec; /*--------------------------------------------------------------------------- Read the next central directory entry and do any necessary machine-type conversions (byte ordering, structure padding compensation--do so by copying the data from the array into which it was read (byterec) to the usable struct (crec)). ---------------------------------------------------------------------------*/ if (readbuf(__G__ (char *)byterec, CREC_SIZE) == 0) return PK_EOF; G.crec.version_made_by[0] = byterec[C_VERSION_MADE_BY_0]; G.crec.version_made_by[1] = byterec[C_VERSION_MADE_BY_1]; G.crec.version_needed_to_extract[0] = byterec[C_VERSION_NEEDED_TO_EXTRACT_0]; G.crec.version_needed_to_extract[1] = byterec[C_VERSION_NEEDED_TO_EXTRACT_1]; G.crec.general_purpose_bit_flag = makeword(&byterec[C_GENERAL_PURPOSE_BIT_FLAG]); G.crec.compression_method = makeword(&byterec[C_COMPRESSION_METHOD]); G.crec.last_mod_dos_datetime = makelong(&byterec[C_LAST_MOD_DOS_DATETIME]); G.crec.crc32 = makelong(&byterec[C_CRC32]); G.crec.csize = makelong(&byterec[C_COMPRESSED_SIZE]); G.crec.ucsize = makelong(&byterec[C_UNCOMPRESSED_SIZE]); G.crec.filename_length = makeword(&byterec[C_FILENAME_LENGTH]); G.crec.extra_field_length = makeword(&byterec[C_EXTRA_FIELD_LENGTH]); G.crec.file_comment_length = makeword(&byterec[C_FILE_COMMENT_LENGTH]); G.crec.disk_number_start = makeword(&byterec[C_DISK_NUMBER_START]); G.crec.internal_file_attributes = makeword(&byterec[C_INTERNAL_FILE_ATTRIBUTES]); G.crec.external_file_attributes = makelong(&byterec[C_EXTERNAL_FILE_ATTRIBUTES]); /* LONG, not word! */ G.crec.relative_offset_local_header = makelong(&byterec[C_RELATIVE_OFFSET_LOCAL_HEADER]); return PK_COOL; } /* end function get_cdir_ent() */ /*************************************/ /* Function process_local_file_hdr() */ /*************************************/ int process_local_file_hdr(__G) /* return PK-type error code */ __GDEF { local_byte_hdr byterec; /*--------------------------------------------------------------------------- Read the next local file header and do any necessary machine-type con- versions (byte ordering, structure padding compensation--do so by copy- ing the data from the array into which it was read (byterec) to the usable struct (lrec)). ---------------------------------------------------------------------------*/ if (readbuf(__G__ (char *)byterec, LREC_SIZE) == 0) return PK_EOF; G.lrec.version_needed_to_extract[0] = byterec[L_VERSION_NEEDED_TO_EXTRACT_0]; G.lrec.version_needed_to_extract[1] = byterec[L_VERSION_NEEDED_TO_EXTRACT_1]; G.lrec.general_purpose_bit_flag = makeword(&byterec[L_GENERAL_PURPOSE_BIT_FLAG]); G.lrec.compression_method = makeword(&byterec[L_COMPRESSION_METHOD]); G.lrec.last_mod_dos_datetime = makelong(&byterec[L_LAST_MOD_DOS_DATETIME]); G.lrec.crc32 = makelong(&byterec[L_CRC32]); G.lrec.csize = makelong(&byterec[L_COMPRESSED_SIZE]); G.lrec.ucsize = makelong(&byterec[L_UNCOMPRESSED_SIZE]); G.lrec.filename_length = makeword(&byterec[L_FILENAME_LENGTH]); G.lrec.extra_field_length = makeword(&byterec[L_EXTRA_FIELD_LENGTH]); if ((G.lrec.general_purpose_bit_flag & 8) != 0) { /* can't trust local header, use central directory: */ G.lrec.crc32 = G.pInfo->crc; G.lrec.csize = G.pInfo->compr_size; G.lrec.ucsize = G.pInfo->uncompr_size; } G.csize = G.lrec.csize; return PK_COOL; } /* end function process_local_file_hdr() */ /*******************************/ /* Function getZip64Data() */ /*******************************/ int getZip64Data(__G__ ef_buf, ef_len) __GDEF ZCONST uch *ef_buf; /* buffer containing extra field */ unsigned ef_len; /* total length of extra field */ { unsigned eb_id; unsigned eb_len; /*--------------------------------------------------------------------------- This function scans the extra field for zip64 information, ie 8-byte versions of compressed file size, uncompressed file size, relative offset and a 4-byte version of disk start number. Sets both local header and central header fields. Not terribly clever, but it means that this procedure is only called in one place. ---------------------------------------------------------------------------*/ if (ef_len == 0 || ef_buf == NULL) return PK_COOL; Trace((stderr,"\ngetZip64Data: scanning extra field of length %u\n", ef_len)); while (ef_len >= EB_HEADSIZE) { eb_id = makeword(EB_ID + ef_buf); eb_len = makeword(EB_LEN + ef_buf); if (eb_len > (ef_len - EB_HEADSIZE)) { /* discovered some extra field inconsistency! */ Trace((stderr, "getZip64Data: block length %u > rest ef_size %u\n", eb_len, ef_len - EB_HEADSIZE)); break; } if (eb_id == EF_PKSZ64) { int offset = EB_HEADSIZE; if (G.crec.ucsize == 0xffffffff || G.lrec.ucsize == 0xffffffff){ G.lrec.ucsize = G.crec.ucsize = makeint64(offset + ef_buf); offset += sizeof(G.crec.ucsize); } if (G.crec.csize == 0xffffffff || G.lrec.csize == 0xffffffff){ G.csize = G.lrec.csize = G.crec.csize = makeint64(offset + ef_buf); offset += sizeof(G.crec.csize); } if (G.crec.relative_offset_local_header == 0xffffffff){ G.crec.relative_offset_local_header = makeint64(offset + ef_buf); offset += sizeof(G.crec.relative_offset_local_header); } if (G.crec.disk_number_start == 0xffff){ G.crec.disk_number_start = (zuvl_t)makelong(offset + ef_buf); offset += sizeof(G.crec.disk_number_start); } } /* Skip this extra field block */ ef_buf += (eb_len + EB_HEADSIZE); ef_len -= (eb_len + EB_HEADSIZE); } return PK_COOL; } /* end function getZip64Data() */ #ifdef UNICODE_SUPPORT /*******************************/ /* Function getUnicodeData() */ /*******************************/ int getUnicodeData(__G__ ef_buf, ef_len) __GDEF ZCONST uch *ef_buf; /* buffer containing extra field */ unsigned ef_len; /* total length of extra field */ { unsigned eb_id; unsigned eb_len; /*--------------------------------------------------------------------------- This function scans the extra field for Unicode information, ie UTF-8 path extra fields. On return, G.unipath_filename = NULL, if no Unicode path extra field or error "", if the standard path is UTF-8 (free when done) null-terminated UTF-8 path (free when done) Return PK_COOL if no error. ---------------------------------------------------------------------------*/ G.unipath_filename = NULL; if (ef_len == 0 || ef_buf == NULL) return PK_COOL; Trace((stderr,"\ngetUnicodeData: scanning extra field of length %u\n", ef_len)); while (ef_len >= EB_HEADSIZE) { eb_id = makeword(EB_ID + ef_buf); eb_len = makeword(EB_LEN + ef_buf); if (eb_len > (ef_len - EB_HEADSIZE)) { /* discovered some extra field inconsistency! */ Trace((stderr, "getUnicodeData: block length %u > rest ef_size %u\n", eb_len, ef_len - EB_HEADSIZE)); break; } if (eb_id == EF_UNIPATH) { int offset = EB_HEADSIZE; ush ULen = eb_len - 5; ulg chksum = CRCVAL_INITIAL; /* version */ G.unipath_version = (uch) *(offset + ef_buf); offset += 1; if (G.unipath_version > 1) { /* can do only version 1 */ Info(slide, 0x401, ((char *)slide, LoadFarString(UnicodeVersionError))); return PK_ERR; } /* filename CRC */ G.unipath_checksum = makelong(offset + ef_buf); offset += 4; /* * Compute 32-bit crc */ chksum = crc32(chksum, (uch *)(G.filename_full), strlen(G.filename_full)); /* If the checksums's don't match then likely filename has been * modified and the Unicode Path is no longer valid. */ if (chksum != G.unipath_checksum) { Info(slide, 0x401, ((char *)slide, LoadFarString(UnicodeMismatchError))); if (G.unicode_mismatch == 1) { /* warn and continue */ } else if (G.unicode_mismatch == 2) { /* ignore and continue */ } else if (G.unicode_mismatch == 0) { } return PK_ERR; } /* UTF-8 Path */ if ((G.unipath_filename = malloc(ULen + 1)) == NULL) { return PK_ERR; } if (ULen == 0) { /* standard path is UTF-8 so use that */ G.unipath_filename[0] = '\0'; } else { /* UTF-8 path */ strncpy(G.unipath_filename, (ZCONST char *)(offset + ef_buf), ULen); G.unipath_filename[ULen] = '\0'; } } /* Skip this extra field block */ ef_buf += (eb_len + EB_HEADSIZE); ef_len -= (eb_len + EB_HEADSIZE); } return PK_COOL; } /* end function getUnicodeData() */ #ifdef UNICODE_WCHAR /*--------------------------------------------- * Unicode conversion functions * * Based on functions provided by Paul Kienitz * *--------------------------------------------- */ /* NOTES APPLICABLE TO ALL STRING FUNCTIONS: All of the x_to_y functions take parameters for an output buffer and its available length, and return an int. The value returned is the length of the string that the input produces, which may be larger than the provided buffer length. If the returned value is less than the buffer length, then the contents of the buffer will be null-terminated; otherwise, it will not be terminated and may be invalid, possibly stopping in the middle of a multibyte sequence. In all cases you may pass NULL as the buffer and/or 0 as the length, if you just want to learn how much space the string is going to require. The functions will return -1 if the input is invalid UTF-8 or cannot be encoded as UTF-8. */ static int utf8_char_bytes OF((ZCONST char *utf8)); static ulg ucs4_char_from_utf8 OF((ZCONST char **utf8)); static int utf8_to_ucs4_string OF((ZCONST char *utf8, ulg *ucs4buf, int buflen)); /* utility functions for managing UTF-8 and UCS-4 strings */ /* utf8_char_bytes * * Returns the number of bytes used by the first character in a UTF-8 * string, or -1 if the UTF-8 is invalid or null. */ static int utf8_char_bytes(utf8) ZCONST char *utf8; { int t, r; unsigned lead; if (!utf8) return -1; /* no input */ lead = (unsigned char) *utf8; if (lead < 0x80) r = 1; /* an ascii-7 character */ else if (lead < 0xC0) return -1; /* error: trailing byte without lead byte */ else if (lead < 0xE0) r = 2; /* an 11 bit character */ else if (lead < 0xF0) r = 3; /* a 16 bit character */ else if (lead < 0xF8) r = 4; /* a 21 bit character (the most currently used) */ else if (lead < 0xFC) r = 5; /* a 26 bit character (shouldn't happen) */ else if (lead < 0xFE) r = 6; /* a 31 bit character (shouldn't happen) */ else return -1; /* error: invalid lead byte */ for (t = 1; t < r; t++) if ((unsigned char) utf8[t] < 0x80 || (unsigned char) utf8[t] >= 0xC0) return -1; /* error: not enough valid trailing bytes */ return r; } /* ucs4_char_from_utf8 * * Given a reference to a pointer into a UTF-8 string, returns the next * UCS-4 character and advances the pointer to the next character sequence. * Returns ~0 (= -1 in twos-complement notation) and does not advance the * pointer when input is ill-formed. */ static ulg ucs4_char_from_utf8(utf8) ZCONST char **utf8; { ulg ret; int t, bytes; if (!utf8) return ~0L; /* no input */ bytes = utf8_char_bytes(*utf8); if (bytes <= 0) return ~0L; /* invalid input */ if (bytes == 1) ret = **utf8; /* ascii-7 */ else ret = **utf8 & (0x7F >> bytes); /* lead byte of a multibyte sequence */ (*utf8)++; for (t = 1; t < bytes; t++) /* consume trailing bytes */ ret = (ret << 6) | (*((*utf8)++) & 0x3F); return (zwchar) ret; } #if 0 /* currently unused */ /* utf8_from_ucs4_char - Convert UCS char to UTF-8 * * Returns the number of bytes put into utf8buf to represent ch, from 1 to 6, * or -1 if ch is too large to represent. utf8buf must have room for 6 bytes. */ static int utf8_from_ucs4_char(utf8buf, ch) char *utf8buf; ulg ch; { int trailing = 0; int leadmask = 0x80; int leadbits = 0x3F; int tch = ch; int ret; if (ch > 0x7FFFFFFFL) return -1; /* UTF-8 can represent 31 bits */ if (ch < 0x7F) { *utf8buf++ = (char) ch; /* ascii-7 */ return 1; } do { trailing++; leadmask = (leadmask >> 1) | 0x80; leadbits >>= 1; tch >>= 6; } while (tch & ~leadbits); ret = trailing + 1; /* produce lead byte */ *utf8buf++ = (char) (leadmask | (ch >> (6 * trailing))); while (--trailing >= 0) /* produce trailing bytes */ *utf8buf++ = (char) (0x80 | ((ch >> (6 * trailing)) & 0x3F)); return ret; } #endif /* unused */ /*===================================================================*/ /* utf8_to_ucs4_string - convert UTF-8 string to UCS string * * Return UCS count. Now returns int so can return -1. */ static int utf8_to_ucs4_string(utf8, ucs4buf, buflen) ZCONST char *utf8; ulg *ucs4buf; int buflen; { int count = 0; for (;;) { ulg ch = ucs4_char_from_utf8(&utf8); if (ch == ~0L) return -1; else { if (ucs4buf && count < buflen) ucs4buf[count] = ch; if (ch == 0) return count; count++; } } } #if 0 /* currently unused */ /* ucs4_string_to_utf8 * * */ static int ucs4_string_to_utf8(ucs4, utf8buf, buflen) ZCONST ulg *ucs4; char *utf8buf; int buflen; { char mb[6]; int count = 0; if (!ucs4) return -1; for (;;) { int mbl = utf8_from_ucs4_char(mb, *ucs4++); int c; if (mbl <= 0) return -1; /* We could optimize this a bit by passing utf8buf + count */ /* directly to utf8_from_ucs4_char when buflen >= count + 6... */ c = buflen - count; if (mbl < c) c = mbl; if (utf8buf && count < buflen) strncpy(utf8buf + count, mb, c); if (mbl == 1 && !mb[0]) return count; /* terminating nul */ count += mbl; } } /* utf8_chars * * Wrapper: counts the actual unicode characters in a UTF-8 string. */ static int utf8_chars(utf8) ZCONST char *utf8; { return utf8_to_ucs4_string(utf8, NULL, 0); } #endif /* unused */ /* --------------------------------------------------- */ /* Unicode Support * * These functions common for all Unicode ports. * * These functions should allocate and return strings that can be * freed with free(). * * 8/27/05 EG * * Use zwchar for wide char which is unsigned long * in zip.h and 32 bits. This avoids problems with * different sizes of wchar_t. */ #if 0 /* currently unused */ /* is_ascii_string * Checks if a string is all ascii */ int is_ascii_string(mbstring) ZCONST char *mbstring; { char *p; uch c; for (p = mbstring; c = (uch)*p; p++) { if (c > 0x7F) { return 0; } } return 1; } /* local to UTF-8 */ char *local_to_utf8_string(local_string) ZCONST char *local_string; { return wide_to_utf8_string(local_to_wide_string(local_string)); } # endif /* unused */ /* wide_to_escape_string provides a string that represents a wide char not in local char set An initial try at an algorithm. Suggestions welcome. According to the standard, Unicode character points are restricted to the number range from 0 to 0x10FFFF, respective 21 bits. For a hexadecimal notation, 2 octets are sufficient for the mostly used characters from the "Basic Multilingual Plane", all other Unicode characters can be represented by 3 octets (= 6 hex digits). The Unicode standard suggests to write Unicode character points as 4 resp. 6 hex digits, preprended by "U+". (e.g.: U+10FFFF for the highest character point, or U+0030 for the ASCII digit "0") However, for the purpose of escaping non-ASCII chars in an ASCII character stream, the "U" is not a very good escape initializer. Therefore, we use the following convention within our Info-ZIP code: If not an ASCII char probably need 2 bytes at least. So if a 2-byte wide encode it as 4 hex digits with a leading #U. If needs 3 bytes then prefix the string with #L. So #U1234 is a 2-byte wide character with bytes 0x12 and 0x34 while #L123456 is a 3-byte wide character with bytes 0x12, 0x34, 0x56. On Windows, wide that need two wide characters need to be converted to a single number. */ /* set this to the max bytes an escape can be */ #define MAX_ESCAPE_BYTES 8 char *wide_to_escape_string(wide_char) zwchar wide_char; { int i; zwchar w = wide_char; uch b[sizeof(zwchar)]; char d[3]; char e[11]; int len; char *r; /* fill byte array with zeros */ memzero(b, sizeof(zwchar)); /* get bytes in right to left order */ for (len = 0; w; len++) { b[len] = (char)(w % 0x100); w /= 0x100; } strcpy(e, "#"); /* either 2 bytes or 3 bytes */ if (len <= 2) { len = 2; strcat(e, "U"); } else { strcat(e, "L"); } for (i = len - 1; i >= 0; i--) { sprintf(d, "%02x", b[i]); strcat(e, d); } if ((r = malloc(strlen(e) + 1)) == NULL) { return NULL; } strcpy(r, e); return r; } #if 0 /* currently unused */ /* returns the wide character represented by the escape string */ zwchar escape_string_to_wide(escape_string) ZCONST char *escape_string; { int i; zwchar w; char c; int len; ZCONST char *e = escape_string; if (e == NULL) { return 0; } if (e[0] != '#') { /* no leading # */ return 0; } len = strlen(e); /* either #U1234 or #L123456 format */ if (len != 6 && len != 8) { return 0; } w = 0; if (e[1] == 'L') { if (len != 8) { return 0; } /* 3 bytes */ for (i = 2; i < 8; i++) { c = e[i]; if (c < '0' || c > '9') { return 0; } w = w * 0x10 + (zwchar)(c - '0'); } } else if (e[1] == 'U') { /* 2 bytes */ for (i = 2; i < 6; i++) { c = e[i]; if (c < '0' || c > '9') { return 0; } w = w * 0x10 + (zwchar)(c - '0'); } } return w; } #endif /* unused */ #ifndef WIN32 /* WIN32 supplies a special variant of this function */ /* convert wide character string to multi-byte character string */ char *wide_to_local_string(wide_string, escape_all) ZCONST zwchar *wide_string; int escape_all; { int i; wchar_t wc; int b; int state_dependent; int wsize = 0; int max_bytes = MB_CUR_MAX; char buf[9]; char *buffer = NULL; char *local_string = NULL; for (wsize = 0; wide_string[wsize]; wsize++) ; if (max_bytes < MAX_ESCAPE_BYTES) max_bytes = MAX_ESCAPE_BYTES; if ((buffer = (char *)malloc(wsize * max_bytes + 1)) == NULL) { return NULL; } /* convert it */ buffer[0] = '\0'; /* set initial state if state-dependent encoding */ wc = (wchar_t)'a'; b = wctomb(NULL, wc); if (b == 0) state_dependent = 0; else state_dependent = 1; for (i = 0; i < wsize; i++) { if (sizeof(wchar_t) < 4 && wide_string[i] > 0xFFFF) { /* wchar_t probably 2 bytes */ /* could do surrogates if state_dependent and wctomb can do */ wc = zwchar_to_wchar_t_default_char; } else { wc = (wchar_t)wide_string[i]; } b = wctomb(buf, wc); if (escape_all) { if (b == 1 && (uch)buf[0] <= 0x7f) { /* ASCII */ strncat(buffer, buf, b); } else { /* use escape for wide character */ char *escape_string = wide_to_escape_string(wide_string[i]); strcat(buffer, escape_string); free(escape_string); } } else if (b > 0) { /* multi-byte char */ strncat(buffer, buf, b); } else { /* no MB for this wide */ /* use escape for wide character */ char *escape_string = wide_to_escape_string(wide_string[i]); strcat(buffer, escape_string); free(escape_string); } } if ((local_string = (char *)malloc(strlen(buffer) + 1)) != NULL) { strcpy(local_string, buffer); } free(buffer); return local_string; } #endif /* !WIN32 */ #if 0 /* currently unused */ /* convert local string to display character set string */ char *local_to_display_string(local_string) ZCONST char *local_string; { char *display_string; /* For Windows, OEM string should never be bigger than ANSI string, says CharToOem description. For all other ports, just make a copy of local_string. */ if ((display_string = (char *)malloc(strlen(local_string) + 1)) == NULL) { return NULL; } strcpy(display_string, local_string); #ifdef EBCDIC { char *ebc; if ((ebc = malloc(strlen(display_string) + 1)) == NULL) { return NULL; } strtoebc(ebc, display_string); free(display_string); display_string = ebc; } #endif return display_string; } #endif /* unused */ /* UTF-8 to local */ char *utf8_to_local_string(utf8_string, escape_all) ZCONST char *utf8_string; int escape_all; { zwchar *wide = utf8_to_wide_string(utf8_string); char *loc = wide_to_local_string(wide, escape_all); free(wide); return loc; } #if 0 /* currently unused */ /* convert multi-byte character string to wide character string */ zwchar *local_to_wide_string(local_string) ZCONST char *local_string; { int wsize; wchar_t *wc_string; zwchar *wide_string; /* for now try to convert as string - fails if a bad char in string */ wsize = mbstowcs(NULL, local_string, strlen(local_string) + 1); if (wsize == (size_t)-1) { /* could not convert */ return NULL; } /* convert it */ if ((wc_string = (wchar_t *)malloc((wsize + 1) * sizeof(wchar_t))) == NULL) { return NULL; } wsize = mbstowcs(wc_string, local_string, strlen(local_string) + 1); wc_string[wsize] = (wchar_t) 0; /* in case wchar_t is not zwchar */ if ((wide_string = (zwchar *)malloc((wsize + 1) * sizeof(zwchar))) == NULL) { return NULL; } for (wsize = 0; wide_string[wsize] = (zwchar)wc_string[wsize]; wsize++) ; wide_string[wsize] = (zwchar) 0; free(wc_string); return wide_string; } /* convert wide string to UTF-8 */ char *wide_to_utf8_string(wide_string) ZCONST zwchar *wide_string; { int mbcount; char *utf8_string; /* get size of utf8 string */ mbcount = ucs4_string_to_utf8(wide_string, NULL, 0); if (mbcount == -1) return NULL; if ((utf8_string = (char *) malloc(mbcount + 1)) == NULL) { return NULL; } mbcount = ucs4_string_to_utf8(wide_string, utf8_string, mbcount + 1); if (mbcount == -1) return NULL; return utf8_string; } #endif /* unused */ /* convert UTF-8 string to wide string */ zwchar *utf8_to_wide_string(utf8_string) ZCONST char *utf8_string; { int wcount; zwchar *wide_string; wcount = utf8_to_ucs4_string(utf8_string, NULL, 0); if (wcount == -1) return NULL; if ((wide_string = (zwchar *) malloc((wcount + 1) * sizeof(zwchar))) == NULL) { return NULL; } wcount = utf8_to_ucs4_string(utf8_string, wide_string, wcount + 1); return wide_string; } #endif /* UNICODE_WCHAR */ #endif /* UNICODE_SUPPORT */ #ifdef USE_EF_UT_TIME #ifdef IZ_HAVE_UXUIDGID static int read_ux3_value(dbuf, uidgid_sz, p_uidgid) ZCONST uch *dbuf; /* buffer a uid or gid value */ unsigned uidgid_sz; /* size of uid/gid value */ ulg *p_uidgid; /* return storage: uid or gid value */ { zusz_t uidgid64; switch (uidgid_sz) { case 2: *p_uidgid = (ulg)makeword(dbuf); break; case 4: *p_uidgid = (ulg)makelong(dbuf); break; case 8: uidgid64 = makeint64(dbuf); #ifndef LARGE_FILE_SUPPORT if (uidgid64 == (zusz_t)0xffffffffL) return FALSE; #endif *p_uidgid = (ulg)uidgid64; if ((zusz_t)(*p_uidgid) != uidgid64) return FALSE; break; } return TRUE; } #endif /* IZ_HAVE_UXUIDGID */ /*******************************/ /* Function ef_scan_for_izux() */ /*******************************/ unsigned ef_scan_for_izux(ef_buf, ef_len, ef_is_c, dos_mdatetime, z_utim, z_uidgid) ZCONST uch *ef_buf; /* buffer containing extra field */ unsigned ef_len; /* total length of extra field */ int ef_is_c; /* flag indicating "is central extra field" */ ulg dos_mdatetime; /* last_mod_file_date_time in DOS format */ iztimes *z_utim; /* return storage: atime, mtime, ctime */ ulg *z_uidgid; /* return storage: uid and gid */ { unsigned flags = 0; unsigned eb_id; unsigned eb_len; int have_new_type_eb = 0; long i_time; /* buffer for Unix style 32-bit integer time value */ #ifdef TIME_T_TYPE_DOUBLE int ut_in_archive_sgn = 0; #else int ut_zip_unzip_compatible = FALSE; #endif /*--------------------------------------------------------------------------- This function scans the extra field for EF_TIME, EF_IZUNIX2, EF_IZUNIX, or EF_PKUNIX blocks containing Unix-style time_t (GMT) values for the entry's access, creation, and modification time. If a valid block is found, the time stamps are copied to the iztimes structure (provided the z_utim pointer is not NULL). If a IZUNIX2 block is found or the IZUNIX block contains UID/GID fields, and the z_uidgid array pointer is valid (!= NULL), the owner info is transfered as well. The presence of an EF_TIME or EF_IZUNIX2 block results in ignoring all data from probably present obsolete EF_IZUNIX blocks. If multiple blocks of the same type are found, only the information from the last block is used. The return value is a combination of the EF_TIME Flags field with an additional flag bit indicating the presence of valid UID/GID info, or 0 in case of failure. ---------------------------------------------------------------------------*/ if (ef_len == 0 || ef_buf == NULL || (z_utim == 0 && z_uidgid == NULL)) return 0; TTrace((stderr,"\nef_scan_for_izux: scanning extra field of length %u\n", ef_len)); while (ef_len >= EB_HEADSIZE) { eb_id = makeword(EB_ID + ef_buf); eb_len = makeword(EB_LEN + ef_buf); if (eb_len > (ef_len - EB_HEADSIZE)) { /* discovered some extra field inconsistency! */ TTrace((stderr, "ef_scan_for_izux: block length %u > rest ef_size %u\n", eb_len, ef_len - EB_HEADSIZE)); break; } switch (eb_id) { case EF_TIME: flags &= ~0x0ff; /* ignore previous IZUNIX or EF_TIME fields */ have_new_type_eb = 1; if ( eb_len >= EB_UT_MINLEN && z_utim != NULL) { unsigned eb_idx = EB_UT_TIME1; TTrace((stderr,"ef_scan_for_izux: found TIME extra field\n")); flags |= (ef_buf[EB_HEADSIZE+EB_UT_FLAGS] & 0x0ff); if ((flags & EB_UT_FL_MTIME)) { if ((eb_idx+4) <= eb_len) { i_time = (long)makelong((EB_HEADSIZE+eb_idx) + ef_buf); eb_idx += 4; TTrace((stderr," UT e.f. modification time = %ld\n", i_time)); #ifdef TIME_T_TYPE_DOUBLE if ((ulg)(i_time) & (ulg)(0x80000000L)) { if (dos_mdatetime == DOSTIME_MINIMUM) { ut_in_archive_sgn = -1; z_utim->mtime = (time_t)((long)i_time | (~(long)0x7fffffffL)); } else if (dos_mdatetime >= DOSTIME_2038_01_18) { ut_in_archive_sgn = 1; z_utim->mtime = (time_t)((ulg)i_time & (ulg)0xffffffffL); } else { ut_in_archive_sgn = 0; /* cannot determine sign of mtime; without modtime: ignore complete UT field */ flags &= ~0x0ff; /* no time_t times available */ TTrace((stderr, " UT modtime range error; ignore e.f.!\n")); break; /* stop scanning this field */ } } else { /* cannot determine, safe assumption is FALSE */ ut_in_archive_sgn = 0; z_utim->mtime = (time_t)i_time; } #else /* !TIME_T_TYPE_DOUBLE */ if ((ulg)(i_time) & (ulg)(0x80000000L)) { ut_zip_unzip_compatible = ((time_t)0x80000000L < (time_t)0L) ? (dos_mdatetime == DOSTIME_MINIMUM) : (dos_mdatetime >= DOSTIME_2038_01_18); if (!ut_zip_unzip_compatible) { /* UnZip interprets mtime differently than Zip; without modtime: ignore complete UT field */ flags &= ~0x0ff; /* no time_t times available */ TTrace((stderr, " UT modtime range error; ignore e.f.!\n")); break; /* stop scanning this field */ } } else { /* cannot determine, safe assumption is FALSE */ ut_zip_unzip_compatible = FALSE; } z_utim->mtime = (time_t)i_time; #endif /* ?TIME_T_TYPE_DOUBLE */ } else { flags &= ~EB_UT_FL_MTIME; TTrace((stderr," UT e.f. truncated; no modtime\n")); } } if (ef_is_c) { break; /* central version of TIME field ends here */ } if (flags & EB_UT_FL_ATIME) { if ((eb_idx+4) <= eb_len) { i_time = (long)makelong((EB_HEADSIZE+eb_idx) + ef_buf); eb_idx += 4; TTrace((stderr," UT e.f. access time = %ld\n", i_time)); #ifdef TIME_T_TYPE_DOUBLE if ((ulg)(i_time) & (ulg)(0x80000000L)) { if (ut_in_archive_sgn == -1) z_utim->atime = (time_t)((long)i_time | (~(long)0x7fffffffL)); } else if (ut_in_archive_sgn == 1) { z_utim->atime = (time_t)((ulg)i_time & (ulg)0xffffffffL); } else { /* sign of 32-bit time is unknown -> ignore it */ flags &= ~EB_UT_FL_ATIME; TTrace((stderr, " UT access time range error: skip time!\n")); } } else { z_utim->atime = (time_t)i_time; } #else /* !TIME_T_TYPE_DOUBLE */ if (((ulg)(i_time) & (ulg)(0x80000000L)) && !ut_zip_unzip_compatible) { flags &= ~EB_UT_FL_ATIME; TTrace((stderr, " UT access time range error: skip time!\n")); } else { z_utim->atime = (time_t)i_time; } #endif /* ?TIME_T_TYPE_DOUBLE */ } else { flags &= ~EB_UT_FL_ATIME; } } if (flags & EB_UT_FL_CTIME) { if ((eb_idx+4) <= eb_len) { i_time = (long)makelong((EB_HEADSIZE+eb_idx) + ef_buf); TTrace((stderr," UT e.f. creation time = %ld\n", i_time)); #ifdef TIME_T_TYPE_DOUBLE if ((ulg)(i_time) & (ulg)(0x80000000L)) { if (ut_in_archive_sgn == -1) z_utim->ctime = (time_t)((long)i_time | (~(long)0x7fffffffL)); } else if (ut_in_archive_sgn == 1) { z_utim->ctime = (time_t)((ulg)i_time & (ulg)0xffffffffL); } else { /* sign of 32-bit time is unknown -> ignore it */ flags &= ~EB_UT_FL_CTIME; TTrace((stderr, " UT creation time range error: skip time!\n")); } } else { z_utim->ctime = (time_t)i_time; } #else /* !TIME_T_TYPE_DOUBLE */ if (((ulg)(i_time) & (ulg)(0x80000000L)) && !ut_zip_unzip_compatible) { flags &= ~EB_UT_FL_CTIME; TTrace((stderr, " UT creation time range error: skip time!\n")); } else { z_utim->ctime = (time_t)i_time; } #endif /* ?TIME_T_TYPE_DOUBLE */ } else { flags &= ~EB_UT_FL_CTIME; } } } break; case EF_IZUNIX2: if (have_new_type_eb == 0) { flags &= ~0x0ff; /* ignore any previous IZUNIX field */ have_new_type_eb = 1; } #ifdef IZ_HAVE_UXUIDGID if (have_new_type_eb > 1) break; /* IZUNIX3 overrides IZUNIX2 e.f. block ! */ if (eb_len == EB_UX2_MINLEN && z_uidgid != NULL) { z_uidgid[0] = (ulg)makeword((EB_HEADSIZE+EB_UX2_UID) + ef_buf); z_uidgid[1] = (ulg)makeword((EB_HEADSIZE+EB_UX2_GID) + ef_buf); flags |= EB_UX2_VALID; /* signal success */ } #endif break; case EF_IZUNIX3: /* new 3rd generation Unix ef */ have_new_type_eb = 2; /* Version 1 byte version of this extra field, currently 1 UIDSize 1 byte Size of UID field UID Variable UID for this entry GIDSize 1 byte Size of GID field GID Variable GID for this entry */ #ifdef IZ_HAVE_UXUIDGID if (eb_len >= EB_UX3_MINLEN && z_uidgid != NULL && (*((EB_HEADSIZE + 0) + ef_buf) == 1) /* only know about version 1 */ { uch uid_size; uch gid_size; uid_size = *((EB_HEADSIZE + 1) + ef_buf); gid_size = *((EB_HEADSIZE + uid_size + 2) + ef_buf); flags &= ~0x0ff; /* ignore any previous UNIX field */ if ( read_ux3_value((EB_HEADSIZE + 2) + ef_buf, uid_size, z_uidgid[0]) && read_ux3_value((EB_HEADSIZE + uid_size + 3) + ef_buf, gid_size, z_uidgid[1]) ) { flags |= EB_UX2_VALID; /* signal success */ } } #endif /* IZ_HAVE_UXUIDGID */ break; case EF_IZUNIX: case EF_PKUNIX: /* PKUNIX e.f. layout is identical to IZUNIX */ if (eb_len >= EB_UX_MINLEN) { TTrace((stderr,"ef_scan_for_izux: found %s extra field\n", (eb_id == EF_IZUNIX ? "IZUNIX" : "PKUNIX"))); if (have_new_type_eb > 0) { break; /* Ignore IZUNIX extra field block ! */ } if (z_utim != NULL) { flags |= (EB_UT_FL_MTIME | EB_UT_FL_ATIME); i_time = (long)makelong((EB_HEADSIZE+EB_UX_MTIME)+ef_buf); TTrace((stderr," Unix EF modtime = %ld\n", i_time)); #ifdef TIME_T_TYPE_DOUBLE if ((ulg)(i_time) & (ulg)(0x80000000L)) { if (dos_mdatetime == DOSTIME_MINIMUM) { ut_in_archive_sgn = -1; z_utim->mtime = (time_t)((long)i_time | (~(long)0x7fffffffL)); } else if (dos_mdatetime >= DOSTIME_2038_01_18) { ut_in_archive_sgn = 1; z_utim->mtime = (time_t)((ulg)i_time & (ulg)0xffffffffL); } else { ut_in_archive_sgn = 0; /* cannot determine sign of mtime; without modtime: ignore complete UT field */ flags &= ~0x0ff; /* no time_t times available */ TTrace((stderr, " UX modtime range error: ignore e.f.!\n")); } } else { /* cannot determine, safe assumption is FALSE */ ut_in_archive_sgn = 0; z_utim->mtime = (time_t)i_time; } #else /* !TIME_T_TYPE_DOUBLE */ if ((ulg)(i_time) & (ulg)(0x80000000L)) { ut_zip_unzip_compatible = ((time_t)0x80000000L < (time_t)0L) ? (dos_mdatetime == DOSTIME_MINIMUM) : (dos_mdatetime >= DOSTIME_2038_01_18); if (!ut_zip_unzip_compatible) { /* UnZip interpretes mtime differently than Zip; without modtime: ignore complete UT field */ flags &= ~0x0ff; /* no time_t times available */ TTrace((stderr, " UX modtime range error: ignore e.f.!\n")); } } else { /* cannot determine, safe assumption is FALSE */ ut_zip_unzip_compatible = FALSE; } z_utim->mtime = (time_t)i_time; #endif /* ?TIME_T_TYPE_DOUBLE */ i_time = (long)makelong((EB_HEADSIZE+EB_UX_ATIME)+ef_buf); TTrace((stderr," Unix EF actime = %ld\n", i_time)); #ifdef TIME_T_TYPE_DOUBLE if ((ulg)(i_time) & (ulg)(0x80000000L)) { if (ut_in_archive_sgn == -1) z_utim->atime = (time_t)((long)i_time | (~(long)0x7fffffffL)); } else if (ut_in_archive_sgn == 1) { z_utim->atime = (time_t)((ulg)i_time & (ulg)0xffffffffL); } else if (flags & 0x0ff) { /* sign of 32-bit time is unknown -> ignore it */ flags &= ~EB_UT_FL_ATIME; TTrace((stderr, " UX access time range error: skip time!\n")); } } else { z_utim->atime = (time_t)i_time; } #else /* !TIME_T_TYPE_DOUBLE */ if (((ulg)(i_time) & (ulg)(0x80000000L)) && !ut_zip_unzip_compatible && (flags & 0x0ff)) { /* atime not in range of UnZip's time_t */ flags &= ~EB_UT_FL_ATIME; TTrace((stderr, " UX access time range error: skip time!\n")); } else { z_utim->atime = (time_t)i_time; } #endif /* ?TIME_T_TYPE_DOUBLE */ } #ifdef IZ_HAVE_UXUIDGID if (eb_len >= EB_UX_FULLSIZE && z_uidgid != NULL) { z_uidgid[0] = makeword((EB_HEADSIZE+EB_UX_UID) + ef_buf); z_uidgid[1] = makeword((EB_HEADSIZE+EB_UX_GID) + ef_buf); flags |= EB_UX2_VALID; } #endif /* IZ_HAVE_UXUIDGID */ } break; default: break; } /* Skip this extra field block */ ef_buf += (eb_len + EB_HEADSIZE); ef_len -= (eb_len + EB_HEADSIZE); } return flags; } #endif /* USE_EF_UT_TIME */ #if (defined(RISCOS) || defined(ACORN_FTYPE_NFS)) #define SPARKID_2 0x30435241 /* = "ARC0" */ /*******************************/ /* Function getRISCOSexfield() */ /*******************************/ zvoid *getRISCOSexfield(ef_buf, ef_len) ZCONST uch *ef_buf; /* buffer containing extra field */ unsigned ef_len; /* total length of extra field */ { unsigned eb_id; unsigned eb_len; /*--------------------------------------------------------------------------- This function scans the extra field for a Acorn SPARK filetype ef-block. If a valid block is found, the function returns a pointer to the start of the SPARK_EF block in the extra field buffer. Otherwise, a NULL pointer is returned. ---------------------------------------------------------------------------*/ if (ef_len == 0 || ef_buf == NULL) return NULL; Trace((stderr,"\ngetRISCOSexfield: scanning extra field of length %u\n", ef_len)); while (ef_len >= EB_HEADSIZE) { eb_id = makeword(EB_ID + ef_buf); eb_len = makeword(EB_LEN + ef_buf); if (eb_len > (ef_len - EB_HEADSIZE)) { /* discovered some extra field inconsistency! */ Trace((stderr, "getRISCOSexfield: block length %u > rest ef_size %u\n", eb_len, ef_len - EB_HEADSIZE)); break; } if (eb_id == EF_SPARK && (eb_len == 24 || eb_len == 20)) { if (makelong(EB_HEADSIZE + ef_buf) == SPARKID_2) { /* Return a pointer to the valid SPARK filetype ef block */ return (zvoid *)ef_buf; } } /* Skip this extra field block */ ef_buf += (eb_len + EB_HEADSIZE); ef_len -= (eb_len + EB_HEADSIZE); } return NULL; } #endif /* (RISCOS || ACORN_FTYPE_NFS) */ Carla-2.4.2/data/windows/unzipfx-carla-control/ttyio.c000066400000000000000000000510341420416754300227320ustar00rootroot00000000000000/* Copyright (c) 1990-2008 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2000-Apr-09 or later (the contents of which are also included in zip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- ttyio.c This file contains routines for doing console input/output, including code for non-echoing input. It is used by the encryption/decryption code but does not contain any restricted code itself. This file is shared between Info-ZIP's Zip and UnZip. Contains: echo() (VMS only) Echon() (Unix only) Echoff() (Unix only) screensize() (Unix only) zgetch() (Unix, VMS, and non-Unix/VMS versions) getp() ("PC," Unix/Atari/Be, VMS/VMCMS/MVS) ---------------------------------------------------------------------------*/ #define __TTYIO_C /* identifies this source module */ #include "zip.h" #include "crypt.h" #if (CRYPT || (defined(UNZIP) && !defined(FUNZIP))) /* Non-echo console/keyboard input is needed for (en/de)cryption's password * entry, and for UnZip(SFX)'s MORE and Pause features. * (The corresponding #endif is found at the end of this module.) */ #include "ttyio.h" #ifndef PUTC # define PUTC putc #endif #ifdef ZIP # ifdef GLOBAL /* used in Amiga system headers, maybe others too */ # undef GLOBAL # endif # define GLOBAL(g) g #else # define GLOBAL(g) G.g #endif #if (defined(__ATHEOS__) || defined(__BEOS__)) /* why yes, we do */ # define HAVE_TERMIOS_H #endif #ifdef _POSIX_VERSION # ifndef USE_POSIX_TERMIOS # define USE_POSIX_TERMIOS /* use POSIX style termio (termios) */ # endif # ifndef HAVE_TERMIOS_H # define HAVE_TERMIOS_H /* POSIX termios.h */ # endif #endif /* _POSIX_VERSION */ #ifdef UNZIP /* Zip handles this with the unix/configure script */ # ifndef _POSIX_VERSION # if (defined(SYSV) || defined(CRAY)) && !defined(__MINT__) # ifndef USE_SYSV_TERMIO # define USE_SYSV_TERMIO # endif # ifdef COHERENT # ifndef HAVE_TERMIO_H # define HAVE_TERMIO_H # endif # ifdef HAVE_SYS_TERMIO_H # undef HAVE_SYS_TERMIO_H # endif # else /* !COHERENT */ # ifdef HAVE_TERMIO_H # undef HAVE_TERMIO_H # endif # ifndef HAVE_SYS_TERMIO_H # define HAVE_SYS_TERMIO_H # endif # endif /* ?COHERENT */ # endif /* (SYSV || CRAY) && !__MINT__ */ # endif /* !_POSIX_VERSION */ # if !(defined(BSD4_4) || defined(SYSV) || defined(__convexc__)) # ifndef NO_FCNTL_H # define NO_FCNTL_H # endif # endif /* !(BSD4_4 || SYSV || __convexc__) */ #endif /* UNZIP */ #ifdef HAVE_TERMIOS_H # ifndef USE_POSIX_TERMIOS # define USE_POSIX_TERMIOS # endif #endif #if (defined(HAVE_TERMIO_H) || defined(HAVE_SYS_TERMIO_H)) # ifndef USE_SYSV_TERMIO # define USE_SYSV_TERMIO # endif #endif #if (defined(UNZIP) && !defined(FUNZIP) && defined(UNIX) && defined(MORE)) # include # define GOT_IOCTL_H /* int ioctl OF((int, int, zvoid *)); GRR: may need for some systems */ #endif #ifndef HAVE_WORKING_GETCH /* include system support for switching of console echo */ # ifdef VMS # include # include # include /* Workaround for broken header files of older DECC distributions * that are incompatible with the /NAMES=AS_IS qualifier. */ # define sys$assign SYS$ASSIGN # define sys$dassgn SYS$DASSGN # define sys$qiow SYS$QIOW # include # include # else /* !VMS */ # ifdef HAVE_TERMIOS_H # include # define sgttyb termios # define sg_flags c_lflag # define GTTY(f, s) tcgetattr(f, (zvoid *) s) # define STTY(f, s) tcsetattr(f, TCSAFLUSH, (zvoid *) s) # else /* !HAVE_TERMIOS_H */ # ifdef USE_SYSV_TERMIO /* Amdahl, Cray, all SysV? */ # ifdef HAVE_TERMIO_H # include # endif # ifdef HAVE_SYS_TERMIO_H # include # endif # ifdef NEED_PTEM # include # include # endif # define sgttyb termio # define sg_flags c_lflag # define GTTY(f,s) ioctl(f,TCGETA,(zvoid *)s) # define STTY(f,s) ioctl(f,TCSETAW,(zvoid *)s) # else /* !USE_SYSV_TERMIO */ # ifndef CMS_MVS # if (!defined(MINIX) && !defined(GOT_IOCTL_H)) # include # endif # include # define GTTY gtty # define STTY stty # ifdef UNZIP /* * XXX : Are these declarations needed at all ???? */ /* * GRR: let's find out... Hmmm, appears not... int gtty OF((int, struct sgttyb *)); int stty OF((int, struct sgttyb *)); */ # endif # endif /* !CMS_MVS */ # endif /* ?USE_SYSV_TERMIO */ # endif /* ?HAVE_TERMIOS_H */ # ifndef NO_FCNTL_H # ifndef UNZIP # include # endif # else char *ttyname OF((int)); # endif # endif /* ?VMS */ #endif /* !HAVE_WORKING_GETCH */ #ifndef HAVE_WORKING_GETCH #ifdef VMS static struct dsc$descriptor_s DevDesc = {11, DSC$K_DTYPE_T, DSC$K_CLASS_S, "SYS$COMMAND"}; /* {dsc$w_length, dsc$b_dtype, dsc$b_class, dsc$a_pointer}; */ /* * Turn keyboard echoing on or off (VMS). Loosely based on VMSmunch.c * and hence on Joe Meadows' file.c code. */ int echo(opt) int opt; { /* * For VMS v5.x: * IO$_SENSEMODE/SETMODE info: Programming, Vol. 7A, System Programming, * I/O User's: Part I, sec. 8.4.1.1, 8.4.3, 8.4.5, 8.6 * sys$assign(), sys$qio() info: Programming, Vol. 4B, System Services, * System Services Reference Manual, pp. sys-23, sys-379 * fixed-length descriptor info: Programming, Vol. 3, System Services, * Intro to System Routines, sec. 2.9.2 * Greg Roelofs, 15 Aug 91 */ short DevChan, iosb[4]; long status; unsigned long ttmode[2]; /* space for 8 bytes */ /* assign a channel to standard input */ status = sys$assign(&DevDesc, &DevChan, 0, 0); if (!(status & 1)) return status; /* use sys$qio and the IO$_SENSEMODE function to determine the current * tty status (for password reading, could use IO$_READVBLK function * instead, but echo on/off will be more general) */ status = sys$qiow(0, DevChan, IO$_SENSEMODE, &iosb, 0, 0, ttmode, 8, 0, 0, 0, 0); if (!(status & 1)) return status; status = iosb[0]; if (!(status & 1)) return status; /* modify mode buffer to be either NOECHO or ECHO * (depending on function argument opt) */ if (opt == 0) /* off */ ttmode[1] |= TT$M_NOECHO; /* set NOECHO bit */ else ttmode[1] &= ~((unsigned long) TT$M_NOECHO); /* clear NOECHO bit */ /* use the IO$_SETMODE function to change the tty status */ status = sys$qiow(0, DevChan, IO$_SETMODE, &iosb, 0, 0, ttmode, 8, 0, 0, 0, 0); if (!(status & 1)) return status; status = iosb[0]; if (!(status & 1)) return status; /* deassign the sys$input channel by way of clean-up */ status = sys$dassgn(DevChan); if (!(status & 1)) return status; return SS$_NORMAL; /* we be happy */ } /* end function echo() */ /* * Read a single character from keyboard in non-echoing mode (VMS). * (returns EOF in case of errors) */ int tt_getch() { short DevChan, iosb[4]; long status; char kbbuf[16]; /* input buffer with - some - excess length */ /* assign a channel to standard input */ status = sys$assign(&DevDesc, &DevChan, 0, 0); if (!(status & 1)) return EOF; /* read a single character from SYS$COMMAND (no-echo) and * wait for completion */ status = sys$qiow(0,DevChan, IO$_READVBLK|IO$M_NOECHO|IO$M_NOFILTR, &iosb, 0, 0, &kbbuf, 1, 0, 0, 0, 0); if ((status&1) == 1) status = iosb[0]; /* deassign the sys$input channel by way of clean-up * (for this step, we do not need to check the completion status) */ sys$dassgn(DevChan); /* return the first char read, or EOF in case the read request failed */ return (int)(((status&1) == 1) ? (uch)kbbuf[0] : EOF); } /* end function tt_getch() */ #else /* !VMS: basically Unix */ /* For VM/CMS and MVS, non-echo terminal input is not (yet?) supported. */ #ifndef CMS_MVS #ifdef ZIP /* moved to globals.h for UnZip */ static int echofd=(-1); /* file descriptor whose echo is off */ #endif /* * Turn echo off for file descriptor f. Assumes that f is a tty device. */ void Echoff(__G__ f) __GDEF int f; /* file descriptor for which to turn echo off */ { struct sgttyb sg; /* tty device structure */ GLOBAL(echofd) = f; GTTY(f, &sg); /* get settings */ sg.sg_flags &= ~ECHO; /* turn echo off */ STTY(f, &sg); } /* * Turn echo back on for file descriptor echofd. */ void Echon(__G) __GDEF { struct sgttyb sg; /* tty device structure */ if (GLOBAL(echofd) != -1) { GTTY(GLOBAL(echofd), &sg); /* get settings */ sg.sg_flags |= ECHO; /* turn echo on */ STTY(GLOBAL(echofd), &sg); GLOBAL(echofd) = -1; } } #endif /* !CMS_MVS */ #endif /* ?VMS */ #if (defined(UNZIP) && !defined(FUNZIP)) #ifdef ATH_BEO_UNX #ifdef MORE /* * Get the number of lines on the output terminal. SCO Unix apparently * defines TIOCGWINSZ but doesn't support it (!M_UNIX). * * GRR: will need to know width of terminal someday, too, to account for * line-wrapping. */ #if (defined(TIOCGWINSZ) && !defined(M_UNIX)) int screensize(tt_rows, tt_cols) int *tt_rows; int *tt_cols; { struct winsize wsz; #ifdef DEBUG_WINSZ static int firsttime = TRUE; #endif /* see termio(4) under, e.g., SunOS */ if (ioctl(1, TIOCGWINSZ, &wsz) == 0) { #ifdef DEBUG_WINSZ if (firsttime) { firsttime = FALSE; fprintf(stderr, "ttyio.c screensize(): ws_row = %d\n", wsz.ws_row); fprintf(stderr, "ttyio.c screensize(): ws_col = %d\n", wsz.ws_col); } #endif /* number of rows */ if (tt_rows != NULL) *tt_rows = (int)((wsz.ws_row > 0) ? wsz.ws_row : 24); /* number of columns */ if (tt_cols != NULL) *tt_cols = (int)((wsz.ws_col > 0) ? wsz.ws_col : 80); return 0; /* signal success */ } else { /* this happens when piping to more(1), for example */ #ifdef DEBUG_WINSZ if (firsttime) { firsttime = FALSE; fprintf(stderr, "ttyio.c screensize(): ioctl(TIOCGWINSZ) failed\n")); } #endif /* VT-100 assumed to be minimal hardware */ if (tt_rows != NULL) *tt_rows = 24; if (tt_cols != NULL) *tt_cols = 80; return 1; /* signal failure */ } } #else /* !TIOCGWINSZ: service not available, fall back to semi-bogus method */ int screensize(tt_rows, tt_cols) int *tt_rows; int *tt_cols; { char *envptr, *getenv(); int n; int errstat = 0; /* GRR: this is overly simplistic, but don't have access to stty/gtty * system anymore */ if (tt_rows != NULL) { envptr = getenv("LINES"); if (envptr == (char *)NULL || (n = atoi(envptr)) < 5) { /* VT-100 assumed to be minimal hardware */ *tt_rows = 24; errstat = 1; /* signal failure */ } else { *tt_rows = n; } } if (tt_cols != NULL) { envptr = getenv("COLUMNS"); if (envptr == (char *)NULL || (n = atoi(envptr)) < 5) { *tt_cols = 80; errstat = 1; /* signal failure */ } else { *tt_cols = n; } } return errstat; } #endif /* ?(TIOCGWINSZ && !M_UNIX) */ #endif /* MORE */ /* * Get a character from the given file descriptor without echo or newline. */ int zgetch(__G__ f) __GDEF int f; /* file descriptor from which to read */ { #if (defined(USE_SYSV_TERMIO) || defined(USE_POSIX_TERMIOS)) char oldmin, oldtim; #endif char c; struct sgttyb sg; /* tty device structure */ GTTY(f, &sg); /* get settings */ #if (defined(USE_SYSV_TERMIO) || defined(USE_POSIX_TERMIOS)) oldmin = sg.c_cc[VMIN]; /* save old values */ oldtim = sg.c_cc[VTIME]; sg.c_cc[VMIN] = 1; /* need only one char to return read() */ sg.c_cc[VTIME] = 0; /* no timeout */ sg.sg_flags &= ~ICANON; /* canonical mode off */ #else sg.sg_flags |= CBREAK; /* cbreak mode on */ #endif sg.sg_flags &= ~ECHO; /* turn echo off, too */ STTY(f, &sg); /* set cbreak mode */ GLOBAL(echofd) = f; /* in case ^C hit (not perfect: still CBREAK) */ read(f, &c, 1); /* read our character */ #if (defined(USE_SYSV_TERMIO) || defined(USE_POSIX_TERMIOS)) sg.c_cc[VMIN] = oldmin; /* restore old values */ sg.c_cc[VTIME] = oldtim; sg.sg_flags |= ICANON; /* canonical mode on */ #else sg.sg_flags &= ~CBREAK; /* cbreak mode off */ #endif sg.sg_flags |= ECHO; /* turn echo on */ STTY(f, &sg); /* restore canonical mode */ GLOBAL(echofd) = -1; return (int)(uch)c; } #else /* !ATH_BEO_UNX */ #ifndef VMS /* VMS supplies its own variant of getch() */ int zgetch(__G__ f) __GDEF int f; /* file descriptor from which to read (must be open already) */ { char c, c2; /*--------------------------------------------------------------------------- Get a character from the given file descriptor without echo; can't fake CBREAK mode (i.e., newline required), but can get rid of all chars up to and including newline. ---------------------------------------------------------------------------*/ echoff(f); read(f, &c, 1); if (c != '\n') do { read(f, &c2, 1); /* throw away all other chars up thru newline */ } while (c2 != '\n'); echon(); return (int)c; } #endif /* !VMS */ #endif /* ?ATH_BEO_UNX */ #endif /* UNZIP && !FUNZIP */ #endif /* !HAVE_WORKING_GETCH */ #if CRYPT /* getp() is only used with full encryption */ /* * Simple compile-time check for source compatibility between * zcrypt and ttyio: */ #if (!defined(CR_MAJORVER) || (CR_MAJORVER < 2) || (CR_MINORVER < 7)) error: This Info-ZIP tool requires zcrypt 2.7 or later. #endif /* * Get a password of length n-1 or less into *p using the prompt *m. * The entered password is not echoed. */ #ifdef HAVE_WORKING_GETCH /* * For the AMIGA, getch() is defined as Agetch(), which is in * amiga/filedate.c; SAS/C 6.x provides a getch(), but since Agetch() * uses the infrastructure that is already in place in filedate.c, it is * smaller. With this function, echoff() and echon() are not needed. * * For the MAC, a non-echo macgetch() function is defined in the MacOS * specific sources which uses the event handling mechanism of the * desktop window manager to get a character from the keyboard. * * For the other systems in this section, a non-echo getch() function * is either contained the C runtime library (conio package), or getch() * is defined as an alias for a similar system specific RTL function. */ #ifndef WINDLL /* WINDLL does not support a console interface */ #ifndef QDOS /* QDOS supplies a variant of this function */ /* This is the getp() function for all systems (with TTY type user interface) * that supply a working `non-echo' getch() function for "raw" console input. */ char *getp(__G__ m, p, n) __GDEF ZCONST char *m; /* prompt for password */ char *p; /* return value: line input */ int n; /* bytes available in p[] */ { char c; /* one-byte buffer for read() to use */ int i; /* number of characters input */ char *w; /* warning on retry */ /* get password */ w = ""; do { fputs(w, stderr); /* warning if back again */ fputs(m, stderr); /* display prompt and flush */ fflush(stderr); i = 0; do { /* read line, keeping first n characters */ if ((c = (char)getch()) == '\r') c = '\n'; /* until user hits CR */ if (c == 8 || c == 127) { if (i > 0) i--; /* the `backspace' and `del' keys works */ } else if (i < n) p[i++] = c; /* truncate past n */ } while (c != '\n'); PUTC('\n', stderr); fflush(stderr); w = "(line too long--try again)\n"; } while (p[i-1] != '\n'); p[i-1] = 0; /* terminate at newline */ return p; /* return pointer to password */ } /* end function getp() */ #endif /* !QDOS */ #endif /* !WINDLL */ #else /* !HAVE_WORKING_GETCH */ #if (defined(ATH_BEO_UNX) || defined(__MINT__)) #ifndef _PATH_TTY # ifdef __MINT__ # define _PATH_TTY ttyname(2) # else # define _PATH_TTY "/dev/tty" # endif #endif char *getp(__G__ m, p, n) __GDEF ZCONST char *m; /* prompt for password */ char *p; /* return value: line input */ int n; /* bytes available in p[] */ { char c; /* one-byte buffer for read() to use */ int i; /* number of characters input */ char *w; /* warning on retry */ int f; /* file descriptor for tty device */ #ifdef PASSWD_FROM_STDIN /* Read from stdin. This is unsafe if the password is stored on disk. */ f = 0; #else /* turn off echo on tty */ if ((f = open(_PATH_TTY, 0)) == -1) return NULL; #endif /* get password */ w = ""; do { fputs(w, stderr); /* warning if back again */ fputs(m, stderr); /* prompt */ fflush(stderr); i = 0; echoff(f); do { /* read line, keeping n */ read(f, &c, 1); if (i < n) p[i++] = c; } while (c != '\n'); echon(); PUTC('\n', stderr); fflush(stderr); w = "(line too long--try again)\n"; } while (p[i-1] != '\n'); p[i-1] = 0; /* terminate at newline */ #ifndef PASSWD_FROM_STDIN close(f); #endif return p; /* return pointer to password */ } /* end function getp() */ #endif /* ATH_BEO_UNX || __MINT__ */ #if (defined(VMS) || defined(CMS_MVS)) char *getp(__G__ m, p, n) __GDEF ZCONST char *m; /* prompt for password */ char *p; /* return value: line input */ int n; /* bytes available in p[] */ { char c; /* one-byte buffer for read() to use */ int i; /* number of characters input */ char *w; /* warning on retry */ FILE *f; /* file structure for SYS$COMMAND device */ #ifdef PASSWD_FROM_STDIN f = stdin; #else if ((f = fopen(ctermid(NULL), "r")) == NULL) return NULL; #endif /* get password */ fflush(stdout); w = ""; do { if (*w) /* bug: VMS apparently adds \n to NULL fputs */ fputs(w, stderr); /* warning if back again */ fputs(m, stderr); /* prompt */ fflush(stderr); i = 0; echoff(f); do { /* read line, keeping n */ if ((c = (char)getc(f)) == '\r') c = '\n'; if (i < n) p[i++] = c; } while (c != '\n'); echon(); PUTC('\n', stderr); fflush(stderr); w = "(line too long--try again)\n"; } while (p[i-1] != '\n'); p[i-1] = 0; /* terminate at newline */ #ifndef PASSWD_FROM_STDIN fclose(f); #endif return p; /* return pointer to password */ } /* end function getp() */ #endif /* VMS || CMS_MVS */ #endif /* ?HAVE_WORKING_GETCH */ #endif /* CRYPT */ #endif /* CRYPT || (UNZIP && !FUNZIP) */ Carla-2.4.2/data/windows/unzipfx-carla-control/ttyio.h000066400000000000000000000123441420416754300227400ustar00rootroot00000000000000/* Copyright (c) 1990-2004 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2000-Apr-09 or later (the contents of which are also included in zip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /* ttyio.h */ #ifndef __ttyio_h /* don't include more than once */ #define __ttyio_h #ifndef __crypt_h # include "crypt.h" /* ensure that encryption header file has been seen */ #endif #if (CRYPT || (defined(UNZIP) && !defined(FUNZIP))) /* * Non-echo keyboard/console input support is needed and enabled. */ #ifndef __G /* UnZip only, for now (DLL stuff) */ # define __G # define __G__ # define __GDEF # define __GPRO void # define __GPRO__ #endif #ifndef ZCONST /* UnZip only (until have configure script like Zip) */ # define ZCONST const #endif #if (defined(MSDOS) || defined(OS2) || defined(WIN32)) # ifndef DOS_OS2_W32 # define DOS_OS2_W32 # endif #endif #if (defined(DOS_OS2_W32) || defined(__human68k__)) # ifndef DOS_H68_OS2_W32 # define DOS_H68_OS2_W32 # endif #endif #if (defined(DOS_OS2_W32) || defined(FLEXOS)) # ifndef DOS_FLX_OS2_W32 # define DOS_FLX_OS2_W32 # endif #endif #if (defined(DOS_H68_OS2_W32) || defined(FLEXOS)) # ifndef DOS_FLX_H68_OS2_W32 # define DOS_FLX_H68_OS2_W32 # endif #endif #if (defined(__ATHEOS__) || defined(__BEOS__) || defined(UNIX)) # ifndef ATH_BEO_UNX # define ATH_BEO_UNX # endif #endif #if (defined(VM_CMS) || defined(MVS)) # ifndef CMS_MVS # define CMS_MVS # endif #endif /* Function prototypes */ /* The following systems supply a `non-echo' character input function "getch()" * (or an alias) and do not need the echoff() / echon() function pair. */ #ifdef AMIGA # define echoff(f) # define echon() # define getch() Agetch() # define HAVE_WORKING_GETCH #endif /* AMIGA */ #ifdef ATARI # define echoff(f) # define echon() # include # define getch() (Cnecin() & 0x000000ff) # define HAVE_WORKING_GETCH #endif #ifdef MACOS # define echoff(f) # define echon() # define getch() macgetch() # define HAVE_WORKING_GETCH #endif #ifdef NLM # define echoff(f) # define echon() # define HAVE_WORKING_GETCH #endif #ifdef QDOS # define echoff(f) # define echon() # define HAVE_WORKING_GETCH #endif #ifdef RISCOS # define echoff(f) # define echon() # define getch() SWI_OS_ReadC() # define HAVE_WORKING_GETCH #endif #ifdef DOS_H68_OS2_W32 # define echoff(f) # define echon() # ifdef WIN32 # ifndef getch # define getch() getch_win32() # endif # else /* !WIN32 */ # ifdef __EMX__ # ifndef getch # define getch() _read_kbd(0, 1, 0) # endif # else /* !__EMX__ */ # ifdef __GO32__ # include # define getch() getkey() # else /* !__GO32__ */ # include # endif /* ?__GO32__ */ # endif /* ?__EMX__ */ # endif /* ?WIN32 */ # define HAVE_WORKING_GETCH #endif /* DOS_H68_OS2_W32 */ #ifdef FLEXOS # define echoff(f) # define echon() # define getch() getchar() /* not correct, but may not be on a console */ # define HAVE_WORKING_GETCH #endif /* For VM/CMS and MVS, we do not (yet) have any support to switch terminal * input echo on and off. The following "fake" definitions allow inclusion * of crypt support and UnZip's "pause prompting" features, but without * any echo suppression. */ #ifdef CMS_MVS # define echoff(f) # define echon() #endif #ifdef TANDEM # define echoff(f) # define echon() # define getch() zgetch() /* defined in TANDEMC */ # define HAVE_WORKING_GETCH #endif /* The THEOS C runtime library supplies the function conmask() to toggle * terminal input echo on (conmask("e")) and off (conmask("n")). But, * since THEOS C RTL also contains a working non-echo getch() function, * the echo toggles are not needed. */ #ifdef THEOS # define echoff(f) # define echon() # define HAVE_WORKING_GETCH #endif /* VMS has a single echo() function in ttyio.c to toggle terminal * input echo on and off. */ #ifdef VMS # define echoff(f) echo(0) # define echon() echo(1) # define getch() tt_getch() # define FGETCH(f) tt_getch() int echo OF((int)); int tt_getch OF((void)); #endif /* For all other systems, ttyio.c supplies the two functions Echoff() and * Echon() for suppressing and (re)enabling console input echo. */ #ifndef echoff # define echoff(f) Echoff(__G__ f) # define echon() Echon(__G) void Echoff OF((__GPRO__ int f)); void Echon OF((__GPRO)); #endif /* this stuff is used by MORE and also now by the ctrl-S code; fileio.c only */ #if (defined(UNZIP) && !defined(FUNZIP)) # ifdef HAVE_WORKING_GETCH # define FGETCH(f) getch() # endif # ifndef FGETCH /* default for all systems where no getch()-like function is available */ int zgetch OF((__GPRO__ int f)); # define FGETCH(f) zgetch(__G__ f) # endif #endif /* UNZIP && !FUNZIP */ #if (CRYPT && !defined(WINDLL)) char *getp OF((__GPRO__ ZCONST char *m, char *p, int n)); #endif #else /* !(CRYPT || (UNZIP && !FUNZIP)) */ /* * No need for non-echo keyboard/console input; provide dummy definitions. */ #define echoff(f) #define echon() #endif /* ?(CRYPT || (UNZIP && !FUNZIP)) */ #endif /* !__ttyio_h */ Carla-2.4.2/data/windows/unzipfx-carla-control/ubz2err.c000066400000000000000000000036551420416754300231630ustar00rootroot00000000000000/* Copyright (c) 1990-2008 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2007-Mar-04 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- ubz2err.c This file contains the "fatal error" callback routine required by the "minimal" (silent, non-stdio) setup of the bzip2 compression library. The fatal bzip2 error bail-out routine is provided in a separate code module, so that it can be easily overridden when the UnZip package is used as a static link library. One example is the WinDLL static library usage for building a monolythic binary of the Windows application "WiZ" that supports bzip2 both in compression and decompression operations. Contains: bz_internal_error() (USE_BZIP2 only) ---------------------------------------------------------------------------*/ #define __UBZ2ERR_C /* identifies this source module */ #define UNZIP_INTERNAL #include "unzip.h" #ifdef WINDLL # ifdef POCKET_UNZIP # include "wince/intrface.h" # else # include "windll/windll.h" # endif #endif #ifdef USE_BZIP2 /**********************************/ /* Function bz_internal_error() */ /**********************************/ /* Call-back function for the bzip2 decompression code (compiled with * BZ_NO_STDIO), required to handle fatal internal bug-type errors of * the bzip2 library. */ void bz_internal_error(bzerrcode) int bzerrcode; { GETGLOBALS(); Info(slide, 0x421, ((char *)slide, "error: internal fatal libbzip2 error number %d\n", bzerrcode)); #ifdef WINDLL longjmp(dll_error_return, 1); #else DESTROYGLOBALS(); EXIT(PK_BADERR); #endif } /* end function bz_internal_error() */ #endif /* USE_BZIP2 */ Carla-2.4.2/data/windows/unzipfx-carla-control/unix/000077500000000000000000000000001420416754300223765ustar00rootroot00000000000000Carla-2.4.2/data/windows/unzipfx-carla-control/unix/unix.c000066400000000000000000001711131420416754300235310ustar00rootroot00000000000000/* Copyright (c) 1990-2009 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2009-Jan-02 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- unix.c Unix-specific routines for use with Info-ZIP's UnZip 5.41 and later. Contains: readdir() do_wild() <-- generic enough to put in fileio.c? mapattr() mapname() checkdir() mkdir() close_outfile() defer_dir_attribs() set_direc_attribs() stamp_file() version() ---------------------------------------------------------------------------*/ #define UNZIP_INTERNAL #include "unzip.h" #ifdef SCO_XENIX # define SYSNDIR #else /* SCO Unix, AIX, DNIX, TI SysV, Coherent 4.x, ... */ # if defined(__convexc__) || defined(SYSV) || defined(CRAY) || defined(BSD4_4) # define DIRENT # endif #endif #if defined(_AIX) || defined(__mpexl) # define DIRENT #endif #ifdef COHERENT # if defined(_I386) || (defined(__COHERENT__) && (__COHERENT__ >= 0x420)) # define DIRENT # endif #endif #ifdef _POSIX_VERSION # ifndef DIRENT # define DIRENT # endif #endif #ifdef DIRENT # include #else # ifdef SYSV # ifdef SYSNDIR # include # else # include # endif # else /* !SYSV */ # ifndef NO_SYSDIR # include # endif # endif /* ?SYSV */ # ifndef dirent # define dirent direct # endif #endif /* ?DIRENT */ #ifdef SET_DIR_ATTRIB typedef struct uxdirattr { /* struct for holding unix style directory */ struct uxdirattr *next; /* info until can be sorted and set at end */ char *fn; /* filename of directory */ union { iztimes t3; /* mtime, atime, ctime */ ztimbuf t2; /* modtime, actime */ } u; unsigned perms; /* same as min_info.file_attr */ int have_uidgid; /* flag */ ulg uidgid[2]; char fnbuf[1]; /* buffer stub for directory name */ } uxdirattr; #define UxAtt(d) ((uxdirattr *)d) /* typecast shortcut */ #endif /* SET_DIR_ATTRIB */ #ifdef ACORN_FTYPE_NFS /* Acorn bits for NFS filetyping */ typedef struct { uch ID[2]; uch size[2]; uch ID_2[4]; uch loadaddr[4]; uch execaddr[4]; uch attr[4]; } RO_extra_block; #endif /* ACORN_FTYPE_NFS */ /* static int created_dir; */ /* used in mapname(), checkdir() */ /* static int renamed_fullpath; */ /* ditto */ static unsigned filtattr OF((__GPRO__ unsigned perms)); /*****************************/ /* Strings used multiple */ /* times in unix.c */ /*****************************/ #ifndef MTS /* messages of code for setting file/directory attributes */ static ZCONST char CannotSetItemUidGid[] = "warning: cannot set UID %lu and/or GID %lu for %s\n %s\n"; static ZCONST char CannotSetUidGid[] = " (warning) cannot set UID %lu and/or GID %lu\n %s"; static ZCONST char CannotSetItemTimestamps[] = "warning: cannot set modif./access times for %s\n %s\n"; static ZCONST char CannotSetTimestamps[] = " (warning) cannot set modif./access times\n %s"; #endif /* !MTS */ #ifndef SFX #ifdef NO_DIR /* for AT&T 3B1 */ #define opendir(path) fopen(path,"r") #define closedir(dir) fclose(dir) typedef FILE DIR; typedef struct zdir { FILE *dirhandle; struct dirent *entry; } DIR DIR *opendir OF((ZCONST char *dirspec)); void closedir OF((DIR *dirp)); struct dirent *readdir OF((DIR *dirp)); DIR *opendir(dirspec) ZCONST char *dirspec; { DIR *dirp; if ((dirp = malloc(sizeof(DIR)) != NULL) { if ((dirp->dirhandle = fopen(dirspec, "r")) == NULL) { free(dirp); dirp = NULL; } } return dirp; } void closedir(dirp) DIR *dirp; { fclose(dirp->dirhandle); free(dirp); } /* * Apparently originally by Rich Salz. * Cleaned up and modified by James W. Birdsall. */ struct dirent *readdir(dirp) DIR *dirp; { if (dirp == NULL) return NULL; for (;;) if (fread(&(dirp->entry), sizeof (struct dirent), 1, dirp->dirhandle) == 0) return (struct dirent *)NULL; else if ((dirp->entry).d_ino) return &(dirp->entry); } /* end function readdir() */ #endif /* NO_DIR */ /**********************/ /* Function do_wild() */ /* for porting: dir separator; match(ignore_case) */ /**********************/ char *do_wild(__G__ wildspec) __GDEF ZCONST char *wildspec; /* only used first time on a given dir */ { /* these statics are now declared in SYSTEM_SPECIFIC_GLOBALS in unxcfg.h: static DIR *wild_dir = (DIR *)NULL; static ZCONST char *wildname; static char *dirname, matchname[FILNAMSIZ]; static int notfirstcall=FALSE, have_dirname, dirnamelen; */ struct dirent *file; /* Even when we're just returning wildspec, we *always* do so in * matchname[]--calling routine is allowed to append four characters * to the returned string, and wildspec may be a pointer to argv[]. */ if (!G.notfirstcall) { /* first call: must initialize everything */ G.notfirstcall = TRUE; if (!iswild(wildspec)) { strncpy(G.matchname, wildspec, FILNAMSIZ); G.matchname[FILNAMSIZ-1] = '\0'; G.have_dirname = FALSE; G.wild_dir = NULL; return G.matchname; } /* break the wildspec into a directory part and a wildcard filename */ if ((G.wildname = (ZCONST char *)strrchr(wildspec, '/')) == NULL) { G.dirname = "."; G.dirnamelen = 1; G.have_dirname = FALSE; G.wildname = wildspec; } else { ++G.wildname; /* point at character after '/' */ G.dirnamelen = G.wildname - wildspec; if ((G.dirname = (char *)malloc(G.dirnamelen+1)) == (char *)NULL) { Info(slide, 0x201, ((char *)slide, "warning: cannot allocate wildcard buffers\n")); strncpy(G.matchname, wildspec, FILNAMSIZ); G.matchname[FILNAMSIZ-1] = '\0'; return G.matchname; /* but maybe filespec was not a wildcard */ } strncpy(G.dirname, wildspec, G.dirnamelen); G.dirname[G.dirnamelen] = '\0'; /* terminate for strcpy below */ G.have_dirname = TRUE; } if ((G.wild_dir = (zvoid *)opendir(G.dirname)) != (zvoid *)NULL) { while ((file = readdir((DIR *)G.wild_dir)) != (struct dirent *)NULL) { Trace((stderr, "do_wild: readdir returns %s\n", FnFilter1(file->d_name))); if (file->d_name[0] == '.' && G.wildname[0] != '.') continue; /* Unix: '*' and '?' do not match leading dot */ if (match(file->d_name, G.wildname, 0 WISEP) &&/*0=case sens.*/ /* skip "." and ".." directory entries */ strcmp(file->d_name, ".") && strcmp(file->d_name, "..")) { Trace((stderr, "do_wild: match() succeeds\n")); if (G.have_dirname) { strcpy(G.matchname, G.dirname); strcpy(G.matchname+G.dirnamelen, file->d_name); } else strcpy(G.matchname, file->d_name); return G.matchname; } } /* if we get to here directory is exhausted, so close it */ closedir((DIR *)G.wild_dir); G.wild_dir = (zvoid *)NULL; } Trace((stderr, "do_wild: opendir(%s) returns NULL\n", FnFilter1(G.dirname))); /* return the raw wildspec in case that works (e.g., directory not * searchable, but filespec was not wild and file is readable) */ strncpy(G.matchname, wildspec, FILNAMSIZ); G.matchname[FILNAMSIZ-1] = '\0'; return G.matchname; } /* last time through, might have failed opendir but returned raw wildspec */ if ((DIR *)G.wild_dir == (DIR *)NULL) { G.notfirstcall = FALSE; /* nothing left--reset for new wildspec */ if (G.have_dirname) free(G.dirname); return (char *)NULL; } /* If we've gotten this far, we've read and matched at least one entry * successfully (in a previous call), so dirname has been copied into * matchname already. */ while ((file = readdir((DIR *)G.wild_dir)) != (struct dirent *)NULL) { Trace((stderr, "do_wild: readdir returns %s\n", FnFilter1(file->d_name))); if (file->d_name[0] == '.' && G.wildname[0] != '.') continue; /* Unix: '*' and '?' do not match leading dot */ if (match(file->d_name, G.wildname, 0 WISEP)) { /* 0 == case sens. */ Trace((stderr, "do_wild: match() succeeds\n")); if (G.have_dirname) { /* strcpy(G.matchname, G.dirname); */ strcpy(G.matchname+G.dirnamelen, file->d_name); } else strcpy(G.matchname, file->d_name); return G.matchname; } } closedir((DIR *)G.wild_dir); /* at least one entry read; nothing left */ G.wild_dir = (zvoid *)NULL; G.notfirstcall = FALSE; /* reset for new wildspec */ if (G.have_dirname) free(G.dirname); return (char *)NULL; } /* end function do_wild() */ #endif /* !SFX */ #ifndef S_ISUID # define S_ISUID 0004000 /* set user id on execution */ #endif #ifndef S_ISGID # define S_ISGID 0002000 /* set group id on execution */ #endif #ifndef S_ISVTX # define S_ISVTX 0001000 /* save swapped text even after use */ #endif /************************/ /* Function filtattr() */ /************************/ /* This is used to clear or keep the SUID and SGID bits on file permissions. * It's possible that a file in an archive could have one of these bits set * and, unknown to the person unzipping, could allow others to execute the * file as the user or group. The new option -K bypasses this check. */ static unsigned filtattr(__G__ perms) __GDEF unsigned perms; { /* keep setuid/setgid/tacky perms? */ if (!uO.K_flag) perms &= ~(S_ISUID | S_ISGID | S_ISVTX); return (0xffff & perms); } /* end function filtattr() */ /**********************/ /* Function mapattr() */ /**********************/ int mapattr(__G) __GDEF { int r; ulg tmp = G.crec.external_file_attributes; G.pInfo->file_attr = 0; /* initialized to 0 for check in "default" branch below... */ switch (G.pInfo->hostnum) { case AMIGA_: tmp = (unsigned)(tmp>>17 & 7); /* Amiga RWE bits */ G.pInfo->file_attr = (unsigned)(tmp<<6 | tmp<<3 | tmp); break; case THEOS_: tmp &= 0xF1FFFFFFL; if ((tmp & 0xF0000000L) != 0x40000000L) tmp &= 0x01FFFFFFL; /* not a dir, mask all ftype bits */ else tmp &= 0x41FFFFFFL; /* leave directory bit as set */ /* fall through! */ case UNIX_: case VMS_: case ACORN_: case ATARI_: case ATHEOS_: case BEOS_: case QDOS_: case TANDEM_: r = FALSE; G.pInfo->file_attr = (unsigned)(tmp >> 16); if (G.pInfo->file_attr == 0 && G.extra_field) { /* Some (non-Info-ZIP) implementations of Zip for Unix and * VMS (and probably others ??) leave 0 in the upper 16-bit * part of the external_file_attributes field. Instead, they * store file permission attributes in some extra field. * As a work-around, we search for the presence of one of * these extra fields and fall back to the MSDOS compatible * part of external_file_attributes if one of the known * e.f. types has been detected. * Later, we might implement extraction of the permission * bits from the VMS extra field. But for now, the work-around * should be sufficient to provide "readable" extracted files. * (For ASI Unix e.f., an experimental remap of the e.f. * mode value IS already provided!) */ ush ebID; unsigned ebLen; uch *ef = G.extra_field; unsigned ef_len = G.crec.extra_field_length; while (!r && ef_len >= EB_HEADSIZE) { ebID = makeword(ef); ebLen = (unsigned)makeword(ef+EB_LEN); if (ebLen > (ef_len - EB_HEADSIZE)) /* discoverd some e.f. inconsistency! */ break; switch (ebID) { case EF_ASIUNIX: if (ebLen >= (EB_ASI_MODE+2)) { G.pInfo->file_attr = (unsigned)makeword(ef+(EB_HEADSIZE+EB_ASI_MODE)); /* force stop of loop: */ ef_len = (ebLen + EB_HEADSIZE); break; } /* else: fall through! */ case EF_PKVMS: /* "found nondecypherable e.f. with perm. attr" */ r = TRUE; default: break; } ef_len -= (ebLen + EB_HEADSIZE); ef += (ebLen + EB_HEADSIZE); } } if (!r) { #ifdef SYMLINKS /* Check if the file is a (POSIX-compatible) symbolic link. * We restrict symlink support to those "made-by" hosts that * are known to support symbolic links. */ G.pInfo->symlink = S_ISLNK(G.pInfo->file_attr) && SYMLINK_HOST(G.pInfo->hostnum); #endif return 0; } /* fall through! */ /* all remaining cases: expand MSDOS read-only bit into write perms */ case FS_FAT_: /* PKWARE's PKZip for Unix marks entries as FS_FAT_, but stores the * Unix attributes in the upper 16 bits of the external attributes * field, just like Info-ZIP's Zip for Unix. We try to use that * value, after a check for consistency with the MSDOS attribute * bits (see below). */ G.pInfo->file_attr = (unsigned)(tmp >> 16); /* fall through! */ case FS_HPFS_: case FS_NTFS_: case MAC_: case TOPS20_: default: /* Ensure that DOS subdir bit is set when the entry's name ends * in a '/'. Some third-party Zip programs fail to set the subdir * bit for directory entries. */ if ((tmp & 0x10) == 0) { extent fnlen = strlen(G.filename); if (fnlen > 0 && G.filename[fnlen-1] == '/') tmp |= 0x10; } /* read-only bit --> write perms; subdir bit --> dir exec bit */ tmp = !(tmp & 1) << 1 | (tmp & 0x10) >> 4; if ((G.pInfo->file_attr & 0700) == (unsigned)(0400 | tmp<<6)) { /* keep previous G.pInfo->file_attr setting, when its "owner" * part appears to be consistent with DOS attribute flags! */ #ifdef SYMLINKS /* Entries "made by FS_FAT_" could have been zipped on a * system that supports POSIX-style symbolic links. */ G.pInfo->symlink = S_ISLNK(G.pInfo->file_attr) && (G.pInfo->hostnum == FS_FAT_); #endif return 0; } G.pInfo->file_attr = (unsigned)(0444 | tmp<<6 | tmp<<3 | tmp); break; } /* end switch (host-OS-created-by) */ /* for originating systems with no concept of "group," "other," "system": */ umask( (int)(tmp=umask(0)) ); /* apply mask to expanded r/w(/x) perms */ G.pInfo->file_attr &= ~tmp; return 0; } /* end function mapattr() */ /************************/ /* Function mapname() */ /************************/ int mapname(__G__ renamed) __GDEF int renamed; /* * returns: * MPN_OK - no problem detected * MPN_INF_TRUNC - caution (truncated filename) * MPN_INF_SKIP - info "skip entry" (dir doesn't exist) * MPN_ERR_SKIP - error -> skip entry * MPN_ERR_TOOLONG - error -> path is too long * MPN_NOMEM - error (memory allocation failed) -> skip entry * [also MPN_VOL_LABEL, MPN_CREATED_DIR] */ { char pathcomp[FILNAMSIZ]; /* path-component buffer */ char *pp, *cp=(char *)NULL; /* character pointers */ char *lastsemi=(char *)NULL; /* pointer to last semi-colon in pathcomp */ #ifdef ACORN_FTYPE_NFS char *lastcomma=(char *)NULL; /* pointer to last comma in pathcomp */ RO_extra_block *ef_spark; /* pointer Acorn FTYPE ef block */ #endif int killed_ddot = FALSE; /* is set when skipping "../" pathcomp */ int error = MPN_OK; register unsigned workch; /* hold the character being tested */ /*--------------------------------------------------------------------------- Initialize various pointers and counters and stuff. ---------------------------------------------------------------------------*/ if (G.pInfo->vollabel) return MPN_VOL_LABEL; /* can't set disk volume labels in Unix */ /* can create path as long as not just freshening, or if user told us */ G.create_dirs = (!uO.fflag || renamed); G.created_dir = FALSE; /* not yet */ /* user gave full pathname: don't prepend rootpath */ G.renamed_fullpath = (renamed && (*G.filename == '/')); if (checkdir(__G__ (char *)NULL, INIT) == MPN_NOMEM) return MPN_NOMEM; /* initialize path buffer, unless no memory */ *pathcomp = '\0'; /* initialize translation buffer */ pp = pathcomp; /* point to translation buffer */ if (uO.jflag) /* junking directories */ cp = (char *)strrchr(G.filename, '/'); if (cp == (char *)NULL) /* no '/' or not junking dirs */ cp = G.filename; /* point to internal zipfile-member pathname */ else ++cp; /* point to start of last component of path */ /*--------------------------------------------------------------------------- Begin main loop through characters in filename. ---------------------------------------------------------------------------*/ while ((workch = (uch)*cp++) != 0) { switch (workch) { case '/': /* can assume -j flag not given */ *pp = '\0'; if (strcmp(pathcomp, ".") == 0) { /* don't bother appending "./" to the path */ *pathcomp = '\0'; } else if (!uO.ddotflag && strcmp(pathcomp, "..") == 0) { /* "../" dir traversal detected, skip over it */ *pathcomp = '\0'; killed_ddot = TRUE; /* set "show message" flag */ } /* when path component is not empty, append it now */ if (*pathcomp != '\0' && ((error = checkdir(__G__ pathcomp, APPEND_DIR)) & MPN_MASK) > MPN_INF_TRUNC) return error; pp = pathcomp; /* reset conversion buffer for next piece */ lastsemi = (char *)NULL; /* leave direct. semi-colons alone */ break; #ifdef __CYGWIN__ /* Cygwin runs on Win32, apply FAT/NTFS filename rules */ case ':': /* drive spec not stored, so no colon allowed */ case '\\': /* '\\' may come as normal filename char (not */ case '<': /* dir sep char!) from unix-like file system */ case '>': /* no redirection symbols allowed either */ case '|': /* no pipe signs allowed */ case '"': /* no double quotes allowed */ case '?': /* no wildcards allowed */ case '*': *pp++ = '_'; /* these rules apply equally to FAT and NTFS */ break; #endif case ';': /* VMS version (or DEC-20 attrib?) */ lastsemi = pp; *pp++ = ';'; /* keep for now; remove VMS ";##" */ break; /* later, if requested */ #ifdef ACORN_FTYPE_NFS case ',': /* NFS filetype extension */ lastcomma = pp; *pp++ = ','; /* keep for now; may need to remove */ break; /* later, if requested */ #endif #ifdef MTS case ' ': /* change spaces to underscore under */ *pp++ = '_'; /* MTS; leave as spaces under Unix */ break; #endif default: /* disable control character filter when requested, * else allow 8-bit characters (e.g. UTF-8) in filenames: */ if (uO.cflxflag || (isprint(workch) || (128 <= workch && workch <= 254))) *pp++ = (char)workch; } /* end switch */ } /* end while loop */ /* Show warning when stripping insecure "parent dir" path components */ if (killed_ddot && QCOND2) { Info(slide, 0, ((char *)slide, "warning: skipped \"../\" path component(s) in %s\n", FnFilter1(G.filename))); if (!(error & ~MPN_MASK)) error = (error & MPN_MASK) | PK_WARN; } /*--------------------------------------------------------------------------- Report if directory was created (and no file to create: filename ended in '/'), check name to be sure it exists, and combine path and name be- fore exiting. ---------------------------------------------------------------------------*/ if (G.filename[strlen(G.filename) - 1] == '/') { checkdir(__G__ G.filename, GETPATH); if (G.created_dir) { if (QCOND2) { Info(slide, 0, ((char *)slide, " creating: %s\n", FnFilter1(G.filename))); } #ifndef NO_CHMOD /* Filter out security-relevant attributes bits. */ G.pInfo->file_attr = filtattr(__G__ G.pInfo->file_attr); /* When extracting non-UNIX directories or when extracting * without UID/GID restoration or SGID preservation, any * SGID flag inherited from the parent directory should be * maintained to allow files extracted into this new folder * to inherit the GID setting from the parent directory. */ if (G.pInfo->hostnum != UNIX_ || !(uO.X_flag || uO.K_flag)) { /* preserve SGID bit when inherited from parent dir */ if (!SSTAT(G.filename, &G.statbuf)) { G.pInfo->file_attr |= G.statbuf.st_mode & S_ISGID; } else { perror("Could not read directory attributes"); } } /* set approx. dir perms (make sure can still read/write in dir) */ if (chmod(G.filename, G.pInfo->file_attr | 0700)) perror("chmod (directory attributes) error"); #endif /* set dir time (note trailing '/') */ return (error & ~MPN_MASK) | MPN_CREATED_DIR; } /* dir existed already; don't look for data to extract */ return (error & ~MPN_MASK) | MPN_INF_SKIP; } *pp = '\0'; /* done with pathcomp: terminate it */ /* if not saving them, remove VMS version numbers (appended ";###") */ if (!uO.V_flag && lastsemi) { pp = lastsemi + 1; while (isdigit((uch)(*pp))) ++pp; if (*pp == '\0') /* only digits between ';' and end: nuke */ *lastsemi = '\0'; } /* On UNIX (and compatible systems), "." and ".." are reserved for * directory navigation and cannot be used as regular file names. * These reserved one-dot and two-dot names are mapped to "_" and "__". */ if (strcmp(pathcomp, ".") == 0) *pathcomp = '_'; else if (strcmp(pathcomp, "..") == 0) strcpy(pathcomp, "__"); #ifdef ACORN_FTYPE_NFS /* translate Acorn filetype information if asked to do so */ if (uO.acorn_nfs_ext && (ef_spark = (RO_extra_block *) getRISCOSexfield(G.extra_field, G.lrec.extra_field_length)) != (RO_extra_block *)NULL) { /* file *must* have a RISC OS extra field */ long ft = (long)makelong(ef_spark->loadaddr); /*32-bit*/ if (lastcomma) { pp = lastcomma + 1; while (isxdigit((uch)(*pp))) ++pp; if (pp == lastcomma+4 && *pp == '\0') *lastcomma='\0'; /* nuke */ } if ((ft & 1<<31)==0) ft=0x000FFD00; sprintf(pathcomp+strlen(pathcomp), ",%03x", (int)(ft>>8) & 0xFFF); } #endif /* ACORN_FTYPE_NFS */ if (*pathcomp == '\0') { Info(slide, 1, ((char *)slide, "mapname: conversion of %s failed\n", FnFilter1(G.filename))); return (error & ~MPN_MASK) | MPN_ERR_SKIP; } checkdir(__G__ pathcomp, APPEND_NAME); /* returns 1 if truncated: care? */ checkdir(__G__ G.filename, GETPATH); return error; } /* end function mapname() */ #if 0 /*========== NOTES ==========*/ extract-to dir: a:path/ buildpath: path1/path2/ ... (NULL-terminated) pathcomp: filename mapname(): loop over chars in zipfile member name checkdir(path component, COMPONENT | CREATEDIR) --> map as required? (d:/tmp/unzip/) (disk:[tmp.unzip.) (d:/tmp/unzip/jj/) (disk:[tmp.unzip.jj.) (d:/tmp/unzip/jj/temp/) (disk:[tmp.unzip.jj.temp.) finally add filename itself and check for existence? (could use with rename) (d:/tmp/unzip/jj/temp/msg.outdir) (disk:[tmp.unzip.jj.temp]msg.outdir) checkdir(name, GETPATH) --> copy path to name and free space #endif /* 0 */ /***********************/ /* Function checkdir() */ /***********************/ int checkdir(__G__ pathcomp, flag) __GDEF char *pathcomp; int flag; /* * returns: * MPN_OK - no problem detected * MPN_INF_TRUNC - (on APPEND_NAME) truncated filename * MPN_INF_SKIP - path doesn't exist, not allowed to create * MPN_ERR_SKIP - path doesn't exist, tried to create and failed; or path * exists and is not a directory, but is supposed to be * MPN_ERR_TOOLONG - path is too long * MPN_NOMEM - can't allocate memory for filename buffers */ { /* static int rootlen = 0; */ /* length of rootpath */ /* static char *rootpath; */ /* user's "extract-to" directory */ /* static char *buildpath; */ /* full path (so far) to extracted file */ /* static char *end; */ /* pointer to end of buildpath ('\0') */ # define FN_MASK 7 # define FUNCTION (flag & FN_MASK) /*--------------------------------------------------------------------------- APPEND_DIR: append the path component to the path being built and check for its existence. If doesn't exist and we are creating directories, do so for this one; else signal success or error as appropriate. ---------------------------------------------------------------------------*/ if (FUNCTION == APPEND_DIR) { int too_long = FALSE; #ifdef SHORT_NAMES char *old_end = end; #endif Trace((stderr, "appending dir segment [%s]\n", FnFilter1(pathcomp))); while ((*G.end = *pathcomp++) != '\0') ++G.end; #ifdef SHORT_NAMES /* path components restricted to 14 chars, typically */ if ((G.end-old_end) > FILENAME_MAX) /* GRR: proper constant? */ *(G.end = old_end + FILENAME_MAX) = '\0'; #endif /* GRR: could do better check, see if overrunning buffer as we go: * check end-buildpath after each append, set warning variable if * within 20 of FILNAMSIZ; then if var set, do careful check when * appending. Clear variable when begin new path. */ /* next check: need to append '/', at least one-char name, '\0' */ if ((G.end-G.buildpath) > FILNAMSIZ-3) too_long = TRUE; /* check if extracting dir? */ if (SSTAT(G.buildpath, &G.statbuf)) { /* path doesn't exist */ if (!G.create_dirs) { /* told not to create (freshening) */ free(G.buildpath); return MPN_INF_SKIP; /* path doesn't exist: nothing to do */ } if (too_long) { Info(slide, 1, ((char *)slide, "checkdir error: path too long: %s\n", FnFilter1(G.buildpath))); free(G.buildpath); /* no room for filenames: fatal */ return MPN_ERR_TOOLONG; } if (mkdir(G.buildpath, 0777) == -1) { /* create the directory */ Info(slide, 1, ((char *)slide, "checkdir error: cannot create %s\n\ %s\n\ unable to process %s.\n", FnFilter2(G.buildpath), strerror(errno), FnFilter1(G.filename))); free(G.buildpath); /* path didn't exist, tried to create, failed */ return MPN_ERR_SKIP; } G.created_dir = TRUE; } else if (!S_ISDIR(G.statbuf.st_mode)) { Info(slide, 1, ((char *)slide, "checkdir error: %s exists but is not directory\n\ unable to process %s.\n", FnFilter2(G.buildpath), FnFilter1(G.filename))); free(G.buildpath); /* path existed but wasn't dir */ return MPN_ERR_SKIP; } if (too_long) { Info(slide, 1, ((char *)slide, "checkdir error: path too long: %s\n", FnFilter1(G.buildpath))); free(G.buildpath); /* no room for filenames: fatal */ return MPN_ERR_TOOLONG; } *G.end++ = '/'; *G.end = '\0'; Trace((stderr, "buildpath now = [%s]\n", FnFilter1(G.buildpath))); return MPN_OK; } /* end if (FUNCTION == APPEND_DIR) */ /*--------------------------------------------------------------------------- GETPATH: copy full path to the string pointed at by pathcomp, and free G.buildpath. ---------------------------------------------------------------------------*/ if (FUNCTION == GETPATH) { strcpy(pathcomp, G.buildpath); Trace((stderr, "getting and freeing path [%s]\n", FnFilter1(pathcomp))); free(G.buildpath); G.buildpath = G.end = (char *)NULL; return MPN_OK; } /*--------------------------------------------------------------------------- APPEND_NAME: assume the path component is the filename; append it and return without checking for existence. ---------------------------------------------------------------------------*/ if (FUNCTION == APPEND_NAME) { #ifdef SHORT_NAMES char *old_end = end; #endif Trace((stderr, "appending filename [%s]\n", FnFilter1(pathcomp))); while ((*G.end = *pathcomp++) != '\0') { ++G.end; #ifdef SHORT_NAMES /* truncate name at 14 characters, typically */ if ((G.end-old_end) > FILENAME_MAX) /* GRR: proper constant? */ *(G.end = old_end + FILENAME_MAX) = '\0'; #endif if ((G.end-G.buildpath) >= FILNAMSIZ) { *--G.end = '\0'; Info(slide, 0x201, ((char *)slide, "checkdir warning: path too long; truncating\n\ %s\n -> %s\n", FnFilter1(G.filename), FnFilter2(G.buildpath))); return MPN_INF_TRUNC; /* filename truncated */ } } Trace((stderr, "buildpath now = [%s]\n", FnFilter1(G.buildpath))); /* could check for existence here, prompt for new name... */ return MPN_OK; } /*--------------------------------------------------------------------------- INIT: allocate and initialize buffer space for the file currently being extracted. If file was renamed with an absolute path, don't prepend the extract-to path. ---------------------------------------------------------------------------*/ /* GRR: for VMS and TOPS-20, add up to 13 to strlen */ if (FUNCTION == INIT) { Trace((stderr, "initializing buildpath to ")); #ifdef ACORN_FTYPE_NFS if ((G.buildpath = (char *)malloc(strlen(G.filename)+G.rootlen+ (uO.acorn_nfs_ext ? 5 : 1))) #else if ((G.buildpath = (char *)malloc(strlen(G.filename)+G.rootlen+1)) #endif == (char *)NULL) return MPN_NOMEM; if ((G.rootlen > 0) && !G.renamed_fullpath) { strcpy(G.buildpath, G.rootpath); G.end = G.buildpath + G.rootlen; } else { *G.buildpath = '\0'; G.end = G.buildpath; } Trace((stderr, "[%s]\n", FnFilter1(G.buildpath))); return MPN_OK; } /*--------------------------------------------------------------------------- ROOT: if appropriate, store the path in rootpath and create it if necessary; else assume it's a zipfile member and return. This path segment gets used in extracting all members from every zipfile specified on the command line. ---------------------------------------------------------------------------*/ #if (!defined(SFX) || defined(SFX_EXDIR)) if (FUNCTION == ROOT) { Trace((stderr, "initializing root path to [%s]\n", FnFilter1(pathcomp))); if (pathcomp == (char *)NULL) { G.rootlen = 0; return MPN_OK; } if (G.rootlen > 0) /* rootpath was already set, nothing to do */ return MPN_OK; if ((G.rootlen = strlen(pathcomp)) > 0) { char *tmproot; if ((tmproot = (char *)malloc(G.rootlen+2)) == (char *)NULL) { G.rootlen = 0; return MPN_NOMEM; } strcpy(tmproot, pathcomp); if (tmproot[G.rootlen-1] == '/') { tmproot[--G.rootlen] = '\0'; } if (G.rootlen > 0 && (SSTAT(tmproot, &G.statbuf) || !S_ISDIR(G.statbuf.st_mode))) { /* path does not exist */ if (!G.create_dirs /* || iswild(tmproot) */ ) { free(tmproot); G.rootlen = 0; /* skip (or treat as stored file) */ return MPN_INF_SKIP; } /* create the directory (could add loop here scanning tmproot * to create more than one level, but why really necessary?) */ if (mkdir(tmproot, 0777) == -1) { Info(slide, 1, ((char *)slide, "checkdir: cannot create extraction directory: %s\n\ %s\n", FnFilter1(tmproot), strerror(errno))); free(tmproot); G.rootlen = 0; /* path didn't exist, tried to create, and failed: */ /* file exists, or 2+ subdir levels required */ return MPN_ERR_SKIP; } } tmproot[G.rootlen++] = '/'; tmproot[G.rootlen] = '\0'; if ((G.rootpath = (char *)realloc(tmproot, G.rootlen+1)) == NULL) { free(tmproot); G.rootlen = 0; return MPN_NOMEM; } Trace((stderr, "rootpath now = [%s]\n", FnFilter1(G.rootpath))); } return MPN_OK; } #endif /* !SFX || SFX_EXDIR */ /*--------------------------------------------------------------------------- END: free rootpath, immediately prior to program exit. ---------------------------------------------------------------------------*/ if (FUNCTION == END) { Trace((stderr, "freeing rootpath\n")); if (G.rootlen > 0) { free(G.rootpath); G.rootlen = 0; } return MPN_OK; } return MPN_INVALID; /* should never reach */ } /* end function checkdir() */ #ifdef NO_MKDIR /********************/ /* Function mkdir() */ /********************/ int mkdir(path, mode) ZCONST char *path; int mode; /* ignored */ /* * returns: 0 - successful * -1 - failed (errno not set, however) */ { char command[FILNAMSIZ+40]; /* buffer for system() call */ /* GRR 930416: added single quotes around path to avoid bug with * creating directories with ampersands in name; not yet tested */ sprintf(command, "IFS=\" \t\n\" /bin/mkdir '%s' 2>/dev/null", path); if (system(command)) return -1; return 0; } #endif /* NO_MKDIR */ #if (!defined(MTS) || defined(SET_DIR_ATTRIB)) static int get_extattribs OF((__GPRO__ iztimes *pzt, ulg z_uidgid[2])); static int get_extattribs(__G__ pzt, z_uidgid) __GDEF iztimes *pzt; ulg z_uidgid[2]; { /*--------------------------------------------------------------------------- Convert from MSDOS-format local time and date to Unix-format 32-bit GMT time: adjust base year from 1980 to 1970, do usual conversions from yy/mm/dd hh:mm:ss to elapsed seconds, and account for timezone and day- light savings time differences. If we have a Unix extra field, however, we're laughing: both mtime and atime are ours. On the other hand, we then have to check for restoration of UID/GID. ---------------------------------------------------------------------------*/ int have_uidgid_flg; unsigned eb_izux_flg; eb_izux_flg = (G.extra_field ? ef_scan_for_izux(G.extra_field, G.lrec.extra_field_length, 0, G.lrec.last_mod_dos_datetime, #ifdef IZ_CHECK_TZ (G.tz_is_valid ? pzt : NULL), #else pzt, #endif z_uidgid) : 0); if (eb_izux_flg & EB_UT_FL_MTIME) { TTrace((stderr, "\nget_extattribs: Unix e.f. modif. time = %ld\n", pzt->mtime)); } else { pzt->mtime = dos_to_unix_time(G.lrec.last_mod_dos_datetime); } if (eb_izux_flg & EB_UT_FL_ATIME) { TTrace((stderr, "get_extattribs: Unix e.f. access time = %ld\n", pzt->atime)); } else { pzt->atime = pzt->mtime; TTrace((stderr, "\nget_extattribs: modification/access times = %ld\n", pzt->mtime)); } /* if -X option was specified and we have UID/GID info, restore it */ have_uidgid_flg = #ifdef RESTORE_UIDGID (uO.X_flag && (eb_izux_flg & EB_UX2_VALID)); #else 0; #endif return have_uidgid_flg; } #endif /* !MTS || SET_DIR_ATTRIB */ #ifndef MTS /****************************/ /* Function close_outfile() */ /****************************/ void close_outfile(__G) /* GRR: change to return PK-style warning level */ __GDEF { union { iztimes t3; /* mtime, atime, ctime */ ztimbuf t2; /* modtime, actime */ } zt; ulg z_uidgid[2]; int have_uidgid_flg; have_uidgid_flg = get_extattribs(__G__ &(zt.t3), z_uidgid); /*--------------------------------------------------------------------------- If symbolic links are supported, allocate storage for a symlink control structure, put the uncompressed "data" and other required info in it, and add the structure to the "deferred symlinks" chain. Since we know it's a symbolic link to start with, we shouldn't have to worry about overflowing unsigned ints with unsigned longs. ---------------------------------------------------------------------------*/ #ifdef SYMLINKS if (G.symlnk) { extent ucsize = (extent)G.lrec.ucsize; # ifdef SET_SYMLINK_ATTRIBS extent attribsize = sizeof(unsigned) + (have_uidgid_flg ? sizeof(z_uidgid) : 0); # else extent attribsize = 0; # endif /* size of the symlink entry is the sum of * (struct size (includes 1st '\0') + 1 additional trailing '\0'), * system specific attribute data size (might be 0), * and the lengths of name and link target. */ extent slnk_entrysize = (sizeof(slinkentry) + 1) + attribsize + ucsize + strlen(G.filename); slinkentry *slnk_entry; if (slnk_entrysize < ucsize) { Info(slide, 0x201, ((char *)slide, "warning: symbolic link (%s) failed: mem alloc overflow\n", FnFilter1(G.filename))); fclose(G.outfile); return; } if ((slnk_entry = (slinkentry *)malloc(slnk_entrysize)) == NULL) { Info(slide, 0x201, ((char *)slide, "warning: symbolic link (%s) failed: no mem\n", FnFilter1(G.filename))); fclose(G.outfile); return; } slnk_entry->next = NULL; slnk_entry->targetlen = ucsize; slnk_entry->attriblen = attribsize; # ifdef SET_SYMLINK_ATTRIBS memcpy(slnk_entry->buf, &(G.pInfo->file_attr), sizeof(unsigned)); if (have_uidgid_flg) memcpy(slnk_entry->buf + 4, z_uidgid, sizeof(z_uidgid)); # endif slnk_entry->target = slnk_entry->buf + slnk_entry->attriblen; slnk_entry->fname = slnk_entry->target + ucsize + 1; strcpy(slnk_entry->fname, G.filename); /* move back to the start of the file to re-read the "link data" */ rewind(G.outfile); if (fread(slnk_entry->target, 1, ucsize, G.outfile) != ucsize) { Info(slide, 0x201, ((char *)slide, "warning: symbolic link (%s) failed\n", FnFilter1(G.filename))); free(slnk_entry); fclose(G.outfile); return; } fclose(G.outfile); /* close "link" file for good... */ slnk_entry->target[ucsize] = '\0'; if (QCOND2) Info(slide, 0, ((char *)slide, "-> %s ", FnFilter1(slnk_entry->target))); /* add this symlink record to the list of deferred symlinks */ if (G.slink_last != NULL) G.slink_last->next = slnk_entry; else G.slink_head = slnk_entry; G.slink_last = slnk_entry; return; } #endif /* SYMLINKS */ #ifdef QLZIP if (G.extra_field) { static void qlfix OF((__GPRO__ uch *ef_ptr, unsigned ef_len)); qlfix(__G__ G.extra_field, G.lrec.extra_field_length); } #endif #if (defined(NO_FCHOWN)) fclose(G.outfile); #endif /* if -X option was specified and we have UID/GID info, restore it */ if (have_uidgid_flg /* check that both uid and gid values fit into their data sizes */ && ((ulg)(uid_t)(z_uidgid[0]) == z_uidgid[0]) && ((ulg)(gid_t)(z_uidgid[1]) == z_uidgid[1])) { TTrace((stderr, "close_outfile: restoring Unix UID/GID info\n")); #if (defined(NO_FCHOWN)) if (chown(G.filename, (uid_t)z_uidgid[0], (gid_t)z_uidgid[1])) #else if (fchown(fileno(G.outfile), (uid_t)z_uidgid[0], (gid_t)z_uidgid[1])) #endif { if (uO.qflag) Info(slide, 0x201, ((char *)slide, CannotSetItemUidGid, z_uidgid[0], z_uidgid[1], FnFilter1(G.filename), strerror(errno))); else Info(slide, 0x201, ((char *)slide, CannotSetUidGid, z_uidgid[0], z_uidgid[1], strerror(errno))); } } #if (!defined(NO_FCHOWN) && defined(NO_FCHMOD)) fclose(G.outfile); #endif #if (!defined(NO_FCHOWN) && !defined(NO_FCHMOD)) /*--------------------------------------------------------------------------- Change the file permissions from default ones to those stored in the zipfile. ---------------------------------------------------------------------------*/ if (fchmod(fileno(G.outfile), filtattr(__G__ G.pInfo->file_attr))) perror("fchmod (file attributes) error"); fclose(G.outfile); #endif /* !NO_FCHOWN && !NO_FCHMOD */ /* skip restoring time stamps on user's request */ if (uO.D_flag <= 1) { /* set the file's access and modification times */ if (utime(G.filename, &(zt.t2))) { if (uO.qflag) Info(slide, 0x201, ((char *)slide, CannotSetItemTimestamps, FnFilter1(G.filename), strerror(errno))); else Info(slide, 0x201, ((char *)slide, CannotSetTimestamps, strerror(errno))); } } #if (defined(NO_FCHOWN) || defined(NO_FCHMOD)) /*--------------------------------------------------------------------------- Change the file permissions from default ones to those stored in the zipfile. ---------------------------------------------------------------------------*/ #ifndef NO_CHMOD if (chmod(G.filename, filtattr(__G__ G.pInfo->file_attr))) perror("chmod (file attributes) error"); #endif #endif /* NO_FCHOWN || NO_FCHMOD */ } /* end function close_outfile() */ #endif /* !MTS */ #if (defined(SYMLINKS) && defined(SET_SYMLINK_ATTRIBS)) int set_symlnk_attribs(__G__ slnk_entry) __GDEF slinkentry *slnk_entry; { if (slnk_entry->attriblen > 0) { # if (!defined(NO_LCHOWN)) if (slnk_entry->attriblen > sizeof(unsigned)) { ulg *z_uidgid_p = (zvoid *)(slnk_entry->buf + sizeof(unsigned)); /* check that both uid and gid values fit into their data sizes */ if (((ulg)(uid_t)(z_uidgid_p[0]) == z_uidgid_p[0]) && ((ulg)(gid_t)(z_uidgid_p[1]) == z_uidgid_p[1])) { TTrace((stderr, "set_symlnk_attribs: restoring Unix UID/GID info for\n\ %s\n", FnFilter1(slnk_entry->fname))); if (lchown(slnk_entry->fname, (uid_t)z_uidgid_p[0], (gid_t)z_uidgid_p[1])) { Info(slide, 0x201, ((char *)slide, CannotSetItemUidGid, z_uidgid_p[0], z_uidgid_p[1], FnFilter1(slnk_entry->fname), strerror(errno))); } } } # endif /* !NO_LCHOWN */ # if (!defined(NO_LCHMOD)) TTrace((stderr, "set_symlnk_attribs: restoring Unix attributes for\n %s\n", FnFilter1(slnk_entry->fname))); if (lchmod(slnk_entry->fname, filtattr(__G__ *(unsigned *)(zvoid *)slnk_entry->buf))) perror("lchmod (file attributes) error"); # endif /* !NO_LCHMOD */ } /* currently, no error propagation... */ return PK_OK; } /* end function set_symlnk_attribs() */ #endif /* SYMLINKS && SET_SYMLINK_ATTRIBS */ #ifdef SET_DIR_ATTRIB /* messages of code for setting directory attributes */ # ifndef NO_CHMOD static ZCONST char DirlistChmodFailed[] = "warning: cannot set permissions for %s\n %s\n"; # endif int defer_dir_attribs(__G__ pd) __GDEF direntry **pd; { uxdirattr *d_entry; d_entry = (uxdirattr *)malloc(sizeof(uxdirattr) + strlen(G.filename)); *pd = (direntry *)d_entry; if (d_entry == (uxdirattr *)NULL) { return PK_MEM; } d_entry->fn = d_entry->fnbuf; strcpy(d_entry->fn, G.filename); d_entry->perms = G.pInfo->file_attr; d_entry->have_uidgid = get_extattribs(__G__ &(d_entry->u.t3), d_entry->uidgid); return PK_OK; } /* end function defer_dir_attribs() */ int set_direc_attribs(__G__ d) __GDEF direntry *d; { int errval = PK_OK; if (UxAtt(d)->have_uidgid && /* check that both uid and gid values fit into their data sizes */ ((ulg)(uid_t)(UxAtt(d)->uidgid[0]) == UxAtt(d)->uidgid[0]) && ((ulg)(gid_t)(UxAtt(d)->uidgid[1]) == UxAtt(d)->uidgid[1]) && chown(UxAtt(d)->fn, (uid_t)UxAtt(d)->uidgid[0], (gid_t)UxAtt(d)->uidgid[1])) { Info(slide, 0x201, ((char *)slide, CannotSetItemUidGid, UxAtt(d)->uidgid[0], UxAtt(d)->uidgid[1], FnFilter1(d->fn), strerror(errno))); if (!errval) errval = PK_WARN; } /* Skip restoring directory time stamps on user' request. */ if (uO.D_flag <= 0) { /* restore directory timestamps */ if (utime(d->fn, &UxAtt(d)->u.t2)) { Info(slide, 0x201, ((char *)slide, CannotSetItemTimestamps, FnFilter1(d->fn), strerror(errno))); if (!errval) errval = PK_WARN; } } #ifndef NO_CHMOD if (chmod(d->fn, UxAtt(d)->perms)) { Info(slide, 0x201, ((char *)slide, DirlistChmodFailed, FnFilter1(d->fn), strerror(errno))); if (!errval) errval = PK_WARN; } #endif /* !NO_CHMOD */ return errval; } /* end function set_direc_attribs() */ #endif /* SET_DIR_ATTRIB */ #ifdef TIMESTAMP /***************************/ /* Function stamp_file() */ /***************************/ int stamp_file(fname, modtime) ZCONST char *fname; time_t modtime; { ztimbuf tp; tp.modtime = tp.actime = modtime; return (utime(fname, &tp)); } /* end function stamp_file() */ #endif /* TIMESTAMP */ #ifndef SFX /************************/ /* Function version() */ /************************/ void version(__G) __GDEF { #if (defined(__GNUC__) && defined(NX_CURRENT_COMPILER_RELEASE)) char cc_namebuf[40]; char cc_versbuf[40]; #else #if (defined(__SUNPRO_C)) char cc_versbuf[17]; #else #if (defined(__HP_cc) || defined(__IBMC__)) char cc_versbuf[25]; #else #if (defined(__DECC_VER)) char cc_versbuf[17]; int cc_verstyp; #else #if (defined(CRAY) && defined(_RELEASE)) char cc_versbuf[40]; #endif /* (CRAY && _RELEASE) */ #endif /* __DECC_VER */ #endif /* __HP_cc || __IBMC__ */ #endif /* __SUNPRO_C */ #endif /* (__GNUC__ && NX_CURRENT_COMPILER_RELEASE) */ #if ((defined(CRAY) || defined(cray)) && defined(_UNICOS)) char os_namebuf[40]; #else #if defined(__NetBSD__) char os_namebuf[40]; #endif #endif /* Pyramid, NeXT have problems with huge macro expansion, too: no Info() */ sprintf((char *)slide, LoadFarString(CompiledWith), #ifdef __GNUC__ # ifdef NX_CURRENT_COMPILER_RELEASE (sprintf(cc_namebuf, "NeXT DevKit %d.%02d ", NX_CURRENT_COMPILER_RELEASE/100, NX_CURRENT_COMPILER_RELEASE%100), cc_namebuf), (strlen(__VERSION__) > 8)? "(gcc)" : (sprintf(cc_versbuf, "(gcc %s)", __VERSION__), cc_versbuf), # else "gcc ", __VERSION__, # endif #else #if defined(__SUNPRO_C) "Sun C ", (sprintf(cc_versbuf, "version %x", __SUNPRO_C), cc_versbuf), #else #if (defined(__HP_cc)) "HP C ", (((__HP_cc% 100) == 0) ? (sprintf(cc_versbuf, "version A.%02d.%02d", (__HP_cc/ 10000), ((__HP_cc% 10000)/ 100))) : (sprintf(cc_versbuf, "version A.%02d.%02d.%02d", (__HP_cc/ 10000), ((__HP_cc% 10000)/ 100), (__HP_cc% 100))), cc_versbuf), #else #if (defined(__DECC_VER)) "DEC C ", (sprintf(cc_versbuf, "%c%d.%d-%03d", ((cc_verstyp = (__DECC_VER / 10000) % 10) == 6 ? 'T' : (cc_verstyp == 8 ? 'S' : 'V')), __DECC_VER / 10000000, (__DECC_VER % 10000000) / 100000, __DECC_VER % 1000), cc_versbuf), #else #if defined(CRAY) && defined(_RELEASE) "cc ", (sprintf(cc_versbuf, "version %d", _RELEASE), cc_versbuf), #else #ifdef __IBMC__ "IBM C ", (sprintf(cc_versbuf, "version %d.%d.%d", (__IBMC__ / 100), ((__IBMC__ / 10) % 10), (__IBMC__ % 10)), cc_versbuf), #else #ifdef __VERSION__ # ifndef IZ_CC_NAME # define IZ_CC_NAME "cc " # endif IZ_CC_NAME, __VERSION__ #else # ifndef IZ_CC_NAME # define IZ_CC_NAME "cc" # endif IZ_CC_NAME, "", #endif /* ?__VERSION__ */ #endif /* ?__IBMC__ */ #endif /* ?(CRAY && _RELEASE) */ #endif /* ?__DECC_VER */ #endif /* ?__HP_cc */ #endif /* ?__SUNPRO_C */ #endif /* ?__GNUC__ */ #ifndef IZ_OS_NAME # define IZ_OS_NAME "Unix" #endif IZ_OS_NAME, #if defined(sgi) || defined(__sgi) " (Silicon Graphics IRIX)", #else #ifdef sun # ifdef sparc # ifdef __SVR4 " (Sun SPARC/Solaris)", # else /* may or may not be SunOS */ " (Sun SPARC)", # endif # else # if defined(sun386) || defined(i386) " (Sun 386i)", # else # if defined(mc68020) || defined(__mc68020__) " (Sun 3)", # else /* mc68010 or mc68000: Sun 2 or earlier */ " (Sun 2)", # endif # endif # endif #else #ifdef __hpux " (HP-UX)", #else #ifdef __osf__ " (DEC OSF/1)", #else #ifdef _AIX " (IBM AIX)", #else #ifdef aiws " (IBM RT/AIX)", #else #if defined(CRAY) || defined(cray) # ifdef _UNICOS (sprintf(os_namebuf, " (Cray UNICOS release %d)", _UNICOS), os_namebuf), # else " (Cray UNICOS)", # endif #else #if defined(uts) || defined(UTS) " (Amdahl UTS)", #else #ifdef NeXT # ifdef mc68000 " (NeXTStep/black)", # else " (NeXTStep for Intel)", # endif #else /* the next dozen or so are somewhat order-dependent */ #ifdef LINUX # ifdef __ELF__ " (Linux ELF)", # else " (Linux a.out)", # endif #else #ifdef MINIX " (Minix)", #else #ifdef M_UNIX " (SCO Unix)", #else #ifdef M_XENIX " (SCO Xenix)", #else #ifdef __NetBSD__ # ifdef NetBSD0_8 (sprintf(os_namebuf, " (NetBSD 0.8%c)", (char)(NetBSD0_8 - 1 + 'A')), os_namebuf), # else # ifdef NetBSD0_9 (sprintf(os_namebuf, " (NetBSD 0.9%c)", (char)(NetBSD0_9 - 1 + 'A')), os_namebuf), # else # ifdef NetBSD1_0 (sprintf(os_namebuf, " (NetBSD 1.0%c)", (char)(NetBSD1_0 - 1 + 'A')), os_namebuf), # else (BSD4_4 == 0.5)? " (NetBSD before 0.9)" : " (NetBSD 1.1 or later)", # endif # endif # endif #else #ifdef __FreeBSD__ (BSD4_4 == 0.5)? " (FreeBSD 1.x)" : " (FreeBSD 2.0 or later)", #else #ifdef __bsdi__ (BSD4_4 == 0.5)? " (BSD/386 1.0)" : " (BSD/386 1.1 or later)", #else #ifdef __386BSD__ (BSD4_4 == 1)? " (386BSD, post-4.4 release)" : " (386BSD)", #else #ifdef __CYGWIN__ " (Cygwin)", #else #if defined(i686) || defined(__i686) || defined(__i686__) " (Intel 686)", #else #if defined(i586) || defined(__i586) || defined(__i586__) " (Intel 586)", #else #if defined(i486) || defined(__i486) || defined(__i486__) " (Intel 486)", #else #if defined(i386) || defined(__i386) || defined(__i386__) " (Intel 386)", #else #ifdef pyr " (Pyramid)", #else #ifdef ultrix # ifdef mips " (DEC/MIPS)", # else # ifdef vax " (DEC/VAX)", # else /* __alpha? */ " (DEC/Alpha)", # endif # endif #else #ifdef gould " (Gould)", #else #ifdef MTS " (MTS)", #else #ifdef __convexc__ " (Convex)", #else #ifdef __QNX__ " (QNX 4)", #else #ifdef __QNXNTO__ " (QNX Neutrino)", #else #ifdef Lynx " (LynxOS)", #else #ifdef __APPLE__ # ifdef __i386__ " Mac OS X Intel i32", # else # ifdef __ppc__ " Mac OS X PowerPC", # else # ifdef __ppc64__ " Mac OS X PowerPC64", # else " Mac OS X", # endif /* __ppc64__ */ # endif /* __ppc__ */ # endif /* __i386__ */ #else "", #endif /* Apple */ #endif /* Lynx */ #endif /* QNX Neutrino */ #endif /* QNX 4 */ #endif /* Convex */ #endif /* MTS */ #endif /* Gould */ #endif /* DEC */ #endif /* Pyramid */ #endif /* 386 */ #endif /* 486 */ #endif /* 586 */ #endif /* 686 */ #endif /* Cygwin */ #endif /* 386BSD */ #endif /* BSDI BSD/386 */ #endif /* NetBSD */ #endif /* FreeBSD */ #endif /* SCO Xenix */ #endif /* SCO Unix */ #endif /* Minix */ #endif /* Linux */ #endif /* NeXT */ #endif /* Amdahl */ #endif /* Cray */ #endif /* RT/AIX */ #endif /* AIX */ #endif /* OSF/1 */ #endif /* HP-UX */ #endif /* Sun */ #endif /* SGI */ #ifdef __DATE__ " on ", __DATE__ #else "", "" #endif ); (*G.message)((zvoid *)&G, slide, (ulg)strlen((char *)slide), 0); } /* end function version() */ #endif /* !SFX */ #ifdef QLZIP struct qdirect { long d_length __attribute__ ((packed)); /* file length */ unsigned char d_access __attribute__ ((packed)); /* file access type */ unsigned char d_type __attribute__ ((packed)); /* file type */ long d_datalen __attribute__ ((packed)); /* data length */ long d_reserved __attribute__ ((packed));/* Unused */ short d_szname __attribute__ ((packed)); /* size of name */ char d_name[36] __attribute__ ((packed));/* name area */ long d_update __attribute__ ((packed)); /* last update */ long d_refdate __attribute__ ((packed)); long d_backup __attribute__ ((packed)); /* EOD */ }; #define LONGID "QDOS02" #define EXTRALEN (sizeof(struct qdirect) + 8) #define JBLONGID "QZHD" #define JBEXTRALEN (sizeof(jbextra) - 4 * sizeof(char)) typedef struct { char eb_header[4] __attribute__ ((packed)); /* place_holder */ char longid[8] __attribute__ ((packed)); struct qdirect header __attribute__ ((packed)); } qdosextra; typedef struct { char eb_header[4]; /* place_holder */ char longid[4]; struct qdirect header; } jbextra; /* The following two functions SH() and LG() convert big-endian short * and long numbers into native byte order. They are some kind of * counterpart to the generic UnZip's makeword() and makelong() functions. */ static ush SH(ush val) { uch swapbuf[2]; swapbuf[1] = (uch)(val & 0xff); swapbuf[0] = (uch)(val >> 8); return (*(ush *)swapbuf); } static ulg LG(ulg val) { /* convert the big-endian unsigned long number `val' to the machine * dependent representation */ ush swapbuf[2]; swapbuf[1] = SH((ush)(val & 0xffff)); swapbuf[0] = SH((ush)(val >> 16)); return (*(ulg *)swapbuf); } static void qlfix(__G__ ef_ptr, ef_len) __GDEF uch *ef_ptr; unsigned ef_len; { while (ef_len >= EB_HEADSIZE) { unsigned eb_id = makeword(EB_ID + ef_ptr); unsigned eb_len = makeword(EB_LEN + ef_ptr); if (eb_len > (ef_len - EB_HEADSIZE)) { /* discovered some extra field inconsistency! */ Trace((stderr, "qlfix: block length %u > rest ef_size %u\n", eb_len, ef_len - EB_HEADSIZE)); break; } switch (eb_id) { case EF_QDOS: { struct _ntc_ { long id; long dlen; } ntc; long dlen = 0; qdosextra *extra = (qdosextra *)ef_ptr; jbextra *jbp = (jbextra *)ef_ptr; if (!strncmp(extra->longid, LONGID, strlen(LONGID))) { if (eb_len != EXTRALEN) if (uO.qflag) Info(slide, 0x201, ((char *)slide, "warning: invalid length in Qdos field for %s\n", FnFilter1(G.filename))); else Info(slide, 0x201, ((char *)slide, "warning: invalid length in Qdos field")); if (extra->header.d_type) { dlen = extra->header.d_datalen; } } if (!strncmp(jbp->longid, JBLONGID, strlen(JBLONGID))) { if (eb_len != JBEXTRALEN) if (uO.qflag) Info(slide, 0x201, ((char *)slide, "warning: invalid length in QZ field for %s\n", FnFilter1(G.filename))); else Info(slide, 0x201, ((char *)slide, "warning: invalid length in QZ field")); if (jbp->header.d_type) { dlen = jbp->header.d_datalen; } } if ((long)LG(dlen) > 0) { zfseeko(G.outfile, -8, SEEK_END); fread(&ntc, 8, 1, G.outfile); if (ntc.id != *(long *)"XTcc") { ntc.id = *(long *)"XTcc"; ntc.dlen = dlen; fwrite (&ntc, 8, 1, G.outfile); } Info(slide, 0x201, ((char *)slide, "QData = %d", LG(dlen))); } return; /* finished, cancel further extra field scanning */ } default: Trace((stderr,"qlfix: unknown extra field block, ID=%d\n", eb_id)); } /* Skip this extra field block */ ef_ptr += (eb_len + EB_HEADSIZE); ef_len -= (eb_len + EB_HEADSIZE); } } #endif /* QLZIP */ Carla-2.4.2/data/windows/unzipfx-carla-control/unix/unxcfg.h000066400000000000000000000146171420416754300240520ustar00rootroot00000000000000/* Copyright (c) 1990-2009 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2009-Jan-02 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- Unix specific configuration section: ---------------------------------------------------------------------------*/ #ifndef __unxcfg_h #define __unxcfg_h /* LARGE FILE SUPPORT - 10/6/04 EG */ /* This needs to be set before the includes so they set the right sizes */ #if (defined(NO_LARGE_FILE_SUPPORT) && defined(LARGE_FILE_SUPPORT)) # undef LARGE_FILE_SUPPORT #endif /* Automatically set ZIP64_SUPPORT if LFS */ #ifdef LARGE_FILE_SUPPORT # if (!defined(NO_ZIP64_SUPPORT) && !defined(ZIP64_SUPPORT)) # define ZIP64_SUPPORT # endif #endif /* NO_ZIP64_SUPPORT takes preceedence over ZIP64_SUPPORT */ #if defined(NO_ZIP64_SUPPORT) && defined(ZIP64_SUPPORT) # undef ZIP64_SUPPORT #endif #ifdef LARGE_FILE_SUPPORT /* 64-bit Large File Support */ /* The following Large File Summit (LFS) defines turn on large file support on Linux (probably 2.4 or later kernel) and many other unixen */ /* These have to be before any include that sets types so the large file versions of the types are set in the includes */ # define _LARGEFILE_SOURCE /* some OSes need this for fseeko */ # define _LARGEFILE64_SOURCE # define _FILE_OFFSET_BITS 64 /* select default interface as 64 bit */ # define _LARGE_FILES /* some OSes need this for 64-bit off_t */ # define __USE_LARGEFILE64 #endif /* LARGE_FILE_SUPPORT */ #include /* off_t, time_t, dev_t, ... */ #include #ifdef NO_OFF_T typedef long zoff_t; #else typedef off_t zoff_t; #endif #define ZOFF_T_DEFINED typedef struct stat z_stat; #define Z_STAT_DEFINED #ifndef COHERENT # include /* O_BINARY for open() w/o CR/LF translation */ #else /* COHERENT */ # ifdef _I386 # include /* Coherent 4.0.x, Mark Williams C */ # else # include /* Coherent 3.10, Mark Williams C */ # endif # define SHORT_SYMS # ifndef __COHERENT__ /* Coherent 4.2 has tzset() */ # define tzset settz # endif #endif /* ?COHERENT */ #ifndef NO_PARAM_H # ifdef NGROUPS_MAX # undef NGROUPS_MAX /* SCO bug: defined again in */ # endif # ifdef BSD # define TEMP_BSD /* may be defined again in */ # undef BSD # endif # include /* conflict with , some systems? */ # ifdef TEMP_BSD # undef TEMP_BSD # ifndef BSD # define BSD # endif # endif #endif /* !NO_PARAM_H */ #ifdef __osf__ # define DIRENT # ifdef BSD # undef BSD # endif #endif /* __osf__ */ #ifdef __CYGWIN__ # include # define DIRENT # define HAVE_TERMIOS_H # ifndef timezone # define timezone _timezone # endif #endif #ifdef BSD # include # include # if (defined(_AIX) || defined(__GLIBC__) || defined(__GNU__)) # include # endif #else # include struct tm *gmtime(), *localtime(); #endif #if (defined(BSD4_4) || (defined(SYSV) && defined(MODERN))) # include /* this includes utime.h on SGIs */ # if (defined(BSD4_4) || defined(linux) || defined(__GLIBC__)) # include # define GOT_UTIMBUF # endif # if (!defined(GOT_UTIMBUF) && (defined(__hpux) || defined(__SUNPRO_C))) # include # define GOT_UTIMBUF # endif # if (!defined(GOT_UTIMBUF) && defined(__GNU__)) # include # define GOT_UTIMBUF # endif #endif #if (defined(__DGUX__) && !defined(GOT_UTIMBUF)) /* DG/UX requires this because of a non-standard struct utimebuf */ # include # define GOT_UTIMBUF #endif #if (defined(V7) || defined(pyr_bsd)) # define strchr index # define strrchr rindex #endif #ifdef V7 # define O_RDONLY 0 # define O_WRONLY 1 # define O_RDWR 2 #endif #if defined(NO_UNICODE_SUPPORT) && defined(UNICODE_SUPPORT) /* disable Unicode (UTF-8) support when requested */ # undef UNICODE_SUPPORT #endif #if (defined(_MBCS) && defined(NO_MBCS)) /* disable MBCS support when requested */ # undef _MBCS #endif #if (!defined(NO_SETLOCALE) && !defined(_MBCS)) # if (!defined(UNICODE_SUPPORT) || !defined(UTF8_MAYBE_NATIVE)) /* enable setlocale here, unless this happens later for UTF-8 and/or * MBCS support */ # include # ifndef SETLOCALE # define SETLOCALE(category, locale) setlocale(category, locale) # endif # endif #endif #ifndef NO_SETLOCALE # if (!defined(NO_WORKING_ISPRINT) && !defined(HAVE_WORKING_ISPRINT)) /* enable "enhanced" unprintable chars detection in fnfilter() */ # define HAVE_WORKING_ISPRINT # endif #endif #ifdef MINIX # include #endif #if (!defined(HAVE_STRNICMP) & !defined(NO_STRNICMP)) # define NO_STRNICMP #endif #ifndef DATE_FORMAT # define DATE_FORMAT DF_MDY /* GRR: customize with locale.h somehow? */ #endif #define lenEOL 1 #ifdef EBCDIC # define PutNativeEOL *q++ = '\n'; #else # define PutNativeEOL *q++ = native(LF); #endif #define SCREENSIZE(ttrows, ttcols) screensize(ttrows, ttcols) #define SCREENWIDTH 80 #define SCREENLWRAP 1 #define USE_EF_UT_TIME #if (!defined(NO_LCHOWN) || !defined(NO_LCHMOD)) # define SET_SYMLINK_ATTRIBS #endif #ifdef MTS # ifdef SET_DIR_ATTRIB # undef SET_DIR_ATTRIB # endif #else /* !MTS */ # define SET_DIR_ATTRIB # if (!defined(NOTIMESTAMP) && !defined(TIMESTAMP)) /* GRR 970513 */ # define TIMESTAMP # endif # define RESTORE_UIDGID #endif /* ?MTS */ /* Static variables that we have to add to Uz_Globs: */ #define SYSTEM_SPECIFIC_GLOBALS \ int created_dir, renamed_fullpath;\ char *rootpath, *buildpath, *end;\ ZCONST char *wildname;\ char *dirname, matchname[FILNAMSIZ];\ int rootlen, have_dirname, dirnamelen, notfirstcall;\ zvoid *wild_dir; /* created_dir, and renamed_fullpath are used by both mapname() and */ /* checkdir(). */ /* rootlen, rootpath, buildpath and end are used by checkdir(). */ /* wild_dir, dirname, wildname, matchname[], dirnamelen, have_dirname, */ /* and notfirstcall are used by do_wild(). */ #endif /* !__unxcfg_h */ Carla-2.4.2/data/windows/unzipfx-carla-control/unzip.c000066400000000000000000002757611420416754300227460ustar00rootroot00000000000000/* Copyright (c) 1990-2009 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2009-Jan-02 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- unzip.c UnZip - a zipfile extraction utility. See below for make instructions, or read the comments in Makefile and the various Contents files for more de- tailed explanations. To report a bug, submit a *complete* description via //www.info-zip.org/zip-bug.html; include machine type, operating system and version, compiler and version, and reasonably detailed error messages or problem report. To join Info-ZIP, see the instructions in README. UnZip 5.x is a greatly expanded and partially rewritten successor to 4.x, which in turn was almost a complete rewrite of version 3.x. For a detailed revision history, see UnzpHist.zip at quest.jpl.nasa.gov. For a list of the many (near infinite) contributors, see "CONTRIBS" in the UnZip source distribution. UnZip 6.0 adds support for archives larger than 4 GiB using the Zip64 extensions as well as support for Unicode information embedded per the latest zip standard additions. --------------------------------------------------------------------------- [from original zipinfo.c] This program reads great gobs of totally nifty information, including the central directory stuff, from ZIP archives ("zipfiles" for short). It started as just a testbed for fooling with zipfiles, but at this point it is actually a useful utility. It also became the basis for the rewrite of UnZip (3.16 -> 4.0), using the central directory for processing rather than the individual (local) file headers. As of ZipInfo v2.0 and UnZip v5.1, the two programs are combined into one. If the executable is named "unzip" (or "unzip.exe", depending), it behaves like UnZip by default; if it is named "zipinfo" or "ii", it behaves like ZipInfo. The ZipInfo behavior may also be triggered by use of unzip's -Z option; for example, "unzip -Z [zipinfo_options] archive.zip". Another dandy product from your buddies at Newtware! Author: Greg Roelofs, newt@pobox.com, http://pobox.com/~newt/ 23 August 1990 -> April 1997 --------------------------------------------------------------------------- Version: unzip5??.{tar.Z | tar.gz | zip} for Unix, VMS, OS/2, MS-DOS, Amiga, Atari, Windows 3.x/95/NT/CE, Macintosh, Human68K, Acorn RISC OS, AtheOS, BeOS, SMS/QDOS, VM/CMS, MVS, AOS/VS, Tandem NSK, Theos and TOPS-20. Copyrights: see accompanying file "LICENSE" in UnZip source distribution. (This software is free but NOT IN THE PUBLIC DOMAIN.) ---------------------------------------------------------------------------*/ #define __UNZIP_C /* identifies this source module */ #define UNZIP_INTERNAL #include "unzip.h" /* includes, typedefs, macros, prototypes, etc. */ #include "crypt.h" #include "unzvers.h" #include "unzipfx/appDetails.h" #ifndef WINDLL /* The WINDLL port uses windll/windll.c instead... */ /***************************/ /* Local type declarations */ /***************************/ #if (defined(REENTRANT) && !defined(NO_EXCEPT_SIGNALS)) typedef struct _sign_info { struct _sign_info *previous; void (*sighandler)(int); int sigtype; } savsigs_info; #endif /*******************/ /* Local Functions */ /*******************/ #if (defined(REENTRANT) && !defined(NO_EXCEPT_SIGNALS)) static int setsignalhandler OF((__GPRO__ savsigs_info **p_savedhandler_chain, int signal_type, void (*newhandler)(int))); #endif #ifndef SFX static void help_extended OF((__GPRO)); static void show_version_info OF((__GPRO)); #endif /*************/ /* Constants */ /*************/ #include "consts.h" /* all constant global variables are in here */ /* (non-constant globals were moved to globals.c) */ /* constant local variables: */ #ifndef SFX #ifndef _WIN32_WCE /* Win CE does not support environment variables */ static ZCONST char Far EnvUnZip[] = ENV_UNZIP; static ZCONST char Far EnvUnZip2[] = ENV_UNZIP2; static ZCONST char Far EnvZipInfo[] = ENV_ZIPINFO; static ZCONST char Far EnvZipInfo2[] = ENV_ZIPINFO2; #ifdef RISCOS static ZCONST char Far EnvUnZipExts[] = ENV_UNZIPEXTS; #endif /* RISCOS */ static ZCONST char Far NoMemEnvArguments[] = "envargs: cannot get memory for arguments"; #endif /* !_WIN32_WCE */ static ZCONST char Far CmdLineParamTooLong[] = "error: command line parameter #%d exceeds internal size limit\n"; #endif /* !SFX */ #if (defined(REENTRANT) && !defined(NO_EXCEPT_SIGNALS)) static ZCONST char Far CantSaveSigHandler[] = "error: cannot save signal handler settings\n"; #endif #if (!defined(SFX) || defined(SFX_EXDIR)) static ZCONST char Far NotExtracting[] = "caution: not extracting; -d ignored\n"; static ZCONST char Far MustGiveExdir[] = "error: must specify directory to which to extract with -d option\n"; static ZCONST char Far OnlyOneExdir[] = "error: -d option used more than once (only one exdir allowed)\n"; #endif #if (defined(UNICODE_SUPPORT) && !defined(UNICODE_WCHAR)) static ZCONST char Far UTF8EscapeUnSupp[] = "warning: -U \"escape all non-ASCII UTF-8 chars\" is not supported\n"; #endif #if CRYPT static ZCONST char Far MustGivePasswd[] = "error: must give decryption password with -P option\n"; #endif #ifndef SFX static ZCONST char Far Zfirst[] = "error: -Z must be first option for ZipInfo mode (check UNZIP variable?)\n"; #endif static ZCONST char Far InvalidOptionsMsg[] = "error:\ -fn or any combination of -c, -l, -p, -t, -u and -v options invalid\n"; static ZCONST char Far IgnoreOOptionMsg[] = "caution: both -n and -o specified; ignoring -o\n"; /* usage() strings */ #ifndef SFX #ifdef VMS static ZCONST char Far Example3[] = "vms.c"; static ZCONST char Far Example2[] = " unzip \"-V\" foo \"Bar\"\ (Quote names to preserve case, unless SET PROC/PARS=EXT)\n"; #else /* !VMS */ static ZCONST char Far Example3[] = "ReadMe"; #ifdef RISCOS static ZCONST char Far Example2[] = " unzip foo -d RAM:$ => extract all files from foo into RAMDisc\n"; #else /* !RISCOS */ #if (defined(OS2) || (defined(DOS_FLX_OS2_W32) && defined(MORE))) static ZCONST char Far Example2[] = ""; /* no room: too many local3[] items */ #else /* !OS2 */ #ifdef MACOS static ZCONST char Far Example2[] = ""; /* not needed */ #else /* !MACOS */ static ZCONST char Far Example2[] = " \ unzip -p foo | more => send contents of foo.zip via pipe into program more\n"; #endif /* ?MACOS */ #endif /* ?OS2 */ #endif /* ?RISCOS */ #endif /* ?VMS */ /* local1[]: command options */ #if defined(TIMESTAMP) static ZCONST char Far local1[] = " -T timestamp archive to latest"; #else /* !TIMESTAMP */ static ZCONST char Far local1[] = ""; #endif /* ?TIMESTAMP */ /* local2[] and local3[]: modifier options */ #ifdef DOS_FLX_H68_OS2_W32 #ifdef FLEXOS static ZCONST char Far local2[] = ""; #else static ZCONST char Far local2[] = " -$ label removables (-$$ => fixed disks)"; #endif #ifdef OS2 #ifdef MORE static ZCONST char Far local3[] = "\ -X restore ACLs if supported -s spaces in filenames => '_'\n\ -M pipe through \"more\" pager\n"; #else static ZCONST char Far local3[] = " \ -X restore ACLs if supported -s spaces in filenames => '_'\n\n"; #endif /* ?MORE */ #else /* !OS2 */ #ifdef WIN32 #ifdef NTSD_EAS #ifdef MORE static ZCONST char Far local3[] = "\ -X restore ACLs (-XX => use privileges) -s spaces in filenames => '_'\n\ -M pipe through \"more\" pager\n"; #else static ZCONST char Far local3[] = " \ -X restore ACLs (-XX => use privileges) -s spaces in filenames => '_'\n\n"; #endif /* ?MORE */ #else /* !NTSD_EAS */ #ifdef MORE static ZCONST char Far local3[] = "\ -M pipe through \"more\" pager \ -s spaces in filenames => '_'\n\n"; #else static ZCONST char Far local3[] = " \ -s spaces in filenames => '_'\n\n"; #endif /* ?MORE */ #endif /* ?NTSD_EAS */ #else /* !WIN32 */ #ifdef MORE static ZCONST char Far local3[] = " -\ M pipe through \"more\" pager -s spaces in filenames => '_'\n\n"; #else static ZCONST char Far local3[] = "\ -s spaces in filenames => '_'\n"; #endif #endif /* ?WIN32 */ #endif /* ?OS2 || ?WIN32 */ #else /* !DOS_FLX_OS2_W32 */ #ifdef VMS static ZCONST char Far local2[] = " -X restore owner/ACL protection info"; #ifdef MORE static ZCONST char Far local3[] = "\ -Y treat \".nnn\" as \";nnn\" version -2 force ODS2 names\n\ --D restore dir (-D: no) timestamps -M pipe through \"more\" pager\n\ (Must quote upper-case options, like \"-V\", unless SET PROC/PARSE=EXTEND.)\ \n\n"; #else static ZCONST char Far local3[] = "\n\ -Y treat \".nnn\" as \";nnn\" version -2 force ODS2 names\n\ --D restore dir (-D: no) timestamps\n\ (Must quote upper-case options, like \"-V\", unless SET PROC/PARSE=EXTEND.)\ \n\n"; #endif #else /* !VMS */ #ifdef ATH_BEO_UNX static ZCONST char Far local2[] = " -X restore UID/GID info"; #ifdef MORE static ZCONST char Far local3[] = "\ -K keep setuid/setgid/tacky permissions -M pipe through \"more\" pager\n"; #else static ZCONST char Far local3[] = "\ -K keep setuid/setgid/tacky permissions\n"; #endif #else /* !ATH_BEO_UNX */ #ifdef TANDEM static ZCONST char Far local2[] = "\ -X restore Tandem User ID -r remove file extensions\n\ -b create 'C' (180) text files "; #ifdef MORE static ZCONST char Far local3[] = " \ -M pipe through \"more\" pager\n"; #else static ZCONST char Far local3[] = "\n"; #endif #else /* !TANDEM */ #ifdef AMIGA static ZCONST char Far local2[] = " -N restore comments as filenotes"; #ifdef MORE static ZCONST char Far local3[] = " \ -M pipe through \"more\" pager\n"; #else static ZCONST char Far local3[] = "\n"; #endif #else /* !AMIGA */ #ifdef MACOS static ZCONST char Far local2[] = " -E show Mac info during extraction"; static ZCONST char Far local3[] = " \ -i ignore filenames in mac extra info -J junk (ignore) Mac extra info\n\ \n"; #else /* !MACOS */ #ifdef MORE static ZCONST char Far local2[] = " -M pipe through \"more\" pager"; static ZCONST char Far local3[] = "\n"; #else static ZCONST char Far local2[] = ""; /* Atari, Mac, CMS/MVS etc. */ static ZCONST char Far local3[] = ""; #endif #endif /* ?MACOS */ #endif /* ?AMIGA */ #endif /* ?TANDEM */ #endif /* ?ATH_BEO_UNX */ #endif /* ?VMS */ #endif /* ?DOS_FLX_OS2_W32 */ #endif /* !SFX */ #ifndef NO_ZIPINFO #ifdef VMS static ZCONST char Far ZipInfoExample[] = "* or % (e.g., \"*font-%.zip\")"; #else static ZCONST char Far ZipInfoExample[] = "*, ?, [] (e.g., \"[a-j]*.zip\")"; #endif static ZCONST char Far ZipInfoUsageLine1[] = "\ ZipInfo %d.%d%d%s of %s, by Greg Roelofs and the Info-ZIP group.\n\ \n\ List name, date/time, attribute, size, compression method, etc., about files\n\ in list (excluding those in xlist) contained in the specified .zip archive(s).\ \n\"file[.zip]\" may be a wildcard name containing %s.\n\n\ usage: zipinfo [-12smlvChMtTz] file[.zip] [list...] [-x xlist...]\n\ or: unzip %s-Z%s [-12smlvChMtTz] file[.zip] [list...] [-x xlist...]\n"; static ZCONST char Far ZipInfoUsageLine2[] = "\nmain\ listing-format options: -s short Unix \"ls -l\" format (def.)\n\ -1 filenames ONLY, one per line -m medium Unix \"ls -l\" format\n\ -2 just filenames but allow -h/-t/-z -l long Unix \"ls -l\" format\n\ -v verbose, multi-page format\n"; static ZCONST char Far ZipInfoUsageLine3[] = "miscellaneous options:\n\ -h print header line -t print totals for listed files or for all\n\ -z print zipfile comment -T print file times in sortable decimal format\ \n -C be case-insensitive %s\ -x exclude filenames that follow from listing\n"; #ifdef MORE static ZCONST char Far ZipInfoUsageLine4[] = " -M page output through built-in \"more\"\n"; #else /* !MORE */ static ZCONST char Far ZipInfoUsageLine4[] = ""; #endif /* ?MORE */ #endif /* !NO_ZIPINFO */ #ifdef BETA # ifdef VMSCLI /* BetaVersion[] is also used in vms/cmdline.c: do not make it static */ ZCONST char Far BetaVersion[] = "%s\ THIS IS STILL A BETA VERSION OF UNZIP%s -- DO NOT DISTRIBUTE.\n\n"; # else static ZCONST char Far BetaVersion[] = "%s\ THIS IS STILL A BETA VERSION OF UNZIP%s -- DO NOT DISTRIBUTE.\n\n"; # endif #endif #ifdef SFX # ifdef VMSCLI /* UnzipSFXBanner[] is also used in vms/cmdline.c: do not make it static */ ZCONST char Far UnzipSFXBanner[] = # else static ZCONST char Far UnzipSFXBanner[] = # endif SFX_APP_BANNER "\n"; # ifdef SFX_EXDIR static ZCONST char Far UnzipSFXOpts[] = "Valid options are -tfupcz and -d ; modifiers are -abjnoqCL%sV%s.\n"; # else static ZCONST char Far UnzipSFXOpts[] = "Valid options are -tfupcz; modifiers are -abjnoqCL%sV%s.\n"; # endif #else /* !SFX */ static ZCONST char Far CompileOptions[] = "UnZip special compilation options:\n"; static ZCONST char Far CompileOptFormat[] = " %s\n"; #ifndef _WIN32_WCE /* Win CE does not support environment variables */ static ZCONST char Far EnvOptions[] = "\nUnZip and ZipInfo environment options:\n"; static ZCONST char Far EnvOptFormat[] = "%16s: %.1024s\n"; #endif static ZCONST char Far None[] = "[none]"; # ifdef ACORN_FTYPE_NFS static ZCONST char Far AcornFtypeNFS[] = "ACORN_FTYPE_NFS"; # endif # ifdef ASM_CRC static ZCONST char Far AsmCRC[] = "ASM_CRC"; # endif # ifdef ASM_INFLATECODES static ZCONST char Far AsmInflateCodes[] = "ASM_INFLATECODES"; # endif # ifdef CHECK_VERSIONS static ZCONST char Far Check_Versions[] = "CHECK_VERSIONS"; # endif # ifdef COPYRIGHT_CLEAN static ZCONST char Far Copyright_Clean[] = "COPYRIGHT_CLEAN (PKZIP 0.9x unreducing method not supported)"; # endif # ifdef DEBUG static ZCONST char Far UDebug[] = "DEBUG"; # endif # ifdef DEBUG_TIME static ZCONST char Far DebugTime[] = "DEBUG_TIME"; # endif # ifdef DLL static ZCONST char Far Dll[] = "DLL"; # endif # ifdef DOSWILD static ZCONST char Far DosWild[] = "DOSWILD"; # endif # ifdef LZW_CLEAN static ZCONST char Far LZW_Clean[] = "LZW_CLEAN (PKZIP/Zip 1.x unshrinking method not supported)"; # endif # ifndef MORE static ZCONST char Far No_More[] = "NO_MORE"; # endif # ifdef NO_ZIPINFO static ZCONST char Far No_ZipInfo[] = "NO_ZIPINFO"; # endif # ifdef NTSD_EAS static ZCONST char Far NTSDExtAttrib[] = "NTSD_EAS"; # endif # if defined(WIN32) && defined(NO_W32TIMES_IZFIX) static ZCONST char Far W32NoIZTimeFix[] = "NO_W32TIMES_IZFIX"; # endif # ifdef OLD_THEOS_EXTRA static ZCONST char Far OldTheosExtra[] = "OLD_THEOS_EXTRA (handle also old Theos port extra field)"; # endif # ifdef OS2_EAS static ZCONST char Far OS2ExtAttrib[] = "OS2_EAS"; # endif # ifdef QLZIP static ZCONST char Far SMSExFldOnUnix[] = "QLZIP"; # endif # ifdef REENTRANT static ZCONST char Far Reentrant[] = "REENTRANT"; # endif # ifdef REGARGS static ZCONST char Far RegArgs[] = "REGARGS"; # endif # ifdef RETURN_CODES static ZCONST char Far Return_Codes[] = "RETURN_CODES"; # endif # ifdef SET_DIR_ATTRIB static ZCONST char Far SetDirAttrib[] = "SET_DIR_ATTRIB"; # endif # ifdef SYMLINKS static ZCONST char Far SymLinkSupport[] = "SYMLINKS (symbolic links supported, if RTL and file system permit)"; # endif # ifdef TIMESTAMP static ZCONST char Far TimeStamp[] = "TIMESTAMP"; # endif # ifdef UNIXBACKUP static ZCONST char Far UnixBackup[] = "UNIXBACKUP"; # endif # ifdef USE_EF_UT_TIME static ZCONST char Far Use_EF_UT_time[] = "USE_EF_UT_TIME"; # endif # ifndef LZW_CLEAN static ZCONST char Far Use_Unshrink[] = "USE_UNSHRINK (PKZIP/Zip 1.x unshrinking method supported)"; # endif # ifndef COPYRIGHT_CLEAN static ZCONST char Far Use_Smith_Code[] = "USE_SMITH_CODE (PKZIP 0.9x unreducing method supported)"; # endif # ifdef USE_DEFLATE64 static ZCONST char Far Use_Deflate64[] = "USE_DEFLATE64 (PKZIP 4.x Deflate64(tm) supported)"; # endif # ifdef UNICODE_SUPPORT # ifdef UTF8_MAYBE_NATIVE # ifdef UNICODE_WCHAR /* direct native UTF-8 check AND charset transform via wchar_t */ static ZCONST char Far Use_Unicode[] = "UNICODE_SUPPORT [wide-chars, char coding: %s] (handle UTF-8 paths)"; # else /* direct native UTF-8 check, only */ static ZCONST char Far Use_Unicode[] = "UNICODE_SUPPORT [char coding: %s] (handle UTF-8 paths)"; # endif static ZCONST char Far SysChUTF8[] = "UTF-8"; static ZCONST char Far SysChOther[] = "other"; # else /* !UTF8_MAYBE_NATIVE */ /* charset transform via wchar_t, no native UTF-8 support */ static ZCONST char Far Use_Unicode[] = "UNICODE_SUPPORT [wide-chars] (handle UTF-8 paths)"; # endif /* ?UTF8_MAYBE_NATIVE */ # endif /* UNICODE_SUPPORT */ # ifdef _MBCS static ZCONST char Far Have_MBCS_Support[] = "MBCS-support (multibyte character support, MB_CUR_MAX = %u)"; # endif # ifdef MULT_VOLUME static ZCONST char Far Use_MultiVol[] = "MULT_VOLUME (multi-volume archives supported)"; # endif # ifdef LARGE_FILE_SUPPORT static ZCONST char Far Use_LFS[] = "LARGE_FILE_SUPPORT (large files over 2 GiB supported)"; # endif # ifdef ZIP64_SUPPORT static ZCONST char Far Use_Zip64[] = "ZIP64_SUPPORT (archives using Zip64 for large files supported)"; # endif # if (defined(__DJGPP__) && (__DJGPP__ >= 2)) # ifdef USE_DJGPP_ENV static ZCONST char Far Use_DJGPP_Env[] = "USE_DJGPP_ENV"; # endif # ifdef USE_DJGPP_GLOB static ZCONST char Far Use_DJGPP_Glob[] = "USE_DJGPP_GLOB"; # endif # endif /* __DJGPP__ && (__DJGPP__ >= 2) */ # ifdef USE_VFAT static ZCONST char Far Use_VFAT_support[] = "USE_VFAT"; # endif # ifdef USE_ZLIB static ZCONST char Far UseZlib[] = "USE_ZLIB (compiled with version %s; using version %s)"; # endif # ifdef USE_BZIP2 static ZCONST char Far UseBZip2[] = "USE_BZIP2 (PKZIP 4.6+, using bzip2 lib version %s)"; # endif # ifdef VMS_TEXT_CONV static ZCONST char Far VmsTextConv[] = "VMS_TEXT_CONV"; # endif # ifdef VMSCLI static ZCONST char Far VmsCLI[] = "VMSCLI"; # endif # ifdef VMSWILD static ZCONST char Far VmsWild[] = "VMSWILD"; # endif # ifdef WILD_STOP_AT_DIR static ZCONST char Far WildStopAtDir[] = "WILD_STOP_AT_DIR"; # endif # if CRYPT # ifdef PASSWD_FROM_STDIN static ZCONST char Far PasswdStdin[] = "PASSWD_FROM_STDIN"; # endif static ZCONST char Far Decryption[] = " [decryption, version %d.%d%s of %s]\n"; static ZCONST char Far CryptDate[] = CR_VERSION_DATE; # endif # ifndef __RSXNT__ # ifdef __EMX__ static ZCONST char Far EnvEMX[] = "EMX"; static ZCONST char Far EnvEMXOPT[] = "EMXOPT"; # endif # if (defined(__GO32__) && (!defined(__DJGPP__) || (__DJGPP__ < 2))) static ZCONST char Far EnvGO32[] = "GO32"; static ZCONST char Far EnvGO32TMP[] = "GO32TMP"; # endif # endif /* !__RSXNT__ */ #ifdef VMS /* UnzipUsageLine1[] is also used in vms/cmdline.c: do not make it static */ ZCONST char Far UnzipUsageLine1[] = "\ UnZip %d.%d%d%s of %s, by Info-ZIP. For more details see: unzip -v.\n\n"; # ifdef COPYRIGHT_CLEAN static ZCONST char Far UnzipUsageLine1v[] = "\ UnZip %d.%d%d%s of %s, by Info-ZIP. Maintained by C. Spieler. Send\n\ bug reports using http://www.info-zip.org/zip-bug.html; see README for details.\ \n\n"; # else static ZCONST char Far UnzipUsageLine1v[] = "\ UnZip %d.%d%d%s of %s, by Info-ZIP. UnReduce (c) 1989 by S. H. Smith.\n\ Send bug reports using //www.info-zip.org/zip-bug.html; see README for details.\ \n\n"; # endif /* ?COPYRIGHT_CLEAN */ #else /* !VMS */ # ifdef COPYRIGHT_CLEAN static ZCONST char Far UnzipUsageLine1[] = "\ UnZip %d.%d%d%s of %s, by Info-ZIP. Maintained by C. Spieler. Send\n\ bug reports using http://www.info-zip.org/zip-bug.html; see README for details.\ \n\n"; # else static ZCONST char Far UnzipUsageLine1[] = "\ UnZip %d.%d%d%s of %s, by Info-ZIP. UnReduce (c) 1989 by S. H. Smith.\n\ Send bug reports using //www.info-zip.org/zip-bug.html; see README for details.\ \n\n"; # endif /* ?COPYRIGHT_CLEAN */ # define UnzipUsageLine1v UnzipUsageLine1 #endif /* ?VMS */ static ZCONST char Far UnzipUsageLine2v[] = "\ Latest sources and executables are at ftp://ftp.info-zip.org/pub/infozip/ ;\ \nsee ftp://ftp.info-zip.org/pub/infozip/UnZip.html for other sites.\ \n\n"; #ifdef MACOS static ZCONST char Far UnzipUsageLine2[] = "\ Usage: unzip %s[-opts[modifiers]] file[.zip] [list] [-d exdir]\n \ Default action is to extract files in list, to exdir;\n\ file[.zip] may be a wildcard. %s\n"; #else /* !MACOS */ #ifdef VM_CMS static ZCONST char Far UnzipUsageLine2[] = "\ Usage: unzip %s[-opts[modifiers]] file[.zip] [list] [-x xlist] [-d fm]\n \ Default action is to extract files in list, except those in xlist, to disk fm;\ \n file[.zip] may be a wildcard. %s\n"; #else /* !VM_CMS */ static ZCONST char Far UnzipUsageLine2[] = "\ Usage: unzip %s[-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir]\n \ Default action is to extract files in list, except those in xlist, to exdir;\n\ file[.zip] may be a wildcard. %s\n"; #endif /* ?VM_CMS */ #endif /* ?MACOS */ #ifdef NO_ZIPINFO # define ZIPINFO_MODE_OPTION "" static ZCONST char Far ZipInfoMode[] = "(ZipInfo mode is disabled in this version.)"; #else # define ZIPINFO_MODE_OPTION "[-Z] " static ZCONST char Far ZipInfoMode[] = "-Z => ZipInfo mode (\"unzip -Z\" for usage)."; #endif /* ?NO_ZIPINFO */ #ifdef VMS static ZCONST char Far VMSusageLine2b[] = "\ => define foreign command symbol in LOGIN.COM: $ unzip :== $dev:[dir]unzip.exe\ \n"; #endif #ifdef MACOS static ZCONST char Far UnzipUsageLine3[] = "\n\ -d extract files into exdir -l list files (short format)\n\ -f freshen existing files, create none -t test compressed archive data\n\ -u update files, create if necessary -z display archive comment only\n\ -v list verbosely/show version info %s\n"; #else /* !MACOS */ #ifdef VM_CMS static ZCONST char Far UnzipUsageLine3[] = "\n\ -p extract files to pipe, no messages -l list files (short format)\n\ -f freshen existing files, create none -t test compressed archive data\n\ -u update files, create if necessary -z display archive comment only\n\ -v list verbosely/show version info %s\n\ -x exclude files that follow (in xlist) -d extract files onto disk fm\n"; #else /* !VM_CMS */ static ZCONST char Far UnzipUsageLine3[] = "\n\ -p extract files to pipe, no messages -l list files (short format)\n\ -f freshen existing files, create none -t test compressed archive data\n\ -u update files, create if necessary -z display archive comment only\n\ -v list verbosely/show version info %s\n\ -x exclude files that follow (in xlist) -d extract files into exdir\n"; #endif /* ?VM_CMS */ #endif /* ?MACOS */ /* There is not enough space on a standard 80x25 Windows console screen for * the additional line advertising the UTF-8 debugging options. This may * eventually also be the case for other ports. Probably, the -U option need * not be shown on the introductory screen at all. [Chr. Spieler, 2008-02-09] * * Likely, other advanced options should be moved to an extended help page and * the option to list that page put here. [E. Gordon, 2008-3-16] */ #if (defined(UNICODE_SUPPORT) && !defined(WIN32)) #ifdef VMS static ZCONST char Far UnzipUsageLine4[] = "\ modifiers:\n\ -n never overwrite or make a new version of an existing file\n\ -o always make a new version (-oo: overwrite original) of an existing file\n\ -q quiet mode (-qq => quieter) -a auto-convert any text files\n\ -j junk paths (do not make directories) -aa treat ALL files as text\n\ -U use escapes for all non-ASCII Unicode -UU ignore any Unicode fields\n\ -C match filenames case-insensitively -L make (some) names \ lowercase\n %-42s -V retain VMS version numbers\n%s"; #else /* !VMS */ static ZCONST char Far UnzipUsageLine4[] = "\ modifiers:\n\ -n never overwrite existing files -q quiet mode (-qq => quieter)\n\ -o overwrite files WITHOUT prompting -a auto-convert any text files\n\ -j junk paths (do not make directories) -aa treat ALL files as text\n\ -U use escapes for all non-ASCII Unicode -UU ignore any Unicode fields\n\ -C match filenames case-insensitively -L make (some) names \ lowercase\n %-42s -V retain VMS version numbers\n%s"; #endif /* ?VMS */ #else /* !UNICODE_SUPPORT */ #ifdef VMS static ZCONST char Far UnzipUsageLine4[] = "\ modifiers:\n\ -n never overwrite or make a new version of an existing file\n\ -o always make a new version (-oo: overwrite original) of an existing file\n\ -q quiet mode (-qq => quieter) -a auto-convert any text files\n\ -j junk paths (do not make directories) -aa treat ALL files as text\n\ -C match filenames case-insensitively -L make (some) names \ lowercase\n %-42s -V retain VMS version numbers\n%s"; #else /* !VMS */ static ZCONST char Far UnzipUsageLine4[] = "\ modifiers:\n\ -n never overwrite existing files -q quiet mode (-qq => quieter)\n\ -o overwrite files WITHOUT prompting -a auto-convert any text files\n\ -j junk paths (do not make directories) -aa treat ALL files as text\n\ -C match filenames case-insensitively -L make (some) names \ lowercase\n %-42s -V retain VMS version numbers\n%s"; #endif /* ?VMS */ #endif /* ?UNICODE_SUPPORT */ static ZCONST char Far UnzipUsageLine5[] = "\ See \"unzip -hh\" or unzip.txt for more help. Examples:\n\ unzip data1 -x joe => extract all files except joe from zipfile data1.zip\n\ %s\ unzip -fo foo %-6s => quietly replace existing %s if archive file newer\n"; #endif /* ?SFX */ /*****************************/ /* main() / UzpMain() stub */ /*****************************/ int MAIN(argc, argv) /* return PK-type error code (except under VMS) */ int argc; char *argv[]; { int r; CONSTRUCTGLOBALS(); r = unzip(__G__ argc, argv); DESTROYGLOBALS(); RETURN(r); } /*******************************/ /* Primary UnZip entry point */ /*******************************/ int unzip(__G__ argc, argv) __GDEF int argc; char *argv[]; { #ifndef NO_ZIPINFO char *p; #endif #if (defined(DOS_FLX_H68_NLM_OS2_W32) || !defined(SFX)) int i; #endif int retcode, error=FALSE; #ifndef NO_EXCEPT_SIGNALS #ifdef REENTRANT savsigs_info *oldsighandlers = NULL; # define SET_SIGHANDLER(sigtype, newsighandler) \ if ((retcode = setsignalhandler(__G__ &oldsighandlers, (sigtype), \ (newsighandler))) > PK_WARN) \ goto cleanup_and_exit #else # define SET_SIGHANDLER(sigtype, newsighandler) \ signal((sigtype), (newsighandler)) #endif #endif /* NO_EXCEPT_SIGNALS */ /* initialize international char support to the current environment */ SETLOCALE(LC_CTYPE, "C"); #ifdef UNICODE_SUPPORT /* see if can use UTF-8 Unicode locale */ # ifdef UTF8_MAYBE_NATIVE { char *codeset; # if !(defined(NO_NL_LANGINFO) || defined(NO_LANGINFO_H)) /* get the codeset (character set encoding) currently used */ # include codeset = nl_langinfo(CODESET); # else /* NO_NL_LANGINFO || NO_LANGINFO_H */ /* query the current locale setting for character classification */ codeset = setlocale(LC_CTYPE, NULL); if (codeset != NULL) { /* extract the codeset portion of the locale name */ codeset = strchr(codeset, '.'); if (codeset != NULL) ++codeset; } # endif /* ?(NO_NL_LANGINFO || NO_LANGINFO_H) */ /* is the current codeset UTF-8 ? */ if ((codeset != NULL) && (strcmp(codeset, "UTF-8") == 0)) { /* successfully found UTF-8 char coding */ G.native_is_utf8 = TRUE; } else { /* Current codeset is not UTF-8 or cannot be determined. */ G.native_is_utf8 = FALSE; } /* Note: At least for UnZip, trying to change the process codeset to * UTF-8 does not work. For the example Linux setup of the * UnZip maintainer, a successful switch to "en-US.UTF-8" * resulted in garbage display of all non-basic ASCII characters. */ } # endif /* UTF8_MAYBE_NATIVE */ /* initialize Unicode */ G.unicode_escape_all = 0; G.unicode_mismatch = 0; G.unipath_version = 0; G.unipath_checksum = 0; G.unipath_filename = NULL; #endif /* UNICODE_SUPPORT */ #if (defined(__IBMC__) && defined(__DEBUG_ALLOC__)) extern void DebugMalloc(void); atexit(DebugMalloc); #endif #ifdef MALLOC_WORK /* The following (rather complex) expression determines the allocation size of the decompression work area. It simulates what the combined "union" and "struct" declaration of the "static" work area reservation achieves automatically at compile time. Any decent compiler should evaluate this expression completely at compile time and provide constants to the zcalloc() call. (For better readability, some subexpressions are encapsulated in temporarly defined macros.) */ # define UZ_SLIDE_CHUNK (sizeof(shrint)+sizeof(uch)+sizeof(uch)) # define UZ_NUMOF_CHUNKS \ (unsigned)(((WSIZE+UZ_SLIDE_CHUNK-1)/UZ_SLIDE_CHUNK > HSIZE) ? \ (WSIZE+UZ_SLIDE_CHUNK-1)/UZ_SLIDE_CHUNK : HSIZE) G.area.Slide = (uch *)zcalloc(UZ_NUMOF_CHUNKS, UZ_SLIDE_CHUNK); # undef UZ_SLIDE_CHUNK # undef UZ_NUMOF_CHUNKS G.area.shrink.Parent = (shrint *)G.area.Slide; G.area.shrink.value = G.area.Slide + (sizeof(shrint)*(HSIZE)); G.area.shrink.Stack = G.area.Slide + (sizeof(shrint) + sizeof(uch))*(HSIZE); #endif /*--------------------------------------------------------------------------- Set signal handler for restoring echo, warn of zipfile corruption, etc. ---------------------------------------------------------------------------*/ #ifndef NO_EXCEPT_SIGNALS #ifdef SIGINT SET_SIGHANDLER(SIGINT, handler); #endif #ifdef SIGTERM /* some systems really have no SIGTERM */ SET_SIGHANDLER(SIGTERM, handler); #endif #if defined(SIGABRT) && !(defined(AMIGA) && defined(__SASC)) SET_SIGHANDLER(SIGABRT, handler); #endif #ifdef SIGBREAK SET_SIGHANDLER(SIGBREAK, handler); #endif #ifdef SIGBUS SET_SIGHANDLER(SIGBUS, handler); #endif #ifdef SIGILL SET_SIGHANDLER(SIGILL, handler); #endif #ifdef SIGSEGV SET_SIGHANDLER(SIGSEGV, handler); #endif #endif /* NO_EXCEPT_SIGNALS */ #if (defined(WIN32) && defined(__RSXNT__)) for (i = 0 ; i < argc; i++) { _ISO_INTERN(argv[i]); } #endif /*--------------------------------------------------------------------------- Macintosh initialization code. ---------------------------------------------------------------------------*/ #ifdef MACOS { int a; for (a = 0; a < 4; ++a) G.rghCursor[a] = GetCursor(a+128); G.giCursor = 0; } #endif /*--------------------------------------------------------------------------- NetWare initialization code. ---------------------------------------------------------------------------*/ #ifdef NLM InitUnZipConsole(); #endif /*--------------------------------------------------------------------------- Acorn RISC OS initialization code. ---------------------------------------------------------------------------*/ #ifdef RISCOS set_prefix(); #endif /*--------------------------------------------------------------------------- Theos initialization code. ---------------------------------------------------------------------------*/ #ifdef THEOS /* The easiest way found to force creation of libraries when selected * members are to be unzipped. Explicitly add libraries names to the * arguments list before the first member of the library. */ if (! _setargv(&argc, &argv)) { Info(slide, 0x401, ((char *)slide, "cannot process argv\n")); retcode = PK_MEM; goto cleanup_and_exit; } #endif /*--------------------------------------------------------------------------- Sanity checks. Commentary by Otis B. Driftwood and Fiorello: D: It's all right. That's in every contract. That's what they call a sanity clause. F: Ha-ha-ha-ha-ha. You can't fool me. There ain't no Sanity Claus. ---------------------------------------------------------------------------*/ #ifdef DEBUG # ifdef LARGE_FILE_SUPPORT /* test if we can support large files - 10/6/04 EG */ if (sizeof(zoff_t) < 8) { Info(slide, 0x401, ((char *)slide, "LARGE_FILE_SUPPORT set but not supported\n")); retcode = PK_BADERR; goto cleanup_and_exit; } /* test if we can show 64-bit values */ { zoff_t z = ~(zoff_t)0; /* z should be all 1s now */ char *sz; sz = FmZofft(z, FZOFFT_HEX_DOT_WID, "X"); if ((sz[0] != 'F') || (strlen(sz) != 16)) { z = 0; } /* shift z so only MSB is set */ z <<= 63; sz = FmZofft(z, FZOFFT_HEX_DOT_WID, "X"); if ((sz[0] != '8') || (strlen(sz) != 16)) { Info(slide, 0x401, ((char *)slide, "Can't show 64-bit values correctly\n")); retcode = PK_BADERR; goto cleanup_and_exit; } } # endif /* LARGE_FILE_SUPPORT */ /* 2004-11-30 SMS. Test the NEXTBYTE macro for proper operation. */ { int test_char; static uch test_buf[2] = { 'a', 'b' }; G.inptr = test_buf; G.incnt = 1; test_char = NEXTBYTE; /* Should get 'a'. */ if (test_char == 'a') { test_char = NEXTBYTE; /* Should get EOF, not 'b'. */ } if (test_char != EOF) { Info(slide, 0x401, ((char *)slide, "NEXTBYTE macro failed. Try compiling with ALT_NEXTBYTE defined?")); retcode = PK_BADERR; goto cleanup_and_exit; } } #endif /* DEBUG */ /*--------------------------------------------------------------------------- First figure out if we're running in UnZip mode or ZipInfo mode, and put the appropriate environment-variable options into the queue. Then rip through any command-line options lurking about... ---------------------------------------------------------------------------*/ #ifdef SFX G.argv0 = argv[0]; #if (defined(OS2) || defined(WIN32)) G.zipfn = GetLoadPath(__G);/* non-MSC NT puts path into G.filename[] */ #else G.zipfn = G.argv0; #endif #ifdef VMSCLI { ulg status = vms_unzip_cmdline(&argc, &argv); if (!(status & 1)) { retcode = (int)status; goto cleanup_and_exit; } } #endif /* VMSCLI */ uO.zipinfo_mode = FALSE; error = uz_opts(__G__ &argc, &argv); /* UnZipSFX call only */ #else /* !SFX */ #ifdef RISCOS /* get the extensions to swap from environment */ getRISCOSexts(ENV_UNZIPEXTS); #endif #ifdef MSDOS /* extract MKS extended argument list from environment (before envargs!) */ mksargs(&argc, &argv); #endif #ifdef VMSCLI { ulg status = vms_unzip_cmdline(&argc, &argv); if (!(status & 1)) { retcode = (int)status; goto cleanup_and_exit; } } #endif /* VMSCLI */ G.noargs = (argc == 1); /* no options, no zipfile, no anything */ #ifndef NO_ZIPINFO for (p = argv[0] + strlen(argv[0]); p >= argv[0]; --p) { if (*p == DIR_END #ifdef DIR_END2 || *p == DIR_END2 #endif ) break; } ++p; #ifdef THEOS if (strncmp(p, "ZIPINFO.",8) == 0 || strstr(p, ".ZIPINFO:") != NULL || strncmp(p, "II.",3) == 0 || strstr(p, ".II:") != NULL || #else if (STRNICMP(p, LoadFarStringSmall(Zipnfo), 7) == 0 || STRNICMP(p, "ii", 2) == 0 || #endif (argc > 1 && strncmp(argv[1], "-Z", 2) == 0)) { uO.zipinfo_mode = TRUE; #ifndef _WIN32_WCE /* Win CE does not support environment variables */ if ((error = envargs(&argc, &argv, LoadFarStringSmall(EnvZipInfo), LoadFarStringSmall2(EnvZipInfo2))) != PK_OK) perror(LoadFarString(NoMemEnvArguments)); #endif } else #endif /* !NO_ZIPINFO */ { uO.zipinfo_mode = FALSE; #ifndef _WIN32_WCE /* Win CE does not support environment variables */ if ((error = envargs(&argc, &argv, LoadFarStringSmall(EnvUnZip), LoadFarStringSmall2(EnvUnZip2))) != PK_OK) perror(LoadFarString(NoMemEnvArguments)); #endif } if (!error) { /* Check the length of all passed command line parameters. * Command arguments might get sent through the Info() message * system, which uses the sliding window area as string buffer. * As arguments may additionally get fed through one of the FnFilter * macros, we require all command line arguments to be shorter than * WSIZE/4 (and ca. 2 standard line widths for fixed message text). */ for (i = 1 ; i < argc; i++) { if (strlen(argv[i]) > ((WSIZE>>2) - 160)) { Info(slide, 0x401, ((char *)slide, LoadFarString(CmdLineParamTooLong), i)); retcode = PK_PARAM; goto cleanup_and_exit; } } #ifndef NO_ZIPINFO if (uO.zipinfo_mode) error = zi_opts(__G__ &argc, &argv); else #endif /* !NO_ZIPINFO */ error = uz_opts(__G__ &argc, &argv); } #endif /* ?SFX */ if ((argc < 0) || error) { retcode = error; goto cleanup_and_exit; } /*--------------------------------------------------------------------------- Now get the zipfile name from the command line and then process any re- maining options and file specifications. ---------------------------------------------------------------------------*/ #ifdef DOS_FLX_H68_NLM_OS2_W32 /* convert MSDOS-style 'backward slash' directory separators to Unix-style * 'forward slashes' for user's convenience (include zipfile name itself) */ #ifdef SFX for (G.pfnames = argv, i = argc; i > 0; --i) { #else /* argc does not include the zipfile specification */ for (G.pfnames = argv, i = argc+1; i > 0; --i) { #endif #ifdef __human68k__ extern char *_toslash(char *); _toslash(*G.pfnames); #else /* !__human68k__ */ char *q = *G.pfnames; while (*q != '\0') { if (*q == '\\') *q = '/'; INCSTR(q); } #endif /* ?__human68k__ */ ++G.pfnames; } #endif /* DOS_FLX_H68_NLM_OS2_W32 */ #ifndef SFX G.wildzipfn = *argv++; #endif #if (defined(SFX) && !defined(SFX_EXDIR)) /* only check for -x */ G.filespecs = argc; G.xfilespecs = 0; if (argc > 0) { char **pp = argv-1; G.pfnames = argv; while (*++pp) if (strcmp(*pp, "-x") == 0) { if (pp > argv) { *pp = 0; /* terminate G.pfnames */ G.filespecs = pp - G.pfnames; } else { G.pfnames = (char **)fnames; /* defaults */ G.filespecs = 0; } G.pxnames = pp + 1; /* excluded-names ptr: _after_ -x */ G.xfilespecs = argc - G.filespecs - 1; break; /* skip rest of args */ } G.process_all_files = FALSE; } else G.process_all_files = TRUE; /* for speed */ #else /* !SFX || SFX_EXDIR */ /* check for -x or -d */ G.filespecs = argc; G.xfilespecs = 0; if (argc > 0) { int in_files=FALSE, in_xfiles=FALSE; char **pp = argv-1; G.process_all_files = FALSE; G.pfnames = argv; while (*++pp) { Trace((stderr, "pp - argv = %d\n", pp-argv)); #ifdef CMS_MVS if (!uO.exdir && STRNICMP(*pp, "-d", 2) == 0) { #else if (!uO.exdir && strncmp(*pp, "-d", 2) == 0) { #endif int firstarg = (pp == argv); uO.exdir = (*pp) + 2; if (in_files) { /* ... zipfile ... -d exdir ... */ *pp = (char *)NULL; /* terminate G.pfnames */ G.filespecs = pp - G.pfnames; in_files = FALSE; } else if (in_xfiles) { *pp = (char *)NULL; /* terminate G.pxnames */ G.xfilespecs = pp - G.pxnames; /* "... -x xlist -d exdir": nothing left */ } /* first check for "-dexdir", then for "-d exdir" */ if (*uO.exdir == '\0') { if (*++pp) uO.exdir = *pp; else { Info(slide, 0x401, ((char *)slide, LoadFarString(MustGiveExdir))); /* don't extract here by accident */ retcode = PK_PARAM; goto cleanup_and_exit; } } if (firstarg) { /* ... zipfile -d exdir ... */ if (pp[1]) { G.pfnames = pp + 1; /* argv+2 */ G.filespecs = argc - (G.pfnames-argv); /* for now... */ } else { G.process_all_files = TRUE; G.pfnames = (char **)fnames; /* GRR: necessary? */ G.filespecs = 0; /* GRR: necessary? */ break; } } } else if (!in_xfiles) { if (strcmp(*pp, "-x") == 0) { in_xfiles = TRUE; if (pp == G.pfnames) { G.pfnames = (char **)fnames; /* defaults */ G.filespecs = 0; } else if (in_files) { *pp = 0; /* terminate G.pfnames */ G.filespecs = pp - G.pfnames; /* adjust count */ in_files = FALSE; } G.pxnames = pp + 1; /* excluded-names ptr starts after -x */ G.xfilespecs = argc - (G.pxnames-argv); /* anything left */ } else in_files = TRUE; } } } else G.process_all_files = TRUE; /* for speed */ if (uO.exdir != (char *)NULL && !G.extract_flag) /* -d ignored */ Info(slide, 0x401, ((char *)slide, LoadFarString(NotExtracting))); #endif /* ?(SFX && !SFX_EXDIR) */ #ifdef UNICODE_SUPPORT /* set Unicode-escape-all if option -U used */ if (uO.U_flag == 1) # ifdef UNICODE_WCHAR G.unicode_escape_all = TRUE; # else Info(slide, 0x401, ((char *)slide, LoadFarString(UTF8EscapeUnSupp))); # endif #endif /*--------------------------------------------------------------------------- Okey dokey, we have everything we need to get started. Let's roll. ---------------------------------------------------------------------------*/ retcode = process_zipfiles(__G); cleanup_and_exit: #if (defined(REENTRANT) && !defined(NO_EXCEPT_SIGNALS)) /* restore all signal handlers back to their state at function entry */ while (oldsighandlers != NULL) { savsigs_info *thissigsav = oldsighandlers; signal(thissigsav->sigtype, thissigsav->sighandler); oldsighandlers = thissigsav->previous; free(thissigsav); } #endif #if (defined(MALLOC_WORK) && !defined(REENTRANT)) if (G.area.Slide != (uch *)NULL) { free(G.area.Slide); G.area.Slide = (uch *)NULL; } #endif #if (defined(MSDOS) && !defined(SFX) && !defined(WINDLL)) if (retcode != PK_OK) check_for_windows("UnZip"); #endif return(retcode); } /* end main()/unzip() */ #if (defined(REENTRANT) && !defined(NO_EXCEPT_SIGNALS)) /*******************************/ /* Function setsignalhandler() */ /*******************************/ static int setsignalhandler(__G__ p_savedhandler_chain, signal_type, newhandler) __GDEF savsigs_info **p_savedhandler_chain; int signal_type; void (*newhandler)(int); { savsigs_info *savsig; savsig = malloc(sizeof(savsigs_info)); if (savsig == NULL) { /* error message and break */ Info(slide, 0x401, ((char *)slide, LoadFarString(CantSaveSigHandler))); return PK_MEM; } savsig->sigtype = signal_type; savsig->sighandler = signal(SIGINT, newhandler); if (savsig->sighandler == SIG_ERR) { free(savsig); } else { savsig->previous = *p_savedhandler_chain; *p_savedhandler_chain = savsig; } return PK_OK; } /* end function setsignalhandler() */ #endif /* REENTRANT && !NO_EXCEPT_SIGNALS */ /**********************/ /* Function uz_opts() */ /**********************/ int uz_opts(__G__ pargc, pargv) __GDEF int *pargc; char ***pargv; { char **argv, *s; int argc, c, error=FALSE, negative=0, showhelp=0; argc = *pargc; argv = *pargv; uO.exdir = sfx_get_tmp_path(0); uO.overwrite_all = 1; sfx_app_set_args(argc-1, argv+1); while (++argv, (--argc > 0 && *argv != NULL /*&& **argv == '-'*/)) { #if 0 s = *argv + 1; while ((c = *s++) != 0) { /* "!= 0": prevent Turbo C warning */ #ifdef CMS_MVS switch (tolower(c)) #else switch (c) #endif { case ('-'): ++negative; break; #ifdef RISCOS case ('/'): if (negative) { /* negative not allowed with -/ swap */ Info(slide, 0x401, ((char *)slide, "error: must give extensions list")); return(PK_PARAM); /* don't extract here by accident */ } exts2swap = s; /* override Unzip$Exts */ s += strlen(s); break; #endif case ('a'): if (negative) { uO.aflag = MAX(uO.aflag-negative,0); negative = 0; } else ++uO.aflag; break; #if (defined(DLL) && defined(API_DOC)) case ('A'): /* extended help for API */ APIhelp(__G__ argc, argv); *pargc = -1; /* signal to exit successfully */ return 0; #endif case ('b'): if (negative) { #if (defined(TANDEM) || defined(VMS)) uO.bflag = MAX(uO.bflag-negative,0); #endif negative = 0; /* do nothing: "-b" is default */ } else { #ifdef VMS if (uO.aflag == 0) ++uO.bflag; #endif #ifdef TANDEM ++uO.bflag; #endif uO.aflag = 0; } break; #ifdef UNIXBACKUP case ('B'): /* -B: back up existing files */ if (negative) uO.B_flag = FALSE, negative = 0; else uO.B_flag = TRUE; break; #endif case ('c'): if (negative) { uO.cflag = FALSE, negative = 0; #ifdef NATIVE uO.aflag = 0; #endif } else { uO.cflag = TRUE; #ifdef NATIVE uO.aflag = 2; /* so you can read it on the screen */ #endif #ifdef DLL if (G.redirect_text) G.redirect_data = 2; #endif } break; #ifndef CMS_MVS case ('C'): /* -C: match filenames case-insensitively */ if (negative) uO.C_flag = FALSE, negative = 0; else uO.C_flag = TRUE; break; #endif /* !CMS_MVS */ #if (!defined(SFX) || defined(SFX_EXDIR)) case ('d'): if (negative) { /* negative not allowed with -d exdir */ Info(slide, 0x401, ((char *)slide, LoadFarString(MustGiveExdir))); return(PK_PARAM); /* don't extract here by accident */ } if (uO.exdir != (char *)NULL) { Info(slide, 0x401, ((char *)slide, LoadFarString(OnlyOneExdir))); return(PK_PARAM); /* GRR: stupid restriction? */ } else { /* first check for "-dexdir", then for "-d exdir" */ uO.exdir = s; if (*uO.exdir == '\0') { if (argc > 1) { --argc; uO.exdir = *++argv; if (*uO.exdir == '-') { Info(slide, 0x401, ((char *)slide, LoadFarString(MustGiveExdir))); return(PK_PARAM); } /* else uO.exdir points at extraction dir */ } else { Info(slide, 0x401, ((char *)slide, LoadFarString(MustGiveExdir))); return(PK_PARAM); } } /* uO.exdir now points at extraction dir (-dexdir or * -d exdir); point s at end of exdir to avoid mis- * interpretation of exdir characters as more options */ if (*s != 0) while (*++s != 0) ; } break; #endif /* !SFX || SFX_EXDIR */ #if (!defined(NO_TIMESTAMPS)) case ('D'): /* -D: Skip restoring dir (or any) timestamp. */ if (negative) { uO.D_flag = MAX(uO.D_flag-negative,0); negative = 0; } else uO.D_flag++; break; #endif /* (!NO_TIMESTAMPS) */ case ('e'): /* just ignore -e, -x options (extract) */ break; #ifdef MACOS case ('E'): /* -E [MacOS] display Mac e.f. when restoring */ if( negative ) { uO.E_flag = FALSE, negative = 0; } else { uO.E_flag = TRUE; } break; #endif /* MACOS */ case ('f'): /* "freshen" (extract only newer files) */ if (negative) uO.fflag = uO.uflag = FALSE, negative = 0; else uO.fflag = uO.uflag = TRUE; break; #if (defined(RISCOS) || defined(ACORN_FTYPE_NFS)) case ('F'): /* Acorn filetype & NFS extension handling */ if (negative) uO.acorn_nfs_ext = FALSE, negative = 0; else uO.acorn_nfs_ext = TRUE; break; #endif /* RISCOS || ACORN_FTYPE_NFS */ case ('h'): /* just print help message and quit */ if (showhelp == 0) { #ifndef SFX if (*s == 'h') showhelp = 2; else #endif /* !SFX */ { showhelp = 1; } } break; #ifdef MACOS case ('i'): /* -i [MacOS] ignore filenames stored in Mac ef */ if( negative ) { uO.i_flag = FALSE, negative = 0; } else { uO.i_flag = TRUE; } break; #endif /* MACOS */ case ('j'): /* junk pathnames/directory structure */ if (negative) uO.jflag = FALSE, negative = 0; else uO.jflag = TRUE; break; #if (defined(ATH_BEO) || defined(MACOS)) case ('J'): /* Junk AtheOS, BeOS or MacOS file attributes */ if( negative ) { uO.J_flag = FALSE, negative = 0; } else { uO.J_flag = TRUE; } break; #endif /* ATH_BEO || MACOS */ #ifdef ATH_BEO_UNX case ('K'): if (negative) { uO.K_flag = FALSE, negative = 0; } else { uO.K_flag = TRUE; } break; #endif /* ATH_BEO_UNX */ #ifndef SFX case ('l'): if (negative) { uO.vflag = MAX(uO.vflag-negative,0); negative = 0; } else ++uO.vflag; break; #endif /* !SFX */ #ifndef CMS_MVS case ('L'): /* convert (some) filenames to lowercase */ if (negative) { uO.L_flag = MAX(uO.L_flag-negative,0); negative = 0; } else ++uO.L_flag; break; #endif /* !CMS_MVS */ #ifdef MORE #ifdef CMS_MVS case ('m'): #endif case ('M'): /* send all screen output through "more" fn. */ /* GRR: eventually check for numerical argument => height */ if (negative) G.M_flag = FALSE, negative = 0; else G.M_flag = TRUE; break; #endif /* MORE */ case ('n'): /* don't overwrite any files */ if (negative) uO.overwrite_none = FALSE, negative = 0; else uO.overwrite_none = TRUE; break; #ifdef AMIGA case ('N'): /* restore comments as filenotes */ if (negative) uO.N_flag = FALSE, negative = 0; else uO.N_flag = TRUE; break; #endif /* AMIGA */ case ('o'): /* OK to overwrite files without prompting */ if (negative) { uO.overwrite_all = MAX(uO.overwrite_all-negative,0); negative = 0; } else ++uO.overwrite_all; break; case ('p'): /* pipes: extract to stdout, no messages */ if (negative) { uO.cflag = FALSE; uO.qflag = MAX(uO.qflag-999,0); negative = 0; } else { uO.cflag = TRUE; uO.qflag += 999; } break; #if CRYPT /* GRR: yes, this is highly insecure, but dozens of people * have pestered us for this, so here we go... */ case ('P'): if (negative) { /* negative not allowed with -P passwd */ Info(slide, 0x401, ((char *)slide, LoadFarString(MustGivePasswd))); return(PK_PARAM); /* don't extract here by accident */ } if (uO.pwdarg != (char *)NULL) { /* GRR: eventually support multiple passwords? Info(slide, 0x401, ((char *)slide, LoadFarString(OnlyOnePasswd))); return(PK_PARAM); */ } else { /* first check for "-Ppasswd", then for "-P passwd" */ uO.pwdarg = s; if (*uO.pwdarg == '\0') { if (argc > 1) { --argc; uO.pwdarg = *++argv; if (*uO.pwdarg == '-') { Info(slide, 0x401, ((char *)slide, LoadFarString(MustGivePasswd))); return(PK_PARAM); } /* else pwdarg points at decryption password */ } else { Info(slide, 0x401, ((char *)slide, LoadFarString(MustGivePasswd))); return(PK_PARAM); } } /* pwdarg now points at decryption password (-Ppasswd or * -P passwd); point s at end of passwd to avoid mis- * interpretation of passwd characters as more options */ if (*s != 0) while (*++s != 0) ; } break; #endif /* CRYPT */ case ('q'): /* quiet: fewer comments/messages */ if (negative) { uO.qflag = MAX(uO.qflag-negative,0); negative = 0; } else ++uO.qflag; break; #ifdef QDOS case ('Q'): /* QDOS flags */ qlflag ^= strtol(s, &s, 10); break; /* we XOR this as we can config qlflags */ #endif #ifdef TANDEM case ('r'): /* remove file extensions */ if (negative) uO.rflag = FALSE, negative = 0; else uO.rflag = TRUE; break; #endif /* TANDEM */ #ifdef DOS_FLX_NLM_OS2_W32 case ('s'): /* spaces in filenames: allow by default */ if (negative) uO.sflag = FALSE, negative = 0; else uO.sflag = TRUE; break; #endif /* DOS_FLX_NLM_OS2_W32 */ #ifdef VMS /* VMS: extract "text" files in Stream_LF format (-a[a]) */ case ('S'): if (negative) uO.S_flag = FALSE, negative = 0; else uO.S_flag = TRUE; break; #endif /* VMS */ case ('t'): if (negative) uO.tflag = FALSE, negative = 0; else uO.tflag = TRUE; break; #ifdef TIMESTAMP case ('T'): if (negative) uO.T_flag = FALSE, negative = 0; else uO.T_flag = TRUE; break; #endif case ('u'): /* update (extract only new and newer files) */ if (negative) uO.uflag = FALSE, negative = 0; else uO.uflag = TRUE; break; #ifdef UNICODE_SUPPORT case ('U'): /* escape UTF-8, or disable UTF-8 support */ if (negative) { uO.U_flag = MAX(uO.U_flag-negative,0); negative = 0; } else uO.U_flag++; break; #else /* !UNICODE_SUPPORT */ #ifndef CMS_MVS case ('U'): /* obsolete; to be removed in version 6.0 */ if (negative) uO.L_flag = TRUE, negative = 0; else uO.L_flag = FALSE; break; #endif /* !CMS_MVS */ #endif /* ?UNICODE_SUPPORT */ #ifndef SFX case ('v'): /* verbose */ if (negative) { uO.vflag = MAX(uO.vflag-negative,0); negative = 0; } else if (uO.vflag) ++uO.vflag; else uO.vflag = 2; break; #endif /* !SFX */ #ifndef CMS_MVS case ('V'): /* Version (retain VMS/DEC-20 file versions) */ if (negative) uO.V_flag = FALSE, negative = 0; else uO.V_flag = TRUE; break; #endif /* !CMS_MVS */ #ifdef WILD_STOP_AT_DIR case ('W'): /* Wildcard interpretation (stop at '/'?) */ if (negative) uO.W_flag = FALSE, negative = 0; else uO.W_flag = TRUE; break; #endif /* WILD_STOP_AT_DIR */ case ('x'): /* extract: default */ #ifdef SFX /* when 'x' is the only option in this argument, and the * next arg is not an option, assume this initiates an * exclusion list (-x xlist): terminate option-scanning * and leave uz_opts with argv still pointing to "-x"; * the xlist is processed later */ if (s - argv[0] == 2 && *s == '\0' && argc > 1 && argv[1][0] != '-') { /* break out of nested loops without "++argv;--argc" */ goto opts_done; } #endif /* SFX */ break; #if (defined(RESTORE_UIDGID) || defined(RESTORE_ACL)) case ('X'): /* restore owner/protection info (need privs?) */ if (negative) { uO.X_flag = MAX(uO.X_flag-negative,0); negative = 0; } else ++uO.X_flag; break; #endif /* RESTORE_UIDGID || RESTORE_ACL */ #ifdef VMS case ('Y'): /* Treat ".nnn" as ";nnn" version. */ if (negative) uO.Y_flag = FALSE, negative = 0; else uO.Y_flag = TRUE; break; #endif /* VMS */ case ('z'): /* display only the archive comment */ if (negative) { uO.zflag = MAX(uO.zflag-negative,0); negative = 0; } else ++uO.zflag; break; #ifndef SFX case ('Z'): /* should have been first option (ZipInfo) */ Info(slide, 0x401, ((char *)slide, LoadFarString(Zfirst))); error = TRUE; break; #endif /* !SFX */ #ifdef VMS case ('2'): /* Force ODS2-compliant names. */ if (negative) uO.ods2_flag = FALSE, negative = 0; else uO.ods2_flag = TRUE; break; #endif /* VMS */ #ifdef DOS_H68_OS2_W32 case ('$'): if (negative) { uO.volflag = MAX(uO.volflag-negative,0); negative = 0; } else ++uO.volflag; break; #endif /* DOS_H68_OS2_W32 */ #if (!defined(RISCOS) && !defined(CMS_MVS) && !defined(TANDEM)) case (':'): /* allow "parent dir" path components */ if (negative) { uO.ddotflag = MAX(uO.ddotflag-negative,0); negative = 0; } else ++uO.ddotflag; break; #endif /* !RISCOS && !CMS_MVS && !TANDEM */ #ifdef UNIX case ('^'): /* allow control chars in filenames */ if (negative) { uO.cflxflag = MAX(uO.cflxflag-negative,0); negative = 0; } else ++uO.cflxflag; break; #endif /* UNIX */ default: error = TRUE; break; } /* end switch */ } /* end while (not end of argument string) */ #endif } /* end while (not done with switches) */ /*--------------------------------------------------------------------------- Check for nonsensical combinations of options. ---------------------------------------------------------------------------*/ #if 0 #ifdef SFX opts_done: /* yes, very ugly...but only used by UnZipSFX with -x xlist */ #endif if (showhelp > 0) { /* just print help message and quit */ *pargc = -1; #ifndef SFX if (showhelp == 2) { help_extended(__G); return PK_OK; } else #endif /* !SFX */ { return USAGE(PK_OK); } } if ((uO.cflag && (uO.tflag || uO.uflag)) || (uO.tflag && uO.uflag) || (uO.fflag && uO.overwrite_none)) { Info(slide, 0x401, ((char *)slide, LoadFarString(InvalidOptionsMsg))); error = TRUE; } if (uO.aflag > 2) uO.aflag = 2; #ifdef VMS if (uO.bflag > 2) uO.bflag = 2; /* Clear -s flag when converting text files. */ if (uO.aflag <= 0) uO.S_flag = 0; #endif /* VMS */ if (uO.overwrite_all && uO.overwrite_none) { Info(slide, 0x401, ((char *)slide, LoadFarString(IgnoreOOptionMsg))); uO.overwrite_all = FALSE; } #ifdef MORE if (G.M_flag && !isatty(1)) /* stdout redirected: "more" func. useless */ G.M_flag = 0; #endif #ifdef SFX if (error) #else if ((argc-- == 0) || error) #endif { *pargc = argc; *pargv = argv; #ifndef SFX if (uO.vflag >= 2 && argc == -1) { /* "unzip -v" */ show_version_info(__G); return PK_OK; } if (!G.noargs && !error) error = TRUE; /* had options (not -h or -v) but no zipfile */ #endif /* !SFX */ return USAGE(error); } #endif #ifdef SFX /* print our banner unless we're being fairly quiet */ if (uO.qflag < 2) Info(slide, error? 1 : 0, ((char *)slide, LoadFarString(UnzipSFXBanner), UZ_MAJORVER, UZ_MINORVER, UZ_PATCHLEVEL, UZ_BETALEVEL, LoadFarStringSmall(VersionDate))); #ifdef BETA /* always print the beta warning: no unauthorized distribution!! */ Info(slide, error? 1 : 0, ((char *)slide, LoadFarString(BetaVersion), "\n", "SFX")); #endif #endif /* SFX */ if (uO.cflag || uO.tflag || uO.vflag || uO.zflag #ifdef TIMESTAMP || uO.T_flag #endif ) G.extract_flag = FALSE; else G.extract_flag = TRUE; *pargc = argc; *pargv = argv; return PK_OK; } /* end function uz_opts() */ /********************/ /* Function usage() */ /********************/ #ifdef SFX # ifdef VMS # define LOCAL "X.\n\ (Must quote upper-case options, like \"-V\", unless SET PROC/PARSE=EXTEND.)" # endif # ifdef UNIX # define LOCAL "X" # endif # ifdef DOS_OS2_W32 # define LOCAL "s$" # endif # if (defined(FLEXOS) || defined(NLM)) # define LOCAL "s" # endif # ifdef AMIGA # define LOCAL "N" # endif /* Default for all other systems: */ # ifndef LOCAL # define LOCAL "" # endif # ifndef NO_TIMESTAMP # ifdef MORE # define SFXOPT1 "DM" # else # define SFXOPT1 "D" # endif # else # ifdef MORE # define SFXOPT1 "M" # else # define SFXOPT1 "" # endif # endif int usage(__G__ error) /* return PK-type error code */ __GDEF int error; { Info(slide, error? 1 : 0, ((char *)slide, LoadFarString(UnzipSFXBanner), UZ_MAJORVER, UZ_MINORVER, UZ_PATCHLEVEL, UZ_BETALEVEL, LoadFarStringSmall(VersionDate))); Info(slide, error? 1 : 0, ((char *)slide, LoadFarString(UnzipSFXOpts), SFXOPT1, LOCAL)); #ifdef BETA Info(slide, error? 1 : 0, ((char *)slide, LoadFarString(BetaVersion), "\n", "SFX")); #endif if (error) return PK_PARAM; else return PK_COOL; /* just wanted usage screen: no error */ } /* end function usage() */ #else /* !SFX */ # ifdef VMS # define QUOT '\"' # define QUOTS "\"" # else # define QUOT ' ' # define QUOTS "" # endif int usage(__G__ error) /* return PK-type error code */ __GDEF int error; { int flag = (error? 1 : 0); /*--------------------------------------------------------------------------- Print either ZipInfo usage or UnZip usage, depending on incantation. (Strings must be no longer than 512 bytes for Turbo C, apparently.) ---------------------------------------------------------------------------*/ if (uO.zipinfo_mode) { #ifndef NO_ZIPINFO Info(slide, flag, ((char *)slide, LoadFarString(ZipInfoUsageLine1), ZI_MAJORVER, ZI_MINORVER, UZ_PATCHLEVEL, UZ_BETALEVEL, LoadFarStringSmall(VersionDate), LoadFarStringSmall2(ZipInfoExample), QUOTS,QUOTS)); Info(slide, flag, ((char *)slide, LoadFarString(ZipInfoUsageLine2))); Info(slide, flag, ((char *)slide, LoadFarString(ZipInfoUsageLine3), LoadFarStringSmall(ZipInfoUsageLine4))); #ifdef VMS Info(slide, flag, ((char *)slide, "\n\ You must quote non-lowercase options and filespecs, unless SET PROC/PARSE=EXT.\ \n")); #endif #endif /* !NO_ZIPINFO */ } else { /* UnZip mode */ Info(slide, flag, ((char *)slide, LoadFarString(UnzipUsageLine1), UZ_MAJORVER, UZ_MINORVER, UZ_PATCHLEVEL, UZ_BETALEVEL, LoadFarStringSmall(VersionDate))); #ifdef BETA Info(slide, flag, ((char *)slide, LoadFarString(BetaVersion), "", "")); #endif Info(slide, flag, ((char *)slide, LoadFarString(UnzipUsageLine2), ZIPINFO_MODE_OPTION, LoadFarStringSmall(ZipInfoMode))); #ifdef VMS if (!error) /* maybe no command-line tail found; show extra help */ Info(slide, flag, ((char *)slide, LoadFarString(VMSusageLine2b))); #endif Info(slide, flag, ((char *)slide, LoadFarString(UnzipUsageLine3), LoadFarStringSmall(local1))); Info(slide, flag, ((char *)slide, LoadFarString(UnzipUsageLine4), LoadFarStringSmall(local2), LoadFarStringSmall2(local3))); /* This is extra work for SMALL_MEM, but it will work since * LoadFarStringSmall2 uses the same buffer. Remember, this * is a hack. */ Info(slide, flag, ((char *)slide, LoadFarString(UnzipUsageLine5), LoadFarStringSmall(Example2), LoadFarStringSmall2(Example3), LoadFarStringSmall2(Example3))); } /* end if (uO.zipinfo_mode) */ if (error) return PK_PARAM; else return PK_COOL; /* just wanted usage screen: no error */ } /* end function usage() */ #endif /* ?SFX */ #ifndef SFX /* Print extended help to stdout. */ static void help_extended(__G) __GDEF { extent i; /* counter for help array */ /* help array */ static ZCONST char *text[] = { "", "Extended Help for UnZip", "", "See the UnZip Manual for more detailed help", "", "", "UnZip lists and extracts files in zip archives. The default action is to", "extract zipfile entries to the current directory, creating directories as", "needed. With appropriate options, UnZip lists the contents of archives", "instead.", "", "Basic unzip command line:", " unzip [-Z] options archive[.zip] [file ...] [-x xfile ...] [-d exdir]", "", "Some examples:", " unzip -l foo.zip - list files in short format in archive foo.zip", "", " unzip -t foo - test the files in archive foo", "", " unzip -Z foo - list files using more detailed zipinfo format", "", " unzip foo - unzip the contents of foo in current dir", "", " unzip -a foo - unzip foo and convert text files to local OS", "", "If unzip is run in zipinfo mode, a more detailed list of archive contents", "is provided. The -Z option sets zipinfo mode and changes the available", "options.", "", "Basic zipinfo command line:", " zipinfo options archive[.zip] [file ...] [-x xfile ...]", " unzip -Z options archive[.zip] [file ...] [-x xfile ...]", "", "Below, Mac OS refers to Mac OS before Mac OS X. Mac OS X is a Unix based", "port and is referred to as Unix Apple.", "", "", "unzip options:", " -Z Switch to zipinfo mode. Must be first option.", " -hh Display extended help.", " -A [OS/2, Unix DLL] Print extended help for DLL.", " -c Extract files to stdout/screen. As -p but include names. Also,", " -a allowed and EBCDIC conversions done if needed.", " -f Freshen by extracting only if older file on disk.", " -l List files using short form.", " -p Extract files to pipe (stdout). Only file data is output and all", " files extracted in binary mode (as stored).", " -t Test archive files.", " -T Set timestamp on archive(s) to that of newest file. Similar to", " zip -o but faster.", " -u Update existing older files on disk as -f and extract new files.", " -v Use verbose list format. If given alone as unzip -v show version", " information. Also can be added to other list commands for more", " verbose output.", " -z Display only archive comment.", "", "unzip modifiers:", " -a Convert text files to local OS format. Convert line ends, EOF", " marker, and from or to EBCDIC character set as needed.", " -b Treat all files as binary. [Tandem] Force filecode 180 ('C').", " [VMS] Autoconvert binary files. -bb forces convert of all files.", " -B [UNIXBACKUP compile option enabled] Save a backup copy of each", " overwritten file in foo~ or foo~99999 format.", " -C Use case-insensitive matching.", " -D Skip restoration of timestamps for extracted directories. On VMS this", " is on by default and -D essentially becames -DD.", " -DD Skip restoration of timestamps for all entries.", " -E [MacOS (not Unix Apple)] Display contents of MacOS extra field during", " restore.", " -F [Acorn] Suppress removal of NFS filetype extension. [Non-Acorn if", " ACORN_FTYPE_NFS] Translate filetype and append to name.", " -i [MacOS] Ignore filenames in MacOS extra field. Instead, use name in", " standard header.", " -j Junk paths and deposit all files in extraction directory.", " -J [BeOS] Junk file attributes. [MacOS] Ignore MacOS specific info.", " -K [AtheOS, BeOS, Unix] Restore SUID/SGID/Tacky file attributes.", " -L Convert to lowercase any names from uppercase only file system.", " -LL Convert all files to lowercase.", " -M Pipe all output through internal pager similar to Unix more(1).", " -n Never overwrite existing files. Skip extracting that file, no prompt.", " -N [Amiga] Extract file comments as Amiga filenotes.", " -o Overwrite existing files without prompting. Useful with -f. Use with", " care.", " -P p Use password p to decrypt files. THIS IS INSECURE! Some OS show", " command line to other users.", " -q Perform operations quietly. The more q (as in -qq) the quieter.", " -s [OS/2, NT, MS-DOS] Convert spaces in filenames to underscores.", " -S [VMS] Convert text files (-a, -aa) into Stream_LF format.", " -U [UNICODE enabled] Show non-local characters as #Uxxxx or #Lxxxxxx ASCII", " text escapes where x is hex digit. [Old] -U used to leave names", " uppercase if created on MS-DOS, VMS, etc. See -L.", " -UU [UNICODE enabled] Disable use of stored UTF-8 paths. Note that UTF-8", " paths stored as native local paths are still processed as Unicode.", " -V Retain VMS file version numbers.", " -W [Only if WILD_STOP_AT_DIR] Modify pattern matching so ? and * do not", " match directory separator /, but ** does. Allows matching at specific", " directory levels.", " -X [VMS, Unix, OS/2, NT, Tandem] Restore UICs and ACL entries under VMS,", " or UIDs/GIDs under Unix, or ACLs under certain network-enabled", " versions of OS/2, or security ACLs under Windows NT. Can require", " user privileges.", " -XX [NT] Extract NT security ACLs after trying to enable additional", " system privileges.", " -Y [VMS] Treat archived name endings of .nnn as VMS version numbers.", " -$ [MS-DOS, OS/2, NT] Restore volume label if extraction medium is", " removable. -$$ allows fixed media (hard drives) to be labeled.", " -/ e [Acorn] Use e as extension list.", " -: [All but Acorn, VM/CMS, MVS, Tandem] Allow extract archive members into", " locations outside of current extraction root folder. This allows", " paths such as ../foo to be extracted above the current extraction", " directory, which can be a security problem.", " -^ [Unix] Allow control characters in names of extracted entries. Usually", " this is not a good thing and should be avoided.", " -2 [VMS] Force unconditional conversion of names to ODS-compatible names.", " Default is to exploit destination file system, preserving cases and", " extended name characters on ODS5 and applying ODS2 filtering on ODS2.", "", "", "Wildcards:", " Internally unzip supports the following wildcards:", " ? (or %% or #, depending on OS) matches any single character", " * matches any number of characters, including zero", " [list] matches char in list (regex), can do range [ac-f], all but [!bf]", " If port supports [], must escape [ as [[]", " For shells that expand wildcards, escape (\\* or \"*\") so unzip can recurse.", "", "Include and Exclude:", " -i pattern pattern ... include files that match a pattern", " -x pattern pattern ... exclude files that match a pattern", " Patterns are paths with optional wildcards and match paths as stored in", " archive. Exclude and include lists end at next option or end of line.", " unzip archive -x pattern pattern ...", "", "Multi-part (split) archives (archives created as a set of split files):", " Currently split archives are not readable by unzip. A workaround is", " to use zip to convert the split archive to a single-file archive and", " use unzip on that. See the manual page for Zip 3.0 or later.", "", "Streaming (piping into unzip):", " Currently unzip does not support streaming. The funzip utility can be", " used to process the first entry in a stream.", " cat archive | funzip", "", "Testing archives:", " -t test contents of archive", " This can be modified using -q for quieter operation, and -qq for even", " quieter operation.", "", "Unicode:", " If compiled with Unicode support, unzip automatically handles archives", " with Unicode entries. Currently Unicode on Win32 systems is limited.", " Characters not in the current character set are shown as ASCII escapes", " in the form #Uxxxx where the Unicode character number fits in 16 bits,", " or #Lxxxxxx where it doesn't, where x is the ASCII character for a hex", " digit.", "", "", "zipinfo options (these are used in zipinfo mode (unzip -Z ...)):", " -1 List names only, one per line. No headers/trailers. Good for scripts.", " -2 List names only as -1, but include headers, trailers, and comments.", " -s List archive entries in short Unix ls -l format. Default list format.", " -m List in long Unix ls -l format. As -s, but includes compression %.", " -l List in long Unix ls -l format. As -m, but compression in bytes.", " -v List zipfile information in verbose, multi-page format.", " -h List header line. Includes archive name, actual size, total files.", " -M Pipe all output through internal pager similar to Unix more(1) command.", " -t List totals for files listed or for all files. Includes uncompressed", " and compressed sizes, and compression factors.", " -T Print file dates and times in a sortable decimal format (yymmdd.hhmmss)", " Default date and time format is a more human-readable version.", " -U [UNICODE] If entry has a UTF-8 Unicode path, display any characters", " not in current character set as text #Uxxxx and #Lxxxxxx escapes", " representing the Unicode character number of the character in hex.", " -UU [UNICODE] Disable use of any UTF-8 path information.", " -z Include archive comment if any in listing.", "", "", "funzip stream extractor:", " funzip extracts the first member in an archive to stdout. Typically", " used to unzip the first member of a stream or pipe. If a file argument", " is given, read from that file instead of stdin.", "", "funzip command line:", " funzip [-password] [input[.zip|.gz]]", "", "", "unzipsfx self extractor:", " Self-extracting archives made with unzipsfx are no more (or less)", " portable across different operating systems than unzip executables.", " In general, a self-extracting archive made on a particular Unix system,", " for example, will only self-extract under the same flavor of Unix.", " Regular unzip may still be used to extract embedded archive however.", "", "unzipsfx command line:", " [-options] [file(s) ... [-x xfile(s) ...]]", "", "unzipsfx options:", " -c, -p - Output to pipe. (See above for unzip.)", " -f, -u - Freshen and Update, as for unzip.", " -t - Test embedded archive. (Can be used to list contents.)", " -z - Print archive comment. (See unzip above.)", "", "unzipsfx modifiers:", " Most unzip modifiers are supported. These include", " -a - Convert text files.", " -n - Never overwrite.", " -o - Overwrite without prompting.", " -q - Quiet operation.", " -C - Match names case-insensitively.", " -j - Junk paths.", " -V - Keep version numbers.", " -s - Convert spaces to underscores.", " -$ - Restore volume label.", "", "If unzipsfx compiled with SFX_EXDIR defined, -d option also available:", " -d exd - Extract to directory exd.", "By default, all files extracted to current directory. This option", "forces extraction to specified directory.", "", "See unzipsfx manual page for more information.", "" }; for (i = 0; i < sizeof(text)/sizeof(char *); i++) { Info(slide, 0, ((char *)slide, "%s\n", text[i])); } } /* end function help_extended() */ #ifndef _WIN32_WCE /* Win CE does not support environment variables */ #if (!defined(MODERN) || defined(NO_STDLIB_H)) /* Declare getenv() to be sure (might be missing in some environments) */ extern char *getenv(); #endif #endif /********************************/ /* Function show_version_info() */ /********************************/ static void show_version_info(__G) __GDEF { if (uO.qflag > 3) /* "unzip -vqqqq" */ Info(slide, 0, ((char *)slide, "%d\n", (UZ_MAJORVER*100 + UZ_MINORVER*10 + UZ_PATCHLEVEL))); else { #ifndef _WIN32_WCE /* Win CE does not support environment variables */ char *envptr; #endif int numopts = 0; Info(slide, 0, ((char *)slide, LoadFarString(UnzipUsageLine1v), UZ_MAJORVER, UZ_MINORVER, UZ_PATCHLEVEL, UZ_BETALEVEL, LoadFarStringSmall(VersionDate))); Info(slide, 0, ((char *)slide, LoadFarString(UnzipUsageLine2v))); version(__G); Info(slide, 0, ((char *)slide, LoadFarString(CompileOptions))); #ifdef ACORN_FTYPE_NFS Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(AcornFtypeNFS))); ++numopts; #endif #ifdef ASM_CRC Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(AsmCRC))); ++numopts; #endif #ifdef ASM_INFLATECODES Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(AsmInflateCodes))); ++numopts; #endif #ifdef CHECK_VERSIONS Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(Check_Versions))); ++numopts; #endif #ifdef COPYRIGHT_CLEAN Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(Copyright_Clean))); ++numopts; #endif #ifdef DEBUG Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(UDebug))); ++numopts; #endif #ifdef DEBUG_TIME Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(DebugTime))); ++numopts; #endif #ifdef DLL Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(Dll))); ++numopts; #endif #ifdef DOSWILD Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(DosWild))); ++numopts; #endif #ifdef LZW_CLEAN Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(LZW_Clean))); ++numopts; #endif #ifndef MORE Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(No_More))); ++numopts; #endif #ifdef NO_ZIPINFO Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(No_ZipInfo))); ++numopts; #endif #ifdef NTSD_EAS Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(NTSDExtAttrib))); ++numopts; #endif #if defined(WIN32) && defined(NO_W32TIMES_IZFIX) Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(W32NoIZTimeFix))); ++numopts; #endif #ifdef OLD_THEOS_EXTRA Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(OldTheosExtra))); ++numopts; #endif #ifdef OS2_EAS Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(OS2ExtAttrib))); ++numopts; #endif #ifdef QLZIP Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(SMSExFldOnUnix))); ++numopts; #endif #ifdef REENTRANT Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(Reentrant))); ++numopts; #endif #ifdef REGARGS Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(RegArgs))); ++numopts; #endif #ifdef RETURN_CODES Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(Return_Codes))); ++numopts; #endif #ifdef SET_DIR_ATTRIB Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(SetDirAttrib))); ++numopts; #endif #ifdef SYMLINKS Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(SymLinkSupport))); ++numopts; #endif #ifdef TIMESTAMP Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(TimeStamp))); ++numopts; #endif #ifdef UNIXBACKUP Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(UnixBackup))); ++numopts; #endif #ifdef USE_EF_UT_TIME Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(Use_EF_UT_time))); ++numopts; #endif #ifndef COPYRIGHT_CLEAN Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(Use_Smith_Code))); ++numopts; #endif #ifndef LZW_CLEAN Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(Use_Unshrink))); ++numopts; #endif #ifdef USE_DEFLATE64 Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(Use_Deflate64))); ++numopts; #endif #ifdef UNICODE_SUPPORT # ifdef UTF8_MAYBE_NATIVE sprintf((char *)(slide+256), LoadFarStringSmall(Use_Unicode), LoadFarStringSmall2(G.native_is_utf8 ? SysChUTF8 : SysChOther)); Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), (char *)(slide+256))); # else Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(Use_Unicode))); # endif ++numopts; #endif #ifdef _MBCS sprintf((char *)(slide+256), LoadFarStringSmall(Have_MBCS_Support), (unsigned int)MB_CUR_MAX); Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), (char *)(slide+256))); ++numopts; #endif #ifdef MULT_VOLUME Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(Use_MultiVol))); ++numopts; #endif #ifdef LARGE_FILE_SUPPORT Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(Use_LFS))); ++numopts; #endif #ifdef ZIP64_SUPPORT Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(Use_Zip64))); ++numopts; #endif #if (defined(__DJGPP__) && (__DJGPP__ >= 2)) # ifdef USE_DJGPP_ENV Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(Use_DJGPP_Env))); ++numopts; # endif # ifdef USE_DJGPP_GLOB Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(Use_DJGPP_Glob))); ++numopts; # endif #endif /* __DJGPP__ && (__DJGPP__ >= 2) */ #ifdef USE_VFAT Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(Use_VFAT_support))); ++numopts; #endif #ifdef USE_ZLIB sprintf((char *)(slide+256), LoadFarStringSmall(UseZlib), ZLIB_VERSION, zlibVersion()); Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), (char *)(slide+256))); ++numopts; #endif #ifdef USE_BZIP2 sprintf((char *)(slide+256), LoadFarStringSmall(UseBZip2), BZ2_bzlibVersion()); Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), (char *)(slide+256))); ++numopts; #endif #ifdef VMS_TEXT_CONV Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(VmsTextConv))); ++numopts; #endif #ifdef VMSCLI Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(VmsCLI))); ++numopts; #endif #ifdef VMSWILD Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(VmsWild))); ++numopts; #endif #ifdef WILD_STOP_AT_DIR Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(WildStopAtDir))); ++numopts; #endif #if CRYPT # ifdef PASSWD_FROM_STDIN Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(PasswdStdin))); # endif Info(slide, 0, ((char *)slide, LoadFarString(Decryption), CR_MAJORVER, CR_MINORVER, CR_BETA_VER, LoadFarStringSmall(CryptDate))); ++numopts; #endif /* CRYPT */ if (numopts == 0) Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(None))); #ifndef _WIN32_WCE /* Win CE does not support environment variables */ Info(slide, 0, ((char *)slide, LoadFarString(EnvOptions))); envptr = getenv(LoadFarStringSmall(EnvUnZip)); Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat), LoadFarStringSmall(EnvUnZip), (envptr == (char *)NULL || *envptr == 0)? LoadFarStringSmall2(None) : envptr)); envptr = getenv(LoadFarStringSmall(EnvUnZip2)); Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat), LoadFarStringSmall(EnvUnZip2), (envptr == (char *)NULL || *envptr == 0)? LoadFarStringSmall2(None) : envptr)); envptr = getenv(LoadFarStringSmall(EnvZipInfo)); Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat), LoadFarStringSmall(EnvZipInfo), (envptr == (char *)NULL || *envptr == 0)? LoadFarStringSmall2(None) : envptr)); envptr = getenv(LoadFarStringSmall(EnvZipInfo2)); Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat), LoadFarStringSmall(EnvZipInfo2), (envptr == (char *)NULL || *envptr == 0)? LoadFarStringSmall2(None) : envptr)); #ifndef __RSXNT__ #ifdef __EMX__ envptr = getenv(LoadFarStringSmall(EnvEMX)); Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat), LoadFarStringSmall(EnvEMX), (envptr == (char *)NULL || *envptr == 0)? LoadFarStringSmall2(None) : envptr)); envptr = getenv(LoadFarStringSmall(EnvEMXOPT)); Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat), LoadFarStringSmall(EnvEMXOPT), (envptr == (char *)NULL || *envptr == 0)? LoadFarStringSmall2(None) : envptr)); #endif /* __EMX__ */ #if (defined(__GO32__) && (!defined(__DJGPP__) || (__DJGPP__ < 2))) envptr = getenv(LoadFarStringSmall(EnvGO32)); Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat), LoadFarStringSmall(EnvGO32), (envptr == (char *)NULL || *envptr == 0)? LoadFarStringSmall2(None) : envptr)); envptr = getenv(LoadFarStringSmall(EnvGO32TMP)); Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat), LoadFarStringSmall(EnvGO32TMP), (envptr == (char *)NULL || *envptr == 0)? LoadFarStringSmall2(None) : envptr)); #endif /* __GO32__ && !(__DJGPP__ >= 2) */ #endif /* !__RSXNT__ */ #ifdef RISCOS envptr = getenv(LoadFarStringSmall(EnvUnZipExts)); Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat), LoadFarStringSmall(EnvUnZipExts), (envptr == (char *)NULL || *envptr == 0)? LoadFarStringSmall2(None) : envptr)); #endif /* RISCOS */ #endif /* !_WIN32_WCE */ } } /* end function show_version() */ #endif /* !SFX */ #endif /* !WINDLL */ Carla-2.4.2/data/windows/unzipfx-carla-control/unzip.h000066400000000000000000000630401420416754300227340ustar00rootroot00000000000000/*--------------------------------------------------------------------------- unzip.h (new) Copyright (c) 1990-2009 Info-ZIP. All rights reserved. This header file contains the public macros and typedefs required by both the UnZip sources and by any application using the UnZip API. If UNZIP_INTERNAL is defined, it includes unzpriv.h (containing includes, prototypes and extern variables used by the actual UnZip sources). ---------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- This is version 2009-Jan-02 of the Info-ZIP license. The definitive version of this document should be available at ftp://ftp.info-zip.org/pub/infozip/license.html indefinitely and a copy at http://www.info-zip.org/pub/infozip/license.html. Copyright (c) 1990-2009 Info-ZIP. All rights reserved. For the purposes of this copyright and license, "Info-ZIP" is defined as the following set of individuals: Mark Adler, John Bush, Karl Davis, Harald Denker, Jean-Michel Dubois, Jean-loup Gailly, Hunter Goatley, Ed Gordon, Ian Gorman, Chris Herborth, Dirk Haase, Greg Hartwig, Robert Heath, Jonathan Hudson, Paul Kienitz, David Kirschbaum, Johnny Lee, Onno van der Linden, Igor Mandrichenko, Steve P. Miller, Sergio Monesi, Keith Owens, George Petrov, Greg Roelofs, Kai Uwe Rommel, Steve Salisbury, Dave Smith, Steven M. Schweda, Christian Spieler, Cosmin Truta, Antoine Verheijen, Paul von Behren, Rich Wales, Mike White. This software is provided "as is," without warranty of any kind, express or implied. In no event shall Info-ZIP or its contributors be held liable for any direct, indirect, incidental, special or consequential damages arising out of the use of or inability to use this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the above disclaimer and the following restrictions: 1. Redistributions of source code (in whole or in part) must retain the above copyright notice, definition, disclaimer, and this list of conditions. 2. Redistributions in binary form (compiled executables and libraries) must reproduce the above copyright notice, definition, disclaimer, and this list of conditions in documentation and/or other materials provided with the distribution. Additional documentation is not needed for executables where a command line license option provides these and a note regarding this option is in the executable's startup banner. The sole exception to this condition is redistribution of a standard UnZipSFX binary (including SFXWiz) as part of a self-extracting archive; that is permitted without inclusion of this license, as long as the normal SFX banner has not been removed from the binary or disabled. 3. Altered versions--including, but not limited to, ports to new operating systems, existing ports with new graphical interfaces, versions with modified or added functionality, and dynamic, shared, or static library versions not from Info-ZIP--must be plainly marked as such and must not be misrepresented as being the original source or, if binaries, compiled from the original source. Such altered versions also must not be misrepresented as being Info-ZIP releases--including, but not limited to, labeling of the altered versions with the names "Info-ZIP" (or any variation thereof, including, but not limited to, different capitalizations), "Pocket UnZip," "WiZ" or "MacZip" without the explicit permission of Info-ZIP. Such altered versions are further prohibited from misrepresentative use of the Zip-Bugs or Info-ZIP e-mail addresses or the Info-ZIP URL(s), such as to imply Info-ZIP will provide support for the altered versions. 4. Info-ZIP retains the right to use the names "Info-ZIP," "Zip," "UnZip," "UnZipSFX," "WiZ," "Pocket UnZip," "Pocket Zip," and "MacZip" for its own source and binary releases. ---------------------------------------------------------------------------*/ #ifndef __unzip_h /* prevent multiple inclusions */ #define __unzip_h /*--------------------------------------------------------------------------- Predefined, machine-specific macros. ---------------------------------------------------------------------------*/ #ifdef __GO32__ /* MS-DOS extender: NOT Unix */ # ifdef unix # undef unix # endif # ifdef _unix # undef _unix # endif # ifdef __unix # undef __unix # endif # ifdef __unix__ # undef __unix__ # endif #endif #if ((defined(__convex__) || defined(__convexc__)) && !defined(CONVEX)) # define CONVEX #endif #if (defined(unix) || defined(_unix) || defined(__unix) || defined(__unix__)) # ifndef UNIX # define UNIX # endif #endif /* unix || _unix || __unix || __unix__ */ #if (defined(M_XENIX) || defined(COHERENT) || defined(__hpux)) # ifndef UNIX # define UNIX # endif #endif /* M_XENIX || COHERENT || __hpux */ #if (defined(__NetBSD__) || defined(__FreeBSD__)) # ifndef UNIX # define UNIX # endif #endif /* __NetBSD__ || __FreeBSD__ */ #if (defined(CONVEX) || defined(MINIX) || defined(_AIX) || defined(__QNX__)) # ifndef UNIX # define UNIX # endif #endif /* CONVEX || MINIX || _AIX || __QNX__ */ #if (defined(VM_CMS) || defined(MVS)) # define CMS_MVS #endif #if (defined(__OS2__) && !defined(OS2)) # define OS2 #endif #if (defined(__TANDEM) && !defined(TANDEM)) # define TANDEM #endif #if (defined(__VMS) && !defined(VMS)) # define VMS #endif #if ((defined(__WIN32__) || defined(_WIN32)) && !defined(WIN32)) # define WIN32 #endif #if ((defined(__WINNT__) || defined(__WINNT)) && !defined(WIN32)) # define WIN32 #endif #if defined(_WIN32_WCE) # ifndef WIN32 /* WinCE is treated as a variant of the Win32 API */ # define WIN32 # endif # ifndef UNICODE /* WinCE requires UNICODE wide character support */ # define UNICODE # endif #endif #ifdef __COMPILER_KCC__ # include # ifdef SYS_T20 # define TOPS20 # endif #endif /* __COMPILER_KCC__ */ /* Borland C does not define __TURBOC__ if compiling for a 32-bit platform */ #ifdef __BORLANDC__ # ifndef __TURBOC__ # define __TURBOC__ # endif # if (!defined(__MSDOS__) && !defined(OS2) && !defined(WIN32)) # define __MSDOS__ # endif #endif /* define MSDOS for Turbo C (unless OS/2) and Power C as well as Microsoft C */ #ifdef __POWERC # define __TURBOC__ # define MSDOS #endif /* __POWERC */ #if (defined(__MSDOS__) && !defined(MSDOS)) /* just to make sure */ # define MSDOS #endif /* RSXNTDJ (at least up to v1.3) compiles for WIN32 (RSXNT) using a derivate of the EMX environment, but defines MSDOS and __GO32__. ARG !!! */ #if (defined(MSDOS) && defined(WIN32)) # undef MSDOS /* WIN32 is >>>not<<< MSDOS */ #endif #if (defined(__GO32__) && defined(__EMX__) && defined(__RSXNT__)) # undef __GO32__ #endif #if (defined(linux) && !defined(LINUX)) # define LINUX #endif #ifdef __riscos # define RISCOS #endif #if (defined(THINK_C) || defined(MPW)) # define MACOS #endif #if (defined(__MWERKS__) && defined(macintosh)) # define MACOS #endif /* use prototypes and ANSI libraries if __STDC__, or MS-DOS, or OS/2, or Win32, * or IBM C Set/2, or Borland C, or Watcom C, or GNU gcc (emx or Cygwin), * or Macintosh, or Sequent, or Atari, or IBM RS/6000, or Silicon Graphics, * or Convex?, or AtheOS, or BeOS. */ #if (defined(__STDC__) || defined(MSDOS) || defined(OS2) || defined(WIN32)) # ifndef PROTO # define PROTO # endif # ifndef MODERN # define MODERN # endif #endif #if (defined(__IBMC__) || defined(__BORLANDC__) || defined(__WATCOMC__)) # ifndef PROTO # define PROTO # endif # ifndef MODERN # define MODERN # endif #endif #if (defined(__EMX__) || defined(__CYGWIN__)) # ifndef PROTO # define PROTO # endif # ifndef MODERN # define MODERN # endif #endif #if (defined(MACOS) || defined(ATARI_ST) || defined(RISCOS) || defined(THEOS)) # ifndef PROTO # define PROTO # endif # ifndef MODERN # define MODERN # endif #endif /* Sequent running Dynix/ptx: non-modern compiler */ #if (defined(_AIX) || defined(sgi) || (defined(_SEQUENT_) && !defined(PTX))) # ifndef PROTO # define PROTO # endif # ifndef MODERN # define MODERN # endif #endif #if (defined(CMS_MVS) || defined(__ATHEOS__) || defined(__BEOS__)) /* || defined(CONVEX) ? */ # ifndef PROTO # define PROTO # endif # ifndef MODERN # define MODERN # endif #endif /* Bundled C compiler on HP-UX needs this. Others shouldn't care. */ #if (defined(__hpux)) # ifndef MODERN # define MODERN # endif #endif /* turn off prototypes if requested */ #if (defined(NOPROTO) && defined(PROTO)) # undef PROTO #endif /* used to remove arguments in function prototypes for non-ANSI C */ #ifdef PROTO # define OF(a) a #else # define OF(a) () #endif /* enable the "const" keyword only if MODERN and if not otherwise instructed */ #ifdef MODERN # if (!defined(ZCONST) && (defined(USE_CONST) || !defined(NO_CONST))) # define ZCONST const # endif #endif #ifndef ZCONST # define ZCONST #endif /* Tell Microsoft Visual C++ 2005 (and newer) to leave us alone * and let us use standard C functions the way we're supposed to. * (These preprocessor symbols must appear before the first system * header include. They are located here, because for WINDLL the * first system header includes follow just below.) */ #if defined(_MSC_VER) && (_MSC_VER >= 1400) # ifndef _CRT_SECURE_NO_WARNINGS # define _CRT_SECURE_NO_WARNINGS # endif # ifndef _CRT_NONSTDC_NO_WARNINGS # define _CRT_NONSTDC_NO_WARNINGS # endif # if defined(POCKET_UNZIP) && !defined(_CRT_NON_CONFORMING_SWPRINTFS) # define _CRT_NON_CONFORMING_SWPRINTFS # endif #endif /* NO_UNIXBACKUP overrides UNIXBACKUP */ #if defined(NO_UNIXBACKUP) && defined(UNIXBACKUP) # undef UNIXBACKUP #endif /*--------------------------------------------------------------------------- Grab system-specific public include headers. ---------------------------------------------------------------------------*/ #ifdef POCKET_UNZIP /* WinCE port */ # include "wince/punzip.h" /* must appear before windows.h */ #endif #ifdef WINDLL /* for UnZip, the "basic" part of the win32 api is sufficient */ # ifndef WIN32_LEAN_AND_MEAN # define WIN32_LEAN_AND_MEAN # define IZ_HASDEFINED_WIN32LEAN # endif # include # include "windll/structs.h" # ifdef IZ_HASDEFINED_WIN32LEAN # undef WIN32_LEAN_AND_MEAN # undef IZ_HASDEFINED_WIN32LEAN # endif #endif /*--------------------------------------------------------------------------- Grab system-dependent definition of EXPENTRY for prototypes below. ---------------------------------------------------------------------------*/ #if 0 #if (defined(OS2) && !defined(FUNZIP)) # ifdef UNZIP_INTERNAL # define INCL_NOPM # define INCL_DOSNLS # define INCL_DOSPROCESS # define INCL_DOSDEVICES # define INCL_DOSDEVIOCTL # define INCL_DOSERRORS # define INCL_DOSMISC # ifdef OS2DLL # define INCL_REXXSAA # include # endif # endif /* UNZIP_INTERNAL */ # include # define UZ_EXP EXPENTRY #endif /* OS2 && !FUNZIP */ #endif /* 0 */ #if (defined(OS2) && !defined(FUNZIP)) # if (defined(__IBMC__) || defined(__WATCOMC__)) # define UZ_EXP _System /* compiler keyword */ # else # define UZ_EXP # endif #endif /* OS2 && !FUNZIP */ #if (defined(WINDLL) || defined(USE_UNZIP_LIB)) # ifndef EXPENTRY # define UZ_EXP WINAPI # else # define UZ_EXP EXPENTRY # endif #endif #ifndef UZ_EXP # define UZ_EXP #endif #ifdef __cplusplus extern "C" { #endif /*--------------------------------------------------------------------------- Public typedefs. ---------------------------------------------------------------------------*/ #ifndef _IZ_TYPES_DEFINED #ifdef MODERN typedef void zvoid; #else /* !MODERN */ # ifndef AOS_VS /* mostly modern? */ # ifndef VAXC /* not fully modern, but has knows 'void' */ # define void int # endif /* !VAXC */ # endif /* !AOS_VS */ typedef char zvoid; #endif /* ?MODERN */ typedef unsigned char uch; /* code assumes unsigned bytes; these type- */ typedef unsigned short ush; /* defs replace byte/UWORD/ULONG (which are */ typedef unsigned long ulg; /* predefined on some systems) & match zip */ #define _IZ_TYPES_DEFINED #endif /* !_IZ_TYPES_DEFINED */ /* InputFn is not yet used and is likely to change: */ #ifdef PROTO typedef int (UZ_EXP MsgFn) (zvoid *pG, uch *buf, ulg size, int flag); typedef int (UZ_EXP InputFn) (zvoid *pG, uch *buf, int *size, int flag); typedef void (UZ_EXP PauseFn) (zvoid *pG, ZCONST char *prompt, int flag); typedef int (UZ_EXP PasswdFn) (zvoid *pG, int *rcnt, char *pwbuf, int size, ZCONST char *zfn, ZCONST char *efn); typedef int (UZ_EXP StatCBFn) (zvoid *pG, int fnflag, ZCONST char *zfn, ZCONST char *efn, ZCONST zvoid *details); typedef void (UZ_EXP UsrIniFn) (void); #else /* !PROTO */ typedef int (UZ_EXP MsgFn) (); typedef int (UZ_EXP InputFn) (); typedef void (UZ_EXP PauseFn) (); typedef int (UZ_EXP PasswdFn) (); typedef int (UZ_EXP StatCBFn) (); typedef void (UZ_EXP UsrIniFn) (); #endif /* ?PROTO */ typedef struct _UzpBuffer { /* rxstr */ ulg strlength; /* length of string */ char *strptr; /* pointer to string */ } UzpBuffer; typedef struct _UzpInit { ulg structlen; /* length of the struct being passed */ /* GRR: can we assume that each of these is a 32-bit pointer? if not, * does it matter? add "far" keyword to make sure? */ MsgFn *msgfn; InputFn *inputfn; PauseFn *pausefn; UsrIniFn *userfn; /* user init function to be called after */ /* globals constructed and initialized */ /* pointer to program's environment area or something? */ /* hooks for performance testing? */ /* hooks for extra unzip -v output? (detect CPU or other hardware?) */ /* anything else? let me (Greg) know... */ } UzpInit; typedef struct _UzpCB { ulg structlen; /* length of the struct being passed */ /* GRR: can we assume that each of these is a 32-bit pointer? if not, * does it matter? add "far" keyword to make sure? */ MsgFn *msgfn; InputFn *inputfn; PauseFn *pausefn; PasswdFn *passwdfn; StatCBFn *statrepfn; } UzpCB; /* the collection of general UnZip option flags and option arguments */ typedef struct _UzpOpts { #ifndef FUNZIP char *exdir; /* pointer to extraction root directory (-d option) */ char *pwdarg; /* pointer to command-line password (-P option) */ int zipinfo_mode; /* behave like ZipInfo or like normal UnZip? */ int aflag; /* -a: do ASCII-EBCDIC and/or end-of-line translation */ #ifdef VMS int bflag; /* -b: force fixed record format for binary files */ #endif #ifdef TANDEM int bflag; /* -b: create text files in 'C' format (180)*/ #endif #if defined(UNIX) || defined(OS2) || defined(WIN32) int B_flag; /* -B: back up existing files by renaming to *~##### */ #else #ifdef UNIXBACKUP int B_flag; /* -B: back up existing files by renaming to *~##### */ #endif #endif int cflag; /* -c: output to stdout */ int C_flag; /* -C: match filenames case-insensitively */ int D_flag; /* -D: don't restore directory (-DD: any) timestamps */ #ifdef MACOS int E_flag; /* -E: [MacOS] show Mac extra field during restoring */ #endif int fflag; /* -f: "freshen" (extract only newer files) */ #if (defined(RISCOS) || defined(ACORN_FTYPE_NFS)) int acorn_nfs_ext; /* -F: RISC OS types & NFS filetype extensions */ #endif int hflag; /* -h: header line (zipinfo) */ #ifdef MACOS int i_flag; /* -i: [MacOS] ignore filenames stored in Mac e.f. */ #endif #ifdef RISCOS int scanimage; /* -I: scan image files */ #endif int jflag; /* -j: junk pathnames (unzip) */ #if (defined(__ATHEOS__) || defined(__BEOS__) || defined(MACOS)) int J_flag; /* -J: ignore AtheOS/BeOS/MacOS e. f. info (unzip) */ #endif #if (defined(__ATHEOS__) || defined(__BEOS__) || defined(UNIX)) int K_flag; /* -K: keep setuid/setgid/tacky permissions */ #endif int lflag; /* -12slmv: listing format (zipinfo) */ int L_flag; /* -L: convert filenames from some OSes to lowercase */ int overwrite_none; /* -n: never overwrite files (no prompting) */ #ifdef AMIGA int N_flag; /* -N: restore comments as AmigaDOS filenotes */ #endif int overwrite_all; /* -o: OK to overwrite files without prompting */ #endif /* !FUNZIP */ int qflag; /* -q: produce a lot less output */ #ifdef TANDEM int rflag; /* -r: remove file extensions */ #endif #ifndef FUNZIP #if (defined(MSDOS) || defined(FLEXOS) || defined(OS2) || defined(WIN32)) int sflag; /* -s: convert spaces in filenames to underscores */ #endif #if (defined(NLM)) int sflag; /* -s: convert spaces in filenames to underscores */ #endif #ifdef VMS int S_flag; /* -S: use Stream_LF for text files (-a[a]) */ #endif #if (defined(MSDOS) || defined(__human68k__) || defined(OS2) || defined(WIN32)) int volflag; /* -$: extract volume labels */ #endif int tflag; /* -t: test (unzip) or totals line (zipinfo) */ int T_flag; /* -T: timestamps (unzip) or dec. time fmt (zipinfo) */ int uflag; /* -u: "update" (extract only newer/brand-new files) */ #if defined(UNIX) || defined(VMS) || defined(WIN32) int U_flag; /* -U: escape non-ASCII, -UU No Unicode paths */ #endif int vflag; /* -v: (verbosely) list directory */ int V_flag; /* -V: don't strip VMS version numbers */ int W_flag; /* -W: wildcard '*' won't match '/' dir separator */ #if (defined (__ATHEOS__) || defined(__BEOS__) || defined(UNIX)) int X_flag; /* -X: restore owner/protection or UID/GID or ACLs */ #else #if (defined(TANDEM) || defined(THEOS)) int X_flag; /* -X: restore owner/protection or UID/GID or ACLs */ #else #if (defined(OS2) || defined(VMS) || defined(WIN32)) int X_flag; /* -X: restore owner/protection or UID/GID or ACLs */ #endif #endif #endif #ifdef VMS int Y_flag; /* -Y: treat ".nnn" as ";nnn" version */ #endif int zflag; /* -z: display the zipfile comment (only, for unzip) */ #ifdef VMS int ods2_flag; /* -2: force names to conform to ODS2 */ #endif #if (!defined(RISCOS) && !defined(CMS_MVS) && !defined(TANDEM)) int ddotflag; /* -:: don't skip over "../" path elements */ #endif #ifdef UNIX int cflxflag; /* -^: allow control chars in extracted filenames */ #endif #endif /* !FUNZIP */ } UzpOpts; /* intended to be a private struct: */ typedef struct _ver { uch major; /* e.g., integer 5 */ uch minor; /* e.g., 2 */ uch patchlevel; /* e.g., 0 */ uch not_used; } _version_type; typedef struct _UzpVer { ulg structlen; /* length of the struct being passed */ ulg flag; /* bit 0: is_beta bit 1: uses_zlib */ ZCONST char *betalevel; /* e.g. "g BETA" or "" */ ZCONST char *date; /* e.g. "9 Oct 08" (beta) or "9 October 2008" */ ZCONST char *zlib_version;/* e.g. "1.2.3" or NULL */ _version_type unzip; /* current UnZip version */ _version_type zipinfo; /* current ZipInfo version */ _version_type os2dll; /* OS2DLL version (retained for compatibility */ _version_type windll; /* WinDLL version (retained for compatibility */ _version_type dllapimin; /* last incompatible change of library API */ } UzpVer; /* for Visual BASIC access to Windows DLLs: */ typedef struct _UzpVer2 { ulg structlen; /* length of the struct being passed */ ulg flag; /* bit 0: is_beta bit 1: uses_zlib */ char betalevel[10]; /* e.g. "g BETA" or "" */ char date[20]; /* e.g. "9 Oct 08" (beta) or "9 October 2008" */ char zlib_version[10]; /* e.g. "1.2.3" or NULL */ _version_type unzip; /* current UnZip version */ _version_type zipinfo; /* current ZipInfo version */ _version_type os2dll; /* OS2DLL version (retained for compatibility */ _version_type windll; /* WinDLL version (retained for compatibility */ _version_type dllapimin; /* last incompatible change of library API */ } UzpVer2; typedef struct _Uzp_Siz64 { unsigned long lo32; unsigned long hi32; } Uzp_Siz64; typedef struct _Uzp_cdir_Rec { uch version_made_by[2]; uch version_needed_to_extract[2]; ush general_purpose_bit_flag; ush compression_method; ulg last_mod_dos_datetime; ulg crc32; Uzp_Siz64 csize; Uzp_Siz64 ucsize; ush filename_length; ush extra_field_length; ush file_comment_length; ush disk_number_start; ush internal_file_attributes; ulg external_file_attributes; Uzp_Siz64 relative_offset_local_header; } Uzp_cdir_Rec; #define UZPINIT_LEN sizeof(UzpInit) #define UZPVER_LEN sizeof(UzpVer) #define cbList(func) int (* UZ_EXP func)(char *filename, Uzp_cdir_Rec *crec) /*--------------------------------------------------------------------------- Return (and exit) values of the public UnZip API functions. ---------------------------------------------------------------------------*/ /* external return codes */ #define PK_OK 0 /* no error */ #define PK_COOL 0 /* no error */ #define PK_WARN 1 /* warning error */ #define PK_ERR 2 /* error in zipfile */ #define PK_BADERR 3 /* severe error in zipfile */ #define PK_MEM 4 /* insufficient memory (during initialization) */ #define PK_MEM2 5 /* insufficient memory (password failure) */ #define PK_MEM3 6 /* insufficient memory (file decompression) */ #define PK_MEM4 7 /* insufficient memory (memory decompression) */ #define PK_MEM5 8 /* insufficient memory (not yet used) */ #define PK_NOZIP 9 /* zipfile not found */ #define PK_PARAM 10 /* bad or illegal parameters specified */ #define PK_FIND 11 /* no files found */ #define PK_DISK 50 /* disk full */ #define PK_EOF 51 /* unexpected EOF */ #define IZ_CTRLC 80 /* user hit ^C to terminate */ #define IZ_UNSUP 81 /* no files found: all unsup. compr/encrypt. */ #define IZ_BADPWD 82 /* no files found: all had bad password */ #define IZ_ERRBF 83 /* big-file archive, small-file program */ /* return codes of password fetches (negative = user abort; positive = error) */ #define IZ_PW_ENTERED 0 /* got some password string; use/try it */ #define IZ_PW_CANCEL -1 /* no password available (for this entry) */ #define IZ_PW_CANCELALL -2 /* no password, skip any further pwd. request */ #define IZ_PW_ERROR 5 /* = PK_MEM2 : failure (no mem, no tty, ...) */ /* flag values for status callback function */ #define UZ_ST_START_EXTRACT 1 /* no details */ #define UZ_ST_IN_PROGRESS 2 /* no details */ #define UZ_ST_FINISH_MEMBER 3 /* 'details': extracted size */ /* return values of status callback function */ #define UZ_ST_CONTINUE 0 #define UZ_ST_BREAK 1 /*--------------------------------------------------------------------------- Prototypes for public UnZip API (DLL) functions. ---------------------------------------------------------------------------*/ #define UzpMatch match int UZ_EXP UzpMain OF((int argc, char **argv)); int UZ_EXP UzpAltMain OF((int argc, char **argv, UzpInit *init)); ZCONST UzpVer * UZ_EXP UzpVersion OF((void)); void UZ_EXP UzpFreeMemBuffer OF((UzpBuffer *retstr)); #ifndef WINDLL int UZ_EXP UzpUnzipToMemory OF((char *zip, char *file, UzpOpts *optflgs, UzpCB *UsrFunc, UzpBuffer *retstr)); int UZ_EXP UzpGrep OF((char *archive, char *file, char *pattern, int cmd, int SkipBin, UzpCB *UsrFunc)); #endif #ifdef OS2 int UZ_EXP UzpFileTree OF((char *name, cbList(callBack), char *cpInclude[], char *cpExclude[])); #endif unsigned UZ_EXP UzpVersion2 OF((UzpVer2 *version)); int UZ_EXP UzpValidate OF((char *archive, int AllCodes)); /* default I/O functions (can be swapped out via UzpAltMain() entry point): */ int UZ_EXP UzpMessagePrnt OF((zvoid *pG, uch *buf, ulg size, int flag)); int UZ_EXP UzpMessageNull OF((zvoid *pG, uch *buf, ulg size, int flag)); int UZ_EXP UzpInput OF((zvoid *pG, uch *buf, int *size, int flag)); void UZ_EXP UzpMorePause OF((zvoid *pG, ZCONST char *prompt, int flag)); int UZ_EXP UzpPassword OF((zvoid *pG, int *rcnt, char *pwbuf, int size, ZCONST char *zfn, ZCONST char *efn)); #ifdef __cplusplus } #endif /*--------------------------------------------------------------------------- Remaining private stuff for UnZip compilation. ---------------------------------------------------------------------------*/ #ifdef UNZIP_INTERNAL # include "unzpriv.h" #endif #endif /* !__unzip_h */ Carla-2.4.2/data/windows/unzipfx-carla-control/unzipfx/000077500000000000000000000000001420416754300231165ustar00rootroot00000000000000Carla-2.4.2/data/windows/unzipfx-carla-control/unzipfx/appDetails.c000066400000000000000000000032201420416754300253450ustar00rootroot00000000000000 #include #include #include #ifdef WIN32 # include #endif #include "appDetails.h" #define CMD_BUF_LEN 1024 static int sfx_app_argc = 0; static char** sfx_app_argv = NULL; static char sfx_tmp_path[512] = { 0 }; void sfx_app_set_args(int argc, char** argv) { sfx_app_argc = argc; sfx_app_argv = argv; } int sfx_app_autorun_now() { int i, cmdBufLen = 0; char cmdBuf[CMD_BUF_LEN]; const char* const path = sfx_get_tmp_path(1); chdir(path); strcpy(cmdBuf, path); strcat(cmdBuf, SFX_AUTORUN_CMD); cmdBufLen = strlen(cmdBuf); for (i=0; i < sfx_app_argc; i++) { if (! sfx_app_argv[i]) continue; cmdBufLen += strlen(sfx_app_argv[i]) + 1; if (cmdBufLen >= CMD_BUF_LEN-1) break; strcat(cmdBuf, " "); strcat(cmdBuf, sfx_app_argv[i]); } puts(SFX_APP_BANNER); printf("Launching: '%s'\n", cmdBuf); #ifdef WIN32 ShellExecute(NULL, "open", cmdBuf, NULL, NULL, SW_SHOWNORMAL); return 0; #else const int ret = system(cmdBuf); exit(ret); return ret; #endif } char* sfx_get_tmp_path(int withAppName) { #ifdef WIN32 { GetTempPathA(512 - strlen(SFX_APP_MININAME_TITLE), sfx_tmp_path); if (withAppName == 1) strcat(sfx_tmp_path, SFX_APP_MININAME_TITLE "-2.1"); } #else { char* tmp = getenv("TMP"); if (tmp) strcpy(sfx_tmp_path, tmp); else strcpy(sfx_tmp_path, "/tmp"); if (withAppName == 1) strcat(sfx_tmp_path, "/" SFX_APP_MININAME_LCASE "-2.1"); } #endif return sfx_tmp_path; } Carla-2.4.2/data/windows/unzipfx-carla-control/unzipfx/appDetails.h000066400000000000000000000011671420416754300253620ustar00rootroot00000000000000 #ifndef __APP_DETAILS_H__ #define __APP_DETAILS_H__ #define REAL_BUILD #include "../../../../source/includes/CarlaDefines.h" #define SFX_APP_MININAME_TITLE "CarlaControl" #define SFX_APP_MININAME_LCASE "carla-control" #define SFX_APP_BANNER SFX_APP_MININAME_TITLE " self-contained executable " CARLA_VERSION_STRING ", based on UnZipSFX." #ifdef WIN32 # define SFX_AUTORUN_CMD "\\" SFX_APP_MININAME_TITLE ".exe" #else # define SFX_AUTORUN_CMD "/" SFX_APP_MININAME_LCASE #endif void sfx_app_set_args(int argc, char** argv); int sfx_app_autorun_now(); char* sfx_get_tmp_path(int withAppName); #endif // __APP_DETAILS_H__ Carla-2.4.2/data/windows/unzipfx-carla-control/unzpriv.h000066400000000000000000003251651420416754300233150ustar00rootroot00000000000000/* Copyright (c) 1990-2009 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2009-Jan-02 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- unzpriv.h This header file contains private (internal) macros, typedefs, prototypes and global-variable declarations used by all of the UnZip source files. In a prior life it was part of the main unzip.h header, but now it is only included by that header if UNZIP_INTERNAL is defined. ---------------------------------------------------------------------------*/ #ifndef __unzpriv_h /* prevent multiple inclusions */ #define __unzpriv_h /* First thing: Signal all following code that we compile UnZip utilities! */ #ifndef UNZIP # define UNZIP #endif /* GRR 960204: MORE defined here in preparation for removal altogether */ #ifndef MORE # ifndef RISCOS # define MORE # endif #endif /* fUnZip should never need to be reentrant */ #ifdef FUNZIP # ifdef REENTRANT # undef REENTRANT # endif # ifdef DLL # undef DLL # endif # ifdef SFX /* fUnZip is NOT the sfx stub! */ # undef SFX # endif # ifdef USE_BZIP2 /* fUnZip does not support bzip2 decompression */ # undef USE_BZIP2 # endif #endif #if (defined(USE_ZLIB) && !defined(HAVE_ZL_INFLAT64) && !defined(NO_DEFLATE64)) /* zlib does not (yet?) provide Deflate64(tm) support */ # define NO_DEFLATE64 #endif #ifdef NO_DEFLATE64 /* disable support for Deflate64(tm) */ # ifdef USE_DEFLATE64 # undef USE_DEFLATE64 # endif #else /* enable Deflate64(tm) support unless compiling for SFX stub */ # if (!defined(USE_DEFLATE64) && !defined(SFX)) # define USE_DEFLATE64 # endif #endif /* disable bzip2 support for SFX stub, unless explicitly requested */ #if (defined(SFX) && !defined(BZIP2_SFX) && defined(USE_BZIP2)) # undef USE_BZIP2 #endif #if (defined(NO_VMS_TEXT_CONV) || defined(VMS)) # ifdef VMS_TEXT_CONV # undef VMS_TEXT_CONV # endif #else # if (!defined(VMS_TEXT_CONV) && !defined(SFX)) # define VMS_TEXT_CONV # endif #endif /* Enable -B option per default on specific systems, to allow backing up * files that would be overwritten. * (This list of systems must be kept in sync with the list of systems * that add the B_flag to the UzpOpts structure, see unzip.h.) */ #if (!defined(NO_UNIXBACKUP) && !defined(UNIXBACKUP)) # if defined(UNIX) || defined(OS2) || defined(WIN32) # define UNIXBACKUP # endif #endif #if (defined(DLL) && !defined(REENTRANT)) # define REENTRANT #endif #if (!defined(DYNAMIC_CRC_TABLE) && !defined(FUNZIP)) # define DYNAMIC_CRC_TABLE #endif #if (defined(DYNAMIC_CRC_TABLE) && !defined(REENTRANT)) # ifndef DYNALLOC_CRCTAB # define DYNALLOC_CRCTAB # endif #endif /*--------------------------------------------------------------------------- OS-dependent configuration for UnZip internals ---------------------------------------------------------------------------*/ /* Some compiler distributions for Win32/i386 systems try to emulate * a Unix (POSIX-compatible) environment. */ #if (defined(WIN32) && defined(UNIX)) /* UnZip does not support merging both ports in a single executable. */ # if (defined(FORCE_WIN32_OVER_UNIX) && defined(FORCE_UNIX_OVER_WIN32)) /* conflicting choice requests -> we prefer the Win32 environment */ # undef FORCE_UNIX_OVER_WIN32 # endif # ifdef FORCE_WIN32_OVER_UNIX /* native Win32 support was explicitly requested... */ # undef UNIX # else /* use the POSIX (Unix) emulation features by default... */ # undef WIN32 # endif #endif /* bad or (occasionally?) missing stddef.h: */ #if (defined(M_XENIX) || defined(DNIX)) # define NO_STDDEF_H #endif #if (defined(M_XENIX) && !defined(M_UNIX)) /* SCO Xenix only, not SCO Unix */ # define SCO_XENIX # define NO_LIMITS_H /* no limits.h, but MODERN defined */ # define NO_UID_GID /* no uid_t/gid_t */ # define size_t int #endif #ifdef realix /* Modcomp Real/IX, real-time SysV.3 variant */ # define SYSV # define NO_UID_GID /* no uid_t/gid_t */ #endif #if (defined(_AIX) && !defined(_ALL_SOURCE)) # define _ALL_SOURCE #endif #if defined(apollo) /* defines __STDC__ */ # define NO_STDLIB_H #endif #ifdef DNIX # define SYSV # define SHORT_NAMES /* 14-char limitation on path components */ /* # define FILENAME_MAX 14 */ # define FILENAME_MAX NAME_MAX /* GRR: experiment */ #endif #if (defined(SYSTEM_FIVE) || defined(__SYSTEM_FIVE)) # ifndef SYSV # define SYSV # endif #endif /* SYSTEM_FIVE || __SYSTEM_FIVE */ #if (defined(M_SYSV) || defined(M_SYS5)) # ifndef SYSV # define SYSV # endif #endif /* M_SYSV || M_SYS5 */ /* __SVR4 and __svr4__ catch Solaris on at least some combos of compiler+OS */ #if (defined(__SVR4) || defined(__svr4__) || defined(sgi) || defined(__hpux)) # ifndef SYSV # define SYSV # endif #endif /* __SVR4 || __svr4__ || sgi || __hpux */ #if (defined(LINUX) || defined(__QNX__)) # ifndef SYSV # define SYSV # endif #endif /* LINUX || __QNX__ */ #if (defined(ultrix) || defined(__ultrix) || defined(bsd4_2)) # if (!defined(BSD) && !defined(SYSV)) # define BSD # endif #endif /* ultrix || __ultrix || bsd4_2 */ #if (defined(sun) || defined(pyr) || defined(CONVEX)) # if (!defined(BSD) && !defined(SYSV)) # define BSD # endif #endif /* sun || pyr || CONVEX */ #ifdef pyr /* Pyramid: has BSD and AT&T "universes" */ # ifdef BSD # define pyr_bsd # define USE_STRINGS_H /* instead of more common string.h */ # define ZMEM /* ZMEM now uses bcopy/bzero: not in AT&T universe */ # endif /* (AT&T memcpy claimed to be very slow, though) */ # define DECLARE_ERRNO #endif /* pyr */ /* stat() bug for Borland, VAX C RTL, and Atari ST MiNT on TOS * filesystems: returns 0 for wildcards! (returns 0xffffffff on Minix * filesystem or `U:' drive under Atari MiNT.) Watcom C was previously * included on this list; it would be good to know what version the problem * was fixed at, if it did exist. */ #if (defined(__TURBOC__) && !defined(WIN32)) /*# define WILD_STAT_BUG*/ #endif #if (defined(VMS) || defined(__MINT__)) # define WILD_STAT_BUG #endif /*--------------------------------------------------------------------------- OS-dependent includes ---------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- API (DLL) section: ---------------------------------------------------------------------------*/ #ifdef DLL # define MAIN UZ_EXP UzpMain /* was UzpUnzip */ # ifdef OS2DLL # undef Info # define REDIRECTC(c) varputchar(__G__ c) # define REDIRECTPRINT(buf,size) varmessage(__G__ buf, size) # define FINISH_REDIRECT() finish_REXX_redirect(__G) # else # define REDIRECTC(c) # define REDIRECTPRINT(buf,size) 0 # define FINISH_REDIRECT() close_redirect(__G) # endif #endif /*--------------------------------------------------------------------------- Acorn RISCOS section: ---------------------------------------------------------------------------*/ #ifdef RISCOS # include "acorn/riscos.h" #endif /*--------------------------------------------------------------------------- Amiga section: ---------------------------------------------------------------------------*/ #ifdef AMIGA # include "amiga/amiga.h" #endif /*--------------------------------------------------------------------------- AOS/VS section (somewhat similar to Unix, apparently): ---------------------------------------------------------------------------*/ #ifdef AOS_VS # ifdef __FILEIO_C # include "aosvs/aosvs.h" # endif #endif /*--------------------------------------------------------------------------- Atari ST section: ---------------------------------------------------------------------------*/ #ifdef ATARI # include # include # include # include # define SYMLINKS # define EXE_EXTENSION ".tos" # ifndef DATE_FORMAT # define DATE_FORMAT DF_DMY # endif # define DIR_END '/' # define INT_SPRINTF # define timezone _timezone # define lenEOL 2 # define PutNativeEOL {*q++ = native(CR); *q++ = native(LF);} # undef SHORT_NAMES # if (!defined(NOTIMESTAMP) && !defined(TIMESTAMP)) # define TIMESTAMP # endif #endif /*--------------------------------------------------------------------------- AtheOS section: ---------------------------------------------------------------------------*/ #ifdef __ATHEOS__ # include "atheos/athcfg.h" #endif /*--------------------------------------------------------------------------- BeOS section: ---------------------------------------------------------------------------*/ #ifdef __BEOS__ # include "beos/beocfg.h" #endif /*--------------------------------------------------------------------------- Human68k/X680x0 section: ---------------------------------------------------------------------------*/ #ifdef __human68k__ /* DO NOT DEFINE DOS_OS2 HERE! If Human68k is so much */ /* like MS-DOS and/or OS/2, create DOS_H68_OS2 macro. */ # if (!defined(_MBCS) && !defined(NO_MBCS)) /* enable MBCS support by default for this system */ # define _MBCS # endif # if (defined(_MBCS) && defined(NO_MBCS)) /* disable MBCS support when explicitely requested */ # undef _MBCS # endif # include # include # include # include # include # ifdef HAVE_MBSTRING_H # include # endif # ifdef HAVE_MBCTYPE_H # include # else # ifndef _ismbblead # define _ismbblead(c) (0x80 <= (c) && ((c) < 0xa0 || 0xe0 <= (c))) # endif # endif # ifndef DATE_FORMAT # define DATE_FORMAT DF_YMD /* Japanese standard */ # endif # define lenEOL 1 # define PutNativeEOL *q++ = native(LF); # define INT_SPRINTF # define SYMLINKS # ifdef SFX # define MAIN main_sfx # endif #endif /*--------------------------------------------------------------------------- Mac section: ---------------------------------------------------------------------------*/ #ifdef MACOS # include "maccfg.h" #endif /* MACOS */ /*--------------------------------------------------------------------------- MS-DOS, OS/2, FLEXOS section: ---------------------------------------------------------------------------*/ #ifdef WINDLL # ifdef MORE # undef MORE # endif # ifdef OS2_EAS # undef OS2_EAS # endif #endif #if (defined(_MSC_VER) || (defined(M_I86) && !defined(__WATCOMC__))) # ifndef MSC # define MSC /* This should work for older MSC, too! */ # endif #endif #if (defined(MSDOS) || defined(OS2) || defined(FLEXOS)) # include /* off_t, time_t, dev_t, ... */ # include # include /* lseek(), open(), setftime(), dup(), creat() */ # include /* localtime() */ # include /* O_BINARY for open() w/o CR/LF translation */ # ifdef OS2 /* defined for all OS/2 compilers */ # include "os2/os2cfg.h" # else # ifdef FLEXOS # include "flexos/flxcfg.h" # else # include "msdos/doscfg.h" # endif # endif # if (defined(_MSC_VER) && (_MSC_VER == 700) && !defined(GRR)) /* * ARGH. MSC 7.0 libraries think times are based on 1899 Dec 31 00:00, not * 1970 Jan 1 00:00. So we have to diddle time_t's appropriately: add or * subtract 70 years' worth of seconds; i.e., number of days times 86400; * i.e., (70*365 regular days + 17 leap days + 1 1899 day) * 86400 == * (25550 + 17 + 1) * 86400 == 2209075200 seconds. We know time_t is an * unsigned long (ulg) on the only system with this bug. */ # define TIMET_TO_NATIVE(x) (x) += (ulg)2209075200L; # define NATIVE_TO_TIMET(x) (x) -= (ulg)2209075200L; # endif # if (defined(__BORLANDC__) && (__BORLANDC__ >= 0x0450)) # define timezone _timezone # endif # if (defined(__GO32__) || defined(FLEXOS)) # define DIR_END '/' # else # define DIR_END '\\' /* OS uses '\\' as directory separator */ # define DIR_END2 '/' /* also check for '/' (RTL may convert) */ # endif # ifdef DATE_FORMAT # undef DATE_FORMAT # endif # define DATE_FORMAT dateformat() # define lenEOL 2 # define PutNativeEOL {*q++ = native(CR); *q++ = native(LF);} # if (!defined(NO_EF_UT_TIME) && !defined(USE_EF_UT_TIME)) # define USE_EF_UT_TIME # endif #endif /* MSDOS || OS2 || FLEXOS */ /*--------------------------------------------------------------------------- MTS section (piggybacks UNIX, I think): ---------------------------------------------------------------------------*/ #ifdef MTS # include /* off_t, time_t, dev_t, ... */ # include # include /* MTS uses this instead of fcntl.h */ # include # include # include /* some important non-ANSI routines */ # define mkdir(s,n) (-1) /* no "make directory" capability */ # define EBCDIC /* set EBCDIC conversion on */ # define NO_STRNICMP /* unzip's is as good the one in MTS */ # define USE_FWRITE # define close_outfile() fclose(G.outfile) /* can't set time on files */ # define umask(n) /* don't have umask() on MTS */ # define FOPWT "w" /* open file for writing in TEXT mode */ # ifndef DATE_FORMAT # define DATE_FORMAT DF_MDY # endif # define lenEOL 1 # define PutNativeEOL *q++ = native(LF); #endif /* MTS */ /*--------------------------------------------------------------------------- Novell Netware NLM section ---------------------------------------------------------------------------*/ #ifdef NLM # include "netware/nlmcfg.h" #endif /*--------------------------------------------------------------------------- QDOS section ---------------------------------------------------------------------------*/ #ifdef QDOS # define DIRENT # include # include # include # include # include "qdos/izqdos.h" # ifndef DATE_FORMAT # define DATE_FORMAT DF_MDY # endif # define lenEOL 1 # define PutNativeEOL *q++ = native(LF); # define DIR_END '_' # define RETURN QReturn # undef PATH_MAX # define PATH_MAX 36 # if (!defined(NOTIMESTAMP) && !defined(TIMESTAMP)) # define TIMESTAMP # endif # define SCREENSIZE(ttrows, ttcols) screensize(ttrows, ttcols) # define SCREENWIDTH 80 #endif /*--------------------------------------------------------------------------- Tandem NSK section: ---------------------------------------------------------------------------*/ #ifdef TANDEM # include "tandem.h" # include # ifndef __INT32 /* We are compiling with non-WIDE memory model, int = 16 bits */ # ifndef INT_16BIT # define INT_16BIT /* report "int" size is 16-bit to inflate setup */ # endif # ifdef USE_DEFLATE64 /* Following required for 64k WSIZE of Deflate64 support */ # define MED_MEM /* else OUTBUFSIZ is 64K and fails in do_string */ # define INBUFSIZ 8192 /* but larger buffer for real OSes */ # endif # endif /* use a single LF delimiter so that writes to 101 text files work */ # define PutNativeEOL *q++ = native(LF); # define lenEOL 1 # ifndef DATE_FORMAT # define DATE_FORMAT DF_DMY # endif # define SCREENLINES 25 /* USE_EF_UT_TIME is set in tandem.h */ # define RESTORE_UIDGID # define NO_STRNICMP #endif /*--------------------------------------------------------------------------- THEOS section: ---------------------------------------------------------------------------*/ #ifdef THEOS # include "theos/thscfg.h" #endif /*--------------------------------------------------------------------------- TOPS-20 section: ---------------------------------------------------------------------------*/ #ifdef TOPS20 # include /* off_t, time_t, dev_t, ... */ # include # include # include # include # include # include # include /* get amazing monsym() macro */ extern int open(), close(), read(); extern int stat(), unlink(), jsys(), fcntl(); extern long lseek(), dup(), creat(); # define strchr index /* GRR: necessary? */ # define strrchr rindex # define REALLY_SHORT_SYMS # define NO_MKDIR # ifndef HAVE_STRNICMP # define NO_STRNICMP /* probably not provided by TOPS20 C RTL */ # endif # define DIR_BEG '<' # define DIR_END '>' # define DIR_EXT ".directory" # ifndef DATE_FORMAT # define DATE_FORMAT DF_MDY # endif # define EXE_EXTENSION ".exe" /* just a guess... */ #endif /* TOPS20 */ /*--------------------------------------------------------------------------- Unix section: ---------------------------------------------------------------------------*/ #ifdef UNIX # include "unix/unxcfg.h" #endif /* UNIX */ /*--------------------------------------------------------------------------- VM/CMS and MVS section: ---------------------------------------------------------------------------*/ #ifdef CMS_MVS # include "vmmvs.h" # define CLOSE_INFILE() close_infile(__G) #endif /*--------------------------------------------------------------------------- VMS section: ---------------------------------------------------------------------------*/ #ifdef VMS # include "vms/vmscfg.h" #endif /* VMS */ /*--------------------------------------------------------------------------- Win32 (Windows 95/NT) section: ---------------------------------------------------------------------------*/ #if (defined(WIN32) && !defined(POCKET_UNZIP) && !defined(_WIN32_WCE)) # include "win32/w32cfg.h" #endif /*--------------------------------------------------------------------------- Win32 Windows CE section (also POCKET_UNZIP) ---------------------------------------------------------------------------*/ #if (defined(_WIN32_WCE) || defined(POCKET_UNZIP)) # include "wince/wcecfg.h" #endif /* ---------------------------------------------------------------------------- MUST BE AFTER LARGE FILE INCLUDES ---------------------------------------------------------------------------- */ /* This stuff calls in types and messes up large file includes. It needs to go after large file defines in local includes. I am guessing that moving them here probably broke some ports, but hey. 10/31/2004 EG */ /* ---------------------------------------------------------------------------- Common includes ---------------------------------------------------------------------------- */ /* Some ports apply specific adjustments which must be in effect before reading the "standard" include headers. */ #ifdef EFT # define Z_OFF_T off_t /* Amdahl UTS nonsense ("extended file types") */ #else #if (defined(UNIX) && defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)) # define Z_OFF_T off_t /* 64bit offsets to support 2GB < zipfile size < 4GB */ #else # define Z_OFF_T long long #endif #endif #ifndef ZOFF_T_DEFINED typedef Z_OFF_T zoff_t; # define ZOFF_T_DEFINED #endif #ifndef Z_STAT_DEFINED typedef struct stat z_stat; # define Z_STAT_DEFINED #endif #ifndef MINIX /* Minix needs it after all the other includes (?) */ # include #endif #include /* skip for VMS, to use tolower() function? */ #include /* used in mapname() */ #ifdef USE_STRINGS_H # include /* strcpy, strcmp, memcpy, index/rindex, etc. */ #else # include /* strcpy, strcmp, memcpy, strchr/strrchr, etc. */ #endif #if (defined(MODERN) && !defined(NO_LIMITS_H)) # include /* MAX/MIN constant symbols for system types... */ #endif /* this include must be down here for SysV.4, for some reason... */ #include /* used in unzip.c, fileio.c */ #ifdef MODERN # ifndef NO_STDDEF_H # include # endif # ifndef NO_STDLIB_H # include /* standard library prototypes, malloc(), etc. */ # endif typedef size_t extent; #else /* !MODERN */ # ifndef AOS_VS /* mostly modern? */ Z_OFF_T lseek(); # ifdef VAXC /* not fully modern, but has stdlib.h and void */ # include # else char *malloc(); # endif /* ?VAXC */ # endif /* !AOS_VS */ typedef unsigned int extent; #endif /* ?MODERN */ /*************/ /* Defines */ /*************/ #define UNZIP_BZ2VERS 46 #ifdef ZIP64_SUPPORT # ifdef USE_BZIP2 # define UNZIP_VERSION UNZIP_BZ2VERS # else # define UNZIP_VERSION 45 # endif #else #ifdef USE_DEFLATE64 # define UNZIP_VERSION 21 /* compatible with PKUNZIP 4.0 */ #else # define UNZIP_VERSION 20 /* compatible with PKUNZIP 2.0 */ #endif #endif #define VMS_UNZIP_VERSION 42 /* if OS-needed-to-extract is VMS: can do */ #if (defined(MSDOS) || defined(OS2)) # define DOS_OS2 #endif #if (defined(OS2) || defined(WIN32)) # define OS2_W32 #endif #if (defined(DOS_OS2) || defined(WIN32)) # define DOS_OS2_W32 # define DOS_W32_OS2 /* historical: don't use */ #endif #if (defined(DOS_OS2_W32) || defined(__human68k__)) # define DOS_H68_OS2_W32 #endif #if (defined(DOS_OS2) || defined(FLEXOS)) # define DOS_FLX_OS2 #endif #if (defined(DOS_OS2_W32) || defined(FLEXOS)) # define DOS_FLX_OS2_W32 #endif #if (defined(DOS_H68_OS2_W32) || defined(FLEXOS)) # define DOS_FLX_H68_OS2_W32 #endif #if (defined(DOS_FLX_OS2) || defined(NLM)) # define DOS_FLX_NLM_OS2 #endif #if (defined(DOS_FLX_OS2_W32) || defined(NLM)) # define DOS_FLX_NLM_OS2_W32 #endif #if (defined(DOS_FLX_H68_OS2_W32) || defined(NLM)) # define DOS_FLX_H68_NLM_OS2_W32 #endif #if (defined(TOPS20) || defined(VMS)) # define T20_VMS #endif #if (defined(MSDOS) || defined(T20_VMS)) # define DOS_T20_VMS #endif #if (defined(__ATHEOS__) || defined(__BEOS__)) # define ATH_BEO #endif #if (defined(ATH_BEO) || defined(UNIX)) # define ATH_BEO_UNX #endif #if (defined(ATH_BEO_UNX) || defined(THEOS)) # define ATH_BEO_THS_UNX #endif /* clean up with a few defaults */ #ifndef DIR_END # define DIR_END '/' /* last char before program name or filename */ #endif #ifndef DATE_FORMAT # ifdef DATEFMT_ISO_DEFAULT # define DATE_FORMAT DF_YMD /* defaults to invariant ISO-style */ # else # define DATE_FORMAT DF_MDY /* defaults to US convention */ # endif #endif #ifndef DATE_SEPCHAR # define DATE_SEPCHAR '-' #endif #ifndef CLOSE_INFILE # define CLOSE_INFILE() close(G.zipfd) #endif #ifndef RETURN # define RETURN return /* only used in main() */ #endif #ifndef EXIT # define EXIT exit #endif #ifndef USAGE # define USAGE(ret) usage(__G__ (ret)) /* used in unzip.c, zipinfo.c */ #endif #ifndef TIMET_TO_NATIVE /* everybody but MSC 7.0 and Macintosh */ # define TIMET_TO_NATIVE(x) # define NATIVE_TO_TIMET(x) #endif #ifndef STRNICMP # ifdef NO_STRNICMP # define STRNICMP zstrnicmp # else # define STRNICMP strnicmp # endif #endif #if (defined(DOS_FLX_NLM_OS2_W32) || defined(ATH_BEO_UNX) || defined(RISCOS)) # ifndef HAVE_UNLINK # define HAVE_UNLINK # endif #endif #if (defined(AOS_VS) || defined(ATARI)) /* GRR: others? */ # ifndef HAVE_UNLINK # define HAVE_UNLINK # endif #endif /* OS-specific exceptions to the "ANSI <--> INT_SPRINTF" rule */ #if (!defined(PCHAR_SPRINTF) && !defined(INT_SPRINTF)) # if (defined(SYSV) || defined(CONVEX) || defined(NeXT) || defined(BSD4_4)) # define INT_SPRINTF /* sprintf() returns int: SysVish/Posix */ # endif # if (defined(DOS_FLX_NLM_OS2_W32) || defined(VMS) || defined(AMIGA)) # define INT_SPRINTF /* sprintf() returns int: ANSI */ # endif # if (defined(ultrix) || defined(__ultrix)) /* Ultrix 4.3 and newer */ # if (defined(POSIX) || defined(__POSIX)) # define INT_SPRINTF /* sprintf() returns int: ANSI/Posix */ # endif # ifdef __GNUC__ # define PCHAR_SPRINTF /* undetermined actual return value */ # endif # endif # if (defined(__osf__) || defined(_AIX) || defined(CMS_MVS) || defined(THEOS)) # define INT_SPRINTF /* sprintf() returns int: ANSI/Posix */ # endif # if defined(sun) # define PCHAR_SPRINTF /* sprintf() returns char *: SunOS cc *and* gcc */ # endif #endif /* defaults that we hope will take care of most machines in the future */ #if (!defined(PCHAR_SPRINTF) && !defined(INT_SPRINTF)) # ifdef __STDC__ # define INT_SPRINTF /* sprintf() returns int: ANSI */ # endif # ifndef INT_SPRINTF # define PCHAR_SPRINTF /* sprintf() returns char *: BSDish */ # endif #endif #define MSG_STDERR(f) (f & 1) /* bit 0: 0 = stdout, 1 = stderr */ #define MSG_INFO(f) ((f & 6) == 0) /* bits 1 and 2: 0 = info */ #define MSG_WARN(f) ((f & 6) == 2) /* bits 1 and 2: 1 = warning */ #define MSG_ERROR(f) ((f & 6) == 4) /* bits 1 and 2: 2 = error */ #define MSG_FATAL(f) ((f & 6) == 6) /* bits 1 and 2: (3 = fatal error) */ #define MSG_ZFN(f) (f & 0x0008) /* bit 3: 1 = print zipfile name */ #define MSG_FN(f) (f & 0x0010) /* bit 4: 1 = print filename */ #define MSG_LNEWLN(f) (f & 0x0020) /* bit 5: 1 = leading newline if !SOL */ #define MSG_TNEWLN(f) (f & 0x0040) /* bit 6: 1 = trailing newline if !SOL */ #define MSG_MNEWLN(f) (f & 0x0080) /* bit 7: 1 = trailing NL for prompts */ /* the following are subject to change */ #define MSG_NO_WGUI(f) (f & 0x0100) /* bit 8: 1 = skip if Windows GUI */ #define MSG_NO_AGUI(f) (f & 0x0200) /* bit 9: 1 = skip if Acorn GUI */ #define MSG_NO_DLL2(f) (f & 0x0400) /* bit 10: 1 = skip if OS/2 DLL */ #define MSG_NO_NDLL(f) (f & 0x0800) /* bit 11: 1 = skip if WIN32 DLL */ #define MSG_NO_WDLL(f) (f & 0x1000) /* bit 12: 1 = skip if Windows DLL */ #if (defined(MORE) && !defined(SCREENLINES)) # ifdef DOS_FLX_NLM_OS2_W32 # define SCREENLINES 25 /* can be (should be) a function instead */ # else # define SCREENLINES 24 /* VT-100s are assumed to be minimal hardware */ # endif #endif #if (defined(MORE) && !defined(SCREENSIZE)) # ifndef SCREENWIDTH # define SCREENSIZE(scrrows, scrcols) { \ if ((scrrows) != NULL) *(scrrows) = SCREENLINES; } # else # define SCREENSIZE(scrrows, scrcols) { \ if ((scrrows) != NULL) *(scrrows) = SCREENLINES; \ if ((scrcols) != NULL) *(scrcols) = SCREENWIDTH; } # endif #endif #if (defined(__16BIT__) || defined(MED_MEM) || defined(SMALL_MEM)) # define DIR_BLKSIZ 64 /* number of directory entries per block * (should fit in 4096 bytes, usually) */ #else # define DIR_BLKSIZ 16384 /* use more memory, to reduce long-range seeks */ #endif #ifndef WSIZE # ifdef USE_DEFLATE64 # define WSIZE 65536L /* window size--must be a power of two, and */ # else /* at least 64K for PKZip's deflate64 method */ # define WSIZE 0x8000 /* window size--must be a power of two, and */ # endif /* at least 32K for zip's deflate method */ #endif #ifdef __16BIT__ # ifndef INT_16BIT # define INT_16BIT /* on 16-bit systems int size is 16 bits */ # endif #else # define nearmalloc malloc # define nearfree free # if (!defined(__IBMC__) || !defined(OS2)) # ifndef near # define near # endif # ifndef far # define far # endif # endif #endif #if (defined(DYNALLOC_CRCTAB) && !defined(DYNAMIC_CRC_TABLE)) # undef DYNALLOC_CRCTAB #endif #if (defined(DYNALLOC_CRCTAB) && defined(REENTRANT)) # undef DYNALLOC_CRCTAB /* not safe with reentrant code */ #endif #if (defined(USE_ZLIB) && !defined(USE_OWN_CRCTAB)) # ifdef DYNALLOC_CRCTAB # undef DYNALLOC_CRCTAB # endif #endif #if (defined(USE_ZLIB) && defined(ASM_CRC)) # undef ASM_CRC #endif #ifdef USE_ZLIB # ifdef IZ_CRC_BE_OPTIMIZ # undef IZ_CRC_BE_OPTIMIZ # endif # ifdef IZ_CRC_LE_OPTIMIZ # undef IZ_CRC_LE_OPTIMIZ # endif #endif #if (!defined(IZ_CRC_BE_OPTIMIZ) && !defined(IZ_CRC_LE_OPTIMIZ)) # ifdef IZ_CRCOPTIM_UNFOLDTBL # undef IZ_CRCOPTIM_UNFOLDTBL # endif #endif #ifndef INBUFSIZ # if (defined(MED_MEM) || defined(SMALL_MEM)) # define INBUFSIZ 2048 /* works for MS-DOS small model */ # else # define INBUFSIZ 8192 /* larger buffers for real OSes */ # endif #endif #if (defined(INT_16BIT) && (defined(USE_DEFLATE64) || lenEOL > 1)) /* For environments using 16-bit integers OUTBUFSIZ must be limited to * less than 64k (do_string() uses "unsigned" in calculations involving * OUTBUFSIZ). This is achieved by defining MED_MEM when WSIZE = 64k (aka * Deflate64 support enabled) or EOL markers contain multiple characters. * (The rule gets applied AFTER the default rule for INBUFSIZ because it * is not neccessary to reduce INBUFSIZE in this case.) */ # if (!defined(SMALL_MEM) && !defined(MED_MEM)) # define MED_MEM # endif #endif /* Logic for case of small memory, length of EOL > 1: if OUTBUFSIZ == 2048, * OUTBUFSIZ>>1 == 1024 and OUTBUFSIZ>>7 == 16; therefore rawbuf is 1008 bytes * and transbuf 1040 bytes. Have room for 32 extra EOL chars; 1008/32 == 31.5 * chars/line, smaller than estimated 35-70 characters per line for C source * and normal text. Hence difference is sufficient for most "average" files. * (Argument scales for larger OUTBUFSIZ.) */ #ifdef SMALL_MEM /* i.e., 16-bit OSes: MS-DOS, OS/2 1.x, etc. */ # define LoadFarString(x) fLoadFarString(__G__ (x)) # define LoadFarStringSmall(x) fLoadFarStringSmall(__G__ (x)) # define LoadFarStringSmall2(x) fLoadFarStringSmall2(__G__ (x)) # if (defined(_MSC_VER) && (_MSC_VER >= 600)) # define zfstrcpy(dest, src) _fstrcpy((dest), (src)) # define zfstrcmp(s1, s2) _fstrcmp((s1), (s2)) # endif # if !(defined(SFX) || defined(FUNZIP)) # if (defined(_MSC_VER)) # define zfmalloc(sz) _fmalloc((sz)) # define zffree(x) _ffree(x) # endif # if (defined(__TURBOC__)) # include # define zfmalloc(sz) farmalloc((unsigned long)(sz)) # define zffree(x) farfree(x) # endif # endif /* !(SFX || FUNZIP) */ # ifndef Far # define Far far /* __far only works for MSC 6.00, not 6.0a or Borland */ # endif # define OUTBUFSIZ INBUFSIZ # if (lenEOL == 1) # define RAWBUFSIZ (OUTBUFSIZ>>1) # else # define RAWBUFSIZ ((OUTBUFSIZ>>1) - (OUTBUFSIZ>>7)) # endif # define TRANSBUFSIZ (OUTBUFSIZ-RAWBUFSIZ) typedef short shrint; /* short/int or "shrink int" (unshrink) */ #else # define zfstrcpy(dest, src) strcpy((dest), (src)) # define zfstrcmp(s1, s2) strcmp((s1), (s2)) # define zfmalloc malloc # define zffree(x) free(x) # ifdef QDOS # define LoadFarString(x) Qstrfix(x) /* fix up _ for '.' */ # define LoadFarStringSmall(x) Qstrfix(x) # define LoadFarStringSmall2(x) Qstrfix(x) # else # define LoadFarString(x) (char *)(x) # define LoadFarStringSmall(x) (char *)(x) # define LoadFarStringSmall2(x) (char *)(x) # endif # ifdef MED_MEM # define OUTBUFSIZ 0xFF80 /* can't malloc arrays of 0xFFE8 or more */ # define TRANSBUFSIZ 0xFF80 typedef short shrint; # else # define OUTBUFSIZ (lenEOL*WSIZE) /* more efficient text conversion */ # define TRANSBUFSIZ (lenEOL*OUTBUFSIZ) # ifdef AMIGA typedef short shrint; # else typedef int shrint; /* for efficiency/speed, we hope... */ # endif # endif /* ?MED_MEM */ # define RAWBUFSIZ OUTBUFSIZ #endif /* ?SMALL_MEM */ #ifndef Far # define Far #endif #ifndef Cdecl # define Cdecl #endif #ifndef MAIN # define MAIN main #endif #ifdef SFX /* disable some unused features for SFX executables */ # ifndef NO_ZIPINFO # define NO_ZIPINFO # endif # ifdef TIMESTAMP # undef TIMESTAMP # endif #endif #ifdef SFX # ifdef CHEAP_SFX_AUTORUN # ifndef NO_SFX_EXDIR # define NO_SFX_EXDIR # endif # endif # ifndef NO_SFX_EXDIR # ifndef SFX_EXDIR # define SFX_EXDIR # endif # else # ifdef SFX_EXDIR # undef SFX_EXDIR # endif # endif #endif /* user may have defined both by accident... NOTIMESTAMP takes precedence */ #if (defined(TIMESTAMP) && defined(NOTIMESTAMP)) # undef TIMESTAMP #endif #if (!defined(COPYRIGHT_CLEAN) && !defined(USE_SMITH_CODE)) # define COPYRIGHT_CLEAN #endif /* The LZW patent is expired worldwide since 2004-Jul-07, so USE_UNSHRINK * is now enabled by default. See unshrink.c. */ #if (!defined(LZW_CLEAN) && !defined(USE_UNSHRINK)) # define USE_UNSHRINK #endif #ifndef O_BINARY # define O_BINARY 0 #endif #ifndef PIPE_ERROR # ifndef EPIPE # define EPIPE -1 # endif # define PIPE_ERROR (errno == EPIPE) #endif /* File operations--use "b" for binary if allowed or fixed length 512 on VMS */ #ifdef VMS # define FOPR "r","ctx=stm" # define FOPM "r+","ctx=stm","rfm=fix","mrs=512" # define FOPW "w","ctx=stm","rfm=fix","mrs=512" # define FOPWR "w+","ctx=stm","rfm=fix","mrs=512" #endif /* VMS */ #ifdef CMS_MVS /* Binary files must be RECFM=F,LRECL=1 for ftell() to get correct pos */ /* ...unless byteseek is used. Let's try that for a while. */ # define FOPR "rb,byteseek" # define FOPM "r+b,byteseek" # ifdef MVS # define FOPW "wb,recfm=u,lrecl=32760,byteseek" /* New binary files */ # define FOPWE "wb" /* Existing binary files */ # define FOPWT "w,lrecl=133" /* New text files */ # define FOPWTE "w" /* Existing text files */ # else # define FOPW "wb,recfm=v,lrecl=32760" # define FOPWT "w" # endif #endif /* CMS_MVS */ #ifdef TOPS20 /* TOPS-20 MODERN? You kidding? */ # define FOPW "w8" #endif /* TOPS20 */ /* Defaults when nothing special has been defined previously. */ #ifdef MODERN # ifndef FOPR # define FOPR "rb" # endif # ifndef FOPM # define FOPM "r+b" # endif # ifndef FOPW # define FOPW "wb" # endif # ifndef FOPWT # define FOPWT "wt" # endif # ifndef FOPWR # define FOPWR "w+b" # endif #else /* !MODERN */ # ifndef FOPR # define FOPR "r" # endif # ifndef FOPM # define FOPM "r+" # endif # ifndef FOPW # define FOPW "w" # endif # ifndef FOPWT # define FOPWT "w" # endif # ifndef FOPWR # define FOPWR "w+" # endif #endif /* ?MODERN */ /* * If exists on most systems, should include that, since it may * define some or all of the following: NAME_MAX, PATH_MAX, _POSIX_NAME_MAX, * _POSIX_PATH_MAX. */ #ifdef DOS_FLX_NLM_OS2_W32 # include #endif /* 2008-07-22 SMS. * Unfortunately, on VMS, exists, and is included by * (so it's pretty much unavoidable), and it defines PATH_MAX to a fixed * short value (256, correct only for older systems without ODS-5 support), * rather than one based on the real RMS NAM[L] situation. So, we * artificially undefine it here, to allow our better-defined _MAX_PATH * (see vms/vmscfg.h) to be used. */ #ifdef VMS # undef PATH_MAX #endif #ifndef PATH_MAX # ifdef MAXPATHLEN # define PATH_MAX MAXPATHLEN /* in on some systems */ # else # ifdef _MAX_PATH # define PATH_MAX _MAX_PATH # else # if FILENAME_MAX > 255 # define PATH_MAX FILENAME_MAX /* used like PATH_MAX on some systems */ # else # define PATH_MAX 1024 # endif # endif /* ?_MAX_PATH */ # endif /* ?MAXPATHLEN */ #endif /* !PATH_MAX */ /* * buffer size required to hold the longest legal local filepath * (including the trailing '\0') */ #define FILNAMSIZ PATH_MAX #ifdef UNICODE_SUPPORT # if !(defined(UTF8_MAYBE_NATIVE) || defined(UNICODE_WCHAR)) # undef UNICODE_SUPPORT # endif #endif /* 2007-09-18 SMS. * Include here if it will be needed later for Unicode. * Otherwise, SETLOCALE may be defined here, and then defined again * (differently) when is read later. */ #ifdef UNICODE_SUPPORT # ifdef UNICODE_WCHAR # if !(defined(_WIN32_WCE) || defined(POCKET_UNZIP)) # include # endif # endif # ifndef _MBCS /* no need to include twice, see below */ # include # ifndef SETLOCALE # define SETLOCALE(category, locale) setlocale(category, locale) # endif # endif #endif /* UNICODE_SUPPORT */ /* DBCS support for Info-ZIP (mainly for japanese (-: ) * by Yoshioka Tsuneo (QWF00133@nifty.ne.jp,tsuneo-y@is.aist-nara.ac.jp) */ #ifdef _MBCS # include /* Multi Byte Character Set */ # define ___MBS_TMP_DEF char *___tmp_ptr; # define ___TMP_PTR ___tmp_ptr # ifndef CLEN # define NEED_UZMBCLEN # define CLEN(ptr) (int)uzmbclen((ZCONST unsigned char *)(ptr)) # endif # ifndef PREINCSTR # define PREINCSTR(ptr) (ptr += CLEN(ptr)) # endif # define POSTINCSTR(ptr) (___TMP_PTR=(char *)(ptr), PREINCSTR(ptr),___TMP_PTR) char *plastchar OF((ZCONST char *ptr, extent len)); # define lastchar(ptr, len) ((int)(unsigned)*plastchar(ptr, len)) # ifndef MBSCHR # define NEED_UZMBSCHR # define MBSCHR(str,c) (char *)uzmbschr((ZCONST unsigned char *)(str), c) # endif # ifndef MBSRCHR # define NEED_UZMBSRCHR # define MBSRCHR(str,c) (char *)uzmbsrchr((ZCONST unsigned char *)(str), c) # endif # ifndef SETLOCALE # define SETLOCALE(category, locale) setlocale(category, locale) # endif #else /* !_MBCS */ # define ___MBS_TMP_DEF # define ___TMP_PTR # define CLEN(ptr) 1 # define PREINCSTR(ptr) (++(ptr)) # define POSTINCSTR(ptr) ((ptr)++) # define plastchar(ptr, len) (&ptr[(len)-1]) # define lastchar(ptr, len) (ptr[(len)-1]) # define MBSCHR(str, c) strchr(str, c) # define MBSRCHR(str, c) strrchr(str, c) # ifndef SETLOCALE # define SETLOCALE(category, locale) # endif #endif /* ?_MBCS */ #define INCSTR(ptr) PREINCSTR(ptr) #if (defined(MALLOC_WORK) && !defined(MY_ZCALLOC)) /* Any system without a special calloc function */ # ifndef zcalloc # define zcalloc(items, size) \ (zvoid far *)calloc((unsigned)(items), (unsigned)(size)) # endif # ifndef zcfree # define zcfree free # endif #endif /* MALLOC_WORK && !MY_ZCALLOC */ #if (defined(CRAY) && defined(ZMEM)) # undef ZMEM #endif #ifdef ZMEM # undef ZMEM # define memcmp(b1,b2,len) bcmp(b2,b1,len) # define memcpy(dest,src,len) bcopy(src,dest,len) # define memzero bzero #else # define memzero(dest,len) memset(dest,0,len) #endif #ifndef TRUE # define TRUE 1 /* sort of obvious */ #endif #ifndef FALSE # define FALSE 0 #endif #ifndef SEEK_SET # define SEEK_SET 0 # define SEEK_CUR 1 # define SEEK_END 2 #endif #if (!defined(S_IEXEC) && defined(S_IXUSR)) # define S_IEXEC S_IXUSR #endif #if (defined(UNIX) && defined(S_IFLNK) && !defined(MTS)) # define SYMLINKS # ifndef S_ISLNK # define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) # endif #endif /* UNIX && S_IFLNK && !MTS */ #ifndef S_ISDIR # ifdef CMS_MVS # define S_ISDIR(m) (FALSE) # else # define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) # endif #endif #ifndef IS_VOLID # define IS_VOLID(m) ((m) & 0x08) #endif /***********************************/ /* LARGE_FILE_SUPPORT */ /***********************************/ /* This whole section lifted from Zip 3b tailor.h * Types are in OS dependent headers (eg, w32cfg.h) * * LARGE_FILE_SUPPORT and ZIP64_SUPPORT are automatically * set in OS dependent headers (for some ports) based on the port and compiler. * * Function prototypes are below as OF is defined earlier in this file * but after OS dependent header is included. * * E. Gordon 9/21/2003 * Updated 1/28/2004 * Lifted and placed here 6/7/2004 - Myles Bennett */ #ifdef LARGE_FILE_SUPPORT /* 64-bit Large File Support */ /* ---------------------------- */ # if defined(UNIX) || defined(VMS) /* 64-bit stat functions */ # define zstat stat # define zfstat fstat /* 64-bit fseeko */ # define zlseek lseek # define zfseeko fseeko /* 64-bit ftello */ # define zftello ftello /* 64-bit fopen */ # define zfopen fopen # define zfdopen fdopen # endif /* UNIX || VMS */ /* ---------------------------- */ # ifdef WIN32 # if defined(_MSC_VER) || defined(__MINGW32__) || defined(__LCC__) /* MS C (VC), MinGW GCC port and LCC-32 use the MS C Runtime lib */ /* 64-bit stat functions */ # define zstat _stati64 # define zfstat _fstati64 /* 64-bit lseek */ # define zlseek _lseeki64 # if defined(_MSC_VER) && (_MSC_VER >= 1400) /* Beginning with VS 8.0 (Visual Studio 2005, MSC 14), the Microsoft C rtl publishes its (previously internal) implmentations of "fseeko" and "ftello" for 64-bit file offsets. */ /* 64-bit fseeko */ # define zfseeko _fseeki64 /* 64-bit ftello */ # define zftello _ftelli64 # else /* not (defined(_MSC_VER) && (_MSC_VER >= 1400)) */ # if defined(__MSVCRT_VERSION__) && (__MSVCRT_VERSION__ >= 0x800) /* Up-to-date versions of MinGW define the macro __MSVCRT_VERSION__ to denote the version of the MS C rtl dll used for linking. When configured to link against the runtime of MS Visual Studio 8 (or newer), the built-in 64-bit fseek/ftell functions are available. */ /* 64-bit fseeko */ # define zfseeko _fseeki64 /* 64-bit ftello */ # define zftello _ftelli64 # else /* !(defined(__MSVCRT_VERSION__) && (__MSVCRT_VERSION__>=0x800)) */ /* The version of the C runtime is lower than MSC 14 or unknown. */ /* The newest MinGW port contains built-in extensions to the MSC rtl that provide fseeko and ftello, but our implementations will do for now. */ /* 64-bit fseeko */ int zfseeko OF((FILE *, zoff_t, int)); /* 64-bit ftello */ zoff_t zftello OF((FILE *)); # endif /* ? (__MSVCRT_VERSION__ >= 0x800) */ # endif /* ? (_MSC_VER >= 1400) */ /* 64-bit fopen */ # define zfopen fopen # define zfdopen fdopen # endif /* _MSC_VER || __MINGW__ || __LCC__ */ # ifdef __CYGWIN__ /* CYGWIN GCC Posix emulator on Windows (configuration not yet finished/tested) */ /* 64-bit stat functions */ # define zstat _stati64 # define zfstat _fstati64 /* 64-bit lseek */ # define zlseek _lseeki64 /* 64-bit fseeko */ # define zfseeko fseeko /* 64-bit ftello */ # define zftello ftello /* 64-bit fopen */ # define zfopen fopen # define zfdopen fdopen # endif # if defined(__WATCOMC__) || defined(__BORLANDC__) /* WATCOM C and Borland C provide their own C runtime libraries, but they are sufficiently compatible with MS CRTL. */ /* 64-bit stat functions */ # define zstat _stati64 # define zfstat _fstati64 # ifdef __WATCOMC__ /* 64-bit lseek */ # define zlseek _lseeki64 # endif /* 64-bit fseeko */ int zfseeko OF((FILE *, zoff_t, int)); /* 64-bit ftello */ zoff_t zftello OF((FILE *)); /* 64-bit fopen */ # define zfopen fopen # define zfdopen fdopen # endif # ifdef __IBMC__ /* IBM C */ /* 64-bit stat functions */ /* 64-bit fseeko */ /* 64-bit ftello */ /* 64-bit fopen */ # endif # endif /* WIN32 */ #else /* No Large File Support */ # ifndef REGULUS /* returns the inode number on success(!)...argh argh argh */ # define zstat stat # endif # define zfstat fstat # define zlseek lseek # define zfseeko fseek # define zftello ftell # define zfopen fopen # define zfdopen fdopen # if defined(UNIX) || defined(VMS) || defined(WIN32) /* For these systems, implement "64bit file vs. 32bit prog" check */ # ifndef DO_SAFECHECK_2GB # define DO_SAFECHECK_2GB # endif # endif #endif /* No "64bit file vs. 32bit prog" check for SFX stub, to save space */ #if (defined(DO_SAFECHECK_2GB) && defined(SFX)) # undef DO_SAFECHECK_2GB #endif #ifndef SSTAT # ifdef WILD_STAT_BUG # define SSTAT(path,pbuf) (iswild(path) || zstat(path,pbuf)) # else # define SSTAT zstat # endif #endif /* Default fzofft() format selection. */ #ifndef FZOFFT_FMT # ifdef LARGE_FILE_SUPPORT # define FZOFFT_FMT "ll" # define FZOFFT_HEX_WID_VALUE "16" # else /* def LARGE_FILE_SUPPORT */ # define FZOFFT_FMT "l" # define FZOFFT_HEX_WID_VALUE "8" # endif /* def LARGE_FILE_SUPPORT */ #endif /* ndef FZOFFT_FMT */ #define FZOFFT_HEX_WID ((char *) -1) #define FZOFFT_HEX_DOT_WID ((char *) -2) #define FZOFFT_NUM 4 /* Number of chambers. */ #define FZOFFT_LEN 24 /* Number of characters/chamber. */ #ifdef SHORT_SYMS /* Mark Williams C, ...? */ # define extract_or_test_files xtr_or_tst_files # define extract_or_test_member xtr_or_tst_member #endif #ifdef REALLY_SHORT_SYMS /* TOPS-20 linker: first 6 chars */ # define process_cdir_file_hdr XXpcdfh # define process_local_file_hdr XXplfh # define extract_or_test_files XXxotf /* necessary? */ # define extract_or_test_member XXxotm /* necessary? */ # define check_for_newer XXcfn # define overwrite_all XXoa # define process_all_files XXpaf # define extra_field XXef # define explode_lit8 XXel8 # define explode_lit4 XXel4 # define explode_nolit8 XXnl8 # define explode_nolit4 XXnl4 # define cpdist8 XXcpdist8 # define inflate_codes XXic # define inflate_stored XXis # define inflate_fixed XXif # define inflate_dynamic XXid # define inflate_block XXib # define maxcodemax XXmax #endif #ifndef S_TIME_T_MAX /* max value of signed (>= 32-bit) time_t */ # define S_TIME_T_MAX ((time_t)(ulg)0x7fffffffL) #endif #ifndef U_TIME_T_MAX /* max value of unsigned (>= 32-bit) time_t */ # define U_TIME_T_MAX ((time_t)(ulg)0xffffffffL) #endif #ifdef DOSTIME_MINIMUM /* min DOSTIME value (1980-01-01) */ # undef DOSTIME_MINIMUM #endif #define DOSTIME_MINIMUM ((ulg)0x00210000L) #ifdef DOSTIME_2038_01_18 /* approximate DOSTIME equivalent of */ # undef DOSTIME_2038_01_18 /* the signed-32-bit time_t limit */ #endif #define DOSTIME_2038_01_18 ((ulg)0x74320000L) #ifdef QDOS # define ZSUFX "_zip" # define ALT_ZSUFX ".zip" #else # ifdef RISCOS # define ZSUFX "/zip" # else # define ZSUFX ".zip" # endif # define ALT_ZSUFX ".ZIP" /* Unix-only so far (only case-sensitive fs) */ #endif #define CENTRAL_HDR_SIG "\001\002" /* the infamous "PK" signature bytes, */ #define LOCAL_HDR_SIG "\003\004" /* w/o "PK" (so unzip executable not */ #define END_CENTRAL_SIG "\005\006" /* mistaken for zipfile itself) */ #define EXTD_LOCAL_SIG "\007\010" /* [ASCII "\113" == EBCDIC "\080" ??] */ /** internal-only return codes **/ #define IZ_DIR 76 /* potential zipfile is a directory */ /* special return codes for mapname() */ #define MPN_OK 0 /* mapname successful */ #define MPN_INF_TRUNC (1<<8) /* caution - filename truncated */ #define MPN_INF_SKIP (2<<8) /* info - skipped because nothing to do */ #define MPN_ERR_SKIP (3<<8) /* error - entry skipped */ #define MPN_ERR_TOOLONG (4<<8) /* error - path too long */ #define MPN_NOMEM (10<<8) /* error - out of memory, file skipped */ #define MPN_CREATED_DIR (16<<8) /* directory created: set time & permission */ #define MPN_VOL_LABEL (17<<8) /* volume label, but can't set on hard disk */ #define MPN_INVALID (99<<8) /* internal logic error, should never reach */ /* mask for internal mapname&checkdir return codes */ #define MPN_MASK 0x7F00 /* error code for extracting/testing extra field blocks */ #define IZ_EF_TRUNC 79 /* local extra field truncated (PKZIP'd) */ /* choice of activities for do_string() */ #define SKIP 0 /* skip header block */ #define DISPLAY 1 /* display archive comment (ASCII) */ #define DISPL_8 5 /* display file comment (ext. ASCII) */ #define DS_FN 2 /* read filename (ext. ASCII, chead) */ #define DS_FN_C 2 /* read filename from central header */ #define DS_FN_L 6 /* read filename from local header */ #define EXTRA_FIELD 3 /* copy extra field into buffer */ #define DS_EF 3 #ifdef AMIGA # define FILENOTE 4 /* convert file comment to filenote */ #endif #if (defined(SFX) && defined(CHEAP_SFX_AUTORUN)) # define CHECK_AUTORUN 7 /* copy command, display remainder */ # define CHECK_AUTORUN_Q 8 /* copy command, skip remainder */ #endif #define DOES_NOT_EXIST -1 /* return values for check_for_newer() */ #define EXISTS_AND_OLDER 0 #define EXISTS_AND_NEWER 1 #define OVERWRT_QUERY 0 /* status values for G.overwrite_mode */ #define OVERWRT_ALWAYS 1 #define OVERWRT_NEVER 2 #define IS_OVERWRT_ALL (G.overwrite_mode == OVERWRT_ALWAYS) #define IS_OVERWRT_NONE (G.overwrite_mode == OVERWRT_NEVER) #ifdef VMS /* return codes for VMS-specific open_outfile() function */ # define OPENOUT_OK 0 /* file openend normally */ # define OPENOUT_FAILED 1 /* file open failed */ # define OPENOUT_SKIPOK 2 /* file not opened, skip at error level OK */ # define OPENOUT_SKIPWARN 3 /* file not opened, skip at error level WARN */ #endif /* VMS */ #define ROOT 0 /* checkdir() extract-to path: called once */ #define INIT 1 /* allocate buildpath: called once per member */ #define APPEND_DIR 2 /* append a dir comp.: many times per member */ #define APPEND_NAME 3 /* append actual filename: once per member */ #define GETPATH 4 /* retrieve the complete path and free it */ #define END 5 /* free root path prior to exiting program */ /* version_made_by codes (central dir): make sure these */ /* are not defined on their respective systems!! */ #define FS_FAT_ 0 /* filesystem used by MS-DOS, OS/2, Win32 */ #define AMIGA_ 1 #define VMS_ 2 #define UNIX_ 3 #define VM_CMS_ 4 #define ATARI_ 5 /* what if it's a minix filesystem? [cjh] */ #define FS_HPFS_ 6 /* filesystem used by OS/2 (and NT 3.x) */ #define MAC_ 7 /* HFS filesystem used by MacOS */ #define Z_SYSTEM_ 8 #define CPM_ 9 #define TOPS20_ 10 #define FS_NTFS_ 11 /* filesystem used by Windows NT */ #define QDOS_ 12 #define ACORN_ 13 /* Archimedes Acorn RISC OS */ #define FS_VFAT_ 14 /* filesystem used by Windows 95, NT */ #define MVS_ 15 #define BEOS_ 16 /* hybrid POSIX/database filesystem */ #define TANDEM_ 17 /* Tandem NSK */ #define THEOS_ 18 /* THEOS */ #define MAC_OSX_ 19 /* Mac OS/X (Darwin) */ #define ATHEOS_ 30 /* AtheOS */ #define NUM_HOSTS 31 /* index of last system + 1 */ /* don't forget to update zipinfo.c appropiately if NUM_HOSTS changes! */ #define STORED 0 /* compression methods */ #define SHRUNK 1 #define REDUCED1 2 #define REDUCED2 3 #define REDUCED3 4 #define REDUCED4 5 #define IMPLODED 6 #define TOKENIZED 7 #define DEFLATED 8 #define ENHDEFLATED 9 #define DCLIMPLODED 10 #define BZIPPED 12 #define LZMAED 14 #define IBMTERSED 18 #define IBMLZ77ED 19 #define WAVPACKED 97 #define PPMDED 98 #define NUM_METHODS 17 /* number of known method IDs */ /* don't forget to update list.c (list_files()), extract.c and zipinfo.c * appropriately if NUM_METHODS changes */ /* (the PK-class error codes are public and have been moved into unzip.h) */ #define DF_MDY 0 /* date format 10/26/91 (USA only) */ #define DF_DMY 1 /* date format 26/10/91 (most of the world) */ #define DF_YMD 2 /* date format 91/10/26 (a few countries) */ /*--------------------------------------------------------------------------- Extra-field block ID values and offset info. ---------------------------------------------------------------------------*/ /* extra-field ID values, all little-endian: */ #define EF_PKSZ64 0x0001 /* PKWARE's 64-bit filesize extensions */ #define EF_AV 0x0007 /* PKWARE's authenticity verification */ #define EF_EFS 0x0008 /* PKWARE's extended language encoding */ #define EF_OS2 0x0009 /* OS/2 extended attributes */ #define EF_PKW32 0x000a /* PKWARE's Win95/98/WinNT filetimes */ #define EF_PKVMS 0x000c /* PKWARE's VMS */ #define EF_PKUNIX 0x000d /* PKWARE's Unix */ #define EF_PKFORK 0x000e /* PKWARE's future stream/fork descriptors */ #define EF_PKPATCH 0x000f /* PKWARE's patch descriptor */ #define EF_PKPKCS7 0x0014 /* PKWARE's PKCS#7 store for X.509 Certs */ #define EF_PKFX509 0x0015 /* PKWARE's file X.509 Cert&Signature ID */ #define EF_PKCX509 0x0016 /* PKWARE's central dir X.509 Cert ID */ #define EF_PKENCRHD 0x0017 /* PKWARE's Strong Encryption header */ #define EF_PKRMCTL 0x0018 /* PKWARE's Record Management Controls*/ #define EF_PKLSTCS7 0x0019 /* PKWARE's PKCS#7 Encr. Recipient Cert List */ #define EF_PKIBM 0x0065 /* PKWARE's IBM S/390 & AS/400 attributes */ #define EF_PKIBM2 0x0066 /* PKWARE's IBM S/390 & AS/400 compr. attribs */ #define EF_IZVMS 0x4d49 /* Info-ZIP's VMS ("IM") */ #define EF_IZUNIX 0x5855 /* Info-ZIP's first Unix[1] ("UX") */ #define EF_IZUNIX2 0x7855 /* Info-ZIP's second Unix[2] ("Ux") */ #define EF_IZUNIX3 0x7875 /* Info-ZIP's newest Unix[3] ("ux") */ #define EF_TIME 0x5455 /* universal timestamp ("UT") */ #define EF_UNIPATH 0x7075 /* Info-ZIP Unicode Path ("up") */ #define EF_UNICOMNT 0x6375 /* Info-ZIP Unicode Comment ("uc") */ #define EF_MAC3 0x334d /* Info-ZIP's new Macintosh (= "M3") */ #define EF_JLMAC 0x07c8 /* Johnny Lee's old Macintosh (= 1992) */ #define EF_ZIPIT 0x2605 /* Thomas Brown's Macintosh (ZipIt) */ #define EF_ZIPIT2 0x2705 /* T. Brown's Mac (ZipIt) v 1.3.8 and newer ? */ #define EF_SMARTZIP 0x4d63 /* Mac SmartZip by Marco Bambini */ #define EF_VMCMS 0x4704 /* Info-ZIP's VM/CMS ("\004G") */ #define EF_MVS 0x470f /* Info-ZIP's MVS ("\017G") */ #define EF_ACL 0x4c41 /* (OS/2) access control list ("AL") */ #define EF_NTSD 0x4453 /* NT security descriptor ("SD") */ #define EF_ATHEOS 0x7441 /* AtheOS ("At") */ #define EF_BEOS 0x6542 /* BeOS ("Be") */ #define EF_QDOS 0xfb4a /* SMS/QDOS ("J\373") */ #define EF_AOSVS 0x5356 /* AOS/VS ("VS") */ #define EF_SPARK 0x4341 /* David Pilling's Acorn/SparkFS ("AC") */ #define EF_TANDEM 0x4154 /* Tandem NSK ("TA") */ #define EF_THEOS 0x6854 /* Jean-Michel Dubois' Theos "Th" */ #define EF_THEOSO 0x4854 /* old Theos port */ #define EF_MD5 0x4b46 /* Fred Kantor's MD5 ("FK") */ #define EF_ASIUNIX 0x756e /* ASi's Unix ("nu") */ #define EB_HEADSIZE 4 /* length of extra field block header */ #define EB_ID 0 /* offset of block ID in header */ #define EB_LEN 2 /* offset of data length field in header */ #define EB_UCSIZE_P 0 /* offset of ucsize field in compr. data */ #define EB_CMPRHEADLEN 6 /* lenght of compression header */ #define EB_UX_MINLEN 8 /* minimal "UX" field contains atime, mtime */ #define EB_UX_FULLSIZE 12 /* full "UX" field (atime, mtime, uid, gid) */ #define EB_UX_ATIME 0 /* offset of atime in "UX" extra field data */ #define EB_UX_MTIME 4 /* offset of mtime in "UX" extra field data */ #define EB_UX_UID 8 /* byte offset of UID in "UX" field data */ #define EB_UX_GID 10 /* byte offset of GID in "UX" field data */ #define EB_UX2_MINLEN 4 /* minimal "Ux" field contains UID/GID */ #define EB_UX2_UID 0 /* byte offset of UID in "Ux" field data */ #define EB_UX2_GID 2 /* byte offset of GID in "Ux" field data */ #define EB_UX2_VALID (1 << 8) /* UID/GID present */ #define EB_UX3_MINLEN 7 /* minimal "ux" field size (2-byte UID/GID) */ #define EB_UT_MINLEN 1 /* minimal UT field contains Flags byte */ #define EB_UT_FLAGS 0 /* byte offset of Flags field */ #define EB_UT_TIME1 1 /* byte offset of 1st time value */ #define EB_UT_FL_MTIME (1 << 0) /* mtime present */ #define EB_UT_FL_ATIME (1 << 1) /* atime present */ #define EB_UT_FL_CTIME (1 << 2) /* ctime present */ #define EB_FLGS_OFFS 4 /* offset of flags area in generic compressed extra field blocks (BEOS, MAC, and others) */ #define EB_OS2_HLEN 4 /* size of OS2/ACL compressed data header */ #define EB_BEOS_HLEN 5 /* length of BeOS&AtheOS e.f attribute header */ #define EB_BE_FL_UNCMPR 0x01 /* "BeOS&AtheOS attribs uncompr." bit flag */ #define EB_MAC3_HLEN 14 /* length of Mac3 attribute block header */ #define EB_SMARTZIP_HLEN 64 /* fixed length of the SmartZip extra field */ #define EB_M3_FL_DATFRK 0x01 /* "this entry is data fork" flag */ #define EB_M3_FL_UNCMPR 0x04 /* "Mac3 attributes uncompressed" bit flag */ #define EB_M3_FL_TIME64 0x08 /* "Mac3 time fields are 64 bit wide" flag */ #define EB_M3_FL_NOUTC 0x10 /* "Mac3 timezone offset fields missing" flag */ #define EB_NTSD_C_LEN 4 /* length of central NT security data */ #define EB_NTSD_L_LEN 5 /* length of minimal local NT security data */ #define EB_NTSD_VERSION 4 /* offset of NTSD version byte */ #define EB_NTSD_MAX_VER (0) /* maximum version # we know how to handle */ #define EB_ASI_CRC32 0 /* offset of ASI Unix field's crc32 checksum */ #define EB_ASI_MODE 4 /* offset of ASI Unix permission mode field */ #define EB_IZVMS_HLEN 12 /* length of IZVMS attribute block header */ #define EB_IZVMS_FLGS 4 /* offset of compression type flag */ #define EB_IZVMS_UCSIZ 6 /* offset of ucsize field in IZVMS header */ #define EB_IZVMS_BCMASK 07 /* 3 bits for compression type */ #define EB_IZVMS_BCSTOR 0 /* Stored */ #define EB_IZVMS_BC00 1 /* 0byte -> 0bit compression */ #define EB_IZVMS_BCDEFL 2 /* Deflated */ /*--------------------------------------------------------------------------- True sizes of the various headers (excluding their 4-byte signatures), as defined by PKWARE--so it is not likely that these will ever change. But if they do, make sure both these defines AND the typedefs below get updated accordingly. 12/27/2006 The Zip64 End Of Central Directory record is variable size and now comes in two flavors, version 1 and the new version 2 that supports central directory encryption. We only use the old fields at the top of the Zip64 EOCDR, and this block is a fixed size still, but need to be aware of the stuff following. ---------------------------------------------------------------------------*/ #define LREC_SIZE 26 /* lengths of local file headers, central */ #define CREC_SIZE 42 /* directory headers, end-of-central-dir */ #define ECREC_SIZE 18 /* record, zip64 end-of-cent-dir locator */ #define ECLOC64_SIZE 16 /* and zip64 end-of-central-dir record, */ #define ECREC64_SIZE 52 /* respectively */ #define MAX_BITS 13 /* used in unshrink() */ #define HSIZE (1 << MAX_BITS) /* size of global work area */ #define LF 10 /* '\n' on ASCII machines; must be 10 due to EBCDIC */ #define CR 13 /* '\r' on ASCII machines; must be 13 due to EBCDIC */ #define CTRLZ 26 /* DOS & OS/2 EOF marker (used in fileio.c, vms.c) */ #ifdef EBCDIC # define foreign(c) ascii[(uch)(c)] # define native(c) ebcdic[(uch)(c)] # define NATIVE "EBCDIC" # define NOANSIFILT #endif #ifdef VMS # define ENV_UNZIP "UNZIP_OPTS" /* names of environment variables */ # define ENV_ZIPINFO "ZIPINFO_OPTS" #endif /* VMS */ #ifdef RISCOS # define ENV_UNZIP "Unzip$Options" # define ENV_ZIPINFO "Zipinfo$Options" # define ENV_UNZIPEXTS "Unzip$Exts" #endif /* RISCOS */ #ifndef ENV_UNZIP # define ENV_UNZIP "UNZIP" /* the standard names */ # define ENV_ZIPINFO "ZIPINFO" #endif #define ENV_UNZIP2 "UNZIPOPT" /* alternate names, for zip compat. */ #define ENV_ZIPINFO2 "ZIPINFOOPT" #if (!defined(QQ) && !defined(NOQQ)) # define QQ #endif #ifdef QQ /* Newtware version: no file */ # define QCOND (!uO.qflag) /* comments with -vq or -vqq */ #else /* Bill Davidsen version: no way to */ # define QCOND (longhdr) /* kill file comments when listing */ #endif #ifdef OLD_QQ # define QCOND2 (uO.qflag < 2) #else # define QCOND2 (!uO.qflag) #endif #ifdef WILD_STOP_AT_DIR # define __WDLPRO , int sepc # define __WDL , sepc # define __WDLDEF int sepc; # define WISEP , (uO.W_flag ? '/' : '\0') #else # define __WDLPRO # define __WDL # define __WDLDEF # define WISEP #endif /**************/ /* Typedefs */ /**************/ #ifdef ZIP64_SUPPORT # ifndef Z_UINT8_DEFINED # if (defined(__GNUC__) || defined(__hpux) || defined(__SUNPRO_C)) typedef unsigned long long z_uint8; # else typedef unsigned __int64 z_uint8; # endif # define Z_UINT8_DEFINED # endif #endif #ifndef Z_UINT4_DEFINED # if (defined(MODERN) && !defined(NO_LIMITS_H)) # if (defined(UINT_MAX) && (UINT_MAX == 0xffffffffUL)) typedef unsigned int z_uint4; # define Z_UINT4_DEFINED # else # if (defined(ULONG_MAX) && (ULONG_MAX == 0xffffffffUL)) typedef unsigned long z_uint4; # define Z_UINT4_DEFINED # else # if (defined(USHRT_MAX) && (USHRT_MAX == 0xffffffffUL)) typedef unsigned short z_uint4; # define Z_UINT4_DEFINED # endif # endif # endif # endif /* MODERN && !NO_LIMITS_H */ #endif /* !Z_UINT4_DEFINED */ #ifndef Z_UINT4_DEFINED typedef ulg z_uint4; # define Z_UINT4_DEFINED #endif /* The following three user-defined unsigned integer types are used for holding zipfile entities (required widths without / with Zip64 support): a) sizes and offset of zipfile entries (4 bytes / 8 bytes) b) enumeration and counts of zipfile entries (2 bytes / 8 bytes) Remark: internally, we use 4 bytes for archive member counting in the No-Zip64 case, because UnZip supports more than 64k entries for classic Zip archives without Zip64 extensions. c) enumeration and counts of zipfile volumes of multivolume archives (2 bytes / 4 bytes) */ #ifdef ZIP64_SUPPORT typedef z_uint8 zusz_t; /* zipentry sizes & offsets */ typedef z_uint8 zucn_t; /* archive entry counts */ typedef z_uint4 zuvl_t; /* multivolume numbers */ # define MASK_ZUCN64 (~(zucn_t)0) /* In case we ever get to support an environment where z_uint8 may be WIDER than 64 bit wide, we will have to apply a construct similar to #define MASK_ZUCN64 (~(zucn_t)0 & (zucn_t)0xffffffffffffffffULL) for the 64-bit mask. */ #else typedef ulg zusz_t; /* zipentry sizes & offsets */ typedef unsigned int zucn_t; /* archive entry counts */ typedef unsigned short zuvl_t; /* multivolume numbers */ # define MASK_ZUCN64 (~(zucn_t)0) #endif #define MASK_ZUCN16 ((zucn_t)0xFFFF) #ifdef NO_UID_GID # ifdef UID_USHORT typedef unsigned short uid_t; /* TI SysV.3 */ typedef unsigned short gid_t; # else typedef unsigned int uid_t; /* SCO Xenix */ typedef unsigned int gid_t; # endif #endif #if (defined(GOT_UTIMBUF) || defined(sgi) || defined(ATARI)) typedef struct utimbuf ztimbuf; #else typedef struct ztimbuf { time_t actime; /* new access time */ time_t modtime; /* new modification time */ } ztimbuf; #endif typedef struct iztimes { time_t atime; /* new access time */ time_t mtime; /* new modification time */ time_t ctime; /* used for creation time; NOT same as st_ctime */ } iztimes; #ifdef SET_DIR_ATTRIB typedef struct direntry { /* head of system-specific struct holding */ struct direntry *next; /* defered directory attributes info */ char *fn; /* filename of directory */ char buf[1]; /* start of system-specific internal data */ } direntry; #endif /* SET_DIR_ATTRIB */ #ifdef SYMLINKS typedef struct slinkentry { /* info for deferred symlink creation */ struct slinkentry *next; /* pointer to next entry in chain */ extent targetlen; /* length of target filespec */ extent attriblen; /* length of system-specific attrib data */ char *target; /* pointer to target filespec */ char *fname; /* pointer to name of link */ char buf[1]; /* data/name/link buffer */ } slinkentry; #endif /* SYMLINKS */ typedef struct min_info { zoff_t offset; zusz_t compr_size; /* compressed size (needed if extended header) */ zusz_t uncompr_size; /* uncompressed size (needed if extended header) */ ulg crc; /* crc (needed if extended header) */ zuvl_t diskstart; /* no of volume where this entry starts */ uch hostver; uch hostnum; unsigned file_attr; /* local flavor, as used by creat(), chmod()... */ unsigned encrypted : 1; /* file encrypted: decrypt before uncompressing */ unsigned ExtLocHdr : 1; /* use time instead of CRC for decrypt check */ unsigned textfile : 1; /* file is text (according to zip) */ unsigned textmode : 1; /* file is to be extracted as text */ unsigned lcflag : 1; /* convert filename to lowercase */ unsigned vollabel : 1; /* "file" is an MS-DOS volume (disk) label */ #ifdef SYMLINKS unsigned symlink : 1; /* file is a symbolic link */ #endif unsigned HasUxAtt : 1; /* crec ext_file_attr has Unix style mode bits */ #ifdef UNICODE_SUPPORT unsigned GPFIsUTF8: 1; /* crec gen_purpose_flag UTF-8 bit 11 is set */ #endif #ifndef SFX char Far *cfilname; /* central header version of filename */ #endif } min_info; typedef struct VMStimbuf { char *revdate; /* (both roughly correspond to Unix modtime/st_mtime) */ char *credate; } VMStimbuf; /*--------------------------------------------------------------------------- Zipfile work area declarations. ---------------------------------------------------------------------------*/ #ifdef MALLOC_WORK union work { struct { /* unshrink(): */ shrint *Parent; /* pointer to (8192 * sizeof(shrint)) */ uch *value; /* pointer to 8KB char buffer */ uch *Stack; /* pointer to another 8KB char buffer */ } shrink; uch *Slide; /* explode(), inflate(), unreduce() */ }; #else /* !MALLOC_WORK */ union work { struct { /* unshrink(): */ shrint Parent[HSIZE]; /* (8192 * sizeof(shrint)) == 16KB minimum */ uch value[HSIZE]; /* 8KB */ uch Stack[HSIZE]; /* 8KB */ } shrink; /* total = 32KB minimum; 80KB on Cray/Alpha */ uch Slide[WSIZE]; /* explode(), inflate(), unreduce() */ }; #endif /* ?MALLOC_WORK */ #define slide G.area.Slide #if (defined(DLL) && !defined(NO_SLIDE_REDIR)) # define redirSlide G.redirect_sldptr #else # define redirSlide G.area.Slide #endif /*--------------------------------------------------------------------------- Zipfile layout declarations. If these headers ever change, make sure the xxREC_SIZE defines (above) change with them! ---------------------------------------------------------------------------*/ typedef uch local_byte_hdr[ LREC_SIZE ]; # define L_VERSION_NEEDED_TO_EXTRACT_0 0 # define L_VERSION_NEEDED_TO_EXTRACT_1 1 # define L_GENERAL_PURPOSE_BIT_FLAG 2 # define L_COMPRESSION_METHOD 4 # define L_LAST_MOD_DOS_DATETIME 6 # define L_CRC32 10 # define L_COMPRESSED_SIZE 14 # define L_UNCOMPRESSED_SIZE 18 # define L_FILENAME_LENGTH 22 # define L_EXTRA_FIELD_LENGTH 24 typedef uch cdir_byte_hdr[ CREC_SIZE ]; # define C_VERSION_MADE_BY_0 0 # define C_VERSION_MADE_BY_1 1 # define C_VERSION_NEEDED_TO_EXTRACT_0 2 # define C_VERSION_NEEDED_TO_EXTRACT_1 3 # define C_GENERAL_PURPOSE_BIT_FLAG 4 # define C_COMPRESSION_METHOD 6 # define C_LAST_MOD_DOS_DATETIME 8 # define C_CRC32 12 # define C_COMPRESSED_SIZE 16 # define C_UNCOMPRESSED_SIZE 20 # define C_FILENAME_LENGTH 24 # define C_EXTRA_FIELD_LENGTH 26 # define C_FILE_COMMENT_LENGTH 28 # define C_DISK_NUMBER_START 30 # define C_INTERNAL_FILE_ATTRIBUTES 32 # define C_EXTERNAL_FILE_ATTRIBUTES 34 # define C_RELATIVE_OFFSET_LOCAL_HEADER 38 typedef uch ec_byte_rec[ ECREC_SIZE+4 ]; /* define SIGNATURE 0 space-holder only */ # define NUMBER_THIS_DISK 4 # define NUM_DISK_WITH_START_CEN_DIR 6 # define NUM_ENTRIES_CEN_DIR_THS_DISK 8 # define TOTAL_ENTRIES_CENTRAL_DIR 10 # define SIZE_CENTRAL_DIRECTORY 12 # define OFFSET_START_CENTRAL_DIRECTORY 16 # define ZIPFILE_COMMENT_LENGTH 20 typedef uch ec_byte_loc64[ ECLOC64_SIZE+4 ]; # define NUM_DISK_START_EOCDR64 4 # define OFFSET_START_EOCDR64 8 # define NUM_THIS_DISK_LOC64 16 typedef uch ec_byte_rec64[ ECREC64_SIZE+4 ]; # define ECREC64_LENGTH 4 # define EC_VERSION_MADE_BY_0 12 # define EC_VERSION_NEEDED_0 14 # define NUMBER_THIS_DSK_REC64 16 # define NUM_DISK_START_CEN_DIR64 20 # define NUM_ENTRIES_CEN_DIR_THS_DISK64 24 # define TOTAL_ENTRIES_CENTRAL_DIR64 32 # define SIZE_CENTRAL_DIRECTORY64 40 # define OFFSET_START_CENTRAL_DIRECT64 48 /* The following structs are used to hold all header data of a zip entry. Traditionally, the structs' layouts followed the data layout of the corresponding zipfile header structures. However, the zipfile header layouts were designed in the old ages of 16-bit CPUs, they are subject to structure padding and/or alignment issues on newer systems with a "natural word width" of more than 2 bytes. Please note that the structure members are now reordered by size (top-down), to prevent internal padding and optimize memory usage! */ typedef struct local_file_header { /* LOCAL */ zusz_t csize; zusz_t ucsize; ulg last_mod_dos_datetime; ulg crc32; uch version_needed_to_extract[2]; ush general_purpose_bit_flag; ush compression_method; ush filename_length; ush extra_field_length; } local_file_hdr; typedef struct central_directory_file_header { /* CENTRAL */ zusz_t csize; zusz_t ucsize; zusz_t relative_offset_local_header; ulg last_mod_dos_datetime; ulg crc32; ulg external_file_attributes; zuvl_t disk_number_start; ush internal_file_attributes; uch version_made_by[2]; uch version_needed_to_extract[2]; ush general_purpose_bit_flag; ush compression_method; ush filename_length; ush extra_field_length; ush file_comment_length; } cdir_file_hdr; typedef struct end_central_dir_record { /* END CENTRAL */ zusz_t size_central_directory; zusz_t offset_start_central_directory; zucn_t num_entries_centrl_dir_ths_disk; zucn_t total_entries_central_dir; zuvl_t number_this_disk; zuvl_t num_disk_start_cdir; int have_ecr64; /* valid Zip64 ecdir-record exists */ int is_zip64_archive; /* Zip64 ecdir-record is mandatory */ ush zipfile_comment_length; } ecdir_rec; /* Huffman code lookup table entry--this entry is four bytes for machines that have 16-bit pointers (e.g. PC's in the small or medium model). Valid extra bits are 0..16. e == 31 is EOB (end of block), e == 32 means that v is a literal, 32 < e < 64 means that v is a pointer to the next table, which codes (e & 31) bits, and lastly e == 99 indicates an unused code. If a code with e == 99 is looked up, this implies an error in the data. */ struct huft { uch e; /* number of extra bits or operation */ uch b; /* number of bits in this code or subcode */ union { ush n; /* literal, length base, or distance base */ struct huft *t; /* pointer to next level of table */ } v; }; typedef struct _APIDocStruct { char *compare; char *function; char *syntax; char *purpose; } APIDocStruct; /*************/ /* Globals */ /*************/ #if (defined(OS2) && !defined(FUNZIP)) # include "os2/os2data.h" #endif #include "globals.h" /*************************/ /* Function Prototypes */ /*************************/ /*--------------------------------------------------------------------------- Functions in unzip.c (initialization routines): ---------------------------------------------------------------------------*/ #ifndef WINDLL int MAIN OF((int argc, char **argv)); int unzip OF((__GPRO__ int argc, char **argv)); int uz_opts OF((__GPRO__ int *pargc, char ***pargv)); int usage OF((__GPRO__ int error)); #endif /* !WINDLL */ /*--------------------------------------------------------------------------- Functions in process.c (main driver routines): ---------------------------------------------------------------------------*/ int process_zipfiles OF((__GPRO)); void free_G_buffers OF((__GPRO)); /* static int do_seekable OF((__GPRO__ int lastchance)); */ /* static int find_ecrec OF((__GPRO__ long searchlen)); */ /* static int process_central_comment OF((__GPRO)); */ int process_cdir_file_hdr OF((__GPRO)); int process_local_file_hdr OF((__GPRO)); int getZip64Data OF((__GPRO__ ZCONST uch *ef_buf, unsigned ef_len)); #ifdef UNICODE_SUPPORT int getUnicodeData OF((__GPRO__ ZCONST uch *ef_buf, unsigned ef_len)); #endif unsigned ef_scan_for_izux OF((ZCONST uch *ef_buf, unsigned ef_len, int ef_is_c, ulg dos_mdatetime, iztimes *z_utim, ulg *z_uidgid)); #if (defined(RISCOS) || defined(ACORN_FTYPE_NFS)) zvoid *getRISCOSexfield OF((ZCONST uch *ef_buf, unsigned ef_len)); #endif #ifndef SFX /*--------------------------------------------------------------------------- Functions in zipinfo.c (`zipinfo-style' listing routines): ---------------------------------------------------------------------------*/ #ifndef NO_ZIPINFO #ifndef WINDLL int zi_opts OF((__GPRO__ int *pargc, char ***pargv)); #endif void zi_end_central OF((__GPRO)); int zipinfo OF((__GPRO)); /* static int zi_long OF((__GPRO__ zusz_t *pEndprev)); */ /* static int zi_short OF((__GPRO)); */ /* static char *zi_time OF((__GPRO__ ZCONST ulg *datetimez, ZCONST time_t *modtimez, char *d_t_str));*/ #endif /* !NO_ZIPINFO */ /*--------------------------------------------------------------------------- Functions in list.c (generic zipfile-listing routines): ---------------------------------------------------------------------------*/ int list_files OF((__GPRO)); #ifdef TIMESTAMP int get_time_stamp OF((__GPRO__ time_t *last_modtime, ulg *nmember)); #endif int ratio OF((zusz_t uc, zusz_t c)); void fnprint OF((__GPRO)); #endif /* !SFX */ /*--------------------------------------------------------------------------- Functions in fileio.c: ---------------------------------------------------------------------------*/ int open_input_file OF((__GPRO)); int open_outfile OF((__GPRO)); /* also vms.c */ void undefer_input OF((__GPRO)); void defer_leftover_input OF((__GPRO)); unsigned readbuf OF((__GPRO__ char *buf, register unsigned len)); int readbyte OF((__GPRO)); int fillinbuf OF((__GPRO)); int seek_zipf OF((__GPRO__ zoff_t abs_offset)); #ifdef FUNZIP int flush OF((__GPRO__ ulg size)); /* actually funzip.c */ #else int flush OF((__GPRO__ uch *buf, ulg size, int unshrink)); #endif /* static int disk_error OF((__GPRO)); */ void handler OF((int signal)); time_t dos_to_unix_time OF((ulg dos_datetime)); int check_for_newer OF((__GPRO__ char *filename)); /* os2,vmcms,vms */ int do_string OF((__GPRO__ unsigned int length, int option)); ush makeword OF((ZCONST uch *b)); ulg makelong OF((ZCONST uch *sig)); zusz_t makeint64 OF((ZCONST uch *sig)); char *fzofft OF((__GPRO__ zoff_t val, ZCONST char *pre, ZCONST char *post)); #if (!defined(STR_TO_ISO) || defined(NEED_STR2ISO)) char *str2iso OF((char *dst, ZCONST char *src)); #endif #if (!defined(STR_TO_OEM) || defined(NEED_STR2OEM)) char *str2oem OF((char *dst, ZCONST char *src)); #endif #ifdef NO_STRNICMP int zstrnicmp OF((register ZCONST char *s1, register ZCONST char *s2, register unsigned n)); #endif #ifdef REGULUS int zstat OF((ZCONST char *p, struct stat *s)); #endif #ifdef ZMEM /* MUST be ifdef'd because of conflicts with the standard def. */ zvoid *memset OF((register zvoid *, register int, register unsigned int)); int memcmp OF((register ZCONST zvoid*, register ZCONST zvoid *, register unsigned int)); zvoid *memcpy OF((register zvoid *, register ZCONST zvoid *, register unsigned int)); #endif #ifdef NEED_UZMBCLEN extent uzmbclen OF((ZCONST unsigned char *ptr)); #endif #ifdef NEED_UZMBSCHR unsigned char *uzmbschr OF((ZCONST unsigned char *str, unsigned int c)); #endif #ifdef NEED_UZMBSRCHR unsigned char *uzmbsrchr OF((ZCONST unsigned char *str, unsigned int c)); #endif #ifdef SMALL_MEM char *fLoadFarString OF((__GPRO__ const char Far *sz)); char *fLoadFarStringSmall OF((__GPRO__ const char Far *sz)); char *fLoadFarStringSmall2 OF((__GPRO__ const char Far *sz)); #ifndef zfstrcpy char Far * Far zfstrcpy OF((char Far *s1, const char Far *s2)); #endif #if (!defined(SFX) && !defined(zfstrcmp)) int Far zfstrcmp OF((const char Far *s1, const char Far *s2)); #endif #endif /*--------------------------------------------------------------------------- Functions in extract.c: ---------------------------------------------------------------------------*/ int extract_or_test_files OF((__GPRO)); /* static int store_info OF((void)); */ /* static int extract_or_test_member OF((__GPRO)); */ /* static int TestExtraField OF((__GPRO__ uch *ef, unsigned ef_len)); */ /* static int test_OS2 OF((__GPRO__ uch *eb, unsigned eb_size)); */ /* static int test_NT OF((__GPRO__ uch *eb, unsigned eb_size)); */ #ifndef SFX unsigned find_compr_idx OF((unsigned compr_methodnum)); #endif int memextract OF((__GPRO__ uch *tgt, ulg tgtsize, ZCONST uch *src, ulg srcsize)); int memflush OF((__GPRO__ ZCONST uch *rawbuf, ulg size)); #if (defined(VMS) || defined(VMS_TEXT_CONV)) uch *extract_izvms_block OF((__GPRO__ ZCONST uch *ebdata, unsigned size, unsigned *retlen, ZCONST uch *init, unsigned needlen)); #endif char *fnfilter OF((ZCONST char *raw, uch *space, extent size)); /*--------------------------------------------------------------------------- Decompression functions: ---------------------------------------------------------------------------*/ #if (!defined(SFX) && !defined(FUNZIP)) int explode OF((__GPRO)); /* explode.c */ #endif int huft_free OF((struct huft *t)); /* inflate.c */ int huft_build OF((__GPRO__ ZCONST unsigned *b, unsigned n, unsigned s, ZCONST ush *d, ZCONST uch *e, struct huft **t, unsigned *m)); #ifdef USE_ZLIB int UZinflate OF((__GPRO__ int is_defl64)); /* inflate.c */ # define inflate_free(x) inflateEnd(&((Uz_Globs *)(&G))->dstrm) #else int inflate OF((__GPRO__ int is_defl64)); /* inflate.c */ int inflate_free OF((__GPRO)); /* inflate.c */ #endif /* ?USE_ZLIB */ #if (!defined(SFX) && !defined(FUNZIP)) #ifndef COPYRIGHT_CLEAN int unreduce OF((__GPRO)); /* unreduce.c */ /* static void LoadFollowers OF((__GPRO__ f_array *follower, uch *Slen)); * unreduce.c */ #endif /* !COPYRIGHT_CLEAN */ #ifndef LZW_CLEAN int unshrink OF((__GPRO)); /* unshrink.c */ /* static void partial_clear OF((__GPRO)); * unshrink.c */ #endif /* !LZW_CLEAN */ #endif /* !SFX && !FUNZIP */ #ifdef USE_BZIP2 int UZbunzip2 OF((__GPRO)); /* extract.c */ void bz_internal_error OF((int bzerrcode)); /* ubz2err.c */ #endif /*--------------------------------------------------------------------------- Internal API functions (only included in DLL versions): ---------------------------------------------------------------------------*/ #ifdef DLL void setFileNotFound OF((__GPRO)); /* api.c */ int unzipToMemory OF((__GPRO__ char *zip, char *file, UzpBuffer *retstr)); /* api.c */ int redirect_outfile OF((__GPRO)); /* api.c */ int writeToMemory OF((__GPRO__ ZCONST uch *rawbuf, extent size)); /* api.c */ int close_redirect OF((__GPRO)); /* api.c */ /* this obsolescent entry point kept for compatibility: */ int UzpUnzip OF((int argc, char **argv));/* use UzpMain */ #ifdef OS2DLL int varmessage OF((__GPRO__ ZCONST uch *buf, ulg size)); int varputchar OF((__GPRO__ int c)); /* rexxapi.c */ int finish_REXX_redirect OF((__GPRO)); /* rexxapi.c */ #endif #ifdef API_DOC void APIhelp OF((__GPRO__ int argc, char **argv)); #endif /* apihelp.c */ #endif /* DLL */ /*--------------------------------------------------------------------------- MSDOS-only functions: ---------------------------------------------------------------------------*/ #ifdef MSDOS #if (!defined(FUNZIP) && !defined(SFX) && !defined(WINDLL)) void check_for_windows OF((ZCONST char *app)); /* msdos.c */ #endif #if (defined(__GO32__) || defined(__EMX__)) unsigned _dos_getcountryinfo(void *); /* msdos.c */ #if (!defined(__DJGPP__) || (__DJGPP__ < 2)) unsigned _dos_setftime(int, unsigned, unsigned); /* msdos.c */ unsigned _dos_setfileattr(const char *, unsigned); /* msdos.c */ unsigned _dos_creat(const char *, unsigned, int *); /* msdos.c */ void _dos_getdrive(unsigned *); /* msdos.c */ unsigned _dos_close(int); /* msdos.c */ #endif /* !__DJGPP__ || (__DJGPP__ < 2) */ #endif /* __GO32__ || __EMX__ */ #endif /*--------------------------------------------------------------------------- OS/2-only functions: ---------------------------------------------------------------------------*/ #ifdef OS2 /* GetFileTime conflicts with something in Win32 header files */ #if (defined(REENTRANT) && defined(USETHREADID)) ulg GetThreadId OF((void)); #endif int GetCountryInfo OF((void)); /* os2.c */ long GetFileTime OF((ZCONST char *name)); /* os2.c */ /* static void SetPathAttrTimes OF((__GPRO__ int flags, int dir)); os2.c */ /* static int SetEAs OF((__GPRO__ const char *path, void *eablock)); os2.c */ /* static int SetACL OF((__GPRO__ const char *path, void *eablock)); os2.c */ /* static int IsFileNameValid OF((const char *name)); os2.c */ /* static void map2fat OF((char *pathcomp, char **pEndFAT)); os2.c */ /* static int SetLongNameEA OF((char *name, char *longname)); os2.c */ /* static void InitNLS OF((void)); os2.c */ int IsUpperNLS OF((int nChr)); /* os2.c */ int ToLowerNLS OF((int nChr)); /* os2.c */ void DebugMalloc OF((void)); /* os2.c */ #endif /*--------------------------------------------------------------------------- QDOS-only functions: ---------------------------------------------------------------------------*/ #ifdef QDOS int QMatch (uch, uch); void QFilename (__GPRO__ char *); char *Qstrfix (char *); int QReturn (int zip_error); #endif /*--------------------------------------------------------------------------- TOPS20-only functions: ---------------------------------------------------------------------------*/ #ifdef TOPS20 int upper OF((char *s)); /* tops20.c */ int enquote OF((char *s)); /* tops20.c */ int dequote OF((char *s)); /* tops20.c */ int fnlegal OF(()); /* error if prototyped? */ /* tops20.c */ #endif /*--------------------------------------------------------------------------- VM/CMS- and MVS-only functions: ---------------------------------------------------------------------------*/ #ifdef CMS_MVS extent getVMMVSexfield OF((char *type, uch *ef_block, unsigned datalen)); FILE *vmmvs_open_infile OF((__GPRO)); /* vmmvs.c */ void close_infile OF((__GPRO)); /* vmmvs.c */ #endif /*--------------------------------------------------------------------------- VMS-only functions: ---------------------------------------------------------------------------*/ #ifdef VMS int check_format OF((__GPRO)); /* vms.c */ /* int open_outfile OF((__GPRO)); * (see fileio.c) vms.c */ /* int flush OF((__GPRO__ uch *rawbuf, unsigned size, int final_flag)); * (see fileio.c) vms.c */ char *vms_msg_text OF((void)); /* vms.c */ #ifdef RETURN_CODES void return_VMS OF((__GPRO__ int zip_error)); /* vms.c */ #else void return_VMS OF((int zip_error)); /* vms.c */ #endif #ifdef VMSCLI ulg vms_unzip_cmdline OF((int *, char ***)); /* cmdline.c */ int VMSCLI_usage OF((__GPRO__ int error)); /* cmdline.c */ #endif #endif /*--------------------------------------------------------------------------- WIN32-only functions: ---------------------------------------------------------------------------*/ #ifdef WIN32 int IsWinNT OF((void)); /* win32.c */ #ifdef NTSD_EAS void process_defer_NT OF((__GPRO)); /* win32.c */ int test_NTSD OF((__GPRO__ uch *eb, unsigned eb_size, uch *eb_ucptr, ulg eb_ucsize)); /* win32.c */ # define TEST_NTSD test_NTSD #endif #ifdef W32_STAT_BANDAID int zstat_win32 OF((__W32STAT_GLOBALS__ const char *path, z_stat *buf)); /* win32.c */ #endif #endif /*--------------------------------------------------------------------------- Miscellaneous/shared functions: ---------------------------------------------------------------------------*/ Uz_Globs *globalsCtor OF((void)); /* globals.c */ int envargs OF((int *Pargc, char ***Pargv, ZCONST char *envstr, ZCONST char *envstr2)); /* envargs.c */ void mksargs OF((int *argcp, char ***argvp)); /* envargs.c */ int match OF((ZCONST char *s, ZCONST char *p, int ic __WDLPRO)); /* match.c */ int iswild OF((ZCONST char *p)); /* match.c */ /* declarations of public CRC-32 functions have been moved into crc32.h (free_crc_table(), get_crc_table(), crc32()) crc32.c */ int dateformat OF((void)); /* local */ char dateseparator OF((void)); /* local */ #ifndef WINDLL void version OF((__GPRO)); /* local */ #endif int mapattr OF((__GPRO)); /* local */ int mapname OF((__GPRO__ int renamed)); /* local */ int checkdir OF((__GPRO__ char *pathcomp, int flag)); /* local */ char *do_wild OF((__GPRO__ ZCONST char *wildzipfn)); /* local */ char *GetLoadPath OF((__GPRO)); /* local */ #if (defined(MORE) && (defined(ATH_BEO_UNX) || defined(QDOS) || defined(VMS))) int screensize OF((int *tt_rows, int *tt_cols)); /* local */ # if defined(VMS) int screenlinewrap OF((void)); /* local */ # endif #endif /* MORE && (ATH_BEO_UNX || QDOS || VMS) */ #ifdef OS2_W32 int SetFileSize OF((FILE *file, zusz_t filesize)); /* local */ #endif #ifndef MTS /* macro in MTS */ void close_outfile OF((__GPRO)); /* local */ #endif #ifdef SET_SYMLINK_ATTRIBS int set_symlnk_attribs OF((__GPRO__ slinkentry *slnk_entry)); /* local */ #endif #ifdef SET_DIR_ATTRIB int defer_dir_attribs OF((__GPRO__ direntry **pd)); /* local */ int set_direc_attribs OF((__GPRO__ direntry *d)); /* local */ #endif #ifdef TIMESTAMP # ifdef WIN32 int stamp_file OF((__GPRO__ ZCONST char *fname, time_t modtime)); /* local */ # else int stamp_file OF((ZCONST char *fname, time_t modtime)); /* local */ # endif #endif #ifdef NEED_ISO_OEM_INIT void prepare_ISO_OEM_translat OF((__GPRO)); /* local */ #endif #if (defined(MALLOC_WORK) && defined(MY_ZCALLOC)) zvoid far *zcalloc OF((unsigned int, unsigned int)); zvoid zcfree OF((zvoid far *)); #endif /* MALLOC_WORK && MY_ZCALLOC */ #ifdef SYSTEM_SPECIFIC_CTOR void SYSTEM_SPECIFIC_CTOR OF((__GPRO)); /* local */ #endif #ifdef SYSTEM_SPECIFIC_DTOR void SYSTEM_SPECIFIC_DTOR OF((__GPRO)); /* local */ #endif /************/ /* Macros */ /************/ #ifndef MAX # define MAX(a,b) ((a) > (b) ? (a) : (b)) #endif #ifndef MIN # define MIN(a,b) ((a) < (b) ? (a) : (b)) #endif #ifdef DEBUG # if (defined(THEOS) && defined(NO_BOGUS_SPC)) # define NO_DEBUG_IN_MACROS # define Trace(x) _fprintf x # else # define Trace(x) fprintf x # endif #else # define Trace(x) #endif #ifdef DEBUG_TIME # define TTrace(x) fprintf x #else # define TTrace(x) #endif #ifdef NO_DEBUG_IN_MACROS # define MTrace(x) #else # define MTrace(x) Trace(x) #endif #if (defined(UNIX) || defined(T20_VMS)) /* generally old systems */ # define ToLower(x) ((char)(isupper((int)x)? tolower((int)x) : x)) #else # define ToLower tolower /* assumed "smart"; used in match() */ #endif #ifdef USE_STRM_INPUT /* ``Replace'' the unbuffered UNIX style I/O function with similar * standard C functions from . */ # define read(fd,buf,n) fread((buf),1,(n),(FILE *)(fd)) # ifdef zlseek # undef zlseek # endif # define zlseek(fd,o,w) zfseeko((FILE *)(fd),(o),(w)) # define close(fd) fclose((FILE *)(fd)) #endif /* USE_STRM_INPUT */ /* The return value of the Info() "macro function" is never checked in * UnZip. Otherwise, to get the same behaviour as for (*G.message)(), the * Info() definition for "FUNZIP" would have to be corrected: * #define Info(buf,flag,sprf_arg) \ * (fputs((char *)(sprintf sprf_arg, (buf)), \ * (flag)&1? stderr : stdout) < 0) */ static inline void noop(void) {} #define Info(...) noop() #ifndef Info /* may already have been defined for redirection */ # ifdef FUNZIP # define Info(buf,flag,sprf_arg) \ fputs((char *)(sprintf sprf_arg, (buf)), (flag)&1? stderr : stdout) # else # ifdef INT_SPRINTF /* optimized version for "int sprintf()" flavour */ # define Info(buf,flag,sprf_arg) \ (*G.message)((zvoid *)&G, (uch *)(buf), (ulg)sprintf sprf_arg, (flag)) # else /* generic version, does not use sprintf() return value */ # define Info(buf,flag,sprf_arg) \ (*G.message)((zvoid *)&G, (uch *)(buf), \ (ulg)(sprintf sprf_arg, strlen((char *)(buf))), (flag)) # endif # endif #endif /* !Info */ /* This wrapper macro around fzofft() is just defined to "hide" the * argument needed to reference the global storage buffers. */ #define FmZofft(val, pre, post) fzofft(__G__ val, pre, post) /* The following macro wrappers around the fnfilter function are used many * times to prepare archive entry names or name components for displaying * listings and (warning/error) messages. They use sections in the upper half * of 'slide' as buffer, since their output is normally fed through the * Info() macro with 'slide' (the start of this area) as message buffer. */ #define FnFilter1(fname) \ fnfilter((fname), slide + (extent)(WSIZE>>1), (extent)(WSIZE>>2)) #define FnFilter2(fname) \ fnfilter((fname), slide + (extent)((WSIZE>>1) + (WSIZE>>2)),\ (extent)(WSIZE>>2)) #ifndef FUNZIP /* used only in inflate.c */ # define MESSAGE(str,len,flag) (*G.message)((zvoid *)&G,(str),(len),(flag)) #endif #if 0 /* Optimization: use the (const) result of crc32(0L,NULL,0) */ # define CRCVAL_INITIAL crc32(0L, NULL, 0) #else # define CRCVAL_INITIAL 0L #endif #ifdef SYMLINKS /* This macro defines the Zip "made by" hosts that are considered to support storing symbolic link entries. */ # define SYMLINK_HOST(hn) ((hn) == UNIX_ || (hn) == ATARI_ || \ (hn) == ATHEOS_ || (hn) == BEOS_ || (hn) == VMS_) #endif #ifndef TEST_NTSD /* "NTSD valid?" checking function */ # define TEST_NTSD NULL /* ... is not available */ #endif #define SKIP_(length) if(length&&((error=do_string(__G__ length,SKIP))!=0))\ {error_in_archive=error; if(error>1) return error;} /* * Skip a variable-length field, and report any errors. Used in zipinfo.c * and unzip.c in several functions. * * macro SKIP_(length) * ush length; * { * if (length && ((error = do_string(length, SKIP)) != 0)) { * error_in_archive = error; /-* might be warning *-/ * if (error > 1) /-* fatal *-/ * return (error); * } * } * */ #ifdef FUNZIP # define FLUSH(w) flush(__G__ (ulg)(w)) # define NEXTBYTE getc(G.in) /* redefined in crypt.h if full version */ #else # define FLUSH(w) ((G.mem_mode) ? memflush(__G__ redirSlide,(ulg)(w)) \ : flush(__G__ redirSlide,(ulg)(w),0)) # define NEXTBYTE (G.incnt-- > 0 ? (int)(*G.inptr++) : readbyte(__G)) #endif #define READBITS(nbits,zdest) {if(nbits>G.bits_left) {int temp; G.zipeof=1;\ while (G.bits_left<=8*(int)(sizeof(G.bitbuf)-1) && (temp=NEXTBYTE)!=EOF) {\ G.bitbuf|=(ulg)temp<>=nbits;\ G.bits_left-=nbits;} /* * macro READBITS(nbits,zdest) * only used by unreduce and unshrink * * { * if (nbits > G.bits_left) { * fill G.bitbuf, 8*sizeof(ulg) bits * * int temp; * * G.zipeof = 1; * while (G.bits_left <= 8*(int)(sizeof(G.bitbuf)-1) && * (temp = NEXTBYTE) != EOF) { * G.bitbuf |= (ulg)temp << G.bits_left; * G.bits_left += 8; * G.zipeof = 0; * } * } * zdest = (shrint)((unsigned)G.bitbuf & mask_bits[nbits]); * G.bitbuf >>= nbits; * G.bits_left -= nbits; * } * */ /* GRR: should use StringLower for STRLOWER macro if possible */ /* * Copy the zero-terminated string in str1 into str2, converting any * uppercase letters to lowercase as we go. str2 gets zero-terminated * as well, of course. str1 and str2 may be the same character array. */ #ifdef _MBCS # define STRLOWER(str1, str2) \ { \ char *p, *q, c; unsigned i; \ p = (char *)(str1); \ q = (char *)(str2); \ while ((c = *p) != '\0') { \ if ((i = CLEN(p)) > 1) { \ while (i--) *q++ = *p++; \ } else { \ *q++ = (char)(isupper((int)(c))? tolower((int)(c)) : c); \ p++; \ } \ } \ *q = '\0'; \ } #else # define STRLOWER(str1, str2) \ { \ char *p, *q; \ p = (char *)(str1) - 1; \ q = (char *)(str2); \ while (*++p) \ *q++ = (char)(isupper((int)(*p))? tolower((int)(*p)) : *p); \ *q = '\0'; \ } #endif /* * NOTES: This macro makes no assumptions about the characteristics of * the tolower() function or macro (beyond its existence), nor does it * make assumptions about the structure of the character set (i.e., it * should work on EBCDIC machines, too). The fact that either or both * of isupper() and tolower() may be macros has been taken into account; * watch out for "side effects" (in the C sense) when modifying this * macro. */ #ifndef foreign # define foreign(c) (c) #endif #ifndef native # define native(c) (c) # define A_TO_N(str1) #else # ifndef NATIVE # define NATIVE "native chars" # endif # define A_TO_N(str1) {register uch *p;\ for (p=(uch *)(str1); *p; p++) *p=native(*p);} #endif /* * Translate the zero-terminated string in str1 from ASCII to the native * character set. The translation is performed in-place and uses the * "native" macro to translate each character. * * NOTE: Using the "native" macro means that is it the only part of unzip * which knows which translation table (if any) is actually in use to * produce the native character set. This makes adding new character set * translation tables easy, insofar as all that is needed is an appropriate * "native" macro definition and the translation table itself. Currently, * the only non-ASCII native character set implemented is EBCDIC, but this * may not always be so. */ /* default setup for internal codepage: assume ISO 8859-1 compatibility!! */ #if (!defined(NATIVE) && !defined(CRTL_CP_IS_ISO) && !defined(CRTL_CP_IS_OEM)) # define CRTL_CP_IS_ISO #endif /* Translate "extended ASCII" chars (OEM coding for DOS and OS/2; else * ISO-8859-1 [ISO Latin 1, Win Ansi,...]) into the internal "native" * code page. As with A_TO_N(), conversion is done in place. */ #ifndef _ISO_INTERN # ifdef CRTL_CP_IS_OEM # ifndef IZ_ISO2OEM_ARRAY # define IZ_ISO2OEM_ARRAY # endif # define _ISO_INTERN(str1) if (iso2oem) {register uch *p;\ for (p=(uch *)(str1); *p; p++)\ *p = native((*p & 0x80) ? iso2oem[*p & 0x7f] : *p);} # else # define _ISO_INTERN(str1) A_TO_N(str1) # endif #endif #ifndef _OEM_INTERN # ifdef CRTL_CP_IS_OEM # define _OEM_INTERN(str1) A_TO_N(str1) # else # ifndef IZ_OEM2ISO_ARRAY # define IZ_OEM2ISO_ARRAY # endif # define _OEM_INTERN(str1) if (oem2iso) {register uch *p;\ for (p=(uch *)(str1); *p; p++)\ *p = native((*p & 0x80) ? oem2iso[*p & 0x7f] : *p);} # endif #endif #ifndef STR_TO_ISO # ifdef CRTL_CP_IS_ISO # define STR_TO_ISO strcpy # else # define STR_TO_ISO str2iso # define NEED_STR2ISO # endif #endif #ifndef STR_TO_OEM # ifdef CRTL_CP_IS_OEM # define STR_TO_OEM strcpy # else # define STR_TO_OEM str2oem # define NEED_STR2OEM # endif #endif #if (!defined(INTERN_TO_ISO) && !defined(ASCII2ISO)) # ifdef CRTL_CP_IS_OEM /* know: "ASCII" is "OEM" */ # define ASCII2ISO(c) \ ((((c) & 0x80) && oem2iso) ? oem2iso[(c) & 0x7f] : (c)) # if (defined(NEED_STR2ISO) && !defined(CRYP_USES_OEM2ISO)) # define CRYP_USES_OEM2ISO # endif # else /* assume: "ASCII" is "ISO-ANSI" */ # define ASCII2ISO(c) (c) # endif #endif #if (!defined(INTERN_TO_OEM) && !defined(ASCII2OEM)) # ifdef CRTL_CP_IS_OEM /* know: "ASCII" is "OEM" */ # define ASCII2OEM(c) (c) # else /* assume: "ASCII" is "ISO-ANSI" */ # define ASCII2OEM(c) \ ((((c) & 0x80) && iso2oem) ? iso2oem[(c) & 0x7f] : (c)) # if (defined(NEED_STR2OEM) && !defined(CRYP_USES_ISO2OEM)) # define CRYP_USES_ISO2OEM # endif # endif #endif /* codepage conversion setup for testp() in crypt.c */ #ifdef CRTL_CP_IS_ISO # ifndef STR_TO_CP2 # define STR_TO_CP2 STR_TO_OEM # endif #else # ifdef CRTL_CP_IS_OEM # ifndef STR_TO_CP2 # define STR_TO_CP2 STR_TO_ISO # endif # else /* native internal CP is neither ISO nor OEM */ # ifndef STR_TO_CP1 # define STR_TO_CP1 STR_TO_ISO # endif # ifndef STR_TO_CP2 # define STR_TO_CP2 STR_TO_OEM # endif # endif #endif /* Convert filename (and file comment string) into "internal" charset. * This macro assumes that Zip entry filenames are coded in OEM (IBM DOS) * codepage when made on * -> DOS (this includes 16-bit Windows 3.1) (FS_FAT_) * -> OS/2 (FS_HPFS_) * -> Win95/WinNT with Nico Mak's WinZip (FS_NTFS_ && hostver == "5.0") * EXCEPTIONS: * PKZIP for Windows 2.5, 2.6, and 4.0 flag their entries as "FS_FAT_", but * the filename stored in the local header is coded in Windows ANSI (CP 1252 * resp. ISO 8859-1 on US and western Europe locale settings). * Likewise, PKZIP for UNIX 2.51 flags its entries as "FS_FAT_", but the * filenames stored in BOTH the local and the central header are coded * in the local system's codepage (usually ANSI codings like ISO 8859-1). * * All other ports are assumed to code zip entry filenames in ISO 8859-1. */ #ifndef Ext_ASCII_TO_Native # define Ext_ASCII_TO_Native(string, hostnum, hostver, isuxatt, islochdr) \ if (((hostnum) == FS_FAT_ && \ !(((islochdr) || (isuxatt)) && \ ((hostver) == 25 || (hostver) == 26 || (hostver) == 40))) || \ (hostnum) == FS_HPFS_ || \ ((hostnum) == FS_NTFS_ && (hostver) == 50)) { \ _OEM_INTERN((string)); \ } else { \ _ISO_INTERN((string)); \ } #endif /**********************/ /* Global constants */ /**********************/ extern ZCONST unsigned near mask_bits[17]; extern ZCONST char *fnames[2]; #ifdef EBCDIC extern ZCONST uch ebcdic[]; #endif #ifdef IZ_ISO2OEM_ARRAY extern ZCONST uch Far *iso2oem; extern ZCONST uch Far iso2oem_850[]; #endif #ifdef IZ_OEM2ISO_ARRAY extern ZCONST uch Far *oem2iso; extern ZCONST uch Far oem2iso_850[]; #endif extern ZCONST char Far VersionDate[]; extern ZCONST char Far CentSigMsg[]; #ifndef SFX extern ZCONST char Far EndSigMsg[]; #endif extern ZCONST char Far SeekMsg[]; extern ZCONST char Far FilenameNotMatched[]; extern ZCONST char Far ExclFilenameNotMatched[]; extern ZCONST char Far ReportMsg[]; #ifndef SFX extern ZCONST char Far Zipnfo[]; extern ZCONST char Far CompiledWith[]; #endif /* !SFX */ /***********************************/ /* Global (shared?) RTL variables */ /***********************************/ #ifdef DECLARE_ERRNO extern int errno; #endif /*--------------------------------------------------------------------- Unicode Support 28 August 2005 ---------------------------------------------------------------------*/ #if (defined(UNICODE_SUPPORT) && defined(UNICODE_WCHAR)) /* Default character when a zwchar too big for wchar_t */ # define zwchar_to_wchar_t_default_char '_' /* Default character string when wchar_t does not convert to mb */ # define wide_to_mb_default_string "_" /* wide character type */ typedef unsigned long zwchar; /* UTF-8 related conversion functions, currently found in process.c */ # if 0 /* currently unused */ /* check if string is all ASCII */ int is_ascii_string OF((ZCONST char *mbstring)); # endif /* unused */ /* convert UTF-8 string to multi-byte string */ char *utf8_to_local_string OF((ZCONST char *utf8_string, int escape_all)); /* convert UTF-8 string to wide string */ zwchar *utf8_to_wide_string OF((ZCONST char *utf8_string)); /* convert wide string to multi-byte string */ char *wide_to_local_string OF((ZCONST zwchar *wide_string, int escape_all)); # if 0 /* currently unused */ /* convert local string to multi-byte display string */ char *local_to_display_string OF((ZCONST char *local_string)); # endif /* unused */ /* convert wide character to escape string */ char *wide_to_escape_string OF((unsigned long)); # define utf8_to_escaped_string(utf8_string) \ utf8_to_local_string(utf8_string, TRUE) # if 0 /* currently unused */ /* convert escape string to wide character */ unsigned long escape_string_to_wide OF((ZCONST char *escape_string)); /* convert local to UTF-8 */ char *local_to_utf8_string OF ((ZCONST char *local_string)); /* convert local to wide string */ zwchar *local_to_wide_string OF ((ZCONST char *local_string)); /* convert wide string to UTF-8 */ char *wide_to_utf8_string OF((ZCONST zwchar *wide_string)); # endif /* unused */ #endif /* UNICODE_SUPPORT && UNICODE_WCHAR */ #endif /* !__unzpriv_h */ Carla-2.4.2/data/windows/unzipfx-carla-control/unzvers.h000066400000000000000000000060411420416754300233010ustar00rootroot00000000000000/* Copyright (c) 1990-2009 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2009-Jan-02 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /* unzvers.h (for UnZip) by Info-ZIP. */ #ifndef __unzvers_h /* don't include more than once */ #define __unzvers_h #ifdef BETA # undef BETA /* undefine BETA for public releases */ #endif #ifdef BETA # define UZ_BETALEVEL "h03 BETA" # define UZ_VERSION_DATE "17 Apr 09" /* internal beta version */ #else # define UZ_BETALEVEL "" # define UZ_VERSION_DATE "20 April 2009" /* official release version */ # define RELEASE #endif #define UZ_MAJORVER 6 /* UnZip */ #define UZ_MINORVER 0 #define ZI_MAJORVER 3 /* ZipInfo */ #define ZI_MINORVER 0 #define UZ_PATCHLEVEL 0 #define UZ_VER_STRING "6.0" /* keep in sync with Version numbers! */ #ifndef IZ_COMPANY_NAME /* might be already defined... */ # define IZ_COMPANY_NAME "Info-ZIP" #endif /* these are obsolete but remain for backward compatibility: */ #if (defined(OS2) || defined(__OS2__)) # define D2_MAJORVER UZ_MAJORVER /* DLL for OS/2 */ # define D2_MINORVER UZ_MINORVER # define D2_PATCHLEVEL UZ_PATCHLEVEL #endif #define DW_MAJORVER UZ_MAJORVER /* DLL for MS Windows */ #define DW_MINORVER UZ_MINORVER #define DW_PATCHLEVEL UZ_PATCHLEVEL #define WIN_VERSION_DATE UZ_VERSION_DATE #define UNZ_DLL_VERSION UZ_VER_STRING /* The following version constants specify the UnZip version that introduced * the most recent incompatible change (means: change that breaks backward * compatibility) of a DLL/Library binary API definition. * * Currently, UnZip supports three distinct DLL/Library APIs, which each * carry their own "compatibility level": * a) The "generic" (console-mode oriented) API has been used on UNIX, * for example. This API provides a "callable" interface similar to the * interactive command line of the normal program executables. * b) The OS/2-only API provides (additional) functions specially tailored * for interfacing with the REXX shell. * c) The Win32 DLL API with a pure binary interface which can be used to * build GUI mode as well as Console mode applications. * * Whenever a change that breaks backward compatibility gets applied to * any of the DLL/Library APIs, the corresponding compatibility level should * be synchronized with the current UnZip version numbers. */ /* generic DLL API minimum compatible version*/ #define UZ_GENAPI_COMP_MAJOR 6 #define UZ_GENAPI_COMP_MINOR 0 #define UZ_GENAPI_COMP_REVIS 0 /* os2dll API minimum compatible version*/ #define UZ_OS2API_COMP_MAJOR 6 #define UZ_OS2API_COMP_MINOR 0 #define UZ_OS2API_COMP_REVIS 0 /* windll API minimum compatible version*/ #define UZ_WINAPI_COMP_MAJOR 6 #define UZ_WINAPI_COMP_MINOR 0 #define UZ_WINAPI_COMP_REVIS 0 #endif /* !__unzvers_h */ Carla-2.4.2/data/windows/unzipfx-carla-control/win32/000077500000000000000000000000001420416754300223555ustar00rootroot00000000000000Carla-2.4.2/data/windows/unzipfx-carla-control/win32/nt.c000066400000000000000000000405051420416754300231460ustar00rootroot00000000000000/* Copyright (c) 1990-2007 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2000-Apr-09 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /* Copyright (c) 1996 Scott Field (dedicated to Info-Zip group) Module Name: nt.c Abstract: This module implements WinNT security descriptor operations for the Win32 Info-ZIP project. Operation such as setting file security, using/querying local and remote privileges, and queuing of operations is performed here. The contents of this module are only relevant when the code is running on Windows NT, and the target volume supports persistent Acl storage. User privileges that allow accessing certain privileged aspects of the security descriptor (such as the Sacl) are only used if the user specified to do so. Author: Scott Field (sfield@microsoft.com) Last revised: 18 Jan 97 */ #define WIN32_LEAN_AND_MEAN #define UNZIP_INTERNAL #include #include "../unzip.h" #ifdef __RSXNT__ # include "../win32/rsxntwin.h" #endif #include "../win32/nt.h" #ifdef NTSD_EAS /* This file is only needed for NTSD handling */ /* Borland C++ does not define FILE_SHARE_DELETE. Others also? */ #ifndef FILE_SHARE_DELETE # define FILE_SHARE_DELETE 0x00000004 #endif /* This macro definition is missing in old versions of MS' winbase.h. */ #ifndef InterlockedExchangePointer # define InterlockedExchangePointer(Target, Value) \ (PVOID)InterlockedExchange((PLONG)(Target), (LONG)(Value)) #endif /* private prototypes */ static BOOL Initialize(VOID); static VOID GetRemotePrivilegesSet(CHAR *FileName, PDWORD dwRemotePrivileges); static VOID InitLocalPrivileges(VOID); volatile BOOL bInitialized = FALSE; /* module level stuff initialized? */ HANDLE hInitMutex = NULL; /* prevent multiple initialization */ BOOL g_bRestorePrivilege = FALSE; /* for local set file security override */ BOOL g_bSaclPrivilege = FALSE; /* for local set sacl operations, only when restore privilege not present */ /* our single cached volume capabilities structure that describes the last volume root we encountered. A single entry like this works well in the zip/unzip scenario for a number of reasons: 1. typically one extraction path during unzip. 2. typically process one volume at a time during zip, and then move on to the next. 3. no cleanup code required and no memory leaks. 4. simple code. This approach should be reworked to a linked list approach if we expect to be called by many threads which are processing a variety of input/output volumes, since lock contention and stale data may become a bottleneck. */ VOLUMECAPS g_VolumeCaps; CRITICAL_SECTION VolumeCapsLock; static BOOL Initialize(VOID) { HANDLE hMutex; HANDLE hOldMutex; if (bInitialized) return TRUE; hMutex = CreateMutex(NULL, TRUE, NULL); if(hMutex == NULL) return FALSE; hOldMutex = (HANDLE)InterlockedExchangePointer((void *)&hInitMutex, hMutex); if (hOldMutex != NULL) { /* somebody setup the mutex already */ InterlockedExchangePointer((void *)&hInitMutex, hOldMutex); CloseHandle(hMutex); /* close new, un-needed mutex */ /* wait for initialization to complete and return status */ WaitForSingleObject(hOldMutex, INFINITE); ReleaseMutex(hOldMutex); return bInitialized; } if (!bInitialized) { /* initialize module level resources */ InitializeCriticalSection( &VolumeCapsLock ); memset(&g_VolumeCaps, 0, sizeof(VOLUMECAPS)); InitLocalPrivileges(); bInitialized = TRUE; } InterlockedExchangePointer((void *)&hInitMutex, NULL); ReleaseMutex(hMutex); /* release correct mutex */ CloseHandle(hMutex); /* free the no longer needed handle resource */ return TRUE; } BOOL ValidateSecurity(uch *securitydata) { PSECURITY_DESCRIPTOR sd = (PSECURITY_DESCRIPTOR)securitydata; PACL pAcl; PSID pSid; BOOL bAclPresent; BOOL bDefaulted; if(!IsWinNT()) return TRUE; /* don't do anything if not on WinNT */ if(!IsValidSecurityDescriptor(sd)) return FALSE; /* verify Dacl integrity */ if(!GetSecurityDescriptorDacl(sd, &bAclPresent, &pAcl, &bDefaulted)) return FALSE; if(bAclPresent && pAcl!=NULL) { if(!IsValidAcl(pAcl)) return FALSE; } /* verify Sacl integrity */ if(!GetSecurityDescriptorSacl(sd, &bAclPresent, &pAcl, &bDefaulted)) return FALSE; if(bAclPresent && pAcl!=NULL) { if(!IsValidAcl(pAcl)) return FALSE; } /* verify owner integrity */ if(!GetSecurityDescriptorOwner(sd, &pSid, &bDefaulted)) return FALSE; if(pSid != NULL) { if(!IsValidSid(pSid)) return FALSE; } /* verify group integrity */ if(!GetSecurityDescriptorGroup(sd, &pSid, &bDefaulted)) return FALSE; if(pSid != NULL) { if(!IsValidSid(pSid)) return FALSE; } return TRUE; } static VOID GetRemotePrivilegesSet(char *FileName, PDWORD dwRemotePrivileges) { HANDLE hFile; *dwRemotePrivileges = 0; /* see if we have the SeRestorePrivilege */ hFile = CreateFileA( FileName, ACCESS_SYSTEM_SECURITY | WRITE_DAC | WRITE_OWNER | READ_CONTROL, FILE_SHARE_READ | FILE_SHARE_DELETE, /* no sd updating allowed here */ NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL ); if(hFile != INVALID_HANDLE_VALUE) { /* no remote way to determine SeRestorePrivilege -- just try a read/write to simulate it */ SECURITY_INFORMATION si = DACL_SECURITY_INFORMATION | SACL_SECURITY_INFORMATION | OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION; PSECURITY_DESCRIPTOR sd; DWORD cbBuf = 0; GetKernelObjectSecurity(hFile, si, NULL, cbBuf, &cbBuf); if(ERROR_INSUFFICIENT_BUFFER == GetLastError()) { if((sd = HeapAlloc(GetProcessHeap(), 0, cbBuf)) != NULL) { if(GetKernelObjectSecurity(hFile, si, sd, cbBuf, &cbBuf)) { if(SetKernelObjectSecurity(hFile, si, sd)) *dwRemotePrivileges |= OVERRIDE_RESTORE; } HeapFree(GetProcessHeap(), 0, sd); } } CloseHandle(hFile); } else { /* see if we have the SeSecurityPrivilege */ /* note we don't need this if we have SeRestorePrivilege */ hFile = CreateFileA( FileName, ACCESS_SYSTEM_SECURITY, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, /* max */ NULL, OPEN_EXISTING, 0, NULL ); if(hFile != INVALID_HANDLE_VALUE) { CloseHandle(hFile); *dwRemotePrivileges |= OVERRIDE_SACL; } } } BOOL GetVolumeCaps( char *rootpath, /* filepath, or NULL */ char *name, /* filename associated with rootpath */ PVOLUMECAPS VolumeCaps /* result structure describing capabilities */ ) { char TempRootPath[MAX_PATH + 1]; DWORD cchTempRootPath = 0; BOOL bSuccess = TRUE; /* assume success until told otherwise */ if(!bInitialized) if(!Initialize()) return FALSE; /* process the input path to produce a consistent path suitable for compare operations and also suitable for certain picky Win32 API that don't like forward slashes */ if(rootpath != NULL && rootpath[0] != '\0') { DWORD i; cchTempRootPath = lstrlenA(rootpath); if(cchTempRootPath > MAX_PATH) return FALSE; /* copy input, converting forward slashes to back slashes as we go */ for(i = 0 ; i <= cchTempRootPath ; i++) { if(rootpath[i] == '/') TempRootPath[i] = '\\'; else TempRootPath[i] = rootpath[i]; } /* check for UNC and Null terminate or append trailing \ as appropriate */ /* possible valid UNCs we are passed follow: \\machine\foo\bar (path is \\machine\foo\) \\machine\foo (path is \\machine\foo\) \\machine\foo\ \\.\c$\ (FIXFIX: Win32API doesn't like this - GetComputerName()) LATERLATER: handling mounted DFS drives in the future will require slightly different logic which isn't available today. This is required because directories can point at different servers which have differing capabilities. */ if(TempRootPath[0] == '\\' && TempRootPath[1] == '\\') { DWORD slash = 0; for(i = 2 ; i < cchTempRootPath ; i++) { if(TempRootPath[i] == '\\') { slash++; if(slash == 2) { i++; TempRootPath[i] = '\0'; cchTempRootPath = i; break; } } } /* if there was only one slash found, just tack another onto the end */ if(slash == 1 && TempRootPath[cchTempRootPath] != '\\') { TempRootPath[cchTempRootPath] = TempRootPath[0]; /* '\\' */ TempRootPath[cchTempRootPath+1] = '\0'; cchTempRootPath++; } } else { if(TempRootPath[1] == ':') { /* drive letter specified, truncate to root */ TempRootPath[2] = '\\'; TempRootPath[3] = '\0'; cchTempRootPath = 3; } else { /* must be file on current drive */ TempRootPath[0] = '\0'; cchTempRootPath = 0; } } } /* if path != NULL */ /* grab lock protecting cached entry */ EnterCriticalSection( &VolumeCapsLock ); if(!g_VolumeCaps.bValid || lstrcmpiA(g_VolumeCaps.RootPath, TempRootPath) != 0) { /* no match found, build up new entry */ DWORD dwFileSystemFlags; DWORD dwRemotePrivileges = 0; BOOL bRemote = FALSE; /* release lock during expensive operations */ LeaveCriticalSection( &VolumeCapsLock ); bSuccess = GetVolumeInformationA( (TempRootPath[0] == '\0') ? NULL : TempRootPath, NULL, 0, NULL, NULL, &dwFileSystemFlags, NULL, 0); /* only if target volume supports Acls, and we were told to use privileges do we need to go out and test for the remote case */ if(bSuccess && (dwFileSystemFlags & FS_PERSISTENT_ACLS) && VolumeCaps->bUsePrivileges) { if(GetDriveTypeA( (TempRootPath[0] == '\0') ? NULL : TempRootPath ) == DRIVE_REMOTE) { bRemote = TRUE; /* make a determination about our remote capabilities */ GetRemotePrivilegesSet(name, &dwRemotePrivileges); } } /* always take the lock again, since we release it below */ EnterCriticalSection( &VolumeCapsLock ); /* replace the existing data if successful */ if(bSuccess) { lstrcpynA(g_VolumeCaps.RootPath, TempRootPath, cchTempRootPath+1); g_VolumeCaps.dwFileSystemFlags = dwFileSystemFlags; g_VolumeCaps.bRemote = bRemote; g_VolumeCaps.dwRemotePrivileges = dwRemotePrivileges; g_VolumeCaps.bValid = TRUE; } } if(bSuccess) { /* copy input elements */ g_VolumeCaps.bUsePrivileges = VolumeCaps->bUsePrivileges; g_VolumeCaps.dwFileAttributes = VolumeCaps->dwFileAttributes; /* give caller results */ memcpy(VolumeCaps, &g_VolumeCaps, sizeof(VOLUMECAPS)); } else { g_VolumeCaps.bValid = FALSE; } LeaveCriticalSection( &VolumeCapsLock ); /* release lock */ return bSuccess; } BOOL SecuritySet(char *resource, PVOLUMECAPS VolumeCaps, uch *securitydata) { HANDLE hFile; DWORD dwDesiredAccess = 0; DWORD dwFlags = 0; PSECURITY_DESCRIPTOR sd = (PSECURITY_DESCRIPTOR)securitydata; SECURITY_DESCRIPTOR_CONTROL sdc; SECURITY_INFORMATION RequestedInfo = 0; DWORD dwRev; BOOL bRestorePrivilege = FALSE; BOOL bSaclPrivilege = FALSE; BOOL bSuccess; if(!bInitialized) if(!Initialize()) return FALSE; /* defer directory processing */ if(VolumeCaps->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { /* opening a directory requires FILE_FLAG_BACKUP_SEMANTICS */ dwFlags |= FILE_FLAG_BACKUP_SEMANTICS; } /* evaluate the input security descriptor and act accordingly */ if(!IsValidSecurityDescriptor(sd)) return FALSE; if(!GetSecurityDescriptorControl(sd, &sdc, &dwRev)) return FALSE; /* setup privilege usage based on if told we can use privileges, and if so, what privileges we have */ if(VolumeCaps->bUsePrivileges) { if(VolumeCaps->bRemote) { /* use remotely determined privileges */ if(VolumeCaps->dwRemotePrivileges & OVERRIDE_RESTORE) bRestorePrivilege = TRUE; if(VolumeCaps->dwRemotePrivileges & OVERRIDE_SACL) bSaclPrivilege = TRUE; } else { /* use local privileges */ bRestorePrivilege = g_bRestorePrivilege; bSaclPrivilege = g_bSaclPrivilege; } } /* if a Dacl is present write Dacl out */ /* if we have SeRestorePrivilege, write owner and group info out */ if(sdc & SE_DACL_PRESENT) { dwDesiredAccess |= WRITE_DAC; RequestedInfo |= DACL_SECURITY_INFORMATION; if(bRestorePrivilege) { dwDesiredAccess |= WRITE_OWNER; RequestedInfo |= (OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION); } } /* if a Sacl is present and we have either SeRestorePrivilege or SeSystemSecurityPrivilege try to write Sacl out */ if((sdc & SE_SACL_PRESENT) && (bRestorePrivilege || bSaclPrivilege)) { dwDesiredAccess |= ACCESS_SYSTEM_SECURITY; RequestedInfo |= SACL_SECURITY_INFORMATION; } if(RequestedInfo == 0) /* nothing to do */ return FALSE; if(bRestorePrivilege) dwFlags |= FILE_FLAG_BACKUP_SEMANTICS; hFile = CreateFileA( resource, dwDesiredAccess, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,/* max sharing */ NULL, OPEN_EXISTING, dwFlags, NULL ); if(hFile == INVALID_HANDLE_VALUE) return FALSE; bSuccess = SetKernelObjectSecurity(hFile, RequestedInfo, sd); CloseHandle(hFile); return bSuccess; } static VOID InitLocalPrivileges(VOID) { HANDLE hToken; TOKEN_PRIVILEGES tp; /* try to enable some interesting privileges that give us the ability to get some security information that we normally cannot. note that enabling privileges is only relevant on the local machine; when accessing files that are on a remote machine, any privileges that are present on the remote machine get enabled by default. */ if(!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hToken)) return; tp.PrivilegeCount = 1; tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if(LookupPrivilegeValue(NULL, SE_RESTORE_NAME, &tp.Privileges[0].Luid)) { /* try to enable SeRestorePrivilege; if this succeeds, we can write all aspects of the security descriptor */ if(AdjustTokenPrivileges(hToken, FALSE, &tp, 0, NULL, NULL) && GetLastError() == ERROR_SUCCESS) g_bRestorePrivilege = TRUE; } /* try to enable SeSystemSecurityPrivilege, if SeRestorePrivilege not present; if this succeeds, we can write the Sacl */ if(!g_bRestorePrivilege && LookupPrivilegeValue(NULL, SE_SECURITY_NAME, &tp.Privileges[0].Luid)) { if(AdjustTokenPrivileges(hToken, FALSE, &tp, 0, NULL, NULL) && GetLastError() == ERROR_SUCCESS) g_bSaclPrivilege = TRUE; } CloseHandle(hToken); } #endif /* NTSD_EAS */ Carla-2.4.2/data/windows/unzipfx-carla-control/win32/nt.h000066400000000000000000000026141420416754300231520ustar00rootroot00000000000000/* Copyright (c) 1990-2005 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2000-Apr-09 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /* nt.h: central header for EF_NTSD "SD" extra field */ #ifndef _NT_H #define _NT_H #define NTSD_BUFFERSIZE (1024) /* threshold to cause malloc() */ #define OVERRIDE_BACKUP 1 /* we have SeBackupPrivilege on remote */ #define OVERRIDE_RESTORE 2 /* we have SeRestorePrivilege on remote */ #define OVERRIDE_SACL 4 /* we have SeSystemSecurityPrivilege on remote */ typedef struct { BOOL bValid; /* are our contents valid? */ BOOL bUsePrivileges; /* use privilege overrides? */ DWORD dwFileSystemFlags; /* describes target file system */ BOOL bRemote; /* is volume remote? */ DWORD dwRemotePrivileges; /* relevant only on remote volumes */ DWORD dwFileAttributes; char RootPath[MAX_PATH+1]; /* path to network / filesystem */ } VOLUMECAPS, *PVOLUMECAPS, *LPVOLUMECAPS; BOOL SecuritySet(char *resource, PVOLUMECAPS VolumeCaps, uch *securitydata); BOOL GetVolumeCaps(char *rootpath, char *name, PVOLUMECAPS VolumeCaps); BOOL ValidateSecurity(uch *securitydata); #endif /* _NT_H */ Carla-2.4.2/data/windows/unzipfx-carla-control/win32/w32cfg.h000066400000000000000000000443251420416754300236310ustar00rootroot00000000000000/* Copyright (c) 1990-2009 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2009-Jan-02 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- Win32 specific configuration section: ---------------------------------------------------------------------------*/ #ifndef __w32cfg_h #define __w32cfg_h #ifdef __MINGW32__ # define USE_STRM_INPUT #endif #ifdef __CYGWIN__ /* We treat the file system underneath the Cygwin Unix emulator environment * as "native VFAT/NTFS" and use the WIN32 API for its special attributes... */ # ifdef UNIX # undef UNIX # endif #endif #if (defined(_MSC_VER) && !defined(MSC)) # define MSC #endif /* enable multibyte character set support by default */ #if (!defined(_MBCS) && !defined(NO_MBCS)) # define _MBCS #endif #if (defined(_MBCS) && defined(NO_MBCS)) # undef _MBCS #endif #if (defined(__CYGWIN__) && defined(_MBCS)) # undef _MBCS /* Cygwin RTL lacks support for __mb_cur_max */ #endif #if (defined(__DJGPP__) && !defined(__EMX__) && defined(_MBCS)) # undef _MBCS /* __mb_cur_max missing for RSXNTdj 1.6 beta */ #endif #include /* off_t, time_t, dev_t, ... */ #include #include /* read(), open(), etc. */ #include #if ((defined(__RSXNT__) || defined(__EMX__)) && !defined(tzset)) # define tzset _tzset #endif #if (defined(__LCC__) && !defined(tzset)) # define tzset _tzset #endif #ifdef W32_USE_IZ_TIMEZONE # ifdef __BORLANDC__ # define tzname tzname # define IZTZ_DEFINESTDGLOBALS # endif # ifdef __WATCOMC__ # define IZTZ_DEFINESTDGLOBALS # endif # ifndef tzset # define tzset _tzset # endif # ifndef timezone # define timezone _timezone # endif # ifndef daylight # define daylight _daylight # endif # ifndef tzname # define tzname _tzname # endif # if (!defined(NEED__ISINDST) && !defined(__BORLANDC__)) # define NEED__ISINDST # endif # ifdef IZTZ_GETLOCALETZINFO # undef IZTZ_GETLOCALETZINFO # endif # define IZTZ_GETLOCALETZINFO GetPlatformLocalTimezone #endif /* W32_USE_IZ_TIMEZONE */ #include #if (!defined(__RSXNT__) && !defined(__CYGWIN__)) # include /* mkdir() */ #endif #include #ifdef __CYGWIN__ # include extern int setmode(int, int); /* this is missing in */ #endif #if (defined(MSC) || defined(__WATCOMC__) || defined(__MINGW32__)) # include #else # include #endif #define GOT_UTIMBUF #ifdef _MBCS # if (!defined(__EMX__) && !defined(__DJGPP__) && !defined(__CYGWIN__)) # if (!defined(__MINGW32__) || defined(__MSVCRT__)) # include # include /* for MSC (and compatible compilers), use routines supplied by RTL */ # define CLEN(ptr) _mbclen((const uch *)(ptr)) # define PREINCSTR(ptr) (ptr = (char *)_mbsinc((const uch *)(ptr))) # define MBSCHR(str, c) (char *)_mbschr((const uch *)(str), (c)) # define MBSRCHR(str, c) (char *)_mbsrchr((const uch *)(str), (c)) # endif # endif # if (defined(__MINGW32__) && !defined(MB_CUR_MAX)) # ifdef __MSVCRT__ extern int *__p___mb_cur_max(void); # define MB_CUR_MAX (*__p___mb_cur_max()) # else extern int *_imp____mb_cur_max_dll; # define MB_CUR_MAX (*_imp____mb_cur_max_dll) # endif # endif # if (defined(__LCC__) && !defined(MB_CUR_MAX)) extern int *_imp____mb_cur_max; # define MB_CUR_MAX (*_imp____mb_cur_max) # endif # if (defined(__DJGPP__) && !defined(__EMX__) && !defined(MB_CUR_MAX)) extern int *_imp____mb_cur_max; # define MB_CUR_MAX (*_imp____mb_cur_max) # endif #endif /* for UnZip, the "basic" part of the win32 api is sufficient */ #ifndef WIN32_LEAN_AND_MEAN # define WIN32_LEAN_AND_MEAN #endif #if defined(__FILEIO_C) # ifndef __CYGWIN__ # include # endif # include # ifdef __RSXNT__ # include "../win32/rsxntwin.h" # endif # ifndef TIME_ZONE_ID_INVALID # define TIME_ZONE_ID_INVALID (DWORD)0xFFFFFFFFL # endif #endif #if (defined(__ENVARGS_C) || defined(__EXTRACT_C) || defined(__UNZIP_C) || \ defined(ZCRYPT_INTERNAL)) # include # ifdef __RSXNT__ # include "../win32/rsxntwin.h" # endif # ifndef TIME_ZONE_ID_INVALID # define TIME_ZONE_ID_INVALID (DWORD)0xFFFFFFFFL # endif #endif #ifndef Cdecl # define Cdecl __cdecl #endif /* the following definitions are considered as "obsolete" by Microsoft and * might be missing in some versions of */ #ifndef AnsiToOem # define AnsiToOem CharToOemA #endif #ifndef OemToAnsi # define OemToAnsi OemToCharA #endif #define DIR_END '\\' /* OS uses '\\' as directory separator */ #define DIR_END2 '/' /* also check for '/' (RTL may convert) */ #ifdef DATE_FORMAT # undef DATE_FORMAT #endif #define DATE_FORMAT dateformat() #ifdef DATE_SEPCHAR # undef DATE_SEPCHAR #endif #define DATE_SEPCHAR dateseparator() #define lenEOL 2 #define PutNativeEOL {*q++ = native(CR); *q++ = native(LF);} #if (defined(__RSXNT__) && !defined(HAVE_MKTIME)) # define HAVE_MKTIME /* use mktime() in time conversion routines */ #endif #if (defined(MSC) && !defined(HAVE_MKTIME)) # define HAVE_MKTIME /* use mktime() in time conversion routines */ #endif #if (defined(__CYGWIN__) && defined(HAVE_MKTIME)) # undef HAVE_MKTIME /* Cygnus' mktime() implementation is buggy */ #endif #if (defined(W32_USE_IZ_TIMEZONE) && !defined(HAVE_MKTIME)) # define HAVE_MKTIME /* use mktime() in time conversion routines */ #endif #if (!defined(NO_EF_UT_TIME) && !defined(USE_EF_UT_TIME)) # define USE_EF_UT_TIME #endif #if (!defined(NO_DIR_ATTRIB) && !defined(SET_DIR_ATTRIB)) # define SET_DIR_ATTRIB #endif #if (!defined(NOTIMESTAMP) && !defined(TIMESTAMP)) # define TIMESTAMP #endif #if (!defined(NO_NTSD_EAS) && !defined(NTSD_EAS)) # define NTSD_EAS /* enable NTSD support unless explicitly suppressed */ #endif #if (defined(NTSD_EAS) && !defined(RESTORE_ACL)) # define RESTORE_ACL /* "restore ACLs" only needed when NTSD_EAS active */ #endif #if (!defined(NO_UNICODE_SUPPORT) && !defined(UNICODE_SUPPORT)) # define UNICODE_SUPPORT /* enable UTF-8 filename support by default */ #endif #if (defined(UNICODE_SUPPORT) && !defined(UNICODE_WCHAR)) # define UNICODE_WCHAR /* wchar_t is UTF-16 encoded on WIN32 */ #endif #ifdef UTF8_MAYBE_NATIVE # undef UTF8_MAYBE_NATIVE /* UTF-8 cannot be system charset on WIN32 */ #endif /* The following compiler systems provide or use a runtime library with a * locale-aware isprint() implementation. For these systems, the "enhanced" * unprintable charcode detection in fnfilter() gets enabled. */ #if (!defined(HAVE_WORKING_ISPRINT) && !defined(NO_WORKING_ISPRINT)) # if defined(MSC) || defined(__BORLANDC__) # define HAVE_WORKING_ISPRINT # endif # if defined(__MINGW32__) && defined(__MSVCRT__) # define HAVE_WORKING_ISPRINT # endif #endif /* WIN32 runs solely on little-endian processors; enable support * for the 32-bit optimized CRC-32 C code by default. */ #ifdef IZ_CRC_BE_OPTIMIZ # undef IZ_CRC_BE_OPTIMIZ #endif #if !defined(IZ_CRC_LE_OPTIMIZ) && !defined(NO_CRC_OPTIMIZ) # define IZ_CRC_LE_OPTIMIZ #endif /* handlers for OEM <--> ANSI string conversions */ #ifdef __RSXNT__ /* RSXNT uses OEM coded strings in functions supplied by C RTL */ # ifdef CRTL_CP_IS_ISO # undef CRTL_CP_IS_ISO # endif # ifndef CRTL_CP_IS_OEM # define CRTL_CP_IS_OEM # endif #else /* "real" native WIN32 compilers use ANSI coded strings in C RTL calls */ # ifndef CRTL_CP_IS_ISO # define CRTL_CP_IS_ISO # endif # ifdef CRTL_CP_IS_OEM # undef CRTL_CP_IS_OEM # endif #endif #ifdef CRTL_CP_IS_ISO /* C RTL's file system support assumes ANSI coded strings */ # define ISO_TO_INTERN(src, dst) {if ((src) != (dst)) strcpy((dst), (src));} # define OEM_TO_INTERN(src, dst) OemToAnsi(src, dst) # define INTERN_TO_ISO(src, dst) {if ((src) != (dst)) strcpy((dst), (src));} # define INTERN_TO_OEM(src, dst) AnsiToOem(src, dst) #endif /* CRTL_CP_IS_ISO */ #ifdef CRTL_CP_IS_OEM /* C RTL's file system support assumes OEM coded strings */ # define ISO_TO_INTERN(src, dst) AnsiToOem(src, dst) # define OEM_TO_INTERN(src, dst) {if ((src) != (dst)) strcpy((dst), (src));} # define INTERN_TO_ISO(src, dst) OemToAnsi(src, dst) # define INTERN_TO_OEM(src, dst) {if ((src) != (dst)) strcpy((dst), (src));} #endif /* CRTL_CP_IS_OEM */ #define _OEM_INTERN(str1) OEM_TO_INTERN(str1, str1) #define _ISO_INTERN(str1) ISO_TO_INTERN(str1, str1) #ifndef WINDLL /* Despite best intentions, for the command-line version UzpPassword() * could return either character set, depending on whether running under * Win95 (DOS-session) or WinNT (native WinNT command interpreter)! */ # define STR_TO_CP2(dst, src) (AnsiToOem(src, dst), dst) # define STR_TO_CP3(dst, src) (OemToAnsi(src, dst), dst) #else /* The WINDLL front end is known to supply ISO/ANSI-coded passwords! */ # define STR_TO_CP2(dst, src) (AnsiToOem(src, dst), dst) #endif /* dummy defines to disable these functions, they are not needed */ #define STR_TO_OEM #define STR_TO_ISO /* Static variables that we have to add to Uz_Globs: */ #define SYSTEM_SPECIFIC_GLOBALS \ int created_dir, renamed_fullpath, fnlen;\ unsigned nLabelDrive;\ char lastRootPath[4];\ int lastVolOldFAT, lastVolLocTim;\ char *rootpath, *buildpathHPFS, *buildpathFAT, *endHPFS, *endFAT;\ ZCONST char *wildname;\ char *dirname, matchname[FILNAMSIZ];\ int rootlen, have_dirname, dirnamelen, notfirstcall;\ zvoid *wild_dir; /* created_dir, renamed_fullpath, fnlen, and nLabelDrive are used by */ /* both mapname() and checkdir(). */ /* lastRootPath, lastVolOldFAT and lastVolLocTim are used by */ /* IsVolumeOldFAT() and NTQueryVolInfo(). */ /* rootlen, rootpath, buildpathHPFS, buildpathFAT, endHPFS, and endFAT */ /* are used by checkdir(). */ /* wild_dir, dirname, wildname, matchname[], dirnamelen, have_dirname, */ /* and notfirstcall are used by do_wild(). */ /* This replacement for C-RTL-supplied getch() (or similar) functionality * avoids leaving unabsorbed LFs in the keyboard buffer under Windows95, * and supports the +[0] feature. */ int getch_win32 OF((void)); /* Up to now, all versions of Microsoft C runtime libraries lack the support * for customized (non-US) switching rules between daylight saving time and * standard time in the TZ environment variable string. * But non-US timezone rules are correctly supported when timezone information * is read from the OS system settings in the Win32 registry. * The following work-around deletes any TZ environment setting from * the process environment. This results in a fallback of the RTL time * handling code to the (correctly interpretable) OS system settings, read * from the registry. */ #ifdef USE_EF_UT_TIME # if (defined(__WATCOMC__) || defined(__CYGWIN__) || \ defined(W32_USE_IZ_TIMEZONE)) # define iz_w32_prepareTZenv() # else # define iz_w32_prepareTZenv() putenv("TZ=") # endif #endif /* This patch of stat() is useful for at least two compilers. It is */ /* difficult to take a stat() of a root directory under Windows95, so */ /* zstat_win32() detects that case and fills in suitable values. */ #ifndef __RSXNT__ # ifndef W32_STATROOT_FIX # define W32_STATROOT_FIX # endif #endif /* !__RSXNT__ */ #define W32_STAT_BANDAID #if defined(REENTRANT) # define __W32STAT_GLOBALS__ Uz_Globs *pG, # define __W32STAT_G__ pG, #else # define __W32STAT_GLOBALS__ # define __W32STAT_G__ #endif #ifdef SSTAT # undef SSTAT #endif #ifdef WILD_STAT_BUG # define SSTAT(path, pbuf) (iswild(path) || zstat_win32(__W32STAT_G__ path, pbuf)) #else # define SSTAT(path, pbuf) zstat_win32(__W32STAT_G__ path, pbuf) #endif #ifdef __WATCOMC__ # ifdef __386__ # ifndef WATCOMC_386 # define WATCOMC_386 # endif # define __32BIT__ # undef far # define far # undef near # define near # undef Cdecl # define Cdecl /* gaah -- Watcom's docs claim that _get_osfhandle exists, but it doesn't. */ # define _get_osfhandle _os_handle /* Get asm routines to link properly without using "__cdecl": */ # ifndef USE_ZLIB # pragma aux crc32 "_*" parm caller [] value [eax] modify [eax] # pragma aux get_crc_table "_*" parm caller [] value [eax] \ modify [eax ecx edx] # endif /* !USE_ZLIB */ # endif /* __386__ */ #endif /* __WATCOMC__ */ #define SCREENWIDTH 80 #define SCREENSIZE(scrrows, scrcols) screensize(scrrows, scrcols) int screensize(int *tt_rows, int *tt_cols); /* on the DOS or NT console screen, line-wraps are always enabled */ #define SCREENLWRAP 1 #define TABSIZE 8 /* 64-bit-Integers & Large File Support * (pasted here from Zip 3b, osdep.h - Myles Bennett 7-jun-2004) * (updated from Zip 3.0d - Ed Gordon 6-oct-2004) * * If this is set it is assumed that the port * supports 64-bit file calls. The types are * defined here. Any local implementations are * in w32i64.c and the prototypes for the calls are * in unzip.h. Note that a port must support * these calls fully or should not set * LARGE_FILE_SUPPORT. */ /* Automatically set ZIP64_SUPPORT if supported */ #ifndef NO_ZIP64_SUPPORT # ifndef ZIP64_SUPPORT # if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__) # define ZIP64_SUPPORT # elif defined(__LCC__) /* LCC links against crtdll.dll -> no support of 64-bit offsets :( */ # elif (defined(__WATCOMC__) && (__WATCOMC__ >= 1100)) # define ZIP64_SUPPORT # elif (defined(__BORLANDC__) && (__BORLANDC__ >= 0x0520)) /* Borland C RTL lacks any support to get/set 64-bit file pointer :( */ # endif # endif #endif #ifdef ZIP64_SUPPORT /* base type for file offsets and file sizes */ # if (defined(__GNUC__) || defined(ULONG_LONG_MAX)) typedef long long zoff_t; # else /* all other compilers use this as intrinsic 64-bit type */ typedef __int64 zoff_t; # endif # define ZOFF_T_DEFINED /* user-defined types and format strings for 64-bit numbers and * file pointer functions (these depend on the rtl library and library * headers used; they are NOT compiler-specific) */ # if defined(_MSC_VER) || defined(__MINGW32__) || defined(__LCC__) /* MS C and VC, MinGW32, lcc32 */ /* these systems use the Microsoft C RTL */ /* 64-bit stat struct */ typedef struct _stati64 z_stat; # define Z_STAT_DEFINED # ifdef __LCC__ /* The LCC headers lack these declarations of MSC rtl functions in sys/stat.h. */ struct _stati64 { unsigned int st_dev; unsigned short st_ino; unsigned short st_mode; short st_nlink; short st_uid; short st_gid; unsigned int st_rdev; __int64 st_size; time_t st_atime; time_t st_mtime; time_t st_ctime; }; int _stati64(const char *, struct _stati64 *); int _fstati64(int, struct _stati64 *); __int64 _lseeki64(int, __int64, int); # endif /* __LCC__ */ /* printf format size prefix for zoff_t values */ # define FZOFFT_FMT "I64" # define FZOFFT_HEX_WID_VALUE "16" # define SHORTHDRSTATS "%9I64u %02u%c%02u%c%02u %02u:%02u %c" # define SHORTFILETRAILER " -------- -------\n%9I64u %9lu file%s\n" # elif (defined(__BORLANDC__) && (__BORLANDC__ >= 0x0520)) /* Borland C 5.2 or newer */ /* 64-bit stat struct */ typedef struct stati64 z_stat; # define Z_STAT_DEFINED /* Borland C does not provide a 64-bit-capable _lseeki64(), so we need to use the stdio.h stream functions instead. */ # ifndef USE_STRM_INPUT # define USE_STRM_INPUT # endif /* printf format size prefix for zoff_t values */ # define FZOFFT_FMT "L" # define FZOFFT_HEX_WID_VALUE "16" # define SHORTHDRSTATS "%9Lu %02u%c%02u%c%02u %02u:%02u %c" # define SHORTFILETRAILER " -------- -------\n%9Lu %9lu file%s\n" # elif (defined(__WATCOMC__) && (__WATCOMC__ >= 1100)) /* WATCOM C */ /* 64-bit stat struct */ typedef struct _stati64 z_stat; # define Z_STAT_DEFINED /* printf format size prefix for zoff_t values */ # define FZOFFT_FMT "ll" # define FZOFFT_HEX_WID_VALUE "16" # define SHORTHDRSTATS "%9llu %02u%c%02u%c%02u %02u:%02u %c" # define SHORTFILETRAILER " -------- -------\n%9llu %9lu file%s\n" # elif (defined(__IBMC__) && (__IBMC__ >= 350)) /* IBM C */ /* 64-bit stat struct */ /* printf format size prefix for zoff_t values */ # define FZOFFT_FMT "I64" # define FZOFFT_HEX_WID_VALUE "16" # define SHORTHDRSTATS "%9I64u %02u%c%02u%c%02u %02u:%02u %c" # define SHORTFILETRAILER " -------- -------\n%9I64u %9lu file%s\n" # endif #endif /* If port has LARGE_FILE_SUPPORT then define here to make automatic unless overridden */ #ifndef LARGE_FILE_SUPPORT # ifndef NO_LARGE_FILE_SUPPORT # if defined(_MSC_VER) || defined(__MINGW32__) # define LARGE_FILE_SUPPORT # elif defined(__LCC__) /* LCC links against crtdll.dll -> no support of 64-bit offsets :( */ # elif defined(__CYGWIN__) # define LARGE_FILE_SUPPORT # elif (defined(__WATCOMC__) && (__WATCOMC__ >= 1100)) # define LARGE_FILE_SUPPORT # elif (defined(__BORLANDC__) && (__BORLANDC__ >= 0x0520)) /* Borland C RTL lacks any support to get/set 64-bit file pointer :( */ # endif # endif #endif #ifndef LARGE_FILE_SUPPORT /* No Large File Support */ /* base type for file offsets and file sizes */ typedef long zoff_t; # define ZOFF_T_DEFINED /* stat struct */ typedef struct stat z_stat; # define Z_STAT_DEFINED # define FZOFFT_FMT "l" # define FZOFFT_HEX_WID_VALUE "8" # define SHORTHDRSTATS "%9lu %02u%c%02u%c%02u %02u:%02u %c" # define SHORTFILETRAILER " -------- -------\n%9lu %9lu file%s\n" #endif /* LARGE_FILE_SUPPORT */ #endif /* !__w32cfg_h */ Carla-2.4.2/data/windows/unzipfx-carla-control/win32/win32.c000066400000000000000000003275571420416754300235060ustar00rootroot00000000000000/* Copyright (c) 1990-2008 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2007-Mar-04 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- win32.c 32-bit Windows-specific (NT/9x) routines for use with Info-ZIP's UnZip 5.3 and later. Contains: GetLoadPath() Opendir() Readdir() Closedir() SetSD() set security descriptor on file FindSDExtraField() extract SD e.f. block from extra field IsWinNT() indicate type of WIN32 platform test_NTSD() test integrity of NT security data utime2NtfsFileTime() utime2VFatFileTime() FStampIsLocTime() NtfsFileTime2utime() VFatFileTime2utime() getNTfiletime() SetFileSize() close_outfile() defer_dir_attribs() set_direc_attribs() stamp_file() isfloppy() NTQueryVolInfo() IsVolumeOldFAT() do_wild() mapattr() mapname() maskDOSdevice() map2fat() checkdir() dateformat() dateseparator() version() screensize() zstat_win32() conv_to_rule() GetPlatformLocalTimezone() getch_win32() ---------------------------------------------------------------------------*/ #define UNZIP_INTERNAL #include #include "../unzip.h" #ifdef __RSXNT__ # include "../win32/rsxntwin.h" #endif #include "../win32/nt.h" #ifndef FUNZIP /* most of this file is not used with fUnZip */ /* some non-MS runtime headers (e.g. lcc) may miss this definition */ #ifndef FILE_WRITE_ATTRIBUTES # define FILE_WRITE_ATTRIBUTES 0x0100 #endif #if (defined(__EMX__) || defined(__CYGWIN__)) # define MKDIR(path,mode) mkdir(path,mode) #else # define MKDIR(path,mode) mkdir(path) #endif #ifdef HAVE_WORKING_DIRENT_H # undef HAVE_WORKING_DIRENT_H #endif /* The emxrtl dirent support of (__GO32__ || __EMX__) converts to lowercase! */ #if defined(__CYGWIN__) # define HAVE_WORKING_DIRENT_H #endif #ifndef SFX # ifdef HAVE_WORKING_DIRENT_H # include /* use readdir() */ # define zdirent dirent # define zDIR DIR # define Opendir opendir # define Readdir readdir # define Closedir closedir # else /* !HAVE_WORKING_DIRENT_H */ typedef struct zdirent { char reserved [21]; char ff_attrib; short ff_ftime; short ff_fdate; long size; char d_name[MAX_PATH]; int d_first; HANDLE d_hFindFile; } zDIR; static zDIR *Opendir (const char *n); static struct zdirent *Readdir (zDIR *d); static void Closedir (zDIR *d); # endif /* ?HAVE_WORKING_DIRENT_H */ #endif /* !SFX */ #ifdef SET_DIR_ATTRIB typedef struct NTdirattr { /* struct for holding unix style directory */ struct NTdirattr *next; /* info until can be sorted and set at end */ char *fn; /* filename of directory */ FILETIME Modft; /* File time type defined in NT, `last modified' time */ FILETIME Accft; /* NT file time type, `last access' time */ FILETIME Creft; /* NT file time type, `file creation' time */ int gotTime; unsigned perms; /* same as min_info.file_attr */ #ifdef NTSD_EAS unsigned SDlen; /* length of SD data in buf */ #endif char buf[1]; /* buffer stub for directory SD and name */ } NTdirattr; #define NtAtt(d) ((NTdirattr *)d) /* typecast shortcut */ #endif /* SET_DIR_ATTRIB */ /* Function prototypes */ #ifdef NTSD_EAS static int SetSD(__GPRO__ char *path, unsigned fperms, uch *eb_ptr, unsigned eb_len); static int FindSDExtraField(__GPRO__ uch *ef_ptr, unsigned ef_len, uch **p_ebSD_ptr, unsigned *p_ebSD_len); #endif #ifndef NO_W32TIMES_IZFIX static void utime2NtfsFileTime(time_t ut, FILETIME *pft); #endif static void utime2VFatFileTime(time_t ut, FILETIME *pft, int clipDosMin); #if (defined(W32_STAT_BANDAID) && !defined(NO_W32TIMES_IZFIX)) static int NtfsFileTime2utime(const FILETIME *pft, time_t *ut); #endif #ifdef W32_STAT_BANDAID static int VFatFileTime2utime(const FILETIME *pft, time_t *ut); #endif static int FStampIsLocTime(__GPRO__ const char *path); static int getNTfiletime (__GPRO__ FILETIME *pModFT, FILETIME *pAccFT, FILETIME *pCreFT); static int isfloppy (int nDrive); static int NTQueryVolInfo (__GPRO__ const char *name); static int IsVolumeOldFAT (__GPRO__ const char *name); static void maskDOSdevice (__GPRO__ char *pathcomp); static void map2fat (char *pathcomp, char **pEndFAT); #if (defined(__MINGW32__) && !defined(USE_MINGW_GLOBBING)) int _CRT_glob = 0; /* suppress command line globbing by C RTL */ #endif #ifdef ACORN_FTYPE_NFS /* Acorn bits for NFS filetyping */ typedef struct { uch ID[2]; uch size[2]; uch ID_2[4]; uch loadaddr[4]; uch execaddr[4]; uch attr[4]; } RO_extra_block; #endif /* ACORN_FTYPE_NFS */ /* static int created_dir; */ /* used by mapname(), checkdir() */ /* static int renamed_fullpath; */ /* ditto */ /* static int fnlen; */ /* ditto */ /* static unsigned nLabelDrive; */ /* ditto */ extern char Far TruncNTSD[]; /* in extract.c */ #ifdef SFX /**************************/ /* Function GetLoadPath() */ /**************************/ char *GetLoadPath(__GPRO) { #ifdef MSC extern char *_pgmptr; return _pgmptr; #else /* use generic API call */ GetModuleFileName(NULL, G.filename, FILNAMSIZ); _ISO_INTERN(G.filename); /* translate to codepage of C rtl's stdio */ return G.filename; #endif } /* end function GetLoadPath() */ #else /* !SFX */ #ifndef HAVE_WORKING_DIRENT_H /**********************/ /* Borrowed from ZIP 2.0 sources */ /* Function Opendir() */ /* Difference: no special handling for */ /**********************/ /* hidden or system files. */ static zDIR *Opendir(n) const char *n; /* directory to open */ { zDIR *d; /* malloc'd return value */ char *p; /* malloc'd temporary string */ WIN32_FIND_DATAA fd; extent len = strlen(n); /* Start searching for files in directory n */ if ((d = (zDIR *)malloc(sizeof(zDIR))) == NULL || (p = malloc(strlen(n) + 5)) == NULL) { if (d != (zDIR *)NULL) free((void *)d); return (zDIR *)NULL; } INTERN_TO_ISO(n, p); if (len > 0) { if (p[len-1] == ':') p[len++] = '.'; /* x: => x:. */ else if (p[len-1] == '/' || p[len-1] == '\\') --len; /* foo/ => foo */ } strcpy(p+len, "/*"); if (INVALID_HANDLE_VALUE == (d->d_hFindFile = FindFirstFileA(p, &fd))) { free((zvoid *)d); free((zvoid *)p); return NULL; } strcpy(d->d_name, fd.cFileName); free((zvoid *)p); d->d_first = 1; return d; } /* end of function Opendir() */ /**********************/ /* Borrowed from ZIP 2.0 sources */ /* Function Readdir() */ /* Difference: no special handling for */ /**********************/ /* hidden or system files. */ static struct zdirent *Readdir(d) zDIR *d; /* directory stream from which to read */ { /* Return pointer to first or next directory entry, or NULL if end. */ if ( d->d_first ) d->d_first = 0; else { WIN32_FIND_DATAA fd; if ( !FindNextFileA(d->d_hFindFile, &fd) ) return NULL; ISO_TO_INTERN(fd.cFileName, d->d_name); } return (struct zdirent *)d; } /* end of function Readdir() */ /***********************/ /* Function Closedir() */ /* Borrowed from ZIP 2.0 sources */ /***********************/ static void Closedir(d) zDIR *d; /* directory stream to close */ { FindClose(d->d_hFindFile); free(d); } #endif /* !HAVE_WORKING_DIRENT_H */ #endif /* ?SFX */ #ifdef NTSD_EAS /**********************/ /* Function SetSD() */ /* return almost-PK errors */ /**********************/ static int SetSD(__G__ path, fperms, eb_ptr, eb_len) __GDEF char *path; unsigned fperms; uch *eb_ptr; unsigned eb_len; { ulg ntsd_ucSize; VOLUMECAPS VolumeCaps; uch *security_data; int error; ntsd_ucSize = makelong(eb_ptr + (EB_HEADSIZE+EB_UCSIZE_P)); if (ntsd_ucSize > 0L && eb_len <= (EB_NTSD_L_LEN + EB_CMPRHEADLEN)) return IZ_EF_TRUNC; /* no compressed data! */ /* provide useful input */ VolumeCaps.dwFileAttributes = fperms; VolumeCaps.bUsePrivileges = (uO.X_flag > 1); /* check target volume capabilities - just fall through * and try if fail */ if (GetVolumeCaps(G.rootpath, path, &VolumeCaps) && !(VolumeCaps.dwFileSystemFlags & FS_PERSISTENT_ACLS)) return PK_OK; /* allocate storage for uncompressed data */ security_data = (uch *)malloc((extent)ntsd_ucSize); if (security_data == (uch *)NULL) return PK_MEM4; error = memextract(__G__ security_data, ntsd_ucSize, (eb_ptr + (EB_HEADSIZE+EB_NTSD_L_LEN)), (ulg)(eb_len - EB_NTSD_L_LEN)); if (error == PK_OK) { if (SecuritySet(path, &VolumeCaps, security_data)) { error = PK_COOL; if (!uO.tflag && QCOND2) Info(slide, 0, ((char *)slide, " (%ld bytes security)", ntsd_ucSize)); } } free(security_data); return error; } /********************************/ /* scan extra fields for something */ /* Function FindSDExtraField() */ /* we happen to know */ /********************************/ /* Returns TRUE when a valid NTFS SD block is found. * Address and size of the NTSD e.f. block are passed up to the caller. * In case of more than one valid NTSD block in the e.f., the last block * found is passed up. * Returns FALSE and leaves the content of the ebSD_ptr and ebSD_len * parameters untouched when no valid NTFS SD block is found. */ static int FindSDExtraField(__GPRO__ uch *ef_ptr, unsigned ef_len, uch **p_ebSD_ptr, unsigned *p_ebSD_len) { int rc = FALSE; if (!uO.X_flag) return FALSE; /* user said don't process ACLs; for now, no other extra block types are handled here */ while (ef_len >= EB_HEADSIZE) { unsigned eb_id = makeword(EB_ID + ef_ptr); unsigned eb_len = makeword(EB_LEN + ef_ptr); if (eb_len > (ef_len - EB_HEADSIZE)) { /* discovered some extra field inconsistency! */ Trace((stderr, "FindSDExtraField: block length %u > rest ef_size %u\n", eb_len, ef_len - EB_HEADSIZE)); break; } switch (eb_id) { /* process security descriptor extra data if: Caller is WinNT AND Target local/remote drive supports acls AND Target file is not a directory (else we defer processing until later) */ case EF_NTSD: if (!IsWinNT()) break; /* OS not capable of handling NTFS attributes */ if (eb_len < EB_NTSD_L_LEN) break; /* not a valid NTSD extra field */ /* check if we know how to handle this version */ if (*(ef_ptr + (EB_HEADSIZE+EB_NTSD_VERSION)) > (uch)EB_NTSD_MAX_VER) break; *p_ebSD_ptr = ef_ptr; *p_ebSD_len = eb_len; rc = TRUE; break; #ifdef DEBUG case EF_OS2: case EF_AV: case EF_PKVMS: case EF_PKW32: case EF_PKUNIX: case EF_IZVMS: case EF_IZUNIX: case EF_IZUNIX2: case EF_TIME: case EF_MAC3: case EF_JLMAC: case EF_ZIPIT: case EF_VMCMS: case EF_MVS: case EF_ACL: case EF_ATHEOS: case EF_BEOS: case EF_QDOS: case EF_AOSVS: case EF_SPARK: case EF_MD5: case EF_ASIUNIX: break; /* shut up for other known e.f. blocks */ #endif /* DEBUG */ default: Trace((stderr, "FindSDExtraField: unknown extra field block, ID=%u\n", eb_id)); break; } ef_ptr += (eb_len + EB_HEADSIZE); ef_len -= (eb_len + EB_HEADSIZE); } return rc; } #ifndef SFX /**************************/ /* Function test_NTSD() */ /* returns PK_WARN when NTSD data is invalid */ /**************************/ #ifdef __BORLANDC__ /* Turn off warning about not using all parameters for this function only */ #pragma argsused #endif int test_NTSD(__G__ eb, eb_size, eb_ucptr, eb_ucsize) __GDEF uch *eb; unsigned eb_size; uch *eb_ucptr; ulg eb_ucsize; { return (ValidateSecurity(eb_ucptr) ? PK_OK : PK_WARN); } /* end function test_NTSD() */ #endif /* !SFX */ #endif /* NTSD_EAS */ /**********************/ /* Function IsWinNT() */ /**********************/ int IsWinNT(void) /* returns TRUE if real NT, FALSE if Win9x or Win32s */ { static DWORD g_PlatformId = 0xFFFFFFFF; /* saved platform indicator */ if (g_PlatformId == 0xFFFFFFFF) { /* note: GetVersionEx() doesn't exist on WinNT 3.1 */ if (GetVersion() < 0x80000000) g_PlatformId = TRUE; else g_PlatformId = FALSE; } return (int)g_PlatformId; } /* DEBUG_TIME insertion: */ #ifdef DEBUG_TIME static int show_NTFileTime(FILE *hdo, char *TTmsg, int isloc, FILETIME *pft); static int show_NTFileTime(FILE *hdo, char *TTmsg, int isloc, FILETIME *pft) { SYSTEMTIME w32tm; int rval; rval = FileTimeToSystemTime(pft, &w32tm); if (!rval) { fprintf(hdo, "%s\n %08lX,%08lX (%s) -> Conversion failed !!!\n", TTmsg, (ulg)(pft->dwHighDateTime), (ulg)(pft->dwLowDateTime), (isloc ? "local" : "UTC")); } else { fprintf(hdo, "%s\n %08lx,%08lx -> %04u-%02u-%02u, %02u:%02u:%02u %s\n", TTmsg, (ulg)(pft->dwHighDateTime), (ulg)(pft->dwLowDateTime), w32tm.wYear, w32tm.wMonth, w32tm.wDay, w32tm.wHour, w32tm.wMinute, w32tm.wSecond, (isloc ? "local" : "UTC")); } return rval; } #define FTTrace(x) show_NTFileTime x #else #define FTTrace(x) #endif /* DEBUG_TIME */ /* end of DEBUG_TIME insertion */ #ifndef IZ_USE_INT64 # if (defined(__GNUC__) || defined(ULONG_LONG_MAX)) typedef long long LLONG64; typedef unsigned long long ULLNG64; # define IZ_USE_INT64 # elif (defined(__WATCOMC__) && (__WATCOMC__ >= 1100)) typedef __int64 LLONG64; typedef unsigned __int64 ULLNG64; # define IZ_USE_INT64 # elif (defined(_MSC_VER) && (_MSC_VER >= 1100)) typedef __int64 LLONG64; typedef unsigned __int64 ULLNG64; # define IZ_USE_INT64 # elif (defined(__IBMC__) && (__IBMC__ >= 350)) typedef __int64 LLONG64; typedef unsigned __int64 ULLNG64; # define IZ_USE_INT64 # elif defined(HAVE_INT64) typedef __int64 LLONG64; typedef unsigned __int64 ULLNG64; # define IZ_USE_INT64 # endif #endif /* scale factor and offset for conversion time_t -> FILETIME */ #define NT_QUANTA_PER_UNIX 10000000L #define UNIX_TIME_ZERO_HI 0x019DB1DEUL #define UNIX_TIME_ZERO_LO 0xD53E8000UL /* special FILETIME values for bound-checks */ #define UNIX_TIME_UMAX_HI 0x0236485EUL #define UNIX_TIME_UMAX_LO 0xD4A5E980UL #define UNIX_TIME_SMIN_HI 0x0151669EUL #define UNIX_TIME_SMIN_LO 0xD53E8000UL #define UNIX_TIME_SMAX_HI 0x01E9FD1EUL #define UNIX_TIME_SMAX_LO 0xD4A5E980UL #define DOSTIME_MIN_FT_HI 0x01A8E79FUL #define DOSTIME_MIN_FT_LO 0xE1D58000UL /* time_t equivalent of DOSTIME_MINIMUM */ #define UTIME_1980_JAN_01_00_00 315532800L #ifndef NO_W32TIMES_IZFIX /*********************************/ /* Function utime2NtfsFileTime() */ /* convert Unix time_t format into the */ /*********************************/ /* form used by SetFileTime() in NT/9x */ static void utime2NtfsFileTime(time_t ut, FILETIME *pft) { #ifdef IZ_USE_INT64 ULLNG64 NTtime; /* NT_QUANTA_PER_UNIX is small enough so that "ut * NT_QUANTA_PER_UNIX" * cannot overflow in 64-bit signed calculation, regardless whether "ut" * is signed or unsigned. */ NTtime = ((LLONG64)ut * NT_QUANTA_PER_UNIX) + ((ULLNG64)UNIX_TIME_ZERO_LO + ((ULLNG64)UNIX_TIME_ZERO_HI << 32)); pft->dwLowDateTime = (DWORD)NTtime; pft->dwHighDateTime = (DWORD)(NTtime >> 32); #else /* !IZ_USE_INT64 (64-bit integer arithmetics may not be supported) */ unsigned int b1, b2, carry = 0; unsigned long r0, r1, r2, r3; long r4; /* signed, to catch environments with signed time_t */ b1 = ut & 0xFFFF; b2 = (ut >> 16) & 0xFFFF; /* if ut is over 32 bits, too bad */ r1 = b1 * (NT_QUANTA_PER_UNIX & 0xFFFF); r2 = b1 * (NT_QUANTA_PER_UNIX >> 16); r3 = b2 * (NT_QUANTA_PER_UNIX & 0xFFFF); r4 = b2 * (NT_QUANTA_PER_UNIX >> 16); r0 = (r1 + (r2 << 16)) & 0xFFFFFFFFL; if (r0 < r1) carry++; r1 = r0; r0 = (r0 + (r3 << 16)) & 0xFFFFFFFFL; if (r0 < r1) carry++; pft->dwLowDateTime = r0 + UNIX_TIME_ZERO_LO; if (pft->dwLowDateTime < r0) carry++; pft->dwHighDateTime = r4 + (r2 >> 16) + (r3 >> 16) + UNIX_TIME_ZERO_HI + carry; #endif /* ?IZ_USE_INT64 */ } /* end function utime2NtfsFileTime() */ #endif /* !NO_W32TIMES_IZFIX */ /*********************************/ /* Function utime2VFatFileTime() */ /* convert Unix time_t format into the */ /*********************************/ /* form used by SetFileTime() in NT/9x */ static void utime2VFatFileTime(time_t ut, FILETIME *pft, int clipDosMin) { time_t utc = ut; struct tm *ltm; SYSTEMTIME w32tm; FILETIME lft; /* The milliseconds field gets always initialized to 0. */ w32tm.wMilliseconds = 0; #ifdef __BORLANDC__ /* Borland C++ 5.x crashes when trying to reference tm */ if (utc < UTIME_1980_JAN_01_00_00) utc = UTIME_1980_JAN_01_00_00; #endif ltm = localtime(&utc); if (ltm == (struct tm *)NULL) /* localtime() did not accept given utc time value; try to use the UTC value */ ltm = gmtime(&utc); if (ltm == (struct tm *)NULL) { if (ut <= (UTIME_1980_JAN_01_00_00 + 86400)) { /* use DOSTIME_MINIMUM date instead of "early" failure dates */ w32tm.wYear = 1980; w32tm.wMonth = 1; w32tm.wDay = 1; w32tm.wHour = 0; w32tm.wMinute = 0; w32tm.wSecond = 0; } else { /* as a last resort, use the current system time */ GetLocalTime(&w32tm); } } else if (clipDosMin && (ltm->tm_year < 80)) { w32tm.wYear = 1980; w32tm.wMonth = 1; w32tm.wDay = 1; w32tm.wHour = 0; w32tm.wMinute = 0; w32tm.wSecond = 0; } else { w32tm.wYear = ltm->tm_year + 1900; /* year + 1900 -> year */ w32tm.wMonth = ltm->tm_mon + 1; /* 0..11 -> 1..12 */ w32tm.wDay = ltm->tm_mday; /* 1..31 */ w32tm.wHour = ltm->tm_hour; /* 0..23 */ w32tm.wMinute = ltm->tm_min; /* 0..59 */ w32tm.wSecond = ltm->tm_sec; /* 0..61 in ANSI C */ } SystemTimeToFileTime(&w32tm, &lft); LocalFileTimeToFileTime(&lft, pft); } /* end function utime2VFatFileTime() */ /* nonzero if `y' is a leap year, else zero */ #define leap(y) (((y)%4 == 0 && (y)%100 != 0) || (y)%400 == 0) /* number of leap years from 1970 to `y' (not including `y' itself) */ #define nleap(y) (((y)-1969)/4 - ((y)-1901)/100 + ((y)-1601)/400) extern ZCONST ush ydays[]; /* defined in fileio.c */ #if (defined(W32_STAT_BANDAID) && !defined(NO_W32TIMES_IZFIX)) /*********************************/ /* Function NtfsFileTime2utime() */ /*********************************/ static int NtfsFileTime2utime(const FILETIME *pft, time_t *ut) { #ifdef IZ_USE_INT64 ULLNG64 NTtime; NTtime = ((ULLNG64)pft->dwLowDateTime + ((ULLNG64)pft->dwHighDateTime << 32)); #ifndef TIME_T_TYPE_DOUBLE /* underflow and overflow handling */ #ifdef CHECK_UTIME_SIGNED_UNSIGNED if ((time_t)0x80000000L < (time_t)0L) { if (NTtime < ((ULLNG64)UNIX_TIME_SMIN_LO + ((ULLNG64)UNIX_TIME_SMIN_HI << 32))) { *ut = (time_t)LONG_MIN; return FALSE; } if (NTtime > ((ULLNG64)UNIX_TIME_SMAX_LO + ((ULLNG64)UNIX_TIME_SMAX_HI << 32))) { *ut = (time_t)LONG_MAX; return FALSE; } } else #endif /* CHECK_UTIME_SIGNED_UNSIGNED */ { if (NTtime < ((ULLNG64)UNIX_TIME_ZERO_LO + ((ULLNG64)UNIX_TIME_ZERO_HI << 32))) { *ut = (time_t)0; return FALSE; } if (NTtime > ((ULLNG64)UNIX_TIME_UMAX_LO + ((ULLNG64)UNIX_TIME_UMAX_HI << 32))) { *ut = (time_t)ULONG_MAX; return FALSE; } } #endif /* !TIME_T_TYPE_DOUBLE */ NTtime -= ((ULLNG64)UNIX_TIME_ZERO_LO + ((ULLNG64)UNIX_TIME_ZERO_HI << 32)); *ut = (time_t)(NTtime / (unsigned long)NT_QUANTA_PER_UNIX); return TRUE; #else /* !IZ_USE_INT64 (64-bit integer arithmetics may not be supported) */ time_t days; SYSTEMTIME w32tm; #ifndef TIME_T_TYPE_DOUBLE /* underflow and overflow handling */ #ifdef CHECK_UTIME_SIGNED_UNSIGNED if ((time_t)0x80000000L < (time_t)0L) { if ((pft->dwHighDateTime < UNIX_TIME_SMIN_HI) || ((pft->dwHighDateTime == UNIX_TIME_SMIN_HI) && (pft->dwLowDateTime < UNIX_TIME_SMIN_LO))) { *ut = (time_t)LONG_MIN; return FALSE; if ((pft->dwHighDateTime > UNIX_TIME_SMAX_HI) || ((pft->dwHighDateTime == UNIX_TIME_SMAX_HI) && (pft->dwLowDateTime > UNIX_TIME_SMAX_LO))) { *ut = (time_t)LONG_MAX; return FALSE; } } else #endif /* CHECK_UTIME_SIGNED_UNSIGNED */ { if ((pft->dwHighDateTime < UNIX_TIME_ZERO_HI) || ((pft->dwHighDateTime == UNIX_TIME_ZERO_HI) && (pft->dwLowDateTime < UNIX_TIME_ZERO_LO))) { *ut = (time_t)0; return FALSE; } if ((pft->dwHighDateTime > UNIX_TIME_UMAX_HI) || ((pft->dwHighDateTime == UNIX_TIME_UMAX_HI) && (pft->dwLowDateTime > UNIX_TIME_UMAX_LO))) { *ut = (time_t)ULONG_MAX; return FALSE; } } #endif /* !TIME_T_TYPE_DOUBLE */ FileTimeToSystemTime(pft, &w32tm); /* set `days' to the number of days into the year */ days = w32tm.wDay - 1 + ydays[w32tm.wMonth-1] + (w32tm.wMonth > 2 && leap (w32tm.wYear)); /* now set `days' to the number of days since 1 Jan 1970 */ days += 365 * (time_t)(w32tm.wYear - 1970) + (time_t)(nleap(w32tm.wYear)); *ut = (time_t)(86400L * days + 3600L * (time_t)w32tm.wHour + (time_t)(60 * w32tm.wMinute + w32tm.wSecond)); return TRUE; #endif /* ?IZ_USE_INT64 */ } /* end function NtfsFileTime2utime() */ #endif /* W32_STAT_BANDAID && !NO_W32TIMES_IZFIX */ #ifdef W32_STAT_BANDAID /*********************************/ /* Function VFatFileTime2utime() */ /*********************************/ static int VFatFileTime2utime(const FILETIME *pft, time_t *ut) { FILETIME lft; #ifndef HAVE_MKTIME WORD wDOSDate, wDOSTime; #else SYSTEMTIME w32tm; struct tm ltm; #endif if (!FileTimeToLocalFileTime(pft, &lft)) { /* if pft cannot be converted to local time, set ut to current time */ time(ut); return FALSE; } FTTrace((stdout, "VFatFT2utime, feed for mktime()", 1, &lft)); #ifndef HAVE_MKTIME /* This version of the FILETIME-to-UNIXTIME conversion function * uses DOS-DATE-TIME format as intermediate stage. For modification * and access times, this is no problem. But, the extra fine resolution * of the VFAT-stored creation time gets lost. */ if (!FileTimeToDosDateTime(&lft, &wDOSDate, &wDOSTime)) { static const FILETIME dosmin_ft = {DOSTIME_MIN_FT_LO, DOSTIME_MIN_FT_HI}; if (CompareFileTime(&lft, &dosmin_ft) <= 0) { /* underflow -> set to minimum DOS time */ wDOSDate = (WORD)((DWORD)DOSTIME_MINIMUM >> 16); wDOSTime = (WORD)DOSTIME_MINIMUM; } else { /* overflow -> set to maximum DOS time */ wDOSDate = (WORD)0xFF9F; /* 2107-12-31 */ wDOSTime = (WORD)0xBF7D; /* 23:59:58 */ } } TTrace((stdout,"DosDateTime is %04u-%02u-%02u %02u:%02u:%02u\n", (unsigned)((wDOSDate>>9)&0x7f)+1980,(unsigned)((wDOSDate>>5)&0x0f), (unsigned)(wDOSDate&0x1f),(unsigned)((wDOSTime>>11)&0x1f), (unsigned)((wDOSTime>>5)&0x3f),(unsigned)((wDOSTime<<1)&0x3e))); *ut = dos_to_unix_time(((ulg)wDOSDate << 16) | (ulg)wDOSTime); /* a cheap error check: dos_to_unix_time() only returns an odd time * when clipping at maximum time_t value. DOS_DATE_TIME values have * a resolution of 2 seconds and are therefore even numbers. */ return (((*ut)&1) == (time_t)0); #else /* HAVE_MKTIME */ FileTimeToSystemTime(&lft, &w32tm); #ifndef TIME_T_TYPE_DOUBLE /* underflow and overflow handling */ /* TODO: The range checks are not accurate, the actual limits may * be off by one daylight-saving-time shift (typically 1 hour), * depending on the current state of "is_dst". */ #ifdef CHECK_UTIME_SIGNED_UNSIGNED if ((time_t)0x80000000L < (time_t)0L) { if ((pft->dwHighDateTime < UNIX_TIME_SMIN_HI) || ((pft->dwHighDateTime == UNIX_TIME_SMIN_HI) && (pft->dwLowDateTime < UNIX_TIME_SMIN_LO))) { *ut = (time_t)LONG_MIN; return FALSE; if ((pft->dwHighDateTime > UNIX_TIME_SMAX_HI) || ((pft->dwHighDateTime == UNIX_TIME_SMAX_HI) && (pft->dwLowDateTime > UNIX_TIME_SMAX_LO))) { *ut = (time_t)LONG_MAX; return FALSE; } } else #endif /* CHECK_UTIME_SIGNED_UNSIGNED */ { if ((pft->dwHighDateTime < UNIX_TIME_ZERO_HI) || ((pft->dwHighDateTime == UNIX_TIME_ZERO_HI) && (pft->dwLowDateTime < UNIX_TIME_ZERO_LO))) { *ut = (time_t)0; return FALSE; } if ((pft->dwHighDateTime > UNIX_TIME_UMAX_HI) || ((pft->dwHighDateTime == UNIX_TIME_UMAX_HI) && (pft->dwLowDateTime > UNIX_TIME_UMAX_LO))) { *ut = (time_t)ULONG_MAX; return FALSE; } } #endif /* !TIME_T_TYPE_DOUBLE */ ltm.tm_year = w32tm.wYear - 1900; ltm.tm_mon = w32tm.wMonth - 1; ltm.tm_mday = w32tm.wDay; ltm.tm_hour = w32tm.wHour; ltm.tm_min = w32tm.wMinute; ltm.tm_sec = w32tm.wSecond; ltm.tm_isdst = -1; /* let mktime determine if DST is in effect */ *ut = mktime(<m); /* a cheap error check: mktime returns "(time_t)-1L" on conversion errors. * Normally, we would have to apply a consistency check because "-1" * could also be a valid time. But, it is quite unlikely to read back odd * time numbers from file systems that store time stamps in DOS format. * (The only known exception is creation time on VFAT partitions.) */ return (*ut != (time_t)-1L); #endif /* ?HAVE_MKTIME */ } /* end function VFatFileTime2utime() */ #endif /* W32_STAT_BANDAID */ /******************************/ /* Function FStampIsLocTime() */ /******************************/ static int FStampIsLocTime(__GPRO__ const char *path) { return (NTQueryVolInfo(__G__ path) ? G.lastVolLocTim : FALSE); } #ifndef NO_W32TIMES_IZFIX # define UTIME_2_IZFILETIME(ut, pft) \ if (fs_uses_loctime) {utime2VFatFileTime(ut, pft, TRUE);} \ else {utime2NtfsFileTime(ut, pft);} #else # define UTIME_2_IZFILETIME(ut, pft) \ utime2VFatFileTime(ut, pft, fs_uses_loctime); #endif /****************************/ /* Get the file time in a format that */ /* Function getNTfiletime() */ /* can be used by SetFileTime() in NT */ /****************************/ static int getNTfiletime(__G__ pModFT, pAccFT, pCreFT) __GDEF FILETIME *pModFT; FILETIME *pAccFT; FILETIME *pCreFT; { #ifdef USE_EF_UT_TIME unsigned eb_izux_flg; iztimes z_utime; /* struct for Unix-style actime & modtime, + creatime */ #endif int fs_uses_loctime = FStampIsLocTime(__G__ G.filename); /* Copy and/or convert time and date variables, if necessary; * return a flag indicating which time stamps are available. */ #ifdef USE_EF_UT_TIME if (G.extra_field && #ifdef IZ_CHECK_TZ G.tz_is_valid && #endif ((eb_izux_flg = ef_scan_for_izux(G.extra_field, G.lrec.extra_field_length, 0, G.lrec.last_mod_dos_datetime, &z_utime, NULL)) & EB_UT_FL_MTIME)) { TTrace((stderr, "getNTfiletime: Unix e.f. modif. time = %lu\n", z_utime.mtime)); UTIME_2_IZFILETIME(z_utime.mtime, pModFT) if (eb_izux_flg & EB_UT_FL_ATIME) { UTIME_2_IZFILETIME(z_utime.atime, pAccFT) } if (eb_izux_flg & EB_UT_FL_CTIME) { UTIME_2_IZFILETIME(z_utime.ctime, pCreFT) } return (int)eb_izux_flg; } #endif /* USE_EF_UT_TIME */ #ifndef NO_W32TIMES_IZFIX if (!fs_uses_loctime) { time_t ux_modtime; ux_modtime = dos_to_unix_time(G.lrec.last_mod_dos_datetime); utime2NtfsFileTime(ux_modtime, pModFT); } else #endif /* NO_W32TIMES_IZFIX */ { FILETIME lft; DosDateTimeToFileTime((WORD)(G.lrec.last_mod_dos_datetime >> 16), (WORD)(G.lrec.last_mod_dos_datetime & 0xFFFFL), &lft); LocalFileTimeToFileTime(&lft, pModFT); } *pAccFT = *pModFT; return (EB_UT_FL_MTIME | EB_UT_FL_ATIME); } /* end function getNTfiletime() */ /**************************/ /* Function SetFileSize() */ /**************************/ int SetFileSize(FILE *file, zusz_t filesize) { #ifdef __RSXNT__ /* RSXNT environment lacks a translation function from C file pointer to Win32-API file handle. So, simply do nothing. */ return 0; #else /* !__RSXNT__ */ /* not yet verified, if that really creates an unfragmented file rommel@ars.de */ HANDLE os_fh; #ifdef Z_UINT8_DEFINED LARGE_INTEGER fsbuf; #endif /* Win9x supports FAT file system, only; presetting file size does not help to prevent fragmentation. */ if (!IsWinNT()) return 0; /* Win32-API calls require access to the Win32 file handle. The interface function used to retrieve the Win32 handle for a file opened by the C rtl is non-standard and may not be available for every Win32 compiler environment. (see also win32/win32.c of the Zip distribution) */ os_fh = (HANDLE)_get_osfhandle(fileno(file)); /* move file pointer behind the last byte of the expected file size */ #ifdef Z_UINT8_DEFINED fsbuf.QuadPart = filesize; if ((SetFilePointer(os_fh, fsbuf.LowPart, &fsbuf.HighPart, FILE_BEGIN) == 0xFFFFFFFF) && GetLastError() != NO_ERROR) #else if (SetFilePointer(os_fh, (ulg)filesize, 0, FILE_BEGIN) == 0xFFFFFFFF) #endif return -1; /* extend/truncate file to the current position */ if (SetEndOfFile(os_fh) == 0) return -1; /* move file position pointer back to the start of the file! */ return (SetFilePointer(os_fh, 0, 0, FILE_BEGIN) == 0xFFFFFFFF) ? -1 : 0; #endif /* ?__RSXNT__ */ } /* end function SetFileSize() */ /****************************/ /* Function close_outfile() */ /****************************/ void close_outfile(__G) __GDEF { FILETIME Modft; /* File time type defined in NT, `last modified' time */ FILETIME Accft; /* NT file time type, `last access' time */ FILETIME Creft; /* NT file time type, `file creation' time */ HANDLE hFile = INVALID_HANDLE_VALUE; /* File handle defined in NT */ int gotTime; #ifdef NTSD_EAS uch *ebSDptr; unsigned ebSDlen; #endif #ifdef __RSXNT__ /* RSXNT/EMX C rtl uses OEM charset */ char *ansi_name = (char *)alloca(strlen(G.filename) + 1); INTERN_TO_ISO(G.filename, ansi_name); # define Ansi_Fname ansi_name #else # define Ansi_Fname G.filename #endif #ifndef __RSXNT__ if (IsWinNT()) { /* Truncate the file to the current position. * This is needed to remove excess allocation in case the * extraction has failed or stopped prematurely. */ SetEndOfFile((HANDLE)_get_osfhandle(fileno(G.outfile))); } #endif /* Close the file and then re-open it using the Win32 * CreateFile call, so that the file can be created * with GENERIC_WRITE access, otherwise the SetFileTime * call will fail. */ fclose(G.outfile); /* don't set the time stamp and attributes on standard output */ if (uO.cflag) return; /* skip restoring time stamps on user's request */ if (uO.D_flag <= 1) { gotTime = getNTfiletime(__G__ &Modft, &Accft, &Creft); /* open a handle to the file before processing extra fields; we do this in case new security on file prevents us from updating time stamps */ hFile = CreateFileA(Ansi_Fname, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); } else { gotTime = 0; } /* sfield@microsoft.com: set attributes before time in case we decide to support other filetime members later. This also allows us to apply attributes before the security is changed, which may prevent this from succeeding otherwise. Also, since most files don't have any interesting attributes, only change them if something other than FILE_ATTRIBUTE_ARCHIVE appears in the attributes. This works well as an optimization because FILE_ATTRIBUTE_ARCHIVE gets applied to the file anyway, when it's created new. */ if ((G.pInfo->file_attr & 0x7F) & ~FILE_ATTRIBUTE_ARCHIVE) { if (!SetFileAttributesA(Ansi_Fname, G.pInfo->file_attr & 0x7F)) Info(slide, 1, ((char *)slide, "\nwarning (%d): could not set file attributes\n", (int)GetLastError())); } #ifdef NTSD_EAS /* set NTFS SD extra fields */ if (G.extra_field && /* zipfile extra field may have extended attribs */ FindSDExtraField(__G__ G.extra_field, G.lrec.extra_field_length, &ebSDptr, &ebSDlen)) { int err = SetSD(__G__ Ansi_Fname, G.pInfo->file_attr, ebSDptr, ebSDlen); if (err == IZ_EF_TRUNC) { if (uO.qflag) Info(slide, 1, ((char *)slide, "%-22s ", FnFilter1(G.filename))); Info(slide, 1, ((char *)slide, LoadFarString(TruncNTSD), ebSDlen-(EB_NTSD_L_LEN+EB_CMPRHEADLEN), uO.qflag? "\n":"")); } } #endif /* NTSD_EAS */ /* skip restoring time stamps on user's request */ if (uO.D_flag <= 1) { if ( hFile == INVALID_HANDLE_VALUE ) Info(slide, 1, ((char *)slide, "\nCreateFile() error %d when trying set file time\n", (int)GetLastError())); else { if (gotTime) { FILETIME *pModft = (gotTime & EB_UT_FL_MTIME) ? &Modft : NULL; FILETIME *pAccft = (gotTime & EB_UT_FL_ATIME) ? &Accft : NULL; FILETIME *pCreft = (gotTime & EB_UT_FL_CTIME) ? &Creft : NULL; if (!SetFileTime(hFile, pCreft, pAccft, pModft)) Info(slide, 0, ((char *)slide, "\nSetFileTime failed: %d\n", (int)GetLastError())); } CloseHandle(hFile); } } return; #undef Ansi_Fname } /* end function close_outfile() */ #ifdef SET_DIR_ATTRIB int defer_dir_attribs(__G__ pd) __GDEF direntry **pd; { NTdirattr *d_entry; #ifdef NTSD_EAS uch *ebSDptr; unsigned ebSDlen; #endif /* Win9x does not support setting directory time stamps. */ if (!IsWinNT()) { *pd = (direntry *)NULL; return PK_OK; } #ifdef NTSD_EAS /* set extended attributes from extra fields */ if (G.extra_field && /* zipfile e.f. may have extended attribs */ FindSDExtraField(__G__ G.extra_field, G.lrec.extra_field_length, &ebSDptr, &ebSDlen)) { /* ebSDlen contains the payload size of the e.f. block, but we store it including the e.b. header. */ ebSDlen += EB_HEADSIZE; } else { /* no NTSD e.f. block -> no space needed to allocate */ ebSDlen = 0; } #endif /* NTSD_EAS */ d_entry = (NTdirattr *)malloc(sizeof(NTdirattr) #ifdef NTSD_EAS + ebSDlen #endif + strlen(G.filename)); *pd = (direntry *)d_entry; if (d_entry == (NTdirattr *)NULL) { return PK_MEM; } #ifdef NTSD_EAS if (ebSDlen > 0) memcpy(d_entry->buf, ebSDptr, ebSDlen); d_entry->SDlen = ebSDlen; d_entry->fn = d_entry->buf + ebSDlen; #else d_entry->fn = d_entry->buf; #endif strcpy(d_entry->fn, G.filename); d_entry->perms = G.pInfo->file_attr; d_entry->gotTime = (uO.D_flag <= 0 ? getNTfiletime(__G__ &(d_entry->Modft), &(d_entry->Accft), &(d_entry->Creft)) : 0); return PK_OK; } /* end function defer_dir_attribs() */ int set_direc_attribs(__G__ d) __GDEF direntry *d; { int errval; HANDLE hFile = INVALID_HANDLE_VALUE; /* File handle defined in NT */ #ifdef __RSXNT__ char *ansi_name; #endif /* Win9x does not support setting directory time stamps. */ if (!IsWinNT()) return PK_OK; errval = PK_OK; #ifdef __RSXNT__ /* RSXNT/EMX C rtl uses OEM charset */ ansi_name = (char *)alloca(strlen(d->fn) + 1); INTERN_TO_ISO(d->fn, ansi_name); # define Ansi_Dirname ansi_name #else # define Ansi_Dirname d->fn #endif /* Skip restoring directory time stamps on user' request. */ if (uO.D_flag <= 0) { /* Open a handle to the directory before processing extra fields; we do this in case new security on file prevents us from updating time stamps. Although the WIN32 documentation recommends to use GENERIC_WRITE access flag to create the handle for SetFileTime(), this is too demanding for directories with the "read-only" attribute bit set. So we use the more specific flag FILE_WRITE_ATTRIBUTES here to request the minimum required access rights. (This problem is a Windows bug that has been silently fixed in Windows XP SP2.) */ hFile = CreateFileA(Ansi_Dirname, FILE_WRITE_ATTRIBUTES, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); } #ifdef NTSD_EAS if (NtAtt(d)->SDlen > 0) { int err; if (QCOND2) { Info(slide, 1, ((char *)slide, " set attrib: %-22s ", FnFilter1(d->fn))); } /* set NTFS SD extra fields */ err = SetSD(__G__ Ansi_Dirname, NtAtt(d)->perms, NtAtt(d)->buf, NtAtt(d)->SDlen - EB_HEADSIZE); if (err == IZ_EF_TRUNC) { if (!QCOND2) Info(slide, 1, ((char *)slide, "%-22s ", FnFilter1(d->fn))); Info(slide, 1, ((char *)slide, LoadFarString(TruncNTSD), NtAtt(d)->SDlen-(EB_NTSD_L_LEN+EB_CMPRHEADLEN), "\n")); } else if (QCOND2) { Info(slide, 0, ((char *)slide, "\n")); } if (errval < err) errval = err; } #endif /* NTSD_EAS */ /* Skip restoring directory time stamps on user' request. */ if (uO.D_flag <= 0) { if (hFile == INVALID_HANDLE_VALUE) { Info(slide, 1, ((char *)slide, "warning: CreateFile() error %d (set file times for %s)\n", (int)GetLastError(), FnFilter1(d->fn))); if (!errval) errval = PK_WARN; } else { if (NtAtt(d)->gotTime) { FILETIME *pModft = (NtAtt(d)->gotTime & EB_UT_FL_MTIME) ? &(NtAtt(d)->Modft) : NULL; FILETIME *pAccft = (NtAtt(d)->gotTime & EB_UT_FL_ATIME) ? &(NtAtt(d)->Accft) : NULL; FILETIME *pCreft = (NtAtt(d)->gotTime & EB_UT_FL_CTIME) ? &(NtAtt(d)->Creft) : NULL; if (!SetFileTime(hFile, pCreft, pAccft, pModft)) { Info(slide, 0, ((char *)slide, "warning: SetFileTime() for %s error %d\n", FnFilter1(d->fn), (int)GetLastError())); if (!errval) errval = PK_WARN; } } CloseHandle(hFile); } } return errval; } /* end function set_direc_attribs() */ #endif /* SET_DIR_ATTRIB */ #ifdef TIMESTAMP /*************************/ /* Function stamp_file() */ /*************************/ int stamp_file(__GPRO__ ZCONST char *fname, time_t modtime) { FILETIME Modft; /* File time type defined in NT, `last modified' time */ HANDLE hFile; /* File handle defined in NT */ int errstat = 0; /* return status: 0 == "OK", -1 == "Failure" */ int fs_uses_loctime = FStampIsLocTime(__G__ fname); #ifdef __RSXNT__ /* RSXNT/EMX C rtl uses OEM charset */ char *ansi_name = (char *)alloca(strlen(fname) + 1); INTERN_TO_ISO(fname, ansi_name); # define Ansi_Fname ansi_name #else # define Ansi_Fname fname #endif /* open a handle to the file to prepare setting the mod-time stamp */ hFile = CreateFileA(Ansi_Fname, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if ( hFile == INVALID_HANDLE_VALUE ) { errstat = -1; } else { /* convert time_t modtime into WIN32 native 64bit format */ UTIME_2_IZFILETIME(modtime, &Modft) /* set Access and Modification times of the file to modtime */ if (!SetFileTime(hFile, NULL, &Modft, &Modft)) { errstat = -1; } CloseHandle(hFile); } return errstat; #undef Ansi_Fname } /* end function stamp_file() */ #endif /* TIMESTAMP */ /***********************/ /* Function isfloppy() */ /* more precisely, is it removable? */ /***********************/ static int isfloppy(int nDrive) /* 1 == A:, 2 == B:, etc. */ { char rootPathName[4]; rootPathName[0] = (char)('A' + nDrive - 1); /* build the root path */ rootPathName[1] = ':'; /* name, e.g. "A:/" */ rootPathName[2] = '/'; rootPathName[3] = '\0'; return (GetDriveTypeA(rootPathName) == DRIVE_REMOVABLE); } /* end function isfloppy() */ /*****************************/ /* Function NTQueryVolInfo() */ /*****************************/ /* * Note: 8.3 limits on filenames apply only to old-style FAT filesystems. * More recent versions of Windows (Windows NT 3.5 / Windows 4.0) * can support long filenames (LFN) on FAT filesystems. Check the * filesystem maximum component length field to detect LFN support. */ static int NTQueryVolInfo(__GPRO__ const char *name) { /* static char lastRootPath[4] = ""; */ /* static int lastVolOldFAT; */ /* static int lastVolLocTim; */ char *tmp0; char tmp1[MAX_PATH], tmp2[MAX_PATH]; DWORD volSerNo, maxCompLen, fileSysFlags; #ifdef __RSXNT__ /* RSXNT/EMX C rtl uses OEM charset */ char *ansi_name = (char *)alloca(strlen(name) + 1); INTERN_TO_ISO(name, ansi_name); name = ansi_name; #endif if ((!strncmp(name, "//", 2) || !strncmp(name, "\\\\", 2)) && (name[2] != '\0' && name[2] != '/' && name[2] != '\\')) { /* GetFullPathname() and GetVolumeInformation() do not work * on UNC names. For now, we return "error". * **FIXME**: check if UNC name is mapped to a drive letter * and use mapped drive for volume info query. */ return FALSE; } if (isalpha((uch)name[0]) && (name[1] == ':')) tmp0 = (char *)name; else { if (!GetFullPathNameA(name, MAX_PATH, tmp1, &tmp0)) return FALSE; tmp0 = &tmp1[0]; } if (strncmp(G.lastRootPath, tmp0, 2) != 0) { /* For speed, we skip repeated queries for the same device */ strncpy(G.lastRootPath, tmp0, 2); /* Build the root path name, */ G.lastRootPath[2] = '/'; /* e.g. "A:/" */ G.lastRootPath[3] = '\0'; if (!GetVolumeInformationA((LPCSTR)G.lastRootPath, (LPSTR)tmp1, (DWORD)MAX_PATH, &volSerNo, &maxCompLen, &fileSysFlags, (LPSTR)tmp2, (DWORD)MAX_PATH)) { G.lastRootPath[0] = '\0'; return FALSE; } /* LFNs are available if the component length is > 12 */ G.lastVolOldFAT = (maxCompLen <= 12); /* G.lastVolOldFAT = !strncmp(strupr(tmp2), "FAT", 3); old version */ /* Volumes in (V)FAT and (OS/2) HPFS format store file timestamps in * local time! */ G.lastVolLocTim = !strncmp(strupr(tmp2), "VFAT", 4) || !strncmp(tmp2, "HPFS", 4) || !strncmp(tmp2, "FAT", 3); } return TRUE; } /* end function NTQueryVolInfo() */ /*****************************/ /* Function IsVolumeOldFAT() */ /*****************************/ static int IsVolumeOldFAT(__GPRO__ const char *name) { return (NTQueryVolInfo(__G__ name) ? G.lastVolOldFAT : FALSE); } #ifndef SFX /************************/ /* Function do_wild() */ /* identical to OS/2 version */ /************************/ char *do_wild(__G__ wildspec) __GDEF ZCONST char *wildspec; /* only used first time on a given dir */ { /* these statics are now declared in SYSTEM_SPECIFIC_GLOBALS in w32cfg.h: static zDIR *wild_dir = NULL; static ZCONST char *wildname; static char *dirname, matchname[FILNAMSIZ]; static int notfirstcall=FALSE, have_dirname, dirnamelen; */ char *fnamestart; struct zdirent *file; /* Even when we're just returning wildspec, we *always* do so in * matchname[]--calling routine is allowed to append four characters * to the returned string, and wildspec may be a pointer to argv[]. */ if (!G.notfirstcall) { /* first call: must initialize everything */ G.notfirstcall = TRUE; if (!iswild(wildspec)) { strncpy(G.matchname, wildspec, FILNAMSIZ); G.matchname[FILNAMSIZ-1] = '\0'; G.have_dirname = FALSE; G.wild_dir = NULL; return G.matchname; } /* break the wildspec into a directory part and a wildcard filename */ if ((G.wildname = MBSRCHR(wildspec, '/')) == (ZCONST char *)NULL && (G.wildname = MBSRCHR(wildspec, ':')) == (ZCONST char *)NULL) { G.dirname = "."; G.dirnamelen = 1; G.have_dirname = FALSE; G.wildname = wildspec; } else { ++G.wildname; /* point at character after '/' or ':' */ G.dirnamelen = G.wildname - wildspec; if ((G.dirname = (char *)malloc(G.dirnamelen+1)) == NULL) { Info(slide, 1, ((char *)slide, "warning: cannot allocate wildcard buffers\n")); strncpy(G.matchname, wildspec, FILNAMSIZ); G.matchname[FILNAMSIZ-1] = '\0'; return G.matchname; /* but maybe filespec was not a wildcard */ } strncpy(G.dirname, wildspec, G.dirnamelen); G.dirname[G.dirnamelen] = '\0'; /* terminate for strcpy below */ G.have_dirname = TRUE; } Trace((stderr, "do_wild: dirname = [%s]\n", FnFilter1(G.dirname))); if ((G.wild_dir = (zvoid *)Opendir(G.dirname)) != NULL) { if (G.have_dirname) { strcpy(G.matchname, G.dirname); fnamestart = G.matchname + G.dirnamelen; } else fnamestart = G.matchname; while ((file = Readdir((zDIR *)G.wild_dir)) != NULL) { Trace((stderr, "do_wild: Readdir returns %s\n", FnFilter1(file->d_name))); strcpy(fnamestart, file->d_name); if (MBSRCHR(fnamestart, '.') == (char *)NULL) strcat(fnamestart, "."); if (match(fnamestart, G.wildname, TRUE WISEP) && /* skip "." and ".." directory entries */ strcmp(fnamestart, ".") && strcmp(fnamestart, "..")) { Trace((stderr, "do_wild: match() succeeds\n")); /* remove trailing dot */ fnamestart = plastchar(fnamestart, strlen(fnamestart)); if (*fnamestart == '.') *fnamestart = '\0'; return G.matchname; } } /* if we get to here directory is exhausted, so close it */ Closedir((zDIR *)G.wild_dir); G.wild_dir = NULL; } Trace((stderr, "do_wild: Opendir(%s) returns NULL\n", FnFilter1(G.dirname))); /* return the raw wildspec in case that works (e.g., directory not * searchable, but filespec was not wild and file is readable) */ strncpy(G.matchname, wildspec, FILNAMSIZ); G.matchname[FILNAMSIZ-1] = '\0'; return G.matchname; } /* last time through, might have failed opendir but returned raw wildspec */ if (G.wild_dir == NULL) { G.notfirstcall = FALSE; /* reset for new wildspec */ if (G.have_dirname) free(G.dirname); return (char *)NULL; } /* If we've gotten this far, we've read and matched at least one entry * successfully (in a previous call), so dirname has been copied into * matchname already. */ if (G.have_dirname) { /* strcpy(G.matchname, G.dirname); */ fnamestart = G.matchname + G.dirnamelen; } else fnamestart = G.matchname; while ((file = Readdir((zDIR *)G.wild_dir)) != NULL) { Trace((stderr, "do_wild: readdir returns %s\n", FnFilter1(file->d_name))); strcpy(fnamestart, file->d_name); if (MBSRCHR(fnamestart, '.') == (char *)NULL) strcat(fnamestart, "."); if (match(fnamestart, G.wildname, TRUE WISEP)) { Trace((stderr, "do_wild: match() succeeds\n")); /* remove trailing dot */ fnamestart = plastchar(fnamestart, strlen(fnamestart)); if (*fnamestart == '.') *fnamestart = '\0'; return G.matchname; } } Closedir((zDIR *)G.wild_dir); /* at least one entry read; nothing left */ G.wild_dir = NULL; G.notfirstcall = FALSE; /* reset for new wildspec */ if (G.have_dirname) free(G.dirname); return (char *)NULL; } /* end function do_wild() */ #endif /* !SFX */ /**********************/ /* Function mapattr() */ /**********************/ /* Identical to MS-DOS, OS/2 versions. However, NT has a lot of extra * permission stuff, so this function should probably be extended in the * future. */ int mapattr(__G) __GDEF { /* set archive bit for file entries (file is not backed up): */ G.pInfo->file_attr = ((unsigned)G.crec.external_file_attributes | (G.crec.external_file_attributes & FILE_ATTRIBUTE_DIRECTORY ? 0 : FILE_ATTRIBUTE_ARCHIVE)) & 0xff; return 0; } /* end function mapattr() */ /************************/ /* Function mapname() */ /************************/ int mapname(__G__ renamed) __GDEF int renamed; /* * returns: * MPN_OK - no problem detected * MPN_INF_TRUNC - caution (truncated filename) * MPN_INF_SKIP - info "skip entry" (dir doesn't exist) * MPN_ERR_SKIP - error -> skip entry * MPN_ERR_TOOLONG - error -> path is too long * MPN_NOMEM - error (memory allocation failed) -> skip entry * [also MPN_VOL_LABEL, MPN_CREATED_DIR] */ { char pathcomp[FILNAMSIZ]; /* path-component buffer */ char *pp, *cp=NULL; /* character pointers */ char *lastsemi = NULL; /* pointer to last semi-colon in pathcomp */ #ifdef ACORN_FTYPE_NFS char *lastcomma=(char *)NULL; /* pointer to last comma in pathcomp */ RO_extra_block *ef_spark; /* pointer Acorn FTYPE ef block */ #endif int killed_ddot = FALSE; /* is set when skipping "../" pathcomp */ int error; register unsigned workch; /* hold the character being tested */ /*--------------------------------------------------------------------------- Initialize various pointers and counters and stuff. ---------------------------------------------------------------------------*/ /* can create path as long as not just freshening, or if user told us */ G.create_dirs = (!uO.fflag || renamed); G.created_dir = FALSE; /* not yet */ G.renamed_fullpath = FALSE; G.fnlen = strlen(G.filename); if (renamed) { cp = G.filename; /* point to beginning of renamed name... */ if (*cp) do { if (*cp == '\\') /* convert backslashes to forward */ *cp = '/'; } while (*PREINCSTR(cp)); cp = G.filename; /* use temporary rootpath if user gave full pathname */ if (G.filename[0] == '/') { G.renamed_fullpath = TRUE; pathcomp[0] = '/'; /* copy the '/' and terminate */ pathcomp[1] = '\0'; ++cp; } else if (isalpha((uch)G.filename[0]) && G.filename[1] == ':') { G.renamed_fullpath = TRUE; pp = pathcomp; *pp++ = *cp++; /* copy the "d:" (+ '/', possibly) */ *pp++ = *cp++; if (*cp == '/') *pp++ = *cp++; /* otherwise add "./"? */ *pp = '\0'; } } /* pathcomp is ignored unless renamed_fullpath is TRUE: */ if ((error = checkdir(__G__ pathcomp, INIT)) != 0) /* init path buffer */ return error; /* ...unless no mem or vol label on hard disk */ *pathcomp = '\0'; /* initialize translation buffer */ pp = pathcomp; /* point to translation buffer */ if (!renamed) { /* cp already set if renamed */ if (uO.jflag) /* junking directories */ cp = (char *)MBSRCHR(G.filename, '/'); if (cp == NULL) /* no '/' or not junking dirs */ cp = G.filename; /* point to internal zipfile-member pathname */ else ++cp; /* point to start of last component of path */ } /*--------------------------------------------------------------------------- Begin main loop through characters in filename. ---------------------------------------------------------------------------*/ for (; (workch = (uch)*cp) != 0; INCSTR(cp)) { switch (workch) { case '/': /* can assume -j flag not given */ *pp = '\0'; maskDOSdevice(__G__ pathcomp); if (strcmp(pathcomp, ".") == 0) { /* don't bother appending "./" to the path */ *pathcomp = '\0'; } else if (!uO.ddotflag && strcmp(pathcomp, "..") == 0) { /* "../" dir traversal detected, skip over it */ *pathcomp = '\0'; killed_ddot = TRUE; /* set "show message" flag */ } /* when path component is not empty, append it now */ if (*pathcomp != '\0' && ((error = checkdir(__G__ pathcomp, APPEND_DIR)) & MPN_MASK) > MPN_INF_TRUNC) return error; pp = pathcomp; /* reset conversion buffer for next piece */ lastsemi = (char *)NULL; /* leave direct. semi-colons alone */ break; case ':': /* drive spec not stored, so no colon allowed */ case '\\': /* '\\' may come as normal filename char (not */ case '<': /* dir sep char!) from unix-like file system */ case '>': /* no redirection symbols allowed either */ case '|': /* no pipe signs allowed */ case '"': /* no double quotes allowed */ case '?': /* no wildcards allowed */ case '*': *pp++ = '_'; /* these rules apply equally to FAT and NTFS */ break; case ';': /* start of VMS version? */ lastsemi = pp; /* remove VMS version later... */ *pp++ = ';'; /* but keep semicolon for now */ break; #ifdef ACORN_FTYPE_NFS case ',': /* NFS filetype extension */ lastcomma = pp; *pp++ = ','; /* keep for now; may need to remove */ break; /* later, if requested */ #endif case ' ': /* keep spaces unless specifically */ /* NT cannot create filenames with spaces on FAT volumes */ if (uO.sflag || IsVolumeOldFAT(__G__ G.filename)) *pp++ = '_'; else *pp++ = ' '; break; default: /* allow European characters in filenames: */ if (isprint(workch) || workch >= 127) #ifdef _MBCS { memcpy(pp, cp, CLEN(cp)); INCSTR(pp); } #else *pp++ = (char)workch; #endif } /* end switch */ } /* end while loop */ /* Show warning when stripping insecure "parent dir" path components */ if (killed_ddot && QCOND2) { Info(slide, 0, ((char *)slide, "warning: skipped \"../\" path component(s) in %s\n", FnFilter1(G.filename))); if (!(error & ~MPN_MASK)) error = (error & MPN_MASK) | PK_WARN; } /*--------------------------------------------------------------------------- Report if directory was created (and no file to create: filename ended in '/'), check name to be sure it exists, and combine path and name be- fore exiting. ---------------------------------------------------------------------------*/ if (lastchar(G.filename, G.fnlen) == '/') { #ifdef __RSXNT__ /* RSXNT/EMX C rtl uses OEM charset */ char *ansi_name = (char *)alloca(strlen(G.filename) + 1); INTERN_TO_ISO(G.filename, ansi_name); # define Ansi_Fname ansi_name #else # define Ansi_Fname G.filename #endif checkdir(__G__ G.filename, GETPATH); if (G.created_dir) { if (QCOND2) { Info(slide, 0, ((char *)slide, " creating: %-22s\n", FnFilter1(G.filename))); } /* set file attributes: The default for newly created directories is "DIR attribute flags set", so there is no need to change attributes unless one of the DOS style attribute flags is set. The readonly attribute need not be masked, since it does not prevent modifications in the new directory. */ if(G.pInfo->file_attr & (0x7F & ~FILE_ATTRIBUTE_DIRECTORY)) { if (!SetFileAttributesA(Ansi_Fname, G.pInfo->file_attr & 0x7F)) Info(slide, 1, ((char *)slide, "\nwarning (%d): could not set file attributes for %s\n", (int)GetLastError(), FnFilter1(G.filename))); } /* set dir time (note trailing '/') */ return (error & ~MPN_MASK) | MPN_CREATED_DIR; } else if (IS_OVERWRT_ALL) { /* overwrite attributes of existing directory on user's request */ /* set file attributes: */ if(G.pInfo->file_attr & (0x7F & ~FILE_ATTRIBUTE_DIRECTORY)) { if (!SetFileAttributesA(Ansi_Fname, G.pInfo->file_attr & 0x7F)) Info(slide, 1, ((char *)slide, "\nwarning (%d): could not set file attributes for %s\n", (int)GetLastError(), FnFilter1(G.filename))); } } /* dir existed already; don't look for data to extract */ return (error & ~MPN_MASK) | MPN_INF_SKIP; } *pp = '\0'; /* done with pathcomp: terminate it */ /* if not saving them, remove VMS version numbers (appended "###") */ if (!uO.V_flag && lastsemi) { pp = lastsemi + 1; /* semi-colon was kept: expect #'s after */ while (isdigit((uch)(*pp))) ++pp; if (*pp == '\0') /* only digits between ';' and end: nuke */ *lastsemi = '\0'; } #ifdef ACORN_FTYPE_NFS /* translate Acorn filetype information if asked to do so */ if (uO.acorn_nfs_ext && (ef_spark = (RO_extra_block *) getRISCOSexfield(G.extra_field, G.lrec.extra_field_length)) != (RO_extra_block *)NULL) { /* file *must* have a RISC OS extra field */ long ft = (long)makelong(ef_spark->loadaddr); /*32-bit*/ if (lastcomma) { pp = lastcomma + 1; while (isxdigit((uch)(*pp))) ++pp; if (pp == lastcomma+4 && *pp == '\0') *lastcomma='\0'; /* nuke */ } if ((ft & 1<<31)==0) ft=0x000FFD00; sprintf(pathcomp+strlen(pathcomp), ",%03x", (int)(ft>>8) & 0xFFF); } #endif /* ACORN_FTYPE_NFS */ maskDOSdevice(__G__ pathcomp); if (*pathcomp == '\0') { Info(slide, 1, ((char *)slide, "mapname: conversion of %s failed\n", FnFilter1(G.filename))); return (error & ~MPN_MASK) | MPN_ERR_SKIP; } checkdir(__G__ pathcomp, APPEND_NAME); /* returns 1 if truncated: care? */ checkdir(__G__ G.filename, GETPATH); if (G.pInfo->vollabel) { /* set the volume label now */ char drive[4]; #ifdef __RSXNT__ /* RSXNT/EMX C rtl uses OEM charset */ char *ansi_name = (char *)alloca(strlen(G.filename) + 1); INTERN_TO_ISO(G.filename, ansi_name); # define Ansi_Fname ansi_name #else # define Ansi_Fname G.filename #endif /* Build a drive string, e.g. "b:" */ drive[0] = (char)('a' + G.nLabelDrive - 1); strcpy(drive + 1, ":\\"); if (QCOND2) Info(slide, 0, ((char *)slide, "labelling %s %-22s\n", drive, FnFilter1(G.filename))); if (!SetVolumeLabelA(drive, Ansi_Fname)) { Info(slide, 1, ((char *)slide, "mapname: error setting volume label\n")); return (error & ~MPN_MASK) | MPN_ERR_SKIP; } /* success: skip the "extraction" quietly */ return (error & ~MPN_MASK) | MPN_INF_SKIP; #undef Ansi_Fname } Trace((stderr, "mapname returns with filename = [%s] (error = %d)\n\n", FnFilter1(G.filename), error)); return error; } /* end function mapname() */ /****************************/ /* Function maskDOSdevice() */ /****************************/ static void maskDOSdevice(__G__ pathcomp) __GDEF char *pathcomp; { /*--------------------------------------------------------------------------- Put an underscore in front of the file name if the file name is a DOS/WINDOWS device name like CON.*, AUX.*, PRN.*, etc. Trying to extract such a file would fail at best and wedge us at worst. ---------------------------------------------------------------------------*/ #if !defined(S_IFCHR) && defined(_S_IFCHR) # define S_IFCHR _S_IFCHR #endif #if !defined(S_ISCHR) # if defined(_S_ISCHR) # define S_ISCHR(m) _S_ISCHR(m) # elif defined(S_IFCHR) # define S_ISCHR(m) ((m) & S_IFCHR) # endif #endif #ifdef DEBUG if (zstat(pathcomp, &G.statbuf) == 0) { Trace((stderr, "maskDOSdevice() stat(\"%s\", buf) st_mode result: %X, %o\n", FnFilter1(pathcomp), G.statbuf.st_mode, G.statbuf.st_mode)); } else { Trace((stderr, "maskDOSdevice() stat(\"%s\", buf) failed\n", FnFilter1(pathcomp))); } #endif if (zstat(pathcomp, &G.statbuf) == 0 && S_ISCHR(G.statbuf.st_mode)) { extent i; /* pathcomp contains a name of a DOS character device (builtin or * installed device driver). * Prepend a '_' to allow creation of the item in the file system. */ for (i = strlen(pathcomp) + 1; i > 0; --i) pathcomp[i] = pathcomp[i - 1]; pathcomp[0] = '_'; } } /* end function maskDOSdevice() */ /**********************/ /* Function map2fat() */ /* Not quite identical to OS/2 version */ /**********************/ static void map2fat(pathcomp, pEndFAT) char *pathcomp, **pEndFAT; { char *ppc = pathcomp; /* variable pointer to pathcomp */ char *pEnd = *pEndFAT; /* variable pointer to buildpathFAT */ char *pBegin = *pEndFAT; /* constant pointer to start of this comp. */ char *last_dot = NULL; /* last dot not converted to underscore */ register unsigned workch; /* hold the character being tested */ /* Only need check those characters which are legal in NTFS but not * in FAT: to get here, must already have passed through mapname. * Also must truncate path component to ensure 8.3 compliance. */ while ((workch = (uch)*ppc++) != 0) { switch (workch) { case '[': case ']': case '+': case ',': case ';': case '=': *pEnd++ = '_'; /* convert brackets to underscores */ break; case '.': if (pEnd == *pEndFAT) { /* nothing appended yet... */ if (*ppc == '\0') /* don't bother appending a */ break; /* "./" component to the path */ else if (*ppc == '.' && ppc[1] == '\0') { /* "../" */ *pEnd++ = '.'; /* add first dot, */ *pEnd++ = '.'; /* add second dot, and */ ++ppc; /* skip over to pathcomp's end */ } else { /* FAT doesn't allow null filename */ *pEnd++ = '_'; /* bodies, so map .exrc -> _exrc */ } /* (_.exr would keep max 3 chars) */ } else { /* found dot within path component */ last_dot = pEnd; /* point at last dot so far... */ *pEnd++ = '_'; /* convert to underscore for now */ } break; default: *pEnd++ = (char)workch; } /* end switch */ } /* end while loop */ *pEnd = '\0'; /* terminate buildpathFAT */ /* NOTE: keep in mind that pEnd points to the end of the path * component, and *pEndFAT still points to the *beginning* of it... * Also note that the algorithm does not try to get too fancy: * if there are no dots already, the name either gets truncated * at 8 characters or the last underscore is converted to a dot * (only if more characters are saved that way). In no case is * a dot inserted between existing characters. */ if (last_dot == NULL) { /* no dots: check for underscores... */ char *plu = MBSRCHR(pBegin, '_'); /* pointer to last underscore */ if ((plu != NULL) && /* found underscore: convert to dot? */ (MIN(plu - pBegin, 8) + MIN(pEnd - plu - 1, 3) > 8)) { last_dot = plu; /* be lazy: drop through to next if-blk */ } else if ((pEnd - *pEndFAT) > 8) { /* no underscore; or converting underscore to dot would save less chars than leaving everything in the basename */ *pEndFAT += 8; /* truncate at 8 chars */ **pEndFAT = '\0'; } else *pEndFAT = pEnd; /* whole thing fits into 8 chars or less */ } if (last_dot != NULL) { /* one dot is OK: */ *last_dot = '.'; /* put it back in */ if ((last_dot - pBegin) > 8) { char *p, *q; int i; p = last_dot; q = last_dot = pBegin + 8; for (i = 0; (i < 4) && *p; ++i) /* too many chars in basename: */ *q++ = *p++; /* shift .ext left and trun- */ *q = '\0'; /* cate/terminate it */ *pEndFAT = q; } else if ((pEnd - last_dot) > 4) { /* too many chars in extension */ *pEndFAT = last_dot + 4; **pEndFAT = '\0'; } else *pEndFAT = pEnd; /* filename is fine; point at terminating zero */ if ((last_dot - pBegin) > 0 && last_dot[-1] == ' ') last_dot[-1] = '_'; /* NO blank in front of '.'! */ } } /* end function map2fat() */ /***********************/ /* Borrowed from os2.c for UnZip 5.1. */ /* Function checkdir() */ /* Difference: no EA stuff */ /***********************/ /* HPFS stuff works on NTFS too */ int checkdir(__G__ pathcomp, flag) __GDEF char *pathcomp; int flag; /* * returns: * MPN_OK - no problem detected * MPN_INF_TRUNC - (on APPEND_NAME) truncated filename * MPN_INF_SKIP - path doesn't exist, not allowed to create * MPN_ERR_SKIP - path doesn't exist, tried to create and failed; or path * exists and is not a directory, but is supposed to be * MPN_ERR_TOOLONG - path is too long * MPN_NOMEM - can't allocate memory for filename buffers */ { /* static int rootlen = 0; */ /* length of rootpath */ /* static char *rootpath; */ /* user's "extract-to" directory */ /* static char *buildpathHPFS; */ /* full path (so far) to extracted file, */ /* static char *buildpathFAT; */ /* both HPFS/EA (main) and FAT versions */ /* static char *endHPFS; */ /* corresponding pointers to end of */ /* static char *endFAT; */ /* buildpath ('\0') */ # define FN_MASK 7 # define FUNCTION (flag & FN_MASK) /*--------------------------------------------------------------------------- APPEND_DIR: append the path component to the path being built and check for its existence. If doesn't exist and we are creating directories, do so for this one; else signal success or error as appropriate. ---------------------------------------------------------------------------*/ if (FUNCTION == APPEND_DIR) { char *p = pathcomp; int too_long = FALSE; Trace((stderr, "appending dir segment [%s]\n", FnFilter1(pathcomp))); while ((*G.endHPFS = *p++) != '\0') /* copy to HPFS filename */ ++G.endHPFS; if (!IsVolumeOldFAT(__G__ G.buildpathHPFS)) { p = pathcomp; while ((*G.endFAT = *p++) != '\0') /* copy to FAT filename, too */ ++G.endFAT; } else map2fat(pathcomp, &G.endFAT); /* map into FAT fn, update endFAT */ /* GRR: could do better check, see if overrunning buffer as we go: * check endHPFS-buildpathHPFS after each append, set warning variable * if within 20 of FILNAMSIZ; then if var set, do careful check when * appending. Clear variable when begin new path. */ /* next check: need to append '/', at least one-char name, '\0' */ if ((G.endHPFS-G.buildpathHPFS) > FILNAMSIZ-3) too_long = TRUE; /* check if extracting dir? */ #ifdef FIX_STAT_BUG /* Borland C++ 5.0 does not handle a call to stat() well if the * directory does not exist (it tends to crash in strange places.) * This is apparently a problem only when compiling for GUI rather * than console. The code below attempts to work around this problem. */ if (access(G.buildpathFAT, 0) != 0) { if (!G.create_dirs) { /* told not to create (freshening) */ free(G.buildpathHPFS); free(G.buildpathFAT); /* path doesn't exist: nothing to do */ return MPN_INF_SKIP; } if (too_long) { /* GRR: should allow FAT extraction w/o EAs */ Info(slide, 1, ((char *)slide, "checkdir error: path too long: %s\n", FnFilter1(G.buildpathHPFS))); free(G.buildpathHPFS); free(G.buildpathFAT); /* no room for filenames: fatal */ return MPN_ERR_TOOLONG; } if (MKDIR(G.buildpathFAT, 0777) == -1) { /* create the directory */ Info(slide, 1, ((char *)slide, "checkdir error: cannot create %s\n\ %s\n\ unable to process %s.\n", FnFilter2(G.buildpathFAT), strerror(errno), FnFilter1(G.filename))); free(G.buildpathHPFS); free(G.buildpathFAT); /* path didn't exist, tried to create, failed */ return MPN_ERR_SKIP; } G.created_dir = TRUE; } #endif /* FIX_STAT_BUG */ if (SSTAT(G.buildpathFAT, &G.statbuf)) /* path doesn't exist */ { if (!G.create_dirs) { /* told not to create (freshening) */ free(G.buildpathHPFS); free(G.buildpathFAT); /* path doesn't exist: nothing to do */ return MPN_INF_SKIP; } if (too_long) { /* GRR: should allow FAT extraction w/o EAs */ Info(slide, 1, ((char *)slide, "checkdir error: path too long: %s\n", FnFilter1(G.buildpathHPFS))); free(G.buildpathHPFS); free(G.buildpathFAT); /* no room for filenames: fatal */ return MPN_ERR_TOOLONG; } if (MKDIR(G.buildpathFAT, 0777) == -1) { /* create the directory */ Info(slide, 1, ((char *)slide, "checkdir error: cannot create %s\n\ %s\n\ unable to process %s.\n", FnFilter2(G.buildpathFAT), strerror(errno), FnFilter1(G.filename))); free(G.buildpathHPFS); free(G.buildpathFAT); /* path didn't exist, tried to create, failed */ return MPN_ERR_SKIP; } G.created_dir = TRUE; } else if (!S_ISDIR(G.statbuf.st_mode)) { Info(slide, 1, ((char *)slide, "checkdir error: %s exists but is not directory\n\ unable to process %s.\n", FnFilter2(G.buildpathFAT), FnFilter1(G.filename))); free(G.buildpathHPFS); free(G.buildpathFAT); /* path existed but wasn't dir */ return MPN_ERR_SKIP; } if (too_long) { Info(slide, 1, ((char *)slide, "checkdir error: path too long: %s\n", FnFilter1(G.buildpathHPFS))); free(G.buildpathHPFS); free(G.buildpathFAT); /* no room for filenames: fatal */ return MPN_ERR_TOOLONG; } *G.endHPFS++ = '/'; *G.endFAT++ = '/'; *G.endHPFS = *G.endFAT = '\0'; Trace((stderr, "buildpathHPFS now = [%s]\nbuildpathFAT now = [%s]\n", FnFilter1(G.buildpathHPFS), FnFilter2(G.buildpathFAT))); return MPN_OK; } /* end if (FUNCTION == APPEND_DIR) */ /*--------------------------------------------------------------------------- GETPATH: copy full FAT path to the string pointed at by pathcomp (want filename to reflect name used on disk, not EAs; if full path is HPFS, buildpathFAT and buildpathHPFS will be identical). Also free both paths. ---------------------------------------------------------------------------*/ if (FUNCTION == GETPATH) { Trace((stderr, "getting and freeing FAT path [%s]\n", FnFilter1(G.buildpathFAT))); Trace((stderr, "freeing HPFS path [%s]\n", FnFilter1(G.buildpathHPFS))); strcpy(pathcomp, G.buildpathFAT); free(G.buildpathFAT); free(G.buildpathHPFS); G.buildpathHPFS = G.buildpathFAT = G.endHPFS = G.endFAT = NULL; return MPN_OK; } /*--------------------------------------------------------------------------- APPEND_NAME: assume the path component is the filename; append it and return without checking for existence. ---------------------------------------------------------------------------*/ if (FUNCTION == APPEND_NAME) { char *p = pathcomp; int error = MPN_OK; Trace((stderr, "appending filename [%s]\n", FnFilter1(pathcomp))); /* The buildpathHPFS buffer has been allocated large enough to * hold the complete combined name, so there is no need to check * for OS filename size limit overflow within the copy loop. */ while ((*G.endHPFS = *p++) != '\0') { /* copy to HPFS filename */ ++G.endHPFS; } /* Now, check for OS filename size overflow. When detected, the * mapped HPFS name is truncated and a warning message is shown. */ if ((G.endHPFS-G.buildpathHPFS) >= FILNAMSIZ) { G.buildpathHPFS[FILNAMSIZ-1] = '\0'; Info(slide, 1, ((char *)slide, "checkdir warning: path too long; truncating\n \ %s\n -> %s\n", FnFilter1(G.filename), FnFilter2(G.buildpathHPFS))); error = MPN_INF_TRUNC; /* filename truncated */ } /* The buildpathFAT buffer has the same allocated size as the * buildpathHPFS buffer, so there is no need for an overflow check * within the following copy loop, either. */ if (G.pInfo->vollabel || !IsVolumeOldFAT(__G__ G.buildpathHPFS)) { /* copy to FAT filename, too */ p = pathcomp; while ((*G.endFAT = *p++) != '\0') ++G.endFAT; } else /* map into FAT fn, update endFAT */ map2fat(pathcomp, &G.endFAT); /* Check that the FAT path does not exceed the FILNAMSIZ limit, and * truncate when neccessary. * Note that truncation can only happen when the HPFS path (which is * never shorter than the FAT path) has been already truncated. * So, emission of the warning message and setting the error code * has already happened. */ if ((G.endFAT-G.buildpathFAT) >= FILNAMSIZ) G.buildpathFAT[FILNAMSIZ-1] = '\0'; Trace((stderr, "buildpathHPFS: %s\nbuildpathFAT: %s\n", FnFilter1(G.buildpathHPFS), FnFilter2(G.buildpathFAT))); return error; /* could check for existence, prompt for new name... */ } /* end if (FUNCTION == APPEND_NAME) */ /*--------------------------------------------------------------------------- INIT: allocate and initialize buffer space for the file currently being extracted. If file was renamed with an absolute path, don't prepend the extract-to path. ---------------------------------------------------------------------------*/ if (FUNCTION == INIT) { Trace((stderr, "initializing buildpathHPFS and buildpathFAT to ")); #ifdef ACORN_FTYPE_NFS if ((G.buildpathHPFS = (char *)malloc(G.fnlen+G.rootlen+ (uO.acorn_nfs_ext ? 5 : 1))) #else if ((G.buildpathHPFS = (char *)malloc(G.fnlen+G.rootlen+1)) #endif == NULL) return MPN_NOMEM; #ifdef ACORN_FTYPE_NFS if ((G.buildpathFAT = (char *)malloc(G.fnlen+G.rootlen+ (uO.acorn_nfs_ext ? 5 : 1))) #else if ((G.buildpathFAT = (char *)malloc(G.fnlen+G.rootlen+1)) #endif == NULL) { free(G.buildpathHPFS); return MPN_NOMEM; } if (G.pInfo->vollabel) { /* use root or renamed path, but don't store */ /* GRR: for network drives, do strchr() and return IZ_VOL_LABEL if not [1] */ if (G.renamed_fullpath && pathcomp[1] == ':') *G.buildpathHPFS = (char)ToLower(*pathcomp); else if (!G.renamed_fullpath && G.rootlen > 1 && G.rootpath[1] == ':') *G.buildpathHPFS = (char)ToLower(*G.rootpath); else { char tmpN[MAX_PATH], *tmpP; if (GetFullPathNameA(".", MAX_PATH, tmpN, &tmpP) > MAX_PATH) { /* by definition of MAX_PATH we should never get here */ Info(slide, 1, ((char *)slide, "checkdir warning: current dir path too long\n")); return MPN_INF_TRUNC; /* can't get drive letter */ } G.nLabelDrive = *tmpN - 'a' + 1; *G.buildpathHPFS = (char)(G.nLabelDrive - 1 + 'a'); } G.nLabelDrive = *G.buildpathHPFS - 'a' + 1; /* save for mapname() */ if (uO.volflag == 0 || *G.buildpathHPFS < 'a' /* no labels/bogus? */ || (uO.volflag == 1 && !isfloppy(G.nLabelDrive))) { /* !fixed */ free(G.buildpathHPFS); free(G.buildpathFAT); return MPN_VOL_LABEL; /* skipping with message */ } *G.buildpathHPFS = '\0'; } else if (G.renamed_fullpath) /* pathcomp = valid data */ strcpy(G.buildpathHPFS, pathcomp); else if (G.rootlen > 0) strcpy(G.buildpathHPFS, G.rootpath); else *G.buildpathHPFS = '\0'; G.endHPFS = G.buildpathHPFS; G.endFAT = G.buildpathFAT; while ((*G.endFAT = *G.endHPFS) != '\0') { ++G.endFAT; ++G.endHPFS; } Trace((stderr, "[%s]\n", FnFilter1(G.buildpathHPFS))); return MPN_OK; } /*--------------------------------------------------------------------------- ROOT: if appropriate, store the path in rootpath and create it if neces- sary; else assume it's a zipfile member and return. This path segment gets used in extracting all members from every zipfile specified on the command line. Note that under OS/2 and MS-DOS, if a candidate extract-to directory specification includes a drive letter (leading "x:"), it is treated just as if it had a trailing '/'--that is, one directory level will be created if the path doesn't exist, unless this is otherwise pro- hibited (e.g., freshening). ---------------------------------------------------------------------------*/ #if (!defined(SFX) || defined(SFX_EXDIR)) if (FUNCTION == ROOT) { Trace((stderr, "initializing root path to [%s]\n", FnFilter1(pathcomp))); if (pathcomp == NULL) { G.rootlen = 0; return MPN_OK; } if (G.rootlen > 0) /* rootpath was already set, nothing to do */ return MPN_OK; if ((G.rootlen = strlen(pathcomp)) > 0) { int had_trailing_pathsep=FALSE, has_drive=FALSE, add_dot=FALSE; char *tmproot; if ((tmproot = (char *)malloc(G.rootlen+3)) == (char *)NULL) { G.rootlen = 0; return MPN_NOMEM; } strcpy(tmproot, pathcomp); if (isalpha((uch)tmproot[0]) && tmproot[1] == ':') has_drive = TRUE; /* drive designator */ if (tmproot[G.rootlen-1] == '/' || tmproot[G.rootlen-1] == '\\') { tmproot[--G.rootlen] = '\0'; had_trailing_pathsep = TRUE; } if (has_drive && (G.rootlen == 2)) { if (!had_trailing_pathsep) /* i.e., original wasn't "x:/" */ add_dot = TRUE; /* relative path: add '.' before '/' */ } else if (G.rootlen > 0) { /* need not check "x:." and "x:/" */ if (SSTAT(tmproot, &G.statbuf) || !S_ISDIR(G.statbuf.st_mode)) { /* path does not exist */ if (!G.create_dirs /* || iswild(tmproot) */ ) { free(tmproot); G.rootlen = 0; /* treat as stored file */ return MPN_INF_SKIP; } /* create directory (could add loop here scanning tmproot * to create more than one level, but really necessary?) */ if (MKDIR(tmproot, 0777) == -1) { Info(slide, 1, ((char *)slide, "checkdir: cannot create extraction directory: %s\n", FnFilter1(tmproot))); free(tmproot); G.rootlen = 0; /* path didn't exist, tried to create, failed: */ /* file exists, or need 2+ subdir levels */ return MPN_ERR_SKIP; } } } if (add_dot) /* had just "x:", make "x:." */ tmproot[G.rootlen++] = '.'; tmproot[G.rootlen++] = '/'; tmproot[G.rootlen] = '\0'; if ((G.rootpath = (char *)realloc(tmproot, G.rootlen+1)) == NULL) { free(tmproot); G.rootlen = 0; return MPN_NOMEM; } Trace((stderr, "rootpath now = [%s]\n", FnFilter1(G.rootpath))); } return MPN_OK; } #endif /* !SFX || SFX_EXDIR */ /*--------------------------------------------------------------------------- END: free rootpath, immediately prior to program exit. ---------------------------------------------------------------------------*/ if (FUNCTION == END) { Trace((stderr, "freeing rootpath\n")); if (G.rootlen > 0) { free(G.rootpath); G.rootlen = 0; } return MPN_OK; } return MPN_INVALID; /* should never reach */ } /* end function checkdir() */ #ifndef SFX /*************************/ /* Function dateformat() */ /*************************/ int dateformat() { char df[2]; /* LOCALE_IDATE has a maximum value of 2 */ if (GetLocaleInfoA(LOCALE_USER_DEFAULT, LOCALE_IDATE, df, 2) != 0) { switch (df[0]) { case '0': return DF_MDY; case '1': return DF_DMY; case '2': return DF_YMD; } } return DF_MDY; } /****************************/ /* Function dateseparator() */ /****************************/ char dateseparator() { char df[2]; /* use only if it is one character */ if ((GetLocaleInfoA(LOCALE_USER_DEFAULT, LOCALE_SDATE, df, 2) != 0) && (df[0] != '\0')) return df[0]; else return '-'; } #ifndef WINDLL /************************/ /* Function version() */ /************************/ void version(__G) __GDEF { int len; #if (defined(_MSC_VER) || defined(__WATCOMC__) || defined(__DJGPP__)) char buf[80]; #if (defined(_MSC_VER) && (_MSC_VER > 900)) char buf2[80]; #endif #endif len = sprintf((char *)slide, CompiledWith, #if defined(_MSC_VER) /* MSC == VC++, but what about SDK compiler? */ (sprintf(buf, "Microsoft C %d.%02d ", _MSC_VER/100, _MSC_VER%100), buf), # if (_MSC_VER == 800) "(Visual C++ v1.1)", # elif (_MSC_VER == 850) "(Windows NT v3.5 SDK)", # elif (_MSC_VER == 900) "(Visual C++ v2.x)", # elif (_MSC_VER > 900) (sprintf(buf2, "(Visual C++ %d.%d)", _MSC_VER/100 - 6, _MSC_VER%100/10), buf2), # else "(bad version)", # endif #elif defined(__WATCOMC__) # if (__WATCOMC__ % 10 > 0) (sprintf(buf, "Watcom C/C++ %d.%02d", __WATCOMC__ / 100, __WATCOMC__ % 100), buf), "", # else (sprintf(buf, "Watcom C/C++ %d.%d", __WATCOMC__ / 100, (__WATCOMC__ % 100) / 10), buf), "", # endif #elif defined(__BORLANDC__) "Borland C++", # if (__BORLANDC__ < 0x0200) " 1.0", # elif (__BORLANDC__ == 0x0200) " 2.0", # elif (__BORLANDC__ == 0x0400) " 3.0", # elif (__BORLANDC__ == 0x0410) /* __TURBOC__ = 0x0310 */ " 3.1", # elif (__BORLANDC__ == 0x0452) /* __TURBOC__ = 0x0320 */ " 4.0 or 4.02", # elif (__BORLANDC__ == 0x0460) /* __TURBOC__ = 0x0340 */ " 4.5", # elif (__BORLANDC__ == 0x0500) /* __TURBOC__ = 0x0340 */ " 5.0", # elif (__BORLANDC__ == 0x0520) /* __TURBOC__ = 0x0520 */ " 5.2 (C++ Builder 1.0)", # elif (__BORLANDC__ == 0x0530) /* __TURBOC__ = 0x0530 */ " 5.3 (C++ Builder 3.0)", # elif (__BORLANDC__ == 0x0540) /* __TURBOC__ = 0x0540 */ " 5.4 (C++ Builder 4.0)", # elif (__BORLANDC__ == 0x0550) /* __TURBOC__ = 0x0550 */ " 5.5 (C++ Builder 5.0)", # elif (__BORLANDC__ == 0x0551) /* __TURBOC__ = 0x0551 */ " 5.5.1 (C++ Builder 5.0.1)", # elif (__BORLANDC__ == 0x0560) /* __TURBOC__ = 0x0560 */ " 6.0 (C++ Builder 6.0)", # else " later than 6.0", # endif #elif defined(__LCC__) "LCC-Win32", "", #elif defined(__GNUC__) # if defined(__RSXNT__) # if (defined(__DJGPP__) && !defined(__EMX__)) (sprintf(buf, "rsxnt(djgpp v%d.%02d) / gcc ", __DJGPP__, __DJGPP_MINOR__), buf), # elif defined(__DJGPP__) (sprintf(buf, "rsxnt(emx+djgpp v%d.%02d) / gcc ", __DJGPP__, __DJGPP_MINOR__), buf), # elif (defined(__GO32__) && !defined(__EMX__)) "rsxnt(djgpp v1.x) / gcc ", # elif defined(__GO32__) "rsxnt(emx + djgpp v1.x) / gcc ", # elif defined(__EMX__) "rsxnt(emx)+gcc ", # else "rsxnt(unknown) / gcc ", # endif # elif defined(__CYGWIN__) "cygnus win32 / gcc ", # elif defined(__MINGW32__) "mingw32 / gcc ", # else "gcc ", # endif __VERSION__, #else /* !_MSC_VER, !__WATCOMC__, !__BORLANDC__, !__LCC__, !__GNUC__ */ "unknown compiler (SDK?)", "", #endif /* ?compilers */ "\nWindows 9x / Windows NT/2K/XP/2K3", " (32-bit)", #ifdef __DATE__ " on ", __DATE__ #else "", "" #endif ); (*G.message)((zvoid *)&G, slide, (ulg)len, 0); return; } /* end function version() */ #endif /* !WINDLL */ #endif /* !SFX */ #ifdef MORE int screensize(int *tt_rows, int *tt_cols) { HANDLE hstdout; CONSOLE_SCREEN_BUFFER_INFO scr; hstdout = GetStdHandle(STD_OUTPUT_HANDLE); GetConsoleScreenBufferInfo(hstdout, &scr); if (tt_rows != NULL) *tt_rows = scr.srWindow.Bottom - scr.srWindow.Top + 1; if (tt_cols != NULL) *tt_cols = scr.srWindow.Right - scr.srWindow.Left + 1; return 0; /* signal success */ } #endif /* MORE */ #ifdef W32_STAT_BANDAID /* All currently known variants of WIN32 operating systems (Windows 95/98, * WinNT 3.x, 4.0, 5.x) have a nasty bug in the OS kernel concerning * conversions between UTC and local time: In the time conversion functions * of the Win32 API, the timezone offset (including seasonal daylight saving * shift) between UTC and local time evaluation is erratically based on the * current system time. The correct evaluation must determine the offset * value as it {was/is/will be} for the actual time to be converted. * * Newer versions of MS C runtime lib's stat() returns utc time-stamps so * that localtime(timestamp) corresponds to the (potentially false) local * time shown by the OS' system programs (Explorer, command shell dir, etc.) * The RSXNT port follows the same strategy, but fails to recognize the * access-time attribute. * * For the NTFS file system (and other filesystems that store time-stamps * as UTC values), this results in st_mtime (, st_{c|a}time) fields which * are not stable but vary according to the seasonal change of "daylight * saving time in effect / not in effect". * * Other C runtime libs (CygWin), or the crtdll.dll supplied with Win9x/NT * return the unix-time equivalent of the UTC FILETIME values as got back * from the Win32 API call. This time, return values from NTFS are correct * whereas utimes from files on (V)FAT volumes vary according to the DST * switches. * * To achieve timestamp consistency of UTC (UT extra field) values in * Zip archives, the Info-ZIP programs require work-around code for * proper time handling in stat() (and other time handling routines). * * However, nowadays most other programs on Windows systems use the * time conversion strategy of Microsofts C runtime lib "msvcrt.dll". * To improve interoperability in environments where a "consistent" (but * false) "UTC<-->LocalTime" conversion is preferred over "stable" time * stamps, the Info-ZIP specific time conversion handling can be * deactivated by defining the preprocessor flag NO_W32TIMES_IZFIX. */ /* stat() functions under Windows95 tend to fail for root directories. * * Watcom and Borland, at least, are affected by this bug. Watcom made * * a partial fix for 11.0 but still missed some cases. This substitute * * detects the case and fills in reasonable values. Otherwise we get * * effects like failure to extract to a root dir because it's not found. */ int zstat_win32(__W32STAT_GLOBALS__ const char *path, z_stat *buf) { if (!zstat(path, buf)) { /* stat was successful, now redo the time-stamp fetches */ #ifndef NO_W32TIMES_IZFIX int fs_uses_loctime = FStampIsLocTime(__G__ path); #endif HANDLE h; FILETIME Modft, Accft, Creft; #ifdef __RSXNT__ /* RSXNT/EMX C rtl uses OEM charset */ char *ansi_path = (char *)alloca(strlen(path) + 1); INTERN_TO_ISO(path, ansi_path); # define Ansi_Path ansi_path #else # define Ansi_Path path #endif TTrace((stdout, "stat(%s) finds modtime %08lx\n", path, buf->st_mtime)); h = CreateFileA(Ansi_Path, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (h != INVALID_HANDLE_VALUE) { BOOL ftOK = GetFileTime(h, &Creft, &Accft, &Modft); CloseHandle(h); if (ftOK) { FTTrace((stdout, "GetFileTime returned Modft", 0, &Modft)); FTTrace((stdout, "GetFileTime returned Creft", 0, &Creft)); #ifndef NO_W32TIMES_IZFIX if (!fs_uses_loctime) { /* On a filesystem that stores UTC timestamps, we refill * the time fields of the struct stat buffer by directly * using the UTC values as returned by the Win32 * GetFileTime() API call. */ NtfsFileTime2utime(&Modft, &(buf->st_mtime)); if (Accft.dwLowDateTime != 0 || Accft.dwHighDateTime != 0) NtfsFileTime2utime(&Accft, &(buf->st_atime)); else buf->st_atime = buf->st_mtime; if (Creft.dwLowDateTime != 0 || Creft.dwHighDateTime != 0) NtfsFileTime2utime(&Creft, &(buf->st_ctime)); else buf->st_ctime = buf->st_mtime; TTrace((stdout,"NTFS, recalculated modtime %08lx\n", buf->st_mtime)); } else #endif /* NO_W32TIMES_IZFIX */ { /* On VFAT and FAT-like filesystems, the FILETIME values * are converted back to the stable local time before * converting them to UTC unix time-stamps. */ VFatFileTime2utime(&Modft, &(buf->st_mtime)); if (Accft.dwLowDateTime != 0 || Accft.dwHighDateTime != 0) VFatFileTime2utime(&Accft, &(buf->st_atime)); else buf->st_atime = buf->st_mtime; if (Creft.dwLowDateTime != 0 || Creft.dwHighDateTime != 0) VFatFileTime2utime(&Creft, &(buf->st_ctime)); else buf->st_ctime = buf->st_mtime; TTrace((stdout, "VFAT, recalculated modtime %08lx\n", buf->st_mtime)); } } } # undef Ansi_Path return 0; } #ifdef W32_STATROOT_FIX else { DWORD flags; #ifdef __RSXNT__ /* RSXNT/EMX C rtl uses OEM charset */ char *ansi_path = (char *)alloca(strlen(path) + 1); INTERN_TO_ISO(path, ansi_path); # define Ansi_Path ansi_path #else # define Ansi_Path path #endif flags = GetFileAttributesA(Ansi_Path); if (flags != 0xFFFFFFFF && flags & FILE_ATTRIBUTE_DIRECTORY) { Trace((stderr, "\nstat(\"%s\",...) failed on existing directory\n", FnFilter1(path))); memset(buf, 0, sizeof(z_stat)); buf->st_atime = buf->st_ctime = buf->st_mtime = dos_to_unix_time(DOSTIME_MINIMUM); /* 1-1-80 */ buf->st_mode = S_IFDIR | S_IREAD | ((flags & FILE_ATTRIBUTE_READONLY) ? 0 : S_IWRITE); return 0; } /* assumes: stat() won't fail on non-dirs without good reason */ # undef Ansi_Path } #endif /* W32_STATROOT_FIX */ return -1; } #endif /* W32_STAT_BANDAID */ #ifdef W32_USE_IZ_TIMEZONE #include "timezone.h" #define SECSPERMIN 60 #define MINSPERHOUR 60 #define SECSPERHOUR (SECSPERMIN * MINSPERHOUR) static void conv_to_rule(LPSYSTEMTIME lpw32tm, struct rule * ZCONST ptrule); static void conv_to_rule(LPSYSTEMTIME lpw32tm, struct rule * ZCONST ptrule) { if (lpw32tm->wYear != 0) { ptrule->r_type = JULIAN_DAY; ptrule->r_day = ydays[lpw32tm->wMonth - 1] + lpw32tm->wDay; } else { ptrule->r_type = MONTH_NTH_DAY_OF_WEEK; ptrule->r_mon = lpw32tm->wMonth; ptrule->r_day = lpw32tm->wDayOfWeek; ptrule->r_week = lpw32tm->wDay; } ptrule->r_time = (long)lpw32tm->wHour * SECSPERHOUR + (long)(lpw32tm->wMinute * SECSPERMIN) + (long)lpw32tm->wSecond; } int GetPlatformLocalTimezone(register struct state * ZCONST sp, void (*fill_tzstate_from_rules)(struct state * ZCONST sp_res, ZCONST struct rule * ZCONST start, ZCONST struct rule * ZCONST end)) { TIME_ZONE_INFORMATION tzinfo; DWORD res; /* read current timezone settings from registry if TZ envvar missing */ res = GetTimeZoneInformation(&tzinfo); if (res != TIME_ZONE_ID_INVALID) { struct rule startrule, stoprule; conv_to_rule(&(tzinfo.StandardDate), &stoprule); conv_to_rule(&(tzinfo.DaylightDate), &startrule); sp->timecnt = 0; sp->ttis[0].tt_abbrind = 0; if ((sp->charcnt = WideCharToMultiByte(CP_ACP, 0, tzinfo.StandardName, -1, sp->chars, sizeof(sp->chars), NULL, NULL)) == 0) sp->chars[sp->charcnt++] = '\0'; sp->ttis[1].tt_abbrind = sp->charcnt; sp->charcnt += WideCharToMultiByte(CP_ACP, 0, tzinfo.DaylightName, -1, sp->chars + sp->charcnt, sizeof(sp->chars) - sp->charcnt, NULL, NULL); if ((sp->charcnt - sp->ttis[1].tt_abbrind) == 0) sp->chars[sp->charcnt++] = '\0'; sp->ttis[0].tt_gmtoff = - (tzinfo.Bias + tzinfo.StandardBias) * MINSPERHOUR; sp->ttis[1].tt_gmtoff = - (tzinfo.Bias + tzinfo.DaylightBias) * MINSPERHOUR; sp->ttis[0].tt_isdst = 0; sp->ttis[1].tt_isdst = 1; sp->typecnt = (startrule.r_mon == 0 && stoprule.r_mon == 0) ? 1 : 2; if (sp->typecnt > 1) (*fill_tzstate_from_rules)(sp, &startrule, &stoprule); return TRUE; } return FALSE; } #endif /* W32_USE_IZ_TIMEZONE */ #endif /* !FUNZIP */ #ifndef WINDLL /* This replacement getch() function was originally created for Watcom C * and then additionally used with CYGWIN. Since UnZip 5.4, all other Win32 * ports apply this replacement rather that their supplied getch() (or * alike) function. There are problems with unabsorbed LF characters left * over in the keyboard buffer under Win95 (and 98) when ENTER was pressed. * (Under Win95, ENTER returns two(!!) characters: CR-LF.) This problem * does not appear when run on a WinNT console prompt! */ /* Watcom 10.6's getch() does not handle Alt+. */ /* Note that if PASSWD_FROM_STDIN is defined, the file containing */ /* the password must have a carriage return after the word, not a */ /* Unix-style newline (linefeed only). This discards linefeeds. */ int getch_win32(void) { HANDLE stin; DWORD rc; unsigned char buf[2]; int ret = -1; DWORD odemode = ~(DWORD)0; # ifdef PASSWD_FROM_STDIN stin = GetStdHandle(STD_INPUT_HANDLE); # else stin = CreateFileA("CONIN$", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); if (stin == INVALID_HANDLE_VALUE) return -1; # endif if (GetConsoleMode(stin, &odemode)) SetConsoleMode(stin, ENABLE_PROCESSED_INPUT); /* raw except ^C noticed */ if (ReadFile(stin, &buf, 1, &rc, NULL) && rc == 1) ret = buf[0]; /* when the user hits return we get CR LF. We discard the LF, not the CR, * because when we call this for the first time after a previous input * such as the one for "replace foo? [y]es, ..." the LF may still be in * the input stream before whatever the user types at our prompt. */ if (ret == '\n') if (ReadFile(stin, &buf, 1, &rc, NULL) && rc == 1) ret = buf[0]; if (odemode != ~(DWORD)0) SetConsoleMode(stin, odemode); # ifndef PASSWD_FROM_STDIN CloseHandle(stin); # endif return ret; } #endif /* !WINDLL */ #if (defined(UNICODE_SUPPORT) && !defined(FUNZIP)) /* convert wide character string to multi-byte character string */ char *wide_to_local_string(wide_string, escape_all) ZCONST zwchar *wide_string; int escape_all; { int i; wchar_t wc; int bytes_char; int default_used; int wsize = 0; int max_bytes = 9; char buf[9]; char *buffer = NULL; char *local_string = NULL; for (wsize = 0; wide_string[wsize]; wsize++) ; if (max_bytes < MB_CUR_MAX) max_bytes = MB_CUR_MAX; if ((buffer = (char *)malloc(wsize * max_bytes + 1)) == NULL) { return NULL; } /* convert it */ buffer[0] = '\0'; for (i = 0; i < wsize; i++) { if (sizeof(wchar_t) < 4 && wide_string[i] > 0xFFFF) { /* wchar_t probably 2 bytes */ /* could do surrogates if state_dependent and wctomb can do */ wc = zwchar_to_wchar_t_default_char; } else { wc = (wchar_t)wide_string[i]; } /* Unter some vendor's C-RTL, the Wide-to-MultiByte conversion functions * (like wctomb() et. al.) do not use the same codepage as the other * string arguments I/O functions (fopen, mkdir, rmdir etc.). * Therefore, we have to fall back to the underlying Win32-API call to * achieve a consistent behaviour for all supported compiler environments. * Failing RTLs are for example: * Borland (locale uses OEM-CP as default, but I/O functions expect ANSI * names) * Watcom (only "C" locale, wctomb() always uses OEM CP) * (in other words: all supported environments except the Microsoft RTLs) */ bytes_char = WideCharToMultiByte( CP_ACP, WC_COMPOSITECHECK, &wc, 1, (LPSTR)buf, sizeof(buf), NULL, &default_used); if (default_used) bytes_char = -1; if (escape_all) { if (bytes_char == 1 && (uch)buf[0] <= 0x7f) { /* ASCII */ strncat(buffer, buf, 1); } else { /* use escape for wide character */ char *escape_string = wide_to_escape_string(wide_string[i]); strcat(buffer, escape_string); free(escape_string); } } else if (bytes_char > 0) { /* multi-byte char */ strncat(buffer, buf, bytes_char); } else { /* no MB for this wide */ /* use escape for wide character */ char *escape_string = wide_to_escape_string(wide_string[i]); strcat(buffer, escape_string); free(escape_string); } } if ((local_string = (char *)realloc(buffer, strlen(buffer) + 1)) == NULL) { free(buffer); return NULL; } return local_string; } #if 0 wchar_t *utf8_to_wchar_string(utf8_string) char *utf8_string; /* path to get utf-8 name for */ { wchar_t *qw; int ulen; int ulenw; if (utf8_string == NULL) return NULL; /* get length */ ulenw = MultiByteToWideChar( CP_UTF8, /* UTF-8 code page */ 0, /* flags for character-type options */ utf8_string, /* string to convert */ -1, /* string length (-1 = NULL terminated) */ NULL, /* buffer */ 0 ); /* buffer length (0 = return length) */ if (ulenw == 0) { /* failed */ return NULL; } ulenw++; /* get length in bytes */ ulen = sizeof(wchar_t) * (ulenw + 1); if ((qw = (wchar_t *)malloc(ulen + 1)) == NULL) { return NULL; } /* convert multibyte to wide */ ulen = MultiByteToWideChar( CP_UTF8, /* UTF-8 code page */ 0, /* flags for character-type options */ utf8_string, /* string to convert */ -1, /* string length (-1 = NULL terminated) */ qw, /* buffer */ ulenw); /* buffer length (0 = return length) */ if (ulen == 0) { /* failed */ free(qw); return NULL; } return qw; } wchar_t *local_to_wchar_string(local_string) char *local_string; /* path of local name */ { wchar_t *qw; int ulen; int ulenw; if (local_string == NULL) return NULL; /* get length */ ulenw = MultiByteToWideChar( CP_ACP, /* ANSI code page */ 0, /* flags for character-type options */ local_string, /* string to convert */ -1, /* string length (-1 = NULL terminated) */ NULL, /* buffer */ 0 ); /* buffer length (0 = return length) */ if (ulenw == 0) { /* failed */ return NULL; } ulenw++; /* get length in bytes */ ulen = sizeof(wchar_t) * (ulenw + 1); if ((qw = (wchar_t *)malloc(ulen + 1)) == NULL) { return NULL; } /* convert multibyte to wide */ ulen = MultiByteToWideChar( CP_ACP, /* ANSI code page */ 0, /* flags for character-type options */ local_string, /* string to convert */ -1, /* string length (-1 = NULL terminated) */ qw, /* buffer */ ulenw); /* buffer length (0 = return length) */ if (ulen == 0) { /* failed */ free(qw); return NULL; } return qw; } #endif /* 0 */ #endif /* UNICODE_SUPPORT && !FUNZIP */ /* --------------------------------------------------- */ /* Large File Support * * Initial functions by E. Gordon and R. Nausedat * 9/10/2003 * Lifted from Zip 3b, win32.c and place here by Myles Bennett * 7/6/2004 * * These implement 64-bit file support for Windows. The * defines and headers are in win32/w32cfg.h. * * Moved to win32i64.c by Mike White to avoid conflicts in * same name functions in WiZ using UnZip and Zip libraries. * 9/25/2003 */ Carla-2.4.2/data/windows/unzipfx-carla-control/win32/win32i64.c000066400000000000000000000067741420416754300240240ustar00rootroot00000000000000/* Copyright (c) 1990-2009 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2009-Jan-02 or later (the contents of which are also included in zip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- win32/win32i64.c - UnZip 6 64-bit filesize support for WIN32 Zip and UnZip. ---------------------------------------------------------------------------*/ #include "../zip.h" /* --------------------------------------------------- */ /* Large File Support * * Initial functions by E. Gordon and R. Nausedat * 9/10/2003 * * These implement 64-bit file support for Windows. The * defines and headers are in win32/osdep.h. * * These moved from win32.c by Mike White to avoid conflicts * in WiZ of same name functions in UnZip and Zip libraries. * 9/25/04 EG */ #if defined(LARGE_FILE_SUPPORT) && !defined(__CYGWIN__) # ifdef USE_STRM_INPUT # ifndef zftello /* 64-bit buffered ftello * * Win32 does not provide a 64-bit buffered * ftell (in the published api anyway) so below provides * hopefully close version. * We have not gotten _telli64 to work with buffered * streams. Below cheats by using fgetpos improperly and * may not work on other ports. */ zoff_t zftello(stream) FILE *stream; { fpos_t fpos = 0; if (fgetpos(stream, &fpos) != 0) { return -1L; } else { return fpos; } } # endif /* ndef zftello */ # ifndef zfseeko /* 64-bit buffered fseeko * * Win32 does not provide a 64-bit buffered * fseeko, so use _lseeki64 and fflush. Note * that SEEK_CUR can lose track of location * if fflush is done between the last buffered * io and this call. */ int zfseeko(stream, offset, origin) FILE *stream; zoff_t offset; int origin; { /* fseek() or its replacements are supposed to clear the eof status of the stream. fflush() and _lseeki64() do not touch the stream's eof flag, so we have to do it manually. */ #if ((defined(_MSC_VER) && (_MSC_VER >= 1200)) || \ (defined(__MINGW32__) && defined(__MSVCRT_VERSION__))) /* For the MSC environment (VS 6 or higher), and for recent releases of the MinGW environment, we "know" the internals of the FILE structure. So, we can clear just the EOF bit of the status flag. */ stream->_flag &= ~_IOEOF; #else /* Unfortunately, there is no standard "cleareof()" function, so we have to use clearerr(). This has the unwanted side effect of clearing the ferror() state as well. */ clearerr(stream); #endif if (origin == SEEK_CUR) { /* instead of synching up lseek easier just to figure and use an absolute offset */ offset += zftello(stream); origin = SEEK_SET; } fflush(stream); if (_lseeki64(fileno(stream), offset, origin) == (zoff_t)-1L) { return -1; } else { return 0; } } # endif /* ndef fseeko */ # endif /* USE_STRM_INPUT */ #endif /* Win32 LARGE_FILE_SUPPORT */ #if 0 FILE* zfopen(filename, mode) const char *filename; const char *mode; { FILE* fTemp; fTemp = fopen(filename, mode); if( fTemp == NULL ) return NULL; /* sorry, could not make VC60 and its rtl work properly without setting the * file buffer to NULL. the problem seems to be _telli64 which seems to * return the max stream position, comments are welcome */ setbuf(fTemp, NULL); return fTemp; } #endif /* --------------------------------------------------- */ Carla-2.4.2/data/windows/unzipfx-carla-control/zip.h000066400000000000000000000014431420416754300223700ustar00rootroot00000000000000/* Copyright (c) 1990-2005 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2003-May-08 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /* This is a dummy zip.h to allow the source files shared with Zip (crypt.c, crc32.c, ttyio.c, win32/win32i64.c) to compile for UnZip. (In case you are looking for the Info-ZIP license, please follow the pointers above.) */ #ifndef __zip_h /* don't include more than once */ #define __zip_h #define UNZIP_INTERNAL #include "unzip.h" #define local static #define ZE_MEM PK_MEM #define ziperr(c, h) return #endif /* !__zip_h */ Carla-2.4.2/data/windows/unzipfx-carla-control/zipinfo.c000066400000000000000000002761221420416754300232470ustar00rootroot00000000000000/* Copyright (c) 1990-2009 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2009-Jan-02 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- zipinfo.c Greg Roelofs et al. This file contains all of the ZipInfo-specific listing routines for UnZip. Contains: zi_opts() zi_end_central() zipinfo() zi_long() zi_short() zi_time() ---------------------------------------------------------------------------*/ #define UNZIP_INTERNAL #include "unzip.h" #ifndef NO_ZIPINFO /* strings use up too much space in small-memory systems */ /* Define OS-specific attributes for use on ALL platforms--the S_xxxx * versions of these are defined differently (or not defined) by different * compilers and operating systems. */ #define UNX_IFMT 0170000 /* Unix file type mask */ #define UNX_IFREG 0100000 /* Unix regular file */ #define UNX_IFSOCK 0140000 /* Unix socket (BSD, not SysV or Amiga) */ #define UNX_IFLNK 0120000 /* Unix symbolic link (not SysV, Amiga) */ #define UNX_IFBLK 0060000 /* Unix block special (not Amiga) */ #define UNX_IFDIR 0040000 /* Unix directory */ #define UNX_IFCHR 0020000 /* Unix character special (not Amiga) */ #define UNX_IFIFO 0010000 /* Unix fifo (BCC, not MSC or Amiga) */ #define UNX_ISUID 04000 /* Unix set user id on execution */ #define UNX_ISGID 02000 /* Unix set group id on execution */ #define UNX_ISVTX 01000 /* Unix directory permissions control */ #define UNX_ENFMT UNX_ISGID /* Unix record locking enforcement flag */ #define UNX_IRWXU 00700 /* Unix read, write, execute: owner */ #define UNX_IRUSR 00400 /* Unix read permission: owner */ #define UNX_IWUSR 00200 /* Unix write permission: owner */ #define UNX_IXUSR 00100 /* Unix execute permission: owner */ #define UNX_IRWXG 00070 /* Unix read, write, execute: group */ #define UNX_IRGRP 00040 /* Unix read permission: group */ #define UNX_IWGRP 00020 /* Unix write permission: group */ #define UNX_IXGRP 00010 /* Unix execute permission: group */ #define UNX_IRWXO 00007 /* Unix read, write, execute: other */ #define UNX_IROTH 00004 /* Unix read permission: other */ #define UNX_IWOTH 00002 /* Unix write permission: other */ #define UNX_IXOTH 00001 /* Unix execute permission: other */ #define VMS_IRUSR UNX_IRUSR /* VMS read/owner */ #define VMS_IWUSR UNX_IWUSR /* VMS write/owner */ #define VMS_IXUSR UNX_IXUSR /* VMS execute/owner */ #define VMS_IRGRP UNX_IRGRP /* VMS read/group */ #define VMS_IWGRP UNX_IWGRP /* VMS write/group */ #define VMS_IXGRP UNX_IXGRP /* VMS execute/group */ #define VMS_IROTH UNX_IROTH /* VMS read/other */ #define VMS_IWOTH UNX_IWOTH /* VMS write/other */ #define VMS_IXOTH UNX_IXOTH /* VMS execute/other */ #define AMI_IFMT 06000 /* Amiga file type mask */ #define AMI_IFDIR 04000 /* Amiga directory */ #define AMI_IFREG 02000 /* Amiga regular file */ #define AMI_IHIDDEN 00200 /* to be supported in AmigaDOS 3.x */ #define AMI_ISCRIPT 00100 /* executable script (text command file) */ #define AMI_IPURE 00040 /* allow loading into resident memory */ #define AMI_IARCHIVE 00020 /* not modified since bit was last set */ #define AMI_IREAD 00010 /* can be opened for reading */ #define AMI_IWRITE 00004 /* can be opened for writing */ #define AMI_IEXECUTE 00002 /* executable image, a loadable runfile */ #define AMI_IDELETE 00001 /* can be deleted */ #define THS_IFMT 0xF000 /* Theos file type mask */ #define THS_IFIFO 0x1000 /* pipe */ #define THS_IFCHR 0x2000 /* char device */ #define THS_IFSOCK 0x3000 /* socket */ #define THS_IFDIR 0x4000 /* directory */ #define THS_IFLIB 0x5000 /* library */ #define THS_IFBLK 0x6000 /* block device */ #define THS_IFREG 0x8000 /* regular file */ #define THS_IFREL 0x9000 /* relative (direct) */ #define THS_IFKEY 0xA000 /* keyed */ #define THS_IFIND 0xB000 /* indexed */ #define THS_IFRND 0xC000 /* ???? */ #define THS_IFR16 0xD000 /* 16 bit real mode program */ #define THS_IFP16 0xE000 /* 16 bit protected mode prog */ #define THS_IFP32 0xF000 /* 32 bit protected mode prog */ #define THS_IMODF 0x0800 /* modified */ #define THS_INHID 0x0400 /* not hidden */ #define THS_IEUSR 0x0200 /* erase permission: owner */ #define THS_IRUSR 0x0100 /* read permission: owner */ #define THS_IWUSR 0x0080 /* write permission: owner */ #define THS_IXUSR 0x0040 /* execute permission: owner */ #define THS_IROTH 0x0004 /* read permission: other */ #define THS_IWOTH 0x0002 /* write permission: other */ #define THS_IXOTH 0x0001 /* execute permission: other */ #ifdef OLD_THEOS_EXTRA # include "theos/oldstat.h" #endif #ifndef NSK_UNSTRUCTURED # define NSK_UNSTRUCTURED 0 #endif #ifndef NSK_OBJECTFILECODE # define NSK_OBJECTFILECODE 100 #endif #ifndef NSK_EDITFILECODE # define NSK_EDITFILECODE 101 #endif #define LFLAG 3 /* short "ls -l" type listing */ static int zi_long OF((__GPRO__ zusz_t *pEndprev, int error_in_archive)); static int zi_short OF((__GPRO)); static void zi_showMacTypeCreator OF((__GPRO__ uch *ebfield)); static char *zi_time OF((__GPRO__ ZCONST ulg *datetimez, ZCONST time_t *modtimez, char *d_t_str)); /**********************************************/ /* Strings used in zipinfo.c (ZipInfo half) */ /**********************************************/ static ZCONST char nullStr[] = ""; static ZCONST char PlurSufx[] = "s"; static ZCONST char Far ZipInfHeader2[] = "Zip file size: %s bytes, number of entries: %s\n"; static ZCONST char Far EndCentDirRec[] = "\nEnd-of-central-directory record:\n"; static ZCONST char Far LineSeparators[] = "-------------------------------\n\n"; static ZCONST char Far ZipFSizeVerbose[] = "\ Zip archive file size: %s (%sh)\n"; static ZCONST char Far ActOffsetCentDir[] = "\ Actual end-cent-dir record offset: %s (%sh)\n\ Expected end-cent-dir record offset: %s (%sh)\n\ (based on the length of the central directory and its expected offset)\n\n"; static ZCONST char Far SinglePartArchive1[] = "\ This zipfile constitutes the sole disk of a single-part archive; its\n\ central directory contains %s %s.\n\ The central directory is %s (%sh) bytes long,\n"; static ZCONST char Far SinglePartArchive2[] = "\ and its (expected) offset in bytes from the beginning of the zipfile\n\ is %s (%sh).\n\n"; static ZCONST char Far MultiPartArchive1[] = "\ This zipfile constitutes disk %lu of a multi-part archive. The central\n\ directory starts on disk %lu at an offset within that archive part\n"; static ZCONST char Far MultiPartArchive2[] = "\ of %s (%sh) bytes. The entire\n\ central directory is %s (%sh) bytes long.\n"; static ZCONST char Far MultiPartArchive3[] = "\ %s of the archive entries %s contained within this zipfile volume,\n\ out of a total of %s %s.\n\n"; static ZCONST char Far CentralDirEntry[] = "\nCentral directory entry #%lu:\n---------------------------\n\n"; static ZCONST char Far ZipfileStats[] = "%lu file%s, %s bytes uncompressed, %s bytes compressed: %s%d.%d%%\n"; /* zi_long() strings */ static ZCONST char Far OS_FAT[] = "MS-DOS, OS/2 or NT FAT"; static ZCONST char Far OS_Amiga[] = "Amiga"; static ZCONST char Far OS_VMS[] = "VMS"; static ZCONST char Far OS_Unix[] = "Unix"; static ZCONST char Far OS_VMCMS[] = "VM/CMS"; static ZCONST char Far OS_AtariST[] = "Atari ST"; static ZCONST char Far OS_HPFS[] = "OS/2 or NT HPFS"; static ZCONST char Far OS_Macintosh[] = "Macintosh HFS"; static ZCONST char Far OS_ZSystem[] = "Z-System"; static ZCONST char Far OS_CPM[] = "CP/M"; static ZCONST char Far OS_TOPS20[] = "TOPS-20"; static ZCONST char Far OS_NTFS[] = "NTFS"; static ZCONST char Far OS_QDOS[] = "SMS/QDOS"; static ZCONST char Far OS_Acorn[] = "Acorn RISC OS"; static ZCONST char Far OS_MVS[] = "MVS"; static ZCONST char Far OS_VFAT[] = "Win32 VFAT"; static ZCONST char Far OS_AtheOS[] = "AtheOS"; static ZCONST char Far OS_BeOS[] = "BeOS"; static ZCONST char Far OS_Tandem[] = "Tandem NSK"; static ZCONST char Far OS_Theos[] = "Theos"; static ZCONST char Far OS_MacDarwin[] = "Mac OS/X (Darwin)"; #ifdef OLD_THEOS_EXTRA static ZCONST char Far OS_TheosOld[] = "Theos (Old)"; #endif /* OLD_THEOS_EXTRA */ static ZCONST char Far MthdNone[] = "none (stored)"; static ZCONST char Far MthdShrunk[] = "shrunk"; static ZCONST char Far MthdRedF1[] = "reduced (factor 1)"; static ZCONST char Far MthdRedF2[] = "reduced (factor 2)"; static ZCONST char Far MthdRedF3[] = "reduced (factor 3)"; static ZCONST char Far MthdRedF4[] = "reduced (factor 4)"; static ZCONST char Far MthdImplode[] = "imploded"; static ZCONST char Far MthdToken[] = "tokenized"; static ZCONST char Far MthdDeflate[] = "deflated"; static ZCONST char Far MthdDeflat64[] = "deflated (enhanced-64k)"; static ZCONST char Far MthdDCLImplode[] = "imploded (PK DCL)"; static ZCONST char Far MthdBZip2[] = "bzipped"; static ZCONST char Far MthdLZMA[] = "LZMA-ed"; static ZCONST char Far MthdTerse[] = "tersed (IBM)"; static ZCONST char Far MthdLZ77[] = "LZ77-compressed (IBM)"; static ZCONST char Far MthdWavPack[] = "WavPacked"; static ZCONST char Far MthdPPMd[] = "PPMd-ed"; static ZCONST char Far DeflNorm[] = "normal"; static ZCONST char Far DeflMax[] = "maximum"; static ZCONST char Far DeflFast[] = "fast"; static ZCONST char Far DeflSFast[] = "superfast"; static ZCONST char Far ExtraBytesPreceding[] = " There are an extra %s bytes preceding this file.\n\n"; static ZCONST char Far UnknownNo[] = "unknown (%d)"; #ifdef ZIP64_SUPPORT static ZCONST char Far LocalHeaderOffset[] = "\n offset of local header from start of archive: %s\n\ (%sh) bytes\n"; #else static ZCONST char Far LocalHeaderOffset[] = "\n offset of local header from start of archive: %s (%sh) bytes\n"; #endif static ZCONST char Far HostOS[] = " file system or operating system of origin: %s\n"; static ZCONST char Far EncodeSWVer[] = " version of encoding software: %u.%u\n"; static ZCONST char Far MinOSCompReq[] = " minimum file system compatibility required: %s\n"; static ZCONST char Far MinSWVerReq[] = " minimum software version required to extract: %u.%u\n"; static ZCONST char Far CompressMethod[] = " compression method: %s\n"; static ZCONST char Far SlideWindowSizeImplode[] = " size of sliding dictionary (implosion): %cK\n"; static ZCONST char Far ShannonFanoTrees[] = " number of Shannon-Fano trees (implosion): %c\n"; static ZCONST char Far CompressSubtype[] = " compression sub-type (deflation): %s\n"; static ZCONST char Far FileSecurity[] = " file security status: %sencrypted\n"; static ZCONST char Far ExtendedLocalHdr[] = " extended local header: %s\n"; static ZCONST char Far FileModDate[] = " file last modified on (DOS date/time): %s\n"; #ifdef USE_EF_UT_TIME static ZCONST char Far UT_FileModDate[] = " file last modified on (UT extra field modtime): %s %s\n"; static ZCONST char Far LocalTime[] = "local"; #ifndef NO_GMTIME static ZCONST char Far GMTime[] = "UTC"; #endif #endif /* USE_EF_UT_TIME */ static ZCONST char Far CRC32Value[] = " 32-bit CRC value (hex): %.8lx\n"; static ZCONST char Far CompressedFileSize[] = " compressed size: %s bytes\n"; static ZCONST char Far UncompressedFileSize[] = " uncompressed size: %s bytes\n"; static ZCONST char Far FilenameLength[] = " length of filename: %u characters\n"; static ZCONST char Far ExtraFieldLength[] = " length of extra field: %u bytes\n"; static ZCONST char Far FileCommentLength[] = " length of file comment: %u characters\n"; static ZCONST char Far FileDiskNum[] = " disk number on which file begins: disk %lu\n"; static ZCONST char Far ApparentFileType[] = " apparent file type: %s\n"; static ZCONST char Far VMSFileAttributes[] = " VMS file attributes (%06o octal): %s\n"; static ZCONST char Far AmigaFileAttributes[] = " Amiga file attributes (%06o octal): %s\n"; static ZCONST char Far UnixFileAttributes[] = " Unix file attributes (%06o octal): %s\n"; static ZCONST char Far NonMSDOSFileAttributes[] = " non-MSDOS external file attributes: %06lX hex\n"; static ZCONST char Far MSDOSFileAttributes[] = " MS-DOS file attributes (%02X hex): none\n"; static ZCONST char Far MSDOSFileAttributesRO[] = " MS-DOS file attributes (%02X hex): read-only\n"; static ZCONST char Far MSDOSFileAttributesAlpha[] = " MS-DOS file attributes (%02X hex): %s%s%s%s%s%s%s%s\n"; static ZCONST char Far TheosFileAttributes[] = " Theos file attributes (%04X hex): %s\n"; static ZCONST char Far TheosFTypLib[] = "Library "; static ZCONST char Far TheosFTypDir[] = "Directory "; static ZCONST char Far TheosFTypReg[] = "Sequential "; static ZCONST char Far TheosFTypRel[] = "Direct "; static ZCONST char Far TheosFTypKey[] = "Keyed "; static ZCONST char Far TheosFTypInd[] = "Indexed "; static ZCONST char Far TheosFTypR16[] = " 86 program "; static ZCONST char Far TheosFTypP16[] = "286 program "; static ZCONST char Far TheosFTypP32[] = "386 program "; static ZCONST char Far TheosFTypUkn[] = "??? "; static ZCONST char Far ExtraFieldTrunc[] = "\n\ error: EF data block (type 0x%04x) size %u exceeds remaining extra field\n\ space %u; block length has been truncated.\n"; static ZCONST char Far ExtraFields[] = "\n\ The central-directory extra field contains:"; static ZCONST char Far ExtraFieldType[] = "\n\ - A subfield with ID 0x%04x (%s) and %u data bytes"; static ZCONST char Far efPKSZ64[] = "PKWARE 64-bit sizes"; static ZCONST char Far efAV[] = "PKWARE AV"; static ZCONST char Far efOS2[] = "OS/2"; static ZCONST char Far efPKVMS[] = "PKWARE VMS"; static ZCONST char Far efPKWin32[] = "PKWARE Win32"; static ZCONST char Far efPKUnix[] = "PKWARE Unix"; static ZCONST char Far efIZVMS[] = "Info-ZIP VMS"; static ZCONST char Far efIZUnix[] = "old Info-ZIP Unix/OS2/NT"; static ZCONST char Far efIZUnix2[] = "Unix UID/GID (16-bit)"; static ZCONST char Far efIZUnix3[] = "Unix UID/GID (any size)"; static ZCONST char Far efTime[] = "universal time"; static ZCONST char Far efU8Path[] = "UTF8 path name"; static ZCONST char Far efU8Commnt[] = "UTF8 entry comment"; static ZCONST char Far efJLMac[] = "old Info-ZIP Macintosh"; static ZCONST char Far efMac3[] = "new Info-ZIP Macintosh"; static ZCONST char Far efZipIt[] = "ZipIt Macintosh"; static ZCONST char Far efSmartZip[] = "SmartZip Macintosh"; static ZCONST char Far efZipIt2[] = "ZipIt Macintosh (short)"; static ZCONST char Far efVMCMS[] = "VM/CMS"; static ZCONST char Far efMVS[] = "MVS"; static ZCONST char Far efACL[] = "OS/2 ACL"; static ZCONST char Far efNTSD[] = "Security Descriptor"; static ZCONST char Far efAtheOS[] = "AtheOS"; static ZCONST char Far efBeOS[] = "BeOS"; static ZCONST char Far efQDOS[] = "SMS/QDOS"; static ZCONST char Far efAOSVS[] = "AOS/VS"; static ZCONST char Far efSpark[] = "Acorn SparkFS"; static ZCONST char Far efMD5[] = "Fred Kantor MD5"; static ZCONST char Far efASiUnix[] = "ASi Unix"; static ZCONST char Far efTandem[] = "Tandem NSK"; static ZCONST char Far efTheos[] = "Theos"; static ZCONST char Far efUnknown[] = "unknown"; static ZCONST char Far OS2EAs[] = ".\n\ The local extra field has %lu bytes of OS/2 extended attributes.\n\ (May not match OS/2 \"dir\" amount due to storage method)"; static ZCONST char Far izVMSdata[] = ". The extra\n\ field is %s and has %u bytes of VMS %s information%s"; static ZCONST char Far izVMSstored[] = "stored"; static ZCONST char Far izVMSrleenc[] = "run-length encoded"; static ZCONST char Far izVMSdeflat[] = "deflated"; static ZCONST char Far izVMScunknw[] = "compressed(?)"; static ZCONST char Far *izVMScomp[4] = {izVMSstored, izVMSrleenc, izVMSdeflat, izVMScunknw}; static ZCONST char Far ACLdata[] = ".\n\ The local extra field has %lu bytes of access control list information"; static ZCONST char Far NTSDData[] = ".\n\ The local extra field has %lu bytes of NT security descriptor data"; static ZCONST char Far UTdata[] = ".\n\ The local extra field has UTC/GMT %s time%s"; static ZCONST char Far UTmodification[] = "modification"; static ZCONST char Far UTaccess[] = "access"; static ZCONST char Far UTcreation[] = "creation"; static ZCONST char Far U8PthCmnComplete[] = ".\n\ The UTF8 data of the extra field (V%u, ASCII name CRC `%.8lx') are:\n "; static ZCONST char Far U8PthCmnF24[] = ". The first\n\ 24 UTF8 bytes in the extra field (V%u, ASCII name CRC `%.8lx') are:\n "; static ZCONST char Far ZipItFname[] = ".\n\ The Mac long filename is %s"; static ZCONST char Far Mac3data[] = ".\n\ The local extra field has %lu bytes of %scompressed Macintosh\n\ finder attributes"; /* MacOSdata[] is used by EF_MAC3, EF_ZIPIT, EF_ZIPIT2 and EF_JLEE e. f. */ static ZCONST char Far MacOSdata[] = ".\n\ The associated file has type code `%c%c%c%c' and creator code `%c%c%c%c'"; static ZCONST char Far MacOSdata1[] = ".\n\ The associated file has type code `0x%lx' and creator code `0x%lx'"; static ZCONST char Far MacOSJLEEflags[] = ".\n File is marked as %s"; static ZCONST char Far MacOS_RF[] = "Resource-fork"; static ZCONST char Far MacOS_DF[] = "Data-fork"; static ZCONST char Far MacOSMAC3flags[] = ".\n\ File is marked as %s, File Dates are in %d Bit"; static ZCONST char Far AtheOSdata[] = ".\n\ The local extra field has %lu bytes of %scompressed AtheOS file attributes"; static ZCONST char Far BeOSdata[] = ".\n\ The local extra field has %lu bytes of %scompressed BeOS file attributes"; /* The associated file has type code `%c%c%c%c' and creator code `%c%c%c%c'" */ static ZCONST char Far QDOSdata[] = ".\n\ The QDOS extra field subtype is `%c%c%c%c'"; static ZCONST char Far AOSVSdata[] = ".\n\ The AOS/VS extra field revision is %d.%d"; static ZCONST char Far TandemUnstr[] = "Unstructured"; static ZCONST char Far TandemRel[] = "Relative"; static ZCONST char Far TandemEntry[] = "Entry Sequenced"; static ZCONST char Far TandemKey[] = "Key Sequenced"; static ZCONST char Far TandemEdit[] = "Edit"; static ZCONST char Far TandemObj[] = "Object"; static ZCONST char Far *TandemFileformat[6] = {TandemUnstr, TandemRel, TandemEntry, TandemKey, TandemEdit, TandemObj}; static ZCONST char Far Tandemdata[] = ".\n\ The file was originally a Tandem %s file, with file code %u"; static ZCONST char Far MD5data[] = ".\n\ The 128-bit MD5 signature is %s"; #ifdef CMS_MVS static ZCONST char Far VmMvsExtraField[] = ".\n\ The stored file open mode (FLDATA TYPE) is \"%s\""; static ZCONST char Far VmMvsInvalid[] = "[invalid]"; #endif /* CMS_MVS */ static ZCONST char Far First20[] = ". The first\n 20 are: "; static ZCONST char Far ColonIndent[] = ":\n "; static ZCONST char Far efFormat[] = " %02x"; static ZCONST char Far lExtraFieldType[] = "\n\ There %s a local extra field with ID 0x%04x (%s) and\n\ %u data bytes (%s).\n"; static ZCONST char Far efIZuid[] = "GMT modification/access times and Unix UID/GID"; static ZCONST char Far efIZnouid[] = "GMT modification/access times only"; static ZCONST char Far NoFileComment[] = "\n There is no file comment.\n"; static ZCONST char Far FileCommBegin[] = "\n\ ------------------------- file comment begins ----------------------------\n"; static ZCONST char Far FileCommEnd[] = "\ -------------------------- file comment ends -----------------------------\n"; /* zi_time() strings */ static ZCONST char Far BogusFmt[] = "%03d"; static ZCONST char Far shtYMDHMTime[] = "%02u-%s-%02u %02u:%02u"; static ZCONST char Far lngYMDHMSTime[] = "%u %s %u %02u:%02u:%02u"; static ZCONST char Far DecimalTime[] = "%04u%02u%02u.%02u%02u%02u"; #ifdef USE_EF_UT_TIME static ZCONST char Far lngYMDHMSTimeError[] = "???? ??? ?? ??:??:??"; #endif #ifndef WINDLL /************************/ /* Function zi_opts() */ /************************/ int zi_opts(__G__ pargc, pargv) int *pargc; char ***pargv; __GDEF { char **argv, *s; int argc, c, error=FALSE, negative=0; int hflag_slmv=TRUE, hflag_2=FALSE; /* diff options => diff defaults */ int tflag_slm=TRUE, tflag_2v=FALSE; int explicit_h=FALSE, explicit_t=FALSE; #ifdef MACOS uO.lflag = LFLAG; /* reset default on each call */ #endif G.extract_flag = FALSE; /* zipinfo does not extract to disk */ argc = *pargc; argv = *pargv; while (--argc > 0 && (*++argv)[0] == '-') { s = argv[0] + 1; while ((c = *s++) != 0) { /* "!= 0": prevent Turbo C warning */ switch (c) { case '-': ++negative; break; case '1': /* shortest listing: JUST filenames */ if (negative) uO.lflag = -2, negative = 0; else uO.lflag = 1; break; case '2': /* just filenames, plus headers if specified */ if (negative) uO.lflag = -2, negative = 0; else uO.lflag = 2; break; #ifndef CMS_MVS case ('C'): /* -C: match filenames case-insensitively */ if (negative) uO.C_flag = FALSE, negative = 0; else uO.C_flag = TRUE; break; #endif /* !CMS_MVS */ case 'h': /* header line */ if (negative) hflag_2 = hflag_slmv = FALSE, negative = 0; else { hflag_2 = hflag_slmv = explicit_h = TRUE; if (uO.lflag == -1) uO.lflag = 0; } break; case 'l': /* longer form of "ls -l" type listing */ if (negative) uO.lflag = -2, negative = 0; else uO.lflag = 5; break; case 'm': /* medium form of "ls -l" type listing */ if (negative) uO.lflag = -2, negative = 0; else uO.lflag = 4; break; #ifdef MORE case 'M': /* send output through built-in "more" */ if (negative) G.M_flag = FALSE, negative = 0; else G.M_flag = TRUE; break; #endif case 's': /* default: shorter "ls -l" type listing */ if (negative) uO.lflag = -2, negative = 0; else uO.lflag = 3; break; case 't': /* totals line */ if (negative) tflag_2v = tflag_slm = FALSE, negative = 0; else { tflag_2v = tflag_slm = explicit_t = TRUE; if (uO.lflag == -1) uO.lflag = 0; } break; case ('T'): /* use (sortable) decimal time format */ if (negative) uO.T_flag = FALSE, negative = 0; else uO.T_flag = TRUE; break; #ifdef UNICODE_SUPPORT case ('U'): /* escape UTF-8, or disable UTF-8 support */ if (negative) { uO.U_flag = MAX(uO.U_flag-negative,0); negative = 0; } else uO.U_flag++; break; #endif /* UNICODE_SUPPORT */ case 'v': /* turbo-verbose listing */ if (negative) uO.lflag = -2, negative = 0; else uO.lflag = 10; break; #ifdef WILD_STOP_AT_DIR case ('W'): /* Wildcard interpretation (stop at '/'?) */ if (negative) uO.W_flag = FALSE, negative = 0; else uO.W_flag = TRUE; break; #endif /* WILD_STOP_AT_DIR */ case 'z': /* print zipfile comment */ if (negative) uO.zflag = negative = 0; else uO.zflag = 1; break; case 'Z': /* ZipInfo mode: ignore */ break; default: error = TRUE; break; } } } if ((argc-- == 0) || error) { *pargc = argc; *pargv = argv; return USAGE(error); } #ifdef MORE if (G.M_flag && !isatty(1)) /* stdout redirected: "more" func useless */ G.M_flag = 0; #endif /* if no listing options given (or all negated), or if only -h/-t given * with individual files specified, use default listing format */ if ((uO.lflag < 0) || ((argc > 0) && (uO.lflag == 0))) uO.lflag = LFLAG; /* set header and totals flags to default or specified values */ switch (uO.lflag) { case 0: /* 0: can only occur if either -t or -h explicitly given; */ case 2: /* therefore set both flags equal to normally false value */ uO.hflag = hflag_2; uO.tflag = tflag_2v; break; case 1: /* only filenames, *always* */ uO.hflag = FALSE; uO.tflag = FALSE; uO.zflag = FALSE; break; case 3: case 4: case 5: uO.hflag = ((argc > 0) && !explicit_h)? FALSE : hflag_slmv; uO.tflag = ((argc > 0) && !explicit_t)? FALSE : tflag_slm; break; case 10: uO.hflag = hflag_slmv; uO.tflag = tflag_2v; break; } *pargc = argc; *pargv = argv; return 0; } /* end function zi_opts() */ #endif /* !WINDLL */ /*******************************/ /* Function zi_end_central() */ /*******************************/ void zi_end_central(__G) __GDEF { /*--------------------------------------------------------------------------- Print out various interesting things about the zipfile. ---------------------------------------------------------------------------*/ if (uO.lflag > 9) { /* verbose format */ Info(slide, 0, ((char *)slide, LoadFarString(EndCentDirRec))); Info(slide, 0, ((char *)slide, LoadFarString(LineSeparators))); Info(slide, 0, ((char *)slide, LoadFarString(ZipFSizeVerbose), FmZofft(G.ziplen, "11", NULL), FmZofft(G.ziplen, FZOFFT_HEX_DOT_WID, "X"))); Info(slide, 0, ((char *)slide, LoadFarString(ActOffsetCentDir), FmZofft(G.real_ecrec_offset, "11", "u"), FmZofft(G.real_ecrec_offset, FZOFFT_HEX_DOT_WID, "X"), FmZofft(G.expect_ecrec_offset, "11", "u"), FmZofft(G.expect_ecrec_offset, FZOFFT_HEX_DOT_WID, "X"))); if (G.ecrec.number_this_disk == 0) { Info(slide, 0, ((char *)slide, LoadFarString(SinglePartArchive1), FmZofft(G.ecrec.total_entries_central_dir, NULL, "u"), (G.ecrec.total_entries_central_dir == 1)? "entry" : "entries", FmZofft(G.ecrec.size_central_directory, NULL, "u"), FmZofft(G.ecrec.size_central_directory, FZOFFT_HEX_DOT_WID, "X"))); Info(slide, 0, ((char *)slide, LoadFarString(SinglePartArchive2), FmZofft(G.ecrec.offset_start_central_directory, NULL, "u"), FmZofft(G.ecrec.offset_start_central_directory, FZOFFT_HEX_DOT_WID, "X"))); } else { Info(slide, 0, ((char *)slide, LoadFarString(MultiPartArchive1), (ulg)(G.ecrec.number_this_disk + 1), (ulg)(G.ecrec.num_disk_start_cdir + 1))); Info(slide, 0, ((char *)slide, LoadFarString(MultiPartArchive2), FmZofft(G.ecrec.offset_start_central_directory, NULL, "u"), FmZofft(G.ecrec.offset_start_central_directory, FZOFFT_HEX_DOT_WID, "X"), FmZofft(G.ecrec.size_central_directory, NULL, "u"), FmZofft(G.ecrec.size_central_directory, FZOFFT_HEX_DOT_WID, "X"))); Info(slide, 0, ((char *)slide, LoadFarString(MultiPartArchive3), FmZofft(G.ecrec.num_entries_centrl_dir_ths_disk, NULL, "u"), (G.ecrec.num_entries_centrl_dir_ths_disk == 1)? "is" : "are", FmZofft(G.ecrec.total_entries_central_dir, NULL, "u"), (G.ecrec.total_entries_central_dir == 1) ? "entry" : "entries")); } } else if (uO.hflag) { /* print zip file size and number of contained entries: */ Info(slide, 0, ((char *)slide, LoadFarString(ZipInfHeader2), FmZofft(G.ziplen, NULL, NULL), FmZofft(G.ecrec.total_entries_central_dir, NULL, "u"))); } } /* end function zi_end_central() */ /************************/ /* Function zipinfo() */ /************************/ int zipinfo(__G) /* return PK-type error code */ __GDEF { int do_this_file=FALSE, error, error_in_archive=PK_COOL; int *fn_matched=NULL, *xn_matched=NULL; ulg j, members=0L; zusz_t tot_csize=0L, tot_ucsize=0L; zusz_t endprev; /* buffers end of previous entry for zi_long()'s check * of extra bytes */ /*--------------------------------------------------------------------------- Malloc space for check on unmatched filespecs (no big deal if one or both are NULL). ---------------------------------------------------------------------------*/ if (G.filespecs > 0 && (fn_matched=(int *)malloc(G.filespecs*sizeof(int))) != NULL) for (j = 0; j < G.filespecs; ++j) fn_matched[j] = FALSE; if (G.xfilespecs > 0 && (xn_matched=(int *)malloc(G.xfilespecs*sizeof(int))) != NULL) for (j = 0; j < G.xfilespecs; ++j) xn_matched[j] = FALSE; /*--------------------------------------------------------------------------- Set file pointer to start of central directory, then loop through cen- tral directory entries. Check that directory-entry signature bytes are actually there (just a precaution), then process the entry. We know the entire central directory is on this disk: we wouldn't have any of this information unless the end-of-central-directory record was on this disk, and we wouldn't have gotten to this routine unless this is also the disk on which the central directory starts. In practice, this had better be the *only* disk in the archive, but maybe someday we'll add multi-disk support. ---------------------------------------------------------------------------*/ uO.L_flag = FALSE; /* zipinfo mode: never convert name to lowercase */ G.pInfo = G.info; /* (re-)initialize, (just to make sure) */ G.pInfo->textmode = 0; /* so one can read on screen (is this ever used?) */ /* reset endprev for new zipfile; account for multi-part archives (?) */ endprev = (G.crec.relative_offset_local_header == 4L)? 4L : 0L; for (j = 1L;; j++) { if (readbuf(__G__ G.sig, 4) == 0) { error_in_archive = PK_EOF; break; } if (memcmp(G.sig, central_hdr_sig, 4)) { /* is it a CentDir entry? */ /* no new central directory entry * -> is the number of processed entries compatible with the * number of entries as stored in the end_central record? */ if (((j - 1) & (ulg)(G.ecrec.have_ecr64 ? MASK_ZUCN64 : MASK_ZUCN16)) == (ulg)G.ecrec.total_entries_central_dir) { /* "j modulus 4T/64k" matches the reported 64/16-bit-unsigned * number of directory entries -> probably, the regular * end of the central directory has been reached */ break; } else { Info(slide, 0x401, ((char *)slide, LoadFarString(CentSigMsg), j)); Info(slide, 0x401, ((char *)slide, LoadFarString(ReportMsg))); error_in_archive = PK_BADERR; /* sig not found */ break; } } /* process_cdir_file_hdr() sets pInfo->hostnum, pInfo->lcflag, ...: */ if ((error = process_cdir_file_hdr(__G)) != PK_COOL) { error_in_archive = error; /* only PK_EOF defined */ break; } if ((error = do_string(__G__ G.crec.filename_length, DS_FN)) != PK_COOL) { if (error > error_in_archive) error_in_archive = error; if (error > PK_WARN) /* fatal */ break; } if (!G.process_all_files) { /* check if specified on command line */ unsigned i; if (G.filespecs == 0) do_this_file = TRUE; else { /* check if this entry matches an `include' argument */ do_this_file = FALSE; for (i = 0; i < G.filespecs; i++) if (match(G.filename, G.pfnames[i], uO.C_flag WISEP)) { do_this_file = TRUE; if (fn_matched) fn_matched[i] = TRUE; break; /* found match, so stop looping */ } } if (do_this_file) { /* check if this is an excluded file */ for (i = 0; i < G.xfilespecs; i++) if (match(G.filename, G.pxnames[i], uO.C_flag WISEP)) { do_this_file = FALSE; /* ^-- ignore case in match */ if (xn_matched) xn_matched[i] = TRUE; break; } } } /*----------------------------------------------------------------------- If current file was specified on command line, or if no names were specified, do the listing for this file. Otherwise, get rid of the file comment and go back for the next file. -----------------------------------------------------------------------*/ if (G.process_all_files || do_this_file) { /* Read the extra field, if any. The extra field info is required * for resolving the Zip64 sizes/offsets and may be used in more * analysis of the entry below. */ if ((error = do_string(__G__ G.crec.extra_field_length, EXTRA_FIELD)) != 0) { if (G.extra_field != NULL) { free(G.extra_field); G.extra_field = NULL; } error_in_archive = error; /* The premature return in case of a "fatal" error (PK_EOF) is * delayed until we analyze the extra field contents. * This allows us to display all the other info that has been * successfully read in. */ } switch (uO.lflag) { case 1: case 2: fnprint(__G); SKIP_(G.crec.file_comment_length) break; case 3: case 4: case 5: if ((error = zi_short(__G)) != PK_COOL) { error_in_archive = error; /* might be warning */ } break; case 10: Info(slide, 0, ((char *)slide, LoadFarString(CentralDirEntry), j)); if ((error = zi_long(__G__ &endprev, error_in_archive)) != PK_COOL) { error_in_archive = error; /* might be warning */ } break; default: SKIP_(G.crec.file_comment_length) break; } /* end switch (lflag) */ if (error > PK_WARN) /* fatal */ break; tot_csize += G.crec.csize; tot_ucsize += G.crec.ucsize; if (G.crec.general_purpose_bit_flag & 1) tot_csize -= 12; /* don't count encryption header */ ++members; #ifdef DLL if ((G.statreportcb != NULL) && (*G.statreportcb)(__G__ UZ_ST_FINISH_MEMBER, G.zipfn, G.filename, (zvoid *)&G.crec.ucsize)) { /* cancel operation by user request */ error_in_archive = IZ_CTRLC; break; } #endif #ifdef MACOS /* MacOS is no preemptive OS, thus call event-handling by hand */ UserStop(); #endif } else { /* not listing this file */ SKIP_(G.crec.extra_field_length) SKIP_(G.crec.file_comment_length) if (endprev != 0) endprev = 0; } /* end if (list member?) */ } /* end for-loop (j: member files) */ /*--------------------------------------------------------------------------- Check that we actually found requested files; if so, print totals. ---------------------------------------------------------------------------*/ if ((error_in_archive <= PK_WARN) && uO.tflag) { char *sgn = ""; int cfactor = ratio(tot_ucsize, tot_csize); if (cfactor < 0) { sgn = "-"; cfactor = -cfactor; } Info(slide, 0, ((char *)slide, LoadFarString(ZipfileStats), members, (members==1L)? nullStr:PlurSufx, FmZofft(tot_ucsize, NULL, "u"), FmZofft(tot_csize, NULL, "u"), sgn, cfactor/10, cfactor%10)); } /*--------------------------------------------------------------------------- Check for unmatched filespecs on command line and print warning if any found. ---------------------------------------------------------------------------*/ if (fn_matched) { if (error_in_archive <= PK_WARN) for (j = 0; j < G.filespecs; ++j) if (!fn_matched[j]) Info(slide, 0x401, ((char *)slide, LoadFarString(FilenameNotMatched), G.pfnames[j])); free((zvoid *)fn_matched); } if (xn_matched) { if (error_in_archive <= PK_WARN) for (j = 0; j < G.xfilespecs; ++j) if (!xn_matched[j]) Info(slide, 0x401, ((char *)slide, LoadFarString(ExclFilenameNotMatched), G.pxnames[j])); free((zvoid *)xn_matched); } /* Skip the following checks in case of a premature listing break. */ if (error_in_archive <= PK_WARN) { /*--------------------------------------------------------------------------- Double check that we're back at the end-of-central-directory record. ---------------------------------------------------------------------------*/ if ( (memcmp(G.sig, (G.ecrec.have_ecr64 ? end_central64_sig : end_central_sig), 4) != 0) && (!G.ecrec.is_zip64_archive) && (memcmp(G.sig, end_central_sig, 4) != 0) ) { /* just to make sure again */ Info(slide, 0x401, ((char *)slide, LoadFarString(EndSigMsg))); error_in_archive = PK_WARN; /* didn't find sig */ } /* Set specific return code when no files have been found. */ if (members == 0L && error_in_archive <= PK_WARN) error_in_archive = PK_FIND; if (uO.lflag >= 10) (*G.message)((zvoid *)&G, (uch *)"\n", 1L, 0); } return error_in_archive; } /* end function zipinfo() */ /************************/ /* Function zi_long() */ /************************/ static int zi_long(__G__ pEndprev, error_in_archive) /* return PK-type error code */ __GDEF zusz_t *pEndprev; /* for zi_long() check of extra bytes */ int error_in_archive; /* may signal premature return */ { #ifdef USE_EF_UT_TIME iztimes z_utime; #endif int error; unsigned hostnum, hostver, extnum, extver, methid, methnum, xattr; char workspace[12], attribs[22]; ZCONST char *varmsg_str; char unkn[16]; static ZCONST char Far *os[NUM_HOSTS] = { OS_FAT, OS_Amiga, OS_VMS, OS_Unix, OS_VMCMS, OS_AtariST, OS_HPFS, OS_Macintosh, OS_ZSystem, OS_CPM, OS_TOPS20, OS_NTFS, OS_QDOS, OS_Acorn, OS_VFAT, OS_MVS, OS_BeOS, OS_Tandem, OS_Theos, OS_MacDarwin, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, OS_AtheOS }; static ZCONST char Far *method[NUM_METHODS] = { MthdNone, MthdShrunk, MthdRedF1, MthdRedF2, MthdRedF3, MthdRedF4, MthdImplode, MthdToken, MthdDeflate, MthdDeflat64, MthdDCLImplode, MthdBZip2, MthdLZMA, MthdTerse, MthdLZ77, MthdWavPack, MthdPPMd }; static ZCONST char Far *dtypelng[4] = { DeflNorm, DeflMax, DeflFast, DeflSFast }; /*--------------------------------------------------------------------------- Check whether there's any extra space inside the zipfile. If *pEndprev is zero, it's probably a signal that OS/2 extra fields are involved (with unknown compressed size). We won't worry about prepended junk here... ---------------------------------------------------------------------------*/ if (G.crec.relative_offset_local_header != *pEndprev && *pEndprev > 0L) { /* GRR DEBUG Info(slide, 0, ((char *)slide, " [crec.relative_offset_local_header = %lu, endprev = %lu]\n", G.crec.relative_offset_local_header, *pEndprev)); */ Info(slide, 0, ((char *)slide, LoadFarString(ExtraBytesPreceding), FmZofft((G.crec.relative_offset_local_header - (*pEndprev)), NULL, NULL))); } /* calculate endprev for next time around (problem: extra fields may * differ in length between local and central-directory records) */ *pEndprev = G.crec.relative_offset_local_header + (4L + LREC_SIZE) + G.crec.filename_length + G.crec.extra_field_length + G.crec.csize; /*--------------------------------------------------------------------------- Print out various interesting things about the compressed file. ---------------------------------------------------------------------------*/ hostnum = (unsigned)(G.pInfo->hostnum); hostver = (unsigned)(G.pInfo->hostver); extnum = (unsigned)MIN(G.crec.version_needed_to_extract[1], NUM_HOSTS); extver = (unsigned)G.crec.version_needed_to_extract[0]; methid = (unsigned)G.crec.compression_method; methnum = find_compr_idx(G.crec.compression_method); (*G.message)((zvoid *)&G, (uch *)" ", 2L, 0); fnprint(__G); Info(slide, 0, ((char *)slide, LoadFarString(LocalHeaderOffset), FmZofft(G.crec.relative_offset_local_header, NULL, "u"), FmZofft(G.crec.relative_offset_local_header, FZOFFT_HEX_DOT_WID, "X"))); if (hostnum >= NUM_HOSTS) { sprintf(unkn, LoadFarString(UnknownNo), (int)G.crec.version_made_by[1]); varmsg_str = unkn; } else { varmsg_str = LoadFarStringSmall(os[hostnum]); #ifdef OLD_THEOS_EXTRA if (hostnum == FS_VFAT_ && hostver == 20) { /* entry made by old non-official THEOS port zip archive */ varmsg_str = LoadFarStringSmall(OS_TheosOld); } #endif /* OLD_THEOS_EXTRA */ } Info(slide, 0, ((char *)slide, LoadFarString(HostOS), varmsg_str)); Info(slide, 0, ((char *)slide, LoadFarString(EncodeSWVer), hostver/10, hostver%10)); if ((extnum >= NUM_HOSTS) || (os[extnum] == NULL)) { sprintf(unkn, LoadFarString(UnknownNo), (int)G.crec.version_needed_to_extract[1]); varmsg_str = unkn; } else { varmsg_str = LoadFarStringSmall(os[extnum]); } Info(slide, 0, ((char *)slide, LoadFarString(MinOSCompReq), varmsg_str)); Info(slide, 0, ((char *)slide, LoadFarString(MinSWVerReq), extver/10, extver%10)); if (methnum >= NUM_METHODS) { sprintf(unkn, LoadFarString(UnknownNo), G.crec.compression_method); varmsg_str = unkn; } else { varmsg_str = LoadFarStringSmall(method[methnum]); } Info(slide, 0, ((char *)slide, LoadFarString(CompressMethod), varmsg_str)); if (methid == IMPLODED) { Info(slide, 0, ((char *)slide, LoadFarString(SlideWindowSizeImplode), (G.crec.general_purpose_bit_flag & 2)? '8' : '4')); Info(slide, 0, ((char *)slide, LoadFarString(ShannonFanoTrees), (G.crec.general_purpose_bit_flag & 4)? '3' : '2')); } else if (methid == DEFLATED || methid == ENHDEFLATED) { ush dnum=(ush)((G.crec.general_purpose_bit_flag>>1) & 3); Info(slide, 0, ((char *)slide, LoadFarString(CompressSubtype), LoadFarStringSmall(dtypelng[dnum]))); } Info(slide, 0, ((char *)slide, LoadFarString(FileSecurity), (G.crec.general_purpose_bit_flag & 1) ? nullStr : "not ")); Info(slide, 0, ((char *)slide, LoadFarString(ExtendedLocalHdr), (G.crec.general_purpose_bit_flag & 8) ? "yes" : "no")); /* print upper 3 bits for amusement? */ /* For printing of date & time, a "char d_t_buf[21]" is required. * To save stack space, we reuse the "char attribs[22]" buffer which * is not used yet. */ # define d_t_buf attribs zi_time(__G__ &G.crec.last_mod_dos_datetime, NULL, d_t_buf); Info(slide, 0, ((char *)slide, LoadFarString(FileModDate), d_t_buf)); #ifdef USE_EF_UT_TIME if (G.extra_field && #ifdef IZ_CHECK_TZ G.tz_is_valid && #endif (ef_scan_for_izux(G.extra_field, G.crec.extra_field_length, 1, G.crec.last_mod_dos_datetime, &z_utime, NULL) & EB_UT_FL_MTIME)) { TIMET_TO_NATIVE(z_utime.mtime) /* NOP unless MSC 7.0 or Macintosh */ d_t_buf[0] = (char)0; /* signal "show local time" */ zi_time(__G__ &G.crec.last_mod_dos_datetime, &(z_utime.mtime), d_t_buf); Info(slide, 0, ((char *)slide, LoadFarString(UT_FileModDate), d_t_buf, LoadFarStringSmall(LocalTime))); #ifndef NO_GMTIME d_t_buf[0] = (char)1; /* signal "show UTC (GMT) time" */ zi_time(__G__ &G.crec.last_mod_dos_datetime, &(z_utime.mtime), d_t_buf); Info(slide, 0, ((char *)slide, LoadFarString(UT_FileModDate), d_t_buf, LoadFarStringSmall(GMTime))); #endif /* !NO_GMTIME */ } #endif /* USE_EF_UT_TIME */ Info(slide, 0, ((char *)slide, LoadFarString(CRC32Value), G.crec.crc32)); Info(slide, 0, ((char *)slide, LoadFarString(CompressedFileSize), FmZofft(G.crec.csize, NULL, "u"))); Info(slide, 0, ((char *)slide, LoadFarString(UncompressedFileSize), FmZofft(G.crec.ucsize, NULL, "u"))); Info(slide, 0, ((char *)slide, LoadFarString(FilenameLength), G.crec.filename_length)); Info(slide, 0, ((char *)slide, LoadFarString(ExtraFieldLength), G.crec.extra_field_length)); Info(slide, 0, ((char *)slide, LoadFarString(FileCommentLength), G.crec.file_comment_length)); Info(slide, 0, ((char *)slide, LoadFarString(FileDiskNum), (ulg)(G.crec.disk_number_start + 1))); Info(slide, 0, ((char *)slide, LoadFarString(ApparentFileType), (G.crec.internal_file_attributes & 1)? "text" : (G.crec.internal_file_attributes & 2)? "ebcdic" : "binary")); /* changed to accept EBCDIC */ #ifdef ATARI printf(" external file attributes (hex): %.8lx\n", G.crec.external_file_attributes); #endif xattr = (unsigned)((G.crec.external_file_attributes >> 16) & 0xFFFF); if (hostnum == VMS_) { char *p=attribs, *q=attribs+1; int i, j, k; for (k = 0; k < 12; ++k) workspace[k] = 0; if (xattr & VMS_IRUSR) workspace[0] = 'R'; if (xattr & VMS_IWUSR) { workspace[1] = 'W'; workspace[3] = 'D'; } if (xattr & VMS_IXUSR) workspace[2] = 'E'; if (xattr & VMS_IRGRP) workspace[4] = 'R'; if (xattr & VMS_IWGRP) { workspace[5] = 'W'; workspace[7] = 'D'; } if (xattr & VMS_IXGRP) workspace[6] = 'E'; if (xattr & VMS_IROTH) workspace[8] = 'R'; if (xattr & VMS_IWOTH) { workspace[9] = 'W'; workspace[11] = 'D'; } if (xattr & VMS_IXOTH) workspace[10] = 'E'; *p++ = '('; for (k = j = 0; j < 3; ++j) { /* loop over groups of permissions */ for (i = 0; i < 4; ++i, ++k) /* loop over perms within a group */ if (workspace[k]) *p++ = workspace[k]; *p++ = ','; /* group separator */ if (j == 0) while ((*p++ = *q++) != ',') ; /* system, owner perms are same */ } *p-- = '\0'; *p = ')'; /* overwrite last comma */ Info(slide, 0, ((char *)slide, LoadFarString(VMSFileAttributes), xattr, attribs)); } else if (hostnum == AMIGA_) { switch (xattr & AMI_IFMT) { case AMI_IFDIR: attribs[0] = 'd'; break; case AMI_IFREG: attribs[0] = '-'; break; default: attribs[0] = '?'; break; } attribs[1] = (xattr & AMI_IHIDDEN)? 'h' : '-'; attribs[2] = (xattr & AMI_ISCRIPT)? 's' : '-'; attribs[3] = (xattr & AMI_IPURE)? 'p' : '-'; attribs[4] = (xattr & AMI_IARCHIVE)? 'a' : '-'; attribs[5] = (xattr & AMI_IREAD)? 'r' : '-'; attribs[6] = (xattr & AMI_IWRITE)? 'w' : '-'; attribs[7] = (xattr & AMI_IEXECUTE)? 'e' : '-'; attribs[8] = (xattr & AMI_IDELETE)? 'd' : '-'; attribs[9] = 0; /* better dlm the string */ Info(slide, 0, ((char *)slide, LoadFarString(AmigaFileAttributes), xattr, attribs)); } else if (hostnum == THEOS_) { ZCONST char Far *fpFtyp; switch (xattr & THS_IFMT) { case THS_IFLIB: fpFtyp = TheosFTypLib; break; case THS_IFDIR: fpFtyp = TheosFTypDir; break; case THS_IFREG: fpFtyp = TheosFTypReg; break; case THS_IFREL: fpFtyp = TheosFTypRel; break; case THS_IFKEY: fpFtyp = TheosFTypKey; break; case THS_IFIND: fpFtyp = TheosFTypInd; break; case THS_IFR16: fpFtyp = TheosFTypR16; break; case THS_IFP16: fpFtyp = TheosFTypP16; break; case THS_IFP32: fpFtyp = TheosFTypP32; break; default: fpFtyp = TheosFTypUkn; break; } strcpy(attribs, LoadFarStringSmall(fpFtyp)); attribs[12] = (xattr & THS_INHID) ? '.' : 'H'; attribs[13] = (xattr & THS_IMODF) ? '.' : 'M'; attribs[14] = (xattr & THS_IWOTH) ? '.' : 'W'; attribs[15] = (xattr & THS_IROTH) ? '.' : 'R'; attribs[16] = (xattr & THS_IEUSR) ? '.' : 'E'; attribs[17] = (xattr & THS_IXUSR) ? '.' : 'X'; attribs[18] = (xattr & THS_IWUSR) ? '.' : 'W'; attribs[19] = (xattr & THS_IRUSR) ? '.' : 'R'; attribs[20] = 0; Info(slide, 0, ((char *)slide, LoadFarString(TheosFileAttributes), xattr, attribs)); #ifdef OLD_THEOS_EXTRA } else if (hostnum == FS_VFAT_ && hostver == 20) { /* process old non-official THEOS port zip archive */ ZCONST char Far *fpFtyp; switch (xattr & _THS_IFMT) { case _THS_IFLIB: fpFtyp = TheosFTypLib; break; case _THS_IFDIR: fpFtyp = TheosFTypDir; break; case _THS_IFREG: fpFtyp = TheosFTypReg; break; case _THS_IODRC: fpFtyp = TheosFTypRel; break; case _THS_IOKEY: fpFtyp = TheosFTypKey; break; case _THS_IOIND: fpFtyp = TheosFTypInd; break; case _THS_IOPRG: fpFtyp = TheosFTypR16; break; case _THS_IO286: fpFtyp = TheosFTypP16; break; case _THS_IO386: fpFtyp = TheosFTypP32; break; default: fpFtyp = TheosFTypUkn; break; } strcpy(attribs, LoadFarStringSmall(fpFtyp)); attribs[12] = (xattr & _THS_HIDDN) ? 'H' : '.'; attribs[13] = (xattr & _THS_IXOTH) ? '.' : 'X'; attribs[14] = (xattr & _THS_IWOTH) ? '.' : 'W'; attribs[15] = (xattr & _THS_IROTH) ? '.' : 'R'; attribs[16] = (xattr & _THS_IEUSR) ? '.' : 'E'; attribs[17] = (xattr & _THS_IXUSR) ? '.' : 'X'; attribs[18] = (xattr & _THS_IWUSR) ? '.' : 'W'; attribs[19] = (xattr & _THS_IRUSR) ? '.' : 'R'; attribs[20] = 0; Info(slide, 0, ((char *)slide, LoadFarString(TheosFileAttributes), xattr, attribs)); #endif /* OLD_THEOS_EXTRA */ } else if ((hostnum != FS_FAT_) && (hostnum != FS_HPFS_) && (hostnum != FS_NTFS_) && (hostnum != FS_VFAT_) && (hostnum != ACORN_) && (hostnum != VM_CMS_) && (hostnum != MVS_)) { /* assume Unix-like */ switch ((unsigned)(xattr & UNX_IFMT)) { case (unsigned)UNX_IFDIR: attribs[0] = 'd'; break; case (unsigned)UNX_IFREG: attribs[0] = '-'; break; case (unsigned)UNX_IFLNK: attribs[0] = 'l'; break; case (unsigned)UNX_IFBLK: attribs[0] = 'b'; break; case (unsigned)UNX_IFCHR: attribs[0] = 'c'; break; case (unsigned)UNX_IFIFO: attribs[0] = 'p'; break; case (unsigned)UNX_IFSOCK: attribs[0] = 's'; break; default: attribs[0] = '?'; break; } attribs[1] = (xattr & UNX_IRUSR)? 'r' : '-'; attribs[4] = (xattr & UNX_IRGRP)? 'r' : '-'; attribs[7] = (xattr & UNX_IROTH)? 'r' : '-'; attribs[2] = (xattr & UNX_IWUSR)? 'w' : '-'; attribs[5] = (xattr & UNX_IWGRP)? 'w' : '-'; attribs[8] = (xattr & UNX_IWOTH)? 'w' : '-'; if (xattr & UNX_IXUSR) attribs[3] = (xattr & UNX_ISUID)? 's' : 'x'; else attribs[3] = (xattr & UNX_ISUID)? 'S' : '-'; /* S = undefined */ if (xattr & UNX_IXGRP) attribs[6] = (xattr & UNX_ISGID)? 's' : 'x'; /* == UNX_ENFMT */ else attribs[6] = (xattr & UNX_ISGID)? 'l' : '-'; if (xattr & UNX_IXOTH) attribs[9] = (xattr & UNX_ISVTX)? 't' : 'x'; /* "sticky bit" */ else attribs[9] = (xattr & UNX_ISVTX)? 'T' : '-'; /* T = undefined */ attribs[10] = 0; Info(slide, 0, ((char *)slide, LoadFarString(UnixFileAttributes), xattr, attribs)); } else { Info(slide, 0, ((char *)slide, LoadFarString(NonMSDOSFileAttributes), G.crec.external_file_attributes >> 8)); } /* endif (hostnum: external attributes format) */ if ((xattr=(unsigned)(G.crec.external_file_attributes & 0xFF)) == 0) Info(slide, 0, ((char *)slide, LoadFarString(MSDOSFileAttributes), xattr)); else if (xattr == 1) Info(slide, 0, ((char *)slide, LoadFarString(MSDOSFileAttributesRO), xattr)); else Info(slide, 0, ((char *)slide, LoadFarString(MSDOSFileAttributesAlpha), xattr, (xattr&1)? "rdo " : nullStr, (xattr&2)? "hid " : nullStr, (xattr&4)? "sys " : nullStr, (xattr&8)? "lab " : nullStr, (xattr&16)? "dir " : nullStr, (xattr&32)? "arc " : nullStr, (xattr&64)? "lnk " : nullStr, (xattr&128)? "exe" : nullStr)); /*--------------------------------------------------------------------------- Analyze the extra field, if any, and print the file comment, if any (the filename has already been printed, above). That finishes up this file entry... ---------------------------------------------------------------------------*/ if (G.crec.extra_field_length > 0) { uch *ef_ptr = G.extra_field; ush ef_len = G.crec.extra_field_length; ush eb_id, eb_datalen; ZCONST char Far *ef_fieldname; if (error_in_archive > PK_WARN) /* fatal: can't continue */ /* delayed "fatal error" return from extra field reading */ return error_in_archive; if (G.extra_field == (uch *)NULL) return PK_ERR; /* not consistent with crec length */ Info(slide, 0, ((char *)slide, LoadFarString(ExtraFields))); while (ef_len >= EB_HEADSIZE) { eb_id = makeword(&ef_ptr[EB_ID]); eb_datalen = makeword(&ef_ptr[EB_LEN]); ef_ptr += EB_HEADSIZE; ef_len -= EB_HEADSIZE; if (eb_datalen > (ush)ef_len) { Info(slide, 0x421, ((char *)slide, LoadFarString(ExtraFieldTrunc), eb_id, eb_datalen, ef_len)); eb_datalen = ef_len; } switch (eb_id) { case EF_PKSZ64: ef_fieldname = efPKSZ64; if ((G.crec.relative_offset_local_header & (~(zusz_t)0xFFFFFFFFL)) != 0) { /* Subtract the size of the 64bit local offset from the local e.f. size, local Z64 e.f. block has no offset; when only local offset present, the entire local PKSZ64 block is missing. */ *pEndprev -= (eb_datalen == 8 ? 12 : 8); } break; case EF_AV: ef_fieldname = efAV; break; case EF_OS2: ef_fieldname = efOS2; break; case EF_ACL: ef_fieldname = efACL; break; case EF_NTSD: ef_fieldname = efNTSD; break; case EF_PKVMS: ef_fieldname = efPKVMS; break; case EF_IZVMS: ef_fieldname = efIZVMS; break; case EF_PKW32: ef_fieldname = efPKWin32; break; case EF_PKUNIX: ef_fieldname = efPKUnix; break; case EF_IZUNIX: ef_fieldname = efIZUnix; if (hostnum == UNIX_ && *pEndprev > 0L) *pEndprev += 4L; /* also have UID/GID in local copy */ break; case EF_IZUNIX2: ef_fieldname = efIZUnix2; if (*pEndprev > 0L) *pEndprev += 4L; /* 4 byte UID/GID in local copy */ break; case EF_IZUNIX3: ef_fieldname = efIZUnix3; #if 0 if (*pEndprev > 0L) *pEndprev += 4L; /* 4 byte UID/GID in local copy */ #endif break; case EF_TIME: ef_fieldname = efTime; break; case EF_UNIPATH: ef_fieldname = efU8Path; break; case EF_UNICOMNT: ef_fieldname = efU8Commnt; break; case EF_MAC3: ef_fieldname = efMac3; break; case EF_JLMAC: ef_fieldname = efJLMac; break; case EF_ZIPIT: ef_fieldname = efZipIt; break; case EF_ZIPIT2: ef_fieldname = efZipIt2; break; case EF_VMCMS: ef_fieldname = efVMCMS; break; case EF_MVS: ef_fieldname = efMVS; break; case EF_ATHEOS: ef_fieldname = efAtheOS; break; case EF_BEOS: ef_fieldname = efBeOS; break; case EF_QDOS: ef_fieldname = efQDOS; break; case EF_AOSVS: ef_fieldname = efAOSVS; break; case EF_SPARK: /* from RISC OS */ ef_fieldname = efSpark; break; case EF_MD5: ef_fieldname = efMD5; break; case EF_ASIUNIX: ef_fieldname = efASiUnix; break; case EF_TANDEM: ef_fieldname = efTandem; break; case EF_SMARTZIP: ef_fieldname = efSmartZip; break; case EF_THEOS: #ifdef OLD_THEOS_EXTRA case EF_THEOSO: #endif ef_fieldname = efTheos; break; default: ef_fieldname = efUnknown; break; } Info(slide, 0, ((char *)slide, LoadFarString(ExtraFieldType), eb_id, LoadFarStringSmall(ef_fieldname), eb_datalen)); /* additional, field-specific information: */ switch (eb_id) { case EF_OS2: case EF_ACL: if (eb_datalen >= EB_OS2_HLEN) { if (eb_id == EF_OS2) ef_fieldname = OS2EAs; else ef_fieldname = ACLdata; Info(slide, 0, ((char *)slide, LoadFarString(ef_fieldname), makelong(ef_ptr))); *pEndprev = 0L; /* no clue about csize of local */ } else { goto ef_default_display; } break; case EF_NTSD: if (eb_datalen >= EB_NTSD_C_LEN) { Info(slide, 0, ((char *)slide, LoadFarString(NTSDData), makelong(ef_ptr))); *pEndprev = 0L; /* no clue about csize of local */ } else { goto ef_default_display; } break; case EF_IZVMS: if (eb_datalen >= 8) { char *p, q[8]; unsigned compr = makeword(ef_ptr+EB_IZVMS_FLGS) & EB_IZVMS_BCMASK; *q = '\0'; if (compr > 3) compr = 3; switch (makelong(ef_ptr)) { case 0x42414656: /* "VFAB" */ p = "FAB"; break; case 0x4C4C4156: /* "VALL" */ p = "XABALL"; break; case 0x43484656: /* "VFHC" */ p = "XABFHC"; break; case 0x54414456: /* "VDAT" */ p = "XABDAT"; break; case 0x54445256: /* "VRDT" */ p = "XABRDT"; break; case 0x4F525056: /* "VPRO" */ p = "XABPRO"; break; case 0x59454B56: /* "VKEY" */ p = "XABKEY"; break; case 0x56534D56: /* "VMSV" */ p = "version"; if (eb_datalen >= 16) { /* put termitation first, for A_TO_N() */ q[7] = '\0'; q[0] = ' '; q[1] = '('; strncpy(q+2, (char *)ef_ptr+EB_IZVMS_HLEN, 4); A_TO_N(q+2); q[6] = ')'; } break; default: p = "unknown"; } Info(slide, 0, ((char *)slide, LoadFarString(izVMSdata), LoadFarStringSmall(izVMScomp[compr]), makeword(ef_ptr+EB_IZVMS_UCSIZ), p, q)); } else { goto ef_default_display; } break; case EF_TIME: if (eb_datalen > 0) { char types[80]; int num = 0, len; *types = '\0'; if (*ef_ptr & 1) { strcpy(types, LoadFarString(UTmodification)); ++num; } if (*ef_ptr & 2) { len = strlen(types); if (num) types[len++] = '/'; strcpy(types+len, LoadFarString(UTaccess)); ++num; if (*pEndprev > 0L) *pEndprev += 4L; } if (*ef_ptr & 4) { len = strlen(types); if (num) types[len++] = '/'; strcpy(types+len, LoadFarString(UTcreation)); ++num; if (*pEndprev > 0L) *pEndprev += 4L; } if (num > 0) Info(slide, 0, ((char *)slide, LoadFarString(UTdata), types, num == 1? nullStr : PlurSufx)); } break; case EF_UNIPATH: case EF_UNICOMNT: if (eb_datalen >= 5) { unsigned i, n; ulg name_crc = makelong(ef_ptr+1); if (eb_datalen <= 29) { Info(slide, 0, ((char *)slide, LoadFarString(U8PthCmnComplete), (unsigned)ef_ptr[0], name_crc)); n = eb_datalen; } else { Info(slide, 0, ((char *)slide, LoadFarString(U8PthCmnF24), (unsigned)ef_ptr[0], name_crc)); n = 29; } for (i = 5; i < n; ++i) Info(slide, 0, ((char *)slide, LoadFarString(efFormat), ef_ptr[i])); } else { goto ef_default_display; } break; case EF_MAC3: if (eb_datalen >= EB_MAC3_HLEN) { ulg eb_uc = makelong(ef_ptr); unsigned mac3_flgs = makeword(ef_ptr+EB_FLGS_OFFS); unsigned eb_is_uc = mac3_flgs & EB_M3_FL_UNCMPR; Info(slide, 0, ((char *)slide, LoadFarString(Mac3data), eb_uc, eb_is_uc ? "un" : nullStr)); if (eb_is_uc) { if (*pEndprev > 0L) *pEndprev += makelong(ef_ptr); } else { *pEndprev = 0L; /* no clue about csize of local */ } Info(slide, 0, ((char *)slide, LoadFarString(MacOSMAC3flags), LoadFarStringSmall(mac3_flgs & EB_M3_FL_DATFRK ? MacOS_DF : MacOS_RF), (mac3_flgs & EB_M3_FL_TIME64 ? 64 : 32))); zi_showMacTypeCreator(__G__ &ef_ptr[6]); } else { goto ef_default_display; } break; case EF_ZIPIT2: if (eb_datalen >= 5 && makelong(ef_ptr) == 0x5449505A /* "ZPIT" */) { if (eb_datalen >= 12) { zi_showMacTypeCreator(__G__ &ef_ptr[4]); } } else { goto ef_default_display; } break; case EF_ZIPIT: if (eb_datalen >= 5 && makelong(ef_ptr) == 0x5449505A /* "ZPIT" */) { unsigned fnlen = ef_ptr[4]; if ((unsigned)eb_datalen >= fnlen + (5 + 8)) { uch nullchar = ef_ptr[fnlen+5]; ef_ptr[fnlen+5] = '\0'; /* terminate filename */ A_TO_N(ef_ptr+5); Info(slide, 0, ((char *)slide, LoadFarString(ZipItFname), (char *)ef_ptr+5)); ef_ptr[fnlen+5] = nullchar; zi_showMacTypeCreator(__G__ &ef_ptr[fnlen+5]); } } else { goto ef_default_display; } break; case EF_JLMAC: if (eb_datalen >= 40 && makelong(ef_ptr) == 0x45454C4A /* "JLEE" */) { zi_showMacTypeCreator(__G__ &ef_ptr[4]); Info(slide, 0, ((char *)slide, LoadFarString(MacOSJLEEflags), LoadFarStringSmall(ef_ptr[31] & 1 ? MacOS_DF : MacOS_RF))); } else { goto ef_default_display; } break; case EF_SMARTZIP: if ((eb_datalen == EB_SMARTZIP_HLEN) && makelong(ef_ptr) == 0x70695A64 /* "dZip" */) { char filenameBuf[32]; zi_showMacTypeCreator(__G__ &ef_ptr[4]); memcpy(filenameBuf, &ef_ptr[33], 31); filenameBuf[ef_ptr[32]] = '\0'; A_TO_N(filenameBuf); Info(slide, 0, ((char *)slide, LoadFarString(ZipItFname), filenameBuf)); } else { goto ef_default_display; } break; #ifdef CMS_MVS case EF_VMCMS: case EF_MVS: { char type[100]; Info(slide, 0, ((char *)slide, LoadFarString(VmMvsExtraField), (getVMMVSexfield(type, ef_ptr-EB_HEADSIZE, (unsigned)eb_datalen) > 0)? type : LoadFarStringSmall(VmMvsInvalid))); } break; #endif /* CMS_MVS */ case EF_ATHEOS: case EF_BEOS: if (eb_datalen >= EB_BEOS_HLEN) { ulg eb_uc = makelong(ef_ptr); unsigned eb_is_uc = *(ef_ptr+EB_FLGS_OFFS) & EB_BE_FL_UNCMPR; if (eb_id == EF_ATHEOS) ef_fieldname = AtheOSdata; else ef_fieldname = BeOSdata; Info(slide, 0, ((char *)slide, LoadFarString(ef_fieldname), eb_uc, eb_is_uc ? "un" : nullStr)); if (eb_is_uc) { if (*pEndprev > 0L) *pEndprev += makelong(ef_ptr); } else { *pEndprev = 0L; /* no clue about csize of local */ } } else { goto ef_default_display; } break; case EF_QDOS: if (eb_datalen >= 4) { Info(slide, 0, ((char *)slide, LoadFarString(QDOSdata), ef_ptr[0], ef_ptr[1], ef_ptr[2], ef_ptr[3])); } else { goto ef_default_display; } break; case EF_AOSVS: if (eb_datalen >= 5) { Info(slide, 0, ((char *)slide, LoadFarString(AOSVSdata), ((int)(uch)ef_ptr[4])/10, ((int)(uch)ef_ptr[4])%10)); } else { goto ef_default_display; } break; case EF_TANDEM: if (eb_datalen == 20) { unsigned type, code; type = (ef_ptr[18] & 0x60) >> 5; code = makeword(ef_ptr); /* Arrg..., Tandem e.f. uses BigEndian byte-order */ code = ((code << 8) & 0xff00) | ((code >> 8) & 0x00ff); if (type == NSK_UNSTRUCTURED) { if (code == NSK_EDITFILECODE) type = 4; else if (code == NSK_OBJECTFILECODE) type = 5; } Info(slide, 0, ((char *)slide, LoadFarString(Tandemdata), LoadFarStringSmall(TandemFileformat[type]), code)); } else { goto ef_default_display; } break; case EF_MD5: if (eb_datalen >= 19) { char md5[33]; int i; for (i = 0; i < 16; ++i) sprintf(&md5[i<<1], "%02x", ef_ptr[15-i]); md5[32] = '\0'; Info(slide, 0, ((char *)slide, LoadFarString(MD5data), md5)); break; } /* else: fall through !! */ default: ef_default_display: if (eb_datalen > 0) { unsigned i, n; if (eb_datalen <= 24) { Info(slide, 0, ((char *)slide, LoadFarString(ColonIndent))); n = eb_datalen; } else { Info(slide, 0, ((char *)slide, LoadFarString(First20))); n = 20; } for (i = 0; i < n; ++i) Info(slide, 0, ((char *)slide, LoadFarString(efFormat), ef_ptr[i])); } break; } (*G.message)((zvoid *)&G, (uch *)".", 1L, 0); ef_ptr += eb_datalen; ef_len -= eb_datalen; } (*G.message)((zvoid *)&G, (uch *)"\n", 1L, 0); } /* high bit == Unix/OS2/NT GMT times (mtime, atime); next bit == UID/GID */ if ((xattr = (unsigned)((G.crec.external_file_attributes & 0xC000) >> 12)) & 8) { if (hostnum == UNIX_ || hostnum == FS_HPFS_ || hostnum == FS_NTFS_) { Info(slide, 0, ((char *)slide, LoadFarString(lExtraFieldType), "is", EF_IZUNIX, LoadFarStringSmall(efIZUnix), (unsigned)(xattr&12), (xattr&4)? efIZuid : efIZnouid)); if (*pEndprev > 0L) *pEndprev += (ulg)(xattr&12); } else if (hostnum == FS_FAT_ && !(xattr&4)) Info(slide, 0, ((char *)slide, LoadFarString(lExtraFieldType), "may be", EF_IZUNIX, LoadFarStringSmall(efIZUnix), 8, efIZnouid)); } if (!G.crec.file_comment_length) Info(slide, 0, ((char *)slide, LoadFarString(NoFileComment))); else { Info(slide, 0, ((char *)slide, LoadFarString(FileCommBegin))); if ((error = do_string(__G__ G.crec.file_comment_length, DISPL_8)) != PK_COOL) { error_in_archive = error; /* might be warning */ if (error > PK_WARN) /* fatal */ return error; } Info(slide, 0, ((char *)slide, LoadFarString(FileCommEnd))); } return error_in_archive; } /* end function zi_long() */ /*************************/ /* Function zi_short() */ /*************************/ static int zi_short(__G) /* return PK-type error code */ __GDEF { #ifdef USE_EF_UT_TIME iztimes z_utime; time_t *z_modtim; #endif int k, error, error_in_archive=PK_COOL; unsigned hostnum, hostver, methid, methnum, xattr; char *p, workspace[12], attribs[16]; char methbuf[5]; static ZCONST char dtype[5]="NXFS"; /* normal, maximum, fast, superfast */ static ZCONST char Far os[NUM_HOSTS+1][4] = { "fat", "ami", "vms", "unx", "cms", "atr", "hpf", "mac", "zzz", "cpm", "t20", "ntf", "qds", "aco", "vft", "mvs", "be ", "nsk", "ths", "osx", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "ath", "???" }; #ifdef OLD_THEOS_EXTRA static ZCONST char Far os_TheosOld[] = "tho"; #endif static ZCONST char Far method[NUM_METHODS+1][5] = { "stor", "shrk", "re:1", "re:2", "re:3", "re:4", "i#:#", "tokn", "def#", "d64#", "dcli", "bzp2", "lzma", "ters", "lz77", "wavp", "ppmd", "u###" }; /*--------------------------------------------------------------------------- Print out various interesting things about the compressed file. ---------------------------------------------------------------------------*/ methid = (unsigned)(G.crec.compression_method); methnum = find_compr_idx(G.crec.compression_method); hostnum = (unsigned)(G.pInfo->hostnum); hostver = (unsigned)(G.pInfo->hostver); /* extnum = (unsigned)MIN(G.crec.version_needed_to_extract[1], NUM_HOSTS); extver = (unsigned)G.crec.version_needed_to_extract[0]; */ zfstrcpy(methbuf, method[methnum]); if (methid == IMPLODED) { methbuf[1] = (char)((G.crec.general_purpose_bit_flag & 2)? '8' : '4'); methbuf[3] = (char)((G.crec.general_purpose_bit_flag & 4)? '3' : '2'); } else if (methid == DEFLATED || methid == ENHDEFLATED) { ush dnum=(ush)((G.crec.general_purpose_bit_flag>>1) & 3); methbuf[3] = dtype[dnum]; } else if (methnum >= NUM_METHODS) { /* unknown */ sprintf(&methbuf[1], "%03u", G.crec.compression_method); } for (k = 0; k < 15; ++k) attribs[k] = ' '; attribs[15] = 0; xattr = (unsigned)((G.crec.external_file_attributes >> 16) & 0xFFFF); switch (hostnum) { case VMS_: { int i, j; for (k = 0; k < 12; ++k) workspace[k] = 0; if (xattr & VMS_IRUSR) workspace[0] = 'R'; if (xattr & VMS_IWUSR) { workspace[1] = 'W'; workspace[3] = 'D'; } if (xattr & VMS_IXUSR) workspace[2] = 'E'; if (xattr & VMS_IRGRP) workspace[4] = 'R'; if (xattr & VMS_IWGRP) { workspace[5] = 'W'; workspace[7] = 'D'; } if (xattr & VMS_IXGRP) workspace[6] = 'E'; if (xattr & VMS_IROTH) workspace[8] = 'R'; if (xattr & VMS_IWOTH) { workspace[9] = 'W'; workspace[11] = 'D'; } if (xattr & VMS_IXOTH) workspace[10] = 'E'; p = attribs; for (k = j = 0; j < 3; ++j) { /* groups of permissions */ for (i = 0; i < 4; ++i, ++k) /* perms within a group */ if (workspace[k]) *p++ = workspace[k]; *p++ = ','; /* group separator */ } *--p = ' '; /* overwrite last comma */ if ((p - attribs) < 12) sprintf(&attribs[12], "%u.%u", hostver/10, hostver%10); } break; case AMIGA_: switch (xattr & AMI_IFMT) { case AMI_IFDIR: attribs[0] = 'd'; break; case AMI_IFREG: attribs[0] = '-'; break; default: attribs[0] = '?'; break; } attribs[1] = (xattr & AMI_IHIDDEN)? 'h' : '-'; attribs[2] = (xattr & AMI_ISCRIPT)? 's' : '-'; attribs[3] = (xattr & AMI_IPURE)? 'p' : '-'; attribs[4] = (xattr & AMI_IARCHIVE)? 'a' : '-'; attribs[5] = (xattr & AMI_IREAD)? 'r' : '-'; attribs[6] = (xattr & AMI_IWRITE)? 'w' : '-'; attribs[7] = (xattr & AMI_IEXECUTE)? 'e' : '-'; attribs[8] = (xattr & AMI_IDELETE)? 'd' : '-'; sprintf(&attribs[12], "%u.%u", hostver/10, hostver%10); break; case THEOS_: switch (xattr & THS_IFMT) { case THS_IFLIB: *attribs = 'L'; break; case THS_IFDIR: *attribs = 'D'; break; case THS_IFCHR: *attribs = 'C'; break; case THS_IFREG: *attribs = 'S'; break; case THS_IFREL: *attribs = 'R'; break; case THS_IFKEY: *attribs = 'K'; break; case THS_IFIND: *attribs = 'I'; break; case THS_IFR16: *attribs = 'P'; break; case THS_IFP16: *attribs = '2'; break; case THS_IFP32: *attribs = '3'; break; default: *attribs = '?'; break; } attribs[1] = (xattr & THS_INHID) ? '.' : 'H'; attribs[2] = (xattr & THS_IMODF) ? '.' : 'M'; attribs[3] = (xattr & THS_IWOTH) ? '.' : 'W'; attribs[4] = (xattr & THS_IROTH) ? '.' : 'R'; attribs[5] = (xattr & THS_IEUSR) ? '.' : 'E'; attribs[6] = (xattr & THS_IXUSR) ? '.' : 'X'; attribs[7] = (xattr & THS_IWUSR) ? '.' : 'W'; attribs[8] = (xattr & THS_IRUSR) ? '.' : 'R'; sprintf(&attribs[12], "%u.%u", hostver/10, hostver%10); break; case FS_VFAT_: #ifdef OLD_THEOS_EXTRA if (hostver == 20) { switch (xattr & _THS_IFMT) { case _THS_IFLIB: *attribs = 'L'; break; case _THS_IFDIR: *attribs = 'd'; break; case _THS_IFCHR: *attribs = 'c'; break; case _THS_IFREG: *attribs = 'S'; break; case _THS_IODRC: *attribs = 'D'; break; case _THS_IOKEY: *attribs = 'K'; break; case _THS_IOIND: *attribs = 'I'; break; case _THS_IOPRG: *attribs = 'P'; break; case _THS_IO286: *attribs = '2'; break; case _THS_IO386: *attribs = '3'; break; default: *attribs = '?'; break; } attribs[1] = (xattr & _THS_HIDDN) ? 'H' : '.'; attribs[2] = (xattr & _THS_IXOTH) ? '.' : 'X'; attribs[3] = (xattr & _THS_IWOTH) ? '.' : 'W'; attribs[4] = (xattr & _THS_IROTH) ? '.' : 'R'; attribs[5] = (xattr & _THS_IEUSR) ? '.' : 'E'; attribs[6] = (xattr & _THS_IXUSR) ? '.' : 'X'; attribs[7] = (xattr & _THS_IWUSR) ? '.' : 'W'; attribs[8] = (xattr & _THS_IRUSR) ? '.' : 'R'; sprintf(&attribs[12], "%u.%u", hostver/10, hostver%10); break; } /* else: fall through! */ #endif /* OLD_THEOS_EXTRA */ case FS_FAT_: case FS_HPFS_: case FS_NTFS_: case VM_CMS_: case MVS_: case ACORN_: if (hostnum != FS_FAT_ || (unsigned)(xattr & 0700) != ((unsigned)0400 | ((unsigned)!(G.crec.external_file_attributes & 1) << 7) | ((unsigned)(G.crec.external_file_attributes & 0x10) << 2)) ) { xattr = (unsigned)(G.crec.external_file_attributes & 0xFF); sprintf(attribs, ".r.-... %u.%u", hostver/10, hostver%10); attribs[2] = (xattr & 0x01)? '-' : 'w'; attribs[5] = (xattr & 0x02)? 'h' : '-'; attribs[6] = (xattr & 0x04)? 's' : '-'; attribs[4] = (xattr & 0x20)? 'a' : '-'; if (xattr & 0x10) { attribs[0] = 'd'; attribs[3] = 'x'; } else attribs[0] = '-'; if (IS_VOLID(xattr)) attribs[0] = 'V'; else if ((p = MBSRCHR(G.filename, '.')) != (char *)NULL) { ++p; if (STRNICMP(p, "com", 3) == 0 || STRNICMP(p, "exe", 3) == 0 || STRNICMP(p, "btm", 3) == 0 || STRNICMP(p, "cmd", 3) == 0 || STRNICMP(p, "bat", 3) == 0) attribs[3] = 'x'; } break; } /* else: fall through! */ default: /* assume Unix-like */ switch ((unsigned)(xattr & UNX_IFMT)) { case (unsigned)UNX_IFDIR: attribs[0] = 'd'; break; case (unsigned)UNX_IFREG: attribs[0] = '-'; break; case (unsigned)UNX_IFLNK: attribs[0] = 'l'; break; case (unsigned)UNX_IFBLK: attribs[0] = 'b'; break; case (unsigned)UNX_IFCHR: attribs[0] = 'c'; break; case (unsigned)UNX_IFIFO: attribs[0] = 'p'; break; case (unsigned)UNX_IFSOCK: attribs[0] = 's'; break; default: attribs[0] = '?'; break; } attribs[1] = (xattr & UNX_IRUSR)? 'r' : '-'; attribs[4] = (xattr & UNX_IRGRP)? 'r' : '-'; attribs[7] = (xattr & UNX_IROTH)? 'r' : '-'; attribs[2] = (xattr & UNX_IWUSR)? 'w' : '-'; attribs[5] = (xattr & UNX_IWGRP)? 'w' : '-'; attribs[8] = (xattr & UNX_IWOTH)? 'w' : '-'; if (xattr & UNX_IXUSR) attribs[3] = (xattr & UNX_ISUID)? 's' : 'x'; else attribs[3] = (xattr & UNX_ISUID)? 'S' : '-'; /* S==undefined */ if (xattr & UNX_IXGRP) attribs[6] = (xattr & UNX_ISGID)? 's' : 'x'; /* == UNX_ENFMT */ else /* attribs[6] = (xattr & UNX_ISGID)? 'l' : '-'; real 4.3BSD */ attribs[6] = (xattr & UNX_ISGID)? 'S' : '-'; /* SunOS 4.1.x */ if (xattr & UNX_IXOTH) attribs[9] = (xattr & UNX_ISVTX)? 't' : 'x'; /* "sticky bit" */ else attribs[9] = (xattr & UNX_ISVTX)? 'T' : '-'; /* T==undefined */ sprintf(&attribs[12], "%u.%u", hostver/10, hostver%10); break; } /* end switch (hostnum: external attributes format) */ #ifdef OLD_THEOS_EXTRA Info(slide, 0, ((char *)slide, "%s %s %s ", attribs, LoadFarStringSmall(((hostnum == FS_VFAT_ && hostver == 20) ? os_TheosOld : os[hostnum])), FmZofft(G.crec.ucsize, "8", "u"))); #else Info(slide, 0, ((char *)slide, "%s %s %s ", attribs, LoadFarStringSmall(os[hostnum]), FmZofft(G.crec.ucsize, "8", "u"))); #endif Info(slide, 0, ((char *)slide, "%c", (G.crec.general_purpose_bit_flag & 1)? ((G.crec.internal_file_attributes & 1)? 'T' : 'B') : /* encrypted */ ((G.crec.internal_file_attributes & 1)? 't' : 'b'))); /* plaintext */ k = (G.crec.extra_field_length || /* a local-only "UX" (old Unix/OS2/NT GMT times "IZUNIX") e.f.? */ ((G.crec.external_file_attributes & 0x8000) && (hostnum == UNIX_ || hostnum == FS_HPFS_ || hostnum == FS_NTFS_))); Info(slide, 0, ((char *)slide, "%c", k? ((G.crec.general_purpose_bit_flag & 8)? 'X' : 'x') : /* extra field */ ((G.crec.general_purpose_bit_flag & 8)? 'l' : '-'))); /* no extra field */ /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ extended local header or not */ if (uO.lflag == 4) { zusz_t csiz = G.crec.csize; if (G.crec.general_purpose_bit_flag & 1) csiz -= 12; /* if encrypted, don't count encryption header */ Info(slide, 0, ((char *)slide, "%3d%%", (ratio(G.crec.ucsize,csiz)+5)/10)); } else if (uO.lflag == 5) Info(slide, 0, ((char *)slide, " %s", FmZofft(G.crec.csize, "8", "u"))); /* For printing of date & time, a "char d_t_buf[16]" is required. * To save stack space, we reuse the "char attribs[16]" buffer whose * content is no longer needed. */ # define d_t_buf attribs #ifdef USE_EF_UT_TIME z_modtim = G.extra_field && #ifdef IZ_CHECK_TZ G.tz_is_valid && #endif (ef_scan_for_izux(G.extra_field, G.crec.extra_field_length, 1, G.crec.last_mod_dos_datetime, &z_utime, NULL) & EB_UT_FL_MTIME) ? &z_utime.mtime : NULL; TIMET_TO_NATIVE(z_utime.mtime) /* NOP unless MSC 7.0 or Macintosh */ d_t_buf[0] = (char)0; /* signal "show local time" */ #else # define z_modtim NULL #endif Info(slide, 0, ((char *)slide, " %s %s ", methbuf, zi_time(__G__ &G.crec.last_mod_dos_datetime, z_modtim, d_t_buf))); fnprint(__G); /*--------------------------------------------------------------------------- Skip the file comment, if any (the filename has already been printed, above). That finishes up this file entry... ---------------------------------------------------------------------------*/ SKIP_(G.crec.file_comment_length) return error_in_archive; } /* end function zi_short() */ /**************************************/ /* Function zi_showMacTypeCreator() */ /**************************************/ static void zi_showMacTypeCreator(__G__ ebfield) __GDEF uch *ebfield; { /* not every Type / Creator character is printable */ if (isprint(native(ebfield[0])) && isprint(native(ebfield[1])) && isprint(native(ebfield[2])) && isprint(native(ebfield[3])) && isprint(native(ebfield[4])) && isprint(native(ebfield[5])) && isprint(native(ebfield[6])) && isprint(native(ebfield[7]))) { Info(slide, 0, ((char *)slide, LoadFarString(MacOSdata), native(ebfield[0]), native(ebfield[1]), native(ebfield[2]), native(ebfield[3]), native(ebfield[4]), native(ebfield[5]), native(ebfield[6]), native(ebfield[7]))); } else { Info(slide, 0, ((char *)slide, LoadFarString(MacOSdata1), (((ulg)ebfield[0]) << 24) + (((ulg)ebfield[1]) << 16) + (((ulg)ebfield[2]) << 8) + ((ulg)ebfield[3]), (((ulg)ebfield[4]) << 24) + (((ulg)ebfield[5]) << 16) + (((ulg)ebfield[6]) << 8) + ((ulg)ebfield[7]))); } } /* end function zi_showMacTypeCreator() */ /************************/ /* Function zi_time() */ /************************/ static char *zi_time(__G__ datetimez, modtimez, d_t_str) __GDEF ZCONST ulg *datetimez; ZCONST time_t *modtimez; char *d_t_str; { unsigned yr, mo, dy, hh, mm, ss; char monthbuf[4]; ZCONST char *monthstr; static ZCONST char Far month[12][4] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; #ifdef USE_EF_UT_TIME struct tm *t; #endif /*--------------------------------------------------------------------------- Convert the file-modification date and time info to a string of the form "1991 Feb 23 17:15:00", "23-Feb-91 17:15" or "19910223.171500", depending on values of lflag and T_flag. If using Unix-time extra fields, convert to local time or not, depending on value of first character in d_t_str[]. ---------------------------------------------------------------------------*/ #ifdef USE_EF_UT_TIME if (modtimez != NULL) { #ifndef NO_GMTIME /* check for our secret message from above... */ t = (d_t_str[0] == (char)1)? gmtime(modtimez) : localtime(modtimez); #else t = localtime(modtimez); #endif if (uO.lflag > 9 && t == (struct tm *)NULL) /* time conversion error in verbose listing format, * return string with '?' instead of data */ return (strcpy(d_t_str, LoadFarString(lngYMDHMSTimeError))); } else t = (struct tm *)NULL; if (t != (struct tm *)NULL) { mo = (unsigned)(t->tm_mon + 1); dy = (unsigned)(t->tm_mday); yr = (unsigned)(t->tm_year); hh = (unsigned)(t->tm_hour); mm = (unsigned)(t->tm_min); ss = (unsigned)(t->tm_sec); } else #endif /* USE_EF_UT_TIME */ { yr = ((unsigned)(*datetimez >> 25) & 0x7f) + 80; mo = ((unsigned)(*datetimez >> 21) & 0x0f); dy = ((unsigned)(*datetimez >> 16) & 0x1f); hh = (((unsigned)*datetimez >> 11) & 0x1f); mm = (((unsigned)*datetimez >> 5) & 0x3f); ss = (((unsigned)*datetimez << 1) & 0x3e); } if (mo == 0 || mo > 12) { sprintf(monthbuf, LoadFarString(BogusFmt), mo); monthstr = monthbuf; } else monthstr = LoadFarStringSmall(month[mo-1]); if (uO.lflag > 9) /* verbose listing format */ sprintf(d_t_str, LoadFarString(lngYMDHMSTime), yr+1900, monthstr, dy, hh, mm, ss); else if (uO.T_flag) sprintf(d_t_str, LoadFarString(DecimalTime), yr+1900, mo, dy, hh, mm, ss); else /* was: if ((uO.lflag >= 3) && (uO.lflag <= 5)) */ sprintf(d_t_str, LoadFarString(shtYMDHMTime), yr%100, monthstr, dy, hh, mm); return d_t_str; } /* end function zi_time() */ #endif /* !NO_ZIPINFO */ Carla-2.4.2/data/windows/unzipfx-carla/000077500000000000000000000000001420416754300177355ustar00rootroot00000000000000Carla-2.4.2/data/windows/unzipfx-carla/.gitignore000066400000000000000000000000411420416754300217200ustar00rootroot00000000000000 *~ *.o *.exe *.zip unzipfx2cat Carla-2.4.2/data/windows/unzipfx-carla/Makefile.linux000066400000000000000000000012051420416754300225310ustar00rootroot00000000000000#!/usr/bin/Makefile -f CC ?= gcc BUILD_FLAGS = -DSFX -DLINUX -I. -I.. $(CFLAGS) -O2 BUILD_FLAGS += -DLARGE_FILE_SUPPORT -DUNICODE_SUPPORT -DUNICODE_WCHAR -DUTF8_MAYBE_NATIVE BUILD_FLAGS += -DNO_LCHMOD -DHAVE_DIRENT_H -DHAVE_TERMIOS_H -D_MBCS LINK_FLAGS = -static $(LDFLAGS) OBJ = crc32.o crypt.o extract.o fileio.o globals.o inflate.o match.o process.o ttyio.o ubz2err.o unzip.o zipinfo.o OBJ += unix/unix.o OBJ += unzipfx/appDetails.o # ----------------------------- all: unzipfx2cat unzipfx2cat: $(OBJ) $(CC) $^ $(LINK_FLAGS) -o $@ clean: rm -f *~ $(OBJ) # ----------------------------- .c.o: $(CC) $< $(BUILD_FLAGS) -c -o $@ Carla-2.4.2/data/windows/unzipfx-carla/Makefile.win32000066400000000000000000000015261420416754300223420ustar00rootroot00000000000000#!/usr/bin/Makefile -f CC ?= gcc WINDRES ?= windres BUILD_FLAGS = -DSFX -DWIN32 -DWINDOWS -DFORCE_UNIX_OVER_WIN32 -I. -I.. $(CFLAGS) -O2 BUILD_FLAGS += -DLARGE_FILE_SUPPORT -DUNICODE_SUPPORT -DUNICODE_WCHAR -DUTF8_MAYBE_NATIVE BUILD_FLAGS += -DNO_LCHMOD -DHAVE_DIRENT_H -DHAVE_TERMIOS_H -D_MBCS LINK_FLAGS = -static -mwindows -lkernel32 -lshell32 $(LDFLAGS) OBJ = crc32.o crypt.o extract.o fileio.o globals.o inflate.o match.o process.o ttyio.o ubz2err.o unzip.o zipinfo.o OBJ += win32/nt.o win32/win32.o win32/win32i64.o OBJ += unzipfx/appDetails.o OBJ += icon.o # ----------------------------- all: unzipfx2cat.exe unzipfx2cat.exe: $(OBJ) $(CC) $^ $(LINK_FLAGS) -o $@ icon.o: ../../../resources/ico/carla.rc $(WINDRES) -i $< -o $@ -O coff clean: rm -f *~ $(OBJ) # ----------------------------- .c.o: $(CC) $< $(BUILD_FLAGS) -c -o $@ Carla-2.4.2/data/windows/unzipfx-carla/README000066400000000000000000000016061420416754300206200ustar00rootroot00000000000000This is a special build of unzip's unzipfx tool, modified to allow full application bundles. You get a static linked binary that extracts your files into a temporary location, then executes the main program (defined by you). Currently working under Linux only, but should be fairly easy to get it into other OSes (unzip itself is already available in many, including Windows, MacOS, Linux and BeOS). To get a static unzipfx application, you do: 1 - create a zip file of your application bundle, with a single parent/root directory (this directory and the main app-name must match) 2 - edit unzipfx/appDetails.h and set SFX_APP_MININAME as the directory name set in step 1 3 - compile this tool using the appropriate makefile (eg: make -f Makefile.linux). That will give you 'unzipfx2cat' binary 4 - concatenate your zip file over the 'unzipfx2cat' binary (eg: cat unzipfx2cat myapp.zip > myapp) Carla-2.4.2/data/windows/unzipfx-carla/consts.h000066400000000000000000000037341420416754300214260ustar00rootroot00000000000000/* Copyright (c) 1990-2001 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2000-Apr-09 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- consts.h This file contains global, initialized variables that never change. It is included by unzip.c and windll/windll.c. ---------------------------------------------------------------------------*/ /* And'ing with mask_bits[n] masks the lower n bits */ ZCONST unsigned near mask_bits[17] = { 0x0000, 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff, 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff }; ZCONST char Far VersionDate[] = UZ_VERSION_DATE; /* now defined in unzvers.h */ #ifndef SFX ZCONST char Far EndSigMsg[] = "\nnote: didn't find end-of-central-dir signature at end of central dir.\n"; #endif ZCONST char Far CentSigMsg[] = "error: expected central file header signature not found (file #%lu).\n"; ZCONST char Far SeekMsg[] = "error [%s]: attempt to seek before beginning of zipfile\n%s"; ZCONST char Far FilenameNotMatched[] = "caution: filename not matched: %s\n"; ZCONST char Far ExclFilenameNotMatched[] = "caution: excluded filename not matched: %s\n"; #ifdef VMS ZCONST char Far ReportMsg[] = "\ (please check that you have transferred or created the zipfile in the\n\ appropriate BINARY mode--this includes ftp, Kermit, AND unzip'd zipfiles)\n"; #else ZCONST char Far ReportMsg[] = "\ (please check that you have transferred or created the zipfile in the\n\ appropriate BINARY mode and that you have compiled UnZip properly)\n"; #endif #ifndef SFX ZCONST char Far Zipnfo[] = "zipinfo"; ZCONST char Far CompiledWith[] = "Compiled with %s%s for %s%s%s%s.\n\n"; #endif Carla-2.4.2/data/windows/unzipfx-carla/crc32.c000066400000000000000000001133561420416754300210260ustar00rootroot00000000000000/* Copyright (c) 1990-2007 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2005-Feb-10 or later (the contents of which are also included in zip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /* crc32.c -- compute the CRC-32 of a data stream * Copyright (C) 1995 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h * * Thanks to Rodney Brown for his contribution of faster * CRC methods: exclusive-oring 32 bits of data at a time, and pre-computing * tables for updating the shift register in one step with three exclusive-ors * instead of four steps with four exclusive-ors. This results about a factor * of two increase in speed on a Power PC G4 (PPC7455) using gcc -O3. */ /* $Id: crc32.c,v 2.0 2007/01/07 05:20:36 spc Exp $ */ #define __CRC32_C /* identifies this source module */ #include "zip.h" #if (!defined(USE_ZLIB) || defined(USE_OWN_CRCTAB)) #ifndef ZCONST # define ZCONST const #endif #include "crc32.h" /* When only the table of precomputed CRC values is needed, only the basic system-independent table containing 256 entries is created; any support for "unfolding" optimization is disabled. */ #if (defined(USE_ZLIB) || defined(CRC_TABLE_ONLY)) # ifdef IZ_CRCOPTIM_UNFOLDTBL # undef IZ_CRCOPTIM_UNFOLDTBL # endif #endif /* (USE_ZLIB || CRC_TABLE_ONLY) */ #if defined(IZ_CRCOPTIM_UNFOLDTBL) # define CRC_TBLS 4 #else # define CRC_TBLS 1 #endif /* Generate tables for a byte-wise 32-bit CRC calculation on the polynomial: x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. Polynomials over GF(2) are represented in binary, one bit per coefficient, with the lowest powers in the most significant bit. Then adding polynomials is just exclusive-or, and multiplying a polynomial by x is a right shift by one. If we call the above polynomial p, and represent a byte as the polynomial q, also with the lowest power in the most significant bit (so the byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p, where a mod b means the remainder after dividing a by b. This calculation is done using the shift-register method of multiplying and taking the remainder. The register is initialized to zero, and for each incoming bit, x^32 is added mod p to the register if the bit is a one (where x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by x (which is shifting right by one and adding x^32 mod p if the bit shifted out is a one). We start with the highest power (least significant bit) of q and repeat for all eight bits of q. The first (or only) table is simply the CRC of all possible eight bit values. This is all the information needed to generate CRC's on data a byte-at-a-time for all combinations of CRC register values and incoming bytes. The remaining 3 tables (if IZ_CRCOPTIM_UNFOLDTBL is enabled) allow for word-at-a-time CRC calculation, where a word is four bytes. */ #ifdef DYNAMIC_CRC_TABLE /* ========================================================================= * Make the crc table. This function is needed only if you want to compute * the table dynamically. */ local void make_crc_table OF((void)); #if (defined(DYNALLOC_CRCTAB) && defined(REENTRANT)) error: Dynamic allocation of CRC table not safe with reentrant code. #endif /* DYNALLOC_CRCTAB && REENTRANT */ #ifdef DYNALLOC_CRCTAB local ulg near *crc_table = NULL; # if 0 /* not used, since sizeof("near *") <= sizeof(int) */ /* Use this section when access to a "local int" is faster than access to a "local pointer" (e.g.: i86 16bit code with far pointers). */ local int crc_table_empty = 1; # define CRC_TABLE_IS_EMPTY (crc_table_empty != 0) # define MARK_CRCTAB_FILLED crc_table_empty = 0 # define MARK_CRCTAB_EMPTY crc_table_empty = 1 # else /* Use this section on systems where the size of pointers and ints is equal (e.g.: all 32bit systems). */ # define CRC_TABLE_IS_EMPTY (crc_table == NULL) # define MARK_CRCTAB_FILLED crc_table = crctab_p # define MARK_CRCTAB_EMPTY crc_table = NULL # endif #else /* !DYNALLOC_CRCTAB */ local ulg near crc_table[CRC_TBLS*256]; local int crc_table_empty = 1; # define CRC_TABLE_IS_EMPTY (crc_table_empty != 0) # define MARK_CRCTAB_FILLED crc_table_empty = 0 #endif /* ?DYNALLOC_CRCTAB */ local void make_crc_table() { ulg c; /* crc shift register */ int n; /* counter for all possible eight bit values */ int k; /* byte being shifted into crc apparatus */ #ifdef DYNALLOC_CRCTAB ulg near *crctab_p; /* temporary pointer to allocated crc_table area */ #else /* !DYNALLOC_CRCTAB */ # define crctab_p crc_table #endif /* DYNALLOC_CRCTAB */ #ifdef COMPUTE_XOR_PATTERN /* This piece of code has been left here to explain how the XOR pattern * used in the creation of the crc_table values can be recomputed. * For production versions of this function, it is more efficient to * supply the resultant pattern at compile time. */ ulg xor; /* polynomial exclusive-or pattern */ /* terms of polynomial defining this crc (except x^32): */ static ZCONST uch p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26}; /* make exclusive-or pattern from polynomial (0xedb88320L) */ xor = 0L; for (n = 0; n < sizeof(p)/sizeof(uch); n++) xor |= 1L << (31 - p[n]); #else # define xor 0xedb88320L #endif #ifdef DYNALLOC_CRCTAB crctab_p = (ulg near *) nearmalloc (CRC_TBLS*256*sizeof(ulg)); if (crctab_p == NULL) { ziperr(ZE_MEM, "crc_table allocation"); } #endif /* DYNALLOC_CRCTAB */ /* generate a crc for every 8-bit value */ for (n = 0; n < 256; n++) { c = (ulg)n; for (k = 8; k; k--) c = c & 1 ? xor ^ (c >> 1) : c >> 1; crctab_p[n] = REV_BE(c); } #ifdef IZ_CRCOPTIM_UNFOLDTBL /* generate crc for each value followed by one, two, and three zeros */ for (n = 0; n < 256; n++) { c = crctab_p[n]; for (k = 1; k < 4; k++) { c = CRC32(c, 0, crctab_p); crctab_p[k*256+n] = c; } } #endif /* IZ_CRCOPTIM_UNFOLDTBL */ MARK_CRCTAB_FILLED; } #else /* !DYNAMIC_CRC_TABLE */ #ifdef DYNALLOC_CRCTAB error: Inconsistent flags, DYNALLOC_CRCTAB without DYNAMIC_CRC_TABLE. #endif /* ======================================================================== * Table of CRC-32's of all single-byte values (made by make_crc_table) */ local ZCONST ulg near crc_table[CRC_TBLS*256] = { # ifdef IZ_CRC_BE_OPTIMIZ 0x00000000L, 0x96300777L, 0x2c610eeeL, 0xba510999L, 0x19c46d07L, 0x8ff46a70L, 0x35a563e9L, 0xa395649eL, 0x3288db0eL, 0xa4b8dc79L, 0x1ee9d5e0L, 0x88d9d297L, 0x2b4cb609L, 0xbd7cb17eL, 0x072db8e7L, 0x911dbf90L, 0x6410b71dL, 0xf220b06aL, 0x4871b9f3L, 0xde41be84L, 0x7dd4da1aL, 0xebe4dd6dL, 0x51b5d4f4L, 0xc785d383L, 0x56986c13L, 0xc0a86b64L, 0x7af962fdL, 0xecc9658aL, 0x4f5c0114L, 0xd96c0663L, 0x633d0ffaL, 0xf50d088dL, 0xc8206e3bL, 0x5e10694cL, 0xe44160d5L, 0x727167a2L, 0xd1e4033cL, 0x47d4044bL, 0xfd850dd2L, 0x6bb50aa5L, 0xfaa8b535L, 0x6c98b242L, 0xd6c9bbdbL, 0x40f9bcacL, 0xe36cd832L, 0x755cdf45L, 0xcf0dd6dcL, 0x593dd1abL, 0xac30d926L, 0x3a00de51L, 0x8051d7c8L, 0x1661d0bfL, 0xb5f4b421L, 0x23c4b356L, 0x9995bacfL, 0x0fa5bdb8L, 0x9eb80228L, 0x0888055fL, 0xb2d90cc6L, 0x24e90bb1L, 0x877c6f2fL, 0x114c6858L, 0xab1d61c1L, 0x3d2d66b6L, 0x9041dc76L, 0x0671db01L, 0xbc20d298L, 0x2a10d5efL, 0x8985b171L, 0x1fb5b606L, 0xa5e4bf9fL, 0x33d4b8e8L, 0xa2c90778L, 0x34f9000fL, 0x8ea80996L, 0x18980ee1L, 0xbb0d6a7fL, 0x2d3d6d08L, 0x976c6491L, 0x015c63e6L, 0xf4516b6bL, 0x62616c1cL, 0xd8306585L, 0x4e0062f2L, 0xed95066cL, 0x7ba5011bL, 0xc1f40882L, 0x57c40ff5L, 0xc6d9b065L, 0x50e9b712L, 0xeab8be8bL, 0x7c88b9fcL, 0xdf1ddd62L, 0x492dda15L, 0xf37cd38cL, 0x654cd4fbL, 0x5861b24dL, 0xce51b53aL, 0x7400bca3L, 0xe230bbd4L, 0x41a5df4aL, 0xd795d83dL, 0x6dc4d1a4L, 0xfbf4d6d3L, 0x6ae96943L, 0xfcd96e34L, 0x468867adL, 0xd0b860daL, 0x732d0444L, 0xe51d0333L, 0x5f4c0aaaL, 0xc97c0dddL, 0x3c710550L, 0xaa410227L, 0x10100bbeL, 0x86200cc9L, 0x25b56857L, 0xb3856f20L, 0x09d466b9L, 0x9fe461ceL, 0x0ef9de5eL, 0x98c9d929L, 0x2298d0b0L, 0xb4a8d7c7L, 0x173db359L, 0x810db42eL, 0x3b5cbdb7L, 0xad6cbac0L, 0x2083b8edL, 0xb6b3bf9aL, 0x0ce2b603L, 0x9ad2b174L, 0x3947d5eaL, 0xaf77d29dL, 0x1526db04L, 0x8316dc73L, 0x120b63e3L, 0x843b6494L, 0x3e6a6d0dL, 0xa85a6a7aL, 0x0bcf0ee4L, 0x9dff0993L, 0x27ae000aL, 0xb19e077dL, 0x44930ff0L, 0xd2a30887L, 0x68f2011eL, 0xfec20669L, 0x5d5762f7L, 0xcb676580L, 0x71366c19L, 0xe7066b6eL, 0x761bd4feL, 0xe02bd389L, 0x5a7ada10L, 0xcc4add67L, 0x6fdfb9f9L, 0xf9efbe8eL, 0x43beb717L, 0xd58eb060L, 0xe8a3d6d6L, 0x7e93d1a1L, 0xc4c2d838L, 0x52f2df4fL, 0xf167bbd1L, 0x6757bca6L, 0xdd06b53fL, 0x4b36b248L, 0xda2b0dd8L, 0x4c1b0aafL, 0xf64a0336L, 0x607a0441L, 0xc3ef60dfL, 0x55df67a8L, 0xef8e6e31L, 0x79be6946L, 0x8cb361cbL, 0x1a8366bcL, 0xa0d26f25L, 0x36e26852L, 0x95770cccL, 0x03470bbbL, 0xb9160222L, 0x2f260555L, 0xbe3bbac5L, 0x280bbdb2L, 0x925ab42bL, 0x046ab35cL, 0xa7ffd7c2L, 0x31cfd0b5L, 0x8b9ed92cL, 0x1daede5bL, 0xb0c2649bL, 0x26f263ecL, 0x9ca36a75L, 0x0a936d02L, 0xa906099cL, 0x3f360eebL, 0x85670772L, 0x13570005L, 0x824abf95L, 0x147ab8e2L, 0xae2bb17bL, 0x381bb60cL, 0x9b8ed292L, 0x0dbed5e5L, 0xb7efdc7cL, 0x21dfdb0bL, 0xd4d2d386L, 0x42e2d4f1L, 0xf8b3dd68L, 0x6e83da1fL, 0xcd16be81L, 0x5b26b9f6L, 0xe177b06fL, 0x7747b718L, 0xe65a0888L, 0x706a0fffL, 0xca3b0666L, 0x5c0b0111L, 0xff9e658fL, 0x69ae62f8L, 0xd3ff6b61L, 0x45cf6c16L, 0x78e20aa0L, 0xeed20dd7L, 0x5483044eL, 0xc2b30339L, 0x612667a7L, 0xf71660d0L, 0x4d476949L, 0xdb776e3eL, 0x4a6ad1aeL, 0xdc5ad6d9L, 0x660bdf40L, 0xf03bd837L, 0x53aebca9L, 0xc59ebbdeL, 0x7fcfb247L, 0xe9ffb530L, 0x1cf2bdbdL, 0x8ac2bacaL, 0x3093b353L, 0xa6a3b424L, 0x0536d0baL, 0x9306d7cdL, 0x2957de54L, 0xbf67d923L, 0x2e7a66b3L, 0xb84a61c4L, 0x021b685dL, 0x942b6f2aL, 0x37be0bb4L, 0xa18e0cc3L, 0x1bdf055aL, 0x8def022dL # ifdef IZ_CRCOPTIM_UNFOLDTBL , 0x00000000L, 0x41311b19L, 0x82623632L, 0xc3532d2bL, 0x04c56c64L, 0x45f4777dL, 0x86a75a56L, 0xc796414fL, 0x088ad9c8L, 0x49bbc2d1L, 0x8ae8effaL, 0xcbd9f4e3L, 0x0c4fb5acL, 0x4d7eaeb5L, 0x8e2d839eL, 0xcf1c9887L, 0x5112c24aL, 0x1023d953L, 0xd370f478L, 0x9241ef61L, 0x55d7ae2eL, 0x14e6b537L, 0xd7b5981cL, 0x96848305L, 0x59981b82L, 0x18a9009bL, 0xdbfa2db0L, 0x9acb36a9L, 0x5d5d77e6L, 0x1c6c6cffL, 0xdf3f41d4L, 0x9e0e5acdL, 0xa2248495L, 0xe3159f8cL, 0x2046b2a7L, 0x6177a9beL, 0xa6e1e8f1L, 0xe7d0f3e8L, 0x2483dec3L, 0x65b2c5daL, 0xaaae5d5dL, 0xeb9f4644L, 0x28cc6b6fL, 0x69fd7076L, 0xae6b3139L, 0xef5a2a20L, 0x2c09070bL, 0x6d381c12L, 0xf33646dfL, 0xb2075dc6L, 0x715470edL, 0x30656bf4L, 0xf7f32abbL, 0xb6c231a2L, 0x75911c89L, 0x34a00790L, 0xfbbc9f17L, 0xba8d840eL, 0x79dea925L, 0x38efb23cL, 0xff79f373L, 0xbe48e86aL, 0x7d1bc541L, 0x3c2ade58L, 0x054f79f0L, 0x447e62e9L, 0x872d4fc2L, 0xc61c54dbL, 0x018a1594L, 0x40bb0e8dL, 0x83e823a6L, 0xc2d938bfL, 0x0dc5a038L, 0x4cf4bb21L, 0x8fa7960aL, 0xce968d13L, 0x0900cc5cL, 0x4831d745L, 0x8b62fa6eL, 0xca53e177L, 0x545dbbbaL, 0x156ca0a3L, 0xd63f8d88L, 0x970e9691L, 0x5098d7deL, 0x11a9ccc7L, 0xd2fae1ecL, 0x93cbfaf5L, 0x5cd76272L, 0x1de6796bL, 0xdeb55440L, 0x9f844f59L, 0x58120e16L, 0x1923150fL, 0xda703824L, 0x9b41233dL, 0xa76bfd65L, 0xe65ae67cL, 0x2509cb57L, 0x6438d04eL, 0xa3ae9101L, 0xe29f8a18L, 0x21cca733L, 0x60fdbc2aL, 0xafe124adL, 0xeed03fb4L, 0x2d83129fL, 0x6cb20986L, 0xab2448c9L, 0xea1553d0L, 0x29467efbL, 0x687765e2L, 0xf6793f2fL, 0xb7482436L, 0x741b091dL, 0x352a1204L, 0xf2bc534bL, 0xb38d4852L, 0x70de6579L, 0x31ef7e60L, 0xfef3e6e7L, 0xbfc2fdfeL, 0x7c91d0d5L, 0x3da0cbccL, 0xfa368a83L, 0xbb07919aL, 0x7854bcb1L, 0x3965a7a8L, 0x4b98833bL, 0x0aa99822L, 0xc9fab509L, 0x88cbae10L, 0x4f5def5fL, 0x0e6cf446L, 0xcd3fd96dL, 0x8c0ec274L, 0x43125af3L, 0x022341eaL, 0xc1706cc1L, 0x804177d8L, 0x47d73697L, 0x06e62d8eL, 0xc5b500a5L, 0x84841bbcL, 0x1a8a4171L, 0x5bbb5a68L, 0x98e87743L, 0xd9d96c5aL, 0x1e4f2d15L, 0x5f7e360cL, 0x9c2d1b27L, 0xdd1c003eL, 0x120098b9L, 0x533183a0L, 0x9062ae8bL, 0xd153b592L, 0x16c5f4ddL, 0x57f4efc4L, 0x94a7c2efL, 0xd596d9f6L, 0xe9bc07aeL, 0xa88d1cb7L, 0x6bde319cL, 0x2aef2a85L, 0xed796bcaL, 0xac4870d3L, 0x6f1b5df8L, 0x2e2a46e1L, 0xe136de66L, 0xa007c57fL, 0x6354e854L, 0x2265f34dL, 0xe5f3b202L, 0xa4c2a91bL, 0x67918430L, 0x26a09f29L, 0xb8aec5e4L, 0xf99fdefdL, 0x3accf3d6L, 0x7bfde8cfL, 0xbc6ba980L, 0xfd5ab299L, 0x3e099fb2L, 0x7f3884abL, 0xb0241c2cL, 0xf1150735L, 0x32462a1eL, 0x73773107L, 0xb4e17048L, 0xf5d06b51L, 0x3683467aL, 0x77b25d63L, 0x4ed7facbL, 0x0fe6e1d2L, 0xccb5ccf9L, 0x8d84d7e0L, 0x4a1296afL, 0x0b238db6L, 0xc870a09dL, 0x8941bb84L, 0x465d2303L, 0x076c381aL, 0xc43f1531L, 0x850e0e28L, 0x42984f67L, 0x03a9547eL, 0xc0fa7955L, 0x81cb624cL, 0x1fc53881L, 0x5ef42398L, 0x9da70eb3L, 0xdc9615aaL, 0x1b0054e5L, 0x5a314ffcL, 0x996262d7L, 0xd85379ceL, 0x174fe149L, 0x567efa50L, 0x952dd77bL, 0xd41ccc62L, 0x138a8d2dL, 0x52bb9634L, 0x91e8bb1fL, 0xd0d9a006L, 0xecf37e5eL, 0xadc26547L, 0x6e91486cL, 0x2fa05375L, 0xe836123aL, 0xa9070923L, 0x6a542408L, 0x2b653f11L, 0xe479a796L, 0xa548bc8fL, 0x661b91a4L, 0x272a8abdL, 0xe0bccbf2L, 0xa18dd0ebL, 0x62defdc0L, 0x23efe6d9L, 0xbde1bc14L, 0xfcd0a70dL, 0x3f838a26L, 0x7eb2913fL, 0xb924d070L, 0xf815cb69L, 0x3b46e642L, 0x7a77fd5bL, 0xb56b65dcL, 0xf45a7ec5L, 0x370953eeL, 0x763848f7L, 0xb1ae09b8L, 0xf09f12a1L, 0x33cc3f8aL, 0x72fd2493L , 0x00000000L, 0x376ac201L, 0x6ed48403L, 0x59be4602L, 0xdca80907L, 0xebc2cb06L, 0xb27c8d04L, 0x85164f05L, 0xb851130eL, 0x8f3bd10fL, 0xd685970dL, 0xe1ef550cL, 0x64f91a09L, 0x5393d808L, 0x0a2d9e0aL, 0x3d475c0bL, 0x70a3261cL, 0x47c9e41dL, 0x1e77a21fL, 0x291d601eL, 0xac0b2f1bL, 0x9b61ed1aL, 0xc2dfab18L, 0xf5b56919L, 0xc8f23512L, 0xff98f713L, 0xa626b111L, 0x914c7310L, 0x145a3c15L, 0x2330fe14L, 0x7a8eb816L, 0x4de47a17L, 0xe0464d38L, 0xd72c8f39L, 0x8e92c93bL, 0xb9f80b3aL, 0x3cee443fL, 0x0b84863eL, 0x523ac03cL, 0x6550023dL, 0x58175e36L, 0x6f7d9c37L, 0x36c3da35L, 0x01a91834L, 0x84bf5731L, 0xb3d59530L, 0xea6bd332L, 0xdd011133L, 0x90e56b24L, 0xa78fa925L, 0xfe31ef27L, 0xc95b2d26L, 0x4c4d6223L, 0x7b27a022L, 0x2299e620L, 0x15f32421L, 0x28b4782aL, 0x1fdeba2bL, 0x4660fc29L, 0x710a3e28L, 0xf41c712dL, 0xc376b32cL, 0x9ac8f52eL, 0xada2372fL, 0xc08d9a70L, 0xf7e75871L, 0xae591e73L, 0x9933dc72L, 0x1c259377L, 0x2b4f5176L, 0x72f11774L, 0x459bd575L, 0x78dc897eL, 0x4fb64b7fL, 0x16080d7dL, 0x2162cf7cL, 0xa4748079L, 0x931e4278L, 0xcaa0047aL, 0xfdcac67bL, 0xb02ebc6cL, 0x87447e6dL, 0xdefa386fL, 0xe990fa6eL, 0x6c86b56bL, 0x5bec776aL, 0x02523168L, 0x3538f369L, 0x087faf62L, 0x3f156d63L, 0x66ab2b61L, 0x51c1e960L, 0xd4d7a665L, 0xe3bd6464L, 0xba032266L, 0x8d69e067L, 0x20cbd748L, 0x17a11549L, 0x4e1f534bL, 0x7975914aL, 0xfc63de4fL, 0xcb091c4eL, 0x92b75a4cL, 0xa5dd984dL, 0x989ac446L, 0xaff00647L, 0xf64e4045L, 0xc1248244L, 0x4432cd41L, 0x73580f40L, 0x2ae64942L, 0x1d8c8b43L, 0x5068f154L, 0x67023355L, 0x3ebc7557L, 0x09d6b756L, 0x8cc0f853L, 0xbbaa3a52L, 0xe2147c50L, 0xd57ebe51L, 0xe839e25aL, 0xdf53205bL, 0x86ed6659L, 0xb187a458L, 0x3491eb5dL, 0x03fb295cL, 0x5a456f5eL, 0x6d2fad5fL, 0x801b35e1L, 0xb771f7e0L, 0xeecfb1e2L, 0xd9a573e3L, 0x5cb33ce6L, 0x6bd9fee7L, 0x3267b8e5L, 0x050d7ae4L, 0x384a26efL, 0x0f20e4eeL, 0x569ea2ecL, 0x61f460edL, 0xe4e22fe8L, 0xd388ede9L, 0x8a36abebL, 0xbd5c69eaL, 0xf0b813fdL, 0xc7d2d1fcL, 0x9e6c97feL, 0xa90655ffL, 0x2c101afaL, 0x1b7ad8fbL, 0x42c49ef9L, 0x75ae5cf8L, 0x48e900f3L, 0x7f83c2f2L, 0x263d84f0L, 0x115746f1L, 0x944109f4L, 0xa32bcbf5L, 0xfa958df7L, 0xcdff4ff6L, 0x605d78d9L, 0x5737bad8L, 0x0e89fcdaL, 0x39e33edbL, 0xbcf571deL, 0x8b9fb3dfL, 0xd221f5ddL, 0xe54b37dcL, 0xd80c6bd7L, 0xef66a9d6L, 0xb6d8efd4L, 0x81b22dd5L, 0x04a462d0L, 0x33cea0d1L, 0x6a70e6d3L, 0x5d1a24d2L, 0x10fe5ec5L, 0x27949cc4L, 0x7e2adac6L, 0x494018c7L, 0xcc5657c2L, 0xfb3c95c3L, 0xa282d3c1L, 0x95e811c0L, 0xa8af4dcbL, 0x9fc58fcaL, 0xc67bc9c8L, 0xf1110bc9L, 0x740744ccL, 0x436d86cdL, 0x1ad3c0cfL, 0x2db902ceL, 0x4096af91L, 0x77fc6d90L, 0x2e422b92L, 0x1928e993L, 0x9c3ea696L, 0xab546497L, 0xf2ea2295L, 0xc580e094L, 0xf8c7bc9fL, 0xcfad7e9eL, 0x9613389cL, 0xa179fa9dL, 0x246fb598L, 0x13057799L, 0x4abb319bL, 0x7dd1f39aL, 0x3035898dL, 0x075f4b8cL, 0x5ee10d8eL, 0x698bcf8fL, 0xec9d808aL, 0xdbf7428bL, 0x82490489L, 0xb523c688L, 0x88649a83L, 0xbf0e5882L, 0xe6b01e80L, 0xd1dadc81L, 0x54cc9384L, 0x63a65185L, 0x3a181787L, 0x0d72d586L, 0xa0d0e2a9L, 0x97ba20a8L, 0xce0466aaL, 0xf96ea4abL, 0x7c78ebaeL, 0x4b1229afL, 0x12ac6fadL, 0x25c6adacL, 0x1881f1a7L, 0x2feb33a6L, 0x765575a4L, 0x413fb7a5L, 0xc429f8a0L, 0xf3433aa1L, 0xaafd7ca3L, 0x9d97bea2L, 0xd073c4b5L, 0xe71906b4L, 0xbea740b6L, 0x89cd82b7L, 0x0cdbcdb2L, 0x3bb10fb3L, 0x620f49b1L, 0x55658bb0L, 0x6822d7bbL, 0x5f4815baL, 0x06f653b8L, 0x319c91b9L, 0xb48adebcL, 0x83e01cbdL, 0xda5e5abfL, 0xed3498beL , 0x00000000L, 0x6567bcb8L, 0x8bc809aaL, 0xeeafb512L, 0x5797628fL, 0x32f0de37L, 0xdc5f6b25L, 0xb938d79dL, 0xef28b4c5L, 0x8a4f087dL, 0x64e0bd6fL, 0x018701d7L, 0xb8bfd64aL, 0xddd86af2L, 0x3377dfe0L, 0x56106358L, 0x9f571950L, 0xfa30a5e8L, 0x149f10faL, 0x71f8ac42L, 0xc8c07bdfL, 0xada7c767L, 0x43087275L, 0x266fcecdL, 0x707fad95L, 0x1518112dL, 0xfbb7a43fL, 0x9ed01887L, 0x27e8cf1aL, 0x428f73a2L, 0xac20c6b0L, 0xc9477a08L, 0x3eaf32a0L, 0x5bc88e18L, 0xb5673b0aL, 0xd00087b2L, 0x6938502fL, 0x0c5fec97L, 0xe2f05985L, 0x8797e53dL, 0xd1878665L, 0xb4e03addL, 0x5a4f8fcfL, 0x3f283377L, 0x8610e4eaL, 0xe3775852L, 0x0dd8ed40L, 0x68bf51f8L, 0xa1f82bf0L, 0xc49f9748L, 0x2a30225aL, 0x4f579ee2L, 0xf66f497fL, 0x9308f5c7L, 0x7da740d5L, 0x18c0fc6dL, 0x4ed09f35L, 0x2bb7238dL, 0xc518969fL, 0xa07f2a27L, 0x1947fdbaL, 0x7c204102L, 0x928ff410L, 0xf7e848a8L, 0x3d58149bL, 0x583fa823L, 0xb6901d31L, 0xd3f7a189L, 0x6acf7614L, 0x0fa8caacL, 0xe1077fbeL, 0x8460c306L, 0xd270a05eL, 0xb7171ce6L, 0x59b8a9f4L, 0x3cdf154cL, 0x85e7c2d1L, 0xe0807e69L, 0x0e2fcb7bL, 0x6b4877c3L, 0xa20f0dcbL, 0xc768b173L, 0x29c70461L, 0x4ca0b8d9L, 0xf5986f44L, 0x90ffd3fcL, 0x7e5066eeL, 0x1b37da56L, 0x4d27b90eL, 0x284005b6L, 0xc6efb0a4L, 0xa3880c1cL, 0x1ab0db81L, 0x7fd76739L, 0x9178d22bL, 0xf41f6e93L, 0x03f7263bL, 0x66909a83L, 0x883f2f91L, 0xed589329L, 0x546044b4L, 0x3107f80cL, 0xdfa84d1eL, 0xbacff1a6L, 0xecdf92feL, 0x89b82e46L, 0x67179b54L, 0x027027ecL, 0xbb48f071L, 0xde2f4cc9L, 0x3080f9dbL, 0x55e74563L, 0x9ca03f6bL, 0xf9c783d3L, 0x176836c1L, 0x720f8a79L, 0xcb375de4L, 0xae50e15cL, 0x40ff544eL, 0x2598e8f6L, 0x73888baeL, 0x16ef3716L, 0xf8408204L, 0x9d273ebcL, 0x241fe921L, 0x41785599L, 0xafd7e08bL, 0xcab05c33L, 0x3bb659edL, 0x5ed1e555L, 0xb07e5047L, 0xd519ecffL, 0x6c213b62L, 0x094687daL, 0xe7e932c8L, 0x828e8e70L, 0xd49eed28L, 0xb1f95190L, 0x5f56e482L, 0x3a31583aL, 0x83098fa7L, 0xe66e331fL, 0x08c1860dL, 0x6da63ab5L, 0xa4e140bdL, 0xc186fc05L, 0x2f294917L, 0x4a4ef5afL, 0xf3762232L, 0x96119e8aL, 0x78be2b98L, 0x1dd99720L, 0x4bc9f478L, 0x2eae48c0L, 0xc001fdd2L, 0xa566416aL, 0x1c5e96f7L, 0x79392a4fL, 0x97969f5dL, 0xf2f123e5L, 0x05196b4dL, 0x607ed7f5L, 0x8ed162e7L, 0xebb6de5fL, 0x528e09c2L, 0x37e9b57aL, 0xd9460068L, 0xbc21bcd0L, 0xea31df88L, 0x8f566330L, 0x61f9d622L, 0x049e6a9aL, 0xbda6bd07L, 0xd8c101bfL, 0x366eb4adL, 0x53090815L, 0x9a4e721dL, 0xff29cea5L, 0x11867bb7L, 0x74e1c70fL, 0xcdd91092L, 0xa8beac2aL, 0x46111938L, 0x2376a580L, 0x7566c6d8L, 0x10017a60L, 0xfeaecf72L, 0x9bc973caL, 0x22f1a457L, 0x479618efL, 0xa939adfdL, 0xcc5e1145L, 0x06ee4d76L, 0x6389f1ceL, 0x8d2644dcL, 0xe841f864L, 0x51792ff9L, 0x341e9341L, 0xdab12653L, 0xbfd69aebL, 0xe9c6f9b3L, 0x8ca1450bL, 0x620ef019L, 0x07694ca1L, 0xbe519b3cL, 0xdb362784L, 0x35999296L, 0x50fe2e2eL, 0x99b95426L, 0xfcdee89eL, 0x12715d8cL, 0x7716e134L, 0xce2e36a9L, 0xab498a11L, 0x45e63f03L, 0x208183bbL, 0x7691e0e3L, 0x13f65c5bL, 0xfd59e949L, 0x983e55f1L, 0x2106826cL, 0x44613ed4L, 0xaace8bc6L, 0xcfa9377eL, 0x38417fd6L, 0x5d26c36eL, 0xb389767cL, 0xd6eecac4L, 0x6fd61d59L, 0x0ab1a1e1L, 0xe41e14f3L, 0x8179a84bL, 0xd769cb13L, 0xb20e77abL, 0x5ca1c2b9L, 0x39c67e01L, 0x80fea99cL, 0xe5991524L, 0x0b36a036L, 0x6e511c8eL, 0xa7166686L, 0xc271da3eL, 0x2cde6f2cL, 0x49b9d394L, 0xf0810409L, 0x95e6b8b1L, 0x7b490da3L, 0x1e2eb11bL, 0x483ed243L, 0x2d596efbL, 0xc3f6dbe9L, 0xa6916751L, 0x1fa9b0ccL, 0x7ace0c74L, 0x9461b966L, 0xf10605deL # endif /* IZ_CRCOPTIM_UNFOLDTBL */ # else /* !IZ_CRC_BE_OPTIMIZ */ 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L, 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L, 0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L, 0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL, 0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L, 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L, 0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L, 0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL, 0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L, 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL, 0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L, 0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L, 0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L, 0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL, 0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL, 0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L, 0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL, 0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L, 0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L, 0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L, 0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL, 0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L, 0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L, 0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL, 0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L, 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L, 0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L, 0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L, 0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L, 0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL, 0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL, 0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L, 0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L, 0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL, 0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL, 0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L, 0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL, 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L, 0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL, 0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L, 0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL, 0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L, 0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L, 0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL, 0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L, 0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L, 0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L, 0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L, 0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L, 0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L, 0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL, 0x2d02ef8dL # ifdef IZ_CRCOPTIM_UNFOLDTBL , 0x00000000L, 0x191b3141L, 0x32366282L, 0x2b2d53c3L, 0x646cc504L, 0x7d77f445L, 0x565aa786L, 0x4f4196c7L, 0xc8d98a08L, 0xd1c2bb49L, 0xfaefe88aL, 0xe3f4d9cbL, 0xacb54f0cL, 0xb5ae7e4dL, 0x9e832d8eL, 0x87981ccfL, 0x4ac21251L, 0x53d92310L, 0x78f470d3L, 0x61ef4192L, 0x2eaed755L, 0x37b5e614L, 0x1c98b5d7L, 0x05838496L, 0x821b9859L, 0x9b00a918L, 0xb02dfadbL, 0xa936cb9aL, 0xe6775d5dL, 0xff6c6c1cL, 0xd4413fdfL, 0xcd5a0e9eL, 0x958424a2L, 0x8c9f15e3L, 0xa7b24620L, 0xbea97761L, 0xf1e8e1a6L, 0xe8f3d0e7L, 0xc3de8324L, 0xdac5b265L, 0x5d5daeaaL, 0x44469febL, 0x6f6bcc28L, 0x7670fd69L, 0x39316baeL, 0x202a5aefL, 0x0b07092cL, 0x121c386dL, 0xdf4636f3L, 0xc65d07b2L, 0xed705471L, 0xf46b6530L, 0xbb2af3f7L, 0xa231c2b6L, 0x891c9175L, 0x9007a034L, 0x179fbcfbL, 0x0e848dbaL, 0x25a9de79L, 0x3cb2ef38L, 0x73f379ffL, 0x6ae848beL, 0x41c51b7dL, 0x58de2a3cL, 0xf0794f05L, 0xe9627e44L, 0xc24f2d87L, 0xdb541cc6L, 0x94158a01L, 0x8d0ebb40L, 0xa623e883L, 0xbf38d9c2L, 0x38a0c50dL, 0x21bbf44cL, 0x0a96a78fL, 0x138d96ceL, 0x5ccc0009L, 0x45d73148L, 0x6efa628bL, 0x77e153caL, 0xbabb5d54L, 0xa3a06c15L, 0x888d3fd6L, 0x91960e97L, 0xded79850L, 0xc7cca911L, 0xece1fad2L, 0xf5facb93L, 0x7262d75cL, 0x6b79e61dL, 0x4054b5deL, 0x594f849fL, 0x160e1258L, 0x0f152319L, 0x243870daL, 0x3d23419bL, 0x65fd6ba7L, 0x7ce65ae6L, 0x57cb0925L, 0x4ed03864L, 0x0191aea3L, 0x188a9fe2L, 0x33a7cc21L, 0x2abcfd60L, 0xad24e1afL, 0xb43fd0eeL, 0x9f12832dL, 0x8609b26cL, 0xc94824abL, 0xd05315eaL, 0xfb7e4629L, 0xe2657768L, 0x2f3f79f6L, 0x362448b7L, 0x1d091b74L, 0x04122a35L, 0x4b53bcf2L, 0x52488db3L, 0x7965de70L, 0x607eef31L, 0xe7e6f3feL, 0xfefdc2bfL, 0xd5d0917cL, 0xcccba03dL, 0x838a36faL, 0x9a9107bbL, 0xb1bc5478L, 0xa8a76539L, 0x3b83984bL, 0x2298a90aL, 0x09b5fac9L, 0x10aecb88L, 0x5fef5d4fL, 0x46f46c0eL, 0x6dd93fcdL, 0x74c20e8cL, 0xf35a1243L, 0xea412302L, 0xc16c70c1L, 0xd8774180L, 0x9736d747L, 0x8e2de606L, 0xa500b5c5L, 0xbc1b8484L, 0x71418a1aL, 0x685abb5bL, 0x4377e898L, 0x5a6cd9d9L, 0x152d4f1eL, 0x0c367e5fL, 0x271b2d9cL, 0x3e001cddL, 0xb9980012L, 0xa0833153L, 0x8bae6290L, 0x92b553d1L, 0xddf4c516L, 0xc4eff457L, 0xefc2a794L, 0xf6d996d5L, 0xae07bce9L, 0xb71c8da8L, 0x9c31de6bL, 0x852aef2aL, 0xca6b79edL, 0xd37048acL, 0xf85d1b6fL, 0xe1462a2eL, 0x66de36e1L, 0x7fc507a0L, 0x54e85463L, 0x4df36522L, 0x02b2f3e5L, 0x1ba9c2a4L, 0x30849167L, 0x299fa026L, 0xe4c5aeb8L, 0xfdde9ff9L, 0xd6f3cc3aL, 0xcfe8fd7bL, 0x80a96bbcL, 0x99b25afdL, 0xb29f093eL, 0xab84387fL, 0x2c1c24b0L, 0x350715f1L, 0x1e2a4632L, 0x07317773L, 0x4870e1b4L, 0x516bd0f5L, 0x7a468336L, 0x635db277L, 0xcbfad74eL, 0xd2e1e60fL, 0xf9ccb5ccL, 0xe0d7848dL, 0xaf96124aL, 0xb68d230bL, 0x9da070c8L, 0x84bb4189L, 0x03235d46L, 0x1a386c07L, 0x31153fc4L, 0x280e0e85L, 0x674f9842L, 0x7e54a903L, 0x5579fac0L, 0x4c62cb81L, 0x8138c51fL, 0x9823f45eL, 0xb30ea79dL, 0xaa1596dcL, 0xe554001bL, 0xfc4f315aL, 0xd7626299L, 0xce7953d8L, 0x49e14f17L, 0x50fa7e56L, 0x7bd72d95L, 0x62cc1cd4L, 0x2d8d8a13L, 0x3496bb52L, 0x1fbbe891L, 0x06a0d9d0L, 0x5e7ef3ecL, 0x4765c2adL, 0x6c48916eL, 0x7553a02fL, 0x3a1236e8L, 0x230907a9L, 0x0824546aL, 0x113f652bL, 0x96a779e4L, 0x8fbc48a5L, 0xa4911b66L, 0xbd8a2a27L, 0xf2cbbce0L, 0xebd08da1L, 0xc0fdde62L, 0xd9e6ef23L, 0x14bce1bdL, 0x0da7d0fcL, 0x268a833fL, 0x3f91b27eL, 0x70d024b9L, 0x69cb15f8L, 0x42e6463bL, 0x5bfd777aL, 0xdc656bb5L, 0xc57e5af4L, 0xee530937L, 0xf7483876L, 0xb809aeb1L, 0xa1129ff0L, 0x8a3fcc33L, 0x9324fd72L , 0x00000000L, 0x01c26a37L, 0x0384d46eL, 0x0246be59L, 0x0709a8dcL, 0x06cbc2ebL, 0x048d7cb2L, 0x054f1685L, 0x0e1351b8L, 0x0fd13b8fL, 0x0d9785d6L, 0x0c55efe1L, 0x091af964L, 0x08d89353L, 0x0a9e2d0aL, 0x0b5c473dL, 0x1c26a370L, 0x1de4c947L, 0x1fa2771eL, 0x1e601d29L, 0x1b2f0bacL, 0x1aed619bL, 0x18abdfc2L, 0x1969b5f5L, 0x1235f2c8L, 0x13f798ffL, 0x11b126a6L, 0x10734c91L, 0x153c5a14L, 0x14fe3023L, 0x16b88e7aL, 0x177ae44dL, 0x384d46e0L, 0x398f2cd7L, 0x3bc9928eL, 0x3a0bf8b9L, 0x3f44ee3cL, 0x3e86840bL, 0x3cc03a52L, 0x3d025065L, 0x365e1758L, 0x379c7d6fL, 0x35dac336L, 0x3418a901L, 0x3157bf84L, 0x3095d5b3L, 0x32d36beaL, 0x331101ddL, 0x246be590L, 0x25a98fa7L, 0x27ef31feL, 0x262d5bc9L, 0x23624d4cL, 0x22a0277bL, 0x20e69922L, 0x2124f315L, 0x2a78b428L, 0x2bbade1fL, 0x29fc6046L, 0x283e0a71L, 0x2d711cf4L, 0x2cb376c3L, 0x2ef5c89aL, 0x2f37a2adL, 0x709a8dc0L, 0x7158e7f7L, 0x731e59aeL, 0x72dc3399L, 0x7793251cL, 0x76514f2bL, 0x7417f172L, 0x75d59b45L, 0x7e89dc78L, 0x7f4bb64fL, 0x7d0d0816L, 0x7ccf6221L, 0x798074a4L, 0x78421e93L, 0x7a04a0caL, 0x7bc6cafdL, 0x6cbc2eb0L, 0x6d7e4487L, 0x6f38fadeL, 0x6efa90e9L, 0x6bb5866cL, 0x6a77ec5bL, 0x68315202L, 0x69f33835L, 0x62af7f08L, 0x636d153fL, 0x612bab66L, 0x60e9c151L, 0x65a6d7d4L, 0x6464bde3L, 0x662203baL, 0x67e0698dL, 0x48d7cb20L, 0x4915a117L, 0x4b531f4eL, 0x4a917579L, 0x4fde63fcL, 0x4e1c09cbL, 0x4c5ab792L, 0x4d98dda5L, 0x46c49a98L, 0x4706f0afL, 0x45404ef6L, 0x448224c1L, 0x41cd3244L, 0x400f5873L, 0x4249e62aL, 0x438b8c1dL, 0x54f16850L, 0x55330267L, 0x5775bc3eL, 0x56b7d609L, 0x53f8c08cL, 0x523aaabbL, 0x507c14e2L, 0x51be7ed5L, 0x5ae239e8L, 0x5b2053dfL, 0x5966ed86L, 0x58a487b1L, 0x5deb9134L, 0x5c29fb03L, 0x5e6f455aL, 0x5fad2f6dL, 0xe1351b80L, 0xe0f771b7L, 0xe2b1cfeeL, 0xe373a5d9L, 0xe63cb35cL, 0xe7fed96bL, 0xe5b86732L, 0xe47a0d05L, 0xef264a38L, 0xeee4200fL, 0xeca29e56L, 0xed60f461L, 0xe82fe2e4L, 0xe9ed88d3L, 0xebab368aL, 0xea695cbdL, 0xfd13b8f0L, 0xfcd1d2c7L, 0xfe976c9eL, 0xff5506a9L, 0xfa1a102cL, 0xfbd87a1bL, 0xf99ec442L, 0xf85cae75L, 0xf300e948L, 0xf2c2837fL, 0xf0843d26L, 0xf1465711L, 0xf4094194L, 0xf5cb2ba3L, 0xf78d95faL, 0xf64fffcdL, 0xd9785d60L, 0xd8ba3757L, 0xdafc890eL, 0xdb3ee339L, 0xde71f5bcL, 0xdfb39f8bL, 0xddf521d2L, 0xdc374be5L, 0xd76b0cd8L, 0xd6a966efL, 0xd4efd8b6L, 0xd52db281L, 0xd062a404L, 0xd1a0ce33L, 0xd3e6706aL, 0xd2241a5dL, 0xc55efe10L, 0xc49c9427L, 0xc6da2a7eL, 0xc7184049L, 0xc25756ccL, 0xc3953cfbL, 0xc1d382a2L, 0xc011e895L, 0xcb4dafa8L, 0xca8fc59fL, 0xc8c97bc6L, 0xc90b11f1L, 0xcc440774L, 0xcd866d43L, 0xcfc0d31aL, 0xce02b92dL, 0x91af9640L, 0x906dfc77L, 0x922b422eL, 0x93e92819L, 0x96a63e9cL, 0x976454abL, 0x9522eaf2L, 0x94e080c5L, 0x9fbcc7f8L, 0x9e7eadcfL, 0x9c381396L, 0x9dfa79a1L, 0x98b56f24L, 0x99770513L, 0x9b31bb4aL, 0x9af3d17dL, 0x8d893530L, 0x8c4b5f07L, 0x8e0de15eL, 0x8fcf8b69L, 0x8a809decL, 0x8b42f7dbL, 0x89044982L, 0x88c623b5L, 0x839a6488L, 0x82580ebfL, 0x801eb0e6L, 0x81dcdad1L, 0x8493cc54L, 0x8551a663L, 0x8717183aL, 0x86d5720dL, 0xa9e2d0a0L, 0xa820ba97L, 0xaa6604ceL, 0xaba46ef9L, 0xaeeb787cL, 0xaf29124bL, 0xad6fac12L, 0xacadc625L, 0xa7f18118L, 0xa633eb2fL, 0xa4755576L, 0xa5b73f41L, 0xa0f829c4L, 0xa13a43f3L, 0xa37cfdaaL, 0xa2be979dL, 0xb5c473d0L, 0xb40619e7L, 0xb640a7beL, 0xb782cd89L, 0xb2cddb0cL, 0xb30fb13bL, 0xb1490f62L, 0xb08b6555L, 0xbbd72268L, 0xba15485fL, 0xb853f606L, 0xb9919c31L, 0xbcde8ab4L, 0xbd1ce083L, 0xbf5a5edaL, 0xbe9834edL , 0x00000000L, 0xb8bc6765L, 0xaa09c88bL, 0x12b5afeeL, 0x8f629757L, 0x37def032L, 0x256b5fdcL, 0x9dd738b9L, 0xc5b428efL, 0x7d084f8aL, 0x6fbde064L, 0xd7018701L, 0x4ad6bfb8L, 0xf26ad8ddL, 0xe0df7733L, 0x58631056L, 0x5019579fL, 0xe8a530faL, 0xfa109f14L, 0x42acf871L, 0xdf7bc0c8L, 0x67c7a7adL, 0x75720843L, 0xcdce6f26L, 0x95ad7f70L, 0x2d111815L, 0x3fa4b7fbL, 0x8718d09eL, 0x1acfe827L, 0xa2738f42L, 0xb0c620acL, 0x087a47c9L, 0xa032af3eL, 0x188ec85bL, 0x0a3b67b5L, 0xb28700d0L, 0x2f503869L, 0x97ec5f0cL, 0x8559f0e2L, 0x3de59787L, 0x658687d1L, 0xdd3ae0b4L, 0xcf8f4f5aL, 0x7733283fL, 0xeae41086L, 0x525877e3L, 0x40edd80dL, 0xf851bf68L, 0xf02bf8a1L, 0x48979fc4L, 0x5a22302aL, 0xe29e574fL, 0x7f496ff6L, 0xc7f50893L, 0xd540a77dL, 0x6dfcc018L, 0x359fd04eL, 0x8d23b72bL, 0x9f9618c5L, 0x272a7fa0L, 0xbafd4719L, 0x0241207cL, 0x10f48f92L, 0xa848e8f7L, 0x9b14583dL, 0x23a83f58L, 0x311d90b6L, 0x89a1f7d3L, 0x1476cf6aL, 0xaccaa80fL, 0xbe7f07e1L, 0x06c36084L, 0x5ea070d2L, 0xe61c17b7L, 0xf4a9b859L, 0x4c15df3cL, 0xd1c2e785L, 0x697e80e0L, 0x7bcb2f0eL, 0xc377486bL, 0xcb0d0fa2L, 0x73b168c7L, 0x6104c729L, 0xd9b8a04cL, 0x446f98f5L, 0xfcd3ff90L, 0xee66507eL, 0x56da371bL, 0x0eb9274dL, 0xb6054028L, 0xa4b0efc6L, 0x1c0c88a3L, 0x81dbb01aL, 0x3967d77fL, 0x2bd27891L, 0x936e1ff4L, 0x3b26f703L, 0x839a9066L, 0x912f3f88L, 0x299358edL, 0xb4446054L, 0x0cf80731L, 0x1e4da8dfL, 0xa6f1cfbaL, 0xfe92dfecL, 0x462eb889L, 0x549b1767L, 0xec277002L, 0x71f048bbL, 0xc94c2fdeL, 0xdbf98030L, 0x6345e755L, 0x6b3fa09cL, 0xd383c7f9L, 0xc1366817L, 0x798a0f72L, 0xe45d37cbL, 0x5ce150aeL, 0x4e54ff40L, 0xf6e89825L, 0xae8b8873L, 0x1637ef16L, 0x048240f8L, 0xbc3e279dL, 0x21e91f24L, 0x99557841L, 0x8be0d7afL, 0x335cb0caL, 0xed59b63bL, 0x55e5d15eL, 0x47507eb0L, 0xffec19d5L, 0x623b216cL, 0xda874609L, 0xc832e9e7L, 0x708e8e82L, 0x28ed9ed4L, 0x9051f9b1L, 0x82e4565fL, 0x3a58313aL, 0xa78f0983L, 0x1f336ee6L, 0x0d86c108L, 0xb53aa66dL, 0xbd40e1a4L, 0x05fc86c1L, 0x1749292fL, 0xaff54e4aL, 0x322276f3L, 0x8a9e1196L, 0x982bbe78L, 0x2097d91dL, 0x78f4c94bL, 0xc048ae2eL, 0xd2fd01c0L, 0x6a4166a5L, 0xf7965e1cL, 0x4f2a3979L, 0x5d9f9697L, 0xe523f1f2L, 0x4d6b1905L, 0xf5d77e60L, 0xe762d18eL, 0x5fdeb6ebL, 0xc2098e52L, 0x7ab5e937L, 0x680046d9L, 0xd0bc21bcL, 0x88df31eaL, 0x3063568fL, 0x22d6f961L, 0x9a6a9e04L, 0x07bda6bdL, 0xbf01c1d8L, 0xadb46e36L, 0x15080953L, 0x1d724e9aL, 0xa5ce29ffL, 0xb77b8611L, 0x0fc7e174L, 0x9210d9cdL, 0x2aacbea8L, 0x38191146L, 0x80a57623L, 0xd8c66675L, 0x607a0110L, 0x72cfaefeL, 0xca73c99bL, 0x57a4f122L, 0xef189647L, 0xfdad39a9L, 0x45115eccL, 0x764dee06L, 0xcef18963L, 0xdc44268dL, 0x64f841e8L, 0xf92f7951L, 0x41931e34L, 0x5326b1daL, 0xeb9ad6bfL, 0xb3f9c6e9L, 0x0b45a18cL, 0x19f00e62L, 0xa14c6907L, 0x3c9b51beL, 0x842736dbL, 0x96929935L, 0x2e2efe50L, 0x2654b999L, 0x9ee8defcL, 0x8c5d7112L, 0x34e11677L, 0xa9362eceL, 0x118a49abL, 0x033fe645L, 0xbb838120L, 0xe3e09176L, 0x5b5cf613L, 0x49e959fdL, 0xf1553e98L, 0x6c820621L, 0xd43e6144L, 0xc68bceaaL, 0x7e37a9cfL, 0xd67f4138L, 0x6ec3265dL, 0x7c7689b3L, 0xc4caeed6L, 0x591dd66fL, 0xe1a1b10aL, 0xf3141ee4L, 0x4ba87981L, 0x13cb69d7L, 0xab770eb2L, 0xb9c2a15cL, 0x017ec639L, 0x9ca9fe80L, 0x241599e5L, 0x36a0360bL, 0x8e1c516eL, 0x866616a7L, 0x3eda71c2L, 0x2c6fde2cL, 0x94d3b949L, 0x090481f0L, 0xb1b8e695L, 0xa30d497bL, 0x1bb12e1eL, 0x43d23e48L, 0xfb6e592dL, 0xe9dbf6c3L, 0x516791a6L, 0xccb0a91fL, 0x740cce7aL, 0x66b96194L, 0xde0506f1L # endif /* IZ_CRCOPTIM_UNFOLDTBL */ # endif /* ? IZ_CRC_BE_OPTIMIZ */ }; #endif /* ?DYNAMIC_CRC_TABLE */ /* use "OF((void))" here to work around a Borland TC++ 1.0 problem */ #ifdef USE_ZLIB ZCONST uLongf *get_crc_table OF((void)) #else ZCONST ulg near *get_crc_table OF((void)) #endif { #ifdef DYNAMIC_CRC_TABLE if (CRC_TABLE_IS_EMPTY) make_crc_table(); #endif #ifdef USE_ZLIB return (ZCONST uLongf *)crc_table; #else return crc_table; #endif } #ifdef DYNALLOC_CRCTAB void free_crc_table() { if (!CRC_TABLE_IS_EMPTY) { nearfree((ulg near *)crc_table); MARK_CRCTAB_EMPTY; } } #endif #ifndef USE_ZLIB #ifndef CRC_TABLE_ONLY #ifndef ASM_CRC #define DO1(crc, buf) crc = CRC32(crc, *buf++, crc_32_tab) #define DO2(crc, buf) DO1(crc, buf); DO1(crc, buf) #define DO4(crc, buf) DO2(crc, buf); DO2(crc, buf) #define DO8(crc, buf) DO4(crc, buf); DO4(crc, buf) #if (defined(IZ_CRC_BE_OPTIMIZ) || defined(IZ_CRC_LE_OPTIMIZ)) # ifdef IZ_CRCOPTIM_UNFOLDTBL # ifdef IZ_CRC_BE_OPTIMIZ # define DO_OPT4(c, buf4) c ^= *(buf4)++; \ c = crc_32_tab[c & 0xff] ^ crc_32_tab[256+((c>>8) & 0xff)] ^ \ crc_32_tab[2*256+((c>>16) & 0xff)] ^ crc_32_tab[3*256+(c>>24)] # else /* !IZ_CRC_BE_OPTIMIZ */ # define DO_OPT4(c, buf4) c ^= *(buf4)++; \ c = crc_32_tab[3*256+(c & 0xff)] ^ crc_32_tab[2*256+((c>>8) & 0xff)] \ ^ crc_32_tab[256+((c>>16) & 0xff)] ^ crc_32_tab[c>>24] # endif /* ?IZ_CRC_BE_OPTIMIZ */ # else /* !IZ_CRCOPTIM_UNFOLDTBL */ # define DO_OPT4(c, buf4) c ^= *(buf4)++; \ c = CRC32UPD(c, crc_32_tab); \ c = CRC32UPD(c, crc_32_tab); \ c = CRC32UPD(c, crc_32_tab); \ c = CRC32UPD(c, crc_32_tab) # endif /* ?IZ_CRCOPTIM_UNFOLDTBL */ # define DO_OPT16(crc, buf4) DO_OPT4(crc, buf4); DO_OPT4(crc, buf4); \ DO_OPT4(crc, buf4); DO_OPT4(crc, buf4); #endif /* (IZ_CRC_BE_OPTIMIZ || IZ_CRC_LE_OPTIMIZ) */ /* ========================================================================= */ ulg crc32(crc, buf, len) ulg crc; /* crc shift register */ register ZCONST uch *buf; /* pointer to bytes to pump through */ extent len; /* number of bytes in buf[] */ /* Run a set of bytes through the crc shift register. If buf is a NULL pointer, then initialize the crc shift register contents instead. Return the current crc in either case. */ { register z_uint4 c; register ZCONST ulg near *crc_32_tab; if (buf == NULL) return 0L; crc_32_tab = get_crc_table(); c = (REV_BE((z_uint4)crc) ^ 0xffffffffL); #if (defined(IZ_CRC_BE_OPTIMIZ) || defined(IZ_CRC_LE_OPTIMIZ)) /* Align buf pointer to next DWORD boundary. */ while (len && ((ptrdiff_t)buf & 3)) { DO1(c, buf); len--; } { ZCONST z_uint4 *buf4 = (ZCONST z_uint4 *)buf; while (len >= 16) { DO_OPT16(c, buf4); len -= 16; } while (len >= 4) { DO_OPT4(c, buf4); len -= 4; } buf = (ZCONST uch *)buf4; } #else /* !(IZ_CRC_BE_OPTIMIZ || IZ_CRC_LE_OPTIMIZ) */ #ifndef NO_UNROLLED_LOOPS while (len >= 8) { DO8(c, buf); len -= 8; } #endif /* !NO_UNROLLED_LOOPS */ #endif /* ?(IZ_CRC_BE_OPTIMIZ || IZ_CRC_LE_OPTIMIZ) */ if (len) do { DO1(c, buf); } while (--len); return REV_BE(c) ^ 0xffffffffL; /* (instead of ~c for 64-bit machines) */ } #endif /* !ASM_CRC */ #endif /* !CRC_TABLE_ONLY */ #endif /* !USE_ZLIB */ #endif /* !USE_ZLIB || USE_OWN_CRCTAB */ Carla-2.4.2/data/windows/unzipfx-carla/crc32.h000066400000000000000000000033611420416754300210250ustar00rootroot00000000000000/* Copyright (c) 1990-2008 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2000-Apr-09 or later (the contents of which are also included in zip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /* crc32.h -- compute the CRC-32 of a data stream * Copyright (C) 1995 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ #ifndef __crc32_h #define __crc32_h /* identifies this source module */ /* This header should be read AFTER zip.h resp. unzip.h * (the latter with UNZIP_INTERNAL defined...). */ #ifndef OF # define OF(a) a #endif #ifndef ZCONST # define ZCONST const #endif #ifdef DYNALLOC_CRCTAB void free_crc_table OF((void)); #endif #ifndef USE_ZLIB ZCONST ulg near *get_crc_table OF((void)); #endif #if (defined(USE_ZLIB) || defined(CRC_TABLE_ONLY)) # ifdef IZ_CRC_BE_OPTIMIZ # undef IZ_CRC_BE_OPTIMIZ # endif #else /* !(USE_ZLIB || CRC_TABLE_ONLY) */ ulg crc32 OF((ulg crc, ZCONST uch *buf, extent len)); #endif /* ?(USE_ZLIB || CRC_TABLE_ONLY) */ #ifndef CRC_32_TAB # define CRC_32_TAB crc_32_tab #endif #ifdef CRC32 # undef CRC32 #endif #ifdef IZ_CRC_BE_OPTIMIZ # define CRC32UPD(c, crctab) (crctab[((c) >> 24)] ^ ((c) << 8)) # define CRC32(c, b, crctab) (crctab[(((int)(c) >> 24) ^ (b))] ^ ((c) << 8)) # define REV_BE(w) (((w)>>24)+(((w)>>8)&0xff00)+ \ (((w)&0xff00)<<8)+(((w)&0xff)<<24)) #else # define CRC32UPD(c, crctab) (crctab[((int)(c)) & 0xff] ^ ((c) >> 8)) # define CRC32(c, b, crctab) (crctab[((int)(c) ^ (b)) & 0xff] ^ ((c) >> 8)) # define REV_BE(w) w #endif #endif /* !__crc32_h */ Carla-2.4.2/data/windows/unzipfx-carla/crypt.c000066400000000000000000000533761420416754300212600ustar00rootroot00000000000000/* Copyright (c) 1990-2007 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2005-Feb-10 or later (the contents of which are also included in (un)zip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /* crypt.c (full version) by Info-ZIP. Last revised: [see crypt.h] The main encryption/decryption source code for Info-Zip software was originally written in Europe. To the best of our knowledge, it can be freely distributed in both source and object forms from any country, including the USA under License Exception TSU of the U.S. Export Administration Regulations (section 740.13(e)) of 6 June 2002. NOTE on copyright history: Previous versions of this source package (up to version 2.8) were not copyrighted and put in the public domain. If you cannot comply with the Info-Zip LICENSE, you may want to look for one of those public domain versions. */ /* This encryption code is a direct transcription of the algorithm from Roger Schlafly, described by Phil Katz in the file appnote.txt. This file (appnote.txt) is distributed with the PKZIP program (even in the version without encryption capabilities). */ #define ZCRYPT_INTERNAL #include "zip.h" #include "crypt.h" #include "ttyio.h" #if CRYPT #ifndef FALSE # define FALSE 0 #endif #ifdef ZIP /* For the encoding task used in Zip (and ZipCloak), we want to initialize the crypt algorithm with some reasonably unpredictable bytes, see the crypthead() function. The standard rand() library function is used to supply these `random' bytes, which in turn is initialized by a srand() call. The srand() function takes an "unsigned" (at least 16bit) seed value as argument to determine the starting point of the rand() pseudo-random number generator. This seed number is constructed as "Seed = Seed1 .XOR. Seed2" with Seed1 supplied by the current time (= "(unsigned)time()") and Seed2 as some (hopefully) nondeterministic bitmask. On many (most) systems, we use some "process specific" number, as the PID or something similar, but when nothing unpredictable is available, a fixed number may be sufficient. NOTE: 1.) This implementation requires the availability of the following standard UNIX C runtime library functions: time(), rand(), srand(). On systems where some of them are missing, the environment that incorporates the crypt routines must supply suitable replacement functions. 2.) It is a very bad idea to use a second call to time() to set the "Seed2" number! In this case, both "Seed1" and "Seed2" would be (almost) identical, resulting in a (mostly) "zero" constant seed number passed to srand(). The implementation environment defined in the "zip.h" header should supply a reasonable definition for ZCR_SEED2 (an unsigned number; for most implementations of rand() and srand(), only the lower 16 bits are significant!). An example that works on many systems would be "#define ZCR_SEED2 (unsigned)getpid()". The default definition for ZCR_SEED2 supplied below should be regarded as a fallback to allow successful compilation in "beta state" environments. */ # include /* time() function supplies first part of crypt seed */ /* "last resort" source for second part of crypt seed pattern */ # ifndef ZCR_SEED2 # define ZCR_SEED2 (unsigned)3141592654L /* use PI as default pattern */ # endif # ifdef GLOBAL /* used in Amiga system headers, maybe others too */ # undef GLOBAL # endif # define GLOBAL(g) g #else /* !ZIP */ # define GLOBAL(g) G.g #endif /* ?ZIP */ #ifdef UNZIP /* char *key = (char *)NULL; moved to globals.h */ # ifndef FUNZIP local int testp OF((__GPRO__ ZCONST uch *h)); local int testkey OF((__GPRO__ ZCONST uch *h, ZCONST char *key)); # endif #endif /* UNZIP */ #ifndef UNZIP /* moved to globals.h for UnZip */ # ifndef Z_UINT4_DEFINED # if !defined(NO_LIMITS_H) # if (defined(UINT_MAX) && (UINT_MAX == 0xffffffffUL)) typedef unsigned int z_uint4; # define Z_UINT4_DEFINED # else # if (defined(ULONG_MAX) && (ULONG_MAX == 0xffffffffUL)) typedef unsigned long z_uint4; # define Z_UINT4_DEFINED # else # if (defined(USHRT_MAX) && (USHRT_MAX == 0xffffffffUL)) typedef unsigned short z_uint4; # define Z_UINT4_DEFINED # endif # endif # endif # endif /* !NO_LIMITS_H */ # endif /* !Z_UINT4_DEFINED */ # ifndef Z_UINT4_DEFINED typedef ulg z_uint4; # define Z_UINT4_DEFINED # endif local z_uint4 keys[3]; /* keys defining the pseudo-random sequence */ #endif /* !UNZIP */ #ifndef Trace # ifdef CRYPT_DEBUG # define Trace(x) fprintf x # else # define Trace(x) # endif #endif #include "crc32.h" #ifdef IZ_CRC_BE_OPTIMIZ local z_uint4 near crycrctab[256]; local z_uint4 near *cry_crctb_p = NULL; local z_uint4 near *crytab_init OF((__GPRO)); # define CRY_CRC_TAB cry_crctb_p # undef CRC32 # define CRC32(c, b, crctab) (crctab[((int)(c) ^ (b)) & 0xff] ^ ((c) >> 8)) #else # define CRY_CRC_TAB CRC_32_TAB #endif /* ?IZ_CRC_BE_OPTIMIZ */ /*********************************************************************** * Return the next byte in the pseudo-random sequence */ int decrypt_byte(__G) __GDEF { unsigned temp; /* POTENTIAL BUG: temp*(temp^1) may overflow in an * unpredictable manner on 16-bit systems; not a problem * with any known compiler so far, though */ temp = ((unsigned)GLOBAL(keys[2]) & 0xffff) | 2; return (int)(((temp * (temp ^ 1)) >> 8) & 0xff); } /*********************************************************************** * Update the encryption keys with the next byte of plain text */ int update_keys(__G__ c) __GDEF int c; /* byte of plain text */ { GLOBAL(keys[0]) = CRC32(GLOBAL(keys[0]), c, CRY_CRC_TAB); GLOBAL(keys[1]) = (GLOBAL(keys[1]) + (GLOBAL(keys[0]) & 0xff)) * 134775813L + 1; { register int keyshift = (int)(GLOBAL(keys[1]) >> 24); GLOBAL(keys[2]) = CRC32(GLOBAL(keys[2]), keyshift, CRY_CRC_TAB); } return c; } /*********************************************************************** * Initialize the encryption keys and the random header according to * the given password. */ void init_keys(__G__ passwd) __GDEF ZCONST char *passwd; /* password string with which to modify keys */ { #ifdef IZ_CRC_BE_OPTIMIZ if (cry_crctb_p == NULL) { cry_crctb_p = crytab_init(__G); } #endif GLOBAL(keys[0]) = 305419896L; GLOBAL(keys[1]) = 591751049L; GLOBAL(keys[2]) = 878082192L; while (*passwd != '\0') { update_keys(__G__ (int)*passwd); passwd++; } } /*********************************************************************** * Initialize the local copy of the table of precomputed crc32 values. * Whereas the public crc32-table is optimized for crc32 calculations * on arrays of bytes, the crypt code needs the crc32 values in an * byte-order-independent form as 32-bit unsigned numbers. On systems * with Big-Endian byte order using the optimized crc32 code, this * requires inverting the byte-order of the values in the * crypt-crc32-table. */ #ifdef IZ_CRC_BE_OPTIMIZ local z_uint4 near *crytab_init(__G) __GDEF { int i; for (i = 0; i < 256; i++) { crycrctab[i] = REV_BE(CRC_32_TAB[i]); } return crycrctab; } #endif #ifdef ZIP /*********************************************************************** * Write encryption header to file zfile using the password passwd * and the cyclic redundancy check crc. */ void crypthead(passwd, crc, zfile) ZCONST char *passwd; /* password string */ ulg crc; /* crc of file being encrypted */ FILE *zfile; /* where to write header */ { int n; /* index in random header */ int t; /* temporary */ int c; /* random byte */ uch header[RAND_HEAD_LEN]; /* random header */ static unsigned calls = 0; /* ensure different random header each time */ /* First generate RAND_HEAD_LEN-2 random bytes. We encrypt the * output of rand() to get less predictability, since rand() is * often poorly implemented. */ if (++calls == 1) { srand((unsigned)time(NULL) ^ ZCR_SEED2); } init_keys(passwd); for (n = 0; n < RAND_HEAD_LEN-2; n++) { c = (rand() >> 7) & 0xff; header[n] = (uch)zencode(c, t); } /* Encrypt random header (last two bytes is high word of crc) */ init_keys(passwd); for (n = 0; n < RAND_HEAD_LEN-2; n++) { header[n] = (uch)zencode(header[n], t); } header[RAND_HEAD_LEN-2] = (uch)zencode((int)(crc >> 16) & 0xff, t); header[RAND_HEAD_LEN-1] = (uch)zencode((int)(crc >> 24) & 0xff, t); fwrite(header, 1, RAND_HEAD_LEN, f); } #ifdef UTIL /*********************************************************************** * Encrypt the zip entry described by z from file source to file dest * using the password passwd. Return an error code in the ZE_ class. */ int zipcloak(z, source, dest, passwd) struct zlist far *z; /* zip entry to encrypt */ FILE *source, *dest; /* source and destination files */ ZCONST char *passwd; /* password string */ { int c; /* input byte */ int res; /* result code */ ulg n; /* holds offset and counts size */ ush flag; /* previous flags */ int t; /* temporary */ int ztemp; /* temporary storage for zencode value */ /* Set encrypted bit, clear extended local header bit and write local header to output file */ if ((n = (ulg)ftell(dest)) == (ulg)-1L) return ZE_TEMP; z->off = n; flag = z->flg; z->flg |= 1, z->flg &= ~8; z->lflg |= 1, z->lflg &= ~8; z->siz += RAND_HEAD_LEN; if ((res = putlocal(z, dest)) != ZE_OK) return res; /* Initialize keys with password and write random header */ crypthead(passwd, z->crc, dest); /* Skip local header in input file */ if (fseek(source, (long)((4 + LOCHEAD) + (ulg)z->nam + (ulg)z->ext), SEEK_CUR)) { return ferror(source) ? ZE_READ : ZE_EOF; } /* Encrypt data */ for (n = z->siz - RAND_HEAD_LEN; n; n--) { if ((c = getc(source)) == EOF) { return ferror(source) ? ZE_READ : ZE_EOF; } ztemp = zencode(c, t); putc(ztemp, dest); } /* Skip extended local header in input file if there is one */ if ((flag & 8) != 0 && fseek(source, 16L, SEEK_CUR)) { return ferror(source) ? ZE_READ : ZE_EOF; } if (fflush(dest) == EOF) return ZE_TEMP; /* Update number of bytes written to output file */ tempzn += (4 + LOCHEAD) + z->nam + z->ext + z->siz; return ZE_OK; } /*********************************************************************** * Decrypt the zip entry described by z from file source to file dest * using the password passwd. Return an error code in the ZE_ class. */ int zipbare(z, source, dest, passwd) struct zlist far *z; /* zip entry to encrypt */ FILE *source, *dest; /* source and destination files */ ZCONST char *passwd; /* password string */ { #ifdef ZIP10 int c0 /* byte preceding the last input byte */ #endif int c1; /* last input byte */ ulg offset; /* used for file offsets */ ulg size; /* size of input data */ int r; /* size of encryption header */ int res; /* return code */ ush flag; /* previous flags */ /* Save position and skip local header in input file */ if ((offset = (ulg)ftell(source)) == (ulg)-1L || fseek(source, (long)((4 + LOCHEAD) + (ulg)z->nam + (ulg)z->ext), SEEK_CUR)) { return ferror(source) ? ZE_READ : ZE_EOF; } /* Initialize keys with password */ init_keys(passwd); /* Decrypt encryption header, save last two bytes */ c1 = 0; for (r = RAND_HEAD_LEN; r; r--) { #ifdef ZIP10 c0 = c1; #endif if ((c1 = getc(source)) == EOF) { return ferror(source) ? ZE_READ : ZE_EOF; } Trace((stdout, " (%02x)", c1)); zdecode(c1); Trace((stdout, " %02x", c1)); } Trace((stdout, "\n")); /* If last two bytes of header don't match crc (or file time in the * case of an extended local header), back up and just copy. For * pkzip 2.0, the check has been reduced to one byte only. */ #ifdef ZIP10 if ((ush)(c0 | (c1<<8)) != (z->flg & 8 ? (ush) z->tim & 0xffff : (ush)(z->crc >> 16))) { #else if ((ush)c1 != (z->flg & 8 ? (ush) z->tim >> 8 : (ush)(z->crc >> 24))) { #endif if (fseek(source, offset, SEEK_SET)) { return ferror(source) ? ZE_READ : ZE_EOF; } if ((res = zipcopy(z, source, dest)) != ZE_OK) return res; return ZE_MISS; } /* Clear encrypted bit and local header bit, and write local header to output file */ if ((offset = (ulg)ftell(dest)) == (ulg)-1L) return ZE_TEMP; z->off = offset; flag = z->flg; z->flg &= ~9; z->lflg &= ~9; z->siz -= RAND_HEAD_LEN; if ((res = putlocal(z, dest)) != ZE_OK) return res; /* Decrypt data */ for (size = z->siz; size; size--) { if ((c1 = getc(source)) == EOF) { return ferror(source) ? ZE_READ : ZE_EOF; } zdecode(c1); putc(c1, dest); } /* Skip extended local header in input file if there is one */ if ((flag & 8) != 0 && fseek(source, 16L, SEEK_CUR)) { return ferror(source) ? ZE_READ : ZE_EOF; } if (fflush(dest) == EOF) return ZE_TEMP; /* Update number of bytes written to output file */ tempzn += (4 + LOCHEAD) + z->nam + z->ext + z->siz; return ZE_OK; } #else /* !UTIL */ /*********************************************************************** * If requested, encrypt the data in buf, and in any case call fwrite() * with the arguments to zfwrite(). Return what fwrite() returns. * * A bug has been found when encrypting large files. See trees.c * for details and the fix. */ unsigned zfwrite(buf, item_size, nb, f) zvoid *buf; /* data buffer */ extent item_size; /* size of each item in bytes */ extent nb; /* number of items */ FILE *f; /* file to write to */ { int t; /* temporary */ if (key != (char *)NULL) { /* key is the global password pointer */ ulg size; /* buffer size */ char *p = (char*)buf; /* steps through buffer */ /* Encrypt data in buffer */ for (size = item_size*(ulg)nb; size != 0; p++, size--) { *p = (char)zencode(*p, t); } } /* Write the buffer out */ return fwrite(buf, item_size, nb, f); } #endif /* ?UTIL */ #endif /* ZIP */ #if (defined(UNZIP) && !defined(FUNZIP)) /*********************************************************************** * Get the password and set up keys for current zipfile member. * Return PK_ class error. */ int decrypt(__G__ passwrd) __GDEF ZCONST char *passwrd; { ush b; int n, r; uch h[RAND_HEAD_LEN]; Trace((stdout, "\n[incnt = %d]: ", GLOBAL(incnt))); /* get header once (turn off "encrypted" flag temporarily so we don't * try to decrypt the same data twice) */ GLOBAL(pInfo->encrypted) = FALSE; defer_leftover_input(__G); for (n = 0; n < RAND_HEAD_LEN; n++) { b = NEXTBYTE; h[n] = (uch)b; Trace((stdout, " (%02x)", h[n])); } undefer_input(__G); GLOBAL(pInfo->encrypted) = TRUE; if (GLOBAL(newzip)) { /* this is first encrypted member in this zipfile */ GLOBAL(newzip) = FALSE; if (passwrd != (char *)NULL) { /* user gave password on command line */ if (!GLOBAL(key)) { if ((GLOBAL(key) = (char *)malloc(strlen(passwrd)+1)) == (char *)NULL) return PK_MEM2; strcpy(GLOBAL(key), passwrd); GLOBAL(nopwd) = TRUE; /* inhibit password prompting! */ } } else if (GLOBAL(key)) { /* get rid of previous zipfile's key */ free(GLOBAL(key)); GLOBAL(key) = (char *)NULL; } } /* if have key already, test it; else allocate memory for it */ if (GLOBAL(key)) { if (!testp(__G__ h)) return PK_COOL; /* existing password OK (else prompt for new) */ else if (GLOBAL(nopwd)) return PK_WARN; /* user indicated no more prompting */ } else if ((GLOBAL(key) = (char *)malloc(IZ_PWLEN+1)) == (char *)NULL) return PK_MEM2; /* try a few keys */ n = 0; do { r = (*G.decr_passwd)((zvoid *)&G, &n, GLOBAL(key), IZ_PWLEN+1, GLOBAL(zipfn), GLOBAL(filename)); if (r == IZ_PW_ERROR) { /* internal error in fetch of PW */ free (GLOBAL(key)); GLOBAL(key) = NULL; return PK_MEM2; } if (r != IZ_PW_ENTERED) { /* user replied "skip" or "skip all" */ *GLOBAL(key) = '\0'; /* We try the NIL password, ... */ n = 0; /* and cancel fetch for this item. */ } if (!testp(__G__ h)) return PK_COOL; if (r == IZ_PW_CANCELALL) /* User replied "Skip all" */ GLOBAL(nopwd) = TRUE; /* inhibit any further PW prompt! */ } while (n > 0); return PK_WARN; } /* end function decrypt() */ /*********************************************************************** * Test the password. Return -1 if bad, 0 if OK. */ local int testp(__G__ h) __GDEF ZCONST uch *h; { int r; char *key_translated; /* On systems with "obscure" native character coding (e.g., EBCDIC), * the first test translates the password to the "main standard" * character coding. */ #ifdef STR_TO_CP1 /* allocate buffer for translated password */ if ((key_translated = malloc(strlen(GLOBAL(key)) + 1)) == (char *)NULL) return -1; /* first try, test password translated "standard" charset */ r = testkey(__G__ h, STR_TO_CP1(key_translated, GLOBAL(key))); #else /* !STR_TO_CP1 */ /* first try, test password as supplied on the extractor's host */ r = testkey(__G__ h, GLOBAL(key)); #endif /* ?STR_TO_CP1 */ #ifdef STR_TO_CP2 if (r != 0) { #ifndef STR_TO_CP1 /* now prepare for second (and maybe third) test with translated pwd */ if ((key_translated = malloc(strlen(GLOBAL(key)) + 1)) == (char *)NULL) return -1; #endif /* second try, password translated to alternate ("standard") charset */ r = testkey(__G__ h, STR_TO_CP2(key_translated, GLOBAL(key))); #ifdef STR_TO_CP3 if (r != 0) /* third try, password translated to another "standard" charset */ r = testkey(__G__ h, STR_TO_CP3(key_translated, GLOBAL(key))); #endif #ifndef STR_TO_CP1 free(key_translated); #endif } #endif /* STR_TO_CP2 */ #ifdef STR_TO_CP1 free(key_translated); if (r != 0) { /* last resort, test password as supplied on the extractor's host */ r = testkey(__G__ h, GLOBAL(key)); } #endif /* STR_TO_CP1 */ return r; } /* end function testp() */ local int testkey(__G__ h, key) __GDEF ZCONST uch *h; /* decrypted header */ ZCONST char *key; /* decryption password to test */ { ush b; #ifdef ZIP10 ush c; #endif int n; uch *p; uch hh[RAND_HEAD_LEN]; /* decrypted header */ /* set keys and save the encrypted header */ init_keys(__G__ key); memcpy(hh, h, RAND_HEAD_LEN); /* check password */ for (n = 0; n < RAND_HEAD_LEN; n++) { zdecode(hh[n]); Trace((stdout, " %02x", hh[n])); } Trace((stdout, "\n lrec.crc= %08lx crec.crc= %08lx pInfo->ExtLocHdr= %s\n", GLOBAL(lrec.crc32), GLOBAL(pInfo->crc), GLOBAL(pInfo->ExtLocHdr) ? "true":"false")); Trace((stdout, " incnt = %d unzip offset into zipfile = %ld\n", GLOBAL(incnt), GLOBAL(cur_zipfile_bufstart)+(GLOBAL(inptr)-GLOBAL(inbuf)))); /* same test as in zipbare(): */ #ifdef ZIP10 /* check two bytes */ c = hh[RAND_HEAD_LEN-2], b = hh[RAND_HEAD_LEN-1]; Trace((stdout, " (c | (b<<8)) = %04x (crc >> 16) = %04x lrec.time = %04x\n", (ush)(c | (b<<8)), (ush)(GLOBAL(lrec.crc32) >> 16), ((ush)GLOBAL(lrec.last_mod_dos_datetime) & 0xffff)))); if ((ush)(c | (b<<8)) != (GLOBAL(pInfo->ExtLocHdr) ? ((ush)GLOBAL(lrec.last_mod_dos_datetime) & 0xffff) : (ush)(GLOBAL(lrec.crc32) >> 16))) return -1; /* bad */ #else b = hh[RAND_HEAD_LEN-1]; Trace((stdout, " b = %02x (crc >> 24) = %02x (lrec.time >> 8) = %02x\n", b, (ush)(GLOBAL(lrec.crc32) >> 24), ((ush)GLOBAL(lrec.last_mod_dos_datetime) >> 8) & 0xff)); if (b != (GLOBAL(pInfo->ExtLocHdr) ? ((ush)GLOBAL(lrec.last_mod_dos_datetime) >> 8) & 0xff : (ush)(GLOBAL(lrec.crc32) >> 24))) return -1; /* bad */ #endif /* password OK: decrypt current buffer contents before leaving */ for (n = (long)GLOBAL(incnt) > GLOBAL(csize) ? (int)GLOBAL(csize) : GLOBAL(incnt), p = GLOBAL(inptr); n--; p++) zdecode(*p); return 0; /* OK */ } /* end function testkey() */ #endif /* UNZIP && !FUNZIP */ #else /* !CRYPT */ /* something "externally visible" to shut up compiler/linker warnings */ int zcr_dummy; #endif /* ?CRYPT */ Carla-2.4.2/data/windows/unzipfx-carla/crypt.h000066400000000000000000000112251420416754300212500ustar00rootroot00000000000000/* Copyright (c) 1990-2007 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2005-Feb-10 or later (the contents of which are also included in (un)zip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /* crypt.h (full version) by Info-ZIP. Last revised: [see CR_VERSION_DATE] The main encryption/decryption source code for Info-Zip software was originally written in Europe. To the best of our knowledge, it can be freely distributed in both source and object forms from any country, including the USA under License Exception TSU of the U.S. Export Administration Regulations (section 740.13(e)) of 6 June 2002. NOTE on copyright history: Previous versions of this source package (up to version 2.8) were not copyrighted and put in the public domain. If you cannot comply with the Info-Zip LICENSE, you may want to look for one of those public domain versions. */ #ifndef __crypt_h /* don't include more than once */ #define __crypt_h #ifdef CRYPT # undef CRYPT #endif /* Logic of selecting "full crypt" code: a) default behaviour: - dummy crypt code when compiling UnZipSFX stub, to minimize size - full crypt code when used to compile Zip, UnZip and fUnZip b) USE_CRYPT defined: - always full crypt code c) NO_CRYPT defined: - never full crypt code NO_CRYPT takes precedence over USE_CRYPT */ #if defined(NO_CRYPT) # define CRYPT 0 /* dummy version */ #else #if defined(USE_CRYPT) # define CRYPT 1 /* full version */ #else #if !defined(SFX) # define CRYPT 1 /* full version for zip and main unzip */ #else # define CRYPT 0 /* dummy version for unzip sfx */ #endif #endif /* ?USE_CRYPT */ #endif /* ?NO_CRYPT */ #if CRYPT /* full version */ #ifdef CR_BETA # undef CR_BETA /* this is not a beta release */ #endif #define CR_MAJORVER 2 #define CR_MINORVER 11 #ifdef CR_BETA # define CR_BETA_VER "c BETA" # define CR_VERSION_DATE "05 Jan 2007" /* last real code change */ #else # define CR_BETA_VER "" # define CR_VERSION_DATE "05 Jan 2007" /* last public release date */ # define CR_RELEASE #endif #ifndef __G /* UnZip only, for now (DLL stuff) */ # define __G # define __G__ # define __GDEF # define __GPRO void # define __GPRO__ #endif #if defined(MSDOS) || defined(OS2) || defined(WIN32) # ifndef DOS_OS2_W32 # define DOS_OS2_W32 # endif #endif #if defined(DOS_OS2_W32) || defined(__human68k__) # ifndef DOS_H68_OS2_W32 # define DOS_H68_OS2_W32 # endif #endif #if defined(VM_CMS) || defined(MVS) # ifndef CMS_MVS # define CMS_MVS # endif #endif /* To allow combining of Zip and UnZip static libraries in a single binary, * the Zip and UnZip versions of the crypt core functions have to be named * differently. */ #ifdef ZIP # ifdef REALLY_SHORT_SYMS # define decrypt_byte zdcrby # else # define decrypt_byte zp_decrypt_byte # endif # define update_keys zp_update_keys # define init_keys zp_init_keys #else /* !ZIP */ # ifdef REALLY_SHORT_SYMS # define decrypt_byte dcrbyt # endif #endif /* ?ZIP */ #define IZ_PWLEN 80 /* input buffer size for reading encryption key */ #ifndef PWLEN /* for compatibility with previous zcrypt release... */ # define PWLEN IZ_PWLEN #endif #define RAND_HEAD_LEN 12 /* length of encryption random header */ /* the crc_32_tab array has to be provided externally for the crypt calculus */ /* encode byte c, using temp t. Warning: c must not have side effects. */ #define zencode(c,t) (t=decrypt_byte(__G), update_keys(c), t^(c)) /* decode byte c in place */ #define zdecode(c) update_keys(__G__ c ^= decrypt_byte(__G)) int decrypt_byte OF((__GPRO)); int update_keys OF((__GPRO__ int c)); void init_keys OF((__GPRO__ ZCONST char *passwd)); #ifdef ZIP void crypthead OF((ZCONST char *, ulg, FILE *)); # ifdef UTIL int zipcloak OF((struct zlist far *, FILE *, FILE *, ZCONST char *)); int zipbare OF((struct zlist far *, FILE *, FILE *, ZCONST char *)); # else unsigned zfwrite OF((zvoid *, extent, extent, FILE *)); extern char *key; # endif #endif /* ZIP */ #if (defined(UNZIP) && !defined(FUNZIP)) int decrypt OF((__GPRO__ ZCONST char *passwrd)); #endif #ifdef FUNZIP extern int encrypted; # ifdef NEXTBYTE # undef NEXTBYTE # endif # define NEXTBYTE \ (encrypted? update_keys(__G__ getc(G.in)^decrypt_byte(__G)) : getc(G.in)) #endif /* FUNZIP */ #else /* !CRYPT */ /* dummy version */ #define zencode #define zdecode #define zfwrite fwrite #endif /* ?CRYPT */ #endif /* !__crypt_h */ Carla-2.4.2/data/windows/unzipfx-carla/ebcdic.h000066400000000000000000000365531420416754300213330ustar00rootroot00000000000000/* Copyright (c) 1990-2008 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2000-Apr-09 or later (the contents of which are also included in zip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- ebcdic.h The CECP 1047 (Extended de-facto EBCDIC) <-> ISO 8859-1 conversion tables, from ftp://aix1.segi.ulg.ac.be/pub/docs/iso8859/iso8859.networking NOTES: (OS/390 port 12/97) These table no longer represent the standard mappings (for example in the OS/390 iconv utility). In order to follow current standards I remapped ebcdic x0a to ascii x15 and ebcdic x85 to ascii x25 (and vice-versa) Without these changes, newlines in auto-convert text files appeared as literal \045. I'm not sure what effect this remap would have on the MVS and CMS ports, so I ifdef'd these changes. Hopefully these ifdef's can be removed when the MVS/CMS folks test the new mappings. Christian Spieler , 27-Apr-1998 The problem mentioned by Paul von Behren was already observed previously on VM/CMS, during the preparation of the CMS&MVS port of UnZip 5.20 in 1996. At that point, the ebcdic tables were not changed since they seemed to be an adopted standard (to my knowledge, these tables are still used as presented in mainfraime KERMIT). Instead, the "end-of-line" conversion feature of Zip's and UnZip's "text-translation" mode was used to force correct mappings between ASCII and EBCDIC newline markers. Before interchanging the ASCII mappings of the EBCDIC control characters "NL" 0x25 and "LF" 0x15 according to the OS/390 setting, we have to make sure that EBCDIC 0x15 is never used as line termination. ---------------------------------------------------------------------------*/ #ifndef __ebcdic_h /* prevent multiple inclusions */ #define __ebcdic_h #ifndef ZCONST # define ZCONST const #endif #ifdef EBCDIC #ifndef MTS /* MTS uses a slightly "special" EBCDIC code page */ ZCONST uch ebcdic[] = { 0x00, 0x01, 0x02, 0x03, 0x37, 0x2D, 0x2E, 0x2F, /* 00 - 07 */ #ifdef OS390 0x16, 0x05, 0x15, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, /* 08 - 0F */ #else 0x16, 0x05, 0x25, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, /* 08 - 0F */ #endif 0x10, 0x11, 0x12, 0x13, 0x3C, 0x3D, 0x32, 0x26, /* 10 - 17 */ 0x18, 0x19, 0x3F, 0x27, 0x1C, 0x1D, 0x1E, 0x1F, /* 18 - 1F */ 0x40, 0x5A, 0x7F, 0x7B, 0x5B, 0x6C, 0x50, 0x7D, /* 20 - 27 */ 0x4D, 0x5D, 0x5C, 0x4E, 0x6B, 0x60, 0x4B, 0x61, /* 28 - 2F */ 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 30 - 37 */ 0xF8, 0xF9, 0x7A, 0x5E, 0x4C, 0x7E, 0x6E, 0x6F, /* 38 - 3F */ 0x7C, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 40 - 47 */ 0xC8, 0xC9, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, /* 48 - 4F */ 0xD7, 0xD8, 0xD9, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, /* 50 - 57 */ 0xE7, 0xE8, 0xE9, 0xAD, 0xE0, 0xBD, 0x5F, 0x6D, /* 58 - 5F */ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 60 - 67 */ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 68 - 6F */ 0x97, 0x98, 0x99, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, /* 70 - 77 */ 0xA7, 0xA8, 0xA9, 0xC0, 0x4F, 0xD0, 0xA1, 0x07, /* 78 - 7F */ #ifdef OS390 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x06, 0x17, /* 80 - 87 */ #else 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 80 - 87 */ #endif 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x09, 0x0A, 0x1B, /* 88 - 8F */ 0x30, 0x31, 0x1A, 0x33, 0x34, 0x35, 0x36, 0x08, /* 90 - 97 */ 0x38, 0x39, 0x3A, 0x3B, 0x04, 0x14, 0x3E, 0xFF, /* 98 - 9F */ 0x41, 0xAA, 0x4A, 0xB1, 0x9F, 0xB2, 0x6A, 0xB5, /* A0 - A7 */ 0xBB, 0xB4, 0x9A, 0x8A, 0xB0, 0xCA, 0xAF, 0xBC, /* A8 - AF */ 0x90, 0x8F, 0xEA, 0xFA, 0xBE, 0xA0, 0xB6, 0xB3, /* B0 - B7 */ 0x9D, 0xDA, 0x9B, 0x8B, 0xB7, 0xB8, 0xB9, 0xAB, /* B8 - BF */ 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9E, 0x68, /* C0 - C7 */ 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* C8 - CF */ 0xAC, 0x69, 0xED, 0xEE, 0xEB, 0xEF, 0xEC, 0xBF, /* D0 - D7 */ 0x80, 0xFD, 0xFE, 0xFB, 0xFC, 0xBA, 0xAE, 0x59, /* D8 - DF */ 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9C, 0x48, /* E0 - E7 */ 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* E8 - EF */ 0x8C, 0x49, 0xCD, 0xCE, 0xCB, 0xCF, 0xCC, 0xE1, /* F0 - F7 */ 0x70, 0xDD, 0xDE, 0xDB, 0xDC, 0x8D, 0x8E, 0xDF /* F8 - FF */ }; #if (defined(ZIP) || CRYPT) ZCONST uch ascii[] = { 0x00, 0x01, 0x02, 0x03, 0x9C, 0x09, 0x86, 0x7F, /* 00 - 07 */ 0x97, 0x8D, 0x8E, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, /* 08 - 0F */ #ifdef OS390 0x10, 0x11, 0x12, 0x13, 0x9D, 0x0A, 0x08, 0x87, /* 10 - 17 */ #else 0x10, 0x11, 0x12, 0x13, 0x9D, 0x85, 0x08, 0x87, /* 10 - 17 */ #endif 0x18, 0x19, 0x92, 0x8F, 0x1C, 0x1D, 0x1E, 0x1F, /* 18 - 1F */ #ifdef OS390 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x17, 0x1B, /* 20 - 27 */ #else 0x80, 0x81, 0x82, 0x83, 0x84, 0x0A, 0x17, 0x1B, /* 20 - 27 */ #endif 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x05, 0x06, 0x07, /* 28 - 2F */ 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04, /* 30 - 37 */ 0x98, 0x99, 0x9A, 0x9B, 0x14, 0x15, 0x9E, 0x1A, /* 38 - 3F */ 0x20, 0xA0, 0xE2, 0xE4, 0xE0, 0xE1, 0xE3, 0xE5, /* 40 - 47 */ 0xE7, 0xF1, 0xA2, 0x2E, 0x3C, 0x28, 0x2B, 0x7C, /* 48 - 4F */ 0x26, 0xE9, 0xEA, 0xEB, 0xE8, 0xED, 0xEE, 0xEF, /* 50 - 57 */ 0xEC, 0xDF, 0x21, 0x24, 0x2A, 0x29, 0x3B, 0x5E, /* 58 - 5F */ 0x2D, 0x2F, 0xC2, 0xC4, 0xC0, 0xC1, 0xC3, 0xC5, /* 60 - 67 */ 0xC7, 0xD1, 0xA6, 0x2C, 0x25, 0x5F, 0x3E, 0x3F, /* 68 - 6F */ 0xF8, 0xC9, 0xCA, 0xCB, 0xC8, 0xCD, 0xCE, 0xCF, /* 70 - 77 */ 0xCC, 0x60, 0x3A, 0x23, 0x40, 0x27, 0x3D, 0x22, /* 78 - 7F */ 0xD8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 80 - 87 */ 0x68, 0x69, 0xAB, 0xBB, 0xF0, 0xFD, 0xFE, 0xB1, /* 88 - 8F */ 0xB0, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, /* 90 - 97 */ 0x71, 0x72, 0xAA, 0xBA, 0xE6, 0xB8, 0xC6, 0xA4, /* 98 - 9F */ 0xB5, 0x7E, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, /* A0 - A7 */ 0x79, 0x7A, 0xA1, 0xBF, 0xD0, 0x5B, 0xDE, 0xAE, /* A8 - AF */ 0xAC, 0xA3, 0xA5, 0xB7, 0xA9, 0xA7, 0xB6, 0xBC, /* B0 - B7 */ 0xBD, 0xBE, 0xDD, 0xA8, 0xAF, 0x5D, 0xB4, 0xD7, /* B8 - BF */ 0x7B, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* C0 - C7 */ 0x48, 0x49, 0xAD, 0xF4, 0xF6, 0xF2, 0xF3, 0xF5, /* C8 - CF */ 0x7D, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, /* D0 - D7 */ 0x51, 0x52, 0xB9, 0xFB, 0xFC, 0xF9, 0xFA, 0xFF, /* D8 - DF */ 0x5C, 0xF7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, /* E0 - E7 */ 0x59, 0x5A, 0xB2, 0xD4, 0xD6, 0xD2, 0xD3, 0xD5, /* E8 - EF */ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* F0 - F7 */ 0x38, 0x39, 0xB3, 0xDB, 0xDC, 0xD9, 0xDA, 0x9F /* F8 - FF */ }; #endif /* ZIP || CRYPT */ #else /* MTS */ /* * This is the MTS ASCII->EBCDIC translation table. It provides a 1-1 * translation from ISO 8859/1 8-bit ASCII to IBM Code Page 37 EBCDIC. */ ZCONST uch ebcdic[] = { 0x00, 0x01, 0x02, 0x03, 0x37, 0x2D, 0x2E, 0x2F, /* 00 - 07 */ 0x16, 0x05, 0x25, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, /* 08 - 0F */ 0x10, 0x11, 0x12, 0x13, 0x3C, 0x3D, 0x32, 0x26, /* 10 - 17 */ 0x18, 0x19, 0x3F, 0x27, 0x1C, 0x1D, 0x1E, 0x1F, /* 18 - 1F */ 0x40, 0x5A, 0x7F, 0x7B, 0x5B, 0x6C, 0x50, 0x7D, /* 20 - 27 */ 0x4D, 0x5D, 0x5C, 0x4E, 0x6B, 0x60, 0x4B, 0x61, /* 28 - 2F */ 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, /* 30 - 37 */ 0xF8, 0xF9, 0x7A, 0x5E, 0x4C, 0x7E, 0x6E, 0x6F, /* 38 - 3F */ 0x7C, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, /* 40 - 47 */ 0xC8, 0xC9, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, /* 48 - 4F */ 0xD7, 0xD8, 0xD9, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, /* 50 - 57 */ 0xE7, 0xE8, 0xE9, 0xBA, 0xE0, 0xBB, 0xB0, 0x6D, /* 58 - 5F */ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 60 - 67 */ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 68 - 6F */ 0x97, 0x98, 0x99, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, /* 70 - 77 */ 0xA7, 0xA8, 0xA9, 0xC0, 0x4F, 0xD0, 0xA1, 0x07, /* 78 - 7F */ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 80 - 87 */ 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x09, 0x0A, 0x1B, /* 88 - 8F */ 0x30, 0x31, 0x1A, 0x33, 0x34, 0x35, 0x36, 0x08, /* 90 - 97 */ 0x38, 0x39, 0x3A, 0x3B, 0x04, 0x14, 0x3E, 0xFF, /* 98 - 9F */ 0x41, 0xAA, 0x4A, 0xB1, 0x9F, 0xB2, 0x6A, 0xB5, /* A0 - A7 */ 0xBD, 0xB4, 0x9A, 0x8A, 0x5F, 0xCA, 0xAF, 0xBC, /* A8 - AF */ 0x90, 0x8F, 0xEA, 0xFA, 0xBE, 0xA0, 0xB6, 0xB3, /* B0 - B7 */ 0x9D, 0xDA, 0x9B, 0x8B, 0xB7, 0xB8, 0xB9, 0xAB, /* B8 - BF */ 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9E, 0x68, /* C0 - C7 */ 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* C8 - CF */ 0xAC, 0x69, 0xED, 0xEE, 0xEB, 0xEF, 0xEC, 0xBF, /* D0 - D7 */ 0x80, 0xFD, 0xFE, 0xFB, 0xFC, 0xAD, 0xAE, 0x59, /* D8 - DF */ 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9C, 0x48, /* E0 - E7 */ 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* E8 - EF */ 0x8C, 0x49, 0xCD, 0xCE, 0xCB, 0xCF, 0xCC, 0xE1, /* F0 - F7 */ 0x70, 0xDD, 0xDE, 0xDB, 0xDC, 0x8D, 0x8E, 0xDF /* F8 - FF */ }; #if (defined(ZIP) || CRYPT) ZCONST uch ascii[] = { 0x00, 0x01, 0x02, 0x03, 0x9C, 0x09, 0x86, 0x7F, /* 00 - 07 */ 0x97, 0x8D, 0x8E, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, /* 08 - 0F */ 0x10, 0x11, 0x12, 0x13, 0x9D, 0x85, 0x08, 0x87, /* 10 - 17 */ 0x18, 0x19, 0x92, 0x8F, 0x1C, 0x1D, 0x1E, 0x1F, /* 18 - 1F */ 0x80, 0x81, 0x82, 0x83, 0x84, 0x0A, 0x17, 0x1B, /* 20 - 27 */ 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x05, 0x06, 0x07, /* 28 - 2F */ 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04, /* 30 - 37 */ 0x98, 0x99, 0x9A, 0x9B, 0x14, 0x15, 0x9E, 0x1A, /* 38 - 3F */ 0x20, 0xA0, 0xE2, 0xE4, 0xE0, 0xE1, 0xE3, 0xE5, /* 40 - 47 */ 0xE7, 0xF1, 0xA2, 0x2E, 0x3C, 0x28, 0x2B, 0x7C, /* 48 - 4F */ 0x26, 0xE9, 0xEA, 0xEB, 0xE8, 0xED, 0xEE, 0xEF, /* 50 - 57 */ 0xEC, 0xDF, 0x21, 0x24, 0x2A, 0x29, 0x3B, 0xAC, /* 58 - 5F */ 0x2D, 0x2F, 0xC2, 0xC4, 0xC0, 0xC1, 0xC3, 0xC5, /* 60 - 67 */ 0xC7, 0xD1, 0xA6, 0x2C, 0x25, 0x5F, 0x3E, 0x3F, /* 68 - 6F */ 0xF8, 0xC9, 0xCA, 0xCB, 0xC8, 0xCD, 0xCE, 0xCF, /* 70 - 77 */ 0xCC, 0x60, 0x3A, 0x23, 0x40, 0x27, 0x3D, 0x22, /* 78 - 7F */ 0xD8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 80 - 87 */ 0x68, 0x69, 0xAB, 0xBB, 0xF0, 0xFD, 0xFE, 0xB1, /* 88 - 8F */ 0xB0, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, /* 90 - 97 */ 0x71, 0x72, 0xAA, 0xBA, 0xE6, 0xB8, 0xC6, 0xA4, /* 98 - 9F */ 0xB5, 0x7E, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, /* A0 - A7 */ 0x79, 0x7A, 0xA1, 0xBF, 0xD0, 0xDD, 0xDE, 0xAE, /* A8 - AF */ 0x5E, 0xA3, 0xA5, 0xB7, 0xA9, 0xA7, 0xB6, 0xBC, /* B0 - B7 */ 0xBD, 0xBE, 0x5B, 0x5D, 0xAF, 0xA8, 0xB4, 0xD7, /* B8 - BF */ 0x7B, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* C0 - C7 */ 0x48, 0x49, 0xAD, 0xF4, 0xF6, 0xF2, 0xF3, 0xF5, /* C8 - CF */ 0x7D, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, /* D0 - D7 */ 0x51, 0x52, 0xB9, 0xFB, 0xFC, 0xF9, 0xFA, 0xFF, /* D8 - DF */ 0x5C, 0xF7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, /* E0 - E7 */ 0x59, 0x5A, 0xB2, 0xD4, 0xD6, 0xD2, 0xD3, 0xD5, /* E8 - EF */ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* F0 - F7 */ 0x38, 0x39, 0xB3, 0xDB, 0xDC, 0xD9, 0xDA, 0x9F /* F8 - FF */ }; #endif /* ZIP || CRYPT */ #endif /* ?MTS */ #endif /* EBCDIC */ /*--------------------------------------------------------------------------- The following conversion tables translate between IBM PC CP 850 (OEM codepage) and the "Western Europe & America" Windows codepage 1252. The Windows codepage 1252 contains the ISO 8859-1 "Latin 1" codepage, with some additional printable characters in the range (0x80 - 0x9F), that is reserved to control codes in the ISO 8859-1 character table. The ISO <--> OEM conversion tables were constructed with the help of the WIN32 (Win16?) API's OemToAnsi() and AnsiToOem() conversion functions and have been checked against the CP850 and LATIN1 tables provided in the MS-Kermit 3.14 distribution. ---------------------------------------------------------------------------*/ #ifdef IZ_ISO2OEM_ARRAY ZCONST uch Far iso2oem_850[] = { 0x3F, 0x3F, 0x27, 0x9F, 0x22, 0x2E, 0xC5, 0xCE, /* 80 - 87 */ 0x5E, 0x25, 0x53, 0x3C, 0x4F, 0x3F, 0x3F, 0x3F, /* 88 - 8F */ 0x3F, 0x27, 0x27, 0x22, 0x22, 0x07, 0x2D, 0x2D, /* 90 - 97 */ 0x7E, 0x54, 0x73, 0x3E, 0x6F, 0x3F, 0x3F, 0x59, /* 98 - 9F */ 0xFF, 0xAD, 0xBD, 0x9C, 0xCF, 0xBE, 0xDD, 0xF5, /* A0 - A7 */ 0xF9, 0xB8, 0xA6, 0xAE, 0xAA, 0xF0, 0xA9, 0xEE, /* A8 - AF */ 0xF8, 0xF1, 0xFD, 0xFC, 0xEF, 0xE6, 0xF4, 0xFA, /* B0 - B7 */ 0xF7, 0xFB, 0xA7, 0xAF, 0xAC, 0xAB, 0xF3, 0xA8, /* B8 - BF */ 0xB7, 0xB5, 0xB6, 0xC7, 0x8E, 0x8F, 0x92, 0x80, /* C0 - C7 */ 0xD4, 0x90, 0xD2, 0xD3, 0xDE, 0xD6, 0xD7, 0xD8, /* C8 - CF */ 0xD1, 0xA5, 0xE3, 0xE0, 0xE2, 0xE5, 0x99, 0x9E, /* D0 - D7 */ 0x9D, 0xEB, 0xE9, 0xEA, 0x9A, 0xED, 0xE8, 0xE1, /* D8 - DF */ 0x85, 0xA0, 0x83, 0xC6, 0x84, 0x86, 0x91, 0x87, /* E0 - E7 */ 0x8A, 0x82, 0x88, 0x89, 0x8D, 0xA1, 0x8C, 0x8B, /* E8 - EF */ 0xD0, 0xA4, 0x95, 0xA2, 0x93, 0xE4, 0x94, 0xF6, /* F0 - F7 */ 0x9B, 0x97, 0xA3, 0x96, 0x81, 0xEC, 0xE7, 0x98 /* F8 - FF */ }; #endif /* IZ_ISO2OEM_ARRAY */ #ifdef IZ_OEM2ISO_ARRAY ZCONST uch Far oem2iso_850[] = { 0xC7, 0xFC, 0xE9, 0xE2, 0xE4, 0xE0, 0xE5, 0xE7, /* 80 - 87 */ 0xEA, 0xEB, 0xE8, 0xEF, 0xEE, 0xEC, 0xC4, 0xC5, /* 88 - 8F */ 0xC9, 0xE6, 0xC6, 0xF4, 0xF6, 0xF2, 0xFB, 0xF9, /* 90 - 97 */ 0xFF, 0xD6, 0xDC, 0xF8, 0xA3, 0xD8, 0xD7, 0x83, /* 98 - 9F */ 0xE1, 0xED, 0xF3, 0xFA, 0xF1, 0xD1, 0xAA, 0xBA, /* A0 - A7 */ 0xBF, 0xAE, 0xAC, 0xBD, 0xBC, 0xA1, 0xAB, 0xBB, /* A8 - AF */ 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xC1, 0xC2, 0xC0, /* B0 - B7 */ 0xA9, 0xA6, 0xA6, 0x2B, 0x2B, 0xA2, 0xA5, 0x2B, /* B8 - BF */ 0x2B, 0x2D, 0x2D, 0x2B, 0x2D, 0x2B, 0xE3, 0xC3, /* C0 - C7 */ 0x2B, 0x2B, 0x2D, 0x2D, 0xA6, 0x2D, 0x2B, 0xA4, /* C8 - CF */ 0xF0, 0xD0, 0xCA, 0xCB, 0xC8, 0x69, 0xCD, 0xCE, /* D0 - D7 */ 0xCF, 0x2B, 0x2B, 0xA6, 0x5F, 0xA6, 0xCC, 0xAF, /* D8 - DF */ 0xD3, 0xDF, 0xD4, 0xD2, 0xF5, 0xD5, 0xB5, 0xFE, /* E0 - E7 */ 0xDE, 0xDA, 0xDB, 0xD9, 0xFD, 0xDD, 0xAF, 0xB4, /* E8 - EF */ 0xAD, 0xB1, 0x3D, 0xBE, 0xB6, 0xA7, 0xF7, 0xB8, /* F0 - F7 */ 0xB0, 0xA8, 0xB7, 0xB9, 0xB3, 0xB2, 0xA6, 0xA0 /* F8 - FF */ }; #endif /* IZ_OEM2ISO_ARRAY */ /* The following pointers to the OEM<-->ISO translation tables are used by the translation code portions. They may get initialized at program startup to point to the matching static translation tables, or to NULL to disable OEM-ISO translation. The compile-time initialization used here provides the backward compatible setting, as can be found in UnZip 5.52 and earlier. In case this mechanism will ever get used on a multithreading system that allows different codepage setups for concurrently running threads, these pointers should get moved into UnZip's thread-safe global data structure. */ #ifdef IZ_ISO2OEM_ARRAY ZCONST uch Far *iso2oem = iso2oem_850; /* backward compatibility default */ #endif /* IZ_ISO2OEM_ARRAY */ #ifdef IZ_OEM2ISO_ARRAY ZCONST uch Far *oem2iso = oem2iso_850; /* backward compatibility default */ #endif /* IZ_OEM2ISO_ARRAY */ #if defined(THEOS) || defined(THEOS_SUPPORT) # include "theos/charconv.h" #endif #endif /* __ebcdic_h */ Carla-2.4.2/data/windows/unzipfx-carla/extract.c000066400000000000000000003137161420416754300215660ustar00rootroot00000000000000/* Copyright (c) 1990-2009 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2009-Jan-02 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- extract.c This file contains the high-level routines ("driver routines") for extrac- ting and testing zipfile members. It calls the low-level routines in files explode.c, inflate.c, unreduce.c and unshrink.c. Contains: extract_or_test_files() store_info() find_compr_idx() extract_or_test_entrylist() extract_or_test_member() TestExtraField() test_compr_eb() memextract() memflush() extract_izvms_block() (VMS or VMS_TEXT_CONV) set_deferred_symlink() (SYMLINKS only) fnfilter() dircomp() (SET_DIR_ATTRIB only) UZbunzip2() (USE_BZIP2 only) ---------------------------------------------------------------------------*/ #define __EXTRACT_C /* identifies this source module */ #define UNZIP_INTERNAL #include "unzip.h" #ifdef WINDLL # ifdef POCKET_UNZIP # include "wince/intrface.h" # else # include "windll/windll.h" # endif #endif #include "crc32.h" #include "crypt.h" #define GRRDUMP(buf,len) { \ int i, j; \ \ for (j = 0; j < (len)/16; ++j) { \ printf(" "); \ for (i = 0; i < 16; ++i) \ printf("%02x ", (uch)(buf)[i+(j<<4)]); \ printf("\n "); \ for (i = 0; i < 16; ++i) { \ char c = (char)(buf)[i+(j<<4)]; \ \ if (c == '\n') \ printf("\\n "); \ else if (c == '\r') \ printf("\\r "); \ else \ printf(" %c ", c); \ } \ printf("\n"); \ } \ if ((len) % 16) { \ printf(" "); \ for (i = j<<4; i < (len); ++i) \ printf("%02x ", (uch)(buf)[i]); \ printf("\n "); \ for (i = j<<4; i < (len); ++i) { \ char c = (char)(buf)[i]; \ \ if (c == '\n') \ printf("\\n "); \ else if (c == '\r') \ printf("\\r "); \ else \ printf(" %c ", c); \ } \ printf("\n"); \ } \ } static int store_info OF((__GPRO)); #ifdef SET_DIR_ATTRIB static int extract_or_test_entrylist OF((__GPRO__ unsigned numchunk, ulg *pfilnum, ulg *pnum_bad_pwd, zoff_t *pold_extra_bytes, unsigned *pnum_dirs, direntry **pdirlist, int error_in_archive)); #else static int extract_or_test_entrylist OF((__GPRO__ unsigned numchunk, ulg *pfilnum, ulg *pnum_bad_pwd, zoff_t *pold_extra_bytes, int error_in_archive)); #endif static int extract_or_test_member OF((__GPRO)); #ifndef SFX static int TestExtraField OF((__GPRO__ uch *ef, unsigned ef_len)); static int test_compr_eb OF((__GPRO__ uch *eb, unsigned eb_size, unsigned compr_offset, int (*test_uc_ebdata)(__GPRO__ uch *eb, unsigned eb_size, uch *eb_ucptr, ulg eb_ucsize))); #endif #if (defined(VMS) || defined(VMS_TEXT_CONV)) static void decompress_bits OF((uch *outptr, unsigned needlen, ZCONST uch *bitptr)); #endif #ifdef SYMLINKS static void set_deferred_symlink OF((__GPRO__ slinkentry *slnk_entry)); #endif #ifdef SET_DIR_ATTRIB static int Cdecl dircomp OF((ZCONST zvoid *a, ZCONST zvoid *b)); #endif /*******************************/ /* Strings used in extract.c */ /*******************************/ static ZCONST char Far VersionMsg[] = " skipping: %-22s need %s compat. v%u.%u (can do v%u.%u)\n"; static ZCONST char Far ComprMsgNum[] = " skipping: %-22s unsupported compression method %u\n"; #ifndef SFX static ZCONST char Far ComprMsgName[] = " skipping: %-22s `%s' method not supported\n"; static ZCONST char Far CmprNone[] = "store"; static ZCONST char Far CmprShrink[] = "shrink"; static ZCONST char Far CmprReduce[] = "reduce"; static ZCONST char Far CmprImplode[] = "implode"; static ZCONST char Far CmprTokenize[] = "tokenize"; static ZCONST char Far CmprDeflate[] = "deflate"; static ZCONST char Far CmprDeflat64[] = "deflate64"; static ZCONST char Far CmprDCLImplode[] = "DCL implode"; static ZCONST char Far CmprBzip[] = "bzip2"; static ZCONST char Far CmprLZMA[] = "LZMA"; static ZCONST char Far CmprIBMTerse[] = "IBM/Terse"; static ZCONST char Far CmprIBMLZ77[] = "IBM LZ77"; static ZCONST char Far CmprWavPack[] = "WavPack"; static ZCONST char Far CmprPPMd[] = "PPMd"; static ZCONST char Far *ComprNames[NUM_METHODS] = { CmprNone, CmprShrink, CmprReduce, CmprReduce, CmprReduce, CmprReduce, CmprImplode, CmprTokenize, CmprDeflate, CmprDeflat64, CmprDCLImplode, CmprBzip, CmprLZMA, CmprIBMTerse, CmprIBMLZ77, CmprWavPack, CmprPPMd }; static ZCONST unsigned ComprIDs[NUM_METHODS] = { STORED, SHRUNK, REDUCED1, REDUCED2, REDUCED3, REDUCED4, IMPLODED, TOKENIZED, DEFLATED, ENHDEFLATED, DCLIMPLODED, BZIPPED, LZMAED, IBMTERSED, IBMLZ77ED, WAVPACKED, PPMDED }; #endif /* !SFX */ static ZCONST char Far FilNamMsg[] = "%s: bad filename length (%s)\n"; #ifndef SFX static ZCONST char Far WarnNoMemCFName[] = "%s: warning, no memory for comparison with local header\n"; static ZCONST char Far LvsCFNamMsg[] = "%s: mismatching \"local\" filename (%s),\n\ continuing with \"central\" filename version\n"; #endif /* !SFX */ #if (!defined(SFX) && defined(UNICODE_SUPPORT)) static ZCONST char Far GP11FlagsDiffer[] = "file #%lu (%s):\n\ mismatch between local and central GPF bit 11 (\"UTF-8\"),\n\ continuing with central flag (IsUTF8 = %d)\n"; #endif /* !SFX && UNICODE_SUPPORT */ static ZCONST char Far WrnStorUCSizCSizDiff[] = "%s: ucsize %s <> csize %s for STORED entry\n\ continuing with \"compressed\" size value\n"; static ZCONST char Far ExtFieldMsg[] = "%s: bad extra field length (%s)\n"; static ZCONST char Far OffsetMsg[] = "file #%lu: bad zipfile offset (%s): %ld\n"; static ZCONST char Far ExtractMsg[] = "%8sing: %-22s %s%s"; #ifndef SFX static ZCONST char Far LengthMsg[] = "%s %s: %s bytes required to uncompress to %s bytes;\n %s\ supposed to require %s bytes%s%s%s\n"; #endif static ZCONST char Far BadFileCommLength[] = "%s: bad file comment length\n"; static ZCONST char Far LocalHdrSig[] = "local header sig"; static ZCONST char Far BadLocalHdr[] = "file #%lu: bad local header\n"; static ZCONST char Far AttemptRecompensate[] = " (attempting to re-compensate)\n"; #ifndef SFX static ZCONST char Far BackslashPathSep[] = "warning: %s appears to use backslashes as path separators\n"; #endif static ZCONST char Far AbsolutePathWarning[] = "warning: stripped absolute path spec from %s\n"; static ZCONST char Far SkipVolumeLabel[] = " skipping: %-22s %svolume label\n"; #ifdef SET_DIR_ATTRIB /* messages of code for setting directory attributes */ static ZCONST char Far DirlistEntryNoMem[] = "warning: cannot alloc memory for dir times/permissions/UID/GID\n"; static ZCONST char Far DirlistSortNoMem[] = "warning: cannot alloc memory to sort dir times/perms/etc.\n"; static ZCONST char Far DirlistSetAttrFailed[] = "warning: set times/attribs failed for %s\n"; static ZCONST char Far DirlistFailAttrSum[] = " failed setting times/attribs for %lu dir entries"; #endif #ifdef SYMLINKS /* messages of the deferred symlinks handler */ static ZCONST char Far SymLnkWarnNoMem[] = "warning: deferred symlink (%s) failed:\n\ out of memory\n"; static ZCONST char Far SymLnkWarnInvalid[] = "warning: deferred symlink (%s) failed:\n\ invalid placeholder file\n"; static ZCONST char Far SymLnkDeferred[] = "finishing deferred symbolic links:\n"; static ZCONST char Far SymLnkFinish[] = " %-22s -> %s\n"; #endif #ifndef WINDLL static ZCONST char Far ReplaceQuery[] = # ifdef VMS "new version of %s? [y]es, [n]o, [A]ll, [N]one, [r]ename: "; # else "replace %s? [y]es, [n]o, [A]ll, [N]one, [r]ename: "; # endif static ZCONST char Far AssumeNone[] = " NULL\n(EOF or read error, treating as \"[N]one\" ...)\n"; static ZCONST char Far NewNameQuery[] = "new name: "; static ZCONST char Far InvalidResponse[] = "error: invalid response [%s]\n"; #endif /* !WINDLL */ static ZCONST char Far ErrorInArchive[] = "At least one %serror was detected in %s.\n"; static ZCONST char Far ZeroFilesTested[] = "Caution: zero files tested in %s.\n"; #ifndef VMS static ZCONST char Far VMSFormatQuery[] = "\n%s: stored in VMS format. Extract anyway? (y/n) "; #endif #if CRYPT static ZCONST char Far SkipCannotGetPasswd[] = " skipping: %-22s unable to get password\n"; static ZCONST char Far SkipIncorrectPasswd[] = " skipping: %-22s incorrect password\n"; static ZCONST char Far FilesSkipBadPasswd[] = "%lu file%s skipped because of incorrect password.\n"; static ZCONST char Far MaybeBadPasswd[] = " (may instead be incorrect password)\n"; #else static ZCONST char Far SkipEncrypted[] = " skipping: %-22s encrypted (not supported)\n"; #endif static ZCONST char Far NoErrInCompData[] = "No errors detected in compressed data of %s.\n"; static ZCONST char Far NoErrInTestedFiles[] = "No errors detected in %s for the %lu file%s tested.\n"; static ZCONST char Far FilesSkipped[] = "%lu file%s skipped because of unsupported compression or encoding.\n"; static ZCONST char Far ErrUnzipFile[] = " error: %s%s %s\n"; static ZCONST char Far ErrUnzipNoFile[] = "\n error: %s%s\n"; static ZCONST char Far NotEnoughMem[] = "not enough memory to "; static ZCONST char Far InvalidComprData[] = "invalid compressed data to "; static ZCONST char Far Inflate[] = "inflate"; #ifdef USE_BZIP2 static ZCONST char Far BUnzip[] = "bunzip"; #endif #ifndef SFX static ZCONST char Far Explode[] = "explode"; #ifndef LZW_CLEAN static ZCONST char Far Unshrink[] = "unshrink"; #endif #endif #if (!defined(DELETE_IF_FULL) || !defined(HAVE_UNLINK)) static ZCONST char Far FileTruncated[] = "warning: %s is probably truncated\n"; #endif static ZCONST char Far FileUnknownCompMethod[] = "%s: unknown compression method\n"; static ZCONST char Far BadCRC[] = " bad CRC %08lx (should be %08lx)\n"; /* TruncEAs[] also used in OS/2 mapname(), close_outfile() */ char ZCONST Far TruncEAs[] = " compressed EA data missing (%d bytes)%s"; char ZCONST Far TruncNTSD[] = " compressed WinNT security data missing (%d bytes)%s"; #ifndef SFX static ZCONST char Far InconsistEFlength[] = "bad extra-field entry:\n \ EF block length (%u bytes) exceeds remaining EF data (%u bytes)\n"; static ZCONST char Far InvalidComprDataEAs[] = " invalid compressed data for EAs\n"; # if (defined(WIN32) && defined(NTSD_EAS)) static ZCONST char Far InvalidSecurityEAs[] = " EAs fail security check\n"; # endif static ZCONST char Far UnsuppNTSDVersEAs[] = " unsupported NTSD EAs version %d\n"; static ZCONST char Far BadCRC_EAs[] = " bad CRC for extended attributes\n"; static ZCONST char Far UnknComprMethodEAs[] = " unknown compression method for EAs (%u)\n"; static ZCONST char Far NotEnoughMemEAs[] = " out of memory while inflating EAs\n"; static ZCONST char Far UnknErrorEAs[] = " unknown error on extended attributes\n"; #endif /* !SFX */ static ZCONST char Far UnsupportedExtraField[] = "\nerror: unsupported extra-field compression type (%u)--skipping\n"; static ZCONST char Far BadExtraFieldCRC[] = "error [%s]: bad extra-field CRC %08lx (should be %08lx)\n"; /**************************************/ /* Function extract_or_test_files() */ /**************************************/ int extract_or_test_files(__G) /* return PK-type error code */ __GDEF { unsigned i, j; zoff_t cd_bufstart; uch *cd_inptr; int cd_incnt; ulg filnum=0L, blknum=0L; int reached_end; #ifndef SFX int no_endsig_found; #endif int error, error_in_archive=PK_COOL; int *fn_matched=NULL, *xn_matched=NULL; zucn_t members_processed; ulg num_skipped=0L, num_bad_pwd=0L; zoff_t old_extra_bytes = 0L; #ifdef SET_DIR_ATTRIB unsigned num_dirs=0; direntry *dirlist=(direntry *)NULL, **sorted_dirlist=(direntry **)NULL; #endif /* * First, two general initializations are applied. These have been moved * here from process_zipfiles() because they are only needed for accessing * and/or extracting the data content of the zip archive. */ /* a) initialize the CRC table pointer (once) */ if (CRC_32_TAB == NULL) { if ((CRC_32_TAB = get_crc_table()) == NULL) { return PK_MEM; } } #if (!defined(SFX) || defined(SFX_EXDIR)) /* b) check out if specified extraction root directory exists */ if (uO.exdir != (char *)NULL && G.extract_flag) { G.create_dirs = !uO.fflag; if ((error = checkdir(__G__ uO.exdir, ROOT)) > MPN_INF_SKIP) { /* out of memory, or file in way */ return (error == MPN_NOMEM ? PK_MEM : PK_ERR); } } #endif /* !SFX || SFX_EXDIR */ /*--------------------------------------------------------------------------- The basic idea of this function is as follows. Since the central di- rectory lies at the end of the zipfile and the member files lie at the beginning or middle or wherever, it is not very desirable to simply read a central directory entry, jump to the member and extract it, and then jump back to the central directory. In the case of a large zipfile this would lead to a whole lot of disk-grinding, especially if each mem- ber file is small. Instead, we read from the central directory the per- tinent information for a block of files, then go extract/test the whole block. Thus this routine contains two small(er) loops within a very large outer loop: the first of the small ones reads a block of files from the central directory; the second extracts or tests each file; and the outer one loops over blocks. There's some file-pointer positioning stuff in between, but that's about it. Btw, it's because of this jump- ing around that we can afford to be lenient if an error occurs in one of the member files: we should still be able to go find the other members, since we know the offset of each from the beginning of the zipfile. ---------------------------------------------------------------------------*/ G.pInfo = G.info; #if CRYPT G.newzip = TRUE; #endif #ifndef SFX G.reported_backslash = FALSE; #endif /* malloc space for check on unmatched filespecs (OK if one or both NULL) */ if (G.filespecs > 0 && (fn_matched=(int *)malloc(G.filespecs*sizeof(int))) != (int *)NULL) for (i = 0; i < G.filespecs; ++i) fn_matched[i] = FALSE; if (G.xfilespecs > 0 && (xn_matched=(int *)malloc(G.xfilespecs*sizeof(int))) != (int *)NULL) for (i = 0; i < G.xfilespecs; ++i) xn_matched[i] = FALSE; /*--------------------------------------------------------------------------- Begin main loop over blocks of member files. We know the entire central directory is on this disk: we would not have any of this information un- less the end-of-central-directory record was on this disk, and we would not have gotten to this routine unless this is also the disk on which the central directory starts. In practice, this had better be the ONLY disk in the archive, but we'll add multi-disk support soon. ---------------------------------------------------------------------------*/ members_processed = 0; #ifndef SFX no_endsig_found = FALSE; #endif reached_end = FALSE; while (!reached_end) { j = 0; #ifdef AMIGA memzero(G.filenotes, DIR_BLKSIZ * sizeof(char *)); #endif /* * Loop through files in central directory, storing offsets, file * attributes, case-conversion and text-conversion flags until block * size is reached. */ while ((j < DIR_BLKSIZ)) { G.pInfo = &G.info[j]; if (readbuf(__G__ G.sig, 4) == 0) { error_in_archive = PK_EOF; reached_end = TRUE; /* ...so no more left to do */ break; } if (memcmp(G.sig, central_hdr_sig, 4)) { /* is it a new entry? */ /* no new central directory entry * -> is the number of processed entries compatible with the * number of entries as stored in the end_central record? */ if ((members_processed & (G.ecrec.have_ecr64 ? MASK_ZUCN64 : MASK_ZUCN16)) == G.ecrec.total_entries_central_dir) { #ifndef SFX /* yes, so look if we ARE back at the end_central record */ no_endsig_found = ( (memcmp(G.sig, (G.ecrec.have_ecr64 ? end_central64_sig : end_central_sig), 4) != 0) && (!G.ecrec.is_zip64_archive) && (memcmp(G.sig, end_central_sig, 4) != 0) ); #endif /* !SFX */ } else { /* no; we have found an error in the central directory * -> report it and stop searching for more Zip entries */ Info(slide, 0x401, ((char *)slide, LoadFarString(CentSigMsg), j + blknum*DIR_BLKSIZ + 1)); Info(slide, 0x401, ((char *)slide, LoadFarString(ReportMsg))); error_in_archive = PK_BADERR; } reached_end = TRUE; /* ...so no more left to do */ break; } /* process_cdir_file_hdr() sets pInfo->hostnum, pInfo->lcflag */ if ((error = process_cdir_file_hdr(__G)) != PK_COOL) { error_in_archive = error; /* only PK_EOF defined */ reached_end = TRUE; /* ...so no more left to do */ break; } if ((error = do_string(__G__ G.crec.filename_length, DS_FN)) != PK_COOL) { if (error > error_in_archive) error_in_archive = error; if (error > PK_WARN) { /* fatal: no more left to do */ Info(slide, 0x401, ((char *)slide, LoadFarString(FilNamMsg), FnFilter1(G.filename), "central")); reached_end = TRUE; break; } } if ((error = do_string(__G__ G.crec.extra_field_length, EXTRA_FIELD)) != 0) { if (error > error_in_archive) error_in_archive = error; if (error > PK_WARN) { /* fatal */ Info(slide, 0x401, ((char *)slide, LoadFarString(ExtFieldMsg), FnFilter1(G.filename), "central")); reached_end = TRUE; break; } } #ifdef AMIGA G.filenote_slot = j; if ((error = do_string(__G__ G.crec.file_comment_length, uO.N_flag ? FILENOTE : SKIP)) != PK_COOL) #else if ((error = do_string(__G__ G.crec.file_comment_length, SKIP)) != PK_COOL) #endif { if (error > error_in_archive) error_in_archive = error; if (error > PK_WARN) { /* fatal */ Info(slide, 0x421, ((char *)slide, LoadFarString(BadFileCommLength), FnFilter1(G.filename))); reached_end = TRUE; break; } } if (G.process_all_files) { if (store_info(__G)) ++j; /* file is OK; info[] stored; continue with next */ else ++num_skipped; } else { int do_this_file; if (G.filespecs == 0) do_this_file = TRUE; else { /* check if this entry matches an `include' argument */ do_this_file = FALSE; for (i = 0; i < G.filespecs; i++) if (match(G.filename, G.pfnames[i], uO.C_flag WISEP)) { do_this_file = TRUE; /* ^-- ignore case or not? */ if (fn_matched) fn_matched[i] = TRUE; break; /* found match, so stop looping */ } } if (do_this_file) { /* check if this is an excluded file */ for (i = 0; i < G.xfilespecs; i++) if (match(G.filename, G.pxnames[i], uO.C_flag WISEP)) { do_this_file = FALSE; /* ^-- ignore case or not? */ if (xn_matched) xn_matched[i] = TRUE; break; } } if (do_this_file) { if (store_info(__G)) ++j; /* file is OK */ else ++num_skipped; /* unsupp. compression or encryption */ } } /* end if (process_all_files) */ members_processed++; } /* end while-loop (adding files to current block) */ /* save position in central directory so can come back later */ cd_bufstart = G.cur_zipfile_bufstart; cd_inptr = G.inptr; cd_incnt = G.incnt; /*----------------------------------------------------------------------- Second loop: process files in current block, extracting or testing each one. -----------------------------------------------------------------------*/ error = extract_or_test_entrylist(__G__ j, &filnum, &num_bad_pwd, &old_extra_bytes, #ifdef SET_DIR_ATTRIB &num_dirs, &dirlist, #endif error_in_archive); if (error != PK_COOL) { if (error > error_in_archive) error_in_archive = error; /* ...and keep going (unless disk full or user break) */ if (G.disk_full > 1 || error_in_archive == IZ_CTRLC) { /* clear reached_end to signal premature stop ... */ reached_end = FALSE; /* ... and cancel scanning the central directory */ break; } } /* * Jump back to where we were in the central directory, then go and do * the next batch of files. */ #ifdef USE_STRM_INPUT zfseeko(G.zipfd, cd_bufstart, SEEK_SET); G.cur_zipfile_bufstart = zftello(G.zipfd); #else /* !USE_STRM_INPUT */ G.cur_zipfile_bufstart = zlseek(G.zipfd, cd_bufstart, SEEK_SET); #endif /* ?USE_STRM_INPUT */ read(G.zipfd, (char *)G.inbuf, INBUFSIZ); /* been here before... */ G.inptr = cd_inptr; G.incnt = cd_incnt; ++blknum; #ifdef TEST printf("\ncd_bufstart = %ld (%.8lXh)\n", cd_bufstart, cd_bufstart); printf("cur_zipfile_bufstart = %ld (%.8lXh)\n", cur_zipfile_bufstart, cur_zipfile_bufstart); printf("inptr-inbuf = %d\n", G.inptr-G.inbuf); printf("incnt = %d\n\n", G.incnt); #endif } /* end while-loop (blocks of files in central directory) */ /*--------------------------------------------------------------------------- Process the list of deferred symlink extractions and finish up the symbolic links. ---------------------------------------------------------------------------*/ #ifdef SYMLINKS if (G.slink_last != NULL) { if (QCOND2) Info(slide, 0, ((char *)slide, LoadFarString(SymLnkDeferred))); while (G.slink_head != NULL) { set_deferred_symlink(__G__ G.slink_head); /* remove the processed entry from the chain and free its memory */ G.slink_last = G.slink_head; G.slink_head = G.slink_last->next; free(G.slink_last); } G.slink_last = NULL; } #endif /* SYMLINKS */ /*--------------------------------------------------------------------------- Go back through saved list of directories, sort and set times/perms/UIDs and GIDs from the deepest level on up. ---------------------------------------------------------------------------*/ #ifdef SET_DIR_ATTRIB if (num_dirs > 0) { sorted_dirlist = (direntry **)malloc(num_dirs*sizeof(direntry *)); if (sorted_dirlist == (direntry **)NULL) { Info(slide, 0x401, ((char *)slide, LoadFarString(DirlistSortNoMem))); while (dirlist != (direntry *)NULL) { direntry *d = dirlist; dirlist = dirlist->next; free(d); } } else { ulg ndirs_fail = 0; if (num_dirs == 1) sorted_dirlist[0] = dirlist; else { for (i = 0; i < num_dirs; ++i) { sorted_dirlist[i] = dirlist; dirlist = dirlist->next; } qsort((char *)sorted_dirlist, num_dirs, sizeof(direntry *), dircomp); } Trace((stderr, "setting directory times/perms/attributes\n")); for (i = 0; i < num_dirs; ++i) { direntry *d = sorted_dirlist[i]; Trace((stderr, "dir = %s\n", d->fn)); if ((error = set_direc_attribs(__G__ d)) != PK_OK) { ndirs_fail++; Info(slide, 0x201, ((char *)slide, LoadFarString(DirlistSetAttrFailed), d->fn)); if (!error_in_archive) error_in_archive = error; } free(d); } free(sorted_dirlist); if (!uO.tflag && QCOND2) { if (ndirs_fail > 0) Info(slide, 0, ((char *)slide, LoadFarString(DirlistFailAttrSum), ndirs_fail)); } } } #endif /* SET_DIR_ATTRIB */ /*--------------------------------------------------------------------------- Check for unmatched filespecs on command line and print warning if any found. Free allocated memory. (But suppress check when central dir scan was interrupted prematurely.) ---------------------------------------------------------------------------*/ if (fn_matched) { if (reached_end) for (i = 0; i < G.filespecs; ++i) if (!fn_matched[i]) { #ifdef DLL if (!G.redirect_data && !G.redirect_text) Info(slide, 0x401, ((char *)slide, LoadFarString(FilenameNotMatched), G.pfnames[i])); else setFileNotFound(__G); #else Info(slide, 1, ((char *)slide, LoadFarString(FilenameNotMatched), G.pfnames[i])); #endif if (error_in_archive <= PK_WARN) error_in_archive = PK_FIND; /* some files not found */ } free((zvoid *)fn_matched); } if (xn_matched) { if (reached_end) for (i = 0; i < G.xfilespecs; ++i) if (!xn_matched[i]) Info(slide, 0x401, ((char *)slide, LoadFarString(ExclFilenameNotMatched), G.pxnames[i])); free((zvoid *)xn_matched); } /*--------------------------------------------------------------------------- Now, all locally allocated memory has been released. When the central directory processing has been interrupted prematurely, it is safe to return immediately. All completeness checks and summary messages are skipped in this case. ---------------------------------------------------------------------------*/ if (!reached_end) return error_in_archive; /*--------------------------------------------------------------------------- Double-check that we're back at the end-of-central-directory record, and print quick summary of results, if we were just testing the archive. We send the summary to stdout so that people doing the testing in the back- ground and redirecting to a file can just do a "tail" on the output file. ---------------------------------------------------------------------------*/ #ifndef SFX if (no_endsig_found) { /* just to make sure */ Info(slide, 0x401, ((char *)slide, LoadFarString(EndSigMsg))); Info(slide, 0x401, ((char *)slide, LoadFarString(ReportMsg))); if (!error_in_archive) /* don't overwrite stronger error */ error_in_archive = PK_WARN; } #endif /* !SFX */ if (uO.tflag) { ulg num = filnum - num_bad_pwd; if (uO.qflag < 2) { /* GRR 930710: was (uO.qflag == 1) */ if (error_in_archive) Info(slide, 0, ((char *)slide, LoadFarString(ErrorInArchive), (error_in_archive == PK_WARN)? "warning-" : "", G.zipfn)); else if (num == 0L) Info(slide, 0, ((char *)slide, LoadFarString(ZeroFilesTested), G.zipfn)); else if (G.process_all_files && (num_skipped+num_bad_pwd == 0L)) Info(slide, 0, ((char *)slide, LoadFarString(NoErrInCompData), G.zipfn)); else Info(slide, 0, ((char *)slide, LoadFarString(NoErrInTestedFiles) , G.zipfn, num, (num==1L)? "":"s")); if (num_skipped > 0L) Info(slide, 0, ((char *)slide, LoadFarString(FilesSkipped), num_skipped, (num_skipped==1L)? "":"s")); #if CRYPT if (num_bad_pwd > 0L) Info(slide, 0, ((char *)slide, LoadFarString(FilesSkipBadPasswd) , num_bad_pwd, (num_bad_pwd==1L)? "":"s")); #endif /* CRYPT */ } } /* give warning if files not tested or extracted (first condition can still * happen if zipfile is empty and no files specified on command line) */ if ((filnum == 0) && error_in_archive <= PK_WARN) { if (num_skipped > 0L) error_in_archive = IZ_UNSUP; /* unsupport. compression/encryption */ else error_in_archive = PK_FIND; /* no files found at all */ } #if CRYPT else if ((filnum == num_bad_pwd) && error_in_archive <= PK_WARN) error_in_archive = IZ_BADPWD; /* bad passwd => all files skipped */ #endif else if ((num_skipped > 0L) && error_in_archive <= PK_WARN) error_in_archive = IZ_UNSUP; /* was PK_WARN; Jean-loup complained */ #if CRYPT else if ((num_bad_pwd > 0L) && !error_in_archive) error_in_archive = PK_WARN; #endif return error_in_archive; } /* end function extract_or_test_files() */ /***************************/ /* Function store_info() */ /***************************/ static int store_info(__G) /* return 0 if skipping, 1 if OK */ __GDEF { #ifdef USE_BZIP2 # define UNKN_BZ2 (G.crec.compression_method!=BZIPPED) #else # define UNKN_BZ2 TRUE /* bzip2 unknown */ #endif #ifdef USE_LZMA # define UNKN_LZMA (G.crec.compression_method!=LZMAED) #else # define UNKN_LZMA TRUE /* LZMA unknown */ #endif #ifdef USE_WAVP # define UNKN_WAVP (G.crec.compression_method!=WAVPACKED) #else # define UNKN_WAVP TRUE /* WavPack unknown */ #endif #ifdef USE_PPMD # define UNKN_PPMD (G.crec.compression_method!=PPMDED) #else # define UNKN_PPMD TRUE /* PPMd unknown */ #endif #ifdef SFX # ifdef USE_DEFLATE64 # define UNKN_COMPR \ (G.crec.compression_method!=STORED && G.crec.compression_methodENHDEFLATED \ && UNKN_BZ2 && UNKN_LZMA && UNKN_WAVP && UNKN_PPMD) # else # define UNKN_COMPR \ (G.crec.compression_method!=STORED && G.crec.compression_method!=DEFLATED\ && UNKN_BZ2 && UNKN_LZMA && UNKN_WAVP && UNKN_PPMD) # endif #else # ifdef COPYRIGHT_CLEAN /* no reduced files */ # define UNKN_RED (G.crec.compression_method >= REDUCED1 && \ G.crec.compression_method <= REDUCED4) # else # define UNKN_RED FALSE /* reducing not unknown */ # endif # ifdef LZW_CLEAN /* no shrunk files */ # define UNKN_SHR (G.crec.compression_method == SHRUNK) # else # define UNKN_SHR FALSE /* unshrinking not unknown */ # endif # ifdef USE_DEFLATE64 # define UNKN_COMPR (UNKN_RED || UNKN_SHR || \ G.crec.compression_method==TOKENIZED || \ (G.crec.compression_method>ENHDEFLATED && UNKN_BZ2 && UNKN_LZMA \ && UNKN_WAVP && UNKN_PPMD)) # else # define UNKN_COMPR (UNKN_RED || UNKN_SHR || \ G.crec.compression_method==TOKENIZED || \ (G.crec.compression_method>DEFLATED && UNKN_BZ2 && UNKN_LZMA \ && UNKN_WAVP && UNKN_PPMD)) # endif #endif #if (defined(USE_BZIP2) && (UNZIP_VERSION < UNZIP_BZ2VERS)) int unzvers_support = (UNKN_BZ2 ? UNZIP_VERSION : UNZIP_BZ2VERS); # define UNZVERS_SUPPORT unzvers_support #else # define UNZVERS_SUPPORT UNZIP_VERSION #endif /*--------------------------------------------------------------------------- Check central directory info for version/compatibility requirements. ---------------------------------------------------------------------------*/ G.pInfo->encrypted = G.crec.general_purpose_bit_flag & 1; /* bit field */ G.pInfo->ExtLocHdr = (G.crec.general_purpose_bit_flag & 8) == 8; /* bit */ G.pInfo->textfile = G.crec.internal_file_attributes & 1; /* bit field */ G.pInfo->crc = G.crec.crc32; G.pInfo->compr_size = G.crec.csize; G.pInfo->uncompr_size = G.crec.ucsize; switch (uO.aflag) { case 0: G.pInfo->textmode = FALSE; /* bit field */ break; case 1: G.pInfo->textmode = G.pInfo->textfile; /* auto-convert mode */ break; default: /* case 2: */ G.pInfo->textmode = TRUE; break; } if (G.crec.version_needed_to_extract[1] == VMS_) { if (G.crec.version_needed_to_extract[0] > VMS_UNZIP_VERSION) { if (!((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2))) Info(slide, 0x401, ((char *)slide, LoadFarString(VersionMsg), FnFilter1(G.filename), "VMS", G.crec.version_needed_to_extract[0] / 10, G.crec.version_needed_to_extract[0] % 10, VMS_UNZIP_VERSION / 10, VMS_UNZIP_VERSION % 10)); return 0; } #ifndef VMS /* won't be able to use extra field, but still have data */ else if (!uO.tflag && !IS_OVERWRT_ALL) { /* if -o, extract anyway */ Info(slide, 0x481, ((char *)slide, LoadFarString(VMSFormatQuery), FnFilter1(G.filename))); fgets(G.answerbuf, sizeof(G.answerbuf), stdin); if ((*G.answerbuf != 'y') && (*G.answerbuf != 'Y')) return 0; } #endif /* !VMS */ /* usual file type: don't need VMS to extract */ } else if (G.crec.version_needed_to_extract[0] > UNZVERS_SUPPORT) { if (!((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2))) Info(slide, 0x401, ((char *)slide, LoadFarString(VersionMsg), FnFilter1(G.filename), "PK", G.crec.version_needed_to_extract[0] / 10, G.crec.version_needed_to_extract[0] % 10, UNZVERS_SUPPORT / 10, UNZVERS_SUPPORT % 10)); return 0; } if (UNKN_COMPR) { if (!((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2))) { #ifndef SFX unsigned cmpridx; if ((cmpridx = find_compr_idx(G.crec.compression_method)) < NUM_METHODS) Info(slide, 0x401, ((char *)slide, LoadFarString(ComprMsgName), FnFilter1(G.filename), LoadFarStringSmall(ComprNames[cmpridx]))); else #endif Info(slide, 0x401, ((char *)slide, LoadFarString(ComprMsgNum), FnFilter1(G.filename), G.crec.compression_method)); } return 0; } #if (!CRYPT) if (G.pInfo->encrypted) { if (!((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2))) Info(slide, 0x401, ((char *)slide, LoadFarString(SkipEncrypted), FnFilter1(G.filename))); return 0; } #endif /* !CRYPT */ #ifndef SFX /* store a copy of the central header filename for later comparison */ if ((G.pInfo->cfilname = zfmalloc(strlen(G.filename) + 1)) == NULL) { Info(slide, 0x401, ((char *)slide, LoadFarString(WarnNoMemCFName), FnFilter1(G.filename))); } else zfstrcpy(G.pInfo->cfilname, G.filename); #endif /* !SFX */ /* map whatever file attributes we have into the local format */ mapattr(__G); /* GRR: worry about return value later */ G.pInfo->diskstart = G.crec.disk_number_start; G.pInfo->offset = (zoff_t)G.crec.relative_offset_local_header; return 1; } /* end function store_info() */ #ifndef SFX /*******************************/ /* Function find_compr_idx() */ /*******************************/ unsigned find_compr_idx(compr_methodnum) unsigned compr_methodnum; { unsigned i; for (i = 0; i < NUM_METHODS; i++) { if (ComprIDs[i] == compr_methodnum) break; } return i; } #endif /* !SFX */ /******************************************/ /* Function extract_or_test_entrylist() */ /******************************************/ static int extract_or_test_entrylist(__G__ numchunk, pfilnum, pnum_bad_pwd, pold_extra_bytes, #ifdef SET_DIR_ATTRIB pnum_dirs, pdirlist, #endif error_in_archive) /* return PK-type error code */ __GDEF unsigned numchunk; ulg *pfilnum; ulg *pnum_bad_pwd; zoff_t *pold_extra_bytes; #ifdef SET_DIR_ATTRIB unsigned *pnum_dirs; direntry **pdirlist; #endif int error_in_archive; { unsigned i; int renamed, query; int skip_entry; zoff_t bufstart, inbuf_offset, request; int error, errcode; /* possible values for local skip_entry flag: */ #define SKIP_NO 0 /* do not skip this entry */ #define SKIP_Y_EXISTING 1 /* skip this entry, do not overwrite file */ #define SKIP_Y_NONEXIST 2 /* skip this entry, do not create new file */ /*----------------------------------------------------------------------- Second loop: process files in current block, extracting or testing each one. -----------------------------------------------------------------------*/ for (i = 0; i < numchunk; ++i) { (*pfilnum)++; /* *pfilnum = i + blknum*DIR_BLKSIZ + 1; */ G.pInfo = &G.info[i]; #ifdef NOVELL_BUG_FAILSAFE G.dne = FALSE; /* assume file exists until stat() says otherwise */ #endif /* if the target position is not within the current input buffer * (either haven't yet read far enough, or (maybe) skipping back- * ward), skip to the target position and reset readbuf(). */ /* seek_zipf(__G__ pInfo->offset); */ request = G.pInfo->offset + G.extra_bytes; inbuf_offset = request % INBUFSIZ; bufstart = request - inbuf_offset; Trace((stderr, "\ndebug: request = %ld, inbuf_offset = %ld\n", (long)request, (long)inbuf_offset)); Trace((stderr, "debug: bufstart = %ld, cur_zipfile_bufstart = %ld\n", (long)bufstart, (long)G.cur_zipfile_bufstart)); if (request < 0) { Info(slide, 0x401, ((char *)slide, LoadFarStringSmall(SeekMsg), G.zipfn, LoadFarString(ReportMsg))); error_in_archive = PK_ERR; if (*pfilnum == 1 && G.extra_bytes != 0L) { Info(slide, 0x401, ((char *)slide, LoadFarString(AttemptRecompensate))); *pold_extra_bytes = G.extra_bytes; G.extra_bytes = 0L; request = G.pInfo->offset; /* could also check if != 0 */ inbuf_offset = request % INBUFSIZ; bufstart = request - inbuf_offset; Trace((stderr, "debug: request = %ld, inbuf_offset = %ld\n", (long)request, (long)inbuf_offset)); Trace((stderr, "debug: bufstart = %ld, cur_zipfile_bufstart = %ld\n", (long)bufstart, (long)G.cur_zipfile_bufstart)); /* try again */ if (request < 0) { Trace((stderr, "debug: recompensated request still < 0\n")); Info(slide, 0x401, ((char *)slide, LoadFarStringSmall(SeekMsg), G.zipfn, LoadFarString(ReportMsg))); error_in_archive = PK_BADERR; continue; } } else { error_in_archive = PK_BADERR; continue; /* this one hosed; try next */ } } if (bufstart != G.cur_zipfile_bufstart) { Trace((stderr, "debug: bufstart != cur_zipfile_bufstart\n")); #ifdef USE_STRM_INPUT zfseeko(G.zipfd, bufstart, SEEK_SET); G.cur_zipfile_bufstart = zftello(G.zipfd); #else /* !USE_STRM_INPUT */ G.cur_zipfile_bufstart = zlseek(G.zipfd, bufstart, SEEK_SET); #endif /* ?USE_STRM_INPUT */ if ((G.incnt = read(G.zipfd, (char *)G.inbuf, INBUFSIZ)) <= 0) { Info(slide, 0x401, ((char *)slide, LoadFarString(OffsetMsg), *pfilnum, "lseek", (long)bufstart)); error_in_archive = PK_BADERR; continue; /* can still do next file */ } G.inptr = G.inbuf + (int)inbuf_offset; G.incnt -= (int)inbuf_offset; } else { G.incnt += (int)(G.inptr-G.inbuf) - (int)inbuf_offset; G.inptr = G.inbuf + (int)inbuf_offset; } /* should be in proper position now, so check for sig */ if (readbuf(__G__ G.sig, 4) == 0) { /* bad offset */ Info(slide, 0x401, ((char *)slide, LoadFarString(OffsetMsg), *pfilnum, "EOF", (long)request)); error_in_archive = PK_BADERR; continue; /* but can still try next one */ } if (memcmp(G.sig, local_hdr_sig, 4)) { Info(slide, 0x401, ((char *)slide, LoadFarString(OffsetMsg), *pfilnum, LoadFarStringSmall(LocalHdrSig), (long)request)); /* GRRDUMP(G.sig, 4) GRRDUMP(local_hdr_sig, 4) */ error_in_archive = PK_ERR; if ((*pfilnum == 1 && G.extra_bytes != 0L) || (G.extra_bytes == 0L && *pold_extra_bytes != 0L)) { Info(slide, 0x401, ((char *)slide, LoadFarString(AttemptRecompensate))); if (G.extra_bytes) { *pold_extra_bytes = G.extra_bytes; G.extra_bytes = 0L; } else G.extra_bytes = *pold_extra_bytes; /* third attempt */ if (((error = seek_zipf(__G__ G.pInfo->offset)) != PK_OK) || (readbuf(__G__ G.sig, 4) == 0)) { /* bad offset */ if (error != PK_BADERR) Info(slide, 0x401, ((char *)slide, LoadFarString(OffsetMsg), *pfilnum, "EOF", (long)request)); error_in_archive = PK_BADERR; continue; /* but can still try next one */ } if (memcmp(G.sig, local_hdr_sig, 4)) { Info(slide, 0x401, ((char *)slide, LoadFarString(OffsetMsg), *pfilnum, LoadFarStringSmall(LocalHdrSig), (long)request)); error_in_archive = PK_BADERR; continue; } } else continue; /* this one hosed; try next */ } if ((error = process_local_file_hdr(__G)) != PK_COOL) { Info(slide, 0x421, ((char *)slide, LoadFarString(BadLocalHdr), *pfilnum)); error_in_archive = error; /* only PK_EOF defined */ continue; /* can still try next one */ } #if (!defined(SFX) && defined(UNICODE_SUPPORT)) if (((G.lrec.general_purpose_bit_flag & (1 << 11)) == (1 << 11)) != (G.pInfo->GPFIsUTF8 != 0)) { if (QCOND2) { # ifdef SMALL_MEM char *temp_cfilnam = slide + (7 * (WSIZE>>3)); zfstrcpy((char Far *)temp_cfilnam, G.pInfo->cfilname); # define cFile_PrintBuf temp_cfilnam # else # define cFile_PrintBuf G.pInfo->cfilname # endif Info(slide, 0x421, ((char *)slide, LoadFarStringSmall2(GP11FlagsDiffer), *pfilnum, FnFilter1(cFile_PrintBuf), G.pInfo->GPFIsUTF8)); # undef cFile_PrintBuf } if (error_in_archive < PK_WARN) error_in_archive = PK_WARN; } #endif /* !SFX && UNICODE_SUPPORT */ if ((error = do_string(__G__ G.lrec.filename_length, DS_FN_L)) != PK_COOL) { if (error > error_in_archive) error_in_archive = error; if (error > PK_WARN) { Info(slide, 0x401, ((char *)slide, LoadFarString(FilNamMsg), FnFilter1(G.filename), "local")); continue; /* go on to next one */ } } if (G.extra_field != (uch *)NULL) { free(G.extra_field); G.extra_field = (uch *)NULL; } if ((error = do_string(__G__ G.lrec.extra_field_length, EXTRA_FIELD)) != 0) { if (error > error_in_archive) error_in_archive = error; if (error > PK_WARN) { Info(slide, 0x401, ((char *)slide, LoadFarString(ExtFieldMsg), FnFilter1(G.filename), "local")); continue; /* go on */ } } #ifndef SFX /* Filename consistency checks must come after reading in the local * extra field, so that a UTF-8 entry name e.f. block has already * been processed. */ if (G.pInfo->cfilname != (char Far *)NULL) { if (zfstrcmp(G.pInfo->cfilname, G.filename) != 0) { # ifdef SMALL_MEM char *temp_cfilnam = slide + (7 * (WSIZE>>3)); zfstrcpy((char Far *)temp_cfilnam, G.pInfo->cfilname); # define cFile_PrintBuf temp_cfilnam # else # define cFile_PrintBuf G.pInfo->cfilname # endif Info(slide, 0x401, ((char *)slide, LoadFarStringSmall2(LvsCFNamMsg), FnFilter2(cFile_PrintBuf), FnFilter1(G.filename))); # undef cFile_PrintBuf zfstrcpy(G.filename, G.pInfo->cfilname); if (error_in_archive < PK_WARN) error_in_archive = PK_WARN; } zffree(G.pInfo->cfilname); G.pInfo->cfilname = (char Far *)NULL; } #endif /* !SFX */ /* Size consistency checks must come after reading in the local extra * field, so that any Zip64 extension local e.f. block has already * been processed. */ if (G.lrec.compression_method == STORED) { zusz_t csiz_decrypted = G.lrec.csize; if (G.pInfo->encrypted) csiz_decrypted -= 12; if (G.lrec.ucsize != csiz_decrypted) { Info(slide, 0x401, ((char *)slide, LoadFarStringSmall2(WrnStorUCSizCSizDiff), FnFilter1(G.filename), FmZofft(G.lrec.ucsize, NULL, "u"), FmZofft(csiz_decrypted, NULL, "u"))); G.lrec.ucsize = csiz_decrypted; if (error_in_archive < PK_WARN) error_in_archive = PK_WARN; } } #if CRYPT if (G.pInfo->encrypted && (error = decrypt(__G__ uO.pwdarg)) != PK_COOL) { if (error == PK_WARN) { if (!((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2))) Info(slide, 0x401, ((char *)slide, LoadFarString(SkipIncorrectPasswd), FnFilter1(G.filename))); ++(*pnum_bad_pwd); } else { /* (error > PK_WARN) */ if (error > error_in_archive) error_in_archive = error; Info(slide, 0x401, ((char *)slide, LoadFarString(SkipCannotGetPasswd), FnFilter1(G.filename))); } continue; /* go on to next file */ } #endif /* CRYPT */ /* * just about to extract file: if extracting to disk, check if * already exists, and if so, take appropriate action according to * fflag/uflag/overwrite_all/etc. (we couldn't do this in upper * loop because we don't store the possibly renamed filename[] in * info[]) */ #ifdef DLL if (!uO.tflag && !uO.cflag && !G.redirect_data) #else if (!uO.tflag && !uO.cflag) #endif { renamed = FALSE; /* user hasn't renamed output file yet */ startover: query = FALSE; skip_entry = SKIP_NO; /* for files from DOS FAT, check for use of backslash instead * of slash as directory separator (bug in some zipper(s); so * far, not a problem in HPFS, NTFS or VFAT systems) */ #ifndef SFX if (G.pInfo->hostnum == FS_FAT_ && !MBSCHR(G.filename, '/')) { char *p=G.filename; if (*p) do { if (*p == '\\') { if (!G.reported_backslash) { Info(slide, 0x21, ((char *)slide, LoadFarString(BackslashPathSep), G.zipfn)); G.reported_backslash = TRUE; if (!error_in_archive) error_in_archive = PK_WARN; } *p = '/'; } } while (*PREINCSTR(p)); } #endif /* !SFX */ if (!renamed) { /* remove absolute path specs */ if (G.filename[0] == '/') { Info(slide, 0x401, ((char *)slide, LoadFarString(AbsolutePathWarning), FnFilter1(G.filename))); if (!error_in_archive) error_in_archive = PK_WARN; do { char *p = G.filename + 1; do { *(p-1) = *p; } while (*p++ != '\0'); } while (G.filename[0] == '/'); } } /* mapname can create dirs if not freshening or if renamed */ error = mapname(__G__ renamed); if ((errcode = error & ~MPN_MASK) != PK_OK && error_in_archive < errcode) error_in_archive = errcode; if ((errcode = error & MPN_MASK) > MPN_INF_TRUNC) { if (errcode == MPN_CREATED_DIR) { #ifdef SET_DIR_ATTRIB direntry *d_entry; error = defer_dir_attribs(__G__ &d_entry); if (d_entry == (direntry *)NULL) { /* There may be no dir_attribs info available, or * we have encountered a mem allocation error. * In case of an error, report it and set program * error state to warning level. */ if (error) { Info(slide, 0x401, ((char *)slide, LoadFarString(DirlistEntryNoMem))); if (!error_in_archive) error_in_archive = PK_WARN; } } else { d_entry->next = (*pdirlist); (*pdirlist) = d_entry; ++(*pnum_dirs); } #endif /* SET_DIR_ATTRIB */ } else if (errcode == MPN_VOL_LABEL) { #ifdef DOS_OS2_W32 Info(slide, 0x401, ((char *)slide, LoadFarString(SkipVolumeLabel), FnFilter1(G.filename), uO.volflag? "hard disk " : "")); #else Info(slide, 1, ((char *)slide, LoadFarString(SkipVolumeLabel), FnFilter1(G.filename), "")); #endif } else if (errcode > MPN_INF_SKIP && error_in_archive < PK_ERR) error_in_archive = PK_ERR; Trace((stderr, "mapname(%s) returns error code = %d\n", FnFilter1(G.filename), error)); continue; /* go on to next file */ } #ifdef QDOS QFilename(__G__ G.filename); #endif switch (check_for_newer(__G__ G.filename)) { case DOES_NOT_EXIST: #ifdef NOVELL_BUG_FAILSAFE G.dne = TRUE; /* stat() says file DOES NOT EXIST */ #endif /* freshen (no new files): skip unless just renamed */ if (uO.fflag && !renamed) skip_entry = SKIP_Y_NONEXIST; break; case EXISTS_AND_OLDER: #ifdef UNIXBACKUP if (!uO.B_flag) #endif { if (IS_OVERWRT_NONE) /* never overwrite: skip file */ skip_entry = SKIP_Y_EXISTING; else if (!IS_OVERWRT_ALL) query = TRUE; } break; case EXISTS_AND_NEWER: /* (or equal) */ #ifdef UNIXBACKUP if ((!uO.B_flag && IS_OVERWRT_NONE) || #else if (IS_OVERWRT_NONE || #endif (uO.uflag && !renamed)) { /* skip if update/freshen & orig name */ skip_entry = SKIP_Y_EXISTING; } else { #ifdef UNIXBACKUP if (!IS_OVERWRT_ALL && !uO.B_flag) #else if (!IS_OVERWRT_ALL) #endif query = TRUE; } break; } #ifdef VMS /* 2008-07-24 SMS. * On VMS, if the file name includes a version number, * and "-V" ("retain VMS version numbers", V_flag) is in * effect, then the VMS-specific code will handle any * conflicts with an existing file, making this query * redundant. (Implicit "y" response here.) */ if (query && uO.V_flag) { /* Not discarding file versions. Look for one. */ int cndx = strlen(G.filename) - 1; while ((cndx > 0) && (isdigit(G.filename[cndx]))) cndx--; if (G.filename[cndx] == ';') /* File version found; skip the generic query, * proceeding with its default response "y". */ query = FALSE; } #endif /* VMS */ if (query) { #ifdef WINDLL switch (G.lpUserFunctions->replace != NULL ? (*G.lpUserFunctions->replace)(G.filename, FILNAMSIZ) : IDM_REPLACE_NONE) { case IDM_REPLACE_RENAME: _ISO_INTERN(G.filename); renamed = TRUE; goto startover; case IDM_REPLACE_ALL: G.overwrite_mode = OVERWRT_ALWAYS; /* FALL THROUGH, extract */ case IDM_REPLACE_YES: break; case IDM_REPLACE_NONE: G.overwrite_mode = OVERWRT_NEVER; /* FALL THROUGH, skip */ case IDM_REPLACE_NO: skip_entry = SKIP_Y_EXISTING; break; } #else /* !WINDLL */ extent fnlen; reprompt: Info(slide, 0x81, ((char *)slide, LoadFarString(ReplaceQuery), FnFilter1(G.filename))); if (fgets(G.answerbuf, sizeof(G.answerbuf), stdin) == (char *)NULL) { Info(slide, 1, ((char *)slide, LoadFarString(AssumeNone))); *G.answerbuf = 'N'; if (!error_in_archive) error_in_archive = 1; /* not extracted: warning */ } switch (*G.answerbuf) { case 'r': case 'R': do { Info(slide, 0x81, ((char *)slide, LoadFarString(NewNameQuery))); fgets(G.filename, FILNAMSIZ, stdin); /* usually get \n here: better check for it */ fnlen = strlen(G.filename); if (lastchar(G.filename, fnlen) == '\n') G.filename[--fnlen] = '\0'; } while (fnlen == 0); #ifdef WIN32 /* WIN32 fgets( ... , stdin) returns OEM coded strings */ _OEM_INTERN(G.filename); #endif renamed = TRUE; goto startover; /* sorry for a goto */ case 'A': /* dangerous option: force caps */ G.overwrite_mode = OVERWRT_ALWAYS; /* FALL THROUGH, extract */ case 'y': case 'Y': break; case 'N': G.overwrite_mode = OVERWRT_NEVER; /* FALL THROUGH, skip */ case 'n': /* skip file */ skip_entry = SKIP_Y_EXISTING; break; case '\n': case '\r': /* Improve echo of '\n' and/or '\r' (sizeof(G.answerbuf) == 10 (see globals.h), so there is enough space for the provided text...) */ strcpy(G.answerbuf, "{ENTER}"); /* fall through ... */ default: /* usually get \n here: remove it for nice display (fnlen can be re-used here, we are outside the "enter new filename" loop) */ fnlen = strlen(G.answerbuf); if (lastchar(G.answerbuf, fnlen) == '\n') G.answerbuf[--fnlen] = '\0'; Info(slide, 1, ((char *)slide, LoadFarString(InvalidResponse), G.answerbuf)); goto reprompt; /* yet another goto? */ } /* end switch (*answerbuf) */ #endif /* ?WINDLL */ } /* end if (query) */ if (skip_entry != SKIP_NO) { #ifdef WINDLL if (skip_entry == SKIP_Y_EXISTING) { /* report skipping of an existing entry */ Info(slide, 0, ((char *)slide, ((IS_OVERWRT_NONE || !uO.uflag || renamed) ? "Target file exists. Skipping %s\n" : "Target file newer. Skipping %s\n"), FnFilter1(G.filename))); } #endif /* WINDLL */ continue; } } /* end if (extracting to disk) */ #ifdef DLL if ((G.statreportcb != NULL) && (*G.statreportcb)(__G__ UZ_ST_START_EXTRACT, G.zipfn, G.filename, NULL)) { return IZ_CTRLC; /* cancel operation by user request */ } #endif #ifdef MACOS /* MacOS is no preemptive OS, thus call event-handling by hand */ UserStop(); #endif #ifdef AMIGA G.filenote_slot = i; #endif G.disk_full = 0; if ((error = extract_or_test_member(__G)) != PK_COOL) { if (error > error_in_archive) error_in_archive = error; /* ...and keep going */ #ifdef DLL if (G.disk_full > 1 || error_in_archive == IZ_CTRLC) { #else if (G.disk_full > 1) { #endif return error_in_archive; /* (unless disk full) */ } } #ifdef DLL if ((G.statreportcb != NULL) && (*G.statreportcb)(__G__ UZ_ST_FINISH_MEMBER, G.zipfn, G.filename, (zvoid *)&G.lrec.ucsize)) { return IZ_CTRLC; /* cancel operation by user request */ } #endif #ifdef MACOS /* MacOS is no preemptive OS, thus call event-handling by hand */ UserStop(); #endif } /* end for-loop (i: files in current block) */ return error_in_archive; } /* end function extract_or_test_entrylist() */ /* wsize is used in extract_or_test_member() and UZbunzip2() */ #if (defined(DLL) && !defined(NO_SLIDE_REDIR)) # define wsize G._wsize /* wsize is a variable */ #else # define wsize WSIZE /* wsize is a constant */ #endif /***************************************/ /* Function extract_or_test_member() */ /***************************************/ static int extract_or_test_member(__G) /* return PK-type error code */ __GDEF { char *nul="[empty] ", *txt="[text] ", *bin="[binary]"; #ifdef CMS_MVS char *ebc="[ebcdic]"; #endif register int b; int r, error=PK_COOL; /*--------------------------------------------------------------------------- Initialize variables, buffers, etc. ---------------------------------------------------------------------------*/ G.bits_left = 0; G.bitbuf = 0L; /* unreduce and unshrink only */ G.zipeof = 0; G.newfile = TRUE; G.crc32val = CRCVAL_INITIAL; #ifdef SYMLINKS /* If file is a (POSIX-compatible) symbolic link and we are extracting * to disk, prepare to restore the link. */ G.symlnk = (G.pInfo->symlink && !uO.tflag && !uO.cflag && (G.lrec.ucsize > 0)); #endif /* SYMLINKS */ if (uO.tflag) { if (!uO.qflag) Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg), "test", FnFilter1(G.filename), "", "")); } else { #ifdef DLL if (uO.cflag && !G.redirect_data) #else if (uO.cflag) #endif { #if (defined(OS2) && defined(__IBMC__) && (__IBMC__ >= 200)) G.outfile = freopen("", "wb", stdout); /* VAC++ ignores setmode */ #else G.outfile = stdout; #endif #ifdef DOS_FLX_NLM_OS2_W32 #if (defined(__HIGHC__) && !defined(FLEXOS)) setmode(G.outfile, _BINARY); #else /* !(defined(__HIGHC__) && !defined(FLEXOS)) */ setmode(fileno(G.outfile), O_BINARY); #endif /* ?(defined(__HIGHC__) && !defined(FLEXOS)) */ # define NEWLINE "\r\n" #else /* !DOS_FLX_NLM_OS2_W32 */ # define NEWLINE "\n" #endif /* ?DOS_FLX_NLM_OS2_W32 */ #ifdef VMS /* VMS: required even for stdout! */ if ((r = open_outfile(__G)) != 0) switch (r) { case OPENOUT_SKIPOK: return PK_OK; case OPENOUT_SKIPWARN: return PK_WARN; default: return PK_DISK; } } else if ((r = open_outfile(__G)) != 0) switch (r) { case OPENOUT_SKIPOK: return PK_OK; case OPENOUT_SKIPWARN: return PK_WARN; default: return PK_DISK; } #else /* !VMS */ } else if (open_outfile(__G)) return PK_DISK; #endif /* ?VMS */ } /*--------------------------------------------------------------------------- Unpack the file. ---------------------------------------------------------------------------*/ defer_leftover_input(__G); /* so NEXTBYTE bounds check will work */ switch (G.lrec.compression_method) { case STORED: if (!uO.tflag && QCOND2) { #ifdef SYMLINKS if (G.symlnk) /* can also be deflated, but rarer... */ Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg), "link", FnFilter1(G.filename), "", "")); else #endif /* SYMLINKS */ Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg), "extract", FnFilter1(G.filename), (uO.aflag != 1 /* && G.pInfo->textfile==G.pInfo->textmode */)? "" : (G.lrec.ucsize == 0L? nul : (G.pInfo->textfile? txt : bin)), uO.cflag? NEWLINE : "")); } #if (defined(DLL) && !defined(NO_SLIDE_REDIR)) if (G.redirect_slide) { wsize = G.redirect_size; redirSlide = G.redirect_buffer; } else { wsize = WSIZE; redirSlide = slide; } #endif G.outptr = redirSlide; G.outcnt = 0L; while ((b = NEXTBYTE) != EOF) { *G.outptr++ = (uch)b; if (++G.outcnt == wsize) { error = flush(__G__ redirSlide, G.outcnt, 0); G.outptr = redirSlide; G.outcnt = 0L; if (error != PK_COOL || G.disk_full) break; } } if (G.outcnt) { /* flush final (partial) buffer */ r = flush(__G__ redirSlide, G.outcnt, 0); if (error < r) error = r; } break; #ifndef SFX #ifndef LZW_CLEAN case SHRUNK: if (!uO.tflag && QCOND2) { Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg), LoadFarStringSmall(Unshrink), FnFilter1(G.filename), (uO.aflag != 1 /* && G.pInfo->textfile==G.pInfo->textmode */)? "" : (G.pInfo->textfile? txt : bin), uO.cflag? NEWLINE : "")); } if ((r = unshrink(__G)) != PK_COOL) { if (r < PK_DISK) { if ((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2)) Info(slide, 0x401, ((char *)slide, LoadFarStringSmall(ErrUnzipFile), r == PK_MEM3 ? LoadFarString(NotEnoughMem) : LoadFarString(InvalidComprData), LoadFarStringSmall2(Unshrink), FnFilter1(G.filename))); else Info(slide, 0x401, ((char *)slide, LoadFarStringSmall(ErrUnzipNoFile), r == PK_MEM3 ? LoadFarString(NotEnoughMem) : LoadFarString(InvalidComprData), LoadFarStringSmall2(Unshrink))); } error = r; } break; #endif /* !LZW_CLEAN */ #ifndef COPYRIGHT_CLEAN case REDUCED1: case REDUCED2: case REDUCED3: case REDUCED4: if (!uO.tflag && QCOND2) { Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg), "unreduc", FnFilter1(G.filename), (uO.aflag != 1 /* && G.pInfo->textfile==G.pInfo->textmode */)? "" : (G.pInfo->textfile? txt : bin), uO.cflag? NEWLINE : "")); } if ((r = unreduce(__G)) != PK_COOL) { /* unreduce() returns only PK_COOL, PK_DISK, or IZ_CTRLC */ error = r; } break; #endif /* !COPYRIGHT_CLEAN */ case IMPLODED: if (!uO.tflag && QCOND2) { Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg), "explod", FnFilter1(G.filename), (uO.aflag != 1 /* && G.pInfo->textfile==G.pInfo->textmode */)? "" : (G.pInfo->textfile? txt : bin), uO.cflag? NEWLINE : "")); } if ((r = explode(__G)) != 0) { if (r == 5) { /* treat 5 specially */ int warning = ((zusz_t)G.used_csize <= G.lrec.csize); if ((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2)) Info(slide, 0x401, ((char *)slide, LoadFarString(LengthMsg), "", warning ? "warning" : "error", FmZofft(G.used_csize, NULL, NULL), FmZofft(G.lrec.ucsize, NULL, "u"), warning ? " " : "", FmZofft(G.lrec.csize, NULL, "u"), " [", FnFilter1(G.filename), "]")); else Info(slide, 0x401, ((char *)slide, LoadFarString(LengthMsg), "\n", warning ? "warning" : "error", FmZofft(G.used_csize, NULL, NULL), FmZofft(G.lrec.ucsize, NULL, "u"), warning ? " " : "", FmZofft(G.lrec.csize, NULL, "u"), "", "", ".")); error = warning ? PK_WARN : PK_ERR; } else if (r < PK_DISK) { if ((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2)) Info(slide, 0x401, ((char *)slide, LoadFarStringSmall(ErrUnzipFile), r == 3? LoadFarString(NotEnoughMem) : LoadFarString(InvalidComprData), LoadFarStringSmall2(Explode), FnFilter1(G.filename))); else Info(slide, 0x401, ((char *)slide, LoadFarStringSmall(ErrUnzipNoFile), r == 3? LoadFarString(NotEnoughMem) : LoadFarString(InvalidComprData), LoadFarStringSmall2(Explode))); error = ((r == 3) ? PK_MEM3 : PK_ERR); } else { error = r; } } break; #endif /* !SFX */ case DEFLATED: #ifdef USE_DEFLATE64 case ENHDEFLATED: #endif if (!uO.tflag && QCOND2) { Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg), "inflat", FnFilter1(G.filename), (uO.aflag != 1 /* && G.pInfo->textfile==G.pInfo->textmode */)? "" : (G.pInfo->textfile? txt : bin), uO.cflag? NEWLINE : "")); } #ifndef USE_ZLIB /* zlib's function is called inflate(), too */ # define UZinflate inflate #endif if ((r = UZinflate(__G__ (G.lrec.compression_method == ENHDEFLATED))) != 0) { if (r < PK_DISK) { if ((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2)) Info(slide, 0x401, ((char *)slide, LoadFarStringSmall(ErrUnzipFile), r == 3? LoadFarString(NotEnoughMem) : LoadFarString(InvalidComprData), LoadFarStringSmall2(Inflate), FnFilter1(G.filename))); else Info(slide, 0x401, ((char *)slide, LoadFarStringSmall(ErrUnzipNoFile), r == 3? LoadFarString(NotEnoughMem) : LoadFarString(InvalidComprData), LoadFarStringSmall2(Inflate))); error = ((r == 3) ? PK_MEM3 : PK_ERR); } else { error = r; } } break; #ifdef USE_BZIP2 case BZIPPED: if (!uO.tflag && QCOND2) { Info(slide, 0, ((char *)slide, LoadFarString(ExtractMsg), "bunzipp", FnFilter1(G.filename), (uO.aflag != 1 /* && G.pInfo->textfile==G.pInfo->textmode */)? "" : (G.pInfo->textfile? txt : bin), uO.cflag? NEWLINE : "")); } if ((r = UZbunzip2(__G)) != 0) { if (r < PK_DISK) { if ((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2)) Info(slide, 0x401, ((char *)slide, LoadFarStringSmall(ErrUnzipFile), r == 3? LoadFarString(NotEnoughMem) : LoadFarString(InvalidComprData), LoadFarStringSmall2(BUnzip), FnFilter1(G.filename))); else Info(slide, 0x401, ((char *)slide, LoadFarStringSmall(ErrUnzipNoFile), r == 3? LoadFarString(NotEnoughMem) : LoadFarString(InvalidComprData), LoadFarStringSmall2(BUnzip))); error = ((r == 3) ? PK_MEM3 : PK_ERR); } else { error = r; } } break; #endif /* USE_BZIP2 */ default: /* should never get to this point */ Info(slide, 0x401, ((char *)slide, LoadFarString(FileUnknownCompMethod), FnFilter1(G.filename))); /* close and delete file before return? */ undefer_input(__G); return PK_WARN; } /* end switch (compression method) */ /*--------------------------------------------------------------------------- Close the file and set its date and time (not necessarily in that order), and make sure the CRC checked out OK. Logical-AND the CRC for 64-bit machines (redundant on 32-bit machines). ---------------------------------------------------------------------------*/ #ifdef VMS /* VMS: required even for stdout! (final flush) */ if (!uO.tflag) /* don't close NULL file */ close_outfile(__G); #else #ifdef DLL if (!uO.tflag && (!uO.cflag || G.redirect_data)) { if (G.redirect_data) FINISH_REDIRECT(); else close_outfile(__G); } #else if (!uO.tflag && !uO.cflag) /* don't close NULL file or stdout */ close_outfile(__G); #endif #endif /* VMS */ /* GRR: CONVERT close_outfile() TO NON-VOID: CHECK FOR ERRORS! */ if (G.disk_full) { /* set by flush() */ if (G.disk_full > 1) { #if (defined(DELETE_IF_FULL) && defined(HAVE_UNLINK)) /* delete the incomplete file if we can */ if (unlink(G.filename) != 0) Trace((stderr, "extract.c: could not delete %s\n", FnFilter1(G.filename))); #else /* warn user about the incomplete file */ Info(slide, 0x421, ((char *)slide, LoadFarString(FileTruncated), FnFilter1(G.filename))); #endif error = PK_DISK; } else { error = PK_WARN; } } if (error > PK_WARN) {/* don't print redundant CRC error if error already */ undefer_input(__G); return error; } if (G.crc32val != G.lrec.crc32) { /* if quiet enough, we haven't output the filename yet: do it */ if ((uO.tflag && uO.qflag) || (!uO.tflag && !QCOND2)) Info(slide, 0x401, ((char *)slide, "%-22s ", FnFilter1(G.filename))); Info(slide, 0x401, ((char *)slide, LoadFarString(BadCRC), G.crc32val, G.lrec.crc32)); #if CRYPT if (G.pInfo->encrypted) Info(slide, 0x401, ((char *)slide, LoadFarString(MaybeBadPasswd))); #endif error = PK_ERR; } else if (uO.tflag) { #ifndef SFX if (G.extra_field) { if ((r = TestExtraField(__G__ G.extra_field, G.lrec.extra_field_length)) > error) error = r; } else #endif /* !SFX */ if (!uO.qflag) Info(slide, 0, ((char *)slide, " OK\n")); } else { if (QCOND2 && !error) /* GRR: is stdout reset to text mode yet? */ Info(slide, 0, ((char *)slide, "\n")); } undefer_input(__G); return error; } /* end function extract_or_test_member() */ #ifndef SFX /*******************************/ /* Function TestExtraField() */ /*******************************/ static int TestExtraField(__G__ ef, ef_len) __GDEF uch *ef; unsigned ef_len; { ush ebID; unsigned ebLen; unsigned eb_cmpr_offs = 0; int r; /* we know the regular compressed file data tested out OK, or else we * wouldn't be here ==> print filename if any extra-field errors found */ while (ef_len >= EB_HEADSIZE) { ebID = makeword(ef); ebLen = (unsigned)makeword(ef+EB_LEN); if (ebLen > (ef_len - EB_HEADSIZE)) { /* Discovered some extra field inconsistency! */ if (uO.qflag) Info(slide, 1, ((char *)slide, "%-22s ", FnFilter1(G.filename))); Info(slide, 1, ((char *)slide, LoadFarString(InconsistEFlength), ebLen, (ef_len - EB_HEADSIZE))); return PK_ERR; } switch (ebID) { case EF_OS2: case EF_ACL: case EF_MAC3: case EF_BEOS: case EF_ATHEOS: switch (ebID) { case EF_OS2: case EF_ACL: eb_cmpr_offs = EB_OS2_HLEN; break; case EF_MAC3: if (ebLen >= EB_MAC3_HLEN && (makeword(ef+(EB_HEADSIZE+EB_FLGS_OFFS)) & EB_M3_FL_UNCMPR) && (makelong(ef+EB_HEADSIZE) == ebLen - EB_MAC3_HLEN)) eb_cmpr_offs = 0; else eb_cmpr_offs = EB_MAC3_HLEN; break; case EF_BEOS: case EF_ATHEOS: if (ebLen >= EB_BEOS_HLEN && (*(ef+(EB_HEADSIZE+EB_FLGS_OFFS)) & EB_BE_FL_UNCMPR) && (makelong(ef+EB_HEADSIZE) == ebLen - EB_BEOS_HLEN)) eb_cmpr_offs = 0; else eb_cmpr_offs = EB_BEOS_HLEN; break; } if ((r = test_compr_eb(__G__ ef, ebLen, eb_cmpr_offs, NULL)) != PK_OK) { if (uO.qflag) Info(slide, 1, ((char *)slide, "%-22s ", FnFilter1(G.filename))); switch (r) { case IZ_EF_TRUNC: Info(slide, 1, ((char *)slide, LoadFarString(TruncEAs), ebLen-(eb_cmpr_offs+EB_CMPRHEADLEN), "\n")); break; case PK_ERR: Info(slide, 1, ((char *)slide, LoadFarString(InvalidComprDataEAs))); break; case PK_MEM3: case PK_MEM4: Info(slide, 1, ((char *)slide, LoadFarString(NotEnoughMemEAs))); break; default: if ((r & 0xff) != PK_ERR) Info(slide, 1, ((char *)slide, LoadFarString(UnknErrorEAs))); else { ush m = (ush)(r >> 8); if (m == DEFLATED) /* GRR KLUDGE! */ Info(slide, 1, ((char *)slide, LoadFarString(BadCRC_EAs))); else Info(slide, 1, ((char *)slide, LoadFarString(UnknComprMethodEAs), m)); } break; } return r; } break; case EF_NTSD: Trace((stderr, "ebID: %i / ebLen: %u\n", ebID, ebLen)); r = ebLen < EB_NTSD_L_LEN ? IZ_EF_TRUNC : ((ef[EB_HEADSIZE+EB_NTSD_VERSION] > EB_NTSD_MAX_VER) ? (PK_WARN | 0x4000) : test_compr_eb(__G__ ef, ebLen, EB_NTSD_L_LEN, TEST_NTSD)); if (r != PK_OK) { if (uO.qflag) Info(slide, 1, ((char *)slide, "%-22s ", FnFilter1(G.filename))); switch (r) { case IZ_EF_TRUNC: Info(slide, 1, ((char *)slide, LoadFarString(TruncNTSD), ebLen-(EB_NTSD_L_LEN+EB_CMPRHEADLEN), "\n")); break; #if (defined(WIN32) && defined(NTSD_EAS)) case PK_WARN: Info(slide, 1, ((char *)slide, LoadFarString(InvalidSecurityEAs))); break; #endif case PK_ERR: Info(slide, 1, ((char *)slide, LoadFarString(InvalidComprDataEAs))); break; case PK_MEM3: case PK_MEM4: Info(slide, 1, ((char *)slide, LoadFarString(NotEnoughMemEAs))); break; case (PK_WARN | 0x4000): Info(slide, 1, ((char *)slide, LoadFarString(UnsuppNTSDVersEAs), (int)ef[EB_HEADSIZE+EB_NTSD_VERSION])); r = PK_WARN; break; default: if ((r & 0xff) != PK_ERR) Info(slide, 1, ((char *)slide, LoadFarString(UnknErrorEAs))); else { ush m = (ush)(r >> 8); if (m == DEFLATED) /* GRR KLUDGE! */ Info(slide, 1, ((char *)slide, LoadFarString(BadCRC_EAs))); else Info(slide, 1, ((char *)slide, LoadFarString(UnknComprMethodEAs), m)); } break; } return r; } break; case EF_PKVMS: if (makelong(ef+EB_HEADSIZE) != crc32(CRCVAL_INITIAL, ef+(EB_HEADSIZE+4), (extent)(ebLen-4))) Info(slide, 1, ((char *)slide, LoadFarString(BadCRC_EAs))); break; case EF_PKW32: case EF_PKUNIX: case EF_ASIUNIX: case EF_IZVMS: case EF_IZUNIX: case EF_VMCMS: case EF_MVS: case EF_SPARK: case EF_TANDEM: case EF_THEOS: case EF_AV: default: break; } ef_len -= (ebLen + EB_HEADSIZE); ef += (ebLen + EB_HEADSIZE); } if (!uO.qflag) Info(slide, 0, ((char *)slide, " OK\n")); return PK_COOL; } /* end function TestExtraField() */ /******************************/ /* Function test_compr_eb() */ /******************************/ #ifdef PROTO static int test_compr_eb( __GPRO__ uch *eb, unsigned eb_size, unsigned compr_offset, int (*test_uc_ebdata)(__GPRO__ uch *eb, unsigned eb_size, uch *eb_ucptr, ulg eb_ucsize)) #else /* !PROTO */ static int test_compr_eb(__G__ eb, eb_size, compr_offset, test_uc_ebdata) __GDEF uch *eb; unsigned eb_size; unsigned compr_offset; int (*test_uc_ebdata)(); #endif /* ?PROTO */ { ulg eb_ucsize; uch *eb_ucptr; int r; if (compr_offset < 4) /* field is not compressed: */ return PK_OK; /* do nothing and signal OK */ if ((eb_size < (EB_UCSIZE_P + 4)) || ((eb_ucsize = makelong(eb+(EB_HEADSIZE+EB_UCSIZE_P))) > 0L && eb_size <= (compr_offset + EB_CMPRHEADLEN))) return IZ_EF_TRUNC; /* no compressed data! */ if ( #ifdef INT_16BIT (((ulg)(extent)eb_ucsize) != eb_ucsize) || #endif (eb_ucptr = (uch *)malloc((extent)eb_ucsize)) == (uch *)NULL) return PK_MEM4; r = memextract(__G__ eb_ucptr, eb_ucsize, eb + (EB_HEADSIZE + compr_offset), (ulg)(eb_size - compr_offset)); if (r == PK_OK && test_uc_ebdata != NULL) r = (*test_uc_ebdata)(__G__ eb, eb_size, eb_ucptr, eb_ucsize); free(eb_ucptr); return r; } /* end function test_compr_eb() */ #endif /* !SFX */ /***************************/ /* Function memextract() */ /***************************/ int memextract(__G__ tgt, tgtsize, src, srcsize) /* extract compressed */ __GDEF /* extra field block; */ uch *tgt; /* return PK-type error */ ulg tgtsize; /* level */ ZCONST uch *src; ulg srcsize; { zoff_t old_csize=G.csize; uch *old_inptr=G.inptr; int old_incnt=G.incnt; int r, error=PK_OK; ush method; ulg extra_field_crc; method = makeword(src); extra_field_crc = makelong(src+2); /* compressed extra field exists completely in memory at this location: */ G.inptr = (uch *)src + (2 + 4); /* method and extra_field_crc */ G.incnt = (int)(G.csize = (long)(srcsize - (2 + 4))); G.mem_mode = TRUE; G.outbufptr = tgt; G.outsize = tgtsize; switch (method) { case STORED: memcpy((char *)tgt, (char *)G.inptr, (extent)G.incnt); G.outcnt = (ulg)G.csize; /* for CRC calculation */ break; case DEFLATED: #ifdef USE_DEFLATE64 case ENHDEFLATED: #endif G.outcnt = 0L; if ((r = UZinflate(__G__ (method == ENHDEFLATED))) != 0) { if (!uO.tflag) Info(slide, 0x401, ((char *)slide, LoadFarStringSmall(ErrUnzipNoFile), r == 3? LoadFarString(NotEnoughMem) : LoadFarString(InvalidComprData), LoadFarStringSmall2(Inflate))); error = (r == 3)? PK_MEM3 : PK_ERR; } if (G.outcnt == 0L) /* inflate's final FLUSH sets outcnt */ break; break; default: if (uO.tflag) error = PK_ERR | ((int)method << 8); else { Info(slide, 0x401, ((char *)slide, LoadFarString(UnsupportedExtraField), method)); error = PK_ERR; /* GRR: should be passed on up via SetEAs() */ } break; } G.inptr = old_inptr; G.incnt = old_incnt; G.csize = old_csize; G.mem_mode = FALSE; if (!error) { register ulg crcval = crc32(CRCVAL_INITIAL, tgt, (extent)G.outcnt); if (crcval != extra_field_crc) { if (uO.tflag) error = PK_ERR | (DEFLATED << 8); /* kludge for now */ else { Info(slide, 0x401, ((char *)slide, LoadFarString(BadExtraFieldCRC), G.zipfn, crcval, extra_field_crc)); error = PK_ERR; } } } return error; } /* end function memextract() */ /*************************/ /* Function memflush() */ /*************************/ int memflush(__G__ rawbuf, size) __GDEF ZCONST uch *rawbuf; ulg size; { if (size > G.outsize) /* Here, PK_DISK is a bit off-topic, but in the sense of marking "overflow of output space", its use may be tolerated. */ return PK_DISK; /* more data than output buffer can hold */ memcpy((char *)G.outbufptr, (char *)rawbuf, (extent)size); G.outbufptr += (unsigned int)size; G.outsize -= size; G.outcnt += size; return 0; } /* end function memflush() */ #if (defined(VMS) || defined(VMS_TEXT_CONV)) /************************************/ /* Function extract_izvms_block() */ /************************************/ /* * Extracts block from p. If resulting length is less than needed, fill * extra space with corresponding bytes from 'init'. * Currently understands 3 formats of block compression: * - Simple storing * - Compression of zero bytes to zero bits * - Deflation (see memextract()) * The IZVMS block data is returned in malloc'd space. */ uch *extract_izvms_block(__G__ ebdata, size, retlen, init, needlen) __GDEF ZCONST uch *ebdata; unsigned size; unsigned *retlen; ZCONST uch *init; unsigned needlen; { uch *ucdata; /* Pointer to block allocated */ int cmptype; unsigned usiz, csiz; cmptype = (makeword(ebdata+EB_IZVMS_FLGS) & EB_IZVMS_BCMASK); csiz = size - EB_IZVMS_HLEN; usiz = (cmptype == EB_IZVMS_BCSTOR ? csiz : makeword(ebdata+EB_IZVMS_UCSIZ)); if (retlen) *retlen = usiz; if ((ucdata = (uch *)malloc(MAX(needlen, usiz))) == NULL) return NULL; if (init && (usiz < needlen)) memcpy((char *)ucdata, (ZCONST char *)init, needlen); switch (cmptype) { case EB_IZVMS_BCSTOR: /* The simplest case */ memcpy(ucdata, ebdata+EB_IZVMS_HLEN, usiz); break; case EB_IZVMS_BC00: decompress_bits(ucdata, usiz, ebdata+EB_IZVMS_HLEN); break; case EB_IZVMS_BCDEFL: memextract(__G__ ucdata, (ulg)usiz, ebdata+EB_IZVMS_HLEN, (ulg)csiz); break; default: free(ucdata); ucdata = NULL; } return ucdata; } /* end of extract_izvms_block */ /********************************/ /* Function decompress_bits() */ /********************************/ /* * Simple uncompression routine. The compression uses bit stream. * Compression scheme: * * if (byte!=0) * putbit(1),putbyte(byte) * else * putbit(0) */ static void decompress_bits(outptr, needlen, bitptr) uch *outptr; /* Pointer into output block */ unsigned needlen; /* Size of uncompressed block */ ZCONST uch *bitptr; /* Pointer into compressed data */ { ulg bitbuf = 0; int bitcnt = 0; #define _FILL { bitbuf |= (*bitptr++) << bitcnt;\ bitcnt += 8; \ } while (needlen--) { if (bitcnt <= 0) _FILL; if (bitbuf & 1) { bitbuf >>= 1; if ((bitcnt -= 1) < 8) _FILL; *outptr++ = (uch)bitbuf; bitcnt -= 8; bitbuf >>= 8; } else { *outptr++ = '\0'; bitcnt -= 1; bitbuf >>= 1; } } } /* end function decompress_bits() */ #endif /* VMS || VMS_TEXT_CONV */ #ifdef SYMLINKS /***********************************/ /* Function set_deferred_symlink() */ /***********************************/ static void set_deferred_symlink(__G__ slnk_entry) __GDEF slinkentry *slnk_entry; { extent ucsize = slnk_entry->targetlen; char *linkfname = slnk_entry->fname; char *linktarget = (char *)malloc(ucsize+1); if (!linktarget) { Info(slide, 0x201, ((char *)slide, LoadFarString(SymLnkWarnNoMem), FnFilter1(linkfname))); return; } linktarget[ucsize] = '\0'; G.outfile = zfopen(linkfname, FOPR); /* open link placeholder for reading */ /* Check that the following conditions are all fulfilled: * a) the placeholder file exists, * b) the placeholder file contains exactly "ucsize" bytes * (read the expected placeholder content length + 1 extra byte, this * should return the expected content length), * c) the placeholder content matches the link target specification as * stored in the symlink control structure. */ if (!G.outfile || fread(linktarget, 1, ucsize+1, G.outfile) != ucsize || strcmp(slnk_entry->target, linktarget)) { Info(slide, 0x201, ((char *)slide, LoadFarString(SymLnkWarnInvalid), FnFilter1(linkfname))); free(linktarget); if (G.outfile) fclose(G.outfile); return; } fclose(G.outfile); /* close "data" file for good... */ unlink(linkfname); /* ...and delete it */ if (QCOND2) Info(slide, 0, ((char *)slide, LoadFarString(SymLnkFinish), FnFilter1(linkfname), FnFilter2(linktarget))); if (symlink(linktarget, linkfname)) /* create the real link */ perror("symlink error"); free(linktarget); #ifdef SET_SYMLINK_ATTRIBS set_symlnk_attribs(__G__ slnk_entry); #endif return; /* can't set time on symlinks */ } /* end function set_deferred_symlink() */ #endif /* SYMLINKS */ /*************************/ /* Function fnfilter() */ /* here instead of in list.c for SFX */ /*************************/ char *fnfilter(raw, space, size) /* convert name to safely printable form */ ZCONST char *raw; uch *space; extent size; { #ifndef NATIVE /* ASCII: filter ANSI escape codes, etc. */ ZCONST uch *r=(ZCONST uch *)raw; uch *s=space; uch *slim=NULL; uch *se=NULL; int have_overflow = FALSE; if (size > 0) { slim = space + size #ifdef _MBCS - (MB_CUR_MAX - 1) #endif - 4; } while (*r) { if (size > 0 && s >= slim && se == NULL) { se = s; } #ifdef QDOS if (qlflag & 2) { if (*r == '/' || *r == '.') { if (se != NULL && (s > (space + (size-3)))) { have_overflow = TRUE; break; } ++r; *s++ = '_'; continue; } } else #endif #ifdef HAVE_WORKING_ISPRINT # ifndef UZ_FNFILTER_REPLACECHAR /* A convenient choice for the replacement of unprintable char codes is * the "single char wildcard", as this character is quite unlikely to * appear in filenames by itself. The following default definition * sets the replacement char to a question mark as the most common * "single char wildcard"; this setting should be overridden in the * appropiate system-specific configuration header when needed. */ # define UZ_FNFILTER_REPLACECHAR '?' # endif if (!isprint(*r)) { if (*r < 32) { /* ASCII control codes are escaped as "^{letter}". */ if (se != NULL && (s > (space + (size-4)))) { have_overflow = TRUE; break; } *s++ = '^', *s++ = (uch)(64 + *r++); } else { /* Other unprintable codes are replaced by the * placeholder character. */ if (se != NULL && (s > (space + (size-3)))) { have_overflow = TRUE; break; } *s++ = UZ_FNFILTER_REPLACECHAR; INCSTR(r); } #else /* !HAVE_WORKING_ISPRINT */ if (*r < 32) { /* ASCII control codes are escaped as "^{letter}". */ if (se != NULL && (s > (space + (size-4)))) { have_overflow = TRUE; break; } *s++ = '^', *s++ = (uch)(64 + *r++); #endif /* ?HAVE_WORKING_ISPRINT */ } else { #ifdef _MBCS unsigned i = CLEN(r); if (se != NULL && (s > (space + (size-i-2)))) { have_overflow = TRUE; break; } for (; i > 0; i--) *s++ = *r++; #else if (se != NULL && (s > (space + (size-3)))) { have_overflow = TRUE; break; } *s++ = *r++; #endif } } if (have_overflow) { strcpy((char *)se, "..."); } else { *s = '\0'; } #ifdef WINDLL INTERN_TO_ISO((char *)space, (char *)space); /* translate to ANSI */ #else #if (defined(WIN32) && !defined(_WIN32_WCE)) /* Win9x console always uses OEM character coding, and WinNT console is set to OEM charset by default, too */ INTERN_TO_OEM((char *)space, (char *)space); #endif /* (WIN32 && !_WIN32_WCE) */ #endif /* ?WINDLL */ return (char *)space; #else /* NATIVE: EBCDIC or whatever */ return (char *)raw; #endif } /* end function fnfilter() */ #ifdef SET_DIR_ATTRIB /* must sort saved directories so can set perms from bottom up */ /************************/ /* Function dircomp() */ /************************/ static int Cdecl dircomp(a, b) /* used by qsort(); swiped from Zip */ ZCONST zvoid *a, *b; { /* order is significant: this sorts in reverse order (deepest first) */ return strcmp((*(direntry **)b)->fn, (*(direntry **)a)->fn); /* return namecmp((*(direntry **)b)->fn, (*(direntry **)a)->fn); */ } #endif /* SET_DIR_ATTRIB */ #ifdef USE_BZIP2 /**************************/ /* Function UZbunzip2() */ /**************************/ int UZbunzip2(__G) __GDEF /* decompress a bzipped entry using the libbz2 routines */ { int retval = 0; /* return code: 0 = "no error" */ int err=BZ_OK; int repeated_buf_err; bz_stream bstrm; #if (defined(DLL) && !defined(NO_SLIDE_REDIR)) if (G.redirect_slide) wsize = G.redirect_size, redirSlide = G.redirect_buffer; else wsize = WSIZE, redirSlide = slide; #endif bstrm.next_out = (char *)redirSlide; bstrm.avail_out = wsize; bstrm.next_in = (char *)G.inptr; bstrm.avail_in = G.incnt; { /* local buffer for efficiency */ /* $TODO Check for BZIP LIB version? */ bstrm.bzalloc = NULL; bstrm.bzfree = NULL; bstrm.opaque = NULL; Trace((stderr, "initializing bzlib()\n")); err = BZ2_bzDecompressInit(&bstrm, 0, 0); if (err == BZ_MEM_ERROR) return 3; else if (err != BZ_OK) Trace((stderr, "oops! (BZ2_bzDecompressInit() err = %d)\n", err)); } #ifdef FUNZIP while (err != BZ_STREAM_END) { #else /* !FUNZIP */ while (G.csize > 0) { Trace((stderr, "first loop: G.csize = %ld\n", G.csize)); #endif /* ?FUNZIP */ while (bstrm.avail_out > 0) { err = BZ2_bzDecompress(&bstrm); if (err == BZ_DATA_ERROR) { retval = 2; goto uzbunzip_cleanup_exit; } else if (err == BZ_MEM_ERROR) { retval = 3; goto uzbunzip_cleanup_exit; } else if (err != BZ_OK && err != BZ_STREAM_END) Trace((stderr, "oops! (bzip(first loop) err = %d)\n", err)); #ifdef FUNZIP if (err == BZ_STREAM_END) /* "END-of-entry-condition" ? */ #else /* !FUNZIP */ if (G.csize <= 0L) /* "END-of-entry-condition" ? */ #endif /* ?FUNZIP */ break; if (bstrm.avail_in == 0) { if (fillinbuf(__G) == 0) { /* no "END-condition" yet, but no more data */ retval = 2; goto uzbunzip_cleanup_exit; } bstrm.next_in = (char *)G.inptr; bstrm.avail_in = G.incnt; } Trace((stderr, " avail_in = %u\n", bstrm.avail_in)); } /* flush slide[] */ if ((retval = FLUSH(wsize - bstrm.avail_out)) != 0) goto uzbunzip_cleanup_exit; Trace((stderr, "inside loop: flushing %ld bytes (ptr diff = %ld)\n", (long)(wsize - bstrm.avail_out), (long)(bstrm.next_out-(char *)redirSlide))); bstrm.next_out = (char *)redirSlide; bstrm.avail_out = wsize; } /* no more input, so loop until we have all output */ Trace((stderr, "beginning final loop: err = %d\n", err)); repeated_buf_err = FALSE; while (err != BZ_STREAM_END) { err = BZ2_bzDecompress(&bstrm); if (err == BZ_DATA_ERROR) { retval = 2; goto uzbunzip_cleanup_exit; } else if (err == BZ_MEM_ERROR) { retval = 3; goto uzbunzip_cleanup_exit; } else if (err != BZ_OK && err != BZ_STREAM_END) { Trace((stderr, "oops! (bzip(final loop) err = %d)\n", err)); DESTROYGLOBALS(); EXIT(PK_MEM3); } /* final flush of slide[] */ if ((retval = FLUSH(wsize - bstrm.avail_out)) != 0) goto uzbunzip_cleanup_exit; Trace((stderr, "final loop: flushing %ld bytes (ptr diff = %ld)\n", (long)(wsize - bstrm.avail_out), (long)(bstrm.next_out-(char *)redirSlide))); bstrm.next_out = (char *)redirSlide; bstrm.avail_out = wsize; } #ifdef LARGE_FILE_SUPPORT Trace((stderr, "total in = %llu, total out = %llu\n", (zusz_t)(bstrm.total_in_lo32) + ((zusz_t)(bstrm.total_in_hi32))<<32, (zusz_t)(bstrm.total_out_lo32) + ((zusz_t)(bstrm.total_out_hi32))<<32)); #else Trace((stderr, "total in = %lu, total out = %lu\n", bstrm.total_in_lo32, bstrm.total_out_lo32)); #endif G.inptr = (uch *)bstrm.next_in; G.incnt = (G.inbuf + INBUFSIZ) - G.inptr; /* reset for other routines */ uzbunzip_cleanup_exit: err = BZ2_bzDecompressEnd(&bstrm); if (err != BZ_OK) Trace((stderr, "oops! (BZ2_bzDecompressEnd() err = %d)\n", err)); return retval; } /* end function UZbunzip2() */ #endif /* USE_BZIP2 */ Carla-2.4.2/data/windows/unzipfx-carla/fileio.c000066400000000000000000002707121420416754300213610ustar00rootroot00000000000000/* Copyright (c) 1990-2009 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2009-Jan-02 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- fileio.c This file contains routines for doing direct but relatively generic input/ output, file-related sorts of things, plus some miscellaneous stuff. Most of the stuff has to do with opening, closing, reading and/or writing files. Contains: open_input_file() open_outfile() (not: VMS, AOS/VS, CMSMVS, MACOS, TANDEM) undefer_input() defer_leftover_input() readbuf() readbyte() fillinbuf() seek_zipf() flush() (non-VMS) is_vms_varlen_txt() (non-VMS, VMS_TEXT_CONV only) disk_error() (non-VMS) UzpMessagePrnt() UzpMessageNull() (DLL only) UzpInput() UzpMorePause() UzpPassword() (non-WINDLL) handler() dos_to_unix_time() (non-VMS, non-VM/CMS, non-MVS) check_for_newer() (non-VMS, non-OS/2, non-VM/CMS, non-MVS) do_string() makeword() makelong() makeint64() fzofft() str2iso() (CRYPT && NEED_STR2ISO, only) str2oem() (CRYPT && NEED_STR2OEM, only) memset() (ZMEM only) memcpy() (ZMEM only) zstrnicmp() (NO_STRNICMP only) zstat() (REGULUS only) plastchar() (_MBCS only) uzmbclen() (_MBCS && NEED_UZMBCLEN, only) uzmbschr() (_MBCS && NEED_UZMBSCHR, only) uzmbsrchr() (_MBCS && NEED_UZMBSRCHR, only) fLoadFarString() (SMALL_MEM only) fLoadFarStringSmall() (SMALL_MEM only) fLoadFarStringSmall2() (SMALL_MEM only) zfstrcpy() (SMALL_MEM only) zfstrcmp() (SMALL_MEM && !(SFX || FUNZIP) only) ---------------------------------------------------------------------------*/ #define __FILEIO_C /* identifies this source module */ #define UNZIP_INTERNAL #include "unzip.h" #ifdef WINDLL # ifdef POCKET_UNZIP # include "wince/intrface.h" # else # include "windll/windll.h" # endif # include #endif #include "crc32.h" #include "crypt.h" #include "ttyio.h" /* setup of codepage conversion for decryption passwords */ #if CRYPT # if (defined(CRYP_USES_ISO2OEM) && !defined(IZ_ISO2OEM_ARRAY)) # define IZ_ISO2OEM_ARRAY /* pull in iso2oem[] table */ # endif # if (defined(CRYP_USES_OEM2ISO) && !defined(IZ_OEM2ISO_ARRAY)) # define IZ_OEM2ISO_ARRAY /* pull in oem2iso[] table */ # endif #endif #include "ebcdic.h" /* definition/initialization of ebcdic[] */ /* Note: Under Windows, the maximum size of the buffer that can be used with any of the *printf calls is 16,384, so win_fprintf was used to feed the fprintf clone no more than 16K chunks at a time. This should be valid for anything up to 64K (and probably beyond, assuming your buffers are that big). */ #ifdef WINDLL # define WriteError(buf,len,strm) \ (win_fprintf(pG, strm, (extent)len, (char far *)buf) != (int)(len)) #else /* !WINDLL */ # ifdef USE_FWRITE # define WriteError(buf,len,strm) \ ((extent)fwrite((char *)(buf),1,(extent)(len),strm) != (extent)(len)) # else # define WriteError(buf,len,strm) \ ((extent)write(fileno(strm),(char *)(buf),(extent)(len)) != (extent)(len)) # endif #endif /* ?WINDLL */ /* 2005-09-16 SMS. On VMS, when output is redirected to a file, as in a command like "PIPE UNZIP -v > X.OUT", the output file is created with VFC record format, and multiple calls to write() or fwrite() will produce multiple records, even when there's no newline terminator in the buffer. The result is unsightly output with spurious newlines. Using fprintf() instead of write() here, and disabling a fflush(stdout) in UzpMessagePrnt() below, together seem to solve the problem. According to the C RTL manual, "The write and decc$record_write functions always generate at least one record." Also, "[T]he fwrite function always generates at least records." So, "fwrite(buf, len, 1, strm)" is much better ("1" record) than "fwrite(buf, 1, len, strm)" ("len" (1-character) records, _really_ ugly), but neither is better than write(). Similarly, "The fflush function always generates a record if there is unwritten data in the buffer." Apparently fprintf() buffers the stuff somewhere, and puts out a record (only) when it sees a newline. */ #ifdef VMS # define WriteTxtErr(buf,len,strm) \ ((extent)fprintf(strm, "%.*s", len, buf) != (extent)(len)) #else # define WriteTxtErr(buf,len,strm) WriteError(buf,len,strm) #endif #if (defined(USE_DEFLATE64) && defined(__16BIT__)) static int partflush OF((__GPRO__ uch *rawbuf, ulg size, int unshrink)); #endif #ifdef VMS_TEXT_CONV static int is_vms_varlen_txt OF((__GPRO__ uch *ef_buf, unsigned ef_len)); #endif static int disk_error OF((__GPRO)); /****************************/ /* Strings used in fileio.c */ /****************************/ static ZCONST char Far CannotOpenZipfile[] = "error: cannot open zipfile [ %s ]\n %s\n"; #if (!defined(VMS) && !defined(AOS_VS) && !defined(CMS_MVS) && !defined(MACOS)) #if (!defined(TANDEM)) #if (defined(ATH_BEO_THS_UNX) || defined(DOS_FLX_NLM_OS2_W32)) static ZCONST char Far CannotDeleteOldFile[] = "error: cannot delete old %s\n %s\n"; #ifdef UNIXBACKUP static ZCONST char Far CannotRenameOldFile[] = "error: cannot rename old %s\n %s\n"; static ZCONST char Far BackupSuffix[] = "~"; #endif #endif /* ATH_BEO_THS_UNX || DOS_FLX_NLM_OS2_W32 */ #ifdef NOVELL_BUG_FAILSAFE static ZCONST char Far NovellBug[] = "error: %s: stat() says does not exist, but fopen() found anyway\n"; #endif static ZCONST char Far CannotCreateFile[] = "error: cannot create %s\n %s\n"; #endif /* !TANDEM */ #endif /* !VMS && !AOS_VS && !CMS_MVS && !MACOS */ static ZCONST char Far ReadError[] = "error: zipfile read error\n"; static ZCONST char Far FilenameTooLongTrunc[] = "warning: filename too long--truncating.\n"; #ifdef UNICODE_SUPPORT static ZCONST char Far UFilenameTooLongTrunc[] = "warning: Converted unicode filename too long--truncating.\n"; #endif static ZCONST char Far ExtraFieldTooLong[] = "warning: extra field too long (%d). Ignoring...\n"; #ifdef WINDLL static ZCONST char Far DiskFullQuery[] = "%s: write error (disk full?).\n"; #else static ZCONST char Far DiskFullQuery[] = "%s: write error (disk full?). Continue? (y/n/^C) "; static ZCONST char Far ZipfileCorrupt[] = "error: zipfile probably corrupt (%s)\n"; # ifdef SYMLINKS static ZCONST char Far FileIsSymLink[] = "%s exists and is a symbolic link%s.\n"; # endif # ifdef MORE static ZCONST char Far MorePrompt[] = "--More--(%lu)"; # endif static ZCONST char Far QuitPrompt[] = "--- Press `Q' to quit, or any other key to continue ---"; static ZCONST char Far HidePrompt[] = /* "\r \r"; */ "\r \r"; # if CRYPT # ifdef MACOS /* SPC: are names on MacOS REALLY so much longer than elsewhere ??? */ static ZCONST char Far PasswPrompt[] = "[%s]\n %s password: "; # else static ZCONST char Far PasswPrompt[] = "[%s] %s password: "; # endif static ZCONST char Far PasswPrompt2[] = "Enter password: "; static ZCONST char Far PasswRetry[] = "password incorrect--reenter: "; # endif /* CRYPT */ #endif /* !WINDLL */ /******************************/ /* Function open_input_file() */ /******************************/ int open_input_file(__G) /* return 1 if open failed */ __GDEF { /* * open the zipfile for reading and in BINARY mode to prevent cr/lf * translation, which would corrupt the bitstreams */ #ifdef VMS G.zipfd = open(G.zipfn, O_RDONLY, 0, OPNZIP_RMS_ARGS); #else /* !VMS */ #ifdef MACOS G.zipfd = open(G.zipfn, 0); #else /* !MACOS */ #ifdef CMS_MVS G.zipfd = vmmvs_open_infile(__G); #else /* !CMS_MVS */ #ifdef USE_STRM_INPUT G.zipfd = fopen(G.zipfn, FOPR); #else /* !USE_STRM_INPUT */ G.zipfd = open(G.zipfn, O_RDONLY | O_BINARY); #endif /* ?USE_STRM_INPUT */ #endif /* ?CMS_MVS */ #endif /* ?MACOS */ #endif /* ?VMS */ #ifdef USE_STRM_INPUT if (G.zipfd == NULL) #else /* if (G.zipfd < 0) */ /* no good for Windows CE port */ if (G.zipfd == -1) #endif { Info(slide, 0x401, ((char *)slide, LoadFarString(CannotOpenZipfile), G.zipfn, strerror(errno))); return 1; } return 0; } /* end function open_input_file() */ #if (!defined(VMS) && !defined(AOS_VS) && !defined(CMS_MVS) && !defined(MACOS)) #if (!defined(TANDEM)) /***************************/ /* Function open_outfile() */ /***************************/ int open_outfile(__G) /* return 1 if fail */ __GDEF { #ifdef DLL if (G.redirect_data) return (redirect_outfile(__G) == FALSE); #endif #ifdef QDOS QFilename(__G__ G.filename); #endif #if (defined(DOS_FLX_NLM_OS2_W32) || defined(ATH_BEO_THS_UNX)) #ifdef BORLAND_STAT_BUG /* Borland 5.0's stat() barfs if the filename has no extension and the * file doesn't exist. */ if (access(G.filename, 0) == -1) { FILE *tmp = fopen(G.filename, "wb+"); /* file doesn't exist, so create a dummy file to keep stat() from * failing (will be over-written anyway) */ fputc('0', tmp); /* just to have something in the file */ fclose(tmp); } #endif /* BORLAND_STAT_BUG */ #ifdef SYMLINKS if (SSTAT(G.filename, &G.statbuf) == 0 || lstat(G.filename, &G.statbuf) == 0) #else if (SSTAT(G.filename, &G.statbuf) == 0) #endif /* ?SYMLINKS */ { Trace((stderr, "open_outfile: stat(%s) returns 0: file exists\n", FnFilter1(G.filename))); #ifdef UNIXBACKUP if (uO.B_flag) { /* do backup */ char *tname; z_stat tmpstat; int blen, flen, tlen; blen = strlen(BackupSuffix); flen = strlen(G.filename); tlen = flen + blen + 6; /* includes space for 5 digits */ if (tlen >= FILNAMSIZ) { /* in case name is too long, truncate */ tname = (char *)malloc(FILNAMSIZ); if (tname == NULL) return 1; /* in case we run out of space */ tlen = FILNAMSIZ - 1 - blen; strcpy(tname, G.filename); /* make backup name */ tname[tlen] = '\0'; if (flen > tlen) flen = tlen; tlen = FILNAMSIZ; } else { tname = (char *)malloc(tlen); if (tname == NULL) return 1; /* in case we run out of space */ strcpy(tname, G.filename); /* make backup name */ } strcpy(tname+flen, BackupSuffix); if (IS_OVERWRT_ALL) { /* If there is a previous backup file, delete it, * otherwise the following rename operation may fail. */ if (SSTAT(tname, &tmpstat) == 0) unlink(tname); } else { /* Check if backupname exists, and, if it's true, try * appending numbers of up to 5 digits (or the maximum * "unsigned int" number on 16-bit systems) to the * BackupSuffix, until an unused name is found. */ unsigned maxtail, i; char *numtail = tname + flen + blen; /* take account of the "unsigned" limit on 16-bit systems: */ maxtail = ( ((~0) >= 99999L) ? 99999 : (~0) ); switch (tlen - flen - blen - 1) { case 4: maxtail = 9999; break; case 3: maxtail = 999; break; case 2: maxtail = 99; break; case 1: maxtail = 9; break; case 0: maxtail = 0; break; } /* while filename exists */ for (i = 0; (i < maxtail) && (SSTAT(tname, &tmpstat) == 0);) sprintf(numtail,"%u", ++i); } if (rename(G.filename, tname) != 0) { /* move file */ Info(slide, 0x401, ((char *)slide, LoadFarString(CannotRenameOldFile), FnFilter1(G.filename), strerror(errno))); free(tname); return 1; } Trace((stderr, "open_outfile: %s now renamed into %s\n", FnFilter1(G.filename), FnFilter2(tname))); free(tname); } else #endif /* UNIXBACKUP */ { #ifdef DOS_FLX_OS2_W32 if (!(G.statbuf.st_mode & S_IWRITE)) { Trace((stderr, "open_outfile: existing file %s is read-only\n", FnFilter1(G.filename))); chmod(G.filename, S_IREAD | S_IWRITE); Trace((stderr, "open_outfile: %s now writable\n", FnFilter1(G.filename))); } #endif /* DOS_FLX_OS2_W32 */ #ifdef NLM /* Give the file read/write permission (non-POSIX shortcut) */ chmod(G.filename, 0); #endif /* NLM */ if (unlink(G.filename) != 0) { Info(slide, 0x401, ((char *)slide, LoadFarString(CannotDeleteOldFile), FnFilter1(G.filename), strerror(errno))); return 1; } Trace((stderr, "open_outfile: %s now deleted\n", FnFilter1(G.filename))); } } #endif /* DOS_FLX_NLM_OS2_W32 || ATH_BEO_THS_UNX */ #ifdef RISCOS if (SWI_OS_File_7(G.filename,0xDEADDEAD,0xDEADDEAD,G.lrec.ucsize)!=NULL) { Info(slide, 1, ((char *)slide, LoadFarString(CannotCreateFile), FnFilter1(G.filename), strerror(errno))); return 1; } #endif /* RISCOS */ #ifdef TOPS20 char *tfilnam; if ((tfilnam = (char *)malloc(2*strlen(G.filename)+1)) == (char *)NULL) return 1; strcpy(tfilnam, G.filename); upper(tfilnam); enquote(tfilnam); if ((G.outfile = fopen(tfilnam, FOPW)) == (FILE *)NULL) { Info(slide, 1, ((char *)slide, LoadFarString(CannotCreateFile), tfilnam, strerror(errno))); free(tfilnam); return 1; } free(tfilnam); #else /* !TOPS20 */ #ifdef MTS if (uO.aflag) G.outfile = zfopen(G.filename, FOPWT); else G.outfile = zfopen(G.filename, FOPW); if (G.outfile == (FILE *)NULL) { Info(slide, 1, ((char *)slide, LoadFarString(CannotCreateFile), FnFilter1(G.filename), strerror(errno))); return 1; } #else /* !MTS */ #ifdef DEBUG Info(slide, 1, ((char *)slide, "open_outfile: doing fopen(%s) for reading\n", FnFilter1(G.filename))); if ((G.outfile = zfopen(G.filename, FOPR)) == (FILE *)NULL) Info(slide, 1, ((char *)slide, "open_outfile: fopen(%s) for reading failed: does not exist\n", FnFilter1(G.filename))); else { Info(slide, 1, ((char *)slide, "open_outfile: fopen(%s) for reading succeeded: file exists\n", FnFilter1(G.filename))); fclose(G.outfile); } #endif /* DEBUG */ #ifdef NOVELL_BUG_FAILSAFE if (G.dne && ((G.outfile = zfopen(G.filename, FOPR)) != (FILE *)NULL)) { Info(slide, 0x401, ((char *)slide, LoadFarString(NovellBug), FnFilter1(G.filename))); fclose(G.outfile); return 1; /* with "./" fix in checkdir(), should never reach here */ } #endif /* NOVELL_BUG_FAILSAFE */ Trace((stderr, "open_outfile: doing fopen(%s) for writing\n", FnFilter1(G.filename))); { #if defined(ATH_BE_UNX) || defined(AOS_VS) || defined(QDOS) || defined(TANDEM) mode_t umask_sav = umask(0077); #endif #if defined(SYMLINKS) || defined(QLZIP) /* These features require the ability to re-read extracted data from the output files. Output files are created with Read&Write access. */ G.outfile = zfopen(G.filename, FOPWR); #else G.outfile = zfopen(G.filename, FOPW); #endif #if defined(ATH_BE_UNX) || defined(AOS_VS) || defined(QDOS) || defined(TANDEM) umask(umask_sav); #endif } if (G.outfile == (FILE *)NULL) { Info(slide, 0x401, ((char *)slide, LoadFarString(CannotCreateFile), FnFilter1(G.filename), strerror(errno))); return 1; } Trace((stderr, "open_outfile: fopen(%s) for writing succeeded\n", FnFilter1(G.filename))); #endif /* !MTS */ #endif /* !TOPS20 */ #ifdef USE_FWRITE #ifdef DOS_NLM_OS2_W32 /* 16-bit MSC: buffer size must be strictly LESS than 32K (WSIZE): bogus */ setbuf(G.outfile, (char *)NULL); /* make output unbuffered */ #else /* !DOS_NLM_OS2_W32 */ #ifndef RISCOS #ifdef _IOFBF /* make output fully buffered (works just about like write()) */ setvbuf(G.outfile, (char *)slide, _IOFBF, WSIZE); #else setbuf(G.outfile, (char *)slide); #endif #endif /* !RISCOS */ #endif /* ?DOS_NLM_OS2_W32 */ #endif /* USE_FWRITE */ #ifdef OS2_W32 /* preallocate the final file size to prevent file fragmentation */ SetFileSize(G.outfile, G.lrec.ucsize); #endif return 0; } /* end function open_outfile() */ #endif /* !TANDEM */ #endif /* !VMS && !AOS_VS && !CMS_MVS && !MACOS */ /* * These functions allow NEXTBYTE to function without needing two bounds * checks. Call defer_leftover_input() if you ever have filled G.inbuf * by some means other than readbyte(), and you then want to start using * NEXTBYTE. When going back to processing bytes without NEXTBYTE, call * undefer_input(). For example, extract_or_test_member brackets its * central section that does the decompression with these two functions. * If you need to check the number of bytes remaining in the current * file while using NEXTBYTE, check (G.csize + G.incnt), not G.csize. */ /****************************/ /* function undefer_input() */ /****************************/ void undefer_input(__G) __GDEF { if (G.incnt > 0) G.csize += G.incnt; if (G.incnt_leftover > 0) { /* We know that "(G.csize < MAXINT)" so we can cast G.csize to int: * This condition was checked when G.incnt_leftover was set > 0 in * defer_leftover_input(), and it is NOT allowed to touch G.csize * before calling undefer_input() when (G.incnt_leftover > 0) * (single exception: see read_byte()'s "G.csize <= 0" handling) !! */ G.incnt = G.incnt_leftover + (int)G.csize; G.inptr = G.inptr_leftover - (int)G.csize; G.incnt_leftover = 0; } else if (G.incnt < 0) G.incnt = 0; } /* end function undefer_input() */ /***********************************/ /* function defer_leftover_input() */ /***********************************/ void defer_leftover_input(__G) __GDEF { if ((zoff_t)G.incnt > G.csize) { /* (G.csize < MAXINT), we can safely cast it to int !! */ if (G.csize < 0L) G.csize = 0L; G.inptr_leftover = G.inptr + (int)G.csize; G.incnt_leftover = G.incnt - (int)G.csize; G.incnt = (int)G.csize; } else G.incnt_leftover = 0; G.csize -= G.incnt; } /* end function defer_leftover_input() */ /**********************/ /* Function readbuf() */ /**********************/ unsigned readbuf(__G__ buf, size) /* return number of bytes read into buf */ __GDEF char *buf; register unsigned size; { register unsigned count; unsigned n; n = size; while (size) { if (G.incnt <= 0) { if ((G.incnt = read(G.zipfd, (char *)G.inbuf, INBUFSIZ)) == 0) return (n-size); else if (G.incnt < 0) { /* another hack, but no real harm copying same thing twice */ (*G.message)((zvoid *)&G, (uch *)LoadFarString(ReadError), /* CANNOT use slide */ (ulg)strlen(LoadFarString(ReadError)), 0x401); return 0; /* discarding some data; better than lock-up */ } /* buffer ALWAYS starts on a block boundary: */ G.cur_zipfile_bufstart += INBUFSIZ; G.inptr = G.inbuf; } count = MIN(size, (unsigned)G.incnt); memcpy(buf, G.inptr, count); buf += count; G.inptr += count; G.incnt -= count; size -= count; } return n; } /* end function readbuf() */ /***********************/ /* Function readbyte() */ /***********************/ int readbyte(__G) /* refill inbuf and return a byte if available, else EOF */ __GDEF { if (G.mem_mode) return EOF; if (G.csize <= 0) { G.csize--; /* for tests done after exploding */ G.incnt = 0; return EOF; } if (G.incnt <= 0) { if ((G.incnt = read(G.zipfd, (char *)G.inbuf, INBUFSIZ)) == 0) { return EOF; } else if (G.incnt < 0) { /* "fail" (abort, retry, ...) returns this */ /* another hack, but no real harm copying same thing twice */ (*G.message)((zvoid *)&G, (uch *)LoadFarString(ReadError), (ulg)strlen(LoadFarString(ReadError)), 0x401); echon(); #ifdef WINDLL longjmp(dll_error_return, 1); #else DESTROYGLOBALS(); EXIT(PK_BADERR); /* totally bailing; better than lock-up */ #endif } G.cur_zipfile_bufstart += INBUFSIZ; /* always starts on block bndry */ G.inptr = G.inbuf; defer_leftover_input(__G); /* decrements G.csize */ } #if CRYPT if (G.pInfo->encrypted) { uch *p; int n; /* This was previously set to decrypt one byte beyond G.csize, when * incnt reached that far. GRR said, "but it's required: why?" This * was a bug in fillinbuf() -- was it also a bug here? */ for (n = G.incnt, p = G.inptr; n--; p++) zdecode(*p); } #endif /* CRYPT */ --G.incnt; return *G.inptr++; } /* end function readbyte() */ #if defined(USE_ZLIB) || defined(USE_BZIP2) /************************/ /* Function fillinbuf() */ /************************/ int fillinbuf(__G) /* like readbyte() except returns number of bytes in inbuf */ __GDEF { if (G.mem_mode || (G.incnt = read(G.zipfd, (char *)G.inbuf, INBUFSIZ)) <= 0) return 0; G.cur_zipfile_bufstart += INBUFSIZ; /* always starts on a block boundary */ G.inptr = G.inbuf; defer_leftover_input(__G); /* decrements G.csize */ #if CRYPT if (G.pInfo->encrypted) { uch *p; int n; for (n = G.incnt, p = G.inptr; n--; p++) zdecode(*p); } #endif /* CRYPT */ return G.incnt; } /* end function fillinbuf() */ #endif /* USE_ZLIB || USE_BZIP2 */ /************************/ /* Function seek_zipf() */ /************************/ int seek_zipf(__G__ abs_offset) __GDEF zoff_t abs_offset; { /* * Seek to the block boundary of the block which includes abs_offset, * then read block into input buffer and set pointers appropriately. * If block is already in the buffer, just set the pointers. This function * is used by do_seekable (process.c), extract_or_test_entrylist (extract.c) * and do_string (fileio.c). Also, a slightly modified version is embedded * within extract_or_test_entrylist (extract.c). readbyte() and readbuf() * (fileio.c) are compatible. NOTE THAT abs_offset is intended to be the * "proper offset" (i.e., if there were no extra bytes prepended); * cur_zipfile_bufstart contains the corrected offset. * * Since seek_zipf() is never used during decompression, it is safe to * use the slide[] buffer for the error message. * * returns PK error codes: * PK_BADERR if effective offset in zipfile is negative * PK_EOF if seeking past end of zipfile * PK_OK when seek was successful */ zoff_t request = abs_offset + G.extra_bytes; zoff_t inbuf_offset = request % INBUFSIZ; zoff_t bufstart = request - inbuf_offset; if (request < 0) { Info(slide, 1, ((char *)slide, LoadFarStringSmall(SeekMsg), G.zipfn, LoadFarString(ReportMsg))); return(PK_BADERR); } else if (bufstart != G.cur_zipfile_bufstart) { Trace((stderr, "fpos_zip: abs_offset = %s, G.extra_bytes = %s\n", FmZofft(abs_offset, NULL, NULL), FmZofft(G.extra_bytes, NULL, NULL))); #ifdef USE_STRM_INPUT zfseeko(G.zipfd, bufstart, SEEK_SET); G.cur_zipfile_bufstart = zftello(G.zipfd); #else /* !USE_STRM_INPUT */ G.cur_zipfile_bufstart = zlseek(G.zipfd, bufstart, SEEK_SET); #endif /* ?USE_STRM_INPUT */ Trace((stderr, " request = %s, (abs+extra) = %s, inbuf_offset = %s\n", FmZofft(request, NULL, NULL), FmZofft((abs_offset+G.extra_bytes), NULL, NULL), FmZofft(inbuf_offset, NULL, NULL))); Trace((stderr, " bufstart = %s, cur_zipfile_bufstart = %s\n", FmZofft(bufstart, NULL, NULL), FmZofft(G.cur_zipfile_bufstart, NULL, NULL))); if ((G.incnt = read(G.zipfd, (char *)G.inbuf, INBUFSIZ)) <= 0) return(PK_EOF); G.incnt -= (int)inbuf_offset; G.inptr = G.inbuf + (int)inbuf_offset; } else { G.incnt += (G.inptr-G.inbuf) - (int)inbuf_offset; G.inptr = G.inbuf + (int)inbuf_offset; } return(PK_OK); } /* end function seek_zipf() */ #ifndef VMS /* for VMS use code in vms.c */ /********************/ /* Function flush() */ /* returns PK error codes: */ /********************/ /* if tflag => always 0; PK_DISK if write error */ int flush(__G__ rawbuf, size, unshrink) __GDEF uch *rawbuf; ulg size; int unshrink; #if (defined(USE_DEFLATE64) && defined(__16BIT__)) { int ret; /* On 16-bit systems (MSDOS, OS/2 1.x), the standard C library functions * cannot handle writes of 64k blocks at once. For these systems, the * blocks to flush are split into pieces of 32k or less. */ while (size > 0x8000L) { ret = partflush(__G__ rawbuf, 0x8000L, unshrink); if (ret != PK_OK) return ret; size -= 0x8000L; rawbuf += (extent)0x8000; } return partflush(__G__ rawbuf, size, unshrink); } /* end function flush() */ /************************/ /* Function partflush() */ /* returns PK error codes: */ /************************/ /* if tflag => always 0; PK_DISK if write error */ static int partflush(__G__ rawbuf, size, unshrink) __GDEF uch *rawbuf; /* cannot be ZCONST, gets passed to (*G.message)() */ ulg size; int unshrink; #endif /* USE_DEFLATE64 && __16BIT__ */ { register uch *p; register uch *q; uch *transbuf; #if (defined(SMALL_MEM) || defined(MED_MEM) || defined(VMS_TEXT_CONV)) ulg transbufsiz; #endif /* static int didCRlast = FALSE; moved to globals.h */ /*--------------------------------------------------------------------------- Compute the CRC first; if testing or if disk is full, that's it. ---------------------------------------------------------------------------*/ G.crc32val = crc32(G.crc32val, rawbuf, (extent)size); #ifdef DLL if ((G.statreportcb != NULL) && (*G.statreportcb)(__G__ UZ_ST_IN_PROGRESS, G.zipfn, G.filename, NULL)) return IZ_CTRLC; /* cancel operation by user request */ #endif if (uO.tflag || size == 0L) /* testing or nothing to write: all done */ return PK_OK; if (G.disk_full) return PK_DISK; /* disk already full: ignore rest of file */ /*--------------------------------------------------------------------------- Write the bytes rawbuf[0..size-1] to the output device, first converting end-of-lines and ASCII/EBCDIC as needed. If SMALL_MEM or MED_MEM are NOT defined, outbuf is assumed to be at least as large as rawbuf and is not necessarily checked for overflow. ---------------------------------------------------------------------------*/ if (!G.pInfo->textmode) { /* write raw binary data */ /* GRR: note that for standard MS-DOS compilers, size argument to * fwrite() can never be more than 65534, so WriteError macro will * have to be rewritten if size can ever be that large. For now, * never more than 32K. Also note that write() returns an int, which * doesn't necessarily limit size to 32767 bytes if write() is used * on 16-bit systems but does make it more of a pain; however, because * at least MSC 5.1 has a lousy implementation of fwrite() (as does * DEC Ultrix cc), write() is used anyway. */ #ifdef DLL if (G.redirect_data) { #ifdef NO_SLIDE_REDIR if (writeToMemory(__G__ rawbuf, (extent)size)) return PK_ERR; #else writeToMemory(__G__ rawbuf, (extent)size); #endif } else #endif if (!uO.cflag && WriteError(rawbuf, size, G.outfile)) return disk_error(__G); else if (uO.cflag && (*G.message)((zvoid *)&G, rawbuf, size, 0)) return PK_OK; } else { /* textmode: aflag is true */ if (unshrink) { /* rawbuf = outbuf */ transbuf = G.outbuf2; #if (defined(SMALL_MEM) || defined(MED_MEM) || defined(VMS_TEXT_CONV)) transbufsiz = TRANSBUFSIZ; #endif } else { /* rawbuf = slide */ transbuf = G.outbuf; #if (defined(SMALL_MEM) || defined(MED_MEM) || defined(VMS_TEXT_CONV)) transbufsiz = OUTBUFSIZ; Trace((stderr, "\ntransbufsiz = OUTBUFSIZ = %u\n", (unsigned)OUTBUFSIZ)); #endif } if (G.newfile) { #ifdef VMS_TEXT_CONV if (G.pInfo->hostnum == VMS_ && G.extra_field && is_vms_varlen_txt(__G__ G.extra_field, G.lrec.extra_field_length)) G.VMS_line_state = 0; /* 0: ready to read line length */ else G.VMS_line_state = -1; /* -1: don't treat as VMS text */ #endif G.didCRlast = FALSE; /* no previous buffers written */ G.newfile = FALSE; } #ifdef VMS_TEXT_CONV if (G.VMS_line_state >= 0) { p = rawbuf; q = transbuf; while ((extent)(p-rawbuf) < (extent)size) { switch (G.VMS_line_state) { /* 0: ready to read line length */ case 0: G.VMS_line_length = 0; if ((extent)(p-rawbuf) == (extent)size-1) { /* last char */ G.VMS_line_length = (unsigned)(*p++); G.VMS_line_state = 1; } else { G.VMS_line_length = makeword(p); p += 2; G.VMS_line_state = 2; } G.VMS_line_pad = ((G.VMS_line_length & 1) != 0); /* odd */ break; /* 1: read one byte of length, need second */ case 1: G.VMS_line_length += ((unsigned)(*p++) << 8); G.VMS_line_state = 2; break; /* 2: ready to read VMS_line_length chars */ case 2: { extent remaining = (extent)size+(rawbuf-p); extent outroom; if (G.VMS_line_length < remaining) { remaining = G.VMS_line_length; G.VMS_line_state = 3; } outroom = transbuf+(extent)transbufsiz-q; if (remaining >= outroom) { remaining -= outroom; for (;outroom > 0; p++, outroom--) *q++ = native(*p); #ifdef DLL if (G.redirect_data) { if (writeToMemory(__G__ transbuf, (extent)(q-transbuf))) return PK_ERR; } else #endif if (!uO.cflag && WriteError(transbuf, (extent)(q-transbuf), G.outfile)) return disk_error(__G); else if (uO.cflag && (*G.message)((zvoid *)&G, transbuf, (ulg)(q-transbuf), 0)) return PK_OK; q = transbuf; /* fall through to normal case */ } G.VMS_line_length -= remaining; for (;remaining > 0; p++, remaining--) *q++ = native(*p); } break; /* 3: ready to PutNativeEOL */ case 3: if (q > transbuf+(extent)transbufsiz-lenEOL) { #ifdef DLL if (G.redirect_data) { if (writeToMemory(__G__ transbuf, (extent)(q-transbuf))) return PK_ERR; } else #endif if (!uO.cflag && WriteError(transbuf, (extent)(q-transbuf), G.outfile)) return disk_error(__G); else if (uO.cflag && (*G.message)((zvoid *)&G, transbuf, (ulg)(q-transbuf), 0)) return PK_OK; q = transbuf; } PutNativeEOL G.VMS_line_state = G.VMS_line_pad ? 4 : 0; break; /* 4: ready to read pad byte */ case 4: ++p; G.VMS_line_state = 0; break; } } /* end while */ } else #endif /* VMS_TEXT_CONV */ /*----------------------------------------------------------------------- Algorithm: CR/LF => native; lone CR => native; lone LF => native. This routine is only for non-raw-VMS, non-raw-VM/CMS files (i.e., stream-oriented files, not record-oriented). -----------------------------------------------------------------------*/ /* else not VMS text */ { p = rawbuf; if (*p == LF && G.didCRlast) ++p; G.didCRlast = FALSE; for (q = transbuf; (extent)(p-rawbuf) < (extent)size; ++p) { if (*p == CR) { /* lone CR or CR/LF: treat as EOL */ PutNativeEOL if ((extent)(p-rawbuf) == (extent)size-1) /* last char in buffer */ G.didCRlast = TRUE; else if (p[1] == LF) /* get rid of accompanying LF */ ++p; } else if (*p == LF) /* lone LF */ PutNativeEOL else #ifndef DOS_FLX_OS2_W32 if (*p != CTRLZ) /* lose all ^Z's */ #endif *q++ = native(*p); #if (defined(SMALL_MEM) || defined(MED_MEM)) # if (lenEOL == 1) /* don't check unshrink: both buffers small but equal */ if (!unshrink) # endif /* check for danger of buffer overflow and flush */ if (q > transbuf+(extent)transbufsiz-lenEOL) { Trace((stderr, "p - rawbuf = %u q-transbuf = %u size = %lu\n", (unsigned)(p-rawbuf), (unsigned)(q-transbuf), size)); if (!uO.cflag && WriteError(transbuf, (extent)(q-transbuf), G.outfile)) return disk_error(__G); else if (uO.cflag && (*G.message)((zvoid *)&G, transbuf, (ulg)(q-transbuf), 0)) return PK_OK; q = transbuf; continue; } #endif /* SMALL_MEM || MED_MEM */ } } /*----------------------------------------------------------------------- Done translating: write whatever we've got to file (or screen). -----------------------------------------------------------------------*/ Trace((stderr, "p - rawbuf = %u q-transbuf = %u size = %lu\n", (unsigned)(p-rawbuf), (unsigned)(q-transbuf), size)); if (q > transbuf) { #ifdef DLL if (G.redirect_data) { if (writeToMemory(__G__ transbuf, (extent)(q-transbuf))) return PK_ERR; } else #endif if (!uO.cflag && WriteError(transbuf, (extent)(q-transbuf), G.outfile)) return disk_error(__G); else if (uO.cflag && (*G.message)((zvoid *)&G, transbuf, (ulg)(q-transbuf), 0)) return PK_OK; } } return PK_OK; } /* end function flush() [resp. partflush() for 16-bit Deflate64 support] */ #ifdef VMS_TEXT_CONV /********************************/ /* Function is_vms_varlen_txt() */ /********************************/ static int is_vms_varlen_txt(__G__ ef_buf, ef_len) __GDEF uch *ef_buf; /* buffer containing extra field */ unsigned ef_len; /* total length of extra field */ { unsigned eb_id; unsigned eb_len; uch *eb_data; unsigned eb_datlen; #define VMSREC_C_UNDEF 0 #define VMSREC_C_VAR 2 uch vms_rectype = VMSREC_C_UNDEF; /* uch vms_fileorg = 0; */ /* currently, fileorg is not used... */ #define VMSPK_ITEMID 0 #define VMSPK_ITEMLEN 2 #define VMSPK_ITEMHEADSZ 4 #define VMSATR_C_RECATTR 4 #define VMS_FABSIG 0x42414656 /* "VFAB" */ /* offsets of interesting fields in VMS fabdef structure */ #define VMSFAB_B_RFM 31 /* record format byte */ #define VMSFAB_B_ORG 29 /* file organization byte */ if (ef_len == 0 || ef_buf == NULL) return FALSE; while (ef_len >= EB_HEADSIZE) { eb_id = makeword(EB_ID + ef_buf); eb_len = makeword(EB_LEN + ef_buf); if (eb_len > (ef_len - EB_HEADSIZE)) { /* discovered some extra field inconsistency! */ Trace((stderr, "is_vms_varlen_txt: block length %u > rest ef_size %u\n", eb_len, ef_len - EB_HEADSIZE)); break; } switch (eb_id) { case EF_PKVMS: /* The PKVMS e.f. raw data part consists of: * a) 4 bytes CRC checksum * b) list of uncompressed variable-length data items * Each data item is introduced by a fixed header * - 2 bytes data type ID * - 2 bytes of data * - bytes of actual attribute data */ /* get pointer to start of data and its total length */ eb_data = ef_buf+(EB_HEADSIZE+4); eb_datlen = eb_len-4; /* test the CRC checksum */ if (makelong(ef_buf+EB_HEADSIZE) != crc32(CRCVAL_INITIAL, eb_data, (extent)eb_datlen)) { Info(slide, 1, ((char *)slide, "[Warning: CRC error, discarding PKWARE extra field]\n")); /* skip over the data analysis code */ break; } /* scan through the attribute data items */ while (eb_datlen > 4) { unsigned fldsize = makeword(&eb_data[VMSPK_ITEMLEN]); /* check the item type word */ switch (makeword(&eb_data[VMSPK_ITEMID])) { case VMSATR_C_RECATTR: /* we have found the (currently only) interesting * data item */ if (fldsize >= 1) { vms_rectype = eb_data[VMSPK_ITEMHEADSZ] & 15; /* vms_fileorg = eb_data[VMSPK_ITEMHEADSZ] >> 4; */ } break; default: break; } /* skip to next data item */ eb_datlen -= fldsize + VMSPK_ITEMHEADSZ; eb_data += fldsize + VMSPK_ITEMHEADSZ; } break; case EF_IZVMS: if (makelong(ef_buf+EB_HEADSIZE) == VMS_FABSIG) { if ((eb_data = extract_izvms_block(__G__ ef_buf+EB_HEADSIZE, eb_len, &eb_datlen, NULL, 0)) != NULL) { if (eb_datlen >= VMSFAB_B_RFM+1) { vms_rectype = eb_data[VMSFAB_B_RFM] & 15; /* vms_fileorg = eb_data[VMSFAB_B_ORG] >> 4; */ } free(eb_data); } } break; default: break; } /* Skip this extra field block */ ef_buf += (eb_len + EB_HEADSIZE); ef_len -= (eb_len + EB_HEADSIZE); } return (vms_rectype == VMSREC_C_VAR); } /* end function is_vms_varlen_txtfile() */ #endif /* VMS_TEXT_CONV */ /*************************/ /* Function disk_error() */ /*************************/ static int disk_error(__G) __GDEF { /* OK to use slide[] here because this file is finished regardless */ Info(slide, 0x4a1, ((char *)slide, LoadFarString(DiskFullQuery), FnFilter1(G.filename))); #ifndef WINDLL fgets(G.answerbuf, sizeof(G.answerbuf), stdin); if (*G.answerbuf == 'y') /* stop writing to this file */ G.disk_full = 1; /* (outfile bad?), but new OK */ else #endif G.disk_full = 2; /* no: exit program */ return PK_DISK; } /* end function disk_error() */ #endif /* !VMS */ /*****************************/ /* Function UzpMessagePrnt() */ /*****************************/ int UZ_EXP UzpMessagePrnt(pG, buf, size, flag) zvoid *pG; /* globals struct: always passed */ uch *buf; /* preformatted string to be printed */ ulg size; /* length of string (may include nulls) */ int flag; /* flag bits */ { /* IMPORTANT NOTE: * The name of the first parameter of UzpMessagePrnt(), which passes * the "Uz_Globs" address, >>> MUST <<< be identical to the string * expansion of the __G__ macro in the REENTRANT case (see globals.h). * This name identity is mandatory for the LoadFarString() macro * (in the SMALL_MEM case) !!! */ int error; uch *q=buf, *endbuf=buf+(unsigned)size; #ifdef MORE uch *p=buf; #if (defined(SCREENWIDTH) && defined(SCREENLWRAP)) int islinefeed = FALSE; #endif #endif FILE *outfp; /*--------------------------------------------------------------------------- These tests are here to allow fine-tuning of UnZip's output messages, but none of them will do anything without setting the appropriate bit in the flag argument of every Info() statement which is to be turned *off*. That is, all messages are currently turned on for all ports. To turn off *all* messages, use the UzpMessageNull() function instead of this one. ---------------------------------------------------------------------------*/ #if (defined(OS2) && defined(DLL)) if (MSG_NO_DLL2(flag)) /* if OS/2 DLL bit is set, do NOT print this msg */ return 0; #endif #ifdef WINDLL if (MSG_NO_WDLL(flag)) return 0; #endif #ifdef WINDLL if (MSG_NO_WGUI(flag)) return 0; #endif /* #ifdef ACORN_GUI if (MSG_NO_AGUI(flag)) return 0; #endif */ #ifdef DLL /* don't display message if data is redirected */ if (((Uz_Globs *)pG)->redirect_data && !((Uz_Globs *)pG)->redirect_text) return 0; #endif if (MSG_STDERR(flag) && !((Uz_Globs *)pG)->UzO.tflag) outfp = (FILE *)stderr; else outfp = (FILE *)stdout; #ifdef QUERY_TRNEWLN /* some systems require termination of query prompts with '\n' to force * immediate display */ if (MSG_MNEWLN(flag)) { /* assumes writable buffer (e.g., slide[]) */ *endbuf++ = '\n'; /* with room for one more char at end of buf */ ++size; /* (safe assumption: only used for four */ } /* short queries in extract.c and fileio.c) */ #endif if (MSG_TNEWLN(flag)) { /* again assumes writable buffer: fragile... */ if ((!size && !((Uz_Globs *)pG)->sol) || (size && (endbuf[-1] != '\n'))) { *endbuf++ = '\n'; ++size; } } #ifdef MORE # ifdef SCREENSIZE /* room for --More-- and one line of overlap: */ # if (defined(SCREENWIDTH) && defined(SCREENLWRAP)) SCREENSIZE(&((Uz_Globs *)pG)->height, &((Uz_Globs *)pG)->width); # else SCREENSIZE(&((Uz_Globs *)pG)->height, (int *)NULL); # endif ((Uz_Globs *)pG)->height -= 2; # else /* room for --More-- and one line of overlap: */ ((Uz_Globs *)pG)->height = SCREENLINES - 2; # if (defined(SCREENWIDTH) && defined(SCREENLWRAP)) ((Uz_Globs *)pG)->width = SCREENWIDTH; # endif # endif #endif /* MORE */ if (MSG_LNEWLN(flag) && !((Uz_Globs *)pG)->sol) { /* not at start of line: want newline */ #ifdef OS2DLL if (!((Uz_Globs *)pG)->redirect_text) { #endif putc('\n', outfp); fflush(outfp); #ifdef MORE if (((Uz_Globs *)pG)->M_flag) { #if (defined(SCREENWIDTH) && defined(SCREENLWRAP)) ((Uz_Globs *)pG)->chars = 0; #endif ++((Uz_Globs *)pG)->numlines; ++((Uz_Globs *)pG)->lines; if (((Uz_Globs *)pG)->lines >= ((Uz_Globs *)pG)->height) (*((Uz_Globs *)pG)->mpause)((zvoid *)pG, LoadFarString(MorePrompt), 1); } #endif /* MORE */ if (MSG_STDERR(flag) && ((Uz_Globs *)pG)->UzO.tflag && !isatty(1) && isatty(2)) { /* error output from testing redirected: also send to stderr */ putc('\n', stderr); fflush(stderr); } #ifdef OS2DLL } else REDIRECTC('\n'); #endif ((Uz_Globs *)pG)->sol = TRUE; } /* put zipfile name, filename and/or error/warning keywords here */ #ifdef MORE if (((Uz_Globs *)pG)->M_flag #ifdef OS2DLL && !((Uz_Globs *)pG)->redirect_text #endif ) { while (p < endbuf) { if (*p == '\n') { #if (defined(SCREENWIDTH) && defined(SCREENLWRAP)) islinefeed = TRUE; } else if (SCREENLWRAP) { if (*p == '\r') { ((Uz_Globs *)pG)->chars = 0; } else { # ifdef TABSIZE if (*p == '\t') ((Uz_Globs *)pG)->chars += (TABSIZE - (((Uz_Globs *)pG)->chars % TABSIZE)); else # endif ++((Uz_Globs *)pG)->chars; if (((Uz_Globs *)pG)->chars >= ((Uz_Globs *)pG)->width) islinefeed = TRUE; } } if (islinefeed) { islinefeed = FALSE; ((Uz_Globs *)pG)->chars = 0; #endif /* (SCREENWIDTH && SCREEN_LWRAP) */ ++((Uz_Globs *)pG)->numlines; ++((Uz_Globs *)pG)->lines; if (((Uz_Globs *)pG)->lines >= ((Uz_Globs *)pG)->height) { if ((error = WriteTxtErr(q, p-q+1, outfp)) != 0) return error; fflush(outfp); ((Uz_Globs *)pG)->sol = TRUE; q = p + 1; (*((Uz_Globs *)pG)->mpause)((zvoid *)pG, LoadFarString(MorePrompt), 1); } } INCSTR(p); } /* end while */ size = (ulg)(p - q); /* remaining text */ } #endif /* MORE */ if (size) { #ifdef OS2DLL if (!((Uz_Globs *)pG)->redirect_text) { #endif if ((error = WriteTxtErr(q, size, outfp)) != 0) return error; #ifndef VMS /* 2005-09-16 SMS. See note at "WriteTxtErr()", above. */ fflush(outfp); #endif if (MSG_STDERR(flag) && ((Uz_Globs *)pG)->UzO.tflag && !isatty(1) && isatty(2)) { /* error output from testing redirected: also send to stderr */ if ((error = WriteTxtErr(q, size, stderr)) != 0) return error; fflush(stderr); } #ifdef OS2DLL } else { /* GRR: this is ugly: hide with macro */ if ((error = REDIRECTPRINT(q, size)) != 0) return error; } #endif /* OS2DLL */ ((Uz_Globs *)pG)->sol = (endbuf[-1] == '\n'); } return 0; } /* end function UzpMessagePrnt() */ #ifdef DLL /*****************************/ /* Function UzpMessageNull() */ /* convenience routine for no output at all */ /*****************************/ int UZ_EXP UzpMessageNull(pG, buf, size, flag) zvoid *pG; /* globals struct: always passed */ uch *buf; /* preformatted string to be printed */ ulg size; /* length of string (may include nulls) */ int flag; /* flag bits */ { return 0; } /* end function UzpMessageNull() */ #endif /* DLL */ /***********************/ /* Function UzpInput() */ /* GRR: this is a placeholder for now */ /***********************/ int UZ_EXP UzpInput(pG, buf, size, flag) zvoid *pG; /* globals struct: always passed */ uch *buf; /* preformatted string to be printed */ int *size; /* (address of) size of buf and of returned string */ int flag; /* flag bits (bit 0: no echo) */ { /* tell picky compilers to shut up about "unused variable" warnings */ pG = pG; buf = buf; flag = flag; *size = 0; return 0; } /* end function UzpInput() */ #if (!defined(WINDLL) && !defined(MACOS)) /***************************/ /* Function UzpMorePause() */ /***************************/ void UZ_EXP UzpMorePause(pG, prompt, flag) zvoid *pG; /* globals struct: always passed */ ZCONST char *prompt; /* "--More--" prompt */ int flag; /* 0 = any char OK; 1 = accept only '\n', ' ', q */ { uch c; /*--------------------------------------------------------------------------- Print a prompt and wait for the user to press a key, then erase prompt if possible. ---------------------------------------------------------------------------*/ if (!((Uz_Globs *)pG)->sol) fprintf(stderr, "\n"); /* numlines may or may not be used: */ fprintf(stderr, prompt, ((Uz_Globs *)pG)->numlines); fflush(stderr); if (flag & 1) { do { c = (uch)FGETCH(0); } while ( #ifdef THEOS c != 17 && /* standard QUIT key */ #endif c != '\r' && c != '\n' && c != ' ' && c != 'q' && c != 'Q'); } else c = (uch)FGETCH(0); /* newline was not echoed, so cover up prompt line */ fprintf(stderr, LoadFarString(HidePrompt)); fflush(stderr); if ( #ifdef THEOS (c == 17) || /* standard QUIT key */ #endif (ToLower(c) == 'q')) { DESTROYGLOBALS(); EXIT(PK_COOL); } ((Uz_Globs *)pG)->sol = TRUE; #ifdef MORE /* space for another screen, enter for another line. */ if ((flag & 1) && c == ' ') ((Uz_Globs *)pG)->lines = 0; #endif /* MORE */ } /* end function UzpMorePause() */ #endif /* !WINDLL && !MACOS */ #ifndef WINDLL /**************************/ /* Function UzpPassword() */ /**************************/ int UZ_EXP UzpPassword (pG, rcnt, pwbuf, size, zfn, efn) zvoid *pG; /* pointer to UnZip's internal global vars */ int *rcnt; /* retry counter */ char *pwbuf; /* buffer for password */ int size; /* size of password buffer */ ZCONST char *zfn; /* name of zip archive */ ZCONST char *efn; /* name of archive entry being processed */ { #if CRYPT int r = IZ_PW_ENTERED; char *m; char *prompt; #ifndef REENTRANT /* tell picky compilers to shut up about "unused variable" warnings */ pG = pG; #endif if (*rcnt == 0) { /* First call for current entry */ *rcnt = 2; if ((prompt = (char *)malloc(2*FILNAMSIZ + 15)) != (char *)NULL) { sprintf(prompt, LoadFarString(PasswPrompt), FnFilter1(zfn), FnFilter2(efn)); m = prompt; } else m = (char *)LoadFarString(PasswPrompt2); } else { /* Retry call, previous password was wrong */ (*rcnt)--; prompt = NULL; m = (char *)LoadFarString(PasswRetry); } m = getp(__G__ m, pwbuf, size); if (prompt != (char *)NULL) { free(prompt); } if (m == (char *)NULL) { r = IZ_PW_ERROR; } else if (*pwbuf == '\0') { r = IZ_PW_CANCELALL; } return r; #else /* !CRYPT */ /* tell picky compilers to shut up about "unused variable" warnings */ pG = pG; rcnt = rcnt; pwbuf = pwbuf; size = size; zfn = zfn; efn = efn; return IZ_PW_ERROR; /* internal error; function should never get called */ #endif /* ?CRYPT */ } /* end function UzpPassword() */ /**********************/ /* Function handler() */ /**********************/ void handler(signal) /* upon interrupt, turn on echo and exit cleanly */ int signal; { GETGLOBALS(); #if !(defined(SIGBUS) || defined(SIGSEGV)) /* add a newline if not at */ (*G.message)((zvoid *)&G, slide, 0L, 0x41); /* start of line (to stderr; */ #endif /* slide[] should be safe) */ echon(); #ifdef SIGBUS if (signal == SIGBUS) { Info(slide, 0x421, ((char *)slide, LoadFarString(ZipfileCorrupt), "bus error")); DESTROYGLOBALS(); EXIT(PK_BADERR); } #endif /* SIGBUS */ #ifdef SIGILL if (signal == SIGILL) { Info(slide, 0x421, ((char *)slide, LoadFarString(ZipfileCorrupt), "illegal instruction")); DESTROYGLOBALS(); EXIT(PK_BADERR); } #endif /* SIGILL */ #ifdef SIGSEGV if (signal == SIGSEGV) { Info(slide, 0x421, ((char *)slide, LoadFarString(ZipfileCorrupt), "segmentation violation")); DESTROYGLOBALS(); EXIT(PK_BADERR); } #endif /* SIGSEGV */ /* probably ctrl-C */ DESTROYGLOBALS(); #if defined(AMIGA) && defined(__SASC) _abort(); #endif EXIT(IZ_CTRLC); /* was EXIT(0), then EXIT(PK_ERR) */ } #endif /* !WINDLL */ #if (!defined(VMS) && !defined(CMS_MVS)) #if (!defined(OS2) || defined(TIMESTAMP)) #if (!defined(HAVE_MKTIME) || defined(WIN32)) /* also used in amiga/filedate.c and win32/win32.c */ ZCONST ush ydays[] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }; #endif /*******************************/ /* Function dos_to_unix_time() */ /* used for freshening/updating/timestamps */ /*******************************/ time_t dos_to_unix_time(dosdatetime) ulg dosdatetime; { time_t m_time; #ifdef HAVE_MKTIME ZCONST time_t now = time(NULL); struct tm *tm; # define YRBASE 1900 tm = localtime(&now); tm->tm_isdst = -1; /* let mktime determine if DST is in effect */ /* dissect date */ tm->tm_year = ((int)(dosdatetime >> 25) & 0x7f) + (1980 - YRBASE); tm->tm_mon = ((int)(dosdatetime >> 21) & 0x0f) - 1; tm->tm_mday = ((int)(dosdatetime >> 16) & 0x1f); /* dissect time */ tm->tm_hour = (int)((unsigned)dosdatetime >> 11) & 0x1f; tm->tm_min = (int)((unsigned)dosdatetime >> 5) & 0x3f; tm->tm_sec = (int)((unsigned)dosdatetime << 1) & 0x3e; m_time = mktime(tm); NATIVE_TO_TIMET(m_time) /* NOP unless MSC 7.0 or Macintosh */ TTrace((stderr, " final m_time = %lu\n", (ulg)m_time)); #else /* !HAVE_MKTIME */ int yr, mo, dy, hh, mm, ss; #ifdef TOPS20 # define YRBASE 1900 struct tmx *tmx; char temp[20]; #else /* !TOPS20 */ # define YRBASE 1970 int leap; unsigned days; struct tm *tm; #if (!defined(MACOS) && !defined(RISCOS) && !defined(QDOS) && !defined(TANDEM)) #ifdef WIN32 TIME_ZONE_INFORMATION tzinfo; DWORD res; #else /* ! WIN32 */ #ifndef BSD4_4 /* GRR: change to !defined(MODERN) ? */ #if (defined(BSD) || defined(MTS) || defined(__GO32__)) struct timeb tbp; #else /* !(BSD || MTS || __GO32__) */ #ifdef DECLARE_TIMEZONE extern time_t timezone; #endif #endif /* ?(BSD || MTS || __GO32__) */ #endif /* !BSD4_4 */ #endif /* ?WIN32 */ #endif /* !MACOS && !RISCOS && !QDOS && !TANDEM */ #endif /* ?TOPS20 */ /* dissect date */ yr = ((int)(dosdatetime >> 25) & 0x7f) + (1980 - YRBASE); mo = ((int)(dosdatetime >> 21) & 0x0f) - 1; dy = ((int)(dosdatetime >> 16) & 0x1f) - 1; /* dissect time */ hh = (int)((unsigned)dosdatetime >> 11) & 0x1f; mm = (int)((unsigned)dosdatetime >> 5) & 0x3f; ss = (int)((unsigned)dosdatetime & 0x1f) * 2; #ifdef TOPS20 tmx = (struct tmx *)malloc(sizeof(struct tmx)); sprintf (temp, "%02d/%02d/%02d %02d:%02d:%02d", mo+1, dy+1, yr, hh, mm, ss); time_parse(temp, tmx, (char *)0); m_time = time_make(tmx); free(tmx); #else /* !TOPS20 */ /*--------------------------------------------------------------------------- Calculate the number of seconds since the epoch, usually 1 January 1970. ---------------------------------------------------------------------------*/ /* leap = # of leap yrs from YRBASE up to but not including current year */ leap = ((yr + YRBASE - 1) / 4); /* leap year base factor */ /* calculate days from BASE to this year and add expired days this year */ days = (yr * 365) + (leap - 492) + ydays[mo]; /* if year is a leap year and month is after February, add another day */ if ((mo > 1) && ((yr+YRBASE)%4 == 0) && ((yr+YRBASE) != 2100)) ++days; /* OK through 2199 */ /* convert date & time to seconds relative to 00:00:00, 01/01/YRBASE */ m_time = (time_t)((unsigned long)(days + dy) * 86400L + (unsigned long)hh * 3600L + (unsigned long)(mm * 60 + ss)); /* - 1; MS-DOS times always rounded up to nearest even second */ TTrace((stderr, "dos_to_unix_time:\n")); TTrace((stderr, " m_time before timezone = %lu\n", (ulg)m_time)); /*--------------------------------------------------------------------------- Adjust for local standard timezone offset. ---------------------------------------------------------------------------*/ #if (!defined(MACOS) && !defined(RISCOS) && !defined(QDOS) && !defined(TANDEM)) #ifdef WIN32 /* account for timezone differences */ res = GetTimeZoneInformation(&tzinfo); if (res != TIME_ZONE_ID_INVALID) { m_time += 60*(tzinfo.Bias); #else /* !WIN32 */ #if (defined(BSD) || defined(MTS) || defined(__GO32__)) #ifdef BSD4_4 if ( (dosdatetime >= DOSTIME_2038_01_18) && (m_time < (time_t)0x70000000L) ) m_time = U_TIME_T_MAX; /* saturate in case of (unsigned) overflow */ if (m_time < (time_t)0L) /* a converted DOS time cannot be negative */ m_time = S_TIME_T_MAX; /* -> saturate at max signed time_t value */ if ((tm = localtime(&m_time)) != (struct tm *)NULL) m_time -= tm->tm_gmtoff; /* sec. EAST of GMT: subtr. */ #else /* !(BSD4_4 */ ftime(&tbp); /* get `timezone' */ m_time += tbp.timezone * 60L; /* seconds WEST of GMT: add */ #endif /* ?(BSD4_4 || __EMX__) */ #else /* !(BSD || MTS || __GO32__) */ /* tzset was already called at start of process_zipfiles() */ /* tzset(); */ /* set `timezone' variable */ #ifndef __BEOS__ /* BeOS DR8 has no timezones... */ m_time += timezone; /* seconds WEST of GMT: add */ #endif #endif /* ?(BSD || MTS || __GO32__) */ #endif /* ?WIN32 */ TTrace((stderr, " m_time after timezone = %lu\n", (ulg)m_time)); /*--------------------------------------------------------------------------- Adjust for local daylight savings (summer) time. ---------------------------------------------------------------------------*/ #ifndef BSD4_4 /* (DST already added to tm_gmtoff, so skip tm_isdst) */ if ( (dosdatetime >= DOSTIME_2038_01_18) && (m_time < (time_t)0x70000000L) ) m_time = U_TIME_T_MAX; /* saturate in case of (unsigned) overflow */ if (m_time < (time_t)0L) /* a converted DOS time cannot be negative */ m_time = S_TIME_T_MAX; /* -> saturate at max signed time_t value */ TIMET_TO_NATIVE(m_time) /* NOP unless MSC 7.0 or Macintosh */ if (((tm = localtime((time_t *)&m_time)) != NULL) && tm->tm_isdst) #ifdef WIN32 m_time += 60L * tzinfo.DaylightBias; /* adjust with DST bias */ else m_time += 60L * tzinfo.StandardBias; /* add StdBias (normally 0) */ #else m_time -= 60L * 60L; /* adjust for daylight savings time */ #endif NATIVE_TO_TIMET(m_time) /* NOP unless MSC 7.0 or Macintosh */ TTrace((stderr, " m_time after DST = %lu\n", (ulg)m_time)); #endif /* !BSD4_4 */ #ifdef WIN32 } #endif #endif /* !MACOS && !RISCOS && !QDOS && !TANDEM */ #endif /* ?TOPS20 */ #endif /* ?HAVE_MKTIME */ if ( (dosdatetime >= DOSTIME_2038_01_18) && (m_time < (time_t)0x70000000L) ) m_time = U_TIME_T_MAX; /* saturate in case of (unsigned) overflow */ if (m_time < (time_t)0L) /* a converted DOS time cannot be negative */ m_time = S_TIME_T_MAX; /* -> saturate at max signed time_t value */ return m_time; } /* end function dos_to_unix_time() */ #endif /* !OS2 || TIMESTAMP */ #endif /* !VMS && !CMS_MVS */ #if (!defined(VMS) && !defined(OS2) && !defined(CMS_MVS)) /******************************/ /* Function check_for_newer() */ /* used for overwriting/freshening/updating */ /******************************/ int check_for_newer(__G__ filename) /* return 1 if existing file is newer */ __GDEF /* or equal; 0 if older; -1 if doesn't */ char *filename; /* exist yet */ { time_t existing, archive; #ifdef USE_EF_UT_TIME iztimes z_utime; #endif #ifdef AOS_VS long dyy, dmm, ddd, dhh, dmin, dss; dyy = (lrec.last_mod_dos_datetime >> 25) + 1980; dmm = (lrec.last_mod_dos_datetime >> 21) & 0x0f; ddd = (lrec.last_mod_dos_datetime >> 16) & 0x1f; dhh = (lrec.last_mod_dos_datetime >> 11) & 0x1f; dmin = (lrec.last_mod_dos_datetime >> 5) & 0x3f; dss = (lrec.last_mod_dos_datetime & 0x1f) * 2; /* under AOS/VS, file times can only be set at creation time, * with the info in a special DG format. Make sure we can create * it here - we delete it later & re-create it, whether or not * it exists now. */ if (!zvs_create(filename, (((ulg)dgdate(dmm, ddd, dyy)) << 16) | (dhh*1800L + dmin*30L + dss/2L), -1L, -1L, (char *) -1, -1, -1, -1)) return DOES_NOT_EXIST; #endif /* AOS_VS */ Trace((stderr, "check_for_newer: doing stat(%s)\n", FnFilter1(filename))); if (SSTAT(filename, &G.statbuf)) { Trace((stderr, "check_for_newer: stat(%s) returns %d: file does not exist\n", FnFilter1(filename), SSTAT(filename, &G.statbuf))); #ifdef SYMLINKS Trace((stderr, "check_for_newer: doing lstat(%s)\n", FnFilter1(filename))); /* GRR OPTION: could instead do this test ONLY if G.symlnk is true */ if (lstat(filename, &G.statbuf) == 0) { Trace((stderr, "check_for_newer: lstat(%s) returns 0: symlink does exist\n", FnFilter1(filename))); if (QCOND2 && !IS_OVERWRT_ALL) Info(slide, 0, ((char *)slide, LoadFarString(FileIsSymLink), FnFilter1(filename), " with no real file")); return EXISTS_AND_OLDER; /* symlink dates are meaningless */ } #endif /* SYMLINKS */ return DOES_NOT_EXIST; } Trace((stderr, "check_for_newer: stat(%s) returns 0: file exists\n", FnFilter1(filename))); #ifdef SYMLINKS /* GRR OPTION: could instead do this test ONLY if G.symlnk is true */ if (lstat(filename, &G.statbuf) == 0 && S_ISLNK(G.statbuf.st_mode)) { Trace((stderr, "check_for_newer: %s is a symbolic link\n", FnFilter1(filename))); if (QCOND2 && !IS_OVERWRT_ALL) Info(slide, 0, ((char *)slide, LoadFarString(FileIsSymLink), FnFilter1(filename), "")); return EXISTS_AND_OLDER; /* symlink dates are meaningless */ } #endif /* SYMLINKS */ NATIVE_TO_TIMET(G.statbuf.st_mtime) /* NOP unless MSC 7.0 or Macintosh */ #ifdef USE_EF_UT_TIME /* The `Unix extra field mtime' should be used for comparison with the * time stamp of the existing file >>>ONLY<<< when the EF info is also * used to set the modification time of the extracted file. */ if (G.extra_field && #ifdef IZ_CHECK_TZ G.tz_is_valid && #endif (ef_scan_for_izux(G.extra_field, G.lrec.extra_field_length, 0, G.lrec.last_mod_dos_datetime, &z_utime, NULL) & EB_UT_FL_MTIME)) { TTrace((stderr, "check_for_newer: using Unix extra field mtime\n")); existing = G.statbuf.st_mtime; archive = z_utime.mtime; } else { /* round up existing filetime to nearest 2 seconds for comparison, * but saturate in case of arithmetic overflow */ existing = ((G.statbuf.st_mtime & 1) && (G.statbuf.st_mtime + 1 > G.statbuf.st_mtime)) ? G.statbuf.st_mtime + 1 : G.statbuf.st_mtime; archive = dos_to_unix_time(G.lrec.last_mod_dos_datetime); } #else /* !USE_EF_UT_TIME */ /* round up existing filetime to nearest 2 seconds for comparison, * but saturate in case of arithmetic overflow */ existing = ((G.statbuf.st_mtime & 1) && (G.statbuf.st_mtime + 1 > G.statbuf.st_mtime)) ? G.statbuf.st_mtime + 1 : G.statbuf.st_mtime; archive = dos_to_unix_time(G.lrec.last_mod_dos_datetime); #endif /* ?USE_EF_UT_TIME */ TTrace((stderr, "check_for_newer: existing %lu, archive %lu, e-a %ld\n", (ulg)existing, (ulg)archive, (long)(existing-archive))); return (existing >= archive); } /* end function check_for_newer() */ #endif /* !VMS && !OS2 && !CMS_MVS */ /************************/ /* Function do_string() */ /************************/ int do_string(__G__ length, option) /* return PK-type error code */ __GDEF unsigned int length; /* without prototype, ush converted to this */ int option; { unsigned comment_bytes_left; unsigned int block_len; int error=PK_OK; #ifdef AMIGA char tmp_fnote[2 * AMIGA_FILENOTELEN]; /* extra room for squozen chars */ #endif /*--------------------------------------------------------------------------- This function processes arbitrary-length (well, usually) strings. Four major options are allowed: SKIP, wherein the string is skipped (pretty logical, eh?); DISPLAY, wherein the string is printed to standard output after undergoing any necessary or unnecessary character conversions; DS_FN, wherein the string is put into the filename[] array after under- going appropriate conversions (including case-conversion, if that is indicated: see the global variable pInfo->lcflag); and EXTRA_FIELD, wherein the `string' is assumed to be an extra field and is copied to the (freshly malloced) buffer G.extra_field. The third option should be OK since filename is dimensioned at 1025, but we check anyway. The string, by the way, is assumed to start at the current file-pointer position; its length is given by 'length'. So start off by checking the length of the string: if zero, we're already done. ---------------------------------------------------------------------------*/ if (!length) return PK_COOL; switch (option) { #if (defined(SFX) && defined(CHEAP_SFX_AUTORUN)) /* * Special case: See if the comment begins with an autorun command line. * Save that and display (or skip) the remainder. */ case CHECK_AUTORUN: case CHECK_AUTORUN_Q: comment_bytes_left = length; if (length >= 10) { block_len = readbuf(__G__ (char *)G.outbuf, 10); if (block_len == 0) return PK_EOF; comment_bytes_left -= block_len; G.outbuf[block_len] = '\0'; if (!strcmp((char *)G.outbuf, "$AUTORUN$>")) { char *eol; length -= 10; block_len = readbuf(__G__ G.autorun_command, MIN(length, sizeof(G.autorun_command)-1)); if (block_len == 0) return PK_EOF; comment_bytes_left -= block_len; G.autorun_command[block_len] = '\0'; A_TO_N(G.autorun_command); eol = strchr(G.autorun_command, '\n'); if (!eol) eol = G.autorun_command + strlen(G.autorun_command) - 1; length -= eol + 1 - G.autorun_command; while (eol >= G.autorun_command && isspace(*eol)) *eol-- = '\0'; #if (defined(WIN32) && !defined(_WIN32_WCE)) /* Win9x console always uses OEM character coding, and WinNT console is set to OEM charset by default, too */ INTERN_TO_OEM(G.autorun_command, G.autorun_command); #endif /* (WIN32 && !_WIN32_WCE) */ } } if (option == CHECK_AUTORUN_Q) /* don't display the remainder */ length = 0; /* seek to beginning of remaining part of comment -- rewind if */ /* displaying entire comment, or skip to end if discarding it */ seek_zipf(__G__ G.cur_zipfile_bufstart - G.extra_bytes + (G.inptr - G.inbuf) + comment_bytes_left - length); if (!length) break; /* FALL THROUGH... */ #endif /* SFX && CHEAP_SFX_AUTORUN */ /* * First normal case: print string on standard output. First set loop * variables, then loop through the comment in chunks of OUTBUFSIZ bytes, * converting formats and printing as we go. The second half of the * loop conditional was added because the file might be truncated, in * which case comment_bytes_left will remain at some non-zero value for * all time. outbuf and slide are used as scratch buffers because they * are available (we should be either before or in between any file pro- * cessing). */ case DISPLAY: case DISPL_8: comment_bytes_left = length; block_len = OUTBUFSIZ; /* for the while statement, first time */ while (comment_bytes_left > 0 && block_len > 0) { register uch *p = G.outbuf; register uch *q = G.outbuf; if ((block_len = readbuf(__G__ (char *)G.outbuf, MIN((unsigned)OUTBUFSIZ, comment_bytes_left))) == 0) return PK_EOF; comment_bytes_left -= block_len; /* this is why we allocated an extra byte for outbuf: terminate * with zero (ASCIIZ) */ G.outbuf[block_len] = '\0'; /* remove all ASCII carriage returns from comment before printing * (since used before A_TO_N(), check for CR instead of '\r') */ while (*p) { while (*p == CR) ++p; *q++ = *p++; } /* could check whether (p - outbuf) == block_len here */ *q = '\0'; if (option == DISPL_8) { /* translate the text coded in the entry's host-dependent "extended ASCII" charset into the compiler's (system's) internal text code page */ Ext_ASCII_TO_Native((char *)G.outbuf, G.pInfo->hostnum, G.pInfo->hostver, G.pInfo->HasUxAtt, FALSE); #ifdef WINDLL /* translate to ANSI (RTL internal codepage may be OEM) */ INTERN_TO_ISO((char *)G.outbuf, (char *)G.outbuf); #else /* !WINDLL */ #if (defined(WIN32) && !defined(_WIN32_WCE)) /* Win9x console always uses OEM character coding, and WinNT console is set to OEM charset by default, too */ INTERN_TO_OEM((char *)G.outbuf, (char *)G.outbuf); #endif /* (WIN32 && !_WIN32_WCE) */ #endif /* ?WINDLL */ } else { A_TO_N(G.outbuf); /* translate string to native */ } #ifdef WINDLL /* ran out of local mem -- had to cheat */ win_fprintf((zvoid *)&G, stdout, (extent)(q-G.outbuf), (char *)G.outbuf); win_fprintf((zvoid *)&G, stdout, 2, (char *)"\n\n"); #else /* !WINDLL */ #ifdef NOANSIFILT /* GRR: can ANSI be used with EBCDIC? */ (*G.message)((zvoid *)&G, G.outbuf, (ulg)(q-G.outbuf), 0); #else /* ASCII, filter out ANSI escape sequences and handle ^S (pause) */ p = G.outbuf - 1; q = slide; while (*++p) { int pause = FALSE; if (*p == 0x1B) { /* ASCII escape char */ *q++ = '^'; *q++ = '['; } else if (*p == 0x13) { /* ASCII ^S (pause) */ pause = TRUE; if (p[1] == LF) /* ASCII LF */ *q++ = *++p; else if (p[1] == CR && p[2] == LF) { /* ASCII CR LF */ *q++ = *++p; *q++ = *++p; } } else *q++ = *p; if ((unsigned)(q-slide) > WSIZE-3 || pause) { /* flush */ (*G.message)((zvoid *)&G, slide, (ulg)(q-slide), 0); q = slide; if (pause && G.extract_flag) /* don't pause for list/test */ (*G.mpause)((zvoid *)&G, LoadFarString(QuitPrompt), 0); } } (*G.message)((zvoid *)&G, slide, (ulg)(q-slide), 0); #endif /* ?NOANSIFILT */ #endif /* ?WINDLL */ } /* add '\n' if not at start of line */ (*G.message)((zvoid *)&G, slide, 0L, 0x40); break; /* * Second case: read string into filename[] array. The filename should * never ever be longer than FILNAMSIZ-1 (1024), but for now we'll check, * just to be sure. */ case DS_FN: case DS_FN_L: #ifdef UNICODE_SUPPORT /* get the whole filename as need it for Unicode checksum */ if (G.fnfull_bufsize <= length) { extent fnbufsiz = FILNAMSIZ; if (fnbufsiz <= length) fnbufsiz = length + 1; if (G.filename_full) free(G.filename_full); G.filename_full = malloc(fnbufsiz); if (G.filename_full == NULL) return PK_MEM; G.fnfull_bufsize = fnbufsiz; } if (readbuf(__G__ G.filename_full, length) == 0) return PK_EOF; G.filename_full[length] = '\0'; /* terminate w/zero: ASCIIZ */ /* if needed, chop off end so standard filename is a valid length */ if (length >= FILNAMSIZ) { Info(slide, 0x401, ((char *)slide, LoadFarString(FilenameTooLongTrunc))); error = PK_WARN; length = FILNAMSIZ - 1; } /* no excess size */ block_len = 0; strncpy(G.filename, G.filename_full, length); G.filename[length] = '\0'; /* terminate w/zero: ASCIIZ */ #else /* !UNICODE_SUPPORT */ if (length >= FILNAMSIZ) { Info(slide, 0x401, ((char *)slide, LoadFarString(FilenameTooLongTrunc))); error = PK_WARN; /* remember excess length in block_len */ block_len = length - (FILNAMSIZ - 1); length = FILNAMSIZ - 1; } else /* no excess size */ block_len = 0; if (readbuf(__G__ G.filename, length) == 0) return PK_EOF; G.filename[length] = '\0'; /* terminate w/zero: ASCIIZ */ #endif /* ?UNICODE_SUPPORT */ /* translate the Zip entry filename coded in host-dependent "extended ASCII" into the compiler's (system's) internal text code page */ Ext_ASCII_TO_Native(G.filename, G.pInfo->hostnum, G.pInfo->hostver, G.pInfo->HasUxAtt, (option == DS_FN_L)); if (G.pInfo->lcflag) /* replace with lowercase filename */ STRLOWER(G.filename, G.filename); if (G.pInfo->vollabel && length > 8 && G.filename[8] == '.') { char *p = G.filename+8; while (*p++) p[-1] = *p; /* disk label, and 8th char is dot: remove dot */ } if (!block_len) /* no overflow, we're done here */ break; /* * We truncated the filename, so print what's left and then fall * through to the SKIP routine. */ Info(slide, 0x401, ((char *)slide, "[ %s ]\n", FnFilter1(G.filename))); length = block_len; /* SKIP the excess bytes... */ /* FALL THROUGH... */ /* * Third case: skip string, adjusting readbuf's internal variables * as necessary (and possibly skipping to and reading a new block of * data). */ case SKIP: /* cur_zipfile_bufstart already takes account of extra_bytes, so don't * correct for it twice: */ seek_zipf(__G__ G.cur_zipfile_bufstart - G.extra_bytes + (G.inptr-G.inbuf) + length); break; /* * Fourth case: assume we're at the start of an "extra field"; malloc * storage for it and read data into the allocated space. */ case EXTRA_FIELD: if (G.extra_field != (uch *)NULL) free(G.extra_field); if ((G.extra_field = (uch *)malloc(length)) == (uch *)NULL) { Info(slide, 0x401, ((char *)slide, LoadFarString(ExtraFieldTooLong), length)); /* cur_zipfile_bufstart already takes account of extra_bytes, * so don't correct for it twice: */ seek_zipf(__G__ G.cur_zipfile_bufstart - G.extra_bytes + (G.inptr-G.inbuf) + length); } else { if (readbuf(__G__ (char *)G.extra_field, length) == 0) return PK_EOF; /* Looks like here is where extra fields are read */ getZip64Data(__G__ G.extra_field, length); #ifdef UNICODE_SUPPORT G.unipath_filename = NULL; if (G.UzO.U_flag < 2) { /* check if GPB11 (General Purpuse Bit 11) is set indicating the standard path and comment are UTF-8 */ if (G.pInfo->GPFIsUTF8) { /* if GPB11 set then filename_full is untruncated UTF-8 */ G.unipath_filename = G.filename_full; } else { /* Get the Unicode fields if exist */ getUnicodeData(__G__ G.extra_field, length); if (G.unipath_filename && strlen(G.unipath_filename) == 0) { /* the standard filename field is UTF-8 */ free(G.unipath_filename); G.unipath_filename = G.filename_full; } } if (G.unipath_filename) { # ifdef UTF8_MAYBE_NATIVE if (G.native_is_utf8 # ifdef UNICODE_WCHAR && (!G.unicode_escape_all) # endif ) { strncpy(G.filename, G.unipath_filename, FILNAMSIZ - 1); /* make sure filename is short enough */ if (strlen(G.unipath_filename) >= FILNAMSIZ) { G.filename[FILNAMSIZ - 1] = '\0'; Info(slide, 0x401, ((char *)slide, LoadFarString(UFilenameTooLongTrunc))); error = PK_WARN; } } # ifdef UNICODE_WCHAR else # endif # endif /* UTF8_MAYBE_NATIVE */ # ifdef UNICODE_WCHAR { char *fn; /* convert UTF-8 to local character set */ fn = utf8_to_local_string(G.unipath_filename, G.unicode_escape_all); /* make sure filename is short enough */ if (strlen(fn) >= FILNAMSIZ) { fn[FILNAMSIZ - 1] = '\0'; Info(slide, 0x401, ((char *)slide, LoadFarString(UFilenameTooLongTrunc))); error = PK_WARN; } /* replace filename with converted UTF-8 */ strcpy(G.filename, fn); free(fn); } # endif /* UNICODE_WCHAR */ if (G.unipath_filename != G.filename_full) free(G.unipath_filename); G.unipath_filename = NULL; } } #endif /* UNICODE_SUPPORT */ } break; #ifdef AMIGA /* * Fifth case, for the Amiga only: take the comment that would ordinarily * be skipped over, and turn it into a 79 character string that will be * attached to the file as a "filenote" after it is extracted. */ case FILENOTE: if ((block_len = readbuf(__G__ tmp_fnote, (unsigned) MIN(length, 2 * AMIGA_FILENOTELEN - 1))) == 0) return PK_EOF; if ((length -= block_len) > 0) /* treat remainder as in case SKIP: */ seek_zipf(__G__ G.cur_zipfile_bufstart - G.extra_bytes + (G.inptr - G.inbuf) + length); /* convert multi-line text into single line with no ctl-chars: */ tmp_fnote[block_len] = '\0'; while ((short int) --block_len >= 0) if ((unsigned) tmp_fnote[block_len] < ' ') if (tmp_fnote[block_len+1] == ' ') /* no excess */ strcpy(tmp_fnote+block_len, tmp_fnote+block_len+1); else tmp_fnote[block_len] = ' '; tmp_fnote[AMIGA_FILENOTELEN - 1] = '\0'; if (G.filenotes[G.filenote_slot]) free(G.filenotes[G.filenote_slot]); /* should not happen */ G.filenotes[G.filenote_slot] = NULL; if (tmp_fnote[0]) { if (!(G.filenotes[G.filenote_slot] = malloc(strlen(tmp_fnote)+1))) return PK_MEM; strcpy(G.filenotes[G.filenote_slot], tmp_fnote); } break; #endif /* AMIGA */ } /* end switch (option) */ return error; } /* end function do_string() */ /***********************/ /* Function makeword() */ /***********************/ ush makeword(b) ZCONST uch *b; { /* * Convert Intel style 'short' integer to non-Intel non-16-bit * host format. This routine also takes care of byte-ordering. */ return (ush)((b[1] << 8) | b[0]); } /***********************/ /* Function makelong() */ /***********************/ ulg makelong(sig) ZCONST uch *sig; { /* * Convert intel style 'long' variable to non-Intel non-16-bit * host format. This routine also takes care of byte-ordering. */ return (((ulg)sig[3]) << 24) + (((ulg)sig[2]) << 16) + (ulg)((((unsigned)sig[1]) << 8) + ((unsigned)sig[0])); } /************************/ /* Function makeint64() */ /************************/ zusz_t makeint64(sig) ZCONST uch *sig; { #ifdef LARGE_FILE_SUPPORT /* * Convert intel style 'int64' variable to non-Intel non-16-bit * host format. This routine also takes care of byte-ordering. */ return (((zusz_t)sig[7]) << 56) + (((zusz_t)sig[6]) << 48) + (((zusz_t)sig[4]) << 32) + (zusz_t)((((ulg)sig[3]) << 24) + (((ulg)sig[2]) << 16) + (((unsigned)sig[1]) << 8) + (sig[0])); #else /* !LARGE_FILE_SUPPORT */ if ((sig[7] | sig[6] | sig[5] | sig[4]) != 0) return (zusz_t)0xffffffffL; else return (zusz_t)((((ulg)sig[3]) << 24) + (((ulg)sig[2]) << 16) + (((unsigned)sig[1]) << 8) + (sig[0])); #endif /* ?LARGE_FILE_SUPPORT */ } /*********************/ /* Function fzofft() */ /*********************/ /* Format a zoff_t value in a cylindrical buffer set. */ char *fzofft(__G__ val, pre, post) __GDEF zoff_t val; ZCONST char *pre; ZCONST char *post; { /* Storage cylinder. (now in globals.h) */ /*static char fzofft_buf[FZOFFT_NUM][FZOFFT_LEN];*/ /*static int fzofft_index = 0;*/ /* Temporary format string storage. */ char fmt[16]; /* Assemble the format string. */ fmt[0] = '%'; fmt[1] = '\0'; /* Start after initial "%". */ if (pre == FZOFFT_HEX_WID) /* Special hex width. */ { strcat(fmt, FZOFFT_HEX_WID_VALUE); } else if (pre == FZOFFT_HEX_DOT_WID) /* Special hex ".width". */ { strcat(fmt, "."); strcat(fmt, FZOFFT_HEX_WID_VALUE); } else if (pre != NULL) /* Caller's prefix (width). */ { strcat(fmt, pre); } strcat(fmt, FZOFFT_FMT); /* Long or long-long or whatever. */ if (post == NULL) strcat(fmt, "d"); /* Default radix = decimal. */ else strcat(fmt, post); /* Caller's radix. */ /* Advance the cylinder. */ G.fzofft_index = (G.fzofft_index + 1) % FZOFFT_NUM; /* Write into the current chamber. */ sprintf(G.fzofft_buf[G.fzofft_index], fmt, val); /* Return a pointer to this chamber. */ return G.fzofft_buf[G.fzofft_index]; } #if CRYPT #ifdef NEED_STR2ISO /**********************/ /* Function str2iso() */ /**********************/ char *str2iso(dst, src) char *dst; /* destination buffer */ register ZCONST char *src; /* source string */ { #ifdef INTERN_TO_ISO INTERN_TO_ISO(src, dst); #else register uch c; register char *dstp = dst; do { c = (uch)foreign(*src++); *dstp++ = (char)ASCII2ISO(c); } while (c != '\0'); #endif return dst; } #endif /* NEED_STR2ISO */ #ifdef NEED_STR2OEM /**********************/ /* Function str2oem() */ /**********************/ char *str2oem(dst, src) char *dst; /* destination buffer */ register ZCONST char *src; /* source string */ { #ifdef INTERN_TO_OEM INTERN_TO_OEM(src, dst); #else register uch c; register char *dstp = dst; do { c = (uch)foreign(*src++); *dstp++ = (char)ASCII2OEM(c); } while (c != '\0'); #endif return dst; } #endif /* NEED_STR2OEM */ #endif /* CRYPT */ #ifdef ZMEM /* memset/memcmp/memcpy for systems without either them or */ /* bzero/bcmp/bcopy */ /* (no known systems as of 960211) */ /*********************/ /* Function memset() */ /*********************/ zvoid *memset(buf, init, len) register zvoid *buf; /* buffer location */ register int init; /* initializer character */ register unsigned int len; /* length of the buffer */ { zvoid *start; start = buf; while (len--) *((char *)buf++) = (char)init; return start; } /*********************/ /* Function memcmp() */ /*********************/ int memcmp(b1, b2, len) register ZCONST zvoid *b1; register ZCONST zvoid *b2; register unsigned int len; { register int c; if (len > 0) do { if ((c = (int)(*((ZCONST unsigned char *)b1)++) - (int)(*((ZCONST unsigned char *)b2)++)) != 0) return c; } while (--len > 0) return 0; } /*********************/ /* Function memcpy() */ /*********************/ zvoid *memcpy(dst, src, len) register zvoid *dst; register ZCONST zvoid *src; register unsigned int len; { zvoid *start; start = dst; while (len-- > 0) *((char *)dst)++ = *((ZCONST char *)src)++; return start; } #endif /* ZMEM */ #ifdef NO_STRNICMP /************************/ /* Function zstrnicmp() */ /************************/ int zstrnicmp(s1, s2, n) register ZCONST char *s1, *s2; register unsigned n; { for (; n > 0; --n, ++s1, ++s2) { if (ToLower(*s1) != ToLower(*s2)) /* test includes early termination of one string */ return ((uch)ToLower(*s1) < (uch)ToLower(*s2))? -1 : 1; if (*s1 == '\0') /* both strings terminate early */ return 0; } return 0; } #endif /* NO_STRNICMP */ #ifdef REGULUS /* returns the inode number on success(!)...argh argh argh */ # undef stat /********************/ /* Function zstat() */ /********************/ int zstat(p, s) ZCONST char *p; struct stat *s; { return (stat((char *)p,s) >= 0? 0 : (-1)); } #endif /* REGULUS */ #ifdef _MBCS /* DBCS support for Info-ZIP's zip (mainly for japanese (-: ) * by Yoshioka Tsuneo (QWF00133@nifty.ne.jp,tsuneo-y@is.aist-nara.ac.jp) * This code is public domain! Date: 1998/12/20 */ /************************/ /* Function plastchar() */ /************************/ char *plastchar(ptr, len) ZCONST char *ptr; extent len; { unsigned clen; ZCONST char *oldptr = ptr; while(*ptr != '\0' && len > 0){ oldptr = ptr; clen = CLEN(ptr); ptr += clen; len -= clen; } return (char *)oldptr; } #ifdef NEED_UZMBCLEN /***********************/ /* Function uzmbclen() */ /***********************/ extent uzmbclen(ptr) ZCONST unsigned char *ptr; { int mbl; mbl = mblen((ZCONST char *)ptr, MB_CUR_MAX); /* For use in code scanning through MBCS strings, we need a strictly positive "MB char bytes count". For our scanning purpose, it is not not relevant whether the MB character is valid or not. And, the NUL char '\0' has a byte count of 1, but mblen() returns 0. So, we make sure that the uzmbclen() return value is not less than 1. */ return (extent)(mbl > 0 ? mbl : 1); } #endif /* NEED_UZMBCLEN */ #ifdef NEED_UZMBSCHR /***********************/ /* Function uzmbschr() */ /***********************/ unsigned char *uzmbschr(str, c) ZCONST unsigned char *str; unsigned int c; { while(*str != '\0'){ if (*str == c) {return (unsigned char *)str;} INCSTR(str); } return NULL; } #endif /* NEED_UZMBSCHR */ #ifdef NEED_UZMBSRCHR /************************/ /* Function uzmbsrchr() */ /************************/ unsigned char *uzmbsrchr(str, c) ZCONST unsigned char *str; unsigned int c; { unsigned char *match = NULL; while(*str != '\0'){ if (*str == c) {match = (unsigned char *)str;} INCSTR(str); } return match; } #endif /* NEED_UZMBSRCHR */ #endif /* _MBCS */ #ifdef SMALL_MEM /*******************************/ /* Function fLoadFarString() */ /* (and friends...) */ /*******************************/ char *fLoadFarString(__GPRO__ const char Far *sz) { (void)zfstrcpy(G.rgchBigBuffer, sz); return G.rgchBigBuffer; } char *fLoadFarStringSmall(__GPRO__ const char Far *sz) { (void)zfstrcpy(G.rgchSmallBuffer, sz); return G.rgchSmallBuffer; } char *fLoadFarStringSmall2(__GPRO__ const char Far *sz) { (void)zfstrcpy(G.rgchSmallBuffer2, sz); return G.rgchSmallBuffer2; } #if (!defined(_MSC_VER) || (_MSC_VER < 600)) /*************************/ /* Function zfstrcpy() */ /* portable clone of _fstrcpy() */ /*************************/ char Far * Far zfstrcpy(char Far *s1, const char Far *s2) { char Far *p = s1; while ((*s1++ = *s2++) != '\0'); return p; } #if (!(defined(SFX) || defined(FUNZIP))) /*************************/ /* Function zfstrcmp() */ /* portable clone of _fstrcmp() */ /*************************/ int Far zfstrcmp(const char Far *s1, const char Far *s2) { int ret; while ((ret = (int)(uch)*s1 - (int)(uch)*s2) == 0 && *s2 != '\0') { ++s2; ++s1; } return ret; } #endif /* !(SFX || FUNZIP) */ #endif /* !_MSC_VER || (_MSC_VER < 600) */ #endif /* SMALL_MEM */ Carla-2.4.2/data/windows/unzipfx-carla/globals.c000066400000000000000000000145331420416754300215320ustar00rootroot00000000000000/* Copyright (c) 1990-2007 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2003-May-08 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- globals.c Routines to allocate and initialize globals, with or without threads. Contents: registerGlobalPointer() deregisterGlobalPointer() getGlobalPointer() globalsCtor() ---------------------------------------------------------------------------*/ #define UNZIP_INTERNAL #include "unzip.h" #ifndef FUNZIP /* initialization of sigs is completed at runtime so unzip(sfx) executable * won't look like a zipfile */ char central_hdr_sig[4] = {0, 0, 0x01, 0x02}; char local_hdr_sig[4] = {0, 0, 0x03, 0x04}; char end_central_sig[4] = {0, 0, 0x05, 0x06}; char end_central64_sig[4] = {0, 0, 0x06, 0x06}; char end_centloc64_sig[4] = {0, 0, 0x06, 0x07}; /* extern char extd_local_sig[4] = {0, 0, 0x07, 0x08}; NOT USED YET */ ZCONST char *fnames[2] = {"*", NULL}; /* default filenames vector */ #endif #ifndef REENTRANT Uz_Globs G; #else /* REENTRANT */ # ifndef USETHREADID Uz_Globs *GG; # else /* USETHREADID */ # define THREADID_ENTRIES 0x40 int lastScan; Uz_Globs *threadPtrTable[THREADID_ENTRIES]; ulg threadIdTable [THREADID_ENTRIES] = { 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* Make sure there are */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* THREADID_ENTRIES 0s */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 }; static ZCONST char Far TooManyThreads[] = "error: more than %d simultaneous threads.\n\ Some threads are probably not calling DESTROYTHREAD()\n"; static ZCONST char Far EntryNotFound[] = "error: couldn't find global pointer in table.\n\ Maybe somebody accidentally called DESTROYTHREAD() twice.\n"; static ZCONST char Far GlobalPointerMismatch[] = "error: global pointer in table does not match pointer passed as\ parameter\n"; static void registerGlobalPointer OF((__GPRO)); static void registerGlobalPointer(__G) __GDEF { int scan=0; ulg tid = GetThreadId(); while (threadIdTable[scan] && scan < THREADID_ENTRIES) scan++; if (scan == THREADID_ENTRIES) { ZCONST char *tooMany = LoadFarString(TooManyThreads); Info(slide, 0x421, ((char *)slide, tooMany, THREADID_ENTRIES)); free(pG); EXIT(PK_MEM); /* essentially memory error before we've started */ } threadIdTable [scan] = tid; threadPtrTable[scan] = pG; lastScan = scan; } void deregisterGlobalPointer(__G) __GDEF { int scan=0; ulg tid = GetThreadId(); while (threadIdTable[scan] != tid && scan < THREADID_ENTRIES) scan++; /*--------------------------------------------------------------------------- There are two things we can do if we can't find the entry: ignore it or scream. The most likely reason for it not to be here is the user calling this routine twice. Since this could cause BIG problems if any globals are accessed after the first call, we'd better scream. ---------------------------------------------------------------------------*/ if (scan == THREADID_ENTRIES || threadPtrTable[scan] != pG) { ZCONST char *noEntry; if (scan == THREADID_ENTRIES) noEntry = LoadFarString(EntryNotFound); else noEntry = LoadFarString(GlobalPointerMismatch); Info(slide, 0x421, ((char *)slide, noEntry)); EXIT(PK_WARN); /* programming error, but after we're all done */ } threadIdTable [scan] = 0; lastScan = scan; free(threadPtrTable[scan]); } Uz_Globs *getGlobalPointer() { int scan=0; ulg tid = GetThreadId(); while (threadIdTable[scan] != tid && scan < THREADID_ENTRIES) scan++; /*--------------------------------------------------------------------------- There are two things we can do if we can't find the entry: ignore it or scream. The most likely reason for it not to be here is the user calling this routine twice. Since this could cause BIG problems if any globals are accessed after the first call, we'd better scream. ---------------------------------------------------------------------------*/ if (scan == THREADID_ENTRIES) { ZCONST char *noEntry = LoadFarString(EntryNotFound); fprintf(stderr, noEntry); /* can't use Info w/o a global pointer */ EXIT(PK_ERR); /* programming error while still working */ } return threadPtrTable[scan]; } # endif /* ?USETHREADID */ #endif /* ?REENTRANT */ Uz_Globs *globalsCtor() { #ifdef REENTRANT Uz_Globs *pG = (Uz_Globs *)malloc(sizeof(Uz_Globs)); if (!pG) return (Uz_Globs *)NULL; #endif /* REENTRANT */ /* for REENTRANT version, G is defined as (*pG) */ memzero(&G, sizeof(Uz_Globs)); #ifndef FUNZIP #ifdef CMS_MVS uO.aflag=1; uO.C_flag=1; #endif #ifdef TANDEM uO.aflag=1; /* default to '-a' auto create Text Files as type 101 */ #endif #ifdef VMS # if (!defined(NO_TIMESTAMPS)) uO.D_flag=1; /* default to '-D', no restoration of dir timestamps */ # endif #endif uO.lflag=(-1); G.wildzipfn = ""; G.pfnames = (char **)fnames; G.pxnames = (char **)&fnames[1]; G.pInfo = G.info; G.sol = TRUE; /* at start of line */ G.message = UzpMessagePrnt; G.input = UzpInput; /* not used by anyone at the moment... */ #if defined(WINDLL) || defined(MACOS) G.mpause = NULL; /* has scrollbars: no need for pausing */ #else G.mpause = UzpMorePause; #endif G.decr_passwd = UzpPassword; #endif /* !FUNZIP */ #if (!defined(DOS_FLX_H68_NLM_OS2_W32) && !defined(AMIGA) && !defined(RISCOS)) #if (!defined(MACOS) && !defined(ATARI) && !defined(VMS)) G.echofd = -1; #endif /* !(MACOS || ATARI || VMS) */ #endif /* !(DOS_FLX_H68_NLM_OS2_W32 || AMIGA || RISCOS) */ #ifdef SYSTEM_SPECIFIC_CTOR SYSTEM_SPECIFIC_CTOR(__G); #endif #ifdef REENTRANT #ifdef USETHREADID registerGlobalPointer(__G); #else GG = &G; #endif /* ?USETHREADID */ #endif /* REENTRANT */ return &G; } Carla-2.4.2/data/windows/unzipfx-carla/globals.h000066400000000000000000000410711420416754300215340ustar00rootroot00000000000000/* Copyright (c) 1990-2009 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2009-Jan-02 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- globals.h There is usually no need to include this file since unzip.h includes it. This header file is used by all of the UnZip source files. It contains a struct definition that is used to "house" all of the global variables. This is done to allow for multithreaded environments (OS/2, NT, Win95, Unix) to call UnZip through an API without a semaphore. REENTRANT should be defined for all platforms that require this. GLOBAL CONSTRUCTOR AND DESTRUCTOR (API WRITERS READ THIS!!!) ------------------------------------------------------------ No, it's not C++, but it's as close as we can get with K&R. The main() of each process that uses these globals must include the CONSTRUCTGLOBALS; statement. This will malloc enough memory for the structure and initialize any variables that require it. This must also be done by any API function that jumps into the middle of the code. The DESTROYGLOBALS(); statement should be inserted before EVERY "EXIT(n)". Naturally, it also needs to be put before any API returns as well. In fact, it's much more important in API functions since the process will NOT end, and therefore the memory WON'T automatically be freed by the operating system. USING VARIABLES FROM THE STRUCTURE ---------------------------------- All global variables must now be prefixed with `G.' which is either a global struct (in which case it should be the only global variable) or a macro for the value of a local pointer variable that is passed from function to function. Yes, this is a pain. But it's the only way to allow full reentrancy. ADDING VARIABLES TO THE STRUCTURE --------------------------------- If you make the inclusion of any variables conditional, be sure to only check macros that are GUARANTEED to be included in every module. For instance, newzip and pwdarg are needed only if CRYPT is TRUE, but this is defined after unzip.h has been read. If you are not careful, some modules will expect your variable to be part of this struct while others won't. This will cause BIG problems. (Inexplicable crashes at strange times, car fires, etc.) When in doubt, always include it! Note also that UnZipSFX needs a few variables that UnZip doesn't. However, it also includes some object files from UnZip. If we were to conditionally include the extra variables that UnZipSFX needs, the object files from UnZip would not mesh with the UnZipSFX object files. Result: we just include the UnZipSFX variables every time. (It's only an extra 4 bytes so who cares!) ADDING FUNCTIONS ---------------- To support this new global struct, all functions must now conditionally pass the globals pointer (pG) to each other. This is supported by 5 macros: __GPRO, __GPRO__, __G, __G__ and __GDEF. A function that needs no other parameters would look like this: int extract_or_test_files(__G) __GDEF { ... stuff ... } A function with other parameters would look like: int memextract(__G__ tgt, tgtsize, src, srcsize) __GDEF uch *tgt, *src; ulg tgtsize, srcsize; { ... stuff ... } In the Function Prototypes section of unzpriv.h, you should use __GPRO and __GPRO__ instead: int uz_opts OF((__GPRO__ int *pargc, char ***pargv)); int process_zipfiles OF((__GPRO)); Note that there is NO comma after __G__ or __GPRO__ and no semi-colon after __GDEF. I wish there was another way but I don't think there is. TESTING THE CODE ----------------- Whether your platform requires reentrancy or not, you should always try building with REENTRANT defined if any functions have been added. It is pretty easy to forget a __G__ or a __GDEF and this mistake will only show up if REENTRANT is defined. All platforms should run with REENTRANT defined. Platforms that can't take advantage of it will just be paying a performance penalty needlessly. SIGNAL MADNESS -------------- This whole pointer passing scheme falls apart when it comes to SIGNALs. I handle this situation 2 ways right now. If you define USETHREADID, UnZip will include a 64-entry table. Each entry can hold a global pointer and thread ID for one thread. This should allow up to 64 threads to access UnZip simultaneously. Calling DESTROYGLOBALS() will free the global struct and zero the table entry. If somebody forgets to call DESTROYGLOBALS(), this table will eventually fill up and UnZip will exit with an error message. A good way to test your code to make sure you didn't forget a DESTROYGLOBALS() is to change THREADID_ENTRIES to 3 or 4 in globals.c, making the table real small. Then make a small test program that calls your API a dozen times. Those platforms that don't have threads still need to be able to compile with REENTRANT defined to test and see if new code is correctly written to work either way. For these platforms, I simply keep a global pointer called GG that points to the Globals structure. Good enough for testing. I believe that NT has thread level storage. This could probably be used to store a global pointer for the sake of the signal handler more cleanly than my table approach. ---------------------------------------------------------------------------*/ #ifndef __globals_h #define __globals_h #ifdef USE_ZLIB # include "zlib.h" # ifdef zlib_version /* This name is used internally in unzip */ # undef zlib_version /* and must not be defined as a macro. */ # endif #endif #ifdef USE_BZIP2 # include "bzlib.h" #endif /*************/ /* Globals */ /*************/ typedef struct Globals { #ifdef DLL zvoid *callerglobs; /* pointer to structure of pass-through global vars */ #endif /* command options of general use */ UzpOpts UzO; /* command options of general use */ #ifndef FUNZIP /* command options specific to the high level command line interface */ #ifdef MORE int M_flag; /* -M: built-in "more" function */ #endif /* internal flags and general globals */ #ifdef MORE int height; /* check for SIGWINCH, etc., eventually... */ int lines; /* count of lines displayed on current screen */ # if (defined(SCREENWIDTH) && defined(SCREENLWRAP)) int width; int chars; /* count of screen characters in current line */ # endif #endif /* MORE */ #if (defined(IZ_CHECK_TZ) && defined(USE_EF_UT_TIME)) int tz_is_valid; /* indicates that timezone info can be used */ #endif int noargs; /* did true command line have *any* arguments? */ unsigned filespecs; /* number of real file specifications to be matched */ unsigned xfilespecs; /* number of excluded filespecs to be matched */ int process_all_files; int overwrite_mode; /* 0 - query, 1 - always, 2 - never */ int create_dirs; /* used by main(), mapname(), checkdir() */ int extract_flag; int newzip; /* reset in extract.c; used in crypt.c */ zoff_t real_ecrec_offset; zoff_t expect_ecrec_offset; zoff_t csize; /* used by decompr. (NEXTBYTE): must be signed */ zoff_t used_csize; /* used by extract_or_test_member(), explode() */ #ifdef DLL int fValidate; /* true if only validating an archive */ int filenotfound; int redirect_data; /* redirect data to memory buffer */ int redirect_text; /* redirect text output to buffer */ # ifndef NO_SLIDE_REDIR int redirect_slide; /* redirect decompression area to mem buffer */ # if (defined(USE_DEFLATE64) && defined(INT_16BIT)) ulg _wsize; /* size of sliding window exceeds "unsigned" range */ # else unsigned _wsize; /* sliding window size can be hold in unsigned */ # endif # endif ulg redirect_size; /* size of redirected output buffer */ uch *redirect_buffer; /* pointer to head of allocated buffer */ uch *redirect_pointer; /* pointer past end of written data */ # ifndef NO_SLIDE_REDIR uch *redirect_sldptr; /* head of decompression slide buffer */ # endif # ifdef OS2DLL cbList(processExternally); /* call-back list */ # endif #endif /* DLL */ char **pfnames; char **pxnames; char sig[4]; char answerbuf[10]; min_info info[DIR_BLKSIZ]; min_info *pInfo; #endif /* !FUNZIP */ union work area; /* see unzpriv.h for definition of work */ #if (!defined(USE_ZLIB) || defined(USE_OWN_CRCTAB)) ZCONST ulg near *crc_32_tab; #else ZCONST ulg Far *crc_32_tab; #endif ulg crc32val; /* CRC shift reg. (was static in funzip) */ #ifdef FUNZIP FILE *in; /* file descriptor of compressed stream */ #endif uch *inbuf; /* input buffer (any size is OK) */ uch *inptr; /* pointer into input buffer */ int incnt; #ifndef FUNZIP ulg bitbuf; int bits_left; /* unreduce and unshrink only */ int zipeof; char *argv0; /* used for NT and EXE_EXTENSION */ char *wildzipfn; char *zipfn; /* GRR: WINDLL: must nuke any malloc'd zipfn... */ #ifdef USE_STRM_INPUT FILE *zipfd; /* zipfile file descriptor */ #else int zipfd; /* zipfile file handle */ #endif zoff_t ziplen; zoff_t cur_zipfile_bufstart; /* extract_or_test, readbuf, ReadByte */ zoff_t extra_bytes; /* used in unzip.c, misc.c */ uch *extra_field; /* Unix, VMS, Mac, OS/2, Acorn, ... */ uch *hold; local_file_hdr lrec; /* used in unzip.c, extract.c */ cdir_file_hdr crec; /* used in unzip.c, extract.c, misc.c */ ecdir_rec ecrec; /* used in unzip.c, extract.c */ z_stat statbuf; /* used by main, mapname, check_for_newer */ int mem_mode; uch *outbufptr; /* extract.c static */ ulg outsize; /* extract.c static */ int reported_backslash; /* extract.c static */ int disk_full; int newfile; int didCRlast; /* fileio static */ ulg numlines; /* fileio static: number of lines printed */ int sol; /* fileio static: at start of line */ int no_ecrec; /* process static */ #ifdef SYMLINKS int symlnk; slinkentry *slink_head; /* pointer to head of symlinks list */ slinkentry *slink_last; /* pointer to last entry in symlinks list */ #endif #ifdef NOVELL_BUG_FAILSAFE int dne; /* true if stat() says file doesn't exist */ #endif FILE *outfile; uch *outbuf; uch *realbuf; #ifndef VMS /* if SMALL_MEM, outbuf2 is initialized in */ uch *outbuf2; /* process_zipfiles() (never changes); */ #endif /* else malloc'd ONLY if unshrink and -a */ #endif /* !FUNZIP */ uch *outptr; ulg outcnt; /* number of chars stored in outbuf */ #ifndef FUNZIP char filename[FILNAMSIZ]; /* also used by NT for temporary SFX path */ #ifdef UNICODE_SUPPORT char *filename_full; /* the full path so Unicode checks work */ extent fnfull_bufsize; /* size of allocated filename buffer */ int unicode_escape_all; int unicode_mismatch; #ifdef UTF8_MAYBE_NATIVE int native_is_utf8; /* bool, TRUE => native charset == UTF-8 */ #endif int unipath_version; /* version of Unicode field */ ulg unipath_checksum; /* Unicode field checksum */ char *unipath_filename; /* UTF-8 path */ #endif /* UNICODE_SUPPORT */ #ifdef CMS_MVS char *tempfn; /* temp file used; erase on close */ #endif char *key; /* crypt static: decryption password or NULL */ int nopwd; /* crypt static */ #endif /* !FUNZIP */ z_uint4 keys[3]; /* crypt static: keys defining pseudo-random sequence */ #if (!defined(DOS_FLX_H68_NLM_OS2_W32) && !defined(AMIGA) && !defined(RISCOS)) #if (!defined(MACOS) && !defined(ATARI) && !defined(VMS)) int echofd; /* ttyio static: file descriptor whose echo is off */ #endif /* !(MACOS || ATARI || VMS) */ #endif /* !(DOS_FLX_H68_NLM_OS2_W32 || AMIGA || RISCOS) */ unsigned hufts; /* track memory usage */ #ifdef USE_ZLIB int inflInit; /* inflate static: zlib inflate() initialized */ z_stream dstrm; /* inflate global: decompression stream */ #else struct huft *fixed_tl; /* inflate static */ struct huft *fixed_td; /* inflate static */ unsigned fixed_bl, fixed_bd; /* inflate static */ #ifdef USE_DEFLATE64 struct huft *fixed_tl64; /* inflate static */ struct huft *fixed_td64; /* inflate static */ unsigned fixed_bl64, fixed_bd64; /* inflate static */ struct huft *fixed_tl32; /* inflate static */ struct huft *fixed_td32; /* inflate static */ unsigned fixed_bl32, fixed_bd32; /* inflate static */ ZCONST ush *cplens; /* inflate static */ ZCONST uch *cplext; /* inflate static */ ZCONST uch *cpdext; /* inflate static */ #endif unsigned wp; /* inflate static: current position in slide */ ulg bb; /* inflate static: bit buffer */ unsigned bk; /* inflate static: bits count in bit buffer */ #endif /* ?USE_ZLIB */ #ifndef FUNZIP /* cylindric buffer space for formatting zoff_t values (fileio static) */ char fzofft_buf[FZOFFT_NUM][FZOFFT_LEN]; int fzofft_index; #ifdef SMALL_MEM char rgchBigBuffer[512]; char rgchSmallBuffer[96]; char rgchSmallBuffer2[160]; /* boosted to 160 for local3[] in unzip.c */ #endif MsgFn *message; InputFn *input; PauseFn *mpause; PasswdFn *decr_passwd; StatCBFn *statreportcb; #ifdef WINDLL LPUSERFUNCTIONS lpUserFunctions; #endif int incnt_leftover; /* so improved NEXTBYTE does not waste input */ uch *inptr_leftover; #ifdef VMS_TEXT_CONV unsigned VMS_line_length; /* so native VMS variable-length text files */ int VMS_line_state; /* are readable on other platforms */ int VMS_line_pad; #endif #if (defined(SFX) && defined(CHEAP_SFX_AUTORUN)) char autorun_command[FILNAMSIZ]; #endif #endif /* !FUNZIP */ #ifdef SYSTEM_SPECIFIC_GLOBALS SYSTEM_SPECIFIC_GLOBALS #endif } Uz_Globs; /* end of struct Globals */ /***************************************************************************/ #define CRC_32_TAB G.crc_32_tab Uz_Globs *globalsCtor OF((void)); /* pseudo constant sigs; they are initialized at runtime so unzip executable * won't look like a zipfile */ extern char local_hdr_sig[4]; extern char central_hdr_sig[4]; extern char end_central_sig[4]; extern char end_central32_sig[4]; extern char end_central64_sig[4]; extern char end_centloc64_sig[4]; /* extern char extd_local_sig[4]; NOT USED YET */ #ifdef REENTRANT # define G (*(Uz_Globs *)pG) # define __G pG # define __G__ pG, # define __GPRO Uz_Globs *pG # define __GPRO__ Uz_Globs *pG, # define __GDEF Uz_Globs *pG; # ifdef USETHREADID extern int lastScan; void deregisterGlobalPointer OF((__GPRO)); Uz_Globs *getGlobalPointer OF((void)); # define GETGLOBALS() Uz_Globs *pG = getGlobalPointer() # define DESTROYGLOBALS() do {free_G_buffers(pG); \ deregisterGlobalPointer(pG);} while (0) # else extern Uz_Globs *GG; # define GETGLOBALS() Uz_Globs *pG = GG # define DESTROYGLOBALS() do {free_G_buffers(pG); free(pG);} while (0) # endif /* ?USETHREADID */ # define CONSTRUCTGLOBALS() Uz_Globs *pG = globalsCtor() #else /* !REENTRANT */ extern Uz_Globs G; # define __G # define __G__ # define __GPRO void # define __GPRO__ # define __GDEF # define GETGLOBALS() # define CONSTRUCTGLOBALS() globalsCtor() # define DESTROYGLOBALS() #endif /* ?REENTRANT */ #define uO G.UzO #endif /* __globals_h */ Carla-2.4.2/data/windows/unzipfx-carla/inflate.c000066400000000000000000001742151420416754300215350ustar00rootroot00000000000000/* Copyright (c) 1990-2008 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2007-Mar-04 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /* inflate.c -- by Mark Adler version c17e, 30 Mar 2007 */ /* Copyright history: - Starting with UnZip 5.41 of 16-April-2000, this source file is covered by the Info-Zip LICENSE cited above. - Prior versions of this source file, found in UnZip source packages up to UnZip 5.40, were put in the public domain. The original copyright note by Mark Adler was: "You can do whatever you like with this source file, though I would prefer that if you modify it and redistribute it that you include comments to that effect with your name and the date. Thank you." History: vers date who what ---- --------- -------------- ------------------------------------ a ~~ Feb 92 M. Adler used full (large, one-step) lookup table b1 21 Mar 92 M. Adler first version with partial lookup tables b2 21 Mar 92 M. Adler fixed bug in fixed-code blocks b3 22 Mar 92 M. Adler sped up match copies, cleaned up some b4 25 Mar 92 M. Adler added prototypes; removed window[] (now is the responsibility of unzip.h--also changed name to slide[]), so needs diffs for unzip.c and unzip.h (this allows compiling in the small model on MSDOS); fixed cast of q in huft_build(); b5 26 Mar 92 M. Adler got rid of unintended macro recursion. b6 27 Mar 92 M. Adler got rid of nextbyte() routine. fixed bug in inflate_fixed(). c1 30 Mar 92 M. Adler removed lbits, dbits environment variables. changed BMAX to 16 for explode. Removed OUTB usage, and replaced it with flush()-- this was a 20% speed improvement! Added an explode.c (to replace unimplod.c) that uses the huft routines here. Removed register union. c2 4 Apr 92 M. Adler fixed bug for file sizes a multiple of 32k. c3 10 Apr 92 M. Adler reduced memory of code tables made by huft_build significantly (factor of two to three). c4 15 Apr 92 M. Adler added NOMEMCPY do kill use of memcpy(). worked around a Turbo C optimization bug. c5 21 Apr 92 M. Adler added the WSIZE #define to allow reducing the 32K window size for specialized applications. c6 31 May 92 M. Adler added some typecasts to eliminate warnings c7 27 Jun 92 G. Roelofs added some more typecasts (444: MSC bug). c8 5 Oct 92 J-l. Gailly added ifdef'd code to deal with PKZIP bug. c9 9 Oct 92 M. Adler removed a memory error message (~line 416). c10 17 Oct 92 G. Roelofs changed ULONG/UWORD/byte to ulg/ush/uch, removed old inflate, renamed inflate_entry to inflate, added Mark's fix to a comment. c10.5 14 Dec 92 M. Adler fix up error messages for incomplete trees. c11 2 Jan 93 M. Adler fixed bug in detection of incomplete tables, and removed assumption that EOB is the longest code (bad assumption). c12 3 Jan 93 M. Adler make tables for fixed blocks only once. c13 5 Jan 93 M. Adler allow all zero length codes (pkzip 2.04c outputs one zero length code for an empty distance tree). c14 12 Mar 93 M. Adler made inflate.c standalone with the introduction of inflate.h. c14b 16 Jul 93 G. Roelofs added (unsigned) typecast to w at 470. c14c 19 Jul 93 J. Bush changed v[N_MAX], l[288], ll[28x+3x] arrays to static for Amiga. c14d 13 Aug 93 J-l. Gailly de-complicatified Mark's c[*p++]++ thing. c14e 8 Oct 93 G. Roelofs changed memset() to memzero(). c14f 22 Oct 93 G. Roelofs renamed quietflg to qflag; made Trace() conditional; added inflate_free(). c14g 28 Oct 93 G. Roelofs changed l/(lx+1) macro to pointer (Cray bug) c14h 7 Dec 93 C. Ghisler huft_build() optimizations. c14i 9 Jan 94 A. Verheijen set fixed_t{d,l} to NULL after freeing; G. Roelofs check NEXTBYTE macro for EOF. c14j 23 Jan 94 G. Roelofs removed Ghisler "optimizations"; ifdef'd EOF check. c14k 27 Feb 94 G. Roelofs added some typecasts to avoid warnings. c14l 9 Apr 94 G. Roelofs fixed split comments on preprocessor lines to avoid bug in Encore compiler. c14m 7 Jul 94 P. Kienitz modified to allow assembler version of inflate_codes() (define ASM_INFLATECODES) c14n 22 Jul 94 G. Roelofs changed fprintf to macro for DLL versions c14o 23 Aug 94 C. Spieler added a newline to a debug statement; G. Roelofs added another typecast to avoid MSC warning c14p 4 Oct 94 G. Roelofs added (voidp *) cast to free() argument c14q 30 Oct 94 G. Roelofs changed fprintf macro to MESSAGE() c14r 1 Nov 94 G. Roelofs fixed possible redefinition of CHECK_EOF c14s 7 May 95 S. Maxwell OS/2 DLL globals stuff incorporated; P. Kienitz "fixed" ASM_INFLATECODES macro/prototype c14t 18 Aug 95 G. Roelofs added UZinflate() to use zlib functions; changed voidp to zvoid; moved huft_build() and huft_free() to end of file c14u 1 Oct 95 G. Roelofs moved G into definition of MESSAGE macro c14v 8 Nov 95 P. Kienitz changed ASM_INFLATECODES to use a regular call with __G__ instead of a macro c15 3 Aug 96 M. Adler fixed bomb-bug on random input data (Adobe) c15b 24 Aug 96 M. Adler more fixes for random input data c15c 28 Mar 97 G. Roelofs changed USE_ZLIB fatal exit code from PK_MEM2 to PK_MEM3 c16 20 Apr 97 J. Altman added memzero(v[]) in huft_build() c16b 29 Mar 98 C. Spieler modified DLL code for slide redirection c16c 04 Apr 99 C. Spieler fixed memory leaks when processing gets stopped because of input data errors c16d 05 Jul 99 C. Spieler take care of FLUSH() return values and stop processing in case of errors c17 31 Dec 00 C. Spieler added preliminary support for Deflate64 c17a 04 Feb 01 C. Spieler complete integration of Deflate64 support c17b 16 Feb 02 C. Spieler changed type of "extra bits" arrays and corresponding huft_build() parameter e from ush into uch, to save space c17c 9 Mar 02 C. Spieler fixed NEEDBITS() "read beyond EOF" problem with CHECK_EOF enabled c17d 23 Jul 05 C. Spieler fixed memory leaks in inflate_dynamic() when processing invalid compressed literal/ distance table data c17e 30 Mar 07 C. Spieler in inflate_dynamic(), initialize tl and td to prevent freeing unallocated huft tables when processing invalid compressed data and hitting premature EOF, do not reuse td as temp work ptr during tables decoding */ /* Inflate deflated (PKZIP's method 8 compressed) data. The compression method searches for as much of the current string of bytes (up to a length of 258) in the previous 32K bytes. If it doesn't find any matches (of at least length 3), it codes the next byte. Otherwise, it codes the length of the matched string and its distance backwards from the current position. There is a single Huffman code that codes both single bytes (called "literals") and match lengths. A second Huffman code codes the distance information, which follows a length code. Each length or distance code actually represents a base value and a number of "extra" (sometimes zero) bits to get to add to the base value. At the end of each deflated block is a special end-of-block (EOB) literal/ length code. The decoding process is basically: get a literal/length code; if EOB then done; if a literal, emit the decoded byte; if a length then get the distance and emit the referred-to bytes from the sliding window of previously emitted data. There are (currently) three kinds of inflate blocks: stored, fixed, and dynamic. The compressor outputs a chunk of data at a time and decides which method to use on a chunk-by-chunk basis. A chunk might typically be 32K to 64K, uncompressed. If the chunk is uncompressible, then the "stored" method is used. In this case, the bytes are simply stored as is, eight bits per byte, with none of the above coding. The bytes are preceded by a count, since there is no longer an EOB code. If the data are compressible, then either the fixed or dynamic methods are used. In the dynamic method, the compressed data are preceded by an encoding of the literal/length and distance Huffman codes that are to be used to decode this block. The representation is itself Huffman coded, and so is preceded by a description of that code. These code descriptions take up a little space, and so for small blocks, there is a predefined set of codes, called the fixed codes. The fixed method is used if the block ends up smaller that way (usually for quite small chunks); otherwise the dynamic method is used. In the latter case, the codes are customized to the probabilities in the current block and so can code it much better than the pre-determined fixed codes can. The Huffman codes themselves are decoded using a multi-level table lookup, in order to maximize the speed of decoding plus the speed of building the decoding tables. See the comments below that precede the lbits and dbits tuning parameters. GRR: return values(?) 0 OK 1 incomplete table 2 bad input 3 not enough memory the following return codes are passed through from FLUSH() errors 50 (PK_DISK) "overflow of output space" 80 (IZ_CTRLC) "canceled by user's request" */ /* Notes beyond the 1.93a appnote.txt: 1. Distance pointers never point before the beginning of the output stream. 2. Distance pointers can point back across blocks, up to 32k away. 3. There is an implied maximum of 7 bits for the bit length table and 15 bits for the actual data. 4. If only one code exists, then it is encoded using one bit. (Zero would be more efficient, but perhaps a little confusing.) If two codes exist, they are coded using one bit each (0 and 1). 5. There is no way of sending zero distance codes--a dummy must be sent if there are none. (History: a pre 2.0 version of PKZIP would store blocks with no distance codes, but this was discovered to be too harsh a criterion.) Valid only for 1.93a. 2.04c does allow zero distance codes, which is sent as one code of zero bits in length. 6. There are up to 286 literal/length codes. Code 256 represents the end-of-block. Note however that the static length tree defines 288 codes just to fill out the Huffman codes. Codes 286 and 287 cannot be used though, since there is no length base or extra bits defined for them. Similarily, there are up to 30 distance codes. However, static trees define 32 codes (all 5 bits) to fill out the Huffman codes, but the last two had better not show up in the data. 7. Unzip can check dynamic Huffman blocks for complete code sets. The exception is that a single code would not be complete (see #4). 8. The five bits following the block type is really the number of literal codes sent minus 257. 9. Length codes 8,16,16 are interpreted as 13 length codes of 8 bits (1+6+6). Therefore, to output three times the length, you output three codes (1+1+1), whereas to output four times the same length, you only need two codes (1+3). Hmm. 10. In the tree reconstruction algorithm, Code = Code + Increment only if BitLength(i) is not zero. (Pretty obvious.) 11. Correction: 4 Bits: # of Bit Length codes - 4 (4 - 19) 12. Note: length code 284 can represent 227-258, but length code 285 really is 258. The last length deserves its own, short code since it gets used a lot in very redundant files. The length 258 is special since 258 - 3 (the min match length) is 255. 13. The literal/length and distance code bit lengths are read as a single stream of lengths. It is possible (and advantageous) for a repeat code (16, 17, or 18) to go across the boundary between the two sets of lengths. 14. The Deflate64 (PKZIP method 9) variant of the compression algorithm differs from "classic" deflate in the following 3 aspect: a) The size of the sliding history window is expanded to 64 kByte. b) The previously unused distance codes #30 and #31 code distances from 32769 to 49152 and 49153 to 65536. Both codes take 14 bits of extra data to determine the exact position in their 16 kByte range. c) The last lit/length code #285 gets a different meaning. Instead of coding a fixed maximum match length of 258, it is used as a "generic" match length code, capable of coding any length from 3 (min match length + 0) to 65538 (min match length + 65535). This means that the length code #285 takes 16 bits (!) of uncoded extra data, added to a fixed min length of 3. Changes a) and b) would have been transparent for valid deflated data, but change c) requires to switch decoder configurations between Deflate and Deflate64 modes. */ #define PKZIP_BUG_WORKAROUND /* PKZIP 1.93a problem--live with it */ /* inflate.h must supply the uch slide[WSIZE] array, the zvoid typedef (void if (void *) is accepted, else char) and the NEXTBYTE, FLUSH() and memzero macros. If the window size is not 32K, it should also define WSIZE. If INFMOD is defined, it can include compiled functions to support the NEXTBYTE and/or FLUSH() macros. There are defaults for NEXTBYTE and FLUSH() below for use as examples of what those functions need to do. Normally, you would also want FLUSH() to compute a crc on the data. inflate.h also needs to provide these typedefs: typedef unsigned char uch; typedef unsigned short ush; typedef unsigned long ulg; This module uses the external functions malloc() and free() (and probably memset() or bzero() in the memzero() macro). Their prototypes are normally found in and . */ #define __INFLATE_C /* identifies this source module */ /* #define DEBUG */ #define INFMOD /* tell inflate.h to include code to be compiled */ #include "inflate.h" /* marker for "unused" huft code, and corresponding check macro */ #define INVALID_CODE 99 #define IS_INVALID_CODE(c) ((c) == INVALID_CODE) #ifndef WSIZE /* default is 32K resp. 64K */ # ifdef USE_DEFLATE64 # define WSIZE 65536L /* window size--must be a power of two, and */ # else /* at least 64K for PKZip's deflate64 method */ # define WSIZE 0x8000 /* window size--must be a power of two, and */ # endif /* at least 32K for zip's deflate method */ #endif /* some buffer counters must be capable of holding 64k for Deflate64 */ #if (defined(USE_DEFLATE64) && defined(INT_16BIT)) # define UINT_D64 ulg #else # define UINT_D64 unsigned #endif #if (defined(DLL) && !defined(NO_SLIDE_REDIR)) # define wsize G._wsize /* wsize is a variable */ #else # define wsize WSIZE /* wsize is a constant */ #endif #ifndef NEXTBYTE /* default is to simply get a byte from stdin */ # define NEXTBYTE getchar() #endif #ifndef MESSAGE /* only used twice, for fixed strings--NOT general-purpose */ # define MESSAGE(str,len,flag) fprintf(stderr,(char *)(str)) #endif #ifndef FLUSH /* default is to simply write the buffer to stdout */ # define FLUSH(n) \ (((extent)fwrite(redirSlide, 1, (extent)(n), stdout) == (extent)(n)) ? \ 0 : PKDISK) #endif /* Warning: the fwrite above might not work on 16-bit compilers, since 0x8000 might be interpreted as -32,768 by the library function. When support for Deflate64 is enabled, the window size is 64K and the simple fwrite statement is definitely broken for 16-bit compilers. */ #ifndef Trace # ifdef DEBUG # define Trace(x) fprintf x # else # define Trace(x) # endif #endif /*---------------------------------------------------------------------------*/ #ifdef USE_ZLIB /* Beginning with zlib version 1.2.0, a new inflate callback interface is provided that allows tighter integration of the zlib inflate service into unzip's extraction framework. The advantages are: - uses the windows buffer supplied by the unzip code; this saves one copy process between zlib's internal decompression buffer and unzip's post-decompression output buffer and improves performance. - does not pull in unused checksum code (adler32). The preprocessor flag NO_ZLIBCALLBCK can be set to force usage of the old zlib 1.1.x interface, for testing purpose. */ #ifdef USE_ZLIB_INFLATCB # undef USE_ZLIB_INFLATCB #endif #if (defined(ZLIB_VERNUM) && ZLIB_VERNUM >= 0x1200 && !defined(NO_ZLIBCALLBCK)) # define USE_ZLIB_INFLATCB 1 #else # define USE_ZLIB_INFLATCB 0 #endif /* Check for incompatible combinations of zlib and Deflate64 support. */ #if defined(USE_DEFLATE64) # if !USE_ZLIB_INFLATCB #error Deflate64 is incompatible with traditional (pre-1.2.x) zlib interface! # else /* The Deflate64 callback function in the framework of zlib 1.2.x requires the inclusion of the unsupported infback9 header file: */ # include "infback9.h" # endif #endif /* USE_DEFLATE64 */ #if USE_ZLIB_INFLATCB static unsigned zlib_inCB OF((void FAR *pG, unsigned char FAR * FAR * pInbuf)); static int zlib_outCB OF((void FAR *pG, unsigned char FAR *outbuf, unsigned outcnt)); static unsigned zlib_inCB(pG, pInbuf) void FAR *pG; unsigned char FAR * FAR * pInbuf; { *pInbuf = G.inbuf; return fillinbuf(__G); } static int zlib_outCB(pG, outbuf, outcnt) void FAR *pG; unsigned char FAR *outbuf; unsigned outcnt; { #ifdef FUNZIP return flush(__G__ (ulg)(outcnt)); #else return ((G.mem_mode) ? memflush(__G__ outbuf, (ulg)(outcnt)) : flush(__G__ outbuf, (ulg)(outcnt), 0)); #endif } #endif /* USE_ZLIB_INFLATCB */ /* GRR: return values for both original inflate() and UZinflate() 0 OK 1 incomplete table(?) 2 bad input 3 not enough memory */ /**************************/ /* Function UZinflate() */ /**************************/ int UZinflate(__G__ is_defl64) __GDEF int is_defl64; /* decompress an inflated entry using the zlib routines */ { int retval = 0; /* return code: 0 = "no error" */ int err=Z_OK; #if USE_ZLIB_INFLATCB #if (defined(DLL) && !defined(NO_SLIDE_REDIR)) if (G.redirect_slide) wsize = G.redirect_size, redirSlide = G.redirect_buffer; else wsize = WSIZE, redirSlide = slide; #endif if (!G.inflInit) { /* local buffer for efficiency */ ZCONST char *zlib_RtVersion = zlibVersion(); /* only need to test this stuff once */ if ((zlib_RtVersion[0] != ZLIB_VERSION[0]) || (zlib_RtVersion[2] != ZLIB_VERSION[2])) { Info(slide, 0x21, ((char *)slide, "error: incompatible zlib version (expected %s, found %s)\n", ZLIB_VERSION, zlib_RtVersion)); return 3; } else if (strcmp(zlib_RtVersion, ZLIB_VERSION) != 0) Info(slide, 0x21, ((char *)slide, "warning: different zlib version (expected %s, using %s)\n", ZLIB_VERSION, zlib_RtVersion)); G.dstrm.zalloc = (alloc_func)Z_NULL; G.dstrm.zfree = (free_func)Z_NULL; G.inflInit = 1; } #ifdef USE_DEFLATE64 if (is_defl64) { Trace((stderr, "initializing inflate9()\n")); err = inflateBack9Init(&G.dstrm, redirSlide); if (err == Z_MEM_ERROR) return 3; else if (err != Z_OK) { Trace((stderr, "oops! (inflateBack9Init() err = %d)\n", err)); return 2; } G.dstrm.next_in = G.inptr; G.dstrm.avail_in = G.incnt; err = inflateBack9(&G.dstrm, zlib_inCB, &G, zlib_outCB, &G); if (err != Z_STREAM_END) { if (err == Z_DATA_ERROR || err == Z_STREAM_ERROR) { Trace((stderr, "oops! (inflateBack9() err = %d)\n", err)); retval = 2; } else if (err == Z_MEM_ERROR) { retval = 3; } else if (err == Z_BUF_ERROR) { Trace((stderr, "oops! (inflateBack9() err = %d)\n", err)); if (G.dstrm.next_in == Z_NULL) { /* input failure */ Trace((stderr, " inflateBack9() input failure\n")); retval = 2; } else { /* output write failure */ retval = (G.disk_full != 0 ? PK_DISK : IZ_CTRLC); } } else { Trace((stderr, "oops! (inflateBack9() err = %d)\n", err)); retval = 2; } } if (G.dstrm.next_in != NULL) { G.inptr = (uch *)G.dstrm.next_in; G.incnt = G.dstrm.avail_in; } err = inflateBack9End(&G.dstrm); if (err != Z_OK) { Trace((stderr, "oops! (inflateBack9End() err = %d)\n", err)); if (retval == 0) retval = 2; } } else #endif /* USE_DEFLATE64 */ { /* For the callback interface, inflate initialization has to be called before each decompression call. */ { unsigned i; int windowBits; /* windowBits = log2(wsize) */ for (i = (unsigned)wsize, windowBits = 0; !(i & 1); i >>= 1, ++windowBits); if ((unsigned)windowBits > (unsigned)15) windowBits = 15; else if (windowBits < 8) windowBits = 8; Trace((stderr, "initializing inflate()\n")); err = inflateBackInit(&G.dstrm, windowBits, redirSlide); if (err == Z_MEM_ERROR) return 3; else if (err != Z_OK) { Trace((stderr, "oops! (inflateBackInit() err = %d)\n", err)); return 2; } } G.dstrm.next_in = G.inptr; G.dstrm.avail_in = G.incnt; err = inflateBack(&G.dstrm, zlib_inCB, &G, zlib_outCB, &G); if (err != Z_STREAM_END) { if (err == Z_DATA_ERROR || err == Z_STREAM_ERROR) { Trace((stderr, "oops! (inflateBack() err = %d)\n", err)); retval = 2; } else if (err == Z_MEM_ERROR) { retval = 3; } else if (err == Z_BUF_ERROR) { Trace((stderr, "oops! (inflateBack() err = %d)\n", err)); if (G.dstrm.next_in == Z_NULL) { /* input failure */ Trace((stderr, " inflateBack() input failure\n")); retval = 2; } else { /* output write failure */ retval = (G.disk_full != 0 ? PK_DISK : IZ_CTRLC); } } else { Trace((stderr, "oops! (inflateBack() err = %d)\n", err)); retval = 2; } } if (G.dstrm.next_in != NULL) { G.inptr = (uch *)G.dstrm.next_in; G.incnt = G.dstrm.avail_in; } err = inflateBackEnd(&G.dstrm); if (err != Z_OK) { Trace((stderr, "oops! (inflateBackEnd() err = %d)\n", err)); if (retval == 0) retval = 2; } } #else /* !USE_ZLIB_INFLATCB */ int repeated_buf_err; #if (defined(DLL) && !defined(NO_SLIDE_REDIR)) if (G.redirect_slide) wsize = G.redirect_size, redirSlide = G.redirect_buffer; else wsize = WSIZE, redirSlide = slide; #endif G.dstrm.next_out = redirSlide; G.dstrm.avail_out = wsize; G.dstrm.next_in = G.inptr; G.dstrm.avail_in = G.incnt; if (!G.inflInit) { unsigned i; int windowBits; /* local buffer for efficiency */ ZCONST char *zlib_RtVersion = zlibVersion(); /* only need to test this stuff once */ if (zlib_RtVersion[0] != ZLIB_VERSION[0]) { Info(slide, 0x21, ((char *)slide, "error: incompatible zlib version (expected %s, found %s)\n", ZLIB_VERSION, zlib_RtVersion)); return 3; } else if (strcmp(zlib_RtVersion, ZLIB_VERSION) != 0) Info(slide, 0x21, ((char *)slide, "warning: different zlib version (expected %s, using %s)\n", ZLIB_VERSION, zlib_RtVersion)); /* windowBits = log2(wsize) */ for (i = (unsigned)wsize, windowBits = 0; !(i & 1); i >>= 1, ++windowBits); if ((unsigned)windowBits > (unsigned)15) windowBits = 15; else if (windowBits < 8) windowBits = 8; G.dstrm.zalloc = (alloc_func)Z_NULL; G.dstrm.zfree = (free_func)Z_NULL; Trace((stderr, "initializing inflate()\n")); err = inflateInit2(&G.dstrm, -windowBits); if (err == Z_MEM_ERROR) return 3; else if (err != Z_OK) Trace((stderr, "oops! (inflateInit2() err = %d)\n", err)); G.inflInit = 1; } #ifdef FUNZIP while (err != Z_STREAM_END) { #else /* !FUNZIP */ while (G.csize > 0) { Trace((stderr, "first loop: G.csize = %ld\n", G.csize)); #endif /* ?FUNZIP */ while (G.dstrm.avail_out > 0) { err = inflate(&G.dstrm, Z_PARTIAL_FLUSH); if (err == Z_DATA_ERROR) { retval = 2; goto uzinflate_cleanup_exit; } else if (err == Z_MEM_ERROR) { retval = 3; goto uzinflate_cleanup_exit; } else if (err != Z_OK && err != Z_STREAM_END) Trace((stderr, "oops! (inflate(first loop) err = %d)\n", err)); #ifdef FUNZIP if (err == Z_STREAM_END) /* "END-of-entry-condition" ? */ #else /* !FUNZIP */ if (G.csize <= 0L) /* "END-of-entry-condition" ? */ #endif /* ?FUNZIP */ break; if (G.dstrm.avail_in == 0) { if (fillinbuf(__G) == 0) { /* no "END-condition" yet, but no more data */ retval = 2; goto uzinflate_cleanup_exit; } G.dstrm.next_in = G.inptr; G.dstrm.avail_in = G.incnt; } Trace((stderr, " avail_in = %u\n", G.dstrm.avail_in)); } /* flush slide[] */ if ((retval = FLUSH(wsize - G.dstrm.avail_out)) != 0) goto uzinflate_cleanup_exit; Trace((stderr, "inside loop: flushing %ld bytes (ptr diff = %ld)\n", (long)(wsize - G.dstrm.avail_out), (long)(G.dstrm.next_out-(Bytef *)redirSlide))); G.dstrm.next_out = redirSlide; G.dstrm.avail_out = wsize; } /* no more input, so loop until we have all output */ Trace((stderr, "beginning final loop: err = %d\n", err)); repeated_buf_err = FALSE; while (err != Z_STREAM_END) { err = inflate(&G.dstrm, Z_PARTIAL_FLUSH); if (err == Z_DATA_ERROR) { retval = 2; goto uzinflate_cleanup_exit; } else if (err == Z_MEM_ERROR) { retval = 3; goto uzinflate_cleanup_exit; } else if (err == Z_BUF_ERROR) { /* DEBUG */ #ifdef FUNZIP Trace((stderr, "zlib inflate() did not detect stream end\n")); #else Trace((stderr, "zlib inflate() did not detect stream end (%s, %s)\n", G.zipfn, G.filename)); #endif if ((!repeated_buf_err) && (G.dstrm.avail_in == 0)) { /* when detecting this problem for the first time, try to provide one fake byte beyond "EOF"... */ G.dstrm.next_in = ""; G.dstrm.avail_in = 1; repeated_buf_err = TRUE; } else break; } else if (err != Z_OK && err != Z_STREAM_END) { Trace((stderr, "oops! (inflate(final loop) err = %d)\n", err)); DESTROYGLOBALS(); EXIT(PK_MEM3); } /* final flush of slide[] */ if ((retval = FLUSH(wsize - G.dstrm.avail_out)) != 0) goto uzinflate_cleanup_exit; Trace((stderr, "final loop: flushing %ld bytes (ptr diff = %ld)\n", (long)(wsize - G.dstrm.avail_out), (long)(G.dstrm.next_out-(Bytef *)redirSlide))); G.dstrm.next_out = redirSlide; G.dstrm.avail_out = wsize; } Trace((stderr, "total in = %lu, total out = %lu\n", G.dstrm.total_in, G.dstrm.total_out)); G.inptr = (uch *)G.dstrm.next_in; G.incnt = (G.inbuf + INBUFSIZ) - G.inptr; /* reset for other routines */ uzinflate_cleanup_exit: err = inflateReset(&G.dstrm); if (err != Z_OK) Trace((stderr, "oops! (inflateReset() err = %d)\n", err)); #endif /* ?USE_ZLIB_INFLATCB */ return retval; } /*---------------------------------------------------------------------------*/ #else /* !USE_ZLIB */ /* Function prototypes */ #ifndef OF # ifdef __STDC__ # define OF(a) a # else # define OF(a) () # endif #endif /* !OF */ int inflate_codes OF((__GPRO__ struct huft *tl, struct huft *td, unsigned bl, unsigned bd)); static int inflate_stored OF((__GPRO)); static int inflate_fixed OF((__GPRO)); static int inflate_dynamic OF((__GPRO)); static int inflate_block OF((__GPRO__ int *e)); /* The inflate algorithm uses a sliding 32K byte window on the uncompressed stream to find repeated byte strings. This is implemented here as a circular buffer. The index is updated simply by incrementing and then and'ing with 0x7fff (32K-1). */ /* It is left to other modules to supply the 32K area. It is assumed to be usable as if it were declared "uch slide[32768];" or as just "uch *slide;" and then malloc'ed in the latter case. The definition must be in unzip.h, included above. */ /* unsigned wp; moved to globals.h */ /* current position in slide */ /* Tables for deflate from PKZIP's appnote.txt. */ /* - Order of the bit length code lengths */ static ZCONST unsigned border[] = { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; /* - Copy lengths for literal codes 257..285 */ #ifdef USE_DEFLATE64 static ZCONST ush cplens64[] = { 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 3, 0, 0}; /* For Deflate64, the code 285 is defined differently. */ #else # define cplens32 cplens #endif static ZCONST ush cplens32[] = { 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; /* note: see note #13 above about the 258 in this list. */ /* - Extra bits for literal codes 257..285 */ #ifdef USE_DEFLATE64 static ZCONST uch cplext64[] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 16, INVALID_CODE, INVALID_CODE}; #else # define cplext32 cplext #endif static ZCONST uch cplext32[] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, INVALID_CODE, INVALID_CODE}; /* - Copy offsets for distance codes 0..29 (0..31 for Deflate64) */ static ZCONST ush cpdist[] = { 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, #if (defined(USE_DEFLATE64) || defined(PKZIP_BUG_WORKAROUND)) 8193, 12289, 16385, 24577, 32769, 49153}; #else 8193, 12289, 16385, 24577}; #endif /* - Extra bits for distance codes 0..29 (0..31 for Deflate64) */ #ifdef USE_DEFLATE64 static ZCONST uch cpdext64[] = { 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14}; #else # define cpdext32 cpdext #endif static ZCONST uch cpdext32[] = { 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, #ifdef PKZIP_BUG_WORKAROUND 12, 12, 13, 13, INVALID_CODE, INVALID_CODE}; #else 12, 12, 13, 13}; #endif #ifdef PKZIP_BUG_WORKAROUND # define MAXLITLENS 288 #else # define MAXLITLENS 286 #endif #if (defined(USE_DEFLATE64) || defined(PKZIP_BUG_WORKAROUND)) # define MAXDISTS 32 #else # define MAXDISTS 30 #endif /* moved to consts.h (included in unzip.c), resp. funzip.c */ #if 0 /* And'ing with mask_bits[n] masks the lower n bits */ ZCONST unsigned near mask_bits[17] = { 0x0000, 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff, 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff }; #endif /* 0 */ /* Macros for inflate() bit peeking and grabbing. The usage is: NEEDBITS(j) x = b & mask_bits[j]; DUMPBITS(j) where NEEDBITS makes sure that b has at least j bits in it, and DUMPBITS removes the bits from b. The macros use the variable k for the number of bits in b. Normally, b and k are register variables for speed and are initialized at the beginning of a routine that uses these macros from a global bit buffer and count. In order to not ask for more bits than there are in the compressed stream, the Huffman tables are constructed to only ask for just enough bits to make up the end-of-block code (value 256). Then no bytes need to be "returned" to the buffer at the end of the last block. See the huft_build() routine. Actually, the precautions mentioned above are not sufficient to prevent fetches of bits beyound the end of the last block in every case. When the last code fetched before the end-of-block code was a very short distance code (shorter than "distance-prefetch-bits" - "end-of-block code bits"), this last distance code fetch already exausts the available data. To prevent failure of extraction in this case, the "read beyond EOF" check delays the raise of the "invalid data" error until an actual overflow of "used data" is detected. This error condition is only fulfilled when the "number of available bits" counter k is found to be negative in the NEEDBITS() macro. An alternate fix for that problem adjusts the size of the distance code base table so that it does not exceed the length of the end-of-block code plus the minimum length of a distance code. This alternate fix can be enabled by defining the preprocessor symbol FIX_PAST_EOB_BY_TABLEADJUST. */ /* These have been moved to globals.h */ #if 0 ulg bb; /* bit buffer */ unsigned bk; /* bits in bit buffer */ #endif #ifndef CHECK_EOF # define CHECK_EOF /* default as of 5.13/5.2 */ #endif #ifndef CHECK_EOF # define NEEDBITS(n) {while(k<(n)){b|=((ulg)NEXTBYTE)<=0)break;retval=1;goto cleanup_and_exit;}\ b|=((ulg)c)<>=(n);k-=(n);} /* Huffman code decoding is performed using a multi-level table lookup. The fastest way to decode is to simply build a lookup table whose size is determined by the longest code. However, the time it takes to build this table can also be a factor if the data being decoded are not very long. The most common codes are necessarily the shortest codes, so those codes dominate the decoding time, and hence the speed. The idea is you can have a shorter table that decodes the shorter, more probable codes, and then point to subsidiary tables for the longer codes. The time it costs to decode the longer codes is then traded against the time it takes to make longer tables. This results of this trade are in the variables lbits and dbits below. lbits is the number of bits the first level table for literal/ length codes can decode in one step, and dbits is the same thing for the distance codes. Subsequent tables are also less than or equal to those sizes. These values may be adjusted either when all of the codes are shorter than that, in which case the longest code length in bits is used, or when the shortest code is *longer* than the requested table size, in which case the length of the shortest code in bits is used. There are two different values for the two tables, since they code a different number of possibilities each. The literal/length table codes 286 possible values, or in a flat code, a little over eight bits. The distance table codes 30 possible values, or a little less than five bits, flat. The optimum values for speed end up being about one bit more than those, so lbits is 8+1 and dbits is 5+1. The optimum values may differ though from machine to machine, and possibly even between compilers. Your mileage may vary. */ /* bits in base literal/length lookup table */ static ZCONST unsigned lbits = 9; /* bits in base distance lookup table */ static ZCONST unsigned dbits = 6; #ifndef ASM_INFLATECODES int inflate_codes(__G__ tl, td, bl, bd) __GDEF struct huft *tl, *td; /* literal/length and distance decoder tables */ unsigned bl, bd; /* number of bits decoded by tl[] and td[] */ /* inflate (decompress) the codes in a deflated (compressed) block. Return an error code or zero if it all goes ok. */ { register unsigned e; /* table entry flag/number of extra bits */ unsigned d; /* index for copy */ UINT_D64 n; /* length for copy (deflate64: might be 64k+2) */ UINT_D64 w; /* current window position (deflate64: up to 64k) */ struct huft *t; /* pointer to table entry */ unsigned ml, md; /* masks for bl and bd bits */ register ulg b; /* bit buffer */ register unsigned k; /* number of bits in bit buffer */ int retval = 0; /* error code returned: initialized to "no error" */ /* make local copies of globals */ b = G.bb; /* initialize bit buffer */ k = G.bk; w = G.wp; /* initialize window position */ /* inflate the coded data */ ml = mask_bits[bl]; /* precompute masks for speed */ md = mask_bits[bd]; while (1) /* do until end of block */ { NEEDBITS(bl) t = tl + ((unsigned)b & ml); while (1) { DUMPBITS(t->b) if ((e = t->e) == 32) /* then it's a literal */ { redirSlide[w++] = (uch)t->v.n; if (w == wsize) { if ((retval = FLUSH(w)) != 0) goto cleanup_and_exit; w = 0; } break; } if (e < 31) /* then it's a length */ { /* get length of block to copy */ NEEDBITS(e) n = t->v.n + ((unsigned)b & mask_bits[e]); DUMPBITS(e) /* decode distance of block to copy */ NEEDBITS(bd) t = td + ((unsigned)b & md); while (1) { DUMPBITS(t->b) if ((e = t->e) < 32) break; if (IS_INVALID_CODE(e)) return 1; e &= 31; NEEDBITS(e) t = t->v.t + ((unsigned)b & mask_bits[e]); } NEEDBITS(e) d = (unsigned)w - t->v.n - ((unsigned)b & mask_bits[e]); DUMPBITS(e) /* do the copy */ do { #if (defined(DLL) && !defined(NO_SLIDE_REDIR)) if (G.redirect_slide) { /* &= w/ wsize unnecessary & wrong if redirect */ if ((UINT_D64)d >= wsize) return 1; /* invalid compressed data */ e = (unsigned)(wsize - (d > (unsigned)w ? (UINT_D64)d : w)); } else #endif e = (unsigned)(wsize - ((d &= (unsigned)(wsize-1)) > (unsigned)w ? (UINT_D64)d : w)); if ((UINT_D64)e > n) e = (unsigned)n; n -= e; #ifndef NOMEMCPY if ((unsigned)w - d >= e) /* (this test assumes unsigned comparison) */ { memcpy(redirSlide + (unsigned)w, redirSlide + d, e); w += e; d += e; } else /* do it slowly to avoid memcpy() overlap */ #endif /* !NOMEMCPY */ do { redirSlide[w++] = redirSlide[d++]; } while (--e); if (w == wsize) { if ((retval = FLUSH(w)) != 0) goto cleanup_and_exit; w = 0; } } while (n); break; } if (e == 31) /* it's the EOB signal */ { /* sorry for this goto, but we have to exit two loops at once */ goto cleanup_decode; } if (IS_INVALID_CODE(e)) return 1; e &= 31; NEEDBITS(e) t = t->v.t + ((unsigned)b & mask_bits[e]); } } cleanup_decode: /* restore the globals from the locals */ G.wp = (unsigned)w; /* restore global window pointer */ G.bb = b; /* restore global bit buffer */ G.bk = k; cleanup_and_exit: /* done */ return retval; } #endif /* ASM_INFLATECODES */ static int inflate_stored(__G) __GDEF /* "decompress" an inflated type 0 (stored) block. */ { UINT_D64 w; /* current window position (deflate64: up to 64k!) */ unsigned n; /* number of bytes in block */ register ulg b; /* bit buffer */ register unsigned k; /* number of bits in bit buffer */ int retval = 0; /* error code returned: initialized to "no error" */ /* make local copies of globals */ Trace((stderr, "\nstored block")); b = G.bb; /* initialize bit buffer */ k = G.bk; w = G.wp; /* initialize window position */ /* go to byte boundary */ n = k & 7; DUMPBITS(n); /* get the length and its complement */ NEEDBITS(16) n = ((unsigned)b & 0xffff); DUMPBITS(16) NEEDBITS(16) if (n != (unsigned)((~b) & 0xffff)) return 1; /* error in compressed data */ DUMPBITS(16) /* read and output the compressed data */ while (n--) { NEEDBITS(8) redirSlide[w++] = (uch)b; if (w == wsize) { if ((retval = FLUSH(w)) != 0) goto cleanup_and_exit; w = 0; } DUMPBITS(8) } /* restore the globals from the locals */ G.wp = (unsigned)w; /* restore global window pointer */ G.bb = b; /* restore global bit buffer */ G.bk = k; cleanup_and_exit: return retval; } /* Globals for literal tables (built once) */ /* Moved to globals.h */ #if 0 struct huft *fixed_tl = (struct huft *)NULL; struct huft *fixed_td; int fixed_bl, fixed_bd; #endif static int inflate_fixed(__G) __GDEF /* decompress an inflated type 1 (fixed Huffman codes) block. We should either replace this with a custom decoder, or at least precompute the Huffman tables. */ { /* if first time, set up tables for fixed blocks */ Trace((stderr, "\nliteral block")); if (G.fixed_tl == (struct huft *)NULL) { int i; /* temporary variable */ unsigned l[288]; /* length list for huft_build */ /* literal table */ for (i = 0; i < 144; i++) l[i] = 8; for (; i < 256; i++) l[i] = 9; for (; i < 280; i++) l[i] = 7; for (; i < 288; i++) /* make a complete, but wrong code set */ l[i] = 8; G.fixed_bl = 7; #ifdef USE_DEFLATE64 if ((i = huft_build(__G__ l, 288, 257, G.cplens, G.cplext, &G.fixed_tl, &G.fixed_bl)) != 0) #else if ((i = huft_build(__G__ l, 288, 257, cplens, cplext, &G.fixed_tl, &G.fixed_bl)) != 0) #endif { G.fixed_tl = (struct huft *)NULL; return i; } /* distance table */ for (i = 0; i < MAXDISTS; i++) /* make an incomplete code set */ l[i] = 5; G.fixed_bd = 5; #ifdef USE_DEFLATE64 if ((i = huft_build(__G__ l, MAXDISTS, 0, cpdist, G.cpdext, &G.fixed_td, &G.fixed_bd)) > 1) #else if ((i = huft_build(__G__ l, MAXDISTS, 0, cpdist, cpdext, &G.fixed_td, &G.fixed_bd)) > 1) #endif { huft_free(G.fixed_tl); G.fixed_td = G.fixed_tl = (struct huft *)NULL; return i; } } /* decompress until an end-of-block code */ return inflate_codes(__G__ G.fixed_tl, G.fixed_td, G.fixed_bl, G.fixed_bd); } static int inflate_dynamic(__G) __GDEF /* decompress an inflated type 2 (dynamic Huffman codes) block. */ { unsigned i; /* temporary variables */ unsigned j; unsigned l; /* last length */ unsigned m; /* mask for bit lengths table */ unsigned n; /* number of lengths to get */ struct huft *tl = (struct huft *)NULL; /* literal/length code table */ struct huft *td = (struct huft *)NULL; /* distance code table */ struct huft *th; /* temp huft table pointer used in tables decoding */ unsigned bl; /* lookup bits for tl */ unsigned bd; /* lookup bits for td */ unsigned nb; /* number of bit length codes */ unsigned nl; /* number of literal/length codes */ unsigned nd; /* number of distance codes */ unsigned ll[MAXLITLENS+MAXDISTS]; /* lit./length and distance code lengths */ register ulg b; /* bit buffer */ register unsigned k; /* number of bits in bit buffer */ int retval = 0; /* error code returned: initialized to "no error" */ /* make local bit buffer */ Trace((stderr, "\ndynamic block")); b = G.bb; k = G.bk; /* read in table lengths */ NEEDBITS(5) nl = 257 + ((unsigned)b & 0x1f); /* number of literal/length codes */ DUMPBITS(5) NEEDBITS(5) nd = 1 + ((unsigned)b & 0x1f); /* number of distance codes */ DUMPBITS(5) NEEDBITS(4) nb = 4 + ((unsigned)b & 0xf); /* number of bit length codes */ DUMPBITS(4) if (nl > MAXLITLENS || nd > MAXDISTS) return 1; /* bad lengths */ /* read in bit-length-code lengths */ for (j = 0; j < nb; j++) { NEEDBITS(3) ll[border[j]] = (unsigned)b & 7; DUMPBITS(3) } for (; j < 19; j++) ll[border[j]] = 0; /* build decoding table for trees--single level, 7 bit lookup */ bl = 7; retval = huft_build(__G__ ll, 19, 19, NULL, NULL, &tl, &bl); if (bl == 0) /* no bit lengths */ retval = 1; if (retval) { if (retval == 1) huft_free(tl); return retval; /* incomplete code set */ } /* read in literal and distance code lengths */ n = nl + nd; m = mask_bits[bl]; i = l = 0; while (i < n) { NEEDBITS(bl) j = (th = tl + ((unsigned)b & m))->b; DUMPBITS(j) j = th->v.n; if (j < 16) /* length of code in bits (0..15) */ ll[i++] = l = j; /* save last length in l */ else if (j == 16) /* repeat last length 3 to 6 times */ { NEEDBITS(2) j = 3 + ((unsigned)b & 3); DUMPBITS(2) if ((unsigned)i + j > n) { huft_free(tl); return 1; } while (j--) ll[i++] = l; } else if (j == 17) /* 3 to 10 zero length codes */ { NEEDBITS(3) j = 3 + ((unsigned)b & 7); DUMPBITS(3) if ((unsigned)i + j > n) { huft_free(tl); return 1; } while (j--) ll[i++] = 0; l = 0; } else /* j == 18: 11 to 138 zero length codes */ { NEEDBITS(7) j = 11 + ((unsigned)b & 0x7f); DUMPBITS(7) if ((unsigned)i + j > n) { huft_free(tl); return 1; } while (j--) ll[i++] = 0; l = 0; } } /* free decoding table for trees */ huft_free(tl); /* restore the global bit buffer */ G.bb = b; G.bk = k; /* build the decoding tables for literal/length and distance codes */ bl = lbits; #ifdef USE_DEFLATE64 retval = huft_build(__G__ ll, nl, 257, G.cplens, G.cplext, &tl, &bl); #else retval = huft_build(__G__ ll, nl, 257, cplens, cplext, &tl, &bl); #endif if (bl == 0) /* no literals or lengths */ retval = 1; if (retval) { if (retval == 1) { if (!uO.qflag) MESSAGE((uch *)"(incomplete l-tree) ", 21L, 1); huft_free(tl); } return retval; /* incomplete code set */ } #ifdef FIX_PAST_EOB_BY_TABLEADJUST /* Adjust the requested distance base table size so that a distance code fetch never tries to get bits behind an immediatly following end-of-block code. */ bd = (dbits <= bl+1 ? dbits : bl+1); #else bd = dbits; #endif #ifdef USE_DEFLATE64 retval = huft_build(__G__ ll + nl, nd, 0, cpdist, G.cpdext, &td, &bd); #else retval = huft_build(__G__ ll + nl, nd, 0, cpdist, cpdext, &td, &bd); #endif #ifdef PKZIP_BUG_WORKAROUND if (retval == 1) retval = 0; #endif if (bd == 0 && nl > 257) /* lengths but no distances */ retval = 1; if (retval) { if (retval == 1) { if (!uO.qflag) MESSAGE((uch *)"(incomplete d-tree) ", 21L, 1); huft_free(td); } huft_free(tl); return retval; } /* decompress until an end-of-block code */ retval = inflate_codes(__G__ tl, td, bl, bd); cleanup_and_exit: /* free the decoding tables, return */ if (tl != (struct huft *)NULL) huft_free(tl); if (td != (struct huft *)NULL) huft_free(td); return retval; } static int inflate_block(__G__ e) __GDEF int *e; /* last block flag */ /* decompress an inflated block */ { unsigned t; /* block type */ register ulg b; /* bit buffer */ register unsigned k; /* number of bits in bit buffer */ int retval = 0; /* error code returned: initialized to "no error" */ /* make local bit buffer */ b = G.bb; k = G.bk; /* read in last block bit */ NEEDBITS(1) *e = (int)b & 1; DUMPBITS(1) /* read in block type */ NEEDBITS(2) t = (unsigned)b & 3; DUMPBITS(2) /* restore the global bit buffer */ G.bb = b; G.bk = k; /* inflate that block type */ if (t == 2) return inflate_dynamic(__G); if (t == 0) return inflate_stored(__G); if (t == 1) return inflate_fixed(__G); /* bad block type */ retval = 2; cleanup_and_exit: return retval; } int inflate(__G__ is_defl64) __GDEF int is_defl64; /* decompress an inflated entry */ { int e; /* last block flag */ int r; /* result code */ #ifdef DEBUG unsigned h = 0; /* maximum struct huft's malloc'ed */ #endif #if (defined(DLL) && !defined(NO_SLIDE_REDIR)) if (G.redirect_slide) wsize = G.redirect_size, redirSlide = G.redirect_buffer; else wsize = WSIZE, redirSlide = slide; /* how they're #defined if !DLL */ #endif /* initialize window, bit buffer */ G.wp = 0; G.bk = 0; G.bb = 0; #ifdef USE_DEFLATE64 if (is_defl64) { G.cplens = cplens64; G.cplext = cplext64; G.cpdext = cpdext64; G.fixed_tl = G.fixed_tl64; G.fixed_bl = G.fixed_bl64; G.fixed_td = G.fixed_td64; G.fixed_bd = G.fixed_bd64; } else { G.cplens = cplens32; G.cplext = cplext32; G.cpdext = cpdext32; G.fixed_tl = G.fixed_tl32; G.fixed_bl = G.fixed_bl32; G.fixed_td = G.fixed_td32; G.fixed_bd = G.fixed_bd32; } #else /* !USE_DEFLATE64 */ if (is_defl64) { /* This should not happen unless UnZip is built from object files * compiled with inconsistent option setting. Handle this by * returning with "bad input" error code. */ Trace((stderr, "\nThis inflate() cannot handle Deflate64!\n")); return 2; } #endif /* ?USE_DEFLATE64 */ /* decompress until the last block */ do { #ifdef DEBUG G.hufts = 0; #endif if ((r = inflate_block(__G__ &e)) != 0) return r; #ifdef DEBUG if (G.hufts > h) h = G.hufts; #endif } while (!e); Trace((stderr, "\n%u bytes in Huffman tables (%u/entry)\n", h * (unsigned)sizeof(struct huft), (unsigned)sizeof(struct huft))); #ifdef USE_DEFLATE64 if (is_defl64) { G.fixed_tl64 = G.fixed_tl; G.fixed_bl64 = G.fixed_bl; G.fixed_td64 = G.fixed_td; G.fixed_bd64 = G.fixed_bd; } else { G.fixed_tl32 = G.fixed_tl; G.fixed_bl32 = G.fixed_bl; G.fixed_td32 = G.fixed_td; G.fixed_bd32 = G.fixed_bd; } #endif /* flush out redirSlide and return (success, unless final FLUSH failed) */ return (FLUSH(G.wp)); } int inflate_free(__G) __GDEF { if (G.fixed_tl != (struct huft *)NULL) { huft_free(G.fixed_td); huft_free(G.fixed_tl); G.fixed_td = G.fixed_tl = (struct huft *)NULL; } return 0; } #endif /* ?USE_ZLIB */ /* * GRR: moved huft_build() and huft_free() down here; used by explode() * and fUnZip regardless of whether USE_ZLIB defined or not */ /* If BMAX needs to be larger than 16, then h and x[] should be ulg. */ #define BMAX 16 /* maximum bit length of any code (16 for explode) */ #define N_MAX 288 /* maximum number of codes in any set */ int huft_build(__G__ b, n, s, d, e, t, m) __GDEF ZCONST unsigned *b; /* code lengths in bits (all assumed <= BMAX) */ unsigned n; /* number of codes (assumed <= N_MAX) */ unsigned s; /* number of simple-valued codes (0..s-1) */ ZCONST ush *d; /* list of base values for non-simple codes */ ZCONST uch *e; /* list of extra bits for non-simple codes */ struct huft **t; /* result: starting table */ unsigned *m; /* maximum lookup bits, returns actual */ /* Given a list of code lengths and a maximum table size, make a set of tables to decode that set of codes. Return zero on success, one if the given code set is incomplete (the tables are still built in this case), two if the input is invalid (all zero length codes or an oversubscribed set of lengths), and three if not enough memory. The code with value 256 is special, and the tables are constructed so that no bits beyond that code are fetched when that code is decoded. */ { unsigned a; /* counter for codes of length k */ unsigned c[BMAX+1]; /* bit length count table */ unsigned el; /* length of EOB code (value 256) */ unsigned f; /* i repeats in table every f entries */ int g; /* maximum code length */ int h; /* table level */ register unsigned i; /* counter, current code */ register unsigned j; /* counter */ register int k; /* number of bits in current code */ int lx[BMAX+1]; /* memory for l[-1..BMAX-1] */ int *l = lx+1; /* stack of bits per table */ register unsigned *p; /* pointer into c[], b[], or v[] */ register struct huft *q; /* points to current table */ struct huft r; /* table entry for structure assignment */ struct huft *u[BMAX]; /* table stack */ unsigned v[N_MAX]; /* values in order of bit length */ register int w; /* bits before this table == (l * h) */ unsigned x[BMAX+1]; /* bit offsets, then code stack */ unsigned *xp; /* pointer into x */ int y; /* number of dummy codes added */ unsigned z; /* number of entries in current table */ /* Generate counts for each bit length */ el = n > 256 ? b[256] : BMAX; /* set length of EOB code, if any */ memzero((char *)c, sizeof(c)); p = (unsigned *)b; i = n; do { c[*p]++; p++; /* assume all entries <= BMAX */ } while (--i); if (c[0] == n) /* null input--all zero length codes */ { *t = (struct huft *)NULL; *m = 0; return 0; } /* Find minimum and maximum length, bound *m by those */ for (j = 1; j <= BMAX; j++) if (c[j]) break; k = j; /* minimum code length */ if (*m < j) *m = j; for (i = BMAX; i; i--) if (c[i]) break; g = i; /* maximum code length */ if (*m > i) *m = i; /* Adjust last length count to fill out codes, if needed */ for (y = 1 << j; j < i; j++, y <<= 1) if ((y -= c[j]) < 0) return 2; /* bad input: more codes than bits */ if ((y -= c[i]) < 0) return 2; c[i] += y; /* Generate starting offsets into the value table for each length */ x[1] = j = 0; p = c + 1; xp = x + 2; while (--i) { /* note that i == g from above */ *xp++ = (j += *p++); } /* Make a table of values in order of bit lengths */ memzero((char *)v, sizeof(v)); p = (unsigned *)b; i = 0; do { if ((j = *p++) != 0) v[x[j]++] = i; } while (++i < n); n = x[g]; /* set n to length of v */ /* Generate the Huffman codes and for each, make the table entries */ x[0] = i = 0; /* first Huffman code is zero */ p = v; /* grab values in bit order */ h = -1; /* no tables yet--level -1 */ w = l[-1] = 0; /* no bits decoded yet */ u[0] = (struct huft *)NULL; /* just to keep compilers happy */ q = (struct huft *)NULL; /* ditto */ z = 0; /* ditto */ /* go through the bit lengths (k already is bits in shortest code) */ for (; k <= g; k++) { a = c[k]; while (a--) { /* here i is the Huffman code of length k bits for value *p */ /* make tables up to required level */ while (k > w + l[h]) { w += l[h++]; /* add bits already decoded */ /* compute minimum size table less than or equal to *m bits */ z = (z = g - w) > *m ? *m : z; /* upper limit */ if ((f = 1 << (j = k - w)) > a + 1) /* try a k-w bit table */ { /* too few codes for k-w bit table */ f -= a + 1; /* deduct codes from patterns left */ xp = c + k; while (++j < z) /* try smaller tables up to z bits */ { if ((f <<= 1) <= *++xp) break; /* enough codes to use up j bits */ f -= *xp; /* else deduct codes from patterns */ } } if ((unsigned)w + j > el && (unsigned)w < el) j = el - w; /* make EOB code end at table */ z = 1 << j; /* table entries for j-bit table */ l[h] = j; /* set table size in stack */ /* allocate and link in new table */ if ((q = (struct huft *)malloc((z + 1)*sizeof(struct huft))) == (struct huft *)NULL) { if (h) huft_free(u[0]); return 3; /* not enough memory */ } #ifdef DEBUG G.hufts += z + 1; /* track memory usage */ #endif *t = q + 1; /* link to list for huft_free() */ *(t = &(q->v.t)) = (struct huft *)NULL; u[h] = ++q; /* table starts after link */ /* connect to last table, if there is one */ if (h) { x[h] = i; /* save pattern for backing up */ r.b = (uch)l[h-1]; /* bits to dump before this table */ r.e = (uch)(32 + j); /* bits in this table */ r.v.t = q; /* pointer to this table */ j = (i & ((1 << w) - 1)) >> (w - l[h-1]); u[h-1][j] = r; /* connect to last table */ } } /* set up table entry in r */ r.b = (uch)(k - w); if (p >= v + n) r.e = INVALID_CODE; /* out of values--invalid code */ else if (*p < s) { r.e = (uch)(*p < 256 ? 32 : 31); /* 256 is end-of-block code */ r.v.n = (ush)*p++; /* simple code is just the value */ } else { r.e = e[*p - s]; /* non-simple--look up in lists */ r.v.n = d[*p++ - s]; } /* fill code-like entries with r */ f = 1 << (k - w); for (j = i >> w; j < z; j += f) q[j] = r; /* backwards increment the k-bit code i */ for (j = 1 << (k - 1); i & j; j >>= 1) i ^= j; i ^= j; /* backup over finished tables */ while ((i & ((1 << w) - 1)) != x[h]) w -= l[--h]; /* don't need to update q */ } } /* return actual size of base table */ *m = l[0]; /* Return true (1) if we were given an incomplete table */ return y != 0 && g != 1; } int huft_free(t) struct huft *t; /* table to free */ /* Free the malloc'ed tables built by huft_build(), which makes a linked list of the tables it made, with the links in a dummy first entry of each table. */ { register struct huft *p, *q; /* Go through linked list, freeing from the malloced (t[-1]) address. */ p = t; while (p != (struct huft *)NULL) { q = (--p)->v.t; free((zvoid *)p); p = q; } return 0; } Carla-2.4.2/data/windows/unzipfx-carla/inflate.h000066400000000000000000000033051420416754300215310ustar00rootroot00000000000000/* Copyright (c) 1990-2000 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2000-Apr-09 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /* inflate.h for UnZip -- by Mark Adler version c14f, 23 November 1995 */ /* Copyright history: - Starting with UnZip 5.41 of 16-April-2000, this source file is covered by the Info-Zip LICENSE cited above. - Prior versions of this source file, found in UnZip source packages up to UnZip 5.40, were put in the public domain. The original copyright note by Mark Adler was: "You can do whatever you like with this source file, though I would prefer that if you modify it and redistribute it that you include comments to that effect with your name and the date. Thank you." History: vers date who what ---- --------- -------------- ------------------------------------ c14 12 Mar 93 M. Adler made inflate.c standalone with the introduction of inflate.h. c14d 28 Aug 93 G. Roelofs replaced flush/FlushOutput with new version c14e 29 Sep 93 G. Roelofs moved everything into unzip.h; added crypt.h c14f 23 Nov 95 G. Roelofs added UNZIP_INTERNAL to accommodate newly split unzip.h */ #define UNZIP_INTERNAL #include "unzip.h" /* provides slide[], typedefs and macros */ #ifdef FUNZIP # include "crypt.h" /* provides NEXTBYTE macro for crypt version of funzip */ #endif Carla-2.4.2/data/windows/unzipfx-carla/match.c000066400000000000000000000367721420416754300212140ustar00rootroot00000000000000/* Copyright (c) 1990-2005 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2000-Apr-09 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- match.c The match() routine recursively compares a string to a "pattern" (regular expression), returning TRUE if a match is found or FALSE if not. This version is specifically for use with unzip.c: as did the previous match() routines from SEA and J. Kercheval, it leaves the case (upper, lower, or mixed) of the string alone, but converts any uppercase characters in the pattern to lowercase if indicated by the global var pInfo->lcflag (which is to say, string is assumed to have been converted to lowercase already, if such was necessary). GRR: reversed order of text, pattern in matche() (now same as match()); added ignore_case/ic flags, Case() macro. PaulK: replaced matche() with recmatch() from Zip, modified to have an ignore_case argument; replaced test frame with simpler one. --------------------------------------------------------------------------- Copyright on recmatch() from Zip's util.c (although recmatch() was almost certainly written by Mark Adler...ask me how I can tell :-) ): Copyright (C) 1990-1992 Mark Adler, Richard B. Wales, Jean-loup Gailly, Kai Uwe Rommel and Igor Mandrichenko. Permission is granted to any individual or institution to use, copy, or redistribute this software so long as all of the original files are included unmodified, that it is not sold for profit, and that this copy- right notice is retained. --------------------------------------------------------------------------- Match the pattern (wildcard) against the string (fixed): match(string, pattern, ignore_case, sepc); returns TRUE if string matches pattern, FALSE otherwise. In the pattern: `*' matches any sequence of characters (zero or more) `?' matches any single character [SET] matches any character in the specified set, [!SET] or [^SET] matches any character not in the specified set. A set is composed of characters or ranges; a range looks like ``character hyphen character'' (as in 0-9 or A-Z). [0-9a-zA-Z_] is the minimal set of characters allowed in the [..] pattern construct. Other characters are allowed (i.e., 8-bit characters) if your system will support them. To suppress the special syntactic significance of any of ``[]*?!^-\'', in- side or outside a [..] construct, and match the character exactly, precede it with a ``\'' (backslash). Note that "*.*" and "*." are treated specially under MS-DOS if DOSWILD is defined. See the DOSWILD section below for an explanation. Note also that with VMSWILD defined, '%' is used instead of '?', and sets (ranges) are delimited by () instead of []. ---------------------------------------------------------------------------*/ #define __MATCH_C /* identifies this source module */ /* define ToLower() in here (for Unix, define ToLower to be macro (using * isupper()); otherwise just use tolower() */ #define UNZIP_INTERNAL #include "unzip.h" #ifndef THEOS /* the Theos port defines its own variant of match() */ #if 0 /* this is not useful until it matches Amiga names insensitively */ #ifdef AMIGA /* some other platforms might also want to use this */ # define ANSI_CHARSET /* MOVE INTO UNZIP.H EVENTUALLY */ #endif #endif /* 0 */ #ifdef ANSI_CHARSET # ifdef ToLower # undef ToLower # endif /* uppercase letters are values 41 thru 5A, C0 thru D6, and D8 thru DE */ # define IsUpper(c) (c>=0xC0 ? c<=0xDE && c!=0xD7 : c>=0x41 && c<=0x5A) # define ToLower(c) (IsUpper((uch) c) ? (unsigned) c | 0x20 : (unsigned) c) #endif #define Case(x) (ic? ToLower(x) : (x)) #ifdef VMSWILD # define WILDCHAR '%' # define BEG_RANGE '(' # define END_RANGE ')' #else # define WILDCHAR '?' # define BEG_RANGE '[' # define END_RANGE ']' #endif #if 0 /* GRR: add this to unzip.h someday... */ #if !(defined(MSDOS) && defined(DOSWILD)) #ifdef WILD_STOP_AT_DIR #define match(s,p,ic,sc) (recmatch((ZCONST uch *)p,(ZCONST uch *)s,ic,sc) == 1) #else #define match(s,p,ic) (recmatch((ZCONST uch *)p,(ZCONST uch *)s,ic) == 1) #endif int recmatch OF((ZCONST uch *pattern, ZCONST uch *string, int ignore_case __WDLPRO)); #endif #endif /* 0 */ static int recmatch OF((ZCONST uch *pattern, ZCONST uch *string, int ignore_case __WDLPRO)); static char *isshexp OF((ZCONST char *p)); static int namecmp OF((ZCONST char *s1, ZCONST char *s2)); /* match() is a shell to recmatch() to return only Boolean values. */ int match(string, pattern, ignore_case __WDL) ZCONST char *string, *pattern; int ignore_case; __WDLDEF { #if (defined(MSDOS) && defined(DOSWILD)) char *dospattern; int j = strlen(pattern); /*--------------------------------------------------------------------------- Optional MS-DOS preprocessing section: compare last three chars of the wildcard to "*.*" and translate to "*" if found; else compare the last two characters to "*." and, if found, scan the non-wild string for dots. If in the latter case a dot is found, return failure; else translate the "*." to "*". In either case, continue with the normal (Unix-like) match procedure after translation. (If not enough memory, default to normal match.) This causes "a*.*" and "a*." to behave as MS-DOS users expect. ---------------------------------------------------------------------------*/ if ((dospattern = (char *)malloc(j+1)) != NULL) { strcpy(dospattern, pattern); if (!strcmp(dospattern+j-3, "*.*")) { dospattern[j-2] = '\0'; /* nuke the ".*" */ } else if (!strcmp(dospattern+j-2, "*.")) { char *p = MBSCHR(string, '.'); if (p) { /* found a dot: match fails */ free(dospattern); return 0; } dospattern[j-1] = '\0'; /* nuke the end "." */ } j = recmatch((uch *)dospattern, (uch *)string, ignore_case __WDL); free(dospattern); return j == 1; } else #endif /* MSDOS && DOSWILD */ return recmatch((uch *)pattern, (uch *)string, ignore_case __WDL) == 1; } static int recmatch(p, s, ic __WDL) ZCONST uch *p; /* sh pattern to match */ ZCONST uch *s; /* string to which to match it */ int ic; /* true for case insensitivity */ __WDLDEF /* directory sepchar for WildStopAtDir mode, or 0 */ /* Recursively compare the sh pattern p with the string s and return 1 if * they match, and 0 or 2 if they don't or if there is a syntax error in the * pattern. This routine recurses on itself no more deeply than the number * of characters in the pattern. */ { unsigned int c; /* pattern char or start of range in [-] loop */ /* Get first character, the pattern for new recmatch calls follows */ c = *p; INCSTR(p); /* If that was the end of the pattern, match if string empty too */ if (c == 0) return *s == 0; /* '?' (or '%') matches any character (but not an empty string). */ if (c == WILDCHAR) #ifdef WILD_STOP_AT_DIR /* If uO.W_flag is non-zero, it won't match '/' */ return (*s && (!sepc || *s != (uch)sepc)) ? recmatch(p, s + CLEN(s), ic, sepc) : 0; #else return *s ? recmatch(p, s + CLEN(s), ic) : 0; #endif /* '*' matches any number of characters, including zero */ #ifdef AMIGA if (c == '#' && *p == '?') /* "#?" is Amiga-ese for "*" */ c = '*', p++; #endif /* AMIGA */ if (c == '*') { #ifdef WILD_STOP_AT_DIR if (sepc) { /* check for single "*" or double "**" */ # ifdef AMIGA if ((c = p[0]) == '#' && p[1] == '?') /* "#?" is Amiga-ese for "*" */ c = '*', p++; if (c != '*') { # else /* !AMIGA */ if (*p != '*') { # endif /* ?AMIGA */ /* single "*": this doesn't match the dirsep character */ for (; *s && *s != (uch)sepc; INCSTR(s)) if ((c = recmatch(p, s, ic, sepc)) != 0) return (int)c; /* end of pattern: matched if at end of string, else continue */ if (*p == '\0') return (*s == 0); /* continue to match if at sepc in pattern, else give up */ return (*p == (uch)sepc || (*p == '\\' && p[1] == (uch)sepc)) ? recmatch(p, s, ic, sepc) : 2; } /* "**": this matches slashes */ ++p; /* move p behind the second '*' */ /* and continue with the non-W_flag code variant */ } #endif /* WILD_STOP_AT_DIR */ if (*p == 0) return 1; if (isshexp((ZCONST char *)p) == NULL) { /* Optimization for rest of pattern being a literal string: * If there are no other shell expression chars in the rest * of the pattern behind the multi-char wildcard, then just * compare the literal string tail. */ ZCONST uch *srest; srest = s + (strlen((ZCONST char *)s) - strlen((ZCONST char *)p)); if (srest - s < 0) /* remaining literal string from pattern is longer than rest * of test string, there can't be a match */ return 0; else /* compare the remaining literal pattern string with the last * bytes of the test string to check for a match */ #ifdef _MBCS { ZCONST uch *q = s; /* MBCS-aware code must not scan backwards into a string from * the end. * So, we have to move forward by character from our well-known * character position s in the test string until we have * advanced to the srest position. */ while (q < srest) INCSTR(q); /* In case the byte *srest is a trailing byte of a multibyte * character in the test string s, we have actually advanced * past the position (srest). * For this case, the match has failed! */ if (q != srest) return 0; return ((ic ? namecmp((ZCONST char *)p, (ZCONST char *)q) : strcmp((ZCONST char *)p, (ZCONST char *)q) ) == 0); } #else /* !_MBCS */ return ((ic ? namecmp((ZCONST char *)p, (ZCONST char *)srest) : strcmp((ZCONST char *)p, (ZCONST char *)srest) ) == 0); #endif /* ?_MBCS */ } else { /* pattern contains more wildcards, continue with recursion... */ for (; *s; INCSTR(s)) if ((c = recmatch(p, s, ic __WDL)) != 0) return (int)c; return 2; /* 2 means give up--match will return false */ } } /* Parse and process the list of characters and ranges in brackets */ if (c == BEG_RANGE) { int e; /* flag true if next char to be taken literally */ ZCONST uch *q; /* pointer to end of [-] group */ int r; /* flag true to match anything but the range */ if (*s == 0) /* need a character to match */ return 0; p += (r = (*p == '!' || *p == '^')); /* see if reverse */ for (q = p, e = 0; *q; INCSTR(q)) /* find closing bracket */ if (e) e = 0; else if (*q == '\\') /* GRR: change to ^ for MS-DOS, OS/2? */ e = 1; else if (*q == END_RANGE) break; if (*q != END_RANGE) /* nothing matches if bad syntax */ return 0; for (c = 0, e = (*p == '-'); p < q; INCSTR(p)) { /* go through the list */ if (!e && *p == '\\') /* set escape flag if \ */ e = 1; else if (!e && *p == '-') /* set start of range if - */ c = *(p-1); else { unsigned int cc = Case(*s); if (*(p+1) != '-') for (c = c ? c : *p; c <= *p; c++) /* compare range */ if ((unsigned)Case(c) == cc) /* typecast for MSC bug */ return r ? 0 : recmatch(q + 1, s + 1, ic __WDL); c = e = 0; /* clear range, escape flags */ } } return r ? recmatch(q + CLEN(q), s + CLEN(s), ic __WDL) : 0; /* bracket match failed */ } /* if escape ('\\'), just compare next character */ if (c == '\\' && (c = *p++) == 0) /* if \ at end, then syntax error */ return 0; /* just a character--compare it */ #ifdef QDOS return QMatch(Case((uch)c), Case(*s)) ? recmatch(p, s + CLEN(s), ic __WDL) : 0; #else return Case((uch)c) == Case(*s) ? recmatch(p, s + CLEN(s), ic __WDL) : 0; #endif } /* end function recmatch() */ static char *isshexp(p) ZCONST char *p; /* If p is a sh expression, a pointer to the first special character is returned. Otherwise, NULL is returned. */ { for (; *p; INCSTR(p)) if (*p == '\\' && *(p+1)) p++; else if (*p == WILDCHAR || *p == '*' || *p == BEG_RANGE) return (char *)p; return NULL; } /* end function isshexp() */ static int namecmp(s1, s2) ZCONST char *s1, *s2; { int d; for (;;) { d = (int)ToLower((uch)*s1) - (int)ToLower((uch)*s2); if (d || *s1 == 0 || *s2 == 0) return d; s1++; s2++; } } /* end function namecmp() */ #endif /* !THEOS */ int iswild(p) /* originally only used for stat()-bug workaround in */ ZCONST char *p; /* VAX C, Turbo/Borland C, Watcom C, Atari MiNT libs; */ { /* now used in process_zipfiles() as well */ for (; *p; INCSTR(p)) if (*p == '\\' && *(p+1)) ++p; #ifdef THEOS else if (*p == '?' || *p == '*' || *p=='#'|| *p == '@') #else /* !THEOS */ #ifdef VMS else if (*p == '%' || *p == '*') #else /* !VMS */ #ifdef AMIGA else if (*p == '?' || *p == '*' || (*p=='#' && p[1]=='?') || *p == '[') #else /* !AMIGA */ else if (*p == '?' || *p == '*' || *p == '[') #endif /* ?AMIGA */ #endif /* ?VMS */ #endif /* ?THEOS */ #ifdef QDOS return (int)p; #else return TRUE; #endif return FALSE; } /* end function iswild() */ #ifdef TEST_MATCH #define put(s) {fputs(s,stdout); fflush(stdout);} #ifdef main # undef main #endif int main(int argc, char **argv) { char pat[256], str[256]; for (;;) { put("Pattern (return to exit): "); gets(pat); if (!pat[0]) break; for (;;) { put("String (return for new pattern): "); gets(str); if (!str[0]) break; printf("Case sensitive: %s insensitive: %s\n", match(str, pat, 0) ? "YES" : "NO", match(str, pat, 1) ? "YES" : "NO"); } } EXIT(0); } #endif /* TEST_MATCH */ Carla-2.4.2/data/windows/unzipfx-carla/process.c000066400000000000000000003250071420416754300215660ustar00rootroot00000000000000/* Copyright (c) 1990-2009 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2009-Jan-02 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- process.c This file contains the top-level routines for processing multiple zipfiles. Contains: process_zipfiles() free_G_buffers() do_seekable() file_size() rec_find() find_ecrec64() find_ecrec() process_zip_cmmnt() process_cdir_file_hdr() get_cdir_ent() process_local_file_hdr() getZip64Data() ef_scan_for_izux() getRISCOSexfield() ---------------------------------------------------------------------------*/ #define UNZIP_INTERNAL #include "unzip.h" #ifdef WINDLL # ifdef POCKET_UNZIP # include "wince/intrface.h" # else # include "windll/windll.h" # endif #endif #if defined(DYNALLOC_CRCTAB) || defined(UNICODE_SUPPORT) # include "crc32.h" #endif #include "unzipfx/appDetails.h" static int do_seekable OF((__GPRO__ int lastchance)); #ifdef DO_SAFECHECK_2GB # ifdef USE_STRM_INPUT static zoff_t file_size OF((FILE *file)); # else static zoff_t file_size OF((int fh)); # endif #endif /* DO_SAFECHECK_2GB */ static int rec_find OF((__GPRO__ zoff_t, char *, int)); static int find_ecrec64 OF((__GPRO__ zoff_t searchlen)); static int find_ecrec OF((__GPRO__ zoff_t searchlen)); static int process_zip_cmmnt OF((__GPRO)); static int get_cdir_ent OF((__GPRO)); #ifdef IZ_HAVE_UXUIDGID static int read_ux3_value OF((ZCONST uch *dbuf, unsigned uidgid_sz, ulg *p_uidgid)); #endif /* IZ_HAVE_UXUIDGID */ static ZCONST char Far CannotAllocateBuffers[] = "error: cannot allocate unzip buffers\n"; #ifdef SFX static ZCONST char Far CannotFindMyself[] = "unzipsfx: cannot find myself! [%s]\n"; # ifdef CHEAP_SFX_AUTORUN static ZCONST char Far AutorunPrompt[] = "\nAuto-run command: %s\nExecute this command? [y/n] "; static ZCONST char Far NotAutoRunning[] = "Not executing auto-run command."; # endif #else /* !SFX */ /* process_zipfiles() strings */ # if (defined(IZ_CHECK_TZ) && defined(USE_EF_UT_TIME)) static ZCONST char Far WarnInvalidTZ[] = "Warning: TZ environment variable not found, cannot use UTC times!!\n"; # endif # if !(defined(UNIX) || defined(AMIGA)) static ZCONST char Far CannotFindWildcardMatch[] = "%s: cannot find any matches for wildcard specification \"%s\".\n"; # endif /* !(UNIX || AMIGA) */ static ZCONST char Far FilesProcessOK[] = "%d archive%s successfully processed.\n"; static ZCONST char Far ArchiveWarning[] = "%d archive%s had warnings but no fatal errors.\n"; static ZCONST char Far ArchiveFatalError[] = "%d archive%s had fatal errors.\n"; static ZCONST char Far FileHadNoZipfileDir[] = "%d file%s had no zipfile directory.\n"; static ZCONST char Far ZipfileWasDir[] = "1 \"zipfile\" was a directory.\n"; static ZCONST char Far ManyZipfilesWereDir[] = "%d \"zipfiles\" were directories.\n"; static ZCONST char Far NoZipfileFound[] = "No zipfiles found.\n"; /* do_seekable() strings */ # ifdef UNIX static ZCONST char Far CannotFindZipfileDirMsg[] = "%s: cannot find zipfile directory in one of %s or\n\ %s%s.zip, and cannot find %s, period.\n"; static ZCONST char Far CannotFindEitherZipfile[] = "%s: cannot find or open %s, %s.zip or %s.\n"; # else /* !UNIX */ static ZCONST char Far CannotFindZipfileDirMsg[] = "%s: cannot find zipfile directory in %s,\n\ %sand cannot find %s, period.\n"; # ifdef VMS static ZCONST char Far CannotFindEitherZipfile[] = "%s: cannot find %s (%s).\n"; # else /* !VMS */ static ZCONST char Far CannotFindEitherZipfile[] = "%s: cannot find either %s or %s.\n"; # endif /* ?VMS */ # endif /* ?UNIX */ extern ZCONST char Far Zipnfo[]; /* in unzip.c */ #ifndef WINDLL static ZCONST char Far Unzip[] = "unzip"; #else static ZCONST char Far Unzip[] = "UnZip DLL"; #endif #ifdef DO_SAFECHECK_2GB static ZCONST char Far ZipfileTooBig[] = "Trying to read large file (> 2 GiB) without large file support\n"; #endif /* DO_SAFECHECK_2GB */ static ZCONST char Far MaybeExe[] = "note: %s may be a plain executable, not an archive\n"; static ZCONST char Far CentDirNotInZipMsg[] = "\n\ [%s]:\n\ Zipfile is disk %lu of a multi-disk archive, and this is not the disk on\n\ which the central zipfile directory begins (disk %lu).\n"; static ZCONST char Far EndCentDirBogus[] = "\nwarning [%s]: end-of-central-directory record claims this\n\ is disk %lu but that the central directory starts on disk %lu; this is a\n\ contradiction. Attempting to process anyway.\n"; # ifdef NO_MULTIPART static ZCONST char Far NoMultiDiskArcSupport[] = "\nerror [%s]: zipfile is part of multi-disk archive\n\ (sorry, not yet supported).\n"; static ZCONST char Far MaybePakBug[] = "warning [%s]:\ zipfile claims to be 2nd disk of a 2-part archive;\n\ attempting to process anyway. If no further errors occur, this archive\n\ was probably created by PAK v2.51 or earlier. This bug was reported to\n\ NoGate in March 1991 and was supposed to have been fixed by mid-1991; as\n\ of mid-1992 it still hadn't been. (If further errors do occur, archive\n\ was probably created by PKZIP 2.04c or later; UnZip does not yet support\n\ multi-part archives.)\n"; # else static ZCONST char Far MaybePakBug[] = "warning [%s]:\ zipfile claims to be last disk of a multi-part archive;\n\ attempting to process anyway, assuming all parts have been concatenated\n\ together in order. Expect \"errors\" and warnings...true multi-part support\ \n doesn't exist yet (coming soon).\n"; # endif static ZCONST char Far ExtraBytesAtStart[] = "warning [%s]: %s extra byte%s at beginning or within zipfile\n\ (attempting to process anyway)\n"; #endif /* ?SFX */ #if ((!defined(WINDLL) && !defined(SFX)) || !defined(NO_ZIPINFO)) static ZCONST char Far LogInitline[] = "Archive: %s\n"; #endif static ZCONST char Far MissingBytes[] = "error [%s]: missing %s bytes in zipfile\n\ (attempting to process anyway)\n"; static ZCONST char Far NullCentDirOffset[] = "error [%s]: NULL central directory offset\n\ (attempting to process anyway)\n"; static ZCONST char Far ZipfileEmpty[] = "warning [%s]: zipfile is empty\n"; static ZCONST char Far CentDirStartNotFound[] = "error [%s]: start of central directory not found;\n\ zipfile corrupt.\n%s"; static ZCONST char Far Cent64EndSigSearchErr[] = "fatal error: read failure while seeking for End-of-centdir-64 signature.\n\ This zipfile is corrupt.\n"; static ZCONST char Far Cent64EndSigSearchOff[] = "error: End-of-centdir-64 signature not where expected (prepended bytes?)\n\ (attempting to process anyway)\n"; #ifndef SFX static ZCONST char Far CentDirTooLong[] = "error [%s]: reported length of central directory is\n\ %s bytes too long (Atari STZip zipfile? J.H.Holm ZIPSPLIT 1.1\n\ zipfile?). Compensating...\n"; static ZCONST char Far CentDirEndSigNotFound[] = "\ End-of-central-directory signature not found. Either this file is not\n\ a zipfile, or it constitutes one disk of a multi-part archive. In the\n\ latter case the central directory and zipfile comment will be found on\n\ the last disk(s) of this archive.\n"; #else /* SFX */ static ZCONST char Far CentDirEndSigNotFound[] = " End-of-central-directory signature not found.\n"; #endif /* ?SFX */ #ifdef TIMESTAMP static ZCONST char Far ZipTimeStampFailed[] = "warning: cannot set time for %s\n"; static ZCONST char Far ZipTimeStampSuccess[] = "Updated time stamp for %s.\n"; #endif static ZCONST char Far ZipfileCommTrunc1[] = "\ncaution: zipfile comment truncated\n"; #ifndef NO_ZIPINFO static ZCONST char Far NoZipfileComment[] = "There is no zipfile comment.\n"; static ZCONST char Far ZipfileCommentDesc[] = "The zipfile comment is %u bytes long and contains the following text:\n"; static ZCONST char Far ZipfileCommBegin[] = "======================== zipfile comment begins\ ==========================\n"; static ZCONST char Far ZipfileCommEnd[] = "========================= zipfile comment ends\ ===========================\n"; static ZCONST char Far ZipfileCommTrunc2[] = "\n The zipfile comment is truncated.\n"; #endif /* !NO_ZIPINFO */ #ifdef UNICODE_SUPPORT static ZCONST char Far UnicodeVersionError[] = "\nwarning: Unicode Path version > 1\n"; static ZCONST char Far UnicodeMismatchError[] = "\nwarning: Unicode Path checksum invalid\n"; #endif /*******************************/ /* Function process_zipfiles() */ /*******************************/ int process_zipfiles(__G) /* return PK-type error code */ __GDEF { #ifndef SFX char *lastzipfn = (char *)NULL; int NumWinFiles, NumLoseFiles, NumWarnFiles; int NumMissDirs, NumMissFiles; #endif int error=0, error_in_archive=0; /*--------------------------------------------------------------------------- Start by allocating buffers and (re)constructing the various PK signature strings. ---------------------------------------------------------------------------*/ G.inbuf = (uch *)malloc(INBUFSIZ + 4); /* 4 extra for hold[] (below) */ G.outbuf = (uch *)malloc(OUTBUFSIZ + 1); /* 1 extra for string term. */ if ((G.inbuf == (uch *)NULL) || (G.outbuf == (uch *)NULL)) { Info(slide, 0x401, ((char *)slide, LoadFarString(CannotAllocateBuffers))); return(PK_MEM); } G.hold = G.inbuf + INBUFSIZ; /* to check for boundary-spanning sigs */ #ifndef VMS /* VMS uses its own buffer scheme for textmode flush(). */ #ifdef SMALL_MEM G.outbuf2 = G.outbuf+RAWBUFSIZ; /* never changes */ #endif #endif /* !VMS */ #if 0 /* CRC_32_TAB has been NULLified by CONSTRUCTGLOBALS !!!! */ /* allocate the CRC table later when we know we can read zipfile data */ CRC_32_TAB = NULL; #endif /* 0 */ /* finish up initialization of magic signature strings */ local_hdr_sig[0] /* = extd_local_sig[0] */ = /* ASCII 'P', */ central_hdr_sig[0] = end_central_sig[0] = /* not EBCDIC */ end_centloc64_sig[0] = end_central64_sig[0] = 0x50; local_hdr_sig[1] /* = extd_local_sig[1] */ = /* ASCII 'K', */ central_hdr_sig[1] = end_central_sig[1] = /* not EBCDIC */ end_centloc64_sig[1] = end_central64_sig[1] = 0x4B; /*--------------------------------------------------------------------------- Make sure timezone info is set correctly; localtime() returns GMT on some OSes (e.g., Solaris 2.x) if this isn't done first. The ifdefs around tzset() were initially copied from dos_to_unix_time() in fileio.c. They may still be too strict; any listed OS that supplies tzset(), regardless of whether the function does anything, should be removed from the ifdefs. ---------------------------------------------------------------------------*/ #if (defined(WIN32) && defined(USE_EF_UT_TIME)) /* For the Win32 environment, we may have to "prepare" the environment prior to the tzset() call, to work around tzset() implementation bugs. */ iz_w32_prepareTZenv(); #endif #if (defined(IZ_CHECK_TZ) && defined(USE_EF_UT_TIME)) # ifndef VALID_TIMEZONE # define VALID_TIMEZONE(tmp) \ (((tmp = getenv("TZ")) != NULL) && (*tmp != '\0')) # endif { char *p; G.tz_is_valid = VALID_TIMEZONE(p); # ifndef SFX if (!G.tz_is_valid) { Info(slide, 0x401, ((char *)slide, LoadFarString(WarnInvalidTZ))); error_in_archive = error = PK_WARN; } # endif /* !SFX */ } #endif /* IZ_CHECK_TZ && USE_EF_UT_TIME */ /* For systems that do not have tzset() but supply this function using another name (_tzset() or something similar), an appropiate "#define tzset ..." should be added to the system specifc configuration section. */ #if (!defined(T20_VMS) && !defined(MACOS) && !defined(RISCOS) && !defined(QDOS)) #if (!defined(BSD) && !defined(MTS) && !defined(CMS_MVS) && !defined(TANDEM)) tzset(); #endif #endif /* Initialize UnZip's built-in pseudo hard-coded "ISO <--> OEM" translation, depending on the detected codepage setup. */ #ifdef NEED_ISO_OEM_INIT prepare_ISO_OEM_translat(__G); #endif /*--------------------------------------------------------------------------- Initialize the internal flag holding the mode of processing "overwrite existing file" cases. We do not use the calling interface flags directly because the overwrite mode may be changed by user interaction while processing archive files. Such a change should not affect the option settings as passed through the DLL calling interface. In case of conflicting options, the 'safer' flag uO.overwrite_none takes precedence. ---------------------------------------------------------------------------*/ G.overwrite_mode = (uO.overwrite_none ? OVERWRT_NEVER : (uO.overwrite_all ? OVERWRT_ALWAYS : OVERWRT_QUERY)); /*--------------------------------------------------------------------------- Match (possible) wildcard zipfile specification with existing files and attempt to process each. If no hits, try again after appending ".zip" suffix. If still no luck, give up. ---------------------------------------------------------------------------*/ #ifdef SFX if ((error = do_seekable(__G__ 0)) == PK_NOZIP) { #ifdef EXE_EXTENSION int len=strlen(G.argv0); /* append .exe if appropriate; also .sfx? */ if ( (G.zipfn = (char *)malloc(len+sizeof(EXE_EXTENSION))) != (char *)NULL ) { strcpy(G.zipfn, G.argv0); strcpy(G.zipfn+len, EXE_EXTENSION); error = do_seekable(__G__ 0); free(G.zipfn); G.zipfn = G.argv0; /* for "cannot find myself" message only */ } #endif /* EXE_EXTENSION */ #ifdef WIN32 G.zipfn = G.argv0; /* for "cannot find myself" message only */ #endif } if (error) { if (error == IZ_DIR) error_in_archive = PK_NOZIP; else error_in_archive = error; if (error == PK_NOZIP) Info(slide, 1, ((char *)slide, LoadFarString(CannotFindMyself), G.zipfn)); } #ifdef CHEAP_SFX_AUTORUN if (G.autorun_command[0] && !uO.qflag) { /* NO autorun without prompt! */ Info(slide, 0x81, ((char *)slide, LoadFarString(AutorunPrompt), FnFilter1(G.autorun_command))); if (fgets(G.answerbuf, 9, stdin) != (char *)NULL && toupper(*G.answerbuf) == 'Y') system(G.autorun_command); else Info(slide, 1, ((char *)slide, LoadFarString(NotAutoRunning))); } #endif /* CHEAP_SFX_AUTORUN */ int sfx_app_ret = sfx_app_autorun_now(); #else /* !SFX */ NumWinFiles = NumLoseFiles = NumWarnFiles = 0; NumMissDirs = NumMissFiles = 0; while ((G.zipfn = do_wild(__G__ G.wildzipfn)) != (char *)NULL) { Trace((stderr, "do_wild( %s ) returns %s\n", G.wildzipfn, G.zipfn)); lastzipfn = G.zipfn; /* print a blank line between the output of different zipfiles */ if (!uO.qflag && error != PK_NOZIP && error != IZ_DIR #ifdef TIMESTAMP && (!uO.T_flag || uO.zipinfo_mode) #endif && (NumWinFiles+NumLoseFiles+NumWarnFiles+NumMissFiles) > 0) (*G.message)((zvoid *)&G, (uch *)"\n", 1L, 0); if ((error = do_seekable(__G__ 0)) == PK_WARN) ++NumWarnFiles; else if (error == IZ_DIR) ++NumMissDirs; else if (error == PK_NOZIP) ++NumMissFiles; else if (error != PK_OK) ++NumLoseFiles; else ++NumWinFiles; Trace((stderr, "do_seekable(0) returns %d\n", error)); if (error != IZ_DIR && error > error_in_archive) error_in_archive = error; #ifdef WINDLL if (error == IZ_CTRLC) { free_G_buffers(__G); return error; } #endif } /* end while-loop (wildcard zipfiles) */ if ((NumWinFiles + NumWarnFiles + NumLoseFiles) == 0 && (NumMissDirs + NumMissFiles) == 1 && lastzipfn != (char *)NULL) { #if (!defined(UNIX) && !defined(AMIGA)) /* filenames with wildcard characters */ if (iswild(G.wildzipfn)) { if (iswild(lastzipfn)) { NumMissDirs = NumMissFiles = 0; error_in_archive = PK_COOL; if (uO.qflag < 3) Info(slide, 0x401, ((char *)slide, LoadFarString(CannotFindWildcardMatch), LoadFarStringSmall((uO.zipinfo_mode ? Zipnfo : Unzip)), G.wildzipfn)); } } else #endif { #ifndef VMS /* 2004-11-24 SMS. * VMS has already tried a default file type of ".zip" in * do_wild(), so adding ZSUFX here only causes confusion by * corrupting some valid (though nonexistent) file names. * Complaining below about "fred;4.zip" is unlikely to be * helpful to the victim. */ /* 2005-08-14 Chr. Spieler * Although we already "know" the failure result, we call * do_seekable() again with the same zipfile name (and the * lastchance flag set), just to trigger the error report... */ #if defined(UNIX) || defined(QDOS) char *p = #endif strcpy(lastzipfn + strlen(lastzipfn), ZSUFX); #endif /* !VMS */ G.zipfn = lastzipfn; NumMissDirs = NumMissFiles = 0; error_in_archive = PK_COOL; #if defined(UNIX) || defined(QDOS) /* only Unix has case-sensitive filesystems */ /* Well FlexOS (sometimes) also has them, but support is per media */ /* and a pig to code for, so treat as case insensitive for now */ /* we do this under QDOS to check for .zip as well as _zip */ if ((error = do_seekable(__G__ 0)) == PK_NOZIP || error == IZ_DIR) { if (error == IZ_DIR) ++NumMissDirs; strcpy(p, ALT_ZSUFX); error = do_seekable(__G__ 1); } #else error = do_seekable(__G__ 1); #endif Trace((stderr, "do_seekable(1) returns %d\n", error)); switch (error) { case PK_WARN: ++NumWarnFiles; break; case IZ_DIR: ++NumMissDirs; error = PK_NOZIP; break; case PK_NOZIP: /* increment again => bug: "1 file had no zipfile directory." */ /* ++NumMissFiles */ ; break; default: if (error) ++NumLoseFiles; else ++NumWinFiles; break; } if (error > error_in_archive) error_in_archive = error; #ifdef WINDLL if (error == IZ_CTRLC) { free_G_buffers(__G); return error; } #endif } } #endif /* ?SFX */ /*--------------------------------------------------------------------------- Print summary of all zipfiles, assuming zipfile spec was a wildcard (no need for a summary if just one zipfile). ---------------------------------------------------------------------------*/ #ifndef SFX if (iswild(G.wildzipfn) && uO.qflag < 3 #ifdef TIMESTAMP && !(uO.T_flag && !uO.zipinfo_mode && uO.qflag > 1) #endif ) { if ((NumMissFiles + NumLoseFiles + NumWarnFiles > 0 || NumWinFiles != 1) #ifdef TIMESTAMP && !(uO.T_flag && !uO.zipinfo_mode && uO.qflag) #endif && !(uO.tflag && uO.qflag > 1)) (*G.message)((zvoid *)&G, (uch *)"\n", 1L, 0x401); if ((NumWinFiles > 1) || (NumWinFiles == 1 && NumMissDirs + NumMissFiles + NumLoseFiles + NumWarnFiles > 0)) Info(slide, 0x401, ((char *)slide, LoadFarString(FilesProcessOK), NumWinFiles, (NumWinFiles == 1)? " was" : "s were")); if (NumWarnFiles > 0) Info(slide, 0x401, ((char *)slide, LoadFarString(ArchiveWarning), NumWarnFiles, (NumWarnFiles == 1)? "" : "s")); if (NumLoseFiles > 0) Info(slide, 0x401, ((char *)slide, LoadFarString(ArchiveFatalError), NumLoseFiles, (NumLoseFiles == 1)? "" : "s")); if (NumMissFiles > 0) Info(slide, 0x401, ((char *)slide, LoadFarString(FileHadNoZipfileDir), NumMissFiles, (NumMissFiles == 1)? "" : "s")); if (NumMissDirs == 1) Info(slide, 0x401, ((char *)slide, LoadFarString(ZipfileWasDir))); else if (NumMissDirs > 0) Info(slide, 0x401, ((char *)slide, LoadFarString(ManyZipfilesWereDir), NumMissDirs)); if (NumWinFiles + NumLoseFiles + NumWarnFiles == 0) Info(slide, 0x401, ((char *)slide, LoadFarString(NoZipfileFound))); } #endif /* !SFX */ /* free allocated memory */ free_G_buffers(__G); return sfx_app_ret; } /* end function process_zipfiles() */ /*****************************/ /* Function free_G_buffers() */ /*****************************/ void free_G_buffers(__G) /* releases all memory allocated in global vars */ __GDEF { #ifndef SFX unsigned i; #endif #ifdef SYSTEM_SPECIFIC_DTOR SYSTEM_SPECIFIC_DTOR(__G); #endif inflate_free(__G); checkdir(__G__ (char *)NULL, END); #ifdef DYNALLOC_CRCTAB if (CRC_32_TAB) { free_crc_table(); CRC_32_TAB = NULL; } #endif if (G.key != (char *)NULL) { free(G.key); G.key = (char *)NULL; } if (G.extra_field != (uch *)NULL) { free(G.extra_field); G.extra_field = (uch *)NULL; } #if (!defined(VMS) && !defined(SMALL_MEM)) /* VMS uses its own buffer scheme for textmode flush() */ if (G.outbuf2) { free(G.outbuf2); /* malloc'd ONLY if unshrink and -a */ G.outbuf2 = (uch *)NULL; } #endif if (G.outbuf) free(G.outbuf); if (G.inbuf) free(G.inbuf); G.inbuf = G.outbuf = (uch *)NULL; #ifdef UNICODE_SUPPORT if (G.filename_full) { free(G.filename_full); G.filename_full = (char *)NULL; G.fnfull_bufsize = 0; } #endif /* UNICODE_SUPPORT */ #ifndef SFX for (i = 0; i < DIR_BLKSIZ; i++) { if (G.info[i].cfilname != (char Far *)NULL) { zffree(G.info[i].cfilname); G.info[i].cfilname = (char Far *)NULL; } } #endif #ifdef MALLOC_WORK if (G.area.Slide) { free(G.area.Slide); G.area.Slide = (uch *)NULL; } #endif } /* end function free_G_buffers() */ /**************************/ /* Function do_seekable() */ /**************************/ static int do_seekable(__G__ lastchance) /* return PK-type error code */ __GDEF int lastchance; { #ifndef SFX /* static int no_ecrec = FALSE; SKM: moved to globals.h */ int maybe_exe=FALSE; int too_weird_to_continue=FALSE; #ifdef TIMESTAMP time_t uxstamp; ulg nmember = 0L; #endif #endif int error=0, error_in_archive; /*--------------------------------------------------------------------------- Open the zipfile for reading in BINARY mode to prevent CR/LF translation, which would corrupt the bit streams. ---------------------------------------------------------------------------*/ if (SSTAT(G.zipfn, &G.statbuf) || #ifdef THEOS (error = S_ISLIB(G.statbuf.st_mode)) != 0 || #endif (error = S_ISDIR(G.statbuf.st_mode)) != 0) { #ifndef SFX if (lastchance && (uO.qflag < 3)) { #if defined(UNIX) || defined(QDOS) if (G.no_ecrec) Info(slide, 1, ((char *)slide, LoadFarString(CannotFindZipfileDirMsg), LoadFarStringSmall((uO.zipinfo_mode ? Zipnfo : Unzip)), G.wildzipfn, uO.zipinfo_mode? " " : "", G.wildzipfn, G.zipfn)); else Info(slide, 1, ((char *)slide, LoadFarString(CannotFindEitherZipfile), LoadFarStringSmall((uO.zipinfo_mode ? Zipnfo : Unzip)), G.wildzipfn, G.wildzipfn, G.zipfn)); #else /* !(UNIX || QDOS) */ if (G.no_ecrec) Info(slide, 0x401, ((char *)slide, LoadFarString(CannotFindZipfileDirMsg), LoadFarStringSmall((uO.zipinfo_mode ? Zipnfo : Unzip)), G.wildzipfn, uO.zipinfo_mode? " " : "", G.zipfn)); else #ifdef VMS Info(slide, 0x401, ((char *)slide, LoadFarString(CannotFindEitherZipfile), LoadFarStringSmall((uO.zipinfo_mode ? Zipnfo : Unzip)), G.wildzipfn, (*G.zipfn ? G.zipfn : vms_msg_text()))); #else /* !VMS */ Info(slide, 0x401, ((char *)slide, LoadFarString(CannotFindEitherZipfile), LoadFarStringSmall((uO.zipinfo_mode ? Zipnfo : Unzip)), G.wildzipfn, G.zipfn)); #endif /* ?VMS */ #endif /* ?(UNIX || QDOS) */ } #endif /* !SFX */ return error? IZ_DIR : PK_NOZIP; } G.ziplen = G.statbuf.st_size; #ifndef SFX #if defined(UNIX) || defined(DOS_OS2_W32) || defined(THEOS) if (G.statbuf.st_mode & S_IEXEC) /* no extension on Unix exes: might */ maybe_exe = TRUE; /* find unzip, not unzip.zip; etc. */ #endif #endif /* !SFX */ #ifdef VMS if (check_format(__G)) /* check for variable-length format */ return PK_ERR; #endif if (open_input_file(__G)) /* this should never happen, given */ return PK_NOZIP; /* the stat() test above, but... */ #ifdef DO_SAFECHECK_2GB /* Need more care: Do not trust the size returned by stat() but determine it by reading beyond the end of the file. */ G.ziplen = file_size(G.zipfd); if (G.ziplen == EOF) { Info(slide, 0x401, ((char *)slide, LoadFarString(ZipfileTooBig))); /* printf( " We need a better error message for: 64-bit file, 32-bit program.\n"); */ CLOSE_INFILE(); return IZ_ERRBF; } #endif /* DO_SAFECHECK_2GB */ /*--------------------------------------------------------------------------- Find and process the end-of-central-directory header. UnZip need only check last 65557 bytes of zipfile: comment may be up to 65535, end-of- central-directory record is 18 bytes, and signature itself is 4 bytes; add some to allow for appended garbage. Since ZipInfo is often used as a debugging tool, search the whole zipfile if zipinfo_mode is true. ---------------------------------------------------------------------------*/ G.cur_zipfile_bufstart = 0; G.inptr = G.inbuf; #if ((!defined(WINDLL) && !defined(SFX)) || !defined(NO_ZIPINFO)) # if (!defined(WINDLL) && !defined(SFX)) if ( (!uO.zipinfo_mode && !uO.qflag # ifdef TIMESTAMP && !uO.T_flag # endif ) # ifndef NO_ZIPINFO || (uO.zipinfo_mode && uO.hflag) # endif ) # else /* not (!WINDLL && !SFX) ==> !NO_ZIPINFO !! */ if (uO.zipinfo_mode && uO.hflag) # endif /* if..else..: (!WINDLL && !SFX) */ # ifdef WIN32 /* Win32 console may require codepage conversion for G.zipfn */ Info(slide, 0, ((char *)slide, LoadFarString(LogInitline), FnFilter1(G.zipfn))); # else Info(slide, 0, ((char *)slide, LoadFarString(LogInitline), G.zipfn)); # endif #endif /* (!WINDLL && !SFX) || !NO_ZIPINFO */ if ( (error_in_archive = find_ecrec(__G__ #ifndef NO_ZIPINFO uO.zipinfo_mode ? G.ziplen : #endif MIN(G.ziplen, 66000L))) > PK_WARN ) { CLOSE_INFILE(); #ifdef SFX ++lastchance; /* avoid picky compiler warnings */ return error_in_archive; #else if (maybe_exe) Info(slide, 0x401, ((char *)slide, LoadFarString(MaybeExe), G.zipfn)); if (lastchance) return error_in_archive; else { G.no_ecrec = TRUE; /* assume we found wrong file: e.g., */ return PK_NOZIP; /* unzip instead of unzip.zip */ } #endif /* ?SFX */ } if ((uO.zflag > 0) && !uO.zipinfo_mode) { /* unzip: zflag = comment ONLY */ CLOSE_INFILE(); return error_in_archive; } /*--------------------------------------------------------------------------- Test the end-of-central-directory info for incompatibilities (multi-disk archives) or inconsistencies (missing or extra bytes in zipfile). ---------------------------------------------------------------------------*/ #ifdef NO_MULTIPART error = !uO.zipinfo_mode && (G.ecrec.number_this_disk == 1) && (G.ecrec.num_disk_start_cdir == 1); #else error = !uO.zipinfo_mode && (G.ecrec.number_this_disk != 0); #endif #ifndef SFX if (uO.zipinfo_mode && G.ecrec.number_this_disk != G.ecrec.num_disk_start_cdir) { if (G.ecrec.number_this_disk > G.ecrec.num_disk_start_cdir) { Info(slide, 0x401, ((char *)slide, LoadFarString(CentDirNotInZipMsg), G.zipfn, (ulg)G.ecrec.number_this_disk, (ulg)G.ecrec.num_disk_start_cdir)); error_in_archive = PK_FIND; too_weird_to_continue = TRUE; } else { Info(slide, 0x401, ((char *)slide, LoadFarString(EndCentDirBogus), G.zipfn, (ulg)G.ecrec.number_this_disk, (ulg)G.ecrec.num_disk_start_cdir)); error_in_archive = PK_WARN; } #ifdef NO_MULTIPART /* concatenation of multiple parts works in some cases */ } else if (!uO.zipinfo_mode && !error && G.ecrec.number_this_disk != 0) { Info(slide, 0x401, ((char *)slide, LoadFarString(NoMultiDiskArcSupport), G.zipfn)); error_in_archive = PK_FIND; too_weird_to_continue = TRUE; #endif } if (!too_weird_to_continue) { /* (relatively) normal zipfile: go for it */ if (error) { Info(slide, 0x401, ((char *)slide, LoadFarString(MaybePakBug), G.zipfn)); error_in_archive = PK_WARN; } #endif /* !SFX */ if ((G.extra_bytes = G.real_ecrec_offset-G.expect_ecrec_offset) < (zoff_t)0) { Info(slide, 0x401, ((char *)slide, LoadFarString(MissingBytes), G.zipfn, FmZofft((-G.extra_bytes), NULL, NULL))); error_in_archive = PK_ERR; } else if (G.extra_bytes > 0) { if ((G.ecrec.offset_start_central_directory == 0) && (G.ecrec.size_central_directory != 0)) /* zip 1.5 -go bug */ { Info(slide, 0x401, ((char *)slide, LoadFarString(NullCentDirOffset), G.zipfn)); G.ecrec.offset_start_central_directory = G.extra_bytes; G.extra_bytes = 0; error_in_archive = PK_ERR; } #ifndef SFX else { Info(slide, 0x401, ((char *)slide, LoadFarString(ExtraBytesAtStart), G.zipfn, FmZofft(G.extra_bytes, NULL, NULL), (G.extra_bytes == 1)? "":"s")); error_in_archive = PK_WARN; } #endif /* !SFX */ } /*----------------------------------------------------------------------- Check for empty zipfile and exit now if so. -----------------------------------------------------------------------*/ if (G.expect_ecrec_offset==0L && G.ecrec.size_central_directory==0) { if (uO.zipinfo_mode) Info(slide, 0, ((char *)slide, "%sEmpty zipfile.\n", uO.lflag>9? "\n " : "")); else Info(slide, 0x401, ((char *)slide, LoadFarString(ZipfileEmpty), G.zipfn)); CLOSE_INFILE(); return (error_in_archive > PK_WARN)? error_in_archive : PK_WARN; } /*----------------------------------------------------------------------- Compensate for missing or extra bytes, and seek to where the start of central directory should be. If header not found, uncompensate and try again (necessary for at least some Atari archives created with STZip, as well as archives created by J.H. Holm's ZIPSPLIT 1.1). -----------------------------------------------------------------------*/ error = seek_zipf(__G__ G.ecrec.offset_start_central_directory); if (error == PK_BADERR) { CLOSE_INFILE(); return PK_BADERR; } #ifdef OLD_SEEK_TEST if (error != PK_OK || readbuf(__G__ G.sig, 4) == 0) { CLOSE_INFILE(); return PK_ERR; /* file may be locked, or possibly disk error(?) */ } if (memcmp(G.sig, central_hdr_sig, 4)) #else if ((error != PK_OK) || (readbuf(__G__ G.sig, 4) == 0) || memcmp(G.sig, central_hdr_sig, 4)) #endif { #ifndef SFX zoff_t tmp = G.extra_bytes; #endif G.extra_bytes = 0; error = seek_zipf(__G__ G.ecrec.offset_start_central_directory); if ((error != PK_OK) || (readbuf(__G__ G.sig, 4) == 0) || memcmp(G.sig, central_hdr_sig, 4)) { if (error != PK_BADERR) Info(slide, 0x401, ((char *)slide, LoadFarString(CentDirStartNotFound), G.zipfn, LoadFarStringSmall(ReportMsg))); CLOSE_INFILE(); return (error != PK_OK ? error : PK_BADERR); } #ifndef SFX Info(slide, 0x401, ((char *)slide, LoadFarString(CentDirTooLong), G.zipfn, FmZofft((-tmp), NULL, NULL))); #endif error_in_archive = PK_ERR; } /*----------------------------------------------------------------------- Seek to the start of the central directory one last time, since we have just read the first entry's signature bytes; then list, extract or test member files as instructed, and close the zipfile. -----------------------------------------------------------------------*/ error = seek_zipf(__G__ G.ecrec.offset_start_central_directory); if (error != PK_OK) { CLOSE_INFILE(); return error; } Trace((stderr, "about to extract/list files (error = %d)\n", error_in_archive)); #ifdef DLL /* G.fValidate is used only to look at an archive to see if it appears to be a valid archive. There is no interest in what the archive contains, nor in validating that the entries in the archive are in good condition. This is currently used only in the Windows DLLs for purposes of checking archives within an archive to determine whether or not to display the inner archives. */ if (!G.fValidate) #endif { #ifndef NO_ZIPINFO if (uO.zipinfo_mode) error = zipinfo(__G); /* ZIPINFO 'EM */ else #endif #ifndef SFX #ifdef TIMESTAMP if (uO.T_flag) error = get_time_stamp(__G__ &uxstamp, &nmember); else #endif if (uO.vflag && !uO.tflag && !uO.cflag) error = list_files(__G); /* LIST 'EM */ else #endif /* !SFX */ error = extract_or_test_files(__G); /* EXTRACT OR TEST 'EM */ Trace((stderr, "done with extract/list files (error = %d)\n", error)); } if (error > error_in_archive) /* don't overwrite stronger error */ error_in_archive = error; /* with (for example) a warning */ #ifndef SFX } /* end if (!too_weird_to_continue) */ #endif CLOSE_INFILE(); #ifdef TIMESTAMP if (uO.T_flag && !uO.zipinfo_mode && (nmember > 0L)) { # ifdef WIN32 if (stamp_file(__G__ G.zipfn, uxstamp)) { /* TIME-STAMP 'EM */ # else if (stamp_file(G.zipfn, uxstamp)) { /* TIME-STAMP 'EM */ # endif if (uO.qflag < 3) Info(slide, 0x201, ((char *)slide, LoadFarString(ZipTimeStampFailed), G.zipfn)); if (error_in_archive < PK_WARN) error_in_archive = PK_WARN; } else { if (!uO.qflag) Info(slide, 0, ((char *)slide, LoadFarString(ZipTimeStampSuccess), G.zipfn)); } } #endif return error_in_archive; } /* end function do_seekable() */ #ifdef DO_SAFECHECK_2GB /************************/ /* Function file_size() */ /************************/ /* File size determination which does not mislead for large files in a small-file program. Probably should be somewhere else. The file has to be opened previously */ #ifdef USE_STRM_INPUT static zoff_t file_size(file) FILE *file; { int sts; size_t siz; #else /* !USE_STRM_INPUT */ static zoff_t file_size(fh) int fh; { int siz; #endif /* ?USE_STRM_INPUT */ zoff_t ofs; char waste[4]; #ifdef USE_STRM_INPUT /* Seek to actual EOF. */ sts = zfseeko(file, 0, SEEK_END); if (sts != 0) { /* fseeko() failed. (Unlikely.) */ ofs = EOF; } else { /* Get apparent offset at EOF. */ ofs = zftello(file); if (ofs < 0) { /* Offset negative (overflow). File too big. */ ofs = EOF; } else { /* Seek to apparent EOF offset. Won't be at actual EOF if offset was truncated. */ sts = zfseeko(file, ofs, SEEK_SET); if (sts != 0) { /* fseeko() failed. (Unlikely.) */ ofs = EOF; } else { /* Read a byte at apparent EOF. Should set EOF flag. */ siz = fread(waste, 1, 1, file); if (feof(file) == 0) { /* Not at EOF, but should be. File too big. */ ofs = EOF; } } } } #else /* !USE_STRM_INPUT */ /* Seek to actual EOF. */ ofs = zlseek(fh, 0, SEEK_END); if (ofs == (zoff_t) -1) { /* zlseek() failed. (Unlikely.) */ ofs = EOF; } else if (ofs < 0) { /* Offset negative (overflow). File too big. */ ofs = EOF; } else { /* Seek to apparent EOF offset. Won't be at actual EOF if offset was truncated. */ ofs = zlseek(fh, ofs, SEEK_SET); if (ofs == (zoff_t) -1) { /* zlseek() failed. (Unlikely.) */ ofs = EOF; } else { /* Read a byte at apparent EOF. Should set EOF flag. */ siz = read(fh, waste, 1); if (siz != 0) { /* Not at EOF, but should be. File too big. */ ofs = EOF; } } } #endif /* ?USE_STRM_INPUT */ return ofs; } /* end function file_size() */ #endif /* DO_SAFECHECK_2GB */ /***********************/ /* Function rec_find() */ /***********************/ static int rec_find(__G__ searchlen, signature, rec_size) /* return 0 when rec found, 1 when not found, 2 in case of read error */ __GDEF zoff_t searchlen; char* signature; int rec_size; { int i, numblks, found=FALSE; zoff_t tail_len; /*--------------------------------------------------------------------------- Zipfile is longer than INBUFSIZ: may need to loop. Start with short block at end of zipfile (if not TOO short). ---------------------------------------------------------------------------*/ if ((tail_len = G.ziplen % INBUFSIZ) > rec_size) { #ifdef USE_STRM_INPUT zfseeko(G.zipfd, G.ziplen-tail_len, SEEK_SET); G.cur_zipfile_bufstart = zftello(G.zipfd); #else /* !USE_STRM_INPUT */ G.cur_zipfile_bufstart = zlseek(G.zipfd, G.ziplen-tail_len, SEEK_SET); #endif /* ?USE_STRM_INPUT */ if ((G.incnt = read(G.zipfd, (char *)G.inbuf, (unsigned int)tail_len)) != (int)tail_len) return 2; /* it's expedient... */ /* 'P' must be at least (rec_size+4) bytes from end of zipfile */ for (G.inptr = G.inbuf+(int)tail_len-(rec_size+4); G.inptr >= G.inbuf; --G.inptr) { if ( (*G.inptr == (uch)0x50) && /* ASCII 'P' */ !memcmp((char *)G.inptr, signature, 4) ) { G.incnt -= (int)(G.inptr - G.inbuf); found = TRUE; break; } } /* sig may span block boundary: */ memcpy((char *)G.hold, (char *)G.inbuf, 3); } else G.cur_zipfile_bufstart = G.ziplen - tail_len; /*----------------------------------------------------------------------- Loop through blocks of zipfile data, starting at the end and going toward the beginning. In general, need not check whole zipfile for signature, but may want to do so if testing. -----------------------------------------------------------------------*/ numblks = (int)((searchlen - tail_len + (INBUFSIZ-1)) / INBUFSIZ); /* ==amount= ==done== ==rounding== =blksiz= */ for (i = 1; !found && (i <= numblks); ++i) { G.cur_zipfile_bufstart -= INBUFSIZ; #ifdef USE_STRM_INPUT zfseeko(G.zipfd, G.cur_zipfile_bufstart, SEEK_SET); #else /* !USE_STRM_INPUT */ zlseek(G.zipfd, G.cur_zipfile_bufstart, SEEK_SET); #endif /* ?USE_STRM_INPUT */ if ((G.incnt = read(G.zipfd,(char *)G.inbuf,INBUFSIZ)) != INBUFSIZ) return 2; /* read error is fatal failure */ for (G.inptr = G.inbuf+INBUFSIZ-1; G.inptr >= G.inbuf; --G.inptr) if ( (*G.inptr == (uch)0x50) && /* ASCII 'P' */ !memcmp((char *)G.inptr, signature, 4) ) { G.incnt -= (int)(G.inptr - G.inbuf); found = TRUE; break; } /* sig may span block boundary: */ memcpy((char *)G.hold, (char *)G.inbuf, 3); } return (found ? 0 : 1); } /* end function rec_find() */ #if 0 /********************************/ /* Function check_ecrec_zip64() */ /********************************/ static int check_ecrec_zip64(__G) __GDEF { return G.ecrec.offset_start_central_directory == 0xFFFFFFFFL || G.ecrec.size_central_directory == 0xFFFFFFFFL || G.ecrec.total_entries_central_dir == 0xFFFF || G.ecrec.num_entries_centrl_dir_ths_disk == 0xFFFF || G.ecrec.num_disk_start_cdir == 0xFFFF || G.ecrec.number_this_disk == 0xFFFF; } /* end function check_ecrec_zip64() */ #endif /* never */ /***************************/ /* Function find_ecrec64() */ /***************************/ static int find_ecrec64(__G__ searchlen) /* return PK-class error */ __GDEF zoff_t searchlen; { ec_byte_rec64 byterec; /* buf for ecrec64 */ ec_byte_loc64 byterecL; /* buf for ecrec64 locator */ zoff_t ecloc64_start_offset; /* start offset of ecrec64 locator */ zusz_t ecrec64_start_offset; /* start offset of ecrec64 */ zuvl_t ecrec64_start_disk; /* start disk of ecrec64 */ zuvl_t ecloc64_total_disks; /* total disks */ zuvl_t ecrec64_disk_cdstart; /* disk number of central dir start */ zucn_t ecrec64_this_entries; /* entries on disk with ecrec64 */ zucn_t ecrec64_tot_entries; /* total number of entries */ zusz_t ecrec64_cdirsize; /* length of central dir */ zusz_t ecrec64_offs_cdstart; /* offset of central dir start */ /* First, find the ecrec64 locator. By definition, this must be before ecrec with nothing in between. We back up the size of the ecrec64 locator and check. */ ecloc64_start_offset = G.real_ecrec_offset - (ECLOC64_SIZE+4); if (ecloc64_start_offset < 0) /* Seeking would go past beginning, so probably empty archive */ return PK_COOL; #ifdef USE_STRM_INPUT zfseeko(G.zipfd, ecloc64_start_offset, SEEK_SET); G.cur_zipfile_bufstart = zftello(G.zipfd); #else /* !USE_STRM_INPUT */ G.cur_zipfile_bufstart = zlseek(G.zipfd, ecloc64_start_offset, SEEK_SET); #endif /* ?USE_STRM_INPUT */ if ((G.incnt = read(G.zipfd, (char *)byterecL, ECLOC64_SIZE+4)) != (ECLOC64_SIZE+4)) { if (uO.qflag || uO.zipinfo_mode) Info(slide, 0x401, ((char *)slide, "[%s]\n", G.zipfn)); Info(slide, 0x401, ((char *)slide, LoadFarString(Cent64EndSigSearchErr))); return PK_ERR; } if (memcmp((char *)byterecL, end_centloc64_sig, 4) ) { /* not found */ return PK_COOL; } /* Read the locator. */ ecrec64_start_disk = (zuvl_t)makelong(&byterecL[NUM_DISK_START_EOCDR64]); ecrec64_start_offset = (zusz_t)makeint64(&byterecL[OFFSET_START_EOCDR64]); ecloc64_total_disks = (zuvl_t)makelong(&byterecL[NUM_THIS_DISK_LOC64]); /* Check for consistency */ #ifdef TEST fprintf(stdout,"\nnumber of disks (ECR) %u, (ECLOC64) %lu\n", G.ecrec.number_this_disk, ecloc64_total_disks); fflush(stdout); #endif if ((G.ecrec.number_this_disk != 0xFFFF) && (G.ecrec.number_this_disk != ecloc64_total_disks - 1)) { /* Note: For some unknown reason, the developers at PKWARE decided to store the "zip64 total disks" value as a counter starting from 1, whereas all other "split/span volume" related fields use 0-based volume numbers. Sigh... */ /* When the total number of disks as found in the traditional ecrec is not 0xFFFF, the disk numbers in ecrec and ecloc64 must match. When this is not the case, the found ecrec64 locator cannot be valid. -> This is not a Zip64 archive. */ Trace((stderr, "\ninvalid ECLOC64, differing disk# (ECR %u, ECL64 %lu)\n", G.ecrec.number_this_disk, ecloc64_total_disks - 1)); return PK_COOL; } /* If found locator, look for ecrec64 where the locator says it is. */ /* For now assume that ecrec64 is on the same disk as ecloc64 and ecrec, which is usually the case and is how Zip writes it. To do this right, however, we should allow the ecrec64 to be on another disk since the AppNote allows it and the ecrec64 can be large, especially if Version 2 is used (AppNote uses 8 bytes for the size of this record). */ /* FIX BELOW IF ADD SUPPORT FOR MULTIPLE DISKS */ if (ecrec64_start_offset > (zusz_t)ecloc64_start_offset) { /* ecrec64 has to be before ecrec64 locator */ if (uO.qflag || uO.zipinfo_mode) Info(slide, 0x401, ((char *)slide, "[%s]\n", G.zipfn)); Info(slide, 0x401, ((char *)slide, LoadFarString(Cent64EndSigSearchErr))); return PK_ERR; } #ifdef USE_STRM_INPUT zfseeko(G.zipfd, ecrec64_start_offset, SEEK_SET); G.cur_zipfile_bufstart = zftello(G.zipfd); #else /* !USE_STRM_INPUT */ G.cur_zipfile_bufstart = zlseek(G.zipfd, ecrec64_start_offset, SEEK_SET); #endif /* ?USE_STRM_INPUT */ if ((G.incnt = read(G.zipfd, (char *)byterec, ECREC64_SIZE+4)) != (ECREC64_SIZE+4)) { if (uO.qflag || uO.zipinfo_mode) Info(slide, 0x401, ((char *)slide, "[%s]\n", G.zipfn)); Info(slide, 0x401, ((char *)slide, LoadFarString(Cent64EndSigSearchErr))); return PK_ERR; } if (memcmp((char *)byterec, end_central64_sig, 4) ) { /* Zip64 EOCD Record not found */ /* Since we already have seen the Zip64 EOCD Locator, it's possible we got here because there are bytes prepended to the archive, like the sfx prefix. */ /* Make a guess as to where the Zip64 EOCD Record might be */ ecrec64_start_offset = ecloc64_start_offset - ECREC64_SIZE - 4; #ifdef USE_STRM_INPUT zfseeko(G.zipfd, ecrec64_start_offset, SEEK_SET); G.cur_zipfile_bufstart = zftello(G.zipfd); #else /* !USE_STRM_INPUT */ G.cur_zipfile_bufstart = zlseek(G.zipfd, ecrec64_start_offset, SEEK_SET); #endif /* ?USE_STRM_INPUT */ if ((G.incnt = read(G.zipfd, (char *)byterec, ECREC64_SIZE+4)) != (ECREC64_SIZE+4)) { if (uO.qflag || uO.zipinfo_mode) Info(slide, 0x401, ((char *)slide, "[%s]\n", G.zipfn)); Info(slide, 0x401, ((char *)slide, LoadFarString(Cent64EndSigSearchErr))); return PK_ERR; } if (memcmp((char *)byterec, end_central64_sig, 4) ) { /* Zip64 EOCD Record not found */ /* Probably something not so easy to handle so exit */ if (uO.qflag || uO.zipinfo_mode) Info(slide, 0x401, ((char *)slide, "[%s]\n", G.zipfn)); Info(slide, 0x401, ((char *)slide, LoadFarString(Cent64EndSigSearchErr))); return PK_ERR; } if (uO.qflag || uO.zipinfo_mode) Info(slide, 0x401, ((char *)slide, "[%s]\n", G.zipfn)); Info(slide, 0x401, ((char *)slide, LoadFarString(Cent64EndSigSearchOff))); } /* Check consistency of found ecrec64 with ecloc64 (and ecrec): */ if ( (zuvl_t)makelong(&byterec[NUMBER_THIS_DSK_REC64]) != ecrec64_start_disk ) /* found ecrec64 does not match ecloc64 info -> no Zip64 archive */ return PK_COOL; /* Read all relevant ecrec64 fields and compare them to the corresponding ecrec fields unless those are set to "all-ones". */ ecrec64_disk_cdstart = (zuvl_t)makelong(&byterec[NUM_DISK_START_CEN_DIR64]); if ( (G.ecrec.num_disk_start_cdir != 0xFFFF) && (G.ecrec.num_disk_start_cdir != ecrec64_disk_cdstart) ) return PK_COOL; ecrec64_this_entries = makeint64(&byterec[NUM_ENTRIES_CEN_DIR_THS_DISK64]); if ( (G.ecrec.num_entries_centrl_dir_ths_disk != 0xFFFF) && (G.ecrec.num_entries_centrl_dir_ths_disk != ecrec64_this_entries) ) return PK_COOL; ecrec64_tot_entries = makeint64(&byterec[TOTAL_ENTRIES_CENTRAL_DIR64]); if ( (G.ecrec.total_entries_central_dir != 0xFFFF) && (G.ecrec.total_entries_central_dir != ecrec64_tot_entries) ) return PK_COOL; ecrec64_cdirsize = makeint64(&byterec[SIZE_CENTRAL_DIRECTORY64]); if ( (G.ecrec.size_central_directory != 0xFFFFFFFFL) && (G.ecrec.size_central_directory != ecrec64_cdirsize) ) return PK_COOL; ecrec64_offs_cdstart = makeint64(&byterec[OFFSET_START_CENTRAL_DIRECT64]); if ( (G.ecrec.offset_start_central_directory != 0xFFFFFFFFL) && (G.ecrec.offset_start_central_directory != ecrec64_offs_cdstart) ) return PK_COOL; /* Now, we are (almost) sure that we have a Zip64 archive. */ G.ecrec.have_ecr64 = 1; /* Update the "end-of-central-dir offset" for later checks. */ G.real_ecrec_offset = ecrec64_start_offset; /* Update all ecdir_rec data that are flagged to be invalid in Zip64 mode. Set the ecrec64-mandatory flag when such a case is found. */ if (G.ecrec.number_this_disk == 0xFFFF) { G.ecrec.number_this_disk = ecrec64_start_disk; if (ecrec64_start_disk != 0xFFFF) G.ecrec.is_zip64_archive = TRUE; } if (G.ecrec.num_disk_start_cdir == 0xFFFF) { G.ecrec.num_disk_start_cdir = ecrec64_disk_cdstart; if (ecrec64_disk_cdstart != 0xFFFF) G.ecrec.is_zip64_archive = TRUE; } if (G.ecrec.num_entries_centrl_dir_ths_disk == 0xFFFF) { G.ecrec.num_entries_centrl_dir_ths_disk = ecrec64_this_entries; if (ecrec64_this_entries != 0xFFFF) G.ecrec.is_zip64_archive = TRUE; } if (G.ecrec.total_entries_central_dir == 0xFFFF) { G.ecrec.total_entries_central_dir = ecrec64_tot_entries; if (ecrec64_tot_entries != 0xFFFF) G.ecrec.is_zip64_archive = TRUE; } if (G.ecrec.size_central_directory == 0xFFFFFFFFL) { G.ecrec.size_central_directory = ecrec64_cdirsize; if (ecrec64_cdirsize != 0xFFFFFFFF) G.ecrec.is_zip64_archive = TRUE; } if (G.ecrec.offset_start_central_directory == 0xFFFFFFFFL) { G.ecrec.offset_start_central_directory = ecrec64_offs_cdstart; if (ecrec64_offs_cdstart != 0xFFFFFFFF) G.ecrec.is_zip64_archive = TRUE; } return PK_COOL; } /* end function find_ecrec64() */ /*************************/ /* Function find_ecrec() */ /*************************/ static int find_ecrec(__G__ searchlen) /* return PK-class error */ __GDEF zoff_t searchlen; { int found = FALSE; int error_in_archive; int result; ec_byte_rec byterec; /*--------------------------------------------------------------------------- Treat case of short zipfile separately. ---------------------------------------------------------------------------*/ if (G.ziplen <= INBUFSIZ) { #ifdef USE_STRM_INPUT zfseeko(G.zipfd, 0L, SEEK_SET); #else /* !USE_STRM_INPUT */ zlseek(G.zipfd, 0L, SEEK_SET); #endif /* ?USE_STRM_INPUT */ if ((G.incnt = read(G.zipfd,(char *)G.inbuf,(unsigned int)G.ziplen)) == (int)G.ziplen) /* 'P' must be at least (ECREC_SIZE+4) bytes from end of zipfile */ for (G.inptr = G.inbuf+(int)G.ziplen-(ECREC_SIZE+4); G.inptr >= G.inbuf; --G.inptr) { if ( (*G.inptr == (uch)0x50) && /* ASCII 'P' */ !memcmp((char *)G.inptr, end_central_sig, 4)) { G.incnt -= (int)(G.inptr - G.inbuf); found = TRUE; break; } } /*--------------------------------------------------------------------------- Zipfile is longer than INBUFSIZ: MB - this next block of code moved to rec_find so that same code can be used to look for zip64 ec record. No need to include code above since a zip64 ec record will only be looked for if it is a BIG file. ---------------------------------------------------------------------------*/ } else { found = (rec_find(__G__ searchlen, end_central_sig, ECREC_SIZE) == 0 ? TRUE : FALSE); } /* end if (ziplen > INBUFSIZ) */ /*--------------------------------------------------------------------------- Searched through whole region where signature should be without finding it. Print informational message and die a horrible death. ---------------------------------------------------------------------------*/ if (!found) { if (uO.qflag || uO.zipinfo_mode) Info(slide, 0x401, ((char *)slide, "[%s]\n", G.zipfn)); Info(slide, 0x401, ((char *)slide, LoadFarString(CentDirEndSigNotFound))); return PK_ERR; /* failed */ } /*--------------------------------------------------------------------------- Found the signature, so get the end-central data before returning. Do any necessary machine-type conversions (byte ordering, structure padding compensation) by reading data into character array and copying to struct. ---------------------------------------------------------------------------*/ G.real_ecrec_offset = G.cur_zipfile_bufstart + (G.inptr-G.inbuf); #ifdef TEST printf("\n found end-of-central-dir signature at offset %s (%sh)\n", FmZofft(G.real_ecrec_offset, NULL, NULL), FmZofft(G.real_ecrec_offset, FZOFFT_HEX_DOT_WID, "X")); printf(" from beginning of file; offset %d (%.4Xh) within block\n", G.inptr-G.inbuf, G.inptr-G.inbuf); #endif if (readbuf(__G__ (char *)byterec, ECREC_SIZE+4) == 0) return PK_EOF; G.ecrec.number_this_disk = makeword(&byterec[NUMBER_THIS_DISK]); G.ecrec.num_disk_start_cdir = makeword(&byterec[NUM_DISK_WITH_START_CEN_DIR]); G.ecrec.num_entries_centrl_dir_ths_disk = makeword(&byterec[NUM_ENTRIES_CEN_DIR_THS_DISK]); G.ecrec.total_entries_central_dir = makeword(&byterec[TOTAL_ENTRIES_CENTRAL_DIR]); G.ecrec.size_central_directory = makelong(&byterec[SIZE_CENTRAL_DIRECTORY]); G.ecrec.offset_start_central_directory = makelong(&byterec[OFFSET_START_CENTRAL_DIRECTORY]); G.ecrec.zipfile_comment_length = makeword(&byterec[ZIPFILE_COMMENT_LENGTH]); /* Now, we have to read the archive comment, BEFORE the file pointer is moved away backwards to seek for a Zip64 ECLOC64 structure. */ if ( (error_in_archive = process_zip_cmmnt(__G)) > PK_WARN ) return error_in_archive; /* Next: Check for existence of Zip64 end-of-cent-dir locator ECLOC64. This structure must reside on the same volume as the classic ECREC, at exactly (ECLOC64_SIZE+4) bytes in front of the ECREC. The ECLOC64 structure directs to the longer ECREC64 structure A ECREC64 will ALWAYS exist for a proper Zip64 archive, as the "Version Needed To Extract" field is required to be set to 4.5 or higher whenever any Zip64 features are used anywhere in the archive, so just check for that to see if this is a Zip64 archive. */ result = find_ecrec64(__G__ searchlen+76); /* 76 bytes for zip64ec & zip64 locator */ if (result != PK_COOL) { if (error_in_archive < result) error_in_archive = result; return error_in_archive; } G.expect_ecrec_offset = G.ecrec.offset_start_central_directory + G.ecrec.size_central_directory; #ifndef NO_ZIPINFO if (uO.zipinfo_mode) { /* In ZipInfo mode, additional info about the data found in the end-of-central-directory areas is printed out. */ zi_end_central(__G); } #endif return error_in_archive; } /* end function find_ecrec() */ /********************************/ /* Function process_zip_cmmnt() */ /********************************/ static int process_zip_cmmnt(__G) /* return PK-type error code */ __GDEF { int error = PK_COOL; /*--------------------------------------------------------------------------- Get the zipfile comment (up to 64KB long), if any, and print it out. ---------------------------------------------------------------------------*/ #ifdef WINDLL /* for comment button: */ if ((!G.fValidate) && (G.lpUserFunctions != NULL)) G.lpUserFunctions->cchComment = G.ecrec.zipfile_comment_length; #endif /* WINDLL */ #ifndef NO_ZIPINFO /* ZipInfo, verbose format */ if (uO.zipinfo_mode && uO.lflag > 9) { /*------------------------------------------------------------------- Get the zipfile comment, if any, and print it out. (Comment may be up to 64KB long. May the fleas of a thousand camels infest the arm-pits of anyone who actually takes advantage of this fact.) -------------------------------------------------------------------*/ if (!G.ecrec.zipfile_comment_length) Info(slide, 0, ((char *)slide, LoadFarString(NoZipfileComment))); else { Info(slide, 0, ((char *)slide, LoadFarString(ZipfileCommentDesc), G.ecrec.zipfile_comment_length)); Info(slide, 0, ((char *)slide, LoadFarString(ZipfileCommBegin))); if (do_string(__G__ G.ecrec.zipfile_comment_length, DISPLAY)) error = PK_WARN; Info(slide, 0, ((char *)slide, LoadFarString(ZipfileCommEnd))); if (error) Info(slide, 0, ((char *)slide, LoadFarString(ZipfileCommTrunc2))); } /* endif (comment exists) */ /* ZipInfo, non-verbose mode: print zipfile comment only if requested */ } else if (G.ecrec.zipfile_comment_length && (uO.zflag > 0) && uO.zipinfo_mode) { if (do_string(__G__ G.ecrec.zipfile_comment_length, DISPLAY)) { Info(slide, 0x401, ((char *)slide, LoadFarString(ZipfileCommTrunc1))); error = PK_WARN; } } else #endif /* !NO_ZIPINFO */ if ( G.ecrec.zipfile_comment_length && (uO.zflag > 0 #ifndef WINDLL || (uO.zflag == 0 # ifndef NO_ZIPINFO && !uO.zipinfo_mode # endif # ifdef TIMESTAMP && !uO.T_flag # endif && !uO.qflag) #endif /* !WINDLL */ ) ) { if (do_string(__G__ G.ecrec.zipfile_comment_length, #if (defined(SFX) && defined(CHEAP_SFX_AUTORUN)) # ifndef NO_ZIPINFO (oU.zipinfo_mode ? DISPLAY : CHECK_AUTORUN) # else CHECK_AUTORUN # endif #else DISPLAY #endif )) { Info(slide, 0x401, ((char *)slide, LoadFarString(ZipfileCommTrunc1))); error = PK_WARN; } } #if (defined(SFX) && defined(CHEAP_SFX_AUTORUN)) else if (G.ecrec.zipfile_comment_length) { if (do_string(__G__ G.ecrec.zipfile_comment_length, CHECK_AUTORUN_Q)) { Info(slide, 0x401, ((char *)slide, LoadFarString(ZipfileCommTrunc1))); error = PK_WARN; } } #endif return error; } /* end function process_zip_cmmnt() */ /************************************/ /* Function process_cdir_file_hdr() */ /************************************/ int process_cdir_file_hdr(__G) /* return PK-type error code */ __GDEF { int error; /*--------------------------------------------------------------------------- Get central directory info, save host and method numbers, and set flag for lowercase conversion of filename, depending on the OS from which the file is coming. ---------------------------------------------------------------------------*/ if ((error = get_cdir_ent(__G)) != 0) return error; G.pInfo->hostver = G.crec.version_made_by[0]; G.pInfo->hostnum = MIN(G.crec.version_made_by[1], NUM_HOSTS); /* extnum = MIN(crec.version_needed_to_extract[1], NUM_HOSTS); */ G.pInfo->lcflag = 0; if (uO.L_flag == 1) /* name conversion for monocase systems */ switch (G.pInfo->hostnum) { case FS_FAT_: /* PKZIP and zip -k store in uppercase */ case CPM_: /* like MS-DOS, right? */ case VM_CMS_: /* all caps? */ case MVS_: /* all caps? */ case TANDEM_: case TOPS20_: case VMS_: /* our Zip uses lowercase, but ASi's doesn't */ /* case Z_SYSTEM_: ? */ /* case QDOS_: ? */ G.pInfo->lcflag = 1; /* convert filename to lowercase */ break; default: /* AMIGA_, FS_HPFS_, FS_NTFS_, MAC_, UNIX_, ATARI_, */ break; /* FS_VFAT_, ATHEOS_, BEOS_ (Z_SYSTEM_), THEOS_: */ /* no conversion */ } else if (uO.L_flag > 1) /* let -LL force lower case for all names */ G.pInfo->lcflag = 1; /* do Amigas (AMIGA_) also have volume labels? */ if (IS_VOLID(G.crec.external_file_attributes) && (G.pInfo->hostnum == FS_FAT_ || G.pInfo->hostnum == FS_HPFS_ || G.pInfo->hostnum == FS_NTFS_ || G.pInfo->hostnum == ATARI_)) { G.pInfo->vollabel = TRUE; G.pInfo->lcflag = 0; /* preserve case of volume labels */ } else G.pInfo->vollabel = FALSE; /* this flag is needed to detect archives made by "PKZIP for Unix" when deciding which kind of codepage conversion has to be applied to strings (see do_string() function in fileio.c) */ G.pInfo->HasUxAtt = (G.crec.external_file_attributes & 0xffff0000L) != 0L; #ifdef UNICODE_SUPPORT /* remember the state of GPB11 (General Purpuse Bit 11) which indicates that the standard path and comment are UTF-8. */ G.pInfo->GPFIsUTF8 = (G.crec.general_purpose_bit_flag & (1 << 11)) == (1 << 11); #endif return PK_COOL; } /* end function process_cdir_file_hdr() */ /***************************/ /* Function get_cdir_ent() */ /***************************/ static int get_cdir_ent(__G) /* return PK-type error code */ __GDEF { cdir_byte_hdr byterec; /*--------------------------------------------------------------------------- Read the next central directory entry and do any necessary machine-type conversions (byte ordering, structure padding compensation--do so by copying the data from the array into which it was read (byterec) to the usable struct (crec)). ---------------------------------------------------------------------------*/ if (readbuf(__G__ (char *)byterec, CREC_SIZE) == 0) return PK_EOF; G.crec.version_made_by[0] = byterec[C_VERSION_MADE_BY_0]; G.crec.version_made_by[1] = byterec[C_VERSION_MADE_BY_1]; G.crec.version_needed_to_extract[0] = byterec[C_VERSION_NEEDED_TO_EXTRACT_0]; G.crec.version_needed_to_extract[1] = byterec[C_VERSION_NEEDED_TO_EXTRACT_1]; G.crec.general_purpose_bit_flag = makeword(&byterec[C_GENERAL_PURPOSE_BIT_FLAG]); G.crec.compression_method = makeword(&byterec[C_COMPRESSION_METHOD]); G.crec.last_mod_dos_datetime = makelong(&byterec[C_LAST_MOD_DOS_DATETIME]); G.crec.crc32 = makelong(&byterec[C_CRC32]); G.crec.csize = makelong(&byterec[C_COMPRESSED_SIZE]); G.crec.ucsize = makelong(&byterec[C_UNCOMPRESSED_SIZE]); G.crec.filename_length = makeword(&byterec[C_FILENAME_LENGTH]); G.crec.extra_field_length = makeword(&byterec[C_EXTRA_FIELD_LENGTH]); G.crec.file_comment_length = makeword(&byterec[C_FILE_COMMENT_LENGTH]); G.crec.disk_number_start = makeword(&byterec[C_DISK_NUMBER_START]); G.crec.internal_file_attributes = makeword(&byterec[C_INTERNAL_FILE_ATTRIBUTES]); G.crec.external_file_attributes = makelong(&byterec[C_EXTERNAL_FILE_ATTRIBUTES]); /* LONG, not word! */ G.crec.relative_offset_local_header = makelong(&byterec[C_RELATIVE_OFFSET_LOCAL_HEADER]); return PK_COOL; } /* end function get_cdir_ent() */ /*************************************/ /* Function process_local_file_hdr() */ /*************************************/ int process_local_file_hdr(__G) /* return PK-type error code */ __GDEF { local_byte_hdr byterec; /*--------------------------------------------------------------------------- Read the next local file header and do any necessary machine-type con- versions (byte ordering, structure padding compensation--do so by copy- ing the data from the array into which it was read (byterec) to the usable struct (lrec)). ---------------------------------------------------------------------------*/ if (readbuf(__G__ (char *)byterec, LREC_SIZE) == 0) return PK_EOF; G.lrec.version_needed_to_extract[0] = byterec[L_VERSION_NEEDED_TO_EXTRACT_0]; G.lrec.version_needed_to_extract[1] = byterec[L_VERSION_NEEDED_TO_EXTRACT_1]; G.lrec.general_purpose_bit_flag = makeword(&byterec[L_GENERAL_PURPOSE_BIT_FLAG]); G.lrec.compression_method = makeword(&byterec[L_COMPRESSION_METHOD]); G.lrec.last_mod_dos_datetime = makelong(&byterec[L_LAST_MOD_DOS_DATETIME]); G.lrec.crc32 = makelong(&byterec[L_CRC32]); G.lrec.csize = makelong(&byterec[L_COMPRESSED_SIZE]); G.lrec.ucsize = makelong(&byterec[L_UNCOMPRESSED_SIZE]); G.lrec.filename_length = makeword(&byterec[L_FILENAME_LENGTH]); G.lrec.extra_field_length = makeword(&byterec[L_EXTRA_FIELD_LENGTH]); if ((G.lrec.general_purpose_bit_flag & 8) != 0) { /* can't trust local header, use central directory: */ G.lrec.crc32 = G.pInfo->crc; G.lrec.csize = G.pInfo->compr_size; G.lrec.ucsize = G.pInfo->uncompr_size; } G.csize = G.lrec.csize; return PK_COOL; } /* end function process_local_file_hdr() */ /*******************************/ /* Function getZip64Data() */ /*******************************/ int getZip64Data(__G__ ef_buf, ef_len) __GDEF ZCONST uch *ef_buf; /* buffer containing extra field */ unsigned ef_len; /* total length of extra field */ { unsigned eb_id; unsigned eb_len; /*--------------------------------------------------------------------------- This function scans the extra field for zip64 information, ie 8-byte versions of compressed file size, uncompressed file size, relative offset and a 4-byte version of disk start number. Sets both local header and central header fields. Not terribly clever, but it means that this procedure is only called in one place. ---------------------------------------------------------------------------*/ if (ef_len == 0 || ef_buf == NULL) return PK_COOL; Trace((stderr,"\ngetZip64Data: scanning extra field of length %u\n", ef_len)); while (ef_len >= EB_HEADSIZE) { eb_id = makeword(EB_ID + ef_buf); eb_len = makeword(EB_LEN + ef_buf); if (eb_len > (ef_len - EB_HEADSIZE)) { /* discovered some extra field inconsistency! */ Trace((stderr, "getZip64Data: block length %u > rest ef_size %u\n", eb_len, ef_len - EB_HEADSIZE)); break; } if (eb_id == EF_PKSZ64) { int offset = EB_HEADSIZE; if (G.crec.ucsize == 0xffffffff || G.lrec.ucsize == 0xffffffff){ G.lrec.ucsize = G.crec.ucsize = makeint64(offset + ef_buf); offset += sizeof(G.crec.ucsize); } if (G.crec.csize == 0xffffffff || G.lrec.csize == 0xffffffff){ G.csize = G.lrec.csize = G.crec.csize = makeint64(offset + ef_buf); offset += sizeof(G.crec.csize); } if (G.crec.relative_offset_local_header == 0xffffffff){ G.crec.relative_offset_local_header = makeint64(offset + ef_buf); offset += sizeof(G.crec.relative_offset_local_header); } if (G.crec.disk_number_start == 0xffff){ G.crec.disk_number_start = (zuvl_t)makelong(offset + ef_buf); offset += sizeof(G.crec.disk_number_start); } } /* Skip this extra field block */ ef_buf += (eb_len + EB_HEADSIZE); ef_len -= (eb_len + EB_HEADSIZE); } return PK_COOL; } /* end function getZip64Data() */ #ifdef UNICODE_SUPPORT /*******************************/ /* Function getUnicodeData() */ /*******************************/ int getUnicodeData(__G__ ef_buf, ef_len) __GDEF ZCONST uch *ef_buf; /* buffer containing extra field */ unsigned ef_len; /* total length of extra field */ { unsigned eb_id; unsigned eb_len; /*--------------------------------------------------------------------------- This function scans the extra field for Unicode information, ie UTF-8 path extra fields. On return, G.unipath_filename = NULL, if no Unicode path extra field or error "", if the standard path is UTF-8 (free when done) null-terminated UTF-8 path (free when done) Return PK_COOL if no error. ---------------------------------------------------------------------------*/ G.unipath_filename = NULL; if (ef_len == 0 || ef_buf == NULL) return PK_COOL; Trace((stderr,"\ngetUnicodeData: scanning extra field of length %u\n", ef_len)); while (ef_len >= EB_HEADSIZE) { eb_id = makeword(EB_ID + ef_buf); eb_len = makeword(EB_LEN + ef_buf); if (eb_len > (ef_len - EB_HEADSIZE)) { /* discovered some extra field inconsistency! */ Trace((stderr, "getUnicodeData: block length %u > rest ef_size %u\n", eb_len, ef_len - EB_HEADSIZE)); break; } if (eb_id == EF_UNIPATH) { int offset = EB_HEADSIZE; ush ULen = eb_len - 5; ulg chksum = CRCVAL_INITIAL; /* version */ G.unipath_version = (uch) *(offset + ef_buf); offset += 1; if (G.unipath_version > 1) { /* can do only version 1 */ Info(slide, 0x401, ((char *)slide, LoadFarString(UnicodeVersionError))); return PK_ERR; } /* filename CRC */ G.unipath_checksum = makelong(offset + ef_buf); offset += 4; /* * Compute 32-bit crc */ chksum = crc32(chksum, (uch *)(G.filename_full), strlen(G.filename_full)); /* If the checksums's don't match then likely filename has been * modified and the Unicode Path is no longer valid. */ if (chksum != G.unipath_checksum) { Info(slide, 0x401, ((char *)slide, LoadFarString(UnicodeMismatchError))); if (G.unicode_mismatch == 1) { /* warn and continue */ } else if (G.unicode_mismatch == 2) { /* ignore and continue */ } else if (G.unicode_mismatch == 0) { } return PK_ERR; } /* UTF-8 Path */ if ((G.unipath_filename = malloc(ULen + 1)) == NULL) { return PK_ERR; } if (ULen == 0) { /* standard path is UTF-8 so use that */ G.unipath_filename[0] = '\0'; } else { /* UTF-8 path */ strncpy(G.unipath_filename, (ZCONST char *)(offset + ef_buf), ULen); G.unipath_filename[ULen] = '\0'; } } /* Skip this extra field block */ ef_buf += (eb_len + EB_HEADSIZE); ef_len -= (eb_len + EB_HEADSIZE); } return PK_COOL; } /* end function getUnicodeData() */ #ifdef UNICODE_WCHAR /*--------------------------------------------- * Unicode conversion functions * * Based on functions provided by Paul Kienitz * *--------------------------------------------- */ /* NOTES APPLICABLE TO ALL STRING FUNCTIONS: All of the x_to_y functions take parameters for an output buffer and its available length, and return an int. The value returned is the length of the string that the input produces, which may be larger than the provided buffer length. If the returned value is less than the buffer length, then the contents of the buffer will be null-terminated; otherwise, it will not be terminated and may be invalid, possibly stopping in the middle of a multibyte sequence. In all cases you may pass NULL as the buffer and/or 0 as the length, if you just want to learn how much space the string is going to require. The functions will return -1 if the input is invalid UTF-8 or cannot be encoded as UTF-8. */ static int utf8_char_bytes OF((ZCONST char *utf8)); static ulg ucs4_char_from_utf8 OF((ZCONST char **utf8)); static int utf8_to_ucs4_string OF((ZCONST char *utf8, ulg *ucs4buf, int buflen)); /* utility functions for managing UTF-8 and UCS-4 strings */ /* utf8_char_bytes * * Returns the number of bytes used by the first character in a UTF-8 * string, or -1 if the UTF-8 is invalid or null. */ static int utf8_char_bytes(utf8) ZCONST char *utf8; { int t, r; unsigned lead; if (!utf8) return -1; /* no input */ lead = (unsigned char) *utf8; if (lead < 0x80) r = 1; /* an ascii-7 character */ else if (lead < 0xC0) return -1; /* error: trailing byte without lead byte */ else if (lead < 0xE0) r = 2; /* an 11 bit character */ else if (lead < 0xF0) r = 3; /* a 16 bit character */ else if (lead < 0xF8) r = 4; /* a 21 bit character (the most currently used) */ else if (lead < 0xFC) r = 5; /* a 26 bit character (shouldn't happen) */ else if (lead < 0xFE) r = 6; /* a 31 bit character (shouldn't happen) */ else return -1; /* error: invalid lead byte */ for (t = 1; t < r; t++) if ((unsigned char) utf8[t] < 0x80 || (unsigned char) utf8[t] >= 0xC0) return -1; /* error: not enough valid trailing bytes */ return r; } /* ucs4_char_from_utf8 * * Given a reference to a pointer into a UTF-8 string, returns the next * UCS-4 character and advances the pointer to the next character sequence. * Returns ~0 (= -1 in twos-complement notation) and does not advance the * pointer when input is ill-formed. */ static ulg ucs4_char_from_utf8(utf8) ZCONST char **utf8; { ulg ret; int t, bytes; if (!utf8) return ~0L; /* no input */ bytes = utf8_char_bytes(*utf8); if (bytes <= 0) return ~0L; /* invalid input */ if (bytes == 1) ret = **utf8; /* ascii-7 */ else ret = **utf8 & (0x7F >> bytes); /* lead byte of a multibyte sequence */ (*utf8)++; for (t = 1; t < bytes; t++) /* consume trailing bytes */ ret = (ret << 6) | (*((*utf8)++) & 0x3F); return (zwchar) ret; } #if 0 /* currently unused */ /* utf8_from_ucs4_char - Convert UCS char to UTF-8 * * Returns the number of bytes put into utf8buf to represent ch, from 1 to 6, * or -1 if ch is too large to represent. utf8buf must have room for 6 bytes. */ static int utf8_from_ucs4_char(utf8buf, ch) char *utf8buf; ulg ch; { int trailing = 0; int leadmask = 0x80; int leadbits = 0x3F; int tch = ch; int ret; if (ch > 0x7FFFFFFFL) return -1; /* UTF-8 can represent 31 bits */ if (ch < 0x7F) { *utf8buf++ = (char) ch; /* ascii-7 */ return 1; } do { trailing++; leadmask = (leadmask >> 1) | 0x80; leadbits >>= 1; tch >>= 6; } while (tch & ~leadbits); ret = trailing + 1; /* produce lead byte */ *utf8buf++ = (char) (leadmask | (ch >> (6 * trailing))); while (--trailing >= 0) /* produce trailing bytes */ *utf8buf++ = (char) (0x80 | ((ch >> (6 * trailing)) & 0x3F)); return ret; } #endif /* unused */ /*===================================================================*/ /* utf8_to_ucs4_string - convert UTF-8 string to UCS string * * Return UCS count. Now returns int so can return -1. */ static int utf8_to_ucs4_string(utf8, ucs4buf, buflen) ZCONST char *utf8; ulg *ucs4buf; int buflen; { int count = 0; for (;;) { ulg ch = ucs4_char_from_utf8(&utf8); if (ch == ~0L) return -1; else { if (ucs4buf && count < buflen) ucs4buf[count] = ch; if (ch == 0) return count; count++; } } } #if 0 /* currently unused */ /* ucs4_string_to_utf8 * * */ static int ucs4_string_to_utf8(ucs4, utf8buf, buflen) ZCONST ulg *ucs4; char *utf8buf; int buflen; { char mb[6]; int count = 0; if (!ucs4) return -1; for (;;) { int mbl = utf8_from_ucs4_char(mb, *ucs4++); int c; if (mbl <= 0) return -1; /* We could optimize this a bit by passing utf8buf + count */ /* directly to utf8_from_ucs4_char when buflen >= count + 6... */ c = buflen - count; if (mbl < c) c = mbl; if (utf8buf && count < buflen) strncpy(utf8buf + count, mb, c); if (mbl == 1 && !mb[0]) return count; /* terminating nul */ count += mbl; } } /* utf8_chars * * Wrapper: counts the actual unicode characters in a UTF-8 string. */ static int utf8_chars(utf8) ZCONST char *utf8; { return utf8_to_ucs4_string(utf8, NULL, 0); } #endif /* unused */ /* --------------------------------------------------- */ /* Unicode Support * * These functions common for all Unicode ports. * * These functions should allocate and return strings that can be * freed with free(). * * 8/27/05 EG * * Use zwchar for wide char which is unsigned long * in zip.h and 32 bits. This avoids problems with * different sizes of wchar_t. */ #if 0 /* currently unused */ /* is_ascii_string * Checks if a string is all ascii */ int is_ascii_string(mbstring) ZCONST char *mbstring; { char *p; uch c; for (p = mbstring; c = (uch)*p; p++) { if (c > 0x7F) { return 0; } } return 1; } /* local to UTF-8 */ char *local_to_utf8_string(local_string) ZCONST char *local_string; { return wide_to_utf8_string(local_to_wide_string(local_string)); } # endif /* unused */ /* wide_to_escape_string provides a string that represents a wide char not in local char set An initial try at an algorithm. Suggestions welcome. According to the standard, Unicode character points are restricted to the number range from 0 to 0x10FFFF, respective 21 bits. For a hexadecimal notation, 2 octets are sufficient for the mostly used characters from the "Basic Multilingual Plane", all other Unicode characters can be represented by 3 octets (= 6 hex digits). The Unicode standard suggests to write Unicode character points as 4 resp. 6 hex digits, preprended by "U+". (e.g.: U+10FFFF for the highest character point, or U+0030 for the ASCII digit "0") However, for the purpose of escaping non-ASCII chars in an ASCII character stream, the "U" is not a very good escape initializer. Therefore, we use the following convention within our Info-ZIP code: If not an ASCII char probably need 2 bytes at least. So if a 2-byte wide encode it as 4 hex digits with a leading #U. If needs 3 bytes then prefix the string with #L. So #U1234 is a 2-byte wide character with bytes 0x12 and 0x34 while #L123456 is a 3-byte wide character with bytes 0x12, 0x34, 0x56. On Windows, wide that need two wide characters need to be converted to a single number. */ /* set this to the max bytes an escape can be */ #define MAX_ESCAPE_BYTES 8 char *wide_to_escape_string(wide_char) zwchar wide_char; { int i; zwchar w = wide_char; uch b[sizeof(zwchar)]; char d[3]; char e[11]; int len; char *r; /* fill byte array with zeros */ memzero(b, sizeof(zwchar)); /* get bytes in right to left order */ for (len = 0; w; len++) { b[len] = (char)(w % 0x100); w /= 0x100; } strcpy(e, "#"); /* either 2 bytes or 3 bytes */ if (len <= 2) { len = 2; strcat(e, "U"); } else { strcat(e, "L"); } for (i = len - 1; i >= 0; i--) { sprintf(d, "%02x", b[i]); strcat(e, d); } if ((r = malloc(strlen(e) + 1)) == NULL) { return NULL; } strcpy(r, e); return r; } #if 0 /* currently unused */ /* returns the wide character represented by the escape string */ zwchar escape_string_to_wide(escape_string) ZCONST char *escape_string; { int i; zwchar w; char c; int len; ZCONST char *e = escape_string; if (e == NULL) { return 0; } if (e[0] != '#') { /* no leading # */ return 0; } len = strlen(e); /* either #U1234 or #L123456 format */ if (len != 6 && len != 8) { return 0; } w = 0; if (e[1] == 'L') { if (len != 8) { return 0; } /* 3 bytes */ for (i = 2; i < 8; i++) { c = e[i]; if (c < '0' || c > '9') { return 0; } w = w * 0x10 + (zwchar)(c - '0'); } } else if (e[1] == 'U') { /* 2 bytes */ for (i = 2; i < 6; i++) { c = e[i]; if (c < '0' || c > '9') { return 0; } w = w * 0x10 + (zwchar)(c - '0'); } } return w; } #endif /* unused */ #ifndef WIN32 /* WIN32 supplies a special variant of this function */ /* convert wide character string to multi-byte character string */ char *wide_to_local_string(wide_string, escape_all) ZCONST zwchar *wide_string; int escape_all; { int i; wchar_t wc; int b; int state_dependent; int wsize = 0; int max_bytes = MB_CUR_MAX; char buf[9]; char *buffer = NULL; char *local_string = NULL; for (wsize = 0; wide_string[wsize]; wsize++) ; if (max_bytes < MAX_ESCAPE_BYTES) max_bytes = MAX_ESCAPE_BYTES; if ((buffer = (char *)malloc(wsize * max_bytes + 1)) == NULL) { return NULL; } /* convert it */ buffer[0] = '\0'; /* set initial state if state-dependent encoding */ wc = (wchar_t)'a'; b = wctomb(NULL, wc); if (b == 0) state_dependent = 0; else state_dependent = 1; for (i = 0; i < wsize; i++) { if (sizeof(wchar_t) < 4 && wide_string[i] > 0xFFFF) { /* wchar_t probably 2 bytes */ /* could do surrogates if state_dependent and wctomb can do */ wc = zwchar_to_wchar_t_default_char; } else { wc = (wchar_t)wide_string[i]; } b = wctomb(buf, wc); if (escape_all) { if (b == 1 && (uch)buf[0] <= 0x7f) { /* ASCII */ strncat(buffer, buf, b); } else { /* use escape for wide character */ char *escape_string = wide_to_escape_string(wide_string[i]); strcat(buffer, escape_string); free(escape_string); } } else if (b > 0) { /* multi-byte char */ strncat(buffer, buf, b); } else { /* no MB for this wide */ /* use escape for wide character */ char *escape_string = wide_to_escape_string(wide_string[i]); strcat(buffer, escape_string); free(escape_string); } } if ((local_string = (char *)malloc(strlen(buffer) + 1)) != NULL) { strcpy(local_string, buffer); } free(buffer); return local_string; } #endif /* !WIN32 */ #if 0 /* currently unused */ /* convert local string to display character set string */ char *local_to_display_string(local_string) ZCONST char *local_string; { char *display_string; /* For Windows, OEM string should never be bigger than ANSI string, says CharToOem description. For all other ports, just make a copy of local_string. */ if ((display_string = (char *)malloc(strlen(local_string) + 1)) == NULL) { return NULL; } strcpy(display_string, local_string); #ifdef EBCDIC { char *ebc; if ((ebc = malloc(strlen(display_string) + 1)) == NULL) { return NULL; } strtoebc(ebc, display_string); free(display_string); display_string = ebc; } #endif return display_string; } #endif /* unused */ /* UTF-8 to local */ char *utf8_to_local_string(utf8_string, escape_all) ZCONST char *utf8_string; int escape_all; { zwchar *wide = utf8_to_wide_string(utf8_string); char *loc = wide_to_local_string(wide, escape_all); free(wide); return loc; } #if 0 /* currently unused */ /* convert multi-byte character string to wide character string */ zwchar *local_to_wide_string(local_string) ZCONST char *local_string; { int wsize; wchar_t *wc_string; zwchar *wide_string; /* for now try to convert as string - fails if a bad char in string */ wsize = mbstowcs(NULL, local_string, strlen(local_string) + 1); if (wsize == (size_t)-1) { /* could not convert */ return NULL; } /* convert it */ if ((wc_string = (wchar_t *)malloc((wsize + 1) * sizeof(wchar_t))) == NULL) { return NULL; } wsize = mbstowcs(wc_string, local_string, strlen(local_string) + 1); wc_string[wsize] = (wchar_t) 0; /* in case wchar_t is not zwchar */ if ((wide_string = (zwchar *)malloc((wsize + 1) * sizeof(zwchar))) == NULL) { return NULL; } for (wsize = 0; wide_string[wsize] = (zwchar)wc_string[wsize]; wsize++) ; wide_string[wsize] = (zwchar) 0; free(wc_string); return wide_string; } /* convert wide string to UTF-8 */ char *wide_to_utf8_string(wide_string) ZCONST zwchar *wide_string; { int mbcount; char *utf8_string; /* get size of utf8 string */ mbcount = ucs4_string_to_utf8(wide_string, NULL, 0); if (mbcount == -1) return NULL; if ((utf8_string = (char *) malloc(mbcount + 1)) == NULL) { return NULL; } mbcount = ucs4_string_to_utf8(wide_string, utf8_string, mbcount + 1); if (mbcount == -1) return NULL; return utf8_string; } #endif /* unused */ /* convert UTF-8 string to wide string */ zwchar *utf8_to_wide_string(utf8_string) ZCONST char *utf8_string; { int wcount; zwchar *wide_string; wcount = utf8_to_ucs4_string(utf8_string, NULL, 0); if (wcount == -1) return NULL; if ((wide_string = (zwchar *) malloc((wcount + 1) * sizeof(zwchar))) == NULL) { return NULL; } wcount = utf8_to_ucs4_string(utf8_string, wide_string, wcount + 1); return wide_string; } #endif /* UNICODE_WCHAR */ #endif /* UNICODE_SUPPORT */ #ifdef USE_EF_UT_TIME #ifdef IZ_HAVE_UXUIDGID static int read_ux3_value(dbuf, uidgid_sz, p_uidgid) ZCONST uch *dbuf; /* buffer a uid or gid value */ unsigned uidgid_sz; /* size of uid/gid value */ ulg *p_uidgid; /* return storage: uid or gid value */ { zusz_t uidgid64; switch (uidgid_sz) { case 2: *p_uidgid = (ulg)makeword(dbuf); break; case 4: *p_uidgid = (ulg)makelong(dbuf); break; case 8: uidgid64 = makeint64(dbuf); #ifndef LARGE_FILE_SUPPORT if (uidgid64 == (zusz_t)0xffffffffL) return FALSE; #endif *p_uidgid = (ulg)uidgid64; if ((zusz_t)(*p_uidgid) != uidgid64) return FALSE; break; } return TRUE; } #endif /* IZ_HAVE_UXUIDGID */ /*******************************/ /* Function ef_scan_for_izux() */ /*******************************/ unsigned ef_scan_for_izux(ef_buf, ef_len, ef_is_c, dos_mdatetime, z_utim, z_uidgid) ZCONST uch *ef_buf; /* buffer containing extra field */ unsigned ef_len; /* total length of extra field */ int ef_is_c; /* flag indicating "is central extra field" */ ulg dos_mdatetime; /* last_mod_file_date_time in DOS format */ iztimes *z_utim; /* return storage: atime, mtime, ctime */ ulg *z_uidgid; /* return storage: uid and gid */ { unsigned flags = 0; unsigned eb_id; unsigned eb_len; int have_new_type_eb = 0; long i_time; /* buffer for Unix style 32-bit integer time value */ #ifdef TIME_T_TYPE_DOUBLE int ut_in_archive_sgn = 0; #else int ut_zip_unzip_compatible = FALSE; #endif /*--------------------------------------------------------------------------- This function scans the extra field for EF_TIME, EF_IZUNIX2, EF_IZUNIX, or EF_PKUNIX blocks containing Unix-style time_t (GMT) values for the entry's access, creation, and modification time. If a valid block is found, the time stamps are copied to the iztimes structure (provided the z_utim pointer is not NULL). If a IZUNIX2 block is found or the IZUNIX block contains UID/GID fields, and the z_uidgid array pointer is valid (!= NULL), the owner info is transfered as well. The presence of an EF_TIME or EF_IZUNIX2 block results in ignoring all data from probably present obsolete EF_IZUNIX blocks. If multiple blocks of the same type are found, only the information from the last block is used. The return value is a combination of the EF_TIME Flags field with an additional flag bit indicating the presence of valid UID/GID info, or 0 in case of failure. ---------------------------------------------------------------------------*/ if (ef_len == 0 || ef_buf == NULL || (z_utim == 0 && z_uidgid == NULL)) return 0; TTrace((stderr,"\nef_scan_for_izux: scanning extra field of length %u\n", ef_len)); while (ef_len >= EB_HEADSIZE) { eb_id = makeword(EB_ID + ef_buf); eb_len = makeword(EB_LEN + ef_buf); if (eb_len > (ef_len - EB_HEADSIZE)) { /* discovered some extra field inconsistency! */ TTrace((stderr, "ef_scan_for_izux: block length %u > rest ef_size %u\n", eb_len, ef_len - EB_HEADSIZE)); break; } switch (eb_id) { case EF_TIME: flags &= ~0x0ff; /* ignore previous IZUNIX or EF_TIME fields */ have_new_type_eb = 1; if ( eb_len >= EB_UT_MINLEN && z_utim != NULL) { unsigned eb_idx = EB_UT_TIME1; TTrace((stderr,"ef_scan_for_izux: found TIME extra field\n")); flags |= (ef_buf[EB_HEADSIZE+EB_UT_FLAGS] & 0x0ff); if ((flags & EB_UT_FL_MTIME)) { if ((eb_idx+4) <= eb_len) { i_time = (long)makelong((EB_HEADSIZE+eb_idx) + ef_buf); eb_idx += 4; TTrace((stderr," UT e.f. modification time = %ld\n", i_time)); #ifdef TIME_T_TYPE_DOUBLE if ((ulg)(i_time) & (ulg)(0x80000000L)) { if (dos_mdatetime == DOSTIME_MINIMUM) { ut_in_archive_sgn = -1; z_utim->mtime = (time_t)((long)i_time | (~(long)0x7fffffffL)); } else if (dos_mdatetime >= DOSTIME_2038_01_18) { ut_in_archive_sgn = 1; z_utim->mtime = (time_t)((ulg)i_time & (ulg)0xffffffffL); } else { ut_in_archive_sgn = 0; /* cannot determine sign of mtime; without modtime: ignore complete UT field */ flags &= ~0x0ff; /* no time_t times available */ TTrace((stderr, " UT modtime range error; ignore e.f.!\n")); break; /* stop scanning this field */ } } else { /* cannot determine, safe assumption is FALSE */ ut_in_archive_sgn = 0; z_utim->mtime = (time_t)i_time; } #else /* !TIME_T_TYPE_DOUBLE */ if ((ulg)(i_time) & (ulg)(0x80000000L)) { ut_zip_unzip_compatible = ((time_t)0x80000000L < (time_t)0L) ? (dos_mdatetime == DOSTIME_MINIMUM) : (dos_mdatetime >= DOSTIME_2038_01_18); if (!ut_zip_unzip_compatible) { /* UnZip interprets mtime differently than Zip; without modtime: ignore complete UT field */ flags &= ~0x0ff; /* no time_t times available */ TTrace((stderr, " UT modtime range error; ignore e.f.!\n")); break; /* stop scanning this field */ } } else { /* cannot determine, safe assumption is FALSE */ ut_zip_unzip_compatible = FALSE; } z_utim->mtime = (time_t)i_time; #endif /* ?TIME_T_TYPE_DOUBLE */ } else { flags &= ~EB_UT_FL_MTIME; TTrace((stderr," UT e.f. truncated; no modtime\n")); } } if (ef_is_c) { break; /* central version of TIME field ends here */ } if (flags & EB_UT_FL_ATIME) { if ((eb_idx+4) <= eb_len) { i_time = (long)makelong((EB_HEADSIZE+eb_idx) + ef_buf); eb_idx += 4; TTrace((stderr," UT e.f. access time = %ld\n", i_time)); #ifdef TIME_T_TYPE_DOUBLE if ((ulg)(i_time) & (ulg)(0x80000000L)) { if (ut_in_archive_sgn == -1) z_utim->atime = (time_t)((long)i_time | (~(long)0x7fffffffL)); } else if (ut_in_archive_sgn == 1) { z_utim->atime = (time_t)((ulg)i_time & (ulg)0xffffffffL); } else { /* sign of 32-bit time is unknown -> ignore it */ flags &= ~EB_UT_FL_ATIME; TTrace((stderr, " UT access time range error: skip time!\n")); } } else { z_utim->atime = (time_t)i_time; } #else /* !TIME_T_TYPE_DOUBLE */ if (((ulg)(i_time) & (ulg)(0x80000000L)) && !ut_zip_unzip_compatible) { flags &= ~EB_UT_FL_ATIME; TTrace((stderr, " UT access time range error: skip time!\n")); } else { z_utim->atime = (time_t)i_time; } #endif /* ?TIME_T_TYPE_DOUBLE */ } else { flags &= ~EB_UT_FL_ATIME; } } if (flags & EB_UT_FL_CTIME) { if ((eb_idx+4) <= eb_len) { i_time = (long)makelong((EB_HEADSIZE+eb_idx) + ef_buf); TTrace((stderr," UT e.f. creation time = %ld\n", i_time)); #ifdef TIME_T_TYPE_DOUBLE if ((ulg)(i_time) & (ulg)(0x80000000L)) { if (ut_in_archive_sgn == -1) z_utim->ctime = (time_t)((long)i_time | (~(long)0x7fffffffL)); } else if (ut_in_archive_sgn == 1) { z_utim->ctime = (time_t)((ulg)i_time & (ulg)0xffffffffL); } else { /* sign of 32-bit time is unknown -> ignore it */ flags &= ~EB_UT_FL_CTIME; TTrace((stderr, " UT creation time range error: skip time!\n")); } } else { z_utim->ctime = (time_t)i_time; } #else /* !TIME_T_TYPE_DOUBLE */ if (((ulg)(i_time) & (ulg)(0x80000000L)) && !ut_zip_unzip_compatible) { flags &= ~EB_UT_FL_CTIME; TTrace((stderr, " UT creation time range error: skip time!\n")); } else { z_utim->ctime = (time_t)i_time; } #endif /* ?TIME_T_TYPE_DOUBLE */ } else { flags &= ~EB_UT_FL_CTIME; } } } break; case EF_IZUNIX2: if (have_new_type_eb == 0) { flags &= ~0x0ff; /* ignore any previous IZUNIX field */ have_new_type_eb = 1; } #ifdef IZ_HAVE_UXUIDGID if (have_new_type_eb > 1) break; /* IZUNIX3 overrides IZUNIX2 e.f. block ! */ if (eb_len == EB_UX2_MINLEN && z_uidgid != NULL) { z_uidgid[0] = (ulg)makeword((EB_HEADSIZE+EB_UX2_UID) + ef_buf); z_uidgid[1] = (ulg)makeword((EB_HEADSIZE+EB_UX2_GID) + ef_buf); flags |= EB_UX2_VALID; /* signal success */ } #endif break; case EF_IZUNIX3: /* new 3rd generation Unix ef */ have_new_type_eb = 2; /* Version 1 byte version of this extra field, currently 1 UIDSize 1 byte Size of UID field UID Variable UID for this entry GIDSize 1 byte Size of GID field GID Variable GID for this entry */ #ifdef IZ_HAVE_UXUIDGID if (eb_len >= EB_UX3_MINLEN && z_uidgid != NULL && (*((EB_HEADSIZE + 0) + ef_buf) == 1) /* only know about version 1 */ { uch uid_size; uch gid_size; uid_size = *((EB_HEADSIZE + 1) + ef_buf); gid_size = *((EB_HEADSIZE + uid_size + 2) + ef_buf); flags &= ~0x0ff; /* ignore any previous UNIX field */ if ( read_ux3_value((EB_HEADSIZE + 2) + ef_buf, uid_size, z_uidgid[0]) && read_ux3_value((EB_HEADSIZE + uid_size + 3) + ef_buf, gid_size, z_uidgid[1]) ) { flags |= EB_UX2_VALID; /* signal success */ } } #endif /* IZ_HAVE_UXUIDGID */ break; case EF_IZUNIX: case EF_PKUNIX: /* PKUNIX e.f. layout is identical to IZUNIX */ if (eb_len >= EB_UX_MINLEN) { TTrace((stderr,"ef_scan_for_izux: found %s extra field\n", (eb_id == EF_IZUNIX ? "IZUNIX" : "PKUNIX"))); if (have_new_type_eb > 0) { break; /* Ignore IZUNIX extra field block ! */ } if (z_utim != NULL) { flags |= (EB_UT_FL_MTIME | EB_UT_FL_ATIME); i_time = (long)makelong((EB_HEADSIZE+EB_UX_MTIME)+ef_buf); TTrace((stderr," Unix EF modtime = %ld\n", i_time)); #ifdef TIME_T_TYPE_DOUBLE if ((ulg)(i_time) & (ulg)(0x80000000L)) { if (dos_mdatetime == DOSTIME_MINIMUM) { ut_in_archive_sgn = -1; z_utim->mtime = (time_t)((long)i_time | (~(long)0x7fffffffL)); } else if (dos_mdatetime >= DOSTIME_2038_01_18) { ut_in_archive_sgn = 1; z_utim->mtime = (time_t)((ulg)i_time & (ulg)0xffffffffL); } else { ut_in_archive_sgn = 0; /* cannot determine sign of mtime; without modtime: ignore complete UT field */ flags &= ~0x0ff; /* no time_t times available */ TTrace((stderr, " UX modtime range error: ignore e.f.!\n")); } } else { /* cannot determine, safe assumption is FALSE */ ut_in_archive_sgn = 0; z_utim->mtime = (time_t)i_time; } #else /* !TIME_T_TYPE_DOUBLE */ if ((ulg)(i_time) & (ulg)(0x80000000L)) { ut_zip_unzip_compatible = ((time_t)0x80000000L < (time_t)0L) ? (dos_mdatetime == DOSTIME_MINIMUM) : (dos_mdatetime >= DOSTIME_2038_01_18); if (!ut_zip_unzip_compatible) { /* UnZip interpretes mtime differently than Zip; without modtime: ignore complete UT field */ flags &= ~0x0ff; /* no time_t times available */ TTrace((stderr, " UX modtime range error: ignore e.f.!\n")); } } else { /* cannot determine, safe assumption is FALSE */ ut_zip_unzip_compatible = FALSE; } z_utim->mtime = (time_t)i_time; #endif /* ?TIME_T_TYPE_DOUBLE */ i_time = (long)makelong((EB_HEADSIZE+EB_UX_ATIME)+ef_buf); TTrace((stderr," Unix EF actime = %ld\n", i_time)); #ifdef TIME_T_TYPE_DOUBLE if ((ulg)(i_time) & (ulg)(0x80000000L)) { if (ut_in_archive_sgn == -1) z_utim->atime = (time_t)((long)i_time | (~(long)0x7fffffffL)); } else if (ut_in_archive_sgn == 1) { z_utim->atime = (time_t)((ulg)i_time & (ulg)0xffffffffL); } else if (flags & 0x0ff) { /* sign of 32-bit time is unknown -> ignore it */ flags &= ~EB_UT_FL_ATIME; TTrace((stderr, " UX access time range error: skip time!\n")); } } else { z_utim->atime = (time_t)i_time; } #else /* !TIME_T_TYPE_DOUBLE */ if (((ulg)(i_time) & (ulg)(0x80000000L)) && !ut_zip_unzip_compatible && (flags & 0x0ff)) { /* atime not in range of UnZip's time_t */ flags &= ~EB_UT_FL_ATIME; TTrace((stderr, " UX access time range error: skip time!\n")); } else { z_utim->atime = (time_t)i_time; } #endif /* ?TIME_T_TYPE_DOUBLE */ } #ifdef IZ_HAVE_UXUIDGID if (eb_len >= EB_UX_FULLSIZE && z_uidgid != NULL) { z_uidgid[0] = makeword((EB_HEADSIZE+EB_UX_UID) + ef_buf); z_uidgid[1] = makeword((EB_HEADSIZE+EB_UX_GID) + ef_buf); flags |= EB_UX2_VALID; } #endif /* IZ_HAVE_UXUIDGID */ } break; default: break; } /* Skip this extra field block */ ef_buf += (eb_len + EB_HEADSIZE); ef_len -= (eb_len + EB_HEADSIZE); } return flags; } #endif /* USE_EF_UT_TIME */ #if (defined(RISCOS) || defined(ACORN_FTYPE_NFS)) #define SPARKID_2 0x30435241 /* = "ARC0" */ /*******************************/ /* Function getRISCOSexfield() */ /*******************************/ zvoid *getRISCOSexfield(ef_buf, ef_len) ZCONST uch *ef_buf; /* buffer containing extra field */ unsigned ef_len; /* total length of extra field */ { unsigned eb_id; unsigned eb_len; /*--------------------------------------------------------------------------- This function scans the extra field for a Acorn SPARK filetype ef-block. If a valid block is found, the function returns a pointer to the start of the SPARK_EF block in the extra field buffer. Otherwise, a NULL pointer is returned. ---------------------------------------------------------------------------*/ if (ef_len == 0 || ef_buf == NULL) return NULL; Trace((stderr,"\ngetRISCOSexfield: scanning extra field of length %u\n", ef_len)); while (ef_len >= EB_HEADSIZE) { eb_id = makeword(EB_ID + ef_buf); eb_len = makeword(EB_LEN + ef_buf); if (eb_len > (ef_len - EB_HEADSIZE)) { /* discovered some extra field inconsistency! */ Trace((stderr, "getRISCOSexfield: block length %u > rest ef_size %u\n", eb_len, ef_len - EB_HEADSIZE)); break; } if (eb_id == EF_SPARK && (eb_len == 24 || eb_len == 20)) { if (makelong(EB_HEADSIZE + ef_buf) == SPARKID_2) { /* Return a pointer to the valid SPARK filetype ef block */ return (zvoid *)ef_buf; } } /* Skip this extra field block */ ef_buf += (eb_len + EB_HEADSIZE); ef_len -= (eb_len + EB_HEADSIZE); } return NULL; } #endif /* (RISCOS || ACORN_FTYPE_NFS) */ Carla-2.4.2/data/windows/unzipfx-carla/ttyio.c000066400000000000000000000510341420416754300212540ustar00rootroot00000000000000/* Copyright (c) 1990-2008 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2000-Apr-09 or later (the contents of which are also included in zip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- ttyio.c This file contains routines for doing console input/output, including code for non-echoing input. It is used by the encryption/decryption code but does not contain any restricted code itself. This file is shared between Info-ZIP's Zip and UnZip. Contains: echo() (VMS only) Echon() (Unix only) Echoff() (Unix only) screensize() (Unix only) zgetch() (Unix, VMS, and non-Unix/VMS versions) getp() ("PC," Unix/Atari/Be, VMS/VMCMS/MVS) ---------------------------------------------------------------------------*/ #define __TTYIO_C /* identifies this source module */ #include "zip.h" #include "crypt.h" #if (CRYPT || (defined(UNZIP) && !defined(FUNZIP))) /* Non-echo console/keyboard input is needed for (en/de)cryption's password * entry, and for UnZip(SFX)'s MORE and Pause features. * (The corresponding #endif is found at the end of this module.) */ #include "ttyio.h" #ifndef PUTC # define PUTC putc #endif #ifdef ZIP # ifdef GLOBAL /* used in Amiga system headers, maybe others too */ # undef GLOBAL # endif # define GLOBAL(g) g #else # define GLOBAL(g) G.g #endif #if (defined(__ATHEOS__) || defined(__BEOS__)) /* why yes, we do */ # define HAVE_TERMIOS_H #endif #ifdef _POSIX_VERSION # ifndef USE_POSIX_TERMIOS # define USE_POSIX_TERMIOS /* use POSIX style termio (termios) */ # endif # ifndef HAVE_TERMIOS_H # define HAVE_TERMIOS_H /* POSIX termios.h */ # endif #endif /* _POSIX_VERSION */ #ifdef UNZIP /* Zip handles this with the unix/configure script */ # ifndef _POSIX_VERSION # if (defined(SYSV) || defined(CRAY)) && !defined(__MINT__) # ifndef USE_SYSV_TERMIO # define USE_SYSV_TERMIO # endif # ifdef COHERENT # ifndef HAVE_TERMIO_H # define HAVE_TERMIO_H # endif # ifdef HAVE_SYS_TERMIO_H # undef HAVE_SYS_TERMIO_H # endif # else /* !COHERENT */ # ifdef HAVE_TERMIO_H # undef HAVE_TERMIO_H # endif # ifndef HAVE_SYS_TERMIO_H # define HAVE_SYS_TERMIO_H # endif # endif /* ?COHERENT */ # endif /* (SYSV || CRAY) && !__MINT__ */ # endif /* !_POSIX_VERSION */ # if !(defined(BSD4_4) || defined(SYSV) || defined(__convexc__)) # ifndef NO_FCNTL_H # define NO_FCNTL_H # endif # endif /* !(BSD4_4 || SYSV || __convexc__) */ #endif /* UNZIP */ #ifdef HAVE_TERMIOS_H # ifndef USE_POSIX_TERMIOS # define USE_POSIX_TERMIOS # endif #endif #if (defined(HAVE_TERMIO_H) || defined(HAVE_SYS_TERMIO_H)) # ifndef USE_SYSV_TERMIO # define USE_SYSV_TERMIO # endif #endif #if (defined(UNZIP) && !defined(FUNZIP) && defined(UNIX) && defined(MORE)) # include # define GOT_IOCTL_H /* int ioctl OF((int, int, zvoid *)); GRR: may need for some systems */ #endif #ifndef HAVE_WORKING_GETCH /* include system support for switching of console echo */ # ifdef VMS # include # include # include /* Workaround for broken header files of older DECC distributions * that are incompatible with the /NAMES=AS_IS qualifier. */ # define sys$assign SYS$ASSIGN # define sys$dassgn SYS$DASSGN # define sys$qiow SYS$QIOW # include # include # else /* !VMS */ # ifdef HAVE_TERMIOS_H # include # define sgttyb termios # define sg_flags c_lflag # define GTTY(f, s) tcgetattr(f, (zvoid *) s) # define STTY(f, s) tcsetattr(f, TCSAFLUSH, (zvoid *) s) # else /* !HAVE_TERMIOS_H */ # ifdef USE_SYSV_TERMIO /* Amdahl, Cray, all SysV? */ # ifdef HAVE_TERMIO_H # include # endif # ifdef HAVE_SYS_TERMIO_H # include # endif # ifdef NEED_PTEM # include # include # endif # define sgttyb termio # define sg_flags c_lflag # define GTTY(f,s) ioctl(f,TCGETA,(zvoid *)s) # define STTY(f,s) ioctl(f,TCSETAW,(zvoid *)s) # else /* !USE_SYSV_TERMIO */ # ifndef CMS_MVS # if (!defined(MINIX) && !defined(GOT_IOCTL_H)) # include # endif # include # define GTTY gtty # define STTY stty # ifdef UNZIP /* * XXX : Are these declarations needed at all ???? */ /* * GRR: let's find out... Hmmm, appears not... int gtty OF((int, struct sgttyb *)); int stty OF((int, struct sgttyb *)); */ # endif # endif /* !CMS_MVS */ # endif /* ?USE_SYSV_TERMIO */ # endif /* ?HAVE_TERMIOS_H */ # ifndef NO_FCNTL_H # ifndef UNZIP # include # endif # else char *ttyname OF((int)); # endif # endif /* ?VMS */ #endif /* !HAVE_WORKING_GETCH */ #ifndef HAVE_WORKING_GETCH #ifdef VMS static struct dsc$descriptor_s DevDesc = {11, DSC$K_DTYPE_T, DSC$K_CLASS_S, "SYS$COMMAND"}; /* {dsc$w_length, dsc$b_dtype, dsc$b_class, dsc$a_pointer}; */ /* * Turn keyboard echoing on or off (VMS). Loosely based on VMSmunch.c * and hence on Joe Meadows' file.c code. */ int echo(opt) int opt; { /* * For VMS v5.x: * IO$_SENSEMODE/SETMODE info: Programming, Vol. 7A, System Programming, * I/O User's: Part I, sec. 8.4.1.1, 8.4.3, 8.4.5, 8.6 * sys$assign(), sys$qio() info: Programming, Vol. 4B, System Services, * System Services Reference Manual, pp. sys-23, sys-379 * fixed-length descriptor info: Programming, Vol. 3, System Services, * Intro to System Routines, sec. 2.9.2 * Greg Roelofs, 15 Aug 91 */ short DevChan, iosb[4]; long status; unsigned long ttmode[2]; /* space for 8 bytes */ /* assign a channel to standard input */ status = sys$assign(&DevDesc, &DevChan, 0, 0); if (!(status & 1)) return status; /* use sys$qio and the IO$_SENSEMODE function to determine the current * tty status (for password reading, could use IO$_READVBLK function * instead, but echo on/off will be more general) */ status = sys$qiow(0, DevChan, IO$_SENSEMODE, &iosb, 0, 0, ttmode, 8, 0, 0, 0, 0); if (!(status & 1)) return status; status = iosb[0]; if (!(status & 1)) return status; /* modify mode buffer to be either NOECHO or ECHO * (depending on function argument opt) */ if (opt == 0) /* off */ ttmode[1] |= TT$M_NOECHO; /* set NOECHO bit */ else ttmode[1] &= ~((unsigned long) TT$M_NOECHO); /* clear NOECHO bit */ /* use the IO$_SETMODE function to change the tty status */ status = sys$qiow(0, DevChan, IO$_SETMODE, &iosb, 0, 0, ttmode, 8, 0, 0, 0, 0); if (!(status & 1)) return status; status = iosb[0]; if (!(status & 1)) return status; /* deassign the sys$input channel by way of clean-up */ status = sys$dassgn(DevChan); if (!(status & 1)) return status; return SS$_NORMAL; /* we be happy */ } /* end function echo() */ /* * Read a single character from keyboard in non-echoing mode (VMS). * (returns EOF in case of errors) */ int tt_getch() { short DevChan, iosb[4]; long status; char kbbuf[16]; /* input buffer with - some - excess length */ /* assign a channel to standard input */ status = sys$assign(&DevDesc, &DevChan, 0, 0); if (!(status & 1)) return EOF; /* read a single character from SYS$COMMAND (no-echo) and * wait for completion */ status = sys$qiow(0,DevChan, IO$_READVBLK|IO$M_NOECHO|IO$M_NOFILTR, &iosb, 0, 0, &kbbuf, 1, 0, 0, 0, 0); if ((status&1) == 1) status = iosb[0]; /* deassign the sys$input channel by way of clean-up * (for this step, we do not need to check the completion status) */ sys$dassgn(DevChan); /* return the first char read, or EOF in case the read request failed */ return (int)(((status&1) == 1) ? (uch)kbbuf[0] : EOF); } /* end function tt_getch() */ #else /* !VMS: basically Unix */ /* For VM/CMS and MVS, non-echo terminal input is not (yet?) supported. */ #ifndef CMS_MVS #ifdef ZIP /* moved to globals.h for UnZip */ static int echofd=(-1); /* file descriptor whose echo is off */ #endif /* * Turn echo off for file descriptor f. Assumes that f is a tty device. */ void Echoff(__G__ f) __GDEF int f; /* file descriptor for which to turn echo off */ { struct sgttyb sg; /* tty device structure */ GLOBAL(echofd) = f; GTTY(f, &sg); /* get settings */ sg.sg_flags &= ~ECHO; /* turn echo off */ STTY(f, &sg); } /* * Turn echo back on for file descriptor echofd. */ void Echon(__G) __GDEF { struct sgttyb sg; /* tty device structure */ if (GLOBAL(echofd) != -1) { GTTY(GLOBAL(echofd), &sg); /* get settings */ sg.sg_flags |= ECHO; /* turn echo on */ STTY(GLOBAL(echofd), &sg); GLOBAL(echofd) = -1; } } #endif /* !CMS_MVS */ #endif /* ?VMS */ #if (defined(UNZIP) && !defined(FUNZIP)) #ifdef ATH_BEO_UNX #ifdef MORE /* * Get the number of lines on the output terminal. SCO Unix apparently * defines TIOCGWINSZ but doesn't support it (!M_UNIX). * * GRR: will need to know width of terminal someday, too, to account for * line-wrapping. */ #if (defined(TIOCGWINSZ) && !defined(M_UNIX)) int screensize(tt_rows, tt_cols) int *tt_rows; int *tt_cols; { struct winsize wsz; #ifdef DEBUG_WINSZ static int firsttime = TRUE; #endif /* see termio(4) under, e.g., SunOS */ if (ioctl(1, TIOCGWINSZ, &wsz) == 0) { #ifdef DEBUG_WINSZ if (firsttime) { firsttime = FALSE; fprintf(stderr, "ttyio.c screensize(): ws_row = %d\n", wsz.ws_row); fprintf(stderr, "ttyio.c screensize(): ws_col = %d\n", wsz.ws_col); } #endif /* number of rows */ if (tt_rows != NULL) *tt_rows = (int)((wsz.ws_row > 0) ? wsz.ws_row : 24); /* number of columns */ if (tt_cols != NULL) *tt_cols = (int)((wsz.ws_col > 0) ? wsz.ws_col : 80); return 0; /* signal success */ } else { /* this happens when piping to more(1), for example */ #ifdef DEBUG_WINSZ if (firsttime) { firsttime = FALSE; fprintf(stderr, "ttyio.c screensize(): ioctl(TIOCGWINSZ) failed\n")); } #endif /* VT-100 assumed to be minimal hardware */ if (tt_rows != NULL) *tt_rows = 24; if (tt_cols != NULL) *tt_cols = 80; return 1; /* signal failure */ } } #else /* !TIOCGWINSZ: service not available, fall back to semi-bogus method */ int screensize(tt_rows, tt_cols) int *tt_rows; int *tt_cols; { char *envptr, *getenv(); int n; int errstat = 0; /* GRR: this is overly simplistic, but don't have access to stty/gtty * system anymore */ if (tt_rows != NULL) { envptr = getenv("LINES"); if (envptr == (char *)NULL || (n = atoi(envptr)) < 5) { /* VT-100 assumed to be minimal hardware */ *tt_rows = 24; errstat = 1; /* signal failure */ } else { *tt_rows = n; } } if (tt_cols != NULL) { envptr = getenv("COLUMNS"); if (envptr == (char *)NULL || (n = atoi(envptr)) < 5) { *tt_cols = 80; errstat = 1; /* signal failure */ } else { *tt_cols = n; } } return errstat; } #endif /* ?(TIOCGWINSZ && !M_UNIX) */ #endif /* MORE */ /* * Get a character from the given file descriptor without echo or newline. */ int zgetch(__G__ f) __GDEF int f; /* file descriptor from which to read */ { #if (defined(USE_SYSV_TERMIO) || defined(USE_POSIX_TERMIOS)) char oldmin, oldtim; #endif char c; struct sgttyb sg; /* tty device structure */ GTTY(f, &sg); /* get settings */ #if (defined(USE_SYSV_TERMIO) || defined(USE_POSIX_TERMIOS)) oldmin = sg.c_cc[VMIN]; /* save old values */ oldtim = sg.c_cc[VTIME]; sg.c_cc[VMIN] = 1; /* need only one char to return read() */ sg.c_cc[VTIME] = 0; /* no timeout */ sg.sg_flags &= ~ICANON; /* canonical mode off */ #else sg.sg_flags |= CBREAK; /* cbreak mode on */ #endif sg.sg_flags &= ~ECHO; /* turn echo off, too */ STTY(f, &sg); /* set cbreak mode */ GLOBAL(echofd) = f; /* in case ^C hit (not perfect: still CBREAK) */ read(f, &c, 1); /* read our character */ #if (defined(USE_SYSV_TERMIO) || defined(USE_POSIX_TERMIOS)) sg.c_cc[VMIN] = oldmin; /* restore old values */ sg.c_cc[VTIME] = oldtim; sg.sg_flags |= ICANON; /* canonical mode on */ #else sg.sg_flags &= ~CBREAK; /* cbreak mode off */ #endif sg.sg_flags |= ECHO; /* turn echo on */ STTY(f, &sg); /* restore canonical mode */ GLOBAL(echofd) = -1; return (int)(uch)c; } #else /* !ATH_BEO_UNX */ #ifndef VMS /* VMS supplies its own variant of getch() */ int zgetch(__G__ f) __GDEF int f; /* file descriptor from which to read (must be open already) */ { char c, c2; /*--------------------------------------------------------------------------- Get a character from the given file descriptor without echo; can't fake CBREAK mode (i.e., newline required), but can get rid of all chars up to and including newline. ---------------------------------------------------------------------------*/ echoff(f); read(f, &c, 1); if (c != '\n') do { read(f, &c2, 1); /* throw away all other chars up thru newline */ } while (c2 != '\n'); echon(); return (int)c; } #endif /* !VMS */ #endif /* ?ATH_BEO_UNX */ #endif /* UNZIP && !FUNZIP */ #endif /* !HAVE_WORKING_GETCH */ #if CRYPT /* getp() is only used with full encryption */ /* * Simple compile-time check for source compatibility between * zcrypt and ttyio: */ #if (!defined(CR_MAJORVER) || (CR_MAJORVER < 2) || (CR_MINORVER < 7)) error: This Info-ZIP tool requires zcrypt 2.7 or later. #endif /* * Get a password of length n-1 or less into *p using the prompt *m. * The entered password is not echoed. */ #ifdef HAVE_WORKING_GETCH /* * For the AMIGA, getch() is defined as Agetch(), which is in * amiga/filedate.c; SAS/C 6.x provides a getch(), but since Agetch() * uses the infrastructure that is already in place in filedate.c, it is * smaller. With this function, echoff() and echon() are not needed. * * For the MAC, a non-echo macgetch() function is defined in the MacOS * specific sources which uses the event handling mechanism of the * desktop window manager to get a character from the keyboard. * * For the other systems in this section, a non-echo getch() function * is either contained the C runtime library (conio package), or getch() * is defined as an alias for a similar system specific RTL function. */ #ifndef WINDLL /* WINDLL does not support a console interface */ #ifndef QDOS /* QDOS supplies a variant of this function */ /* This is the getp() function for all systems (with TTY type user interface) * that supply a working `non-echo' getch() function for "raw" console input. */ char *getp(__G__ m, p, n) __GDEF ZCONST char *m; /* prompt for password */ char *p; /* return value: line input */ int n; /* bytes available in p[] */ { char c; /* one-byte buffer for read() to use */ int i; /* number of characters input */ char *w; /* warning on retry */ /* get password */ w = ""; do { fputs(w, stderr); /* warning if back again */ fputs(m, stderr); /* display prompt and flush */ fflush(stderr); i = 0; do { /* read line, keeping first n characters */ if ((c = (char)getch()) == '\r') c = '\n'; /* until user hits CR */ if (c == 8 || c == 127) { if (i > 0) i--; /* the `backspace' and `del' keys works */ } else if (i < n) p[i++] = c; /* truncate past n */ } while (c != '\n'); PUTC('\n', stderr); fflush(stderr); w = "(line too long--try again)\n"; } while (p[i-1] != '\n'); p[i-1] = 0; /* terminate at newline */ return p; /* return pointer to password */ } /* end function getp() */ #endif /* !QDOS */ #endif /* !WINDLL */ #else /* !HAVE_WORKING_GETCH */ #if (defined(ATH_BEO_UNX) || defined(__MINT__)) #ifndef _PATH_TTY # ifdef __MINT__ # define _PATH_TTY ttyname(2) # else # define _PATH_TTY "/dev/tty" # endif #endif char *getp(__G__ m, p, n) __GDEF ZCONST char *m; /* prompt for password */ char *p; /* return value: line input */ int n; /* bytes available in p[] */ { char c; /* one-byte buffer for read() to use */ int i; /* number of characters input */ char *w; /* warning on retry */ int f; /* file descriptor for tty device */ #ifdef PASSWD_FROM_STDIN /* Read from stdin. This is unsafe if the password is stored on disk. */ f = 0; #else /* turn off echo on tty */ if ((f = open(_PATH_TTY, 0)) == -1) return NULL; #endif /* get password */ w = ""; do { fputs(w, stderr); /* warning if back again */ fputs(m, stderr); /* prompt */ fflush(stderr); i = 0; echoff(f); do { /* read line, keeping n */ read(f, &c, 1); if (i < n) p[i++] = c; } while (c != '\n'); echon(); PUTC('\n', stderr); fflush(stderr); w = "(line too long--try again)\n"; } while (p[i-1] != '\n'); p[i-1] = 0; /* terminate at newline */ #ifndef PASSWD_FROM_STDIN close(f); #endif return p; /* return pointer to password */ } /* end function getp() */ #endif /* ATH_BEO_UNX || __MINT__ */ #if (defined(VMS) || defined(CMS_MVS)) char *getp(__G__ m, p, n) __GDEF ZCONST char *m; /* prompt for password */ char *p; /* return value: line input */ int n; /* bytes available in p[] */ { char c; /* one-byte buffer for read() to use */ int i; /* number of characters input */ char *w; /* warning on retry */ FILE *f; /* file structure for SYS$COMMAND device */ #ifdef PASSWD_FROM_STDIN f = stdin; #else if ((f = fopen(ctermid(NULL), "r")) == NULL) return NULL; #endif /* get password */ fflush(stdout); w = ""; do { if (*w) /* bug: VMS apparently adds \n to NULL fputs */ fputs(w, stderr); /* warning if back again */ fputs(m, stderr); /* prompt */ fflush(stderr); i = 0; echoff(f); do { /* read line, keeping n */ if ((c = (char)getc(f)) == '\r') c = '\n'; if (i < n) p[i++] = c; } while (c != '\n'); echon(); PUTC('\n', stderr); fflush(stderr); w = "(line too long--try again)\n"; } while (p[i-1] != '\n'); p[i-1] = 0; /* terminate at newline */ #ifndef PASSWD_FROM_STDIN fclose(f); #endif return p; /* return pointer to password */ } /* end function getp() */ #endif /* VMS || CMS_MVS */ #endif /* ?HAVE_WORKING_GETCH */ #endif /* CRYPT */ #endif /* CRYPT || (UNZIP && !FUNZIP) */ Carla-2.4.2/data/windows/unzipfx-carla/ttyio.h000066400000000000000000000123441420416754300212620ustar00rootroot00000000000000/* Copyright (c) 1990-2004 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2000-Apr-09 or later (the contents of which are also included in zip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /* ttyio.h */ #ifndef __ttyio_h /* don't include more than once */ #define __ttyio_h #ifndef __crypt_h # include "crypt.h" /* ensure that encryption header file has been seen */ #endif #if (CRYPT || (defined(UNZIP) && !defined(FUNZIP))) /* * Non-echo keyboard/console input support is needed and enabled. */ #ifndef __G /* UnZip only, for now (DLL stuff) */ # define __G # define __G__ # define __GDEF # define __GPRO void # define __GPRO__ #endif #ifndef ZCONST /* UnZip only (until have configure script like Zip) */ # define ZCONST const #endif #if (defined(MSDOS) || defined(OS2) || defined(WIN32)) # ifndef DOS_OS2_W32 # define DOS_OS2_W32 # endif #endif #if (defined(DOS_OS2_W32) || defined(__human68k__)) # ifndef DOS_H68_OS2_W32 # define DOS_H68_OS2_W32 # endif #endif #if (defined(DOS_OS2_W32) || defined(FLEXOS)) # ifndef DOS_FLX_OS2_W32 # define DOS_FLX_OS2_W32 # endif #endif #if (defined(DOS_H68_OS2_W32) || defined(FLEXOS)) # ifndef DOS_FLX_H68_OS2_W32 # define DOS_FLX_H68_OS2_W32 # endif #endif #if (defined(__ATHEOS__) || defined(__BEOS__) || defined(UNIX)) # ifndef ATH_BEO_UNX # define ATH_BEO_UNX # endif #endif #if (defined(VM_CMS) || defined(MVS)) # ifndef CMS_MVS # define CMS_MVS # endif #endif /* Function prototypes */ /* The following systems supply a `non-echo' character input function "getch()" * (or an alias) and do not need the echoff() / echon() function pair. */ #ifdef AMIGA # define echoff(f) # define echon() # define getch() Agetch() # define HAVE_WORKING_GETCH #endif /* AMIGA */ #ifdef ATARI # define echoff(f) # define echon() # include # define getch() (Cnecin() & 0x000000ff) # define HAVE_WORKING_GETCH #endif #ifdef MACOS # define echoff(f) # define echon() # define getch() macgetch() # define HAVE_WORKING_GETCH #endif #ifdef NLM # define echoff(f) # define echon() # define HAVE_WORKING_GETCH #endif #ifdef QDOS # define echoff(f) # define echon() # define HAVE_WORKING_GETCH #endif #ifdef RISCOS # define echoff(f) # define echon() # define getch() SWI_OS_ReadC() # define HAVE_WORKING_GETCH #endif #ifdef DOS_H68_OS2_W32 # define echoff(f) # define echon() # ifdef WIN32 # ifndef getch # define getch() getch_win32() # endif # else /* !WIN32 */ # ifdef __EMX__ # ifndef getch # define getch() _read_kbd(0, 1, 0) # endif # else /* !__EMX__ */ # ifdef __GO32__ # include # define getch() getkey() # else /* !__GO32__ */ # include # endif /* ?__GO32__ */ # endif /* ?__EMX__ */ # endif /* ?WIN32 */ # define HAVE_WORKING_GETCH #endif /* DOS_H68_OS2_W32 */ #ifdef FLEXOS # define echoff(f) # define echon() # define getch() getchar() /* not correct, but may not be on a console */ # define HAVE_WORKING_GETCH #endif /* For VM/CMS and MVS, we do not (yet) have any support to switch terminal * input echo on and off. The following "fake" definitions allow inclusion * of crypt support and UnZip's "pause prompting" features, but without * any echo suppression. */ #ifdef CMS_MVS # define echoff(f) # define echon() #endif #ifdef TANDEM # define echoff(f) # define echon() # define getch() zgetch() /* defined in TANDEMC */ # define HAVE_WORKING_GETCH #endif /* The THEOS C runtime library supplies the function conmask() to toggle * terminal input echo on (conmask("e")) and off (conmask("n")). But, * since THEOS C RTL also contains a working non-echo getch() function, * the echo toggles are not needed. */ #ifdef THEOS # define echoff(f) # define echon() # define HAVE_WORKING_GETCH #endif /* VMS has a single echo() function in ttyio.c to toggle terminal * input echo on and off. */ #ifdef VMS # define echoff(f) echo(0) # define echon() echo(1) # define getch() tt_getch() # define FGETCH(f) tt_getch() int echo OF((int)); int tt_getch OF((void)); #endif /* For all other systems, ttyio.c supplies the two functions Echoff() and * Echon() for suppressing and (re)enabling console input echo. */ #ifndef echoff # define echoff(f) Echoff(__G__ f) # define echon() Echon(__G) void Echoff OF((__GPRO__ int f)); void Echon OF((__GPRO)); #endif /* this stuff is used by MORE and also now by the ctrl-S code; fileio.c only */ #if (defined(UNZIP) && !defined(FUNZIP)) # ifdef HAVE_WORKING_GETCH # define FGETCH(f) getch() # endif # ifndef FGETCH /* default for all systems where no getch()-like function is available */ int zgetch OF((__GPRO__ int f)); # define FGETCH(f) zgetch(__G__ f) # endif #endif /* UNZIP && !FUNZIP */ #if (CRYPT && !defined(WINDLL)) char *getp OF((__GPRO__ ZCONST char *m, char *p, int n)); #endif #else /* !(CRYPT || (UNZIP && !FUNZIP)) */ /* * No need for non-echo keyboard/console input; provide dummy definitions. */ #define echoff(f) #define echon() #endif /* ?(CRYPT || (UNZIP && !FUNZIP)) */ #endif /* !__ttyio_h */ Carla-2.4.2/data/windows/unzipfx-carla/ubz2err.c000066400000000000000000000036551420416754300215050ustar00rootroot00000000000000/* Copyright (c) 1990-2008 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2007-Mar-04 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- ubz2err.c This file contains the "fatal error" callback routine required by the "minimal" (silent, non-stdio) setup of the bzip2 compression library. The fatal bzip2 error bail-out routine is provided in a separate code module, so that it can be easily overridden when the UnZip package is used as a static link library. One example is the WinDLL static library usage for building a monolythic binary of the Windows application "WiZ" that supports bzip2 both in compression and decompression operations. Contains: bz_internal_error() (USE_BZIP2 only) ---------------------------------------------------------------------------*/ #define __UBZ2ERR_C /* identifies this source module */ #define UNZIP_INTERNAL #include "unzip.h" #ifdef WINDLL # ifdef POCKET_UNZIP # include "wince/intrface.h" # else # include "windll/windll.h" # endif #endif #ifdef USE_BZIP2 /**********************************/ /* Function bz_internal_error() */ /**********************************/ /* Call-back function for the bzip2 decompression code (compiled with * BZ_NO_STDIO), required to handle fatal internal bug-type errors of * the bzip2 library. */ void bz_internal_error(bzerrcode) int bzerrcode; { GETGLOBALS(); Info(slide, 0x421, ((char *)slide, "error: internal fatal libbzip2 error number %d\n", bzerrcode)); #ifdef WINDLL longjmp(dll_error_return, 1); #else DESTROYGLOBALS(); EXIT(PK_BADERR); #endif } /* end function bz_internal_error() */ #endif /* USE_BZIP2 */ Carla-2.4.2/data/windows/unzipfx-carla/unix/000077500000000000000000000000001420416754300207205ustar00rootroot00000000000000Carla-2.4.2/data/windows/unzipfx-carla/unix/unix.c000066400000000000000000001711131420416754300220530ustar00rootroot00000000000000/* Copyright (c) 1990-2009 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2009-Jan-02 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- unix.c Unix-specific routines for use with Info-ZIP's UnZip 5.41 and later. Contains: readdir() do_wild() <-- generic enough to put in fileio.c? mapattr() mapname() checkdir() mkdir() close_outfile() defer_dir_attribs() set_direc_attribs() stamp_file() version() ---------------------------------------------------------------------------*/ #define UNZIP_INTERNAL #include "unzip.h" #ifdef SCO_XENIX # define SYSNDIR #else /* SCO Unix, AIX, DNIX, TI SysV, Coherent 4.x, ... */ # if defined(__convexc__) || defined(SYSV) || defined(CRAY) || defined(BSD4_4) # define DIRENT # endif #endif #if defined(_AIX) || defined(__mpexl) # define DIRENT #endif #ifdef COHERENT # if defined(_I386) || (defined(__COHERENT__) && (__COHERENT__ >= 0x420)) # define DIRENT # endif #endif #ifdef _POSIX_VERSION # ifndef DIRENT # define DIRENT # endif #endif #ifdef DIRENT # include #else # ifdef SYSV # ifdef SYSNDIR # include # else # include # endif # else /* !SYSV */ # ifndef NO_SYSDIR # include # endif # endif /* ?SYSV */ # ifndef dirent # define dirent direct # endif #endif /* ?DIRENT */ #ifdef SET_DIR_ATTRIB typedef struct uxdirattr { /* struct for holding unix style directory */ struct uxdirattr *next; /* info until can be sorted and set at end */ char *fn; /* filename of directory */ union { iztimes t3; /* mtime, atime, ctime */ ztimbuf t2; /* modtime, actime */ } u; unsigned perms; /* same as min_info.file_attr */ int have_uidgid; /* flag */ ulg uidgid[2]; char fnbuf[1]; /* buffer stub for directory name */ } uxdirattr; #define UxAtt(d) ((uxdirattr *)d) /* typecast shortcut */ #endif /* SET_DIR_ATTRIB */ #ifdef ACORN_FTYPE_NFS /* Acorn bits for NFS filetyping */ typedef struct { uch ID[2]; uch size[2]; uch ID_2[4]; uch loadaddr[4]; uch execaddr[4]; uch attr[4]; } RO_extra_block; #endif /* ACORN_FTYPE_NFS */ /* static int created_dir; */ /* used in mapname(), checkdir() */ /* static int renamed_fullpath; */ /* ditto */ static unsigned filtattr OF((__GPRO__ unsigned perms)); /*****************************/ /* Strings used multiple */ /* times in unix.c */ /*****************************/ #ifndef MTS /* messages of code for setting file/directory attributes */ static ZCONST char CannotSetItemUidGid[] = "warning: cannot set UID %lu and/or GID %lu for %s\n %s\n"; static ZCONST char CannotSetUidGid[] = " (warning) cannot set UID %lu and/or GID %lu\n %s"; static ZCONST char CannotSetItemTimestamps[] = "warning: cannot set modif./access times for %s\n %s\n"; static ZCONST char CannotSetTimestamps[] = " (warning) cannot set modif./access times\n %s"; #endif /* !MTS */ #ifndef SFX #ifdef NO_DIR /* for AT&T 3B1 */ #define opendir(path) fopen(path,"r") #define closedir(dir) fclose(dir) typedef FILE DIR; typedef struct zdir { FILE *dirhandle; struct dirent *entry; } DIR DIR *opendir OF((ZCONST char *dirspec)); void closedir OF((DIR *dirp)); struct dirent *readdir OF((DIR *dirp)); DIR *opendir(dirspec) ZCONST char *dirspec; { DIR *dirp; if ((dirp = malloc(sizeof(DIR)) != NULL) { if ((dirp->dirhandle = fopen(dirspec, "r")) == NULL) { free(dirp); dirp = NULL; } } return dirp; } void closedir(dirp) DIR *dirp; { fclose(dirp->dirhandle); free(dirp); } /* * Apparently originally by Rich Salz. * Cleaned up and modified by James W. Birdsall. */ struct dirent *readdir(dirp) DIR *dirp; { if (dirp == NULL) return NULL; for (;;) if (fread(&(dirp->entry), sizeof (struct dirent), 1, dirp->dirhandle) == 0) return (struct dirent *)NULL; else if ((dirp->entry).d_ino) return &(dirp->entry); } /* end function readdir() */ #endif /* NO_DIR */ /**********************/ /* Function do_wild() */ /* for porting: dir separator; match(ignore_case) */ /**********************/ char *do_wild(__G__ wildspec) __GDEF ZCONST char *wildspec; /* only used first time on a given dir */ { /* these statics are now declared in SYSTEM_SPECIFIC_GLOBALS in unxcfg.h: static DIR *wild_dir = (DIR *)NULL; static ZCONST char *wildname; static char *dirname, matchname[FILNAMSIZ]; static int notfirstcall=FALSE, have_dirname, dirnamelen; */ struct dirent *file; /* Even when we're just returning wildspec, we *always* do so in * matchname[]--calling routine is allowed to append four characters * to the returned string, and wildspec may be a pointer to argv[]. */ if (!G.notfirstcall) { /* first call: must initialize everything */ G.notfirstcall = TRUE; if (!iswild(wildspec)) { strncpy(G.matchname, wildspec, FILNAMSIZ); G.matchname[FILNAMSIZ-1] = '\0'; G.have_dirname = FALSE; G.wild_dir = NULL; return G.matchname; } /* break the wildspec into a directory part and a wildcard filename */ if ((G.wildname = (ZCONST char *)strrchr(wildspec, '/')) == NULL) { G.dirname = "."; G.dirnamelen = 1; G.have_dirname = FALSE; G.wildname = wildspec; } else { ++G.wildname; /* point at character after '/' */ G.dirnamelen = G.wildname - wildspec; if ((G.dirname = (char *)malloc(G.dirnamelen+1)) == (char *)NULL) { Info(slide, 0x201, ((char *)slide, "warning: cannot allocate wildcard buffers\n")); strncpy(G.matchname, wildspec, FILNAMSIZ); G.matchname[FILNAMSIZ-1] = '\0'; return G.matchname; /* but maybe filespec was not a wildcard */ } strncpy(G.dirname, wildspec, G.dirnamelen); G.dirname[G.dirnamelen] = '\0'; /* terminate for strcpy below */ G.have_dirname = TRUE; } if ((G.wild_dir = (zvoid *)opendir(G.dirname)) != (zvoid *)NULL) { while ((file = readdir((DIR *)G.wild_dir)) != (struct dirent *)NULL) { Trace((stderr, "do_wild: readdir returns %s\n", FnFilter1(file->d_name))); if (file->d_name[0] == '.' && G.wildname[0] != '.') continue; /* Unix: '*' and '?' do not match leading dot */ if (match(file->d_name, G.wildname, 0 WISEP) &&/*0=case sens.*/ /* skip "." and ".." directory entries */ strcmp(file->d_name, ".") && strcmp(file->d_name, "..")) { Trace((stderr, "do_wild: match() succeeds\n")); if (G.have_dirname) { strcpy(G.matchname, G.dirname); strcpy(G.matchname+G.dirnamelen, file->d_name); } else strcpy(G.matchname, file->d_name); return G.matchname; } } /* if we get to here directory is exhausted, so close it */ closedir((DIR *)G.wild_dir); G.wild_dir = (zvoid *)NULL; } Trace((stderr, "do_wild: opendir(%s) returns NULL\n", FnFilter1(G.dirname))); /* return the raw wildspec in case that works (e.g., directory not * searchable, but filespec was not wild and file is readable) */ strncpy(G.matchname, wildspec, FILNAMSIZ); G.matchname[FILNAMSIZ-1] = '\0'; return G.matchname; } /* last time through, might have failed opendir but returned raw wildspec */ if ((DIR *)G.wild_dir == (DIR *)NULL) { G.notfirstcall = FALSE; /* nothing left--reset for new wildspec */ if (G.have_dirname) free(G.dirname); return (char *)NULL; } /* If we've gotten this far, we've read and matched at least one entry * successfully (in a previous call), so dirname has been copied into * matchname already. */ while ((file = readdir((DIR *)G.wild_dir)) != (struct dirent *)NULL) { Trace((stderr, "do_wild: readdir returns %s\n", FnFilter1(file->d_name))); if (file->d_name[0] == '.' && G.wildname[0] != '.') continue; /* Unix: '*' and '?' do not match leading dot */ if (match(file->d_name, G.wildname, 0 WISEP)) { /* 0 == case sens. */ Trace((stderr, "do_wild: match() succeeds\n")); if (G.have_dirname) { /* strcpy(G.matchname, G.dirname); */ strcpy(G.matchname+G.dirnamelen, file->d_name); } else strcpy(G.matchname, file->d_name); return G.matchname; } } closedir((DIR *)G.wild_dir); /* at least one entry read; nothing left */ G.wild_dir = (zvoid *)NULL; G.notfirstcall = FALSE; /* reset for new wildspec */ if (G.have_dirname) free(G.dirname); return (char *)NULL; } /* end function do_wild() */ #endif /* !SFX */ #ifndef S_ISUID # define S_ISUID 0004000 /* set user id on execution */ #endif #ifndef S_ISGID # define S_ISGID 0002000 /* set group id on execution */ #endif #ifndef S_ISVTX # define S_ISVTX 0001000 /* save swapped text even after use */ #endif /************************/ /* Function filtattr() */ /************************/ /* This is used to clear or keep the SUID and SGID bits on file permissions. * It's possible that a file in an archive could have one of these bits set * and, unknown to the person unzipping, could allow others to execute the * file as the user or group. The new option -K bypasses this check. */ static unsigned filtattr(__G__ perms) __GDEF unsigned perms; { /* keep setuid/setgid/tacky perms? */ if (!uO.K_flag) perms &= ~(S_ISUID | S_ISGID | S_ISVTX); return (0xffff & perms); } /* end function filtattr() */ /**********************/ /* Function mapattr() */ /**********************/ int mapattr(__G) __GDEF { int r; ulg tmp = G.crec.external_file_attributes; G.pInfo->file_attr = 0; /* initialized to 0 for check in "default" branch below... */ switch (G.pInfo->hostnum) { case AMIGA_: tmp = (unsigned)(tmp>>17 & 7); /* Amiga RWE bits */ G.pInfo->file_attr = (unsigned)(tmp<<6 | tmp<<3 | tmp); break; case THEOS_: tmp &= 0xF1FFFFFFL; if ((tmp & 0xF0000000L) != 0x40000000L) tmp &= 0x01FFFFFFL; /* not a dir, mask all ftype bits */ else tmp &= 0x41FFFFFFL; /* leave directory bit as set */ /* fall through! */ case UNIX_: case VMS_: case ACORN_: case ATARI_: case ATHEOS_: case BEOS_: case QDOS_: case TANDEM_: r = FALSE; G.pInfo->file_attr = (unsigned)(tmp >> 16); if (G.pInfo->file_attr == 0 && G.extra_field) { /* Some (non-Info-ZIP) implementations of Zip for Unix and * VMS (and probably others ??) leave 0 in the upper 16-bit * part of the external_file_attributes field. Instead, they * store file permission attributes in some extra field. * As a work-around, we search for the presence of one of * these extra fields and fall back to the MSDOS compatible * part of external_file_attributes if one of the known * e.f. types has been detected. * Later, we might implement extraction of the permission * bits from the VMS extra field. But for now, the work-around * should be sufficient to provide "readable" extracted files. * (For ASI Unix e.f., an experimental remap of the e.f. * mode value IS already provided!) */ ush ebID; unsigned ebLen; uch *ef = G.extra_field; unsigned ef_len = G.crec.extra_field_length; while (!r && ef_len >= EB_HEADSIZE) { ebID = makeword(ef); ebLen = (unsigned)makeword(ef+EB_LEN); if (ebLen > (ef_len - EB_HEADSIZE)) /* discoverd some e.f. inconsistency! */ break; switch (ebID) { case EF_ASIUNIX: if (ebLen >= (EB_ASI_MODE+2)) { G.pInfo->file_attr = (unsigned)makeword(ef+(EB_HEADSIZE+EB_ASI_MODE)); /* force stop of loop: */ ef_len = (ebLen + EB_HEADSIZE); break; } /* else: fall through! */ case EF_PKVMS: /* "found nondecypherable e.f. with perm. attr" */ r = TRUE; default: break; } ef_len -= (ebLen + EB_HEADSIZE); ef += (ebLen + EB_HEADSIZE); } } if (!r) { #ifdef SYMLINKS /* Check if the file is a (POSIX-compatible) symbolic link. * We restrict symlink support to those "made-by" hosts that * are known to support symbolic links. */ G.pInfo->symlink = S_ISLNK(G.pInfo->file_attr) && SYMLINK_HOST(G.pInfo->hostnum); #endif return 0; } /* fall through! */ /* all remaining cases: expand MSDOS read-only bit into write perms */ case FS_FAT_: /* PKWARE's PKZip for Unix marks entries as FS_FAT_, but stores the * Unix attributes in the upper 16 bits of the external attributes * field, just like Info-ZIP's Zip for Unix. We try to use that * value, after a check for consistency with the MSDOS attribute * bits (see below). */ G.pInfo->file_attr = (unsigned)(tmp >> 16); /* fall through! */ case FS_HPFS_: case FS_NTFS_: case MAC_: case TOPS20_: default: /* Ensure that DOS subdir bit is set when the entry's name ends * in a '/'. Some third-party Zip programs fail to set the subdir * bit for directory entries. */ if ((tmp & 0x10) == 0) { extent fnlen = strlen(G.filename); if (fnlen > 0 && G.filename[fnlen-1] == '/') tmp |= 0x10; } /* read-only bit --> write perms; subdir bit --> dir exec bit */ tmp = !(tmp & 1) << 1 | (tmp & 0x10) >> 4; if ((G.pInfo->file_attr & 0700) == (unsigned)(0400 | tmp<<6)) { /* keep previous G.pInfo->file_attr setting, when its "owner" * part appears to be consistent with DOS attribute flags! */ #ifdef SYMLINKS /* Entries "made by FS_FAT_" could have been zipped on a * system that supports POSIX-style symbolic links. */ G.pInfo->symlink = S_ISLNK(G.pInfo->file_attr) && (G.pInfo->hostnum == FS_FAT_); #endif return 0; } G.pInfo->file_attr = (unsigned)(0444 | tmp<<6 | tmp<<3 | tmp); break; } /* end switch (host-OS-created-by) */ /* for originating systems with no concept of "group," "other," "system": */ umask( (int)(tmp=umask(0)) ); /* apply mask to expanded r/w(/x) perms */ G.pInfo->file_attr &= ~tmp; return 0; } /* end function mapattr() */ /************************/ /* Function mapname() */ /************************/ int mapname(__G__ renamed) __GDEF int renamed; /* * returns: * MPN_OK - no problem detected * MPN_INF_TRUNC - caution (truncated filename) * MPN_INF_SKIP - info "skip entry" (dir doesn't exist) * MPN_ERR_SKIP - error -> skip entry * MPN_ERR_TOOLONG - error -> path is too long * MPN_NOMEM - error (memory allocation failed) -> skip entry * [also MPN_VOL_LABEL, MPN_CREATED_DIR] */ { char pathcomp[FILNAMSIZ]; /* path-component buffer */ char *pp, *cp=(char *)NULL; /* character pointers */ char *lastsemi=(char *)NULL; /* pointer to last semi-colon in pathcomp */ #ifdef ACORN_FTYPE_NFS char *lastcomma=(char *)NULL; /* pointer to last comma in pathcomp */ RO_extra_block *ef_spark; /* pointer Acorn FTYPE ef block */ #endif int killed_ddot = FALSE; /* is set when skipping "../" pathcomp */ int error = MPN_OK; register unsigned workch; /* hold the character being tested */ /*--------------------------------------------------------------------------- Initialize various pointers and counters and stuff. ---------------------------------------------------------------------------*/ if (G.pInfo->vollabel) return MPN_VOL_LABEL; /* can't set disk volume labels in Unix */ /* can create path as long as not just freshening, or if user told us */ G.create_dirs = (!uO.fflag || renamed); G.created_dir = FALSE; /* not yet */ /* user gave full pathname: don't prepend rootpath */ G.renamed_fullpath = (renamed && (*G.filename == '/')); if (checkdir(__G__ (char *)NULL, INIT) == MPN_NOMEM) return MPN_NOMEM; /* initialize path buffer, unless no memory */ *pathcomp = '\0'; /* initialize translation buffer */ pp = pathcomp; /* point to translation buffer */ if (uO.jflag) /* junking directories */ cp = (char *)strrchr(G.filename, '/'); if (cp == (char *)NULL) /* no '/' or not junking dirs */ cp = G.filename; /* point to internal zipfile-member pathname */ else ++cp; /* point to start of last component of path */ /*--------------------------------------------------------------------------- Begin main loop through characters in filename. ---------------------------------------------------------------------------*/ while ((workch = (uch)*cp++) != 0) { switch (workch) { case '/': /* can assume -j flag not given */ *pp = '\0'; if (strcmp(pathcomp, ".") == 0) { /* don't bother appending "./" to the path */ *pathcomp = '\0'; } else if (!uO.ddotflag && strcmp(pathcomp, "..") == 0) { /* "../" dir traversal detected, skip over it */ *pathcomp = '\0'; killed_ddot = TRUE; /* set "show message" flag */ } /* when path component is not empty, append it now */ if (*pathcomp != '\0' && ((error = checkdir(__G__ pathcomp, APPEND_DIR)) & MPN_MASK) > MPN_INF_TRUNC) return error; pp = pathcomp; /* reset conversion buffer for next piece */ lastsemi = (char *)NULL; /* leave direct. semi-colons alone */ break; #ifdef __CYGWIN__ /* Cygwin runs on Win32, apply FAT/NTFS filename rules */ case ':': /* drive spec not stored, so no colon allowed */ case '\\': /* '\\' may come as normal filename char (not */ case '<': /* dir sep char!) from unix-like file system */ case '>': /* no redirection symbols allowed either */ case '|': /* no pipe signs allowed */ case '"': /* no double quotes allowed */ case '?': /* no wildcards allowed */ case '*': *pp++ = '_'; /* these rules apply equally to FAT and NTFS */ break; #endif case ';': /* VMS version (or DEC-20 attrib?) */ lastsemi = pp; *pp++ = ';'; /* keep for now; remove VMS ";##" */ break; /* later, if requested */ #ifdef ACORN_FTYPE_NFS case ',': /* NFS filetype extension */ lastcomma = pp; *pp++ = ','; /* keep for now; may need to remove */ break; /* later, if requested */ #endif #ifdef MTS case ' ': /* change spaces to underscore under */ *pp++ = '_'; /* MTS; leave as spaces under Unix */ break; #endif default: /* disable control character filter when requested, * else allow 8-bit characters (e.g. UTF-8) in filenames: */ if (uO.cflxflag || (isprint(workch) || (128 <= workch && workch <= 254))) *pp++ = (char)workch; } /* end switch */ } /* end while loop */ /* Show warning when stripping insecure "parent dir" path components */ if (killed_ddot && QCOND2) { Info(slide, 0, ((char *)slide, "warning: skipped \"../\" path component(s) in %s\n", FnFilter1(G.filename))); if (!(error & ~MPN_MASK)) error = (error & MPN_MASK) | PK_WARN; } /*--------------------------------------------------------------------------- Report if directory was created (and no file to create: filename ended in '/'), check name to be sure it exists, and combine path and name be- fore exiting. ---------------------------------------------------------------------------*/ if (G.filename[strlen(G.filename) - 1] == '/') { checkdir(__G__ G.filename, GETPATH); if (G.created_dir) { if (QCOND2) { Info(slide, 0, ((char *)slide, " creating: %s\n", FnFilter1(G.filename))); } #ifndef NO_CHMOD /* Filter out security-relevant attributes bits. */ G.pInfo->file_attr = filtattr(__G__ G.pInfo->file_attr); /* When extracting non-UNIX directories or when extracting * without UID/GID restoration or SGID preservation, any * SGID flag inherited from the parent directory should be * maintained to allow files extracted into this new folder * to inherit the GID setting from the parent directory. */ if (G.pInfo->hostnum != UNIX_ || !(uO.X_flag || uO.K_flag)) { /* preserve SGID bit when inherited from parent dir */ if (!SSTAT(G.filename, &G.statbuf)) { G.pInfo->file_attr |= G.statbuf.st_mode & S_ISGID; } else { perror("Could not read directory attributes"); } } /* set approx. dir perms (make sure can still read/write in dir) */ if (chmod(G.filename, G.pInfo->file_attr | 0700)) perror("chmod (directory attributes) error"); #endif /* set dir time (note trailing '/') */ return (error & ~MPN_MASK) | MPN_CREATED_DIR; } /* dir existed already; don't look for data to extract */ return (error & ~MPN_MASK) | MPN_INF_SKIP; } *pp = '\0'; /* done with pathcomp: terminate it */ /* if not saving them, remove VMS version numbers (appended ";###") */ if (!uO.V_flag && lastsemi) { pp = lastsemi + 1; while (isdigit((uch)(*pp))) ++pp; if (*pp == '\0') /* only digits between ';' and end: nuke */ *lastsemi = '\0'; } /* On UNIX (and compatible systems), "." and ".." are reserved for * directory navigation and cannot be used as regular file names. * These reserved one-dot and two-dot names are mapped to "_" and "__". */ if (strcmp(pathcomp, ".") == 0) *pathcomp = '_'; else if (strcmp(pathcomp, "..") == 0) strcpy(pathcomp, "__"); #ifdef ACORN_FTYPE_NFS /* translate Acorn filetype information if asked to do so */ if (uO.acorn_nfs_ext && (ef_spark = (RO_extra_block *) getRISCOSexfield(G.extra_field, G.lrec.extra_field_length)) != (RO_extra_block *)NULL) { /* file *must* have a RISC OS extra field */ long ft = (long)makelong(ef_spark->loadaddr); /*32-bit*/ if (lastcomma) { pp = lastcomma + 1; while (isxdigit((uch)(*pp))) ++pp; if (pp == lastcomma+4 && *pp == '\0') *lastcomma='\0'; /* nuke */ } if ((ft & 1<<31)==0) ft=0x000FFD00; sprintf(pathcomp+strlen(pathcomp), ",%03x", (int)(ft>>8) & 0xFFF); } #endif /* ACORN_FTYPE_NFS */ if (*pathcomp == '\0') { Info(slide, 1, ((char *)slide, "mapname: conversion of %s failed\n", FnFilter1(G.filename))); return (error & ~MPN_MASK) | MPN_ERR_SKIP; } checkdir(__G__ pathcomp, APPEND_NAME); /* returns 1 if truncated: care? */ checkdir(__G__ G.filename, GETPATH); return error; } /* end function mapname() */ #if 0 /*========== NOTES ==========*/ extract-to dir: a:path/ buildpath: path1/path2/ ... (NULL-terminated) pathcomp: filename mapname(): loop over chars in zipfile member name checkdir(path component, COMPONENT | CREATEDIR) --> map as required? (d:/tmp/unzip/) (disk:[tmp.unzip.) (d:/tmp/unzip/jj/) (disk:[tmp.unzip.jj.) (d:/tmp/unzip/jj/temp/) (disk:[tmp.unzip.jj.temp.) finally add filename itself and check for existence? (could use with rename) (d:/tmp/unzip/jj/temp/msg.outdir) (disk:[tmp.unzip.jj.temp]msg.outdir) checkdir(name, GETPATH) --> copy path to name and free space #endif /* 0 */ /***********************/ /* Function checkdir() */ /***********************/ int checkdir(__G__ pathcomp, flag) __GDEF char *pathcomp; int flag; /* * returns: * MPN_OK - no problem detected * MPN_INF_TRUNC - (on APPEND_NAME) truncated filename * MPN_INF_SKIP - path doesn't exist, not allowed to create * MPN_ERR_SKIP - path doesn't exist, tried to create and failed; or path * exists and is not a directory, but is supposed to be * MPN_ERR_TOOLONG - path is too long * MPN_NOMEM - can't allocate memory for filename buffers */ { /* static int rootlen = 0; */ /* length of rootpath */ /* static char *rootpath; */ /* user's "extract-to" directory */ /* static char *buildpath; */ /* full path (so far) to extracted file */ /* static char *end; */ /* pointer to end of buildpath ('\0') */ # define FN_MASK 7 # define FUNCTION (flag & FN_MASK) /*--------------------------------------------------------------------------- APPEND_DIR: append the path component to the path being built and check for its existence. If doesn't exist and we are creating directories, do so for this one; else signal success or error as appropriate. ---------------------------------------------------------------------------*/ if (FUNCTION == APPEND_DIR) { int too_long = FALSE; #ifdef SHORT_NAMES char *old_end = end; #endif Trace((stderr, "appending dir segment [%s]\n", FnFilter1(pathcomp))); while ((*G.end = *pathcomp++) != '\0') ++G.end; #ifdef SHORT_NAMES /* path components restricted to 14 chars, typically */ if ((G.end-old_end) > FILENAME_MAX) /* GRR: proper constant? */ *(G.end = old_end + FILENAME_MAX) = '\0'; #endif /* GRR: could do better check, see if overrunning buffer as we go: * check end-buildpath after each append, set warning variable if * within 20 of FILNAMSIZ; then if var set, do careful check when * appending. Clear variable when begin new path. */ /* next check: need to append '/', at least one-char name, '\0' */ if ((G.end-G.buildpath) > FILNAMSIZ-3) too_long = TRUE; /* check if extracting dir? */ if (SSTAT(G.buildpath, &G.statbuf)) { /* path doesn't exist */ if (!G.create_dirs) { /* told not to create (freshening) */ free(G.buildpath); return MPN_INF_SKIP; /* path doesn't exist: nothing to do */ } if (too_long) { Info(slide, 1, ((char *)slide, "checkdir error: path too long: %s\n", FnFilter1(G.buildpath))); free(G.buildpath); /* no room for filenames: fatal */ return MPN_ERR_TOOLONG; } if (mkdir(G.buildpath, 0777) == -1) { /* create the directory */ Info(slide, 1, ((char *)slide, "checkdir error: cannot create %s\n\ %s\n\ unable to process %s.\n", FnFilter2(G.buildpath), strerror(errno), FnFilter1(G.filename))); free(G.buildpath); /* path didn't exist, tried to create, failed */ return MPN_ERR_SKIP; } G.created_dir = TRUE; } else if (!S_ISDIR(G.statbuf.st_mode)) { Info(slide, 1, ((char *)slide, "checkdir error: %s exists but is not directory\n\ unable to process %s.\n", FnFilter2(G.buildpath), FnFilter1(G.filename))); free(G.buildpath); /* path existed but wasn't dir */ return MPN_ERR_SKIP; } if (too_long) { Info(slide, 1, ((char *)slide, "checkdir error: path too long: %s\n", FnFilter1(G.buildpath))); free(G.buildpath); /* no room for filenames: fatal */ return MPN_ERR_TOOLONG; } *G.end++ = '/'; *G.end = '\0'; Trace((stderr, "buildpath now = [%s]\n", FnFilter1(G.buildpath))); return MPN_OK; } /* end if (FUNCTION == APPEND_DIR) */ /*--------------------------------------------------------------------------- GETPATH: copy full path to the string pointed at by pathcomp, and free G.buildpath. ---------------------------------------------------------------------------*/ if (FUNCTION == GETPATH) { strcpy(pathcomp, G.buildpath); Trace((stderr, "getting and freeing path [%s]\n", FnFilter1(pathcomp))); free(G.buildpath); G.buildpath = G.end = (char *)NULL; return MPN_OK; } /*--------------------------------------------------------------------------- APPEND_NAME: assume the path component is the filename; append it and return without checking for existence. ---------------------------------------------------------------------------*/ if (FUNCTION == APPEND_NAME) { #ifdef SHORT_NAMES char *old_end = end; #endif Trace((stderr, "appending filename [%s]\n", FnFilter1(pathcomp))); while ((*G.end = *pathcomp++) != '\0') { ++G.end; #ifdef SHORT_NAMES /* truncate name at 14 characters, typically */ if ((G.end-old_end) > FILENAME_MAX) /* GRR: proper constant? */ *(G.end = old_end + FILENAME_MAX) = '\0'; #endif if ((G.end-G.buildpath) >= FILNAMSIZ) { *--G.end = '\0'; Info(slide, 0x201, ((char *)slide, "checkdir warning: path too long; truncating\n\ %s\n -> %s\n", FnFilter1(G.filename), FnFilter2(G.buildpath))); return MPN_INF_TRUNC; /* filename truncated */ } } Trace((stderr, "buildpath now = [%s]\n", FnFilter1(G.buildpath))); /* could check for existence here, prompt for new name... */ return MPN_OK; } /*--------------------------------------------------------------------------- INIT: allocate and initialize buffer space for the file currently being extracted. If file was renamed with an absolute path, don't prepend the extract-to path. ---------------------------------------------------------------------------*/ /* GRR: for VMS and TOPS-20, add up to 13 to strlen */ if (FUNCTION == INIT) { Trace((stderr, "initializing buildpath to ")); #ifdef ACORN_FTYPE_NFS if ((G.buildpath = (char *)malloc(strlen(G.filename)+G.rootlen+ (uO.acorn_nfs_ext ? 5 : 1))) #else if ((G.buildpath = (char *)malloc(strlen(G.filename)+G.rootlen+1)) #endif == (char *)NULL) return MPN_NOMEM; if ((G.rootlen > 0) && !G.renamed_fullpath) { strcpy(G.buildpath, G.rootpath); G.end = G.buildpath + G.rootlen; } else { *G.buildpath = '\0'; G.end = G.buildpath; } Trace((stderr, "[%s]\n", FnFilter1(G.buildpath))); return MPN_OK; } /*--------------------------------------------------------------------------- ROOT: if appropriate, store the path in rootpath and create it if necessary; else assume it's a zipfile member and return. This path segment gets used in extracting all members from every zipfile specified on the command line. ---------------------------------------------------------------------------*/ #if (!defined(SFX) || defined(SFX_EXDIR)) if (FUNCTION == ROOT) { Trace((stderr, "initializing root path to [%s]\n", FnFilter1(pathcomp))); if (pathcomp == (char *)NULL) { G.rootlen = 0; return MPN_OK; } if (G.rootlen > 0) /* rootpath was already set, nothing to do */ return MPN_OK; if ((G.rootlen = strlen(pathcomp)) > 0) { char *tmproot; if ((tmproot = (char *)malloc(G.rootlen+2)) == (char *)NULL) { G.rootlen = 0; return MPN_NOMEM; } strcpy(tmproot, pathcomp); if (tmproot[G.rootlen-1] == '/') { tmproot[--G.rootlen] = '\0'; } if (G.rootlen > 0 && (SSTAT(tmproot, &G.statbuf) || !S_ISDIR(G.statbuf.st_mode))) { /* path does not exist */ if (!G.create_dirs /* || iswild(tmproot) */ ) { free(tmproot); G.rootlen = 0; /* skip (or treat as stored file) */ return MPN_INF_SKIP; } /* create the directory (could add loop here scanning tmproot * to create more than one level, but why really necessary?) */ if (mkdir(tmproot, 0777) == -1) { Info(slide, 1, ((char *)slide, "checkdir: cannot create extraction directory: %s\n\ %s\n", FnFilter1(tmproot), strerror(errno))); free(tmproot); G.rootlen = 0; /* path didn't exist, tried to create, and failed: */ /* file exists, or 2+ subdir levels required */ return MPN_ERR_SKIP; } } tmproot[G.rootlen++] = '/'; tmproot[G.rootlen] = '\0'; if ((G.rootpath = (char *)realloc(tmproot, G.rootlen+1)) == NULL) { free(tmproot); G.rootlen = 0; return MPN_NOMEM; } Trace((stderr, "rootpath now = [%s]\n", FnFilter1(G.rootpath))); } return MPN_OK; } #endif /* !SFX || SFX_EXDIR */ /*--------------------------------------------------------------------------- END: free rootpath, immediately prior to program exit. ---------------------------------------------------------------------------*/ if (FUNCTION == END) { Trace((stderr, "freeing rootpath\n")); if (G.rootlen > 0) { free(G.rootpath); G.rootlen = 0; } return MPN_OK; } return MPN_INVALID; /* should never reach */ } /* end function checkdir() */ #ifdef NO_MKDIR /********************/ /* Function mkdir() */ /********************/ int mkdir(path, mode) ZCONST char *path; int mode; /* ignored */ /* * returns: 0 - successful * -1 - failed (errno not set, however) */ { char command[FILNAMSIZ+40]; /* buffer for system() call */ /* GRR 930416: added single quotes around path to avoid bug with * creating directories with ampersands in name; not yet tested */ sprintf(command, "IFS=\" \t\n\" /bin/mkdir '%s' 2>/dev/null", path); if (system(command)) return -1; return 0; } #endif /* NO_MKDIR */ #if (!defined(MTS) || defined(SET_DIR_ATTRIB)) static int get_extattribs OF((__GPRO__ iztimes *pzt, ulg z_uidgid[2])); static int get_extattribs(__G__ pzt, z_uidgid) __GDEF iztimes *pzt; ulg z_uidgid[2]; { /*--------------------------------------------------------------------------- Convert from MSDOS-format local time and date to Unix-format 32-bit GMT time: adjust base year from 1980 to 1970, do usual conversions from yy/mm/dd hh:mm:ss to elapsed seconds, and account for timezone and day- light savings time differences. If we have a Unix extra field, however, we're laughing: both mtime and atime are ours. On the other hand, we then have to check for restoration of UID/GID. ---------------------------------------------------------------------------*/ int have_uidgid_flg; unsigned eb_izux_flg; eb_izux_flg = (G.extra_field ? ef_scan_for_izux(G.extra_field, G.lrec.extra_field_length, 0, G.lrec.last_mod_dos_datetime, #ifdef IZ_CHECK_TZ (G.tz_is_valid ? pzt : NULL), #else pzt, #endif z_uidgid) : 0); if (eb_izux_flg & EB_UT_FL_MTIME) { TTrace((stderr, "\nget_extattribs: Unix e.f. modif. time = %ld\n", pzt->mtime)); } else { pzt->mtime = dos_to_unix_time(G.lrec.last_mod_dos_datetime); } if (eb_izux_flg & EB_UT_FL_ATIME) { TTrace((stderr, "get_extattribs: Unix e.f. access time = %ld\n", pzt->atime)); } else { pzt->atime = pzt->mtime; TTrace((stderr, "\nget_extattribs: modification/access times = %ld\n", pzt->mtime)); } /* if -X option was specified and we have UID/GID info, restore it */ have_uidgid_flg = #ifdef RESTORE_UIDGID (uO.X_flag && (eb_izux_flg & EB_UX2_VALID)); #else 0; #endif return have_uidgid_flg; } #endif /* !MTS || SET_DIR_ATTRIB */ #ifndef MTS /****************************/ /* Function close_outfile() */ /****************************/ void close_outfile(__G) /* GRR: change to return PK-style warning level */ __GDEF { union { iztimes t3; /* mtime, atime, ctime */ ztimbuf t2; /* modtime, actime */ } zt; ulg z_uidgid[2]; int have_uidgid_flg; have_uidgid_flg = get_extattribs(__G__ &(zt.t3), z_uidgid); /*--------------------------------------------------------------------------- If symbolic links are supported, allocate storage for a symlink control structure, put the uncompressed "data" and other required info in it, and add the structure to the "deferred symlinks" chain. Since we know it's a symbolic link to start with, we shouldn't have to worry about overflowing unsigned ints with unsigned longs. ---------------------------------------------------------------------------*/ #ifdef SYMLINKS if (G.symlnk) { extent ucsize = (extent)G.lrec.ucsize; # ifdef SET_SYMLINK_ATTRIBS extent attribsize = sizeof(unsigned) + (have_uidgid_flg ? sizeof(z_uidgid) : 0); # else extent attribsize = 0; # endif /* size of the symlink entry is the sum of * (struct size (includes 1st '\0') + 1 additional trailing '\0'), * system specific attribute data size (might be 0), * and the lengths of name and link target. */ extent slnk_entrysize = (sizeof(slinkentry) + 1) + attribsize + ucsize + strlen(G.filename); slinkentry *slnk_entry; if (slnk_entrysize < ucsize) { Info(slide, 0x201, ((char *)slide, "warning: symbolic link (%s) failed: mem alloc overflow\n", FnFilter1(G.filename))); fclose(G.outfile); return; } if ((slnk_entry = (slinkentry *)malloc(slnk_entrysize)) == NULL) { Info(slide, 0x201, ((char *)slide, "warning: symbolic link (%s) failed: no mem\n", FnFilter1(G.filename))); fclose(G.outfile); return; } slnk_entry->next = NULL; slnk_entry->targetlen = ucsize; slnk_entry->attriblen = attribsize; # ifdef SET_SYMLINK_ATTRIBS memcpy(slnk_entry->buf, &(G.pInfo->file_attr), sizeof(unsigned)); if (have_uidgid_flg) memcpy(slnk_entry->buf + 4, z_uidgid, sizeof(z_uidgid)); # endif slnk_entry->target = slnk_entry->buf + slnk_entry->attriblen; slnk_entry->fname = slnk_entry->target + ucsize + 1; strcpy(slnk_entry->fname, G.filename); /* move back to the start of the file to re-read the "link data" */ rewind(G.outfile); if (fread(slnk_entry->target, 1, ucsize, G.outfile) != ucsize) { Info(slide, 0x201, ((char *)slide, "warning: symbolic link (%s) failed\n", FnFilter1(G.filename))); free(slnk_entry); fclose(G.outfile); return; } fclose(G.outfile); /* close "link" file for good... */ slnk_entry->target[ucsize] = '\0'; if (QCOND2) Info(slide, 0, ((char *)slide, "-> %s ", FnFilter1(slnk_entry->target))); /* add this symlink record to the list of deferred symlinks */ if (G.slink_last != NULL) G.slink_last->next = slnk_entry; else G.slink_head = slnk_entry; G.slink_last = slnk_entry; return; } #endif /* SYMLINKS */ #ifdef QLZIP if (G.extra_field) { static void qlfix OF((__GPRO__ uch *ef_ptr, unsigned ef_len)); qlfix(__G__ G.extra_field, G.lrec.extra_field_length); } #endif #if (defined(NO_FCHOWN)) fclose(G.outfile); #endif /* if -X option was specified and we have UID/GID info, restore it */ if (have_uidgid_flg /* check that both uid and gid values fit into their data sizes */ && ((ulg)(uid_t)(z_uidgid[0]) == z_uidgid[0]) && ((ulg)(gid_t)(z_uidgid[1]) == z_uidgid[1])) { TTrace((stderr, "close_outfile: restoring Unix UID/GID info\n")); #if (defined(NO_FCHOWN)) if (chown(G.filename, (uid_t)z_uidgid[0], (gid_t)z_uidgid[1])) #else if (fchown(fileno(G.outfile), (uid_t)z_uidgid[0], (gid_t)z_uidgid[1])) #endif { if (uO.qflag) Info(slide, 0x201, ((char *)slide, CannotSetItemUidGid, z_uidgid[0], z_uidgid[1], FnFilter1(G.filename), strerror(errno))); else Info(slide, 0x201, ((char *)slide, CannotSetUidGid, z_uidgid[0], z_uidgid[1], strerror(errno))); } } #if (!defined(NO_FCHOWN) && defined(NO_FCHMOD)) fclose(G.outfile); #endif #if (!defined(NO_FCHOWN) && !defined(NO_FCHMOD)) /*--------------------------------------------------------------------------- Change the file permissions from default ones to those stored in the zipfile. ---------------------------------------------------------------------------*/ if (fchmod(fileno(G.outfile), filtattr(__G__ G.pInfo->file_attr))) perror("fchmod (file attributes) error"); fclose(G.outfile); #endif /* !NO_FCHOWN && !NO_FCHMOD */ /* skip restoring time stamps on user's request */ if (uO.D_flag <= 1) { /* set the file's access and modification times */ if (utime(G.filename, &(zt.t2))) { if (uO.qflag) Info(slide, 0x201, ((char *)slide, CannotSetItemTimestamps, FnFilter1(G.filename), strerror(errno))); else Info(slide, 0x201, ((char *)slide, CannotSetTimestamps, strerror(errno))); } } #if (defined(NO_FCHOWN) || defined(NO_FCHMOD)) /*--------------------------------------------------------------------------- Change the file permissions from default ones to those stored in the zipfile. ---------------------------------------------------------------------------*/ #ifndef NO_CHMOD if (chmod(G.filename, filtattr(__G__ G.pInfo->file_attr))) perror("chmod (file attributes) error"); #endif #endif /* NO_FCHOWN || NO_FCHMOD */ } /* end function close_outfile() */ #endif /* !MTS */ #if (defined(SYMLINKS) && defined(SET_SYMLINK_ATTRIBS)) int set_symlnk_attribs(__G__ slnk_entry) __GDEF slinkentry *slnk_entry; { if (slnk_entry->attriblen > 0) { # if (!defined(NO_LCHOWN)) if (slnk_entry->attriblen > sizeof(unsigned)) { ulg *z_uidgid_p = (zvoid *)(slnk_entry->buf + sizeof(unsigned)); /* check that both uid and gid values fit into their data sizes */ if (((ulg)(uid_t)(z_uidgid_p[0]) == z_uidgid_p[0]) && ((ulg)(gid_t)(z_uidgid_p[1]) == z_uidgid_p[1])) { TTrace((stderr, "set_symlnk_attribs: restoring Unix UID/GID info for\n\ %s\n", FnFilter1(slnk_entry->fname))); if (lchown(slnk_entry->fname, (uid_t)z_uidgid_p[0], (gid_t)z_uidgid_p[1])) { Info(slide, 0x201, ((char *)slide, CannotSetItemUidGid, z_uidgid_p[0], z_uidgid_p[1], FnFilter1(slnk_entry->fname), strerror(errno))); } } } # endif /* !NO_LCHOWN */ # if (!defined(NO_LCHMOD)) TTrace((stderr, "set_symlnk_attribs: restoring Unix attributes for\n %s\n", FnFilter1(slnk_entry->fname))); if (lchmod(slnk_entry->fname, filtattr(__G__ *(unsigned *)(zvoid *)slnk_entry->buf))) perror("lchmod (file attributes) error"); # endif /* !NO_LCHMOD */ } /* currently, no error propagation... */ return PK_OK; } /* end function set_symlnk_attribs() */ #endif /* SYMLINKS && SET_SYMLINK_ATTRIBS */ #ifdef SET_DIR_ATTRIB /* messages of code for setting directory attributes */ # ifndef NO_CHMOD static ZCONST char DirlistChmodFailed[] = "warning: cannot set permissions for %s\n %s\n"; # endif int defer_dir_attribs(__G__ pd) __GDEF direntry **pd; { uxdirattr *d_entry; d_entry = (uxdirattr *)malloc(sizeof(uxdirattr) + strlen(G.filename)); *pd = (direntry *)d_entry; if (d_entry == (uxdirattr *)NULL) { return PK_MEM; } d_entry->fn = d_entry->fnbuf; strcpy(d_entry->fn, G.filename); d_entry->perms = G.pInfo->file_attr; d_entry->have_uidgid = get_extattribs(__G__ &(d_entry->u.t3), d_entry->uidgid); return PK_OK; } /* end function defer_dir_attribs() */ int set_direc_attribs(__G__ d) __GDEF direntry *d; { int errval = PK_OK; if (UxAtt(d)->have_uidgid && /* check that both uid and gid values fit into their data sizes */ ((ulg)(uid_t)(UxAtt(d)->uidgid[0]) == UxAtt(d)->uidgid[0]) && ((ulg)(gid_t)(UxAtt(d)->uidgid[1]) == UxAtt(d)->uidgid[1]) && chown(UxAtt(d)->fn, (uid_t)UxAtt(d)->uidgid[0], (gid_t)UxAtt(d)->uidgid[1])) { Info(slide, 0x201, ((char *)slide, CannotSetItemUidGid, UxAtt(d)->uidgid[0], UxAtt(d)->uidgid[1], FnFilter1(d->fn), strerror(errno))); if (!errval) errval = PK_WARN; } /* Skip restoring directory time stamps on user' request. */ if (uO.D_flag <= 0) { /* restore directory timestamps */ if (utime(d->fn, &UxAtt(d)->u.t2)) { Info(slide, 0x201, ((char *)slide, CannotSetItemTimestamps, FnFilter1(d->fn), strerror(errno))); if (!errval) errval = PK_WARN; } } #ifndef NO_CHMOD if (chmod(d->fn, UxAtt(d)->perms)) { Info(slide, 0x201, ((char *)slide, DirlistChmodFailed, FnFilter1(d->fn), strerror(errno))); if (!errval) errval = PK_WARN; } #endif /* !NO_CHMOD */ return errval; } /* end function set_direc_attribs() */ #endif /* SET_DIR_ATTRIB */ #ifdef TIMESTAMP /***************************/ /* Function stamp_file() */ /***************************/ int stamp_file(fname, modtime) ZCONST char *fname; time_t modtime; { ztimbuf tp; tp.modtime = tp.actime = modtime; return (utime(fname, &tp)); } /* end function stamp_file() */ #endif /* TIMESTAMP */ #ifndef SFX /************************/ /* Function version() */ /************************/ void version(__G) __GDEF { #if (defined(__GNUC__) && defined(NX_CURRENT_COMPILER_RELEASE)) char cc_namebuf[40]; char cc_versbuf[40]; #else #if (defined(__SUNPRO_C)) char cc_versbuf[17]; #else #if (defined(__HP_cc) || defined(__IBMC__)) char cc_versbuf[25]; #else #if (defined(__DECC_VER)) char cc_versbuf[17]; int cc_verstyp; #else #if (defined(CRAY) && defined(_RELEASE)) char cc_versbuf[40]; #endif /* (CRAY && _RELEASE) */ #endif /* __DECC_VER */ #endif /* __HP_cc || __IBMC__ */ #endif /* __SUNPRO_C */ #endif /* (__GNUC__ && NX_CURRENT_COMPILER_RELEASE) */ #if ((defined(CRAY) || defined(cray)) && defined(_UNICOS)) char os_namebuf[40]; #else #if defined(__NetBSD__) char os_namebuf[40]; #endif #endif /* Pyramid, NeXT have problems with huge macro expansion, too: no Info() */ sprintf((char *)slide, LoadFarString(CompiledWith), #ifdef __GNUC__ # ifdef NX_CURRENT_COMPILER_RELEASE (sprintf(cc_namebuf, "NeXT DevKit %d.%02d ", NX_CURRENT_COMPILER_RELEASE/100, NX_CURRENT_COMPILER_RELEASE%100), cc_namebuf), (strlen(__VERSION__) > 8)? "(gcc)" : (sprintf(cc_versbuf, "(gcc %s)", __VERSION__), cc_versbuf), # else "gcc ", __VERSION__, # endif #else #if defined(__SUNPRO_C) "Sun C ", (sprintf(cc_versbuf, "version %x", __SUNPRO_C), cc_versbuf), #else #if (defined(__HP_cc)) "HP C ", (((__HP_cc% 100) == 0) ? (sprintf(cc_versbuf, "version A.%02d.%02d", (__HP_cc/ 10000), ((__HP_cc% 10000)/ 100))) : (sprintf(cc_versbuf, "version A.%02d.%02d.%02d", (__HP_cc/ 10000), ((__HP_cc% 10000)/ 100), (__HP_cc% 100))), cc_versbuf), #else #if (defined(__DECC_VER)) "DEC C ", (sprintf(cc_versbuf, "%c%d.%d-%03d", ((cc_verstyp = (__DECC_VER / 10000) % 10) == 6 ? 'T' : (cc_verstyp == 8 ? 'S' : 'V')), __DECC_VER / 10000000, (__DECC_VER % 10000000) / 100000, __DECC_VER % 1000), cc_versbuf), #else #if defined(CRAY) && defined(_RELEASE) "cc ", (sprintf(cc_versbuf, "version %d", _RELEASE), cc_versbuf), #else #ifdef __IBMC__ "IBM C ", (sprintf(cc_versbuf, "version %d.%d.%d", (__IBMC__ / 100), ((__IBMC__ / 10) % 10), (__IBMC__ % 10)), cc_versbuf), #else #ifdef __VERSION__ # ifndef IZ_CC_NAME # define IZ_CC_NAME "cc " # endif IZ_CC_NAME, __VERSION__ #else # ifndef IZ_CC_NAME # define IZ_CC_NAME "cc" # endif IZ_CC_NAME, "", #endif /* ?__VERSION__ */ #endif /* ?__IBMC__ */ #endif /* ?(CRAY && _RELEASE) */ #endif /* ?__DECC_VER */ #endif /* ?__HP_cc */ #endif /* ?__SUNPRO_C */ #endif /* ?__GNUC__ */ #ifndef IZ_OS_NAME # define IZ_OS_NAME "Unix" #endif IZ_OS_NAME, #if defined(sgi) || defined(__sgi) " (Silicon Graphics IRIX)", #else #ifdef sun # ifdef sparc # ifdef __SVR4 " (Sun SPARC/Solaris)", # else /* may or may not be SunOS */ " (Sun SPARC)", # endif # else # if defined(sun386) || defined(i386) " (Sun 386i)", # else # if defined(mc68020) || defined(__mc68020__) " (Sun 3)", # else /* mc68010 or mc68000: Sun 2 or earlier */ " (Sun 2)", # endif # endif # endif #else #ifdef __hpux " (HP-UX)", #else #ifdef __osf__ " (DEC OSF/1)", #else #ifdef _AIX " (IBM AIX)", #else #ifdef aiws " (IBM RT/AIX)", #else #if defined(CRAY) || defined(cray) # ifdef _UNICOS (sprintf(os_namebuf, " (Cray UNICOS release %d)", _UNICOS), os_namebuf), # else " (Cray UNICOS)", # endif #else #if defined(uts) || defined(UTS) " (Amdahl UTS)", #else #ifdef NeXT # ifdef mc68000 " (NeXTStep/black)", # else " (NeXTStep for Intel)", # endif #else /* the next dozen or so are somewhat order-dependent */ #ifdef LINUX # ifdef __ELF__ " (Linux ELF)", # else " (Linux a.out)", # endif #else #ifdef MINIX " (Minix)", #else #ifdef M_UNIX " (SCO Unix)", #else #ifdef M_XENIX " (SCO Xenix)", #else #ifdef __NetBSD__ # ifdef NetBSD0_8 (sprintf(os_namebuf, " (NetBSD 0.8%c)", (char)(NetBSD0_8 - 1 + 'A')), os_namebuf), # else # ifdef NetBSD0_9 (sprintf(os_namebuf, " (NetBSD 0.9%c)", (char)(NetBSD0_9 - 1 + 'A')), os_namebuf), # else # ifdef NetBSD1_0 (sprintf(os_namebuf, " (NetBSD 1.0%c)", (char)(NetBSD1_0 - 1 + 'A')), os_namebuf), # else (BSD4_4 == 0.5)? " (NetBSD before 0.9)" : " (NetBSD 1.1 or later)", # endif # endif # endif #else #ifdef __FreeBSD__ (BSD4_4 == 0.5)? " (FreeBSD 1.x)" : " (FreeBSD 2.0 or later)", #else #ifdef __bsdi__ (BSD4_4 == 0.5)? " (BSD/386 1.0)" : " (BSD/386 1.1 or later)", #else #ifdef __386BSD__ (BSD4_4 == 1)? " (386BSD, post-4.4 release)" : " (386BSD)", #else #ifdef __CYGWIN__ " (Cygwin)", #else #if defined(i686) || defined(__i686) || defined(__i686__) " (Intel 686)", #else #if defined(i586) || defined(__i586) || defined(__i586__) " (Intel 586)", #else #if defined(i486) || defined(__i486) || defined(__i486__) " (Intel 486)", #else #if defined(i386) || defined(__i386) || defined(__i386__) " (Intel 386)", #else #ifdef pyr " (Pyramid)", #else #ifdef ultrix # ifdef mips " (DEC/MIPS)", # else # ifdef vax " (DEC/VAX)", # else /* __alpha? */ " (DEC/Alpha)", # endif # endif #else #ifdef gould " (Gould)", #else #ifdef MTS " (MTS)", #else #ifdef __convexc__ " (Convex)", #else #ifdef __QNX__ " (QNX 4)", #else #ifdef __QNXNTO__ " (QNX Neutrino)", #else #ifdef Lynx " (LynxOS)", #else #ifdef __APPLE__ # ifdef __i386__ " Mac OS X Intel i32", # else # ifdef __ppc__ " Mac OS X PowerPC", # else # ifdef __ppc64__ " Mac OS X PowerPC64", # else " Mac OS X", # endif /* __ppc64__ */ # endif /* __ppc__ */ # endif /* __i386__ */ #else "", #endif /* Apple */ #endif /* Lynx */ #endif /* QNX Neutrino */ #endif /* QNX 4 */ #endif /* Convex */ #endif /* MTS */ #endif /* Gould */ #endif /* DEC */ #endif /* Pyramid */ #endif /* 386 */ #endif /* 486 */ #endif /* 586 */ #endif /* 686 */ #endif /* Cygwin */ #endif /* 386BSD */ #endif /* BSDI BSD/386 */ #endif /* NetBSD */ #endif /* FreeBSD */ #endif /* SCO Xenix */ #endif /* SCO Unix */ #endif /* Minix */ #endif /* Linux */ #endif /* NeXT */ #endif /* Amdahl */ #endif /* Cray */ #endif /* RT/AIX */ #endif /* AIX */ #endif /* OSF/1 */ #endif /* HP-UX */ #endif /* Sun */ #endif /* SGI */ #ifdef __DATE__ " on ", __DATE__ #else "", "" #endif ); (*G.message)((zvoid *)&G, slide, (ulg)strlen((char *)slide), 0); } /* end function version() */ #endif /* !SFX */ #ifdef QLZIP struct qdirect { long d_length __attribute__ ((packed)); /* file length */ unsigned char d_access __attribute__ ((packed)); /* file access type */ unsigned char d_type __attribute__ ((packed)); /* file type */ long d_datalen __attribute__ ((packed)); /* data length */ long d_reserved __attribute__ ((packed));/* Unused */ short d_szname __attribute__ ((packed)); /* size of name */ char d_name[36] __attribute__ ((packed));/* name area */ long d_update __attribute__ ((packed)); /* last update */ long d_refdate __attribute__ ((packed)); long d_backup __attribute__ ((packed)); /* EOD */ }; #define LONGID "QDOS02" #define EXTRALEN (sizeof(struct qdirect) + 8) #define JBLONGID "QZHD" #define JBEXTRALEN (sizeof(jbextra) - 4 * sizeof(char)) typedef struct { char eb_header[4] __attribute__ ((packed)); /* place_holder */ char longid[8] __attribute__ ((packed)); struct qdirect header __attribute__ ((packed)); } qdosextra; typedef struct { char eb_header[4]; /* place_holder */ char longid[4]; struct qdirect header; } jbextra; /* The following two functions SH() and LG() convert big-endian short * and long numbers into native byte order. They are some kind of * counterpart to the generic UnZip's makeword() and makelong() functions. */ static ush SH(ush val) { uch swapbuf[2]; swapbuf[1] = (uch)(val & 0xff); swapbuf[0] = (uch)(val >> 8); return (*(ush *)swapbuf); } static ulg LG(ulg val) { /* convert the big-endian unsigned long number `val' to the machine * dependent representation */ ush swapbuf[2]; swapbuf[1] = SH((ush)(val & 0xffff)); swapbuf[0] = SH((ush)(val >> 16)); return (*(ulg *)swapbuf); } static void qlfix(__G__ ef_ptr, ef_len) __GDEF uch *ef_ptr; unsigned ef_len; { while (ef_len >= EB_HEADSIZE) { unsigned eb_id = makeword(EB_ID + ef_ptr); unsigned eb_len = makeword(EB_LEN + ef_ptr); if (eb_len > (ef_len - EB_HEADSIZE)) { /* discovered some extra field inconsistency! */ Trace((stderr, "qlfix: block length %u > rest ef_size %u\n", eb_len, ef_len - EB_HEADSIZE)); break; } switch (eb_id) { case EF_QDOS: { struct _ntc_ { long id; long dlen; } ntc; long dlen = 0; qdosextra *extra = (qdosextra *)ef_ptr; jbextra *jbp = (jbextra *)ef_ptr; if (!strncmp(extra->longid, LONGID, strlen(LONGID))) { if (eb_len != EXTRALEN) if (uO.qflag) Info(slide, 0x201, ((char *)slide, "warning: invalid length in Qdos field for %s\n", FnFilter1(G.filename))); else Info(slide, 0x201, ((char *)slide, "warning: invalid length in Qdos field")); if (extra->header.d_type) { dlen = extra->header.d_datalen; } } if (!strncmp(jbp->longid, JBLONGID, strlen(JBLONGID))) { if (eb_len != JBEXTRALEN) if (uO.qflag) Info(slide, 0x201, ((char *)slide, "warning: invalid length in QZ field for %s\n", FnFilter1(G.filename))); else Info(slide, 0x201, ((char *)slide, "warning: invalid length in QZ field")); if (jbp->header.d_type) { dlen = jbp->header.d_datalen; } } if ((long)LG(dlen) > 0) { zfseeko(G.outfile, -8, SEEK_END); fread(&ntc, 8, 1, G.outfile); if (ntc.id != *(long *)"XTcc") { ntc.id = *(long *)"XTcc"; ntc.dlen = dlen; fwrite (&ntc, 8, 1, G.outfile); } Info(slide, 0x201, ((char *)slide, "QData = %d", LG(dlen))); } return; /* finished, cancel further extra field scanning */ } default: Trace((stderr,"qlfix: unknown extra field block, ID=%d\n", eb_id)); } /* Skip this extra field block */ ef_ptr += (eb_len + EB_HEADSIZE); ef_len -= (eb_len + EB_HEADSIZE); } } #endif /* QLZIP */ Carla-2.4.2/data/windows/unzipfx-carla/unix/unxcfg.h000066400000000000000000000146171420416754300223740ustar00rootroot00000000000000/* Copyright (c) 1990-2009 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2009-Jan-02 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- Unix specific configuration section: ---------------------------------------------------------------------------*/ #ifndef __unxcfg_h #define __unxcfg_h /* LARGE FILE SUPPORT - 10/6/04 EG */ /* This needs to be set before the includes so they set the right sizes */ #if (defined(NO_LARGE_FILE_SUPPORT) && defined(LARGE_FILE_SUPPORT)) # undef LARGE_FILE_SUPPORT #endif /* Automatically set ZIP64_SUPPORT if LFS */ #ifdef LARGE_FILE_SUPPORT # if (!defined(NO_ZIP64_SUPPORT) && !defined(ZIP64_SUPPORT)) # define ZIP64_SUPPORT # endif #endif /* NO_ZIP64_SUPPORT takes preceedence over ZIP64_SUPPORT */ #if defined(NO_ZIP64_SUPPORT) && defined(ZIP64_SUPPORT) # undef ZIP64_SUPPORT #endif #ifdef LARGE_FILE_SUPPORT /* 64-bit Large File Support */ /* The following Large File Summit (LFS) defines turn on large file support on Linux (probably 2.4 or later kernel) and many other unixen */ /* These have to be before any include that sets types so the large file versions of the types are set in the includes */ # define _LARGEFILE_SOURCE /* some OSes need this for fseeko */ # define _LARGEFILE64_SOURCE # define _FILE_OFFSET_BITS 64 /* select default interface as 64 bit */ # define _LARGE_FILES /* some OSes need this for 64-bit off_t */ # define __USE_LARGEFILE64 #endif /* LARGE_FILE_SUPPORT */ #include /* off_t, time_t, dev_t, ... */ #include #ifdef NO_OFF_T typedef long zoff_t; #else typedef off_t zoff_t; #endif #define ZOFF_T_DEFINED typedef struct stat z_stat; #define Z_STAT_DEFINED #ifndef COHERENT # include /* O_BINARY for open() w/o CR/LF translation */ #else /* COHERENT */ # ifdef _I386 # include /* Coherent 4.0.x, Mark Williams C */ # else # include /* Coherent 3.10, Mark Williams C */ # endif # define SHORT_SYMS # ifndef __COHERENT__ /* Coherent 4.2 has tzset() */ # define tzset settz # endif #endif /* ?COHERENT */ #ifndef NO_PARAM_H # ifdef NGROUPS_MAX # undef NGROUPS_MAX /* SCO bug: defined again in */ # endif # ifdef BSD # define TEMP_BSD /* may be defined again in */ # undef BSD # endif # include /* conflict with , some systems? */ # ifdef TEMP_BSD # undef TEMP_BSD # ifndef BSD # define BSD # endif # endif #endif /* !NO_PARAM_H */ #ifdef __osf__ # define DIRENT # ifdef BSD # undef BSD # endif #endif /* __osf__ */ #ifdef __CYGWIN__ # include # define DIRENT # define HAVE_TERMIOS_H # ifndef timezone # define timezone _timezone # endif #endif #ifdef BSD # include # include # if (defined(_AIX) || defined(__GLIBC__) || defined(__GNU__)) # include # endif #else # include struct tm *gmtime(), *localtime(); #endif #if (defined(BSD4_4) || (defined(SYSV) && defined(MODERN))) # include /* this includes utime.h on SGIs */ # if (defined(BSD4_4) || defined(linux) || defined(__GLIBC__)) # include # define GOT_UTIMBUF # endif # if (!defined(GOT_UTIMBUF) && (defined(__hpux) || defined(__SUNPRO_C))) # include # define GOT_UTIMBUF # endif # if (!defined(GOT_UTIMBUF) && defined(__GNU__)) # include # define GOT_UTIMBUF # endif #endif #if (defined(__DGUX__) && !defined(GOT_UTIMBUF)) /* DG/UX requires this because of a non-standard struct utimebuf */ # include # define GOT_UTIMBUF #endif #if (defined(V7) || defined(pyr_bsd)) # define strchr index # define strrchr rindex #endif #ifdef V7 # define O_RDONLY 0 # define O_WRONLY 1 # define O_RDWR 2 #endif #if defined(NO_UNICODE_SUPPORT) && defined(UNICODE_SUPPORT) /* disable Unicode (UTF-8) support when requested */ # undef UNICODE_SUPPORT #endif #if (defined(_MBCS) && defined(NO_MBCS)) /* disable MBCS support when requested */ # undef _MBCS #endif #if (!defined(NO_SETLOCALE) && !defined(_MBCS)) # if (!defined(UNICODE_SUPPORT) || !defined(UTF8_MAYBE_NATIVE)) /* enable setlocale here, unless this happens later for UTF-8 and/or * MBCS support */ # include # ifndef SETLOCALE # define SETLOCALE(category, locale) setlocale(category, locale) # endif # endif #endif #ifndef NO_SETLOCALE # if (!defined(NO_WORKING_ISPRINT) && !defined(HAVE_WORKING_ISPRINT)) /* enable "enhanced" unprintable chars detection in fnfilter() */ # define HAVE_WORKING_ISPRINT # endif #endif #ifdef MINIX # include #endif #if (!defined(HAVE_STRNICMP) & !defined(NO_STRNICMP)) # define NO_STRNICMP #endif #ifndef DATE_FORMAT # define DATE_FORMAT DF_MDY /* GRR: customize with locale.h somehow? */ #endif #define lenEOL 1 #ifdef EBCDIC # define PutNativeEOL *q++ = '\n'; #else # define PutNativeEOL *q++ = native(LF); #endif #define SCREENSIZE(ttrows, ttcols) screensize(ttrows, ttcols) #define SCREENWIDTH 80 #define SCREENLWRAP 1 #define USE_EF_UT_TIME #if (!defined(NO_LCHOWN) || !defined(NO_LCHMOD)) # define SET_SYMLINK_ATTRIBS #endif #ifdef MTS # ifdef SET_DIR_ATTRIB # undef SET_DIR_ATTRIB # endif #else /* !MTS */ # define SET_DIR_ATTRIB # if (!defined(NOTIMESTAMP) && !defined(TIMESTAMP)) /* GRR 970513 */ # define TIMESTAMP # endif # define RESTORE_UIDGID #endif /* ?MTS */ /* Static variables that we have to add to Uz_Globs: */ #define SYSTEM_SPECIFIC_GLOBALS \ int created_dir, renamed_fullpath;\ char *rootpath, *buildpath, *end;\ ZCONST char *wildname;\ char *dirname, matchname[FILNAMSIZ];\ int rootlen, have_dirname, dirnamelen, notfirstcall;\ zvoid *wild_dir; /* created_dir, and renamed_fullpath are used by both mapname() and */ /* checkdir(). */ /* rootlen, rootpath, buildpath and end are used by checkdir(). */ /* wild_dir, dirname, wildname, matchname[], dirnamelen, have_dirname, */ /* and notfirstcall are used by do_wild(). */ #endif /* !__unxcfg_h */ Carla-2.4.2/data/windows/unzipfx-carla/unzip.c000066400000000000000000002757611420416754300212700ustar00rootroot00000000000000/* Copyright (c) 1990-2009 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2009-Jan-02 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- unzip.c UnZip - a zipfile extraction utility. See below for make instructions, or read the comments in Makefile and the various Contents files for more de- tailed explanations. To report a bug, submit a *complete* description via //www.info-zip.org/zip-bug.html; include machine type, operating system and version, compiler and version, and reasonably detailed error messages or problem report. To join Info-ZIP, see the instructions in README. UnZip 5.x is a greatly expanded and partially rewritten successor to 4.x, which in turn was almost a complete rewrite of version 3.x. For a detailed revision history, see UnzpHist.zip at quest.jpl.nasa.gov. For a list of the many (near infinite) contributors, see "CONTRIBS" in the UnZip source distribution. UnZip 6.0 adds support for archives larger than 4 GiB using the Zip64 extensions as well as support for Unicode information embedded per the latest zip standard additions. --------------------------------------------------------------------------- [from original zipinfo.c] This program reads great gobs of totally nifty information, including the central directory stuff, from ZIP archives ("zipfiles" for short). It started as just a testbed for fooling with zipfiles, but at this point it is actually a useful utility. It also became the basis for the rewrite of UnZip (3.16 -> 4.0), using the central directory for processing rather than the individual (local) file headers. As of ZipInfo v2.0 and UnZip v5.1, the two programs are combined into one. If the executable is named "unzip" (or "unzip.exe", depending), it behaves like UnZip by default; if it is named "zipinfo" or "ii", it behaves like ZipInfo. The ZipInfo behavior may also be triggered by use of unzip's -Z option; for example, "unzip -Z [zipinfo_options] archive.zip". Another dandy product from your buddies at Newtware! Author: Greg Roelofs, newt@pobox.com, http://pobox.com/~newt/ 23 August 1990 -> April 1997 --------------------------------------------------------------------------- Version: unzip5??.{tar.Z | tar.gz | zip} for Unix, VMS, OS/2, MS-DOS, Amiga, Atari, Windows 3.x/95/NT/CE, Macintosh, Human68K, Acorn RISC OS, AtheOS, BeOS, SMS/QDOS, VM/CMS, MVS, AOS/VS, Tandem NSK, Theos and TOPS-20. Copyrights: see accompanying file "LICENSE" in UnZip source distribution. (This software is free but NOT IN THE PUBLIC DOMAIN.) ---------------------------------------------------------------------------*/ #define __UNZIP_C /* identifies this source module */ #define UNZIP_INTERNAL #include "unzip.h" /* includes, typedefs, macros, prototypes, etc. */ #include "crypt.h" #include "unzvers.h" #include "unzipfx/appDetails.h" #ifndef WINDLL /* The WINDLL port uses windll/windll.c instead... */ /***************************/ /* Local type declarations */ /***************************/ #if (defined(REENTRANT) && !defined(NO_EXCEPT_SIGNALS)) typedef struct _sign_info { struct _sign_info *previous; void (*sighandler)(int); int sigtype; } savsigs_info; #endif /*******************/ /* Local Functions */ /*******************/ #if (defined(REENTRANT) && !defined(NO_EXCEPT_SIGNALS)) static int setsignalhandler OF((__GPRO__ savsigs_info **p_savedhandler_chain, int signal_type, void (*newhandler)(int))); #endif #ifndef SFX static void help_extended OF((__GPRO)); static void show_version_info OF((__GPRO)); #endif /*************/ /* Constants */ /*************/ #include "consts.h" /* all constant global variables are in here */ /* (non-constant globals were moved to globals.c) */ /* constant local variables: */ #ifndef SFX #ifndef _WIN32_WCE /* Win CE does not support environment variables */ static ZCONST char Far EnvUnZip[] = ENV_UNZIP; static ZCONST char Far EnvUnZip2[] = ENV_UNZIP2; static ZCONST char Far EnvZipInfo[] = ENV_ZIPINFO; static ZCONST char Far EnvZipInfo2[] = ENV_ZIPINFO2; #ifdef RISCOS static ZCONST char Far EnvUnZipExts[] = ENV_UNZIPEXTS; #endif /* RISCOS */ static ZCONST char Far NoMemEnvArguments[] = "envargs: cannot get memory for arguments"; #endif /* !_WIN32_WCE */ static ZCONST char Far CmdLineParamTooLong[] = "error: command line parameter #%d exceeds internal size limit\n"; #endif /* !SFX */ #if (defined(REENTRANT) && !defined(NO_EXCEPT_SIGNALS)) static ZCONST char Far CantSaveSigHandler[] = "error: cannot save signal handler settings\n"; #endif #if (!defined(SFX) || defined(SFX_EXDIR)) static ZCONST char Far NotExtracting[] = "caution: not extracting; -d ignored\n"; static ZCONST char Far MustGiveExdir[] = "error: must specify directory to which to extract with -d option\n"; static ZCONST char Far OnlyOneExdir[] = "error: -d option used more than once (only one exdir allowed)\n"; #endif #if (defined(UNICODE_SUPPORT) && !defined(UNICODE_WCHAR)) static ZCONST char Far UTF8EscapeUnSupp[] = "warning: -U \"escape all non-ASCII UTF-8 chars\" is not supported\n"; #endif #if CRYPT static ZCONST char Far MustGivePasswd[] = "error: must give decryption password with -P option\n"; #endif #ifndef SFX static ZCONST char Far Zfirst[] = "error: -Z must be first option for ZipInfo mode (check UNZIP variable?)\n"; #endif static ZCONST char Far InvalidOptionsMsg[] = "error:\ -fn or any combination of -c, -l, -p, -t, -u and -v options invalid\n"; static ZCONST char Far IgnoreOOptionMsg[] = "caution: both -n and -o specified; ignoring -o\n"; /* usage() strings */ #ifndef SFX #ifdef VMS static ZCONST char Far Example3[] = "vms.c"; static ZCONST char Far Example2[] = " unzip \"-V\" foo \"Bar\"\ (Quote names to preserve case, unless SET PROC/PARS=EXT)\n"; #else /* !VMS */ static ZCONST char Far Example3[] = "ReadMe"; #ifdef RISCOS static ZCONST char Far Example2[] = " unzip foo -d RAM:$ => extract all files from foo into RAMDisc\n"; #else /* !RISCOS */ #if (defined(OS2) || (defined(DOS_FLX_OS2_W32) && defined(MORE))) static ZCONST char Far Example2[] = ""; /* no room: too many local3[] items */ #else /* !OS2 */ #ifdef MACOS static ZCONST char Far Example2[] = ""; /* not needed */ #else /* !MACOS */ static ZCONST char Far Example2[] = " \ unzip -p foo | more => send contents of foo.zip via pipe into program more\n"; #endif /* ?MACOS */ #endif /* ?OS2 */ #endif /* ?RISCOS */ #endif /* ?VMS */ /* local1[]: command options */ #if defined(TIMESTAMP) static ZCONST char Far local1[] = " -T timestamp archive to latest"; #else /* !TIMESTAMP */ static ZCONST char Far local1[] = ""; #endif /* ?TIMESTAMP */ /* local2[] and local3[]: modifier options */ #ifdef DOS_FLX_H68_OS2_W32 #ifdef FLEXOS static ZCONST char Far local2[] = ""; #else static ZCONST char Far local2[] = " -$ label removables (-$$ => fixed disks)"; #endif #ifdef OS2 #ifdef MORE static ZCONST char Far local3[] = "\ -X restore ACLs if supported -s spaces in filenames => '_'\n\ -M pipe through \"more\" pager\n"; #else static ZCONST char Far local3[] = " \ -X restore ACLs if supported -s spaces in filenames => '_'\n\n"; #endif /* ?MORE */ #else /* !OS2 */ #ifdef WIN32 #ifdef NTSD_EAS #ifdef MORE static ZCONST char Far local3[] = "\ -X restore ACLs (-XX => use privileges) -s spaces in filenames => '_'\n\ -M pipe through \"more\" pager\n"; #else static ZCONST char Far local3[] = " \ -X restore ACLs (-XX => use privileges) -s spaces in filenames => '_'\n\n"; #endif /* ?MORE */ #else /* !NTSD_EAS */ #ifdef MORE static ZCONST char Far local3[] = "\ -M pipe through \"more\" pager \ -s spaces in filenames => '_'\n\n"; #else static ZCONST char Far local3[] = " \ -s spaces in filenames => '_'\n\n"; #endif /* ?MORE */ #endif /* ?NTSD_EAS */ #else /* !WIN32 */ #ifdef MORE static ZCONST char Far local3[] = " -\ M pipe through \"more\" pager -s spaces in filenames => '_'\n\n"; #else static ZCONST char Far local3[] = "\ -s spaces in filenames => '_'\n"; #endif #endif /* ?WIN32 */ #endif /* ?OS2 || ?WIN32 */ #else /* !DOS_FLX_OS2_W32 */ #ifdef VMS static ZCONST char Far local2[] = " -X restore owner/ACL protection info"; #ifdef MORE static ZCONST char Far local3[] = "\ -Y treat \".nnn\" as \";nnn\" version -2 force ODS2 names\n\ --D restore dir (-D: no) timestamps -M pipe through \"more\" pager\n\ (Must quote upper-case options, like \"-V\", unless SET PROC/PARSE=EXTEND.)\ \n\n"; #else static ZCONST char Far local3[] = "\n\ -Y treat \".nnn\" as \";nnn\" version -2 force ODS2 names\n\ --D restore dir (-D: no) timestamps\n\ (Must quote upper-case options, like \"-V\", unless SET PROC/PARSE=EXTEND.)\ \n\n"; #endif #else /* !VMS */ #ifdef ATH_BEO_UNX static ZCONST char Far local2[] = " -X restore UID/GID info"; #ifdef MORE static ZCONST char Far local3[] = "\ -K keep setuid/setgid/tacky permissions -M pipe through \"more\" pager\n"; #else static ZCONST char Far local3[] = "\ -K keep setuid/setgid/tacky permissions\n"; #endif #else /* !ATH_BEO_UNX */ #ifdef TANDEM static ZCONST char Far local2[] = "\ -X restore Tandem User ID -r remove file extensions\n\ -b create 'C' (180) text files "; #ifdef MORE static ZCONST char Far local3[] = " \ -M pipe through \"more\" pager\n"; #else static ZCONST char Far local3[] = "\n"; #endif #else /* !TANDEM */ #ifdef AMIGA static ZCONST char Far local2[] = " -N restore comments as filenotes"; #ifdef MORE static ZCONST char Far local3[] = " \ -M pipe through \"more\" pager\n"; #else static ZCONST char Far local3[] = "\n"; #endif #else /* !AMIGA */ #ifdef MACOS static ZCONST char Far local2[] = " -E show Mac info during extraction"; static ZCONST char Far local3[] = " \ -i ignore filenames in mac extra info -J junk (ignore) Mac extra info\n\ \n"; #else /* !MACOS */ #ifdef MORE static ZCONST char Far local2[] = " -M pipe through \"more\" pager"; static ZCONST char Far local3[] = "\n"; #else static ZCONST char Far local2[] = ""; /* Atari, Mac, CMS/MVS etc. */ static ZCONST char Far local3[] = ""; #endif #endif /* ?MACOS */ #endif /* ?AMIGA */ #endif /* ?TANDEM */ #endif /* ?ATH_BEO_UNX */ #endif /* ?VMS */ #endif /* ?DOS_FLX_OS2_W32 */ #endif /* !SFX */ #ifndef NO_ZIPINFO #ifdef VMS static ZCONST char Far ZipInfoExample[] = "* or % (e.g., \"*font-%.zip\")"; #else static ZCONST char Far ZipInfoExample[] = "*, ?, [] (e.g., \"[a-j]*.zip\")"; #endif static ZCONST char Far ZipInfoUsageLine1[] = "\ ZipInfo %d.%d%d%s of %s, by Greg Roelofs and the Info-ZIP group.\n\ \n\ List name, date/time, attribute, size, compression method, etc., about files\n\ in list (excluding those in xlist) contained in the specified .zip archive(s).\ \n\"file[.zip]\" may be a wildcard name containing %s.\n\n\ usage: zipinfo [-12smlvChMtTz] file[.zip] [list...] [-x xlist...]\n\ or: unzip %s-Z%s [-12smlvChMtTz] file[.zip] [list...] [-x xlist...]\n"; static ZCONST char Far ZipInfoUsageLine2[] = "\nmain\ listing-format options: -s short Unix \"ls -l\" format (def.)\n\ -1 filenames ONLY, one per line -m medium Unix \"ls -l\" format\n\ -2 just filenames but allow -h/-t/-z -l long Unix \"ls -l\" format\n\ -v verbose, multi-page format\n"; static ZCONST char Far ZipInfoUsageLine3[] = "miscellaneous options:\n\ -h print header line -t print totals for listed files or for all\n\ -z print zipfile comment -T print file times in sortable decimal format\ \n -C be case-insensitive %s\ -x exclude filenames that follow from listing\n"; #ifdef MORE static ZCONST char Far ZipInfoUsageLine4[] = " -M page output through built-in \"more\"\n"; #else /* !MORE */ static ZCONST char Far ZipInfoUsageLine4[] = ""; #endif /* ?MORE */ #endif /* !NO_ZIPINFO */ #ifdef BETA # ifdef VMSCLI /* BetaVersion[] is also used in vms/cmdline.c: do not make it static */ ZCONST char Far BetaVersion[] = "%s\ THIS IS STILL A BETA VERSION OF UNZIP%s -- DO NOT DISTRIBUTE.\n\n"; # else static ZCONST char Far BetaVersion[] = "%s\ THIS IS STILL A BETA VERSION OF UNZIP%s -- DO NOT DISTRIBUTE.\n\n"; # endif #endif #ifdef SFX # ifdef VMSCLI /* UnzipSFXBanner[] is also used in vms/cmdline.c: do not make it static */ ZCONST char Far UnzipSFXBanner[] = # else static ZCONST char Far UnzipSFXBanner[] = # endif SFX_APP_BANNER "\n"; # ifdef SFX_EXDIR static ZCONST char Far UnzipSFXOpts[] = "Valid options are -tfupcz and -d ; modifiers are -abjnoqCL%sV%s.\n"; # else static ZCONST char Far UnzipSFXOpts[] = "Valid options are -tfupcz; modifiers are -abjnoqCL%sV%s.\n"; # endif #else /* !SFX */ static ZCONST char Far CompileOptions[] = "UnZip special compilation options:\n"; static ZCONST char Far CompileOptFormat[] = " %s\n"; #ifndef _WIN32_WCE /* Win CE does not support environment variables */ static ZCONST char Far EnvOptions[] = "\nUnZip and ZipInfo environment options:\n"; static ZCONST char Far EnvOptFormat[] = "%16s: %.1024s\n"; #endif static ZCONST char Far None[] = "[none]"; # ifdef ACORN_FTYPE_NFS static ZCONST char Far AcornFtypeNFS[] = "ACORN_FTYPE_NFS"; # endif # ifdef ASM_CRC static ZCONST char Far AsmCRC[] = "ASM_CRC"; # endif # ifdef ASM_INFLATECODES static ZCONST char Far AsmInflateCodes[] = "ASM_INFLATECODES"; # endif # ifdef CHECK_VERSIONS static ZCONST char Far Check_Versions[] = "CHECK_VERSIONS"; # endif # ifdef COPYRIGHT_CLEAN static ZCONST char Far Copyright_Clean[] = "COPYRIGHT_CLEAN (PKZIP 0.9x unreducing method not supported)"; # endif # ifdef DEBUG static ZCONST char Far UDebug[] = "DEBUG"; # endif # ifdef DEBUG_TIME static ZCONST char Far DebugTime[] = "DEBUG_TIME"; # endif # ifdef DLL static ZCONST char Far Dll[] = "DLL"; # endif # ifdef DOSWILD static ZCONST char Far DosWild[] = "DOSWILD"; # endif # ifdef LZW_CLEAN static ZCONST char Far LZW_Clean[] = "LZW_CLEAN (PKZIP/Zip 1.x unshrinking method not supported)"; # endif # ifndef MORE static ZCONST char Far No_More[] = "NO_MORE"; # endif # ifdef NO_ZIPINFO static ZCONST char Far No_ZipInfo[] = "NO_ZIPINFO"; # endif # ifdef NTSD_EAS static ZCONST char Far NTSDExtAttrib[] = "NTSD_EAS"; # endif # if defined(WIN32) && defined(NO_W32TIMES_IZFIX) static ZCONST char Far W32NoIZTimeFix[] = "NO_W32TIMES_IZFIX"; # endif # ifdef OLD_THEOS_EXTRA static ZCONST char Far OldTheosExtra[] = "OLD_THEOS_EXTRA (handle also old Theos port extra field)"; # endif # ifdef OS2_EAS static ZCONST char Far OS2ExtAttrib[] = "OS2_EAS"; # endif # ifdef QLZIP static ZCONST char Far SMSExFldOnUnix[] = "QLZIP"; # endif # ifdef REENTRANT static ZCONST char Far Reentrant[] = "REENTRANT"; # endif # ifdef REGARGS static ZCONST char Far RegArgs[] = "REGARGS"; # endif # ifdef RETURN_CODES static ZCONST char Far Return_Codes[] = "RETURN_CODES"; # endif # ifdef SET_DIR_ATTRIB static ZCONST char Far SetDirAttrib[] = "SET_DIR_ATTRIB"; # endif # ifdef SYMLINKS static ZCONST char Far SymLinkSupport[] = "SYMLINKS (symbolic links supported, if RTL and file system permit)"; # endif # ifdef TIMESTAMP static ZCONST char Far TimeStamp[] = "TIMESTAMP"; # endif # ifdef UNIXBACKUP static ZCONST char Far UnixBackup[] = "UNIXBACKUP"; # endif # ifdef USE_EF_UT_TIME static ZCONST char Far Use_EF_UT_time[] = "USE_EF_UT_TIME"; # endif # ifndef LZW_CLEAN static ZCONST char Far Use_Unshrink[] = "USE_UNSHRINK (PKZIP/Zip 1.x unshrinking method supported)"; # endif # ifndef COPYRIGHT_CLEAN static ZCONST char Far Use_Smith_Code[] = "USE_SMITH_CODE (PKZIP 0.9x unreducing method supported)"; # endif # ifdef USE_DEFLATE64 static ZCONST char Far Use_Deflate64[] = "USE_DEFLATE64 (PKZIP 4.x Deflate64(tm) supported)"; # endif # ifdef UNICODE_SUPPORT # ifdef UTF8_MAYBE_NATIVE # ifdef UNICODE_WCHAR /* direct native UTF-8 check AND charset transform via wchar_t */ static ZCONST char Far Use_Unicode[] = "UNICODE_SUPPORT [wide-chars, char coding: %s] (handle UTF-8 paths)"; # else /* direct native UTF-8 check, only */ static ZCONST char Far Use_Unicode[] = "UNICODE_SUPPORT [char coding: %s] (handle UTF-8 paths)"; # endif static ZCONST char Far SysChUTF8[] = "UTF-8"; static ZCONST char Far SysChOther[] = "other"; # else /* !UTF8_MAYBE_NATIVE */ /* charset transform via wchar_t, no native UTF-8 support */ static ZCONST char Far Use_Unicode[] = "UNICODE_SUPPORT [wide-chars] (handle UTF-8 paths)"; # endif /* ?UTF8_MAYBE_NATIVE */ # endif /* UNICODE_SUPPORT */ # ifdef _MBCS static ZCONST char Far Have_MBCS_Support[] = "MBCS-support (multibyte character support, MB_CUR_MAX = %u)"; # endif # ifdef MULT_VOLUME static ZCONST char Far Use_MultiVol[] = "MULT_VOLUME (multi-volume archives supported)"; # endif # ifdef LARGE_FILE_SUPPORT static ZCONST char Far Use_LFS[] = "LARGE_FILE_SUPPORT (large files over 2 GiB supported)"; # endif # ifdef ZIP64_SUPPORT static ZCONST char Far Use_Zip64[] = "ZIP64_SUPPORT (archives using Zip64 for large files supported)"; # endif # if (defined(__DJGPP__) && (__DJGPP__ >= 2)) # ifdef USE_DJGPP_ENV static ZCONST char Far Use_DJGPP_Env[] = "USE_DJGPP_ENV"; # endif # ifdef USE_DJGPP_GLOB static ZCONST char Far Use_DJGPP_Glob[] = "USE_DJGPP_GLOB"; # endif # endif /* __DJGPP__ && (__DJGPP__ >= 2) */ # ifdef USE_VFAT static ZCONST char Far Use_VFAT_support[] = "USE_VFAT"; # endif # ifdef USE_ZLIB static ZCONST char Far UseZlib[] = "USE_ZLIB (compiled with version %s; using version %s)"; # endif # ifdef USE_BZIP2 static ZCONST char Far UseBZip2[] = "USE_BZIP2 (PKZIP 4.6+, using bzip2 lib version %s)"; # endif # ifdef VMS_TEXT_CONV static ZCONST char Far VmsTextConv[] = "VMS_TEXT_CONV"; # endif # ifdef VMSCLI static ZCONST char Far VmsCLI[] = "VMSCLI"; # endif # ifdef VMSWILD static ZCONST char Far VmsWild[] = "VMSWILD"; # endif # ifdef WILD_STOP_AT_DIR static ZCONST char Far WildStopAtDir[] = "WILD_STOP_AT_DIR"; # endif # if CRYPT # ifdef PASSWD_FROM_STDIN static ZCONST char Far PasswdStdin[] = "PASSWD_FROM_STDIN"; # endif static ZCONST char Far Decryption[] = " [decryption, version %d.%d%s of %s]\n"; static ZCONST char Far CryptDate[] = CR_VERSION_DATE; # endif # ifndef __RSXNT__ # ifdef __EMX__ static ZCONST char Far EnvEMX[] = "EMX"; static ZCONST char Far EnvEMXOPT[] = "EMXOPT"; # endif # if (defined(__GO32__) && (!defined(__DJGPP__) || (__DJGPP__ < 2))) static ZCONST char Far EnvGO32[] = "GO32"; static ZCONST char Far EnvGO32TMP[] = "GO32TMP"; # endif # endif /* !__RSXNT__ */ #ifdef VMS /* UnzipUsageLine1[] is also used in vms/cmdline.c: do not make it static */ ZCONST char Far UnzipUsageLine1[] = "\ UnZip %d.%d%d%s of %s, by Info-ZIP. For more details see: unzip -v.\n\n"; # ifdef COPYRIGHT_CLEAN static ZCONST char Far UnzipUsageLine1v[] = "\ UnZip %d.%d%d%s of %s, by Info-ZIP. Maintained by C. Spieler. Send\n\ bug reports using http://www.info-zip.org/zip-bug.html; see README for details.\ \n\n"; # else static ZCONST char Far UnzipUsageLine1v[] = "\ UnZip %d.%d%d%s of %s, by Info-ZIP. UnReduce (c) 1989 by S. H. Smith.\n\ Send bug reports using //www.info-zip.org/zip-bug.html; see README for details.\ \n\n"; # endif /* ?COPYRIGHT_CLEAN */ #else /* !VMS */ # ifdef COPYRIGHT_CLEAN static ZCONST char Far UnzipUsageLine1[] = "\ UnZip %d.%d%d%s of %s, by Info-ZIP. Maintained by C. Spieler. Send\n\ bug reports using http://www.info-zip.org/zip-bug.html; see README for details.\ \n\n"; # else static ZCONST char Far UnzipUsageLine1[] = "\ UnZip %d.%d%d%s of %s, by Info-ZIP. UnReduce (c) 1989 by S. H. Smith.\n\ Send bug reports using //www.info-zip.org/zip-bug.html; see README for details.\ \n\n"; # endif /* ?COPYRIGHT_CLEAN */ # define UnzipUsageLine1v UnzipUsageLine1 #endif /* ?VMS */ static ZCONST char Far UnzipUsageLine2v[] = "\ Latest sources and executables are at ftp://ftp.info-zip.org/pub/infozip/ ;\ \nsee ftp://ftp.info-zip.org/pub/infozip/UnZip.html for other sites.\ \n\n"; #ifdef MACOS static ZCONST char Far UnzipUsageLine2[] = "\ Usage: unzip %s[-opts[modifiers]] file[.zip] [list] [-d exdir]\n \ Default action is to extract files in list, to exdir;\n\ file[.zip] may be a wildcard. %s\n"; #else /* !MACOS */ #ifdef VM_CMS static ZCONST char Far UnzipUsageLine2[] = "\ Usage: unzip %s[-opts[modifiers]] file[.zip] [list] [-x xlist] [-d fm]\n \ Default action is to extract files in list, except those in xlist, to disk fm;\ \n file[.zip] may be a wildcard. %s\n"; #else /* !VM_CMS */ static ZCONST char Far UnzipUsageLine2[] = "\ Usage: unzip %s[-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir]\n \ Default action is to extract files in list, except those in xlist, to exdir;\n\ file[.zip] may be a wildcard. %s\n"; #endif /* ?VM_CMS */ #endif /* ?MACOS */ #ifdef NO_ZIPINFO # define ZIPINFO_MODE_OPTION "" static ZCONST char Far ZipInfoMode[] = "(ZipInfo mode is disabled in this version.)"; #else # define ZIPINFO_MODE_OPTION "[-Z] " static ZCONST char Far ZipInfoMode[] = "-Z => ZipInfo mode (\"unzip -Z\" for usage)."; #endif /* ?NO_ZIPINFO */ #ifdef VMS static ZCONST char Far VMSusageLine2b[] = "\ => define foreign command symbol in LOGIN.COM: $ unzip :== $dev:[dir]unzip.exe\ \n"; #endif #ifdef MACOS static ZCONST char Far UnzipUsageLine3[] = "\n\ -d extract files into exdir -l list files (short format)\n\ -f freshen existing files, create none -t test compressed archive data\n\ -u update files, create if necessary -z display archive comment only\n\ -v list verbosely/show version info %s\n"; #else /* !MACOS */ #ifdef VM_CMS static ZCONST char Far UnzipUsageLine3[] = "\n\ -p extract files to pipe, no messages -l list files (short format)\n\ -f freshen existing files, create none -t test compressed archive data\n\ -u update files, create if necessary -z display archive comment only\n\ -v list verbosely/show version info %s\n\ -x exclude files that follow (in xlist) -d extract files onto disk fm\n"; #else /* !VM_CMS */ static ZCONST char Far UnzipUsageLine3[] = "\n\ -p extract files to pipe, no messages -l list files (short format)\n\ -f freshen existing files, create none -t test compressed archive data\n\ -u update files, create if necessary -z display archive comment only\n\ -v list verbosely/show version info %s\n\ -x exclude files that follow (in xlist) -d extract files into exdir\n"; #endif /* ?VM_CMS */ #endif /* ?MACOS */ /* There is not enough space on a standard 80x25 Windows console screen for * the additional line advertising the UTF-8 debugging options. This may * eventually also be the case for other ports. Probably, the -U option need * not be shown on the introductory screen at all. [Chr. Spieler, 2008-02-09] * * Likely, other advanced options should be moved to an extended help page and * the option to list that page put here. [E. Gordon, 2008-3-16] */ #if (defined(UNICODE_SUPPORT) && !defined(WIN32)) #ifdef VMS static ZCONST char Far UnzipUsageLine4[] = "\ modifiers:\n\ -n never overwrite or make a new version of an existing file\n\ -o always make a new version (-oo: overwrite original) of an existing file\n\ -q quiet mode (-qq => quieter) -a auto-convert any text files\n\ -j junk paths (do not make directories) -aa treat ALL files as text\n\ -U use escapes for all non-ASCII Unicode -UU ignore any Unicode fields\n\ -C match filenames case-insensitively -L make (some) names \ lowercase\n %-42s -V retain VMS version numbers\n%s"; #else /* !VMS */ static ZCONST char Far UnzipUsageLine4[] = "\ modifiers:\n\ -n never overwrite existing files -q quiet mode (-qq => quieter)\n\ -o overwrite files WITHOUT prompting -a auto-convert any text files\n\ -j junk paths (do not make directories) -aa treat ALL files as text\n\ -U use escapes for all non-ASCII Unicode -UU ignore any Unicode fields\n\ -C match filenames case-insensitively -L make (some) names \ lowercase\n %-42s -V retain VMS version numbers\n%s"; #endif /* ?VMS */ #else /* !UNICODE_SUPPORT */ #ifdef VMS static ZCONST char Far UnzipUsageLine4[] = "\ modifiers:\n\ -n never overwrite or make a new version of an existing file\n\ -o always make a new version (-oo: overwrite original) of an existing file\n\ -q quiet mode (-qq => quieter) -a auto-convert any text files\n\ -j junk paths (do not make directories) -aa treat ALL files as text\n\ -C match filenames case-insensitively -L make (some) names \ lowercase\n %-42s -V retain VMS version numbers\n%s"; #else /* !VMS */ static ZCONST char Far UnzipUsageLine4[] = "\ modifiers:\n\ -n never overwrite existing files -q quiet mode (-qq => quieter)\n\ -o overwrite files WITHOUT prompting -a auto-convert any text files\n\ -j junk paths (do not make directories) -aa treat ALL files as text\n\ -C match filenames case-insensitively -L make (some) names \ lowercase\n %-42s -V retain VMS version numbers\n%s"; #endif /* ?VMS */ #endif /* ?UNICODE_SUPPORT */ static ZCONST char Far UnzipUsageLine5[] = "\ See \"unzip -hh\" or unzip.txt for more help. Examples:\n\ unzip data1 -x joe => extract all files except joe from zipfile data1.zip\n\ %s\ unzip -fo foo %-6s => quietly replace existing %s if archive file newer\n"; #endif /* ?SFX */ /*****************************/ /* main() / UzpMain() stub */ /*****************************/ int MAIN(argc, argv) /* return PK-type error code (except under VMS) */ int argc; char *argv[]; { int r; CONSTRUCTGLOBALS(); r = unzip(__G__ argc, argv); DESTROYGLOBALS(); RETURN(r); } /*******************************/ /* Primary UnZip entry point */ /*******************************/ int unzip(__G__ argc, argv) __GDEF int argc; char *argv[]; { #ifndef NO_ZIPINFO char *p; #endif #if (defined(DOS_FLX_H68_NLM_OS2_W32) || !defined(SFX)) int i; #endif int retcode, error=FALSE; #ifndef NO_EXCEPT_SIGNALS #ifdef REENTRANT savsigs_info *oldsighandlers = NULL; # define SET_SIGHANDLER(sigtype, newsighandler) \ if ((retcode = setsignalhandler(__G__ &oldsighandlers, (sigtype), \ (newsighandler))) > PK_WARN) \ goto cleanup_and_exit #else # define SET_SIGHANDLER(sigtype, newsighandler) \ signal((sigtype), (newsighandler)) #endif #endif /* NO_EXCEPT_SIGNALS */ /* initialize international char support to the current environment */ SETLOCALE(LC_CTYPE, "C"); #ifdef UNICODE_SUPPORT /* see if can use UTF-8 Unicode locale */ # ifdef UTF8_MAYBE_NATIVE { char *codeset; # if !(defined(NO_NL_LANGINFO) || defined(NO_LANGINFO_H)) /* get the codeset (character set encoding) currently used */ # include codeset = nl_langinfo(CODESET); # else /* NO_NL_LANGINFO || NO_LANGINFO_H */ /* query the current locale setting for character classification */ codeset = setlocale(LC_CTYPE, NULL); if (codeset != NULL) { /* extract the codeset portion of the locale name */ codeset = strchr(codeset, '.'); if (codeset != NULL) ++codeset; } # endif /* ?(NO_NL_LANGINFO || NO_LANGINFO_H) */ /* is the current codeset UTF-8 ? */ if ((codeset != NULL) && (strcmp(codeset, "UTF-8") == 0)) { /* successfully found UTF-8 char coding */ G.native_is_utf8 = TRUE; } else { /* Current codeset is not UTF-8 or cannot be determined. */ G.native_is_utf8 = FALSE; } /* Note: At least for UnZip, trying to change the process codeset to * UTF-8 does not work. For the example Linux setup of the * UnZip maintainer, a successful switch to "en-US.UTF-8" * resulted in garbage display of all non-basic ASCII characters. */ } # endif /* UTF8_MAYBE_NATIVE */ /* initialize Unicode */ G.unicode_escape_all = 0; G.unicode_mismatch = 0; G.unipath_version = 0; G.unipath_checksum = 0; G.unipath_filename = NULL; #endif /* UNICODE_SUPPORT */ #if (defined(__IBMC__) && defined(__DEBUG_ALLOC__)) extern void DebugMalloc(void); atexit(DebugMalloc); #endif #ifdef MALLOC_WORK /* The following (rather complex) expression determines the allocation size of the decompression work area. It simulates what the combined "union" and "struct" declaration of the "static" work area reservation achieves automatically at compile time. Any decent compiler should evaluate this expression completely at compile time and provide constants to the zcalloc() call. (For better readability, some subexpressions are encapsulated in temporarly defined macros.) */ # define UZ_SLIDE_CHUNK (sizeof(shrint)+sizeof(uch)+sizeof(uch)) # define UZ_NUMOF_CHUNKS \ (unsigned)(((WSIZE+UZ_SLIDE_CHUNK-1)/UZ_SLIDE_CHUNK > HSIZE) ? \ (WSIZE+UZ_SLIDE_CHUNK-1)/UZ_SLIDE_CHUNK : HSIZE) G.area.Slide = (uch *)zcalloc(UZ_NUMOF_CHUNKS, UZ_SLIDE_CHUNK); # undef UZ_SLIDE_CHUNK # undef UZ_NUMOF_CHUNKS G.area.shrink.Parent = (shrint *)G.area.Slide; G.area.shrink.value = G.area.Slide + (sizeof(shrint)*(HSIZE)); G.area.shrink.Stack = G.area.Slide + (sizeof(shrint) + sizeof(uch))*(HSIZE); #endif /*--------------------------------------------------------------------------- Set signal handler for restoring echo, warn of zipfile corruption, etc. ---------------------------------------------------------------------------*/ #ifndef NO_EXCEPT_SIGNALS #ifdef SIGINT SET_SIGHANDLER(SIGINT, handler); #endif #ifdef SIGTERM /* some systems really have no SIGTERM */ SET_SIGHANDLER(SIGTERM, handler); #endif #if defined(SIGABRT) && !(defined(AMIGA) && defined(__SASC)) SET_SIGHANDLER(SIGABRT, handler); #endif #ifdef SIGBREAK SET_SIGHANDLER(SIGBREAK, handler); #endif #ifdef SIGBUS SET_SIGHANDLER(SIGBUS, handler); #endif #ifdef SIGILL SET_SIGHANDLER(SIGILL, handler); #endif #ifdef SIGSEGV SET_SIGHANDLER(SIGSEGV, handler); #endif #endif /* NO_EXCEPT_SIGNALS */ #if (defined(WIN32) && defined(__RSXNT__)) for (i = 0 ; i < argc; i++) { _ISO_INTERN(argv[i]); } #endif /*--------------------------------------------------------------------------- Macintosh initialization code. ---------------------------------------------------------------------------*/ #ifdef MACOS { int a; for (a = 0; a < 4; ++a) G.rghCursor[a] = GetCursor(a+128); G.giCursor = 0; } #endif /*--------------------------------------------------------------------------- NetWare initialization code. ---------------------------------------------------------------------------*/ #ifdef NLM InitUnZipConsole(); #endif /*--------------------------------------------------------------------------- Acorn RISC OS initialization code. ---------------------------------------------------------------------------*/ #ifdef RISCOS set_prefix(); #endif /*--------------------------------------------------------------------------- Theos initialization code. ---------------------------------------------------------------------------*/ #ifdef THEOS /* The easiest way found to force creation of libraries when selected * members are to be unzipped. Explicitly add libraries names to the * arguments list before the first member of the library. */ if (! _setargv(&argc, &argv)) { Info(slide, 0x401, ((char *)slide, "cannot process argv\n")); retcode = PK_MEM; goto cleanup_and_exit; } #endif /*--------------------------------------------------------------------------- Sanity checks. Commentary by Otis B. Driftwood and Fiorello: D: It's all right. That's in every contract. That's what they call a sanity clause. F: Ha-ha-ha-ha-ha. You can't fool me. There ain't no Sanity Claus. ---------------------------------------------------------------------------*/ #ifdef DEBUG # ifdef LARGE_FILE_SUPPORT /* test if we can support large files - 10/6/04 EG */ if (sizeof(zoff_t) < 8) { Info(slide, 0x401, ((char *)slide, "LARGE_FILE_SUPPORT set but not supported\n")); retcode = PK_BADERR; goto cleanup_and_exit; } /* test if we can show 64-bit values */ { zoff_t z = ~(zoff_t)0; /* z should be all 1s now */ char *sz; sz = FmZofft(z, FZOFFT_HEX_DOT_WID, "X"); if ((sz[0] != 'F') || (strlen(sz) != 16)) { z = 0; } /* shift z so only MSB is set */ z <<= 63; sz = FmZofft(z, FZOFFT_HEX_DOT_WID, "X"); if ((sz[0] != '8') || (strlen(sz) != 16)) { Info(slide, 0x401, ((char *)slide, "Can't show 64-bit values correctly\n")); retcode = PK_BADERR; goto cleanup_and_exit; } } # endif /* LARGE_FILE_SUPPORT */ /* 2004-11-30 SMS. Test the NEXTBYTE macro for proper operation. */ { int test_char; static uch test_buf[2] = { 'a', 'b' }; G.inptr = test_buf; G.incnt = 1; test_char = NEXTBYTE; /* Should get 'a'. */ if (test_char == 'a') { test_char = NEXTBYTE; /* Should get EOF, not 'b'. */ } if (test_char != EOF) { Info(slide, 0x401, ((char *)slide, "NEXTBYTE macro failed. Try compiling with ALT_NEXTBYTE defined?")); retcode = PK_BADERR; goto cleanup_and_exit; } } #endif /* DEBUG */ /*--------------------------------------------------------------------------- First figure out if we're running in UnZip mode or ZipInfo mode, and put the appropriate environment-variable options into the queue. Then rip through any command-line options lurking about... ---------------------------------------------------------------------------*/ #ifdef SFX G.argv0 = argv[0]; #if (defined(OS2) || defined(WIN32)) G.zipfn = GetLoadPath(__G);/* non-MSC NT puts path into G.filename[] */ #else G.zipfn = G.argv0; #endif #ifdef VMSCLI { ulg status = vms_unzip_cmdline(&argc, &argv); if (!(status & 1)) { retcode = (int)status; goto cleanup_and_exit; } } #endif /* VMSCLI */ uO.zipinfo_mode = FALSE; error = uz_opts(__G__ &argc, &argv); /* UnZipSFX call only */ #else /* !SFX */ #ifdef RISCOS /* get the extensions to swap from environment */ getRISCOSexts(ENV_UNZIPEXTS); #endif #ifdef MSDOS /* extract MKS extended argument list from environment (before envargs!) */ mksargs(&argc, &argv); #endif #ifdef VMSCLI { ulg status = vms_unzip_cmdline(&argc, &argv); if (!(status & 1)) { retcode = (int)status; goto cleanup_and_exit; } } #endif /* VMSCLI */ G.noargs = (argc == 1); /* no options, no zipfile, no anything */ #ifndef NO_ZIPINFO for (p = argv[0] + strlen(argv[0]); p >= argv[0]; --p) { if (*p == DIR_END #ifdef DIR_END2 || *p == DIR_END2 #endif ) break; } ++p; #ifdef THEOS if (strncmp(p, "ZIPINFO.",8) == 0 || strstr(p, ".ZIPINFO:") != NULL || strncmp(p, "II.",3) == 0 || strstr(p, ".II:") != NULL || #else if (STRNICMP(p, LoadFarStringSmall(Zipnfo), 7) == 0 || STRNICMP(p, "ii", 2) == 0 || #endif (argc > 1 && strncmp(argv[1], "-Z", 2) == 0)) { uO.zipinfo_mode = TRUE; #ifndef _WIN32_WCE /* Win CE does not support environment variables */ if ((error = envargs(&argc, &argv, LoadFarStringSmall(EnvZipInfo), LoadFarStringSmall2(EnvZipInfo2))) != PK_OK) perror(LoadFarString(NoMemEnvArguments)); #endif } else #endif /* !NO_ZIPINFO */ { uO.zipinfo_mode = FALSE; #ifndef _WIN32_WCE /* Win CE does not support environment variables */ if ((error = envargs(&argc, &argv, LoadFarStringSmall(EnvUnZip), LoadFarStringSmall2(EnvUnZip2))) != PK_OK) perror(LoadFarString(NoMemEnvArguments)); #endif } if (!error) { /* Check the length of all passed command line parameters. * Command arguments might get sent through the Info() message * system, which uses the sliding window area as string buffer. * As arguments may additionally get fed through one of the FnFilter * macros, we require all command line arguments to be shorter than * WSIZE/4 (and ca. 2 standard line widths for fixed message text). */ for (i = 1 ; i < argc; i++) { if (strlen(argv[i]) > ((WSIZE>>2) - 160)) { Info(slide, 0x401, ((char *)slide, LoadFarString(CmdLineParamTooLong), i)); retcode = PK_PARAM; goto cleanup_and_exit; } } #ifndef NO_ZIPINFO if (uO.zipinfo_mode) error = zi_opts(__G__ &argc, &argv); else #endif /* !NO_ZIPINFO */ error = uz_opts(__G__ &argc, &argv); } #endif /* ?SFX */ if ((argc < 0) || error) { retcode = error; goto cleanup_and_exit; } /*--------------------------------------------------------------------------- Now get the zipfile name from the command line and then process any re- maining options and file specifications. ---------------------------------------------------------------------------*/ #ifdef DOS_FLX_H68_NLM_OS2_W32 /* convert MSDOS-style 'backward slash' directory separators to Unix-style * 'forward slashes' for user's convenience (include zipfile name itself) */ #ifdef SFX for (G.pfnames = argv, i = argc; i > 0; --i) { #else /* argc does not include the zipfile specification */ for (G.pfnames = argv, i = argc+1; i > 0; --i) { #endif #ifdef __human68k__ extern char *_toslash(char *); _toslash(*G.pfnames); #else /* !__human68k__ */ char *q = *G.pfnames; while (*q != '\0') { if (*q == '\\') *q = '/'; INCSTR(q); } #endif /* ?__human68k__ */ ++G.pfnames; } #endif /* DOS_FLX_H68_NLM_OS2_W32 */ #ifndef SFX G.wildzipfn = *argv++; #endif #if (defined(SFX) && !defined(SFX_EXDIR)) /* only check for -x */ G.filespecs = argc; G.xfilespecs = 0; if (argc > 0) { char **pp = argv-1; G.pfnames = argv; while (*++pp) if (strcmp(*pp, "-x") == 0) { if (pp > argv) { *pp = 0; /* terminate G.pfnames */ G.filespecs = pp - G.pfnames; } else { G.pfnames = (char **)fnames; /* defaults */ G.filespecs = 0; } G.pxnames = pp + 1; /* excluded-names ptr: _after_ -x */ G.xfilespecs = argc - G.filespecs - 1; break; /* skip rest of args */ } G.process_all_files = FALSE; } else G.process_all_files = TRUE; /* for speed */ #else /* !SFX || SFX_EXDIR */ /* check for -x or -d */ G.filespecs = argc; G.xfilespecs = 0; if (argc > 0) { int in_files=FALSE, in_xfiles=FALSE; char **pp = argv-1; G.process_all_files = FALSE; G.pfnames = argv; while (*++pp) { Trace((stderr, "pp - argv = %d\n", pp-argv)); #ifdef CMS_MVS if (!uO.exdir && STRNICMP(*pp, "-d", 2) == 0) { #else if (!uO.exdir && strncmp(*pp, "-d", 2) == 0) { #endif int firstarg = (pp == argv); uO.exdir = (*pp) + 2; if (in_files) { /* ... zipfile ... -d exdir ... */ *pp = (char *)NULL; /* terminate G.pfnames */ G.filespecs = pp - G.pfnames; in_files = FALSE; } else if (in_xfiles) { *pp = (char *)NULL; /* terminate G.pxnames */ G.xfilespecs = pp - G.pxnames; /* "... -x xlist -d exdir": nothing left */ } /* first check for "-dexdir", then for "-d exdir" */ if (*uO.exdir == '\0') { if (*++pp) uO.exdir = *pp; else { Info(slide, 0x401, ((char *)slide, LoadFarString(MustGiveExdir))); /* don't extract here by accident */ retcode = PK_PARAM; goto cleanup_and_exit; } } if (firstarg) { /* ... zipfile -d exdir ... */ if (pp[1]) { G.pfnames = pp + 1; /* argv+2 */ G.filespecs = argc - (G.pfnames-argv); /* for now... */ } else { G.process_all_files = TRUE; G.pfnames = (char **)fnames; /* GRR: necessary? */ G.filespecs = 0; /* GRR: necessary? */ break; } } } else if (!in_xfiles) { if (strcmp(*pp, "-x") == 0) { in_xfiles = TRUE; if (pp == G.pfnames) { G.pfnames = (char **)fnames; /* defaults */ G.filespecs = 0; } else if (in_files) { *pp = 0; /* terminate G.pfnames */ G.filespecs = pp - G.pfnames; /* adjust count */ in_files = FALSE; } G.pxnames = pp + 1; /* excluded-names ptr starts after -x */ G.xfilespecs = argc - (G.pxnames-argv); /* anything left */ } else in_files = TRUE; } } } else G.process_all_files = TRUE; /* for speed */ if (uO.exdir != (char *)NULL && !G.extract_flag) /* -d ignored */ Info(slide, 0x401, ((char *)slide, LoadFarString(NotExtracting))); #endif /* ?(SFX && !SFX_EXDIR) */ #ifdef UNICODE_SUPPORT /* set Unicode-escape-all if option -U used */ if (uO.U_flag == 1) # ifdef UNICODE_WCHAR G.unicode_escape_all = TRUE; # else Info(slide, 0x401, ((char *)slide, LoadFarString(UTF8EscapeUnSupp))); # endif #endif /*--------------------------------------------------------------------------- Okey dokey, we have everything we need to get started. Let's roll. ---------------------------------------------------------------------------*/ retcode = process_zipfiles(__G); cleanup_and_exit: #if (defined(REENTRANT) && !defined(NO_EXCEPT_SIGNALS)) /* restore all signal handlers back to their state at function entry */ while (oldsighandlers != NULL) { savsigs_info *thissigsav = oldsighandlers; signal(thissigsav->sigtype, thissigsav->sighandler); oldsighandlers = thissigsav->previous; free(thissigsav); } #endif #if (defined(MALLOC_WORK) && !defined(REENTRANT)) if (G.area.Slide != (uch *)NULL) { free(G.area.Slide); G.area.Slide = (uch *)NULL; } #endif #if (defined(MSDOS) && !defined(SFX) && !defined(WINDLL)) if (retcode != PK_OK) check_for_windows("UnZip"); #endif return(retcode); } /* end main()/unzip() */ #if (defined(REENTRANT) && !defined(NO_EXCEPT_SIGNALS)) /*******************************/ /* Function setsignalhandler() */ /*******************************/ static int setsignalhandler(__G__ p_savedhandler_chain, signal_type, newhandler) __GDEF savsigs_info **p_savedhandler_chain; int signal_type; void (*newhandler)(int); { savsigs_info *savsig; savsig = malloc(sizeof(savsigs_info)); if (savsig == NULL) { /* error message and break */ Info(slide, 0x401, ((char *)slide, LoadFarString(CantSaveSigHandler))); return PK_MEM; } savsig->sigtype = signal_type; savsig->sighandler = signal(SIGINT, newhandler); if (savsig->sighandler == SIG_ERR) { free(savsig); } else { savsig->previous = *p_savedhandler_chain; *p_savedhandler_chain = savsig; } return PK_OK; } /* end function setsignalhandler() */ #endif /* REENTRANT && !NO_EXCEPT_SIGNALS */ /**********************/ /* Function uz_opts() */ /**********************/ int uz_opts(__G__ pargc, pargv) __GDEF int *pargc; char ***pargv; { char **argv, *s; int argc, c, error=FALSE, negative=0, showhelp=0; argc = *pargc; argv = *pargv; uO.exdir = sfx_get_tmp_path(0); uO.overwrite_all = 1; sfx_app_set_args(argc-1, argv+1); while (++argv, (--argc > 0 && *argv != NULL /*&& **argv == '-'*/)) { #if 0 s = *argv + 1; while ((c = *s++) != 0) { /* "!= 0": prevent Turbo C warning */ #ifdef CMS_MVS switch (tolower(c)) #else switch (c) #endif { case ('-'): ++negative; break; #ifdef RISCOS case ('/'): if (negative) { /* negative not allowed with -/ swap */ Info(slide, 0x401, ((char *)slide, "error: must give extensions list")); return(PK_PARAM); /* don't extract here by accident */ } exts2swap = s; /* override Unzip$Exts */ s += strlen(s); break; #endif case ('a'): if (negative) { uO.aflag = MAX(uO.aflag-negative,0); negative = 0; } else ++uO.aflag; break; #if (defined(DLL) && defined(API_DOC)) case ('A'): /* extended help for API */ APIhelp(__G__ argc, argv); *pargc = -1; /* signal to exit successfully */ return 0; #endif case ('b'): if (negative) { #if (defined(TANDEM) || defined(VMS)) uO.bflag = MAX(uO.bflag-negative,0); #endif negative = 0; /* do nothing: "-b" is default */ } else { #ifdef VMS if (uO.aflag == 0) ++uO.bflag; #endif #ifdef TANDEM ++uO.bflag; #endif uO.aflag = 0; } break; #ifdef UNIXBACKUP case ('B'): /* -B: back up existing files */ if (negative) uO.B_flag = FALSE, negative = 0; else uO.B_flag = TRUE; break; #endif case ('c'): if (negative) { uO.cflag = FALSE, negative = 0; #ifdef NATIVE uO.aflag = 0; #endif } else { uO.cflag = TRUE; #ifdef NATIVE uO.aflag = 2; /* so you can read it on the screen */ #endif #ifdef DLL if (G.redirect_text) G.redirect_data = 2; #endif } break; #ifndef CMS_MVS case ('C'): /* -C: match filenames case-insensitively */ if (negative) uO.C_flag = FALSE, negative = 0; else uO.C_flag = TRUE; break; #endif /* !CMS_MVS */ #if (!defined(SFX) || defined(SFX_EXDIR)) case ('d'): if (negative) { /* negative not allowed with -d exdir */ Info(slide, 0x401, ((char *)slide, LoadFarString(MustGiveExdir))); return(PK_PARAM); /* don't extract here by accident */ } if (uO.exdir != (char *)NULL) { Info(slide, 0x401, ((char *)slide, LoadFarString(OnlyOneExdir))); return(PK_PARAM); /* GRR: stupid restriction? */ } else { /* first check for "-dexdir", then for "-d exdir" */ uO.exdir = s; if (*uO.exdir == '\0') { if (argc > 1) { --argc; uO.exdir = *++argv; if (*uO.exdir == '-') { Info(slide, 0x401, ((char *)slide, LoadFarString(MustGiveExdir))); return(PK_PARAM); } /* else uO.exdir points at extraction dir */ } else { Info(slide, 0x401, ((char *)slide, LoadFarString(MustGiveExdir))); return(PK_PARAM); } } /* uO.exdir now points at extraction dir (-dexdir or * -d exdir); point s at end of exdir to avoid mis- * interpretation of exdir characters as more options */ if (*s != 0) while (*++s != 0) ; } break; #endif /* !SFX || SFX_EXDIR */ #if (!defined(NO_TIMESTAMPS)) case ('D'): /* -D: Skip restoring dir (or any) timestamp. */ if (negative) { uO.D_flag = MAX(uO.D_flag-negative,0); negative = 0; } else uO.D_flag++; break; #endif /* (!NO_TIMESTAMPS) */ case ('e'): /* just ignore -e, -x options (extract) */ break; #ifdef MACOS case ('E'): /* -E [MacOS] display Mac e.f. when restoring */ if( negative ) { uO.E_flag = FALSE, negative = 0; } else { uO.E_flag = TRUE; } break; #endif /* MACOS */ case ('f'): /* "freshen" (extract only newer files) */ if (negative) uO.fflag = uO.uflag = FALSE, negative = 0; else uO.fflag = uO.uflag = TRUE; break; #if (defined(RISCOS) || defined(ACORN_FTYPE_NFS)) case ('F'): /* Acorn filetype & NFS extension handling */ if (negative) uO.acorn_nfs_ext = FALSE, negative = 0; else uO.acorn_nfs_ext = TRUE; break; #endif /* RISCOS || ACORN_FTYPE_NFS */ case ('h'): /* just print help message and quit */ if (showhelp == 0) { #ifndef SFX if (*s == 'h') showhelp = 2; else #endif /* !SFX */ { showhelp = 1; } } break; #ifdef MACOS case ('i'): /* -i [MacOS] ignore filenames stored in Mac ef */ if( negative ) { uO.i_flag = FALSE, negative = 0; } else { uO.i_flag = TRUE; } break; #endif /* MACOS */ case ('j'): /* junk pathnames/directory structure */ if (negative) uO.jflag = FALSE, negative = 0; else uO.jflag = TRUE; break; #if (defined(ATH_BEO) || defined(MACOS)) case ('J'): /* Junk AtheOS, BeOS or MacOS file attributes */ if( negative ) { uO.J_flag = FALSE, negative = 0; } else { uO.J_flag = TRUE; } break; #endif /* ATH_BEO || MACOS */ #ifdef ATH_BEO_UNX case ('K'): if (negative) { uO.K_flag = FALSE, negative = 0; } else { uO.K_flag = TRUE; } break; #endif /* ATH_BEO_UNX */ #ifndef SFX case ('l'): if (negative) { uO.vflag = MAX(uO.vflag-negative,0); negative = 0; } else ++uO.vflag; break; #endif /* !SFX */ #ifndef CMS_MVS case ('L'): /* convert (some) filenames to lowercase */ if (negative) { uO.L_flag = MAX(uO.L_flag-negative,0); negative = 0; } else ++uO.L_flag; break; #endif /* !CMS_MVS */ #ifdef MORE #ifdef CMS_MVS case ('m'): #endif case ('M'): /* send all screen output through "more" fn. */ /* GRR: eventually check for numerical argument => height */ if (negative) G.M_flag = FALSE, negative = 0; else G.M_flag = TRUE; break; #endif /* MORE */ case ('n'): /* don't overwrite any files */ if (negative) uO.overwrite_none = FALSE, negative = 0; else uO.overwrite_none = TRUE; break; #ifdef AMIGA case ('N'): /* restore comments as filenotes */ if (negative) uO.N_flag = FALSE, negative = 0; else uO.N_flag = TRUE; break; #endif /* AMIGA */ case ('o'): /* OK to overwrite files without prompting */ if (negative) { uO.overwrite_all = MAX(uO.overwrite_all-negative,0); negative = 0; } else ++uO.overwrite_all; break; case ('p'): /* pipes: extract to stdout, no messages */ if (negative) { uO.cflag = FALSE; uO.qflag = MAX(uO.qflag-999,0); negative = 0; } else { uO.cflag = TRUE; uO.qflag += 999; } break; #if CRYPT /* GRR: yes, this is highly insecure, but dozens of people * have pestered us for this, so here we go... */ case ('P'): if (negative) { /* negative not allowed with -P passwd */ Info(slide, 0x401, ((char *)slide, LoadFarString(MustGivePasswd))); return(PK_PARAM); /* don't extract here by accident */ } if (uO.pwdarg != (char *)NULL) { /* GRR: eventually support multiple passwords? Info(slide, 0x401, ((char *)slide, LoadFarString(OnlyOnePasswd))); return(PK_PARAM); */ } else { /* first check for "-Ppasswd", then for "-P passwd" */ uO.pwdarg = s; if (*uO.pwdarg == '\0') { if (argc > 1) { --argc; uO.pwdarg = *++argv; if (*uO.pwdarg == '-') { Info(slide, 0x401, ((char *)slide, LoadFarString(MustGivePasswd))); return(PK_PARAM); } /* else pwdarg points at decryption password */ } else { Info(slide, 0x401, ((char *)slide, LoadFarString(MustGivePasswd))); return(PK_PARAM); } } /* pwdarg now points at decryption password (-Ppasswd or * -P passwd); point s at end of passwd to avoid mis- * interpretation of passwd characters as more options */ if (*s != 0) while (*++s != 0) ; } break; #endif /* CRYPT */ case ('q'): /* quiet: fewer comments/messages */ if (negative) { uO.qflag = MAX(uO.qflag-negative,0); negative = 0; } else ++uO.qflag; break; #ifdef QDOS case ('Q'): /* QDOS flags */ qlflag ^= strtol(s, &s, 10); break; /* we XOR this as we can config qlflags */ #endif #ifdef TANDEM case ('r'): /* remove file extensions */ if (negative) uO.rflag = FALSE, negative = 0; else uO.rflag = TRUE; break; #endif /* TANDEM */ #ifdef DOS_FLX_NLM_OS2_W32 case ('s'): /* spaces in filenames: allow by default */ if (negative) uO.sflag = FALSE, negative = 0; else uO.sflag = TRUE; break; #endif /* DOS_FLX_NLM_OS2_W32 */ #ifdef VMS /* VMS: extract "text" files in Stream_LF format (-a[a]) */ case ('S'): if (negative) uO.S_flag = FALSE, negative = 0; else uO.S_flag = TRUE; break; #endif /* VMS */ case ('t'): if (negative) uO.tflag = FALSE, negative = 0; else uO.tflag = TRUE; break; #ifdef TIMESTAMP case ('T'): if (negative) uO.T_flag = FALSE, negative = 0; else uO.T_flag = TRUE; break; #endif case ('u'): /* update (extract only new and newer files) */ if (negative) uO.uflag = FALSE, negative = 0; else uO.uflag = TRUE; break; #ifdef UNICODE_SUPPORT case ('U'): /* escape UTF-8, or disable UTF-8 support */ if (negative) { uO.U_flag = MAX(uO.U_flag-negative,0); negative = 0; } else uO.U_flag++; break; #else /* !UNICODE_SUPPORT */ #ifndef CMS_MVS case ('U'): /* obsolete; to be removed in version 6.0 */ if (negative) uO.L_flag = TRUE, negative = 0; else uO.L_flag = FALSE; break; #endif /* !CMS_MVS */ #endif /* ?UNICODE_SUPPORT */ #ifndef SFX case ('v'): /* verbose */ if (negative) { uO.vflag = MAX(uO.vflag-negative,0); negative = 0; } else if (uO.vflag) ++uO.vflag; else uO.vflag = 2; break; #endif /* !SFX */ #ifndef CMS_MVS case ('V'): /* Version (retain VMS/DEC-20 file versions) */ if (negative) uO.V_flag = FALSE, negative = 0; else uO.V_flag = TRUE; break; #endif /* !CMS_MVS */ #ifdef WILD_STOP_AT_DIR case ('W'): /* Wildcard interpretation (stop at '/'?) */ if (negative) uO.W_flag = FALSE, negative = 0; else uO.W_flag = TRUE; break; #endif /* WILD_STOP_AT_DIR */ case ('x'): /* extract: default */ #ifdef SFX /* when 'x' is the only option in this argument, and the * next arg is not an option, assume this initiates an * exclusion list (-x xlist): terminate option-scanning * and leave uz_opts with argv still pointing to "-x"; * the xlist is processed later */ if (s - argv[0] == 2 && *s == '\0' && argc > 1 && argv[1][0] != '-') { /* break out of nested loops without "++argv;--argc" */ goto opts_done; } #endif /* SFX */ break; #if (defined(RESTORE_UIDGID) || defined(RESTORE_ACL)) case ('X'): /* restore owner/protection info (need privs?) */ if (negative) { uO.X_flag = MAX(uO.X_flag-negative,0); negative = 0; } else ++uO.X_flag; break; #endif /* RESTORE_UIDGID || RESTORE_ACL */ #ifdef VMS case ('Y'): /* Treat ".nnn" as ";nnn" version. */ if (negative) uO.Y_flag = FALSE, negative = 0; else uO.Y_flag = TRUE; break; #endif /* VMS */ case ('z'): /* display only the archive comment */ if (negative) { uO.zflag = MAX(uO.zflag-negative,0); negative = 0; } else ++uO.zflag; break; #ifndef SFX case ('Z'): /* should have been first option (ZipInfo) */ Info(slide, 0x401, ((char *)slide, LoadFarString(Zfirst))); error = TRUE; break; #endif /* !SFX */ #ifdef VMS case ('2'): /* Force ODS2-compliant names. */ if (negative) uO.ods2_flag = FALSE, negative = 0; else uO.ods2_flag = TRUE; break; #endif /* VMS */ #ifdef DOS_H68_OS2_W32 case ('$'): if (negative) { uO.volflag = MAX(uO.volflag-negative,0); negative = 0; } else ++uO.volflag; break; #endif /* DOS_H68_OS2_W32 */ #if (!defined(RISCOS) && !defined(CMS_MVS) && !defined(TANDEM)) case (':'): /* allow "parent dir" path components */ if (negative) { uO.ddotflag = MAX(uO.ddotflag-negative,0); negative = 0; } else ++uO.ddotflag; break; #endif /* !RISCOS && !CMS_MVS && !TANDEM */ #ifdef UNIX case ('^'): /* allow control chars in filenames */ if (negative) { uO.cflxflag = MAX(uO.cflxflag-negative,0); negative = 0; } else ++uO.cflxflag; break; #endif /* UNIX */ default: error = TRUE; break; } /* end switch */ } /* end while (not end of argument string) */ #endif } /* end while (not done with switches) */ /*--------------------------------------------------------------------------- Check for nonsensical combinations of options. ---------------------------------------------------------------------------*/ #if 0 #ifdef SFX opts_done: /* yes, very ugly...but only used by UnZipSFX with -x xlist */ #endif if (showhelp > 0) { /* just print help message and quit */ *pargc = -1; #ifndef SFX if (showhelp == 2) { help_extended(__G); return PK_OK; } else #endif /* !SFX */ { return USAGE(PK_OK); } } if ((uO.cflag && (uO.tflag || uO.uflag)) || (uO.tflag && uO.uflag) || (uO.fflag && uO.overwrite_none)) { Info(slide, 0x401, ((char *)slide, LoadFarString(InvalidOptionsMsg))); error = TRUE; } if (uO.aflag > 2) uO.aflag = 2; #ifdef VMS if (uO.bflag > 2) uO.bflag = 2; /* Clear -s flag when converting text files. */ if (uO.aflag <= 0) uO.S_flag = 0; #endif /* VMS */ if (uO.overwrite_all && uO.overwrite_none) { Info(slide, 0x401, ((char *)slide, LoadFarString(IgnoreOOptionMsg))); uO.overwrite_all = FALSE; } #ifdef MORE if (G.M_flag && !isatty(1)) /* stdout redirected: "more" func. useless */ G.M_flag = 0; #endif #ifdef SFX if (error) #else if ((argc-- == 0) || error) #endif { *pargc = argc; *pargv = argv; #ifndef SFX if (uO.vflag >= 2 && argc == -1) { /* "unzip -v" */ show_version_info(__G); return PK_OK; } if (!G.noargs && !error) error = TRUE; /* had options (not -h or -v) but no zipfile */ #endif /* !SFX */ return USAGE(error); } #endif #ifdef SFX /* print our banner unless we're being fairly quiet */ if (uO.qflag < 2) Info(slide, error? 1 : 0, ((char *)slide, LoadFarString(UnzipSFXBanner), UZ_MAJORVER, UZ_MINORVER, UZ_PATCHLEVEL, UZ_BETALEVEL, LoadFarStringSmall(VersionDate))); #ifdef BETA /* always print the beta warning: no unauthorized distribution!! */ Info(slide, error? 1 : 0, ((char *)slide, LoadFarString(BetaVersion), "\n", "SFX")); #endif #endif /* SFX */ if (uO.cflag || uO.tflag || uO.vflag || uO.zflag #ifdef TIMESTAMP || uO.T_flag #endif ) G.extract_flag = FALSE; else G.extract_flag = TRUE; *pargc = argc; *pargv = argv; return PK_OK; } /* end function uz_opts() */ /********************/ /* Function usage() */ /********************/ #ifdef SFX # ifdef VMS # define LOCAL "X.\n\ (Must quote upper-case options, like \"-V\", unless SET PROC/PARSE=EXTEND.)" # endif # ifdef UNIX # define LOCAL "X" # endif # ifdef DOS_OS2_W32 # define LOCAL "s$" # endif # if (defined(FLEXOS) || defined(NLM)) # define LOCAL "s" # endif # ifdef AMIGA # define LOCAL "N" # endif /* Default for all other systems: */ # ifndef LOCAL # define LOCAL "" # endif # ifndef NO_TIMESTAMP # ifdef MORE # define SFXOPT1 "DM" # else # define SFXOPT1 "D" # endif # else # ifdef MORE # define SFXOPT1 "M" # else # define SFXOPT1 "" # endif # endif int usage(__G__ error) /* return PK-type error code */ __GDEF int error; { Info(slide, error? 1 : 0, ((char *)slide, LoadFarString(UnzipSFXBanner), UZ_MAJORVER, UZ_MINORVER, UZ_PATCHLEVEL, UZ_BETALEVEL, LoadFarStringSmall(VersionDate))); Info(slide, error? 1 : 0, ((char *)slide, LoadFarString(UnzipSFXOpts), SFXOPT1, LOCAL)); #ifdef BETA Info(slide, error? 1 : 0, ((char *)slide, LoadFarString(BetaVersion), "\n", "SFX")); #endif if (error) return PK_PARAM; else return PK_COOL; /* just wanted usage screen: no error */ } /* end function usage() */ #else /* !SFX */ # ifdef VMS # define QUOT '\"' # define QUOTS "\"" # else # define QUOT ' ' # define QUOTS "" # endif int usage(__G__ error) /* return PK-type error code */ __GDEF int error; { int flag = (error? 1 : 0); /*--------------------------------------------------------------------------- Print either ZipInfo usage or UnZip usage, depending on incantation. (Strings must be no longer than 512 bytes for Turbo C, apparently.) ---------------------------------------------------------------------------*/ if (uO.zipinfo_mode) { #ifndef NO_ZIPINFO Info(slide, flag, ((char *)slide, LoadFarString(ZipInfoUsageLine1), ZI_MAJORVER, ZI_MINORVER, UZ_PATCHLEVEL, UZ_BETALEVEL, LoadFarStringSmall(VersionDate), LoadFarStringSmall2(ZipInfoExample), QUOTS,QUOTS)); Info(slide, flag, ((char *)slide, LoadFarString(ZipInfoUsageLine2))); Info(slide, flag, ((char *)slide, LoadFarString(ZipInfoUsageLine3), LoadFarStringSmall(ZipInfoUsageLine4))); #ifdef VMS Info(slide, flag, ((char *)slide, "\n\ You must quote non-lowercase options and filespecs, unless SET PROC/PARSE=EXT.\ \n")); #endif #endif /* !NO_ZIPINFO */ } else { /* UnZip mode */ Info(slide, flag, ((char *)slide, LoadFarString(UnzipUsageLine1), UZ_MAJORVER, UZ_MINORVER, UZ_PATCHLEVEL, UZ_BETALEVEL, LoadFarStringSmall(VersionDate))); #ifdef BETA Info(slide, flag, ((char *)slide, LoadFarString(BetaVersion), "", "")); #endif Info(slide, flag, ((char *)slide, LoadFarString(UnzipUsageLine2), ZIPINFO_MODE_OPTION, LoadFarStringSmall(ZipInfoMode))); #ifdef VMS if (!error) /* maybe no command-line tail found; show extra help */ Info(slide, flag, ((char *)slide, LoadFarString(VMSusageLine2b))); #endif Info(slide, flag, ((char *)slide, LoadFarString(UnzipUsageLine3), LoadFarStringSmall(local1))); Info(slide, flag, ((char *)slide, LoadFarString(UnzipUsageLine4), LoadFarStringSmall(local2), LoadFarStringSmall2(local3))); /* This is extra work for SMALL_MEM, but it will work since * LoadFarStringSmall2 uses the same buffer. Remember, this * is a hack. */ Info(slide, flag, ((char *)slide, LoadFarString(UnzipUsageLine5), LoadFarStringSmall(Example2), LoadFarStringSmall2(Example3), LoadFarStringSmall2(Example3))); } /* end if (uO.zipinfo_mode) */ if (error) return PK_PARAM; else return PK_COOL; /* just wanted usage screen: no error */ } /* end function usage() */ #endif /* ?SFX */ #ifndef SFX /* Print extended help to stdout. */ static void help_extended(__G) __GDEF { extent i; /* counter for help array */ /* help array */ static ZCONST char *text[] = { "", "Extended Help for UnZip", "", "See the UnZip Manual for more detailed help", "", "", "UnZip lists and extracts files in zip archives. The default action is to", "extract zipfile entries to the current directory, creating directories as", "needed. With appropriate options, UnZip lists the contents of archives", "instead.", "", "Basic unzip command line:", " unzip [-Z] options archive[.zip] [file ...] [-x xfile ...] [-d exdir]", "", "Some examples:", " unzip -l foo.zip - list files in short format in archive foo.zip", "", " unzip -t foo - test the files in archive foo", "", " unzip -Z foo - list files using more detailed zipinfo format", "", " unzip foo - unzip the contents of foo in current dir", "", " unzip -a foo - unzip foo and convert text files to local OS", "", "If unzip is run in zipinfo mode, a more detailed list of archive contents", "is provided. The -Z option sets zipinfo mode and changes the available", "options.", "", "Basic zipinfo command line:", " zipinfo options archive[.zip] [file ...] [-x xfile ...]", " unzip -Z options archive[.zip] [file ...] [-x xfile ...]", "", "Below, Mac OS refers to Mac OS before Mac OS X. Mac OS X is a Unix based", "port and is referred to as Unix Apple.", "", "", "unzip options:", " -Z Switch to zipinfo mode. Must be first option.", " -hh Display extended help.", " -A [OS/2, Unix DLL] Print extended help for DLL.", " -c Extract files to stdout/screen. As -p but include names. Also,", " -a allowed and EBCDIC conversions done if needed.", " -f Freshen by extracting only if older file on disk.", " -l List files using short form.", " -p Extract files to pipe (stdout). Only file data is output and all", " files extracted in binary mode (as stored).", " -t Test archive files.", " -T Set timestamp on archive(s) to that of newest file. Similar to", " zip -o but faster.", " -u Update existing older files on disk as -f and extract new files.", " -v Use verbose list format. If given alone as unzip -v show version", " information. Also can be added to other list commands for more", " verbose output.", " -z Display only archive comment.", "", "unzip modifiers:", " -a Convert text files to local OS format. Convert line ends, EOF", " marker, and from or to EBCDIC character set as needed.", " -b Treat all files as binary. [Tandem] Force filecode 180 ('C').", " [VMS] Autoconvert binary files. -bb forces convert of all files.", " -B [UNIXBACKUP compile option enabled] Save a backup copy of each", " overwritten file in foo~ or foo~99999 format.", " -C Use case-insensitive matching.", " -D Skip restoration of timestamps for extracted directories. On VMS this", " is on by default and -D essentially becames -DD.", " -DD Skip restoration of timestamps for all entries.", " -E [MacOS (not Unix Apple)] Display contents of MacOS extra field during", " restore.", " -F [Acorn] Suppress removal of NFS filetype extension. [Non-Acorn if", " ACORN_FTYPE_NFS] Translate filetype and append to name.", " -i [MacOS] Ignore filenames in MacOS extra field. Instead, use name in", " standard header.", " -j Junk paths and deposit all files in extraction directory.", " -J [BeOS] Junk file attributes. [MacOS] Ignore MacOS specific info.", " -K [AtheOS, BeOS, Unix] Restore SUID/SGID/Tacky file attributes.", " -L Convert to lowercase any names from uppercase only file system.", " -LL Convert all files to lowercase.", " -M Pipe all output through internal pager similar to Unix more(1).", " -n Never overwrite existing files. Skip extracting that file, no prompt.", " -N [Amiga] Extract file comments as Amiga filenotes.", " -o Overwrite existing files without prompting. Useful with -f. Use with", " care.", " -P p Use password p to decrypt files. THIS IS INSECURE! Some OS show", " command line to other users.", " -q Perform operations quietly. The more q (as in -qq) the quieter.", " -s [OS/2, NT, MS-DOS] Convert spaces in filenames to underscores.", " -S [VMS] Convert text files (-a, -aa) into Stream_LF format.", " -U [UNICODE enabled] Show non-local characters as #Uxxxx or #Lxxxxxx ASCII", " text escapes where x is hex digit. [Old] -U used to leave names", " uppercase if created on MS-DOS, VMS, etc. See -L.", " -UU [UNICODE enabled] Disable use of stored UTF-8 paths. Note that UTF-8", " paths stored as native local paths are still processed as Unicode.", " -V Retain VMS file version numbers.", " -W [Only if WILD_STOP_AT_DIR] Modify pattern matching so ? and * do not", " match directory separator /, but ** does. Allows matching at specific", " directory levels.", " -X [VMS, Unix, OS/2, NT, Tandem] Restore UICs and ACL entries under VMS,", " or UIDs/GIDs under Unix, or ACLs under certain network-enabled", " versions of OS/2, or security ACLs under Windows NT. Can require", " user privileges.", " -XX [NT] Extract NT security ACLs after trying to enable additional", " system privileges.", " -Y [VMS] Treat archived name endings of .nnn as VMS version numbers.", " -$ [MS-DOS, OS/2, NT] Restore volume label if extraction medium is", " removable. -$$ allows fixed media (hard drives) to be labeled.", " -/ e [Acorn] Use e as extension list.", " -: [All but Acorn, VM/CMS, MVS, Tandem] Allow extract archive members into", " locations outside of current extraction root folder. This allows", " paths such as ../foo to be extracted above the current extraction", " directory, which can be a security problem.", " -^ [Unix] Allow control characters in names of extracted entries. Usually", " this is not a good thing and should be avoided.", " -2 [VMS] Force unconditional conversion of names to ODS-compatible names.", " Default is to exploit destination file system, preserving cases and", " extended name characters on ODS5 and applying ODS2 filtering on ODS2.", "", "", "Wildcards:", " Internally unzip supports the following wildcards:", " ? (or %% or #, depending on OS) matches any single character", " * matches any number of characters, including zero", " [list] matches char in list (regex), can do range [ac-f], all but [!bf]", " If port supports [], must escape [ as [[]", " For shells that expand wildcards, escape (\\* or \"*\") so unzip can recurse.", "", "Include and Exclude:", " -i pattern pattern ... include files that match a pattern", " -x pattern pattern ... exclude files that match a pattern", " Patterns are paths with optional wildcards and match paths as stored in", " archive. Exclude and include lists end at next option or end of line.", " unzip archive -x pattern pattern ...", "", "Multi-part (split) archives (archives created as a set of split files):", " Currently split archives are not readable by unzip. A workaround is", " to use zip to convert the split archive to a single-file archive and", " use unzip on that. See the manual page for Zip 3.0 or later.", "", "Streaming (piping into unzip):", " Currently unzip does not support streaming. The funzip utility can be", " used to process the first entry in a stream.", " cat archive | funzip", "", "Testing archives:", " -t test contents of archive", " This can be modified using -q for quieter operation, and -qq for even", " quieter operation.", "", "Unicode:", " If compiled with Unicode support, unzip automatically handles archives", " with Unicode entries. Currently Unicode on Win32 systems is limited.", " Characters not in the current character set are shown as ASCII escapes", " in the form #Uxxxx where the Unicode character number fits in 16 bits,", " or #Lxxxxxx where it doesn't, where x is the ASCII character for a hex", " digit.", "", "", "zipinfo options (these are used in zipinfo mode (unzip -Z ...)):", " -1 List names only, one per line. No headers/trailers. Good for scripts.", " -2 List names only as -1, but include headers, trailers, and comments.", " -s List archive entries in short Unix ls -l format. Default list format.", " -m List in long Unix ls -l format. As -s, but includes compression %.", " -l List in long Unix ls -l format. As -m, but compression in bytes.", " -v List zipfile information in verbose, multi-page format.", " -h List header line. Includes archive name, actual size, total files.", " -M Pipe all output through internal pager similar to Unix more(1) command.", " -t List totals for files listed or for all files. Includes uncompressed", " and compressed sizes, and compression factors.", " -T Print file dates and times in a sortable decimal format (yymmdd.hhmmss)", " Default date and time format is a more human-readable version.", " -U [UNICODE] If entry has a UTF-8 Unicode path, display any characters", " not in current character set as text #Uxxxx and #Lxxxxxx escapes", " representing the Unicode character number of the character in hex.", " -UU [UNICODE] Disable use of any UTF-8 path information.", " -z Include archive comment if any in listing.", "", "", "funzip stream extractor:", " funzip extracts the first member in an archive to stdout. Typically", " used to unzip the first member of a stream or pipe. If a file argument", " is given, read from that file instead of stdin.", "", "funzip command line:", " funzip [-password] [input[.zip|.gz]]", "", "", "unzipsfx self extractor:", " Self-extracting archives made with unzipsfx are no more (or less)", " portable across different operating systems than unzip executables.", " In general, a self-extracting archive made on a particular Unix system,", " for example, will only self-extract under the same flavor of Unix.", " Regular unzip may still be used to extract embedded archive however.", "", "unzipsfx command line:", " [-options] [file(s) ... [-x xfile(s) ...]]", "", "unzipsfx options:", " -c, -p - Output to pipe. (See above for unzip.)", " -f, -u - Freshen and Update, as for unzip.", " -t - Test embedded archive. (Can be used to list contents.)", " -z - Print archive comment. (See unzip above.)", "", "unzipsfx modifiers:", " Most unzip modifiers are supported. These include", " -a - Convert text files.", " -n - Never overwrite.", " -o - Overwrite without prompting.", " -q - Quiet operation.", " -C - Match names case-insensitively.", " -j - Junk paths.", " -V - Keep version numbers.", " -s - Convert spaces to underscores.", " -$ - Restore volume label.", "", "If unzipsfx compiled with SFX_EXDIR defined, -d option also available:", " -d exd - Extract to directory exd.", "By default, all files extracted to current directory. This option", "forces extraction to specified directory.", "", "See unzipsfx manual page for more information.", "" }; for (i = 0; i < sizeof(text)/sizeof(char *); i++) { Info(slide, 0, ((char *)slide, "%s\n", text[i])); } } /* end function help_extended() */ #ifndef _WIN32_WCE /* Win CE does not support environment variables */ #if (!defined(MODERN) || defined(NO_STDLIB_H)) /* Declare getenv() to be sure (might be missing in some environments) */ extern char *getenv(); #endif #endif /********************************/ /* Function show_version_info() */ /********************************/ static void show_version_info(__G) __GDEF { if (uO.qflag > 3) /* "unzip -vqqqq" */ Info(slide, 0, ((char *)slide, "%d\n", (UZ_MAJORVER*100 + UZ_MINORVER*10 + UZ_PATCHLEVEL))); else { #ifndef _WIN32_WCE /* Win CE does not support environment variables */ char *envptr; #endif int numopts = 0; Info(slide, 0, ((char *)slide, LoadFarString(UnzipUsageLine1v), UZ_MAJORVER, UZ_MINORVER, UZ_PATCHLEVEL, UZ_BETALEVEL, LoadFarStringSmall(VersionDate))); Info(slide, 0, ((char *)slide, LoadFarString(UnzipUsageLine2v))); version(__G); Info(slide, 0, ((char *)slide, LoadFarString(CompileOptions))); #ifdef ACORN_FTYPE_NFS Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(AcornFtypeNFS))); ++numopts; #endif #ifdef ASM_CRC Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(AsmCRC))); ++numopts; #endif #ifdef ASM_INFLATECODES Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(AsmInflateCodes))); ++numopts; #endif #ifdef CHECK_VERSIONS Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(Check_Versions))); ++numopts; #endif #ifdef COPYRIGHT_CLEAN Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(Copyright_Clean))); ++numopts; #endif #ifdef DEBUG Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(UDebug))); ++numopts; #endif #ifdef DEBUG_TIME Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(DebugTime))); ++numopts; #endif #ifdef DLL Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(Dll))); ++numopts; #endif #ifdef DOSWILD Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(DosWild))); ++numopts; #endif #ifdef LZW_CLEAN Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(LZW_Clean))); ++numopts; #endif #ifndef MORE Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(No_More))); ++numopts; #endif #ifdef NO_ZIPINFO Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(No_ZipInfo))); ++numopts; #endif #ifdef NTSD_EAS Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(NTSDExtAttrib))); ++numopts; #endif #if defined(WIN32) && defined(NO_W32TIMES_IZFIX) Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(W32NoIZTimeFix))); ++numopts; #endif #ifdef OLD_THEOS_EXTRA Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(OldTheosExtra))); ++numopts; #endif #ifdef OS2_EAS Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(OS2ExtAttrib))); ++numopts; #endif #ifdef QLZIP Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(SMSExFldOnUnix))); ++numopts; #endif #ifdef REENTRANT Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(Reentrant))); ++numopts; #endif #ifdef REGARGS Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(RegArgs))); ++numopts; #endif #ifdef RETURN_CODES Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(Return_Codes))); ++numopts; #endif #ifdef SET_DIR_ATTRIB Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(SetDirAttrib))); ++numopts; #endif #ifdef SYMLINKS Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(SymLinkSupport))); ++numopts; #endif #ifdef TIMESTAMP Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(TimeStamp))); ++numopts; #endif #ifdef UNIXBACKUP Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(UnixBackup))); ++numopts; #endif #ifdef USE_EF_UT_TIME Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(Use_EF_UT_time))); ++numopts; #endif #ifndef COPYRIGHT_CLEAN Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(Use_Smith_Code))); ++numopts; #endif #ifndef LZW_CLEAN Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(Use_Unshrink))); ++numopts; #endif #ifdef USE_DEFLATE64 Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(Use_Deflate64))); ++numopts; #endif #ifdef UNICODE_SUPPORT # ifdef UTF8_MAYBE_NATIVE sprintf((char *)(slide+256), LoadFarStringSmall(Use_Unicode), LoadFarStringSmall2(G.native_is_utf8 ? SysChUTF8 : SysChOther)); Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), (char *)(slide+256))); # else Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(Use_Unicode))); # endif ++numopts; #endif #ifdef _MBCS sprintf((char *)(slide+256), LoadFarStringSmall(Have_MBCS_Support), (unsigned int)MB_CUR_MAX); Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), (char *)(slide+256))); ++numopts; #endif #ifdef MULT_VOLUME Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(Use_MultiVol))); ++numopts; #endif #ifdef LARGE_FILE_SUPPORT Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(Use_LFS))); ++numopts; #endif #ifdef ZIP64_SUPPORT Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(Use_Zip64))); ++numopts; #endif #if (defined(__DJGPP__) && (__DJGPP__ >= 2)) # ifdef USE_DJGPP_ENV Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(Use_DJGPP_Env))); ++numopts; # endif # ifdef USE_DJGPP_GLOB Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(Use_DJGPP_Glob))); ++numopts; # endif #endif /* __DJGPP__ && (__DJGPP__ >= 2) */ #ifdef USE_VFAT Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(Use_VFAT_support))); ++numopts; #endif #ifdef USE_ZLIB sprintf((char *)(slide+256), LoadFarStringSmall(UseZlib), ZLIB_VERSION, zlibVersion()); Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), (char *)(slide+256))); ++numopts; #endif #ifdef USE_BZIP2 sprintf((char *)(slide+256), LoadFarStringSmall(UseBZip2), BZ2_bzlibVersion()); Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), (char *)(slide+256))); ++numopts; #endif #ifdef VMS_TEXT_CONV Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(VmsTextConv))); ++numopts; #endif #ifdef VMSCLI Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(VmsCLI))); ++numopts; #endif #ifdef VMSWILD Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(VmsWild))); ++numopts; #endif #ifdef WILD_STOP_AT_DIR Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(WildStopAtDir))); ++numopts; #endif #if CRYPT # ifdef PASSWD_FROM_STDIN Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(PasswdStdin))); # endif Info(slide, 0, ((char *)slide, LoadFarString(Decryption), CR_MAJORVER, CR_MINORVER, CR_BETA_VER, LoadFarStringSmall(CryptDate))); ++numopts; #endif /* CRYPT */ if (numopts == 0) Info(slide, 0, ((char *)slide, LoadFarString(CompileOptFormat), LoadFarStringSmall(None))); #ifndef _WIN32_WCE /* Win CE does not support environment variables */ Info(slide, 0, ((char *)slide, LoadFarString(EnvOptions))); envptr = getenv(LoadFarStringSmall(EnvUnZip)); Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat), LoadFarStringSmall(EnvUnZip), (envptr == (char *)NULL || *envptr == 0)? LoadFarStringSmall2(None) : envptr)); envptr = getenv(LoadFarStringSmall(EnvUnZip2)); Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat), LoadFarStringSmall(EnvUnZip2), (envptr == (char *)NULL || *envptr == 0)? LoadFarStringSmall2(None) : envptr)); envptr = getenv(LoadFarStringSmall(EnvZipInfo)); Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat), LoadFarStringSmall(EnvZipInfo), (envptr == (char *)NULL || *envptr == 0)? LoadFarStringSmall2(None) : envptr)); envptr = getenv(LoadFarStringSmall(EnvZipInfo2)); Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat), LoadFarStringSmall(EnvZipInfo2), (envptr == (char *)NULL || *envptr == 0)? LoadFarStringSmall2(None) : envptr)); #ifndef __RSXNT__ #ifdef __EMX__ envptr = getenv(LoadFarStringSmall(EnvEMX)); Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat), LoadFarStringSmall(EnvEMX), (envptr == (char *)NULL || *envptr == 0)? LoadFarStringSmall2(None) : envptr)); envptr = getenv(LoadFarStringSmall(EnvEMXOPT)); Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat), LoadFarStringSmall(EnvEMXOPT), (envptr == (char *)NULL || *envptr == 0)? LoadFarStringSmall2(None) : envptr)); #endif /* __EMX__ */ #if (defined(__GO32__) && (!defined(__DJGPP__) || (__DJGPP__ < 2))) envptr = getenv(LoadFarStringSmall(EnvGO32)); Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat), LoadFarStringSmall(EnvGO32), (envptr == (char *)NULL || *envptr == 0)? LoadFarStringSmall2(None) : envptr)); envptr = getenv(LoadFarStringSmall(EnvGO32TMP)); Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat), LoadFarStringSmall(EnvGO32TMP), (envptr == (char *)NULL || *envptr == 0)? LoadFarStringSmall2(None) : envptr)); #endif /* __GO32__ && !(__DJGPP__ >= 2) */ #endif /* !__RSXNT__ */ #ifdef RISCOS envptr = getenv(LoadFarStringSmall(EnvUnZipExts)); Info(slide, 0, ((char *)slide, LoadFarString(EnvOptFormat), LoadFarStringSmall(EnvUnZipExts), (envptr == (char *)NULL || *envptr == 0)? LoadFarStringSmall2(None) : envptr)); #endif /* RISCOS */ #endif /* !_WIN32_WCE */ } } /* end function show_version() */ #endif /* !SFX */ #endif /* !WINDLL */ Carla-2.4.2/data/windows/unzipfx-carla/unzip.h000066400000000000000000000630401420416754300212560ustar00rootroot00000000000000/*--------------------------------------------------------------------------- unzip.h (new) Copyright (c) 1990-2009 Info-ZIP. All rights reserved. This header file contains the public macros and typedefs required by both the UnZip sources and by any application using the UnZip API. If UNZIP_INTERNAL is defined, it includes unzpriv.h (containing includes, prototypes and extern variables used by the actual UnZip sources). ---------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- This is version 2009-Jan-02 of the Info-ZIP license. The definitive version of this document should be available at ftp://ftp.info-zip.org/pub/infozip/license.html indefinitely and a copy at http://www.info-zip.org/pub/infozip/license.html. Copyright (c) 1990-2009 Info-ZIP. All rights reserved. For the purposes of this copyright and license, "Info-ZIP" is defined as the following set of individuals: Mark Adler, John Bush, Karl Davis, Harald Denker, Jean-Michel Dubois, Jean-loup Gailly, Hunter Goatley, Ed Gordon, Ian Gorman, Chris Herborth, Dirk Haase, Greg Hartwig, Robert Heath, Jonathan Hudson, Paul Kienitz, David Kirschbaum, Johnny Lee, Onno van der Linden, Igor Mandrichenko, Steve P. Miller, Sergio Monesi, Keith Owens, George Petrov, Greg Roelofs, Kai Uwe Rommel, Steve Salisbury, Dave Smith, Steven M. Schweda, Christian Spieler, Cosmin Truta, Antoine Verheijen, Paul von Behren, Rich Wales, Mike White. This software is provided "as is," without warranty of any kind, express or implied. In no event shall Info-ZIP or its contributors be held liable for any direct, indirect, incidental, special or consequential damages arising out of the use of or inability to use this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the above disclaimer and the following restrictions: 1. Redistributions of source code (in whole or in part) must retain the above copyright notice, definition, disclaimer, and this list of conditions. 2. Redistributions in binary form (compiled executables and libraries) must reproduce the above copyright notice, definition, disclaimer, and this list of conditions in documentation and/or other materials provided with the distribution. Additional documentation is not needed for executables where a command line license option provides these and a note regarding this option is in the executable's startup banner. The sole exception to this condition is redistribution of a standard UnZipSFX binary (including SFXWiz) as part of a self-extracting archive; that is permitted without inclusion of this license, as long as the normal SFX banner has not been removed from the binary or disabled. 3. Altered versions--including, but not limited to, ports to new operating systems, existing ports with new graphical interfaces, versions with modified or added functionality, and dynamic, shared, or static library versions not from Info-ZIP--must be plainly marked as such and must not be misrepresented as being the original source or, if binaries, compiled from the original source. Such altered versions also must not be misrepresented as being Info-ZIP releases--including, but not limited to, labeling of the altered versions with the names "Info-ZIP" (or any variation thereof, including, but not limited to, different capitalizations), "Pocket UnZip," "WiZ" or "MacZip" without the explicit permission of Info-ZIP. Such altered versions are further prohibited from misrepresentative use of the Zip-Bugs or Info-ZIP e-mail addresses or the Info-ZIP URL(s), such as to imply Info-ZIP will provide support for the altered versions. 4. Info-ZIP retains the right to use the names "Info-ZIP," "Zip," "UnZip," "UnZipSFX," "WiZ," "Pocket UnZip," "Pocket Zip," and "MacZip" for its own source and binary releases. ---------------------------------------------------------------------------*/ #ifndef __unzip_h /* prevent multiple inclusions */ #define __unzip_h /*--------------------------------------------------------------------------- Predefined, machine-specific macros. ---------------------------------------------------------------------------*/ #ifdef __GO32__ /* MS-DOS extender: NOT Unix */ # ifdef unix # undef unix # endif # ifdef _unix # undef _unix # endif # ifdef __unix # undef __unix # endif # ifdef __unix__ # undef __unix__ # endif #endif #if ((defined(__convex__) || defined(__convexc__)) && !defined(CONVEX)) # define CONVEX #endif #if (defined(unix) || defined(_unix) || defined(__unix) || defined(__unix__)) # ifndef UNIX # define UNIX # endif #endif /* unix || _unix || __unix || __unix__ */ #if (defined(M_XENIX) || defined(COHERENT) || defined(__hpux)) # ifndef UNIX # define UNIX # endif #endif /* M_XENIX || COHERENT || __hpux */ #if (defined(__NetBSD__) || defined(__FreeBSD__)) # ifndef UNIX # define UNIX # endif #endif /* __NetBSD__ || __FreeBSD__ */ #if (defined(CONVEX) || defined(MINIX) || defined(_AIX) || defined(__QNX__)) # ifndef UNIX # define UNIX # endif #endif /* CONVEX || MINIX || _AIX || __QNX__ */ #if (defined(VM_CMS) || defined(MVS)) # define CMS_MVS #endif #if (defined(__OS2__) && !defined(OS2)) # define OS2 #endif #if (defined(__TANDEM) && !defined(TANDEM)) # define TANDEM #endif #if (defined(__VMS) && !defined(VMS)) # define VMS #endif #if ((defined(__WIN32__) || defined(_WIN32)) && !defined(WIN32)) # define WIN32 #endif #if ((defined(__WINNT__) || defined(__WINNT)) && !defined(WIN32)) # define WIN32 #endif #if defined(_WIN32_WCE) # ifndef WIN32 /* WinCE is treated as a variant of the Win32 API */ # define WIN32 # endif # ifndef UNICODE /* WinCE requires UNICODE wide character support */ # define UNICODE # endif #endif #ifdef __COMPILER_KCC__ # include # ifdef SYS_T20 # define TOPS20 # endif #endif /* __COMPILER_KCC__ */ /* Borland C does not define __TURBOC__ if compiling for a 32-bit platform */ #ifdef __BORLANDC__ # ifndef __TURBOC__ # define __TURBOC__ # endif # if (!defined(__MSDOS__) && !defined(OS2) && !defined(WIN32)) # define __MSDOS__ # endif #endif /* define MSDOS for Turbo C (unless OS/2) and Power C as well as Microsoft C */ #ifdef __POWERC # define __TURBOC__ # define MSDOS #endif /* __POWERC */ #if (defined(__MSDOS__) && !defined(MSDOS)) /* just to make sure */ # define MSDOS #endif /* RSXNTDJ (at least up to v1.3) compiles for WIN32 (RSXNT) using a derivate of the EMX environment, but defines MSDOS and __GO32__. ARG !!! */ #if (defined(MSDOS) && defined(WIN32)) # undef MSDOS /* WIN32 is >>>not<<< MSDOS */ #endif #if (defined(__GO32__) && defined(__EMX__) && defined(__RSXNT__)) # undef __GO32__ #endif #if (defined(linux) && !defined(LINUX)) # define LINUX #endif #ifdef __riscos # define RISCOS #endif #if (defined(THINK_C) || defined(MPW)) # define MACOS #endif #if (defined(__MWERKS__) && defined(macintosh)) # define MACOS #endif /* use prototypes and ANSI libraries if __STDC__, or MS-DOS, or OS/2, or Win32, * or IBM C Set/2, or Borland C, or Watcom C, or GNU gcc (emx or Cygwin), * or Macintosh, or Sequent, or Atari, or IBM RS/6000, or Silicon Graphics, * or Convex?, or AtheOS, or BeOS. */ #if (defined(__STDC__) || defined(MSDOS) || defined(OS2) || defined(WIN32)) # ifndef PROTO # define PROTO # endif # ifndef MODERN # define MODERN # endif #endif #if (defined(__IBMC__) || defined(__BORLANDC__) || defined(__WATCOMC__)) # ifndef PROTO # define PROTO # endif # ifndef MODERN # define MODERN # endif #endif #if (defined(__EMX__) || defined(__CYGWIN__)) # ifndef PROTO # define PROTO # endif # ifndef MODERN # define MODERN # endif #endif #if (defined(MACOS) || defined(ATARI_ST) || defined(RISCOS) || defined(THEOS)) # ifndef PROTO # define PROTO # endif # ifndef MODERN # define MODERN # endif #endif /* Sequent running Dynix/ptx: non-modern compiler */ #if (defined(_AIX) || defined(sgi) || (defined(_SEQUENT_) && !defined(PTX))) # ifndef PROTO # define PROTO # endif # ifndef MODERN # define MODERN # endif #endif #if (defined(CMS_MVS) || defined(__ATHEOS__) || defined(__BEOS__)) /* || defined(CONVEX) ? */ # ifndef PROTO # define PROTO # endif # ifndef MODERN # define MODERN # endif #endif /* Bundled C compiler on HP-UX needs this. Others shouldn't care. */ #if (defined(__hpux)) # ifndef MODERN # define MODERN # endif #endif /* turn off prototypes if requested */ #if (defined(NOPROTO) && defined(PROTO)) # undef PROTO #endif /* used to remove arguments in function prototypes for non-ANSI C */ #ifdef PROTO # define OF(a) a #else # define OF(a) () #endif /* enable the "const" keyword only if MODERN and if not otherwise instructed */ #ifdef MODERN # if (!defined(ZCONST) && (defined(USE_CONST) || !defined(NO_CONST))) # define ZCONST const # endif #endif #ifndef ZCONST # define ZCONST #endif /* Tell Microsoft Visual C++ 2005 (and newer) to leave us alone * and let us use standard C functions the way we're supposed to. * (These preprocessor symbols must appear before the first system * header include. They are located here, because for WINDLL the * first system header includes follow just below.) */ #if defined(_MSC_VER) && (_MSC_VER >= 1400) # ifndef _CRT_SECURE_NO_WARNINGS # define _CRT_SECURE_NO_WARNINGS # endif # ifndef _CRT_NONSTDC_NO_WARNINGS # define _CRT_NONSTDC_NO_WARNINGS # endif # if defined(POCKET_UNZIP) && !defined(_CRT_NON_CONFORMING_SWPRINTFS) # define _CRT_NON_CONFORMING_SWPRINTFS # endif #endif /* NO_UNIXBACKUP overrides UNIXBACKUP */ #if defined(NO_UNIXBACKUP) && defined(UNIXBACKUP) # undef UNIXBACKUP #endif /*--------------------------------------------------------------------------- Grab system-specific public include headers. ---------------------------------------------------------------------------*/ #ifdef POCKET_UNZIP /* WinCE port */ # include "wince/punzip.h" /* must appear before windows.h */ #endif #ifdef WINDLL /* for UnZip, the "basic" part of the win32 api is sufficient */ # ifndef WIN32_LEAN_AND_MEAN # define WIN32_LEAN_AND_MEAN # define IZ_HASDEFINED_WIN32LEAN # endif # include # include "windll/structs.h" # ifdef IZ_HASDEFINED_WIN32LEAN # undef WIN32_LEAN_AND_MEAN # undef IZ_HASDEFINED_WIN32LEAN # endif #endif /*--------------------------------------------------------------------------- Grab system-dependent definition of EXPENTRY for prototypes below. ---------------------------------------------------------------------------*/ #if 0 #if (defined(OS2) && !defined(FUNZIP)) # ifdef UNZIP_INTERNAL # define INCL_NOPM # define INCL_DOSNLS # define INCL_DOSPROCESS # define INCL_DOSDEVICES # define INCL_DOSDEVIOCTL # define INCL_DOSERRORS # define INCL_DOSMISC # ifdef OS2DLL # define INCL_REXXSAA # include # endif # endif /* UNZIP_INTERNAL */ # include # define UZ_EXP EXPENTRY #endif /* OS2 && !FUNZIP */ #endif /* 0 */ #if (defined(OS2) && !defined(FUNZIP)) # if (defined(__IBMC__) || defined(__WATCOMC__)) # define UZ_EXP _System /* compiler keyword */ # else # define UZ_EXP # endif #endif /* OS2 && !FUNZIP */ #if (defined(WINDLL) || defined(USE_UNZIP_LIB)) # ifndef EXPENTRY # define UZ_EXP WINAPI # else # define UZ_EXP EXPENTRY # endif #endif #ifndef UZ_EXP # define UZ_EXP #endif #ifdef __cplusplus extern "C" { #endif /*--------------------------------------------------------------------------- Public typedefs. ---------------------------------------------------------------------------*/ #ifndef _IZ_TYPES_DEFINED #ifdef MODERN typedef void zvoid; #else /* !MODERN */ # ifndef AOS_VS /* mostly modern? */ # ifndef VAXC /* not fully modern, but has knows 'void' */ # define void int # endif /* !VAXC */ # endif /* !AOS_VS */ typedef char zvoid; #endif /* ?MODERN */ typedef unsigned char uch; /* code assumes unsigned bytes; these type- */ typedef unsigned short ush; /* defs replace byte/UWORD/ULONG (which are */ typedef unsigned long ulg; /* predefined on some systems) & match zip */ #define _IZ_TYPES_DEFINED #endif /* !_IZ_TYPES_DEFINED */ /* InputFn is not yet used and is likely to change: */ #ifdef PROTO typedef int (UZ_EXP MsgFn) (zvoid *pG, uch *buf, ulg size, int flag); typedef int (UZ_EXP InputFn) (zvoid *pG, uch *buf, int *size, int flag); typedef void (UZ_EXP PauseFn) (zvoid *pG, ZCONST char *prompt, int flag); typedef int (UZ_EXP PasswdFn) (zvoid *pG, int *rcnt, char *pwbuf, int size, ZCONST char *zfn, ZCONST char *efn); typedef int (UZ_EXP StatCBFn) (zvoid *pG, int fnflag, ZCONST char *zfn, ZCONST char *efn, ZCONST zvoid *details); typedef void (UZ_EXP UsrIniFn) (void); #else /* !PROTO */ typedef int (UZ_EXP MsgFn) (); typedef int (UZ_EXP InputFn) (); typedef void (UZ_EXP PauseFn) (); typedef int (UZ_EXP PasswdFn) (); typedef int (UZ_EXP StatCBFn) (); typedef void (UZ_EXP UsrIniFn) (); #endif /* ?PROTO */ typedef struct _UzpBuffer { /* rxstr */ ulg strlength; /* length of string */ char *strptr; /* pointer to string */ } UzpBuffer; typedef struct _UzpInit { ulg structlen; /* length of the struct being passed */ /* GRR: can we assume that each of these is a 32-bit pointer? if not, * does it matter? add "far" keyword to make sure? */ MsgFn *msgfn; InputFn *inputfn; PauseFn *pausefn; UsrIniFn *userfn; /* user init function to be called after */ /* globals constructed and initialized */ /* pointer to program's environment area or something? */ /* hooks for performance testing? */ /* hooks for extra unzip -v output? (detect CPU or other hardware?) */ /* anything else? let me (Greg) know... */ } UzpInit; typedef struct _UzpCB { ulg structlen; /* length of the struct being passed */ /* GRR: can we assume that each of these is a 32-bit pointer? if not, * does it matter? add "far" keyword to make sure? */ MsgFn *msgfn; InputFn *inputfn; PauseFn *pausefn; PasswdFn *passwdfn; StatCBFn *statrepfn; } UzpCB; /* the collection of general UnZip option flags and option arguments */ typedef struct _UzpOpts { #ifndef FUNZIP char *exdir; /* pointer to extraction root directory (-d option) */ char *pwdarg; /* pointer to command-line password (-P option) */ int zipinfo_mode; /* behave like ZipInfo or like normal UnZip? */ int aflag; /* -a: do ASCII-EBCDIC and/or end-of-line translation */ #ifdef VMS int bflag; /* -b: force fixed record format for binary files */ #endif #ifdef TANDEM int bflag; /* -b: create text files in 'C' format (180)*/ #endif #if defined(UNIX) || defined(OS2) || defined(WIN32) int B_flag; /* -B: back up existing files by renaming to *~##### */ #else #ifdef UNIXBACKUP int B_flag; /* -B: back up existing files by renaming to *~##### */ #endif #endif int cflag; /* -c: output to stdout */ int C_flag; /* -C: match filenames case-insensitively */ int D_flag; /* -D: don't restore directory (-DD: any) timestamps */ #ifdef MACOS int E_flag; /* -E: [MacOS] show Mac extra field during restoring */ #endif int fflag; /* -f: "freshen" (extract only newer files) */ #if (defined(RISCOS) || defined(ACORN_FTYPE_NFS)) int acorn_nfs_ext; /* -F: RISC OS types & NFS filetype extensions */ #endif int hflag; /* -h: header line (zipinfo) */ #ifdef MACOS int i_flag; /* -i: [MacOS] ignore filenames stored in Mac e.f. */ #endif #ifdef RISCOS int scanimage; /* -I: scan image files */ #endif int jflag; /* -j: junk pathnames (unzip) */ #if (defined(__ATHEOS__) || defined(__BEOS__) || defined(MACOS)) int J_flag; /* -J: ignore AtheOS/BeOS/MacOS e. f. info (unzip) */ #endif #if (defined(__ATHEOS__) || defined(__BEOS__) || defined(UNIX)) int K_flag; /* -K: keep setuid/setgid/tacky permissions */ #endif int lflag; /* -12slmv: listing format (zipinfo) */ int L_flag; /* -L: convert filenames from some OSes to lowercase */ int overwrite_none; /* -n: never overwrite files (no prompting) */ #ifdef AMIGA int N_flag; /* -N: restore comments as AmigaDOS filenotes */ #endif int overwrite_all; /* -o: OK to overwrite files without prompting */ #endif /* !FUNZIP */ int qflag; /* -q: produce a lot less output */ #ifdef TANDEM int rflag; /* -r: remove file extensions */ #endif #ifndef FUNZIP #if (defined(MSDOS) || defined(FLEXOS) || defined(OS2) || defined(WIN32)) int sflag; /* -s: convert spaces in filenames to underscores */ #endif #if (defined(NLM)) int sflag; /* -s: convert spaces in filenames to underscores */ #endif #ifdef VMS int S_flag; /* -S: use Stream_LF for text files (-a[a]) */ #endif #if (defined(MSDOS) || defined(__human68k__) || defined(OS2) || defined(WIN32)) int volflag; /* -$: extract volume labels */ #endif int tflag; /* -t: test (unzip) or totals line (zipinfo) */ int T_flag; /* -T: timestamps (unzip) or dec. time fmt (zipinfo) */ int uflag; /* -u: "update" (extract only newer/brand-new files) */ #if defined(UNIX) || defined(VMS) || defined(WIN32) int U_flag; /* -U: escape non-ASCII, -UU No Unicode paths */ #endif int vflag; /* -v: (verbosely) list directory */ int V_flag; /* -V: don't strip VMS version numbers */ int W_flag; /* -W: wildcard '*' won't match '/' dir separator */ #if (defined (__ATHEOS__) || defined(__BEOS__) || defined(UNIX)) int X_flag; /* -X: restore owner/protection or UID/GID or ACLs */ #else #if (defined(TANDEM) || defined(THEOS)) int X_flag; /* -X: restore owner/protection or UID/GID or ACLs */ #else #if (defined(OS2) || defined(VMS) || defined(WIN32)) int X_flag; /* -X: restore owner/protection or UID/GID or ACLs */ #endif #endif #endif #ifdef VMS int Y_flag; /* -Y: treat ".nnn" as ";nnn" version */ #endif int zflag; /* -z: display the zipfile comment (only, for unzip) */ #ifdef VMS int ods2_flag; /* -2: force names to conform to ODS2 */ #endif #if (!defined(RISCOS) && !defined(CMS_MVS) && !defined(TANDEM)) int ddotflag; /* -:: don't skip over "../" path elements */ #endif #ifdef UNIX int cflxflag; /* -^: allow control chars in extracted filenames */ #endif #endif /* !FUNZIP */ } UzpOpts; /* intended to be a private struct: */ typedef struct _ver { uch major; /* e.g., integer 5 */ uch minor; /* e.g., 2 */ uch patchlevel; /* e.g., 0 */ uch not_used; } _version_type; typedef struct _UzpVer { ulg structlen; /* length of the struct being passed */ ulg flag; /* bit 0: is_beta bit 1: uses_zlib */ ZCONST char *betalevel; /* e.g. "g BETA" or "" */ ZCONST char *date; /* e.g. "9 Oct 08" (beta) or "9 October 2008" */ ZCONST char *zlib_version;/* e.g. "1.2.3" or NULL */ _version_type unzip; /* current UnZip version */ _version_type zipinfo; /* current ZipInfo version */ _version_type os2dll; /* OS2DLL version (retained for compatibility */ _version_type windll; /* WinDLL version (retained for compatibility */ _version_type dllapimin; /* last incompatible change of library API */ } UzpVer; /* for Visual BASIC access to Windows DLLs: */ typedef struct _UzpVer2 { ulg structlen; /* length of the struct being passed */ ulg flag; /* bit 0: is_beta bit 1: uses_zlib */ char betalevel[10]; /* e.g. "g BETA" or "" */ char date[20]; /* e.g. "9 Oct 08" (beta) or "9 October 2008" */ char zlib_version[10]; /* e.g. "1.2.3" or NULL */ _version_type unzip; /* current UnZip version */ _version_type zipinfo; /* current ZipInfo version */ _version_type os2dll; /* OS2DLL version (retained for compatibility */ _version_type windll; /* WinDLL version (retained for compatibility */ _version_type dllapimin; /* last incompatible change of library API */ } UzpVer2; typedef struct _Uzp_Siz64 { unsigned long lo32; unsigned long hi32; } Uzp_Siz64; typedef struct _Uzp_cdir_Rec { uch version_made_by[2]; uch version_needed_to_extract[2]; ush general_purpose_bit_flag; ush compression_method; ulg last_mod_dos_datetime; ulg crc32; Uzp_Siz64 csize; Uzp_Siz64 ucsize; ush filename_length; ush extra_field_length; ush file_comment_length; ush disk_number_start; ush internal_file_attributes; ulg external_file_attributes; Uzp_Siz64 relative_offset_local_header; } Uzp_cdir_Rec; #define UZPINIT_LEN sizeof(UzpInit) #define UZPVER_LEN sizeof(UzpVer) #define cbList(func) int (* UZ_EXP func)(char *filename, Uzp_cdir_Rec *crec) /*--------------------------------------------------------------------------- Return (and exit) values of the public UnZip API functions. ---------------------------------------------------------------------------*/ /* external return codes */ #define PK_OK 0 /* no error */ #define PK_COOL 0 /* no error */ #define PK_WARN 1 /* warning error */ #define PK_ERR 2 /* error in zipfile */ #define PK_BADERR 3 /* severe error in zipfile */ #define PK_MEM 4 /* insufficient memory (during initialization) */ #define PK_MEM2 5 /* insufficient memory (password failure) */ #define PK_MEM3 6 /* insufficient memory (file decompression) */ #define PK_MEM4 7 /* insufficient memory (memory decompression) */ #define PK_MEM5 8 /* insufficient memory (not yet used) */ #define PK_NOZIP 9 /* zipfile not found */ #define PK_PARAM 10 /* bad or illegal parameters specified */ #define PK_FIND 11 /* no files found */ #define PK_DISK 50 /* disk full */ #define PK_EOF 51 /* unexpected EOF */ #define IZ_CTRLC 80 /* user hit ^C to terminate */ #define IZ_UNSUP 81 /* no files found: all unsup. compr/encrypt. */ #define IZ_BADPWD 82 /* no files found: all had bad password */ #define IZ_ERRBF 83 /* big-file archive, small-file program */ /* return codes of password fetches (negative = user abort; positive = error) */ #define IZ_PW_ENTERED 0 /* got some password string; use/try it */ #define IZ_PW_CANCEL -1 /* no password available (for this entry) */ #define IZ_PW_CANCELALL -2 /* no password, skip any further pwd. request */ #define IZ_PW_ERROR 5 /* = PK_MEM2 : failure (no mem, no tty, ...) */ /* flag values for status callback function */ #define UZ_ST_START_EXTRACT 1 /* no details */ #define UZ_ST_IN_PROGRESS 2 /* no details */ #define UZ_ST_FINISH_MEMBER 3 /* 'details': extracted size */ /* return values of status callback function */ #define UZ_ST_CONTINUE 0 #define UZ_ST_BREAK 1 /*--------------------------------------------------------------------------- Prototypes for public UnZip API (DLL) functions. ---------------------------------------------------------------------------*/ #define UzpMatch match int UZ_EXP UzpMain OF((int argc, char **argv)); int UZ_EXP UzpAltMain OF((int argc, char **argv, UzpInit *init)); ZCONST UzpVer * UZ_EXP UzpVersion OF((void)); void UZ_EXP UzpFreeMemBuffer OF((UzpBuffer *retstr)); #ifndef WINDLL int UZ_EXP UzpUnzipToMemory OF((char *zip, char *file, UzpOpts *optflgs, UzpCB *UsrFunc, UzpBuffer *retstr)); int UZ_EXP UzpGrep OF((char *archive, char *file, char *pattern, int cmd, int SkipBin, UzpCB *UsrFunc)); #endif #ifdef OS2 int UZ_EXP UzpFileTree OF((char *name, cbList(callBack), char *cpInclude[], char *cpExclude[])); #endif unsigned UZ_EXP UzpVersion2 OF((UzpVer2 *version)); int UZ_EXP UzpValidate OF((char *archive, int AllCodes)); /* default I/O functions (can be swapped out via UzpAltMain() entry point): */ int UZ_EXP UzpMessagePrnt OF((zvoid *pG, uch *buf, ulg size, int flag)); int UZ_EXP UzpMessageNull OF((zvoid *pG, uch *buf, ulg size, int flag)); int UZ_EXP UzpInput OF((zvoid *pG, uch *buf, int *size, int flag)); void UZ_EXP UzpMorePause OF((zvoid *pG, ZCONST char *prompt, int flag)); int UZ_EXP UzpPassword OF((zvoid *pG, int *rcnt, char *pwbuf, int size, ZCONST char *zfn, ZCONST char *efn)); #ifdef __cplusplus } #endif /*--------------------------------------------------------------------------- Remaining private stuff for UnZip compilation. ---------------------------------------------------------------------------*/ #ifdef UNZIP_INTERNAL # include "unzpriv.h" #endif #endif /* !__unzip_h */ Carla-2.4.2/data/windows/unzipfx-carla/unzipfx/000077500000000000000000000000001420416754300214405ustar00rootroot00000000000000Carla-2.4.2/data/windows/unzipfx-carla/unzipfx/appDetails.c000066400000000000000000000034711420416754300236770ustar00rootroot00000000000000 #include #include #include #ifdef WIN32 # include #endif #include "appDetails.h" #define CMD_BUF_LEN 1024 static int sfx_app_argc = 0; static char** sfx_app_argv = NULL; static char sfx_tmp_path[512] = { 0 }; void sfx_app_set_args(int argc, char** argv) { sfx_app_argc = argc; sfx_app_argv = argv; } int sfx_app_autorun_now() { int i, cmdBufLen = 0; char cmdBuf[CMD_BUF_LEN]; const char* const path = sfx_get_tmp_path(1); chdir(path); strcpy(cmdBuf, path); strcat(cmdBuf, SFX_AUTORUN_CMD); cmdBufLen = strlen(cmdBuf); for (i=0; i < sfx_app_argc; i++) { if (! sfx_app_argv[i]) continue; cmdBufLen += strlen(sfx_app_argv[i]) + 1; if (cmdBufLen >= CMD_BUF_LEN-1) break; strcat(cmdBuf, " "); strcat(cmdBuf, sfx_app_argv[i]); } puts(SFX_APP_BANNER); printf("Launching: '%s'\n", cmdBuf); #ifdef WIN32 ShellExecute(NULL, "open", cmdBuf, NULL, NULL, SW_SHOWNORMAL); return 0; #else char magicBuf[512]; strcpy(magicBuf, path); strcat(magicBuf, "magic.mgc"); setenv("CARLA_MAGIC_FILE", magicBuf, 1); const int ret = system(cmdBuf); exit(ret); return ret; #endif } char* sfx_get_tmp_path(int withAppName) { #ifdef WIN32 { GetTempPathA(512 - strlen(SFX_APP_MININAME_TITLE), sfx_tmp_path); if (withAppName == 1) strcat(sfx_tmp_path, SFX_APP_MININAME_TITLE "-" CARLA_VERSION_STRING); } #else { char* tmp = getenv("TMP"); if (tmp) strcpy(sfx_tmp_path, tmp); else strcpy(sfx_tmp_path, "/tmp"); if (withAppName == 1) strcat(sfx_tmp_path, "/" SFX_APP_MININAME_LCASE "-" CARLA_VERSION_STRING); } #endif return sfx_tmp_path; } Carla-2.4.2/data/windows/unzipfx-carla/unzipfx/appDetails.h000066400000000000000000000011501420416754300236740ustar00rootroot00000000000000 #ifndef __APP_DETAILS_H__ #define __APP_DETAILS_H__ #define REAL_BUILD #include "../../../../source/includes/CarlaDefines.h" #define SFX_APP_MININAME_TITLE "Carla" #define SFX_APP_MININAME_LCASE "carla" #define SFX_APP_BANNER SFX_APP_MININAME_TITLE " self-contained executable " CARLA_VERSION_STRING ", based on UnZipSFX." #ifdef WIN32 # define SFX_AUTORUN_CMD "\\" SFX_APP_MININAME_TITLE ".exe" #else # define SFX_AUTORUN_CMD "/" SFX_APP_MININAME_LCASE #endif void sfx_app_set_args(int argc, char** argv); int sfx_app_autorun_now(); char* sfx_get_tmp_path(int withAppName); #endif // __APP_DETAILS_H__ Carla-2.4.2/data/windows/unzipfx-carla/unzpriv.h000066400000000000000000003251651420416754300216370ustar00rootroot00000000000000/* Copyright (c) 1990-2009 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2009-Jan-02 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- unzpriv.h This header file contains private (internal) macros, typedefs, prototypes and global-variable declarations used by all of the UnZip source files. In a prior life it was part of the main unzip.h header, but now it is only included by that header if UNZIP_INTERNAL is defined. ---------------------------------------------------------------------------*/ #ifndef __unzpriv_h /* prevent multiple inclusions */ #define __unzpriv_h /* First thing: Signal all following code that we compile UnZip utilities! */ #ifndef UNZIP # define UNZIP #endif /* GRR 960204: MORE defined here in preparation for removal altogether */ #ifndef MORE # ifndef RISCOS # define MORE # endif #endif /* fUnZip should never need to be reentrant */ #ifdef FUNZIP # ifdef REENTRANT # undef REENTRANT # endif # ifdef DLL # undef DLL # endif # ifdef SFX /* fUnZip is NOT the sfx stub! */ # undef SFX # endif # ifdef USE_BZIP2 /* fUnZip does not support bzip2 decompression */ # undef USE_BZIP2 # endif #endif #if (defined(USE_ZLIB) && !defined(HAVE_ZL_INFLAT64) && !defined(NO_DEFLATE64)) /* zlib does not (yet?) provide Deflate64(tm) support */ # define NO_DEFLATE64 #endif #ifdef NO_DEFLATE64 /* disable support for Deflate64(tm) */ # ifdef USE_DEFLATE64 # undef USE_DEFLATE64 # endif #else /* enable Deflate64(tm) support unless compiling for SFX stub */ # if (!defined(USE_DEFLATE64) && !defined(SFX)) # define USE_DEFLATE64 # endif #endif /* disable bzip2 support for SFX stub, unless explicitly requested */ #if (defined(SFX) && !defined(BZIP2_SFX) && defined(USE_BZIP2)) # undef USE_BZIP2 #endif #if (defined(NO_VMS_TEXT_CONV) || defined(VMS)) # ifdef VMS_TEXT_CONV # undef VMS_TEXT_CONV # endif #else # if (!defined(VMS_TEXT_CONV) && !defined(SFX)) # define VMS_TEXT_CONV # endif #endif /* Enable -B option per default on specific systems, to allow backing up * files that would be overwritten. * (This list of systems must be kept in sync with the list of systems * that add the B_flag to the UzpOpts structure, see unzip.h.) */ #if (!defined(NO_UNIXBACKUP) && !defined(UNIXBACKUP)) # if defined(UNIX) || defined(OS2) || defined(WIN32) # define UNIXBACKUP # endif #endif #if (defined(DLL) && !defined(REENTRANT)) # define REENTRANT #endif #if (!defined(DYNAMIC_CRC_TABLE) && !defined(FUNZIP)) # define DYNAMIC_CRC_TABLE #endif #if (defined(DYNAMIC_CRC_TABLE) && !defined(REENTRANT)) # ifndef DYNALLOC_CRCTAB # define DYNALLOC_CRCTAB # endif #endif /*--------------------------------------------------------------------------- OS-dependent configuration for UnZip internals ---------------------------------------------------------------------------*/ /* Some compiler distributions for Win32/i386 systems try to emulate * a Unix (POSIX-compatible) environment. */ #if (defined(WIN32) && defined(UNIX)) /* UnZip does not support merging both ports in a single executable. */ # if (defined(FORCE_WIN32_OVER_UNIX) && defined(FORCE_UNIX_OVER_WIN32)) /* conflicting choice requests -> we prefer the Win32 environment */ # undef FORCE_UNIX_OVER_WIN32 # endif # ifdef FORCE_WIN32_OVER_UNIX /* native Win32 support was explicitly requested... */ # undef UNIX # else /* use the POSIX (Unix) emulation features by default... */ # undef WIN32 # endif #endif /* bad or (occasionally?) missing stddef.h: */ #if (defined(M_XENIX) || defined(DNIX)) # define NO_STDDEF_H #endif #if (defined(M_XENIX) && !defined(M_UNIX)) /* SCO Xenix only, not SCO Unix */ # define SCO_XENIX # define NO_LIMITS_H /* no limits.h, but MODERN defined */ # define NO_UID_GID /* no uid_t/gid_t */ # define size_t int #endif #ifdef realix /* Modcomp Real/IX, real-time SysV.3 variant */ # define SYSV # define NO_UID_GID /* no uid_t/gid_t */ #endif #if (defined(_AIX) && !defined(_ALL_SOURCE)) # define _ALL_SOURCE #endif #if defined(apollo) /* defines __STDC__ */ # define NO_STDLIB_H #endif #ifdef DNIX # define SYSV # define SHORT_NAMES /* 14-char limitation on path components */ /* # define FILENAME_MAX 14 */ # define FILENAME_MAX NAME_MAX /* GRR: experiment */ #endif #if (defined(SYSTEM_FIVE) || defined(__SYSTEM_FIVE)) # ifndef SYSV # define SYSV # endif #endif /* SYSTEM_FIVE || __SYSTEM_FIVE */ #if (defined(M_SYSV) || defined(M_SYS5)) # ifndef SYSV # define SYSV # endif #endif /* M_SYSV || M_SYS5 */ /* __SVR4 and __svr4__ catch Solaris on at least some combos of compiler+OS */ #if (defined(__SVR4) || defined(__svr4__) || defined(sgi) || defined(__hpux)) # ifndef SYSV # define SYSV # endif #endif /* __SVR4 || __svr4__ || sgi || __hpux */ #if (defined(LINUX) || defined(__QNX__)) # ifndef SYSV # define SYSV # endif #endif /* LINUX || __QNX__ */ #if (defined(ultrix) || defined(__ultrix) || defined(bsd4_2)) # if (!defined(BSD) && !defined(SYSV)) # define BSD # endif #endif /* ultrix || __ultrix || bsd4_2 */ #if (defined(sun) || defined(pyr) || defined(CONVEX)) # if (!defined(BSD) && !defined(SYSV)) # define BSD # endif #endif /* sun || pyr || CONVEX */ #ifdef pyr /* Pyramid: has BSD and AT&T "universes" */ # ifdef BSD # define pyr_bsd # define USE_STRINGS_H /* instead of more common string.h */ # define ZMEM /* ZMEM now uses bcopy/bzero: not in AT&T universe */ # endif /* (AT&T memcpy claimed to be very slow, though) */ # define DECLARE_ERRNO #endif /* pyr */ /* stat() bug for Borland, VAX C RTL, and Atari ST MiNT on TOS * filesystems: returns 0 for wildcards! (returns 0xffffffff on Minix * filesystem or `U:' drive under Atari MiNT.) Watcom C was previously * included on this list; it would be good to know what version the problem * was fixed at, if it did exist. */ #if (defined(__TURBOC__) && !defined(WIN32)) /*# define WILD_STAT_BUG*/ #endif #if (defined(VMS) || defined(__MINT__)) # define WILD_STAT_BUG #endif /*--------------------------------------------------------------------------- OS-dependent includes ---------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- API (DLL) section: ---------------------------------------------------------------------------*/ #ifdef DLL # define MAIN UZ_EXP UzpMain /* was UzpUnzip */ # ifdef OS2DLL # undef Info # define REDIRECTC(c) varputchar(__G__ c) # define REDIRECTPRINT(buf,size) varmessage(__G__ buf, size) # define FINISH_REDIRECT() finish_REXX_redirect(__G) # else # define REDIRECTC(c) # define REDIRECTPRINT(buf,size) 0 # define FINISH_REDIRECT() close_redirect(__G) # endif #endif /*--------------------------------------------------------------------------- Acorn RISCOS section: ---------------------------------------------------------------------------*/ #ifdef RISCOS # include "acorn/riscos.h" #endif /*--------------------------------------------------------------------------- Amiga section: ---------------------------------------------------------------------------*/ #ifdef AMIGA # include "amiga/amiga.h" #endif /*--------------------------------------------------------------------------- AOS/VS section (somewhat similar to Unix, apparently): ---------------------------------------------------------------------------*/ #ifdef AOS_VS # ifdef __FILEIO_C # include "aosvs/aosvs.h" # endif #endif /*--------------------------------------------------------------------------- Atari ST section: ---------------------------------------------------------------------------*/ #ifdef ATARI # include # include # include # include # define SYMLINKS # define EXE_EXTENSION ".tos" # ifndef DATE_FORMAT # define DATE_FORMAT DF_DMY # endif # define DIR_END '/' # define INT_SPRINTF # define timezone _timezone # define lenEOL 2 # define PutNativeEOL {*q++ = native(CR); *q++ = native(LF);} # undef SHORT_NAMES # if (!defined(NOTIMESTAMP) && !defined(TIMESTAMP)) # define TIMESTAMP # endif #endif /*--------------------------------------------------------------------------- AtheOS section: ---------------------------------------------------------------------------*/ #ifdef __ATHEOS__ # include "atheos/athcfg.h" #endif /*--------------------------------------------------------------------------- BeOS section: ---------------------------------------------------------------------------*/ #ifdef __BEOS__ # include "beos/beocfg.h" #endif /*--------------------------------------------------------------------------- Human68k/X680x0 section: ---------------------------------------------------------------------------*/ #ifdef __human68k__ /* DO NOT DEFINE DOS_OS2 HERE! If Human68k is so much */ /* like MS-DOS and/or OS/2, create DOS_H68_OS2 macro. */ # if (!defined(_MBCS) && !defined(NO_MBCS)) /* enable MBCS support by default for this system */ # define _MBCS # endif # if (defined(_MBCS) && defined(NO_MBCS)) /* disable MBCS support when explicitely requested */ # undef _MBCS # endif # include # include # include # include # include # ifdef HAVE_MBSTRING_H # include # endif # ifdef HAVE_MBCTYPE_H # include # else # ifndef _ismbblead # define _ismbblead(c) (0x80 <= (c) && ((c) < 0xa0 || 0xe0 <= (c))) # endif # endif # ifndef DATE_FORMAT # define DATE_FORMAT DF_YMD /* Japanese standard */ # endif # define lenEOL 1 # define PutNativeEOL *q++ = native(LF); # define INT_SPRINTF # define SYMLINKS # ifdef SFX # define MAIN main_sfx # endif #endif /*--------------------------------------------------------------------------- Mac section: ---------------------------------------------------------------------------*/ #ifdef MACOS # include "maccfg.h" #endif /* MACOS */ /*--------------------------------------------------------------------------- MS-DOS, OS/2, FLEXOS section: ---------------------------------------------------------------------------*/ #ifdef WINDLL # ifdef MORE # undef MORE # endif # ifdef OS2_EAS # undef OS2_EAS # endif #endif #if (defined(_MSC_VER) || (defined(M_I86) && !defined(__WATCOMC__))) # ifndef MSC # define MSC /* This should work for older MSC, too! */ # endif #endif #if (defined(MSDOS) || defined(OS2) || defined(FLEXOS)) # include /* off_t, time_t, dev_t, ... */ # include # include /* lseek(), open(), setftime(), dup(), creat() */ # include /* localtime() */ # include /* O_BINARY for open() w/o CR/LF translation */ # ifdef OS2 /* defined for all OS/2 compilers */ # include "os2/os2cfg.h" # else # ifdef FLEXOS # include "flexos/flxcfg.h" # else # include "msdos/doscfg.h" # endif # endif # if (defined(_MSC_VER) && (_MSC_VER == 700) && !defined(GRR)) /* * ARGH. MSC 7.0 libraries think times are based on 1899 Dec 31 00:00, not * 1970 Jan 1 00:00. So we have to diddle time_t's appropriately: add or * subtract 70 years' worth of seconds; i.e., number of days times 86400; * i.e., (70*365 regular days + 17 leap days + 1 1899 day) * 86400 == * (25550 + 17 + 1) * 86400 == 2209075200 seconds. We know time_t is an * unsigned long (ulg) on the only system with this bug. */ # define TIMET_TO_NATIVE(x) (x) += (ulg)2209075200L; # define NATIVE_TO_TIMET(x) (x) -= (ulg)2209075200L; # endif # if (defined(__BORLANDC__) && (__BORLANDC__ >= 0x0450)) # define timezone _timezone # endif # if (defined(__GO32__) || defined(FLEXOS)) # define DIR_END '/' # else # define DIR_END '\\' /* OS uses '\\' as directory separator */ # define DIR_END2 '/' /* also check for '/' (RTL may convert) */ # endif # ifdef DATE_FORMAT # undef DATE_FORMAT # endif # define DATE_FORMAT dateformat() # define lenEOL 2 # define PutNativeEOL {*q++ = native(CR); *q++ = native(LF);} # if (!defined(NO_EF_UT_TIME) && !defined(USE_EF_UT_TIME)) # define USE_EF_UT_TIME # endif #endif /* MSDOS || OS2 || FLEXOS */ /*--------------------------------------------------------------------------- MTS section (piggybacks UNIX, I think): ---------------------------------------------------------------------------*/ #ifdef MTS # include /* off_t, time_t, dev_t, ... */ # include # include /* MTS uses this instead of fcntl.h */ # include # include # include /* some important non-ANSI routines */ # define mkdir(s,n) (-1) /* no "make directory" capability */ # define EBCDIC /* set EBCDIC conversion on */ # define NO_STRNICMP /* unzip's is as good the one in MTS */ # define USE_FWRITE # define close_outfile() fclose(G.outfile) /* can't set time on files */ # define umask(n) /* don't have umask() on MTS */ # define FOPWT "w" /* open file for writing in TEXT mode */ # ifndef DATE_FORMAT # define DATE_FORMAT DF_MDY # endif # define lenEOL 1 # define PutNativeEOL *q++ = native(LF); #endif /* MTS */ /*--------------------------------------------------------------------------- Novell Netware NLM section ---------------------------------------------------------------------------*/ #ifdef NLM # include "netware/nlmcfg.h" #endif /*--------------------------------------------------------------------------- QDOS section ---------------------------------------------------------------------------*/ #ifdef QDOS # define DIRENT # include # include # include # include # include "qdos/izqdos.h" # ifndef DATE_FORMAT # define DATE_FORMAT DF_MDY # endif # define lenEOL 1 # define PutNativeEOL *q++ = native(LF); # define DIR_END '_' # define RETURN QReturn # undef PATH_MAX # define PATH_MAX 36 # if (!defined(NOTIMESTAMP) && !defined(TIMESTAMP)) # define TIMESTAMP # endif # define SCREENSIZE(ttrows, ttcols) screensize(ttrows, ttcols) # define SCREENWIDTH 80 #endif /*--------------------------------------------------------------------------- Tandem NSK section: ---------------------------------------------------------------------------*/ #ifdef TANDEM # include "tandem.h" # include # ifndef __INT32 /* We are compiling with non-WIDE memory model, int = 16 bits */ # ifndef INT_16BIT # define INT_16BIT /* report "int" size is 16-bit to inflate setup */ # endif # ifdef USE_DEFLATE64 /* Following required for 64k WSIZE of Deflate64 support */ # define MED_MEM /* else OUTBUFSIZ is 64K and fails in do_string */ # define INBUFSIZ 8192 /* but larger buffer for real OSes */ # endif # endif /* use a single LF delimiter so that writes to 101 text files work */ # define PutNativeEOL *q++ = native(LF); # define lenEOL 1 # ifndef DATE_FORMAT # define DATE_FORMAT DF_DMY # endif # define SCREENLINES 25 /* USE_EF_UT_TIME is set in tandem.h */ # define RESTORE_UIDGID # define NO_STRNICMP #endif /*--------------------------------------------------------------------------- THEOS section: ---------------------------------------------------------------------------*/ #ifdef THEOS # include "theos/thscfg.h" #endif /*--------------------------------------------------------------------------- TOPS-20 section: ---------------------------------------------------------------------------*/ #ifdef TOPS20 # include /* off_t, time_t, dev_t, ... */ # include # include # include # include # include # include # include /* get amazing monsym() macro */ extern int open(), close(), read(); extern int stat(), unlink(), jsys(), fcntl(); extern long lseek(), dup(), creat(); # define strchr index /* GRR: necessary? */ # define strrchr rindex # define REALLY_SHORT_SYMS # define NO_MKDIR # ifndef HAVE_STRNICMP # define NO_STRNICMP /* probably not provided by TOPS20 C RTL */ # endif # define DIR_BEG '<' # define DIR_END '>' # define DIR_EXT ".directory" # ifndef DATE_FORMAT # define DATE_FORMAT DF_MDY # endif # define EXE_EXTENSION ".exe" /* just a guess... */ #endif /* TOPS20 */ /*--------------------------------------------------------------------------- Unix section: ---------------------------------------------------------------------------*/ #ifdef UNIX # include "unix/unxcfg.h" #endif /* UNIX */ /*--------------------------------------------------------------------------- VM/CMS and MVS section: ---------------------------------------------------------------------------*/ #ifdef CMS_MVS # include "vmmvs.h" # define CLOSE_INFILE() close_infile(__G) #endif /*--------------------------------------------------------------------------- VMS section: ---------------------------------------------------------------------------*/ #ifdef VMS # include "vms/vmscfg.h" #endif /* VMS */ /*--------------------------------------------------------------------------- Win32 (Windows 95/NT) section: ---------------------------------------------------------------------------*/ #if (defined(WIN32) && !defined(POCKET_UNZIP) && !defined(_WIN32_WCE)) # include "win32/w32cfg.h" #endif /*--------------------------------------------------------------------------- Win32 Windows CE section (also POCKET_UNZIP) ---------------------------------------------------------------------------*/ #if (defined(_WIN32_WCE) || defined(POCKET_UNZIP)) # include "wince/wcecfg.h" #endif /* ---------------------------------------------------------------------------- MUST BE AFTER LARGE FILE INCLUDES ---------------------------------------------------------------------------- */ /* This stuff calls in types and messes up large file includes. It needs to go after large file defines in local includes. I am guessing that moving them here probably broke some ports, but hey. 10/31/2004 EG */ /* ---------------------------------------------------------------------------- Common includes ---------------------------------------------------------------------------- */ /* Some ports apply specific adjustments which must be in effect before reading the "standard" include headers. */ #ifdef EFT # define Z_OFF_T off_t /* Amdahl UTS nonsense ("extended file types") */ #else #if (defined(UNIX) && defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)) # define Z_OFF_T off_t /* 64bit offsets to support 2GB < zipfile size < 4GB */ #else # define Z_OFF_T long long #endif #endif #ifndef ZOFF_T_DEFINED typedef Z_OFF_T zoff_t; # define ZOFF_T_DEFINED #endif #ifndef Z_STAT_DEFINED typedef struct stat z_stat; # define Z_STAT_DEFINED #endif #ifndef MINIX /* Minix needs it after all the other includes (?) */ # include #endif #include /* skip for VMS, to use tolower() function? */ #include /* used in mapname() */ #ifdef USE_STRINGS_H # include /* strcpy, strcmp, memcpy, index/rindex, etc. */ #else # include /* strcpy, strcmp, memcpy, strchr/strrchr, etc. */ #endif #if (defined(MODERN) && !defined(NO_LIMITS_H)) # include /* MAX/MIN constant symbols for system types... */ #endif /* this include must be down here for SysV.4, for some reason... */ #include /* used in unzip.c, fileio.c */ #ifdef MODERN # ifndef NO_STDDEF_H # include # endif # ifndef NO_STDLIB_H # include /* standard library prototypes, malloc(), etc. */ # endif typedef size_t extent; #else /* !MODERN */ # ifndef AOS_VS /* mostly modern? */ Z_OFF_T lseek(); # ifdef VAXC /* not fully modern, but has stdlib.h and void */ # include # else char *malloc(); # endif /* ?VAXC */ # endif /* !AOS_VS */ typedef unsigned int extent; #endif /* ?MODERN */ /*************/ /* Defines */ /*************/ #define UNZIP_BZ2VERS 46 #ifdef ZIP64_SUPPORT # ifdef USE_BZIP2 # define UNZIP_VERSION UNZIP_BZ2VERS # else # define UNZIP_VERSION 45 # endif #else #ifdef USE_DEFLATE64 # define UNZIP_VERSION 21 /* compatible with PKUNZIP 4.0 */ #else # define UNZIP_VERSION 20 /* compatible with PKUNZIP 2.0 */ #endif #endif #define VMS_UNZIP_VERSION 42 /* if OS-needed-to-extract is VMS: can do */ #if (defined(MSDOS) || defined(OS2)) # define DOS_OS2 #endif #if (defined(OS2) || defined(WIN32)) # define OS2_W32 #endif #if (defined(DOS_OS2) || defined(WIN32)) # define DOS_OS2_W32 # define DOS_W32_OS2 /* historical: don't use */ #endif #if (defined(DOS_OS2_W32) || defined(__human68k__)) # define DOS_H68_OS2_W32 #endif #if (defined(DOS_OS2) || defined(FLEXOS)) # define DOS_FLX_OS2 #endif #if (defined(DOS_OS2_W32) || defined(FLEXOS)) # define DOS_FLX_OS2_W32 #endif #if (defined(DOS_H68_OS2_W32) || defined(FLEXOS)) # define DOS_FLX_H68_OS2_W32 #endif #if (defined(DOS_FLX_OS2) || defined(NLM)) # define DOS_FLX_NLM_OS2 #endif #if (defined(DOS_FLX_OS2_W32) || defined(NLM)) # define DOS_FLX_NLM_OS2_W32 #endif #if (defined(DOS_FLX_H68_OS2_W32) || defined(NLM)) # define DOS_FLX_H68_NLM_OS2_W32 #endif #if (defined(TOPS20) || defined(VMS)) # define T20_VMS #endif #if (defined(MSDOS) || defined(T20_VMS)) # define DOS_T20_VMS #endif #if (defined(__ATHEOS__) || defined(__BEOS__)) # define ATH_BEO #endif #if (defined(ATH_BEO) || defined(UNIX)) # define ATH_BEO_UNX #endif #if (defined(ATH_BEO_UNX) || defined(THEOS)) # define ATH_BEO_THS_UNX #endif /* clean up with a few defaults */ #ifndef DIR_END # define DIR_END '/' /* last char before program name or filename */ #endif #ifndef DATE_FORMAT # ifdef DATEFMT_ISO_DEFAULT # define DATE_FORMAT DF_YMD /* defaults to invariant ISO-style */ # else # define DATE_FORMAT DF_MDY /* defaults to US convention */ # endif #endif #ifndef DATE_SEPCHAR # define DATE_SEPCHAR '-' #endif #ifndef CLOSE_INFILE # define CLOSE_INFILE() close(G.zipfd) #endif #ifndef RETURN # define RETURN return /* only used in main() */ #endif #ifndef EXIT # define EXIT exit #endif #ifndef USAGE # define USAGE(ret) usage(__G__ (ret)) /* used in unzip.c, zipinfo.c */ #endif #ifndef TIMET_TO_NATIVE /* everybody but MSC 7.0 and Macintosh */ # define TIMET_TO_NATIVE(x) # define NATIVE_TO_TIMET(x) #endif #ifndef STRNICMP # ifdef NO_STRNICMP # define STRNICMP zstrnicmp # else # define STRNICMP strnicmp # endif #endif #if (defined(DOS_FLX_NLM_OS2_W32) || defined(ATH_BEO_UNX) || defined(RISCOS)) # ifndef HAVE_UNLINK # define HAVE_UNLINK # endif #endif #if (defined(AOS_VS) || defined(ATARI)) /* GRR: others? */ # ifndef HAVE_UNLINK # define HAVE_UNLINK # endif #endif /* OS-specific exceptions to the "ANSI <--> INT_SPRINTF" rule */ #if (!defined(PCHAR_SPRINTF) && !defined(INT_SPRINTF)) # if (defined(SYSV) || defined(CONVEX) || defined(NeXT) || defined(BSD4_4)) # define INT_SPRINTF /* sprintf() returns int: SysVish/Posix */ # endif # if (defined(DOS_FLX_NLM_OS2_W32) || defined(VMS) || defined(AMIGA)) # define INT_SPRINTF /* sprintf() returns int: ANSI */ # endif # if (defined(ultrix) || defined(__ultrix)) /* Ultrix 4.3 and newer */ # if (defined(POSIX) || defined(__POSIX)) # define INT_SPRINTF /* sprintf() returns int: ANSI/Posix */ # endif # ifdef __GNUC__ # define PCHAR_SPRINTF /* undetermined actual return value */ # endif # endif # if (defined(__osf__) || defined(_AIX) || defined(CMS_MVS) || defined(THEOS)) # define INT_SPRINTF /* sprintf() returns int: ANSI/Posix */ # endif # if defined(sun) # define PCHAR_SPRINTF /* sprintf() returns char *: SunOS cc *and* gcc */ # endif #endif /* defaults that we hope will take care of most machines in the future */ #if (!defined(PCHAR_SPRINTF) && !defined(INT_SPRINTF)) # ifdef __STDC__ # define INT_SPRINTF /* sprintf() returns int: ANSI */ # endif # ifndef INT_SPRINTF # define PCHAR_SPRINTF /* sprintf() returns char *: BSDish */ # endif #endif #define MSG_STDERR(f) (f & 1) /* bit 0: 0 = stdout, 1 = stderr */ #define MSG_INFO(f) ((f & 6) == 0) /* bits 1 and 2: 0 = info */ #define MSG_WARN(f) ((f & 6) == 2) /* bits 1 and 2: 1 = warning */ #define MSG_ERROR(f) ((f & 6) == 4) /* bits 1 and 2: 2 = error */ #define MSG_FATAL(f) ((f & 6) == 6) /* bits 1 and 2: (3 = fatal error) */ #define MSG_ZFN(f) (f & 0x0008) /* bit 3: 1 = print zipfile name */ #define MSG_FN(f) (f & 0x0010) /* bit 4: 1 = print filename */ #define MSG_LNEWLN(f) (f & 0x0020) /* bit 5: 1 = leading newline if !SOL */ #define MSG_TNEWLN(f) (f & 0x0040) /* bit 6: 1 = trailing newline if !SOL */ #define MSG_MNEWLN(f) (f & 0x0080) /* bit 7: 1 = trailing NL for prompts */ /* the following are subject to change */ #define MSG_NO_WGUI(f) (f & 0x0100) /* bit 8: 1 = skip if Windows GUI */ #define MSG_NO_AGUI(f) (f & 0x0200) /* bit 9: 1 = skip if Acorn GUI */ #define MSG_NO_DLL2(f) (f & 0x0400) /* bit 10: 1 = skip if OS/2 DLL */ #define MSG_NO_NDLL(f) (f & 0x0800) /* bit 11: 1 = skip if WIN32 DLL */ #define MSG_NO_WDLL(f) (f & 0x1000) /* bit 12: 1 = skip if Windows DLL */ #if (defined(MORE) && !defined(SCREENLINES)) # ifdef DOS_FLX_NLM_OS2_W32 # define SCREENLINES 25 /* can be (should be) a function instead */ # else # define SCREENLINES 24 /* VT-100s are assumed to be minimal hardware */ # endif #endif #if (defined(MORE) && !defined(SCREENSIZE)) # ifndef SCREENWIDTH # define SCREENSIZE(scrrows, scrcols) { \ if ((scrrows) != NULL) *(scrrows) = SCREENLINES; } # else # define SCREENSIZE(scrrows, scrcols) { \ if ((scrrows) != NULL) *(scrrows) = SCREENLINES; \ if ((scrcols) != NULL) *(scrcols) = SCREENWIDTH; } # endif #endif #if (defined(__16BIT__) || defined(MED_MEM) || defined(SMALL_MEM)) # define DIR_BLKSIZ 64 /* number of directory entries per block * (should fit in 4096 bytes, usually) */ #else # define DIR_BLKSIZ 16384 /* use more memory, to reduce long-range seeks */ #endif #ifndef WSIZE # ifdef USE_DEFLATE64 # define WSIZE 65536L /* window size--must be a power of two, and */ # else /* at least 64K for PKZip's deflate64 method */ # define WSIZE 0x8000 /* window size--must be a power of two, and */ # endif /* at least 32K for zip's deflate method */ #endif #ifdef __16BIT__ # ifndef INT_16BIT # define INT_16BIT /* on 16-bit systems int size is 16 bits */ # endif #else # define nearmalloc malloc # define nearfree free # if (!defined(__IBMC__) || !defined(OS2)) # ifndef near # define near # endif # ifndef far # define far # endif # endif #endif #if (defined(DYNALLOC_CRCTAB) && !defined(DYNAMIC_CRC_TABLE)) # undef DYNALLOC_CRCTAB #endif #if (defined(DYNALLOC_CRCTAB) && defined(REENTRANT)) # undef DYNALLOC_CRCTAB /* not safe with reentrant code */ #endif #if (defined(USE_ZLIB) && !defined(USE_OWN_CRCTAB)) # ifdef DYNALLOC_CRCTAB # undef DYNALLOC_CRCTAB # endif #endif #if (defined(USE_ZLIB) && defined(ASM_CRC)) # undef ASM_CRC #endif #ifdef USE_ZLIB # ifdef IZ_CRC_BE_OPTIMIZ # undef IZ_CRC_BE_OPTIMIZ # endif # ifdef IZ_CRC_LE_OPTIMIZ # undef IZ_CRC_LE_OPTIMIZ # endif #endif #if (!defined(IZ_CRC_BE_OPTIMIZ) && !defined(IZ_CRC_LE_OPTIMIZ)) # ifdef IZ_CRCOPTIM_UNFOLDTBL # undef IZ_CRCOPTIM_UNFOLDTBL # endif #endif #ifndef INBUFSIZ # if (defined(MED_MEM) || defined(SMALL_MEM)) # define INBUFSIZ 2048 /* works for MS-DOS small model */ # else # define INBUFSIZ 8192 /* larger buffers for real OSes */ # endif #endif #if (defined(INT_16BIT) && (defined(USE_DEFLATE64) || lenEOL > 1)) /* For environments using 16-bit integers OUTBUFSIZ must be limited to * less than 64k (do_string() uses "unsigned" in calculations involving * OUTBUFSIZ). This is achieved by defining MED_MEM when WSIZE = 64k (aka * Deflate64 support enabled) or EOL markers contain multiple characters. * (The rule gets applied AFTER the default rule for INBUFSIZ because it * is not neccessary to reduce INBUFSIZE in this case.) */ # if (!defined(SMALL_MEM) && !defined(MED_MEM)) # define MED_MEM # endif #endif /* Logic for case of small memory, length of EOL > 1: if OUTBUFSIZ == 2048, * OUTBUFSIZ>>1 == 1024 and OUTBUFSIZ>>7 == 16; therefore rawbuf is 1008 bytes * and transbuf 1040 bytes. Have room for 32 extra EOL chars; 1008/32 == 31.5 * chars/line, smaller than estimated 35-70 characters per line for C source * and normal text. Hence difference is sufficient for most "average" files. * (Argument scales for larger OUTBUFSIZ.) */ #ifdef SMALL_MEM /* i.e., 16-bit OSes: MS-DOS, OS/2 1.x, etc. */ # define LoadFarString(x) fLoadFarString(__G__ (x)) # define LoadFarStringSmall(x) fLoadFarStringSmall(__G__ (x)) # define LoadFarStringSmall2(x) fLoadFarStringSmall2(__G__ (x)) # if (defined(_MSC_VER) && (_MSC_VER >= 600)) # define zfstrcpy(dest, src) _fstrcpy((dest), (src)) # define zfstrcmp(s1, s2) _fstrcmp((s1), (s2)) # endif # if !(defined(SFX) || defined(FUNZIP)) # if (defined(_MSC_VER)) # define zfmalloc(sz) _fmalloc((sz)) # define zffree(x) _ffree(x) # endif # if (defined(__TURBOC__)) # include # define zfmalloc(sz) farmalloc((unsigned long)(sz)) # define zffree(x) farfree(x) # endif # endif /* !(SFX || FUNZIP) */ # ifndef Far # define Far far /* __far only works for MSC 6.00, not 6.0a or Borland */ # endif # define OUTBUFSIZ INBUFSIZ # if (lenEOL == 1) # define RAWBUFSIZ (OUTBUFSIZ>>1) # else # define RAWBUFSIZ ((OUTBUFSIZ>>1) - (OUTBUFSIZ>>7)) # endif # define TRANSBUFSIZ (OUTBUFSIZ-RAWBUFSIZ) typedef short shrint; /* short/int or "shrink int" (unshrink) */ #else # define zfstrcpy(dest, src) strcpy((dest), (src)) # define zfstrcmp(s1, s2) strcmp((s1), (s2)) # define zfmalloc malloc # define zffree(x) free(x) # ifdef QDOS # define LoadFarString(x) Qstrfix(x) /* fix up _ for '.' */ # define LoadFarStringSmall(x) Qstrfix(x) # define LoadFarStringSmall2(x) Qstrfix(x) # else # define LoadFarString(x) (char *)(x) # define LoadFarStringSmall(x) (char *)(x) # define LoadFarStringSmall2(x) (char *)(x) # endif # ifdef MED_MEM # define OUTBUFSIZ 0xFF80 /* can't malloc arrays of 0xFFE8 or more */ # define TRANSBUFSIZ 0xFF80 typedef short shrint; # else # define OUTBUFSIZ (lenEOL*WSIZE) /* more efficient text conversion */ # define TRANSBUFSIZ (lenEOL*OUTBUFSIZ) # ifdef AMIGA typedef short shrint; # else typedef int shrint; /* for efficiency/speed, we hope... */ # endif # endif /* ?MED_MEM */ # define RAWBUFSIZ OUTBUFSIZ #endif /* ?SMALL_MEM */ #ifndef Far # define Far #endif #ifndef Cdecl # define Cdecl #endif #ifndef MAIN # define MAIN main #endif #ifdef SFX /* disable some unused features for SFX executables */ # ifndef NO_ZIPINFO # define NO_ZIPINFO # endif # ifdef TIMESTAMP # undef TIMESTAMP # endif #endif #ifdef SFX # ifdef CHEAP_SFX_AUTORUN # ifndef NO_SFX_EXDIR # define NO_SFX_EXDIR # endif # endif # ifndef NO_SFX_EXDIR # ifndef SFX_EXDIR # define SFX_EXDIR # endif # else # ifdef SFX_EXDIR # undef SFX_EXDIR # endif # endif #endif /* user may have defined both by accident... NOTIMESTAMP takes precedence */ #if (defined(TIMESTAMP) && defined(NOTIMESTAMP)) # undef TIMESTAMP #endif #if (!defined(COPYRIGHT_CLEAN) && !defined(USE_SMITH_CODE)) # define COPYRIGHT_CLEAN #endif /* The LZW patent is expired worldwide since 2004-Jul-07, so USE_UNSHRINK * is now enabled by default. See unshrink.c. */ #if (!defined(LZW_CLEAN) && !defined(USE_UNSHRINK)) # define USE_UNSHRINK #endif #ifndef O_BINARY # define O_BINARY 0 #endif #ifndef PIPE_ERROR # ifndef EPIPE # define EPIPE -1 # endif # define PIPE_ERROR (errno == EPIPE) #endif /* File operations--use "b" for binary if allowed or fixed length 512 on VMS */ #ifdef VMS # define FOPR "r","ctx=stm" # define FOPM "r+","ctx=stm","rfm=fix","mrs=512" # define FOPW "w","ctx=stm","rfm=fix","mrs=512" # define FOPWR "w+","ctx=stm","rfm=fix","mrs=512" #endif /* VMS */ #ifdef CMS_MVS /* Binary files must be RECFM=F,LRECL=1 for ftell() to get correct pos */ /* ...unless byteseek is used. Let's try that for a while. */ # define FOPR "rb,byteseek" # define FOPM "r+b,byteseek" # ifdef MVS # define FOPW "wb,recfm=u,lrecl=32760,byteseek" /* New binary files */ # define FOPWE "wb" /* Existing binary files */ # define FOPWT "w,lrecl=133" /* New text files */ # define FOPWTE "w" /* Existing text files */ # else # define FOPW "wb,recfm=v,lrecl=32760" # define FOPWT "w" # endif #endif /* CMS_MVS */ #ifdef TOPS20 /* TOPS-20 MODERN? You kidding? */ # define FOPW "w8" #endif /* TOPS20 */ /* Defaults when nothing special has been defined previously. */ #ifdef MODERN # ifndef FOPR # define FOPR "rb" # endif # ifndef FOPM # define FOPM "r+b" # endif # ifndef FOPW # define FOPW "wb" # endif # ifndef FOPWT # define FOPWT "wt" # endif # ifndef FOPWR # define FOPWR "w+b" # endif #else /* !MODERN */ # ifndef FOPR # define FOPR "r" # endif # ifndef FOPM # define FOPM "r+" # endif # ifndef FOPW # define FOPW "w" # endif # ifndef FOPWT # define FOPWT "w" # endif # ifndef FOPWR # define FOPWR "w+" # endif #endif /* ?MODERN */ /* * If exists on most systems, should include that, since it may * define some or all of the following: NAME_MAX, PATH_MAX, _POSIX_NAME_MAX, * _POSIX_PATH_MAX. */ #ifdef DOS_FLX_NLM_OS2_W32 # include #endif /* 2008-07-22 SMS. * Unfortunately, on VMS, exists, and is included by * (so it's pretty much unavoidable), and it defines PATH_MAX to a fixed * short value (256, correct only for older systems without ODS-5 support), * rather than one based on the real RMS NAM[L] situation. So, we * artificially undefine it here, to allow our better-defined _MAX_PATH * (see vms/vmscfg.h) to be used. */ #ifdef VMS # undef PATH_MAX #endif #ifndef PATH_MAX # ifdef MAXPATHLEN # define PATH_MAX MAXPATHLEN /* in on some systems */ # else # ifdef _MAX_PATH # define PATH_MAX _MAX_PATH # else # if FILENAME_MAX > 255 # define PATH_MAX FILENAME_MAX /* used like PATH_MAX on some systems */ # else # define PATH_MAX 1024 # endif # endif /* ?_MAX_PATH */ # endif /* ?MAXPATHLEN */ #endif /* !PATH_MAX */ /* * buffer size required to hold the longest legal local filepath * (including the trailing '\0') */ #define FILNAMSIZ PATH_MAX #ifdef UNICODE_SUPPORT # if !(defined(UTF8_MAYBE_NATIVE) || defined(UNICODE_WCHAR)) # undef UNICODE_SUPPORT # endif #endif /* 2007-09-18 SMS. * Include here if it will be needed later for Unicode. * Otherwise, SETLOCALE may be defined here, and then defined again * (differently) when is read later. */ #ifdef UNICODE_SUPPORT # ifdef UNICODE_WCHAR # if !(defined(_WIN32_WCE) || defined(POCKET_UNZIP)) # include # endif # endif # ifndef _MBCS /* no need to include twice, see below */ # include # ifndef SETLOCALE # define SETLOCALE(category, locale) setlocale(category, locale) # endif # endif #endif /* UNICODE_SUPPORT */ /* DBCS support for Info-ZIP (mainly for japanese (-: ) * by Yoshioka Tsuneo (QWF00133@nifty.ne.jp,tsuneo-y@is.aist-nara.ac.jp) */ #ifdef _MBCS # include /* Multi Byte Character Set */ # define ___MBS_TMP_DEF char *___tmp_ptr; # define ___TMP_PTR ___tmp_ptr # ifndef CLEN # define NEED_UZMBCLEN # define CLEN(ptr) (int)uzmbclen((ZCONST unsigned char *)(ptr)) # endif # ifndef PREINCSTR # define PREINCSTR(ptr) (ptr += CLEN(ptr)) # endif # define POSTINCSTR(ptr) (___TMP_PTR=(char *)(ptr), PREINCSTR(ptr),___TMP_PTR) char *plastchar OF((ZCONST char *ptr, extent len)); # define lastchar(ptr, len) ((int)(unsigned)*plastchar(ptr, len)) # ifndef MBSCHR # define NEED_UZMBSCHR # define MBSCHR(str,c) (char *)uzmbschr((ZCONST unsigned char *)(str), c) # endif # ifndef MBSRCHR # define NEED_UZMBSRCHR # define MBSRCHR(str,c) (char *)uzmbsrchr((ZCONST unsigned char *)(str), c) # endif # ifndef SETLOCALE # define SETLOCALE(category, locale) setlocale(category, locale) # endif #else /* !_MBCS */ # define ___MBS_TMP_DEF # define ___TMP_PTR # define CLEN(ptr) 1 # define PREINCSTR(ptr) (++(ptr)) # define POSTINCSTR(ptr) ((ptr)++) # define plastchar(ptr, len) (&ptr[(len)-1]) # define lastchar(ptr, len) (ptr[(len)-1]) # define MBSCHR(str, c) strchr(str, c) # define MBSRCHR(str, c) strrchr(str, c) # ifndef SETLOCALE # define SETLOCALE(category, locale) # endif #endif /* ?_MBCS */ #define INCSTR(ptr) PREINCSTR(ptr) #if (defined(MALLOC_WORK) && !defined(MY_ZCALLOC)) /* Any system without a special calloc function */ # ifndef zcalloc # define zcalloc(items, size) \ (zvoid far *)calloc((unsigned)(items), (unsigned)(size)) # endif # ifndef zcfree # define zcfree free # endif #endif /* MALLOC_WORK && !MY_ZCALLOC */ #if (defined(CRAY) && defined(ZMEM)) # undef ZMEM #endif #ifdef ZMEM # undef ZMEM # define memcmp(b1,b2,len) bcmp(b2,b1,len) # define memcpy(dest,src,len) bcopy(src,dest,len) # define memzero bzero #else # define memzero(dest,len) memset(dest,0,len) #endif #ifndef TRUE # define TRUE 1 /* sort of obvious */ #endif #ifndef FALSE # define FALSE 0 #endif #ifndef SEEK_SET # define SEEK_SET 0 # define SEEK_CUR 1 # define SEEK_END 2 #endif #if (!defined(S_IEXEC) && defined(S_IXUSR)) # define S_IEXEC S_IXUSR #endif #if (defined(UNIX) && defined(S_IFLNK) && !defined(MTS)) # define SYMLINKS # ifndef S_ISLNK # define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) # endif #endif /* UNIX && S_IFLNK && !MTS */ #ifndef S_ISDIR # ifdef CMS_MVS # define S_ISDIR(m) (FALSE) # else # define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) # endif #endif #ifndef IS_VOLID # define IS_VOLID(m) ((m) & 0x08) #endif /***********************************/ /* LARGE_FILE_SUPPORT */ /***********************************/ /* This whole section lifted from Zip 3b tailor.h * Types are in OS dependent headers (eg, w32cfg.h) * * LARGE_FILE_SUPPORT and ZIP64_SUPPORT are automatically * set in OS dependent headers (for some ports) based on the port and compiler. * * Function prototypes are below as OF is defined earlier in this file * but after OS dependent header is included. * * E. Gordon 9/21/2003 * Updated 1/28/2004 * Lifted and placed here 6/7/2004 - Myles Bennett */ #ifdef LARGE_FILE_SUPPORT /* 64-bit Large File Support */ /* ---------------------------- */ # if defined(UNIX) || defined(VMS) /* 64-bit stat functions */ # define zstat stat # define zfstat fstat /* 64-bit fseeko */ # define zlseek lseek # define zfseeko fseeko /* 64-bit ftello */ # define zftello ftello /* 64-bit fopen */ # define zfopen fopen # define zfdopen fdopen # endif /* UNIX || VMS */ /* ---------------------------- */ # ifdef WIN32 # if defined(_MSC_VER) || defined(__MINGW32__) || defined(__LCC__) /* MS C (VC), MinGW GCC port and LCC-32 use the MS C Runtime lib */ /* 64-bit stat functions */ # define zstat _stati64 # define zfstat _fstati64 /* 64-bit lseek */ # define zlseek _lseeki64 # if defined(_MSC_VER) && (_MSC_VER >= 1400) /* Beginning with VS 8.0 (Visual Studio 2005, MSC 14), the Microsoft C rtl publishes its (previously internal) implmentations of "fseeko" and "ftello" for 64-bit file offsets. */ /* 64-bit fseeko */ # define zfseeko _fseeki64 /* 64-bit ftello */ # define zftello _ftelli64 # else /* not (defined(_MSC_VER) && (_MSC_VER >= 1400)) */ # if defined(__MSVCRT_VERSION__) && (__MSVCRT_VERSION__ >= 0x800) /* Up-to-date versions of MinGW define the macro __MSVCRT_VERSION__ to denote the version of the MS C rtl dll used for linking. When configured to link against the runtime of MS Visual Studio 8 (or newer), the built-in 64-bit fseek/ftell functions are available. */ /* 64-bit fseeko */ # define zfseeko _fseeki64 /* 64-bit ftello */ # define zftello _ftelli64 # else /* !(defined(__MSVCRT_VERSION__) && (__MSVCRT_VERSION__>=0x800)) */ /* The version of the C runtime is lower than MSC 14 or unknown. */ /* The newest MinGW port contains built-in extensions to the MSC rtl that provide fseeko and ftello, but our implementations will do for now. */ /* 64-bit fseeko */ int zfseeko OF((FILE *, zoff_t, int)); /* 64-bit ftello */ zoff_t zftello OF((FILE *)); # endif /* ? (__MSVCRT_VERSION__ >= 0x800) */ # endif /* ? (_MSC_VER >= 1400) */ /* 64-bit fopen */ # define zfopen fopen # define zfdopen fdopen # endif /* _MSC_VER || __MINGW__ || __LCC__ */ # ifdef __CYGWIN__ /* CYGWIN GCC Posix emulator on Windows (configuration not yet finished/tested) */ /* 64-bit stat functions */ # define zstat _stati64 # define zfstat _fstati64 /* 64-bit lseek */ # define zlseek _lseeki64 /* 64-bit fseeko */ # define zfseeko fseeko /* 64-bit ftello */ # define zftello ftello /* 64-bit fopen */ # define zfopen fopen # define zfdopen fdopen # endif # if defined(__WATCOMC__) || defined(__BORLANDC__) /* WATCOM C and Borland C provide their own C runtime libraries, but they are sufficiently compatible with MS CRTL. */ /* 64-bit stat functions */ # define zstat _stati64 # define zfstat _fstati64 # ifdef __WATCOMC__ /* 64-bit lseek */ # define zlseek _lseeki64 # endif /* 64-bit fseeko */ int zfseeko OF((FILE *, zoff_t, int)); /* 64-bit ftello */ zoff_t zftello OF((FILE *)); /* 64-bit fopen */ # define zfopen fopen # define zfdopen fdopen # endif # ifdef __IBMC__ /* IBM C */ /* 64-bit stat functions */ /* 64-bit fseeko */ /* 64-bit ftello */ /* 64-bit fopen */ # endif # endif /* WIN32 */ #else /* No Large File Support */ # ifndef REGULUS /* returns the inode number on success(!)...argh argh argh */ # define zstat stat # endif # define zfstat fstat # define zlseek lseek # define zfseeko fseek # define zftello ftell # define zfopen fopen # define zfdopen fdopen # if defined(UNIX) || defined(VMS) || defined(WIN32) /* For these systems, implement "64bit file vs. 32bit prog" check */ # ifndef DO_SAFECHECK_2GB # define DO_SAFECHECK_2GB # endif # endif #endif /* No "64bit file vs. 32bit prog" check for SFX stub, to save space */ #if (defined(DO_SAFECHECK_2GB) && defined(SFX)) # undef DO_SAFECHECK_2GB #endif #ifndef SSTAT # ifdef WILD_STAT_BUG # define SSTAT(path,pbuf) (iswild(path) || zstat(path,pbuf)) # else # define SSTAT zstat # endif #endif /* Default fzofft() format selection. */ #ifndef FZOFFT_FMT # ifdef LARGE_FILE_SUPPORT # define FZOFFT_FMT "ll" # define FZOFFT_HEX_WID_VALUE "16" # else /* def LARGE_FILE_SUPPORT */ # define FZOFFT_FMT "l" # define FZOFFT_HEX_WID_VALUE "8" # endif /* def LARGE_FILE_SUPPORT */ #endif /* ndef FZOFFT_FMT */ #define FZOFFT_HEX_WID ((char *) -1) #define FZOFFT_HEX_DOT_WID ((char *) -2) #define FZOFFT_NUM 4 /* Number of chambers. */ #define FZOFFT_LEN 24 /* Number of characters/chamber. */ #ifdef SHORT_SYMS /* Mark Williams C, ...? */ # define extract_or_test_files xtr_or_tst_files # define extract_or_test_member xtr_or_tst_member #endif #ifdef REALLY_SHORT_SYMS /* TOPS-20 linker: first 6 chars */ # define process_cdir_file_hdr XXpcdfh # define process_local_file_hdr XXplfh # define extract_or_test_files XXxotf /* necessary? */ # define extract_or_test_member XXxotm /* necessary? */ # define check_for_newer XXcfn # define overwrite_all XXoa # define process_all_files XXpaf # define extra_field XXef # define explode_lit8 XXel8 # define explode_lit4 XXel4 # define explode_nolit8 XXnl8 # define explode_nolit4 XXnl4 # define cpdist8 XXcpdist8 # define inflate_codes XXic # define inflate_stored XXis # define inflate_fixed XXif # define inflate_dynamic XXid # define inflate_block XXib # define maxcodemax XXmax #endif #ifndef S_TIME_T_MAX /* max value of signed (>= 32-bit) time_t */ # define S_TIME_T_MAX ((time_t)(ulg)0x7fffffffL) #endif #ifndef U_TIME_T_MAX /* max value of unsigned (>= 32-bit) time_t */ # define U_TIME_T_MAX ((time_t)(ulg)0xffffffffL) #endif #ifdef DOSTIME_MINIMUM /* min DOSTIME value (1980-01-01) */ # undef DOSTIME_MINIMUM #endif #define DOSTIME_MINIMUM ((ulg)0x00210000L) #ifdef DOSTIME_2038_01_18 /* approximate DOSTIME equivalent of */ # undef DOSTIME_2038_01_18 /* the signed-32-bit time_t limit */ #endif #define DOSTIME_2038_01_18 ((ulg)0x74320000L) #ifdef QDOS # define ZSUFX "_zip" # define ALT_ZSUFX ".zip" #else # ifdef RISCOS # define ZSUFX "/zip" # else # define ZSUFX ".zip" # endif # define ALT_ZSUFX ".ZIP" /* Unix-only so far (only case-sensitive fs) */ #endif #define CENTRAL_HDR_SIG "\001\002" /* the infamous "PK" signature bytes, */ #define LOCAL_HDR_SIG "\003\004" /* w/o "PK" (so unzip executable not */ #define END_CENTRAL_SIG "\005\006" /* mistaken for zipfile itself) */ #define EXTD_LOCAL_SIG "\007\010" /* [ASCII "\113" == EBCDIC "\080" ??] */ /** internal-only return codes **/ #define IZ_DIR 76 /* potential zipfile is a directory */ /* special return codes for mapname() */ #define MPN_OK 0 /* mapname successful */ #define MPN_INF_TRUNC (1<<8) /* caution - filename truncated */ #define MPN_INF_SKIP (2<<8) /* info - skipped because nothing to do */ #define MPN_ERR_SKIP (3<<8) /* error - entry skipped */ #define MPN_ERR_TOOLONG (4<<8) /* error - path too long */ #define MPN_NOMEM (10<<8) /* error - out of memory, file skipped */ #define MPN_CREATED_DIR (16<<8) /* directory created: set time & permission */ #define MPN_VOL_LABEL (17<<8) /* volume label, but can't set on hard disk */ #define MPN_INVALID (99<<8) /* internal logic error, should never reach */ /* mask for internal mapname&checkdir return codes */ #define MPN_MASK 0x7F00 /* error code for extracting/testing extra field blocks */ #define IZ_EF_TRUNC 79 /* local extra field truncated (PKZIP'd) */ /* choice of activities for do_string() */ #define SKIP 0 /* skip header block */ #define DISPLAY 1 /* display archive comment (ASCII) */ #define DISPL_8 5 /* display file comment (ext. ASCII) */ #define DS_FN 2 /* read filename (ext. ASCII, chead) */ #define DS_FN_C 2 /* read filename from central header */ #define DS_FN_L 6 /* read filename from local header */ #define EXTRA_FIELD 3 /* copy extra field into buffer */ #define DS_EF 3 #ifdef AMIGA # define FILENOTE 4 /* convert file comment to filenote */ #endif #if (defined(SFX) && defined(CHEAP_SFX_AUTORUN)) # define CHECK_AUTORUN 7 /* copy command, display remainder */ # define CHECK_AUTORUN_Q 8 /* copy command, skip remainder */ #endif #define DOES_NOT_EXIST -1 /* return values for check_for_newer() */ #define EXISTS_AND_OLDER 0 #define EXISTS_AND_NEWER 1 #define OVERWRT_QUERY 0 /* status values for G.overwrite_mode */ #define OVERWRT_ALWAYS 1 #define OVERWRT_NEVER 2 #define IS_OVERWRT_ALL (G.overwrite_mode == OVERWRT_ALWAYS) #define IS_OVERWRT_NONE (G.overwrite_mode == OVERWRT_NEVER) #ifdef VMS /* return codes for VMS-specific open_outfile() function */ # define OPENOUT_OK 0 /* file openend normally */ # define OPENOUT_FAILED 1 /* file open failed */ # define OPENOUT_SKIPOK 2 /* file not opened, skip at error level OK */ # define OPENOUT_SKIPWARN 3 /* file not opened, skip at error level WARN */ #endif /* VMS */ #define ROOT 0 /* checkdir() extract-to path: called once */ #define INIT 1 /* allocate buildpath: called once per member */ #define APPEND_DIR 2 /* append a dir comp.: many times per member */ #define APPEND_NAME 3 /* append actual filename: once per member */ #define GETPATH 4 /* retrieve the complete path and free it */ #define END 5 /* free root path prior to exiting program */ /* version_made_by codes (central dir): make sure these */ /* are not defined on their respective systems!! */ #define FS_FAT_ 0 /* filesystem used by MS-DOS, OS/2, Win32 */ #define AMIGA_ 1 #define VMS_ 2 #define UNIX_ 3 #define VM_CMS_ 4 #define ATARI_ 5 /* what if it's a minix filesystem? [cjh] */ #define FS_HPFS_ 6 /* filesystem used by OS/2 (and NT 3.x) */ #define MAC_ 7 /* HFS filesystem used by MacOS */ #define Z_SYSTEM_ 8 #define CPM_ 9 #define TOPS20_ 10 #define FS_NTFS_ 11 /* filesystem used by Windows NT */ #define QDOS_ 12 #define ACORN_ 13 /* Archimedes Acorn RISC OS */ #define FS_VFAT_ 14 /* filesystem used by Windows 95, NT */ #define MVS_ 15 #define BEOS_ 16 /* hybrid POSIX/database filesystem */ #define TANDEM_ 17 /* Tandem NSK */ #define THEOS_ 18 /* THEOS */ #define MAC_OSX_ 19 /* Mac OS/X (Darwin) */ #define ATHEOS_ 30 /* AtheOS */ #define NUM_HOSTS 31 /* index of last system + 1 */ /* don't forget to update zipinfo.c appropiately if NUM_HOSTS changes! */ #define STORED 0 /* compression methods */ #define SHRUNK 1 #define REDUCED1 2 #define REDUCED2 3 #define REDUCED3 4 #define REDUCED4 5 #define IMPLODED 6 #define TOKENIZED 7 #define DEFLATED 8 #define ENHDEFLATED 9 #define DCLIMPLODED 10 #define BZIPPED 12 #define LZMAED 14 #define IBMTERSED 18 #define IBMLZ77ED 19 #define WAVPACKED 97 #define PPMDED 98 #define NUM_METHODS 17 /* number of known method IDs */ /* don't forget to update list.c (list_files()), extract.c and zipinfo.c * appropriately if NUM_METHODS changes */ /* (the PK-class error codes are public and have been moved into unzip.h) */ #define DF_MDY 0 /* date format 10/26/91 (USA only) */ #define DF_DMY 1 /* date format 26/10/91 (most of the world) */ #define DF_YMD 2 /* date format 91/10/26 (a few countries) */ /*--------------------------------------------------------------------------- Extra-field block ID values and offset info. ---------------------------------------------------------------------------*/ /* extra-field ID values, all little-endian: */ #define EF_PKSZ64 0x0001 /* PKWARE's 64-bit filesize extensions */ #define EF_AV 0x0007 /* PKWARE's authenticity verification */ #define EF_EFS 0x0008 /* PKWARE's extended language encoding */ #define EF_OS2 0x0009 /* OS/2 extended attributes */ #define EF_PKW32 0x000a /* PKWARE's Win95/98/WinNT filetimes */ #define EF_PKVMS 0x000c /* PKWARE's VMS */ #define EF_PKUNIX 0x000d /* PKWARE's Unix */ #define EF_PKFORK 0x000e /* PKWARE's future stream/fork descriptors */ #define EF_PKPATCH 0x000f /* PKWARE's patch descriptor */ #define EF_PKPKCS7 0x0014 /* PKWARE's PKCS#7 store for X.509 Certs */ #define EF_PKFX509 0x0015 /* PKWARE's file X.509 Cert&Signature ID */ #define EF_PKCX509 0x0016 /* PKWARE's central dir X.509 Cert ID */ #define EF_PKENCRHD 0x0017 /* PKWARE's Strong Encryption header */ #define EF_PKRMCTL 0x0018 /* PKWARE's Record Management Controls*/ #define EF_PKLSTCS7 0x0019 /* PKWARE's PKCS#7 Encr. Recipient Cert List */ #define EF_PKIBM 0x0065 /* PKWARE's IBM S/390 & AS/400 attributes */ #define EF_PKIBM2 0x0066 /* PKWARE's IBM S/390 & AS/400 compr. attribs */ #define EF_IZVMS 0x4d49 /* Info-ZIP's VMS ("IM") */ #define EF_IZUNIX 0x5855 /* Info-ZIP's first Unix[1] ("UX") */ #define EF_IZUNIX2 0x7855 /* Info-ZIP's second Unix[2] ("Ux") */ #define EF_IZUNIX3 0x7875 /* Info-ZIP's newest Unix[3] ("ux") */ #define EF_TIME 0x5455 /* universal timestamp ("UT") */ #define EF_UNIPATH 0x7075 /* Info-ZIP Unicode Path ("up") */ #define EF_UNICOMNT 0x6375 /* Info-ZIP Unicode Comment ("uc") */ #define EF_MAC3 0x334d /* Info-ZIP's new Macintosh (= "M3") */ #define EF_JLMAC 0x07c8 /* Johnny Lee's old Macintosh (= 1992) */ #define EF_ZIPIT 0x2605 /* Thomas Brown's Macintosh (ZipIt) */ #define EF_ZIPIT2 0x2705 /* T. Brown's Mac (ZipIt) v 1.3.8 and newer ? */ #define EF_SMARTZIP 0x4d63 /* Mac SmartZip by Marco Bambini */ #define EF_VMCMS 0x4704 /* Info-ZIP's VM/CMS ("\004G") */ #define EF_MVS 0x470f /* Info-ZIP's MVS ("\017G") */ #define EF_ACL 0x4c41 /* (OS/2) access control list ("AL") */ #define EF_NTSD 0x4453 /* NT security descriptor ("SD") */ #define EF_ATHEOS 0x7441 /* AtheOS ("At") */ #define EF_BEOS 0x6542 /* BeOS ("Be") */ #define EF_QDOS 0xfb4a /* SMS/QDOS ("J\373") */ #define EF_AOSVS 0x5356 /* AOS/VS ("VS") */ #define EF_SPARK 0x4341 /* David Pilling's Acorn/SparkFS ("AC") */ #define EF_TANDEM 0x4154 /* Tandem NSK ("TA") */ #define EF_THEOS 0x6854 /* Jean-Michel Dubois' Theos "Th" */ #define EF_THEOSO 0x4854 /* old Theos port */ #define EF_MD5 0x4b46 /* Fred Kantor's MD5 ("FK") */ #define EF_ASIUNIX 0x756e /* ASi's Unix ("nu") */ #define EB_HEADSIZE 4 /* length of extra field block header */ #define EB_ID 0 /* offset of block ID in header */ #define EB_LEN 2 /* offset of data length field in header */ #define EB_UCSIZE_P 0 /* offset of ucsize field in compr. data */ #define EB_CMPRHEADLEN 6 /* lenght of compression header */ #define EB_UX_MINLEN 8 /* minimal "UX" field contains atime, mtime */ #define EB_UX_FULLSIZE 12 /* full "UX" field (atime, mtime, uid, gid) */ #define EB_UX_ATIME 0 /* offset of atime in "UX" extra field data */ #define EB_UX_MTIME 4 /* offset of mtime in "UX" extra field data */ #define EB_UX_UID 8 /* byte offset of UID in "UX" field data */ #define EB_UX_GID 10 /* byte offset of GID in "UX" field data */ #define EB_UX2_MINLEN 4 /* minimal "Ux" field contains UID/GID */ #define EB_UX2_UID 0 /* byte offset of UID in "Ux" field data */ #define EB_UX2_GID 2 /* byte offset of GID in "Ux" field data */ #define EB_UX2_VALID (1 << 8) /* UID/GID present */ #define EB_UX3_MINLEN 7 /* minimal "ux" field size (2-byte UID/GID) */ #define EB_UT_MINLEN 1 /* minimal UT field contains Flags byte */ #define EB_UT_FLAGS 0 /* byte offset of Flags field */ #define EB_UT_TIME1 1 /* byte offset of 1st time value */ #define EB_UT_FL_MTIME (1 << 0) /* mtime present */ #define EB_UT_FL_ATIME (1 << 1) /* atime present */ #define EB_UT_FL_CTIME (1 << 2) /* ctime present */ #define EB_FLGS_OFFS 4 /* offset of flags area in generic compressed extra field blocks (BEOS, MAC, and others) */ #define EB_OS2_HLEN 4 /* size of OS2/ACL compressed data header */ #define EB_BEOS_HLEN 5 /* length of BeOS&AtheOS e.f attribute header */ #define EB_BE_FL_UNCMPR 0x01 /* "BeOS&AtheOS attribs uncompr." bit flag */ #define EB_MAC3_HLEN 14 /* length of Mac3 attribute block header */ #define EB_SMARTZIP_HLEN 64 /* fixed length of the SmartZip extra field */ #define EB_M3_FL_DATFRK 0x01 /* "this entry is data fork" flag */ #define EB_M3_FL_UNCMPR 0x04 /* "Mac3 attributes uncompressed" bit flag */ #define EB_M3_FL_TIME64 0x08 /* "Mac3 time fields are 64 bit wide" flag */ #define EB_M3_FL_NOUTC 0x10 /* "Mac3 timezone offset fields missing" flag */ #define EB_NTSD_C_LEN 4 /* length of central NT security data */ #define EB_NTSD_L_LEN 5 /* length of minimal local NT security data */ #define EB_NTSD_VERSION 4 /* offset of NTSD version byte */ #define EB_NTSD_MAX_VER (0) /* maximum version # we know how to handle */ #define EB_ASI_CRC32 0 /* offset of ASI Unix field's crc32 checksum */ #define EB_ASI_MODE 4 /* offset of ASI Unix permission mode field */ #define EB_IZVMS_HLEN 12 /* length of IZVMS attribute block header */ #define EB_IZVMS_FLGS 4 /* offset of compression type flag */ #define EB_IZVMS_UCSIZ 6 /* offset of ucsize field in IZVMS header */ #define EB_IZVMS_BCMASK 07 /* 3 bits for compression type */ #define EB_IZVMS_BCSTOR 0 /* Stored */ #define EB_IZVMS_BC00 1 /* 0byte -> 0bit compression */ #define EB_IZVMS_BCDEFL 2 /* Deflated */ /*--------------------------------------------------------------------------- True sizes of the various headers (excluding their 4-byte signatures), as defined by PKWARE--so it is not likely that these will ever change. But if they do, make sure both these defines AND the typedefs below get updated accordingly. 12/27/2006 The Zip64 End Of Central Directory record is variable size and now comes in two flavors, version 1 and the new version 2 that supports central directory encryption. We only use the old fields at the top of the Zip64 EOCDR, and this block is a fixed size still, but need to be aware of the stuff following. ---------------------------------------------------------------------------*/ #define LREC_SIZE 26 /* lengths of local file headers, central */ #define CREC_SIZE 42 /* directory headers, end-of-central-dir */ #define ECREC_SIZE 18 /* record, zip64 end-of-cent-dir locator */ #define ECLOC64_SIZE 16 /* and zip64 end-of-central-dir record, */ #define ECREC64_SIZE 52 /* respectively */ #define MAX_BITS 13 /* used in unshrink() */ #define HSIZE (1 << MAX_BITS) /* size of global work area */ #define LF 10 /* '\n' on ASCII machines; must be 10 due to EBCDIC */ #define CR 13 /* '\r' on ASCII machines; must be 13 due to EBCDIC */ #define CTRLZ 26 /* DOS & OS/2 EOF marker (used in fileio.c, vms.c) */ #ifdef EBCDIC # define foreign(c) ascii[(uch)(c)] # define native(c) ebcdic[(uch)(c)] # define NATIVE "EBCDIC" # define NOANSIFILT #endif #ifdef VMS # define ENV_UNZIP "UNZIP_OPTS" /* names of environment variables */ # define ENV_ZIPINFO "ZIPINFO_OPTS" #endif /* VMS */ #ifdef RISCOS # define ENV_UNZIP "Unzip$Options" # define ENV_ZIPINFO "Zipinfo$Options" # define ENV_UNZIPEXTS "Unzip$Exts" #endif /* RISCOS */ #ifndef ENV_UNZIP # define ENV_UNZIP "UNZIP" /* the standard names */ # define ENV_ZIPINFO "ZIPINFO" #endif #define ENV_UNZIP2 "UNZIPOPT" /* alternate names, for zip compat. */ #define ENV_ZIPINFO2 "ZIPINFOOPT" #if (!defined(QQ) && !defined(NOQQ)) # define QQ #endif #ifdef QQ /* Newtware version: no file */ # define QCOND (!uO.qflag) /* comments with -vq or -vqq */ #else /* Bill Davidsen version: no way to */ # define QCOND (longhdr) /* kill file comments when listing */ #endif #ifdef OLD_QQ # define QCOND2 (uO.qflag < 2) #else # define QCOND2 (!uO.qflag) #endif #ifdef WILD_STOP_AT_DIR # define __WDLPRO , int sepc # define __WDL , sepc # define __WDLDEF int sepc; # define WISEP , (uO.W_flag ? '/' : '\0') #else # define __WDLPRO # define __WDL # define __WDLDEF # define WISEP #endif /**************/ /* Typedefs */ /**************/ #ifdef ZIP64_SUPPORT # ifndef Z_UINT8_DEFINED # if (defined(__GNUC__) || defined(__hpux) || defined(__SUNPRO_C)) typedef unsigned long long z_uint8; # else typedef unsigned __int64 z_uint8; # endif # define Z_UINT8_DEFINED # endif #endif #ifndef Z_UINT4_DEFINED # if (defined(MODERN) && !defined(NO_LIMITS_H)) # if (defined(UINT_MAX) && (UINT_MAX == 0xffffffffUL)) typedef unsigned int z_uint4; # define Z_UINT4_DEFINED # else # if (defined(ULONG_MAX) && (ULONG_MAX == 0xffffffffUL)) typedef unsigned long z_uint4; # define Z_UINT4_DEFINED # else # if (defined(USHRT_MAX) && (USHRT_MAX == 0xffffffffUL)) typedef unsigned short z_uint4; # define Z_UINT4_DEFINED # endif # endif # endif # endif /* MODERN && !NO_LIMITS_H */ #endif /* !Z_UINT4_DEFINED */ #ifndef Z_UINT4_DEFINED typedef ulg z_uint4; # define Z_UINT4_DEFINED #endif /* The following three user-defined unsigned integer types are used for holding zipfile entities (required widths without / with Zip64 support): a) sizes and offset of zipfile entries (4 bytes / 8 bytes) b) enumeration and counts of zipfile entries (2 bytes / 8 bytes) Remark: internally, we use 4 bytes for archive member counting in the No-Zip64 case, because UnZip supports more than 64k entries for classic Zip archives without Zip64 extensions. c) enumeration and counts of zipfile volumes of multivolume archives (2 bytes / 4 bytes) */ #ifdef ZIP64_SUPPORT typedef z_uint8 zusz_t; /* zipentry sizes & offsets */ typedef z_uint8 zucn_t; /* archive entry counts */ typedef z_uint4 zuvl_t; /* multivolume numbers */ # define MASK_ZUCN64 (~(zucn_t)0) /* In case we ever get to support an environment where z_uint8 may be WIDER than 64 bit wide, we will have to apply a construct similar to #define MASK_ZUCN64 (~(zucn_t)0 & (zucn_t)0xffffffffffffffffULL) for the 64-bit mask. */ #else typedef ulg zusz_t; /* zipentry sizes & offsets */ typedef unsigned int zucn_t; /* archive entry counts */ typedef unsigned short zuvl_t; /* multivolume numbers */ # define MASK_ZUCN64 (~(zucn_t)0) #endif #define MASK_ZUCN16 ((zucn_t)0xFFFF) #ifdef NO_UID_GID # ifdef UID_USHORT typedef unsigned short uid_t; /* TI SysV.3 */ typedef unsigned short gid_t; # else typedef unsigned int uid_t; /* SCO Xenix */ typedef unsigned int gid_t; # endif #endif #if (defined(GOT_UTIMBUF) || defined(sgi) || defined(ATARI)) typedef struct utimbuf ztimbuf; #else typedef struct ztimbuf { time_t actime; /* new access time */ time_t modtime; /* new modification time */ } ztimbuf; #endif typedef struct iztimes { time_t atime; /* new access time */ time_t mtime; /* new modification time */ time_t ctime; /* used for creation time; NOT same as st_ctime */ } iztimes; #ifdef SET_DIR_ATTRIB typedef struct direntry { /* head of system-specific struct holding */ struct direntry *next; /* defered directory attributes info */ char *fn; /* filename of directory */ char buf[1]; /* start of system-specific internal data */ } direntry; #endif /* SET_DIR_ATTRIB */ #ifdef SYMLINKS typedef struct slinkentry { /* info for deferred symlink creation */ struct slinkentry *next; /* pointer to next entry in chain */ extent targetlen; /* length of target filespec */ extent attriblen; /* length of system-specific attrib data */ char *target; /* pointer to target filespec */ char *fname; /* pointer to name of link */ char buf[1]; /* data/name/link buffer */ } slinkentry; #endif /* SYMLINKS */ typedef struct min_info { zoff_t offset; zusz_t compr_size; /* compressed size (needed if extended header) */ zusz_t uncompr_size; /* uncompressed size (needed if extended header) */ ulg crc; /* crc (needed if extended header) */ zuvl_t diskstart; /* no of volume where this entry starts */ uch hostver; uch hostnum; unsigned file_attr; /* local flavor, as used by creat(), chmod()... */ unsigned encrypted : 1; /* file encrypted: decrypt before uncompressing */ unsigned ExtLocHdr : 1; /* use time instead of CRC for decrypt check */ unsigned textfile : 1; /* file is text (according to zip) */ unsigned textmode : 1; /* file is to be extracted as text */ unsigned lcflag : 1; /* convert filename to lowercase */ unsigned vollabel : 1; /* "file" is an MS-DOS volume (disk) label */ #ifdef SYMLINKS unsigned symlink : 1; /* file is a symbolic link */ #endif unsigned HasUxAtt : 1; /* crec ext_file_attr has Unix style mode bits */ #ifdef UNICODE_SUPPORT unsigned GPFIsUTF8: 1; /* crec gen_purpose_flag UTF-8 bit 11 is set */ #endif #ifndef SFX char Far *cfilname; /* central header version of filename */ #endif } min_info; typedef struct VMStimbuf { char *revdate; /* (both roughly correspond to Unix modtime/st_mtime) */ char *credate; } VMStimbuf; /*--------------------------------------------------------------------------- Zipfile work area declarations. ---------------------------------------------------------------------------*/ #ifdef MALLOC_WORK union work { struct { /* unshrink(): */ shrint *Parent; /* pointer to (8192 * sizeof(shrint)) */ uch *value; /* pointer to 8KB char buffer */ uch *Stack; /* pointer to another 8KB char buffer */ } shrink; uch *Slide; /* explode(), inflate(), unreduce() */ }; #else /* !MALLOC_WORK */ union work { struct { /* unshrink(): */ shrint Parent[HSIZE]; /* (8192 * sizeof(shrint)) == 16KB minimum */ uch value[HSIZE]; /* 8KB */ uch Stack[HSIZE]; /* 8KB */ } shrink; /* total = 32KB minimum; 80KB on Cray/Alpha */ uch Slide[WSIZE]; /* explode(), inflate(), unreduce() */ }; #endif /* ?MALLOC_WORK */ #define slide G.area.Slide #if (defined(DLL) && !defined(NO_SLIDE_REDIR)) # define redirSlide G.redirect_sldptr #else # define redirSlide G.area.Slide #endif /*--------------------------------------------------------------------------- Zipfile layout declarations. If these headers ever change, make sure the xxREC_SIZE defines (above) change with them! ---------------------------------------------------------------------------*/ typedef uch local_byte_hdr[ LREC_SIZE ]; # define L_VERSION_NEEDED_TO_EXTRACT_0 0 # define L_VERSION_NEEDED_TO_EXTRACT_1 1 # define L_GENERAL_PURPOSE_BIT_FLAG 2 # define L_COMPRESSION_METHOD 4 # define L_LAST_MOD_DOS_DATETIME 6 # define L_CRC32 10 # define L_COMPRESSED_SIZE 14 # define L_UNCOMPRESSED_SIZE 18 # define L_FILENAME_LENGTH 22 # define L_EXTRA_FIELD_LENGTH 24 typedef uch cdir_byte_hdr[ CREC_SIZE ]; # define C_VERSION_MADE_BY_0 0 # define C_VERSION_MADE_BY_1 1 # define C_VERSION_NEEDED_TO_EXTRACT_0 2 # define C_VERSION_NEEDED_TO_EXTRACT_1 3 # define C_GENERAL_PURPOSE_BIT_FLAG 4 # define C_COMPRESSION_METHOD 6 # define C_LAST_MOD_DOS_DATETIME 8 # define C_CRC32 12 # define C_COMPRESSED_SIZE 16 # define C_UNCOMPRESSED_SIZE 20 # define C_FILENAME_LENGTH 24 # define C_EXTRA_FIELD_LENGTH 26 # define C_FILE_COMMENT_LENGTH 28 # define C_DISK_NUMBER_START 30 # define C_INTERNAL_FILE_ATTRIBUTES 32 # define C_EXTERNAL_FILE_ATTRIBUTES 34 # define C_RELATIVE_OFFSET_LOCAL_HEADER 38 typedef uch ec_byte_rec[ ECREC_SIZE+4 ]; /* define SIGNATURE 0 space-holder only */ # define NUMBER_THIS_DISK 4 # define NUM_DISK_WITH_START_CEN_DIR 6 # define NUM_ENTRIES_CEN_DIR_THS_DISK 8 # define TOTAL_ENTRIES_CENTRAL_DIR 10 # define SIZE_CENTRAL_DIRECTORY 12 # define OFFSET_START_CENTRAL_DIRECTORY 16 # define ZIPFILE_COMMENT_LENGTH 20 typedef uch ec_byte_loc64[ ECLOC64_SIZE+4 ]; # define NUM_DISK_START_EOCDR64 4 # define OFFSET_START_EOCDR64 8 # define NUM_THIS_DISK_LOC64 16 typedef uch ec_byte_rec64[ ECREC64_SIZE+4 ]; # define ECREC64_LENGTH 4 # define EC_VERSION_MADE_BY_0 12 # define EC_VERSION_NEEDED_0 14 # define NUMBER_THIS_DSK_REC64 16 # define NUM_DISK_START_CEN_DIR64 20 # define NUM_ENTRIES_CEN_DIR_THS_DISK64 24 # define TOTAL_ENTRIES_CENTRAL_DIR64 32 # define SIZE_CENTRAL_DIRECTORY64 40 # define OFFSET_START_CENTRAL_DIRECT64 48 /* The following structs are used to hold all header data of a zip entry. Traditionally, the structs' layouts followed the data layout of the corresponding zipfile header structures. However, the zipfile header layouts were designed in the old ages of 16-bit CPUs, they are subject to structure padding and/or alignment issues on newer systems with a "natural word width" of more than 2 bytes. Please note that the structure members are now reordered by size (top-down), to prevent internal padding and optimize memory usage! */ typedef struct local_file_header { /* LOCAL */ zusz_t csize; zusz_t ucsize; ulg last_mod_dos_datetime; ulg crc32; uch version_needed_to_extract[2]; ush general_purpose_bit_flag; ush compression_method; ush filename_length; ush extra_field_length; } local_file_hdr; typedef struct central_directory_file_header { /* CENTRAL */ zusz_t csize; zusz_t ucsize; zusz_t relative_offset_local_header; ulg last_mod_dos_datetime; ulg crc32; ulg external_file_attributes; zuvl_t disk_number_start; ush internal_file_attributes; uch version_made_by[2]; uch version_needed_to_extract[2]; ush general_purpose_bit_flag; ush compression_method; ush filename_length; ush extra_field_length; ush file_comment_length; } cdir_file_hdr; typedef struct end_central_dir_record { /* END CENTRAL */ zusz_t size_central_directory; zusz_t offset_start_central_directory; zucn_t num_entries_centrl_dir_ths_disk; zucn_t total_entries_central_dir; zuvl_t number_this_disk; zuvl_t num_disk_start_cdir; int have_ecr64; /* valid Zip64 ecdir-record exists */ int is_zip64_archive; /* Zip64 ecdir-record is mandatory */ ush zipfile_comment_length; } ecdir_rec; /* Huffman code lookup table entry--this entry is four bytes for machines that have 16-bit pointers (e.g. PC's in the small or medium model). Valid extra bits are 0..16. e == 31 is EOB (end of block), e == 32 means that v is a literal, 32 < e < 64 means that v is a pointer to the next table, which codes (e & 31) bits, and lastly e == 99 indicates an unused code. If a code with e == 99 is looked up, this implies an error in the data. */ struct huft { uch e; /* number of extra bits or operation */ uch b; /* number of bits in this code or subcode */ union { ush n; /* literal, length base, or distance base */ struct huft *t; /* pointer to next level of table */ } v; }; typedef struct _APIDocStruct { char *compare; char *function; char *syntax; char *purpose; } APIDocStruct; /*************/ /* Globals */ /*************/ #if (defined(OS2) && !defined(FUNZIP)) # include "os2/os2data.h" #endif #include "globals.h" /*************************/ /* Function Prototypes */ /*************************/ /*--------------------------------------------------------------------------- Functions in unzip.c (initialization routines): ---------------------------------------------------------------------------*/ #ifndef WINDLL int MAIN OF((int argc, char **argv)); int unzip OF((__GPRO__ int argc, char **argv)); int uz_opts OF((__GPRO__ int *pargc, char ***pargv)); int usage OF((__GPRO__ int error)); #endif /* !WINDLL */ /*--------------------------------------------------------------------------- Functions in process.c (main driver routines): ---------------------------------------------------------------------------*/ int process_zipfiles OF((__GPRO)); void free_G_buffers OF((__GPRO)); /* static int do_seekable OF((__GPRO__ int lastchance)); */ /* static int find_ecrec OF((__GPRO__ long searchlen)); */ /* static int process_central_comment OF((__GPRO)); */ int process_cdir_file_hdr OF((__GPRO)); int process_local_file_hdr OF((__GPRO)); int getZip64Data OF((__GPRO__ ZCONST uch *ef_buf, unsigned ef_len)); #ifdef UNICODE_SUPPORT int getUnicodeData OF((__GPRO__ ZCONST uch *ef_buf, unsigned ef_len)); #endif unsigned ef_scan_for_izux OF((ZCONST uch *ef_buf, unsigned ef_len, int ef_is_c, ulg dos_mdatetime, iztimes *z_utim, ulg *z_uidgid)); #if (defined(RISCOS) || defined(ACORN_FTYPE_NFS)) zvoid *getRISCOSexfield OF((ZCONST uch *ef_buf, unsigned ef_len)); #endif #ifndef SFX /*--------------------------------------------------------------------------- Functions in zipinfo.c (`zipinfo-style' listing routines): ---------------------------------------------------------------------------*/ #ifndef NO_ZIPINFO #ifndef WINDLL int zi_opts OF((__GPRO__ int *pargc, char ***pargv)); #endif void zi_end_central OF((__GPRO)); int zipinfo OF((__GPRO)); /* static int zi_long OF((__GPRO__ zusz_t *pEndprev)); */ /* static int zi_short OF((__GPRO)); */ /* static char *zi_time OF((__GPRO__ ZCONST ulg *datetimez, ZCONST time_t *modtimez, char *d_t_str));*/ #endif /* !NO_ZIPINFO */ /*--------------------------------------------------------------------------- Functions in list.c (generic zipfile-listing routines): ---------------------------------------------------------------------------*/ int list_files OF((__GPRO)); #ifdef TIMESTAMP int get_time_stamp OF((__GPRO__ time_t *last_modtime, ulg *nmember)); #endif int ratio OF((zusz_t uc, zusz_t c)); void fnprint OF((__GPRO)); #endif /* !SFX */ /*--------------------------------------------------------------------------- Functions in fileio.c: ---------------------------------------------------------------------------*/ int open_input_file OF((__GPRO)); int open_outfile OF((__GPRO)); /* also vms.c */ void undefer_input OF((__GPRO)); void defer_leftover_input OF((__GPRO)); unsigned readbuf OF((__GPRO__ char *buf, register unsigned len)); int readbyte OF((__GPRO)); int fillinbuf OF((__GPRO)); int seek_zipf OF((__GPRO__ zoff_t abs_offset)); #ifdef FUNZIP int flush OF((__GPRO__ ulg size)); /* actually funzip.c */ #else int flush OF((__GPRO__ uch *buf, ulg size, int unshrink)); #endif /* static int disk_error OF((__GPRO)); */ void handler OF((int signal)); time_t dos_to_unix_time OF((ulg dos_datetime)); int check_for_newer OF((__GPRO__ char *filename)); /* os2,vmcms,vms */ int do_string OF((__GPRO__ unsigned int length, int option)); ush makeword OF((ZCONST uch *b)); ulg makelong OF((ZCONST uch *sig)); zusz_t makeint64 OF((ZCONST uch *sig)); char *fzofft OF((__GPRO__ zoff_t val, ZCONST char *pre, ZCONST char *post)); #if (!defined(STR_TO_ISO) || defined(NEED_STR2ISO)) char *str2iso OF((char *dst, ZCONST char *src)); #endif #if (!defined(STR_TO_OEM) || defined(NEED_STR2OEM)) char *str2oem OF((char *dst, ZCONST char *src)); #endif #ifdef NO_STRNICMP int zstrnicmp OF((register ZCONST char *s1, register ZCONST char *s2, register unsigned n)); #endif #ifdef REGULUS int zstat OF((ZCONST char *p, struct stat *s)); #endif #ifdef ZMEM /* MUST be ifdef'd because of conflicts with the standard def. */ zvoid *memset OF((register zvoid *, register int, register unsigned int)); int memcmp OF((register ZCONST zvoid*, register ZCONST zvoid *, register unsigned int)); zvoid *memcpy OF((register zvoid *, register ZCONST zvoid *, register unsigned int)); #endif #ifdef NEED_UZMBCLEN extent uzmbclen OF((ZCONST unsigned char *ptr)); #endif #ifdef NEED_UZMBSCHR unsigned char *uzmbschr OF((ZCONST unsigned char *str, unsigned int c)); #endif #ifdef NEED_UZMBSRCHR unsigned char *uzmbsrchr OF((ZCONST unsigned char *str, unsigned int c)); #endif #ifdef SMALL_MEM char *fLoadFarString OF((__GPRO__ const char Far *sz)); char *fLoadFarStringSmall OF((__GPRO__ const char Far *sz)); char *fLoadFarStringSmall2 OF((__GPRO__ const char Far *sz)); #ifndef zfstrcpy char Far * Far zfstrcpy OF((char Far *s1, const char Far *s2)); #endif #if (!defined(SFX) && !defined(zfstrcmp)) int Far zfstrcmp OF((const char Far *s1, const char Far *s2)); #endif #endif /*--------------------------------------------------------------------------- Functions in extract.c: ---------------------------------------------------------------------------*/ int extract_or_test_files OF((__GPRO)); /* static int store_info OF((void)); */ /* static int extract_or_test_member OF((__GPRO)); */ /* static int TestExtraField OF((__GPRO__ uch *ef, unsigned ef_len)); */ /* static int test_OS2 OF((__GPRO__ uch *eb, unsigned eb_size)); */ /* static int test_NT OF((__GPRO__ uch *eb, unsigned eb_size)); */ #ifndef SFX unsigned find_compr_idx OF((unsigned compr_methodnum)); #endif int memextract OF((__GPRO__ uch *tgt, ulg tgtsize, ZCONST uch *src, ulg srcsize)); int memflush OF((__GPRO__ ZCONST uch *rawbuf, ulg size)); #if (defined(VMS) || defined(VMS_TEXT_CONV)) uch *extract_izvms_block OF((__GPRO__ ZCONST uch *ebdata, unsigned size, unsigned *retlen, ZCONST uch *init, unsigned needlen)); #endif char *fnfilter OF((ZCONST char *raw, uch *space, extent size)); /*--------------------------------------------------------------------------- Decompression functions: ---------------------------------------------------------------------------*/ #if (!defined(SFX) && !defined(FUNZIP)) int explode OF((__GPRO)); /* explode.c */ #endif int huft_free OF((struct huft *t)); /* inflate.c */ int huft_build OF((__GPRO__ ZCONST unsigned *b, unsigned n, unsigned s, ZCONST ush *d, ZCONST uch *e, struct huft **t, unsigned *m)); #ifdef USE_ZLIB int UZinflate OF((__GPRO__ int is_defl64)); /* inflate.c */ # define inflate_free(x) inflateEnd(&((Uz_Globs *)(&G))->dstrm) #else int inflate OF((__GPRO__ int is_defl64)); /* inflate.c */ int inflate_free OF((__GPRO)); /* inflate.c */ #endif /* ?USE_ZLIB */ #if (!defined(SFX) && !defined(FUNZIP)) #ifndef COPYRIGHT_CLEAN int unreduce OF((__GPRO)); /* unreduce.c */ /* static void LoadFollowers OF((__GPRO__ f_array *follower, uch *Slen)); * unreduce.c */ #endif /* !COPYRIGHT_CLEAN */ #ifndef LZW_CLEAN int unshrink OF((__GPRO)); /* unshrink.c */ /* static void partial_clear OF((__GPRO)); * unshrink.c */ #endif /* !LZW_CLEAN */ #endif /* !SFX && !FUNZIP */ #ifdef USE_BZIP2 int UZbunzip2 OF((__GPRO)); /* extract.c */ void bz_internal_error OF((int bzerrcode)); /* ubz2err.c */ #endif /*--------------------------------------------------------------------------- Internal API functions (only included in DLL versions): ---------------------------------------------------------------------------*/ #ifdef DLL void setFileNotFound OF((__GPRO)); /* api.c */ int unzipToMemory OF((__GPRO__ char *zip, char *file, UzpBuffer *retstr)); /* api.c */ int redirect_outfile OF((__GPRO)); /* api.c */ int writeToMemory OF((__GPRO__ ZCONST uch *rawbuf, extent size)); /* api.c */ int close_redirect OF((__GPRO)); /* api.c */ /* this obsolescent entry point kept for compatibility: */ int UzpUnzip OF((int argc, char **argv));/* use UzpMain */ #ifdef OS2DLL int varmessage OF((__GPRO__ ZCONST uch *buf, ulg size)); int varputchar OF((__GPRO__ int c)); /* rexxapi.c */ int finish_REXX_redirect OF((__GPRO)); /* rexxapi.c */ #endif #ifdef API_DOC void APIhelp OF((__GPRO__ int argc, char **argv)); #endif /* apihelp.c */ #endif /* DLL */ /*--------------------------------------------------------------------------- MSDOS-only functions: ---------------------------------------------------------------------------*/ #ifdef MSDOS #if (!defined(FUNZIP) && !defined(SFX) && !defined(WINDLL)) void check_for_windows OF((ZCONST char *app)); /* msdos.c */ #endif #if (defined(__GO32__) || defined(__EMX__)) unsigned _dos_getcountryinfo(void *); /* msdos.c */ #if (!defined(__DJGPP__) || (__DJGPP__ < 2)) unsigned _dos_setftime(int, unsigned, unsigned); /* msdos.c */ unsigned _dos_setfileattr(const char *, unsigned); /* msdos.c */ unsigned _dos_creat(const char *, unsigned, int *); /* msdos.c */ void _dos_getdrive(unsigned *); /* msdos.c */ unsigned _dos_close(int); /* msdos.c */ #endif /* !__DJGPP__ || (__DJGPP__ < 2) */ #endif /* __GO32__ || __EMX__ */ #endif /*--------------------------------------------------------------------------- OS/2-only functions: ---------------------------------------------------------------------------*/ #ifdef OS2 /* GetFileTime conflicts with something in Win32 header files */ #if (defined(REENTRANT) && defined(USETHREADID)) ulg GetThreadId OF((void)); #endif int GetCountryInfo OF((void)); /* os2.c */ long GetFileTime OF((ZCONST char *name)); /* os2.c */ /* static void SetPathAttrTimes OF((__GPRO__ int flags, int dir)); os2.c */ /* static int SetEAs OF((__GPRO__ const char *path, void *eablock)); os2.c */ /* static int SetACL OF((__GPRO__ const char *path, void *eablock)); os2.c */ /* static int IsFileNameValid OF((const char *name)); os2.c */ /* static void map2fat OF((char *pathcomp, char **pEndFAT)); os2.c */ /* static int SetLongNameEA OF((char *name, char *longname)); os2.c */ /* static void InitNLS OF((void)); os2.c */ int IsUpperNLS OF((int nChr)); /* os2.c */ int ToLowerNLS OF((int nChr)); /* os2.c */ void DebugMalloc OF((void)); /* os2.c */ #endif /*--------------------------------------------------------------------------- QDOS-only functions: ---------------------------------------------------------------------------*/ #ifdef QDOS int QMatch (uch, uch); void QFilename (__GPRO__ char *); char *Qstrfix (char *); int QReturn (int zip_error); #endif /*--------------------------------------------------------------------------- TOPS20-only functions: ---------------------------------------------------------------------------*/ #ifdef TOPS20 int upper OF((char *s)); /* tops20.c */ int enquote OF((char *s)); /* tops20.c */ int dequote OF((char *s)); /* tops20.c */ int fnlegal OF(()); /* error if prototyped? */ /* tops20.c */ #endif /*--------------------------------------------------------------------------- VM/CMS- and MVS-only functions: ---------------------------------------------------------------------------*/ #ifdef CMS_MVS extent getVMMVSexfield OF((char *type, uch *ef_block, unsigned datalen)); FILE *vmmvs_open_infile OF((__GPRO)); /* vmmvs.c */ void close_infile OF((__GPRO)); /* vmmvs.c */ #endif /*--------------------------------------------------------------------------- VMS-only functions: ---------------------------------------------------------------------------*/ #ifdef VMS int check_format OF((__GPRO)); /* vms.c */ /* int open_outfile OF((__GPRO)); * (see fileio.c) vms.c */ /* int flush OF((__GPRO__ uch *rawbuf, unsigned size, int final_flag)); * (see fileio.c) vms.c */ char *vms_msg_text OF((void)); /* vms.c */ #ifdef RETURN_CODES void return_VMS OF((__GPRO__ int zip_error)); /* vms.c */ #else void return_VMS OF((int zip_error)); /* vms.c */ #endif #ifdef VMSCLI ulg vms_unzip_cmdline OF((int *, char ***)); /* cmdline.c */ int VMSCLI_usage OF((__GPRO__ int error)); /* cmdline.c */ #endif #endif /*--------------------------------------------------------------------------- WIN32-only functions: ---------------------------------------------------------------------------*/ #ifdef WIN32 int IsWinNT OF((void)); /* win32.c */ #ifdef NTSD_EAS void process_defer_NT OF((__GPRO)); /* win32.c */ int test_NTSD OF((__GPRO__ uch *eb, unsigned eb_size, uch *eb_ucptr, ulg eb_ucsize)); /* win32.c */ # define TEST_NTSD test_NTSD #endif #ifdef W32_STAT_BANDAID int zstat_win32 OF((__W32STAT_GLOBALS__ const char *path, z_stat *buf)); /* win32.c */ #endif #endif /*--------------------------------------------------------------------------- Miscellaneous/shared functions: ---------------------------------------------------------------------------*/ Uz_Globs *globalsCtor OF((void)); /* globals.c */ int envargs OF((int *Pargc, char ***Pargv, ZCONST char *envstr, ZCONST char *envstr2)); /* envargs.c */ void mksargs OF((int *argcp, char ***argvp)); /* envargs.c */ int match OF((ZCONST char *s, ZCONST char *p, int ic __WDLPRO)); /* match.c */ int iswild OF((ZCONST char *p)); /* match.c */ /* declarations of public CRC-32 functions have been moved into crc32.h (free_crc_table(), get_crc_table(), crc32()) crc32.c */ int dateformat OF((void)); /* local */ char dateseparator OF((void)); /* local */ #ifndef WINDLL void version OF((__GPRO)); /* local */ #endif int mapattr OF((__GPRO)); /* local */ int mapname OF((__GPRO__ int renamed)); /* local */ int checkdir OF((__GPRO__ char *pathcomp, int flag)); /* local */ char *do_wild OF((__GPRO__ ZCONST char *wildzipfn)); /* local */ char *GetLoadPath OF((__GPRO)); /* local */ #if (defined(MORE) && (defined(ATH_BEO_UNX) || defined(QDOS) || defined(VMS))) int screensize OF((int *tt_rows, int *tt_cols)); /* local */ # if defined(VMS) int screenlinewrap OF((void)); /* local */ # endif #endif /* MORE && (ATH_BEO_UNX || QDOS || VMS) */ #ifdef OS2_W32 int SetFileSize OF((FILE *file, zusz_t filesize)); /* local */ #endif #ifndef MTS /* macro in MTS */ void close_outfile OF((__GPRO)); /* local */ #endif #ifdef SET_SYMLINK_ATTRIBS int set_symlnk_attribs OF((__GPRO__ slinkentry *slnk_entry)); /* local */ #endif #ifdef SET_DIR_ATTRIB int defer_dir_attribs OF((__GPRO__ direntry **pd)); /* local */ int set_direc_attribs OF((__GPRO__ direntry *d)); /* local */ #endif #ifdef TIMESTAMP # ifdef WIN32 int stamp_file OF((__GPRO__ ZCONST char *fname, time_t modtime)); /* local */ # else int stamp_file OF((ZCONST char *fname, time_t modtime)); /* local */ # endif #endif #ifdef NEED_ISO_OEM_INIT void prepare_ISO_OEM_translat OF((__GPRO)); /* local */ #endif #if (defined(MALLOC_WORK) && defined(MY_ZCALLOC)) zvoid far *zcalloc OF((unsigned int, unsigned int)); zvoid zcfree OF((zvoid far *)); #endif /* MALLOC_WORK && MY_ZCALLOC */ #ifdef SYSTEM_SPECIFIC_CTOR void SYSTEM_SPECIFIC_CTOR OF((__GPRO)); /* local */ #endif #ifdef SYSTEM_SPECIFIC_DTOR void SYSTEM_SPECIFIC_DTOR OF((__GPRO)); /* local */ #endif /************/ /* Macros */ /************/ #ifndef MAX # define MAX(a,b) ((a) > (b) ? (a) : (b)) #endif #ifndef MIN # define MIN(a,b) ((a) < (b) ? (a) : (b)) #endif #ifdef DEBUG # if (defined(THEOS) && defined(NO_BOGUS_SPC)) # define NO_DEBUG_IN_MACROS # define Trace(x) _fprintf x # else # define Trace(x) fprintf x # endif #else # define Trace(x) #endif #ifdef DEBUG_TIME # define TTrace(x) fprintf x #else # define TTrace(x) #endif #ifdef NO_DEBUG_IN_MACROS # define MTrace(x) #else # define MTrace(x) Trace(x) #endif #if (defined(UNIX) || defined(T20_VMS)) /* generally old systems */ # define ToLower(x) ((char)(isupper((int)x)? tolower((int)x) : x)) #else # define ToLower tolower /* assumed "smart"; used in match() */ #endif #ifdef USE_STRM_INPUT /* ``Replace'' the unbuffered UNIX style I/O function with similar * standard C functions from . */ # define read(fd,buf,n) fread((buf),1,(n),(FILE *)(fd)) # ifdef zlseek # undef zlseek # endif # define zlseek(fd,o,w) zfseeko((FILE *)(fd),(o),(w)) # define close(fd) fclose((FILE *)(fd)) #endif /* USE_STRM_INPUT */ /* The return value of the Info() "macro function" is never checked in * UnZip. Otherwise, to get the same behaviour as for (*G.message)(), the * Info() definition for "FUNZIP" would have to be corrected: * #define Info(buf,flag,sprf_arg) \ * (fputs((char *)(sprintf sprf_arg, (buf)), \ * (flag)&1? stderr : stdout) < 0) */ static inline void noop(void) {} #define Info(...) noop() #ifndef Info /* may already have been defined for redirection */ # ifdef FUNZIP # define Info(buf,flag,sprf_arg) \ fputs((char *)(sprintf sprf_arg, (buf)), (flag)&1? stderr : stdout) # else # ifdef INT_SPRINTF /* optimized version for "int sprintf()" flavour */ # define Info(buf,flag,sprf_arg) \ (*G.message)((zvoid *)&G, (uch *)(buf), (ulg)sprintf sprf_arg, (flag)) # else /* generic version, does not use sprintf() return value */ # define Info(buf,flag,sprf_arg) \ (*G.message)((zvoid *)&G, (uch *)(buf), \ (ulg)(sprintf sprf_arg, strlen((char *)(buf))), (flag)) # endif # endif #endif /* !Info */ /* This wrapper macro around fzofft() is just defined to "hide" the * argument needed to reference the global storage buffers. */ #define FmZofft(val, pre, post) fzofft(__G__ val, pre, post) /* The following macro wrappers around the fnfilter function are used many * times to prepare archive entry names or name components for displaying * listings and (warning/error) messages. They use sections in the upper half * of 'slide' as buffer, since their output is normally fed through the * Info() macro with 'slide' (the start of this area) as message buffer. */ #define FnFilter1(fname) \ fnfilter((fname), slide + (extent)(WSIZE>>1), (extent)(WSIZE>>2)) #define FnFilter2(fname) \ fnfilter((fname), slide + (extent)((WSIZE>>1) + (WSIZE>>2)),\ (extent)(WSIZE>>2)) #ifndef FUNZIP /* used only in inflate.c */ # define MESSAGE(str,len,flag) (*G.message)((zvoid *)&G,(str),(len),(flag)) #endif #if 0 /* Optimization: use the (const) result of crc32(0L,NULL,0) */ # define CRCVAL_INITIAL crc32(0L, NULL, 0) #else # define CRCVAL_INITIAL 0L #endif #ifdef SYMLINKS /* This macro defines the Zip "made by" hosts that are considered to support storing symbolic link entries. */ # define SYMLINK_HOST(hn) ((hn) == UNIX_ || (hn) == ATARI_ || \ (hn) == ATHEOS_ || (hn) == BEOS_ || (hn) == VMS_) #endif #ifndef TEST_NTSD /* "NTSD valid?" checking function */ # define TEST_NTSD NULL /* ... is not available */ #endif #define SKIP_(length) if(length&&((error=do_string(__G__ length,SKIP))!=0))\ {error_in_archive=error; if(error>1) return error;} /* * Skip a variable-length field, and report any errors. Used in zipinfo.c * and unzip.c in several functions. * * macro SKIP_(length) * ush length; * { * if (length && ((error = do_string(length, SKIP)) != 0)) { * error_in_archive = error; /-* might be warning *-/ * if (error > 1) /-* fatal *-/ * return (error); * } * } * */ #ifdef FUNZIP # define FLUSH(w) flush(__G__ (ulg)(w)) # define NEXTBYTE getc(G.in) /* redefined in crypt.h if full version */ #else # define FLUSH(w) ((G.mem_mode) ? memflush(__G__ redirSlide,(ulg)(w)) \ : flush(__G__ redirSlide,(ulg)(w),0)) # define NEXTBYTE (G.incnt-- > 0 ? (int)(*G.inptr++) : readbyte(__G)) #endif #define READBITS(nbits,zdest) {if(nbits>G.bits_left) {int temp; G.zipeof=1;\ while (G.bits_left<=8*(int)(sizeof(G.bitbuf)-1) && (temp=NEXTBYTE)!=EOF) {\ G.bitbuf|=(ulg)temp<>=nbits;\ G.bits_left-=nbits;} /* * macro READBITS(nbits,zdest) * only used by unreduce and unshrink * * { * if (nbits > G.bits_left) { * fill G.bitbuf, 8*sizeof(ulg) bits * * int temp; * * G.zipeof = 1; * while (G.bits_left <= 8*(int)(sizeof(G.bitbuf)-1) && * (temp = NEXTBYTE) != EOF) { * G.bitbuf |= (ulg)temp << G.bits_left; * G.bits_left += 8; * G.zipeof = 0; * } * } * zdest = (shrint)((unsigned)G.bitbuf & mask_bits[nbits]); * G.bitbuf >>= nbits; * G.bits_left -= nbits; * } * */ /* GRR: should use StringLower for STRLOWER macro if possible */ /* * Copy the zero-terminated string in str1 into str2, converting any * uppercase letters to lowercase as we go. str2 gets zero-terminated * as well, of course. str1 and str2 may be the same character array. */ #ifdef _MBCS # define STRLOWER(str1, str2) \ { \ char *p, *q, c; unsigned i; \ p = (char *)(str1); \ q = (char *)(str2); \ while ((c = *p) != '\0') { \ if ((i = CLEN(p)) > 1) { \ while (i--) *q++ = *p++; \ } else { \ *q++ = (char)(isupper((int)(c))? tolower((int)(c)) : c); \ p++; \ } \ } \ *q = '\0'; \ } #else # define STRLOWER(str1, str2) \ { \ char *p, *q; \ p = (char *)(str1) - 1; \ q = (char *)(str2); \ while (*++p) \ *q++ = (char)(isupper((int)(*p))? tolower((int)(*p)) : *p); \ *q = '\0'; \ } #endif /* * NOTES: This macro makes no assumptions about the characteristics of * the tolower() function or macro (beyond its existence), nor does it * make assumptions about the structure of the character set (i.e., it * should work on EBCDIC machines, too). The fact that either or both * of isupper() and tolower() may be macros has been taken into account; * watch out for "side effects" (in the C sense) when modifying this * macro. */ #ifndef foreign # define foreign(c) (c) #endif #ifndef native # define native(c) (c) # define A_TO_N(str1) #else # ifndef NATIVE # define NATIVE "native chars" # endif # define A_TO_N(str1) {register uch *p;\ for (p=(uch *)(str1); *p; p++) *p=native(*p);} #endif /* * Translate the zero-terminated string in str1 from ASCII to the native * character set. The translation is performed in-place and uses the * "native" macro to translate each character. * * NOTE: Using the "native" macro means that is it the only part of unzip * which knows which translation table (if any) is actually in use to * produce the native character set. This makes adding new character set * translation tables easy, insofar as all that is needed is an appropriate * "native" macro definition and the translation table itself. Currently, * the only non-ASCII native character set implemented is EBCDIC, but this * may not always be so. */ /* default setup for internal codepage: assume ISO 8859-1 compatibility!! */ #if (!defined(NATIVE) && !defined(CRTL_CP_IS_ISO) && !defined(CRTL_CP_IS_OEM)) # define CRTL_CP_IS_ISO #endif /* Translate "extended ASCII" chars (OEM coding for DOS and OS/2; else * ISO-8859-1 [ISO Latin 1, Win Ansi,...]) into the internal "native" * code page. As with A_TO_N(), conversion is done in place. */ #ifndef _ISO_INTERN # ifdef CRTL_CP_IS_OEM # ifndef IZ_ISO2OEM_ARRAY # define IZ_ISO2OEM_ARRAY # endif # define _ISO_INTERN(str1) if (iso2oem) {register uch *p;\ for (p=(uch *)(str1); *p; p++)\ *p = native((*p & 0x80) ? iso2oem[*p & 0x7f] : *p);} # else # define _ISO_INTERN(str1) A_TO_N(str1) # endif #endif #ifndef _OEM_INTERN # ifdef CRTL_CP_IS_OEM # define _OEM_INTERN(str1) A_TO_N(str1) # else # ifndef IZ_OEM2ISO_ARRAY # define IZ_OEM2ISO_ARRAY # endif # define _OEM_INTERN(str1) if (oem2iso) {register uch *p;\ for (p=(uch *)(str1); *p; p++)\ *p = native((*p & 0x80) ? oem2iso[*p & 0x7f] : *p);} # endif #endif #ifndef STR_TO_ISO # ifdef CRTL_CP_IS_ISO # define STR_TO_ISO strcpy # else # define STR_TO_ISO str2iso # define NEED_STR2ISO # endif #endif #ifndef STR_TO_OEM # ifdef CRTL_CP_IS_OEM # define STR_TO_OEM strcpy # else # define STR_TO_OEM str2oem # define NEED_STR2OEM # endif #endif #if (!defined(INTERN_TO_ISO) && !defined(ASCII2ISO)) # ifdef CRTL_CP_IS_OEM /* know: "ASCII" is "OEM" */ # define ASCII2ISO(c) \ ((((c) & 0x80) && oem2iso) ? oem2iso[(c) & 0x7f] : (c)) # if (defined(NEED_STR2ISO) && !defined(CRYP_USES_OEM2ISO)) # define CRYP_USES_OEM2ISO # endif # else /* assume: "ASCII" is "ISO-ANSI" */ # define ASCII2ISO(c) (c) # endif #endif #if (!defined(INTERN_TO_OEM) && !defined(ASCII2OEM)) # ifdef CRTL_CP_IS_OEM /* know: "ASCII" is "OEM" */ # define ASCII2OEM(c) (c) # else /* assume: "ASCII" is "ISO-ANSI" */ # define ASCII2OEM(c) \ ((((c) & 0x80) && iso2oem) ? iso2oem[(c) & 0x7f] : (c)) # if (defined(NEED_STR2OEM) && !defined(CRYP_USES_ISO2OEM)) # define CRYP_USES_ISO2OEM # endif # endif #endif /* codepage conversion setup for testp() in crypt.c */ #ifdef CRTL_CP_IS_ISO # ifndef STR_TO_CP2 # define STR_TO_CP2 STR_TO_OEM # endif #else # ifdef CRTL_CP_IS_OEM # ifndef STR_TO_CP2 # define STR_TO_CP2 STR_TO_ISO # endif # else /* native internal CP is neither ISO nor OEM */ # ifndef STR_TO_CP1 # define STR_TO_CP1 STR_TO_ISO # endif # ifndef STR_TO_CP2 # define STR_TO_CP2 STR_TO_OEM # endif # endif #endif /* Convert filename (and file comment string) into "internal" charset. * This macro assumes that Zip entry filenames are coded in OEM (IBM DOS) * codepage when made on * -> DOS (this includes 16-bit Windows 3.1) (FS_FAT_) * -> OS/2 (FS_HPFS_) * -> Win95/WinNT with Nico Mak's WinZip (FS_NTFS_ && hostver == "5.0") * EXCEPTIONS: * PKZIP for Windows 2.5, 2.6, and 4.0 flag their entries as "FS_FAT_", but * the filename stored in the local header is coded in Windows ANSI (CP 1252 * resp. ISO 8859-1 on US and western Europe locale settings). * Likewise, PKZIP for UNIX 2.51 flags its entries as "FS_FAT_", but the * filenames stored in BOTH the local and the central header are coded * in the local system's codepage (usually ANSI codings like ISO 8859-1). * * All other ports are assumed to code zip entry filenames in ISO 8859-1. */ #ifndef Ext_ASCII_TO_Native # define Ext_ASCII_TO_Native(string, hostnum, hostver, isuxatt, islochdr) \ if (((hostnum) == FS_FAT_ && \ !(((islochdr) || (isuxatt)) && \ ((hostver) == 25 || (hostver) == 26 || (hostver) == 40))) || \ (hostnum) == FS_HPFS_ || \ ((hostnum) == FS_NTFS_ && (hostver) == 50)) { \ _OEM_INTERN((string)); \ } else { \ _ISO_INTERN((string)); \ } #endif /**********************/ /* Global constants */ /**********************/ extern ZCONST unsigned near mask_bits[17]; extern ZCONST char *fnames[2]; #ifdef EBCDIC extern ZCONST uch ebcdic[]; #endif #ifdef IZ_ISO2OEM_ARRAY extern ZCONST uch Far *iso2oem; extern ZCONST uch Far iso2oem_850[]; #endif #ifdef IZ_OEM2ISO_ARRAY extern ZCONST uch Far *oem2iso; extern ZCONST uch Far oem2iso_850[]; #endif extern ZCONST char Far VersionDate[]; extern ZCONST char Far CentSigMsg[]; #ifndef SFX extern ZCONST char Far EndSigMsg[]; #endif extern ZCONST char Far SeekMsg[]; extern ZCONST char Far FilenameNotMatched[]; extern ZCONST char Far ExclFilenameNotMatched[]; extern ZCONST char Far ReportMsg[]; #ifndef SFX extern ZCONST char Far Zipnfo[]; extern ZCONST char Far CompiledWith[]; #endif /* !SFX */ /***********************************/ /* Global (shared?) RTL variables */ /***********************************/ #ifdef DECLARE_ERRNO extern int errno; #endif /*--------------------------------------------------------------------- Unicode Support 28 August 2005 ---------------------------------------------------------------------*/ #if (defined(UNICODE_SUPPORT) && defined(UNICODE_WCHAR)) /* Default character when a zwchar too big for wchar_t */ # define zwchar_to_wchar_t_default_char '_' /* Default character string when wchar_t does not convert to mb */ # define wide_to_mb_default_string "_" /* wide character type */ typedef unsigned long zwchar; /* UTF-8 related conversion functions, currently found in process.c */ # if 0 /* currently unused */ /* check if string is all ASCII */ int is_ascii_string OF((ZCONST char *mbstring)); # endif /* unused */ /* convert UTF-8 string to multi-byte string */ char *utf8_to_local_string OF((ZCONST char *utf8_string, int escape_all)); /* convert UTF-8 string to wide string */ zwchar *utf8_to_wide_string OF((ZCONST char *utf8_string)); /* convert wide string to multi-byte string */ char *wide_to_local_string OF((ZCONST zwchar *wide_string, int escape_all)); # if 0 /* currently unused */ /* convert local string to multi-byte display string */ char *local_to_display_string OF((ZCONST char *local_string)); # endif /* unused */ /* convert wide character to escape string */ char *wide_to_escape_string OF((unsigned long)); # define utf8_to_escaped_string(utf8_string) \ utf8_to_local_string(utf8_string, TRUE) # if 0 /* currently unused */ /* convert escape string to wide character */ unsigned long escape_string_to_wide OF((ZCONST char *escape_string)); /* convert local to UTF-8 */ char *local_to_utf8_string OF ((ZCONST char *local_string)); /* convert local to wide string */ zwchar *local_to_wide_string OF ((ZCONST char *local_string)); /* convert wide string to UTF-8 */ char *wide_to_utf8_string OF((ZCONST zwchar *wide_string)); # endif /* unused */ #endif /* UNICODE_SUPPORT && UNICODE_WCHAR */ #endif /* !__unzpriv_h */ Carla-2.4.2/data/windows/unzipfx-carla/unzvers.h000066400000000000000000000060411420416754300216230ustar00rootroot00000000000000/* Copyright (c) 1990-2009 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2009-Jan-02 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /* unzvers.h (for UnZip) by Info-ZIP. */ #ifndef __unzvers_h /* don't include more than once */ #define __unzvers_h #ifdef BETA # undef BETA /* undefine BETA for public releases */ #endif #ifdef BETA # define UZ_BETALEVEL "h03 BETA" # define UZ_VERSION_DATE "17 Apr 09" /* internal beta version */ #else # define UZ_BETALEVEL "" # define UZ_VERSION_DATE "20 April 2009" /* official release version */ # define RELEASE #endif #define UZ_MAJORVER 6 /* UnZip */ #define UZ_MINORVER 0 #define ZI_MAJORVER 3 /* ZipInfo */ #define ZI_MINORVER 0 #define UZ_PATCHLEVEL 0 #define UZ_VER_STRING "6.0" /* keep in sync with Version numbers! */ #ifndef IZ_COMPANY_NAME /* might be already defined... */ # define IZ_COMPANY_NAME "Info-ZIP" #endif /* these are obsolete but remain for backward compatibility: */ #if (defined(OS2) || defined(__OS2__)) # define D2_MAJORVER UZ_MAJORVER /* DLL for OS/2 */ # define D2_MINORVER UZ_MINORVER # define D2_PATCHLEVEL UZ_PATCHLEVEL #endif #define DW_MAJORVER UZ_MAJORVER /* DLL for MS Windows */ #define DW_MINORVER UZ_MINORVER #define DW_PATCHLEVEL UZ_PATCHLEVEL #define WIN_VERSION_DATE UZ_VERSION_DATE #define UNZ_DLL_VERSION UZ_VER_STRING /* The following version constants specify the UnZip version that introduced * the most recent incompatible change (means: change that breaks backward * compatibility) of a DLL/Library binary API definition. * * Currently, UnZip supports three distinct DLL/Library APIs, which each * carry their own "compatibility level": * a) The "generic" (console-mode oriented) API has been used on UNIX, * for example. This API provides a "callable" interface similar to the * interactive command line of the normal program executables. * b) The OS/2-only API provides (additional) functions specially tailored * for interfacing with the REXX shell. * c) The Win32 DLL API with a pure binary interface which can be used to * build GUI mode as well as Console mode applications. * * Whenever a change that breaks backward compatibility gets applied to * any of the DLL/Library APIs, the corresponding compatibility level should * be synchronized with the current UnZip version numbers. */ /* generic DLL API minimum compatible version*/ #define UZ_GENAPI_COMP_MAJOR 6 #define UZ_GENAPI_COMP_MINOR 0 #define UZ_GENAPI_COMP_REVIS 0 /* os2dll API minimum compatible version*/ #define UZ_OS2API_COMP_MAJOR 6 #define UZ_OS2API_COMP_MINOR 0 #define UZ_OS2API_COMP_REVIS 0 /* windll API minimum compatible version*/ #define UZ_WINAPI_COMP_MAJOR 6 #define UZ_WINAPI_COMP_MINOR 0 #define UZ_WINAPI_COMP_REVIS 0 #endif /* !__unzvers_h */ Carla-2.4.2/data/windows/unzipfx-carla/win32/000077500000000000000000000000001420416754300206775ustar00rootroot00000000000000Carla-2.4.2/data/windows/unzipfx-carla/win32/nt.c000066400000000000000000000405051420416754300214700ustar00rootroot00000000000000/* Copyright (c) 1990-2007 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2000-Apr-09 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /* Copyright (c) 1996 Scott Field (dedicated to Info-Zip group) Module Name: nt.c Abstract: This module implements WinNT security descriptor operations for the Win32 Info-ZIP project. Operation such as setting file security, using/querying local and remote privileges, and queuing of operations is performed here. The contents of this module are only relevant when the code is running on Windows NT, and the target volume supports persistent Acl storage. User privileges that allow accessing certain privileged aspects of the security descriptor (such as the Sacl) are only used if the user specified to do so. Author: Scott Field (sfield@microsoft.com) Last revised: 18 Jan 97 */ #define WIN32_LEAN_AND_MEAN #define UNZIP_INTERNAL #include #include "../unzip.h" #ifdef __RSXNT__ # include "../win32/rsxntwin.h" #endif #include "../win32/nt.h" #ifdef NTSD_EAS /* This file is only needed for NTSD handling */ /* Borland C++ does not define FILE_SHARE_DELETE. Others also? */ #ifndef FILE_SHARE_DELETE # define FILE_SHARE_DELETE 0x00000004 #endif /* This macro definition is missing in old versions of MS' winbase.h. */ #ifndef InterlockedExchangePointer # define InterlockedExchangePointer(Target, Value) \ (PVOID)InterlockedExchange((PLONG)(Target), (LONG)(Value)) #endif /* private prototypes */ static BOOL Initialize(VOID); static VOID GetRemotePrivilegesSet(CHAR *FileName, PDWORD dwRemotePrivileges); static VOID InitLocalPrivileges(VOID); volatile BOOL bInitialized = FALSE; /* module level stuff initialized? */ HANDLE hInitMutex = NULL; /* prevent multiple initialization */ BOOL g_bRestorePrivilege = FALSE; /* for local set file security override */ BOOL g_bSaclPrivilege = FALSE; /* for local set sacl operations, only when restore privilege not present */ /* our single cached volume capabilities structure that describes the last volume root we encountered. A single entry like this works well in the zip/unzip scenario for a number of reasons: 1. typically one extraction path during unzip. 2. typically process one volume at a time during zip, and then move on to the next. 3. no cleanup code required and no memory leaks. 4. simple code. This approach should be reworked to a linked list approach if we expect to be called by many threads which are processing a variety of input/output volumes, since lock contention and stale data may become a bottleneck. */ VOLUMECAPS g_VolumeCaps; CRITICAL_SECTION VolumeCapsLock; static BOOL Initialize(VOID) { HANDLE hMutex; HANDLE hOldMutex; if (bInitialized) return TRUE; hMutex = CreateMutex(NULL, TRUE, NULL); if(hMutex == NULL) return FALSE; hOldMutex = (HANDLE)InterlockedExchangePointer((void *)&hInitMutex, hMutex); if (hOldMutex != NULL) { /* somebody setup the mutex already */ InterlockedExchangePointer((void *)&hInitMutex, hOldMutex); CloseHandle(hMutex); /* close new, un-needed mutex */ /* wait for initialization to complete and return status */ WaitForSingleObject(hOldMutex, INFINITE); ReleaseMutex(hOldMutex); return bInitialized; } if (!bInitialized) { /* initialize module level resources */ InitializeCriticalSection( &VolumeCapsLock ); memset(&g_VolumeCaps, 0, sizeof(VOLUMECAPS)); InitLocalPrivileges(); bInitialized = TRUE; } InterlockedExchangePointer((void *)&hInitMutex, NULL); ReleaseMutex(hMutex); /* release correct mutex */ CloseHandle(hMutex); /* free the no longer needed handle resource */ return TRUE; } BOOL ValidateSecurity(uch *securitydata) { PSECURITY_DESCRIPTOR sd = (PSECURITY_DESCRIPTOR)securitydata; PACL pAcl; PSID pSid; BOOL bAclPresent; BOOL bDefaulted; if(!IsWinNT()) return TRUE; /* don't do anything if not on WinNT */ if(!IsValidSecurityDescriptor(sd)) return FALSE; /* verify Dacl integrity */ if(!GetSecurityDescriptorDacl(sd, &bAclPresent, &pAcl, &bDefaulted)) return FALSE; if(bAclPresent && pAcl!=NULL) { if(!IsValidAcl(pAcl)) return FALSE; } /* verify Sacl integrity */ if(!GetSecurityDescriptorSacl(sd, &bAclPresent, &pAcl, &bDefaulted)) return FALSE; if(bAclPresent && pAcl!=NULL) { if(!IsValidAcl(pAcl)) return FALSE; } /* verify owner integrity */ if(!GetSecurityDescriptorOwner(sd, &pSid, &bDefaulted)) return FALSE; if(pSid != NULL) { if(!IsValidSid(pSid)) return FALSE; } /* verify group integrity */ if(!GetSecurityDescriptorGroup(sd, &pSid, &bDefaulted)) return FALSE; if(pSid != NULL) { if(!IsValidSid(pSid)) return FALSE; } return TRUE; } static VOID GetRemotePrivilegesSet(char *FileName, PDWORD dwRemotePrivileges) { HANDLE hFile; *dwRemotePrivileges = 0; /* see if we have the SeRestorePrivilege */ hFile = CreateFileA( FileName, ACCESS_SYSTEM_SECURITY | WRITE_DAC | WRITE_OWNER | READ_CONTROL, FILE_SHARE_READ | FILE_SHARE_DELETE, /* no sd updating allowed here */ NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL ); if(hFile != INVALID_HANDLE_VALUE) { /* no remote way to determine SeRestorePrivilege -- just try a read/write to simulate it */ SECURITY_INFORMATION si = DACL_SECURITY_INFORMATION | SACL_SECURITY_INFORMATION | OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION; PSECURITY_DESCRIPTOR sd; DWORD cbBuf = 0; GetKernelObjectSecurity(hFile, si, NULL, cbBuf, &cbBuf); if(ERROR_INSUFFICIENT_BUFFER == GetLastError()) { if((sd = HeapAlloc(GetProcessHeap(), 0, cbBuf)) != NULL) { if(GetKernelObjectSecurity(hFile, si, sd, cbBuf, &cbBuf)) { if(SetKernelObjectSecurity(hFile, si, sd)) *dwRemotePrivileges |= OVERRIDE_RESTORE; } HeapFree(GetProcessHeap(), 0, sd); } } CloseHandle(hFile); } else { /* see if we have the SeSecurityPrivilege */ /* note we don't need this if we have SeRestorePrivilege */ hFile = CreateFileA( FileName, ACCESS_SYSTEM_SECURITY, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, /* max */ NULL, OPEN_EXISTING, 0, NULL ); if(hFile != INVALID_HANDLE_VALUE) { CloseHandle(hFile); *dwRemotePrivileges |= OVERRIDE_SACL; } } } BOOL GetVolumeCaps( char *rootpath, /* filepath, or NULL */ char *name, /* filename associated with rootpath */ PVOLUMECAPS VolumeCaps /* result structure describing capabilities */ ) { char TempRootPath[MAX_PATH + 1]; DWORD cchTempRootPath = 0; BOOL bSuccess = TRUE; /* assume success until told otherwise */ if(!bInitialized) if(!Initialize()) return FALSE; /* process the input path to produce a consistent path suitable for compare operations and also suitable for certain picky Win32 API that don't like forward slashes */ if(rootpath != NULL && rootpath[0] != '\0') { DWORD i; cchTempRootPath = lstrlenA(rootpath); if(cchTempRootPath > MAX_PATH) return FALSE; /* copy input, converting forward slashes to back slashes as we go */ for(i = 0 ; i <= cchTempRootPath ; i++) { if(rootpath[i] == '/') TempRootPath[i] = '\\'; else TempRootPath[i] = rootpath[i]; } /* check for UNC and Null terminate or append trailing \ as appropriate */ /* possible valid UNCs we are passed follow: \\machine\foo\bar (path is \\machine\foo\) \\machine\foo (path is \\machine\foo\) \\machine\foo\ \\.\c$\ (FIXFIX: Win32API doesn't like this - GetComputerName()) LATERLATER: handling mounted DFS drives in the future will require slightly different logic which isn't available today. This is required because directories can point at different servers which have differing capabilities. */ if(TempRootPath[0] == '\\' && TempRootPath[1] == '\\') { DWORD slash = 0; for(i = 2 ; i < cchTempRootPath ; i++) { if(TempRootPath[i] == '\\') { slash++; if(slash == 2) { i++; TempRootPath[i] = '\0'; cchTempRootPath = i; break; } } } /* if there was only one slash found, just tack another onto the end */ if(slash == 1 && TempRootPath[cchTempRootPath] != '\\') { TempRootPath[cchTempRootPath] = TempRootPath[0]; /* '\\' */ TempRootPath[cchTempRootPath+1] = '\0'; cchTempRootPath++; } } else { if(TempRootPath[1] == ':') { /* drive letter specified, truncate to root */ TempRootPath[2] = '\\'; TempRootPath[3] = '\0'; cchTempRootPath = 3; } else { /* must be file on current drive */ TempRootPath[0] = '\0'; cchTempRootPath = 0; } } } /* if path != NULL */ /* grab lock protecting cached entry */ EnterCriticalSection( &VolumeCapsLock ); if(!g_VolumeCaps.bValid || lstrcmpiA(g_VolumeCaps.RootPath, TempRootPath) != 0) { /* no match found, build up new entry */ DWORD dwFileSystemFlags; DWORD dwRemotePrivileges = 0; BOOL bRemote = FALSE; /* release lock during expensive operations */ LeaveCriticalSection( &VolumeCapsLock ); bSuccess = GetVolumeInformationA( (TempRootPath[0] == '\0') ? NULL : TempRootPath, NULL, 0, NULL, NULL, &dwFileSystemFlags, NULL, 0); /* only if target volume supports Acls, and we were told to use privileges do we need to go out and test for the remote case */ if(bSuccess && (dwFileSystemFlags & FS_PERSISTENT_ACLS) && VolumeCaps->bUsePrivileges) { if(GetDriveTypeA( (TempRootPath[0] == '\0') ? NULL : TempRootPath ) == DRIVE_REMOTE) { bRemote = TRUE; /* make a determination about our remote capabilities */ GetRemotePrivilegesSet(name, &dwRemotePrivileges); } } /* always take the lock again, since we release it below */ EnterCriticalSection( &VolumeCapsLock ); /* replace the existing data if successful */ if(bSuccess) { lstrcpynA(g_VolumeCaps.RootPath, TempRootPath, cchTempRootPath+1); g_VolumeCaps.dwFileSystemFlags = dwFileSystemFlags; g_VolumeCaps.bRemote = bRemote; g_VolumeCaps.dwRemotePrivileges = dwRemotePrivileges; g_VolumeCaps.bValid = TRUE; } } if(bSuccess) { /* copy input elements */ g_VolumeCaps.bUsePrivileges = VolumeCaps->bUsePrivileges; g_VolumeCaps.dwFileAttributes = VolumeCaps->dwFileAttributes; /* give caller results */ memcpy(VolumeCaps, &g_VolumeCaps, sizeof(VOLUMECAPS)); } else { g_VolumeCaps.bValid = FALSE; } LeaveCriticalSection( &VolumeCapsLock ); /* release lock */ return bSuccess; } BOOL SecuritySet(char *resource, PVOLUMECAPS VolumeCaps, uch *securitydata) { HANDLE hFile; DWORD dwDesiredAccess = 0; DWORD dwFlags = 0; PSECURITY_DESCRIPTOR sd = (PSECURITY_DESCRIPTOR)securitydata; SECURITY_DESCRIPTOR_CONTROL sdc; SECURITY_INFORMATION RequestedInfo = 0; DWORD dwRev; BOOL bRestorePrivilege = FALSE; BOOL bSaclPrivilege = FALSE; BOOL bSuccess; if(!bInitialized) if(!Initialize()) return FALSE; /* defer directory processing */ if(VolumeCaps->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { /* opening a directory requires FILE_FLAG_BACKUP_SEMANTICS */ dwFlags |= FILE_FLAG_BACKUP_SEMANTICS; } /* evaluate the input security descriptor and act accordingly */ if(!IsValidSecurityDescriptor(sd)) return FALSE; if(!GetSecurityDescriptorControl(sd, &sdc, &dwRev)) return FALSE; /* setup privilege usage based on if told we can use privileges, and if so, what privileges we have */ if(VolumeCaps->bUsePrivileges) { if(VolumeCaps->bRemote) { /* use remotely determined privileges */ if(VolumeCaps->dwRemotePrivileges & OVERRIDE_RESTORE) bRestorePrivilege = TRUE; if(VolumeCaps->dwRemotePrivileges & OVERRIDE_SACL) bSaclPrivilege = TRUE; } else { /* use local privileges */ bRestorePrivilege = g_bRestorePrivilege; bSaclPrivilege = g_bSaclPrivilege; } } /* if a Dacl is present write Dacl out */ /* if we have SeRestorePrivilege, write owner and group info out */ if(sdc & SE_DACL_PRESENT) { dwDesiredAccess |= WRITE_DAC; RequestedInfo |= DACL_SECURITY_INFORMATION; if(bRestorePrivilege) { dwDesiredAccess |= WRITE_OWNER; RequestedInfo |= (OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION); } } /* if a Sacl is present and we have either SeRestorePrivilege or SeSystemSecurityPrivilege try to write Sacl out */ if((sdc & SE_SACL_PRESENT) && (bRestorePrivilege || bSaclPrivilege)) { dwDesiredAccess |= ACCESS_SYSTEM_SECURITY; RequestedInfo |= SACL_SECURITY_INFORMATION; } if(RequestedInfo == 0) /* nothing to do */ return FALSE; if(bRestorePrivilege) dwFlags |= FILE_FLAG_BACKUP_SEMANTICS; hFile = CreateFileA( resource, dwDesiredAccess, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,/* max sharing */ NULL, OPEN_EXISTING, dwFlags, NULL ); if(hFile == INVALID_HANDLE_VALUE) return FALSE; bSuccess = SetKernelObjectSecurity(hFile, RequestedInfo, sd); CloseHandle(hFile); return bSuccess; } static VOID InitLocalPrivileges(VOID) { HANDLE hToken; TOKEN_PRIVILEGES tp; /* try to enable some interesting privileges that give us the ability to get some security information that we normally cannot. note that enabling privileges is only relevant on the local machine; when accessing files that are on a remote machine, any privileges that are present on the remote machine get enabled by default. */ if(!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hToken)) return; tp.PrivilegeCount = 1; tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if(LookupPrivilegeValue(NULL, SE_RESTORE_NAME, &tp.Privileges[0].Luid)) { /* try to enable SeRestorePrivilege; if this succeeds, we can write all aspects of the security descriptor */ if(AdjustTokenPrivileges(hToken, FALSE, &tp, 0, NULL, NULL) && GetLastError() == ERROR_SUCCESS) g_bRestorePrivilege = TRUE; } /* try to enable SeSystemSecurityPrivilege, if SeRestorePrivilege not present; if this succeeds, we can write the Sacl */ if(!g_bRestorePrivilege && LookupPrivilegeValue(NULL, SE_SECURITY_NAME, &tp.Privileges[0].Luid)) { if(AdjustTokenPrivileges(hToken, FALSE, &tp, 0, NULL, NULL) && GetLastError() == ERROR_SUCCESS) g_bSaclPrivilege = TRUE; } CloseHandle(hToken); } #endif /* NTSD_EAS */ Carla-2.4.2/data/windows/unzipfx-carla/win32/nt.h000066400000000000000000000026141420416754300214740ustar00rootroot00000000000000/* Copyright (c) 1990-2005 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2000-Apr-09 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /* nt.h: central header for EF_NTSD "SD" extra field */ #ifndef _NT_H #define _NT_H #define NTSD_BUFFERSIZE (1024) /* threshold to cause malloc() */ #define OVERRIDE_BACKUP 1 /* we have SeBackupPrivilege on remote */ #define OVERRIDE_RESTORE 2 /* we have SeRestorePrivilege on remote */ #define OVERRIDE_SACL 4 /* we have SeSystemSecurityPrivilege on remote */ typedef struct { BOOL bValid; /* are our contents valid? */ BOOL bUsePrivileges; /* use privilege overrides? */ DWORD dwFileSystemFlags; /* describes target file system */ BOOL bRemote; /* is volume remote? */ DWORD dwRemotePrivileges; /* relevant only on remote volumes */ DWORD dwFileAttributes; char RootPath[MAX_PATH+1]; /* path to network / filesystem */ } VOLUMECAPS, *PVOLUMECAPS, *LPVOLUMECAPS; BOOL SecuritySet(char *resource, PVOLUMECAPS VolumeCaps, uch *securitydata); BOOL GetVolumeCaps(char *rootpath, char *name, PVOLUMECAPS VolumeCaps); BOOL ValidateSecurity(uch *securitydata); #endif /* _NT_H */ Carla-2.4.2/data/windows/unzipfx-carla/win32/w32cfg.h000066400000000000000000000443251420416754300221530ustar00rootroot00000000000000/* Copyright (c) 1990-2009 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2009-Jan-02 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- Win32 specific configuration section: ---------------------------------------------------------------------------*/ #ifndef __w32cfg_h #define __w32cfg_h #ifdef __MINGW32__ # define USE_STRM_INPUT #endif #ifdef __CYGWIN__ /* We treat the file system underneath the Cygwin Unix emulator environment * as "native VFAT/NTFS" and use the WIN32 API for its special attributes... */ # ifdef UNIX # undef UNIX # endif #endif #if (defined(_MSC_VER) && !defined(MSC)) # define MSC #endif /* enable multibyte character set support by default */ #if (!defined(_MBCS) && !defined(NO_MBCS)) # define _MBCS #endif #if (defined(_MBCS) && defined(NO_MBCS)) # undef _MBCS #endif #if (defined(__CYGWIN__) && defined(_MBCS)) # undef _MBCS /* Cygwin RTL lacks support for __mb_cur_max */ #endif #if (defined(__DJGPP__) && !defined(__EMX__) && defined(_MBCS)) # undef _MBCS /* __mb_cur_max missing for RSXNTdj 1.6 beta */ #endif #include /* off_t, time_t, dev_t, ... */ #include #include /* read(), open(), etc. */ #include #if ((defined(__RSXNT__) || defined(__EMX__)) && !defined(tzset)) # define tzset _tzset #endif #if (defined(__LCC__) && !defined(tzset)) # define tzset _tzset #endif #ifdef W32_USE_IZ_TIMEZONE # ifdef __BORLANDC__ # define tzname tzname # define IZTZ_DEFINESTDGLOBALS # endif # ifdef __WATCOMC__ # define IZTZ_DEFINESTDGLOBALS # endif # ifndef tzset # define tzset _tzset # endif # ifndef timezone # define timezone _timezone # endif # ifndef daylight # define daylight _daylight # endif # ifndef tzname # define tzname _tzname # endif # if (!defined(NEED__ISINDST) && !defined(__BORLANDC__)) # define NEED__ISINDST # endif # ifdef IZTZ_GETLOCALETZINFO # undef IZTZ_GETLOCALETZINFO # endif # define IZTZ_GETLOCALETZINFO GetPlatformLocalTimezone #endif /* W32_USE_IZ_TIMEZONE */ #include #if (!defined(__RSXNT__) && !defined(__CYGWIN__)) # include /* mkdir() */ #endif #include #ifdef __CYGWIN__ # include extern int setmode(int, int); /* this is missing in */ #endif #if (defined(MSC) || defined(__WATCOMC__) || defined(__MINGW32__)) # include #else # include #endif #define GOT_UTIMBUF #ifdef _MBCS # if (!defined(__EMX__) && !defined(__DJGPP__) && !defined(__CYGWIN__)) # if (!defined(__MINGW32__) || defined(__MSVCRT__)) # include # include /* for MSC (and compatible compilers), use routines supplied by RTL */ # define CLEN(ptr) _mbclen((const uch *)(ptr)) # define PREINCSTR(ptr) (ptr = (char *)_mbsinc((const uch *)(ptr))) # define MBSCHR(str, c) (char *)_mbschr((const uch *)(str), (c)) # define MBSRCHR(str, c) (char *)_mbsrchr((const uch *)(str), (c)) # endif # endif # if (defined(__MINGW32__) && !defined(MB_CUR_MAX)) # ifdef __MSVCRT__ extern int *__p___mb_cur_max(void); # define MB_CUR_MAX (*__p___mb_cur_max()) # else extern int *_imp____mb_cur_max_dll; # define MB_CUR_MAX (*_imp____mb_cur_max_dll) # endif # endif # if (defined(__LCC__) && !defined(MB_CUR_MAX)) extern int *_imp____mb_cur_max; # define MB_CUR_MAX (*_imp____mb_cur_max) # endif # if (defined(__DJGPP__) && !defined(__EMX__) && !defined(MB_CUR_MAX)) extern int *_imp____mb_cur_max; # define MB_CUR_MAX (*_imp____mb_cur_max) # endif #endif /* for UnZip, the "basic" part of the win32 api is sufficient */ #ifndef WIN32_LEAN_AND_MEAN # define WIN32_LEAN_AND_MEAN #endif #if defined(__FILEIO_C) # ifndef __CYGWIN__ # include # endif # include # ifdef __RSXNT__ # include "../win32/rsxntwin.h" # endif # ifndef TIME_ZONE_ID_INVALID # define TIME_ZONE_ID_INVALID (DWORD)0xFFFFFFFFL # endif #endif #if (defined(__ENVARGS_C) || defined(__EXTRACT_C) || defined(__UNZIP_C) || \ defined(ZCRYPT_INTERNAL)) # include # ifdef __RSXNT__ # include "../win32/rsxntwin.h" # endif # ifndef TIME_ZONE_ID_INVALID # define TIME_ZONE_ID_INVALID (DWORD)0xFFFFFFFFL # endif #endif #ifndef Cdecl # define Cdecl __cdecl #endif /* the following definitions are considered as "obsolete" by Microsoft and * might be missing in some versions of */ #ifndef AnsiToOem # define AnsiToOem CharToOemA #endif #ifndef OemToAnsi # define OemToAnsi OemToCharA #endif #define DIR_END '\\' /* OS uses '\\' as directory separator */ #define DIR_END2 '/' /* also check for '/' (RTL may convert) */ #ifdef DATE_FORMAT # undef DATE_FORMAT #endif #define DATE_FORMAT dateformat() #ifdef DATE_SEPCHAR # undef DATE_SEPCHAR #endif #define DATE_SEPCHAR dateseparator() #define lenEOL 2 #define PutNativeEOL {*q++ = native(CR); *q++ = native(LF);} #if (defined(__RSXNT__) && !defined(HAVE_MKTIME)) # define HAVE_MKTIME /* use mktime() in time conversion routines */ #endif #if (defined(MSC) && !defined(HAVE_MKTIME)) # define HAVE_MKTIME /* use mktime() in time conversion routines */ #endif #if (defined(__CYGWIN__) && defined(HAVE_MKTIME)) # undef HAVE_MKTIME /* Cygnus' mktime() implementation is buggy */ #endif #if (defined(W32_USE_IZ_TIMEZONE) && !defined(HAVE_MKTIME)) # define HAVE_MKTIME /* use mktime() in time conversion routines */ #endif #if (!defined(NO_EF_UT_TIME) && !defined(USE_EF_UT_TIME)) # define USE_EF_UT_TIME #endif #if (!defined(NO_DIR_ATTRIB) && !defined(SET_DIR_ATTRIB)) # define SET_DIR_ATTRIB #endif #if (!defined(NOTIMESTAMP) && !defined(TIMESTAMP)) # define TIMESTAMP #endif #if (!defined(NO_NTSD_EAS) && !defined(NTSD_EAS)) # define NTSD_EAS /* enable NTSD support unless explicitly suppressed */ #endif #if (defined(NTSD_EAS) && !defined(RESTORE_ACL)) # define RESTORE_ACL /* "restore ACLs" only needed when NTSD_EAS active */ #endif #if (!defined(NO_UNICODE_SUPPORT) && !defined(UNICODE_SUPPORT)) # define UNICODE_SUPPORT /* enable UTF-8 filename support by default */ #endif #if (defined(UNICODE_SUPPORT) && !defined(UNICODE_WCHAR)) # define UNICODE_WCHAR /* wchar_t is UTF-16 encoded on WIN32 */ #endif #ifdef UTF8_MAYBE_NATIVE # undef UTF8_MAYBE_NATIVE /* UTF-8 cannot be system charset on WIN32 */ #endif /* The following compiler systems provide or use a runtime library with a * locale-aware isprint() implementation. For these systems, the "enhanced" * unprintable charcode detection in fnfilter() gets enabled. */ #if (!defined(HAVE_WORKING_ISPRINT) && !defined(NO_WORKING_ISPRINT)) # if defined(MSC) || defined(__BORLANDC__) # define HAVE_WORKING_ISPRINT # endif # if defined(__MINGW32__) && defined(__MSVCRT__) # define HAVE_WORKING_ISPRINT # endif #endif /* WIN32 runs solely on little-endian processors; enable support * for the 32-bit optimized CRC-32 C code by default. */ #ifdef IZ_CRC_BE_OPTIMIZ # undef IZ_CRC_BE_OPTIMIZ #endif #if !defined(IZ_CRC_LE_OPTIMIZ) && !defined(NO_CRC_OPTIMIZ) # define IZ_CRC_LE_OPTIMIZ #endif /* handlers for OEM <--> ANSI string conversions */ #ifdef __RSXNT__ /* RSXNT uses OEM coded strings in functions supplied by C RTL */ # ifdef CRTL_CP_IS_ISO # undef CRTL_CP_IS_ISO # endif # ifndef CRTL_CP_IS_OEM # define CRTL_CP_IS_OEM # endif #else /* "real" native WIN32 compilers use ANSI coded strings in C RTL calls */ # ifndef CRTL_CP_IS_ISO # define CRTL_CP_IS_ISO # endif # ifdef CRTL_CP_IS_OEM # undef CRTL_CP_IS_OEM # endif #endif #ifdef CRTL_CP_IS_ISO /* C RTL's file system support assumes ANSI coded strings */ # define ISO_TO_INTERN(src, dst) {if ((src) != (dst)) strcpy((dst), (src));} # define OEM_TO_INTERN(src, dst) OemToAnsi(src, dst) # define INTERN_TO_ISO(src, dst) {if ((src) != (dst)) strcpy((dst), (src));} # define INTERN_TO_OEM(src, dst) AnsiToOem(src, dst) #endif /* CRTL_CP_IS_ISO */ #ifdef CRTL_CP_IS_OEM /* C RTL's file system support assumes OEM coded strings */ # define ISO_TO_INTERN(src, dst) AnsiToOem(src, dst) # define OEM_TO_INTERN(src, dst) {if ((src) != (dst)) strcpy((dst), (src));} # define INTERN_TO_ISO(src, dst) OemToAnsi(src, dst) # define INTERN_TO_OEM(src, dst) {if ((src) != (dst)) strcpy((dst), (src));} #endif /* CRTL_CP_IS_OEM */ #define _OEM_INTERN(str1) OEM_TO_INTERN(str1, str1) #define _ISO_INTERN(str1) ISO_TO_INTERN(str1, str1) #ifndef WINDLL /* Despite best intentions, for the command-line version UzpPassword() * could return either character set, depending on whether running under * Win95 (DOS-session) or WinNT (native WinNT command interpreter)! */ # define STR_TO_CP2(dst, src) (AnsiToOem(src, dst), dst) # define STR_TO_CP3(dst, src) (OemToAnsi(src, dst), dst) #else /* The WINDLL front end is known to supply ISO/ANSI-coded passwords! */ # define STR_TO_CP2(dst, src) (AnsiToOem(src, dst), dst) #endif /* dummy defines to disable these functions, they are not needed */ #define STR_TO_OEM #define STR_TO_ISO /* Static variables that we have to add to Uz_Globs: */ #define SYSTEM_SPECIFIC_GLOBALS \ int created_dir, renamed_fullpath, fnlen;\ unsigned nLabelDrive;\ char lastRootPath[4];\ int lastVolOldFAT, lastVolLocTim;\ char *rootpath, *buildpathHPFS, *buildpathFAT, *endHPFS, *endFAT;\ ZCONST char *wildname;\ char *dirname, matchname[FILNAMSIZ];\ int rootlen, have_dirname, dirnamelen, notfirstcall;\ zvoid *wild_dir; /* created_dir, renamed_fullpath, fnlen, and nLabelDrive are used by */ /* both mapname() and checkdir(). */ /* lastRootPath, lastVolOldFAT and lastVolLocTim are used by */ /* IsVolumeOldFAT() and NTQueryVolInfo(). */ /* rootlen, rootpath, buildpathHPFS, buildpathFAT, endHPFS, and endFAT */ /* are used by checkdir(). */ /* wild_dir, dirname, wildname, matchname[], dirnamelen, have_dirname, */ /* and notfirstcall are used by do_wild(). */ /* This replacement for C-RTL-supplied getch() (or similar) functionality * avoids leaving unabsorbed LFs in the keyboard buffer under Windows95, * and supports the +[0] feature. */ int getch_win32 OF((void)); /* Up to now, all versions of Microsoft C runtime libraries lack the support * for customized (non-US) switching rules between daylight saving time and * standard time in the TZ environment variable string. * But non-US timezone rules are correctly supported when timezone information * is read from the OS system settings in the Win32 registry. * The following work-around deletes any TZ environment setting from * the process environment. This results in a fallback of the RTL time * handling code to the (correctly interpretable) OS system settings, read * from the registry. */ #ifdef USE_EF_UT_TIME # if (defined(__WATCOMC__) || defined(__CYGWIN__) || \ defined(W32_USE_IZ_TIMEZONE)) # define iz_w32_prepareTZenv() # else # define iz_w32_prepareTZenv() putenv("TZ=") # endif #endif /* This patch of stat() is useful for at least two compilers. It is */ /* difficult to take a stat() of a root directory under Windows95, so */ /* zstat_win32() detects that case and fills in suitable values. */ #ifndef __RSXNT__ # ifndef W32_STATROOT_FIX # define W32_STATROOT_FIX # endif #endif /* !__RSXNT__ */ #define W32_STAT_BANDAID #if defined(REENTRANT) # define __W32STAT_GLOBALS__ Uz_Globs *pG, # define __W32STAT_G__ pG, #else # define __W32STAT_GLOBALS__ # define __W32STAT_G__ #endif #ifdef SSTAT # undef SSTAT #endif #ifdef WILD_STAT_BUG # define SSTAT(path, pbuf) (iswild(path) || zstat_win32(__W32STAT_G__ path, pbuf)) #else # define SSTAT(path, pbuf) zstat_win32(__W32STAT_G__ path, pbuf) #endif #ifdef __WATCOMC__ # ifdef __386__ # ifndef WATCOMC_386 # define WATCOMC_386 # endif # define __32BIT__ # undef far # define far # undef near # define near # undef Cdecl # define Cdecl /* gaah -- Watcom's docs claim that _get_osfhandle exists, but it doesn't. */ # define _get_osfhandle _os_handle /* Get asm routines to link properly without using "__cdecl": */ # ifndef USE_ZLIB # pragma aux crc32 "_*" parm caller [] value [eax] modify [eax] # pragma aux get_crc_table "_*" parm caller [] value [eax] \ modify [eax ecx edx] # endif /* !USE_ZLIB */ # endif /* __386__ */ #endif /* __WATCOMC__ */ #define SCREENWIDTH 80 #define SCREENSIZE(scrrows, scrcols) screensize(scrrows, scrcols) int screensize(int *tt_rows, int *tt_cols); /* on the DOS or NT console screen, line-wraps are always enabled */ #define SCREENLWRAP 1 #define TABSIZE 8 /* 64-bit-Integers & Large File Support * (pasted here from Zip 3b, osdep.h - Myles Bennett 7-jun-2004) * (updated from Zip 3.0d - Ed Gordon 6-oct-2004) * * If this is set it is assumed that the port * supports 64-bit file calls. The types are * defined here. Any local implementations are * in w32i64.c and the prototypes for the calls are * in unzip.h. Note that a port must support * these calls fully or should not set * LARGE_FILE_SUPPORT. */ /* Automatically set ZIP64_SUPPORT if supported */ #ifndef NO_ZIP64_SUPPORT # ifndef ZIP64_SUPPORT # if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__) # define ZIP64_SUPPORT # elif defined(__LCC__) /* LCC links against crtdll.dll -> no support of 64-bit offsets :( */ # elif (defined(__WATCOMC__) && (__WATCOMC__ >= 1100)) # define ZIP64_SUPPORT # elif (defined(__BORLANDC__) && (__BORLANDC__ >= 0x0520)) /* Borland C RTL lacks any support to get/set 64-bit file pointer :( */ # endif # endif #endif #ifdef ZIP64_SUPPORT /* base type for file offsets and file sizes */ # if (defined(__GNUC__) || defined(ULONG_LONG_MAX)) typedef long long zoff_t; # else /* all other compilers use this as intrinsic 64-bit type */ typedef __int64 zoff_t; # endif # define ZOFF_T_DEFINED /* user-defined types and format strings for 64-bit numbers and * file pointer functions (these depend on the rtl library and library * headers used; they are NOT compiler-specific) */ # if defined(_MSC_VER) || defined(__MINGW32__) || defined(__LCC__) /* MS C and VC, MinGW32, lcc32 */ /* these systems use the Microsoft C RTL */ /* 64-bit stat struct */ typedef struct _stati64 z_stat; # define Z_STAT_DEFINED # ifdef __LCC__ /* The LCC headers lack these declarations of MSC rtl functions in sys/stat.h. */ struct _stati64 { unsigned int st_dev; unsigned short st_ino; unsigned short st_mode; short st_nlink; short st_uid; short st_gid; unsigned int st_rdev; __int64 st_size; time_t st_atime; time_t st_mtime; time_t st_ctime; }; int _stati64(const char *, struct _stati64 *); int _fstati64(int, struct _stati64 *); __int64 _lseeki64(int, __int64, int); # endif /* __LCC__ */ /* printf format size prefix for zoff_t values */ # define FZOFFT_FMT "I64" # define FZOFFT_HEX_WID_VALUE "16" # define SHORTHDRSTATS "%9I64u %02u%c%02u%c%02u %02u:%02u %c" # define SHORTFILETRAILER " -------- -------\n%9I64u %9lu file%s\n" # elif (defined(__BORLANDC__) && (__BORLANDC__ >= 0x0520)) /* Borland C 5.2 or newer */ /* 64-bit stat struct */ typedef struct stati64 z_stat; # define Z_STAT_DEFINED /* Borland C does not provide a 64-bit-capable _lseeki64(), so we need to use the stdio.h stream functions instead. */ # ifndef USE_STRM_INPUT # define USE_STRM_INPUT # endif /* printf format size prefix for zoff_t values */ # define FZOFFT_FMT "L" # define FZOFFT_HEX_WID_VALUE "16" # define SHORTHDRSTATS "%9Lu %02u%c%02u%c%02u %02u:%02u %c" # define SHORTFILETRAILER " -------- -------\n%9Lu %9lu file%s\n" # elif (defined(__WATCOMC__) && (__WATCOMC__ >= 1100)) /* WATCOM C */ /* 64-bit stat struct */ typedef struct _stati64 z_stat; # define Z_STAT_DEFINED /* printf format size prefix for zoff_t values */ # define FZOFFT_FMT "ll" # define FZOFFT_HEX_WID_VALUE "16" # define SHORTHDRSTATS "%9llu %02u%c%02u%c%02u %02u:%02u %c" # define SHORTFILETRAILER " -------- -------\n%9llu %9lu file%s\n" # elif (defined(__IBMC__) && (__IBMC__ >= 350)) /* IBM C */ /* 64-bit stat struct */ /* printf format size prefix for zoff_t values */ # define FZOFFT_FMT "I64" # define FZOFFT_HEX_WID_VALUE "16" # define SHORTHDRSTATS "%9I64u %02u%c%02u%c%02u %02u:%02u %c" # define SHORTFILETRAILER " -------- -------\n%9I64u %9lu file%s\n" # endif #endif /* If port has LARGE_FILE_SUPPORT then define here to make automatic unless overridden */ #ifndef LARGE_FILE_SUPPORT # ifndef NO_LARGE_FILE_SUPPORT # if defined(_MSC_VER) || defined(__MINGW32__) # define LARGE_FILE_SUPPORT # elif defined(__LCC__) /* LCC links against crtdll.dll -> no support of 64-bit offsets :( */ # elif defined(__CYGWIN__) # define LARGE_FILE_SUPPORT # elif (defined(__WATCOMC__) && (__WATCOMC__ >= 1100)) # define LARGE_FILE_SUPPORT # elif (defined(__BORLANDC__) && (__BORLANDC__ >= 0x0520)) /* Borland C RTL lacks any support to get/set 64-bit file pointer :( */ # endif # endif #endif #ifndef LARGE_FILE_SUPPORT /* No Large File Support */ /* base type for file offsets and file sizes */ typedef long zoff_t; # define ZOFF_T_DEFINED /* stat struct */ typedef struct stat z_stat; # define Z_STAT_DEFINED # define FZOFFT_FMT "l" # define FZOFFT_HEX_WID_VALUE "8" # define SHORTHDRSTATS "%9lu %02u%c%02u%c%02u %02u:%02u %c" # define SHORTFILETRAILER " -------- -------\n%9lu %9lu file%s\n" #endif /* LARGE_FILE_SUPPORT */ #endif /* !__w32cfg_h */ Carla-2.4.2/data/windows/unzipfx-carla/win32/win32.c000066400000000000000000003275571420416754300220300ustar00rootroot00000000000000/* Copyright (c) 1990-2008 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2007-Mar-04 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- win32.c 32-bit Windows-specific (NT/9x) routines for use with Info-ZIP's UnZip 5.3 and later. Contains: GetLoadPath() Opendir() Readdir() Closedir() SetSD() set security descriptor on file FindSDExtraField() extract SD e.f. block from extra field IsWinNT() indicate type of WIN32 platform test_NTSD() test integrity of NT security data utime2NtfsFileTime() utime2VFatFileTime() FStampIsLocTime() NtfsFileTime2utime() VFatFileTime2utime() getNTfiletime() SetFileSize() close_outfile() defer_dir_attribs() set_direc_attribs() stamp_file() isfloppy() NTQueryVolInfo() IsVolumeOldFAT() do_wild() mapattr() mapname() maskDOSdevice() map2fat() checkdir() dateformat() dateseparator() version() screensize() zstat_win32() conv_to_rule() GetPlatformLocalTimezone() getch_win32() ---------------------------------------------------------------------------*/ #define UNZIP_INTERNAL #include #include "../unzip.h" #ifdef __RSXNT__ # include "../win32/rsxntwin.h" #endif #include "../win32/nt.h" #ifndef FUNZIP /* most of this file is not used with fUnZip */ /* some non-MS runtime headers (e.g. lcc) may miss this definition */ #ifndef FILE_WRITE_ATTRIBUTES # define FILE_WRITE_ATTRIBUTES 0x0100 #endif #if (defined(__EMX__) || defined(__CYGWIN__)) # define MKDIR(path,mode) mkdir(path,mode) #else # define MKDIR(path,mode) mkdir(path) #endif #ifdef HAVE_WORKING_DIRENT_H # undef HAVE_WORKING_DIRENT_H #endif /* The emxrtl dirent support of (__GO32__ || __EMX__) converts to lowercase! */ #if defined(__CYGWIN__) # define HAVE_WORKING_DIRENT_H #endif #ifndef SFX # ifdef HAVE_WORKING_DIRENT_H # include /* use readdir() */ # define zdirent dirent # define zDIR DIR # define Opendir opendir # define Readdir readdir # define Closedir closedir # else /* !HAVE_WORKING_DIRENT_H */ typedef struct zdirent { char reserved [21]; char ff_attrib; short ff_ftime; short ff_fdate; long size; char d_name[MAX_PATH]; int d_first; HANDLE d_hFindFile; } zDIR; static zDIR *Opendir (const char *n); static struct zdirent *Readdir (zDIR *d); static void Closedir (zDIR *d); # endif /* ?HAVE_WORKING_DIRENT_H */ #endif /* !SFX */ #ifdef SET_DIR_ATTRIB typedef struct NTdirattr { /* struct for holding unix style directory */ struct NTdirattr *next; /* info until can be sorted and set at end */ char *fn; /* filename of directory */ FILETIME Modft; /* File time type defined in NT, `last modified' time */ FILETIME Accft; /* NT file time type, `last access' time */ FILETIME Creft; /* NT file time type, `file creation' time */ int gotTime; unsigned perms; /* same as min_info.file_attr */ #ifdef NTSD_EAS unsigned SDlen; /* length of SD data in buf */ #endif char buf[1]; /* buffer stub for directory SD and name */ } NTdirattr; #define NtAtt(d) ((NTdirattr *)d) /* typecast shortcut */ #endif /* SET_DIR_ATTRIB */ /* Function prototypes */ #ifdef NTSD_EAS static int SetSD(__GPRO__ char *path, unsigned fperms, uch *eb_ptr, unsigned eb_len); static int FindSDExtraField(__GPRO__ uch *ef_ptr, unsigned ef_len, uch **p_ebSD_ptr, unsigned *p_ebSD_len); #endif #ifndef NO_W32TIMES_IZFIX static void utime2NtfsFileTime(time_t ut, FILETIME *pft); #endif static void utime2VFatFileTime(time_t ut, FILETIME *pft, int clipDosMin); #if (defined(W32_STAT_BANDAID) && !defined(NO_W32TIMES_IZFIX)) static int NtfsFileTime2utime(const FILETIME *pft, time_t *ut); #endif #ifdef W32_STAT_BANDAID static int VFatFileTime2utime(const FILETIME *pft, time_t *ut); #endif static int FStampIsLocTime(__GPRO__ const char *path); static int getNTfiletime (__GPRO__ FILETIME *pModFT, FILETIME *pAccFT, FILETIME *pCreFT); static int isfloppy (int nDrive); static int NTQueryVolInfo (__GPRO__ const char *name); static int IsVolumeOldFAT (__GPRO__ const char *name); static void maskDOSdevice (__GPRO__ char *pathcomp); static void map2fat (char *pathcomp, char **pEndFAT); #if (defined(__MINGW32__) && !defined(USE_MINGW_GLOBBING)) int _CRT_glob = 0; /* suppress command line globbing by C RTL */ #endif #ifdef ACORN_FTYPE_NFS /* Acorn bits for NFS filetyping */ typedef struct { uch ID[2]; uch size[2]; uch ID_2[4]; uch loadaddr[4]; uch execaddr[4]; uch attr[4]; } RO_extra_block; #endif /* ACORN_FTYPE_NFS */ /* static int created_dir; */ /* used by mapname(), checkdir() */ /* static int renamed_fullpath; */ /* ditto */ /* static int fnlen; */ /* ditto */ /* static unsigned nLabelDrive; */ /* ditto */ extern char Far TruncNTSD[]; /* in extract.c */ #ifdef SFX /**************************/ /* Function GetLoadPath() */ /**************************/ char *GetLoadPath(__GPRO) { #ifdef MSC extern char *_pgmptr; return _pgmptr; #else /* use generic API call */ GetModuleFileName(NULL, G.filename, FILNAMSIZ); _ISO_INTERN(G.filename); /* translate to codepage of C rtl's stdio */ return G.filename; #endif } /* end function GetLoadPath() */ #else /* !SFX */ #ifndef HAVE_WORKING_DIRENT_H /**********************/ /* Borrowed from ZIP 2.0 sources */ /* Function Opendir() */ /* Difference: no special handling for */ /**********************/ /* hidden or system files. */ static zDIR *Opendir(n) const char *n; /* directory to open */ { zDIR *d; /* malloc'd return value */ char *p; /* malloc'd temporary string */ WIN32_FIND_DATAA fd; extent len = strlen(n); /* Start searching for files in directory n */ if ((d = (zDIR *)malloc(sizeof(zDIR))) == NULL || (p = malloc(strlen(n) + 5)) == NULL) { if (d != (zDIR *)NULL) free((void *)d); return (zDIR *)NULL; } INTERN_TO_ISO(n, p); if (len > 0) { if (p[len-1] == ':') p[len++] = '.'; /* x: => x:. */ else if (p[len-1] == '/' || p[len-1] == '\\') --len; /* foo/ => foo */ } strcpy(p+len, "/*"); if (INVALID_HANDLE_VALUE == (d->d_hFindFile = FindFirstFileA(p, &fd))) { free((zvoid *)d); free((zvoid *)p); return NULL; } strcpy(d->d_name, fd.cFileName); free((zvoid *)p); d->d_first = 1; return d; } /* end of function Opendir() */ /**********************/ /* Borrowed from ZIP 2.0 sources */ /* Function Readdir() */ /* Difference: no special handling for */ /**********************/ /* hidden or system files. */ static struct zdirent *Readdir(d) zDIR *d; /* directory stream from which to read */ { /* Return pointer to first or next directory entry, or NULL if end. */ if ( d->d_first ) d->d_first = 0; else { WIN32_FIND_DATAA fd; if ( !FindNextFileA(d->d_hFindFile, &fd) ) return NULL; ISO_TO_INTERN(fd.cFileName, d->d_name); } return (struct zdirent *)d; } /* end of function Readdir() */ /***********************/ /* Function Closedir() */ /* Borrowed from ZIP 2.0 sources */ /***********************/ static void Closedir(d) zDIR *d; /* directory stream to close */ { FindClose(d->d_hFindFile); free(d); } #endif /* !HAVE_WORKING_DIRENT_H */ #endif /* ?SFX */ #ifdef NTSD_EAS /**********************/ /* Function SetSD() */ /* return almost-PK errors */ /**********************/ static int SetSD(__G__ path, fperms, eb_ptr, eb_len) __GDEF char *path; unsigned fperms; uch *eb_ptr; unsigned eb_len; { ulg ntsd_ucSize; VOLUMECAPS VolumeCaps; uch *security_data; int error; ntsd_ucSize = makelong(eb_ptr + (EB_HEADSIZE+EB_UCSIZE_P)); if (ntsd_ucSize > 0L && eb_len <= (EB_NTSD_L_LEN + EB_CMPRHEADLEN)) return IZ_EF_TRUNC; /* no compressed data! */ /* provide useful input */ VolumeCaps.dwFileAttributes = fperms; VolumeCaps.bUsePrivileges = (uO.X_flag > 1); /* check target volume capabilities - just fall through * and try if fail */ if (GetVolumeCaps(G.rootpath, path, &VolumeCaps) && !(VolumeCaps.dwFileSystemFlags & FS_PERSISTENT_ACLS)) return PK_OK; /* allocate storage for uncompressed data */ security_data = (uch *)malloc((extent)ntsd_ucSize); if (security_data == (uch *)NULL) return PK_MEM4; error = memextract(__G__ security_data, ntsd_ucSize, (eb_ptr + (EB_HEADSIZE+EB_NTSD_L_LEN)), (ulg)(eb_len - EB_NTSD_L_LEN)); if (error == PK_OK) { if (SecuritySet(path, &VolumeCaps, security_data)) { error = PK_COOL; if (!uO.tflag && QCOND2) Info(slide, 0, ((char *)slide, " (%ld bytes security)", ntsd_ucSize)); } } free(security_data); return error; } /********************************/ /* scan extra fields for something */ /* Function FindSDExtraField() */ /* we happen to know */ /********************************/ /* Returns TRUE when a valid NTFS SD block is found. * Address and size of the NTSD e.f. block are passed up to the caller. * In case of more than one valid NTSD block in the e.f., the last block * found is passed up. * Returns FALSE and leaves the content of the ebSD_ptr and ebSD_len * parameters untouched when no valid NTFS SD block is found. */ static int FindSDExtraField(__GPRO__ uch *ef_ptr, unsigned ef_len, uch **p_ebSD_ptr, unsigned *p_ebSD_len) { int rc = FALSE; if (!uO.X_flag) return FALSE; /* user said don't process ACLs; for now, no other extra block types are handled here */ while (ef_len >= EB_HEADSIZE) { unsigned eb_id = makeword(EB_ID + ef_ptr); unsigned eb_len = makeword(EB_LEN + ef_ptr); if (eb_len > (ef_len - EB_HEADSIZE)) { /* discovered some extra field inconsistency! */ Trace((stderr, "FindSDExtraField: block length %u > rest ef_size %u\n", eb_len, ef_len - EB_HEADSIZE)); break; } switch (eb_id) { /* process security descriptor extra data if: Caller is WinNT AND Target local/remote drive supports acls AND Target file is not a directory (else we defer processing until later) */ case EF_NTSD: if (!IsWinNT()) break; /* OS not capable of handling NTFS attributes */ if (eb_len < EB_NTSD_L_LEN) break; /* not a valid NTSD extra field */ /* check if we know how to handle this version */ if (*(ef_ptr + (EB_HEADSIZE+EB_NTSD_VERSION)) > (uch)EB_NTSD_MAX_VER) break; *p_ebSD_ptr = ef_ptr; *p_ebSD_len = eb_len; rc = TRUE; break; #ifdef DEBUG case EF_OS2: case EF_AV: case EF_PKVMS: case EF_PKW32: case EF_PKUNIX: case EF_IZVMS: case EF_IZUNIX: case EF_IZUNIX2: case EF_TIME: case EF_MAC3: case EF_JLMAC: case EF_ZIPIT: case EF_VMCMS: case EF_MVS: case EF_ACL: case EF_ATHEOS: case EF_BEOS: case EF_QDOS: case EF_AOSVS: case EF_SPARK: case EF_MD5: case EF_ASIUNIX: break; /* shut up for other known e.f. blocks */ #endif /* DEBUG */ default: Trace((stderr, "FindSDExtraField: unknown extra field block, ID=%u\n", eb_id)); break; } ef_ptr += (eb_len + EB_HEADSIZE); ef_len -= (eb_len + EB_HEADSIZE); } return rc; } #ifndef SFX /**************************/ /* Function test_NTSD() */ /* returns PK_WARN when NTSD data is invalid */ /**************************/ #ifdef __BORLANDC__ /* Turn off warning about not using all parameters for this function only */ #pragma argsused #endif int test_NTSD(__G__ eb, eb_size, eb_ucptr, eb_ucsize) __GDEF uch *eb; unsigned eb_size; uch *eb_ucptr; ulg eb_ucsize; { return (ValidateSecurity(eb_ucptr) ? PK_OK : PK_WARN); } /* end function test_NTSD() */ #endif /* !SFX */ #endif /* NTSD_EAS */ /**********************/ /* Function IsWinNT() */ /**********************/ int IsWinNT(void) /* returns TRUE if real NT, FALSE if Win9x or Win32s */ { static DWORD g_PlatformId = 0xFFFFFFFF; /* saved platform indicator */ if (g_PlatformId == 0xFFFFFFFF) { /* note: GetVersionEx() doesn't exist on WinNT 3.1 */ if (GetVersion() < 0x80000000) g_PlatformId = TRUE; else g_PlatformId = FALSE; } return (int)g_PlatformId; } /* DEBUG_TIME insertion: */ #ifdef DEBUG_TIME static int show_NTFileTime(FILE *hdo, char *TTmsg, int isloc, FILETIME *pft); static int show_NTFileTime(FILE *hdo, char *TTmsg, int isloc, FILETIME *pft) { SYSTEMTIME w32tm; int rval; rval = FileTimeToSystemTime(pft, &w32tm); if (!rval) { fprintf(hdo, "%s\n %08lX,%08lX (%s) -> Conversion failed !!!\n", TTmsg, (ulg)(pft->dwHighDateTime), (ulg)(pft->dwLowDateTime), (isloc ? "local" : "UTC")); } else { fprintf(hdo, "%s\n %08lx,%08lx -> %04u-%02u-%02u, %02u:%02u:%02u %s\n", TTmsg, (ulg)(pft->dwHighDateTime), (ulg)(pft->dwLowDateTime), w32tm.wYear, w32tm.wMonth, w32tm.wDay, w32tm.wHour, w32tm.wMinute, w32tm.wSecond, (isloc ? "local" : "UTC")); } return rval; } #define FTTrace(x) show_NTFileTime x #else #define FTTrace(x) #endif /* DEBUG_TIME */ /* end of DEBUG_TIME insertion */ #ifndef IZ_USE_INT64 # if (defined(__GNUC__) || defined(ULONG_LONG_MAX)) typedef long long LLONG64; typedef unsigned long long ULLNG64; # define IZ_USE_INT64 # elif (defined(__WATCOMC__) && (__WATCOMC__ >= 1100)) typedef __int64 LLONG64; typedef unsigned __int64 ULLNG64; # define IZ_USE_INT64 # elif (defined(_MSC_VER) && (_MSC_VER >= 1100)) typedef __int64 LLONG64; typedef unsigned __int64 ULLNG64; # define IZ_USE_INT64 # elif (defined(__IBMC__) && (__IBMC__ >= 350)) typedef __int64 LLONG64; typedef unsigned __int64 ULLNG64; # define IZ_USE_INT64 # elif defined(HAVE_INT64) typedef __int64 LLONG64; typedef unsigned __int64 ULLNG64; # define IZ_USE_INT64 # endif #endif /* scale factor and offset for conversion time_t -> FILETIME */ #define NT_QUANTA_PER_UNIX 10000000L #define UNIX_TIME_ZERO_HI 0x019DB1DEUL #define UNIX_TIME_ZERO_LO 0xD53E8000UL /* special FILETIME values for bound-checks */ #define UNIX_TIME_UMAX_HI 0x0236485EUL #define UNIX_TIME_UMAX_LO 0xD4A5E980UL #define UNIX_TIME_SMIN_HI 0x0151669EUL #define UNIX_TIME_SMIN_LO 0xD53E8000UL #define UNIX_TIME_SMAX_HI 0x01E9FD1EUL #define UNIX_TIME_SMAX_LO 0xD4A5E980UL #define DOSTIME_MIN_FT_HI 0x01A8E79FUL #define DOSTIME_MIN_FT_LO 0xE1D58000UL /* time_t equivalent of DOSTIME_MINIMUM */ #define UTIME_1980_JAN_01_00_00 315532800L #ifndef NO_W32TIMES_IZFIX /*********************************/ /* Function utime2NtfsFileTime() */ /* convert Unix time_t format into the */ /*********************************/ /* form used by SetFileTime() in NT/9x */ static void utime2NtfsFileTime(time_t ut, FILETIME *pft) { #ifdef IZ_USE_INT64 ULLNG64 NTtime; /* NT_QUANTA_PER_UNIX is small enough so that "ut * NT_QUANTA_PER_UNIX" * cannot overflow in 64-bit signed calculation, regardless whether "ut" * is signed or unsigned. */ NTtime = ((LLONG64)ut * NT_QUANTA_PER_UNIX) + ((ULLNG64)UNIX_TIME_ZERO_LO + ((ULLNG64)UNIX_TIME_ZERO_HI << 32)); pft->dwLowDateTime = (DWORD)NTtime; pft->dwHighDateTime = (DWORD)(NTtime >> 32); #else /* !IZ_USE_INT64 (64-bit integer arithmetics may not be supported) */ unsigned int b1, b2, carry = 0; unsigned long r0, r1, r2, r3; long r4; /* signed, to catch environments with signed time_t */ b1 = ut & 0xFFFF; b2 = (ut >> 16) & 0xFFFF; /* if ut is over 32 bits, too bad */ r1 = b1 * (NT_QUANTA_PER_UNIX & 0xFFFF); r2 = b1 * (NT_QUANTA_PER_UNIX >> 16); r3 = b2 * (NT_QUANTA_PER_UNIX & 0xFFFF); r4 = b2 * (NT_QUANTA_PER_UNIX >> 16); r0 = (r1 + (r2 << 16)) & 0xFFFFFFFFL; if (r0 < r1) carry++; r1 = r0; r0 = (r0 + (r3 << 16)) & 0xFFFFFFFFL; if (r0 < r1) carry++; pft->dwLowDateTime = r0 + UNIX_TIME_ZERO_LO; if (pft->dwLowDateTime < r0) carry++; pft->dwHighDateTime = r4 + (r2 >> 16) + (r3 >> 16) + UNIX_TIME_ZERO_HI + carry; #endif /* ?IZ_USE_INT64 */ } /* end function utime2NtfsFileTime() */ #endif /* !NO_W32TIMES_IZFIX */ /*********************************/ /* Function utime2VFatFileTime() */ /* convert Unix time_t format into the */ /*********************************/ /* form used by SetFileTime() in NT/9x */ static void utime2VFatFileTime(time_t ut, FILETIME *pft, int clipDosMin) { time_t utc = ut; struct tm *ltm; SYSTEMTIME w32tm; FILETIME lft; /* The milliseconds field gets always initialized to 0. */ w32tm.wMilliseconds = 0; #ifdef __BORLANDC__ /* Borland C++ 5.x crashes when trying to reference tm */ if (utc < UTIME_1980_JAN_01_00_00) utc = UTIME_1980_JAN_01_00_00; #endif ltm = localtime(&utc); if (ltm == (struct tm *)NULL) /* localtime() did not accept given utc time value; try to use the UTC value */ ltm = gmtime(&utc); if (ltm == (struct tm *)NULL) { if (ut <= (UTIME_1980_JAN_01_00_00 + 86400)) { /* use DOSTIME_MINIMUM date instead of "early" failure dates */ w32tm.wYear = 1980; w32tm.wMonth = 1; w32tm.wDay = 1; w32tm.wHour = 0; w32tm.wMinute = 0; w32tm.wSecond = 0; } else { /* as a last resort, use the current system time */ GetLocalTime(&w32tm); } } else if (clipDosMin && (ltm->tm_year < 80)) { w32tm.wYear = 1980; w32tm.wMonth = 1; w32tm.wDay = 1; w32tm.wHour = 0; w32tm.wMinute = 0; w32tm.wSecond = 0; } else { w32tm.wYear = ltm->tm_year + 1900; /* year + 1900 -> year */ w32tm.wMonth = ltm->tm_mon + 1; /* 0..11 -> 1..12 */ w32tm.wDay = ltm->tm_mday; /* 1..31 */ w32tm.wHour = ltm->tm_hour; /* 0..23 */ w32tm.wMinute = ltm->tm_min; /* 0..59 */ w32tm.wSecond = ltm->tm_sec; /* 0..61 in ANSI C */ } SystemTimeToFileTime(&w32tm, &lft); LocalFileTimeToFileTime(&lft, pft); } /* end function utime2VFatFileTime() */ /* nonzero if `y' is a leap year, else zero */ #define leap(y) (((y)%4 == 0 && (y)%100 != 0) || (y)%400 == 0) /* number of leap years from 1970 to `y' (not including `y' itself) */ #define nleap(y) (((y)-1969)/4 - ((y)-1901)/100 + ((y)-1601)/400) extern ZCONST ush ydays[]; /* defined in fileio.c */ #if (defined(W32_STAT_BANDAID) && !defined(NO_W32TIMES_IZFIX)) /*********************************/ /* Function NtfsFileTime2utime() */ /*********************************/ static int NtfsFileTime2utime(const FILETIME *pft, time_t *ut) { #ifdef IZ_USE_INT64 ULLNG64 NTtime; NTtime = ((ULLNG64)pft->dwLowDateTime + ((ULLNG64)pft->dwHighDateTime << 32)); #ifndef TIME_T_TYPE_DOUBLE /* underflow and overflow handling */ #ifdef CHECK_UTIME_SIGNED_UNSIGNED if ((time_t)0x80000000L < (time_t)0L) { if (NTtime < ((ULLNG64)UNIX_TIME_SMIN_LO + ((ULLNG64)UNIX_TIME_SMIN_HI << 32))) { *ut = (time_t)LONG_MIN; return FALSE; } if (NTtime > ((ULLNG64)UNIX_TIME_SMAX_LO + ((ULLNG64)UNIX_TIME_SMAX_HI << 32))) { *ut = (time_t)LONG_MAX; return FALSE; } } else #endif /* CHECK_UTIME_SIGNED_UNSIGNED */ { if (NTtime < ((ULLNG64)UNIX_TIME_ZERO_LO + ((ULLNG64)UNIX_TIME_ZERO_HI << 32))) { *ut = (time_t)0; return FALSE; } if (NTtime > ((ULLNG64)UNIX_TIME_UMAX_LO + ((ULLNG64)UNIX_TIME_UMAX_HI << 32))) { *ut = (time_t)ULONG_MAX; return FALSE; } } #endif /* !TIME_T_TYPE_DOUBLE */ NTtime -= ((ULLNG64)UNIX_TIME_ZERO_LO + ((ULLNG64)UNIX_TIME_ZERO_HI << 32)); *ut = (time_t)(NTtime / (unsigned long)NT_QUANTA_PER_UNIX); return TRUE; #else /* !IZ_USE_INT64 (64-bit integer arithmetics may not be supported) */ time_t days; SYSTEMTIME w32tm; #ifndef TIME_T_TYPE_DOUBLE /* underflow and overflow handling */ #ifdef CHECK_UTIME_SIGNED_UNSIGNED if ((time_t)0x80000000L < (time_t)0L) { if ((pft->dwHighDateTime < UNIX_TIME_SMIN_HI) || ((pft->dwHighDateTime == UNIX_TIME_SMIN_HI) && (pft->dwLowDateTime < UNIX_TIME_SMIN_LO))) { *ut = (time_t)LONG_MIN; return FALSE; if ((pft->dwHighDateTime > UNIX_TIME_SMAX_HI) || ((pft->dwHighDateTime == UNIX_TIME_SMAX_HI) && (pft->dwLowDateTime > UNIX_TIME_SMAX_LO))) { *ut = (time_t)LONG_MAX; return FALSE; } } else #endif /* CHECK_UTIME_SIGNED_UNSIGNED */ { if ((pft->dwHighDateTime < UNIX_TIME_ZERO_HI) || ((pft->dwHighDateTime == UNIX_TIME_ZERO_HI) && (pft->dwLowDateTime < UNIX_TIME_ZERO_LO))) { *ut = (time_t)0; return FALSE; } if ((pft->dwHighDateTime > UNIX_TIME_UMAX_HI) || ((pft->dwHighDateTime == UNIX_TIME_UMAX_HI) && (pft->dwLowDateTime > UNIX_TIME_UMAX_LO))) { *ut = (time_t)ULONG_MAX; return FALSE; } } #endif /* !TIME_T_TYPE_DOUBLE */ FileTimeToSystemTime(pft, &w32tm); /* set `days' to the number of days into the year */ days = w32tm.wDay - 1 + ydays[w32tm.wMonth-1] + (w32tm.wMonth > 2 && leap (w32tm.wYear)); /* now set `days' to the number of days since 1 Jan 1970 */ days += 365 * (time_t)(w32tm.wYear - 1970) + (time_t)(nleap(w32tm.wYear)); *ut = (time_t)(86400L * days + 3600L * (time_t)w32tm.wHour + (time_t)(60 * w32tm.wMinute + w32tm.wSecond)); return TRUE; #endif /* ?IZ_USE_INT64 */ } /* end function NtfsFileTime2utime() */ #endif /* W32_STAT_BANDAID && !NO_W32TIMES_IZFIX */ #ifdef W32_STAT_BANDAID /*********************************/ /* Function VFatFileTime2utime() */ /*********************************/ static int VFatFileTime2utime(const FILETIME *pft, time_t *ut) { FILETIME lft; #ifndef HAVE_MKTIME WORD wDOSDate, wDOSTime; #else SYSTEMTIME w32tm; struct tm ltm; #endif if (!FileTimeToLocalFileTime(pft, &lft)) { /* if pft cannot be converted to local time, set ut to current time */ time(ut); return FALSE; } FTTrace((stdout, "VFatFT2utime, feed for mktime()", 1, &lft)); #ifndef HAVE_MKTIME /* This version of the FILETIME-to-UNIXTIME conversion function * uses DOS-DATE-TIME format as intermediate stage. For modification * and access times, this is no problem. But, the extra fine resolution * of the VFAT-stored creation time gets lost. */ if (!FileTimeToDosDateTime(&lft, &wDOSDate, &wDOSTime)) { static const FILETIME dosmin_ft = {DOSTIME_MIN_FT_LO, DOSTIME_MIN_FT_HI}; if (CompareFileTime(&lft, &dosmin_ft) <= 0) { /* underflow -> set to minimum DOS time */ wDOSDate = (WORD)((DWORD)DOSTIME_MINIMUM >> 16); wDOSTime = (WORD)DOSTIME_MINIMUM; } else { /* overflow -> set to maximum DOS time */ wDOSDate = (WORD)0xFF9F; /* 2107-12-31 */ wDOSTime = (WORD)0xBF7D; /* 23:59:58 */ } } TTrace((stdout,"DosDateTime is %04u-%02u-%02u %02u:%02u:%02u\n", (unsigned)((wDOSDate>>9)&0x7f)+1980,(unsigned)((wDOSDate>>5)&0x0f), (unsigned)(wDOSDate&0x1f),(unsigned)((wDOSTime>>11)&0x1f), (unsigned)((wDOSTime>>5)&0x3f),(unsigned)((wDOSTime<<1)&0x3e))); *ut = dos_to_unix_time(((ulg)wDOSDate << 16) | (ulg)wDOSTime); /* a cheap error check: dos_to_unix_time() only returns an odd time * when clipping at maximum time_t value. DOS_DATE_TIME values have * a resolution of 2 seconds and are therefore even numbers. */ return (((*ut)&1) == (time_t)0); #else /* HAVE_MKTIME */ FileTimeToSystemTime(&lft, &w32tm); #ifndef TIME_T_TYPE_DOUBLE /* underflow and overflow handling */ /* TODO: The range checks are not accurate, the actual limits may * be off by one daylight-saving-time shift (typically 1 hour), * depending on the current state of "is_dst". */ #ifdef CHECK_UTIME_SIGNED_UNSIGNED if ((time_t)0x80000000L < (time_t)0L) { if ((pft->dwHighDateTime < UNIX_TIME_SMIN_HI) || ((pft->dwHighDateTime == UNIX_TIME_SMIN_HI) && (pft->dwLowDateTime < UNIX_TIME_SMIN_LO))) { *ut = (time_t)LONG_MIN; return FALSE; if ((pft->dwHighDateTime > UNIX_TIME_SMAX_HI) || ((pft->dwHighDateTime == UNIX_TIME_SMAX_HI) && (pft->dwLowDateTime > UNIX_TIME_SMAX_LO))) { *ut = (time_t)LONG_MAX; return FALSE; } } else #endif /* CHECK_UTIME_SIGNED_UNSIGNED */ { if ((pft->dwHighDateTime < UNIX_TIME_ZERO_HI) || ((pft->dwHighDateTime == UNIX_TIME_ZERO_HI) && (pft->dwLowDateTime < UNIX_TIME_ZERO_LO))) { *ut = (time_t)0; return FALSE; } if ((pft->dwHighDateTime > UNIX_TIME_UMAX_HI) || ((pft->dwHighDateTime == UNIX_TIME_UMAX_HI) && (pft->dwLowDateTime > UNIX_TIME_UMAX_LO))) { *ut = (time_t)ULONG_MAX; return FALSE; } } #endif /* !TIME_T_TYPE_DOUBLE */ ltm.tm_year = w32tm.wYear - 1900; ltm.tm_mon = w32tm.wMonth - 1; ltm.tm_mday = w32tm.wDay; ltm.tm_hour = w32tm.wHour; ltm.tm_min = w32tm.wMinute; ltm.tm_sec = w32tm.wSecond; ltm.tm_isdst = -1; /* let mktime determine if DST is in effect */ *ut = mktime(<m); /* a cheap error check: mktime returns "(time_t)-1L" on conversion errors. * Normally, we would have to apply a consistency check because "-1" * could also be a valid time. But, it is quite unlikely to read back odd * time numbers from file systems that store time stamps in DOS format. * (The only known exception is creation time on VFAT partitions.) */ return (*ut != (time_t)-1L); #endif /* ?HAVE_MKTIME */ } /* end function VFatFileTime2utime() */ #endif /* W32_STAT_BANDAID */ /******************************/ /* Function FStampIsLocTime() */ /******************************/ static int FStampIsLocTime(__GPRO__ const char *path) { return (NTQueryVolInfo(__G__ path) ? G.lastVolLocTim : FALSE); } #ifndef NO_W32TIMES_IZFIX # define UTIME_2_IZFILETIME(ut, pft) \ if (fs_uses_loctime) {utime2VFatFileTime(ut, pft, TRUE);} \ else {utime2NtfsFileTime(ut, pft);} #else # define UTIME_2_IZFILETIME(ut, pft) \ utime2VFatFileTime(ut, pft, fs_uses_loctime); #endif /****************************/ /* Get the file time in a format that */ /* Function getNTfiletime() */ /* can be used by SetFileTime() in NT */ /****************************/ static int getNTfiletime(__G__ pModFT, pAccFT, pCreFT) __GDEF FILETIME *pModFT; FILETIME *pAccFT; FILETIME *pCreFT; { #ifdef USE_EF_UT_TIME unsigned eb_izux_flg; iztimes z_utime; /* struct for Unix-style actime & modtime, + creatime */ #endif int fs_uses_loctime = FStampIsLocTime(__G__ G.filename); /* Copy and/or convert time and date variables, if necessary; * return a flag indicating which time stamps are available. */ #ifdef USE_EF_UT_TIME if (G.extra_field && #ifdef IZ_CHECK_TZ G.tz_is_valid && #endif ((eb_izux_flg = ef_scan_for_izux(G.extra_field, G.lrec.extra_field_length, 0, G.lrec.last_mod_dos_datetime, &z_utime, NULL)) & EB_UT_FL_MTIME)) { TTrace((stderr, "getNTfiletime: Unix e.f. modif. time = %lu\n", z_utime.mtime)); UTIME_2_IZFILETIME(z_utime.mtime, pModFT) if (eb_izux_flg & EB_UT_FL_ATIME) { UTIME_2_IZFILETIME(z_utime.atime, pAccFT) } if (eb_izux_flg & EB_UT_FL_CTIME) { UTIME_2_IZFILETIME(z_utime.ctime, pCreFT) } return (int)eb_izux_flg; } #endif /* USE_EF_UT_TIME */ #ifndef NO_W32TIMES_IZFIX if (!fs_uses_loctime) { time_t ux_modtime; ux_modtime = dos_to_unix_time(G.lrec.last_mod_dos_datetime); utime2NtfsFileTime(ux_modtime, pModFT); } else #endif /* NO_W32TIMES_IZFIX */ { FILETIME lft; DosDateTimeToFileTime((WORD)(G.lrec.last_mod_dos_datetime >> 16), (WORD)(G.lrec.last_mod_dos_datetime & 0xFFFFL), &lft); LocalFileTimeToFileTime(&lft, pModFT); } *pAccFT = *pModFT; return (EB_UT_FL_MTIME | EB_UT_FL_ATIME); } /* end function getNTfiletime() */ /**************************/ /* Function SetFileSize() */ /**************************/ int SetFileSize(FILE *file, zusz_t filesize) { #ifdef __RSXNT__ /* RSXNT environment lacks a translation function from C file pointer to Win32-API file handle. So, simply do nothing. */ return 0; #else /* !__RSXNT__ */ /* not yet verified, if that really creates an unfragmented file rommel@ars.de */ HANDLE os_fh; #ifdef Z_UINT8_DEFINED LARGE_INTEGER fsbuf; #endif /* Win9x supports FAT file system, only; presetting file size does not help to prevent fragmentation. */ if (!IsWinNT()) return 0; /* Win32-API calls require access to the Win32 file handle. The interface function used to retrieve the Win32 handle for a file opened by the C rtl is non-standard and may not be available for every Win32 compiler environment. (see also win32/win32.c of the Zip distribution) */ os_fh = (HANDLE)_get_osfhandle(fileno(file)); /* move file pointer behind the last byte of the expected file size */ #ifdef Z_UINT8_DEFINED fsbuf.QuadPart = filesize; if ((SetFilePointer(os_fh, fsbuf.LowPart, &fsbuf.HighPart, FILE_BEGIN) == 0xFFFFFFFF) && GetLastError() != NO_ERROR) #else if (SetFilePointer(os_fh, (ulg)filesize, 0, FILE_BEGIN) == 0xFFFFFFFF) #endif return -1; /* extend/truncate file to the current position */ if (SetEndOfFile(os_fh) == 0) return -1; /* move file position pointer back to the start of the file! */ return (SetFilePointer(os_fh, 0, 0, FILE_BEGIN) == 0xFFFFFFFF) ? -1 : 0; #endif /* ?__RSXNT__ */ } /* end function SetFileSize() */ /****************************/ /* Function close_outfile() */ /****************************/ void close_outfile(__G) __GDEF { FILETIME Modft; /* File time type defined in NT, `last modified' time */ FILETIME Accft; /* NT file time type, `last access' time */ FILETIME Creft; /* NT file time type, `file creation' time */ HANDLE hFile = INVALID_HANDLE_VALUE; /* File handle defined in NT */ int gotTime; #ifdef NTSD_EAS uch *ebSDptr; unsigned ebSDlen; #endif #ifdef __RSXNT__ /* RSXNT/EMX C rtl uses OEM charset */ char *ansi_name = (char *)alloca(strlen(G.filename) + 1); INTERN_TO_ISO(G.filename, ansi_name); # define Ansi_Fname ansi_name #else # define Ansi_Fname G.filename #endif #ifndef __RSXNT__ if (IsWinNT()) { /* Truncate the file to the current position. * This is needed to remove excess allocation in case the * extraction has failed or stopped prematurely. */ SetEndOfFile((HANDLE)_get_osfhandle(fileno(G.outfile))); } #endif /* Close the file and then re-open it using the Win32 * CreateFile call, so that the file can be created * with GENERIC_WRITE access, otherwise the SetFileTime * call will fail. */ fclose(G.outfile); /* don't set the time stamp and attributes on standard output */ if (uO.cflag) return; /* skip restoring time stamps on user's request */ if (uO.D_flag <= 1) { gotTime = getNTfiletime(__G__ &Modft, &Accft, &Creft); /* open a handle to the file before processing extra fields; we do this in case new security on file prevents us from updating time stamps */ hFile = CreateFileA(Ansi_Fname, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); } else { gotTime = 0; } /* sfield@microsoft.com: set attributes before time in case we decide to support other filetime members later. This also allows us to apply attributes before the security is changed, which may prevent this from succeeding otherwise. Also, since most files don't have any interesting attributes, only change them if something other than FILE_ATTRIBUTE_ARCHIVE appears in the attributes. This works well as an optimization because FILE_ATTRIBUTE_ARCHIVE gets applied to the file anyway, when it's created new. */ if ((G.pInfo->file_attr & 0x7F) & ~FILE_ATTRIBUTE_ARCHIVE) { if (!SetFileAttributesA(Ansi_Fname, G.pInfo->file_attr & 0x7F)) Info(slide, 1, ((char *)slide, "\nwarning (%d): could not set file attributes\n", (int)GetLastError())); } #ifdef NTSD_EAS /* set NTFS SD extra fields */ if (G.extra_field && /* zipfile extra field may have extended attribs */ FindSDExtraField(__G__ G.extra_field, G.lrec.extra_field_length, &ebSDptr, &ebSDlen)) { int err = SetSD(__G__ Ansi_Fname, G.pInfo->file_attr, ebSDptr, ebSDlen); if (err == IZ_EF_TRUNC) { if (uO.qflag) Info(slide, 1, ((char *)slide, "%-22s ", FnFilter1(G.filename))); Info(slide, 1, ((char *)slide, LoadFarString(TruncNTSD), ebSDlen-(EB_NTSD_L_LEN+EB_CMPRHEADLEN), uO.qflag? "\n":"")); } } #endif /* NTSD_EAS */ /* skip restoring time stamps on user's request */ if (uO.D_flag <= 1) { if ( hFile == INVALID_HANDLE_VALUE ) Info(slide, 1, ((char *)slide, "\nCreateFile() error %d when trying set file time\n", (int)GetLastError())); else { if (gotTime) { FILETIME *pModft = (gotTime & EB_UT_FL_MTIME) ? &Modft : NULL; FILETIME *pAccft = (gotTime & EB_UT_FL_ATIME) ? &Accft : NULL; FILETIME *pCreft = (gotTime & EB_UT_FL_CTIME) ? &Creft : NULL; if (!SetFileTime(hFile, pCreft, pAccft, pModft)) Info(slide, 0, ((char *)slide, "\nSetFileTime failed: %d\n", (int)GetLastError())); } CloseHandle(hFile); } } return; #undef Ansi_Fname } /* end function close_outfile() */ #ifdef SET_DIR_ATTRIB int defer_dir_attribs(__G__ pd) __GDEF direntry **pd; { NTdirattr *d_entry; #ifdef NTSD_EAS uch *ebSDptr; unsigned ebSDlen; #endif /* Win9x does not support setting directory time stamps. */ if (!IsWinNT()) { *pd = (direntry *)NULL; return PK_OK; } #ifdef NTSD_EAS /* set extended attributes from extra fields */ if (G.extra_field && /* zipfile e.f. may have extended attribs */ FindSDExtraField(__G__ G.extra_field, G.lrec.extra_field_length, &ebSDptr, &ebSDlen)) { /* ebSDlen contains the payload size of the e.f. block, but we store it including the e.b. header. */ ebSDlen += EB_HEADSIZE; } else { /* no NTSD e.f. block -> no space needed to allocate */ ebSDlen = 0; } #endif /* NTSD_EAS */ d_entry = (NTdirattr *)malloc(sizeof(NTdirattr) #ifdef NTSD_EAS + ebSDlen #endif + strlen(G.filename)); *pd = (direntry *)d_entry; if (d_entry == (NTdirattr *)NULL) { return PK_MEM; } #ifdef NTSD_EAS if (ebSDlen > 0) memcpy(d_entry->buf, ebSDptr, ebSDlen); d_entry->SDlen = ebSDlen; d_entry->fn = d_entry->buf + ebSDlen; #else d_entry->fn = d_entry->buf; #endif strcpy(d_entry->fn, G.filename); d_entry->perms = G.pInfo->file_attr; d_entry->gotTime = (uO.D_flag <= 0 ? getNTfiletime(__G__ &(d_entry->Modft), &(d_entry->Accft), &(d_entry->Creft)) : 0); return PK_OK; } /* end function defer_dir_attribs() */ int set_direc_attribs(__G__ d) __GDEF direntry *d; { int errval; HANDLE hFile = INVALID_HANDLE_VALUE; /* File handle defined in NT */ #ifdef __RSXNT__ char *ansi_name; #endif /* Win9x does not support setting directory time stamps. */ if (!IsWinNT()) return PK_OK; errval = PK_OK; #ifdef __RSXNT__ /* RSXNT/EMX C rtl uses OEM charset */ ansi_name = (char *)alloca(strlen(d->fn) + 1); INTERN_TO_ISO(d->fn, ansi_name); # define Ansi_Dirname ansi_name #else # define Ansi_Dirname d->fn #endif /* Skip restoring directory time stamps on user' request. */ if (uO.D_flag <= 0) { /* Open a handle to the directory before processing extra fields; we do this in case new security on file prevents us from updating time stamps. Although the WIN32 documentation recommends to use GENERIC_WRITE access flag to create the handle for SetFileTime(), this is too demanding for directories with the "read-only" attribute bit set. So we use the more specific flag FILE_WRITE_ATTRIBUTES here to request the minimum required access rights. (This problem is a Windows bug that has been silently fixed in Windows XP SP2.) */ hFile = CreateFileA(Ansi_Dirname, FILE_WRITE_ATTRIBUTES, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); } #ifdef NTSD_EAS if (NtAtt(d)->SDlen > 0) { int err; if (QCOND2) { Info(slide, 1, ((char *)slide, " set attrib: %-22s ", FnFilter1(d->fn))); } /* set NTFS SD extra fields */ err = SetSD(__G__ Ansi_Dirname, NtAtt(d)->perms, NtAtt(d)->buf, NtAtt(d)->SDlen - EB_HEADSIZE); if (err == IZ_EF_TRUNC) { if (!QCOND2) Info(slide, 1, ((char *)slide, "%-22s ", FnFilter1(d->fn))); Info(slide, 1, ((char *)slide, LoadFarString(TruncNTSD), NtAtt(d)->SDlen-(EB_NTSD_L_LEN+EB_CMPRHEADLEN), "\n")); } else if (QCOND2) { Info(slide, 0, ((char *)slide, "\n")); } if (errval < err) errval = err; } #endif /* NTSD_EAS */ /* Skip restoring directory time stamps on user' request. */ if (uO.D_flag <= 0) { if (hFile == INVALID_HANDLE_VALUE) { Info(slide, 1, ((char *)slide, "warning: CreateFile() error %d (set file times for %s)\n", (int)GetLastError(), FnFilter1(d->fn))); if (!errval) errval = PK_WARN; } else { if (NtAtt(d)->gotTime) { FILETIME *pModft = (NtAtt(d)->gotTime & EB_UT_FL_MTIME) ? &(NtAtt(d)->Modft) : NULL; FILETIME *pAccft = (NtAtt(d)->gotTime & EB_UT_FL_ATIME) ? &(NtAtt(d)->Accft) : NULL; FILETIME *pCreft = (NtAtt(d)->gotTime & EB_UT_FL_CTIME) ? &(NtAtt(d)->Creft) : NULL; if (!SetFileTime(hFile, pCreft, pAccft, pModft)) { Info(slide, 0, ((char *)slide, "warning: SetFileTime() for %s error %d\n", FnFilter1(d->fn), (int)GetLastError())); if (!errval) errval = PK_WARN; } } CloseHandle(hFile); } } return errval; } /* end function set_direc_attribs() */ #endif /* SET_DIR_ATTRIB */ #ifdef TIMESTAMP /*************************/ /* Function stamp_file() */ /*************************/ int stamp_file(__GPRO__ ZCONST char *fname, time_t modtime) { FILETIME Modft; /* File time type defined in NT, `last modified' time */ HANDLE hFile; /* File handle defined in NT */ int errstat = 0; /* return status: 0 == "OK", -1 == "Failure" */ int fs_uses_loctime = FStampIsLocTime(__G__ fname); #ifdef __RSXNT__ /* RSXNT/EMX C rtl uses OEM charset */ char *ansi_name = (char *)alloca(strlen(fname) + 1); INTERN_TO_ISO(fname, ansi_name); # define Ansi_Fname ansi_name #else # define Ansi_Fname fname #endif /* open a handle to the file to prepare setting the mod-time stamp */ hFile = CreateFileA(Ansi_Fname, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if ( hFile == INVALID_HANDLE_VALUE ) { errstat = -1; } else { /* convert time_t modtime into WIN32 native 64bit format */ UTIME_2_IZFILETIME(modtime, &Modft) /* set Access and Modification times of the file to modtime */ if (!SetFileTime(hFile, NULL, &Modft, &Modft)) { errstat = -1; } CloseHandle(hFile); } return errstat; #undef Ansi_Fname } /* end function stamp_file() */ #endif /* TIMESTAMP */ /***********************/ /* Function isfloppy() */ /* more precisely, is it removable? */ /***********************/ static int isfloppy(int nDrive) /* 1 == A:, 2 == B:, etc. */ { char rootPathName[4]; rootPathName[0] = (char)('A' + nDrive - 1); /* build the root path */ rootPathName[1] = ':'; /* name, e.g. "A:/" */ rootPathName[2] = '/'; rootPathName[3] = '\0'; return (GetDriveTypeA(rootPathName) == DRIVE_REMOVABLE); } /* end function isfloppy() */ /*****************************/ /* Function NTQueryVolInfo() */ /*****************************/ /* * Note: 8.3 limits on filenames apply only to old-style FAT filesystems. * More recent versions of Windows (Windows NT 3.5 / Windows 4.0) * can support long filenames (LFN) on FAT filesystems. Check the * filesystem maximum component length field to detect LFN support. */ static int NTQueryVolInfo(__GPRO__ const char *name) { /* static char lastRootPath[4] = ""; */ /* static int lastVolOldFAT; */ /* static int lastVolLocTim; */ char *tmp0; char tmp1[MAX_PATH], tmp2[MAX_PATH]; DWORD volSerNo, maxCompLen, fileSysFlags; #ifdef __RSXNT__ /* RSXNT/EMX C rtl uses OEM charset */ char *ansi_name = (char *)alloca(strlen(name) + 1); INTERN_TO_ISO(name, ansi_name); name = ansi_name; #endif if ((!strncmp(name, "//", 2) || !strncmp(name, "\\\\", 2)) && (name[2] != '\0' && name[2] != '/' && name[2] != '\\')) { /* GetFullPathname() and GetVolumeInformation() do not work * on UNC names. For now, we return "error". * **FIXME**: check if UNC name is mapped to a drive letter * and use mapped drive for volume info query. */ return FALSE; } if (isalpha((uch)name[0]) && (name[1] == ':')) tmp0 = (char *)name; else { if (!GetFullPathNameA(name, MAX_PATH, tmp1, &tmp0)) return FALSE; tmp0 = &tmp1[0]; } if (strncmp(G.lastRootPath, tmp0, 2) != 0) { /* For speed, we skip repeated queries for the same device */ strncpy(G.lastRootPath, tmp0, 2); /* Build the root path name, */ G.lastRootPath[2] = '/'; /* e.g. "A:/" */ G.lastRootPath[3] = '\0'; if (!GetVolumeInformationA((LPCSTR)G.lastRootPath, (LPSTR)tmp1, (DWORD)MAX_PATH, &volSerNo, &maxCompLen, &fileSysFlags, (LPSTR)tmp2, (DWORD)MAX_PATH)) { G.lastRootPath[0] = '\0'; return FALSE; } /* LFNs are available if the component length is > 12 */ G.lastVolOldFAT = (maxCompLen <= 12); /* G.lastVolOldFAT = !strncmp(strupr(tmp2), "FAT", 3); old version */ /* Volumes in (V)FAT and (OS/2) HPFS format store file timestamps in * local time! */ G.lastVolLocTim = !strncmp(strupr(tmp2), "VFAT", 4) || !strncmp(tmp2, "HPFS", 4) || !strncmp(tmp2, "FAT", 3); } return TRUE; } /* end function NTQueryVolInfo() */ /*****************************/ /* Function IsVolumeOldFAT() */ /*****************************/ static int IsVolumeOldFAT(__GPRO__ const char *name) { return (NTQueryVolInfo(__G__ name) ? G.lastVolOldFAT : FALSE); } #ifndef SFX /************************/ /* Function do_wild() */ /* identical to OS/2 version */ /************************/ char *do_wild(__G__ wildspec) __GDEF ZCONST char *wildspec; /* only used first time on a given dir */ { /* these statics are now declared in SYSTEM_SPECIFIC_GLOBALS in w32cfg.h: static zDIR *wild_dir = NULL; static ZCONST char *wildname; static char *dirname, matchname[FILNAMSIZ]; static int notfirstcall=FALSE, have_dirname, dirnamelen; */ char *fnamestart; struct zdirent *file; /* Even when we're just returning wildspec, we *always* do so in * matchname[]--calling routine is allowed to append four characters * to the returned string, and wildspec may be a pointer to argv[]. */ if (!G.notfirstcall) { /* first call: must initialize everything */ G.notfirstcall = TRUE; if (!iswild(wildspec)) { strncpy(G.matchname, wildspec, FILNAMSIZ); G.matchname[FILNAMSIZ-1] = '\0'; G.have_dirname = FALSE; G.wild_dir = NULL; return G.matchname; } /* break the wildspec into a directory part and a wildcard filename */ if ((G.wildname = MBSRCHR(wildspec, '/')) == (ZCONST char *)NULL && (G.wildname = MBSRCHR(wildspec, ':')) == (ZCONST char *)NULL) { G.dirname = "."; G.dirnamelen = 1; G.have_dirname = FALSE; G.wildname = wildspec; } else { ++G.wildname; /* point at character after '/' or ':' */ G.dirnamelen = G.wildname - wildspec; if ((G.dirname = (char *)malloc(G.dirnamelen+1)) == NULL) { Info(slide, 1, ((char *)slide, "warning: cannot allocate wildcard buffers\n")); strncpy(G.matchname, wildspec, FILNAMSIZ); G.matchname[FILNAMSIZ-1] = '\0'; return G.matchname; /* but maybe filespec was not a wildcard */ } strncpy(G.dirname, wildspec, G.dirnamelen); G.dirname[G.dirnamelen] = '\0'; /* terminate for strcpy below */ G.have_dirname = TRUE; } Trace((stderr, "do_wild: dirname = [%s]\n", FnFilter1(G.dirname))); if ((G.wild_dir = (zvoid *)Opendir(G.dirname)) != NULL) { if (G.have_dirname) { strcpy(G.matchname, G.dirname); fnamestart = G.matchname + G.dirnamelen; } else fnamestart = G.matchname; while ((file = Readdir((zDIR *)G.wild_dir)) != NULL) { Trace((stderr, "do_wild: Readdir returns %s\n", FnFilter1(file->d_name))); strcpy(fnamestart, file->d_name); if (MBSRCHR(fnamestart, '.') == (char *)NULL) strcat(fnamestart, "."); if (match(fnamestart, G.wildname, TRUE WISEP) && /* skip "." and ".." directory entries */ strcmp(fnamestart, ".") && strcmp(fnamestart, "..")) { Trace((stderr, "do_wild: match() succeeds\n")); /* remove trailing dot */ fnamestart = plastchar(fnamestart, strlen(fnamestart)); if (*fnamestart == '.') *fnamestart = '\0'; return G.matchname; } } /* if we get to here directory is exhausted, so close it */ Closedir((zDIR *)G.wild_dir); G.wild_dir = NULL; } Trace((stderr, "do_wild: Opendir(%s) returns NULL\n", FnFilter1(G.dirname))); /* return the raw wildspec in case that works (e.g., directory not * searchable, but filespec was not wild and file is readable) */ strncpy(G.matchname, wildspec, FILNAMSIZ); G.matchname[FILNAMSIZ-1] = '\0'; return G.matchname; } /* last time through, might have failed opendir but returned raw wildspec */ if (G.wild_dir == NULL) { G.notfirstcall = FALSE; /* reset for new wildspec */ if (G.have_dirname) free(G.dirname); return (char *)NULL; } /* If we've gotten this far, we've read and matched at least one entry * successfully (in a previous call), so dirname has been copied into * matchname already. */ if (G.have_dirname) { /* strcpy(G.matchname, G.dirname); */ fnamestart = G.matchname + G.dirnamelen; } else fnamestart = G.matchname; while ((file = Readdir((zDIR *)G.wild_dir)) != NULL) { Trace((stderr, "do_wild: readdir returns %s\n", FnFilter1(file->d_name))); strcpy(fnamestart, file->d_name); if (MBSRCHR(fnamestart, '.') == (char *)NULL) strcat(fnamestart, "."); if (match(fnamestart, G.wildname, TRUE WISEP)) { Trace((stderr, "do_wild: match() succeeds\n")); /* remove trailing dot */ fnamestart = plastchar(fnamestart, strlen(fnamestart)); if (*fnamestart == '.') *fnamestart = '\0'; return G.matchname; } } Closedir((zDIR *)G.wild_dir); /* at least one entry read; nothing left */ G.wild_dir = NULL; G.notfirstcall = FALSE; /* reset for new wildspec */ if (G.have_dirname) free(G.dirname); return (char *)NULL; } /* end function do_wild() */ #endif /* !SFX */ /**********************/ /* Function mapattr() */ /**********************/ /* Identical to MS-DOS, OS/2 versions. However, NT has a lot of extra * permission stuff, so this function should probably be extended in the * future. */ int mapattr(__G) __GDEF { /* set archive bit for file entries (file is not backed up): */ G.pInfo->file_attr = ((unsigned)G.crec.external_file_attributes | (G.crec.external_file_attributes & FILE_ATTRIBUTE_DIRECTORY ? 0 : FILE_ATTRIBUTE_ARCHIVE)) & 0xff; return 0; } /* end function mapattr() */ /************************/ /* Function mapname() */ /************************/ int mapname(__G__ renamed) __GDEF int renamed; /* * returns: * MPN_OK - no problem detected * MPN_INF_TRUNC - caution (truncated filename) * MPN_INF_SKIP - info "skip entry" (dir doesn't exist) * MPN_ERR_SKIP - error -> skip entry * MPN_ERR_TOOLONG - error -> path is too long * MPN_NOMEM - error (memory allocation failed) -> skip entry * [also MPN_VOL_LABEL, MPN_CREATED_DIR] */ { char pathcomp[FILNAMSIZ]; /* path-component buffer */ char *pp, *cp=NULL; /* character pointers */ char *lastsemi = NULL; /* pointer to last semi-colon in pathcomp */ #ifdef ACORN_FTYPE_NFS char *lastcomma=(char *)NULL; /* pointer to last comma in pathcomp */ RO_extra_block *ef_spark; /* pointer Acorn FTYPE ef block */ #endif int killed_ddot = FALSE; /* is set when skipping "../" pathcomp */ int error; register unsigned workch; /* hold the character being tested */ /*--------------------------------------------------------------------------- Initialize various pointers and counters and stuff. ---------------------------------------------------------------------------*/ /* can create path as long as not just freshening, or if user told us */ G.create_dirs = (!uO.fflag || renamed); G.created_dir = FALSE; /* not yet */ G.renamed_fullpath = FALSE; G.fnlen = strlen(G.filename); if (renamed) { cp = G.filename; /* point to beginning of renamed name... */ if (*cp) do { if (*cp == '\\') /* convert backslashes to forward */ *cp = '/'; } while (*PREINCSTR(cp)); cp = G.filename; /* use temporary rootpath if user gave full pathname */ if (G.filename[0] == '/') { G.renamed_fullpath = TRUE; pathcomp[0] = '/'; /* copy the '/' and terminate */ pathcomp[1] = '\0'; ++cp; } else if (isalpha((uch)G.filename[0]) && G.filename[1] == ':') { G.renamed_fullpath = TRUE; pp = pathcomp; *pp++ = *cp++; /* copy the "d:" (+ '/', possibly) */ *pp++ = *cp++; if (*cp == '/') *pp++ = *cp++; /* otherwise add "./"? */ *pp = '\0'; } } /* pathcomp is ignored unless renamed_fullpath is TRUE: */ if ((error = checkdir(__G__ pathcomp, INIT)) != 0) /* init path buffer */ return error; /* ...unless no mem or vol label on hard disk */ *pathcomp = '\0'; /* initialize translation buffer */ pp = pathcomp; /* point to translation buffer */ if (!renamed) { /* cp already set if renamed */ if (uO.jflag) /* junking directories */ cp = (char *)MBSRCHR(G.filename, '/'); if (cp == NULL) /* no '/' or not junking dirs */ cp = G.filename; /* point to internal zipfile-member pathname */ else ++cp; /* point to start of last component of path */ } /*--------------------------------------------------------------------------- Begin main loop through characters in filename. ---------------------------------------------------------------------------*/ for (; (workch = (uch)*cp) != 0; INCSTR(cp)) { switch (workch) { case '/': /* can assume -j flag not given */ *pp = '\0'; maskDOSdevice(__G__ pathcomp); if (strcmp(pathcomp, ".") == 0) { /* don't bother appending "./" to the path */ *pathcomp = '\0'; } else if (!uO.ddotflag && strcmp(pathcomp, "..") == 0) { /* "../" dir traversal detected, skip over it */ *pathcomp = '\0'; killed_ddot = TRUE; /* set "show message" flag */ } /* when path component is not empty, append it now */ if (*pathcomp != '\0' && ((error = checkdir(__G__ pathcomp, APPEND_DIR)) & MPN_MASK) > MPN_INF_TRUNC) return error; pp = pathcomp; /* reset conversion buffer for next piece */ lastsemi = (char *)NULL; /* leave direct. semi-colons alone */ break; case ':': /* drive spec not stored, so no colon allowed */ case '\\': /* '\\' may come as normal filename char (not */ case '<': /* dir sep char!) from unix-like file system */ case '>': /* no redirection symbols allowed either */ case '|': /* no pipe signs allowed */ case '"': /* no double quotes allowed */ case '?': /* no wildcards allowed */ case '*': *pp++ = '_'; /* these rules apply equally to FAT and NTFS */ break; case ';': /* start of VMS version? */ lastsemi = pp; /* remove VMS version later... */ *pp++ = ';'; /* but keep semicolon for now */ break; #ifdef ACORN_FTYPE_NFS case ',': /* NFS filetype extension */ lastcomma = pp; *pp++ = ','; /* keep for now; may need to remove */ break; /* later, if requested */ #endif case ' ': /* keep spaces unless specifically */ /* NT cannot create filenames with spaces on FAT volumes */ if (uO.sflag || IsVolumeOldFAT(__G__ G.filename)) *pp++ = '_'; else *pp++ = ' '; break; default: /* allow European characters in filenames: */ if (isprint(workch) || workch >= 127) #ifdef _MBCS { memcpy(pp, cp, CLEN(cp)); INCSTR(pp); } #else *pp++ = (char)workch; #endif } /* end switch */ } /* end while loop */ /* Show warning when stripping insecure "parent dir" path components */ if (killed_ddot && QCOND2) { Info(slide, 0, ((char *)slide, "warning: skipped \"../\" path component(s) in %s\n", FnFilter1(G.filename))); if (!(error & ~MPN_MASK)) error = (error & MPN_MASK) | PK_WARN; } /*--------------------------------------------------------------------------- Report if directory was created (and no file to create: filename ended in '/'), check name to be sure it exists, and combine path and name be- fore exiting. ---------------------------------------------------------------------------*/ if (lastchar(G.filename, G.fnlen) == '/') { #ifdef __RSXNT__ /* RSXNT/EMX C rtl uses OEM charset */ char *ansi_name = (char *)alloca(strlen(G.filename) + 1); INTERN_TO_ISO(G.filename, ansi_name); # define Ansi_Fname ansi_name #else # define Ansi_Fname G.filename #endif checkdir(__G__ G.filename, GETPATH); if (G.created_dir) { if (QCOND2) { Info(slide, 0, ((char *)slide, " creating: %-22s\n", FnFilter1(G.filename))); } /* set file attributes: The default for newly created directories is "DIR attribute flags set", so there is no need to change attributes unless one of the DOS style attribute flags is set. The readonly attribute need not be masked, since it does not prevent modifications in the new directory. */ if(G.pInfo->file_attr & (0x7F & ~FILE_ATTRIBUTE_DIRECTORY)) { if (!SetFileAttributesA(Ansi_Fname, G.pInfo->file_attr & 0x7F)) Info(slide, 1, ((char *)slide, "\nwarning (%d): could not set file attributes for %s\n", (int)GetLastError(), FnFilter1(G.filename))); } /* set dir time (note trailing '/') */ return (error & ~MPN_MASK) | MPN_CREATED_DIR; } else if (IS_OVERWRT_ALL) { /* overwrite attributes of existing directory on user's request */ /* set file attributes: */ if(G.pInfo->file_attr & (0x7F & ~FILE_ATTRIBUTE_DIRECTORY)) { if (!SetFileAttributesA(Ansi_Fname, G.pInfo->file_attr & 0x7F)) Info(slide, 1, ((char *)slide, "\nwarning (%d): could not set file attributes for %s\n", (int)GetLastError(), FnFilter1(G.filename))); } } /* dir existed already; don't look for data to extract */ return (error & ~MPN_MASK) | MPN_INF_SKIP; } *pp = '\0'; /* done with pathcomp: terminate it */ /* if not saving them, remove VMS version numbers (appended "###") */ if (!uO.V_flag && lastsemi) { pp = lastsemi + 1; /* semi-colon was kept: expect #'s after */ while (isdigit((uch)(*pp))) ++pp; if (*pp == '\0') /* only digits between ';' and end: nuke */ *lastsemi = '\0'; } #ifdef ACORN_FTYPE_NFS /* translate Acorn filetype information if asked to do so */ if (uO.acorn_nfs_ext && (ef_spark = (RO_extra_block *) getRISCOSexfield(G.extra_field, G.lrec.extra_field_length)) != (RO_extra_block *)NULL) { /* file *must* have a RISC OS extra field */ long ft = (long)makelong(ef_spark->loadaddr); /*32-bit*/ if (lastcomma) { pp = lastcomma + 1; while (isxdigit((uch)(*pp))) ++pp; if (pp == lastcomma+4 && *pp == '\0') *lastcomma='\0'; /* nuke */ } if ((ft & 1<<31)==0) ft=0x000FFD00; sprintf(pathcomp+strlen(pathcomp), ",%03x", (int)(ft>>8) & 0xFFF); } #endif /* ACORN_FTYPE_NFS */ maskDOSdevice(__G__ pathcomp); if (*pathcomp == '\0') { Info(slide, 1, ((char *)slide, "mapname: conversion of %s failed\n", FnFilter1(G.filename))); return (error & ~MPN_MASK) | MPN_ERR_SKIP; } checkdir(__G__ pathcomp, APPEND_NAME); /* returns 1 if truncated: care? */ checkdir(__G__ G.filename, GETPATH); if (G.pInfo->vollabel) { /* set the volume label now */ char drive[4]; #ifdef __RSXNT__ /* RSXNT/EMX C rtl uses OEM charset */ char *ansi_name = (char *)alloca(strlen(G.filename) + 1); INTERN_TO_ISO(G.filename, ansi_name); # define Ansi_Fname ansi_name #else # define Ansi_Fname G.filename #endif /* Build a drive string, e.g. "b:" */ drive[0] = (char)('a' + G.nLabelDrive - 1); strcpy(drive + 1, ":\\"); if (QCOND2) Info(slide, 0, ((char *)slide, "labelling %s %-22s\n", drive, FnFilter1(G.filename))); if (!SetVolumeLabelA(drive, Ansi_Fname)) { Info(slide, 1, ((char *)slide, "mapname: error setting volume label\n")); return (error & ~MPN_MASK) | MPN_ERR_SKIP; } /* success: skip the "extraction" quietly */ return (error & ~MPN_MASK) | MPN_INF_SKIP; #undef Ansi_Fname } Trace((stderr, "mapname returns with filename = [%s] (error = %d)\n\n", FnFilter1(G.filename), error)); return error; } /* end function mapname() */ /****************************/ /* Function maskDOSdevice() */ /****************************/ static void maskDOSdevice(__G__ pathcomp) __GDEF char *pathcomp; { /*--------------------------------------------------------------------------- Put an underscore in front of the file name if the file name is a DOS/WINDOWS device name like CON.*, AUX.*, PRN.*, etc. Trying to extract such a file would fail at best and wedge us at worst. ---------------------------------------------------------------------------*/ #if !defined(S_IFCHR) && defined(_S_IFCHR) # define S_IFCHR _S_IFCHR #endif #if !defined(S_ISCHR) # if defined(_S_ISCHR) # define S_ISCHR(m) _S_ISCHR(m) # elif defined(S_IFCHR) # define S_ISCHR(m) ((m) & S_IFCHR) # endif #endif #ifdef DEBUG if (zstat(pathcomp, &G.statbuf) == 0) { Trace((stderr, "maskDOSdevice() stat(\"%s\", buf) st_mode result: %X, %o\n", FnFilter1(pathcomp), G.statbuf.st_mode, G.statbuf.st_mode)); } else { Trace((stderr, "maskDOSdevice() stat(\"%s\", buf) failed\n", FnFilter1(pathcomp))); } #endif if (zstat(pathcomp, &G.statbuf) == 0 && S_ISCHR(G.statbuf.st_mode)) { extent i; /* pathcomp contains a name of a DOS character device (builtin or * installed device driver). * Prepend a '_' to allow creation of the item in the file system. */ for (i = strlen(pathcomp) + 1; i > 0; --i) pathcomp[i] = pathcomp[i - 1]; pathcomp[0] = '_'; } } /* end function maskDOSdevice() */ /**********************/ /* Function map2fat() */ /* Not quite identical to OS/2 version */ /**********************/ static void map2fat(pathcomp, pEndFAT) char *pathcomp, **pEndFAT; { char *ppc = pathcomp; /* variable pointer to pathcomp */ char *pEnd = *pEndFAT; /* variable pointer to buildpathFAT */ char *pBegin = *pEndFAT; /* constant pointer to start of this comp. */ char *last_dot = NULL; /* last dot not converted to underscore */ register unsigned workch; /* hold the character being tested */ /* Only need check those characters which are legal in NTFS but not * in FAT: to get here, must already have passed through mapname. * Also must truncate path component to ensure 8.3 compliance. */ while ((workch = (uch)*ppc++) != 0) { switch (workch) { case '[': case ']': case '+': case ',': case ';': case '=': *pEnd++ = '_'; /* convert brackets to underscores */ break; case '.': if (pEnd == *pEndFAT) { /* nothing appended yet... */ if (*ppc == '\0') /* don't bother appending a */ break; /* "./" component to the path */ else if (*ppc == '.' && ppc[1] == '\0') { /* "../" */ *pEnd++ = '.'; /* add first dot, */ *pEnd++ = '.'; /* add second dot, and */ ++ppc; /* skip over to pathcomp's end */ } else { /* FAT doesn't allow null filename */ *pEnd++ = '_'; /* bodies, so map .exrc -> _exrc */ } /* (_.exr would keep max 3 chars) */ } else { /* found dot within path component */ last_dot = pEnd; /* point at last dot so far... */ *pEnd++ = '_'; /* convert to underscore for now */ } break; default: *pEnd++ = (char)workch; } /* end switch */ } /* end while loop */ *pEnd = '\0'; /* terminate buildpathFAT */ /* NOTE: keep in mind that pEnd points to the end of the path * component, and *pEndFAT still points to the *beginning* of it... * Also note that the algorithm does not try to get too fancy: * if there are no dots already, the name either gets truncated * at 8 characters or the last underscore is converted to a dot * (only if more characters are saved that way). In no case is * a dot inserted between existing characters. */ if (last_dot == NULL) { /* no dots: check for underscores... */ char *plu = MBSRCHR(pBegin, '_'); /* pointer to last underscore */ if ((plu != NULL) && /* found underscore: convert to dot? */ (MIN(plu - pBegin, 8) + MIN(pEnd - plu - 1, 3) > 8)) { last_dot = plu; /* be lazy: drop through to next if-blk */ } else if ((pEnd - *pEndFAT) > 8) { /* no underscore; or converting underscore to dot would save less chars than leaving everything in the basename */ *pEndFAT += 8; /* truncate at 8 chars */ **pEndFAT = '\0'; } else *pEndFAT = pEnd; /* whole thing fits into 8 chars or less */ } if (last_dot != NULL) { /* one dot is OK: */ *last_dot = '.'; /* put it back in */ if ((last_dot - pBegin) > 8) { char *p, *q; int i; p = last_dot; q = last_dot = pBegin + 8; for (i = 0; (i < 4) && *p; ++i) /* too many chars in basename: */ *q++ = *p++; /* shift .ext left and trun- */ *q = '\0'; /* cate/terminate it */ *pEndFAT = q; } else if ((pEnd - last_dot) > 4) { /* too many chars in extension */ *pEndFAT = last_dot + 4; **pEndFAT = '\0'; } else *pEndFAT = pEnd; /* filename is fine; point at terminating zero */ if ((last_dot - pBegin) > 0 && last_dot[-1] == ' ') last_dot[-1] = '_'; /* NO blank in front of '.'! */ } } /* end function map2fat() */ /***********************/ /* Borrowed from os2.c for UnZip 5.1. */ /* Function checkdir() */ /* Difference: no EA stuff */ /***********************/ /* HPFS stuff works on NTFS too */ int checkdir(__G__ pathcomp, flag) __GDEF char *pathcomp; int flag; /* * returns: * MPN_OK - no problem detected * MPN_INF_TRUNC - (on APPEND_NAME) truncated filename * MPN_INF_SKIP - path doesn't exist, not allowed to create * MPN_ERR_SKIP - path doesn't exist, tried to create and failed; or path * exists and is not a directory, but is supposed to be * MPN_ERR_TOOLONG - path is too long * MPN_NOMEM - can't allocate memory for filename buffers */ { /* static int rootlen = 0; */ /* length of rootpath */ /* static char *rootpath; */ /* user's "extract-to" directory */ /* static char *buildpathHPFS; */ /* full path (so far) to extracted file, */ /* static char *buildpathFAT; */ /* both HPFS/EA (main) and FAT versions */ /* static char *endHPFS; */ /* corresponding pointers to end of */ /* static char *endFAT; */ /* buildpath ('\0') */ # define FN_MASK 7 # define FUNCTION (flag & FN_MASK) /*--------------------------------------------------------------------------- APPEND_DIR: append the path component to the path being built and check for its existence. If doesn't exist and we are creating directories, do so for this one; else signal success or error as appropriate. ---------------------------------------------------------------------------*/ if (FUNCTION == APPEND_DIR) { char *p = pathcomp; int too_long = FALSE; Trace((stderr, "appending dir segment [%s]\n", FnFilter1(pathcomp))); while ((*G.endHPFS = *p++) != '\0') /* copy to HPFS filename */ ++G.endHPFS; if (!IsVolumeOldFAT(__G__ G.buildpathHPFS)) { p = pathcomp; while ((*G.endFAT = *p++) != '\0') /* copy to FAT filename, too */ ++G.endFAT; } else map2fat(pathcomp, &G.endFAT); /* map into FAT fn, update endFAT */ /* GRR: could do better check, see if overrunning buffer as we go: * check endHPFS-buildpathHPFS after each append, set warning variable * if within 20 of FILNAMSIZ; then if var set, do careful check when * appending. Clear variable when begin new path. */ /* next check: need to append '/', at least one-char name, '\0' */ if ((G.endHPFS-G.buildpathHPFS) > FILNAMSIZ-3) too_long = TRUE; /* check if extracting dir? */ #ifdef FIX_STAT_BUG /* Borland C++ 5.0 does not handle a call to stat() well if the * directory does not exist (it tends to crash in strange places.) * This is apparently a problem only when compiling for GUI rather * than console. The code below attempts to work around this problem. */ if (access(G.buildpathFAT, 0) != 0) { if (!G.create_dirs) { /* told not to create (freshening) */ free(G.buildpathHPFS); free(G.buildpathFAT); /* path doesn't exist: nothing to do */ return MPN_INF_SKIP; } if (too_long) { /* GRR: should allow FAT extraction w/o EAs */ Info(slide, 1, ((char *)slide, "checkdir error: path too long: %s\n", FnFilter1(G.buildpathHPFS))); free(G.buildpathHPFS); free(G.buildpathFAT); /* no room for filenames: fatal */ return MPN_ERR_TOOLONG; } if (MKDIR(G.buildpathFAT, 0777) == -1) { /* create the directory */ Info(slide, 1, ((char *)slide, "checkdir error: cannot create %s\n\ %s\n\ unable to process %s.\n", FnFilter2(G.buildpathFAT), strerror(errno), FnFilter1(G.filename))); free(G.buildpathHPFS); free(G.buildpathFAT); /* path didn't exist, tried to create, failed */ return MPN_ERR_SKIP; } G.created_dir = TRUE; } #endif /* FIX_STAT_BUG */ if (SSTAT(G.buildpathFAT, &G.statbuf)) /* path doesn't exist */ { if (!G.create_dirs) { /* told not to create (freshening) */ free(G.buildpathHPFS); free(G.buildpathFAT); /* path doesn't exist: nothing to do */ return MPN_INF_SKIP; } if (too_long) { /* GRR: should allow FAT extraction w/o EAs */ Info(slide, 1, ((char *)slide, "checkdir error: path too long: %s\n", FnFilter1(G.buildpathHPFS))); free(G.buildpathHPFS); free(G.buildpathFAT); /* no room for filenames: fatal */ return MPN_ERR_TOOLONG; } if (MKDIR(G.buildpathFAT, 0777) == -1) { /* create the directory */ Info(slide, 1, ((char *)slide, "checkdir error: cannot create %s\n\ %s\n\ unable to process %s.\n", FnFilter2(G.buildpathFAT), strerror(errno), FnFilter1(G.filename))); free(G.buildpathHPFS); free(G.buildpathFAT); /* path didn't exist, tried to create, failed */ return MPN_ERR_SKIP; } G.created_dir = TRUE; } else if (!S_ISDIR(G.statbuf.st_mode)) { Info(slide, 1, ((char *)slide, "checkdir error: %s exists but is not directory\n\ unable to process %s.\n", FnFilter2(G.buildpathFAT), FnFilter1(G.filename))); free(G.buildpathHPFS); free(G.buildpathFAT); /* path existed but wasn't dir */ return MPN_ERR_SKIP; } if (too_long) { Info(slide, 1, ((char *)slide, "checkdir error: path too long: %s\n", FnFilter1(G.buildpathHPFS))); free(G.buildpathHPFS); free(G.buildpathFAT); /* no room for filenames: fatal */ return MPN_ERR_TOOLONG; } *G.endHPFS++ = '/'; *G.endFAT++ = '/'; *G.endHPFS = *G.endFAT = '\0'; Trace((stderr, "buildpathHPFS now = [%s]\nbuildpathFAT now = [%s]\n", FnFilter1(G.buildpathHPFS), FnFilter2(G.buildpathFAT))); return MPN_OK; } /* end if (FUNCTION == APPEND_DIR) */ /*--------------------------------------------------------------------------- GETPATH: copy full FAT path to the string pointed at by pathcomp (want filename to reflect name used on disk, not EAs; if full path is HPFS, buildpathFAT and buildpathHPFS will be identical). Also free both paths. ---------------------------------------------------------------------------*/ if (FUNCTION == GETPATH) { Trace((stderr, "getting and freeing FAT path [%s]\n", FnFilter1(G.buildpathFAT))); Trace((stderr, "freeing HPFS path [%s]\n", FnFilter1(G.buildpathHPFS))); strcpy(pathcomp, G.buildpathFAT); free(G.buildpathFAT); free(G.buildpathHPFS); G.buildpathHPFS = G.buildpathFAT = G.endHPFS = G.endFAT = NULL; return MPN_OK; } /*--------------------------------------------------------------------------- APPEND_NAME: assume the path component is the filename; append it and return without checking for existence. ---------------------------------------------------------------------------*/ if (FUNCTION == APPEND_NAME) { char *p = pathcomp; int error = MPN_OK; Trace((stderr, "appending filename [%s]\n", FnFilter1(pathcomp))); /* The buildpathHPFS buffer has been allocated large enough to * hold the complete combined name, so there is no need to check * for OS filename size limit overflow within the copy loop. */ while ((*G.endHPFS = *p++) != '\0') { /* copy to HPFS filename */ ++G.endHPFS; } /* Now, check for OS filename size overflow. When detected, the * mapped HPFS name is truncated and a warning message is shown. */ if ((G.endHPFS-G.buildpathHPFS) >= FILNAMSIZ) { G.buildpathHPFS[FILNAMSIZ-1] = '\0'; Info(slide, 1, ((char *)slide, "checkdir warning: path too long; truncating\n \ %s\n -> %s\n", FnFilter1(G.filename), FnFilter2(G.buildpathHPFS))); error = MPN_INF_TRUNC; /* filename truncated */ } /* The buildpathFAT buffer has the same allocated size as the * buildpathHPFS buffer, so there is no need for an overflow check * within the following copy loop, either. */ if (G.pInfo->vollabel || !IsVolumeOldFAT(__G__ G.buildpathHPFS)) { /* copy to FAT filename, too */ p = pathcomp; while ((*G.endFAT = *p++) != '\0') ++G.endFAT; } else /* map into FAT fn, update endFAT */ map2fat(pathcomp, &G.endFAT); /* Check that the FAT path does not exceed the FILNAMSIZ limit, and * truncate when neccessary. * Note that truncation can only happen when the HPFS path (which is * never shorter than the FAT path) has been already truncated. * So, emission of the warning message and setting the error code * has already happened. */ if ((G.endFAT-G.buildpathFAT) >= FILNAMSIZ) G.buildpathFAT[FILNAMSIZ-1] = '\0'; Trace((stderr, "buildpathHPFS: %s\nbuildpathFAT: %s\n", FnFilter1(G.buildpathHPFS), FnFilter2(G.buildpathFAT))); return error; /* could check for existence, prompt for new name... */ } /* end if (FUNCTION == APPEND_NAME) */ /*--------------------------------------------------------------------------- INIT: allocate and initialize buffer space for the file currently being extracted. If file was renamed with an absolute path, don't prepend the extract-to path. ---------------------------------------------------------------------------*/ if (FUNCTION == INIT) { Trace((stderr, "initializing buildpathHPFS and buildpathFAT to ")); #ifdef ACORN_FTYPE_NFS if ((G.buildpathHPFS = (char *)malloc(G.fnlen+G.rootlen+ (uO.acorn_nfs_ext ? 5 : 1))) #else if ((G.buildpathHPFS = (char *)malloc(G.fnlen+G.rootlen+1)) #endif == NULL) return MPN_NOMEM; #ifdef ACORN_FTYPE_NFS if ((G.buildpathFAT = (char *)malloc(G.fnlen+G.rootlen+ (uO.acorn_nfs_ext ? 5 : 1))) #else if ((G.buildpathFAT = (char *)malloc(G.fnlen+G.rootlen+1)) #endif == NULL) { free(G.buildpathHPFS); return MPN_NOMEM; } if (G.pInfo->vollabel) { /* use root or renamed path, but don't store */ /* GRR: for network drives, do strchr() and return IZ_VOL_LABEL if not [1] */ if (G.renamed_fullpath && pathcomp[1] == ':') *G.buildpathHPFS = (char)ToLower(*pathcomp); else if (!G.renamed_fullpath && G.rootlen > 1 && G.rootpath[1] == ':') *G.buildpathHPFS = (char)ToLower(*G.rootpath); else { char tmpN[MAX_PATH], *tmpP; if (GetFullPathNameA(".", MAX_PATH, tmpN, &tmpP) > MAX_PATH) { /* by definition of MAX_PATH we should never get here */ Info(slide, 1, ((char *)slide, "checkdir warning: current dir path too long\n")); return MPN_INF_TRUNC; /* can't get drive letter */ } G.nLabelDrive = *tmpN - 'a' + 1; *G.buildpathHPFS = (char)(G.nLabelDrive - 1 + 'a'); } G.nLabelDrive = *G.buildpathHPFS - 'a' + 1; /* save for mapname() */ if (uO.volflag == 0 || *G.buildpathHPFS < 'a' /* no labels/bogus? */ || (uO.volflag == 1 && !isfloppy(G.nLabelDrive))) { /* !fixed */ free(G.buildpathHPFS); free(G.buildpathFAT); return MPN_VOL_LABEL; /* skipping with message */ } *G.buildpathHPFS = '\0'; } else if (G.renamed_fullpath) /* pathcomp = valid data */ strcpy(G.buildpathHPFS, pathcomp); else if (G.rootlen > 0) strcpy(G.buildpathHPFS, G.rootpath); else *G.buildpathHPFS = '\0'; G.endHPFS = G.buildpathHPFS; G.endFAT = G.buildpathFAT; while ((*G.endFAT = *G.endHPFS) != '\0') { ++G.endFAT; ++G.endHPFS; } Trace((stderr, "[%s]\n", FnFilter1(G.buildpathHPFS))); return MPN_OK; } /*--------------------------------------------------------------------------- ROOT: if appropriate, store the path in rootpath and create it if neces- sary; else assume it's a zipfile member and return. This path segment gets used in extracting all members from every zipfile specified on the command line. Note that under OS/2 and MS-DOS, if a candidate extract-to directory specification includes a drive letter (leading "x:"), it is treated just as if it had a trailing '/'--that is, one directory level will be created if the path doesn't exist, unless this is otherwise pro- hibited (e.g., freshening). ---------------------------------------------------------------------------*/ #if (!defined(SFX) || defined(SFX_EXDIR)) if (FUNCTION == ROOT) { Trace((stderr, "initializing root path to [%s]\n", FnFilter1(pathcomp))); if (pathcomp == NULL) { G.rootlen = 0; return MPN_OK; } if (G.rootlen > 0) /* rootpath was already set, nothing to do */ return MPN_OK; if ((G.rootlen = strlen(pathcomp)) > 0) { int had_trailing_pathsep=FALSE, has_drive=FALSE, add_dot=FALSE; char *tmproot; if ((tmproot = (char *)malloc(G.rootlen+3)) == (char *)NULL) { G.rootlen = 0; return MPN_NOMEM; } strcpy(tmproot, pathcomp); if (isalpha((uch)tmproot[0]) && tmproot[1] == ':') has_drive = TRUE; /* drive designator */ if (tmproot[G.rootlen-1] == '/' || tmproot[G.rootlen-1] == '\\') { tmproot[--G.rootlen] = '\0'; had_trailing_pathsep = TRUE; } if (has_drive && (G.rootlen == 2)) { if (!had_trailing_pathsep) /* i.e., original wasn't "x:/" */ add_dot = TRUE; /* relative path: add '.' before '/' */ } else if (G.rootlen > 0) { /* need not check "x:." and "x:/" */ if (SSTAT(tmproot, &G.statbuf) || !S_ISDIR(G.statbuf.st_mode)) { /* path does not exist */ if (!G.create_dirs /* || iswild(tmproot) */ ) { free(tmproot); G.rootlen = 0; /* treat as stored file */ return MPN_INF_SKIP; } /* create directory (could add loop here scanning tmproot * to create more than one level, but really necessary?) */ if (MKDIR(tmproot, 0777) == -1) { Info(slide, 1, ((char *)slide, "checkdir: cannot create extraction directory: %s\n", FnFilter1(tmproot))); free(tmproot); G.rootlen = 0; /* path didn't exist, tried to create, failed: */ /* file exists, or need 2+ subdir levels */ return MPN_ERR_SKIP; } } } if (add_dot) /* had just "x:", make "x:." */ tmproot[G.rootlen++] = '.'; tmproot[G.rootlen++] = '/'; tmproot[G.rootlen] = '\0'; if ((G.rootpath = (char *)realloc(tmproot, G.rootlen+1)) == NULL) { free(tmproot); G.rootlen = 0; return MPN_NOMEM; } Trace((stderr, "rootpath now = [%s]\n", FnFilter1(G.rootpath))); } return MPN_OK; } #endif /* !SFX || SFX_EXDIR */ /*--------------------------------------------------------------------------- END: free rootpath, immediately prior to program exit. ---------------------------------------------------------------------------*/ if (FUNCTION == END) { Trace((stderr, "freeing rootpath\n")); if (G.rootlen > 0) { free(G.rootpath); G.rootlen = 0; } return MPN_OK; } return MPN_INVALID; /* should never reach */ } /* end function checkdir() */ #ifndef SFX /*************************/ /* Function dateformat() */ /*************************/ int dateformat() { char df[2]; /* LOCALE_IDATE has a maximum value of 2 */ if (GetLocaleInfoA(LOCALE_USER_DEFAULT, LOCALE_IDATE, df, 2) != 0) { switch (df[0]) { case '0': return DF_MDY; case '1': return DF_DMY; case '2': return DF_YMD; } } return DF_MDY; } /****************************/ /* Function dateseparator() */ /****************************/ char dateseparator() { char df[2]; /* use only if it is one character */ if ((GetLocaleInfoA(LOCALE_USER_DEFAULT, LOCALE_SDATE, df, 2) != 0) && (df[0] != '\0')) return df[0]; else return '-'; } #ifndef WINDLL /************************/ /* Function version() */ /************************/ void version(__G) __GDEF { int len; #if (defined(_MSC_VER) || defined(__WATCOMC__) || defined(__DJGPP__)) char buf[80]; #if (defined(_MSC_VER) && (_MSC_VER > 900)) char buf2[80]; #endif #endif len = sprintf((char *)slide, CompiledWith, #if defined(_MSC_VER) /* MSC == VC++, but what about SDK compiler? */ (sprintf(buf, "Microsoft C %d.%02d ", _MSC_VER/100, _MSC_VER%100), buf), # if (_MSC_VER == 800) "(Visual C++ v1.1)", # elif (_MSC_VER == 850) "(Windows NT v3.5 SDK)", # elif (_MSC_VER == 900) "(Visual C++ v2.x)", # elif (_MSC_VER > 900) (sprintf(buf2, "(Visual C++ %d.%d)", _MSC_VER/100 - 6, _MSC_VER%100/10), buf2), # else "(bad version)", # endif #elif defined(__WATCOMC__) # if (__WATCOMC__ % 10 > 0) (sprintf(buf, "Watcom C/C++ %d.%02d", __WATCOMC__ / 100, __WATCOMC__ % 100), buf), "", # else (sprintf(buf, "Watcom C/C++ %d.%d", __WATCOMC__ / 100, (__WATCOMC__ % 100) / 10), buf), "", # endif #elif defined(__BORLANDC__) "Borland C++", # if (__BORLANDC__ < 0x0200) " 1.0", # elif (__BORLANDC__ == 0x0200) " 2.0", # elif (__BORLANDC__ == 0x0400) " 3.0", # elif (__BORLANDC__ == 0x0410) /* __TURBOC__ = 0x0310 */ " 3.1", # elif (__BORLANDC__ == 0x0452) /* __TURBOC__ = 0x0320 */ " 4.0 or 4.02", # elif (__BORLANDC__ == 0x0460) /* __TURBOC__ = 0x0340 */ " 4.5", # elif (__BORLANDC__ == 0x0500) /* __TURBOC__ = 0x0340 */ " 5.0", # elif (__BORLANDC__ == 0x0520) /* __TURBOC__ = 0x0520 */ " 5.2 (C++ Builder 1.0)", # elif (__BORLANDC__ == 0x0530) /* __TURBOC__ = 0x0530 */ " 5.3 (C++ Builder 3.0)", # elif (__BORLANDC__ == 0x0540) /* __TURBOC__ = 0x0540 */ " 5.4 (C++ Builder 4.0)", # elif (__BORLANDC__ == 0x0550) /* __TURBOC__ = 0x0550 */ " 5.5 (C++ Builder 5.0)", # elif (__BORLANDC__ == 0x0551) /* __TURBOC__ = 0x0551 */ " 5.5.1 (C++ Builder 5.0.1)", # elif (__BORLANDC__ == 0x0560) /* __TURBOC__ = 0x0560 */ " 6.0 (C++ Builder 6.0)", # else " later than 6.0", # endif #elif defined(__LCC__) "LCC-Win32", "", #elif defined(__GNUC__) # if defined(__RSXNT__) # if (defined(__DJGPP__) && !defined(__EMX__)) (sprintf(buf, "rsxnt(djgpp v%d.%02d) / gcc ", __DJGPP__, __DJGPP_MINOR__), buf), # elif defined(__DJGPP__) (sprintf(buf, "rsxnt(emx+djgpp v%d.%02d) / gcc ", __DJGPP__, __DJGPP_MINOR__), buf), # elif (defined(__GO32__) && !defined(__EMX__)) "rsxnt(djgpp v1.x) / gcc ", # elif defined(__GO32__) "rsxnt(emx + djgpp v1.x) / gcc ", # elif defined(__EMX__) "rsxnt(emx)+gcc ", # else "rsxnt(unknown) / gcc ", # endif # elif defined(__CYGWIN__) "cygnus win32 / gcc ", # elif defined(__MINGW32__) "mingw32 / gcc ", # else "gcc ", # endif __VERSION__, #else /* !_MSC_VER, !__WATCOMC__, !__BORLANDC__, !__LCC__, !__GNUC__ */ "unknown compiler (SDK?)", "", #endif /* ?compilers */ "\nWindows 9x / Windows NT/2K/XP/2K3", " (32-bit)", #ifdef __DATE__ " on ", __DATE__ #else "", "" #endif ); (*G.message)((zvoid *)&G, slide, (ulg)len, 0); return; } /* end function version() */ #endif /* !WINDLL */ #endif /* !SFX */ #ifdef MORE int screensize(int *tt_rows, int *tt_cols) { HANDLE hstdout; CONSOLE_SCREEN_BUFFER_INFO scr; hstdout = GetStdHandle(STD_OUTPUT_HANDLE); GetConsoleScreenBufferInfo(hstdout, &scr); if (tt_rows != NULL) *tt_rows = scr.srWindow.Bottom - scr.srWindow.Top + 1; if (tt_cols != NULL) *tt_cols = scr.srWindow.Right - scr.srWindow.Left + 1; return 0; /* signal success */ } #endif /* MORE */ #ifdef W32_STAT_BANDAID /* All currently known variants of WIN32 operating systems (Windows 95/98, * WinNT 3.x, 4.0, 5.x) have a nasty bug in the OS kernel concerning * conversions between UTC and local time: In the time conversion functions * of the Win32 API, the timezone offset (including seasonal daylight saving * shift) between UTC and local time evaluation is erratically based on the * current system time. The correct evaluation must determine the offset * value as it {was/is/will be} for the actual time to be converted. * * Newer versions of MS C runtime lib's stat() returns utc time-stamps so * that localtime(timestamp) corresponds to the (potentially false) local * time shown by the OS' system programs (Explorer, command shell dir, etc.) * The RSXNT port follows the same strategy, but fails to recognize the * access-time attribute. * * For the NTFS file system (and other filesystems that store time-stamps * as UTC values), this results in st_mtime (, st_{c|a}time) fields which * are not stable but vary according to the seasonal change of "daylight * saving time in effect / not in effect". * * Other C runtime libs (CygWin), or the crtdll.dll supplied with Win9x/NT * return the unix-time equivalent of the UTC FILETIME values as got back * from the Win32 API call. This time, return values from NTFS are correct * whereas utimes from files on (V)FAT volumes vary according to the DST * switches. * * To achieve timestamp consistency of UTC (UT extra field) values in * Zip archives, the Info-ZIP programs require work-around code for * proper time handling in stat() (and other time handling routines). * * However, nowadays most other programs on Windows systems use the * time conversion strategy of Microsofts C runtime lib "msvcrt.dll". * To improve interoperability in environments where a "consistent" (but * false) "UTC<-->LocalTime" conversion is preferred over "stable" time * stamps, the Info-ZIP specific time conversion handling can be * deactivated by defining the preprocessor flag NO_W32TIMES_IZFIX. */ /* stat() functions under Windows95 tend to fail for root directories. * * Watcom and Borland, at least, are affected by this bug. Watcom made * * a partial fix for 11.0 but still missed some cases. This substitute * * detects the case and fills in reasonable values. Otherwise we get * * effects like failure to extract to a root dir because it's not found. */ int zstat_win32(__W32STAT_GLOBALS__ const char *path, z_stat *buf) { if (!zstat(path, buf)) { /* stat was successful, now redo the time-stamp fetches */ #ifndef NO_W32TIMES_IZFIX int fs_uses_loctime = FStampIsLocTime(__G__ path); #endif HANDLE h; FILETIME Modft, Accft, Creft; #ifdef __RSXNT__ /* RSXNT/EMX C rtl uses OEM charset */ char *ansi_path = (char *)alloca(strlen(path) + 1); INTERN_TO_ISO(path, ansi_path); # define Ansi_Path ansi_path #else # define Ansi_Path path #endif TTrace((stdout, "stat(%s) finds modtime %08lx\n", path, buf->st_mtime)); h = CreateFileA(Ansi_Path, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (h != INVALID_HANDLE_VALUE) { BOOL ftOK = GetFileTime(h, &Creft, &Accft, &Modft); CloseHandle(h); if (ftOK) { FTTrace((stdout, "GetFileTime returned Modft", 0, &Modft)); FTTrace((stdout, "GetFileTime returned Creft", 0, &Creft)); #ifndef NO_W32TIMES_IZFIX if (!fs_uses_loctime) { /* On a filesystem that stores UTC timestamps, we refill * the time fields of the struct stat buffer by directly * using the UTC values as returned by the Win32 * GetFileTime() API call. */ NtfsFileTime2utime(&Modft, &(buf->st_mtime)); if (Accft.dwLowDateTime != 0 || Accft.dwHighDateTime != 0) NtfsFileTime2utime(&Accft, &(buf->st_atime)); else buf->st_atime = buf->st_mtime; if (Creft.dwLowDateTime != 0 || Creft.dwHighDateTime != 0) NtfsFileTime2utime(&Creft, &(buf->st_ctime)); else buf->st_ctime = buf->st_mtime; TTrace((stdout,"NTFS, recalculated modtime %08lx\n", buf->st_mtime)); } else #endif /* NO_W32TIMES_IZFIX */ { /* On VFAT and FAT-like filesystems, the FILETIME values * are converted back to the stable local time before * converting them to UTC unix time-stamps. */ VFatFileTime2utime(&Modft, &(buf->st_mtime)); if (Accft.dwLowDateTime != 0 || Accft.dwHighDateTime != 0) VFatFileTime2utime(&Accft, &(buf->st_atime)); else buf->st_atime = buf->st_mtime; if (Creft.dwLowDateTime != 0 || Creft.dwHighDateTime != 0) VFatFileTime2utime(&Creft, &(buf->st_ctime)); else buf->st_ctime = buf->st_mtime; TTrace((stdout, "VFAT, recalculated modtime %08lx\n", buf->st_mtime)); } } } # undef Ansi_Path return 0; } #ifdef W32_STATROOT_FIX else { DWORD flags; #ifdef __RSXNT__ /* RSXNT/EMX C rtl uses OEM charset */ char *ansi_path = (char *)alloca(strlen(path) + 1); INTERN_TO_ISO(path, ansi_path); # define Ansi_Path ansi_path #else # define Ansi_Path path #endif flags = GetFileAttributesA(Ansi_Path); if (flags != 0xFFFFFFFF && flags & FILE_ATTRIBUTE_DIRECTORY) { Trace((stderr, "\nstat(\"%s\",...) failed on existing directory\n", FnFilter1(path))); memset(buf, 0, sizeof(z_stat)); buf->st_atime = buf->st_ctime = buf->st_mtime = dos_to_unix_time(DOSTIME_MINIMUM); /* 1-1-80 */ buf->st_mode = S_IFDIR | S_IREAD | ((flags & FILE_ATTRIBUTE_READONLY) ? 0 : S_IWRITE); return 0; } /* assumes: stat() won't fail on non-dirs without good reason */ # undef Ansi_Path } #endif /* W32_STATROOT_FIX */ return -1; } #endif /* W32_STAT_BANDAID */ #ifdef W32_USE_IZ_TIMEZONE #include "timezone.h" #define SECSPERMIN 60 #define MINSPERHOUR 60 #define SECSPERHOUR (SECSPERMIN * MINSPERHOUR) static void conv_to_rule(LPSYSTEMTIME lpw32tm, struct rule * ZCONST ptrule); static void conv_to_rule(LPSYSTEMTIME lpw32tm, struct rule * ZCONST ptrule) { if (lpw32tm->wYear != 0) { ptrule->r_type = JULIAN_DAY; ptrule->r_day = ydays[lpw32tm->wMonth - 1] + lpw32tm->wDay; } else { ptrule->r_type = MONTH_NTH_DAY_OF_WEEK; ptrule->r_mon = lpw32tm->wMonth; ptrule->r_day = lpw32tm->wDayOfWeek; ptrule->r_week = lpw32tm->wDay; } ptrule->r_time = (long)lpw32tm->wHour * SECSPERHOUR + (long)(lpw32tm->wMinute * SECSPERMIN) + (long)lpw32tm->wSecond; } int GetPlatformLocalTimezone(register struct state * ZCONST sp, void (*fill_tzstate_from_rules)(struct state * ZCONST sp_res, ZCONST struct rule * ZCONST start, ZCONST struct rule * ZCONST end)) { TIME_ZONE_INFORMATION tzinfo; DWORD res; /* read current timezone settings from registry if TZ envvar missing */ res = GetTimeZoneInformation(&tzinfo); if (res != TIME_ZONE_ID_INVALID) { struct rule startrule, stoprule; conv_to_rule(&(tzinfo.StandardDate), &stoprule); conv_to_rule(&(tzinfo.DaylightDate), &startrule); sp->timecnt = 0; sp->ttis[0].tt_abbrind = 0; if ((sp->charcnt = WideCharToMultiByte(CP_ACP, 0, tzinfo.StandardName, -1, sp->chars, sizeof(sp->chars), NULL, NULL)) == 0) sp->chars[sp->charcnt++] = '\0'; sp->ttis[1].tt_abbrind = sp->charcnt; sp->charcnt += WideCharToMultiByte(CP_ACP, 0, tzinfo.DaylightName, -1, sp->chars + sp->charcnt, sizeof(sp->chars) - sp->charcnt, NULL, NULL); if ((sp->charcnt - sp->ttis[1].tt_abbrind) == 0) sp->chars[sp->charcnt++] = '\0'; sp->ttis[0].tt_gmtoff = - (tzinfo.Bias + tzinfo.StandardBias) * MINSPERHOUR; sp->ttis[1].tt_gmtoff = - (tzinfo.Bias + tzinfo.DaylightBias) * MINSPERHOUR; sp->ttis[0].tt_isdst = 0; sp->ttis[1].tt_isdst = 1; sp->typecnt = (startrule.r_mon == 0 && stoprule.r_mon == 0) ? 1 : 2; if (sp->typecnt > 1) (*fill_tzstate_from_rules)(sp, &startrule, &stoprule); return TRUE; } return FALSE; } #endif /* W32_USE_IZ_TIMEZONE */ #endif /* !FUNZIP */ #ifndef WINDLL /* This replacement getch() function was originally created for Watcom C * and then additionally used with CYGWIN. Since UnZip 5.4, all other Win32 * ports apply this replacement rather that their supplied getch() (or * alike) function. There are problems with unabsorbed LF characters left * over in the keyboard buffer under Win95 (and 98) when ENTER was pressed. * (Under Win95, ENTER returns two(!!) characters: CR-LF.) This problem * does not appear when run on a WinNT console prompt! */ /* Watcom 10.6's getch() does not handle Alt+. */ /* Note that if PASSWD_FROM_STDIN is defined, the file containing */ /* the password must have a carriage return after the word, not a */ /* Unix-style newline (linefeed only). This discards linefeeds. */ int getch_win32(void) { HANDLE stin; DWORD rc; unsigned char buf[2]; int ret = -1; DWORD odemode = ~(DWORD)0; # ifdef PASSWD_FROM_STDIN stin = GetStdHandle(STD_INPUT_HANDLE); # else stin = CreateFileA("CONIN$", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); if (stin == INVALID_HANDLE_VALUE) return -1; # endif if (GetConsoleMode(stin, &odemode)) SetConsoleMode(stin, ENABLE_PROCESSED_INPUT); /* raw except ^C noticed */ if (ReadFile(stin, &buf, 1, &rc, NULL) && rc == 1) ret = buf[0]; /* when the user hits return we get CR LF. We discard the LF, not the CR, * because when we call this for the first time after a previous input * such as the one for "replace foo? [y]es, ..." the LF may still be in * the input stream before whatever the user types at our prompt. */ if (ret == '\n') if (ReadFile(stin, &buf, 1, &rc, NULL) && rc == 1) ret = buf[0]; if (odemode != ~(DWORD)0) SetConsoleMode(stin, odemode); # ifndef PASSWD_FROM_STDIN CloseHandle(stin); # endif return ret; } #endif /* !WINDLL */ #if (defined(UNICODE_SUPPORT) && !defined(FUNZIP)) /* convert wide character string to multi-byte character string */ char *wide_to_local_string(wide_string, escape_all) ZCONST zwchar *wide_string; int escape_all; { int i; wchar_t wc; int bytes_char; int default_used; int wsize = 0; int max_bytes = 9; char buf[9]; char *buffer = NULL; char *local_string = NULL; for (wsize = 0; wide_string[wsize]; wsize++) ; if (max_bytes < MB_CUR_MAX) max_bytes = MB_CUR_MAX; if ((buffer = (char *)malloc(wsize * max_bytes + 1)) == NULL) { return NULL; } /* convert it */ buffer[0] = '\0'; for (i = 0; i < wsize; i++) { if (sizeof(wchar_t) < 4 && wide_string[i] > 0xFFFF) { /* wchar_t probably 2 bytes */ /* could do surrogates if state_dependent and wctomb can do */ wc = zwchar_to_wchar_t_default_char; } else { wc = (wchar_t)wide_string[i]; } /* Unter some vendor's C-RTL, the Wide-to-MultiByte conversion functions * (like wctomb() et. al.) do not use the same codepage as the other * string arguments I/O functions (fopen, mkdir, rmdir etc.). * Therefore, we have to fall back to the underlying Win32-API call to * achieve a consistent behaviour for all supported compiler environments. * Failing RTLs are for example: * Borland (locale uses OEM-CP as default, but I/O functions expect ANSI * names) * Watcom (only "C" locale, wctomb() always uses OEM CP) * (in other words: all supported environments except the Microsoft RTLs) */ bytes_char = WideCharToMultiByte( CP_ACP, WC_COMPOSITECHECK, &wc, 1, (LPSTR)buf, sizeof(buf), NULL, &default_used); if (default_used) bytes_char = -1; if (escape_all) { if (bytes_char == 1 && (uch)buf[0] <= 0x7f) { /* ASCII */ strncat(buffer, buf, 1); } else { /* use escape for wide character */ char *escape_string = wide_to_escape_string(wide_string[i]); strcat(buffer, escape_string); free(escape_string); } } else if (bytes_char > 0) { /* multi-byte char */ strncat(buffer, buf, bytes_char); } else { /* no MB for this wide */ /* use escape for wide character */ char *escape_string = wide_to_escape_string(wide_string[i]); strcat(buffer, escape_string); free(escape_string); } } if ((local_string = (char *)realloc(buffer, strlen(buffer) + 1)) == NULL) { free(buffer); return NULL; } return local_string; } #if 0 wchar_t *utf8_to_wchar_string(utf8_string) char *utf8_string; /* path to get utf-8 name for */ { wchar_t *qw; int ulen; int ulenw; if (utf8_string == NULL) return NULL; /* get length */ ulenw = MultiByteToWideChar( CP_UTF8, /* UTF-8 code page */ 0, /* flags for character-type options */ utf8_string, /* string to convert */ -1, /* string length (-1 = NULL terminated) */ NULL, /* buffer */ 0 ); /* buffer length (0 = return length) */ if (ulenw == 0) { /* failed */ return NULL; } ulenw++; /* get length in bytes */ ulen = sizeof(wchar_t) * (ulenw + 1); if ((qw = (wchar_t *)malloc(ulen + 1)) == NULL) { return NULL; } /* convert multibyte to wide */ ulen = MultiByteToWideChar( CP_UTF8, /* UTF-8 code page */ 0, /* flags for character-type options */ utf8_string, /* string to convert */ -1, /* string length (-1 = NULL terminated) */ qw, /* buffer */ ulenw); /* buffer length (0 = return length) */ if (ulen == 0) { /* failed */ free(qw); return NULL; } return qw; } wchar_t *local_to_wchar_string(local_string) char *local_string; /* path of local name */ { wchar_t *qw; int ulen; int ulenw; if (local_string == NULL) return NULL; /* get length */ ulenw = MultiByteToWideChar( CP_ACP, /* ANSI code page */ 0, /* flags for character-type options */ local_string, /* string to convert */ -1, /* string length (-1 = NULL terminated) */ NULL, /* buffer */ 0 ); /* buffer length (0 = return length) */ if (ulenw == 0) { /* failed */ return NULL; } ulenw++; /* get length in bytes */ ulen = sizeof(wchar_t) * (ulenw + 1); if ((qw = (wchar_t *)malloc(ulen + 1)) == NULL) { return NULL; } /* convert multibyte to wide */ ulen = MultiByteToWideChar( CP_ACP, /* ANSI code page */ 0, /* flags for character-type options */ local_string, /* string to convert */ -1, /* string length (-1 = NULL terminated) */ qw, /* buffer */ ulenw); /* buffer length (0 = return length) */ if (ulen == 0) { /* failed */ free(qw); return NULL; } return qw; } #endif /* 0 */ #endif /* UNICODE_SUPPORT && !FUNZIP */ /* --------------------------------------------------- */ /* Large File Support * * Initial functions by E. Gordon and R. Nausedat * 9/10/2003 * Lifted from Zip 3b, win32.c and place here by Myles Bennett * 7/6/2004 * * These implement 64-bit file support for Windows. The * defines and headers are in win32/w32cfg.h. * * Moved to win32i64.c by Mike White to avoid conflicts in * same name functions in WiZ using UnZip and Zip libraries. * 9/25/2003 */ Carla-2.4.2/data/windows/unzipfx-carla/win32/win32i64.c000066400000000000000000000067741420416754300223460ustar00rootroot00000000000000/* Copyright (c) 1990-2009 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2009-Jan-02 or later (the contents of which are also included in zip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- win32/win32i64.c - UnZip 6 64-bit filesize support for WIN32 Zip and UnZip. ---------------------------------------------------------------------------*/ #include "../zip.h" /* --------------------------------------------------- */ /* Large File Support * * Initial functions by E. Gordon and R. Nausedat * 9/10/2003 * * These implement 64-bit file support for Windows. The * defines and headers are in win32/osdep.h. * * These moved from win32.c by Mike White to avoid conflicts * in WiZ of same name functions in UnZip and Zip libraries. * 9/25/04 EG */ #if defined(LARGE_FILE_SUPPORT) && !defined(__CYGWIN__) # ifdef USE_STRM_INPUT # ifndef zftello /* 64-bit buffered ftello * * Win32 does not provide a 64-bit buffered * ftell (in the published api anyway) so below provides * hopefully close version. * We have not gotten _telli64 to work with buffered * streams. Below cheats by using fgetpos improperly and * may not work on other ports. */ zoff_t zftello(stream) FILE *stream; { fpos_t fpos = 0; if (fgetpos(stream, &fpos) != 0) { return -1L; } else { return fpos; } } # endif /* ndef zftello */ # ifndef zfseeko /* 64-bit buffered fseeko * * Win32 does not provide a 64-bit buffered * fseeko, so use _lseeki64 and fflush. Note * that SEEK_CUR can lose track of location * if fflush is done between the last buffered * io and this call. */ int zfseeko(stream, offset, origin) FILE *stream; zoff_t offset; int origin; { /* fseek() or its replacements are supposed to clear the eof status of the stream. fflush() and _lseeki64() do not touch the stream's eof flag, so we have to do it manually. */ #if ((defined(_MSC_VER) && (_MSC_VER >= 1200)) || \ (defined(__MINGW32__) && defined(__MSVCRT_VERSION__))) /* For the MSC environment (VS 6 or higher), and for recent releases of the MinGW environment, we "know" the internals of the FILE structure. So, we can clear just the EOF bit of the status flag. */ stream->_flag &= ~_IOEOF; #else /* Unfortunately, there is no standard "cleareof()" function, so we have to use clearerr(). This has the unwanted side effect of clearing the ferror() state as well. */ clearerr(stream); #endif if (origin == SEEK_CUR) { /* instead of synching up lseek easier just to figure and use an absolute offset */ offset += zftello(stream); origin = SEEK_SET; } fflush(stream); if (_lseeki64(fileno(stream), offset, origin) == (zoff_t)-1L) { return -1; } else { return 0; } } # endif /* ndef fseeko */ # endif /* USE_STRM_INPUT */ #endif /* Win32 LARGE_FILE_SUPPORT */ #if 0 FILE* zfopen(filename, mode) const char *filename; const char *mode; { FILE* fTemp; fTemp = fopen(filename, mode); if( fTemp == NULL ) return NULL; /* sorry, could not make VC60 and its rtl work properly without setting the * file buffer to NULL. the problem seems to be _telli64 which seems to * return the max stream position, comments are welcome */ setbuf(fTemp, NULL); return fTemp; } #endif /* --------------------------------------------------- */ Carla-2.4.2/data/windows/unzipfx-carla/zip.h000066400000000000000000000014431420416754300207120ustar00rootroot00000000000000/* Copyright (c) 1990-2005 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2003-May-08 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /* This is a dummy zip.h to allow the source files shared with Zip (crypt.c, crc32.c, ttyio.c, win32/win32i64.c) to compile for UnZip. (In case you are looking for the Info-ZIP license, please follow the pointers above.) */ #ifndef __zip_h /* don't include more than once */ #define __zip_h #define UNZIP_INTERNAL #include "unzip.h" #define local static #define ZE_MEM PK_MEM #define ziperr(c, h) return #endif /* !__zip_h */ Carla-2.4.2/data/windows/unzipfx-carla/zipinfo.c000066400000000000000000002761221420416754300215710ustar00rootroot00000000000000/* Copyright (c) 1990-2009 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2009-Jan-02 or later (the contents of which are also included in unzip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /*--------------------------------------------------------------------------- zipinfo.c Greg Roelofs et al. This file contains all of the ZipInfo-specific listing routines for UnZip. Contains: zi_opts() zi_end_central() zipinfo() zi_long() zi_short() zi_time() ---------------------------------------------------------------------------*/ #define UNZIP_INTERNAL #include "unzip.h" #ifndef NO_ZIPINFO /* strings use up too much space in small-memory systems */ /* Define OS-specific attributes for use on ALL platforms--the S_xxxx * versions of these are defined differently (or not defined) by different * compilers and operating systems. */ #define UNX_IFMT 0170000 /* Unix file type mask */ #define UNX_IFREG 0100000 /* Unix regular file */ #define UNX_IFSOCK 0140000 /* Unix socket (BSD, not SysV or Amiga) */ #define UNX_IFLNK 0120000 /* Unix symbolic link (not SysV, Amiga) */ #define UNX_IFBLK 0060000 /* Unix block special (not Amiga) */ #define UNX_IFDIR 0040000 /* Unix directory */ #define UNX_IFCHR 0020000 /* Unix character special (not Amiga) */ #define UNX_IFIFO 0010000 /* Unix fifo (BCC, not MSC or Amiga) */ #define UNX_ISUID 04000 /* Unix set user id on execution */ #define UNX_ISGID 02000 /* Unix set group id on execution */ #define UNX_ISVTX 01000 /* Unix directory permissions control */ #define UNX_ENFMT UNX_ISGID /* Unix record locking enforcement flag */ #define UNX_IRWXU 00700 /* Unix read, write, execute: owner */ #define UNX_IRUSR 00400 /* Unix read permission: owner */ #define UNX_IWUSR 00200 /* Unix write permission: owner */ #define UNX_IXUSR 00100 /* Unix execute permission: owner */ #define UNX_IRWXG 00070 /* Unix read, write, execute: group */ #define UNX_IRGRP 00040 /* Unix read permission: group */ #define UNX_IWGRP 00020 /* Unix write permission: group */ #define UNX_IXGRP 00010 /* Unix execute permission: group */ #define UNX_IRWXO 00007 /* Unix read, write, execute: other */ #define UNX_IROTH 00004 /* Unix read permission: other */ #define UNX_IWOTH 00002 /* Unix write permission: other */ #define UNX_IXOTH 00001 /* Unix execute permission: other */ #define VMS_IRUSR UNX_IRUSR /* VMS read/owner */ #define VMS_IWUSR UNX_IWUSR /* VMS write/owner */ #define VMS_IXUSR UNX_IXUSR /* VMS execute/owner */ #define VMS_IRGRP UNX_IRGRP /* VMS read/group */ #define VMS_IWGRP UNX_IWGRP /* VMS write/group */ #define VMS_IXGRP UNX_IXGRP /* VMS execute/group */ #define VMS_IROTH UNX_IROTH /* VMS read/other */ #define VMS_IWOTH UNX_IWOTH /* VMS write/other */ #define VMS_IXOTH UNX_IXOTH /* VMS execute/other */ #define AMI_IFMT 06000 /* Amiga file type mask */ #define AMI_IFDIR 04000 /* Amiga directory */ #define AMI_IFREG 02000 /* Amiga regular file */ #define AMI_IHIDDEN 00200 /* to be supported in AmigaDOS 3.x */ #define AMI_ISCRIPT 00100 /* executable script (text command file) */ #define AMI_IPURE 00040 /* allow loading into resident memory */ #define AMI_IARCHIVE 00020 /* not modified since bit was last set */ #define AMI_IREAD 00010 /* can be opened for reading */ #define AMI_IWRITE 00004 /* can be opened for writing */ #define AMI_IEXECUTE 00002 /* executable image, a loadable runfile */ #define AMI_IDELETE 00001 /* can be deleted */ #define THS_IFMT 0xF000 /* Theos file type mask */ #define THS_IFIFO 0x1000 /* pipe */ #define THS_IFCHR 0x2000 /* char device */ #define THS_IFSOCK 0x3000 /* socket */ #define THS_IFDIR 0x4000 /* directory */ #define THS_IFLIB 0x5000 /* library */ #define THS_IFBLK 0x6000 /* block device */ #define THS_IFREG 0x8000 /* regular file */ #define THS_IFREL 0x9000 /* relative (direct) */ #define THS_IFKEY 0xA000 /* keyed */ #define THS_IFIND 0xB000 /* indexed */ #define THS_IFRND 0xC000 /* ???? */ #define THS_IFR16 0xD000 /* 16 bit real mode program */ #define THS_IFP16 0xE000 /* 16 bit protected mode prog */ #define THS_IFP32 0xF000 /* 32 bit protected mode prog */ #define THS_IMODF 0x0800 /* modified */ #define THS_INHID 0x0400 /* not hidden */ #define THS_IEUSR 0x0200 /* erase permission: owner */ #define THS_IRUSR 0x0100 /* read permission: owner */ #define THS_IWUSR 0x0080 /* write permission: owner */ #define THS_IXUSR 0x0040 /* execute permission: owner */ #define THS_IROTH 0x0004 /* read permission: other */ #define THS_IWOTH 0x0002 /* write permission: other */ #define THS_IXOTH 0x0001 /* execute permission: other */ #ifdef OLD_THEOS_EXTRA # include "theos/oldstat.h" #endif #ifndef NSK_UNSTRUCTURED # define NSK_UNSTRUCTURED 0 #endif #ifndef NSK_OBJECTFILECODE # define NSK_OBJECTFILECODE 100 #endif #ifndef NSK_EDITFILECODE # define NSK_EDITFILECODE 101 #endif #define LFLAG 3 /* short "ls -l" type listing */ static int zi_long OF((__GPRO__ zusz_t *pEndprev, int error_in_archive)); static int zi_short OF((__GPRO)); static void zi_showMacTypeCreator OF((__GPRO__ uch *ebfield)); static char *zi_time OF((__GPRO__ ZCONST ulg *datetimez, ZCONST time_t *modtimez, char *d_t_str)); /**********************************************/ /* Strings used in zipinfo.c (ZipInfo half) */ /**********************************************/ static ZCONST char nullStr[] = ""; static ZCONST char PlurSufx[] = "s"; static ZCONST char Far ZipInfHeader2[] = "Zip file size: %s bytes, number of entries: %s\n"; static ZCONST char Far EndCentDirRec[] = "\nEnd-of-central-directory record:\n"; static ZCONST char Far LineSeparators[] = "-------------------------------\n\n"; static ZCONST char Far ZipFSizeVerbose[] = "\ Zip archive file size: %s (%sh)\n"; static ZCONST char Far ActOffsetCentDir[] = "\ Actual end-cent-dir record offset: %s (%sh)\n\ Expected end-cent-dir record offset: %s (%sh)\n\ (based on the length of the central directory and its expected offset)\n\n"; static ZCONST char Far SinglePartArchive1[] = "\ This zipfile constitutes the sole disk of a single-part archive; its\n\ central directory contains %s %s.\n\ The central directory is %s (%sh) bytes long,\n"; static ZCONST char Far SinglePartArchive2[] = "\ and its (expected) offset in bytes from the beginning of the zipfile\n\ is %s (%sh).\n\n"; static ZCONST char Far MultiPartArchive1[] = "\ This zipfile constitutes disk %lu of a multi-part archive. The central\n\ directory starts on disk %lu at an offset within that archive part\n"; static ZCONST char Far MultiPartArchive2[] = "\ of %s (%sh) bytes. The entire\n\ central directory is %s (%sh) bytes long.\n"; static ZCONST char Far MultiPartArchive3[] = "\ %s of the archive entries %s contained within this zipfile volume,\n\ out of a total of %s %s.\n\n"; static ZCONST char Far CentralDirEntry[] = "\nCentral directory entry #%lu:\n---------------------------\n\n"; static ZCONST char Far ZipfileStats[] = "%lu file%s, %s bytes uncompressed, %s bytes compressed: %s%d.%d%%\n"; /* zi_long() strings */ static ZCONST char Far OS_FAT[] = "MS-DOS, OS/2 or NT FAT"; static ZCONST char Far OS_Amiga[] = "Amiga"; static ZCONST char Far OS_VMS[] = "VMS"; static ZCONST char Far OS_Unix[] = "Unix"; static ZCONST char Far OS_VMCMS[] = "VM/CMS"; static ZCONST char Far OS_AtariST[] = "Atari ST"; static ZCONST char Far OS_HPFS[] = "OS/2 or NT HPFS"; static ZCONST char Far OS_Macintosh[] = "Macintosh HFS"; static ZCONST char Far OS_ZSystem[] = "Z-System"; static ZCONST char Far OS_CPM[] = "CP/M"; static ZCONST char Far OS_TOPS20[] = "TOPS-20"; static ZCONST char Far OS_NTFS[] = "NTFS"; static ZCONST char Far OS_QDOS[] = "SMS/QDOS"; static ZCONST char Far OS_Acorn[] = "Acorn RISC OS"; static ZCONST char Far OS_MVS[] = "MVS"; static ZCONST char Far OS_VFAT[] = "Win32 VFAT"; static ZCONST char Far OS_AtheOS[] = "AtheOS"; static ZCONST char Far OS_BeOS[] = "BeOS"; static ZCONST char Far OS_Tandem[] = "Tandem NSK"; static ZCONST char Far OS_Theos[] = "Theos"; static ZCONST char Far OS_MacDarwin[] = "Mac OS/X (Darwin)"; #ifdef OLD_THEOS_EXTRA static ZCONST char Far OS_TheosOld[] = "Theos (Old)"; #endif /* OLD_THEOS_EXTRA */ static ZCONST char Far MthdNone[] = "none (stored)"; static ZCONST char Far MthdShrunk[] = "shrunk"; static ZCONST char Far MthdRedF1[] = "reduced (factor 1)"; static ZCONST char Far MthdRedF2[] = "reduced (factor 2)"; static ZCONST char Far MthdRedF3[] = "reduced (factor 3)"; static ZCONST char Far MthdRedF4[] = "reduced (factor 4)"; static ZCONST char Far MthdImplode[] = "imploded"; static ZCONST char Far MthdToken[] = "tokenized"; static ZCONST char Far MthdDeflate[] = "deflated"; static ZCONST char Far MthdDeflat64[] = "deflated (enhanced-64k)"; static ZCONST char Far MthdDCLImplode[] = "imploded (PK DCL)"; static ZCONST char Far MthdBZip2[] = "bzipped"; static ZCONST char Far MthdLZMA[] = "LZMA-ed"; static ZCONST char Far MthdTerse[] = "tersed (IBM)"; static ZCONST char Far MthdLZ77[] = "LZ77-compressed (IBM)"; static ZCONST char Far MthdWavPack[] = "WavPacked"; static ZCONST char Far MthdPPMd[] = "PPMd-ed"; static ZCONST char Far DeflNorm[] = "normal"; static ZCONST char Far DeflMax[] = "maximum"; static ZCONST char Far DeflFast[] = "fast"; static ZCONST char Far DeflSFast[] = "superfast"; static ZCONST char Far ExtraBytesPreceding[] = " There are an extra %s bytes preceding this file.\n\n"; static ZCONST char Far UnknownNo[] = "unknown (%d)"; #ifdef ZIP64_SUPPORT static ZCONST char Far LocalHeaderOffset[] = "\n offset of local header from start of archive: %s\n\ (%sh) bytes\n"; #else static ZCONST char Far LocalHeaderOffset[] = "\n offset of local header from start of archive: %s (%sh) bytes\n"; #endif static ZCONST char Far HostOS[] = " file system or operating system of origin: %s\n"; static ZCONST char Far EncodeSWVer[] = " version of encoding software: %u.%u\n"; static ZCONST char Far MinOSCompReq[] = " minimum file system compatibility required: %s\n"; static ZCONST char Far MinSWVerReq[] = " minimum software version required to extract: %u.%u\n"; static ZCONST char Far CompressMethod[] = " compression method: %s\n"; static ZCONST char Far SlideWindowSizeImplode[] = " size of sliding dictionary (implosion): %cK\n"; static ZCONST char Far ShannonFanoTrees[] = " number of Shannon-Fano trees (implosion): %c\n"; static ZCONST char Far CompressSubtype[] = " compression sub-type (deflation): %s\n"; static ZCONST char Far FileSecurity[] = " file security status: %sencrypted\n"; static ZCONST char Far ExtendedLocalHdr[] = " extended local header: %s\n"; static ZCONST char Far FileModDate[] = " file last modified on (DOS date/time): %s\n"; #ifdef USE_EF_UT_TIME static ZCONST char Far UT_FileModDate[] = " file last modified on (UT extra field modtime): %s %s\n"; static ZCONST char Far LocalTime[] = "local"; #ifndef NO_GMTIME static ZCONST char Far GMTime[] = "UTC"; #endif #endif /* USE_EF_UT_TIME */ static ZCONST char Far CRC32Value[] = " 32-bit CRC value (hex): %.8lx\n"; static ZCONST char Far CompressedFileSize[] = " compressed size: %s bytes\n"; static ZCONST char Far UncompressedFileSize[] = " uncompressed size: %s bytes\n"; static ZCONST char Far FilenameLength[] = " length of filename: %u characters\n"; static ZCONST char Far ExtraFieldLength[] = " length of extra field: %u bytes\n"; static ZCONST char Far FileCommentLength[] = " length of file comment: %u characters\n"; static ZCONST char Far FileDiskNum[] = " disk number on which file begins: disk %lu\n"; static ZCONST char Far ApparentFileType[] = " apparent file type: %s\n"; static ZCONST char Far VMSFileAttributes[] = " VMS file attributes (%06o octal): %s\n"; static ZCONST char Far AmigaFileAttributes[] = " Amiga file attributes (%06o octal): %s\n"; static ZCONST char Far UnixFileAttributes[] = " Unix file attributes (%06o octal): %s\n"; static ZCONST char Far NonMSDOSFileAttributes[] = " non-MSDOS external file attributes: %06lX hex\n"; static ZCONST char Far MSDOSFileAttributes[] = " MS-DOS file attributes (%02X hex): none\n"; static ZCONST char Far MSDOSFileAttributesRO[] = " MS-DOS file attributes (%02X hex): read-only\n"; static ZCONST char Far MSDOSFileAttributesAlpha[] = " MS-DOS file attributes (%02X hex): %s%s%s%s%s%s%s%s\n"; static ZCONST char Far TheosFileAttributes[] = " Theos file attributes (%04X hex): %s\n"; static ZCONST char Far TheosFTypLib[] = "Library "; static ZCONST char Far TheosFTypDir[] = "Directory "; static ZCONST char Far TheosFTypReg[] = "Sequential "; static ZCONST char Far TheosFTypRel[] = "Direct "; static ZCONST char Far TheosFTypKey[] = "Keyed "; static ZCONST char Far TheosFTypInd[] = "Indexed "; static ZCONST char Far TheosFTypR16[] = " 86 program "; static ZCONST char Far TheosFTypP16[] = "286 program "; static ZCONST char Far TheosFTypP32[] = "386 program "; static ZCONST char Far TheosFTypUkn[] = "??? "; static ZCONST char Far ExtraFieldTrunc[] = "\n\ error: EF data block (type 0x%04x) size %u exceeds remaining extra field\n\ space %u; block length has been truncated.\n"; static ZCONST char Far ExtraFields[] = "\n\ The central-directory extra field contains:"; static ZCONST char Far ExtraFieldType[] = "\n\ - A subfield with ID 0x%04x (%s) and %u data bytes"; static ZCONST char Far efPKSZ64[] = "PKWARE 64-bit sizes"; static ZCONST char Far efAV[] = "PKWARE AV"; static ZCONST char Far efOS2[] = "OS/2"; static ZCONST char Far efPKVMS[] = "PKWARE VMS"; static ZCONST char Far efPKWin32[] = "PKWARE Win32"; static ZCONST char Far efPKUnix[] = "PKWARE Unix"; static ZCONST char Far efIZVMS[] = "Info-ZIP VMS"; static ZCONST char Far efIZUnix[] = "old Info-ZIP Unix/OS2/NT"; static ZCONST char Far efIZUnix2[] = "Unix UID/GID (16-bit)"; static ZCONST char Far efIZUnix3[] = "Unix UID/GID (any size)"; static ZCONST char Far efTime[] = "universal time"; static ZCONST char Far efU8Path[] = "UTF8 path name"; static ZCONST char Far efU8Commnt[] = "UTF8 entry comment"; static ZCONST char Far efJLMac[] = "old Info-ZIP Macintosh"; static ZCONST char Far efMac3[] = "new Info-ZIP Macintosh"; static ZCONST char Far efZipIt[] = "ZipIt Macintosh"; static ZCONST char Far efSmartZip[] = "SmartZip Macintosh"; static ZCONST char Far efZipIt2[] = "ZipIt Macintosh (short)"; static ZCONST char Far efVMCMS[] = "VM/CMS"; static ZCONST char Far efMVS[] = "MVS"; static ZCONST char Far efACL[] = "OS/2 ACL"; static ZCONST char Far efNTSD[] = "Security Descriptor"; static ZCONST char Far efAtheOS[] = "AtheOS"; static ZCONST char Far efBeOS[] = "BeOS"; static ZCONST char Far efQDOS[] = "SMS/QDOS"; static ZCONST char Far efAOSVS[] = "AOS/VS"; static ZCONST char Far efSpark[] = "Acorn SparkFS"; static ZCONST char Far efMD5[] = "Fred Kantor MD5"; static ZCONST char Far efASiUnix[] = "ASi Unix"; static ZCONST char Far efTandem[] = "Tandem NSK"; static ZCONST char Far efTheos[] = "Theos"; static ZCONST char Far efUnknown[] = "unknown"; static ZCONST char Far OS2EAs[] = ".\n\ The local extra field has %lu bytes of OS/2 extended attributes.\n\ (May not match OS/2 \"dir\" amount due to storage method)"; static ZCONST char Far izVMSdata[] = ". The extra\n\ field is %s and has %u bytes of VMS %s information%s"; static ZCONST char Far izVMSstored[] = "stored"; static ZCONST char Far izVMSrleenc[] = "run-length encoded"; static ZCONST char Far izVMSdeflat[] = "deflated"; static ZCONST char Far izVMScunknw[] = "compressed(?)"; static ZCONST char Far *izVMScomp[4] = {izVMSstored, izVMSrleenc, izVMSdeflat, izVMScunknw}; static ZCONST char Far ACLdata[] = ".\n\ The local extra field has %lu bytes of access control list information"; static ZCONST char Far NTSDData[] = ".\n\ The local extra field has %lu bytes of NT security descriptor data"; static ZCONST char Far UTdata[] = ".\n\ The local extra field has UTC/GMT %s time%s"; static ZCONST char Far UTmodification[] = "modification"; static ZCONST char Far UTaccess[] = "access"; static ZCONST char Far UTcreation[] = "creation"; static ZCONST char Far U8PthCmnComplete[] = ".\n\ The UTF8 data of the extra field (V%u, ASCII name CRC `%.8lx') are:\n "; static ZCONST char Far U8PthCmnF24[] = ". The first\n\ 24 UTF8 bytes in the extra field (V%u, ASCII name CRC `%.8lx') are:\n "; static ZCONST char Far ZipItFname[] = ".\n\ The Mac long filename is %s"; static ZCONST char Far Mac3data[] = ".\n\ The local extra field has %lu bytes of %scompressed Macintosh\n\ finder attributes"; /* MacOSdata[] is used by EF_MAC3, EF_ZIPIT, EF_ZIPIT2 and EF_JLEE e. f. */ static ZCONST char Far MacOSdata[] = ".\n\ The associated file has type code `%c%c%c%c' and creator code `%c%c%c%c'"; static ZCONST char Far MacOSdata1[] = ".\n\ The associated file has type code `0x%lx' and creator code `0x%lx'"; static ZCONST char Far MacOSJLEEflags[] = ".\n File is marked as %s"; static ZCONST char Far MacOS_RF[] = "Resource-fork"; static ZCONST char Far MacOS_DF[] = "Data-fork"; static ZCONST char Far MacOSMAC3flags[] = ".\n\ File is marked as %s, File Dates are in %d Bit"; static ZCONST char Far AtheOSdata[] = ".\n\ The local extra field has %lu bytes of %scompressed AtheOS file attributes"; static ZCONST char Far BeOSdata[] = ".\n\ The local extra field has %lu bytes of %scompressed BeOS file attributes"; /* The associated file has type code `%c%c%c%c' and creator code `%c%c%c%c'" */ static ZCONST char Far QDOSdata[] = ".\n\ The QDOS extra field subtype is `%c%c%c%c'"; static ZCONST char Far AOSVSdata[] = ".\n\ The AOS/VS extra field revision is %d.%d"; static ZCONST char Far TandemUnstr[] = "Unstructured"; static ZCONST char Far TandemRel[] = "Relative"; static ZCONST char Far TandemEntry[] = "Entry Sequenced"; static ZCONST char Far TandemKey[] = "Key Sequenced"; static ZCONST char Far TandemEdit[] = "Edit"; static ZCONST char Far TandemObj[] = "Object"; static ZCONST char Far *TandemFileformat[6] = {TandemUnstr, TandemRel, TandemEntry, TandemKey, TandemEdit, TandemObj}; static ZCONST char Far Tandemdata[] = ".\n\ The file was originally a Tandem %s file, with file code %u"; static ZCONST char Far MD5data[] = ".\n\ The 128-bit MD5 signature is %s"; #ifdef CMS_MVS static ZCONST char Far VmMvsExtraField[] = ".\n\ The stored file open mode (FLDATA TYPE) is \"%s\""; static ZCONST char Far VmMvsInvalid[] = "[invalid]"; #endif /* CMS_MVS */ static ZCONST char Far First20[] = ". The first\n 20 are: "; static ZCONST char Far ColonIndent[] = ":\n "; static ZCONST char Far efFormat[] = " %02x"; static ZCONST char Far lExtraFieldType[] = "\n\ There %s a local extra field with ID 0x%04x (%s) and\n\ %u data bytes (%s).\n"; static ZCONST char Far efIZuid[] = "GMT modification/access times and Unix UID/GID"; static ZCONST char Far efIZnouid[] = "GMT modification/access times only"; static ZCONST char Far NoFileComment[] = "\n There is no file comment.\n"; static ZCONST char Far FileCommBegin[] = "\n\ ------------------------- file comment begins ----------------------------\n"; static ZCONST char Far FileCommEnd[] = "\ -------------------------- file comment ends -----------------------------\n"; /* zi_time() strings */ static ZCONST char Far BogusFmt[] = "%03d"; static ZCONST char Far shtYMDHMTime[] = "%02u-%s-%02u %02u:%02u"; static ZCONST char Far lngYMDHMSTime[] = "%u %s %u %02u:%02u:%02u"; static ZCONST char Far DecimalTime[] = "%04u%02u%02u.%02u%02u%02u"; #ifdef USE_EF_UT_TIME static ZCONST char Far lngYMDHMSTimeError[] = "???? ??? ?? ??:??:??"; #endif #ifndef WINDLL /************************/ /* Function zi_opts() */ /************************/ int zi_opts(__G__ pargc, pargv) int *pargc; char ***pargv; __GDEF { char **argv, *s; int argc, c, error=FALSE, negative=0; int hflag_slmv=TRUE, hflag_2=FALSE; /* diff options => diff defaults */ int tflag_slm=TRUE, tflag_2v=FALSE; int explicit_h=FALSE, explicit_t=FALSE; #ifdef MACOS uO.lflag = LFLAG; /* reset default on each call */ #endif G.extract_flag = FALSE; /* zipinfo does not extract to disk */ argc = *pargc; argv = *pargv; while (--argc > 0 && (*++argv)[0] == '-') { s = argv[0] + 1; while ((c = *s++) != 0) { /* "!= 0": prevent Turbo C warning */ switch (c) { case '-': ++negative; break; case '1': /* shortest listing: JUST filenames */ if (negative) uO.lflag = -2, negative = 0; else uO.lflag = 1; break; case '2': /* just filenames, plus headers if specified */ if (negative) uO.lflag = -2, negative = 0; else uO.lflag = 2; break; #ifndef CMS_MVS case ('C'): /* -C: match filenames case-insensitively */ if (negative) uO.C_flag = FALSE, negative = 0; else uO.C_flag = TRUE; break; #endif /* !CMS_MVS */ case 'h': /* header line */ if (negative) hflag_2 = hflag_slmv = FALSE, negative = 0; else { hflag_2 = hflag_slmv = explicit_h = TRUE; if (uO.lflag == -1) uO.lflag = 0; } break; case 'l': /* longer form of "ls -l" type listing */ if (negative) uO.lflag = -2, negative = 0; else uO.lflag = 5; break; case 'm': /* medium form of "ls -l" type listing */ if (negative) uO.lflag = -2, negative = 0; else uO.lflag = 4; break; #ifdef MORE case 'M': /* send output through built-in "more" */ if (negative) G.M_flag = FALSE, negative = 0; else G.M_flag = TRUE; break; #endif case 's': /* default: shorter "ls -l" type listing */ if (negative) uO.lflag = -2, negative = 0; else uO.lflag = 3; break; case 't': /* totals line */ if (negative) tflag_2v = tflag_slm = FALSE, negative = 0; else { tflag_2v = tflag_slm = explicit_t = TRUE; if (uO.lflag == -1) uO.lflag = 0; } break; case ('T'): /* use (sortable) decimal time format */ if (negative) uO.T_flag = FALSE, negative = 0; else uO.T_flag = TRUE; break; #ifdef UNICODE_SUPPORT case ('U'): /* escape UTF-8, or disable UTF-8 support */ if (negative) { uO.U_flag = MAX(uO.U_flag-negative,0); negative = 0; } else uO.U_flag++; break; #endif /* UNICODE_SUPPORT */ case 'v': /* turbo-verbose listing */ if (negative) uO.lflag = -2, negative = 0; else uO.lflag = 10; break; #ifdef WILD_STOP_AT_DIR case ('W'): /* Wildcard interpretation (stop at '/'?) */ if (negative) uO.W_flag = FALSE, negative = 0; else uO.W_flag = TRUE; break; #endif /* WILD_STOP_AT_DIR */ case 'z': /* print zipfile comment */ if (negative) uO.zflag = negative = 0; else uO.zflag = 1; break; case 'Z': /* ZipInfo mode: ignore */ break; default: error = TRUE; break; } } } if ((argc-- == 0) || error) { *pargc = argc; *pargv = argv; return USAGE(error); } #ifdef MORE if (G.M_flag && !isatty(1)) /* stdout redirected: "more" func useless */ G.M_flag = 0; #endif /* if no listing options given (or all negated), or if only -h/-t given * with individual files specified, use default listing format */ if ((uO.lflag < 0) || ((argc > 0) && (uO.lflag == 0))) uO.lflag = LFLAG; /* set header and totals flags to default or specified values */ switch (uO.lflag) { case 0: /* 0: can only occur if either -t or -h explicitly given; */ case 2: /* therefore set both flags equal to normally false value */ uO.hflag = hflag_2; uO.tflag = tflag_2v; break; case 1: /* only filenames, *always* */ uO.hflag = FALSE; uO.tflag = FALSE; uO.zflag = FALSE; break; case 3: case 4: case 5: uO.hflag = ((argc > 0) && !explicit_h)? FALSE : hflag_slmv; uO.tflag = ((argc > 0) && !explicit_t)? FALSE : tflag_slm; break; case 10: uO.hflag = hflag_slmv; uO.tflag = tflag_2v; break; } *pargc = argc; *pargv = argv; return 0; } /* end function zi_opts() */ #endif /* !WINDLL */ /*******************************/ /* Function zi_end_central() */ /*******************************/ void zi_end_central(__G) __GDEF { /*--------------------------------------------------------------------------- Print out various interesting things about the zipfile. ---------------------------------------------------------------------------*/ if (uO.lflag > 9) { /* verbose format */ Info(slide, 0, ((char *)slide, LoadFarString(EndCentDirRec))); Info(slide, 0, ((char *)slide, LoadFarString(LineSeparators))); Info(slide, 0, ((char *)slide, LoadFarString(ZipFSizeVerbose), FmZofft(G.ziplen, "11", NULL), FmZofft(G.ziplen, FZOFFT_HEX_DOT_WID, "X"))); Info(slide, 0, ((char *)slide, LoadFarString(ActOffsetCentDir), FmZofft(G.real_ecrec_offset, "11", "u"), FmZofft(G.real_ecrec_offset, FZOFFT_HEX_DOT_WID, "X"), FmZofft(G.expect_ecrec_offset, "11", "u"), FmZofft(G.expect_ecrec_offset, FZOFFT_HEX_DOT_WID, "X"))); if (G.ecrec.number_this_disk == 0) { Info(slide, 0, ((char *)slide, LoadFarString(SinglePartArchive1), FmZofft(G.ecrec.total_entries_central_dir, NULL, "u"), (G.ecrec.total_entries_central_dir == 1)? "entry" : "entries", FmZofft(G.ecrec.size_central_directory, NULL, "u"), FmZofft(G.ecrec.size_central_directory, FZOFFT_HEX_DOT_WID, "X"))); Info(slide, 0, ((char *)slide, LoadFarString(SinglePartArchive2), FmZofft(G.ecrec.offset_start_central_directory, NULL, "u"), FmZofft(G.ecrec.offset_start_central_directory, FZOFFT_HEX_DOT_WID, "X"))); } else { Info(slide, 0, ((char *)slide, LoadFarString(MultiPartArchive1), (ulg)(G.ecrec.number_this_disk + 1), (ulg)(G.ecrec.num_disk_start_cdir + 1))); Info(slide, 0, ((char *)slide, LoadFarString(MultiPartArchive2), FmZofft(G.ecrec.offset_start_central_directory, NULL, "u"), FmZofft(G.ecrec.offset_start_central_directory, FZOFFT_HEX_DOT_WID, "X"), FmZofft(G.ecrec.size_central_directory, NULL, "u"), FmZofft(G.ecrec.size_central_directory, FZOFFT_HEX_DOT_WID, "X"))); Info(slide, 0, ((char *)slide, LoadFarString(MultiPartArchive3), FmZofft(G.ecrec.num_entries_centrl_dir_ths_disk, NULL, "u"), (G.ecrec.num_entries_centrl_dir_ths_disk == 1)? "is" : "are", FmZofft(G.ecrec.total_entries_central_dir, NULL, "u"), (G.ecrec.total_entries_central_dir == 1) ? "entry" : "entries")); } } else if (uO.hflag) { /* print zip file size and number of contained entries: */ Info(slide, 0, ((char *)slide, LoadFarString(ZipInfHeader2), FmZofft(G.ziplen, NULL, NULL), FmZofft(G.ecrec.total_entries_central_dir, NULL, "u"))); } } /* end function zi_end_central() */ /************************/ /* Function zipinfo() */ /************************/ int zipinfo(__G) /* return PK-type error code */ __GDEF { int do_this_file=FALSE, error, error_in_archive=PK_COOL; int *fn_matched=NULL, *xn_matched=NULL; ulg j, members=0L; zusz_t tot_csize=0L, tot_ucsize=0L; zusz_t endprev; /* buffers end of previous entry for zi_long()'s check * of extra bytes */ /*--------------------------------------------------------------------------- Malloc space for check on unmatched filespecs (no big deal if one or both are NULL). ---------------------------------------------------------------------------*/ if (G.filespecs > 0 && (fn_matched=(int *)malloc(G.filespecs*sizeof(int))) != NULL) for (j = 0; j < G.filespecs; ++j) fn_matched[j] = FALSE; if (G.xfilespecs > 0 && (xn_matched=(int *)malloc(G.xfilespecs*sizeof(int))) != NULL) for (j = 0; j < G.xfilespecs; ++j) xn_matched[j] = FALSE; /*--------------------------------------------------------------------------- Set file pointer to start of central directory, then loop through cen- tral directory entries. Check that directory-entry signature bytes are actually there (just a precaution), then process the entry. We know the entire central directory is on this disk: we wouldn't have any of this information unless the end-of-central-directory record was on this disk, and we wouldn't have gotten to this routine unless this is also the disk on which the central directory starts. In practice, this had better be the *only* disk in the archive, but maybe someday we'll add multi-disk support. ---------------------------------------------------------------------------*/ uO.L_flag = FALSE; /* zipinfo mode: never convert name to lowercase */ G.pInfo = G.info; /* (re-)initialize, (just to make sure) */ G.pInfo->textmode = 0; /* so one can read on screen (is this ever used?) */ /* reset endprev for new zipfile; account for multi-part archives (?) */ endprev = (G.crec.relative_offset_local_header == 4L)? 4L : 0L; for (j = 1L;; j++) { if (readbuf(__G__ G.sig, 4) == 0) { error_in_archive = PK_EOF; break; } if (memcmp(G.sig, central_hdr_sig, 4)) { /* is it a CentDir entry? */ /* no new central directory entry * -> is the number of processed entries compatible with the * number of entries as stored in the end_central record? */ if (((j - 1) & (ulg)(G.ecrec.have_ecr64 ? MASK_ZUCN64 : MASK_ZUCN16)) == (ulg)G.ecrec.total_entries_central_dir) { /* "j modulus 4T/64k" matches the reported 64/16-bit-unsigned * number of directory entries -> probably, the regular * end of the central directory has been reached */ break; } else { Info(slide, 0x401, ((char *)slide, LoadFarString(CentSigMsg), j)); Info(slide, 0x401, ((char *)slide, LoadFarString(ReportMsg))); error_in_archive = PK_BADERR; /* sig not found */ break; } } /* process_cdir_file_hdr() sets pInfo->hostnum, pInfo->lcflag, ...: */ if ((error = process_cdir_file_hdr(__G)) != PK_COOL) { error_in_archive = error; /* only PK_EOF defined */ break; } if ((error = do_string(__G__ G.crec.filename_length, DS_FN)) != PK_COOL) { if (error > error_in_archive) error_in_archive = error; if (error > PK_WARN) /* fatal */ break; } if (!G.process_all_files) { /* check if specified on command line */ unsigned i; if (G.filespecs == 0) do_this_file = TRUE; else { /* check if this entry matches an `include' argument */ do_this_file = FALSE; for (i = 0; i < G.filespecs; i++) if (match(G.filename, G.pfnames[i], uO.C_flag WISEP)) { do_this_file = TRUE; if (fn_matched) fn_matched[i] = TRUE; break; /* found match, so stop looping */ } } if (do_this_file) { /* check if this is an excluded file */ for (i = 0; i < G.xfilespecs; i++) if (match(G.filename, G.pxnames[i], uO.C_flag WISEP)) { do_this_file = FALSE; /* ^-- ignore case in match */ if (xn_matched) xn_matched[i] = TRUE; break; } } } /*----------------------------------------------------------------------- If current file was specified on command line, or if no names were specified, do the listing for this file. Otherwise, get rid of the file comment and go back for the next file. -----------------------------------------------------------------------*/ if (G.process_all_files || do_this_file) { /* Read the extra field, if any. The extra field info is required * for resolving the Zip64 sizes/offsets and may be used in more * analysis of the entry below. */ if ((error = do_string(__G__ G.crec.extra_field_length, EXTRA_FIELD)) != 0) { if (G.extra_field != NULL) { free(G.extra_field); G.extra_field = NULL; } error_in_archive = error; /* The premature return in case of a "fatal" error (PK_EOF) is * delayed until we analyze the extra field contents. * This allows us to display all the other info that has been * successfully read in. */ } switch (uO.lflag) { case 1: case 2: fnprint(__G); SKIP_(G.crec.file_comment_length) break; case 3: case 4: case 5: if ((error = zi_short(__G)) != PK_COOL) { error_in_archive = error; /* might be warning */ } break; case 10: Info(slide, 0, ((char *)slide, LoadFarString(CentralDirEntry), j)); if ((error = zi_long(__G__ &endprev, error_in_archive)) != PK_COOL) { error_in_archive = error; /* might be warning */ } break; default: SKIP_(G.crec.file_comment_length) break; } /* end switch (lflag) */ if (error > PK_WARN) /* fatal */ break; tot_csize += G.crec.csize; tot_ucsize += G.crec.ucsize; if (G.crec.general_purpose_bit_flag & 1) tot_csize -= 12; /* don't count encryption header */ ++members; #ifdef DLL if ((G.statreportcb != NULL) && (*G.statreportcb)(__G__ UZ_ST_FINISH_MEMBER, G.zipfn, G.filename, (zvoid *)&G.crec.ucsize)) { /* cancel operation by user request */ error_in_archive = IZ_CTRLC; break; } #endif #ifdef MACOS /* MacOS is no preemptive OS, thus call event-handling by hand */ UserStop(); #endif } else { /* not listing this file */ SKIP_(G.crec.extra_field_length) SKIP_(G.crec.file_comment_length) if (endprev != 0) endprev = 0; } /* end if (list member?) */ } /* end for-loop (j: member files) */ /*--------------------------------------------------------------------------- Check that we actually found requested files; if so, print totals. ---------------------------------------------------------------------------*/ if ((error_in_archive <= PK_WARN) && uO.tflag) { char *sgn = ""; int cfactor = ratio(tot_ucsize, tot_csize); if (cfactor < 0) { sgn = "-"; cfactor = -cfactor; } Info(slide, 0, ((char *)slide, LoadFarString(ZipfileStats), members, (members==1L)? nullStr:PlurSufx, FmZofft(tot_ucsize, NULL, "u"), FmZofft(tot_csize, NULL, "u"), sgn, cfactor/10, cfactor%10)); } /*--------------------------------------------------------------------------- Check for unmatched filespecs on command line and print warning if any found. ---------------------------------------------------------------------------*/ if (fn_matched) { if (error_in_archive <= PK_WARN) for (j = 0; j < G.filespecs; ++j) if (!fn_matched[j]) Info(slide, 0x401, ((char *)slide, LoadFarString(FilenameNotMatched), G.pfnames[j])); free((zvoid *)fn_matched); } if (xn_matched) { if (error_in_archive <= PK_WARN) for (j = 0; j < G.xfilespecs; ++j) if (!xn_matched[j]) Info(slide, 0x401, ((char *)slide, LoadFarString(ExclFilenameNotMatched), G.pxnames[j])); free((zvoid *)xn_matched); } /* Skip the following checks in case of a premature listing break. */ if (error_in_archive <= PK_WARN) { /*--------------------------------------------------------------------------- Double check that we're back at the end-of-central-directory record. ---------------------------------------------------------------------------*/ if ( (memcmp(G.sig, (G.ecrec.have_ecr64 ? end_central64_sig : end_central_sig), 4) != 0) && (!G.ecrec.is_zip64_archive) && (memcmp(G.sig, end_central_sig, 4) != 0) ) { /* just to make sure again */ Info(slide, 0x401, ((char *)slide, LoadFarString(EndSigMsg))); error_in_archive = PK_WARN; /* didn't find sig */ } /* Set specific return code when no files have been found. */ if (members == 0L && error_in_archive <= PK_WARN) error_in_archive = PK_FIND; if (uO.lflag >= 10) (*G.message)((zvoid *)&G, (uch *)"\n", 1L, 0); } return error_in_archive; } /* end function zipinfo() */ /************************/ /* Function zi_long() */ /************************/ static int zi_long(__G__ pEndprev, error_in_archive) /* return PK-type error code */ __GDEF zusz_t *pEndprev; /* for zi_long() check of extra bytes */ int error_in_archive; /* may signal premature return */ { #ifdef USE_EF_UT_TIME iztimes z_utime; #endif int error; unsigned hostnum, hostver, extnum, extver, methid, methnum, xattr; char workspace[12], attribs[22]; ZCONST char *varmsg_str; char unkn[16]; static ZCONST char Far *os[NUM_HOSTS] = { OS_FAT, OS_Amiga, OS_VMS, OS_Unix, OS_VMCMS, OS_AtariST, OS_HPFS, OS_Macintosh, OS_ZSystem, OS_CPM, OS_TOPS20, OS_NTFS, OS_QDOS, OS_Acorn, OS_VFAT, OS_MVS, OS_BeOS, OS_Tandem, OS_Theos, OS_MacDarwin, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, OS_AtheOS }; static ZCONST char Far *method[NUM_METHODS] = { MthdNone, MthdShrunk, MthdRedF1, MthdRedF2, MthdRedF3, MthdRedF4, MthdImplode, MthdToken, MthdDeflate, MthdDeflat64, MthdDCLImplode, MthdBZip2, MthdLZMA, MthdTerse, MthdLZ77, MthdWavPack, MthdPPMd }; static ZCONST char Far *dtypelng[4] = { DeflNorm, DeflMax, DeflFast, DeflSFast }; /*--------------------------------------------------------------------------- Check whether there's any extra space inside the zipfile. If *pEndprev is zero, it's probably a signal that OS/2 extra fields are involved (with unknown compressed size). We won't worry about prepended junk here... ---------------------------------------------------------------------------*/ if (G.crec.relative_offset_local_header != *pEndprev && *pEndprev > 0L) { /* GRR DEBUG Info(slide, 0, ((char *)slide, " [crec.relative_offset_local_header = %lu, endprev = %lu]\n", G.crec.relative_offset_local_header, *pEndprev)); */ Info(slide, 0, ((char *)slide, LoadFarString(ExtraBytesPreceding), FmZofft((G.crec.relative_offset_local_header - (*pEndprev)), NULL, NULL))); } /* calculate endprev for next time around (problem: extra fields may * differ in length between local and central-directory records) */ *pEndprev = G.crec.relative_offset_local_header + (4L + LREC_SIZE) + G.crec.filename_length + G.crec.extra_field_length + G.crec.csize; /*--------------------------------------------------------------------------- Print out various interesting things about the compressed file. ---------------------------------------------------------------------------*/ hostnum = (unsigned)(G.pInfo->hostnum); hostver = (unsigned)(G.pInfo->hostver); extnum = (unsigned)MIN(G.crec.version_needed_to_extract[1], NUM_HOSTS); extver = (unsigned)G.crec.version_needed_to_extract[0]; methid = (unsigned)G.crec.compression_method; methnum = find_compr_idx(G.crec.compression_method); (*G.message)((zvoid *)&G, (uch *)" ", 2L, 0); fnprint(__G); Info(slide, 0, ((char *)slide, LoadFarString(LocalHeaderOffset), FmZofft(G.crec.relative_offset_local_header, NULL, "u"), FmZofft(G.crec.relative_offset_local_header, FZOFFT_HEX_DOT_WID, "X"))); if (hostnum >= NUM_HOSTS) { sprintf(unkn, LoadFarString(UnknownNo), (int)G.crec.version_made_by[1]); varmsg_str = unkn; } else { varmsg_str = LoadFarStringSmall(os[hostnum]); #ifdef OLD_THEOS_EXTRA if (hostnum == FS_VFAT_ && hostver == 20) { /* entry made by old non-official THEOS port zip archive */ varmsg_str = LoadFarStringSmall(OS_TheosOld); } #endif /* OLD_THEOS_EXTRA */ } Info(slide, 0, ((char *)slide, LoadFarString(HostOS), varmsg_str)); Info(slide, 0, ((char *)slide, LoadFarString(EncodeSWVer), hostver/10, hostver%10)); if ((extnum >= NUM_HOSTS) || (os[extnum] == NULL)) { sprintf(unkn, LoadFarString(UnknownNo), (int)G.crec.version_needed_to_extract[1]); varmsg_str = unkn; } else { varmsg_str = LoadFarStringSmall(os[extnum]); } Info(slide, 0, ((char *)slide, LoadFarString(MinOSCompReq), varmsg_str)); Info(slide, 0, ((char *)slide, LoadFarString(MinSWVerReq), extver/10, extver%10)); if (methnum >= NUM_METHODS) { sprintf(unkn, LoadFarString(UnknownNo), G.crec.compression_method); varmsg_str = unkn; } else { varmsg_str = LoadFarStringSmall(method[methnum]); } Info(slide, 0, ((char *)slide, LoadFarString(CompressMethod), varmsg_str)); if (methid == IMPLODED) { Info(slide, 0, ((char *)slide, LoadFarString(SlideWindowSizeImplode), (G.crec.general_purpose_bit_flag & 2)? '8' : '4')); Info(slide, 0, ((char *)slide, LoadFarString(ShannonFanoTrees), (G.crec.general_purpose_bit_flag & 4)? '3' : '2')); } else if (methid == DEFLATED || methid == ENHDEFLATED) { ush dnum=(ush)((G.crec.general_purpose_bit_flag>>1) & 3); Info(slide, 0, ((char *)slide, LoadFarString(CompressSubtype), LoadFarStringSmall(dtypelng[dnum]))); } Info(slide, 0, ((char *)slide, LoadFarString(FileSecurity), (G.crec.general_purpose_bit_flag & 1) ? nullStr : "not ")); Info(slide, 0, ((char *)slide, LoadFarString(ExtendedLocalHdr), (G.crec.general_purpose_bit_flag & 8) ? "yes" : "no")); /* print upper 3 bits for amusement? */ /* For printing of date & time, a "char d_t_buf[21]" is required. * To save stack space, we reuse the "char attribs[22]" buffer which * is not used yet. */ # define d_t_buf attribs zi_time(__G__ &G.crec.last_mod_dos_datetime, NULL, d_t_buf); Info(slide, 0, ((char *)slide, LoadFarString(FileModDate), d_t_buf)); #ifdef USE_EF_UT_TIME if (G.extra_field && #ifdef IZ_CHECK_TZ G.tz_is_valid && #endif (ef_scan_for_izux(G.extra_field, G.crec.extra_field_length, 1, G.crec.last_mod_dos_datetime, &z_utime, NULL) & EB_UT_FL_MTIME)) { TIMET_TO_NATIVE(z_utime.mtime) /* NOP unless MSC 7.0 or Macintosh */ d_t_buf[0] = (char)0; /* signal "show local time" */ zi_time(__G__ &G.crec.last_mod_dos_datetime, &(z_utime.mtime), d_t_buf); Info(slide, 0, ((char *)slide, LoadFarString(UT_FileModDate), d_t_buf, LoadFarStringSmall(LocalTime))); #ifndef NO_GMTIME d_t_buf[0] = (char)1; /* signal "show UTC (GMT) time" */ zi_time(__G__ &G.crec.last_mod_dos_datetime, &(z_utime.mtime), d_t_buf); Info(slide, 0, ((char *)slide, LoadFarString(UT_FileModDate), d_t_buf, LoadFarStringSmall(GMTime))); #endif /* !NO_GMTIME */ } #endif /* USE_EF_UT_TIME */ Info(slide, 0, ((char *)slide, LoadFarString(CRC32Value), G.crec.crc32)); Info(slide, 0, ((char *)slide, LoadFarString(CompressedFileSize), FmZofft(G.crec.csize, NULL, "u"))); Info(slide, 0, ((char *)slide, LoadFarString(UncompressedFileSize), FmZofft(G.crec.ucsize, NULL, "u"))); Info(slide, 0, ((char *)slide, LoadFarString(FilenameLength), G.crec.filename_length)); Info(slide, 0, ((char *)slide, LoadFarString(ExtraFieldLength), G.crec.extra_field_length)); Info(slide, 0, ((char *)slide, LoadFarString(FileCommentLength), G.crec.file_comment_length)); Info(slide, 0, ((char *)slide, LoadFarString(FileDiskNum), (ulg)(G.crec.disk_number_start + 1))); Info(slide, 0, ((char *)slide, LoadFarString(ApparentFileType), (G.crec.internal_file_attributes & 1)? "text" : (G.crec.internal_file_attributes & 2)? "ebcdic" : "binary")); /* changed to accept EBCDIC */ #ifdef ATARI printf(" external file attributes (hex): %.8lx\n", G.crec.external_file_attributes); #endif xattr = (unsigned)((G.crec.external_file_attributes >> 16) & 0xFFFF); if (hostnum == VMS_) { char *p=attribs, *q=attribs+1; int i, j, k; for (k = 0; k < 12; ++k) workspace[k] = 0; if (xattr & VMS_IRUSR) workspace[0] = 'R'; if (xattr & VMS_IWUSR) { workspace[1] = 'W'; workspace[3] = 'D'; } if (xattr & VMS_IXUSR) workspace[2] = 'E'; if (xattr & VMS_IRGRP) workspace[4] = 'R'; if (xattr & VMS_IWGRP) { workspace[5] = 'W'; workspace[7] = 'D'; } if (xattr & VMS_IXGRP) workspace[6] = 'E'; if (xattr & VMS_IROTH) workspace[8] = 'R'; if (xattr & VMS_IWOTH) { workspace[9] = 'W'; workspace[11] = 'D'; } if (xattr & VMS_IXOTH) workspace[10] = 'E'; *p++ = '('; for (k = j = 0; j < 3; ++j) { /* loop over groups of permissions */ for (i = 0; i < 4; ++i, ++k) /* loop over perms within a group */ if (workspace[k]) *p++ = workspace[k]; *p++ = ','; /* group separator */ if (j == 0) while ((*p++ = *q++) != ',') ; /* system, owner perms are same */ } *p-- = '\0'; *p = ')'; /* overwrite last comma */ Info(slide, 0, ((char *)slide, LoadFarString(VMSFileAttributes), xattr, attribs)); } else if (hostnum == AMIGA_) { switch (xattr & AMI_IFMT) { case AMI_IFDIR: attribs[0] = 'd'; break; case AMI_IFREG: attribs[0] = '-'; break; default: attribs[0] = '?'; break; } attribs[1] = (xattr & AMI_IHIDDEN)? 'h' : '-'; attribs[2] = (xattr & AMI_ISCRIPT)? 's' : '-'; attribs[3] = (xattr & AMI_IPURE)? 'p' : '-'; attribs[4] = (xattr & AMI_IARCHIVE)? 'a' : '-'; attribs[5] = (xattr & AMI_IREAD)? 'r' : '-'; attribs[6] = (xattr & AMI_IWRITE)? 'w' : '-'; attribs[7] = (xattr & AMI_IEXECUTE)? 'e' : '-'; attribs[8] = (xattr & AMI_IDELETE)? 'd' : '-'; attribs[9] = 0; /* better dlm the string */ Info(slide, 0, ((char *)slide, LoadFarString(AmigaFileAttributes), xattr, attribs)); } else if (hostnum == THEOS_) { ZCONST char Far *fpFtyp; switch (xattr & THS_IFMT) { case THS_IFLIB: fpFtyp = TheosFTypLib; break; case THS_IFDIR: fpFtyp = TheosFTypDir; break; case THS_IFREG: fpFtyp = TheosFTypReg; break; case THS_IFREL: fpFtyp = TheosFTypRel; break; case THS_IFKEY: fpFtyp = TheosFTypKey; break; case THS_IFIND: fpFtyp = TheosFTypInd; break; case THS_IFR16: fpFtyp = TheosFTypR16; break; case THS_IFP16: fpFtyp = TheosFTypP16; break; case THS_IFP32: fpFtyp = TheosFTypP32; break; default: fpFtyp = TheosFTypUkn; break; } strcpy(attribs, LoadFarStringSmall(fpFtyp)); attribs[12] = (xattr & THS_INHID) ? '.' : 'H'; attribs[13] = (xattr & THS_IMODF) ? '.' : 'M'; attribs[14] = (xattr & THS_IWOTH) ? '.' : 'W'; attribs[15] = (xattr & THS_IROTH) ? '.' : 'R'; attribs[16] = (xattr & THS_IEUSR) ? '.' : 'E'; attribs[17] = (xattr & THS_IXUSR) ? '.' : 'X'; attribs[18] = (xattr & THS_IWUSR) ? '.' : 'W'; attribs[19] = (xattr & THS_IRUSR) ? '.' : 'R'; attribs[20] = 0; Info(slide, 0, ((char *)slide, LoadFarString(TheosFileAttributes), xattr, attribs)); #ifdef OLD_THEOS_EXTRA } else if (hostnum == FS_VFAT_ && hostver == 20) { /* process old non-official THEOS port zip archive */ ZCONST char Far *fpFtyp; switch (xattr & _THS_IFMT) { case _THS_IFLIB: fpFtyp = TheosFTypLib; break; case _THS_IFDIR: fpFtyp = TheosFTypDir; break; case _THS_IFREG: fpFtyp = TheosFTypReg; break; case _THS_IODRC: fpFtyp = TheosFTypRel; break; case _THS_IOKEY: fpFtyp = TheosFTypKey; break; case _THS_IOIND: fpFtyp = TheosFTypInd; break; case _THS_IOPRG: fpFtyp = TheosFTypR16; break; case _THS_IO286: fpFtyp = TheosFTypP16; break; case _THS_IO386: fpFtyp = TheosFTypP32; break; default: fpFtyp = TheosFTypUkn; break; } strcpy(attribs, LoadFarStringSmall(fpFtyp)); attribs[12] = (xattr & _THS_HIDDN) ? 'H' : '.'; attribs[13] = (xattr & _THS_IXOTH) ? '.' : 'X'; attribs[14] = (xattr & _THS_IWOTH) ? '.' : 'W'; attribs[15] = (xattr & _THS_IROTH) ? '.' : 'R'; attribs[16] = (xattr & _THS_IEUSR) ? '.' : 'E'; attribs[17] = (xattr & _THS_IXUSR) ? '.' : 'X'; attribs[18] = (xattr & _THS_IWUSR) ? '.' : 'W'; attribs[19] = (xattr & _THS_IRUSR) ? '.' : 'R'; attribs[20] = 0; Info(slide, 0, ((char *)slide, LoadFarString(TheosFileAttributes), xattr, attribs)); #endif /* OLD_THEOS_EXTRA */ } else if ((hostnum != FS_FAT_) && (hostnum != FS_HPFS_) && (hostnum != FS_NTFS_) && (hostnum != FS_VFAT_) && (hostnum != ACORN_) && (hostnum != VM_CMS_) && (hostnum != MVS_)) { /* assume Unix-like */ switch ((unsigned)(xattr & UNX_IFMT)) { case (unsigned)UNX_IFDIR: attribs[0] = 'd'; break; case (unsigned)UNX_IFREG: attribs[0] = '-'; break; case (unsigned)UNX_IFLNK: attribs[0] = 'l'; break; case (unsigned)UNX_IFBLK: attribs[0] = 'b'; break; case (unsigned)UNX_IFCHR: attribs[0] = 'c'; break; case (unsigned)UNX_IFIFO: attribs[0] = 'p'; break; case (unsigned)UNX_IFSOCK: attribs[0] = 's'; break; default: attribs[0] = '?'; break; } attribs[1] = (xattr & UNX_IRUSR)? 'r' : '-'; attribs[4] = (xattr & UNX_IRGRP)? 'r' : '-'; attribs[7] = (xattr & UNX_IROTH)? 'r' : '-'; attribs[2] = (xattr & UNX_IWUSR)? 'w' : '-'; attribs[5] = (xattr & UNX_IWGRP)? 'w' : '-'; attribs[8] = (xattr & UNX_IWOTH)? 'w' : '-'; if (xattr & UNX_IXUSR) attribs[3] = (xattr & UNX_ISUID)? 's' : 'x'; else attribs[3] = (xattr & UNX_ISUID)? 'S' : '-'; /* S = undefined */ if (xattr & UNX_IXGRP) attribs[6] = (xattr & UNX_ISGID)? 's' : 'x'; /* == UNX_ENFMT */ else attribs[6] = (xattr & UNX_ISGID)? 'l' : '-'; if (xattr & UNX_IXOTH) attribs[9] = (xattr & UNX_ISVTX)? 't' : 'x'; /* "sticky bit" */ else attribs[9] = (xattr & UNX_ISVTX)? 'T' : '-'; /* T = undefined */ attribs[10] = 0; Info(slide, 0, ((char *)slide, LoadFarString(UnixFileAttributes), xattr, attribs)); } else { Info(slide, 0, ((char *)slide, LoadFarString(NonMSDOSFileAttributes), G.crec.external_file_attributes >> 8)); } /* endif (hostnum: external attributes format) */ if ((xattr=(unsigned)(G.crec.external_file_attributes & 0xFF)) == 0) Info(slide, 0, ((char *)slide, LoadFarString(MSDOSFileAttributes), xattr)); else if (xattr == 1) Info(slide, 0, ((char *)slide, LoadFarString(MSDOSFileAttributesRO), xattr)); else Info(slide, 0, ((char *)slide, LoadFarString(MSDOSFileAttributesAlpha), xattr, (xattr&1)? "rdo " : nullStr, (xattr&2)? "hid " : nullStr, (xattr&4)? "sys " : nullStr, (xattr&8)? "lab " : nullStr, (xattr&16)? "dir " : nullStr, (xattr&32)? "arc " : nullStr, (xattr&64)? "lnk " : nullStr, (xattr&128)? "exe" : nullStr)); /*--------------------------------------------------------------------------- Analyze the extra field, if any, and print the file comment, if any (the filename has already been printed, above). That finishes up this file entry... ---------------------------------------------------------------------------*/ if (G.crec.extra_field_length > 0) { uch *ef_ptr = G.extra_field; ush ef_len = G.crec.extra_field_length; ush eb_id, eb_datalen; ZCONST char Far *ef_fieldname; if (error_in_archive > PK_WARN) /* fatal: can't continue */ /* delayed "fatal error" return from extra field reading */ return error_in_archive; if (G.extra_field == (uch *)NULL) return PK_ERR; /* not consistent with crec length */ Info(slide, 0, ((char *)slide, LoadFarString(ExtraFields))); while (ef_len >= EB_HEADSIZE) { eb_id = makeword(&ef_ptr[EB_ID]); eb_datalen = makeword(&ef_ptr[EB_LEN]); ef_ptr += EB_HEADSIZE; ef_len -= EB_HEADSIZE; if (eb_datalen > (ush)ef_len) { Info(slide, 0x421, ((char *)slide, LoadFarString(ExtraFieldTrunc), eb_id, eb_datalen, ef_len)); eb_datalen = ef_len; } switch (eb_id) { case EF_PKSZ64: ef_fieldname = efPKSZ64; if ((G.crec.relative_offset_local_header & (~(zusz_t)0xFFFFFFFFL)) != 0) { /* Subtract the size of the 64bit local offset from the local e.f. size, local Z64 e.f. block has no offset; when only local offset present, the entire local PKSZ64 block is missing. */ *pEndprev -= (eb_datalen == 8 ? 12 : 8); } break; case EF_AV: ef_fieldname = efAV; break; case EF_OS2: ef_fieldname = efOS2; break; case EF_ACL: ef_fieldname = efACL; break; case EF_NTSD: ef_fieldname = efNTSD; break; case EF_PKVMS: ef_fieldname = efPKVMS; break; case EF_IZVMS: ef_fieldname = efIZVMS; break; case EF_PKW32: ef_fieldname = efPKWin32; break; case EF_PKUNIX: ef_fieldname = efPKUnix; break; case EF_IZUNIX: ef_fieldname = efIZUnix; if (hostnum == UNIX_ && *pEndprev > 0L) *pEndprev += 4L; /* also have UID/GID in local copy */ break; case EF_IZUNIX2: ef_fieldname = efIZUnix2; if (*pEndprev > 0L) *pEndprev += 4L; /* 4 byte UID/GID in local copy */ break; case EF_IZUNIX3: ef_fieldname = efIZUnix3; #if 0 if (*pEndprev > 0L) *pEndprev += 4L; /* 4 byte UID/GID in local copy */ #endif break; case EF_TIME: ef_fieldname = efTime; break; case EF_UNIPATH: ef_fieldname = efU8Path; break; case EF_UNICOMNT: ef_fieldname = efU8Commnt; break; case EF_MAC3: ef_fieldname = efMac3; break; case EF_JLMAC: ef_fieldname = efJLMac; break; case EF_ZIPIT: ef_fieldname = efZipIt; break; case EF_ZIPIT2: ef_fieldname = efZipIt2; break; case EF_VMCMS: ef_fieldname = efVMCMS; break; case EF_MVS: ef_fieldname = efMVS; break; case EF_ATHEOS: ef_fieldname = efAtheOS; break; case EF_BEOS: ef_fieldname = efBeOS; break; case EF_QDOS: ef_fieldname = efQDOS; break; case EF_AOSVS: ef_fieldname = efAOSVS; break; case EF_SPARK: /* from RISC OS */ ef_fieldname = efSpark; break; case EF_MD5: ef_fieldname = efMD5; break; case EF_ASIUNIX: ef_fieldname = efASiUnix; break; case EF_TANDEM: ef_fieldname = efTandem; break; case EF_SMARTZIP: ef_fieldname = efSmartZip; break; case EF_THEOS: #ifdef OLD_THEOS_EXTRA case EF_THEOSO: #endif ef_fieldname = efTheos; break; default: ef_fieldname = efUnknown; break; } Info(slide, 0, ((char *)slide, LoadFarString(ExtraFieldType), eb_id, LoadFarStringSmall(ef_fieldname), eb_datalen)); /* additional, field-specific information: */ switch (eb_id) { case EF_OS2: case EF_ACL: if (eb_datalen >= EB_OS2_HLEN) { if (eb_id == EF_OS2) ef_fieldname = OS2EAs; else ef_fieldname = ACLdata; Info(slide, 0, ((char *)slide, LoadFarString(ef_fieldname), makelong(ef_ptr))); *pEndprev = 0L; /* no clue about csize of local */ } else { goto ef_default_display; } break; case EF_NTSD: if (eb_datalen >= EB_NTSD_C_LEN) { Info(slide, 0, ((char *)slide, LoadFarString(NTSDData), makelong(ef_ptr))); *pEndprev = 0L; /* no clue about csize of local */ } else { goto ef_default_display; } break; case EF_IZVMS: if (eb_datalen >= 8) { char *p, q[8]; unsigned compr = makeword(ef_ptr+EB_IZVMS_FLGS) & EB_IZVMS_BCMASK; *q = '\0'; if (compr > 3) compr = 3; switch (makelong(ef_ptr)) { case 0x42414656: /* "VFAB" */ p = "FAB"; break; case 0x4C4C4156: /* "VALL" */ p = "XABALL"; break; case 0x43484656: /* "VFHC" */ p = "XABFHC"; break; case 0x54414456: /* "VDAT" */ p = "XABDAT"; break; case 0x54445256: /* "VRDT" */ p = "XABRDT"; break; case 0x4F525056: /* "VPRO" */ p = "XABPRO"; break; case 0x59454B56: /* "VKEY" */ p = "XABKEY"; break; case 0x56534D56: /* "VMSV" */ p = "version"; if (eb_datalen >= 16) { /* put termitation first, for A_TO_N() */ q[7] = '\0'; q[0] = ' '; q[1] = '('; strncpy(q+2, (char *)ef_ptr+EB_IZVMS_HLEN, 4); A_TO_N(q+2); q[6] = ')'; } break; default: p = "unknown"; } Info(slide, 0, ((char *)slide, LoadFarString(izVMSdata), LoadFarStringSmall(izVMScomp[compr]), makeword(ef_ptr+EB_IZVMS_UCSIZ), p, q)); } else { goto ef_default_display; } break; case EF_TIME: if (eb_datalen > 0) { char types[80]; int num = 0, len; *types = '\0'; if (*ef_ptr & 1) { strcpy(types, LoadFarString(UTmodification)); ++num; } if (*ef_ptr & 2) { len = strlen(types); if (num) types[len++] = '/'; strcpy(types+len, LoadFarString(UTaccess)); ++num; if (*pEndprev > 0L) *pEndprev += 4L; } if (*ef_ptr & 4) { len = strlen(types); if (num) types[len++] = '/'; strcpy(types+len, LoadFarString(UTcreation)); ++num; if (*pEndprev > 0L) *pEndprev += 4L; } if (num > 0) Info(slide, 0, ((char *)slide, LoadFarString(UTdata), types, num == 1? nullStr : PlurSufx)); } break; case EF_UNIPATH: case EF_UNICOMNT: if (eb_datalen >= 5) { unsigned i, n; ulg name_crc = makelong(ef_ptr+1); if (eb_datalen <= 29) { Info(slide, 0, ((char *)slide, LoadFarString(U8PthCmnComplete), (unsigned)ef_ptr[0], name_crc)); n = eb_datalen; } else { Info(slide, 0, ((char *)slide, LoadFarString(U8PthCmnF24), (unsigned)ef_ptr[0], name_crc)); n = 29; } for (i = 5; i < n; ++i) Info(slide, 0, ((char *)slide, LoadFarString(efFormat), ef_ptr[i])); } else { goto ef_default_display; } break; case EF_MAC3: if (eb_datalen >= EB_MAC3_HLEN) { ulg eb_uc = makelong(ef_ptr); unsigned mac3_flgs = makeword(ef_ptr+EB_FLGS_OFFS); unsigned eb_is_uc = mac3_flgs & EB_M3_FL_UNCMPR; Info(slide, 0, ((char *)slide, LoadFarString(Mac3data), eb_uc, eb_is_uc ? "un" : nullStr)); if (eb_is_uc) { if (*pEndprev > 0L) *pEndprev += makelong(ef_ptr); } else { *pEndprev = 0L; /* no clue about csize of local */ } Info(slide, 0, ((char *)slide, LoadFarString(MacOSMAC3flags), LoadFarStringSmall(mac3_flgs & EB_M3_FL_DATFRK ? MacOS_DF : MacOS_RF), (mac3_flgs & EB_M3_FL_TIME64 ? 64 : 32))); zi_showMacTypeCreator(__G__ &ef_ptr[6]); } else { goto ef_default_display; } break; case EF_ZIPIT2: if (eb_datalen >= 5 && makelong(ef_ptr) == 0x5449505A /* "ZPIT" */) { if (eb_datalen >= 12) { zi_showMacTypeCreator(__G__ &ef_ptr[4]); } } else { goto ef_default_display; } break; case EF_ZIPIT: if (eb_datalen >= 5 && makelong(ef_ptr) == 0x5449505A /* "ZPIT" */) { unsigned fnlen = ef_ptr[4]; if ((unsigned)eb_datalen >= fnlen + (5 + 8)) { uch nullchar = ef_ptr[fnlen+5]; ef_ptr[fnlen+5] = '\0'; /* terminate filename */ A_TO_N(ef_ptr+5); Info(slide, 0, ((char *)slide, LoadFarString(ZipItFname), (char *)ef_ptr+5)); ef_ptr[fnlen+5] = nullchar; zi_showMacTypeCreator(__G__ &ef_ptr[fnlen+5]); } } else { goto ef_default_display; } break; case EF_JLMAC: if (eb_datalen >= 40 && makelong(ef_ptr) == 0x45454C4A /* "JLEE" */) { zi_showMacTypeCreator(__G__ &ef_ptr[4]); Info(slide, 0, ((char *)slide, LoadFarString(MacOSJLEEflags), LoadFarStringSmall(ef_ptr[31] & 1 ? MacOS_DF : MacOS_RF))); } else { goto ef_default_display; } break; case EF_SMARTZIP: if ((eb_datalen == EB_SMARTZIP_HLEN) && makelong(ef_ptr) == 0x70695A64 /* "dZip" */) { char filenameBuf[32]; zi_showMacTypeCreator(__G__ &ef_ptr[4]); memcpy(filenameBuf, &ef_ptr[33], 31); filenameBuf[ef_ptr[32]] = '\0'; A_TO_N(filenameBuf); Info(slide, 0, ((char *)slide, LoadFarString(ZipItFname), filenameBuf)); } else { goto ef_default_display; } break; #ifdef CMS_MVS case EF_VMCMS: case EF_MVS: { char type[100]; Info(slide, 0, ((char *)slide, LoadFarString(VmMvsExtraField), (getVMMVSexfield(type, ef_ptr-EB_HEADSIZE, (unsigned)eb_datalen) > 0)? type : LoadFarStringSmall(VmMvsInvalid))); } break; #endif /* CMS_MVS */ case EF_ATHEOS: case EF_BEOS: if (eb_datalen >= EB_BEOS_HLEN) { ulg eb_uc = makelong(ef_ptr); unsigned eb_is_uc = *(ef_ptr+EB_FLGS_OFFS) & EB_BE_FL_UNCMPR; if (eb_id == EF_ATHEOS) ef_fieldname = AtheOSdata; else ef_fieldname = BeOSdata; Info(slide, 0, ((char *)slide, LoadFarString(ef_fieldname), eb_uc, eb_is_uc ? "un" : nullStr)); if (eb_is_uc) { if (*pEndprev > 0L) *pEndprev += makelong(ef_ptr); } else { *pEndprev = 0L; /* no clue about csize of local */ } } else { goto ef_default_display; } break; case EF_QDOS: if (eb_datalen >= 4) { Info(slide, 0, ((char *)slide, LoadFarString(QDOSdata), ef_ptr[0], ef_ptr[1], ef_ptr[2], ef_ptr[3])); } else { goto ef_default_display; } break; case EF_AOSVS: if (eb_datalen >= 5) { Info(slide, 0, ((char *)slide, LoadFarString(AOSVSdata), ((int)(uch)ef_ptr[4])/10, ((int)(uch)ef_ptr[4])%10)); } else { goto ef_default_display; } break; case EF_TANDEM: if (eb_datalen == 20) { unsigned type, code; type = (ef_ptr[18] & 0x60) >> 5; code = makeword(ef_ptr); /* Arrg..., Tandem e.f. uses BigEndian byte-order */ code = ((code << 8) & 0xff00) | ((code >> 8) & 0x00ff); if (type == NSK_UNSTRUCTURED) { if (code == NSK_EDITFILECODE) type = 4; else if (code == NSK_OBJECTFILECODE) type = 5; } Info(slide, 0, ((char *)slide, LoadFarString(Tandemdata), LoadFarStringSmall(TandemFileformat[type]), code)); } else { goto ef_default_display; } break; case EF_MD5: if (eb_datalen >= 19) { char md5[33]; int i; for (i = 0; i < 16; ++i) sprintf(&md5[i<<1], "%02x", ef_ptr[15-i]); md5[32] = '\0'; Info(slide, 0, ((char *)slide, LoadFarString(MD5data), md5)); break; } /* else: fall through !! */ default: ef_default_display: if (eb_datalen > 0) { unsigned i, n; if (eb_datalen <= 24) { Info(slide, 0, ((char *)slide, LoadFarString(ColonIndent))); n = eb_datalen; } else { Info(slide, 0, ((char *)slide, LoadFarString(First20))); n = 20; } for (i = 0; i < n; ++i) Info(slide, 0, ((char *)slide, LoadFarString(efFormat), ef_ptr[i])); } break; } (*G.message)((zvoid *)&G, (uch *)".", 1L, 0); ef_ptr += eb_datalen; ef_len -= eb_datalen; } (*G.message)((zvoid *)&G, (uch *)"\n", 1L, 0); } /* high bit == Unix/OS2/NT GMT times (mtime, atime); next bit == UID/GID */ if ((xattr = (unsigned)((G.crec.external_file_attributes & 0xC000) >> 12)) & 8) { if (hostnum == UNIX_ || hostnum == FS_HPFS_ || hostnum == FS_NTFS_) { Info(slide, 0, ((char *)slide, LoadFarString(lExtraFieldType), "is", EF_IZUNIX, LoadFarStringSmall(efIZUnix), (unsigned)(xattr&12), (xattr&4)? efIZuid : efIZnouid)); if (*pEndprev > 0L) *pEndprev += (ulg)(xattr&12); } else if (hostnum == FS_FAT_ && !(xattr&4)) Info(slide, 0, ((char *)slide, LoadFarString(lExtraFieldType), "may be", EF_IZUNIX, LoadFarStringSmall(efIZUnix), 8, efIZnouid)); } if (!G.crec.file_comment_length) Info(slide, 0, ((char *)slide, LoadFarString(NoFileComment))); else { Info(slide, 0, ((char *)slide, LoadFarString(FileCommBegin))); if ((error = do_string(__G__ G.crec.file_comment_length, DISPL_8)) != PK_COOL) { error_in_archive = error; /* might be warning */ if (error > PK_WARN) /* fatal */ return error; } Info(slide, 0, ((char *)slide, LoadFarString(FileCommEnd))); } return error_in_archive; } /* end function zi_long() */ /*************************/ /* Function zi_short() */ /*************************/ static int zi_short(__G) /* return PK-type error code */ __GDEF { #ifdef USE_EF_UT_TIME iztimes z_utime; time_t *z_modtim; #endif int k, error, error_in_archive=PK_COOL; unsigned hostnum, hostver, methid, methnum, xattr; char *p, workspace[12], attribs[16]; char methbuf[5]; static ZCONST char dtype[5]="NXFS"; /* normal, maximum, fast, superfast */ static ZCONST char Far os[NUM_HOSTS+1][4] = { "fat", "ami", "vms", "unx", "cms", "atr", "hpf", "mac", "zzz", "cpm", "t20", "ntf", "qds", "aco", "vft", "mvs", "be ", "nsk", "ths", "osx", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "ath", "???" }; #ifdef OLD_THEOS_EXTRA static ZCONST char Far os_TheosOld[] = "tho"; #endif static ZCONST char Far method[NUM_METHODS+1][5] = { "stor", "shrk", "re:1", "re:2", "re:3", "re:4", "i#:#", "tokn", "def#", "d64#", "dcli", "bzp2", "lzma", "ters", "lz77", "wavp", "ppmd", "u###" }; /*--------------------------------------------------------------------------- Print out various interesting things about the compressed file. ---------------------------------------------------------------------------*/ methid = (unsigned)(G.crec.compression_method); methnum = find_compr_idx(G.crec.compression_method); hostnum = (unsigned)(G.pInfo->hostnum); hostver = (unsigned)(G.pInfo->hostver); /* extnum = (unsigned)MIN(G.crec.version_needed_to_extract[1], NUM_HOSTS); extver = (unsigned)G.crec.version_needed_to_extract[0]; */ zfstrcpy(methbuf, method[methnum]); if (methid == IMPLODED) { methbuf[1] = (char)((G.crec.general_purpose_bit_flag & 2)? '8' : '4'); methbuf[3] = (char)((G.crec.general_purpose_bit_flag & 4)? '3' : '2'); } else if (methid == DEFLATED || methid == ENHDEFLATED) { ush dnum=(ush)((G.crec.general_purpose_bit_flag>>1) & 3); methbuf[3] = dtype[dnum]; } else if (methnum >= NUM_METHODS) { /* unknown */ sprintf(&methbuf[1], "%03u", G.crec.compression_method); } for (k = 0; k < 15; ++k) attribs[k] = ' '; attribs[15] = 0; xattr = (unsigned)((G.crec.external_file_attributes >> 16) & 0xFFFF); switch (hostnum) { case VMS_: { int i, j; for (k = 0; k < 12; ++k) workspace[k] = 0; if (xattr & VMS_IRUSR) workspace[0] = 'R'; if (xattr & VMS_IWUSR) { workspace[1] = 'W'; workspace[3] = 'D'; } if (xattr & VMS_IXUSR) workspace[2] = 'E'; if (xattr & VMS_IRGRP) workspace[4] = 'R'; if (xattr & VMS_IWGRP) { workspace[5] = 'W'; workspace[7] = 'D'; } if (xattr & VMS_IXGRP) workspace[6] = 'E'; if (xattr & VMS_IROTH) workspace[8] = 'R'; if (xattr & VMS_IWOTH) { workspace[9] = 'W'; workspace[11] = 'D'; } if (xattr & VMS_IXOTH) workspace[10] = 'E'; p = attribs; for (k = j = 0; j < 3; ++j) { /* groups of permissions */ for (i = 0; i < 4; ++i, ++k) /* perms within a group */ if (workspace[k]) *p++ = workspace[k]; *p++ = ','; /* group separator */ } *--p = ' '; /* overwrite last comma */ if ((p - attribs) < 12) sprintf(&attribs[12], "%u.%u", hostver/10, hostver%10); } break; case AMIGA_: switch (xattr & AMI_IFMT) { case AMI_IFDIR: attribs[0] = 'd'; break; case AMI_IFREG: attribs[0] = '-'; break; default: attribs[0] = '?'; break; } attribs[1] = (xattr & AMI_IHIDDEN)? 'h' : '-'; attribs[2] = (xattr & AMI_ISCRIPT)? 's' : '-'; attribs[3] = (xattr & AMI_IPURE)? 'p' : '-'; attribs[4] = (xattr & AMI_IARCHIVE)? 'a' : '-'; attribs[5] = (xattr & AMI_IREAD)? 'r' : '-'; attribs[6] = (xattr & AMI_IWRITE)? 'w' : '-'; attribs[7] = (xattr & AMI_IEXECUTE)? 'e' : '-'; attribs[8] = (xattr & AMI_IDELETE)? 'd' : '-'; sprintf(&attribs[12], "%u.%u", hostver/10, hostver%10); break; case THEOS_: switch (xattr & THS_IFMT) { case THS_IFLIB: *attribs = 'L'; break; case THS_IFDIR: *attribs = 'D'; break; case THS_IFCHR: *attribs = 'C'; break; case THS_IFREG: *attribs = 'S'; break; case THS_IFREL: *attribs = 'R'; break; case THS_IFKEY: *attribs = 'K'; break; case THS_IFIND: *attribs = 'I'; break; case THS_IFR16: *attribs = 'P'; break; case THS_IFP16: *attribs = '2'; break; case THS_IFP32: *attribs = '3'; break; default: *attribs = '?'; break; } attribs[1] = (xattr & THS_INHID) ? '.' : 'H'; attribs[2] = (xattr & THS_IMODF) ? '.' : 'M'; attribs[3] = (xattr & THS_IWOTH) ? '.' : 'W'; attribs[4] = (xattr & THS_IROTH) ? '.' : 'R'; attribs[5] = (xattr & THS_IEUSR) ? '.' : 'E'; attribs[6] = (xattr & THS_IXUSR) ? '.' : 'X'; attribs[7] = (xattr & THS_IWUSR) ? '.' : 'W'; attribs[8] = (xattr & THS_IRUSR) ? '.' : 'R'; sprintf(&attribs[12], "%u.%u", hostver/10, hostver%10); break; case FS_VFAT_: #ifdef OLD_THEOS_EXTRA if (hostver == 20) { switch (xattr & _THS_IFMT) { case _THS_IFLIB: *attribs = 'L'; break; case _THS_IFDIR: *attribs = 'd'; break; case _THS_IFCHR: *attribs = 'c'; break; case _THS_IFREG: *attribs = 'S'; break; case _THS_IODRC: *attribs = 'D'; break; case _THS_IOKEY: *attribs = 'K'; break; case _THS_IOIND: *attribs = 'I'; break; case _THS_IOPRG: *attribs = 'P'; break; case _THS_IO286: *attribs = '2'; break; case _THS_IO386: *attribs = '3'; break; default: *attribs = '?'; break; } attribs[1] = (xattr & _THS_HIDDN) ? 'H' : '.'; attribs[2] = (xattr & _THS_IXOTH) ? '.' : 'X'; attribs[3] = (xattr & _THS_IWOTH) ? '.' : 'W'; attribs[4] = (xattr & _THS_IROTH) ? '.' : 'R'; attribs[5] = (xattr & _THS_IEUSR) ? '.' : 'E'; attribs[6] = (xattr & _THS_IXUSR) ? '.' : 'X'; attribs[7] = (xattr & _THS_IWUSR) ? '.' : 'W'; attribs[8] = (xattr & _THS_IRUSR) ? '.' : 'R'; sprintf(&attribs[12], "%u.%u", hostver/10, hostver%10); break; } /* else: fall through! */ #endif /* OLD_THEOS_EXTRA */ case FS_FAT_: case FS_HPFS_: case FS_NTFS_: case VM_CMS_: case MVS_: case ACORN_: if (hostnum != FS_FAT_ || (unsigned)(xattr & 0700) != ((unsigned)0400 | ((unsigned)!(G.crec.external_file_attributes & 1) << 7) | ((unsigned)(G.crec.external_file_attributes & 0x10) << 2)) ) { xattr = (unsigned)(G.crec.external_file_attributes & 0xFF); sprintf(attribs, ".r.-... %u.%u", hostver/10, hostver%10); attribs[2] = (xattr & 0x01)? '-' : 'w'; attribs[5] = (xattr & 0x02)? 'h' : '-'; attribs[6] = (xattr & 0x04)? 's' : '-'; attribs[4] = (xattr & 0x20)? 'a' : '-'; if (xattr & 0x10) { attribs[0] = 'd'; attribs[3] = 'x'; } else attribs[0] = '-'; if (IS_VOLID(xattr)) attribs[0] = 'V'; else if ((p = MBSRCHR(G.filename, '.')) != (char *)NULL) { ++p; if (STRNICMP(p, "com", 3) == 0 || STRNICMP(p, "exe", 3) == 0 || STRNICMP(p, "btm", 3) == 0 || STRNICMP(p, "cmd", 3) == 0 || STRNICMP(p, "bat", 3) == 0) attribs[3] = 'x'; } break; } /* else: fall through! */ default: /* assume Unix-like */ switch ((unsigned)(xattr & UNX_IFMT)) { case (unsigned)UNX_IFDIR: attribs[0] = 'd'; break; case (unsigned)UNX_IFREG: attribs[0] = '-'; break; case (unsigned)UNX_IFLNK: attribs[0] = 'l'; break; case (unsigned)UNX_IFBLK: attribs[0] = 'b'; break; case (unsigned)UNX_IFCHR: attribs[0] = 'c'; break; case (unsigned)UNX_IFIFO: attribs[0] = 'p'; break; case (unsigned)UNX_IFSOCK: attribs[0] = 's'; break; default: attribs[0] = '?'; break; } attribs[1] = (xattr & UNX_IRUSR)? 'r' : '-'; attribs[4] = (xattr & UNX_IRGRP)? 'r' : '-'; attribs[7] = (xattr & UNX_IROTH)? 'r' : '-'; attribs[2] = (xattr & UNX_IWUSR)? 'w' : '-'; attribs[5] = (xattr & UNX_IWGRP)? 'w' : '-'; attribs[8] = (xattr & UNX_IWOTH)? 'w' : '-'; if (xattr & UNX_IXUSR) attribs[3] = (xattr & UNX_ISUID)? 's' : 'x'; else attribs[3] = (xattr & UNX_ISUID)? 'S' : '-'; /* S==undefined */ if (xattr & UNX_IXGRP) attribs[6] = (xattr & UNX_ISGID)? 's' : 'x'; /* == UNX_ENFMT */ else /* attribs[6] = (xattr & UNX_ISGID)? 'l' : '-'; real 4.3BSD */ attribs[6] = (xattr & UNX_ISGID)? 'S' : '-'; /* SunOS 4.1.x */ if (xattr & UNX_IXOTH) attribs[9] = (xattr & UNX_ISVTX)? 't' : 'x'; /* "sticky bit" */ else attribs[9] = (xattr & UNX_ISVTX)? 'T' : '-'; /* T==undefined */ sprintf(&attribs[12], "%u.%u", hostver/10, hostver%10); break; } /* end switch (hostnum: external attributes format) */ #ifdef OLD_THEOS_EXTRA Info(slide, 0, ((char *)slide, "%s %s %s ", attribs, LoadFarStringSmall(((hostnum == FS_VFAT_ && hostver == 20) ? os_TheosOld : os[hostnum])), FmZofft(G.crec.ucsize, "8", "u"))); #else Info(slide, 0, ((char *)slide, "%s %s %s ", attribs, LoadFarStringSmall(os[hostnum]), FmZofft(G.crec.ucsize, "8", "u"))); #endif Info(slide, 0, ((char *)slide, "%c", (G.crec.general_purpose_bit_flag & 1)? ((G.crec.internal_file_attributes & 1)? 'T' : 'B') : /* encrypted */ ((G.crec.internal_file_attributes & 1)? 't' : 'b'))); /* plaintext */ k = (G.crec.extra_field_length || /* a local-only "UX" (old Unix/OS2/NT GMT times "IZUNIX") e.f.? */ ((G.crec.external_file_attributes & 0x8000) && (hostnum == UNIX_ || hostnum == FS_HPFS_ || hostnum == FS_NTFS_))); Info(slide, 0, ((char *)slide, "%c", k? ((G.crec.general_purpose_bit_flag & 8)? 'X' : 'x') : /* extra field */ ((G.crec.general_purpose_bit_flag & 8)? 'l' : '-'))); /* no extra field */ /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ extended local header or not */ if (uO.lflag == 4) { zusz_t csiz = G.crec.csize; if (G.crec.general_purpose_bit_flag & 1) csiz -= 12; /* if encrypted, don't count encryption header */ Info(slide, 0, ((char *)slide, "%3d%%", (ratio(G.crec.ucsize,csiz)+5)/10)); } else if (uO.lflag == 5) Info(slide, 0, ((char *)slide, " %s", FmZofft(G.crec.csize, "8", "u"))); /* For printing of date & time, a "char d_t_buf[16]" is required. * To save stack space, we reuse the "char attribs[16]" buffer whose * content is no longer needed. */ # define d_t_buf attribs #ifdef USE_EF_UT_TIME z_modtim = G.extra_field && #ifdef IZ_CHECK_TZ G.tz_is_valid && #endif (ef_scan_for_izux(G.extra_field, G.crec.extra_field_length, 1, G.crec.last_mod_dos_datetime, &z_utime, NULL) & EB_UT_FL_MTIME) ? &z_utime.mtime : NULL; TIMET_TO_NATIVE(z_utime.mtime) /* NOP unless MSC 7.0 or Macintosh */ d_t_buf[0] = (char)0; /* signal "show local time" */ #else # define z_modtim NULL #endif Info(slide, 0, ((char *)slide, " %s %s ", methbuf, zi_time(__G__ &G.crec.last_mod_dos_datetime, z_modtim, d_t_buf))); fnprint(__G); /*--------------------------------------------------------------------------- Skip the file comment, if any (the filename has already been printed, above). That finishes up this file entry... ---------------------------------------------------------------------------*/ SKIP_(G.crec.file_comment_length) return error_in_archive; } /* end function zi_short() */ /**************************************/ /* Function zi_showMacTypeCreator() */ /**************************************/ static void zi_showMacTypeCreator(__G__ ebfield) __GDEF uch *ebfield; { /* not every Type / Creator character is printable */ if (isprint(native(ebfield[0])) && isprint(native(ebfield[1])) && isprint(native(ebfield[2])) && isprint(native(ebfield[3])) && isprint(native(ebfield[4])) && isprint(native(ebfield[5])) && isprint(native(ebfield[6])) && isprint(native(ebfield[7]))) { Info(slide, 0, ((char *)slide, LoadFarString(MacOSdata), native(ebfield[0]), native(ebfield[1]), native(ebfield[2]), native(ebfield[3]), native(ebfield[4]), native(ebfield[5]), native(ebfield[6]), native(ebfield[7]))); } else { Info(slide, 0, ((char *)slide, LoadFarString(MacOSdata1), (((ulg)ebfield[0]) << 24) + (((ulg)ebfield[1]) << 16) + (((ulg)ebfield[2]) << 8) + ((ulg)ebfield[3]), (((ulg)ebfield[4]) << 24) + (((ulg)ebfield[5]) << 16) + (((ulg)ebfield[6]) << 8) + ((ulg)ebfield[7]))); } } /* end function zi_showMacTypeCreator() */ /************************/ /* Function zi_time() */ /************************/ static char *zi_time(__G__ datetimez, modtimez, d_t_str) __GDEF ZCONST ulg *datetimez; ZCONST time_t *modtimez; char *d_t_str; { unsigned yr, mo, dy, hh, mm, ss; char monthbuf[4]; ZCONST char *monthstr; static ZCONST char Far month[12][4] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; #ifdef USE_EF_UT_TIME struct tm *t; #endif /*--------------------------------------------------------------------------- Convert the file-modification date and time info to a string of the form "1991 Feb 23 17:15:00", "23-Feb-91 17:15" or "19910223.171500", depending on values of lflag and T_flag. If using Unix-time extra fields, convert to local time or not, depending on value of first character in d_t_str[]. ---------------------------------------------------------------------------*/ #ifdef USE_EF_UT_TIME if (modtimez != NULL) { #ifndef NO_GMTIME /* check for our secret message from above... */ t = (d_t_str[0] == (char)1)? gmtime(modtimez) : localtime(modtimez); #else t = localtime(modtimez); #endif if (uO.lflag > 9 && t == (struct tm *)NULL) /* time conversion error in verbose listing format, * return string with '?' instead of data */ return (strcpy(d_t_str, LoadFarString(lngYMDHMSTimeError))); } else t = (struct tm *)NULL; if (t != (struct tm *)NULL) { mo = (unsigned)(t->tm_mon + 1); dy = (unsigned)(t->tm_mday); yr = (unsigned)(t->tm_year); hh = (unsigned)(t->tm_hour); mm = (unsigned)(t->tm_min); ss = (unsigned)(t->tm_sec); } else #endif /* USE_EF_UT_TIME */ { yr = ((unsigned)(*datetimez >> 25) & 0x7f) + 80; mo = ((unsigned)(*datetimez >> 21) & 0x0f); dy = ((unsigned)(*datetimez >> 16) & 0x1f); hh = (((unsigned)*datetimez >> 11) & 0x1f); mm = (((unsigned)*datetimez >> 5) & 0x3f); ss = (((unsigned)*datetimez << 1) & 0x3e); } if (mo == 0 || mo > 12) { sprintf(monthbuf, LoadFarString(BogusFmt), mo); monthstr = monthbuf; } else monthstr = LoadFarStringSmall(month[mo-1]); if (uO.lflag > 9) /* verbose listing format */ sprintf(d_t_str, LoadFarString(lngYMDHMSTime), yr+1900, monthstr, dy, hh, mm, ss); else if (uO.T_flag) sprintf(d_t_str, LoadFarString(DecimalTime), yr+1900, mo, dy, hh, mm, ss); else /* was: if ((uO.lflag >= 3) && (uO.lflag <= 5)) */ sprintf(d_t_str, LoadFarString(shtYMDHMTime), yr%100, monthstr, dy, hh, mm); return d_t_str; } /* end function zi_time() */ #endif /* !NO_ZIPINFO */ Carla-2.4.2/doc/000077500000000000000000000000001420416754300133145ustar00rootroot00000000000000Carla-2.4.2/doc/Carla-TODO000066400000000000000000000065171420416754300150350ustar00rootroot00000000000000# Carla TODO # ---------------------------------------------------------------------------- # in short 4. custom "plugin slots" skins, ala Reason (also define set of keys for a new LV2 extension, 80% done) 7. direct support for csound files (as plugins, inspired by 'cabbage') Ideas for later: 10. easier canvas connections by using smart key shortcuts 11. Mobile version (using Android Patchfield for example) 12. Mobile OSC Control app 13. Port good JACK-only apps as internal plugins (zita stuff would be nice) # ---------------------------------------------------------------------------- # current work FRONTEND: - more skins - testing stuff BACKEND: - noexcept wherever possible OTHER: - create tests for all utils code - fix reported bugs # ---------------------------------------------------------------------------- # more detailed GENERAL: - add direct program access on ui-dialogs (needed for standalone bridges), maybe add extra buttons too (reset plugin, fix ui size) - implement midi-learn (new dialog) - implement favorite plugins, add in new tab near file-browser - blender style canvas theme - NSM rework FRONTEND: - make always-on-top depend on it^ - complete zynfx, knob values on top - synth skin - samplers skin ENGINE: - allow to change position of plugins (up/down) - allow to add plugins when engine is stopped - implement Haiku Media support (based from JACK?, LATER) - implement latency in continuous-rack mode - add MIDI-bank change type (GM, GS, XG and MMA). See fluidsynth and los docs ~ allow to use static OSC ports - switch engine modes when opening project - don't pass audio buffers to plugin process, make them request via ports PLUGINS: - add control-out rate/freq option in frames (or just a regular block-size option?) - control/midi-out in singleProcess() calls, use timeoutFrames var - implement midi-cc automation special rules (invert, half, logarithmic, etc) - implement LSCP file support (new native plugin?) - implement Csound file support LADSPA: DSSI: - custom chunk-data extension, publish on kx website when complete LV2: - revisit all extensions - strict bounds recheck FluidSynth: - per-channel volume control - proper buffer-size/sample-rate change (needs testing) LinuxSampler: - per-channel volume pan&control - proper buffer-size/sample-rate change (needs testing) # ---------------------------------------------------------------------------- # //tb/150118 misc -allow to open instruments via file/open menu (same as drag from left-side tree) -allow drag of sfz/sf2/gig etc. also to patchbay (same effect as dragging to rack) -action "remove all" in toolbar and plugin menu: add confirm dialog /!\ -action "remove folder": add confirm dialog -add plugin macro "reset parameters" -allow re-ordering of rack components -setting: auto-connect to physical output when new instrument loaded (for quick audition) -for instruments: highlight keys with assigned samples or unhighlight keys without assigned sample -allow in-line edit window (i.e. right of rack/canvas) -> shows as soon as plugin/instr. is selected -indicate engine at work top right -if engine is jack, show load top right (percent and/or gauge) -warn on quit if unsaved patchbay -allow click a, click b port connections -allow multiple port selection + connection (i.e. with enter) -allow to select connections with lasso (to delete) Carla-2.4.2/doc/Carla-TestCases000066400000000000000000000054301420416754300161570ustar00rootroot00000000000000# This document describes manual test cases for Carla. ---------------------------------------------------------------------------------------- ----Section 1. ----------------------------------------------------------------------- REFRESH PLUGINS Native plugins: -N- LADSPA -N- DSSI -N- LV2 -N- VST -N- GIG -N- SF2 -N- SFZ -N- Native Non-native, posix plugins: -N- LADSPA -N- DSSI -N- LV2 -N- VST Non-native, win32 plugins: -N- LADSPA -N- DSSI [*] -N- LV2 -N- VST Non-native, win64 plugins: -N- LADSPA [*] -N- DSSI [*] -N- LV2 -N- VST ---------------------------------------------------------------------------------------- ----Section 2. ----------------------------------------------------------------------- LOADING PLUGINS (load and safely remove) Native plugins: -N- LADSPA -N- DSSI -N- LV2 -N- VST -N- GIG -N- SF2 -N- SFZ -N- Native Non-native, posix plugins: -N- LADSPA -N- DSSI -N- LV2 -N- VST Non-native, win32 plugins: -N- LADSPA -N- DSSI [*] -N- LV2 -N- VST Non-native, win64 plugins: -N- LADSPA [*] -N- DSSI [*] -N- LV2 -N- VST ---------------------------------------------------------------------------------------- ----Section 3. ----------------------------------------------------------------------- SAVE & RESTORE PLUGIN STATE (Manual and In-Project, verify data) Native plugins: -N- LADSPA -N- DSSI -N- LV2 -N- VST -N- SF2 Non-native, posix plugins: -N- LADSPA -N- DSSI -N- LV2 -N- VST Non-native, win32 plugins: -N- LADSPA -N- DSSI [*] -N- LV2 -N- VST Non-native, win64 plugins: -N- LADSPA [*] -N- DSSI [*] -N- LV2 -N- VST ---------------------------------------------------------------------------------------- ----Section 4. ----------------------------------------------------------------------- LOADING PLUGIN'S GUI (load, show/hide, close/reopen) Native plugins: -N- DSSI (OSC based) -N- LV2 (External-UI, internal) -N- LV2 (Qt4-UI, internal) -N- LV2 (X11-UI, internal) -N- LV2 (Suil-UI, internal) -N- LV2 (Gtk2-UI, OSC bridged) -N- LV2 (Gtk3-UI, OSC bridged) [*] -N- LV2 (Qt4-UI, OSC bridged) -N- LV2 (X11-UI, OSC bridged) -N- VST (internal) -N- VST (OSC bridged) Non-native, posix plugins: -N- LV2 (External-UI, internal) -N- LV2 (Qt4-UI, internal) -N- LV2 (X11-UI, internal) -N- VST (internal) Non-native, win32 plugins: -N- LV2 (External-UI, internal) -N- LV2 (Qt4-UI, internal) [*] -N- LV2 (Windows-UI, internal) [*] -N- VST (internal) Non-native, win64 plugins: -N- LV2 (External-UI, internal) -N- LV2 (Qt4-UI, internal) [*] -N- LV2 (Windows-UI, internal) [*] -N- VST (internal) ---------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------- [*] Cannot test, no such plugins yet Carla-2.4.2/doc/GPL.txt000066400000000000000000000355641420416754300145140ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the 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 a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE 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. END OF TERMS AND CONDITIONS Carla-2.4.2/doc/LGPL.txt000066400000000000000000000167431420416754300146260ustar00rootroot00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser 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 Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. Carla-2.4.2/resources/000077500000000000000000000000001420416754300145615ustar00rootroot00000000000000Carla-2.4.2/resources/128x128/000077500000000000000000000000001420416754300155165ustar00rootroot00000000000000Carla-2.4.2/resources/128x128/carla-control.png000066400000000000000000000314721420416754300207730ustar00rootroot00000000000000‰PNG  IHDR€€Ã>aË pHYsììu852ìIDATxÚí}kÇqæ—UÕÓ=ÝYì , ‘–„.LŠ”,É”u”xG=Îá_¾ðÝ…-ÇY+Ζ}ö9ÌwŠsز#xË”e›gÙ¦d‡N¢$R&iK¤-!¢H $øb‰Ç>°;»3;®ª¼ý˜îžžÝY Š:dÄn¿jºªëËÊÌÊÊÎ&fÆ›%"¢¼ÓoúÆ—)I=@ñEO]è3 SŸmêúÔÔÔÆvÑ9r$ÚÍÌÉm‚ eZÏïVÐää$µÛm­5´Öqykíe‰°BÄÀ(¥X©`¬º®ËGeLý!±]3 Ì ðcÀ§¦¦¨ÕjQ£Ñ ­5ù¾/¬µdŒÌLÕj•€.ø—™`0ŠÀ¶µZ‰ˆ¥”VÁŽãX¥—Ëeö<9ÒÃ2Áš €µZM´Z-ò}_ø¾/‡‡‡…ïûÒ#¬µT,…µ–˜™˜™ÂF]f€ˆˆ"ÏDÄBn6›VÁRJë8ŽYZZ²ŽãÇq¬çy\­Ví‘#G,2a-FX•òFýä䤨Õj¢ÝnË¡¡!Ùn·•ÖZ iŒQÆé8Ž ÖZÖC…Ba£.3BEÀw:hŸ…–ˆ,±ïûFJi¤”ºÓ饔q]W///×uMµZµG˜` iЗ²àG£~yyYú¾/‹Å¢Óét”ã8ŽRÊÑZ;BÇZ«¬µRJ)™Y2sÌJ©ËÀ@ZkŽ ßcŒÂ!´µÖWJùZkß÷}¿P(èf³é;ŽcŠÅ¢KJƒU™ —²àONNÊF£AFC‹E§Ýn;RÊ‚”²àû¾+„p‰¨`Œ)!bF`f)„Ñ}‘™ V§|l­µDo­õ¥”fîXkÛŽã´1cLÇu]¿ÙlúårY—Ëe>zô¨ÁLÐÃyà‡ú^yžçH) ­VË A/ðxDäZk]"rˆÈàQ™DBPtã°†3P² }öÓåÖÙ¯é#Μçd îýIªÚ°á™sÝ6fën¶Ê1'­µñè·ÖvˆÈgfŸ™}!D›™ÛZá_“™›ÖÚ¶çy-­µßn·;žçéP%¬Êý |×u Dä†`™¹ÄÌ%e%†Ëåò~¯è,8…íR©!)Å@’‚Ž¡èî@E•:Ž¥8Ž©Tx¬zŽ•r@tpÐ~Nm£gê=l­µ°ÆÀZ£u¸ík`µ ¶ÖB !%„”é})!D¸•"±/ÁÌ0Æ@ûÚh­aLPÖÁ9£5´î^ÓZ'ÚgaÙÂk1ucLMksªãûßkµ;OX° AD+D´ 2D»d@倱³h4p¤[kËÌ\B ¨<FDJ!­µ˜]`Ïó¸Ñhð®]»ô‰'9«€¬èŸ››‹Å¾1¦l­­Xk‡„#6yõ1×QÿZ(%•TB!¤‚W,bdÓ ^ÊQ>vâq8êˆn›b@þ…ûSCDâƒ(¼m"?y>ìÔ¨®H6üãPX° ~kÙÆm @L!âmÂk‘M±'¥ë±ßÛ&Î[›hGx-ùÖ2Ø"PƒVÇßÑY¡‰Ä×ZΗ,XkkBˆ%!D]JÙˆÔÁæÍ›u8E´H¨‚< jµšð}_pxŽãC±? `SÑ¿)%]"! ¢b±„«Þq5Ê•r¢³»ÀwÁANŠ^† : Í Xô‚|ð9ÃhùmÏD#YfF&6¨4!86«¸{2!Õ£8¡V8{-¨ ê•La;î’q;À*£ü–…s ´›q›””âcÕ¡ò¾Úrã!˜™ Ójµ ëû¾©ÕjI'Qììèß½{·h·Û²X,:J)Gá2sQ1DDÕ‚ÀLjp=‘ !„$"ºâÊØ{à†üØZ'ä‚0(ŠâÞ ÏA‘TÊœ~Û-Ã=e(U9e’m@ÜŠx :NÈ]b F:SX6<…¿‹®%ŽûÄ}ʆ÷âð\P}$aVF‚±”«°ygC£¥”äB\_®ü[ ì…!f. !\)e!œºËÝ»wÇSòÈÞH“hµZ¤µ–NGES=f.3s…ؼCÿ›ðÂ+qãÔAì¸úÊX$Æ¢+ZtMR=þE !R#1Ÿ>ŸR%m‰Äù®hFŸûtm‰ £)et%AH£{”¾–8NÜ»·lP^„û2TonEhj),ÏÑ êÞ\ÄÖ«6A92~(×-Üåyîf®0s‰ˆŠRÊB§ÓQZkÙjµ(‹yò€&''É÷}Q*•”ã8ŽïûÓ¾23IØÿ@‘ ®ß?‰òp%u°µa/‡#‘B/Ð/TåaLj(qsX.:tLÐQ§‰°s£ów,A@@A†åeX^@@AÆ×$$‰°\pÜ-—¼ºÇˆçÜkÑq lx,Â}þ‘ "¢ M‚DÈÈ"fX Ë Äª­à)lÞ>œ4JÕÈððPE0=/ú¾ï:Žã”J%åû¾˜œœL9ãTRü7 u¿t]×ÑZ{¦% ýWEèì¼z*CC fX0`»â5j+@` · ±ÆáˆÕ*E:0’ˆ1âPLr$))ƒœx$ê ‡ûQ™Ð& ÄtBOQ#¤~—E¿káq’’ö%ž=®/z^oŰL ŒxBÇQ;m÷ÞÏA¹ê¢½bi"ÅŽ­[7ìܹ¹ÿ`Eá*¥Zív»ãû¾l4&¡ºFàÔÔ;wކ‡‡…1Fj­#/žð±ù ¨24„+¯½&èXBü€]âñtà`X3Dzg5‹=⌵ Çä4.aígŒÑ”·/gîÏéžãÔ|ž3e9ñ‹L%©Ù^÷±‚ö٠ن&/3ÈZ°`kƒAd9(lC^M¨„ʦ"Œß ! =ï!è+Örˆ Zk§P(Èb±(´Ö455EQÐIÄ-í† 8Jáh­ RJ—\„¢ö“û‚©Y,ö9YáwE» §O ŠÌ¸_¢Q—?ê™xñOÒ–|¼ä¬!É ‰w·Ã“~øÙ»ø9e{,s">[Žg,ð-3,kÛA[XcCÕÀ)&ŠnX) µd‚þ¢°iÓÈÁóçç1¥”cŒQÖZ©µ­V+ÖÕ±h·Û”æ”Â!"ÖÜhY·è¡:º ‘±b¡èô±ˆm€Èª¥.$)ð’#.=r“£:o¤'؃ó¯%y.ƒZâÚ€¦ çJ‰¬'8óûnOu­eX«¡€& 2F0Øöƒa€ØÂrWóDϬ $l,yËåâM µŠæŒ1’ˆ„µ6ŽÚŒ1‚ˆ¨P(H"’ÌìXkïŒ†ïæ­ã‰Ql Ž:[‹V«^#G„Õ„Š ô¦aÏÉ‘–êèŒ\MíQÏHÙf‘¤nù<”ó~’¸–mB~Y$$Sº¥®…³%f ,$l` ÀBƒ CX CXÞ:Å…  à8;­µN8ˆ¥Bv:2ƈdT´£µÆÈÈc„Öš"U@DÕH|ËåôP'Gº¾kÝûsgp™Þ HY€RÇÉÂl`,gÁg3.˜Ø/P%"ÇZ«ˆH b±(¤”¤µŽ*¡Xh­I)Ea— CUàâ €ë H;uâ…P€™˜c×ëu,//¿Õ=ù¶#¥¶lÙOU…6  äŒ+Úpd†Åv–”²À 1”DZ@” ÖU@<@Ãg­B’R’µÆE×Í©Dàíckbþüsh `€Ó§O¿Õýù¶£R©„-[¶„#YBXÓu@Eà‡SAÎÑU‘“/t䑵6Æ4 ÌfYO ÂØ=’RŠ #ôHt×¹€ÐZrÛÑâÿezóDDP¢ëüBhoum©ä4”ó~/˜YH)E¡Pˆƒs“«€Ä2"‘¼”¹clE«d‘AÇ¡Ÿ›Ñë_Þ(Ú³g¬µoþFk€pöìYÔj5Œ£R©lH=J)?~ ýO¥ãu¢Ä¬'üœ8Š,“áù©ÕÀHDÇÌœŒåÎ!1ï&Ž$%-°\" „@«ÕÚÐ:”Rp]P.—7Œá”RR¦ ½(YÝtƒyA,YðcìõžB'÷Õ°,Çt›@)Ï]àdH!c—,e[ó#FZjüËþe°Âm pcaÍb£££˜œœì9O™‹Ø€úy1™sƒiЕ=´Ö»IFˆ½ÙIGM¤‹˜ $ºßY"€¯ðÛ@»Ý^³˜ïûý«ãn@J¿‘ß‘õЬ!SׄŒËcõ@ŽËFàE"JJÝîé|ð/ŒÖ~;˜²ûÉ…DÞ t}øÑÉËô¦iõ‹Œ 0X0m—~=¼kH$–XÂè™îj]²e—ébSrÐeÁOºÒ×#€b€|#0ž†k])0påJ¡R©`hh#• ´µX ½‡õz}çxoJ-t­>o HùÂHúwƒ4SD„;vàÊ;¡ŒA©VCµVƒU õ-[ÐÞ½ÆZ<÷ü󘟟 »¾—„ÀÇ,l.B…ÉÕª5À¿ù÷` ²ºÅ̦݇ŠÅ"ö¾ã–{¿ÿ}LÞr 6¿ûݨÞx#–çæpîÉ'1wäN6pÀé3gðü‹/˜Áz³Z­â—ù—1>>Çqpß}÷áðáÃBàŸøÆÇÇáº.¾þõ¯ã±ÇÃøø8>ñ‰O`ll +++xøá‡ñÈ#ô½¿•øìy/€ßYßO8sÀ ›r%þg_²YÖ—"¦ëPªVZÑ)«¯”ÂnÀ¶³gqH)|à+_u]øB Óé`äŠ+PÙ³ÃwÜá§žBõ¾ûà8wÿ~<õôÓ5ñ7~ã7päÈ|úÓŸÆ–-[ð™Ï|¯¿þ:víÚ…v»ßþíß !ð»¿û»¸÷Þ{qøða®»îº5úÀÖõ ¾€ßDÔ’~8 \¯ ØkK±˜ªÏ„cõ„`õÒ;®¹Õ¥%¼obw}éKè”J8»°€×_§NÂéÓ§±T¯ctbï~76ò“Øõ½ïaÛ–-¸âŠ+Öl£”SSSxàÀ̘™™ÁáÇqë­·âìÙ³xç;߉~ðƒ(—Ëèt:˜˜˜€çy8|øpølŒ_|ñM µ” p?ðŸ|`` Äÿô‹Ýà‰ÕÁÅæÑQLž<‰÷|æ3XXYÁôô4NŸ>ééi¼ñÆñþÙ³gáU*¸âÚk!?øAL<ý4nú±C”`¢¹®‹ååå”cevvårÇÇoýÖoaÇŽ¸çž{ðÞ÷¾år333—Ç ¥´ÏuðÃ|}vÀàë6Ôuö{Ë'7T&¤í[·bûÉ“x÷§>…3fgg1;;‹¹¹9ÌÏÏÇÇÑþÜÜÆ'&@W]·ÓAae[·®.{WVV`­ÅÎ;ãs‡ÂK/½8sæ þôOÿwß}7>ö±áÔ©S¸îºëb_ÿ%儞…ÝÞ ~ ®‹> H7$˜„Û”s(_  ¡òÚkØò®w¡Þjaii KKK¨Õj¨Õjh·Û "”J%03ÇA¥RÁµ{÷âÈΨÌÍalt§NZµ}ð€OúÓx衇pà 7 ÙlâðáÃxÿûß+¯¼o¼ñÞýîwã±ÇC³ÙÄg?ûYüÑý~øa8Žƒr¹Œ{ï½÷ »Ž>ÏÆ!®63Àú¤À`~€Ôë5‰‘Ÿšþ%Y#ÍJ)¨bU߇/%Z­šÍ&Z­VVVÐh4°²²)%¬µp]ív­V CÃÃXÃЋ/bëÞ½k¶õÉ'ŸÄË/¿ŒÉÉI<ûì³8zô(àÛßþ6&''166†{î¹³³³€x‡ÆÞ½{±´´„gžyfõ³ W~üÊuƒè¼áÀÝ—/iÇéû»Ü‘ß|æ,VkÓàžÀ¤€I¬&_†H©†yžÁŒrµŠæò2l´µ6Hš` VVVàº.<σ1&¾^*•P³› ”\‹Ÿ››Ãc=–:gŒÁ³Ï>›[~fffp[€ Þâõ½ì½2 2}X}pŽröÖþËŸsÁOO¡õg åØ Léžì{íIZYYI‰……4;xCCa¦ ë‡ã8†¢›DJ(¥077¹°½i–—–ÖÝÜ‹MZ ¼ôÅÿÞ¿ÀÄOgçÖuÏÍ›7cÓ¦M}ûH«ž·×Ökα#0áðI¾¾•\ ̰µþÊ Õ*êgΠT­¢T*¡X,¢R©ÀZ‹B¡"B¹\F¹\F±XD©TÂ+/½qêZ×^‹™…ÿ?#“j »ß ~’åƒ 0“!†ˆ§ÁÏ“‹ËËXÇ©¿û;˜ŸýYŒML ÙlÂZ ¥|ßÁu]T*ŒŽŽBJ‰o~ýë¸éüyÔ~â'pþûßÏo3&&&011V«…ééi,--%°£££Ø¾};´Ö˜››ÃÜ\z”–J%\uÕUð<³³³8sæÌÀÞǤä».}íð7È솅¥çüÉD Á~o^{ýu\që­˜þ§‚œšByd$v×&çîžç¡Z­btt_ø³?Ãĉ07Ü€†Öxã7r:ˆqðàA|ò“ŸD½^Çââ"Î;‡ûZ D„íÛ·ãî»ïÆÒÒî¿ÿ~|ä#Á¿øE¼öÚk "T«UüÚ¯ý&&&°¸¸ˆÅÅE|ç;ßÁ·¿ýíKxúéR›ÕÀÂ0²9–Ö¢ 0Ñ@”´ú»N¡<ª×ëxåÕWáÜ|3JŸû}Û®¹ïØ»###) Ðn·ñGŸù š/½„´ÆüþýøÎÃçF¾Žcbb?þ8®¾új,..bee·Ür ~øa üüÏÿ<¬µñµÅÅE:tÓÓÓèt:¸õÖ[±mÛ6,,,`qq3338~ü8<Ï[5ZçÒR>ø]»p§± ’kÝeJBÚ(ìÇÇ_{ Û·më‡aÇŸÿ9^9xO_u6 cë•Wbia/=Н¿Žk_~»6oÆüwâ¹ü }ôÿðð0î¼óN|ýë_Çùóç1::ŠÅÅEh­!„@¥RÁ¶mÛ°¸¸ˆv»`aaµZ ŽãÀZ‹©©),..baa øÒ—¾„믿ÖZLOO_z¬³ÄƒŸš&q[…Öo¤üÿQåiw0ú¤ffüóáÃØsÝuàŸú)Œ¾ð*Ï<ƒÏT*à•ŒÔ븵TÂòÿ8æ¶mÓ‡¯ B³ÙÄÂÂ&''c#1®µF»ÝÆìì,êõ:jµ´Öñõv» ªfŽ{Ûm·Åe²£IøxïêßA»®þ¡ÅeàØkkƒŸÚ] üôݘt‡ž¿X0ÇIº1ùd­ÅóÇŽá̹s¸éÆQÝ¿?xªV9šÕ*ZãôéÓø—o|c͠ʹ¹9¼ð ðif¦ë¿P(`ÏîÝ)•°û¹ç0¹g6ßtFoº ˳³8û䓘{öYœt”o¾'NžÄ˯¾:pÖP"ÂwÞ‰ƒb~~û·¿ üÞ÷¾·Þz+à+_ù Ž;!>üáãÆoD­VÃ>ˆW^y¥À]~ÿ-ÜÞà®ãwQWsú`5ð£ý 'dÀ¿`‘RQkrHƒ7Þˆñ…˜™Áï»j|fhkái¡ƒ167‡‘GÁɯ~…C‡P*ñtŸìYúÅ_üEŒáÞ{ïÅþýûñ‡ø‡øøÇ?Ž;vàöÛoÇïÿþïÃu]”JÁ×·çw~çÎÃç>÷98Žƒ}ûö­ÊL \¿~ /(·`ªâµÀ_¿¸ !aåÑ·ù(þZãÿÚ«¯FµÙÄ{=ÿê‹_D½ÓÁ¹ðM äÛÁ›¯¸ü ½s'Ô=÷€o¿ÓgÎÄy}V£~ô£ø™Ÿù,--áÑGÅÍ7ߌ÷½ï}˜™™ã8(•J˜™™Áüü<ÆÆÆ055…øÃ±˜]+ Õ[Cið9ü>qkÑÅH€ŸHä6A###Ø:>޽O=…÷=ü0›Mœ={çÏŸóD P­V1¶e :¾ÅŸüIlýþ÷qèàA<òÿØÇWP¥RÁÂÂBÊnxñÅ1>>Ž|ccc¸ûµÆ=÷Ü¥Ž;öÃû>C2Ö/g.ü®¤šfo×õùçÄö™ lß¶ Wœ<‰Ÿøä'á+…ÙÙYÌÌÌô䜛›ÃÌÌ æææ0±s'̵עT¯£èûضmÛªí¬×ëñ{†íÛ·§OŸ3ã›ßü&~é—~ Ÿÿüçñ ¿ð 8wîöíÛ÷Có`/­>òÀç Œ ŒjÉ,øô…¦c®T0´¸ˆm?ù“h´Û©<óóó1øÑ^\\D½^Ç;öíÃÊ•W¢<;‹±±±5ÛùWõWøõ_ÿu\ýõøéŸþi\}õÕøÖ·¾…ýû÷ãÀزe öíÛ‡'N`aa?þ8~õW»wïÆ¾}ûðÑ~t½ |Ü Ý»øaᙈ øDI)äͤ”(”˨¶Z0…šÍ&VVVÐjµÐh4P¯×Ñl6!„ˆó¶Z­8O`sËT^~ãk%rð…/|ïyÏ{ð¡}óóóø•_ùt:ÌÎÎâŽ;îÀí·ßŽüàxà¿÷{¿‡÷¿ÿý¸ë®»P«ÕðÐC­ÞaVaâ¿L¬ÇÂk¸×åç \3SiFµæ€Á:l}F`&D‰Â¤\„9T,!¬ÅÐè(V–—aC £ZkÔëuxžÏ󠵎¯cÁZŒ,/chÀµøÇ?þxêÜ™3gðñ½}ËŒG}>úè`}`­/Lö½ì,,Çwî¡jŸn]MeÁçÞ‘ŸÜlX¢H$œA]5@Ýd É„…™Ÿ®¬¬€‹sshv:(”ËqÀh”0™'0ú†ž”óóó‹‹Ð##¨ÿ|‡X+‰ï?ô¿ú¸À<è_ 6¹ß0˜m”¸ïb/¥ÂÂóÖý³A Šó aùìYH)Sy‡††Råržç¡T*áéiÈéi´7oÆÌùóëêØÊ úHË ühBWcü ( ~~xr­^G}|g|(—QKå ìt: "xž‡J¥‚M›6¡P(à›_ûn˜›Cý¶Ûpþ¹çò»‡[·nÅøø8Úí6NŸ>z½žê„jµŠ‰‰‰ø;çÏŸO]÷<;vì€çy˜ŸŸGø1íKîZ”?މ§þbòmÀ”70:f wúÚÉ“˜¸å¼þ­oû÷£|Ë-‡R*ß06†¿»ÿ~l>ybÏ´€¾y÷îÝ‹O}êShµZX\\Ä©S§ð—ù—q0ÆÖ­[ñ›¿ù›ÐZãoþæoð‘|_øÂ0== !†‡‡ññ{öì‰ó=üðÃøîwŒüÙ@â~úžÃõÀ7éÂXg‚ˆÄ4/Î ÔmÛjÆàòò2^;y§Âìÿ1Ž<þ8Î>‰‰ ìܹ3õW©Tðçò'8þĸº^Gý¦›ðχçÆãášk®ÁÂTr ÐZãÖ[o3C)…Ÿû¹ŸC±XÄââ"šÍ&–––ð®w½ …BÌŒC‡aÏž=ñïÏŸ?F£ñ–G€óŽ3ÔçƒBd.ÉWÂê)x™8'V-Ÿ^yõUlß¶ ¯íÛ‡íŸý,žÏ{pdbãããØ²};–—–ðòÑ£xáØ1ì<~7 ˜¿óN{ñž_Û´iî¸ãÜÿýضm[œ'™!¥D¥RÁ®]»°°°€v»§“[ZZ‚R ÖZÜrË-qv°óçÏã¯ÿú¯qÕUWall §OŸ¾P¯E)'[ÎÈO{_6ôÝÀ”w*9 ìçJµÿô䓨?9 ý`Ë3Ï ðïà¬ãàøæÍ0KKðΟÇ+…Ö7bþškpäé§W]œi‡N¥(·_6O ÖóóóX^^ŽóGe¢éæìì,„X\\D­V‹ïuâĉžú„¯›ÿ]ÿ‡,yƒç l¶sk}/;Ì{ÀOXO,p!_Mþ‹¦Wðj¤µÆ÷žyÓgÎ`jÿ~”ªU Ý†;?±s'üÍ›±¨fÏžÅ“ßøÆšaßsssxõÕWc#p_ýucP¯×ñÈ#àúë¯O]Ÿ››C³Ù„R ÿðÿ€}èC©ü€‹‹‹˜ŸŸÏÏøÄ_ Úm«ÓzòFé8òl‚h÷’š­ÛHqô…!݆¤C”W§™™<ôè£( Ø´iFGGƒÑúÜs¨ÕjÇß·Z-Üÿýxç;ß "ŠÀ³gÏÆÙCžxâ ÔëõX=œ;wÇSÁ8qßüæ7qÝu×Å®éš<Üwägv»Çün`b«Õ]Á«Q§ÓÁ¹sçpîܹ î£V«…o}ë[±+ÙÓ“'ð©§žŠ¯k­{ò¾úê«xíµ×â6I)ßzXün¢¦ÌJà†Å¦ß `0§çˆ(‰Þ4Eß. Ü\Éëyy…¢ëÀ[žÀUÆTvä‡à ìn“6@n¸Òeº¸4 ØN^ü°ð®{)UqøÄ”È|™.¥?ÒŸDr!>ö %dïÆ©Ê T NFàÿ(ï´ÁÔO}ò¢Ü‹´¸ùæUmH¥23ˆ)oä§\pÁ7*W0Q·®®¶ À²M¼7°ñ$¥ìû^ÝÅ"!DüÕ­5J¥Ü‹µD PVq=YÉÉÌ`kâõÿô÷‘ì넸Q‹A™°ðÈÈ–$9d°eX\šE”çú,m]ê€QÃ2ÃÚp±7ö¦.YGÜÅ4g>ŠÈÚgË… ÀÖ²½l\bfXcÀÖFê•3+;þƒÒ@øk8çû0"?ýÃDŽ˜îTa#W e0,Œ±°üðŒúö'f†±ÆX­«°o“AÁñÈïo2E±{J©!sBå1BÚ°%Xia `X›6mŠ_À¸LƒSdZká c-¶©GK±I£‹z¤@ x"b!'ãT¢Òà»ÌГ%(vª…±d-À€€ëºoù’êÛ™,3|­Ù~O9#ü;Ú€é/»!d‚$#$±î1‰ˆ; !¬Â22')^Ò1 Á k,4kp ŽPBnUˆ µÔ÷†SÔkÞ¤ëLŸÎsî5Î+šS65Ãê™Î&Ê÷ÄeömP¿gK„N†[ ÃFhkàkŽßa­5Œ5`ì-° ¸£'u[ä Œïm‰Èc¬µ–•R= SpäÈÞ±cG¬„c˜ˆÚDdJ–X½‡áa–A 6FPp]w©Àl Y@¥œM1U¦ƒ“Ý”;ëÍ¾Ž–zƒ6{*ÇZæÌqn]’³ŒÒ—‰zQçTÝHúNÆ0¬ÑÐÁzûFC?Xß`†±œŽ N? !EBü[­MÛZË¡è·IpäÈŽ”R1€ ”„`ˆÈgæ: f¶ÝÞ LÒˆdƒ´aÄŒ63$‰`ä O”ô$õˆ«œìã½}ÙóFRŽÔÈ.NeÁï Zæ3,ÙE˜¾àóàS΢Nä7áHX°µÐÖ² ?cCÃÚZ°±q¶æìS€L¬ø¾®ð‰È‘`…,„HIÝ@)…óçϳRÊ &"ÃÌÚZë3c DÃ`t²cÂQ};ÀVXX¦@%À£Þ„*$?õ²<ðWt•²Ù,%ƒ¤Yü±Ÿ0Ü|䀟qãD[ÖÙÌ`C¦°6ø‹½°]1Ð}fv nnŒ®1³/„Ð!–Ül6­ÖšGGGãF¨dk¤”VÁ¾ï)¥à !|Ëö€íXw,1‹ÄÃY²"‘O†Liu•3‚¸{ÀW»–µ‘¿z¦mîm÷ò/ü¿à•‹È&ÏYcCK,){Z^°•᪊T@³Ù:%„ð­µ>cŒ1B–RÚd#b™áº.G˜Ù!´ÖÚ'¢¶¯ÍÓnïäÀ5EƤêêmB 8àP$˜~a”£™ ¥{Óà'úâ‚ÁÏtéjR‚{Äþ…üTƒþ »%À'0 £BÜåïîÉ@³„^¡R¹"lj%Àùó ßcæ¶µÖWJiêÜ23»®›RÀžç±ã8V)eŒ1ÚãK);ÌÜnwô÷ËEn‘@t^•Ï4–µËK„ðiÂjB ¶fªÙ‹~bˆ>~â¹ß4ø1u-ìÈ·Æ]‡Zž?ô ² ²ãÛãEk¹}êÔO3s[JÙ±ÖúRJ-¥4Dd=Ï‹å°D`‰Ñ™3ghtt”–––Y(¤µÖàPJÊ¢rœë‰ˆ¤ *Åñˆˆò‰ÄÆ1£ÌÀèp÷ÂZŒq1Àç¿+¨W?£9l²jD©Ø2r2~ø#;ºe«S®*)¤RX\¬=tæÌ¹ïXÐPJ­t:v³Ùô‹Å¢yá…lt/ÅÌQ,9—Ëen6›F)e´Ö¾µ¶%„hXYª7¾æºî !¯ LGP$ºíK}B>À©gî8÷ZãÓ}qaàçp|ä\ÏÞ‰~HtaŽ_!ý” ð]ףᑱHàN§3ýÜs/ü_+ZÖÚ¶ÖÚWJ¦\.G£?˜ò'k9zô(;ŽcWVV´ïû¾ã8M "Z^®7îà³…ÛvÀVôèÂyW?3Òßþàó*àst=#ö£§ŠÇ{†9’r3þ£@/X¶PðhlË„ÏÌúÕWO|ÞZ[ÐÐt§íû¾¿²²¢DZGåd%ÙÅ ëy+¥L¡PÐÖÚ637‰¨!„Xîøþ+ívûA–™53Á¶X_åêåþàãÏX7ø‰î|NžNÃ$ÁKð˜‰'N|À±Ò ë°¡Q`‰È”+U5ºe¢(•‘ïga¡öµ¹¹óLj¨ND+ÌÜ4Æt …‚VJ™P÷§VêDø q£^yå뺮i6›~¨ÚDÔ4ÆÔ™¹¶X«= 9F Í–;`0´w\°‘ð¹ü죿Ið9{Ü1Ö?û¶Mîw‘R’;ídà4¸IæàH&fÀ·ˆ,¢î2_¤›mâØ‚aÂc#¤ƒòÐXÑ+ Åb:α_zõË̼d­]&¢kmÛÓi6›¾ëºæ•W^‰î¯ó䄨jµJÖZ­”ò‰¨e­BL%…˜™™ù_ccc.—ËbˆX‚…$í‚DL óv;Žˆ@"á"ð†[!¡]‡!w…d ˜®ÄLJÄׂiTx>tªÀ&\¯6°`7.tUGA Øu_ ®3ˆÃWå#GMtϰ^o£@Ž N²6Ñ÷¬§ZŽÚÌ™‚öÄ._Ï“J(Ç•N¡ ¤TQ“Á̺V[úÚ‰Ó_fækí’¢ éy^‹™}¦Z­Úééé¬qJÚ™áR»wï–µZM¹®[à(Yk+ÖÚŠ¢JDÞçíû÷ŽRWø‘ "‘\ð¡¸3&p G9arˆ(I„TÝýnˆT´®ñ‹œsÛÌ6Ì>luŸc c,„ ˆ0!…ßRAÈp!KÈ̾Akf810ZC‡ÙN¢¬'F§µ6±WÏZ†µ&ÜÚô_SÁ¡ ÊqP(8p”§à€'ggÏ~¹Þx9ùKBˆe!D¡Øn·;årYŸ8q"Z§O-ùçI€XìÚµK×ëur]—ˆ(Z§ff¶B¿Ùlv¦§§?=>>þoÊåÒÌð¶!'EÌ„î6ýA£¼Ð¥î¹¬n„8çLJRƒsÊdƒ(óCªRнòvœ>—Ýæ·5­jòîç×i4V¾qnfî«–‰¨ÎÌËBˆF8úW˜¹Ýn·ýJ¥¢Oœ8aókÈ0@8%Œ¿ìØØ´ÖºÕjÁu]„LÀ 3k­™™™/ !¬V«J¥âÁ‚£v !«Bˆ! | ½›|Ý,óBãz³]ö'î³M2§Ûú}ôþŒË™u1nÎJfÆAPg ¦µ~½Ýî<½Òl}ÏZ»Œ`”7¬H)WÌØš!øÏót8íëÑýñe×ä©ût€&''e­V­VKyžç´Z­‚”ÒB¸DTD <E"r­µ.9Däp„…pºIBˆØUÙ[]W]¼9°³}š143ç²XG”s®ÛÆ55u©ûñmIGމv³àôul¬ô$]0¤n²ªëì2]$êêBAOÒÿd°QArÌIEND®B`‚Carla-2.4.2/resources/128x128/carla.png000066400000000000000000000277501420416754300173210ustar00rootroot00000000000000‰PNG  IHDR€€Ã>aË pHYsììu85/šIDATxÚí}{\GyﯻÏk;³i¥Õûeë±²"ie Ùbc°ÃÅp+UI%!$¹¹„TH9·€ºæRªr¯+rU*P¸y¨ Ebl  Çq¼~K²-ëe­¤]ícÞ3çÕÝ÷™söÌ™33g¤]ÙæîWu¦ûtŸGOÿ¾þú믻¿C¤”¸Z"„¨ä«~ð©(¹à)WzctÒ&lÊ[Ü*ú%¡ññq/Xà WÊ ¤—û:€NÑÑQbY×uẮ½bI"ô@”REQ¤¢ÔÛª®ëòرcu&ðž˜!6À÷#¦i’J¥B\×%ŽãP!áœS)%Éf³˜‰ ⑾ I‘Œ1A)•ªª EQd*•’†aÈñññ†ˆË] >.’Ý¡#DµúÑÑQZ(¨eY¬¯¯Y–¥¸®Ë4Mcœs…sÎTUe à©‚6ÞC4MC£PKŒAð¶m{qI)„A‘ŽãpÆgŒ¹¶msEQ¸®ën©T⺮ól6+Ž;æ1A,iЖÂà{­¾T*1ÇqX"‘PmÛVTUUEQ]×U)¥ªBB0Æ“R2)¥ÏŠ¢,ƒ\ו4ÀçœsN)å”RWá(Šâ¸®ë8ŽãhšæÖj5GUUžH$øÐÐPPtd‚Hƒ?::Ê*• ©T*J"‘P-ËRccLsG§”ê„s®QJ}FR2J)õžÓhùKLЙ|ðH!„ „øÀ !Ƙ-¥´…–ªªçÜæœÛº®;µZÍI¥Rn*•’ÇŽãèÂ- ~£¿W ÃPcšišFô@€AÑ…:!D%„¨”H5¡IMHI!A¥Ò+M +h¤yo®‡$tÞIƒƒ‰d>ÁIè¼ñ¿š&…„”õÀ‹{éðã„ÔŸEñßWO#Íyx£ÂýçxÏžO¯¿RBÖæó…¨·~J„å[€:RJGJéPJ-)¥Àl5)eMa†aº®ëX–e†á6º„ŽLÐŽZÀ×u]#„è °Rʤ”2  ™ÐDæ»ø®=[ÄžU˱:ÛGû(xŸkKf™–%ˆcIb™¶%ˆ]IJd=n â8ºA¡ëF‚BÓ ƒB ž'êçºN è:˜¦éF=Ô 0MÓ PMkÄõz¨ku8¶‹Z±ŠZ±‚J®ŒZ©ŠJ®„Z±ŠJ¾ ³8nUM詌´D&#Uuïi•ŠÌÞfݽ{³¸-a@×Tê!š*‰cPH.ëÂÃoùðt£¥R¿,Mç¡r†DMÀ”!¸è6=Öï'¬RJ;^#¹€ôž'dË;¥…ïlT5T™1TžÉ&øÚ ƒöÍ¿~}Ù~eZÿáWŸìÿGÐs®B¥” º®Ã4M(Šâ „W/A&P¢ß ²eËZ(Ã0Tzü4¥´O‘Ù1âl}ß^óƒËäj…P¢‚RÕ•D£ *•\‚»Šà\‚IÀå• ä%àÕ aDèJi?%¸û†Êû~e}—‘ ,¡šÔ Õu £"aœâ`s|N@T¸¸¨·.eó9¸”²^Á”ÕCBJ Ð ­W<¡ (­÷Á”ARÚ8o„””5âá< Á\—Ãu\p—Ãu9xãpáåq)$£  e D©Ç™g¬‘׸Fau %õçòú39~|þœ»‚ ŸádC}‘ˆ (i@ék5ÓÜEHÀ=>“yøàãéïpœ¢@)-RJËŒ±Š×,[¶Ìm ]A” …B:ŽÃ¨ UU ±Ÿ¡ÿíÆÜ½ÃY¹•E€2¢N ô¿å5××8겇`Þ›#Žùt çóDÇû⥷ËC›8õã¼Ëõ ÛvƒiÚ `øí€¾¬²gý¾ëÖÚ;>yHû+€J)%ÀMÓä„ã8¼P(Dó`‡[ÿ–-[¨eY,‘H¨Š¢¨”R]J™ ”öB²ïÚ\z_¿Á·R Â$‘’ >å`øÿVšÀWz°‚)¯Bù½¤·Ë#¯S¼y­?\€9œÿ607>ŸA)ŲŒÜú§¿ÁÞOÉPJû¤”IJ©ÎÓCw¶eËHîé{aM†š¦I\×e¶m+ÞPOJ™’R¦×÷™×m4¡T/Ilú–‰Ÿ[oåà^!´n÷ô ~»{®Lï mâÚåÁ´–F#€éÿÎ~pJë)ž-ä=û·+Û¤”i)e’’`Œi¶m+®ë2Ó4ïn.Çèè(q‡&“IEUUÕq õa_Š@ö½uué)Â@(‘ÀÆŸØ0¦D$ð^«ªôûr»õ¼v`õTXï`<ÚÃýáxðY4ÞŽ)ÂR¡v8ÿø#J¡|ðÎÄi*²¨ÏŽã說ªÉdRq‡ŽŽŽ6U ŠÿJ¥BÇa®ë²†ø7Pþ%o]]xoZãë)©ß¼êE‰Ë"x*x°RdDZÔuáJ¡ލëÛÝÃ"%"•ÖíYÊĽçF5Žp"T§€©ÿ°ëõG)ûèš`è}’ J©Þ0Õ3ÇqX¥RñM™@×uI&“¡š¦1×uUBˆÀЩè[—¶ÞÍêè“tIbͳndÞ©ÕDWdTev­Ó¡t9Ô.ñpZðÐBçQ÷jm®ǵ@\ =Óû/í¤d°áM±Q› & Ø»M¿#¤Ô­³šëºª¦i,“ÉP×uÉØØ˜ÏKÞ;èàà -—Ë €&„Ð)¥IÎyšRšÙ‘-ß²6cP¦rÃQ½,[ HQ-;ªÅöÚâY(Ÿ…î‹ÓR£Ò´g¤v-¶“´¸’{ÃõºíÈAÕ)Ž57gÁ4zÂ`ÊùNš¯qÎ-ƘݘGà®ërMÓäôô´ ýa eY$°˜ƒP(¥*!D_•´÷¥ FM"sYÄ?د©ÓP¬×t ¹ëé4´ W$ÚÜÓKz;pâ¼+8Ì\€Óå?“ÐΟµaæ]}uÖÙ7šÚûõïåó&æ8çŒB…þª-`Þ@€sN !DÓ4FaRJU¡¦¾Ö»aèRó=øç<à ‰&}.Žš”mΣ*LD\Û Œ(…±Óè¤ÛÈ¥×ÑGœw…™€cž \¬VCzn¢‘”¨- /é«è_›¬ÒÖ !ÔF#f”RfÛ6áœaâE\×E?áœS×uIc._!„¨*YO[HV¢Á÷âÀÄà ¾¹w/–èêhåä$n˜›ó»¬`GI…ê¬  ® &4KQ… !„ ‰D‚2ƈëºÞ+ˆß¸®KE!e\“R2J jL¦½iVÕ”-Üç? ÍýW¹\F©Tz½ëñMGŠ¢`ùòå¾NÃP—µëÍ"÷ç&’I%Í(TÇ•¾ŠQ_Z@Hp±®ÔGSSSðÖð !(¥”0ƈ W'ñ'cxt¿5þ.—˸xñâë]Ÿo:J&“>¨¨ëíºÑ Ü®ŸQJ@h2Éôr…!„©·0wllŒŒ·Î4Öîùëù%”ÐùwwRþô§Óp…@±a=,—Ë‹>Ä{£S7À£âÃÀŽÛADpÅy½HBÖ¬Yƒuk×BáÉBÙBBQP^¾Ö–-àBà…ãÇ1;;»¨•l8ç± Q—ï‹ùp¾0eŒËMkÇcR< b¦à,V”…ª% l¿î:dÃögŸÅèþýXöÖ·"{à (ÍÌ`êèQÌŒã\¥}÷n\¼t Ç_~œw®ÍL&ƒøÃذaÊå2ž|òI|ë[ßêúßîºë.ÌÎÎâg?ûY¬ Lô\ÏÀ—|ª÷Ûº)ÛQÌ@c¶~ G1„¶3á•¿‘/SìÞ¹+''±OQpû¿þ+„®Ã¡¶m£Õ*¤·mCæŽ;yê)d„±{7ô]»ðÔ3Ït,Û'>ñ =zŸýìg!„ÀÖ­[;vìÀºuëðôÓOãòåË€]»v¡X,bõêÕMÿmïÞ½“O>‰|>ߦ¬èHd®àDëYèïµ ˆÍ*žt‘¤•[6¤·¡ë6mB¶XįŒà=ßü&ìd“¹^{í5œ?/^D±\ÆàÈFÞúV,»çlxúi¬\¾«V­jû\UU±{÷n<òÈ#¾ÞðòË/6mÚ„ÙÙYüÙŸývíÚ¸÷Þ{q×]w5ÍT*Š‚U«V¡P(àÓŸþ4–/_~eˆ-Åß·²ø Ö•´%°øQL088ˆeƒƒ=w¿zÿýÈU«˜˜˜ÀÅ‹111 .øñÉÉIé4VmÞ ö®waä™g°÷W~žƒ‰0% äóùÈnbjj 7ÝtEÁÔ·|=ðÀxþùçýëÇA¹\Æ[ÞòB°ÿþE‚²wêewøçQwðFG.P˜V¯XÕçÎá­ûL)1==ééiÌÌÌ`vvÖ?÷â333Y¿ºmC«V±bE´ì-‹Ðu+W®lJÂÝwßú§Âw¿û]ôõõr¹\ ³lÛ¶ {öìÁ—¾ô%9rÄ¿öõ¦^ÀR\= g7qÝ,‘ûdúú>sËo¹eÓD±XD±XD¡P@¡P€eY „ ™LBJ UU‘N§±yûvŒ¯]‹ôÌ †qþüùÈr}îsŸÃ}÷݇û·C­VÃÆñÀ`Ù²e¸ùæ›qûí·û:@Y–…µk×âÖ[oÅ;Þñ9rd ¼rºRðçûÿîÒ §Q¥í—ƒ ´'Š¢@I$u8ŒÁ4MÔj5˜¦‰jµŠJ¥‚jµ Æ„Ðu–eÁ4Môe2¨ ¡ïå—±bûö¶e|üñÇqüøqìܹ–eᡇ‚ã8øä'?‰mÛ¶áoþæoHÔ÷íÿíßþ­ß‘#G`Û6 …î¿ÿ~¬[·ŸúÔ§šwÿ‹P°îCëzS½ Bß¡Gç©jÇ{¯Ä¸ðv€Àœd¸¯ïf2 TJ¤²YÔJ%ˆÐBˆÆ.YŽjµ ]×ýq¹—ŸL&Q• ’]æâs¹{챦4¯k ÒÉ“'›ò=:þ|[ 3‘ßÝ6Ûxõ]IRbdd###0M(‹MΚ±zõj¸®‹™™ÌÌ4·Òd2‰õë×Ã0 LOOãÒ¥K]­×Šd‡x´%0þP0æz¯oip7CЙ×^ê0ñØc`ccHõ÷cxxªª¢T*ù¶xÃ0Íf188ˆ¯ýÃ?`äìYð;Qq]\¸p¡õ½RbÏž=¸çž{P.—‘Ïç155…ƒ¢P(€‚Õ«Wã/ÿò/Q,qèÐ!¼÷½ïŃ>ˆ3g΀‚l6‹~ô£A>ŸG>ŸÇã?Û<¼˜ÔëH ì˨Å–>S5ô€N¢r¹ŒWO‚zÓMH~å+È;VnÚ„ë¶oG“°, _¸ÿ~Ô^y;]³»váñÇ!#|cddGŽÁÆ‘ÏçQ­V±ÿ~>|š¦áÿø!„ðóòù<öíÛ‡‰‰ ض`åÊ•ÈårÈçó¸|ù2NŸ> Ã0bO-õ:èQ/z@oÃ@ÒúB‰ +•ÎŒpú̬^¹§öíÚüG¼ºgžY¿™ V¬[‡b.‡—ÃÙ×^Ãæ“'±aÙ2ÌÞy'^xñEäÚôÿ™LwÞy'yäÌÍÍappù|®ë‚RŠt:•+W"ŸÏò,ìÞ½¹\…BªªB±±1äóyär9är9|ó›ßÄÖ­[!„ÀÄÄÄ"Bz³À_¨õQ…i§¶3uqýï¿ø¶]=ä;ÞÁ'~î9T<—NCV«è/—q ™DéÆ1³r%ŽþâA¨ÕjÈårõôĸ뺰, ÓÓÓ(—Ë( p]×Ï·, n£k‘Rú÷Þ|óÍþ5a{u\àíо‚6¬ªq(_^:«¾ãÆýr.¸ØaO@7àƒ$„Àñ—^Â¥©)ì½ádwí%¬PQUÔ²YT\/^Ä~ï{]UÎÌÌàĉ0 £ ü³gÏBJ‰J¥‚ïÿûعsgSþåË—aYTUÅüc¼ç=ïñ¥€wM.—ƒaÍåWàç_Š]mé‡Oïú“Ž—Ä?ʇzZÔN ôÖô²(—Ëá'GŽ€RŠl6‹þþ~pÎ1;;‹J¥ûضï|ç;Ø»w/t]G.—ÃÙ³g133ã[Øžzê)äóy¬^½¹\—.]¹sç|Ì… ðÐCattÅb3338yòdOóê‹MQ€GÙˆ¿,<ÞHàª,ÞKãêQ$„ðE÷•’eYxâ‰'@ëº „4™WÇÁñãÇqüøñºÿ¾ÆÐ38Lôf$ !p§)ÿõ¦¸ÝÀüÄÝKJ‰D}@+ÇáÊÁ_HòÀjgV zª `Z7Ûüµ¤+ÕâRÏ+‚€hCW`¸DWG½‚¿¨“A4` Ž¢¨Â%ZŠkðú€ES½éà¨2¼¾]Àµ"Åå¸ù–?¹úytóͳÛiü]- ?ì :+×’„‹Þ_Bü¡¨iš‹¶=ÜSNÛæ#ªÅ‡ÒZ÷v¥ž—…‡ 5¸VŒðÒK/]£7ÕéÒ¥K×ô}@'q¿0õÝÛÞÀˆ¶›^¢…£^ºoâ.îP0þ²ðÐz€Nk–hᨷ‘@xYø­ ¤¡•ÁÁñ° Y±øòåËÑßßÿz×ᛎ¼Öëô›¸6€…W#6†è½ës™ú6Æê_ÖX¢+£R* s·Ûl \¬½Á¥F˜ó·s_²"—6l@µZE¹\~½ëñMGŠ¢`ppý…BO]ÀüŠ EÛÝÏ·H…ÆÂb±¹Šg‰:S2™Äàà Hýs‚ºO]© w%´ï–há©§yß@šÎ;QÏÓÁá‚uòbµØ´yóæE‡ç'°\.cùòåÈd®p›obŒµø ô¨—¥a½Na÷n DgðZJ]×Q­VõŠ¢ ™L¢\.#N/ÚJa]×#ý=HFt¡… ÓmøËLBxòóOƻؿ–èzY?¶·ÙöÖÍÞe“YpS0 , úF@;ÃÐ/# ˆbú.²ku“·g±Å^‚ETihEP§B,ÑÂÑY{Ø‹æ?äØvýÓ«†a N·lo„H`kï@^‰oÁ+±,‚%°U™hׄ ¦Í7"[«áí†w>ø ʶ©ÆN àîàe«VAÞ~;¬µk¡üÝßAÞv&.]jqõâ¥ïÿûq÷Ýwûãîï~÷»€|ä#(—ËØ´i>ÿùÏcbb_üâqîÜ9¼øâ‹¾dÑ4 ñ\.‡7â3ŸùÌ¢[ãR¯³^Ä¡žE‚ô¦xÔßßÃÃØ~ò$~í _@¾VÃDÀ7`𘜜DÿòåX±y3”[oÅŠgŸÅ¾={ÚnúÈd2˜œœŒ4º|å+_Á±cÇpþüy¼ýío¤Óiüõ_ÿu“+YÛ¶ñå/'Nœ@©TzÃø ¼ð{ñÏà?¯ÕW`\Àê•+±êÜ9¼íž{à( ¦§§qùòå߀333¸|ù2fff0²v-øæÍH–ËH8N‹@¼:…}û麎û\¸p###€ÉÉÉ–Ö=<<ŒO|â°, SSSmßõzQ@½ŸîMèÙ§h·ùèv”I§Ñ—Ïcå­·¢bYM~ggg}ðs¹ŠÅ"òù<Êå2®Û±ÕuëšžÆÐÐPtåH‰¯ýëøøÇ?Ž;wbóæÍø­ßú-  T*áĉعsgÇò­^½.\À™3g°cÇŽïj¨Ûø¿ ïÛŽ=¸ŠíyEW( óH HŒ1h©²¦ ®i¨Õj¨V«0M•JårµZ ”RßO iš¾ŸÀÚòåHŸ<‰áë¯o[ƃâÀ¸í¶Û`Û6>ŒÉÉIüð‡?ÄïüÎïàðáÃ~òè£ú÷8qÕjçÎÚ5kð›¿ù›8tèP[¾"Œü‘žÔÎhЯöè}•¬Åmý-㤅v\ÔË00‘H€ ¾ÁATK%ˆО@×uQ.—a Àëº~~&“ANô—Jèë2ôèQ=z´)íg?ûY‹¯Ÿ ?~Ü?üðÃÝ+A+NŒ¶ÍVs% Ý5ÜIa‹~Ð7Ãâí ~¼­R SwP­VATù™ÔlZ*å/õüýzßÐcŒavv,Ÿ‡Ûßòà;Ä®Âðì÷ïoÁú ܽ{wKz/àG- ‹Cñ¼…¦ƒÛ(’ï'°¯¥ÉI0Æšüöõõ5©T †a ™LâÂĨĬeËpyn®§Šýe và‡¿Ïž Z„OÆ4H ôÒ:Q¡\Fyx—}H¥jòhÛ6!¾1f``š¦á?Œ33(ß|3æ^x!º’¤ÄŠ+0<< ˲pñâE”Ëå&Ý%›ÍbddRJ\¾|sssMù†a`Íš50 ³³³h|L{ñIaðÛ/€€‹˜öÔ»Y§ÚÑ™sç0²?^ûéO]»Ú¿ÃÃÃPÅ÷育Ù,†††ðíC‡°ìÜ9ÐmÛ`mýnß¾ûØÇ`š&òù<Ο?¯~õ«¾"·bÅ Ü{ï½p]ßøÆ7ðÞ÷¾_ûÚ×011J)2™ >ô¡aÛ¶m¾ Ã‡Ç7_ê¤ýwûRK'Šý½ z{X\[@©T™sçp~ß>Lñ‹?rS/bddk×®m:Òé4þñK_Âé'žÀÆrå½{ñï¿øEäz¼¡¡!lÚ´ /6\Éår9¸®‹@J EQðÁ~Ðÿ¨D­VC±XÄ-·ÜMÓ ¥Ä¾}û°mÛ6ÿþ¹¹9T*•®Úùµ¢¨ßNðÊ÷e ìu6ðÕS§°zåJœÙ±«xÇõW1>2‚ááa,_½¥b'É—^ÂÚÓ§qƒ¦aöÎ;ñÒË/·ýzØÀÀî¸ã:t+W®ôýJ)ÁC:Ɔ Ëå`Y–ïN®X,BQ!°ÿ~ß;ØÜܾþõ¯cýúõÂÅ‹¯)Øaj÷E–Hp±&ƒ|W±oá½Îueð±£G±ktîí·cùsÏA{üqLª*N/[^,˜›ÃŠó†0»iÆŸy¯¾újÛgZ £’çÛ/ì'Ðu]ÌÎ΢T*ùþƒ½k¼áæôô4(¥Èçó( þ³Îž=ÛZŽ ÜôÛíÿdÒˆï'°fSñ>‹×MôÎÜU¬×ðÃ.bâÌPE‘ëºxú¹ç0qéÆvíB2›, úì,èÚµp–-C^Q0=9‰£ßû^× ™™™œ:uÊÐ÷µ×^çår?úѰuëÖ¦ü™™Ôj5(Š‚Ÿüä'x÷»ßÝä0ŸÏcvv6ÚOà߈p7Šé'0ð€Œ¯ûùÔ³4]Íj Ë—/ãû?þ14MÃÀÀë­õ…P(b¯¿7M‡ò?öä)“““¾÷'žxårÙ簾¦púôißÜÙ³gñƒü×_½oš~#ø ìÔ×·³þ? =Yi„%°Û$P7²mSSS˜ššºâŠ2M?ýéO}S2ç¼ÅOàSO=åç»®Ûâ'ðÔ©S8sæŒ_&ÆØëÎ@³‰·C4ÛÜQdëΠ`üJ¤ÀB!RJB"§ƒùQ~…¼|àç'Ð »/ÍKX`M`; \È%ºzŠ3ì §õ2\É0Ñ:@xRb‰†¼zåhm`­ÃÀùûï“1$z¸úÀ›—cì¾ Ï".½é¦¶ºFXó6°vÝ¿;q}Õ1§Ñ}~XQ¹VtÆX×}uWK”Rÿ«!®ë"™LB_¨?H ¥øï E¢Þòƒ`‡ÏÛ) n ¤º¯>‚¢êZÐ m&‡‹º~SpÉ6Ú¼xpØIÜw«¸…a1€íx0­Õ®$ÀÃCë £´0ܺÎW/L”ÎSJ!„€sÎ9¥T2Æš½ù]€®ëÒ»@JÉ)¥®ëº!ÄzeRyæúÕü- F?%ý›̽êv¬¨þ}±Á\ˆ8®ðÞ¸ GIƒp×éåw÷‡Ÿ½û¦^Uÿœ ¡=~éi)¥%„pEqpBˆRJ]×ý¿ëφ!UUªªrƘ+„pc¶”Òzâ”ö,Ä­wù×ÝQ[?%+Û>(Æ‚oX̽âN Œw:\>œˆó¨þ>Øç‡ÇÿaðUâÏ?y“ÏÀŽ#¬ƒ_{é)¥Å³XºªªrUU…a>ÿùƒññq©(Š,‹Â¶m®(Š#¥´˜U›”^œP~H¤$„§‡)®w"²O ·Š0G‡ÅÚ!Îè^Ïâ¢;øáF "ž+-ÂÇïþ÷X³¾Ïoý?ìâáBÑ.0¥”¶¢(ŽmÛ¼X, EQ¤7Ú0öH2•JIUU¹¢(Üu]Ga¢>©|Ìxx®Lσ@nþuý•&ÀV‘õFŒGUê•ÞÕ:£ÒÃyaFè|§îdËö,ÞÿÛ[|ð§¦k¹ççÿ  ÀBX®ë:Š¢pUUy*•òo—RÊ ÁX;vLªª*ªÕªë8Ž£ªª   "$)=ø„vP8P¨ Üø‡i lR´î¦^MŸÜMŒóœvyí´ó88W’.\¿#ƒ}j% ”‚séþŸÏ>÷÷¦É *jªªZŽã8ÕjÕUUU;v¬Iå O Ã0¤¢(\Ó4WaI)k„ ¥´ôükê«OŸQŒ¸F?ÅMÚ‡ëïJ€( T7@®¨«a˜8×ǹ“ï%©¿ý»kð™ûvcù°ákþ?ylêáþxâ%BH™R•RÖ8綦i®¢(¼Ñ÷7­f ÞÜ©Ûz ¶fÍV­VUUU IUUÓœó !¤ŸQ }_…­R€ZU®:¦$ùK.^yÄDþ,¬¬^éTé½»ñ^ï”Þ+mÙbà¿¿®„–LÀèKAK&1S¢/ý×?<ú¿WÌI)sŒ±¢ã8eUÇqÌd2éLLLø#Jž'‚Èèè(ËårLQ¢ !’Bˆ4çmþµbÕ| µb•\¹zçù2jÅ ªtÅP‘Ȥ`¤Œz˜®‡zà\O%È$a¤ë¡ª«0KX³Ö`Wk0KUX•ÌR¶—×H·+5õ†àϰ’ö‡—Ï =‚–JÂH§ ¥0úÒ(˜ê¹¾5û÷?]<)¥, !Š”Ò¥´Œ†hY–J¥Ü³gÏò0ø@ôŠ @¾úê«bÆ n¹\&º®×'‚ê}”R J©óÔ+Ô~ú¤þ¿?ünû7vŒ¸w€ÂBRÙ&7 àÁ*ðçÂä{&ot ~¹,´žD<°1‰ Áaèb«ybß0 ·1ìóU ZyJÂ+Q n¯ë…B𦩆¡š¦©1Æ J©NI Þ= }A'„¨„•@ª:š’B‚PV¯ÝúAà¼4%’ù?$¡ó&fñÖ-Y_e+e}ÞÂ{éðã„ÔŸEñßGr¸)/÷EèÙóéõ÷BJH®kÂvž7‚‰B @RB„é[HêH)ÆäŽ%¥´`›¨{jB‹sn†a›¦é†áf³YqìØ±àâ!te€(&£³³³´R©(‰DBµ,KUE¥”êŽãh”Rƒ¢qÎ5J©J)U…Š”’Ñzs!wµ›^¢y’5™R!!œRê !œ€‰ÞB˜ªªÚœs›snëºîÔj5'•J¹CCCb||¼iÚAF€É@4 Z*•˜ã8,‘H¨¶m+ªªªŠ¢¨®ë*Œ1•s® !cŒI)YÃØD¤”DQ”%ðcëº>B!Ä›ÍãŒ1‡sî(Šâº®ë8ŽãhšæÖj5GUUÞ××dzÙl,ð ´2ê]- Ô²,Ö××ÇlÛfŽã(š¦1ιÂ9gªª2)%‘RR!„Ïš¦¡Q˜%Fˆ oÝ^ÃaV½¨¯ä„šž1æ6æk¸®ën©T⺮ó†ÈoY,,;€Ü‘… OëûÒÀ4Mâ8u‡e2ê8ãœS!I$TAŒ@Y>yŒà-椔ÊZ­&¼ézUUy±XÁÙ½P«b€Ä`€@¡Z¤ÁØØ1M“T*âº.q‡ !çœJ)I6›% „h —¨3y«v½°P(HBˆô쨪*E‘©TJ†áÍîÅnõAŠÍ@¤4ðB¯{ –ežÿú%ð{£¦¥ÛŠ"=Ÿº®ËÀ„N”=6ø@ Ðtc{f†Mùccc׺ß”4>>îEÃàÈ6aO éŠ é!‘›¥áÞS PW zþ·wãˆLl÷IEND®B`‚Carla-2.4.2/resources/16x16/000077500000000000000000000000001420416754300153465ustar00rootroot00000000000000Carla-2.4.2/resources/16x16/application-exit.svgz000066400000000000000000000150771420416754300215450ustar00rootroot00000000000000‹í|[oIrî»÷e7ƒqHíh -láƒã]œÇŠlIôR$AR#i~½+«º™•ÍÅ–¨ÕÜZ3`×—_Dedg]~ø—oÏö~\^]Ÿ^œ?Û'Àý½åùñÅÉéùëgûûë¿äþÞõÍÑùÉÑÙÅùòÙþùÅþ¿üùŸ~ø_{ϯ–G7Ë“½÷§7oöþýüï×ÇG—˽?¾¹¹¹|zxøþý{8]pqõúðÉÞÁÁ yýãëÚÛÛÔž_?=9~¶¿êùîêlìwr|¸<[¾]žß\Ðá~ë~ܺWå§?./Þ¾½8¿%ϯÿ0ë|uòjèÝŒy/c'*¥"2 =®?žß}8èE·‰2"m­çÃz=ýp60ñIcÆÖ¹öýËáÿ[5×ﮎ—¯É%œ/oÿò׿Ü6 œÜœÌ†Y“ßônFäüèíòúòèxy}¸Æ«üГ›7C2pއo–§¯ßÜ´ãÓ“gûƒ<¬Õ?½Í!™šÖcΛÔþùdùãò¬vèÒ®ìäâøåÑõ`úᛋ·ËÓ£OOÿóÃÇ×ËóÿŸ,ÏN_^cŸ½<[ß £\ßapoáèòòìôø¨v9X~8½ÁôŸzû.ÞÝ\¾»ùÿË7ËóÉ FÕØ<ÉÝ‚ýË—W7¯NÏ–UéÚìËÓó»«‹áËñõáÅdþ¦Ù‡w ¼<½uø'—CN0ƒmmþØšÿ<´ÿp²|u]ûM«G:6 MCÂ-®þíêèät8Í*¶îÖ·2M2Uêúæârõ½2}óñlð´‚ÇgWOÿ€ãçO#t1äÕéÍǧô§ý&sñêÕõrÈ$±¦µJ²ìïvÚ¶ö*Û¬œìj™‹‹ëŸî(Þ},Ïàà­þ‚3»ÓVÇ…A¿øø/¶éß®–íVí‡}àwÌ.wÈ“ãñó…yÂ¥ðNt½¢úïÚh»6},–„%öw°ûÕòe¾üÒ³‰¥ìÆÒøéµáƒs‰•‹%÷ÐXzùê+æ÷ðY""Ú•¥¦-%÷ž¥mú<·q¿‹V¶º¥Þ;ÜFÄýÚòd[ø%•Î87·/Î%µséäÕËϸ¦-%Ù¥ÊJ|Å'µÊïr~Ûñ‹Y’/«qmq5˜q¶<Æ?:{ôñzÿ> wI¶!øùå4R+‚;kÛFÒGK6Ußßµ,})Kªù+‚®†ÇîR#¾¦*îVéÚh»¶G+‚e×éý+X*»NïÎ_ÁRyÀô^ŽÎvž¸ÆÝ†§o®–Ãîȶð9§»WQÜš­ÇËP1Lúq@)Ô$oÑWó¾ ÝÚ÷êÙ¾2˜M¿_¯,øÛùéͰçòîzyõ_ußâ?Ïÿv½¼íu}9ì üÇòæÍEµ}ùªúgŒ¿^_[(oŸí¿=º¹:ýðG‚(FH´Àá_;:(`!NîÃW"a,OZX?îî÷ ðœÜïõ;«jŽn·#¢€"–±8Ö"þä_t ¡ (Æ}B €%Î"?ïÚЮë–thÌ7ÖyE½¯¶+a†žíKP*ÒÂõq@‰LSJë˵D×Ö·¢8`öx% vœÚŽHÕ³ØøU •Ì'ß–Mõ{Ù4îØd,ZÊŒ¡ %¤ŠvlPéØäÄHÓo=gÜÔ¯gþ÷,‹ HŽÁœÑ:ìÞ,¯vZPN"®–­¬½ZþÛÑ»ëëÓ£óÿ}ö®÷ù[U:ùËòÇÓ£›Õæ+§ªRÆFÁé5¸ú|3™ôý2ÅwŒèý1CPâ‚ §"¦ùäþ\øª ™V¾+]lL—s¥ Ý ­0¤¦‰v´9‚ûsG›H¸ÇÆ/ bû®¬ ýžd»Ð%ÿÐ$#2¸MœF¦Ìïd–¸—5•ΫG(jlÔ¹Eh‚¦[V@ÉX­Ob|àÚå6}„“¾É¦pgä½›>Â)w6}¾×²I8ËzGPdtë§L '-­/oí[“Š3“>F@…Ê7(S”»?žÂt'žßì²—‚÷\¶D|´å*B‹æâØÑ’$jÁ:| GuŠÅ!‚‰=BIøó;(íR†kw # „-º‹îI‰¶qÀC•»«ΑZ(öMæ GF,ú™ÜB‰;¹õÕ.ê7qI™"\î÷ˆÐ?åÑñÙéåÿ9ºy³–_*›ŽuO!ÌæÚe«]74ž=îÿã6Î"~ò§Ú:»„|}suñ÷åÓó‹óåêûÁxÃöSrÐbˆ˜ºn¨çé@ØÓ«‹wç'sð¿/NÏ{ôíéàôÙéðçé­øÉÑõ›£««£+m .^?U [ÁÍÂ× ÿ±w@îÀãJ6p)¨¼÷¼Â ˜<ÂKæ‚[°ƒ…›X ‰ $F”i€LHIö… °†ÍÁ`5Ç2 x 0…AkY:XÑR»r‡…ß‚Õ*B#Ü/Ê.%nuåTŒ[«¼ °é X¤–+dĨ`BdšV°9W ˜1DƇl•Z¢…ˆ»š¯@ÑÐ…LbÌQŒ×Hõ…!(r›ƒˆä‘€¤¨‡ÂàLL‹LpŽÂÕ-à*êk*èlw„ â[]Ѱ[£¢‰o:`ÉRx!Q‰BˆE9"¥FtLÁÄÛ „pÆ‚L‰c´•!…Ôknš!›nÏãŸöj‚+­Lc±ÛèªdU¸šFRÁO%ZpdR·(,Rí-F6Œüb»­áç+8ppÄÜ\ˆ*ÀZ’A@I¡ZA]å}0˜Þr¦ !¶‚™Rã+{½Úÿz5ª}—Ô“²|Æ%oxÁµ|æ‚uÛOúäæš<|ó $´ ŸŸ×•k&·´0C_mR“BQa^p»®X’RtX—Ì21Àº.±Æàé\&Ø,ʆ27HÓBó= °¥wX&´ÜP™RâÀ,ŧA#€ªê…¦§t`‹â\fòŠ®bã Æšl ×NI˜[¯#”Q‚æ`AÐBB1/Ž’uÐæPIP-bY‡m¾—!Š9ã¨aÎ&Þ“BXáªNY‹j¸E¿a-Oz]èPÒ(›cã hˆêƒ9ØØj4bë°‚@Œ)û­W‹Q§¥E³-îsù–#/¶åþö ¤h?«=[4ùÕl <â”nöÙ‹›hq÷Ö&àÄ9‰˜ÁܼM€Spq‹3(L¼1’®VxýHÁ@…mSYh„Ð|à00MösHá’ÊRÀÐ¥Ÿ)¢Î'À¶S¦Éw 9‚ú4¶Ní<ít´SºíäoâÝØêæ¤æ{›G kt6ñŽünl¡ê”µ¨¶[ôÖò¤×E Ža ‘€0g76°±Õè&@’€Pa™Øo½ZŒ:--š lqoòÝØ|ê&À/[ •/Y ý~®ñ÷û†ùW“è¾;‰»_ù•ÿT÷üf?´a 2SÏØú²ßñÛíëëk‰O~<]¾oo~ytkæåÑëåøÚªWãgÕðòâêdyµnòñÓ5­æ‹ö çêñ0]œ-/—ÕpÄÛ¦w§'Ë®mÕpñò¿‡HmiiѬ6ÞjCØÚ>Lt'ïŸíófãOñ EUÅs³¹¦ª s„Þiô%BÍGÙh«o™~WßT~ðnJ‚Ëw¤ß]]ÕgG—‡ãŸuе÷lßʵwmW¬º|{y]¯oe羫ý­Ã?ÎñaÂ?´ÕÝ„£³ëeÇÑ®ššï–›T±Fn/\Û¦¶Ë¾?=dVŽ–ôOtX»†Ÿè1xþ)ñÁMZ¿Ýú¶µ:»>En>Ö7¡øX±î ¯€pÚ-¸…Ò†~ìÑ.,·§ßݳnÄß.oŽNŽnŽÚ)¸FbmúðFú§ÿ÷/ÿz»R?>~úÿ.®þÞµÃÑË‹wW“ÌÔïäøi[Žnþ|úvU}ýü?oÿá°5t+І½ZN¯—ßöFþá¿·§Uèð¿n†uÌ¿W%ó·á® ]/šÃÁÚËñèõF‡w¡/Ïží¿¨ù·G›ñ}=¬n.ß^œ,WgÎ~ãn<žbÞ~Òl¿-êÎãe;,Çä‘VaMÕ´[7YÖ§ÿöË0Å‘u!MX ë¢.Ÿ‰ 9j1.ˆAKpúxt+XÅêñJ´ Öõðl˜oêÁ‹¦¾WѵŽñ8gÃä­†A,›úA(›i³²óí§~ɲ<®á‰[°ICÔüæØãõç¶×Í׿Ô`÷4r%üŽi´‘. ¬Èj „ŒÌ ©ñ¨a +á žÇõoÎaâb÷…AÑ4¤4oQû6pÜ­ŽØz2 ³æLÉØ(Œ¥Ù3Ã^4ã: YÍ$œËWsEŠ{4Es°™ôb7óŸÏáæhÓÕÙÊé–|MwX¾Þ›fíEþ˜\LÿôÉÌóü=ó~ϼ÷àGȼ–fwß6úóI³Ê ò¢€š±”±.:ô`ièT¬"ÓiÞ·€†¡ÖD )Í1‡$Œ‡1g(HM³5`#±™¢swoͰÍú†Ž…ÜA„zy*àê*MOÃf½hèÌúç m~6=m|nɰâJ:·e†+Ú§§6µïsýÙCVl®–›+¶¨‘/ª‹.EbLE&/ L0,*¶ ‚ô(3(ÀKå47ExèJa´Õx\ˆdAV…$öÈÀ9£f¦€x²JµEPD­b(–5±ï¸mNQ‘{#þù•—9fâô¤vtPÝ5£ñkõ;|cåõP½íš…«s66h$õBuFg„ÀÑÖ/\§GÚX²t˜A1u©`\‚­‚i–U XÖ`Z‚m¦u ¶˜Ø±å”ñ,$åžSÆõ—wÊÜl{µ¡•À3§‘°˜øâ€¤¨È“Ç[JIüìÈëº_d0Ó~‘1­m$©_dLË BÙ“Yd¾ b`#OkØzÙ¦)ÔÐõªMÍ´¡mݵV£ j½h`3þù 0ôðNƒe$7kfØ‹fù }Þ|l茌¦hŸÛW¼Ã²þ+ç0ïCάnžu‚(‘Ϋ)ÇÌ¥È %‡ðÂluscêŠ!ß`Ûfä}Ó˜°+kÆ=óXà¯a£T(hœÆÚá+ˆGDY1˜3on=Ü;;JDñiØvHZ€ÉYÆoÆôäÓa prK¹/ ¿œدë´éç„üüì³5yÚ.åÓ¥Ä!P)ôÎïU²RP7¯¦³‡ÏK B$99R›‘g`WLÜU“·Š0©rkH³©U“fWM½è¼š$[¦7k4«% œ•’6.š’­tÞ;f:Þsî¹–ŸÝ¹·k|Ý]\æh“å¼-U¡”¢Iòä³÷/1Þ¹‰ ¨’ ,H€“¦-#5ÂÈŽy Yû9h¤u#¨gXM˜Ò |>—Ž[é¦D'%͘M[ûè^±f  ¹Í@"u4 bº5¯aج[a͵¦ 1ÐìfÛözÌÝ÷€þ,óz‡Ì¾7ñÈÚhóý*Œ¨!,ꢺ l¢Ó˜fìDRL!ÅjÏÁ ãa¥N~ 5…2¡ÏGÔ•ua‚æ2‰K)(sÕB2bD<`M8Ò «,|,zÄ´§‰š4`eÀ¬ð4Ã+#ƒ#¯ j¨¹á8¦0 YD5ž‚c/’Ã꘦9]báX˜C¦äŠ!ƒDãRQ3"Ÿö¯PÓ­bL”É#ÆÊ£;ké «ðz̆R‚ ¦ÈÄbÏ Â¾-d_œîòËL÷~&?|ý°¥éN¯¼Þ¶ù\ ÞÎ×vzUžôÒ?â"-'m,8˘f^'H']ßKYÀÉIJƒ§AHˆzƒW_䫿9ȸj·õÅœã6˜ØÙ­SF’ÆenX_ÌÝhp—d­‚|úÚ”ÍÁfØ‹9ÜÜx>‡›ËMY#g¿Û¯‹}ÑOõ]OlNòŸùn9¨‘K, cÄjBÆTfhB2z˜OWé-Œ6E†Ék~4Ô °GMg)`YÒtá ©Ì{Y½/Ü ¤ ×‰:ACy,Zʬu·fD#ÄKEÑ GíY…Ñ&XÐGˆ%$*$Ž‘2ØÓÐfåó†6¦j¢œ<ó›ˆÀÑu½ØFÛÖË!QîM´Ï®†Ñéþ»Jш鮅vDâ¥-ê¹fαe9ÜËRLJdl>Ð$ ìb8¿^DTçX€S¡þ{_ß ÚßÏŸYPCzei@aTt6p°:uÐT«z]Å€Q)©¿Ÿ¿8hfAi÷uÏÁvx »¡?ÐÓ„®švãy§¥Ý£ÞÀv7ûL¾»¥¿9ÕÝeßÜo7Ô7–ÖmÒýÝý-X®×6p‹ÃZªtÊØAÐÔmã™&d íHh`£« ÐÝÒ¯T‰H'þ[¯¥NK h[ègòÝ-ýÍ©¯¿§ßýyOÿöIãfÛÝÉ™ dµúâ´ðiOTñgû#1ógŒž“”²z‡`u©w·Mpˆ†Ö”ѤÂ:&9ôUd$A†@Ët]?ÐS{¹BM  p'a\ ?Ÿ Ð’T J,h+%E KM]·›>½A– Pˆ;Ÿ&˜RT§AˆM'PÔÑFuDä+ÐÆ‘ç~IÂ$€;W;q™{F fÂ<ÒG)¢(éœÑ\L{zÏ´ú€‡€qøJ_0P%¼8¸ñ€¶G½xPWŠÄ¤. Ì J:¤Êl€öÖ" 7¢–582AÁ)8TC¡Ô)8¤fTê*¯Ê¸‡G1õ]åU!(\Ý]k/¼Öþ¢³³4Gg>âäÔÜû6¢šü‹9©>'• Ê÷ÊXÁ™¬W6=ÄU¢×o—쵑®’£ðœY’)9&ÔŠŽà”[…qu•=³¤SvWX5lÕwÊî)^¡¤Í‚ 6v›½}5ßZÆ4ØëÒh[Î> J¬žœøe…í?uQäÉŽÅ‚ÁC(Z,´|¶Xì^-¶,yÙ}œÙ9@ ùú!ò )Üà &X¸” z†à–ö–[áâîë'Þ+(HA>Ëø¬=cxÅizδ¸¨OýÔGñ„äâM\ÈKTØ$0W}‰qÙ…ÄgÚs­ýÅÜR¡ÉÒ[W‹(ÊBPµˆWÐ 5˜{PÁœgòíù°ñ÷[Z¡ ¥!ÞÔEÈÙ K E±l€¾EV?產C˜%MO Y8MD]ƒŠÎ›¤¢AxYÀ}‹sÉ)RJé+ÝÖÙÈÙœœùÃqëOó¼$έ„R#´‘ßërFMïSÒÅ1[ònIó©ú² øXÿ³¤ÒmîrJ ŒE©%_ÍݬܦˆO˜ÕÜÍB¶²N=Ïi&±²7ˆš»F••|Õ€ÌIŸiÏ•öõ %Èn ÍÌÎô[‡8!x„£uæQžˆTÕhsÒ,GØ=œ|ÝÂG°¨®@CŸ*77±z_&JI|ÕÇlJuTõ[íÚœÜ4ý ·—Ñóɯ¢Ê¨=éw›W~ž_þüQ¹xCœ”Carla-2.4.2/resources/16x16/arrow-right.svgz000066400000000000000000000121321420416754300205250ustar00rootroot00000000000000‹í]ms¹‘þž_ÁÓ~Y׉P¿ »ÑZ;©»Ý$•ª¤îê6É}LÑâÐV"‹*ŠòK~ýCJÃ!¹"$STì3a9xÐènôpÄ—¿ùøîbð¾™]ŸO/_a€£Asy6Ÿ_¾yuô—?ÿn˜Ž×óÑåxt1½l^]N~óë_½ü·ápðã¬Í›ñàÃùüíà—ÿ¸>]5ƒïßÎçW§''>|çKb˜ÎÞœ¼ ‡¹åõû7¿ YìåõéèÕÑ’ýò:ŒÆÓ×M8›¾;ùòéç¿þþ¯ç͇föÛóæ²Œïú„œuÍÇgwí¯nf­˜ñÙIsѼk.ç×'p•ý¬cÿм³æzz3;[Œîìl•s6ždÖn"¸eBw?:!fŽáõ§Ëùèãðòú»•¦y~ÛšœäºŽ³ŽëôãEFñÓÖ®JÏ+w•ÿß5¸%„Å\'¹e.›ùÉOþé®ra<¯ts»pÜõÕ¼½k®¯FgÍõÉ-½´ÏÊ0ž¿ÍŠD©½|Ûœ¿y;ï®ÏǯŽòü¨½¸z§xQuÛçjU”€¥²§®ýŽÆÓ³×£ë<ì“·ÓwÍÉxôþ|¼Á‘‡ž9F³ÙôÃpV†òˆþÙ;½™_ÝÌÿÖÕ[ÈÊ“îh«íîˆýšWÓÙ|89¿hVå§.ÃÕå›­ÌÇWyáÉÖúO+õ¿Î /ÇÍä:¿/q-W±­ÈUY/šÑì÷³Ñø[v8]ŒÎÛÒÑå€[:ºFNÛÒðhcgòë¥=ÆH„‘ôA0ÆñgÀH©ƒ±VÚãad8 Œ ½#ÐCïñp0rÒƒÙFN逶‘£âC´q<™¼~<ŒÚ…;ÕÒ£ÊaŒq1g¯'\ßÔÕ( |¶iÄj倆<>D¶Q¤³Çê"¹>żbòhÉÓ.ËÕèb[äݯ¡$ñNÄÙÇWGÂ)˜1§ŽúéÕ‘ º£ÎJ¾Nwíß,;ýólty³ˆï^ÍËÇ‹œþ~S<ªÅü¹<ŸçTçÍu3û¹¤ ÿëò/×MéªãúnO”²±œ›hR’²t»¤ag ûÅR*¥Nì=N ò<áãRª¤éªètà‡5JJuKxÇõ·)Ö§LU³Ì;^ÚÊ›©–< ؃nçâˆî8ºs©„:ÖèrL÷‹T+¥Nd• ÇÄ;ê5•R'2ÕˆTòäî;f:ªdÔÈLB p‡L,¥N,r§ZÜŸq7ÝbÜI¨gÜÍ)¸+x߸c¨ú/iÜ[0½Í*5…èq‡?±RªD¦*-Eˆ¾c3z)u"©JddB'Þ±1šRêÄVY:BÑ"½”:‘Z%R]=¿vˆÕRêÄV©{ò½Ùt‡:‘.€ûKU®$&Þ °ÄRêÄÆ*±.²[lÄRêÄÖÆ~)¹ØýbYJ©›ªÄ¸ ñ±XJX¨ë»"nJ©Y¥NEw×2)¥Nl¬댻ÕÉ ”:±Uêd,A‘½.¥Nlª[emRJ•X¬P'Ü›ò"ííã÷v‚1犳‹ZÜû©eÇITK©C¶Jk)îo1ëü©Å çV4s‚*/C Î J©[çSYS…X+¥Nl¬så^1[¥Ô‰Õ*± ²ÃI)u"S•Hà sŸF¥T‰å:uJ+Σ\JØ:urÄb¯Ï/Þ7³:©•Z¬ Ç“RêÄÖEhh1YÚ•g˜äR)¶.BcªˆG=–R%6B•X¬ ÎJ©KUbS”j;,…”R'¶.JƒTR)ubµ.&E­p>\JØT%Ö)I¢³e/¥J¬`]Lê¶[¥˜¹N&×ÈLž’»ÛÞ¢ ‘ÏHGš¬“fKÔ•L©vÆ^"n¨`)°ðj"Ž„`²Žu’Û³zŠÔ×Úwƒ½Íß¹ü ÿVôÞ¨¾Íg翇€‰õrbˆJ®Ö éxÁ•íxh$¿xÈ·<Êë‘w2?÷žzý ¸þ¹gtúî|üßÓóËùÏuÓÛ"eÿyd—¿k_ÛØuüšœ_̛كîØ.š0»vJ2i~?º¹¾>]þçÅMé®¶Ã2ñOÍûóÑüöi—µåëwÎÜ»“ºÍgÏF˜Ÿ`6@XvÌHXö4£le†ˆÁ–äîá@1Z"쎹-?XrèwôîñŽ€bÉ·a¦ ŸD˜Ð1Þ™&Þ+dQÐU¶AæÀΰ¹#“ËÄÄ©lËžDË8šŠÒýÅ È>ïûíCJ§ogM~¨ê»Íoß÷=T›Í©ÍÀË^âÇ0(i„ØKü q0N&½ôOÔ@$±—þ¡+>ê…Á’PLýCRè9¡ÂçNÚ?`Å@É@ôI'Ί÷Oœ3q õ&®™Éû“ßäÍÔ¤íAÔüi'ŸôþÉÇGLQFÒþäMƒ*hâÞä“H„Ö_yò ‰QøiUÞùþÉëcVž‚ J_åµ7k„”¹bì'L‚Q2¶çÝèé+Ýè†÷MœüW(Ü_n€† ±7ùŽ··Ñ! h•Sáò:†R‚ºG9F ¦Ç±@Iýųˆ±—ÆÁØimר'†µlKñ¯ë0Æ ¿Yñ~å›:~¶9#Æg4guçwÊØ=/F„_F‡?[SÜãÙBÐ=ú±tbo†9Û(Sd)WÈŒãñ E#Í9¸«®'€…ƒ2­?Ù@$÷Nb™šcïÄá`ʼnã@Y2âê´äã-•‰š_ÖY«dÒ~‹Œ˜éyo‘U­š‘Ä´íúíôC±x‚›fÕë2ýË7y¼13oÐ?­Ó›wW˪-|8¿ÌX —c²h¿Àp;B£ô y<ð Ue©nµò]3GóQ§·;º #Ç“Óÿùéww>žþïtöîaÅÂ0z=½ÉãiÛ,ùÆg§eŽæ¿>—Õ ü~Ú¿çŸ1{yÒUô˜çŸ®šLèu{û[pÛ~O.ÿ{w^ü |AÁRåö"fÆò.Pœmµ•VI†Ë~- e)K™(å² Uƒ¸f0‡{äAJ™"[K#…Ì™<&[4-¢JcÇ€  …1'ËŒN4R¦qN„/”…ç¥s$Y\X  ‹ ÈÃ2]L¾H#wÈ#0 Žœ¬`ªj¢\HÆnÂeð”Ú†t1¡’GçÌgŒ,¦Aâàî,©ŒŠæœùŽdÁùƒ.ր㢣m[Gq9ÜrSÐu½ØP=hqXœà`ËId6jqº2U¡%þ¡mu SälË öå`[X5÷º€<¢—U@C¡²4"I)Ó8$Kí2@°vDÈ‹Õ/NÆ­Rb*‹ïbL™„ÁUÉxE·ÿ9ØüK%w?[„” ˜dssz9½lÚOÝß²X\În.šÓæ}s9—¿6›þ£9ýN9ÀòraßK*î®·äesúúf>_¥ý}z~yš­Îåø–š _3»8Ïo§ñ–6eO;›>µC[RûƒËN³ýþ»îÏ&”›º}Ó²ihÝ84hO瞢K¤Þ((ïÙÕq¼e”Bã ]ÚhQ0“œL4/7Z¹bk$”#`QGÔ îTìD4ÕÊÂ@r1ê½G‹E]˜¬´î¨ÅV{Ô 1¥d«²-°ªrVÀn˜ˆÀy±w-%Î3G‚€b*`8`K"WˆçÀA¸m,– €bB¡¦®È"I¦᜖4UµÖhâ<žŽZ€v Ð5IˆSj0&CéQc/èì}*aF£•-$„­GE äœÈ˼ ÕP©ì*$c•K0tŒR)óÇ”ò º&)­9¨©¡IÑ\©lú£jѯ˜”È7U®ì×ì™4(´¦€0PLeN5Rˆ".eNš‚GOW¨?*¹)È U-,Rü…æ¬ìÜÑz8uÔÿW©4QêäZLFj݈:ZoôÛ©L(¶~5¢ˆ;ÍÏÔ-¨lµnÅb-LÂæ¾Õæ­œ¾mK±iÙv0,RÁ]a‘‰‹/¢˜ÔÊ20H,4JìÅ]KPQ’B2Y®IY(KK§ˆÁµíXrÕ2I \Rq‚jÉ’ZT'i 9¡øÓ;Á$?t:³yCs:sx?¨ kü €óƒ_ªL1¨zÔý:ÇBÍDôo.óët™õ‚í^4~Í^tعÑE6)…”,ò‹ûpã{}ˆ~¹>dÝ;vááfx`°¨¯…ëáÉzx`²˜l†×ËáÑfx`Ø…[c£$¿¬F]Â;gÍJÆ.'iÏòkKGÄÄë(R q¹SÁ¸ìT zŒ,Ff¿#@ $’0úMù¦ÏÑ@¼úX¥ƒ­Ú=í^ô )o f dgÄÐj•ømnf5c—–©7\ÉØ¥.aW>Ç– Úvi»®éJÚÎW³vÈ)SîRA(E é.EÕßÛ|Ÿ‰1ø2MŒU¥kÖ—¶¿c66ÈæZ,ô$·„èÅ5¢ÒÆ6ܱÉ6Ö€¾ÄMÖÝ=z`ØøÊÔ¶Õð¸¾mf3ÈÔ&bû dX¼Ç´¬Ð­À>8¹ÝÔY|±lŒÆb¸JyÙõÅ€ß7@zP€ö¨)&— «‘Üj¬†0蕃#+—=c`¡öÌiFÑhÀ)HLb©uìq5€8ªÝÑ8·V b”W¨&Á½È!EO²ŒxpHFü¹öhs¡ŸÑéW¬Žãn›ž4/JØá*­œic´Ÿx`EJ¾ˆ ˜`‘LЖÊÒ€¢hë„™Q‚)9ZG+*‚2FÖ*cæt“–†‰Œ}@(%“²®ì¿n­Jð/®UþÈ=O) ‘'lã35%++–¢QôBSO”tÀTL ʼn@SYY ¨£ªATãÒŸ P۔ʼn‹ªÄÖ´r#Ř–‡tK…JE9Ý@zÔèÁÀQ¼GU d© P)D/j‰ŒIp`aB*ÊÏ„ª±=¡ãbÞÈbPZ[ (à '%ƒÄRdJm ”è1zõ§í`Yˆ@mê(ŠÈ€= ‘ˆÚ Bp1HÜÒ„DË2µœh”ÚÖnà´è…´¥1˜Ê¦ä‡êù¿B4÷òäMùо½Ì_7Éoÿn÷µ¾H‘Carla-2.4.2/resources/16x16/bookmarks.svgz000066400000000000000000000251241420416754300202550ustar00rootroot00000000000000‹ì}ësÜÈ‘ç÷ý+pò+®Y¬|gj=Þð­×ްc/öwß²)q-‘:’𑿝?d¡›ñ1ÔÈ·7´ÃêNd¡PùªÌ²Ú¿ù‡ïÞvßm¯o.®.¿y¥¾è¶—§Wg—¯¿yñÿþ‡#ÑÝÜž\ž¼½ºÜ~óâòêÅ?üöï~óßŽŽº¼ÞžÜnϺï/nßt¼üëÍéÉûm÷ë7··ï_ÿý÷åbG,Wׯ_vGGýÈ›ï^ÿ]×uý´—7¯.¾y±c¿¼)'gWßnËéÕ»ãßå§?¾}ûáæöúäöêúj©Ç/Æqg§w߸~Ûîvz¼}»}·½¼½9†SöÓ‘ý4úâ»m?Í»«Ë›ÙÏý« óõÙyÏ=.â{jLÇzŽ£›O—·'æCûµ­ ÅZëqmä|׫o{ þèô«ÓÙ{­½¿:eº'”›«×§Ûó~ä¶\noÿï¿¿»xTËÙíÙä6{¥åmÖ5yyòn{óþät{s¼§çøÞÎnßôF„Þ¾¾Ù^¼~s;~¿8ûæE¿>l_öÓ¿º³½Zh¸´¿çôk^šêü6gW§ßžÜô}ü7=ÓñÙÉwgÇÿóúêõöööâøêã§×ÛË£›ï.oßôF’‚>>9½íov³¸Q¿¾þFß^]ýõÝÉõ_oJÏûÃüÉ®>ܾÿpû—íÇÛíåð@½\F! —Û¸;âüÛﯮoÎ/Þn‡ÙŽß\õOõþâ²—ÚõUÿáôf÷ÐÇýˆ·'ß¾ÝîŸ÷¸÷‰Þ=ËûË׫7ýxö¾·€‚²zýÓäúo{†ßœmÏo’qPQ~ãv¡¿Ô›ØöäúŸ¯OÎ.zÇJÚžm~…”kÓFÝÜ^½ÏÏ#wRH™^Œä«óó›mou¤õ‘æÓÛíÀ}tzõöêúÕ¯l[û¿¿o¤«Þè.n?½ªEjD­/ºãûg••Yáó³ª/fýû6[›ëx¾üõNÒï{|¿=Í@Ó®L ìöSúÖœ•ìfÖÿþ/{ét¯:åþ`•ãÓÀµæ?u•ç‡æ‚Ëû>ÂÑÕõÅë‹Þ–cÑü³Ù˜”êdqP1eòH[ Ö¹­<Úàï× i©ý`?´‘§(~Ý€–³I½ÏFæÄ….úÇx»=íïòöû“O7/>#Fg~„ÏOÎÏ•Ÿ*FgÍ…=r¶§ŠÑÙ>1’ÅcÄx~~Zí©b$‡\Ø#g{ªÉég£Ò£Ä˜O£Ê#ŘO£ÚSĸ.¥ú(cãószº”~N)=—”P£ÚݯwÔÿ¸¼¸íç}z÷o™|þËeŸéÝq}„o^9—Z‘ë˜f|J29•ƒ‘{*`2ÇÈŠKÖqö¿>¹¼é3èwß¼xwr{}ññ×u›#ØÔÍE‰pÙ×vË—s?:åq÷—…Ú—BOA-R Gç:¸%&}ØtVòÓŸª™k©(`Ü£ò¹}<ƸÖÙîÍw è³’ÿþÍÅíöAÞ}–k kÝ·Ÿ-ÔU¿_BÕŸP kÀ2*Þ/£êO¨jýö|™~>›”0êÃ7„OÛ·o¯¾ê~€ÛªùƒoXŸŸMHJþs‹ú`))?ÄÝTa톥ª«á‹'d?™VbuZyÖùž?9PÆç2¥û⠈ʚœ¾ŒV@ÔÖñèxüŒQÅî•¡=“Œj©$aôF{¤°Æi¿”¸ƒýç*^Cê£\ï´æžèz9ݽ¾—ßNÞî‰ËîÏì`Só?ò/¿yê0&v× 6 ÕCæyjYÁPבڃa^‹‘Að4yE ‚ÔÞQ$ó•JµñrƒÓ_½¹Þöðÿ¯æb’ÚûÓ}ÅñC€°'Üö>?–ú?®íïñ±NêcÝwœí±îÛSÿáò_¾ýÏíéLг †¸Ÿ}|å0RÚ;‰)!ÓQçÓ/×Ûÿóáâz{öO{Tÿæ1o§F=]¼zÿúü_·çù}Å´Úþr1ŽÿKÏ>‘Ålu÷ZÔÿþóŸþøû¿À_žP.‡ ¢ðYé Œ|Vfª®f%™Y1Zá'Ö»=È¥õä¨!ÚO.w¿­ôm­šžiŒŠ¡§(F©D„ÌÔX\B§zYrö4À𬸹}›ßöoo &¥Vµ @16Ág/~ç²*N…û•W !êç§øþÎ~GëSÐO¶Ê¿\¿»üT{à'ÙCÂU*ϵú\Ïq•'Æs¯nŸ,«?YðhëwÇç²—‘yÀø H OÑ%$:ðîZ(àÀ»­¸›ΔIQjˆFÚâ3/~‚]¯0P·ú§C€#~gêÂw¡(û:À; oL ŸÍr à3Y'!ú#e— -1¥pbžüNóæU¦ó9ÓuÏ£‡–ó¿4ªÏi8¥"†ÙæèîSOLÕ«ëȊʹ—*^æf%çvÄRj¨ø<¤ŽÜ_Ô’0êg, £êÌF4Š *ÌmD³'â€w4¢"Vaj1)P2{ˆNJ0PlŽj!ªà›ü„ÊÜ©œ¯¥†iÈ­ Gp¼|˜e|E‰U~>ó-‚h‘¡Š÷Û£Wj6ÄQªÂF{¢‰¾|^¼«ÿ¢¡‚”>ûJdæ¸QAç~‹^€Ã™F^\åÅ\–zº—)ôä¾ä¼©/¿¤¼@î‘˳®‹¬˜A%LWÂJóPŠ E*T›iĬ¨ ²Ì5Rk3œoÈjÄ×µ3ÙªÀ¬0RÌW…XÈú¿¹%¯Öj 7åndþÀ ñË.Þⳋ÷C'Óâ®pPl qµ¹F—¬©Q+¡"Ïëc‚3ïê;'o·×jX†Å¯8ßþóɇ››‹“ËÿñöCÞîþŽÌÙï·ß]œÜîZTE‚Bø°ôÏ@SLax¤Ÿ¼$®_fI 5>¿$®Ë%}5_öZX »˜s©ÄäxXo!‘Míyä}¤=ß¼ï[ÍÏþ¼½}sÕ?f¿–\ês°“OÌŒÍæ º@= ‰MÝ_¤ª‹-qÓBPì˘+J„Ýã!Îõg4'gþ¬9ÉܜЋ’9Ê9ÕâsÐ z°ñ9a©nL+æè_&x8±¢âçµô7¤í ~­|)‹ù¢uO°~®î 9¨4¹ÛŒð‚Õ¸ÊX`¬±ž¯²^·RĽ”OQ€Ä™b{Ôç§XBEC,Ë'.‚ÕÈt¨¥€t#^ÐÔúOÁ¥§0à˯‘ŸÍ_Ù¬ƒ‹lòD ØBñ×à‚hDS[yï˜Yõ9 J|‘À‚dâ÷d%¨°XFïyv%.q>¥ŸE>–êZ Œç¥ú’õ|κô~Äùauï?c 6¢zÂ× A¨öŒÐ 3SeÞ@A w†,2\8JUÛQb”Mbb¬ôòþU‹U¼7ެ«!ðY<ÐåËx ŠK„ßãn üjÆCµÎ”‡ZÄÈBfÚ3*Ty®½´78P‹`XQŸâl‹: mޤ`?,´ßÌlCE w»!™lŽ\ 2Šð†¹ <ÐiŸ¥jVü"¦DæRñK"åŸÑ’¨Æg-Éð0 @9ëìÅ*ÎS¡%ïùœw´$Ñ’Öúˆ¸®lê‘a ¬€¸VÿÚq} [.êsBŸVÁâÂÆ£äVYÏg¬£8©€;9Óĉ‘@÷”P å^ºhFŠïœH£¿ šÎj«EQêÏé’¢|ˆ8‚ƒã  LJzˆ¨0®Á$ŽÎ_¨, Ÿ÷yQ]øüW3Q±ç{i …ܸYgîQ!­KL„­ÿd6GL…”tcP4Œäå£`O&…CGQC4<ð,"Ž8÷(µª®ºÊs©Ö…‘‚к‘"U[1ҪĢºb¥¨ôerqÄ{à ­CVªð¸¾‚/¿|8ÿš—âÿQá £PÊõ³§y“7gÐ P­•¢8¡â¬¤N^®LóÜ‹ iø¼CÆ :>"÷2éÿ‰â b?c ú… ƒy½­W•¿Ô\5žÏ!×õúóš_wüõdiô_O–i£ùû6íÓÝ/²ä/ðœ}w±ý~üœoOîöþäõ¶u¨ö"mûe·ðýÅeÿàGûÄÙ~„cŸÊ9èp$üâþ#S´°ÝÍ›«ï__§òn¯?lGä•£÷W—¹¬Æ°ó¬ÇÞp†ßèùø)i3'IN!»›Ôáåë4ÊÖœúiNݾ{¿»:ÝS¿»¸¹èÝixª‘÷ò¤'î³·Ý¥É6ú»ííÉÙÉíÉh¿{Ší—ÙÿfÙ«ýýî6ŠÓÓWÿëêú¯clO†“o¯>ôÚhcv|g§¯Ò•On{ñ®7ÉüݬÿÞÿNXïFû sæ”\¦·½Þ?@¶ö›mýß]ä ã»íÏÄü1'™v’ït¿ÃŒëè¿ìWÙ¾½>Ðxÿ›YÛ·ß¼øSZhK{¸úðþÝÕÙvgÃûëg{›Þ îõLý¤6TߟܾY´´gJÎû½ê—úë_-_ ¼lWæÌG×Þn_]^]þÐþ„ÊõÕ_Û×íîóàQ¯€‹W@:üIì92È÷ |Õ/ïòlJüÏÞöçÔ^îÛë·ý?¯xO;;éƒÎõõɧٴImMü#çüÉû _ý¼œä ½äþÜ)—JpzÁî;ÑŠžß¡VëX3¤‰Â†¸˜0 t\ «›l( ¹I?”Eóh@hÅ*ì”pf±F3ÓêØQí§,¨˜ã WaÔD1öè§D*¬‚KÀ¹C)Qs¨sÁ 6'z!6Ø3 ï0¡ŒhGg¼ô”~ ó\" ’aV¢‚N=ÑJA.ÝréX*¢@JrÀ@‚6Òò"«ã@¬ÈÑ…¬¨ív"ÒA…2ŒEº[kµˆí郥‹èTaÎ5¨+÷|Xvkmã¸1kÊÀĩ˙*±IÊM\Ù{ ²&^¨»9s©&©E­]¤ŠÌ16L%œ£s+*ŠƒJÛH‡‚ÎjMïÕA°3(¡žöású¡›ØŒOÑÓ°zeM"²0R§RDÍ)Q¹SÛ œ‹Ën¨—0HZ©fÁÖä i3©nHWëŒJ3¤MORje'3{wf€¢WAAv‡~X$›I.R`¿îj$²4[p싉n8·p€Î¥p›‘±p祊‘iJš j. Uh°a)J–²aXºÇ0c¤10nÒÙX£Ù€ƒÖþnV${ZºCŽõÂ0ø@->8^d%¶žÆE+«l$ñD5Ošlƒ£‚(Š„6X W…°瞉 ÖjÊIÛ=±Ð`ä¨àI¢ªØhbj¸.lŽm Oƒ´Ñ ÁŠªZ4Ã… Ñž&Xh£Ø“zîä›vÂdƒEQ5„z mB1¨­ô$Nï&6ž †b¨³Â$ Íû”И7–~hR¡i#Í™ö.V E7®Ð8$iHAù"’ˆQ5“ ÛiVX Ú&´W#Ï9X7ùD`œCc,ª$ØE‹Z*Tòž-8Q£€õ4 æîI» SZ*“ÝÆ ÚbHÌYˆA 'µ¨’$ÜEǺWQ«35j sÍ‹ )6YE˸(ínF;Ya!© Ö¨µÖ t Còˆžf…C*wžÃ¤ø]¤1…J=-C.‡¥³2*J´8K´ùxÔa¡u7Ôj!WdlB"vÊ ÂT“uqó꘎Š’³jf)¨”/ˆ"=Jè.0èn©PXÉ3€˜ vé2hážF݈¢Ù%*Eu})7aÌÈ¥RAÒÓÆµB85ÐÜ]˰/Û>°"ÆÐB¨¤ÅshO# ¬BVUŒ"º» M…‡qŠ•b½f.ýÍQ*jFrBMZÚ+·)a´©˜Õ¶) s˜u`…8˜6鶨’Ò 6}¿!¢"¯–;‘YS1ZÛ±‚ƒ(ÒnQòû Òš*gÉ­D•2m„J¦–;$síïÎXr.ÜÏÅR(‰ÛNëlìÍ»$,x3céi±³¼@æc¹BÊ€"•±êi™¶íQd7én –œƒ¨zK)HA¨“Ì ”ƒZêá(šQ#êa‚‚™_˜[Kdz>ŒN©¿l¬’4dÁ•¼è‡/KбGê œYþ`mÿ#à×/žPì`TýéÅN`0½gMxbübEZ7gÛbµk ˜Á‚¸Æà J¨B« ×0¼%1T¶U†ü]MÐLtõN®_÷÷¨-iË ý#<8¼£ †/VpäóþXF.5á“·7Û5žÔDã¨+Rà*ÛIæ¼»ø¡qV^\)›6 ÈÄ2À0!•ÌW,=Ç#Ó%ÃŒòsgÏä••`^jßU€ž›–ð0î‹Tâþ~¬…¹§€§VL ¡ÈHST«ïΖ"‘u©“’yÖP5Yº#/€XbcX­ôÃÀ «·ó| ™vGê…œ9k$&âF4ŠVfäeáášBškS!2Bëïê«T5;‰ÌÕµ§Ö‚"ùÉnØž¡h˜nލª“(î5„7GÎ…xÈwS¤¤,=1r6!Í ¥Ûæ(8C¾‰e¸‰þ¶‚…r—áJ5dz¨œ‹È{9sxO¦bÔA Â¥µP ‰žÖ6sò6ž˜Ér~/ÎV¹_²€VDáêB›L5Ì­ÑLÓxІ6ã¡Z¢ç$/Æ\ûÉŠ p¯B,­Èð5Ë›EÑÛµ¦Â Fàì"4ÔÊýŽÇËŒ…ÌÜ$7Ãȇ¶—‡xq*ÿ8¨r©Ô5HE– B*T|©ä*‡ˆJ!*Ôê«@E—€J]Td ¨ÈP5@Å(~¨$i¨$qPÑ% R×^*¼TáYSèNkp ¯À)¶„S`§È!œb%pʘ%ÖÀ”ºSl ¦èLÑâ+` .À[€)¸SêL¡0E–` -Á\€)p¦p‰˜bk`Š®€)´Sp L©`JÒb ¦Ì¡(±¥Ô(–P ­@)¶€R´Ä”BK(…V ZƒRhJá(…Ö \Rt¥`ñ”"%V 8„R°Ä ”bK(¥–X@)uJ© (K, )¾ ¥ÐJÑ9”’¤X@)Iõ(¡YR¼ø ”‚S(EP •XR` ¥è ”s(ÅJ@)IZ@)I\RàJÑU(–PJ]@)º¥ÐJIq- Y…RðJIÝB) Å@ )Rb H©+@ ,XRê¢Å—@J]Rp¤H‰C ‹/[Rh ¤ð "+@ /^RxHáC ¥Î€”vžã( 4YÀ(8Q8 4CQ¨ÁáK– J]‚(°Qh ¢ð ˆb3EŠ/@”º¢àD¡…V@]‚(´¢Ô…– Š­(¸Q´øDÑ5ÅV@”:‚(ó|臇 ˳|Ïô¶÷+ ÷ÃD—ýËô*Jðã´ÿ[ƒL¸Æ¢€©B7ÍíuP³r@{5ÌT±)Ã=¢ZO«XÙ*vûóú>þÓ 5£„¤(0BRÓ¬érÔàòG>£ÁíwÛ~ígŸÑàû‡šûöÃííBqMWz¿îäY0þäF2<\X©ODçêþïëYéjuUyVÒPq4žº:“àiH¨%€Ûà1vH¨L•ÇÓöäi$’Ýij•°”ÕÊÓÐÖÀ#ž„@ŽÝài¬äœÅ´ÎbjV2\y{3>›Ocôî—+ü†9@Ë yš+H±œ–gIE"â•Çä£%)fUxLRZ.c*ÊÓdF ›VãiÎã­>xšEÑÚ$å8*ÈU€{u4’4ˆ¨=‹ yÒ€0uëc]FX„«J#2AµH (‚M:²Âéíë`QöÁ³ÈoÐ¥g®`@œ¥Ýà9¹ì±ŒË¤“œ6…Ò  •ÀZ­¿—Zf,IÃaÆY R@`ViZQc™¤QUtV¹b{»#4–¸æDqX ·ÇžW̆Š:Öm%¨³v–¸¯Ñ¹¹¨ÎÊøš°€ÍÊýª ¶ÌpŠ=‘Ü&øAxNÁœ!xžf€ˆœzÄ-ÝPç ºá²Óêˆ`YO(Õˆ'xŠEÁGÜŬ‚OáI>rž 8Y’T¡È@‡Ä#4 FÁÎ#lÔÐ%=ŒÄ*ELÄx CqAѪ•=`ý]Yýñõví7©²£™mnÌ»b…h¨Ëþ”$hÙk¹‘ÌjØ@ m4U: ‰â86o‡˜Dz7¡Fò}@j4„`kD¯ˆÔhlÔhQ5,im\»Ï¾¼£(6—.Ï9üm壚 ­{ŽZ”I”I×Þö ÿ'£'o_Ù_DÅöÖÍÉ(cÜ9<5ugìmˆbÚ«³9v~MØN\‹ïÙh@tš.Òn&–tg;>PÆÛ7vwÆÈ8z¥ìh#-ÊnuÃ|+ þ¡[R*úÃM;þˆ€:N÷ü_Éyñ^$Ô_Rå_Rå_Rå_Rå_Rå_RåõTùéˆ',Ï/*}}ès}~à¾þKŽô¨éþÜØèÿµÜx¬ ~)')'Ÿ\N.[ÒŽ†£×°ô¶ˆZhöæàõ= ÇŒ@ßÔ—6ûšˆÆŸxÃãSvŒeEû_à5ÄØÅ:Dâiu•DÐTW¹DŸTW4˜âtO‡€ÂÕ#Æê < ©8Lª+p&žVW‰-‚Ƥº§B 8)®Àa;-®À2^#Ƥ¸³|V£Iq&ÍŒ'µEk+Ð(hŽÓ—ÎÐú˦o¦A¡8«Ù¤´±¢Reú’„ùLK+Ž¢ AÓÒ*ïL§•ïú ÇÊjhH­:}IOYV¸uU#Iïû’ \îÜh‚ž4%7‚¤í_ùs©z7'JHc‹ï)—| ×¼8}XÜ=ì¸$Ø/i\¹Ô»•Š; ’ô;IŽ·½ÄG½è^/£öôN{£’e§äÑènÎÑbàÎbFËò;ËMp,qFSÅ;S-Úï,z4}Mô¸ó‘Ñ•lïJ£ËÉèr£oÒoŽ>Lw><:;Μ]° ŒÂ˜ç|sð>/‡ˆÂz03V(è­=Ëö™>VÊY7ûŠ«”ý‚‡qV¸jµËPZ`¨ìÂ}‚Ò‚½†¨kÅÔÆ®¢A†¬à†a_ù ظ#±ÒȪLöU"©Õ!iC±…h;³Þ©©– Uß°í«7lÛ¯‹nØ÷UR [rÜ¥@ÈÔ“€ÓÜ÷U#²–IÚ®ºD¾sXÌaE€ÙÓ—Œ¹'a l^(Z½§Q~Ëqm 2hˆì<ÐR›IÃÊ.´áùÆ:9I•jL{5ó‚Ät¬“ÇÇluò¸’±NW<ÖÉ£`Æ*y”ßX%r«äQ!c•<*n¬’GýŽUòh»*y´•±Jmj¬’GÛ«äÑFÇ*y4å±J¬}ì=b¬‘GÏkäÑÅÆýtôűF}v¬‘Gç>¬‘—/”À2Ñz–ìˆå¿rv„ûÐŒ›LI›É[ad¶å'íi^*9KÒÈB°ÑöžRóƒ{-uô) Ötì½ïa‘ž"¶wQLÞÆäjI ÔhœPÜ[û_ÎbI«»RI4ývOÞ™Üíû@ÈÚÖÈb¾QèIX5I´så鲃ÐFµ§¢Erf…䂉˜†Rä²iß·lu2:MßÜ¡a¡*æf&ÅÀ‡¬ƒ€@}˜{¤µ ]S.D3Nn­‘ÞhR“¶ïòöVŽ´Ñœ£€ÑŽÛ4@{ 3#Üͪ_¨ ¦ªÉhUÍÚà}ñ5ÒÚæº[áHE„Qሖ2‹½Ì`œöÒ‚,œŒ{-dTäÊIã½¾d:ÚvŠÅAÉ{ýGOcŽf=£¥˜ííl´)ÕhŠÚÛ^n$ŽUçImv6ßKZ…Uç{‰Y@èt/©É7Z©‰«'U͵-Æ«b$ É•tÍ;4ä¡ä…Ï÷ÞœÞôÿ=Ýÿ;û±Ÿ×l2\o3tÆC¥@Tµzª-ó“‘ZªP(LOP¦4]¡]^ä¶_ñG‡ÿo{g´ÛÈ CÑ_Yø-À`–")RDû ý‰bQô¥/ÝEûЯ¯¥‰»»–ÜÌ$NbÏ^™AF”L^]ó ‰ÔYV#BïxÊÅuõ”_oÎVîã™m‰Öìt[Ñj4ŽÖËÇ=ïÁÐl·•Ã(¥ÈfÍ ›A6ƒlÙ ²d3Èf¯*›õUIäÕF»óÖÕŠåT©^Ö;·ÝØeÛhˆÞ”BÑ<@÷íÌêíJ|XcSÛ~ðþéÓwñt¼ÄóHs¾sÒ\É— cSg›:ÃØÔƶ4§¾Ù8šÓºfã½alƦal:7ŒMalƦÿ cèeŒ^Æ;êeÜ cÓÀ06õ†±ÓÚ9Û7Æ>[Þº—·ÿ¶‰·÷ö[g[þ|„7 —®;ê©ñqNËb–¹³®#9‰°W$Ió¨C^Èl„iÐD¡S®KÕr-õ=R&¯€’HU:a=¹úoÇy&3WJÛ.]´Ž•’êµJ½Q«™e/Ö²ˆe -[QžŠÎ®%kóàFÚªS&nSßßÖg·bZ&/U!0oS“8…4,eXÛA[蜕 %>^9…'mÌRiNÝÓ×R Ò³¨Ü†º’¿ ’æVÂ[„šç¥=‹äS–ö$iWˆ®,ñBÎiù˜rÏ-„$8Gû ùdQª'¹Ô8¶ hÓÜN—ˆ m§Rr+Îåñ–š\Rýkq æöM®šD†³´1ÿzÓ…®(š–E'¥±?lvoHµš€æ(6æ´A&Ñ:h%qD“ˆeCPãÈ©qù&fÎ"äŸÿ+*Ц|üÑx|•˹¥ô]‘/g’6'e"b:½ø<‘üòç_¿~þm\^¼(“¤uöãÓ!q;›óŸÒá©ï08 àÇ€~ ø1àÇ€~ ø1àÇ€~ü¾ðãíÚ¹ì\;ÏÑ}%ûÕø¦ûì{`ß1˜úـ랕½¹½ÜÝã¿·Ä{ùFˆyO@陋 ˆü­ßmÄ?(i„k®A¸á„k®á +„k®A¸~SÂu_´yWÜ7;ù¶(ÔýóަâÍ=‰ Î8oà¼óÎÛ‹9o½Ðùü³}&Þ@z{Ò›ÅÝ’Þ< Ho ½½˜ôÖé»}Oë¾î¹·ŠD‰ÞöD¯Dß!5ñŠšx­¾°Z¯øðñr×TOqØÄ„îs‚—EPd@‘EPäм]y´ØòØ·-ßLG½N (Ê (ƒ¢|ïeààÓ ÀHÈûî‚ꜟÕ>>222211766:99988888:::>>>000;;;C88;;;+++.**/**622955844855666>>>888%%%($$556333<<<<<<777<<<:::;J_9Po%-9™PPÎ{{U..;;;MMMNNNPPPAAAMa[ƒ +8ÇssÑŒŒx??@@@aaa]]]LLL>>???;H[7Kf4AR²ÐGtRNSËÓÔÖ×××ÖÌØÞÝáûþþþþþþüãáûþþüãÞ- pHYsÜÜ¢@ãÈIDATÓc`ÀŒLÌÌ,¬¬¬l쬬œ@.999yE%eUn€šº†¦–¶Ž®ž¾!H€ÇÈØDÓÔÌÜÂÒÊÚ¬ÂÖÎ^ËÁÑÉÙÅÕÍ, ç!ç©©é¥èíãã àåã ˆKHúùA`”´ XK°\ˆ"„†…ƒmኈŒŠÖ‰‰óŽO€X›hœäi¡“œ’š–±6#3+;'7/:¿ °ˆêôâ’’R¯²òò Y°ç#¦ç'Ã$Ú0‡ÞÁIEND®B`‚Carla-2.4.2/resources/16x16/carla.png000066400000000000000000000012671420416754300171440ustar00rootroot00000000000000‰PNG  IHDR(-SkPLTEÿÿÿ>>>222211766:99988888:::>>>000;;;C88;;;+++.**/**622955844855666>>>888%%%($$556333<<<<<<777<<<:::;J_9Po%-9™PPÎ{{U..;;;MMMNNNPPPAAAMa[ƒ +8ÇssÑŒŒx??@@@aaa]]]LLL>>???;H[7Kf4AR²ÐGtRNSËÓÔÖ×××ÖÌØÞÝáûþþþþþþüãáûþþüãÞ- pHYsÜÜ¢@ãÈIDATÓc`ÀŒLÌÌ,¬¬¬l쬬œ@.999yE%eUn€šº†¦–¶Ž®ž¾!H€ÇÈØDÓÔÌÜÂÒÊÚ¬ÂÖÎ^ËÁÑÉÙÅÕÍ, ç!ç©©é¥èíãã àåã ˆKHúùA`”´ XK°\ˆ"„†…ƒmኈŒŠÖ‰‰óŽO€X›hœäi¡“œ’š–±6#3+;'7/:¿ °ˆêôâ’’R¯²òò Y°ç#¦ç'Ã$Ú0‡ÞÁIEND®B`‚Carla-2.4.2/resources/16x16/configure.svgz000066400000000000000000000403301420416754300202420ustar00rootroot00000000000000‹ìKs9’€ïó+´êËt„æ ùp·g;±{ؘÃvŸ'8bÉVŒL*Hº-ϯ_-›,‰-“ìèp‰Û$*«ùU" TéŸÿz÷îæì·f±¼žÏ^Ÿc‚ó³fv9Ÿ^ÏÞ¼>ÿõ—ÿùùÙr5™M'7óYóú|6?ÿë_þôóŒFgÿ¹h&«fzöázõöìfÿZ^Nn›³?¿]­n_Ç>|H×÷i¾x3þñl4*g.{ó§³³³¢v¶|5½|}~/û~q³–›^Ž››æ]3[-ǘp|¾¿Üˆ_¶Ê¯k.çïÞÍgËõ™³å[‹éU‘Þ æ¯…0"Æ@c¢Q‘-?ÎV“»Q÷Ô2Æ]§ŒË±ä~R¯în ‰ßÌúè¶öBÿ¶üùrÂ玴œ¿_\6WåÌ&ÍšÕøo¿üíËÁ¤éjºu™Ïð;z;wd6y×,o'—Írü¹¿=¿ÜÐéêmqòõÇ·Íõ›·«Íçëéëób2Øúóç¼úâF˜Ö‡>_vûh{¨ãsÝËLç—ÿœ,˸Çoçïšñíõ¬Œ`1O«óſƿûø¦™Wo‹“´ Ç“ËU¹ÒòÑUŠ}å*—óÙÕõ›÷‹&Ùw‡5¿º}¿úGs·jfŸFS¸lAZ^Ÿ÷¥³{æîv¾X®®oš¢íј˛ËåxþiÀ匛É?ošÏãoFv;{³óºwÓÛâè°óèÇ/GÿRÿ ¶íhWB;˜RwZ—aÜ4—åú“›“ËóßǨèrÆõëHŒŠ®ŒGjƒ}1*ºWÃH*^ #i†zI3UÃÈBZÍ[eý±UWÓ!Yã’°~í‘lXL;TÝÑ.ÉÆ}åÊ⹨,nAeñ¨çrlDÕH²‘T$ÉFڛˑ3VËäÌr÷‰çcA‘sî Z¶¨ -{Å ÖªãÞ@e§\ Tv:,ˆåœ-ó± ²SôŠÑåÆ(Húé{ct­èZ\sé‹(äÕ|…+.~[uÔ›ïAæzÑ ²`½°ßªë-š©c5‡R§Ãü‰›¶‰Iêm¦r×ZŽå`¨àrô7+­ÚŽSдž³ Z½,À¨Õæ,£Ǔ֛³QHµ)I‘QÚ)¥».˜Pœ3j>?bÿñH8Ì…wZ›„D8‹í4[¡ý È†»õg´ì¼»ïƒ]iç•Í Ü‚ŽÀž Ø•œ~ª¸/ŽŠßRpÅÙ#P£ôcHkEb ÚËÙYv:;£«#óùÑ»^ `¨èã¨õ|½¦SEŒP £UÄè!1šW‹%îPqR»SEŒYêaÌZcöÞ—ó!sׯ£)1푸œýwÇäÙð+‹cm´±‡Qå°Ä…ж}ŒLÙPÈu§±*‡¨iÛöЊ»ÑJ.|€K44½œ^íû¸âNü`ÂîçGLí½ÔòNµNÄ`O«^MczœÚ¼ë¶?­í’ÛöP[o>Áç_7ÛΉ»ç®êøùJ“¶;sØ*¦vÎX›«þ¬6kÎÆ‡dn¦¶M‰u)É¢;#Ø:ø×"Aƒ  XhwÚ9?&$·úú_%sTtÅ÷QÛ™û© €ìa»µæù<)íøÂ^1€PÅBUõ@¡Dm;šÒa”¨mGSBéY½í:Ù>KòÝaу¾öPÚvD˜%§Ýj-‡ÙÓjÉÛö‡¢-kÛöÛq@²êNÈ~`܃¶í¥Ö…\~G-ìÙw_ÙÁ\޽·ý;0î4òÙ–‰ëg¥^½]4åÙ®¯„žÈ [‡ßÜwþ:»^•‡¸Þ/›Åÿ+›¿Ï~]6eøú|d²{lͧ¥[-Y2ÚSÎQ„‘7´%\ <Ÿùdð´ùº·ù]©_“Ùòj¾x÷ú|Õ¾½™¬š?!_ ýØ!Æ’)K‡WH2¶Üá•s{ ÊÚÁµ‘}N\Œ_ÁåupIN$­ë^X„YP;¸‹R¥$˜QOKK -Ålê\Hž$:¸vÉR+›“G8?//¢§yQ¥Éh‰8ÃÙh¹õuïðbOŠb¹ƒ«µP”Óâ’?ŽëÝdµ¸¾+¬.F˜Ø48šÚ&  òA/ÊA‚„¦FYj tÛ¥dt´SÀÌ_©GåAI€LÚ1^"‰’ă,è‰@ãñš©;Åi÷cŒWMÙèÁ4²¨Ó•íÞzC;­õ¹×0)“²x3B)“Šñǽ¨y€È²6KÄ丅­Ñä¦_l–N] ™z ?xa Õ)¢P‹ N9"ÖÁ’rir‘«ˆ¶`ó—n¢à ÜË»–—%Ō›îòÀµK"dØê½º1°­îV˜“ nz%?&‘p69-q©K|d) ˜¸Ö%Ž 9 °ôÊ@‰{e/Ýìâ:\ä •‘Sé6É<`ä•s§¤,¦ÃäZ;wbr%¦°“kí¢’Ùɽº“ › ¹UNž”\ !Lœ^ˆW&^?w†*yhõ7ž”cÀÄëçN 2õá"w¨íäb–L¼ú¾S@p¸¹Ó+çNK.!2dâÕSg¸©É€£JíÔ) 3: xÛ'H‚`Ãuò ÚĘ8˜¸¼¯L\kµBšÃ†LÜ«ïóÁœb°ÄªgNd°¯ž9†ìâÕ§eÒ¯œ89™ ˜¸×þ&  ìãXý'9—n0qªíãâ†&^=sJ¶ìC&®Ã#þ¼Oº8ð“_ñ˜‡=”R¸¹p÷IM¢‘Ã:O- z yôHgægu7ç§ÝzLbI-;Zñ-¢@Õ‹$RÓÒ…)²ØÅ(cbÓhßYéúZP’P$鸚p" tÙøÔNÙ«mÙŽ§iRfˆ|ZØôÍÁŽÒÜ…MÉ3 ä Ö²WÙo¶|c°9™˜K<ôlR¤ Ö²WÙo¶~c°%H~˜Ð}ƒu§ìUGöÛƒí½Á¦Äª´þõl§õê€.(ä`ißcb΋qÂÌíCPìf‘Îáô0–DmØî”½êÈî"þ¼K„,O.ŽX" hê>…ž#‘±äKðdnÛ²Ÿ*dG?­ñt”ñœTA±k|N,øÐxK HØ5“!æ°g5>ØŸ6^Ž0^1¹wŒgNŒÞ}x§léXoö%ž×xùŠñz„ñ¢Ésæ ŽñI€½c¼å$š…±k<¦Œèñ¼±@}2ÊrŸQVшֻ.ÐlÔ¦4U•¶‹É©t¹¦r.¡V‹\6íFØì ,PºKãŒÉÃ0ºKc…»›°"ž-ºKãœ%€ž—6=M[ GÚD9G´l–Û”¥dêÔ&4HÎŒh¥WJw€] %wç-ÞËÛE3™þo³z;/ƒ-µwïF$w‹{âöÖå߀ß)|Õ®?ÜüéûÑçWm”ØÜ¤a.ï!týÖÌ€µ=Åõ “>\Ή% ¢‡Ë9upë"ëhöx9§Ž¤¼ˆk~^ØOÖa¶iâ–dY¸tH_´Ãü1mȘ¿J»ÿ¬Æ¨Og5“nÁ–œ2K·f qEƒný‰H€šs7_E 'qëí.B ×0¼€Ò¾|bNÞŒø“g7áOŠÒYgM âà(Éݨ<—NEíÏ’A¾'”tJ²Ä¡ÔEIIØÀíß­€²N ?Tr ?T})á·Q:T})áw-{)áw@M:T{)áw®^KøQÊ9û}?ÊD™RÁÕ†[ÁÕ\ÁÕ{ÒœTÔ¿ó ~¨N}îÃ%©©¨ÜGŸ0!§‡¿|¡ ¬ƒ}®Õ¥:rP ó#×ÊÈ)™9ˆ¹WGîÁƒ} 5 z`‘@7®—U÷r´ÈDF^?}b„¡8°ÔOŸŠšìåõÓ'„û`‘ÔOŸAUŒœ^×F.Õ I˜ 9°ÔNŸœ”ÈŒÜëpà¬>%1« yýݧ©Å‰Ë ˆ»Ã㊞ ®Hyýìi$ör‚êkDDÉ>`âT¸2È€Ë ðºÀëgNã#÷ú>.>àÌÉ'Øw2dÍF^?uZˆ™ yýä)ÆJCF^?}FÎd4`äµÓgNÄ™hÀÈ¥~ú4!Î:`äµÓ§¦ìî6`âõ³§™#】렑ׯê‡&íꇖ_ªúU„ýRÕ¯"ì—ª~a¿Tõ«û¥ª_ÕÂvh:ܪ~h:ܪ~h:ܪ~h:ܪ~húRÕ¯ZU?4{©ê÷ UõC³~ÿ Ȩ9>ÔH9ØÌ·ëú!b¶®šõúM[‡÷èpNœYh¸•ýÐLOQ﹪ ž¥ŸeÿÅíNÒát(û/¹xZ”ÜÊ$ó â5Ë/Fè)0{”w‘r ÇwŠRO€ò;àq”ÒNýÒ®0äÒ®ôRºsÿb”®òRºóZúRºó€Z”®þRºó\}–îl÷·˜Ñòý/9¨‚‘¥v§ ·v§› ¸v§[¯a“!D|ï¥;ݼßÿB#rÒ:øPr’,Öý «QNY=[ Ëj3ÇYZ(sªÌœ’zhè€Ý\j»9'ÓLvs­Í¼í@0óÚ)4'ò@åᆖ€únŽŒ-Q;ƒjBe‘ÿgïìr9b |c‚,þ_È÷?B® AÉ.. 3ŸVP!FEøÂÈëF>‹¼ù‚#hC¼×õ jÆx˜ï TFnóaU®\˜yŒwZ #ŸP%Qo“uTx¾fa.œXd^?+سF~~vUe.œY.ÐOÕ¬•üƑƒCÙ×E¾‘O#Ç|•˜êÀÂÈm¼d1OÍ…‰Ç8qœ+#ŸWO-É’u‘ë¼zJd[,Œ|Z=œ‹ÝFnãÈ%YFã5"L¹0òòÖζu‘Û|ó¶Å ¾0r¬|ÞɳÍÖuòl‹ÛÉsvÝNžc°o'Ï9ظ<ç`Ûíä9jfÙë:y¶×ºNž¼®“gÖuòì°ÛÉsÌɳ#n'Ï‘“gÇ™Ý6"¢ÿ¼¡Ñpû»“§µyb]'ÏÎS;mÞïOÀ ­×:y^šn2N4“¡6æ´=½J[öôlƾ1¥˜™lÙ·ÔÍ• m²@²yUjóDƒ;§Yëãid‡<ÎZ“]lZØD’<²6a§`Vj/­êêâªîE›Â.ïm”tûùÖÏw4H]«6gŠr¼]zP¨ºö pU&.5Ý<ao—>[¯=|ž…õ]”Š;÷gf^ öâ–Æi`A)^ŽM©aÝùYä¿]ÚŸë>³¸(VÛQì#.¸Ù&ĪfµU“r'ö{¦Îöæ.¤ fœIÛ!º ö‘ZK`JË´Ü„•º=†ù%Që´žÁì³°ÓÈ›(¡­t™ÏTÀ\³¬«Èƒ³iÅ}™ Á"ìƒÄšk+âöÀð§à~ß,ÿrêy•¨Ó œ‚ÕÞ.´6‡d-lm)¾­Í_6ë†nkóß e·µùë^ÝŠÛÚüwpÕÉÖæÙ–?¬Í«4mksHó²ÖæÆºÖæ¶“­ÍÙ¤òîm9×ʯ‰!â?¾sÎ!aúì³mZº¬K(¤kž¹ ÒmYæ`žf^”l\;s_”9¦™)kX,ç6Í\)$˜eaæÓ*„,I_ù¸„‚¼lá rimî…‘ãŠ:QEraæ6æáj¥ë–‰7òiäȧ…X/œÍ1/ V%X˜øú ϶•£üý qö…‘_ÑÂ-+`aæÓ¤èÊuK–OP³Ájaä¸"±aë&½B?Ý5Fã™Åa¥XyÝȇ‘Û´~*y™W,Œ|Z?“îuK³ùÄÒ^ #Ÿ—Oµ…K‰Þ’žë"÷iù4òôÔ…‰c¼`I툕ƒÜÆ‘®î #qäÅÜ #ŸWOƒq-œËƒ×F>}¦¹·€a¹÷gC âØÇW?' ”Bdw­¦îˆ»× î‹/ܼþìbK²*•}ÏÆ?'ˆ9dÊI• »’®2®½Ëõ;ã¸~½-ÄÛ;š8B¿›.¾¦{¢™Çóåøçw¢ bnŸ£ 3¹€8µ^Ãz–A‹0° “*làŽìül™¥ òª4ߌ¤.#7µç±ÚÅX즽(Trê®Öšò°™SqÓŠq‹_mqòzAPis¯þ>üùß"NšÛ;”2ñvåéLqr§­ò×é ÕõôK™åë¶}v#ŸFÃÈ•2#]F^ãÈQlžë"WG^Y© ŸVO'8|é ?U=…¸T2Tkñ§¯¤ku-Œ<Æ p¦­Œ|Z=“¤¼î½H5N,JUѽ0qÌo‹…ë›?zZ„h,ŒŒ”¨®E-2ZHüs„NÊYÔ—f±‹²ˆPXé'|)*¨Ìe‘KEPò»DPÉK x&‰Rà ±V†ÞXOÏ•áwv˜¾ÊÈ[øÎAjþµ°[Ÿhú$©ÙÞ-©¾9%„+?É"‰óÁX˜L›.Ôu¤mIÙÆ8µ)EqiïsK¥³´ÿœërj&¶hFÅ·òví/€Ã‚ÏRq.ßÛšÚˆî=$¹°Dü9–†™ï¡ ‚Ÿ#Êf?R”îé&æP=FY7 ¸q\îóÜÃÜãžf•4Y`…L÷‡®·ËöLV*úïïf¨áì¾ ìñ+ÖµKdZpï/îJä/Üu—"s¥ˆšïZdŒµžÈÚX±1©BµwèHåðͩ˽ötãFÂ{{I}ÇX¦ç¡v¦°Q†·Ô·µùŽ[¹¡¶Y‡ë'ä£âØÅ΃²*—hwì¨Ï¬²[C*6§ 0û#m;…9wï/˜Z4RöRO]ò“w’ïÿj™^ˆš _Â\I½Ýñð$gxù,ô+ mÉ”³ ?Èd¬â¹½›••½Öôß a_E3Âí°V€¼CDk ¶òÖÃZŸç~üjî¾VUª.tÿNƒaÒŸC'ƒ¹Õ‹Ç–Kqžt+àk£OìÊmH¼ÆóÜsñü¶Ÿk7Øo[ß&T¢Ô¥{ µ˜N™)îÄz&Nÿ.œ"”±Á(]äÿÃ4¤¾Úù!ÍÇíXÔUèøçvänËãv|žûq˜{ØŽÍÍâõ DÑÌû‹wkþj©DÖ£çÆhâ„K7/×è>¸–'nž§òô›çì[“Ǒ߿ʄô² ×$ó~l?Øv8b÷Å~ðã IxAQä§wWVŸôÌp(ˆg„•È8ç×™]UÿÎÊ®ª¾è¬zæozžóœTüÛ9鼚¦Ëoçù3÷ûtýí<^=ùXÏ£?ýŒD\[WžNíöîýõ›“ñ2Ÿ„¸ w˯¿úêÝÕv0>fïÞÿðúj™_nGëúí³ßÕŸ?6ºÞä|õþ‡gôÇ®ãÏÇG÷çŸcqøÇ[I¾8¶ü…9êôÉmG0C± ùã£bÞ*!Ö øEÅ>T=\ZœK.2ÿ¥rÑ_ª™’JßóêýÕ_©™ŸM#qùÙ®'®gêyÝžâˆzz’ðC!åNOU¬=XžU—÷s¢~z~Ù«ötù¥ðgƒ‹?9~¸zýúúûOÏÂÂ¥H_º¿¼SÚEÿy‘$?½ÇÏ?JŠ…J9ÿ|ªJ_½zýþêí_:6ê*. ‰[Ù¾ºúŸÏ?¼{÷êùwÿíõ‡ÞÝã;<4åå?_ýéÕó÷¯®¿›]PÓ5ýNO<– !õQÓV•~q“Jä šD ÉXJ·¨Äž EiOr(½4~¦IOѤz’&aº²aùÏ´©è ÚTOt˜BÊBìçštÿ0}®û¦”ÄÏyÛT ‡ð¸tà"Šì;§TPÕdþ@ÈÄ$ñqiA’Xƒ ܘ\57¬)IþöðÞ¼ïFñ·;æÿvwq+)ÿvÃüy¤fN¡ÇµÖó¥ @³PÚÅF­”1¿©j „r$òÚgNã¤PŒ~”<DµðÙå†rühÛô¾í’Ü Ð+?ëã{Jêg|zO•™,§âB…6ГËd qñŒlÕ‚ÐáÔ åî9wwˆƒâ,F’yPühÛô`û·~vMÓ—<Ï8 áEÕ~Yœ Ńˆ–Iè@È %¶A &È\#Š-ëŽê‚ ˜i~P}žb9U8²›ŒïFzˆ^Ý ?—:eÏR¥$Õ),êqÕùŒª‹)ѸT  ¥a€Â6QåöE„@\s¨&¤ÞÍ宀bŠyP;ØÄè õÑ´é}ÓV:ƒéI…¶äŸ o=£ÐÑãl*ÃàÚÄŠ(ƒH]¨¯rË&º#‚°ÊQë t9hí ‰âʱ¶M¶‡¡ )s=±Ü¤œËíg”Û’Xc$ÍT"ã2@ÍÂ[üI¡!(hÛfÁwË£æ¥@’ªGÍ%¡8*šm›Þ·]š;dˆDÈÝ‹wgÕ\î^ ½;3²…æTä1¿Q ÙО–ظŒP0áŽ{†0áä;š‡†4ç²r9j~´mz°½{MæóŽóâ¬k¨¬Rìsp‡HnBkÁ#2ØÕƒ±`¿ C ¹¿’* ²ÕQs(G«ƒäD ¥â|ü`Úð¾éRÜœÄâ³> KIg]#´¢çÔ¨q wšáŽDL4¼Àų¬G&¢!¥G½ÂŽy%È7xÜ„8ÍŠ»A¤Fò¸Çe)åÉÇ(¬˜ÙëÕé¤bƒ¡¢ˆŠ†8¨•þj`PJ{rÅ“C ¡ð¸¤q œI%A¸R~58(eü¦øßTqv=§âè"¥s’NA®Z§«$4X5)7ÕE!Ë4id¯¹rú¯IõøMõ¿ù”ƒÎ¨:qO.×4TÒZÿ26ËXúV”Î Ó à><ÀÓ…å×óš=çð\Ê­úò šQRëo%=T´àòî`lÌ2’´Êø3Œ?׌ˆ£Î(¹`Hrtz)ádÝÛ©—\ÔœÑu\VB©%n_ÈIõ3̈>˼ÿœ¯apÈd6­»`Th Rr¥¨$9. SA÷›¤¬â3Ìû?Ç¢íYß+*ZÖ‚“yMÁ)±ˆ™–K Hq2Ä@fÁþd‹¶Ÿõ)®<ç Y‚yÉ¥écƒLªƒ€EØiÀÈÔG(WüªnL¤Ï£zY,Í5”ø3hþù.OêÙ4F¢ZKX™¢^}yB1UFU¹ŒK7d©D ¨¥ÿ@÷½r =.y¼}»åË×ϸÚÚÔÿœŒÞ}sýý×o§6ïß~¸ºëùòúŇo§ë‡Goþ|×bú^~ùåõŸ;è½~xõòêÝÃûímíöðöï_}·Itùý«—ï¿ÙtæàŸ°øæêÕ×ßlݨð§,¶4ò'6ÎË)†¾½zÿüåó÷ÏoãåDh¦ÓSÏ~ùÕ³ÿýÏÿãæé¿/žýßë·ÿÞ?û3 žyýa«Vûìv/_<›]ìùûÿúêÛ- ¾x÷§¯ÿÓŸ¿}½EîiÃÑøýo®6pØíÛ«w×Þ¾Ø$þæýû7Ͼøâ͇·¯áúí×ÛN¶ÿ}ûj:}ñÞ¿zýúÍB>~tù‹½¢èŸ7í˜?N í__ß °bå®z¯Ÿyõú¿üî_æÆ º×Þ|{ýòjwoöÝwÜ!þà®·ÈØ¶~ùêÝ›ÍëÙ«ïf^¼Ùúþ6wõ××Ïß_ýÓ%¤Ï¡¼Rw§?,%®†ýd5~|õæßž¿yóTUy»îìú£×„D¤gÖ¿ÚŽæz]E½}V|ý|ûáõճ﮿ûqËLÛÃäo¯ÿ½^íßW'z&àBUUqâ³ê[[ŸmGë»—Ãÿwýê»#ýv+ûíëWÛ?ÏôÄ^>ßòØÛ·› «°[Ú¿ßZÞÔ÷xòšm§‡.§Î~N}oÏŽsÌC "!yCçHˆ‘Á£Ð~÷$.kò'‹«êÊGmÑ=Ž}èaaÉ¥DŽâxßB$WÙþÌ©fÔ¸dö!)€¥õ‡C“¾VW<Ôà¸ÍÏUâãíúÉ„à#5 cÉæœC A™ã“K~Üö,5ÙÛ¥y[ò›çï¿yd× ™–TÃ`ʲîg9üº5ºT¦*ʾëÓÔ=ü¶øÛqÜv*ÙÎks,ñâÝü¼x±ýÝþ»}ÞÝû¼X{Û2^–ýï¡m³1Šî7pcÿzQ‘12ìâ¿ÏŸR%ÕÀ5&Bä‰Ò‚(/*ÁÃhc…Îí™`Y®‹¥"5RZH²P›¡ÝsåŒfT’j Ì>™yêd¢eHͺ“qºO¶îY™ŒÊ—¯¤y6ë*}ÑÊ<Ú×Si+á’‹Û®ˆS¹1" ^XÆC##Ì.ÊÀYThc”*ÜWC„ºÀ’ª6 BÕc“2 Df‰ƒJ‹¹.¼Ë£¦®lCBåÉ4•Q& )™,œ³™Dû&à*¸!™sNȘh~•)h“I*§5 µål}pšyIU³2Œe§‰Ñ¾nš)‹ [û.`á`NÅC ¤).‚7”ÓHõth&Ô@®j@hŠm(â¤<™ Jèdë°Nf{sÁ ­|hJ…Ø…(…r C`a¿p9Å“),W PçT¾îöš ;ð‡;°_Ìê;ËÆBA½"xóÞ(75SÇÍ2«rZÚ²|˜ýˤŽÞ”2{Ÿ .Ë6ÂdúDxÎrf0³™ 53$\Þé^µÑ€`-æÉ$ƒ¦eª5#s‰ $]vS©àEEŒvËàZÌù®w4kïY³lêIÌÜLs·¬p®Åh1NæÖ²©I4b•eÉd´˜ZúÑû£² ª°–·'‡s3+²1 †êν٩݋Z᢬ˆ'KªÅD¹îz«FÜxK.o× Y–îØÞ«ï,–!´16º­y¦Ç¢A…»¥¥.Vìvô>1$$nêäº+$æÒ¬ÙKêš+0­ø]T1Ud]–e‹9%½GŒ8›ZÒ)®ª2›¥sQ3öuÄ ÈâÆ[¨ÂšJŠ7+Vmf…žÍtjÞ,?j·&ç²,4%^¬b*ä€xÚ£u´4«uÄš²7% òe©²˜hñÎ*i²CÍͽ²)žÊ)U]ÌQ«Y÷ÐÉG,Ò)š¦ä~Äʽk ‘µú<£ãb¹ÇyS²âEËY–%‡h³¢_LBh1IãS¾2Œ Q hU›· ¨ ÙÆlcœ¸±¥%ûžIcç(…a³;“)ž t@ÕðŽ%º\X¸öPŽ„­jcÒU\A× \”a&5SóÁÈδ˜hÙ`‡Ô[_q%0¢|7«°jÄhâÍ”x’î%Û@ŠgdCI4B‚L ›…ªŸB¡JTW)7#/æÁ ¤ÅÖ3 ÷ ,9v€:(¡D]´‘eÐD–ªû®PbÞ¶ ˆÈ7È´Ê Ø= –Þ÷Èôlfµ1)'ZLÃ&JCÛ‰Äqã¥åÜ)¹‘Pï|u›û¤Òˆd”‘QWÞ‘h¤qiÊqöøãÝI}/6ýûóÓËMWºÚ¦¼/OËMÛ ï?ýþþ;×þp\‚"°HB¡|Ê%¨c}7§U»Û·1ÖYï.ª¾ý·?ÖûÛN×]`0¬ —EZ¹^¢…Ĥ}ÜÐr½H ˜gs¥–ß]Þ@_oß=,oÚm“×áËÌçi¿ððå½Ã窈ˆö·9|K…ÛUJGëNCÊ™#<ÀTŠ)De¦Nj’¹ÑEKÉÙ=,A(ŒGA²°Ë† ye?¬¢² r-LëôÇ®Ú}+œ9'tB*ÚP—ÛÆ1Pªc÷°{K:°Çcó‘%¨^Hê(ÿK‚ÁHÂIWÀ< Šø‹Ãéþâ3}öÐ!DzQVY{ì„i 2 wäЦ)+8Ší4A•yp®TÇ„gêF L\™;(\"½WhÔ­è¡Ò**ø—DÅ™8ÿ‚#þù“…9ÊH° ®ì^Ü”R7êÈ)fÍ8³|2f•<1l–¦7Þ®í­TxòvJ™,LõÄL¬Yž¼˜´|BdŠÕÊ?”•C¸¢XWþÁŠfÔ…OoÐB—•©ˆ(6¦`fª©dcæŽ2™[Eå ê½F=JqÔ¦÷5ú©¸Ô3Ä弆ûõa‘þñ Ö ãû¿¿ûE'êc[î.¦„5ŠMîH(óóA¤{^xMáidš¸ù…dQ¤ Ú`EææÝ49‘&-ådmf¡lƒPR™ši&k³•v¾ ,4¥§só_˜fÅ0_SƒÍ×4Ê=†3 J]c¹õdºÂ¨.¤çîÊ12g:»´^Ì­A¤@=·)t#‘A²1Ó’ îu”B=w©ØW5<Œ7JÞ9Ò8;B#f% e­“PŒ HqcY‚«š[ O`ñÂèY¬«(ÏÖ”*ª=ÈÖuBg§Ì¶Õˆ`z¨—>w"‰tÑS.Bµ,|A°êÒ›\Šrxq`V'$érœ!E™ó!Ö©‹4‡ iy¬ ÊêC йÒg*­L¤ên–bw}æ2õÁ&‰ÄÍÄl2 ,ÌÉ*O£ôÔ,©Nº˜’5H@ )´×»HŠy s)ñƒl.˜Èúй#FqïQÒ©ö±æ¢œUw£tÙ K"É~Â(uÛ±“I6d)Ò†…æFª{Ôb¥¨±üIS³ýUS=bö‰*5£†Uìáf‰ˆNhÎ,²í 1š¦Mìäi–º;/[gÉÌKj±²pÚý5£ý燜'U•j[-'”‡{ê «ò±qØ£ã·O“å/>Râí]=‘~ ±‰Ç|F&ƒÒ8yޝ×Õò*jB5©‚* e u)ß`°9š KÈDG¦±ÒŽGP“˜¶ ȹÑ*²Ò}]Ô 3‡ÛZ,ÝKNÓŸA°ÐdÓ»i7%Īf¹,SÙwæ;ëä¹(±ð¢Qž‹©G-V®»·Qî,Éýäm涨2ïÞÅ¥“±—§ìÌÙÓê®°hz4µ´Ú‘h6ââò™úbLö‘³UStAj–Γ‘Qí¬P›‰“Öî]BæzêÔ·¬Y‘Q(t\I@Te-Š íI$ 3:Ù±ïéf*Å3ŒÌUj¦?1É5æårÚÇœJ$ÜKÒbµÆ—X壣\dkÌihÑcNÒ §¬ÒêµI3Në@#2òÁ R¤¶ß’LQ:™í"¦¥šÕ VIñ‡úD'Ž¿tx£ø»Ã=ž^ö[ÀnÌ)¿ÐúœuΛ|gü…€50„÷I/S•æ`0 «Ôžôj©Ú )WÚ'½Þq€Étšô†i6u“fá¦1©Hi3²F™ŠÞÎ Enhõ¬7 ×ůpu±9ü"L·aìé$kÖkHL²zlRÉœõR°dôuîâ²9ëe/ä5ü*7Û'½,û¤—IB/ª™¹÷ð‹Í){Òš’=þ ±›Kù©jÞ㯨Bë;”XMdDÌJrõœ7P°‡_¥\´äÖTž *§4åêjÃ=Ôd{Æ6Q]4e±Ì\–.‰¹X™øbš7 IyACŽÅD£Ô)òލê䬚ÕÔ2‹ oFYš‹%V,fÙŠ-*i‹"û²Lª>~¥ 1…-†ª]零S—›|MNÜLÜ%w^Í8ëÆ›¨!²E,„–ûÈÖÍùÄt1”µC*‡T&Gß±èfZC ÌCÙz}¡"8Åžè¥XeðºJÞ̬˜&ã,ÁèTž®ƒÐCÄO©… 8¦Åi%¡¨FSÖÃì”éÉ|( )§KïÐK³z.­¤ÒË Žæ¹Át5‰Ù³£ˆEc#v¦ S”­mÅ5Elˆ ц!nìkjS®‰•9ØÖ@1Ò& CI§ ©Ê¼-“DtÖ 1Q 5ö(ßWB4yBg’O˜INÒÐ0l_b(Ýwę躕*M˜Ñ³ Í#8',´PÞw€áîS¯Äа™@-PY&ÔÊÔ´³ê½ÂXXI1LMÕk]Ms´.ØŽÁ˜CÀQ¤TûJ¯Wy¯&g¨÷Ŭ‡(!Ax±ÍXÁ ê¯ JÒAÆœûaõ0§Á½FDfͤʫ#r#4Q {ÊàýÞ&ÞoÀÕTã÷(”±Rªš +Ð 2iFnûØÊݤ{ð¢Ñ0<ÝvT%Í*n˜û>Rd¯gJkÊâ‹)q£Ä]H¸–s™$ŸœEˆ-æÚ™¯bT؉wH‹‘Ÿ¼§MÕS–7V7K4Ž9Ûb¬e»7¦síT”3¥Y’쌔s’ouó²×b„®‹UœºÅ‰E¶÷}ZrÅuòˆî 3zƒEYz‘is ’ ˆlíŽdX­žtkYOWˆÄsÚ°ˆ %`®DÞhÌŠ†º •)W¹MŠ€œì¼F¿lëâî‚n9ˆ@I,e-R˜j I¢\}ÝÌÈr08¹Éê©©hµÊ0óÉ"MJ'sR—‡ºã' Léÿ·w¶+–$¹¾•ó·!‘õùJÂþ7Wbƒ1 Æ6ë]cæê}B‘§Æ]•SÛ=]3µÕ0ôðÐÊEä’"Χ0ýƶҮi+&ßm%ï£drs6Ìѽ S?©¨Qòì‰z¡É:‚{D2ÊÄo(R×Èž€bu.‘ A´—ì;£| d„ÊzE¦b½Ãvbé’ÑÇ"ܹh¢ á‡3e‡±o} ë:\‰ž§>¶tÓùÔw»ç$ìöðS]úØ*¼tÙ‡Hˆ.}ÆÝWTF W©pŸÙzu‡.šŒp]LL<†™WCñ2åSþ[S>¸ù½Îæ:kh SCûlÛý+5´ú¯æ†«¡ }Yí.ŠÊ?NÒ>Ûsï\µð³]÷FÖ»8êÙþ{1âöÂîî§ø(‚†‰ ~Ú‹õ•­×ÁÔmÙÇ„«KLƼþ§çqðÁSá}ÙÙ×E¢l.z^3ÏØNH¤Í5_îo~ç}Z¸ðu{ÎâW»äª „ØMí¢ç’RÃEý²¯›¿æéמë©ú󪿿ÿ•ñåûFûË_¦{6Ú™¬Ü´ ï8Ú[/F»†£ãÊÕHM¨¯½³t>3úµ+{Sº–Êù?ßÿ­9 Àû›xLÝ­4gï6Ôì·LÕZ:—u°MÍÔÇeƒKæ²OûVóˆ Ìö¬åR3ò²¯8\¹û¢‹™¬®×Ná¿mZÿà¾#Ápÿ@SüG›/›b‘è÷œ*p9U %*~Åý8ÙŸOBÍ™¨gî-¤ÞâýGÎÍ0™QmØÉ%áèªÓnÈÓêà12o_¾t!Ö»^œ!£ÈÙÓØeZ{¦QH¨I^fÕ$:åh’4O³;]æû˜Å ®FèÀç׼ޫ_‰ú!ÅñƱâ×w¦å—ß¿mÅÝ/ºRøYõ™pQ©fLÔ³YBÇ¢Á¦7Q'ÉÔ><ÉîvgI0Ó:̨«l`V²-h1ÑkÑ"v°VCš &B‡‰±v2¨3äÑ‚ ÆtŠÕ€x›UUº£ÍÈG(g­•Š¡cX¦vpòHøÕK‡·iýzÛ;œcõ ‰Iý@I¯ë¿_¾6¥K·8$nSžÙ$Ûñ•:¥;v¾SEÀµ¨Š£kÑ¢ä.;Ü(K;tÁ w÷œŠèE“J'FÓÄÒâ"æD‹¬ÑZ•g¤¾XsV*W©KöÓI½ý¤‰¦\V›iäÉDóÌ–ñ@à¤Ò›¸ÄÊÀ‰Bt3.¯‡©ç¶ÌlöÒ|³ö8Yläå¦ÛLM-'Sø0ÕꇱU “LþÅ: CÊ=ÌXÅ+”,rXxD>Y'ïÓ”)¹zÚÒÒeQaò®/É®S})Âz°åi9'•׺è>©1pu÷éÁß|–‚ÖÉçÞËúYaõYaõYaõYaõYaõYaõYaõYaõYaõ¬ÂêÛÊê³?TYýÛì:øÎ o¸ ¶:i2Oo;ºÉù‘1!$tTÑž-Ý)uˆ$UTÊM“šEÇ,y‹ÇÚŒw:±Íö[…7ÔŽ[ݘÔGc¦‘•¹úy<±³#µˆFÝbs™ÊÈ ¹…SyvÞY‘4+dËVdô@S*|½bš¹Ï+J¨.^ûõ#x>‹¾£oáÛ|˹N×jíΛ$…¶ ƵŒKí#¹–kÈv-µ‹·~mÁ]_Åÿ>Ýì[ܬ¾Å͘Ìz ‡ ª”vÝT(Qì{]©áæÇÏPÙë9Ý«¾ÓÏ4SׯvÒ¿|hÿ»h½öÂò¥ÇëNßfÈC8IÄ7%bdŽÏ;[Äòù£Æç+ÍûÒç/fåßåü¦™Èþˆ|ÞýF?_þz–è³°c8¥¦†L¸Ëd_AÜ(ÉE¹X¢VWЇEiñÙ•bŽÔé žÍå*ÓÌX‘Vì¾gf眹–œÞËšÁÖXŽ€Pìà]óR[ ŽŠÕ½aÕ£@Ù-°›qXªŽŽé MìÝë®N•–î‹eq´¬»ŠJNfLµ×¼Éa®µ›†Ôž…Pž.É9HÝ%°škb¡éã“IÑ[$9¬CŽ}*CV³š{Õúgàêeªäª¬ BDe†BºäèuaÓ帞ΖËqMl÷“iÇœnׂ¸g®ASE¡‰ˆ«^~m®w6 óbóÇH-¾×/Ý]·éG§©œ!ikñs xJÊ­r+£¬íXÓüVJl8‚íPb9qzƒ9g9nÝ<Ûü+ÒP}qãëåÊùÓÊ?’†û¯ÿ}ÞËÿò׿üåE'O¿~cµRy‡Ž¾ùPA¿Õñå›|Î.vy gMáK¥t5g–ã×}.£Ëå(‚"Zëÿ9‘h¡WNw1FŒÿÖÀzŸÎT—höôÓ5ÄÆ½˜&[ãÖL•†;óÅ2·Ê;‹O†dÊ}$U¹‡äçQe¢“ʳ;šqÞX¦b䨣ÄZ­ÖMÙYÏ÷º½õ£û÷KeôŸþÓ¿ýé?þùß·¿óþ}"}úÕšfRá2»3À¦ãîŒÉNE0s-6¿´¼S:ÚóV“rÏñõòr¿‰ª¦`|=Ú2ÓÑÉèu×N³ŽØõj¢éwVhoyù¼?ß^¾àZsüõ>Ö¾¼BGã¢üì>bî½ùd³zø;ÖÙ_i½®´6&“ÔÑQ’,5uQ `7ïEÃÒ=ygé‹¥3WŒŽAlùEÆw˜ŒoÍÈ›5Ô0!’pMëBÖŠe¼hVvç¢jQ¦7¦mÔb¢h±Å¢™‹± ̶vTpãh¡ DèÖÚ& ‚IäF1Ú ¬kCGæfY°Í,zP Gl¤î½ öyÄLÉÞý"ª9ÌÕáïüzMÊ‘Í>œú‡ÿþŸû_ÿ´ñl–9©Carla-2.4.2/resources/16x16/dialog-cancel.svgz000066400000000000000000000356471420416754300207620ustar00rootroot00000000000000‹ì[o9– ßçWxÕ/]ØÌ£s¿Ô´{¶1ƒyX °Ó}\¤¥L[Û²dHª²=¿~#Ò’¥Peg°r£Òán‰6É y‚oäþåÓûËW?¯on/®¯^ŸàÉ«õÕÙõùÅÕÛ×'ùó¿.óäÕíÝêê|uy}µ~}ru}ò/ü§?ü·åòÕÿ¸Y¯îÖç¯>^ܽ{õïW½=[}X¿úý»»»?žž~üø.î=áúæí鯖Ë.æíÏoÿéÕ«Wثۯn_ŸÜ‡?ëS»øy}výþýõÕí6ÊÕíïNŸŸ} üá§›Ëmˆó³Óõåúýúêîö”€NŸ?{ þqýnÖ·×?Ýœ}y–³³§!oÎ7]ÐÇÇþ(Û@TU§È§ÌË.ÄòöóÕÝêÓrøL]nvEeD<íî=†l õã§ËŽÙß|˜íݧһrúÐýÿáÁ¾äuÓÅ\ÃÕúîôOþÓ×›K„ó»ó'É<Ó@î ì®Vï×·VgëÛÓÿ>þPqzçwﺟœÛŸïÖoßÝ=þ¾8}ÒeXÜkûûá‘~üš‚ðöÖƒœ§·Ô€†ñίÏúg{}r~Ñ)èÛåÙêêl} Œÿ¦rýÓ݇ŸîþÏúÓÝúêKr]¾3ùåö6ÞWÏaëO®oî–›‹Ëõ‰§ï®ß¯OÏW?_œŸ¥¸z»3î§ó ¶÷?îsùfuûLæ|úüv}uzwóÓÕ_O»t.Wo.×§«³».w·§·ïW——§äŸÈOþØ%ö‡÷ë»ÕùênÕ]ßăO˜nƒt:=ÿñýé_û_Ûßrüï뛿v?ïÿú«7­×'Û8÷áÎÏ~ìtíýêîïWo×½Rÿ÷N·þpúxcøîó‡uç1Hö¡‚îªäÝ¿÷}¤Óÿ¼»¸¼ü÷^ÈɫӯÏyzÿ _=Îξ“¿Ð{þ§Ðýx( í¯¯ÊÐkßùÏëïS%úxqu~ýqùPåBødwˆû:šÏ|èžîöݪ ôú„wݼîl@—¾.âýý·?]œ¯ï®/×7««ž=¹usq¾ûÎõ›ÿ»>»Û}ïÍõÍùúæ«$zvãìúòúæõÉï|ûw«¶‡›íßÉ£ž÷Uçyfþëúúýë… 7g{~ûìÓë×_ø~ø©v1þÖ­ž×/Òú鿦kµ–—«Ïë›Qì+þ»ë=¼×'›Õåíú Îõû½Þ¶ÎùÄÿÞ³{úðé—þŸ·þ[Åëõx½¹}ÄÓÿz°]³^ÝüÛÍêü¢{ÀÎoøàæËõY§`«Ë«Ï·½¬¯I £JQÞ'ÚëïÝõ‡Çšs{÷ù²+öÞs¹-¸g…ˆøÏ[¯ûÒÿ‘þùä1Îõfs»¾{`ù(µ!ÅØe¯]Úf#+Y=“¶Cíƽ°û:;Ìõô±~E•›!ý*ˆ¹ê… ‘äˆ;ºÓH} 9QŠþ¯ÞNJÃìqÕ¨°³ …!8j%ó.¡`ãb ÝmTn­ß<“»«Ð&,•†ÒÑѳn+i1ŽIGt{jLÒ¢Är<%î¥Y‹´ãj·`âQL‘øf*L<†é|-xdm¢L4†IÎÝj*Ld-ÒŽ¨M¡Ìc”BY÷?öÙ›ÎO)”}¿°5v®Å ‚5‰Ë‘"áÞUs1š ;¢Ĉ‰¤)ºF›ØÚ/ö õ®IÈ=²IlÒ~±.½;¢R„’×SÑåóuç6SÕS)š7UXÓ–±ê(#Öó‚Û¿i±f‹°£2Bg„9b‚£w1"QÚ7½;f]cn`Äy4ó«¢X_Ç4ŲƒGœYïWÊF블ùˆi’ÞM3Î-ç©ZF㌲Ô©–#]2ëÝkpÑhÉpÉѬ¯pÙ̬obò£ÄÔ£1JLŸ#Â1F.Äcm±ZOÂÈ…taÓ2’F2ƨ<×›‰É£Õú¬›ïûÍ}¢.*9 ùãˆásç© âaöhw>ñëwpŒd ÛûP¡va÷Δõ» ýã»›õ¦[xä§æçí½ç_®.ðŸn×7ÿÙAXÿÇÕ_n׿õçnQè¶_}ëÖ(Ww7Ÿ~PJá¼ÀÞAi/Œ‹"¦ZÄ?<²ëSZ]>§´]Ö(bÆGLý²‘A`Ñ£ïÍ® ›>d¶°Gß>Fð(»ácˆ{¶ .š D²æ=:ªH¤Å’(ÔuQ ÉìÚ[<Šmñhl(¹ÉÞMÓâQÊH-ÔÞ³W@æãŒ¬h„ Â)„ëPXn‡H刊Ù%Ø848šÄÓÌZ^a“ñÜXß:Ùy¢œ²ÖoÌŽÊÈqœ‘¯åöcµ¼íŒ‚Ç…oŒÆáß`ŒÆ1Ã1ZCÉÔHÉ„önª1ÚHÉpõî˜5¼aü!B|¼•ôÑñÇ9÷nFóì5Šà7è5bxT<ë5*&37÷ûq #„†£&¢ ”$1˜°‘jå``¢î¨'ûôV¤×d˜–´D‹DÀBõ…€R…ÓzÙ6Y² U ´ªü©Jé­yg3ˆ³W‹¬I‹0l2<êNî‹¥ƒ¨GJ‡e€ZÔ_ x™(/X„c±up—Vz il2`XZA†þÈlgÌÍ æ^’ÑD’¤&›Y.–_¯܃/–[{ÄêE‡ŒŒh¢XhXŠ¢`Š¥ñ”â6Ý6ÄÞK²šHjù„–-5Õ¾Ô[P’`íô“€·T ÁTš,ÛR °²û˜6BOÕ˜¶¥*Uº l[„SjîµmJm*§5!(¾‡ÔiHQªŠ9™.•ñŽ…ÚÈÒ›¬Î§š _/ ÁJ9s—T ¶&ÉuˆddÇŒ’Û"X0*h§Ø6©rˆTRTÑr£Mp“:µ{m1^ ¬ŽX œ˜dc )’Yõ³wú>& {#—ãw³Ÿö¯y÷ýj÷ƒì«Û¸fyqàæ5‘0P¶ Œj‘cúL½k‘jYIMBÇ,ܪw-B™ªUªŒŒ7½;æ ‹Dƒy‹:Þ*¸$2ÍíÉb\¾[Ñ­D©I¼"^3ÄÕy·x.no‡ˆ'$L>¼ÅÏ8D.9«ÙN¹Ž*åMâkn‹ R4^1jDYrÝ»‰*FÙ+sÓ6÷KB‚(¡As¿4ŠÉ§í½ ˆ‰â`ô¹#…Í …½-~EÛðÓ‡ŸˆÙg¹¦Íò¬çi&ó ‰àêØÏÑ(p¡Îk~AQ¾éüq“×bÉ œóýS´yÎþ)§t …!ÌEæ5ÿ¬sž¦$ ¥~¦+9©‰ÆÐ²Yfy,ƒ“Jù@w$°$°h“)g«œÒ¸1¹foÙÍz„K‚(bí¯ÙAÑK:O‚Ì­Ê’ºA 7p©Ðuæð(e€•Q €îH`3H`Pjk-„mÂ$0BY0¸‡¬—Ò%Œ\/û W Bfíïd÷¬’îþ •6¤(˪ÚÎU¤’«÷è Ü£z¦ ¨)è÷ÚËÊ,[¾–$M\µ‰*hÀ•ÁCcÐ#V§’G‚;Ø ØËÕš¸²Õ„\ÓDÕ¦¬,ºÊí=K"[›7õkÔBŸ­VUå`ExWXî)IYZííÔP4Bš`B﮿¼\Ý­oTº 1öü´©Ú@…L©MŽä:Ð&. ­YjÓq´iØEÎ*yè&W`,–ê´ ”ªlc” •æ<`„D†Z>„”ÂÁò’[°P’6JbSRª@ÏÞ–g"êÖ–¯BhjÈ–a²Ì¿rr£©Ç˜˜h êfOÎ5äWÖÍ„"õˆÞ1TP¡Ðsµ+D~¦vfšZ¾_íM=ý6î¯)=ÖÎVýÂÊÔ~%h™ 'H ÂPQ‡ú ™9Ð/‡$¯Ø¯_ÆŸë€iIÛ.‚fú=P Ñ%TXrÐ,PS³z6¶Eõg3Ñû)Ê#º l ì*âɀ:0g(m{´ɆÂ=G…B¦ìñ"D¥m+°£uð0œ©MGœÂ„†HÁ•2‡:ªèeÜ3ˆ¿—¨´e¶)k·1RØ"!¥Ôc‹!UÄ:†‘¹0èXšdñüYÚßË20´4°´+2Œ‘ª¾3Í ½0ã;«êóoŽäûjŽfÕ Rši/hþ½l•yö²ç5ºSû¾Fwsš?ИéüÁüëæËôÔ¸z½Lv6i“ÉL§Î翚cö²@65Ò8úmÕÁ1‘:lÜý `Ã^;VßBF¾vÖR^Mób›úØ»¸z~vVÇ|+VÝÆóÕl{5›­sGÝY@#ÆE‘QÒØÎ½;ªeC]+:ÞÛÕZ#u¤wGÕ£²Fm(h†br0¬Ù½•lH£° åÀ2´©Ç… °êXž¢&ì‡Â"š,ÒqX4¶ûÅyï¦1UF9‘]kÇ8¸i‹„y¼HX×ÂûìÔ–sœ‘`Kçi"F"-Â&S[±©ÄE›¼˜]5‘W¥ƒ6Ocdòƒ­¼ÊB§ÝdÒÔ+¨†³YXH8ØerWØÎ—„˜÷­d0µ­øZ†OùÞ¨ßïèÂàNˆ±À~P<.ö-¸$º3ß·þÊ|ôÝ]Ä4’DD•ëe,– iì,ý$ÊÅ2ŒN–%s#$/„FÑ÷IHÀž¡I¶á&y|jÀ$#É÷3¡ª&.‚¿“þÒ%Üù ¹‚íÏ|´ežŽùyÕª{;FèÅÞŽz±·¿`’ÿÈö6_ìíßDóboǽØÛ1B/ööLâÙÞÆ‹½ý›h^ìí¡kò &þlM|fÖdÖ§ä*Å78%W"YóÙ)¹¬@¡®#§äŽœ£4þ’$ï¤jIžÝIÕÖÀÈñx笋ó78g]\pÎúØ:>¤å³…š*)ÁpJ'˜Âǰ{JÜq‚¶ïölu¹î뮢³Å!ÔŠQÕ&GßËs=ÑבŽ9¶ÿÀÙfs6A¹~ûÞ8Ö|{?í6‰‹kL‹¸dìÖÍÙÅI´ˆKdÄ:àJ„Žh·¹°ÿK.’™mÐÀV9ÊÊñxß#³£ñ{dvÌ©ÄE›<žÛ÷È çºò1ÏuåšÛgûB4Έäx»MÕ1w›²Ù©-Êx‘ }ƒÝRcnúË1‹Ã¾Á><óƒe5Ëé[Àò¹u „Æa™oË06›Û–a,6ÎHŽØÂ²Ôì*70âc2âšÛö|L1Έêx›1Óܶydl`„uD=¢¹1b¶QFÌVGÛR•Ùé[ªÎv›^2©¹mÓ;o^ú½¥:÷}ËÉ4^ŽüÙŸÌðeü&m2y9Sa\›üåÈO öJõräç´•ÓùåÈϑîÈÜ^Žü<èŒ52ÿ®ÎX›ý9€dá/G~NyL%YâË‘Ÿ±ô°ï…åìO÷%—#?'nŽ<^Žü<´äùräç½lÏ—#?ÇGwž/G~:àùräç¡uóåÈÏqõª—#?Û´©^Žüø‹rZcÕsD³¤ÞLÕ”iàh-³c6÷Z Œj”Ñê|*F&C°RFÎÜY牭I²"Y#Ù1c§äFÁ|ˆ`Á¨øÿ9jÛ‘JJ‚*zø™Û†Ø&xú¶ýøÓ ÈßvZaɲÍ.‚bÎyO+ ×L¦œ€·3Y„`*8ã)?Tšç”ß’È X}±ÜªIFÌkÚUç<íÌ $=up—ÿÇÞ¹õ¸­ ø¯yZb¡îï[6@°@ìã¾sì™x²^Ÿ³¶O’_¿¢|‘ZQÈ΄CÑã±,õlÖÇêîªêêf_î#„†ãÙô¯‚R’´Ó¿c ¤ZÙn™„Pá>ùV#.ëËë+®ç>¿?°P}' Tá#·­ïHˆù”6 ´ŒYÛÑ2rµP‘eâÖ6Pâ²ùµ´µ^Ô€¹¶¶¶_1sŽ‘bájŒ‹·Æ¨RfUÚzŒ*ccŒ¬d¾?*ÉÕ6-µRÜØ¦¥VÖÁÈr5=²rÜZ[KÇÙ¶–ÎëµµtÝ#B4žƒ4¤«m;ÖækíÛV›+m€Û¯Áaó±¢GmOƒU:4Xmµ-wÇÚb•=wû1‰ˆÎQ™ %&» /IDfG§ÛÌP¥‰ÜM‚Rjãcì`‚M˜‚2-ÛDÃ7©³Y@Ä`šô"½o«ùñÀ%ÝÈd—/{»‘ð.0ÒrdžÀn²ýÜVÌN|ºdRq¸”îH+¸Æ°s侨’÷E¢€N;R`wŠÎ7„¨C7ñžFósÐJnw??D‰ÑÌl*⣄䘮“¶¤ $çÚb@…u¦- ŽÈI“ÚBÜ)³,9 :“ ‰Ñ Y©È·ƒí˜,Uv ®ÄE‡õHl¼ýÖ'‚ñÜúÒúD°¾·Ö'BôäZ¸ř在Œt>³fQJGp/p×\`’¦uÒtZ²í2}†š¨‡• V,ì#?G©±URdú¡1{u1%4AäVG5¼éÑ9óD/^᮹Âä!]í2Xµêš"‡é™È‰ “+õ ÌKÎÑZ$ïó0•ˆ!…5xüNÀ¥æ¾J„ÌvT!š/¶Tž.Ü(Õ¾ÙFIi'²†!M‹}"£?•~¨ž›Í¢@í¹c_º2ùîú!³ï¬²xn6Ë­o hß›YǃC½„`¹óQ`¾xì¾Ô´D'ctÕÇN™tñˆ…ëkŠ‘‰ZìÂÉ"väŒ.]˜¸J5¹ÅÄêLÞ`"O3¦“ŠriNa2¤>LäËbùJ‰+lGN`¾cE ê‹:™98iuB`¬$4k@ D€hhÚÊ @IµiRÒ4ÀGFiV;–‚ÞØÀÀ\¬mGV…‘3—Ë—¸k.1Õ—^!æÂ@ŠvàÇ@’´#U@¬Ü©„( öSæwg?~göSñ³ý´,P}z@]À*‰²šÅdX§<9›çâîš LÎKúXÛ‚}¸p¸ÑçÉ* 7Ý9T¢øH!¹hO!Ø)hÇž*yÊôîþíÇÛ÷§â}*‘¢“®»ÛßÝüüáÃýͻ߼ýùý1[b/íþÕ?ݾÜgW¼½}µÏ›¸yûËÍ_?49¯{û—û›÷?¾Ûë- þºÍÛh¯-Ez’zñéffïã^„D%læ†ñ ÏÙhn@hÕ®0#aÊÆà?ÛÚg ™îSÓ‚Õ¹J7«„œ•M2ÂŒ[Ù2È¥Ù´@RX[Û“ eR¶ôê“-þYÛéÃOïoo^ÿáöã›÷Õî/:ªË¦$ïVrú^%·Nm{r’ËwûÌé{}æjß­äWzæ­q5F6È”ÓNÚÕ/÷¯?¾­8Á±ÜŽòŽgS¢ð£Øonïÿôæãx‚a²˜üú‚õ–Bb½9åœí–"ÿ¼íVl¥ž&0UID£ ÇcM`‹ÐIMâ.Môål7GУhµÜù¬‘íxl#1ˆ'×”l½[÷zVŸl§=Šši:{Nkšg<ÀKÐ3÷€ETÛÇp·5 æœäÑÇ?hAÝj¥ʽ|RB/1™N~ìÓ&«\r#h6äÏ;C)D¥Jø×o}A{g!3o0 YzÃèxlƒŠi •iõ¡2ZUZP)Œÿqú×oÕìÑvÿ  ã&jægëòÏ–R8 ëä&¦*}¨xÑwpR"P $ƱX ULãA»^ulr©¶âŽj›ÛËËfÍ®ÊÿáæîÎeF\¹¹7î#Ï3JžYúøÃÝ]½Zˆúten¯(hMF®1Ëȵfñí7?,ÃÈçvÐk”Wº8N³ó@`ÒvY‰iTµäÿá÷ÿùÛ?ê—•¢øËl;Dä#d8¿˜}z8§áÁ¯I^/óô0uº2±›WÔÓœ@Ì©«Ö™v…we˜=µ:•Ž|»jÝ&_!öÔRUÙSká\­q3_kÛ>Ú¦0k X›ÞÒÌÖ~1éFjàe3¦iQËÌG;¡>a’Q´óßá“„'OK±ð&£$)ŵÿ>‚Q¤Å‹+S°°'Já|{6’˜„Q×R‰0wóF´Â¹6¢ë÷n.²„ì]÷zvïâ`îÖˆ@¡g"”UUò¤$Ó®ñÍÈTKËtå–F©O³ÿÍ„L:ßp‚ T™d “|·§¯Õù„@(»d6q; GBI‰T# 9„aXMGR;_Ûè¸Ö¼[(„ϹqXærR—ôI]¶–Ô„9©©Ä­˜˜`”–“ž®e' UUš_¢ãäi¶c1¨"ÑÝ àJ®Ò—h ȘÔnì¢jhÍάxìÅ.žyל9Õ·Y狘´–DgIVi;‚Èr¬ø”-镚–Ÿ“û*Ó‹wå€á±cH§°k›£êöDI„s?… PKhšG|3#dP0ŸM;²@Xºž™„•íú7PM¢I³Ð(–ío{dcâF6ˆT293ÜÚ‘Ä8ŠeZ2î?‘+J:¡º¼S 'ÉýWPqJÓCÒv”ƒ™q5åX_6²e¯lK¾ñ»r‡Wñ˜ÅŸG¼†G~+#ž”§Ÿç;‘d3LñÅc÷¥é@6ía°ÊêãBkƒ ±˜Ón@ÐrõòÝ @A˜/63„*åóú¯ÙWJ¶lW¼[š¥ž§„%6@aÃ~»Øê~;‚%9rÛ=Â^ûÀà•ÎZŸÝöŒ¬äSªï J©°t;=°TõWî·W“Zµ9¶”>›‰§ÚšñÔ-ÅϳVŽŸ¯?ë!«ÍzXVV´OMU„ÛîÎBªüLP³BžÈxh[4—$¿™É¹P@Q÷¿óÃLù¼g2( Âlý0K™yÔ Çç®l JlÂÞ@ª³>¹ô [^¦õÇ‹'€(AÏ©w_ax=§Þ}Ïñ·ï6H|©ÞmÉ¥“OËhS‹(c½ELx…Ebq…ELr…ELv•ESmT­C y½…XŒºÒB¬~FR³ŒDi½}¢²µ}Â1ˈÊÖ[*B+, ½^ºuñsæT;ca¹~I¨§zžo',NšlÞJGA©qHwP›´¥ µ7·Æ,9cáþ‹€p”¢ô)Bù'Z , I#kPÓ¶UfU‹ITì›FµŒ<Áor2«ïuaî©Ù:éì峫—N½kNZx'z´h¶t ÕÍ8ä u²­®ÃÖ MûUBÓ~•д_%4í+„¦7³³ÅàžÝnigË{ £c*ó­-hEG'V0<·¢ 9˜R·.”äâ;‚çe¦;)É—òñjûvþòÃÿý|óþö´ôÏ?Þ¿{ù¿÷û&þ¥ôðãíýþ¿—ú¥ìõ͇77ïßßüµ©m,ý3y©@ö¹øx‡'½È—Nbf;_ÃŒ’8йóÝsC²‚%z5%'Ô8 *±@Š}wùü»Óó'âKÊ®]ŒRlÁü‡òr¹b7¥{~`¸³rIÊTévÐÝ@ÉÂe½D *è,D'd®¨§D) áyñì»æìIžÞÅ3Ð_Á)äXûïÌ )^ÜO‹Ù´…%Œ‚ÕÀR7?%sñwÍ&yå*Qª–×`Pn"š·CîÔ“MiÔ?uBß Y˜v;ØþW˜)k'SAhõà ”¸Õ¿„FÓ.|ל<…3®•Ð"y€† ¥Á%»@ˆ ilÓ¢n¼/Ô#dݱ&aôEL ‚Y¹/AC“ÛCA3²ƒ™a…O¡ßçÍô2yÒË$ÃHz㽨'n#j·-ծ܈jodÒHqÛ“Fë›Ì‚¼%Ù¼å,øl9/i9 >[ÎÿŒå,øl9/h9 }›–ófRUTˆ7œª²,!}NÌ8Gâω—ÁäsbÆ%.¼}o}&ÜËäj¶ûL@¡Ó žÞàSq+ööC\•~¿¤õky O#çuLòx*ŽIëÖ<2N«œÆ©W³ØõÜb€»ÓïÙ´®ÑÐg‡Èð¾»¾ß!šq¦}§ó±kIà\\Ó/«òG†e ¾*4ÇghM{\,Ø´3L3óëKtÌtG"ÀèŸ7ôK®Œ†å‚ÃÕa­“Xhde*<²\Þ)}T’V3uŠ˜ÿßÞÙíHnYøUê¶œpœøÅÞì½ßÂÒ Œµ!Ù ¯ž~™YÕCÖ Õš.tïXÚiAò+fFd0ò•dfõ cBü}Âø¾wK’/^´ó-‡“æ¶çuT;“cÀAª=>¬H†uÏH¾b”í|Tí|(î]³2/feù›.zª@_³ríiZ)6œ[8¡$-9µòžu÷" Ûj„R˜¶Øø æ”–>ïÞÞþú»²¹_ $ü®IÑäÔ¸kTœ~ÍŠ¦tK»oŠ"%ñ…ß>Þ·ñ¨/v>…²<÷ç3)Íø´»© Ô?[°¥Ý¿…Æ×—9ù`ˆÕTV»¿r¥wŠ|ÙÊg™‚[}óy×sJmÕ¶¶Ð•ùô#í–w¹5""E^¼i·\ŒæöwßÿçOkkŸò÷³§u*)á+ZûÞ81J]››”ísJÀIÍ^¸„˜-qù‹)»j¶ø‚í¿‹0I;ÔÇ—8µðüjÿOýîÏÛþÿ··;¶%?ûðŸ/|8o?VüÙ‡ÿ¼ÿð8•@[ùŠÎ§¬7õϧ ì+!g ±[§}:kàÇ¿þ㿾ûlÒÀ¢¯Ÿ4pçåVè:ÝaÏâ§Oƒð÷ÿùÛ÷[¢þø§•a{&í ÿ¥YZݯŸ5øº³&Žé6j›ž¢Jðfñm¯ÆÚÁ¶¶}ZÄó£Ê2ûãñ6 |‰õÏvàúœ»Ö.„Wg`í¬º ¼ê·®Þ¯«#?_–G Êš¢EÜ ßY‚Ú5TÈ[K.éä ñ¡¶Í”QÏ`6L(˜«d¬r»<×4fÝäN–‡Ï{ÕòËÜ0¯Ýƒ›Ëí6jñá»ñvŠPÅð"1ó¸t*}ˆµ¢w0-_w¬G*~™Þi£ƒ•Ëîm{ZXõìÇeZ‚Iû˜ÆÛkCN>¦{k&ѧŽ.÷?íùUòÜ~¸ëßýù§¿ýeK·?ÿ×LÒC± n_X&8Õ_¦ö(–þÞödŠn‚2mnŠƒ ÎòôˆmcÛ?nW¯SñcòÌŠª^ÿYê>Uµûã?þ²„àçïüë/ë‚R(º»ó]uñ( §šp çl9Tr¢ÛäS“TnlŽ(ˆ9—êbûôUžûûìÔѯo‘-+9FVƒB w‘­" Ó^Ù~!¬ÆmÕƒ+?Xï]æäîÒÉ~ë3!’S3>H„P²`ˆ3¡XêéAóñ5ͧò Æn]»©K C< ³[½ñ—uò‡hé×ˤ&|É$¤Ý˜V¼éo ½t$Z `’Ô>ê„ Ö&ßú•‘ícd+( šÇȺRzÕ{ t´é# éR¤¦6Œ™ÐÞùô yÿºæóÕéj¤Æ0NN‘G÷;Y%ÓãûØ2ÊLΞc ¸²>b:߯ô7^2’žzK†e$’àú&ЯŒ¬#«AÁ}ˆ¬0–ï©ÐéÙId:mCÉLÄž3_øºæõÕ"iÔÙC=É\ýQÛþ>¶_É2æ×‹¤¹“té|\&”V~Ä´¼…éoC7)ã:¨HƒBTÍ*âZÄ*êßôùu‘" $u pŒl‚Âñžú\{D Û‚DB‡EQY¸<=h>¾®ù×2AæµqK§òÌzиð;Y&x@¡JÅÐ uIJ¼‰åoú¼T¤ƒ>g¬ºò,䦂oòüºÀÊAž©À®~¬*\BÞSò:'¥¦ŽÐ¤@U>=h>¾®ùÆ€=©-‘#Ì(”!W~'ã/k¤†>2 &€ç<–J2ç@?`Úð6¦¿éó’ »€¶ Gu¤…ʬ¿ ôk#ÛÇȦP„F"kdnú® ­á@ƒXˆÁfùô uÿªÖ_?þ, s& ¸wJoó­æd2ŽqiE¥OÈÄpÈ¥@ÞÌ×%±c¾.*ÔØœˆ"mî˜ÕJSg×t8•¼Ý¹.R$ Û`“gJãWSû`§Lg½˜‘ ¸åàåi‹VS;ÈXÂg L]:ƒ_ä⌭¥ó‰(»tSª[o ¤aÒ½³åÐóîl`ˆu䥔ÒÝ ãƒ3‰±»ìþàVÞ‹B¤Çš\\ÉÕ±A9ÔôbM̂Π*yštn>iÎÉ+§ó‘û—½sÝŒ_xçzÿ¥âÉ×®Ï;9zÆÝ²Çí5kÁì1¡ˆÉBkèÄ-–k/ìöá,¡5Ú¨ŠÓóPžI*Få‰\ûâ¼—\{ÇzÅy·º—Üý:kÁÊã‹S‰s׬™JÛê@…“DÔ7–•b}er(S™kK&Ä,=M e—Íá³zd’˜hé†fÝ,1’©<ÜrgÇæ¨ UµÈ)TÙi»‡gmYm)ò†Æ°[ã1Û¨Ójrªhݘ¬U‡IªzïìèÒG*£œÎÚJÉ«ËXi}ˆûÎfƒªH¼©lLfJ7ÆT%º±LêjØè¢€wÊß“ö|ÞY½':»P&÷üó_ü¥ µòßè/Mì÷ÿÕyð4WYIi­ó²ÓEêÒ×¶™¿Yña èv¸uü¡›§ãÆn“¯vù8þê“[Ûó¯¾XÝ~qD)!;Þ ,3uƒMœœ°ÈQȱRÏS¯˜»[lØ)<kàº×ß¹l¼"Ó¶êRH"á8Ðlj³º}ŸQgÄ¥‚Ð,ÝC… Ê9ü hsŒrns¿"¼Q#‹:Œ¡qêÈHŒI…tììØÀ5!–ÛÅæçÜ!»—§í¹?hµT SB˜—^ÇZ«°Ñ¢6‡×,ÄܰáN©0ï}:ÐÒS.eÔéå`K©ì>íl+íA QÕµ¦–`ÑEíÙm3‚¹Ev2®éÏOÚs6¡Î'§}=óËû:“õú˯Úי̸¹—ÆËØœRJ˯½º¥u X'ƒ¯½¨¹Íò™zÚìwTÓ_LÁQ“¥¦¶]YkŽ0££gá¦6÷¤iÞZÑëàÚ'ÉnÖ‹…©šM–¦Á¹Þ¨gYa.“ìZ, ±¼i1ëØÙÑï5!5–ðÙTD5‡ø¬[¸÷˜Øk`6E—…)B±O=p*+¹Ndîš©ê Nk«IZ.ÓŸIa¥î7ªŠÉDX#÷#k-ô}é¢f Ë m舠ÖNÄ%u2À'ãni›Ç©ªYl˜’¥°/Õ-ª–hŸb ¡ív3•¨Ôp¥Y| H9 #˜X\Ô—E¡c,ßÔ±¡¤R³áI"° À”)ªÃƒTáŽU6i6A†*i‹W]*©P\²géY>Ÿ:f~ᨣåoïöë…¾žÆž±q´^ûz˜±ë"ÈÂDzhPŠŠÇ…P tž—{Ú^©rel×+A;'އ)‰"ãY'¬rh’ZIôt&»ÓbÌÈTÙÝÞÙV¸’¤´²”Õ3I"´{¤eYÚdaÖ1-O YU¦nºÑa,WË^^G&Ô\;•Þ© ‰!$fôá9툓eϬ[õ¨vv{" ô@3(8ÕsH¢X×óè®nÕ¡Lð­Y:HV-ÅuIr$°Ÿù³Y¹“ ,g,NôÌpÒLW´3<°žëzÛˆÙÞ„ëº4(—/fáY·‹@ƒ¹tD’TČҢ¥ÖiÙ,Ïî·#'ƒT{Ü—.JíÌ>Ðëm'û4^޾¤n¨Ä13‡Çõž]9L©…Ce£'M?gÁ—ŠsäïFœ3ˆµ9sˆ¹Jû”” QÜS‘둵FÉRìž5?—>P&5n?Ô¨f×#wÛ;[ éT–\ åuè^ãÎîlït÷r¯qoÍi»W7Ù¹%eôªµœÔÙPÚ··"|ˆ3¥Õ4b0jCNÅé3ý ¤Ð0 'g[y®Aâ²Q.²ìЋ*I§ é¦2“ÞÙ±™GA-™yq!S­>8yÖœÕL@È ²ñ(8ëóÛ8©®CÒ(±¡¢b™±+!µVÛÙÑ¥UA º.nfâ1tzÜÞ±»´³)DIånÑL"’2K3u¤áâJ)€ÏLêtøâ“æœõpõ“þÂb…§ßã龇ƒ*Y®ÿ9§£·œñ´¿‘öEKµò’öñ Òðȧo*òMEþ¿«ˆõ¨Hðg*Âì­-þ¯¬"îï¡"çµ—1>¬bl䂞·Âž~õ•£GNQ‹}rŠœP,*.oóÂùù«¥¤DQªÖh«V^£6jˆ²¥S$È©IÊ襦R)Cœ3RoñkÙÊzguê@R©³ú%™<“¥›Hœùs6^ÊùÉê¹[¼¿û~® »­Žý§?ýt²†îÉ:»ïr"ៜH%1+íìÿ›õ†?–¿¸Þò«Vj>_ãù|u诿zõÛ¬Ã}–KçY÷Yèå. ÖäÅb=Ú(½\o_#UJbX‘yƒeÝQ(¥I\Y´Ö"½©íˆQAM¶ë#è¬Ò³Àë‹vS¥YÖè&“D^¼gåš½Pµç©;?_ÞIÞê³^Ñë/ã­åm®ÿÃOÿ½½6ð¿ñÑ#$ICarla-2.4.2/resources/16x16/dialog-error.svgz000066400000000000000000000077221420416754300206570ustar00rootroot00000000000000‹í][o#7²~ϯÐѼdp$ª.,^œq8 v±@ œMpd©ek#K†$íüú­n]¨¶Úm©-yf³‘f îb±Šüø‘,69=Ÿþôx;i}Îæ‹ñlzÙFíV6̆ãéõeû—ŸÿÜ íÖbÙŸû“Ù4»lOgí?}ÿͧÿêv[?̳þ2¶ÆË›Ö_§¿.ý»¬õíÍrywÑë=<<˜ñZhfóëÞÇV·«9Ÿ¯¿iµZêvº¸.Ûký»ûù¤ÐzÙ$»Í¦ËE öÚI}Ô²+3ϳûù`e~0ØÕœGªšJòÀ…Æ{@=¢®jtOÓeÿ±;]|ØÉª¬ÊJÐÓ´¤y˜ÖÅãDax±0Eê®w…þNÿn3lfUבæÌÌ4[ö~üùÇmbÌp9Ü1³A^ͼÐÓþm¶¸ë²Eo#/ò?Œ‡Ëe…âö&_ß,ÓýxxÙÖúQq³q±%^%mlî&Y1˜'–øV64œ ®ú -vïfv›õ†ýÏãaïïO×Ù´·œßOí©ÕIÿj’õ”•ËûÅ^v­—fŽ•¯×Ýl>ŸÍ–÷·r¡f÷Ë»ûåÿgËlº*‰B’ðY%ù¶Â²ìñn6_vGãI¦(o¯T²»éu¥ÝÇá2ÑT¦?í¤¯ Ÿ†Ùh¡¿ëÊïl‘ IJ°¬?ÿ˼?kŸ*d»³É$h ÷'ý§Ï­rV!¡µQ5»XÎî6ºÚ˧‰¢ »jq6¿ø0~¾+D3%ÚxùtßµSžÙh´ÈÔ1$™z]ÛnõÞæ ª¼aµ7·õö©W®v%Œu(‘”QªòG¾ˆú*Ÿg€&jœÅ*Žw§ÃÀ`”¡ËöIwHؤ¬´kÒiú#_F±}ìŽb±¡38´7bÄw‘Ô|ÐDNcÚáΚ‚ȧÒÝ«Ý14ÒtW$8јöÝûQ â»õWˆÇö׫ì*kJ5Àw1@û¨zÉ•41б ê·i Áž¬Ãã»1ùýf`yG¦¡"RSÑ¢—ŠØú`1žŠh6Fß~ ãצ5Ÿ:Âôs|4 €ÇÏÖW8;‹'7óLŸ`|؇»†±ŒÖ%3xÙvh1ÚT»'•¢@±à“.UêªA•CdÚJ¯×Î~™Ž—úä~‘Íÿ¡ˆdŸþ²È¶Z‹»yÖþ-[ÞÌ´˜wýá^þŸçýéBŸfÜ^¶oûËùøñ[4Å`ô›îºHFÀ…`w.?&ôsƒýÉ)q@)á\v!@¼M<*vÖ@þ IútÙöl¬Š©MF…nºÍ•¼!ö²ûü²ÍÑÄüãŽ@½[2à3¸NWm“ž²nè8£Xò4V¢¤N×EÈèTTÜç µ@€ú)¿LkÅÌ ˆueZ{\@¦¤K•º* ÑXk#c€ßNÞs£Y;H—ÐDdc1¢”ÐôÎpp°„&*3AB MÆA´ÑÿÑDtµh¢=¬Ö'f°óÆ;Žÿfh2բɡ„S #€XÆ ‚!—¸™tËÜc™c<¬‘Î:©`ðu“ Æò¤BÎ#I>UGUÂ’fšWÄD¼œ¬›Z¨”AßIW]0<‚ tÕu`Ð{¶QçgbDˆ²Ã4}Ž¾Ìæ£¬uV7¸¡RÚ´0dSë—”ÒVÆF+5ÄÊ»`Œ)Teéß/ãþô&÷›’Õ—-ÅóÏãþr½í! ôä³l_¨´„^è|L¤úð†à«¡È;õÅþ ¢ÿ@ûÝFYBþír›ê¹}ÐB‰F'I:ªÔ•uSM-§õÒ9P0äƒõAvC&½Âàà3/Ekf<a4Îû:ÂI÷¼³að".®¶äH¶Þ¸ÀÎi§Býž_ªÅWÂøJÒZ|˺ _ö& óÇÅ©Í#'¶Ž-JEüä")ú)ˆªÐO¡TÊPO1Òâ)kÈRp`ë*F»P5‚¬\#w–ÑAD ¯U)œ¡Jî;T¢ñ ì³ñMðñëã#:WËG{ʽ‹‘dÍF ˆr²˜ÀµÊMËÏé˜öÈwøè­Á@²{ì»RwTÖM„´á¬À2Ùz`O×ÑÁàfÇŸ cb§‹Þ°Ø‘`"ygÀÚrW;„}ݹzk8²TÚe\¡ÏÚ¹QBmç:U (»Ø)º"¹¼~>ºåqA ƒC¢Ò¸@hB úIºT©«R¯b@w^Üì+¸I““Ö {ÚÛÒñì']ªÔÍ¥F,YÜ[ÅO½ü ÅÕöeù‹#†ŸÇÙCzqÃU[ü»þuVè Ô¨ø¬®fóa6ß$¹âSJZÇðéíy‰õ€Çl’i)™&À6é~<ÌJië„ÙÕ?µ+RR+çeÜzS™¾¸égʷ牿Íf œ5Ñ;q$Ï“SÇ/IŸª¤ÃÙàþV¤{¿âÃÝã^¾ûùáY.Dž¶2P÷a<Õ<ÝuE½ /(lªíÙ¾ ¡u’r lØ~›-ûÃþ²Ÿ˜½‘øöf*Ž.þ÷Ç?oW´ƒÁÅÿÍæ¿¦•j®Ð¿šÝkyŠõRBIyùt—© dvóâ ª—éŸÛqž©÷åx2ùkîdwåÝ[t³:NõЛM-‹»ëg8MúWÙä²ýSÞÆ-|Žâõ|vw;fkvnÒ‡¶nÓ^ùMy5¿}øa¼|7ÒR_|ˆÁ¨¸I‹z]ãÏg¿f›ÔõíŠÁÈF (Çúsa7²a_™7Ÿ÷Ÿ.¦³i¶‘&Ó«÷ òÛélÑÇrl¡E&x~î,ŠqÌÃÞ³ýe :ƒ ’ð©J8WUg„$IŸv¥­Þë¨bbQíj&™æöÎDR“nGÅxuiUSL` `[ˆh45th"I´­Ÿ’0•ò‡$ÜÔµ… pÀ°[k#>ÐŽè§JÌÒ˜žßÊ þ2¼@#Tœ­_ƒÎçRï<2´–^0CpaW¦¼‹6(nI*ÑD ¨£59rÞ†ˆÑ"¶¼/™ò¶Fˆ$¶%b؃8ÜÊò6´hÄzANÒœg,žsþ8ã"ËŒÄà|°ÿ~<%4D6R!±¡ˆ8ƒ·®ª¹*£áÍ”Dû;ªTêœuÁåRG>xe¹7(¢ÙrYÎ{K¹ÌY@”\ƒ ÚLR²( UžïJÁHŒ^BK¯˜1w458Kâ[ÄJZŒ“,· Ö0ðIšÛ5êØ»$-ˆÀCH~’,•Hm&©Cƒ‚W›+"Y›KÉWŽÙçšûùJÆÙŸó¹© ‡ÏIm1c “LUù‘h/`Z¿Önï•<)¥0íýóù§²0Lbˆ¬@¥€)IO¿FH£PjR åÎo)–H,&¬WOÖHÇz#‘}~/hÄ‘}V\R h\È5¶6"›üÖ±a«y;Þ»²ÀXpI%’Áàwmx1Xr“´Ra’¡TÞäNÈ„•¿r­*Ÿ'4yö+Ÿ1V6·9·u)x¡[dÓá®ðŸ³ñ4IOÇiúèøÅ‰FŽ™h”Uóß§ªÿÑìLƒ³w¯teÿé`íu寕ԯöÓÍú5ø‚#wOÀ@ŠÔb]°zô'lËjU`ClI01ÚT²²ìlags¯™\4,q+ò¬y|a% –kÆ©§¨ïJÖ4;·=ru­ÿÝ”žÑŸwÑ÷çjCarla-2.4.2/resources/16x16/dialog-information.svgz000066400000000000000000000322011420416754300220410ustar00rootroot00000000000000‹ýÃ^í}isG²àgëW`éÏŠŠu´ä¤(Í:Â3ñ<3oã}q@ (a \”(ÿúÍlôQ}T£(ðš!íÑ]¨îÊ;³²2ßüçýÍ|ðeºZÏ–‹·'ŒÐ“Át1Y^ÍŸÞžüýoFöd°ÞŒWãùr1}{²XžüçO¯Þü¯Ñhð§ébºo–«³ÁùÕòãtðó|~·Þ$—ŒJèpðë?þ4x»\mß}ý¼äâ?¶Ï<hBéàân6¿(&¥}=ŒF?½zõfýåÓ«Á`/¸XŸ-ÖoO>o6·g§§‹5ãóÈdysúëøËôÃrõßÓ§ðò§'Å7fÍ_H^Õ{ÓSFËß»šä_¼½[ÍÉrõéôjr:Oo¦‹ÍÃüá“bød5of_¦ð˜›%<¿¹Xï ^]]磿~ýJ¾ŠdsÎR~ÊùFŒÖß›ñý¨üU€FÓW9¥ôî#»:»ŸÏ¿_&¹ë?(âþÏ¿] ëåÝj2½†oNÉbº9½üÛe~sDÉÕæÊÇÉâ÷õd|;-=7»¸…×øfº¾O¦ëÓìzòý‰â…ÙÕÛ“_Øóùò7–\ù:»Ú|†Ü&?OgŸ>oŠÏ_fÓ¯Ëû·'t@<ü¿i s_Ï—_ßž|™­gçÛNcøsôq<ùýÓjy·€Ç-¦_Õ/úΒ÷}{r»š®§«/Û¯g 8Ë_œÁ·ož®Ë¿å8ƒ¸¤JI=pÊ숊c¯Ë³]-'¡·'W3`ÈO£Ù T·\Àïå,ï6·w›ß¦÷›ébû$±ïävò=RözómÏÈsæÃ%Ÿ|špõèz6Ÿn_éôóòfzz5þ2»:]Þû4]œnVw‹ßOaüy ‚ds·>mx÷ÛŧÆÙï¯næ8'ªñö·âöOo®¦×ëŒ2ðoθ†Ë@ÉÓñêO«ñÕ ø·4Ëd9ŸO'@#ãù×ñ·uNWå¯kqúõfy‹rðà…Lð{JÓÓ“KK ‡ÙæÛûñd;~y}½žÂShú#abs28ÝcjZšÕ§vÉÔ§åµD‡G‡QG‡1G‡4’0±88`jÕõS^^q>-å"°¨†7Ë Ê P* öfV5uœ™²^&ëeÕ·jYïuòS#‚Ђ™ë¾à¦©Z05Óê[µ,¸‘êÃëeÝ×ÛHô­7DдA÷[/íAБ×Ë­¶euZuM¯Ì­¡}€1‘“I7`ÀÌü@bÿqhh°v pÉ$¯Êª]&–»8cbª]·íòfÖ,˜Ù+ ¬v,˜ÙªÆònÕ$‘Ò#MO\×dfÃ÷¦w½>QÎD#¬ú²®Jª Ï°×ø»ã5Ì1{€æÕLl÷Száï‹Ù¾;ð;~E'ä/‹¿¯·fú={{2²|kp*¶Bì^VçR˜ßs¸‚ž:å[ì|ãÕ!Ù“þ¶/Öh¯¿=“}5»ÿÙpĆt8Æ[5d’&S½.QW'aaÙ´*,~¬NÒ V:‰N9qv÷ÔüHæ!’ØQ˜ &滉4 ,Û‰¦–û©ršþË),¾Š•núݶ{ꃰåqèw–{Ò!XuB‰tèˆRÜä4h1Ö1ZÐ sDhcÒ+H„ŘŸ^}÷]€2¤U¾‘ãfJÊíC¡=Ñ8/a¡™µý(¯ù®™Mhæà¼”ŽÙµØ5¯Ûλ/ºdt1M8OÙñå±Ü2Ê |áí\!4´!F:Ú_Àùæc3_«—-øJmý~|áMD%Nºä§×ˆcµ¹Þ”Á˜¾ÚMˬe´é×$,}öy5½~{òýÿýó/?_þƵý- {­ºIQI¤Kƒ´)M!ú2 4.8 )¦ÛF—޽š>ÆßSXÐ*¼ÙÇJQ«Š•ˆ| Åuž¬$+X|òúüy¿¾|ޯ߇±Ÿàë÷áä=^çÏD–¯_žÎÕ•u[ sÐ\J0®À6‡ßô“cXi”år:RCC5ŽZ·Ý›Üƒ—D1©Swaòíí‰RÄ%ܦ«·'Ò‚c úc e+¨T}ä€Tä­J_5±3 ”Y*s´JC¸d̳[Š1±Ö#[ÖÓU0´áÖP~WúoùŸ–7”–0-ÍëBa1 a& 7)NœÑÊ Ü@É=7° 2-L«úÈÉ(Ò‹ˆiJ8¸$Θ.A U*Á§ˆfNXݲž®Bh'¦›΄!ŒZ1T”X+dê‘ä`‰KêCÇ©÷ì÷‘,,©Ã•ŠOç(F[ôa`ÀèÓzÈ™ö¨¸€JQ€ƒ©8Wžy&ÀãT\äQŒ‰µþkSwlû’:'%r V§óɃ["-“…$ œ0çÉÈÒ2Üz¬“‰×š>ÆSƒÌý¤ o—ùù˜Hëq´e=]%[‡@svÈ9ÆØ¨òPŠa7¢ºÀ)hif­òƒ|@ðÚz(͇ĂkA“ $È!]–_œ*ŒH0Q_‘qÊÃë1}Ü+P£V[ÖJ£JË¥P:ÎjZ¬,ÓÇʃPák ô(xi5š(©¸¿0y5Gk-¢Õݱö°Ÿ8¨”µ,øP£I•¢ƒJǺœx1"`Z«‰ ˆöŒÄ +)‚F‚u¦…ôíµ¨ ´EF›ÖÚ¾4S¦‰&Ѐ)›mN0-‚Û>’3šYùù²›ÀR¦© `÷Òåa/Ýv•™èVƒ9Ê(`—»Õð¦ÊÒläz;†qA³+Û1Ò1ž~kµMr5ŒÒTŽÆX¡hYaW9Š+D ½}ó aŒ6³ÕÒ**Ì×'[Ö×U&ëãDkªZ1c”+ùa1¨ZVØUª%+”àG*Ó¶>p%”t)¿eë3inY}u1DS‹‡íQ4ùÉÉP'p2´ó7”@wR–·ÈÒ1±ÀÓâa»æ¾àçÓ0ß‚¯ƒGSð(µoÁÇO‹•èÑJ¬PF3õ(‚Ù[GO‹­èÑV¬,½þÀ [oÙžGÇõ9BYjÖgÁ:0º‚?Æm ï¤XúˆJ"۞ǴÔiO@ E”“…kRŒˆ…ü°ágiñ$€5™V9òáMæ¶Øñ‹Ø–Ý[Ë7ëX‚PA¸µ‚;•lXF¨•ÚX´‚hðÊ<5ƒ{¾†ro©2fÊbBDÌIi±á,‹aÃ1B @FéߌW­ÄYℵ~™‚œËÁAs0àuë Ðh‹[hÙŃ->‰ªK‹‰n¬ÂÈ_{HÏÆ#½€-%*PX8PeYŸmÒSÉNAaG¥9 N%qÎ9:Ú„ –V<¢[ZM9J=Žg¬'UîbÚÈ™{‘£Z0+Ñ!©Æà?™¥>6ƒXˆÆT *Š´Ó Û·ŒA HaKàÃ)(„%FhÉÝpd¨}È8÷Dƒ` 3^왎Ð0y´.‘ åAé;ÛjXà oIÙÎù‹-z³€MJ?9ÛO¹h1ĽUF9?Û@ùq¢o[ÿ ,ß0”(3þþk:⬉^y ¥¦–5™o§B³± b8)E´œ aZLÞÎI‘GL€O®<\f¬¡šK#¸¼X iCó# Ïh°ËB „ Q.˜p˜ÔvNæ|Ð8c•õªrÕY‘jZÌëΉ¢°¿DùHL4 {¤â‘?Μâ½Òáñ¸˜·Q'Ñ×re4S—†ÀÈG<ÄZD/%P^‹SD:ÎË‚®´–bDÀ³‡WJß’§îºÝ˜nI™)‚.ül­³'­Ðâ¢ZËÌÆxP*íw„ç2ùÉá·sø\V©çÔ0™R``ˆÊd’…'Ëw€»¾Ù¶òG¯ƒ8ÖÚs«ªó¨ìàMéQœ@t„éûBzF÷Ui˜¬ƒh.bŽ0M¹oØc"y´Ü\,¯[¡?¹]·âœ€Úó‚n°nk½‹W̳;»µÞâÁ‘Ö1ãÁ­oѽ*DÛú“¥3\µ{q |‚PÈ1%Á[¦>ï'±†Qo/.‰L0oRt¯,ÑF5Ђ&±žV0@)Úh?ª€G©£ ˜X)º×¦82À’SÆ–˜f‚Y—"Fm‹ý–_`câF¶äG¦Å®ë\Ób§¥r@£Hg’µ %’²¶U䃎¾Ÿ-âÃè²±1œ(œz.Ú¢{9ŒÍSÚÑqJktƒ%Æ9èÏdK[D©«6OiO[t¯¹ñÔ·´E¿îhGXJx3Sš4=µÛR ¾)ÏN'¥²‰*®Ó+÷[šbš)oÿÏbq n#®'¸Ÿ ë1Õ»b`ì[¯²ä`è¹ØIÄFƒ¤¼r'å!Û€ ±J?@ñ5X¾;xùÏ)}_ð ¥—ŸŒíFÚõõ`Œœµ-&ºÖåAk Óµ€l‹fÉ*6q«‡Ò$U§ý:Iâm±þ¬–èl'v[>Ã’”*b’(…Å«c …¶YWQÕ‚´’NêVU@À¬ÆñBV£uf¬G塲“éGÖà#õ¡è'/¬a=‡õóÖ°üà ú…k€EW½ýô…5Æ2þÅ…µ¢¦«¨zRº¶Þ/÷¹4|øúy¶ 5VË2,9&îš)ÁƒsO©T;ú!PbÁÇݧD}òZ; x¿Îí$öw3êêØ­@Jv“V] ÝÜÉJ¥{|ýû|dºlm!¢ÌxW@v@c/%w¶²ú(ð·g“˜¸ÚÊÊ»¥kt Á8•–gŠÚÙi¢ð·g×%xG¥¿OKƈp©ÍÔ„–H³ e"y%F c….4 ¸­òS95ôÊ“10å”ÑÆ‹’Z ÆöÙ*J„ÕRÛ¦åõ [=ùõc»[Œª*gtÐ|*¤Ð»§îÜå-Ž„.Ž^¸ ÜžãËhe2Z÷RÍ=$´ëå6E>ƒÓx©šm¡«ëÚI”gY:š¯i½qÞ+6»ÚŸ}ÃÞ_{+$Ó©ûÙG­¯z+ s@Ÿ-ø¶Þ§ÏVÝø«¿– ¢ØÖ:sâî±¶¬ÍíÕ–g'Jj>¾~ß«QWö ”Ùh«¬«¿/W.Ô䳫T:`½ŽÖëäaë¥è< L@mYxUÒ=`¯WŽY…Çè‚ëÆ+Å߾ĭiÀx=$¦b¼ò4¼Wψá:Z¹#,§hl’ã8G×Þá Æãœ§SÄP—Vº¹NÇÅlQÂŒ15AÓ˜ÎÊŸ¦9W(Ê*’Lrʸà.¾ÎŸ.‰qZ;ïÁ#iå2\„ÅŒ k¼Zm ‹Mžæ™ÔÆ4"…ï©¢izp(B°ÀéìÓâ/ÿ w²‡•.rž¶ù ×>çúuvµùœ}ø–—bÊþXMÿßÝl5½z¿™.Ö³å€ýy³¹=;=]¬ÉøjùqJ&Ë›Ósüëçùün½Y7ËÕ)Õu <:;»ýtý_Óë-3”Ö™|û·Yñ¥ß`è–EJoÞU&t>Xs¿Ý›ÖNo·šÉ䀧WBA­öÃÄ)TÛŒw²F)ÆÎk‡|Љ-Á ¥Å9«K^^Å|FËBR~A/êóUM•²^X®òöòÅTâFçºó D-ÊŽ¼Þ¢»"(æí•F ûÌ)á!Á±Á?çãÍôf°Ðž:bX:Tñ}ÜÑì€w >-¤À¹Ïw®Ï͹¨Ï"…Խǟwõ©º]P׫.¦¶Pª¼S — ÔÜóÚîã·'*ë•{´þýüÔ§ênÏî«òAo…œrÝ«½žNŽÌ á1¶GŽyŒc’✦¨6)¡NaäéФÞjæ ›2s›·U'“¬$¯ z¦×k7¯‹›`¤,Wþšª¸Š[2¢° ¼Åºô/ÜPÂŽÒº!ª8iµ_pÌZBÁï´^ Fœ`¬à9,½EÎ"ÁI¬©HZ¥eú¡0ÕŽ@Z“\±.6K `-–ƒ›qyÁŠTÿ5ñB®>”Òwƒõ!×Ô§aÂø»^ÁIô²@žKl¼ËÞ(,=´gdÅŽ]²GÞ…WàÈûCï&² 5Z ×½öF5ÖHjCÌQ÷F“ý¹cìÂÄU“¹¸¥‚¦Oko^ÿ1÷Fssá…îj×9Ûú9)€Ž›£°zw¬ÝQíXgqð\·GÿQ²dÉα·GE–BüÛ£‰KÚøR™›{¦V ùÛ£‚»£l¼ÇÚ…©Øk:Æö¨ÀxQÅZ³ê·coЬMùSÜYdj/”1ú®iÍJèÚš#¬Ó*Êl{TpÓ¼^¸QÑ·Gᦻ8н= úLîÅž;̬ªükƒçÐ÷KÝÿÃÒš»Œînû]Èb÷L ×!ïµõ ó‰H[Ÿ0•ê0Ù a¿ái¸©ªô}7ƒ–±ÔŠJ¸¡4d_8ˆ—ŠcÉìÎØÄ¾8~ü¥Ñc.í¸’¸Ç^’øÕw¯º„G’y46‚šÍtŽl5dö¥¤AR9TWêŠËp¢é£²JÜÛS èHK“%m:÷moÈ`’:¨,í^ÊÒ{磽² ½²éðÊÍœà4ú®…/‹Ù†Ùç-òØí/ˆ¹pAx³.ÖIàíá®(^gMþ1-`_¼ûþ64¼{ðŒíÿî’(« …huñ9îÛ7hÀôíéAo/´.½½PÚ{{ }™’~² Ÿ;—|o\ ­Ãí½ŒÈŠ —ñ#Øœ®Ÿ«"cø)÷$]¯bHPô ›€¼¼ª]-ÃI9<à%] Z»ù…s,¼yÍàË=ëGn#Ú±m Õ¦Nnhõ6ܸ7“ó’Íû·®{¦ÊÇùxò{Á}a×=M¥aÞÀ!ªx; u°”£EªùˆiÉœµÎ­$àpKSøÑ•A×µA«Ä³fŽrÞ%p78©Yª/—Úç„I0ð@«ÎÁ€QTFÜ3*;}Û°)ìx¡FÌhN²·ƒÄ±_=×^ _Xfmg¡Ýí&'šÉC:è>>Å2…ŒK‹~r¶u6ßLW;ןø0ÉP…©¼ð½éŸÆwëõl¼¸˜ß­RFl›™ðêrúe6Þ€û’¤þ(ðñ÷˜Ê³ª<ívûèÚ=VI{5aöƒäR%Œ7Ì«4™ˆÅ^¢….!NKšØ’HyPâî'û&*öq¡v «¶=€F¦¤åTGXF‹—À$Ñ@‡žÅ-€ž¨T^†uË™4^AlìOdzSU½)_S#cP>žl’œ2$|x’.þd>»ýëxó9éßíöl6JS‹é“·é—¸÷çÁˆ E¬äC,k/@èÈÁù`¨ 9ÌÿЃ_&øgHs¿P›ÿ Ë«Ù-ü¶ú–u¡¡ü›÷-7“-ªlâÚͺ>ØBäv J’BaW¬çgw«ùß—|G¾NîzFØz³Zþ>=[,ÓôïQÂÉo_€&ÎV˻ŕñŸËÙ¢|õ¬±Õ|ÿœÉìÚÕxýy¼Z¿•žW·ÆÍVg5Æ9g³›¥¥ÀŒÛÅÄûº ªÍ·[€Àx5Ù[F2qm²y®‹,ßL+¬Ù‰íý@]*ÍÁÈðšÇÔmˆ¤s%H˜b£³Á†(ªÙ¥½|J¢Ž4uÇj™Ñ_gkã™Eˆ¥AgÛmCðèçY5óR8*¤æ–‡m4GuÅF¼öKEêu}Ðumæsi*FRì]eÌ´:)°+ÃBÛ–pª8è|G ×€È×î­´±s‡BJsÚÕ¥Ä\ƒ”mEL—–@¬É—Qr]²J6¥Ê½âƒ€9f­ÉzîáÙ%.¸á™ô0ŠwnÚ݃+„PTY¯ó´k yÂtê[&=«½BŒ­p!¢“JØý×¼sÑ’'êþgU˃="e¿*ô˜”H‡:C‰µÎ 0 è5žö(†<˜öè”ÊŒàHÀB@ ¦ÜÈ 8ÛN ðó@Ðb3qø“1P2RYí ǸÚ*¶þö$µF» ý=˜ª”1l°¢*ÃòOfäùlå_g•K´Œ«ò GŒ•½€"éX !( ø0`bôߎî.wD2vxû¾v¿áHÎÎÃÙ%Œu=ÎñìíÆo"ôòíÆ»:ž½]ÒýXÆË¶K?\L¾x»„uJŸø·]""tj{vIKÞé` ½ÌJ;Ô÷ Z &Vµâ ÔÀÆ3Ò<¨µÙÀŠÞ¾tX÷©…ú¼màÎɬÿÒ6°y{$Tíáâá… ÕV¨Þk¹#Ô„…?µy PãüŒ¤>©–ª´Q7N¦F¢å ö0ÀJr€¥`ú‰4y¸A½š6B¤@cÄJ€¡K€r †¥µ˜5%nºÖ«!—"}§ëú ëÚ ÇZ„l¡ ôÚ¸ûdVƒ\÷BóVˆ••!ö ~w*BpŒI9ã¶+> Ž˜åÇó~R¨ØŽÛCA)F"JJÔp-J«K+že  #쉖žj@‰;ƒã“Ú:–B)û4ÑZ+,ØÌ%Ñ`V²Ø±ÉýsÑ…2¦”‹ž¥eÃ,É;IOÕ$×Übb¹¡Rh>øÅ»Š…ÉPƒ¼Ë®JƒÞˆod PJSJAPBa)Ò ðL9+½kïZmàó®j ÎÉæcο–?ùïjñ–ï`ÂY•°3ØyÚ*æà@ÂjbzÈ6{¡B6®1Ï‘ßæ¦'éßÓ1þ–Ð)ɬáÂ=íLôl=YÆùby5Ŭs •Éd=™5ó<èøsÛ96òÜXêá½^¼ãPêªßŸûæ,5Ây‚cªE (é•Ñd”ð¤åCB)B¼ìÅ›2VLj1¿t³Øê"ø]¬x"@ÁƒñmˆJ¥¥©(¬‘óŽQaÙ³Ô\-`ÖÅØw}‘`k±lf»< –zxÌúÅ[€¥®±‹çnЬ˜ï¿-À6(9ú„£OÕ(E¸¿t  A¿t P¸ÞÄ¿ )ã:»P\ª‰n §@¬<¥ÛìÈsànÊÐ-DQeÝë4‹@ þÛ,Úi¹CS¤5‹vp†r&#®ì§Š‹mÙG6‰ØÃÓð°7€-FøèÅ›XÓ­þ¥M,sÜðÑ 1±ÌqwèŸSƒ§ôjPбC¯­`K¥PÊ> %ˆÕ‚qÌ3Â^)ªLK5(T…ãRˆ2”˜”Ô£%E¬ýJ’¦Ý› !7² J é¸E("…, oeÒ¬WŒ™I4(¸ÏofÓTx0â„qnÒ¶IÄo6†ã‰’UvKÊCM³J1øÍXn©Ñ™~Z :\#”°œ¦)RIÁ£L²„j-œOI V€©vÆ~%¥&NqP´Is53h¨‘(MšŽr„â ÒÈFá–ñ)¤“ökîƒz J å¢$ PtQZ°M•]bq-}ì—²ômš‚ƒvÁŠÄèò˜ëÚÄ1ÆU@C©äÄ‚³nK‚AÐüìJ™hA*_Qü“‚á(ëZn»(%\±­'¸xyóÞ& »J ×þ/‹Õ££¼,cE+ºÆ—uiŸØ#cK$ãóÁœ^M¯×?½)²ÛÆ7Ó«/³é×À¾ÎW˯£¬ßK+yWïg€²zŸùýÛñ§éúóƼ=áõ[i®â9µZïfWÓÍr>XM¦8cvcð¯Ó¬áDÒЧé+—««é*+]N*éÂuò“ÜÀÊ.o› ç¸ÿ8Î2B³·ÿc¹¼IxÉhÈ«€%=YhÀ  •e'q%@…Æ´ÉF`擪7¾ÕnLîV+ ¬Ñ|üm ¯ýËìËt>_þVi`Ííí}r%CS~aýyù!‹•î*+Äë£Ûåld]¿¾ÓÍø~v3ûcz•´ˆxSúvÁ²‚OVË›¿®¦` ý:Ýlf‹OÇo+ùÞ珞–«Ù§Ùâ¾h®°½ðÍë¶€h]|‚!²|å[q%C¦¸2ƒéÍmãu™*Æz—…-.§Ãg%ÌTg£Ÿ^½¹™nÆWãÍ8£¢ì³À^oë³õõפGþ9ŸM¦ë´gEöù×åÝj2½À$×u"ª²µ¡ÁRÁ1-c˜¥´œqóËôzó—€)"“Ǽ9ÍÞàÍêêúì¿.?üôf29ûïåê÷í2ñêøãò¦Ì^MÎPv7?Ín€QN×_>ýïû›9È‘üŽAdn¿¾`5]'‹È[~ÝÞ­æd¹ú߃ÿnfø…Ó_7³ùügœ7ͩݾÇ|¡ÓV§:€ž~<ŸÿüÛ¯×ËÉxs·ÿ¶Ev]–õ\aÙVª©'¸Êu[ë“x§'ñÀ“\'±NOb'mCkÞ£^5©ì¢­‘M›]%†ŸÄp]V^e©RÄ•µª¶–Ž€û­#ä 4—t@—•Xi”åÛM&Éù ±Ýë*äPø —Ãoi©RÞìÚ fÑ﹫ÌbR—Á €ÆŸÖåÜöj+gWΫÿ þ!e–Ñ iÇŠM.÷!‹1½v™ü”—š5JªÏ’¶1jïP^Ì#‚ó8™ö|i˜ê"ù©L¥Rè—áüÓNÈ÷êŸÄ–XjA$Þ»âÄí·±  Ì¢oI€¤4¤î 5 ë•$ÿ–ÿáá^á†Ò”Ö“è›phiZ ‡Vî‰CÕ‹{Ð t9gl«çr¡ò¦…¼6#0šPi0å«ä—é‚ã’ëÐTòT.̈"kÜÚ‘\˜5S-Mèê$áöåEÝ#É ¸ƒÔG$V°aÜëp9LJ¡Tš™•ÈÁÒ üØÌ–L~—*,«,äá ih†44Cº/Cš^BDxe9sDqž3N„* —?–Ç´`Dç%§²5ž¥Ó10fà^˜baîí‹)&öÄ”íÅrÜ™¹ÝYãOæ<³cÄ/ ·žä,Ù—ÝÀœqRò!—Ø%<»1‰<̶}‘ÈùžHtZca¼ÝzÌÇ ùmä0äÃlØò‚íyG{±ÖµqÎx{µà61k=I7BQ§­Ç>¥!m‚­DÜêpvÈ9ÅÎÎ*Ÿ["Ìo}±%éžØb}°šÌ]6/*|¢À'åL”­‹X|tK{B^†ù­7äÝžç½ Ï‰Õ–µJ(%AÏx;¤á®d¸«0çô…û¶«åpïWPØ2Døµ1"x îš(©¸wn™¦ìp¸ë°Ò î:Ì7}á®MîþÏô2±Ð¯Ðå¼0ð ‹Dk¢™;ÖdB¿¶•²!¢@¸ZRè ´]ßÒfÎqŠ•eÎ6lõE‡fYÜÙÚé¡O PÕ“?$&æ0÷xüáÂÁÔ¾qaVë‹§÷Dˆò" Јé‡IÀ;rYTŠŒc>2 "!ÃÑh;xP7¼ï»Cm÷ÚðPŒpg2fH·!\»ls#qÏFÅKfjiÌRÞ.í£¼ß/$h¯= eˆ3ÌÕa¯)aNûÁ § {¾GÊCìƒîñØ÷r‰+4ÝL÷ †³g{Ò)½`/öÛ›´—c\k3ì˼ñ´aÚ3è{Þ.hÕ¿ŒúWq°4¥§ ¸XÌU ú¾ÃV-ô¯!Bä!»£kà`L§¿–Ñö€Ðö3‡˜—â¦ðМË@Û!÷C³ÝÎ !l¤‡qœ [ù}¢¢m8åöDˆçP+õÒ]?th<{Ì?t4w«(ÄB‡ÞÓfž;­¡,=gÐOþè w0Þ­pVt´äöE‡‰æNãê ÃЮ»Y¯dE!ˆvð‚«XhkIº[(¢œ,}åOIsÛ(Þ‚ { í¬ày΄>ÓÅAGìÀ¢y˜ŽNæ.žpñ”€ *˜?íhžBaÏrk/W( —×QD8ÚüXm¥cñÇ¥þð¾BLÓÞûmüƒ­OV­²IôÚjN¡¹çWpÌ~ÕÊ;l^ƒW°üƒT€Åzo’Ywñá¬NÞ%k§KÙF—\&”(Se7iò˜TùÁ½;¿|_P0=.è÷Ö^\ðê4|?F¨6@ íoÚ<#P_Ú÷ö] FaÙÍMZº¤i.õ^_ÔÐ֒⪃S½»xÏ.Xe*ŽÚZ-‚ŠîâüÒ¸‹ê\½Ùö‚]r[å~ Ùî &ÝFM˜"Àµ,Žþ>júðáòÃEF2œ×Ê%oIȹ¼¼¨¢M†wQAr‚¹ôy•2eØÅ2†OO|øðîÂÙê\½U攥Õiöô¯„i#'¥ü°Ú3"'0ݳRhâçbJ¨*¼[‚Zº 6ͬòæj1x J'þ^HQ›«wp±qÍö´ÀzEÕÁa‘Ñž[`es-0î¨Á’-^_§Ò˜6 cY`nÀ?ÊûÝûeÒ÷Ö©Ž^ß®¦ã«?O7Ÿ—WØäéªÙ1ܼ¬’J0ŠÒÂá5 ¦Ù/ Mˆ^Áö:J|K°!þˆ8èæxèdú¡cÏÞBöJN«££l/6#¤<&‡üà‰Ï~À·{æ¨É^9juà—Í«fà—Ç<)à÷ÎTkþ~ øBöJÀ¯¿lŒ4¿<æ)?˜zÓøyÚMs6ø ôRØÚÞåÄmYÇ"A³rë9:¢¤5îaR4³Z-MakÏm9tËlK⎇'Å¥y÷¡:Ó~§”›çj1#3•Úääòwªê/[6#µ6Á÷:wþáÜUç ûÞ††MR÷νwÕ¹ZŽ˜š–©¨ö²:Uô–¥Eb›âܾKKZzsõN?i¤+¶gþ‰êeÔyÑÀŠ¥tž4¬s$%DZÛx*<ÉÃ>yOžäa¼7Oòð®gožäá ƒÞ<)ÂÑÞ<ÌÿéÏ“" úÞ<<èÙ'Åž®’êeŽ´à`góâ(ú·;MžKŸœ¥-JËA00Ïwó$rçÜ(–°$§T€¥2–¡%wÑ¡ŽHÆ8Ä‘²%DÒ#[NŽöæÈ–Ó£½9R†5[oŽT-š­/G¶§úrdKlª7GcSý8Ríé3¨^>ÃH*?™ÏnG·c,:¿X.¶0 65!Ìn„à\»¬TúiĹÛÍ2¹í¡b´´iƒºíSqriÒÆù‚®góùÙÝjþC½ý‘yý#Þ¥¥ûÏØëÍjùûô _0ý{Û±"¿5ÂI&ãÛ³ÖÚ÷/þs9[”¯ÞÌ6ÓÕ|ÿœÉìÚÕxýy¼Z¿•žW·Ø8cÀcð"»Y¼Ý¶ úv1E+ª  -@¶YYh¿¦iÖí;|P¢‹>šb#4ƒ*#¤´ž5å´!l™òìQ£©‘qQãqPòüüWø¨©¥¯[ùÉkMì}͉±ø"ö&¶Uôq«eˆŸÊHÃÆÖÿFZ i»¡Æ{@-Ãà«PŠR9£{D¸žŒçÓ°žq ¬šÔÿN{`Å3IøÃ °bUEÚíÖ—%A2(Ã5Û•Õ9ÝoCÞ]¬D×-uºÈéÈQÝYâè>¼³m›ÍÜÀv^0&OIÞv+± {lϼAH5jUð>¸ëBü2|°]çóâ@ 7ƒZ؈yÈ(ž¶Ò&¬áM¥qF é`„ 2X0zÈq‚ ­ü‹é_‚°EŸÂ¬=À­g¤*B©3¯àF…fC<6Œ¢(wþaÚ™Á¨ø,”†Ûø|Ç °Ë¸³Jl÷*±-ûÞ„k¥µbù!%(N´âÖ°â—xÓp Ëš  lúH5Ö€çdŒc }bð)nÞá{( Ä l®‰ÆÖjN¸´Ì±!.$¨DqQþ¨ñËZgyÝð€üÍr5šÜ­¾`kŸ)z¡\bJ„ Æ› ®‰­­q¯ËD(œ˜˜bÅQ©±McßÌšm ¸ cl²@µHCÛ¿ñp¹¶b(7J)]RŠåV£éi/•YϯÀVIŸÃF1À7s=?+o¹rJ¿öyK ‹+ä|dB€2ÁÄyàcüŒ=•ø°¢ò.(àP<³µ §-%H¼ŸñßdæìB:R‚×3H¯%­Ñá{L¤_€kÀté(v`Ú0j¶’Ââ!Jü3yŒYJ=d ,‹¯‡A- [:Â¥lêüŽfN„\4X»´'ÍDdñ…Qö?Úl„ævÔ#*DIfP´hìÏ-jÞ€ÂòIÝeC3u6«$ñ¼U’VF0TI–[¦|•¤”¯’D®’¬1ýK²D‰€ä¦:¥l$\i¥6¹þ>˜[ƒDâËBä ¦&òÔE>(<€¡Q·¡–1D)©9ø€¨ð°S{ò%¼í† ƒ€Z)O(š)>L^ Ö‡L…}HóOŠ˜í¨>ø28ýl(’÷ÑR ¬Á*c` £ö?5rÓz/r+¬ekŸ<¦ Ü€”1…áå˜Âþ¬Vâc ÖÀEìA1U7>[ÌNó<Í΢cçòjŠ=×oO&køL‘…Ìt›©þÌb*>·0w€š˜À¬F ä6Ð2 TÇ4nªRà ªì_'Áåx Ìq®ÌP‚ÎWØkô ÁŽð3ÔÄ ¦õ3´$p…åHžàˆ2Ë# sIK/Â%°›ð 2-’ &k$jšqx—­"-X'³xÒq«ËUw«ŒŠ­ÕOUfõÃË%&>·2³ú­,.¥V¿ðŒ~™ý $r£ßæF¿0 ÿâË‚‰ žÚiðÌNã~£‰ð’XÌ4¢¡.il#wüYFï×ËÅf”ü 3¯nÆó“+_“¾´¥KëÙÓ3Æoï·¯Ç7³ù·³ÿ¸œþsü»Á¯ÓÕìú?~,ØGíçd8^q2@ìê*}¼Ûlj<”°MlÃÉ’µ«íÖ¨³€SmÁҘĸêéH¾l?I'ÿg ÓuðA:V æÙàQ2ú…güðN>úË`´3øŒ)ùZÕXh|]löt½™f’n¤¶; CTéŠÃ?Ëè9ru>üHß‘“€Ǽئž— æY•]ºÁà¶™ÞkþTˆæ8Œ¾Åþ4ùé® aÎÞ|\‹l÷sa¼Õ˜Ê…c¸ s)tDÓˆôÓm/*K*˜’¤v¨8 Æ&´ o„I”š TÀ ü Ù@ghø6uÔ @ ÞÀ@ƒ‰ž68—pM10ƒÅÀ0¢4‡†·%xÀÿ<ž{rùaxn’ÂŽ[˜ðú {ºùôÓ«ÿеACarla-2.4.2/resources/16x16/dialog-ok-apply.svgz000066400000000000000000000067701420416754300212640ustar00rootroot00000000000000‹íZ[s#·±~¶ýbUHÝKƒ–6uìMR®r*U‰]ÉÛÖˆJÌRfH­¤ýõ§!gH %QkJ{Ö1½ë|h¯/蹜þñöjÖù—Ëi1?ë‚ÒÝN>ãéüâ¬ûËÏîs·³\eóq6+æùYw^tÿøæëÓÿé÷;?”y¶ÊÇ›éê²óãüýr”-òη—«Õb8ÜÜܨéTEy18éôû2rùáâëN§#ËΗÃéYw->_ªl\œçjT\ þ7^ý8›]/We¶*Êh¥ÝfÜxT\\—³4ÿx4ÈgùU>_- `[|Ôˆ¢ÒÓ¹,sUÈ¢2RÖþfK¸ODºÙÄ %!! 4û"Ñ_ÞÍWÙmw¨ìmßPÔZ¤¯‘½¸\5íéø¬+ûÃÔØ,?¬}O+ªº6snwû‡qþ!ŸEwM@>ÏÎgyÿ<½¿(‹ë¹,4Ïov×#Ñ[v5žŠ+_ô‹÷ýl±˜Ý)QéãîºÅõjq½z—ß®òyµìº¡ êNãjpw‚üvQ”«þd:Ë÷¯¹˜_ìq;^ˆùÚ½ýw[ýoDàtœO–Q°b7¶L÷Í©8Fž•)³ñTÂag¢Q1›å#±J6»Éî–µav‡!W-°\‹jåên&[‰@_f)Êá7“ôû.A…8Ätu7„ﺕ|1™,sYHw£$’œ2ø´ÙõýÙ¡5»ÑiöÓÁî–9-`¡EO&¬ŸM xQüÐÙŸM „£Càó­õ z‹Öø‚´0@‹Ö`ôs½“(~èìϤÛ¤ÅB˹Xó|òlZ|¤åÐÙŸM‹IZ¬;È[>Á[,è-)öÁÄRS°:f‘b9ºSª¬îbõµ+Fãš¡­a ïUL‹w·gݾÕaÇéøh Ü ±C§þöϺ^·'ØU¦_”Ó‹©TF”„L%švüõW_¥?{Œ±¾þ¹ÌæK)G¯ÎºWÙªœÞ~«[† §å¿¦dÒÐë ¨åN’BwxÖÅ d¶ª]¥íLjkSI@¬”¨ê…ÝÞF•_æÓ•”ã×˼üG,iÿ6ÿe™×Tÿë¯?ýøö¾ë¾‘-}U»Imeaï!Ÿ9ŸìÓÆ[ûçŇç ôļµZ®'`Äc—/ÕùüoçÿÎGÉ4eþŸëi™ÿ´)z—Ï¿5ÛÄXô°‚ÝÛšÝ%|âøt:\\LþžO¢LºÁ^–¹Ü}“Tx7mV~'‚Õ˜ÁfìPZ;ÓFhoÄîÕ‡FÈá!ÖŽÑvh#ß=$-¤,MœÍJ´-fÛ·ÖgwZ ¶ ž‘lÀeÉ[*D¶ì½²5W2“–ÌDdBPÌUHyÖ5¬tü™îã ¥©¨ç”&¶6ïs¯/+ õl)¶@ipÐõú” l1ÄÄá–kr@ä'6+FŽÃ¦umëäÄAé ™¡I]𝡒Á–Œ ¤›`øD¡>Ÿ=(§‰]s>˶™FWÉ`KFãyö‡æ/y¬¾Ê˃&T¢dª‡“ü/Ùõr9ÍæßÏ®ãOL’nÂÆoóÓlµyvë^wB2òÕÊG6¹Í`¶jI¯,úP›ÁÅÄÖûÆ ^yoBc§Ð{Íæ*¥t¼'‹±Vz5–^»üU•« ŠÉ³9znl¹õ¿íƒæSSˆÕöx)ÄéGrˆÕ~'‡¼Ú¹hŽÁ‘x`å bmŒ÷à 5’61h‚'p1vlDFìÎʱ'öÝ-)GD µÝ-¨Áé ™´d&Û2­»™O6<ÂÆðßÏòùø ‹_ã\²O|à•Ï»›!Ôßׯ¨¼Ê.ò/HÓ“EÚ1ÿ'*m7ä"õŒ„BËÎ39EÎ8Ëëg¥•œF@÷ÞÞ+ÔÖ3òñÜß2¯Ý#!€þ„/š‚#p@´Í&ÆàÍ.¨½³ÁnsÀj¹†òEðØàcØcpà¿l?GàÀÀí¦•ñ[—¤Aý|<~j3þ0Íošyγå&Ç.$ݦ—(r&NÒoÝq^”ã¼Üt¹ôÛéZ¿g©?7J °VÌr9ÿF¹th­ë®ëé8ßîÛté}D«g›¯¨c½šV{û——Ù¸¸‘ ç~çÇ¢sØ(´÷ûâêL ½Û‡Ž‹ÑuüŠ®]ÿ‹Ûָ벌³ì.Î.,ol{YÜ9Býª¼Î“‹ˆ‰ê‘±K ô«^gÜÞE,Ž®$G5¸Œ”Ì/d¦V¦Fïºy‘;h{C¯òU6ÎVYãÄo”,Ç“áßßþ9¶R{4þ³(ß§fúE켸NcÖrãÑ0–@ÙêÍ4éñ¾?È—t§ƒºcW8î[€i˼úDoßWòçj þ±’×_©níÖzÖŠ šÍ>¤±Ùej]ܳã,;ÏggÝŸ¢;pßʱLY¬ ™(Ñ„gÕ†DB=mó¾²ø—“Yq3ü0]NÏgù®q“³Ô>Ðér–­òoQQ pìò¾íé“n½ÓE¶º”ëÝÕ&ÂÉp^Ìsy)ZïóøŽÔŒµ^7û)¿ Á*|‡¸éˆ…±lt˜ª±mðßÅt¾‹ ÿy9›Ê?C³ÁÆ™DbYfwÛ‹o½“­2ÕPìøí7Í=DUß6tÄ- N[° íXIÎõ¼Q` 2v~è§ÐØà|ÏYÅšBðdåH3úžñÊÛVû§Xäç±ç´rÁ˵ Í  µÒ9É$aîfŠœ§à{ÈIƉ{@'JjKÁöä µF¦½[ø¸µÏÕso­eÚÖƒƒ-Ïh3¨Ù¥¸¼a+úE­rÞk‡‰Ad„A}øÄ‚Ó {1aGfrÀ"“–Ð Ú¬¬™$e‰µ0©£Õ4pDµ ÔZ¨sŠ=±eQª V„²÷Tj`ïŽ>îñ'$g»OÇIòÌö+É“ÝÀá× —–1ÿ{¡ BÛz¢´ÂêÓ˜ïöÛ³}KÏž^¥Ç" ðó ÂÉk$‚6yF‹Ä˜ØÛ˘±þ$õÖ[ØÕì¯ ŽÏÉ¡=¹h Ë¢ë#œJÆ‹ ZGÄ Dfã"œ1 3ž1eÁàØ¯»4V00`)É1ÖB"O’\r%ì UÞ„à³ë…J)”¼ÐåýzFk˜DЉ1½I²gC=Kн¶"&ceƈy^ÏÈ›el !—@‚Ôim† †À¾ÂÒNHlï=ùJë ‚’r ¬öP¸?Heà3<¸ß¸0 Œ$`uÔ„ýs‰£ ÃÃŒ¿ &j9p‰}ÛÃÚKþë0ÉKþ븇µÿNþ[uÕPNîkE¬vßà£û™­öÞàTÖx®Œ3$5~+5l@ÀÚoCH~ë|j¿,lœV4 SgZ’¡Æ’ö•à ÑcMk­“Ã:ÁÖþÚf쉫¯Y >pO«àµqÞÇ+X›^ì$DUQb©×%„ýµ+Ývß¶»ß“Õ+'«vòðÞA±$æ/äô ¯SA4lÍ£ î‹«þžÀmË¥¬ïœ"bþ÷<ø²y° äÁ »ÇŽQ뾌H0ðœúÓÆ­}xãZ›/¤~ø=n^©~øôo;Ú‰‡–¿çnûÏóôbï>}èþw>’zÒ¼å ¶Î=QkžG,|bý¯"5±í¯èÛÄîrX)Æ“fL &ªÛF“¾]¥¯c’¾Y»J_ä×ààÁV âŠlÌ Ù ¶×.À{äuµl,“‘…Xim‚AYHPg‰ ­16BlÈ1o *MÌv[­€4…mÔ‰".hð=oãîMÎüþì³y¬ôÈ“ëýeÉ>‡'ƒ÷|ÆZœï*/ ÒgyF¹]’¶¿ñ<^'K‡T xE¡Â8`…‘u“ rÎcˆ®!€6‚2(¯­ì.¢·Ñ)S±~´&F&:&Äд(qè•3!P M‹È&Ô©b˜c4bèŒ7¦ÆÒh ËDÜ“yás&ÿI‰ ú-¸y­]Œóø2X^Ìä·LFŸ|2±ô9 ÞsàžY’œ+lÏÀ 3,¿ÝVÉ)0l+o•¹å··iRà`¶éð*€³n?Vù…FÔ6ú…w@Žà-¦9FNrQýs*Ÿ#È?ÿxcÂ8çICarla-2.4.2/resources/16x16/dialog-warning.svgz000066400000000000000000000115661420416754300211740ustar00rootroot00000000000000‹í]moG’þ¾¿‚§ý²ÆI­®÷*%Þ.Á.Èá€Û]ÜÇ-ŽlmdR ©ØÎ¯¿îRá& ¥Ø²½8&fª«»«Ÿ~ªººgùöOïßÞL~j–«ëÅüå ¤|2iæ—‹ÙõüõË“üýÏg~2Y­§óÙôf1o^žÌ'úãï¾ý·³³ÉwËfºnf“w×ë7“¿Î\]No›Éެ׷ççïÞ½K×aZ,_Ÿ¿˜œ•š«Ÿ^ÿn2™”nç«‹ÙåË“þíÝò¦Õ›]ž77ÍÛf¾^C‚ó“^ý²W×¼JËfµ¸[^vÍ_^îj.gWEµ·äµJçÏÏŠÆÙêÃ|=}6_ý~§j1p¬*æœÏKY¯yœÖÅû›Ã/Ó–îö^ ¿-ÿÝWØ R7Ö«R³Ióf}þýß¿¿/<Ëi¶ží4³E¾63>óéÛfu;½lVç[y­_fs¶~S˜€ÞÞ¾i®_¿Y÷÷׳—'e|ØÞl»¿¸'PNÔmÛÜ-bIP |64[\¾š®ŠÙçoo›óÙô§ëÙù÷‹Ë»Ž‹÷^7óóõònþãyiÿfúê¦9/ü\ß­4TFXš]æ¾>{7]Î §S±ýç¡‹»õíÝú›÷ëfÞYUàé±êŠÛz÷ÂaÍûÛÅr}vu}ÓÔ.‡¶ïu;=Zùýì¶L9@B-ÿ°SþÇ¢ðí¬¹ZUÅnFê·¥¨0ª™.ÿ²œÎ® h­l·ÅËÅÍMsY¦tzónú¡ƒmÛΰ*qÎ]£µÙÕzq»¹®@¯?Ü”¡VáYiq±¼øýUùåüM+Zf]¯?\À7'}ÅÕÕª)wsÞ÷Zkg<™œÿ¶ÞòXo0Þß÷öíùpØF2{Œõ÷TÉâ‘0ÖßSa$‡g„ÃÆfJ¯ÀŸ #V6>¶·'ÈÏÉÆ¬b£5œúh³÷(>±³|4ˆŸDt|ˆÓK&€§rÉEáÌ?Et} Šã žüÈCÇ êñ1´ñ@g:Ôã;{>*2=ÊŸ/9ó©ÈÒ£xtoO ‹ aÏcV®Eš³åç[¤9>#Œò¸Õe&O]]8‹?ň§­.œõW—z$_=9aŒÞ¥ïíÉ c„=#ŒÏ–w‡Ñ3æÝaòŒ0 ÿV6¢èo'ãÑ Š´T'è#¤:AOLur~|ª4žê<~7ðŒLD~>‡F}N‡F>]éÙŽu\åu\íax\ª3{òFÚ…·ñc:ƒñÎ~uq©wÓ›GƒØv_¼Y6åpþ÷£´7eØ9Ç}ñåû—'JIÔ¼—~xyâ’‚´—^ê^ê._ž°§œ™Äî…¯7ü}9¯ÊéûÛ—'o§ëåõû?p<=ˉ‰Ä˜NsްSHŒ~z†I¸Õta/tðùõº[8À#på$b÷°|YîSt¿#@²ÄÈDŒ-HœH  H @Œ¢fš„DãȰý)¡ä,zJΊ(S%•ÚQÈØ#8ªu5Ôª°JŠL¨GÀê Ý É\PrA8 +3K¹ VÉâÜHDª§–"Pè«@Y?š›žbu6±%€õ‰gûÓâ¬~gÓC!EpæCÑ¡Wdv ÁMŽ™h#Ã`"&@;ôS J¬AÇ’õɹGO¡d°¸w¼þU¢„™Äû•¤UÏ’!zðú—0åÌ#¹ CÆO’Û˜++Ìm2?cnƒ‚ŸüÙG]†C.탓ÕK'ò}1È*D“ã0©@,BˆýŒ*²Ñ ©0K– É>e®Äẗa®ÄI…Ât8¬œ‚Âc¸ÝuL AbÃí.GÊòåï¢PòsÉ%Âwó¹ä¡)†›%qÈ´Ç$MŽŒÄÃÜ<'u ±‹BãOi 1šÒÁ@S5ž3Ð8ä‡ûp•SÎâj{›¨œ€Q‡›(‰Äèbûó"Îúù“(¢¬‡²~Ü?xŒúÓÁoƒÜeDéª* ROæÂè¨ü?г¨ÔŒ M]Ⱥ³FðSNèê ŵX8u^ž‚(üÅ—€2æƒ(ã~ •2 Úe”¢*ÖÃ:ª{5ª[ÓEìTå¨@ÆÙHkÂÀâÍžR"Ë`jõ&§PÉTàÖ"Jz*‰XLŸ)íbWÍÀ#yWa¦ý¼‹Iˆ•x$ïÊnYƒÆÂ!ñ§ ‡ÙTüp8$þ‚Â!‰7±Ÿ&hV$>ߨþ…Ç.‡Çþ÷Ó9E¸’Æ6MRÍÂqê‰  †šö X‰a/ãæ”‹8ÓNJJÌû§Üœ5x&AÌøyñ4ü¨x†ä<ÁP¹®—`AäPÑDôð¯Š&žÝà׉&™DÓi0,—Dá@8–cò,ža0,…„ʱ7,Ö!ÆGÎÒg òñ” ¯–r¨Y "I{VFu‹²$΂¿5!Îd# :€Û~BD™BÌa,!Òl:š…~’“(aú•„(|$!úTÙ;çƒÙ;gÝß#™ Žxb3£aæ>Ô»êõY{õ2†ä Ù²nn^žüPy2}_/w·o³fämùlˬ-p·Óõ›ß _Yì_'½*&o?joΆegË»›æ¢ù©™/f³ò^ãrñcsQÿ‡‡§üñbSÞñæ’cV‡­¼V)¶_Ëç³]á?×ó¡´@Ú,o®ËŸ ÞÊfÓâÄËåôÃÅ|1o6Ò¡½¥Rg]”ÜÇÕ‚ÌN”’ Ê)Hò¬.“ï&Úž†°S†°LÄ“#(ò)XbURšˆ%±Lä§¥””mòÃ4Y"ž†&`ôì¥MZ‹ƒNÓbb'3‘R?CÒà mízaEÆ âçO Çò'ªyI벘0³UeÇ,ܹq°J•iFw›H$s@is)2)¬,ŒB¯=!¸õE¥U­-¸Õ˜ÈK›’ÐÛô,çL:°c,È¿²ÐC8=x5Ü (¢ ^–8Ž ž!cf8ÀůoíÇê÷ˆ»10qµY¢+u7”\´H-eÊÌUIļÈ"q&¤p ò6àæ€.àš°À6à2Y ¸Œ¢!ƒ€KÙap‘P„È@:bû(YÆç¸×P¢RÛ 1€Òöì { h"0µ”V–YBzPºÈ­Á8( Z†]P =¬têA©M‡Qì-BmH{ˇŒ“Ú ÈÍô©¿Šðvd¶þðó·ß28ÿLɺ9 ÖÔ$«Rt‘š18s+u#ÁºíŬ¢Te ]ôQ=EL²Ùâ I·q•ÚP–n‹ë˜ƒ©Ý>š R'n›É¢ÙºÚ–ÕZ¶;€j­m ¨å;¨aÑô$ÆD\dXŒ‡bQ; ŠÀ*kùk)Bë]m%G!¬¯Ñú‡±ñnÃÕ¥ƒ†&&0çèÝÈ"K?¨Mmfî‡_W.+BgÚª[¼ „+¨¦íòåAYk 26K?Œ ÇÓw82}¿<׈‚‡³¢œR‡›t‰9ª"b»×4œÂý”¢”2†VY]È™ëH 1•‹¾Là‘=ªPH ÊB‘«¬¥«ÓêsÒðí½JRRFíj[¸W¬…»^Pºl7uf|WïÌ9T33“ä¶V({‡IðȰG²ÜE9¼]]ÿÜ\8%r5ˆÛ÷ßtòªs1¯Š7ä]{8ºÕ Ñ9ï0š ÎÔ>ÞÙ;Sãýxòên½~NÚ2’ßU«®¦o¯o>\üpýªY¶O¾&+ÉÑñ±g씢ع³dÈar>uc9º³ öÑè'Å…îÃ*´ed6arT™£¢[öÚZmˆÙò*|æ@ëŽ3"!9‰u2ƒ6"T7ç®Z"Û@ä° rìdP¤”B© r‹Œ«&פ¦ÞtÇzuÙ¢Wë"›€RßÜ&8ò°c¨Þ†®½­„˜úalêºÕ‘ÞG4«(ÜG2C¯8idåM c¤.YþÃànÄ…z/xúY3…æ=¿È)„UÀ>ãYsHî÷Jëñ˜î·Ø}šŽ’É©ýUCžx¶f_c¶B.ê0<À”2`•š²N4×+’6]‘ ìQeÙ%4N’;T'"N³šZN è)! ¤;-P)7Ö¨ý÷}Ar÷L²cBmPzë«,#¨z·rh WKƒˆ4ª7‘Jf«šÆ¤¤ÕßCÜú¾‹E‰„HOÕ“…Y=ÿi…Jì©(b+3¥N!ÒÊ\²ÛNíúŽv`únפœ˜9$zÓÛé¨Ñdl†F³’PÒö³¯Ÿ¿îõ³_ÑäÔ5aÍŠ$’»nnEÛ¢H亹 jõ¶w–x[ r®…]ƒÝM¥%ÞÞ[Þ©gy·IË}o›ZǨÁÙç«Õêò“’g<`RÀ~À<°S-Ý}úŒ§à“±|2’‚OöSðÉn >KÁ'#)ø¤OÁ'{)ød˜‚O¦à“‘|2LÁ'#)øäa >ÙIÁ7äŸ É?Ù!ÿd—ü“ù'òOvÉ?Ù#ÿ¤'_¯»éÉß÷¶­åÚ·8Jþuó~Mh~ì bwôl¿HXûZÏ#Dt»«Åމ.à­Ð 2UÂ;TYei·è³h@t›ì¬ÝRŽ&œ±.ål®¦¥MÆDYjboíëÉ)0„‹&&FrÖJˆ€ t/+µÛ:Ê´#tL!–ÍjƒÈfPùpª‘H;'³$Bƽy›ÌÙ‰Qº3€ì Õy™”»ÔY3Ù2ãÛý£Óȃ˜/ž9œ¨ a‚Îa%‰€f¨B„loEsã* “¨!ƪ?"¦.&E{Q¥m tLHfäÈ.Q @Œ®Ø=1s¸p±Õº ²S/dLž½­Š¡9bB²±Y£ ‡Þn›ãMs\MkH"k‘°t]¯œÍвlKp¯”©gl-E‰l0 ª&ʆ®ºÁÅû‡-ÎF-v¤d-WU @« `d.ƨJê÷¯¾.ÿבòºUùóFkÕ¼îdCarla-2.4.2/resources/16x16/document-new.svgz000066400000000000000000000073601420416754300206740ustar00rootroot00000000000000‹!Ã^å[Ûrã¸}Ž¿‚Ѿ¬k% WÐÚNÙòxjªf“­Ìn’·)Z¢dfiRER¾Ì×§¼K¤|Ϥ*‘Ê6уƒF7HŸüåá6rî‚4 “øtD]2r‚x‘,Ãx}:úý·«‰9YîÇK?Jâàt'£¿œüy2qÞqúy’Μóer8¢h›åVäPæ—ŒOÿxï¼{Ø$iîümד±ãZá?Š>gŽçâ\lÃhéH*„>vœÉºÈîÖGŽã€}q6‹³ÓÑMžofÓiœ¹>vç.’Ûé'ÿ.¸JÒ×S°}:jîX.ê;6Û4r“t=].¦AÜqžAsÚn¾hšß×ndÉ6]ö¶Å¢Ý2]®š¦÷÷î=·¨1fJØ”± ´˜dqî?Lâì‡Ö­0¤¾[!d uMË絚=DaüÇ 1¶¶Ý;Ìê~ê*[ŒuwnäÓËß.ëÊ q—ù²¥”f tú­„¶÷Ø¿ ²¿²i%·÷·hF­ \žŽ>úAú¹(߇Ëüª™¶Å› \ßäMù. î/’‡ÓqL;UEšWQr:º ³ð:*º b.'×þâušlcè,îÝ›aT3kíéhÓ¤wÅí³ÚlârVØ]Žª]%äOËà.ˆº÷.“¢q:‚‹-o&¸0‹_öÚ]û´›þdÓ¥.§¿¦É:Èópš<<®ƒx’ÝÅÓüŒ<˜ú‹úΦ٭ESê=P¯k]²Í7Ûüsðqa&ÌNkªlµ5ÆíÌS­ ° w² £ Åô&Î ãИM¸ÈJã j£:ãÝÄë^ÅË °‘R—ÉÞúÇVýÙÉ2Xek𚔂qy¢¼uÿ"‰¢`Ôñ£{ÿ1•ÕpcÑ\ÁñÞཿͲÐ/¢m©ãI-0kùò2¸ ý¼ò™¢®²]t´BWräLÏN¦E×g'°,?}ŸúËjLëÊ=%˜˜åɦé÷1‚I@ÑlÇû!bIÈÏV”‰ÃüqF~®ÍIV«,€ŽØÔ3kV»ƒV¥Þ×áÊÑ -¡?ïuñú1о1ˆÚ.tžVë-g7iÞý‡ž©š'ª¨ÇËÚu)û=sðá[Xʟгü-†U½Óæ·Ô3p¹·§£/#?~œH×àÇO¤).Íqe  +KX¢Õ,=°N”<ÐÄ™ž¨Cný< ~$c:žÐ1O8¡å˜ ØÌ «mÁ&\s¨U²eÄqWR2Ó2³jH[™h y tûàsE騟ÃPÅðõþ&̃=¶î¯›¡%ê-‡õ½”þìµ`¯R_ÇÞš4ÄU\kêéñ¤¹QW2æy’=ž\zšw¨PpËkS†r ü¥”µÉ%¤KŒ'µh³°i‰X¾j7Pœª·Ú ˜«5‘Ú¨Ž·êª†þÌk¶ õÓªz<öa½ZíùëAº NH}ê÷d¿þoÌwÑP©Ÿïò|G‚‚u)õ–h]/#®¦T¶0çžk4©×ÒS+WaÀ¿¹¦í•‚Ùù^NX(µ©Ô´QŠ"I ûHø|/ úÅ!ý׫Õ Ÿï‡ñÂÞŒ—SƒaW9òò%³°€,ˆ œQmªi^<žŽL÷ª§ÁªÝ …úoü÷X) ,Î~ÖHã=áõâkX ú²žëg°þ»8K‹Ò!gI_0 _Cšbæ=p´„KÑ¥dXư•¤çr©d-,8§8:êa_‹­ ž7‘v\¡u[b½{Ñ¡YõvòJ"iFgGª©RÓ„x…ù=ÑZŸëb£êð­_ T3×ï´y®9¤æüâ|~þl5jHÍ\ν¹èªq)jX—Òuyßó] väA]jìwøÝÑÅIRöëDüJÁ×ÛÑ%(; kö«Küîè’ž2ú±¿²ŸŽ.ë`ŽÞ~Ûû×/?\~ÖŸ7;¦õÛeÌbT>7Å& ÆíÒ˜HQEd°çQp@RjYào3Tup¨/ñßd¨ƒîð+¶ ôiC™Ú°ç†Øä¯å}Ñ;—qåñŠ1Ö‡+—xdÙ¨½:7ä†·Ë ©WWí§…q뤅¯²Xx¿ÙÙ&‡Z1vÀlèÏëš=ÅÓYªÃm<;^âáýQÛ‚û0^&÷“êß+£ãÝúê™a;gïd7þý{ªÊÀ ]f¡x½ —AžDPûi]‘B=òäú߀P_Íu’.ƒ´îvÄÖáŠñìÇV =•xe?£Êoã©×ø/Ir[åÖÍtÙõÎw„з½¨=TÙÿnÜÂÔŽšmšâI}„Obºd²›äáÁµ j´ðqI¯A—Þ<ìJºÒàvSVTAÃÉmûK?÷+ ª2·a>©ZÝÃUq…‹ ÃRSÄû«Ö#Ý}Z´ó0ÉÞùáÝ"…ÂÅ6ú§“i§Ÿº›Oö©Ø>9Ê^Õåuì¹ý¬ò¿¥á:ŒKË^¡›d“‡·á»Ø>პxÝ 5÷ÓuWbÔוàX 3ðù̸=Lùõ¯ï™( #«ÊêjI­"ôŽf)TOm±~\á~TÒîȃyÉÝV'¿´jšöa *"pñµ–Šå–Å8§{}Ñø©g<Å%“ô+`IA[\)'ér5ûûåÕÙÉb1ûg’þQ† õ¯“-€OϳUÑ_x îŸ þôp³®+°Mþ¸ *_ ªá½Ó—‹Ûo˜~ÊÃ(ú€z‹ ´®jÓ¦Õ*?;:ꉻÐt¢©v„³ß´£›£'ãŒv¬Ü=íMÎ%W—µÆ*êíÜM4N¨L+¨öx™|Õšô°&Yfâ=š j~®;šØnÖÒd<1˜šó«9ïjÚMMÚ¹™L(.ø|~¹c“Ö¤ø ¦Kñ޽ëâĆgÄ &…ïæWìJv5 #ÎN½¦«. ø0⬊'^µ&Vf^ÝeðÔÂÐ/[æ­W†äR–|hž‚˜ôÏ9åžGÅ ÆÚès=ïè´Ò70÷Ìxž\'ïæøíjÜ=\hiãÃ'0ÿðíjÚM»_=ÿ’j’œ¾Ä¦â¹B¯&-Äð:¹ØÃIîœtòô)¡°l»®DªAbïçŸ ±ÍçgPÕ^˜* — ^P Èþ¢¤¿M=@Q·M”!×{fÍò“ƒár‘]„<ÑèòB”¼"ÙB‡w€Ñå!_ –_¸=â§÷‰J=Æ¡…2TŸRÚUªN«ž޾pÊe†7¸I[üZ>©¡=n&nøïn¹J¿ö"X¼,¢¥unÞ>Y0­ƒîjLzØ©¢m묻Ö4äÔ@“7|†Û:î®5 o#ö{@SëÄ»Öt`¡tp³lwWšÌð6b¯‡uÚ]kFÜ]‘º9ë®5 #n®‡45'ݵ¦!Ä—GÏ3f`yœlüü¦¥§ve®ü²¿¨öIXhù¤,O“?‚–ÇÂbqF5U;ûwÆ3ûÖi%…T BÈäò¦åÒÏnü4õgq•´é®HDgrýøCsYÃqÔX;á7¥Ú™Û¿Æ…5ê(WoLqŒýýÑñ´Kµ’¶4Ǿ A¸-{¸g+áv¥)“(’†—"A<Ík!mI5u¡GCÿÐ÷Ü1 dFƒwgÛnŒ»ÞÛ'š[¡í…Ö 2>ÖÒÚY]cŒÅ–층ó¥žpœR®K‡”ï=ƒ¤.aÜ)>&ð…UÔ0|W ÔQ)ð %\.©80Þáˆå…Šý3þÖ”hkš.§D×S¢ë)¡¤š¨Q¬š€že}A9‹°Q˜SQŒ¯ÆÅŽnáãØ²‘9ªKèÆÞ'Jãöp/1?ÞY 0<ƒ$p!…+øÁ+$"ŽÙ”ÀØ¿¨°²!ŒÎ`¨)€LÍàÒ3ÜÞ©À¢V…"E” Ã+1T”¼‚–(ð «hêjF•Àp´ÎYš‹w‚uc{56¶üéÂV>Fª`+‡xr šBŒÁ¥ñ7,[lTVâÁo,Ø+aëÆV¡/eE×Òîn×rwdç³çþv>^èûæ¸?Yx*Å"Ë‹}ˆvLŸï 4k|Š®| o|Jgœ½x·¦€[0nÛ™U ÂÝnwŠ])él<ÍÒØøu|EÄgëJûš{åûÅyß,ãâ§æ"˜€mà íÁDÎ ¥|¹zµmßûAB¨„1FZï×”¨ ÚˆÇÇ¡Œ–†Pè•/ÂtÕ‡õpÒGûæÐ¾ü¡_Þy-©-ïyCéIxí+)½ôÃOÚ± Â|zë ýþnwŒÄ1îߊ0 p©égö¹®ÙǶ-µæáAh·šÖeY –+€vbÌ)ȈàÅæÓE¿·ò` ט¤à÷&˪žsŽ)2¡¶ ­4§Ç=ƒ‚Öü v`êDz÷îÜ<±ÁØ×á§ù) =ż!¦–ÌÞG…› :H‘ÐX,ÿŠîŸzüøY$˜ô² ° …‘ŠõÎRÞwž¡f§ÐÅÎ`Õþ¨x`½Êãnœì¹Ý!3Õ󠮿÷ñ÷$Iµ§‚k5Hn»A©4aj,€š‚SÆXR¸žb€Fª0„á†càèRi”ñ…/¡kCù˜ÁƒÝCl…q—JŒ™r!ælH¼13®ëE«çF†[ªt ¬Ý’R’'t­ÏFºð~)l1P ¼e!8(ðHhK3’¾1éYÔSÕ ëöôî·íO©«ízúÈl‹é6 fÁ]º–‡é à@¸ð7Ý,ðù¹á!ªãÿ¯UT/SþãÐXÙ¿ša˜_ /¤s&sHˆÿLQ ëÛ{…B5BŒ¸IÛ $‡¤m³ ýÒj°¦mXƒ@Åž*„/ËwîsIcßì 9gœÄÝüßãnjÜÛ+­|ïåÙ‹­íô¿Ñºª}> ?;ú^Šà[ ?Carla-2.4.2/resources/16x16/document-open.svgz000066400000000000000000010334571420416754300210530ustar00rootroot00000000000000‹¼»WÏóhv%zï_ÁSsã§Š9µÝ01Š)ò怙bŽbøõï:UÛ¡¼€ô¤½Ÿ×õþóÿ>ºøæóòúßÿ„üÿä}:dŸ¾üýO/Oú™þ XÖ¸ÏâvèóßÿÔ?ýïù‡þÿ~þàç<^ó Ø?k¨}³¤ñ˜ÿX­ëø;Ú÷ý—ÏæúŸÀÏ?ÿË?üÃ?/ßò¸åöËï>¿ÿéëûå—8’ü—tè öÇ;µm·eãu˜!þ†~ú˾øßÙçú²ÿÉ÷|5ï\l°¿Þž¥Þ?nsû«~Y åmÞåýº@È/Èo—§Yžþ¸ôç›ßÒºûà_wöËÿøÍâ9+þ¼ú‡vì×EÃ0ŒB(úó½âçåì×øøù¯·Þ¦ù[[Q†¡{î/+ÿs«~w´·þMe~ý­ôÛëãý÷ç øe¶9Í‹{gþKŸ¯à žüþ%[³ßó'§ÿ•Ü¿Š„>îòeŒÓ|þ4þëþý“­Õ„(ýëÇ*ÿ”Õú—ÏŸì÷?Ý÷Cýð›Eþ0ûÇ“~÷çøýþÅa‚ÀÉÿ 0Bÿ c?#ÈÿüuËŸ®ð»lHèôûŸî7Ûøyóþ—[Øõ×gçÇ8ÌëÏŧÍÿ°ª†.‡ÆO+;÷›t†ã,óþçOú#ðî}mœ´9§ë¯‘¸tqÛBy $ôWâ~.†6Ëç_ƾü›Bl¼]ÃÀsòüí䲞íË|–±ÏÛ!·£óº5¾õø9‰Ó¦œ‡­Ï~×çûOÿroøç,/–ÿ`ãŸð_'î©[ãYžãìs+ú‡EXö×38EüÁÀoµK‡¶ÍÓÛ‡q»ÇçòÇCïc—uÿ´úž½GîC°Ÿþ2<Å’ß›áߌýñn?Vÿ|Ÿ>Ì¿ûů¯úuh¸Ã곞¿ƒ! ÿXñ7Ä!ÿqÿôgiÿ ýµaþ};þ[†ú÷ ÿ–ÿ†¶Œ"þ×Ú"ÿôù/BèÛŒÿIiðß’†üMi(üßgFòŽ×ÿ.3’wXÿ÷™‘¼£ú¿fÆ¿e¥3Ø~#þû“‰ „¦þ•Aÿãœ%IøïÏY’bòþ¿¤ý7ÆŠÿ±ÃXF%ÿåXCÿÊ÷Ÿ”öwÄJÿ¿‹µ¿«°Á¿¾þËVú; †“0ý¯‹þÚJÿ… ¦ÿ3þ­‹ý=f„ÿ;͈ ÿ‘Çx]ó¹ÿWö»÷§ÍƒÜ›Êÿ˜|Ö.ÿç_™q¹gþÿ?LüyüO½ËàŸÆþˆR;ôG©¯þ³ÞÐ|[òÙýo­þµäñÅÎäæq׿ˬù±nsŒóðýd7‹JN@šóüO ¼?Ì/?hͯÄé7‡èŸôæ5ùï€?‘àl¸õ˜?ÉöiþvÓ§‹Ëü/ýøÿ®šó›¨dñÿî×y¨óòŸ’xÉIüAL á,ë¸M¤=K–c•Uw¶fYBwN`YñûÏýÿÙ…¬£üáðÿ7‡ýëÃw–}ò¬(²Ž#°®ÊluO"Ñ«8,Ë–ê¤ÿæÅ•©Äß÷æØ†c¿ÈŠê½R½‡^÷˜Èß'Kì.ª»¿dŽM9v/}©dßš£>%>ìUïjB$‰—ˆ=ËÆu|?xHyþD²*ê2´ cÿ‡²#ÞJ÷5ÿïWiÜîp¤‹¬ãÇ"õdüЀãÊ[“UŸª(ž"«Öbm4âËi¥ 0`CÒ$퓆"ü"äjyúuÚ[ü¾*mC1Ëî÷µY^tŒ'+Ð쌞<ÙÏO}Î1¼¾´Tšöpq@é¬(#x>æ6åŒ%I°ÄE8 ÀwcälµÍõ:%;=JZwûãΣBgBÍn”GÄf ¨»ðTüŽñLõmIQC³Ÿ1¶Gœx"ª¯9ì9¡‹(òý´ ø0-›¾(W-S²Å°û’R’P È ¨mk¦÷ŠýÄJínsýñ€•€,t¥Bž‚BáaRÇ·}«P¬²,A4¨ìs:2é÷ór"÷ýUÛH×ý¼K©L¾ô´N:¯‡, TÙ/5ZÚ3«¥gŽˆdïhº,kwçºÝJ€ú]¸ðóy† š©—Ú4Åèšìš¨þç½oØïtZtO]¦v[îxÛ”]4pBÉ¡2ÄPX7‹~$4œË(÷:Dxàe‡¹9“A'Ä•Äs(™JÃâ‘‹—ûã#š¯bA~ˆ•µÇ7Übíœe ¿Ê4…𠀃çÅnƒ]4ö¨Ô‡V&AH†¨&_ÍašâŽÿØUiÒ(_¢½èa€J› iŽ L …™$­ûI¬EW£LÔr‹šÕYA +·§¢%+ë³ìKÙ5ŒûdæÊîaÍÌM#B™kFp¿5U@ô7øpºýV†MÉVˆµwŠúz·Ï‚دI\ÝS4òjZŒ êýÔíh}GU½Sœþ„H,úzõ鿎˚s ãJPMÍ}T¯U1ß²Sx½²NK¨ŸkÖÇ—O›§ƒL¹óbç×7¦WsœZ–íqå¾ê‰).(:*fÙô(õœÍ&6¨ö.Õýq:W°†Q†/2Í‹CAÿaê#¯íÇ6Óî²`‰'ªˆÙ~‰ñÕ®cã¡ÆjKó­±tøÅÚÓ¦ö¬–ø*¨0HÇÒG5Ù†ð•"Ù  »øÇ¢4[ö {;#<kåü’ØÔöRѯRW5¯}%êüH|ä½è.ç°)xB3³—4Ô÷¢Ù=?åH<¿WØPøÎ šìŠ^é¥ûdÏNéë>v]úÊÆ*Dœs>¤ý]›´v—Vk=…Šj¤¿§y~.®c*§|!™x (jP`>Eø|LÇrˆ&y¼i4õ—‚ÏðÔU{]7ØRÇJrW`üu MÖ5Ñ2jõi§qb8-z]ÿlÖH9/,{/*~«¥Ë‹Še×1Žv°ïµ=^fò Bç­«‘"ÜéÍr(R$þ»ö ˜?>†õ) ¬pˆ´+¡B±Ól“äÅ—Œ ²­t&–)«‹6ÐöD ÊD (+s&ìè*˜j{½Ü·5—8”ÑP©ä.'ÐçÛ_$_~VÜæø=ݯW¤d!†€x0™°p±dMØ©¿×FO?_‘`E•¸CJ¶Ä.šMóBê™mÂ`Û‹Aì£LveiKt@‚IÞ"6À×Éã"%aÁÞºuíùw§TQ9ÒSd1€™f¸êƒµƒ$¢ CíCÎrMîaXÜh:q ÔKùÔyÕWGƒ>Þ1<(¯Ï[4:W+ ®gkÉ]À¸ü7¾À|žbÖ"öc6vîì¹Užˆ‡9Rªöx8vQ§(‚2¨ÇèÚÜÕˆœ2hœàr§(•âÊŽ£ôðmÓP~ ˆk 44ªP»¯‡ÍýXÂúHþUŽaÈÊH4ìë`”Ž-(e-AZ.sï;/€ùK³»ÄílöÙHÛ×ÂÈ—Fþh2´´úšd$×uÛm×rÎlš­ÐáPws4å[†ß¼¾`ëp£‹vâ*{-sRÚÇì“øAjúÎé¢ói ©Ÿ-U«%Â[#’…_/q7 JG‹ä%î×pnwwÀ·ã*­µ1¦Œ?›ÿüZÉÔúÕ¤ÎÛAå7Nœ*ýÙÆM{Àµe¤))a9ªR G-¥àÄ·*á¯Ïd(èëÀ'û⌳DáW,Ü¿FןcÂSîHBq‹Žx&¬îÙø<Myc{ о™ê:Ñà3²¬}B@ÐÚ¹­A³Î„°w• Ö¶‚»S§¬y¼ê0Gv„¶N»ªg’Þœ »¼ ¿ôèS0I6”´Ë:C¨èÝžžÉö¼n‰­8»{Ù¬åêN—&¿}%½ h–>åÓAV;Sg¶ly~Ú¡6k^³À”sŠ#÷§¦%S~Obµï:‡éjÚb70LqöÊ ) Õòp½K^¯3Ëq׉øÃcÖ&7dö.·P޹3PDmð¤M4B‡A(µ,ëÇï蔃}7Ø®=fï9g9ÞàÃwMÒ’à˜ò"¡¨§#5á”ËC<1ýHl£“QÔÏìóÉTûˆ÷6‘«úî¿8Í”ÆõÔ¯p±PNÖ\Ñ74!\H¡TùI5—•Saʧž@o|j‘¯q]Ë1½#š ÝëbˆxôÔ¼³oœ¶,}aÜTq} >ƒP¡` {°ŸÄ+þ¾qÙnÐ7K„u*Ùžµ"žBÀåéãK„ùË»,-{ØÝUÌ›Â|×c®6¿Ù;gQ–-h®B„oó »ÒÌÒÉòh´o¥ñ4™è !”Ö½6y­/QZA”Ïa?èâN”­Q“ƒŠvÎù˜ÑÂ+möÈÚ' £1íÉH]ƒŸ ³ãšì¥<ó ›^.zÓÔΖMôkö+Úº.mq„ùÙÏ/Ê@Ne<{å£ô>¨uû>Ô´L0Xah¸V¨ Â+Ÿ¡—í'3øgdà rãÕ†¥»9zÎeÕI‚nâÐ;©)’ÛîÆ;5À¼“ë£ÒЪE~¹{ávFU­t3´s&ÍçõTˆ½Ë»LÚ£)Lò¾ä}~Ñ6#=Rª ÊÑLP¸ƒÍ©5‚Ý× šO!XŠ«'z.ç`¯õ©¹^t‰ÐT`d_[P±Sub6xT£=\g%+ M;Ôb%<“÷жÂÉÎÎø;Ì”:¯³Ú·¿ñ%ÎsBtÑÏâFÆ sDÑב]“|<“‹ß}Cðw Ù’è¨$\¤Ks¢‡õùDÆ ½œ0È‘±ï§}ÿ€>›cAZ÷~ëœ1Ä‚Ï;Ö)pLeXG£jJûœ²uìaõô3ؽ_?'Ýi~ ›‚À*ú« %2˜ªž`N±Ú:|ïjð¼¤Ê¾hˆ)a”èi[X&ù6(?K쪩ÑJ}6:ZÞ?n²ÂÜ¢¼ûo;àK Ëßv}ŒšíÊÏ&Œ1ŒP_0dSúVuTÌT×#U¸¾cy³ofÑ-Ôau²ƒ•:]ä¯CùzÞ®o§oW17ñèR,(ïÆå<ÄQˆ2 ˆ²ø²Ê<E<ñ´»Š9È™ ã@¶T(pÏÌðiZ[_%?ò®Ëø;—¶p|¬H7™7qÆ8^ñVcÚæ|€ýlõÁÈOï±!ZÃX×/³ÝLu¢“7:¨m¬Šç:ùÕÍBÐñÉtÝã ØtpÈ08¢±b§Ki ×À/ q£‰rÊM ‡c@ÇñáUá±”Œ}ðKŽ«© ^éxŽP…jÎ0ä÷!t¡ñ™À„³<¬ÿPOð1?Q‡dï"C³£´p4-‘ÃÔ*ièüFúÏIÄ£¡ðµÑÄ1+nû±/‘Œ³YtÇ£µ–¯õe¬`x}q »ÙÕ–ôœìwežóS„\Pñï,GwwÄåI L”w¸…½ëLE¥ z‡ÑA¸MôÉQbBGcë?+ñH'À¢ò£§/a¿œbqŽÄ<ìBmšìT×& žýÃ\°c@j›™M!?déò˜9·ûÃkYéf¯ÜGº§®5ÿLƒÓ õDÅýmEÙžbŸM Ëeg¬ÞšA/V ·AÆZ]üY£H¥€ ß09GC,)¶m‘5oQ^OœÅÇqÕw «ïÍ„Ÿ„bÔÈýW2ÍœZl›‰KýA<!¼ýŒÉºÄ謰 ãŸ§^âyÿbV&V…ôKíCiÎ`9F“ßÁã*æÆ­û‡è[ËÑïHØ·‹¦hïw*lÕù2€5‰“‹Kæ, (E‰R5FpõÙv°\§X…Þ T{üF÷ình º1´—, ƒéFªI3:`KE˜àö[ÞQ[t`¨Æ­'½cUÚ¸ý8w{©åòŸ†ì›ñÅKY–Å—gšL‹`úžöu¿ì,Ú»«¦Hg—Sû9D¸gŒ´-€›C'*gœsÆÇVÙ…Ð7Èd^ ã4øÍ¯Æ­!Gk^ß’´:°7`§+µŽ{š¦¶þ†<[ùsu=ÅCX\ýzß~I– ”&OØL°xë5>#˜Ú2p(??ãiµ¶ZÐ:=)}კ¸ý" opò(Þ²i`sìÌ¿s§«oþ3 b.ßøbß ®†‰t[IJ ª¦{&*ºÁ ·  I¨uBRu×tC#aiû--+|"€átüÉ{Bæ k0±a~^±ØA¿Å@9LävëŠok«˜Ó ò›¸PB~@¢žÕÚZ~\¡¾=ñê€XÙ…>æj¸N_Ýл‘Å4ãb«>'zú–îÂ2asÆ^lPÈ回÷ò~u×!.wREÓ¿Û:¶O— Üu¦Ÿ¡r×6»8ûNêb±øÜ.÷xP€«Õ˹ÑóAà‘ɨôA©{JÙäyÛxP{,…_O`FIxÔ+ˆ|0§È¥òIé#ƒ¦m¦Ö•ÿjÊê=å»~b¯InóýPb2ªMÚíšû6Üw¶âûøŽEt†ööI¨í{1 ÈÞ.Q&†WKJ`èPÑ,ÌHÊ—oÆò`œÊG²¡Í;Ÿ)gHëûˆLÒùÕ9!ߥ†xTO!jB¼•‹8Jd6¿ ±(@M^†±LƒÎ›£œrÛ€W8ã· Þ"ᬷ pマÁ`SéºßíZ#¨j“Þ^¹Ûõ *˜»|‹â dzû¯c|=c+IÆC}RÖÍã‚ðsWŒ>‹ G;%ŠQe.µUÙ•ª ^á ?»7Gë AìÖÏÉ €Tm•|6&š† Τ„»?û<ì„ ‚ Ów8Œ²;FI0{I<×ð­H¤ì¿Ðwü0³¬® žîŽfÌP0e×$ÐHø²öMô†¦É̤ÆËÐhØ”ql›»ëc,×XC¬º¡,wÇD4m©‡ô¨Ü ®à_Á3k^Çk¿t>˜ÔBHç†Ïº!Ÿ…Ë\ÕI9»ÜZ^µÒ‹7PVèÂ)lðî7ç©8`…)×ám3Ž|¼à uðK\Ë—YÙiãÁL#t²:Õþ²¸Ì´æø4$Ðãn4Ã] Qlyƒ™É\Où!ø¥’< >šáÐPh%é@ĵ‘\fYJ CгÝ´ã[&,øørUûn•º„Ìòc•ÐM(J<ãË0±Â#KÛ}ۛЈjÀ%%œAº*¹÷³m#mhê<Ó ¡—#‡rSb[ŒtɃ"Ù¯^YùÌ»,ÈÊwTLÒú&–82§Ššp•A$›ÞYQÖJ6‚€÷_R±(»ß3ÔÀ2¾‚£ˆCkÿ.Á¨PÚ༠c²´¥#JÅÀéšÎNÛ[Ö,¤@cüœeDùòÒ˜ÆÓÕÛ™;x¾2ˆ…i»Ç ½ ”©,¡Gh.ð}1ÏÌ ¾ìk‘ πݤÅU‹Æ«ù=HO¿ œú¶ïa’û<Ãí¦4…PyÙò&ò•PpTf÷ÌÍÏm,!E>S€«³³âíæ§Sìµy—¤OÖmi2¥ê:¶÷ߪ¬Œr×Ù^Åsºmß+Û'ÔÛf_‡– bKð ÷&"ïYá¡–Ô0Ý[.—ú_œÀõ—÷ö§y'LÐ*ú:Áýø’ä€üjzâ||"§Ea$V€Ç¯Ï°S‰þ ßoþW¨ŠõFÏ<º¬;¤Šó¯ol»ÜTmeQé¸0Á:f̼ÜÓµ –£% _,|¾u·¾y&ðT¸ zM[dŠùb+°@wZSñÒ{jÞ+]Ù@…†¹™õZ·çqÜ*NKŸÇmtòP›•Œ§ 9O±ÖÃá›Éï½Ô¦¢/œ½<©û„ã°=BR ;øŽòýê™#Kìu£ŸH„]$ñüˆ˜.à­àäR­·¢=¤-µ™—–5šþe5åQArÉvIdûNhÛ¨O›¹^,ú{tHY¤Q+&ûÝì‹ ¦ßï¼·ptŒ‘x(>%›õ\—Êëø#væï'Ç90|‡J€P­ïŠ6WøAjiÿŒ ÷¨ÁÆ‚!Ö*{¯# p¸Vvb“—¨".›Uqãc¿C:›v#]Š5ŠéæÕeƒ£ÿ>z 3»/§¡^inø@e^ØEöš7²Ö–ØjLbòJLSÆ_Dòtö=¤Ãx~¶Ã1Á°W”;%T¥yX±2:Š„WbwÛŒ¸3ãËê™ó¹Wºí(›hœ»jT¶J* ë2­ ¥9ÅQØ^Ä.sd½.{‹.IiÏAâ’>wôy;÷aðèPÏó2ãZ'‚w)êèÝGßY/¿šè©ª‡X1ª2¤)­0.èÁ™zža¿÷Ѝ,, îá]29À,ïž-7òqGˆ6W¯)ïšö±O߸F{zéË<™˜×ñQX;mÑ.QˆûëW"(öŽ*w»½3RÀˆú½›Û¹K)÷µŸò¯ ÖÓ³:1[yìõêŽ8x¡P.¶6EJ—•Ô‰‚èùÖ Ê@)ö Ò°¡À=iÒÿænG"Ág™;és2y%¾#Z©Ðs‹éj[;êè!¢³±7/­SSQ;u?q5ÑæHê•L÷4¨/zMàÓȇÑMG‚¹Þœ:$DÎ!ç7‰Mk¼ÒG$p†•î¯á!Óµ9ßÍøÆs fß…‚“Gj6ïǵΛÙ­0ž¼ ¸\>ŠwÁ>ÖJŠÐI>Ü×{ßî¼É 7*S–$½ˆú 5Z¡¹]«p°Þœ R—~Ýú­MÕÞö‘Ÿ`JòÈ„)*@™kß§¾r´ª'ÄéÆÊûÆo–ÈâmÏw´x@_±ŽPÊ6´²7KÈÏ`¢×ÑKûÍi ¢Ózo¬ð÷a¦ËNóÈ/ –ño|À&*¼ø7½zÞ¦€:Å¢¼çp4¯-ô‰ÎÙè¸[Uo–¸½¼]e€õcáÏ ’³˜Ëäs•?eS;³3'Xð2›2u' šaT¯ÜPŽÇ*S¬ —¨X7·¹„nhÃÿ´Ò ¡¥m@™±3_”§º/cÍà4QïØ‡P[µv@ c®ÔïêÈ6ìá@#Èfu ò¥'•ÃeÛÐ.µ^_©^=yiÍÞ±'?ç=Á⢰½øFçÈiÝ+UýÜõ BäÒ&ÙÕÓ]DÇêŽ(‡8˜ÂTJÜbºTÑ—‰T^‚‘dÓ–}¿øÍà|` û¦·_;=„Yj =0âF­0N ší˜{Á¦`¢¹Ïyz bص7vbé_u—©à“`?°“še¤ÊçÛ·÷Sv)ÃÀ–¸‰÷vÆcºTçšÎ…êñÖsBî^CqöW裤|¼Ü`jdÉl§Ó\= ¦oÌMºöwA|à2®ïhʌ׻«‰ŠµðàièóMŸéhñ²pw ™õ‹AÍr·)èK³–¤€»Cü§ïŠ9ŠÕ_ús­èãb8wD²mê$z‡¿V¦yµ¾ˆÕNyùšw[_B×´Ef1: ?î)æ_r~Þn–èÄwT1 TeH³¼29Üåд Mˆl¦ZdC—ZJO£T1+s»4K°d’õ)‡@ûÃBþœÔé¾úo“ˆ3þ}a»uÛžûÖÞѪ“V{‚¸Ô–¨'uIŽd® œ9ȱ1’´xðfýZÜC5(,~Øê§IµÄó½/õŒžƒ_³+š¤5Sá/' {NXþî+ž3öF½ÏHŽFg ¤u…¶³»‚Øï=¿2vjù‰Ë¼`¹¥Ê#³¢®GK.Wãsù–KgæB´¨t ¥¢2‡²E °+âíê‹æ·ÁÇ;Z…ž1VÐáÆNžRd™È­ÙV5²úÔþv©é[ 5H«µoÚý÷» øl2®^Vî¸Î1kÉûpÏäùi¤·e<ˆ^b|×Hœ—ê9*ƒ³Qsû²·Ö‡øi¤¸çc̲6æl<n¹ýHoü·û >ŒN›Âº›™þ#ß*»nº†*U'BõBG*Y ­?ÞËÅPÛY3P±ßoìï¹Óµüˆ_ãØë³¶ÜÀ>°\ã%êI£GQ ³ÒA+¶®á¡Â†…íÇ©4®ƒ5;Ø%ÈS«b€kF˜s9—oªc¾évÊуòâÂü~Ì*ÛÍm§R² j_綠ÉÇñf^áÐŽ”ÈP—æ]Ö ÉY+ÒOv7÷ ´|áæÞÁEQÐÍ,T÷ò2h®Æt›;™³˜O(†tdˆ.2 ¹þ~èBMb†,2tpÓ ;»=^]e„]Ömóáøb¦Ydè{ß.¬–P}Ju]¿%d­nJ6š…8„ËI,‘£aÆŸÂC|zfܸ¤ÌëxËŠŒ-'°Å Þü8=×4ª{‰Ÿã,^¦ÄMpSuU¹°øxŽ”³~Ô Ø6X˜ð1„›»SSòpW¦Ü9kôª¼¯UO Ü—[è7ò^üM—û¦,Ý)2g÷Œâ»á4¼z~V}†° }K¹xªº·ôŒÛœ…t–’\5x»¸›ÄÙøs,•°Œ<¶7ØÑ“Ä„\|Æœ+q|ãï#J"=h»çŽòö £]/Zðû°b(î‹qÍö›üZ—aŒ©»Òõ#K¨â¶±èKîÈÞ~:äM¥ aî0)8h é½Äy¡väEèó¥  ¿Ýã›v‚Uz¤gVLÅçHØ_‚`,!°- ±(#Td£†`DCaè'Оƒ•¨©A j¯eØ—_®ü¦6“|£ù«ä4's墨 Ù^þ¶½§Ió€ ÈMXjó¡$5ƒËáÚ¾=lçy1wÁ©+mèô‘t– †Ê¥BÑ örÝk;*fuOqÎ~¡…³u¢Ý2×w¿HHV7«L¤Á:or²jòµä gSæ>Þpi- •ÀKÎÊ1Ây6!NYûÇù‚-œ¼È4&É¥œ ¡#áÖ'ºñz@¢Ú¨XÀX–ð|Íá¼ Ú|`“ŸÂ»ªÔðu²«-VÞ¸(4Á­Â Xç~°;}@ÏðãnÁ, š]\3#;åÌbÏAD ÑXdZO´¸&Bã¢Ks²)ݺ©Vþ íüÊ÷ÁVE ´K‡ú6‰C]U²<ìûQ­‚½-‚æäx°è¾@3»<®i®zSåD$yo´“V õ¶0ŠÁ & 0oz «b²8{5ßhàZ1î˜ ÞÇûòàWÛ‰LcOi-Wggˆe-=¾ ç0ˆX» yWŠ zöòÔK¶òF–t”]@<à^{#nôðÁßÌšHCt}JÞ¥ŽO{sŒætÉä8z¬|í!ƒE*Y“ß›.,Q%†F±Õ]gR¬‰a0]ÔqÄQ`yŠ»¨Òtéeßã¼#\8º‰ÅE z€ëÒ”KØ®’÷ÁPå§»’šýMõ‰(d\ª }J#HmKaå=åìÒ*&®yõý¨Õ<È®µ5âÁ°¨ís}Ùf×Û«¢Ì «½«Í#õ¤u|>h¨ÉîŠñl«Éî$öFñb‹/ÔDÛ¹_ΰªSï*œI_÷mz¨,OSáçÛ5×Ls•òP*Â_dc¿÷› 3c~«à®/³ØÅD¸Æ˜Àœ!£}.‚=n*<…Ȕ㼂 ?‡ù–ûñŇ­ËSli•~—6êÎvÃx“«Ž­rÀeÜUÔ²'ݼ#ÀªŒÇÍ Ž>ïð ~<µ[oN‡Zœ‹Êm)·Æ¯•þM?È »c4=Ûz'‚e”cÓÜHõ攵€6’ÃÀ=VÇe^s£,Ünhàà"ÒZQ“‡ñr³©yèobÙ³úó6,CöƒyÙWù¢eï5ú§äÀ¶!½ ÜGa…ÎVïõºŠê³Y–‘¼TL[°íE<`#åËç·ö¸¨…|OEû^ì’û° ™e ”’ŒÐî^tŽõûÆ’¼¿º1Ñð·:ßѤøÇ·p*JV­¾k{– 𕦹豺¾´íGg€Æ'0|¤cø‘¤Ð‚!Kkâ¡nï ,—[HÚ]?Ü šÚYûן4•v6W}G欚ì–åuR©¦oŒõSåÔõøñîÞ]´Ö>§-Ñ—R3Be6ø}Tßú1EáÄŸ¿™5HEÉ’‘_}žÒÀóÑù[áž63ÕœÃæ‰Üéë ¬m¤z9m!;Úa ÒÒ½œþè œÜr¦¶¾ùñ¬¡éð9Z&WUÓ $ÁMšˆ«ŸÝ%ë÷9H†°ƒïD…’Ò"àN˜å¯Ñ,"ó~| [Ó±°BªDS\Á+DKP B«PtY·Yh_¨‰Z3FPVTîúÜ\×ès‚ã-?ÏÏ»Œo/7Ɔõ.îæøæÒOùŽèâéÇ’Q-PÕF]Mß^Þc7‰F;Šª× ýU¤ÌëFþ®4ÔP^ï ë(dí÷Ò¯"Š8Mš»Î\€3@š9+ç(0F‰ÚÞ4X|F0ú‰Œ¥²½A'BûkcAË N¨žýñ¢†b½ÔäË]d‡Àc¶%«˜Sžî°/ôT|¦NB9#Ý»7¯Ü¶%ø…ç.!áË Cº ® 6b@û{Ñ,Êq¤¤mðòö®P}]ñ@ KAZ¦:xRT®îk†|…Joà²×ç" u¯úyÔÑ@ɳLOZ9Òų®±ƒÝà„ȰúÇCRz/ìOPM0^¤¦OÓ{ •æö9qã4f¨¶I/¶o@¿(¶b­º’é.üJÍé£ËÉ>F(¸¤áU§âkD“tÝGÈ“C‡ès^añx5•ºËÒéî ·_Ì øE8Çáù%]áüŽ — ï0FF=ã-#¡Ô *Q¸ãs$¯ÛV7—‰¢š^I¹NˆÃ8ºî€ºm‰J… 99Ëö“Ä’øë¡Áë™@}"±\~6„·Y$¡°Ó[YñTçÜòˆ›¸ëK‘ꞟ<å˜ï> û‡ »¢†TrÅT DÓ{Ȫë LgŽÑÐòþÊòú«úFÚºÁå\oïÌæÔYßì>ºÅÑúÕøóã¯×§Â±  Ì6rö£g…œ£±Ò±€ÞˆÖÛIï,Û€.=CÚüJùV¸¬æÃ³IÕì]í)Xc(¾ÎÔù ͨººk¡6·ʲÖ$J¼+ÝB ×û„]÷ÃQê"5jV|R¾uÉôAÄÑ÷zÂu7ù·@“ ”J×ìþsÒ_ùÔTûnÊÓ¿½ Æ·eOz¶¦—«!ì=iÃNÄ’+aQ.RX;k,y]>°z.l—^c]zñ­ôº‹ãŒXû¢ €œÔßt—rüKXæ LÂTQ1ÖUzO”j"IssÞ¤>É„HTo5òúÚiÆš‹˜T$¼pËN?‹Ý2ûñ=m«:þ[Œl™Lʸ(šÆ,Ôjí §¯ým|ógŽg»¾¡ˆÆÇ¬»í6–à¶¶_g€Qû*kL‰txŠÛ·?¿,é¬dBÙ›¸±ÎprIJË#¸JœÞ;ã{Œ¸R@4¥ÓÕƒ–ÐðJT·vÅÉRkpoš=ÒÄi¬þ*½öjÉõ :f¯ŒK"é±”Pt3§ÛãŠi9>&Ô[öö»¥KT$hpŠïÁ€¤y¶k¥zÔ÷¥cQîâ§¿¾‡ý)}æ-U0‚ÎNï¶m8¾¶;Wcʸ¬Ë*Ê{±¶ì#ξQ45½o!3äfê!™ˆij4ðçcöâ6¼¹ætTеßî{R¸à!½)M(ìÙJC>oö®ììñ¸º‡5¶±{rÂÕjiŽSB­èëB¶»³Å+/º ÚIHãø‡'A—)ã+¯dþÚú·!dÂw‘©¿m­}É9sæQOÿ<9µm‰ÌÝ×´œÁÓÒx‚Có¼ÌçÇC šíÄå´~ôOèMæ Ð†ÌæºÝUÏ2`úIã­tò¥ßvˆ"pÙÞ®GCH"Б“^1{"ÝújeVk÷÷†VÜ3¨ôÃåB˜ö.šâ>‚»ñE…L ==w^Y|âWžÁºòñ%3g³¨ é¦l@7\ï½SÈ0‘ÈÈõ—¸Md„T=]@.tU\ål|ùÞç(«Ü¨1Ÿãžî,NÛSìÐì(‘‰GA\¥Ä VqE#»]ŠŠÊ$˜órQ`zPÎç'>±2 È"áêKÓéµ6,}4«»îÌàݺm¢Ì+Ï&˜ÏL^ö›¡Î ÖQž…qÂÆ |7ŽÔ,lˆ€iW[ê=ŽÞi‰Ôöqá{µ“E*šMúÀü9ÎäTÌ.*ó¾ŽÄ¢¸@[ ¥øXp§ i¹¹ÎuofC°@%fòŽ‡È±d7Ë­l…×c^>rèáEÞ}[TØ>¹ÁßC]}TȉyÖÉ©ïx‹h$s¹8EïŒ6pœúºe¸X(´óÁE(#Ã:'çµ«Š¥â¬#Öm€î ÀkK–îÀ·8w‰:ÀUg“ûqí¢T¯¢Cº#Îr$ú} ªiwHíä|{DŽàY=’®Å ð€Ø,ð/™£Ï€o€Ë%ܼ£Û÷µ4èØóòÁëC~þ“€æ5q£•Y¾—eÂn=QsZYT7“– ›bYòF5ÖÍPÐ*ÎÅîU7ÍP•<âECÒ<á­á»…¹Ù8x$Dì#U2÷fÛë@AŒ7}58{Øß›v|؃”x³‚@2v:$v½'?0ÓÕ0^'é±+^=diâÀv®Ú ÍÐç ‰áqxñDH¿î"‹Þä‡X–Øc>>†ÔvPóTû)ºjŠ_¢úç[bûZÔÍ뾟ÒÞ…$…¹,`œíÐãôõµù‰.U%tº ̰L•¦ÉÝËöÇ&1’YkÚuç5b\ß ól)|aö DÐÎ/«Ì›KŸ ˜[7$YðÇ)Ä盜7~÷-@¡‡;mH <ç|=½[æ±7e3_ü¢~‹#˜NúÅ*‡óC7>—m?…!¯Î.]ËæÉT¡Î7/Íç#‰ÞÆ$ÛOaoTÆ‹~¼)Ãj3—àJp‘X+<öæffʉÞLþ-—$`îÚ­˜k“i€lIù%ºÃx½1Ç0Zcoä^ùÉ ÄiÜð»:ƒ­ôËzr²ƒÍ”,+ËgçñöTýã´ÅŨÅ8èç4J¹ü¥bÍÑ“³¬ ¾"¬Ù§IeßÒ|Þüîp”’H•0ÅÇ ¢ÙòÆj¢*e9·Ñö3)J(x€™øÖâAe#£êøŠ8ºã\U%kßN¿öaæW±–63,†@Ñ4ÊÁ…w=ßÛÛyæX'¯n=£Ê5@ž•uŸïgLí*@»1µ`1~|eI4•ÒD«ÍmÔc³ìƒÂ»ô|¨ŽÄ8ßžBÈuÎÄÂi}¿‡t:úôG}çO]­*rÆ(g-\œ£=Û1ù¥eŠ9§ÁÂÉ \TašV ß;ÿý/ÞœО­eõs»øÖ©:üû5¬ ¡ˆå LXÏjáëôYvõƒxFÑ÷H)ä]ÿ`±P ’²ÁÇÏZ+U§Â¤&ƒ‡9þ5é®?ßbš­#õ±³ :Ûþíúx÷9»öl™æ]™gÏôCÃwm}é²±?ñc4a÷7v*B@•¯Hï£xˆß m³ùÞPé¯ßOé´³\é¿rAA^{d:~‘¸X’ŽLûm"€'‚½¾ôw©{†²| ã–J´R[@tòFtåi舿,KäÙã½+2*šnÈW›©ç›inr›J;R³BV¬±V¦A~<˜ØÆæÖõfÇt¥*6ùHVZ°¬yGí]5nþ¼ú¹onú,Ês ißqfÔVé‚3ž‹tÃçÃ^­Ó=öY¢H1¹l¹á§Á2j†x]\¹+´‘Êžþ˜6¥*¸ønX 0»#>Ýç;±ß“ùCbÆH;{vý0 ýÝÿåg¦"cº÷Žç'¸³‹èYïÖèðÁO³ÆlñÐ2‚'W•yˆç+ò6B5%WÞŒƒé¼!lFÇ´ÍßsüâÂE@JAÈ­ò±“ èOs¡\ó¹0‘p„ú$ƈËÌ#Ÿ#ã½ÀÝↄ0HÌ5°Û¾JìûâtQv–Á +¡:ÞÎ@=)n~W/ÎxOãMw\8‰…|É?LiÒoœ$gv‚W:™×ÈàôX¹¡·rt>Ͻï-8¸)‰Y¢< &þ¤^+šIÓx¢WHYªíë-¾>î~Þ¥öyNÆÃ}Ê1ëô±»Ÿo¡,t‚ƒŠN½ú–Ûsé[8kÊþWƒ7ätßÚÉoj®ï)"a-ÎA=Ý­¥kÈöÒßW(¶¼GŸè“þÇ,ÍÝ„8š^œ@±¬ †½ gý\U¤xmýëœÝìÛ*Œµï˜ ˆOÙ_bF«ÁÛ›U#ê> žÜh±]Þ˜–ÖWtj7 çBü-Åk2W5Ÿú]¦^oôø¶äøàߥ‡ÛÚ0/fCÅa†o²÷ ¾ãHØ h¨Ãñ¾QÆ£cfbä?«Nî¹ñG”¥i?N磌‘£_'FJF˜×€¨•Ô@s<) v×F³`Þ–ïM–>-»¤¬üÂø«Öà¢q bœåö¬r?þ%ék[èOAͼc$Á$ZöþTEÚQJ¹æó,÷ Ú=¨È‹BÖx>k43UM/1¿žä5.¬Í¶$Àôœq©Ÿr:yøªÎ*yÙvjóaj¡°Íå.Ä:] ¨ýÒòKC6dŽkYº "11A|PÔTu„mõ tc6¢Š¼âIóNiêiä1-„F‹F¼A³o–VpŒ÷¿÷®À+:™âGd½íGXWíþüêí¥¶EȽWĨˆW¼xˆpxD—в(šbmkÍoÞljLKPL|]ƬÔõ¡«¿e¯g¼òÍ;öM_ôHU5²llí]°úš†ö‘'òr;­š‘_Úc¿9¥d¬vÞ‘,„Wá–×'ã5\µi‰ý›ÀÞkˆ€Ì›(ý×»ÝÖXö®öØ<šZ‰sœÛÌTb£Ÿ Lo0̹ÌÓ”>†óÀä¤"&tÊ ÐØÜ È‘êãÎÏ×Ú×mºõ wY—õë3T´:){LÖ ­\HˆÓýq2ý\5Ë#ªÛÈ<ÂÌç5] 7ðó½ß]M±Sv&š9{¸ÄgVÕ£MyëäÄ¿…Ä"eñã|»!²8hº\@‘ÄY_ͨ6Ck¾¡v ùŽ™JF„;g„‚v®Jtz„+;ÏmF,‚qxsúIˆW*:Ñ7¤¬cPðëï&ˆ—§Ë,àÞŽCêÈ×—î'×ë·ƒI¿mü}Q72óî‹B©Ù´`¿ßã<ÇoDíªHàï!HÔì´y[8nÛj\³ŸðÏÏ’%êý0–>6Тŭ þcEÓyž²’ѧ°)NˆFˆm• sü$÷¨•®ÌcMG5­ql•[jýt«ÛÀôÏE>ÓIÆšÍÜW-÷+:(ŸÆìÒÐÜòŽ úØ-2!5Na\ÈóGÄU×Ù‘ 1/W¿ªÚj߸ˆã¥º,:AüÊFÚ˜‘¡N&ñ¯´bTä •ºéhS²fæÊ'27%;G/¸v˜1,¡©|Xfj^¡r¿úg!ã>7^f (äÔh»Upu®Ac$Î 4¹J2P0 ‡ù„Öÿ u|t-¾ä@l¦x¸d ”æÚLÛ·å¼»ýHFëº×fµË&‚åâ»çÓÊyÛ¡ÿöµyF‡oÚ&i˜K¡ €Ä„ížÖ¥\(LjØÝâ·Œ>¸ÛRÜæÐ¡ö>÷LK Ú”œôLoZxª}Ù-PNÏ9yºÖö˜h„·0.@ØVÁ¶q‘©@U(ªˆˆcÁåóMàrѾ?wœ´Ø•ΘÌÒ!ìeׄ // !׊ά4pï3o€ìP*FÃòþ’þƒJ¬ªiøüÓŒåïb“(ûn„ž‡ §'ÇËHl§ sbûE)™]ó«Æ;wŽU^?ç¼°*Òæ0oü^Ýñt«‡+„Åt3íöù(ÓÒ Mqæ¿oÃôhЛÐ|TÈ•ÉÄèQ}HÓý’UwÄ;Wó´zr披*‰GGucCýøRsXQ‰è”H Õ»ÃN\TÍöøf¢·w Î¥4‹‡z!Oÿ Kë_*ilïr2`þQƒTD+ñ<2ª SèGºÐ÷T"yžI&plö-$ëµßAõ0É<ÀÅí€scJÝÊ‚šj-Ôò2Ä ÞAæÚ‘„¼ÊýÁ=zFöж"oç©O@¿'´=qä ­N<_Î#b»³L¯0ÑCÿIë‹Û n—ÄèIr"ËŸÞ6VÕ${lz‡CAV’=NKø{¬kQÖê=Ũ¥ñLyí)1&· =Ir‚¹þI^×Su—k`)Fï\b :>Cƒs£ßùtª|òWC™Ñ âgE©/o[ͨ;¤¶“& ÇÑg‡Ç"_w†à§ðª§³‘d„¯óWv=ɤ€B*ëz]i@à<þV>Æ9¶ý"}^Êf [;4Kù‰ÐWÊùÏN`˜*rÎ[»SViËdmI)䨯™?ð·{É‚匓¾Þ,l½“ÅÍ"Ò…îµÆIìA0å¸ 51qwÁXÈïÑØ'qC?˜üÚ²¢ÅÓ$Y34ßÏÌ/&’èàßÈŒ­p þ¦²vP íQ‘ú¸+#ÜÅEJ§ôSøGŽÑþÔ?¸@‹o›¢ñÇN@H6Í BÁMoß͇¸cGó€ ô‚|y(/ëEÎ0@‹Œ‡×1w·]˜&,KÎÞ%0·,´xëЧ›¸Ì;±2 ­,‡“Ý\V:€GuV´õ¤›4#>Õ°ë$õU$×Ð^†Ž^Z…q|¥„Q÷ÄÖ3bùa›Þ¯XZ°À…“P¨ÔË|ϵ«6«_Þ%˜‡ÙÖjûy"“0¥ƒãKωùñØ&œü±dúwS5ÒÂMϽ² G 0ï#%îg™BpUå¦ÝB„˯+¬à Z½Q ÑÛ Ý­ÑŠ® s? aþ-¶IÑQgL«ê˜MøÄíûezÚã«òɸ„Ô)¯‹"Öˆ]³øû±‹¬¨pèy»[ø·=ì,åù}á‚ÃL”´à ðN×"?–ôè²:~`ºkã)/gÇÈÏo.±öaÛÞ¾ô¾W CfDz>†þÖ$T™‹0³.  • Ò!ȶI.üNÊ Õ £ÈBØïœ¿žõ=mý'±º £±¾ ýîYçƒ÷ܧ]£ |[¶Ã©¥‰ ðu2qÞGß*`)ü­¯—¤e”Žc4rÌè4¸ÆŒ8jpy-Ï?zÚÊ'Ý~\u3µ"™dzP”“ëu;!ðCÐõÑö´@xèÆ“ò~«½?_ðsqÚjƱ„ÿÑ,Á½Ó_7:Âã•wïåaªVûiZJ»tDC¢ãîÜï†Ç´úæ~84Îöû ‡>þ6WÛÂ’¥FÞ»ÀÀVÁÁ—ª×Ãu°·£z>¨Ò`—ýS@JrE.úÎb~rèÊHÔK·~¶t)_/ÌÇÛy¼+ý!Ë yùμw_âEÎFqÃ8‡u@Ü‹Ÿ{ËñLÄWÆüð„Z䡾Q,Ø@ž;'=Þ¼웩qк„Nã"8fS$·M¶í§„œÀ~>Z8Ý $EDCÔf}¿&±³ð4ä|òºöç›s,­÷ FÝãPÞ¬Ïhøƒ]êž ï>Âú¼ò~¿øŠ˜éÑdÅ\²Ã­5‹¾¬î% _sxN>ªF?à#ݵœ&Ÿ>ô@ø1½$\£ä#7yQG2³QÐó}”åü·Œ]åÒê æ^VG[:H§Õ·ðýˆsßÑ`ßskuO^çÔy4ÿñZÑð±­Šç·Pƒ œ&Sÿª¢‡C‰¡%ý¹½—ãõ‹üëOÍ·¤$vFáÂuù•jéٶ̵R‚÷ÅÁw`¬Þ0{¦lQÖvøãB)ª"Òö4{cì•ÌZ8§æC4^UÈgDÀ¶Ý–¬×韱Σ%\ÌÃtûRÄîKý÷ªx½íõ1íIót›©¡Õg¬5Ù«ø1c‚¨é@ÞU4ž¡3JÙnÊ# oœíP½êWúˆ?àxK…°ótXwg·j|8Wr{2 o&Ò‘Iv‚%,ØY»¤=ó€çárןÂG3³ãˆ%¥¹j@§÷u«ª7äÛè!" è) Nøê‡F“#!Kh¦AH"ÜëlE¨ª\k Õ–Us©þ/ñŠÎo¾‘#>¦WEÇ£™ä4 M9àÁEÔÈ<Èà+c’ƒïÖÈ&ÒNÂÙ’NÞZ93x4BRgàÆöW·YoÒé×$˜Y¡BiZhƒ.f ]ÓÚ+×C×´Aƒ¨Ën/)J¸H|®š·{H…]öO¦âf²Ë—.HU€ö±œô¿;IÛZÙ/1$Û3»ˆ¿ý„@Žz¤ží aŸHãöÌF¾>8ÚGŠÅ?M»Ú÷°*pµ˜®Nžæ¯.¢Æâ¾X‘ ;¦½¼1õ¹È†òïP¿§`ÄèVw…Òh¢ù5M¹„7Í— àz¹‡t­ƒÒ&y¶Çü–HÆ$0 $pkt(4BA£}B¸á¦àÈ.$éE}óùûnµ)3ä/ãý.ÂÝòlèÒÜ[IU›;©~-S‚ÜÖhjÌÆwÝö Wš›èyrË×TLš?Œ† ìZ‘Rýþt8M(ò)‚„èWoNÆYA×ü‹—¸Pž`˜¡ô1ÈDˆy÷Ûu³À j«¶šHƒyçZ$O‰N 1ËÆA?hò಄^lX¬[fùŠ·4 »Ô®_ú¾Ö¶ÌêÏGGÆ¢Ëä2Aâ=€Æ5ʼn»tþõõ”J£3p6ÞÖIïS®ÐžÖÀ$‹*¨ò5ͽ‘Ã"dK_gu==Œ)^É–ßá eŠ]¼+x¤ž›ó‚OKU滫?Nè•pànùùvŒ k°Ü£¬zWq£ž2#–*Ã]hÓZþúZãºÂ!'ù߉‡M›´tY†u¢?}=fÉγ¥ãNõKÊ·7Þ%c¿VLã¿@ N-@¾²ÉáT:>tÆf<_1¥§(4JHs‹½ü¬û|k{›·T¯Ÿ¦¤¨ó:/Õ.µ#fÿƒ¡”3?äaj~î²/w:†ão£¾I€ô›_#Áã3)õ/Ñò4ñjÌPóX¯w¤ºïWzŸóL18 @‚ågÊÞHO¦¥…J»râJ.6r³'ž |JP7Ò@Hã-æõu5}(·ÐZ7ob)ÑP|md„ü€Æ *Ó¿#©æ%•DúÉ–7U#/ÝNXáuñaÚ’¬Â‡w½4YÔ¤Só~¨‹×9ƒËZt•¿F=€äDt†Î‹·H„ ¥–ŸJÙ^¯õIíRù±Û!Ã>­øèAù_Û‹8Zz:'ä~]éóp’¤8üä-øpFšÊAˆIÒU¾7ÞÚ®•ðÜËeF‡XÉï´Os©¸™'†¿tdÝPVH«~MijÞæï…CnB÷Cø<¹Öp¦ø Üç†L¸¯í=D}cÙ…>¿»ïp’Í^҇㛆AS¨ß¤°¦åGÙÔ~¿*˜wí-_U?ml‹%×í›êÛXXnmãeÒí‹}é;ž0sÒðØz˜/ÔŸ±V,ÒÍHÙ”þƒfõÊi`oŒµ[øü¢jÈx%6$¡§j3‹Šjré7®ôX‹‚uà§:NbüzÁIµ’w„“ð¬DqÜß"_ û{„V8ЖÆH×oà\¯‡ÉÙKA¯ˆ.‡wc¾·wËS¼ÛíY,EÛy—ŠÀ£"ÕâDç@¿ôHùÑ–Üš¢ ?dÀ=Ð7iÜ8E½£ntËg3>omPQ&z×~ÈIÆ%ù]¤Eo9hzE†[g!:ÓþrŠÒMî]E»¶fyÒ>¾¡{#khÉä ×ß‚ÃãÔòRÃc[G€‡êñïX•´ êç“øDë eúßÙgqéÍýð®¸/È<¼¿”%òpÜÂ~­£û$”³ÔGçÞqÐÇ@qÙ³ä%þ-ÿê^“gÖ 1JcóÎ=:’ýW)©ôñ|{wkŸ¹¥HëK ÷tÝXÈ/Ðé[0w´) ÁàPÑ:7C´¿Š„›ªqßú¾½P:G2ÖûÝ Z® ûĸ¸ƒðL0O9"ÚKàĉ@’" §¨§xI£b©ÏUÈ£ñ‹ÀXj>[#Õî‰YEjæÃ¿æ‹¬¸ÈìEsI…Mºaï“qY8-eÅ$èßß1_DÛD5Ÿl)Ý]˩相9LVûõ¸(èH©žÈ'~$X’G(Iók‹¦C”HGc¯ÚVøœ½ªÕ&l…àäu}œyçÔ3’(×F#Û÷9ð£S̼þBÇÔjÂá‡-Mö¯ÏœÊܨ#k™ §ùú¤º(@}¤%Ëá¯øŒðp”C8hD¿ÂˆIüÛÅ!ƒPÊÖ»opj­_s;È8MŸÉ}²Ç$] —3a_æ—!Õ£TÕš”¶?S5¿òB)â•&¾^Þmþ9xÊG±=w®’Uʺ-¨!ô} د€¹¬³ú= ü íá}æŠZc/ȶJ³8D:¸7æ0ßoFºR2xØ·®ÄÎWÏmO„¦Þ ; Z‘µSù>•C´*1‘‚wÝø2~¹fsÙßçÖÚ ‡ý7âõˆð3Ã_<=XWí$µÂòèæLy™ïœ‰a`öŸ‘?9œo¥*~àa¢N §2E²(Û{Ù˜ÍûÔ#35c«T0›´ÜrþQø rÚE9}Œ·CZÖCË«'åA‰$$„ QŒ~³\ÅiO^èÅàê›°r=KqÛI“(º4"šg¦ª)=‡GÒ~¤àÝ©&¿/ÐE]úšýJ˜?p9¸±x^dOžm ¢?ÁôS>¦icY©Ã›ŸÃ†>`«úh·ÂIÓ05€|½’?’ä§/Îöi9VHz-ó.ò§@…ŠŠ±I`?D‚Üç÷…Ÿ]Q%g‹#óZÄ %Íu¿‹=§ÁÀÓÞ²©b¿qý”übÙÞ?ªøðº©íÄVê⬴3äßÁtêQXï˜òÄ”kOCØÉ<Õɉ¾ÃÓi¬$=0Œp^s/L[wŒþfHšöŠvýªe^5²ù©ÏG˸PX÷í¹$†ú/À MÝQ”èá·2HACïܸÌÞaá^!òóÅ—¦‚íÕ.¾¨wíóÌ’Ô5V;o¦æ+bãËÝN*Ìž¡# +Í ·0Ò’ËjD¯ õd+{«<ÿæ5ãE{¸¾ ï¢~TîlÁèá@…8vþЬH¹«yH·¢’†F*‹wÝEò“(úbæ}›ß{1ö7iO’Îü¾µ¶«Xû ®ói"x+iͱã¶€ñ©hÓ–{ö$YÉQ¥àzm·âgb·s²~¨HºlDS–óÑN¸™ê‹†^s%ײIÊïÌŽæÍ–È–Œ‡YÆ¡ZU¿©Ù'üÚ¯ÍäMF%Ÿôϱg¬ãÐÚ+ܪã bºË‰ûdÓEŸ>Úu‘â{G)–Œ6¤ÑGlÖO´V³³H÷¤‡ó·VU©WÙ\ÐŽ—Y“.–c½fâ—hEe¤¤Œè‡Môµ¿L€æÙþöGS‡ÉþÖ;ò©æC¬-„MŠm«a°{¢…´¡Ê΢…E†ÎÁ²«å ”d$J[H´H‰¼y„„Ÿ?œp2ŽÌÔ,DU;I÷ Ÿô¯2ðÕ‹¨"ü_åMY²€{§‹—o¤2?•”ð1C/Ùøù¨ åóûÕoÀ4V å}‰²~|û‚_\öú;›£esxüã`¨ÛgR€‡÷â…Ïÿñê6[œ´·ƒ Ÿ'¨Ohnů Ë"'$‹£w8ß2¦•Þ°QïeodÔL–Xp†v5–”RÿL¯ä5Y—ý³Äú¡7!¶•ù¦é'ÎN­'7¸úy§<h*™+*Rñ|£ª!È=ˆHI4ºEª1?Ìê!irå:­ѯb5ú‰!‡yB$mE|š¤_ã!#°Ym‰FÒÔÇ×ÓYE«`|·ik<×{» !KzÌ)4j®Ï©”S2u‘LÊ<ÆIà€y`¨Ùì‘3¨º~€¡f‡£Ê²c%ñPZÞÌ¿"Îú[w»Ÿ¿B/é,Ф™ˆÝÄÁ±$™ÍŸ€Ú{$¬µ¿Õ&¬s"G•ø“[K.ùxSf¥#k³ëk}‘›ÔR+qC¬>cÇ­4_·Skøæî¾¸hF½|vÍy Úü8¬‘{äELó>,Dåò¶¶úá?•þúm-­ï ¶Pë‘ËŽk„’4m´Ãøðk02d¶¥$û~•J–¦'Iz¾³WÌ,%k½á-|XÈL[‰•È7g^4× ó÷øûÅÃI‡ô’29ß}Ï7¢ÏÚ›•güñ™¸‘úg M <íÛZ¥{òMnÓ„÷VXÕ \áµô‰Nºb¸m}Ð FZ¥ŒÛ[#NÂÑ«-ÉÚ>šó—/ø¤‰³äVÚõ764½ðñ%‘­Ê‹cüá V=q?(ï^S’€âoM²O‘@¡\¿’W4ó‰÷çǼÇl“é³ÕnÕKô!­éPß8ÇÚ : oøßwœEÑPMeÿ(6@t/kg¿ú bç6°~õZe¿'K$ÇÌ>8쌬aKLÿÉÁaìSVDC©9$”`(}4ПÜ}:Ìbê‡#ê÷0Ÿ´5h>G áé›CÜŸq~HÿèÓrûÎÛT¸e‚û…à¶¿u„,K*¹7OͧùH­‡fn®#~ìKéCãÇ5ÄQL•ã,íã¼)‰mêF6þ×2=u7õ„ðÜ+hú$J9ŒqIW:–ÃÖ˜3(m§ò~¤1æþœ‡*&Žqã¥Ót·zÅlyö)«ñA08HzÐ ŸÜfIA|#qöÇ—FÐq“¬'®·êqðW*­ÏÍ gUCq)~áå˜SQ7ö>x³×¬Ý2~ÿ¢„gæKúà‘æAÍ~eáùÛËE"öÞœ¤/œC³o2aý§eúú¨\¨õ3ÌïG˜[HÎ.¸?Ùúe{ ü½ £ 3­ºFbQù2¬½ôí_üó1¤wÍÖSc‘¤/’V^KCî–Ó+4{lvè|0“äZÒÍ·C ÀD]z(üàGÿ “þ©`åvíw\¤ ›8çý޳l£ì} Þµ>ñ,–>£š¼[Öö¼ô«6±"`ØA¯·4¥cg¨çiƒ¾ÄÍlþZ%Ó¨÷%ëÉ3ÉùO6_O„³×~Klé7pœ}óqGaáX„™™5¾i¢w6²£¢5 ëb~¯Ü)&„¯üwÜ;ô$øUCÉ‚ÎÕ±×Ò­„¼$ÎÕ´ž–¼Mš'ŠÀ\ž&`ã-º„«ÕÌNm½-[Å`nÖqsûa‰Êòý£Ü@zMs2Øæ7¨dÕucB¡Í·IÒ N1RN‘+Šhâå¹ ÅPÑ@VaJ]h~ Ò{Çdý>Š´¾¾3™wéfhO{ùZw²È2¥É=qøÕ#ÁSÜT Z׆†?ìÿ÷¼ˆ¢Õé1¿´Oü¤ô4¸yn…³ãÆ%f­‡wºÙÞ3¸-!P¯~kvØ4,ç öÓ/ÁëÞCATsÐGª¼Vo-´U «Ó‚ÅQ¸Å!8‡ Ç´ªÒÀ¬ØxY‹$K|,NN‚ýñeB6õ¨øý½£UN7ô`Hðï9>Xýbtª¥i±…}g‰Ðž{í[z¤2’bÐÎZô$W Þ#¯¨ë…sXîˆÙ£ïO%²Î@'™YÒ HéŸLʆ‰««ªðiÓKϾŽÉ· Ÿ¼ŽÆ[±Öœ0)ßVª}Dò?6øo·Êx$oÈ"*ÇW Y“kñÝÙ󦞒û½j„ÍÖ:ˆÄi¿>Ū˜ˆsŒ½ÿ¾u«K&¼Í´²Leæ×b7÷ˆà™µ#ú;I²  4çö9¯Œ¬Ë‹“c’æ_ïmÎBøÍ¨X €lb-ÝÁnoÐY-¦œˆ—†0ß@Y/#9ì¬Äÿ¦yõÌÁ´+Ò’oŸ×Ú%Kv½ö剣ÈÔ ¨!¿z€ª›ƒÖ{áà]ZH“Nlép„žÕFúóþZ‰â „A¼tØÙ¤¬§TÃyÄ@\^e¸  âx«.JðÑ)LD”á*‰X©Péq…×r5Iýít0®TóM/ÖÞû×êÇ×õ;©/˦ΕÍdê™ÒÎR’¯œš¦n?öe®xmj×y—ô¨^dcÇÑ4¼@ZuÅ/›NSMksB•„°l‡,í\b¿#ÀWeÏ7¾EW[¬ïN¬O¦±¼‘j«DQ7ƒë’„AžÂIÓå|Û0¯9 çÜßÚúÁ6Ü·b›Pto h  ƒ-¤:BÛÙL$|fÒ6Ç1BcßR酄턪;ÃHk¬{9qR¤Ú·¦…wž48¸O‘6øªÔ®oÂ4hï}xì‘lèìZÖ[ÕxE®##â¯éð±pµá{:õ œ;«’ë?np¡çšÏæ‰EÆJ›)vfrGQü2Ðü{£Æ’^ì¼\mÞd¦Aë5}æö@ÏyüUæ 'gU…T1ffôh›ÄbsˆÌ†½œïÒâ§_ôhÂŽ ’ç_e¢ŒÅ(æ±Ì¼õ•ÂÆðgrz†+2|Èá÷4›.Y±´kvض¨˜vcLUë†81‰±¿×T˜qj£ò/±qª5àÆ97åxã›­F›Ôìãœãê”Õ*’€Ù)·håá ÿè§ÒÖK|Hîî áiÙ€JÃ$˜*œñ4·ù-£‡–ú©|êÜÒ*e&2,‘ŒL0`Ñrœ¢Q—:‚Œ}<ïk)Î7èœÅàø›·G!H ¬IŸ¸FÂy-µ4G‹2.ì%²þ°;m[¨KVœÀZ™ÜNXr"fñÁ5žô >·§ìþmFbùïñ·óA–^˹OvŸˆM–ĿխWÅk¾¾ÃéÕÐÀqëÓãœüëÍ HSplmt‚é)§‹Ç ˜‡RÂýK{ˆE2ñfÓyONö$L)w7“…èH¤f 8†ž'KL†þ¶66qù¹³gÅå¬åO`6¤ß ·p&üÕpfå=çtÓ±1䬘¯U+ò—ÁÌñðivûKÔ¾ìWiXP†_.•¨¶è¹è¥äŒÿI‹ô™·*½J¶{LLv­p¿êuwUƒr; b¸{`$¥&%RòѧY[E\t(%ËBÒMÍ”á?„µ9wá#æ…ëí€ÚR(Feé½ä–€†Æ·¹cÒ>kݸÞ^ú{l Þ0ŸÑlH'%အfj¡i'Œ ‡éǹó…ã3””ðøÍOkK"ªPˆƒ”Ko±¡& ¡²2.hóE~W§Q¤Í>ñïå"ªžûÌHÓ8ëêíê8ï˜}_Ï.ÀaEsx–IEÞÈéÛ_rø–¬7Üh‘‘ÝÃkž·>êXš‚… ~ˆ ‹wè­éZ²‘xÎG'ìabhÝ64¹éœêíq–È8ðlðš˜c"ìí$Lƒœ¡˜…´Ã§6±4)‰¼äÀ•‡”¢š)Ž}ŽÎ)¸ËN,H½ä“ŽPªO¸7¤‡ÓzïF~惯͵ÀùÍ¿R¬%ÄòiÂ="w¼ <5r,9–%¶AàŸúº+3—O¨v_UL[25­jÚŠÖ`³¡™xµ áo¥J¸£ú^Ȇø{Ñò,e‡zÉ}óËkm#€Ü¹HO8.¤mx„QeÙšvZÉ$ADkÊ“Ùg5o¢­g®Ùá衇×ЬvÖ˜þ ·Ú€,JžæãWI—y|¼¯•ð·DäñÒÅïe–<4·­Þ²M‰wc¤È<ÙVž,øáQfœ« Э1Û£/H›À$®,:¸\ŠƒðëÄýé=È Dö·ô­RgÉœÎ0…R·§“EˆÜþúŽq ¾nu_Ø'¤sˆ)Ô,òzRAÜçÖ€hÔq)’äïý0þ¤‰¦©žã{íjí¦F‹#YÈ'¥þU‡îÈ­—¬#á°ø×¦ž¡enŽ?Kn³˜¢ªF ¡Á¶‡šy-’#‹L7‰ú—ªâ€XÎ1å¡1®o4Ú}âµo! O „d E`Lѹoתr©s2S&ÝÌ™esáèlB\,]FˆóHŽÄù Cf¸y舞S}vˆÿB!ýïý)}Tê/Y«Ýqföu/¶'¤œ)Ä?² »` £2R]n­j)ä”údB˜w¦G~gußÑÒN½šØÉªYé(xÑÇS)%~*YS‘ Ä‘µºHV,µYàߘX±]³ä3€]+˜$J³J(qCÎ10ùª_R•º$a¶×xÝÃ0àë ZÌzüZCˆ£yþv \=›ÊTİ…G´6ÀšBówR$C ûüZ>¢åØqxqŽj  "ë&ןEbá:e1¸6œ ¾…vW-¨>ã€Þ&i[’å‚€õâëÖ6\\šZó Ŭlæ0Ÿ4l²XH%óvøQš£7òøªØ¥1=tMø$@Œ˜)®ž³°Œ¥£Å‘T_2”˜Õ4÷1•ìØ,$‡é7"­CÎ Ÿ½v]*R­áI‡F?Vc— úÖ-!rϳç{U0r‰ˆ¼6…_kª¿'%Kj ­$ßÒºÛß 27w>+K "ú‘tÈÖ~?¨žž½½¬Nuƒs‘Ò»Úá©ø\;©g&#µ¥ýæo¿i®šœdé¿Ù%57öÕ hñ=ùÒz,8ˆÎj";"ŠÕ[ÕKT/F׈àg{bÑÏŒZCÿÉØËíV±Ë*ÄÑU“bÎ?húÛð•“Èš?8ø£3 _»¨.‹’x^° “ûè­kª ¨ÎÉ÷“>ù)3þ8’df'°FFÛ³§†ÿ üé/ú¯aVoðœØ~óqÊnˆ¶MkX£à»êë†û8~«r5æjòGÏP½<—º±¥C<+-„³œ7G1J>ñJLP^t§ŠÚÚ|v…ŒÖ–Nd©­`fÕ‚ç|F³(3©4a%Ú ÷q}¿è8Rì ’üÃØ¢ 9dVè8Õ^>÷@Á‡”èWEz¾J×l¤þ€Û²³mý40óžü­”j p‡éóÕôAKðX3ìlð~ Rʦ¤_LJÄËŸ^/¤?¡}kìÛëJõÃGÝ"¶Õé¾läƒhíÒ¿FÍôêÄ»©‹Žf+èâöƒ=‰„Ò’µóZiœÁöDRÒÑ}¡!Þ¥–Øhf/懓¿ï¥Znu'1PWðÏÈîSy2Lƒ»D8À&ÂWŽÓá~œ…à«Ï\ò²<ÿ^'dJCyD”Âz>ôû›ƒ~Nó[aìi ø„ÉB[HÊãìÇäס§·€—C“7عơÆàJ1£… Òxè¡‹¦ù”æ®ì/(Û)À&V¬óDD0ñTNd.ðˆ*Y eeÆqǼȸ«YÒ·ÓÓÝõß!•ÛŸýëE3PË*8©mŸHä»Gµq’d͈Å~žÆ£ì®b¤-— *ýäêð–xHþtC/ &q_?¥ÖåГ@D–Ï’m cÒº:÷É~ƒê†Û*Ý Ó”Ò<3¸!ù€;ñ“Š~Î÷Ä77G yé>ÙÓ¶meB¼ª‘œ¨6õõ…[§Étœ±¥TëÒg5–HË$o¶ø¾;/ÕÊÎà{ˆÎAè÷Œµ³¶þ×]r.…õʾ½ÍîÞ{Yv˹`w™=ní¨ò¤í›·ï·¦›FÏØ¬#z˜ÐRÛ·,XÍ’¥°% rYŸ³³àLèˆÉ^JN Õ|¶¤Îq‰ñ$VãåÅMEÊP­6# (=¡I· 䢅jC,ÙOÅ yD¡ÇÈž8Â]àÌf–‘âu/ò40-‰‚ô{nC¦ÉC{œ®öm'ETº–_¸÷¨?5$ÌòH¦šçÈßáá:Zñë¨ÙS/àL½ vˆÞ}ã``ŠlþÑ¿œL/ÿË÷5RåKÚ¼nrŒ yøíùVOþÊ5°´þVM ®€>¦uXm=ŒTZ Tw§¨°¦Šð©‘y‰¦îC2ÙÖC’Z*ע蘙ñ\*|KÈÀ›·H.õ48o{äϾ¬öqùWîo$ç¾ôkÞÊžA™—ÍH¹DË ­WÂûu~„ß$h. ÃÞMØå¶,\ÌÆEHy3^Ÿ4ÿDQ€O¿o÷å,äŸÝϹUùõ*8ß˽p¼›Êý¶IÚ#YúQJ€¥ML‹mÓL¿‰Á.?ˡ횒uõÅ•¯Z«Ïç¹ÚƒqÄœz™‚o=½¾ffLZиÛü÷ì­Nåäú?ý;¶ªž#œK,â&ÝŒ8¡ôGÒyAáqƒ“ªÉ¥SbÏ”ü=M_bþƒV/c³Øm§ñ9·1E¾öbê­ÈªUª: #¥bÚ5äf 3!ÝoözŠ˜·?­F)ÆrP—òßýßþAE­c@_R*S±ƒÁê è`j!7oÑn§lFíi]RÒš~wløëÏMEY~Ê+e†yÇÍù㤴ÁÄåD„>FÖážÏH%]Æ-½}Ú¼Û, Í%q:8ñÃDnâÊn>UÖÚtƒ¿ÓŠãfßNké@ä³½ik‘#ÖE†/6†¤¾£—×µ÷%ÃÅ/G=÷SµE¥=BÊð‹Š_…T¬å.LÓ>¯«ëeúÅ@¦ŸX"Þ³îI`(YDé\h´ézŽš_eݬÇ­©”\HÈO>[~•.2;º§[=w{ƒP¥~HÑšËá^ßç­;‘Îg:éÙ6{slŒ±lùˆ_Q¶ \(Õ!&LKþ1ª`wr§´ðš+ø«‰íOzáàN„”}Î$ìÚÏ÷CcüîÒœt½­U“‚?M“SãRe´2CØeúƒûÔý+ý•øswe•~5 вAsË*Þ*ólÚZ¯nõÞhøR9I„Š)ó–¸è#¥üû÷^†Ô, |€o=zÒoÖÒÜh —ËZŽR]sÕÚ’÷á8ÛØgýoxD|>ŒuŒÃp¾ž‘ÏÏ>´°œ…7ïn„ò$G–iK”‘ÁÀí hÌxd4´2ÅчŸ×Þi’´Óßù¿9Ová˜ñö¬]T{b§£ÌÂu»„xpÝŠ¡ÌÁ'yëÀM–Þ[^9õÆ-D4:Ì|›²¬(´MøÆsIµïwL9U×ÏœM•øAC÷ûå:ÿÓ×t*¢ Qåý†—.å…»ŠÌe†É6|ñ8qÌNpã`¢-Ñ£‚°@á0OKéÝG@” ƒ t03¾ÒÓ s )NÖ´‹Ì·a"7J»ýìúî•ajYÁûVu¦b& ßÏUÛ‰høœ Ë¯ôø³øáªØÑ¨ï§šK©Ì«aVQHñàånލkØ'·~¿Gp ³ ­H²–ºü=øïÀÆ" NPf +Î8LÚçÈ1ò”î¤T”§£Û|¦skÕa\vzïPYú³$¸¸ýÌ/&bn²8æù€-òn$d )sºä ‚¦1˜RÕM8øu"/uÕPNÛéM¥øCÎÃöUYi\?©[;>O0&9`±ß¼NÝôÁd܆î‚%pÝÌ¿wTç§H»Ñ  ,ª ‹³™KõáûöwcQ?Ãã°5˜;P¯fÞ-цÕ{7=l?5'fºžFa‹-eŽüÊÖ3úž›×ÐÎV]ÁÕúcûóÖöVDÌ—þ—tÏò—tæÎ¢L!²“›ÞȽ1#gµ^é$ý\­ÀXšÎ|¿å?÷í®œË=˜3¦í°‹0&,Žô®¬.w‰4‰s‡¼¥^˜MY èѧÉá Ok–†œ‰i5Ï^ø£èÛÅ2+.‡ ýZ& oÆäЏDUQ½;Ò8ÙNæõº7Vr¯ ±§^^{!˜—ÆÕÙ…ìS=;Ûò{wO!y¬ÌE›p×ZÑ:³‹‚ì} ‡²ùãØzQHÖ©0Ȱ3°®D'²¥LÈâo—mH@¢ØY--Þ’ãŸ×ë½¶×ûûüGfœ`“Ö?GzzŒÞnyJîeÌ·øÉ/^ È‘óST_O†ìll ² hxƒ·tEèË”.9‚¯#Ë»Hý¾¾¬ž1{,XÄŠU/üÊÄÝ8åõR×G/‹ÚTîÄ£7Ž„"ºXoó O“Þš2 }¸zàíååØy+¦4¹NNÃÌ.ßrQóÄõ„ÀôÓá‹s¾+s¼y»z„$СÆ!PO#ƒ+ØñÜrØ¥õI Må¨Gî»0éEO’VÞ_H“ŸO[öð©Ç˜ºb{ýz!Œëèé“•ÏG= &¿;C½Ëc³€ª¿~:P‹(î!á—ÃëIWÀ«Îi¯MÔvÏ7Æyl»Rä9¶Ê4ôî¨Ü1Æ­üqñXèçýIç­à¦DáW¡§@$%9'‘éÈDÎ<ýe}½vãB+Áüg·&løÎ W×ûÈ,¹PØ­®/¡È+c0+bA×myÏeÒ˜¥nˆ~E‚»š\Š}©Š½nÍ%vðËý1²xÀåÔ8éûj²›¡þv¢œâéæq>Q3GJ Y´ôºýC$‹–¨¿o¡¼Ðk%ïM¨ñ–iËÚ®âJ¾re­K÷òE¿Ôzd¸˜>9Þ›<­‡•{¹“Áf“þ(˜YZ;J•)D¢qy$xJ±XBœÝ 0‰…&xn¼7&R @fVàØ4­uX¡øÒS^MËÊéß^é<?W÷Vø'¹dm9<ÅI*è&opr¤`±ßPݰù$9ÇDhÂñÐIWz¹°lðÖÜ3}n2î׎ôu3z©¬Žìß1¨ yõ þE9÷%˜–z¶‹“f4ØÜ(ÆŸL9ƒòþ0kÆl—ÜB¨Òð÷JR¤ú)_î>+Kë¬) §7µZwAYo*»^q§`9¹µ .cS„¤¹7·<€Àyê §NoL5x—×]LÞÁjëCÓw¤¬EI'ŠË¯¯ˆñYGÒÃ[ŠƒC”‰[®»ù62B‰hz?/È‘³Í$÷ÚäØg-±Í:dÒµüMîì08r¡‡¢%/¯Í¼ùTÉ6µŒ•ˆ* PMKϯûâtEÞÔ¼S†–„¾Åúá"ÚV¯Òõwqn_Ž&l}mÊŒƒ_¯¬)údðUqˆ=4Fß,žÈ>Hn"¨xèáò@¡òmÊ3%ŸH\¹r»"Ó²V×ø"/§Ï¹ŸÓæUê5bÛß4L»÷k,éŠlÌŽpÌCMSºÏ:³>Fx¢%çéë:á7a|!¯Õ« ¤‡0†1ù ÁP»×>RgÞÜè<Ñ(<Ÿïäýží¢iõk l‰üõ$“ÕúþÔyz_üٰλŸ‚¨ÿß­ØtJÕ³cê–«_ÐÛ¢3Ó7ÙkYEùÑò¤ƒ£‰éöäTù ŽÛºé{æWsððʹÏ8Š¿GVmó½lµ­û`‹Å&“Í_²î9=•ëÐ5å£ÜçTë½êÉC\•Þ þðF.îöå¼ñÀTdûÖ¥zÐÊêØj¯ÔžánÙ¥…'¡¢Ý÷_çúU太DñÊîµ ¹U„xT8‡×69î¿õ8  ìÜ—_._æ}‰AXy¼ lºÄ_M?¤… ¢]GܧîõÄ.XµKê¥]J£ä¡¿6E¹´BˆEÒe9|‘Á¢6îºY8‹\3U–B£@èqn‡.XªÀ#"²Uîrð¹É¨‘ç"gê&i}k0òúF¯‹ý›OZÓëhQ‹Š «–@JòoAuIU4ëå"ßtdÿ¡ÕiÙ•íÆæÓ‹Â¬Àážb¡i×eáÓ´¯1CÔOÐÑí*ÖžkÝ›-_Òþ É~³è·O$”çÊ¥\ʦz£ìu×õC_c&óØ Ú$F’!¤å/€ôÓÄëEÒEg |SÍÖJtßÖ†Ø)(ØøF>Ø4jøs3ݸ«=PðÐYö¯ z‘<Ó³)t’Ñá·“)Þé|E«®ñè‘Ï_?á¡U#ƒKÌ!mB-–dä «ˆþaú—TY=ŠÑtÿ+ìuå À¾x“¢>Gº¿aáç>¨Zkœ±"Ïïz k‚pNŒÅl’ètø®>2 "Ö_Û(¹ÎýÙS󽋄f ËT„ Á„‚¤gë)˜>¿j;^„Lrswìp2ùu‚z£½µè~âæéW¯C-2ÓÁ9¾¾Š;›¤1É‹&k+S,Éæ‘ O‹º~é%Wa#‘†Ú¿Ú‘AGÌW NÌw¢Š>®>m^t%ÒE+¼ç·QÌTmOöëå°%ë¿´“3­cj¿zÒv…ØÑ-0±!¢Ûg$Ð&жŒÇþ dáSöžh¢ŽŽóüq/ã§øü™²f;+œåKѹ´ ^[×õß—ÅA‰*©úyHß*—z.38¬0ê7Qú\%U²ýpÇu(GF›”°Ñf= ,+ë…3QEÅ%¬­{PSÞ`¼¸"Q ê¯3eÅè Ä@Ëw ¯a_Üò¦ÅXkŽ‘+“,ncRàI¡ñ u½¸žà>‚—Õ<öîxŽU#!~-;m#i¡ÓÒ_‘<[F¨¸:QDák€/t ¯ŸôÌL”– =í³äŸ< ¥týD9–·:‰£.‘Ø…g‘ê &XåyX•t%µïû|ì±Âa¦hSÐÒwú¦Ýä+Õ”ÍWÉYìo ¦ÛOÿÁpñuõja¼>4M+®Á!a1¯ìuÿ®Ò¦Ò=Å`-êã®a i-›Ù‰ƒ7´~¬×¹ >صj6ÈFÊ0›^“Æß J7¼¢ÿ-ä”Ù€ë‘RÞÙa“oÁ àM¿G†•ùu"¥ ZÊÚdõß§¿ëOÕÙáy ¹ô\»!ÅH& QÞÄc=dQêÇçžÛ’u_³|Yè_£{Ú!4²†b©#~O,¥¥nÈÌ•A9¥½ñ"Ñ2(Už”áA½Ö“¯,qÍ>‰€Ã¡êN@s…þ=VÃŽÑ’ÿ„kÆ ™Y¤—ôœêWIƒðCtiãÄäf¥‘_ }ÿöÿöà„´qE/xÎ7yý ÞËRÝ/ÛG|YŒDW´?Õ§V¹º«Œºz¥ˆû| öœjåg,Dçܳ¿D¿Ô¿ý2»e÷Éz»"¸Ò1ò/¿\ÉÔº93Žnšó£¬»Uü¿0ôß„zãÆ¸i»?…8¹J§¨X‡d|2`—tȹ ö³„ýg†òCB¤õü´:[îðasí+"¿ä_«ÈR/8XCà‘ëÂc w”S–èêŸÔµ1øþúQ9ãÐ0ÙÜ`Þ)ê•ntY˜AÓ~ ÷ÈÞ‘Rà+chnxÇN>%ç'Ûãè뺽Á•÷¸:H vI”PM¤ðñ¼úFÛ’ Ø“Þ[Hwº€Ôß/!™´=õíÈø°@.8 ŒdŒCÜ/ÒNA¿l, {KIÐc¦Eh *§­—0PKR¶Ëqò~ºzA[ÚŸ¢Ñ” ç¥Ð‹³'”ÌwLˆ:‚•ë³ ,Ñ3±(3Ó8©—z§ QÝÍEð¡ß—§(t(ãÃÎúïàÛ‘xð–æVn‡’·|… ­ð/E“¥žpkÿno]s­îBí;"x*—ª:ÕÉÿ&ò“Ì«ðBŸzë Ê9 ð( ÅxÒ,™m èþ}õûë<]¼*Ä(">\EmôÒÑí!¯¬c„LúBúGНrZ9Õ÷%0•9o8`íi'×–2GkÒЂ׌؇åGeçk" CK\÷±S­K‘r×P¹ÿ Èæ# (ÀÏO¾Ý@%‰Vû4½œ5™"1Û„m§Ý5þG¼~m[ªׂX!cñ-ð›©s“m]} $H9ÝHh“ÑC]ɇ[…ÅùÉøþ( ®‡5&õLµ:+– WV>~%ĺ½±^þžIÆ\C>.Z¢ý‡¹*æáÂÞ8;ý;õ|Íh#mÂÜšÖ6áô[åõwN@Ìu—ðb)Í"ݱ4»n„{ª“ý=Àé ËóêeMì0õª¤Ä½Ñ~£3OÉáo ºßþ­ßeÇ`Q‘ôW½Œ¶s’ RPeº l•üë)ìûspù7rv—£Í¤9£NJaÓ›³TÍYêIìmöï»ûq{4(Sia!ºu·a"½2„ð³Ìz’<ð× G+ ò˜²ÎS´ ·ëŸ$¦q %ï‡ÿüðËï¨qÑp\ºÍǤÞ]dzp¿'¬ø´Úïßd[ à«R¿®|ç#+ZÕÎÙì„ü»BÚÚ˜VƒŸ¸ûÒµ:¨¤ížßü'é~Ì'—Ÿø°uÀ‡hè»,‡eç׫oþ»§²ø‚X8Q¸³ç>äbÖWw’ö ªÉëo¬ô°.{„g¨4Õ$WÛÛÅHž¡´cÌ¿þ%q;Ôh ,êw¡%öKÇS\ñ_zÍ‹›ÚË‹R9„ŽF6ñ¹ƒ ¾‚›1_çŒY ÁÌ¿±ÕßÚÅðuúT: MŸvò,Cá¼ïÁzÆøë[¨,±àÕJ¶ß¼GÙ>êø³þ„¤˜¤D1ÿZÚ´Á4?™1gp® ×p6ø¬x%øh„Mü’IÙUTÚ LÏ„‰ÇøœÄüý~·™4~ØÂÒ¤O¦¼­˜èhØëN·RK<µÄˆõ/ïj,e­SÉ¡O¨p¥nÊ1Wzd· ²&ʗɳùDUåb%ÍKÓõ*Àò2‘7ê)yˆØ—ó(ü‹¨ETqnë ^ÿ …ç½$ÿd¥º[¼u¼Žï€ï€ZkE[8„¾c.~>ºÐRÜvõF>Yøøí†²çoÑ}RqVÏ®:¯O»±ëµæ0]b¤˜^@G 6EˆÁ,P²š?c¬þ_¢W‚8B»ò$|(¿$ú¦Ü/'¦” 2åì0-ÝX”D;&†)a`áÿÊ–ǨìßQ2ºh©»u´£§nu¾öà7T¦ß¢•7`‡™#&új¨ùÅd;Isúr…rwò¼Ý¦¹ ¼Ä•6fTÁ¬k‡1ÍLw¿ˆ{Ÿ8o|ÐR Õs|8]>3à¿J¯CÓAý­cã‚Ýl `³s•ñU3­õîmÙ^Åe"i ÃY܃? xŒÜÜ ãª˜ÎNˆfžKbµ´ŽûâÊ·p¿Zä€ ~ Šß­KèþQÑR¬ÀITDü…ü¬6([2ëIÐl‰†«2:£׆à¥Íé%IW\rïv{‹ë™¸6¼å_©„¿K8FqÌ__—¥‹éÖ5¼&våO™ÐFóJ_7÷uïH¬ÏA?Ç/|\™?~ØF¾jôÚ,à·&Ç>h¬ÓŽˆâZÂõ'®cEn¤*—.TAãßo,Õ Ú+dž¡pH‡ä*×Òa1ÝîÃE´ šŸ˜èz¾'Ýw¹~\ßr“lÛDUí#<ÞïZF®^·­ÉÌ”27æîh¸P! 3y]³]óGüÅþ.5¸_íÇŸA5NÝZ¾„Ÿàywß¿/J·ŸËPé»5¬(3Å B¼™Nó~Ö#Ox²Ýñ‚hÓ%Ë·¥Ô¤®ÜÂÊ¥ŸX+¯ØºÌÈb’Hu½š¤o‰ážLµW–~r‡¯T•LZW‡¦‰•’ži£ÀSö¿â;0eÅoÏßëŸ7a5¨¾¤)«‡[çN0¯fºT=ù˜®Oü»¤þè"¼?uî ‹­­zY–ÉݼÐÑßE;D–û{ª£ÅÚa#®Ù¿×”è=—V#¯y#Õ³…ÝïOùBz€tž®LÊ`3Iâúð ^>PÆÈÐÅùÏh‘û Ç+´ž“u˜‡ uâ™Yºõí¯?}¯2/ßJVyˆëÄÕë2…ozÎ@e9K¬?Ñ— lÖf9¡ ïëÓuPk§ c äoç6ì–MSG²N¾È¥?ŒT'4c $¿‘ Æ¨ÜRÅüuõ•ý§ž—Ìœ?¿ézi“56b4¹°ß—õ±A2;ê[™£º_ãwMªŸ%Ó8°* SÐJ‚Ò»‡©rkMÂ$ÄéJ(‹_Ççóâ#ûœ¯àµ›î‡‹ G!ÏÖ>ÉC¢Ö¤³»Çß¿YÛ ¿EŸ-áq¾X¥š©?‹ODC¸ŸÛô£ÎýÍÆºIÂuœów6XüTzIG²)gƒ73áJvÀ#‘ˆ©1^-4SÑ)l³}~Y#—…Qu©žYò…ï&!eê¹w ­bÏè³çEE.·q¿àˆï +$¡’p¶'lMý¸ž q`Ù=¶×"™t%@5/jÓqãpò8.&¦_ üÍ5ëw«±öî_=Í|* °W#Ç´¿5}_Êc˜õDÄî)…\ÎöºÁ¿¼ä¾gCϵâÆý2ƒºµwwük‰ökž –š»ìcIø—;-Û Íû y› s¼^r:Jט–V’é^´òWü„m®R: 2B)X¾ÛX­=€9sÞÍÃS’¢„\Œ¯_c¸„òŸ}ŸúíXõÆ|?†´ L8lðÌ3Oê‘‹ ¶ü¢7ßÙ¿-¬aGÿÒdÛSò¥« hSØœ“x%¹c‹»¶úb²8^gQ“u%ÑÖç#I‡µ²Êj®ø± ~Ó±ÂI©ª¨€Ëί –)TTlÚÑdÀDóýSjÐfŽ\39ŒÃ.W˜ƒòª€žlnK7Æ3'R!yµ9¡ûéæQ¹’ç Û¿b"Í»~tÑ©eaè4¼>⤴ñÇÐä!»ûV¼Y(Â1[Ú1úßš¡éõË ã>Óð"]-)=€}Þ¼Ì\J”Kì>h_ÙsPmz&¼!¥ãTãû¸Óa&“`2"¶Ê´öCÕwg<{7<¿¿¡;dðùµèG³ª1Wäè…Õ×ùY«–.M,3órÝ粨^²Nzœª}…g¬]Q{CQq,pæ¿ ¸/ÜicŸŒ¸ÛXkBæ÷jTøûÑÕáTVWŒy·ú<%XZq¶_ÍûƒXÓ‚½rJ”õ‡ÏõrÃsÈÊl£\G‚8xRÛÎt†Ã±Û“fÅdÿþ&f\–Së[[–ÊúàÍo=|fH>fh jãû7å‘°¸ÁC-½áèSfÅ„¹4ß5ÓTß åÄGäAòFÔ³òdý²‡¯h®Î“. ê>Ï tñ×õcFUªŽh>ÊJáã…Âòæð?c§ò9Bâ\€bsùîQ$ŽÑ¯_é¼ì  ymgòAM·u¦oÄ gÅ-û«>åŸä^fôÅÄ2B9E+ñˆÓœ´9Œ¢ä°Ü·w¨¥zí_}VÎpLWÉP Õ«¿–|[hk\j𿛸ü¼ß|¤i­±½¯R=Š âÍ»‚É.Ã'8Ûý<Nyæ"H±:­ óö¤&»Ä ÀéfâÇdo¦æ}UdI¡‚°KìLö9Þb ß~‚iö6´'…öóª9Ðç—d³1Ê nNޏæ=YÑ«+»¢!Á? _Rœ|œ G¥{OFÉgyöËa"Æ€¿n@Ð 2^Né½I™¾&J¤ÇáÖ–‹2)Ðqo”q/æ]i7¯ìosÕ"USè@uNppÈ«{LhÚ§”°Ô©ÆÝ—[²}ÌOŒý®K®FL7îçˆ6Œ\¼ d÷AcÔ)wäo„Í[ÔxyRßÅØÎßϺ9ª#úúÞ ”°\keŸ0Û- 6KÐùR$唼ô³gÛ\“ùNÎ4t æç×8½¢¦bü&=—ûTPټ܋?Õu £Ó%xåœü[$ZÔã Y8|¡[‰¦cÞàrÏhfÎ…ù Ô®C˜;•7s·ßRv!7[À“…‹0–î‡ñsýåÌ'* ›Ü+¹‘lo V;J€4ƽ`ýv{.TÓ÷_ý¦"pôYë D&c.4]8›„ª5ùKЉ±®µä~¸ Ñ´ƒgí|PÑÿž&äÊ“³ É`ü}²÷üWÿÊüÌt]ÕD¢ÍI§Dx7ÂRþõ°},€CK§ß¯M }Jµ¶ â˜A£¶æºã_c£ôWw›9C#ZYýëÄ.Vd'y7f‰Ù Í÷wpÃgu,€h~u‚WslpÛ¨N2Ö0/âÉMiD$_Kj$aVÒ}?Öìz<®a?Ù+ áþʹ¼¼´[²]³¾ 6í1PC‚YÂ'ɹžy‰Âa–¿u<ÍÅæ"£ˆy:éˆ¶Šæò׿ =oÈt>~ñÓäuDçèL}m£€ôj®>õC²ŠHñÓºð.&YC×x(Ëu¢å§˜Òüë #Á*·J4)vMãÌgfÃåÄ1›_ Æ›¸×ü ¤=Ù4WÛú~E‘„4_5&º±›¨pfϺ®ˆQ¢u»Àé^ÜÚZ۞滋µ¥|bÍŒÌô¾§¤5å-,Û%ŠŸ²“í›úgŸ3¿ŽGÿ¾óhÙzέ…0ÕfŒh“e’“óýoÃðsçAü3Η›B–2Z„~ fšMõÏ] D¿ÈºTjÌÚP•‡ú „ÉÇ’ë %4Fí1ÐD§ó´!,J¿±µ"™zãÝE/ñÊ/YHxéÀjMƒý·x§Â^ü[É™ežr'%ø­ÆÊ™`Lw™»W? †Óµ5µ•ûGÉaE„×ç"1˜d–lzi+)’šý‹‡pHâ¡×1ò;>*<;LzŒYÑ"í†Ð 7ÊWK±n¾?ª{ÉO|É™õ;Í™5 Ø€€™:T…>½ÆX4=q½DPxû"©‡0éýe?( ºöh`ðálBæìê'K¶‹ J„žÇxGû|Þß²ú¿]²ÛéI z’Ù'ŽíÚº®4\³dsÚè&RÀè_CŒGóד&Ñ”óÉÒ³±¯#cÿkñ~¾!;qaÎ9MÃÁþ…—›¨6i^…U£ÌY(7̹ ,ý­Dä1"O1:ÿJj¢…懧ë…!éò=’v(œa³¦‘GïË´¸éµÛEù8¡LL­}‘Zv£]çɈj“URDôÊu(Aü!ReUö¯¾¨RÉLA5%¿Þ‰ÛÐ9(spðž_åß Í3Ñ$·æ …,B Eš2ã~"¾Èbdø ¬þiÛ¡Í®ž+s²RÓ°ZÆ& üêp\øHIHD«ÿ¤Æ¥µú_ `5¥§Š÷XEÆ:‰š^${iâÍ‘£ŒCƒWª u®H„uºíú>çÍ 3}âè­ñùE½%NúHLŸ©ì„ÎnˆŸYòñ6† ºÁþ•DT ¦ý÷Ù}6¹Æ·²>1•’1Ú†±@‘ÄŒ“@º¤;cùö[w!‹4†Tò­  Dh¦yõX|¡l£ôb2éþY®¢/VL VxëX!C0Wb#Iºþ=¶fÀŒz™œÅìõÃ~MÛ‚°C2-¼Gº¸ 3_8m{8‰‰"Ûõq‘ñQÈëÊÙ»ó8Y„9¸Õ ê¦‘6ìÀ‹‡„éAªù²tÙàX®ÕÛI•Î Fò‡Ì÷›žª.•å‹,ïOc‚Ãl¢Àß¾œÓª‡8'#š8QÛŠ´äÒ}ê%£ÉÛ¤ËáoìÑú2…Ñ›¤qÛµ÷j(Dׂå»ÑŽ÷׋€ãPîSóÖˆr½Ù_º¾°ñ¼ÕÂÏKøCሂæí•M†Lp»'é[HyáÕ!Èè¾6U´õúë[viàa8Я¼„QìÑO pij'‘8':á–?¿ëö·ëb€óªÄؽ‡"hÏmœÏQÞ¼—+A’zyL1YóRf¾L§÷v…§Î¯×E>²ÑT%ÐÇRÚ÷Žé M|7=¡ãnêCK‘‡˜Óvñ8¯û½IùÔ/ÐkÇWgh ^õ’¦Yª yÄÎL’å¼É úîNàbiļ#é ô¤ÿ•¢¤2h¥ÈŒ*£³!½ðÓW:åfJê’2þD¡ÿ.‚“Åniåê’h£2Ý R+û…dÇŒFȾí+`Oæ R&{HÁÐ!ôÉζՓVi¨ÒLæÝl&óɳ¤µ·Ì‰ËNÍk¦>‰-‰FÉ{̘Q…ÏQ¾b]×ÛóX?Ò#,ýª´‘~ü­•§›( €G¹ ¿}«vYŽéGí±”aõµq´iŒNi^‘o VSÛ%ãö•øò!²ë€öm£}ˆóQ7ŠXÞGŸ.?§&J֫ӣʱlj3ÖfŸ·QÌ{$ㄇhú”~Õ“LöÍ0J›ð Íé£qŸ³Ý³µ'"€ØAmû:…Œ‹IŬÚÒ]û…èʵi\õîô‰|z7»ØbZQ¡"¯M½¦ÞpžÅŽ,ÖýðPÓ™ø¼£V{Í-§¶ú8AçF·ßÏ0ŸÖT“ëÈì½NQtßÙûÍ”¾žšâ¤þ×”ñ™y¸$‰°p)ä¶ÊKõê°¥™À åŒnŽÖ4Å4ïê2K$!M£˜N[M Ë~ÿ2M¼'f*@Õ¥bÃTð—›1,èc¦þerZëÉö~pHÅÇc÷tÎÉ=wõ –-h‰ÈO»XO¶‡1RêèO>¶S 36¼ ß-'í“néúØ'^çrHÛ$&×ëø¿`åèŽd´Ïß°‰H}N8ê÷B¼´ÎÔë±_rê¶q[>î+ i¦m.ãõÇ)F?‘CóZ’Ì^¶ƒ·Ëq•"Ë~þ=½>èê°Aýšî[f|8çšXË eÊÂÌ€ûIb¼°RŽ7²•ôˆû¾7ü½6¶÷Ù² læ& ZbàúÕ"„ØŒ­0ô×AË 6†À¹A Y2i/-Éì‡ú¿ïë‹-`1Gþ=Á¸ÔtçeNBïÛ÷¹ñç:D ¥í¥ %ëáoÀcgŒ!'Dw(‹[x ÍãV+ ¥md°®hÐDLK ÿÐŽ¶úËAÿæ2hS+ +~È ÏóýR~mÀZ¬8[0®Wð¤"b­ëuf&¥BtØ‹¾ ÷ÇëÆPx’`ùˆÍûluWLÃO*'•W‚u@3êªôúCò¦Ÿa‹Î‰øä߆–@Ú®ìÌDb7g?ºG:ô·ŠN™E˜H›œ’CDÊ” 'AÖIhæ¸HÜ© ñfËGj65Rª[rðp=›0„ˆ*£BŸŒ”2stÇz ­–ÞBíëÓΊ(žèzñ&¯Îc©ijE¥M™Šu—$µþê.f9±ÝwæË~S!“ëOÚ^V>„|ÍÑÞwŽh?:®@±Gìzÿµ:+fÞ#ŽÝùL´ñoÀx«…W4¢ÅCíó·=Žþ‹[bÛ‚¾ Ç1mg-—ûsy!/©¹ùÁ §?±"©IçƒÅV•âg‹cnyˆGÊàÐäbÛ*µ’úQ<ÑcpƒX ²·€,ŠыÚ$ø‰{ë¡é±óñÆÌ~I„Êç&ŽÎœlÈëÇæRí ‰­¸ˆMJáï kêÅÝØÜæç–K K}z¡I9cHŒÍ ‚ä)$È®ëséò£Ñ #1¼ÐØ ‹KÕ8Õ½ú¾m•Ï2ÅÄL <¼'úMÖàâãQNŒu>“bšÆÚrGœàXÎçûäÙzïR éýÂr¹J2‹Ž¿%ÿënëË¥ó…v,ËýIØ_"JŒßmw-}E’<JµMß¶”~ä\©WÝ>¼¡8êˆsË¿êMžd³Võ@2åëEXG<ø¡$žÛžT’]ÑO4ð’räýI–Rî¯t{¼ä„÷ú»‘Ñ7Âo}°èNç-ÀAúܲ‡±f³}Ƙèκä£l2Ó²iI7F3 -Jó†ÅN$cÌå=å;š9rÿ²t˜~ëeÎ//ˆ$Þ¤åÛ"¶•Ðe³¥ÉQMð} SëzfTSÿfÖðÔ ù$†ÅWÑåµ9N5êk˺C¾ 8¿ÜKé™ü{!˜¦ðä*z†vîhl¾÷$ø—ý}x±‹Ð¨ó†ÃÇ|w#á{Îï³äÑ’S3Ž5¯Þø++Üž”÷èîWrÑG5i‡Hzà¡æÕùùâbí~>Ù¸ìÊÎ2S})™êiÀ×é*sxn7âßhŸ=é-’i§«†·iÀ9þ-Fyü0-rŒÿ ˜óƒ½-J‰ýÂv'ðhe€µûã¿ÑD*h+x ÉfÔ$þ`W) }¦a|‘•³[¾Ûl»Ì׺ÅòšyRŠ™‘ÊXf΋a›7,Ý—¨Â›©ñ9éÂL:+œbÛ Æ8‰p'4H 45u„S÷¥v‚6"Û´GZ·=¬\ß•isŸ4%_ºO›Ûü€¿_ò»^MŒÏRÅSv¼ilqXYd5æÆ¡G¡†ë6×ϱ:+â´Õ!DËLÕÃwukª4éÁ§¾ïĬ*¢ÿ&ò@/þñGNž½ÄháÐs°x¬Ó_k˜“›°ŸX„XIá2I$”Jº˜A o%¾ˆ?)íñ¾J‹°H0ÇÑÚ¸ëc§Ý2›KÒ¥ a ¹OÖ.™à*|'RÆ=n›‹­”–T0«,EõÇ!÷…‘‚ 59ꥒÝgDb Åsøûz&4¨-³ì‘SüM’£îBu1‹GÆ`¸v|rÆ‚‡'÷cNn«É“´ñŠÊÖ)`òwY–莒 Xq‘Q•,ØØ7œâ·þ’8$7Î%.Ëé«_² ÀóWy:i ¨Ÿ¯ˆNê7ÇOúzß« 7_»Àˆx#0Òÿ@c˜ö(¹NÿÄï1rr=r ¢k¯A·Š[BedäÎÝzüE¹¨X5K®gàWª·š)Ž]?äMCXnÀpVsqøš®ÀŃÇÙ¢ºá(ÂJû¹Ü}_&ö2µGÁгÍ4/ý¬(šÕtLÔƒdvìÊ™îoNù Üx½Ç˜^›i[ÿ&Ô0'Á¤ãáX]Œ¦ðÑHÁÉ-ñF—(m°œ€QA3lÉÄfZ\×§2Ñã’ž ‚¡yw/¿…·N0ûó/ß__ïIîlFÅC¯û¡Ú^ôs‡ø@æÏÉ ê\'ZWAD>OÅØ¤šæºÜËÙ2ÌÛV±¾,­-Çþ1Kqm¢šTø;º–«¡ÂK7½s> hëE¦~W ¥A·H"oMž\|-/øu<£‡,5úêáŠfrl´a£¾}¸˜I«‡wþ€iŸäÈ;=~7 Â²JÜBeŽÆ23jUâNÕ°ûÌìÜxæÅžU°èª¤rã¿ ®n/4f^P¥îL]-ƒ‹XÅ{cúƒÀ¿Ê¤úƒQÓºr/Vœ¦&é9åbjX˜ØDØÏJ´d‘¹èÈ./Ûº¸ˆÐB(·pÃ'°'ÌÊØ ÁŠø««8¬É.»ñjë‹€@«$ZŸºöÛÎñ=Ž5â©¿ Î TûÈ?õ‰U@jmY†™Ž>ˆ–Î(ÖåØYÄK4ÓìÁCŽ!k»×Q¼ü+9‹?ƒ3›ÑøÖßRÁßB`ìÒÇ‹´v³”úia­g ’ðò½—BU®aÍR8üÕHÕÓóbYí_E§_­‚¥½P}5Ò…9üˆ-ê Œ3‚ä63Å0!i°§ªiÏÅ8Ì/SXã5qE§>``U=ÓtgdG^‡&\×7Õ%Ä^á •†!ÅçÒÞÝ^¼·éöMY:8‚ú-Ëëçæî=ù•88Û¿û«þÑ©C† ¼;P½U±›Ô\\ÎÅÕ¿’,ÇÅA‚‹u“&Ô‡L—ÓóïÆ#Kã±äx ˆíô·ªÕŒ/Ö¦ÂÍõ÷‘裧`a1mlýbôóC¡GjÈä2núëj¡MæßÂõRJÉ4†È³©qóD±ÕêŠ"mU± c>lïÕÛ0%«o6›i¬"²ÙnŸù¯ˆOúÝ?T4ÄïcþÜí{DD¶ís¤Ñ‹YþËb'·~ÒØ´6a²~eŠa:O„ÿ$Ì÷Œ9¤•¥™÷áÓ%x}éœ_[½YßCˆ”O¥ˆéFkp?dW­>«¹N4 nìXyηéBCè^ß3âxžYXèu|Ú² cŒIëHþ¹•èµâür€t ࣧáÏÖ¾X‘+=°436ïä¿þÓTN:a™râ«2‹Jü0cÛOk ð–á¯x€Ù±t‘~5„ï—:…ÕÙ D¦²IëTx'ÍWøÅþÕèwÁ»d='ÇfÿÆÕØqcë­›ÀÐvщ:èeâbMGÖ‘눦6¸kŠÖ± ÒD)30ÏåòPÍÉwÉ×Q¦Zêu¥¿ò¡¤H`N^3ýÔþ-íjD’2`à²ÔÆ›ÕSxpQÝ`vâ‚ôD?™ŒÍ£–54Š¿çPH;÷ÕoÀÙ‹¬¾÷õûU5r!Z-Öv}%4FçXð\_¢ãxéÐÚÓ%PkãüáMÃêÉ“·äe13ëmu;lîìßæ¢sDl$MXØ¢(¸xCîaÈšF<ì‡ÛÉÌĩжCœ d½ò_¤É€ž'6þ\ú¯nnµÔºÐüë“pöŠÔœžV€Åôy_Œ·r¯ÅÍSí*(…YÒ:/=)$iižUèeSÙÙ°ÚVñ\ó¥Og|¸a€ý˜ëÛ›Ÿ+úÝ9qü%´ÿv¼’"•¨FX6ÜfÑ‘ê%à â£anÀ~ô;BÀý›Š¯ì:‰ºR‹>Æÿ}=¯*Âeåa´û×ps¦™– 9.ªÔ¥¹zv8t½Ä’ÎÀ²UÀ·«_·tƘ·z•ýè¹@Vs\\y‘YLa%o|ý9t>¤»ˆ+^ÊŠY ix=Bõ»eÀlÅGTnÿkfÛQ¿Ž ç|é#ÄØû7QŒª®~0Åîþ Bý=Ný\l©½©_ñ—e`ïÉ$†p1L¾ºb5ܳ¦“ß @ó._ÎUt¤îŽ™y&!\‘© $4Eì ËÛ€¯¯ï†Y󷆯qN &ùšÔ‹eB½[¢Ý>" ÒáØ¥ô¼U Š˜×Oà>½Ä¢:ˆ~~ÎÞùdÎc¥ê0=[m¼^] ?qãËË“%U$ÓQ#–Í=·ˆöüÄ%D`ˆ[¼q(F:àÄÀS?4ìuôfc¥Ó#—ä{ŽÑ6“>i¡’s3õð¨BW)æ)í T.>ʹq´LNåö:á<¸OøÆ^̖ÖŒFp‡NÑJxu)Gë2vЩBÀÅÜ‚\m”nPEsÛ[ôkÁ ?o›™h)ò`Š WJíD¾T28F{±ÎådçB”&eþ:sŽ¬Ë›à‹?ŠòŽß@HhþxÌÁØþº>xBt¬0M#¡•†ÉY›̘y/éÈðØxË­ á8I«PêÊ´Ü7NTò¯qðÑ[è>Ç×áûWÑõ;ç»Cfýëò¸ªÏFÏÇå¬õ»^(OÓ.\]é7·Ï}|¿êñÇI ’µé4õ_?í«Ó"n¾&¤<=¦ ¸÷ÇÞÏ„ °¢TµZûo.1ceʓڙJÏ™¾I-ýÛiT'n*ªÓV4ÉP|í¿rŠÍ‡~¢BÅ™À¥NŸ;9ÛÛžÞCó›ù¿/RY!yÅXvØ?Тߜ÷ÖØ~þ4$¡ÍÜC¥rCÔ©å§T‚Ä ãëŠa ÅÆØäóÁî/æoçÕcŽÃÿGç‘ä(DÑ«°gwKŒpÂ{ØáNXaN?ôDÌb"Z­.AVþÿPV&j±ÉXùejqŒV‹ EWvù•’ê £è‡g÷¼©ÔüÈ^f‘°½ _ÈÄýÈiúÞgâ¦46éE#€Ä _ÿû7´ðUX–ËvEx<Öf‰ëbúÜ€Y›?w.…ºîÈDk?Jûþ{%Çjp¦M°‹åÍ7 …°,S²D‚ŸÑÅùmÅ–¾¼+ÉÔžâ”òÙz‘ÒLŽW¯‚=£î ²&tÆÇ¸ÃÀº§É9q³JÀŽ­:ª‘ã÷˜ÝDåÕ:mzUÍŸs&ó{ÑçÅ¡&jùëÌ ËŠ²Ãßtúû›¹±«7[BØÜ˜4’ÕB t™’¯7·.VS¢uJÄ÷ýâ=qp­`ŒLDwZÉå4p‚¿{ÍÙ9CFX1•‘ª¥RµxÑC?3çÇ€¿„ñOd÷ÞE—VY¬•{oêò>•]í+tmLûµW¿–øSÎñ×1£΀ôÑ|–|ÞD§m^hWöÅ!Á«‰ðâòÉs]ic&q3'WMÅ&øFý—.‡ævþG³v9í!,ðµÇ€Ð°£Ýwñ2SúDŒj–(4‚ƒ}Èmj—}8Ö‡“;/kß¼™&tòO6¿Øq°ë¨¹m¼"+Î&õ0*Á­—¶ÊÖHU‡1Q S¤Ëm!Tá³ä¹T™ÎuŽ?†kåÊAw4 þš% 5Å̯húK?Ø7Ôà™A@Üßȹ¬X‹-ø0"cˬ›¦Oc;[é“è‘ÑÅ=;ø0#Iì­´=!¾x€>~ãîö.ßøØ˜|"´d ;¨ƒÍóTŒ‘RÔùÞ¢·ªédË%‡]Ò†„ö{ C×´”¾A'}'uC7²µ³Ð‚X*ÅÂé€Ð™K3¥¬ê7ÄÀÛ¦ÔÙ–wâs’D¦l´¤Ù»üÀÞY\ˆÈ’e"p– ÌŽÁrÚÕ×i48„_™âŒK8²aÍ•2¥´|˜DÉ—bhŒˆ#>¸5$züj³ú!Á7Ñc ™¯;Jþ4÷Ã…©s%®¾šÜôŒ½Ò"_†)>ÇðõûØL~§ñöÞà_KäíÀ«¶è¾}YÊ£@ÉÌÔߣ.€G0‹à”$Äj7OŽîœlÔúôq]¸[ŒÛÃÃÕIå¥O–ÁëÍayú$!ú<³µ>O€Ïd‹­*·j3t²®õ†é¡À€•¥î»àn È:u<‡ç|m¼ÁXÂ’©BC œt®#@l¼¯•V7iköˆi.º)c$çË(R9v³9¼‚­³a“z5ßCõGð·— kÒRþHÌÉŠâ?l6®§°+W× ±e3«ga¸¡:Õ>[NnÖÞ›ÀÉ 'NуwÙOs*H8NÄg$±/@[( Î ôVªQ(Oêï¼´õwÐù±:šô±T‰äCQŸp´}-Í±Ê c+YÞ½\;xem•òyï»L*ñ×®—AåÒM£}%¯Q¡?»û­¯$^M.}5(oÓßcC:Xøk“œÄâׇz½¯¹[T±K&Æ•g0“+£tÏ ÛG´†«FꯇFƒ'‚ÞûVì¢Ký×kCn«KSæ°RtAÊŸ’¸iE¦ kçêAa6è„{Q’¥Æ>oüR7;­¿6™,. IXnVƒ¨+òõa'_¨ýå †GQ¢Œ¼úÝ£«æh%m^ºý ¿›0¹èú¼h.™6Q7)b‘ziô£™bEÇ\Uz2ÿ:[Ï줹oóίDz¹æ¼¦ó†Ìh¡ýpÔ ðR-‡ŸÇxœ#Œ§øN[ëxK×ö_@t£–×[ù‰ôòÞ.œ[™Òª¤|¬Ø'£KsO@ÈÛ°\M‰o­m$×x4¹!×xÊ¥Ó{ßÇ›¨—ïêx‚_ÎßdXƒ}õ®R_ßÛàʉ8,ñŽ.±©ô¬RJùƒ rC‹ §½³ëtô¶ØCÆ>ˆ@è¯ÔÁØg¯AÕ¤h`h@nm{ñ`¾^0¸ ^lPF ˆ1[X¹|f›×}Ì)€v¶¯Äˆ¦5õ ØãP²®Ša8TÐ?™…5àWÊof­èÕ€%; ¥úÂdÏH¾¦o„óÞPÃ4&›¨¦M;¡.ò¯ýè0=ÐÓBÕßeƒê¿¹{ù¦Òw½ñRgŒWzæ½ßOÔ\Ì ÕqÄ]Ó®f¬é]¢Üv ‹)[Kù8ëG4ŠÓÂP^‡æ4ƒUÞ̃‰¬Ì5ù@Œ’ÚàÀÁ›Þ-Å{$gé\`(œBœO qZxÏ“·º¤5eàð¼6€Ö¨?3…ëaµÏ61”ü7i9/#úŒ® 4Á­ãn¢™Ž§ÐcgrÔݾœð‡²¬f`Á—~±aCýïõ ØFJÉT¶'Œþæƒ ]ê®6¾Úû8_;ÛTG6}ŽGAoÖ9̯*vm—:]çtGë¦Ö»T6jC>øuMyÆ2AF[µ¾r}X¡…èÞN¹â–ó±TßÍ' ˜€:ÓOy °1SÑñÊ2q"ÁMJÕÖ̢ٿ㪟ú‡9MÄéç=ÿ>€Ýj3àÙ¹ö&GV•Ô” Y:;ô{L;vRÔaã*^±Æýwû†J¬öÿ:±F« fã‘æSª¸¦@ü’/‡%².„ì/ýý‡ü¬ˆFØ9zžëÒ·°‰ˆ[|Ø×çò°ßpÐ#×,Bh0°Oþò7öétàc¸å@Ð&ý¢n¦\Yü rJ)Ð(Ù&^-æˆ@˜ìúz?¿×©ÏÇû«ËüˆÈ) 4ôï##µÑr§Pºøý±…4ÎíÔzHä>%ãß¼9þÈÇ’ÙæNšÒl¯RS²0Øœ»£å¶MÅ¡êò T§7•Þ{pq„™WÒy…ã{/ü´ú^Çd0vëÁ†gey„öø×­“¼$À½æS²2†ƒ, =j°ÆÔ¯ÍgÕcé’üûø1,/혆mÊÖ•TÚþ†“>³/±¦™miôúH‚¬¿>­ÂÂw®òìg½àrpO7ÉFQ‡ÄÓÜ^ˆ€öD0ùñèø«ÁX8cMŸŒü8ƒ¤Œ>pûq!ÝîxRÈÁ*€ÏK0Ùþ~¥¡ñË7Þ/R¢5•–„o†-·_Š%0ˆ´,‰!‹ÛVC'ßH™÷¹JÐ!¶Ü¿7u¹ÜŽ:øá_©ëíZöèqÌ3ÝŽ‹¨îïÇ»oÇþ¼Þw "cM#}£_Ú¶(X.šÆdÀ‰bÞÏ_PÉxõºYt#±ÞMQTë³ü¹$MI”¬¡/¾,¬¯æ‹Þ˜Ñ•Õ>ú«¤œ‚š®6;Ò )Å(Õ]ï=ïDsPæ×#¼bÎëË¡3„ëá6pÑ_ƒ w5m둉Y?öï°ûïU9‘=5ATÖãÓ´Á“Ô4'ý1Km“ò:z„ç<ëŒ_úìU¥$«@ ” ªj+üëžîsM›gŽsà.ŸxP†“†j7wÔº¨ÖzAÑ[ó•âhª¡RZâ}º’ÁŒ+ÔDqcßà”®Óåõ­‘јí -´GiRýád)Hû>Á­nÊHkºž'§£I) Ÿ’ ÌÐ0©rN¤*¥Pòw5Ð×.ø±ðI>rL:þ¦?d—ÿjµ›•—b X£3î11Ÿ¬ñ¬DÉÊ};+Šú$„ øe¶—b¼VBˆlkcÝ“t_Kÿ‚Qáu‰Î¬®·Ÿ¥|Ù¨‘µ”)RœPl@ý¨žÞ3x¨%RiÅÕ'B¢ÔºTÍë.Ôt_ÖF’…¥¢TF¶aZ¼K}µ8Ò-§öPÈÑOZSÔu:3ÿý€ãìÄð„®üÎJ CAÒ`ƒÁ«ÑBÄjÞuQSs@%¤Î™k¾ëK.ü}ûßc´=^Éu8Sý bñXÒ®®m/-Q ,¯w }Ewü:Ö«~_±B¥µIœ÷‰R6?øì~X$ßèõoLkÔã_¶x‚r”Ϫ/>^'m™ƒè7„µjãŸlï‚Td¥ß[t½¨I>Wã$4Få\ÕB;‹³Å&NÆÎä7äH”Ë] O/ÐV`‹ˆ_ô†²Ïÿ;]h±žu”e:8c²:‰1Ðè«ü;Yd@‡EqŒ2Ä£ýuC âˆÎˆúJ¹»2¼¬îëþ}ƒQÇ tIj[o5mÕÁÍ«(ØÌÐèG }cËÊr±!õÚ6ÈŸxf˜±ð“À•Ê×ó¾(©\ÓEfÂ-({}Ú‚ Ùӷֿǥ¨Â˜irü‹Æœ8+:6Å~5¾˜¨sðr ºÍi±7_1¢eøKöð8Ïs1]x;P—‹È2õ©ŽwâìùHÀLkøf½»ífÄm˜‚ÈzΛŸˆ# o†rOÍ52TËs­¥z¦%Å]Jv‘‘¸±™ê´¾áýGV¢_AŸãÑÍÜXëá€[l ¯‰¶Îô§¢u§– ŠNo>ñ¶óâ7ŒEè~€ô7ûøAP:B²z²Ç|”¼ÄÈheèG{`Õ%ZÿÊ?¾)ó&úâŽa%i· /Vâ í9dÊ×¥23«GÚ~?,@¦ÎÏ#|Óih:ZiÜÁŒkLýdcDåúñ5kÈ¿Ãs±0t]>„»Ööon-)þ´¿%¹›½æ0µ+‡ti8SYNNÎF_:‘És\g{&ßßp…¼œ‹Ùý–s Š˜J?bŸ²¾à%ÍÁá§!6ø£e_§mÌïIï‡k»…•Ço,®|ò}"2‡0° ª%RLÛ·¥+7Œ3üþÍìø¡ru‹nðˆ‘bÑ…ËãmßïÉ¢î›gëG±ÜHª8ØÏÉQ)ì2²á%¿Ôfñ†¹ Xú;× ÒÈbÐDó”}¡ú€Ë0øSíÎë'¨iûÚ“÷ ¤QŒ`&K›—J_ˆd?áÿ£ñ¼XŸ ·¬FHŸ¬ 8W³9x8J<©R©Â¡øðçŠ#ìR6¥Û4ʼnÿ>0ípLomøJñ°sžUÑ2F+o» ¿‡°0ŽƒJYŽºÊMŠ5!Œ"A²±ÄîEoj“Zo¸è½ @ V²&&ó.™nš–÷øˆ®"áˆùáŠLAÈÅS_Ýÿ´[¤tGOòŒÍÅs?<ç‰Ì9uá%±·”>Ôt|fÎ_õ™àn±2tH2übï˜]Êc?t4z°2ƒÛFM·[ØJIfAµ7Fe)²_· °¶fíDœº¹Ô°u«ÒdAŒ@a—‹Â/xKbÂú‘`¸cM¶çâ³Ýc͆Hõ° ²ð`YžÙ؇1ŽßGJoø¼,eÑhš®¸ß×Ùß·¸‰hüKmUPñ2ä, Jñ¢Hõ ÷Oï™i‚~H>¸LÐ…PkM“Í—5ޱý dMgszÐÛ†÷æ%m¯’còˆ–:P°â¡¡•௘W‚Þ³dJ Î;y÷÷¢ttýõ¢–þÛÓ8¦æˆ ñ¢{PYà¶ÝʺóJþüY}7敱û÷ôÄb„˜Ñr8Òq%ÔyLǨ÷'bncÏÞU¯.÷~@z|©È?°@@Šátñ-¾}¸åW§d¦ÌÔ„À* {l†:¥Ùù•~Á†uFØW¾ó÷mÃ_¤ïÇ&qÏkqˆ;¨RãÝ‘’±½“ƒgÿκ@¬Ä]Ž!ì=¡Ã®¨Ðó‰ÖÚ/ l(jY»<ÎìÙ9ëÅ÷Lnƒ–=Œé‹€XÒeYF%­Ì™^Êçü´¤ßëy͇¡¿í1âÜâÃÇl‡¾¥¡ùŽÈæÅ¶ßÉjZÖÁ„•²)Ü-ôȘ/záQVw䋹é6$õyÍWb¼öa€ôkC“5àúƒÝbÿˆ©€Mÿ–VÖt—Æ!x$¿Ò¼¯/½½;N±^ˆÏ¦1uÉGb/XºV ¡¹Ö³¶äFT}î'ãfˆúºß ŸŠ¶Ísƒg¦%ÒQáò“g r{é“M›åYg{hò#óMÚnøÿ‚SÄ/ÔÔ # ë1Íìøb¤Ò­àUV@Õ=HËþuêFÒÖÏb‘L¾Õ½ÒnÀi€Üe¢&p†éóåÅë~H9?åµÉó¥ÐèáßPÍ8wÍe»‚ÿª†Zá¹ñÂ$xPuï>ê{ýšÍ”Þ‰Å!¦,zIšÝl=JÑI’w÷éK|ï%ÿS6:úF†X.pž%ßå!# ôó¶2=_Lþùõêø• ¯îÌŽ€9ŒÚ‚;vS8¯%­‚¤èeÜk‘ÚÚU Iœ¾z ÓuŠ`­¬ oâÊr7Àű¡íy ýq¼ÓQ:÷÷®†æe·˜¢œó+!ÜJµßßuœx>¾Sâ)WPËôýRaÜí;îú8÷ñǾànÊÚ"٥ԪУ}ôÖ}n‘¸cû¸šüïâE³Æ‡à¸T7 p\†‘?·Èû>ïÁÊgYX¶ªZbYôJ“lüª\ýÈÎBø"Ñ¢}wü¯i ²ƒÜõ–€ö\«ïø¯_w/a+VWÿ‡KBZDb®ÊŠB¥†[h¾•&·Ã&…ÅÜ[7¾VKD”"7xU*ÀÚKšp†z¾5õZêv¥ã ä,ê±™i°©4‘_ͤÎ×4sÉvùÇF%þ#È-…ÏÓS(ð ùÒž”õâ÷Å´Fó¿WÚ¬A:«ß>LlpîPÌ~Ãí`Ê) ²¬„Óº2Óp.ð_å“Uû>5v%Íì?¦ŸÂ1”öZíU–z‰ÂgŸZý­}ÞÙàByE.ºVÿCZŒ_Ê$$/‘mB-ßÉÅ äG“p§KèWRõ]î_ê÷åœõ÷4•Õ4¤®4[_ù4ª³tçЩ¬×ZÆ!¬ù÷_ÏŸ˜QÀ1‘Ù)F‚ün-_Yr—üÊëa‚ :9t¤­ƒKôÛ§ß7|ò&‡ݢ圚~+dž7y1hHBhƒÊ ÔÏßõbká[€é_}Äî‰{ñk)¦9ðÿÅ`—ûfܱ„äe˜ds0oC7_0`}ÿo6Þ$<|©mÅÐM‡[’¸IÀKámU,×6õ!£Kö%%(‚Ùû¯RåHxqrœ t%‘–å[»$B¯™¿§äóväüK—­ˆ„7ÇRÍÖB7¶b¸“]?+´p–·‰´Ï°œ´†cm·¿ÂþŠ€ôèÔŠØŸ$6´?÷s(úKøòY&ŸÎÛO‹ßVHž´Ð_cå¿YÂ<Ä Š£©+!MW ¯š`r¨¼Ïï²|â7þ¹í¨«¥|¹Wû®Yi .tÌ|Ýá9o/7z‰Bœ DΟÕ%êv ìD'ÞM.Û¨_ßZ&`ò]å/í1[–½F|ÂÕ¦±ù”žì~öõ@*È(6jBÒÏfk‚È߈XŒœ{9Ù☠€y[2Ê›|÷KaýkXÝÑ#…3U–Æ ÅC33 %en3„óÐöûÔñ¬„½ºè°;d¸èô…2é¹™ò° ÎhÍ‚—3²¿âÄÀÓ%°S~Vw AÓPxþþµYÍ%ßÿ´ˆ}^<ª]¾¸ "jËS›FÞøÁ¨œ€t.nµ‡Î¬íÿ@!{¢ œÉ@ è²ËýŽõ¾æ;¶Pžä<ºŠ}<¼5>?y`õúFõÎc×àqÇàÇ“*P¥Tžçý¶}VË£SïѦvfZëýÅ­^Kö;ÓâæƒFÓš®˜‚r)¹A¯¼ü»kLL÷³ë*øråDþ;­>¢±ÄºÿA˜1n$;§4bIÐå·Ð y‹x\.ý˜ñGKk›’8•`‰R?àc÷ÜŒ…²`u,ߘƒÑ¥‹ZbwjëY¯7MÚ$ºÂT ›£èý"¢?rÁ†–t.ã—Õ ¨5rC–°ãúß>üÓ%DSbÃZâ…‚Ð}S.åM˜y;g²ø°r9£»xY% 7A aºJMW­±X 0¨ú›dÀº¡JmAȉ²tM"»ñŠZÛóv–¡³èK~’L+Æ”«Ø ¿îÅ$QP%ŽâEkqƒ­,§•òý€öC-kŠ’Ÿ¿LW¿ˆ.òÆW‰½_6­$z*‰jµØrí-–¼±·BüJvîQ¸Ú®:óÔd=}¾÷×iSê«“k¦ê¿za/¾¤¬‰6hðЇPŠpà»ùÖåî *ðŸíÿžV/ÌŒŸ”Ð(–K1Q~ÛÅ›ú¯Å”Uý^ùÑ…0@mopbÁÒÒó}>ó:ë£BP{X’ýèi“PYí窎¥TÆÀ î%Ò&bõÑoÁ¶±GF5(ù÷WOsdÅL\é¡ÞŒ^O9P.—¾Sý±oCÓçc!UnXE°v磫(&] ñ½?f`Ƚè*ú_»Ãò=prdF–`:±ðŽN¼š×C@Eät¦Ü¼:ÈÅ{þAks¼ì,“0ko˜ÁTodŠûAM`ûdI _]25è^$Æí!Ûhãaް¢þÂ!ô©ÛØqŒÏ¥~„kò‹+!RS_±i«NFí¢FYVòÀ¼¿ár׫9J EÒ¤Fª UË{œ±rÙ©·©–7~ô ^äX±Šÿ#zÊz0L‡ÀŽlû¸’“+wîÕ¿3bbý]åò“×@~a –bgH¨bªë#P;Xa)(4 ÙÛi×ÓéÙ2p$š!°a½¾‰ý ÙY)t^žAx2­6t’üös% ç@– ¿Ð‘—É;ñëú ­j` ôyüú¬bÿ‰ÌüEoÉ–ÎŒÇÿcðr}ñˆgÜÁÕ¿ñ÷W€$ÓÂ_/W|ΑݔxkEÄ.bu±Fî±ÝY4ûº½â«·ì:!Q;—ÿØÃMνÅÊi\f?n¢ÐßpÑç9muwaiÝ£‚K§÷PÇ¢ÜÞtH„êÞ‹ÂÅÅdëœ×š4zûm×ÏÇÅG*Ï.—Ð+åVò8e7Á«íãÑ9ô¬º¦çð´ØA„‹nÚ÷PÚÓÞ7Kã:»e™lœšn?\}¿f] §T6ìòÀWy«]öxye«w„ u ­}[Ž;—ííœÄÊ‘P' ¬éÉ J?¿üë ½†5I.c‹þsÉä^*ØV5,ý7 }†‹oñBíÒJÓçÍÖÆú5h樭ú¼çÏ*¢o¾½ÒSïÜŸ6lЊÞ /CO>5½pj‹ÙÀº~îlG&)+•·>w(Œ'“º~8LèÙΫSŠkxÿ­@ýÑ£ï}Z9½XÏÂx¬øæ5÷g,hh04Æ=€²ƒáe’BS Q‰týåÿ®t’ÕÍY_‘,?¢{5/Ò>\þõU¿¸ß$†)¶ù¶j˜à;RvÐ e;Y3Ć}lN4›îF+šÄ)— ùZƒB´™°ojÖ7gbhvà:þ2¯»´9¼›o@Õ‰Ÿ Ó±Yà!/.t×û¢(1òèg=s[­:Lß•@Ú_éü˜ÐoûbssX⫟™SäÝÄž®L@_½ŠZrB0O‰Õïen<ûЦý“Ì‹S—ÚÄ9Ͱ‚“cΜ ´°y‰›ÐüúoE±ZpÒÃè§µê”G¦k˜˜ËߊWk`Ö”n¸ÏˆÇ”ÈümÓ[”©Û• JÐyn‡¦¡ùÐòH1¨ ð*~_ú{D€öõ&©ÏJ6$5)´\~¬BîP1:1#V™-@ü3ð\Íu‚›w™% —¯¯)keç‰ìºÐÕÛ½9Ïø5ê’ó\›6¯ÜD$5{Þ{Ù§}CÀX^ ºJúë³0¯cŒ|E4Ö9|¸“ƒý+,‘ÈP I¹¸@/_}pÔ‡›}liI™ÏºŽ(F¼Ý^ÍÃ{Wß"Ë•Jûœlhmâ&꺿•Ú|LJ‚ŠŠìs'÷X>¬w‹"ìÒ÷® ’CNt9*ùFûØ{÷ø*«.gÔ®¥R8ÖÿJJ?–ÝØ#yÖP*ÿ&­<.'°Ô,Ø·“²¹õ3EZ›¤¤è??ÓPõ[½ˆÚö_ðøñµ„¹n–M ÄÏzK!¾˜eƒÊaE„2¶Òoµ—`Ö‘ÛÂ]šÊ/m¤‘•#Ûoª^|çõð2ì÷5Ãú±ÁK ñ®FÃÙÞ(]íd-@ú“{œ»ÄG:Òô·K/è‹ÛîÕˆ7Ÿ=?­Ô—å=þ׌JŸ-:}V4üXÿºómüG0,ø+'&ÒÒ5*sgj2íïËVXg%s¦Þ¾ZüBÜ|´Že¬RÏì9}t AQJû G²ÐPów5èB.<5 ó•>Jq?»jø\|H!‘hEŠoy/Ú­î¤#™Ç_µP—ÜDXè[à>æ‹Ûôó( °Ò4úŽŠæùФ°½±„¬O6šC]T’A5ÕbÇ=Ç”˜C¸_ ÂËD«ààmìú„‹Í–Óýׇe­ñèÊ_‹½åf÷M+ƒ«âèuþrÖ“…)?·:"avÃY­`ųï{¼{Å«ùyîx6¦=Ð:Ì7 ŽàªaØ2óМ2_äÌLN³lÊ ·:ß]>xVË›ÒuPŽT°úÎ;«5%óâ^Õ ¬i¬j–ILØý÷¥ÍþóÁ¤´5d§.i1ccè寠yZ³p ]\ÉjPÖ´ˆÀ ZÊ…íß#;Ö ;Ãá÷>_m¿/N^îö#é<°Ö}¥8Þ»kM§µJ![Ožû¨©»¡©â£?þd •PiË䯨š¹ÀFxWb0oÕ.rÒVÁ¯×“3©¹ú=ÐfâOõNßï qu²#¯ÏËIÙ·µmîPF±œ%¥_†O&ðbäHzãýF)È­ñþß þŲžq†-º[§æÅÎ{’²¨;}!éxŽ=“X¼†—äm p=®†æ…¦—á't°Ò`NQúW”XlvœŒlð»”"¤ÂùB^½ný™Š1–Ùóq”ãR )V^Û w€ÖIFÜí\Ÿe—ÖתÍöç{'~Û“´vÊ¿ü¤›:F¾fè¬töîøxæiï‡Æ×´Q¸r®KRJOEé«&/©µA91°¯˜×}ŲgÉnÚ^0?žJºúë[ 裼lŒ5·Á‚ëù +øÆÀÝ Î•(ÅÖqã :Æ¥L›XÕ á½bæø]õBøÕuˆnß÷ÔGKÅN½õÛÔæ’ûѪ5ËAmx…*¥j‡†üð™šÌÅ^¿® ‘Ô) ¡™õõ³õz3šR Æ ä/§/½ÜòÕg;ÔºBJ#P¿—&OD˜ðy=ߤ¥ëqV¦eü¯M T7äøýyUŸz¨[F©*)¡˜ìÓº…Žyô2éø§& F“.Û;üKY “”KôñÁŒ×yþ¢–O„À½üžš‰²™Ô"H‹MmÞXŸõàZ癕BL9ζœÞ¦otj°i´É³Ùo'+ÇLZ·'8mßQ¥ìÀ§¤’M3ÙµÄÍi£ù”6 [<×WøµIáúg}ÿü¥¶à@öÇìZ¹[ŒzaÛ(Rº3¶{ë–d—UÆW¬#L ÝRF†Ó—`’höJê[Z|uèÕCéðÀJw™ègªRªãŠïZæ­š¡˜Ga¸IŽŒ«he¤8z Šè‚¶»’VÆÕ´†ð±ºMõbþ ®Îß´,GŽcÓcZU¼¿ó¯ñ#ù:‡DkÖ"Òy¾þTµÿæ|Ü`?zë‚ñýgÝèoVM°–$ÚÖÏq˜!½)‘8ŠX«ÿ­Ý8J¹ý„¾Æ_“\u;¼mª´¥s]ð¶úðt´®{ðŽŠÑÚ í)¯÷¥ü@§~l‰‚•j±mÔ3ˆ<®xG¡t‡Ñgˆ´f(àöüà‚µ"¾ÏyI ôµ×lgȆ=œãªšVš,MD,¾•ß§fŠÈ'{¯ÜgÄI{ì_ˆ7ƒï$7܃ˆ£Ž¡[‘ªÃ¶9ÁÿU‘±õ×­ ×±5²Ê=2×r†îEº§K¦B NŸÞ£Ó—ñ AñQpÏuƒÜt î^è·á"RçëÆƒv!£/×qæÖö‡j’å·óõ2¬Oº_%äî‘  X ôÓKàãúaÁ€'9¿HH›£è§…‚æ/ãÑov¾Ö:$.!hùf‰&Ó%‰£QiA¼³o«£`I›CH3·ìPò‹%·C+:˜O^Cdâ$pWÜÏQ[‹#. IlÈêâuÔtjËU»GcàQýPˆfTE|–Ð/9Êo¶â¡?w;€ó%—Zq0 ë6u¹á¨s0‚Œìtü’PaÏôåCé‹FzkÄÔvÅæ'Ûs¤-ß³[øtúÝp>€¨ÛõêN¯øúcwÃëýݘ^Kú,+D>µA2ߣ'ûJb*xqÃm$¿Ï %/£“ùùŸ³Ž^“HyTòÀÙº`°“[çå¸6Ÿ»sqG*v³óaýPVÈU‰Ù‘;GA¬Æ|ªjƒþ¶]Ÿ±^ì-áZ™wlÇa%À2„@ÙÉ-z/KV•¦x¨P=¦}¿šu5 jíí,;؃þ«­²bÀ•eÊ£cM;Fª’‡—ݲ ¾Qû“Ϲ¡×4‰ÎRöhçèZ^†íoP‚áaõm°[ª>HÓ¼²‡RŸ€&¡ƒãt£› lµÍ}cK™éÄtCl¼7ÔÓô£¸õ{o&J‘*–Âe/fû eÉ‘ÞRBØX±}¤:7í°þ¸sÆÙ¶Pà¾Hß¶ n¨¤%h›&¯71ØÎ³/?˜5^4zB‘jÞo0îÕ}[+Kš•ðóø9r¦Ù“BPbžk@;„aé–úQ;ÄÂ7õ¡º„£¯ôÇ>ñœüû˜ÛÂYòÒ‰•Šëûï4V…Ñ { ê}gE#Nb—v€ÚJ[÷9ËC eªâþ¥Eb5®*/ß\¢5ê é™ÞÉpwv°t“Á\è$„ø«x­þ7ž#¯šý¯iH4½g;ÛøÆl”}§N8=A æ¦*àü¾¸y)Æ0øàh<ä<žá¬>WŒ•8¶êÞ_¶¦`²õE0ÂÊOº…e^üŸmÅï}Œ’ |Húèìˤ>ØÄ\œOYÏætöì Î}‰Ç›q,ÌÁýÅ€7¿ÊÏãÈ®´¤¤µq3‘î\]{þŒ­´~"nv êuÕõÙB)ë²2kêÚ¤° Ü(*Œú;ÅvÔí,*. ÂžñY6m|>*R˶l¡Ã½ªy\ìâ0ÅÚ2Þ’%'½XªÅNÔØ=*oÑlãPûyÆý2ÑuQêœl³v÷Òãþ|ƒXx•Îq|<,õ‘Ž$¨ 1â»9þrc—€Ó/~*ˆ} ëC]°øö ¦{MX?ÀÂK9jüÚt–!üømI½ÛŽ©YÉþ3j Ç=µú53 Þ쑬¨pRfÖMÝa§$¬§i,mÀ5bô颞º"µj N²¡A{…|”#ƒ¼ 6ãBH å‘-’з„V’®‚ÖKh€žì˜sqLÕLôUªoù-G’¸—õì´t¦ßñNEœ&ì‡dHìYa ï‚]ezh£ä±1Æb´C¿å³'«¿¾Aò•&ÝŃmû‰ Bä¦ÿHÖ¹é Q0þ¶81¥Ò”·‚}ïɉŸ`Yw§³=ƒFYmÊ#6 DÜìèP»CþfÊ+Méá(Gï-YP|èós™UýÇÑyì8 ôW¸s 8’sÎÜȘd“LøúeVZi¤‘ÇkCWÕ{vwUŸödÁèç–šTfùʺ)6þ¶ñUö°udc¡LE$2Ï`ÑœDtÓeŒPù”—=pY+¹ ¾0r“K|÷7å ¢èÊ*g Ç­È„' yEñÜ‚—6pðYM@`pâ«SË@–TÛ¥Æ7qS­8öüºìëHNŸîä'ù× Stƒ;ÃHå·Ðõ×–© rKÒ#Eª/2T¯û¡‹:wµOMW÷•bÝ’8âà 1þ<®¬'“Ùòý€l%Øý±ÆÛ(sΡ$ 1³ìë}û\˜Lã~{Tr w`Õ £Xú@+¦`Ù#Æ1\xt•ëRÔ?sß×Ãò5aXº”&UଭÇÀA¬›®EÑÖEHçÓй[âÚñ¡\¾˜ÃüÚÛ…Î[Úã¤Ôeú‚iêGhJ-ÜGÈyŦ™ÆȃmE\ÒvÎÃêÑé>¤ÇK«‰ª…‘­åI¡Àîæž‚é?ù\òx[žº¶o‘͵!݃“ÿºá‚HðoŒß{hð™4™9E‘iÂÄ(šg¿9ÁøüDùš@óæ™ò\Ê“7ý¼@¼7%ŸIÇ´¿£«Btä}l]b•÷!¥¹°ô}\ëÑŠ<3Þp‰j©åãéˆZŠ‹cdH:½ªq—Kú‚¥–gÕ¬¿’8›ÎÚ$ûK¤wîVÜ‚Ew:ﻬeÿëʪ.„=:…L÷ÝÜ@›ß¾Ð›X^áfXQÎE¸÷õóé%¤®¯¢m?Xž¶vüízB¿{½¶Ì]¸¥=è ïÈ×2 ÈÖûtpì—ü>nQ–µ'ôS;ÛøzM–zq¦õðx@øå'<ˆ×§õúÈmàó–EáTP«æmnX´â-¿ s2|øEá©ý£Ð,³_2‘ÆPÏÃøSzrQoÿ'¯ïÎ4I<Ý'÷<@ ·^þ”õãCͳîq¥.ÎòIJžcwcCc0ux˜Æ¸DŒh0iú–DEï Õáˆ9>ª:öuž»ÂAaZRË{W“—›ƒJHÒvRï'l§Ì<9ÿ •0KAÃ|ðÙHúRÕ¶àèß– sÇYîëRL‰Ôy‡÷£±™Å²ƒÁùÁº?·¯>ø½mqT©"÷³bqŽr¿Òv¬ùJ¸!ÁÇ/²xÞx–H«ÑHV=V¥ãe˜G\õ,˜T#§†ŸÉ êFyïßèb\6¤i‡Ÿ…5Glqî[X¤e#¿Ä\Åž¦üÌ…‡A\ÿš·è—ÃÞu°áLAÅI8ôŠZÀÒ÷hsPD>È ,}.ç6ã[Ç5¥³Ig÷Ì4~m¸Y*ØTì).&ÿ¥©¯%á’F,Ö¡Ò]Ârÿ9Ò°ðe=6ÓVPcB‹\2[¢×|e’=Ë%oÌ9«ÝÝÖ« 6+: _ Ë3þzöf3Š@¥×g±t°cŸ¤²üúìÌïànßc¿ñ3GU¤±Þ'‰’1˜˜jå‡8cé<ògyëß! H£WÐ$‚|ïe–[qècÁs‘ÞŒ—¶JòØRcð%bÌ~â0¯e†¶n»ª­4CmxŸÓî¯L¸}ü4÷‰m`º}-¿÷vÐ@®“7 r§òÛqËÖëyþ¿ƒðÔXܼ¹ñê^©4‘5ãó“†63'ùGšüz£¾ iß ©r­7¬ûEuÔ =Æ$²b9ÉG§ê×c®|ðê÷\Æì©Ëø˜‡l‡`ôp×Í-»ûþÑ&hùS¶ .¢üJدëúIúZT‚øèGýcJ)A…>A´ï,t­5Í¡¡Ê0™` óεgAq›fWžoÀV)$¿õ>i7–Õ7êª84—꜋¹ˆ#h¹±ñKˈ0ç‡L#è³·¨p\¢hw+}×0é¹sè´qIœx¿ÁôÔ%ÒàÚS÷Æó|U-R#JˆP8(-¥M®³ÕªUj%´yô(Œ¯V¨8ï Ã(ªù ˆ«€G©ë«øw”ÅÂÄŽnnþYoÑøàÁ»ÇfÃ|hÄç-ð•Oáù¹·ÈB™¡‰áѾíNÝKÎÏž~Q³j„Ÿº[÷;Ì~&vy\Íó4$v¥½Ï lZÛ0o„Þ#ìŠ|F¾tár^Z ÈsÅê”l×Þ‰ù®ôÚô/KÖr¡i$Ýs´¿çÁâ`/¶]{±õöªÙŸÔ_+ÒjˈÑZP€‹ ¤3¨Ëþä&«>¡ÿܦ–›!‘uwøj¾`nä{ï¢8Œ~eít5~ŽXL†Ff5ÜïoL ú„a`¿yÑ!^“œÙ ì÷Ïyµ6½™À—òp¢ëÒ(‚›‰K¼WbSꇤ!Çdç»Ïî¦âÕѾª ŲÎ}'ACY0M^Yî¨]º²¹¤Šò™Hü2z3Óý ã$þù. ›bü葲¶€õ¨LZ»}‹wrWó½.zK½ÊÛ±Mvãr†•h7â dÍ“ž‘ag:*¤°#t©oáú«?Þ[GßI|²/¿ cìÚì¡dž»ÊËÄSA9é™ÁZUŠé¯™a•lk ?9SÀ:‘ ðÅ“Åâe9"%¤xÏA1ìBû7¬”ÿ¢‡©1S;Ù†ZfíôQ׬}èéê~ó¨8`ŽçÙ ,LX®¦xœ—o°óuöòIp|½ QLoÏ{hÁš¡7ÒnO.}à›<«Ðg 7ãK}Ò‚µëÇl#å.ëÕ›=ÙHFW6¡øG­;QÅ­¾zeó¸2Éþ^GH&VViÓ:~ÓÈhüUñØ£"A†´FB[ÕÛ»)ó–\Át½¶Õý’U Àš$û÷µ¼(.¿G°š¿8œ†¯ðÕŸüX×ÜX}Ók„ëß½Ë D¢Ü‡ë @w‚ s.Öi 2b¿Ð¶ËÉëo:+‹Aσ²Ja€EØÅ„;êߪFÿZ‚˜©Èi+cBY\P|,æð`_æ1p†T$u2¬-–‹»º¸õ¥½f'ZŽÀJ'§–H]ðŽŒÐvc!Ä©L> . †ç’½aÀ+¼ìàmÀ¾çÙ¼öݯYŒûY4lŒI„³\ž×T’dNÿ¹¤Œw·¡<ÞÈÆŽʦMÏ}æ‘ÎC4F“«\VaoÒÞ9TbÕ˜´åûÞ°@»c6’ަ~¥á£¾>ê£(÷éð‰†×Oµ4®ì rÖ|²óT´(¦>>¿'%j?c¶£CçKíÎMz̤4ݲ9§½©ŸÜ‘ìÊSM„!Ö«–ò1›Ì½°–ê;Ï»{ô%Æï[¢mãG4Ÿ¤&uÇ 4g,®·ÁsDC:Aƒ4F€$K&ɳayk˜T®¨´b‘m«¸JÚ`½sé½vL2:ý· ­™~êq@1Ã~„0Š©m9tß¹®Q¶+èÚ\óA¸Ý]LîÜÞòÒ#ÌŸîḲÌ¥ñLÚÝ“ó@>pvÊ’Î_+Ä—3U©ÒçO‡Bê·d„÷T†­GfFï°s¡¼­I=·hv9&ÞžÉFû%EÀª’8ñk±Hþ†V«v¦@+Kƒ¸ð£m= Œù÷sý#½Ø‡7s‘Cšžh/gÁkÚuõG…/uÅRþÅ+TÄô ‰!ίc³™¬ïçºýMüò‹¨7Ô#ZÑûëÎXŒÌa„Î)Äœ½Ù),âˆÝB\œ²Û“ªŽ”åÀ‹ãºÂŒmî—ד s:>¨ðí’1í"З~0¿ k‹A¨U|jÊOªãý#©Y¿àÃ'2 Eýk¸ °À6…û¬­Wùá  aº­;°©ß*Xw8Ó™ûköÜ´OE‡0«âuß0Ü P7JfikýDûu‘¨[¬¬À•| ‘»ðLI~³e)v–ØPûnæI;#e¸C*†Å¶T¢]^¡Ï’NêgWlj9/›éy˜ýŸå±ˆU ÉB¥ÅDøQ¹¼sW¿™GäýÜWÔÖ,9Xä·;×—lð¢Å¡e^—’Îz¤˜‹ú5Åôñ ½y§7ý˜bpˆ ^ümnŸ´œ~ðµç=MF×3ë ñÝ~Ì7m­×é©ñ¶¢K\›p¥É÷}#_çâ"8œŠ'Úi¶ä™0¢îKÆUÝê¶ß¨üÔo¦µ¿RŸT ±FÒXå`þš[bÍÖïuÚ‹§ÂþP "!#V¯Û/†f·yÍgsE¿/«E«hçú<  7êL¿7VÈ̃ÖRñX³.²¢')?@óùëÐoB FËRî´‹çWs#‡ßÈ<Ñ:”Êœ‘{´a”´Î-«ò»:˜Sáü 5wõðÓs͘¬_†Ï¡W†éŽªÿ£Ñ˜,°Bàœ[•*Š`øsÜVÆ…†=7ÕšZZ¯ 2¦¤tð¿Ñ£5,€õßž•â·³rˆã!%%ÆëÒÅ6̓¡¿>rl´jÒ%rqìBôéõ®¦ˆor)û@¶„BP´~}̼šKuáSx´>°]Œ¦‚ð~¾õ·b°dkÔ¹2¢v™¿·;Cål˜ñç¹Lˆ;< ýFšY¡˜ÓÆ“iùîct¡, ï#ò¼jzÁ–Ž@ú£0/DÔ²FaŽ`Îìÿxpº!éáÉèÙÞ.ÚýK7£YhÁÿn!Á©ÒçB8nIs\’šè üšÁ?)2:Èpβez"@_0ωXŠ›Á²˜žõ)?O´2<ú‚oB‰˜'^}¿oÕ å) „HÀGä“׿=êý´åpÔw{3mšg”šüêê²ïÝæëF›è™ !X؃]+TN**NÀ8â3Õ6;;æô]ýœ´ÖŸ¦«„fž£ð…S:–÷¡,öDëýò(~¢ÐBºX KcUM«‚åô¾—e‹t%]{k¿<ôê¾ȯÍm ¹á?÷Oåí¥vMëð7íIŽGŒÈ‘»­¼e'ƒ £™š]ödT¾Àƒ»&,ûùuYmvIÉ[…W¿±atI÷4éçB'›žO#Žl¢=@/qo‚ªö(xG¬’-_ˆ»ìSÖ!_{|ûõZØgî4ì(ì” oK*Óúñ} Õ$ Í-DŽɥîgÉô_P.;©Cö‡ÊUãŽäE3¨‘Ú»¬o}÷z”mž¶ ³r¹Ü•º¡{“þüžUÕ(|"ØnîÝ/¤ë,ë°@¿ˆ£éZ0:!Ç3¶{À7:â/›ÏÛ¹¨ž\™4s,|´Š"ã»y.,úx0½< gßâ:t&&³. ù×Sj®¬:ÞâÐi,°–&èÜ_¬Õ1ÑögÊów.Q²’XÏ4Ý_ܵʺkB$øüž†ÉsÆNîqñ×nÞËy˜¿!€(ZÎL£oïd¼l sô ÃüP ^w‰uÍÐWÛO»À[1ð¯­éêÕR¿ªÉ8$_£f•³¥‡ïPÙ(CMØÀ¦bå×ù:ÅÊ¿Dj¢Ê驎,‹S1×e.ðþ#öõù"óüãÜYº¹(P ÕOÛ“øŽß8öS±7j€:8­'ºðdõ·ÈÎÓ»¹m[„Ó”…ÞäMÒùÏîɶÌ^Ù4[\}]74ŒlìPz¶›;¾á]Áâãw|Ebgø¤!7î8ýµ.ÆoB8È-æöÜÕb1ù)}ršL0$Õ&YßÔœ¼õD>–<ÿfýÒid¼cÒˆx£[{¾‹hÚüX;£ ìZ¦Te½t|ÈÞG°ÓE`fÛ’MÇÕì0ËJ'x×ñFH.ÿ†å©ö_lN‰¼_áÞ+˜O‚ŸÌøÛ8ÍÇYÄAaÇûm¿?H¦bæÛ¦ú„kld{uFºíê¶®ŠÃñÉË¢ÊIFBütMÛí,ÂW½ö|7iè/÷û2>=í…iòºàÆnHØŸ¶¡_/ºU¼H­Þa/OiŸdÐö¤1&¸…= §Æ¤ I°#¦ýfó¥¦Pd äµ×NÑFzÏk²Ahˆƾv Ì®ý‚ŸÒô²BU’¶_UÒB-F¤t×1ón RÉí—²_^ ê!MåV¨¿!?·l›Óß.N²'Œê~ƒ‰ºýI=œÏ·æ1UçwÉ/„õÖBÚùŸÍ£tÅ'šºécªÁOÕêû>¬åœ²}Ù_êˆ4KPÉäÎr zðIþ6ø«L˜Û¢ý ƒ½f{ßâCG'§ší.ØÝ kžŸ,>¡Ü¬Ñw<¥ðôPb½*‹¶ø¾UQÄmw3¶ÁžÝ[Òø@}ÈÊ×e—À"1Èùµ§ŠRö,žTÉ‘K(Ê®e¸˜cùƒå÷(Ýœ'ʯeÊM5'Ü s¤Ð⨜-ºÔU¾w0qÖ2¨’Ïïö„ÅKÉJHÝ©Öä,TwÀ‹¿qÖZç2>ã{xøƒß^í/sn¯D‹Iåoc·à2& t<÷ì‰Pv?ýhH‘+3a[, ö…e"Ðie5¦/ÿÎÑ7\ÿ+Ïâý“Qµí k ^=ôá¡ÂKGm,5Nš§Ìx>eb¸¿Æ{Là•¼˜O`V/îg¹ô} g.?FIDÇ÷÷pùÄØ†å9ÇK’Qº/ œ ¾ÏÊûœN¤«ˆóK<äj¦vr>/Â#aïPå½fÎoÊPIÁ!½·GYퟭ­·È.ÉíE>ÏÓC; *ÖQct°æ|‹&€Ÿ²º)U£âÜá,Ž)+U†FÑùïìzÓÔ¼KÉî¿QúPS-öÐw‘kÎåÌÃ#%†9ñãÑ@gÚ¼*,¢_®g¤í*þéD!´TðÓ寶3å"¦2f-–àX 4ùåcÌF xUæaÀ%hŽ«ëžÃµÿäÀ¶PÛGâ¾e#XÆ÷'qÛÊt†I£œ3XFÇ]Î {þ5õ‚uî Ãä9Þò­¶âCÞxª+­òsùní^׸æÍèQvq5ä{±ø9W–ÁBíZ@*°Ëþ¤|¢ ƒw…™½EÍdÍÔRU`'õ€te²´§A{®:ìÒs–ðâÔÐîòPLrRùÚ¢'ˆø³~y™´!õ@9© h&:¿mÖçž9ÌÛ$Û®E¤ä6áiû*B:ÿš÷w¿}“~Àó«zØÚÑž6[–ï6qÎ=Ôc”<°Ì²ÛÏýUÚûOUìÕ¬A²rWoi{ü9 š½q&·† £8sQã{X,ó‰»èX0ÖÁ}Ûo}Z¡·XGLm¶[_Xç® °nLôDö­-ÿê×·@ q{ë¶É/2í*–¡TmRߎ-òçVÿ ^ êxÁd°{Ý•óćßt¶#\l’tø„ºà‡¥­Xb¾vjñ°nͤä;À j‘;q!êp>á¡À–î …Š éc\X²<£ƒñÚ0– Óu™·ûªqÙˆPמ!©`W†Ë£w™Î„;J¶tI÷dwø÷Áâ_ßIɆ ×ÍõfÞ2Ûëíñº!VëÐëðµ`W´lr1*žÔDEsÈ«äÑf„³x¹«ÌCEÞ×_ÏŸFМ\ó#±Å^ëº_?]PââABæÜQH~JþxÙoɨH7þÆ æó/…xàîí¦‚ã$XW ©‡Ü'‘L( ýÍzµEÄš>LyŸØDØlâÓì%gHírð‘n¯sp¯Œ{ꬂ=ô`£%MƒÖ®5û¿D:õøÛÙ( RÙñÖ)Õ%`WF‡ê ´Ç7u´9>áF§8.+#d]Ž‹³!œÒ#½‚s°ÀB}ýRôÂ{ øÔÙS)œ0ûnë,°Ð: ¸ª¬Œ9ËozY^ÅÀúœ“cZž¥ænÛ„©áV¿mβÁT2¥`9ÛÜîô#ããDe¤§M©`Ä9‹GÛÊ6g˜+WÞš¡K É­ëøÒÓTÙ%®ŒAÉ#658ïD§´êj¥ö»½<_ük6[ ò—“ÅZéfÄýo«ã¯°øéGK"áܺb(äׂþÚêRže3ÝXÛ'¬ ¦åj?þ–Êši—[b×,¿c…°ßUâA-9öcjßÚð{}4áé/ûûßãæx2Á¢nôhn¸ËC4_ÂL“Éb#œPËp\[È(±y*€2OÖÇÝãUõ¼_ }×6—›¨ïäB5xcÐÊwšzÁ.'%’ó÷³Êê+¡› çì+ñY(÷†R æ[C½µÈÒLœôü-¤¶ò{uøA¢b2̦衼îqÌRuÊOF,&¬î´ž_dÉ´sÎÍ€“ˆÇ:‰PÆNîÑø I1Îï£R sòäg÷¤=Û­¼]Æ”9—Dr†Ñ…‰lkù ‚¥ý¹$ìK*—%†KÇl“„Mõ\1)VdôIôÑzÜ–Af‚Ye˜)çëoüK®È”p¦†ñ ç,dٌ߉/Œˆé…S?´UΣ¶]u†|ôïKÚaí¦Õiyγ&ƒüŒƒ¶—Ê¿mïÞ/^dÁ¿ƒ£æÀGi ØtëÐQÑS¶Á‡¡JÇù[fL«±8©\Jb£¿µ8®ך 3ë_Ws÷ÜǦŒâŒaô³K™}îa¢s'.WŽ[a‘—r%»3‹i_/3\?XÝf+¹Ù$Ã}÷»˜€qÓxµrZ¹pÀIç8bE’ð€8ÿ.è^,n”cæ/~Ä´”n½÷¼¦bþö¿º<±ž DÍЃ±)N@# ãÄ1µûdøYøJç `‰’7Óï]r8ÊÏáAv"š¦ôŽV’SLCv#HžƒV §H)_cWÐwŸî¨îæ5Et|†¯¶ €¶ ‡\Û%g@’Î$™ÏY‹'ñ&®:olÝý4o¬³þ̆X—¬ÁêPïHç^©`.Ÿ-Ì›}=w3+ôë³¢6•$ûÔPl½OûìGQ¿)jwÈrò·¹%á¤ÜÂ^³M ljEêVf3oãÅfl£ OJ1õ™²§Ø¥Œqß@Utb|Íh¼9&ÕK¹Sع`üÙY‡¾û7@Æë K¬Ekh«ZyÿŽ{kAµS-ZÓ|QNð_c‘™Ñ®+ò(ÐýøÔ݈I'ØN†,˜;góËd¼^Ç'ÀÏþ7¼o>\ãu`)uÏ/øB=ss^`"#[¯xJ"õõK›ÔÚÆõŠÆ˜ §uä F (ü§mC% – ú ¡ñMÿäCvU·œ‰Iøü¶P¢Ò- ‰» ëV(ú™ª=rÊçŠ}2Œ²`† Ø•cÉû'³—ÀY‡MÛÌß,ÎO§Ûè¯é€ÜŸÃhÝ!<ë± -ÐZTpB5ó1L‰\qâZ>ÖY.ÞÂ03»N§ ²¢5K”lÍ1ꥂ§C¥ u37•Õ[æ›2¾¾Õ7O>Ži´Ú&MÆeÖG†1œó(JñÇfÙÊ¡À…ð(D’"8XÅèhȘP±y¢«„ÑÐéÔU#w2ž¥?¿ê‰g{ ¬ËÇUþº¥qHD¹¿£û ãØùìu= Ÿï’Žún©Ù ¥¼Âg6$ctmøö~;ª›?0mvyüuœ™+猑"ꔿ-•áïà_ügAH[ÿQvDµSË*ý²â-ªº‡UÊÑ?ƒP!Ÿ¨æÚ`‹zñ_×JÅUnÐ]æ‹ÿ}Å ì“6»ñëÂåYÖ ªÒ?–tYèw~Fµ›‘«Þ#´ç–½ûy]¡B¹XÒ'$C4Ífoˆõ]Šu"¢7ÕÜB½-B{ ÔLyxÁòiÇ ;Š{‚ó åÉr?Uü#þ¬“ÄHÈ äĶ…7­lPD`NÑÜϱL©˜K/¶º\ï­¯c¸¦í\|³-“tÌ1ñ—zIwÁºf›€­ÕQ´J {£XVŽ€üúpˆ¾)-Üý{of»3‰ó‰Ö²ˆ‡pœ\õ$° ÈåÅAB>0Úû5E Õ¥ðbÃè¥|Ì~‡Ë1ÀDø”Ûå”­û¢m›MÎ[mm¯cè>Â+é6¤sèÝ·¡cæX~¾R9tpIàÕ[  c'‘朚'󘘊ñM•ÝÒK¡È`s•`{ïuøê_c”kšÆñ¢2¤JBïöhiŽ öEfŒ&åÌfÜÒâHµóÄ_—øÐý×.|_(Â’It&»Òj¤rC!=v×=øŽª Í®ÍèîöpŠºá¾PsTýJ¹0ÊÏ@|«¤D—Ä6˜ ÈÅÅåŸz›ý&E’ík?†ºâM}h‚zÅ‘JŒMÑõ4¯Æô×b‰R `¥ä¿Ù…OÞ“ì Ga/ûÇTj.èÏÐ[ÔïaÍÇÑ·¦©áîLÙ§Y=. uÌMU1ß“ø²X5î@‘,85ÒëÅ‹jô?[ÖÞG„#§ö¾ëß§ÛÃz´Hˆª!óƒjzÃ(üóÜ_Âó{™ñÿQNTТ‚üÏÖ‹Á¹©?#Ó–°$õüZÓ0Æä¦šÅyp@þæ‰TÌGª¦†¶¹š4Fbc[» /_±`O&‡V†ÿÌZhÇ„Cð1cNª )dÀ“xYÜ?$µQ:w횎7/öÆK®õÇ“¶–Ô$>(ÀŽto=øoy©‚+žMTÁ0ÚïG–Æúe> ›àõ·ãÀ£úž0~o’cÂåçÖºas\*˜ä-~?”GÔ(OWóA;Q¼¸q©G«ÀÁüÖ“äïö>†U|õg.Lòê‡ÇiBwÑ” Ø´:@ *Ÿ‰‹òxj=[r6É’0ØVq›ù’#²‘™æ%Må;½}ú®Ãˆ‡´m]bM.œ—ýÒ ¶<±$Ú Öd]žæ`ã6¸ :üõ\rÅì÷ë%›Ò’#?¿\c¦hÝAÛ#&ƒß»6{ý;§ùk †BôCìL׃À<“1H¦yzЋ{Ù?3úØÚ‡Þ¼&ôŒÎÙ¾‹{  RÖHð¢ï“9—ÃÃ|ö–:5/¼þ8ùÅÕ69< ǯîzƒÒ¬­ð~U/FTk&òöÇ”Q?|‡7jõȵ¬ m·¯Zðh˜–°ì÷»p*÷½·0¨›c¾zS'71Ãð 9Ɖ=D©±þ"·GÝ$ÿñåL‡¤Ã?1ù¾20k@ÙòBò$ig¬§¶0h­ägžâ›2Çc„š¿^ŸÍ_¯Ï#óâµ²â "»'Ñ 1¼‹jŸžÞ˜&—€õ˜¥ôêLè–¦ñž¹È¢÷×Pè‹bÔ±8íQå×$ïý‹ék§?ž‡~ ôÒ»aú /2Ö§[›½š\E¼¬ÏÕT ©£Ùf°E.°Hë‚Í.²e¦½Y9>ˆ™²©÷a–ÀŠ¢î¹¶’ ¸ñå󬘡 Rdu(Pe<+ÃÂHÇ‚56÷ok ŘIÁëz×\¶“a:%´ÁÍ&¤?Ã"lGRî”Exä‹Ìí€ îŒ©QÑ> Jï>ßýE‰'Iv¹ ÜY:§keÉ@:«@G¥É°ÔÒ¸#Ip’&Ý›¡”3UÂmýU­ÖW|’{+——][‹< N·|ÔÔ‹uq©¸”ŸmÓdXÏ«bØ¿æ*^êE¦bc|²s¹¸ð'¶Íë*ýmd1˜.½‰òy<"ž\‘#ûD/U¿OÙyW-‚~!{ÎÛo˜Yažò&7Fʘ€«+«ãB®ÛZŒ×ðÜ~dÑÏ¡z»¤³?\Œè_Ž›^¼±ÚÙ¨ûC•‚uw¬ó“¸¶åÔuß[ú³º “™v4í0hˆžUjÙ?5mc׿Bºúu/¸˜¸3EmXLéðYQùûµ¯ýRÝ5ÆC&žjÔîÇ´Of’·.чòµ½wéÍ=qƒ ßøûúæÁ*XÛ.†¤K©óÞ·RHò0fæî‰ýa(P¢Ó+—:'ýQEâ áÑ‹ëg¨†ÙÈý´õxxµH_i å•_¶ˆ1vv`p˜Þ’±ž±¦ów“uào‚J"”̿ձôÈ«_:33?); sÎçG¢Â+==Cq{ÇÚ{Ðu2ï°Zâ^;”Ê9’ÀÁñÝ´J˜Ùìž­ú×4GÔÊJ ¥•œo–U¡*LÊï÷RtŸ+ð–nÐùïEm{ypê@{œ!Ù¹ \‹-!„ézî/+šŸøØ¶cõ9•á[(×m^þ6¿ÎÉò-óéäø=)š¯Í)ådªùýzḤøbüu«NúA$œ¤sîûØ©_ÇdÌ÷¯?Ð÷ñIêG~¶c§|´È¿Ðnû€LÑ®„o­- àüí‘< úˆ`.L‹&ì`Š­±õ©Ûöñ¢è·ôn'$~£gî†ös³~bøÉñßgèÌß!¿¥›ç¦ÎìIàó<ª†—bX›fUî’Zs©‰è¾¼‡üóAÊGŸßÐî-¿”G*n9…£½I†¯‰\~›ŠA(ðw¤ó(9uû©$ÞÔ¬‘‚ð KÖA€ùkóÔH9ÆE¼Vë%7¢/ ~òF'ù³BÚiGÄ÷Ñ?&,gSb3>~‹=?p<™LÓJ×·@ó_P†f3ͪŠýx°ùÝ{q"5Ÿ(0³}°`’¨õÛ"`¸cÕžwãoЖ9,¤jP§h†ɆÖÊýá²`ÁzÖÈxf…½ZØü·«¿"  ñ,‡²ûËG¬úPˆÛ—œ¢½Ž®×¥šÆ1©æžÛI2ÆØÅ“<00ú;˜Göï¦þ"Q‹@3À­ —¾‘Ÿ´”Š„ì¿â@;Û¸˜éÝÛëPÛæü æáÐí—¦*qÝ…Ø+Õ<Ë–3:D‚àãÇhqôù èËM’DH"½~êLÄÒoÅyqÁÞõÔˆ…±û°- ifS_o7DPm0±^bÐ ¿/å£Ñ{6:м(éˉG8û®Ȫû弄!PÖW˜5õwØZ!ó/)â°,ãÖ³ï³vîä ¨Î 1¬˜#2äåì ×Qž;¤ wéáèR nƒ¬Q0Sƒw?¨ØG㨾†”»‡ôqd›;)x@tQûHÏ0·Ø²™JO‚W)™*ƒ4W­¿Šø\è—…G»ã)5~ ¢·³«&²-òD•}æ}4ÞÇë-« †åL-c%_·”|31í¬Wøùj69ä¤ác33È))Or·Ý»òl%£_Ö§í·êÛy¾Ÿb†Õô5ÂTm,uß©¼"iĺBhÙöpòí§Fš*ãHõQwࣄ‡ Î/\>ô0äYÍh•©¦«1”Ü¢W•xê=æ”)[±F-8vÖ £üy"¡ÜŠüšòlÒp¦¨T óÍÍbì:w{ûž9z~2!•*?1ž: 0œZ -²ßϧÞ‘Ä{UIÜPÉá_îþ›4ý °*‚¤¯ ŽÀüm ®µÜ»ežÄC%ŸÀuç-ÿ³¶»”@ÅNü ùÞ™bkÏ:pt7å¼(¦|–­øÆ±>§óh³vÛb²³ÏTnóB¢dûàWI¤{©DŒv¿õ­¾sþÈ qÿ…OZÿ w|ò˜»8ëy³õêD8OP_º9lÌ&EþhÑà“Ÿ¼E°ž2+œ°;šq/Ó0†Œm >½ï²ëÃë2Ë7à™HùÆ|z Š…ã¨«~Z…Ÿ”'@ÿð|½ç JÚ<Žwµ _m¤$Á´‰× K3e‰®+lÿñb ’°×Á> !HÛÜñÓê÷2”<Ñš5YõCá‚!f‰”._åÀgo±7û# <(8^™>½…08˜<¯;}’qxN·òÉ=·ütµ†å&¼GŠô5–˜ßw¿ZCn-(%’›FèWFuûÉðí÷–¦.¸C ±O«ÇÒ#g2»ê°Ošu jT\šþ«÷—qTÆ—,½#†M96K‚5ñc³sPææGM0Üx[íŠÀŽr3“3VÂvRóYèï”Kß0TP„'éPÊ\ï¥u@ÌÎ.ÛÔÇHæ`&¹ÀÏïܬŽ`Bõп2^$Ùù±ƒ‹¥.sÈ>–!d0ã€Ây¶ÍGnÔë>£÷E9`R’7ŸvýÈÌRj¤äÕŸz(€ ”äÌÏ—º›Oú¥—У^Î-­ôxõe|—”$jMü¥DÛZ©Ú€Òü)-”Ñïù\ó1HøáüÁÒ5*<÷ŸàŸã7—ÊïxÔåÞ̃þÔš³z‰Í²Þ.=£.•2)ç“I˜’ÌWf us'4¯,[º7ŸïÐÁ˰2¯Ï2ˆ$)“¿ôÖ,·–³ÌE_…œ/ Ä{pa…æéæ»7˜lFkè®:µꮢS¶ÖÔ‡ ;¤ìB[$Ë«6;K8~Öã)‚׃M^ÀÍAùH¬jZó‡ÌTñ_W¼®çñÏXçŠ?A`‡°†ÏTúÐÁZ4ž"¬–ÑnÙ jår÷È]r†Žvüè{à£ã‰û× }»,¾Áú‰¾˜C|¬ƒ¤5$V×o'Ô5õa7[,ÚøÂ«RQ¿º®¬…™# €!šö|¤ŠØT0(Ò\=XZTy5nâí|º‰Iùá÷s«ñ²‘k\´{6´l(ȉ™g÷ê–cþå‰äRëYáN±Ä¹ÝsóWvçñ{O¨«kÐm,ÅSÝ’_‡d6xGõýyýZÔâ*„}¨û!d¦„¼H”b–:Û—gÙ/=U—ÓDmRRÛG¿tßÕÝ€hžú›zPŸ/9ðe£¾g[åï^-Ÿ²ÖÒûØ€]È>«‰z@´äpö åXa¸Ý¯²|×ðSdjf˜Ü£®‚z+}íTÑu¥mÇ'ô½ŸWRäUÊ?®Ž!±«?ÑMm3ž},jÛ#Ñ’…Ûy1Ýa· W-¾ cb\›÷Õßå[Q’‚̯q__ù«±6>3+Ë¿f}÷Ä…‹9ÿŽçØ#¸/}¾}7­7cÉöl.Që .èÙ–SIþþ Rì'ˆ”j4ÿ½Ï7’†^lõ0–5Øá¸`() <…äåü…«§7WO\y¿UüΔеϤÒqÈ-_ߜżIÕv…¡œÜùlòÂ4ÚÖkV]àk^ê^VõÌšÓ-‘«#ñªð$0?|0\HÂB„– Û¬¡ "(Tg=`zËîÊÌÃMÞ!Úàöœ*¦ênœ‚OËŸ’››NûqÑu Z‡7gFD:K'~ß1p‘WÝŸü¡¨n”k€7ÎbZ>FŠJœ$oÞHNù»2ƒ­ýMaÖ¥Úh·_Ö˨¼ãþÇ4LY18Ø @‡Šz³ýmu¸${žã÷ø#U>‡Ëâ1ú'.`äbšóqôñAÄZ(ìIyþ»hÇwþz‹wÎA*qÌ 7Â~*M°GÍÊŠz€~Í$‰G¿q‰rßá ÏÃE–™åïü{<~ûfâ«fPìÒj9íÎ6¢˜”ûaü}]íL¸Øb`|PrÛ®,)Öçù˜ëø8¢i¦.8ï“ ÝíþÛs’ËwЕÓ5¸Ü’;^ç0$ÄÓöCX¸‚ à‹ŒÐ$päªsSä&ˆ7°Çì"…¤ù͇ͻ~ÓQfkCî÷¦&‚‹·Iq;HóØ'ßž嫬·‹HýY—ª®RMO#2ɨyWPCˆdzˆ\~lõ”ö唹=%¢¹Ÿ¡ìfrëzƒ‘| wØŸ…/£ž×Êœú÷ú‡VøÅkσ–ÂÖ×ûxòúÌ;y Då#"E&ISXIÁ±AV+&£[E6õ‰Ù'G3 è{þ­Éüù.`C zìÝ÷°Eu†ŸH°a“Iˆ6È3/¿¾D Ø­i(Ÿ„þ‚‚qSŽ®$ÝI©AsÔ‹˜@ "YDtÃñN¶KN¸ó“†?T°îË÷v¢Ì:¯&™pÔgñQ€1ãKßȬ½Kq‹ñŸº‘ÇŠÀð#澿s]SéÏË”í!‰oGKÑŒU<ì¿‘qãUVPÆ{ø›F'£QZçÉaF*ÎÐ$q@yUý~?e0@£l÷¸^¦ì$Ñÿnbá`ˆ0 xÿù¦=‰˜måFcì¬èïÁÙC"ä»B•.Fˆñ*Ç–E©§ ŒÂp ÊvfãvKooK²Ô!×ggЙV–"² rvǃ}ÄNN±ы՗»™‘ŠÏšk¶º:$nW™ñ)®ßxü½]É Áñ{gŽÅÙKÎx±µ›„ü,k ’äÃSQÃY ˜*M– ê¾ÎóìÌ¡ŒEFC"iÖ{B04?‰«7~íb* *‘’ò}§ãÉÞ@ßæ³—׆>ÅK‹&´D¤)CÀìBô_«.¢ß5†³ü-Žo&Ì!ÃmñëåÇù•^6¯Ÿ›_ûVß"¬-/Ž™­$W’¯G¥vt& MA½nŽ)O ®ŒxŒ}»éù[@.*—òmŒúà… Üz•·éÈî“æ5ÑÍÇ]!}‹lzíWiæ›.Ë È6T?¶ÙI38žk)y]£èE!`u¤X"š¿±º!h?;m^Ïâ˜ôfÛñ»4²"·ß¢ ¯U>q3¬Í B X3²N¾øæuÈg\=šš‘á¿3R F³kˆ†§òo‘ {ÜtïîAÒDƒV‹Ìœ&±ŸæõûÒðûlõY7|à˜Î·Ø pP¡w©»«-Õøš"òůwÊ—qÍMû†ýËóƒô2n¡î¼èæUÏ?Ð¥Í6öXЬA"C1>˜>øÞÎm8E´^W,%Ts´1ˆ‘X–‰R™ ùkù[MÔN Ž®Gr`á7KÄV±q£éÖ2÷£ñC³ÏQ±u‚Ú¢¬È°lÒ8ß6)Þÿ>°Ú«˜6…¯°+9é`â˜ãò @‘nìžnýhún…a5Íœ‚k7ä—oÿVbWßÁ/+zka?&ÇÄTååŠr‘×W*·“0y욤ˆ®«Â©£x$ø8öKu§ÿ 1ò ’g5ÙÙ•{ÃwXJ$ú.¥¿súÿ×@†ºz|®æiºƒÒ2ÿdÕÁqSùCçcO„/sRÒ#¿rûþYA¨îß[±Gõ{*ð³Êsn9¤ô-a“sÏŒ@í¸ÍLw_ï×Ï^~OÊÖøÆËŸšßÍ Íç¨_E+©Îò6ÎCûàc™ìx±³Fæ,3¹¡ñ†yù ]EkãïÜÙØçtð—ŒV!ÆX¶áÄýÀw³#q¹[7(þä2AA A1ƒìÏñ SWhN¤ oÔs®MTÿŽj€æìŽâ·?ìmýUïuŠ{!Ê›`lœ“µÊËwӼ܎ãÌ.`;¶oëø‚#u _RÂ.gÂ~}ÊìÞ ˆhcA4‡q¾¾:~lîV¹–³Ê<_²øïEÒ‹‡‡õ,ì«Û÷è«=@è³7Ê­¡s„ j¦kÔ£Ñ|ýjhäÓÞš²oÝ wmß§¯nÈ_Sû`|ò[ô€ êÈâ—TTÀé븳æÊ‚p$éxˆÕ)ûÙÚùö_𿱠E$¹£,T+ü!¨¬TjÛý›F¼n×ó¡«KÖ¸ÜOíó:”½Y÷Ê6pt"¶K{ ¶´[îÆûî.Kðr¦„Æ' |ȇËÐÏÎh'¡/¢‚žK[N•÷a°¬d:Ès—\w#Ó¥3ð'ÒvVeç”e¡#É"(Ë¡¢`Á–3V{CvöÀ?¾t¶ •gs7‚û ø†Šîäú݇õ~ÜÌ9¥ìˆeÃóxOtÙSd™RjË_·C}…<ükÆs]Ø¢ß:WWNœ Ê«_eÜ æßò-F ¼ÍÁý ܵ‚õ÷öƒÇÁå¿ÍDw’Î6Sa"×x{ðÞºHNV=°øôŒY®Ý~ŒðѬ£"nøHm–ј2½ûOå.êòP,‰ùóXTúZ1ÚxÆ›ç ö<3µ[‹Ët<*joõ³ó…ö=¾¸ìgßQª¨d“`;4­ð TÓnÀR£[­hó.ÏÔ‰$bê±m†îœ­$?°.+EgAhDtál“¥šâà %ùk % 4‹Tã䉕ìzÞ¤E³dD%¥N–齟àçƒWœL«o£‹òÏ’ˆåçªðßã¿NžžJZ|gÅá—–»ˆFi2Ñ€;­7ÅôLNôøEŒM—œZ„q )ŸR[ŠDÌ>%éÀÇD)³•~&…¸!;¨ööÚ²†è æ@,•…w_}Íä©¿©ŒàiÅ`öޝÄ{³* ÃãÇée}ˆGÀ­"únÛ5íóy2ס.ÁÆc*¾ü>ÅÉUaCëÏþß]˜Çgåàó®ùµ½ÚÈŠã$°‘¢[So;¥ÖZq«cÏ<"ye©7Ï•±s>Æ®Œ ‘—Š$Ð ;²ªÊ©UŠ9•†»ÎùðFÔ¢L{ ¹S*ô]ƺ{s®±A?WQg¾Š¼MiZ¦¥¸Ž«êsbz1ÒH/ݧóS>Wö¤Ëo¬÷¦Ë}JDÁŽzæÈÊÎûºaˆþ}0qm|8„AN˜†bP î˜4KXZ<ÑÇóÃ,KEø¹Û„g:)£ÏÒ~|(Âþ||ß `÷r7H}|¾^6k·o4Nð>@Gßí±©µòï2Ãp£ÂGj;K#cC¤µ¾³5£G‚ý»R =ša—éuÎg!¨þ!Gσ"182#Š6>O¹G«äUù QÔÑÃÇ7ô¤ås%7†ÐgXäc?ÿ¼ù…V-'åŽænNÝÍÛº¼æá1¼@ôÕwùÅ2¡ì·_6 eà,ADZu R®Ø„ œÙ«td`ˆM†|ìçE¦~ÿ˜ÂÞ.?^qrü¦[ß=Œ66÷’äã?ØwÀ~ßÍ[——sNÉ´Æßb/µD<¶ï›ôïPöëaºÁî0žÈ÷š%ÕÓAô8ËŠ.…b^ñòøÒS¾jn2JççO—Ùwsãóߥâåm'õh¾9<êX‡/†b˜WÚº@DS)î{Ø‘^/ÙËöõƒàþÌ ŽŽû‚G,¹ºvxñ5Ÿ½i¾¾…8n>`þã7tÇ(ˆ®lxC†‹ºÛÍo›Êa*sh ùAªDÖ¬Á'@JÉ^Ê6»¦A™3¨ …3 µ•z Jød• ’ø»Éþ¶×aÙ¹™õ$ž1G¼å|’3B«Ú8r S2ñŠçkܯXêX'‚_Œø=ÓCX ¤’?El üeÀÛTâÞ“/¸vmBUâÍ”î± Æ ÎqÙ–ß—ó Ï;÷™ÙwJÃiÎ¥V0ÏSåÜìfÓÞX$0æ©Æ¹„œÆ‚÷|Kõš=b7õl&ÚCeXþË&O‰ mÍFÀn4ëG˜ê÷¢5LÄN’Úæï‚¿²¤€ÂE7h•îëÝ&ñ!I¿æxj¬`ФždÿÀ ‘ŒÇ÷È$Šq¼æÿµäøáÜ鎖ê…+2§×7AÌÍ*%~Ñ„Œ8å~%J¦©ìíwyÊIÐoI ¼M*dˆ—²Ç&åc‡l¨‹9)íÕ>„6"¶uuØ ->Qàl³6ûœ9÷¥?¿G1äoöÓ]ÜÂhgkëw Ë ¦¾Ïi¾HcçÇÊŠygǧJAã!oÅk–˜(6“yÚ¿éÙZ’šA—5c8ýÐgï.ùsïDæbù âòa=Á|Óèxô¹›õ0Iªø-=®Ç¦§ýïÕ{?¸_¸ó\@Áb·Ø±2Ð…§^þFF ýØm«PPž!½äÛŒ¢bžèIjÞ I0„ ÍBg¨íhÌϦ…¯ãs›öÀw}BøÓþúÛS:ël¯12[%ÿk‹èþß«[«HŠ:{–ŵ¼ŒáåµhöwصAÔùÎÞOYïŒü&oÑC4 ³GÙÎnï¯Ãªžãâì€ÜÖsñ/GÆF]•öϘ+|VÅû5•–œ‚ßû9+Ùß&~lu߇1mx©KÚ½9ä]A‰¶;ô ?d}0üßp°¢÷kżšÎÇöVõÒb/ û ~O¸EÔý"è4Œ¨ñй öƒo6ùg=¶ÖmöøxÝôwO™?$Ù·Ú¦§±D£Åo«Xת+Àج³#e'j[ ñxvìodiÛ7§Hbmžp{ªÛ#µø­‰œ‡‹'%Œv© ×tK–m@ÜQ—‹³Éˆ­ZR±æg YIÏoÂ^ .¾vȮƒû`Gû-²`ȶ_c&ê8ã<èp+ð€WØÞÍq(ü Ùj5™¬ ÷ýwû”1”ª¶ªnH_KÏfUiÌWWs)ÅÝíµÏ>>§À"0jï¦@é)°”yV|­”ÍOB…óù#’¸³‡‹Ž¸~Ë÷‹;ú}#™µò±P—û7葹œ¼ü®2&ô<ãÅ5¡sëõ©Š>{€÷(`(ý©J*Dv€ÿæÃ3Õ΀̋‹¼§+ÙÂPïâ})xณ´j%¦Ek`G»äÏê(ãeEœ¢,ÞXgÂQƒø%È<ùø¯5pÀsß‚r>YšÐ!y¢0ß§LÕçå À2d–—t~“Ü-1ÿ˜+Ó‚ß8x.dÎ.,bZÜ‚qçøï…x/ª˜]oÏAôäó Ö‰{ºs¾àÇ}*>SlŸòÎk?-ï]ÒEý'ê­_ª@-â=„V¯l=èÀÙ“ÖØ{ÞщîѲ¸Xù:y{gmXÀP–œ¶ª¡¢>ÎÌgó5–ùe›Ï ùÉT=>õåøoe»r½î±^UCˆÇ©x~Ëj!8šÇšœAËËúk5Þ?$+»]ü=â¸m„Nii¬¨¡…ä—ËÛ®†Bò’¿û¤,¤»~½uæÛœ t ˜ PpTn~äåkĸôœIRÙ+Æå6AŒ&SÖRëþf) }¢ß§oï.6·Æ]ñø‰¢H”)#‚Øw~•¼øyMfHoA3ïá«›Ú]ü}@±wa‰©CöÞ©HvL†æ a$6á›My-ÝÐ ´ëC¾—¼Œv=£b]ÝË—‚‚ªâ`ͤ?ø€™¿6¯úuo_}}mf…¯ÅAg´··s%¼ó®_ŽkøH‡äãEö¥ŽZ^ÓMzŒaÛ¡¬3ø‡¹c`áæ,“A-Ü] {‡5n™Ô¬Dvkƒ.XÜøÛkÜÁë±a;s²µ1ìû0Ö 4‚ž`á ŠÛäCtáe¬È/m_U>+†[¿›“Óˆðß >+¯ëd Ü½%%èy¹œ›¹D>u=’çÝŽæåÍÎå¸Ã®Ú ºÉ«~ïÝMxÀJâï ¬n.½Œ|x&¯†ucÚ1jGLóëQ%Ã_=„’ 2%ù“ÝCn6&EAo…Þ>!¬/è}ÁRHò‰CÏð‰ zC³ƒÓKfö­eXª íÏè+0·ØÎVåHÒ|%-œž³˜qx€-·[†zGŒæŸªÕ6¤-&›Å„d¿ülc=RUÔ\ø¢–·)ÔÌÂRdŸ`w“÷‡;”\Š×ÅŒEw^¡ÿf¶WçßñSZ;'DÀ”=Ø|e$a–³À^Šòåž[9½FcÈ™v"óGÀf¿ušh Ã/øR02ë=«w-yµnoÿJÍ”wÖé0UR­–ú;IJÐ`)}¨²mcÅ‚¥i¸Î<Ûâx/É2Ã.®6Q;CºÎãÀm†F#rq0 ^®GljûºTµß˜†CÇR’aè1¾Óc ѿþ.ÄXÆœ1‡Y$ £É¹ŽΤ¢„BÇXÞ ÅBUÍ¿}œºêåÉ]SŠ-„a‹ÝÊöfèh‹KtT|ÑwH6lЯ$PYç Àúx]FeèºôÈÓ& ÃHÌiäxã_þ65*œáÓ¾hNü(]zܺ,±:•¢­ƒ'‡‡ïó™û™‰Î8&™…âøÜ"Z6n³ÎPŸ©GŠùŤª„sð®ß;Ì¿¾VVì\ª†ÜYªØ·^V VÇ qÐE’h¡—¸0ò£=:õ[ˆ¿ drëOZ‰¨ÏŽ¡žt–à è#´¶Ý;VÆÒ×`s§øý×1¥nÛ@þôÛù Þƒy·C6møi²{Z Óõzñ‰ï·ö®é u¿™ñ8[ªÇRx¼ùJ“†ök-;tÒ%]9Ð1+Õ¯³²Ê6'’ªì¿>øKK߯púÓ•_CMpöØô¢¥6àAûé#-¸Ü¡ âRþÒ]$Ðûü½Í„V••ùµ­€ŸLí‡7- Nú'Öø Dœ×‡ýL¨Ê·¬¶è’–O7§»å¾ )˜µ!‹j•ùiµ}nù>b­WÍ·à‘ù`N|*þ!De'Úæ@¦Çá S"9¤'åyn¾+7׎a‹×}¤ºåÓAˆs¨ØÌ0æíð æþö˜a¬O‹âèçs öU€ãN²Þã<Í%´)â^2¡Ÿ‚¸ñµizê²Í1$sg²o–øqm‚Sm]iýãüè¾~aó¢Y–᳆¸.Vn ô‰·Ö¡L¼RÒòÒI_ümzüu‚ o©¸™òR-ÿk }‹žQ§¿%á­±áç×Ñ#Aˆyí-(ZÙLÜx°Ú×ì {htð¼ÜêW/¿7vI)lòééŸü ɰÀ±ÅY¸u™=M ®XS«‘(þí¯RwȤòZ"¢3ÔE+ûûŽìï+ÉÛ$šÉí¾:‘Ïøûö œr‡¿yg‘{Jæ¦  Aˆê‰ºÈ#·ÁۇϬ¢]KRjr‰'tº&ëx·£ô˜ÂW^zã -Iƒjæ¨1bãcÛºhÞJ–fÉr0“0zKæ9wÏÖÈ視,C/O¿ÇIÞ÷UŸ&Lôø‹‚ÈWO”Vz±’Ô¶Þéç¯-“â®2*Ì VJå£cg€W7ƒ‡aÔPLê2R,š Áõ1î ͸ø7Yð<_¹p!\»7€{?ÿÕ]a-'v‹õÅlñÐ ÀãÚ ñAqçfyáÁL>cùé8sz]ü³¤ÿÞRLm5›¿lYª )Ðúù:s¯/0vêŽWŒq°†ï不œä AJ2{àeë¿l[!É]ºM’¿sC B± Ö/üL‚.J-³fÂ~¥~ÁËo*Çq†7fãuY­°¨cóü ³‰¡ð Eda±C™™Až;Oªbä_CSü˜ ÆÛMôîc q”Güµñ‚½i_úO¶¦_ë](C鲊›gx,ü8äC×dF_¢”îIAåwÂ\ aCíakþu9æå@à„a“)~5„ÎuÀO­ÃE9‘ÒmI‹ã2á¿a>úØ!ÙêN³™ÕöP¼g5ü”¢\Úž”›õê¯Ä¿†ÿT¦×¶t¹ác•<ƒôºíÁ"êcÄj¡Xº~Á×°ØÆØ‘n„5Д*̱i\jâð Åhqðö5ø×Üû7AñÕl¾ÂŠcí$¨Ïæ5.Â^‡É*ýŒy2í"JË[°÷ÂÁáÝgiŽšZ–K‚ÍçâÖ%ß°dÂ9~ù)›Á¾{gÛZ1 þ6¨šŽØðÜ¡9Õš6TÃ[¼ŠïþÞñÝ“¼Áo1©X—‰æfTááo¡t±øER‰œÄ{qœÇY'Ù{k÷#-Ç)|akŽßÇA-¾{§4è t6è™äF~9 ]kœõœtóÚ²Šð÷ž<Ž:ØË“½r4ó5@WAœCPŠþU^>_È™Џõf¶nÞS,“¦²G® ‘¢êõ †ßüAªöý°Ú†s¤ßÇ ÅtñÆZOAà&q,\h×AGĺĜ#ëxFy—dCÏÏšŸ2"á9¼¸³5%MÿÎØã\uØS^½Áxià;¾JàòUfû2¤Ûq`_TJØ\ò(ÿlNJ†üÀ%‡ |ݽƛĎßNáþõc½!ۆ6o£œûÉŠçôüE–Þg+ˆ4j¹l–G¸d;ÓuÙjn¿Âè«õr³@.³ ^Ì£½ÅŠŸ¹o®pIúz¢ù‚o_¸w$7Ûph“LöOÚ=šÉ/ÔB x)Eõ{è«0%iFñïªNƒ>±2UÇÿu^üÜŽf·òÞ’u€Åœ˜©JDÀ´®õe~vÙJKÑyYí´.ºý©'o>)æ]PÏ}äs„\C‚2ž® b4üõYö {És°sŸÙÿD i˜U(4H©龩 Þ¨8å%î¤Hw›ß>h9éÞ–‡ó<t0;bOL½% *,Œî nþÞ´öò’:x°oôuOG²ÕÑ6IÙðA0û°&êübyZ±KFíø1¶ªèzÙÎY{!<Fë?^ z.¬ñY¨À‡%&áhç yaè9šéR•·³kª~‰ænÄÄÎÖhê ½µáõj—HØW³8†0z`ça~Þ¨&òöy|H´*ß,˜ ðI|»y†èæßV0AÉüsà$9°Meÿ]zÀH`Ä|+À›WOý-4óÞm³Æ›6çFäjº¨œ’éWàtç#SÎ@­êâå.ŸözíÎë§Ïzú»Ølq~ò‹±iH>¨)^¬¹§,ÐÍ_#»¿Epš2ÌÛ'3LFõT“d.áýñ’@A¢eç¤Ó'°©Å¦Ü>Y¬ÇðwÖÆ2Y«Ð2]ÅgÚ÷–/’/‡]Æü1¦ú®ô!4µ8ñqÙ'Wþµ•&:1ÍÈ(à…늱ß຀V¡# ™¦¿¹Ë6 ÏV«ùü™ìø‰0=ûEÉ϶e¯ˆ'7áHV02³eù.Ëñøû~Û B€š ´ã0ÍþœQäÑó7ý:Z9iõ×~mjƒ!vs¡ŸÍtÒš—óc-Ò¬ýÄ\»”0G:P5a¤1šà¥ùøÌsð11ѧídZãR¾Ø®¾_PÅ8yBOîjR&D1>/0Ê0Ta¥c”Æo# €¯@*^áé[Âó>.kKl›×¼ˆCë«rÀqˣùÃîóßÇlg]ü©QŒfÛPÐÛý;Ä``'ìð©¼9Gzý~!Û†[d á®¹ bçŸÔ_u!õ³ÖZªüC›dÌõõŽïªDäßñטDfŽƒ÷ }ÆcÑ35eŸ·ìciÖa3QÚÙä÷A"Tð²rH©ð¼Ï…õ\+VŸ>á{eͺ¶Èz,* ÌÚüzŠøÕFÑ[æn/ébé1·›Í}*xëújøëßlB&^%»æInΧ^ÿìóµ½÷úìTíM2o*ÆÇz–¬cg—sr±ïº|DÁOÑ,¸…£3¾>_`¶×Ç]$aÆ’í$ z›äà ÿ [‚æã(ØÝ“õt!××ö3‡˜ vG¯QÆ™ßdÛÄЉâ#E‹Õï·Í[!¤ÆQo¯ÚÕÊá©ÙuFnnæa§A/j,Ò„só6—«¼­Dó’TZÂýÈÓ+­Þ½]µ}&ï>§|£P˜Š C(Ò¯/Ö´•ÁãºÖKbÍnY."b¾èûÓB5Ö† ÑÊt«#÷Âß8åm›Gþø%ÓG£šëúP Ç~8{¡¨ùoÖ[‹§ó@…bgþÙóù‘Ylwó× Aê|cæ·óXO,f†ñÌ¿ëçšb4÷$¨Ti¢ÝW7£.VmұУÇÙƒ}jþ•lƒeNÌßøÖxÁÖz¦Œ;ç+ºôÔ«h‘@Å5±Ú[ãèómël˜~zˆ˜g٪ȷe_‚í¢ep[ë¨õå _ê‚ _J¹q¡®9(cÛñÂ@é÷k®ë|´ Y1Ṁµþ×&’±°ƒš¾R®Ø¾x¡s«AÝN7o^•üŒî‡fÛ‰~ÈQüÞùš{FkÃÇùiïŒ×>Í[(èRšÐÒ+ùÊ%¦eiuîö•< µºfZÄ÷жíf\@;ã'uÄkÝð¥„òžo o:¤GM—`ßøÉ1O¾¦Péã“–c$ßWûHx.ùG›õ;hâù÷í鞆Q ^ng¨¤ÙÆÛbÆ Ið6Æp‡=ŽÿßUÿêyTê±Wþë‘qÐ~¹$eþ³ mðú¡¾õÍ·G’Ê^ܪÄç*>Dßÿ¬”ÆzÄͯ½ŒÒÞ“eâGêr¤•½F;£Ê7SšØV»ë6‹@3ø{K¥êÔW@*ŠJ™Ùðyyyðd+«A˜›û´Ö-3ƒ‰*SVûÃù)nçxè‹`SÇ€¶(öî<æ<]‹AôgÍN¡a'8˜Û ÃŽ"h´YNQ‰=ge"øäÕZËÍ ¶ÌXºt÷·Eµ`®Ì3èd ȯø~Y¤äZÀÿùš].ÏiQlLKÔ7A yðd,ÖŠú‘À˜ªùì çK*롇y5Ýþ&’©nÓ­Lø¿ÇÑX€´Y^Ëõ} §“ZfØÊOÕ’•Ë6nŽî½o÷XO-iª¼‡…»âœWïå=Á—öáý í=åY ¬þñ鉨v©‰žæx¥¯è—ŽºÀ÷v„Eäh'®*Ü©MìR3ÌÛ?á«hÞ–}\ªwí\j|']:È åO½mïÙSÑ÷K*ù¼m³éë› ûÍâ’ æc¿Ëh]ó/œf,Ú£W¿ Ø ¯rF·¢€÷ýV¿ÐvHJ§¼êãÕ¾5WutO9œ5(Þìcë÷= ´÷Ð\ &|põ©ø1Kó²‰5‡ëèjÀ¶>„Yë‹(×┼¨__NÌ ç‡´6ÌGÎÉpnʈ¯ùŽÄ‘zTé·Üׯµ4zmð·žý•´à"tüj‘Bâ®§æÒG ¸{×Î\ÑÍ+„‹3Îø›Ø%6O‰øôÚš…–0gó– uƒ ´»–^xø«g·&ØÔß¹Í5ïw0hù·¦}¬g‰æ(ÉmJní¹´ÕhG­dt½³&Pn_ù¨ÆÑöd ">ô¾ú‘¥õÙyaè®×øÔ½Ù²£H².|ž‚¿öÍ>Fe2OÝ»1‰Q 1Üüˆy“žþ°*»:‡ZU•Õ]½mŸ•–fD¸‡»ŸG¸ Hy¾¢Ïç¸|RƘÒ·~¿î¡ùý NÜÄåä)îEW÷¬×bôi°u90¹Õ„†tÈ8w¸j3|0Z¿÷w“#Š$ˆÖìVyLØÜ·`öWÕO‘ší²')ÈZ˜+h`ˆ ½ù¯ ºVI«‹ØÃÙļ å`"“›ߪq„œ'ÑCˆîÈ>Ýø¶1`¾¹Ø#ÙÞäÀòH‡u&5ˆ™îJÆUn Þ±†°ÄÓã´X׺ñi †³J—… µYTyH›Ú3x :Æ·Y“eqo¹€’fF4VÑ.¯&ž0óšÃÞFÑS’·6­!1£ç×h„¼ßMy" òv y`1 [··´î5+¨µîfEŽl8di2ã?4š€¼éÈ2im²ö¹õí…LXraÝ*{=œ-¨Óçl½½Ÿ¹¿…”JHÃ^*{f»%VÉܹÊROΘZÀ”‡ÑºÔ ƒÏ-hú¹ùÍГcsÄ¢åÔº³~Lí~Âxvo4BÐ-Ô'¯•³r#²„†€ž­$wã)àR‚üüºŸ¼—E#Ï@O››fS,×Óyt»ÞÓ{K8>9¬¬nDc°žã%ˆ‰XvX7^nÅ$Ôó„"Z´dé-ã ÁÕCÍYouu:qÜMè;Jlž®–+ënV£½?qüÙBp{OoO…q9œÛHë¤çP–˜š¦úD^'Ò4wäÑ9„B?”0}GÅ9r ‡sd û¶Sã8+)[Mr²rÚ;d»¨3Ó¾,àêšÖ¥º¯ž›Ø¹ ¦¶k”w7ÍIêUÝÏ¡µ9£µ×Èó™:C|fë± HÌb›°BA>ØÙéî(¹gKG…4…sìÝ÷&ÙXq2nÂÉ4­r*i-ùà o„ ƒ=aÒ+Dg)hÔOª>¤ „ƒM±k¤^.†‹'XœÚl6½#:•IF¸Åä:Yñöãyϧ‡+%¸Bçõž2›$™çñÙ³4¹ÓˆêNj8â¼=£²ËA÷bÉCuÁÑÅÝ‘gî£l{¿¼H´”'U1®g÷YNQÖ¼Òx˜°30­Úýˆ§Ú±d=q£Éýyf¹ª=²—Zº M°ƒÌûD)&&.&ÅõK §Õã÷5©P¿^óöÉBÈÊ‚ÞU΋/ˆ¬±q×OÂv‹\ÄðrYG8ôm:§ÓKò›×hŸÓF$!áÚÉw¹×\Ò¦Ó åL ¸‹2žˆVÜ$ iÈCêýå”?Î`Õlî•× µ$ëµ VL‚zoê ,z×M¼ÇòRÛÅsS€fï™¶Æd’ÀÞ_Yî`À¬A­+ý„Ÿ/š-Zs‹#sK’J1úàfÍ©µ_ÏfCŒ—¬öL™"Y Æ^óÊÎC϶l¹ÌsǼuz®&Ú€¨  vº„JP·1­-uµ¼,!¸]^¥®ˆG>¨‡­Þ¨ßå†Ò‹„¶æ}#í‡Èvÿð¸$kOÙ¹åHÀëåúÙpÆr¥a•«žüÒF BDÊCQÙ¼Š¶·*íF,ÌűFH?õ  ®UÆ+Lɽ†½²<2dYš—Bjú*›»™ÞÍn†f®•Êîí½¶­´˜„-œ°¶s~ïë¤^Q/˜´×ʈ5”9ääÙÆpÍßÞv|—4•:(¾<üÑK³ž0 ËèFÅ(;Lz»5ëéž»$¸H÷Ø·h´Òí6¦ Kw­1s síOˆÜÓÕ‹ Y¯.®Žs.r˜â¼#ÄŒ£Ï!rœ XV¨óÓîÛªêàª(ºö;ŒŸ!‡”*Z´x†›Z™§¹^@ˆÎÃhÒ_`Ó¶l 2Ë Ö6#È¡÷0uúNË÷ªÐ¹‚?@ØJæ§ÓàöFq0V¶Þ+ØÞ¶gï¸Ê'„¦ŠÔ´,$êtD!œoãxAØ"(=$b»ñQÕÖ·®²D¯ByCvgd—/º»tÖª\mlxä*•$ó,¼T¸Qò¹Y›G€ÌcëAa»‘©@ôáePˆCБvÓ©bvïl.˜!ŒJÍ]…Ì‚XÜ).Å :Õ>&«×Ý6切ð¹è¶” ï÷¼WÊj :à´ÚîÕ©Ô«hW}n\EæÕâ8‡ç‚¸i” U—Êo†ê>ç~½vvîW¼{^º©Øí¢Ú 6’9+z`©¶›~Óꀇ»ÚSôA:ýü‚ø ¦Ãör£ªöô׃ Gãã6/!¶kƒž¯ñ&ß1¶.Óô˜J7k-Ï/¹´ùAtÖ3KgÆ3KmåV# w:XÇ`̘t¤ÛɶgóÑOœME½¸>+ªfÛ}Ua„ò¶°=bª¿?ü/àç¿ío?À_®_¿ýP4a–0_œÌ“"˧¿ý€’_6]ŠÇ”: @ÿç§óÿ=ÃiJ†öï‡uÑ&á á£HÚé}ÑÇ×ßà0EÿðþþýS÷üzDogp˜þ²÷.MÇdúzðã´ÕɧÖâ®î†¿üG˜ÄTBýõ§SݢŴýþë?ü‹ÞÞ»E ùÍ->â c Šþõ½1}„qâíõÃ;r4ý‡ú –b_÷¼Û+‚á0J Øû½’¿ÞëçVÌ»:þÈ  Š‘õÛʦáz0ߎô÷{…iô^‘ßî,"â8ù¶³¿~aŠ_›ØßÏÆuñ4Ã)ÿùÖ?ßÚbÿöÃ<&ƒ}Ü,1ÚÛ˜üð¥ÅþÜ£1ü³­I<ýb˜Ÿ­„Æü·Âz ·ñ+ý}ºä°ÃÏÝ}~8|ÁG°Ïfû³a”¢iúóÛO`8M¾÷Y-?KŽ|$ …©Ï±ë'[ùP´GÏÏ®§¢k?|È1ÙãUä>Ïdšˆá<ŽEØrõ<|1¿'ÜÛ´?øäUütû7o¡`š>5þÍt~ÝÃWù_ЧQ½¯Þh ‘ÏRÿc`u%õÏMþIÙ¹:iŸ‡½þ퇶š°þ…?5>Æò¥-ú·¸0®²¡›Û‡ü†!_|Ýtä-êó”´_]ö·ìnâäpÔg^Ä¿¦’_’ß›œõ¸®úK>$éß~øo@‡$ȯ,ô›¯‰/¢Rö÷“¿&Vä°Aô ïÛŽ M}ãm+úm³ãƒ}Ûìç>!lÇô˜‰¿ý0½}<¦2ùOøGâ#ÐÈÿþ¬¯ƒ†Þ`ù75„%ûŽ÷“ä(þŽä_6zSL o­þ¨®ÿh‡„S;$òµv°¯•CÒQA™¯”ƒ}mvDG’ú¥MüÏ× ò›¾õå|òüÅðotD~$a¾q_´ýɈ0”ü×uÕ„ÓP¬ÿ‰|¤)>ûGøø‡üø9œ†1ŠøïÑ Šÿ¦1ø+ _GÆÈ¨¢_©Ž ¾ñ= ýˆÓßí{ÿ÷Ÿ‡ÿž¿…ü EB~Úgø§1&¿†ä#J ý…`ÿà=‡­¬à¸ÑŸéÇÄ3øÁ-¾ä¤ï@:u¨òû ý©ìÆtPôWIÒÄW*;’ g{1Ñ$ÃÐ4õoâAŠÃý{JûUôfaý§ºE _)ùë.pÿ¬ìøÐ6ÆR ØŇJÑ#v£ó²¥ï¶Mßm;ŽH}dËÆ™ïˆCèG9‚NÿxÌ$rp~ G™+@Qòðôøx0™ƒ“ä(ò#†Ð ÍüÈ|<ð#þ÷õí ÑB~3”}‘'ÿD#>âF!ä7€‰ïñ(ø«ˆö† öenð' Àáùȡ۟PàG¨uDûñæŽX…àô¿~G$ò¥þ¤l ?ä!¾A^ü=êöÝÊþ¥? GQ¥ÿÿ øIý6¡¾a ó‘Æ”ùZö;ôð ýEËã,J}¤ ňÝò¾äj vø< £_šÖ¿%øžö JHœ8Røs ú”Ü¡©/¤üé‚#O³ÿw=ˆ*vàòŸ$Ø1–7æðírÚ·@r„Ó?–=¾cùþµ¥ÈwV¡ÐÇA¢ð_¬B}¾æ½uÊ,|Qýá7–å¾³?ø½þ¾e*ŸúCáôï-‘}·®Hû@ü]¥?ýý³º:XÍøéê½þ¾_W$M}Àÿ<]ä‡ß_â& úõ; yGP2FQê—Šýý…׃5|xo)ù÷–^C*é?ºôúýºBñÔ°+"Aø/‡ó½v…’Ð?dW ÃTôOÛú6Çš®`ú˜Á?0ö†Óÿ¼"ðôÁ÷úûºBÐ䟦+‚ú#‘8¨6Iü³š"¨?fSdÃtøÏꉠþ¼HSôæ{6ã>üÛq8LþÅí¸GFòvÜæ y<È_lȽßñïìÈ}øžÝ1‚ß…ïÜ•‹xõ‹]¹ïA˜FßíøwÐá‘FÄߘ{?Õ~ZÖù:Ÿ&?¾¥À_§Þ8ý‘ GRŠ MþÈ oKa$†þ .F!ÈaîÏt±ÿ×Õý[Ô ß§ì#»Äÿ_VöOÐ@ãÔÏBÂäg!è/ðƒFñ?à7ü )ägü€ÿ ü )â‹ ï÷ôýçáÇï¬RŸE{%ñÛåÆ÷×$ß]¿ü~]ýrõ{ü!ÛüWç;õó‹òwÓß_ÿ@—äo9Ô¿ê“ÿê’üA|äp!ŒzÛ9X*üi?;Üú°÷ã#vóÅèã#J0I’Ì[¡0„`ðϦ÷îFÌ[ˆÀ˜ M©ï·qDÅM¡ßÄú#MÃ_l¹½…ê˜/â Gèoú&ŽaE¿³iõáŸÑy[ý=ôû•¹ÑØ­/©Ü›Õ}½ ýË6ïYÿ›8íoÛÛ{›;~õ÷Ðô£©OŸèC?ð1—4¿‡<¿€“ôk8ù.ÌyÏ’hæ;ã–ðm‰Á·uï+|]Ñð~ýÃæûDþi9ñ¿7X]‰ò+U+ïW¸¼[ ó~ Í¿%fÿËâÿ¢hé›Â¦÷‹Ÿ¾*z¿šê‹ø;eY_Pžÿÿ¶‚íÛ2·÷ká¾.˜{¿¼î;ãä§5»Uä÷ËY­ø~Qã·µÿ4 #èïM?mª|¿Ø_oœþ~}ì/îü+•¶_è~À£°ö—õ®Ÿ¿ûõÙß,­ý¦&÷×¿ÜøºŽ÷W6Gÿþ›Ÿ¯úûáoÏÛÏ?þ ~¹Œ~SV;†íãÿŠ© Ÿï‘˜qêâê­}´þóSÃÿýY…ÿ߇€„MŒ#0%ë4 ðºWñH@´Â$?7p>}?~Œ»øðá«›¨Eœ´cò ’c¶_ÉaMÓµ#p<Ñüf_^ôÓï`>ëò‹ß»|>ùþOc>ÿŠæÃ—ÅOßüÖæÛ_â|aép ÿòÓ ò™dÂ1!ñ!¦„p–µì*P®˱–ÌÊ [²,¡ dzìù8÷}ÿïmÈZÒ§›ÿ97ûåÍ–½žØó™µ,žµe`óã‹õÌA´ÅJ˲™ü©÷/þ¸,N‡Ü[qì :³gùh)§nǹó鸳À.g`—›È±1Ç.Ù]ÈXO±ä«pò[Ù¹ù çýŒ]³Ê¶îw÷"HàXøyäAó@s?¼¿ B´ÎÇ ´CÌoÿ2í˜Kxkd¬oä£#ím—#y»Ð’ùóU>Ÿ·3+—çR«Î7«r@ƒ5A”"öÏðóñz/ãÖ8-“”Ó&²ìrˆÍžÎ–veyšÐíD¶ÃUŒ÷-”©¢ú-YÓ Í±ï¤'øö$DXx”ÓÆ(Â?þ z•–°ù<”‡édlÉh\ÌžýàKv¦"ÔK@íñD…^ˆ?ä»é01ª)æ5Ä–€;oˆ|W,vëÑñí à#SàEg”GÿB¹,­™ŒM»å.H en‡Ü€Ò„±ªOqÇ¥Nþ=2b³™íU½\ ‰DAÉ%SUÊ‘+/QxŽX%€Ôúª= e–%蔥eˆŸLü*^@B$÷û¤Ì¤mÚɦd&[Z%­ÛEy*kÇ’ m™ÉPÖyxA¿Æbe=g<µ ¿ãÛuó@tô!ïrU¥O[g§H¾Þ2¿=e…ŽÓ檊ÔbŠÍÉÔEu]œ(ó1Võ´} ÎÀY8 ¢ò'àfú±ÚA]Ëǥȱ(é3Í8!ûIlgîЧ’± Ÿ¸p¹š'Ú}H‡_,§Î¾ký­Z7åñXÂܾ•=“î$6<•¢î\Pê:èU¨QõíºY—²š–ùÍéÌT7ï3•/Ii^ænp„(3<‚PéüXv Ò^ʾÎ'¨2êL÷–®Ý{:µ´®\ó1¼øê¸ Ò°ôšCÕÛ#á=FÒ-r_Gi¥Ù¬}{Ä(éއ¥´½HlwKsÌé[¦ÊŠSß"y¸DwÄU›³VXç]<"´Y2jÛóÛ»W³'q}í~Eq ÷€h0(¸Å»z'Óp°²»zÇö‡ü»4³&ÜåäwÂâ•:­¡Õ˜6>§*áršºMߊk˜Üªû;õ' MKgŠÔ¿^úu\SDœ“®Uå‹‚7Ses mÛcˈ;r‘`ü¶¢Õ£©‚ñ©\öN[•µݺ* UÕb6ž”uÃÞ(ŸÐW~¡Tq”±Ç¾>Ÿ¦»,95_nzts}ËSå@â÷f9I£»W:|Z ´1 ð¬‰pˆ°H¾D±ý ½à„»ˆò 2O°®:ö&­ ùŠ”Ž\$P”†¿X -]`ªnÕlqíZ`•žšLEG8ŠW»“§¬˜p“;-ñ²G¸$D#ѹąyð# Fmª7Å0ºÝ“ q'´“pP $c3 à‚A§1ǧ®™ïLs|{›ö%‹i¬3´CÜ^œÖŧ^†O´¤ˆ[㘨}I^ %KˆÌ‘Ž$ž<0Ð —XÝ g4b¨…`¨”ÀY®ª‚§½VŠJ¬u“Š2ÉÛ|­Ð‹Ât+¼³ÖØJFØp9cbÚ~÷ð>%Iw~Ôˆy´…ÛZn{â¢?)™[¼]-3ÍÜí|EP ѩ⹽:sÒ¢a„‹£TŒ(÷öž—>tê‹߃¸RÖŠF%j¹«þe¶ ƒŸý;’¼¤µëYpÖÌ}e¤†M)iÊÞžo¼ëKÛ x /š]naÅLrزÞF¶C^4º¶kõ@3£-IÆBU5ízʆ‡I³9ÚmáÌü¯EÝ•zyR 0æ¬4ÅHÀ+Z¾]?>Ã^Ž‚Ú+˜Îû9´]M?N–#©&[PâOGÂËi`9n?<¿8ÌT%šÈáJ0{Ò v¯´Ž¨uÑ©Eu}†„l¢µ²^…-Êep®Ã#Á+¼{MƒNRNÀ§e¿Æ:s‰Gú=PSkD½?ÌíÊä{ —:óòÀ_œƒJáZ„qË›?ØÁ (ëQíÁË×!œ:>“O½¬'ÃÔº~8Ÿbƒ¼=§)[ÝYƒP-¸L»à$‚Žœ4æÁÓÆ±ÍŒݼ#öWzz@(Ÿ2Ù™Wâ¾Þ \¡ „±IåQŸpã].‰//ÂOºD\Da\üFköŒ`< —ðE ¹R=¼„EY6¥¹á_UáVf®èÙ¸Dã¥òã¶ôŒÇQO»®ñ¾0-©0‹S¹Ÿ…iäÏâÖ-+Ž2WgTç taù…³ =ORý¸<ê+ ¢!íˆá M…o#³àŠèÄ'æåW­˜¶ºÁË)êèKo!ölZè4Öéê'[;Ü( Ù¤çÖJ…ÔÞA¥Xo•ãöÒÃ`Ž¡þ”£6Ìó·d€næ=R˜î¾^!ïMX8Àѱ^(«MVä6=‡ºØFõX7ß)Æ‹.ìºZN“¨ôÅYñ7dš—R3@ §Ó§$¥®±GxIó©ó½+y»8 ×Z»Ï@ ¤|F€ì©G(ÜÀº” Á.SŽñU‘ò†d«‘nãv0Ø}º*¶ìgèJðdo³›?C+oÎΡ*åb[™ñY7}%”ü-ò&´þé•Í s_`&sÑaJ™eU^íÁ/ñÇ;}Mf 2k¼,ÑÖÉË5:¸øü}ª9 Ö’GüQØ+¸EhOmň€i” @Ž ï÷¸m/P1[¤4ž§rZï^Þl$Å1U`zÊURJ±‰ÆN°«ÑÒׄg—v*6ºÕâ„§?=²73]õ–ûéöyK0Û9ŸôÙ½îB~¿Þh)þ)Ðý<²Lôª P¼fØ^R>¢0"îfê 5´¸v4ÁÜ(yí«îðÑUÅW=]žŠi‹×Ê1Œo0<.›ðÊË2Ê5˜É÷K,qmÞxÌ<2‹fì +S}{A¢J§Ém•^޳¨óv7sHªðiS,(.ÚåÜÖÈ’ˆ,p‰,}±ÒЧE\ñ¸ÙÓÁM˜ã@6“(pyèþU7f7Ü/…!^’¦yœ:lclÚÀñg¹.@<‹'g´µ:IΤõ³Ål°t·\ñê\fD©‹àò¦×³.÷tä¡\‡òy›ú{~d!èóÊ4Í嘗øÙá¦qDe„VÓ®€/âž:ÊIGz”ZZÆïn%ìkcÆ8Aïb˜ÏL®¤öm戕 ä4MôV¾ñµ¢#Îp°¶ ®àe¸¢ÉA†fŸÂÈÑ´@6* S“  ƒ‡´7.¢à„Všt:hi < Þòƒfä<ñ4©aQÛQÄZ?-r‡Xò)h< ƒßIxšS$${lŒù=fSÊ…‘`P·Ó…¼ËS¼å¨µ8Õí’þ°ü|Ÿ%Z‚ÄP /šf먌2ï³ÂÕ|BÏSžÇê2£MÕÏ£3©µú1½Š÷HjeÍVâ<®˜dßeì¾µye×uD0óeIÔÓG‹6›‡iãìsS¿ç–tÖIªÃº°Œ¶BÍ%?õ/ØëqJoêÛË>1äæè:S#˜…ûwGyÙ/vÅkò>PÙq“‡vðîbOÚäÁÙ¢#™Nœµ…뜛)_wÉdnã4øJöÊ:]‚–'uŽâ|Å<ÀŒ'jz.q›ª#øc:m“íHÂâòËyµc4>@¡wøY'4ãdÜž×&Ü:s-êžla?sˆð5hl€ew¾ÀtܼšÓYIÎÑ °ZfJeÊ $‘¨WKÜøòK ߆Au<ר“í;“¢¸•†`üü€å;Çkjì G`ya¾,}Àn¬›Š™G÷—£y;ÙSf Égý~À:¶ô;/u ¯¾tÄ63Ý*‡{õrcáù:ïöz¡[)Çm¦‡•ÀÛïz:Q¡@V¡¹ Þqæ§ë@õ:¦÷²”`€k9HYi"dWJ}2h\?”§1º@~¿UYîõÉ¢nØ­+W÷.RÈSZ> ‹Yr¯Š{Mýœ¾.¯gl¾95¿v†ÙƒÒERÏÀðdŒ zÖS=’ñõ`O`‹k4£•— ”ÕÅe†g&jîùÖ§þ©‰µóš_ù òñZd bÍh]Ù|Ä(%¹kÚØwêIŠ/ָ׮õ|U®w&¬é˜\+ÐÍíL*ž¦ô5ï㪹y©ÓËz’¸>Hs„ïóyj}qG§aîêƒÍi$z®ò•2Ž<Îõ‹ÕÝCôšæ8ÚHAˆJC¦LÒ"å•{ó;õÚ¸þ4VÄŽñY eS&¯•ŽÆþˆ31a/×6qAí±ÁÁú±çwOÑ~Qã2KF\'ß“R¼ßP/¼èG™k݈¦ Pº0e– ÄÓˆ3–ùܹèAM£‰µ›É£Á°1c™&wÄÇP,g°„XyFYî°7ˆ¨êLõé§t p2€ûî^Õm½ þ‹®ü iÝ@ÿºPå3p‘«¸,Ê››²½”ÚóA”%:µR<ðfÛ$«;¹Xª‹¥èŒ#/7øZø~ž²›ž›qåÀLÅ7¢í[ùr3¸‡n ᦠ Ãl†Û)¢Øì 3½>mâ…¿gRtMOPu«‚BI»g\y’ã Qªñêc1xe}e ^^\^{µTfžF E†?N™þúˆëe^*_ JÀ&œAšürÞµ®¥«Êä¡h|+eÇÄ娇Ù2G~nJ`9(jµ Øó2H΢Œ`·Ùá_$½±vM“1UQjåØÒ¾ò,ײEe[Oèºö&¶¨54õ¶ô Äf–t ðWûHD çšã¾•0Ý6ß_8«7Ç»÷Ã÷¯ä'èE¨÷¶H²B÷ªZ‹Š;‘P‹¢0JÀåmù +˜ü|?èû‘ÿ¥²dx]Ĩ‡ÎÊÉÃäu76¶TmbQaÝ1ÞØ*æùpGU:ÐךHïç H†cìÆK!·îSD÷~ôs2šÌÓRå'á‚]çO¬+CÝP j©šÃó9çœ_×+Z©ä*W hW^°®çRY5ëTõ÷Ö‰M*xÁ›#¤Ï6¢Ÿ¡ß‚!HÐáF'îíIΓ£?YJc÷ƒýgØF"çýxN¾ Ùðm!eœ©Yß•G¥¨/VáÐÊ 6Y‘hmj<µàq5´ ÕªA¿ÖF)ƒÔÒuÂx`9À>ÍaÚó’ÖÀÑ'¯=‰‹t§Dm6®Ó˜;Íi ­áU$8úž/¹Ußíó¥N¤S'Ôô} µîP‰B¬‘µNCà“çjÑ õ“@¥aVM’®=øêâ§;+Ó¥X-í¼:Kaðy÷ÖÃôæÅ)¨“é3þPñÄ/gv4™Jã\+3LbâDô}ä‡/DpTÖëâî¹sˆá¯™Êm*Ó'X ±,XÓèäåçæÐqxÆ‹UÖíÌÝâyAÙHáìI¡“ £ð:ýRŠ•®©éì8Æm7ç`¤zë„ÓEP‡†.Ï:n?-êÚt÷²íº¿æSOœlŠZ[ûÒ6Æíž÷tŸ—](iùÒ„>Î1ÎmÁºn~»´ÒYY\ü#dr€ž˜-VâzXˆ2ä·>iªú²ô¯°D[zl³$ê™ Wñ‘X38›g3C!6l÷ÕŸ7]*[$ì˜'<Ñ{ËÃël7ö¹D̽ þNÝ÷Vã-ß0Sº,åd?qð <|*íl¶Å<˜¢ƒkó?l)Wpì´°4˜²UÀûØ nsžwS®•w¡ñÂ’,|.ˆœ¡ä#æ=åcÞhèu>¡Hf³âŠZ\=Ê5”bwÊ43âSÜzEº¹Û ð–%V|ùˆŒnÑÝ %“è¡ÆT¹.-ùé gkf¼´ŒuInäeÃåHV *'2^b·Üé)‚7-éžvÀ+rø$˜Ý»àÔ*À Rq9x$ÖOáD¯ÏiF¼Üº‹H—úp€ñÁç$Ì<'G—X¯¼Ë> ³Þj5߃Ž8"¸˜]Ò‚Ûá;V ßw¸Ùö æ†ny¤Ûj¹. ‚šmŽê-ÑÜrs¿3.Îðè„&~Ù¥§ôùR·Á=¤èòàû E®ö6uâhYˆÍ%ïàoÆ™Ås:˜¯^0:@›³Ÿ‰&4±G–~¯nOw¶¥f¦Ç)#"i—Íðf–¿<—n ³·×Ž÷Tc™ûÁNEOùûÅ{{2)à`V:J·ËÖ­ÕmN\µ§6X£Ê9Å"»ç=s±öY>ð«ˆ{ˆÛ$YUZƒ5D˜{Ó«ÒU'5`TÍm_ /ë$R¬ g蹬uñMWwÚ½¨… B3Sƒ:òÁ§4Ûäe|– Nåë°}5ecÔsª ¹üšîY»î…=X 쪂ÌFJ/º—9\45e—ÛîöÊɇ'­˜ v¥“ë°DØH춤¯à,1.[)/¯‹:ƒ¼ìJ/Új¼°ãÙ2š5H >¹~Ìón°IÝYóÇž”n¼=úùñzáG9¥Ú=×ø¤·õÊB•ª®Vriùa”ÒlãÂÜ ÖyM;ëËø¾Jº‹íKeF†ú’‘r‹{cF Àöª¯g,nžæÏÞU´)MÃ;–8ïy Ÿñ˜oS<¸ËÚ¥›¶9\xòÏÃ}‚ )>…ãA¦ž,ùXh@×'Ç€éƒs“6uÚÚ# ^pW4fž»×”Dθ{ÕxôêÑ[ü4N" Ž êΠz¶˜ôöØh–¤€¡×SÑz‹¤©d´»zr *,âì ͳuÚT=Ì_Éâ$Ÿ<b•M_úë£ÏŸeYŒ†6HÁÂÞÎÉ‹®Ç4 tt·ä³ïÊR?’\çp›CãÌ'>0™|5ÑK!î…’Ï,13=3&š®¢Ô·³ŸŠÅFmö­}UѹÑpæ~lÖv=šnìÍa2—+ˆ u†:BsÄ@äòs…Y&Fž\%.'½¼öªÞ*¶»_«›NÕÄÕ[F׸×î^²w¤1Pà7+ð[ŽØÓ+Žõlµr ¶ˆË­{±.YÚÓʱqlæíŠ 7æI çÔʵhÆ%r¸¯llô„F™ŽÁ4“$²!½Ëjª3'<[•{ívp¸ ¹ï(c¸ ^0ftCGŽ‘u~^"ÓZ<›Z¶6P4ª§òJA³}½ž¯5@†ùÍH,ÛZ%òV{‹®E%x†vñz ñE!ñ“PA¶®œ‰êó‹=F½Šî=%µwîØ~{ذàºrã1ô|z5Q¶‹Öð~•ˆ±v¿$¾'³Ó¬*¨”7g(§n蓊FHiWoÜjÞJJ—ñÀ|m ]Š—ðö|¶ê Œ±w [»Õ¨Rƒ †Ya¥%Sö'•áFÁü޾‡1U¶…U…ˆ­ìè&1ˆå!@ðˆ1 Ì6ncwªòuØGá˜&”£;éÆù7Ø» 2Û mÆB4ór[.¤9‹kç¯q]3<:%‡¿½g @ùg{oèŒj´ËÛ¦GÛ ×á$qhC ¤¯ Ã"*PoM9逻èKꀚÝp}ià4Miæ6*a€›N"¨O)Æ4³ÝëÃ9éQÄ÷é@;ÛH×%ªwQù’Ä4ñÌÐî‘ÞíðdKKÀ/¢jê¯ÇÓõ ý»ójü|d ùNɶ}¯É™ò#%{êé¹óÇ'$°Dœ>5cÓºd»¤r§Æ3JßWOt!ð̘üºq›NPç —Í±u-¯±Û¹X·ô¦ \Wy“W Ÿ/×'eM…ìºó ó=þôáê@jJìŽÈ”X[‰î¹óR€5oiž{q#í!Þ4â-³46Û™Ùšk€Säm½?ò¢óSúnHû‰ÊKZÆ®¶TØRCŠö<¦8À@àLüúÌ$? éfŽÌàJ⫉ûŸŒ9 3"\h³åÖlå÷AÛN0âÇÍÒ.=]Ã’mgñ6ÝÈkR6™} >ëÊ w±![ój‘G*ñ3˜I†¨ÄJ+HëDÖ 5'XA H™-œÿz{gUÙC:zÎä§ñÛçµÑ§]¶f!eøœ¬d hÈ÷ï4ù[gD)ÊûZlbPÇšÜ*ìu÷äH%L&" ø`ó{Æ)–Nœ5ofd¾ÝçÙë{L\Ò%g~,õ‹BÔŽÂÕmzv°å £†x)'O´¦ÒkÔ¼ìK»¬ñiÓ™KHˆe«¼½N­l)nÇÙ#"4¿ÕVP¡óþÛ/Ä'ó#«Œ„N§· U%Sv"¬YÚpÆ…)ÕdÏ8#ÁëZù8e,W?¥lj%éCa¢DHHZ#nº¢óIuITñ€ò‚¹Œað×Ûà¯xàs˜X+RgÏã;O½™Ïn:i;…F¸‘Z. áÜ[vwŸ.KcîÕ/ìÙx B;W ÈBÝŸÌh>¯ÝIÏÚ(Òj¤„%ák;é½I©Æ‘j%…o&{²t¦|@3“p¨­£ÑäI&sÀÁ^…l¤ìÓ™hˆÖ ‹®þ Ô»ÃUÕ~Po*ë‰(iõ”¶â|¤<£\c"sú+?I!Óõ²äO ¸k\JÚaS®·z»ßêæÌTZz¦l²pvx{›¶îµjD¨ìаHé]]s¼ªÙ 6’JTmà¼Â­â!vp¹ƒI\\¤‰J«pô>]¬µõTqp¹*§ô˜·4‘† tº Î.?¯æliÕf]¢Þ²T˜N¥ƒt)] ²$_Gº¬±Di ÅæGœ‰Ï`IšÆ4AÃ5GÙ¡(n§2ݦÇeqµí°p~mz?ùœÆ*ýzœC%)ÖÛ#Õ'Ÿ±©Ê¿³°›inl+.1gfF*1ay’½K)'îcŸj-ìîÔƒ¹M7So*m¾å”>c¥³×I o´Š+ U#b\ë¼7=Xü¹ÆžÐ]xR=m&÷l€ Pî[‹p€Xâø@xÙžî Žï²'šò‹WÝ•\³2Õž‰]&=.}!3û:$®rLOs7mömì —ãê¤ÕWÀF°Ë‘J¹W>ÐÅ0É!ížÀ§š{ÛB¹ÃÆ®cl¬¥vfêðvMóÈIõŸµ´Â.¥QÔG²%.Ͱ À$=×#ƒXÛ¤ÁgÜ}Ûµ›Žœ5¸;~–MÙ%¾¿Eúƒ4½%ƒì‚Ñô`ªèò†–=«ê`ªGþqAY¨Ñwíu²læ6TÒÈ-šv6"L9Õ;Ø)GŽlD¨.ªGŒË£,N¬ ‹¹â`JîæžÝhkœÏGµ¨Ñ5MHE÷¶–ªlîMûžæÅlZt“1eÄæqµø÷Ó\Áݦ%£¡ÐݑѶ=7Qa_ŒT<®ÔûJ šo67ºEŸ¥wpÉ^nÍ3RpOk’îë+åqJ3–÷¶©[– ð‰¦¹à2§ª:Öu¡2@u'-пÄÏØ½‚Dóš(L‘ƒÚ­Í³\bP i6mwdÐÔš?•4e¦V{yXæ ëìüHÊ([cEÚ}ºÔõK›ª†—?r… h©›)Ð.÷Єê eîÞå1>&M­°x«™ÕHIzD."ÞÚä±Hå×KsŸ+u”ɇÖ=$°û—…²¦«Y?ûìÓô]>Ææfµk%䜘05·ÕÛ^CÕàC0ö¶,Ç1@¼UW^›1ˆ¦×µ4~½H†¢Ì à†Ä—VgÆ»Mñ35|ª]„Ƹø}.³%Bð.Gï ÍÚÕHßù’(í Š’ÌíÅ¡Ái Š=å-gÜOÃp=Âø ÝÏéÁ±!W>‚»þô¸¸È¼€>(>š=åTeå©Ê±ç$-v$Ѩä`kš· ¤ÞÒ˜BUK¼\A5éæ=°v…|Öô6Ÿ¾¥AÀ)ÂÐ4úl.R lHð‹c$Éõ‘Ÿ/®Ö" 6æ¦Ó©„oîÏRÑ,‡#ªeß @Ò ÕLe«5é—ÁŒtˆOtƒx*¡›tgÊxM¥uÕâ¥ñNÒ¡[â4ž¸NÙŒ!M—)0 ùÚiå8RPfxô€kT&ÜüŒƾt¯•ÈËô@ŠH¢âƒ¸,åÖƒHD­î­¼®%DTPtÍâ–ÖxtŒ=FLwÑ8~Xù¶IJ/©Y¸yãi¬ßi:eb!ÓÜÒ"®mÚ•&鄿AèG‰Â&¬£e[Ðíñ4dµÝ_Án%ÀÉž» Ý­ŒÏ·'ÅÓò„Ñ·ˆ69I,þÆWc¡Ù •n®p­œÒ_gY§ÓOprŸóžOFÞÂùAB±Fåg¹ãÖbn‡®Ž\&X‰¼¿EÙÔ#c©ªª¦q®d LMÈJXÆ5¯$…/uoE 冄bV\L¯€ÂVk<Ò«<$†C‰»:¦±êÜ£‹%­Ãê}½ÝrGQMȸ´/ ¢éÅgåi:¦ÑŸAWŸîÓ)/ÆÕg’P¦Άrö&÷9:oG( ^…œá!ÄaA†÷Þsúe6Û`G‚îßïW h”YÛ¬ñuv=‚!õ·Á±OåßoUb¨ï“FSii®ר¯TÄ#Ѻá^EëS…«‹›WÊ{‰IJ6|šDIå‘€5Š`ëL^oÂË»»*f2 – 4m ¼À'é|¸×Ëq*–T±QÒ¼J¸Ö!’7…ûýÎùûiò'f‚ŽË¥¦Z}uQ»t©Šõ4wÆ ùã=³ ñúÞ25›Ó×|)ÁËýPº )•ü¢øl(3VÚ˜ÒºT¿ºÎË*ÜÆ¼µ|/yä~Âñ!£¿÷»çÙ‰·ii{7¿Ì˜4¸¡ B¤)ÔË Ì¿•Xçæz¤>NùPPžÃÈêû hsÎ#B±Ü):íÊH!ôïwÚV±½ŸZQž7•J/ä¨íúJ¾ÇOß³£ÏO9ž. zeÔÝö –êc–zÜ—’ÇÊkD Tp ÛÞ_;CØ+“ÖÄÄNdó+ظÄåíßF‹rý Ù‚‡U¹Ó”“‘àŽ³ÙNspÍ)üÒWo•ô^ý¶Äzù=ŒwÊÆ¡ø^ (|Ìé™qÁ†¤ßâ.‡ÿòº¥ DÀ)°óý¤A¸ÚÎ1-ìûÂ6Is0ÈÕ¾ûiU…GÿÄò }P‡eé¶§öÝ&i’‚pn¤.óCq€µŠ&§ßó%3äøFâÂo anj$™°Ï{v£6xܵ;*Gè>žéûïÂ=ŸÊMÀéJAgÖ!Ìù¾»·9¶‘s±üݪI†‘|-kë@–…97½E+'8 Ò‰pc{§ žN9!a+'§ÞÚz»d¼ž©÷6 ×¾ˆÆø_ƒ1sˆ«U–E,K$2ç;-—ÿ1Ug‘,+²ùýüf»0)©ßýúÙBT£Â³±nOê™ú‹úPX+^\áµ,óìD´ÏÔ#¤ò!hKq/=îKN}·£¶ÇoCJöã—Úé°LGNQ¾ºñK´/~\g^lâVŽF»â½ã¸‘1iØTS4 ¬O>KH7àPÏ4ÙM ùD¹@Ê5EX¥tüÙÑŸ×()쨜—a®æå FYSdÐlË¡ gŽël)G Z²yÃç‡U²BǨýu`z“ÆøW•}>hûD³õ‚&Éô]†:›ÕYzpŸcÛ‰“??_©´¡äö2cËŸ\¿^úìKh 4¸O·«%ö.Km²¸„Jû¾±£<ˆ¿º7ÉõB dY—bP6º°Èú:òü-…‡–¼2IàY*„édÛýèIÀéÉ=ßËÝ,µ’Üïy©¤ÀÅò¬ÛiK™>~àÎë¡®*²#ޱ3rÿ? %6¦ð—R:†‘»S‹‰@ç߸<ÒŒ}±n»*h"Ìl>Ð$x¯sÁPøp‹ý´¯ î:œÊiÔ›TÜ’äuñ©8Ó©ßÍ+J¨>%uó#þÖŸþ§ü *)Þ!‚BÁŸ @Lê{·ÄR—Ï5ÀíàNÖQíï^äôs{à]{ÌU1h i5j‘fGQÄÌÖãÅÙÙg®yù˜´˜[$Ã?$tÉ7CAÊ(ºoÝ4CYp°· º¨ºüOÅ; 2£±±™w6*DæÎ–Û¼ÊNòm0æ´öG;*æ$¤~ Ï´•L9Þß÷Å ôt7´Û‰ZäHÕ·‡t=‰í—•)VLÑÔµ@C¬»,–ÒH‚;yš&ú^ù ÂÆ€ÜNržj/AVUö D«öÒ¯ðm7ÉÇëöª°ø_.ŠA&ñ(kÙÔ8íž:¥,ùNãùù¥K&Iüô²cãÐI%ÆœÍþŽ(Û7Ã<›2—= á$ƒó×,²æÖæüÅ®/Øûâ£ëGÌwx& Sól¼|ûúù=u˜Æ1²_nÑ|¯Å`L&í†"…Ÿ¡?Ëv\ü•W—¬Åu%2WæÇ‹Ae²ùŒÃŸ>IVåÊÌCeœcçÔ½°6ü`ñïðµ¤Áó8~nfº˜(þGg{±Ä>ýd·l¬Mª’)f·Tu§þý¡¶®·<Ê<ä^zñÄ(L÷º:}™ÉθR2ƒE Ã8CŸWçr!úQ¼ó²„E¯…8©Ï4Š™´“‘jkñU”ºòºC´9¦Ia~â|=~wÚr'r`ãQLñ°ƒ+òFšö3hÇ$Éç@O\kr <‚¡^vÜmͶﲔԽÓî#„éù›¯…E‹Î“…°¯Ü½?¿íg/c¬ão·žoÈV¤ ®Ò|Âg¯ÆÄ*ý´ƒWråÆo‡S!N¤¾ZìF¾7Ó:X(x¢g‡U¼EW¿ñOîgB¿úÏb¡$$‹>µZ(v‰ŠM4:÷b¹ï¼S]ý„1Z[ì#c@d¶pì Zõùëqbv¬Y?S3ô'™g×ð‚_mîTÑXUô^•_Çã‡^2ï“EÈÉâïÌ¿#ì5pÛ?V"=Pj߿ߧ4üïõ·…÷Íxþ¡a{yì q2ò/Êkc\ìð«ý ÍÕå¥Êõ“_JÁL,Öˆ‡èŠ5T‘ûÉX<Á1çï%D0œÌ—î6U®Ý­Õ¼tÁe>ç#žIžé^â/Ãy"F€õ÷͇Lé‰äjïi“Ëœž†U™€ÑÑå|~©À ýÏê#eéý7$T:Où K¨æþ¢ù®øìÀZÚ;52TØÅ æ˜..Rø€ÿaË" °l…z $ÄÊ‘?]b¼Œðœ¶y¿Æão’s\jåÊŠ}¿‡Aúu éŸõ|á1‹+ õ¨H]â3Òî/¡ië½ WýY8ÿný÷äíÃèÛ2ô5Ÿšññªèo!¥ÿçΊvÈ×ôjÔÈ*¦¥‡õáŠÎD¬†¥^íù;ÿNÆŠ#ÆG{bêûCν}Ãg…íKÿjk]÷݈ d›öøèlõÇ?ÑP›Û±¾‘eÚ¥"÷ÅøøÈUﻎßεqg˜&I?N×»ˆà³_'å4?¯>^ˉŽdX\äÌ¡ŽFžÀ¼-û#KUË, #½ùàŸFµÕúz‰Ñ§†£,|î7¼ÅÑy;?ÙŠ°íÖ|Ä"ä|½Qj…Îù05ð^zêK0ŒÐ3èJÛÆ*·¶`¸Ìç>AÆ5˜ýÌz²;1W·X‰ »ÛXš…’»è«Û—öL,æ©Õ‡¯Z3ŸEäÕ ,«0í˜7áÌRRv>EVÛ[jí)ZÒ½êñ'‰«rã¼fÀðÐÍ€ç±ÂY‡å¸,[ DÀLˆá1†=XeÿIÚ-S½Éæe4P~ºCÃ/øò2<ª ùm Ô©—Çå÷ W%øåzH][œ¯ÃäŒ|C Ãà Hâw&Ñì?:Ò†ÔZ¬ 3wÄ–ãbö= ¯ÜV“’öðT? Á¡ÊÊó8J¯„‚A¥ÀÇˉÑ^‰?ÆîTÀÂKCÕÀúk©lw_C§yXø-mZ Y¤_ÆôóšhvjÏuã¯{žûªÙfËmTÓëÄdŽío‚”9y¾“»«äwHUXóëAÄ¡O×gq…}¿Dgã-:,Cý(äL÷Ž&íÆT$1­x6é ƒ³eÅÌ‘°åžìŠ9Õ_XŸY„™)¢Â8•dúðUžeürVìÔ§ÃÒqŠMŒ ¦ìQç¥g –¨¦b*<ßpLôdl>a‚ø ¤kÚ;´C: ª²àqM$ ýä1ΤN&‡†‚B“oöïî7$}Z(Á+<Ù|gz*…ç ÖE¿ß{µ¾ À±I¥óòèéŠflcF‘$‹Gìu©„uÄëU‹ŠÈÏ—µJmyèêï¶Wó3Z„šˆ|Ë#Ô4*jG'rÎX’À9²X™o·ÑRêïG{lŸZÁ*—1¸òoq½30Z‚E߆Ü>Ùï'ÿ`ïÕ‡@ê´±wýæ4–Õ;V¡ò\EwÂV+‘¹pÕ‘ƒŒ?À,IØþmºLŽb‘`Î$, É߀j>îî¾ÞD¸á0}çe^Þ‚6AycPŠÇ¦Ø(¹Œ¸í~H£ågšUaÕlhOåा "µJ€ŸmÝöÕU'á&²žÒ¡cq‘}vÑ<†Õ5P°OÞE\ð“ËRäOc\Ÿ¶Ï‚̆)fPb!i2«ÊÕÔëO H¶a–š’ÁÆ›¨Ÿ‹žùUÜç4CÁx¼>ýÖ"¥+‘HƒìjJ10è÷ë~“äË3øÞ®K(T—áÇ×ëÖƒM>Mô4ú¼ª–èò\­¸$ç>Ÿã<‡OHošDâ¼à!HXoŒuÛ8î8oz¾V7âïÝã9ìü ’ß6H’Í/5¾s’å¾rO 8Ùì’V\U7@Cı –=þ’ÒÊöiMGÙy¬å·Ð»ñÖÖžížy'é—ó­Ø®ð }#±KG3Û;~åÛi©pãA8B¾¼Î–É À¥ÜËr­|ãC^«"oEé“»(êCJG{aG¨Ä›}3᪦õIJ?ÆÏ̸~X‘Ì&©kµr™Xjé^®ñ{µÛȰ¿/Ò3z°úÍÎù*Ó¡!”¦êL£Xè×#‡õHë.¼¾6_*r ›9.["­¶éš§åm€¾e³ù~¯ÕþU>¬X–ID'$¥K8Oøú4¡ý'iâ$ÈäÀ@rÄ6Oo>P"DjoéS„oüÛÐüê2þß÷ÄÈ V¼ü,oF|ª}ÞlPIÎ)~†ÖñØp€× ú]€¸™Š­Ã¬Ð?M¥)¨$Cž{TÈV‘Ï$ç~ßQÜ`W2aŠ`ʇ¸IT‘6,¾¼0€¾vx¦…‰{ïiÄxƒ)ìgâCù*qš®?áó?0N¸óU¦»;ÎÝŽ.3vÜœÉÈõ“ç…lµõ^!¬wnš²¼Ïiæ4¤É`ÁÜ_íñ »ƒK„à +œ†À|”mLy‚Æ(õ‰Å0#ì:°žúʇlaHø¤¾$Év)ƒ»ÒiYR>ž¹ Ç¢ÉÒÑÒíPÓ»PhS«ùÝùÉÕær#ßþÊžá:|µÐßZçȤC»g|йñ/2W¢MXxÒ ‘ÒŽ= «Ü»É-‘)A`ã•#Äx¹¶;äB¨êGEø¨éqþçZr»p ®Ù3=¿L©„7½Äf  ¯üîp‡ž¡³ $8Yâ“ÐþHÛ£#´¸Ñt¹Oˆmî°Ê†ýÇ\S×£'ÅKœpzëPÚt÷$œo‘å. Ùqúd8#ãÄPU’(/%1F¨­ÑD{Í)³¿ˆEåJŒ}ý“º®§ê®¯‰%³ñ±‰øõî~¦Òéâ™È½‚R³F¥÷‚ÒÁ±ë¨Z¤²Ÿ&Mæ®kL®€… ¾l,)ŒÁUg-+ˆPe¯ôzÌ$‡:m;C¿Gà,ú”>Æ»Žó¢|AN' ]Z4” y“‰0WÂûÏŽ`ä ò.¡ß §6E¼4”ðôG†¬<¤õžÓ_òæÉ\ÛD<U·Édf:½vc§-%*]Š¿›hÎÔg ìÿ7öøµ¦3ÄH§EqV`ÏÊÏGŠlá½ÿ)¬-&p‰þªqÎ/¤ŒaV¼EšÕVíd6÷ cü±!w8GóO“ ÑÛ‰AH±¬BÁÕhˆúMÞ‘«{Àz¿l~(/íUIgð‡æ©/Cö]7q±4>;”Á̶ќ0 !JViž6rZ8§F¦¾Þœ|O¬êËû—¬ú¯ð±‚EØ è*Mý%^Aà%©gaEWB~Czäm=CNèבxEòŒý¾p|*8C‘-ѹ´åjw3Q€Y®¾%±1[¸8>w¼”Ro«ƒÑrQaö›® €á–¬;þ•þri~–ê½åøûžÇ\4¥®~¬a#â˯J,ç!F»Q1š• ¾o$\Â]bö~@Ãú»Ù&Ž%GBÝ!®²eWñ5ÄËòô§¯*'û%åV}]4¹¼@욤}çfEÕàÀ%³þ®ÁÓ¸~ãhÏïò/Ø¿‘–gœˆÄ|ÍÊÓ’ž\Ö†7Ì´M£íáÅäšë ÙÍÇöÖ \Ó9—Ñu*t(¬ÄLGßݺŒŠû`fUy4rN¹$•;ÅŸQíõŠeUE,~‘QÒdz?§cì2g(0ÛP3Dǹo¼ãû(ikMš¢éO=‰-@¨â1².ü”?ŽÆ c¹d=¥ ccBÇþkNˆ«ý.¯„gBOG}'ëΗ7[ù’Ê–…µ\·;‚.O¶'9"@7ÎZ´·/Îö(¾ègÒ,6å„c±°3ÉÉÞ®øôÊ»ó² ÑÊí´ì‹IäM>Â>6€asïž‹6ÓrF#ø‡†É9#äѧ¿Må: ƒlk¡Gäب8øÒŒª'P‹q'¬¦ƒ.LnÞxÜ‹Å=E¤ äbîìȧÇCá@Â6ŸÛå½&sñj}q:÷é]ñà÷i–+óg¼û’lÈ3.Œj–Ây¬¢Nzßk†`,½RöoÓ€Gj‘‡ú)ç~ªøhìwxM Ø'Õ<ò` ùý —À!C¥©Óu;eäìîýÖƒñ®!9$k²²ªû5J­'Ïâ£×°?ݼkëWÛ0ú=•à|VÇìÒ¶¸'ºë^4\ð(Ûýšá+dÇ'“UkNo¥ÛÌe·/±ÿXýëçfƒfv=>á])Iü¦K¿•:Ë«PaWÚ:¡ ÓLøÑW½ôj…ù—Ý2¶2IùÉ}?ä¿DØ;÷ÔØí#ÀË”¸Oæ?½V2}l-£‰+ð„sÄ$`ì^eøp(Ù7”!·÷r½nVöîÔ}§G rcU~&¿_a¡frlk)Õqñðý3¯Ÿ Æ{¸Ò6Ç;÷ÑÔê¢(ä(ye¯ 0˜-À$Ã.«ù4?ôôT'}íÍ ñS41 $“5*–e¦†êó¢éîÏx%wŸn¤†Pˆ˜E50׬G% Kù à,éT–‰Ôï£`²‹ ÄëT “Ik!|Ópèä²ü¢?Ùô!w© Ö „Ë$ˆ<ؾ@–öm’y ¥éS‹ æW|õ{ž:Ú>ÔÓð§Ÿä•¶ ™±ltM(‰ZÓ0tÚ^”–„nÆÂ-°ŒâZòɔ˛ Ÿ¼—{à ¿ÖºqÑ]5ÈÖßCtO<}‹×XüÈ\=]÷’†¤eò×·Kv”W±Ëß­1õ-N,¼×!sšX^MdçNÔà~êΤ{F´ûC~ÉtvZ¡¾ò3eµWÆ«»D£j©æOŒâ^ ¼ð¤W%NÖydæ}˜²vŒLìZBûìœÄ4õ”GNAÌ«³Fó,¡kÚ£9ÊÕG S”9z… 0ï~c ­6XBMÙ”#er à^3‰„ û.ÐQ%'Å<˜M\–Ñ‹L›³"Û*^ÑšÄA›8ÕËØ–ÊÑ"’]<àùêМ …šGHº{мƨ¤ð/“}|#¡“ðü¹¯Ëht ŸëÏÑÀ‡å¨ ÃÈa“Š%¯³¼Žé‡D8¯xÍî —SÕÉ Öþ=QÏOY.$…¦í•o7ð ø÷]³“pÍ«±Ì£íjÓp£I¶BŽJó;3–%6Âõ±‡e=R‰³¿s†±ù²Mû"%~ÆzHãË'[5Iö;V/9[ ¼‡n)ÙÚ'f@ÿúù(ÓÉðÐYÑD~HÄ’Ÿq`¡À, ý‹ØÜå§íûS9ëä~ íÚu5AÝ×yiN¡Ù³ú µ¡Œ=ðè!K÷³/÷úŽGü=¨o‘ CK(zB*'þÅ"z–Ä^…™ZÕ†”÷ýJï}Þ¢%ýŽaåY²7ÒQIa£ò¦ž8rPÁGffu+P?Ÿµ•2Ê$¤¬º®º äãû,,!kº…¯• ‘¨Mº´¬ÁüÛb®_rA&ït&è yN̉¯KJБ >¼ë¥+’.Ÿº·£_¼ÂXèÌX\ÑëØkíâ1X&Ë ‰ fZ+Þ¥º¾^Ëcírñvš7©À>£úèAûÇ yF~'à÷¶ð‡©?)Jêweý½y3‰u !Ä¢˜ž.ˆU°×k!½ïõe—\fÙoõO29¿ÙGÃ_2ß@Q)ƒ/÷º°tï3bæ‘›4ü@Þ×Z=Îæ;ÉÂ]f*ä÷µ}ØÕ¶cÓèóï/ŒŠÕ}¸¾eš úuëzvuåçð«„…¯ó àkÚ»‰©àÛmÕ| е©½T¾}³Ç"©+|×'žGj›óÅê=TªMùª«Ú½ÑÜ*_+¯ì ‘~‹ï=,ûTP#SF1zª6µé°é:“ÏaåÛAD9X°(&9~ªã$‡7eäü— u‡8Åc€ÀÉ4/ÂÝ-ðñ‘±¿Kh¹ õ`aîd²_{Ͻ¦&/½<¼\Á%Íé^‰ RÆhsš3Ÿó¦õ >‘€'EÊÙ Ïžy¡º3¶ÒX’?dÀ?Ð7êü0†«­L#¤>­Í¯¤-48Œ¶yS£"J™‘'¼pyg»hyyŠÛg.¹ãöróÂ,zž(C[~Žîü²¸{¿}ÓðÎÔãѯ¿ L×vä¥Ǻ €UÃß¶*Iý«žo®áeíGÊŒ¿½Ï¢Â=êúáM%q_Tx{©sèḫÂR…;÷ÊYƒ{o¸ÃOýr7f+ Jþ¿ý«}žU^Ȫµ#è8ÿdTàÊÎ_¥$òÛóí[ùLÀÏyR]"µ%ËÖÃZH}€Ö¹œ½ÃUeI‡rˆùi“y³d³—\—õ×Üâb¼G™ IAÆè¶ï¯á‹ ‹Í‹?Hϳ„'íNœüÉrˆá4ý/e–ý¾re0÷Œäú½Örõ!)-)Ýzø×zQ%Zd͉¸Ê7ìR<Ì3¯' Z$³ÿmóE6uX ñzPòÝ6,•x¾…[ýh7-%WÓ ùäN1?[öH5®÷&¯[D 4òÊu‘€÷Ùù§V®âš‹n&Ó×Û6!Hxó Èb©uª!väÀVe1ëú“ޱÑÅÆê^ï)Q¸Öζr@I²å±ºð‡úHCý_ñ™Á᪇x0ˆq!-Q*ø÷‡B +ÚDWãÔz·dÎ/å}4y÷É·?£˜Hçâ± »L™,Ÿ¤*—¸p±íYªÙ•%J“O¨ÔÑõ¢ñvõÏÞSߪã}§2^ä´]•+¾Ûõc/û,÷”¤=¼÷TÒK䥒 9vaå‡$AO`.ûù¤ÔWŽ{ûT¥ÔúÚ¹n±XW›é$¿FâÀR?Oå †ÊìE&à]Õ¾‚ƒ¾^¿Üþ¾õæ×Á~ƒ›QÀydðžàžÜWke­Ä²ðL}YDÆF0°„Ûnf‡ \AùêFp¢Ð‡r—é´2ѶÈ9»Êó­doUø5}Ƙ ¤$O#À€QtÀÔ³ò1£ìW 1a⟊1Ç—¼þøBÇ~Q .?1§T“5­ò믟PoqE@,Ýq‘Øéü-–¾‘ka ˆ»0ÌRÓ¥¨Gc?xÃÔGP¾yzÂàñ¨A­løéŸAãdùa„ðšaú²aÌ'E’¤Sõk/çe|™$T+Ö»:Ÿ,ãqÙÖç#Y00>xÞÔµ••$™é÷…¥A"Yfã‡yò÷rI˜.¡°Tl+7éEÏø×9Ï4®Ac¯ Ü+±^!]ßàåÜÚà j1*·“"L„•çô7/f(îM´ÇôãVÎZzþ-èæ‹ñpczRîlÀðá@•<6á íðWýnÉÄ TäDÕ†Êc]> ¾#lù«Î6'Éç ~^±V9e¤ïâ×}×!¼ŒîÚ³yÛÀðT´å(wRœìjòïz­·ê§R»ñмéP¾D DKQ²Á‰ù«‹^&{Å×¼Êê~¦GMpE„¥&ãAšò¨^V=ù¤êçµZ¼ª+¨ìSþ9t¬}zsky f|Ù#þ>n:ã[¿.J"60Ø|Në`@}Âfy‡K9¹³|F0}*M“;ËDýxYõÅ2¬Ó-ü’ìð/£¬%«úæbcé. `ø§‹¬ÏGÓ‡ÅíËútý&—ÂFÕq´ào}ÿR’¯›ÞŸg ¿ãäúÔÛb=`LMqgcÈ¥04MàpŽû»[.G)V¦õ™Bód•Õ#eüÜqÒMy*ÕÒÕœ ¤¾óX!]dâ5jäaIú{éiÒžㆵ°^· ÓK@ðwW|8¡^6}­iþ5ÙÝóX­tÈ‹§­ŸÉÒ'•uiŒÃ*ýµ¯ cl16ÓË‘)î×:D¥ÆÎ32ûðáWo¦ÈäÈqúù¨¥"Iz¾qWÄæ“ÆKµâ |ØÈÄØ±+7o]4U1ûwùû¥ÃMúä’S9‰®jÉçœß7-Îèí³Q-wÏäºHzú§±‹ï)¬ µŽ#Þ¥Xn—/pFÄ×ÜÅ:8ªùmªƒ©0“2a¿ý0â(ÖPœã£™pù¢OY8G­…S}"S7r¯Pê Ù²¸xÖïzñÐ÷…êÝK‚B2ÿÝ“lÂc(Ò¨Wä^ªn=z¾­{ˆÀ&ßkõ-;™9ä%¥\úàá'ñH_@W…àÿûóiQŒ ”cÑ=I‡õÓ)ú™F¯îrSó³w›~-ŠßQ’aV÷;wnB–‡°e¶{g`?t '¡\2J²´1˜èßm<¬|ìú#ì¶ Y´1!Crñ›CÚžy~Hÿè’býL똋÷sÎÁu# ‚l[.xB`€ú]¿åÆCÓof ~äËÉCãÇÕGaDÃò››§s–,5É7tXŽXŠä4¾‰'çv\¿º‹Ã„ÇØ/õ5€–㱇5FÒÂLZßèì…I„}w÷¡ŠGÇcXù´\ò[>Œb5÷”U†ø ø;(zÐo³å_ |Biò‡—N2Q/'n4ÚñðGK½ÎÕ &MiÎ÷àò@Ì-é§7v>xs×¤ß ~ïáá©õ’w<’ì÷K'¿´ñŒð2‰Œ<‚—™wŽ bÎŽÌXž” T²zVƒãÝó3EÁé—Ã;]ž lÎã@¿täLª—÷Ìʪ\¦½¾³G»!Ý×j<-’(†õByô$ào%¹«Ã&—ÉzSµ(¾¡¾Ùüm°'— ö|ot4Þ%¬Þ_‡ˆòdæb÷¼‰(MWÚÙ†Q£pÁl‹à3«1ÑpŽç%­ÖŒ“ÓùuFÃÐvVˆvž6ÙsTOÖÞ¨©N—bÄÏ"Þét= 縯햹¯á(ýdÆÂ:Ës;±K |’ØhdC%{iî‹ùz'˜¼²ý¸E®ï(ð£’þÚ¯áJž¬äÅi¾Ñ°bŒ¬·•uÔ=IBöòtóXo6d\+'nlªu^Kû¦-?5oŽ,mÿgÜÁÑbô÷'¿Æ)îëó+íûMŒ Ä\²‹bú¹ù@»y¦^(𣱗eAy Ù¹%·õ!)ïe£½¿UyyBk±DñMÑŽñ²¥j‰c ‹tØ+“•á1ªKP«*SÇöÿ»^Ä11Úø4¿¤‹ý¸ðt¸~N…w¢úKìRõD²:Þ3¸##P§}*7Ø2mÓ'PßKôZriˆ®æoK•×â-¹¾HAyÚ°4ˆ·”!$ïÒÁ”eò³J.š—“LêϹ¶®#?QÊè¤ zR P­ˆ™•ôõÂy,s¥ôÉ÷§9·gâÔ*˜?¤VˆGuŤE„5M|7Ée¤×Pˆ_1ÏàTéî ÕQhJ͹L2 „ûý„O»(x¨¬È!/”1UQKþÙ¸÷Æž’Û_Â¥Kõ ¥q»Þù¢Zˆ˜S„Oÿ¾ »G¼Iõ¢Hvo°›BðL›ÝOŠÊ©‡­iƒ}Þ+Bûò¢øåiï¼Õ™¿Y ‹‹í¹= øÛ™Lšc³¥ÄÒ¥#ìç§.—NZàˇ¼jâaƆUyÎÖ÷kiã9½^Ûüèͪ ½Z ̹ñCµË@›˜yx“gÊbbG>\±@­ûîÜÁ½‘iBXÄKú‹ÛÞ~JE5Ý' ¤ùU3‚Ž7Ú¬þÞ©„²Q+wEQW™ºú€B?KÚ êU€c]WÍÛ¹¬¯,ý:ïÏœ勪(ûÈh.«úEÝÀI¢ëMFj²MŸ&í—Üîð5ÅóÍOÞV6'f›£eÎR®¥$ÖïºdñmÒƒ§òòH <’­+æÕäž¡/olÅ};rHÕðÀ„z:¸\¾¡#pÜÕ"AÒgG}u]30·5‘EŒ¹NDèª5ͤÂÚ—Åy¢*F$²¸ÆÁm õÞ×  úšHN–ÉxÄáA°Gq»éigtíåq° ¬„¿ÆÃÇ*°ÇµZè˜Ä3qþ, ¾{#`°Â¹‘é>—ñ@(å)›«Mª:©Åy¾§ õ÷F9¹¸i¾š¬N-9„–k|OÍžÓ°—ÖÇ+¥e‰”#9¤Vød›ÌR}H슽ÜÏÜà§ŸwhÌ 5²çšu¤ÍÙ̧œ'ÁþÈAíˆø³8½ÃU>”àsZu/{$o:€Ž#©–S›cÙ|œ¥Ḧ%ÇÙ@ÜÊ,ýKªœnL¸vÏU=|u´p•»7Â8ï~’AŠr‘(ÀjÕ[²³ 7væ©´å’’»»CGF1¡Â´H¶ŒDw8­u"$sðÐÂØ‘Ò§Ï5)cIaCÓÆSd\]ð{W׿é¤|LRÔuæòJùøb¼7XžTöé†Ö˼FÜjLâËWé”W7þtÕ0Mip]„R9ä=P_ Â6.éòHW¾ >{·òM~ÿßV”ÐÔD¼ìò`oR^yRÿN‡!î$%s!ÚU’ÿ®8·t_ –XûîÅGÚËN­ÄP´œÕlÌ”ü÷ýwcòÛWÏ'ãÍÌž·4l“Þ@¡‹¦m)¤éÝ3ï'g‰‰ÕÉ£ I(žÇ³”wYé&|éN8Â_.iˆÝ{œô¨û8WòÎê0s—Äùýæ6M®Íi~Kiñ“cñ‰Xù×ÊË…_Ÿ²ûÿ0w(—¿Ý72wúPL]¼ùddq†øa¿JA÷ N®š¡ž_ž畽³z’¦,±Ç±¥6H¶£!œÉŸÅ>”lÆClŠV‡É:jtFqLøƒZù‰zZˆñ†$z~Gß T)Ðß#µC^~æÎæYògBÙ#̦¼¿pgƒ½‚S;ëx·•¥`}Àz-zž½LvŠvÀg¸ì.Iÿpµæ@~}éXs$ŸÌ$/¡`ì…w’'ϺÕpèU¸èôãÚ§©€ñ¦çßvÝmYã?%€1ü{`­Ån.Œc]s±gÕ4¤[­ù¬G|³à[·Çµ´¹‘J𯑨LQ•o'+*—ͭƵÌÀr¾Ó«üñÁcŸc(“{/ÒvˆÝ‘€Ð }­úÇzXÔ½(#—\•¿/Q¬¨ýjù¨Æº&(@cÄX†iD6Ñ3ñzoâ«K§zíÃe7•Û.ö=M‰Ûú©ßÁ«V±õçb²¡Øh¯Âw‘Ð/ËDOƒý Ê›Á q:eJöÑç°Ö ùðÎQÌ Žƒä›žhÓkuïÜGzÌ –Ûõ9WÍÒ6:ù[êO4uá#~ë;ñÇðIo‡åö’ØaË€¹è 'S>iyz ýa–XNÌZpàQ~”¹È5ß}A€ð† a\2—P•F\¤˜;› t ÔõTpQŸ.곸µ*¯Î‰®/¢™Ï ƒs_£Y\—ÈÉ÷ô\ VuWàØĎٰí¥„lp­‡"Dµ¯yÞò¤wlë*°|ða!’ɉÀ[’¥à2öÜ·A:}D~ß|ØÐ•ºuKÂã],VVøç“)èR†I°·Q0ò¦>`6ÒôïÊÂТ$ôâWR +6?¶8Z7ç/G<±_âÅï8wÅB{äÞ”Në¼Ù­_ëk†³[x%XCJÅs\ÿ„Üñ‚ðÄ̰ø˜çÈ}@xêë.IÌšßÖ~4)i¨LÒõ²nJF‡­ša£ÅÉÅ¿;U‚ 5¶\1¥§±çÁr*¾é—ÒÕ{Vé+ d¾Ä¿A†|ä8—סð„»Lø2$R}“f™¦KÒêÿ~q¸$•¾ëæ!†Õ;öš\žé;x ¬rãl ˆ˜wk5È¡Ôi=ý*¤˜"‹âZH%ßIÉ÷—UÐÔ4FÃÕÞ¡ªTSzÆoƶ¢L›v‰¸}AúÆQYcáÁgr´÷âÞJºÈ÷dú÷,(¡ÑgÁžn?r»%£MJüöú Q¾nm›¹Ç’)ÀTz’#.!~‰2»Gôjù‰3b;Ì¿hbºãyÑYÚÊàÚ±Ö£P³Q­öò0\ÅeŒ‚sE 6]ÿ8ô3µìÍ gÁ¯6›çrY«P.¶Øt°¯Yaú"ã-@’ñ¡ËèGÎçöwK–?õ¡1®O88]ì5„˜§ B "0¦ü§m4¥0x…-âvâ-›vøàø!lA|¤ í ÷‰™÷A–¤¬øf+‰lp†lùÞ áÌÿ÷§taa¼½$ ר7¼È‘b¢ÿ|È2hC¡öå—²’^­@&Åic;d?Ëû9púUGn&Òõ„¿s<•Rà§šÖ%ÅBüÚËIó¹ò1üûË×k’ý|°kãX­%oȽB¦^ÕK.“/EZ Í×^û0 ø:ȳƒ_*quÏ_„¯FrÕØ’ì×à—XˆdÿvŠdq›^ó[²]' .Þ5AäQâ¾ñuFgÛ¸AÛl--5/*¤o£m­FÿH:o¥G•(¿ 9 1Â[áÉðáÝÓ_þ½µmÕ"4œéîÍœ©ZP}žzw¤mI–3>©_Ö¶áâÒÔš=²²™Âì÷аÉb!•LëáDiFtŽÞÈãOd¨b—ÆôÐ5RàC€0c"ð\=ea‹G‹#©>g(1©iîc:-ÈÙ±ZHÓoD\†œ8">{íºT(¤Z ’þW­Œ\*lèk7‡È=Mž;lUÁH%"|´1üZc}üýR2§ÆÐJAò-­»=ñ*ssûde©AA?’ÙÚ¾K@õŒìíeuªœ‹”ÞÕOÅç*ÜI=0©-í7ûMsÕäDKß'—ÔÜ|Ø7 …÷è‹Ë1ã :A@¨ ì‘­Þª^‚z1ºF»í QD?3j ý‡±ÿ–Û- b—Uˆó‚«&Å”+hº¯øÂ‰dM€ ît&ákÔy–Ï fdt½uM•Õ)ù*éÌO™}ŽóI’ÌDàÖHh{öÔð?ãEÿݘÕNl¿Qœ²¢uÕÖ(>Ýêë†S?ÈU©úåj~.Žž z~.ucs#„xVZg9oŽb”|ðJL_t§ ÚÒ(›LFKK'’X V0±jñá|F³(3©4aEÚ ÷q}¿è8’í Ÿø‡±E1@SÈ, ãdT{ùܺ&8ÄDwp¸ ,ÒóUº¤`%õ'¸ÍÛÖÏ fÞÃßšA©&w¸‘>ŸQPM´_€e0ÃFÀo× ¦lˆ2ÿÅx¾D<¡Üõz~"Lºóí[cß^WªÊ'ÊÈè°µ~’îËFDkçþõÓl@¯ÞI¼™ºàxa¶€.n?±'Cœ³vÚB+3ØIJ|ÂEt_(dw©%ö3³³ãäþ½TË­î$ê Þì>å‡aÜ%Â~4¾rœ·ã,x_}æ’—=Áóï8!SÊ#¢dÖó¡ý/Ø´C6:No™°w¤A¼ì&gðm!ʳ£\‡žÞgߎVû¸ü+÷W’s_ú5­eÏ ÌKf$_‚e†Ö+ùøu~„ß$hÎ ÃÖMØå¶$\ÌÆEHy^Jš+‘CàSÄïÛ}y ùg·;·*‚^ç{¾gîãߦ|¿m’öH–~”`iÓbÛ°I¦ßÄ`—Ê|h¦d]}ñ½òUkñ?yΧö`1?¥ÞA¦àDO¯¯ù‰ù%-hÜm¾¿{­†S>¹þOÿ޵ª§çR‹¸Q7#Ž/ýé¼ ð8ŽÁÉ~ªÉ¥Sbϔܟ[Ÿã‚V/cüe±ëFãSncŠ|EìÅÔk;’U+WuFrÅ´KÈMfB»Ýìõ1­ZRŒå .å¿û¿ýƒ²ZÇ€>§T¦6BƒÕAÐÁØ|nߣ ÜN/ØŒÚӺĤ5ýîØpïÏU†IzÊ+%†yÇ͹sbÚà@âr2"ÀÎ'FdÖážÏHE]~kzû´y=¶YšKâtp⇉ÜĕݟT^jÓ þº=Ç;̾ÖÒHg{ÓÖ,E¬‹ _ì’ú†^^×ÞÏ+†'ßOõÜ®j³J{„˜;à¾2)[ó]˜¦}^W×ò¸Ç@¦ŸX"Ü“î‰`(ZDé\h´êzþ4¿ÊºI-Ž[?R1 ¸>›÷J˜ ÝRŒ­žo{ƒP¥*¤ý€Ÿ5•ý¼Ï[w" ÎtÒ³,lò¦ØøÅ’å#~EÙ¼|¡T‡p?ιbTÁæäNiá5W4ðWDÚzáàŽ„˜)gv­òUhì³¹´']okÕ(ãÏ­I©q©Z™!ì²­à>u勵î./â^Ó-47/’òTéÓhÁ¦­õêïM†_!•“D¨2o‘‹1ý¼÷÷<¤faèàø–£'ýf)Í•‡ €q©¬¥(Õ5W­-i޳}ÖÿÖÙG„¢0Öñ†óõÜùüÙ†–²ðþø…a†4J‘eÚ"ed0°A -Dqôáçµwš$íôwFþ>åÉÆÞžµ‹jv:òÄ_·Kh×­J|’·Üdé½¥…SoÜB£ÃÁÌ·)ËŠB‹Ñ$þÓ8B.ªöýŽ)§êúɳ±¾1hˆ¼ì~¿\ç+}M§ü!¨å±QÞox^ á’_è°‹À\f˜¬ÃsÇì7&Z=(H ó´ß}qpD™0Ø@ã0ãË= 27Ÿ‘ÂøÄšv–>m˜HÍ…Òn?¹¾{e˜ZVð¶V„©˜IÃ÷sÕv$šONÐåW|üYP¸ª¶ãgÔ÷‹SÍŽ¥TæÕ0+ˤp|¤nЍk؇[¿ß#¸yÅ,C+­¹.÷€ÿ6iPp¼×@Žé§x'¥,?ݶà3[ƒ¨ãâ±Ó{‡òÜŸ%ÁÅ­2½ 8L˜ˆ¹Énà˜çÖÈwº!M™Ó%4Á”ª®üñYFòòQW ¥´ßÑX ;r¶.ò²W¤q}(³’ Æ!ާ Í6fÓy¹Š (÷cF±Ãøï‚øJDBEíu¶â•‹œVáˆ(Ÿ|êÝ…¼ Qrºtú¦sÐõ ”]ì–Ž„ÏŒI˜í·/c7*üÖ¡»`\VóïŒêáTŠ´ûÄcEUaq6q©>|ßþÆa,ê‡çWß eIWø5Ô6cY½ça×m8leyy@±fÆ`Þg>xǯæÔ«™w‹´aõÞMë®±±æÄL×Ó(!lÑ¡¥Ä‘_Ia=£ïÙ¸y íä`Õ\­ÿkw·Ø[!Ÿû=áéžý\âAš‹2…ÀŽnz#÷Êü€<«õJ'éçjÆÒtæûíG¹owá\î‰9¿”£}vÆ„%…àHïÊêrIƒ9WvÈëë™ÙiÊ2Y”âG&ÈÇðx°fiÈ™Vóìe€Y_/–Yp)é×Yb¤Â@ ÃÎÀºÈæ2!‹¿]¶!ˆlgµ8{sŽ+¯×{i¯÷÷ù™q‚MZïŽøŒ½Üü”ܢnAÉ/à_ È‘Oæ=ƨ¾†ìì×dÐðoñŠ:?Ðç1s_~ìÇEê÷õe¥ðŒÙcÆ"V¨z~/ct ÜqÊëÅ®^2µ©Ô Go E$t±Üçž&¾5ùÇ÷Aàê·•—cç­Òä2: 3¹Ÿ–‹"˜F®!¦ŸŸó]™OàÍÛ]Ñ#ä!ž5z\Þ~Ï-…]ZŸÄÐTŽzä¾ “^ô´üþ~€4Ù}Ú²¥þÅÔÛË× a\GOŸ¬|v8ê]1éEØ™ê]«hœTÅøõ3€ZDq‡ñ{/']¯:§½6QÛ-_çv°ívr‘çØ"Ñл£rÇø­åÎ9Äc¡Ê{Ãw–¿úÁCfÑ|ßj5m „<úp±æ÷Q…Ѧû “Ê,ÃÃp¿ÈVÔιë¡É%ß—2ß«ÖX"¿œŽ‘„.¦ÆNØWâÝ0÷¶ ¤H7‹²Ÿ6sx¡$Ÿ†Ë Y"š´Hýý ån+ºoB‰¶T]ÖvVò•ÉkU8—·ÈÚ¥T#/ÁÀmGôÉYðÞXäi>¬<(ÈÍ 6ôWÆŒÂÜQªH ZôË%ÁSŒ„â¬æ“¸Ÿ«¼ëD{c|Nª§ÈHs›¦µ J_Êõ¡iY9­äÞ%ðsõpw…;Ñ!+Óþ@a'¼f|t®÷ÎG˜Ì÷ª6ûqö‰""0àñÐI—Z±°¬ÿV3y2îU¶íU1Z!¯¶áïõèW9¼†¯QÎyI¦&®åà$€é 67ò}N¦˜Ai˜5 "¶o>Ph¸¾â);¹æî³4ÕÞœ’`ŠqC­4”´¦´ªÕv –âXsúèS6AHš{sËì‘%îïÔè)îåö“õ°ÒzÐT”¹ÈÉDqÙU Øç «b‹Zp‹‘ð€0@cX§ÑD~|~ùÞ(*Þ†D1Sü yßA˜‹ §Ï“()ÚiuôyÙCÆuRDW¡Uˆeq|Ó0íÜOI謾$+²1;Â15ýué>;tf=ŒpSÊ’×uÂoB¯!·ÕJß'ć0~cÜýü_åpŸ¸ö‘:³æFä©FþùžÈxÇï÷leM+µI0°)|®ÇLV³î”yz_Ÿ³aí÷0ùáÐõ–o¥hé±UËU/èmÒ©á쵬‚t èN¹âÁQ‡Hƒt{rŠtÇmÞô=Vãçâ¥}ŸQÕG–mS_–ÒVC°ùb‘ñæ¯GIsòŒžŠõ×7Å£Ü÷T뾪ÉE…Þ‰ÏáÆŒ”ßíË~ã€)È Ö­‰ÕO(søÁf{%Ö ÷Ë..Ú!Úyÿí\¿ÊŒTä0ZÙ½R`>3 ˜ŽçðÊ"ǽ[“P@ß Á}é2¨™÷ù‹uÂÌ¢e“E'þö'ÐôCZ(/XUÈ}«A‹­œUú¸ZڥЋô·MQ*L$ç#tX_$0o€»nNCÇHä%W)z’Û¡ñ¦Â Ø2s8x xTÉó3qâ$ƒê ݡѪãbÿú“VôúZÔd~¹âeK ùw@uA•4ëf§éÉáK+Ó²ËÛͧæ¹Q‚¿/x ¹ª^—‰OÓ¾ŠÄ ¹Ð0é@O·«ô3÷LÝè–Ø¼p©I«ûÅûͺ ×>•Pœ+wR!ʲ×]UO ù^…Ì+hƒI†—o´b§ ׋¤ó^ÿ}üPŸ*æ8°V¤‡¶úaˆÕ¼Œoä‹M£Š?Ó‰úò§¡ Ëþ-ƒ^D×p­FŒd4øm§²{Úµ`V>òÙ ˜ò#‘9Äo…ò‘ ~ð„™á%–æ€b4=t¹µ®0ùoÔãÈ\ó6,øÞU©=–äY¯7¿&g¤Ï˜Ì& vïÊ#³ bþmEǾ¿{b¼wPM@þÀb¼?¡ éZZ&ÏGmÇ‹hBjÎßÙœDÖ¶_m´»æ}'ÜAö„~åòñ7Ô"3퟿ÜÓVa2ƒÔ'iQ%ueò%Þ\òïÀÓ¼ª^ZÁ•ØH$úoíÈOCŒWNL½?Q†_G›67¼bq ÃÞ³Ûô0bÊv ëõrØ”´.é¥Tí™Ê+Û.+¼y&Òt›ç…ÚHÓÅŽºý;êCuaH Íw·_Qˆ°<´¹ö6K,JUzAo1>,ŠÐ Và DógF|©ƒ¡À¢U‡ƒf^øþ5ÙE„V@)—c½gm©ýáa6Ó <Åqý£ïÂÞ+ø/;f ýääáT‹Êd!dãÿpI0/¦½G½Q…P;@’ùóÈPYÈùÕ~ý–6xÅ]HÏñÕ ´Lý‰<™Ûù”¾'š¨Âã<;î¥w²—Ãß)m¶1ƒYª°{AÛ¸à•™rýP¿LŠQÑÎC¬[¨X2è!<ºHá Ä¨n¢´¹ŒËxëpÛq:”£t½ XoÓ—•uƒ™(Ãüâ×Ö9¨)k°°"aj¯ÓeyÅèÄ@‹·/­A_Üò¦…Hm…½‘Jƒ,dncà±Ðøš–_OqþËlžxw<Ӫǿ–¶$×hño‘<[„¨°ÚaHãƒ/tòew˜´ÔH”– =­³ø<> &tõT9–µ £&’Øgžh Ä)X‚Åy˜¥xÅ•çyŸÈö#ùSÃLÞ& ©í M»IW¢Ê›§³0Ü&L·ßá‹áÂë”\1Ÿ„Wy4)¹‡<8€_ºÒ×Ý]…E%{‚ÁšWÇ]Á@Ðj:³5úohýš¯sã=Ø·8jU- åßl¸~Fê]pD(Ùð’þw ‡/Ï:\”üN=Ÿ<fwê–ç׉hÊk“VÇ8ý­±þ–½œÇ/Ÿ±û%øJÄ!Š›xjl€LJùZÁâËb$Ò8‚õ-¿•äöÕ_í¤Wå+A@Ü{àëg=Å©TivF|Nôö={KØ%Þíé ,»GV›Ðçþ•Œ¡wyÅJ†ØÏ©~ô» Óœ¦ý­àxü5€¡ÿ:Ôë7ÆMÛýÍ…É‘{YÁz$ýÄöq¿œ³`ÉïH ‘æó§ÕØb‡‹k_!Y“[E–jÁÁ L㟹£œ¼„×ðXׯ`üíGåµp½øõ5Ey»l;¦kàÕ¥í\݈¦ði8+øA˜]¾`ê1‰ ì VDÌïöc‰áˆEžñˆÆI­ÐzmdˆòFh.„í¾\å‡2ÐAþ×ìܧÿ&¾ ÇÇTmÝÌLà³öSb|+ûŸ—¬JbO¸¹×ö1>Œ8ŽWg¡üö’?øç—UöŠýuä'™WîõÖb”³càõã¡HÐeýEˆ³h´>¯y÷5ì¯ótð2Âør%µÑ7J‡·‹¼Òž!B4è?)¾ŠiåÏaÀç¬E`Ÿµ¦\X’É ­H]õ_3bj˜9–žg¤ 4 -Q5Dv¹>R,†ò]AÅþ×Xü!›¯À£Àg~<øv|…$ZõÛ RÚ¤²Èl¶Vßx_áêÚ¶ò#ªx¡DÆ0ò£›ÿl:¦ü˜›l«ªöT ¥dB¾GuDnåÏ+ÊNÆóFuø,¨0q`ÊÕ^±¹ÒâÉ3(!Tí Õò÷N2âòIÑ"í=ÌU2ÖfÃéé݉·àkJëIdæ´¶¡'u™Uõƒ˜háF*Sy6:=bªVÕð-ö;ý{!Ð @çÕJʜ؎0´ªì¸ÀÝÑz£ó‡’‚nñûn¯«wÑ3X˜ÇÄ•¯£­ŒäüT˜ÞZ9«m2}&îçœýe«3į= ¢OXôf/åCó5K=ÆÞ¦ÿ~K±ž´Gƒ•ä&¢™wÄâ+E/MÍÇä¿p´ "O(ë]Y-q«êDž7¬Dü„/h|?´¨ó‚š=Þa#à‚n;t›qµÙ4ºŽgîÔ',{´Òïn²Lùãã«\½®xg#+újÙÎéì‚„Ô]mnL«ÂOÝÕt¥üÒrÎúÆ~ÞïCÒØM >õai€ÑP½,‡ie×khO½'’ð‚X8–¹sà¾äbTW’Ö ªÈ믭ø°.{g 7å$Ž—ŸYÛňž¡´cÌ¿ýKâô ¨Ò"˜Wï\­—†'4¸â]rÍ‹“XË‹R8„Gæ7áy‚2¾‚9›2µîQú¬:…`Æ_[ˆòïØÅàuzT2óNßvrM]æÜú`]}ìzÙ⫎%¼\ɶΔBþp þsV߀€)æß–6õgß’LLjӹF“×ïlðYv ð!Л>K*>aWVhÃ7\&žàss]×ÛLê¶|€i’Ç)o3"zv‡'[¡Æ.ÈÀj¬GZýqT–2שàЧT¸B3¤ˆ+\²_PI¤Ëø°ÙD•Åbý§ë•ƒE0¡;Ê)ü²±.ûQøõ£AÁy¸­.xý[(<ûè%zo$-”Ýôuÿ­‘àuÔ?|ïÔ\KÚÄ!ôqÑ£ðá…¶+7òMƒ'o0”>óþ›³röåy}Û]ߨ…0‡áÀ#nìxt"C€ÌE³ùc0¶cµZxù²VòÂíòcøPv‰ôMw\—SBÿr2¤ô0LÍù± ( VDür¤€åó·¬ay‚Êþ÷%Ó(‹š8[OÛZâôPï©O^qA%ú-˜YwÚB¬­º’]Lº“4§(—ËpÇÏí6Íã.·£ðFUÙŒa¤šS#|ä~£¬ñ@SÑ]TËðßikÒÙýõ€¯åAƒ¦ƒú;Žów£ÍÍÊÆSŒ¤”•{°$k–‰ˆÅ5fa÷»ÏÌã‘?rsË«¬c;!ªq.±ÙÒN0î‹#Ýüýj‘cìüêÔg7/~?ŠB N‚,à/¤3[¿hÉt A£%®Lé”ö ‚—4¦—(^QÁ½Ûí-¬gìX ð–ºBº‹?FaÌ^µÃÒùôF« Þ;øbŒ¦”oÃy¥¯›«;Ê'sÐÏôËžWdO¶Z _› tkbpäú:íˆ < Å_âú×6QàFªtèâA4꺱PJh/%y|¤äpègVxSŬ`súæ¸ÀšÿB8ùÀ[uóà20×D:kù™>9ùî씋yè³ñö’.ceÓ0ÿ‰ÎÒ¨2r&±|n'xkÓÝî=€p\|Ò¡ ­T‹Ò†fu·d :¹F|-Y`ÌëS ‡xˆŽ|-=Ñíþ»ˆ–A³“MËö¸¯—«ã†–ûëdÛÆŠbÁñ~Wò(3Rùº-Ub¦L—¸1sFÝrž™Éí›íš¿By»Øà^ <±g;ƒ*œºÕl ¾þswÈgx!n˜lÃPÉ»ÕÍ05„ BÜ™N²aÖB—Üîè~?‚hÃ!‹·)Ô¤‚ŽÔëüÊ%ßH-®È¼ŒÐdâPqÜŠ¤o‘á§ÚKS;¹Ã“ËR"Í«G´Bëäû¶Ü?¸œ¡ÙüÞ¯ªßtÞˆ[wôþGåð¼ßâ#G/êáÿ^†ä'÷`¡XªÆà“<â¹c*]|üœù{º Ò–EsMë[oK¹7:½&Ö+»¶ð[G>•‘åû_Toá’œª‰ú€=µñš ýoÂ_/&ÖÞô0àsIJ«ðcÍ=šºeàÁšæ$û’9e:Ë´g/ç‡|U£~ „ø~w]‘Ð á®KÂV(â7ž¹gòÂÛôó •ìVñ,ø úÓ± ܃ó· ¼· ¥L;Þ”—”à>ñDÀÄú~ò}bx2Q¸à=ÿH÷ôSñYŠb{PÛ®OY û໋YÖ#-Ô”íPÖ…É ÎEM-VNŸÐÄŠñÀ´¡ïÊû_ñ˜¢dȇ·çúzÄçM˜ */qJ«_‚­]Ï9üQRM,?¦«¯#‡Ô]„·³Sæ™°ÈÜÊ—i Ÿ:ü´C`¹¿·:j¤âÃ;¶pUßsAaòš7R9[Ø©;¹†4Ëé,Y™„Áf’ĵßËy@õ Cçç¿ E„΃¯À|fÖb.‚T±k¤É6´ÝpðÚ^¦$ž3ž¯ò׉+×¥óò§8Ý÷…åL¡ú†5AX¬ÎRLçî+Ò¦ë V?K@[GÈnç6ìú-›ªŒd×È¥=ŒT&4eu$‰êPP}”o±dþvõÃ%"žÌœ×tµ´qÀ *2ª”[ïËüZ ™Õ­ ÌQÞ/ˆñú&Ñ΂itXe‚)h%Añ=ÀT±µaÂtÅ”ùYÇçûâ#ûÌ/ÿµΗ s[&ÏÖ:ÉC¤Ö¸·ú'ßêݬ íÁßAŸ[Â.ä<¡ò %U:“NDE¸N€-úQgˆ®Ó±jâàEç\Ïü ßR+èP2¤ôçÎL°’=ðH$b¨ŒëC Í”tBÇÛl5«cä²0Š&V3K¾ðÝ ÄT9÷¤ì™Cú\Tà2 ÷rލŸjX!䘳\~kª'õLˆ Ýe5tI“}TuÃ67'ã²`òh†UÇß\³Ö[…µ÷ðh¦~T¨ÈiÀZõ SÿŽé«qÿÕ^¶ëžríåħ¤*ë%Q‡¡j;÷Î/ƒÎwÄN)¤á%Úz¾çèì"¨4 ¨ÎiÞü}ÎôÜÖ˜÷»¾ò˜µXÀî)øLJ÷ªÁëè¼gCŸÌµâDÃ2ƒ)ºµwüµk ÷kžsš»¬c‰? .õjºçªûE³6ýÍ!¨´‚ÓPºÂÔ¤ ç¢å¿ÅOØæÈ…ý·Dú€Pï6R*`ÎìãdÁÉq^@.DW—F.¢ßKëãº+ߘçEê1‡ý\#ÁŒ“zäb‚M/ŒwÚÑBÝRÀôt—ÄÛž/M‰A‹ÂæŒÄKÑ[ܱ”“FÑ: ª¤É±º>_I<ÌíVu„¯ùHð›ŽdNLYv~]°D¡‚lѶÊ#?L0Þ\sdªÁav9ü„à”•9ô¸¹%ÞØ‡9‘ÉÊÍœo?ò?Ýêò‰4îêýÕ»’ø_¯âÕÅ……?1€&ÉÙ·üÍB!ŽYâŽÑÿZмU«^fp@÷~/ÒQãÂØçæ%æ’ÃL_"çAûÒꙃj“3þèbâ3v9¾;ù-¿É ˜T‡ˆ­4ÌýGåÝëFàî Ïï:p&€ô¿]‹~U³3Y _诬í/™¶Ú¡2AáÐÄ23/Çy†EqãuÒ¢DJªmøQ—×gPÄòçó¡¬>^(,mö§Óçq*ñ—B$Êx(2–zCa »a¥³¢6l$¤µùÙ³Ÿý”d[gúæI@HqVØÒ¿Õ§ŸÇÜ‹”¾˜HB(;#9qš7›‘å –†öÔD«\½Öfù ÆduYWܪöÕ¸nY ­p±iš:ö>ó~BUmõí}Ê‘OG¨îåHzéŽ0ÁéîíäyÌpK3B²Ù«9™µ'5Y¶˜Öˆ7=è #1î«$ %„]"{"°ïñZøöb$OÒ·®>…Ì·ßWÅÞg‰7 £Lÿæ¤kÞ3P’%½:’#è"܉ø’àä“d8*Ù2DÈOš¥]±3:\;>A/ÈxÙ…û&%úš(…Ÿ„[™Ê$@ϽQƹ˜wz%ý¼²7¾Íe˜ˆXþu5¢}Å>ÁŸM^ýB“!¡ø¥JT‚¢ÏÔÃØ_{àªà*À4ƒá:[°hdä¢'û/¡v±#-lÞ‚ú‘&åí\×ÍVlÁÃÐïïC1˵fú ’¨Ý|j3y ˜/Y”OÑM¾[~¶Í5ïøLj:¯Âé5d½›lô\îSF%ãr®Ï©¬[ž)Ã(eäßA¢y5¾1g‘eƒºhò׿ .ö”fæŒ ñS‚êµ`s'ÒfìÖ[L<à&ó?dî Œ©yAôŒ¿”zD ¤“sÅ7²ƒ R'`¹£HcÜ Öngà% qï5l ‡ßµš@dÒç\ÕøÓ¾±ù@ØÈ§Zãs‰á#1æC•ß·!ªz|XY=TÔÁ¿· ™üx¶îréÝ7}Ïë_™Îˆ@ÇQ $ÜìdŠùwÃ/Åß¶¯ pèajôûµñ¤çB‰Ú~1hØV\üÛØ(þ­»Mí_#˜iÕõBÉ’Ž'b‰Ùº¦îî÷]m š®ŠñrŽtn•IÂæE<Þ”„D\›b#ò³œìû±¦×“quëq?,Ïù»–2iy©¶¤»jÖ 6íPA¼QÀ'É9®q üaÝ:ž²ê`sžRį¸"Zh~xºZ’.Ñ#i›Â6mitk¦Å ·Ý.Êà yb*µF*É wíC@X¬|Ò W¦A1òà‘È‹ °ë‹JY¸T•³[ì¨ ¼—2ïÙUü5Ò<•} ÈK,ïoæcŒÃl Àßy9§Yý¢Œ iâD-3TãKó¨[õ&k3.~mÖ—.ËŒÖÄcߎµ—¿\pLXº­á>Þz1?à8äûTÝ5¤w6…—¦-l4oÕƒðót(Rм½ÒI—¨n÷8yóɇõ2:ï΢ò¶Z»¡e—‘†½ÒÙ½8—¦²c‘Ãq’¡“n?g½ng]üà¬,0v Úßs¥ú3•7÷刨\.“O@Ã15^†=¸»ü¡ÎÚíÃ^Ùp*cèkÊí{Ç´†&¾¶“œP€q7õ¥ÅÐEŒi»õhœ×ýÞÄlðéµÿ”g ÿÜò%N³XÒˆ©(IY“æô=½ÆÃùÒ<ˆy‡b åô¤ý-EI$ÐLlFczÓm ÓV:áfJìã"ú†÷΂“„~i¥òi½Ôšé'fÚdÏŒzÀdL#Ã)²É1Š'% ”€âWt¨— ¡ l|C°K»Âƒ+:²â!·=½„ïËxX.`ò5"sN¬¯F«Gfkb@ßhÑEÑÚa:¶¾eÎü¸µÌß—ÊŒyÒøÕrb\"[¢–ØŽRS×®ñéº>mtFä…ˆ}¥A²Â¥uÜ¡&¸ˆ¦äì#RbÞß‘ Ý‡©µK4ýã3\öÞ?ć®1ß\ö®rAG >Û‡ÄÎq}Ÿù‹ÿ…dFäÜÏ|ôú1 ”‚@@]´Ìöú'¢¦?;J,Û@ïq†ø\pÁ#iÊʙدa9r?Áø§C‰[­òhhöbf¡S%+!–€ñ×]büz›áKoç^©Þ­2O$iÛ „JEè¥_Kï öÉm5=ÎA%Lú‚®A<ÄèãΖ9¯Vi¨T æÝlóÍÒ¸µ¶ÔŽŠ^É*¦:‰-GÑ}˜^ÏT¾"MÓÚóX¿â#,Ã*·¡vü+O7¡OrAç­ZE1&_%²Æœ—«'+­NcxŠó Ÿ–`å‘á9¥]Rn_‰Z—]èÐ6ê—8¥qb ¤}ôèâ{ª‚h¾z-,mkœ8}ýbÖyë%ȼG2ŠiðNß   Òa’IëL¤ ÎÀ˜¾*÷=Û0Zk"|øÔ²®“O¹ˆ”²-,б^ˆ&_›Ê•ï¡£Oä;8éÅæÓŠò%ymÊ5 ºÓ¹æç{¤‘æe€‹~0‰Î;lÕ×ÜRQb)oŸã¥`n4ëíæÛJ|©°×)Î;}¿™ÂÓ_•íÄÅÿ6e|ç\¢H˜¸|º[¥¥|õØÒL ßrz?‡k’` šõU‘Æ"Ÿ$aD'­ªùºi½»TrPqè±a xK„ÍæSu©”TZ¼½ù¨èxâžÆÙ™ë¬^β9-ÙiåëÉ0FŠ=ýÍÆvŠ`Æ‚·cùô À‰û¤™š6þ‰—Çy \/ЉIÕzø^ç¯Ý“Œúýk6*Ï G½–Öž-ò NÙ6nËÆ=gEdCÕàÓÍal=EÃá8 Y&ÒdèdzëíÏÝ¥¨L¿Ã~þ½½>èò°@íšî[b<8ãšHM %ÊÄ ŸëÄ Ñ_X¡ùÇY‰R|Ä}ߛϽ6–ûÝÒ,æ& ZdàêÕ"„ÐŒüZþ7\-ÅØç1dÁ$ƒ¸Ä³C<ê=üN˜O[,‹88ôî ÆÅ¦?/c¢zßêçÁŸë/Œ?WÒN¾^(P¼Þ™cáñ߆AÚ*­Ô@"'c¿º‡ôw40 ?ñ:Ù‡Þ”Ê~ÆË¶/€¬% y˜ã"q»„„›-M¨ØTI±jÉŸ‹ké„!DXê%ú8RÂÌáu¾'š:lC°é$ÔJ|ç][×·‘]Ñ´üM^½.EbÓTŠŠ›Ê3i.ŠJUkfÚ‘5ôÆËzS“imŽ¿$ éšÃ}èmP;:*Aa@¬jïZR÷Ç ïl&Ú¨ûa+2®hH ‡0Zg·=‰¾ÆM¡mAOó‘㘶³’ €íìEZÈKc*n~0ÈN,+Òþb‘Y&øÙâ˜S‘0849ضŠ-$'¾v”þ‡08‡AÌç Ù[@âua…ðEm"üÔ½ùÐøÄùhcf“@k’¡âyˆ£=§'|´cs¨‹¶±%;ˆEŠAwõânlnã{K…ˆ%½Ð$‡œ$DÆAÒƒ"db×õ½4éÑ蘙ßX% KÙØ«{µ}ÛJž%Љ˜xxOðš´Á…'£,œê)k'Ù0ôµÍ¥< 9ÑDZœsÎóȳuß…Ðû…eR§&ÕýÛÝ63–‰ç ý¥Ø±,÷7fo|‘‰0a0|·ýµ %I~ P¬,êpñè¶Ää+erµjÖáþò£ 9§ø[¡JÀc6kYýH¦x½óˆ~Dȱ‰g–+dN—ôS Q>²á$ 1óVº½üh÷ÚÝÈèéA],ºÓY p6·ì¡¯él&8³&z(Ï´d˜âÑÌB â¼!|¾ñqÙ@y¶jL¾4¼L þðÝzóËõC€7q©[Ä2cº(#¶08ªñë—¾0•¦¥zù×ð¯GaOCHXð‰#Xxå}–R›m—£¶6°¤Ùä+§³æ®HLÎDÿ¼‚irWê>¨¬ `ÀaçŽFzî¹Á¿¬úámÄʽʳUØ]ŒÔä3 pvŸÅM)1¢Hu«ís¥¹sÓüþÝ}â .ü*ÍáIÿ>Póê½lq°‡v¿ßôòvå{˜©ºäTqU ¶ûÒø=‚ñ:ÜgW| dÒkŠÎG-õGg±î&EáWaÎ0ÄÝÁf8Á‚ÛÓ—Û~íè¦\䜽ÖO¶P&’Óàß`”Ç3ÏúйòÙÂÓ0‡þ­–x¶38G«Ü¬ßoÿ…%rÁØÁ«-.Ë´¦ˆ»J"0 㛌ìœÃ¹òÕfÛeÁë+kö‘S"ÈÌTÁ3k^LØ>¿¥ÿ’Ux³õ >/ßb˜ÉÇc…S|ûI1A¡ü ýdšš:"èûÒzQÑmÚ#½ßÌ1 ~èË´¹wš²/_äGŸÛü@¾_ê»^MLÌr%ÐN¼| D9t”töÆaF±)Þo®ïcuWÔmª;CˆQØj@îêÖ5y2‚w}߉UU&Äüuä`áñGnžÁR´?ðãâñX§]kZ“—pïX‚8Yå3Yd”K¦˜A ŽÏJC¿yJÞã}•qÿžgôq7Æ^¿/t¶–¤OÒþå>U{TBhÈÈÿ¸m>¶OP^RѪ²37òă‡P.†…B¬uyEw¸ñ@wò1~ÎVÊ5\pŠ2”ìÇFnóØ ‚#>Çv½‹IÀŒ~P#ýòÅîÔlóÅðþ¯~~K7šÛ—ÿœ[ø¦¾žØPÞìôQÒo9|GÑ7¤€sòO)½'tþÉŽl4§¦RÞ1¨ëJj¸ÙŸ c°SÊîgi{.sÇÂuRi~1´ý.†0û"Lð‡CøI´èe| 3æ1U|,+Ƥ‘kO㇋¥bM0ŒŽì{)ùô\Èã"Æ8þ/oéñgÙ 9é’bÏše ‹ý‹ú\¼‘“?p¯rΖ™¸I9¿è× ¼ˆRÇúK•á~ãåЕ”ß ”`a<¬‰Í•?ëñLu4€sÐÖ¢ ©¦#9Áøo~7‚<: Þák¼Ëý¡|+¸ÙŒq\ ûDëç‰àùÓ=å¥'¢²`WÖ_KÂ8AHß.1¬ËQµ*¯Çp¼<_ß|4B]þ‹ êJ4È%·Ï ˆÆ@JäÈ~½'4¨-³ì §Ä‹¢F1ÝÅêb—ešÉòíøhÆB„'ßq /Š·]ÔI9DEgëÛT°„»,KlÇ(¬øÈ¬JlœI‰[™Er”Ób†*B2Šõm”B*¸,ô*ðÀ‰ žhY7‹ûu}$¸J³úzEãIŠn'ïm8Åç3÷ñcs•Y•gÏ4 †iõp=®““Üï%¯†Žð,¡A¬%ÿo2=K˜;„7( "å£û­Ë.Y¥¡K1ƒëZ\fèí.YÌÊ~¾(…·Èïߢqˆ¸q§´Øåºà€4‰RöM=þ’âìÕË4E5«o.›Py¬"ªÙn•˜…€¨ÈwúÝßtô‹_Çü¾Û×H¨â8çȸj³ò§b'¿¾Óز7q²»2ÅqE&ÒŒ» ó=cyå˜'ÌûÈé‘‚±ônO¬­Ñ¬@÷"íÓ)êà†Ùš|‡îš=d5ßKVÁ=§ìÏþ¶<è`)Ûëû¯Gœ ° ÁÇ·a>¿,ˆÃgÓzÒEx%v­„° ˆ?ð‰§ÎÖ¹8‰/?`ie\Þ+õ§©’ºL±å$ve•.úa$ÅŽŸÖ4ðY~OðŠˆ» ;ž.rWCÄþáS·°{”©T±ƒï¤ùŠ]ì_q‚¹Ëö³sî¯]7ŽÑz9 üÚ>:1[£LZ,²é©ú-ò#zÑ´Á†ôMѺNAYmÖ¹\Lwó]ö Œ­–z]™ã/}()˜TÐ-?uº¥]ÍHV8ø,Yz¬‰Ì)<ø(‹î0'ñÀzV?Y?ŸG=kŒxÍ¡˜ö㯙€—6’HýÐtÖñ3›+“¹ ßsŒ¶™ò)û 9?Óªäqi⵽ʰ'rnüZ&·úÎ:¸OÄÆ]ì–¿),Yäƒ!'²•‰êR"6 ü`R•DйùÚH(Ý Šáÿ¦·ׂ~*Ý;1råÁAžœ:‰riTpŒÎbŸËÉÍ…$/lÊþUæYŸ7Á—x"Ê8º)cùã1æöWõ!’k‡i‰­ü›ÜµIÀŒ÷’‰Ì×ã¢`{U!'ej]Y¶÷"ÈJéϼ»Åþ}|]á±ó—¿s¾Ú81ο®ˆTõÙù¸œµq×+ åiÚ‡«'wsû<Ç\/«hÖ¦ Ð<Ö7†;ýk0aR¾.”2=¦ ~ÈàƒŸ‘(àEƒ˜©f·Î__bÖÎÔGÚ™NO˜J_”žþÍ´ª“°TÍm+š¨F¿Î_:Åæ#æ0Ñ¡êNàR§Ï“ŒÜíåLïaù;ƒî‹VvH]1žNÚÌ«QàÞ§1Î?†dŒdØûa¨ôMm¨6µÂ”Ê´àk~=)#-±ØX‡z.ìþâþq^=æè1ü¨ÍÄ`g—cªù1Ø Îó$U:ÅOŠK êñœísP©Þ_Ì As$>¿b÷+'5}F—>ˆ[Òô]%B‰íŸßßÐÂxFa6ÝþñXcÆ®‹S ¦Mö<¹jÛ#ííÜþ|´å5”ý¡›»ÎÒùûVÛ¶$[$¸ ßûš¯‰vdmñJœ1JÈÏ1ÙÂKš^ÃÕ©`G«[Œ,1•rþ¦aÃÓåŒ8ŽÉ$`ÃÕ_Ãï˜ÜXåÔ*©;Õ¬ý}Æ“6ëó[`Q µ?ËÄöó‚2ýßtúû—º‘kÔkL8ì×’V|´ö©’-7 7.V‘¢}JÄO8Oì]ÛBËÑÇv¼3¬Žðo«Ø<='È Jº4Õ&oòFžà“ZÓcÀ~øS'Ù=z-o“2 ¿tïUµãQÙŹ·×7Þr„¥¿º¥À˜zS0òá @Íg^ÏA Êáøfañ…:Äóëó:—…2§n`Ö誉XûßìþÂeÀìÆíãa×»9ø¾¶àkfpº6š'Ò¸ýV­…°wÙ§,ýr.‡êÐá×FFóÒÕ]ïì›N3ôNÖ·ƒ—¯’u^ÀÆ Fõ3ã¶ /²=å!AtÁäëƒó­Tâ“ä¹d‘LU†?†ka‹^64ñÿš%ô9Åô^õ£ìˆj²÷,?÷!öoä\–ŒÍä\¾"ÛªêºK"']¨“¨6Ä=÷ |˜ñJÌ­4!j <'€>~cïæ.4|hL>_ZŽW¿Ñ76Mc>„J^eGp‹Þ¢–¯wê»,X°Ø%­Hàô™7ÓTEI@ñ1©¸k¥¶o‡C¶7š[%8é*upi"•Eýx;¤:9òF|Ï‘*+%éÎ&?°×§6[E9¢²d[œÆ=½a°\‚N9ÃUöoâSZâ„K8²bõ•Ð…4éXÉæ¼¯Í%¾¸Ö/ôØ+«ÜÿPO׃Š-)ïÅî8?¶®ÄVWYŸc®$Ïæ~ŒÎ!ö¯Cggšš§-‘×/t\ÃûþÈRúKVªîx8þ$‚cë£ßÜkp§x­¥æC×…»ù°><\ždV|^…/h,–%O¢Î3]ªó¸èŒÇ!_Ëb-7p¶‚wÚ6^?>è3²ÔþfÜí.™‚wMÁ9]+gÒ6?§*_S<+‹¾‰¸ËB¸- ½,œ!Ɔ™Ü|ì‡2½2òvÑbQÓåÁ%âuèD[õEÛ?1 ñ­GjOǯÅF <’ˆÓe批é\þÚ:°E õocQãüUpa]š‹ý…9-YÓéL@tã‡ÃD%ýÎÒ5ô7 ØÆ0)÷¾Ý1{¬¨A6Ï–“ë¥óFptƒ‘U _+ºqJä †‘ø/ìP6 ƒS iJ9ðÅIþÕKÛ…ÎÕÑ¥¯­J/.Gál(–Q[^ÅÝÉÕ/íµT¾Â©}ÝyT{³Ír™dö}}@Ël„X껹¿êŠ£Åb¡F9‡ú+ÒÂü_›ä8¨3ºŠ½E»d¢¦]yr+¾RÒð¬ yDÛ§Ùr ÿzhÔxÌÝÇŽ\t®þzmÈMyéÊ4c‚ÎH±+±ûVdÊ´7¶êz…N€¿g%ž+|ÿp枸éiÿµÉdp‰ƒbµkD]ß~g3¹ oÄôH"Œ•S[xU,¥$µ`8¿à·ò#‰î‡­95ƒ:lGEÌ/ wò‘)æPdÿý¶•­¿ÎÖ3ê®fÝÙõX6ך–dZ‘ Íß'ŒX‚Ø#>þK-ú]¢÷=ö-´§|ÞMeà U9IáÚ^gg'jR³¶^8»Ð3¤—qñX±oJÖû€ñ·i»ºÝzSK®ùhrýZ¢1“NO»¨æßòöøO1ýâ~ñ·Å» cÑÖÞ•c±Ÿ£ #/T©¥²äúEÌ.œtïÍ BÍf{s~B©æ6y5ªÆy C=rë«À~ 0¸ö\Œ_„ ˆ“Û™|¦«×~­Ñ‡fr®Ø Ç%ñ ØcÑWUñ$M³(oÌŸxâŸ[ÈO=éy§úÌ«•P²Ë-æý½éc‰†°žÕtý¥Ó‘¬›¤å«<û9S=ÕÒ TþÝ6¨úë»™hÕÊI­9\É™uŸn$§|*½ŠBö7åqƒè_ó2ò“Y=(¢=¹î³ñ6˜AÜUD¢¹äÀãüöbþ¾ÒµÑ7Š)ª2ºÇòÒKÁ; NÌ¥œ~ï¦pÂFÕë±æÎ­y«šŸ¿%Ùó7^J¿€žŸÏZUÿ@–ɯ ˆŽ1K±sD T—9ƒsyRäƒGs3ª‘4ÊÌkšQÿµ#,ì¶+ÁXÒx·ÆBzž“îÄþ«–äq]u‡x‹ž7>PKY}ÅE´=jÊ>Ë®f0emÈŽF†Çµâßס¿ëÞ.núÁDFfòêõ@Œ’8`ÏÂë;¼šsmxMÒ9ÃP08›â8sž'¯UAéJÏ>ày!ŒñŒY}'7‚r›*¥IùoÓ|^fø\¨} ­¢v¤è–Óè±3ñk0Ü®ñ‡²ìºg@Á8ŽÈt n?@ÃÏ×TR‚•õYFóÁø¶; W€ò¾ïŽMb «1EoÔëÖOÛ¦MÞmûnÆMl­PVrE¾øuYÊÐ#ñ ×r2cè¾ø hiîÓŸrÉÎçc©~«7Œ.æÓ>y&ßââas"ÃCHS±ï‘<Æ-RÕ—Ô¦˜¿rÕoµcï:¤Íä«Mûw°[­{<=—Îb_e)ÕEýª¾­|zƒ}L;v’äáà*^2æýWŽ}CV}þ:16F©5æà¡þ!UqI€H‹Å²ÁÌÍݽ}v–DÍo,ÕóÏ}éØBÄ5:œë{yØÞŸôÈ5ÂêO9üy홆}[øšnÑ”„I{ØN¤+‹_TNH$ÇÂËÙ“=ÐøBÚóÿZõ¹¼¿¼Ì¿ˆ¬J}§éKlwÜ¥´¯ó(¤yÞh«V},wÉ+ŠðÕ›¢¯|Ì©c]à¨+õ*º’þú¾[JnšÉRÞdõEv>G jU© ¸{Gèiy½…`жü³R¼^AßÜkéÆnÃ_ñ´(ŽÀþºu¾® p¯þ–犀ŒŒá CAÚ#Œ¹•°~˜Xu£Hºäÿ=þßCLÛKº¦`‡t %‘Ö¿ád燎A¬(ºGë^¼.” û¯O+¿“øÆ–¾ºÉÈÙ Ü’UrPôýÂfÓÝž ŸòD0Þ9tØ+0âÏHׇ'"?Î .Â/Ü|ÝGHW„=žr0 àÓìÎg»’À ¹ùmÇ)ЊL ‚VS çû]ŠÍÓˆå”,‰ƒ;vMÅ%W›=HZ÷¹HÐ~B?€›Gî]#/—ÝÐ7~|®Äõ6=}ô8âèƒj†YT7íñîƒöv¾‚vÇ~/ÒN_×Ò/Ü“¦AÁbÖu:NóöÏ܃¿”S¯›A×ö5Ú1 +c’¿—¤+±’ÖÔÅÕUÃUÿÐ3k¾´›g£C™”£_QÀÕ¤Gâg©˜…ºçèlõÊ$<Â+fܰo*EØ–ço÷Ýk¤¿Ó°n×-ÌÞ™¿b÷ýUb9–=5FT6zó[7þÔî¨o?¿ôw²Óså¼ä>x!žqÌ{øQg§*Å‹·sÔA  ²²ƒ¿îé¡(ëlƒaòÝù;¡#Êp\“ÍêzVzÇ+F£bŸ^%YЬɄ’¸Ø¯¸CæÎð•‘,A[ÀÏ?¥ët¹7…~b½–шé=åõGiú—ºã¯Bô‘F;Áµª‹P¯ÛŽ#Þ8N…_‹T@.yÕ0MÁ/•}§@¢’ )ÿ6þñßø+G¯÷g ’Ùä¿\ízá$Ä#™Ã÷—ðÌÂ{ˆ­'jü+Q0r×LŠ¢>áöÔñŒÓsŸu©í{”îkîý œ!QÙUÕºóiÂu—‚ú«’R¥EòŠL£Õ3j~µ2)™£¢˜• Rç²î\M¶y©%™ŸKR¥e¦Äë±ÔWƒS(ÕÐp²b5€,õ„5E]Æ“¶²}޳ƒ‹çÛâ7) ùqõ&§†3]¨ JxMTyEN•:AV¦ÜO?güß·ÿF9Ã_Ç{¬DÌKúëqáj›æÒc•À²j³Q!¼#áX®J»"…L*‹8ï%®Äégz¥r_ƒNÓZÙ†è•T€âùvÀ/è¢WuV+d¬Õ¥ýÕ¹J2"Ã=胃óã™bSÓø¬v99ëÑ’1JØÆ¢¥ûkŽ£J?M€5Bò(ø¬Œï½¼­¨h}_e®™n§8ÌÎ;“lXZn¾QÄ>jãkŽäæÉÌ’í+Ëìa‡䙎³H«ø­!Ùè;qÛ0Iµ £&>hŸÂ#»LtMö,qIì ¨á"£qF¾q¾<8ž”Îï[æ}ÛÏ1@ž“¶fÞ̇¶™Ë,ö‚¾–Xyâræß2xÑ|594?¨¤à³ûaž— |¥–¿1­aÍÑâ9Á”ÃìxÎð¢C8)Ûê]ß8Ø>¨Tÿ¦[ë· "Ó0(íâ¯á%-¯úS™±em Δ$¿Sfzýb^n€X¹Ü9÷Œmd¶‰H V”yžø_u¡ÍxöQIÿâå›=… Å_e‘ 6É~1ÒcŒú,+jG´fØ•ÊÝÁe·?÷ïŒ*¥KR›j­(»òoNEÁz‚†ÏpÐOá1¦(->‹R¯u…<ðYÏ4=4~R=¸ÙrÞ)K2ËŒO؃ ¥Â·Éé ˜Xcm>÷0çeÑu†ÿßœâ÷‚޹C2?ËGòì½Lˆvu'Jì,!Bôd_‰ó—t½|˜N"_m­]oZ\ûÑm xkTð¬¸WîMPæ©™þ Ôâ\*©šüqÄ^qç‚™e$ªø…‰ty:{Ê‚¼í¯Rü”Ð÷xôF·VÆ~8àkӫõµ>cÞ¸cÃúykÔßhÝ8ñ‚kÚ&Œt=ÛÛðExP:‚WùDþ*Y½Â…¦Ví€ÅҶ_œ›ø¦’Àzë…yû,¹Ëæ€ÊÕãk–€Ó‚s± p].€ÛÆùÜìRÜéüŠ×fuú›®\9?¤ÓL‚‰L³×ø^©Ë RyÊ€ëlÎø·÷WÀÉ™˜ÞšœéLp”ÄX0ø}Hû^ÒQ,ÎÏp`C?Zö{7µõ;©íp7·ÓãØ‡`‹'ÞÇ"}ð=C£z,E”#±k²°ý0ÁÚ>1×ÌÔ5¼Á#òE’öE.͹µÉh¢êêç4–¯b»!—‘¿£Óû¢!(_ì2Ó^u¥¼¦o–þê:A* )Žt.ÔèqFüÏX¥Û[Øy5i„-Ö #³ʺTêB$çYþ;…gùò,rÛ®ù䉪³“Ç[‰FU*T8þ\p„™‹ºpë:?ñý›ãGÔÚþGÉvŽƒ³ÌÚläuãe­ró8È„aÉ«X¥h¯(„`ñã•!6/$9KÕjÅEO3žX^%?Ò©wÉTíS”¼EGxå1ÛCôŽ+2 !GþŒÏ·YCå Zj”'lÊŸçá½H¤Ï± .‰¹ù •à¹ùƒnx Ö[wUgŒ»)ÄÈÐ!ɰÀÜ_1½”Ç~hø`e 7µš¬7¿’Ì€jgÊœ§{»ò=0?wŠ}ERá÷ZÀ¼ã¦'bô±½b Ólh¬ê²êê’ýÚ.Júé„SÌ 7ãÍ ã—¯TËÈK¼®ÍéôRQ+!{†áè•yãØ¿†_xýW°•Y§(ªd÷ß{ÓnÑwcÑù~.µQY@BÅË”SŸ,Ä‹|©W°};ÏJbôûâüË] ôÑu9Ö?²ÎÒÎÇ/D7˜Œê¦æ¼iNš«`ÁèHYHI-ÈÛÑ€PÐÂñðOÌJÞè˜WB o-Öº{Vr*¼þzQðs÷ë~I‘SÈxÞ>¨Ì³ëf§íyÅþ¬ºkëJ™’ù{{bÓ|Dë™AI¸ú~LÇ`t'b­CGçÞU-.«= =¾TäX Å|·Ñ- €Ñß²Ð*©%ÓÕ!0 ÏúÈY{ÌCeIzþ¤Ý_±Ö ºòóÞyÂÕØäòD{lû|w a†Ø€J5ÚÞR<4w|pÌ_­ ÄHìõ6ù­# Øj:QÂ^ºYÁüEm{“‡‰9Û÷²„Ñ=½Ö^OÆüˆ€XPiÛf)ûÌZ^Âeý47¯Ogd\„¡9CȺù—‹˜Õ¤¾þ ÈêEŽÝñbÙöA¥0 Ü ôÈØGô‚£êíöÈfkË“-¨_äW˜®Ø¶¾‡ŒkEãÅg»ƒY#ÿŠ©€u§I Ž÷:ëÚ2¤O0[ÎP¿H0øæ[q_K5ésf†å÷~"nŠ¨Â­Í\":ÇöžX¶H…AˆËOœÍ_«`Œeg•¾™C—™¯“fõÁø÷œ$4¼PWý”€ìÇ43ƒ@K…[íàU”@Ù>HËüuêF’æ“Fâ+þ•[($m+R¹óHŽàS§à,ÉŸ€|ÿ ü”—:U,A¡lÂ7‚¿¡š=pn4šÉN ÿe 5üóàù‘÷ ò"JÎ}<ÔïÚëÕ’´ØfK½8Io¦z%o%É»»Dµ­àve¥b «eˆa3ç‚þ¸$c”|5;ÑS ³ïÞ©ÃOʽªµZf1rõïÈMà¬ì•¤ô㼓q¯A*{S:~w¥Ð{tÛ*¼½0¼¼Š òl÷$ËŽç)Ô÷íoU¡²ÏÖ6}_ Nƒ)Ê9 1á–ª£ý–aä8ø±§\~%ûÒïGQ»m¸ûÁÙ_„?öwÆ_mB. 58Ggß状 ‹õÈÿ&^cxsy<˦Øk'pûußGï=ØB~Æ‚ƒ–íƒlø†˜g£Ô%¿J×8Ò3çH8ë_Â]ÆÏϲÁÙ@öÒ$ y`׫;úë×ÝIØ‚Uåÿ¡ÄE¹¾0WeD>ÇÓ-|4[ ‹Ý`‹Ä"V3ÌŸÝ!©Èõ^¥ 0¹.(¢Oレn]½æªY¨(Y›|lfâ/D"ÂEdW=ªÓ5Nl¼|öuP‰ûJrKÁsaúaIùR"?Ê“ÒNü tcÖÿ{¥M:T¢“úë‚Ø§Å nz“PN™—e%—…ûs†ïè*ž¨Úu‰0ˋ׭îk}8‚’N¯¼ÒV/‘ÿncã¡ûÒe­Τ—g¢kw;Ò`Ü\ÄQ{±¼ûl¸ò•|ÇÏ*u ;ê˜=ÝHB·¨”Êß|ïÉÛ¿(cí¿·©Œ®#U©;ÆÂ É+P•&‹.Hi K°þ¹oüz~Å„î„qˆÌH>¯ßÚp¥-·ñ^\”(ßÊÁ[Z[¸@]òÓà“{09øë-gä¸/Ü‘zÞèE )õ4pð*½R=¿×‹ìe‚o¦öêˆÜ÷|boHº>ið<^|ÆnYò"Þk»<±vÓÈfÐóxÂ'#€0y5â1ê¤F¨¡'3² Ü”d3(7ÀG !Œ a¥mä3íãÈò5,þB½îMÅ—÷§-ͺÌöô‹‚4ÿþ}4òÒf›rÅViAº÷šy¡œ¥¯v#‰g a'éïuª_t,m—F?|E¸jˆü¹[ …œ4¶¶Ñg NfCvgÐ29ò5²¬ôG³p,ñ:JýòÃý0Øe){ÌÁë2­W}КiX Ø¿¿×›µ×1_*AÙtSÁÇnìsRù ñž²K†mêêÑ9»‚äÞê>B¡²/xñ×0åèòÚ") M¿$¨迷äÓzdœ`Èvø‚×·­Îº£ndGp+ï$U=ghã çI—bÙËî¥YÿG¸+’£¥Q;dvI¬©ÏÔMt_,æŠç4¹dZw=Ò0¬ô‘,n ¿ÆÊ³„9ˆá[GWBê6ï…Š 3(½ï~ÙbþÜvØVR6¬Ðh"+5Ôo+[6xÊêÚËÌEÂ5"gÏÙÅêz ÌHÅÞýš×P{ר_Ú§³Må.ý1[¶³„\ÌV–¹~H#Þ>éÏI?ã¡È¬(I¾;ÅT‘ù3d°×ÔÉñE´Lëâ¿Â¬Î¶OÁ/ ë¡;|¤p"‹Â쥨¯':&¥Ô-az…pÀn[Ž‘0¡ 5ŸÙ ÓEÇ”JÏH•‡epZ¯g¼˜MˆbOæ$ÄNù9»“÷ëÆ„‚ó/ñ¯^åTpÝ®‡ÌóáAm»@`ý’¨lO­kÐð- ü;VYÍ©L\+çó7¥ùD순|&jB;Èð »Ë}Mwd£<ÕÈy´%óxx{0ÝØÚ·;=ÞîdH6‚ê/˜uçë†bñÊ¥d&µpò~W˜Yîw3TPpåXþ«VQHbÙv‚—}zHÂIÏñ+ XùÔA~èø¬A<.æ”zÌø£¥•CJ¬J0D©ßð±ûŽoÚF°<æ_ÄÂè܆%1¹vŒ×Yemîñ*ÐNa¨í|HtGÆ;МLE$ØmÚÛ§13,ÿíÃß8]¢Gt%2í9jQÈÜÇÁÑÅ\Ü„•5S*‹_+æ3¼ ž“ P²q Ôq3Trüºj…EªAåß$Æ}ªÔä„+s[ÇÒ±™ ¨•ƒÑšûfh*퀮àFɲ#L¹òúTÇ ªDa4ë n2¥íq”Rhh?Ô²$èëûýÜ‚åÑ†Þ ˜&8`¸¼Ð P_Ø©–³#WÞlË+s+Ä^€ð›fÿ…­œ²µNã0^ŒgL÷&œ© ­\Ñe7J¸‚´GʤÀ*BɃžk§ÛÛ¨`,d¶ü{[=‡0=|kPB@3Ÿ/Åô ƒW7"$ÝG^g—ý5t°<%È9p&e‡ Ù_R‚Ûß‰Û ý¨‹¨ƒ0qÊS;öÃÝh•Çþ$û Ÿ¦ó¢'š¯!ã ññ³Fn üvC!*$]72ÔT-–0ç±VÕñ âüþèոDžq¢ûø#›álÂD#ç~ºŠcåæmd ä^'+Ò˜îö†“…m…Üœ$§o÷ŒÙÊ7Hò{i÷¯3.ßü3‹>¾¶Þ: O0Žá `ª`Q —$e>éöåMÚ ¨-h?kƒ7Å„Eg7Ì&œ>¿vi¸hK-ezBÃ*…©³ 0TE™J¿ÞöD”ŸªEðì(’ˆ IF&Ø—ª+ïÇpŒß"já¡=«Œ!Y½~Sk…GÁñ`/%ÛøCÊc£ à¡Ö‚w<ˆ1›xüÍq²Žñƒ…³Î{n˜ˆVŒ4®••P Ê_<Ç0J>ch¿ÞÇ‘üÄ#?ñˆWn¾’{éå¿Ò>Š¡«×ž;î{µ¾ntK…å#8´«Ã|©¢· a‰àÂ+E’çÖ™µN…0¢ƒU*;0 {Üö éA°{ J¤§h¡¥ÉŠZ— DŸ‡ØêÎD­–¿ ~Ä ÑèURá`Ê/Ð{¬hîlì•æþB»MçÔˆ .\ïÜrÆêþÛÇÑy~,™¹|—_ÞÕ.Î’Ê€øüG÷ø1¼Uå <Ø‘†Z¯ u'(bâUÚ´r¶:&v‰™‚nû½…Ê!}É‚“d—1œenF{„\½ƒ¶-ãý=ÎRb,Dû€ãŠ"@šrrÝ@!âÙ™‘iS–B|s¯æLþÛDW;Ç‘õ*øÅ’„nòx³†-äW-{$ˆ)  (îžJøbâBÕ©A0z}=å@ÙLúÕ×¹ MžËBÊÌ´siÏGWQLº@ów›Ì@¿¶¼-_Ðÿ܆뀓}¥¤ïc1æ£#oèÈ©YÕûdøúï .V/×ì=¡¥>'M%ÌÞjº·TÅždwè£lƒ,)ÐÆcŽàõÂ8³9d­=ìÍ/ègfê4ì8†çV?Â5~ò+&ËX°žnÊVF¼BFç³À¼¿ár—P…Ž"I’Yªí=ÎX¹œä 7‰7| ?šåX°’ƒ¿=e97à ˜@{ºEx`CÖ7ó¸’“-6Vè´”iÞÐÊL~âÈM,ÁRôîcr‚èòúòä–ôâùT{‹”û’ñÙ2>pĺɰi ¿ØùÌ÷U*T ^žIøxÒÖTïÛ¹‡³ ÃðÐ'7ÁâÞ‘pí}£š(=‹Üö˜:Ëèó¬Ìíµ‡šdóskEÃÿ±x±â™·5æ>ì H2Åÿ%ð²ùOaß²›šž‡Lî"v;)cfÓž¡M1Âíå?£a®àÕû⣿Š=ÜbÝ[,?…ËÌ×mAú.ú˜UÑÆpg†2<Ò¿ puÈ‹U£"P·Nä/6z5ïóZâÚh~Íòýºø@féåF©ü‚RÆaGxq>xxö£.ÉÙk½›Ù‹pÞŽÛH[Ò}¬ÂÁØÖi:¦7E5_¶º…É‚1‘M§8ðE^«Ã=N^˜R 1¾ò¥¥ó3;’acÓí¯“X¾%ôûöøDP¥›4ÿy|§cuœÉØlüÀL²X¡EyÇ.‡ƒ¡þ¤OpþËÔ)ì$y¶Ôö^£é[mÔ瘻‡¿l®6ö€O6)Å辇€¡'—X^06ùäò`U=O¶}Å )¥7oQGuù²ß1­Õ#W«äW¯í½ž£ŸÁ£îm\X#_ÎÜ|¬øêÕ6ûglhá)0°|Ú=€¢…á¹÷ã\WMQ CøìÛ=:Éêú^„P–ŸÑ µðr—~êÿÔñˆa ‚­G5-P • t`^O†À¬q`ÚêMÇ»Öó:~ó…üìÞ ÊI-øcéö/'¢oÞM϶Üe]wá°x#Ö?Ÿ¬âOÌtwD&dƒÏ là.· (1pè·Ü«—>?-UÁöÿk…)áÏ¿ šô3~,Ýù†&ú#\Ȉñeë„™º¹ñ©þ÷e+¬Š“’¾ÇιüðÜz´Ž¡íÂH)yt @QŠ{ Ûû#hÈé·˜T.çžð¹%$RÜÏ®ê¿H(Ú¡ò±=²@»=©Pæp¡â«‚ Õxök \Ð$_ŽA€ù“¿66T´ÎoŸÇ¹ãˆÍ§]¼R,ꢒ ª‰½Ýs¸A‰>ø[N&’H{oe–½ç/j°,Æû¯5ÃØÃÁSågÉ·†\RzWÅÑëܳ7lÄ3‘ŸÌn‰˜ÞÌ÷bû žö\×á­-Ö÷yâét@󦸙³[ö#Ï©‡f¤%¼&z|×óª¸Ý~Üù‹§•ü·)?ƒÊ¡  BÝYk7–d]¬P `E`Y1,øÂ$žÙöeuß/&%É#yI³™}'×&ÅQº£`àâJZ²®‡nRRƯBtÌPÌ 4‹s¹²÷lcmx¥ïNm—óà“/i#ü“­|‚9/òáÉ+þî¨xÁúo™p|Ò(´™ -= ÌË€„¡gUœ:¾¯rfyŒ*lö……]1¦ÖÚê'ôª¿öNl:]º´WKV‡%· h™³Oôeú½GŽ’åœ?ƨËliÞçSw%íûz#…¯6¹eE©DÐë£ô¼È]Æw»TSB³¬·C ïß3"€ ²ÝK6êhÚÔ›eaDHÝ'ÖÛr£8ÿÄ£Oœœ¯ }¸—s`—‹K]½u[nT[éÀ²ÙQÛ·ä! vž]ÝlcýÖ}aMS΄^^S(è/Òk<2¸5¢“ôZÖ¬‰ˆ_§Ër•ÿV&º«m±¢à(4 !i„;ßuì1>ÜÊ*%ÌêêH“/d—¢‚ç_ù—*3·ãïƒpG:ÿÌ+¢úNýµOÄ>’­ÎKvÆå7ðŠØ.€lgD¢:ç¿…XáëG]—%X,AÃx´Ê»ÜbË’¸¢çÝÙ°ý`Ü2kœßòw®þF¤ï ÇU°Œìï×<™®¼þ_ï¥Üð±æѹDøÇÑyl§ EaøU˜3 ·!½÷ÎŒŽ (MÊÓ_rGÉr%Ї]¾_wy!:±}Õr²ŽT¢[ÿ[\5ƒ·O÷¤QÍwûÀŒ¡ª€*únÆpM ­åÕ*aʬ%íñÈø›+$k,íRna´ ˬz®”j5ÄîŸëElü9þ ç?’\4B•hºÍÎFJ<«J’·AOÇÍÿœ»maäd™ä–ð°þjCŸKç|úB2‰mî1Ñs1[Än¼bÚ÷ö^ÅQkÏ`ÍÇqzP‡aŒØ! щR‰´3”NÔ±:>@=ojÙe>…±œáÝW¯{±ß§,wÿŽ|Yç¾rœ@ï‹Ýn0zµRœ'ν´ÜßÐ\ Qˆ‰ðkÐË×O±/hsä[\™Åè&j\ä×X¼Ä'fRsó{ÐeÒW£çºÅ‡ÂH\ÃÙñ%z9»ñ®±Í*(V²¤ü+偺Œ’ÈäÐÒ¢Á(Ž¥3ÝÿgÁ‹,X×i¹’¿ ZYÝè¼g9‹úß$‚cÏ,•®Q”Ãc£®‡jh^èÞr&èeAË1 ñ7ÉÒŠ‹ËN_«Ã!§¹ò>PÐn§ß¾¾Õ”*ìùå´ÔB޵@Ðwè¡mV÷ß8×ç²kçã´vÿ ƒ¿Ý¯¼ê¿ò¤»6E¾eè¢ö½þøtæéà‡¦/ßvQ¸JnÈrÊÌ%ùžš®¬©µC9±° X0|¤úÍ’Ãwa~:Õ| W݈裾\Œµ·Ñ£ëù'ú¤Àý¼+S«mà¦G,<Ò15(õ»IM›þñV]Ø–>«Y ¿¶Ñí£ßÉÒ°ß·óÛ´îR÷ÉUkQ‚Æð&= MNµ …ñ¡0-YJ¯¼~CE#¹WB7›ëk{›ÝdË-˜‚vT~y%Íz;`(ÔwhM•”' Õ—®Ì$˜y³Üäexã¬B+øß˜¨íÈéó šw ~MXQ¢i¤ŒbJH›:•‰òñ·NM¬(¾¦âîð/÷Îr.3§GfˆçùWˆZ?¿•G𘹩›M-‚¼¸ÔLíÙŽ¾sžE-¤”çmËl £ßûN.yvûíõTÈëö§zš\ø÷%kd×¥Lq-iwºhùÍ;•­žó>QkS¸ùZõ_¸´NÈþÀ®Sª©Ãh¶MezS¿÷~ AnÝ|ÃzÂ÷QCw¤Ö‰å½k0Ë w%í±-#½ôÇš±|àä»B¼gªQ›ãJÏZ—­Ù ¡ÚGeùYNŒ¯u”å8z ªäƒ®¿’NÁµ´ð©¶Z]#2 W€çO^×§iˆ™)­©Á_ÿkú¤|“C’µ‰*g‘è²\š…º{^~´½ Ѥÿ¡»•üíª‰V`òˆDû6á9³d]3™£ˆµù?Ú£LÑQqúuÙÕö£îRµ³¨ƒïƒ·óŽõl M3€w´RUHÖnìO™õKýNýØ+6R×jgy¨xG‚°”úÚAI⿨·÷¿³¼æë•ä  K%¡½¥Ì¼½»Ï¬÷žñ7·îÅ‘k—=8 áãÛ‘œ³òiÂ΃Èg¤Éƒcµqîï¾B›{U^(¥é…ï·ÕŸc ÈL”ÄQ?~¶QC¢ãó‹ù>ãòœ=CBë]@ÒÛ±€»côL€;ÖIøwÉËa®oÃõÆbÜ™)À9®iyaå ¯C"’HÕ§1áû4l yúʽ&œt§·ˆ3¨g¥àDm M¸ÔÜ„4Ö±Ý þ¯ŠL¿AhC¼NlM”½Ö£<"éŸ>™ 9ø}‰øý~˜p2ŸL|ß;ÈÍÄàAD?ýØ ‘{?Ês¹Ž 7­u_T—-:ÞÏ—h9?žô?jÌÝE°Vèy¸ÈÄ” 'VþûÐý0ž£øs5ÐÁO4cèc†î™_ŸŽÐÛ<ÉYÿ!M:"}ùI’ŸT*ZŠ!Æ£Ÿâ×6&<.#håf‰®0e™£QyA¼‹Oo¢`M [BfnÙ¡ì,ŽòÙ£|`>yQˆ“À}i?'cEP,M¸"&±±h7ŠÿµI7h=×ìGóC!šÑ  Y¼”(ª?ÅŠÇá<ìÎ×\î¤IÄt¬ßµõ†£ÞÁ ²Ó©(£Â^˜Ë‹2ƒ Ö„i݆­ìW±—H_ë³_…tþÙp>‚¨;œíΠú„S£¨6æmd½L9Q¶u™ÇÑ“³”ŠDn¼­ì÷åL´z0›Ÿß¼u ºL.“šÎÞ£ü¶¬§µ{ Ø]J;Ò°›[Žë‹rb®ÉìÜ9 b æÕ4ôçt{¦Z|±·Œu9°‡ÕËQ{¢ôè½@,Ù4† Bó@û~ÿ çê2ÔÙûYñ°Gú¯2´*ª7Ž­LžóÝ1 ÔÔ2¾Üž=MGÝWù9çŽ^ó,9k% ½ãÐÊ2n‹¬ko‹Ýrí‘4X<*õ1h:8δ†o…­îaø:¶Ô™áeI] Coš~2n«ïÝ—R冥p%À«ÙÕ¡";ò[Îè›öhÞM{l€?tÎxÛ Üy÷½h*«‘G Æf(+†¥]g®÷ø…F³ÁKÖ›På–;Œ‡OoauM³2~êYX’1gÛýñU J*KèÇ8®ýÚ@?êÆX¬S/jÈ8Ú:ñÆ|ð‰ç”ßËÞÎy‘—I¬TÚÞÝX Fƒì1j/T/ªNúJC>Z/oÃë`œ©Ô1jªû—s‰µ¸9i¼rp¶h äg~gã9ÞÅÁbÐM s¡_!ÆÅJ\ÃO:'A tûßÐä«Ï0vöé¹(«ç^ü}Œ@*mMÀù)¹y©¦8záh:–<^à¬?'ÆÊÛ ú‡­Ož#@€p·*Îp%Šð¯™3¹MB‚H‚K¹f Òެ/ÿMuÔÜ œ¹†§JÐDhØÆ-«25-+ÀNÌ›Úç¡L½6Åg¡4£Ð êúPï“ Á–b…˜&‹äQO·9„_±z1Kå½ÊÝwmÇ Ö[§ö‹ÆkÀt®¼°SoÃaS×NÑRH‘Î;æqÑn纣‹3ÊÀ_ÓëÄ 6Ì×çWrÕIÿ°äI— µ¸â‘¿vÎ}rÞÆ b» ©Ûk€ˆ•4„J…ÏÌÒ`‰óbya J2 `ŠU$a•'Ü /áÏuR}Ÿ’¬D¢’_&+Ú´õŽ6©”æßß§,&È'ÆgˆÏÊ ’aåd?&0Ãcp‚9 ¾,±]€‘sznt~0÷´ å"†2ø ëä³a±{hô5£þ¥vr–œÓc0`u˜aáLÂùn—œCq7Õ€À{žŸÓòÄÃcÉ—UTÌ#ÃÃ.3dhC%íèÏUî'¦ŠÎêâA>Dç 4ã­UáSÍèb×/oÖW ÔìÇe>†ûÞ,öýˆXPT ¢Uº[Š¢é@yÒLYë}և燎q oºXÞ*±qª¡¦e¤€Gž?òG³¡ÖŽÓ[ýt£ ✠žKQ?ÉD…ŒÙôyõoÑQ0ßm#5•A k‚l 2¬íT“øÚÙ¨!WJP$WÇCÛ}G¤ˆ®„Y3xÔöëX§ ùÁôÎëqNo/ÎèÜ—¤ã@pºÏÁ<<\,x [ ~=Dvå5%¯_Hôà›Æó2®Ú‡™´¹5h¶Íð.JEXŸUXÛ|hh“ãŠò“Bh0ꯋíhûYR}@ƒëµlÆô¼U¥–mÙº@Ç ›yZÜêˆ0ÕÙ ÞQd/¿XªÇNÔÚªìÑìÓØøÖ-Úèºh@s~]»õ÷:àþ¸Aª‚Æä8>F–z)*GTƒXéݱqÈÀï/Õ_ ÄêÂú¨.XÒƒŠé¤·!¬/`Ìᥞ ~íÇ~ü¶äÁí¦Ô¬Í •–Bàq{óš™oöÈVT8©Gf¶}‡ÃÍIØÌóTÞ€kÂèÓGmEZͼl;b‹*å¨'¡¾àbȈ•‰­²8t„^–¯Š6kh„žèXri”}›˜™«ÜŸúSO$q/ë9ùLë¡çNî£dHì¹Â*õŠ]zì“ä±)ÅRt@?õã“ÍßÜ åÊ›RHÁ¾A"j¥{¿dçÜL†¨˜p[¼”Òh*XÁ¿¹÷¿ìÄO°Âœ{0Ù7ƒ&Ek+Œ"~q ¨; ;åÕ®ðT}Ë_¿ôùºìU‡l JÖ8·Ì¢s;P×¥YHu𗃯Šu¨«˜ m©¥RE.‹î¦šhXkFꧺ\èóÐÌ;Ùkñ…UÚBú¿-_Ø;ޝB¥ z´• 4¯(^ØðòÑß<|Öš¼DöZñ’é»¼Ãø,^¦—Ç^\—sé0½òx£@’˜j°Ü›NH©¿…i¾ŽBçÛÚ²«P¥#ˆ<Ô}¸«{rr´zdVJMGá`ô–^HðçïjÑ~"É‘/ßÈÕ¢3k² ïŽJ1à‘0Ç‘¯;àãÐb[ï; ²GxoN«Ñ$Žˆeõr —=f]ÓƒGO½.MDƒ³#ªÈ ò¥²èç#bÝ =Ž·>Fú€îØÛRÐí åü{ÏäÞ-LÑ1>/g.¨0ÌÐ?ªD3zá?bÁ*ëx¨öB>ì¨Ò’usÕLjN÷!?º´žèF¹F™TìoþI˜ÁÏe_p”©ïÚñ–¸Â\[Ê;xåo.±€ ÿÆäµG¦Ë“uPS[ÜC¬ªû΋ÍÏOR® ´n­Î¥:+(jÄKÖð™2Hÿk]㣘›àš «ý%Ï¥mìãÚŒvì[ɆnÜÈLGÜÑÂX#‡@òÙuH»R1Ÿ,i­ê}»ù˜`ü­Ä¹Üt×6ÝI‰Ù5¸_qO ã}xÓyßU£_OÑ 1Ð)bûïæ…úü ÄÁŠ·¢RŒ >î À»¯_À,}}U­ì†·½áYç$ß~ Œ{0ÛÚÅ;T»ƒ™ðá‡|mÓ„cÈÞoû¥¿‡;”㜠ý”ÀεAME~›g~’ë<~é#¤ëÓùCìµðy+’€ð¨×ó6·ÚˆÉV\&=ü¢ ôþÑhV¸/•ÊcdQò©ü¹èWðSÖWoYžÞ{ †»/GþTÍ£‡ÚÇîqµ)Ïê J%^`wë@k²Mú˜ÎzDŽh8鯖Æåà‰õáJ>jöuŸ»ÂCQVÑËk×RRK¬·Æ¼‘´ëå(ÉÇm§<|¥ø[ •².GC¡Ë~ðÙL‡JÓ·ð^5VˆsÏÛy©–ˆÄÚǺ£û‘±¹Íqo“Âu;ÞPðzúâjrMÞ«à¤ò•aeœDzð"BHÈ`²Á|L¤ÓÏÐlå«UeàUTÄ|ýL¦SS+ÌT M«>Æû·ºWLyÚáǰæ˜+Ͻ÷J›²ä—Z«40t{ðû-­ Í;ôËc¯&Üp¶Š¡ò$\fEm`´Äy(¦ dQŠ?—{[ÉmàºZIùdp{n™¿.Úì:ñÕWKø2ô×–qY'ûИ>eøÀ?ߎ-•Ó÷9ëÿ¦ÁDÛ'È2pŸ¸f:rù½¶ƒÚhEØ¢e‘;SvØéÍ[±Éçùÿá ¨µùyó’Õ»2y>b{Æç' ]nMÊ- õõGcyÓ”s³” (ÑÆT¸î?E´Ñ0 ôKú)ªí¦ƒnÈGUxføÁëßsŒù“—ðQŠñÃ]7¿ìÞëÇX OÚ6 ¦ ˆù +á×õ“µ¬Eé‘Í­ä‡Ñ¿³Øwö4G¦¦ÀTŠÉ0,¸×ž‡åmY}u¾G£‘â6†´ÛGÑ^jhÒ»½4÷\¬EAÛKÌ_VÅ„5?dCŸ½CÅã’$û¸;ù»FéÀŸï^—À‰×ë ÌÈ<" ¯=ó^Q2ÏWÝ! ¢v\Eoµ£õÉs·F³+½‚6ŸÅQ´ÚU÷µ!pÇ «|iÑðH"Ó¤ c•þZYlLê™öÖàŸý’̾†°u.*Þ­ô¼áMSt~gþ%qPnêRtt¯V?ÓðÓó³g_QÒíF¡è§íö=%.»Ÿ)]>ß)äD}åì3[ööž7ÂnE>£Pyp5/…j÷j¾ë¯TŽW}ú_Ë’wG¯^h+_ïïyp88H]ß]\³‘ ÷“‡kE:}1FKp±€l %˜¼tÕ£ÇõŸÀ6JûŽ%dÝ]¡ž/˜…Á¿èã_HÛ;S—gBS ‘]Mïû³’9aXÆoQöˆß¦gþCCçõsI¢Ñ§×¢øRîAô}ö%p³pY°CñJZûP äZ"áBÿÙ½LºzÆ2²ÞP,ï½pR1ÕÓµ˜Ì›h„Úe¨›GCšT"Ÿ‰Â/É ;Ý:NÒ_Ëw 94Ä(ëzXÚbô»5¶d§v­Ø›r°µû¡¼Û—5/÷½rãŬk13òÞÙžŽhìˆ<úÀ;¸ùîmb€Àï4992¨£»6çÝKcË_ÕeᙨžÌÌbªåô7̰.L®³ÅŸ’«`“*H ÔGµE‰)iÁwQ »Ðá«-Ì{j­ŒÇÎ#A¶w£pNöH×¼{èéê~óé$dçÙL,J9¾¡\Pn°Rmöê p6|‘¥$e·ï?´`O¡8˜¾¨¯¨D­§€sQ)¼B©3UÄv8ÉjéüÙ_ {Ͱ Æð'àêÍ!êîÛGvú^;™mòS*¿;À‡D”8¨ã–;¼y<Ú¿·^€±ñúuܱvÇÊj7¦õ÷O€Êë‡]@6õ5ÜÊ-͹¡òÈæÈú=½Œ·Ðy>6ÜŽ¤ö"äëÖO :fÆ_69XÕÊf סGc¸q-±úUûheŠû‘GD¥v^ëÓ:~³8ˆœ¬…ìÓ±¨@z+£æï¡ÓVEG­`¶Þ!WJÚŒþ-IŒkà,ŠûûZ«Z š®+”sAþMּǷ­\'µel}´d‘¨ãPMÊ þ®˜!xÔó~L3 ¤™°€«,Å¡‚±,&PÇÙ ®5—ßÛì¾)N&"ÊÆêû-ôÚ& ˆf‚°Ö‰ûEÞ‰9²Uéà™Ö”À›¨@›%(9z‘A7Ç ºr¦OåÌñ“„µHý¢nÝÈìŠ[b´¾%}I uÞQ¬Oƒi„­-ÑÁè&‡ÄD¡ô£lµ}¨Tá0§4ð„ž¬5ß`VpL?m+­ëÐãÎüÒ1 •¶rxY^AŽ`=q8‹È´ŸòØ4­ÒÚC‘0kŒß½ÏMDâ"€›0DwBˆMk.×i“J*æ¾Ð¶+)ù·•ÃÂp@E£1À&œrÂ]í¯Ç„nп‘ &f©r:êÁZPž”´Hüv.ëxóf€Ô}™ ¬/¶‡{†´ •³æ'ZÀʤ§žÊ} ®‚0Nk–$|T¹J?)."¦ïQƒiÂ+¼ìàmÂï;6¼ý¯]Ìû1.ÁdÂ].ßï€Oi"E±gð)ëß]¤Œ÷äWËaæ!÷)÷!³-4>¯±eŽîà±êlÖ Ã`Ú Ó³ÅGÛYôHß P”ÿ ,øxùSa„Æ•#!w½Á':Oe‡bÚãáókRãî3F`7ºL±ÔÐ.âüô·ÀaÀ,Z7l‡w»›þ)=Å­ÝVa¡Q³ê™°ÅÞ 'c™±qó¼{÷Á\RòºeÆÁ1atAë jrœ@{&Òz›/C d È`HqTšÞ U·ŽÉÕŠÊÛ)•ù¶J«¬¿íW!¿ÖžMG÷`þÊÐÚé÷¡Ï”èfx8ŒF³²‡¸×5*Nh‡}Wèw»‡)½7Ø~–a„•âÓý>®<·Æ·ÚúãíéI†Pœ½ºdó׎ðåÌ4º „Óeˆþ-9á?™a’‘Ñ;j"×Zhk3ß+Û]Iˆ×„çŠÙ}‰G°®NƒF*Ó¿¥Õš“«ÐÊ1 .þÇ sþý\ÄøÈÄ ÑÍ^Ô»-_r–³týº†£Æ—¦æèàT:æq†Ô”fòXÁ|¦šû9·¿€_a‘Œ–~„Vüúz3– s£s±ç`õ*‡¸R¿¯îΤi#­B@²¢h^W”síMúŲ§€ªÐ:•0}™óû¨±Y„^¥'§üä&Ù?²– þþÄ–©j´Ø¡ñ€€õõª><”#l¿õ‡¶ÍK›g{k'g߈Lr «.Éû†áA„úQ¶*G&&hÊTÛu6¨úàS„Ü¥oÉÒ SjÇz!£/¹¶Î$O‡b2¤Z—_å^Χ+±+]íí–«u)7Й9 ³È!ák º¨‡-Ä(-ä=gÉ.Ú¦öSÒ¥ X«ÜQ#]³63Íù£s r­ÚðFÀ+È¡çw\¤S”–E¢¸ó‚ÖTr¦y–W45t¤,j–ûkq¹ÿïšÎwwföñ›/K¹sĆ:w·°¿H» „X9Ç]J5m®£SíÝ5ú˜töÓ>3¸bSÇûØNÏŸ9ÿY‹9µ”mT^,DÕË?Gi Úx„|Ðáö•ô5Oùíîõ¥ZühéݱäD”»æ¡AC³sÆí0fᢇ…€À̓ã–³¾‚¯+èzæ})½ºõbìõ:}-ÙVtI ®uå¾oäë^| GSùx;£3¶2fÜ)Àøº_½î»uí´WPZ)5H–h<,\s'"ïDwŒ{öòɰ?T†(ÈL´ëÊwsÛ¼©»‹€µ¢_ÒîÐ:Þù¡ÈCè…ºÓï…• {àà†utr#6Æ®‹¬èI)Ð|þ&ô[PŒ‚±Ëq´7íÒùÕ½Àa÷7 „@t.­±gì]§{+šòª6Ã4¸xAí]?üôœ[€ iúb×Aë6[bÇ.ÄH‘Áèšø¦—º¿©ŽP š1®UÔs¥-š»»Ù.ËŽ3ά~õM5ôÜšFƒ›ä[)!ÚØƒ]+TM*MÀ8â3ݵ;7Öô]ƒ‚²×Ÿn˜«Œæ¾« ¥[¹6V ‘" DçÿŠ8y¼ÐFU¦\J[ç4]¯Ãåô¿—m‹|¥}wë¿"õ}‹PИ›×•J+|ÛÏœ›Ö÷ß¶'Q9x1cWéß\í/;nÃ6ܲ§ € Ê>Ü·Q5$ȯÏÓ|°Kž(Á.ýæ…½GòÎ6‘ÝŽ­Y?‚cN˜æ´ÞCtúÑÒ'ÆðÕí´L}ѤÊ’¿ƒ7˜×TÐÑ¢uèÎt ëj$"köÃSëgÐM)ð¡É øÕÜ|ÂqäãÒxI{ÖÝ{ÃWlÂÕ ¥´+mʵ'wЬ¥snÈÀ󲬵øÄÿ¿ïŸZ¤Û.ÕßóòI ªÿÚJ $²¸¢žÆN¥ô稢s}_§X?N¢2ürÜa”^Ú~Vì𕪗{Tä~X¨^ îÊ~<¡¦™³Àú2v@yÐài»0»ð ‘/LPmZf°˜ÏﱪVRÑñ ¯ìÓä™ÔD%úE\ÍÌÖ’5%™±Ý¾ñ‘¤xÕÆxÑÍeýÄÊ´ñ£×4•ÜÃ(ðQ9|Àƒ}ÔÛ!0pþ-¯Ã`*ï³H ŸTsåõñl¡ÅƒÁB{iÃÞû%z“Ýpf,Õº})ˆšWÄzfÙNòתžQàó8¥r¬“Þã¬ý¼Wó{þF¢ê;z²½ÒñzccT /Ð|ÏÕàMŸÚ× Mp½ýô l°ÿÆš>¬Z/ YÇHÎ+ EŽJ”×R̶½"u?âµ`›ÊUXçë”jKú™…ªg`f6ºŠ"MåÜT…(ˆø Œ9ò; ?D„GsçÙæ¡@#Ö?}O“:~“ä½/˜†½P4Ài=ÑE ê¿j §Èîöv Î2zQ7Å?g9¤xsUNê¦;2àÛèy‘iæc2³ÓÞÉ ïb–Ÿ j ;Ã4 !¹q×®u1ÂC¾d³·ï­6‡)Oê{Ób{€µ¹0­7ÙþfÖä¯dXA‹ *·UðžÍbâ…nÝI"6Ñvű.NÎصL™ÆµFå³`oHÀÌu'Y®§;QžWnøj’=á+S\AKBPã>ÎG‰§áÏ güežÖ£Y¤·Ê÷Ëyý~B',tmý‰ÖÄÌ÷úÍlÛµm]UWøâ“ŸÇµ›Ž„ú²5ë¶³ŒÈf+1ünò{¸¼/i~Ʋôóî€ûwÊýô 5…ä" úÖð&¤ôV|Eƒ2eCšCÛÆØð÷šZ‹6eщÙîSZí—&ØRUdPÐÉÇâòŸkr@hˆֹn ­¾û‚ŸÊòóRSÓnX‘4ÊFmV¢ ϵŠ~ 3Ù–jXȉŒˆ¡ ;´ß;‰>·âXÓ_§9F÷¿·…š†óÉ|\(¶0Ív9(ÅõÖ#ÆýŸÍ§ 5 Ú¦–˜cjÀO=Úë>ìåœò}ÙIíN%†£A¨b w9#ü¤þ›…Ö¶è?$ÌaŸÄÿ[~˜øä5«ÛE§'±öùÉÑãÊí?p'Ъ@C%6«ºèKØ5MÜæƒ’—lP×…3'ÂR¾=‹jhßœ¸|§Í[Þ.·•?ÇxHÁIÉ—æ$sÇöM˜/†ÏZ~}¯,•û£7vó/ÉQü‘S‘#`Ù”Ù÷L44»‹£ùª,­JHoDᱩš‘0k}éŸcã×ræ´ù•?–²î:Øvþâ•|üÇQ¡·¬·óVw.€åB_ÀªçnfïííÌÞ­„Yr dë2JKèÅ1‚˜ÔLV‡§uz2Šrk-ÖXÄÎbÅ=*ÀÄ´ç‰ k•ñSÃË ¿Â<%v8j„g‡F½Çuàl’wìjT/;=nD rº2#ÒôÚµ5=@ 7ÎÁzç^æg|½þ6²ûåîíWh9iÂïeî6\%”‰¾ß¾wöo™Qn?ƒø!WnÁŽTB‰åÐëU=fdð‰æø-lðUæÐ‰ðቨúö‚u/›yÑ¡âËGc.>=N%Zdìx>ibù¿Á{l ൲XcÖ$ÿƒóBþ>3W³"âãû{¸|bÓö݃””*'èïcyŸÓ íñA…G|Ã6®«a!et¤Üi‚_ÁìùÍX:-ydð÷8o‚³sŒÙe¥ûBRÊÿM³¢©çyhGAÕ>Œ†ΚoÉðòSÕ7 Z\ž;œ' mg껃Qtþë]a†žw9£ý7Êzjã¥Äú.3b-ø‚}x¤Â07yt4Ð[Ž ‰‹$Á—ç›™Ï仆zIŒl üôÙõ–R&tήåk‰¦¿bL¸8¯Ú:L¸­qõ¼ó}­-<10mÔÀö‘¸oÅ —ñõI½®¶Ü÷¤Óî..£ã®¥3ÌОÑ>wP‚aêoåˆWG ÿ<Ù•…Vå9¾[¿×5)Åy3”[¼C‹Eå^la.Ôåí¼#ýZ@:tªá¤¢ÂW¹ ½$Ýâ¬ÌÖ4`§Œòªr&RÀ 3×=vGøoâÔÑþòQLv3åÚb ˆä³~…r í@y¹¤6>}Û®Ï= Xp(®[†`/ŠÄ¼R"ŠêhÓÀ¼þžKê=†ŸòYÙ ‚N·¾ÐËd:F',@ƒ¸,\DTŒ»Wˆ'ÔÐó‹ìߤϦ2SE¶Z!ü²©•ÀÁºës îM±ªïþh jEq$¬‘B×߀¨Ð¶’³óɉ›/ñm rì–A&E@µMxÖ‘eÄ_ëþŽãwh³x~5ß;'Þ³vkÐêեvŒ²Vy~E°Êûð©Ë½žuè¬ü5Øúž|N‚ánœ-ì÷…ѼµhÉý^lëñ»øX0. á\À¾]Œ·1-Ñ{°9WÊ®_I¬÷ÏÐÐEØ0'f¢†ÎQ~ ù-QBÚ^†c ‹ÂxªmªõߘԗëH¹5?èREý/ù‘ w¿wújž„è›ÍNŒKmš½?‘!Q娶T¬½V>¬Û°õ q“^”^šF„z\H¨°¥ÿBчf#æxG!..y‘3áxmGGˆåH†BKÛ‡#\1cÔsfH.¹•勸Ue3á²#_ò=9=þ}°ø7÷@VówDGëæù³`[ÝõòÔêõ=ðµ`W¼lJ±ž6_ÿF)òñ?.».p×Ï}ˆ@ä6;ëXq`ÓJžF*ZÉuû­/~Îé˜Ó›rõ·‡©º%®Ì—iDpÆŽ£[ÔÅ9DuåïpÔ@ruW~Ñá(ÎØƒ…ÍËX¦üçŸäÏ[$]û¯ñ5 úI{älúqo´hý¬ÆG…ï—Nÿ§I$Pƒ9è0úBypÃËâ¿Ü‹_j¾5Ê‚ ZOjÈ·üµ£À(ÐéyÝéU *Yï¢Nٌ𶠔"`WEä Èëú›ùÓJ"ZPkq¤«:kÓô ù3D5)$dÏ…”GBÑ1¤ó’Íšpóo j1ÿ2HîÁiKñ!8^† Í”È{É„rÐß®'\_$¬¢L0±ññM„Ë'!ËIÑ<#zWÂ|û½‹ xmÞÓÜ`îÜa„#ë:´ö5üUôÿåog«²Hí$[¯Ö—ˆ]9UZ 2¾Ð†öÑø„›½f⸢Ž,÷.ͦxÖÈ€ J^ìÁA" ©¥ÿ2Uð#j³¯Ñ8a ýÖÛ:a£Mú.Ặsö¬¾ÙAåEÔðnéEžY{´m¦E Xÿ¶9Ïß–š«%Ç;Övg':§|}ÊD3)8<ÞV®=£B½ŠÎŠ<æ`dLoÃÀ—¡«>õ JaÓ€óNôj§­v漺ˤ¿a³%ª|yEjÔÞeGQÚÿJ¥-L$D H„{ª©R_ú«K?x–ÏLkoŸ¨)ÙTN¨û[¦è–e^^…]³òJTÂyÕ©K…ì:R;„ÎÉùÑÅsd¾ÜïÿŒ›ã‰ˆzñ#s£]yÇó%Î •Îf²âÙ‹'Œ2Wd"¨TsÜ^×Ïû²Wãð…ÕƒÆN-t‹·N ­B¯›‘~Ñør3"=/)¯±¹R¦½pÞ¹ RÈ#e0ÕJ´±À~7ØKm Ë¥É(^bæ¨?²Ç •Ò÷lI>*>ßá,×÷[ý)ˆÍFõ ñ“âË<Ö÷%¦{³ ¦Ò1‡„@”s“w´AKѬûûh4ÈžõÙ}yÏw»è–1H÷’)Þ4û(U½˜A°r>—Œ})õ²¥héÙm’1 ­Ÿ“uAÆ€BY; ÈNÐ#VY6Fªùú[ÿE+2¥¼¥#fò@Â9‹y>ãwˆ#bùÑ4L&c7€ûŽ‚€QÇ©{S9†×%ï°~3Út¼8‹E~æÁ8Ëߘqvÿ—,Š\¡Éƒq{ࣼ„\¶õh Œ¨ä«Û;€¡ÚÀ…[a-»µy¹Z*bc¾4®ßY- ;ëÃÀÐ ïÜǦÍòL`ô³Ë¹sîQjð'-WÛQ±Ÿñ{3‡é_?·R\?XÓå+µ9Ë÷»Ø…qË$;%«=x8à´H ±2M@šÿš †TÊåÙù‹ #gÛà?WÀÖì_Ý8Ù©ý8!jE>ŒMI šE'ŽiC4¤s(ÌâW>gKÕ¢~¯ŠÇQaŽª—Ð,cv´~$9ÍÖ ä´¢ì0hgp†ôÉ‘ v…CÿéúnÉ)f’3"CØ6Æ1]jí–‚)&—ãØ¬ØzåƒHr '§s¿s6R·21uÊêètšÎS; ™éÏdÓ!É,b/‘ p帪Òt I(ÿ׺ϲ®SÌ~?Rùù.ÙhLÑ–Y-Z)+|æïtŒ¯ ß^/WóŠ&âÍ©Ž¿‰³ {cÕ\ RƽúWRý~8º@ÖáFT?õ¼Ð/w þ’£šwØ•Ã÷ó¶£*•óoÕܘ\Ù,y­tR&ÓçAsøßW¬ À=a³¿ü`Q‘罨©Ã£’.}ü.(¢¸ +ö´·ÿÚsŽªÁûW¤ÒEÌ )P M³5˜Ró$†ƒˆ™M³¶ÈèÊÈÙB-SBy“°r: ÈÒžâHû ¤ÞOÿH?û¤0 rC%uœV,;«0ghX®Öìe”[S-ª‡ö×5=Ëq/¡Ý–I>(vƒØäK“ò]İ¡›å&bk}Ô' ­²ÊÝ(–W#ि!zÇßLÀþþ½6«ÛÙ4ˆy%{Y¤C0Úƒû5™e5­­ RËU|¬a•Þ—k‚©ø©¶Ë­:d‡KÏ[ë¿g™!Ækù6åsz37z/ÓÀ¬±6ƒb¥ èàÿ‚9Øo@Ç^¦¬9³N"r0µTó;¾uTwÛ¨Ä2‡­]RÃíµ79c\èºÎ ’úÎÔ”ÙÑÖ]QÊÜ- .ØÌù¥Ã‘zˆ¿)#ðaä.~Iá¨4>Ó]ítJ=Êw)?ê®ðÕX†[Û1 ¼íámÃ!c¡ö è†Ìø(.ÎPzi”L<‚`ŠŒa¤R5(ÆõÁc6 þ>ª6`𥦤µþëÓâH‰BS3BÛô¯wI¾Ï&‡À=Ü8ç’:&–…´x“o³÷°É±ìúO„¡¾|1å9¥¨fyd2ëÐL3Í«9ýX¢5Xiåowá÷d'Pó½WãT>ÎÈ_´ïaϽÏ3·®kÑî›l5dy3.)}Ìm]³˜0Pø²ØjÜ¢8pje’$- ‡Ÿ#‹ëï#ÂSS÷‰^ÍïÓïÑ=²HŒëw„&ݦY繓âó¸ÂjðHN5ЦÂLf›dq~ÎØrd,Íü ÑuŒµø©ápA$\P¸"“ŠQ¤ë©e¾¡Ì‘ؤÄѯÒ/V츓- •>³9 áBÂZ“fA* Ô#¼l~‚’Úhƒ¿öMÇ[ä ׇã [KfŸ”ÞÀÌ`?ø¯¾¼ÒÀÏ'ºFö£‰*s}EŠEmHþU#ÐRhøoÔ^&ìmzL¸2ãÂÂÙ7l€G‡“²%¯‡òˆ˜z>7N/©ŒxâT¸'Ø¿n=Yùn¯ãý€ †¯ÁÌGiQÿð$K™>ž ”ÚÎhQri‹RyOkf[i²6]# »:éò@v%.¶²"´å)¦]sg¶ÏÐ÷ñ¶cÈœÅGó²_:á²ÉU'–Fï.‡uÅP¦9Üø ®£‰~Ÿ^ ÷ýúé¦vÔ(̤gÎ4c¸hw$Tø{uïÍYÿú4-Ô2@„‚A„Ùz˜oÑ )Œ¨Lzñ¤óC1sH¼w÷ÐûŒ×„ž1Á»ÛwñT« …THÍÕûa !ɽŠZ—H]œLòÃ`®ÀÀ Ù_/Pž°_dM0¢Ù3Qt?¶Š‡÷÷ýBí¹–5eœŽlÄ€ÞÓ•¡óz•ní½ö k,Vê•–!¶dYa¡Æ$uÞqf®¿ØP/-~B53eÃðOJ¿dæ ¨[Qʾ,ï¬ýàÔ…-«WÂ,У¦¬ñ¡öoÖgû7ëóÈýd­í$DÃØ(tBÌïã&`¦¦+`?ÊR&Å&û¥ms`/ª‚5‡² ,ÉTýµékÿbÆÚÎC¿%zýƒ0CX”90#H~#ž* ^ÊöŒZ&EôÑn3Ø!XfMÉåÕ±ÓÞ®¼&lÕ6ûŒ°KhÇqÿœ‡£¦(n~…"/g(ì Y]Z@'TÏä±(6ð”àÌÍû+ ¤Y³høMÖÿX:%g• ¿ {dKr0LÚ‘1Ñäðô—ùëVÍÒã²»¥£óáné[rÉFúhçÐ C4‘Þ‹°H©gþ‘Î0Õ‚8¦i@{4(}Ûtóf%$Ùá pcéÔ®…%?ÒY|4TtAÍ7wDNÒ¤s3”’¦qW<ž6‘ëIS‹bØœ"×LêaÍÕ!»¯y¢ªÇW_&BŒ>ioø“HQ”A5îfüK`˜Œµª8ÇÆ¥2OTU¥·= Pýû‡«ñ ãààCa‡+b_ýyÇŠÊG•ln@ÿÜ¿Ž²ß­óvJñR“2õ-`ÎKw¯²–¬çHXý·;ó°î-òXt©/ÌÄË f÷Ú¼ÙÔ)Ü‹Gm¬^¸¿“ö`øx¿x©•µÏu-z’K}'MevzàK³­ÝýKœFÊ´â7ÁÌOk ·„Sjìú`ʧ¢C•–ÇÝWô_¨_½Î'†J8µ·¨Åò Or«ÅÏÁ¥yS—"ƒÃ-%õb\Ê.e·,šôsâùT û×\Åm2K@¬ô19ç‹ów±®^WÆh_ë ³ÎpèU”Ïãñè lÙ#Z©ØÇ¼q¯R½Lví¯W1“Â<åM®ô˜1GSÛ!„T³Þ!"\ݳýȢ㡺›¤e“×]Œè]¶_¼¾õï³R·Ç! ÖÜ¡ÆâRçCÓünéê>ÌÔ½aB÷F´¤Póö©i+»ü ÒÔŸsüÀÙÀ½›ÉJÝdr›O²LH¿¯mi¬—ê,!é2ñT# tFÃÚL$w&¢õËW·î¥U÷À .üÂßë—~Á\7Ñ'J¶¶v‘L’»>1îxHìφ)½p±}Ò£* ׈–]»®êF%·ÃÚâþU#mñ–X(-äü±Yˆ±“ ƒÝð•ôå ßWéAPÔaŽø+޹E^íܘ‘xQVY‘Ÿrß&å_)èj Š[Vߦ‘iƒ•÷Ú XN!ŸŽ'èªnPÂH&ç¬Õ¿& )¢fL(µdÿ’¤ðUA`_þ~笯;7Æÿ.jÝòƒS;ÚåtÉJàš- ! Çuö$«vñ¡mÛlS*îü¯/ë4ÿ~¢ùq´Ìo¢£c$š/!ædªÚ÷V8nÉF]¬€¿nÕÃA;DÒÈIÚá|•Ú¥ŸAÆøîí~1¶©×c§|ÔȾÐfA&«B×Ú’ °ÿÎHž"3S£Ûb­¯mìÔm8+Ú-}ë ¿è™:¾õlÖ.úcŠïc×û!¥›ç†ÆhI`|^UB‚C1¬E³*wIµ1—Dp_îãüÓAíÂC+¿Ðfg5?çG,®)…£­Aº÷¹ô&VƒPàïJç‘s ê´CN|©éM î‡Y²\ L_kŸÆzÌ1âÖïVrúr¡Ï.¯äç$wÓ§i"¼ö!a9"‹ñð[ èéÉ€ãQ2íK7*]ÞÍÿ@šŒ8) vtaó2ºuÃHªþž(0“u°`©•¹¯ÐÝ¡jM›þ7hËèfRÕ©S´tÝ»dý]éÊÝqY0a-©¤¿?Fø­ì6šY•üwª¿   óñ$…¼ùËG,+úë> Ö/9F;z鷉ߖ†¤zOz®'uÈcex``ðw1­ý¦þç#A@À-‘]šsEB¶=;Ëu˜MôænóPëêÜã°éúGS…¸„ÎLlȾ]Ó’:D‚àcg4;Z›|¬èˉ¢Hˆ½vu"BiïAqš°u\5` Fa¬Ã:Ìùø4³ª¯¯ã#è{ë0±œCÐ/e|Ó[ÒÛÐ4+ñË {8ù-6Ȫ.ûã܈!PÖS˜%ö§[k!ñ.)à°Ì?ú­%¿'vîè ¨ö 1¬˜"2ä¦l§•AšÚ¤ 5ñakR ®ðY‚ÏDuî¡'|§b㛣ÚöÓÅÜÝÅË ëÔHŸÇˆN"¾GifàfK6béx•’©ü§ªùWŸ…~™èç¨7üñ‡]Lõ¿Œh­¤ÆŠ¬³4Òze›xõïñÚƒyñnA7íŒ)eì¢äë–¢_"ÆùòÇßÛ"ÜI>V#ìœr%gÝÜ+M2Ø“6®E[Oð³ VãWS¥>—m£òŠô&–Bóº…£¶ži¨Œ-•GÙ€28½`pé®K“’y†/z—p^ ”ã±ûS¢¬mÀê¥`[IõäaµwãÛµ®¸÷‘¿gò±* ÅÈ8»Ôcܬ¿Pùhºósø ¡ÏÂ&¥Õb^~¢jdó1R?<豞 ¶æC<+9ñ}=æ•Õcb/ö©™:THŸŸÌ³Ñr€%W(¶jôó~høJ?Å0壦ØÑKÔÀXÃPÚÕK\ 2>;ûãUó­trZl·º!˦~W˜nKÈ‹Wúý:LÌSÕƒU¸Yì–ñ3«ü·çƒêUâ+X¨ÉFŒÄÉqìW4 j‡YÅ0ï´ÝO!ê¦á8G榒ê×»NäÖ? ¾­¿CIœ,ž• ØV‡ÇŠGübc[5à­'©´Küó.SÒƒüG À"Í-G™tû¦í3}ëÒFÖýĸ•Q1xIE*+cÝÀ¸Ù4¾pëý•Ïw¶¶gCø «ãÂo胚À!<ò¿É¯§aUÌ·+y«ü§Ëô|wEB%¸Ù«ü¬b¢¨X ÓÕIBì:7ký)zމK…éO˜¿§&C‹ìo³îH|¶…Äu…ìÿi÷ߤéÇ «"HZéáÌß:â˜ó½™ÆI<®dü8δ¡Yàã1½7‡¨Ðk¾5†Ø„ï'l͉97)e ¾²ÍñÃiÙnc­à¤ƒOç‡Üë£O–rõRŸ4SÚ$ƒ ïGPþî>€Ùëë:áœÈíö²t˜Þ9{xUøÊûe)§ ùÆô¬/…N†1M0>ÜßL3<]E•ÝO ¬ <|ÛÔû½v»5hÎ1Sùeb˜ðƒA3µZ¿…B?h‘Ilûù´æ¬l€û¬Ò #Ø*P…F%xàòï*‰±d×õƒÍ‰QX§ta‘7ÙN×›U–æ³±.ç¥grÆáè‰Ü,z\½Rá½Øæ¿eOú@Ç› w]OXô¯^gPù|cÔ=² ßžj£m\$S7×zb¨ä‹éî1˶%¸+¥V”?$Ûò\êù¤ÎÆO’!ˆ‘oz²_Ò¨™˜¢Œ|´tND*qQáŒü#d!ã·Ü|\ºA@nyDÃà)µmÙ^ºŸ°á˜Á7+œ)F¦Ê(5 1ÝÈÊõ² m{b™ÖËÛc¾~þ.›úUõõ(¦`þõuuI<ÿZôjèpÚߩғ² Ã@û‹žÕGJÔN¯·[[Ë;åT·Ýd}Dïðäm06qÒÒjmÕ°Ÿ¤¾4£[™U ¼Þ¤ÁGÝ"X™N;ØŽ·~ÏC×ûŒ¬>|ï¼iýë2ò/àHþ$Ætº Šù}¯©^\øcÌ w¸žÖòÝŠÚ8Žo± ¿wOI‚a=. *æFÌM“YÞÃÅ@!a¯ƒ}áשíÅ;êµ2=ÙšTI±£pÆ“DJ—§r`€³·ØíŠþÉ8^ÆÖDŒ  €×?b§®Ý,¤3}‡Âi²NG ®Tj£µEÙ`Tf’;vídb*%’óê®J`E)³SàâRsó±M¿´zÐËî’¹–¾¯¾ôß“Dù÷˜¨k3V+PšÆ¼zû2ú;Ÿ1‚d€ç–.QáÙ|€wÛ«.•ßð IÝî3uÚSJÎl%6IZ«»´„ºTÊ ì1#?&™ŸÌ@êê hZX27_>Ý ƒ—ad^ã<éˆ$)£Á_ôè:a«·úxÂ)ÚÀÉ⪌Ö΃ïýåxŠàõX‹ÚO.àæ l 5©øCfÊè¯+^Ûñøw(ôsÁŸ °øOTzÐÁš_4C¬’Ñv^sjá2çÈr‚Žføè§çÃã‰ûW/ýÚ4~þò ˜M|̓¤ßH¤.¿V>Z¨­«Ãª×H´ð™W[¤¤öªªl¬ ™#õž!êv=¤ ÙDÐ)ÒX\XšUyÑoâcÿºŽHùñïçZá3d!×0¿ïI§}NŽÎ<»W °ñ/ˆ%‡BX× 6ú‡Åö휫·°S0 ¿;B]]üve)žjçì:$£Æ[J¯îïkoP“+öqÝCf È=XÉ'©µœþ„œ@9Vèoç§Ì¿%øæ©šê† w¨£ îB_•·maYÑÉû]çeeŠäY™ðÕ1$vu'ºŠGDTN1¤ù’ÄÖ×PîN‡gi«×ò–'•¹/4Äüš!FÕYô!Ò6N´(°Üv` ¬ÑzO5ßHR-·æwl‹õÕU.êP–‰¯TfÊl¨¨$«Ò¹nçô¥Ì…zÏyÕ…KƒâWÁ¯¬ëò;J²·L>9z­òCV±ñ=S fˆ* ºƒ½8‰«42¡”ôòlzq¦™«ÍL#©8ž†"v9xxG´‰¹çäÍÇê{&š¿_K3ÃÇ ”;ð ZM5,yŠ:8D ø»TÅ6ÒÊT§Rý»_ * -,4¿a½øy‚¶nñJäû’›âšëW“ÂØ¹‰Š·Ñ½Íع%Ç‚çämOUtZ•âÑe¶Ù²bŽâk@VYƒž¯ü­]Oqçû‰¬KÑÑÍ_eRÞ|«ºH¡%­ýû»gœMë4Z¡xOu¤r{<ZXd ›Å™G3¬þÝcŽ Ûá }&‰äJò‚ÆÑ±.¨„ê‡h­¹ûq¿à‹Ã eå„ÒrðÀCQøòxlëTÑSöç6ù²¿÷–r0¬M ð¨ëh÷ªz¯«êÊIµ©ùC/БÀÈÛµ*Ö;²:€)­‡:“‘•‚¡C¤ˆ˜1ÓQ×Õ%w`ïðS_ b}Æ•zq“V,np³gáoÔk,¢¿ÐøýuÜ…˜¢ÁDáûµ-uÝš N‘¾bqæT<•Q\ ŠXêð11MlÖër¨Ó7Ô«c%ñ©ùo„ ®¥üéI×ùš%©n™@rÃåúI}».û]ìÇRYL YÑC±ëpXrÈßÕ¡ÇcS ‘B@t­'¿‘wœp_O²”Ľީg¨IÏ]Ùüʰ,|÷‚M£Þ#/{ø <Ó”[ RÌh²`RïCe&TæÐZ,ZÀ’Ìfw©CŽF0ˆ¨–à@ÞóÍRº¹vÑçgG‚i£nˆœ÷ Uzaç>"¯ð_û‚ß]Ø•¨ûw¤nÖj£fQµõi®5Öi#†|­ñ-¬úÑÔW‘ñšî‰clÄ&Ž›ç]É´õמ‘!€jù^S36ׯš~–2®›ïmÕ~Þ"FÈîˆCÃp… U©÷Ô›«¾§‘’ôqƒvô á¿4º'v€Déi¢¢x(ÜV’»ì”¨=Á¨–üð^sD*GÏ FEfZþh€,©4/B+læqn~iUÊóJôà@@¡ÀvëNÀ;-y³KU‘5 ƒª|¥CËt«‰½º2d&œŒ>oÛZ Ã(vÇ1‚ëegû¤K¨”j%;×åö¬âß”äG—n`sì— ßòAS1C‡µÔ“ñžK±ÿâPñbÇ‹”Îí•-‚ûz´'ÅIó˜ŒÕg¤ï@? ;õ©#–üË‚¦ËÕiÓ7ሼY18zSÃæÑ%'ÕJ0ŒEkpöýFÓ«Äz}bâóUÓì Sc«ñ“ø²>Ù#YÀm£°³UÂä’>©ŸšiTë`-âübæeÝÍ©7¡8\nÚD™]—WÙ.U¿ÒCkâÅLÚßðúëv=-®$衾æI–o¬2Ÿ0ÐX6L¬zòˆ4z'hyŠFÚâVçN´ÞöŸëï iÕ‚–`Ð?ñŽ>fÿò áÕ½da¾¯VŸøÂõŽ>RQª8þ,°ÿæ1-Ã2 —Æò_yu¾iôIâÓ‡HKË©ìñýFöËÇP©^ºü ‚é° Ú¢òÌËÏÁy¼OE2劓jµÓ÷ &h®¿jqMwõAôh%ãýÐßv»WcŒ%ë9bØ}c¦É™ƒX ¶·'òÎÃNÜ_ Ò•ñ‹ú<ËmòNêljp«³<â¦ï4ÈߌVP%r­Ÿ¶a?Î(Ô£3}»¤Œhò°°iŽDD n¦Y4›]ýpX4ÿ¶qMÖ•—oEIòS¯Â=má7®ŒÅJÿN¬,ïõò:ïˆt Ë¿&sþϱpÓ_Zïÿºv\ßt\ ŒÅë³¹D¥Ù48£g«›v)yÛÏO°])|Ðô÷<ßHz±åã±ÌÞ úØI‰á1 /æM´¿ø[=ͨ¾:âʺµä7&§¼ƒ®<&‘ŽCnøê¶á4â ’@¨²J åäÖcãö¦-­bÕ¾¦¹êdUK¡>¹Z/sW³Ãƒ™$Lôˆi º *!‚B5ÖÆì,ÌÔßä 5níä¤PUµÃèþ”œÌ°›¯ƒ.‹ßؼ11"Òš±ÿß>D^uvùKQí W ¯œçG´}õ.s”Ò9I^ÝÖíb¿2…ÍíCAÚ&ïÕÑv»L¬æ?£ò‰º©G˜29¢·±€ö%õa»ÛlqI zž¢Ï°“*Ÿ{ëâ²x Þ‰ 9ÆtÝW<Ï“alÉdøGÏN¿QP /ˆ3€@_?äýw ëìI¹+¾_´íÙ½Å[û •(âüa¿å[°†·™æUíM$‰‡û8D±mðÐçaˆ"ËLòoÚ_ßž{ªù;·:„ZùWNÚ³ )&ávÌ…¯«™›uì‘Jnš…%Åê<_s_[4ŒÄ§m¤’ÃÍû¸v|¹â:r²ø—Sp§Þi†xÒ| Wp|‘!û¶\¶N‚Üñ¶ˆ@$—Þ^ýe³¶[5”Y›€Û?ÔHpÑ:J"nùIyä'ÄӣعÒìy+ÕݼTu‘*z ˆo_ÍÚœê$}xèqäòç·³åSÚçSæ¶„§n‚Ò›ÉÌë†òŽÜa}g¾;þ]dÔ¿Çï8´È0ÀÏns´4žÖõÄ“×gÖÊ“ #* Z3q’ÀJ5²˜Þ*²ªOÌ>92¡OßÓ¾ô$óÇ]ÀŠ0ôàÝï°Dµû]$Ø N%äÝË-3Í{W PäT4OBÿ@A¿©Gõã¿î¤T¯‚‚1hyÄ ‘,":ÁpÇë%ÇÜùM‚ݬýàò½žh ³ö«ŽGõX|àY ÄèÒV2mîB\#|W'tY~ÀœÏoª**ÙÝTY'ñki)œ°’‡½Ïê7^¦9¥ú¿it2&UF¨â M”•å¾ü˜ÂÚ°ÕáZ‘°£D‡ü§Ñó™ƒ!ÂÐám÷ k1ËÌôZßX+Ö>½)²‹„ÈoJM ýU ‹ROA…á”mÚiçÎZçx®ÜyůMö䣭Ìyhåän<ŽûÛ€œb ¢©/3rR=Ÿ5ÿauyHÝ,2ãQ\·òøg½â'ücÿg Ù^mSNy±±ê˜üÎ)«÷’äýSQÝž¡ˆ*ôU–rê~öóÝ™¡”E]"iÖ:BÐß^•üÚzÄPT"%å÷I†“Ýž¾g/¯}Š×;B˜À‘º£ Ð?ƒüZ4ý-œfqø¸0`6¬³WÍ;ç•Zõ]Ýnª÷æ£~Dø=¿8f2ãL‰ï£5PÀ¯sêusLqRp©GCäYuÇßrQ™”­CØù/á–«¸ [vž4¯ˆv:æð è[d“k» #ƒœdž{ GÖ¾äbSĦp ælÚì§h%ÞDë€ •¼žî¡ÒÆp¿*†÷=†«Øó`kèàçá‰øìX';Iàx¬¡äe Ã…€å “b¼½•Õtá½[IýzÇ WٖߤMÉ¿½½wéQ!7Áï DAHsB–Ñ÷~ZúlÂÕ£®þ;#b4»hp*?ðÖ8ñÓOßÂuûiK¿¡Å$Sû‹Iì·~í?šöïZUÍû¶Q¢Át‹mû%zšÃ±ï¹^cH¾øEâNùÒ¯©n>°w¹žŸìã!êLþ‹®_Õ´»€&­lº²Çœ§5êŠþ5Áä ÀÏz®ý)¢Õ²` ¡ƒ…AŒÄ²L4“Ê”kÈ_Ëßr¤6µ5%Ç8’»¿Y"2ó• §’¹Æ M¿GÉV>¾geAúy•†é¶Hñþ÷†åVF´!|‰}ÉNzÇl‡Št"çtªGÓÐO#ô½ø~“OpÍ*€üüë>JähøcEwÉ­r LU^a¦(™r]©rùã×t A4M¾HFÁG‘g›ª3öüÞGÈîÇÏj²“#w.†o°Kô]Hçôÿ×@†º:|*§q¼ýÂRïzdÑÀaUù¯MgC‡„'sRпpûÙM?Ðg‹î5_ú£ÜŸ ü¬ò”™6)ýŠ=¨³|꘨l§žèöGãÝòÝŠßIYo¾v³§€fwýB³)ìь˳¸õóPÁÃ:øH&[žF¬´–yËƈoh¸€~š¿Hë‡áR{wv9ö=mü%£e€1¦¥Û‘@?f»Ù¸œµr™  š ˜^ö¦è…© 4Å’Ð7êÚ×*ªG5@crñ×Öºìåg£N³Új;ÂäwéfûÃ4/7Ã0±3Ø ÍÇ<~à‡­ÂW€³ó³_DS«s|"\Ù‡#ˆúÐÒóÀWËõÝ(×|–écÏç4ú{ôâá>`½Ý……mqºýa• ]úA¹%° F„£à7õh4_C{ |2ÀkÐ}ú«ᮬûaúò†¼96Þ_,‡O~ c‚Ú²ø£ð`l["'lI:ÇjÔõlít{/øßØ™"bÈØPªþTVJµiÿM#Þ§íøÀQ€9­nW»¬ dwÒ<„²t]ûm“î ›ï[n‡ûn/Sp3¦€†' <ȃ‹ÀKNoF¡ËÜž KN€…÷`°(eÚÏ2‡\6=Õ¤Óñ'Ò6Ve§„e¡#NC(Í -êÕ…ƒß8úB©:4ãÛ$ˆ€š2“NÜl<ƒDh åÄQÝvtô±¨ÇŒÒh“¤¾Z´Ÿ@@ü©ê»5¬R½ÕÀ—VqÔÞ·ƒ+b[V2 }ê˼¤ â}ǤMœn ñ×w/š_"NíTSFíá‡Óä’\$ áµÔÕ¾ö¶¢9\¢—©†e­ûÂü¬¾ädifg5i;2t=GÃHÁeí¥Ûz(¦n §ö)¸GŒ¡œg™ŽGE­µzv>ÿŽ.{éoJ*^%Ø 38(Õ°j°xÓÍ;o²6×}ÔŽ$"êÁ6]³ÏÆð㬊RÑXM8›x®…:ÿEpMIÞâKñ ç,U8ù˜ÄRv\w Ò¤Y2¤âB#‹d†>OpÓÁ+vú®n½ ³ï‹Å÷*ñýᯓg„§’V>ßšQðãûù Fò¦Þ2Q€3.7FôDævøð"F†CŽ ÂØº”ùžóXL¿iÃÇ„ ³^*¸"¨vÖÒ°ºék! f@$o oÚ’1ÈSRÁ}ç½ÑÙžm~ƪ( _»“ôq<næá7wš¶nž÷“¹u¨Ö¨øñÛÅW‰õ7ywaÎÊÀç.Ùµ¾šÐŒ¢Ø·¼]w=¥Æ\p³eÏ,$mya©Ï‘}>`W„†ÈsIè… Y–Ë©TŠ9•†ÛÖþòzØ -L»1¹Q*ô›‡ªýp޾B»£¨ _yÖ½Æ$)’BÛQµ)6Ü©%„—îÓÞ•ï•>é²ÕñY5y¥O‰ÈÙAKmYGÙi[V Ñ~Mœ ï¡—c¦¦¨Z&Ic–VGWôðì°‚#M>î6à‰Ž‹ð;7_ ±?ŽïZ¡Ãl_Î ©çkE½´ÛJãïtø[Lõ©…ÿ{–+ÞÚæb´¾:—$gÿÅ~=¶ÿVw™_ö9Æãýò­xÇâ1³]W'‡²_§ë­ƒÑþ‰|ϦyQ- D‹Ò4o“Aȧ/Ž=fËÛ‰éïüüÉã2û©o|ú»T<¬¸ºã·gô:VÁ‹¡æ•4RçXˆÛt~(€×KvÓmù"øƒ¿ˆ£Ã6cçIN롎\|ŧš¯n!Šê/˜íüŠnÑ¥EHwPg½ùuU9LeŽ÷c‰„ì U"­ÿë#…dÍÅm]£Ì闺ºÚHÅ|¼HPAüÝä÷€­¥Ÿ7nb]É…'Ìåw>Ÿä Ñã*WŽ\}ß ¼äù ÷J–:–‘àg=úLt©dOQkè÷øJÔ¹òWŽE¨J´Ò=´þàWÎ!ë¼ÿ8WwÝs›8ý$4œdüð×Yj³,QÎIo6éôYz“Æ<Õ8“SŸñŽo¨îm ØM=›‰V_ê¦÷²ÈSâëm!`;Õ#L¹¿è·Æb+IMýwÁ_™@á¼íߥæiíÄÑ!I{}<5V0ERO²{Ì ÇïH{$Œp¼âÿµäØqîôûh¹#2§ÛÕ~Lõ"Å^^Œ<­aØê#áp]cÃt¶ÔÂÆ]¼BP¦q2TóÃO¤&^Ðg™˜“b”›½!rØ$ZsÞž4Ô>Á§<"Þ{8#øžª‡Ëòcà”^2nî¦'Tx Çô¢O[›™ K˜-[lÉ¿j  7×KNó3 dWAçå`må9vˆ#¡7ñø1ŸÝÖ žbˆNx“CFÙ?6Ô–g7’;¹Û.Aÿ…À¼áå¡PƒR·ÆÑ«ÔõÄ#EòyX¥®"¬OxÙËâTuÁKÆB9èûx(”S.Ïšv…!›lÝŸe¼R!uÂàpþú7Ì…çØk®É™|I8 =þÅ÷—¾ñ ß©ëCI¡ˆT<Âg¬‹„]ä,k ‹yWzTFiPbu]?èwôA¿…õAýÝÐÒLTðM¹/8í©AŽUâ†B’‚þÆ$_Nõi:†ܾF]ï"Àª |ÿØ:SµÎÆôn= A ÛzyHû÷Y‡ø^K:êR¹<Ê1<}ñ´¯Š¢1±“Z¾„Y2,kJ5[¨b^ê‹ãPæ•¢dÊÖôp›%œä Mþ‘Äó¼SL%‚—KR>Íð>ä ·L½X³Q–ˆ_¶L÷®É= œöÚÊ×A¨zò#Qï{ZSµaóŒIóÜÿ.3Õã‘=Ó9Á¬æÊæ–,qå¯áð…’~œ=Ë5‘/¯£ éâÊã…ìá‘AyØ!ëêlŒJs5Ç@ ›ª<¬™Ÿ(°s6ŒX‹} Δy€R ßýQ ÙÇ…ýv?7qÚØÊÜtîÅÄó¸·'ÒØù5Ó|ÚØá©RÐpÈkþš$&ŒŒx·_r6&€$†ß¦õŒ;úìÝ%ïþË\$ÿ@\>Ì'ü_>·“„Ã'Š×ÐC==nÞ»ÞùÁ­ë 9ù†¾&<õr͵c³Ì\Ay†tã_=ˆŠqš +©YÆ~€ Á{C#~¢(0É= Ÿš¤~ËÂßfïnWiͳ¹†Ðh”ì¯U,¢ynÍ<ΫôY:\³¨©@¡§!ûÉɇÆÒ™bªd˜Ì‰6‹`§î•´íq›«‚ Ó?ª@ˆ!ïæO<² ·à5yåïh—ýk"מv¸öWTNO­µH†\3~èÙúŸÄD?&—á†tØo{(}õA<ÚR¾®.ËSVÜS^¤” sú†}ìÁ‹3'óˆöÇÏO n쫜~Z¾™Uaô6ùñý-p]8G‘ ]çJê´êzÅ ýC»s«{Á°XóÅFV ‡Äá5ê€ÆÜrv„\ ŠPö¶ªŒþ(”TåÅí]Wå÷ƒ#C¯¨hr¯}/Æøõ¤ŠCý‘"¥ÄSeTIVÇ¿ö²Ê8ì‰äoïéþaê‡?Tàä:9ß}òÕ|á¸ÐvW7ùU“ø¢G}ú!*hYÃrˆ’û?Úª/á& Í.PŸùŒY´@ùÎì.Z´ ­¤,—ùuÆ¿9+Ô—Z†Džï›‹'Lç“iðx€R©•$Sȵ®4hüƒ§–<¿æ7‡ýv­uºÓÏSÖ[ý+Èý#ºÈh­Ç‚£l@§·û×aUËpq²Aní¸hÏ¡V¥ùs…/Á2ÿ¼ÆÂ”³oMð[7¥»a²ÓVw5pè㚃÷º¤õÑ›CÞd ‘ða«E¯àKVÃÿ ‡Kz»ÌݨñÌxhnõQ¯wäF~nýÀß©·h€š—ûí#*<°/ýâ«Å@Þé§ÀšÅ_·ÿî)ó‡${fSw4¿iñ×(fɵ‡ªy¤éÝ 0ÔˤFFY±Ze&¨!žZÂXÚò ŸÄ)’Xê'ÜžêöH-~¿EÎÅE‚“âFÛÄöûk¼%Ó2O j‡°ÍÄÉ`ÄF-|)_2ŸÓÑ”,¥ç•ðŠç¨ƒ/íóÁßà>Ø~ï³üö1dÝŽŸ>U”r î·¸é»À+¨s÷æ8÷wÝCÖŠG fKèsÿÝ>et¥…ʵ‚ÊRÄ×ܱ©M•oæ§©™”àÎFˆÖÒ¥_S`ÞŸº@é)°”q–|¥õ.¡ÂùüIÜé㋎¨úÈ÷‹;ºm%™¥ô°@“»è’™áŸ鿼.S&´,åÅ%¦3óõ-ó.} ï‘ÃP²«_JÊE¶‡ÿæÃ3åÆ€Ì‹ ݧKÙÄP÷â=ÉÌq+½Ë…gy¨€ ¬‚,<­©£ˆæqŠ2y}™'Bubyòñ_k`Ÿç~9eÓ$¦¿BüñEaºO™ªÎËõc€eÈ4+èì& ¸ÉbÚ™+}ûûлdL.Ìb’ß‚~gý°ùŸ™øÌª˜^×F´ø»ûËÈ=_º3¾à‡>ÉWOøçßû;ëÒA½'êÍ=Q q‡”¯t9hßÞâFß:ÞÖˆöѲ(_ø*þ¸g¥›ÀP¦œ4ª¢.¢>dæ±ÁÙèóôÒõÕcÐìdÊŸúrü7ˆ²Y¸¯;¬SÕâq*š>Ǽ˜Ž&Àß±&»×¢â2ÿZw“•6úQÔÔB«44–WÐLòóå®WM!YÁß]\äR€]{H¯­ñ1Fí &•ëýÏyyobØtzŠ…8.­ã2 ƒ æ-Sæ\iÞj* }ÃýÛ5wkmœÕ¶gôSVðY£ï ³wËÇuT’‚àÊŒemuÓÊÓ;£äê‰L%¹è”yfH` ¥MF6Å˸_q åRü<…jn$øËÉsäg|œ­UCvÃ]HãÞýWf…/}xLQÔ²½–¢ó-ÍèÚ¿Çʳw|­/ÍKŽ5¿—gæú#㓆õV󚊩¨uË÷ÅŽR]ÊÌ^/Åt:ⱋ¢H #‚Øoz¼ø}F@¯~=mÁ«›MüO±wnЉM<߈uˆW¬Ìð¨æ­Mq³³UwÆØÉ­T¸æÛÚ¯ëoÉÐYîtšpvûlT(Û†KCÓ…01é€ðKÇ, 綯ÚÊ´Ú&?sV„›–R‘¦nÅKAAU±±z'é‡cæ-õ«zÝëO[^«„™Ák¶Ñ í,àc_± o¼ãÃ<Ò!yxžþ¨£’—d•0lZ”µ{ï06 ÌŒeR¨Û«fcýü0‡5•ê…H`©Q_ 1Ýá“ö­Âm¼ Û˜“­4ˆa?‡¾\ îw ÷¤Ÿ?¶M>Dç^Æ ½ÂòTåû5#¸±ñ·ÚmƒÿQá»ðšFúÊÝ™RÌ®û&çsUB‡ÈƶC²¬ÝÐŒ¢Üɾl§_‚å=Nüª>[{.°øgË›K@7åOåE7oì} ïŒB¦Þ;TIñÃS¡`ýT‰¿ùhÕzŸµAQÐGa GAyÀËÊ Z—³£ÀÕ=Â/?Çlàø’„™3‰Æ†õÛ¨RÔã#A`ª†"þ†g>jß2æl¼íVß ²Ÿ÷.Jv*T]nMUì€[¯7V fE qÐEè’hÀ¸0ò£=µÏÄß2¾µ'­DÔc‡@‹[Óæ…ôZZšö“ cj‹¿:côùë˜R5/»õüúŸÞ¸›>Wü4Ø-Éûñz½øœÄ·ûý©èu~#;âq¶PÿŽ¥ðxý“Æ7Ú-•lÓqwtiC3Äl¸á\éðXûñ+͸ܢß7ÄÛ¤ü£ÛP Söù‹É‰wY”ÆÏ2}|2 ´¿iJpÜ=±Æ¯ b¿¾ìwLAU¾E`±„X“ÞÙø°9Ýn,÷IÁ¨tYTËÔKÊõûÈpÃw!k¾*¾„,Ì3â[ŠðŽ>”Jp÷K’©/L 倕ç{óm±:V›¤¸lÕÎßîËB4}ɦº>-h‹—0÷·Ç c~G¿ß£o±Ÿwœv.ç¾â=ú}ÔI´+ˆ]ë[K¶>úxj öÃ;×Ä8ÕTå»{Èîª6Ío=MS\xÖßÁŠ”¾ÑÚØ”—JR\ùægo¾Ž‘þ#å7S\ª ám¡ïƒà¶Ú+VbÞj~zâU¥ÅDµ «]ž°Ç 6žkõêäÏÊÎq,u6Þ ½KÐÁ/ ,™œ‰›‡žZñ×âê€%!± £}{šMÆ¥Û!¢ZòØßod?Iîl¿ nóÔ‘|8ãï×+pÌdBþæ…Öì½is*»’.üýþ bw¼Ñ}S”fiŸ³;‚Á f63_n0Ï3˜á׿©²½ †*C-v÷¹^}zÛEQJ©R2S©'i>Þx®‡<¸TÆÉÚÓ"y¦ô˜_ûóø&’íF£eo"Ö¦5U_Ö–“ý`§7Ûù ÷z3Ñ„¿ØtÆa”ª¦úÙl2czpsÍ$2±Xi.L¼¦·ó!¼šX±ÓÚeRÉjnFªÓixÅ6[±ßïºÛ~ \KVgØ[ò†; ¥dk]ŠFƒüØSª÷5-SüyÃóiGÛ€cÛíì´µI¥ºþªHÆpYqm\ÚõSûn„ª¯Ì›AïvË›;¬{~Í¿øpWîÆjÙµúÞ-§KÞMß›í±>¦¹}0üff¸ O7[pNw»0 ©'”n¦·*,Vzò±îš»rn>J.L²Mæò­Iµ´,g»d=ÍKeo4ÜÐö À³Ù8ëEŸÃ®ÕtÞPGxýÕÇH—Óm­4¬G<§8kisg–gÑÑ‚¶gõXµÚ ½t/?ltãAœË†Ããd°–Ї{’5Ê­…·éR³™ƒ©J„&4¥›yŠz=“ýs-9ì§pµÒ¬„WþAuAŠ*M£~cYŸeŠ­ø¸ýŒ?7´úøB}ö¸›¦+3ÖŽî§q+ֻ˔ÆÝ¼§Üª& »].½Ëù½S²-÷ñBg\Îí6&¬u4«EëK<™P¨ñ䘺˜Or2Dåótžnt³ãVqþTî·#ž]bQÞÊçÆèé¥Mg©¬4)S-í\-Ö WŸÄ¶Tßí³ã ën&¤ë È êrsêÉ*­¤Ê+–+™-µ=õ8sÁzµˆŒû¥T<5 Þ}!a¾ôöஎ/<õÍ4/wBÁlÍËd—6>Y<®»åÚ2ú’šOÓÙV¥ÞÞ'<¤¸™åEe¿­V¹§:K4šÑÇl¸Y k¡p/(*e³Iw…z°až÷Õ²¨ïËÊß™nª©üóx =¥'`M{âÁòSyÙµf›òK‘±JxG4P+zg­é6"éUªS#¼øØ~&U.äP -+.r9ð¬kâj°ÞÔÛ“iÝSx\õ6/ý΄‡ÅºòæjŒ“§R3ÕÜåjª›¨˜Q(º'ëMüQÇɫո“Üåcùö$Ý\–ðò12/?yâ­oï áV¬õFh¦X çë:©ÐZo8n\ù'Rv—`õĤÞˆ§ìÄÿBºY³‰FëI“då'ÝdÝëÙ JÊ õœÃ”ÙEš!Ñ­Îqn¾ŽÆRÉæ¶ž¿ÄP¤TÞŽyh;H¿´•ôZ9ö4ÔÙd§ÍNÑ[]ôPi6ámÏ®ðXÍ¢`f«¥ìNÖY6T+–daÿ˜ Ekãæ†Fs¢TH¦Êù^~2o1×zÖ|¬{<•šƒJ3ô‹?V=Û),,bÑâvðQ8ól4+4šÍMw»l§W᥉ù ßdùŒ7Ôȴ‘fe= ­—ôzõü¸‹&—[Ü\ÐÕ,ïÙ¯Qs²Ê¦r*-jë~}˜^ÈmÙ_óîâ­Î X¡‰×z“ˆ>ªÓà+ÓÎfejæÅ—Mh备Ëp~Ñz2-I?EY)0xÎÌ‚›ÑôqËùÛ™x2FËl½Û®a=)†k­M Ø’Ñp¨ÛNüÏ©¨¿VÝ ñ”5Àt/ùcóÒ:ÔŸú•€H¥;åÇj?â¹(K•qQzã¹ö.²5\`Úøsõõ ½ÉA/ü›ÀZz èT1ê©´2DXh>Û«Ï׺%0ûãär]ŸˆAwÍT<_ÑñczTî²ns «x\òre0é§VÖpË6ƒÙó(ï6HŒúùR$ÿl&Â`Y¶ðc¸Ü&QЇ¹RMì.¢Moº{ŠsëÄSrI¯SU¶vq«œÔ„Þ‰1çƒE×S òQ5HCÞ²‰7d»I÷‹~ïS-¶êƒRYÆgÒ<•dAWûp€ ç/«V T.±Úü%gÖj²z Z‡ˆðLH!S"½løi›,>öæëájž§³¡çŠX¦Ÿq¬.ê³ÇP2×ÉÜX¦OÏ´½Žm³ËÝ:Çœú`è%‹­U62õ¼Äx «ü±œV™ùHf¼ÏM> ®‹(þ˜ëµËÍÌŒt :IÖÑX¨.LvQïcTÅr[UÅ–‹¬|Õpø‡c2¨ÆD÷ €60섉Ù>VËWb»\p1i‚s~*v’ãr:Q­h¬ –a¾j§ñ4ЛâÞMÆS‹Ô¬´ÛyqUÉ éT×]Î ¿^õSsÞŸf« +Þú6å2¯ÍÛÅ#:sÓ¬ÄâD4²±Ø¾Uòco{²ÑûÛ¹R9íñ÷vÞlµ\š¤GÛ9.LÂx»)mžë³\¢=×;š~Ù릌WÏþ—te®jƒô0ß Oº̂Πm3$r O§W®$Ëm§ÁÏäª27Ó@¥?Æ þeµÛ‡Ý=÷w¹fMMŸ—i™öË@!üèà@@¶2õI¥^-¦JÒ3{ñ|+Ÿ\ÕÂál–¶ZåG©p„ú—¼“óNVxjHC›ì¨ùÒOæÉÈËSе&éAOú‹Ï:‰!;ñ×X¦±Uî1$ò£õ­V4#J Ú¢‰çÊ6ûko’wäë—Yv£Â&1‘T9¹ÜW÷6нl41I, …üžçm¹Èñ¶žŽ™ìfÑ[ŽçÞF$ºÖ^ú¨‚óö¸.ËÛývò&ËbÙ‰S}õØ/—Áx"³[U2à¢=óÄœÃ">©t[DªUãyÅ£» š4³½Õ3ß7œ¯òÚKjø‚«-NÊ!9ŒÍ<Åæ²™O 2lÜϽ$Šp¢ß+>¶T;:Åí|;ÜyfÓÅ«’´š í ñf£œ¨£Çaoºˆ÷8’Í>7B%•¿æ‘›ê²Û ·£x[7W‹p:'òrºË–ˆÞñ‹U­'µ)R‘É¥j3>oF ›Ac´ö¦isVÌ'ó "3ž§Ýó0õ$ž*ÙT1˜LQöɤj xüÖQÿtU‚{UàûšŒ/Íh´Q€·0(ñ\ÈÌš+€¤vÝôzF‘U§VuÂe\ûg)sÞVj¹©ö^»T;»Þ¤ƒ*ÀB·=QñuSæ*‰}wШxÓ%¥Š³§éȳ+‰xüI¦ãâ$[€y2÷v2=؇úƒÌ>§qÜhwÁžVóêxÔ*­ž&%•‘Áý0ØnŸ3”„1Û>ö‚S³4”†dÓ*õ/&×êDF¡L#â…yµìLûê‘ÅœÔÃýl€¥y'½- Ád-‰Y¤È3}Ô <…—B"Û^€=—¨TSÓEeÔ{dlÜ,ÁŒ%ƒHrS3ÉS¢ÜÇ-?v2`=”ï ×EV›võU»Óýd’Zxê½_ìf|³ð›ãm®žI—G,þò”¨‰`¬=¨ö6Ãý$?‚뙨õ:Í‘™‹‡vÕføi¿(NÍ]¢.tð(‡AñÔ+™øéµÈ`XOãmz²«óÊK}²Ã s¿Ú”[•\bKŸâ¡mb\tbakp¤S™¯ëÉ¢SìævOÕ}mXŸzRÞj¿<í³yx§‘”w=!µN"Ð/fÓ½!¸¾µq&8kTÛLÎ7ÓÉl1Éìæ/åéœTÖ>Z ²47¼=Gè¹#=Å}ñiæ_m¢ñaœw7|PL>6'‹*5È/wóýó¾^iTç!³]n—ƒñUs-§+¹—MfÞ©í¦=Ϫ<\Ậ«BÉNºt‘™TçÕ}6ÈúíZcÛ-+ª>.íjëê6Yí Q`ÚñH8Ì%C…e'çY´ ´e±6½³]mÖ¦‘8€Iašî”BƒE´.šý—þ"±™â`L¦÷KîÙÏŸA°€±ÝÊ™9{‘þ$»k6²»v{ø”™×Š™þ84É¿ÌÆ;”y‰'çjÐAÝZ´Y¿tóÀ$0جÙ'Rȧé^²Z ä5"9JÔŸj£IS¦6£áæ%©/ƒôSüÁt}’'IxÚCËM O²¥Û¤Jf}(<ñü¼UAÍUžöÁ ¸ˆ™ZeÍÆÁÌæYšÉàpÞLcÄO€õèÓ®2”ùݰ3]V—ýì¦[úÓ!ïhëõ0Ó»vÃOjÔ‰a/Ý^#Ç#ã—'žBøe0“b¶RÌãõèiƒ"ƒ©®K7¶2Ú®OÌv _H˜íð~êÉ…’‰B4ÝWyjÐdžÖõ`|]­-ëÛž®v\Š¥ŽMýÍÄ ÑÖ<¶N·ÕS@¥3Cõ´÷×V}\,Ž·¡R¯Ì‘§Œ¦­}«ØXæ:»â²3Èé$³¶Õó<„âs9| Ô•Qÿ¹Pxì÷L¬Ä,—Õ Š7»Òí'×Ï$UÚm“iæ©.†øé)]®Ï÷&}ôxl(£¹° ®&ñ° Î#ˆM+Ðdž0³ù\^ø³ƒ™×ò*¯WZÙ´,ÉxiØOûaX„síõ¬0¦ùl>íæ•~`iîv³qsO“á6K%£bµÙp\˜²~䱸\>Ö½fŽ—T5”é:kš¤n̉g¸›z‹Óa¤ÛNëñÚ–‹x9ÜŸ–b©a/9sï8\ð‡IÎ7ÙÇÈK2Š"þ8ÞŽ[5´^N ¼ÖÏ—Ù§¾§Q›×‹']Êrg†ÍÀ~šÖÖ~":YX]#5o·ÖŒÄÊ«æ šÀ«Q•Ä“Ïû|¶„#(Ü‹–'"nîK½FÒÓ¨Ô &]=NÉp1+Í*·xðiSË$⼚t¡?ì'ûù}¤VÝ—ÍE¿ð¬^åZwã,¾Ä£)- SÃØ(ZFY«=Ï’qd”l³p"Gd2ÜoO«ÉáóÓ<ÆwíÊ$Ò¯—Ÿãùe¿z[*<öóÝÎ40ËÅhÀ+¢Áz=ò h2µÚ¥ ým”<ýXîàv{Z¦0ûÞ£—×½ïªëîV¼SÙ¨x4ž$c¡|`™ž·Sá](P¯ƒ>ž'Žw»v³\Bƒd Ÿ†ž×¹ø |Nï£éª?ã#RÍ£Ø>Y\?.Êæ¥;«Á=“,Z¦+® Cƒá¶6õ„¶ùòsa˜|Žæ‡ó^æ9ªBþQt¹®?öY1%"Q6œvâZQ˳§BéùyšÖ÷Ït:KLWý}¾?ŠL†f¦½îöçžÍpWLS£Z º(%çB‚0M?¾øÃ]SÖ'‰¢¾Yu»%f¦ ªLq½©“}j‘îm›»xQE›¹ÄjÕZ Ê hëàñ%>ȇÑÂö1 »™Y·“*ŽP;«c‘Y“IÅP>¿Î¾4äÌë]gŸbÑJsôø”Låóóá°'XòÏ߯†yþðøÿûÿxàç_þY}µj/&oŽú“v}]Ô[ýöde]ƒŸ~ë¯?Ž?¡\ýã× “á²YŸµÿlNG£vsõ×õѦ¾[þñßowük¹šÎÞï~} ¾a>òÇÇÓNgÙ†¯›×–«Ý¨ýz¿ž?]üù­F»ÝÁÿ´.Ma-ì¯v¢þê•S{Âgži]ßžùσQ<«“Pû†Á$ÜGÅõ£Ù±~ÜŒ&‘Jpñhžkï;G“¡oQMF^ÊщLŒu3˜Œùðõƒy®=׃i7V£-`´¹Ý`^úò þÅ@ÿ%oEûá¼\ÝœGú Aæߥ›\PÓG}T}¥}p#ö¹Ò?Ó¤-Ó´Õ‡KìÜ#й3 vfÈ@véSpöK¥‡[©O¹Á/ºù›ï‰„`ø?¦c÷íƒâ¤¿ZþõÇzÙ^ä¡ÕvfR\¶ݵEýá“Ô0MLÍem§/I ¥ÄG·¶®bb0ÄV7ã›ÙIû…E}²ìLã¿þ×W‹þö¿ÌôàCæƒ(øŽdˆšZõ;%»L“6½þªí ïïÆ F 0Àöm_öJÏ´gÚ´Ç|Š4ø» VÞö5S¤Ó9™"—bVÌazœm³K<‹aÄÔ¡nGLk¤†`Š2r¤¾„pCISˆ#UGØ4$BLÍ ðˆ „)•WΩÓ÷…L¤”ïcÆláã៽E»ó×ÿa÷j¿\â~ ÍÅj#„ ¯‘ü8F lMç³î‰ÿÑfγàcØ'|èw!â?ÎÉ,8 Ð"õiå›0‚)&}HO¡ß·mš²yÉÛfŠ›0öò·ß¶i6.R/hP«—ü¶· Œ6`¾0_à‚ñësár™ŠË¶ —Kk‘ùäȦÅz»Ùé4m[ü^?Á’Vø¼O_rzí,sš >d¢E¿~‹Š„J,ðƒ`3 ¥ÿ8š³‚œ ¢>­l&28‚…ðhÊž¹®"i0ÉÂׯ,œX¯¯±FÎkÓeæ´†<œKڳѥˬh< —sU,—†IñÑ+Ú0Fìèu}¾.Il€ ¯ëBÝy°´QÐJ{`Ê@ÜTìWjè™…˜âÀ¿s˜1oêðý̧©xùІ3¸àòh´a•STÛ¶Go†I}§0ÑÑäðf˜Œ1eë_Š£M®Ú­ è+_,Ó£ Î­¢†—Í7Qeý\Ô²¤t´ö2W’ßY{¹ï\¨ê†k¯ž>˜BrÄ?ycÊÀ\"y ‚gîÕ31O½—Sô™†À’b"€!üûøÞ¿"õ€ˆ0äQ"z.þÒ”ïGFL ò™¿×¼x †ö´j98Hw2ð:Ϫ½A1SÂÊY݆û¡iBžošI……ü*ðô¿Ë[>çrjîÊúE(MPÌc™º¢¬¸ã5M·:úŸK«¬-ºŒ$ÿ[LzrѤŸ™—OzýÍúèó.À61ØÛâü~±³ûëepSÿ|Ø­¶X> ÉæÙ»šŸî²[b˜B‘äáã7b‘&âáã7¨åoÀÇ0Ò°l¹3<qÊÄ%CÀx–?®¯Ï½ÂÛ`&7/2zÎÌ;hŒ\ií`S™Êå4×Í}i Ù*$&†`˜!~¤T¬…®ŽR€KbÂÔ;ÒÊÓ[›çnµWMô>Ù)s”Ãï<&đ¿¯yT ~àÈ8 „T‘Õoty.|ðW¶ºPèìfí¦gS¶Ñ©Iýµk ñ±¯Âý—.õ7Û¶[Àp_>ùÎÐeSÝz)äÀqm¶]8Ù­×B¾ÞV9?ß+ˆö>²_L6|ìò»¡´‹ á,ÜœG¦³ vñëuýßFÅ ô•¢ÈÃxë÷BéE¾LÅY¿úáù¤‹D0W€úo­¨‡›_)*ýgþòG_¢¨ÌÍvÏï(êygÿï¿ðã«¶0~{áçWzó¿½ðË»-üøp7àü¬Sÿ›þïÕSJn«¨Bï¹ÜTSÅÝ4•’¯UùN7ãþŸªž÷¥°}NÂϨªºµ®š÷s§%]5¯Nú¤«ÿÖfª8Z2¿ö¨ØÏìÈ_ñð˼*áf‡ô÷ü*â&=éo`°¢«2€\™åÝ\/Hšþ!p=Œ–ÚÌ@î»65ø¶ŽëËáaÿõßÈdæG—õ•óÝý¥ ù7 ­£Ã˜ÉöX×zí~·§•Æ©7ýÖª§ó¥¤¡w¯>ßÐ-€Xè >tú£ÑŸëÅè¿Nv‰Âÿø§þø`»d¹ZL‡í?'ÓIû@ãt¿ÜçŸS»>‹ª78ŧ´®k½s»Rì`¤·Å˜i^ýÿÖËêåAJtÅ^µœ^ðàËâ>7^HÿgF}t Û-=”+3W{ EI„·]B“íØÿ½Kè¿5Ž^Ÿ8ëtñ“/rJ°º-’þ¿}žh(ºXCé%v\òäË4ô¶ znGév j¯5¦$áˆ[ÊãC†V.Ú>üà3  ñàfR7j4«¯z+öÑÿ=š>n iƒÓ¦zf® †tè™Åˆa"yp2®yöûzº`Î ¢úJÎE/¾<§®~ùèÛ‘ šªÿ9î·²Óþd•?jôª®\õÀ#€oyäc±~´ýX±ÿóËŽG¿î&þ“¹pã¼ÿ™±Ë›î`:-ú —Ëe>íïo^~5ÇNgúÿg뛃7 Ü8 p¯pÀ—Á€ÿ½Úùo½²_¤~uØ,ð=+» â¿ßYÙÏ5÷·_Ùoˆœ7ÅÍû æsë/b^:½ Á¶Ç5~pìf+D4[-qý©Shí»Â#ßF§‰®Ô•/hŽu¾‘&|Ü÷A™`{$ùRʦ–Ù4?E·%L¸Œ.á‹;¨ØÅÌ \ÆÒ ¿PNëô²s¿ϔÐé´àç®ô—!(fºˆvº=C®›»7cìo¬!gøäN¹ŽŽÍ^ާy6dzç‰÷ŽHú~ L§?Zµ‡Â¾^!_žé´£õõrÙ¯O‚£õâøµ>&Oi…Û/ýúª?ÀÂdÄôÙæÃ©ñ¥iêù‹Q„¯‰þ_Þ#x0s葉åoôæÒÉNa‘·?Hù‹õŽaÓ÷•Éw£Ûífû3?Éuæ Õÿ.°= ú ¶áqsäd8èæ!oÑå(Â;¬Ã¾ÅšwÚ3Q bböºkbýM%—è°Ð+dòd‚á&”æä»(,f1Äõ(ªcâÀƒ=+‹ƒahÆ0† ë ê€_0ºô²SÚoJù夻ÞÉT‡“©$=Ïý¡Å ÚsEänusÞÌsí¹LrS Þ‹ ~Ç ¸ð+§’™ë]@¬úWŠ´éÊ9}æÜ œ¢}^XÚvì­lp…0>Þ×ãÂPàvðc'H*ƒÂRz°±·µÝ‘ê`Ý;uäà-È ó%.T³_/¢9êϲõUï°ñ÷kÜ<ÚÈ}¿üEJçìàiÇ©–ïZqœXy H:‹Ôƒ„ñ §Òî¦Ä‹„Lƒ±0=MW‚aIàb `$ô¾®É¤\ýB¹Gƒ¼löà{ýz02¨DÔ„× î$‘cî E¥ô»'К)ˆ ¨f2÷éýaŽ0\‘Op…T $>.pC`jRâIz@Hyÿi˜½Ž$;¢_N[ýüïÏÉ´Õ^ífmÐf³¹\Âÿ;¿öN&ðþ¦ _s½x©¯Ö‹¶žóóéýå\ëƒæÁ+þÊa•ê<£ùW¨ÓÔÿ~k–úß%‹0, &±üãŒøÊtÜá9¸œ§À€wL ˜ú¢¿f»ã†† ¶ÉÅ4¤21Uê ¸m“6j_ÁBuаpCU¦U£ùÙþ Ým weªKŽ2ÿÂ!-ƒ¯?¯Î¦#Ëjõ½> &Ñò9teä+„|ǯ÷Ð(#˜`¡iÀµ–±Ö)á·±öLZ;Ìbâ˜Õþˆ~ØgŒ€]óÀƒ¿<Œ€©T=h³M)†=>f`¡aT¦^b™¾‚Lɨ¶93¥Ç‡œõ8ëK3Âá9zj¿aÝerwÁÊ ë³fûQÁ€8¬ßšB ül¦”ÇG`½V?À—9"ˆÀ%@|I¸xÀ7ZâÀ¤ÒÏ!`¨ ¬Ø4…üuV ½†PCP-E«K÷À:#­e‚‚(°dx”(RB/%ð· z‚Öþ‡å›æÁ:Fôׇuã°B)OȃL¥_z(¥fåUˆ¿,x»BÂZs<Êçxoè¾Z¾Xf–úß²ù ‹‡BäŠüÀc˜«ÕÅ¥M í‰ïÊO»ŸMKLP7*,ìã/†Îoƒß1$’ô“‹ÀÞÑ1ÉeN[±`¹ö8<¯`r[°§÷5Oî;5_aÀÕe¼À—jÔî—åRšø•àøÈ¥T ÀH—:ò,18F”—w€) Ö º„Z&Ø¡’É·×ñþ—O/àŒQS0Ëm–1ΟZPCù%ã©áñœYë±WqgÍ@çùþ>Y¡© ‚çp— ‡ç©Ux±•y•zÞò;kJ Ê!älgéuÍÚØ}皃óIÏñuGâÏ›΀zÐØ—Œ¡Ÿ %gkèœ9…Á¤vÇ ßzôQª‹ ë/gÿ|uSM“7eý2Kéýˆ¡nð0NòëTâÙŒ€M¢èPg·š¼Ó NíY¢/4 ƒÀ„3&l–ðù[íÎÒúíèۭ—~{ó~‰Ý¨ÿ¼Y½Û¶Þ- Èë2÷öAcºhµïqëç裷ñÑB½÷ôÎè§þúÜ<ÿù²WoM7ý?¸ŸNÇ:-5Gë/öò ÛZU $…9ÃO>Ô£¦ íXüb‘ýõakÚ\A×|ëWmšmO¾¾^,ô £ú® ݶþó®ÊËÞtÓ]èá[-ÖíÏßÜô'ÐßûË'è¤[ow¼k‚”Âæè=‘ýí3K²ûl\ßöÇý}»õ§¿nYNê3ŸõóÒ[kKqéðy£1Ý:|ÜMõÑÑ Ö­û¶µ>ûò¹0æNb­¦¾÷6:õÑ/é_­ÀÞ§‘¶„ÿúc»Ó׎àC_ ‡Ûíñl©5xÒ…éùëêKÙoŒŽGîÔábëÓU-ÝÛýúéï–ÓÉh÷ù¶×V`äçk»ÃkÓE¿ÛŸŒ~½´ûˆýË:í­ëãöªÞª¯êð~å=ô¯E«óçs8ò 9›Í?ËÓůƒÞ@pC½1]ƒòþÂW¸¯ÕüS[DõÕ÷Ç `þåK×»Š~}pt³~}}ìFf½h¸öV«ÙŸ~ÿ ¼XcºèÂCàÿÆ}ý%~¸×¬Yoí¯F탅Ìÿ&ý¯œúÎýËÿÞuë¯î'ÕmÐ⤞út¢±‹éz6†‰ò| èX¬> Eë×Q}ÕÖ58¦à?b$ßë9ò—ºw_¸û”ÉÓCìÖŸ‹õÈZÇößg—5Ëý—ŠàW1ÁùçX°¥4w68Ó:÷‡ ¤•ž‘Ç| `lQþ'Ð;5”˜Lÿ* ®0øÛæ…u‹Š­ÛÁG·î4CÄ£ƒ¨àå ü y¸•¾–’þ>GZGÖaYí¨ýø:S[ÛÖ&ÑQZŽM¥£&¬S¿þ„O©¤Âj×'_ÏÞc«yŸÕ>: A¥‰ |®»äÓ}‚ÿBW©|í°ùúfðæ¹0p ¦ߨA‰e¨ós¾¸Ž÷.­+øû±žêƒM¬ø P|©Æ¼G(?ˆc½Æz°ù ¨|{ݦ. ó>J>oP=XÞ¤G1M†¹VÂøëÈX{ðS¡B !Zä£VpƒyôûÏÚ{`„I&@kþi«Ïœ£ËHŽïúf˜¸(Jvn’hòsjEß' '~U ûY#ÅAé(Q¯Et9¢™0¢t  LCèè,UòטàMR…¸Þ y¨ŽIÄiÂŒàD6ü. yöú»…3¯3N^çŸÖ{]\&hÓŠ·ÈéOgDþ&îÇo§ÊM‹Z]ŒYgRK’jD¤ºG‹2åé '/T`k»è# qu}zÏïêQ„RÌÑ’|ʬä”þ¶„À,CÖ¤€Q¦Ä£Ï$¾©4-¬­,a‚óú w¹IõÍÒ“ô(ø[ ö€‡Lªÿóú-ÁôËDŠ™LGK1à…‡™‹™ÞŸ‚»¹†Á743LfvDTZâø0‡©*°^E«¿œÁ·þìOôË>§¾Y.lü^äý/ ˆ!½ßÀ Œ¤€Áû‡“tg—oÒíû³ÿ[ŸÍn,áaìãdN0!$—RýÓaƒþÂ)ð‹lé0»ùÍ~—õ  Ò»|Ö “‘Á9( n—°Œ ߯K˜Jì¶KX ˜oÙкK &¿‰LtFN qXˆƒbèÊ6\øÞ5¾€™w¬+¥êÌÈ0 ÀŽx?fX\©i¿ð,ñßÖ¬}íÄà¼bZ¼KæX<<„¸.['¸;!ܼWB½õ–J»‘€ý 9ý‚cÚÊ×ìA(ðª˜âÒü@¸s› ?Œ}ÎÞ(`\cÕ\”[Òéeˆ`ýJv×>)×}Ò'<:(X¦û^ “`tü<ú[ “1¹Î= Ÿæ×Àl«Î½û®V¯Æ>B¸«¾+ø„ ¢Úp)Ä·bŸ“Pï½Uv#!·7­~ûLfH ØøôpUbf‹} Ü™¬ËŸÆ>Goœ×8­r|døq r2zXWù}bnûD$7ˆbâÏ9#òòp ôǰ!Ô¦|çô„òÈAe…Ã\;€ìïjõjì)Ü™X` è¬2Ãäìo}2½÷•Ùƒ¤çNÅý òÁ»ÓqRI¤VbImO'ÊÝøå»5FÀH׸q“<@oöù#»#îIzÀãueŸ8h72 ç‡}Bõ•ì»æ™Q0™©ŽŠ!àQ}šiÐ7j¯ÍÈ¥ÃëÐêÕ¸RH#ŸÛB"©ÁŠï|ŽB½õÛ B·E>"ˆA„>Ø*Ì !L{›Oòß úœ¼5NÀ¸Æ>,¥A)ãGö‘œ‹{ö »Æ>Íݨè'<·öUMSàDû$˜—D[_Vˆ‘™äÓdƒÎÙ‚|æ6ÚçÐìÕèb¸A?ÅM½ß±B’ —B|'ú9 õÖ[b‹~à)ß6Ú‡ÕÞ ãÒçæ¶E?}4òæèç,à­‘†Àu´I¥w:Â…ÚJ¢ àƒ¨;¢ôÉu´O“Á˜ŠÈ£½¤¡L¡øÏ£–ømÓ`d`vZ'ü¬úþ™ËpŸS³W£ˆá&Þ'¹6?%±„€u•Ñ¿Á^‡£Pï½µA “:ÄÔ~þ¸A•‰ArSŸQÌÞïÕÒÙƒóÏ៓„7ßé5©ûðR|ßC¦ž7³V ûvÊ=ªÃ"orvpÊÂB@¡¸ø9Mÿv„' mˆl„ªÏæ†fé8·ëüëÃhøj Ôr8a±=ÞóoZx#t:êßÀtêWwÏŃ­ÁKºí®˜†cž>®'vØñÅÇn˜íâ(àÍSCOâ]»C í%|Äž§wGMMr›¿CŸÜïz`}èN¢#ä‚zzƒ_Í$¤¨Ð1b+$ß·¡s¶&V¦Ëm§f¯Æ?ÃÝæ†Ô¹ÙH›¤Ü5ïÆ‡ƒPï½µÝùÀ É.üÉ=_^ºlQˆê³ö ><¾w³_ñnŽ #·(A†érHjmi£†ž>ü®}r¿‡Í^ã™ì¨OXgÿcüãȇ”P`;k 4$AŸíÐ9{3ã0±ìÛšu|Ä €íK85ü—Ýn¾|o®‹­Hï=µÏwDèg_ôšgþ&ìÇ_Þ bì!<.¨}ÔDû9¯×x·Fˆ#êÌ÷s¾¯’ê >¤³uœü!((ääŽætéÄὸKúÔ—„ŸÃ.Å ¬¬|è!ë_ýšd’ I$ðªéó¨¢`] ^6ûœåB5U…­2ÿD³×§7’W|5+>¤Ji:ªSJ4=º>w3Øs%Ô{omW!ŠèÏ8»vÈ‚”ÞŸÑäOS à°áÂýœ³ëNÀÛ#;1.D A5»3¡GûœbÃÔôÉwí’[<×äÖ”rtÜ%“!ùmÁ>{Ò17ë0(˜°DRñÙÕ…¾ÙººqGW×]³.°»%Á¬&`jiû  —üØç(Ô{om]]Ͱ|[ìÃô Z88^3î„}âçœ]wÞ(䉻{!PH }ÔTGÞ.ÓÌÁ›wÜë….Q—]òaH¦I“úD˜f5dßç³G!0ÁÞPˆ0°3Ð)öIÛSTVÕooÕô©³gÖ¿B âjí'p¢‰-nx²Ã•Pï½µM<¢Ø!‡ø' ÏGôY1ðPøƒDJC‹ÃN¯¦ì¾9ö}!áÍ‘Ÿæ_ŠÌaXgº~Üý0:9Ô{qŸt¨RÊã³zçæFè§7±å2MèyŠ~Ë·yÿÌ)¿Î]«×£ÆNl4ÔKÀÔÜìˆé”’¿ú9 õÞÛsÙŸoŸ‘ŸÉq¶ÅÆ X¹u1¨±BöÎ ÚÏe8»ïöANò›/ Ðb¢£ýVŸš²ðŽ}¢®±#€mÎÔÑy^E¸¸Pßv¦Í~e {„Ê$ŸQAçÌ g6wͺ@>ê„¿¶‘5Š Œ‰Ž¬ Àa.ÈßÀåuê­·Ìž^Ô» òé¬[0=ÉÁLUÜ)Þ‡¹=.ÿø9Kx{¬88Æu­‡hêìu|Œs‹Ü1ÁúäÓ C ûŒ÷ ë ꬿùÍøÇ9˜˜˜¡D©f,d§†ÆÙc&ïŸÑïoÖþ '¶ƒn„‰A>‚é}4·{.߉ŽB½÷Ö>Õ-?¤C”–W)àEbNñOÝÁøs–ðöX¡Üc….@ðÙïÕ3 ë‚'wì1]Û„ªS¿—cÍiÀÏž_ÿnücòÍ¥Úò`øs2™®Òc«ÐÄtiÿ95{=þ&\5êÝɤšcc—”Zß‹B½õÙÛ„ÿ •Ÿm" µRÕ—paiËä§e;ÃnúÓ‰.NòÝ'„ëø˜> S ù‰L)Í`IîÈe}r½ã°0tvâQª Óüº>Õ R]ÀÍÖeôAzÓ æiÐ8˜ðïoÖöI7{R³ !¢éÁ‰ÒE<Ñßû…zï­Ãbä`]ýöaŒ S‚À¤äu`³án¿åá,àÍ‘‚º¶’É ]yôˆÌJšÒ Ø”÷ üRõ\×%¦Ü¡ŽÏµ =Ä÷qY9äœh»Ó$:À.•¶ªOÜ,jÚoxPGƒËe³×cß!§Îå0ƒL¤« p¾õŠ0¹á©WB½÷Ö.a±$ÛƒßrÔo¶í{HÞ~þù8Gº~–•\3n1¦k0*½=ƒ„Ž_ü÷ÛWÎ׆z/¥®+¥‹A\þUê°ˆÓ¯:PGWŠºX3ìðÏŧŸ>ÿ5ŒíílºX銨m]ýå¯?ü½é¸ío ÆþÑtXõ÷mc6é:|uÛšõ5CÓãw¿îyÉ'CùYÂÏ=°ûMóÌ0|: °øê3µ¥^(õQÇ+_êïôÖ0ÌqÛ‡.êbº#J‘3JÃÏë׺¦Põ<é–q\€á£sØzKGÕ‹ßú¦{]äû\>S‰ó&/YR5oUWºçf0¯oïLé·s}d^Ñoèâ¿üÝÏøzî€ ¢œPj 418à  \Ó›°¢éÊéúdd”#]$—‹EtUÁÕÉRc[C þ¹vÂñŠ@?D_µ·å:õÈëÜ|b§™ä”E“.¤¿)ÑÁ$x“L›ouÕþ4ÿ¿|_-gõÉéXO'+Ÿõ;Œéb\ýÓºòR_ôë“ÕѵÍë3ÓQëŸo_[´WÍÞÑMK€Õ?ÅlûúW§>îvþgp±^ö<ùæ¢?[yò«ÖþÓ÷¤¾×¯ÍÚÍ~§ß´ÊLŸÞïIµ[ýõø?߬@fý+çé ½ ¨Ô¯ûèò/AÁvû¤”Ö ÉÃò“ÿòë¶]¿©þ7‘bŠ`òæ€Ã ªeQìé’C”‘½áB$#¶Ó_ë0øØÐt#å=j1øÎ±YháÑAÁJ›p/˜K`õE{aŠrçr ¾sç4/ì•fd ü81ƒkuCßyD](iª_¹ C(Œ%±HN¬ÚÜ7÷¤§¦O9Veð9‘¹lûzFÓçÏ9ž%r]ª"fá¾änê.Ol^/Ô[©ôÙï¯êâ ¾ƒ¢UåZêºöBsð™œÚGut}ŸyLtò5|ç/C¤i+•<Ž„èôg&é³t•ßIlûâ^éÃz€ªÇÅ'à™`"|LäŠ`Ãh–Xpˆt!É3•|¶'9u­·èÔôÕ¨Ë5øœNÒÛ¡fDL½2(IrÛ‚ × õÞ_ås pçÌg¿ö3ˆÈÁ…¢°8é’¥’;mðý(…¯ ïQ¶ÁwŽÈãBà ÂJ˜G;}œKKzϪ5ºrƒï\Ñ® »%@ó.Ž»¥‹ZQñ­D¾6 $(5¨ÐyE˜ƒ$'´±ºxƒÏö,¡.ßàûþ–¯FC]ÀÁêÜG†ªæS2 ‚þ ÐÐI¨÷þ2ûEJ—qðýL«-Ô0¢ßP“=H°÷ᇔ]ÊÁA¾ƒCgïQÎá7\f E:f5`HÉãz+÷¨èphü_Ý/ÍnÄ;>ÅÅ™¡ˆäßÉí{–‚¥1Št‚.SM>Ï=]ÖÁgë›éÂ. DǦ¯†D]ÛÁ$2a•sÕµ³À`•¦yÃôW72½õ›>dKB Ë;ÜÚ>Ä’éRYoõÑ n/Þaœév1D'ïQâÁwràò`RÈäø(cÞ:¥º£¿¬«<øN¿_Ü/ª3¿ÕçÓ]`;)¦ùƒ>ˆ($Ì=¥+}s¡£+Ÿyvt¥ŸmN„®õàûªÚƒ‹¦¯ÆC]íÁ'\M°Œ´ãÎ5$:³[uû ¢“Po&¦Ï–I¯.¾ŸIе…]¨c©à}ë?Q}ðýhÙ"Þ£ìÃo)€¡üSåz©O½Þµ[ê7ºeó'æ§òµpQ!]"þÇÑâ¡ÄR‡ªˆvÓÑ牧‹?ø¸mB¦®ÿà£?ÐøÕ¨K@ø„ôÁ¦„á6•%ØfBþ ŒDG¡Þ;¬AÏf8¬:¾«a8GQ8BÛüÙ²V)ˆ{Ä…¼K5rï:Sa…׎ bqà;n7[!|çªâ\ŠŒÚˆØ8FF®ÉBÌï, a Nú¢5ÿ4C¯yÄ·ŠBØG­²>î˜Cë®õ«¡Ñª áS_‡8CHÓ֙Ă!nè`×ß„úÕcác¶ ]ÂÁ"ûI+Æ%Ó”7¦io1ê¾{äá8Êx*>åBˆI Ï8>w.¥Áð]½h])â76Q ÕÁÌy;!Ë$={ræ»}h„ ,ÞêÄJˆSYÂ)K<:ßW|K.Ú¾>Kæ†GSäC Du‚¸4‘.å ô“:Ìndzï-ø›%?¨“ñõXHõ1i&(yˆ˜(d¿ã¬kL8¤ÿ:‹x*‡ñï+ƒi·˜ËO¼súà/G䮽‚ixŽSà¢^q “#u|hü#Fè÷U³…$Mæn9Öe¾{„žÂ!Ó§l›á+»kÚrâ˜iƒ<:<~§®òM)386oK<|µLï½uHHÔ%'|\ ‘:¼cªNáµ*戆‚9l†ÿ:‹xº§žòŰÁ˜AÌ™#Ø`\W'¹ã–ŠöôÜ›†ÂÄV~Ô1jF e’ïdá´1Ïà:ešN%”§¹7ºø„ý©]~ÂçXàÚeÛ.ÀPaßµÇÎæJo7ZÔG‚Jðû›†Ž2½÷–Ú‡ uŠÚH±g ÎåƒÔÄŠ,p÷ᥤs!ã=êPøè9J΋€!§!ÄñN,AœÞ¹…ï\²Ëz…1©>•ÜÖ„ER‰ï¬ÁhI`›éx²Ny#4G«Fáã¼ÄH:¢Ë¶¯‡CŒÏ3Û@3jè8ÀfŸqKüxè,Ô{±ÛÛ옘7FDõ~¸uàÐË4Û©.ùÉìlw"Þ£@…ûÈ¡ÔU¼>çì)+ ‡Ò{Rcjº·y¥dúÑñæ"X3}ßÙ={Lá ©ƒw 1ð(q®F…}¶®Rq¸ÐWÓ.Ð:ŸT±Mà%ƒù!àWæ:áç±ÐI¤·¾2°+*‡0ùCçTì`F2„&‚Pgf:!!72wo…„Î"Þ£T…ï,»ïE ¡´Ï€¨y5¤àlQîé)cþLŒ4gØ SÇŠÈwrÛà‘ÎåP˜ëÀ=¬•Ðð‰O†¶ßPÖ+|_ÖjtѶ 0Üç$ˆFÁá`€8zë‚ÂüxÊŽ2½÷VÚŸ¥Ôe+œ\ÑŸC0faaל `ñ3S9U-Sø›(Î"Þ£rÅéiŽËÑHiïñ 5ú]óktíŠßAC$ Í‚tÔ+Séã8øç÷P4ù'¶éê¾³»9ïóÃxý·5~=S¦ú_=FÛÔ'e(§”üàÐ^¤·Îê£óöôÒ„SëëGÒk°20SºP,çÒ‰ÊÌ¢Ûï¡8JxJîÝIú2YõÑe²;2:èýICŠœSzd2=8‘ßv\Ï!ÅŪ$D•¦Ð2“Óâ B:Dë‰ÄÉ;uÙ¶ (”Ø1éÑ.•EçãJ¡téS§û(—¼cß™^ã$Ó{oììC†D9Åä~$½†Àú­/_2Ô‚:õQô£¸ñ•-N™/ήÑ=æ§ `ÒÔ•a»çŠ&/r†Ü$†4ñ±÷S€É-~ …(¦tÈ? ]Q–«“yGMnEW¸øâì²»¶¯GCM3ätÅ.•…K\R½‘Ñ0(—÷GCG™Þ{ ž¦]~ÍOöϘ†¶Ç3Òüúx°‚uÞ¶ÄãMö(¿œ…¼ K¶{Š&‰Uð5_&#èž…-šì“½òË¿ÀYÆ&Âa·°¢S}›·lO»eJe(Âôy%š£è‰·¬i²í£Tš%ûš¾5K¶›Ã(J¦ÉPÜRÆñßàÀ²“Lo½¥Ò~sˢȾ1 & ,µ¯·Á‘ijsßV>‚îqZÙYÆ»0d»?Ŧy2‰’ô(…JbŽ ½k·ÔoPÂRpŽÀ$GÉC”C †¿ÍFt R`&øHçn€ƒöy_٢ȶµ-Šl·M_‡E¶+­À¤¦’05¼ŠlG¡Þû«ì—)‹"ûƤ°àK€ ÖÙ70}1öi‡Eö(E¼ E¶{ûP³¨s%êfiàÀÒBÊ;n¦XÙîéz—È<Š R¾O¿AÉ¥”E>ÂÃOh,ŽlÛŠ¸G¶Ë’NM_‡I¶Ddt21Ó<¡à¶šäopZÙQ¨÷þ2ûeÊ"ɾ1%¬€ Š85ql~a¿Ÿb‘d߃½ÁQÆ»d»·5ƒ(Ї£ÍWüŽAD‹$Û="*`ÀØqá_¦“³ þ¾#Ëön+ÑÑeFÉ­Ñ{ÏrdÛî©XÙ?ÐôÕˆhqd;A³øøŽ+!ª·2t}+¦æý!ÑYª·c‡P†E“}cB¦3I¥`„Ðo‡2*MöœfGïB“ížÐ†cKÉÉQβN«¤à\ÜÑg¶h²£‚.¨ŽMDaê*KòûN¦81÷0Q•.íã«N\3‹#ÛÖB´8²·˜]µ|5ZÙNL¶Ì1LpÙ5¹ 3`mû°{9ÉôÖ[ëÔ‰ÍXXüØ76õ)`„Õcú„)ö‰Ø=öÏ%Û¸’ð.ìØî‹sêÓx˜rv´™B7¨.G|×n©Ó#z—w‹ë²°æ1³ÕŒæÅÏ#!±¤.?ë«9)ˆydH!°€MÂñ=OíiRì“$ÄË{À'1=ÂxD˜®»Á©=JôYYªó€u ušþk‘bÛë5!ÎÜ5í‚ø07ćú€}ŽMõ àŽbÈ¥çþ˜…zï¯p Ҥط=µ'tVðöJ%!Èö”Ê+)öÏùËîD¼ )¶{2}ð¨(—âh{™H‹ßóÔž&Å>Ù^¾¸Wz?A³õŠé½0y–þÛ‰¾`½”¼2¤ÀwEò,'¶µ³Iæ²ihȉr ×ÁáÇÚ@åFn‰¹¿“éËA¤÷¾2'»ð(Ó÷&H¨t’˜]¬|¤wƒœ ±oo:‹xBl×'}uñ+¢Øq=z¢w"tÏ­‹Û=_¶×¥äÇgõ„‘Rz$$4ÄÔ¼HŸ ;I´±±mm,Bl·´6ö-»ÀAåŽÊA'®‚[2 Êá–“û;™Dzï«# ¥c–óaëIhr®˜ÀÌ.âÀã É°oOjã,â]¸°]#¬Œš$ýøLŠÔÕÚÍ;Æ -"ìßè“®›$жë=!%ÉÙÂïߌ‚Њ¡”UÔSéSíäÄø°ˆ°íµIç$wM» ;Ħ+zÿMé‚$Äd0UÜÒq§wì(Ô{±ý6¿EƒmotýH¬P0C"…4é>3@¡‰}öµEƒ}{,tñ.4Ø®½cd*lPŽCÜ€¿ E$½+÷+5O ./v@MÃÀí)]mñp¿êü$A©¦Ÿ'š5åÁv¢Ÿæ.+F96í ©tS1ʇ8åúp¸&à1\gk¬ÐI¨·þ2Ói‘bòÖ–!üÊ$TiŽf©6N4öÏÎs%á]ˆ°]ó{!¬&£ãª—PŠÌ»–àÒ}¤a¡iË>Å?²"D7( À 2$æÚùÚâÁ¾ƒ—ì(â]x°Ý[†Z/L¥ŽÓñLXB9W÷Ü7!¿ÃáhH v8g4r𓩉o†X{dÄÊkg«³<ØöAzMƒí²^”SÓ×£¡Å‚í x`åEUjà—»%ãþ^4tê­¿ÈÉ2Ô<Ø·-%%5SB>P] š[¥aíÅãw(å,â]˜°Ý[QàIæqQB©}d÷¬3¯‰°£SºÈ §Ç¦¡Éõ¡!qƒ:óÔ¤†©“ü‚ŠSÆe!JøZ<ØßÞ² (”Ø ½K X Rpl˜”¸tÕ¿ dzï­S%QM‚ý3”^¶tûJÓÑ &¸.-qª è6‘E¼ ¶ë î>6åQdqS‡î‰ƒÔü2’IC€ùw„î c]IWÜ 8жÇ0&Vaca(ÎO&¦Àv ž6I\6}=j!§]»[D ÎbFÒ09¾?:ÊôÞ[|vùL.÷ƒ•ëN‘BìÁú ¤³Þ¹µëˆõaHE ‰åçCÐúà¹a6m(VEú7Õ@$@‘)ƒF$Ó„‚°àŸŒ® Ä9á·ïæûÜþÑ}üŒà¿„d>t:+'z@¯êðCDcÁÀ`Æ¢#ðÐÕ5±<¸xŠ1ç>¬Þ›â¿,nb¯óß™¿Û{© ]*J‘ãÞsf Mšû[Ý¥ëF·éÿ W¶3k¿Aˆ)(Õ§0ÞBÒ3—S‘‚%,„ß0ÐLï½……仲¢>Íè9ttü€2$;5"5/¸}ŽæÑvd wÑî5¯ä Eë×Q}Õþ/ŸEcB†f(x³ä$ÓœòàF&­œžU{»ú¾ö(Sö1‡ëÛÃBÀT69z€õIçQºc¶O?’ˆ‘³ì§víéês0³tŠ6×ò 5ÿøï·K{û”Kö1¶pÄ‚|ÄPúçp¯Þß½LTÎ"Œ À”A¸IN#V¿·~ž ÷ý¬ ëä¹ ×YaÉ ]@ï&9¢Ê|Ñ›ƒ&á†Àò”à÷”ðœrù4Óf La+— oçÐF:Q€šôã¢k?àFvðçN1¢Ùç;ê•®$Íp:©~¡yÏnÓ«3ÖýW¤ï†ôë1ëWcÒ§¨Ðï˘0+‰¼á®½;©>,üïJøý<ßÄÀ ‚>Hu’Kœät+qÔÉÀw:tå¦Ýß6ða‰çà>ª(‚À2•gÎ2Ø¡Ê;jàó"¯oï×í‚mï@úÍ9Æ3µkˆzPLoq{“7ÄüÈúÅòÜ¥pÚi‘f° ®'öqd&5¡ä~±ú”oà‹Îpp®t!£“W’+ƒ™œ'…ÄJ±w(`&bšfØÔ% Ø ¼!ÍÓ¨ûíwª4N~µ2\Ýðõ!sA¾(yܼÂúÈ£e!0‚n)¿\”˜¿ØÅ’‰_†Þë^Ò› ô1 ;=T‚Òþ[žÜž®—ý±l:ö#ó:A¬Éð>1þ£ÑamÓ|ûÓgÍ?%,=Œh¦õ÷ë¨ÓþäÏÅt=i½_÷WíŨÿù“¾_û˜ŒoZõe¯¾XÞY“ðW`C?²¾ˆ.ê­~{òkÞÃl‡3æüåÁ…úë& vxútO÷í±ÅIò^¶y¬™—íƒû,?—ýÄ\®¦³û_¿¡¯Á}âÃÞF[ækNGÓÅŸÿ‰<Lóè®i§³l[˜ò® _µ¢¾n%²i´ò/ÿqGmƒA§jÃ.ÔnhKZ¸þ~½¹@ßßOÇ|aÛ]8å¾TÔsºC˜ %<ÑÞs~2 ¬iâ Bšv½–~¨Ίú¡i×kéA+Ê¢~# Rw€Š/œT§¢sE)ýwTz! Ò›*½9 8.?sª4]bDñ;£Üû_º2!‚’®OE S}UúGK¸ñ.þ͹ Ê–´ô‹”N а)Ž#ƒ”àüóŽÇ -Gçi÷E½ÂÒPH—»>ê‹ØDæwÖtášÇå+"Q˜1ñàÃÔ´Ò5uÖ"63?'‹¼V…¶»X›¿_ù<×·íÎé1wx?Í‘w9a¬Ä:ò‹8ØcTÜ0SÈ•P;Ú_”†¾-"bÉuQ=ðãty=“)n_ •hÞ E¼KehⱩS›;Ê1Dsy2yÇÌI«2ô9ŠÚ‹z…87ä§WÔ`R³kü8bM\L¹ÔäÜPä„Üàµ*´m¹UÚ)öâ²í«ñðµ,´0ÛAœRÊ@ Du æ¶e¡¯–é½»Ê'mI'^ËBÿÌi[¨!Ú4‘‚>ª¯JlÏ:aÕ…¶Ï2ø14tñ.u¡É¹MÀËpŒX0éÑáB.AT®á]»¦ÿIXÿân!i`óà¨[ÌbZ'ç"¡ßŒˆ)sÌÀJe ι²ÐO"ç›Ë–Pè† A†êqFðÎxZ=¢ÐÖÂÊ„Vñ]W^­„ {T‡Jâ`#•Æ'¨•Õ n .g›4^Êbˆ÷7G­!¥(mWË"ôñç(Z„ƒpÐÝ;l0(IN´==ê¡En5vao˜ÃGÓ8yr¦:ï2†Óf^<Š,Á ¨ C ’‡X–‰ÐÜÌC.HèÎÓeíê«Uñ …~B…n(ÁÝÄWʆâ¡SÝ=A}¬X#1‚ ½u¹ Í’ðKÆO'€Î){åx¹B¡Oõ‡0¡»ÏS8Iá@’OMÔâ-›ó@ä_EBÏ€5¯®Š¼HHâô8Ç‹ÖqÀ˜Œüy>9ŸåÕIþñ$³¡Û0öJ„VÊú®½Z+Z+Ý›­-Ä&e _D†¡i¯.oÚn£Ät[-µO¹*º}|»‡[€LIîT\”äßµsÄ z?‹²®‡Ð »SDï£Þò4ød7¥þÅPÊÇcÇ)sàt:‡ $s¨°Mc!šYƒ€­À6å±|Æ»ê¸ôúVlР‹:õ9yH¾Bè]uœ*A ˆx:ŠÚÔmÁR)+<ÆH;e‡MµÉÙ+…Ò)KæbEÎ5AŒy_ÈKGˆCxÐÝÊá°Él]œ(GŠÞXLú]-Úò¾´*­±ááp9Y2Á9ÞÒÊ»!J‹d¢8ÄŒòÜÙ% *É«¼mæ ´Ú‹ÝwíAú‰‰í¢öàôŠ ~ëv¹S˜·D5¨Û‚Iñbú`=”H¯j“¤jËžÒ,tÚ•ôÒä0ôêå5ñ IœVÌΫ·#Q/CûÞUa0’8©˜áT2Óf»‡mYJ(ª,’TÄ-‚¡•¯è^Ú}WîÐC€¡µÊ½%=‰<¤§[¤JQ?–¸>¨Û‚£Âë:\2§d‡lj]Ö(‡Ì•= CÔcˆŽÝÙú”)ćæe à D0¢»ež½7!ß[^‰ŽDTÄ&Ö•$+YD ¢Û%3ÑE=_îºôzE"Zs¯ki(r¾˜÷}ATƒº­·š³7?Ž`•ÓÛ]1 ¶—B®6>GSœ‚|©&ÄíšÝQq$º[å¡9yr¸\$=dy¨TFôìpùåE1¡Ù6MÛ±åip)—Ífõ”m<Àê-’´L(%ÂŒ~FtTÀ¨OÝú.Þ!ˆ‘Ïî uQ|ä +!:l×eÉÆR^p4?\Õ ® &ºí³NôÁŠ)Wúrª^Õ±$m¤è]q€=1aEwªÜ$Þ=î"&É2(„mˆ•Ý-ôÉ[쟹ià ÎÓcYìüÛX ¥Àæ½ä"4ÏEò2séöÕ¨·e÷]ºCsºß•z]|B`y+ù ðFª¨O°‡¨Åt[.kïbï;~ÒCº–£Y~œhœPö‹Þ¯-»3Æ!´èîÍ6Êv^1×=oýÈSТÓ!õ5Aty^2'C‡´èç´¹ ¦kÝ#¦Eṵ̈¸hRÀÄö‰Ëqßµ×+"xÑ=§*A®}­O1Dh½ïtÛTµ ®ë­cÊÍO#i›tûôÝ„*wJ,ŠÞIÝž¢Ù¯íF q/ºÿð!2\Òd¾ LRÊPP*€Ñs§÷WWUЊ¹Œíß_ÿÅä©ü¸Üå!´õ¿Ç‡pé‘»³ p?Žøí©›ø¬ßž¸éŸþuêàþoÓß~}øòׇ¯|Ž_þú矿þz–°¿üôÝŸd5¿ý—Ÿÿôå·ßÿëŸ~ûãÏÿë»øß_ÌŸúgåŸþõû?ÿ Á±öíÿíãïÜ~гó1ÂÇÔÞÄéúýÄ‘ýö1Ý¡g?>Ðàêô° K?„:p¾·º_ùƒ}gMÎ`ÖÈ'ÿåì^Zž£ ½5,Ü6iùË÷m+‡®=²øg+«îÖç몸ùò¼¯ÿÈ--2{7ì'èj\ÞM×èDïdKrÌWï|K_úÖݹ¼¿È±.¦#0m½è9ye‡¿»•wœüÒaЉé„>bë˜ùTBÝ5Oó³«ã_¾þø÷ 2Âw?~ 8§³ÿ‡‡°§¯ˆ@µ#ö#|>ï² xHîÁ}”›%úû›ß ÿ’Ñö~7 ™éùòúýOßÿ×_þüÝOóüçŸ~=×_ËGûõOßýøõOþßï¾þðÝO¿Nþìÿ»|ÏÿùóßÿãõŸ}ýòëþeò—~™ý]þó_/¿ûãwúáÇûÝßýŸ_ÿòË¿üæŸþðõ‡?ÿú›úõû¿ûÇóMXÏ—öç/øá?üá»_øù§ùßÿÍÿýåûþò§¿»¦‰Tÿ›Þ¥óÏéú™2~ê|ÿÇJb÷pwÖ‰q{Þ ›þŸvó­w:„u**ÜæÃ®¿“ªÊH’†ÊÌJ5K³q슽àÇ­º‚½X8ü÷›z7*#\Γd8ÛÖÑÕæx°³¡¼|“q6H/ijóÉí¡ÍÆìèöÚrÈíñ†+jÀnñƒµ!2nQEŽ›MevJ²Âì• É[qÒ!Yêà-{iÚÂòéI2¥µ,¹—˳^QÚÛñ£tÚyi—^_ŒÒã[#•¼É%Áþ³8#ã¸yi1]W¹m}]¡(íSÙ]äcx³e$ÏKÊÜIE¢Œ D©1a¢t[œ%ƒvrs„Éd²¬ÈÈÏ>f¢t»Öœ½%•™ž…2‰RÞ Í­™i‰[ÎHÌÎì¢*¥¹+X±(íÒ«Õ°bQzŒ¯)×o óœï¬#7»‚º­·47/X”}ÎŒ›Zƒ¤UV\N)ÀDŽu*Êñ¾5zˆc¨(ý Ù$;LŒ(FSQú“^ɉŒ—qrøC NmöØinüR’Išv’ò¨¦øØÎ[©(ÍöµJEQñº®¼Z +¥K ±=U2¬Ä\ÉØdÝÔm½Ê\r£ëâuŽ!gø”%s¡Bá e€ê1A£ô燄½ïähz¼$k”?¹*·0wòúªä•E¢êS[›$›§x€Ók‘çÍähÁ²‰yÀá” Ø FéÄh—^-ˆ•‹ÒC‰r±\ â@¨“¬<ûOàä¥u]¯·íô°rQŽ&Eq1žàÌV*RêyŒBg±¨†9ŽòÆb–·eN4Ù^.¢ÑŠì\–·oØ_CRNÓÉÎÅùÓ¬^3ö˜a<]Ëì²_b£4=E+¥3GT®¼Z+Ekèi©O(Ù¤J]d@®cg[*¢ÓuµÀH·>‹ÊEÙë´­¡4^uò¦ÌbŒ¹­h”j¨Ç8„ŽÒO˜Õ”M+æœq`?²¯°ÒQú—mÕ0LÇN$C(òî:Àì•ÁS¨‡Ü~‰ÃΊ V@Jç¢vñÕŠX )Yužmé/Œó ‡8Šü8Ü'8SÑbº­·´­/|” ¦;Ébª>à]Iòp´óÄ $e?¿†Î ÇpRúOdCvÆRžz6H*ëüºx¡¤ô3ô¢%#õó”þa´Inü#„QÞ7èë•zÂH!ü˜’\ )Í£• #¥ó¤Y¹öjY¼ RzT1XD|§‡¿ Ÿ!STbúXnn×Ε’ÏéèòÙ{“Rq|’ÿÁb`VÛ1ŸyH÷åLʰe$V%ÒT?‚3ÞRÍIy£ÿ&V\´l $Kåˆê9I¡NÙ"-±°“š#9JQö‰ùkߥWËbå¤t¡–à®6ä‹)wîVçMp´ nëUÎX*)åØTÑÁEkP$4Ê餔ãÙój„C@)ôF¡™Š‘jÙæé ÐC"’~èÂÞ:H·u“4M‹À r$?¶:p¢¼)+Æd±9{¾²Rš',••Ò¹›¨\¹C ƒëã,[oœ$úad“?x^ ê¶ÞÐN++e´hs˜Pä³¼ãN³À9†¬³Rʈ1e=Ê!´”nÔ”£áLÓ–Äpliy¤oh)3ÙÏÖãhÁÙIÚ –¤üÿ°¿qC”¨Åtr›{i>§ìªÔ4oíT!ê¼ôúþlÐRz&‚=Ú228MŽä á°R´˜n«UÞR•”²OvÛS5û ‡•Z”€G”MG¥ìW/wÆ8„•Ò­‘qçø t»êêVJ¿wcˆ&>¤ P¥ÌGxza#”ÐÅ™9P)Ês—žô#ö]ºC “Î{n¬zùü%›ºXð3ÇOàq¨Åt[-i ½ŽéÅÀW¡!)Ø2²Ü'˜”ãÅPq%¥[ ‰ÄpZ+“ &G.CAzûm°“µ31ŒRÙ¸UTñ´å*Hž£ÉlgVË€¤´­EIÙáÒZX| ìVŽ.J4D½¶b›º*1ÝVW! RüÑö†E^hIŠP®î;¢4Êse¤ ÀŠê1Ža¤ôê¼’MÉlöÄU ‡Bœ<‰ýÆÎ¹dØÙéÁyðĸ¿¥WŒžÀUìÁ ŠèkÿuóÖžt—nvéõŠJJöÙÁ&^‰8°³DîXzéQÝVìC`RÊÑ(½ä°ç]¤È/’v¥}Ä\I)#ÈQjŒCH)Ýêá”Hþî«ÝÙÁH ž§TTJÿö![ã™§š(O†ñ’Û/›¶Þ>„Ã`Dª–$U+ÙΜ€Jig ¥h® —îÐÄÈêèLÒ”Ù$ +îTc°Ÿ bÖbº®–lûÌ¿BR>NÉè'% ™°ÍO)(íÙ’2¥Ç8’Ò­†ˆDާ;mÅòC»+$¥{û°¸hDhº)J’;¹”È6—Tg¼Y~µÀ$E)Ïrì=LÑ.Ý¡†YwÝiîÕE|ïzË0Œï=ÒÙtÿP‰é¶ZÖ°¢e¯qæ¶ÒH’©F“ü0C°Úa )#¸ójŒC)ÝØœ@{PC'©Uö'÷*"¥Uœ«å²›ª!ÌÂvf7š$ÙkÑZÞ\yìq»Rš76)}Øê¥×«!)®+;ŒÙXùU„öx#k§Ù¦z¨Ät]¯S†÷* åèfŸÑVEá”@¹ò¬ê„”;ˆzŒC)ý°9Ì3ÀÙf¢öåÉt»©ˆ”þ")¹JSnvÀ£øRgL݉©˜È'·¿¿þ“]ø( ”„ÿà£ÏGD9†²U£gq‡âQ­ñX<Š}‘[ãQÎòG&zGt’;½¦ ^À*%¿ÀG¹+¨ù(¶DãË·œŸ¾TÏ%—»é_|§<Š{ ïß)eþ1]oiÉgl¡Õt”»lb‘޲pŸáþÊYR&‡ÛK~å³C¾Ì¾HNåªG=ËÏ=C¶ç©Cã2» ÑaÄ3d‘Œ(—aô»,—aZ#U™Ý»âE+Í>’—x^îŸâcuö&ïϳî5p1Pwr—<ï[ •ò_¾Ó¼ºmå…•¹hå÷©Ïºþ{ÞÍN4û¸ìM«¡w—Þ‰ oÛ2]~fI†ÓÝë¡gùjGRe„êscÃlŸ(k–w¨ñÄìªçÒk~.‹åSòlR`Nr7¢½aV…4ŸqÛ®7éoðòØî’‘ŠÓüHW_2V“ïâ)3Ü,ídˆ¤ùÝ'AQHË»³+:y&¼Ü)=Îð<§ö[êòñý®_OLv’#7ÊßT³ìàNçpÍEÿáÅÔñîGÂY^Þ)ÑÉãf#y‘müV]fªîŒòþLç²ÔºQ.ÙØ”³?ÁÄ(ù™p}Fœr ¿úŽ}zÉúŒXeçyõ%‰1†_AêrÍ’}ê|H–7í¯é¢Ô ‰ûÆKÒ4߉{ïÆ£!Á(7ž}–_Þ”ПJ¶HvêèÛÌT7^T¬`VßϯyQçsh*¬¿¨d¡’)SKWhòš_qçåÅ7ð¢ÅíE[w?oÉ»wìÐ:{’šYÞ¥žòÆw£{µþÙ=@­´8“]ήÑ2]¼É1ÝmíaƒÈY<0ù[–Ð]3Ü«èaUÖ•’)QR¬ÉºD‚M(vƒb€Îe\9Pô¶Â»ÜûbÌrÉ=‚YO= ˆÎp8Ò-¦/ªoEÁò©m§oÍäa¼â30z–¯/œÈ¥š@GÕªà)Vpõµß. $QÎp­;a/ÀÆÈ¯«Ì·C —ßrÚÕ>¾_ÐÏœâ9‹œÁ@–‹RÄBòùFjNïÜDµÝ3µ—!šãzo?†€ŠqÎ…iORuò#5öÂñCƒ¸ól€g iQžižvâ‹ìJ•63RlÉÀ½å,OŸÃ(‘Ü7K€Ööá7¤¶Ó R»ôúSxh­6ÕØts’Рk^ÂÈ&²û nâjPßÞ )Òk†c»D¦ /lʉb‘¤)øö˜we´‡8ÑÚ­ˆØ§–àÑèW¢º¬ÒOщÑ›¨LFxbr¦øp 5|›­—ú ­y‘ϺTÂݾJ½âÊ•Wkaųöð·`~‚“¬Òfgâ<í;\ÛÝVª¸W0ëÁ6¹Ž$O!©Ðca¤^oûäV0ë~­ê}!³.UÓ/ÉÅ¥GÍò¤3¤Ef¶'w*—õ ÊŒˆ ÜÙ~êý#Yc>sŒÀÝb’غ`¼|«%.+7Ǻ+˜µ3)T.½Z+˜õIu½¬:Ö‹¦pë­ä G6ªw„t[+µßLʺ ZÛ’ÈxWI6[ 'ùaêPV¿ßcgc¨¬³9Æ×Ù2„>°ˆL€£g7°Q½rY»Eîˆ&‰0LV¼<Þ–ñÞ8ÔÌø)¸Ç,¤bY›þ2ËÚ©†Ú¥WËaŲª!-Š‹w&Éû½]"Ï%,l.ˆjP×õúåöúÕŠeÇJ¢Ôò!D*ÚÙèÚÉa¥²ÀT«!!²ö놼+—Zr_É"IÞ¦}!+‘µ4ëB2™ä³™,Ë’<ñˆ"™2è%®Æ6%ÏŽ=*‘UÁ!û'ž?]W^­†•ÈÚ“R*F Ë.´DÇu(ë=Tce}ƒFeÑïïf>¹>gÍd}cUA¤ Ò¤ZÎÉøèè€j9UÛõŒ¦ŒÌF„ù±Iµ2Y›ùa%²v ¢véÕŠX‰¬]8«lqZáD|,̤¹n³¥"ªAÝÖ[Ω9Û}A²îÃQPäFÞp./r㤷0³TÔ@Ú;j¢ä ëéT)R4[7u “Ô1àmìºÞ!pûk‹’ýT S¶þô ^6ØÉËVQ É…ÈÚ4ÞºYÖ2ßwñÕºxA²jÖ½m ªÓô\5ø¢ò RE5¨çö™…²–cûmb‘·9¦I Ôb“o;¢]€¬Ç·Û¨!Ž¡±¾±åFÀR˜ž@P6r÷„|™Šc-3 —×%I˘ÿ˜É%Iè–­‹­ ÖÂx3à<3xt,áXƒ ´ºYߥWKbű&mS³ÙÙ`ÈXCÁßùЍÅt[.)jÐX-gãyw‹ŽK,m Šc=¾rÖCÂcí‰¡L»R¤ä4Qþg4Œ5v/ °ÍhãÔ$'ˆžwжî¶IÅdlç9N%ÜÀ¯0Vå±óål·¿t‡NºÙVœéæhlŠ8Á(Á”Ü{º³é9³Ómµífì ‹uŸS•¶ÕXx‰R<ùJøs0-jÇW”øö³CScBbíÇm‰b?QCW¬ñ•:3rU ›£/¯ d•íäTÅQ0$¸?J!0±aŠé$Ïœ‘{f>(2Ó¦˜TkŸ_®zíõØ@±jû™Mï1[àbâé0üLJþ †hZP·õæ3µ]Ý+õ`æ›bðNQ¢iímÄŠcÀSÐc‚c휹eŒ‚Ü‹‡Ç݇1ÃÞd)Hé$ÔÆ)LPY÷;gîŒq•µ›æÌ…e=4^Kfà“ËKÓp«¡‚ÀS8•$<£¶UXJs(¯ÂRÔ¡¼ž ¯ÖŠJé:Vñ&¹Yb`ã|8-º:¦ÛjK;]¿pRvôtÆBgä§½¼Ù,‡ö™Ê…“²«vOc8)ýº!ùúÍ%‹’üjàaó…“ÒŸôf «¿<]:x|ð[š`7U {öIT‰ŠÉ‘ãcãõ…“ÒL¯œ”í/¾Z/œ”'P€eŠ¢@¡@Ù8¦p,?juLËÍí7Õ…’rp­,AçÄŽO0à ŽÚcy•’2¢ZÖBBIy£\†íÓÃ9³c´ïÌ«”þ¼—É J~p9”ïË¢‹ÝÖå²Í†Ç“Ô`FÞ7þ±6«”¦ VFÊ—^­‡HJôÀr6»XNhÎÍÅ}†#5¨ÛzéLíÝÃÊI9¸+ÑçhŠ$·ñD±B~lûP¥‚RÔÌzŒCH)K4½{opV¼}€qbÖÇ,#—õÎù9O`â5)š#YcÉ ‰žÁjÁÃçlö&æÙ~Ue¥p{@¯ÒRú²Dõâª\×6¢ÜTÆû À*yb>C–¨u[ohÏ•—²›õ+yK7¹ Yþsñtfʆ]µ­¬Èè'°ô·Á¸òꇠR–f•käÏpsE¤=ûì'Ý)ôµLv4*¥{UÎzò驹äŒ6ñ–¤ɬq{‰•:LÊttðçÊ­*'Žæ9ó&`RÚ¾^ ¥¨‡Ë}—^ßœ Pж—9y>îÃkK’*QHÕ^bZÛsRyuL·Õf _éÞ˜ý!LòZ+$ë=… qT ¢’Ò¦쥄zˆC)i¶ƒøªldÐfMm½<ÐCvÂÞIé^/“§•°Ïòhì/†À,Ê¥óMµlŸÓ8¨hb˜ÜS“ÃŽKwˆa Ï °—„ÇØYBöHÀÈ”D­áŠ¡ÓmµJ¡\)Çjaòl²¥ròÙÏ79G8J õ‡ðQ–̯^ rØBI“¼ðBLÅTèÈUa´x‰rðÚºJA/ÔÔÛŒˆPCÌtÖ[¤`>Ì“[¤X­+º}LçÅ;ô°øg>6KÚ“ƒ±){H&xw,ComH·µª¶äÖï‡]”‡¬$¦NQŠ5˜v)j8Ê®¸¨Ž‡°Q–|ó_«':3òt8%ˆ©ßü!l”n-tQªdNy¢ñ08„Ï÷–Ž^ 9’ÏÃfyì0:ýì`¹²QÚVz@£hÏÎK¯WB Q¨«N®Îû”Gm–¿3\ õ n ögõ'vôÀ^T༔I\M½bÊÊÉr¤Ÿê!Žá£ôo°I®ë|šl°%‹®µ‰7ê<Ê"NôÅe1Zmî%Ï‘çâˆmÃ`LgÑÙa3Æc欨(or%7¥37Ô.Þ¡ˆ‘ŸEµÇYÉÄå$Ú;uŽü Q êº^Òü¯ÁGÙ (ºœ|ÉŸax žB &eëžáQŽÏÕ‡ÀQúåÐe+Ún'}6^r .ÞK©t”~5ôM¡“Ëp@N7ÒkKI]æå]-e™¼0 Í\*EÒħ8€ŽKw¨aÖ¹-áñQªIۉã}rÇZ`¯ê¶^Ö~,ÄëAjhÁtp' Á\Bu>J{ksG5TBBG™µØ¼®†)›X¦îX>KµìØ ÅØwö¼‹¦p™j|(&QCùPÐü"’%Ïž¡óGÑÙ(Û_y½Ò';Þ¤Cv¤dϽ¿mµP êº^§‘ó@FáZ›Í+ž QråwPœñ·;+eW4JGˆCÐ(¶_ ö?¥ÜŸê!Ú÷å‘Å2ð(Kì¼×VÅEA¹í'')9aŒ¨l6¥§tºHYîg½íe6§Wù( ”ˆužqç¥;‘Ÿ’æ—ËÒ «AB‡uñÀI½ž˜n«UŒ5*¥}T±KM Û»|’œÖÄàÊ<Ø(Ǥ¨!£tçP™ä})Ã$‡’”d”4ò%Ú;Ø—Ï”av_$wŸœ£ÆÊ²™Ã—ÒæBvœú çŒyQ‚ŽFÙáÚ륦BOXQ‹í,ÙO¡z%DtæiÛÓmµ¾)…Wì½*忍È–’³:° M¨çbJ€ðPß«Üä õÙ&ÛëÓ½¹’…MŽRΰ‡ó!…éaõÈ^€+¯ð.‹†ÂƒYφ/Éæt€Ë—çd|*‚"x‘f-¿°ÉnÓ‰.6Ù¡wVO»üzm„Q6«MW­Â£mñDµèSÌ¥¨A]WY›Ö«NÙ{3·-(àaCÉŸ£‰‘”Λê•=dbOrˆ[vyÇ«n³Å2øu ¡º V¿lÿŽƒütR– îÆ ü“Ì.^h$§l“”´4³Û«–ÙI{ašÝíî \~µBV×lêšÜ‹ÎP’÷Ý)»`pd÷ Lo´˜nëÅͧ»fóÑnˆÉzþÃÎHvÜžX¹Øf°½Ñbb›ÞÑF;Lw©àø²ØgÏÕ8{a†ïõÄØË}Ÿ% ˜”ÕÎ`Ú÷ˆìÑ)msJ§$/Ó<ë ®¶ÙÊc5ÎÎúcÏÅWëb5Îö]>g)éCòtJ |oîÝèÜ4qTbº­—Îé‰uvÚi¦¹©9ES"›¸Zûä¹}}1ÏÞñº3Ê!îÙå Ί³È¯œ¦üdÁÁª{ö;‡ž´D~Òªøçœ7kUlËÁ‰¬$'¹˜`ýl¨¯h+'ŸÕB[Ÿ§ë¼üj}¬Ú¹ÏE;`'Jî²+ +”ÞÃñMRêºfø?ñÑ;Å(ÞýÕÈÌŸ¢OÆg.O¼´i„DªAŽñÓ~£eI²äzp †ÃÄ5fˆŸö;É#×Dq:±ß°¶›mÑLþ‹)œü©H ’ÍÙÇ,¥Zjsû(´šj—~Æ@ûò«²újǾÒEol¤O[ÀÖ©Wª7H5ªëšƒ=»vYýµÓÑÉ¢=ѼΤÀ“ì¨ÝÕ]¶ãˆêZ rˆÃvxƒiWD )ú29ž‘gÓäâyàéLõئ7RH(ùT&Ò_Ø0Q:ÂeÇþFìÙ£¦·3·¾ê³Û†aÕiûÉÁußåW+duÛ¾·_Y¡Eè!ôŒq»ì'èù3€XÔ¨nk.õl¬ñ™\\·÷SdyÇc¢¥ˆü0R¥¡çâ»M#\fõ0Ç8oÛwÔDž"yŸÒ”óì ?ÐUñâ½íÞØ_-RU“Ï49¢)Ù—]9`œ ïɃhünÖGr±ßŽíSì‹7©òÔÀj¥¼Xpç®Sš3f$©÷¥ŒxýÓ}Q},:ŸZKµâÎGKeJ›cž1×hŠ-ÊXLuãæàg=Ê!†Üåv’‚ƒiz”‹‰ihÁ]¹Ë;§5ED²ÉIÁMòRðË”ŸÐdÏé”r0%÷øVOnÿ\]¹K/ºE»üj‘¬¾ÜwŽò‘sr§„=R¦#¨»‚º­g6Š9°Ã'r0š|ÁI ÁÂ4Új oî=]Ç:£âÎMoÜrÃY¦›NË€ ÉÞŽTHøs¿µ0’¿ê’œÙx'IŒå€-IçQ¢‡`l¶s,µ“Uqǯýv½Úí«wècp“Í·×¥(U–w'ŽjÌö þ´˜nëÅ ~»Ýi§NŸæÄ2…Ù‰¨ã—FbOÊèL5êV\»ÍUëQ1ë.ï !‹Ø'?=Ö8»’0[Fûuûy™ýúÂ2:Þídÿàìƒ$‘ޝNAô)J†"‚cœyÀ±»hލ!<‘¤®‹wØ2ä!=ndÁVò•S’JŸ¢õŸ`ÄZ ê¶â\w›Ÿœ»w"]5;|Å·ZL†Gã²rRS»÷œ£éŠqŒu÷;–ÿ¡È2mƒtRWK:L#-xàݽÐê³Â’,O<rõì&ÚÍÒFÅ 4ˆ\â‰Á­O!,úw-;I®ºn~ùqL¨ªÒÍÉf¸ØX2Ødpbü ÄQ ê¶bҚī“w:ZYUF—¡¼÷(D×EW+od½›8j1ñòo8y9›àS39Ã8“7IÑÕÎÛö^;G±²/' +VÞfà^àÊcå6±R^dL±¹bI«Ÿ·ÒçSý¼õóÎËw¨cñ“QÖBÄR[Ï|Ê ¬8rã'°õ n+Žõü·iV±öö& Sˆ'oƒ±õ׎/ªÛ¢»•ÕZŒC¼½ßðç‘Ì©©¦ YÒ.¢‘55ܽßq,K€A%žÌ_’é9Óþ%5Émaäé‹§âÉÇa6~ ï¤ùÙ:ž:nvùGx|wi£¼‰ŒäÈÙŸ š>ÀѯjP·û³æÕ“ïr°Í·ƒ­†¼ôó)ÆdäÅ×6¨¸Ø|ǧ¯û‚bô½`PñúΜdÂÖOêO0T=­««Ó÷–½“Ÿ‚`ºá)å#ö Zm€Mˆiî)£ZVÃì[wë¼|‡8F–P{ ¿ƒdf­°6RíqTƒº®˜¬þæ">ûƒËj,W ÁrÈ`{H9é·æµ¶›8ªA±ýŽoì:ÊZ¤~  ÅDN.MOªÊÕëÊpj›z;^6˜¶³¥h«{†ýQ<±¼@)7Ï«%g›ïïØkj¦]¾Csª'Gëuˆ¬Ô%$ßþÄ”LŠtd¿cWP·³.ŽÅN:)G˜v’hº÷ðq.1 h³'2zC\ÀS?C°ò¥BIÓ<)«·i´xìª:ÉžŒ„49«F0òf½Žš>¡du"l[̪po[ ^¼ÀIm/ìºøzi„¸SiÓœ³!ì]‹ Íæì'8ŽQƒº®ºóÒ„þõëInÌÃñ,Ë&Qôdµ*: ~àa„2j11Ïo£+0|°|ô0·RZ]SýEµÔ¬FRß©ãc’T²dwHU-ÉI`G§ÌÞÈ[<Íý§3$GsãF]ÔyX­]¾CÙO´`—@²w²œâ)K˜{­'·TG5¨ÛŠãYcßœ6ç"ZA—Œ$òÆJŪÀcà>¢ÍQrˆI¸}cËQ^nšºÛg¼ÔÕ#Gø2-¸m¼¾.ЦžIRr˜€OG²gÿ®Ž–•óP2ÅÞ.GíòëÕJúÙPKˆÍ–ò„÷Ìr¡^Ïò-ÅQ‹é¶^_‹æy æ§Ú‰噡Sý•Ï=ùØÍé­Ðkž?yΆK΋;+ë”äµïNø•|?qº‘îä2Dͼà?ÒÐ)V©×_´>“^<Éhäª!O'ßW<,ËÛ’‹WMµ>³ÉŸHÊMaÍw_ß»ý–›2÷F¹û–Ý;Ê.™Ì.‹`Š–¼)“ùpiMjo󮾞_³Þ{¬´C­¾&Y·0öU39ê¼óò³;ïÛíí}[«§[6ïDrŒM‘O)ecsàyô{·#¶á>I„Ê=:)Ûî“mI¢“.‘'U„ÈuͺóGî."Ü]³ËaE,FXn÷â¾a»ƒñ*­a7Uö.ú›Åíw!ã I5“’‡Eižv^UuWÀ]GŒCwaÉñª†Ÿìz{B›ßæw’Ô!…l¶ÈUuw³£Î——åJ=®upVžõ Å4ë>îùž‡iÞeL~ÕUÉzif0/õjûý"õ”:YÑwíõùP[÷Äëjò˜Ü)¨¥K,ˆƒ£qñÈü® ¾½>tªÝnl’E¹‰°Þ5çKa©¤6þ‚´ÛÕ°#Æ!@»%¯¼—¤h`Ç9LŽ7á ˜d}©$•f×-ˆ²Iœ§Óf0&.Ûµ~´EÉf lKf%Ù§d_³®¸J²ÓàqôÔJzý•W«áb÷„E²(¨ë‚¨kæW>Ý>Óµ-©ñEŘJ§º÷ó„NWŽß8Ôc§+KlºwØœq^î±{é(h5) DŠT6u+"¶Ì’÷ö'âM°vStgkó.Y¸>JzVw+É>ÃT2ƒKgî”DíÚ«5±bérüH½dJLHÄ@å˜< ë êºà`ÏIáa…½ìXZzƒ9&'éI:q°˜Fx¤;>CÔC‚£›U½,Îã(%¤{égMîä#WµLi~iUÕ¤ u²ª(OƒÍe3³¶(*×ÓŒ€™VšmØWÝ :ÑwíÕ‚X)t=9bæˆ*# òFÊOp¢u[oiçîþÜÑzX¤Åt{ } µ+æ |îø“=ÆAä¹¥¶œ%1qâú ‰6P8I{áÎuç¾8Qˆ÷³ U†Óf®¦š,‰&äi!FâŒÍyaαöðqÐûú®¾Z/À9õ¤»­@poK¶*ð†é¤‰jP+–[¯yô_asÇž0‡:¬Tl¬ªNÙ+'Ì•47 çF qf®;£KNÓM7ÌûΉ´ƒVEç´„â|mY1o£›ø´&ä÷ÖqÂ,e„©s”òEysÒÌ®"æšÞ0×)‰Ú¥WKbÅË='-÷¶Ä‚MvÂQ7 Å»•yÓ†-¨Ûz%ÅP¸V.ÜoS!ˆ0Ñ鎧°Yrí4ñ•;>MÔ"”ëÎ¥D0DÙÝT68Ãâ-Óh \ìVÃÀ—íÑIŽÈ’X¹c¶ä··º^(™P÷ò"£{ܯ<¹f†XirjÛ_çµ;ä0è.+íó\Îrñ$Q$üiï ϶gÌí˜n«UÚ *I.ïf°‚ÿ®!ûè žc¤…o§¨±’ÜÎ0އ@ä–¬=ëÚ<|5!á‚ &s”ç©ÈÍ2p±äÜ’¥ÖK«ò!ù<ÙÞŸ$cÜÐZ%†R>ž:N™§ÓYĈL”¢U´Áyœy §`xBÐûmú.½¾ø8­ýpúˆ|‹#{/Q¤ˆæ–ˆÝt¬!ßú nëÍ‹³}ׯ¢+t7üÇ¢Ö`“¿Dp r¬† OÑqíöȽôPq:nÉÂù5å0®‹UeJ£ÜCÑHô†ÊKQ䲤îÓöC_à»Ä[r‘¢ˆ–$‘ÏÆ¼Hkû`‚§ÉPç¥;ô0…g¥‹ÒS*™©`oWvùX ¾õAÝÖ«¢4A‹ÛÍtQkbºJ¬ÁdOI“ìÙJ牢j„CPq´äàù’nTD i¿/ÌÞM9.bâ^Ëy]äp²*Œ¯fÞ”„Ô¤ÔA•¤€­Ù¹1 qŠÛ+†Ê•;´°ø³íÑŽA®më¡êS>´>¨Û‚•N¨ ‡Ûð±\‡Ây<0êû½”üOàpǫᓇÀáâ~÷%å Ž&åT¦'±˜w¬‡`Ã…nALÁ˜>¤‡%âCAÉJÀûÎõ`8߆­ƒ GÛ_{½"‚ ÇOšÅ'ølBN”$ t·| ETƒº-Ø+å2páØôð삇å8Zž%ýªîWíð¼2K¸› j¡Áõ×ʘ·¡èZ²¥’çhàQJ…Á¹n‘‡9Sá2e¬—dK¹léËܤd£±„$-K’VlXfÁ)@˜ÎY3«ì¼x‡ ƧžÌ‹Ò“R0\ vê²$c)÷Ò:·ÔC5¨ëzI² —>NñpKÎåS–_Å’´ ÄŠp ¢9×}öØ›@az›˜L¤FÒ<[¢½¶ƒè‹q\ÂdN%É G˜ùì.Ф¨XN2 Xó\$ûóâ(õíËÏê;®Ý¡‰9Sþü,bO°‘Žúˆ¢ÔmÁðô7×®KwÒÄx­I³ü@} ª&‚þ6Dµ ‡Ðß\wªr™ÎIªi)™üÈcÀßRwá,šZ ç4UEØ:¤ÅvèÍU‘®ÕkLñ3EÀß4âZzÊSï¸ôzQúMSç¦üH1u­QáÙm½ï4ÛTµ ®ëuöœÛ0gpßÎ#ÎÆ]p§\MÖ=?Á¾Å¥³ãì[w‘é0ÕÒ)ê@ß@Ó¯Š|››÷¼\:ç§¥Ü-‹`Æ‘äè»qÁ¤T{%’`ç[‰¾y)ƶ»ñF¹v‡ ²Wnš=.ð×ä’q¦ëbõ/ˆjP·õÊ}§€0% ËÇž®¸å õ.œŠÄ,Ь]Ho:oÔ‡€Þ|oá|?,“VDÆ«Ô[¹›/#îz°=ÓƒÁC.dp[´ÞHŠŠšóä’ãÊÏê3PÞÚètØu*¢véõŠã¡®Ö›èŒd§NÄ/Xçô?ï ê¶^¦–åÍÕ»=·÷Ë?üáK{™áúß?Þ$hrë/|ËkÜ/!œ¹Œmß_ÿÉä©ü¸Þå!´õ¿Ç‡pé‘»ó Iãé·§ÎóÝÞž¸éŸþõþ¼Ð¸ï~ûõáË_¾þñA~ùëŸþúëYÂþòÓw’Õüö_~þÓ—ß~ÿ¯úí?ÿ¯ï~üá1þ韕ú×ïÿüƒÇÚ·ÿ·¿sûAÏ>ÌÇWPKÎéú½µ Sðó4\¦ˆïú8î~÷÷öêê;ëq†99Ÿü—³{iiŽ.ô¤°pˤåû+OðL.ÎÇÊ|²<[Xýs¿°<_Jw¯ÆÕy_ÿ‘[Zcönò ùt5.ï¦k„Û€¬céŽùÊ¿š¯qéKß:Áâ=m¬{‘:këcÌÆÅ0øq¶Àêf&¢&<Þ­¼Þä—sNL§ÀÁpN)‹ZF´¦9â¥Æø—¯?þýß~ýîû¾ûñ¿ãÿ|ùé×(ÿð\þá!ìéë!PrçØÚî¾ÂŽbôï·Èá„6ÏÙ6wU¯,…öëk7K45Æ!,…ijíÇ—í.˜à0MSê€äLÁ ÜE¨0…î MGÎ £œìÇR”­¡·¶Dƒ§‚äì'g/æ(³Œ,…¦ae)Üýnvíõ)3X ¹Çë‚ëîT$:9ÐVC î"tu]päv?Re)Ø}ŽššŽ´pý”_—S=D„ͲSHíñ¢Ý\sÕ‡Àº1TñKeÒ’ŸmF»òÐU•{¶ÑZ¯ .R?ç8ß!y—Yl˜ìïuN/W0THR­Ò eyÁ)(“HÝš¨]|µ&V¢BÏxwÁ– »"êßÊ@þxˆ«AÝÖ[á™õ«•§ ì[îãþƒNºäâ)q†ƒKHMI¬@…ã]"õ‡ºÉ¢çù˜n«&ŸªðÀv¤ÊS(ݾ¹²$x¢…‰Ð“äL9Äì.œ¤£Y7yî¬TºòvY*Pó@£œÚ£ÙwñÕ‚X™ EÛám[íTjC|l1‹¤Ýþ?JP·¬FŸGå*ëyö–Ä–‘ŠÅHí³÷JVد©/Ä!l…n“ȳ$[ÒÌÉüF׃Ô§x.l…nŸ·³ Å<6s³"Š‘vÊ›ÖÝ8âH§”-š&”#–ÊZØï„¥+Â!¤…nA”¤í4™"fニ#-0@Z˜ ¯¼î-ž Ù’§Žé@szÞî|EsøNò¡Xl<ËSçÓÜ<¤…¶ó H Q-šû®Ý!‡IR¦ö GùJ.T]Îþý^ºZL·å’fLRQ GۤɯYž†S’Ê­ µPö›çë‹q m¡ŸK$q¢Ž vW*k!ô "‡*ˆ“mÄ(e’+1à‹¿ŠX©%Ø9ó‰aRÛ¼±ËÄÄz³kwbñjwdÓ}Gêuœ`„J|±N®tu[oÔÌÅ­Öô·‹R¨Ì ¦“Ô6åÀ¹âÚ%ýnz¨Ç8·0;‚x™K@xÅ0=oÆdý`InaN®~yY" ËÃéyQ†$ÑZ†±7p©).*"x ¤X¶:V[_:¯½^Á[èqô$)XL.à1~ETƒº­×·gù*náX8áÙ[œ9¸ÿZü28Å5¼çh¢åæB·wpp Ž<¡,ÍXÎ4ð`¥"æ½–/¯*ؼù)”Fêí|”q)$jòØaØxæ,äBV4ñÉäJßµ;$1²ž®6Mk Jûu’±Êv¼"*!]Kõ¦k~ÄG»è† imÁQPbÉj%ïWjfÐFÔÌzCh Ü-‘¬I˜Šœ$S6›O‚¡Ë’²²{w4˜ˆ?”ÍRKš’¨lf‚ÓV%¶ØËƒ±@`–dÄÍ“‘,˜òðåxNÚÄHçÅ;$1§³f=Ñ’œ9†Tpª[ÆÓŸ@µ˜n«eU‹EéÁ¢è¯5©‚F êº^àÚ¢Xq ûŒóµ{[Ü›$èä3‹‚ o!í×£ÝãÞ‚Ÿµ$¾Üƒ‡ý4¡ŠTyN#±\ .äþ¶"©‹èê¤r¦êèæÊÂì{©g¾•…“gy"ˆ ç@ßÂë¼t‡$²Ü]].0á„íÜ\ÓQëq>9Ç© |BûHG8?C.ì:êÝäæÂÒ¨7bwüíãiø‹ï)ñ´ÜæhФuw*qÁu/ëì‘8zz°Ó¥,’â–“¹°-tÉÊCEp 'RưH.&úyÚ æÂâ@ÑíËéù°wÇÅ×'΀.ð«´»çä[ Ù9¸úÄÀ²Ò¡³ëƒº.8²Â²­Ô…Ýì/ÇK¶/‘ŸêA¢-Jãz….ì:íÝâæÂœà%ñpY2ü@¡É¾zð^¹ªr¯ k—Dý ÑÔ%Ø%8¥ÑfmšmU AʾˉO`IlÊ£$VæBiú_TæBxæÔqñÕ’X™ üdÜ{Q}˜‚ÔÎ {æS5u-‰jP·—ó¢ãrýr¥.ìÓ˜ÔÔ[çHȲDŸC¸ždH»ºGvÄ8„ºûÕCÊÄÌSêkuJc¶û4+uaÉ9ý¥Eq6¹¤’&à ½›äì–š–*1ÁaSÆ$)=2S+tÁ*Ï»{÷­®½Z+s!h»«Mí]m`ËŒwáXæÂú n &T™ ;À·Ôæì2(€¼°dýR>ƒ.¯ˆzŒC¨ ‹Ä–kÌäEß÷$T²6;ð¼©bæmI¯¯«dYBNSW fL_-¦g«bNE>–§o‡îÀ™+PÅ.,6ܾœî¯6»øj]¬Ü…'¦º‹ ±Å”BŽC²Û‹ÄÙRÕ ®ëõV´ªÜ…²›UÚ¢äähHRwr–ê¶]»-©rŽßNT#‚]èßvsÕ"¤ÉY5 n\h ­°bºSßsD7Ž÷<ÙL”¬Ñb{@匡y#T¬‘Äm‘»ÐܱªØÚáÚ«õ°b| &´ÅúbÑ €×“·Çú¤­êºà`.h|•»p÷¦>$Oôp»Ãšá5aå—:wáøÍD=Ä!Ø»D~Uɉ¶E꙲h”VÁ ó¶¤××%²˜ÉÇišäß»R¶$/4”)‰2Eªí’ØÀŠôøðUò‚< {GÐÍ®½Z+zA3jéf"Ë]ƒ"[™ÇãEQ ê¶Þr^<„«_¾°Ž=a9ƒ±FŽXGÞr))æ‘WôÂYÔ‚ƒ^(ݧ,g›”Tüƒ.JVÌÓØ…åE¦Ä«ºˆ®Åà&Ù¢¤ ='LÔ“«Úäå{Ívó/ð~_(´vùÕÒxa/tÉPv¡J,¡jOr,Þz}P Îg§ÃöãÒ,÷»Do@I 'XC—ÚÚXá »Ò\×G8„½Ð.àÐ6QZW“ÙöÂ"|ì¥eIom$žž´ÀJ'ÎG»õã`ª¾ÒTm’ÛfVAWöBsG±¢HKÑú.½Z+yÁiÊÜì{ ÙH(PtÀP¯QѦ½8JL·åÒ95Y*yáØêÙcF‹JÉ'Y2æï-¬à…ã÷Õ‡pº÷v£““a´ÓÀ–J] þUIYÄÄq’ 2€µ¶,ίm}êŒ)Øh žedDæ¼PšÛø•ºàv¸x‡§»5x×–gç<¦–®óü{Ósg-¨Û‚ƒ6‘îBÚmÆ‘¼¥›Ú„,ÿ¹x:‡‹O­¨¸|Lƒ¤ ~ƒ»wrìˆqw!ÍšVnÁ?a¶œ#FÿÈ—IÝ,•„‰‘ÒPŸq?Af®]–ÈAˆišø†êļY†(¯IâD6ÝêJÊÉgRxŒ×%P DŠÉò¬/ày"¦·î»øúŽm€ì‡ oÏÉ·8È¢?ž š‚¼°x¬äê˜nËÍ 6­bî~.Gh"¶üÑAì%ÅM’âúÈ:xaWӴއ–lu_’ï1Þe§Œ‚DÎ`Šbè¢p…//*ÃÊ#ÚÉQ:-2oi˜Ö¤jÉ.Å™”í†|žë!ÊŠ&wßc¶ÙÅ;ô0…û¼—µ' ˆ° HVÙ$ßKØÞPÕ˜nËùW àó^¸Â¦ÖdØw%Ç'0ˆ©plNõ]À ¡-×»é¡ãð¢7ÐkÚQ¢‘Ròaú-´( Í9¾‘øV —{€0RthÂÜŽV¨ˆ’$£RpVGyçm8•¼  O@^ÐxX×îÄ21$y]|pŠ9…3Y2%ì…±:¦Ûr£²‹XÉ ílAÌÖaã›ó‰¥n³%·Çœ/à…ýŽTúBÂ]è–CF·F)Æ@Ö'ëº*vÝzÈb”0%0fçM‡`w=Œ I“ÃL«¥†›Œ»¤è!° ±OÕk¯×Cp:òCgDç,i*¥lbæñù¡ÓmµþÜÞBuaŸæ›æî\GÙa$ÛJ&u¾¦†Ák-ä»í ª1A.ä7öÚr6ž|˜Œ‹”Èó½­èê‚[bI¼´,ò`·Òtœ¯ÔÑòúØ’UØÚÅck|Jî䀗TuæQꢵïíËéþŒ}³‹w(bägniKêc6É&îìäéîþÙPÕ˜®«%{ŽEù4ˆ.™£¤²òC(þ”Iݳ2·R¹ ¡}¾—&ê1Á.äî;k!$7µÏ’e»+vaDóÚ²pÖìKœ¥°q´8пqŽ(ÿX^* >–¼6åC^Ä.èÔ…Øw¨¢^»Cs:[M›òjï–¯aTøC¨¢Æt[.Ÿ7U®_.öÞ]øI &KzDn¤"%I‚têïŠ]èˆquÁvŸ@$y[&)ÒÂTÁéNa¨Ã¸µçâg-–/¯ ^EŽÜô¸(HÝ%Y%sÛo TJÙŸ¢$)…}@sµÓæ[û¢â§î§½VûgyoRŽq¢pÖ$ [§öªûõ…Q6’LÇq‚Ë’ç#&›ñÊt*Þù~΀‚©¶<‡MQ‚«ö}£éf—_¯ÕV[=ciúp¡%’ƒd­%J¡J…>Á,ŸÔuÅ‘ÏÔ¶)ªÆÚö`YyÝÔü8+wV*dÝX›”qýäQ qˆ±v9—Y‚õ²†°¯Mˆy"Žd£ d¹VsmÿŽíÆrl¤ÉÂ"ü.¼ö7 ãbȆrròUãbxÇj¯­ôãTm>wÚÉj—_-ŽÕ`›Ô–œ¦Å0Ò!Á~­00h/ŽjP·íÍU-¶ùhWœ˜Œµul»#Á*u5Ù;’®û‚â²æS¯ËHðƹâ&{q‘€³òvàc5ÚÎý¾gwy}Mmq¢¦Äxˆ]ð’µàß$ÕíÌ«¯šmó3»í¬Ÿ¼ô]µ@VÃm¯Û—5Å(Š>†¥£TºSþé£Ômɤ½¾ªç¶vÀ±Bg°GO²rS¼Üáºë¶?—ã-!ž„9Æxû ‘$ãþ0Ý}”@M”m`CwuÞÎ÷^««WFÞÔÝâÉÊäá @‹¬¶mU2XìõçŽr¦$7·xvØÈjv†Tóí ¦n—_-’Õ};ßï¹½®GòMLቔýåÀ™ž˜® öØþh¾Àªÿv¸ ?f’1ias9a†ù¤{pÓî'Qñávó‘—p4gr|˜y‘?äâÖÙÕŠû{Å`‰î¡w={6´è‹²õ$ÀËò³Ÿ„œóc“Hµâæ'fÜE'b÷]~µ>V7îØ·)¥{.5©m]üvÜjP×+OUS /~܇{ÏŠò9+,c˜µØv¯wuäŽg¿Ÿ‡Ng˜C\¹å]ÖLD!Sâ4Mµ\©ÆÎ‘VÕ—›Þ¨´å2‰ »¦á1FãØ/ZLm]n[ôÛGš [·yÑ·[IXªswéÜŽT/¿Z$«wwìÒÈÈN"†ù@46~  Óm½TdšŸ‡Ãçql±í³±T>jÁÈÓ¦Écõï>»ÞZC¼é®A*²šœibì ƒ?­îâýFYpÛ»4meJVÊOŽhøIdr´€{ù•çeo%Cyl¸ÛìòÚœ„ÚEôòš-ÄV¼­\êeqm)ŽjP·ãß·[ù«—÷ýÈù#4DpÜw©œ°ÝÇN[ÝÍ»hÞº{ÍÑèQñó.s…|yYÅL¾L’,W’±a(5µz/´D¾º® ¯õ˜ÂäÊÕákŸðžÈ¢K)¡¥DDÙY¿àä°¢«žÞI߉ì»þú~q˜z“znÔ^m6ÐÂÈb¥Ô—Ze¼i£Óm½¹în4?(ïîÚ}Ú.`ƒI‘ux߀sìuŒ¹-ŽzCœ½Ó¼¶~y6 ãÅò”và<žº¡V¶„Ýн.ˆÞa÷ë RI‰&åì½™å.†Å;̶¹¹6Ö“%=IÈØzyí«w(#ì½U‘n:ƒ¡Çˆaùà}1ÞyFÓÓm½¢‹í´¾|§ó>ŒÀ¦ñMðòMžOQªW|Ô¾Ë' 5Æ!ßá<;¾~Y?bAâ;mƒ NuqàŽcµø¶o,«äKÖdYÖìŒ ‹’pË+6ŸclóþžêñÍm¬tuùÎ*²´óòÂX<:¦5n™áHêjñê–@(ËÒë7¾¥AÓmÁQrFÝéûh¯ïR{îЕD…L*®}r]­¾ãŒã¯o{î6·õr›Ù‡¾péÃHg ˜}ÛûέµëÂI$—0ñ¦À!SáTö—ƈYFy¹Ö™¥ÀH³¼nß© Q­~ßÜ©ŒÚÕ× #ü¾»j鳋lûˆgcs¯ñø†Â¨u[±?G%›‡ë÷êx„4&GÆc—éÄMv%)Y#Œ¿GxöèAqþ–‡¬Û6c¾ð±90Æð\iêëïsЗו‹I‘¦ûٸ˦Ž.HI‘@!¡TÙU‹ÞßAIaþí{åQ»|‡>FÑé³ÖõØ¢PlÆÀÁºwÝmEÊ£Óu½„ÑÁ¬¼ºˆëtö‘ê˜I~#‘åÉm\DÁ•£X€kîæh¦9Ä<¾ŠIl‡¦XPÌ(ÿ;t]¼4|ý꺊à m™¶º‡±½DœÄøŒÓþ‚ÃÐbü¼‹§š€+½tð^Ï[åêÒ˜Óä¬ïuCÅd<ƒ€x-ho®…t[-×MÞæ§Qì¤7ä]Œ0s·’#Åjdµ¢él@E­9Ä<õ»=‚4ER¾ÑTåNÊÖvýë*h}vô°‰*ùB‰!4ÂY¢DMß/Ì<³à®LôV+pêMµË¯WF˜»ž¤‘ È'òÔXßëI¾¥2*!]W /pÀÛšG’jõà”‘|0R1Ÿ"XÙ‰²r> ;p»[óŽäCðüFóŽ\Jx8ÇMÙ0KI:t]"Œçî}‚Äpâ”Îd]`mÊkmOðh£Ü%6c>%GSÈ.š‚+³¼ÕÜëvf}—ïFö“i¥×ûd8 !â@ˆqü‘Æ;ƒ«1ÝÖë~óóåœe%„êö]:¥Š$ˆIáÇÀ¼œm;ÂݺwÔ(‡˜„Û{JçÚö²&If0‘G ø‘¼X1¹{ÎøÚu@ ãt§€"‰fÚíc” Øîº`ÒtæSÂÃ9·è`ÂÕ|­óúëõ¶IÜ“:Fg©`aù€©w›z=Ë·ìàÑbº­×׬}ÇB‹ù©6áGW꯼èƒ\1zÆ¡-ÎÄœC£ßcŽêlÉy±xo\¥„ä%¶~•%/Šr=’ŒM®Â²®ày!;oˆž&êðꊾ ‘⣪„‰ÞÛÆáñb¤’8\n‹¸ˆ˜Ñ·M´„RÏÉù6šR×ÿ^ºDöü~Ï~}{ýò6°ÑÞ>Õõ³hiöwØÖžàânîŽúfÆâ0–Ñz!9›cÄ ˆ³òÐâÕ˳<¨|9”#}":bº­WÞ.nñÉí dòlßEœaëBµ®`JsËwø¨+®âÕuœÕ³þ®‹¯ùÑÜ]²þòÇï~ýò÷^2ˆƒHy*YÊà4  8òV:¸Sóë—¿þºÝ%#•û'èí+J¢‡vÔS.µiƒï‹¸æ÷žDD!ñ9-íÅ-_ÐùÔð*ÀÀ®ÜÚG Ojú›ß_ÿðÛ·»~=1Ù»J­q™³‡é°•Dr!Sðßýþîoÿù¥`e‹cwÂEHa–üÞ»Õ?{ýïŒò]ž^ (ÊO0g@JSFKtzlŬχS&,Vß®O/YŸQ°þ™„µsL¥œs™8n®yFÎqéülñ¢¢o€Ÿ“$îF2ü…ß÷î»§Éí±(·}ý9p>KiCÉ²Ü ’uÏš©Âµ©=¾ú.x~Ñzçñ–wæ¯ÀðòU+ɺ‰ÇÉŠ;//öü-ËÞ^²µ`ºeðŽáe †Á¨HH~ëÛÑóҌߕ»4Ÿ["˜›´3OáÛFµ¤Î.Ë3SØ¿—9×ÒÁÝ÷‰V;ÈÂ$-Àé|¤éÂB6¶¶ óbI@wÏÌÑÁsŸÏ[ò}™¿džgQA0ƺ¹äõàbï|T¯ãÀú¨¾Uñ¼ÙñÀãÓxÄG‡1Wac«™ù¼((Ú骫îÈ÷\üí¢@Ò/É@ŠèL!ðHÝü›·dæ&#~Q¼úr߰ݳxSWÚz ÷.Ñv–…!ò©HnOÙ¶[®*ºËhÙË ÁÕÅ…óË'Ø>`s×ód8¿xk¬äb#-« Ù –UO׃¼)—49hàâ Ì\·tôc/ßï¦ da¦yö9¢¾%IÈ’aç6Llœöë}e›_|ý^|®ÉêlÄ4œâ–”H®YþPŽœ[Ë7åÏgÿr>è™òG:xùM@,Ï=H€Ñ$›x¶âý„…ô;Éœå›ùù/¿ü—¿ùåËl@—¦>·åoÿç鋵×ßžëñ;ô—Q`æ|ûsh׿þüÃO¿ûúó_~úþö§úá×/_üAþÏïâíϾ=œ×?øþ»_þ廯_EëCù±;‚oùÝ×ÿþõ»ïøòÓ‡ȳåïŸ?yå÷w.¡ò€†îÿŽ{ø;ÿ|ý¶ÿã§~•å/¿|ùúOØ—ÿç§ÿñË—»¿Wµ}ˆ|¼ßùýÇßùÏ¿üúóŸ¿ý‹Ë¿ÁŸÉß¼÷`¼ûÄñÕó~þñ篿ûÛÿößþ¯ÿÃNÿÖÏüã/_ªÊÜî“g×¹Oöš×ù¯ÿµqwwÿüÛér›»Jó›‡^¼{$•“Û£äÛß=/Üõ·‘²âé{zÇ.ÝDîö:_¿g7òÒÍ>{ ê£ÜIßn¸õ7ë·»0ä»wŒz×q³Þ]§L®óò»¥ÄÆp¿²Bbý‹‰¤ÄV*ìã¿G‰˜¤~Iúbžì˜ï&±±ÜýÀ›×ÙVbïêœÝÈ´ì]ô7‡½ÛïÐLBNö ~VÞôO Ú ÑäZˆ—œ*k¸ñISOLþê} AØÍdv¹×’hÉÄýµUᨪ<4`Ŷĉ¥bÝÇÝ!ÿÀÁߺÚÚí„%϶µÓuìS­‹v¸z_a”Ôs䇇äˆÓóˈ£Ët¬Ãùú îöÈšýc×½ÏäOKmŽ“£z§ ¼BÉ©=YqÝvg DG”CˆÝ®[A.&G4‘;R y`gÅuÛE>ÚkëJÑÈÃc§¦Äd9/íŸn+Œ”yßÈsè γ‘ÈJënSVV÷3@NÇ¥W«b%ukCMýñÙšPýƒƒ ç Ÿ@µ në-홃JéŽ ½pU ÀžIŽpÊÏðÉ·ña•Ò­yÃí&ŠjC(ÝÝUµ^+e"‰)‹”¤CE‹¨‡×å¦Ivjf%G¥ßlD¼­JÅ{yÞ,!¥àç™GÅέ³¹Ÿ¡pÖ_zµV07?a<4´Ç;“åç$¿" ¨÷\q[=lÇt[.µÇö+’Ûï‡ä^TOQžDtm29yÑIž¢¹C=Ä!4îËÆW•áo+M1¹8c\†. ºÝ‹ „É) ,'ôz¦M9³ÒµZ^:$iÀT†˜9ܾí]9ÜEïé»üjM¬nÕ…²¥?ò/MàÂÈÇ$k¥Ø;¡¾¥(ªA]ìmX6>ÊáÞÉk­¹S'?ÑÉÓ¥»?KÁ¯C¸÷ ï q »[£Ë&ÆR&R¤êôYä²<ð3ËŒWרczj™QB6>pÞ’zÓÚÓ“w'y$ku“yÎxöñuþö×^­Š•¾]žo–³2Ë· Íb2™&Þ¬êº`4åµ>Ž z»=z²‡&F‹ýÏtÊ…LpRbèàí0 YÔƒƒÝæþÄ*€ ÿÖIb…Ýve .Vêö‚ëð«ë‚+‚-ì¦þ“6ŽÄœ´ˆ$]Ï:‚³Æ•Ùv~¥n“ö=Apu^~µ4Vìvê)¢K‘ïî}rŸ`üéxiTƒº-¸´G/Ðm{p-´å'Ñ)Wm¦¶—йw%%v9¸Ý½¯ê±J S RsæZ ]hÛi‘”ø¢6&)¦eSmL¯IKg›k£“-XIR8Ï@ÛÎícè+lûF¶ãú«ÅñÂÚÖ'KÚJ$V‰Õ(ÜÁò?~‚ÌQ êcÉùÌ:jûXu¤ÄRÉÃy’”׳ÊQô…³½ï¦/Æ1íLâË52¬àʤòLRuØœò@sÞ Ù~C#~8Álj•PJNGE8½ÅHLâ–ÙÈ|elÛöatelûέFõò«Å±2¶³zÔnˆTTÞ¿8vRÝ÷ªô¶]:JP·ËÝ×|qUÈv8Vñfç,áI~’žå¦B¶ßjÔCƒØîîeIÞÉTâtô)`Ð@Fbl—þ’Zîvl¡òäd ‹Ö—EfëÖ=:p+ªÛ}ѱT·eN¸¯ƒÓÍ}þ ØV (û.Þ!‹Awæm—˱ ax’›¤÷ hÛSi%¨Ûzƒ6ý ´vÞ϶ÿ]£þö;ô[Z8cžÈ‚¶B¡½ÙXÉÚ´/;¶#È!`m^r÷®ÿi†iõ\ÚdrÞNaÐJëx4VÛ.aÀ^YÕ9ˆ.p¤<õ,g-y;‡Û@*³Û³Ç)sàTýI‹q‘¤ZóÖÃ4|æÈª6+Ž\€j[}£±ïòë{ºÕÖzúœ|‹£x6l#ü½^&¨‹]AÝÖ›Ÿ µ÷9ié”sÆçì¤D•ˆKIÊ Ljï·ÅØâœ¶››/ª‡‡ªÃSxRkФ CáˆÀiwk"p .r™îo#Ùãf‰b[“°¿Wœ÷ÈÕäWLs0)•ÊöjÞÚÉU¯¶Í/ß!‰)¨õsK}ª ­ Œ0Ð5H[ñ®ê¶^¹óÚä/À´iŸú¹¥8žÂUq’q)ÒD0íãE=Æ!0íٹ˫êö O·ßÑKÞÚÒ•¤½„oxeMÅ]qªˆpu•Û}KàWC’< ­U’Bô&ÍzA*E;4w+DÛöê¡rñ9¬©'íeí±(áK™³vþX†öú n+–õ6Û*CÛítÚÒR›³OÁXy(ó‰-W¹QÀ6 hïbõ^”C8Ú©[Ï!Ã-˜§¹bö`Æ ]ÔÂ,ô«KÂv‘Èj˜ì(âé YDŸ“¯Å+Ù¼$‹@h“¯w|ŽÏˆ 믽^Ð~‚kX”Xõg`ß)MTƒº­WËÞÏÞgæ¯%5u„3áX "&¯dˆp«µmñ½ÔP q6{¡»ïeáp†=1Mò©’`_âÀ#–JÍî–CÆKÊ%;98*ÐHKå9 %›ì‘¨eIÔxÁPÌì¢èaL“^öͮޡˆ‘Ïô »¨>œ-p1صËàá9÷ êf5¨ë‚IöïÇ>\ξŒkáÝÄ} QÛJ.;({»¥ˆjCpÙKä×ÔÃeœÄ>ÀS“”¡¸s••—PÙ/­JAž7=5J.˜Äy±mcM¤àLñð(ù•¼·YÙš&æç ìŽkw(b–âC7m¨O¸³Ø#yóºÒ{ȳ¥$ªAÝVÌh[o~ eÊ:DáQ]KÒ,?RoªŠÅŸïìãE5Æ!¬ìÞ}7ÅP‹æ©(Æb±¹›RvéÎ¥ÞCá§çFî‘8t–êáZ¼‚:îŠó˜mlw(VL6«^ü}×^¯Š d§®3çøV¦J¤¦$Ûig¶­**A]W ¸£ò¤ˆ/)вÚÚT Ìä¹dsÓZñŠÉÞÏE¬/Æ!”l^¢¥¾"‘aòôˆEªOosè5_Ùq> ýêÁ‘”œ|œ²ÐÿÏÞÛöÊq#YÂŘƠ»,šdðÕÞmà™Åî~<û4¶ÜÖŒ, ²<ãž_¿q˜UWŪdT%«2yÙÛ@ûê¾1˜IF0"Î1 íÑO£œXÙÐ’ç Q \çÈnÇhÈ ;ÇîÅ$—7+^t9’FëHÌJëü Q4ê4_wЂr9ä±7Ç^„âe«³v–Cÿ¬H[DlÇÞ?ç,Û8D›º qÈ«˜cªüD¨$ZÏ“:+{ nÿ×0¨çP3èFÐêzÿ<1¡ú%9C›'òé’õ¢*vÁ„$SÒw¾Á^d%KÚ%/.²çYh±š½ôñ˜(uš°=,2+áÛ'e£vðüëûw?¼mÏ“ŽߟP¨Zý‹B?ñ˜ ™2º¶y Ÿë œoÌ—ñæ}¨ËÇå>\Úugôžü¡â-?m¼ŠÏý´éê¯þ^3Åÿ½þçç‹o¾øþË“|ûû§Ÿ¿Øî·ÞüÂÓùö翼ýöÇýåÛ÷ÿíÍûwÿùV}úð7áWÿñÓ;€€ôçÿþò3§W}õ4/-¼œA ©ëùÛêÙÓYãÓËÅWæ3š–Þú΋LW¿ÙGæŠjÞÁ¾=˜»¦gü,=K Ë&,/²xpc&g]ÌÕéjbåëvaz¶¼©l®gÂFþ0KsŒÖTj{¾@S첦ž£ÉYÚÇPn*âÁ×s\úÖ×Ú0gÑ?>Ë;:Œ 䜇N¶¶Ü>žÁ]þŸ·‰?5h…J~ò™cUí2{Á&¡5\“iûüþO€ö›÷/Š)†ƒþó…Ùõ)A>0ü¿ØIÒ3_Ão• ¡RÉL&CAälOáoá7êáõ•b<üÓÃüоÓÿøó¿üúé͇ëgþñ×CùœŸíç_Þ¼ÿ¾|åßß|~÷æÃ—êkÿ1ÿÍùøþÇï¿öùí—~®~èWÆÙïâ§ßçýôæ—wïÿþÝÿéóo¿þüÍ_øüîÓ—oþúåÇ?~8!ëaþµOox÷Ó»Þ|y÷ñÃõÏóÏo|÷Û/<úо|Ôëôú9Ÿ)úÈÏŸé7ß¼ÊîÝÅú,)aÒY È·xÜÍ“ÝUYÜçö¨G|’Ó©‡ìø/J¤ n®9vÅ5ã¸Æùðó»T;Œ"®–ˆãŽæ~…ðq)üTEˆg´ó*éÅÛ’³Õ!iÒoÃ!Ën~"¦¢ñ}ºµ<ü†)}VYùÙ 8rªIbGÄÁ™<°5¥¨¯Äëˆø~&Y£‚O¦*²q‘·Í3‹l$*WhB¢àWGP7úEiJû¦H°„~&Ùöðë£bh°Ä.ê›TªüÙIS!„ò^3˜hÔqÆWÍ—STXÂΊÒ­+-q:8¡A¥è°lÙÊÜgä–ÐÏ…@Úák |HuW^º/¼› äáͨæÅÁ¢Ï¼Ùw  ýàh™µAeç.î‹Kns<%¹A¤søÕèX´X’ØXÝäàŠžíÐð4-9h»¿õѨӌ³DÀQôXìÎÎ#9­MSÐ"è1· „ÓÔŽ}6CGÑÈ!z,Ôï;òrQŒï¦/ÑÈ;TËtˆ$Kî'ËEÙMöÙWèèA:o‰vP!`|R|æ@@/B* 5üë7æÂLÚ\ßÉT¡óÓ†_޳2K N¶QÙä4{² ²ì4ä©è(uš1Ó&:y-¸f[ ãUB^Ó“UžˆÚ|E%ìþè(9DŸe¡ï^9v§Rôþ¢‘Ï"[éæš‹B˾ãÁø ÁˆºË9d(·Û9~GRÞ[ŽêÚ=)-‚¸iÑhñrÿJ×è«Á±H´Ñ’íìsè(æ å5„ &gku¹SllÓÝTÑ3…‹Æ†)£OBR¦¶HÚ ›Iý‰FŽ‘lY¢»_í/â–®ÊÉ0ö²~àÕcÑl¡þèÒ¸R­çÅN‚ÎÁí\ç@;% —•s—ÅŽE²%´ ˜d3ÿÀó‡ïG2UQÄI½ŒŽ7°2(Ð’M§ù‚Ú^VmÙŲrÐ?9âCßXjß<Ù–¼a£@§•Ct[B?‰ŽQ…”m~‚®8ƒ„kè¼âÒÕãÝŒº¨k´.WàÍK¼}šFt»C9)Ÿ<*F¨´ã]˜9‚BÑ Hê~})8¤[ú” NÁÉ‹ãã+Ðn‘l:ÍwF¿æópØsû²‹¡°„BœøhGÍ…”)â-z4J&oqý,´Ðç£4×å€P åhc¨T÷Eñ©s^P`@\QÏËzÅØ¸»ûiŠ—¯ îöÒ5)ú-Iàƒ~K’#ê¾á;p1 €´Òec“õÕåsD; NÛdí+ Ó:M!©±…ÝÅqG$Ÿx“ç .’ö6F__íæ6J6ÑpqgØZá èxÑ?hÙ“ y¨Ó˜êöæµÎ°¦kpä‰r˜En§Ñ{D'Ù11é²Ì¸h¹èö•Vs‘=µÎá;À1Ûª4dÑ!?qÂ&6$‘r)ïSwuš±+!ië‰@ÎÅî¬^pàmª\ W#e ®.r.[¶WwZ9DÎÅ]÷’Ü‹#!ZÓeŒ‡J˜²'ûÝÇÞ ´i_f™€Û³Ž9m?D_(PÓ"BYáfË^Ô±>møõ e'¦Í[`dy“X³ µ‡Ú™W¢Q§ÛÒ^Ñ|"¤+ó}¯°|#E7åÕ¶œŠZ(¼H¾à•hå‘{]~÷õá&.ØŠ¦6±™bJS ‘—® À¼b´©¯»Ë&²c¹Ãµc'\¸À.\ÖiQæ%JNŠ U÷´á;ð:/]ª>z>€#®ø¿þê+P5:ÎØëréÝ|">‰•2›à#±çËa=™)R^éîj/fDZF¶rˆÜ‹í÷ ÑNáØc¬8(|2v';Ôƒ õ \9/ˆ¾‘6®¾~tNEï⬵ ÝÁ.mˇ¾vQ ù"©-Eן–‘†ïÀÇx‹,¨EPUñ)–1Ç*¼i_>ŠFfœÄÄŒ-Z¶;˾q׬N"#‡è¾ô«H\ˆˆ¯õ:BGÍÛ‘Š©Tºü»çå+ÑuªÑæy =<Ñ1¼eRÖÇEé/ÈsBüÅtF×âðëÑê/F¬wl‘;²Ù\ÆÙ׀ނQǬ>Aëò/{££!Þj‰œŸ‚æ/›%µƒP7éïWÔ#Z9Dæ U‹–Št#&+v^ìH½@ˆÀ„ë. »çÅáe4¦¾}tà ‰:î ˆµÁ+Ùc­Ù WÞ#T`\›í`ÖéM^KÃwàcª]‘4 Ñ#Ml´Òqyzÿªɨӌx5\´`6b0k!O)ÏÌ9O ½²! fE FâŸÜ E‡hÁ<Áð‰'c}¸`èIŠØáyó¦Ôï;6Ït!› ;”Öî åØwõ”#4ï³"õ`¤Ë-p/É„³Ã¯ÇÆ¢Ó…É“âßÎ ÷M«¯@F4ê4cžoÓ±?jÂh¡åù¢09)c2M²)á¿cM˜óÖÿ' #Ì`kQ[½ˆ•/÷‘Yí# sž~Þuz» ÜóÓïûw•†ÑϘ泵alö*牡_£Ìu¥4 ¯Ñ{ÄaÎ}éKuHÙ³Óê÷¹ÌØ„sjü­q˜ó Á£‘ÿEÕa®Ôqac£­W‡9¯\”‡YXmXe1:“ f£caБCá` ŠWäeŠ™¿ã¢+Ñ%S°ì€ •"c‡Ã(6P`ß…O w]݈k¤¨íÅ—'Z^ŒÓ‡Øx¹½Øé±JÖŸƒá¢¥f2³ó÷Õ¬T¶–n×ó! IÂÙáuZ|íI-@ÇÊÆ1}vi·E´ôð01âÝ× D•´“ÔtnÏ-9¯Üô\ †èÒã.=Þ½v-¢|X˜€Å‘2ä&Ž8pˆ»²tØtšohtÍõÙQmísC²â(ÉòIê”K‰®núb¡îk+¹@Lä†|JÏàkÞÌbTe4.Éò!¢(æË{2B[›ëôœ!Ï|òÝŽ-W‰‹ª”ñ#ú[urçzÝÍ¿^å)ð\*”ZR£ ”4GÛµmÎ_^€öjþêļü½ã÷ûjUà³8ÎÁ†âw“™tôMÿ|§#yþNc´q²š O>_íb—ÂÖÆiX¬X6ÈðÆ³žÒä°z´¹z•Ø"’RÚúMrkÈyU«‡ÌPö¶1ð“²# ƒïÛ$aÅ«NŒëÉû¸‹ï+WÆé¨-w£'7ÞBAÜYm üÈ"г# Žkëm‡Ø(E‡‘"ûÏ9øUUñ¼…d íëºèŽÎu„w‹0/ŽeSÒg·Be^Áñ !>4¯œ»æ{‡ù¦ÚÁÉŸÉcfÿÓ8Ä´™!ÑxBÜ¿cgIM_Âe¶N^jÍ 4ϧÌ^%›1‹e.ER ¢]d´ž;úÃaE®M 1üK Jînˆùš Z.œ]?àËŸ¤CnSÑUo&ÁëŽ:Á¼ü .Fc8dÐï¸U|GwKÌxS±Úõ6ѪM‹º\0Þœ=ŸÅÄvàx'Qô½”YÅT©ѪM M¢÷NÌד|°'þâ+ᖙϷ†° }0~:˜ÄÞr(¶ä¨ìµÞX9CH¨eæš›¬¿ïÏ×ve–öz¯|µ„#ö¤øh™/s£Î;ÒpôØôõÉí2Ü¢T»U§y uCtb³;‹Ä¡¬,T«·eü]oãÚ 1† B6T5Ó$“TÖ>ä(*BµËZA÷Í‹°ê£«ÊûcÖठÏô5Ø ‚œÑÆlHñŸ¹DÆ¢SkÛ=BE§ö¼PïY£¯Æ"SnñZ.ƒÄ+ ?ŸYÍGðž-B]Ffœ¥ Ü"S›·b\†MÊsèN»¹Ê'mÛ¤¿E¦vËø>#‡ÈÔê« ø»!}†ÙÖý“ÀKvG6‘ÚGœádyûðÙUM‹’2ÙëgÒ¡·°)ee³.ý‹üu{Õ>YDj›ÀX$jM70 ƒ¯FÆ"Q{#?×tÏrRÁã6Ž;jÝ}JÏõ£N3öÒ©U$jãvJŒ‹ ãxŸ&ò!M™Ã‰²F­Ý’|£ÏÊ1"µ¦Eþ•Iµ–+2!Ñ’X_Djõ5-ݽó²9¨=Éj^[ºÈBþ\t´Ä,Á9vNæìÆ¢H­ hUDjt7Ø9újx,"µòr‰4®ŸØaC2©àö¬€ï2ê8c;s~5žHªÍûú!ð‰§ùM‚Æ™”‘ZË‹Nmrt[£läZ¯*î¾–ƒÀ;d;ÏAÄèˆÔDxßX„j£éž–ÕR®©-v¸±Ûc£É–£ 4s¨¶Ùr'}±~mI•¶×· bÚ¤sðÕÐXdj¥÷&Ùà9ÁŽdùË;KE¬7ê8_‚_ØÆ"R»¯×Èžêm‡ª|ä3¢ ]“E¢6l«ßÝaä‰Úe®»ð]ÖÉUi˜ÄxúŠè‰ÚÊß»ç‰VþÁZ—\£}‚ò3å^›fhJTj°,‡ñל‰E¡v¹Âêô}¹þ·sðÕ¸XôiåÞö&!£u¯¦çÐ>ì(ÑeÔiƼöšW³<ífâ´Ë qK®­cÐá“Îè60ÎÚ´Û1µu™8F˜Ö<‚‹Žqц \´ŒÖDZ‹‹ÚbwÂbfXL5=§æ©¢lcTD\`ŠÊú+õœ£(­¨ m†¾ì´8þj`œ5i»r07ÖºØAN…´'Q—Q/Ž…Ë ñDŠ"ífz´Ë51pç¥}é&O&Rû¢±ÒJnV¸#9D‘V÷Ccð•ìU ²_°ÄÌNAÚ|Þë¿v^†½s^öЉù¤Yó4•¡tÆ¥ÑÛb(iFéxÙ€YDi)IʧŠš"Éoßø«Á±ÈÒvf¨qÍÃG’”Í;ËÒ®7ê4cö8QLCbþw“u ¼ÕLDS¯ŽŠÃ¡fYã¬J›·U¥í0rˆ*í#Å;EaÌÙÊqÌÎVØ‘ðUÚô»çåÁC¤mPgéz²ÛÔ&BãÑ&¡&^1 Ï²´²(­&™Ã²oøp,ur7ŠÅ•2I>|æ]TŽÿÿ€£dÔiÆ$ðÍ´n;Koµ?áEþ0n‚ÎràM“ç€U‡²,Kë6Ç.‡ˆÒºkëdü akÃ@ÏþT}z£;6#K¾‹&íÂê½Ó²ÐGñu%»‹–b›ŸÉÐæ»Þá¸÷RæÅ`ãt kšxß 1ÂäEIÚ ©BC’VæÔí}É74i£è7V[å«!ÆhÃþ{ñÐ8¸w.íË^¹Ú¦Ó|9&•Z‹Š(­ ght‰”Î'Ãï_» -UZ³-{åj‡¨ÒÆEbß{„PðÓ*ò„¦€Nq$ïy¥õÝ€O…”í:ŸÛ¨(=/ nûÛ(´6ðÙ¬#×ÀÈ;OT= ¦?}ø\ T °ÜA \q1£ÉÒ‘r¡—Bó™¸(Ùtšï\QÛ|‘ª«Ž=P‘cx¼®ˆ:g};š.‚´YRÌÝ E#‡(ÒúEEÚ{Äæ¬Bv®º’ Þ¡žÁ”Ë)‚´Ë¬¾wÍË[ÔVéÊeŽ€nŒ´a¬ºh×U;E6‘°e}0·H};†ï@ÆŒ¹‚´Ë(d®/ÜÀ&KAýS‘Q°é4_¡œ±ˆÑºí¤Ä– çÀž‹Ê1j?eUfì€Z´$ðPm„‹7Œ"E{¶@ÖáÇÁ¢Â#%S'r ½$¥‘#”hÓ¢~ä}óâ5ÏÎa¨<Ƙ¢²õ3uÄÈ„®ôÒŠˆÚ†+2´AßС•Å_û†_‹¡Mâ%cƒ¢†$©ì¹gøã=FѦÓ|mM]{ùS|¶uÁ—¼b§›&“¢ÇUßµ8·]øl0v$šžÊŠ‹n*êÚa[D~gaÅÕ6çëuƒUõô}hJcý’Ĭ•6_ÒwHp¯½“­^ÄŠr"•"Êa\éOèŒæŸZ¢#Øtš/ŸY¦]v_fÍ6 ÄñÆ«˜­ ¬ZÆÛm/E_v»¦—. ‡¨Ëöf¡AÁ”’Ѽ:IñAšG&[@œÔ‹‡ä‘iáóªšTÐÊ壘s´ƒ>{#Q£]4_m;èÊ ÒEWÖu:ŠÒèë±ÈÊv$Z YýHf3x»?K&&»,{€ïž¸»÷fó`Fóf*l6„&žÈ»GIFaïý}Ä T,\‰ îd/fd{ôÌÞ}íûÞO¡Æþ»§š¢–wÅË~iCNEçq¹o²>WWú`ï¶Â•þ,¤&æô ¿#ÝJ@·i½<)“Z¬U(¥|].’QÇ;žï þn½7uDŽŠcŽûƒãMë¢@6V¼ýaËÛÅ>3‡px?@uíaïר G|ÌŠcŒ00](¼œÆ»ù#bPIGªpŸ5åƒõ;¨äì •b8l‹P‰‹Þ¡…Ã;‰Ákçð«ñ±x{±T¨ÍÕÀñ<Øø³d”³ µ$£N3Æê“I¼·*ÑiKâA‹]ÊʰOÓ.^,$Þ´aQwŸ‘CH¼`ZpªlCEZèmPц‘Dµ…Æûv•×u£ËIÅ”õöúV;j³v¼ÿ¬á öŠò¯°x %r…Ç;Þ”ë~58o+¦ÇÛ8ä8„Å-¨³Í«àkštš­/ªñ4 ‡wØ(óÒÂpoç}š"‘;Aá=€¤V´qwîw®à[™È^A•¢ðj˜¨bñûÌË )ÝÍßÍþ|"§Cå4ëÅœwªê8.žŒup_ý5G´Á¥U³‚±ðwS/.JïÆÅBà-Ct „@e¤£/†@›Ë-È1¢QÇ[Üx¸6: oÚYû…—Œ"m4h`ÁDo¬•9¼Gh¿ÈFŽáð®”Ö^Ï:Sº`u%£ˆhdy÷LâÝO®š—UÙ„{(‡çµ½HIÆÅB'Ú,Rx§¶ÂH¡ðÎ"ClÏØ«±±0x;ñî³}·§Ñ,«!@E¤¬â‚QÇÓ¬:Ûx"…Ã;ìLÉH ::èHSðÒ9ÒíïÂâíÔ²‘CX¼©­…| ð< Î|žf¯Ô…ÅÛ÷{Ä&Cñ6ÛªLÓ‡ ˆ#Ù”_,cS$ˆö™„0ž.7`añvíëÆÂâ}£œ±oøÕèXx¼c7f­.Íw&ƒ­·~è™è(ušq.»ªñDf"ï½GBíqà1òð‘§oçcf.o?@å@¶r ·~ ÑòmkŽ.þE’ª…n ·y$%cæ³O¾Æþàˆv¸u´`us2A)ªä®nýgNoצ¸šI½}'5£hÀj”œI½£ˆØMD2ˆ¤ "ye“Ù‘O¢Ë¨—)ǃÐÓ^h½ër‘]"ìdÊ}˜Ÿüà"|Ö¶p&&ß=À–lBìû5Sˆ×GÔú"ií‚Ê–9ÎÄÞý UÑÈû§v"K§H0KžÛ³ƒkÖ&‹¼ˆ3Êù«øzæõnßoZïÜ™³‡_ …Ö[¦·hG³µU1ÀTØKÆ££hÔiÆ^Òv,¼Þ[î4µù¬Q×tžbH…Q¦õq÷(Ú8„Õ{¡úîzòÊ{§ë6j Â|g^<Voߟ±öféZZ5pØi\´Ûc£ÉÑ(c¡ûNÅ{M] U›1œ½,©{ÚðØXhv»ê­Aî]¶¤“ÒºW±ë©Ø(uš1‰Å¨`õÅ×­^¼Äo[šˆãÖLh§e ©÷ÆÑÄ!œÞ¹›ÉðP°ÂÔr6j>JÉÌYNoûo†åWCÎW¹xK¸Ž éiÀ(t2s`a¼KðPp·ˆ£g§°¹¸ 5Zý‚Òðë ÁÁéEÖÁ^›¤“bÿ@brv=ÒHeö²‹?•L°é4__¸ušÏ#ÒÞ#ˆ¢æànB0¤‘нÁê½a:¦ËÆ!¤Þ Ùê;Ä9³£TÅÒ¼iQààF“z÷³4¬ 9kS—óTDf ŒžŒ‹ìn—FfPHƒ õêšqæô–6_Ö7¤W:‡ïÀÅlo8¯-–›Uð¥³ÞúÌò<E›Nóu¸¤R²µJVò*²¹#áÔÞºŸ±ý=6ßH–ìRT‰tÞAó !U§‹¼iFþ•öôÌí-ø öN½~£4üz|··¯´ŒïF#ÇÑ«fg:ÏÚªlzYÆŸˆ¢M§[Q@ìÞ;s“¬VÁf‡$;)(¶;d »÷áÑÊ!üÞ¡E EåŽ5md²µ#çå@vÐ-è`àAÜXRfè0³O¹=:ò3E‚ËCzÀžÀ%Žo)ªË·í½o”†ï@G—ªv¿Ê@boÝ$[T¼ÊݵDOÄFѦã|½–.j¹]i¾eÕ†¬Ÿ|æà51`ú¶Uqênª0¢™CؾDšï—O!ÆzW³}{ߤt^ 8„í;vë8œTÆð+«® 8¬ÒZ1›£#ÿWñÁ ç }þª†n¦û¾ÁöízckiøtŒ¡ŠOîF¢à²„V=²ãS1’I§ÙÎþFóid]ùÑû`#Ø8Sèh0!õ;…ï{D\-9„ðû¿)él´¡9ª6ndqc!ü~ñÙ3àíCžjdŒìG¿Ã­cûô€&«xé\vÈÆo+n üö½ÚÓÒð둱~÷ø{Å%0<åè>ö?›Žó5Zb(|ßFˆX7ÀÆÈïÚæì&_¸Tr²Ô…î{f[ÑÄ!dß±ª€[{ßèAnËk¬BÇ»ihKu¡ûŽýרèí‰.éª0‰ãk0è\FdÄùð$°>d$¼®i¥#Цµð»; –†ïÆdop·Je"ê¢GZÈC5Dgüm:Í™@áyd+ÖÇlQ¾t¡ž St¤¼M7¿óþÒÓ¢‰C¿ûa„M¨®9k|R‘ÑcdLK¦ûž1— Ö‡ –ß›u{( ò~ÓDEø™CW·Œ ý¦‚û­Å]h¿{V%Öâ+z)=ÊÓP¤L”Áì½b‹¢M§ùÚÒlpmÇBUùTêîÉÆOå3 *ðÁb¨J7"úCÂe¿a‡*BMáîA2áÊËLø,²;ä0ˆÖ ù‰>hø-<ßÚIPçË©¨!^¢ù‹•¾.A=‡ªECù¥ÌkâÏçè`4‡ÎΟõ—|äGÍNÀ›¯½(eþgj÷/íÏ !?oÀßBΩà-]<€@Š7[|èÌ|åæ C6}W\á`›ù°u‰tt!FP5Ád壉(åíÉ?ÛaÓi¾|¸,»Ü}†T{ûÌËǬ!3QÊè¨MW·’ F÷‚¶ˆÄÓ7Ó1øšWs6dùôý›/oÿ” !‹×fŠÑ*oJ‰ve:!ÑÝ.SÂBýæËÛß¿%#6å ë0rÈ‘CW©Û“¹îñ/͇f»u¤’1 >qÒµÚ}Ó Fy“k¢Œ`ôãÒÕGï²6/+„Áz§ƒ‰Hvú“Áetåž—§}W_² ·W;ï;nn×VÛädŽvç¢AÙE´³úÁz£Îâ"YmUëÛ³a°ÖÚ)¡!Þ‘ئ„q{Á¢lä­Õ%-Á»à#!ÂÐU¡NÌG¦ØòR”V—t¨ïšUÌY¡²nŒ $I»g Â4p)PRš2¨ÿ"ǾtÅ­_tVc;ƒYtVo1Öv ¾g•Õ„µËTÚ.ˆý>¼÷%¬]oÔiÂù`Ú/Edu3ɃE¼I¼p­ &NIGebjû²G‰ÕMõ§;l¢°ª9¯ïÃäymè\U?GðÖ9o¶»…U·(%xß¼H_ ‰E^õFBã&Ï"U`¦{›nž{»Ø¶é8[\¦JÊŽ4‡Ù{"nF²sse²©„*ªû'\$‡ˆª.)£ÜÞóª0)×RÓÆ*C.Œ–TíŸz$ÌyéÝßçËÍñ3ë±€”M<æ;(EåÜÕ~Tb´"¨z«>­cðÕhXäToHM/#µsµ?˜ ƒœ ÉɨÓ|s›*b–Rµ×&pè@êâ³a¸1Э±mq–R•JŸ7ÃDÑÊ1Rª±?zöÞ«œõE” •IËè?vbq‰‚ñî‰YŸPç2YÓÓ¨t$x*Uª¸ÜCÿ]õßÎBª’œq’Y;_GÕn|DòΦ3©HaÇÞè.£^æÛîbÑPÝPjz9§¡‡>hPI6ð«'!]$T·d`ì3rˆ†ê‚nÔÝ v°œ'ªÓÑP¬·ðºFΫ–\E'¨LSå GÊBÙ#=‡¥Ãäø ut%ÓY4T›nc‘P•Jc:Ç^ E@5‰™ñvÈ é™˜€Ñ®P5¼`”Œ:ÍØò æ1+ö&E:Îò ÚM9ñ{÷VȹýÔýFÙÄ!ò©®=’Œñ Î9ƒlu!6Y,ùÔî${*´z¦–æóCYþÎÁt@B¹Ýs謨ûo絋‚ÓöʶY¼Ïëº ¢]W‹~î (ŒA³~oÒç¹5:‚Q§“ÀþÙÔÍ”^ðq4ùë¿Pké‚7yòP~ÌIP2(ª©›Š¦®7qˆjjZ$´.-:EÁY­¯Ås†æ¦©bÕÔ%Åû&¥=ÿ`ˆµ0`°Ðœ*ã¢c'ãeÓ¥‡¬ÓŒæÀ¬pÁZ>2M ªœF¤¢…dª»IEÛ1üúRnH¦ÞL=Û'_-1¦(4¢¤U>숈=6æ%-[çK/üžˆ@ÈÉ¥ 2Öµ{*g½T»­ôz‡¦êëÚ¾;ჷ/±pQÈ­“²üÅ¡²€$KÙ÷L jO>ê:©¢Q¾ÖÝ9| ÊeÙSã­Çøt9¹TA0ÈŒØCw b ÔMô!oøÊÞjVý”XO…Dɨӌ—ÉhŽß´%í"Þ¸”Nxc‘Ô‚n¤R7»Zoá¡Ô%É‚»€#RÁÃ*ºD~=EÆÌE&uI$õ®IÙ°€†$™À±Óh˜ì ’ ;"úZK "©$ùˆœ‰bºoøDÌМ‘ÜÕ&øØä>laY±Ï¾ckK—Q§Ï ½­'‘Ôm¨7Zxs°‘ã~—ì”ØzÆ!]$R% ¶­@Q6rˆD*-RXß!ÜeëÄÑ×h`„@jïÀÁ€­3®;[BÜ Ée>YJøê‘êY@FÈ£ :JFÎjt½!*•K¶à'†¬ŒEA GÌ«€DɦÓl!ÿÑæB)²¨û:‰Ä1[JI;p\ÔŸJªÑ"[ìfw‰¢‰C4QûÑdt;xwQáLPÇ;oû"‰Ú{`ЫèωˤØS$Ÿž©kÕºÍ <’†§–8ŽÐÙ]‘@UÐû+Ôr·´¢;ïD'‹V·/í´WÁe32Ù½†°Y2ê8_¯¬~§ï§Š kL4‘á;ž7ivmS.!†*)YoŠ¢C”PûÝ)ŸeÅÊ™‚솒³Ô%I«» õÚÖŒs!ƒáH/ÒÓ<-Äc2.¬<Ÿ Ò³ª$Jy~~d¸ ¾£ÞT³³NQ"W§‰(Ù›×O#~hçzSÂ=»hÁ{å]Ee:m_܃ã(öæ™…±×#"X‰ú*\ø¨µÒ¢8_©—Ûö¹U7m›N³yd–ŸÆQ´Bºžûõý»Þ¶'JÇïOT­üE*ð`#»,&²{‹,NHßþåø+Õ¦|oÞƒº|\îÁ¥wÆ/à bùì[§}wVµñuÏÕ_ýý|–wþÏÏßþ|ñý—Gùö÷O?9°áo?¼ù…çóíÏyûíÿúË·ï?þÛ›÷ïþó­úôáo¯þþã§wl\’þüß_~æô²¯祅—3( Üõü­Ö ‰ìõ%¾p&Æ|öÐ!«×°òÕ>2'£R ˆ£ÞÌ]ÓC÷0>haÙ„åUÏó’»Î|/øHW3+_· ó³åUU§Fþ0K“Œö\Ÿjß7hŠ]ÖÔs4Èåó8áë9°›õ ¯ç¸ô­¯å`Î0>aš²úäKÏqÀ ~à·eÖ½…¾´6DGi*ªÄ«ú)Y¯‚ d6ÊODj‹¿}~ÿ§?|~óã»7ïÿ7þóö×b8„?_˜]䃩¡êpælk³BAYum¥=$™ÎâOü1üfškà/,„wz˜ßÑwú¿Âþ—_?½ùpýÌ?~ør(Ÿó³ýüË›÷ß—¯üû›ÏïÞ|øR}í?æ¿ù/ßÿøýñ×>¿ýòÃÏÕýÊHû]üôûü¯ŸÞüòîýß¿ûã?}þíן¿ùëŸß}úòÍ_¿üøÇï'l=Ì¿öéíï~z÷Û/ï>~¸þùoþùíï~ûåGWÑ—‹…zõ˜ŽŸçô›o^ ýïÿ/hyHɸJó÷[<ìæáîøôߊÅ$8âpê$¼~úÊ"V±Á¦ É5Ë%ŽBé`7íHí0sˆ”FX"…;šûĤpYEªˆ‡çEJÓrÊOÚ´Û\¶:6@‘Çë„”·ÒQßZÑÛåŽûŒ²:ôUáõ½}½9bЮjEA¡P 8²¥(­˜næžCaŒ÷9WäR@@yó†eË1ŒJü)›ìõu¤VUÆNßrMMߨëcb(­ØQ‚%OÃE"ãâ‚hâî Ë¢QÇ »t æ‹)R+¹]ؼ .´61Ú‰((íshשï£lå­•nöÀƒÕ 8ª{ôØIc?Û§É“"¶b»é)ÖYåœõUµ!£­ò)§˜³C¿z¦)y£ùrûÍj+Ídr[9 ÔŸ5öj\,b+Z2¤AÔ©”¬ž%‰ …W‹’M§éfá¸*J+q›BÃ6Þ€c(ÆÉ¢˜žíw²ÖJ›Áv;Lm£µÒï-Ú’þɺër«kŠÖJ¿³h³ÂÈ…ÀmŽÊ›´=o¶–Ñ—¼™ …•¤•VšyËYg¥ÝF{5&Î2+=ä6%N "I¤ƒëµã© (uš°‡3ØxEe%µQgTôÜüÉ…ÉiÞ­6Q»Æ¦¨¬¸íºô:¢²â»É±ÝÝ”)T5)äúFrÜ•ßMðxwï[å•Éä–›ã"´.hу®V'sYjSDV$]“ók³§ ½g)¿ÝŒVÙe ccÑ" Ú÷šñÔZ°é8]Ë«N–W±û²Ãˆƒ}ˆÜÄG©ŠQûv™MÑWÑm7EÙÈ!+ù›ÅT¨>BU´ R~¢‚b‘XéÇzgIyê"—K[|Z-¶p¹‡ÛçěѸÎôú²»ˆ¬äfDÑX‰}²âà«a±ˆ¬ˆ¡| ‚l²Ð¼%;+%;íx&.ŠF'LBAvQYIûª ØÿC.#º‰¼V¦ lˆEg%ˆ¡e#‡h­¸…tܽ’"2.U¬Y¨âÜh©Óï)zËtÝvc¿7ã£'£böyNy¤À1›¿¾Õ/b+¡yU´Vú4œÅ±WƒbÑZé’âC±pzÖ#B ×+¸V:Í7råÛ³Ø íBsØ^Ì&vv³r! Þâ,¶’·+Êî´rŒØŠî·g\ôŠMªù²ŒÐ?vbñû'æAþRÍnÃ\¹C*:{8ì´¥à/{Yž=‹­ä&8Îj+.£4újtœÕV$qƒ6ùâCØ¢Lä]èµã¹ð(õ2áØf+R+~ï"B_‡V¶^HF©ÚŽ-¶ÓÈ!R+¹?i tÐDTA§uNAÞ- —h^>¨ÌPXC£‰Ê”zÈí3/ŲwÂû¯hÙ\5ŒÍR+Möú"µÒé5 C¯†Å¢´âºjtØCŠD¡žŸ{Ã(uš°¿!³"Àl‚Š9+Ÿ(OÎ'僒.Efeñ)ÑÂ!*+Ýòu“Óu®•ŽyÉ(ð‘‡N‹£Ìþ»kæ;Ó:‘ľÏõyDB ã±Ãý^#¯3WwûEf¥­ü†Ú8+Š ô݈d¡q=C>Ôˆu§~žš‰–Œ:M˜ÊJȬìÌ"p(°œ<ut7tVÌþ4`²C„V¨W’äg>˜ÊE< "“B¥I2DhåïV¢€¶ÞÚEä˜GEÊþy•ÜÍcr¨ )NÑ£7Ì_é8­•6Ï ”VútVÄ¡×rCgÅ÷±U[ŽÜƒ±Hzc{Bb—Q§ ÇCj·Cie_*°r÷o’qa²!¡ŠBŸrñ@û“=Ü0rˆÔJ76øö#EÝü”‚ÒügG+­ÄnP ˆtuÁ"¾È'é„` EEäpʼ÷´‹W=ZI‚ G0çWÅÏ»Cå¯ß?üôy]äÀY *þêxL:M˜ÁOŒ[ ”6áÆ{:ÂáJq&F0vL”"¶bÏrNkáƒqQ1Ua¦1A…dÏIM‡è­tÏ* ŠèøˆÉÓÒeÑ“E SÊ캪.‚+‹ÒÇog} Óǃ#ŽÞ‹Ð[‘ò,-²ŽAˆTAטÜ+`‘l:M—×]› Z+y›Êœ&âÌK¨-z!]ÔVÜv}òFQ[éÕ :\*&é>l2‡k­\7íÜ=/K³”ûe=—¶óN«ˆ –‹edºÚ|[iÌj+Yì„î{=&Bm%õ`"ºlTôÛ:˜WвU§)[)‚†âʾJ¥‡HVå edöÃ2‡XÖ;KPPkÊaiÞ€ œDPÌbt¿!(JFQ]±ÝÙç3‚çºU¾GM4ZwåL W±³ †‹qÑÓ1ÑÏñ+#0ï=kÃ’òJ»}¢H¯$©¤sðõ¨é•Eû²»%JÍ4™6äWŠ’QÇùšr[Ð|ÁâΙ–à,øï‚™¬!¸M²øŠoÛ·]EŽdãõ•þ|:2Çßx8b¨Ï4Z~¥?y”Ô£½`1`ñ~L4†Ã´Œü/2úú>±è¯´ÄŠþJîç“ï€ÄdE!˜fé‹çÞóÊš29¥£é%x|j=ŽdÔi¾î`eù•ogŒá`4NŽfLÄŠúŠÀ[±]=Žhäõ•Ð]ã9œAÇÊ£"oYF¦žÁ„Ô+´Åqg¹Õ¨IÉxÅߨ^…7hÙbžžHñÓ¼Úz`ÉíEð%)dí|=&‚±HKÙžfí‹W‘M _à3ÖXzÁ³hÔiÂöàZoæ¨ÁÒn~¾ Ÿq¤@š&‡¬‰Èéþåø;›H°,è…ü?–ýXFÉwì"Àbã˜Ùí*ÀGièì«ÀBÏòÙ,ì×âr”1j:”¥.øä¢‹»C¥­¿uTÖ¦3V<Á¹;'+ÿñL%]Ú÷_Uåê1E£ù=ò#]­¿âÎêžo °8I^íÁ>Õì3¥MØ{3Xeq:d“ûÎ ŠyIQòtKƒÅûm‰“{ì"³±L'óÍY¼u“¬½J:T÷ãŒ"*S™4,:t]5·bb¨±Êº*¥ˆ©œú™ì&13¼½4F̀ȸKÞ ›ýùHu–w÷’ÐFÖm"µEV‘Îñׇ?ElCÔý¨7̹% ávü"&)ØÞ@¬³qµÃªãœÒÖíºYqCÀ Mp2"¡UT~xë+¯ƒk_ É í1õÍ`R6sˆæÆB îÝh µìíÑ QûD›X‹ê†[d,¸obd]jü/ZæÖÐ3e70Åñ ¦ä3ˆ†üe"±Èn˜6HÝx“ìdýè«1²od±¥¶‰F(ñ¼¾ì”BP9‘Û—8´ÃªÓœ3ŸÒ‚@ð•”û.™lV†ßíd9ä‰d“—å7¶•òë1rˆþÆ2ñÉ0Io¨ÆGvAlr#U‰Š‡]¤U¾sb^+Kþ"Yš@ÃÓš·ÚåpëÂÿ?±Î?d—58ü ºÉ7ß1üj„,2¹Ï‹´Dü-b–cYeuNûÒˆvXuš3¿œC³àb–âØ¨­ >|¸£§(¹ dü튋"Å!¸BŠF‘∋Z>wÆ£OËÖZ>Œÿ*ñرP´8´?,ñˆÞ;3bçX×’–hùΔö€Hˆà,^D lå—^J‘ã°m²rD—:‡_ ‘E’#‹iM0‚ n€(0[‚¢Gýâlɨ㌭>˜ÜfÍ+ºao„Ìd_6¥¢yA”ó ax¬¶»Œ­¢Ì®›ºÖÜÙqÆKçIJWW6y`±n‘æHnIëúî™й‹Æ®¤²wOëì.}PÖQ‚p¸Q Y—œDEœ#¨‰‘Ežã¶òoÇø«1²èsDÛ’„K{M†`J‚0ÆŽe»}V'MºœQ‡RT:ÜÞ—‘F3…Dvâu‡m?²¨tØj;?R2rˆJ‡~ÄŸ£µ¢n[=Å£E©cYÀèÞ‰1DÆt!Õ=>žJGßÀ¨™ç“Ì”"¢{>p¥:œ¤”ãýÁ‘(“ÑiÀj,z¸Ôé#ÇpäñŽIɰ½)¾WR´ê4i€`“`Ví8O—î…’`ëàã¯ÔݪygÙ+˜¸%N fŽÑí0ñ§Ë8¯µ©/%#¸¼H²7+wä‡dè£j¬ÔàNY¤,y:V:´ª8ÑtÅ0Kw@º¨½Î„nÊwtX°,gùŽì¸T˜`3pI+Ü—uÒ¡>-«^fÞ „õ©\^îìT‚ei²l@²ˆ‡’¼i›8FÂ#?Ûo€vTû]d•·&¬‚†‡y$µ‰JÛª‰Au%18íºI`d ¼m,µ™—÷’EÅ#HzÚ”{˧¿!‹’‡é ¹5™[bÐf7n_-«Nsö%Tk>CO»q˜ £µnr|êlt›C HzH}ÛÕÿˆV‘õ0ÜL&g•IŒ”UŽ#ƒÀÎæ¢ÁEØãðO1*)ÖŠ%`Ò~‡Ü £”J¢Ý)(Cæ#s)pmÞ{i †¹Ãw`$™*Sº¦ÔÆpå)gR~ÏÆÙ›Nó¥.Æ›U£P÷n»æYoµ?!/ᛎä/rËQ,X>¬¬ïAjuÙ8Fßc‘ ´SôÀ)T­³pÛúüHB¢ðq}p÷ļ&~gµ@æ!™BIùÔþYŸ‚×áÔ¤™C ŒIPMhyŒS w_蟅ÄGÄ»‹Ê‡“ƒì¾ñ××Cç#‰—£Õv93Ä“AŸ“ÍSäh?hÞ¶»öЮ7ê4cŽO…âŸ"õaüÙ‘@@ši²>*ËNŒ@·bJMë¦bFÑúˆ´H¹r’Ø@ÇSëb 9É.¹¤€H2Ò©Ê/6Pyrφk#TÐaŽgËÊ[G×"H>—ªìæ ˆ±µÄwÒ9~B:È¢L-0½ 0)«ÀÅ+@HѨӌÅêÈ¢û‘âÞ‰¦YMÉ!dŸ½ˆÑW »!¤häåó@¸©]®îêŒÖ‹1#ùœ¡üužîœWâ-äªs k­. !")Ûmw)9D ä<ðY}Q‡öËÒAoPEçÜH‰a¨˜ëÖšûçu ¶ë|^.°ŸÅgJ 7Ü·l’²9ÑdÈþ[qY¤]pWAlèu¥ñ;ðÑ¥ê.kÅU_. ŒJ^Ó+ÀGѨãŒ={Nðî! "yg›à£G¾vÛ±’€\нa1dŸ‘C„A #Ñ $Á£¢3U•N±óõÀ¢ñ" B×Eã÷Ï‹±L­ â]¹lzÖü7ÍCQ‚¨7ZÒ‰ÒåµîÄGiøxŒŒ]îcÓªæ¿ÍžšÎ*ê°cd—Q§'v˜ï‘ߌ Õ÷ÈcTä±y8på)ÔÏE"dDþZ4rˆDˆ~À} .©à]­¦‘âÝ›GºÐ¡GP?PÖÜnžƒkìöɆ'ŽàBŒŒOlÏW;*!…ƯµÀ‹NHì ¯%Ö$”BŒÌÇÖ#Ðó{ƒXVs,Û›&z.@¶m:NÌpÞ›OÅ=»‡×`"áϬ!¥Ù¥É²XˆÛ°>¼ËÆ!b! µ÷—÷ðB Ö×¾£Ed¦ýÈÔ äB¹4pÑ(cj±yŽ©(PÌ;¤®$œÐŸ‘ɳɼ—–Cô¡-ëÁ›e‚Ⱦñ;À1Ù*’\‘alŽ!›²óʹÜËTùÔÜŒdÔiÆ ~Yz=w{Ûô¶ëfÀ–Pg§Hé 0á¿aGvŸ‘C„C‰­‘®ˆ¡Öb#ž<ÁÛôˆó‰yëC•ºÆ¹Æ;=íPû„cÑOÆàî"^KÌA;DòNÀØä¨·öQ=<‚dɈ$lÍ"öͲv…"åBê4ä©•=’Q§shjš¯çÈ3¾•g»ÉÙD4€A å›:4¹!,ãiÃäuŸ•C8ÆÙ‘îg‡46hÜÀT×t¨ùÁʉ+Ä Ëxz¤ÇÐf¯BÖ¡žöËÓÔ‰Û,¼\+“ X?Ù]•ØfÜ 0 –q¹è°søõ( –ñ$¢d³YüW즱{šçëh­:ÎÙÍõgRHÆÙ?Ù²‚ÀJëÑ=®ŒÖd’ñ!㢑C(ÆóºÆX>a½­Ka]¼%=šbÜ>ÐbÈ”W‰.ÐÿH ìw`? ` §`¦`!£¯0²Œ‡ƒ¨þ<±H¼oüÕ YhÆ}HrćJa²S1)FÚÑ—ì³ê4ç,a…f<íO드Ò(P d˜dšqÂ’‚•CxÆÃõÝ ,‰¼…|Més°E®`(Ed!ˆ¬ˆã,e¨¾f=øYaÂ>-—- T ŒÒÎM>]Wüg…i<Ý`ïÖ«‘†_ ’…iÜv’Ÿ%4=²û>ùþizäg’U§9û“Ûx&…i|«lv~\@ò=ù©´“›ÛéìB5n‡PDŠVág¯ÿ0ñp¹l•f@BfSGNÌ€Äô‚`½¥ ªq>Øy€|ÞÖét°Êë&ËTöñŠ3¦Pó6kÆs…kœ:=IqüÕ Y¸ÆcH‚¢Ò‡äS‘#öI_C¸-Zuœs)’M^ºÂ6¾UÖF’:HŠMD Í'A±¦û!ü’‘C¸ÆÍ#‡¤â%nT`=Í5þ¢#^s®¦=±:¿Ç§%n=c8ÈuSŠ'ùÒO)Tã <¿w8ÜHkw ¿! Ó¸ëCÈ`IØ…Ø~†½Ö3ѪãœKÏL ÑøV5ãmìᅯةG5'Úg9Ž”™ÆÝ7R´rÕ8=‚$Ž!2žk„£ýýÌ1øÑTãþ@HÖàÎ)$WḬ́oýì02Üx‘ã£Ô_ÉF®qö$›•ã…k\ΕtŽ¿%gªñ>Y/!:±nþh;KØŸ ’’Q§çÒ¶Ðx"3Ï8í-¡Íð?™áÇ <0mîÜ™g|ˆ‚¶læžñ…êñ50i&MUf;mÍþÃ@Or¦7zàÁQdœ¼¨ý4l­å?¾NêÌ8Å!G(B{ñŠmæZÜfžqßK)°(gšñØÇ2щ¢.%þŒœy þ¤hÕˤ¡xÒÌ­’ñ­(~„ ¯qCf&UÛÚFd—F$o$+Ç0Â#9 *_P‚JÉ MÞªñüȽ$¨8²­YtxùÝq0»ƒ Ct¨Ñnò j„îŠè§p“Ä£«MÕJö´áWÃdá—9+Û7¼OBb,š|ö †¼†ähÕiÎHÞ4‹É ×8s»§¸ 4E,:Y&¡±p3’ÉqKf!÷÷€–ÎQéš,Ò[Åè9%Á5î¯9ÞV$ïÉ*©ž˜uÊæœöÈpk‚†uš¢ *Z¯/ëL Ùx²v®Æ“Ú\:Çï@I2¹ñšd²AA–õyŠÞ)L¯físSÜ’U§9#­¯Š84hîÝsóQ‰—5š“2ÉÇvú¦PŽóÚ.îî4sëxF¦ôNînP‰F_i`l²…qp NÚq{ÈW¯÷ÏÌ'ecª‹Ê å¡ù‰aw»ošZ1†¥É[hwäëªåÂ;.•ƒvœÝÑì}U9xÇý!I7Íé'þóø`Lö½OmÜ–Œ:M9Jâk…wœ„ É&0‰lXÒ'çɉ ß4âî2ríø‚žöýôa ì´Õ !¸Kz(Bz¿T´‚-)gB]+iøÕ¥hüÄh–T¦hÙ“Óè!·WÝÁ¦dÚÄh ïçE†ïÀÇ@UÞ ² 4‡µìÑz­8öz ¼¢Q§Cv!¬ÇeÊûàc„ÞNÂ};jsj¾m œ'7€ÚB´rí8=$‰aþ‚v¤Ýʧ”Fòê‚w|A&ü~êTû×¼ãìWåzŸ¦ë% ê4ᢠu¼&¶N©tÖ6×w® EŸ4x8fðZäÖÈ8É:¤)D^P±›ýü™è(uš²+ ³&éØ*íMÀ1gAR‹†sÅ›MâŒÔŠ 8Ç%#‡PŽë~Æqk z¶ò±È¨l4…ÑŒãº_iÂ2æC»·*ý9°ËP¶Ô¬hà%vº¬³œ½êØ.œã‚¦(ÇÓ:IѤñ×ã#HÇånıßÊÇQ$?ñÌ[î•ð~&<ŠFfl ]Ló‰f×Ìî,ÊØ³°›|VÇ¿L:î6¬üé3réxxÀÅŠhE¼¨!´õt‰†rê:]5î–š0Q±sPÝX‚†´Yìkyöåc$e2Z±4„ÉõUEI!§Cl{…u\¦´è¿]ªX˜î‡¢äЯë{:³!¹×‘}&>ŠFgìÑf¸ØipúTš¹wÅǘ2+ÒÄ 9žÌ9n…ÚÍí$k‡PŽ»P„c eÃEÃ÷-å‘U‘…r|¡Qûþ‰yнՔã¼/ŠŠn{b4O:+›8ȈA+Žu.Û´ ç8GÏmbBŽ;¹±køtŒ¡R/_¡^ÍGí„c˜¦_-šhÔiÆEqA`„ÏZ$eÜ9^EgþãR»l¼0Žóé;€4R°qá8Ÿqý÷ŽYCÛÙ“2DçÕ CÇÝr‡Ù3r¸X£~E|ÞƒT׃ Ò³ó:Ååç«ö¶B9n…Ä ǽ\áÓ7üzt,„ã‡Ø1©=j Pk»©ÏŸ ’QÇ)8¶íÚƒrÜì >Œ3ÓÁEÄ/W槃¡É Y9„u<>’ÀÀõôë8˜ƒ•1Þ¦hzA˜D_ÐŽ w®µK·îO†HÍNŠç_Ÿx+ªì¢¿J€wÜ €Â;ÞÉ«+ß‘ Üö=Ù=‰)2hkGnÇJñ.£N3–%aÁ:ÎÎ6­‡mÁƒhTô(›Òw2$ˆÖ€v<ô€[´rï¸~@û ”Pá‚w50ì[ž !7ˆ9²‡Ï‡YÕN‰¢¥âbÜôäÔuÊÐ…h 6™7ã>‚xœÚ”­3ñx§ )¿A¸”ºD½| •øH¢)[«t°þ”>ŠFf< _²PŠ>•j}4Ÿù©|f£AÝþ!hð¥8§@Q%˛䪯1Ǹ¸ãd –­›ðY$4«h‡}Â<år³®Ÿr÷$\‡…G†uŽæ–ÞÊ #/¡ýÅP”è¶ÒÊ‹¶šÉÌ«ãÏç8q€b*;WÚW˜ÍT›¬ çk3Kyg¼@/ýÔàAç}ŸÚÛà púøHQå|v?‰À¯O™ÏZÁ{žÀL—nÎëÎ6}WL嵚óÒSá]L¤#{PºH" ì2L9‡4ÙD–bao×ïÒaÓi¾|ΘEŒé3¤Úà_-á½A:%$h2.\kÝ€˜Ý 2– 1çÿIG^×èkÞÍÙåÓ÷o¾¼ýÓ!¢—¬íö2¸K—w„t¸¯c­~óåíï_ž8¦óÆðO3Cô.á¢ÉŸ—•4ÿ|e;^é—R­1ŸÆZó˜hûµ×É@–¥øËñ‹_ÿàñû!ùó¥Ö@ˆ˜ùƒÌt œ§Æ¾ýÛ}æ†Äèä4VGH_…ë•öØYËžÇRÖess„S5ìR¬¸l’üfêÁ±÷ÉqD¸„‚y·œs/=¾vï¶l-Ô¬tìÒÐg-/*t’Ùš»bÅ–ág¼‹ÃÜÍ9öE&—5XpôõÅìc‹ÐôÝ‹ð‰ÖkP/^·/dÉ3@•Î2¤˜ó÷Ò\½ž¸oZ–_jÖÉG`N|D:]N®sí-‹K/vÝžÎÞRÜûd¬bÏž ñ › ¥g¯G³xY5ÄBaÆCj\*³Oí-ûjîÌñg—:¢Öké6ãÎâü®d·ˆL~9*ë‚ÉçÓ edóCó*Bűwœåæ3—|nBŸÝQöA-b] “Ñ‘#IZXl›E }V}ÜA/%Î:›ô«Íx´ÄðŽT³!¼Pt¼ª>‰sù«*èóûéç þp¤ÀËQᆑˆ֙¤¯ÿz fN0b!zãêéÎ_þf»‰ð„¯þÙd¬gNš ùùû8ym•¡MsÒMäèï¶hˆ6ž[貸uÉm‘O¾º¼çç×¼¼/ÀÊþnÍlÚ`©æcˆQ+„gJ<%›³?á‚×ì«~ &:-BÒ´p•¢nèWøÌ‡ç¾þÆ>úe)¹j. ð œR.O„:q±ë¦~1_O€n«Mž|Âù‡‚ 칄‰CE4ù«ÑÚŠÅÿ;vŸù¯¿ýøÛ¯ÿý~}ûþ§öš÷LÙ§½ò‡ùÉ¿ÕúøÏCÙß%À¥”âé뀯ýøîÃwŸ?þöáÇÓWy÷åíç÷ïø?ß¹Ó×¾îÏã~|óëÏo>f,ûòåÆòÍçÿýùÍïÞ~xÞ^ö| ò&äÛó›”¿ö[£òç?c.~æoÇ?û>¼ûÂå·_ß~þ+ööÿÿð~}{ösÞ+Cøñ¢ëç//?óß~ýòñÓ×ߘ_㟌‡s+^ž8¾{øáãûŸ¿ûÃÿú_ÿóÿÓºú©?ýôëÛ4§…rkœó£§9ÎÿøqÌÙ8ÿíÛzºÍ›¦ëÅãï\=A±ëíÑŠþüÕsǪ?uÑ-vû»·ßÍ%»´ŠÈŸ•Ý¿ ¯VòÒj¿ÚeËKéëŠ[¿Z¿.CŠg¯8ŽéX­gãäƒîY²OYGçîÞ µwnȨGöñœû¯²P¼d]¬îÑ7Yw.qÚç¹ {ìäC;iò f²ÆÙißé_o³âà3Å q‡Ž:7i‹ŽÛV›§ÇÌ!QQZC,»[5@Á8”Cš }£ÅóÛí!áÑBmÓýsIy°·œO,;FW´Õ?1N Y›—e¿`=GÌÒ©Ÿ¢ú2àú2\Ýt¹ð,tŸ—¬t¾)Þa@_°¤e]ÞË-s2…a›Ã96$j¤ãžåM=6%Ú—Ë›æ„j!(Ý%)e846Qiöí ù0—n*ÏÓcåÁp´ wƒ ªšŒ½è¶±É,ŸìЙåJ~íļá=aqv>1@gÊéi%òM²XÚ˜)yÜEóÿÃM»"¦†››DÁã¯ÉY0<ßRX$“= ,‚Þ´ÐkÈ3AR²é4á|H®}Û7Ë…›ZЛðÍ©d¼“MŽ¿\hûÚ&F±Þa3”­"N Uò÷c‰u*‚q¿ÂäÓ¼s£Ã[¤S¿sf>+ëà6ž;É™ÃQ“ž©aÖ)vࢠyŠ™WLˆù²×¹è…‹Û°H÷Ü’Âí~5F½ðnÝ…-ã‘‹J'Ç`­#ˆ'{ y*F 6&ì‹ qã±p³€Ù2ö$‹ TmýäÐHËžp–ÅÂã†4V _Ve¸F²öJGÃs!Ç2û0S‘E,œò~72C„-úZâ—LFïÍ3Å¡.EÞ{ž½¸ ‘,.aE+<Ø6‹zÑ 7²^Xßø«²h…'‘Ǩ…EK¤¬×Þ²!I6i<@ŠFglÅš÷"m›ëÈh• ÞÐ櫊Qû6fQ w‡í8‚;­#¾Àˆvÿ­Êd]Óéz¢BdÑ ûš ëšlA\Ÿ©YÖÀ'ƒ;ëP)€P¯/o»ŠRxn7¢¡ðxƒ¬£oüÕY¤ÂI4¥í¬ñ§ÎÓd ‡š\|7‘’MÇù’–œ‹LxÚC?Dd»Ék4~£P²i¡3•<önð([9D&Ü\—°Ý "уªÀÆŠÌȦ ™‰¡Óªàêi¡#ÂÙšÙ†RŒžŸYòÛ€'Ë~IÉ”¤àÙU¹Nð,ð`pö û"lÑ€ÕøXDÂ]@‚]ÏôÄ'v,œw¯!W#uš2J Û\³LxzvùîMø |î9px’ËÊ…,ø³Løllæ ™pwMü³'Úü‡.qR“‘rÖ O¸‘1)PŸÁ W3ìÕ¶håÂH寖+9žY&<¥¶/9ë„ËY’N VcåQ'ü¦Px—,ºz4pÉðzMy.X F½Ì9±«ÆC)2án;™ðF$«¡ÜKÚO(pç¸VHlp‘³‘­¢®·={^A§'ŠÉSÈüVTÂéšóþhÛz…Ö¥šYÝDþ¢]¤ë}vñ;¯>¡£’ÏSo¯§E#\·‹KfpÛo ï†È¢îe.%Ã~[ðS² ’íFêg£`Òi¶¾0J5Ÿ†ÁŽÛ†³]N"¿kχ{iÊ#dkfqð,¸ºÛUýˆf_àU¿¿èÇ[Å,W¾AЗ1d ìDQ$ê]Z¸dcŸæµ³ýu$ÛïÀ½˜§I9g.E*¶©æU{£ÓЙŊ»líÄ@ìmU6~€ˆeÿ¼ºqp·SÎ/0…˜(…éàÐÊ“÷Sô`—óWÉì¢nRL(‚§›‚·ï¯‡ x&Ñy¬÷Ë™)Æy•ȇ8ÅâWìÚkÛcÔiÊ\'éõ8ðôlƼ >Ñ{E¬Ÿ8bEU†®)šàvÃtM§•CDÁÍ"±ú]H’"šµ}­mJW¸yGÎ +pI—ç®ye%ãêjH—ñÙúLå‰DáÐ{¦Ì[P/IÞrøã…’ñ" .Ó[ö ßP—Áº…EŽ¿‘ùSöcƒJ&îÉŸÓcÓiÂàŸÔÚ#‰ÕØ› #ûÂGÜ1Þñá𭇳 xpæi:Í¢åaïƒÈ ]Ác‘óµC•y nûa?'º†Ç˜ï OÏTuláS¶3>¥ÌŠ¡«Šä" îoH‚'1¦í¾! no©:.ûjˆóµÕqÊš¬äöu\mÓiÂî ywQ(5Ü 9¤ˆ*ä&Æ È.ªàv[ÑÛ+‡È‚ƒ¯;ÅdNUÑ M¦àãhYðe5ß;§…6{¡æë\ȧåfÚ•tR ®Aš$škYUÊúm®oÃ4ßTu\?üzx„&¸î ¯½CãGá!˜_ >ŠVæ\˜ñ…÷C¢Å;#¤ÖF±ó'Ͼÿ¢î-˜Í†)šN3‡ƒëE›;ïê ÈêjÏ_KÑ U.ƒ08-pÞ=/>¿HWÓbàPæy ¸?;pƲ—5-ª‚óÙÛ™¸B ë4 "qË-“h´½5í”36Äɘã#í«\ÖaÕqÒPÏFúº†~Œ4äE¢ÂþÍÐ#]BBœví R´rˆ:øBGÍÝPÂKA…àkoK{å<~yä¼Ruѳz^h¿Ö¦ÊÓ0>ªèòóZÛ Šþ¬±SN|!²_÷HFW•û>møŒŒWZ"j ˆÀÎiÍ„6q¹z9YŸ ‘’Q§)cù o'kÔ ïíE²skù½Zdàeðpæü•C$Âí™lëâU˜ Že«i kEñçØfwg›ÒŠvHÓMs ËxÌ{Ð^ÕÚpÚ]ÙE!ü†¼@ßøë! árW¶FþÓæì•¶6¼/R´ê8çÒwݾ‹„B¸=WéÛ§ØB‰~âWªÈX #©xOr5²•C4ÂíX¾uªÇs,qÄàŸi ÿY‘Ï×…â÷Ï‹cÍlLÅ[aŠoå÷ÀH>9UŽÈ%[Ðïšk/ áËJÇï'>%tïe¤4~F&^d±Ï4à!µ–┩4oõÒU>·ÜG²ê4i¸ñ²J¸¡ºiÚ•4–”wŒÒl8µ½!nGÜFÊV‘ ¤Þ‡ƒŽ~ès0!oYF&´ÁßäsÁ{Q*€.µš˜á/šø4ú³6Höc#å8qÜA«¾rTÜÑOl-p7Ñyë~=F‚jÉå.G2t_4˜"øä5–^A¤-Ùtš0xœ[öIÌ) qì¯ïßýð¶=S:~|£j,K…BÝù¥â²%=t&«p¾A_œ÷£.—ûqi÷ñ#xò;Ð× XÑן6_ýÕßkbü¿×ÿü|ñíÏßy–oÿôñó—þöÛ_x>ßþüñ—·ßþø¯¿|ûþ㿽yÿî?ߪOþ&üêï?~z‡úEéÏÿýågN¯ûêq^Zx9þöYIP™¿­(îO‰ìõ¥¹ZÓÒk˜[üáü÷V¾ÜGfe8 Æûö\Y˜ lQॅ…–×YD±L3?ö ËßOWs+_· 3´åues=AkË/™¥iFËx2j–Æˬ©girÆT–¶3n—Šòõ,—¾õµ Í™ÃyÞª{šw*“È9ñpŽöbòÖ3ÐkÃÿã3?5èËJ5 N9òrzPˆ ÅÈß>¿ÿÓ 9ñæý‹ÒFЍ®Ð¾°¼>5È— ݳS¢¬gÞGÔQY›t¥¨y°ÞCÖí ð×ð« eù1^ëÂu=̯ê;ý_Ï€/¿~zóáúÑüðåP>çGüù—7ï¿/_ù÷7Ÿß½ùð¥úÚÌó_>¾ÿñûã¯}~û凟«ú•a÷»øé÷ù_?½ùåÝû¿÷ÇúüÛ¯?ó×>¿ûô囿~ùñßN@{˜íÓÛÞýôî‡7_Þ}üpýóßüóÛßýöË>¤/õz]xTósÅ.æçz¾_,åo_,Ôò”VjÕ3û-yó¸wUk÷shƒ#¸èÔÖvüWa_#OÑñî2{z7´ER1Ïo¡í2tˆºH8,´‰½˜üuý´xï´Š&šª6ð™¢v·ô6qoæð„ˆÔGø³ìÎÃÝuâÅnð ™q;‡,“ü€¼BÖI¹Ä‡Îù"áÀ9jÊn´M|€ˆ=ŸøÑ:ûÎsˆÏ3nÓ&þ >Å)†±xÝ®šxCƒ†ƒkéN¯süõ±34hb¯™-Í1Lè&íà¬IäVÃ> Vãå¬Ic»²qÀŸmU0ÔkÉ“á²mÔË”c©Ðo<“"IÃÛÏì^¤q}DŽaˆJ.¹ÍêSDijNƒýboÉÌ!ª4þ<7úMxEÔ-Ù&zeµ™ç.²4ñÇ2›¬<#MMyÉç‚ yD7ù¨4»sSdÏÝ3D_¦R‹.kÓ"]š̹}ï†É¢KәƱ†”µü× ËydÀîì{|nì-Yuš³—˜;‹: ‡ß;Gß|ÊóÖ ¥¬ØgÒ8Ež&ŽQ9”¬¢Nƒ­ßïŠ."ÙG•GIZÎÎÖ§y$‘S¹z½ÞaßÁøäžÆ€&¤›QE€+ 7®2E &Iò]6W2O¾&ÉTMØ[ŸÆh‡Ä#ªSxçG>ú4fÐð’Í"Pó0ˆ(kú\>•Nv¨ƒ÷e…öN˲gÀnOu}´¢˜’Þq˜9ŠKŠ4îšú4é†Ò(EØ(‘-Üìeðõ93yöÍr2M”Yžfˆþ«häqÛ¯oÈÓàHL‡º€”O”h¤ÿqwpý¤¹éIþ3ÕÄØƒ´äòÒ 1Dd°—£^Ô§‰7äib¯ò‚0z@ºT4": Èá~Ï“aC¨tH¿RqɨãŒ=ßbŸÁéRuù³:²+£RqÎ »¾„úñÿËÞÛîJ’äV‚¯Ò°xxÛí«5ÓÀî`g~ ö‡0PÓ•-•¦ºª‘U½Ûš§_FÄͰ7F¸…»Û¤jºyóæuÒÃìi$Ïem h?xT­¢LãÞ!…"xU åã8‹BƼ4`óº_¨1Q_CòÐÆt<ÃÇ¿a‚Nw ”¬P¦Q³¸Dýåíñ™„~¨ë2z?›àP*v‰£Z—>¥¸jÕÕé¬uœµiϱ٬súÊŸ«÷F+Ð@™ÆP]P"Lcß(`rȱënAPEå‘]"LcúÙÄmË]‚]ÀdáSÜjûi¬ü¬sŠkã ®„G͹"j_@B–Æêó‡}_^˜Í;CÈèÍ%›-÷È%8‚ØgÕÅkk¤ÏºùV"æìV7„ªú7'ø“M%i’ ±žô?0ÅÖ¬¢KcÞ¨ex‡NâXµ@&â9:êUã$«ýŠ tqudš£çpá Ø˜âLÖO9„ÙÇüX€, )·\"K£ÎE÷=½!!JÓ™bƒ–#h9r¦Âß:ì§Ë¨«Ç$ØÒ|#áÚáèHcAwnhòl9c8Æ€Ú6Ò ¶jåI÷Ž@²Äå*Ôâ?Î>§4ò \NïtøXˆaÛ\Óê¦Ì耒c¸™-°“5RÌeQ†žÒ¤^Aíñëñ¬KNEêv7³JbCøÌµÅ|†ðQ3ê걓¾å7rU¤Q(,v¤)Iî½|žÈø™²pÿþòov¤‰7øÿ‚4Š{ ÒÜn¾Õî;^#HSnb¯CÝ;TæV]íØñP=šÛ[Çn77×£áeΠ¸dð hz]¸ÇPõhø(~A¦bî»Ó£‰>Ï®óm N TfJ”|õÛ>ôhn‹H3ÿ½ÊÑ<¾©ók…J ¿ÖÛo¿$Gãoo‡åh––ZJPY¬4þÊ%‹ø"s°á8žb°|J‡p_Q±¦¤$7Þ1Eã9ÅGÇ‘T}b!¤!9r¾Ë/¯ãÝQz¼ld8Z÷Õ€1¨œÊÒÅæ+ﳸK´š#Z‹¦r0|¿™r!Hæ”à¦k ñsI¹hYÆ·‘Uy&U6~ˆž˜›fÄéí`òöÆ|Ùl|šåoÎŒžpG¡GI­}ÞÀƒ.‰95ƒBVP"Âü(Ÿ6ò Š)ñÖöÆMŽWgøþH ç›®þFH,,¦-}–TÛû›)™æH6;^R w£úk’ׯߡZ’ž1Øt=Í糜hQF!Þ¥Éy7ûPÊ}õÕ£û-{eú ö78R¶{(…bAÛÚn{YÿP=º´ø­rš<Çd*y™æ¯¯ì ó|h,ñ&µÊ9‚KÞñá€S3ÞØxl\8úÚ|üÆËOÄÌ]ÖÐz–ÄäÞN'‰[ÿáÅ óÛo±È×ç(Rþhiœô½3×5†Ñ÷6G9\ã©ÄE$Y¶É°6oI_PVO¿²i¬Ú4ºz¿ðXÙ6¦"/{ß”0{ë„,|5ɇ¾}·L‹Í6ÍΆà&N"f—J~lVyo†FÁfos”uˆ}¾T§X4 Õ`> ¢›<ä3åûª”¬BªXŸß^ÏŸzÆî“×f¦W?6YÎ4’Igµ%TÁŠE˜'õ"ãÆõ8–ÕkÄÏÇ0$©¤)šÉ…¸õÊp<Ù(ÇÙ¨å$§P½ÌÛ ‚…>òcu` Á¶óïÅÚ’lØêªð°tž¡“üÍ<Rñ7:ÝYD8•‘yDyÂqº ÚÏd4çhõÄ'ˆŠRž¬ÉaÎ>˜KôYõ-› ÉŸ6cë©öåÅg8uÁÂ’r–ó\Ê%ŠFý(ÙtŸÐ¯~þÛ¹„¥XÀK”&Ü(¢ü8âÞo…¦²"Óøñ+½Â }Õ_ÖH*÷¡ˆƒšq0Å_hèÐ3aÝ”wl±ï´sŒþòB¡üu*5ôÓÇP±ƒ!ƒÛBã<ØÏ÷ÓϧÄNðçUj×8×6àFÚŸ%Îd¨6òf !gr]8[¼Òˆ¶úRßã×w†©%.}ø+Šv¦líg`‰ÓŒúv¬”ö˜(ëºÃ•uƒå8Ö¹b'NÿÙyמda]£t¹î’ª‘cTuótádÆü\ ÔOÿꢑ"«[P_v £&–'oÃýœ÷Œ›û#¤Iü'6sŠ lK‹ªº®Ý%%¢º±WâýðÕè(’º±‹j8ñ'P9´aþ šã-{®~MxI„tËÑ¡cˆnöœkƉÀçhs›\XttÃHÕÈ!2ºæ ÞHiv‘êö󓡘-i u¦èè¾£Y³eÄðµŽî ƒ¨”ŠÛ25oÀnµ?ñggl¸ß„¢¤›S;!)]Û«©=50Š”nR™êZ@äˆó“¦À‘š/¹×Œ-±Q1éê-t9ùNƒ{Š}ÆŽÚB9„âÚ1Øñ9£õ©mŸ;97Bf\3rŒ€®e(èFk„€ï*иë²8š)ºæPãø³)¹9M‘·ƒ³öt$H'm ô6Ýß\Š„îríòú÷Qê­›?~58Š„nè¨ð! !¤¸)æÂ˜OªQшD@—ŽÈºµœƒùnkȶHÐ-C.U+‡¨çš7DÆS*s²¼DnÄA*?!E=÷Yàliv–CýÊ1½<ùrj‡ êb0iÙf_8«çÚ“k¶g‰|nÒg3ûž¿"E>7õA¤ßœ“èyÛlz-Ù#U«.>{NÍ™qQÐ GËŒ§âQø(ÐE†øm¯‹€nQæ£vIÕÈ!ú¹é !îœ@âMÍ£ÆYYJ! ¬Íˆ~nzüy‰£kð7œwÚ#ä{<ÔÅP‰Îq”þx÷/ò¹ G£ˆç¦Þ [{üj„ñ\½;¡­'fÐbÅ’‚àâSTfT«®>—S íã³xnTÚ¼v‚H>úbqƒ·à´í\û,«é ï’š™c”sË;j-DUÄE˜A)n$ûY8—Þð V|˜•ú¡`€Ø¥Í˜Ø¤‚"1Çã¼yÉd÷ÐÚxÎÍíöY7×: ©Ï‚ÕXyÎ-}¹Î¬$À¦ K¯)ƒ¥bÕ‡Ó8!š‡™Hçs´Î8ìe¨Ç]Š ®{&œ«)²í—ukVŽÑÍ5oD”œqC²¾¾³3%çSX¶á\9èöŒ@~t§uyr,¨!Ðíc3ÈJM#~AæþfR¤s}ÖÄY ˜Ú:ËÙÚóW#¥hçb¢¹“ÈB€±L!{üȧH»›®iµj¾ë…òïPŒ¤Â9Q.¦LÂ9…J›ItsµÚûn©[9D7÷ŽÈqK¾¢e·!ÌíHUHQÍ¥w<‹fáÎ#Ðä‚=" ôˆq5˜¼LÏß—D5×¶Ó:QÍ5¾·x£<¾ ¥·®çb²DtŸ¶"Í%ÙOP¸i[tõÕ+|Hg½\Ú©ëGáa½¦€ÒcàBÌ¥!tÚ‘Côrß‘ô©ÿ’Z/½É8jŒ=äX=‡^ÇœK3{P±à 'N&”Ø41æMæð„P^8ô@IÁܨi²B0W×:Ÿ¿¾UйzÏO››-fŒ¿£ÇÆØ¥ôØ·eŒÓ¬ºúÌëoyRçòhUuÊuß. ™ªM1æ‰ g´§ö…¤ˆæÚ ©9D27õs²C˦bªËÈSà6˜’m΢¹á ”4v-ª;#Ñàˆâ4mŒ’žÊlRœ’£ÙgÞ†K²¹IɽO5zìzzDFÿ¤ ©­0f!+-Ú4[ŽÛ?§¦fÔÕcH6/ñ„\þ>í—_7‘§¿ ¾s!£©ú@5·hÝ›»¤næÙÜð†¨¸AãC*÷‡³òì³nn~G.ÝÄG„´ÑÍ1§¼Y‚­ÿrøŒV}V]|:•Ts÷êñQ´ÄBšy«¦‰øãõ†¬.šË!¢*®˜9D57¼£x†þ|—^{°5¢:Ô±\]¿­VGàäê6Ï;[,È9öGÈÄ¡‰É§„û~ÅÐÍ5ˤiׂõíŸß’IèG»„sÁ™c}S ~æ°:É36Iͨ«Ë™V.ˆ¡›{x§È^ùC %© Õ\:™)vÛÈ!ª¹ïT{}2ö‰ƒJ">aGŠžy¡è—&h +€uE Û gkÏ)n"Ç;ÿ·(œKO”sõ[¿Îç¯HQÎÕ×ÛXò%ŸM„î±—|m[„Ô¬º8mÏ÷ Í—I¸EHã=Ú73 ÕS¯¤ÙÐÍõƒ„!+‡èææS~˜c~½–É‹Rk‹ŸJ™}ëôPÏh‰»èuÇ d;Ãu‘³5æDÛÃ'0 E0J,Iç.ó]_þ>¿Q£QžÞ‘:ˆ]!¤ï(ñú˜bÁÅhp6BöYuõ™0ûD=×iCÆ$ïãd1ÝWRV*ÙÐÎ5#´Åu+‡hçæþ„´pÂác¸¦1eŽWÉP¿Ü[7„ˆÆVmâ t—¦lÇ ©tÚ@Z"z;åbæ˜ãc3 ÔsE So©=~=D’0Úô…kÕ1Ÿ¦bøA!ö†³ÛÆŠQWBÀt!5w }Åê¹™O½ÈñYšfʃÌÜÿþòovQϽåuúõ\ѽÕssõA¬üpßñêõÜ8JWöPõ\WiQù!ªž{;ÜÕíææê¹ÑD>ûsv“ãýæ³]ÕÅÈ–zn8åÔs« £;õ\Š Þ´7DÕ•¢FšCH7<ømê¹éfk\Ìü÷ªžûø¦Î¯ÂµÑÆÛU÷’zn•ž.ªç~œõÒ¶S×Çgä9ßò×¶ËŸNüùÏÙs7yÞtÙ¥Pž¨‰dÕÈ÷gg» #'r2Ksø“¿áz‹þ΃>8TI‘H( î¤|œVïÈØ®þËë·èÑe\›Å¡›IÃrØ_Â3Ù™Z j‡!ë.K‡¬`ìãBlŽOŠuÆÍÖÔ3w"IjGˆ‹î -j*¼ê—O³É±nw¸ï|än8e ÆP®ˆ |ZûÄÙ;¿–ÉË”³‰­"gedŽ‹ÛWŒžqO…gÖ°>†îLЇvê=scIpœ¸Rà=ã=(ùc©(:¬º8-úÈ …ˆÏr…· Z–Á0‡Â{—r[£ë,>£Y¸RêVQŸñCׯã ·ÝˈK ~¨g¥Aüªg%ÍÎûûJŒ›ƒ÷q³JL¨BÌ3¯  jymDK4ŠÒ‚Ð䨪Ìw>5RŠM楦JÞ·@Égü•…œ,¤”]>R¨²Ïª«×å¤p*‰" í–~´‚5ãPc4³{sqδR$i@&2 ¦TÍ"JóVäe¡‰L)Õxxå$c6öˆ(M9ÙwNK‘aÑÞù–ÃìMrKcµce´«ð³&û¼ÍæþÞ_di\;dUó”U¼ãñ«¡RTib_LÉÛevŃ6ñ¨8ÝgÕÕgÄüŠ.†1"5{,PoYŽeÊäáMÎm5ó8M‚“š•cÔiNöÀ §©s®îíñ»o$ÃY>K—H _t,pðMçʱֳèÜ–â Ë0Å{ÈÏ roÉ”H‘§)m‘§ Õ Üf¬ÆI¨1ÏD_—)ãº*òB›BB±!ä; û¬ºøìŒp67Þ‰HÔäzÄ•Û?,b_hrè/ÉÒ·Õ¶ÐUmÄÞQjV‘¨±é±¿gÅU…9‡ZƒüÎÇ2p’F4jÜ"¯ø«ŽeÜA™šWÂ¥ä#®(çøÐLÄ‡Ž ö>ZšÔNëD¢Æ=`èxüj‰§Æµí«@”5K‰°¤Ì6ÚÞvÌm/(5«.>{̺ê 5öpt ?%ТK¶"¿ 55QÃq0©Ú9D¥&¾ƒ’]%Õ×x¸Ñ2S6#=+ïÅÉ>óÇÁÆ*鶉¹¼X=Ù'3ÿ]œÐµs|؈"T£ ŠPMy*¾ÐñøÕ8)B5ôŒ1w‘„2Ç—ì&Æê ¶BöYuõ¹ˆ˜\ãœujø,?ºìgþÌ=#PæC߯v8yªÙYò°ÇÌ1B5vQ5ûe¤$ 僢AÌœÜÀRÎY©&-R‹¿êZÂp²ÍwP™ç˜9Ž€Jþ»l€U~N”¦ÏR5JLy‘ªé½¡Ô X –g¥ÛWˉœúspOÀ%;ÛœÎî2êÃå$mÓwrÖ©ÙO‚¡U#)weìB"ÉiۥѩI;ÎvZ9D§æ­ÄÛ¦<{2÷•á4[ïÍ@ šøN:ëgï讚R—dÌ– ­BJæG9—&B],·(S£°èŠJ×9,ú¿%Ï*5}÷“¸7Ùe;¡·8û9ê8šUWŸ1\¢ÌЋTMÜiF»Ýuƒ‰rМN™fW‘®Tãwdï3rˆPMy«¤¹®v`Æ"s2pBû,Ts¢7PÒ$?SºÃÿ0*&mªTÓêÌ¡0s¶á¦h#w¡C³B)Z5Oºžß’ û`·p …|"LÑhÉ›cåj:¬ºúìeoµÚJ!Y£]þ½9¤œ Wôñ‰ÿ³4¡:f1Ë“‡è’§v³ùY³¦˜} #{Ì¢Z“ù"Åüg¢W[9Î7l­ZCS°ŽFÒýX—Þs¬ήk# Á*~3qX0*ç8¯½ Nè9~;05Z>Q'þ3g¿mÌ­àDs‰ó&}Réî{üú6shÖè÷¤Õv¹1$áŸ#Ú2jï&²XoÔÕc\û·i, Xãó~ª^ËØÃ` '/´µ3 [W¬ ûòXôX9D²&ÚGYØ—‘„×Çìy3ÕIi\ŸµC= Kœ— lÒ®îštšlf³MØ)Îø âéÅËÃ,$kB»@ ’5å)“Åú§w dôÕiõ:ŸfâØ-s4[æ‚1¨ñ©uõ8ÈKó$¿['Pz8jàÏ”À7Æ9¬ å™dº•Ck–)Ã^„WfG÷º‡yÎìñPI/ÖàýžA,Úß±¼yÃߌ´¸mŒýšÑ¸)`ÎûÀ&Åšscrs‘—g ;t`dq•Àæëp TÅ’ÉS Ì¡›uÇÊz­7êê1©Ò°"Z³SWy}8h™‹MPÝñs`W ¢5I¹,Ý "U#‡¨Ö,‹¼„#ü3n†¬z…#…Ï”Fr¡A¶Æ÷'Ùü^ 2©º£l‘.·ˆÓÜL.L2UíhÕÚb@!ú¶&î !ÕǯÇG¨Ö„¾4›­ÄaZ)S²|ðºÞ -ñQ³éê°“Y  ½QÉÐö¹ˆ,4GØ 64ŠZ Ù«ø~·ŠcDk•³_ ³&³½k$G¥¾„‘$4kò²–㋎¨¢RVÂG—¶ÎnÀ“µhU¦<•`ç\x”d œïÊÄèÖè}‰tà#å“}F¹|á—ù3Ú¸ ¬¤™2ØIÞeÔÅã`TYXÈÖ„£sìâ’àQ0vC׸tE¶fD•F5rˆhͲ¨×k8ÂQ"£ý½rjJ³5)Å¡Žaö'Ø ð³ ¹®d;¥z ›Ím·Š7ØS Säc´ŽY—Dk4IXhÖdµÉ¦óñø˜ž©C´ ¨8ÎOØÈëAÍè§PfòŽÚó‡¢V³çPM—C´jÞ(ÐX0D™pWèuaæ,ÔÛ‘r^tW!\í˜P›»ö£Ÿ9­5qÿ+H^7 SÊÔÅñA7b5 ±m.p’ÀMíïzüzpÿ’éª_fg 8#гõñtAªF]=v§¶"ì…—IöÑ ’)Í9`&ˆp…‡ßS{·c»×ÒAöáéC̦ãë=ÄËÖù8rú$x¡wXש`@(Ýùæù­Åo÷š¬) Í1G7 ÌÃÃŽ;¹“¤­…R '÷"v¿µëôä¹J[V̱$„l"M%ƒ-å3Ìi+6]<¦¬Ï 7¹©Ø™"µÀ*ö´:|† ×=y$å :„¡¼TtÿëÙl‚Êt¢ Û…qÃ9ÊÝRà¼Â7Ìݳ”ûÄ0ÊP²ÙœB,áÎ1j)Äí=e¡°”GíšòÌSþ·…bÂjÌ¢ò Bø}U:Ĩ@ã} * ͪ«×X‰ ¯P•ãåpÜÌU”y?O`Y·ÏØÊw­x÷:„¯<¾ÇÃècœ‰îVx'ÆáŒå©*Ý­4Éß1‘#NSýv“ h%ؽ)™’}d1ÆrõâR8ËS5ä±™ «qSXË]Åì°¡2Æ% §iœ)ãZ+-Õª«×`\Éí2O>_ùùË#o^ƒŠCo,GmØ<“—ïZ ï´s}y©j¦«‘ü­ÖÝOõ%¡•Î_žªÌt½o=OñnÖ¨8ì6»Îlˆ»€´/؉WÒì+÷  0˜­cH8Ìý³‚OŸ «QS8Ì…c±Ÿ¬ÁåV„-^hú>‰¹fÔÅgᇦ6f ‹¹6¼c1“ÏÌŽŒÊœœEQ¿m£ºDAºc˜Ì!ªþYP0è½»ø+43†ö  ™¹é¼á›Ç¥•½#UsHjMc‡ñ|Ä#ƒô­*Âgž5*Xa4ǽÙ&¬Má4'$7=ø”m™©”ä'Œß§z|SÔT­ºxí¥²ý! ¯y›á(ó'ÏpÄÁ\ E‰5…Úœª~ÃãpS7t·¹_ý~[¢ÁϦ»«M „›ä⦰›‡¥áï¾a5Û;ßîrÉ€›ÉÌDø.†ÙñÜw ¿¹„›íÕ‚Èö‰Õª&¬ÆMá8OBÈÞPÅŠzJΓKÅüô¢MÕª«×åBCÐx/gžs_1§œnÎÙ@5;ò]’2ëxf:"ø995KÇ›Šèu}XV2 óîvÓ‹ðRØst¦;·ÕÜmvz`çsœº™ƒ?;zÆy[Fš=¹úµ3á9ɦk¯ø ýˆÐÉS©±=Ϥç鉮T‰“þ®‚Øbw`fŸUnã‚"¶ãN¡>OUó .$J¸xŠÓÉ[H˜gìç¹¢b9° I5tz©¶Õúò ã‹»§@÷ *°e8zy/_§²;tÞ$ ºµ”ԋǨ€+“ãÝY¨Øû=)$è^h3Z«4èå7[Ÿ «‘SˆÐ©·4”ZÂ\±“CCpù3§jÕÕk”†Tf+LÔ‡—†87œ]Ìà? $! n‚nº\µsCzYÒp|yˆ¦˜ô¨Þâôh¥#]C>èÞ -|®…ê8:ò(ÐÓ“ÞbŽ™X"r3æ I/Œ™:Qz]vØÌ„õ-ï JOßæPw™ªœ' ‘YNoÆO i6]=NrÓ®p‚,]XJÅKÔ&¼ÉI ;gg5¦"°¥cFhÀ¬¹nç¾ôªÑv=Ÿ‡Í¶ÜiJøÝäÑ|é©j…[íY”ÍÚ±ÄûÂEÚìVSáSsfvÞ§ Se½˜?±Rl0 a8ÓAºØK馘ЖÆ&µªÉŸf¯hbæPŽ×Kè%pß”ÓM±éêqVGåHã´V Þ-9Vs^:Ì<°AË„#ÎŽ VÍB.%‚~Dá4 ¤“gfŒ¡®¡²Lo¸–½E—X} ŠHÂf-î T¡Y4râ0¬ÇQü}iVèÓÏó‰Í•^ŒÔ\úæÏU:вȰ–Zj!Sev9YF&^\Åû XŒT£®>“Û" NšÇ¦Qçø†± cŠœ –µlÜ Q ˆ.ŸØ9„JÝTbRk9Ç=g㉒ºôãQH$M¦nÞ¹hàs- ÙºÓ›HaŽÉA§ž8NýÙXfÏþ0:õ¨uj ¡z=…¿™ ëS(Õ+†ÒüåžSß̆¤2“íævß/“®þJc»Æwïe÷í$€Û Û2ÞsÓ©ÌÅçÐV¿FuÚUÿ¶ÃÆ!ŒêQ¤¯zƒ¯‚ÙÉl븲 {#GÎÏœêï°Å;cý\ÒÞõnŽä·›Rî #Z¥Ã” âÄÈÃ…HÕ½Z@©º« [YБ„þP«q6ñȇøÎù)9P•ºO’šQŸƒ‘SLž¸ ,Gs«—Ìg}ð3ÜvN>¨ôÁsLiÇÊx§CøÕ©D^/dãæpϰN6ÎÏÜ‘2¸`XOKcô¯»Àm—ï.-¥Öaâfjám´Ï¿™4y)+ûT »iPHœ„z½,ÞgBb¦(©žkbÉ>°Â‘]˜=6]=ÎÏ¢þbîÚ7ÂK°ŸbÑ{!ì5OèÖ W#ðR³sãú¹5¬;+²Ò÷²á¼ŽrιN•&Ój¼¤ÄQÝÁeàÈ™Ž`]Ç„bæPvâsgfÜ{ÄÖuÄ& £°Aò{ãKÍ„õp æu[ug¯‚&šKÁ!/8Ÿl!ê0é⯈:åRÌë¶ ¹éù’5è/]pšò#˜×ÑÕIÚ¯Hµs÷zZêL|½Â+&»:§Œ.>ãGª÷€z=½%L‘oC –ÁfLh¹ÍZ.Ž\²¼]œù|ƒ _·rŸÔ\éYèuÂÌ>:À2‹)}íC©n>Û'ïãìsî%ïÜ´H3êê3II þ{ÊÙk°¼-ól(Ÿ{çÂi®˜…F5\êv!c7U™rµ¦C†¢Ï]åCt)X]‚¨ÊVš)«ëýÞÍ •¯K<pÅ„qÉÝÓä„ÛS7tÛð€˜ÂÈ.§Bk©ƒ¤Šžtítš°1Á*•;uÅS ŠëEàÅtÄoÚC¤uõÙI¶½t¹Ð ?ÉÄÙbÃ$_¹d1;pÊúÅ&`¾?ϼ6Ó=8[S’´w¾þ¤â£c '|ſў”Œkž„j¦‰M¶ Ô&^XèÏ|,ŸÅÈ{¨ÿ0ôÜl–!lÑV;Ùó ù‡ 2RÈ3CþMãÀ‹‰3/"«ÍÊ|›«‘wp£›ö1–x_ Ìí®ï¿>&\ÎÎÖïÀ—9 8úÖ;8³ÉcBÜóhÜÁ¶“ÔOÀFòÞ$"̸Xc-з3³/‘STGÑctáȑţ®>ó’³"7¼•-ÕV¿5ÆÍ¹£€¼“û%±×’XÈÞó3>“>Ö|J7•/üî×/*Â^(‹š™ÜXÜ»èQl×ä°tóë—¿þºåS),ìöåÇú§Zy–E0 EÕlýíC›¿¾2+ø˜·6͇ò2.1NVâ™üHÏ#µnÿ7¿¿|ûÛo¼üDÌ¡–h=Ë£¢ÓÉóKåÿn÷~ûϯYœSäT• }6‰“UZ½Þ;†Ï5ÓW_á–)GnlˆØ,•"$“Böè6"B¿¸q¤~ÃEüÂse똊±kƒ-›:Ebá°á´RXÉzvOëÖsù¹’ÇüÏ&Œ—Cï÷–b ƒÃ­QÖ¡y£~³ˆ£Ã8K:áó‰±,.Bª.®Þ^ O*+ð,»¼!|§0‡’ùа˜õúÖ_΢—r€oG²$_×$ Úˆ#:¸ÉYN`ùt~lØ~oUž/÷>‰ÊZ½KúnCt½qôùBù[èÀ‘7xFcðå½À[’+å­Ã“xæ…‹­s ÄRŒI»Ýy1¥8§£2Šòìžû&v?ΟãՓ͹±±S28.ü‘ }V}Ë)¨1>ÜÉ,PíÊ‹)Ör(c²‹lIÁÅŽ}¸´IÒy[”Ñ<䦪]oóü·“‰€Ó r„Ò¬ðgñ2ä\!ÅIÇÌüø•gîÒå·y[Ÿö#UÌÎ’»rp\ÿtò>Ï.°¾™ަxëiRÖØ€Ú¦ÃÊ!ª„>,JňÁôìZÀ–#‡ªê9z^Eimù6-²Ð¾èYHœ ÜMÑYTX5›uï1ÀÆbìÇ:áàpzŸ&ØÂ”†èÎYn»Ù\ôûùÎç¯/ƒmT™"î·ÌÕþ(gv5:¶$Ï–R8–l½QßUüÌ•J“ãt < ›Üä£(/ÇöHÈYŒö%ë1sˆa^"| K\³‹•0 ´S¢ããv¨[E<{Ýòà`Ž1T5UÐ1‡\òf6mˆB¿’#ï'ôù°3÷[P•ÑôOÕ×?}5>žÅ^th@‘Ïqæÿ_Ê”3$!ã'€Gͦ«Ãœ)„l";öS4hàÃz97¬c.š']s0íK+ÛcåÁA“Å ^Ä”a²7Õ¤œ n¹°†È . ·¼îX̳çܰòËÙ9pÈ|@‰&ƒPì$:©PXRTòbÑ,O);¿ EeP‡ê&y0ÙÚÌX$zâÔkȦ©uõ8h½æ¢/HGÇ #ÅQœÈóžsœ éê‚q@êVѤEbê×`$YšMµHh  0y½DXp¡ÝðuÇãGùÕí'¶­î ÛjÛÙò¿žø5ò¯ÊW‡"*4OÎiCìDHõù«RÍSm¬E4:¡°¸Ä–€\Ó„^K¶„HÕ¨‹ËŒíþeÑ,G‘>[tzš¢ñ˜5^W,n_Q¬3‡ˆ –øÎ…]Œ³÷.V3ÁÄû¢¤( †°¨XóšgÐHÌÞ¹ ÿƒewI[µl)‘\ñÆŽä¬Üó(QçHK´EE0?‹ë{þjœAÎX4Ú…æ­‡´Tœwl‰Co:VBp½Q—½9E…C÷¢¦i&±\(‰&ŸSèýhZHvL,©[9D:°, ¸¼ˆ%1 `S*”ô`v©¶*ªþ9à:5ÓÍÏ!Õæøª˜j,z¯PÒøt®–dLî†Çr€H> LOu[:ž¿"E/0>“»Z#éƒçÌÔM¹Ä™@f>!U£®am¼‘³R ;:Û¦”Ñgo +ÒÕ¢D’g™@RúÃöƒHÕÌAæªvˆžn__Ü$#¹aÏ ñŒ›2θ]MJƒò:›·”lâŽ\ fŽé8l¹ïs<ËæåÁ§ŸðÕBßÌ‚ÕHyÖ,:%M–8˜µ(r¢Ö(öš²-V*F}øÌ‹0+úVÐôû©6òYh<»àâ=¢œRÚQÀ=9:­¢¸ÀËÿz…£@´ÜĺŒ™FŸÓ@Š‘ŒîÚ yâ@ÊÔDŽŽìlKû_N‚yæÕÁûøL}ä†-@×ÎéD z‹ÛÊÓWƒ¤È¦¾„;¹Ù$|?c¾¨­7M¸5£®sBm&Q,q'©&ø W ÑD¬{V)ÞœåÿhDªVÑþ[àx½÷'Ú9{o«X’ÔÐRHp(´¬5ý¢gå|áZõ59ÈðÚ9àZ2Éô&Gr…ƒZ"ûPÙ?%«Ñ?Û}-©=¿$½}Þ¾ˆGd æ=cáàÍ{a†êpTºz쥲Õ3 µ¿´#÷ þ»ØýíO"ðš8x Sæ|q¾}))Z›ØÄ3Fú[Ö“ÿè Žä˜8±¶¾Â^W¼f„âj¤céd— È^òŒOyt¾ØšÝ–ÐÄ0Y¶¤é"Ä?ö ?2ûQAås†A0M)[(s>ŒJ‹Ê_V(g ñWÔØ­óñë{È¡ðgž) Üì—o–ŸIÎY7¥bѱzdy»Ç¦«¿Iä—›ïÝ«´Ÿ\Õ2ô¨š@qâãJÕæ,îö%Êî1sˆ¶_^äF} Hbâ4»ðJ©’QègZP_ô+48²_ò‹SL |BÚäÁNU6 !Û…ËÀX(s‡JªqIv›Ã¢~æ)×ú§w c1Ö$rÞͳEÌüÑ,êõÙU£®ã–±y yÖóÓôëwÁLjŽÃ3ððé—\ˆ>¦úH; u+‡Èù…em’×p„OÓ|´2gF‹ùQ?îCÖò tXrØRB PÖØ B9 ýÕ‡.eQòsš¨fmJgü¨=¾!‹;ß‘6F Qr§é ;V=`µMW‡IM°!àWö¤ZFk ÜCJ­Ð“ JM[äû̾TØ=Vï#ßÖEŒaÕÅ ÿÁøé>OýwV& îF+c>ÆÍ&Ûmæ,.IÙ4B¨`I¶Ï-ó/\ Ÿ‚ÞØ÷üõø;¬ëS·°èä¡u“R"¶=6Ÿ!u«®NƒPLQ óÔˆmýÐ]@2sjç9÷˜"nP,U¬sºÓ[5rˆr_~ãª̳&ß5óZ‚úÈH·@Gêû3ì’ ÅFw½ã†f·”ìk]fËiøÅ»¯>@™CÔúÌã„Í˱– eΦÒv®€Uß!#”FºÒžÛƒëòçŠs¢²Ýb¢È†9…TÊL2éC- ½ÂEO¦"µçw@dŠ§èŸ‰4àˆ8Õ ä-›â0u>HjV]Î*¿DúìŽ}-ôAçIN@¶û\‚o›èN4$53‡HôÙeEÓWQ2=¤ÚÎå™Ó+?ÌBú"=Ž!®ÀIŸjÛ2‹˜(ÕÚïÏ©®Áˆ‹[”çóJ$ q>RëÇ_’æK}™6Èõ®9­-¨!+6ÕaÕÅgFÀd4=°HÕK9¦Ý‡­-(LŽ §³.ëÒ|vœ°é³rˆ0ß—‘Ù‡ÙÙ\¤‰¡¿øth¢Êg–Eù^ó+£Ñàž1…¶èý‹5 ÆÖ¢ZB˜—~¼Œ„$ŸÓÄסÈWôÁš®Çwdv9âëP$ÊÜTBfH²½¼•[£fÓÕ_^{Nûh@±•E»‹Æ»9gÓDl9´Â‡vâ ÊUé~Í>ª™Ctøœé´"g%S¬2mÏ‹È;s $CTøò—‘±`øÉTCÚÞ—9Út@1ÛÐÌÙ2YË!ºîa’È7·ó89P·ïñë’Dìø‰´ó"AÎÑðÊ_ŸºÖùI,ºŒºzìÀµÔꇼp{¥û—øÃ—¶«þòß?^©ÚË ćžsÍL„“M¨ÿþòoª úñÀó~4òßý~\Ú}7, A:`óÍ_]7 »ýæuóÕßýëín<÷XßüñëÝ_½ûûwùå¯þùë¯'6üËOßý‰ýùí¿üü§/¿ýþ_ÿôÛþ_ßýøÃÿþ2ÿù§Vþé_¿ÿól\Ö~ý¿}üÌõÓ~x÷Þ{À}Ã$þ;c^“w/Ô[™ˆ¾¡¤¼ù0¸Pþ¦ûƒ}Ç#ËQÍÿÂ)×+ÎÙp–­ò ‹&.¯1LÆæ1î9¹-“\“ï»|RÅ>úçœü#»äer¶j,9öC´b™³µ—¶`d¦,íd">öèåÒ_}k?#[1QjÆÔ¡Š¨ûz˜‚lJ“Å­`N¦y-{ªÐFé÷#õPÍ¢T3½Ã'w•”ª LŽ5rðÖ¼˜©ŠøÆf€H¡%_õ.ôL¢TQ¢Ÿ©˜2Eò³1•ûÐ JQ¹ùƒRErÝôpÊó×ÖPªHÔÅÄn¡âg c^ üUôñL««F]\¦¬ ‰R…Ñ´÷ábyŽ|NÛÉe7ƒn¿}5+RQcCÞŒ]5sˆT½&ÿÍ¡$_©q•É–“F"VáÓ;žå ÕØ\_ÏâFÓaz¸À/Ƨ)NpC÷g¹ j7#Š^ErÝœŠ«qR+úæÕ½E14Å0eC¸é5dK˜Tºz ¹”æ­(V­<´íQùšÅÈ”!´¸µML'udGÚ#ÍÊ!’ïúq ˆóÕ ­MFh”öB‰bE o:‘G¹+þsp9'Nì6›X׈‡ôlaJ]E2÷—´"Z”™LQ­°AÊì3`5JŠlE)]Tš.âbœqzJ|&»l{-Ù”ûH3êêr©ŠBTòÈÉ,ùЋÎå01¸Ï‰¨ “"\aG0iªFÑ­0§›kÅÕú p¢\O­‡|d¸lÅ;lÜYË•ÕÝØQàðŸâlÃ.ÐGr N‰ŽÜ=­‡W8Û.e‰rEéeÖž¿#E¸"鵬¦F„µl%‡NTØøgzMÙ$u«.NcتÝÒ+Êîð«I*|Χä'ŽùÛ1¶Ëý¢\¡õ´îw3©Z9D¸"¾#ï<Í1zS5D£I.tŒ—¨ƒA3p¬`cM¢L>oÛ0ªý¢­ßs g .CãƒáYµB•q ’:åP§«QRd+(÷ 9¼-–äÙDÿHÙ5£..{ÈK5}Q­°n§ÙÌ&üò'î' †Âþè²%ȸu3‡èVøwRîè=f©|ÝWÏÙª¼Ñ†zVN¦¼“1fÔoî8Ù ƒ§#s„ šȘ2e ©¥ÇhW($¢]¡wkv>~5LŠt…U»­Y ‘¡èÙÜè›ÏP¼Ñlºú[8ŽlagኴKœ‚>|öYŽr}À2”Hò¬\aãˆênçé ÿJZθ}-‚æÐpìÀXò,\‘ÃãÐÀ ”Œh­¬Ùɳ³!-•L6GIœ?Íö 0"ÆEåŠ`Ú‚³r‚Ên¨lÛ°*ÏÚ:C|›ÝwÐ>·‰­u½†l‰•šMó"l_ŠˆnE8ZÍgj\ “ üÑç¬Ô¹E·"*S;ªEjVÑ­poäÜ„˜+›R1óÚbfÏqóHVvèV„w¤‹Œ›C6¡f‹`ÔÌGT¹ oC"f^ø<åõö[t+âኢ—–; X‘"]á»®&DU éJ޳ÿn°Þ´|£uõXeÕå {4FòºŸÏü%šSJíâÍY¸bˆ¢®jåáŠòFzo8¹f@¼…O4{LÂõŒè[MNqáÆ- Þ0jPä6`ãã]Xl™9c}(ˆrE4í¼N¤+zÕ"Õçw`¤·OäØšé-Yþ¬gC\œsè.$mšskF]=öèEkŠAº¢ìT½ió±9>ùb±41 qÎ×¾–á 3b]³qˆnÅ;êœVûx7È~¬¯3††²²3z8÷xð²g™ñ¡¤:ˆ–S½ÂVh‰vc?‚òC7sŒ€½Á‰Ä@’‘O’íH‘Hѯð ‚ã¯k»™G”ä´ÊŠÛé+(•Ì¥ c[¼yhW ÒvaðN‰íù(YÜ“¦Í•8Bq$ø9säÈMMWI'g7N•ÏÙGÀÂÙ0ÛXÜä¡qÉ8®p"AÀ¢ìxÙiå‹ð«&.#)ÚºãÚ%AÈ¡üìÖAg¼ûó¤4»’ªKV¡Rc„< ŒŒ9Ή®5PÒðæaB‚#ɶ!$,¬~Ù÷üõ ]i¼™ÒòAÀ¿?[ô#ò—À£ñ©[uõÙIšÚ|'Wk“ÑûÜE¦ì© Ûp“uœmðZ½/›ŠŽERf·EÇ¢ôr´kÏï@IÊÏBÚ& e0PV˜>»ÒI¶±)JjF]\²u‹t4J2¦sŽG¡LÎ{»UrmÈX?$–TÍ"c‘óbh 4²þîF2 êWFëXyGÈ"ÑÌ‘dÝúcqMyˆØ8eÂMWžŠw©ØÇ|BFiÀ!‹˜õÖŸ>:P2EáiˆÝ®X™OS!7S²ŸáJR5êêrJ*¡~1èp=X M„I$—…*0¥¢ÂdZ»ô¾'J*VѱàWѯ¬ÈgéCÆm/AýÀéí³ŽÅJo “wÍpaÁpáÊ4íÄÑŠd¼"Û³TJ0„¶v°%‹üdà¦Ï€õ0 )‹¨Æµ ùKr Î}>U»jÔÅcYd%Ô! w´ÜOÊyv!N6Ù9¸\±YàÿŽIÍÈ!:RëM·1ŽA9T,@¹ˆ†–™nCÉ"™þt»€)0S-†É!Uæ˜áÕÈÀïP4Iü~lz $¡d¡JýdÜvÖl´ÇwàcæE¦··°(ÏÁã§œ1Ú’zy-·„GŤ«»|vY­ñJ¹(à³OYÛX¨1ôðÚÀ„„B“&J´ã”M§•C„,l|l!¹G†3Ï1cEÁé|,#«6 x"ÿFOSÄ4”ɵf„ߎ%MÑ’@kª©Ì!æ‡}(Ršð8Èr¯šöüõ >&]¾²ÙfS‡í™À±Áï'éýÑŒºz ¥ •™œ@ã’ÜAË"ð¹‚Ã(%¦Í½GÉø÷—³–…½‰QþCÌBñ`_1‹ÛYšÕŸí;>#gq«~¨{‡ÊYÜ*×û!*ga>§ž…—ÏÆMäDÅv!ZWõ,ø|AÏ"·1.zI«£¿9œYBñ|蟃VPÖ¤˜&97¬5ÅMè[ñ¼£ã3A‹GØ{ì¢h±0£s1ßÞð”·Tâ0Buwû€ÒVáØo`Kô,ìòpþ‹ž!¹´.Ô ¡HŒßr:30\Çÿ¢á †ŒR`±6NÉù™\Îáô,„@´ÑBÐâ…öÖG×´ÈO‰ãn¶Ì7S|dØË9Mü;0-”î±éâ0hòL»Ê(zZ‰h”$ ÙèdÓäï;S”¾z‘³ÐØ?wÃHÝÊ!jé $ &Ì>Qª/ m8|$jÅ>Vç^÷ŒÀU’ïˆÐfmõm„BCˆA ) ÃsÉ÷]‰¢eQ–ѲðÏ™: X ‘¢e‘ImÁ‘Ms [R@F›Ža_oÔÕå‚PóšVÔ,Òá óÒËäJšÕ^³p{hvš9D͂ޓ@sLµ€˜Æål*²‹š…y#DYè-îÄŒ ÔwMÙ’ ©…R•vÐ7ºÂ?Ý}Û¨ˆY&EÌ‚è)ÑG‡«aRÄ,|z&f±ŒHj‚¾Ä)ûé{ èp—QW—$™štH"f‘v$j_ ÌÖyC4Fñ]2剚EÚW΢ÇÌ!ze™ƒò5<·˜§|ÇÄQWNe$±(ZÄ…þú×=ãˆÁ{[ªÞQï&ǶkŠjQš7a*¤*ÉÝ—üEÑ¢„6RŠ¢EpOÉÚ; X”"i¡OÖ·0é„îSøSÁ°é Ú)u«.>;ƒ9±fÚ-’eGê¸e ŠDwÄ9¾ò`Õ5-öì‹ê´rˆ¦Å{7x´0µ@NðeÎ%Øw“¢ia™ã^s 7r%ÆPE”ÁÚ¹„l¶”Gk] ‚¥:†2YëiöÙßG,"jaÚ‹hZTâG›=5LЦ…³ê¼f‘8ïrÁ96„,·>AÚ­ÙtqØÈA41R$-ªƒüŒLÆÏ¨h•ÉG>ýL0m b‘´r7©[9DÑÂ,4G½Ž%œ:çRUÀñ8»:Ô³‚î¨%©õ×<ËŽã~S­hé$[ò–\í ”—?+nÊ…s} ÷ûP-¼¶ Á õdZ³ëñ«1R-LWõædMÂìÙ©€–éX â«®>h5±³ªE8ºÐŒå<@Öó9Ø.á\D-4u¢R³sŒ¨Ÿzýx’r¶Ð:;5¨’fHt–µðoÜ(dç)kö—À©È!Ä@É2HùW=j¤E-ÐM¯,thܺ§z»&¬F˳¦…ï‹(!Dı½0ù9S7¥ÝÆp©Xõát:Y/EØBØ ÅË‚\â¼h·vÁ|®l¡]ìפZ9DÙ"¾(Ña¨/Ü•¼ˆ)ƒÙe ¿0¶ÿºg‚Jª€\šù¤;+…5€±nÊ-€žhÁ¡ly[=–ë|þj a ŽNz®(C™S±‘íH3ó*9ŠIWwDZ›ån‘µÈ; %5¡ÇHß‘÷dz)¤¤èZÄånÝÌ!Âî Áüs´¶Ô,I–„jàd»èZ„w®]ƒ…Òg¨™M|Žs2eKÅÝe„rý…2¸ÜÊÌuMže-Цýã8iòª˜D§é-h’z ½ï‘9жñg’>HªF]]öçZ“Ô^>À=p½ ΄+þøÄÿYš8wÌ3c糜Îr•ÑvðÈ‘én0»¹ÞÈ!Òq™´]¬¦cMÁk}ƒwrl,FÛ‡Ò¶»;=ÓµžYB³f$>…<ó±`Ó–Ú!Ç`âu8°Äħ‹¨×óBq&Oünæ`òc3´-¼Fém‹¢³¥w°¾½ÚF/»W[æÆ#G´l çþÑðׇNo®7êêr‚‚¬O¡þ|Ž@IPkï³›æ'È‘B¹ m ¿/H‡‘C¤-‚^Å’éjÎ7jŽ$DËJ¬àˆ¶Ex¼p}Ù¯àÀ#Z÷MZέ‚OÛ¥Úm„ò†á8`PË@ÎÒ¥ºMh[ä¤*Ñ¢éíH‡=*…OxÛ—ÐÈ–™ÀT8 ct½TM¤fÒÕ]>Hag°…U&÷@ǰ+ çÐŒ%SsHñ,ká;T›VQµpå IŽ}³÷#н4’ÿ²Ñô?¯ý‚á³[¿rà=â·$ÿhz5sÍ%;û WÑ´( ÷‡hZ=Ëî{~8¡bÑšÊ[¡ñd]¡%缩ÐIvMW‡ W‘ ñ(ÂéýT-‡CÚ¶7É%µg¸Ï¢v@Š­9DÓ¢,òP¾†!„6‘@U3¹+4{[ÒÈà’Öô£¾ ä9,®ûš\ˆ³/nSâ>eÎoK„¤fÆ9×xˆP iQ”Š•ZÉfÏ_´ˆêhb ŠBbK0ÄÚ™?ñÑ£nÔÕcwÒî !höc×\†ãÓœØî):7[žÈY”!ø¨9DË"%Zä3ñ¦.МÌ}9ZêR8–(jÖ.ò†¾æŸðsûT8«âódK)‹:…€.eCÊ#œÊ=*¢AÊ¢X%|„”…Ͻ¹µf@<‚ìá™nä"9Ç!<ã#‘ç…Æ¦~xTºx̉Š×2ä=¥u—±‡“zŒÁAoÌÌÞe¯i eáó€üZ·rˆ’EÅ×´HŠaÀ7uû  sÆ,Ò@ÊÂ/s´¿æ˜÷yæO§¾XM ÷Mq³qÄ6FÅÂËÄx¨’ñI©–¤,²BòÉGFÛ:Ÿß‘)Bvã‰üø"aÒ¢x+5cÕ(Ǫ¢­7êêrÆòùZæÝ”,ZðcgÃäø¼7œú=ѱÈèŽÙ6rˆŒ… ‹Ä/B$Ø~xÝÔ YõèFB$d, fñÞÀHúXê"Mâ4›J8 Œ…ÿŽs]`¨pË}?¤èXäÐnK ÷TÆ¢ãùë12Y‹lÑŸM¨(jøð î!U£..ƒ4 )elèXd8b—fгõÑäÉê-ñ©¯ YhB»5û¨F²à7Ñcg Iw"´ÁήøšQW—I8Z›¯¤Mû±w‘)DŽ^À4Ï6ƒ•#¶»ÆEÊB» Ø­ÑG5rˆ’EZÄy Hrò¼T‚­Gµcš1•1R3ÜN¹ôß±gæ˜2U‰¶weæOÎl)õÓ@(ŽÂg[JœD¼Ò§ðp ! ²Šf$X"õ³5ÖC$x˜|è©Ö@~4ñiÀvduÆá©™tu×aN»uz]Éyçù£G3gx†O‡z•¨)÷sá$‡ Ô€ÙÝÐ!¤äCjw’¯S‰°ÐæX ž‰Q #UÈ…˜¼¾_í§ÜÖÞñI Á@`”d4œ3ïÇI´nKåp“ó®TºÇAN^·½nfÂzÄvò'ZmmV2›çœ CDÅ¢aóÀËÉ.£.>3fž‰MoEʰ͕ÆG  ri`A!ác[$M8Ê›ûeßva)/§RÞà_LÑp¸Ì;êXø@`Ääu5Ô·‚fŒ7΃TÂìBNåÖ5;“ÍÛI¥)üœsúë¦HÃ#á^¢*G?"@Xè¤7õ™°1…¬<œb»$úæ8ưS ¢/?bjF]}.r¨)ÜÄQ°h§ËÊ6Õ:BÈe ‹7¦Ý6)|å~Wmò>3‡ð•ÇŠ¾i5mŽ)l™§ SN|(X´? œáÊr„ÐýGA&šÙªG/=ôDqrwÄô6B£¬ †3bó÷ kyÆHK2…·úFJuÚ°2…¸Üan¹Çñž±Ñ“ælÒç QÓ¬ºº-çD5…½”ƒQ*\³õ&N6û¹ ñM§/wg-‘ÃqS7t 9g¿"‚Åt"áª"Ê äÊÀrx>kÀ†wX'9åâ Ú»Š¨ø9xÞv¯x“¦•Êhí}9A8ÌÖ6$$ær8noÂjØó„Ë»®äi‹/L^ÂpNÂhØ\ìá|cÖ)R«™°5…å<¨3CG”)X;E(¤P¬ž÷Yuu»œäsj½˜3Ó¹G/û>ó< Eàúk‹Ñ´+è²ó N­ïœš¡cØÎM¥Ñœ߬éwx1vмÜ<ÓÛ“£‚ÎÈ™9Så›'67xÚŒ}M-âp×DØ2¼nîãÍ3ã9¢Sõ2nò]o ]³b5xžIÏlîƒ)èhG ˜¢-·Ÿ!æT­úp[¤1Æeá=?iL>ûT… ¸Í²M'W!&eÎGxÏ3N¾utÕÎ!ÌçÈúÁ%cú%†ºŠnãlmáÕ2Ôµ ·otUY‹Áž;BNþ&z%PG÷#9LÑò·Mò÷EZ¡?÷Z‘VÐË6‹NV£¦0 “˜ÛO¸F·FLá´ MªŸ35£®>©÷(ÌoE+RïÓyÄÙ„/D~r>ͼý4È&ô“#$muC‡p¡‡÷ }D`YkÚB@Þ‘H²q&C¯ñ(Ù™øGë!rJ³7ÞpµéÐíS¨L)–9¹üˆ˜B‡.s Í¥~iTg$ûLè@L+>«Âw»ð‚.0ŠyJHbpŸA°Q3êê3ZD¤²É`Nt Ø̸἟]‰ ,fÜÏNIÐ…½€“xç†jçfôr²oˆ{>Ü5z(¸{y¯)Ô苽š¯»VÒœLÍg|rè/Éi3Älã¤À+Å™2Â%{èœ3º. (Üèua+:¸-1xÊ]ìmäD–ŠòÂ$[2X>ï2êês’›…}”p®kcÛû0¸•Ðû2;äc»r.äèçŠãáX©9„=.•I^¿Žú§UCΉ=,ü»‡ó£§“ïP/FELÇßú–9ÙAQÄ/M-žC;Žñœ ÃËVŠ V#âŽèºYŠ4:À,éO€»I›æÃL_¦$¼ñ€¥jÔÕgJMJBz¥éh:`ŒëùÈŸù Ï&©’;w­x\Ž£*ÒÌB—Ž5üpù:¨¸4»dïÆ Aè–CXùÂtQ¼Áy™=aõYÀGŒTµŽ +BshŽhƒÀú0Ì Òt +pYî›­¶² - ZŸˆ5ɤÇ%F&c1HÑKá¾)c‘fÔÕi¹šl75wº;Îë=‚ï'Πfþ|ƒÂÈötÚµTÞgæþtszGÊ+¡%Pƒš‹õ1%¶-ô¹[‚HÕÄEq.9–H‚p™ßŠŸr´saØ~$ ¶QÒìv"õÜ–ª ˜ÎH&Þ#3‘9é-% A4¹Ù$×+Q¾%ZªF]}ÆÈ¤Jäì¡``›pÅ1ü„8ùìædKô:›:U—ÎÇ]\jfáSç—ßÈYÉ0ìßu-âvóñ8”.L¹•¤ÈjÏpeL- ¡“Må£,RX³&ÌÆÐ#k7É™¯Ðr€U½¾½ÝÌ„¼$áÃ黹ÌéS*"ñ€Šô‘Åñ.£.> C¦ …—¼ýÜñÙ8¹ŒM¼¢ úrw ju'¥‡Ã¥fåjuªðz›Àèoj#h—…óhruTûsñP@gWuI8ÊJ™QêÜB¼P §!){©¤=F—ÉIÙ[Ù‰àWÖ€ÙgBZ¦(5Å´dÌž³·ÁM‰?o<}†uÕ¨«ÏYîŽuŠõp¼ïÙÄ`§¹ól•ª88Ö©jg>,ÛV!YÒHÛ–Iš«Á’ÏY/ËÈ‹KЬ×ãxëÁÌuuÑ |É!†p@¡§ð9Tr) UîöÃw³îN ‡­‡þ›KÍ„õh ªu”ñ{ =èl„ˆKb`â´ýoŸ-5£.>ƒkªzÊg‘æj³‡ûäâ†?wÝtb ÷¤dâ [÷UçÌq™xÛÈ!dë2Ó(Þ"åNw¥c¬!çòÈ{KЭ'ìv-BÝÔ¼Lg/æ€Ð2qàR@Š“xO–`òC–Æu+ ÍužÏ)T§¾™fBXf'W]eŽÝLÎüÉA85öRunZæÑŒºúLRhß•€wê‚G'ât“‰&‡Ë–LQÑïñ:Ÿqi€:…jæêu9Õ7úˆ\æ5îH‹D /ª¡®Éæ4ýÄò=±!åê–!޶ŒÙŽ~Ciáñc-ÐòÆì,‡ðKüëþ””iHa`Çbï¼¹ÔlX˜ ’Ê'}¼Ù±cÐüAtÁ/§gùÀ&õ.£®>; ï—*= Ýð“L -6Lò•K³'GP.Ž6N1Ê@yœŽ-)5¨‹O*·±…¾âÙždÑè-?‰ø”ô.—Ç8¾ƒÐÃÆ 묬Â\ «½ýTŸíì¦J€¦Â}k0 ߯K À·#YR¯k jñ””"ç`É/ÔÞ[—ö”–GGب¬Va¨YŽÎ¥ã–Ï$NâoƒnÎÝ\þŽu§¶îr?,ï€gü8å¦ÁX\“’­Ý UÍõèl¢Tâ=˼×Àý<6WqŸ2ômaPŽ=0Ÿè³ê[FA'³Ü…×I,PíÊ‹-¼'Ý\`‰5n6ö! ”t¢èõ@äˆ Ÿo¯}þÛÉ„Åð€'FBz° ƒ,-ȹBŠƒðôRçÈú'~üNß8äoñ6¨cj]%ƒ›ø);‡ä#å)8Üêš6‰ÍXw›{Ù¦!ú‚´Øéû䢼˜ÌÁ@ª¥œyCù‘‚/‚ã özú{æy$‹¥êY&°ñ˜R6›ñ0èê+%\"˜œ H¯y5+K*Ðó[KQžnÓy œ–g]%=¬¿õOÂ?uqê;œ£™bq¨Aû¸/GÎu¬1æÛÀ¨™_½ÖæÃ0‡ô0žÿpò†£µL&LĹ%¦çF|uÏøÃï8Àæ_ÿåç¿üòŸÿæ—/?þ±ý–ÎÛG¶ÊuÛüíÿücøbÌå'Ù¿ã'ÛÀÉmN×ïËþõç~úÝןÿòÓ÷×ïþé‡_¿|ýñþ¿£ë÷¾mÕË7¾ÿî—ùîëW†DÙ¢—,ø•ß}ýo_¿ûþ‡/?} ï3w»y7òŸÝíÕË¿YŽýÒnÆÞýÌ?_~íÿøé‡_ùµüå—/_ÿ‰ ûòÿüô?~ùrós‚ö•!ü‚ENîÃP6õ—_þó·sþWøÿ,Ê-åonÿòòÖñ÷§?üüãÏ_÷·ÿõ¿þßÿ§1ÕOýüÇ?þòEPçºZž=©TT%Í'ý—ÿÒx’½yÒúmító‚êq …×Pä cfè·_C/¬ýëx’¯(+ßÚ‡OWîÒbò¡’¶x}e>,é¥eÿ°5dï(ëéÛ²[¿d¿­EŸªYõI¶cÉÞ<©TgÜŠ•»%ä’ˆÈu/nš9kŠ…ˆþ=B.Ûy EúÀ¹TdÈá`ȽɈ´ö¤7‰>³³ß]·ÂåOh~…ªÂIªáàIŽh_å·;‡äMÙÞ,Êo7Lb1=k4r6Î9D[÷Pá†5…¡ÔÈÈŸÜ¢êÛ‹Ž4΄šŽ/Cõ­·%¡|,Æ~¬þŽ m†ôì›b3´âµ’Heu[)¯Ï2õYЗIŬJßoš«)î…˜‹¢4y†p¬âÛz£nnÚÆ:‘c·û‰±/"&."Ûï!jQ’ÂW'Jì¦ï8 '5+‡è°Û…Æü—±$eÆüœÜÝ9Í!úÌÆ»0pdItÖãðAÏ6ÕÊ—ìláï˜,©@Tq*`~¥hî¯REcÛ¬Ù¨-ëPCÐRÜ> Vã¤H¬£ŽÂ· É¢ÝŇÙ>’1V?'U£..;#º£Í\‘Wß”®}ã—xw¦bÂ"Èar›8D´ÕíœT#¬nut_¼¼E›!_Í‹“ù¬å3`¤g­é ×Bs0¾>Í­>ÇÍ(éÚ0•p ú pš¦EX–›ô¯?€ÑÏN˜Ôž¿'EUï=€És&Zô¢%«<´Þ¨‹Ëþ|ãÓx%gAõrt8)9¬·&¦<RÖõÔ½J—·PêvŽ‘Sϧø øQÁ‰uâø›Ù–b"§º†%ÝÎ]ÉX¨Ù£P×É6í„k@U†x (9ÐlËc…@ÔÔÏmÍ¥‚h£=jë0a5ZŠšz¤®Ž·HIJ·Â»Œo~‚ŽjÔÕe¹!o½’³Žºé˃ñ’ÁP1e~陊:iר;Â¥bæ u÷FµƒÁ„a‘ê,Õ%ÎR“WžÔë¨j=Xò`d¬} 2—’ª­ÑÒñ‘Ãi/C•Ÿ]Nš‰gõ$ R{©C@]oœë´a5\žõÓËvø66Ñ\È`“Á$ÖÁ–ëúp:²"=$âéN©)ï“…sòG ™\6ŒQ ßgítíFu¿<\5sŒt:zÞ(³hý®Xé ÝiRL z’ƒ| ‚˜2!¯§â Šr¶&YrhÊäƒîˆ¡8hIeât˜¿0V‘N7B¼×ZêNwÏ8–úLX ˜"žª*âŠÌ7!¾p‘C]ѵêÆîMÓqͨ«Ï¼ íâìÅåpeéöN_"WxÓèE‚O¥¥¸#²é#.-UÇ(¦¿ÓIx b¨²UŸ¨¹ÂhÅô²¤§ô²kår[w´®„¥•¿u ôM¸3,ÑÍ>•‡â(¦‹â}{•»" a›Ð“¢VÜS6ÎÞãØÂ‹¥»Ê´%HªF]=ö(èZéiONxüw±üÛŸNÐr ä׌ôß¾´©ôPÕ~wàíì0sˆR:ØKòlò=Ap&ãï4<ͦd›ÊPÏ8ï¡EBÒ—bdÌsáµï–þÖY 2ƒ}ä0ºÏD¢ƒñ¤w1vZБ¢éeºbIŸ¡lR¢Ü†+˜±Þ¨«ÏìqÑ´˜E¨À)ÁÚ.8YÈ 6ByòÁ é²èE5q7œTÍ"‹—F¢_EÅÀ™è]Ÿ Ø'$ªènQã÷5·Àe}®¢d¨€”[Je4^´ìE$¼ü~­àÔ’&z EY’褋êv°'¡ˆ®_N¶Idh1Ù’hIÇ ¢wXuõYõ¡‡®e´»€$x[KNÑN£´\y¢†nÂŽïN3‡¨¡›jžsíž…0†±U­# g¡‘ñ$ÄÐ߀Éãl9­­ic™Á[»T_Þúj2N:8š³ŽÃ¹¼À )ôBš¶/I½ÿ©žP‡8Iùô[Ò$q(:§äɲ%ºEk?AÒ­uq9€Y¾}5 tm’z˜L>ÏœÆZŒQsìI»š„ º¯º%ÃIÝÎ!:è¶?éF¥«J§³/Ö &ÁQû‹SÅLÜ{‡4Çœò–B• r¦Ì>;•Tÿ˜ÔA½­$ªò¥Ížß’ ‹ÎÔ¤yxÈ¿eÆíҫľ%F*&]ýÍh°o TBûÜŠÁÁ $“M >â *H6ÙýºÍ;Í"žû#®Pøuå#ýlCv#ËÜÐ>/o„’¹$$Üwu©J Úl‚Qƒ¨xÎwKÂLŒq,ú>ÏJ‰²ç¸¼Üþùë!ªç  éHNg9& ñˆ“°hb§Bæ–©ÙtñòZº Åóìwš`l7Ù@Õ§$ï&g >¤&åEóܸ”ÔÍ¢zž1^nÂÄF.¹šô¶Þ1ú'?ZM4Ï©"ß]ëaÉ…X]$4‰úl(à”Ls:RøÙñïyÔÓNYhf›‹< å£Ú3Ù÷ü˜9톴ÙsÃ8Ä¿þrñ¹L…‰:Üè8ÜnÓçw¥‘ÿîwåÒ¼¡Z>œŒ¹É!¾mÊ)ÿºëïþµæàÿ·ú_ïþúëÝß¼Ë/ýóÏ_=±å_~úîOìÐoÿåç?}ùí÷ÿú§ßþøóÿúîÇþ÷—ùÏ?ý³òOÿúýŸ¹¢öëÿíãg®÷Ãû¼·ðÞ4ÒPí¿«xô¯¯É»Ç úšÂy_ú0ç*(Xýé¾ã•a«uÑ}9Ù—´á¬ìN\^h©š$:Ô=G¢qlòƒkò}·à “O«ØGÿ ÆÿÙ%/“³wJG~ˆV,s¶öÒ–W–v3†BDñùÑË¥¿úÖ¡Fö”B…~¾¨‚b)z¢±sã"ÈC½±ü¿à2i1È•ùrB/°'O‡öØ…˜]lüË×ÿþo¡kñÝš9ñùwŠÿpgx}jø-”nn! {ƒÄ9D7« Ÿ¹Ù›]õÛð/3÷M¹)^ìD{:T¿3ÿÇ·3à×_þüÝOoþçŸ~=É×ü†¿þé»ÿQ¾óÿ~÷õ‡ï~úµúÞÿwþÿóç¿ÿÇË?ûúå×?üKõC¿0êþ.ýù¯ç?ýñ»?ýðã¿ýîïþ¯¯ùå_~óOøúßýÍ?ýúýßýã銳§ó?ûó—?üðÇþðݯ?üüÓãÏÿæ¿ùþ‡¿üéï.‘dÿîÖëÛ’·š„²%šÛùa(ÿõÝ:•—”±P}5>ö[¼òæiOR&Þ‹¡€£pN½üu îò'!v³ÎÛ0…Tfò¶4gn/ &¹Š›·»í2tˆ„I¬g>ÆS/&[B-J=Èzتdr™³ÉÔªV(-—ƒ'³O„Ì”·G´a;ó3¥›]Çi: ²NJ5p±zBÛr¾\b¨êH¬É–‘EkѺ–v? &DS‰7Q" š£ Å@•†Ë~—\”aà‡ÁC$ÔnTîQ»‰•˜Åf&¬Ï£!w“ž‡¶Én 4Î)O“?¾ñSÚªQŸ ¶}#,‚7q·VÈ6 îˆÂy€2Î&’2W#ª7˜Ó>^ôæ‰CtoêÒâjN±äAwP7CÚxU™4Zø׎ý‡ˆ «ç†bžC¡Íª3 S¶¦”Ødâ(lIøŒÍé ‘¾ÁHK'¯fÂjÀõ›\1M½ŽMŒÝ3ç…œøñRá,Ñöš²%`ªF]}.ÒÍ£è]ÄpGÏt`zÚ™Rìä ¸¼mO؈NQó¥ÝS·sˆÈúã0’ 'N{ë8 ÕŒâLŠ Îî~4Bƒïòú,›?gh—gÎò¤€ýœø¬]Â1šÄƒ(áä'„Ž&¬F̳Γx· Nĸ’œœl¡^S6ELͨ«Ï¢ÆÔ1EÇTsš‡ fâ…L`ØAá8xßžµ1œr‚ðêñ€©™9D 'VÊRk1%7{dn·˜â"ÇÎ¥Ðh9_5.¯vÍGlª5#}á}ái:^9ºc_f^Ì}ÝTq²–‘‹"N‘ÍMX —"‰ŸÓB¦?\ØùÛ’çhM¯-[â¥nÕÅkgä’²9usVÅ©ÞË1טàz³/¤R攵 yE¹ÊÁnÝÎ!Ò8¥"pZÏ3Iœ—P®x& bdCéš8-´½îZÎ’ˆÖÚ8ÖEâf½@mÀ2D è51¸; â+ÐÆ‘{‡æRwQ¢º>EZÕ„Õ˜)ò8öÉüMóÂC Ÿ…Rg59|B^Õ¨‹Ïþ@6ïMD!Ç Y衈 e.ŸlÆ a/\rºDŽ.K±bêv‘È©‰[ÖÂJ„@IæŽç»0Ö€«q¤kà¤}'€Ž9¡îS‹ÿØìflýý™y½uá\tI™¿ˆE‘È!-ʉ ªJÔgÂjĉœô„&¨ Nªé¼oRq3…ò)Ê>ŠMWå^¨’Ÿ5r|Åž|`òYh ø9ˆ£DJˆyɱUÁˆ©:F&ŸX¿LmQ©ãXù2 ™8°ßü,”ÞjˆŒÙcï1Óð:31€[ÄÌùqà${Q(§H ³½Ü³a1uλψըyVÊqR YQ΀ý?¢ì‚í5eÓ«LŦ—“ÄÖÍaoÊIj×>™¹qÐ|¢É9ÂTŠåg¥œÓ«LÕÌ!J9€•þPŒ@]ª'#Í–üÈZ¹å ¤yãÊÁq ]dú4[“(•—Pæì³Ÿ˜>Cz¨ÃŠLIÝ®µÎ!“c«ÎõÍLX–"““«‚ëšxSÕÎáWýÀ½m©uõù\øi¦¢“#MÇ¢¥‹a6ŽþÉ'Ž•9•Ò•rt•ŠýZ‹43LjåÏZ?¨xB\U*÷œ¯Xïh`V.z9þ­¬Üç…+Z^=³)ñæ"t!àk¢øPV½œ|bPTPÊAúÐëc}6t@¦·Ò™ÑÓŽéqQ˜ ()Œô”†ÚjÔÕg4c*I€¨ædµ¬²ËxæC0“KFÈŸÈ攪·ù°pÝÎ!º9q©Ëûen²L†ªçdŸ ò¹¡®%¹Èìæ“³Æ0\¤âj×øLžÒþ’ä-ÿ¨½ø;¿K¤BV ȵƒLQÎñU±™ ëØ¡œãO®‹ ’mᣠŠ^r¿œì‘ˆÙeÔÕç+6ß ajD¹ûpù‚?ܦȑrFˆRùù30U3‡èçPu뼚ò6ÍÅÞÝóAÞÕ™¡ükÏÉK­— Ø,Í ­É·žÅ2{9¤Ø,qy˜M,S†¼ep¹èçd•ƒ ú9ù‰¶W§ `‘{òùÜÛö^>–)‹Cv.}ÚsÕ¨«ÓÈf5&Q¨è¤“&¤½[¥Íâ/’7ACË$Ó‘;6¯÷™9DE‡ªøµ "’ ¦Ö‡ðqŽ9–Ûk¾!B:õ<÷Zϲy„Kpð°Áú8+­Œ#®,Ç.|¼>JZe Ê™Èéøª%d3:³8éOéÁ&§ñ¡IduË‘Ó>=6]=&Id¶c!“x4#…4EX刔2¹Èé1à¥nç=ª¸zÖæ¬>˜ÙÝu+:Îc˜C•"ìyo.T³^÷­pX•jµ³Jö´”^mŒ—‰Ãt{fÚvËx)¢:ê혻´Úvâ¥fÂz¼„¬Ú ´¶P%ó…v@Él ºx>bêV]½v— ‘æ{ñFÄéVjÌîtPtšz%+d¿×qc0S·sˆº†ŸºIq9gèwu+&ýÿí}ÛŽãH’å¯=Xô4@±ü~ÉÜé‡Ý‡Ý‡`€æaߢ"£ªb:oˆŒª®î¯ßsŒ”B.‘.‘’Èfr¦+CJ…hNº737;‡­21Ø5Lªë¸¡^ùËGF‚_Vb:¥ZÍ>Á˜ˆÿƒ†{§ ü»¬Ò©Ê•sRŽRÓ´ Ûx&g8Ó„ˆI˜;OŠŒÛpˆÊÀ8txû;Pl¬[ÕÚ«¾$xô¾ø$Õ K€keM Â]C•{¥k9LêìèmªØx?/³jç*:;åÞ1YÞ~Ź+žΚ5éÑ©³“†X».WvÔv.ȘRÂ[n¡¯l›´œ¿²¯] 8/Úa†l|šGwöTz¦ 3ð2vôI³ÉXÁ‘­=´X¾ßC³nÕnÔi›ªIL#*ľR~'¼4¹vmOU¼¤äNU;íŽxY³sÍ*_ƒ—þ$*ׯµÆ–c½‘Y!60WøÎ”èSGgä‰ü:úŽÈ±—ö±ÂöQŸ JHrÉŽwGŠòŽž“×L˜Ž˜”Þ);F&a“ÝE¿š¥yñ;ÐÞ©ÕYs†Ú#¢úŽPt,‘«Ô*£o¸€­Ž±¦+:b‚ü˺«èï Öa^\TÄF«l*TŠŒ4V™“¾´ùåRQ‘À¹äÄ$mJT1,pJnbƦÃGŒpêaR€Ç íèD§Ϲºõy&ÌÀËtì¥L‰}5¦Tˆ¦IÞµ|3é9oWŒÚÙõ}!£w…2<…ß½LI‘¡º 𼱰݆\¡xžP=™º_MQÕÎU„xÌö Á²hÉNRÙLÉcäãšxIZªtçÙ6nM©éË,s;‚·Š>w&wžk´òØ’|Ï‚)Oh0 ³.1ÿ“p¯ …˜b>á"c¥­¨ËpÎn¸¹Üð㩱ÉÕ–ïˆ4¥Ë;¨ä›IG¿½0ËÛ€9\¬5rQƒŽ{„jMpþ8b¹vyô¶wsöߨ"$/u;ûüp¨aÍäJG=”FÙîÜŠ­Nù‰¤!‚»Ë†–°Õ’ ¨ä:¾ÅÈüPÀ5ccN*ï¹Ó‚òA{„gÞGó™ô¼‰äïù¤´Š;‹•hw|ïá­>+n4ÄéÅ„bW”ñ[6o¶K9Å*&„­‘ƒ‹òÛM7êmsÉ#9ü.A B6ÏÜM¡}†8­wÁ7Îð'ì`uµa%›ÈÒhY7s±aæéüE¨‚ÏØxÌ?bÚ¬|\‘ÜN´†óPÓë¥ó®5ÞjWŽŒdúÃwGKGÑ@FMfákòqŽ[´†)A?Š–¢5Ì Â™hY3a2ZŠÖpتsNé 0QìØ‘w¶$µ >ü‚…¨³ŒÚ9×k…EkXP—EKæ‚}P¶±Ñ´>©ñ6'Qf?žà¿XÖ¬\Eg˜­2sÅfD\ ë©Í\•Ñ+º–¢2œ®ñ,yç\ÎEW¨I¦Õùv-N˜BäY “•k|õãè]4†ãxÄ, Ãú œ¬0'Ea8mØ ÉhÞôHbí“Ë’&O¶i7b/Ùè}áXÅ { $âr#¤`‡xAGQ·Ñl…9宲s ]GcX_¬Z‡Žd‡;‹7Õ+öЋȰ*r¯“‡Ff;£tÁlÇsL«nÖD?WÉ›Öé„ýU!Þ3Z㥈 ³~¢.2¬ë Æ™LLÑ>—'Ëô•£AS"‚ß%kögÕÙt…±€:¸1T…YãF(¢Ø”yBe!ÚÂr;>ÏM8Sz7Ó€ÉH)ʹÚ9?IrÏS$AÒo»ÏífÕØJáé8ÿ¿è ×ô'UpÙºØ8ÇZþZ¨¨ ‡‚ål1 ¬Û¹ŠªpbȼP•AÑË[lQiíVZ¾äùC3ÀJŸ].ó .·1`Ý+q[ƒ¹ÒähÈgaNK½•¯Ñ8OT…ýYöLÆJÑE]ÔåÀäLÁ‡7"03a®ƒ{K´¬µ3&aËNTø^ÒE"Ó–S¡q› V~ül§“N÷žcæ:‚Âz;,º{)ZRZDÇ#´ €”5ýÊNOØÌ?´Ú’ÈÑç#ÞO–'ãoªõ6æÖeLìU,Wñ´UJÔ„ë߉gåú¬û &Ãe'&¬ª,#ãÀ”L’ Œø)‰¨ìúhY1j?ä(ä ãò˜Nw¢–Ã!ÇlôÒ5Ÿt´ã9KQö« eÕÊU„„•´¯ÎF„"Þ–eCÖ*ö±¬)[$:™53ó³ A·ÉÆt46eZgY ÷Ö¶¾I“ÃMŽîø˜U¤„mª Õ*Dš¹`Y³a2XŠ–ðÜ£ðàÙe`éÆYCÿ–5›v#†/Ri!a_$q9ÇÿÆåÆ{ÍãÙXRH˜ûíò`Y7s!áT4³N„3”t<IYøtWt,EE˜}'ôu—ŽŒ"ÚçPŽŒ}™Þš›Ñ×ã~Ίeñ¶má¹7€uÂz¼fH„•=“&œgÁ  ”B½³…ìÃçΙ\ј’uë´ÿ*,«FíÆl…Žiœ_ Âîžz˜Þ(¿Ã ñG;òˆH´!¼Uᬀp©œrîºf®¢ì¶g ;ûÏÉ’“– d_Ö!²81åUõÝL—Š¢ä»l\ŽB4©<ÚÑ3ü‡òÖù¼ ý2LóÁDÌ’Ì’~•›ÄàÓBg*ÓG«yS9˜TÄç”7¦›0½ÊÁ|gˆëÞ–Ì›%.­&›P“" üLÌžÉ[7٦݈»Ö;¡D8ØÍñK ¥Æ˜ñÖûVáÙW”ݨ¬ïÍñ9ÙÈUTƒãˆjðEhÂ:Êdéb ‰‰ˆ¿1¶ÕeƒýPü}ñÐ|j­Á*††8Ë&n–«‡©¨-;„H°#ÉVN(>©¥ftš-uÐç‘g˜0*ƒ›PÉ¢ eÉžL ¶5jP ØHåÂè!ÔçªHz-•1·Þáÿ-¹ÇÙ|…úÜ‹”ÉòäçuCW!?ÏE`6™#ƒUE*OÛ’ ׬:4í 8•—÷³³íÈÅ2ðÎØ‚ñi’ÊMkxMÔTm9ídúó ¥¢£sÝ ûB¤fš01…þÜŸQ®%:ÓžÔNÎ4ÑxD¼î{àõ­µ3§á¸°NGž¶5Ýšû0 ì®k´­ŽN—S º-¨–£ªÚ¹ :¹$® ÞÑP€ƒy+‘|¸˜R+Vž z¼Êufì Ä)9…œicÊÊܬT¨BFÙZçóaWÂ}6Ç¡žÐ §í°ˆYÿ‰¤ÊÀnfÂdÄ"ôRYx}Õ¨²§=P<øÙÃ7媵³—Va;VJ>±0c¥ÇÂõäÊm°ÿ·1x5~ ÞQ¡S¥nyĬ۹ z.Úr'³ïгÁQ«ÎˆQtT+¦-…=^E„$¯ LQ5¤CjmÌùþñ¸e- ÌÌM̪MÊ›ãÓ!BW5šm!B/y;ofÂdÄ&ôX¤ê.§¤˜ãÑ¡“FsfÉúÊ96õ#6¢f]CLaB'½×²âˆà±yËc*KnÍg;n£ú£‚òºëС©VMÏôåÖDuÔÝBé5kõê„èêtñȸTÐfXG}®p»Æštƒ§Úmr ´·¶ƒŒèI|ÈÑÉn‚HŽßÁ„ɘ)œè®(¾˜"Ô ÛœÈ #žJš‹Þ7MdVlêGl;uàÑ<¦p¢‡*-ä]ץ̜ ³O‘•]uVtWíX¿bÖí\…qù|GÌ/èâÔGÛÄhE­X?$¬èþª<¦cG*FQ”‘Â#hñøò-…ÅGÀ*ûÀÂNßDËT€=Α ):çñh±¥¢Ÿ-¶œeÁd´Vô8Sò–…ѱ©°kgÁóñYFíÆœûõ5rW:Zt[Ô¹-˜R* ™ ‘I9?~òÓ£ûut$ꆮC®®‘½dFBæ}hëIÕ³êØ¢(Ò\#“á’!jÆ’ECå–ôK€¦d9Ä}X”Ìji´¬›¹ }º’¬Äl¥ øÈ•»eùÉm¤Á«ŽÍ92SGf(ßeCÙ I©\­ôýeyœ§‚²gŸ%ó€ §”—dP¥‚Ñ™®¥£¾ªî0Ó„éxIu/jÔ3Ði+¬ipqs“]h³såÌo™u£v£6¢öX§Q¯ËÎÞ%{™á' t;[ìõNqby³jç*4êá&·ÄþÈãrEY¸çãŠeEB£ž¶Whi¤`Z—ÒQžÁRM;«(‚u­R)Qí!SÍ锫۹¾•gt¢»p”¿½™ 3ðÒ¥#•—Ës„ —Ç·‹¼»VÝ‚ slêGì•lhãÊI$S7‹“©cR·Àv2v"‚@ð`Ç;}„M݉.–uCWáSwÅÑéTÅS,0Å«6§äVÕœl€ÑWÈódRÕ™#ÚK+ªxÚKg½kUfždyí†ùÔ…ÄeýJ§© ñ£IƒH¡¢ÒC:õ|×nžyf®B¨®®éñÖ¶.Z[`%ÂÖ6ú¢áeNu}MºÒ'v$••C:8À§Ó7k¯TíØÀl)E¼s›´=qZÈ©ne7?9Võ" q+¦C¥É3Ç­´™§(LZ)Û¬æÒ»ß²n¨bÒn¼¦oŽ85d ü½‘§™ðŸLÔl°Î·ÁùÀ.T'uÚ ›Ùð;Ìê7r%Il€ÈÔ‰P–¨åÆ‘t÷îLˆ×¤Ãf0";­Ü3Gë#p”LjJÓdƒèÉÄ…u̦µ²œ:ž‘ʽ£ˆÙ°– wùD¦$Ýê˜ÆÝ^'÷κâ3¬\E%Wm‡yÄ/Cĺ)„PÔi›L–!¯WDIÉuE5qdѶ!k)fIº¨²ºeJc ¦‚káÈuÍ R÷8¤‘ëkªâ¢‘ëÎðúÌ4a2Rv¹îœàã (ŘÛ5‚ç„Ç‚·æZrK¤¬µ²—¤ýh›¾Häæª˜â=°rË`Ï;Ê6è¬ÆvD"7Ž¥ÐòŒ«Häº-žËTƒa¸T*NÃYNÞ¬-‘› :‚©C³*´¬9.†ÆJãòíø~ÇÑ*:×:G¿Ž“ÿ9.t‰Ü$p8:ÕuJÉ*ËÐ<&¦Häé[ŸNo`c˜nr†kŸý\Sn‰˜U£ú1Ö(†ß"K,º?úÕZglœÇ?«Žk«‘÷Ëš‘«Hã´´\Ž“Žu½Ê–Geo¢]‘\HdqzÀ/˜Ï­JŽY10Ÿ’j»@øírh½‡O§™ÅŽv¼E7ÔúæD÷L«Î<&c¤H⎜÷œK:9‹Í††¤VÙï!«Fõ#–œ,;Gî‰Hâêjƒõ]|J›X¬­›®q0¹ñ®FĽ³àÎtWÖ¤¹ð°ÃØÖY_òàZJ¨ZÖ–Â5W`¤fI„u©d–3@ΜnÆ„>ŽP,â“3”LjwzJ B¸Õ¸N„pÍÜ eÍ€É):¸©Þ[2‚FžT,)3Há翇CœªQ»géê­í¢.K Žº-@Ç&›?ž²A?²“ÀuEMÎr(Y³sÜ8D…>)±Ž‚ åQŽ÷T\p+r u ¸ÂxXzÑ£,É* ëæ”½¥î(XqÊdÖÅ=Bˆw\ôß à—oî?`‹~®›0-{ñÛX¸OÀÉ# Úœ")—çsSĬµ5q\­Ú·v{/.ôÑÓÚlœMœ¶rì-·±`ˆXìP§jæ*º·¦Ðg›ˆ)TqÌ ©€Yd²[1øÙ[_¨‰N=ÔA˜áPž¥I¶5ð7—ˆ¾áÄæBƒõßÅž®vª·"t½ gkTg\2VŠäm*@aÂé ë@ ^4‰ê²óaû¦G:5£vcö£4š¢ÉÛZsò]êƒH÷B¡‹Æ×Fo*ç9"x[kü»[uPÕÈUänÈYÍ2cgX°8ËÁ ­NfM˜¤Ú­š’£ÃÏX2ú:¶. ½?FR½EI‚#7sHé¶*:m²ð-Üüò3 Ò2çgAdòšbMðÛ ˜æ¶Ü´>¨fÔnÌVt}ǪJ©q«îGPÉ?½Ùo¯¶V±Ã/k oÍ ÓK…uMnó}*瘹ŠÀmª¡ìM¶µn]F§£0I—´çζÚ;ÖÕ¡¾í°åe㊦Å<. ÍCë¼VÑß’õ‘mÞ/Âb²)`šÄ$ÕcºÁNÓêÓâ Ѷ­SùRÛÖ µÅ­-˜^hNiÛ|Fݧ\3o¦¸D*aá´õmŸË’®M7j7fÎÀÑc¶e¿ÿ}<ÉQÒ†”ˆ>™†Š'ÆåÊAŽHÛ¡½Y)ëv®"n«†ê /EcSËDXáuoZ£‚Z“Ÿ’ⶪ(ÿš:²¿?9UøÉË“ñ7 ºÇ‘Š Âì<=¬EÜçAeÛPÓ˜%AçÍ.?)ƒ•˜<”Bt­RÞˆïFÆ¿´`å,£vcö%ŸÈñ=‰V¼”qºR¦Ô##[D‚¦†”ÑWYÙU+WѵMƒÚ¯a‰UŽ(iÊ¿Dò)W<óUÛ8#­W§©`±i÷fÅ“ã |î@* "»ÓE˜: ¯Šúw&c9+i;Ä8™EºuN*ŠŸy˜DÛD8Y3j7æNYyœâ€’¶÷âE ¨|«ÓšFÒÏ@ šæ˜êXÛïJx>ÇÎU$mm±gLÄ”dTk¥YñS¬‹‚•k*éPÐVÏß°"Zƒ=¿—Ö a¥#E’‰Be‘êTýOŸ´Ò©(¾Ùå§ã$¥lëõîc€”5PHg˜Á:œè—±jÒn´FXFÆY´DÂVß©vr<íHÉ `>øV+ÆÙA\Ǹ{W¥±9V®¢`k·v¾Ó…h»M>¥’µ(Q»Ðèy0DÁÖÏ~oUËé‚ßÃÙ´>…[ê׎xrÉR4/;Uv§šÎÕúpD½ÖqÂÍ ˜‘BÏ=+ (eX.§ 7ÿ;¸«Fõ#öª'‡½'> cØÝ¤s†ÈS¯%`‰6Öà N±–œ¤|m.8üCʺ«¨×škŽqå 1œ²:b»u˜‰«ŽŒ }C¢@—‹% ùt–㲎Œ|þ–2c#@ÅP.{Káo¨™rê±P¼¶vŒCíÚ3\ó®?(c(â•Ë1É0G C, ¡øúìàÿ–@Y5j7bis«ù“¹ÌB,“ªd-«ó® “™'8µs¦;ÂdÍÎU´kÝiqáå éOãm•ôr¬yÖm•*Úˆ'ƒ¤a¼íJŽK&Œx»¢ÉHé>àUžý0æä(•ºµ•’£2ÞTjEö ‘«õƒ:¼—%œjAåÙ½&c‰þf‹•Z—[xt’%àO¨V›ëÂÑI+šœgÀ „:ê:mÑy’›&’¯kïÂó€dըݘ©î1^‚@­Z] fï‚’xœÁ¾mèªyï*¤j¢UëîÊ;9ÏÌU´jí•@*´ÆzU(Õ:N!­ýšÁ6‰ âü`ϧUQ¥"- ‡¹M*©¡Ã’[×òÑ„s:çÖ»S,*Õë îþ½#)¿ƒÓQÒÉùà?’I'8âækµý*&«FíFÜqëŒù’½RH.ÈIŽ1èÛÇçǧñÑÚþÏû(Kaf}‹ÍÏEã]ãyì¤ÏÿÜÿJ±J÷×륒?Ç‹rh +x˸C’ì·…h¥w‹°|÷÷ÃU)+ððåËÑ?¿ýûþf>ýþõËËë¦?}~ø„ýðË—OO?|øÏO?|üòׇÏÿxj¿~þ¹ò«¿øúÌÒÚ×ÿ}ÿ™Ý?¹¡Ç€eÙ®¿Qjà6ÙjÙ™ÃAUÎÁƒ`›C,j_'?ÞkFØLAÕxÚê‹Hntþ±' Ï´È£Ð¼ÎøŒÍJ•NÆ&ï›y\YŸÐù%=4ÌhJ½°eŸ¢ËŒ.GÉý#ZÎ.ö ž§£ú§·5'm‹NõìÖC÷ DÚ뜧p­2@yo(®´b²9áGÍN®äíä¥@ÊØ4ÀZ/6þúòñŸÿéåáÃóÃÇÿÿž>¿ºy•þtdx¹u`ëÕÒ¶yà`S?ãÀ‰‘Ìù)½M,<#<)«}ñuüÍÔ•ïŸÈÌуÝvÏêúoÛÀë·¯ŸOïü—ϯ[ùwøåÓÃÇ÷òÎo/ÏŸ_‹÷þÖ}ç_>~xßÿÚËÓëã/Ň¾wßů¿w¯~zøôüñïïþø¿^~ýöËæ//Ï__7yýðÇ÷ÛÒn»_ûúôøüÓóãÃëó—ϧŸßüÛÓ‡ç_?ý±÷%½ü)'ìéên*sƒ›z8½÷†âŸ&ªÜ¤¤Ý‘ró¼á£>µÚk]ÿ×õÛgzÙ]\ÿjëS•N Âû6$FÛm{Ù’´5wî¹aè*Â%<Ø`&è ~[}#¥ ‰ŒÄG¹èb«‚>ðÛ¿>¼þ2î¤ú BÈþ} ÷ðòõé¥CœîgxŸÝàÒ¿m´¥¿Øxü7¸ÍlÈÈBH›Ý‘á¶ñ­Íã†íbX5NÐPÙkY³@›B!ob³¥LäFµ¿$ŒÚ9³aÊYEG‘©^Göü2Ä@V ¡ÛÈßqxGþ‚—ñN²†<ã[j²:gñ5ü æha×&âªøªÔl#~#³!‰E²Žb¾Ðl|ÎvÖÈ0¶±›l.¼"Tuþàx)¸ìý•´Æ…zë´ÜÚœs|íH>°áÙ¸æ¥Ùc^gŽ“ÑîÀ¿n°-6Ñw߃/ÔÜØ£ÙÝèÿWÌ,>kØ:_>Æ´ûò²}üõå·‡×__žçÓ·/ž¿â˜¬ž^ÿþõéÛ¿üáññÛ·oÝŸêrËì:P¦ÓþÛÊk‡õ¢Kج%׃}-æ¢Þþpb^ÿµC{äÅó¹”?Áü„ùÛæÀÇMF<¹Ç ŸYzÚºnãv:ï… ³!Þ(«ñàh°ÑSU±Ä$;ùy7 9Ñõ³Ö'Ó½‡_hàÄâ2¿m¨óm´áô’GÌ»ËÙ ÿ=Ë—¨hø2Qußé1o6òÝýº¯Â½k=¾iÓ›~ðR¬Q›_6Þ`af,,Ñm€µˆM–« 9ñÇÃKX­o“<¹n b© ë;dƒ×ˆ[H¢…7´·™—1²jºÅê9áx ?£G~¿,ðëB÷qþÍ—Þe+¯]ä`µ 1tp’•¼!ëTuvñb˹{'f¬"@º†&€Ûð˜twßÈÁJ I¬TÑÓf\Õyù ƀЍö½eò išëV¿zðeŒÝK—ù²¿Jn¼ ½K(ÏL9¯r7Ì$ÿÞ!üš|ÜÙnÔ&ußíû×Îç·/ï? ˆí¾K§îµ‰Ýòbx÷”w¶ˆd<ÐfKVb…¯3‘{CÔ¤@ O!)·±¤fşȃ@"-²øQ ›?èÝÝIv.ø¬ãÛ;,™ÄïüdžâÔ6Ë´â¬ëì”%uðÆnEm–f¹€'f9¦Xæ[œéVæ§:6œm7Û»¿6ýW â&Ç)Þ}w>z«sûÿrãˆ,x¾m•í÷)-sSabsj"‚Â~´Ý=%%?ÂeÖý§£§–e·d42åûc¸¦ûƒG ¿nm*ÞéVâ?N0ÞÚƒ8÷:Œ—?ߺÿ|ÛÿÜ~͇¨¸BGŽAèºÙ¡óÑgkZ –ÜÇË<7OFî'vþnBİ2Õ†Åb˜.üGoP(`ib%[B²ë³I-)?1#R  +K±{¼áÔƒ7D%ÚÆbG‡+a±Á`Ah`…úÃëdà/5ì›M9ì_2+¦+»çÙ7!(=ô8ܹ›,éÅOìì}—­‹nðÃË>øó‘ûhè'{𡦡cÿeÂ-wÝ,·Fa…ȬtQ¥ 3Þpƒ)ÞáOØ ¶™Ý¹Àü²¬NxO„˜Àª$ËJcInäoŸCÿŽq¸—¸j¤J,s• 8æÔ`%ŠÃ¬î±Ü˜Ýwô(™‰7!:•dß‹‘î¶ÖÈ 1܆*˜\Üΰóéàyù°–3njàâï³dxL²#ZO¹ŸDï0Yz-écô†$(ˆq1퀇Úï_»6¨¬¹g{òMÃãOÛ-~o1óúûÖß¿¸{=0‹rHÕÎwܾUÖpÝÝ›lÅ›ïyÃì¦\8˜rnÞ”ÃÄ„Èn?ë˜MçÐÇØí†œ}ÞÈ\“Ýzhö…<ÀÀÊ/r{wóok¹X¢°Öâa)Ùº¬ñŒ7dzäjªî ‡Òvñ°ØF2vÜeŠy8l{r4Ä@ˆY:#ëØÉÁ4V¶ð–¡»$œd3bbHŠ·‰cý¿sŒø˜’P¥g¶®3°Hp„IƒKmy%J†uq’s›.ÄE­üØ_VÂ>G÷ —íßÝý]®F9äÁýºÉŒøÖý¹`sÒ‘àå#a|ª±Cû\O>­ÃvVyZ”³‘?!°@g¸¤¨íÞÒ>mcCª&-™<.©!€7ý‘wщ:î£xï»›‚µí˜þ2¯žÙîwÁp¦îßæy¼§dŠ0[€ 1ÈSô±©ú&ÂãˆØ=¶Ú4ƒ~nºNöyÁŠ=,ÅZ¯JÃ7㌕ZªÝ«-S]›æ¸g¢ÖJõ£þž}œy@ ÏK>ãdÍç„ý= ìÒ Bߎÿo( ‘馦ó‘U÷P乤8óßà@{¬|¬;.îæ¾GÒN¡ÎŠâ üI:ËÄ`&›²—4]uîì¼ ÓѪK:6uÁÓ ÿ¡4jó~<³‘NògSu‰î‡?ÉQîûéÏÅ1syôÌãÙíóç°ûê^=||þùó»o¯/¯Ýž¿¼tçËý‡çäý×||zŰýÆñ~þy÷îß¾¼|8~O¾qiÝ~xæªá÷|}yÿãÇ/Ý~}ùòóËÓ·o|÷õÇ÷{y~Å·l?aŽ¿ûø²Å[±ŸùòÒ[ûã÷'1îÛ/Ï?½¾Û½|à” ¦b:åýã—øµC¯äÝ?}ð?™ŸÒñ~ˆˆa°NÅîWú¦ï?=¼ü›¡üÓoÏßž|þÈ_–?>½/‚ßùíéå§_þ¶ÿ÷§ÏøkûãÃã_~ùòëçïýô+KÔŠr€¿à¶Õ ø‰sجmÐ^K†)eÙJ™Œ‹LK*Sœ ´£ô·Ô­pDmˆxŠ®kjx{²\3ÔÈÏ\b‰üžÈœ³’OÁ"¶-cª(alX…²¬÷ Ôαct'Ë¿û×½Ú­w€†’õŽ™_5 ËÝF®n Ë’³>’gù`  BÁýw±ˆÈPð"g_œ‚k…PÚú¬ËènÄAÆ¾Ž¨eŒ”òiÓC_FÜË0*àªÐã˜ìIÂåœ;H¬91â¼9jbþ;¼Š@æÀ ¢ËB Ã~89ýúý1=…j²e8ÄPG1IÀ%з,»@œñ¿™¥¥kÉcG¾›yJ/B&ÏXÐýtì6¥îT«Ûï(èÕǦ;šÝÿ@ïä8xaÔUâOûO©Ý9YŸÀ¶¦;(¢Q’4@¸#IƒÝ!™œÊÑ HOÆ‚áÉRWà¹m‡þÔ‘—Øî,Ù2cµpòC*kú̈|Iÿkü­¡ & ´‚ÍJ)ÈŸq§g·¦]8('¼“ãͶhr(à”L¢ ¢‡"ÆÈëÚ.¿[áF< —Æ\‹ —Ö¼(Nrk+‹Ó˜Úâ<.àI?6Æó™¹¥G9_6™xdÌÊÔ.\¢Ü¿2,Œ 2 g‹~™ ÝnÑý‡[Š‘äšâ©®xkJÒp@x¸²wÙXf²÷¬ñB%f™÷fœÉ«Lm þ80ÉÂm#åz¨|’™ X{úÔñ}ô¥ý~[V’´ ‘±÷<©‰ôrÕ~ƒÅÝFX+)LùËi®ÔŒ› ‹ºm™[ ¶SùX„oîî¶…ƒl?3Á\¨Æ­À“«Ý%öÞÁ›~³ øÛØ®yrË11dîW Ùª}/ÑöNÕï+È»êÛ®sV¬uHRnÔ”2LÕ½eað‹Twc±ïwçRrû?øöþúÿ~ªÒÃÅ"Carla-2.4.2/resources/16x16/document-save-as.svgz000066400000000000000000000222011420416754300214310ustar00rootroot00000000000000‹ì}[sIvæ»W~Å‚©s¿ôLÛ« ;¡ o¬íØÇ ˆ„Ôò¨IIuKýë]™¨P`‰@QFjÐæW§òròËsNe&²þô~~{öËêæöÍõÕO°À“³ÕÕÅõ囫×?>ùÿ§óxrv{·¼º\¾½¾ZýøäêúÉ?þÃßý霟Ÿ=¿Y-ïV—g¿¾¹ûéì_®þr{±|·:ûÃOwwï~xöì×_-oÖ`¹¾yýìéÙùywçí/¯ÿîìì¬+öêö‡«ÛŸ¬å/jno~Y]\ÿüóõÕm»åêöïŸ Â—Ÿ„ß½¿yÛ$./ž­Þ®~^]ÝÝ>Â϶Ä/ñ_W/ËÍêöúýÍE_—‹‹mÉ›ËWèPí_¹ af>zFtÞIœß~¼º[~8שkÍÔ­ϺkƒäaR?|xÛé쳕iW·Kïúé]÷ï§6@éÛúª»sU®VwÏþüïþtñÊåÝåV6›nªÙL÷ÝÕòçÕí»åÅêöÙo÷¿¹üñI×j‰Mþ?|¢î/mnÚ¾$Z°^ìøsy÷SÇ=Š–üiõæõOwCzDÎQ9—×/—·]µŸýtýóêÙåò—7—Ïþ|}ñ¾çÿ~øøzuõìîæýÕ_žuÅ¿]¾|»z¶¼¸ër»}vûóòíÛghÐîåÚ5·ËõrÓùíò—Õùò¶t-ýmÜœë÷wïÞßýÿÕ‡»ÕU_ÉN[ƒêúËí¾Oà8ƒÕ‡w×7wç¯Þ¼]}¦ÐwW¯'oùpù®ëwÄB:yýãÖõèþôóêny¹¼[Vá¾ç6ˆ7N¤£ùÿ÷ÏÿTS-Ýqãÿ]ßü¥%Û§ ,_^¿ïº§Ý³–»¼ø¡£ÚÏË»xóóòõªrúvÔúÓ³áÂHøîã»U ÙnÆçÔïþùùM½éٿݽyûö_j!OΞ}ªç³uE?ßIÅ×­@MÐ%6ÝÓR—«W·CÏÕ”nz­3 «åÍ?ß,/ßtÄiØ6.®ß¾]]t _¾ýuùñ¶‘e“ÏøV dzò©r·w×ï†ÆÞÞ}|Ûµ±‚ç]–×7?ü=´ÏtÝY‡®¥?àŸ ÷\¿zu»êJ†Š ŶLjaRuñEÅÁTqø™â¬×kzÜòIM>¤(pŸ¡(_Ö_®¨" ‰‡+ ¨0Ë ý…á,…ÉRRr§¸Ãõä|D=é=½jŸÇëÉð‹‰5‡P¶GQGµe y:[Ч´e 'Ô¤gðÉ4ézBMz†kð¢sê©o-¬ÖüËŠƒ½þÅ­Ü<¢ÆfQ‹ ~¯±F­/+ŠׯÎÐXøÉF+“ë©+“ûéÆ*“xL8GK±¬ßGk çiéÂê÷‘^– ótdC¶Sä9´n(}€^Lèæ·ʾë©äïëÅ Œþ`Ì€ùõb† GÀí˜AÁ¸€ðnÌ%É0l3DRIS„iZ˜š°`¦cØ2vÊ슄à(Ò_ü'@¡ÀªÓî ²Hà*?öªXDÙü«˜Kf&Q̇Í%;O˜Ë/ÔšiîjÍÀÄïë 9iWgH@ª:#E¤¯ 3,Ilú°ÊÌpBe_+N‹‡âÅ)!£%±d0&”!9%Ô":` càPŒȳû›½„k̈7¾žÅs°'·‘FÆG¼„åŽí)¬9ÈÒ¤l‡¢[“o ñÈ6…Æ–—½`*¹ŒZ/T˜ ÓÇ–©é¸í`Å3ðËÈ]ýóíònõ$+±€§G‰J“¾Š™b ßc20å+¥˜¹'(­Áææ!uyBA ÆÐø&BP)¨ûƒÏ(éÈ d*BYã5+î  [(j1rj’\Ôǘ” æ<{±:43ïÐðÕit+‡çºUVX‘à¤í:…0qÜÆ^L¶i:llðÀ–óŠ× ðW?†mæ/Wu§çmǘþsÒ°“P ; GvHil}·m4/wÉ8Ö<×àÊ2-’¤û»…nJäqD÷BI$1ÔûA‰[ïE톉¨CÝòëDE}5÷˜8š$¿"«üaVŘU»s#V±Y%3ü÷‘Œ8)ØÄÔ¾±<|&lEÍÓwç96]˜võ³ç–¢œ> Ó"á½h**ŒÁ(HQ%_lÃZR\±Á iÝÊâù€ŽJc,@‘:ªS!0ÚÂ^L7ì·³Úb÷‚¾°,,®Ð‹ÀоFE2Q¸­bsSÑmÌ¡P(´L4­ÔLÇhRªúvA雂†: Ø‹¡þ[èó5cgàq¿$Ý:µLc·þ-ÓµÔ†rF™PiõV³çÂ*EgM†á_5ù†ÿF|/Ö«Ÿˆ5“ëgGm¨bZ#`p˯¢5Õ}úbþzOÒ xðÚ0k²ëGO×Gse§_®ÍçûëÂ1± Œã•àqúcKï.ý‚'éxéw€'ëQ{Uÿ{÷ª3½úå¶ ¿N@ è²Ï`#ðéfÿ)Þ¦@xì),Z'?òéxÿƒÖpgǃ ÉÑÕº’ _qž»±;þé0Ò< µ¸j7 *šJ< ¨pw屸ªTÚMFXîa„Á(Ðß$AlùæÔ*A°U†»¤Ð±\Žær‚ìXþ›ƒ3s¬Q)’¬Œ#²c…&ãƒ<…k¦,° ³ JÝf¡b‰ÍF"×Ð>°XX/ÈK¤ˆG¹‡ùÐ8Šrà ªhøx¸BQO¥±rƒ “:•ëVBYdk˜¤l^«( œ±ÐÂÄ$l=<Ž>ò9Î&Ç1^@œÇúÄ"J<6T‰ÇúÔ@ômê“ó ®Çðá\,"Ƴ0ÅcçùˆŠ¡o„‹IÙ‹‘ì!!!Ak蜄h‹ó(FDŠºð¢n&N ÈZ-n6=Šg?Hã¤~‹€…œ…hgƦ’•Uvq³ÓÎF]Å’Æa~vÙU‰7ÓM¡&ºh®Q3;FEÒý8ÖÃúÄêì'Ù'¶Ô…äÞlö¬Lof Ň–vQ,ĸŠì+}w©`o“H¿R“Èh’9jf<¦E³O8?Ù1yÂÓ6v>€ ó -­–Ô’ ë¼Ã(ä N[TáS:Æz:²±Ÿ’lœÇ"%îtÝ$™¥%Åú}$Ù(ÉŽ¥%fšæÒøˆŸRÄχ—–ÓŠ˜O»£® Û§% ŠùZʨ´›¯% †ùZº|©z±[ÚѸ3F\.Ý=â à˜MeX ) öÿ²âååŒÎ™æåÅ%]ÒÈ¢ ŒŽ“õ‰ÆÎ­øt©‰êÈ¡Ó:ŽYžÌ8¬Xœ.ŽÅDg“9ÇzÉïŸànâ y(%ÍærÑ©.g‹£¹JÍ9—´~ë* &¸iγoryqñØäÉð„¡zâéÎN>åùÀ©óÔxøV=@`åXD]øb¤ð˜½šØVF1ÊøD.ƒ²»Ûˆ¨8Û ‡#¹i#@‡mÄB¦£Ì± ;†öÌØA…#ÙcnéšÙ1ÓÊ„ƒwµcŠ˜ êžMz¯ÙîwÑ„þúê7Ô9cî¦ËùÜœÜ":P󽦵/g§Ø\9 {d‡:CrjGñ˜,6wÃòqø ó·eïWÐfóûÔ¯œÃžôã†ñO¦wÜïߟÿqÏ6ÿá·¿˜øysTxÞï)¾÷|îïSúÎûTþ;öéx”úCÇùñÖŒhâ„ìä?§ ¾ÓŒŸÁ¿‚PØ=/(¢`RŽÝ”0v \"ÌZ¢Gsõ&ñ!uŽî…X¢EQŽ}iúAî¤Î€‘ú6ÖËÿ¥÷1´#2ãwíÇðš3íl;Yã÷PÁßNýøÛ©'>õc8wFSèɼÓkføä™žvÇŲMŸ4ôàÚÌ:h¾ù?ýÜÏ|'ó †ðä> ð±>`??÷´6¦} ýí¨ºœ9øý=$•˜÷ 0}¬æôù›Ó'uNë9=jAfž):ß®ÍkúôiªhÆ)­8!;ÕxOšqšì¼9±yŸÞnŒÎÛ:»÷Õ!‡_L ] BÓÓeê 3Ï0žÏ›é£½FÌ94GÂG=ÇüÏOî4ã ÷£øN·x´ïû>wøÛ;ŽðŽ€ßù«$¦=ëWµ™RÔA)lá…L’„ÛÛS¨dˆbMa µä¤Å¹@ƒP^œ‡'P¥±uÝ÷^—W3Þs1!;mk<žüxÖAý³Øïüù0ÀûÞ4ý¢¡éwí£Ñ0Å­®ùäwüâ§ù!ìø…[ƒƒó&/ ?ÞÁ’/ /lêÇð°Ê3_¯6?^y¨xá½[c]tÞÖØáõ€{7qÍßžNUßw‹”Ê=¯õ›ÿžÀCŠÕéO3^x„Àó½×9è)wƒs»ÎdÿÐ"›§¥á=¶{µ4ÿu³{Þ\;®ø#_0¾¿ÀéòML“4˜ÿÛ#Òm? 0¾ö`™ÿVèYÝCuÑ77J-`o÷XÐüî‰eý>Â%XÈcH\¿_Äf±_KóµDP¿Ñ’Ori~iPܸ~õ˜ê¢ýê29ƒT3;ÒÐ+ísLvñì8¥ºdš]³wdUKŠAª°àÐÇh‰A*YJÊnèq<%‘íW=ÂÛú²~¥$8• HBBî¥Ôéß[—à³Þûpü·Û *9ý‰Ç ‰;ðøAz$ÿ5Î;®ärõê¶ý5,©/^]þòfõëßþ뛫Ëë_Ï7sxÎødZb3“'º+ðnùzÕM‹uBÝüàÔÅõX®qôÆ*¼~ÿ¦[â¿~»ê¨p±ªô.Ýt%M^¹~ùŸ]M_{y}s¹ºùTî\h¦ëB3‚‚Z·Í…Þi¶ }g¾\ÖŽ½¡â݇5Ôëk„µŠßÖ \½îˆ)SøÇ]|õó»õ¥AwÝdâ¯õZ·r¿|{»ÚÕèo××ÝÀ‘æ~¯7ê1¹‡~lèt×vwÀg.}œ¸tñþ榣òùÛåÇU§º×.Æ[Uo]{[WÝßß«{»vþòåõ‡õõõèºvo˜ÝíéúøÃÇŠÆY(·'š'Ô> ÇèXå›s 4¼-²Í] Rø>ß*>¬É"º…µ,ªÄ@]"Y ‰Að, ¤€, e¦´M. Q„I¤C1‹ ¤ç j­5½YL6ni$XTÄTMÖ)+À¸^÷J|ÞÒYÐÈ¢Ë)Šf­úPJ´2‡FývÖ7wx1ZVhß¹ Yê={I1ö– Á‡“‚¾J :b&›Ã€[¨VÍ:Ñúïý†E( ÒÜ`–)Þ^[øð ƒ¢¦„αþÁƒjàòå®^[òæýÛÕ«_V]G^Î~/ßßÝÝSuÓîlUO0Æ’IÖ E§6v”©°ˆ¢uhjI JšF§sÐ1׫^YÜæëYØ<â{Ó3-$ Q¨w& &Õ 'mtÓèέCrR¥ñY•~ÖK8Ò|/qúÌ¡«»¼ú† ï–:òV<°m[„"ëmZ(ƒ¥ô"XL¶.ý†Œ àZ°ßl2@VŒ“6¹v—Zæ§ÂäEÅ’} z^!¥tʲrÅÖ™{€Ëî+´I³ õY#RÜ$»;jVˆ­U¦ä›TuŒRXxµLB‹3ºÐ',¬Dr ¡øp¨ãóO í¨˜¦’ãÐÖŠa *YçÆH#-…O•-,²@ýÐÐ ‘[}ô¢%™7ÕÉ¡‡?å† ÖeÀ‹ öü¶ëŒ¬Bã-À‘Û/àÞpònrÿ§NdÐŹRÿ O÷»þá3çûnÛµ0²OR”=pP<¤Ó\U!† cIWnGñ¢"òBEXz…˜ÅÑ´Å; ;iÞ½çùY#P ¦íò°Òv=_LÔ½v×dHô½o?žßáÓ;Ô¤ìÒ 0š.bMÃÀOS ­BX·*ÆÌg/¬õ}ìr¡ÿ»1Í©1@j†®Ô÷½šã³¤ UÛ`õýL×׫B®Ÿ‹ä{ñ‚ ( œÓPüæÜ=9ŽÜ½Rï]«Ùª AÏ–RêþÛ'yÈfãk¡2R A-õ¼¦štK ÔÿõÀ&ÑßÞR¨šÿܤ4t“…d‡Ù=Z+u;eÜ2h©ç5Õ2hI“!ÇMzïf²]“M£jò©¹Ÿ²ÃúTR³—ƒ¶îû5"|ÖžŸÁè'FûãxQFÒÏÓ…žÖ+Kc®BF„Ÿ ÀŸ¦&&#Q¤-˜H/}— ‚È %l„,Á÷E¥`c£‰¢¾+çEîƒVÈ>¦—Q)°Û”‰§¤ø,} $˜£ñšFˆ ²"®fÚ±‰ §’ÇÓ½³P(mlÍ'^Šü][9 ~: ­Y8žûàÂêa”;S ì%”Èi˜ Ð&D°$¨aØÏuCô¹¡Ý(I0kÔÁ„ÆØÇIlâ´2Ak’XÈLX·1*"ä}¸¤É®ëyɈá BµšÄ‚¤QŸfÐt«À°­Ä‹©š¶ßAo¼RD!±°¬n¡y˜mìyÅÖNd@ÕjÂŒ•°%²` hóª¶@„"IXýQK6æ@|Ê«ABæ²)r@<`ƒW–ÜB¶òÊmy µj·ª1oòÚjç„6îMË2¦Íx6Û ‹×C.¯)ôsÑ©‡¢éçGa¥Š„ææ½Lœ‹s. îζ âؘõ´-eŒÌç´A¶B –å’IÆÆ - ¶ž\yðq—D±i+0Ï|2†“ð7hœ¹AÇæ9Úªùäa:ÓGî|¥>©Éƒ}¦_¥|úžÆ§“õy¸æ§>­™A{SJæ¬è¼e ÄÏ-†ýÓ OO¿/BN¢uQ" ÔQ'MÀýy~À£Þâéb÷éÌÅ\“à^ßIa¢˜ìCõÇõ¡ÌìC»×‡ I®®ß^"à§êÙëƒ&{¦ç÷Tp¼ª mm®…‹JdM"µ UóE…ÓQÖPÊ¢=v q}\@hS·TAÂiÕ57!¤  ×t- µ‘iK#Ú¢!Äë•äþNÛ*îyŸæÂ)lÑžFT™x4R/Fk®{ÚDz>Î Å·°ºÿñšç¼vúæÁƒAugû€·ÍÒcÿ+Ý´ö=2ü5H¬“ÐD‡ìà~~jTÛy\ô’õc[‹L[ω°«®#Žä÷ä9*{\½üܨÅpLBúþº`?½È5ŒÀ¿z%îÙ1Paz_F¿¦Ç1õääbüàJšK›h¯0A`ì†|¦©ŒÌÈ¢EÅ›TË% ‡˜,ÎU ªÑ8Ö-¬¶çø¸¾O_¾ªíú‚Ý øîÃŒÉÌ}G¾%0wඉ ðìy-Eý |#ô,¥8[…’$•ϲŹÚB±‰„¯îXÒb¡Zª¦Ä:L /4‹:P“eÖ…ANEjwSIeèP,ìi %—Š©x´ÅŸT^dbãZq/’ h at–\€Âx¡R€‘ Ï"Šš9çB²d@X[®š‰ šºWLÍÙšvB‰R'56MŰï\´ß†I…™‡UMH™»´`+àF $ió8…Ä[¥¨³x²`rŠi¿Âœ’bQ;)+J%EI­¡LŽ—Ó¼òô¨á$½#›á%V•Í`Vl(’ÇÚ £B6똘=ÊÀ=j¦ˆ:QÚt߉Ôw_dóó]Vµ÷ÛêæúÛØ±·% š[¿T/’m5J {¿X!z¦XÓIzLµmT( ‰j Ë$hwS1Á~ÙÃ#" «+¥öRìm'©NJ¡jq* %‘£†Jˆž±6š®ÚÞ+uo{Eˆªì‰3`Á4È#C䡎õ^/LaàmâˆÜÐ*¦à¦5?/–:¥´ã=òIûØxÛÌÈoÓ|S›y·ûT aªÐ! Èzß„X²õÚ&j¬rDj¨)ƒTÁäæa4Ü´ÊE"·»¹H$J½[Jjhú:¢oËd„ŠÒSܸ…cÈÀ¼ Ç k}¼dˆ öňUt¢îƒ§'ŽX"XÆÓGßÿHœ¶R·ó"éáž9¦LðwcÊÒ ª±J b0™û±  Ú[#JÕõ`HŒˆ†ª1dÃÌ]¬±TÀÒ+GÁ)Ç¢_lFÖì½\¤UÈ0й †%w˜Õ;×c&Cû‰?() ±0.$f:QùÏš8ÈVÜ7õ^L“Ú~š@Žè­¨ s6C¾Æ "¹=({ëˆjÚ[Ç ñ†z³ŽdÁr&Q4#›utÎ~¥;ŠYŠ÷h຤l!,r³,=ȈØ@!rê}Rª°qó5îR}R„xbÃ42£?‚õ3mƆ‹†õ’À`µø •ì3Aa ¦¼6A¤õû»5A›Ï!„£¼G8®½QÝ$vIßRÝÄë³¥‡ïÄo=CX–÷O Å(à š—J!%²äñY§™…RsçhT’b"I<¹ýÇ’ÅPÌQÝiqÅLÕŒ:ÐŘ£­ƒ<= 6î ¿¼™û—Ù:iÏîŸ,•|:ùš“ÿêîjvÛ†a𫽠pþ|ü;îQvèµÖa‡>ý"9ËDMäÒ9Ø )Ò–H‡)K>Ër¥Í#\kʰÎhp‘ð)CŸ®ƒh(ãŠ)ØæSÁ޳M'R‡¤úrв|]—-Zx÷[YZr˜åúÎ&S%¯WlSÓPðn‘©—ö Æ¡0vé§Ž,[]ZHrK•8(&ÖzQ'2ª«Rw“@—/][?e˜m{u²Œ8Q„³Ì8“7sÊ8êà–©¢Ý­ J(Ý:gãÓêüÈÊ ƒ¸où–”ÜbHsSœˆTøá–\+êÓzöÃ¥×Ûìâ˯o?ûZU³kOÏ»ô&Æáf3Žï?žž·ÕFŒo«}„Ä6 îkä­±E3)ÎTƒ*dœ ¨÷ {§mÅ_4[©ò¾òX„ŠC5‘ˆGúº ÞqîDÓ[ImOðr×Hé—SúæáYæô­O ¨ðÕ´1[¨..dÁ¨<ŒÉ@ʤI–ûâ½£Ô:ÑÝÝx«n):m Gaš]È·‰”2jNeM3·Û‘Òb]Jš03jÐ̉{Ä\áÚIì°Þ–[€­xEµÌ‘µ(jlV+²qA£³Y];IÌ3¸7ÖÆD{FèR[P_ÚJIÌ:lnH*ªWóѯ///׿ìlàtä•Ùz÷YIÙ>{ŸQÜ¡D2Uæ>ÓïR[mž“c¬†X-*²º„‰Üþ|7Ù·}Z¬w HnùóûBÙQTÈ&›$´(É Bá”QÇeE*ÎS„bMau¢€DFæQ¢: J  ¢L†îʧ"Ùep…ÓÀ>á¥PëÚ4S CðÉ­+·”:{ÒB+x°O;‡]0Ûvš"a©3˜Xæ7E\v_Äõ9½Îùÿñ:)ç¹ «â ËBdä±1>Ž ÇCõÔï´±_ô»î ư°ánV‘[~:Ýðbk“/Åh~{;Ÿ-Ó+³å§™y<Ú2ßÝ/¦‰c<Ó⶘­–T8¨°2ûCq¥År~¿­û2U9ãëÀš»ýÀ‰ ½÷ Q?pô—O³Õð±_ïSM׫ƒð,s¾ŽëüqtölgÒÓªô`§»ðßö…Pë±^‡7 5+Vƒ_ûuû°j¼Wš)Í”å6m7ÞË»á¨XJ<½?:  D”íŸoÝ ¯•/Ui£0=|˜ŒWŸƒï‘$òs1¹ù¼ÊtÕ9ërÆóÑÕpº=ø<¿-ãá—Éxðë|t¿ö‡¿?>ݳÁjq?ûcÄO‡WÓb0­BkËÁòv8Ð>¢mµ†ZoZê/‡_ †ùµ>–ùýêî~õ¿Å㪘­{T•õ¶~œÞÛ‚õŠÇ»ùbÕ¿žL‹.‰w³›NþÇñ]°8¢"Óùü©òü—Àðóm±އ«ad^Û¬D\b,ÁÁÏÿû׿D*ÑÁ+þg¾ø#‘é†Wóû`˜ôΆo<:Nv;\ý2¹ÞÑ›ÿ=8Õσü Æ¼zº+Pk¶œ™³{<ºÄ—ÿXM¦Ó¿E!§'ƒm?›ŽnÑèƒt|ÓÑ$2 ¥y5.®—Ùr‘2¥ÕB8(†‹¿.†ãIðš„Uýa4ŸN‹Qøpú0|Z&g)Û©¿J‚L§ÛÎ-Wó»<ØåêiÆÁ~hr¾8ÿÒç§ÍC\#=ÇŸNó;óëëe$CIJØÔH¦³.Þ(ºÄá3âlWjº>òNMîR8·‡¢Ü0~߬(pþÛ¥´‡ðÅ×+ ¨0ë÷P˜Xa1ß 0ÜKaz¨½ö q¯×“ãêÉ죧ëôy»ž,~³cíãPöyE>–öÇ‹e`𘱠Ì5é¼ð±4…™ch2‹s‡š¼èØ›cMÞ(,÷ü­â@ ¤ÏŽYܖ먱½\‹ ~ß®±ìZoÊYŽ_³‡ÆÄm¶29s¬ÉÊäÜñæ*“;˜ã1á>Z’aü¾YK¸Ÿ–F6~߸Ê2¡?ž³!Ûcn®Œ7¯Jf•µN‹³Ògê½ÄÚ+ëíð­S ¼ÓÔJ·içŸE¸ýû¡í=;·Z&ûÁÍü}6Y…k¾ûe±øG¼*ûûì÷eÑâúm1œ-ãC¸„®“ÇIã½Ûƒð ”Ea’£S¤Åc¯¯E;å¼>Ë}ÇO§}@M¶b¥§£g§¼ˆÉÌÔÍ`o”®N»Ñtr÷_ÃÕç’«¤Ÿ^ÖQÉÉ•llTßr¼h“5–ÌOálz>›ÏŠô«â&ËÕbþG‘K"ûéÊ0¼Í>}¨Ä£™‚ÍÏóûÙ¸ þs>™ÕÑp;S,¦“ðǹ.±ñpùy¸X ŸRWªhrÑÀ©Ð”pÙÇ¦×Æ3 ”p¾át¢ØdÃäËNc{c|5B<~:%­¬€A®ÀOÁ˜Vi£­à‹À ™½–*ü”áÊD*µ¡£w§Bà\Í=ê"$j» Œ–Œ†žkRZ{ Œ^wò^wò.>²¼b j%ˆ d{Nfï-ú®×g…X)TžŒCp­ì¨×Qh´Õîìu!› 8zðÀ½õ+ŒP9¸.þ:¼_.'ÃÙLïcs/7˜'ãø×âËd/Ä7Aßxãš]—ÀÕ3­u—;êÇ3wy6và:h„+×›®GèÏž $ybç(bŽ>P8ç½—]A$¨ã?O;Óë£uÊ ’9¹8‘©!¬Â²&ʚЊٙ“Ë5ÅÊ›^O¤U†çz[V‰g¶B3r0«,ÕÀ‹zeœèŒU ‰Ìò/»w‘èÜ÷ÜfetYz†.;tóµá²wkWrïýrF·3g@ÿ~9ƒCÀjÎ`À²ÍÍœA”'‹bë9ƒxRÞ›™©›™³SÀL‡ˆeì0Ë "A8Ôà­”X®R€š}îNzƒÈŠÞòç"¥ ;÷.á’™Iô»Ã%;n…ËoÖš5¾©5ë¬vm! 5u†dŒ‘‘ƒHï 3TžHØšÝ*³[*{¿v°ÊyÁo_DVñçt¸*~D²Jzpv¬ÔÓ»„Y Fq/„ ôú“Rôþ…¤4&›å&µžy‚BF1²g zülN>E¡x‡ÜC&¥ ÄÇ|Í*çÀ€© h”%G‰“•±똎ýÉeu¤ÐZë*nšgÐÜÂEF+²Ä*-ì©Ú'1*®„XÅ.;ÇÔ6&8{K?â±ô}–ý# M‹Xé¹ ³þ5í$4;ÓNÂZ2T¾ÕMõÇ”Cså¥Ì{+žtøR7Cää ˆZ©$‹¶hÚIig=q#)O’_¨gE(&¼ò>YQîæŽG‰ä;z•ÛíUR÷ªæ$AÍ«ØÖ½Jï±~(ˆ“Û:Zxy.çO;V¤6]3xöIX±%mzÖ*vÆ\DX+ÃÞe4bFiqkVoÐ@…$‘ó² #åµ3˜`‚ô š›¸ÈhM£Ÿ{›@R–*Øe÷À¾žÄ;§PsšW¬5»e(Uô"¢¤´÷h2œÀÔ±ˆ9k´©b‰ÔhF½UÊF3êÉ㪂¼+å>eì2÷¿‚^¬Qk™ê 8iKrÒìÓeB›ý¿(Ñ@BΓ{Ÿ}Cƒd€v¥ I¾?NžKÄw—ûš½Ä*ëÙcó”0Š®Ù˃ƒÎùª¹2ïAw‡Ù“p# %£Ål'¡¼ó@Í$”È"ZËI(hCÄü>Ç™ÆZ²èv»—˜ƒŸg’·rwmãÇuäîžã§¡64,Úvh€ÁYÿ.Z3æ%}1¿ßÉ h|õ]; ÏÎüT=­ø8©Aûš=ŸÛ÷ì’¡ìµ›õýéÖU:8O¦q•žáv¢rP«šÿßVußU¿=¶!àû$ýRÀFàãݦì.û A<ô‘*“üY½žÄf2Z¸QAb3ŸÖjFô;æÕÉ»ý´Ÿ†R^ÕL¨”ñ†œpf¢:S$E9cR]Ð{z„õ/x„>œG(Kâ$yF…RF;ˆ÷â¤È{ÍÔt]w¯¬÷ÂX÷Ýð%l5éªóBóÎþc^òû/ÓgvGT#S÷J§Œ_Û–uò”@‹6ò¾ÚD¦ÝÚd©Ÿt‚jŠH8¶™Z|i˜¢ÌÁc °a‰c´Ž.w2?â?‘~åÎám1þ2)þTWÞÃd6ž?ôË•Õ1žvs”ÅŒÚ4î†7EÈS°^×ÃͪŸ¯Íó›ûɸXͧEà¨Jªõ¾h*ôë|¼A+±ŵŒƒšÕ-ô)£-ˆ7à™GOF÷‹EpÍþtøT,Ê(w<vÙÝõô¬u5Ü<ßÌïÌF]Np,üø±ÚLùjÍl‡Ò3úTGë /çK{š$<Ýì[„hàc!æD‹@º'áÜÚ+cˆ!=¯,Bã‰(ðt/°ShS§ëÛŒ‚(ͤu@ã’ªÁ;ßC‚H£J¤ËšBÏ–½ˆXc¬ÞPV9ÆM)a–x‘èð6 %+¡¥ U£]ÏR$É̃úz†[Ûw`LT^¾*%¾ó¢S´«ž_ïô½¸DÖ3™z0hDÂXD˜ë×7¿ŸÒþ­²ß""ãKì1aÑšé–s÷¤e¬!t,›=¯1‚ë¦^¹¸ŸçÅ—"r¼×ô»º_­ZªNÚÝ[ÕÝŒQyO¶GZ!:Js'£Lе6hêò$ä©ín!£u_zeíìþzÖlÈGÓ3õ´("1.„€H«Ø“¥R‡ÂáÛ6^Íd§JåY•>»J8¤f@ø넲©C[ëäRÔ³ªºc”L9 ô¦ÒÛ(òÂB­Ö,¨¬&¨¬R÷pFáº~=CVYöT¶  §¢Ì­ðŒ\F̳«@2äù²µÈÛ4Щ™’f›û³A´rVûðFlŠ1 #ò¤ýuIÅ…Q+Öœ¡Ðˆå¦-&VIdÊ-g(‹¿,ÁÜÇ‹-DyK'˜Ç1”¬’Mk\S\ª·rÞè &^AüP6‚øŠ.É\vÇg o[Ã외ìðž¯ÍÈ’ P£6+ydµ^¯ôÉUçeOœêÈ`z}Cë‚R9{yéÏŸÆ<ßýZ3NXZ|ÒʰìIª}4Uˆb2ú3ØP¡Aä BÊ8`BTÊšZ“òÐ š›ï\d07@J˜ªòPi¤j?/Û}æêN‰>v…äÞo—¶ÜÀë¦JÒ¥Ù¸EÁ-ĤÅD&T„«)ËÌ'—K¶—¦/¬'@ë(ÈI$*ðÎÐÚöÆ:ì9¯¼Ñ!L“1#—íþ>gúøTSŒ7ϧÅôX³/¼}S(øQŠqº—{rX[î ­W×¶"¡ÑùD ÿ_“¼!|Šñ‘@ˆ©!A‰ºˆTâN¤†øÇ(‰õë‰B£ ­Ÿ%e„À”Mh0››G›¤V)Ë©D]D*5H«s‹ÈÂ.•;bõvP‘(‡»m´•”âeÖV{]#²yÍÚû°ow¯ #™çÝ5½:­ß‘5}¼ˆ8â#$øÝ®‰žê™(¦¢ÀMý^2Y†´_¢ Ä6AðJ¸Íª&/Beiˆ2(®Éç”nƒV‘}MÝÌR2ÐJ{÷$Ϻ(Ö¡åòYtO+팵&x)N÷Eg/žn€"oëѼ£æçCG9>«OÐ4,¬Ÿ}°bãÄ’o°Sbˆå“qõ²§§¡ò`à¦ý¾Ë} e¨™%iôŽcÖÁ„–q'±ÕŽª(“Òh'*²V³©bá— ·N—RÅæ\R$ÿläÅI’HTHEân&ÝXUŠ­—]=MÅÒåª$¢H[±>ðš´ÂT±‹€•‹HF„µlá jBD$AiO×£D&ÏÙ¶• MÖé­ÈŒäõ8cyIÍhÀrÛÈrS¹Wéõm¹l«2ζ6ÚDzŒÞî±7+§ÅMnå†Á<—:1i÷úü,Œ®¢Åøò/°X`bßë³íœcÛ#å0yÖYºÊÈáóÙ€l½&JMfJ+ñdÙrÏ(ˇ+ÛÝ\.”ÙšQà­ÿ¶ŠgGš¿ÃàÌ1mW Oh»f¨»bè±F=eªU+ô|¥Ðñ-gýÙÝó§öÀwi&k¯­dNJÞïÚƒñÙ˰ÄßQsö±²éÙD1ý&²‚¦b¤Nx]S |ÍZ¬Ä;mÛîÌÊ:ã Z¶ÓŠ I§ {› õž6´-2xrÆ™ïφ˜Ë&n^}ØÓ>ß3ë©F!! ía:ka¥5jñ‘DJªÖõ"ìê äu/m;5qÜ®fÒÑ-EP‰€·~³§E¤ ‹t”„FY"k¡  ÞP¤|l>QYÜÅšfÅ^³•´1†‰{HYH$.ëƒûzòÜËæm«|7 /o¯y¿âÛãv&Õ1Ÿ]'¼é”%í9½mP¸¶8èü+slHH¬¹9hçs–…^±Édﵓ¤ÌòÌá#h¶=\Wß5ÛØ.:åãÇV¶‹L•}"4Õ•`Äÿî6³ìv÷üs³Å¡'¤g‚—Ý‹œKà>¾{yÜ]‘]ᙺ ñÃ’´J ¾„Õïÿ¡‘”_pCarla-2.4.2/resources/16x16/edit-clear.svgz000066400000000000000000001071151420416754300202770ustar00rootroot00000000000000‹ÚÃ^ì½[s7’0ú¾¿‚Gû2ޝ»$7Íx¿˜‘퉉ðœÝØKœ}s´šM‰;©%)[ö¯?™¨¾Õ¨*TuU“’%ѨHä yùÓÿýôþæâçÍýÃõÝí·/d%^\ln×w—×·o¿}ñ_ÿùÃÒ½¸xx\Ý^®nîn7ß¾¸½{ñÿåŸþôÿ,—¯ï7«ÇÍåÅ/×ï.þvû‡õêÃæâï?¼zùò—_~©®·ÕÝýÛ—ß\,—ôäÃÏoÿéâ₆½}xuýí‹m÷Û‡juy÷fS­ïÞ¿ü3úÛÍÍLJÇûÕãÝýK)*ñòÅá¹ËõþÁïoÂû/×/77›÷›ÛLJ—²’q÷õ¡ûš'}ýó††yGƒò“·ÿu¾¿¼Ú÷æEü¢B'é½)à%À’z,~½}\}Z¦ÒÚr‚â%ývèYÖëÕ§‚`ëd¯ñè´kèûv ÕÃÝÇûõ択ÜT·›Ç—ßýçwû—¢º|¼Œ^³Û´dÜd'oWï7VëÍÃË]{xþ—ëËÇw„DàÂ×w›ë·ï߯/¿}Aë“JØð}7ƒW{ô•‚ºëöµñO¨ÿÏåæçÍMè`lò²Ë»õ›ÕÍþå»»÷›——«Ÿ¯/_þÛýÝÛÍããõËÂä7wŸŽá%}ûbsyý¸\ßlV÷Mô·t*w?||üióéqs[M°ˆ~Ïí_ü ½áO—›«~S þF ðá7ú•6‘ÆûëýêòšP·îº¾»¹Ù¬ Š«›_V¿>¼Øw W¥*ãôö¥ôڇǻ»¾´ÔÇ_oh}ܸ¤7ÞÝ¿úç«5ÿý14ÝÑf^?þúJþñÅá™»««‡ ,¢¶°…ôe_\¼|ûâãÃæþ?ØWê_oÿëas€ñ Ðd…«šR«ãæ'Y[¥AºÍRÚÅRVÊ Ò†è›[@e„7Kà_$ýd¹Ÿ¢‡ÀØX¼« +c­Qé®Ú 1%“îêqß«l_ÚV´•öš6j^˜G·¨9˜G8§Âœ@©¥P ^”¤æl–*€×Ø^\,}%¥@þÅÙJh9*gÎ s3+Ì™0vÂÜNsQ9­Í‚h„âDhlK]yR¤ÈOÔ@[·X¨Y!ÐëÈÑWB:Êä´™éà¸äÇ}¯²}ïÙÿÑéëcE§n§„:ýY’Z7äŸ$­Òœ¤Åƒ]ùWjU•ðôÏ6ñdûCDyít'å~ä7«ÇÍ´ªœ•ÒWD»Œûf^4µÝäX«)ÑÔiˆhžšJ;Î'h ´x+Ñÿ.ÑÔLrY`½bZ %  N_PØÀíÌ‚ºx¢Í‹%!¯+’(„"Ôþf®c0+l•î†í„ÒEœqÌÞœ#t-ý¼ëA,G U¸R8P ຠ½ÓàÒy!B-Лº®²tlA5¡k´ãç¥ÂvR‹hÓ€—ñ’¸µ´Zo‰…%ˆ(“ †®!ð~‘ÄBÚN„6zzˆ«Ê:$ˆˆ'_›²yžZ8ÒV²¡¡"À’.›øì¥ø¬5:œ[HëŒÍÜä‚Àè´“ž%cQ¡sf \e‰«ã³ðÎa‚ÏLB´"1ÅgK|T8ç|¦Sd‰GŠë=ÓrÏg+ºššE‘]Ê4ç队©œE4<’ª@  h¬¼J¡"˜[t¡iwøÖ€Laîu¥q/H`®=Ó&Å«lß«lßZ!6ɾ¨3Â<؃º`î†ÊÅ]X®Aµ^¸Ê)O Ÿ8*¥ ÊLMÜB는2Ë*¹6¶r¾‰áDpé%*¥Ø+•®A±ú^eû 'BÆg¡`çøZo 2F.·á¿Ñžgz˜ä•㿱Vn]àœì›ª†@é´‹'v©ì¿ž“‘D»8"h¯pÌ=]eH~Óàñt—¦øV4wb¯o,d×o:<ë¢ÝuÙ7pñ$aJÁÒë '$7€Z·xH-FåM~áÂ.N»õ—8Ýñö|WeÂv\•E“¹ÛkB<Ð,çùn,ížE2O+‰X×ç¦%ùï$÷£p-XtåQ9’|:§hî#/¯øo,¡æí˜Ì¹Õ´DŽ¢YÒѽ9µºâvÍö7fpóF7¯ÜH‘V‘J1C¶Ç\àÏ®ÂW <‚çòH-!Z¤ÕÀТìÐhû²ÚüÐm#sÏÌGĶœã–a¡5µÊûÛ&šŸ$É-Šx[—ôpYŒ8Ùa{Ï ª™vµC‰ÁvNV –$‚ÎÖP –*i­R©npÜù*ß™”­*FÃyU±~˜¸ß!L|7LÌtW’Q‡:ÜËŠN¢\, gô •”Vƒ–´ÉTuº2JzT x*/¼ìÍWÙ¾WÙ¾¬šÊE™-܈maÞV4+šyb7["’í]6²I¡HCA<Ènl[*_±ÍÈ Å¯\ÔGdíÚW‰9,z‹m$&¥÷•µ˜Xh«+§A§{tÜwíÛuge­óN² à ¢ÇšMF^Kúà@о.–+mHLdûñ]'K-ÚÑbÛc'”Õ4PÖ ”¥0zÌÊ:ïq¯u£W;d¡"dD |7E‚ á1›Š4ƒ„ ŸUEü5,Ž2V/– :+; |m|EÄæûáÛqˆéé]Q]íEÓ#l+ ‚Éß|„-!™D§Ž¯Xrhk¼cÔ¬Œ#xŽÄBeh‰ò‘P3ˆéúPFúc—REf˜±@̹âˆñÓ¬r€#ÆO²ÊN1JœÏ¼H¢•O¾ðù[åÓ‹ÖÿÅYåÏi•œ.zä ÖSØ ‚X©W‹Ñz^«@KJ”ÏË*0ŒPŸf•è%Ôí2—ª´p©€«ÙCÏÄéÔXôÒ¾R|S| ëlßu¶o—F$ “Í­J$ ²>8i:i¤tü‰Ë}‡ÛE.I4]Ò‚"Ò¶‹\ŽÖ£uyÌ2€gU7õµqÀNœa)ÑšHò$ñ_Ú¡¾šQI€)[<È‹oÅ­BÏò¼zÞa=ïÜ>£z'*a 4Sßý´#[Ié£1˜¤RV§Ðôºò^8L5%mØ5×F`ëU`½‘j¨O P„^ùê}E¯VhF†×éЫ<€Ç à)¥ò<¾#€gßK‰lú† UŸ¼'ÖuÚ’¬B‚(&âu´†’•bKRk`(×'¼ÊÃ"z›<”ÏçeIþ.¹[A'Ññ‰,ú+nÙhOªI89%Œ¶°àîâ³ûL"·óï=н³ïž÷Zñßp¥ä®êGdR‘B©ÄšÔ»0“ÕvæÑ­h´Üâ“&¤ bvï¼³‡dD éùH~ƒES/ÈC½Z\QŒvNöek¥ 4 ”5 ¬·6Kü¦öí£ßÙñ­sh$æÇ/ðË#°çå 7Fœ˜ ùPߊó –8Í0WÍÓ¬^^5 Ÿâ=œPÛ\¥¡WŠÃ¯-œÎ,4»µè8º#-Òr…’¿n‰ofæôÁNlÇ—Ü*s­3þ’{°I'o5Ê[˜òÖ¨¼å*1rÍ&“ZM2H]8”·ÅüÓb+Êš• Ô¬þý®Ë¿_ÅNåN%Ƕ‰¼#oóÈÛGbKJý8ÐEèÌC[”½;w©’;îUn øï¿ÿø·ï~‚Ÿze£^)èÍUáEZ²Ò7–W…ùôzQ’ÍõÛÛ}ó?„…û}ÛüïÇëûÍå÷»ª2ƒ+"…‰%Ç_ã/»š<û†}Uždk’ÉE&’ëWÞ^ýûæê°Þ丄 þt}˜×OÔ=DòÚ“,_ô–ã\||cöìM_ |‘zÓ× ª·?˜„3¾'ý„ž`¯µJé¼Å7ÁëciŸ#ï"3Yxˆ–¨±ÎQÅ^ :ìì¨׬1ü‘t&"6«+>ƒN-è‘ ¼³toè¬ï‘}.çµÅ‹„ÓdIÖvڦΰDHúX9tÇrШ¦‘ â¨óéú¬ÒÂ.û,*4ž½I]P…/á˜,TÐXIq[°¯283õW ¼nòQѸ 'âCºPlÛv‡tè#lv…ã®ÀVi$í‚å é” qÆÛO‡%r£à`zp•fG€½º¾yÜÜ4È á4"ùójó×ÕLJ‡ëÕí_n>î_WðBæ/¿Ûü|½zÜÖ^“¦UÓÜ”AÃÇÁ`õœN_Sœ7vÊ5ïÝ·¦$yª5Å™–'\“DÚ´MhsI1wJ—4ÙÖQ‚’̙֑ôð©¶‘y­â<µÔ+éôꆨ&X1»ôL;Mr³qn‚ƒ¨´”D"Ùn5É9åª sì¿òÌ2]Óߨ#Å÷ßtÁL¬Ép’ÒN¥µ:µœZ_‘Îc²ÿ$QôãžÓì>ñK9/ó3‘¥*¨H*e@i:(¤™é”÷¾`ÇÛTT%æM¤N¥¢)B7E:™TsJweRƤf7+‰¨#™ÞVF»Xžc@y¨,D4¥¨äÒ 3R Ò²”c‚T–tÑ o?~^JS±ÅS.HÿDýÌÐ5¾ºCÝ÷x=µaeÀ¹æ8ô±‹Gп+$IÔeFÿ¬€ëºÏ¸OϸatŒµî_ëƒHúmzÄY¼M»B®ëdÄP?1 &%ZDÛ¥ã]H3Fú)CßÌ´W K©+`LCCÔt†PY™IA)UÃ%s}; õ%N²5àî¾±%xñö“Ópzt–QäoÍ´ùE/*S"ô:ζ`I^ÐN7® –FxÛ€åQßçË"PbjXg:t:ešš,§ÅKEváiõ¦òk\¥¤ò˜“æLÒŠÄ;ãï@М ”Ò—ùnÇ>"§€Ò²&¤ÆŒA‰œæcÛf0‘ò£ꆤ|Ô÷¹ ¥ŒÙX,Í4G8ÞŒ–Óð« ½oh²r€±±¦FiO„¥z‹ù@I ‹óOއ¥+"—4÷iÂS¤ ©ÒUL’q4)wQÇ}Yª“óÏÿ{øp¿Y]þ}óøîŽmÕ›+žScæ=Œ¯(Æ‚QC|uÑeàÓïçF~'cQhõ@0¶^kƒ®8¦MC\¼¨„§² צҜ[>*|‘í¼Îwî:ðDz` n8ðÖ‘&Â<)*$X„”¨„™ SB³Ú4X¸±^5H'—>@l°!Ï©r•p©z­‰Íû$ÝÂxì2eØ%Í4âÌó:¤ÓÑ:s^öK¢Ie@9l€Q†ÊïtE'`sgÌϨæâuY œ(œSrÚc±±x‰§uMqè¸/Kw¦ž5¸.4¡ùÝlH"&åD×i^èá`CÇ6į +Y¥B? Èž×S…‹ÿŠ/•‘äÉ@ö…r¶ÈýëœíKÀ<(ä‡Qªç…yÓ)>ð{Ö'<Àsèy0v)tZKOJß í>æ>I¡9²À«…5•⛢șyvKýèq™ILëç€îœ¦ûáÀ•EâÏÔÖ¬:8z>²k¦W&úйeãA[v%4‰íýx;§mpË8×T2“‘¡T`ºv£*i±yf%'×S.=²»®%!'¶ŒH 8 Ë•t§;‰Øýen{¹ðó|ìÇYï¦ô‹YáMéDÆôçe^”eÎ?“˜3¹ŠRWa½ZÛËõÈ”è4Ö°tݹъShÑh“ÕU@ç`”Vb%Wz4”ܰiÅiêóPг5 ¥!éõ7jÓ˜w1|A*ê•Ï®?ªø‚&:@j´)»a~w<ŽÜ’¸É¦ìZKN_Ò× «?xbeW/¦Cr?¤ð1l`oÆ’/ ,R¯|eWEÓ¦ 33Ä5z<.Å0dsôâöeÕ Κ\ÒfZ‡4¬yc¼)6{´¼°“á„Cp¢xÞyœ˜‡òD(ɱ5‘OÊÄYhr:zº*öPií½u&c8i$X)ä‚T+®PäÜbI|ÍV{œÔÇ"ÓŸ½²=×È”‘éÌr¹óºŠÓ¨ÎÍÈÞ™@u4ÕÓ¡©¼´ÝštÜ¥4 ãÙÚÁ9jš$<ïÀäT(D#®„ÓVcò!@ÞWÂÍ›~²š ÌPÃU;4—PÖqÊÎ%Äã\¼š –S¥‚^ j])"ì¨"¥ÌI((›z5ô†Wž–ý'Jï“£­2­ç «ˆ‡D6©:•TR‰F*­èÐYaÓCÇ÷ËR_ª¼=åâa(¥›D-ÁË"T8esãZë›ëÿ¶z|·{Ãî{¿†¼ë‰®¾çt¢wÕý>Ô}âÄ,Ôú÷‹%‘›•háÄÅë‹%_y8)5òwþÆSu\¾Z(¥-²bÛëÅû§Û¾¤nR•æšpñk%`4(£wpVeë¯ô¼«Ð+:¾ugWã÷¹Ãx?ò·Ý|^‡/‡éîßÄ«ÙBŸLþÛűàw®®on^}¼¿ùÃq²GõMø5’ïïþ±‰¤pþº ™<_Áî+¿‡ÎÁ«û»·—qãÿÜ]ߦ­ï¯7÷7×ôŸW¸k»\=¼[Ý߯~}u{w»‰[kåAÃYë½w»sZãÃÝåõú½åróøë‡ ¡Úz÷/ev8ö„G{F‘?‚sÑ‚Y“”EJLZ)àŠÈN€Ò k¬He޳½íÊ'7;‡ë¥Ûð”l@=c6ÐHTë5ÒðU4NxWþfÎs™c³@lV|ÃJJË:v ÎúªšùKQ…¸çø†QHýUñëÓáP·ÒDËŸ ySÒ$I´´Þ²˜²RΡ4M!j(Ó&jäygàRŸ/Ÿ ‚ çÁt¤äz’2€ö@ÐñEúÆùA ÿ e¥ÐJc¢&¬HÍq,äDÝØÆ ]I!çX¸‘œéÚ*jU(¹UÄ­¯©I©‘è£V…†ÓRvññÒFk“´Â7#uxç¾u7§×I×ÝÜÃøh">Lö‚Db:˜I)Žùå†>Nˆi6T%ÚIåˉKÑõÚaª9x  ^¦it‚Ø)ã(ôB*–w´9iõˆibÃt…‘Ë[H¥}åši±“:úD¿Þóíy Wc•[Z»K— ´FGÜM“ôOù‚Sëß,Îðñ¤À3]ÀCè^ôk9ð´G¢Öþx¤:ß /Ø‘‘“£;?)ø\ø"y>¾è×rðYCPR;ÉŠè«Fø‹YN…óœUX”Ç <%øŒèŸ]à‹~-IŸV£³ŸwB³R [!)ÉjÁ©=IÅ~œÃà " Ͱp$4 ÄÄ„T‰»|¨NÄ<ìȽO¤-9§ò©Û\³ãXâ/­—¸‡[ÝSŪ?«ï³e¿Jî³4t¿Ý©¿ÈòµÜ¤ò·çÑØ=Ä_^g~xBWP\”†è¹x3Úÿðý÷Ù!´e-i×=„ Mø‡2CôÖ†)ÆïDû[’B­!$š÷$¡Áµ.HÀ2Š„FŒŸª’Øp•Ô,N6’¯.`MB§þëG]Ç#<Ñ¥^H›”ü‹úÎg!]„ð¦­ü³kAxt¦ ö! уðÚÒÿe‡°¾ë²>¢;†ðEتóÝ÷ßÿeºç¹á©jòöPÈú<”¨ø·mâZ‡.Ú+¶Èi×}¤\*d7JKq±ö,bÍ7·W®ÕErM­±ÏÍæU«ËiJı5×Þ•û¼øÖÂõ‹°•ðàA$Θ‡#ÔUÇ;ZdÞÍS TqŽÝ¶Mº„cÇý’Qóz‡—ÚJåz<©[T@Ë!Ç9zùÆ»®ÑNÆD%xy:y‚´fñqP¨„.-çåI+ÓB©W. ÕeýòûPø8Î/𹘘"¤ÂBvØ ‘ [%„Sb=²H%p˜ƒuËÒK‘ 's°Öœß»»º/zd8¯ï-G{pIKþ›@™Vu˜·Ér‘¾30J&Ç=z d»G;JýJ˜ŠKËá,€’=]šáÚ'©}|ícqhd¿QG1ì|}í|-n¾g’X 4&òëÉ×ø¾_;«+XœŸm&MÉx‹Š²,Vºmyj§­0ì]PitÒûÅ’È xÛ~°²QFÛrîç"?,¶ê;[Ym•I˽â<Ç—Lœªfétò¦‹}àÔ ž-¤òÀaKW 9H½°•¶†41X\è Ô|MB ª;ô§øË%k¥Õ*µ3†RáW®¸Êö½ÊöeƒX…ìíæD_о«0%|:j Ù z»óáÚM'ÚK‘¦,ΤœÏºœÍÐü\¯”sæçQ>e·áèÄ$;ÅÀÊMµèhM´/S‚ö)•ð~~¼²öÉñŠ`54ÍqÏšHüÖlªT_"j)å§ñ:²¾$å¾(€M8à‹XS×8:“fvÉ×›Ø^bit(S1+œß8Åbˆ#û´jÓŸÜZ¶?ÞTÒ„¸ýiÓwj–λsjµf¡ÔÚ¶e¡ŒÓ^Õ©µö‰®ø%'¦ÖžDki± ‚k_U' 5$™³Ë˜«›­‡ ßÌ`È©%-I(žÚHñ’a/·Hr"_“ñÁ1~‡ š]]-š…"‰•v]ú¤*o8o]ü4ͺ¿SsM1°ÔjD:½ÍÑ(ìå „3É(ŽóqsÉ(ž–S­F¸:1é¤f”½àZ„† Ô¨ØWy™4ÊÊ(]ƒr÷z¯Úc¨ã”È[(h·Ö6Fó•Tš:ûäÅ•ÊðõbÔ¨+4[é“Ñx#hàv {}Aô„ ex jÛCêð覩Ò$ÁvºrÍZ Á‰Óêqj1,SÓiõ8µ ¥ùÊÑÏ© ôï©DŸ‚Áå3¿¨}œÊ«Åhº³}RŸ¯%ú¾–è;,ô3)ÑÇpžÔÆôE—è£ŸÓ ý_X‰¾îêr¤–©£ÕÿŽªËi9]¼õ—W]N)Ó~µøµºÜ︺a†?+Ëë©.§dì)«ËåWßÍbŸi¥ÿþûûî'ùS_âÉÛÀ)e•ú*œZSIödÇ<½¢’NrBÏRQ)Μõµ¢R1z_ÝßÝ> ·Fуá'ÕQJ+)ÌQG ú œZE zàsb %è¡¿Ë J̇I®”¬zjæœR‘GõàÖ³«Çs޲IÁ~èJö¦·Oª–ÔÃÜžÝÞœ­VR}xœ/Ø ìAð)K$õ•c:C$ÝŸ³õ˜œõc $Ñh#rÖÏ[ I¹þIi•‘Ï®@’r%’”ËfœŸ»@’ò9|ÒI!çqϼ­2Ù+ðîyŸ\ É*“+cõ¤’BNã>Ö(Ìç\ I±µ¸_~6»Èy $ÑÜò•Íæ-DÃŽ(Õ5s$vÙ-ÇÓ $9æáwZ$§¦sX1PÀòòHÕ‡Â'H¢©åTË'-„üoO*„C½oO*„ã½o 7÷éþ>±^Ì\ ‰FËqè§-Ä9{MTcÊqŽ.„jĉ›·@R(ÂЫJäÅÕᔢLq#¥Ž£KW×7›û=tJ\ëGi°]mþºúøðp½ºýËÍÇûhI}/ä¥\~·ùùzõx}w[kV£K,OaÔd=Jvð²žÒŒŽÙuh¿&¸ ~ª X1€£c |Ѳõ,gæëãÍûuÛÝYŒ‹£½Û\¿}÷X÷·è¤ÊaZ; †³\ §É¤† »šús” )ö )°/5GI?'=¨¿[0ÊiƒŸÇÑAÉeÇôAÐ<ÐANEZø–Ýá×!ôFØøšúàóK}°wzÓ:1‹~®9s˜âNÊ÷?»œ9?[Î:u_ÇWÆñ•qüîÇל9Ó°«)JfþŽræ(é‚¿ßœ9=AmtΉlJ"2LšÙØ™ú%¹O6¼QJ§±Ãq)©rä†=FE¶Ìdûûk¢¹´âQtBñêFÑ`UÃ÷à£à«Áé2ë„x]æú¸”î ë´®™—•.Õ§ ¦îtl¯Íâ““•"–f’(É„eŠücNQD!$ª>p…ï¸NXÀ{HÀ´…’>Î`~0ÁYÁ$@)  dIm>ZÚ–DO»öÂJÂTeŠ*†÷C*ÏÙ˜/F ¼ã°âÀa"·dæC±oø¹“D÷kˆã€“Λý´óÀ©ÃŸð§iÇs°ijŠ«Û·®l]">£;À²*&ÃÑ ó ÕŽ&˜ IÌCž˜ç†'eTY¨‰ÈÍg1g&Á®ÒB5¢ð­!@a\™:@æ¨+f$=Uz|ñ¡ÍïI,T\ò™TC¤úOAˆ±”Ûß©úÛtƒ’C˜Óç“9(ñç“óJÅ$éUN˜†C²Xd0 çSYá°AnØ®gµUêØ‚1-«:U YžV¤9¿Š ª…~Π"—MrE:·N(¢‰“¨Èåë|&Ü7 ¯Bz9_Íesìl )È´­ÒT/:ý‰6÷Ör?V·rN懤†R¶»·–ù±þòîúqÓðbÍ ¥9§ÐÙÒë²d^î&ŸO8~þ*~þìf 熷 „>'à PPšÝw …š_åïÄÉ¥$Bf=íÖ‚6M#xkg•›û1ÉïC•éÁ‡îó!yá:¶X õ2?¿¨pÿy.B`(ž<› H»Ö›2O¸î.>í6uä—6¥%6UÁâŸ;ԤŒ£D•SÚU7Â@Å^T’=-ÌB¡gÜ—8·E? #<ã~?`SV·„¦MæP˜óñƒrh^^]5ºÎ³?cMíŒ^Oì{¦T¤4Öéå²€ÑôÞî¶Èd—»âFæòá‹BÖuª'QŸm]Å-]öoý.ÚÕ[.ß©T¸èZ| ”žËÓøŽ…ï¤ú.>á .ÞE¥Òü™!”þókù:?DG ¦¨ž³Œ FæÝâ~ð:’Õ’!:²lG…l´íB¸*ºjàgŸ·-ì_ø˜A§;¹f]š…20]=D¹ÕÓ$ñ($Keèÿi¨4€Â†ŠÖΛ,³ÁQkv{b,8OŒÔ9!H‹üŒO’¥£›þÌåzì°\.²JK,ÝB8WWçä(×ÞVUÞ‰8wçÕ­QF.7ÏÉÛ :ÒfïS4kk»Ú)¡Àé­{XÖT¡ùS݃«\-M[.§Æ· ßtœfŒ÷ž©>.8œOW¬¤Å•¢f/Ñj*–Õ³ÙoBãè!¹Ò¨•1ïÐõ‘àÊho¶nê3"[·EþQt!v;)u¶îРìцˆøKœ¨¬ŽSÝçGsŒ²gõ™ÿ¼Æz £ñÚèe£õ‘ÛOÀAçèÑOòºLVï{8êÂÈÚX{֦ঢͦaQii.v)êâáºSÖ™ÇôË¥ÛË­ˆoV'˜~Qx}>›%f§"aJ©ÖZ¹ÓþæêÊ׊+ƒ’RØá¨”­j¾–VŽ‹¤Áƺ-e€„CnÖ°y³z3•8œc¬¼j=ÖüÍ•nG›¿§\éÔVð»2„+ݱmÓÂéÙ¹ áJ(§ÂUü1½!\™±eŒO7„7‰F”söÓV,i8m¤Y0€P9uذ¥âå þCÝV~¹pOa|?ˆò`š Mþ Lzr>0Íyg$ØÆAJ'bË9§¶O0;Ô²ö¬ðêl$xT Ð8B=§SÁN§:eS´ØX'ä6ÆÛÔÐÐèÇa´\-Á{Wjý|ÒE‰'™4OpÚç#ŸÉioZVâ$Ã܈²×‡\iX …t{ÒTR#4¯Y]ymã´t!;Ó}W³|n‚Æ”^ò“¡ˆU“ƒ—ñJžYâdŽ9dI©§õ•vÞùF@#©›¨¤¹Œ­¬òq¾‚:›jíÅ“Ñ"¶èF‘ÎgÇ{7Ö§{”e´%#)„Š^y6ŽÅë!’aµ°z(9Îg34®Cjxâ‘þJœDdmŠ+°Ú5)lhÏ}P¨ã \çaˆ®*v‰ÿµtºÄÚ%·†.g¤@£¶* ‡+Ž{œ5Ü¥÷PMQàºc•4Äw’ÕÆPà‚I6._¡ÑÉvÇT×ôÈTF§h¦-—¥ŽsÛöœÍ)ø‘wOˆäðšV,T„k„žÃù›tÔ÷*Û÷*Û÷žëKìt' 8Mâ€5–þЗÀuo  áè•s–&,¸/H‡fABJ/|qÜÀÙ&_-3E`zŽªÇ3‘+»y,ʦV>ãí–Ã40”EŽcý’ÊtLdðåý1žfú™^ãCk•…Ï,ðmv0µ$Ÿ4sþ³òˆ±eõ7zÄ|‹ˆjUͽø²I΢ÌÎë¨|åù}¡>grªâÄ_Éi˜¦ ·n§(Ǧ[EÞ®qdÿ˜©€,, 6¡í6ñ5ÌGFÂÑüÜt,ô >Òµ`äGãøR0sC–¿I;ºq¾Í…´ëÖpv&;%h2‹6g\ôžv£Z–ùõ´' 4bYîL`:öxiúÅL­VGÑÓþüû ñ*.?˜Îc9œr3rr¨››Nå;§ꜽζè°Ï†¸€»–çÐ>ê¹\ÞôÆa{R—øŒ©-eEGú‘»xÃ×¼dˆî’@Çîâ _ó’!†º‹7|ÍK†è <òÏ…¦û?4L„Ű¾0FiúJk•G”ôCÅèÜh=Þõ-%SÓðÍAß¼!A˜R(僓 ¸%¸S¥|pÒT@2¶7Z7"º%έ• RKœÛTPJnÒÛøRoj‹ìé‹'Ï”X,K¤‘ÄÿÇ»d :ž=+wß•§zžá÷Y•fËct®kõrOÒ1zÔ9’d­o®?üÛêñÝþeÛïýÚÇ®§òqÊÑ»è Ü]^ ÿ½º½»Ü<þúaC¯\ïþ½HÕ‡ú]q~jýû… ñúÂÓ&{úDÿãOô_).~äÿHÇ?ó+­aÛQJÏOò~¼UÒ„ ]œå·q‹§õ¾4äð•Þ&0†§õ:|¨kX„O‹zúÏoÇçÿêúææÕÇû›?4ëR{á¿ù#ÿë—IFMQ—ªÇ$#¹»A’Ø–H­¤ ù¬L2Gûmépö] Ø8ís|YÛá{®²Y¯÷öÞÐà¹ÄÞrüàâhðA]X!@Ø!Åö »f(/œ«4œÁâäl‰‚#*I”R]Hcå)²©5HÚÊK±TíËI Wü ç}eŠ"¨_$¬Œ÷B[i¯¥oø©Th¬Ik*Rh,)4iªíã¾ëlßöm[ÊJKiY,MÅuyQn–j\é ¬äRÔK_IÒ8•ᜭ¤¶²Æ)}ºË‘lu7ig˜$j@U(ˆ|¹”°€ Â"ãVv!j#­Ž" ÖÙ¾ëlß®³¢ A­^¸ÊñÜÒŠÊ!›~lå¤Cl°^„û⯠ÔÀŽ­¤(zˆiŠ[4™…Úš(¶—Z¤$ŸíÓ‚yz)uÜwíÛmS¸€×dU9 6K$$÷¤c´•õÎH¹0ŽiºBO´e·øŠ5ñ;Ê~{«E8¾+k…4>9m²"> Á0Êéû•Œ¨m@pO¬ÃÇÝ"‚¥SÆ1™Îñ…-Ù’è¨ô {Q¡sÆ. ã‘è í jôr €ëÆ#eaš¸¾Æ£%4LPÈÕ!H LÍy@»#½Pé NèKtàXPoƒ-Wl©¬ ýƒ@+Í"ù²ëBÀ•Ro¹01P?¸éº%¶Uî;ÒN'! ²²€FúT$ZkQ Û ×„¡RÆ·cëlßu¶oÄ‘x¥’J s(0ZÇ_ì‚KÓXw8+A=ba8¥˜Æï*Rk-ßÄfKò¤²–ë ê×èŒÞiSäÏœ%éçmõ~5¨ŸéôNÎmõ;›ÐUSÑ å“Š)¸¤TkW=q"•ðObSØõí„­óžà¥9åx—¾Ú%¤‚Ä:"¾zZReŒô$Œï9 NL@l9-Š$SlI:’Ç]L*€ˆ‰@'§¥‘Ìß ñ(æç„Í–© ËmžHŽ °]fÑyÉþàR¡œ¡Û‚ù¿h„Ö\› GйºcOYŒ1zI8ÌbÌÔ(]öºÀýó«N^ u(‹äŸH'ßAÝ>!Ô%O[¥­ HM› ,iŒâD­Ù¡JH :¤å»eú‰~a˜ƒ¡­šæe¢HìŽñ%Q¬n©‹äËûu1•4AP´@«'1‡ÀÔå2L"×Vï¦à3 S9/ÇY/GiâM† …ÊâÅ0# Pä±I¾!ZMTeZŒ–_¶¸WhÐãN¡9Fhbìl§ÅçÒ7ƒðù¹éâLŽqA±t±Œ¿ì{È!qK. h7 xçPÆŸ5¹ˆmKf»·-¡PÚÄÔÂòåjMª§¤…üo2ãÒ™JWÚíL¥Ñ—¹ØAwRrqV[é3²ü7H$¡…íU [þg{£ÿÌ[¢Å$¶QÈþ&S\žÇý–«UIb†FË7,lB¥„‡ë-À…á+EÀp½åxŸ&y¡®8ÕýÖs¸¿•$QKä’àXÄ«ïoéðh¬ïo Ýl¡q`{ƒ+'w“œä÷dW¡mŠb†N°kˆ'¡8pöiÅܰ¥<ûLóŽw]ºÊTù?.4t€?]¢Ëøµ²Ó|_–áãˆàÒÐnŽa5¢Æu ñâ˜ä ^®×¾1Úd••…Sý@Ê:JñÎ*’³Ãdý„Û(Ùþ*ÝÂŽH¥0JvD*…Õ†ÿ¦)—žƒ’i-¡}˜·Ée7˜) –Û“(ñ5´Tóá’Æ5nó~†ì÷«½U¥ÅniPÓ®òDݰŒFsÓ {tÐx#tôA¶»ô³ËÔAà* T8¥"YÏq¢ 0EàÂ$knp©Ö‚Ó‡y«Cê\ò_9É*§z™©T:{ UGà]/‰~÷ä“w†ÔJoá¡¥”Q «•~REym²bé¤Ó·Šn§Pô<”dGIì¨Wö¤TΓxgÚVÚ Œ‚Ž’5œÂЬÞPYƒ*É‘R:U6%Ó‘˜J8›£Àwž½+†Øš¿ÔKÒÑ=ô¥¶›yÅ-í »% µ¢-,Bi¡LšF*sðEú;©æå‰Ýÿ‘³eî8Œ`íÓ1­V9{7oê“IFh#óѪ팦îú7½Ï'{ÔF;'ቨrhIGp_²5 ¬·6»lŒ <Ùñ­sh$æÇ/H’‰q¥Òv <¦;ÑŠóœ–ÑcSkÀ':üÄÞ{ÍZ{Ëåzg¼a°# ÂêRµäQá…ýPeâ 6n•PY§úæ‹DZ¥£r›á"ñ¨o. X•ŦIsº7EùÀ6â7 ùýµ‡ä‹ø œcN¸4„û¨_t–¢LÆÆl ¶ªøbVš˜Jð½|Ó‡ÉrŒ>¯V´ªšÐa¬%™c…K5LLU¬:J¿›öcì‘•QÖ̈= GœGâÈ,­›s gk~ƘӰñ–€¶¶É»H»ò›róq_ú‚uvNüQç3õÄåÕÏ‚?êó2õø†©‡¨‡kX[üñ²}qܳÆ'8yÕ|؃ç3÷ž×Üøy™{¤GJ»ñ›èã+xD~ŽûÖĹæ$?Y·™HŸYðÑŸ—ÑGЦÕGU”>¦?`dƒþ÷¬ÑGhoæ¤?cjòEs^»˜l6ÑgŒ>pD”‘Gâ'à 5ëˆþ4ûÖ†Ca¤žìGß±d³´n>ÊÆœ2.4Fée|7´ô_ÎÅù¯Ã]mo³u;ûŽ&ZFËC(CŽo%U¥µ. S=uÙqùÁÁàèm¦0ØqИ'f „u!a'Ç™Ê*a¬ÔÜàBÂ.ùëø€{/¢ªÏAiÆÊ+G?¡*ͱº k9§ÝÒê\èÞ- ÄMèUy@œl Î04íõ›‰FËëH£ÑÔzRo•,Ë%rér,5²ò¤ÚdÊ1#)¡³3`•9 )jÂpâpµªH 6& )q]iuФÀ!ÏRÊIM€pÛõ ©!$==a†–*c—6.°p:’ö:¾Gh“盓:¾G£åC N ¥ˆ•CƒEñ¤G BK•åxü Š¡¥ÒißJK—$.yibÔ@L‘ä"'-È¡).#CЄXjP/u»Õ, ?Ë?Ão¹ãïAÒ4Äy÷‚PãNeŠÃW9ÔZAåhW”ݰ ÿî*exr©°höµ®'l*IPï¼nkGvA8­ š‹Úa….meYµL±:…%W½XêAù×JÑZIo—®$oÐ,ÄWçïg"¾&o…O|¥'ÐÅAúÞš P ¾ÇµãcˆíÐè¶IˆçXNd‡¢2à ,H&U”iȯ®RÎÆ¾˜ÛR:FŽÛU¾†°S,㕉±Óó çéZÖäÌÚô΋œï‚óà¦ÆÊ:o|nz¾¤ŒË—ã&:ÂüÙpSâS!gÞÙx.älq5>'rÊ 3>všpy`q‡ú;Á‘¬zT„¬;Í2Μ8!v*«–ZäR`Hþ+B¾ìuä0ä»´üW†êù@-'•tÆ zrÂF©j]R°àQ¦‘ãYUÊ#¦lÛíêp9×B…¤jEü:;§êJi@ue0"ÔeEk{€"x+jMÖpšMJ®î-o(÷ …Ñ]ñr§™Â²®Ó£îJu¢îvWŸêÂÒ—Ø›ÆQ]΀6 Õmq®›‰ê¶8×ÍMuarÛƒp•”2·dW+mã:ª=d7Nl7wÆYç'Õ)•xeÑrª?zÆè›ÕñßBV†ÿRý…lüœ'žÑHvWx0Ä2Nþ8µ"†¹YªÅµp&a9ë\xfMŽ#ã&–»m¼–Í œt{±ô¢R$¸†Øl+ë}|eÄfä¬Ú6qrb³r˸ºÂÄxZ$Ö̃§g½‹SßE ÇS5¿R׃§ºr„œ\=¸ O “ÑZGxŠ ±«6á)©wó˜m•"¦$ù,x*N¿Ž€§b”HÐugÆÜטè.®“ù7@=OšÆÿ@€öÍ;3Bd.ÖZÙå\ñ"N;ÃS\ÊAÅ…ÑSýT\ÓÒ4ž>ýõ‚žß„[Ê÷K«VYYÄö‹¬et­í»'OM6Ïà\hjüÓ_4¨Lâ†ÏþL‘ò$f#¢OtCkZҀ̈́›îéU§§ºŸñ ÜÒÍcïb€UñÜ<§ºd²N·çÅÍÔ_̘%Àéu~Ú°32(ž;[’ÞÏ„-IïÏŠ¨ŸW÷•­£L~°—FÌH;'õ(€æœª‘É:Ùž›vª'ÂÎÎnE%O¸È D:çðv­}ÕÜùd›–Z3!gK%Œ³ººQ>Ùó3vËuœ£ÄN±”v6ì7iôÕìÌFÃΆYÙóbg êgÅØ ;¥Ðv”º.ÝR¹ÙÄN[„0vžU)j©órNìŒAý¬;‰\&º€f×ΜÚ"ÿd*{K>Þ™°³¥¬ÎY-òÏUe?…³K\ºAÅcag‘¿ö,Ø9_ëì|z¥(õsãìã±–fsùW%¥ó`çYµ¢q>¤Ó^eÊÇ? ÎÎr§Wñ½þìK7Ÿ‹z*kgÖos6ä„§WŠbP1Œ]R¤æsO¥eó/·O¯Å ~bǺ6G¼_®¨Ñªî a–Pbœ¦N/=¶ëÍà…¶üW„…Y‡ËaX8d´¼¿×F òÃŠÞæ†mAþ¬¯õ)ÈFqÖýˆÜv"ÿvG ÿñ@£½õd…JXiÚ2\hK¤¤hd bw~ºÛùYòåæIÄn©Í¤Îzå±R&ëæ9W¶ #FIü­#΄p"JQâL$ ’ \‘«éÑ”!ï:;Î:?©v”–$ÓZï1 3¡"“ï…‘œ€ÎÉÅÒiV±×iˆ*‘ÚzíRïÒH„°°ŒÓŽO‰°—ÞNZë5Âyd†6ìŸ>Ú”8p\Çp²'ÐDu":±q ÝØØfQ;..Ue9%VŒÈ¥…á('DBt¿XrÞLÑ‘~’q½¾,2Š¥šEtà¢ÿ7 2ê¬Óæ\Ȩ³5ŸºO€Œy\t ‰4j=­wËØ_J1Vë¥$A¦;Ö‚ÿа#›r6\Ì; V¤“¤$†‰±ëKþ+¶¥BþšƒmÛ9ŸÚ& $x®)[&=oñf×wŠ,[!ñ`… H™ g—h]‹ñ¨+P^¥Æ¹ãddkëÍR©Y2qâ,±$IÒ²µÎæÆœK¶ÖY¿ÜX âùht‘ùãÒå ö¤iåŸmÃR˜b©ØfâDhdÀR𪑉8^[˜T$®TmâÄ©Y,E:Ös„Øù’¢²ó`ééö‘XÚ’Tz<–xóü>,!ý,±Tò=ˆˆ£\‡`)©}³H7vJOêÂ0K³Ù1gÃÒ¬Ÿî XÊN)Ä[£r'}Xª'¾5±Må¼ËH͈¥œAÙ7¼À–BÆîëIôsèƒ5Š4–3cé,µ¤/Zƒ©7Ø’tG/Tg€¶uŽhé,Þ Ñý/‹Þ{ºÈ©¼)mʃ”ô¤7—6³qn´ì9¦Ñ&ä60²ÈP>ï ð_ ”ò¹ÿš$ ÿ6¥~“ƒ’bÑ%•«Ã3“áFÅw¸³@ &½¨BT—ªYš&¿0È–®ÆÜhù#i!_¶v*0ši /Úè0Nä“-ÆIƒ|rùxH„°ýÒ‹«"ú¯&Èó+„B[Rg€F›—þÇU§8³ Œ¶”\vf3£å‘­­àâd`”z”Œ•®Jù¢Üƒ dß:U%ÌçWŸJÒ a£ÄÕô¦èÈl9»¡lt³¾,ÚióÅúˆû øMá€ÙJ„ÕÐñÖhVeàuXÖ7×þmõøn÷èî{‘¿]ORÒ¢cô!z×~EW×77¯nïn7äOÑBÂ×û7›W›Ÿ7·w—|§t÷Í«÷7h^ª.øÍö÷å/×—ï^ÉÊÔÊ5ìÚù¢†¯Þ|||ŒÛþçîúöÕûëÇÍý®5|¹¹¦ÿ¼Â]ÛåêáÝêþ~õk=Ùmk2]z¨ž\ý™ÎzäwqApùû…rªÒ¨´Z çqÆ^¼Î5¦M`µ>nBžµ•5ÎChJ s¡<ç"5–Ût¥P!5é ¥ã‡9=ÔîaOŸIþqÔÊEZH»@!8‘©_°€ö ê‘IÙæ‡© =ÂvÒ@¸m£òX·IPxèÈMҸƳ†‹jY0ÛA„¢IW¯vs‘4°••æÍÚ*Rè©W§lhía·PðÎÑÈPùzÉ ¼­ºÑ´ÿQS½bô/Ý& Úém“·[ Ð>=«Mí®£®Aƒ\/ªmÛCÓo#ý¡>X6:¾»óÖkôQÖW^Q–“—™à®_¹Á‡Ç0±ó›fЊʣ†4?afåŒíôÆã³}²Uæ³]{‰qs¿ö)¶•%;Kƒ­þæ4"nm“ˆø4œzwÓd£Žh2!Ñ05•Q‚hÇëШ%0y#"Dß ^€bïU)¸ÍPGm‚è¯A>±¶òJÕÓÉ&z#È‚c2/ ä£VƇ66ˆÒÂÆçÕB ·Y:ŽÛ~¡%½†„¨§h‘hŠ–šFñÒÐÈ„ÏZñÃ’f#µÐ?6[Ñ(~% ž8Qšº• m46šíãmh£o¿²~ÚJt¸ëiuhóÄn‚µIZ¡î0ôÍÆÝ+u ûÂÅë1P!×…Ž×M¤Þ*ÍOG²Dœµ`Nq€¤¶Äð½ö1Ä5ÉpÞò¾F[ƒô‘6MÅ{ȳÑRB¼×ÔfP¢: E¼˜¸qñ¸ñ§Z9 Ÿ y C:¨¢;¦ § fJWVÛî m‡ŠÊK1HÞ£½\ˆ†+6—°ñ=[ ÇG¯Ï@{º6ÃK ¨)_e>:±=^L2œ>^ȾëÂÅÉs¼˜.@´åYx3<^ã˜å³€×ábk4¶1ØZA¬PÐ ­ˆ%=‹D;õ†h£ õÊ­¿ Fr¦â&Ë[,ӮуìQn’ƒRŸSÚaW.ÅÊä2OŽÅ¤Ùtî.¯?ÐÿhèËÍã¯6„¸ëí¿vNÔîx¬—Œ>-<Ê7vý]Ú|ÚUWDSTæÆ¸ßI£ ȸoåŠP´YÙOd>,i’K$Ù‚PB9¾|Ò/iJhÃÕtå„#¹X’žH)HÕ–†Ý&½õß$ÿ9¦QfÁÒŒªG|<ÆŽ™Óqk$A7‚ç:ƒ i¡ÓS[ ­ÚÌþtXP-‡{wWz–WNÑq&úÉ PVê#e‰!ÈÚÌBò/Ñ_%‰6’RSu5¬°`N¨ ä&"J"¬#UÕkk¨ÑJjs¤¾*da—ŸÖÞEOJŽ#ÚZk·â7ÊÐz<~J^ÛèÓ{‘â(R•‰É6«Pà†Eëd_A•Ê$žõB‘Þ ¶;b)¤iu*ý¶¤vø,ïJ’É–H/ ïº;Ÿ !$ ‘kÓÅ“ˆCjO $˨lˆ—]‹V2mé tK£Ú‘øèØ Kk%Î*­E{®—…H™rÚ„6ÙfÄ9ñËf¬Ûk§B²ªÍ »G’â·`@¡!áL¡¦Í2á…4 !Ž®E@MBÞI'Å\Èð4*b34Œ&ÉÖ*¶ßÒÔT6"^ün´Až%ÙÕI]¿‘$@¥¶OÁ±DÒHt†~§6Z¢“žÆQÌÌÁÙ°lc¯šè‘*˜p ‹ÈžÖŠKŽy¢gÜÑ’$KÓ!ùÑkef­äÎÝë9É‹>¹ÈÏÒ㇇õú¡ ŸŽ™Äh|'f¢¬ƒË ²l¸ÒVû ´»Æ†6B4݈´Z mµÆ‚„x¤"íFB¨µÖ²n#gÛæÑlfÍ„›¢‘hȧ0'è­1uGǨÍp=E_¿Ï’ædøiR €^ÄøkHí¡£Em¤„Ïö#Âi©n Ç¡^yx’ˆ )Ð5–;’ÆBNAT?ܭЂœÍkˆFƒÕ³ÒhhB²CGë3È6Ei1CüÙÙÚZƒFC»HZ¢.Ë›àÍÐt6A£áý'=ä02i4&ì¢e)n õd…ujzÊsCK¸ ­"]†^pΑ¾Kì «>ÒJÔ{èRf/°«<È˱$M¼²DJ%{Á«’H Î(åèÜ/Äb©é$:䛥 Eë–ÌT¼Ó "⚈=¤§ŠÝäN&ðC\ WWòªÄ'c ëa®üåe‰–ó‰ˆ]ÒeOµÇi1GxŸèòRJ>žiÄÁÿýÇ¿}÷“þiàø‹úá‡ìÒóà$Ó ƒµÿ³üAäÈÇÛ’x8Ì[Šíwέ5ŒœC†PʺׯsCÈ|î¿ä°È]xméÿòCôy/eqðtáƒd×V#m"¼mÃ7žk 2‘øpù„b!AЇŽÿk£ÿº‹ß2¼•Ön†²Íòó-9Ÿšˆ|÷ø”Çûˆ¬çìj0âúˆ»!Gü}ãÞÑÖÓ)ë÷¯ù/÷_%ÓRà°ÓøÃŸù/7HΙجtí°AÂ¿Ì :ï´¦‘d¾všd%:ïŠGB–¶iÙõ,$²5p/¾—ßÃ÷*7@Ÿ¯]–h•º\ÒYƒjŸÿœ~q‹æ‰] ádŸ;%¦Þ+q ’N²ßFÝóÆÇ‡íÿ¶·$-Üà ¯ô•+7{·‚7W³{¼¸c4¬ /H¨¶ ,û^XÚˆø Cmœ`ÅHl¤kHU·é`=Ù=(ÙR²mCv:¼`ÿ=gõY¶ÌìC›õ´?¡$k”ÛaI³õ2ˆèé¯F³w‡4AvB"=mm¥1¬ÇÚ&êšÌ¤[|€¼l¹êc“»ÃÁÞ¿ìÝæúí;&Ÿåâv¬TqN镌² jÃýJQž†O¡?1'•±C’©\mþºúøðp½ºýËÍÇût™éo4uÑËï6?_¯¯ïnk-Åq²ã˜õ[^ÖPéd§erjm­çý2Q¬Np¿= od’õÅÊ8µR&Ÿ™°Ew3LVO¾É _òÚæÐ5M^lèÖ¾/½}sœcµUÔ8Œ– ÃGø9ÖvoÅi¨ó§÷ŠxžÞó*å™Á8ösÝ34Ž)àzS1>nÛ=»cD}ˆÏÞÒA<ñÙÓÞ8ö¹ÜÎ=öé ogMOÔϲW›%ƒ9œã~Ììê[Î6á5ñHÅÌŽ¾¨ ÷ÏJö†b>9°áNÊ…3hƒ_§ÙÞפ-?¢í*¬Ú­ÂÒº mòÙÃÃYFÐÓ¼ 'èä·-¯kó;-Dz!‰–”¤è]!Ä!óÇ Jùdn¯3mczËRÊ~¨ ‰G)<ø–À @Á?¡³ì‚¼‡/›—›û¸1íßy¡÷m+‚Ù-â qñ½X<ÍÆÄâàþѽ„ÌK0–@ð¥L¸! ‰ä“Å÷öûµBùä&šN ¹¸Wߪð¢Jý"¼Í`"¬PŒ ÂW—ô·iíÔPD,IÛ·0]Xó:o?ã²Uå`ÌçÈŸ Œn0¢Fkôï& °Ñcn´±`,+™éi+¤OÄJâ–¤.E0c©Rùp¡Û*Ù×Öh¾ïÚCUæô‚%•q‡§»)zm禮$Ò˜ç$bK"NâûÕÃ?bàñwÒ‡ãsÃé’äÃö_b­:(œÎK‘Àöiʧ,,YЪÛ<°HEâ¢uõ‚Ý©µ«Å@à 7R›ƒØ¤‚G!Ib±$ý‚c)Djå6ϙΕnÙõIŸ:$QC°V› ²1ÃY’´$ß^K§ê°T"H€`J’[oDPü0Ëv;gŽ=âQØ;ÂÓqÛ j$;èЦH·„hÁµ_…tµ'MÖƒ[¹Í_? hÙÄ%Cà‘i>¬+’ÏØb ã9ÌJ$Ó!IGÕ‹Žæ ;ÍN”‡*6*(ác@°¿u½èÄXŠ2JYŒ@ËIŠ$Ãv€]œ¼ll‚çÌöÊD{æ@â¶þ°æ=†ü˜C›œ,–J^Y·yðò L§–Ï_çm×=§%!]¤Ü³H8ÊG¦ìOÂ"°G×Ù¾ëlßGõºˆûœóeûqúЖ²÷q ãTäŠ^Æ£2ë¥q†Ò›(ŒiÍö¾· “½4ê¡Þ«+±9΢3è²ÃnìeW:«èþÊK©r·E|Á^`ö0ÙŒ˜= jsµ¾Z­g“¸“H¦ÆÚVȹ®~s¹9N¤1hk2¯à  N \Ëå¶ÇØŽ °h™ù¤>Ãç8Ùö ´Cü²ÂLÏÖ®Ï<ý–°€Ñ`j$ŒÚ¨Ry‹|b3‰H`Óå¦Fš¡](¾gRh<a¥…!©Æ×ÑG —žx³à<ì\L’(¤ FW}!5½e”¶©w>±vAJSäá’ºÛúöǤNû‡Î{ 7n$úÀz¸²Ð&ò|Ú^4¾wŽ“"îo&$ž¢¼ÈõM­ÆŠˆ)®>”dÓÜHôM¹y'œŒÙCR>éøZƒï²zy¹¹zŸÂúêýæòçëÍ/ÿ´Û›Õ?>¬ÞnÂa!L¬OËö‡7w÷—›ûÝO&üK~Úž§pµ³ýa¿\~ëþw‘ÿýáÝêòîZróÇßîîÞó[Ù·`¤½4¬)x»¿“:üHc9’‹Ñ{áðãÇû{:˛կZPøÏnkÞÝýòöžóxÿqÓ|òònýñ=?ú±>f>5{ð³Ë7oî>%/xûñ𴤻› »õ&¸âì #òïù1ÃoǯÜÿþËõ-Án¹Ã`±Ïßì±ÃY³w5lö ö0Íßxs÷× ¼ÊÞÓÛ·,@î×µÿÚlß¼ÿ°ýéàßñ§÷›ÇÕåêquÀÇ]‹Tr%ò§ûË«WÿþÝû#¶^¿úÿîîÿq8Üaõæî#­n©ßåú¹Õã¿\¿',{ùðóÛÿóéý ŒýIgÖc/­_{¿y¸ûxÏ›öîññë—/?QÝÝ¿¥—Ðÿ‘dO½üGRþƃD<©žéÍõzsûÐÿÞõý†þÏtß¿¿»}ClŸ}xù×ûñ%Tâeúvšòúî–è7)w÷ÿ Áÿùíž9%‹¼~¼ÙüË¿~ú•~¾xܬÞpÔ­ñ^¿"ôÌŒúòŽÄ;ôcsÝÑ&•,ùÇzÍò勞6÷ô‡^xþ²ySíÛ×ë—ÿ¾ùpwùqÍöh£Nyñw×5Pr/¾ßüïÇkzbÔ›ÿß»G‚È´“ÝÜ_ÿÏ{ö0í|ÿãÝê~óç›ëÏù´÷†o¯ï.ã÷ÄÛ"ÚÞÓí@,H¯ÞR“ðííÊ$4OênVo67ß¾ø‘¼8úõíýÝÇïiÛÇwÔém,s¼ÕñücFβÔ…ßÖþÝ}ãògÊ’hµí¤ª†=ƒt §Ù6]Ѽ=õh9´Ñ77wMÁ–§êâÃõ6Þ˜æ[Ø*BäâÓ㋤¿GARÁG¤c'«C_’Õëa¥€ä½$Vr0™Åh„6vb·ž­sI×ÝgµØ­†ûnÓ1’¾»aýá½1zÐÏ•C§´ß‘ºVôã¬/å"!OïFØ‹gÓø DGQFˆŽRžf3ÇŠˆXÑîëRsæ'tίŒù¦&¶ÔŒ”IúЖ¸1:ÄÄÍ‹câæì1qsºIÜè qÛу]Cø¨yB×¾VâVl5Ëx+Ò’ž™häé礕Ô%£Gj\}jÞòXÏ#Ì aD‚åÀÁG½v°½:|cÀ8çØ÷X?Z¯O<ÚâyË-C޶}ŽÊÑà'1Àx¥·¿û¶DÒ&ËÙçŠuÍ^½rèž ÉkOÇr"VXdlÎÌÛ¬Fµ­ˆm [«‘†ž}o‘µr…ÍZ+àh®NÓØeN4ÊÜÆÞü|d­,+Ê£ ãlÌ”Žï!T€X ©H6AvfúDì… õQ§ýçÅþ÷.»}naDÒi?RúBA¢š’FÖ£rÔ-Z¥°Æ¾ÝÔ¢NûÏÉ ÷ÏmGÝwЧ–[k j+pSÊ«=?ìÒØ´LÆb†/…š ’´9àHe4µBÄ1½†Ý%€h¤Ðœî¢Vžˆ Ôš ÑKt[åI:&©ÜW{¨ G’ÂW+pp«å€W\xm×7`€€ À„k&MÃ7J®σ ’³r½Uû :y/œ {äŒ`wYS1iR¬çñâ~¡²‰/BxNLòR¡v›6¼,ç‘'Š\Ø™3{u.T÷±Ú¬vŽß2 ¢yÜÊu*êÀ_ñu¡ Ï­'¹ñ$j‘„¡-\þhv†5Nï[ ¾h eB³ìµm•¬4J‹ŒÓš°ËˆÉ®sHÚê‚´Á…æjERqf b_ʲxäe5zi9ˆG$tm|@äµ6¡ÔMÀK,Mhÿÿ·w&;’$Ç~•x ªäû"éÆ+ßA`Ï/!’À§×ÿ™yDFVFÖ2½Ì48-@ìñÎØÜÍ~ÛÍÖÕB…Øí„)+·¥Ic;‡ÙBŸ¾6w§iƒ}ˆ((+RšD`µke'¥~—<ΈñcÁÑÉû-]¦ê}èºþ”_ú¾íTq·l;±$͵`‘5˜¶D¦»8ó÷ô¸ýûtºîQëF›:{í8]÷,Ê·U5}ƒ&#w CÖ$Au–¶h³Î}m.Ê^~ØŒ°¥DäaæÍD[´žé‚˸˜E×¥4#aú‹ÛL1#bIj#Ø¡·©ÅéP»y~ò= s¯ˆÝ‰rŠ6g1nqÜÍÃS {Ìq󽨻Rá­EüÝRá;ÐßÞ%¼ÞÚ´ñ¸å÷´i__ÎöÎ<£D2±ñ]xe5Fsª2þ+¥ö›HþM$®H¾è—óñÁ[}õ˜hüïïIµ=ËQõT[)ä‡*u³+0z ˆJH÷€èN<=cÛM§V_bNx†ˆRÔZ¿cBÐGN³µÛÐÛ+±ßŽò祣;øƒ?z”oúYCïê÷³7o“è­—õû!ÑŸÅ•uÜÚi¿¤w”ÚÕ®)ªÖç<Y­Q¢/ÍYÝoDC½$-f2Ê(ôl9”Ù:ž–ÇNÛQi.…ƒª¥>N9ÿõ 5é‰Åeí`šq…&Ó”5$ YžhÙ¬´È„y£Ñh£¦CG”wPÌ–‰Ö©£¹G|ôH—\VcöGñŽ$¾V©aÙŒ¢ˆÆúÈžÚÓ°ßq£1i.±ªJ4ÝïdU¯\e|%Þ~`-’¶kSxræå;Ón,£’DÌ–ƒ%Þ6›A]ú•Ì@û¡8†Çí’¹þb*žJKdØ9¤A¿˜1“¯’!‹¶"º,µ˜7šf©Õ¾“.µ23§-†1GtÕ;¥Ðj³íZ`äÐ b·mž§=':¨i‘ùÓy³°SŒØŽ‰’î¢ß Làe¥a6;¥3ª;AYéäo£ì®e9_g×—mBNT¢&j›lô;í›ÍK”xÁâRö[ññãŒR Jo:÷ðSˆ…ä£5tã)n.̵}–x€ÏèR)úa­ÑæšqT–ý[¥…GÙX·Ib¿#…ÎhÚn½"C@¤ÈF©é±ò‘òJ2E„<«Y9=“ÂL2ŽuGаÅ;1™Ýùóh=5S]ݺ±FŸÀ>7LZ=ãÜéâž.ze@=meH@w}0€eŒd]™èûØZz™‘÷³Óa“–ÎLx2|hòøeîÍJ7ì™ðÝ”èU/2øª ‘GðQ`TT-‹4¤Aüv”œŒo’5šÀ[m6¯M£Ù½ôÃÚ0™%,Ðáè…èñ$ªa~jqb³¿žøÝZÔÆù³`¼Ò‚Ò¨¯õë þ6OÎ×óJuì 'àÈ­nMÈOmÜlhÔOéê¤a ±Þ;×pÓÜ..Ú•”ª'üë/œ;¥3ÌþÚÁqºÆP½pŠ3Û³jÉòtÚ7Ûjaj´¯Ž@Û(­igw ñS$|ê3ÇÖ‘âÀ «§iÓõMÅq«ûp5ÿm¶=õˆnóCavž­µ>ü—ð„âñš€†e«b‘øŠžÒ‹Krå}U¥‰lŒx£}ÝKeh†aoЗV#Û^LrÑ`¼»†mr«KÉV²!ÎŒ™iwÚ„áxJ^~ï¶Ú¦{M*™ù©X2DB7"f°ŸÄ3µ Ir™È «1¦&wõÓª˜ˆ¦ x’9î¿öÓFSx Q?…›ÈW™YØ]NŒàubL³’jÃÄó†-íÍð¡½Z•…ßW ~lcÞw79Ýi[VÌIÅ'ŠÆ›Ñ1èÕm¼·^è¡S”DîR‡…S¤¬Ñ ‹=à-V Òa¬N“²Æä¹ÔèšT Dà§t=rðm¿D±Á”6ÕT„nZ ÏÇfqØÕL_˜jMûŒOƒ;†$Rw蛡-U]X"~1ŒP%¯S‹öù‘n·<§˜FølX/ EØÅ)–)š$MKÚ¥h ldïU›‡Þ´Á'x"[ã|C¶®Ö{çöÚÃa.ؼ{¬úéG‰×?ý÷“ÍÉyÓÄòŽ_Ó+Eô!+ºÄŸe>&³èÑÖ<13±HÃ¤× ŠÜÌå‡Yd·{vlž²ŠRé ;ÓælêZ1Æ»ZæP‡¡Ç靿ŽúÉÿþ‡Ô{5Ž,müf&ÔýàÎuU»Õ»ŸÀr{}ú¯ÿ{¹'?ýåoÕUÿü—ÿä}ψáR˜ýD &yðÄð…TÒ¯½F½ûÿË_ÿíýë×z\B/n}9iéCg=ÿå1ÄÐ@&¾5ÝARxé‹ùPæ½µ›¹éˆtÉ„¥×I©Ré# ‰FGN‰ƒùÛæîIèe¤onC©:$¯Û,C¦¤þyÀIhåpf)½ÚµžèôÈìW#®×¥úuŸÎ~þû4ì¼-ÎQÖf~M:RÈ0°°WzX£HK{bØÖª‡*ebÌë)©ÿ.E?ÜÁMþíµ¦$?ã‘÷¿ìÞ+ô^Ó ®]+ žOÈgùÏzòÏÙÿ÷¿Éú®2î}sNg£Õ¿ŒÐŒSŠtCobFTË»R“×H_Sh¾ú*ÿèÀžÓ!ˆô>`Ç€³Îk¡‰ £Ì˜šÇ½½máøúÞööŒ}y=ª*æŒòµœÆæ#1·EfºÌØH’eRÞgáƒ@þ"ü0€ë^“!/`SV¼?™Í…äìøj7«¯ ௼Éö]÷<¦&œer›¦ŽthššÆË¦©úmÅe7ÈÃËñÃ-&ŸàÌ›«ÇT¯[à‰4‰¬w¸×º·ŽÃ8fÞzÂ4ŽœÐ õ'Œ™_sëðÈâr¶å`íæÍÝû,"e=e¼?-”DÚS$:X|B/Mñ‹ÃÆeÚMµ}ú>\uYYúðdS×ëo±b <u_$õ= BøÑÈ”aØ%7³þu1öU9s†Çô««æ 3µOùÏŸV^u(7ÆÝW ÒÓ¾Þ?ôäÇ_~F»ÁZüö‘ªÛÛ ìpGº ø9ÌYbkÃÂE"Ä3ŽÈËöv}ûÙ“0ÔñÛEÁ²Bq°]Ã5ÍŸŸvÞÖ–D³P\_dÈ„¸¬8Ö:Á6ˆ,ûó /mÜa$SË¡/F¨“¸B°»Ju–!¨×N7°@6{WÆ¥# mEÇ™˜scÙRö dJÞÚDÀbpë8 ´„5Š¡í Âëñ-nŸOYŒ¥i÷™,ë ¤-ÕÍlãW¶mJ^Ø.Xät²- k7$ÖR¦ô°vÃJK2ïtFcRìªQ;®ÁörƒØ^uÛÃKíh{|ý Ú>ô‚¶‡-Ù)â¸y´=ìò޶‡ó8 íáè.h{<ämô°£íéìh{$²myAÛ+âÝÐöŠÌw´=pÄm̳£í‘Ív´=päm«m¯=G[q¹ˆT+´®æ µìmÏpâÚž¦°çÏ«„ÿþá7•Ùoà·2Gß¹+Uw (êGUW4œIº8ªºPie\«ºá⃪+² ¶=Žª®ˆÒ»ü êv€”q!GUW(Rovƒ‹ª+²ÞÞÿ êZ&qGUWP4EAã¨ê’¿”üùGU·ÐnÚ£vUwJ ªÓ﹫º|Ü´Ï?¨ºØ*½qTui‘ÔfêãJÕÞû£ªK¨ºJƒ=ªºº&’N®TÝI°¶Wš.‰£§v¥éšÖ½ßÉ®éÄÕN§+M·¼\Ô=‰ß\Îío4N^©œ½¼Îðö3S9Û‘O6φٿÜf“þò@ÈÒ¹9ºZoÏØæŸß’CË·”#¥ö„Äæ5‚’7„ÛÓ‰§svÈg¬SNx¬žr£ˆœÖ–‹o3õpx'ßaq¸T©ØAƒm÷@ƒX}Lï)HÜÕtËs‰Ÿ¾C¨½T$¼ô¤×ÜNðH‰ ܨ”fT³dÜx§ÿC‡‘u3öyc‰#SQÞòÄ«.¶&Lï ‘ÉeµÄÆ }E %S¿æ%í‹P PÅ’;Ó2]Sñ¥ÁdŠe–B>í\W-žæ´‰¾BziD¦Ô’„ÔI>s%ŠI{R—–ÍšRíè}bÔÒ¿SÚ€˜k¢„5ÀÈ5àɿѢ¸?&ëjý<¤á%ý¢1%0¡aж ‘"²1[\®lTa.`ÎÚ}«É!Bzx’TêèPÉZO:Ø&kèRôÙ6y™é8­ŒF}@ª5Òk"-[#ùzDÎÒV;ý^€a+Iivƒ‰ mI`;ù9¡“‡ÆI»y’ê4‚eØEÚ*îŠê¤7ž 6ܺKŸ× Ææ»©&K¥{Ê$Dêp<O²ŸÕ¥ßZ†Ÿ¥Ö³hÌ_ì¶“ Â{/†EOJ¼èÇ•¤rflƒjzfj–`¤wmùàßÅDrJM}g"‡¡]è”=I&´‡¨ÕéX ²¼ é |\ª!µ«ëT!™¡ŽKÔ$Â4¤³¡Ž|œ8TÊ  9XÉó€F¾’3Gµ¢+Œ içT¥Uâµ!@­† ØæØa„ï"L2ÆtðÜÀBÏ9¡w`»ô¥ÞÏ™õý´ÿM‹´tX¢·l¼E5ë0.°|¾Øõ¶²ÚHÓuîjq^C;,µì‰ñ~ƒ?œóì‡ôã4?G?N·Aço¬íÆË`»F«.ƒÉʼnhÐgN™‘ì9Z‡À›E¤ëÿ›–€éFþ2)É…äæx–Æ-7Jñ fFºx±gh\?£udY8úWhq bÏž0ŒÖp¥IÒ§–5©\]©¹Ü[pS«î 飛•š½=éµ…rKÔ­CÆ%IÏai% >éÌG‘x¢žÀ Ç©ùß’¹{ÛÌf±l?¼›JQµXjÙÔŒË,ñ¾Ï¨Oo@¤T,oqÒ¤]˦¤Š%»lWvIbÅ`¬µã2‘ÔÆŠ^ƒŒX xi$ORC2¸ëËeí Ëb1}™¤çዽ„ì‹z„´'ùºnЗ•Iì6û«"Íæ’¬-7P‚0r3lÔc&ٳ̂mÒØsÉBn:ÓʈIø6pèpv!ÿ€€&Cx£Ñ¶Þo¢ÎS‚ŠRXHd¶ËMwM#På©§6jda¬î#Mwû”e8ÆE&¶S8-¦åÈÆÜ]pe=®ò•ù²É uKGÖ~C#5˜b¹rÖc¢&É:3;¾ì  ‰QlNémp £3Ñ%à€†ËA2’v:ÀŒæj·„ KQ¤<º¹ºýrFÊj\³HQ_ò0ñÍä<Ûô¢BÇU_Ûbuì‹nÈœðü]õOü©úé{‚¿ûÊj}-ÃäÊj6HhÀKc®³wêªÚ Š04ÞÐU‹Mý)ñm]õj«W‚Mwq-sæì:òhÔH“úie¥'Ö"J`§µ'Y-´ÇzU.»_œhá,ÁW­AR¼&n›É†$«»Ô­±†¹%µŸÃ~Œ‰«‹ÝfFÓ¡ÆO²¥ÚI‹±R{lc¤üâ5{aÑÝ\¦r_aƒu¬fÐ’^ ÞÖ[n{_¢ «Q ?s ½Ç‡h%nV,ÅMdhׇi)ŽÒͧ,z˜­ñi×2ˆ…M”ÇOÔ5RÍ…–yV,³G)AÙDÅ‚—’ðÓ¼S%k‘ðº9ªZ€ÛæÎ+½ZfµµíÊQ/‘©¨¸4Ì—8Édª–hÕ}²$l8¶5U>vö‘ˆçÜ\‘ àô|JvRoB֚̄ÕMiŒ¥Œšh1÷,%^†ó¤y•2}*E’¢‰ì*V襻Ñçp û™bë_3ÊÅC‚f)Ý3=¶e9!Y{nÞÄŽYV˜Ç+££­ãÛΰ«ÂQåˆúçN¬¶Ñi‘ñâRD9xUÂr'GÉÖE³ãúÀè*):„ “N¶Ûh-n´F—@Óƒ'ï­’I:nÝÿo4µ‘šÈy£ÓJ¿„Þ˜u_£H]™øR¤éÖZÍ?#L cuvµÔ¤‹[Äfñ #ó#XÄ»Aoâ×ÑOê{ímak =^rùý8[—N1>Ëû0îÔð~kGï[ {ý¼2Ýoü/q{àdzjAZ\Çm¢àŽÛÄ´vÜž;nGÇmáÓ*ÍÛpmÐpÛZ&:ng²Àm›2´áöÜp›ø´ã6±…ÛR¡n,up›˜£ã6Å‹—èâ±p[–ÁÂ킃ۅþ à6á…Ûºbá6RÇm;:nÜp›jFÃíÕ\T?o[,Ìj¼%1£Í“`À-Þ€»!Ô¸»«·”"Õ ¸ÁKînÒÁ€ŸÉnšn:pw×ø­:6nÀ-¹µ·6oî¹7½ª¸ÑѸµ;pK¸.à¦ÉΆ ƒ”7±ý ¸Çnê*¸µý ¸_ ºÇÝÒ¶t×ç° [_¶Aw[ßCP=˜ÔŽÝV³Í2ˆºÃ‚îÀ@“ŸtSjæÐM§C7ˆìÐ mt[鱉ìézuYè }8zS¸Л⨠½ãBo¼Õm#×¶¡7æèM5ì†Þ" ½ƒ1IØ©Õvs¡7ÄçèMnïBojµ½+LáªQ_è .ôG-ôÆ„XèÇÑ;¸™jp=½|ïšÛÿ~–p•ÖyW¿m_ÈQ eu`”ê¬GKïÔo­)±öáPÞõ†‚k¹K²×ÞVpëëB¼Êp§´üaî,,êšð:bS¦´ç«p¡E¤©¼7»”ºél>ÎŽ·ÈŒ1"ƒ¥CTz<‹Õ#–¢±bîŠDÔTº¼ß"Ò¡‡ÊŠLÞfP©ïº„Lï ;êÙoÑŠk%v »_$¶:s‹é?.#ðuŒ´?Œæ¿¥g±±«$ZnÔc2þê™N[œBHJt)ë—!j0–½,ýyû†‰Z×h»º¶gI“¬"“/P2û”eQ ©b ý¢pæ@©¤•×¢‰·n¾ÓØLwŠ~³L…”×ËG$ÙŠ¶åD´,¤8.']Úf›“5˜Oñ9è©eR6ɃZ„³H¡ ¿ÔØm}€˜²gÊÃuW»AÂ-ÑÄó|j—îp?[.æÚ“>¶ë%-ô)Á¶¯×)!ÆF3<´` éGÆV‘Øh»Â¡ä#i4îk'( 1iöã`Ò?4·Ÿn”±*jt–$7"Šx96:ÔvSJù¾–Í:‹tSY7ê®%§c¨‚(0”b¸VéOèL“<Ð÷„›ÅÙ()~$$:˜ÿP}UÀxíb*&aŸ þõxûj?½gIæí’ öVXÙÔnôì’HW¥Qq×fùÇ:@wÎG2à Yôä'ëC²!jî`Dîfï‘$ÁÒ ZÜ“ Á‘©ÿp—ð±å$g2|“/^^©›ÇÖ•5ÃPnF"‹y’©|¥uNÁ"¨õ æK ž…nº„e$~ŠPj¢'áTî¶q‡% îçÑég«qK¾óÚ¨Ú­Ux.;¾¬s^A‹ÚöÜ2§ FåÙá%ú|¯Gý:ÚAw*„ƪmÅÁV¡è„ê`ÓnBˆc`“ØÏ–ž7‡ÎÁî›×fÜRƒ®‡ÀÛ1]’Bw:¦n«»Åe}]Œ‘.7À›4ÂeU7’[Kmd¡DÉиXv¹&òa ZD"+ gr "æXO&KøAàûIõß&•ZW^?½—“ƒQ6W †™% ,»Ò î0!u Zç2j´÷$?Œ›t.3×ÊÓÓËçëÛûÓû‹ó‹'~?ÂâÜa±_`‘´±‹í‹i‡Åv€Å¼Ãb;ÀbÝa±`±í°X.°8vXœ;,âÛ[°˜°¸±aïG6L,öx€Å¸Ãb=ÀbrXœX¬,Ž ,ÒÞlÁb?Àb1XlGXÌ Iߊ‰gÀÉ0Ö 0zÁš5$?ct`dxÊŒsÆrƱc8c[ÀŽÀØw`,`œ ™:´ãØ€10…€™c;c\À6`„sÚñJRÛóŽŒý‚Œiçš³eÈb!c½ £~¼±Ç2Î ûÇŽŒé€ŒmGÆq@Ʋ!c> cÞ‘11íȘ/Èwd,‡„ËÇŽŒå€Œ}CÆzDƺ#ã8 c¹ cº c¾ ãŽ1;2ö Á£…Œ°ù†Œc©¼ñ·îzOþø©ýXÞ?|û—×]ßßýwéS ±üb-y¯{à m °¬ñ d¹ˆÏ:áK`ØRµL-xÐV û¥ HB(Ù‚_ )‹Tu9úýƒõ¤‰Ü£åw®†ïA­D.]»õ·:“>uöFî*þI¡WÌd¤Ê(¹Ù”ÈÓ‡ÆÊpKóôÅO:ÌÉ€~£ÃܱUЫy0'‡‘õ¯k0éVõí>°·ÃÍ—lûú%©BpÊÔFRÛ£p¯Þqg˧›~ï£ß<Ë-úõ+‘ÞAC64gYm8³Šuð%$܈¼uæÌY„³Ð‡”K(FcJýŒ€`ò‹E¹¸t¬áhqx“ä•l Š?£N“äQòT  ÷¨µœ‹€k¬‘Gm¦D±†1x'ÉÎÖuúö¥Ï[•ÿj0áuE"{ä÷Fʬ#¼¤ó;8àW³>A†Ñ">,“^aùžHm©ÄÒ%ËÃÊ–Œš¬]|MV•`±ï—Ý¥ÄpµLËLCëš›J’V‹Ù<ZM9t-q'S|4É.b¤-uS*“oóŸ¦^"ei…á#ÃîWþ¸³÷>eÏù…0‘À?úÎ|?&’ß&ˆÓæýõ³j>Q´%ÒÚ¾ ©XãꞃßèÙÓÿŠÔ: 'T¡·0Hõc0ÞbÎKF‚(Z'çO|KÍzëat²L˜þ` Ä#É(jfünxòè³Ó®ñõÓ~ïa“ †”~ïYóIz½ùååßÙÄÏÖÃßâ¼³usÃwËèŸÖúÕ3É‹í­A½J#í« ÔŠð• —ãyW]ž(*èzÌ{ÅR/í^ÛÄ#úþ¹ü9üô9E~_e¯Éx‰£öH|%ºÝxÒK`8S|´ôðγØ%™FÚrÃD”wÊS‚°uÚ별˜øe¡õy·t3i¤Y‘O–ºìسGŸñVs˜Î»C‘‘í¤ì9wÑcÐۗ箯+[)É5xjW•amâÉ\žƒyŒ6‹ÑSþ)‘–< LHh#µnopv2÷Ú}º?ò_Vë8ï÷áÑ’r×[† 1S¾^:P4¯ça(õ.Uš kƒV,MЉ% w  ÔMûÅ"1äf×Jï•:Q-”[j·g´uíæ jVÍFN#ú_YÓA´,š'ýº[7róÁЩ}kAòµL†Ìb5k2^É8Œ&)õ¿yXw<4ëÑ¿ZVPÈ>bóqq)Gï˜Þ¨›±É™97Ò&{YÙܤ؅ÙxÝ¢©lY¦}”%¨Ó?„m^›¼¹ˆ 0òÏv´§B!"¯ž2^+úÝSêÔNè„"K|µWè×é~ò/Ç9ÙY$šÚZ]íËüœ%™‚g¦^Š"ónE¬aÚÖÖÈ2¥|”í lâì\GhnÒÍNˆÞ-µøðñEsÛaH¯wj·&TR0\¡ÔYg¿ZêµHÒ Šg’NV ,²du­ùô½ÏØg†ŸË>WGí}a¹ñŽVÇ÷Çêèƒ%h@AòÂZÿû75ÂÞ/õ/³lÏl0±ú;¬§ÓÈ@º<ý ŠEgÎ#ñžèúÕFÔ«y{Hã^n¢jUÚ6;ÂòÝc¶T‹Â”wKýÉÔ+köiìû…$FRàè4%Ʊ~¨™PnŤ»~Ú©oé´ ¹3ΔiR7Ñ,× IÌ6ÏÙ’ñ£ã°9 ôš#Ú/’MÊÄÐæÎ6:YeëTV{J½×ãBífSÚFy´þЂÏtúØ;>‹_Ú-ù½9N‡{=‹[Nüq@"å8ÙÔæelUú¸e¼§î¢Ã}j>ºèŸ.\7ï)¿4¶°_6Œ»£M¥˜VÍ\ݳgŸ’ù™ŸOæå6h»èäëÌðð)O>NæõÖv…=¶+ ¹veî»b¿ô]á—¶+ôÛsZŸT ¿ õ˳ïÐúO?ý$ìþ5Óú§OýÇ_ÎôG‘îzIp"§°ßCÕZ¢H#AtN²‚wäÒ“öF¦Ýu“t¹³Óäb§q²×=BpõÌ3â~+µó=>µSkb~^oùo.“pÝ>ûeTáŒ-MìMS¥;Ò~„̾ä¡à±¹!('–Ôm©ÚC²Ölà´3iìh¦¬¬¾#(AÉ®:iÚ«RÔþdqÀÚBÖõ‰pñ³ÐˆFâÍÏf]¡úpD4aÖX{è×ÒÆíBTñ0Y‘Æ%]5šÔ »Pº~¤Q§7è¶×ôó mÃÐEši!ÑCÊ*êºE‹§l´V¾ËõW©õt5·íÒß̽ۃoìÈLˆ?lüIö;ÙNg¦Ò¨ëÌmMöÚþ‹¢P©7‘4CÜÍyöãýI3_ÄoIßq’À÷‘”òU)ûûÍøºYŽ+~~@‡¼°Hè(ưf‘ͺâ«ø×VfÎàƒ†Íµms?·ÿz"ó}’äÙð€±#$YÑÕ¿þÓßþGÿóÿ–w¦£ÖCarla-2.4.2/resources/16x16/edit-delete.svgz000066400000000000000000000524711420416754300204570ustar00rootroot00000000000000‹°Ã^í½Ys9’ ü>¿‚«~é²/3w8.u׬u«ªÆÚ¬ÚflwÆvßÚ(2)qšEjIªJª_ÿ¹#ò"qed’:ŠÝ¦L$"8~Á?ÿϿܜýºº¸¾»ýþTêÅÙêöâîòúöí÷/þë?Zúgç·—ç7w·«ï_ÜÞ½øŸÿú/þËåÙëûÕùãêòì·ëÇwg»ýçÃÅùûÕÙß=>¾õòåo¿ýV]¯«»û·/¿;[.ùɇ_ßþËÙÙ{ûðêúûëî·ÕùåÝ›Uuq÷Ë˿ȧ¿ÝÜ|xx¼?¼» ªR/_ìž»¼Ø>øþÃýM|ÿåÅËÕÍê—ÕíãÃK¨ í~±ëþÛêMu¿z¸ûpQOëâ"íyyµëÊ+øMÇNBx©ð%â’{,>Ý>ž\Þ>ü!y”Vz•R/ù·]Ïa½^}¼aðíLü5·ì=ÿûÀ¦¡ª×zÅO®ªÛÕãËþó‡íKU]>^&¯ÙìX6n¶·ç¿¬ÞŸ_¬^nÚãó¿]_>¾c B¿¾[]¿}÷¸û~}ùý ^Zeã÷Í ^mqOUë®ëצ?‘© þ˜¡jö¢Ë» ™Û÷/V—×ËKÆ…ÇUÅCþž¿ôîÃãûÿX}|\ÝÖoâU%KŒ?Ççªl}é8oÎxœ—ïî~Y½¼<ÿõúòåß.în^þûÇOoW·/ï?Üþó%?zsþæfõòüâ‘Çyȧ±úøþîþqyu}³ªg¾-]ÁûÛ·Å'?^¾çͪøã§ÍÿÊ¿þy;uéò×ëÕoòL½'²”õ×÷çoWw7w÷ß¿øÃUüoýÛ»ûËÕýæ'ÿË~ºc|¸~ü´Û”dFòÖíïªüûÃ;>û¿}ÿ›?þ~w÷ ¿µÙ|ññû–Z­ŸJ­¼]„(,?Ü^?òÙ{ÿ±õ܇û{épsþiÅ Œÿl†Üaõö¹³·moï¯/åP0Õä©Q©ýS³}õËûõO»…?¼»ûM~ûþÅÕùÍvc¶3•Ÿ–ïï®oe!Œe«ô±üʼy÷œü¶|óæîcù÷ß®oþËõbù=6K·¡µSë<€nm×ú7†bÄHÆÉlMuÿ³³ÇOByøqÛ‹M£@CH+Ú6–€½mý”·æ€>{ÏÄËö¡ˆí—««‡ÝéoL²üfÖLtWç÷ÿv~yÍ“Î0ÿ…À…õ3rþïÞoú®)!·xx±k¾»ºzX1lUÒöðøéfU÷^Æã÷j}0ÿ›ÖÇê•Z/ª{0] ÆÛÁþü2_ôHikhŒJs «Ë•jÌåO=Ü,ŸÇ²ý@ÒÖ©Ò +Ó¦ÂÔTå•qÆhÿ§ý}Wi™P^¦ïÛæ8«ûí¶l‰àÝÍÍê‚ß{~óÛù§‡ìôÕh’ýºZýÛù‡‡‡ëóÛ¿Þ|¸O¦Ò÷BYõå«_¯Ï×|Ü’²Ú6–“¿ŸÇ¶ÉÂê Å7 ½g²´çWje¦â€oÚù2¾­{έܥmÍo ®­®.®Î/,±ˆk`t®É·ó›ÖÖô¡H”m_½»_±,þ‡Æ&"Ötó!4†Ý\ß®ÿ«füV÷ÿ[׿ý¯-kÝõúÏûóÛ–’YÞøåüñþúãa¡ø*ÒÁx, Í'Z/–ਲÖëðÝö="“ ÷Æ™E&áÇ+§C½®Š}¯Š}ï…kVDä}r~9øç¦‡|î^£JziônwÞŸ?¾káÇøÝ¼båêhÃø»øë2ï¼¼ÿpÃ诫ۻËKƪû»®^ݲָþ\˯àýÇMƒì-c«7Ó¶ÿfçÕ/×|Æ7­;î³›1/êïgFcØ…¶X9Töìõ)ª\Pu[@cÏ"\} ÃM¾2žÏ·!o¢ °ÐÎT¼¯Àj*ra¡=ÿ Ä­Ò´ç~\´¼*Ož`AŠI=V]9ã^+¬™çžÉÏJ3®,O Ár›®µ<ŒÄ£­çl+$…ÐUÁ8eÎä5hMlÓÈrW²`iCÞÈÓÜÊ¿†´UÚ¼ õÃHÎÉúRŠlóaà V— ø“WÙtu½èdÞ(°3@é5C´ ) 4§^ôb¤Me™ RZÒ¶RÁYì”*@c«ï)Ÿ dOã< î¶~·æ-†ü\B›ßÏTN΃ ¤tx+4Þ]®DZå3wñ°þïâ"¡‡rÜ渼š£p\`Pêæ¸¼Ùû8îÅÍõûÿHˆÇæ{?Úôä·‡BÉO¤©áí5û©ÍTüï˜Góáu*b]ðŒåÞã“´4Æ3Ò2‚ZE!¶Ú øÜ1z;_i9ÉÒ ÌSX:”V[¡ì±•‰ ËoŒ¹.TÀµ´ÊdvÀ}=Ÿ$PõhšÙŸßàƒ§ØWóø,7ZIWü._4…llåYr9xLc ¨u+ñ–µE’6­Îúç*¦­õÌ4“…àÅ÷òú Äùz~¸«—S¬<ÆF¨Œ±¾nEëì † ¿` Ç&tË“ÉB‚ŸÄê– ‡½†¼ÁdkŒÐXR˜ L Çé %]p°üFÚMTå‘ß(‘k‹àÞ‘ÛÀò3kTÒúIZ7øàìd§(}Om"~’FÇâ´SŠ…[ˆÌˆB~ŒÞᬹ šŒB¡Cï8Ú ½*ÀŒ` £Ô·ƒN¢QãÀxØIdüžÍ¨Â$z ”èÊ\ù©PÒ¼#£ tÉ«©ú&©^ÓÓdI‹” G‘´˜HGØ)j±äǵĸ2DÔÚàÂóQìX.ayˆ•–`”e­8ªX,ã ËU±Uôqä6Ëz‡×¬b±ÄZ€ƒ¨ïˆO³ŠÁJC|6JMÊÇ6Vé•*›÷ÈRŒ¨VÕz¡Þ>ë6ϲàâ™Áp?RªÀ2›Èth½ÒÛš3a7v=k~¢~Ö:ÖwŸŸð^úYž äuÖD‚ÑŽÛ´h­ò¬¡í³P¡éø“G'º¬a«žŸ~‹)´°$eÂfNoVá¢lʪ±Ì†ÞYCÏÈ*X“Qȯ[D×bù–»^Ä:¶€ä]dÕvõ˜¬iñ¼C6·×…6–5Eéó&Y'«ˆ|~rx1"’Oà&ŸÈ3çOàËÇ®µD,ÿZ-kØî—h¥ÌX0ÙVB»YÄvûcŸäKDï}Õ&ØÕâÖ‰Ò¬"­±ÓYŠZ*/LŒ<'ÑWmß‹’/èÌ]RI/.D}¨ÿùýr2Oj ßñ—Á½qù5Žï”FÌI¹©WÈÉž]àv;1Zäd‚óv±ÈÉÄtÁ¢mÈÉñô)>u™ ¼é»³H”G2Ýß¿X*ÖC•¦'»Ñ67­•"°èvÖ‰Oñ`ýXƒß5o¯a™3uÖ®ÀÖYÕG`ëLâ• ¬ÐÉ×ytsD ú½&”õ*´ùªp“(ËäÓ!«÷ !cq`!#xÒfR¢È Ö©u›`,Fàyó¤ÀT9¶¹€ÂøÍ` X«˜¦B¤F·1×fÙÛÖT[ñÓÎ1ˆOsÑpè™_V5}‡à„‚2ßf^¤'c³$ž4ó|~=G³f?Üh¬³u›öÃ-,ZøõRX×p± ³õJ‹:J»s!^ÀúÁ-„y²ž¹»KY€gVÅ˪—ïœFæü𸝹¤c€;µ¬C^¹A×ðÝÈ:ýýìï‘Bœƒ—©_gte=yQF1¯#ÇlÒE0¢l¦b€ÓšXCÊ6^Ì”|¸ È×mèºa 6'¬ñª_ƒÉÍ¢>Çïn䫨W|eX´ÝmDÛ¤ôbvÛ,;ÔDU¢Í[yÓ 8¼ÏOM¶ø9ù©™Ê×Ê¤Š¨ý®X™^œ¶Då-r±MkOõ‡3ÚQl£­F®× yläWÖÆ¨ÛXq[·²ë‡µ«ŸM¦`¨¶5{…ÆÇ gmÝÑ{ ò>[°¡~ŸÓHµÇUÈ/‚h{aôc º¨ ‹y€Qš• :«]Ìb²ß율xÇ|€úfAÖÑj£Äå£,Vž÷ ]ʧ¡bZ/y¥[(já-¬èò)…·BÊ‘¯×ÖgB¼!2®âý¤Ú4‚¼Y6¶!2 k3a—Û[ø:¶1xy˜·Þ;g6h¥ j—"Kõ–c¬á6¦¦ÆGÜ€Š˜ÀFÏKP{-–#æ¡ÊñgZ AH"ZyrŒ¨Òf<¬‘ÈÒzý´/¢h°ó|˜·yA(ñ€ÔX¡EF-Y¶uñ¾Osho٘׷qZî¹ÂúNÍ^]´ö9ëäV±³.ÌœÏù!ØS¯­õNDN—8»ˆ½ŸÁn…ÊG¿áMàÍPõ“IÜ£Ÿ1EAqÎ>‚G›/ÞCe|¾øÀŒÙÓ¸ì`RÇêÛÜ~úâ]ru/_Ä&ˆâ±„Å»DuÿLßIÂrCbغ†CÐr‚ó1«j¯a?~eåÞZU™L±bî*±Õ2ñðÄb‘qk'mm4ÓϼÊ21‰~ÃáÅÛ9ø |°u«Ü D˳sbyŽ7ð¥ñ;ŒÀµµp°˜Ïú¥9‡à¹çñËÍ5ÿóŠ6m—çïÎïïÏ?el¨Ó\ìÀ|Wâˆõ)¤µ9`I»Bå“kA9&F6€šR„ÒC¯>‡›ìH ·cl1›2þú•ˆA¹ìY’HùšÃj‰ dÜgúMN¾HÜš7 Kñê°uƒ`\È4áŸâDš›lâ½Gv¹|8,yr º¹_Q£á£ɸQŸ‘ §‚Hœ¬9Ð ¸—8•5š—8X£‘}~>¸æÖZ k—•µ¢ƒ« Ö&¯Fâ8´v!:u£ÖÒ$—«*°X¨°âm ú`1Qd¡㸕ulˆŽã¨´³ÜÆBø×³ø§â¥œ±~7(²HèÞœ?®þ¸ †Õ W`¡¾kÐçPI¨Òœ4!wa’ÇûÎC†K/}>Wx‘>%¼L›y²bc2x 3gÌvò¾aðj¾þpxmˆí¶‡ŠÉè“w>@N7I7kó¢­‰µ†É“V^´wi4¬ûè”) ?1Õ®€e^EXDÑóQ‹ªaI¯…]]?,¾7$6!¯%z‰ ‹_â¡"~™>†à±ÍdX “eþu32ÈqŠ©%ðkÀÖSt,„s›˜X9T7PÚx6`”ˆÙV²b@q>!V×b$6›ìúqV¢b£ô•õÓXØôt&¶@µ†áÇm1–ün蟛›W`ÅA)Ÿ®G<¯$Ö ]·c‰Ey:Cñ‹MbI¦Ì“LH!.l'8Ù×dk˜KˆË´N÷Pfc@Œ‡»½6в¯¤H“6n!ž6¶qj¯²e›ö™.Û”_à¾;ºOŒÕß„Áê<Љ4«¥Ö™†Òï%ɤ yŒx×g5§2“2ËHyˆ ¬¢£ÿäzîóX{7!O¦x !G×$äš>Ë·FζP ­™íƼ‰ši7Qçà˜¸{±øs«Ò°Ž‘PâÝÉmF„]ŠáÄFMÜæaÖý+üB”¸ÕªãßÔ>™†éP=2†82·Q \Où¿nÔ"óJ ˜[7¥ ¬o™U ÆìBê»7 ¸; ŒíKtueVû¯Á;]ÖŠºž{÷««ÕÅe;Òϲòx½N—:L¯œrÆöx‚]]]=ër9 „LAÖ“z¼!x5”z\ÝÞ’vŽ©“EòŠ.9 ŒÔsš( ÎÆ>÷ÒÒh“ÁXˆä¥½éѺ£r©ÇåŒ ¨«¹ ¤©ÇûL)ÍzÜLGrÒÅ€šFk{¼Ò˜­ÛN6 Œ¶ä7Ð7Ú)Ϭ\ûM£Ã¾S´¹ÇšŒ{H_i´Ϭ۟-¤Jº‡²­Pþæ‚’îe£S"†CÉÙiPr=´f^(ù¾TœVþžŽ²…ýù3;ÁJwNéÂŒÇ7³±Ñ`z6­4ÚŒGRÜ!'AÉöÌ{íÏ5”\²õìɱ‘Í;ï—H¹Ò’kάnçvy`=Z9;ÈÁ6TÈ:b@ŠwÏüg+ÇzªG”íE²°ðbºe Sç–{8±‡Îgð1 ý’û›}¬¯À@Ðxƒ×vÀ XÊG¹o¶ ÑfÀR­W&jvB)Å» –:4°TEhƒ* 8Á€C<'ÄR‰eAÃŒ^Þi´É¯­¸_z cø¡mœ†¥=gf,íUIžK‘i)æXªUeÑ(ÇRªœ2Ô„šKMtf4žG¤ ÉM¨`©‘|3âóp,, ÓŒuÁ¸ Ôm:–º^况”–éÝq–" c±Ÿ1–øK%gÙ$÷ÜüD,@ݦciŸôôXj—:ñ,E–J•UIP¼`“\#ÎaºÓ¿&ÃRf¦9–:0ÒàÅRIö`ÁR‚rßå¢5ƒaXúðþ~u~ù÷Õã»;ñò\] ]S‚1KH’‰ óñe‡˜ô"qáÊcýÂI8ê{hÛ…’¿)· ɨR°m0¾GÌè±ktÅk¯‰TyØžyq)sÈÐs"K°í?‘³9#ó‰ôË4å¡„ØÖ9xœ;Éþ )ž¹¸¦,Ÿ7æ/¬ešÅRœYœ!—Õ2[ªÆv­Ÿ¾á$ÁõcÏ`WV. ”é†W¥a®²>yÛA&¼¾ˆöz=;pGÇE¯XLXØ(\\–‘q âeà³@ÆhGCFd 2Ú¾´³"£íK#ðôÈÈj_ÈrÔ.æÆAG4g’d*V% Û……xk)±tâ½Ú¸(9JUC‘¤p‚òmIèlD¿4‰»ÃUqœ«|RóËÖÛyLCØSÚ)R?µg)[{EKïs?yF< ,åÞxâ¹nÔpp’h]‹ñV|’ÓÂ93xk{³ ”Gl%Mž×/œ„…ÐCÈŒ“¿)b¬Ø‹I‡¢ôl¡Gt˜:lù¡ïª0Úi‘ß.Ñç¦d&±äœkZ/i@\h_BŒE~~¿Pukùx h ?„P_åªùƒ[•Çs'ÁÅw3â¤Ó*$NGSœ TœMýRkl¢) C¾qá!…0Œwª:¥¼7Ì ùˆ¢ü…‘ÞùÅR¢Õ$ŸýBò ÔæDØš†£cg˜hù°x$Äìì‘ ž;A-ý@ä†ywì[7rÖ’6lÓž9ur)zä”'!§>LC‰œºGžxzäDFNÒ) žbc')bì$5íbÃê Äl:vÒ1â´ØÉÊWâ7þE2v£Ý‰±SFœ„4š€ĈÓb§]Ú0;Å)E“”¸úì8»Ó§VŠdÄIØiNª™ç®+E~ íeÜ /°gÆÙÑŸš³ËˆÓ°ó¤JQŸÃñ“c'*) þesvïÕ‰±SFœ„}N­óbg_ ÏÓc'.b§ nPê±gÆØ­Ö'FN;-0ˆÑå¤JQ_ÂÓ#'-Ó[åN±3 1ƒ.úŸcOmˆ'ÂNœhíìóa;Ÿ»R„v™&éèÄNIe‡\=3ÆnO®²Û©*{o߬ØéŸ»R„~éí@ÚINks€ØùTœNŒ›Ó¼ôì±U÷`æsWˆ´Zz5äšH®Ú½£ÏQ]×þÔÆ$qv†“*D}«O¸t. ÁNW¹†‡îu<Á»Ó;‚sb4•§¡é)U#×çËúôhJK°9W±ˆ®0Ï^šJœ2SýÉÞzŽv£Ã’æBÓ[O|=Á–.öÈÎ'2èžî:žnFœ‚§NRIr}.¬O§–ypVè¨R„i”ë±üê–!â) ?Û§SÓSqžÂ)Õ%×çäúôxêYó -<5*½-:Û?9ž<µx*#NÃÓS*OŽ¢<É·™¢Jˆ•'“…ÛIºVôo|VŒ‚–z_RØDº…Ô\–¿…¸úó¿ò$ñÝñ“¬PÖâLøñÄdãL¤˜–qs¦gÑÚé%&‰/®Šã\å“ïÀ¿f†ö9 ŸƒüMqà÷ Áï‰CuØ#h\:ù›ë`èéz‚ƒÁ2[bï*Œ5ò:)shsÜÅŠl³QЖ!9«WÅq®²9M@Ýõ(“PW)ŸÓMÊæñ©É°§L½áúÕís$—êÒQ‚\g›‰Õ;d-û|ïÀàäJLUê¦8’€Ïý¦|æÿEÞÜ‚;р릸‘NÇMóÜïŒZ" ÂÍÏ÷Ì›SßÐʈӰó¤× }y<ŸÜÌ`p™:ñßÇÛg»Úu¥Ù½TJ{l]#˜ •¦¦}mÎRžT¥²Ëøì¯“³lO`™äÒ!Xc<¦©§j!©B­¼;^o¦1 ­ûüO/HþfCëñ£4Úi‰®hZÍ’š±Çø/1ˆN’m>äÎ ¼ f† íXÛ 4#ñ•º@KרI¼”ªí,°ÓQt3â$,âˆ:Kû>½h`—Îä‰X<0gg^ž"h)p CL¿¾òÞ¢Óv‡¦d¼JëLœ¨ÉÖ¹(Ðp íÊJþdÉ5– ~i)\¨\ЀGÉĹp’ž2[Poñƒ'Ïdü2«Ò'´+ãu09’Zª‚öàfÈ”ù”³1šWÈL4–ZmX!oD_i>yFjj…á¯Gœ„¦}Ž©órüÞÔŸ3rüÚìêý2‡ À.0ÖËÀï²cŽ®,Õ  ‚GŒšyîXîËÏû´/–ú þïßþÛÿ…ÿˆr{À\€*ºjY0_ Ãd–ºwKK•rÎýÅe³.Oi¬ ²+ÒÝx8j¼7ç+hqôÂx%¬CGO@¾R¢ÿ4ˆ0ê­"IÆ;Ƚ³Ú=Sôg†>N‹>VŸ}¬yô lMúcP}˜V!Q›þ4ú¦¤ž™qôà`2t:2öiÈ+ƒMú0­oÓŸ ûvÏú„ð̰‡Æ‘ƒƒ±‡Ìé°'Õ¿O‰=è¼k’¬Ð¸–øãY3-òÓê›àfø£ÇQƒƒñ'ÉztüÑþ)ð*«]“}YUù´ÐÑÇOÈ%üwšýÌ±Ï s`ÜNŒ9àO‡9¨žs°rÆas4«XÓ0°ˆ;Žy\#½e»g‚=æya€ÆÓÊ=2â %ŸÔÞqJ ¢ò¨C•±ššœ‹qM7òTµ{&øCÏ Â8j0ö€;öÈhá)ðG¨Š7MÙ‡bÀ¦äÃä'ÇŸf¿{ô3ÃN‹=aœ‘àPÜÑOc6Âî0HZ´‡{Z£ÚJ;ì¡=ÏÌäî´&p§3ù0ö¨§Àž`+CÁ…üvY³~¥’B ‚=  òèräivLç™™{$õ¤ÈcO'ôd¾Í'CPXJ®W6úVZJ´Æ”ªoyˆe³ãsü33õ€9­©ÌéL=`žÂÔI 5¢£ŒMšƒU†aØî— Î3³ñÖÆt:\þç&¿Óc3)Ý[ŒŠÏý‰XÛb±3D#Ť‡Lâkb·ûJ+ëkVÛÁ•²GG˜ „ž@Go´ÝŒ†á#5޲ž_j=`´²YM¤-(iV†Ï{çÉ@(é.¥!饋G“t’âo–"s-i¥ñYñ¿l ø°ÛG,¯ÔYÔ,8º «­PŠÀzËNÆ/Aç$¸§¯HTy| ^é€]ã÷Ÿ*Mλ=ï0fìV åûI¨5d±ÉCÏù~~ž^ØQd¸«æPê0R®ßãª9†ê©’} J¸×­°ä¥åo2”pœÌžM=ÑÇ ¥ýRËüPÂqP:_ÉßDþÈ£M…Òdƒ½Z_I¬1ò7ŒLßF±4ÚdÃùDdTc t ²©q®". HèÉnc% Âþ,}¥K „çSí,šÇ@iE—®˜ÊÚ–í’|›ß¡ëÎ'Íù!Sɇ“¨d’™ÁjV‹†$f0•S!Q®Š}¯v}³Ôížû#DaÚ‚óJbDV!MQ9ði~hbš©²M¹!6Ép¨ ¯a*ôú—ªòÁhC Еóäp!ð_gõ$SA3—'aeÁ§ò 6"HJI\û^ûÆv¤¬÷þ˜àÖM—ò¸Û¹J¦‚ÛVˆÞÇPù%Tä ¹Õ’Á\yp»fœtÁ[¤… c3é…©È»VöÔ`*£LšÄU nBe˜dÊWžWž qr•#KŠŽ rlø´@>6òº ÃQò›Û…® E-@fàƒf¼ö5ÄÉ{kÃÂUJŠ¢ÊϺ²Á(h y >ñuûŠø°@bá‹Hî*í”÷yòC[9§ ­‘<8£Ò{ßc\Ë#äD%ÿhðõùP»ÅR ¨à;ü“/›. rK±/ã@î…B‚FÖå®oȃ  ½¤¯VÍ€5ÖUÉS°ÇEhÕM²¡]Éø`èj@g"@-OVÉ™~CLÆlœO€ ®2ÖÝÆg`˜m”òZ¹Ñnõ½*ö•O•C²ôqñY›n|ž“I–HHúeÛÃIÈ?‘¯ñÙ¢ñ-|¦àͽ]$Y(bAÒB;u¡µ5m8.x tƒw>¦’Ò30DM¥˜á…šBÉšÁ7È)Ôz?¹°ü¤ù+£§¬¤ “ ù9tÛ}kèæ”á¸ÔÂénj1ûcÔ²Ìqˆ!Vy%»&äD}KÉRåŒWðe’‹|ÆYÙŸ“3¾ ŠEë ^š% ]ioýçŽÑ&tb4ÎÇÿ£&jì*ðzpV›£—Vtÿô(} ½EuSœ‘2å5NWË,>kGFr~ÓÊ*&µVãXÊ“ŸøZÄDKMÅEƒÌ¥URbúñŠ,¢³¹òßî{Uì[+.&°2ëŽ óÅçc‹KÑÍ¥·-qãDÔ ÖÃ:þ,…‰XÜPV’±iIk%å6êÎú4­õ  ~d麇ºè#Q—à¶Ô…Ù¥¥u1¢€`=ëüõ+b˜ºÔr†)ÙmÜ–aZS`˜¬»‹”¢*V»mø<fX¨Ã3èÖˆ«’Õ¾!ñ)ú*ºPÙpFØh4m|vØ æ”ØüÊ8Í®Œ ù­<°«4ÀÖñ¨{ðÙâ¼r·¢}ÈÚë~\~Ñ ’±‘Éh¦±ñ£M­Ó#B²fÎu¾Œ@ Ýfþ‘@ÏÒŠM®§/J]/Š]»/+åÖG‹˜3Eã÷r'-5Õ‰[eêqµŸÄkTgËhÖ:çÄ?ú±¨ç€›Z¬^ òœ!WÝÍÈ"$‡¨3¢Ê kÀ&£ºÄb¶V2ê»l¡ÎTLZÞ)ÖN ¹ˆñò”3Á²ÐõÚ‡ã@¾ ‚D´îLO‘øMUÜg©D 6©Œ$Ë÷*[6°¨¥YwÎˤ;–Ém¢Ù]\j*LXÕÒƒ`‚IŸ/&Éåú7˜lÎÎ <1”j_8L4&^¶ß`RÃD ¤±_ÑÙÑjØÙ™ &®‘·äÂÝê<¯mÈ¥ ´u§Î:t;fï¡ÒŠ58“²üéò§%¸"j( # @e=4j¢¦y[%/Þ”m ó$`DofSï²',j-ýVŠÅú~Ø[Ö­uH}X¢<ÜìZ‚”Ý#·(øÊ\Ö¦ÆÅàt/¹€sÅ,òcÐd}ÑÌœXåç„Òt!•œò.è(=N •A'4j¤ÒAÀÁ=À©EšOQœ$õ±"¹ °¹j¹´X’·ùÉrVò½¦6æºh²– úZëγ•àæq4`Ñà*åäÄDlý9wâ¦̳n……¦·]šuZÌ}ê1yÖ&Ò•¶Ö Ôž÷ñ¯žÁ$Ô®?Á$sqsýþ?ÎߥÃmÚx ¤¼óº±'¡èûä][{ÜÕõÍÍ«÷7lb¯ä»?ɯÅ`LžÊßÏ@-ÂÙë³Pþñÿ êìgù¼ü,ÿ2àº#@'域Ï$‹ªæý.ÞÉÛ¤…·Å˜m(?“6ÛÏà0>­e¬×ñC=x|œw;~ZÔCð?¿Ÿ%“@¾¯˜e¼»¼~Ïÿu{w¹züô~Ű¼Øü—X%7àîCþÄæ/-rŠ.¿âK~¾hüÜݾfJ€AÜÄâ]—€ÓÂà“Ú'EŽCcÆeÛç¡q!¬Í¯Ò¼Þ"+¡PtosÅ\¤À¶I­È’Ö€bê"×ã~AÖãcl˸oÙ”4|8N–úCZت© àúWr.à:ãAÂ×âDÍ„(‰-%û{;ðRÕá (²«bÑîÎ[£»‡Ðæ/¯áui§:ˆÌn ¡/YñOÁ$w|Ùå+’˜ÆõæCö¯‹·ë²q+…Ê7<¥Ú}/Š}‹PvŽÅ…àP"ÖMÐÃDžžM¤¥+ŸÀ˹cµÅun\š øF)bLÀÚ4{@8X8ß¡ï²ØÚÒõle»FËþq¤8‹ÌÁóÈnEs,a4h†±”@sâ‹n_á0dFÂéà}†ï¬³TN›­«S¸Üt%YN0'Î,Væ„¡ÓJ¯òUÈ•üÖgƒ,^î=o0r‰Ÿ6.e[l†°Ma•N=ú‹È²Ç£ýa1_„L­Ý|ªGG8ZëR°pCV¾IkݸM'nXàfvkxôs1'hŠ‹F=çXôS²E7¥û¢OûòxD0µ=^š~13<ìqÔ™0ûÍ23LÏÝ23 snFL{ˆñ“ï‡ê ¶Ç&Á‡[熻€·]ËKè õҖﯱ»õ8Ö}Ý-Ÿñ¯ù€²ãI.Ñaîâ _ó!C¸î!Zîâ _ó!C„ž!šîâ _óCر>ã;_óiã…CD{«änæI t:ç¾'¢dT(Wܰ划٪Èëþ:ßš&ÔùÞœ4JÊ{—ƒ“fî8Ú¢’*&êëÒž8·^ Qš9g0öĹ ¼ë ¯¨Ñ.¤ÏÊÛáô1džGÌ~%Ve/ÄÜ8e\•ëàxø-‡!²}‡Õ¤)î‹Gå§Ÿ~,ó§b‚!ÓG­ÅAAÀ³¨ÎÒŠ G–ÎýjìgÜìÃú˜:]vÀeb8Ë™ò=Dò ã·ò=þpã·ò=ñáÆoå{4ÿÃß*ô9ºñ{WßBÐbW¦ˆR*X*‚dôh3ZÇ…†÷λhŠíƒÒå4Ã/6ááy~ÝŒåÅÐ[Å,ÉxæMVY‹¤…O±˜©¡íBS¨bÏ;ìµ£ù‚­ŸØž‘iH0!룚u¯ ù§Ÿ^—ÙÔD“ñÚ ”¥ý<.uFª²5’‹,ÅT"ê³å&ebc¶ëV§N‰ÝroÍB1±Èç}˜!օܾªTy?ði^bg)ßI-dkše;b˜,0Š´‘@ƒ¼’) ƒŸT"U”,U¥Ç/ŠOÕ,Ðû=x×6ÞM„߈tÜEãæg˜£›¡Úé¶4cٴчîH‡ìæñiPlÍØC|R’7eÕƒèü|«>9+“5v–:ÀyÜÿŸÅvZ·g©_ÐvÚýi½7Rw2=š×!B ¼¾Ç›ñ‹e>Ï£ŽÎ± }ÎPpâ/÷!ÚÇ’äÑê§Œs¸p•e6êŒhLÞy•{BûŠùpO-â†JI\y„Ž– P¹ZÕî{QìÛæÊ`Â>a§± &Øy¤lP Ô)*%Õ%‚ÍÉT¡³P+Gܪœ›)«€^& ‹VB=C)ÏN …%0§¬ÔõnT?Õª"ðË ³!¤Ü3RöÊ{ÈŠbA©ë!Tƒî‹Å‚aг`Ìó\ÿ ’h³­ÿô<'‡ß<‡Ïùêúíí¿¿ùoþ94ûa·1ï¸ñ]f¶ýíúòñ]Úð)Júå~õÿ>\߯.üø¸º}¸¾»åu¿{||ÿêåËÛ‡êüòîͪº¸ûåå_äÓßnn><0z¼»ÉœI½ÜÉ4ׯ޿½ú_««ð!¾è×»çÿÁÝ©"[Zßuäý¤F5ô[5ƒ~OÝAT£4ÑÞElMO£láÅ6^_fçQЬ§m5ÊÙO8œï ÞW¶^!̤BSaZdUV貦zy‚…p¸â„{sެ3-*ãm.Ix›·o‰6 Pó-Q[ÛZ¢6¶±D¬¢V¶Nâ¶ÑI‹‹íŒó¬õÌqËóúTÒƒƒÔÝ^WÛyuÝ¢à;:3ïé]º~{wý¸àr%«é(^4ìê¸0XÑE^t†ùö!³=×}[uî‡ì„·]Žø3ï6[A2Rª?ˆR©ñonÎ/þÙݰ75Þû¡0Ô|‘éÅä³EÔ½> <ýƒ)ÄpPa61¬Üt¯§–žààT¬©X9ÄO¢£`W2êG§=•?+¯Õiœ†hL£¹cœ,ºÍë%’;£üqPh¨êJôF©rÁ"ÉãÞˆ5R±´îµ±-òö$wÀ²éVÄd¡á_í+£š¢·³zJeêhÕjvíÆ£†Ò&÷^ExåÆ4š8¥7U•Þ·aÖã„ëÌYÕÇÒ:ª9œ]AÂ<"yÈ7?ÍOXç7=yµJ³ÚN¾ëI õD©~O½û:µKå”§ÆyXZ¬ÉÛ&h¨òJ„Û£âzêû[Õ*Ö´ÒŠîIA*çDå0 L:ÀZzZ˜Œ5_}þ0ÉB‹0Ëô?˜ôòUK?Ÿ÷}ÊsEcÉò©q¨lÝ?&™jÒöÛÆÑÃÆ°*¹nX&#ÈD"™ˆ‡Á²‘ ?eï÷,ë?-%}ý9bÌÿ~,Ôâ>-žPŽ'!óÝGudBÜÍœÌ „x•¸Æ5e>€ÊzPù•‚U•aÊ­ò¤v×uªêi”™U2H)—Z°²• Îj“_ì‡R¼rÒO ¦Y©ò^0áN9N…œ¡­™ÁɹþZŠ\¨ Þ¯:NT¤ŸPEÖ£S˜LS‘¡ÑRÒpØààD`ô{ÿ'£ïÖבŒ³Ênâš—œÃ‹%óBOÎZ°héQÙÜÇM¼…Ä582 U)‡Áä‘ KIÁÐ%ŽyÅÎåÎ…(B30]}šµá[Ù%ËÖ{ݳ6že í’2•µ/vE:õ‚‡Rßnd`B ¶)Q™l5û’Ì6ÔDŸØûvqsýþ?ÎߥoÚ´I€ÖåyoM·ï“wmm´W×77¯>Üßü±µ¹V÷'ù51?<Þßýsõêöîvµþ¼ŒÞV¯ü櫼„WõêþîÃíeÚøßw×·yë/׫û›kþçmÚ.ÏÞÕ¶àW¬Ôyç$ýæÇÝíÖn ’¿Ÿ-YÁ3 Ð¡¸ ;söš›Le ïë&ÏãFÆ~£ˆÛ Ç‚Qà6ñWÁ¸M‹æìç³¥§Š¹œ¼ù€Ö¯ô†*J»SF6Y#²ö@Cú´¦:R@Þi䨣x8[•Á/!ÛÅ ™RÞf£øP‹Þg£^N=F²˜‚ÞBƒ‰)ÍÍ¡² äFÉñït€¬‘Å –<\ú~¯ÞžÜu %-3W磅 } †ìÅ•ešTÖ(ULx¶²Ñd#xè7 {}º"¦Á'HÚ¶Ú=º…©ÌSoð#B~×i»=é»LÚ¶;¾{x?gËØàÐë|ÅÑsÆÙ6ÛÆŽ î`®xÙÔc%”Ž…•ASœHZˆLŒ÷º•“¤Ï¡}V~?㤥YDMGüøú¥ å<,XíÓÁ:ÏsÕ¼Xæ¢Æ/\„Q:Óm›<θ¨~iO_É¡´:{eÑÓÑ.Îé÷³äè 9|Iaž!ùîòú=ÿŸ©ÔåêñÓûSÄ‹òÉ}Ó†Š~ìj_ŒÈ1Ù•>]ÛÖšdÇ¿1ŽoŒããø*G¯äkܳ•|÷²+ž/¿4¥½u‹6I”ô6XB‚Ù•K|6êôY@^eÊÌ&–‚÷}V¦§î–w91÷ô»]­þíüÃÃÃõùí_o>Üçd:ÿM0ÛµËV¿^Ÿ?^ßݲ†Ìg9ë³$’½,êe “þ¢xìµÎ-ŒÕ|lAå ¾Ðba·¾F‚Áåß0Ì ­h­Æ„ÞîÅ0},F˜Fâ´1€¡Î0ÎÜoçÁ€DýÞê-‡¤‚.9TóXÕÃ3óµG+%žf\™±@„“žûêªíŽ<¼.Ë飠䆎V¬KÀºÄ\P€{‹ tÚ %«#Ûha4ò7J<Úl5.äp÷F¤éýž\”Œ;YÚÌÁ! ǸÂd*ë¥nÚÁ™ñE :âÑf;zѰ׳Íܧ˜¸{›=Oi¯Ëá£]˜ÎÑŽ‹1cÊË„sg'(­ì ¼ÑÖ–^X©À4GiÛ ®•>¿³9E¾¸Äv%ºÒœŒ" ®ˆÊjd-=/Êr¸céÝ”aìG û&øaÖig tÚÒL¼¤shGUgÉ)†¢¤Ký]↜.§SOþ% Æ\4ò7U²à3? âFªë¦èŠAK‰³ž:¥{f8fs†/’õ Þy§¨¼ÚqGh°ÔV”£¬š/úÖìÏAW:úÏ'k.¦#·Dßèòâ"4Cx‡*.I9€qÙÇ×cH>ü#I—!~BÌû*…IêªX_!-ºz-Pà ¡Z¥ä©`>PKX,µÑ•s¬ßñGgÅÕÉ Nê{Xø.½qÌKØÒá5ñZUz¶ïNµƒ|om˜¸3·6ÌPåMbg‰Fh[Ú>yû ’Ô{*TNǽò§Ü+£ý__—à§;hÐÁ{£Û$O³7'=Gû÷¦#jûнI½šÇÖô¸º¿»}L7f¸?ªlŸõ&w½]Z%ÆàÄ /Úä[]Å]ÄH°B,ÆÞ­e]T®Dãþ2š(Ù_âFíÑí-6pçþªEè‴,xÛèýñ?•äo–+:ôå¤4Lè«+ƒ¯ÿ¯´†T›%áɯïˆ"÷?þø×2ø×ù ¦ ·Üô§•î"n;&+º‘Ö«ÕQ\±+vhIë+$Ö?pAT)ЈþP\vú/úÇÒF اxkÓWgOÿЍ<€©Š5šÐs_ÿ`z]x? :‹Fõ)Ö„Ÿ~ü±xñðl%JY[f¢FO4¦CÜx)ŠÈÊ~*¢ÖI^µ8@¡µ®l0žòm"ä²(Šaª¹vë4ˆé@_9–)˜â+·uyÓ6ÅÀèòÆg°Rä½_„³×g¨]¥‚!âo¨…yùèã¦YŒ±6i"9êžÎ~N»É5]PâsƒÄ Dïi!•%â¾p«&V•¶¾æV’@@ñ8Ú¶j²üRç-¿UÜ´Œ±Y[̸&¾sÛº™Óë¬ëfî»aB2‘'»AÉ1h§D¡èóSvÚé·‰GÎèt~þ)ó::ÔO¨ÃÍÀÃâF~×» .|ÚFÀg`Äa>§¶)tÞ/ë`eL²g"óð7n@ÁŒ0 ¤¶†G²ü¤ˆÍs Ãî‚Ó ›CW bŒíJC’ù*D?VA‡èÈ0.bäi¬:$.[¶JÆ`ÌUøÁË×rí¢lcõ’Ùµi8RCå¥ðÍêK«ê±3Šˆï?J¬Œi`>”o«X=È)×8JÌȉ,ójòp”Vé nSVÜfqÇ}yG›ýÜ€¼aƒXŸÎ$Nmv÷ð^_òe(ìó}¾d¿Áì—6TÎK4¶WâXëX*õ†ä»|”ñJRék­w-<ÄÚ—vÝ¥­µ“ö¶‰E- Ö¥¯¤dPùö³x.GÿìøUüÔY‘ОlÝ9æCVQDؾÏïÆo÷í|^Ç/»énß$«ÙŒâ£‹|ºðbԣ咣à±iÁø£í÷dM>èhÊŽ¢ÒâÝ0‡Ã9_’@ÔÞK¼âT¾'êÑòÞØ`Û—<9Šõ{´¾žÑ½tù«ïÜ(á ÏñÍA—htAÝ UZSp&»‘ßMßIm‰Yç¤8³eDOý,ËÚ7&˜ 8Á°}~8ª¿†(–kYwÏ{¥W¸²ƒsçÎ`jˆ%rKngDÑnF«¤×7™9óÉêÞ¤º»y» ÙaÏÕ9œ¸öNF›©üõŒ8_Ó¦ëÀ¨y:€agw.h}Þù¯\§;£Ñ‹¢qiHÐLjh)5g¸XMò”f"†Rßnx™P›™`::oøvZÑîô‹ÇZB2õ,òtàêYƒ¡íªzDèN€ÕiÅÝÓ£–•C¸€9Ž¡?¬†¬éã•Ö½€ç„Õè#€¨t¨Ž’sõÐÅS)—ÊSÑtæ*ÒDµ¬‚ÓÊ瑜ÌÕ‚ü×Uʤu¥:×®Oéû®­è]cã"Ê5%rï+I>ìvÃVßÂâU$9ÇÔ•sPÓgeåÕBû‘öвÔ½¤ vH’0*qFÂÊòzÒxqF"1ÈCH¥]û^ûî÷£V<‚ @k?*Ÿq âH¥%Ÿ`±”ˆm¼›_™¯^;70²d”®ñÜAl”Õza­aÁä™ÑžÉÙb©YÛ¶„~pV–NŒÊûrŒréªÀo ŒÎ c <—ë¾%²|F{œÄÃòãÏ¥/3‹ƒÜ¦Q—ð4.øFN#A¾!­K½{B´`†Ä[+f‘Ì9aãXÉìÒ9V¯lXHŒä\v«å$X6`”q´0¬´-PÌC$ø@gÀT•D+* 9Ã!‰'ôƶ‹¼–ξuán|И´JJŽ`Ps£ èI\"<÷4Ö15@bömŒCñvIŽˆNTÕó8œ‚rU¼ßÎÀ++bæ!zà*¯}#DOî˜ µëtàÙ⪌Úk\µ(™Ü‚Çc+½`a7Hèç ™”ƒ8WÌW=aå©›À€ÜážVv-bzh„°Jª çl’à¢Ø÷¢Øw?|SÁÈ$š$ÿÆj)ÖX ·\-•“…Hò‹¸|D‡ȽµvJ;¬`¦Ö8ú¶A ”c}£€p¡¯$dªáLÖNÀ¸uXfJG°D”tºQ/XI¢1«r%C:s#3ƒlý$Î8¡3!AÂj*Ÿ°­ƒ‰57+©Í$í…“$›3q3ŒÛÌåðÀœ[{÷( " Z’e¬»Ý·®‡Î4MLŸÉ"¤ û ¾t޵|±Hæ&>@¤ E¢÷RÜródË I‚g ¶ÃXJŽÆ!°õ"ÅJÙYU"ÌaëÅq‰Ù~[g+§¼ÑC`+ØÉ n‡«¾*°’¤ƒ_Hf#¤-ÓÂYÀ9ˆÝĜϳ>¦ÞIJ|®ˆ3¦ølæ‚‘cÇx„¹uÅ™JJÌà¹èÔà4Ê ÂΘzî­+R’ý*cÞRx] ¡5´"æ®Ì0t®µû^ûvQƒ ‚2"±3YA»X²Éâ’ÃLÚ8k)úªPù˜HÒóvk 4IòÌaÁ&.¡™GI Zˆ OôÆD‚é’¶9ïrbäÅæ–QËo=Dòd8ñE]'+f'jÑ"rEòXå”dÃð\«]Ô€†e&Â$5ìèA˜¤CŠø † f€\ødn¦È6…Ïv_Áßö{;@¼±—ÇD…?2<=Âõó•GR,þŽ™÷!å‘”Õ£ tXy$)7”F%¬?¨<’Q#ÖT‰GëÍX?J{ ÿìÆ#ÓˆË#ñh¥xï'-dX×:yy$ô¤Šf$Pz/JV7!ÇäòHJ—PøIË#cÔA呌•ô*îÉgV‰—1®®Ø<å‘xX7j؃Ê#ñhaFLSýmžòH<èØêo”GâÑæ«þ¦ÔpT‰Çê€RÒ«˜#ås+$·?§+Ä81Ë£ÆH‡•GSè©Ê#ñ–ô©¬-·µK ‰µö[•¤¸•þð’ûkñH!ÉÕxš{×ðCøš &1 ”8`›pÆmÂ'ئçQ;‰̪câ78¹~R“]X5V›^_Q%%†Î€*X‡ÕR vP©£j)ñƒÊèL®¦Ä^Èmo=%Fw5ŸtDcoý¿ÜÚJÌ êD”W"IÂwÜ K<Ä tH¥`Žö×X ¦·bX™ëCà.¯Lp†ìÖ9 Yº0âߦ•«Ðè…c$d ’ûFaÓ[ÓÊuSrÝ}‘ÿz‘ÿZ¸ö!;̵ŸèðKàCÁ•³ 7×`h‚VV/–虘vA2·(m»À—ˆ@ð%¿ŸVû<Àga>TÆxW:þâ‘©±’âÕÁw° |„£À7,¨æy€=s¾>ÃôÔ‰k¥¹8õ§nÏø.à? xÃBnÇïШœSU— 40&i¶êr;øAÕå(ØúV]î[u¹nò/ºº\˜)êˬ.ÇË×>cu¹ýŽELqøO|¶X¬1…ÖñïùÖfb LsÒÚL'*ÑGahZ¦o%ú"´ŽQʪ[nÀo%ú¾•è;i‰¾€__‰>^ôsd§)ÑGah‚¯¹[´&!m‘½ÒïCh$DcÍbišÃŠ÷‹(KÉèìXÌ2õýŠ:.Žù,ŽJÈŽS|ˆ…ÖÅý™aÐcàç Œbñ)÷Þ(RÅ; §Tr1ËõºßÈùÖ‘DD0q‘„b–$Ï2¿ ahóç‚æóPš¼aânøÝLïb¤õÐ4Ã(ÝJS‰Ö¨½þ‹;#;”MŽU3@ÉñIk/’ ¤&@éÙÔãäéwÄ$½Š^äG®ÇÉÃNp'?vÖ!ä­ga²›éc×Eƒðì gа÷hùâ¼?›²¦<ÿµnÉgWÅÏew°w|iÞG*kJ©TõLÊš’·ýE­½-ÍûHõ8y´ Œg­Ç¹"uò…vn¬†YΤ¶'ëZ9C[žÎ­OÐ:`õÌ£C÷êMkõ‰ËãÞHeÅœ>‰9rŒÉ=°@-÷€´¶CŸÅÏYyž"CÇ”>6aUŸ°Ô·{/Ž 2߲Ψço +¬ív5À·Qñ ™Òå ÒRMÊf¹òcy>M¨Ò iõ$‰Ž<sñy¾­ÂâýØ«å”{ÒU–S[fi0¹óYZÓÒâÇR×Nsc³ÖBwe‚bÅ€=ÅÊ…²¢Ç#Øj“é8ÔÊáº'ßk97lšF¶Ç‡æ µg|ÛÙ1ÒËÖC}u¦”BÞS²¸\ßxO1äråä¬Èò“Ò)äyp&årÖå,Có1Ÿ¥–,,¾åp…*×›(×ù(—)WI UB´:ïf7±RkM¦ £CCø±¾âc§ 1f´‘·YÒî’§gÇÊåÍs~zl,íî¾qUœç3b½`œ |’DQµï€¦sSI_Ó2ï>–>É%±T=Å…¤Ns›ÚÐgB»Ù(ª)BÚœltÖ-cÉD3¹_È=u° Ž^OÈxPêË}†0aóQ¼9‚¶É‡"ŽÅÆžPAEÊE¥ ~ÆxÛg^Dœ¤ýÏi^üŒ¡ÛËÍð›ya0~Q‡€±Ç˜Ž8ƒˆúöã§”™p¬éáë<À=v,¤¹ýÚ1¯dSîý>“;‰^Jefà›_¾˜xäײ±üðs:b}œÍÎjWþb9[ÏÍÚ)dú˸ùB;Éùºo¾úŸÑÎ?_§âÓ ÆYõÇ/•ÖQêStžÓÆiZ6¼ëo¦2BW(,ÈFjŠ5d&‡üsšGw‡Šämn–r*„Ü®‡’FMšLçäìWÏr­ÛKRäÜæ“7˜Ãòs¹"ï¶½3,Lj÷Ã$hí&YŠõšý ü2líLHÇfù;Z~&¾e=¦u=ï•ÐTXÎïüç——««‡øé—Õãùåùãù¿la°iaõb“QÿÏ÷—W¯þ×?mݸ/.^ýŸ»ûnaq‹;œ¿¹ûÀàߺ–s¿Ë‹W„óǽþåüíêåïoÿ¿¿ÜðøÛ²Îa¾{iýÚûÕÃ݇û‹Õ÷/Þ=>¾õòåû÷7ÕÝý[~ ÿï—kyèåÿ~¼¾¹ù› ’º›¿\Ot›@s·Ž?¿Ü,4~{û/96½½¿ûðþ—»KöæüÓêþÅ@ñû†Jl¸9³ºùþÅÏ׿®nnîζ {»YÏcIÁX¡/æ –Ê~TêÉ"£½•Ê[/ZؾNéÏWwÇäàÉ” íì0ÍP‡Ç£dîT<Ô"M´ˆ<ž4#SU ÍÛÞIlù&²Ü§Æïu8@Ì2° —È’ (y‘÷ÊÙºýþÃÍJ"ÿ_Ýßmò ¤‰êdª2§J7@û³ ìIºP†ø¾ÎMðIuÌÙ6!“]§W…J±¦^R!íZu¬D†.oÝöýýËÞƒ  &1ά³lÉpGfX±l câ©m«ª¼ „6oÝöý*¡¬´˜KDù}¹DÚëó3®nDʸù,ÍH9Q·[)`ÉÑIŠ29Rž$w$·"Z>i¬;ÆKo/mŒ Í™¤ªsÈm®bñ=¦W[$\¬Ö–_)Œ‚5zÁ/ç@zÛæš/«…ꮟæat¨@ruó+ „3¹…¥˜=\2^°øæ5´ äAâtEÈNÛ¤$¥öÞ$OÉÍf¼³YQX0ÚKó2e­¹•Ñ^riž­§Ì'!i«§lüöiyçzÎL¢}ñWïú²˜^ ³÷²D)E½%s (¯I l‘uëÙJfê¤ëæ³^lV#}×™ŽYßͰa÷Þ d¼_]<¢FÝ)º¢´žûÙgÝ`}ö>éÙgM¢uö½kŸ}ošg_® Ò³¿£xö“0Þ~ö[b;Ò™ÃæëÒhÖŽTÔŽ)¹¶v8oÈDÄe[Ft1)§ \Í9L ÝɲÖ<éºe°iû›âŠçn×2?ÓÎZàæãN~-óƒŠ }M@ï@¢ ,e×z‡GZ çÈZ½Œ¶îO§Â  Å>n¸c´zK#«ûÌ4´ÕÏ,Å6~« QâAyÏ·JjRĪ£,#É@J@ÀËðŽÄ µlX´ÒZƒâIYY–$e-ç¿°Pižê3b²ÏrÛœñ^ÞI’õXÊ`I«•áÅfN¡’ EŸ·Æhi³Œ\rcRìA[Ñ¢XŽófÛ‚µiœ…V#bܺD×GBo Ÿ|Ç "aVÞ+Y –vSF¬õÍ Î2õÕNäÕlR< ˜pH­ k™ÔÄ6¹Ž ò’ ÛÆ6Ö’L/³+eÂúiÆpq‡ «}±)’J\‚U.Ôm )';æ1Pd–Âvƒ´ÏP)ÈÝ©ã *¹½èQBÆ¢¹>I`ÜÃYâÿÆÊV…jÐÖ?Wj@ñ IÎ:«Ô>¬Ï½|ÆÅæ÷PÜQšQF+\§ùÀÄVFâq@ô•6&¿Œr¥Mض…õ`Þ¸ëhãy`‰M;9,;zFs>,dÉÑŒRŠOÿæ8ÙˆùÚx­Ì£“ùˆçÞIõ¬}Yv }4&0•ë°+ ¯aÝn¢Œ´Ãåö‰Í ˆcÒuÇdia°bƒ`?µ—V€h{â¾L´ì7ðÄz ±áuò¼ñÆýóíXŸÇ·FoSôv»þYœ<ÿõ_þBLQŸÔÈCarla-2.4.2/resources/16x16/edit-rename.svgz000066400000000000000000000116271420416754300204620ustar00rootroot00000000000000‹þ}uFedit-clear.svgzí]ms¹‘þž_¡Ó~‰ëHý†îÖÚ›Jí&©­r.©lRwß\49’™•DIùeýcIáÇ|ÓH[·6¹.Í4hôƒF£ÑÎ>ÿÃûË‹£·Õ|1]½8†ª«ñl2½:qü¯þyhÇG‹åèj2º˜]U/ޝfÇøîwÏÿc8<ú~^–ÕäèÝtùæèÇ«ŸãÑuuôû7ËåõéÉÉ»wïÂô–fóó“gGÃa®¹x{þ»£££,öjq:}q|Ë~µ£ÉìuƳ˓?–«/.nËùh9›Ÿ@ ñ丩7ßW¼¾™_ÔíOÆ'ÕEuY]-'`•}ܰ¿«^‡yµ˜ÝÌÇ»5¯rÎ'g™µÑàÕLàî'O‡™c¸øpµ½^-¾Y©š몊1Æ“\ÖpîÆuúþ"Ã÷ÙÎÔ¥«Òó]ç÷îᣮg¹f®ªåÉÿüá¾pÃd9YiænÄJ3ÝÃx5º¬×£qµ8¹£—úÙ &Ë7Ù‚ÐêÛ7ÕôüͲ¹ŸN^gý€¢Ö÷w=8½·½뢻fW‹˜KQËPÛÍLfã×£Eî÷É›Ùeu2½NNþ>ŸWËåôd‘ øõìý'U²2¹J5™.§ã‹j4‡Ê |—ùžOª³Eþ{Û÷r½.Ë¥þÌÿ—ùh2Í—i÷œíbѺN]k±œ]ß^—ž,?\dñ…8Ï.fóÓoÆg“4>û¶&Í2ÊÓå‡Søö¸©3;;[T×ZýFjݱøñÑÉÎÒÞ½™.«dA§¬÷²žŸ´•Þ#·=0B)ß1Âã:F\©«Á LJt­Èë_» Ò­ í%0ÖŸÃÌ Hþ̀åxËÀ¡va±yXÎêOǰl—æ]@ì/-~ÛJûL–IùêPh”À™,݆÷t¶KÒߨDjÊþ&’ aÚ}xbQàbw‡+êAp5 zîÆE5Îí.Þ>,Ž7à‰ÇýÛA7Œèt€Õ #zV‡úp«‰$®´;\ú”V‡ªýÁ%¾uÁ@<Ùí>u"r€!ö×ÎAÙo•ïÁF%ò„®ŒdïIz0Œ¤O97Éû36|B”p?”FUùf úèSm¥Á¼µ‰{Àý[Ô§3¶ø¤(Ao(!Ê>(½fgˆ¢ì‡RÅ“ñØ×¤íâöÜE¹]ì=#ë´Üé›y•ÓˆßtlVÑn‹!¿/>¿%þëjºÌù›E5ÿ©äÜþvõ¯Eõ ×?磫ENð]¾8¾-çÓ÷¿‡†D‚`Õt0„@)j¾³†-WC,%‹´ðQ®„ISzv/aüþÅ1qHª‰¼¡~xq¬¢¦†zÖÉ{ÖÉ;qÌļxâGÄe#æ ½až¡ˆTàe@¥jH5¼Ikxy0ô¹”˜†(ˆr&KOŒyzTÌQ|3æÚæ1˜sPp!ÏfœC Žª µñÇ¢6& ‘dR —5ÈÙCp…ä’2EµÜNÞ³6o9ENÐì0ÿÛ+ä°!(‘¸'äï!k™BPN÷Ô™J!zþ˜6¼ØÉ‹r1ñM#¹,—£eõ{¡` Îð@‚Éž=®™êfw,Ô§™¦)»,W‘Sm§)ˆš·Ì=ûi¦©¿0 ¹SñÈÎ5âù†£ªÕ7™Å5ê`È)(* C$w{öHÓàq±%ÙŒ­÷‰­kLV–7³¹^ÑV¯ÖY©¢!­kÝ$a Ü @"{j£kA iÝ$ŠÉ×[DÝè-ö o±Ë *rë,T"Sj9‹‚nb¥ß¤³ÝhÐIúGœ‚ÇÄ5â­›{–ònoaÁ“jË 1¸‚G‚u{v qÍžEØø±ƒ´-qzlw¡!šx‰Œc`³t .)ñ,¸Šá§öÝŒ[öl]Ûö¬4šYËžSP\W홊¬ÈQq؈¸ö·ø¥€hÊPïð(J$,@sðˆ`ÿÔ-Ô®#EÉ££!jBhcî$Š ¶0â Qt;yÏZ¼í­ˆrâȉ9¢löÚ{´rÁ* FÎIkðc0&’Œ25ˆÔ¤šÑ–¤Á|ÝÂ1$P¡¶ÇŒ!1¬Úr'ïY‹·eá“™e°÷M•ûI «Ê÷ÐTì—½¶ò=4/ B½%üÉŽJ€7 Ôp%ìj°‚8ñ!'K!’ óÃé‹ÇWJœ°SíÀBèI±SÿÄ»è/Ö×C 1P‚ѰÅA !‹t+®1E&OÝŠÇ'<§îozD}ºÃ¨ºƒyD§nÃCqêô@Q4é¶JsTƒ-R¡|ôÀL5*ß]  ¼ô©S ÝKìä¬|uÔQû;fä”¶>ÀÉö ¢Ñ$ÆL‚5òŒYõZdݵ‚’}Û\¾\þhpíÝD âŒͺPº,LÈzÍj˜¢i·èÏIæ$STWè–û±¸ƒi ¥ žîÛI` ÈÄ»L ‰“â±ßþ '}œÒ†mŽóœek0„A}mk0  JÔÚt0Ÿu2—ÍP ¡f+ö+ab_ &¾“D=nOeó)ò`˜b d¢…Äš@Û»Q“œ©/bðèJÒàØÉ{ÖæmÀ¥LeÛ^´äÂ\ƒ&0¶VÞlÈ@ܵ’l)$cöVBnH¢›Ù~öÕý;…-ãÚì™·ÈÃ*8qjaéTÙÚVLPZcÔÁ;nñîrf¥jnPr%F))#FȆѣ†ÆA¸–üc4xvÊmP’ï†2õƒ²´P†˜»{ZCY$[\m|ed1˜+–³)4sK%U$Á£Ö×¢: ƒSR 03“ö‚¯î„oTÙŠïN“ØCLÂí³Á ¦Êޞ“µ¦°r`#ÜÉl“[1ÍX¾!™’Ø‚8é€50¥gv N»€ˆ”ðA v‹'d~²¬rz¬²õ÷˜ŧ{€y§ˆ‰£Y9¤´“þ¿¹¬òSf屿éö„\Ç]Ìñ×ÈÊ!òo!+‡˜ž0+‡¸ÁQo‹¹( J´v€+"§¤Ô ½Ä™XjuòŽ[¼»ìˆ :ßn‰Àb¹z0HV®Ä5ËxxÈÅm·hÁ¼—Ë €aûé$D Ú~ÖÆ08¶wMŒAÍAõá¡RÄ´›ò}Äó‰‚bôvX4zË´:XÇ +¬PÛ¼ÛMë6úW‹˜/ƒ!ôdJ¼ÛÞ š¬À‘[`’‡Q…ÖOÿÝ£±´'j N hëO¨' éÜɼÐô«ymG3ƾÍk{HÒ¤žB©í?9qß EíIHåà_gö¯`CŽLvÜ©Ã.š2xwð›˜kÙO¸Er<8Dßiçù†ƒmטcg£†É{иÿöÙÀð¸su‡F‡_ÿ·Æ‹ÿÖ©ˆ´ÿAã˜ÊwÿMJ?ïþ€PÚ#›´ÆÄO÷ ¤”z€±gc3ߎ’ÃÎ(=½Ëo– Î®Ó.ãÒ½$1ü•·€¬Q̰[eMHêªÎ;Ô>ÜwËW3NÀÝòa'ØuÃB¶÷¢øè[·1Àf½œ¬ßŸÐï›»ï~åÏ®GЇ[˜FK‰A\$=Ûr,Ò>Bé>né:™yÔg°É|Ó!7îŽbÿ)ñ¦v6ª;sÕ‘ä*ð>¢‘"l4Râ=ám§ºsEÝi¥Î Ô£Úšn¶­}gh;7ÑÇèÎytçG:2)»äïÐCŒQZ0'®i‘ÛÓ¨5r ×þ©€ÿùëËx…¯¶ÆF[£ ×g»mßvÙ¬l“å´“,ض€dORMϯþöúßÕ¸IøTÿ{3W“?½_VWåÕ£‹}ÞXÛŒÌjäø¡¹i^›zGh^œÚšVç´ ééõùÙ?ª³|ß5]꾚6ýz•ÙW€h5û Ìxk^¨T'OÿR_=õ–úê×åßMÌMŽžQpô‰‚0 iÛ© 6Em; ŽbmGoU˜ÒNë3  x=ˆ÷7CŠ‘ÑCÀFzVãW,´¼w·¾ºmoygïäí´z×¼œ÷õè^­ëÑyU»† ÛYý¹-x=›Oªù]Qª?­¢[ïѼ[xe”J«÷å±»|ñ&϶wÙw¯þ2›e(˜€$”õâz ð'ÔÔ›ù<#;¼}¨²õŸ;c\¼™½;Ÿ8–ó›j½æd6¾¹,Uo>ÚÄõûuŽRwø:¿%¹ÕÀùÍtR-gUÌqU”‡Rµ‘XÊÝ2벺ÉîòwÓ«ŒØðÎF°ÏpÜùÄäüŽÚÁv­¸Û¢â¢ ãÕy®ÀE‘uú‡uzuy}[Ô¬WÏ/«åh2Z޼£ßyÒÉÙé?~øó½³Oÿ{6ÿ¹ñÕ…aôzv“U«ëÜòMƧeÚŒ–ßM/³a•÷‚ÿg~=÷󓦠żüp]eB«Ù»wœw½'=ÿw9-•N~ZæµáÇ"äV³¦§Óq^ñ¶·;.oŸ¾­ò*x™—ÇZÄmÝÅÉ_þþòC<É­·»<ž]eðú&/I¥`UðÏï×ä–’ÓåEõÝßÞÈÅGËjtYÃQS[-œ4M4´n‰…·‘ÕzÙè½6H»©üò£ÎprÜÆóºšgÐ[ðì~Aý?ªëùlr3^æ$CÙ_Ã?L5( ߯>‡µü_³eF¤ßÎVóéÛø2f‹~ûûӛѼúãÅôçªçvë»ïg“Òncx¡Ý…b³È7wÞ¤¾;o¼LãðWÝÅèuuñâøe)<‚Oýúìæú2wà¶ú½wZ sëŸÑKd±(ͦå}M5B] _9®F¶öIì*铸Ú©”"œ¬ìMÛ¡}ŸeÏtz5»ªê«aS-vösuú™Ý^k!§îîKhôïÙôê4«~5¹£fëæÓüç”ïh“Ñ"ü|ô¡uKm„•1kÐÚÜ×o&“Iw_ë¶Û}µþ»º/:æah«=˜íqî¶…N»iÀº-ßܱ4q[6Á¼è”`a<·º[øµéH¦ýõHb0GuP@tñ£—+ÔØ’˜²fró/GëæUÔm\Ø«T’YÔô‘>¿¹¨Çí—~~cÕÌó­Ç>F·Pë lÃÙŒøñv“6ÞCˆ)ˆ †)²ÈÙU²` LîäîFüö4ñeãMÓÞˆ||7Ž’m‘%¨š¦LîâþRð.+`{ ä¢wç*˜wë˜L¦‹ë‹,yzUú{_ºìz ]É|¦”`0´ÀŸmê†|¶¿L¯_®¯ûíÊ-ÐyÍ1WÒ,@¢©åùÞ=†ˆÄN ±áü:×7 ’`m®+„$Q9åéKH 8×6ƒ%°LîdÿßjÅ ª–ÌüÛÏ©ûhL!xþè“)¾=pBÝžn…àC@@­ð­¬×NÍ¿‚{³áÞà&˜ZغN¨ ÂØyÍQRwÅ<ó5†¤¦%¾mÓ)°[¦wòIqA·%s„DNÔ^aÛïkŽA ÝåîÌ]¢©†˜8…(6`dþ¬5lçœ8¶ºÐ.KýˆÜªÙg» 7tÚ¢E8xdH1£”t?É[yÞ“F/¶‡Fà²ÿI/1u„àáèe›ÊA#[&w16¢mkhKH@š<h„#åýN‹ìˆ$¦Lîàþ2÷;ç„)>ÖvÜ‚$áÁ)¸˜â³ ÝÀmÛž»òP Lk‹+& ÊF jóÚ&KuõLîâþ:ã7á­¾6㓱Xb¶`\6=«d‰Á S;˜¿ny¾”¨œÐÒžQ9†èâíD ì@_w<«ØÚžØj ž´ -Qˆàõ×6<Y˜¡ †S@’˜÷;m²‡ˆ®–ÉÜ_w;Úípä`¨¶Ð0­…Ý„ŽŸœ{yøn‡ÐÓî{ õ€fÉDîy·ÓCO½¬Û…•âWïéûW?U¿L³åë?½úd~ãú¡l›V²HÁ”Õ`ÍBHÜ9£ŠÑ–^u k@óÄ‘[‡†\#°¶Ä0¯v¥ãP’?uY‘»Ž8eË rÛ <ý±lÛ]vGŠˆ }~Ù©ÞVÙ«N6-;è1*:vº©þujÕc"°…™¾?BbQkªcŒé)xU(4ƒ$” _Œ`Dö:åäcíÈ`.‰ÝkNE§4@*E´(ˆJMcåGBW°n¢q0AI©Mý†ú}ME@‡Ôµ’±¡5Š7µ[Šgªs–ÅMBJœtUqKÝ<¶7 D„â™ä¦«Šš‹”µ‘9 ©Bjˆß¢‚ÚÀ,DòDzÄXRt,Œ* MSºŒ¬ÈXj§UµtQx•Q(ZS³V.F/õ ¢'vZíI¾Š&Qš.·†…RtQê¦6㺢sC\Õ¹ØÓJ$$Ñ›ž¹C¤Ùƒ9'çU ŠBZÕ™-¨ ¦–Ò™ˆl$«J³O‘ÒŠÒÍ„YµÅ†Ú²ÅšŠQVl±¡uNÂ&,jòÍ1ùý£µçßýîy~¶0ÿù?»]q\†Carla-2.4.2/resources/16x16/list-add.svgz000066400000000000000000000101051420416754300177570ustar00rootroot00000000000000‹í\[s7²~ϯàQ^â:"ˆnÝ€gk\ÙJ•R[u6©³o)šYÜP¤Š¤,)¿þtÏ…ÀH¤n¶bç2¶‹ƒ@w£¯ÀÌ$ßüíú|>x_­Ö³åâõ{0¨“åt¶x÷úà§¿ƃÁz3^LÇóå¢z}°XüíÛ/¾ù¯ápp¼ªÆ›j:¸šmÎß/~YOÆÕà«³Íæâh4ººº2³4ËջѫÁp(3×ïß}1 „íb}4¼>hÇ_\®æõ¸édTÍ«ój±YÀÀè ŸäáWÕ[³ªÖËËÕ¤!?™”#WÓSš%¹rõ H),އ2b¸¾YlÆ×ÃÅúËbª¸k*ZkGÒ—G>nÔÑõ\Ô°W˜º·ä.ª¿Û `šµžÊÌÊ,ªÍèÍo¶Ck¦›iA¦Ó¼ÙcŽÅø¼Z_Œ'ÕzÔá:_¬9Ýœ‰'`¬›gÕìÝÙ&·gÓײ>LŽêv'ÁÑÖ‡¬qXwudË. hgÏåú„¦Ë‰È&’WÓÙf8žNðûµOqy¹¹¸Üü\]oªECF–”××t×ó¶à&oÇka2:[žW£éøýl:ú~²\¬Gÿ¼¾yW-F›Õåâ—‘LßΫÑx²™iïú|<Ÿ€®ú"U×ËÕfx:›W"þ‡Qm—~±x·“ÍõôB\À`ØÙSô+¾™V§kùm-¨-L.Ö}Ò+NXWÿX§3‰»+‰N–óy5/ϯÆ7ëƒn@í¼Gg«J‚íËÿpòý›ŸýÏÚ»eÔ'ì1úm÷»üi1ÛH,]®«Õ¿Ôÿ¹øi]Ýõãj¼X‹óŸ¿>8oV³ë¯Ð8¹†C+r ˆ <‚Cc-¾Ê"ÃëÁ –ñ[øF`&Ã6z¢<e0¡ñècß Ö›h‰$=Ž>¢û4’½W)=Që IÚÓªÍÙRÈ O©§v†=’‹=Ý@ýRð¾§›hû:I#ùO«þ]édÿRZnTg­7Ë ¹ïdÞÜÌ%Ç(8%.WG_žÖ××5´”UÎ67GðõAž³<=]W¢ë, rmˆ¯$>žýÓçfwqƒÜ²>Fýe?QKÁ>ÑàjRìÛ2° …ûýÒ´û ‘•úqÀO÷'«&xPWy€<À-žžŽí~ã”Üh¯!>aÃ%„­³ªl·±s´X‡Oö8«×m0ÌÉ"!ÊRæêw…ó3¸~ý‹ik<ÿ¨.f]ßÅú,%ÀìåÂË4…ÎGƒÖƒ·.+¾oѲ…ð?­þ1¾\¯gãÅÿÌ/W}§ëõ©à©çjÓ7ÕûÙxÓ#<…@9OÜÇ=;_£“O—×âç¾]ëGÉÇ k'¬£CouÖâ!Z™ðUé×!ð± õ6T¬ {ºîŽgÓˆ÷ç0Æ7àÞìʸɚÑßOÝ…¿Ãñ.êÆ…àÅ‚HÂߥ`ãNÉ?ŠE|(ÏÇckw²àÀb‘,`ü÷,Ê­cã°/PN:wº¿ˆÀ'9Í>­ˆø~IÔ«!öYç|¹dòöô4Mž.ñO:—P˜CŸ›}ô±Ä~’ݰÅ{«Å÷2´Æ¥à™÷>30ÁR¯Ì5Á%Wî p×Pm4ì§}4@á7Ñ$CDÚ«I2”˜dpÿŠë0‘ÒóîYÏè#DvDžó\âá ôÄHæöèÈ'ôEü |[gì‡u¢¾/úÖc{ÎÈøˆÓ$x™Ó$wÏé-†çœ žT~»tÈ"ïS¹=û¦O3ñ¤/±!!¡çãÌ&è§ÝMœüíÚ XÂp_,nôv>ÞT_ «—ÄÚæ6¾z±Â—Ÿî eÝŸð=åûuò6ú¯ú ŒuÉE§§[B°ÉݪøÞ8)A_UÑ먟k™ FïK­b1Tõ¥©ïïê»í M}ç8}?«®òK¾·ã­ðãwUDMMbh;Þ.WÓjÕuQ}õºÚÔ‘ßÓVQªÛ~»»}6ž.¯¤ÒÜîüu¹ÂmXO4äï 7;P}‰{©ß /»]\ß™w¹Zé€ùø¦’Ö?-ËòͶNÌO¼JH­.Ør^‰Ñ'•æ¹n³¹š-d‘Ãv6û¸g@Ç’­ß3BV¿úMîZŸ-¯D.-‹ãùÖÈŠTçkµˆ~½á ¼…|^Yß”¸RoŒßÑoƒt+‘Îìüss£_\ß(Ö‹70™ Ëà•W½é£å:pëöw½½ÆÏ«Íx:ÞŒ³ëwˆð‡Nzùàãèß|·­ “ÉÑÿ-W¿äâ§Æo——b zN;n:9Ò`o¾‹Cë×ÿ-YHvýÁªJ²Ý—*»¾v‘¿ç34ú×f6Ÿ¯LÊJ?jíŠq^‡4º…Ö­w·G¾/¨æ¯Nfï«ù|9è¿0ãòòâ|9­ÚÈèú§m{«º‹ñæì‹þVãTD=’E|õåÝWü¯¾ÖÞb³Þ¬–¿TG‹å¢jï›X9Š]S‰ˆLG"ÑbZ‚ÿYÎ}T”U­æ3ù9ò6KžY­Æ7-Œ6»œ#062§”:ŽYºüðd>»^Œ5„•Êuü0ÉxŠqp<NÄDƒhl}áÀË€„y`¢Ü’ø86 ÓN¤¡OQÀ+!@éR Ó£ N„`z”{‚–ï‰6ÈdfÇŒ†#1sA£ò.AÇ-ÚF‚îÀšØPêW Ë®[ ƒÐ´yíÚ8ÉRhó¸ãï“¶;Α„ZÁ9eªüëUØFˆ‰J#í$wJ­£Ý°ÎŒO´™Us¬Í­Ö\¦¶Õ*nÙùXËÐývú9΂g5楕º—‰¥7ü:èe=õgAsÖŽàÉ L¢Nc^ªÖ¤¾¶D6wŽwC0@ên¾>ßå¸häÎÁá0ˆ"½Ú!M‚¾/SÒ5'†C@cǨ¾HÑp’[§( ±>±qž9(„Ì6 ê!ON)¸( ÑÉž…pˆÞ€sÞ'A9¢3޽íZ2ÅçÕ­Q<Äú˜êDö{ƒBÀC!ƒ;dÍ*ÏÙ(¿à ä“^_ïOP)ÝNPMsu9¯Žª÷•Øfº?eÁÅõí¤õör³¹“³ê4Õ¢}N‚7‚åWt¯ö%¡¾}Ъùs\õË»%0R¤CÃ1QúMܲŒ½pOdï 졦-öû‘ýpù@7òô¢½n¤'É?£%!!9õöÑÿ¶n‰_ †»*8o,1ûǸÑG,^»EË>N1²íZyzyó²áˆ–@í<À—6ïóã/|~ñ÷bî’[ÈÆ'ÂC)Ęv8 âŸi§l `º¯æÃo§óðªãg¸¿ûúeŽ=àga¬ØÔºèr`¿ØF'»ÌÝ9ÿÌ?—gÙÀøh‰Äl,–ÄäA좉γÈEÑ{2^ Ñ€›Ãà¤@Û;ëmG$ȨpjiùmyŠ+5rP¤k%vâ¹%J&@r.(ÍŒ&0RÁ‡Az!rÈe¬”~ 6˜|@áT¢Ñk=—º+Ýl)k9cB³•™\F…f#³(ÐV’ä2ŸŒd´'}7¢@…Ó–Vv<9ë.c…–O2ZXä8£Ùv™O¶q–(c…ôûÐìeÇÍþ˜u—ý6k¹ÀNvùýíÔ´ª&ô–÷å‹ûSꨑԾîG<e˜Ë0$r8 &38P?ÃDÐÆÀJ³D™Ù’BÞ%JuàXëûãÈ‘Ã`­“¹Ds ²5Î =çŒMh}V.ŒK|ÌXSæÑaäP I«;9Š‘ ¦àS8 ,ŒÁ»Zj+òxkC½ê˜<°`ª”?¡™Ÿ¸ø!¡¹þ°˜ ¿ë˜´êáÉB?&Yc!y.Ð4»P˜2ceL–¨W·ºS,Qê£×ØgbL‡ atµÍÁ¡ÏP»/ Îg´­à“wUŒÙÅ\$ݳÖÑ•œ­1r6R’Ù‚’¥u9‚:õV)BP1ød©%TiÕÛQÕBÁ¶Ëò®A½ ¹Œµ&ZtŽ•jôΦš{HŽT ä¨˜ Ñq#%{ôЏÀ L>²BÎZòQ1L61*&£4¿Ô ;ë\ "Fn: 5æ)ùTcmHådJ&qR&,7ŽÑ+ÄÁû‹à¹ få"Å(q@n&k½çT£1&kÌ‘…؆詆 $ò·'ƒ¡‰ú]Œ¬e©õ@/#Q‘ Æ%®!¡Ô¨Š[ƵÉ9Å|BQc`=RQ´Þßž ,š­QçI37±‰‰=¶¡ ^±D±ÜËVŠ¢ô}”Œ0t%šÃ®—Ù~È…+ûUY¸2Zž6X1XC?2÷ š…d(#ó­úh-Å,O†Šø.—躤=¡¢¥Å»¦ÚDG)1i=A„C Æ¡'ý;ƒÓ톂ˆ4pÑ$ OÐb˜t¶ó† ©@5¸¼åjÕ"G¨ e®gƒñ,EÙ²E82¢·Ô/Çžb î—c2!Å„Q] ’×C©örd®WmzÑEÔašˆA혒%¨°ëA`9¹ÂàB"œ’NõŽ#øº²ƒÇØìg¼åÀå€tóAÜí8QcZ…&´û‚„¤¶J€14mòŠ©þÙµ³­ZEAK²öòžB30Yl1¼=YMˆeˆc9›ÙÄŽb³ÿHÈ>d×éaú¨šß2etwžÞ½ƒ |Ü&~Ý\r—!õß3ž(|8§r ‘ÃývYÛ3ZÖöd˜¢ PVg4¼µð;©îy‡ûWuÿ«ºß[Ý>·üðÒ¾œfؤµ°?(ZK>lÈ‚÷%ÊØSÕýŸñ6K1±RŽ„€ØTø˜È&Òšè0x Œ ÏÂ;e‰O2|€²ÆËº8.мÁç"Ÿ§ö«|4Â,p(«<›è!@ÜwÒÏUžµÊGIJʓiBYå©v#çË*¯ ee‘×q‰s/¦–5^Q†|*k¼t²÷>ä_zÏî'¹Ægtw¶Öÿø<þ¾ðOÛcäíÁwàhZŒñÐ;“ôBõs0ÉA‰’c0Kæô^æÄ€®ÄÈXB/ãN ´»°@[Pøt”8ƒC:l…°%ÖŠ«KTã*±ÑK”´ècɦ¡åÉX)ú4‚INŸ–—˜Ó¨ö\h-úB±Qý³Pš2»•-ÖÍ–`&•¡ŽãIÆz²µýꙌ>ëCYeJÂg½êlŸUß‘ÊÊ [ ”l7˜}ã8£Ù‹²2²·e}ØÉ.oÝå »#zwéU?Ê­ .°Mñ“FûþwÁàÕƒ<7þ/ü†1Ƚ–ö|˯žýRã›Ñ;ù?4ÊîòóÿG¢RCarla-2.4.2/resources/16x16/list-remove.svgz000066400000000000000000000063351420416754300205360ustar00rootroot00000000000000‹Ý[ko#7²ýž_¡u¾ÄX‰bÉ"©™É›Á.8Xàn‚{¿=ê¶­YºÛ¯üú­j=Ø´%ËæîdÓ35U¬:‡dwcÞÿåáf>¸«êf¶\|8¥ÏÕbº,g‹«g¿üü·Q84m±(‹ùrQ}8[,Ïþòý7ïÿ4 ~¨«¢­ÊÁý¬½ü¸øÜL‹U5øîºmW“ñøþþ^Í6 ZÖWãóÁhÄ=›»«oƒ›]4“rúálÓ~u[Ï»våt\Í«›jÑ6cP0>Kͧ©ù}õIÕU³¼­§ëá§Ó~˺¼ä¦É“{Ó5‚ãXãqÄ-FÍã¢-F‹æÛ^Wvp_WÔZ¹.µ|]«ÉÜÃpЙ®¶oC¿â»[@­çzÉ=+µ¨ÚñÇŸ?î*GZ•mÙfùÌn–ŽEqS5«bZ5ã-.ý9›e{ÍLÀЯ«ÙÕu›Ê³òÃÏ£¡®¼õ`²ãV»ªí°ý*ëHeF¹| r9eߨóù¬iGuu³¼«›ü-tyÛ®nÛ_«‡¶Z¬GâY¥)®«»~;ð™OEÃvÆ×Ë›jü¯âóòÓ¸¬îÆŸËjÜÔSù•ãúvÑθÅj6mÆË‡Ç«j1æñæÅ§y5.¦-oÆÍM1Ÿ€r?«‡Õ²nG—³yÅÓÚ™+‹»Y9þq*}ÿ±³eCŸ_y\•³vT”¥Z-®öšy(WL…noýc¯þ{nð¾¬.þÝdVJMè긖ÉYõß뢜±;¬?èt9ŸWSfG1¿/›³mƒŽÔ“ëºb~û?]üøñWû«Ôî å[ vW}µYÌZÖØmSÕÿžþcñKS=kõs],Å͇³›¢­gß¡2|9tCÍR \PDÞáp•Ö@xž\†gŒ+ï<·ßÁ {R^K”#7&TmèÁ ƒ¶*h"^6Ç{ƒx8 µ_^z5írµ¹Ö¶s掀#Žú²ž|{Ù]ï:hÉšµxw–ú,//›Š“£ëY•l+²‡¯·†NþäÖô>k°×@ŠÇ8Ÿö£ä,à¹"¹ÅåÔyåR=æõ\Ô‡‘‚z,9`˃ÉI¡qìÁD¤ ±./ }(9¹5z}"N×üSb“~QýÞ˜ÑfUWEùSÕ^/y8¶).eùö,e‹dò´ƒSƳ6Ë}й„£ÂDö k£ÏŽ…ìµ’Z´Á³73NËõ”Êû¨‘y*Ç­Ú}r>Áê»c“R1ÿ¢Ó&§Xn¢w_tƒçuL*‘r!Z/ ¨à m0ÓÞ3¬MåG&^*^J5éTæjЩ\óÕ#$'ÚªîOxü¶O:»)´1&–³-­€QG6p:ú)Ô¬6)ðëöµ×àÞ@ðËêïÅmÓÌŠÅ_ç·uNº¬NÕÊÕݬh·çFKÎQZ'^²žÈ·ŽÉ×[×Bü¯k¹J¾”@´Š>b§¹•³—1JkCÔ*xÂó>¯S`C& f2–‰Ç†,ÖÛcåñÕ4„c{µ ¯9H½fGÖé åz…µþ‰)åé ¯¢Û(¾¼vÂ[;AE"òdŸÎmT<Æìpþ–µÓækg¤léÔ'ÇñMÇñàƒ?ý8.ª<ÁÚiÇqýUN_\-)|Iš92à Í”#ï9ø  ¸›¦ly%­œ‰¦¿#⾦ê 4¤l~•}‡Ü$’ÖG}8’¤(zâÆùƒa$Ï{Šhé À‘öÀOy?¾e pðά?xE.â¸!c.ëH9톱=¾âÔ þNÅÍ §bÔèN9¿YTèþs/¦Ð³¿'X;m'Äø54ƒîE͸x®è!ºǽWÐA¾ìÆ tôÑ>Ý»œMè^Òb+·ó¢­¾RZ.ŽP¯oÃyN ¦¼KîîvoÜåýwy7«îÓ çOÅn«âªêrÊñZ'uSñiY—U½­¢îʪ6iOßzé‘Qwõz}s]”Ë{^%žVþ¶\Þt{”ãuxZ=}X ¢±žU²=g’ëžV–Ëé­|áݮӺzxÖý¶®¥Á¼x¬xÚÝOg#ÿ&#Ó³{]ÕŒ-ç'lZIvùzjæ~¶à©¶½íÁ[›ÑãŒCSUs½¼Ç„H·UÏÓêfÕHžä»£íáGO3ëá}\_Sb3üFÂ;¤ã–Ûí£|{x,S£{É+¦rô1GûÓÀžK Ãoª¶(‹¶HzØ"l¶Þ×ååä>þm·$N§“ÿ]ÖŸÓj& ŠOË[NO×gÓ®œND²Eûýì†Y.Ÿ%ÿÌ_ßSEÖXÂ@6ìöë¾Ï´ü÷f&Æÿlgóùb¤¿t7ŽnW×4.l'Ú•®žÐ†?€Uóg³»j>_vÚJi\Þ®n–eµƶ¾Ü”w¡[íõ7ùÞqÉ®Nxß}ûüÔù;©ímZM[/?W“ÅrQmî×R™„mQaŸ&ìÑ¢ìƒÿZÎ9ÊÁªêùŒ&v‹•/>u]I?å#ßA xWÆrŒBïµÃQ¯sŒÎ›t¶äˆÃ†V1ÖFF}¢QÆ[½-qíŒesA+Á]Æ8oBt‡Ów'é š[b|íXz/~H°OItú¬CüýÍúKˤ=ð/èztPØ:(§M0™°.!'±(QæùËÝ×ïzø{ÙõÒî81„~èHÐ’^t* ÄŠvè‚ ÆR )Èæ4!I9ˆÆÈf"Ũ€êå©Lˆd4Aƒ ë¶5­Í&”1TD^ûd$a=?.Úsö‡„¦ù$;iÂ;r±'ZOù\WÓ­öIvú®xüFῊÆiŸqÈÙqQ Á u!*ë#m¸”Cœ—î]Ñ{¯;*ºˆ aè9ݤFÁ-óJš ïL·„ör€BÍ ¯0ÆŽÈš/ëÖ*ðŽïƽ‰y2®ß2ˆ¿Îh# ä1a€nèxlÖˆÇ1*gã: !D ^¨µÁ³!z“ÑsO÷ŸÎL8™ŸÍéô$÷¡§“ÄX“Ñ3¡ÂH/ôŒè¤@ZèÉV6ôDîb{o*Hë ½¡`ÂÀ9éñå"- è9ÀHYË=¼Ú¿¨ÐkùšiÓÈ¿×ÄN3ùüiûÌñ3‘LDQʦ(húc ËÀZHVvhÅ-3NFwL „€¸Ör`žDútÝBËžMGg 'æ(C[™š«ŒOrîÚ8g“œS×¾žùÆç]Ò³Ö‚ƒp`Nzö¢ç€ØÓ3©(:p==SÇc“ž;L{ï’œ蓚S¿LͤX tòd£´Va¨"jäv}Ô)í£×¬ñ>J ÁǾ¯À"jLþ$ŒÇ  ¢ñ.a²j¬ïÁ¦Ñ¥¸bòRÖœ4‘4Ôvº[ƒ ¸Ø©C“<ì'Ó~î¹xžL+gœ×1|¢{δÛWÿŒQ4|oÃQpë[þ¦'Ê÷ã+þ/dü%ƒþ ÿ)»6Carla-2.4.2/resources/16x16/media-playback-pause.svgz000066400000000000000000000040061420416754300222370ustar00rootroot00000000000000‹Ð~uFmedia-playback-pause.svgzÍk“›Èñûý ‚¿x+Ò03Ì y嫸ö|å*_%Û•|Ûba¤%‡@h%ݯO H¬ÄÝnÊ,Ãô»{ºçµ·?îV©ó¤‹2ɳ¹KvEyœd˹ûíëÇ©r² ³8LóLÏÝ,w|ÿÃí_¦Sç§B‡•ŽmR=:Ÿ²ßÊ(\kçícU­gž·ÝnQÒQ^,½g:Îòiùƒã8 6+gq4wúõ¦Hkº8òtªW:«J â¹–<²ä[ý€ ]æ›":ˆ¢.e/€ÔZ²õk"‡©Gé(¦å>«ÂÝ4+ßtXÁÀ!VŠ1ög)ÇQÍv)„áYcjlW;„~ ¿#C @_À©Q¦+ïîëÝ9Å(®âŽ˜6òFÌðpdáJ—ë0Ò¥×ÂkþmW TÕÝG,+ÛOâ¹ þùD‰ºßZ0;æF>­Q­Ø.Šqƒê%\_LœG`ؽNý.îË*_#PxFõ–@å=æ+íÅáS{ÿ(ò¥®ªÄ+!]ò]߈|S­7Õ½ÞU:;è†(ØРÉÂú*Wðß"Ñà~Ul´û·±^”ðnÂbzUã[„q¦¿˜$s ëåiª#m˜nÃ}é¶uFÌ ü¦/Ã'Â7tG•}4Ç’ÑËø-K*HÕM©‹/f¸ÿž}+õÕ×"ÌJÈ­ÕÜ]…U‘ìÞbD…Op0aHúRRâ멚L â„`ʤéa$9 h &T %‘bB(„2~sÔíæ®‚¬`õ-t?w…(VÓ°Òo¹iF•˜L©`ˆ*.ÉM 9¤ëæžÃk²‘Âu#—•,êÖ7ünH©ê \Œ.Ö 8u?TëÅ–ÕkT븼yá¨ùÔ<dd̨Q¬ü+ „y†øc0*ÕeÌ7Ï>FàT\VÀ•y†ÈQ‰-ƒ+ $7ςຂ+£ê6T f¶q"O ä¤6T¯,Ô¸lþ?œ¾è¨é‹Kögå«Qiª½¢àƒyøxTš^{®Û:FApYú]݆¤³Á‡º É׊`‘¤•.ºÉÿ·O÷_yV›"¼g6ëú—pS–I˜}H7EמøN?%aUïæÙ‰}®®9Í#wâÏì2¸BcÞÛe",  CJQE¨žböªãu™`Ôê#ýksw`žù„ŒªjAÇì#‡äû£ŠŽ‹+©+?˜gHÿß­ D^Û<5Àíþ¸£¾/اŒ¾æÂ!®›˜¿n^iã}~¸{yläý¥ceâÕŽÑaå›VïGm " ÉÎ×ÍZõïÕ3F\ÎN¾×TèxßëJ…’@~§+®^x¥2þþäüœÕÆüÖ3·Zõ×ñ&ÌÜÏÅO‰ÞÚ«¯‡ð€u¸ÔfQÍ¡²A<äE¬‹%êÖC5ÇN{)hb™ÄUžje¤¡µ¨Më.®EäÿÀØ<16µa4ˆ/Ã8ßÎ]zŠü=ÏaHÙ)Ø ‰8#®KW ªˆ¢êçÑÆÜsO7‡„ZïÎØ7Eaê»Ð¹[¿Ú*´µG>{Ykaåc¾…0¶÷–6®¥ @¶³ø¾ø¹AÛ$ƒ¨LÝ2 Ï´–pEž¡½”òg& msp¥«0«Ðæ[ ñI@Ž×­ñböϻǕ;ŠfÿÊ‹ßì"l‡|fÕ< ]ÍL•†Õûdãnnïÿ —è·žEôˆ«ýZ '¶ýKÄÐ_3àß*1LÞ—*IÓOFIw‡á5†¶ÛëtZGëÞò$Xiø Ó¹ûÙd…sçe‘oÖ«<ÖMÞ´ø¸é%E”ê‘kí5²Ü$`o?´_g…·oÎ×;‘'«ö¾†»gà}új`A&ØgLµ ²íM)Rz*nìr³ì:º¤äTìøu^ ûu3ªJ‡`õA7ïŽwqHÙÁ:¬m ‚m¿:O¸r~2oÅÒñ âÆ,®Ì °TÝ_K Ÿ 3|Ø,åGy@ÖP5ZwN¶ºÆ>êw¶ºKø°†wͦᣠn ºEBR®ˆãsäSÉ̽NK¦LH[º~–Óôúb¡ßJã]NÚK²£“‚5–«g©õØúë«ç+àlÙM2Ã<’“c )a°önÝíÅ“á ÃÎg‡ x#_)IL£@LÒ‰’(à2P<ÁDJ9QÐm8£‚ ÔY–ÇÚLj%̦õý¹J~®…¼ïФW”꺢ä€+’ö\‘Ôº2&¬ [ž†õÔk˜M™^Ž)‚¤RðÝ`¢6sò›ÐpŒX@ê’cò1âŠ:Š#)¹ô“Þä<£ˆRÚà¨À{ËiPÈ:Òƒ}ÚhgQô,´ .'·À§±´ó÷üTÏh›èõp ‹+¼þ 1y°u Carla-2.4.2/resources/16x16/media-playback-start.svgz000066400000000000000000000035741420416754300222700ustar00rootroot00000000000000‹¨~uFmedia-playback-start.svgzÍX_“£6Ï§àØ—u-$BxÆ›ºÍdS[•Ô]ÝîÖåmŠÙæ‚ÁòØÎ§¿– lÆ&ÙIrbMä2rÝ\‹tµ–¦& ÆçÎt»±`ÞæF.Õ¬Fm—åùŠÕK¸¾š¤ˆÁ2°{›EGQ>ªÀ ©§¨)g]l„“DÏiâü«,VBÊÔ© ]ŸŠC߈b'·;ù(Rä'lð‚qɉ H†Ö‡ÜÀ¿e*`ø²Ü û0ﱬà]»EµÀ/\ó€[FIe?¨$3ÐtYÕí/y*!…v•(?©0ü3ÿR û\êsåÄ|³°7‘,ÓÃ[ŒcÁ«~àM)¼)ñ¦ÄC˜y“VG¹°=Œ0 ½–¶"žoh ¹ˆ„Žp;œ¾ù.a®˜Z%‹­ªiEq‰Q ¥’ÇLœ8³¸ÈŠrþër§IŒ:•Ç9¹ëô)–ËJHÈÛrn¢7И.#ÐH‹vïô‡]Sa’Ѝlˆ]/ýüÓÃGû·Å÷@• ÐãAK;ÍõŒ 1õ 72ÔÈ §‰TÕ,’â­¯"íQΦ3Ê5æ^†Ðx°çrNPÀ9Ô;Ô0@! °Î6Ä VGtñ1òB¢3ÐC@’‹‘Ï©Å}¾"ôr@§€G¥´æQ!7= @¯£8Ø¥5ºÇÅaÏBp=Ö ŸûÛLSÿîå•Ï£#õ”¸‡½^ÿÚ%5<ÂCarla-2.4.2/resources/16x16/media-playback-stop.svgz000066400000000000000000000037071420416754300221160ustar00rootroot00000000000000‹MuFmedia-playback-stop.svgzÍXos£¸Ÿ‚²o6S[HB‰÷¦{éÞìÌÞôævwÚw²Mƒplß§ï#ÄÄöÞ¦ÓŠI@Ï=ú=’¬»÷ëÌyRe•ùÜ%»ŽÊã"IóåÜýúåÃTºNUGyeE®æn^¸?¾ûáî/Ó©óS©¢Z%Î.­WÎÇü÷*Ž6Êy»ªëÍÌóv»J"*Ê¥wãL§ Y=-pÜæÕ,‰çn#¿Ù–™‘KbOej­òºò"žkÅc+¾S¨TU±-ã£ù8îK–ÉDm$;ß‘0 =L=J§ 1­yí§yõ¦§ Ž©RŒ±<+yÔlŸA^ ÆpûÞ!õøëZ:Žuš åªöî¿ÜwÌ)FIôÌ´™×fƧ#ÖªÚD±ª¼–nôwiR¯ TšîJ¥ËUmûi2wa|>‘ÂôÛf†0ò©aµfû,Æ5k¸¡™¤ˆ!2ˆ{“EU>Tu±AàðDê1ª@Ê[kå%ÑSšx¿–ÅRÕuêU×Çb? ¢ØÖ›mý öµÊ¾! 6%G6x²´¡Ë5ü[¤ †_—[徿]¢¼›´èäEpË(I£ìgý0Z? ¸È2Cj£l*·0ˆ˜­J~3´áák¹ÎåÍqÀ:ö²!~ÍÓ º­TùYO÷?ò¯•:‘úRFyØZÏÝuT—éþ-F } C”øj*'S†¸ïƒ#ª{ ÄIHC_\úœÊ ¡HÊøMç#ÞÏ] ¨`@õ-õ0w…*–aÐQ˹Ë0Â4´YŒª/êŽ7šó×Ë…"˜`xôˆ6¡ð¦„MCX°›ñøí@yˆˆ|î#r|>ít¿køwºô·•ÖŸX³Ðªú©#g +ÊÙlÚ­!0ê´>ÌÈmO§X,*8ÄÆ‹Þ‚ Þ„iWx#vÒ¼á°*”ŠÊ–ØÏÒ¿~ùôñþ!|øF¬ï x%(dÒâí4ŸY "˜!̉´2Ôʌä֟YT«·\Ï4£RL¦T0D%ÈÍpG>¥LsOgƒ Èá%ÛHbÓÈy' Ó†ó†oÇœÊÞÄ çèl Ú‰“cup¶^lY½Vµ^ÆÍwΚOõ3’@F®™5Š¥ÁÐϘÿŒò¼æëgÌ¿ÆàTœwÀ¥~ÆW;/8¸~Æ„—\(iÚX\XÙ.Hð¬@žÕ†”…¼Íÿ‡Ë½jù‚úý³öåU0•Œ^pð^?#||L/®½7m̽ÆAxÞú½icÖÙwÁ{ÓÆl‹KE°H³Z•}ðÿíãÃçEGõ¶Œ˜EÝBým«*ò÷Ù¶ìǓܫ§4ªÍiž=‹b¨ÕçèùÊS†ø3§ .ƘN„+CGd€Æ”Tª¦˜}gÕqÓFf&¼j÷ üKkw¨Ÿû„\UÕ‚^s޳ï_Ut\\€nð^?cøoo Á¥ÃSCü®ö|Üs?4ìSF_sã›&&Ý×Ík¼ïP·;칟]”‰WûM–¾næF\RGr\(1 aQJõŒÛjj‡²žuà`Ÿ6Þ™@‡ƒ­ƒóhø9l!óÛ—×FF[d˜¢¹ƒÝ^ÿ—Q§Þ2Carla-2.4.2/resources/16x16/media-seek-backward.svgz000066400000000000000000000037071420416754300220500ustar00rootroot00000000000000‹Ò~uFmedia-seek-backward.svgzíYm£6þÞ_A¹/51¶c²›«zÝ^uR«V½;µßV,8 -œMÒ_ß±0$lÂõ¶oRvÁ3ãyÆó¶sûån•Y¢¬Ò"ŸÙaÛy\$i¾˜ÙÞ¿™pÛªd”'QVäbfç…ýå«Ïn?ŸL¬¯KI‘XÛT.­·ùoU­…õr)åzê8Ûí¥G"*Ê…3²&Y=.>³, `ójšÄ3û(¿Þ”™–KbGdb%rY9Ç6â±ߊTŠªØ”ñA}·%Ëd¢Æ’­«…H†¦¥˜Tû\F»I^½h û†RŒ±<#9LjºËÀ O£¹mtpýþš5æ:‡‘åB:wïïæ£D&-5µç îi8òh%ªu‹Ê©ézü6Mä2rÝ]Št±”¦Ÿ&3æçÎt¿¶`ÚäF.Õ¬Zm›åùŠÕI¸®š¤ˆÁ2°{E{QÞÏ· ¼3¡‡¨!gY¬„“DiâüX !eêT­Å®kC±‘ë¼;)ò48ÁxäÀ$CëB®àß<0{Yn„ý ˜·‰˜Wp?zEõÀ-\ó€[FIeߪä2Ðt[ûòTBm*Q¾SQø!ÿP ûTê}å„|5³W‘,ÓÝKŒcÁ« ~à)Ü)ñÆÄC˜y£FG9³=Œ0 ½†ïg¶"ˆoh; ¹ˆ„p3®ù.a®ž˜žZ%‹µz6ÒŠâ£Z%÷™8p&q‘åôÖíF“ ˜u*÷SrÓSÌç•(¶å\E ® 1Ý ‘íÖéNûH…QYÛ^úåûïÞÞ݇÷öÇÅwG• ÐãACÛÍõŒ 1õ 72ÔÈô§‰TY$ÅK_EÚ£œ'”yˆr? £n {Ù¥ot³Ï£á3ðá5݈cÝÈe¹nݸá›>PÞ \7FkÐŽß÷ÕÁÅz1eõÕ:,o>1j.UW=2$js÷ SW€;À£¿ à¹êêð‡0Ÿ²Ë>WW@0(±ƒð @à«« ¼p¥`¸n}ráÍ6¬@‚“9© Þ) >,›ÿ…¯/:èõõûgõóAiÊ=zൺz\<(M¯¾{¿Ñ­€/k¿Ó­O»÷ÉEðZ·>ÝìZÌÓLвü_½½7/âHnÊèÞ3Y7ßF›ªJ£üu¶)Ûö$wâ1¤^Yz'VtGµÍ9 \e°?³Êð9ÂûU!ÌÈРyˆsÊ ì}bÕùºõD&ôõ \vE¨®ý„ ªjF‡¬#ûô»ƒŠÎgWR7x­®>ÿ¯û6àÊâ©?ÍŽ 2ƒQ¶öU¡w´Óe)`þ¬[ð]Å.õès~8º±qó4z®…·åt¾›Ïá›àþÒ¶‹zÌ~®­#A˜»ªéõ¨éD´ õ4ú¨¯¾å<{ưËã“æUøÌp¾Ç¾˜ >°ÿ®c„¡û"LÎwFÿ¤—(ú¿—®z‰Rò¿—xé?Vq·Ž:…ÔOÍÉ¥:NMS±5G•Qcò:Z½TçÌu;2Š2eÍbºuXÇ£s†«fŸ&²ÈL>ÀÀÐjÖ&MD›W3Ї_!j=Yecƒ†Q/¿ZFI±Ùô”ù{Q¬@é)Y9™øî)Yû™!Ê §ü”™ñfÁl9°Þ ß”¥Ðg×3[ßjhs°ÞŒ3‡ë†V-‹-ø±>h6Ž­”òØ Âçô=ÐÏ Ú¦9¸eRccŸ¨Ma¡÷„ã'X*,u®„Œ’HF&ÛjŠKBÒŽ'óéOwošµmO.ÊßÌ2U DÅLÒcŽrI'–ë#—žúœfÕb\õ@´–;páÏŒT½®Zè×ÚüöHÚVKA²…IÁ3ªc©™±™¯ËŸ®€³Ø…$£$¸frÈ/0ñ¨•E¶_¹‰ÃºHsõEñè˜2+Ô‚ç[šr²ãxJB_q†Í„‚µ£Å5¿†µFËÞ‹nÇY¸ Õkã3›Ëªüfå3&áAÌ è£š{:ƒ~Ïø®=ܹRßd^'U9AçðÜ¢† Y€u•"õJ°:J#/$ºr= ¹àN-î£ ð¡S;ºt<Š`ÞGuQr3RôZÚƒ]zD÷¢8ìXh.×ç5b^oþÍÓ_ ÖÙ¡ýy ßh¸ýqIÒi"Carla-2.4.2/resources/16x16/media-seek-forward.svgz000066400000000000000000000036501420416754300217330ustar00rootroot00000000000000‹¡~uFmedia-seek-forward.svgzÕY_“£6Ï§àØ—u-$BxÆ›ºÍdS[•TR·»u÷6Å€lsÁàylçÓ_K6 c“ìÜåN¬ÔÝê_«ÿ€¤¹ÿö°É¬gQVi‘/l‚°m‰<.’4_-ì/Ÿ?̸mU2Ê“(+r±°óÂþöÝ7÷™Í¬ïJI‘XûT®­ù¯Um…õv-åvî8ûý¥g"*Ê•3±f3Y=¯¾±, `ójžÄ û,¿Ý•™–KbGdb#rY9Ç6â±ß‹'TŠªØ•ñI}·%Ëd ¢Æ’½«…H†¦¥3˜UÇ\F‡Y^½i ‡†RŒ±<#9Nj~ÈÀ /£¹mtpý~Í€š€Ns]ÂHr!‡Ï s†Q"“–šÚó÷2y´Õ6ŠEåÔt=~Ÿ&r ™@¹î®EºZKÓO“… ós gº_[0or#—jV­¶Íò|Åê$\WMRÄ`ؽ͢£(Õ `Oê)ª@ÊYá$Ñsš8¿”ÅJH™:¤ëSqèQìäv'ÅAŠü„ ^0.9±Éкøo™ ˜¾,wÂ~ÌûD,+¸ŸÝ¢zà®yÀ-£$²Ô ’hº­Îý/y*!…v•(?©0üœ©„})õ¹Œò b¾YØ›H–éá-FŒ±`ŠÕ…?ð¦î”xSâ!̼I££\ØF˜†^CŠ ÛÏ7´Ð\DÂ@G¸™N×|—0WOLO­’ÅV=iEq‰Q ­’ÇLœ8³¸ÈŠrþëv§IÌ:•Ç9¹k)–ËJHÈÛrn¢7Иn#ÐHƒvït§}¦B‘Ѝ¬‰m/ýó§?><†öï‹ï*A¡Çƒ†všë "bênd¨‘N©³HŠ·¾Š´G9›Î(óå~@&½öÕ¥t³ûÑðøð–nınä:ÈR·nÜðÝ(o®£«5hLJêàj½˜²zj—7_5—ªkÀ5й{€©kÀàÑ€_ð\u øc˜OÙuŸ«k •ØAx ðÕ5Þ¸Q0\·¡¹òfW ÁE\Ôï”—Íÿƒ¯/:êõõûGõóQiÊ=zེ\<*Mo¾{¿×m€Ž¯kÐmH»÷ÕEð^·!ÝìV,ÓLвüûøøiYđܕѣg²n)~ˆvU•FùûlW¶íIÄsI½²ô.¬èŽj›sB¹Ê`d•ás„1ö;« B˜‘¡2@óç”*fØûʪóuˆL8êë¸ì†þP]ú UÕŒŽYGéwGÏn¤nð^]CþîÛ@‚‹§á|4;*ÈD DÙ>:V „ÞÒÎ×¥€-ø³>nÁw»Ô£¯ùá`ëÆ¦ÍÓäµÞ–Óùn¾†o‚ÇkÛ.ê1ûµ¶Žaף¦GaЂÖÓäw}õ-çÕ3†]ÏŸü9¯ÂW΀þûj.øÀþo#ŒÝaÒßý™^¢`èÿ——îur¤ŸšÓ&u–<§boŽ—ž¢Æäm´úõÎYêvf<e"ÊšÅtë°ÎÛisð¦fŸ&²ÈL>ÀÀÐjÖ.MD›W3ЧAÔ8&²ÊÆ £A~µŽ’b¿°é%󷢨€ÒK²r2ñÝYù™!Ê §ü’™ñN&Ïv§ØzÃwe©ôãÂÖ·Úœ†6ã̉¨¡Uëb~¬c+å|vƒpŸ~zß }šƒ[f56&ü‰Úz/H0~¥ÂRgàFÈ(‰dd²­¦¸$$Íf²œÿýáC³‰ãù?ŠòW³´PÑS±“ô˜³\ÏUUEò]º¨«óñ¿Â1õ½cayÜ tÔÖgýC/€›T r>É4Ë>*öºÉ9Z/vÌ< SOT÷V®Ê¢'‘-ìUJX½t\•Ån»)qNššŸœûãâ´Œ31ú‹jzZ×i4 ØYå-a®sðÂÛ7ý¯£y15¯”¶G?ÓËà ô®¼Xfìz¯—¦7£ˆ‹›˜Ïê=Ñ%=µ£W/œ™§É€«¤(OÎêní&wÍ #âfŸ³äÚ¤ Øö“EðÔçÖwêÎ=ä±Àr ò•˜Y>W7àžXº¿Zõ`ýpf$OƒÙè±Zê„ú›u±€WöQ·µ€_éc¸1›N™‹Bݺ!E, >'–ë#—žúœfÕb\õ@´–;qágFª^W-ôkm~{$m«¥ Ù¤`Õ±ÔÌØÌ×å/W@oÕÜN²m‘WEþrjaÄNí”ZS—¡z1¹iÖ“;Å5kèLálÈù }[¤¹ú(ytJ™êXÃsˆ­¥7‡±‡}w¼ÿ|·7—kîó›%Ò”„'ß@7Qèe¦IŒN&q‚Îá¹E ²ë"Bʉ`µ;#/$º°< ¹Ë©Å}¾"tR[g¶G¥ôÌ£. BnF*@€^K;p°KÏèC‡ Àõfø2æíãß½üB÷híH]é÷ð …Û¿ÑÅU½Carla-2.4.2/resources/16x16/network-connect.svgz000066400000000000000000000160551420416754300214100ustar00rootroot00000000000000‹Þ}uFconnection-established.svgzì}[sɕ滗~qÇ‚És¿ÈÝžpØ;ŽèYOø»o Jœ¦-µ$ÿúÍ*„Š,±ÀHµHn uòþ/O^Nfñû{ÿú|ï—Ùâòl~ñÃ>Øß›]ÏOÎ.^þ°ÿÏüûAìï].§'ÓóùÅì‡ý‹ùþ¿ýá7ßÿƒƒ½?-fÓåìdïÝÙòÕÞ_.~¾<ž¾™íýîÕrùæÅáá»wïÊÙ•°Ì/¿Û;8¨)/yù›½½½ZìÅ勳ö¯¢_\–éÉühVŽç¯ÿØüúËùùÛËåbºœ/ îoÒ_'|óvqÞær|8;Ÿ½ž],/±àÇÑ7ÑßÍŽÊbv9»8^Uëøøã˜‹“ÓuÓ‚wÜFÂÌ<:$:¨1.?\,§ï..ûQÒÚ°¾¤‡5ls»X/ÞŸWø>Y™6ôãÒ«ÊÞÌO6€®eÕÖÓšrV.fËÃ?ÿãÏ×PN–'e³ÖX“M¿/¦¯g—o¦Ç³Ëõ¼I_Yp²|UDÑ>¾š½|µÜ<Ÿü°_Û‡ Þ>¯kðâš{P˜Ú u¶‰6A¢v³9™M/k½_Í_ÏO¦¿œþ×bþr¶\ž^VÍßßJRS“Ï/.fÇËŸf•èGçg—¯f'¥Öµ[™ùÛå›·5ÎûåìbU‡ŠÆšUpM¶‘uK{]ÿïôlVaX.ÞÎöÿP¿?™^6‘Vð4OÈmX ­žMÿ±˜žœUR·²+t[~x¿ßߤ˜Ÿž^Îj±ÐÊ6e6)\÷÷?§,è+ ûËòë²¾?ì6ùûbƒ{ ôîÕÙr6!6¸…P_,ä¾ ‹:K$àþ=ë…ÕÀé÷Ÿ«ŸÂN* ÜÛäb¤½ÍF(x¸ –æ Ÿ(Ø‚,‰úK×¥¢%Œ åÈžÍÀ¶=o;Åæ;–¹ÀQ6¢´Q0‚À#ˆr3šïhÑjÃF”6FŒI€{¡Íw4J`50@<Õ(í> có "¥5 Ž(m Œ”¶3ªQŠîæ`aBšy°Ä‡fJÅÞч4HÐ}ÿÞ‡{iè´ýŒÖäÎ4A÷àñLšïXGH­÷ˆÒF¡a;CI3îió‹’lA`ëŸYî¨Z-ï!ZW\û÷*ÚÏbi´³‘“I÷‡¦üL> é{ÐQËpiÙ Äë³;”ïÓYNšïØù#oƒæ˜ÎÒO¼Çã.3êî´¼ÿ™T±`Q&Û^= 7.2?æ’÷Gð`Ë)yëÆÂH¹;Ö‘>ëT5·‡Ë“uä¾;¸42b²Ã6”Œ{AÄÂõˆ}Pïב›ïhR©>¢)cÑIGÂÈþ˜}“swd£GD‰î‡ÒtÖ|ÇN3ˆòɆþXK)&ÌK›Ñd#ÜÙÀlð¨(áÎP"Òû t$)4‰‘æ=7/NŽóFi[‚Ddƒ 5OÓó{÷ÈÖáüâÕbVä¿í™Ò~Œv·¦ôëàã÷?ì—D"ÈôCmjqHÜHOk\•’É.²‘öÆ]ôeûòªÿXL/.«üõû¯§ËÅÙûßášoÁôª?“Jš}w+ñ?/ΖÕgÿör¶ø{ã÷þëÅ?/g䇃“s»Jn…ƒc%ŒÙúä '0x}Š ƒ”Ù5!È ÞÄ㚈Ì+Xµ²s7îªÕ‹‘[G­=qO{ãVµŠMÅô‡ÅœôNÌw†y…R¸WœgÜÂkÞÂ+“ƒ,ˆ@$MHx%ª ‡=2æö ˜“æÝ˜ûÎ0‡Ê"6á’ŒÊYil“-Iî¨-ù¡ zLŒ ¢NPèõä’Ó±9saðØ€Û÷´7n…‹“¶ öÎp¶cÈñŽ9ªÂ=!µ•V@ÑÅ®¥ª” dý„oâRo\jáÔÐ;-÷²ùy>]Î~§\Â1e‚YXÉ⻇¥©ßmŽ•wIS´j¨ùb-O­h0EvhJYØQòYÒÔv7ŠLnl"IJ‹x}pö ¥CÅŠ“ã©gÆwÔ [Ö»±Í]b›Íð íˆÖý½Ž!^@œ[p‚ø¸Q$C:àB DIë¢Å™œø&º¦N–k-Àï´F»…·åeÑDW½2® lcÑ kâü$ú„6Ý=â\<le,:×Q6÷[‹(‰bîBSIÇÆ›|NdºÁgU yèIÚÀÄØÚ\xÐÀlfÆP$®Àeg™`”t ºÍgÈéð9Ф2uùì…"¢Ãg+þ1Ÿ¹) ôAgÄ;÷Ý ~VˆÂÛ— ¦h) „ÑàÅ3 ±5ZµãÜ»˜§ ¥æšE|ƒnoÜÓNÜîRÄÅä!1'Ò»­vÀY®è:‰œbÞ‚%„Y+Ê\³nA†pº²ýµålÇbÚ†„Ìøk;³J‚1È¡^¼FÖ{¸4ÚJÅÈ1b‡p‘mW<â‚0üÚ®Ü$ £”t”äÈNsúY&fzzL'ykÝœDŸšÂ¸KHŸÅÑ­®Ç)|j°5'F¹»Õê†v<¦+¥üê ŽÂ°ÁQ|0ƒ3"‹í‡EÛ† 8ÒÀ=ऀ|¸Ç’Ó'Ã¥ýú¸›4ŒR°þÒ|?Ë®å´ùn·"ë%o2ݯÀ“æ;~®–¼åLA?i¾ã:ËN®€r×vc†íð—ƒ#Ääê‡M®]‡)DjN‚¹JF~ws—–¥{z ¹T2wöuÔŠƒvOÃD•"›ÛƒžÍ¸ V]«]cwN›lѬ ‚N’ Z(ÝÀÕJupEˆ ·Oe ‘‡wpEô’®‰Š+‘Þ+õÿÀeEÏ(Ű9jÄH,ÜE¤D ߀ Kˆ‹vé…0¤ Û:î—…MwØËÉ\8Ö Ä…´éÖH(fa]ˆ ¡ Xw'Ö¤˜Hð —A!R¿äraf5û²Pú.¡d PbqŠŠeÓ`zÂPæ.¡Ḡ%[CK-a*OKÅb‰”~K( È^±ŒÂü”¡äG»5  ó$¬€+ß…¢PŠ¢t°-éjéh›ÂB´; QA–R€Õ—0´¥JhwF¨ZÈ…¥ãéë‹»’"„Ú7ÞäîÆûˆÆ“Â@³®æ½P²‰tß·J ³ñ—Õ|>cÍ>cÍ?gÍëÖ¼ÝÝxÿK`MÁIr1%Ô[[ æ,Â`ÓJˆGhØž¸«ÁU(<v1<lþÊ€%-ÆÜí®æEÀðÆü„µ0"Q‡±›¸Û¤,ÐÕ—I+é.Ô‘;½Ž5âœÞÿýÏÿòçŸè§Áí×Áíè£ÓíÌÛlQ••¼UYƒÇR+kê‹ï/þzôß•Íëô‹Ùÿ{{¶˜ü¯õ»ã/ïýgZÍÔ¶nÔ¶yؼ{-ؼ}¿£šNå|£ ³o^žþmvZŸûº][ÁŸÎ6õú©FÿˆN¶½W4î|IÃé'ßýàR45dà5Çï÷Ýw\!HÛúCFð nÌŠ|Û˜Ýý¢™PíÛ¢ù&ЄÏvMhðl—N„FÏYóòœ5oÏYóñlÍ„ßͰh&tz‹æÇ·UÏx”"xÆ£=gÍÇ3Ö<Â3Ö<ÒSÒüõ¶æWFx°¶Ù’¥N¬Þ-Þáà &êëÍ/[}& ¥‘ ODVÂøîKn<™â£´Ì׿ %9²ñSÜw2ýv plßî Êowå·;ÃҾܔò¸C·A÷´‰” Œ§éذç¼ÉiöŒ—æðŒ5ïôœ5/ÏYóöd5?¼üõxìýw—Bd+ì¤Orýðmý;6ú¶þÝ”òmý»+(íÛúwgXÆ·õÌG?”`^0Bc‚”…<å+\J°¤Ç–³³Û dX†âá™tóP%Ñ ÏM“U*ZØu\Ê/ºÎÈç¼ÎH{Æ+ÌŒç«yx¾šw ç¬yy¾‡&ì ì-¸)¯öBžä¡I‡øâÀ~•‡&œïvÔª„âÉ`Ñi¼kaaÈnwu.Hˆ]VE bÿ¢¬Bú¬ÒLò–U"·f½j]V5QƒìÆ^ M3ÄáYïã³Jvìêý0«iÿY÷ÞËWów/ (ËÅÛÙÍ”'óã·¯›¤oWTxóþfŒ&íÁÑÑü}'ƒ—oÏNfËùù¬rãxÖ@€5é¦Ä6ü²¿Ì6¬Í²?üÝÙEÅí`}30>c}UÚR>£–Ÿú° jšxÙ(óâeMµ!·änÊg¯ß\Õ|Öä|=[NO¦Ë醈k 2Òþú‚õÉé‹¿ýù߯ïp¿ø?óÅÏ›+ÜM„éÑümmZ›æ*ÞÉñ‹¦N—8{]éuxùËËÿùþõyíë€näå‡7³*èd»˜]Îß.Žg×·Øß¼]œ—ùâeͤþïõY“èðïËzeü/M!W-ÛÔôüì¸^„Î÷x1›.Ï~©]ïõëzk¾-â*íåáüׇTà°æÞ­òñü¢˜£·Ëùb°)ø/¯¯êwy¶<Ÿýá¯ï?Ôà½ålúº…£•vr8Üd±‘õ–XåWùXC?vÚÝQÒVMþqÕf<Üïâùf¶¨ _âùnvTÖÂ&çZÇÿÍÞ,æ'o—gó‹ åî2þóÙe JoÆW¯D—óÿž/+"»­ìlqöK |£³ËÝÖ÷ﯦ‹ÙÏÏ~ží8ßöéOó“&ß ñ6D«²V²1õamMÚ§—k+³1ø]Cw>=šÿ°ÿc¸‡·íúüí›×µWÉ[^®³]gü’ì£e÷²Çm¡¤¼òÁ`"Žú‹A›£ÙêAí6ìu;ßL—¯n½Õã´Úœë—æ7ÿµp[ÉoÏg/.æÿªcôï+Sç?·³«ß«‘£¦Òµ ™ ÕF¿¨M¾8ùXøß󳋮´Òp¶8?«ÿ¼µìdzYi°˜~è”ÒHW/ÙÄÜü ¼Mó*Œÿ¹§P"É3'\(RsïǤP$LÃÅ«¸/ò¿ön¼Þ¹ÁÈí#ñfFTÕZ y3W†uJÐSÐÍ&Œ— B–½?í¡Vó ¢ñØËBj1A‚B–€{Xœ¸‘¡C©™÷Ò¡Åû6>bÁì—Y­ûÉšu0ûÝoo_Kø®Ë - õƒ‰Iž?ˆ¸é^mw}tR 5'ZTtuè£Ói¡íl]¥÷"Ü×Eû!ïïxu&x×:”,oÁÚ"ÙÛsºDc/B –“¤"©µótÁ 3 o¤Y˜ÈÝ:Rå¢Î"ÑÉÀ‹¹w…\˜‚¸STOù›ÞØé&˜«þ8ÐÁÚOwvÂþXþù×οÝuÅ|¢]1¥—S\"€ïÙ£¸X¨ß¢½gçèí(nÒÓÍ#Rݷ銆È)ÒW‚º¦€óÍZ!@!мՌ,‘`#:#qðOÁc;£áêŒß¾ÜfÉàígÛf¯ãw[Î%C,Œ}-lc?<7'Ø’…©½èª˜au6â^2M%'ÅÀM°Î» pdð$¸˜X¶2± ÓJ2¸íy@A‘IDIcQ\Íš2U'ˆV2­f)^Ò(Hª4›dµx‘*s̨²(f¾'TŒÓá*µ‰fMÍXT8Ú³c¤¾GTXƒ'™…)Dhä9­­C$sMTÈ D'¡%s±$³M‚J†Z›ÚŒ-'%•‘x57ÌP€p,‚ D"Ð-|¢PЩi"e°ÇJ”ªÞ‹zÿâ+ч_Ç——#–`ëd¿¹e0-{ˆBÌ2Q.ŠÂÂ+¢S5DQŠDª(x²tªR®R5±k™5Dqƒ\§Î/Z«,¹bŠK&x«k2P\1ŕѩe©“6h;W™—ÄPm˜¢‚²IL+¢8€e¶Da3Ö†(â®) Q€Ôb¥(YP[M½âI¨aË·ldÊîM …Ôש,€]±]-PÉH[ã¦rÅ1cœ(V©JKCMYË úPïex™eòÀÆz¼É¿†ý¯»„uÛßͤÌìiNÊ’µonÁY" {§%^ÒS­;›é;üÒNºgeºS&.Ù–tky´ œ’m¢d?P£n†›>ŒZk£Ñ3²xZ3²Z…¦È”¢,–=f `ÿi0(F3ÈáÛ{ =Q[òuØò~3Ðí² ûŸmŠ)QNH ‰k½\¶#ÉePÒ·ÙÀcÙò”ѶܞÃþÌî}xëÃtè"x±ÖBx´îOÄ’(`ŒbÄYeQ€4«ŒK0¡ë’¤œ` Gã>¯kÈðÃJý¶˜C²c‹ÇÞU³â ¤(žêßõº‡^½^3ý½~Ãëû€/çF°µÖ€çkÀ[Öñ¯ ï†{ôºÖ–Cy¬µ ú6s^Cñ4ç=ªîÎ:øW»Ùn¯Ûw@‡]Ö€çkÐ[Öõ¯ ·}Ø£×ÛGwEûÖ×PÄSíŠ9àì ã{µëtáö;~»Ó×ñN™î ÆnMÝK’zë}AI‚+OYfL”Š$«\9Úˆ\u¢PD1Z¦OÄ :y›R‰s"ZÝÙÖ.š Ä’•‡‡'¨˜i/¨P&s#N$Ü )FÜ&eÓŒš4µ8„ä„´†!í!hA¡Ô Kq'ÝCäBAêMe<‰t5÷•’)‰‚aQeZ˜)t¢X•ÛÔ €­×%À¤6%´P r —™{ƒLp!‰IpÁL1oZ—¨+÷]'jOÜWÜãPÜvVšðÕxnwª(A“€¢a!²ö^³jÓ§Ô‰\¯œ×im­‚ ®EMŸbõX§”†Æl«>¥hÖö©°6;Ï*d¶ jr²6}J$°Š¬`IÓ¥œlÒtÕ¥Ô4¸éRβ‡ Å#R&¬\|‘jh:6U UâuÄĶG F+s6i{˜%_'¦‰r±ùUB3^CÅ|ÕŸ0sTe¬Îí”kQö`Üëþæ0~ ÷÷§¬,°Ür}SAtðh}Ê`TÛIQ$RÚ¡¨UÍ:嶉SI£ju­í ·”+e „D•rO%kdˆUdÅÀV‰-$+ÄQŒÉUWlTɰ¶>¦(¾b£¢£ëêØD¶G)PS‘ZBˆöµæž.å¤'ãRî¾µ ‹'ˆëì }Ý{°zD}¸í2"”õîD7çñ»Ñ®ÅIX&YŒ5ÕÖÅv6[L×wæˆãf‰ù”lÝy¢y4¼í:¼gÛ¿Ù;¼AÜ¿«<¼mÝUkôáb†k×mÓ Ãhöë!÷ÇÓó‰­ç_îØf„aÇj30 KD¿ÍpÜšärþ rÅ ×Άx²CëW5 ÛŒnçöýX’Ô‚ P- eC¯–d‡ä¢§K®ü6Ïø5 ûãé)Otž1ì=¿ûj·pžÐžeOS>µUC[%í>ÉøM=‡øŠ‘…9“'žÅY2´bû)}iaÌ´‰pq•P}ˆ=fo¨gÔÄsWì©ã'U­ƒª®»bŸ¡j„¯OÕSʰX£×¤bÁֲУ ±GLÔ‹XÒCÞérCÀqˆ«Ïç°ƒ¾ê¡AT ´Ý{Ph5‰EAÉqâRÙ­ÑNH!1žh7f佬á†lÑhÇM€x!Šb¸O8K ®,"•ˆn­ ¢\ï·yx3„h¶ÖÍ,' %ŒÕ¸µ.Øè›J¤‘Zk[®lOS÷DIÇ•q k﬉›µ¦DÒ³‘©Pröµ¼ŸC„dÃwå¬~zKdèQ”'¡­ª+Ƽ¾æ®è 0ÊèW[ßà^…P… l×2n}1à¼N ­½gâúYár`CvËôë(I户¢Y?+€¯ëDq¥à°XÍ`Ñ(À#t-sékÑývÞ¿ªË\ãí‹}Å£HLÔÖ½âìîWU¸½€è.Ö^@dÅöþ¡‘9í¡ ˆf˜¶X]@&³Ö1ÆÒÈú‹…«Nf¼GÈ#/öfà…ìÚØûfPdSâ™" ’Iþõ[™ÕÍê*¶Z¥6›¤=l ‡•‘¯ñdDdddû‡ûüá|öóâúæìòâͤ|0[\_žœ]¼{sð—?ÿ~î³›Û£‹“£óˋśƒ‹Ëƒûݯ~ø_óùìÇëÅÑíâdöéìöýì»9>ºZÌ~óþööêõáá§OŸÒÙ’˜.¯ß¾šÍçmÍ›Ÿßýj6›µÝ^ܼ>9~s°,õñú¼–;9>\œ/>,.no!ÁáA_ü¸/þiñ6]/n.?^wͯ—¼>9m‹ö#ùDµDÄaÆCÄy[b~óåâöèóüâæ×kUÛnªŠ9çÃ6¯/9­ÔëÏç- _LÍ]ï½…þªý¹«°"¤Ž×Ó¶æ"],núóOw™óœNnOÖšY!ß÷;žŽ‹£‹›«£ãÅÍáŠ^ë:;¹}ßJzM¾_œ½{Û§ÏNÞ´ü¡f­éÕ^ßÉPN„5kÕìzK‚’9¹aC'—ÇelmŽþ|¶ø4¿^œ¶ý>µ½þ}ØîåÇÛ«·]|¾]\tµŒõ\vÙµÞñ^WonÚ®ß_~Xžý|v2ìbñùêòúv~zv¾(ƒ”< ïêâÝÆªŸO®ÚÉDL²1ûKŸý»6ÿ‡“ÅéM)×!]R¨Ùk^›Û Ëâèú?®NÎZý¨´õ6/ÏÏÇíl:úrS;\55¬JLX­ÍÞÜ^^-Ÿ <·_Î[N qÞ¶xyýú×9óIο­¤ËVhÎn¿¼†ßôu.OOomǹÒú^K bâƒÙá?Ö[ÞÔlîMïzûápÈöF· DÊC”6ôGªØÊâi>=õ1 =H[:óm8Lï, £’::côn™þËÅÙmk?Þ,®ÿ«‘ÿ{ñ—›ÅÁ¸ÔŸ¯.nZ‹õáÍÁ‡£Ûë³Ï¿É),°Éå_ Ci€(圱ÁœÜ_ݵrýæ@$÷ys0Ï ´ÏoØ¢>:ë·'Q¾1a9ûqΛ&zʬ noäß„7µžH„&uÁß`à÷!Ù7v¡<© ý&F?nÆ(™Ø´.ü`‚iب½ŒïY—Þž*í*jöˆ†#¥ŒßÒq»Ãˆ3J*Ç`°£(aÖIÙ¾$\¼=z»+HÊßgü N2ílµT`§ýamáÿýéøé¯ü×Ámû.®ßë=ÐrÚ~uœÓ÷ð†?ý´ ¾ì[žáÖnú¾pÜOéB!&í 7w¡Sº01ž¾/wáßî¾ÕºýûWZ¼§]a=©yýþzÑž,ýº—÷-!vË}ehyBZÛw|i)¦},§y½–Ó¤ºg¹ãxÌ &vè:®)û`ä§£ìÓš=0:Á@Õ~H@NÑ>Ï!'s±WÏ&1™6´àÁ&ã ` ÜL$o戻!%¤ SB²§L1þ)åê‘M°Mƒé õƒ2wßëÜʦÐã¤ITÃdÀøJ>QŸ’é‰sûÐÐ<¾¶ƒó‹¶[ÛÑõ±´ý .}ñ$&ÁdÏ&ÏiìI ¤ÌA°O¥¹ÛI™ÊH`ˆ[ŒôåiK r«°ÈPX"‰‡‡ ¥…Rf"¤´¨%£-‰E"O–Ǿæ÷hwLžtb™FV€’1*ùpb%©ðÈ x ¢ðšL²ÉDs¼ýé)N)ä!XY“!´œÐÄý» }/1luȾU‡üeO.¾ÛÁáàÈðI­eLþ? ŸÎn?ÉŸùŽO‡· ö® øÔ“î­Ky÷¦ŒÙK­j"fY+{º±ìé¸l/aRÜU]H¦fj‹96sL®ÈQR9¹›‡cCÁYIÁ9øÙFf8¿Df&Á/~ånk,ƒ<í大Ü1ø#/Û ú~‘-Oºš!Mžh ý»&0‰ÁHÙR¨³á½].ùð¢\_vë¢ÐTQØÃ5‡FTÿ¹_x@$ßns_î…t0éÀ´³†ý{®×Œq׌†•Ÿ1óúKf>OeþåÎìŽW?akÛ°ò´AîI·;g[QÙû«Ûl$ëíaÐq°tK…Zé.mçØ§¯9coyÃãã0ú´utw0(hïÆC°°#´ãCñÐVh2<â› ›Ѷ*R’‡}ô… 3V~Oî`ôìW5zYü¿ íÉÒn¿ªô'ÞïZîa´¦ÞeÚó6b?ÐlfÚcL?? éö¢í´Ýå±aêïáŽÐ’‡F«¿>ü€½¬"“`‚g¸…œÀ&c#L¶ÇmÍt˜v7ÔÛ/6ïÁÿóS€Ê„¯x±)o²íúM{ÿ¦ƒ½S€ÑÞ¿)Àd›l{þv‰ âEa‡÷\'‰mäx‡÷\î_¡o£$²Jõ•é]PÛŠÒôW¦wi‡˜Ç7QDž}ª~v@•§¢8îm²ÆümYcŠÒøì"kìÏ%æøÇ…eÖëgY&¶qo“a|ì €¿ôwî9ÛÖ“e:¹Ê)»»_'‰¤ŒYú²¸±,vnrdEyŠ»´cæQ¶I‹ æQ-å Ñ¾@Güœn*z:.ÚÏïÃIdBs†ÜIfŸšƒ— “fN˜„ÍM_íõV¸ oE–d€lD2TŒ!´h‰ÁÑp-'õ0Õ¶ê ‚xOØæ¤AFÒHr5@Özwœ’"£EMåÄèBn Q=ÇñhP“{Žý¾å@œ·*1ûðäH†ÂYu˜“X¦o(Ú='0dŸ¨ÂOù‚‡8Lä¤;vœ ûbN ¤°,Ò&^íàýJò6èF×¢²'¹ÇPNœ\m*ÛR•£šÙCNÉÈšüê)ßqQ®Å߈¬yp`¸±ðé¨poÏ"E L2X,ŽT^pL"‹¹7œ$2…QI@ÊíÇJ|‡ÙBÚâ’ ŒI Èõ´©zZôý­<ª©F49 YýCƒ–ÉØ°¥‘†YÙSy›Mš²b8Œ|>µ¤–3 DÀ‹²pàÚ\o,{:(»IžÒ¨ê½Èg.Œ &ÑàFQ%Q&Õ¡Oȉ™9ôaßD==;¿]\OG¤†/ArhQ²ÿBöD¹xWœŒ°·¤k_ØžÐXÙh€d7$2ò~³wºø£77gGÿçücîÄ× ØÉO‹ŸÏŽnWßü(Æ<þãhÃÈx=ˆÒ éÉÔטL}ç˜H³‘¶¦ËHƒ2q¹¿••ÈPË#CVÕ¨EDå(F’³èPY ©ÿ±!¯Oû’Š=uPt³ïvØ »Ø€QՔŌjÒ§ž§MEOÇEÇœNó¯M2ÊòðÄIÛD42k¸¬U¬lÏaIBÍ[ÁÕ¸ãpE׊$:cô@n,{:(»³;@9È5–³Y [ÜP‹à7”\™éÕ3p뉷ú¦fðKÅžV±½"cf[‘qr%˜2„ÑøÅqµ![‚‰9“ÿZŒ#hŽç¿Û³Ý¾€"KÂðDžS˜šÐhæ= ‰ÀøJ5‰ig¬P\L`A+72úÇ>{NCxKÜoøÀb;ª1t÷$R(`ŒNÃ1å .#MaKêC‘bL ΀Ï_¤<ç]DŠ a¨ÄX¤ÈDi,Rš\Æ %Eçl,R5ŠH=)ª0ÑšìM¡öezT?ÝümU¤<ûÎP)Ek÷!®Žnßß;néqZ×ýüõÇëóߌáwˆW5wÞ¾¹½¾üÛâõÅåÅbù<¯[›»¬yi¤ñ××—/NÖ‰ÿÿòìbHýpÖîÎÏÚ_¯yE;9ºyß½†”Ý,"|™¹ñËŽ[–ÿ4›#R2…F5Y|öÇÙÔ’…4Æ)‚%{%&ƦLY6“Z•²@žÐ8—²þûl´3*“ÃàzÉåÉÙUûÓ"u²¸ýrµh'í¸|ÖöLe¦öç]úöc '†› E„ðнŒ„6p/kaLaìã ̉ˆÄyw÷ѹ(aì%8(Â]p"PdJLÆÔ8'îq>èHΉ ë-I6dšý8›#X6žÜÙWesÊaвN$JM¬Ô頻 M»6sm3¬+Yº§µ\X_„’ázAô$.åä…ÆI@s='U'Ç-“(C/Ò¤‚Ë&6ìIJƒ‰Í(±¤„k£éi¥jXâ µ’˜5å®ëö!b@"L²b¥§‚§ ÒÒb¤¨-&&òÚ·vˆõ´Ò·ERÒ»‚…¦I2dj 'wåBÄn©ÎK®ÿØuciPRXGר§ LÖ §L¢]OŽØ`$tŒ®¤-‘4_5Y„‚d¦Y* –2yXjœˆ¹§u3D9Q@¶žZEMƒúH)³—þY5Ö‰X¸ð¨­"§œsHÓv›0«cáv@¤nâÜQ#k3GHYrïÆŽŒ•*¢ÌܵQD@[:¦lꂈR-­€X¸ƒ„]Y¹Ž!±³c¥sŽ NÖ±@ÖjZN¨]$Ø%lM-7êjÜ…wŵdlðÞÜ·?å%Ô{Ó‡{‡FpB”xƒ©üjœ^BDzK^<_¼^ü¼h[?Ù¹¿ú<6šo?ÞÞÞ³™ÕL.©ÃžZz7°>zõj“iTHÒ'é 6T-Vn„W¿;qƶœçú Ø')Ï}ý-³äxß^äï`šƒ5‰<²o&v6’¢qµÈàN¸,þüäaÓ´LgIs~~,=+ÉË-–ŒéÇQ5ÔûnÃÉÔî1l¥¼—ë‰î.ÛƒØJøµ öî,‘ù^Xý7ä’g­a[¾ â”<0¾È<™†âpç‘„³Š÷1™,ˆ¾ã„¥q²8½©O½|}Xœü|¶øô«»Ñ¿=ºÛð\½[ÔW [žOëg™ñöòúdq½ÊÒúd-A9CÉ]Fqiõ.?oοytrùéÍŽ3ÿ~yÙî£8yfu“qvwñïõË&êÉåñÇ-fóhWŸïÕûx}] œ}Y´ŒÖ_P õ7”Ñk½þrOë&æìä¦0{ñ®o¢Ó®–Y=íöêS›WDýèüf1iÉš_µ6¹0r{ýq±^ícÛdOÔ«yó·o/?oÎÿtvÑÎÃ|ɬ¥ÀŠu#üJ‰¶ƒü•¬"kãí$¨2ÚËî‡ÅíÑÉÑíQ/§+ *ÀÁ*rxrúú?úýÍ9>~ýß—×ëmE)pôöòc;ÔõÝöÉñë²A?ºýÝÙ‡Vúo~~÷¿?8ÿá°Ï.KBG蛽^Ü\~¼>n—å÷··W¯¯Ú0]^¿kiÿûpV*þ×m» ÿ¡t2XJ–]Y¬ž6±b´¦Þ ´«ØR|zkº@×»Û‚ ÕOØXØäƒÔ%èVø£ÖK]_}© þ{„»÷ÀfÚ½#Z¼Iê@³ð¤€.>#H!¨3@Jε÷‰¶VpB[£D"R…äÎI‰šËµ'Ã긧ڜ%V¯M¹&“L`3‹Äî03MÌTНºïë!±‚ßÑR'—ÒFfƒE’!³óß9Hcçˆë¥ù‡“_çÌ'9ïO*úyÞ10U¥B¹áÒÉåäÆžåŽÆMK3p‘ò¬½´ N®ÎªYÆ@öF%y0d[¡ÝôP'eHû±ÐXÃs4*…¨ª•V²k¦š¡'õ#¸£A#9¡!€ÏÚ'F'k(É©¥´åd.ˬœs•´@ÀhSÉÌ3‡TFÈZE´ŒÚ8Õž…AצœU‰‘Dêd83HÙ£M*¥u¬M‰­˜-wµF¢ÌOFŸµÙlÚhîÄÙ´C©#Ô!X¬´%÷€e¤¼¢eli\º3'”eŠT6ª2ÖfR7šž ˜‘¥’2zhÉÜ”´öcÒ¦ÑaY­ô'ê'ÓìZ”ß“†»7QZrÖ¤I±¶«d­m/ Ibl%¼&¬1óöIQïD°—ÐÍ["ì[/ÇÇ›Â.u}D²ä`=<þæ šúU üÕÆ[“ÓÃ=#/þºõ¼ 3¯+êJs¨W’œB]Ä—4ŽXêGTuÈ"½ÎõU—¤ÜÅ ˜qÕœ6€Ë‚}§=©Úyrtí vvž)“6ÕÎ{Dgç¥1LÒé¹{§DÈXHþÙØ~±Œ/–ñÅ2înǯ^¡n0$./.·5Û$ûjxbƒ–6´´hé(<Ñ“8±1 ¶Èކ܍¤Œ…†RÒÕY¬p³5ª ŠcN¨Šà…fLî3\íÕÚ:m 5 {½FË9ÄK$3ºD}û%{zâð„Ð »”©£¬Ö %Éá@3ó” ¨©ï%3SÕgóÒ#Emdu •%G½ Œ¨™u–„Ì–” l±ì—=I,ß“WšD› /¿;a t,Œ„Uã®H’¢Ô‹~#˜p)üÍ}áo6³Aø›¡ð7cáo†ÂßÜþfƒð7„¿ c“¢¡NÝgË¥;žpxü¼.Õ¯Z×ýç¦~Úß_Õr¡Z®ÝD¸)ëJѬ§òÌ—¡StËJk4¥eÁ¥®‡[¡ra–M+ÍhIC¥,±^›sÎÐÕ&!È¥J*9Êx0ÄY_v#k#÷~äU°œÖJV Ö\1#¶NNƒ:Q'Úw'Ñ,™Ô”Ùb)ôQ(’Q€—za¤=­Öµ¤YŒî¨²T²°»æ¼ÓDXï¸ÛFKV€:DqÓ5 E±m/¥HXLK`p7Hb‚jó4yÖ5©x’PT^Yš ›DÊuðÕâ¤\ËöÔ•ýYµ&îÜ Uï¢"ÌZÓWèG«J=ühç@± «î³Éâ."šÙò·vGQŽƒ¦íÜg3åDÁC9¿¯ÖS•:e¾H¿:ÐkŒåa }N1 ’Ä!bE„Õ( }=Äj9,²¼FªUªßÚ3Íå|QþO­J•n¦8Ð6ìªÝŽØî@­æzIœ(x¿{ç2O§{{ZEó@"ˆº{ùëÿ#ÜFjRÀïÖNºÆ+°ÀÏTÿ’Q ¡´X›Ã&ý-Û fI¢Bðƒ YëbÛ)t[”Ù\—Mwš°¾!g“I¡ 1nЊr¨ôzÏòÑ»ñ8“ɇДkÆåzDú=çô`îžÁÈñÁ0ve  vë´Qé ¢ËÝóAt¹ìâžç€èr¿;ˆJ?çx¥c(cjx™Pÿ=šì‡|0ÅÎ ïìM\F.¸cG{*Š\ ÅÎöT¹ð^, 9Æ0R¡þ{.F˜vÂȾ˯Ÿ æ—ó4æw ؈+:aÏD‘ùãµzž¯ÌD‘¸gÄk·´Çˆ¼$ŒÄ¿ Œ¸ Œ³g§=†-»/Nž "¾ ˆÔ—@¤¡„Ï‘ú~G9ó‚gƒøZë˜jÇ7ºÏìPßÙh÷Xfº!w}O"Ê‘Fƒ5P)A’PâI#KAK‘`>iÈj*å»út;Ì—4.as»(TþÀ¦~O¿ Àx=µ!ç;ÒR›`ÞR˜PÜTµÍ‡:#Èã’Iñ=¨JŽ«ÊüSª"÷¨²T"Á±'ܮʶµTy§\°iÂ'&LÔ/Á¢(â ýW²ÐÝîÐÄpôI=ÄAY%xî£Ðlw³FnfóЦóéñµ×2ï¶,×`Ò6““"M—x]¦¥‚äEÕä‚·ÔlÁ¸4Á®îú®0Õõ]_˜ê¤Í´¹ù]ŸÛê~΃´˜dùì®? Ê<^½'ˆO`âÞ`ø£ˆûÃDÞ }Ä9°‡¢‡ÿ=òªNæbzü²ýÞIézŒô¢½2UVBàIX’ë®ìlÛi\B_Ìi0ò%ó¯ 銂¸p©€ÒPx¬=_¼áõ¼ x’pê¹^AT'¨jbÐ^Eäbæ‹ÇoHN„ôÛj‹j"„0 ^su ˜zvJêÂñàev™×|ã N¿Kp\‰Á¿fØQÊ/vÜ¿@Ü]~ãB9>>{uøò›œk¦&ÊéËCôJ›œkn\(ç¯Óù›œk¦qÊÅ[Hã·Ž¾bR•v·nôÍ—Hßr1÷PÆÁn¢ó`ªªãy€dR=[Æ8Ë#•×,Q=-ÖößÜÒ:ÇQ™% T•ž,<5kGªÉ«ÙøO°•ÅiÚSÏq7F{ùÅ}eKHN™ß²  çȧ¾ð¤û˜­×­‚[Ôõ>j”… } n¸ØX~¾²Ú-ò\ $ÁZlÕO Ì=®];s—ËЊûl©qÔñ´P `Õl^hÒ)¨Ó o‰ tbÓA“vçë™î›ó×í†ó,NËb¿À2NæáV‰ÙZ3ÉÈ ˜/>ÀÒV®z¦Ê ÊÀ8oM‘ýz³MFÿùôóîÀ; GÿÍò¯æ Z ãló©Úlå¢p¤ã2(?Æ3ð }KðŸ«YrëFK¸\ÏZÝÖ7÷ÞšŒÂY¬9”q’üªi~/s¶­ËP©µ¬jÓG8%ÁX%wýß´{õˆmÄl1Ÿe‘Ú:`Íj‡¬›6Þ”ñF ,¤u†Üù´CäZ_üv™‘ûazÒ,UU©ñµ»(óì«‚O‚Õ³­nÜjäÕUƒA£è“FMâŸà¡m*­ò$†Ÿ¯iQI!σu5ƒšÚþðhô׺PÊv˜ˆ5k¿fÈ’¦¤¾Fu½9:c· ²¬N c&dÏqaD-c)¶)þ€5j˜Œ)èeLauB ˆ±÷ïìÁ÷¦×>3¹ÛõðÛû¢íD`/ðÓ­ÎGgÿûƒãÁ5á2.E0¿!ƒSx|ë'›åUÁ3… ‹n…ëæ•#Ù.ì»gànuÆöN{gLþh0œ´ý‘ÅÀ|õØÐãEYZv®Lk[ÏFóPúô|ù®d^Êcùà|MÚ£}3–¹ 8¸€‰K1ÊÎH§ö¢6„âzž³Wº {Ž7hš‚tqu{?A•"I}êÞHޏ`’ ¹ˆcNÄdHb‚E½¤È“îÆÛ¾hÝ{5\Û åÑ3pê ö™L°S»Ûõã}ÞãÓË"ö-=å[]žüŸ®x1·ízÄöæþ‰YÖvÙØÿ}€#´p&ªÌÁÆÁ½‚/lÀ»#%o}¯P¥«[§x€Ÿ¿$ªH*ÑACarla-2.4.2/resources/16x16/window-close.svgz000066400000000000000000000051421420416754300206750ustar00rootroot00000000000000‹Ã^íZ_oÛ8ï§ð¹/ Ö’ø_¢›tq×b ìá·-î±P$ÚÑU– IŽí~úJ–DÙ´œ¤I÷pXA¬™!‡ó›r†Êõ»U:¹WE™äÙÍ»h:QY”ÇI¶¼™~úø“L'efq˜æ™º™fùôÇw¯®ÿæ8“÷… +O¶Iu7ù%ûRFáZMÞÜUÕzîyÛíÖMD7/–ÞÕÄq`dy¿|5™L@mVÎãèfz_oŠ´–‹#O¥j¥²ªô°‹½i/õâ‘VžÜ«(_­ò¬¬GfåkC¸ˆ´^Ì–ÖBXJé!â Sî³*Ü9á°FÛP‚ò€×K>Lj¾K‰³‹©¹¦v@ ¿Ý€–à–ù¦ˆÔF*7S•÷á㇎é 7®bcšüÞG²p¥Êu©ÒkéõømWw $¨ïT²¼«úç$¾™‚}¤~hÕÏ»B.mXíœ&‹ñbu¯ÒZ`vƒÉâ<º KXº÷©!/ï“Øû­È—ªª/ßí—*sÊûÌ«î T4Ü^U0Yy2‘¶òf'ÀK'JóR¹ þu¸Ä|S­7Õgµ«TÖ¬ 2ЪÙõ8wU7Ú­ó¢rIª…Þ] ['ÀWäð%*ëö`DÞ¦ª]²7XÜ:[Z§ÞÅk ‰¬Ì}Ë|ÜëX-J-ÕøJ?±š,ˆ5?aœ@†5BØÃˆ‡10ª¬òu+{ €LÍ'_,Jq‚ ZYíSÕH;QžæÅüõb ‚ÞÖ¤¢/©ösüv:ñ.i£Y´áqm‚j»ö†f£Ô‚s§*åaº ÷e·‚:“çw…‚çµÏ1¸}Ò±—â§,©`‹Ù@ ü®Óô_dC¯ ßL) \LëݰÇ:Q‘`Ì{ꎀ,® ï÷²@ |×ç’qÚCòÐñ)ÁçBÄ≠²zb<~Zçƒ.z>Dî÷ñø1´ñ'†È JÂgè(±øtÝè¡(.r9‘@Êš¶.O%ÛÒÆ÷[¬³yÖÍžæ•6¡>aVÂñ¹º™®ÂªHvoÐ Ï,Pûx°ìj/­i¥Š÷2z‰Íh üêçpS–I˜ý#݆I—&Ô¦ÄÔ}VmÓÏŽ²c8·nK £šÅ|«1>Åþ CÜ @<þ¨E \ž³èù[κ?;Ÿ$Oj998ŽÊç¥à®œ «'ФKpÀ YÝrWH`|±å|¹~›P‰žbüwì·_ÐxiÄéÿñue5r GWo£µ§K™@iPƒv_¡ÅÐ8@ÊgC0*j´)%›U Àt0Å®¤0xX¤2î")x0L$Cúñ¬/0Fñ ¾ÏJMÃJ½!ðŸ9\Ô_B‡±›í0u&Æ^£‘“pS_1ή 4ðÿ¼$¤ÿÏì@Z{˜>«ñºƒ5ªã{öD;0òìá}G{0ˆ»„#ôÆ/¬² «l¢â!©îB‘@™_¹÷ñ|%ă}Á´>õg“ˆsIf„—Q_â«— ³ú6h4ÌØsnw[ífs¤ÃÃ"šjÀFÊ£*Aç9å¾Y<4ýºOu¨qúäªb¼@ÕÇ!0•d¼ê£Ò³×± òA@ _2„䓳štíé·Mõ·îœ~ß'jûª›M¿Ü;(X‡KU÷5ÙMcs`ÜæE¬Š–%êÏ€uh}úׇ†½zÖŽìüò.Œó-ÔîÇ̯y¾Ò³2Ìî6‡˾6‚I~N¸ P.Âçø˜çÑF¿Ùv6M®w'Ã7E¡Òp¯ÀîúÏÉ4Û$ƒ•;í{ZD؉öÕ­è ¾c °…ósL0…´ûgy—o—…v^UlZçi‚~ƒœdK˜ˆuæôý1]­ÖVß_wе€³Î“L£c(ªµo`ðÜÓ<çö6ßøMp^¯TÆaö¡×RÚ.ðºˆóø©Ë¥(šÿ'/¾ôá¯ÂÛ|8v§_²Fs½9†Õ»dѤßAÿ°[¥c \íתŸ´™¶PÍ+}ëAÄÑ*у¼ß«$MÑJÌï°Ð6 ;®½ÖÊúiyVÞªôfú«Ž­ÉIp-‹|³^å±:Dß´Çîë°ºk ê’]/v™"êöÆq?‚ˆá¤”íç-ìéüu]ë¡úÁ¸q*«"ÿ¢:nóØ„>Ì…©Ï`† Ÿë  OA0gÆd±Iü/× («"MàÏœµ´8„Ý¡(Âý<Ë3eR›;š9s1G懊Vª_{³/ÎÁ§o^÷ÑÕ`;×(B7Ú— ”zŸÁÜx+×stb¢Sz¡G c?d€ÞN°ž|FÐäïàÍàw‚&~ô5·•ÑøÚÍTY %…CP'ÀO÷ĹëSðÔŒÃìœ3BŒº(JŠ(UÖuS 4ÚP]#‰JÊô>DÊqdÖÑWûè´tº: Ç3e£^O…@e\jÙµ­Q›x:TGFƒ åþL>'T2Jm†%â>ÓEj÷µç ßY-ª .¤!gô¬¬Š°O$÷(‚ª†H"µ¢îkÏgÒý˜Z‘ä" Wã è$Žà²cjÇè£oŸ¶$ÇÞ¶&° W°Kqy.ŽqÆ3Qš¬½o@ ¯W¦ŸƒGŽ…òh 8ÖH9(܇¶šXýçûâ;û¯?G‚æÜ¨7hû¡aOjt5™DÏnvõq!x}ãˆ؀~ ‹Éû c.…”—&•øÐCçgÐc¥0›â’qŒgЗó@’Ãh蕱$œò§0¡˜0áê–±  cÒÐÝÓÞOê"A@“A•îú¡ÆŒù.tëÐ¥›º¡lv%#@íW@GçC÷N klvµä::?,M‰¥8ÉLì’ Úæþ›c%‚¾D qàCŽ€”]õ é}#H2(çteÕsd~}`¿=ÚRª~,6©š«{óÅ£I†‚£$cÏT˜%œ~Que˜t¨r‚æBqÅK]"ú“_ ª¾Bí¨ˆŒS¥u+•›Úˆ¥f`Vm̺²~+ÕnqOýj€ÕÖ¢ ÿÓîéU_û©¨¢„’¿¼ò4¯˜YÙ¾÷}hbšçÔ %¡q´lOøs­[áw¯þl‘dŠ[0Carla-2.4.2/resources/16x16/zoom-fit-best.svgz000066400000000000000000000143201420416754300207600ustar00rootroot00000000000000‹Ý]msÛ8’þ¼ó+tž/“Z B7ožd¶g25U™Û­Í¾Ý§”,QŽvlÉ'ɱ“_ݤDˆ¦iJ²”MŽœŒ‰F£ÑxÐÝ(‚|þ§»«ËÎÇl¾˜Ì¦/N@é“N6ÎF“éÅ‹“¿ÿíM/œtËÁt4¸œM³'ÓÙÉŸ~úîùõz_²i6,góÓÎËÑì<ëüzyy³X椠ÒJw;ïþñKçç»ëÙ|ÙùËåÍEï×iGåÄužvœÒºóêfr9êX Ï:^«X|¼ø®Óé°~ÓÅétñâäÃry}ÚïOj Õ©áìªÿnð1{3›ÿ3;ï³îý“Tbòp\Ó Eû «åFòàõÍüRÍæýѰŸ]fWÙt¹àj`“}˜Ø‡ól°œ|̸š«Ùt!%¹îï7˜ç£qÉ}{{«nMÎ1ƾÆ>b9z‹OÓåà®W-Êh»»»ë†K®ƒýC¿lÑídù¡hÑõôâAáw£k¶:²f~Zgþô|”k»kÐBe3Îó_æƒÑ„Wò?á‹“hFSô 'ƒ/“Ÿ€MF¯²@8óË‹•€¿O'Kv°FøtûŸ§ viŽÕʹ˜°ášœ‰kŽËFÀYiñó«Áü÷l^‘ÅH ö—óùì~˦EsXv6e¨7ËYN˜gãÿwÕëÔ¿RªV¾ìˆu€9]Å—Ù,¯ËÂR”“”1ÖŸ$¦üÖ‘±“ÿuÞv,_õl~ÙTvƒœSKÖÏ*f·¼ìÍo.³SŽ-ÓÙhÄf5Ÿýž%+Ë“½SL‚yuÉÌl>—·ƒO‹†ùž0l«yÙÓ»µK¤^2'ádÁ2wÙC´¾/ê¢óÖ×çr1¸ÜŽ|½xúažñúöûª,ƒÚ—UÅ"†íæ×‰ãoÉx¯ËùäîPš-uµœ Ði .‚²Q.z•áY.gÈHQi€è¡ °Ñ1‹'£}á¶ãϸÆ3—•¨GrMƒýÔMÑ`›‰œS$ìh",˜ÚM$£Ñpï‰n±–ì¶”~‚…$Xš æÉ¢•lÌ-¤L (íÛQ=bÈzø¬\øQT`N«Bo•m ¤e#* ä ÜàÙÚ" {ò(v©OS§p)_³ˆÆnçGÍ¢:ýѱf;‰Ö?Û^´f{D$» ´±d\·'WàœéJž³ÚwUÖkkº=1B  ã Šb°KëÑ*XMÑ•æÃLÞ GSš*ã¬Gw0í“…´ôÑ.…Çö€‚VÎǃÿÑ1ÇÇXˆ…èÓ˜$hwTÐQ³Ix¯¬ÿƃhd"èÛMdÉÙ"ê¢ãñMm³‰øc­LζB툺N+Ð9†…F[W5C Ò`$¨XˆÉ`¼2^‡JƒqÊ{ .úµÁ½Õ¤íöcÐ><ê<Ú¨cðˆ£N{‹µÙÇE´rÁ5èZ}Åä°O­¾bôѧðP³¯b‚ùɺWÀ‘Ëz¦keå¦}ÌzÔE¥)Ít”Á Ñ0yeë“ãRÎ{gbé8^‘Cô® Œk<ãÏ<÷--D÷ “mCãäÅð ÖY2ÑÑJÜ‘+çPHÁFg¨ `•ä‘ AEC>¦É €2èL ròb½2ÁÄ˹ ¢h¬‚7yÚãLâá8£Þ>ÎÄwõ%õ‹!3µ/Å•ŽQwRÓÑ5Å2íuMŒÕdÀ?Ó†#n.µ µ*"X&Ø“–&o_n’Ïch}Ô¸¤mhŒKîéÓ<«ÐyC QÇ*mÁˆÞG*–(ŒòÞB·çœ²&ذ‘œrÞ: eDŠVyѧˆN!xc) 夀lD$OŽô÷l|ØÅÐé\,MóÛ]¬½\Ý7NjÊ%ߪeÕ ßÛ}U¯KßÁä5_ÞäÑÆGLÞbeCÁÊ:—\ !rË]DåWßô¨"ɲ#3jL¶VyôÚûÒÖmP:D ʸÆ3®ñÌó…‰Înoëhý‘î­Ùx¬{kîè+a¥Ù^q÷ 8p]¾ˆ@l ¼ÎI À ŽÄ—Áç´ÊÚ ƒ!éjoMZjåÖ«šÏx“'­sH»v¹ó¡Å^Î/ùñŸZ—¶,Šó¥ùÎruëŠ8Úm82ÓåT Ãæ<ÎtúÞO¶@p.È£-¨?†Ây2ýi\à ‡µ5aíñ–fÉØ ùöÃd™ÕN@ ¹_€6:ß äÅ–f|Rã¿~{ûëë÷ø~Kˆî †s é” fI»Fƒ{óæç—:ÏM8` ¢ÔÈF1gg÷ÅP "ûï·ø¾i…h"ìi$eÈ$\A#È—Ø™«ZW‰ÓùÊæÍýH;Ì.í°M0탳í9}(íáíí´OO¦g¥;>¢»ßEw·¡;%݃ÒZcRÞIZ<+Í]ö×Þ¿oš±Ð63–4Õ˜&€Êh*'˜`¢²6Ø©QÙXå¸z”çaÙäbúçó³‚9Oö¿7“y6úyý@ïb÷Gà×Á”ëו窫OU—­­(QŒiÏ'§×ã¿fãV¹ ï'©æ÷ÌX”é¯ IËú©Lùî˜AÐxýmGÕÔüvê¨Oßj\åÝÑëÔTûpà¹ÚѱI{‚°‹÷<©€Úk¿ÑZ¡lJ‚„˜!1}Ù¦Åo³ii¥Ó¼ òf£óÊCô”<Ç« ¹O…)F+"€`›îcl<÷¨Èk—õäñÇ/×Ç‚ƒÿ¢}œæ<‡ïãŠ\É ®œÝ SÑÒæÇ€Òdµ-´×xÆ5ž¹ü]kÚû²}èöEFä>~þ¼FÔÖ{ìzå¬Fo»ÀÀø ý³ö^8z$Îú#Db™cUkj¬Ÿâ×·jXà w‘dÖîBãéça¼>Ý)kDÚÓ.n/Ó˜f=¥»×2™bAAðöøöꉎ`¯_¬<¹cwÂÑ™Î:ÄC>x4ë‡Úb>±•qà5B8Ã'=Ûm½zäÛÒü-Bfû ð°¿ï̓ÃjUn´¨KÝŒV4k‘ÆQRÞj ‚2®ñŒk<Ü ÔÊ@Ûb æPü¾ã@‹yôÀ*ë£ [ ˜Çî|Äo²óÛ1įة¤ |ó3Ý;Ýn V!ȱ ÑÑ$J©(ÆXFjW”ãßÅ#Þ=¾Qz<šQBa”d¿Ú‘ÑÛCT”õÜ^‡w.³ùVûÓ Vƒ'\.ûep³XLÓW—7R¾M‚L¨G¯³“ÁrýjÉmü4]jL®c¿¨ù¨]AšÜºBË{tÈc 0Í› cšCEÁ;L›“È+Cðé4(g}t1Ý Á¨E·×"·GgT¤è‚€XÖÙEŒ›£—B„X*ߣdÕ±labÚ÷'vƒ1´oáñÍWuÒͯ¢¥·ˆx£È¡ 6Åk¯$ !µK+CÎCû3¼†2@9"t!*O>8Ó5 n¶7BˆÚ·"dÐìPT¢vi§7VM œÕzèu(]£Ì TÖF“ïœÐÊ™Ðw{à¢Bº|ÁÂ]ŒOB‡ÚÑÚ´Ê.Ù‰b-PÚO‡)FõhÚ《ùÑÕû£`¬5íw6cüZl$YˆN–‘¬%7 ÜÊZ ‚y:°|1&‚C²¡K ›¶kPiœÆ§ Dñ˜1Æ`‚†”1Ú ¦qÅr5ºä?•@j Öap98˜oè#kå0ƒô$<ü£÷Ž*¾pú )Á&XbÌy‚-Q!Tƒ3´×°ÔeœsráUÕ= #ÛsÈÀ¾YŠJ;0´y£òžœK^Ž”s±´œÄÓ‚s³6Ĭ‡+˜Àh€hº=§ Wì¢g{eµ±æi8µÆfOˆ»âtè‘å@#^# @Ç¡¾ýŒÖБbð·?† :‡ÃÛ÷Öš¦½µvû 9C?ü¶¹È†§í­…§¿Ñ¡  ãìM7àŽ¶ßÂñàÐÇ‚í¿óÚâƒþÀ´½?œŸn÷ jq‡Øyƒš5Ú…G줰ã›<¡ÛN$ÂÉæ°[÷÷·MEh£×>žÔt´[Ôr¶wYˆèÔ«ðeµ¬X“4Bd1ÍPe9·Ý_HÛGâÑXΚèýÃÄØ]tt!Û5º iØæE CÞý³›;ˆhóô`Û>Gn È[ý¶x”Ál±.Á Om}sà'ØÈ@3N±§ƒ®.ëk×úú¶¾®­“Œ‘ŒàElÇè‰÷%ê÷9ê7Cšî˜ˆ1áÛ'CØçÅeq‡}çÂx„[WÁwûà: ¡Îèžh‘¼å±ëï‘4„v‡wT·½ïºýݘíoÜn=çÁr±Éü½¦'›oõ(Jºs×Jc°1ÝHÐ è͛˷ >”s>›²yYTÈù4ƒ{ÛåGž!ú¬Éãü(;^>ÜRU^>Â-RÖ"Bí±wù½óèÝËbMÈ)ôº¨¶%—%MfqY¤pOàÍ|Ζջ”OíT¿¸³ø0»Øä·›,‘âE"&YyNC³Êݘ\‰ ä€¿pêÍ|võ—y¦É½Ë–ËÉôbí¿ÅTæî“Y‘Š)‹Õ×wÒ§M’|©‡å÷iŸ6ië^Ò|ŒÇ+bvuý }ÃÄ0±nP)QW•­LµüÌPBPŽÕ›å ZáJu'âO·\eËÁh°¬h6ùGgä›Mã[¾*./'Ãl!©”¬ìòèêßMªV)/ùëk&pž šô„²žJ­ïòïC½’o(-öªò|Æîwõ6/ÿœwifUÍìz9¹š|ÎãùÊTRS—ƒùE¶\“E^•"m)Ôàà._»°*ùï_Š„ ¹’µAÍI´½°{°×¥, éÔñàrå×\b™­ÌçM~äôéì·”“øÙeXÄå`˜¤äZÊU=˜,ÄÔÐ}Ú.:o,Zøÿ„›­Dò Oy>OÿúúÍOχÃÓÎæ¿î(ÔÁùì†Á¯L OÇE}“+ŽçòMµ?òGÀž÷S†ðHˆâ⥀yV|&í¡/ËñW)зä­ñ¿ŠÜÂíWzðU©Zíå?}÷ÝCOW2Lé¹Éždlhð;láÒÚÿººñÊq«¢4Xh’Á™«’B³$nL“$Î:{*’P7KŠŽš$…øòÍ™©JÂFI`¬o’ôÊœ½¾§5Kò¦QÒkúŽUI͈£Ž±IÒÏgoð­J Í’ÈØÆíw Ó›ªÝ,É#6Jʪ$\}¬êmŽvsŒxhϰÆZë«-ñ&÷9ç€l³-†—á¬"`-¯¡ï1:BsÿËY•è›{Í8ÓÜÿrV%ÅCõ¿…FIÖÀ.:YÓ()5ûÉ«NÖ6H‚F!ÀnkªB|“a?ú²­øþ ¼Ã¤ÅÖÛ{Íᮉ»XSB•¯n‹è÷G{;ÊÓ‰ÆÃ~ÀÀû#½wåɰx·+,éc—IHØ|´Z»ùꚃ–Ö%…ŸC¬J²Í’œo ¤/_½<{yO’dD¾IÒ™=sgT•ôÈ0`'A¯ø¬÷’ŒlîrV%5#NðÈÐåùtUI͈[çc£¤×rV%5!;øXŒ îQ~Û.Ý€˜2Y«° WG.jùàg¹À9çW»‡µ±Èt{QEŒ1|i”A°†ðÙ¦¶éó ¬vâòù»òË’Øø=°Xfžò‚ê‡ïÓŽ7–¸þüšnì¼å?¬‘຀Àé@ <æ‰3Ix]$‚ãK®?DIÚàò$q9€ WÝà%ƒË2A8…€œäK'âÖ—à1/EBÏeÄ¢–tÁïÀœ‘ÅèÕavÞ{ÜžT„ÈG´ŠÀ8i¢BTÚEí¥7Œ²Ñ­H!ú¢O7HBpÆvï`½¬Ò§) §d§(RÞàµ!–#´à¢Ð ¡Ð¼Ò¡ËŘ*“Bx»"5hž¨ÕŽ4]êÈ g#U-REg-x<”e2kd\HP¡6&v@GÅJ ŸäÀ=É‚«zo$?7˜”±\%Ñ>.|Koó§Ô_ÕÏmêÔ÷ÿn88¥åÀn`8R PsÚ{Ám>“´×eÚÁ:OAô…bƒ[QÊ`EW¹²«@˜…Pt×mEîê²ìªªN’úÜ©Ú*|v¯c+¡Àùà‘½—[!I0‘(Jò+Üœ"ÒÁTi«ýá¹–(SÏîQ­Ó`…F« %Wµƒ ã ¼`4#ãs¬¼à!èåψ 2ÅUÈó+)PØšpDÚ±°z¿Ý a£á÷5:»OˆZÙ®Ìl'2U ‹`bdÆ{ú×a¬DZÁ(è© EÚûÕV“-¸¬cWÿ‚—ð PŧÆwühöõÝš  ò¯Ò§ç7Ëå&íß³Éôôj¶¢>4ÔÖ]#£Lqq†hVk Õ‚@säÙÕVáîmÊ—þsJkÚhÀOYÌçƒOEÍ­·Ô5Q“QÑ*¢«QC@Š] Ê q!s`9^§´3©à/4úªT£@‡@RÞR-YÖYë³ýä§±"šŒ¶ ò ,i]r ×MJÔè”uш¾N±¦hQ¨QŸv[4Úõ¶Øì]ßû(gcDÜçl>û" (îÓœêG\ ]Wf½ò—\nÐë¿%dVÿ[Ç`óž å_Òb+¨´CË ¥  eRÁšÜaž —Á¶Í“CÈ/Þ?ýbWª5ŽCarla-2.4.2/resources/16x16/zoom-in.svgz000066400000000000000000000276231420416754300176630ustar00rootroot00000000000000‹SÃ^í}i“ãÆ±àwý îø‹K ë>F3za[OGXñ6|ľý¤`“à Wìf/ÉžC¿~3 P 'Á¾¦›¶†,êÈÊÊÊÌÊãÝ|¹ÙÎ>%ûÃfwûþ É›Yr»Ü­6·Þ¿ù÷¿~ŽÌ›ÙḸ]-¶»Ûäý›ÛÝ›ÿøñ»wÿ#ŠfÙ'‹c²š}Þ?ÎþvûÛa¹¸Kfüx<Þ½½ºúüùs¼É ãÝþÃÕ÷³(úñ»ïÞ>}øn6›A¿·‡·›÷o²ú·‡x±Ú]'ñrwsõ'üö·íöþpÜ/Ž»ý%1¹zS¼·Zæ/ÞÝï·®ƒÕò*Ù&7ÉíñpEcêW_Õ—8êͧº¹ÙA§øæíá^åýjׯY|段Ö^vÅX5¢Ã×ÛãâKT~æz•B®àYQ³_­·_¶ÂÆÁ¸§~ï°lwðÿü…SA|ØÝï—ÉÞLâÛäxõÓ¿~ÊF$^W^3§U+õ[ZÊÛÅMr¸[,“Ãթܽÿy³:~,bÆýü˜l>|<¿7«÷o`~\ô÷iosü#1giÕ¬Yÿ‘01í­VÄU)!m©¹Õn‰#|ÿæ÷Ýî&ÚÝcèõ÷r»Pzwü5ùrLnÓf`bÞ,Ýc÷^\šbÞ@òån·?FëÍ6I;»ú¸»I®î6·0íý¾,W»/_?$·Ñf ˜vïm×Ûäj±Ü³ú%9~ÜáŠ%kR û4K7%ì£2æ\I!Jاm,–—°àÉ•}TÐHz ÐXÛ4Ú.J¡X¨™¦ þ¸HcbÉÚ¢2CéÿäÛIYc”©‚F Øéò’ ©óh¦#æ2&æÉ„#æÅ¯ˆYL¼†oÐ.mùd¬ÓgLxKZ¦Ë°ä@ Ë*¤IÄDbðü÷/ÿÛO¿Ú_#5pê8T g»àp•‡J‹òP‚ !¥µ¥¡BPÄš&0ÄÍø4¹ÄO W˜³¶,’Íੜê,êè2Y¯IÒ‹þ‡[¡t¿ŽIDÛ;^,× Û«c@"ª”wF5·£O\:IûÀWxðÆóÖö£et(žH íPK?JB·ö#¤eŒN‡L|#ÉTÌ`æQ’wÌó‰#$g¦\ŽŠ=”rú§\ÞÔTûZSÚ¸µã^ñõ²×¸ƒP¢Œôàhikø*%G­‰hGÆëÅZ®+Ä ˜ ðÙ½úWáý"¥b@ºÚû7üZ&×Õþ…D£¥ÿàÆÒ륪¶b§0L›ÞèBÙî:Ø|"ä Ͱf¦ŸzöÖ×1Ó Æõf{Lö§w]¯ÑæŠîvÛ*ö£´š‡üõÏo:}†¡ ¯“¿.î‡ÍâöÏÛû½7è®>«Ÿ’O7,Do¥4]™z¹èÝx@H‡4¹Z\pñèáTãÀ¡D2j9'W A GòðIÐKà‹‰±\PÓŽNXa:år;%¿FEëXÒB’ò¢ozbC’¤¬pG64-= ýÙý…„Gµ°}1)}åŸL'šj"(ÈéÅYÁ£ÞÊ«g#j4ÆûpøSí°kØÏÇÔ!£NqíA-.rÀP§Q¬ã€Ñª‰"<5dš¼ ÛAYãä§ãÐ8}8¹ˆÓ‡”‹8픋¦¿&å–r8Ëy äån´ÑC•'ÍÚus¢4Úi׋_Ó±áŠÂ7ŽÌ %ÐòM©E¦(ù P¤ Iæé\Öµzë`½½SËk üt÷ iëÁ¬i:È>4$#QÒW÷<‰ðºó u¤#Ñ“ÃO˜3en,Ž‹wBÌX £# ¶ÄObÃv·ÁOµ…Й-NFW¹Çtp3Q‹MW“G¬+ÐŒs­e‡~ux-^Ÿ®¥)B]K˜°¶]žÐ¤®UëÓ5 gÒatô¸L–×Ëë¦nÀÏåvs÷¿Ç>fžÊ±p²8ñO´/ŸØ×^>R8 ·ù&ÂA‚ÞofTÇNÒ§s3C} Hîz4l&u,çd¶œÑXi¼'„<¦Ô‚2‡CÚif"¶ó*Ìþ23&¶†hÅç”èXFÔÌÚØ ׂ¤ µr†Ë$bnlÌ<åPfcÅ­šƒ@¡œÎ`s#bìXóô‹åìïé×Ùïd¿K!(+»57e¼Ý­’ã×»¹\.øßBAQoo¢¯´¼ßZï÷ nõbYO‹2à0ÇA.(Fb•³é 7>ëÉr]#k“‘eË™î‚Ô ŠË@ÉrZ“‹@©8À8ø+aKzò !©‰€æw¡¼ŒD4|4w‹IçÔY\ˆÀO.D¤ ã¬!­B6Šwï7˜*‹lºÓèbÕZ®åÀóøÎIÛ,à(ʦ3¢™`†(ø‘˜pi´á¢,ÑP û‹ù¬J5‚ÅJÂf* 5õªëPUk8ì=˜oÀ<=PÞP>ÔTÍÙÂÒØZ sÂØ—,>QìR^9‘óD”'È‹¤‘~úg® é« y4MÈ£éAž€„c=uÌÙæ~¿ýc•E3–_¡80ƒýî·vámR£>”¹M˜5 h ™‹X(É E,ÖV ;W@å­•lɘA¼©TLb %FŠ9Ç·ˆ™E(·”bg’+h1‹0ãjÅ¡¦†Î%;J¥ºG•4jN%ŒDHkgEcl/ÙO9™3\é9‹…Âå†8…íp£ŒžE&f„h“0ôº"H8ÚæÃ Î…V3 ®F6 (ãÌÆTP«çÐüFš§cèâ;*.ŒË“@Š9•hÁŽu´@yùº €10˜¾J«b«Y­@9D;aÝÊBPQì ²ü–ÐN§ ŸH=ÿÐÊù‡R͇Ùàǹß)ÝÇølŸ+žðUPýÊ(àh©íÞyMÖQ\µs˜qæÃÜnX ĈøvóhÞay¬žË Ú€ Ãõ­›Ø‡–ƒóe¤9I¥Ù¯Ï/)Ñ¿[£©TêûZ‹íhäZxx"y<šÏnlvä‚Ú÷{nòByõIIî`Šz3YƒØ´0ã䤴ÚWkúÓúm`{BÝ "ªa3k s?íÕëLÓ›;×-`ðØ.»Ìq`:—¤ì+¨ëL¹€Á`FÖ}fëÛ:Ê´LsÊÄ\L°m5}¶-ÞšxºÀî›×¸Kö‡;¨²ù”œÞÎy<ÿß¿)Wå«z/Ÿî~¢I2{;Sÿ !P Î÷¸:$Xç÷÷o4im(F´Ûo>lna-]EQ­Ž¼P17.ØùŽ¡P fˆ]²¢f½b£C-ØavÉ ±$IÅK8Ò‚iÝ›Ž³ÒnÓødÂýhñ8Y=»ø/'/àqë¦-¡STOÍŒr»øo­c!¹F¾fŠí‡PèÃ…pÀæ<0cΪ° ?Šþ§Àó–á‡êø3²>‚„÷ðÿDkÂàŸGN sRNZq¥S° ¾Z-° L),PyZ%ý78Q•*“R%b¥lëu› 5Aî”Æ&Ñ)våÈÖñy¤Ý¦ BMQ¨Qv€ê>a• ÐðM}ÔHýü»ú°ÁJ;‡uÎm}ôäîëN?u$ôÕƒ†ZaJ«‰îÒÛ¥¡Û |·±L›.šâ§¯!xŸ^ °ÃÉ–ÇäMc¼Zãgdô(&Äd·Žô÷µ€‰‰Îì¹%$ žyíÈ`—v¹¡ÁuæÐƒéÃrµ\­š{;×̲Ñ¥¦òo;/¯C#ìÁ`¼°µª?¦3ÀôÔ¼ÇØp\Œ¬ñ>9´54l =Vªá¬åžéœ³1ì!'ÍH(cêRBË:s =†÷\=/OywÇÓG/bñ ˜ÅRZN ›+¼œ54åím 'å•8rÅ2!g¬ Þ§R çUrºSa/‡ ѲŒÓ¹CTE#KÜ™ ôh…?9ç „ £+CϘ ¥i †TÇLéíô,ÖPX^%È€ƒ£]”U}QHZÑ‚QS©YYÎðÖ $›²³#·8]Z™X½îèE:â×íâ˜ü‘ÒT`¶sòý%V–¡àLëlI2,³6È·aY¸$7_KR~ SÕ£çkS4/a-MI£sQÊHI;0'´£ì©s ëòša-aªJ|¼#74Ræ7{¤t09\ެùM29=NæÁ8ûŸ —:ñïð sº-ƒê¢—kÄ£uyÁÚ­ZVQÚë¶ êù¬Ý×#aó,4”"\{Õþ 8 â±_οÄ3¦j]–™ÄÓ$R>yîcT-¬¾ % ~£ölHäô-YÁ9ÁICðb{ª“œS £>£î|Ëa×”)ŒÌ¤0šYÌÂï'óÌdãLRâX@4õÕ–›’á"Z ÊÊ!'8z!*Êv‹œÄ„4jò—£^w¬[‡¢•ÞÞB|¨QjˆÕγC'%/ŽNÏžàŒl¼Fœk²©·F8îï‘”)-¶õJc  ÿ¦óç¼}ÑëåæºëÆ*ÉŽ »ŸþÏ?‘p<¡Î+Blžw5ÿ—¿›i7ðX°–­§Å ­sæóˆ ,Í”ô±%Rk6×(ö3-çäZmˆ.ñ$&qŠz«éxv…$^& äI˜BIÕ?¯–ÁºË`Ýú1C¥5ýˆ¯´JO²[ÑrÚ0ߘÞQ)j@¤VU#fÖ*#µÒJ‰¬} —´º—½ãž>fìüÛun±Àx—*‰¤Ïe9}7‰… ´r·Àt¬©õOOGÙcƒ¿Êuõªç¬—ÓÈ‹ÅA{š¬N1Osþ½ä˜ÉæÿðgN~c׬ŠK>tNIgÊeéš–w³`Ã[µ>tª9¢k%ì±.Õ"#—'Ÿ3ÃVž›Ò‰f˜Æk.OQ•Ë.8Ç_„Üþ×õÿ…Ç~§¥ÅLò,ÂyÉ)Íp­òì“ÿw¿Ù'«ÿ<åù= J8Ë›·wÖÿHÖO_ƒkè×Mñþ¯PÝòëOí ”ÁJF¡Zùü§ b1§‡åš®'yŽ0n[WíÙ#0ÁÖ%|§L±£‡L–¶MvÐò¨"ãÀxÕ5£nZÕõÓ8’ ÈpÅ‘ÌùPZüw1c'9’M¯Û“ É}Ý;ðš!ú5èj{ѧ#$¾Poݧv[ÀrWLM`…ªQÕÀ á, ½¢C–ÿŽW‚Ñ‹³ÂšIëTZ銴žÃäf±ÿ-Ù篥@Ý}JöëíîóÛO›Ãæz[Æî?í÷»Ïôï‡ãbÌBÿ·Ózú%ÿ§\¨ÂÝwõ©Àª-«µŸãI9½Ð±ØÏðö6AuÙ÷3Ï ‚Å%ÿ‡RB¢h¿MÞ&Ÿ’ÛÝjuÊ:T þŒœYæ[ wÇREn@ìD¿Ì`’@BÈìï3 ß"é¾Féòâ´ôTõ÷Yå wÙu0^i­i¿CÖé‡ÐB%·« .¶>h‘ö»£[!CnÁ~¸ÜŠIzÖŠìŸÞYÿº³˜¿Pê9n+E¦^¤_.¼H¿ ]$QÚMä9®’“¿_.Jü~FüD#ñ»àr]’ôé¦õÂR©€" g"–AÉ]ú³Sát3½9ª¾Œ¹ z¨ÙuÅV»fÊ0h/ÌÞϳy rò=̪EëÑ“‘ç–ÿÙ3Ó.µ>RË€šú½Ó?Ký>"r÷“Êpõ0³ÌR¿‡m­Ûz™,Ç^¾×<Ç£òGþ6zZ™Ž£n c—ëøÙg;ŽZ¬ñ½š+rÔÏR¥7fõŠ@ò³ G½2:"±”PµÿEkx‡sf.äˆõ¹Èá2œ¤ïæCnãã.š9Rƒ:>7'rÔé&×béòì³"÷ÛÆ.šþ“6ØKÍ‹X>dÃcLÔèÂ{‰ÜÈmª“ dGŽÎ0äyIù‘ûmDÌPõÈÍ׃Cyé9’=¿#Ò Ê·’'9êeo‹Y¾¢K¸mdçP—ÕæJc¿sV®äYZwL˜ÜÀ#_>ersþì’&GÃŒmÏN›M÷YÃÊŒ6 p‚<7urÔ’5¿5â³MŸ<æîéò ”ûð>l”¡Àç$QîíGO£< 0U˜p] ˜æ)“ñæ£ÿé”ÛèÆ%*Gz$¬ÎÌúµæ}“œFuåÄkÆÁ`æ·ˆµƒÒ‡õ¹ |áy0«*§:ATDeô5¹rIì €LpïÂë\ üf,w$rB ùM$Yn=r0Ír440âùÊ»g“h¹ƒ*  îùÍ2ì¦[žb¾`ö§Çy-¹'ðN}®^ŠxLìÃ[ÒhVäÛH»ÜÎ|32å¡ò ¤^ööjðÆÊDC£ý¿¦_.o¦žé—ûݹ8Ïç!a&ÂÖaÏ'sÔêà5#jAóL#ò< !—MÂÜdú÷š†yX樆ÒA”Ï©0s“­Æ+éñ $¢Öli/,³Ç[Nº?šgþ8)™›¬jN©U¢ó£º<™eUZô³æË Œw³‰áé†Ê%gŽ:“ל™ž9ê0~9 š=­Òùé2¬É3OÒÜ“eÁlHQÀXøù§ÅDÍ=­ _S5ç ãM|Ë7ƒ7˜®¹ŸÒá%'lîwô?ó”ÍMlëÄìÜc§möíêÓ|ö7]âævqë$Ýt©›ÛEï•wÓ%onÇÜK¤oöðè5óå8·#ôSPÐŽIá<¡rþIž*˜Ä¹]µüìLãܾŒ/àLÁDΓ|IG ¦rnŸîóKæuæ` ,êð):/¡sÔaˆÿ@)×<ñ¤Îmq.Öy:§ª:ø©®ÆÀÔÎQKòº $wë4V¡Ý nLð<"øÚøÏ#½&yž0És¿+;ÌÇ|_æ´á.¯U&m0bÔ“=‰PõšîyÊtÏ=Q†p‘àJYÃý}ßÎNúÜv¶xõT80í3IüÜ6ÉK¤~Žøè øšüÙ%î·19lˆ$t~‚¹´áþ(sv è>QÎ0 téžþ9§¸'§K=0¼ÚÙ© £×dÐ}’A÷3¼ãÛíkBè ø=oÞÑén‚X¡®áÎðDzJû‡M ìø±ã2Èf ]"9ôÀøg§‡îVD´ˆØßv‚è&#·ª~†É BŠ×p§.pjLÔý3E±_SEŸ‡¶/6}™ã%m¸;È(…Ï9)£ƒ¡š^“F_,it?ã:Lß<È£¯Ç%ŽŽ4utÔrÑv‰äÑçHC/:}tO{aÆý;Õ)•â®áN%5«çaÍãk"é‹&’îK'/t`÷u©îÀL&=†¿<'t°¿'P:Dþ[N)íaøkR鉒Jûqø'L+}Ñ¥zM,](µ´G _“KO‘\:ºPziïJé5Áô$ ¦Ï\©¦Ó]¨o=ÉtéÎþŒ4Ó}­›hzTdªgjºíÎxŠdÓÝ©°` ‘ûÅŒêçcœˆðJAÂÇ»ý8¹ÅTY¡|kxWŸ¡ñÆ¥ìÚöÉ ëqEgüuq8l·ÞÞïËÓ-?ƒ†ËÖ᫟’O›Åq³»E‰™brCë ÿÝæU:䡘›¦èîLo’¥è›«·.þÓJÑÝÃÔ$KÑÝ•OjªÝaìf1aR?i£ÃVI™Æ‰uì¶R—ÌbSìÚhb¹ ·¢hÞÇ¢àTÁM3ÚÜÂËw»­ÃÖ(m ¨Üáýó˜­Ãà‘)Ý1—·…=-ˆüŒíÐ#zÑüóʃn0E±å³öâ71c4†ºÌ¾Œ£a cjÆðRÃbæâˆCoDsmf,‚H…±60ê#ePb± s M©. j1wzŒè¾‘ùˈީçÍ2¢ó²tlÿ§•½Jô VûaR¢mZ&%úm娔èeï1–`:ô¶Ô¥¿˜©<²w2ŸþÂ! œ¬%L˜’gyáét¸)/¼yÍ ÿlóÂ7ÿO!/|-ÜI’\^ø‡4ÊòÂ÷{M fbø†ècQ«W¤£—ž¾—ÏDš¿ýF§–°z禆}.e¹ ʱÏ35ü0s sÃóš8;7üXŸðsbï ®"Þ}ßH9A"‚l+à’ˆ@J€ÙލÀ‹ÀWÒ,wŒÑ“ôµàè± Ò)r…+¯æ}¡„büÕr ðÐô,LœÿH­*s~›ŠZ©'΢s nái €U («õÞÆ@+Q;ÀÑ‚É °„îÓª²ÁTOÛri`ç°Ï÷ÁUÔ}pM—h(KåbÒpè*Kì"ѱ–Řd ¸ا”eö f‘&b¹i€âtÉÃXªÆ"éyÏNJ-wL¶6ú×kLãyì8ÇhW¡ÄDeþØ@™«×]ëgç’–]4!H~mi_Œ ˜µMµ¥ ¢]5Ah³®ª¸–ïý–â"ò½Æ”/•(ÃÝAqÊ:[¢Òtt„KƒW*@u$5-£±U±Á”Uå8Þõºë`Ý0X§ã\(ùµ5g'ÈÀCGÛí”0´l)ÀyŒ‰Ôx%æ515Ì»üvœæU3êÑQÉ ¥ïÓ ÒíÏ °Døy ƒ5ôŒ8Üí“Åê—äøq‡+”¬qPe|3m’Ïßåи^ä3»[|HÜA0Loø³×»ý*ÙŸ9IUz”•h„z:‡ “zh5NÂÏ«Ýg&ªßínÐÖ0#X®S-ÐáK¦6‚×ÞuQªDÌ„²RW®vËûXÃè>]ê»/µ×ï÷{¬°]|M`Ú‡O80¥Y­“‘®1ù‹™®Wrø¸ûœÂu¹÷Iµ|îÏÞ«ƒ>ìq}B/~ÞÜ ÑÉð—ÊÚܳ§aê\\­”¢éu ¤üÝoVh>“{]_トŸï\&ŒÍy …õb{hª‚v:•*é“ãn›À–[&ÿ…0ò‹M -³¥ Âþvq}Øî®ÛVß,¾ln6¿'«‚Ã,·á͸ê1ƒƒ;íÏÔÏäËW,+Q#,`BLÚ÷ÊíVrLÊK¿–K“›»ìA±wf³Ì‘ª4/¨{»€ÂU¥çÕÇ‘ m<ìn·_³j'RR§ ®ü&9.V‹ã¢ '§.èÉEåÝ~µ~ûŸ~ÎÙðåòíÿÞí+8h¬°¸Þݦæ¢Ô[-ß"u]ÜÜÀ6¹‚-ø?¿Ül°åJ•ÆE£i³{˜Îýq#Ksw¿ßÆ»ýhþw³Á—®þyÜl·ÃNÓ¯§Y\eÓ8ñûÞ,ß]Àà~}(ÀóÁÈ\·t ÙÍ0ªQÓœÅÙ/*0—ßßg%0Èì ð¾e ™÷’4°ÒŠÃF)ÊJƒ9Z›ZS4G`øÓänÒ‡’ùïÁ/Àð³è=/c`*¥x [H·2M?¤ÞPé«éwÍŒú>ĈÀž¨1§ÑÍA€!tFhTglzÈsÌbÐpVÄ@z9Q^Ùé RÛì€VZ‘Oëõ½°Œ;Yß3°Y‹"¯}7(KˆbÎß)½.-*Dõw~ŸÝà¸b\¦%, z0iôKbx[‡uC%ˆÓ§¢Ó|3}=®\EÂÓÇØ[©>¸ÊÜA,-š»—,œW´(Êj“yVŸ[ØXÍY„æ}ûÕS„é8¯¡éˆÌÔƒùO Ȉ^dt®b& qÖ¦|q¨eC5ešž"6æ?9Ç£ˆQ¡ÃŠþ¾·:¯åÈ…nÚ!‹q!nI˜1EQöoŠYø‚R³Sµüaµ²×6!ùqx%¡–{eEëÙx8ѯ$›âyT%E+týIñ EgC^¡$pÕ@((àqöÛý§‘Ud.˜Š‘ #_ôÆÃ~ŠºéoW[ ê*+» 7@³¼Âü%œLöŸ¥U)KŸËY¹¾ :ÄiANaÃ+±èûôC ±j=ïCÄJÐ2±z=_OÅØ'áP±$( ‡Y²FJ×Ež4«Q'Éi“f³¬J;ar­Vè’´J´Ð%åœy]D¦Ki×'K¸CdIZr"Kpäu‘%‰Ñ"jd 3ÖJ–$E¯\¬*¹D–˜ ¸“5 ݦ·ÐýJk^iM˜Ö(._ƒáFÒš >žS‰=ÓÇg¿"£úÇ*ëtjN"Û¸*XÞœh1à Ívævu·¹Lp¯ìô%%]øð=§ŠÅÓz}¯,KÙ[`ú8²Ui×v6 `ï ¼jrò Qõ«~âÔ¥AÂÅÑ2›‰À@ͪ(:}Iùtàאַ/ÌwS:é¿àJÒæmJáÓB7dF[¯ìôFÊ­»wèÌUäÙS7€R}W¦a¶µ¢^5¢…µ2ü•¬½’µ3ÈZäb‚XÍŒ¸eU¡?!ŒèŒÔÀ¼ ¦Š¢ìß”¹œò«ñüaµ²×6I•±RðÆ*ÊŠÖ³ñ™ŠxTZjŠçQý•”±tû;‚3d:U¨” 1häÕ¬ ý'%FXW)GŒ §îaʵyµå‰Aue3½Ái:ð¦!) ó—Rz„¯1K«Z3ÏÚž•_h¤Frнi½T ª ´x•ê^IR’ÄÑ5_•B+Ž%Ighè ƒílT04æ+Ò~ËHÛ}Ç5XA/˜*è¹mWÐkOCO,lœŒ‰µ™6Û4â)вÓÖ½ÀgY5–?¬VöÚÆ¢œAvªhê•­§ãá ½¸cÏP®uñ<ª¿’ž°$Õ\¸VkgÞŠÍg“‘Vj#Oé?é ‹uiª–—x‰À1@ë‰ÝÏ*‹œÛ×αÊ=ùdà_%…_˜¿“ž¯ð–´j檢ÿPÖô¬ôB/ݼä’u2ÝÍF2%-g.Ž›Z›®‹ôp̱áBqIë9y;<Š,&«ÖF FX9¨â²ଠŒÃ©wÍ #[qÉA(ÄPpM”M¥6Å7¨Öb–+è@cɈâ0É,ÕÔº(¡Z=ZÂÃ0rä'K1Š0.N¡1„[¤MLÈAE¦@¼¢Ð³ìa¨ö‹ ô™ñUJü®š¸IX‚Ö&MËÒ«¦°Â‚jô|J2ÇY:ˆáÉ{Wê] $½d¯Þ±FÛÍ#Цƒj \ƒç#à©!(_½ ŒÂ,A?s Úrâs^né5{Ã2Øyî‚ï™üx6?]F?2`õ2ûÉëÏò†O+u½†³'y³å!4˜?T,œÚl£J†õX%Çzƒ‚DSREOŠgSGµ^ô³Ol3ˆ’„º-Û¨ÑõÓ1Ð`¤/û¿méKþ1m²éÔ°¿>ù¼Yq¶wühZ¦ÔT×ï¶{™¬›r y;OÑE»N¢Ê7J*¦´±>ãégôéÍ_W¡å°][/«|3€q«&_‹jZÖê †š)!SmçÕYLIг@(ú1b]«8dé£IÖ^ôsñðUK¨Ó¼ö•ehXøèĚƵ÷ªôYþÆMÝŠö,@Ê~V ‹Y>÷ 8”òŠ(eè‚׈?ÈÜÒèø4M!ò½{òTÍ~æ°;‰æéáWÇ)dC+ÆôÕ«âW¯µUéËÍ èc§WS9ÿŠ®s!hÇO0òa;œr‚ЧмSsç¡_ƒ«ü}Ç€…”p‚7Ì\·˜pÓº’–u5]Ëš‰ÒäÌrA¯]Gß;ôðüñ»ÿ”P7c”Carla-2.4.2/resources/16x16/zoom-original.svgz000066400000000000000000000272021420416754300210520ustar00rootroot00000000000000‹LÃ^í}Y“ã8’æ{ý möK—­ÈÀ}deÖXw×T[›uÙ¬õa;ûT¦”¨Lm)B±’"3²~ýºƒ Rà)2®ŒŒ™. q8‡Ãáß»ÿ¸¿ÞÎ>'ûÃfwóþ É›Yr³Ü­67ß¿ù÷¿~ŽÌ›ÙḸY-¶»›äý››Ý›ÿøñ»wÿ#ŠfÙ'‹c²š}Ù?ÍþvóÛa¹¸Mfüt<Þ¾½ºúòåK¼ÉãÝþãÕ÷³(úñ»ïÞ>ün6›A½7‡·›÷o²ü7‡x±Ú}HâåîúêOøô·íöîpÜ/Ž»ý%1¹zS|·ZæÞÞí·®‚Õò*Ù&×ÉÍñpEcêg_Ù—ØêÍ窹ÞA¥øåÍá^æýjçÆ^|á.µÖ^vÅX9¢Ã×›ãâ>* } }Ê!Wð®ÈÙ-×Ûû-°¶1î­_; Û-üþÁ)!>ìîöËd _&ñMr¼úé_?å/#¯Ž+¯˜Ó¨•ê- åÍâ:9Ü.–Éáê”î¾ÿ²Y?1ã~~J6?‹ß›Õû7Ð?.HúûÔ‚·9ÿ‘˜³4kV¬ÿJ˜˜ÎöV+â²”˜¶TÜj·Ä¾óûnwmnb¨ô÷r±»»ãíÝñ×äþ˜Ü¤¥@¿¼Nº×Ôü€äþv·?FëÍ6Iëºú´»N®n77Ðëý–‡«Ýý×ÉM´Y£]ÁwÛŇmrµX7.áz±Ý^QuOÕÕ©¥·7ƒõܯnaX- ¾üzzù#¼}·JÖÌ•ÒqAÓwðX&Yìÿº_¬60QÒ|iÎòe¥Ì¾¯ÇÝí)/úøu =ÆÄh¹Ûîöoÿ°^ó’\Ò8csüú–þð¦øf·^àâ¥9~€/ .ýfvÕ½6³îX ×fóÚÞ]•»ÝL¥Ý¡Ûd å/¶__oêÉÈ™"}Èèþ $#ÔÅz‘1TéJF¨MLDF'×Þ~Ú' ‡ÿ g¹µùëYâ¿o6G¸w‡dÿOZÿuóïCr–ë_ûÅÍ$äõû7׋ã~sÿG+E¤Ò‚Í þ?AÆ”Vs&bN±ôû¢õôýÆcC)1:Oý ©BÄÔ(bl‘—A^sE ¼"/¤*+¬-&Æ;lèb;&5Ý$÷©Y®¨©G£&#Ð!buÄT1S’hCçHk¤šGZÅTCxAÍåýû7šÅŠSÍ º-¿ÝX¬–Æä©ë`Þu0ï× h㺘4°¶'‰· Á¬~IŽŸv8bÉ›Tâ>ÍcàRÅM‰û¨Œ9WRˆ÷i Å…å%îzCre•4’NAk»“FÁE‰25Óôq)×iL,y€2B[BÔãR¦¯ü}:)kŒ2UÒH3]NIš3a~Fšñ„¹Œ‰€~2á„yñ+bÖ€ ¯áI;0Ã¥-¯ŒçòÙ¾’–é2-9hಊh1‘Xp+-ÿýËßÿöÓ¯ö×Hõì:6ÕÂÚ.8¬Få¦É¢ÜT£`BHim©©P€±¦N is=M.ñ¯A+ÌU[Éz ð” VuµT™¬×$餈‚þíPº[Å$¢Í/‹ Û©b`"ª”·FÕÒ·¥N:I»ÐWxôí§óžÍGËh_!þ<™:Ú7 —~–„jí3fHË!™øF’©.œÁÌ£0$oéçgHÎ̸{(ã Ô%赩±æµ¦´vjÚ½âëe§v©Dé ÐÒÔ*øUJŽVÑÌŒk¹®Lt3P.`ƒÏ~èT¿ Ï)ÑÕ\¿ádò¡Z¿° Ah4ÔœXz½TÕ²`Û) Ó¦3»Pö€³ÖƒŸ¹À2¬™ià§ŽµuŸuÌ´’q½Ù“ýé[Wk´¹¤ÛÝvvý(Í‹æáýó›^„N?…f¨‚Àë䯋»Ãa³¸ùóönï5º­@¤Ïê§äóÆ5 Ù[)Â@Wº^®j7Ò&n\E›ÚK`ç®ç ÃfRÇrNfË•ÆsBøÁcJ-ìCæ°H"ÍLÄvA†Ù_fÆÄÖ­øœ+ˆšY@àZØ)C­œáKÐ2‰˜3o9¤ÙXq«æ°¡ÐŠ NgЂ¹1V¬yú‹Årö÷ôqö{…ÙoS ÊÊlÍov«äøõ6B.—ËÃþÇ/¡¨77 QAWZÞí?/Žwû§z1¬§Aé)p‡å … ±Ê ™tPïÏõ‹d¹>k£‰eË™n£ä Ši¨d9É$TjÐþ*†  ž|‚BAHj"ùm,/$# /Í-Ëb’À:u‘"ð¯‹"Rƒqh¯!­B5Š·Ï7è*‹l:ÓhSÕZ®eÏõx‚ ÎÉ[¿ÁQ”ç>D³ P^¢à9"1áÒhÃEyGC5Ì/æ«R¸«,V&SiSsžuÊ ûsúã;0OT· o"(ïëªæ|ail-Hž²/¬òÆ<>^ó®ƒy"èÌæŸÜ>9úò×’£Ÿpì&Ÿ¹`ì*H(¶oR^5‘˶(OPI-"Ýì!ÏÜÒÕòh–G³ƒ<+7Æz昋ÌÝ~ûǪŠf,ÿ¾"q ûÝo Ì›äLúPæ&6aÖ(5d.b¡$'t±X[-ì\”·V²Y$cIðE ¢R1‰)”)æ¿"fQHÜRŠIœI® ä,ÂŒËE‡\°˜:— î(•äUÒ¨9•Ð!­E<±9| k>åbÎp¥ç,—kð–Ã2z™˜¢MžÀðÖAÁ)Ð7Z…p.´šp5‚°y$ ) g6¦‚Z=‡Bà7Ê<Cm¿Q1ha\ΘQÌ©Dv¬¤£ÉëÄ'ÈM Œ@÷UJX[ Êj…Ê!Ù ãVÞµ Å){À¿ÃrÙé ô#™çÚ8ÿP¦ù°ü8ç;¥ó_ƒírÄ> :?2 \´Ô?vo=&k稭Ú]˜qîÃÜk:nX ˆø~óèÞay¬Þ•ôA…‡k{îbÊ—‘æ´+Í~E¸~I)ˆ–øl¦R©ïÏJlfƒ Ö»ÐÅãÅÔ ÜìÆb{è0A-¨y¾ç./”w0Ÿ”vÂ-JQg%«—šV|‚š”RûfM¿¢_µ5jO¨ZPa‹*D˜ÆýÜÚÂÚO³@õ*ÓÃìæî꨸l—¯ÌqP:—¤|W:×¹r‚ÁŒ<¿3{>­£ÌÊ4§LÌÅÓVÑeÚ⩉g lŸ¸yŽÛd¸…,›ÏÉéë\Àõÿý›rV¾:¯åóí¯ Ô#IfogŠàÿdd‚õÀ½$. æùýýM Êšíö››K—QT³£.Tô vùEÈP¨ÓÇ/YQ³^±Á¡l?¿ä…X’¤ƒá%iÁôîÆIÇYi¶iz2á~´ŠüЬ¬ž_üýéè¸ç®-¡UT‚NÍŒr³ôo­c!A¹F½fŒé‡T袅pàæ:(cΫ°L?Š÷OAç-ÓÍ1ðÏÈùl´€ ¼ ù@×àøOd±& þ³óÈY"¡OÊíV\ê*ˆï§Ö$ËÄ*S RžVE?Ð VT¥JĤT‰X)[æÅó¼õÄ„œ°ï”Æ&Ñ)vå¨Öñy¤Pݦ 7„šâ¦¶²£Tw!(lVÙÅ ŸÔGµÒÏ?«;¬4kX—œÖGOî¼ÞñôyGB]`ÈV€a¡´šè6»ÝÀ­4TÚHƒÞm,Ó¦mCMñ¯{­!x`‹“-·ÉëF?xµÆ¿Ñ£˜£Ý¸u {»?øS9ѹ=·²„䢿f^33Ø¥].Xp;toù°\-W«úÚ.u³ì¤@´™©üÓÎébè„Ý›Œ{«úmº€ŒÁ›š“‘qˆÇÄddµçÉ¡©¡ajè¡»ÎΙ.YÃ7ä¤H¥K\]Jly®HOá½ÔÎËSÝÝéôÁƒX<f±”–Ãæ g Mu{à Gy%Ž\1L¨kƒç)„TÈy™œíÔÆF؉ã0![6’q¼ëÕ­‘¥ŠïÌÞh…rÎl.Œ"¬L=Cb.”¦%R3e¤7Ó³XCBaz…”°”mBRVíEç"@ÒŠŒò˜JÍÊvp†§n°³)_vä»K+;Ï;xŽø¸]“?Ršn˜íœ|?%ÁÊ{¨¹Äݺx'Þ³ÖìoÃ{áÒ¾yJ,íòC3¨æ;GØšRcy [iJI%#%ÍÄѲ£Í-lË«3ü…­„©)ññ– \ßH™ßì’Ò¢äpÙ;²æ7©ätX™{â쾂Nµâ?ßáæxSx^p^Ám¦ÜÆ©¦Ž%QÖ>¾kS®o ¯ÇtŽqnp Ÿs K©‘\?KIÈLãfvH€Œ“É”ƒ˜F0IÕ£@f†™côßUâ¼þ hP<¶Â*\ê[•ënùšÆ§ŒËÊêOñÆ„õT½\#­Ë“ÆÖhÕȰŠÒN§MÏ÷`m? »g¡£AÐÚ«þO Oýr÷Kùw›}²úÏÌï¡Üt¾ؼ½ý¸þG².tú\A¿nŠï…ì~”_¿kPz…jÔ󟂉u@Ÿj.,°t=Éu„qÛ8jÏ~6á XE ‹5ý \D ³´©³½ÖGÕYsU´ÍRÔ‚"t‘ª!ilTp?ªúnj*$?’ʹñ¬¡D·›_>mŽIÔ2ìÍÅ iÊHMez¼q(™sŸê8àEå²é¢€g_Õ `䑀ʆâf…\Ij¯z7¹C×!›‰÷a»XþÖ9¼…WUèNa3áUµÕê|.&”ñáÙQçðO‚V@Û1F'ÕþÕ‹e0ï2˜·áxÀUé µ`ˆ6OcM\)†S!‹)gÔT6ÆÑ}Zuå’—ëBb²5*äpøƒ°‚_Ùl¿kÊÔ€Ô‰X-—U¨ËÁ ‰Œ#¸o¹CŽ”q¬”w6îbÉÊX3M<#õ2˜wÌÛÄ‘RÉ!…rÁÔ"Fc"©2síƒmŸ™S¦Yl:Ì×Â,‡!»ÙÛ¥½üt0t¨Þ50îLâßÐ;׊tP¡ W²å¦kMÓúÜšëÞ;?2W©é¦W…!ƒži]#k§œÐ±ÊÚSN ÉǼÛÜnÊ©˜QÍ¥(M9Øje™®8þ( Úâ<™cÕ3 ¯æ¥›kTàs„Ok+Є*ô0¡†ÇZKX&nŒ4£Ì¼NçœÈ)fž+¶;«Ø…VƒÑ:9Qfä ÏrÊ“Ó75hw˜ƒê`ˆ%Ü]t¦¨$ƒÝôsÿÖݘÍS)¥-ÒzN“ëÅþ·dŸ–u÷9Ù¯·»/o?o›Û2wÿi¿ß}¡?ûcþú¿ÕÓOù?å Pîî¸;ï ŒÚò·³òs>)à ‹ù _o4—}?ó®A°¸tÿ¡Híï¶ÉÛäsr³[­N¨CóàÏȹe¾!q{ü!%Qä@'úeBfŸIxФ{ŒÒ6äÉiê)ëï³ÊîÐu0^iÁ­i½}Æé‡Ð@%7« ‡ Kï5HûÝÑ!7`?L7b’^4bûçÄ3ëŸ}góJ=Çi¥È؃ôËăôKßA¥ÙDžã(I1ºðûeRá÷K?á'j…ß„Ã5¥èÓuãÕG¥RC@G –^à.ÝÕ©0ÜLgª«b.¨îëv]ñÕ>så8´nï—ù<5ù€zÕ`õè¨ÈsËÿì¹i—JhåÐ?…~o½ƒŸA¿ˆÜý¤Ž£n–ô{Ø×º¹¡Ó {|¯8ǃpŽ#=-¤ã¨ÝÃØa?{´ã¨ÁßËÉ#ÆQÄãà¬Ìã!¨¡{–²©p#öŠ|ü\‘Kó³ML¶ÈÝ‘±=e0>‰C?Ë ÑsþñT­Wä‹£nž*9«S’Ž‚uBtDaÙ PµûA+¸‡†s!rĺäpé{†xÈMzܤˆÈ‘êUñ¥˜ÈQë5¹O—gŠÜm»hú}\šlb/9º<°|ȇǘ¨ö ïØÈM¦“ Б£ y^>r·‰ˆ5Ql¾ÊKÇHö¶ø-øI#((ß NrÔÉßQ¾¢)®mdëP›×b%ñß¹+yŠçô`ÉýTäKá’»XÝ0¹FGž2¹N9v ÉQ?gÛ‹a“£¡pŸg\™É†— /…NŽ€QóS#.LÐ0;)|ò³§é”»è­wØ("/QÎíG‡Q‡˜*,¸&#¦yŠÄd¼~éŸN¹InL¨é´ºõ-jÄ}“œFçÆ‰WÄÁ ò[ÄšIéÓúRR¾p̪Éé\ H*¢ò†ô\¹´í LpïÀëRüf–[€D…QB~ ËKÂ,G}#^n¼{6@Ë-RQبotÏov‘iUnyD‰ù‚ÕŸëµäÞ†wìuu*=à1¹OI£T‘ov¹YùfdÌEå€^öæjðÄÊD}£ý¿Â/—'SGøång.îæsŸ0aï°çÀÕ„:xED-dž©ež§ƒ2-sëß+ s?æ¨;Bi/ÊgÇTÅ\ç«ñ*z<*‰¨-í…Á1{ºå¨ó£¾çÉ\çUs‚V‰.êòd†UiÑÍsü™+(Þõ.†§*ε‚×\ϵ8H¿€fϪtùDšF5yæ ÍUDCŠÎÂÏvš;zA¾B5ç$ãuzË7Ã7×ÜÍèð’›»-ýϲ¹NmY{lØfßO༛ÏqÓ77o·^覃nnÞz¿(ÜMÞÜ̹SÀ7{|ô à<=€s3C?íçóOrUAçfÓò³_Tƹy_Àš‚@Î-|IK B97w÷ù9G­ ”E-wŠ.tŽZñÒ¹·sÍunŠ0¬óxWœªæà§:=¡£ðº À‡^ :«Ðv7<¾6ây@ °WçAž»Ù!ó4w™Ó‚Ûn­2iƒ£&{¡êîyL¸çެ M˜$¸RVp÷»oƒ>7­-^>LûL€Ÿ›:9ôsÄOÀWðgþÜm"8lˆ$t9À\Zpw–¹ºK”3.Ó?gèžsr< èžáÕ.†‚Ž^Á »€Awsè=ã›í+ tFüŽ'ïxén„X¡®àÖðDzFû‡†VüØqd=Ѧ‡îòbxèvCDÃûÛˆ®sr«Úg˜ÁÑ døq·Úb€§†DÝ¿(zÈû*ú2n´]¹‘èi–—´àVî ƒ >—@FC5½‚FOÝ͹á›{Ýè«aÄaÀÑуBGG mS€G_²zÑðÑý…÷ÏTÇ4Š»‚[Ô\<¬Qœ‡-¯@Ò“Iw•“-Ø]¯T·p‚IÑ//“Ö÷¥CAä¿eHiÃ_A¥G•öãð+=éP½KGAK{’ð\z péh"xiïHé`z€é GªbzÒúÖA¦KgöÀLwQ´^,Ðô ÈTÏjºéÌx °év(,˜@ÇBpä÷ƒbF õñ˜'"…Óß©äªÞ¥Ðð¢Ë¡,—Á}ìó„†ïç®3"6|¿[cý~Iì}ÁUÄ£ï)GÒ(Ķ-‰”ˆvD…]a—f1¸cŒ71©Á»oìÂîD¹Â +¯â¾PB1þj@ÞBqB‰- Q)áÒ`Ä• Q‚¤¦e6¶*6YUŽã}žwÌ&ëxš %¿6bv¸ï²àd;°†–=8HW6­‰©aÞá·Ó4WͨGg%ÓW¾ÃJ4?'P3ˆðq ƒÕw8Üî“Åê—äøi‡#”¬±Qe~3»¸`í¾¤ôA[î]R­ßû½÷òà«{ŸÐ‡_67ðAtrü¥ò¬{YŽS3un®æÊsêd/1ò[t·Y¡ûL¨Mî]ôáÃî>ü~ç0"tçÖ‹í¡. úéT²¤oŽ»mSn™úÒÈO6%¶Ì†.Hû›Åmôq»û°Ø6Òøzq¿¹Þüž¬ ³\†×ãêlÜi~¦÷Lî¿bZIa¢PÒ8Wn>âf%ç¤<õk95¹¾Í^sg6Ë.R•úyo¸ª¤b²üØ”‡ÝÍök–í$JÎ%ˆK¿NŽ‹Õâ¸(ÄÉ)… zº¢òn¿Z¿ýÇO?çjørùöïö¿4fX|ØÝ§æ[È·Z¾Eéº8þ¸¹†irSðÞ_oA°å/J™‘ÆE¡i±{èÎÝy#¹½ÛoãÝþ#ÿw½Á®þyÜl·ÃJ¼íBVèæ¸M~tu¦§^\eÝ8éû^/ß]Èà~},ÈóÑÈܶt ùÍ0ªÑÒœ-ÅÙ/*8‚3p5Ç]­•-ÐY½s ¬F”(Î4zÛ` DP,9Ãsu‹×§˜µ/VHÃ4Ô¥¢B$Õº–1Ë£p²» èm?Ë4ÃJ…†ÛǪ̚¨bÅü{JE¯¸;±f„ŸS‚Œ]À ÒN0TGwœ‘ITqè-ßÒ[ì—M}8?àîÁ`X±&è8š†ðF—˜©xïΡ]äz¿¿°iñökàmê~ŒAMÎ w.Èù[ ‰ÈÜàÜN?F‡_üoþ3Í»éüÍé‹"!Ë £ÿÿv–½$%Wܼ¹îBj‡mr³ÂàƒTPi™K(µ ªúk¼„"­´ 3kˆ4Ò´·4²iäÆIšÚ‰ëµ6Š£€dsª½»ú˜=ø3î¼S)¬²Ö™»^"vî=z`}‰-¤ãÖÆ ƒ¸KHÊЃMÂæ(7Î:ަ8Bö˜è£n¬&èì~²¾Î¢ì±”tú¹;OŸŸ>7¥Äâ;2/¾œòú‚_ù•Ú’WtÞ¸bÖ”¦xaN>}ßø:lÍ.I§’õ;g¾?H«´4ݤe@$ç<Õ ŠÐdìM™ã#˜Š°IF$ô2p{Œh ›fƒ@¬6 ‹eýHqËF±¿pÆ[.ŸÞ îéõJ&ð¨eKo°ãŽá—læS‡j3Hâ}¿Ì(lÌA³"¦Htnb.èUÖ@笗¦Eñmžh*k–Q¯<˜Ã§óŠ‹4øÚb8-%˜—Ê(¨”ùæI^Åyš×À¼´¢çýý}V"ƒÌ°1Àð\¤1TNÜGÒÀH+¥H+5æ”h]@njMQáw_8’Ã_p“¾”Ìÿ~ù†ŸEíùwy])ÅKhBºQiú!½ •~š>kfÔ÷!EæÄ™2pjÝ60#$ˆÎêŒMyŽˆ!gE ¢—å¥PÚfßµÒŒ´x{žß«Ó¸ÛKàw&k‘ä•ïe QÌÝwJK‹ Ñù7¿Ï®±]1Óo0i¼—Äð´ó"‡*J§OI§ü2ýo\¹Œ„§¯±¶R~Lp™¹£Xš4wYX¯h‘”å&ó,?·0)0›óÍëö³§ Ó²^C5°¥#23æ?)0#Þ"£s3iˆó6­Õ‹C%ª)Óô±1ÿÉ9.Å ˆ /¬èïx‹á嵜¹ð†›vÌÅbœEÈ[zÌE‘”ý7å,ü@©Ù)[þ²šÙ+“Pü8¾’ÆP˽´¢ô¬=œhÇW’Mñ>:ÿ$e+¼ú“òn u|… Uƒ  ÀÇÙo÷¿Ø,#sÁTŒdùÒàm<¬§È›þv¹µ Ž¡²Ô¹ûÐp2ËKÌ?ÂÎdŸñYš•²ô½œ•óËà…8-HàRX¡ðJA,Þ}ú¡AX5®÷!a%hYX½®Š¯«b@‡î“°¨XÜ ‡U²ZI×&ž4;“N’×Ê&ÍfY–fÁäJ­È%i•hKÊ]æurIÙ[.a¤]_,áü ‰%iÉI,Á’×&–$F‹8K°1cbIR¼•‹Y%—½Ä“ëdõ›nÓyÓý*k^eMXÖ(.€_ƒáFzÊš =žS‰=³Çg¿"£ùÇ*ëljÎ"›´*Þ\h1à Ívæfu§¹Lp/íôŠ.üôžSÆâíy~¯LKÕ[Pú8ªUi‚WvÖ Pœî ºZrò Qõ‹“ª~ÒÔ¥AÁÅÑ2ë‰À@ͪH:=¤z:èwÖ W—击שœô?p)iñ6•ði¢ëŒ1£­—vú"ÕÖÝ7tæ2òì­k@)¿K Ë0Û¬ZQ ŸÑ Zþ*Ö^ÅÚb-r1A¬fFL¢CYUØ`Ft&ŽNæPÞSERößT¹œñ³ñüe5³W6&I•©RðÆ*ÒŠÒ³ö™nñ¨´Ôï£óORqÄÒéïôéÔt RÄ Dدf éRa„y•rÂ2qê^¦Z›—[ž„dW6³œº_"±"1ÿ(•Gø™³4«5ó¬ìYùƒZi${Û™ÆCÕ  J‹×]Ý«Hê ’8^ÍW¥ÐŠCEÒzÐÂ`: ùÊ´ß2Ó¶Ÿqõ6Ð &‚zn› ôڳР'SbmfÍ6xФì¿é ë>à³,Ë_V3{ecR® ;S4õÒŠÒÓöpؽ¸eÏP®uñ>:ÿ$]aIj¹p+¬Öν‹Ï:#­ÔFžÒÿ¤+,楩Y^â!Ç­'u?Ë,rm_»‹UîÈ;ÿURø‰ù7éú _I«f.+ÞÊŠž•>èd›—\2£N®»ùOàH¦¤åÌÅq³BkÓvŽ9v8M(i½KÞŽ"‹`ÕÚ´+wª8ì:+ípæ]3ÃÈV\rØb(8‰®ʦ»6Å7hÖb–+ì@cɈâÐÉ,ÕÔº(¡Z=YÂÃ0röO–b;P\€œBc·H›˜‚ƒŒLÁöŠB͸‡¡=Ô/&ðÎ$l_¥ÄgÅÐÀuÂô6ÑèZ–µ1TãÍ7¡$s …¦Ã¶1ÜyïH½M’¤ÓÞ«s¬Ñf÷ôé ×àú|jnˆ‹G/£ÐKcðž¹m9ñ5/7ô½aì<¿‚ï¹üx>?mN?2àõrûÉóÏò‚O/+y½‚³7y±å&Ô¸?T<œš|£JŽç±JŽç MI•m¼]<Õx@ÒÍ?±É!"(Î}Ùµ®›¡ #])Ø•þMCòÈá!RÓp²¨V „3›{^ÆD¬ˆ—W&¥ ˆ8zò¸vËŠçØVŠ.­”¡ ^fЪ8†`6À '¯5!òp§û • âÄ'ˆæ}½¯î9kZM›Öú<â5F×VPjÛ$hs›L¸IQî®y†Ñ‡¾oi°Òê3"jX¾$è]Í æƒ¢á×2ÉsÇ£jQ•šŠ¶ä;¡ãÄ ‹ðRçΚTCÍ‚îyd€a 6¡÷`Ÿ s2ß#’[O×¶I“P›zL³þD4¤¡Å­DÔ졉ØÞ$у³lÈt rôYËTçéš³v:/'yº†œ-M*¦ÞC‹%ûÃfwûþ É›Yr»Ü­6·×ïßüû_?GæÍìp\Ü®ÛÝmòþÍíîÍüøÝ»ÿE³¿ì“Å1YÍ>oŽg»ýí°\Ü%³?~<ïÞ^]}þü9Þd…ñn}õý,Š~üî»w‡O×ßÍf3h÷öðvóþMVÿö/V»I¼ÜÝ\ý ¿ým»½?÷‹ãnEIL®Þ÷­–ùw÷û­k`µ¼J¶ÉMr{<\јúÕ—Eõ%¾õæSÍÜì Q¼óöð¯ò~µÎkc/>sW‰Zk¯»b,‚Ñáëíqñ%*ß } ÝÊ!Wp­¨Ù¯ÖÛ/[ aã˸«~ë0lwðÿü†SA|ØÝï—ÉîLâÛäxõÓ¿~Ê/F$^WÞcN£Vj·4”·‹›äp·X&‡«S¹»ÿófuü\ÄŒûù1Ù\<¿7«÷o \ô÷é ÞæüGbÎÒªÙcýKÂÄt¶·ZW¥Ä´¥Ç­vK|Ã÷oî×IôûnwC³¿—¼»?ÞÝM¾“Ûô9Ð3¯›î²»/.õ1@òån·?FëÍ6I[»ú¸»I®î6·Ðïý¾,W»/_¯“Ûh³V»‚û¶‹Ûäj±5ËM5õhÔd:D £Ž˜*fJmè<¢BiTóH«˜jb/¨¹üòþf±âT³‚n˯@7k£¥1yé:Xw¬»ÇµÞq]LšGaX;ć;ÐbV¿$Ç;±d¯Tâ>ÍcàRÅM‰û¨Œ9WRˆ÷i Å…å%îzCre•4’NAkû“FÁE‰2 5Óôq)×iL,y€2B[BÔãRf¨ü}:)kŒ2UÒH3]NIšš0¯‘f¸“–@‚ÿþåïûéWûk¤v_ÕÂÚ.8¬FåW% ŠEùU‚ !¥µ¥W…H`kš4À6ÐÓä?-Za®Ú²H6k€§Z°ª³¨£Éd½&I/Eôn…Òý&mox±X|XØ^ Q¥¼5ª‘¾mâÐIÚ‡¾Â£ï0·6-£C…øódJèhÞ€ZúXšµÏ˜!-ct<†dâaH¦úp3¼£ŸOœ!9{0ã hT졌+Жx8ã ´¦Æš×šÒÆ©xï_/{½wJ”‘z-M­‚_¥äh5íÌøa±–ëÊD'1å6øì‡^í«ð|‘R1]ííþA&ªí 2„FKûÁ‰¥×KU}l;…aÚôfÊpÖÁ‹ à'B.° kfZø©gkýg3d\o¶Çdº×µmn¡èn·] e?JkÀ¢yøÇ_ÿüf¡Ó[á5TAàuò×Åýá°YÜþy{¿÷^ºëHŸÕOɧ{-do¥4 ]éz¹hÝxDH_it³¸à*âÑÙÆAC‰dÔ²Žn‚@‹ä)ð“ Sð‹‰±\PÓÎNXa;åûvJ~ЧPI ;Hª‹ºéI 5J’²ÁÕдô25ôg÷Ú<Ú¨Eí쫈Iéÿü%`¼­©&‚Â>ý¡4+"xÔ¢[yõl$CñDþT;íæóÃ)uDȨs»ö Œ“,0¶Ó‚(Ö±ÀhÕ$D²‰:/a‡ÇŒí‡¬±óãihœ>ܾˆÓ‡ÜqÚ¹/ÿ˜”[Êa-ç%’—›ÑF5ž4[×ỉÒ\hg]/~ELdž+ ß80Ã.–OJ-îaŠ’¯@E [#É<›ËºVo¬·wfy-AŸî>!­kx5š5 @‡Ø‡ÉH”ìÕ=Wâ¾î\h EéHtðäðæÂe™‹ïÅ;)f¬ŠÑ3(¶ÄO…bÃf·ÁOõ ¡5[2šŒ®jéÐf¢Ÿ ¯&XƒV çZËû.ÚðV¼>MK·¥5m,aÂÚvIxB“ºU­OÓÀžQȆÑÑâ2Y~X~hàþ\n7wÿkqüèsæ©LË'‹ÿt!,ûòŽÝyÏËßVÃm>‰ðG… õ›Õ±ÛéÓ¹™¡½vîz2l&u,çd¶œÑXi<'„<¦ÔÂ>d‹´!ÒÌDlçT˜ýefLl ÑŠÏ)ѱ"Œ¨™µ±®…‚0ÔÊ^-“ˆ¹±1cp•C™·j ­¨àto07"Ɔ5O±XÎþž~ý^aö»”‚²2[sgÆÛÝ*9~½K€Ëåòp€ÿøO($êí-HTЕ–÷ûO‹ãý>Á©^ ëiP Æa9èàE Å‚†XeΙtÐÎõ‹d¹®‰µÑIJåLwQ êÅ4T²œ‡Æd*µ xþ*Î @=ù…‚ÔD ó»X^HF"^š;–Å$uê"-Dà§"Rƒqh¯!­B5ŠwÏ7è*‹l:ÓèRÕZ®åÀõx‚ ÎÉÛ¼ÁQ”ç>D³ P^¢à{Db¥ц‹òކj˜_ÌW¥pW#X¬$L¦Ò¦¦^uª ûsúã;0OT· o#(êªæ|ail-Hž²/¬òÆ<>^뮃u"èÌæŸÜ>9†ò×’c˜pì'Ÿ¹`ì+H(voR^5‘˶(OPI-"ýì!ÏÜÒ×òh–G³ƒ<+7Æz昋Ìý~ûǪŠf,ÿ¾"q ûÝo ÌÂÛ¤&}(s›0kÈ2±P’:‹X¬­v®@Ê[+Ù,’1ƒ"¸#Q©˜ÄJŒsŽw3‹(H$n)Å"Î$Wðä,ÂŒ«E‡Z°˜:— î(•äUÒ¨9•ð&BZ;‹x *cs¸Ö|ʡĜáJÏY, .÷:ÀSøn”ѳÈÄŒmò†QW§@ß|xxçB«W#›G^$ãÌÆTP«çðø2OÇÐÅ{T Z—3&As*уéhAò:ñ rc Ð}•VÅVƒ²Z¡rHv¸•7A]B±CÊðsXŽ ;~$óüCçÊ4Vƒç|§tãk°}ŽxÂGAõ#£@ ¥þ±{ç1Y7GuhÕ.`ƹsïÅÐqÃJFÄ÷›G÷ËcŨðBnЮmÝÅ>4”/#ÍiWšýŠpý’R-ñ»5šJ¥¾¯=± ‚Z ïCOS3٠õ öùž»¼PÞÃ|RÚ w(E½•¬AjZXñ jRZHí›5ýnˆaÍ6¨=¡fA„-ªask k?íÕkLŸg7w¡[ à²]™ã t(.I9V:P×¹r‚ÁŒ¬ÇÌÖ§u”Y™æ”‰¹aÚj"úL[<5ñlÝ7¯q—ìwPeó)9Ýë¸þ¿S®ÊWõV>Ýý B=’döv¦þ7 C ¬î"quH°ÎïïßhÒú ì5¢Ý~s½¹…±tEµ:êBE߸`—B†R-˜!~ÉŠšõŠjÁóK^ˆ%Iz^™ì™ÞÝ8é8+Í6-@O&ÜÏ6@‘_@ñ€•Õó‹ÿrŠâ·îÚZE%èÔÌ(7ë@ÿÖ:”kÔkƘ~H…>Z§n>CeÌy–éG1þtÞ2ýÐF–È'`£á}ȺÇ?‘åš0øg瑳DBŸ”Û­¸Ò1TßO­M–‰T$¦¤<­Š~ ¬¨J•ˆI©±R¶Ì‹õºÍÄ„š°ï”Æ&Ñ)wå¨Öñy¤Pݦ 7„šâ¦¶²£T÷!(lVÙÅ ŸÔGÒÏ?«;¬´kX—œÖGOî¼ÞñôyGB[=`¨V€a¡´šè.»Ý™[ih6´‘½ÛX¦M׆šâ§«!xŸ^ °ÅÉ–ßÉëÆ0xµÆÏ™Ù£˜£EÜ:aÐÿ½?ø¨39ѹ=w²„ä¢!2¯ìÒ.gXp;ô`ù°\-W«æÖ.u³ì¥@t™©üÓÎébè„=˜Œ{«úïtƒ‘š“‘ñމÉÈÏ“CSCÃÔÐçîj8k9gºdm GÈIs&•.qu)±e]9žÂ{©—§º»Óé#‚±xÌb)-'†ÍΚêö6†ŽòJ¹b˜P3ÖÏS©$ó*9Û©°çaB¶l%ãxáÕ­‘¥ŠïÌF´ÂŸœs› £+SϘ ¥i‰†TÇLéÍô,×PX^!%ì%&G›”U{Q]HZ±‚QS©YÙÎðÔ v6å`Gn±»´Ò±zݳéˆ_·‹còGJÓ ³“ï§$Xy —¡[ï$Ã{Ö†ýmx/\Ú7OÉ¥]~ˆ c&Õ<Çζ¦4X^ÂVš’EgRÉHI;1Gô£ìis Ûòš a+ajJ|¼%74Sæ7»¤t(9\άùM*9=VæÁ‰8û¯ S­øÇwx„9ÞžœWp[Á)·qª©cAI”µÏ„ﺔkFÆ[BÂë1cž[ÃçœÂRj$×ÏR2Ó:™='ÁˆÆ‚ÉdÊIL#˜¤F‰ê‰Q 2ÃÊ1úï*Qo?(­° —úNåº_G¾¦¹Ç)ã²²úSŒ˜°¾‚ê²—kä£uyÁØ­ZVQÚë´ êù¬ÝÇ#a÷,t”!Z{Õÿ 4 â©_.¾Äs¦j–¹ÄÓ$R¾xîbT~[}&JšüFÿ:&!ìÅ”Èåz>²Bs‚•†‚àÅ$öTƒ&9§ F9|Î:ó-w„5S¦42£ÒhDf1cpk¶'{Aét/ïÄg=œ \wB%Ùq`÷óÏÿù'Î'ÔyDˆç]ÿË_‚?Óoà±h-[W‹ASgå,óˆÁFTšécK¤Öl®qÛÏ´œSØ×jCtI'11l§¨7šN'Í®ÄCÒ@„)Ü©úëÕ2Xw¬[_f¨´¦Ÿð•VéQf+zNæ;Ó;)E l©UÕŒ™µÊ(­´€R¢[ì%­îå/Ǹg9·ÿí6·X`¾K•DÒײœ½›ÄBPZ9[`:ÖÔú«§“ì±AįòA]½ê%ë4òb9FО.«cpÌÓì¯}Ìhýø5§L¿ÉÔ5«âR 3Ò™rY:¦åÙlG˜ÆÐÅV««ÅZI{¬KEµÌÈåÄÉ—ô°Uç¦t¤¦ùšË]Tå² ûØ‹'®­\©Z¹¬xÔÐV `–QzÛ yNðZ: Ëo²¹¾ý¯ÿ.û–.=Éq„ó’ÐpA’¬òì“ÿw¿Ù'«ÿ<ýANç{ÍÛ»ëõ?’u¡Ó—Èàô릸ÿW¨îgùõ»6±e°‘Q¨V=ÿ)˜XÏèSCÀò–®'¹Ž0n[GíÙ/#ÐÁÖ!|«t±A£‹t–¶uvÐò¨:k®ŠvYŠ:P„.²Bu $m‚ îGÕÐMM…äõ!© ™ÏJô‹øüqsLz –ao.I 4FÓãCÉœûTÇ–˶@Ͼª[&ÀÈ#‹›r%i +ô"¹CáíÄû°],ëÞÂk*SØN¸@SF:ŸË e|xvÔù0í“ ÐvÌÑIµz± Ö]ë¶O£˜¢*=¡ Ñæi¬‰+¢1Åt£s*à«AÈbÊ™5•qtߤV]¹äåÆº‡˜ìÌŠuÎþ ¬`õÍîXS¦ÎHIˆÕrY…º<›!‘q÷-wÈ‘Ò Ž•òÎÆ].Yk¦‰g¤^ë.ƒuÛ8R #90¤P.™ZÄhL$UfÎàý`Ûgæ”i[³Àµ0‹ÆaÈ~övi/? Å5ûÆIüœs­H j…1 ;"]^mHÔ\ÿÞù™¹J¯n5Ø‚1ð¬HçÙ8儎µP~Ò~œrJ`J>æEs»)§bF5—¢4å`ª•eºâø£0uj‡ódŽUÏ0½š;”n®Qß#œxZ[$T¡‡ 5<ÖZÂ2¡pƒd¤eæõ:·àDN1óÜcû³Š]hu6Z''ªÇ̃Zá™G,³Œð·„/V7¶º\±6¤hO.äÁζ)ªý_<Ôª¥RSnB“¨7lò°¦_³áNª RÁ®‚nmÙ£žŠXXî+pÙ¤Z×Å=Äœ)nzfБxÞ?±i­ä ƒ´UŠa¬¬ g8º'RÆÝºk¹ÐöòÜ/ŒéÛÆE3¼M¨J+©gD¡ªÑÇžiUñ¦ (µªxSÖë.ƒu[½òàõA•PIÄA¼*¥ˆ¶I„1DàŸLÔ2Á@Âb%LÐJ¹ÔcˆÖ~gâÊ6…hÅÇv¦ g `S `’\!a:ôÊdà9?LòÁð~“çÒLý±~Ýçüm²Õ°Êò®DB0¶¸¼O!©‰¿§ÆÙl@ž¢!+Íf Æx~¹Û00”[L~ŠáÓNtrc”Æ„ô‚%Ä\L ‰•9l«‰<+kVm÷Ú•pæ¹HŽ8Y3GvšISe aAœ¨Î|Yøš§ù°¶³BQ[VÚawªˆ•Šåƺt¹ºl¹©×]ë¶î“¡¦<9}Sƒv‡9¨†XÂ] 3E%iì§ŸûQwcò é0`ä SÍù¶Ó˜ÌÏ@8ßtÍÏÈQ7®éúi,ÉöpÅ’Ìý0¡´ø%2î`ÆŽ²$›^§'-É}Ã;øsÆÖ¯ÁVÛ#‰>=cÇj­{ÕnKXŽïãS¡jÖp%0i8KS¯èÆ”å¿ã‘ Átä⢴æ_Ò:•§teZÏir³Øÿ–ìóÛR¢î>%ûõv÷ùí§Íaóa[æî?í÷»Ïôï‡ãbÌ/Cÿ·³zú%ÿ§\ªÃÝwõ®À¨-«=?ç“2¼Ð±˜Ïp÷6AsÙ÷3/ ‚Å¥ø‡ Q´¿ß&o“OÉínµ:¡̃?#ç–ù„ÄÝñ‡”D‘{¡:Ñ/3è$ˆ2ûûL·Hº¯QúyqZzªúû¬²†;tÌWZpkÚîqú!4PÉíjÂa§¤ýîèFȇ°¦1I/±À€ýsâ™õÏ¡3‹ù¥žã´RdìAúeâAúeè ‰Òl"Ïq”¤]øý2©ðûe˜ðÂoÂášRôé¦ñ¢R©€! 'Ë p—þêTn¦·FÕW1Tu»®øj×\¹í…Ûûe>AM>`‡€^µX=z*òÜò?{nÚ¥§ŸiåÐ?…~ïŒÁÏ ßÏÈÜý¤Ž£n–ô{Ø×ºýE§A9öø^qŽÏÂ9Žüiô´Ž£nc‡uüìÑŽ£o|¯&XGýAƒ³þa0ÏA@õس”M…{±WäãçŠ|\šŸ]b²C}ì)(gã“8ôã° ê=ៃªõŠ€|rÔÏS¥7gõÊ@òÂQ£^ˆŽ(,ªö?èq á\ˆ…±>9\†Aúž!r›7)"r¤5|)&rÔ&×âéòìQ‘ûMc—MˆË@›Mì¥â"G—'–ùð5†ðNÜf:™9ºÀ‘ç%á#÷›ˆˆPõÀæë¡¡¼tŒdo‹ßŸ4‚‚ò­à$G½ümå+š"l#[‡º¼¾+ùÿ‹°’Ï@ñœ,y˜Š|)\r«;&7èÈÓC&7)çÏ49æl{1lrt.Üg+3Ù0 òRèä¨5?5â ³“Â'Ÿsö4=€rý¢3†²s$ð% ÊÁ¹ýè0ÊãS…×dÄ4O‘˜Œ7/ýSÀ)·É)•#}&­.D}‹Zqß$§QÝ8ñŠ8D~‹X;)}Z_JÊŽƒY59Õ‚¤"*oH_Á•KÛ®É÷¼.åÀo`¹HTÈ%ä7²Üºä Ìr441â寻g´Ü!…†f÷üf™Nõá–G”˜/Xýé±^KîmxÇ^W§Ò“ûð”4Aù6`—Û•oFÆ\T¾èeo®O¬L44Ûÿ+üry2õ„_îwæâ"Ÿ‡¤™{‡=æ¨!ÕÁ+"j!óL#ó<„iA˜›\ÿ^a˜‡Á0GýJyP>;¦B(æ&_WÑãQID­hi/ ŽÙÓ-GÍ=Hæ&¯š´JtyV—'3¬J‹~žãÏ|XAñnv1{ÄMÜܾÝz ›º¹}ëý¢p7xs;çNßìñÑ+€óôÎí ý ´ç@8hœ’« ‚8·›–Ÿý¢‚0ÎíÃøÖrîèäKZRʹ½»ÏÌ9êÄ` ,êˆ)º Ð9êpÄ HçÁÎ5OÔ¹-À°Îã…8UÍÁOu4B;G-àu€;ŸtV¡Ýnx>#ùÚùÏg${yä¹ß‘â1OËœ>¸+j•IÌ5!Øó9ª^ážÇ„{îÉšð “$WÊÜ?öíbÐ綵ū§Â‰iŸ ðs['§€~ŽøÙðüÙ?÷›‡2 ]0—>¸?Ë\ Ý'Ë‚@—ÎéŸ3 ôÀ99ôÀôjCAG¯`Ð}À û9 žñm‚ö:#~Ï“w º!V(Å€{pgz"=£ýÃC~ì¼ ²™hS€CÌy1ŠÖ‹š>+3Õ3€šn;3lº &бy|PÌ(¡>3ðD„G >ÞéÇ)|(¦Ê å{ûúÄ'.åÐî´MnX#‚œ8ë䯋ûÃa³¸ýóö~_înù<¸ì¾ú)ù´Y7»[Ü1S7´þæ¿{ƒy•¾òPÎM!º;áM2ˆî°»zëà?-ˆî®&DwžÔXÝaîf1aR´Ñq«¤LcŽÄ:w[©Kn±)w m4±\˜[Qô?ïãQpªàºmnáæ»ÝÖqk”> ¤Üáýó9S^ƒG¦tÆ\žæ´ Zð ¦CôâñÏ Ý D±åQ{ñ›˜1 C²/ãèØš1<Ô°ˆ\qhh®ÍŒÅB©0×f}¤ J !V!&°Ð”ê¢@¡%±Ó{ ¢ûNæO ½ÓΛ!¢qY:¦ÿÓBDj? $zЧåa ÑϰVž‰^ðžra ¡÷ð¥žTþ"Ryd+ád¾ü…E„XYKœ0¦Îpáéx¸ Þ¼âÂ?[\ø†åÿ)àÂ÷˜Â"ÉáÂ?¤CP† ?<ìþB`ø†ìç²V¯LG/¾WÌDŠß>…ÓßéÉT½K¡áEŸCY.ƒûØç ?Ì]gDløaQcß~Iî}ÁUÄ[³ï)GÒ(Ķ-‰”ˆvD…]¾Â.ÍbrÇ#1©ÁX Ž»°;Q®pÃÊ«¸/”PÌ¿ZÐ HÏÃÄÅÔª2·©¨•zdSr ?Ik€¬jhF‘Y½¬÷6¶@Z‰ÖŽáLVˆ%,hŸV•#h B=mË8Ò Îá¼Ø;$WQ÷QÈ5ÐPåbÒtè*v‘XËbYíA÷)e™}*†U¤Q¨X~4Pq<ð0–š±HºÞ³“Q ¶; º Sãë5‚Àx;.0ÚU()QY€?> ¬‚Õ뮃uA³s e“bÁί öÅÈ€[ÛXSÚ ÛUš¨@ŸuUåEØ`ùÑo)/¢ÞkLùP‰2Äà±cób…jœ¶¥Ïª EB&Ò8‰ ­0‘@¾€5½4\¯»Ö 0Ñccèºð¼ÉÁŸr´~ÄÔr Ú‡FE¾"$f Va¤'e¨}hTDÐ3_‚(«H1Œa¾±ÒQœ!(u¸V]‡ªb s'=jÒ Tújdo¡8¡Ž€Ä†¨ŽŽpi0ãJ…¨ARÓ2[„¬*çñ®×]ë†É:žæBɯ­˜°º,8Ùl§„¡eOÎcRã„Mkbj˜wøí4 ÄU3êÑYÉ •ïã°ÒÍÏ Ô "|È G ]#wûd±ú%9~Üá%k|©2¿+B*2„sE+©Á, Ì”ÁHAš‚ª¦ŸÝF\0ž¢äš` ¦´} 6ã-ÿO¢Ù™`1B§ 2~ÅÍV€Å·ý±Öcœc~.Íì¥ÊD7~Î:‡â cƒæ]Q¢·APHàïrd4ìä0³‹-m"(TÕ M ¬kiÛ^—[/§&‚ Z<š)/¸·’ª’“6P—¥²L™z"œð(Nä‡=îoJ£˜äüÜ?K‡åY µÖ?ÀϲNG¶Gà >t˜–ÏšD+‰EjŠÁ /´Ü©Ùå1'_ ÉùÂŽq‚™©Xµ·‘” ±ÌÓs†”„n›ï'ŒÇ$¦O÷«“fæ§-Q-Jú"i9&Ôz7-£L¡#/’˜r< õ¦YÎKÔ´íÌÔNKÌwW«d}pß ˆÅM²ú´I>—SãÃ"ïÙÝâ:q !Ð0=áÏ.|ØíWÉþtÉHªÒ¥l­D'ÔÓ:\¸ÔÃSóë$|ýðq±Ú}†ÝDõâï»PWT‹ÆGce%ÉM†Åů.˜0VˆÚÅÕnycݧC|÷¥vûý~¶‹¯ t÷ð隃2šÕ:9ç“ߘ¹ßz%‡»Ï)]І{ŸT[Àë~¯½:xézãºñóænˆN¿TÖè•Õ8½¦65Òe5€€R4ÝŽ €”ÿF÷›ºÍ„ÞÉ]‹>|Ø} _ß9ŒÝxà ëÅöÐTýs*UÒ+ÇÝ6©¶L ½ iä›;fC¤ýíâ.ºÞî>,¶­4¾Y|ÙÜl~OV…fY~†×ãj¤ ¾Üi^¦ñ%_¾bYI a¢PÎ8Gn¯‘³sNÊK¿–K“›»ìB1gf³,€ªÔ/¨{»€ÂU¥ûÕÇ7A™xØÝn¿fÕN"¤.9\ùMr\¬ÇE!FN%\ÐShÊ»ýjýö?ýœ«ßËåÛÿ½ÛÿVhÎXañawœšo  Þjù¥êâøãæ¦ÉLÁÿùåf -¿PªŒ4.š>vݹß#odà/w÷ûm¼Û_ÃCà7¼éêŸÇÍvû7lÄÛ&dÝ·É®Íôë©WY7Nz¾×ËwW'2¸_×y®ÌmJÇ¿ £-ÌÙœýÂ#FbjŽ»YvhyÎÚ½Î9,° Q¢8Óèeƒ A¡ä ÏÓñÄ]Ó¹‹¡Â0„X$Q …˜3‰®ŒÔxÆm÷渉.6l{ħáËóÊYM lÙÙMN˜xØÝÓÓ™H(s—I¿ì<¢(?ÉÔ¶06¬… :Œ¦©»‘ð%f*®»óg—1„®ï¿Ø´¸ú5p5u;Æd¦  gw®Ç˜ñ[ ‰žÇÜàÜNoFG_ü7ÿ™Öƒ]t~åtGQÕ…QÈÿ¿eIÉ7]ˆÚàY›Ü®0é TZ¦ÇãJ-ˆ*‚~ǃO¤•¶ef#4,l@¹q’¦qâúG¬­â( Æœjï®®³/þŒ«·Àb*…UÖ:3·Â`!bçÞW¯¬/±…rÜ2ÂxaòÖb Iš`’IØåFYÇÑGHÂÞ}ÓÕÜOV×Y”}-î@îÎËç§ÛM©°¸Ì‹;g§º~…à]~c§wɪ¿\1kJS¼0#×/i½¶b—¤SÉê‹3ߤSZš~Ò2 ’sžjQEh ²ö¤ÌñLEØ£’õ*p{Œh ›eƒ¬6 ‹eý q­ËF±¿pF[.Ÿ® îiX%xT„ª¥‘ë¸cøe›øÔ‘Úå ’çñ—… 9hVÄ…Î=ÌÕ½ÊèœõÊ´(îÍ -CeÍ2ê=æðéyÃEÜm1–Ì+e”LjEï=0/òÎ˼ÌŸVô£Þßßg%2Èì ¾ ð#|/Ê*'î&i`¤‡‰R”•^æTh]"njMñ8 Ãï¾p$—°àp“^”Ì¿~ù†ŸEëù}ù;ºRÊ“Ð9…t«ÒôC•Þš~×̨ïCŠ̉š2pz»¹€„ˆÎéмb#RˆA‡YƒèåDye§/(m³{€ZiEZ\­×÷ZÀ2îöxŸÉZyÏw/e QÌÅ9¥Ç¤E…¨~Ïï³|¯‡i ƒ‘K㑞Òa]äPE òô©èôïLïÀH+W‘ðô2¶Vª®2wK‹æî& ë-вÚdžÕç&Vsž yÛ~õ”a:Ökh¶tDffÁü'fÄè1:W1“†8/ÓF½8ôdC5ešž25æ?9Ç¥„Qa Šþ¾…·­åÌ…‘mÚ1‹q!oIè1EQöoÊYxƒR³Sµübµ²÷l,BñãøJC-÷ÊŠ§gïÉv|%¡Ø×£ú-)[aÈOÊW¸u6Ôñz>‚V ‚‚g¿Ý±YEæ’¨É0ã¥Á($¬- «×UñuU èPÀ}K‚{á°JÖ(éºÄ“f5é$y£lÒl–UiL$­-rI¹ ^'—‘ƒåfØõÅÎßX’–œÄ,y]bIb–ˆšX‚kK’b4.V•\KLÂÈš7ݦ÷¦ûUּʚ°¬Q\¿ÓŒ ”5A{<§.{fÏ~E2FóUÖÙÔœ-D¶iU0¼¹Ðb†š)ìÌÍ(êNq™à^ÙéK*ºðÐ{N‹«õú^ X–ª· ôqT«ÒïÙÙ :àtgÐÝÐ’“WˆªwœTõ“¦. .Ž.YO&hVEÑéKª§ƒ~g­pm P~¸»œÊIÿW’>Þ¦>-t f´õÊNw¤Úº»‡Î\Ež]u/PªïJÂ2̶«VÔ­F´¨V†¿ŠµW±vX‹\.«™“èPVöØ„‰£“ù”7ÁTQ”ý›Ê"wƒ3`5ž_¬VöžEReªÜ…¹£Š²âéÙû™nñ¨´Ô×£ú-©8béôw zÈtj:P©@bðDدfé?©0ºJ9a•8uS­Í«-Oª+›Ù NÝ; ‘ø¢0¿)•Gx›³´ª5óìÙ³ò ÒH:·3­‡ªA”¯»ºW‘ÔC$q ÉW¥”ŠçФ ,ô …Át6*˜ó•i¿e¦í>ãl L ôܶèµg¡'&N¦ÄÚÌšm:ñEÙ¿é ën೬Ë/V+{ÏÆ¢\Av¦hê•OO߇ÃîÅ-{†r­‹ëQý–t…%©å­°Z;·V||Öi¥6òTþ“®°X—¦fy‰‡³žÔý¬²Èµ}íªÜ5‘wþURø…ù=éú wI«f®*Æ ež•nèe›—\2£N.»ùOàH¦¤åÌåo³BkÓuÎ5v8¯PÒzÁÝŽ"‹ ÕÚ´+úTö•÷pæ]3ÃŒV\rØb 8‰®ʦ»6Å7hÖb–+ì@cɈâÐÉ,ÕÔºì Z=YÂÃôqöO–bö:P\€œBcê¶H›˜‚ƒŠLÁöŠB˸‡¡=Ô/&0V¶¯RâwÅÐÀuÂô6ÑèZ–µ1TcÄ›P’9È«ö1ÜyïH½K’¤×Þ«wŽÑv÷ôé Öàú|jnˆ‹¯^F¡—Æ`|¹m9ñ5/7ô¼aì<½÷\~<ŸŸ.§ðú ¹ýäõgùƒO+u½gWòÇ–_¡Áý¡âáÔæUr|¨ç (9>Ô"š’*Ûx»x&2ªõ€¤Ÿb›CDP$Ô}ÙÎz»~6†‚Œô¥`_ú· ]`È_ ‡‡HMà ˲Y)Îlî}õ*0&b¤¸¼2)E¤Ñ“Çõµï:jHQÄ(Ë¢u\B,D磘ùS)Á­ÉSc9—hüd›¯ñì)&þ̶=w:ä츷ý’…˜xáy<† 1âE«fŽqú Ô£å vlˆSQsS*^ÍP÷á?dé´I v‰ó‹ h¯5쎈ν¦:AC—@Ö»ÕZ§¬çA”‘@À"‡ÆV£-#T‰ûÕÿ öïk0@eЋ97hkBs e±ªÌ¾–‰Y• L0 1gJuÏ…ŽÇ‡&ƒÂß{µÉºSãþzçOôrb¶ƒ´¸çϦaJ]uýf»‡Éz9)Ï¡#o×)ºd×i«2lj’nSZ„XŸ÷éçôéõ_W©å¸][M¾™ÀN¸U“¯Å5 kuC)1SmæÕ_²è’ ‘PôSĺFqÈÐG£Œ½èâ᪤Ó<ö•ahøè¤šÆ±÷ªôþÆIÝÊö"BÊ~^ ƒé­{ï0ÖíÇïþ?íN±žg‘Carla-2.4.2/resources/256x256/000077500000000000000000000000001420416754300155225ustar00rootroot00000000000000Carla-2.4.2/resources/256x256/carla-control.png000066400000000000000000001001131420416754300207640ustar00rootroot00000000000000‰PNG  IHDR\r¨f pHYs × ×B(›xýIDATxÚíýy¸G}'Œªªûœs÷««ÅÚ-KF²-Û`ËÆ6Á6øÆ Cø ¿ÃL’™áMÂ2!0ÃL¶g²½y’É$„7ä!²„?&Á 8`0ƒ,K–e[û.Ýý,Ý]õ}ÿèª:ÕÛYî=Wº’Ï×>ºÝÕÕÕÕÕõùnõ­*FDXNÄc‹¹ýR׿O/ Z0hh™Ž]êútøn@Ýg}ºÔ hZæ½Ô á¢3€žu‘·O}ºØD]¤/+†pÑ@ à³…œïÚµË&Ôëõ>#èÓE§J¥bÁ³{÷ns˜T·çqâEæ’2€€ÞMgä.À†=Ž¢¨åó£(ê3†>-š<Ï£6×íq¹\¶y ƒÐÌÁ-ƒRQp'.!H—Œ€ŸåÛ¿»ví²`7@7 wÁ¬”²ÇRÊ\»yúÔ§Åç<(BÊËc˜†a†1T*J1„¡PÕw)ãˆ3ª?4襔J[ðGQdL©Ï%ç\rÎU†Ò¤ !¤ažçIch¦ \m åX4èŠt ~cë‡aÈGFF„¾Qõõ±g@/¥ô4è…=BØs vÀjB« ¸uÐЩЧ>uBéüHJiÔ~@1Æ””RqÎ%¥”Š´Ô—Œ1E‘BD†!"Ïód½^WBeÁìì¬ô}_¹¾^2Ž@7àw¥~€_K}Ï÷}!¥øžRÊSJq!„§”òˆHpÎ !„PJ hð !˜« ètæÖ‰sîÖ1}ܧ>uJ ɯ”rÓ ø­ä×y”aœs)¥”Œ1©”’Œ1É9¤”‘¶ý£(Š"!D$„†4 é2¹¹9i´^3Ž@'àwíý0 Åèè(ÃPDQ$J¥’¼ïûž”Rh°ûJ)Á9÷•RžNœsˆ #àD$ S@ðö/ç<-ýûàïS¯(Á\-@)Eˆ¥}â¯;cÌ=Ž”R‘f çó+ !<"2L@‘ÀBŒ ßèûþá‰1Îňb”16Â9+;Š%úœ¤Á*ÓXv²±T7Õù9çhþ¸h ÎÁ…c B$òŠø:KååŒÅcÓÄ鈔:O^³±Íµd>·ç6óÅU ¤â¿J5Ï)R©ó¼ëR*q®1ݾœƒ1®ÿºiÍt}Îãà\çcܦÅyYN^®Ÿ© ìó•þéº9çŠTA^ý^î½”º×¼oæ‡f[êsE(¥f”T3J©i¥Ô´TòX­Öø¾RjŠˆ"!ç\Q(„uZ à1Æι`Œ‰0 CÏóxEÌ÷}AÃÃØ››C£Ñ€Ší•ËãnÝ‘XiÉr¤¿ÕoüAxRJ®Áï{žçEQä !|>c¬ d€ïþÕ ÷}ß[;40øR¿ìßä ïjÎ9׉L§@šÏ Òc€¥Ó[˜ iõ¡…$b]ämù].þâ0”z&-4o7+¹±¶ ]J˶–u§ÖçSv/Jœ±ULðUœ3qx$PòüŸ”J¾IùýF#øž”ê…Œ±@¨…^È ÆXÀcc¬¬eÆ02Pòÿ/Ïã·'žKvÁçœq@kÍ*ÄÄ9‡ç ø¾á7=ëÙ/“|ï´q碄ÆÀœg@{¶¹õN§½Õ ŒÀÀň)(Ä÷€®bæÅ”þ%:fs\);ñôçݵEpÏ]Ov|¿ã匠8Š@ñu®ó«8ͯÏc—8`T0Å´«†Ð+ÄLŸ3ûq›0­š)Ó¦fx¦Ùæq÷ÐùtbϽ>6uÒ領‡ ñ5(ŠˆÇ£eöXßÇ@àJÙòud<¶FL·Ù¶Ûñh‚TQü#ÙJ«Ê%Æû±J©´¡†%¢YCŠRJò<Ï„&ÆEQ$t¿¥F£]»v±¼EJó´€V@‚×ëuEŒÓodd„A J¥’0à¢È ó•c-ý+*Œ± gX[)yÿIp¶™÷ÓŽOÎE:†ð|c+Æ1ºbƒCCˆótvóoz¬ÛœåJ´œá6«]$f¯ÙüÉús¯t)U·Ö º¨ ŒôóãßN““pîÉó²çH6ÃDâ+2_+sƒ ¬¼J=&OjRò òë”8+¨>5 Yž|”Ñ)ņ89© †tiY'jóºR„°!ј QŸ!#‰NˆsvÛ`¥¼ºEòb-ÀJ~$¥$¥yž—ÐFFFhnnŽÂ0$Nœ®t¡*²ýwîÜÉ«V«< C>44äAà•J%/„(EQä_ÛüÆØ4øǵ%ÿ¼à|,–¢ñ0‚s&fLX€3ŽUW­ÆÊ«VahxÍ®›?Ö 'GüÙ@–V@K–Óüé’†“ˆY$ø)Un¢>9×Ò±noÍ0H·ªÝ?™r»Yú[%øY6ò“Z?[ ”ó(*¸/y«Õ'„ 2…„õóÓª3 '~ ©‘„B€1L׃ð5ÁA5u"ªyžW'¢:DT÷2“‡t¤ ‚‘T‰¦vfÎ0÷/¿öÚk¹ëõôÂ0ô|ß÷Â0, !,ø‰?`ÀgXSòØû9c+¸”aŒ3ÏýHDɲí!QfäºYn~Ùö–?KeM•} *¸Ï¹¦ïËb›šCјÊ#)`¥«7ã܉Ôç{9‡ \3¾bôß_¸0ýa=ÉHêŸÒs |©'ÙDQ$•R*Š".¥$)¥Òûh4;ƒ~L ¦30Ï…n2²]»v¡ÑhØ…;õ2^ÂLëufõ =³ÏWJ•ÍÏcêõŒáÎDÁ ·=Ãú«7ẛnÌ€?nXð7½¾Ê^3Á|DS&€Ò!ý)ééTò§-½Þ: Suƒq>5Ç)Œ9Ódê‰k©%ȸp(™¯Y¶ó,'Íý1rýöú?r½ù£L@Ïò9<öÞtÙ‰róËeJ±y÷¦ÊF¦Žú:Ó£ ¦®·ŠN¶MÆÜ©xЂtSHŒX°à7'Œ3¬Þ0†á("Æ|Ï»}bÅØ¿PrpepæéIu\Jé•ËeE‘³kk6 ³»VÖ»®©¥ `<ÿfõ^³j¯”ÒÌÑ÷8ç>çÜNê1ÔVõ&—Çè('{¾uÇv¬Û´!¡î20@S×;3‘ÒÃ4d‡ŒJKÈ8!)e›_Å޳’ß5'l9M&Ú Ô’¿Éÿ“’’?­mMÄé!VÇHk@î{!ç5׉|ngt‡@sUld¥3ЩäÏJçÄaKÉŸ¯1$ÕòdÙÍr³õ.”ünIzØ,)ù jšÍ®Æ Ïkòv–gÉk[׬X3 Ϙ<=«ïO¶%c •JùþÊžjµö €1Æ"3ãP¯¥¡4&eJ @Έ@‚L0mžóϬÝÏÌê½zµ^NDÜ÷}®ó°Òߌý(s’ÿ·,1ÂÀÀ°nóÆ–à·ÒÞ¨ÇÌH]7’ŸsYFh‚Ë€šQ¬ÂÆ›œ pýòœH 5Ӝ⴦$#ÛyçæXY7¿½f$ 3ÇM ‡Ù±s} 0¢(yÍÉß”JfŒv ™±t8Ò©9žžN³ãÎ,#Os¤l;ÉŸ¼¯sÉ_ 1´ü  œ˜þ~Ìþ±Äyü½“%Å÷:ßßÎ\d–$ü¦­¡7i ‰€GÈ šbc#Ã?xt­Ìó-@xžç™u3¸RŠ-@OÔËŶÁcž À€8ê/Š"ëüӜŬé'¤”ž™Ó¯>ÅŒ€¢œá†Ä[ñ曯œÀÖÛê7cH€Ôlph›ß|6£®7?‚îè7:Y´44 4Ûšoü,²_U×Ç ÒŒ(¸çMÄ: jš.¶¾ã‹›T‘í5Jæ³×Í{ ÓL>¨òTå|5ÁÖ=øí›0  ÁlšLʹ7}R׌Ì6vêêVIèîM´šîhk?ñöf„ŠbÆbŽÑÔuÀÌž°TdØ©¾aÚe¹õ¦Ü÷}³ =§_O÷-( ¥þµkÀÛæç•ÁA\ÿÒ›M‰ì¡±ï­Þfõ0æàÌ8´âK L;Þˆ1pûâ"8kê VéN8üš_ÄuøeÔ~gôpÔþd$sÂy–4 ÐÒyf‡¿fL}š†‰Sœnk§¸ª²SçdbÚIÆ’÷u.<Ì);©ö³ì} Ýžå×)™1}ÚDq » ±S¶‰þcˆí×vÕ~Ê8¬ J˜”q§ÔøwúqøMòŠµÃ¸pb”3ß1†±‘á=33÷”žJìI)}Ä&ðSôr€6›æâI‡?vÜx„ï%ÁïØüðë/ʘþêF1Ðß4Vá¹õfF¡mˇ®Óx¦ž›ÓqÚ¿ ¡&ø3þ€ÂÑ‚¿ ÇjOøÁܺ;×r“—–î‹­ÁŸµËÝOÕüM9S¶ÓÅó«Wø.‰ŠÃ?2àg‰?Édç^¢8B±Ô%åHn› d4ÕäWj †8´˜ÅïÝtý¤°—|/ÃÈÊÌœ­eš „çm\µr⮳çÎ1æsÎ}Í „^@‡K)…ÖÐÕÈȯV«Jo“—kÿñJ$®zÀ€äØêÇK¥ÃP0Æš3˜|½Ž_‰)ùú”aa_ebõ*ŒM¬È¿UûY¸±ËxÓ°ÜHmg¸Îªùºu‰8`Và1’”`<ẳÖ)×Èšláà/’üéë8üœNZ,ùY³>‰÷j&kU¦1”ãðkþ”ç-“'þÄ”}xÄŽddyiñ.m%Þ»¤êmcDt/¬³˜xÜêÊÌ púªb,Ž0&ƒùæJ÷KRv°Iû ÁsÑ©aC}Rªx(U>n—ìË>I—™“f=‡J)666Æêõ:çœs¥”v”2w¹nmŠnIä|’«6®ÏÄõ7¹büÜéW, kõ̶*c¼Ùá4·Ë6ö¿ãa4g·:á®uT”Íoz>å© ¦æ¨óð§êt#Ys2ß>&§ül9MÁêHo šbÕ<ÓA;”üMìækœÉ_âd½[?ç)©6(®7é™qGÕà׳ÍÐ*iÍ“@zDijAÉ0nMãýS&6dø>Îêõ:Kf÷èCÓ ŒÔЪ«Ö ~µÛ‰bOÄãpQÛ ze ~ámpÄŒÁp7+. Gš‰ÂËÌÄsìÓ„°Kt ÌDÚlŠ\JõJJ••ýîúßø¹tµ¤\ å4q…ÚŠ –šÎÍÝ"Á¤µ¹·­äo]Ý¢··MÌš>£ (&tzìBÇ(eû]lHHÎÁ¥öúç3Q¼Ø £&øs*X~e%/- \.] =|4q™Ø+V¬Àìì¬u¾êU¯Â×¾ö5[fË8£Bèà ÃôÖ] ±¼ÊqäŸûÒŽÕ "eíqWÞ™FÓ±Ê` ˜™žG½ 9Þoþ¸ÿé“ ëë²uœÝÝ—Îßí]ÝßÐE!Ôõ½¥ŽÑ¾ÀvsÝ5pÆhô?äTˆÛ^Ë<!8"gàJÚQi 14Ç”k~Bì ¡2N@Æ.ø˜žW#”RÜaø•Jņñ›{°`K 0;;kG\ÕÁì·gÍôFÚAc9³À‡_ò‘¿c&Å“z¬¦­‹`6˜Zò3Æ6"ÔªùC$}êÓÅ¡¦»Ìçf¨ÖAlâ=,ž&ì(—dG Rb(~ûëNKâJp1†ØáB&¥LhH–gggÏl¸†ñ"+•JŽî–²58€1À Ú©\® Áñò<ÍhNÜû­Ús¤Þ¨O}ZdV·2ó˜]' 9ë"‰õö’ßMc^>š¶÷áÀ¦T*YܺXÎ}‡¢—OŒó}ßž£éˆL4jîu9V¹RÎ] ˆO†!˜ê›¸Í:³³> èÓ2#f|SôÜq6»&©Íšº¿øÄ3í£˜“ÎGuÑÖþ׌£æãË+z…ŒÀ. Ûó<9ö†>&`¹«”Ê•Ä+6CK›cóÍa5jÎCÓ$HLwuè{ßûôží}êÓ’ÓÄÄ®¹æ{K~‚‚ÔÎgΘ^çÁ8¸c·[ð°Q®Ísfþ–|Ï+‡Q4¯7ÏÑþoÆ\m`hhÈn"d± $µk /)eÚþ7c• ÀóxÀéqKcÿ»oHÆÁB`©·63«Ìk8*ë}ZFÄK›0uÆãÙDfJµ™˜}íüú9NÀøœ ¤Íó¸HÇöw1 ó<•`ÉØÿ邜c¦Gl¾4@ÝÉ­ ðSr‚90ãø† ¸,°þ>-7r×`œÇë$u¿¬™bŽû«ü‰à |ó—9Øs…²¹ßb·Àþg@ÊJä‚IÍ%‹uîwß05Ôg†™Ó Œzš…žŸÍ¬)Ðç}Z^¤ á<^iÈ /Çà7nq=Úe¨ü&@®åS̓«þ›K.N]†`(qŽ(UQ1܇'‡ßÝM¬™ŸÂCÊLˆpü3hÐ\[ä¢ >÷©O‘NÜÆ˜y)”X^ @¬áêÙ©­À_ÔÉ ¶WwŸ*‹:— Ù<ñ£‚´tÒçJ~²³üôŽzÍ{u ã¦ÁšC,W ­\¹ž×Mó/ošŸŸw·«ŒŽŽ^¶ßlnnR¶ÞÖ+Æ8‡Y³"1@%Ľ …ïüùö¿¾ƒåù#§†ò¦çX›!‹˜‡kõqÝ¥•’à7ê‘d[€YM€ã°wâþ¯ºþúë3€¹\Éó<4 ìÙ³'‘~Ûm·azzúRW¯kÂSO=… .´É©5€øP¯ `=õvå꘺A,@4s1i0\P(‚ŠnÈ´€Ëq².ýÄÅ¡×9\ ã„ÒÃ*1£j.—uå…I)155u©«Ñ*•J(—Ë™ôz½ŽóçÏ_êêuMílpC±ýÌ2(µgª™3 T?+/1yZ ürÍï€AÞë'ÞÈŒó§Ràb;%4—Ýlº;ú€>-72j¿™XÔŒt§º[êü­f†t¢ ·ðþ'¨##Ôµõ‘‹ð¦@!øÍÄ ÄÓ€5'µáB¤çQ[[¢£/Ò§eHÊSxüÿy¼÷σ?6س⮾újŒŽŽvw“]šŽ%g‡‰ÉF ~$`²ðdbz p;Z¨*Áˆ(¦çV¶•äo6BsAKÆxî}W˜ð¢"y›\|Aišfgg{V\^¤\;2‹ÏØ®l~:ÁݛפRGpÿ‹I?Ë)#س „t4 Øêý œ³ðEFíÏ ê嘛Cv\”ú< O˘Œ Xâ>'[ž!ü†Ú¨û‹ŽŽY,HÕ¦(0o.tŽV@I‘ˆH•Ò§>- rv*²kÿß3ÿRÞ#Z™‹£ž2€ü vþ´ãƒŒÀÙŽ¹O}Z.”}×àO惿蹽¢ž3€œêÚ×ìHò»×R+³ô5€>-'¢<ßV¯ÀŸJZª8˜%bY-À22_ògZªÿ>]†´ðw´Xê(²ÿãFp_×mðS:gAEŸút‰©µäÏdN¶—üXâØÞj™¡Jw ´CðgræÜÛ§>-'ZµáA@ÝÐEðô@òw±:lŸútQ©çàÏ . Ò êÍt´Ì£ô»µ?#3Ôç.#b6ìèÙûR¹\F¹\F©TB©T‚”A Ôëõ¶3Ãúԧܹü]ƒ?{°tNÀ%™šÞoÒ¶`wMq‚„õn¸îšüX2ðsÎ1>>Ž•+WbåÊ•ð}ß]s-qLD˜žžÆÙ³gqîÜ9Ôëõ¥©TŸ._j3©gAàO Ö¥`½c­B•}Ø™cØ•RÌ:ênü³•ü½µþcX»v-6mÚ„R©”:xQ„R@z¢J¼ )瘘˜ÀŽ;púôicËeÔÆÇ1½~=fÖ­ƒ*—±nÝ:\uÕU8vìž}öÙþÊÄmˆE øw—ºKCíÁO?¯ˆ ¸× ¡ç&@"l1Ñ9ÑR µ¿927šp‘øß¼y36mÚ ö|®>zž}~£Æ9ÖÜz+Ư¿¥‰ øããhÌ΢vö,æŽÃ…ï|£O<0† W_37Ü98ˆ-[¶`bbßûÞ÷–\X±bÞüæ7cûöíX·n>Œ}ûöáSŸúTî³×¬Yƒx/yÉK°bÅ LOOãðáÃøÎw¾ƒ‡~8“Ë–-øWÿê_aË–-X»v-Ξ=‹çŸÿøÿˆ'N,ªîä°I›'I¯pî">/ñ²Í?Ô¢ßv~MËß Ø’š†ŒuñQŽV ƒ,!ùÉi£…qÎ9vìØ‰‰ 0Æ029‰-O=…¹9 ­[‡[á°á5¯7>Ž0 3¿(ŠÔj8¿{7N}îsÀîÝXqô(ÎíØ³7Ü€±±1¼â¯ÀO<±d |Ü~ûíøà?ß÷ñØcáë_ÿ:®¾újüÔOýÞøÆ7â¿ý·ÿ†ƒÚü×\s >ò‘@)…={öà{ßûÆÇDZsçNÜsÏ=ðÖ·¾ï|ç;1=='žxû÷ïÇúõëq÷Ýwã-oy Þóž÷à»ßýî‚ëOŒ€KÒ4ùt©VZë ®¿cÉŸº°T–ÀÒ4UÞ²EÎ0Ÿù×úRR¿Ù€z‰åEˆÿíÛ·[ð¯9zWïÝ F„—¼éMxÅoýØÀ€º”D!cv©«F£Á›n¦ë®Ãù‡Æ™} «Ÿ~ƒ.àø]wW*xùË_ŽG}óóó=mÊ•+WâþÏÿ‰“'Oâ½ï}/N:•x·ßÿýßÇoÿöoãmo{›Ýâï|'*• ~æg~ûöíK”·eË–Äù+^ñ ¼ë]ïÂ#<‚ßú­ßJÔŸsŽ·¾õ­(•JèSZð·ŠìC¸8‘€9à‡~$s¢’ˆÕþ•+W‚1†Ä’l ?òg†Wýñƒ  ^¯c~~³³³˜ÅÜÜæææP­V<ÏÃêÕ«±fÍÀàý®úµ_Ciûv :…-? ÑhÀ÷}Ü~ûí=_èóï|'ð»¿û» ðÀðáëÖ­Ã[ßúV›¾uëV=z4~8tè=ö<ï~÷»qáÂüÆoüF†y)¥ð7ó7øæ7¿ÙÓwºRii$ÿe ˜_Ù^€ŸòÚ¦%MLL`Ó¦M`ŒaõÑ£XÿÜsX»kþÿ_û¶¼ñ‚³³³˜ššÂÌÌ ¦§§s333˜™™Ùcht#?÷s(¿þõ(ÍÎb㣂axx·ÞzkO?ÐýÐáÀ™7 }éK_ÂÜÜ~è‡~Ȧ>}›6m®]»Z–½eËlذŸÿüçQ«ÕzZïµ›Ñ×5ø ʹ¼"Y¾(?Ú€¿3ÀÃÖ­[ÁÃè… Ø²w/ü¡!üȇ?ŒÒÊ•¨Õj¸pᦦ¦0;;kA^Äfff0;;‹jµŠuëÖáÚk¯ïU¯Û±gÏâªÝ»íãêÕ«{Ò|ÃÃÃKHí4I)qüøqëà€¿ø‹¿@ø_ÿëáïþîïðž÷¼¯~õ«10ܾqóæÍ€#GŽô¤¾/:ê@í',ü6 k ôìzÂX‹³ä;¥Áo}¥¶Ó‹‡¤Z©#Z·n*• 8€kžz Œwþ×ÿŠòUW¡Ñh`rrÒªú.p%¾û3æ1†††pý 7 C¨ýQP¹Œ±ƒ1xú4àÆoìÉÇYµj´]žúüùóƒ@¼iê¿ý·ÿŸùÌgày~â'~¿ù›¿‰Ïþóxãßhï3Œªýò×}*¢Ì8¾s!Òžsoðº¼"SL üŽ3X"81l›–Ä9oªþGŽ ø©“¬KJ½3 g6_)üE’?Û5ËÄÄDáG„õÏ> pwÿÞï!Œ"ÌW«¨V«¨Õj&PÕ×Ìo~~>q^«Õ077gÓkµ®¿þz!PÛ±ÁæÍ(_¸€¡cÇ4ÕëÅP­VÃùóç±mÛ¶Â<•J7nlÉlΟ?~ô£ø“?ù0ÆpÏ=÷> vöi!T¬ö'ŽÒ8't~3°tËe6 yéVàO¶D–;vÎW®\ ½p~£moz*ëÖ!T«UÔëu øz½ŽF£Z­–`䮆`~&o½^áöÛoG†˜¾í6Àðáñö±zuOF¾üå/ãꫯN8ù\zÓ›Þ„J¥’Ü“¦çŸì&GŽÁ3Ï<ƒûï¿ccc…÷Ó¢Om(ä€ÿŠpÚ—îDò;þ(ÔÝ cÌûkõyãk^ƒ0 ­†Ø.pÁ^¯×3÷6 ¬_¿ƒƒƒ¨AbðØ10"pαvíÚE·ÝG?úQLMMá}ï{nºé¦Äµ{î¹?ýÓ?ƒâóŸÿ¼MûÛßžp €ïûxàÀ*¥ððÄïþîïbݺu‰{†‡‡ñ+¿ò+VcèS jcó7…~ðç¬}—ì]µ— ¸¸…’ŽÅböõu@°žÐÞ$ÈR¥Rçy`ŒaìÌxX¥%t FE‘ö3S~Óv~Ú' „€çy¶ ã7زe Nž<‰¹uë0öÜs¨œ=‹ÆÚµX¹r%Ži“`¡477‡_ø…_À¯ýÚ¯áOþäOðì³ÏâÈ‘#ضm¶nÝŠ'Ÿ|¿þ뿞˜pÿý÷ãgögñÜsÏáÈ‘#ÆÍ7ߌJ¥‚GyÿôOÿdó>õÔSøÀ>€÷¾÷½øÛ¿ý[<ÿüó8qâÖ¯_­[·b~~ŸûÜçzÝM®,JŒñ烂¿€.+'`v €2êMsšOø‹-¢r¹l'ù”k5 ïØÉ”RR"Š" |÷؀٤+¥,à ø=σïûö>÷·~ýz„aˆù‘Œðçæ0†ŠžM¸X:xð ~ê§~ ÷ÝwvìØµk×âÛßþ6þò/ÿ_ûÚ×2“‘þÓúOxùË_Žo¼k×®E½^Çç>÷9|ó›ßÌ é}ä‘Gðä“OâÕ¯~5¶nÝŠõë×ãé§ŸÆg>ó|ùË_^ô<®8†>2Ô“¶è„FFF˜}/ÊôüK¿F@Ñ``Žä·wFÈ0‚ÔH¡ãv0!«~D¨¬ZeÃc•R–H)3LÁüŒÀ9‡ïûàœÛké{Íñ€'®k›ß«ÆóT{·mU£ÑÀƒ>ˆ|°mÞééi|ùË_Æ—¿üåŽËŸžžÆg?ûÙžÕ×%®8^úÑ—.IÙ¹´Zÿ–šlßì=øÍløËÊ ˜»u±{”±ù“Ñ´¢Ÿ•ü­µ£øF|®€R*žlTð3× °'''-#hw/¡R©Ä @;ËDµ ÆX&ð¦OW"Qqjø íÁ_DË~:p~e]µßY(Á-Ó’ŸÙ“ÛŠ“”Œ1(-‰ƒ¹9„a˜ˆ:tWûqÏÍsŽááa;!(/ºcB”5ã!½ºÐBöš»"‰s¼pûKtëÐןŸéí«"]ØÄ§¢Ûƒ¿yÞ ünŸMæYÞÓË*í)ÉoÚÆd-?ëø†F <-yëgÎX@ÎyîÏ\3N>ιµûÝkE÷ÏiFÃu<½c¬¿b¦ˆ3œüƒ_XØÍ·üàÀ‹RÏë®»‹/¨‡à7tY9³‘€.øY¢òÀßä!í'G¸AœÕó }ÕS§¬cτʛ¿®sÏ8üŒÆ`ò”J%ø¾oïKÿNéçøz6€þ›åúªµvÐ5øiÉ·ÐCОCiןm¥7Íó<|ÿûßG†X© W¯c sssKÿû´,¨³¸~êüy´ì€ Í? œn V;'– k¡¥) C»_üŒj9÷è£Ãsss¸é%À+• *• 000€ÁÁÁÄßJ¥’ÈïA€½{÷‚ÕjŸ›C¸z5ÔÐc‹_J«û!,¶Œ^ÔáJ§BÉ4øSY¨=ø—r& °Ô‘€ÜÙÖ»ü±'Ým7·!²{´£³gÏ‚1†Ùõëya£“Œ.ØËår.ø144”`† ¤ÏÿáþõzëΜPß²ÅJÿééé®›Ì MJ)íÜ3<Ù ‰A@)…Z­†™™™DàÓŨˉ¨Eb;ð·¸!‘ý²Z0»‰7k ~¸£Æ mJÄ tÖñΜ9ƒíÛ·#ªT0µy3ÆÆÙÏC¯}->Œk®¹Ævn@cTß÷í°ŸI7~‚R©”Ñ öíÛ‡G}åjן:òö1œ¿pל?ÕssÃØ{éKÁÃ3Ï<ƒjµó]+Â0ÄÄÄ~çw~'þôD¥«®º o}ë[mp“m?Äô+¿ò+üfÂÙ2¢(Â}÷݇mÛ¶eÌ0 1>>ŽßþíßN€¿Ó:¼8‰Z¤t~ëîºÈC=Ž,j¦<ðç8üÒ‘€©Fì”T«U;v Œ1œ½ùfÔV¯FøÂ ¨~å+¨Õëxä‘GpèÐ! YŽŽbllÌþ̹¹f˜ÀéÓ§ñ¿ñxüñÇ1†Øyò$Èó0ùú×¥öîÝÛq›¤”xë[ßjãî]À¥§#—Ëe¼ìe/³Cž@,ýoºé&Üqljû†õ¸eÜyçÖÎ`# ÿëý¯qDcêùéûnºé¦D^ÔD9 ]‚¿à`IgK ˜x™|µß¶Ë™ÿçÄZwë |æ™g011ÑÑQå+qõ?ÿ3ðÐC`çÏ#|Õ«ðä“OâСC¸ë®»022’˜”çBࡇ¿øEA€µ³³¸õØ1xJaê5¯A¤×!øÖ·¾ÕU`Eؼy3ñþ÷¿+W®Ä;ßùN\}õÕ¹R¸^¯cÛ¶mؽ{·¼Â9ÇOüÄOäÕhîýRJlݺ/¼ð<σ”›7oÆúõë3e¸¿Ã‡ãÁÄO<·½ím‚À®-ð¢¥Eªý­Àoh)W^‚HÀüVJÇõ»›„ÄËÿ§~îÒ`ù ÓŠ¤”ؽ{7^ùÊW‚W*8vß}Xÿ/ÿ‚ò·¿ qð ¯=NT«øÇøl»öZlÙ²7nç<ÁNŸ>={öà›ßüf¼êNâ–ãDZ嘺ï>Ôõ¤O<ñD×CJ)\ýõÖ¶þÔ§>…_þå_Æ]wÝ…w¼ã¹@ ‚•JQAjµŠ 6dò áÈõ°Vrë÷¬Z­†ééi|èCÂþýûqçwâÝï~7„¨T*/n3 oRÏ‚ÁŸ?aÈÐRM Z¢HÀ¼FH‚üHj ÙusZ£CªÕjؽ{7î¸ã°¡!{íkqÕcaøða ýíß‚n½S7Þˆ'Ÿ|?þ8Â0´C‚sss8wîjµš*<>=]Gb0 ††0ùº×Ù ŸgŸ}6wþ¶Àó°iÓ&+±ï»ï>Ü~ûí8pà@®ôwÁ=??ïv¤§¿¦ó1ÆÀv¯™¨tò˜á†nÀÿø'| ƒƒƒ]ù:®Dê|ROrP;ðÐFßï XòHÀ4€›j?é­ÂÍug+0†Ô] § .àÑGÅË_þr âôÝwcvÛ6¬|â ÷»سs6`zÝ:Dƒƒ˜œ›Ãi)…!X­†¡ùy¬8k§¦0V«|s·ÞŠù—¾¤½àO<ñÄ‚ÀÄÒ÷äÉ“ à6mÚÔR¯ê‡f.Âüü¼]ؤˆi¸¿™™ûÍòê.㦛nÊ-‡óön$„ÀÀ û€ËÀÏþôYž/+ÏïugKèHÌ´GŽÚoå¼ãHØüŽI°È±‘™™üË¿ü n»í6¬^½µ p|à :„¡Ã‡1zø0Æôzy ò ìyvqeìü›8Y(øsæ,ïéÀŒ¥-ç]ÉŸjk'‚ƒzCAà›ßü&Ö¯_;wbxxó[·¢ºmX¡ræ ¼ùyxÕ*D­†ºïC A !Z½Rwt¦W:pàžzê©E{Â…xî¹ç099 …`sgÏžµÓ•ØW±{÷nÜ}÷Ý-ëþÎ;gûìEZyð¡ôèKöÞó{‹géwM |1à/ è%]”HÀ¬ÚO‰kLOÿMú̬¼Åx²tâÄ œ€ùùy;v û÷ïï™í+„€”ŸúÔ§ð†7¼¡­ê^­VqäÈ‘„÷]¯|å+غu+†††ÚJñãÇ# Cë4uøÇüG¼ñol{^úÔᤞ.ÁŸGËÞ ˜ë¼°¿”? ö«SͲa9fD/ˆˆð /à…^€ïûX·nV­Z•ó•RZ ÌÌÌàøñãK¶ý·ïûØ¿?&&&pÝu×JñjµŠC‡ÙåÊ ™óO~ò“¸ÿþûmtcž?þ<Μ9ƒ¡¡¡Lžyæ¬Zµ ;vìhizäÕáEO-À¿pÉçxÙ‡·¨ ¹Þ|GÕ'–H3ïïF'–[‚É0 qäÈ‘Kº?c år=ööïßÛn»-âZ­†sçÎáèÑ£àœç.^Y*•P­Vñ×ýרµk®ºê*ÔS¯×177‡#GŽ`ffç©Ã·¾õ-ìß¿»víêº/VJ›´½nW¿œœ€ñLÀøU2#f£”>ÀÌúÀé–¹¨ñÑ—‚Ìâ"ÓÓÓøÒ—¾ ^TԀ؀®•Ô-—ËPJá{ßûž Ò1Œ!Š"ø¾a½ZQ«:LMMåÖAr¹Ü—ü¹Ôb$`¡à§¥ ô˜°ÔüŸôH@2´7íéo._KJ~rQ¯`2k˜ð\!„õöwB†Q3ÆÄ6t³»Ïbëðâ£%üNžËÊ ˆÂx€ì0³àG ü©ÅDÙ•ü4™õCF¢_Ê:\ùÔbFe/t þ<ê%C¸8[ƒe$ó-“cüi“ ƒÖèSŸ.5NçM?s_+ð's/•Ð3в~Ý‚Ÿ²sú| OË’~Ê‚Ÿrî]ÚÕÀ,¡·EHü‰FJ?Ý€}êÓr¤BùÔNò§[LZj'`o@ºn¶ôN$?僿Ïú´Œ©¥Ýž+ùS÷€ßM¾¬œ€yUÍ¿Hˆw FrÐL\²×ïÓE!¢e9©‡I¶'§ãÓvRš‡½n½—_$`jܦrƒ|â4; Á>ø¯Hò¤Â+~øÝ—ºùtç‹»¿@h{Ö ø[ öŠôÎ(\° «öSBíG¡ÚßͶ`}êÓr ê•äω‡»¬¦» !wÓ#ùLô_+§É•BfÒ+ÌÖjiò<ï²|ÇÎÜÛø,üš–:øjé"õyüvªoøãäd)W øàù矿¢fÓåM”zá…ˆt©hvv¶ëmÝrÇø;Þ­b–u(°®aA¥B{­Ã/ùî,Ýj™Ý® ZÌ""— =zôRWá¢P»é¼‹]^‘€,üN#8ÉpU¢t;ô·¤êÓr¤VÑ}özüÔü™û2Kõ¦þKÃXÁ``§àÏÜÚŸ–!µ‰ë/n9”,†–>èe(pŽýŸÿâƒ?n‡>øûtP^ìZâ  ð;´ÔNÀG//ü}Éߧ˃:˜ÔÓü„κûò.lž”QO©´>øût¹R'3ú:¾¢'fƒ€–]$`ËÊœ&vþÉñô³æb…ÅÀ† –¾ú}ꓦVö=J.•%pQvr_<±¸GŽäÁŸ{+¢(¹ Õš5k–¦UúÔ§H °”࿌œ€Å3áø@ŠÁŸ|ñä½&5ÍúÔ§KIж‡àw‹»¬œ€­×i-ùÛÿÊ êÓ•@]…övþV´ì€‰°Eûþ]‚?ãŒÊ¥Ë/¬´OW.y9“ÞŠãú»‹ù½ä½ñtZ¡œNH;ütžø)¿!ž~úé~„`Ÿ.aãÆÍÛ~Ê ç2ˆË`cDm³iE¿LbûÆ0Ôh4^ÜûÓ÷é¢Ò Þ6I¬=¿¡eíl صڟ3 O}Zv´”àÏè5-m$`΋wfó£E£ö©OË‹z¯öSaܲw¦j›m¨¶’Y¦‘híSŸ.=å õ9ÚkÏÀ¿„“‚–~=ÖÜð;×ácú;€çê•F•JåŠÚu' C„a˜Hãœ_¶Û‰)¥å`îüäfÉÐeåLû¨`Œßü)?Ùó+ Ü~ûíh4—º=!!æææ°gÏžDúÿðc~~þRW¯kÀ“O>‰ .tvCzF_òT'vþ¬,]Îkº{z'j_~æ*J,_í¿BÁQáÌ™3—º=¡R©”'_­V/Ë•&&&:Ïœ‡ö^I~ºÜœ€PÚæÏqøçFÿ]™| O—3¥%‹ðö…€?z9XÊÙ€0žMKH~ÊÙ@̺ úà¿RH …'îÉž—Ëj #ïéYyëÖ­ÃÐÐЂîÍ·ÝSàÏ™3P þfdàRšeg ·Z9ô“àg}p…b õSï}ÁÓ@íß×zVÜÄÄD×  °_RøSwu~CË~wàdmó[)¡öç·²œ¢þ>-cêdVk'àw& 5'/ýJ# ÎfþbÀßg}º h!’ßÉœ¾o)÷z=˜µžÜ-øûÔ§ËŠRsù þ<ê5XâQg(°üN“åIþ>CèÓå@-¦ó:YR ̓Vý})—ï=È‹l þâï/ Ú§Ë‚ §7OþfÂeådmöóZøû¼ OË”þXó-3®€zÖd{ð¸äü1þVà'7cªÁúøïÓ²§®À–àÏëïËÞ ¨ÃóÛ&ïmÓ‡M‘›§O}ZNÔÊæ'ôüK¼=Ø’î `*›¿³€›š§ò$$ÿÒrÆ|ßG©TB©T‚”A H)—ôÙ}ºÌ©“¹üið˜½Hþe XT¹4âÂ@(?˜ g400€‰‰ ¬Zµ ###vz®i`Æch48wîÎ;‡ÉÉÉþ:„}jÒƒßÐe58;X™Uû›O‚¿‡4>>Ž-[¶`xxXW—%A¯ßÁ¤U*lÚ´ ›6m‚”GŽÁáÇûšA‡Äˆß^‚‚g/ñ‹uן:LåÉ;`è"l –}©BgŸÎ³Tà–-[0>>nAï7Xqú4ÆÎC©VC©^‡PB @X© :>Ž™õëQ]±¾ïcÛ¶mØ´iž{î9;vì¢6áåH,dÀ—ºKEÅõw þZŠÐàž2·z¬å|äshð³dÎvíÒ­^½/¹öZ0½JÍèä$68€‘ÉI€ƒk×büæ›QY³¥‰ 4¦§Q;só'N`öÙg±æÙg àܵ×â¶m(—ËØ¹s'V­Z…={ö,¹6À9ÇË^ö2ìØ±ëÖ­ÃáDZoß><ýôÓ…ùï¹çlß¾ãã㘙™ÁáDZ{÷îÜuÊå2n»í6\sÍ5X»v-Ξ=‹çž{ßüæ7½ò2y|vI›'IÿÀÔÅxP“zþ¥^äâhø™~ñ¼ C ‡õîE·lÙb7­ÔëØ¼oVœ> h;ög±éu¯ÃØu×!’Ò.måþªgÎàÜ7¾S_ü"ü={°ê¹çpú¦›0³y3Ö®]‹¡¡!<ñĨÕz73Í¥U«Váƒü víÚ…óçÏãøñã¸ï¾û066†ú§Âïÿþï£Z­ÚüÃÃÃøßÿûã%/y êõ:8€+V`ýúõ¨V«xýë_Ÿ(ÿ†nÀ?øAlÚ´ çÎÉ'p÷ÝwcÕªU8vì>ðààÁƒ ®?q~lIš&Ÿ*ïQ­ÜA ?%4†¥\d Öt¬—NÆøõÅ„äož¶_§tÍ5×`ýúõ€ñóçqí“OB„!Ö½üåxÕý*ëÖY ›uà8çð¼¸i¤”`##¿ï> ½ò•8ùÉOâüç>‡ßþ6.œ?3·Ü‚±±1ÜyçxôÑGAO›³T*áÏþìÏ0::Š_þå_Æ£>j¯ýØý~ñkÖ¬ÁÏÿüÏÛôŸû¹ŸÃK^òüÎïü|ðA«Œãî»ïN”¿eË|èCÂÉ“'ñÓ?ýÓØ¿¿½¶nÝ:ü—ÿò_°iÓ¦E1€+•rÍôB]ßÍÓ9ø -Õ¤ %Š,z·µ>#ù î]­Y³ëׯc W=Šßý.JŒáÎ|oüÔ§PY·A V«¡Z­bnnóóó¨V«‚D„ÁÁA\uÕUX±b$Æ~üDZöWÞUWaâàAlúú×Á¥Äàà n»í¶ž/ôù¶·½ ëÖ­ÃïýÞï%ÀŸûÜçð±} ·Ür ^ýêWÛô—¾ô¥8yò$¾øÅ/&L“©©)|á _H”ñ‹¿ø‹ "¼ûÝïN€Nž<‰_ú¥_Âc=ÖÓwº²i1jç’¿W< wÓ jÔ2º/I‘þN8jŒŒàÚk¯c +ΜÁ–§ŸÆØÕWã'¾ô%Üôÿ߈¢óó󘜜Äôô4fff033ƒéééÄoffsss(•J¸zË–xí» 0ö¾÷¡tç:u ë¾ó0Æ011o¼±WM –ò'OžÄW¾ò•Üëÿ÷0 ñc?ÖÔ±ëõºÚlE7nÄ®]»ðàƒâÔ©S…ù–Ê´¹ò¨5øi’ߥ¥°–p6`zyßäKSë§q¦lÛ¶ œs ÌÍaÛ÷¿.^û‘`tûv4 LNMarr³³³¹À7àŸžž¶y‚ °þÉüÿq° 0rä&ž~Œ1\}õÕïI –Ëe¬Y³(tÄÍÎÎâØ±cØ´i“Mû¾ß÷ñÉO~ï{ßûpï½÷bÅŠ™{¯¾újÀ3Ï<Ó“ú¾¸©u\?åE¸vþ¥ zíÈÐ øÚ.ÞX½zµãߺgxá–÷¼ã×]ƒrÕjÕjµZ õzA CH)AD`ŒY_€YõÖ\_³f <ÏÃO<ºÿ~àÿý±ê?@uÃ+V`çÎu}!´víZ0ÆZJg8uêî¸ã! ¥Äg>óÔëu<ðÀ¸ÿþûqÿý÷C)…'Ÿ|ø‡ˆçž{¬c´]ù}* Nfôµõôw"ù/#'`»=cüæXìXéðùZ ÀÄ™3ššÂŠ;ð²ÿüŸfffP­V1??ùùyÔj5Ôj5„aˆ(ŠBpÎ!„€ïû‚ q}åÊ•X¹r%ŽV«À]wÁÿÆ7°ú{ßÉ׼«W¯ÆÚµk ¬ééiÀèèhË|£££˜ŸŸOØû=ôzè!¬]»7Ýtî¿ÿ~Üzë­øð‡?ŒŸüÉŸÄéÓ§155ÕQù}jEKþâ¡°åîÌ] /®?3(·• Ròi||`Œaã3Ï€ {ÿà Û²ÆÉgÀÜÜœeF+0yŒ†`®¥Óo¼ñF0Õ[o…\½'ObðôiMõz1455…¹¹¹„zŸmj†7âèÑ£¹×O:…/ùËx×»Þ…¿ø‹¿ÀÀÀÞøÆ7> É-¯ûÔ-üÔü  /ÿõZUp¡àÏfmK+W® OM¡27‡­o|#Æo¸ab~~F#jsžìõzÝæ3ÇœsÜrë­¥ÄôwÄÏ}á…xÔ᪫z2"°{÷nìܹ×^{mîõ{ï½cccؽ{wÛ²yäq\:t.\ÀÞðø¾¿èº¾hiàϽ¯°À˜–ÿtà¼Ê.ümÚ$C+W®´žØøš× C4 A€F£F£aíþz½nÏ‹$}½^·ùM^SΖ-[P*•0¿jT©„ÁãÇÁxž‡5kÖ,º?ô¡!Š"¼÷½ïÅØØXâÚúõëñ³?û³˜œœÄÇ?þq›þ²—½,—ù¼öµ¯ДüFú§Šõë×ã]ïz—}péõ¯=n»í¶E¿ÇKôÓE€ÿ²ræÙÿ?/p€¥ùB{000€r¹ ÆÆNŸ†(•pÕ+_‰0 íÔ^÷gÒ]P' ëT3NA!„h4Ö)†!6oÞŒÝgÏbníZŒ9‚òùóV¯ÆêÕ«í8zô(~çw~¿ôK¿„¿üË¿ÄÃ?Œ£GbÛ¶mø‘ùþûÿï‰=øÞÿþ÷Ã÷}|ýë_Ç‘#G044„]»vá–[nÁÑ£GñÅ/~ÑæýÒ—¾„íÛ·ã-oy n½õV|ûÛ߯‰'°~ýzÜ|ó͸á†ðÞ÷¾·—ÝäÊ¥ÞHþ d.+'`¾)ïðc’ŸXKw@!•J¥æ ¾ùy oÛ*• ¤DEög~À† ¸Ž@x~Ïóày|ßO”%¥ÄÆñØca~b£GŽÀŸE¸f {Ò¤=ôöíÛ‡xwÞy'Þô¦7áðáÃø?ÿçÿà£ý(Ο?ŸÈÿ‡ø‡¸çž{pë­·âGôGAD8yò$>ñ‰Oàïÿþï177×ln"üÑýyä¼éMoÂwÜuëÖáÔ©S8pàþàþûöí[Tý9qx_¹xóΆ*C`ã݃fQfP‹ pãÃv9ü¹>ñe½@\ÁÔqa€Oög]Æ”J%€†`Ja`õjDQ"‚R J)HÍ Ì±97Í fÐ0“ǽÏü††††!êBĪ¥ñÀÀ@ÏÚôСCøÍßüÍŽò>öØc]Gï=ùä“xòÉ'{V_—¸äxù_¾$eçÒzý»XÔ)ø;µùÍ©‹£%š¼dƒ´|ÕØü°£þûzÛíÒÊ•‰Ã̱9wE¦§§eæçÞï¦ Ä~mC{Õ*c=e}Z¦DíÒ(ôS˜™R÷fîXÞÛƒw@Yµ¿©ë'G<[¶XqùZ]‡v€EZ­Ïsn¹”^¨T*eVJçu¥žEé‰@$c‹žF{Åc8·¡‹-·*: Þ/J5+• „Öâ:#j•:ºŸŠŠ»¬œ€h=èÎN¼RíOŽR¼ÀÌÄ‹´ä­9ƒ0 mÙè>®×0>&Íý˜ëæšqþ¹÷¹Çsss1£©Ç`J½Ád½¾b^† ŽŸü…Ý|Ë¿¾qB•¯»î:LL,ŒQȪý?qš·ÂÀeå,t¦ÕþBð;÷µ[-!EF#–¼¾åy¨k ¥Äðð°²çyöØ€Þø XÁuü¹÷ÿ€9>{ö,Â0„Ðsòåð0c}ðb¢DXpWàO¹ •KËÎ ØÖA‘§ö§ƒóÀŸ6 Úh†@m|üÄ ÌŸ< 66†‘‘ø¾oØf`w¨ÏŒpÎí*Áî½î¹çyøÁ~€0 ±bréX×ÛÞ§u¡öÇ'EàϬ°4õ]úH@û6YÉ_Ð(ù’¿3 Ñh`~~Œ1̬[8ûo CÔj5 Þr¹Œr¹lÁ]©TP©T000ø Úk&¿»tx©T‚R ßÿþ÷ ÀÄì,¢+ uÀN’Í‹‰ÚOêi£ö› G /«HÀ¼rÁOíÀß={Œ1ÌêU€.|ýëÃLJçyÌ•JÅ2þÁÁA bhhƒƒƒ¹LÀä5LäóŸÿ<ªÕ*V;N„Ú–-v)ñôø|'¤”B£Ñ€R*±,™Y ¤2ùMYRJûw!u01½^í貧ˆּŒð;·8–j`)í`)#)UùÁϺTûÓtöìYlݺÁð0æÖ¬ž~“<‚òí·ãرcX¿~}bhÐuú¾Ÿˆ4¶¾‘ú†! áðáÃøÊW¾V¯ã†ãÇÎQÛ¾püøñ®ÛÏ€ö•¯|%®»î:\}õÕ˜žžÆ3Ï<ƒÇ'OžD©T*ôT›¡É±±1¼úÕ¯ÆæÍ›†!æææ°ÿ~|ë[ß‚ÂÆK´«Ãõ×_Í›7cjj Àã?ŽS§N%FIúÔ.Ä'w€|ðôv– ¬é]œHÀ"‡RÞ~–sºã333˜ššÂÄÄÎÜ|3†¿òœùØÇ°fëVœ¬V166†ÁÁÁÌ”_”^À0†r¹œÐ„øØÇ>† pÛ±c¨Dª7Ü`ÕÿtÕlRJŒŽŽâ×ý×±qãF;7abbëÖ­ÃwÞ‰o|ãxðÁ­ÿÁ%#µßüæ7ã@EØ·o~þçŸøÄ'pýõ×ã¯xþú¯ÿ§OŸF¥RÉ­ÃØØþÇÿøØ´iS¢ëׯo[‡#µ—ü™Ó$ø»—q=å'ü€¨ý ˜ hèÙgŸÔW¬Àô¦MPóó˜üÄ'†!öîÝ !†††0<<ŒááaŒŽŽbttÔžÛë###ögÒñÙÏ~ÇÇÚéilœš•˘ݵ Œ1<ÿüóv®}'†!|ßÇ_üÅ_`Æ v¶¢™„d~;wîÄ[Þò4Œ9 ¥ÄüÿïxÇ;¬Ï£^¯ƒˆìý¥R o{ÛÛ°fÍšŒ:oâ%þüÏÿ7n\P^”Ômt:?¥Y˲ŸìªÿéʶšÔӱ655…3g΀1†Ó»v!EãûßGíñÇ177‡¯}õ«˜œœL|ttccc‰Ÿa £££6_øã?þcüó?ÿ3|)ñ²ãÇÆ0ùš×€!¥Ä~ðƒŽëJDRâg~ægpèС à  W¬X;v$†!6lØ€7¼á ‰{Ÿó½÷ÞkÍ ·ïÿûíðeÞóM£££Ø¾}{ß'PH‹¿ÍµÔ{K ÈÒ+ƒ§¦þå(Í|™!Âoß>¬X±•JÇî¹W?ü0‚ø`záË^†o|ãظq#n½õV;³¯ÕŠ@¥R »wïÆßüõ_cfvõn;z•0ÄÌ]w!Ø´ Œ±®÷RbíÚµRâÍo~3î»ï>¼ãïÀÀÀ@†@îܹûöí‹(Eö7©[Ÿþô§ñÌ3ÏXû7ý«T*8xð þüÏÿùÈG033ƒkÏžÅ<ˆñzs·Ý†êÍ7ƒ1†Xó£S’Râúë¯Ç]wÝ…OúÓBàío;>ñ‰OjRJ”ËeëÕŸŸŸÇæÍ›3À-—ËxÝë^W(ÅÓu(Rûgggñ·û·xï{ß‹àío;®¾újCÑ'C…Ã|Ôüy÷7ÕÿÚõb©÷‘€¹õËbÊKÿYø MOOãû?øn½õV4&&pôu¯Ãúù”_xƒõWˆî¾S›7ã«_ý*Â0´6~¥R±K†?~Ü®XªVqç‘#X5?òið/ÒÙ|úôi|ãßÀwÜ¡¡!Ì\=æ·mÃØ¾}:|+÷ìÁÊ={@œ#(•ú>x¡ð´ŠK¥ê×\ƒù—¾ÑêÕ¶ìǼë!¿Äëaß¾}¸ë®»Z6ý«V«²“Ž9‚±±±ŽïŸœœ´ñEuhu¿Y`uHO|jI ÀøHû|ytÇM‹ûø­èàQàØéEÒüÔ¹ÚŸLZ♀@/KÂ;³·_äOl U ~C³³³øêW¿ŠmÛ¶aûöí`å2¦n¹S·Ü‚ÒÌ Nœ€77Q­Â¯Õ@¥CC¨"\½Á† €žæ Ä>O>ù¤]º{¡$„À³Ï>‹ùùy»Fa;é=99i÷0bþ©§žÊh ­Ê¸pႽ¡uÐQ@ò<à«ê͇ì%½ç÷€?üëÞ•Wþ¶7¸ ©€ Ë,°à‹ÀŸNî±äO“”À¡C‡°}ûvlÞ¼ˆÆÇ1;>n§ Ù5€XU>}ú4öîÝ‹³gÏö¤NfÁ|wß}w[ \«ÕpèСD ç_øÂ°yófxž×V‚Ÿ9sÕjÕnžbêð…/|!á3håƒ8tèPÀ¥ŒµÚ1ø©URš–½°@ h¾˜^ð¯­ä/l¯ÅSxê©§ðÔSOaÅŠذa&&&l¤_©TY›wnn'NœÀ‰'¬ã¬—T*•ðØcaåÊ•X·n]K |äÈH) ÀLSþû¿ÿ{¼á o€Rª°Œ©©)?~ÜîàÖá;ßùV¯^½ :¼¨É@ž±Öµäo þ¥Œ¸ˆ+QñžÚ¿˜íº ÉÉI«Î2S‚/V¤c år>ø ¶mÛ†›o¾9^cБÂ333xá…EQîRc¥R çÏŸÇÇ?þqÜsÏ=ÉHñãÇÛ0àô*In®½öZÜtÓM-ëЫO/{Êqóuþ”Â_ýry93•Íã7'ø‰r&9S¤.Vàé¥Û6 Œ:tÀÀÀFGGfggEÊårK§› hzøá‡!„Àðð0J¥fggQ­VÁ9Çððp¡Ýnêð /à™gžÁÐÐFFFÐh4:®Ã‹Šr¬ÙžJþLÂ2v¶ÛÐüIo è‚?»?Àâ‡/'bŒÙiÇRJ;Ÿ \.w,qÍ$Ü ð[ÕarrÒj}©Ÿ¥Î$Ît`à’ØüiêõîÀ¹Ê{æS¿ì4`“èÜ[ІW"¹û,”ÌjF—²W:u&ù §û޶ì彿=Ÿ ˜7w9ß²iÁ5Ó’ÿEü>]nÔnÊ*µIî¬c/åÊÀK>˜å´?¡þ>]δ(ð.ÒÊÀKÂr MOj~÷€ÅÊÄÒšC}êÓ¨Ó«ƒ«ÿë€1¶äL`éeÅ¡€ùöRüÖ›À wñQ}m OËŒôSHon—›µð:5B.âr/£éÀÅ ªsÉÏXüÊ„øvúâ¿OË”ìVs -dj³ÔE{ wDº•M¾T±·¿¹x= O}Z>DŠ@JÅ]T5Á_´£ùñYb²Kå­ÀŸYf¿‡³TË%KT1– ~÷™ËA¬ºo8,‘‚êÇôi™‘JJ3U©ÀÒäG'’¿Åj»‹BÅB@˳6’?¡À±ùÍ(©W%@)H¢˜Ûö9@Ÿ–)EPRV@5wÒ2ß•Öd´‡’‚¦D;k±d”à‚AG €1FæWø ÂHÀ,ø“N㣠&#ýõðŠD ~EíVYéSŸ..™>ªˆÓG¤—’É‹kq¬['-:0ÿ]œvDmç¼ãŠéé¼ñ°ˆrb ›ã¦ÎT!(h;Ë6iŸôiùAªXú+íÀVº# –Xr^OÓQ˜,)]´9XhcŒ:Áná(@»›m ™)ó?ù~Fò³8@’qÔ'SÄ ”qEùÀªU«úTöé¢QzØÖH¥ŠbÅßVÌlŒÅ]<©“ 礷þ#JˆÔ¶h…å ð<Â0Ôc,G aƼÉ%V`«¯ÿg¶lôg1‡T€`̬sZ’ ðDy›6mZÄçìSŸGŠ”’ñ_"R&*( tÀo^ÚFÉSKiw@ Éo„q^b&ÐM@šÛPJ pŸZ\¥<&öŸÇãþŠÅ¡Š˜RPŒ)4‡ûs‚û´LH*2Ž@’ÚûOÄÓN?j ?MŒt$`˾ní}Ê:òÁîy™ôŽ€©Ç ¥eíM“ø¥”& šª´šeÆÿ4÷T¥í¬þ(@Ÿ–Å>Iʘ¤ìP`3žÍH@m*Ü­4ú-ÀÁ_2R®SG`B¨T*4??ŸxŠ)(Åm\.“Ëq’umŽë§_7>Œ‡¹V“,Е8bÕŸŒ‡ð¸‚ã œÅü‹ss2ÎÁ ßÔ“‰ŒÖÕlmÛCi!DZÝ’$…0h²ÃÔJ;UsF«aV÷'´–b©Áä;] J)`7Z9å2J¥’Hóœ‡%žÄ9'üîÌ'cL)¥È¢uÉ?Ó?&Ü7¶´_ÀÜÆb­€Q¼L·`c ``Ä8c`œô:¤@Ì ì»˜…:Bf ,›åfv3ä?Ç—Wn›Žž›Î6oë×Ê+›œr;º¯YÉâç±Íå–ÝSð']l‰ûcóæÙF:#ßb?)íé·à—RA*IR3;¨T¢,ešŒ´@mjÚLIä̳ÿ ö\3<‡´ f®’€pí„Ôƒ,#J6ìýéŽ­Š¾c³3™ \ñ= Ä9b+%ã<Œ‘NgÂø ×RŸÓzÓ峿”cÃrúVao+ ÓŸ7o#ØN:z^•ÚT¨ø»ÆVøS'ÅÍ‘ß&îyk&ÖN;.,¿ ë¥€²Îfè¿JÙa½Ø±§¤fR©Xò+Žø/b –(Tºc3Õ´Z×,q"DSAw™! £HçUé9£%¸ A$…´ÕÞóF.\¸€ÁÁAÌÏÏç1ÆÌ ­%("ŠˆPe C¬<˜æ¦™/  ÿe¤§M* hýA”Æ+ƒ‚Ò{0ÆAŒ1ià œë¹—ÄÁ(-á˜íNÙý Z÷ÆVX£ä?™Í”þ‹0 É÷}3BÎ9MMMQѹ ÀØ ÆÀ£ ÈotJñ(ÍXÛ| ³£®ûR‚_€1›5øM ¤>ž$¥m}­âs¦$T¬BèŠU~[.cVíg…j±Ú üÉ—Éíù÷$úD®,/,»{ð·Q;ðçÜšþ–… .4¦l½[[0mì‚bm«•µ•¼5w?­ .°A>±zß´ýãÁ«&øÉ­±‚÷l÷A´4ò|ŸçEQ4ÍS› Ë\,ç=0ÁFFF¨^¯S½^gyžEιBlÍcLI)‰s.¿ÿtzg ¦QH `<§Ã˜•@Œ ¥MÒfS)ØœÌõrÒÒ_šiFXSí7›’hU,±jkKU9÷kä÷·U\&eËî¹äÏÃQ*cÇ’?]¯àoe¾´?u ~›ÊlÅÚ‚?uÆTS HMêÑή¸NÖ'€&Ð »pÁk¸É÷¤„ÀÏòUÇÑKÂó˜Š H)gÈøPZ¬¤µò4~ÄwËjdÌ€Z­F®À<€RJ)’ˆ¦ël> 2”ež‹¦(¡Äà'kă ±g:Xˆi®´C:ŸVóuðP‚¥¾½íÞ¸-øÓr¥åÁß‘ä/º/óù/X\Å6j{É¿hð·¤H~M®(®zs…wbjr?eA®œ‘ƒ øÓ§EîÛ'$?  Æè„a4¥µn•ÖÆõ1Õj5*•J‰€r¹œyx‚|ík_ÃÎ;m8ðÔÔ UBéÂóp ͉ÑñfË&»ÂAä™ dšÏ8& ¥|ì¡áoT|c[)=´b4 ÖÔû³ ²i=ºì€?ç­ŠJ?:{Љä_Vàï$Ì«ø[Ô­à~æ c,tÁ¯±hýZê+£Ö˜©Tá(€çydbŸ2>= hÀ/9ç‘Tê¬Rê¨ç‰ÍºúŒYofXJÃEß§ÉmVdBxí!Xîkcš“#š%åµ=µJjþBõ³°ì%AÙ ^qîɲ¦‰(ÿÛQ—£Tjf‘?‰¡Âœ’É5@ ŸLið»ÒÕêµv«¢¤!““S'µúo±§ýRK~U«ÕT©T¢©©)ªT*”7 ا,'¢½{÷’çyÖ†ð<ÏpcHý‹8ç’1j3 ¬7‚n¶,‘µb?€ŠXnûäu4­–%U)³Šö’™>l~z0¤é¶¤æ ¥ók ~soÎg\(ø- ^Jð§r…€ß|ÀOù?kf›):Íy&ÅCËÆãïFý™ééé‡;B9àOH]Jvt ~Óƒ††ùàðH¡P>uêôCDQÈ ] rÎ¥1Ñ nübïÞ½éFQáÃŒÀK›Ò1"hõ_ˆjõÆåCžàW±×’œ¹yQ¡4D‰AØÖcÜúÄQû˲Ô}&l¸Ùä™<¿@ -ü½¿s°ÜÀ¿ÀI=IvÖü…Éb»ƒ÷…6+Z·*9ËeÓ€8çX¹fm%]¢ÑàȳϾðmÎy ”RZìyž'_N¡¤”4;;«ZI~CE €RJI)¹ãTPaÎãxDˆÈ¯VëŸþÏhjïL*†¨.à È6¢âc4ƒâûr¿w[ðSòfítFßrqý¹¯—Ö( Ê^¦àÏ}p—àO>œåÝRÌnuû¤5mÀÑV­ÝPñýò×8r䨧”R ÆX 2Œ€Š¢H‘ô"ÉšL ž¿l˜@$ "‡ t"ù©à/¸¯WàÏã/9eS¦š—üÆ*ξÿ%RSë ü ~Q\á\] ­–·¼?ù¼T0AäÍ%‚‰`~ŠigÄðȘ?2º¢.ü©^xáȧ4ˆ¨AD¡Áç\FQ§¼Æ¦ÒX%Gú#Q'41ßjM@ãA„"ã BÎ*¥BíœÌßz£q¨Ñ>»ãô¨ ¢(ñfzƒ¿ ÍÃeþô# À_PÉ‚[–üÙ—Ë)wéÀŸØ]€?Ü6/ê6axóÀïhH=/Ã|\¹ËçH:üŒÆÆW–Æ'V—Ýç§=ÿgÏžÿ̹sç_p±ED¡Ö¸C#ý…ÒŨ þÑÑ…MXÄíÞ½årÙD©™™åyžl4Rs)¥Lhœó†ùMÏÌ~5 Ão:/FZh>(PA †EŸrzÊ"ÀŸ"K~¢‚:%K˼^ •Kþœè!ø³2ZIþ”ÿQ ÈJà‚ÌÍ&¦DùyýiæAÉtSB|]XÙq(†Øá7¾rMepx´•äÇììÜ7÷íö! WVúK)#!„BDFCzž'§§§m @¹\&üSÈšñqø`bi0slb¤”äyžRJ)Ïó¤RJ !d†!çœ3Æb¦"ô_˜œúäêU+¯âœoÓ#I1Á|ûlÉ!É÷Czé~•Öà/Tس’Ý£ü© ?)[v×àÏ­S²2ù@£÷5Ën©1,%ø‹ÅvÁ dÁÂRržÞFò=)¿Fí‹ ¯7g¡>€¦êO¾_æCc•R©\¨}3ÆÐhŸÚûÌÇÔ‰¨ 0?"Š”R¡ïû2 CY*•$YÛ_Kÿ´êß|MÇŽniqLÀÐЕJ%e´Î¹ª×ëJ…a !B!D¨” ´ŠÒÐ@l·Ì_˜œúw",) ˜S¦8¨Q…%€¸ÓÌ}ð·Ê¸à§¢rõKþ+WíÎ$enp¤G’?só—›Ñ?½n=eÓŅdžF&*Ãc+…ð²¸s´)åùýÏüS)åš8jQ ” „"ÔØ‹êõºµýsœ 6ÇÆ`¼ŒÆо)¥ …!ç<BJ)SéFEç&'§>LD“NˆŽ"B¤¦•‚2–Åske¿z¯ÀOî}N·Èé)(({¡àÏ[‡àÏû´—z.1ø)SãLƒ“c»ûÓeä/¡ž³‚7yŸÔÕ\_E>È»»–eÍ¿J¯EïnF‘<§ìu"½{­fÔ\æÚäeœkȆÿånš>æŒÇ C3Ô˜±:Ì–±ŽóÆeè:1¥”t–ØVÍúÚc•¼¦šmßï\§œrr–9ºëø%™¢Ùâ«©Q“) /?ÅKÒP‹m¾ÕÔô̧9þ%u4m~þ…Bˆ€1FQyžAù¾/9îFýíÞ½;×öOKÿ\榰wï^Ú¹s' CígffØðð°aQ©TBEBXÉÀ..â®_vþüù‡ççç÷OL¬¸ß÷K7»•â=X13è€Ø‚>JÛ¼—‚Ò ¤‹Sç-òvñž­³²Îó¶pºç,±Ñaû¤Îsõÿâ§v‘9õž­lüdÞ öœ;?ù©ÙÙùÃŒ±†qžQCá‚¿¡” ¤”¡çy¡¿ò}_ÎÍÍÉR©¤J¥’rTÿŽ+ŸËRZ@¢€½{÷âÚk¯eQ™Ø6<<,õ Á÷}&¥4; Áì]æyI)íb"J)Y«Õ?^ûððððKVŒÿ˜ç{[‘áZ ­0§ ݦÌt­V ß zêɵVRÔpZö‚VŒ¯«¼¬ÍÍ-êž«å¿KëöjÅ ZŸwN c†¢HºpaêS“SÓû>àœ7ñ5<Ï \ɯÁ !\É/gffÌE3þ¡šÿ¶Ýn ±º¨€¹¹9 ÇýÃ0„ïûfç`hà7½¥ñOKøxU“ÙÙÙ§çææŽß2::òZOˆMˆû“y£æŽ-Û»UÃ]kŵۈ®.š¯GÔ*:ÓÁ;g­…yz¥ü· žI]Hó–m€n´‚Ŷ®mǹ úI)ÌÏÍÿÓääôãô¡–ú!bÕߌóDzžH)C þ0 ÃЀß8ý|ßW)¯?¡‹ŽYÈr´{¼wï^µsçN£–§`‚ ”J%Š¢Œ1RJ‘¢0ˈ&PRJ…z…“pjjê±éééÝåRiÕèèèËÊ•ÊÍ%ß»ñ¾  s$·á[]ËyéÕý®úpw%w^p+«:ïÄ­¨UÖ´VÐ °~‘®$}y[œ¸û;j/}.¥”ƒ ü~µZÿ^#Îôj>”2Ô³úÄL BØP_ÆX(¥Œµß‚_¡\ð;Ò?S}jÑ-5€S€M@¼$d£ÑHhA T*AG’”R !ÜåÄ#ùºAB>¯Þh4jgΜfŒ}Åó¼áññ±›J¾¿Q1Æ9ãBŒ ÆF¹àƒÌ©RL¢ižå‰ÁÈT»  Z¨)ù—BÝ0ˆÐ ·]¨VЕߒ ôôíóf˜¨0CÀŒTj†ˆ¦(’ÇëÆ¤T³zH¯Ûg¦ñf~æšR*ôŽôqd&ñ8 @rÎ/Mx¯ïûQ½^7C|Æág‡ûz~ C _¼-h4¬^¯³0 ¹”’ŽŽò DEBJÉËå²RzJ)áyž0šRJ(¥„Â#"¡”ò„FÒ{Dd˜B0}ÎÝ禼9 [ú>3èSQ«tÕÜë>±YŽ>7 åšciÎÕ —Œ±xñÜæ Z+é£(’zZ¯Þ+K¥’41þ6ÿ‚ÁtÁ€î˜€RŠ…aÈÇÆÆxBJÉ6E‘ÐLÀSJñø Ð…9BpÄ ˜r"bú:Gø Ð;š€[×>õ©²àpvÙIØÚ†˜!n³z6%¥TzÑ\ÃÜsÃìÂ:žçI#õM|ÿìì¬4C}½?Ð%Ð ÑŠ `çμÑh°(ŠÃÓ~®”âQñr¹, ø•RÂ÷}{îyž•øJ)®Ï¹+ù&àÖÁ\˜SÇ>õi!”ñ4ša=“f$?MÀlÙ¥×Ò4ë÷›µÍºšæ§ô|~Å9Wžç)Wê—J%åy4ø•S—EXÐ PÄ€íÚµ‹Õëõ„_@)ÅŒYE‘ÑØÀÀ¢H—RŠR©Ä ð•Rœˆ¸ïû éoêíÅÛ'%Ôÿ¾äïÓP®&`¤Ed˜‚«˜¥ºôRÝŠ1¦‚ PBÉSžçI½Œyž']àsÎɵ÷+•Šâ ôüÀ€nˆŽ˜€« H)™”’K)ùØØ3”’+¥X¥R± OŸð°û¾_ü-ŠRmRš„ahMwsÎô–zf- g÷åyž2+ù˜)½®Ô_*ð‹`ºQŠ<í˜.#0¾Ã”RÌhDdÓˆˆU*®'ŒpL3€•J¥4øM#´sþ¥óõ©O–XfK  ¹#î°01Æ(ËôÞö¸^¯Ûýú„J‡ÇÛ< ð][ß¾yvøÀÂÁ,’èFhÅÌ_¶sçNiF`Lƒññq¦”b.3ÐRDÄ™aæ‡iŸî>àû´ÊcnZZ p¤>U«UsÆXôœsššš²k÷9‹îÒÐÐÈ[ͧçàzÀtC´s/dQ!Š";b %>#"666ÆT<åÓ^)eŸ–úƒƒƒ‰:˜¼}êS/Èl²i¨Z­f´slvå5ÌÀl²ëîØëLâ!£ê-Ÿ>^4ø1Ýy€+d»ví‚ë#0ŒŒfà2„+VÀ0  ð´tïKû>-%¥µôæ/çœ&''‘Þ¢[aó¸Àת>Ð!ðÞ€è!p¤F`}@S+Ëô‹7WRp¤¼ayÔ×ú´JK}CÜyù\†<¯­i¤}ŽïþMÇ =lÏ€Ó]18Z3f²ôqBú1s(ªCø}ê1 ^ì&ÏÝ”Óóâùv)Эmû%¾¡%cöíAú<ÁX¦4ƒ!—A‘a}êS7ÔÑîº^rB­³V†Y›€OçljKÒ%göAÅÌÛMÚÉ=7ÌH2ˆ>õéb‘8`A´õ%½Kض_i¢¡]zŸút1‰ºHo ¸‹|Cd*ÐÙÒ3ݽÏú´”Ô `Úæ½Ø€OÓ%g™ -~=®>èÓRÒ¢s©Ÿ¦ÿJü%ÄZ+IEND®B`‚Carla-2.4.2/resources/256x256/carla.png000066400000000000000000000712121420416754300173150ustar00rootroot00000000000000‰PNG  IHDR\r¨f pHYs × ×B(›xrO]]]]]]·¿§Î9uê‘Rb6!„´sûùn^Ô2hä,9ßíIøf@Ýc=:Ô hbËžo†pÎ@‹€'M”íQÎ5É&ògC8g ø¤•ó 6øår¹ÇztÎ)NûàÙ²e‹JÕìy5ó³«  ÐëùD\x¥RñÓ®ëÆ>ßuÝcèQÛd†lpÝO§R)¿¬bsÐë#"Ϋ™]i×@øIHÚ?nذÁ»º¹f!„Ÿæœ‡‚\/Ó£µK”ÒP 0ÆdXÅ4sPŒ!NËCcuÏêè8hø6l :èuÀ+sÎý´”’µ—R’9sæÔ=´ÇzÔ ÿØØ!uàWy”R©˜¥Tê !À Î+#èhøþh¯@¯¯Ft!‘Ruœ3g„>#2„`:Œz ¡GI(j´W¤_¼:RJ¥b”R©Ž@UbP A1ƒ€TpNAG@ø#?::Z3Ú»®KÇ¡AÀ x)eÍ5¯jŸÉdBU„õ¨S¤3†b±XÃtЫ4¥TNLLÈ C0MSèŒvìØ¡˜@CFÐ &Ð6ˆ(ð …ÑG{ïH‰ëº>#àœSøR’L&C8çÔ{qÅj¤€ ÐH"èQ’>âëçZ¾x•_.—…b „É ø†aˆññqÉJUJ1Œ £L -Ðü5:~¥R!årÙ>çœ !H>Ÿ§®ëRzoÔ§}}}D¡˜ÕAoY–ŸVí×À^ú#èQ+¾G5à÷ !Ò¶m BèE©T’”RxA‘†aˆÉÉI?O1‚t:-5Õ@~Ç™@Ë þ0‹>Ñu|Û¶©>çœ ¨ŸrÎi:¦ RJ*„ ©TJg>#@LÓÔ™@Íócßc=JB¡ ÐG|í\B¤ã8:ø…¦ˆJ¥")¥‚"(¥‚1&J¥’0 C(¦055%<& cÒ²,°ÄJ­2–@Rð+q_éøœsªF|×u™‚ôõõQ×u™”’rΙeY5LÀ4Mêß—¼vÃ0tÀÁßIã]üÔ¡b?¸®+ufà1AŽãü¶m ÆWç•J…+ À4M>99)”j lÙl¶kL i~_××G}ÇqhðS©ãœ3èÌ4M&„ Bf†Ÿï]gaŒQ øú{„µ/üí©=B¤¨¯S!N‰þð@Ï9^Ú¿ëºJàÞ9§”rJ©p‡«|ÆWŒÀ0 ®T)]ØÚfM1€¤àWº¾ã8´¿¿Ÿ)à+QßK ôœsÃ=ó@Ocþ¹v À—c¾$ ·Á네R@z”„êFhà 9çJì!DpÎ¥”B×õ9!„»®Ëc®bŒ1×0 ^.—cL(F055ÅMÓºm “L 1hüú¨oÛ6Sà÷F}Ã4MÆ9gð !„!„ Œ1CaH)¥”I)cŒ !<ð3ƈ. xùDo¥Toc0Ý£%¥š‘_¡ç)ðû#¿WF(&@)åœsNáBNá”R—sîzº¿ëº®Ësc\1‚J¥Âu&0==Í•4Ði&ˆ$¿®ï;ŽÃòùˆüу—h3 ×ÎIðÆØg&/¼&5àÔžÇ^DÖS÷H ìºkM0ӹ̀>¶lð=;´Öf°¯ì+­|ÕâÒÛ§+ôèsG3ÿòƒmù'¥”O ® ŠÃ êIÊJ)¡”ÆQ’€ã8ŽmÛ†bžó‘¨T*Š èà÷ÓqL Àýuð;ŽÃ”دÀïéù¥Ôr]×"„凜©[Ö8ën]gß9”—Kó°ìñ2 xÚˆ*"AÀ%‘\‚pIÀ«">QB‘”€$%^eTÙ¸r˜ù‹|é°¯Eß׌T[1iJ¼4"ºlèe3 B 0Ì<‡ÆH-q#}3 "8BK>ó6úª /YÙºö¶`ZΥĢ›VNßýªEÅ·i_î{ìÊ=€¡ª PT¥êVIjIú=ÛRDôwÇdà¾8q¿­øÔ1ÔŸKÞ¼nò?^»¬¸óÁýßÝz8³U,2Ìu]ªü\8ç„1 † òù¼œžž–Œ1麮%ž*à¿îÌ»„K$€š.PÓ}ÊÃ/—Ë1oªF€ß"„¤¼tU𧤔éw®/¼ñªÅö[M‹PR…l•[IC‚š\R£µ?%€þƱ7ømõ÷þî2惢MØb¯õä&ì5ji¦žhº®¿bFþf¤B“37ʢ˥€ê»„?·q?é}¦¹9÷òwoûÌUKÊ÷ÿÝ“s~ˆ*NC¯¥¥eYÒqIa¹\…BA}¼ÂSô9V ¨›Œý7lØ@&&&¨·À‡¹®Ë²Ù,sÇ0MÓ7ôyb¿ÚciiBH*mÈþ_ß8õK‡øFƪ–vƪÖsƒjUÛU«9õò=«<3 c⬀% !$¸¨‚˜‹êL€¨Îˆ*ð9¸¨N©´ðËV¯ ozˆ2B«À§´ú‘2J 0VÍ÷¯3ʪŒ‰0¯<%޵꽄 š®^!„U Ä«€Pè×ó¦Á(@«i0Bi5Ï/˼2^k Âåpîºà®w\¸Ž î¸\sïœÏ¤]×uÁî8à\TÓ¶[M».˜QýÑ(#^š™(¥ Þ9e´zÍdÕ#«^›¹—ú÷/Í‚÷ ‚ ÎÁ]áºÕßÐáàÜ…pùÌu‡C ^óïsyõp÷¹¼z.D83ø˜R`€e# 3~Æ ôH€ã…Ì¿ýÕ£W¨))e@™1V–RVÔŸa!„Í9w ÃpÇqMÓt …7 ƒ§R)žN§åÀÀ€L FN ÆI5Œ \.×u¡Œ~ýýýÔ¶mfYó¦ú ×uÕ4_øÓ ûÝ¿rÕÔoåä €HB«J>• †5˜ < Sæ.Æ èË.dYB¹²ÀÛś˓csu ó–©‘ÿýxî¯÷$ÇQ•ü‘Uwc)„†aÔHýýýrzzZ:Ž#=wbh^¤P#Dþ£££´R©b±HÇ¡ÙlÖ°mÛ°,‹Ù¶m2Æ,×uM¥ã{:šÒü—Ï­¬~Óå…fÒr@Ÿ7·¡&©Î“WGL“¹í.2Ï80º3Ž:¨?vTI®5[çl\zéÄé ‚ÞK€Ô| -_ƒ€s˜v$€aY0, Ž4&¾õdúKOï&{””¥”%Ã0ÊRʲ”Ò–R– Ãp8ç¶eYŽmÛܲ,·P(¸jñç)(Ð@ ˆ²ºÔ0eõWëù]×¥Þ‘qΕk¯I1…çÜ¢”¦!)BHz$ëλmõô‡-&ÔK€0 FC~n‹y[@þû%.^ð˲²u6“‡^º.-còÑì½(N> üP؆ԗ"¿ñZþÑóȈ’¢)¥)ι%„°(¥cÌT®õjöMa’s®|sȆ ºÄÇNNÁ³ú»®[cõB¨Ê·ßT T†?x?‹ÉÜ[×L~0mÈ9ðf܈¡bÆHN(`Xü­æþS Æ)Úùçüa• !A™fË·Z§ÿÃ^àévÞ1ùz^³àGL¾}8öpèŸ{¬¶lp†#“¦s>öVò‘l9x8òSK °œsÓÞ¡VØæóyT‡¸®«Bìë¯TGþ“5ñ¿îûq]·fôWË{Õª>Ïøg¨ù~ ¤ï¼lü×ûS|%<#®7òSÝ8ÛDZìïKHámt2äÈk\çSŠHz­)HºÑMÞÆôØ‚žßLê]JÇ€÷…g˜ÀP?.ùԻ̻á©Ð:¶t)À³½1ô5R@ ¹~ZWõãT²aÃT*?p§Æ‹©e½Úª>æ­ì3…)õwûŠÉ7.èw¯×+¦Rg:ÀÈ3–Ü_±eS }³rç[Šèsjµül½›“äwªÎ¨~ŒcÐÊD_O 8ôcàìsˆ$B VÌ'ÿéÀÒp¥pfx‹ê(çÜH¥RÌu]600àÇÖôÔ€°×ó)VP–½WEíåœ3!ãœû«ø<‡K/¬¬\=§üöš‡IPÝθø_m,xÂdójV_N $Èk¨qíKòq×Âc'Áß©zÚy°ŽVëDL~Rô:ƒýƦ%pbpü1íuþ/7ÞzÓUæ*[„S-¡÷0ÈØŽs=Â#&¿Æ‘4MCòÓvÁ™mÀé­39uë ò«¿Ô÷ÌØLM `†a*nf__BP%(c`HWø˜“PõúÓºå_ý J©ú3¥”¦¼b¨0:ØÇ×é/á­ëär,yʩ錨cxux»£{0O}ú±Ïi…iDµ'xTiš ­çé÷Ÿ‰4bò£î >'I£ÚI;Xgð÷UùЮEý6aßlÂÁ±M“/‡¯¬$”bÁ0½ü—_—¹JaJ)-J©E)eA)@ŸP!ù\×…Ú“!Ÿd¤ @þŽãøa¹½M;¨išÌ0 ÄSý-Bˆuåpñ—«¬2 ê-×7%±êQD4eõ¼(i ø±…ãòâ€ÌKZgð˜¨Í´%ê9À—ß ¨š½Wý±ˆ²­¦ÛyÒ4Bú>î·~§êZœ:°ÿGJ§ÃÝ)¥xËMÙ_f”¨µ5*š–¡‚èš¦É<)À¥ï©J Uâl^ã$éïï×c÷3ïŒ1fx¾ÿ†”Ò”RG¦¯Í|™ÿRûàUO:0*2VÜñMÑÅý0aN3"zðyIÀ›”95bIFþ ÓiäÍŽºÁså)ØIÀ7+èmˆJGÕÃß?úïõèÔHà‰?)ûùÁ©ÁáAcÉÞ>çO 0)¥¦‡?<—rΙšèïï÷™@\»h@ÿ'@íÜàzqû™÷gxQ|MBˆÀZÙ_|£>ÅG´¾:"0p\4þàˆœ0άÎiD>BîK"N‡ÄIËÇÆ¤¸º¢þš# é R+€O ÔfÓIŸeÄÜ«ß&„©açQªA0=y€cl·=SOÀðÚõ™7y€)¥4t !ü=5tÌ€¦Ô@†x  %5÷¯ÄÿL&ClÛ¦RJê…+¢^(o“RóÒöHÆKüðÞx±Ü.yÖmÊðì° ˆeà¨î£!õ„•ÞUåèöË'yg$,vŒJ'1D!A™fÓJê{j× ­œÀÌ7¥§Ã¾½~¨3I{8j™BØ÷ªç'e ….Nl-añ Õø‡A¡Û_3ðê{¡xUìRJØ8Ç÷ÛÑ¥å¬í5 „lذn×­ÄÛ¶)­*(*J¯A)5#)ûÕzèK‹æï›qïíøkžRN/X ~Ôñ›)öìfÀ˜ka@™m€<—ÏjöÞ ÕŸ¾’F—"9ªÌB­úTê©S¢ù6Ý\Äâòþ¹ÎÖ¬H]EyÀ3úÚ™H—Z–EÕÎÚ:†£ºE1€µXwþñ*b¦iRÇq( /)%ë7Ü|Îä«üàJü§€éHäO‰D#Vð7k° û($’+¬­¸¯Ùº’\k”¾Ëw» A¦ÆÔHN¡=Ï\SR€bª®0u0©0yІ[’`©™|Åæ›+—,°ú·K”RJa®ë2Ä4Mµ¯&‘Rú6<åh u €€¶–¸Ú úyi@ä`RJ¶&_¼Šxê%¤Fü>V ÕÕ, ?ÊS÷– žÓ,@•m§î$RA£z’?€7ŸÛˆè üÁïM© õ¿Iü@ãoKàÔŽ–ÝÜW×~B@ß~Ûð«¾ôÍ£?…7ò3Æ(!¤f] ·~s=l×À¢FxÝë^‡S§NAyÿ ’r¹L•Qjk.¥°ÓYÑç9šÌòõCEø¬ûqu†} Iò•íd]Ýw»]f6´¡Ñ÷<üԷɵ£’7¢]$ú‚Œ Ñwpj{Ënª)£¤ë‹­åð°§€\Ö ØsæÌÁÔÔ”o|Ýë^‡Ÿýìg~±1•Ñ××GlÛ&ꘀ·uµ¨k, œ¬_Þ¥KÇø›V¯Æ¾¹sͽFóš¥$÷5[÷l+ßz:Õ†sõ^Ô­0IaÅK/aàÌ3 ¨¿:oüpfoÕ' l}@.˼èÁLA5&à?Nûnüê^Í-ا055åÏ袃ÚoO= ð6êd˜Eå@]T\J@9`Ú͉²QâþñìiòçîQºC‹ª™‰RL@Ÿj¥Ý¤Ó‚NA@8̪Ÿ Èõ±xn Œ1Â9¯‘u,OMMÕÝ¡ž€Šk(+¢”’X–UãHÐ5¨Y•ü­óT]©²l8òGåBz4›HwRçÁÁ«‘8.]žÐ•Êf|P߇†M˲|ÜêXŽz‡P¬™RÓ4ýsÌØbRéÏ[è’@ºÝÁ¼FÓ}=êÑl¢FÞ¡@¸ š4]™ÒöµÓ¤€¾4Í«Ç*ýßcð0Jô™€ÁÁÁHøÔÙ´é@6›Uº‘RÃ0ˆ¦oOÿ7 †¾°X%ªCÝ~ƒ¤Ä*½ƒoñÌ3Ï4½[zÔ* á’K.ñσîÆÁ©@âf¢Ò•€ ˜€Áˆ5)q‹ƒZI‡>—RÀÛêR‰ÿê’ŽS!( b¼a<€Š”ˆ¡=¼vè¯)LHìÈßèØ£ÍVÒUu¬‚Œ ¦Pó¬ºmäµÿQ¿Å_øÃ¨•íÁk¢D¨ýüQ#þÅ® Ã0šéþÙM…BAß®Ïçc7.Í4== ÎyÃrQ6ªvõ‰•º– °9ÄÌaË‚Ãf|!Œ‹¨‡J) ‰Ý•¶þÅ’ŒüºcE°S.ÌO)œÖ®][˜ • Ã@¥RÁ¶mÛjò¯¹æLLLœïæ5MÙlÛ·oÇÙ³gcË…éÿAÒ’8ÕÍw”±xX ŤÂp”@äÔ(”öNþûSZÛ~Ý5ç5òë áb$Î9ÆÇÇÏw3:B–e!•JÕå—Ëeœñ\e/$ ŠÓq6ç¯_ ³‹ƒêÄÿêÅF¼Ç§8,7”A2ŸhˆTЬÞ=[@.Tju1XعN”6†d’x€@B€®ë£YIœ4žûÓùƒ†”]¸$ ÍÿÏæÎW<dÞ–pÿí´|ùräóùÄåã¾×N¬*Õ©ôá(¬[܈ZµBÕ0)%ÑÅý0ÕȨ—ë9]\$ À¯ilPkš&€©©©ŽUæ)GV›Fy»&YY è— ÌÌ¡E˜´«bG>Xg2ðD«hP¦G=š­æÔÌO:ý«ÿ×>¦­ñ±£6¶ úOIc€7º·ŽºG=:Ÿ·`­QÌXÀ`½‚:I7²“ˆ[OèÑl¦v@ÞL:Hd©)¡„4~ §ôè N8û4JûÏêðȯ¨+µF­PÇ$â>"òzÔ£ÙBÝЩ‡v t¬Æ°•€Á—JjDD^z4©›Œ b%`Ǩ³FÀàz…ÀB ¤ª@oaP.DºÐô *@ˆ= êv¦{Ô£ÙNfuë:È:²4¸Øà³a%`*•B*•‚eY°, œsض Û¶Q.—­ ëQtê¤PúÎ ¤+ëQI)@Ïk´(Ê@Ø.QJ188ˆááa Ã4͙ƄԤ¥”˜˜˜À©S§púôi”ËåvÝ£‹ˆº©ÿ×ÙÕº`訋W`%`ÍË®uK „`Á‚Xºt),˪:® ˶Á n:í½ÅÐІ††°fÍœ8q{öìé1‚„DîéBÅÅóýf3Ô-ý¿[ÓŠ:*Јøôú(ðwZÿWQ]Óétu”Ðö,æ?ŽÓ§a•J º¨OœT ¥ÁAL,Z„É… !R),\¸óçÏÇáÇñÒK/]𑉗/_ŽJ¥‚ãÇw¥~âà}çû-»G|ÒÕ€IV6CWôF9éûuP³´lÙ2,]º´ÚF#‡añK/Á¬T@(żõë1¸v-¬¡!˜ƒƒ¨LM¡tê¦ÆÙ_üù­[Bpvùrœ\·<“ÁŠ+044„gžy¦ãÒ@>ŸÇ;ßùN¬Zµ Ë–-ÃÔÔ:„ýèGxþùç;ú¬/~ñ‹Ø½{7þëý¯­W‘4%°³+U‡ÓMNŸ›G5 àVV AßI€®Ç¤Jâ gh—PJ±fÍ ‚þ±1¬Ø¾}ÓÓÈ.\ˆõû¿þõ0á8Nݟ뺰K%œÙ²Çð`ËÌ9t§×¬Á©uë000€o¼[·níX€k¯½Ÿýìg‘Ífñ‹_ü›6mÂÀÀÖ¬Yƒ¯|å+øÚ×¾†¿û»¿ëöO×1’DkÎáÏQ¤µ$àòfM ~EÝRºÒUÁ•€a òâf:1ú_vÙe>øç:„å;v€H‰KßþvÜø…/€ôõù@çœCJ Æ!~¨«J¥‚Ì•Wbéå—ãÌÃãä7¾‘^@æìY¹áÐt×^{-žxâ  …¶únîܹøïÿý¿ãرcøÈG>‚C‡Õ\¿é¦›°bÅŠnül=j“Úy"#`˜@Ç@ØJÀ°Ž Ýú½Ô‚Ì¡Z¶l†‡‡AÁ’Ý»±hï^¤qó¿ˆoy ÇA¹\F¹\ö™€Â E)…aA¥RÁ‘#GyÍk0Õ*œùú×Ý»±âá‡qàõ¯I§±qãFlÚ´©éuå:}ä#A:ÆýÑÕ6mÚ„M›6ùç7Þx#n¹å,_¾©T GŽÁý÷ßÍ›kpÜ}÷Ýp>ø îºë.¬[·>ú(¾ýío×=Ã4M¼ùÍoÆ5×\ƒ… Âu]ìß¿÷ÜsŽ;ÖÆ/rñRÒ‘<)øUºÛFÀ®zF½t3.ÁaçIhhhK—.!#‡aÑÞ½X°a~õg?Ê·¼¶mcjj ãã㘜œÄÄÄDèßää$&''!¥ô#ÆÈ|ýùRo|#¬©),yâ )‘Ëå°~ýú¶úðÆoÄsÏ=‡]»v%*ÿáù|[·nųÏ>‹Õ«WãþÏÿ‰7½éMuõ¾éMo—¾ô%ŒŒŒàÙgŸÅäädhsçÎÅoÿöo£X,bÓ¦M8|ø0n¾ùfÜ{ï½¾¥G3”TßoüaÔi†ÐUm©ºA}è/ÙÈ1÷G!+W®!ù³g±bǘÙ,þÝßþ-¬áa”J%LLL X,¢\.£R©À¶í5 Úþª`š&R©Òé4.\ˆ\.‡_xôu¯Ù·}»vaþ–-8yíµX°`FFFpêÔ©¦ûkxx¹\L|Ï>ðä—¾ô%|å+_Á‡?üa<ðÀ5eW¬X?üÃ?ÄC=[ç©S§ð¶·½­f_¹|>ïÿûxÿûßÏ}îsM¿ÛÅJy3S³Î°¶qµç*Ìw3~ÁŽhÖ háÂ…H§Ó .Ù¾DJ\ÿÙÏ"5>*• ÆÆÆP,Q,Q*•P.—aÛ6Ç U,Ëò¯sΑÍf±vÝ:<õÔSo~3°?öìÁôòå(-X€+®¸>úhÓ}7wî\h*’n¹\c óçÏÇܹsÁÃŽ;pÕUWaxx¸¦®Ó§O7?0+NcÁ‚!/¼ð.½ôÒ¦ßëb¥f,ý­¤uêÆJ@àx&ñï+Þ”ÒÑÿàA¤ ,ºñF¬yÏ{àØ¶?ò  Ÿ „PJÁó]‚ué —ËaáÂ…Ø[,·Þ ë0÷™gpøÍoÆÀÀ–.]ªÃÇ‘š‡Ÿ7o^â{Þô¦7áƒü æÎ !ÆÇÇaYÕ½ZçÎ[Ã’ÎóSJñÑ~wÞy'R©lÛÆôô42™LTУzê¤C‰™óïÔ~+3†¬ ë˜F~qA’ÐÐÐPÕÃOJ,zé%˜™ nþ³?ƒãº(h£¾b¥RÉxP`Œ1Ó4Á9÷¥ÅÖ®]‹ýû÷czÍ`ǤDöða—.ŲeËšfÊî°råÊDå׬YƒOúÓxì±ÇðÍo~û÷ïG¥RÁ­·ÞŠÏþóu¿ARðÞu×]x×»Þ…¿ù›¿Ác=†Ã‡CO|â¸õÖ[›üE.nê¦+0ÐÝp`@§W6¹=X3×’2‚ááa@þìY˜• V½ýíH/\Û¶}_1¥ÿ—J%?O1A¨™u¯Ê“RbãÆp×\È8P•>FFZÚú롇ÂÚµkqW_1ÆW_}5(¥øë¿þkìÚµ •J°jÕª¶~Æ 6àÈ‘#¸÷Þ{qðàAßÓqõêÕmÕ{1S·\ƒ4û—ëmbcPr­Y5€âOû ž8Xòú×Ãq”·m•JÅØ:ÐÁ®ìú½•J‹-B&“Ay`<“Aæða)A)Å‚ šî³¯~õ«Çg?ûÙºJ)Þýîwã·û·À÷9Ðý–.]Šw¼ãmýnÅbsçÎE.—óón¿ýv¬[·®­z/V:—R@Øy;Ôy# ©?‚:éb ’0t: Ã0@ÁÀÉ“0úú0ס•O÷•·ŸZòÔóƒ6Æ ÃðëPvƒ+VàØ±c˜^¸{÷"}ê* `xx‡nªÿ¦§§ñ±} ŸùÌgð¥/} Äþýû188ˆÕ«Wò,üÅ_üàñÇLJ>ô!|îsŸÃÓO? Û¶qýõ×ã±ÇÃwÜÑòoxÿý÷ãÖ[oÅ7¾ñ üâ¿Àðð0V­Z…'Ÿ|W^yeç>–‹ŒºaTÔ•€@·Œ€1“.Šëˆ8J¥Rþ"ŸT©„Üš5à„@Î9\×õ¯§˜ug x~5¨îÓÿ-ZÇqPèïÇsz6!H{« ›¥={öàøn½õV\zé¥X±bŽ=ŠM›6á_þå_|ÃÞÄÄî¾ûn¼óïIJeËpìØ1|âŸÀøø8Nœ8Ó§gâï¿ÿþH¥ï~÷»5ÆÂÍ›7ãCúî¸ãäóylß¾ög†K.¹Ï>ûlÓïCEökÙ–ú¢êïïoiWâV/ K*éþΘ[0L´×_6é&¡IHY¿MÛ¤Dzî\ßð%„ð2èéLAý))€R Ó4A)õ¯ïUé>ϸìéüF±ºN5“i}Û*Î9z衆Óv'NœÀ—¿üåºü¯ýë5ç?üá#ë¸ï¾ûêòžþùºEG'NœÀSO=Õô»PAñª¿{UË}Ñ4x爺±0l!P§W¶D50‰ñ/IÇ4bJ0=cXÊcÊzõ§®+`ùŒ Ñ½RJ¤Óé*ðŒs¬X!}}}ÿÁz4»¨‘Øßìú€¸:ÎûtÕ0.(ˆ:6¨qÎAðFb{zŽãÔl÷¬GûÑÏÕ¥¹\Î_V>XR!Rã‘^t¡vÖ\TD)ömlÍ(û¯Ï‚N¶·À*)åóy_ŠLBZé×èÞ:#`í݈PkÃófšñL²> Œ*•JxÞÈ[>yÒWc ”†þ©kÊÈG)õõ~ýZÔýÓ£¡¥€çr „ô"yäR‚cÿã÷Z»ùê_vï>'í¼üòË144ÔÔ=I ú¹l²Œ¢ k9p@h$öw*"mÛÕò†nš(?îö|ÇlÃ0jŒ{Êà§;)W`Ó4ýû‚ǽç˜Þ´÷¦ÏJCèÑ+ƒ¢¾ï–ÁkÈœeAA,£$€°¼V\€ø#.!Åáa°ãÇ1ùòË0,@>Ÿ÷Á®Àlš¦Xzs÷Œ1€RêG ÖïÓó ÃÀsÏ=Çq0ìqFF@Áôôt§º·G³œÚYé—„A€' Îh@ÿ“xû5+8Žãï?¹p!àôOÀqLOOûÀ †O§ÓH§ÓèëëC__2™LÍ1N×”×Ó¶mcÇŽ ¥§§áŒŒ@d³ „àèÑ£mõ§n»8_ut¢ 3µ;å×üÝtºì HCœ€¿Uý_Ñ©S§@ÁÔ¢E€³=§RÁ1Œ:ØÕß ø3™ ²Ùl PL xþOÿôO(—ËXxò$€òŠþè?11ÑtŸ©©IÎ9¦§§Q(üéÉ$`”R¶m!P*•099Yãøt.ÚðJ¡n¯œ™ ¬…鬎 X·g:©sœå¿Ý°`'OžÄe—]7Æø²e>Ž;wbë֭ؼy³¯z„‘z§ÑÑQÜvÛm˜7o^~ùe a÷îÝøÉO~‚r¹\=¬ ðž÷¼«V­Â’%KpöìYìÚµ [·nÅ–-[|õ©GUê¶+00Û€A÷ßÀL@ÔèÔûÃB……ÝGÅb'NœÀ‚ pêŠ+0pø0Î~ï{ k×¢8<Œ Ö¸÷–Ëe†QLMó1Æ|±_—„øÆ=÷Àu\w蘘~õ«!2pÎGôQÄ9Çe—]†OúÓèëëóפÓi\~ùåX±bÖ­[‡üÇ„mÛuÓUÊYé÷~ï÷ðÚ×¾år/¾ø"¾øÅ/â›ßü&æÌ™ƒuëÖáûßÿ>¶mÛ†¾¾¾:& Úð©O}ªº¾ÁkC___¢6¼Ò©Óà[Ü© 3:ÇVH8>“¨îk–^zé%H)ád³8{饎ƒñ{îcÛØùâ‹°mÙl¹\¹\ýýýÈçóèïï÷ó‚ùêZ6›…išøÆ7¾3gÏâ’3g02= žËaúU¯!»víB±˜|× Çq044„?ù“?©p¡Òüùóq×]wùÎM~_yNLŸúÔ§|ð«KRJ¿×uqÛm·aÕªUuê€ã8Ä¿øÅð'mÃ+ÎÅjÀÙo$zº62pÔT`³^‚I¨X,âðáà „àÔUW¡42gß>y¥r=ööïßl6ëƒ<ŸÏc``ÀÿSçêšb'NœÀç?ÿylÞ¼ÇÁè±c†±7¾°,T*ìØ±#q[¥”àœã®»îÂC=T¸àräT*…W¿úÕþ”'Pý¯¼òJ\wÝu5÷W*ß ×qýõ×ûz>ßò³Ÿý¬(U~ðþJ¥‚+¯¼²¦ ¯dJò¶.t×xN<ã@ßhO€V§wíÚ…¡¡!äóy¹é&,ðAà@Μóº×áÙgŸÅþýûqà 7 ¿¿?6*°šÿàð£ý¶mcÁÔÖ> CŒ¿þõp½8O>ùdS€®ëbÙ²eÈd2øä'?‰ááa|ðƒÄòåËCGár¹ŒU«VaË–-þâJ)ÞñŽw„UIúýœs¬\¹ûöíƒaàœcÙ²eX´hQ]úßðãÿ[·nůýÚ¯Á¶m¤R©n~B³žÎ‰þߥ•€À9ˆ |©¤ €âÜ%“ç[¶lÁM7ÝšNãðm·aÑã#õôÓ`{ö òÆ7âh±ˆïþÓ?aÕêÕX±b–,YJi 8qâ¶mÛ†ŸÿüçÕ?Žƒ«Áгg!Ãøm·¡ì ݺukÓSB¬]»Ö×­ï»ï>üÁün¸á¼÷½ï ¢mÛH§Óp]Œ1‹E,^¼¸®\6›Å¯ÿú¯‡‚Z_ë¯Úö,@õ+_ù vî܉믿¿û»¿ ÆÒétO ð¨Û35;nupQPW¶' =­þkÇT=ñ¶lÙ‚ë®»$›ÅáÛoÇü§žBîÀdÿá ×¯ÇøWàÙgŸÅæÍ›á8Ž?%8==Ó§O£T*ùK…'&°áÐ!dl"›ÅØÞà;ý¼ôÒKxñÅ›ÿ K—.õGìÛn» 7nÄîÝ»CGÜ…B¡ºÛ‘·ü5XŽRlýšr€ ¶!ŒYH)±nÝ:Üyç56…L&Ó”­ãb¥nI­,in–:¸;p|c£À·. @ÑÙ³gñÄOàÚk¯E&“Á‰›oÆÔªUÞº¹û7ômÛ†éÅ‹1±p!ÜLcÓÓ8Á9\Ç)•-0çÌ,Ç@©iš˜^¿…W½ Ò³‚oݺµ%ðÕÑ÷رc5À“RbéÒ¥±âxÑ[q¨Ö" ?°IÓÐÿ&''ý,¬ Á:®¼òÊÐz’ÌISÛú6¶öVf¯!jP;és¹è¢ €Dx6«´+Àää$üq\sÍ5AiñbY¼¹ýû‘=pù0ðòËþs\À!ˆ&Þ:CC˜Z·Åuë ½uþŽã`Ó¦Mmí–#¥ÄÎ;ñÚ×¾6°A@‹EäóùêògÓľ}û0ìíyäþññqÿƒjµ …Bù|¾ñ;R¼ïmm}O]¡'ž¶½Ô‘ªšyRðws% ÐéíÁ«óÿ3 ÄLªDÉí0Û¶ñóŸÿ‹-Âèè(r¹ +W¢¸jˆë"}ò$ŒBF±V*¡lšÙ,x6 wdÜûЉah÷îÝØ¾}{Û–pÆöîÝ‹±±1ˆ›þwêÔ)¹rµß)¶lÙ‚›o¾9°úßéÓ§ýà¢hCIþòÙ¶ú©+ô{Ú1à¿«vLòFù@w·ëürà:§ ø¹ÿ¤ú§P=ŠcÇŽùF¿‘‘ÓDyñâš5þÁ4P Âyøðaìܹ³cº/c œsÜwß}¸ãŽ;ŠîÅb¬±¾3ÆðÈ#`åÊ•Èf³ Gñ#GŽÀqߨÚðÝï~oyË[ÞÖ†W"%1üéç­. Ò¬ Ô. ¾h”ÛoœA°ÓÞçRJìÛ·ûöíƒišX¸p!æÎ[ãæË9÷099‰#GŽtlûï ™¦‰;wbhh—_~yä(^,±ÿ~?\ÙLWÏ¿ýíoã­o}«ïÝ6ŠŸ9s'OžD6›­kî]»0wî\¬Y³&VõkCÂ) ä‰Vêhfµ+0’-Nêvo·Èq}‡¥44x¥eY(‹øÖ·¾… 6`þüù5»OOOãàÁƒ˜œœD___AIµáÉ'ŸÄÎ;±aƦÛðJ¥¶@Þ ­Ó¬Þû,Ξ=›¨|£µüa哤ƒžµ#ÿ¬ÛˆÔà8n§ WòȯÈu]œý7«ƒ‚á@:Ý1=êÑl¢f¿Óv¿÷N®ºì  ÚnºG=šM”DmíˆþÏf¹'`Mãêtä/štÕTz4Û)nA[³k€ mc‹e§VMõ¨G³‰š5d7µD8ÆØ)ó`·œ‡Œü-¯‹FôhvS£o9I™Fßx7¤€NÇŒ|‡vVMõ¨G³™ÚQgá ›+.{RZ öÒÁ@QAçŠ!0M–eÁ²,pÎaÛ6lÛçü<´¨G5»¬½#`]LÀÙl ¶„¨aÛ€ŸoÀ¾¾> aîܹèïï÷;V2 ! „ R©àôéÓ8}ú4ÆÆÆzq{TCÝÿ¹Š Ô!¾'`\'53òwnƒƒƒX±br¹œ×^R zï%T^:ÆÒ¥K±téRpÎqðàA8p '$$" ðt*ž:ßoà¶Áç Ø!/ÁN.NÜI­i—d³Y¬X±ƒƒƒ>èÍJsNœÀÀéÓ°J%Xå2 Û†` N_œtÅÁAL.Z„âœ90M«V­ÂÒ¥K±wï^>|¸S]xÑqpýùnEwé\x¼vC è¨ P»'iꥻ­ÿŒŒàÒÕ«A¼(5ù±1,Þ½ýcc€”È,X€Á«®BzÞö±áÏÿüÏñðÃwìwÊd2H§Ó«/H’Jàm]«¾žº÷*õïÖå4н•€@W<k1MÈù] |É%—`Ñ¢E€Á3g°úÙgÁ ¯½¯û_ÿ é… } «8p”RFµk8ç ýý¼í6doº ǾýmœùÁ°äé§qöÌœ¼új àúë¯ÇO<Û¶Ûj¯eYøÊW¾‚|>Ï}îsxðÁýkÙlïÿû±nݺŽ2€µFÝvÖÓºåV»WØ|ÇtƒÌ›7‹-!óÄŠ^3MlüÌgpå?×›ê+—˰m®ëúL@Ù2™ r¹ …Ž=Š;ï„9:ŠÓ_ý*†öìAjzGnº ™L×\s žzê©¶6+ùßø ,\¸ÿå¿üüô§?­¹V(ð—ù—èëëóópÝu×aùòåH§Ó8rä}ôQŒÕÜ{ã7‚sŽ­[·âºë®Ãèè(¶oߎ'žx"´K—.ÅÆ±páB¸®‹}ûöá§?ý)\×mùÝ.Vê–@ÏÁràÎl ®§“[•úûû±zõjB0çäI¬xá ,_Ž7þŸÿƒüe—ÁuŠELOOöm8Ž×uÁ9¯a†aÀ0 ¤R),_±@qñb |â˜úÎw€§žÂÂ_üÇ^ó áŠ+®ÀóÏ?ßr?¾ímoóÁEºªñ¿ÿ÷ÿF.—ÃÁƒ‘N§ñ®w½ ¿õ[¿…ÿüŸÿ3vìØá—»ûî»Á9ǯüʯàòË/ÇñãÇ!„e ,À?þã?âèÑ£8zô(–.]Šùóçã=ïy>ò‘`zzºå÷»˜©ÓŒ øíwz% ÐE‰Y”ThGü_µj(¥è›žÆªçže ·íkÈ_v*• &''Q(P.—Q©T| @g”R0Æ`Y*• Òé4V¬XL&ƒ½{÷¼óN8‡¡ÿàATæÌÁØè(–/_Žƒb||¼é6g³Y cóæÍ‰ïù¾€íÛ·ûRÇܹsñ•¯|ÿøÇñ¾÷½¯¦ì•W^‰oûÛøä'?+¥LNNâî»ïÆîÝ»ý¼W½êUø«¿ú+¼÷½ïÅ_ýÕ_µñË\<ÔMÀûFÀ.®º4Lÿ{éf\&“ÐÈȈ?Ç¿rÛ6P×ÅÕ¿ó;¼ürT*Œajj ÓÓÓ˜ššÂää$&''111Q÷§®MMMajj ÅbóæÍÚ5k`».ä[ß 0†¹Ï?Ôø8!m©ÿÔÆ“ÇO|ÏóÏ?_æÓ§Oã¾ûîÃ¥—^ê÷¢ééiüÍßüMC¥X,Ö€ž{î9<ýôÓX¿~}Kïv1S·À¯¨›‘»à ` ¡`ŽÚ ´ÑÁˆ‚åË—†NžDv|sÖ¬Á«ÿã„mÛ˜œœD±XD¡P@¡P@©TB©TòU}C%˜¦Yg#Æðð0‹À 7ÀÜ´ #Ï<ƒ£¯=FFF°`Á‚¦€ À×Ûóù|â{V­Z…÷½ï}¸âŠ+0<< ƘmÁ‚سg~äÈ‘ÄFÊ[n¹wÝu–/_ŽŸ¹·"Ù\ÌÔ,È“€¿‘<ë€zóâÀFíþ}#Ù’]»@ÃkÿÇÿGUw. 5  X,ú65 „ðUÃ0|Õ@œ„0ÆpÅWàð¡C(¬_Ü®]è;v ™'PZ°Ë—/ošœ:u år¹f ê8š7o¾üå/ãäÉ“øÎw¾ƒ—_~ÇÇ5×\ƒßÿýß÷g2%õ¸å–[ðÇüÇxüñÇñÕ¯~/¿ü2ÆÇÇñþ÷¿7ÜpC ¿ÊÅOZñªçëӳܸ~wàF¤ëþQ‹ƒZ¡ááa@n|ééi¬|ÛÛ0¸nÇA¡P@¥RñGýb±ˆJ¥âÏ8ŽãÛ€êŽ7†aÀ²¬šÙ•ŸÏçqõúõxôÑG1qÝuúÑÛ·å… 1þ|PJ›šRbË–-¸þúë±téR:t(¶ü7Þˆ|>?øƒ?¨Ù•§]¾á oÀÄÄ>÷¹Ï¡\ž‰æÛßß¹Ü5Ì:µvÖ/®mlã—KL¡f0<<ì[þ`Éë_Çq|C_¥R©½2–ËeŸ)(É X,¢T*¡\.ûåUYUÏŠ+`Y sçBX2GŽ€0 óæÍkºß¾üå/CO}êS˜3gNÝõÑÑQ¼ýío7}‹1˲pçw¶õÛY–×uk¦üV®\‰7¶UïÅHyX¾:vs% Ða .(HØKëéNxöõõ!•J‚'À, óoº ŽãøK{õ?•¯ƒ:(賌10ÆP©TJ¥|µaÙ²eØrê¦,@þàA¤Îœ=2‚‘‘‘¦Õ€ƒâOþäOðŸþÓÂ7¿ùM<öØc¾'àš5kpýõ×ãïÿþïO=õ>üáãÓŸþ4~øÃ¢R©àïxGÛûñ=ñĸñÆñùÏ?ûÙÏ0<<Œ»îº ûöí ڪû•@Í.Š”;p'©ž€±¢ÒÍ>©`YÖÌ ¾B¹U« - ‚sDs]×7ø)+& àø•?€iš5uqαdÉ<õÔS( !ð Ì©)8óæ!“É´Ô‡<ðž}öYüÆoü.»ì2_$ß·o>ûÙÏâñÇ8pŸùÌgðþ÷¿úЇpàÀ<øàƒxþùçñÁ~°FçßµkW¤ð…^¨YÔtÿý÷c``oyË[°~ýzìܹ_øÂ°dÉ\wÝuM¿•Æ#]õ:¯¡l: 2ؼišm=·•€Fà£Yg vuñ¢ Wàv½-˘Ž"úFFàº.¤”¾q{Ì@¥Õ¹:ª ʨnT÷©¿l6 ÇqPö,ð†7ë{ÍÒ±cÇð§ú§ ËmÚ´ ›6mªËÿèG?Zsþçþç‘u|þóŸ¯9Bàž{îÁ=÷ÜS“ÿôÓOã¾ûîkú](§¸öÿ¾¶å¾hšy]¦VÔY=~ ÔŒ¦³>(h+î¿ÒH¯“ÿMO'¶†‡k|ü#Piu®Ûu]LLLÀ¶mŸi¨?ý~=¯¯¯¯jgð¬îF±BH[  Gujä—kAêÆ¢ .zÖ6¶AII‰ëÊázb}p:,ª­Êýײ¬ºè@aï¥ÒÜ[Eèz"¶d „¶Ö\TDN/néÖÔþ£ çœ43N×øQ$¡N‚!Ç èguLÀ¤Ûƒµª4"¥ãºÞÈ[:yŽãxm#þÜ>õb(G•§œ~ÔuuMÿôûôôôôt•ÑxSfÜÛ`RŸB{%“Ë(vûZ»ùê_žÛyNÚyùå—chh¨íz:þ¨•€¦Î[ܬR@¥R©Ž¼¦ a({ €sŽ\.çÙ0 ?­@¯l|‰A7üé÷(û€JŸ:u Žã€yF7žËÒc¯Jê˜ô ³/(h‚Ðeͪ”OBŠ@ipôèQŽ@?LÓôÿ°U`}ªO÷TQ‚õ{õsÃ0ðüóÏÃqÌñ\y]Ï¡·jî⧤>þí‚¿n%`‡ÌܸÖòßL'Å¥›¡J¥‚B¡B&.œÚ´ Žã T*ùàM¥RH¥R>¸Óé4Òé4úúújþT¤œt:í—×C‡+Áçž{°m MMÁ3|`@s‹zzta“ŒÉkü¨s¬¹°<;¼1hR¦pêÔ)B0åE:û¯ÿ ÇqpäȆáƒ9NûÌ@?“É “É ›Í"“É„2UV1‘ûï¿ÅbsOŸ•¥+üPâgΜiºß„¨T*BÔ„%³m;q8rU^ÕÅ9÷­´AùL´íèb¥¸ï4̲fñÒÿ»étÜ0ÚbÞŒ tAE:u +W®„ËazÞ<à…0öØcHm܈ÇcÑ¢E5Sƒº1Ð4ÍO@¥ë«Q_1%!8p<òH¹ŒuGŽ”¢tÙeª+ïš%Ú›nº —_~9–/_މ‰ ìÚµ ›7oƱcÇ`YV¤¥ZMM à—~é—°lÙ28ŽƒééiìܹO>ù¤ß IÖ®]‹eË–a||»wïÆæÍ›qüøñšY’U©_’k@-˜Õ³@ò=üiŽˆüà½I%€ÉÉIŒchh'¯º ¹GÁÉo|óV®Ä±bÈd2uK~•PX@Ó4‘J¥j¤Æ¾ñoÀ¶m\sø0Ò®‹âºu¾ø\O߈8çÈçóøoÿí¿aÉ’%þÚ„¡¡!,\¸×_=6mÚ„ÿøÇ¾ýA'5jÿʯü ~ý×®ëâÅ_ÄG?úQÜ{ï½X»v-n¼ñF|ë[߉'Bƒ€rÎ100€?üÃ?ÄÒ¥KkÚ°hÑ¢†mx¥Q±?˜×,øÃˆt02P÷ÙxÄ&¡:5Êo–^zé%@yÎL,] Q(`ìÞ{á8vìØÆ²Ù,r¹r¹òù<òù¼žËåüëýýýþŸÊÏd2øþ÷¿#GŽ`ÁÄ–ŒC¦R˜Ú°„ùlRr¦iâë_ÿ:/^ì¯VT‹Ôßèè(ÞùÎw¢R©Ô©œsü‡ÿððÞ÷¾×·y”ËeH)ýû-˯ýÚ¯aÞ¼yuâ¼ò—øêW¿Š%K–´Ô†W"µ"Ú·b¬ Þ!+`Wv¦1ñÛY5•”ÆÇÇqòäIBpbÃØù<*Ï=‡ÒæÍ˜žžÆÏ¼ ™:Àóù<jþcÈçó~9Û¶ñ—ù—xðÁarŽW9‚±×¿2“缩˜€RJpÎñ|û÷ﯜ¢ãœ9sªÑˆ4;ŽƒÅ‹ãŽ;WéñA0¿öµ¯õÕ ½ Ÿüä'ýé˰ç«:òù<.»ì²žM@£F3-? NwCíêš' m0òë*@'½½øâ‹˜3gÒé4ßr –?ü0ìú'`bΫ_M›6aÉ’%X¿~½¿²/."eYزe þþ[ßÂäÔr¥®9tiÇÁä 7À^º„¦÷àœcÁ‚~ÀÎÛn» ï}ï{Ñ××WÇ  GGGñâ‹/úËcxï{ßëÇ:Ѐ.¨?J).¹ä?¨jÃW\á?#ìÙxä‘GððÃã­o}«¿*ò•NTV§î;½=xmå1A[M'¥r¹Œ-[¶@ '—Ñ׽ŽiBþøÇ ÿ÷àžaë{ßûvíÚåë¿Á¿t:={öà«_ý*¾öµ¯arr«O­{ö`°\Æô5× xÕU „`÷îݾú‘”8çX»v-n¸á|ï{ßc ï~÷»qï½÷FJœs¤R)ߪ_(°lÙ²:à¦R)¼á oˆŃmˆû§¦¦ðÿðøøÇ?ŽÝ»wãÝï~7–/_îûP¼’©ÕÑ=©š\pFÀzÝä\¹ibbÏ=ÿ<Ö¯_Êнá XôøãHíÛ‡Ì=÷À½ùfŒ/[†G}Žãø:~:F¡PÀØØŽ9âÇ ´ŠE\ð æ †ñ_ú%”W®!ÇŽÿýÛ¿5ÿV®\éëè¿õ[¿…Ûo¿Û·o‰K¥r¹œïh”Ífašf]Ó4ñÚ×¾6ôþT*åüÐÛ —Qi5ø;¿ó;Èår5mèô6eµ"ö7c#ˆ¢N. êú"í`ÐϨt·v>zô(8çX¿~=H&ƒÃoxvïÆÐ¶mxè!ô cjÑ"Œ/\ˆS¥Ž=Z3ÿNÊeÌ?}óÇÆ0oj LJ”W®ÄԵׂ{Á2÷ìك͛7·dB`ll¬pù|ëׯ¤.ÊBê›Eýéu(‡©¨6m ·ß~{„`Ûvì¦°Š¨ãV}ú[¡]ûZüåϵíðƒ$R@w6 éÎÎ@mHhn…Nœ8M›6áºë®C6›ÅäÚµ(¬Z…_DöÀ oÛ†ámÛ )…mYpLÔuaÙ6 OÄ•–…ò%— ðªWÁñëÞ¼ysÓS~5ý"%^|ñEÜpà ±€ þ‹Ed³YaÒÁƒ100øþ±±1ߟ ª q÷««YoáSü`°Åx‚×]Õæ¯C{‡O´UE7Á_¿¸n6ƒ{bêéF*~o;455…G}«V­Âe—]’Jaüê«1~õÕ°&'Ñwô(Œéi°bf©iY¨d³(f2pFF`/^ xË|ª£Ï³Ï>‹‰‰‰¶ÚÅÃK/½„B¡àÇ(l4zù{U~ûöíuRC\gÏžõïoµ @2Ë´0 àÑ¿íÐ/ÙAú½?þ罩*jÁOÒæ¶U€‘ýû÷c÷îÝèëëC>Ÿ‡mÛ˜šš‚ëºH¥R±F7åÐôðÃ1†\.˲ü= )¥Èår‘b¤jþ}û°k×.d³Yô÷÷£R©$nÃ+™Úõü«»Fº¿¸s;Ŭ {Ù°E@Ýß }v!Ä_vÌ9÷פR©Ä#®Z¤£\€“?® ccc¾tÐõk©“>ÿIœ€ºA]LÂq· j“а{Ï—Dp®I߇ URÑŒÎg^)g¸ë”K°¢N®º°PgXQSq&”éQf ucäo´`öÅŒ#BBAÝh3Ðø{t¡P'|þ¹wË +µFy-&æ“ Êô¨Gç›â¬ühp-Q¹àžèÔ Uƒ‚*n30¨ˆÈïQf ukä×ó.¬åÀC3à—1ù=êÑl$ýÞ_«.ÁŒÝ^ÔU@3áÁ£üéF=šýdp+ßúñóÝŒ:b° üófcêßgУɲ~r|Nȵàl@Ðè§ŽIÀ¾pÆÀ9¯»’Ê¥”¡L N×äÚ3kžD)•:øõx\@B„"rÚj û¡‚j€nT6Õ‰@f|9TÁO#þÂÏšÿ…PF68oåYIÚ‰ö4Û^ÙD^Ðt±= ôº!š®+) Lÿo üjwªšÖb¯Î c7Bÿ—@•a0ÆÂ*BàA>#˜.ËŠº?¸(ÈÌÐØ-n3!è£~„ èƒ ÀDS£*iùóQg;€ìFQeºÝ—IÀw-lQOÔè¯F|õÆ¿(ý¿±_ÈÎ,UÖg(eƒÁ9B‚€Žiý1a³°mgÏžE&“A¡PPÆIQ3€ô¤Qqá:œ YÀJÀÈ‘º§FýÀÁ©¾(c¡’àÃFþ HÓ‰­Èšù“×M&r.šDìo¶=Iß5®þ$à[o¹ƒ ÖA¯ŸsDOŸ™ü0wAø,Ž#ìS§KBˆ@U ð1iš¦?0 …šÐða˶cý<€ûú¿ã8¾±AJ)!BJ) !Âædª2 RCžÕOC„ ƒ*€^†cäjô—Zù8±¿N· ù(¢ò;òNŽÆÍ€¿S÷¶2zw‚¡t ü2¢\Ð=ýt†7òÇ9õŒ!ªÝÃójý”*P(:“ê6 ïÇq¤išj†”R9>>.£öˆeJgPvBˆ´m[jóúC¥”R”L Tû•*`æHÓ?x#Ušjé0ðëé0g¢N|øÍ •{Û9; ÈnÔ“´ÎfD{Ù \Ôô\ˆÃÔ‚°?8€t£6ª¼áy™Ð•€ÓÓÎ!DxجSlÛö™€Žå°þ­aýýý²\.Ër¹LÂ,‹”R¿_!‚s.)¥€(;t‚^3à·(þøÁY€ ØO´2õŒ!éàÇÔh¢¨t'õÛN×Ùì³Î'€;™ŽO° aåDH™ dþô{ƒÏ‰“@‚ysR0­jd¢ ˜šr&áiœs@Vö¤ò ~T1®×ë¤Ô€R©$u;€þ®¢º8™m2Rc,ô ¬4pz»úc꤃?,?Øa@½ÎßHäÓÿ» Ôfë<ß;ŸÏ >«™‘3ªÞ`¹Fª@˜J ÏµS~2âþVÚ}ÕF%L×Óøxy\J)”M÷Ò²T*I˲jfR©T]×0€ŸýìgõÝÇÇÇe__Ÿ%„W™ îÛ@NM±#UÍ Ìgæ¬1}à°|u-( p=8¢‡wCïÔhŒ&빘@ÞŽÔÕ*°ô:éÂ$Ø\«#jôûKÒÆn]Z3òë+w½4q'„pƒB“|µ"ÇÇÇ¥išjÇÏ~ö³š>Õ€@‚Î@eÀ’"Ç„a—RŠŸïµ¶Ý|y…³ê4=¤60´Æ¡€ dõÃ6J‡éõÁëÉ>î¨"*ÿbÛlk§Gü°ò2Á5ü@üHß øãÚJpÝ-Kêú˜R Î%¿çÞÏ)ðB„뺀0MÓWÏÖkN@~~ÐH Þ>ñÒÓñý™J©°m[x¶Î9祔éôÙiºwÁ ¼ %Œ>‚ü ã/»u?”>jGIAN˜ó8¡×y®@~1‚³ÛévEû¤×ëPe‚L Œ!Ä1$mÔÓ£W cp(  ~%àÁƒ“{žž&„p¥~SJ¹”R:Ž#,ËR3s¾ Ï“Ú`Íãël[¶lÁêÕ«ýíèƒß78!„K)]õwðŒñü‚Aç2À“4y|Á5Æ^v›þ ÂÄø0¦,#Ö–F÷öÒí§Õy»o‡1„• Fù ïmvþÿŽ_½¬¦/tUà™gO?/¥t¸„š* ¥¶m Ó4E»¨b;Ha‹¤2PJåÄÄ„dŒ‰r¹,<;€ „pÎ9×Ä—â>¹×z®&& 77 ó¯¶[Èbì0ðëì¬(ý¬Ýt˜H’t·ÚóJIë}œn‹Êk皈xvPÌ×ú~y¸<„”Ñó.¹tÿî-—D.ÿýî÷^zŽâx˜ã”R…EŸÞ¨/”øÀºq.r5 a’1VcPðt Ắð¦¹ÂBpBˆ{ð¬qj¢DQâÈ\­"¸ô޾H‡‰MIű°üó•n•qt*}¾Ü*à[ÍkõZ’9ýà5ý›K28…å!¤L0ï¿û*¾ˆP‚ÓgÊGŸxòø1OüçBWßu]®ðY*•„2z─ ª-&öÛ¼cÇi†¯C†¡¸‰R¸÷çRJ9!ÄñÔç{ulJB„r ^cbî³æ¥ÃÒI:žïx6¥Ï7 Kó˜üàˆ®Fþ(†fØ Ñ“[ÿÕ×ÎÃÆ×,Dýó^~@JéH)Bˆ£cRÊ•Š®p«á;vì¨{-)¥Œ””@©Qc\S\ι+„p•Xòÿ=—Þ:V û©Rhm8¿Ñ_ÍÀ̆¯H:Ú÷ÒO'a¸ÍÞvdDÍ¥Õk@âêk§mÙ¬‰|üjI©'N–þ÷/n~šRêBoôw9çJŒ1®Dÿ©©)AĈb¨ªÊ  „ã8œs®8C)u<ÎdK)퇷›?ªÖ Pâ3¾!Š ¿™¡Íd³e¤½PÓ"&_vøÞ$ùÝí[ÉëC@L^ì5BðñÏ­Çâe9õ–J)¾úõ÷q.*Æ\…;J©p]—;ŽÃ=ñ_z´4MS†!£ô ºÀ†aïÈ5@Ù\!„C)µ)¥öã;­ÇÇé ~, _˜{™‰+~%[ûÀ^ú¼ÆèнFø¨üvG÷vòÚ­£vßýÁ5ØxC­çŸ¾'à¾ýS;þÏ=;wh£¿­pG)uc.¥”†Áu¬Äÿ°Ÿ¬Êvÿ˜J¥¤a’R*'''¥T”J%A)åŽã×uk¤!„+¥´T~¸Åú”à”’ªA˜ '¶òui¬¸%}ÞÁv¾ÒÍ5ih1¿Ær$,>Áßî³Ú©ëÍo]Š;õáqÿ¥„ø‹/?€Š”²"¥t´ÑŸ»®ë:Žãÿ(¥ÂêÔFÿºf)ÌÇÅ”étZ*§  11¦8#„ÐUGJioy™íê%ó{ ´ê(=&àÓïÈ`Ý™¦Õs™ž£q7ÚνÝØÝN^;íèT»)#øÍ^Šßúµ5}_ãþK)xèð??ðà¡}:¶¤”Ž'q;jô÷ls>F•óçýW7ò+гÈ-[¶ •J)o"199) Ãà•J…{ܧÎ@)­¨¿¿û©õ螣ôç@«Aü¤dÄ%š‡Ð%·¤°þ7s0ûê÷8ß ¥ŒÆIêìTz6î¬+./“5ðÉÿ²o|ËbÑ!¿Ÿß1öóßÿÔÓ¨h¸òGιëþÜJ¥Â ÃàÊ`O)•©TJzÎ?‘LÀrˆà§•O€â0ÞWœ‡s®¤[û«(ÿùÒß>5I÷ú¡)¸4ˆ£‡2ž{©k?’Ü•Fíƒc:M¦{£qãtüíîIêX»®ŸÿãQ\õê9ˆ"B)Ž/íùÍþü›ÊžèïcË›pcÜqnW¸dŒ‰ÀÜÝO¢Ç':ÉLX_ýHGGGI¡P ¥R‰9ŽÃ2™Œá8Žaš¦á8ŽÅ3)¥)×uS„4€4!¤@€ôâ!1ò‡ï±ÿs>‹!Êa¤$¼"MÉ%q] —KH.qr—‹½U0}œ‡þHI>´`ºÝѸ÷ÎÆÑø\¦g3ÀÏE—-M㿺W½zFÊ‚a™ †á§ Ë5 –‰’MÏÜý±Í_Ø»oê€2€’”²„*3(†QBT8çŽiš¶ã8®išn±XtMÓä¦iŠt:-÷ìÙ£OXøÍÓ@T<‰@Pe BÃ0„”’W*bš¦Ë£®ë:Œ1 €B¨ëº”TC„’#géé¿ý‰ù·ù÷îóYÌñj–’G iÀ“D„†V3ä—gpb›ƒãÏ:˜<Äܽ› Ÿ à¿ØÒ¯TðS ¬^•Æk^“Çu×ÁL™5Öý°é¾é¢{öþ⥿ܻoê´'EW¤”Ã0lÏÀîpÎÃ08·R©poºÏýÓétØÔ_¨ P#ɤÎ9Íd2†mÛF*•b¶m[Œ1Óu]‹Rš"„X¨Jiι’ÒËæÉ‘Oßåüæü!\"!‰ë€pWáHÆÁ¸+Á] ÎΫG»(pv‹±=S‡ܲ¬{£Þh<ûÒÝólxX^¦à’®\—ÂWd‘H¥,0£:º)«:ò{£~õƒaY8=)_þƒ?zá¯wí>)¥,(3Æ” PPBT Ãp8ç¶eYv¥Rá–e¹ÓÓÓÜ4MÞ××dz٬ô¦þbG >"PN§áøBA¦§§y&“!år™˜¦éº®KcÄu]B)%#!Œ1pÎ!¥ÄÁ“ääïþõ—Ÿû¿œw]¶D^çWNÁ%#Br0 Ö;‘šsÖXÅຎ-aOKT&%ì‚·«ŒB Á«R„” 0J@eÕõÌK3J@¨ž®^#sê•¡„€U.M(a„²ªÏ6ñÎ (e „zŒ´z½šçݧê!Ú¹w(õÎA(çpÜá.‡ë¸àŽë¥½sÛçÜqà:ÜqÁ]ïèp?]SÖuÁ ʨÁÀLf0V=2/0 Ã0@MÊhõÃ3(¥ Þ}Ô4üëÁz)cBTÛárHÎÁ9‡p8¸ëV¯9®Ÿ'„€p½wàÂõÊÎýº\¯>W@pŠïã&!|ÜN2k€i¹,ПòÒ Ì:3Â{A£¡/î™~êw?·óÓE>¥ìg:ø=Ýß6 Ãq]×1 Ã-—ËÂ4M>55% Þ$fùýC€·–¸.tÞ–-[0::*Ýê$À²,.¥$¶mÃ4Mâº.1 ¤ê'¬×é‡ +ÛŸøšyïï¼Í=róüí `¤á³Ê„¤R›”š @X5Ð(IÆ…p%8—p]€»®+!%`3#0 ì)Cõܨ2•6Lƪ÷¨üĺó®×ºo]<‡_%…×XâIT )@¼5½'Eí{ÄíNb<‚Û—‘˜ÍƒõÔ쀸/®žfʯ Íâm=Óó¨ûÂî­é“˜]hiÄGœ¤,eÑeƒí«½ø­›([ÓÖF{Ãuˆ‚óøqýuð˜½íÿýÁ±û6m™<@©è:?cLEa{º¿ã_˜¦É§§§¹eY²,¡‰þ5]×ÞPj*رcV¯^M\×U¾$—ËqP’ç\í0µw™a’sîBð­{èþ­{¬¿ý¥«ÜKßró¶ÁŒ\I m+P=‘ Uf. ¼mŠ@TŒa"¬S‹ÕÚk1ßp蓃U?n—_Oò²¢K ŠE¼ÖL=A YooÁǵ=ÈøâÄù °>8=Î÷ÿóÏ&îûÁOÇ_Dð6¥´ÀÖ ~þÈïßeŒé#?Ÿœœ¦i]~ƒÕ~‘áÃd³Ûƒ¨‰.*`zz¹\u!ƒã80MSí øª1ÁU¡.!Äýésì…GŸ7öÜy­}õkœÛói¹B*©€€RBÖÁÝã~I•;G3s-¤"$.{-y=q#ðZ,ƒ\#1#tðšôf@¬'Nj‰rðZ3 oB8K|-HaÖ}òì¤8ø¯Û ÿrÏ&7{ w¼QßAUô·Qe¶”Ò1 Ãæœ;øÇq~eôSS~šÕ¿Nô£H"øé;vˆÑÑQõ–Ê(XÃ,Ë’®ë‚"…Ò›¢Paİ„Ž·”Øùþ/¬§~°9µå’wîkÖ8¯^>ä\5§¯F5Ш@t{€âi~ìÀ8U cÑ¿(mæKhUÜo£žf€-â„H.ĉð± \“²5q_Ô>úÇŽc,Ý¢0F(%ø‰q¹gï ÷¹Ÿ>S~fçA÷Û åesÎJ©ƒ*ð6cÌwõ%„8œsWû}ð3Æ„~mô÷»a¦Ïer#`MG†«˜±¸® ¼R©ÔH¶mò,pÎ}ñŸ1¦‡w¸RJÓë€ Àxù$«ì=AO’~d(+r¯¹´råH–/IQ1`1`Q‘§y™ñ¾‹0FU'Þ7…kA4e+hGܧÑjC§ÄýXг ôg ŽrZÑh‰!Huâ~œŽÏ£D;RA3òsJ‡“¢íÒI§bLV&ÙdEÐñ“zä‘çåó'Æ))m?„—”ÒAõ[¯ûSׄŽa\YûÃÀŸJ¥¸2úÀŸHô÷ß§Áufô‰€(ÿ×uI¥RaœsšËå˜ëºÌu]jY–Á97 Ã08çŒsn2ÆL!£”šB“Rj¨£”Ò¤”2)¥A1¤”LJɼ< €I))¥”XL}O˪b@45@yxáɪǙù¢åë?¬¿%s”5Ø¿®u…f´ðó‰:}ˆ—£Ý[—GfÚ<£âT#%¤ô¬ ÂKKé_÷ö†„”Zùê×P-ëÎO{ºÕFu®¿+ñÞE?"ªlØ=3ýZmž×N HxGYßÖ™ëÒ¿Oµ]Ï«­¨û®IÍ¡)šÙ![YõÉEÛ¨”]âx[u Tƒt /Lž8—¢Bç9Þ2^ý¨|ûƘÃã®ëú:¿²ôÁ¯ý‚¢ç€×‰™€ã8Ôq–Ïç©ã8Ìu]–N§©ã8çÜ0MÓàœ3Ƙ!„PŒÀB˜^ó“R”Rª1Å<ÀK €Ðêð£ò¢frÏ‘¸G …ZÓõ=2DUgQÀWqø¹B(ð{i×K»jÆ8¥TéùÜq—1暦é–Ëe5ŧ ~þt_'À$dÞ‹7d•J…”Ëeâ8åœÓ|>OmÛf®ë2Î9M¥RŒsn!˜aLIB&„`Œ1CJÉ„cLô†”R1Ê#ÞyÍ®àŠ)‘G£@ßc= #—/fŒ5›åxç*P®Js8W‹ÜË)¥®¶‚Öé]×U‹ëÜJ¥¢{p˲øä䤈Ñù[?КcBâ8 ¶m3Î9UÒ€ëºÌc†‚À¯€ÎÔ¹ZcàŸx×)j_zMÐÛÚ£5C>8´øz5º¶bjŠ[EÏ 8ç š«‡îVçŠ øu ÃàjÔW‘}¦¦¦¸šêë4ø&€×qL£££´R©×uaÛ6u‡J)‰g Bêº.M¥RL_ÁLÓôÏ ÃðG|!õΩ>ò+I@oƒ¾Ê1¤=êQ+TgYl€ëï” MÐÂçKz×uUDmá8ŽZOxëù¥T†!ôQß²,a<ð‡E'o ü@ Àë€(&dÆ ¤\.ר„D©®ë*)€ôõõQ×u™”’rΙeYT_A¥”Ô4ÍšÑ_µÛ0Œ:ñ¿7ò÷¨ * ¨Ñßu]êNß—O¨P]Ú†:¶mÁã„a÷ÂxIµ¦_ŸR*u}?Në.¾@À´È¼ŽHÄti€sN8ç”sNˆ’8çTAÒé´úø‰¿»išQÀc=êQ[±-ƒŒÀq_%Ð7ç n©G)U»l©È=Â0 ¡"ù¨%½ú¨ß-ðm0¯S¢,í>0uF lŠ!ˆ’¤”~ž”’¤Ói*¥$B €x –eÁ¯:¡‘ñ/X®G=ò)A}}&@÷ñ„i۶ϼ týt¹\ö÷ëcŒ Ï=Þà©€¯ëúðÕ³CWÀ· ~ MàuBPG2::J È”j088H„DgÞ¨)%Éd2D1õ‡Ñ> Ü=À÷¨ cz^P Ð÷Ï(‹ê„ÐSJÕ¶]~OÅ7›ÍJA¿~  à:À¼Žˆ›sd®ëÂu]ÆÀñ‰”’ !D è…>àƒ£~&“©iƒ*Û£u‚Ô&›ŠŠÅb4 ÒjW^Å Ô&»ú޽Ú"©D} øÁtÛà:ļˆ ¡ § ª6è6Å@I:C˜3gCfÝ{£}ºIA©@½:RJ娨‚[t3Æü2:ð=QH| 3à:È´i†ø6`F*ʼ÷ëÒGyÅ$¨' ô¨ ŽúЏÃÊé !xÐGû_?ÓÕŒ¶ã @눦4©¨2j±¼tÍèT™CTzÀïQ'(ŠÕ`7Árúv܆Q]o=¯ÛwøŠºÆü4fÁó†Àg À cP¤3ˆ(RŒ£G=j†t Ç”©9×be¨Ø|ˆ|0v^Íì"H»ÎüE¯‹m´h'ô\1 –Aô¨GçŠÀä@cPŸwÐët΀ÿÀØ€yÕ" óâò{Ô£sI²‰üXÀ+à+:ç  ®ÐÐ{L¡GݤfÓ°ì¹|Î;¨kP2†[Åù~‡]ÔÔ`Î7àƒôÿៀ:ìN"IEND®B`‚Carla-2.4.2/resources/32x32/000077500000000000000000000000001420416754300153425ustar00rootroot00000000000000Carla-2.4.2/resources/32x32/carla-control.png000066400000000000000000000042111420416754300206060ustar00rootroot00000000000000‰PNG  IHDR szzô…iCCPICC profile(‘}‘=HÃ@Å_S¥E*VqÈP¬ˆŠˆ“V¡J­ÐªƒÉ¥_Ф!Iqq\ ~,V\œuupÁ77'E)ñI¡EŒÇýxwïq÷êe¦šc€ªYF*3ÙU1ðŠ èÃ(f$fêsÉdžãë>¾ÞEy–÷¹?G·’3à‰g™nXÄÄS›–ÎyŸ8ÌŠ’B|NN€4u•¸áe¯{¼;ØÞÛ¿gšýýÊrʰ>bKGDùC» pHYs × ×B(›xtIMEå/&ýâ…IDATXÃÅ—Í‹ÇÆUÝ3Ó3Ó3«¯ÕjW«G²³RPlYJ àpþƒ>9ä‹ÁÈÉrDGƒmlr ¹šXþ@"J‚D‚+ è‹ÕÌH»Z}ívïôL×ûæÐ=ëÑ%1ih˜éjºžª÷y~UeØz¾ÚKŸÖ™733 …Rš¦Þÿ²Wß÷]¯×KîÝ»×Ü8þÜÜÜìö©Ú¯Ã©m/}/ŒõŒ kuêµÕ°Žs)ª!u ÑÉFŒªP,• ‚€R¹ÌúzD¼¾ÎzÑé$š$I´u>;É/[­VHGxssssõjpiÿ¡CÓ{æ÷XëD¢Ô¡FçR„¾‡Aœ ¢ Ù쪀ˆàœ " B¯+óõCÖz`¬b ‚"¨:T{()ª‚ˆCU@£`ú•Üf0B (A¥`\*•j¹º[1FQ”ú…B¡ä{úòìþ½VÕ‘¬mD  hî%¡bƒQo0}ªºÉb:òCÔ(ëæâR*aɦ]ï{…B¡Ä>`Ò4õ‚‚Wó‹G'Ú௟5¶©P(P«ÕÆš,IŠÅâ–çÎ9æggð艀Q žWËMnü¡Ñ'ÞæœŒ\¥R‰z½>¶-Žc»Hz*Z8D3Ÿ¨(30¿?šH'«:ˆêÞ0äÛÏ=ÇÍv›+Ë˃7gggÙ¾};×®]cçά­­Ç1Þ?<ÒÕäkÿ–G…LбÃð ¨É]/YívW*œ}ã Vvìà•N‡?¼ý6ºs'¶w/Geyy™}ûöqõêUÒS8°üdÄùè0žÝ*À p*(Ê|ïØÁ¹>baa…C‡Fæ‘û÷ï>¶ýÃï’\(.þ8_¤R© h^Ì “y@4‹Ìªs$Í&'Nœ j-oÜàÔ©S¬¬¬°k×.VWW©×ët:.]ºÄÃW~Š;} Šß‚^ ÀÁƒó4d‹ÂˆF<0( j¸ýø1o½÷ÇæîÝ»ü¥Ùk)•JDQÄüü<Ýn—J¥ÂêêjF³¿}Žk-Ão~‘;³ï~…XE¬;&#›5ƒÇWÚm®´Ûƒ—Ã0äÂ… ¨*ívc ·oßFîäQ8}lXø‡OàÝPÈ;Ï0΄`pê°b7ƒåKY_[[›Øväµ3[ž§åò&ªd~Ûš‡ØLÌóGŽ K¥ÿÝÚëy–$On²Àæ;Õ¢,~ñÅX†a8¶£n·;‘„{÷Ì "¨H¶2Œ÷€fU'“pjjj2 Ï,’¾”“pÛ( ó¨f ¦±ã=ÐJ¿ÿÙ0äÅXºŸŽä}" =ÒµL€¸1JÂ,`F=8 ¢Ü ùº>]©pöõ×y0=MÇüþw¸Øl>„/Œ0þ óÁXÏêø|üû‚€Îô4ç>þ˜……¾qøð@ÀDþñ;$—KþuÉ’P‡)052‘Ùª¨ÀCz­Ç§V,òç›78yò䀄< V«‘$ Fƒ‡?xu< óôgØxŒ'á þªÜ|ôˆ·ÞŸo>û,ív›‹KK`-Õj•f³I½^gee…z½ÎÒÒRö±Ï>Çݹoþ|HÂßë×Qk­šñ&DU1H£Ù¤‘O{Ÿ„çÏŸGD¸“/L·nÝÊö}@úÒæ$7€ŠnÚ ” ¯“a" »Ý.?žØ¶ð³3›)£ŠV*ÃmÝ`&x@UP1`”cÏÉà¤cئO£nF§*kpΩæ{Lc6§@}ßw*úDœÖDÇ£\ÐÃûŒý¯:¡]òX@'NS—¢ªê{>iÚ{âû¾Ôèõz‰s¥O»‘ü¸PÁ¦"c;ѧ íûAû[vQÕÜýjŒjuj›$I÷“^¯—xQI±T¾Tª?´Æ«Z“É`0Xë¡ýߘlO×? ¨bŒÅbÁŒ1ƒ}¼2£‚j]ÂÚÔê­[Í---=dËÑl÷îÝo–Jþ÷}ßðjjaZ}*[)ûwšÇ1çR‚r@)(”+EñzœÉ’ ’N^ÒUÁ­WªõO¢(þÕõë×·Í9¢•¬µÁWq8‘N«ÕJ&Nÿ/Çóÿ¾`^$£¶n3IEND®B`‚Carla-2.4.2/resources/32x32/carla.png000066400000000000000000000042411420416754300171330ustar00rootroot00000000000000‰PNG  IHDR szzô…iCCPICC profile(‘}‘=HÃ@Å_S¥E*VqÈP¬ˆŠˆ“V¡J­ÐªƒÉ¥_Ф!Iqq\ ~,V\œuupÁ77'E)ñI¡EŒÇýxwïq÷êe¦šc€ªYF*3ÙU1ðŠ èÃ(f$fêsÉdžãë>¾ÞEy–÷¹?G·’3à‰g™nXÄÄS›–ÎyŸ8ÌŠ’B|NN€4u•¸áe¯{¼;ØÞÛ¿gšýýÊrʰ>bKGDùC» pHYs × ×B(›xtIMEå/«µKÁIDATXÃÅ—_lGÇ?3ûçþønCÛç¿IÀNìT¢I Iš†ˆ¶O ¡òy­@âÁR%„„ª U•È}A­xi^‘HU‰•¨ì¤4œ ˆ8Ž{>Ÿí³8—;ßîÎÌòpçó:¾K^¨Xit»3{3ßùý¾ó™ÁÎKðù^Ñã³r¹\Òqœ„RÊú_ŽjÛ¶ÃÐ_ZZªº{ttpà‡7~}x¿|1¬ªÌÊ’/ÊK¡ØÓëÐÓïÒ“sIíé#ÕÓGª§-’|öé s7gð«>ãà Žï¥ÿàË· ,ÞþŒ¥ÛT­)Dµ:þñß»13³PT\€5:88øãgîO}µnzûþÊ`͘ˆ -ÁH‘%$Z ””„‘ P¥4š,‹È–`I”2„Z£´A!ºÀ=$Œ{È+ÿîJ×±üÌ -@är¹ÔéÜú…SêÄÞ©*FÑ` D´F„!ð a]£|E"´¯Qu… 4:ŒÿÕàoÀFáõYé§¾6ØwsV\ªV«Êp'1`ë‡n+©€©¡!îx^Ë1í mî;ýŠ("wëXù$c§o8Ž“j6 ”RV‰²²ÞHÌŒçñÞúú#9ŽC6›mk2ß÷q]wG½Öš ×e0ÀÆCmš\Ø-7JŸàäD"׌̣W­V#ÿÛ<ê¤2#Ø·o¸.ºi} DR¶Ì¿M€z$¬C™ §d¶TâÆò2ýýýT*|ßGçy¬®®6œüw µª ó%·!нéØÚ“öÖ —q"„4ŠúÒi.¼öÏŸ;Ç+““|ûÀFFFBpöìYÆÇÇ9þ]Yy2 óªÒ`ö¸³EB³ÍmH(¥ØÞtš ““œyõU~69É·ÆÆžLÂc ¾¼¼¾=B&£¶b;ˆF’Iê½½¼ù2ãZ±øxþù4þõέiì‚Õ"a|(Àê¢M•pÏÂ…Ž9BÖuùëì,'Nœh‘pmml6‹ïûLOOsï;çÚ’& ÃMtB±‰Ñjöþ}Þ~÷]ž9p€R©ÄµB¤¤««‹b±ˆçy”Ëe<Ï£P(4:ûÛ?Ðó‹ðÆO·Hø‡KÀÖF'6#éX¦‹E¦‹Åm$¼rå Ææçç¸{÷.Æ4œ£žýòN>*h›ˆmÖúz›/¥Í¶‰WÞlL±E¯ˆ¨éÕ ;¡XØ¢e'x¾»ц€Ÿ]—È46óø;‘” %k@Ð -+Š ˆlÛÖA=p<™Ý¨jºgfèŽí qˆèØs»6Óœ­Ž…ÝjÍû\_ŠõJP±m[‘ÃÐ_ôí÷OÝTZo–6e³¾ûݼ¯J¬T›}†À ßý¢™_¨^ÃÐgso¨V«fYuO½pŠ—S»èª­i*ˆlÀW "ic%dÊ[`dc "aa%ì´CäJŒ-0V„±ÀØ8gw μ4dž>5ºüú[ÿüáìlá`vÍ^>Víտù`5Èìî¶D_.AO¿CrOã8–Ú“#rÓšG²Úý*ãà Lìeàà˳E–ÿ3ÇòLÿai´ˆp’UÓ=rù½«á/óù™G³ÖÇÒàà`BJ™ü<§Æ˜ú‚ßépú9žÿ3M:tK=CIEND®B`‚Carla-2.4.2/resources/48x48/000077500000000000000000000000001420416754300153605ustar00rootroot00000000000000Carla-2.4.2/resources/48x48/canvas.png000066400000000000000000000047501420416754300173470ustar00rootroot00000000000000‰PNG  IHDR/0§#â pHYsÑÑ˜Š‰´ šIDAThÞÍ™{lS×ÇçÞk;ׯ8qb'6¸Ä’Æš°…1m5VšvÕ6wê¤ ik×M}©V©U»ÖmÒ¦Mk·þ±&M[Ûh£tôAÓP‚2J ”€‰ó´ ±_;~ä^ß×Ù7 $Á ýIçŸ{}Îýüçœï9F÷Ýw†%ÆøÂ»ï¾»i©ý mÀÀÀȲ<nÁ4MCUUUÑ­ÏÁ˲ ãëB/ƱÕ6â*ÐW jIðK±YN"@!t«à©ë½´lh‚¢àˬ @ù|>º¸¸Xêíí•@úâG«š¾ám®Ý ©«@šWNJœ‚M“J¥²" A°ýýý¬ËåÊÎrbUŒt:û#‘Èœ‡kkš@ÖVƒœg(€¥œÖ ƨ`tcŠX³Af÷õõɇcÕ2«ù«“c ‘‘3 ÂÓ ÷Ââ”^SÔÍ ’ó¬â_ï;÷SA*¬Vkñè訖1—–ùp8<ç¡(ðÀÆC`4U…$PŸkâ䙨|ÿÑ;jlÅ“™¡K‘ô3g_ÓhŠ|Åj%;33# y¥3°`Ís™$NšpŒ¦i¨®®–9Ž‹hµÚäÝ_ßøŽm,CÄÔ§õ…NØu䳡o+ MÓªööv¢ZˆºÑ–RJ!Œ1æý~²Þi=¼œøs0ÿÅ`0Ök3e¹††qÿþý<Ì[ÿ[ZZö$YR0ø›©ÿt:ÍI’”hÙµéïÿx¯·©§ä€ãÞ­?ŠÅb¼×ëM€0ÛŒñ«étÚ"I’´Øoéõz-5ïãKaE_Dû*tn˜ŽŽ©¹¹9c2™b[ª~yÔ7òæ¿;ûûή?1 #ù|¾´Ûí¯:€1&ƒÁ Édõa‚  ¾¾þJäªe«s zÎ3 €Pù|>:•Jɽ½½̓ĭ­­r{{»PZZšr¬-¼N<{alêÕ÷»ý¡½»6½Aöù|™ŽŽéfvà'¬}ó@”m¬wÌi ]%A@¥N§3aèêêRû|>ª­­-7ž×땆Ɋ¢˜ØµÕѵÆ\üR0šx¡ç̨ÊišÖ577+€\.|N˜Í޼­¶ °Þ™7æ@)gtÃqåNÿx´v:Íáj›yZ’$lµZe»Ýždv»‡Ãa™eYÉi7ŽMÄUã“ñçC‘i¾ÊbÕh4hrruvvþŒaƒ ‹‚FAeee~x.‡RóQQ~x‘™²mpæ³bÍD4õøHhJ·Ña=¯¢(irrR:~ü¸\[[‹, N§ÓI’BÍúŠþI&¹M=sq4ZO(Xª§Å£Gþ@gkЗØêÁh«Ëµ2ëÈÄ‚ ŠüâáE! 3± M@!(ÈÎj»‘vËáoÆVz_´!„€ Ë«{ÚWž$IÎét.¹ßÿº«3.D¶ ÁIEND®B`‚Carla-2.4.2/resources/48x48/carla-control.png000066400000000000000000000064331420416754300206340ustar00rootroot00000000000000‰PNG  IHDR00Wù‡ pHYs˜˜6ÓGß ÍIDAThÞÝš[l]WZÇßÚ×sNŽí$µS¹MÚ”4i'¤iq%¦ÕP Um_f¤ Uƒ@}Aó2‚xA< „@ÀH\æ2h*@´ŒZ 𒢯j’D[ŠcûøzN޽ok}<ì‹Ï±Û­D|Ö–ÏÞkí½ÿßúnÿµÖUe·ˆˆ@æææH’Dø %Žc½zõ*€PݬŒ^«€›‹/zëëë~ÇA’$sNZ­–ù,ØÞÞvÆã8O’$?~üx1??o7ªH£@Þ› s0 »ÖÚ.Ð2Æ„ªjTõ3±‚ˆ¨ˆ8ç\l{ž7Ȳl`Œ.,,d€­•UmÀOOOÇA÷<ï”Q}´uìØOÆqüo̤ñÄ€1žˆQ(­V‹V»E· ‚UEÕ✢ê%Ïsò,%ÏRŠ,ÃZGù~D…a€ˆ!M3’$%MÒíLÓ,#/r-ò¢ŸgÙ·Óì»"ò¾µv)Ïóõ^¯—ÔJ4¾>;;'=Ï{Ð÷ôçºÝÉ_h·ÛáÄñã„QàR¿âQEaâyª§¶üïNE‘Säy–Qä9ê^àû>¾àù>"¦9Yš’eiš“gÖZ²íÜmm¥äi^¤yþ-çô/­µ« )àüÊjžs®Á)qÅWã(þ¥Óž1³ܪEQœs Å5`­& ó-4+«Z\Ý^ýWQ4|EUÉ5!S S4UJc•mêi)QlpÖOøæ˜è¯C]Õ_ö_‡Ãí?Íó< ÀyÕè‡Aœ´Yv9 ä7äÑG‚ûΞ¦uc@D«D#å5#UÄF#ƒÁÔ¿Å`Äë®<33ÃÔÔTy"‚PňÓÚ2ZPý±'™²(8u@ÕŽ5·¢ˆÓSSøÆðq¿O8üÄ ˆøðˆÔѽ°×#Ƥ "‹CªŠZÊýSS|åâE~â™gÈŠ‚yóMþþ£xÿöí¦Ï™3g˜™™ammsçÎqíÚ5Ο?O¯×ãÆ (’]@¯—÷Áït'CÕôGÆ)Ùø™”o(}®L‹PÝS'NðÜ׿οw:|ØíòØ‹/òùN‡n§ÓÜ~úôi®\¹Â}÷ÝG¿ßgvv–¢(vÀê+\`ﱯêT¬4œqø{î ¼”UXáD·ËóÏ=Ç™ŸŸ§( ¼ÇçÞsçx ÏY xï½÷xòÉ'™ŸŸçìÙ³¬¬¬Ðív¹pá7oÞ ÚŠ˜ú©=n5ñ@™Úí6ÖÚ ËHpZ¦òƒ\ÊN-FL“× Uz L\ºDEcð<ÁÊ ¹Ûq³ÍÍM®\¹ÀêêjS;*Â@Ö:ÁÆKXšÿ÷ÿ ù­oЧÀôô4Ô^£n§ð‰€1X nRNiXåæ`À›×®ñü#ðøãc­eáúun÷z|°¼L§Óá‰'žàé§Ÿæ•W^áÔ©S<üðüóÎ;ÄqÌ /¼À«¯¾ÊûᅧÀä1\€Ond@Ê¢^‚×*ŠER@TG²kúý^ï;ßáì=÷YKos“+Ã!išÒét¸÷Þ{YXX@U9yò$q£ªLOO³¶¶†ˆ ª˜$ƒ?øvùÂÞ:|ù™Iïþ Æ2¡ÔTDÙã?ûÅ@íBÅÌÖÖïÜáï†C¦ÖÖð=Õ±Ñzë­·õµ5677i·Û¬®®²´´Ä7—rq¿ò³ì+K«ðØNÛ(xU­Òè¡A\³Ò•ÆÚTYßÜÜ÷ÝwîÜi~omm•U—’$IÂ'–&´ªT.tÄ(Œ²£Õâ<ÏIÓôÐ~Y–.¬0÷ä/Þ½ÓéÓlll4&¨xËxæß'ˆë)¡€+ýΘƒçóÃá᧨ÊI3£n$ÈÁY¨VN¢¦™ìó¹Ï=º§€üOŠª"ÆkÀ7ÕxÙC%êTUÇõëó¾Ðó<Â0<Xžçe&:Ä¢EQðØ^DM…Å’¹©ãf—ß,“““; ò‡È¤ðÑO4~ÿ_ŒÓé&žš Tc‘óP] F)ìQd¬ÝET•¤•°òë+c×W~cç|ŒNë•PÅÈÞ4´+ ±üˆQrÿÔž1,ôûÜ©Rå'qKGë;5Ž]È ¨ÔA\)SµÍNNò¥ xæÙgI³Œ~ã þñã¹¹¸ØÜ$:mÅ](¾üøþÛÓi•†×!ày_8q‚/}ãüG·ËNM1÷µ¯ñùv›cívsû‘èt %÷ß}ìg(Áp¡CØèŽívR—r¼¦ÓKK\¿~¢(0—/sßùóÚÐ饛7¹½¼ÌËË´Ûm._¾ÌSO=Åk¯½ÆÌÌ çÎãÊ•+Äq̳Ï>Ë믿ÎüüÊÓkTuí@Çd­¨ÓäPëдk³‡ªÎ‘Ûœ4Ë5ÉRм¨‹™†AˆµEß9—mmméää$þÕ«Wõ¡‡*Ò4ÝvNoÙÜ}±â4ÇZKš¥åŽêÈRÇÈ’ß]ÀkÓ<³4-·IjMU8U«®_ÝePÛjwÂõÍÛqçW¯^UpI’ä¾ï²Â¾¥ŽŸ/é˜Ð" …Új©e×È7£>>ÚcÓ@·ð¨å¤|®JCœ ‚–›„Š‚CUÔÙÉ“3žˆä·o÷þÉó¼A’$9ÕƒÁ@Z­–xžg‘(lÿ˜1*庼Ûdðº³Ý中'U·Ó^]çÔ9‡h¹o­Î* Ö9UœCEu¢®h›’“Ó§ÂõõÍ?ëõVÿ!ÏóåÛ·oo¶N£Ö3´Ö.mo'ßöûœœxÑ?£bøaE1Q„~³'\ƒVuØÂ’7[«åv©ï—[«žï—Û¬ÆÓ,ËI³”,ÍȲò(Š[X±ÎR–"/´Ó=¶ÚÇòµµµo..®¼l­]2Æ )‰9~•–ÜÂÂB6==½."Úï÷¿5¿×ívŸŽ£è¼1fJ"c|Ï€oD$ÀHPm‡ØÒ½Ä!¢XÉ«g{”“Z‡ƒ˜? ‚ãyLáÀX§å^³U§… «Î:é'izk8~7³ö–sn1Ïó^¯—Q}rðÿãSƒ‘÷|쑦©o­5ÿ{xžç¢(*Žô±Ç®ø?ó¹Í}"3~R©G{IEND®B`‚Carla-2.4.2/resources/48x48/carla.png000066400000000000000000000062441420416754300171560ustar00rootroot00000000000000‰PNG  IHDR00Wù‡ pHYs™™䔥; VIDAThÞÝšYŒÇyÇU5GÏ={’ŠKY&EKEÒ«€GLÚ²ZÒCÀ0(€#°á<~1’‡— OFÄñƒ;Hä@ˆ˜Xb6LÙ¡,[©ˆ R¤ÂpyÌsŸÛ=ÝÕ•‡™ž™Î.å@Aò…꣺ú»¿U·0Æ0JB@bqqÛ¶ Y–e.^¼`0f ³bðZqyðàAU©TB–e…mÛû¾/b±˜ü X__÷¥”Ʋ,×¶mwjjÊ»råŠüAAúô˜W¹\.âû~"‰¤´Ö) &¥Œc¤1求Â!|ß÷;ÀºRªÑétRÊV>Ÿï:BcúÌÏÍÍYápxJ)µca¦óØ©ÇõÇ>´G<¢m©WµlT=Y¯y""‘™‘N+Y‹H2E$%’LMg'Ó4kmÊ·×(,­RZZÃn­3µ{–ì®i¦vÏ2½s+§¾Z¢¶R¤¶Z¤ž/˜vµ×P¯Øá÷þãNìgwj±«ZëU×u+…BÁ„èûz.—‹3J©‡?¹¯ñ;O?¡¿0—–‘lÕ°~×UͶ¦Þði55*"ˆ§‰”"žTXÉ(¡D‚P"‰Š' Å“„Išµ6••2å|‘êr·ã‘žÏ’œËž›"9—! Ó,Ui«4z½Ól™Ä·v€ ïB>ýݹ”þ­õ- ”ÏçÀõ¬¦|ßO„Ãá'vUŸ;¹×ýrî-_fÙÁóÁÂ@ЀƠñѸ´-4åÞ½áD @h²JUîö®÷Ç5 ÒH˜zÒDNŸv¾›Qæ{çø¶ëº6à¾êi?‡g¦”}øS{›òø{~xæ-ßt_Ãýæ¼Õ5ãà¸~ sœkªw¿/˜Ö=@~íS3‡®Ý¯W[b-‘H´†–€´,+¬µN=œj< ‘ùK^_;²§ý(]KÄ€x¯‰^‹÷úTÏR™>d{mj MôÓçéÞÜ{ ÿ iDø7>–ý„Ö:eYV¡ÅÅE±²²bÙˆÞŸ®ïo0ÿ×'OÒS+ÌçÛ½7z?°pDž|ýu:;ùP»íÛ3³ˆÙ¶^\\!€X,&ljD¤ÉÄm_ê 0€–1üûÒÒDB¡–e±u:î¼JMgÛ6Lj-6b©{2Si)e$ €mÛÂ#Œ1@tƒž ·“øÓé4étzËqív2°ôì°B2“éÇãq”Rýx,âBBc¤ÖZڶݵ€ïûÂ#„@ D_K–œœ¸Cå*C×*¸q>??O6›…æ}€ƒƒ548‘`Lׂ4P,eO6KHJîÖëÔ[­@hKÛ;ȼŒ ‡Mhxön зÊfùÜÁƒüúSOÑñ<ÞzõU~tû6W——°,‹cÇŽqóæM,ËâÖ­[ìÞ½›©©)êõ:·oßÞàÊáôpx²> ¤èºÑ ‰#D÷!¯×úÁ¬'¦§yúk_ã? –R)žxþyŽ'¤ öîÝËÕ«W¹wï¹\ŽÓ§O3??O4eçÎ?~¼ËTÈÀ6·-´¸œd)$H=äBÓ©Ï<ý47VV¸rå žç¡Žaç¾}ìu]ò7nÜàèÑ£Äb1Ç!ŸÏS.—‰Åbär9J¥Ñv”ìŸg7¹Uzo7 Äãq´Öc-€”È‘ 6=ëèžié=c(äó¤""¥D)E£XÄõ»bú¾Ï… B°´´D$pçÎþq'6Cõ«ßì*ì/^@üé·¨S`nn®ŸÑF¡Ý,´E HÑÇ0 Õ ^½t‰g>òŽ9‚ÖšüåË, ÜZ[#‘HpôèQN:ÅK/½ÄŽ;Ø¿?o¾ù&–eñì³ÏröìY®^½Š@&Ùe0­‡XðýÜ7Š• Ä=µ{= èIß(P/¾È‡fgéhM¡VãB«…ã8$ vîÜI>ŸÇÃÌÌ –eaŒannŽr¹Œc ÒîÀ_~¯;q¡¿õÉ lÞ¾1ÃHäH ‰ Í¢H€J³ÉZ-²å2!¥(U«CÚ:þ<‘H„r¹L­V#S*•X]]åÚµk”J%„øV~ÿ9ÆÒj žøí!†c@laºª'€1†J­6öÝÍf³Ün·»U—.,°m›÷C›¢ç&÷u!aÐ Uâ­€€ëº8޳å¸N§C$_dñÉ/ÞО=T«Õ±ë!RlÄf ™à!9y=ßjµh½ª<‰„›³” &Ö.烹±‡öïߨûŸ ÀâZÊ1Pbs%Þœ…F$µÛ\ÚN+¥ˆD"[2çºn7maQÏó8¶°0Æ©&b!1díø?@&“é#ÈIÔjµÁíOß~þ;Ãp:ˆ'Ãf8=9 q¡íÒ`J½c°c6Å?*]/þñÆù œ]Hˆûj?‰ðP6‹’’|½N³—*„„/`u{cG ™rr HµÙ ¹L†Ï8ÀSgÎàt:üâÜ9~r÷.ﮬ§5°2ÂéÀ±ÉÌ÷4jœfC€ÁB¦”âäô4Ÿýú×ù¯TŠ;Ù,‹_úÇãq’ñ8ðp:lºØ´¡Q2[ÕÑ´?ÀéÕU._¾ŒçyÈÇÙýè£ìõ<–›ÍíÃéõ(éo ¯Ÿ…¤÷t¯%‰~< Z@C7Ï‹ pZŽd¡À¾1TÖÖˆ:D8î[¥Q* ¾íÀiך¡þÜ7ºs|óEäŸý-mºñ4;;K*•²@°Ë‡Û©ò½ëÕFƒso¿Í3=Ö‡Ó«ï¾ËòÚ·ÖÖˆÇã>|˜'NðòË/3??Ͼ}û¸pá–eqæÌ^yå®\¹‚/€3Ýpˆ[h×bHÀë€`…h$›b`¸Œñ½@»o‹¨^àáùy$OÅ#<êdEV*!É„PÙˆf:E¥’ÈT•ÊJ¥ˆ¤²è¦ƒyø¢ƒë´ð"v¥P¹ Ö®¹i’Ùþ²D'|:ÑŽrÐ!;¨SF) ß3²þókâú?(þìæ]}Ý÷ý×u«…B¡Cï—ƒÿ¿ <¸égÇqBZkù¿ñ³‡RÊF£Þ¶~öÑÀÿ™ßmþ–ø¼CéŠÉÎIEND®B`‚Carla-2.4.2/resources/48x48/jack.png000066400000000000000000000074121420416754300170020ustar00rootroot00000000000000‰PNG  IHDR00Wù‡ pHYs a aüÌJ%¼IDAThÞ½ØytU¾ðoÝêîtwÒ^³‘ÝÐBHH‘DpÐfD ,ÂAQÞ8úÆqሞÇ(›:‚EˆB\”€ Oy3¨Â3$,Y; ÙÓIº;½ToÕußЙAçÜÿºª>ß{u«ºJ)ªÉ“'‹œNgúòåË—çççÿžeYFÞçóù~úé§o‹‹‹wVVVÖâ7ªôääH©”,Ÿ71_§Õê yõ™ªM ”^3&L˜ )..>a±X½½½ÔårQ¿ßOû—×ëõŸ9s¦aÚ´i“:ÇPŽ…MÿÏ¢i“\O,žÝwýïÿ~NÌN«ð€ÜÜ\eNNÎcGkêìì¤f³™šÍfÚÓÓCNçAÜn·ïå—_~ ¹S¦NʤâÔ/B{k3ýtÇ{ôá‡&Ó‡šLÿôØÒR2Ðr•––Ú}>ßçÏ>û—GwíÚõ PR žçÁq, <@*•Š×®]»î“O>Ù;yòdÑPµÌ<†aÇ$%ÈHI‰°ÛºW”þü3ãv»qìŸßãÁYcõºÍ ‚Ðñ«ÉçÎËfee,**ÚP__ïìèè 4¸*v»½o%€ðôÓO?33>`ÇŽHú¦hú}¶ù3èí6›)¥”Îv]¿úyj¬«¦=ÝÝ´húÔ•Ìõnâ+n ôôH‰DRðÖ[omHMMgÁ¥R èééqŒ=}útýíÌüÅÑ)û¸fÎ]°˜ù㿯À¶-oã|Õ Ä'&#%5Î.¢æÎN×ÃÍNnæ¤gΜédæ«ü#@„¾Ùòz½à8 ÕjC-ZôÌmáÓ û3²2fü÷¡ï˜šš¬Yó*ªNƒÕÊa΂e8[UyúÉÇ]¶qÃÚmgM¦ŽA-íìÙ³×·´´Ð––ÚÖÖFƒ-ÕÕÕEyž§”Rj2™ÌÙÙÙá·Ò6ãÓ _?¾dlËüýšIÓG$Ñï¿CÏe“ššØÿ¸›Z`Ùl6+!‚ ô J)A€ÓéÄÄĨÜ5ø¶1ìËÈNŸ¾ýã},œ;smÛ„ŒQÉ×D ¬âœ5[ ¯3ªÿ±ƒÚ50À0 (¥`>Ÿ<ÏC"‘°”Ò§…ÏJŸÑ¿~õs€%ËV L©AñÇŸâ‹={Np"Ùé+äææNÍÌÌ[ZZº³²²Ò|½ edddíØ±ó9Žs†¹¤·Û …BÁˆÅbõPàç̆i‹C¨ŒÅǪë¦×××{ûŸƒð<¯{ûí·×ìÙóyÅSO=µzüøñQW_(//oØš5kŠÃÕ‘ýÛ&؇|N‚ ð<ïühˆDú·õk8öËékð@†i°X,ž#R£7oÞüjqñG•þó_ÖäääD_žùÐ9sælMKKÃóü5øþ!.ÿÆ}C|šaföðbúæ†u?½ظ¸¸ÐÔÔÔ)III‘”RhµšÐûî›|o~þ=KÞxãMulì°©>úèbŽã˜àÞO!^¯{öìARRd2@¡P0‰‰É#|ùŽ¥K— ×Ãg˘¾í£’ÛÂÅ8ŽÄÂÂÂñÁÙ.íéÚPPP8Ñápˆƒèà7n„Ãá@ss3¢££¡T*!•Jõå—_š-ZT1PÛd˘±µx/ g+˱á¯Ï_gE"ºqÃúâ€$''[O:u¨¬¬ÌÂó<‚£µµÕ£P($v{oÈ@nß¾‰ðx<(..Fww7! aV­Zµ!33sX|Sºaÿ5øW^¸e<½{÷|>_ùöíÛß©««xž‡ÕjL¦ ]”Ru°eú¿>:t/^„ÙlƸqãpá‚€°°00 ¸û'Mš´†aÄÍɘ¾uçµø¢Ko }ïBÙÙÙ#³³³W.[¶ìßL&Scff¦Áï÷_Ñó„°, £ÑˆÃ‡C©T¢®®R©+W®DDD4MßÉ;;;}E³fÍñ;{–ÿ~xjXVD7¾68<ÐïAvêÔ©BÈ;&“ɳnݺ…–eqõË0 RSS¡V«ñÙgŸa<ùä“Ðh4‰®|.êu:Ir|ô^¹Ø}]z]¤—_³V+žH «ÛN‡ÍV+œf3¤‚€¤”D¦¤|]n4Î{¢¬Ì?¤+p»x8`ÈÅb¨e2D*ˆU©Žeajh@G]ÝCã““¿;l@|[[[›•㶨E¢Rà¼Ñ‹Õz)„\~)„Zp½6–ÅE“ kkÇŠüþ?Ï›ËfˆYú_áÍáõã­ÖÒÓÓ_Ü«R½Ó%Ÿg(ÅÙº:ôÚí½j%TZ-ºYM/âBMMJX pò碢´_ 0àMÄë´ÚØð]æ›ÇÆÝ0|øð(¥ò‘%==/)ýþBƦ¥!,4NŸŽC‡Ã&«æînDbãâd0ؼRéãwï>qS+p'ðP__ï)•»K4š-‘È,*««áv»*‘@#—#J¡@¼J½V‹vBÐÜÔcM*Äíþ¾lþün 11qÂíâ[[[[­VëóýñÁ:räˆÓBÈÇûÃ÷ñ,kçyçÏÃçñô…ˆT*¯V#J«E+!hniACM\äñ(›7oñ¯ ”ŽV*”ÑW⽃ÂÛl¶ŒFãžëõlYYYw›D²ãJµC ÄãóûQQ] ¿×{ÅJÄ©TˆÑjÑÂ0hjmECm­Häõ~|zÁ‚g¯@)Â1žp>Ÿ¯¾c`¼þ|ÛðýB4#dÇ…âS†Þãõ¢ª¦~Ÿa 4¡¡ˆR*§V#V§C3Ãàb[ê««¸\›*,xíšc IZ±oÓ¦7‰‰‰à8WÞ7^zÍÌ?3ø`UTTœ+—Év–†…í#„P—Ûsµµàý~„‰ÅÐÊ刾ÜNñZ-š˜ÚÛQWSƒ€Óùbùüù«€Ë»ÐXC’A© ýjõ†×GÝ?e:V¬Xï Ç þÆø›šùjܸq…°ÛŸIç¸A€Z©Ä(ƒ,ËÂáó¡‡ã`²XµNg“ÍlNNb˜(½žÜe0¸lb±=°ûcƒ2ü_x „ ºòêátqJåÐë#Ä÷öö>o4?¿<¬X±ÂäJLtÅò|œZâÝ8ŽƒN£T$‚Ùã1þÕë]` ûÚ¬R5(z{³dêv¹$P*MD&—nY½þ_xxsýK¨Xeee~QHÈþ/Ôê­6‘¨‘%Ý ê‘ îÝ»7»½+%,lË0 ƒN—ËL<ïsgª8øÛÚU}ø{î-DNn>4Z=Þxãu8v§Ãá´¶¶¶ %>XÇw³ Åç{Tª­.–í „ÀÜÝžŽŽûÏ~[9eÊŠ×##+d‚Â0F•êG†RŠE³g¾¹´¹©AÞ®Ò@®Â»omªùßï¿›×åôL¡º±±ñèPâû×èÑ££E¢?.´ÙþC¨„ËÒ” ìN'œR¥Òéõ/õ½ åŽ6¼3L¿´ðÓåWãþxdÎ?Ë*Îß)ôÕ•———¢ç¸Gföö.Vò|‚pù³€R( \ 9tP¯_Y^^^Û÷]èäÙº?äƒN³4\¥‘+ÃUزicÍÑ,:ZþÛáàøñã YYY~ Õ¶å¹\‡ù|)¬ „8Æ|V*ý¦^&;ÂFJ)½æmtÎS^ML¾k&çr™Ï©zæ·œù«+###4$$$‘çù(¼H$êõz½mUUU]—w/ü?@žƒ ¦IEND®B`‚Carla-2.4.2/resources/48x48/juce.png000066400000000000000000000063501420416754300170200ustar00rootroot00000000000000‰PNG  IHDR00Wù‡bKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEá%-×UèP uIDAThÞ½šytUEžÇ?UoK^^’÷ò²’„%‚ D‚,ÊA (hXŽ ôÐm»œöèA›QgÚvÄe»…(=lFç ŠÝ¡YBPC !¢,2#KB A!ûòòöwkþxa3@6èß_ïÕ½uëû©[õ«_ýê úhó6ÏÓÅÇ8Æ(ä%'PC€!€ùG·Ö Ä)åJð¥@–¬™´ýl_Û½­¸¨$'MüJÁ ár¹Õd'ΜŒYo¹îþfO—œpúÛ®->â#¯Ïóáú©…-ÿ€EE9“”‹©€°šìdÚïc¨m$C¬Ã1ëÃoY¿ÉSÇ鿣”7áDã!\þv´ ÔF½ÔÞZ1ñ³îÀ¢’œ¥‰w€_ „=Ž)IsH‰LG @)´–juhŽ: ©“‘áñh­(o#ÒÜšBà×|o8Há÷á\Û)€f¯FO³v‰X¢Ý6€çЧÏŠu€5Õ:‚¹©Ï6€@Ý)|gJñýå¾: d˜˼µh­¸¿¨Ž tÖáèb& ‹0Ú8Ñpˆ¿V­§ÎU‚)~þÞýùgú ðëâ鯣xݤ ó†,dlÜ„¦á;[ŠçاhÍßß´nÄ/ÿŒ¿®oÙ;7i]>á  Bãñk> Î}Ìç7£PuRˆŸ¬š”¿¿WKÔÙP|hB-LÀS鋉5'hüwéßuù溸ÄІ”Ç@è9Ùô¿|Pž‹Ã×Ꚙ¿zJ~þͪÊ–*D}ñÁjápû8~“õGbÍIxo¥=ÿ•n‰ï‘)?¾s›qþ”³ša¶,^¾g I–³’jës{gÎîÀ¢âœW€G‡ÙFñTÆbŒºüã>¼ >î”im§pû;@a5Ùyvįíƒ.šqO·íÍ™¥o&YRx*c1:¡¾eiàb÷•ŸáF+ 3ßÀbפúôé=³¢o ð\ál»B¬ 3„‹§‡¿†I†àýþ8þÚ³èbÓ0œGµ }¦Ì׃žr4ÿEbCyâ®ß"I¡½wK¡÷¼ $ÌM}›)†¶Ýëix!uyÓ~௘FÎ'dÌãwF¼!Ó¨\dD®†8.þ+m5ÏðT0Ì6Љ‰³¨¹‹Šg̹!Às%³F·etl6Þ³Gp”þ¹c’)Zw®ÀQ² cƬÛ! ˜²ÞBZâ¬[Š×ñEG»>œõËPš‹GRž$*$¥ÔÛ‹væ˜:HxM )’ò+”ßKóÖ¥ ®_ ÛŠ6à<ø·ˆ'n£ø¥HK ®†Õøœû®ŸØþ‹xZ> Ìø(@Š O^ð잇R•bfVÌâÌI8}J é!‰R´äÿŽ}a̘IÈØ'ú^#~@GÏ~Ãû“±÷ Bm˜F½_ÿv§žÿñ:áiÝ‚’ ý¦# ­~ïá‰A…¨Š íGJd:î“_¢9»ÐV¸çá­Aˆûžî„0Ú0e-C†%ãjÈÃ×^ÒeŸ£¥<Œ›‚:òù=RFFÀ}¼°›«§¢eÇrÚ¿þ Æ´©„Œï„0F½MX2®†xÝlÎßy‹!’”Èt@äHMЉi¶,”ϧêPBEë®Õ8¿Ùqh×AñËæ$\yW½M7Íçú €a¶,€äE»sërŒ‚iøj*Q>Oã–í¹(¿‡°q?î¯ÖR7îysbGÏÑãyð”‘ôPRŽÑ#ÔP›)“.çÅÊ^cŠÖ‚•!.‹7ÙƒcÞœˆ«ae¯Ä]jJk#!¬G(­†éQ Š ni-µ}ˆ(­«ÆPÌYÓ‘¡‘ HK*¦‘¿Šo\wSWÙ}ˆZ,ÆÁ˜t¡x®A°†é#ɘŒ ³õB£eë2Ü¥è“Ç€HË@dØ@ÜÍàmÛÖ'ñÒŒ4$`1D À¦ÂŒº C‰ûmß¹™™ÂÁhy¸O ©½â$LºP‹(4Ýåaà=~­¡©Obw§#mÖëÊÎ×ëhi×õ^¾$F{ˆ éØs)øõ€ÃpG¸òwÓòv^ŸÄë°¯~³SyˆQOñÑ øüZ“,ÈNÃdÐáö;å@}›/˜MÔÖõM|¿x¢V¾ˆ²òí'_£GhcwUq63ÓF@¯“½ßë4œn E»¯ N"8]ç¬@?¨¯®˜Œ=ïÈ(ûWNÙ¶#h³MNžßVÆöòZâma䌈Aß;)‘Ížz¼š!8%…¢¢ÕÛ„Ó߆>e@¯ÅG­øDDûó 9 êúžSŠWvU°ãd-±V3î„5Ì„‚ÚÏ]ª&*¤†,U(*›£Oî×iòu9lâ°åþûUñ_ßx1 (Å¿!âlfÈêNö,Š  ²ù(@Àç÷î“z¿Ü¨ŠæoAJB²Çw¿ç$aÏ{ uKñ?†È?YKb´…i£ ëÁœHIˆàTàøú©…-råƒÛ.!(9R[‚¦„Lº¯{=‹-÷wk$_½·»Kñ×B¼\PÁΊ:úÙ-L™ŒìÆ›0‡ˆµš©uUó¨Bl¹²¡Q°Åák¡¼éÆ‘3Ó»t•Qk~Œ‹áÀú"Î}uºgÞD)^.8Iae=ýcÙvÏ€.‡ÓÝ)ч/í ®R]Óé?š¿8¿%=6·KW)££8¸~g÷Uôjâû5Å‹;ÊÙ]Ù@b´…GÝÂb -9 —¿½Õ[°ëÝûwžº;a[›‚ U-'¨l>†iÌHŒ÷dvMÔò׃â7ìáLÉÉ>­~MñÂŽ2vW6cabfBt†•‹N Jkvâò·#¹²JñG õ“Óy”ë«Ï##¯ïùwÿ€Lˆåà†½œ)î›øëÞD~»«HIˆdJV2òˆAñ‘¤%ÛhòÔ±ëÜÇE«&çïé—½ó¢PêÕ‹ÎóWoGÚmD¼´ô:tI D- cï_~[=_@ñâŽ2ŠªÁý#Ñé$f#÷¥CýO«þ¯æñh*ðÌužðÚ?v\kë0/ØzæÆŠÆ ‰÷¿{Ë•ëß|XzÛÅ_ ñÂŽ2VÌLgÊ`;©‰W×£}5ù©Û‡@½‘—ýYåMS‹K²÷ú Jû…¦ÍËsiñ^ÍN\:QͩώÞÑܨ/ xiçIZÝþ+eg[Ëù{Õû…öIã–v™^‘½ë;%x¤Ñ]ëY{ìu\þö`4ŠèC Öí=py Ô:/°þøø4ï1¢~z£s³*zwÒÎ¥øõÇ•{äyê\5D&E1ù¥˜£,wL|k(çfnÒSÖx˜Ü#/àðµÖŠ€š½úÞ‚ÖîŸÐïfï|_1·Þõƒkåÿ½Leó1âG$“³ôg¤L†â¶ ÀœŒxþöè(2ÂÙW“φoâ ¸ÊõJ·ú‚ª›®K·zðÁ§ËÇ<6økæ~øPmQ˜R©Ñ#è?&•þ÷¦âm÷ÐZÝtåòÇ–1{4§V6ÜTøÔ!Ñ,Ÿqó3pšÙtr9Eþަ´"!ÕÌU“wÕtߥ=»gz¼”j#J<Ú9ƒŸ"Ã>ÀÓææÂ7g¹pø gêp·8ƒ¡o²œ¥?£ªÁÉ#›¾! )õRδ!ÑLMRd>ÍKIõvûwÀéU°$fÒØeÝ9+îÑ8X´gƃJ¨UÀ]I–²“f“}/!º«ŸExnœõm„'XÑ›‚ÇReµjZÝô·†2ÈfÆ  6Ûè®åPíŠ/l£Í׌€M(µxuvÁ…ž ¿Ù‹ûç…ú¼Î'AýdF†Úî&Í:’TëbCû]ÎtN{›©iÿ.ø©AÓη] ?—ˆ¥×®°w à²ÍÛηëžÈT&2ÕÉD&âvO&ªn‘YµªVUET§±‡¨Z«¢bÕ!*VÔªª¨Š‡ªªCTÔŠªªªL¬8Ä!n±“©LÄêDtjÅÊdnßñ>÷ùþýùãº>Ÿëúœ¯óÇë|¾ãמ̙÷žæ/²SÕ”XäT™Š3u0û{Kj¹:6Ä'âVöy«á©‡9•œŒOrZ^Á©˜ϱÎDzÒXί¯íÀÇê45îÄr_³fY…nÓÍ!6šç;¹ÏÔŸsÉ3ù(Αl(ó 4Ü0oÒq¬ÉAKñMg‡£ÉElË›q÷LÏÕxsòÄ%g±=‡s¯òj¼$?GS,džèÏEÄŠœœ{ˆYuiÌ%?”ϱ_}÷_ëü¼BŒ›V?áJ™â Îç‰xJþ°­ÀÊr+™r)¦âP.‰^,ͦh&Ú2HîÐøyˆØVfÅ&¬Šåe˜XGk7öYŸÈ[ñ2ájnÏ—d›®rùÒbÌ”z¸UÞÅ|lt)Wlýyó,‰Çè«ïâ>x•ø7ÀôrÇAʹìùyŠI­ÿö?×ú;ïáC1{ó/sì.Gˆ?«+–)ñÿ‰ º¤'úó¿~güñ/šË¯ÕoÒ*¿Mˆ.þf>B«¿ÿ*q¯>ˆ"s‰5ùù{c‘k~Qø}ñ™øO²œâoûïQW•çø­"ÿ¨³â?õkjü5?Ê(ùo[â_ üZü%þÏ ™Ï|ˆ‡ø-öú÷…Ë.ûûøÕø'õ«þãÏãÏŠ¿†µþçúÿTâÿž<ÿgÏʃßã‰SÄŸ¶1¶’ÿ›¥¹Çxþ3þA\%gÅk7dlñ_ò+~³þÉü#ø;qÆ_À‚XSþ-âwäˆ.bo¬ô•ü?ÆÖ²ÂH#Ÿi‰ïè‹åö ;××…Ô϶åâ{|v“l8ˆuy%šÉ)qÁ ”¸•£Äü訳pUSÌ"7æJuÒzlj{šr‡rÀtê: nÅJ¯VãlœÌ¸ïi®'¨¥ ·s_œÆ¨ÜDn1'ºð>ZíFñúg¹/¿ø@´ÇÌÒŠ6§c{l­g‰Kù¢ Ûó` Û|Ì&œö ïâX|³#NÅGâ¤Ç–Mq?ÛpÒ³²'sܹÀäÃÞüá(~Ä GÉW±H%îäþÜN4̉Õ%;ë%âL]îe¥å est•V²9§—•ølg<-Ù‡CÙQ—à}ÎÎ÷Ô/–ÄGê=·Êaâ’U±œøVWå[rnöÆs4EqթڌμT?“íy3ºÈ7VÆ-\uÐ'b¨É]x‘ë\Š×Z±°ì¶óãLÎ'åi'ГÓôáj]–ˆ¥uU WrwYIÎv¾~§n*êòZœÖ‹7Ѱûâ£Qò©ƒu!ù6—ùAí«£V—ë•zMy:Û0e2ù#ģ܉‹v”ä]¥ Öúðóå@îŒMä½Ü[ïb¾ö‹£Æ´ÇG±2hÇ¢xWˆYÞØ‡Ey¨^ÃûbÜêL™IìŠõ ñEW4“b[œ!Ïæ #x˜w40=æÆ{ô›È—NfÅ’xn½9Å1ìʦ²«<­ïñ9VÔsÄTå ¹Øùé¿·ÜBiàGìóÍ¥äLb©9ˆy*Wã¼­¾cft—6ò]´År…-ùˆõÍWb},·üê†èÉ.ˆks J®Í>ra}¡às •Åè‡å;–9žãØœÆÉ3q'ŸcJvÔãä‚ìÈÍdSlG4¬(§£WÌÊXg$æbkÜŠOÄ›<žoQ åk¢Ç´øNƒ¹]¸Uò†ciž æ¨>Oó@^&–׿xŠy¥Û)òVôæ9´å=³É¥ùÌ\Ðl>ÄÑÆó?k\ð7rrôSÏx§‰“Ñ#ØoF~ ï›[È6‹]Á—|’½˜œ÷='7ÄP4az¹‡Ùºêi<¶ DÃåÒ„=h¡áZt˜ŽO¹Ë>â¸ÑÎceˆ˜^{ã 9¦æbbÇð$–D;Ùé£ä'âh͇ċè0‹ØÜ$æ\ýø#b‡^ï°¥®É³ä‰ün)1'ÚÊܘ›Èey>ÚqÏ×2+bŠCäË|i9V9 ™’{¢gÒcêƒh)ÉùyÞGÌÏùu3Ñ›WêÚìò˜‰oñûÊË'çäf›‰Ïy0û‰ãù 7cJ®µ|nFîFoçdb—'9øßó FãBŵØå8y×ÝzìÍÞÃÎX‘ï‰©ÎÆ¯+cõÔÏ•Ñ7ù5—“ óR®"§y“ÃÔ#žÅ]”¼a2wí£,´6oàn½É‹¹ËvriŒxBvÇÆØ@>ŒFìÇv 3ˆ‹šÊ¢#.E3Nçë܈E9’ŸðÞÇ:ŸÈù7]ÌãZ>Æ~;%fÝþçûþÀHþf¾És–ª1âeÜÆ–˜ó4´Ç±ŸŸÔèwÀKÕ,ûJ¿&ûr¥6r4.×Uª††v˜“;b5yÁR}ª•±7>«1¬3¯(fÔ…1Íh~³Ì{%¿”Öú÷sr¼Òˆ+ù)fáAì¯s4åþ\h·qFÌRã{¹ª Ÿ<Œ×šl2àµñ¼a­%Ä!]>k˜nvNÇs'‚æÛšÓq³^SJ\õ..ihŽù¸q46kdo}Ÿo‰­1_ÕÓ¢ÃX=–˳oÝÊ!µ\óÈ}ÍyÔÓx«äÛX[‰æFâµóÙ<ÄuÛ㪘5>{ô¬ÉßÔžgÜVmÒ[ˆË¥?‡5LuÚ 5Ÿäµ¸«zlƒošL£¾b½õyD͇úsL#Ôqoˆy±ÜZµÞñN5';}P¢][ž7›M7WÉMq%šðÕš<¯awÜ´œ—â¤&Óò@1î¦Ñܪºê©)XdnœÕWb¾µÆÍÔe)î9–«5´ª =Ÿ™ï‡•ñÜIbwy‚RŸå˜åvÔ«.Y†c·^XEî(ý¾©±F“Æì¯s£FtåÕ“ø˜£š‰›Š'²›Èïñ’œl¥£äp4çbL³JÞÉcž’ÕœŽþ8P—‘WòGyHÞÓOPËæ<‰%†Ì'çÞÜDl³Ì8eQ¶Ç²­ !甡\B\ôÒôçL‹É-Ñç ù´ÌŽ 8lMt““cSt×õÆv4kärb46Õ'”–Ò5!JåŠO¸Óë"²9÷×mäLSs!yÔBßÈÅ.ÅQrMì-cä´èŽÔ­?ßæil®ÇóÆãºòE|Íä³XSçyÞSôå¸]äçËcc6Èç9?wàs>Œ9˜›ó ñ.{r.Ñ™{b;ÙˆÎaç¤áØ‚­õA, ûëT÷ˆÃål^#.å©ì ›òŽVŒXë¦Äk±*[MtÒ^òF½TîmÖÕäýh®GˆW>—íhÎñØ×s Ëœòœì3«ìÀ3Ÿôaz¶»‹Öæ]r[¼Kä›ê|Ê#®c4¦MÚL°'Ñ•_ô mµ‡¼j§uøc>9h>öüñ9f×4œ°'g ×±ÚŽ9ÙÈkXZ§ÅErªùNçMƒ"”ˆÑžãh¹œ\šÇ}FWÎŒ·äµ˜é+›^¿á~ΉµÄVmÑŽ³±-Wó”ÓXj<Þ«bc~ÁìÊAò‹ïæ³ ZM {‰SåUNô鯗âX~³ ¯,È7DëŸS±"‡â)yß¼xMŽÚ§MÑQ[°Ö`^&Nç×2N\Ó]±ÆÁ|B>±"·O´~>"j,‰#ØêErc}ï6žÇÖ˜…§¹Ã-œÎ˹wci\!_;Ë)Úâ}¼Sr¡ƒ“V)ù¬ÞˆqÅE ìQâcÌŽiJ4Yš›”x]UrÔù2WÉÉÙS)±Óx¬&n¹ë›ÏêÍxªÄšü–­JÞŵ*¶¸cJlð%>*e_™Qï*jÌÎ%JÍž;ë‡h".×^(ù)—{­8ƒù’xlNnUÜp,O*FÊf/È7q+^b¶A=Š&«³O±¤Ì¨OˆÙyÀYÊÆœ‡•¼_s+ÙœK¾!ï¸V÷(ÞÆÓºK‰½yQŸ’×kkæ6|­íqñ6b0>ÆLq0÷r8{ÐåLL!fŽø€ùÙ ë©ûp1öé%æySÉÇ!VÓôǾåPv“3ó„³xdŠihÉ=¥lÈ3ĩʣPæ|¬Ô©›èö0×dzÝFêú\·°2¶ç b}.Ôƒ#zËeê¦hälâD.ÎÅćºB¾Åw'DÍ|Ö«¸è‚­u0W“q#RÛ¬Ïf¢áuÆkâ#¹/Ä>bZ½•SñÑ»üNö[W±Üô¼GŒªÆ)¦åÎ\N<-»ò4žÆj§ÉÍujö]ugζˆ‡Ä»hÄ#âJŽäc²9ÔNê¥l‹åäûzÈVb¿}Ñɤ)±Ú:bãB>-7Ðnv¶]±¥nBož·‡lÎoÉñÚLö5Úq5?•xc:¹¡¾ñ˜Ÿks˜˜l}Œõ•‡hÊ«u&ekΨïq%^gƒœg³—<–s³A6êöì!OÖ“SGò{\$ûc…a⌷Ä‹¸Q^“Wâ\lƒ\-d¯;yƒ\s]@—}ÖáGùƒ¸«F!rW Qr^®vÛjWÞB­³óY´Ù‹¹4ÞâyÝk+>ý¼â,ÙQ§å –9iåz,rœ˜¥¿<&»|1›ú$÷åj|ÎÖz˜këLb8öX†q«½™(pêLân¬ŽDÍEÑJ®Ë×b§õ»“Ç1T–FÆË†|Œ7y±¶R‡r°®Æµ8GÉšâFëµ²£ù¾%fº7qÙU‰iÑœM”®ÈA ÆÝØNÝâ‰~ò–ZïãMž«[°Íé¦,öºvs}÷£åX¹Žç¥÷É{ë¡_Þ÷N¾Æx¬Â.;òÖä—£œŽ…^’ckí$¿i&|Ž÷‰¯?¿N:CÈžlÇ [j/^Äw‰»r¹9×{B.pÙ <ÎÎâ`~ŽÄºXo95¯çir½sù+¢%[Ñphbxóâ+qÎù¸ƒã9fŒ¼ëË+|Ê‹ÞÇâ«ÇäGîâ«‘è!>Ækˆ 1–k±!÷ùHl®sby,æ ’Ø™?b7q4nÄmLõ"»q&ó>¦:M䙼j \ʂǶxˆy'žàIns‹Ü}:)¾ÆDhØb¡ÜŒ5¹:»òù܆#Ž×Ûùšû¹ÂÙ{²RÅÅŠ\î†Ë©ÃúÈ×Ë|‹7å–ÅÝI/‰.Ç4üˆÁ¼HçZÎ%—«˰‹Ò›÷ó9q$ΖÄݲ­¼ÇŽrÅtòm<ò',®sp¥Îä|{êebÝÏѺ Ÿr™í䛸OÈku¾ÛdÉçy›|6i“ëd™´Â{RôèÇ­Ø’xem½I>«öÃõn\#'çXíå ñ çE ñÙ—|OŽÆGýÔ·Ù«Ék¦E Zc]ž#¦äùÚFª[ësòxìu÷}4Ñï?3©ûrg´`E½¯)-QÑSnÛŠ6ß|#òN¶óŒçb~ÃÄa—ã1XjFÎ&ï×s>cšëù×c8ä¸EÔªµ”ÞèsŒ|’-µ‹êr÷‰í±8£1?ñÈ}ä¶\P&f‰Ïò1-[Ý%;r]ÙD>¶'†ˆ«ù¾6ã„á2‡|m±f\´«^'zrÜ)òkÎÑE¾×šGˆöû†óuNvP·ÆÑ¼‹}±¤ w´Æ|\דÈ·º­ ^ÖÁè$æE‡Ôe@;Þå1 bn¾µ8rÙ\ög99[bËuÇUbKvzDíym^—•”Mu›ØÚÈçEy0¯Å4²?ÞZDÌÉÇqLÉ”ç“ú¼žh;–uäÞ|‘0E·âp´ÅiìÍõvbcŽÅ ¬(Ïì@gy/0«´©½Äöxš/0Ëé\Dî‰ëˆÅ9Ç1bŸý“%^Ä+j.‰OD›wÙD¬ŠKyŸòa̤n‹gÑLlŒSñ†˜i¶Õè¨'s>Åçx„]Ñ™3ÈmÖ{ŠYîÅ>â|>>rGÞÍ#8ãfÞ"fÆS×,µ…<¦¥ÎÅTwËSr–þXu~N%çÜ:™\·]À·XSÞ±*öш)ŠÅD_.ÑL.¶=–’K|‹ÃäælÊ•X\'ÞMÄ´¼nyN£>u"vá„y^óÊ‘¬è0Ó|®Ÿr9³°¡<‰çØ£#WaM®‰V¼w/¦ãµyõñÔj…ìÏq™˜’ûr!.ši&ùÜX®$¦N¤m±Ü’ØCNËkÉ>æ;lŽ“qŠèÈ ù3¨mDÃ-o‰q¼!WÇþ¨ÄMï³Üíus>/ë°2Fb1®Äh#åLK±"7Ú§1ðÞwßÈݹÐr¢É+ŸðÅ —ˆ_÷ûgþúúüE>ŒÙ±YµLgN]†ë]È¹ŠšWrC¼QµWšâsÌ˸#©Æ4G›’w<ˆ›Xât=‹%æÄ;5&kŠ÷JvÇ·Úg4;â¡ãJ¬ËlÃã|«5œ´5ZÐ[tkÄÃ8æqsóM˜—3ò%9ב\ªÓË™²WÍ\Íèɳõ¤b½¹u!>Å5ã¶Ç²«³%ž“3üÈõy9/çZŒÅ&‹‰SñÁ(1˜«ê0¦Å‚h1–“³).ãKvçf5ÇyýšsE¾w7|Œíijxo±vâÁ×ÁÍNÍ}Ñl ~uÖï¿ùë-ù‹üž©EO´;,Ì¥æÔ9Ù¬æ»ØÔ|‹b¦&¯¼r”²Ãn§UÓãkm(õRÎ+Ä—l)GˆgjÕˆGu¶bWl±Ñ¨®ì‹­Jö¹¯Œb«†v›\Ï×Ù®áXÌ)sŒÛ}Þ`}=“¯ÐíEÞÖðÒ¦¸¨ÆÝXS¨C^Õ‡ŠO&Ç2J¯g1Õx¶›žŸÉ ùê—³ÍCe¹†©q ^`iÉ-ä¼z¶žÁǼk‰‹§ås½„¯ÇyÕIë¢Ssvæ³xˆïö»GŒ¸ã9y«®¯ë° VÄNJW,-Êý¾zˆ³1”]ä«êJr³&“ã|ùŠùÚÊe•‡9›3ùç[êCõõbŠÝÄú|§‰ù2/‘ßbZ]O퉱“lVâÞÆÍxN¼s!OQoƳúžÜm9—¼÷£º$××䯼òs?¹&Þe9®=‘[r,V‘çr†V¢Ù*'ð8fi¥®Ô® ¹"`™EyçÊÊœšËjæÿ|”ï)»´–7”½Ña&¾xRß‘s‘ÉÔe¹Ù8õà/Ûº3bFGögëÏõ’uu%¾Oú¯‰….æbê--µƒFØç¸ê•jŸç…Dg<Žíj>p;[T\’?Ô\–]Ѥf»Ó¥“8`5jŒÅ´Xª˜\®ÆYê•ü’[Uƒµ?¶«ñ8ÖÔ]¸or\ÍíÇIb¦ï†ˆîº)>«¹Ûî¼…f‹ó±#Ö–sÄdÛ']VóJ¶ÔÄBG=$çÅwUÍWñ±>Æzû£[‰ûõbÌ'OÚ•GÔ\^ºò ZóVÜRÔŸ3­'ÛãFÛ1S‹†ÙB¾Š&_T{òtœRs8oÄt|³#«^ÇŽ<¡æ›Úisu¼ÁÇx³ñ4oçt\×i3qÄã4¬ò8+Þ9wˆ•ZÌÃ×lʉÌÔ$÷ƹÇ…\é<6Xa yLO¾ÇáœQ ú\[ÄØä 9­ÌËò¥åÑl<ãAÖAêIgl'¦Æö8OLq»\'Nºì&ª%¹š\—êcòŸõØëBÝIÙR_ç&rV¾Œƒä«xs±ÞEoðFûäòº , ¦ûb˜xè²nrMnqãk¼Ç+Ä2ý6à^4| º²'¿Ãîåe²;W¦¾Ð“‰qVŽä·òR6Å\lË[^’,­3É£ù1÷rV~%æé®}Äa‡s*¹¹ÌŒÍØ_Zâ2Qc<¿S¬ÏÍK¹Ž8f›¸¥Ë=êY&ÒÛ˜ñ,–»BžÕœ?ÈñÜ‘§È59×3rO´˜E¾ñ ŸµF;±Þ[=ädײ’×ýˆ/L~A_¬üù•õ®.!fîùý+~½/Sg¼Éùª‘zÀetç4›4Læ«öFµjÞs*ŸkŠÇ¾Ç6”<˜ëTÛÌ̹¹;¦h%zà¦S¬2GÍî8•\Sw8e4¦êÈ¯Š«^Æ^ä'4ìr!—âd¼ˆgš<Ù.7Ã÷X«æX­õ:1glÔd²…fWrnl%nÆ-yDSN!—˜_.ú}9n%6yå¡bF|rC#{m©»âQìÔpǘ•”mñ9W«:|¥ÆˆÇq ²Æ êkÓ­Âör1g sC ãzNlµ]ÈW¹™Ücñ”†~ãq Oâ]<Á`>°“<òsÌ[ Ä^§É-q>Û‰¹yÐ^,Ïéuß=k”ÝNç2ÜñÌf纑<G´ MÃzJ«¹ˆœ­z…þÜ_v“§â€Ûxc,÷“WÏïä±xw°à—vé®hrŸ¸äÅÏ…hɳ±‘ضcA}'Ñi4Fˆ¾rÚcr¹_s®;Ä­lÿeä!䙈 9o7±(fƒ|‡LÛÁw»³ýæZ…Ẵ #e†ëÄ·˜–ƒäʸ ¨gs†ùø’ó +ݬsð¸^ÐM½¥뉩ñ0aA¹æ¹)7—;øX[| nÄë±¹´f+ù£>Œé¸cŠ‹XësöäëX…±8^’ë²µî!žæÑXŠ ecÎÀ‰˜œ+È9õ\<ÁYKb?å` Ø€s¹)¯P_çm_ÉÇù®L&fM”ä¹!>çM|Ž®\F¬ÎmÑ…oÙå¹4îMøÕs§9ä tìЃXg·µäã\e±Ú²ÜMô9f29èH™Îº±^ Å`6eNÎđܞ“ñ2¯8€¾ØJ<÷Æ ôÅËrŒIS£µ§mÿáCþ´ÿH–^¿b6Æ_1¨Ä2ŒHÿ ÿUÛ¤ÿ,þz¾1ÉjõdgnóÛ¥?þbüEÿuü¾œBòÿŠ¿Iü»ùOã¯Kÿm=šCø¯â×ýŠ_øs“þzt‰üu+â/à{žÌiŠåñÆjüÐäw)ÞÅ_Î_Uskéÿf[¹ïWòOåÍü£øƒ¹T?þ°Ýe˜Yh.ù:ÚbœÜŸSó%Rü ‹–è&^™—qب-Ø×&»£/×£³öz…9;¶R—F.Á1{Í&Ö•½±G·†XSûò8±6?ÙE®åNë4ÍÑá&–dkL!æÝ|‰Ûõak~«½¸gâVåáxD¾Ï6C8½9‹8^wÆlrLµ ‹¢”'h޽9KrºÙäûœ+‰#q3×áyíÏÅdÃ"'Ñ{½ÁëìÅó¼œ7‰›†ó=¹¥|Š5ä;Sr;±ª6ågœ·!šÉýÖÄ^JÌs9BÌÎâqÇpô+´:G|²¸¶‘ƒfåR’…9˜™gë"<©â1ù.vÙ@ì)Ûrå~N+ë‰uq4¾¢Åí:›ØÓs¹ÛiÃäƒr¥¾@kÌ«Ëñ)ßÕëäkë9Í"Ÿp,ÎÆ”ø‘_ÈžxXîbžéÖãi,­³‰)ñ,vWò@ŒQ/Æ:B-ÏënbJÔÜŽ…ÙfÉñ:ˆñ²ñç|³ÖMltlbxs£ gâ\\"¯:k„ÜK%×é· u:쨃Զҟ‡É±7?7r‡F>ÎåyÙÔ<‹¯ÕõØâ\Ì#NçM÷)gcŸ6òº¹–àšKV`Ð-£Ë-PÛÍw c1£.ÁG›òñ.>•-è¶Î|p$o’âEì%zó®=xûs„ÒiCùAn‰éùŠì՜߈ uAœ'¦ÇÆ:“=ÒG.È#±»b£n‹5n½Ù®‹Î}ñ ³Ê1È»s¶jŽãË5šÈ£1K;ñÀKÉíÎØHÜ¯íµŸË/ÑO®Ò‡‰~¼ÂÒœï¹+¿çTbZ|/‹ˆ¡Ül6¶ÚS?3.þ¾¹sfç/\Èye²jØù¼ŠEe{íÒˆ#Y¦:^ûÊ5WÅÙx£IK,3òyÞPMÍ'¹Lñ>zã&¾¸œw1G²W5Z×ÇFÅYÛL6ê[ôfQLŽ}qòaÜÖ° ï‰ÉñIŸFͧ9Ǹ ¹ßâ©»1Ÿ4ˆM¾Û®‘}ñÖ:5Äžz^‰–º6>-‹ò~Ü×g,Ùc:c0ûÔz?ã/åMµþçþ°?Šÿ¾ü'~ÿÔoø‡JìÉ_‰)ÒNß²CøZþ»œJ‰©þžÙè’qü©øŸð‡ý½¼,ýS6—_Ñßâñ2Õ? ü«~#*:ã·+þÇü—‰sÑÿ¥‘†Ù]×s-ñŒ83â1îĬø@®±.ú±9¿ÔaâKÝ›‡0çãnç_ȵ¾Æ ÄŽÄa¯ò>yÙ˜Mä3Ûò1ñ=ÏxŠí>Älò}y­ÄˆÖkê…zìÐRGpV¯ÏX«ä>LÉ­qÜêv9šêœÌɹXœµPÏtM³ŠhL|˜G&ÏÄ6[Èñ¤ÞPtd—M8amÀ- &çÜÈ6´Ç˲“,[tbG9æ$~Äx¹‹Ú,#_iÍõ8šû&Úl2ƒq«žÇ~¶áZ4ò;v•Ó¦“]Q±&ä%<·/1%®æTbm]”‹ˆ;yй0NÅ9ê5ßÍ æä¥úKs«3¸˜c±¯ò±eDo>ϳÉùñŒ¸æ\Ã…ìªsˆ-¿öãŸïÎ_ä‘Ò¢¨¶˜;‰¡ìŒ—Ž;â©ê†fSUGlÍ5šr‡£qX»-R-Ïk¹BÉíÎh%žZ[ˆ#úr±šW|3_‰eùÚ£ŽÅ­|§¸\%7Zl¯FÜ·.Ú~)â«5,ÍÏeܸçe±CÄn“k¹ nnìÈ91C5ËL»ˆëq)(úâUn%jäSãú<2™Ü–/s˜¼ cHÃó˜eVäÌ<ŽE9¥tcªÙøâ©]Æìs/w‹Ì]ª}®E‡fWL©OÈ®ìUh5Rváy1NöyVw7}°Ò@Ck´•˜_ämŒÙ{±ª¬q|ŒsÄjçêr¥Þ¼DlÌ™®¢?jÁý²ÜAÊÑú&ÚpÛ¹,-¹sêEmÔ«ã"qª\ˆûÄHö[KÌÞ÷,Ì{8g½>ÌŠÕy¯ó¼™ÈŽxJ¬‰6;p?¶ä rq>ŽÙúЕSr€ú#gå¬('Ê1Êö8án›™?ÐÈÏ9ǽŒùÄ‹r)9”Ü›â¾uù Ÿs}¼$?Å­2Ž[Þåd6`ÞÏóÄ‹¯·Q¼0€¯Ë–8–3ˆRîg%æÛY_‘Ïr]tbI<ˆ.ê=ß\Ç“|X®àD\¯›q܃èǃz1` ?äk<øå*v£¾Ž.òJ\ÊéÄJËò$Žk/ÇÉCžå|3_+q:oÇyê|†×Ù–ß15¾Ç1êoâq¯Î±½E6Íe¼60š»ã6ùØ÷‰m·ø^zp)?æq~^Íe¶cj,%NÇ@tbk¶çz²Ý`þÀä8è1bµ}Äs7c3^•½ñÓlÊdwìÄC°©,‰5h3Ùbm½žG¨wµ×·”üêx®$Ÿe§äÞº§ìÃÕÜýdoæ-b{=URú¬›)ëœÍ-u-qÆ—zë5b+y7ÎÇ ²ßt°-›ã%y1÷•äçl³Ûc¯Nb±g¹’|;³ƒ\ËÀ'Cñ벑ëñ0W×Ïäòhd'Žç^‡ðìç‘øˆŽzÑâ„1ŽñÚ&4<ÉnÔ4Sµ{@®©‡òù#ûË+ :×±9ö¸ƒvÆU꩜’Ãä³ì«íXîY^'Ù«A5l!næ{É×FL'7ŬòØ 9®Ñˆ{¹SŸj£wšUý°…É&ËÕxîYÌQí*]±N͵9n›š[JŸNœu&gªÙšK²C1díÏÄ‹\›T·\5?¦Fñ>ºóšs^¶`MÎÕIÝo;ª±|n>q'^ÇkÜŒ§ÑƒƒÙŸ—Ô¸dÂXÿ Gc*Ö茙j܈‡y¼—¢_ÉAËŒâ™syVõÎxŒ¯ó¸'Jìp.ö¯ÊRÛÇ\ïk¿†µ'¶àVUs·×uŸ»ËŽø 9ÍcÕÛŸ×ëÕ¾r+Þ)ΖÕ1›êóœL¬±Óaê™|”Ó‰o®çsÙÃñ ÛðGb¡İ9ŠKy"×’'s^¡|Š™e5^äþúœ\m¬<$:¢úBìs-7Q_š0{^ñ´þ žšöóõQž)LjžÜ`'ĘØ«Œãi–ìÆ‡t‚¸iY}ŠãšM¦~´8aU~Év Æ^¯¨‡ñ–<^úê7⊯šˆîܧ‡˜6ÁÉCz­$7Ç…¼BL©ËeòLì²Ëì!æîh&žåíxN gGGŽ Ö“çb^¬"¾Øªœ›7r%µzÔ/}'¾–¥q³UÅ–|ž'ñØV/°#ªäç‰)¸þº7naU¾ÑN}‘wëK4å‹h&¶fk¬"OX—}Ô³¦åa|ª~Á—\X‘û °ÇÉ™±$ûrsNC¿±Š8›K¹È`Φž²ÜFꋸQö‘â]ôâk™x…—”×ÙÀ+³Ÿ¸™ ôþ2„õ‘%§Çê®øQná[œYÄôÜi7F½ÊÃľ*8íxn#f×¹*næ]ýdk>µ‘˜ßÊ¢%¾çiò^ΫÓêvLjÖ6•|g½&gäµú'²5VcZ¶EvÆ^ß°,_XG9›µ“D¥6ê¨ïÄkÝñ–˜[ê)ò½¹õ*¹=ž—ÛÄmÎa—ö‘=ù$gaj±‚8¤mR?q$Oä+꩘VObZ¨”y6Ö‘íîš…Ïy×(åB,}φÃä5õ%q6¶Æ&4òh¾%gÆùr”I¿=þÙimÿøðàÅßsMúEþmgñçòSþ[Š¿³ýéßñ/ù²<Ï'þ5“¢'ú,%¿+æI4÷ú+Jlò5þ+ü©ØcXZ¿Å/dLóOýImþ¨ßãùOÊÿ(ENßíñÛÜJ¼ÍUñˆßÿ¬ÿȤXëïä¸ê÷eÃß’æø›q€X®Û¿n’1ÿfžRó÷Ľúkäï/Cùo)±&~«Ÿ”?ÿfüy?=òŸù—ñ?x%òºÿžÿL±A߈¦üŠ»e»Äq&-—ùïúoc®ñì°­N"'»EÆ£\èù3W|þnü½øÝX“¿3Ž7ówéÄH¼‹kø×Í/ÉH#×E?ok=/äü¸ÛÈÁò2_ )—æbÊ*ßÊS”xwÐÈvƒØáBL8˜†êÑâtÎvŒØRçÔ¥µ!ºÉÃÎå´×6ïãdù@ôå휅GeaÆ+­ñ‘¼[ÏÄÆíÊÕ¸ánýN¾Éq‘¼ÏÊFbN\ŠEDSÖÚJ>Ï›yƒœ‹±ÕS0;oÆ&´ÆÔ¼Œ©q;Žbe]© ×óP¬'gxP÷7£%»0#æÆllʇñ”xU:ã9·ŽYƒÙœÇq'ž£ÒS‰­Ùžc˜ãT½@£Îކ§ÄGMƸ«úÉfSc'qWst’/2•Ø#qs³3'^Eõ!±TC+&çî8In4Å1²96”m¸s3Z5—‡xnq%;­³…¼b=^ä`Þ'ä…XIŒæjË0ZzÌ#ïÚQZ°Ó\‹‰Ù9§žC‹×ùl+ñÏãé¤i¸Ÿ L!7æÍÚBlš¸ñ>_åt²;¦ÙAÜŒ©bC¾=X[wÅ,Ü)ŸsvÄÖ¸I½R/åâ@ÜË~ŒÄ‡X€Öübrm.'Ïa âT¾%:>ýÚçþuþ¦±|–ËUïbC¾#~äÍÒªáB.µRÍå\=¥ÆmSc±&Ëó^iàP,sVÍëÙë‡F¼¶Ä¹8¾å5Ƴ՘•osXÉñ<ŸF ÇY½ŠC.äJôÚEÖ¼Xç4ê9My5šÝ5n~œ+/Õ8œ-'7gɇšœ]Ù0ne¼‰ ¸äK™¥aY}œ½Ä›ÉÙ~äÁ²5çMæÅ"Å1—ÊI Ëby¾7[¬vW#_Ô¶8Eì0æ°ŸâŽqcyÛÁúƒ¬1äƒêlöÅ3͸—×”8WË"ôÔ¥y÷|ÊGXn­-Œ[~ˆŽç¿6kö`þ¦/vçaÕkM'Wi³@#>jóM¶\lPÍv³b“&Ý1V^b4ŽÛ¤F#ç8§á@œôÃÚ¬Vµew«®Ä¼¦8mžf£æçÅx©8ìd -Þf›†ÅùÁô%okÒir¬7žg³3Ö©ÞÇ´XŒqÃ3M–çË\`ÜǼ¥{cA,Õˆõ±À,³Â'?ò¶UæaE~µT‰×±+5lÊ]šŒÇÉ|æƒFžK¾`¾KU“³Æbc¹ f;kd·‹<ŽQÍÙbz^V☎D‹ûñ ×âr\Á…:+w7Ì׊NÛó&zóy¹‰«ù¼¼!Fóp)Ä‹ÊlrIé‹Íè)§â+ÎÅY-Ĭړ±¢Nþ¹“œñóU#·ÿ|–É%¹1O˜ ›½&çÕ¡x…]ºë7âA¼ÍWÄ£1Žãå†òÚ¤sXä{|¦ìóÂgâY¶çuìÏÛ?QztçSb†~CÄf«çGê£è'Ûòá &Wäg¼þüŒÛe –dOÙAm‰íey-z£ûLÉ©xd™˜fØj‚ŵ'çIÜ͇֑7²«l%?×ïånåEÇq2Þëð3q‚F,‰Ãñ…œ‘ŸMä³;s:æ™_°7§ÃN_TòxvX@ôÚ—‡É3q.›ð$– XæT^#vc9#[c+~ä™hÁOlFoŽÆ=r§3n“oê°1âr™â±Ænïñ!ßûJ=öKØX—~OˆÙêuc|´»J#.`u^ª—°#å;å^r—…îâ\ÞÏh*«µã|íÄÜúÖ3êûc€XÇr ±Æ÷l£ÔϨŸc«f¢Ë@~$¦úf?^Ä5»(¹ègGìU²­¶×=JÌò©ÎRôä*«•¬>Æ-%äÊòJÉã6ÆC%;ËŽX¦Ä\JTÏóæç¦„a‹íP¢ÝŽzU1ÃÙ¸®äµò ö*9Ù†œ¢ÄžŸC(åiýߗ•<ª³ö¢%çþ#v¨¹S‰…ùªÜTb¹FiÁƒ8nL‰‹1±3¿;î×Ó_²'s0v)–Øã­’»£³N€xfÔJ´æg5¬Ìå æpè—ÙÑ%v{RW+ùÈd ÅÔ˜›•<”=.+µ77håç ×òîË—èÏý¾“÷ë§X‰ëy=vÑpÉ<‰&kb–;É;±9¡ÄVû‰ZÍ&ç“ ±ÇáØ‹]ñ!/ƒo¥ã¹-¿{âunÅN#“æázž5SóNÎ"OÅ÷z‚¼÷sŒhÏS±š75®à³}1ÛãIÞÄP”º‡˜ž+bù0oEÖæGß°X·Ûä!ã4yÌ]»‰®|•·ÈåÑQNã}>¶˜Òo6u‘ÖìÄ Ç?÷ëü°ob² íÚ«ƒ|UïÖÙÄ­±-† coöäl¼‹ëzqÜG_‰Ã!oc[¹g6îkŠ4bŸÙBÞpÄ Å·%Væ—¼‹ÛµÏ-Ì÷ÈnLq"¶“Gcº½øâKìÆ»s˜¼ss-Ñ4A™ˆîØXOM¨tÜ!̨ۉ٦ÆGb­¡ro¢/ãµ÷yŽ8Ÿ—}Æ›ü¬™¼•SÍ#_ÇñÖÙ¬ËqÖz«ð«2ÓÝqŽXͬ¥>kÂbb¦9ìÙ›³ó6q&?iÅœ|{i良šp!_;‡ù¨ÞÁ l&oǶ˜7Væ!´ÅÁ:ŸrÏ[ƒX[ß¹MÞ³:.c£¹1mzµ 3ï{…Óñ6‡ˆ«®ÆDˆ8å#¹-ä ìpÕLt ÍÒï4ÙjAÌÇ‘8ì+æZfq0væ rGvdÙ‘¯\#n–ñgboœÁlsÍ"¯×+µ’ïÍ1“¸e_,©¸f:qÁœüüËXÞGˆñ_½ŽOhŠë¹OrÎ/™¸ï»LŽéħÍÅ•<œOÉw^éB)´ës{nRy¼zŠ</Ë.l6=ºˆ£¹Ñlœ‹ÖX@ö:RQfÕnck\/ä÷ŽÄÚ\_ˆš›ÍÀ‚ø’'Éβ4—“œÎèÊñ2 ]yÒtbJžÎ­xÖm9K±"^弉ãù”È‹ñ™ø [§]+;q*&úÞGs4_`z½‘k°<å{,Ï‹q×ÔœOL¶1–ý%{|›ù¥~‰¥Ä}[LÆ'ÕRr^¼Ìâ`®1Žk^–ÅÔ§€È¸n‘¹8ê¢+¾ÆMb¾¾øDnÌÃÙK~Ïï*Ñqgæš®óù Ýñ#FT›ãLœÁ"s§uG¾S½ˆÑ<©ú÷¢[S¾ð<_ árY¦zÕr%žE›wääXŸ17÷8¢ÆÊ|˜#Šb0_u7fº¯x¢?¾áG®Ô¥áGLµ›=m&lÆs{Ü‹ćh*÷ðÞG‡4l¨ýuº»Ìwä+}–(ù6«;8äqTã1ó|Âø¬’›ã”ÅN[£‹xžŸ³›œS4¡Ä2—˜÷|3梡œ‰+9-W«¹©®š5by,ÄÇØS{‰myÅ¢‘w¢ÏâC,ˆa/ FÇ´Y³~Oþ"G´hR-¨Ïr3ÎGkNÓˆñ6ö©8d¶š§ÑªÉ×¶aq^ËyäÝÜøs*.Å.•øïÊQr½ù.‘{ó]~§ÌÈþ˜‚Îl*ÇMà÷îMÑãhÉÜj©bOò {<ʌ屟ïpù—æ×Óш.âwúÕU]Kó±8Ê58“C8žsë —lŽ»ª.;â­ÛcQÑdÀ¹¼JžÉOzU‹ck|U|ÔKqŸ…‘ÜS·©N9h›+Ëj1Ë+%î»øóÖoÞ`KžŠ˜œ5w¢+NÙËq:¶aŸVD«±z˜\–Kü »lŽX›Ëmr]ÜJŒ9üœ_#vNt#Ë­òÁdbU>ðÓskì'îØœËÐk$÷â…ãÆÉ®Ül)¹(ÕØ6©·žÆó²ÆÜÎ &ã„=e9-nº@¼ÏsÚˆwõE^ÇÕr¡.%ׯªX…©>$^çÃ|„'y-nayžŽçäÇÒGÈ!Ÿ½¦á‘+цå¤xÇê8yÛ~$?•~â  ¾’5¾ÔÓäŒh‹%˜ýåÕvsñ0ç×£ÄǸ`˜œš×ã úsM! xE>5qÎÍ,s às^¬Èg†ã31+/Ç{bÐ"£ÔëÖä,ò1q˜èÌýõ ±:niÆÛܤ¾õÖ6Lj#DK~Ê)X‘ÝzÉÖøcäwãùŽX’êcòV./ˆ>§¼ÇU%zÉ=qÐTÜ¡Dî°·ô÷íó•lÍýUS>"6Øüóy2öÄYÊ1„M»Kñ,öÕ†jC<©gÕX—¬T å÷²MÕëeQ³)G«yÍŽØ¦æ§Ø»Õ\ݹFÍ©1Ï]¼Ìå^ÄÑRTóœSÔØžÎaO}ÛUGó©÷jYŸµŽëzÑgmY­ÆÁ8TV«ž×çöS–e¯uxäj¹b\ g/>å̺ kóÀÏ#j\ÉžzFÕ—ïÊU³¥¹IO6Ö§jÜŽÉÏ1è¹6¦Ø‚ÅñÝ><·Í:r…-Ž«ì̃ñëó¦ 7U·ãr¾Ç›zÔ;|ŽÙN\0×9|tÉv4|2+ã~DOœšàj±‘8hv¹N®­{ë:rUN C?Çzsp9z ztÄŒç çp#Vþ¼Mž-må¦ëŠ¥xgó#¹Ø¥|…ïÙš[ÈMñ â½%“>àB=Ïȧq+Oâ{ äÆr®O䢼ëð¥LÉa|Êõ¦R——!ËñÙæ2Nž¶).ïrG=EÌÌqzI‰'Ø—ë(ѽ#–Öã“:Èwè¥ÞÎõ31Õ£4\1=Xêkx}å;ÆuÅAtÄmïÈ‹ÞÚL|òÄt|´@+9jG¹‚7®æRâFÈYä'Mß ç3â•î8„‹:ónçkg1[‹NòMl¬›ˆŽr0Þ£57Æy¥ä2âVì‹5˜o£7ìw‚<åYô`¤¶LØ“£7ʪì$'OTÀù(;ë~|޳î¡ÄÃ2aÉ»èzÝÌ7Ä+û²³]rƒœsõቩ¥ks»ùDsŒZ‰ù&;0àSn'¿DóÏò`VS‰£Ž¹C|б˜EðÖ8»¿„|´+ç‘—óqNCÍ;q˜x­¯nÇîº?šÉ[±'îcQÜÍ›D·÷×cgìÀ€ÃºÈéyÓ&¢Émlj—±Ö꽺Ñ8Þºâ3eÌÓä´ú=FÉy9#b›9ès?¿‘ëÆìÇ›üàq;nÆ"lœ´,aj>N䇘8ëkÊ+˜ë‘uØìSœ#Vþ¼­è´ ‘Óu:‰}J<Æ»²9wê½:ÚšX›c ¶x“·0˱|‹]µ=ø`VÌ#–—×¹‹ú=^N  rcÕûXf"ÿ=QoÅâu^ˆÄN=ZÈy®ÄmòcY;0+š å õv9ÆÑdVì&vä1—‰¹ÒBµ<—ðó~6ò5Ù-y‘‹ÃfRåIƒä_ë"¢-vÆ=¼È5å ys¢47/ÎX—q:f ëœÆ”:/zˆ¦–Oäʼn)|®öÉ*b(ŽçkâÇ„¸9k9Pº~¶5ÞY„ݦÆ5\ͧ¹+óœW8‹4aA¹/ÉW¹&‡p0wçcl*5¦’_ËÓxE±ÜLÊ¢|n2y žÑ7á-¼^nân|4Bn¶¼Œnä2¬4#ñÉyS°%þÒn}5–ÄE¢'»#;³%ã°‰ÏëÓ”ïp>ï–äq+r §Ëåú/(‹pÜÎxÙšëbåÏ¥®Mq".`8$wÖÁ‰#Ïâ«Q©Û³` Ì‹ƒD[yê%ïŧè&?äK3pÎþ¼M®1=>#ö8BÎÍ­Ù¾ŸoâÔ7“ƈR_•KÄûØ™·°3^äM4çWŸÉEyOÅ’xãqÚ¢xMŒæ…ò’²Ù óq­´ä-,ŽÛy‘XSêsìÓâ9ZhÇCcúÉý“Vä Ü(OsÚ„%wSj‡6œÌ¦ÂCµ3ÌÎNbܧú€xgJ®ÀèË)XóbÖæ…h`zn¯‹È»±6ÏcA´N4£â”£äçÜ›{©›<Õ@)ïŒ/mvb[ c¥¹‡òº#4ËEù\±%>j'îåÆh"Of·Šör3ÛˆKñ0š15ºâº’·óy.ÁF§½'Þ›R>`‡¹WÍÊåŠoyÐ2<ʽÖ+Ƈ8¨²FUêï£+-)}JnŠWµA.4œó)k-¶5–Æ%÷Xà¶æÚ_R'–Å2%×ÇY½˜íK^À£ÖƒãÖÇc%Žæ¢‰Þ\àË„_fÒ(žäË|¨ë¢/ß £¼ÃäuçÌW|ÍGóë¨MXÝÂçÒ‘g”25•ÄÃ|í#YãêÏ­änË9ìϳq sÜ;¥Ä.½±˜xg0a³¶º–Xy9-êÆz‘˜‘½ù W&vjr{¹‡ú<¯e?y½^ÊVòAÉä&^ ra :«‡œkô›½2‚uù£î&ú]ËçÄ'»b29–ÝžQŸå&ë±#—׉ü{øçz4Õ¡ºžËá\I~µÀnòSÎs™|\oÅù2/Ôëeq¹Œ“±¡Î&Ž:ûs„ËûSëJë°÷çÛœ‚÷¹È2ôÆwŸˆyq<8Ýeµ'[½áç‹8]×Û,5ŒËuY~Ä;KlÆùòЊ£Ù\W’5÷{H]‡¢’·ã„‡Ä‹'õ“‡c~y‰OQ<#vk¨Ä–ú8o{\ÏgÄú˜») Üœ¸í.ãAY•˜[X‚öÚ•…œ‘s²ƒ8æµ~¯Íù‰üñsØòrnÊâ„ã¯ð$oº‡£v–;˜QëÁTµ.Çœ¨¾åZ“‰ÔÝØŸò ±Û°É‡°8n•'ĉ m1%»~Î$oëŠSDw¬u#>åGjwgy('Ø]Qr„xMqxCчq/¾“g½²'³'wPÌ.ïóñ4†b>åfî/ØY×ÇUrSάoð$e+¹%?ä;|ö¥þÀÂxœ+°1¿ÚƒKF"¿Ç˜‹%¹7[ˆ£Ùýó:ÖÄÚD ¹i ­°™ì‰u9úËlœ˜dz‹Ømg½ŠKy·<ÃÑ2€gÖäsì¬â=±>[LÆ·Øž›ÉƒñÈSr‡-± òU®#×Õý?O’oê²\DŽLœ´ej|wâT,"º'`a^×é&ã‚}e æÇËò€Ø\æ{L|ö6æwŽÇ5jýÙe6úsGÅ_Î%[ŒZNÉ}õké"·éñ|ajýF>Ôî.Æ›ÈUq9vኡ²|ìM<Âr5>‘ʋ܅á¤+sªNòcŒzF6VÖâ@Þ3äÔè­GÉåp^ÀÔl޹äܼ_ÈyG Žä¹h!fº˜+1¥LgæÇ\mXä¶ä6&­Ç1_Êqºž÷•h²Òf̉ËðÍhyHL7ë—„þÁz€ºÒ9ÏqÏ>³‰ÖXn&4@®O9+m¶—³5.£;§Æ0qâL»¸½ë‰Q]Àncå#äÙœOü®í3›í|þ"nètJõÀ7—ñÌ÷IŸ4Ì)ùAµ>/å*Õšr«Ód“ös²KùÖ²¸NÝ®ËÉW9=”#ùÊLât®ø¹‰\1Îñ2È®8Z÷P»œ³ˆ9iÉ-›ˆCu_Œ×r,§n7/× ÝŽ|L#^•›>íù8ßâ‡5¹sb\u{ !ægpv,w+cVJÏ-1L<1ßnb8¶:z*w¡·žŠ Ø®câÁú=ä:¢¢½®®K±#>hÅp¹YFQmÌ6òQÖmø”ÇA»m%fdw ‘ßãŠäõÿQoüÒ÷Û÷=Îõy#Ö¯›Zçíím­¤$ëBp’:qbE²4 AÄŠ8B*N²,¸,+!Hp!8ĉˆHæ2±2ÉlÄŠ—‰s.'Aœ8çíG¯³ü°ý /^/^×õ|žs‡&j@ñ¥ù^œzÃ^lo(•`V~BØ£_KÀMJuâªÒâ(‹NÝ*4fföU&¾3@ô”§Ÿô#Œ]n¥—ß9‡XA®ƒ B9õÀ7·^}@ñX© ?ÿ½§ÿ ÓU‹§X#R ]—[õŒH‚·lj’¨!?¡™HË1‡$*}v0õµ°Ft¿žÑB‚ &c °C=}D^ÐÏ‘dh’À›Éâ”Råzƒ ®«˜fÙ›$âØ¿ÀO™ y$©0溂 ¾é™Ï‰t+¨¼æWÜ'ÉøÆ.¸C•@#êã€y첤yØ9'[÷éµ3Ê,QÍz‹„wbkxÆ{Œòƒ„Þþá¿ÃŒÚˆLñƒ%Îâ4·}gQ¯‰ºÌ‹¤P«ß!¨R›Z‡8ŒwY¢´ås_I•¹±œõÉ\¿|~ANhÁ:è½®º¼í»ßjè† HêåðQ•—Ý@fÜä0£R"¸Fïyzé$>Ç^pÐCüÙ›äÅ!‡dà›[4¬Ñá UÕäY!G#¾Eü˜  \d‚zÜ­w ¾ë xÛþè#úEø©>) Øu…—ÀM0 ô…à6oÙÕúŽ;ÁÞUЮ µ€OxîCàC±œ¤4€ÂpÊP3“šö5ךtÌ68A•ÜFè#á$ôÚßhŸñ(Ã^æ3Ðê»Ü¯h’| ‡Q:Àë~ÌG ÁóaU[ §:aâ§”Å{ƒªÒ(Ä3]ó¨ƒM‚ÆyªFð¯Ø  >¾Å/ T/ÐÎ×¾— ñ>¼¸  EgΗÿA¯xÄêøáYÐdØ¡XðE|ZŒ[Ü+9|àÿ£Ð©ËM±œÊ …àjÕ‡s á*¢BåqTíz î$å·àc·: B±û< t«ÐÛàl޹ œÅÙð˜ÑyÀ._ùJgÎcüÒ÷õ´¯¥p¾.Bø9i! ´çŠßöAâr]* ´úÂ6Pdt ø®Uí¾þÖÁK ‘rR€î¸8òæÀÎT<ªa Ô/ã'ð(Ít)á‹"°¬»¬€ÒÕG€‘ð‚·À¡jfâ«øxèMoŸÝDÄÛ±Ë!¾q©ÊÁ§L¨ܬ=/)np çd‚ yêB -܈/AyW¼Ä0æ€\&bèƒÒ.“!”iÀ‡àj÷é5¸Ü¯ÃwÐ!*à3SqcŒqð˜¨_׉G ÁMÍùÄiÆ9ƒPî>õ´3 qTåd²â#-€’¼ïkÀ2ù—ù  _i¢~~7âF¨†ØæÄ#jüò)… nR ,+á"иZØútÂ"\ÎðŽ7 EŠ4 ºÉí¡ËGþ¾Á´W€^­èÈr±¦€&m° a‰,ÍCdįàÝp7hØÃt§,Ä7àj àj7é#0WÉæUL=xŽi>ƒSÜ¥kÀy|Å:hH߸ $«‘r`ší8 Ü×.#J|¬ˆŸ\à- ÇñË ÚAÚÊ-¹ží¿R©/¾Aä”/,'üÞ-$£“§DýàLψŒ«Ó¯H¢ }RüÓ]DfË$HvšŠ€eë)‘f­ÐFtTÈqº‹9%‹·Z%蕚矒ðmñâ7e©Ÿ$Ýãœ,.xã÷q¨7tÐ>„L’œå­¸ÄSº`t®zIBYŽN€¯QÃ1ç~ÉrØ"ï˜#0¦~¾“Ьó]Ì©~ÄuÔkƒ@ƒ¾h”H3µ®ä̽NöÐ-¿bH F?IqŸ^óš@¹ý¸¯‘ Dª9Ötæ ƒmúX~ÊXG ™ëì(J%pê%è ¼$h_ièf%ì8ó©~ÈŸ¸O`1r¼ä1÷À3”\f\ê1‰@·ûâwÚrA¡–›†•ð6ÁלÆ;BüìqTädú½A+¨ŽSqýße úÉ"ЦQ¯xé)Ÿ€S¤sp:+Œ8 Ç nä)Ðq9àLàÙj!¸Hï©çjEiežÀ}OCp²»Ã Á]œèÁ_¨Q4òTïÿÁ¸Ú7€Iõ„ à¨P©¡” ?þå×õ,ÿÎm]pHä†^¹|è#ß ¡92Ø'²J³Ö‰¤U’üœbÊÀçúû‰,;]î;Û v=Ö!¸…|Ý%òÁ³ñFuè‚S¾ÒÆÁóÞ¦ 4Ä Õ 6Œrô°¢o$Èr®Ï¸à¡®ù TÍi¿qp —û!D%kžtP“nù>2Âç=çsáàÖË—@¿Þ+´Eø-›e~H%1SÎ1/lÇP½v zƒyÎôQ…º þÄS='rêy’Há„)žƒzÕï/À{uk<…ÅfÕY±Xó6“lèO·r‹ò+ý;ï½D‘wœ»ØeTi$/ýLu5È!G$qSŸÝ ®ÔB¸Eä«¿2OÐkOÇTàH'êo³ªu"½ÏC{´j‹S?Ñ5§ÂCd9r>Q¦3€1vÃ]l°Hà‚7ºð(ƒ×¡8â oH°æçî"2B›{>£Œ@½×µïsÁŽx1î…:Ðͪ'ÁuíÄv¢ó8à9Á¹î§ ØÓŒ¿€:tÄgà‡zúë‰Ú'YӤТ'¬‚K4¬ ™Û”‚¿ùƒ?ƒÖ=çd {Ü`CÊÉ9üûmþ+Ùá.íÄ8Dfx ¡<¶²O‚§jŠmD¯±­\"õ † ’ÈÓ+"°Ou\!ê‘7xJÂSF/-Æb#‘õ°K$º˜~4à;lsêçêcƒÀZU¡B3¡‚„+½W€ÛNõ>Iu…r.H£Ši¢¶œËgœëI.Ö­rA+<ÐI! îpA30ìõ¸Ãy|Ïw&€ ¾¸– ,Ò Z ‡4.¼É…!áW´ª”F©¦ˆä3ébθåè^P¶†wDW…?#E³ñ_øàR-sXfœÌMAMa‚~à£Oüõ‡¿õ«Èö“ðÛc'¹Ü­¿/QÌ •y@X¢œâGþŒê;5ÀcV5:¦Ñ·Á‹ÌЮò7eÕÊbh¦4V¥ÞS ð†<Á9^e EN¨¯¨\sÀ2ý¤€2ë à^8@EáðÞo}ä2p)[<o¨CÉÀ_ª”©AßSB)à"n(€}ËÈt?PÂ}5©äù9¨ƒ]ÀEªâ§.íùE,ßו`ñÒCÚ/ë“òA}Ì»´i(ª•P2¯Å$?J¨v7øÄƒÞ/xW}àAßý­huP/ÄŒy@µ‹Yãg’Á>áÐ@–A9¬†ZÐ5—)øóœ ~ápõ5é3蛎ø dÑè‡àÕPn 6,9îeÂû¬BHv à½tè T² ~¡)ÿqÇ Y¹h¥Þ7A ”{4øºôw)ú±ò@çœûðÚ²ýq üØãsЯú!¨ÏU!Xv£jÀo5§Ðc”³ôèâ3ƒ«â¤@ðUZØÛõøªuD¹@ -”‚Îõ沸£Í«›R ”Òx”£^­Œ¹b%}y>¶ÂRì-h_{ƨ$øH’ŸË.ô(0C¥®=ÊS(SS¾¦9ŒÙà]Ä*ˆsW¬YÝõ–ÚâUhén<‹-:b‹nŸÙeb»N4nw~è¾;Eyà›œhÜ£Tíƒ6”¬ ,~â3ÐOéêÂÛС( èpŸRªÁgî£ ü\_UÚ§5ÞNœá/à7¤)X§YWß™¾BB©î§8cÃcÀWªÈ·©*l€jy«)P&5N€78Ð |•qá@›"ÎØÔ ¸ÚOùnr:¯€y Ħm+€r¸?õkPíe¡wÀ)Õsà­–4 ZÐ MS^¢<£:î‚rýMkà´ðñ·#ˆ[ìs XcÑ_@G¼ Ø 3ü÷sÛ›î¸Ö9à1ï„, “Mºbe¹´¨•p qÔ=ªðhÒ×A=lÐ º}9IðI­D`Mw™øU|4^ j¾© N!pN]ÌÆ™åx@å Vï1ä‘k!¾¢;N³,^>­…ê¸ÐÆ °O‹6À#~ä ——|uiVû yöÂ`G¿®ê=gV&Ý á~Èו/åÌ¿€Çz÷€‡Næ&W)±ÌðÕ“ÌBlæUL€qòeøåÎËàÌy®–½âë $×Çb`9f!V8O½àoJv;pª8¤pÖ!~&A!°ïÄe!„‹¸k Æ%ÊB¿p ¸'|§ ˜bR घ â/7k´E&ð]»äB‚;ª k Tàà=_w3êFç¶¼Ç6Ъ Ž€=å.ð¹6À7#ºüп@)Êâx‡­¬{ÈP £Àk|zÃ× à]RÀoâ'½ßQ d¨Þóàßa ¨ç»6 Þ¦ßMÀOׯ6ЂCpKOiZâ/¤°çWàR^Ä}ˆ ÚW2è¹n‡uPׯâZôS`ïô˜`ËéÀNܵ„N Ÿeß?¥ž œö@µNå;ø=îªôž'f¨f|à[ƒë•P7$8%8â/—é1è¾< bƹ ë%ðÄ/ø} Ö]ç4P½2ãÏTÜõOWå“Ôª%‚ßiž§Àû¤€Ž8ôSðb|çgÀŒ7µ¾O•ŸÉôyX½<8韱b ù 5ú Þ× À•ª C^Ò}à·éî’B+0+]Ààv}Qè jò8sà5®^lSÊŽ5'À“^õ9å!¸¥³¸qK×ÝìðK-@…çIe•æìæåù¯”L‘mÒ´ ž Ó•$”Ã#D.”Á‘n¾(Ÿ$-ø£~‚çøáibÜÒ‘3H¨€$–A™< Ÿ‰,òœ"Åîö'‚˹O§ÜÖOTÂ[^ |Ö ã–ef9"‰t;§”¢(fHQš–Iâ#Å:á‚O“ ZuˆÙ$hQŠ?ó¡'ärN¯â<8-6û€À Ý $x>iœ ²æÏ$ôÝ÷|šwZ$êÔ‡¼â̹dÄSð¢²Aä‡Öà )´3Ìk$.ž³OÎà9pê"•÷ig‹õßRßÿ[å{°ëŸ3ªÃßðOýÞù?äÏüæ'úŸô7@‰ÿÿ;Pé¨'$üWÈ/¹íÿø—| õˆÿH‡¿®rŸ §3K)§Ïüwý¯á_óϹ ’Êð¯tûsüOÿ±þ/ßç7þRÔˆø+ÿŒ—À?æôÿFÔŽþ[ÿ¤¿ 3¾DúŸõgÔÎum€þÌßö¿Bl‡EýûˆãðŸé øÿ‰ÿS¬¾ø?ð_#5ðMÓ ÿBÿÿ ¿cû„ ÿÞ=Àû0À¿nQì†üüï°Å¥þ ðÿ eñ³ Hÿ‚$ñŸS ¿ú_â¿`x®ÿÓÿœÉwýc`ÿ’$à”Ê ‡Êúù—¼¿Ï¿»nOÉåÔ_€ j'Áu§iÈµÞ òž:6HbÚ%z |Ö[-Õâ÷."¸Z[~T)Ã_@ížR!Ñç~¥7÷„VMqJävl'èµ”äú–zIxF…±4Ò5DB ª‹ ×Å6§]Î÷[PкRI°©ëD¢w™f xJ~(¡Î û´ºš g^8s“R€NÔA‚%m¹(ðrÌU†lm½¨5`À?â)gþL  ¾‡M"[ÎÕGR|WMd€¯k2æñ:) jéø'w½>`Ó_Ùпþ|’·ïßýšw9 ¥ôÏ9 é$B{<õc¢‹C2¿ˆ.%]‘¤PáfÒbθI$ƒïþL ýjÓè ^± $éµ!j‹#^<â¥ÐÇ)™üÔAÅüt1¸ÜÛ^%AŸZÝ «HCšV¸ NºþÇ©m2êÏ$´«Ì½É¾®k 9™@އ]ä2þ[ ë'ÏÁ…N‰é 6Ú¼DBEJös Q[*ö<ªàÊxÓïZÕ«3ªyê`,> DjÃ}õ“B3k^åz“ðqè¡ œð/×€z©Ö' ’b²Ù\Ó7w÷9¢ô#îj”į‚kuÊ â©[À‹—sÞNü4Ã*iܡԧ{¾zËsÒ@kîÕ`%NQ,úÄ€vWÆn ‡u¯û¾í7 d'_n?c_Ü^»[_…+ðº·Ùó àTš ó¹úåh(r§OÁ×=Ì9¸!ôó È yñÈ¡ž:`öò,Ôƒ#×Õ|´€V•À™ZUOPãcÞ³ð+H¨¿?­Œƒ¯]i‘䇇¤ƒ–¼B° ˆGº«YP–jâx]e—ë W*ú­ô:θœî’PÅlXÎé+àÎÐI hŽ¡0 tðÀ»ÀYh¡èô ®$º¥‚’(d¸ã+ïã eaÈ%að}Š<JhYiÀ-¨€xV€o0 jò’«@MÊc(ökŸ€wiQ;8]°Îd’r ãò”Û /œÿÖÜG4O©ä'Pî;^SãmÐãz lSákàŸÔ°»t¦ ‡L©|wi?¦-:à˜+Ð/ð-·‡tPk,ð+Р¦Üþà6­wT« P–§½ܧÔOiU„Z —ëáHñcÏò*žtª(ö·+º_¸¤SªÀõÊ÷#à±wé~rÁÐO3W{à–xX£C«ôRýàjî‘j¦øò3ðÞè¨å8¬Æ©÷*è ín—ê«úÁƒÚpèœ4öA{ìÓqCå SLèÜ^Ï{‡,à574 lò· F¯yx¡s¾§¨'‚öØ¡(¢'V[΢œæGJe“ìsO(ògðOÏñ |¨wTšB›WÀ=ñ+/ *§˜S bðˆMϽK¨M/y îò=’Á‹þÁèA8Ó&Æ•Àçp¤jˆSÐkô ÔLª2À:Qx> ¨H¿b]é¶ Ü §=¼^úýŸéØ \g—Apƒ™µû£g!ÌSí`….m€3HÑ1„ioRڈǔ€—Hhx§tï7t=&'tÇIp‘öÕTÒE èž8¼§÷ØQ'øQ(Ž]Àý°ßÇŠ¡|[¤?Ëò,aâ ÂOð·Ð¡Ђ¶ýHR™À¨69%ÓãeÐ3ª4 ~O"<z5¡ $ìè+p¬ëê„„Ž/ÃøB_<ì³âzà17邸¯„Rwti´Ä0›À ËW×GNüÖw~€¾]õù8‡uNÁ•û1(¸(Ö™¿ÝÑ<øÜ7C ¸3¶)4®”ø˜Ñ> àƒI7{Ýc¾º)¤?c‘—!vû«ÖA!—ç 7 y%Åq‚wøÎ4cçêHò‰Þ¼Å¤ï€K•O€V·hHaTC¥†LöÀ;´^5ÄÆuGB¨r¦·€_„ðcZoú­ ó† U×5 \c—çW‡´3Ho~Ç–¦€'¼ÒW‚qõ¼¤Pzì7tŸ(?þ$Pš8J©÷€)W«Â=>ú5x]s~ œ#„DL÷”g€„O”šg…¯ rÆt±–þ8\èš­+;܆=¡û(fƒ«Bÿ¿¤bÓu>–˜tpT=½r1“à9®ªîk,$€„.M“Cx×_Â3 ‘^Þƒ6Ôä ðž• ûÉÕÚSÏ”_h:‚æýÚ} »®f¨äª$#› G`‹A2gê5îi"8èm|´1¢7À‹?å7NW7ðŒçälj>j}7¤ƒ‰c,‚2UÀ' ˆÕ¸ÞÕ´«€Ãø*Ühˆ=Ðß½øóÍ¿¬úw%³¹É¡vÀ›NŠ/IðUI\'ê‚#5=ÇmæHro9ê~œ'ª\F ~í·ú úè:9L¸ŸÈFXáU^+Á©»}ÓuÐÏ4P£.öIâ=îô)™%$y€ RÝL-ÐL-E@—¾k‹„>hË‘è·<á84* dú†\¿# Ú™@a˜fXw…zHÐéu×_(c ,–Ô Œ»Ú À{}fŸ3zõ‚c`œL ‰~Í…¤è)Óþ ¼c^}ð/½Œ/€®óXõ¼°‘`†‡$Ã;o½äj@© iè;42A$]w™&RGôœ¨b*â PFSøLä ‹Œhq—A¬òß!jO=ê"*Ýe´‚¯ë­Wˆ.ÖW¦ã¶î‚®qO©D§è¡š€#—ptË×õ´Ë\¼Ct+ïðwY#2ÍÇ y’´A ˆ±8Þ!ê„Hšžÿö´Ç4µú¦€i•.t“g|'¡LÇà$µSO$ú®^iô• 5ò!‘}mé;Ñ4Àc‚3yå$P’–´ ÊŽ£a8W*YàI Å6z¡×:–¼¤Ú¥1.€^_Us ½À‚[ýÀk—Õ v·ÐaÜuž†ü6¦]Ç ÷zDèˆIRÀMŒÑ~ÈXHÕúK¨=V“ZÀcnq>x6ö]Þ%ùÉe °ÅƒË¸œ¡Å§à.*C2¸’wÊF<ç> 1ö« X&CÕà÷ª¥h&)>_^æ_^ö»|L‘jŽYƒøÓY1 â¬7<ñAÛÀc5±Ü GlB¬ùªÿ ð ôó0 á¾:©ír-Ö%!×gÀºr]LÑJ ¸3Nè+pF…oøxQw¸ŸéÝ@¶_¹¨§D·Áõác˜’õPé §«TB^hÍ)¡ àDCž5r~Y¡3ÄyÐOZè7P¿+Zr„Ý Ãà56BÄ·Ñd_à t—6Ð8‘5 ÍW&ÎJ­‘|rŽ3óËÏ´ òÂS™: ×AÏ5o€u¾\€ÜÎc»„^`…ÍB|;âSðY,ów`?ΨÔ@À¡†c&8Ïm^òã`xœhPÁ§äº<ïwá°¿x”Ñ÷çú¿W濪Ž|/©t™·ÀËd¨ƒDh§˜j"?\ª'Dwx$þ$‰à5hYJ¹N-ù$bÖ|” &‰¡Ì»d 7ÔNð6w¹Ç)‡¼äAA ôÍ*刄«|B5(;^§„$îèý\xPL5ÇŒ^ï(ów’Óºs¸ Äo€Ö™ u$È×çƒÇ¸Eç4ñà‹Øá‚;ÔJ ®kS\åûÞ"¡Zžª (Ó§°Bô¤»ô’3üšëš´@Ñ+< AŠ“¹É ‚ÚU¸Ï·Á<¥ KÅ|½Ô&½l¥ûÑe;ÐÊb?!ApL÷€9z(·1E-pMùa4«ìð\I?ý@Ð.·AÙ:ÖpÓÅŒA|á>ª$õÓ zÀ4Õ ‡¾ÃxÚ…,‚{½á3àÔIT€»Ô§" ›ЬwÃðÅe\ °Å å¡0 é^¸N¦ÔõààÀ; 0«®¹*2 ´ƒZt+ô}.Ò è„~ÍiÊP#xÙsþ . ê2xÞÄ}ˆô„dðsR(]w•Ÿýq“ÛÀ/ ë”Ù:õ\¯Á«\s¹«[êÁ‚žñĹÒØˆ7 þ@fl&¸ž*¯8bœ|/˜‰ßñ^‚NÖ`'ñ˜õ]•4Çï |ð3wHÕ¥‡A•¾¦QðÞÕí'zé7Då{—ï2Ø¡ŒS>éB]¿âÜëÀùj ¡tjÜN·Hè¥Üæ‚;ÜÏ¡o€ÐõÐD‚†Y'òøª Ùƒ*¡˜ /\xxË)\Э»>*Èæ ÜïëT‘Ð:"²Çg¶ ¤År—­\.!“RÎ4¨10K®"ÑåJÓ)ºEÑbù®·ÀQw¨¯‘¤ P«ç½D¥j’„:ôSgà:ù<¥A àÞ;EMÀµ˜æ[@»Úë\Ù@e¼BŽÒH ÄÇá«V€lù„—^¢ü€Ô³4ÆP¥WÇ1M¾ nT#ï€1Ÿ² à*µ‚¿êƒ†€Rµø-¸š¶Ëmàµ×Bõé„MÐGf\ îv‰7@oYf UúÔ0ŽAG~Çw _É$5Á èDIl{”y ´nñXp;€“zæ5ÞsTÇøÞP:õ-@Èà…#øk8ã=¨Ù§4€26ÿtú—JÿΨF´GÔhxç¤Ä™ØI‚¥ŽèúúÛ"ÙTpL’¾¸êò+ÐêYµýƒêPGЦ65ú $?ÖôÜDwÄW^!p sª§!ê.Á=n _‚˜Ì ¦5é p'J!¡·ñ„ šB1'à[¤úxèY²H(_ù>%rÃçµ…HÐ÷0GpâvßæÂe>Ô28Mû®=bÇÓ$tNª—‰®¢J-¾zP S­àuôŽ3oë¥{€RÊœFÔ¹Ê …æØ©`˜9ÒÀïTGAƒºÆÐO·Ó ^ç% e|üÓZnªç³â‘ÝÀ!˪!ŒÒJÔ ?è1èŽ2Y'áu.ÜGd'nó¨Õ{Œ$²I×/p²«¸K$GÏ „N¾òüÆCÊ0C=Q#ꡚ@'õaŒSª¯¶|ÎÔ” @ó 1IB%ñCÀª¶É!á—J'› ½æ¾nå~åçà©ð˜§$Tî>"º˜ÚÖ¹ÞT¤*×€FÔà$.|K7xn‹¯U úåt¿%ÁaXPÑ³Þ ûzâ ÏA©Ê‰éÀˆWáÌe:⠸Ǣ#=Œ“Ú(¿BG¹› G ¡H «P÷€*Â2 = a‚[þÐGÿß»Ò5?ð”¯NÁ·\Á(äN¯AT²³@SnÔMˆsί€WZåB?•Lxƒûà|OÇ AsJÕsWà"xq',†np³Þq Üu«?x\ àm%4ªô®×ÁÙ¼Õ¸™Aòü Üo¨â͘§Nð”3ÂmÐO 5>g†WÄ!ú€×λÜU†÷—½à kby(V~òZ} m†utÌM=§1Ã*¨Z÷\ZÕšëÀí¾í&àØûL@xäE?ƒÿ,ž÷Yÿ±ÿIEND®B`‚Carla-2.4.2/resources/bitmaps/background_calf_black.png000066400000000000000000002033771420416754300232020ustar00rootroot00000000000000‰PNG  IHDR€ðpÕË pHYs  šœtIMEÝ ñiÉK€IDATxÚÔ½Û’ã:®- JΜ{Ç^Ñ}fÿÿ®´Ež ÔàR²œ5QiËÅ+ˆË˜þõ¯¹‰‡¼^/™çYDD–e©Ÿõû÷÷÷áÙ”’¼^/™¦Iæy–œ³äœeš¦æ>ëþÖ»÷“”snê„ß½kïR)ERJ‡ÏÖïÑû¹Ï¢2¹|k°Œ^™#õy_)Çi>ϳ,ËR?ßA)¥Óíù§öS¬~VÒq@ž0Zî;¤sLç§Î{­+®…\ŠLÛøe³-Eò²óåY"ëš<•wE”%Ë$û<Æ:*ßÒï8­¹¼,KS‡+¼…Ÿ·~÷x2—aÑ<Ïò|>ežgsÍkùÌ¿{å"ð)î›^»ï£÷yB΋LÓì~ÎyÙÚ´~.e{ëÍìÈê3k¾ñøYãñ &¾×ãëçûÕûhykM¯•R¹¾·)5ãy|ÏçxdºKä‰ n ^ËYŠˆ”œ%M“ˆ¬õ(y_?µ})­÷©Ðjô'¾ßÚ°QØT²øeJé²d ž²ÞSú­:0‹öKñ³æýåA$"ç=åidéñ™ÑöZмÕÞþb­ü]ײõŽw…?«.¼6/s{{ÊŠ·þ#EÊ7®ÛÆ£Û@‹<+`JIæy–ÿýßÿ•ÇãÑ ªU3s{øŒ`ãÏ¥sÝsÇäüN«¯xá=!ë2.½÷ŒÐei}Z?f†^™ú 2L>zγw­—#dµ#jß§­h:fÚ'úçÒÁZµÕ÷õzɬ Û4IÉy¨¨ï^3s•7…‘>ù¨ÏY‚¤u¿È*øÍÓ,RDJZGfÖú·,Žžeû MøÑà1ü½gåÏ 8–R†„»Q~ŠZE¹½^Yj­{Ÿez§eeÒ=ÇâG8ÎW<>(reá)£ãõ ²Æ®»¯@U“¤U™™¶¹—ÛNz•—<Ò£}gÉÕò>º‡Y÷½»/³’Ä‚åecùE×îIø{$$GíºJ—@®.(k¢kãë뫺ðw|Vï×IÎ|T¯¦qÛ½ÿLÜx¥z ×ê“H8é-žÔžÛDï}<Íý½ú[Ìóã5k³âß°ªAZ˜EÓ¼Õg¶>¦º¹?æÇ%WQO!ˆ mooÑßíRõÆ=ª‡õ{^™œM5C]§yn¾7åZ¿Y}µõ±×ÓyYd~´K¯¿"eSŸÅ9¦íW‹ 5÷pÞ'IRdçuk–©áÕ­§÷ZÉÈØ­mk÷"/Þ»ý¸¹aßLÓ¶^Œá™Ò$¹äf¾³P¦Ê¥Õ×Wa‘KÛó\aß^¥”¦Ã4}×¢È|Çål]¯ ¼óGX„õ¾išäµ¼¤N²°Y‚Ó'‰×¶§ØâgVžÔ €÷ò=VâÚDc—õ½ J–Rsªíÿþ÷¿‹µáòbcl.ÎÖBâ¿øñxÔßç9Õr´3b‡Œ’5yRš¤”{qw£tf#½BïZ£"!Û³”Y“ŽÇèÆíÕ³g ÓßqZuìYÕîpõŽnÈ£B姘¢‡ŶG84—RrºZ·ëEJ"«YHä`9ô¬„:ÆeYögE‹ˆ-tû}:ÿSs¯y?voiq€µnéh9RY…ܲ[<ËZäö\X9/2Ï“9l8E¸h.ׂ6°õ74îó3ÊÖÈúœ>Ï2×¼£¨{ﺓ×ý· >(Ä‹ØÂjÎyU–W«Øûÿõz5J€Î€,aè Ù|,ÕyîYçÐ=®¦gŽôµž0çýÄS¯çuË9ß‹ô,2Ë…†ŒJqÞ3Ö{™ z4jZÿo"œ(ˆgÂ>½‚§Y·²4` 5­sÛ5µ¢„m’ãfT¤È<Í ëÍ£;ZÖ&=lËo…=7)ÓUMÓ{·Wæ4ÁëW3Ä8%}¯gÁ°!"j2[]†°²*Å"- 3Zϯõ¬Àm6§d±äÍ!«¿EînË+À×{J’¥”°e†ßiåˆR8JÞzìaÔGÈò®-¥HɹÂ,–íó»JUS?G¸‰êͬ?Ž«î-#t Õ(bŽ8Y6‚måòЂ¨}>¬ý×~Gšç랟ô¯ÿPQÉ:¿ð³A=k†6Œ¯1cÕ†s§ã¤ÁÎV!¤õ5rŠþýdç;¸ o’h}_¯Wý†¿±–åR) #ñ˜6ÿ†®°·4'Ë*½VǶæà¦;ÏóÁŠ’¦w2¥ÍU5Ùu™¦©Ù°F#œ£vF÷FÊ㵬~¹“<+’g ;«hyFû…eEå[Z»~·¬œ,Y–-æahõ(¥È××—,Ëkû}è‘Ù£ÇC·6ŽŒ,µYë‡ÛŒŠtd=ìõ½÷~+ÐÏ*¯ñ÷ÈúŒmDŒ2ö™ôa *#tçÚûoÊÀÂ+¯ìÞ´ö-XØý{œ2‚{†=iV´•G«¶Ù±Š›”_Y¦Ç$ùµÍÍyª†‰¥P»@qRz½^’$Éü°-àjÝLÒb×!%YæöÚð2PÅ«< k8h:QžÏgêÕiN2§Y–²Èc^…ÝÈsA1÷¾ß$Fx¶³tVC²¢´<ò´o«ì‘z„.•ÞÍ*ë ³>£Á_µZÞAÓ45í‰,ïÔï+ZÀš׬ף¶”s‘iJõóúwW r‰ˆ¤\j4n–ã}Éí@Ìžˆm=â²”Ö@–y Ù°9V¬s-c:®{šËE¶opÅí¯¶ïŽàp¾îá-Ó>Q0ô”ó^š v“qÿ³[˜ËîDK¦°½W¡H÷ |‚på~»„»aÏô°‰Z> …H»B£ ß³FõˆqœxMߌZºž•«g©´‚¸¯Z:¬¨MU&¼Ä°|m-Óñ"¦ÞxzÇoâ\M«í”dyµÐ†^>2k¼<€÷YªsЉ&Çèð¼lÊ&mfyÉ«[·ôs€qÐ[éögzðåq-ÒZ#W¼(P³J"f)rç2YüÝŠlDÏnü(†å\m“U_/pl4Rù ®Õh®Xu®½C#í5×étÌY©y,­|–¥”ÖêßYÿ¬]§Ndký]÷6…Ä|O b+y/0ªöÁ1<è͘ÀëÀiZ19Ž)Ý *%s´/Z÷PŠÆznB˺ÑÙ…q6Ü?{€ç;(bg…ëå•E¦áñÜž½w(EgL[Ú{%àzôºæ´¼ž+×k‡¯=öÉ/[D„ñC"WÂÄ¢ ß:¾Í©"5ño[—~Tà'1‰8g1[ÖçûûÛ¬WuKƒë:éNA}YvUØâ$²gyÅH4nÏÒ|VQîe€ðÊ÷Þ3jyc¯Qä¦îÕßß…7%÷‹M7ºz1XûÙÊ °¾Ú~÷»­‡ó¾{Ï{Ø·•¼ºû­@ŒöFé¯EK¸âŒ&ø^ö*à† L÷‚uå¼ÇV{lç[.àÿùŸÿ)^a×Ãì©çÝkYo,LKäZ`@¥µ yr¸‹zª«Ýö‹ˆ<æ¹Ú+Øz•y[uì‘u²AÔ×, ¨0"$éïQÐA‹¹ b0õŒä™ã#¡u„YÂ~8ã²GÑ®ZëzBþv…¡EuÜ.+xIŸgáðõzÕÓ‹¬Èà+X_æ k}ÒŽ›’ä¥=1#׳¸Ï¢hÈ8pjÇë!Eɸáqÿõ,úý]ºÈ.ÄGzÛ'̯ÆÝìgiWLD¤¤æMZ$óŽwqq½ù5Ò–ˆ7`D…RlG*b`©fýÐÔ+M=¶4^œäL¬ ±Ö”¬#&‘ÿ E?{3~÷JòÁRÿ¯ý«ô"sÎ$Še+býÐ-Àd¾X6žSËàçOE G¦y­ƒ·i7Ö­É:ÖéÏÐÑ­·Ö-3#VÂèHüm—"9/›R é&â|~ù.š=œâKÖêȈÍÄÓá·Ì T¦ûz­8V«ºW¡§Üέ·EÎChd{\Œgø{Eè[qmÇŽèYý,žƒ¥+›ª•1“GïŸçY~~~jݰþ<—SR|ð†WιîÜ€!I–ÜòÕ@ïÙ•ØÖTqXåsuéá'SJUÈ«u©)iªR* \oV%Ï+Âß=¾ÀÂÆì§õÏÂùÒPIDžŽ¼=Šº´æÏ1ô8xx)¶ºvÂôž*4ûÏ#î4Ê7ÆÏã2XVì3VÿQXÕøD?`y/ù7´äa;¸,4^yì;ÓâôNvbO×mGÁa' #\?¿6¦ÈŽn†c&qÄ ê5\èh%ÀACâoPÐìi²M9’Ç3–wú?ª§Hëa̦%hEAV¤F=OSÚ´BÌñè3Üf#3˜³gñ"ÏØb«uôžçþÅ9õŽ…ùðîo“ž[[“/—Íò¤×ÚÔ ´9ÅøNr­Ñh»y&—m>9¯–5 &áÓéQ-tij7«j“UH˥˚äZe‚h£T5“—z Öa×VϪóaÆZâ{¼va9Üü—ѳ0q¾ÒQºªŽô]‰íÕcO‡£soÿl}_ûQäñ˜äõÊ‚Ýs…E ©*>ÇgÔ;°cä°<¶ø{††;ÓèÔ2õ˜C8- •z ¸…Å´ÒÊœ xÇ­?B· €L(q²‚%­¨S¶ÖX‚È™HÓOPäªò\ÉïNæwÚÙsïE WâÕ0Ò]ÖbbAïìÞÜeü>}ÞVE¤± ò³¸qG‘V-ްϬ=\ØHÌEçôÞAÜÆI&Y^‹È,õ¤•§‡IÕ~@,ïØó¿íizkƒ7ädüV]´Fß¹îè$õX'+£A©ÖÂu³°ÀìÓ4ÉÏÏOˆ…³Ö]ÏŠ„–.ÞÏx–}{µ¶}ÇözSæ4»ÑÂÜWü[½ž³ÌFòs´¦4}[Vqœ-½Ç¿k®É» ÇòÝ2¬¾9*ä#tF™Áp#y{ˆÜÀøoÏãÄóöÝþiÞ§ÑvY{`/xÓ"«ß®b°=ªA ½ p$,>D{ϱDŒ‹ùÑú‚<‚Š÷0}n§ô¡ ò·Ò;Ès¡0¶#ÊûçáŠxóŒêXÚáÕ#á”1iT–.P,Ïdžœ€ Y}Y0Þµl$¿ÅMTû"ÊÈŒÏ)Õñö„O´üy‘öÞ¹ôüî3¿¡%è.Š2üÆé–ekqƪç–Ä4@‘g½ûüƒŠÈQ9A³ZŠ™~ç¨ßÈѫǨ°×ÞÛ¦žóÊLÿú׿‹H4iŠƒíjÑÛluSÙôbA8BÔ›H– Ñ£(ãÓá™– RüH»× 9Ú¾£ð„í§U0_šûUKæ Ž÷±\‘Àz¸6ÎþÍgëçl Йs†ñ¾ƒðîÑšNÜjŠ1Üžµ¯ýæQIVÿ©2¹p±M ÂFú½æÜÓÛ ¹8ÛV…]Ñ\WŒœvÀ»–«¿U×+½O멼‰S6èg+šÔ²|rÿ°"Å ö7 Ë–¥Á'ÅÄZõiúÐTð×sŒÙâ}6Ïsã&‹è”²]ÓñWKk.›¹ä泈È4O‡9ƒåðvTJ”zi_¬ßθjߥH¹bº^zÖ*¯¾¼˜Žy5u·I ϼÃÆdAŽ?Ê}Û(¦'(NõeÙ¡­ ÆBóu J r³ -$*ÔMÓ´¦PÀ3~SjŽo:¸œ÷Ю5[ ÏÓFÒŒD4âÂ~@¯½wýE›„Å0Ö³4ÑI‰š—åêo¬Aó´b,ôÙísšÒ.4dYSï8«s$á3j¨w¸FÆÛmY¹?Esž¦éàzÎOæƒJàeüŸ¾ëäöêƒGZu±+ê2ç,___`çYEËQÏ^@HÏú¬íŵA)EÖ ­±|žÌgõ7ZKÑrâ)=lu±¼̳¸ðû<¾wÆ–®D²[À}ï¾?u¦.¶M÷ío’ÕïÖü=cÝ>K‘QÉÃá1Æûƒå®£‡lIÇt†ÏH˜»Aœ{4ì‘n; Ļƛ' rjZe.ºØŒ¿M©µ$è÷Çr}2äÎòWÖXD«÷ÞR®D„µdiwjuµ\ ~C?«U÷Ê‚l݃Rqbë{§-ïß\û‹9ší£ÓCxÑyãiB#dª¸(::G«.ú÷ªpkÕÛTc?Ž'n”퟈4B~D‘ÀÅ1ÎÆÑfúz½Ü(f½6ºA0ÿÂ2Ñýë¹¶Ø•„s™1O\Åy–"®Þ¯Ÿ±m©Y€"RQ…ÿÇôX­åÁó^4¾·Ñ{Áwz -7žë­¶ŸÌЋxõîǹÁm( B¼" õž‰'#ÈÝ^_ãw ÞÄmŒ‚FDl¡…C+x‘!¯®öÉ!4¾¯Yƒ0R³@-±VÊðé³4÷F¡ç§;äí#Xÿ)Ÿ#Ök¬û ÷=ŸÏú7q æÁ2çáEñ½Ó6 xŒs‹ƒˆá37j¥Ã†]¼ˆ‘$"Ó~éÙ%Šc[jÝ__kž®íºFzã5¡Móž‡ù17 {1Ák+þõ0C86ëf•äñhï=ëQtoãtŠŠu)N6*Òºy›g78Í©~ÎeÅ3Z1³J¤ æq‡æûáéV?Gµº„V$p9r¿3ÎÎ ÖÀÏ,œYu‰”Œ¢oy£BŒ])n¹®øý£åqíÔbtUж0⑇ûu„栕οf·<¬R:ñÜÂhYîƒ;¡½:L2É+¿*¦³ç€Ïl‹ö=CèùSzÇ á ™P¡)RdÉKËiJ§…[Î$Àž‘3˜èË™Þ{.€^¨=ßÏŸ1xÀ q±G›yÏïÿ.bœ¬T÷Q’£H¼ç Z-Õc©3<ܢ̮‚¹Hã‚Ip¿ÄSãÜbYl†²Â¬lš¤2a´(¼Êk§ù‚m±¢ÓyòŒ¾ìÞÈ3ïl£–Â^ †–Õ|Öc¦´YÓzJFÍLUöÄîMp„¶ …¢êú*¡Ën´_¼HXÜÏ`s8ÁÍ ·Td’eÑ ‘dnR^™œJ‚ñAžpg)|Lö¯EõÔ_-ëâ8nKÀôóLË¡Ãã#òÒo(é¼Õ÷5Ñȯ”ë—¼÷²eHëáŒï§ÉSüïz¿§”Xžý¾Z´Ç² Ö‰Qo+z¶y—ÈÛmæ9Š%ú»gðAKxd)´Æ†E-ê“‘Ïé?ÿ],ÉQ«Ø‹Òë²-ß³Hìž°ÎøÕŽÀÎG­‚ñ%VgçÜŸ 猀égÏQãî”7Z…}¢¶‘‡Þ†q†Ø%öýý]Sg(CÕÏJŸL¥ A ó<‹$1ÓÖä³'x €(¬Zi®’eùòð—SÁœ8WZ…¹9Íá=s2´Lµ§tÀ»šVMø¬²ü$ûüÕb#‹©§|EXSó7)u5nä¥Èô˜äeà“”'-ŠïÉY ŽEÒÕy™[ùÓx%^ïeð¬w¥ØÖÃu}ØÁS£Qíz•àTbü∀‹J ƒõ=7ø¡ŒÇÃÄËm…tŸ÷HS‹ìauñžß$œoÅÝK‚¿E.üž^Ö‘Sý}roÄì"{œƒGx|¡)½,K…Ó5rÖÏÏr'"y^·ßE h `,Ý~0oXžh}Gá;Ú ýŽ&Õ'ó8­Ôv›Z0w7çì® Ð†ñ[i¹E;µêœqljôÏŒúº'¬\bzŒßûÝ{+Þü‹‚A¸ì;4²H|·ÏÒ¬§ÕáßzÑø#ïÀþ9C‘KÇsƒ²R[–E^k€8¦J¸ >M7µÇg±ÓÂÔu¸áŸ™³eͳ yìïèzäF×óÈýµÿÈ%lÝÇ#Ž^;KžïÍÉ‘¤ðïRœ3rMë¦õÒÀJ+µWÎoD ¼û"ZßG¥Ëþ<.ð¬KWç¹®„°ñ ¿÷’Å{[Ú €^¤¹‘Yðs̘™‘ ûA’½ëm8Ÿ <’,ºŽî¬ùÞíN-ÎÓpzZ”%øá˜¡{Ç@Ëüþþ>h€CQÃrd$£B)GZò=V²\,ËÑ9YÛúÜ…ñ¹rªÉ _Dg´ßˆQ{u·„nïÖOPÔ>Þ”uîð*Nd,ÿV/؉3ŒÜ³FÿYØ™^ Å×ü5ü> Ã8jµ"ý´nHž€ 1[w’õnlgäÖ‰\®ˆ}T^Õ `ˆ‚Ĭ`†hóµúß"|x“6s§xºP­¾±‚j¶#ºñŠÎöö M8Xùû-+¼E½èÛQüÛY³SH}¿’]@x–òppqþ²¡È ùpD9´Þ‹}®©læéxZMÕ2ÊÆ²pF¼õnú˜ ˜#¹oØ1+H™âýøH"¤w´¹nGý²…Ñ¢‘HßOµ_ÉnømYù¬ñÁÏ\N"誂 ¨G13y×}´vÌm}ÞËò®0î(Ù•æ¥ý=?ßK>ÛS¸¢à³–Áže˲dë=˜÷Oß­¸Vز§×jZpã9æ³Y×aØØË¹lJð1ªä\qa½Ül‘Û±çµø¸ˆøÖöøX›>¿§—¢èNžæáÚßðFa£‚Ên?_ 4»BžEÐZÏ Íó6ZeÜI=Á1/{»^ËK󣩫 yø×£^"û‘çøÚÛ)>!z', ¡ÉGW¡~ç"vÙ'ÈÿB‘-Z­Ø'-°f?šÁŠØcÂ41ø>K˜ï²GpEY.¦Qð|S‡í¯ºé—œM—ý'élš˜w Ë´Œµ~½´ øÝú[ïPûÕÈ=ol#a5:.Ë´>’”e*l¡úz½*Ä£ÉQz½^«2°,«¬RâJÎõDвá•kFìx&,KDšÏÕû:–ç&2–¬¬ÈUo?#1§ÞzîcN)ÂeFp’ÞüîñogêQ²æ®e¬^„Í }…_œ©cd%óà9Þu‹6ÔtGy‰¦ü±ÚÀïÌ©ßïˆVJý\¤M\?MÛ1nÉÆðy­õ{/²x”Çyð /¸ðOR¶%Iz¤&÷œ™ÜüD}Ëúàé:ö‹5‡{míåÅß7jÑoB«XñÓ÷?ŸOùz|‰”ÕíÎüÛɼµçxÂ_”ñ`”nµzÚS„ÇÐÃ0éœø‚àˇq*ÈÕÅûOÁâ!£²"¸ŠaéÓß~ƒqáÆea±Z/‘=XijŸMu¹¬€0…Bí:ÇÚô˜3Ìê›h "k×ë¥ùäâψ"i–s®-ÜÜ“$Yd,Jûjÿ.¢ö«œm¡·W\룞Å(GñB8ГRdšÓf‘h}Çwég¬‹ tŸ“Hnݤ^Ø Âó\ßQ¾1žïϱŸµ÷‡nËÒæy¬¡y–ekÓCçF„Hž¥ß§Ÿ™ît_¥žñÀKÅv›Kð¤ry‹è 4‘…«ç¯¬ [Q˜·yV~¯}^[½vGƤ[á@r³ÈÀéyšdAó»ZU ÛN‹ð´>5¿jtž†¾¯Z¦+c‚\†·Ñ…JgÉõÐÌ3¥Ç4I.k.¾j…]v,Ä4·Ö dÖ^T¢Uݘ¼Ó"îfÐï–·ö×wYrxM­“8”+6ì]럴ä·)>¾î¬ò4*¬½C½ÍHù ?ƒŒ8о^•—!ÎË‘áM‹û#B-˜ ×›ßåY£º¤”ŽÉ7wbóÿŠ—}’Ç+ÿŸdßšäð›ÂoíFç‹ä¼Ã3öÀCžžCðŠsJ…u]sŠÖü¢¿“ÓùyJT/½ŠÈŸ1Õäü„ÿ¬½üûe!ó²É˜r­<9Õ| /™ç‡”’¥”í°€ÇL¢z‘Råë#9ˆÕ%¬±Õ7ÿ˜(`«rÇ£û„Lîëû{í\Âf`£Póf‹Þë `àãz÷T›ðýŸ¢«ûâJ<‰¬À ìÞtøìNÜ£ˆ­”R“6Š>¶\Á=!ÛõõõuÈÑ„ýoµp=°Í£d }~:¬¶íwíÙ3‡#7 B/F×IdøÄZcK G²{¸´ ¡¨ /¯Aû|o4WsÉíbB9K©Â–‡‹„_ ÛÛß[täYËZ§}¯íw½E›Ñ@Ÿ™§õ4¡ž•Ñ ¸[Q/oKƒo ]¥Ô¤ìë× ›+¹&jŸ“LrŸWÇV@,˜g@ºâfiÖ/êƒP–MÑÁ:§´ê~A„¨8ÚO"ì´~×h`ä1=ÂJ;'ŒÐzұǣF×áw%ÌŒÍx>Ì!¨ –K8J[põrÁE3锺P²QR\ŽÅh½þjÜ;°ñx›3÷5b2-7˜•íßçStÀÝ܆ã~WùÀÔ…g ÿüÁýÒö+áqsÔ~ëmL >ˆ–^['uþŒÂ-:•'sÒËò³å!æù·Ž°ÂéîÎ è¹ÇκÎöæ•ý'Ñ;|æW!Žù<Ï"y=œëžëž#Ð{tgÝß"Mz O’´çIã¼ÕXî;¥·ùóó3tgXËÏì÷‚åNÞ°Žh·º‰ª0Ç“wžgùßÿý_sAkÇñâõ4£žûá·±cW£]EÖ .ËŸOI`Ö0 F˜ôVI£™Ò|ÈŽžó"%ùÉ€­IŽç`b}¢Í"„;ŸŒ¬õÉoc~àn*›•õú©6{ÚßEyI£-cØ,ö2ìõ:žjá=ËåD²å’l…bHRµ`¯©_¶HìÚ7i»'ŽŽô\¿LU™¿é³œž„×%g0°”7å'*ŒžâY5{8±(Ðç·©ðö•(—á]QÁ^<«1¿·—Ò$JmÂí½RÏŠ2kxýÑ;#É~žç¹æ"€Gß;Fìç¹1„ñahå³Òs [¥©¹+-&OºH“õ´¦»¬ƒ tŽ&÷­åcëFëzÆúgÝëYú"| õMŠÕ¤7KD' E³– añó9Ž kÌ×M¿ë¼Eo¡kyØAãšñO& ÆÁã¯çV9 /ñJmIb\Ó‰4nï“äW\†Z=WãÔ¢5Ì+ÝzB”÷¡’a/g6½Øs*þ®çvåþIeO„¸/M‹7ÇÙÃ󦗸›Û‚ýqÕ=}–îôäXãc*ÀÚ#ùôî&ÏýŽP¡-õŽ¥XøÍß¶²Ü‚o…²×Þê®Öß,¾|$²Êß-Àd»ÅDD¤Øù»În¼|?2B¯\ o6ê¶ÀÎûÙfî]Ú¾3ÆÝd¹ ˜<üŸ®®i{Ð’¶}׿5 L®ì§øª­Z[‘¯¥=0©u,}µÇ®‚ß““YJYÌ¿–šûËw%ÛËcP@ÿó!ë²6Áž»i‹z¡5 ýö›– fÆÏ`¾4röp4ÎŒ‡õ„„PILÒ1•sþѱS”!"õ7¼O“;G›¶Ç'J)5õSm×r<ÃØrÿr¿`ä#Õˆpky™zG z{×Yëÿ·ì™gzÖäß 'j ¯û–û°Ž$­E~„×–Ršç†È¹Ýë_$/) ¦)ɲä Y‹›Är3?Œò="õx%Vo«lù. º|× m€&£E+“Å$0 Æs-ðÀYÀRk撚ô=-ó“‹øìàì‚Ì’ežæ=WVJ H–û\­˜ƒ³ [é<ݲ{ÏXÏ¢×›Í̈€æò=æÔävû>N+YLèù|^zŸ’@®B¤((?[.ýMÛ­¯.Þø{ÞiÎ$?{þ&^±¸x|DžK×êþnyB,A«FÊnW¥Ì‹æwz8¹3­c”nè*ƒ!"\&ŸÓŒcËc=BW­¶L^ßykñ069Kšg)ËRÿš}?Zïdä‡ÜÞs iÚs2z÷XõÀÞæ#V_| WnÝ‘÷©¬Fƒ¼zŠæÛi`>™75u¢@ÀÚ›vrXæÃÙJ2{ÆJøî}ÿTRlÑ0¥=ÚÔÂpò¥ßïΤoY…,†}æ^Ð/XèFÜ^ S´pÿ‰nàOX‰ªrQ¸x‡ÎºöL+ ô;. —ôz½äûû{hÁ{ïPºêrŽÜÈëùŽw>XVÍžÕÙë_ÞÿõÜëÜߟz§’Õw¼ÛJ+ä¹£{X-TdتÇóÁ³(²@µnÓï[98[‚õ™ëíÕó¬0…ãñYKÐÃwíýW ðK¶rñÄ[ùôÞ‹cÞã'g"„ÏôO4~nÞ;ãžÚNªŸU>BÜÀ­t:|¢Û6o¾²¤õ®ë/÷×t¹p––ÎÆº‰€²µgžªoû0¦p?îJì Aïõ P·Z­Í4J6½\+¯Ïè [n\1¦º}w 9‰fÿžç£›@ã`Ëq«Êõ%Ѧ5 šÏ¹d1ã5ŒzGÖëž—¹·œêÏ_is™§y;Ø}½Î[¿¯ŸÛµyÆØÂZéZ›H(x‰mäø!þì¹?ï¢hÓúúú:ÔkDñë¾ÁÿÞoˆù²0`HžÛ ]RšÂeJ¶µÎ À©.®’¥7ÙØLo³ßwô 5Î ^©ó3mé_Rë²·#Su|vk‡â~š5¼wb½ÔÐX l”õ9‰”¦'hU«ÇéÍ$Ö¸cùÇcm§aý_=@"9¿dš&?Õk+޲„B›4¨¤IÇñ»^?KŸpûzØO+ŠÚ‹mæM9¢ñ(&΃>x‘÷#ïâãGúGéÎ̵^ºô˜Ûy³ØšŸ6yQ¿|å=eê%¶~ãòn±bÄjćÜQ¿G#ªº&¦iâ‡lçïuÐÖ|üûùˆ¤QlÛÈä>“?0Špâ1@--}9gùþþÞ5eŽ0›GÉëÚ½¶„QÄÛ½Õ’ +$Ïm˨ܳ¶hŸŸ¡ÝS"—Dãþ”Òœ]«dYi{Á%^ÏxÇÖáwîà:Ž®Ö)—RTP*[Ú]§è–AaH…ÅëL0¯ëß²¾9I+$GVaëœu/ÑÚ˜-²”%O‰Š¬ð^2—‡|Üj#»qðu«Ö¹ðØ·=œð| êÇ;i}•é‹k±c"Òî:_·çùâ NìソŽé˜¬@:î~àQäѲÚpÅUÌsO÷; ÈÒº£!L)‚œ¡?‚ujǗ<_Ï&Ð×ã«)C­J"r8-ï9VFD2L>¬ô]_ÔÌ€³hòÇ(|ÿ.&ÒÃHXýè™ê¹®ÌX-—[M8jØkw´ðFöÒEð"órÏñ½Vßà&÷.±E6Іý$F)ŠÄµúÐØYn{ݨõ§®µr„ÍÓ,¯¥Ÿ‹ïL­ëXWŒ`oV6Á“7³QÇ’ÏÉåu ÕõÝÒxšÌ ˜E ¡v°9z!»Â|´è±r†+µˆÔcî8Õ ]X‚jJIf ü«ŽÖ%ÊÝçQÉŒãcÍãý¯ „­ò[Ä’„X¼,Þ¹kð9¹#|+°ì¿áÙyL| ¶©'}4mšc $–÷bmÇnWc˜gÕÖ­¥(ß•‘!ýý÷ßå])²·@çy–ŸeÕ¿çïæ·ên›’éN(y‘4Í«K$G“±œCŸ$tùÔZå<à~>#XèF±/”œm!?wkA–[MÇvêä´`Žâ~¦ŽVô¦ÒÙü]žK¸gy}—¼ôFVßý \ …õ>¯ Œ=×'Rà —U)©ÅÔx8ݽ?:îe‘Ég= DS´‚5tŽWWaJ-.*‰,‹mEêYCÙz³^o~8•È,ÑÃRXeGÈKs4‚ÃÖújýM¬3=g¥RZ±ŽíÉG¼Ù¢$"2§õ$˜i–µ>£–L¬ÓZæž&Ka WÈS黥¥¡»ºdaÿ®RÄ{vÈžC$Žj÷ 5‘0í-ú÷Œür%3~~>Ÿ&oækjŒ”y¼†¿½“•Â30\²FàÃÈì>Ïsó¬†;÷6ì”ÔÅØj×JªÁµgÿ·èn‹\”Žáê;ïNùÂe[uosõ²'sá"G»~G·K¯ïDâyfÍ—KLoÛü{'ÜprO9œ?ÛƒU³FýŽm:+ºia¶#ÐFú¿{Ïml'ê·¶G1*ÍØì¼Öˆ™ö¢ˆ1¢UÛ¨ïá@¢È\vùàÑ—ˆ¹R‹øóù8š—ëÔöÙù÷#VZƒŠZö-—*(Xs/æ‡ú{´ÜH òÒãDíT˪å x8ç<¿Cw9‰­VyX²OîMÛ.B_>yFñ]¤s22x}QùH8_#!¹4ÂÏЭÀè·¯¯¯zbÁ<ϯÜÒÜ,F‚ŒB¿[Zå›hí Á5"ÈyÂROóÛÍãê6²S©ôÚq‡E óv1Pƒ>+5Öþsgîϱ¥hõýϳ ê–Ò~£D¼S’ü*5{¾HŒ)¬Àþe‘i뇚ƒîä‰+ÿ$zw^x© âwîÑøÝK¥‚Ô³ð°»S½XQ«V*«ô¯•JÄÊígá—¬”4ˆ—ã ‚û¶gqÄ÷Z<ãó¼~eŒ¯ÖÝ ¬Ub™?#nƒÆðžx#{ÏÌÓdºÒ׆èŸë[b“ʦýe¸ /%U´¦FŒ e#Rr²îßš‹dm«Ÿ-×fÚ,îÍûõ Ogï}|ìüYíq\¢h^T>8à]xΦ^ŸHÝ;iAµIm KÛŠÇQ¥F¡%1"ËruƒIÃÀÑN½Åq•¬È¯«d¹™z(Œ(S·É´E?äõZ¶¨¨ØMååý²¢Çš~ž' ˜”y{Ö?K6É LU©QJ¼ñb‹o°g40¾s€æún""ÒHµãõÚˆY üŽ æ”’|}}5Õ7$ZÉFÜTlÙˆÜÿxÈúXùŽ›&¤Ž™ em°šÎ1O õ©='\…1ˆmê)·–…N ØÂÖ´õŸêµ±þ·d ¤Zåó"í¹Ì¹wÍã•Þþtõd¡³tÕJÇ·Tà7a$ðæ,ÎiÎ"á=k•?‚)÷(ÚO=kžWî–—ÁƒJàÀÀœ£_{Ç¢šþÏÿù?Åë|‹ÐÕ¡Ä‘µâÇãqhn¼ÁaÇ`ç°¦Íïeëà'ÍáÖ¤Ãýt ¯mWÚíañ¼¶lXVÖ’ðCêå;b@>×§”R ÖË®âC·èïͽÆ÷OÕ_Ÿ¤‘´ˆÎ0/ É0#à4^ãÀ í3O8¶,[åz²’©ÊÁa|6YpɹN),×â§Ó4ÉKÇ[ŸÑßd‹Þ"–YÑó„)/à+–{žç=‰,JhEô°œÞ™Ì^„±UþîmølãqC>rÆjøÛä mL š÷Ú6K óÚròev{Æ@E{.þ«”½Û¬À Æèâ\·x’ÞÓÃÀöÚeþàþ…š‰ì°äO×0€îÛ/ºYoø¾õ'ØØ~dþþ®ùÀþ÷ù”¯Ç£·²µÆÕ`þi V¤¯õÜQfîzÑ}ëMfvßèuÕØ=wðBñ;‘² -ˆò2ᵞb¡ JDãeÅ舳øWÏ:l[Ϙ©"„iSz¬80¤ß†¦>è>‚{“Þ®ÙÆÅB'4u,íæ€çšòÆøäR (oG¬É$EÊzŠMŠñ¡^_xV\&Þ(Âkõà’M۹̎‹”!:H,¬³åug…¬½uàm¢=xÀ(Ïøtþ;dYÿæy®éF~ _ ":›Xž…ùHÁ9K£u¶0À¸¿ñ^ˆüNDd~̲¼Ží¼3±ý¥ö €#®œ”ÌÄùd½îEz› /t:ð\ÿD¡q´ß•¼vDm½dÂn{Õ ˜X÷ÝAÌ$˜ÙÝÁ¨{)eFé1m¦•ʈ’Õé‘uüW¤Pò-²È¼©qŠ7*©„ÖW”,÷¸å®´æg„ùzGQ`/cצy–${‹ ¾Ý»”©LÞóDh»¦é!¹,¾éa³L7j#Yõ.ÑâÍ–KÜ‚§D0ÜdsÎòøz49¹| úŠÆDßûÂ^ž•š¬ŒÊûS:DìâwL~]ÛääåÜ¢EÀÿΰáwæ¯K¶þÜyB„GÞ>z€$›‡yA çTM¶Õꓳdy<¬=bÕŽp«hÕ6´œ{Šð»ÁµwçTæÈÌ %c½ÇºW;AÝÆ¯×KæÇã(Ô®£?A#X¨»­é"/ϻۢÍVm|…-~oïxšw*\dØOðd¨€¥)¯'Í…öη¼§'J‘"ñA—ÿŸ OAz™î÷Ö#5äá´LÉ>+?[ë‡nÙœo???›´È÷÷W{´Ó^o~SZ–eÍCVELƒuCž¬¼Zœ¶s…_ýéýçÓ4z˜ç›§Xq³à6Jœ T‰±‚YëËSjXX÷„ëuîA—kñVFN12v®õÙlûµ~;f•œœ³yÊ+ÝŸðo é19MlE 18M#ˆ 0*‘U[÷LþÝNü»g8<Ã_ï=l:¢ªYð†‹cWÆZ‰ŽãF€Å,È[©"ðºè±Ðr¹Wµ…B<[G£­?maFÌ£Gg™‚;Eê|皯ÓP<œëZ¯ÞÃJEöÀŒwÉSÊî²4b[0X çØQÐÜ7t‹Z®óz}“nÓ4‰”BÂz=â ×¹åfW7ÚQ¹ñLDy>­ˆ`k좵•Ëõ°ý¨„¼`çáïFž¹òÞë×Ù ¨Þûziv,²ÆOçYÏ ø§È‚P¨ÀözíéÀX‰á OáÔg=H>ƒã§òÓÝýs›]ØVhY’У›]{ðÆ€I"-Î$¢üZŸ ?m ÜMðF¤œ-¦Þ_lŽ•Çt1[›ö„àµ:`½Ãiû™3~ñÏçÓ¬‡º·¹MxÏŒo/A(»@>IVÊnKäN%ïlãž èíµÚ¨mãßxM£RÃàêu³Ð ­ðû²´’Lkßó&Ž¿qÐÒ´–ê‘L­f‘EeT8ãò#·yϵ½Ïò£ùiÁî¤w„;®£ÈÑjŽ–`‘±õ2b°hú×[ðˆXgƒãI2¯×«ZkEöœ¡Íüµ`M¯WMµÅß3ZÜCÅ(ÿ¸’Â…9l“˜a͉Q>ú)YÂ{~úÞ‘\j¹³*gEê3œ<%ivéXLd„9}’Þ}§…›¨8­‰ÚäMd×.|ÎÒÇFŽløV_38Ö:³3²"LÇ—ØQÈeEÌ]Á^‡[ø“H(½^¯)´áç-o~¨™â5¯î^ªH—l+¸œì+a`‘ŸX)jôºˆ;ZаM¼éZÊ4`?¦)UAƒ©s+Û}¶éQL¡‘Ç =-VF‚RJµÚª’m)yV0‰u¦s„Ækžp ÝÖwn·—3ÑÃ5~"ÀCñ¢ïÒâXÒ%í.L/ºz«Hû}÷aÆõ—^p‘RÚÄxx Ëziܨ×ÛªN‡õŒ0¤®µ­C’™WÚcóø·¶\/ g¹à } מãÔº‡P9m³È½¹ÿšê¼ÂÂ_»÷L[¢ÇÇc>,T”ÃT kÄ\ _–W½†Ïr È-c¤wù$½“|Té€Ê¥MPœÛ~ãö²X¤#Ð&ÅcÆZ8š±­z2MÓš2£¹ÃØÎ:à›Å”Ž¢¶·©r?á½wÍ‹j‘Øð^"bÈ”/S=Bh@ó®`SçÓ/öœy›P)›öÏX´m®‚·£CÕçy^¶#ã2­`»^ ½¯L]$çcÚmkä^;ŹÔõ÷Gš;®¿e)’ÒŸa|Ž…5Þ=KZùõÝ ÓñÊÂçµÍž×¥81Ž·´åÕ>Ð#—Ü$GÆã·7žñZ;¡üÿ†‘À—«ïG–½¿A,ÌG)M¼³Åë , ðô\úVú(&ëýÑ= )mG¯eû?*²>½@fµ6—í³edc¸Å%ñãÉÞoÁZŒáûñ-?öüý5ï в%òÝÒ'¬I}ýÍ%ê;#{ï0Ó[t'ö«÷eüáä]^™ê<ÍËÕ³¤²&fÝÏ‘~Ö=Ñ;,L”—#ʪ—~ÇHPËZ£Ÿµ\Öò,o(×#mnÑfpp5–"‰N(K>\{‡ÊR$Íǹ„kÓº–—,ó㘗“•ˆV36Þ“ÑB'µxuÞNÆÁäù7ýœs‘yNÄ:)dó¼)©G«(¶O¡)ë5V–öñk7Él2p+ˆÃR¦Øzèy;¬ßð7ô¢ˆˆ‹Ó´ Ç1‰…EüÎÁ<Zž…é—ðXy÷pp“ò‡^:,/¢ž"åQôÎ&ât>8§º¦ñ:þ6B#'±µÜÊ é»´M<ð;ûr:ŸG#È›èòœ×k¸ÎÓaœèYÍeYÌ`n½.ÂnF¼¡U<š¹Ë¬g¸sð(8;’­FèN±˜óŸpõzt·0yHË’Ï;åÆšÒ.xkÊÄyQc·áoLhm{Tÿ3àg0e=+²%øE‹ÓÛ ãLïî®·ÉãêÔ¶ #äðï±ÏDð8¥ýà½ü=œEÑû¬ç µ9¶¢Yè’”ïÌ 3·ÆT£NñJà s"íÙÃ\V¦F¬©Vê’(hCÔMŒB©KÓ¬¤–×RŠ”œerÖGîë@*/MÏdY--—¶ÇC"ÅzÄ5nµëB|¦ö•âeéÞ1–OóúÄʈnÍŽ)Z³tÉù´0uµÿ=ŠRµ¬7¬ óóù4-¡ÜïxÚ¾c”Îä¸\–å¾³€±p¾†imœÖgl|Ϻc}4K÷WÈJºj]?3xoYön ¯=l5°,iJ ‚­}žÛô gÚÊ åN7¿5ÿö…¬Bëg¤0 ÇãÍÛßšÖØé‰\<º+ªë(vÕ¤ÁåSÄïŸ)¦ÆÊÈÖB¥œWkeÉë©28ïùD‘)mkcŽS›Dn[„Á优càñëwÇ(gÚÞf_!‰6læç ‘ˆ(ç,___¦ÁÀÛÈÎÀ|x3õúî*?é­Gk _¥H-û¬%ÒÃìBCzïbÅÅzÞRp¼w\õºåœî_Ù 8ΚCN ,IÑÆ®êÈrߣ«Aso €–ÆÊ×Õˆ›ƒ“QscMP‡P £è›Èbte4 þn¥XŠŠ€†EÈd.3Z±ÈÜhî 3äʮ¿oL9bŒÞæ"Ò&˜uoï|.‹|ëüN"Ëk2ÐÅóÚ„ÊG𷱕ª#ŠJÎêJÂÈÃÕà*#äe°,ëV^½iš$ͳä×KÒã!RŠ<¦ýÈ»ÇÆûuœ±,ûãw/¡¿7v#gûzcnF @°O¼¾v1jôγBáE§SÂ7¾»XB¾ ARš¶„ŸÓò,a§ÉÑ„Fƒ§<2×[)ÕJíÍ;Ž˜Ç9‹ðžÏÚ/¬NÓ$Kp ï²aÂ5Š?ßA·æ¬I×Õõ§‚ vÞ<Ïò¿ÿû¿ò×_5ƒx-tcÇŸ ø¸ 2w ýNbL˜Rj&úߦA—±FÆn˜ìµÿÙ-ƒÏã{ Œ©d,k†ÎYdžuÌ11ɲ”úC˜,¼¢¶W¯1±kûõ|ínóÔW.̼ceiÜ/sZ¯ñ_ý©âõ‚¹µä,²í ËöaÄ%h᯼uƒðó»?Ô3ØÄ”ÑíÏS9üµôè,„ºhSJ°ØÃ_aÑÚ7›{®œÓ!º0²¨×÷Én ­= –«}¢Ö\kGekCª +G~¡óÝáh=ö²H\‰ìg—ºwŸö{Ïõ‹„m;þø{¼> ¬èY‚ÎîÖx0…ÈÊdžë^óŒLëqó® n¿öÆyd?Pø„®XY…Þbi —ÒÌÏèŸ-°íJÿçï‚gÔ¡p&‚½Ez0sn@ÉÞq[ˆ—. G^În®ïèĈoÍp‡;ï蟑~DAOû 7 K{W⤸&$s“M­µ¡Ç¨®à•<ìö+Z±Ng6Œˆ‹“%ïŸa Ø{ÇYô`½Ò¨»BÀø4üݯ³‘:ç!ÍÙmk,ëpnÊYÇvWÖ9€Ïq[ý¾ÅkP×ÈÏÏOMƒÕFÅ®ÃW±· ˆéóWÕ(ø![WïÈ›vφìƒåc0•ˆÄ­cíã¶Œ †ÎÖÃâZÏ[d®¨B3Ï2~&¨BÄO94 ã½c”§ô”¦›ýêð é§rÁÏ# ¨ 8Êœ÷+oí!4„Ÿù´Ð×ôËQÀÞoÚÐQᙊu܃ò{¦QÏýá}GÝx£@€+›åíÁ*ý‚@Ö”(ï`sj3ë5Œ·áœÅîEø£]0ÐSL^²æ®;&>CºÁz¸¨‘ Š3ï²úpÔêsƽQÏÕE ³÷ ë6JQ*"uWáÆu`A!ؽÅeiÝ¿¾¾vÅŽðW‘%°fDð`&Ô¶3zÍ!Jç‹wŽxí{GˆÕŸOáý%JUuÆJz‡wÆkCDçñ½¨žÑ¾Ìp—x–J-S¦è3:‘ ay z'WÉ[Cœ±Ä{ÎÚ7±Í^ÿéþë=oá®ïj{#º© Îó,???æli÷x<‹¦~Á ‚£†{®Š»Ü¢ÿÍÔX6+F/¢‘qJH>ñHÖ‘PTÑCßÕGI -úu ’׫ 06NÑáÕdÞ¯:¡Iz.j¶VÙzugýX°±0Ps±Ü–Ø¿5°ÇÉèµ×Ú°zZ'˜=c¶(nz àU\êÙþïY`În^gÉ:ÉãNb ¶ƒ™ã(¾EWišçõ@õèýuä¨WÏ’+²±®œåµ,5ëÀóõ’™‚ž4_£ç~Sw/‚ÉY ëAsÇØ"·[,²,Õ…;m ¢“ ]70«~uNPž6¯¬Çüý˜=?º·;Ò6Y÷1N y€%œß Ç9¿ÆËúr÷¹ ÃÿfßA:*¾–[rUÜø8QTèøñæÝ›µWÓÑéŽVœFáeÁ¢ˆ©ôêgu§#æû¸Çª 0MMþE‹‡2Y<¶jµ±êÇï²Þ§ß2­9´ºhîJÛ-95¹ •ô$¡ˆün-~Ô?í(¯¶ÊƒKÖüÅï£JÔ%Õ²`×*‚’×Ã{ø5ëÈ´ú>…ã–vÎÜ0¹–·'„çºò^ªÊ“ë€þAÃÊ(ŒCßÁïÞ¡[@O«±µ®O¢eYƒÒ‹æ\CŸp÷ö~³‡ľ+Ò÷ª ßo™§{eZ ±Ê,!ÿl½}Þ[L‹´²[öš8N1Ãýö)Öÿ“‰™š—ÞÀ/ Óvö®ÁPµÏ"l?ý¯×K¾¿¿eY–çŠÄ¹¾ð½Ã}™ó†4N?þgñÁHð²Üü~ô/F%6QÉrM€À @~¿Ö ë÷øzˆ”Ø2•ZrÏ·xi¬ÞpAŽPã^Ýdò’ëeÄÂyk½Œwé~22N‘k²mÙƒP—óÚgÉ0Ö^å݇„ATxrþÆý`y<% ûû¾¸Íìåa³‹Ua˜Áh:‹q‡Xƒô[dYëx¡ ©~DüDÈ{ïMÒ¹É35Gy‰ì [­Àž^œa®¡uùõZ­h€ïéWï½}j^°œ(íà¶*%KJ»{+zïëõj’[[˜žæmp=:—SSW ÿ…·¾ÞO ØôñЉ™´õÙ ¼`¨Âcž×``]†çÏóPÏdn­u´2àw¶æz)/Òw4¸ˆÝŒˆcFïŒ=oÝXnKöþpD2÷]ÓèYõ¾Q¡ýì1‹·²“%ÆÇ²˜žQªÎð6Ë"ÅXq/'ëˆ5«Qä6E/‚%Dô®ò¬u´d”Y8 Rïõ¼c˜!²ˆ^Uzzc[À–¡$ÉY¥ZҤíz®›S’$ó4Ëóõ”ùñµFÕé8á€!M™d9&û£Ø+­ßI!Í;ã0êsü<’& ¢ãƒ×-AÖŠÜVbWÞE‘õ¨¦ˆ‘ÕH¿ÖUD¤È²dyH½æE±^…8ð»=Ë'wf‹~Ï$øª‚QòÊ£P8ðZ˜“1Ÿ‹E‰ŸÕJZûXsáIÛ‡ún òàM¨q<Š­²6=$Þ ð»5FZ&—ïáy ëå)´ëØ^ws‚<¬³çî=ã1²².x42—ø ×Uð“bÖ›÷ kOú-\>*fk»Šh:'>â=, ª ãY-ï&÷!ŽÏ{Dú×ß—&‚D+×Á·Dù~<äçõ’ïÇ·ü¼~L@dP>g3JÙ‹ÙË¿s7õÊdØÃ äœAõÓ³nPϪ6p€@—¬÷˜¦Õ‹)TH-³]Ç<&Q½§ÕÙ£3)[¼wÝÈf|íl³uŒ÷ù MÓd¶U §_RxتÔs—•eÙóâÜÊ@òÊ®÷•¹ÉÓ÷!.ðµ¼ä1o®ÚRÖÏ˲ {»«J ÑK^ë°žÖѪ›‹gås"¯W‘= ¾TÁ‘ûûGûmªõÌë "s||ö%–¦Ù²îØRïÓŠëN©Ý½ À"GkÝüxHÞNYAˆ â yþ'x¾¹N Ú¼½wÙ—)¸WËûs‘ö#éhö@.÷¿TðIò,ý½¾ë_Æ×=øÆ')ÎØ¨aá~{® ß²`)œˆºøú¥ÿïÿûÿšÕpÿ‘\=ëgu{Ú) ¶×ÀoIæyÚ‚CŠÉ °\Nlnä9%YJ‘¯¯/y=Ÿò; ŠœøÈd>A n¬&"Lò&rDg¢ñ»Ç4Ççåw»"¨yß;åzø?ë\Øß°X¹£ÜÈÃ7'O3i“:[Q¦ØG^[ÎR““/‰Øéªí“F"a›w^OOºÙ¢!¯_½>µnk çÌ8NfâQD¤Ö»ÙRÙrORÊ"œ—ŒÇÁ;ù"âõwË‚w´–dIi•û9HïWÏŽ¶ý€ó›§Š‘¤¦÷Ðrt/RÈÉRÚy¹~\#,4yij<à7ÈRIi?v佟ȗç¹Þ±/É< SOy}Ü»Îå©á‚ëŒõ9XOárò ZT¬F!¸Ó DÀÜßÄMP48f»ƒ² Üw£u!ƒW‹[cõ>ýË‘”Œëê踞­ùo`û øläúíáÿœšS;d{çú™ g‡v)ý ÷2 ‹I[}‚}‡÷èg|VÛ…ýø Wxô6xoCŠ¢«—#¯§X¼~vo‡L8 Ú ( FQ÷ꔦíáÚ‚nÛÚT/©­´V[¼žBžª‘õL±œÅåhùóêÚNþÑU5ZÕNQAãÀÁwò-ŠHÝîÚC>-îk y©ŸõàΈÓh½ ¥WžŠpÉìvÅkïЙŒ¸gèþ†.aÞ©S"çyß²,»šlB_¨·àOÛßS.àžÕ¥wn°¤³…î•9µ@H=ÿ5ÁOxÜA¨„ŽÒQ,§1M2vª]÷##å …­bx?â2yc=“«©w"F/†Eè|$¸'Øè;ü¶e±xamím~ܦ;û'ró¢EÇbºWêùÎ) £Œ:šs8oG,™Èì΢e1´¥­h¹”F¬re5·…cYJÁƒ š2¬µìEm§œ ©¢Õ6Ú§ªìWÌä«HzlP 4X_³I—5%ÑÞÚ~ã^ƒzÁO^Ö‰ûé ¥ Ök?¬ßÏ4…5KkýÛÖë“ÐêîœZ"Òž?œsÉ>o‘Î)è~ý­y‚VH»ÑzïÉDwñôÜq’.aG,=Lø›5AÑÅȾvϲÀ™é­…ßöï1?Ñm ý cÒ³Pa{ßõå÷“òÀ¤––ÅZ2›·9+=Öá®Èºèè7¨ËgLb9Þâ|§žV: ìã”Ò!bÒÈê“Q¹^N®‘~Tæ¥Î°¡H°ágеŽýÒ[ ºˆ¡[EäýÅ|fQ Rgʺò»¥…Æy<°þøŒŽ•7.Ö9¢Qˆ¼ i³ã6£[¯¾#·î«½ˆÁB\c”æ c±œý ²xÞ¸ñ³'€zÂo=÷/~?ÛÏÖüW>cmˆžËÛZKŒwýùùÙîß#~ÙUÆÖÀRŠdÉò˜lµ@ƸJoÝ\Ù t½h!§¹áÛwa¬¹´Þ*D0&¹÷ÚïÕ›­JVRn¤OŸùkF¤×k`­Í%¦´6Ó¥|‡¬uŽ “L2=Zï˜ÅïK)Õºn­[“"8fýþ|>kŠ)\À:}}}Éëõ:ð„Q´9QD-jóœäçç¼÷ãT›ïµ,€±gQ@ÁA55–ö9zˆ…Á1–î.!Ð{—'ø¡P=5ÅÏy ˆÈ¼{‘´ïZ•‘x•#}Š -)‘{ù.Š,3|~/ßîE‡ÝU?¯Ï®j¤–ÁïòÁîúιQïzµ‹°>,‚¿ë\)%‰l0µ×ë%_‡Y­ìšÿç?ò3Oim°~¥4GD¶n¼²FÌNS3)z‘¾Þw¶¼*…h]ÃÏg`)V@–¾‡Ëòë¢ß•aÚKáU Ý™uþ»B ‹qÄ%žÑÎ ô×~¸;Y$›º“Å×ýz<%Š‚½» ѽØ ÆÂmèa­ò>åá˜-¡÷w]Àâcw¬’­Õ€¿þú«JÍ*%kg*–FHñÜUŠÆÐÊceíë¿@=Æ…}Òû½§éŽF§òïÈÖÂIö\ JÈÈYÔaÉYf+«Ï§5í·åóûQx³69´@*ññ½ §³QñiÇr`Ö»ñ‹¿á;püØcÐs™÷ÚqTdDÞöŒÈ4ØGÀ^ºôIâ^ÿÖÈÀ|ë2çÍ5¤w (vÌÀÑpí ³Pšä8X8´ÖÎhì€Uæ;”þþû﹄8³½ç¦á°|ëØ !íÝ ñ¯—¶ ç,Óã±®†µZ'à ?BÙ‰ÚcšîÙ¨F0[žF…Œ'Zó,/ž+S›²B¿kV<)F?/¹=©A-'m¶È ¬=Ø×½|•“¬):zV’ÆÎ˜}:M7€ Úv`[î¢ZÞ$2ZãëêÙ¤‘OhÛ†­|ðþ(ecpDb««’ÅÐõ3”²>ìeíŠY’}þ÷ÞÅQÈxÂÇÏj¯öãˆû¼ëÁ˜I=WâU Þ°™1}.݆-í¹_,, Gßr›*¶,Uгž¯»‚Øãêmt86^»ôûÌï.È¡’âAVpºGÏÀwª`ì «g#=ÞÐnÈóaÜDœ}ë ™îÓ"#'-}*iü]ks4ht4~7ò0|£ü^üüü d­åî˜ç™»kž¥c ;\YßÕÃz ›_Ä“0ʳ†Éžù9ŒÄTúúzÔt-–pÓ N)­‰öÌÄÕænžlwa4FµÑÞYÊ<«D¤Å0ÐúÝÞÛÓ»Œ•4Š[ÄûQP´,n(nã½W¹Û]UÓÔ¸0Тå]«n~u‡zó‡´~üÌQÜo@K¾E#˜X"áStùöžÅç½Ïž``¨¶íÖg¤^ðYï~kÞ긤TD¤M¥Yw´|‹"¥ÊÊ+»C ²éQò°|‘;üÑ•ô#ïµÑó|´¢ïûóIÆ‘ G‹<’¯YåGØÔµ~ýz r¥ï=ÔqÉ5Ъ,¥z ¸‘‚6ŒØ—Sd÷9“·7x)Òýñn°Ç¨d¥÷3¦;q78ÀXV¸hÓnO<Ù6ÂN.îw™AÏ{ÆøNx,<ytŠG³ õ÷ Î=Ðw¼m1 K¡±0­â2Wwé^Ÿ¼e–`kÛñ=)}Ö+yάÀ8Ä7[îpËîÁƒîg‹>’+ÊÏUl¥"AAQµBi®ýÓ)ç¼nSÁ»j²5‰ë÷`¸^׺¯U?FzeyQÆZŽ’ÇlùD.+½s˜þYðùmê:3m~• Ý{þĹÁ–¶>âÑzãguËŽ¾[ÄöõzTv;cïàzžûXg@©Qî x÷¬›œ…Û„mÃû¢õ¤Â— ’‡±$ÐJÛÑ<÷2–ÒªZø¯+4dJ)„æT\˜¾wZÉÓz—œ¥ÐúÕÔ`Ùa;·ŽrÇâ+.ÊÁìŽôbn›s–%ðd೑ ¿Fæƒ'?/àm©Ït¼*ŸÀ­9Î{î‹ZÞÿ,<®µÑÒÍ}iõñ»0¦FÅûEÄ¡ü"»ÀÆ‚F¹agq0‡bZôyOãû ¡°· °¾ædÒÏïYQ¢œH£éNÓ4™ŒNôëõ’ "¶K)’æ$sÚÝ£ìÎAþëet²Š~÷¬|üy„X Ñkg­~‘ ½ß¤?Àw:Óõîùíu….õQ7ÒˆØKíÀ‚ÏD4º!D8D«<Û3ƺ+“YGÖbN@·0ž³Ç—ËÛ¬"Ûõ÷¨p¤uqÁ±²Ö£ Ã5¤”õLìÇc"1Óáˆ4<¥~V¡À°zmò\fÓ4UaCëý§"‚GçkÄcz‰ÔG˽ÊSª@/Î1mxï’«5>“e¯ ›âwaš/íÌÄ  †dm¤.üÇÍ[|6¢è„,|ï_ª‰ÍE£!/Ê@·@Néˆßÿïÿý¿M4¦†ynyÃ__MÞwfB:Cv<*´€1ÂÇŠJ89/³´ùßÜû:‘½½ÆÊ¨g%geÑëcÜû¬½’÷Ü+ü7¢bѽn`¾›å&±"¾82µÇ4~ ¸ëáoF¢Ÿ>I‘Àm0ŒÉ~P€9ÎõÍuÈ Ë¿’4…>¬Û™²Î0î êf;™@èy>·ù¼o…Äöµç-[©ò„p,ÞƒcËÖÀ´  #¹0ÄyÕÈ&Ii2™ºV,+àˆ5å(ͯij£Ã9o¥‹°o‘uƒÁÐgÞs×½J§°‡zm{‡fÖ<òüù‘¯ïo)9×ke³¤Üs‰ö,Ö»5çE/·>| !Ç~?Ý™ç¹æ¶Äkm Íñ=*_–Õ—w•7J#YOpSÂÈèœäY£þ§Vž„ ‘iÞän¹A£´ž%¬·.#+z$p[¿YX>Ä«e†±€ìeà`í?/¨L‰ÓJyg¾{õ>C ]±ÆâŸ€÷ó(JŸ‚ÂÈ;Ìž Ç×<˜ÂnÛÞܾ*ØZÞ*¾Îs¡ú;ï-(ÇD4r¾ø=¦²öÛ ¤·’úÎó,Ó4Éóùlþõõåbot@)Œ/P”ºßm©NDÌöÌÇ7ì°ï¦^ºƒÑ@Ϻp6jиêâpe)%S¿rf'ºV€sdzö„U¶~~ڽ⑮Î2u±‹ìgyâœ6^Цž»ï YüSDñøGÁ¸y¢5#K–ü:&seBÿªpém‡Mm‹Jµîµ,=Ìh¯ñ\÷VÛ<Ëb4ï-è®%¾1ÇšC=b+MF¼«àwOYû¨5Xðw¥Râ¤ÐÚ¯gɳÀëÙïgËÊο[ïçt0"âÎ=o=yt†Wó¾ïåüœ‘bâa8-t'¼£ÛŸ´rƒpCF!CM¡ø];ÍÊ'…eâ¢,i#`û³E#Fø”w­GÁI#´Æ‹{î%vßi„0w5Í“,¯}ë‰W)‚/ŠãðyøRÆü(E8¥è|jíËõ}†¢ÈL$o¾ÒUÔÓ€±Ì#&ð(Xq¿Z}ni«Iü90iÞOº^:íå Ä‹òf¡GOæÐ¶EY ¦´ZsÙOôÐë"{‚í"¾°lE6›Ü9¦ó\ëÒÃEž.×ü¨¥ÍÚ”½ˆð(¨Èsâ5,k4H¯±Rxâqv]Ý’…éj¼ëªÄSûðN°·¹1³çE¹MU¸ Ÿ­÷oQ~è]p˜¤ÊBOÚò‹ƒÇ…qn»VÜ8pÏXx$f&¨…¡ÉÏ]}·ÕW£cÿ©y饰±6Ý+õéc1{‚â»dù뽃O²Ye­eYêÉ #øVäožðâÂà†Ð Ž‹¬ù­Àe÷Í1sW ¢èšE̸¸,VâGס§„G´øÌ«@Ž’Ó—}lq¡À¢û=|*ö‘Wï+d=ïy<Þº¸î–eÏËÎyFßíߡ՛ëŠÏ°uµê‹i¢3ÉÏ$z~÷DX-M -3‰å1@-‡sJõ‚¼Á¼BW&˜µz›ç§¥û+Ô0S¢’O`a¬’u0ºÃwÏ“»A+õ6ã«TÛ´%¤­‡—cΞ`¨¼yƪ÷ÛCú Š,€VzóD²˜£Þ³ö‘Ç㜂t—䵕óßá}:?\áçí‰T@ú^$öx KÚÃÒaRh+$Þ0')µ±Ñ»åW»Ëó,Ö;# b×¢5΂ªÜo®!ÖpÀ ¿ò´Ñy’“Sঠ7ýjµûô¬ p–¯°Ç‡?cÿ#yJeäþì)¤]= 0Ï%ç°ÒŽÅÜvÞ³ˆ ôÀéïlœ£¦~dvŸ¢žÛqÄMüí“·€–ûx­'¾77—§ÑqyL£'XGDõr%ZÀ³ö¯ÖËQaVdÌ‚¹ï¦3 ²§åsð™È効µo•¼SAFßïD^â⹜øüñxT¬22ó:×7¼êÏÏÏ¡N OÑàĦ­)sŽ|”×Â\éõ}†qU{Ž[¦¬ÍÉs}è;/3îͲÀ+=ZÜFô¡‘YBÂxG¶Üb8øÆj' LšMÁÞ#$·^,Më9ªeí”z}ÉY¾¾¾× w–fï n ïÃHXµêð­õ›÷Öò@ÍšÃÖšV-ËÏ'N8Á~D÷ž¾×z§ŽùãñŸŸyhýÔ‚Qòì‚py!kÍ%Oò¢zsäYG¬ºDnRþÝR±íZBï˜JÎDö[í±Ú)‡ü¾že¤N¿!$Z®pÏÕ~Õ¨åGÄ{ B›ð•ìú<ÓVš°Ng­rô“§˜1¾¸”R•~>Â÷°ñŸ²ž½ü5C/24o<õC¶èl¤¯EvE›ßÈ»Fêï¹a•2b Ï®õÍŠÅ“ ]$º¢¥sùq{<ü ƒc¯Ðè9Ò[#û‡µ!X…‹Ò¸vÆ*ëmèñfô¹HáRIi–RðLËý;Ή^°Ãˆ›ëN—UhHIÂs}¸ œÓ/M“ÀQ´®!\G,[\ R5­Ä¦Ààóºaàñk–€ñSf††-­QÓ%Æ;-:à¿g¦ìHI³ÒÊð¾<çÕRÏø^?]Ê8¾Xÿj §zÑsÁG(ä?Al½Kaºs_Ä1S«xd©Ô1±”@K°ý$é…ëγ²EPÇÊ–Çú[A’">ôöÒ;¨+F‡¦G°µ¹±Æ…›&QÔ…oiËìŠÀèý®¥Nî …áá4,}£Ú-3mk£FœBd9ãñY±wa–r°òm/ÓÎ=~Ÿ¦nj‡žÅƒ7;^µ¨.H,³NçÏÖ}WÇÍ#=«y„XLéÄ-ø^nG4o‡]CQ@ˆ³V¢új’sÅzŠˆy-Ž9¡ †e”œ7[ «]–@òXo‘ÍêHQ¹Vß"yV¡ÃoEDÒªòü·ƒØöy^ÛºYßõóôxˆ”ROh±ê)1,š¦Yr^dšfÁ<…k.£ ¨×ؤ׶ªAù•mÔ)Õc©#‡»#P{÷D …ÿEuÒ}ž÷>7×ó4ŒòÑ;ÈòRñ5Ý ù°ƒëa¡=—~¼tvlDH< 8ïå¥êq@Y°S ]8q<ëƒh~‡¸mÖ Ôß{J‰e‰ñ4S.±Aèþ¥–†ï¹“±%µÈœ˜žEîNí3Ú¨,œ'bÅÌþ“ÿ×¾Ûter®@µüüü¸QâÏçÓÄË$ò˜5MŽ^Ï%Ûz°T—Rv\£ã3YçØ9½–‹mÉØ^.Ód§²°BLËâ€4câXå°Zžæ`õ0•â[hœ;p‚ï<³þ~è © +. Ï#¨RT¼•‡bÝùLÝè=g=Þ}g\®Ì^Ž7!JƒýÐÃjZmÆrÏòàH±þØI –%;zš&ùùù9¤Á{"aÒJã½ë“äY:",Ž÷Üõ:à;Î?ïöS’æ\ÓzjAÛhÑœy¨1ØÛ‹b« PaÅë£í·¼P/GyÛ¬ô7¸™1Ö‘ï;öùâ»ÑD°ª#ç{tÛ (cq7Ë^.÷ ö»5ß÷@ZmøSëD4вÇAÊSôÔtñFÁ¸I {wßÜ6ç=L‘qkž `G·ÐȦ€õ‹Rºp:/ Û‡cl=׬‘jt„u¹åøÔ¿8êi<Úfún=ïÁ6z>µþVëñOüþt%8ìd͵¡Ä ’R²2Qàprú(ï3÷UÛ×Ëd`A[Ì,äÞõîÕ{Ô˜€.eÌ•ÌVÑOù¼-Z¼ tØpm¤eñCI™™úÕ#‹À;–»OP”·g„V-}o+š›E4ê:KÎg‡3ZûgtÙpÂdü‹¥uRËÌfäÂÚûÅ×¶¬ƒ»µþfK¯{ùÇzä²?\ó,Bã~ÖZ{g¦ o zZ#Žb_°/Ã>Ü8ðÝÈãóìoÓ«÷à $EÒœ¤,E¤Ø‚ÿóùl„JË„4"û†•77ñ”’dÉkÔ|°‘–]Šr#½µ¹t­ñÕ︙±…”×G×ê3l]ckóú(õ ’ðÀýà,e͵ŽßÑ;nWè7ðq‘Wç½ü$iÚÙ¯dÁnFÂ;ÝÁ½ký0>…@l‡ DøšÕHïFQ×úßZäh¥@iÖ‹f³pg pƆëgÔD­…<º¹Þ…ÝÀ6[€ø»£xî »,¥ÈÄyLß –Ñzjß$ÂÔ$ä#‚6Ï_Œúåúz4‚Ýñòhÿž¡»ÆÕÚT‘IõðgH‘Ç©®ÛÁ¥’%›BJsÌÍÞáꈱÒëxMy[ñÝ(¸¢-Eͳ²}м²#¯’ u0¢†/A=*ƒV|ƒ·†î’#n=l‚HkVÿþ~l@ó¼álž2Ï“¼^ËþÍòx|‰ˆvÌ,BG1¨·”åÀl?¡y]-sdEÉ:Î0§wN.¶2Z ÷Ö·,n^Âë[Þ(rÉ»Kk0ZŸ¯î:IÍ5/àI©DÖÕ«hžfYòb^ÿHK^Ꙫí`áÇs}ám|ÖõÐ*Õ îðhôޱu-j«ÈÑ2Íd­yu×Ï#ï5£f5âW¶`”\6„ÃÑÊ­ö’ð³õZJ2;°N{„}aycôYDoDsæñx4BÀ”ÖHeœG–Û¼‡X‡±ÑV ÇÕ”/J£ÉUÁÅ›ƒ^6Ž+kj¤¬4&zÝÇ—Ú©j"afÔrÍu ªqG‘Ǩ¼°âÄÞLV9ªØÚ4,¸Ç:®Ž3}ß ¤Óám­2¬%+c±4éãàd™çäôOú°Ý©Yø+3ý3ø Ï` AŸÂsœq?DšZa½°uLçc òÆ{±®ÌD¬z³PfÍ!&Lú¬Ÿµng5\×=tÈs^g+eJI&Kæ}6-Åèf‚Â!"Ú 3®Ò -wˆ3CŽ›7ûèãø ŠL·wùì™î´t²¥‚ÝB†‡55/‡£§%F)Yø÷è9Ë…¿5ø$`.¸qy›GóMMÏÛß‘ñIH‹ß•na|Z þtaî { ]5_ó\…ŒÆåÈÜ‘¨»Làg‹¢^g`x.Y¦4í@q«OÒ^h®GÑúÙs<»|¸/- y½¾>ÔÌoë$‘höxO4úÎÕJ¹ŸS\q‹¥TË¥Un»žvÁ€q§ò{îCkŠïGiÖÑ€û™×_ifÝîàM’äo¯ç*ƹ¢øÐfœšUFkÍ€ÜAÜÀ‚*Xï·ÆØK{ÂÖ·^Ù#mî)¦Œ–=-ßë†~Ddñ+¯g$,¿ë ~ËèE”áïøW;S:p=Bγ„`‚FoÂá`Þ) .$ÏíóIkdd×1ˆ\^Mî2Yszy ©ä,¯/q#a Ž;æK!¶ˆtûAÖ45ª4`¾6™&™æY&²š°›Ç®º·6á!MIò+Ww¬é–õ(ûžw"†½râÚ=ÝÈzÿt¸Ýê9›Ïg–õÀ`ë]ŒÇ™ëµw•™¦ýe½»zp.sônµ ¦m=ˆÏà9:=î¯^ÓùãµUPG¼eŒ`/±µÇ“½Œ –à‡²”çÊŽÈJM#²)øËŠ³Ê¸‚ɉÚoÚ°>jùÅß ~k¯é¹^ßü>Qç ^{G"r¹îá2u.ZrÊ*V½C>¼þ¶d„®ÜCp‹ ¡Bðu“ÓëØ)Œ3ÓÆâ=øÛÝ`]<;’º!"kÙE<Ú÷#aìÞõ3í°"yQðäıde`Däþ°röY.K¿åõS”w̵(²6¾Y™"JsŒ/ñ¤ÛÒÀ=½yuû:ÍCaŽOœP‹«¶tÄd‘Ç4ù·nÉz¯á_+Úq½¶çã¹b%¹õÈ ©}ª§†P["á.ú=âWû&·¡b7ü ¥tsùÖ;‘RJÍ %#ò$xŸ=(…Gâqb]kW„ÃÿÞKŒmákÑ~yP8>£È}iÍ“eYV™KcÅoú-ßX[v±£@‡–õϲ ¢`ÈAOQ´>ãñþOæÉ¸{|×F­™‡<Ÿ¯zÌŽ2ºÇc–ŸŸ€v[Ð3vGhFÌâSÑ]«±ÀÄ»Ss«ðfŠ«ý¡ j#¨¥°ÈÂ_/ÚɪŸ§õq¿‹´Ø KÆi!ø> öIò"'‘Ôe†õûä1(Y®ÌˆÞ þ@y—¥p YV•ýT x6/"Ed~̲¼â³…•VH [Ñ“8´N=8êÉèñž†!Œß=ïB”FE¡¯×«YsQ»<Ì <²ðè¿A8Fw»û½ÈZ4¼X}ÖŸmëifA€Î¸bÃ(a°Âó3|¯5o~óÏF+¼¦uúÃJåÖ(‹Ôu% 6<ÃGÓÿûÿÏ,2Ò|¬M Joa¹kÑŠÌfš4´ZŸ=žÕ(2ɲì‚ä!3æR¼ƒ¼„££Q“·ÕÃÑx]½ö·Á<™ã¤(²»=‚ ÎÞÎD2#¯Öµöƒz­¤6˲ ëŒƒ’ØÒlYR®vœÙ-|ÒæÞ£Ï9:fž…ÇëKhG+ì•6yuÄÍÑf„u@øöò-ÄüU¡cšäeàÂd ñ6u¯ï,HÉhŸYý0Ms:,ûÒ:Ïn´¬(¨ h q<>ÖuNóÒÜ“¤Fãº={œiDŸâï#ã襽Q+‘e錯ÎD2{/ˆ‚•dìÇåñºB=þäñˆÈháá¬zt?Ý¢Ò•8P3š`t¯È1ð׌oCògL28Cuãwm˜v$2vw¤´.LÕ"–¼R(En_ü]…Óõ¥TáIBíá7²6å«B„µét]ŽÅ‘ñ ¶–u}Ú•2ŽÙ±,¤žÖ׃ x.­¨ÎXf°ng¢"SŠÀ²6Ž›!oŒM?ƒ«Ò:v)M!Ki."²,2}Í;#åÐàiO Û‚óÇÖçM\òr°Ì[.´išäçõ#“<$g+úp•W/ƒß÷Vä¢'|á<À“GÌÑJÇçù3[ÙùšÖÅ›óõ(²$ Y°,£·=—gÃK6©',´)ŠZ=ÜU;pËIë¶c±²lx–TÏJ5ܤއÀ3€DJB$øYúLÏSqWŸÚ±ñ;~·QÀ'¬ím¡&êÍ\-ºÇ\‚wzo͈ßÙÆ˜1«.C]ÄÞŸafŸ´¦Œ¤z¹Û5|gt3/,ÏuÉïõ„Õ’¬³y÷:ǧ¬åN”³ÝDõø½Gg#nï ºh…r9™¸9jÓ'És=£Åæ0ÎzŸWhš‘¬ùcŸEß­zyŸ=¡ÃJ|,"&~ yâ]õ>Bo¼ udÎÇ”%èZ¦«÷ꆱ֭ˆæ>mS±s òFba¬o¥>MGa¹l-ð<§–RrÝ»Y·¬,‚k-ª+¦à¸²®&O™*؇m?ô䓈׸ùzÔà ·íóqÜѺŒŒ͵y–¼,{z!TzR2¯ãoïç³I’—×ê”ì ¨(Ôázǽ-èŒeŒ¢ƒq|þQQÀZ1¬›¥u¡ ,0^5Áß{ö:Û ëþäm:ÙX¨;»Øy¯OÑ o¥¥x'„Ïz𵬾"±åXä˜þ]¬šFáBª"ÇêQ2çã3¬w$HZîP˨À‘—ý žß[Ÿ#ð™´;êoÄÅZîéÞ<±,zõ>‹eŒ¬uv]º±„7øA/ ŒÒ~ý˜’ÃK8:rä×Ö‚Kc²nö¨1æÃï:ëïŸÍ3¦ïÁ°êw¬_3o`s{Ày—w ß'hYŠÌ³2ëUÐÞ-Áëo*ÜYÑáVÎÂP˜*¦ÇøÙ=쥂âÆãÞïWÆÄã!Qñè&äç˜]Ù܇Øã‡n`ŒËH¿þ–P8 ý‰úÆ+÷ñšXkœ= =8ÅÝ–À^† ½†Þ-k=`Ê&¶r[¢õ„‚æ/ȺÅè ¶nÂ˲ uóœäçç%ßß­‘³©Á æš4jx`DŸ Ùg¼ÊÚ¾ãqvwºoµ<ëšÕ7ï¾]^Xîëõªo>„]Ó˜,ËÒäÿ[­–¨³¿ûÛh¹rÙjÀŒÈ›S<>"­Ò‘¢=ÌË;Y.9Ž&ÜqG{þ;}†ie‚/™¦¹d777ßÏ·æŸÏvîí±×ýçÐòÆR¹º¹¬DV…g‚4wu»J·Ïðº%„œÝTx<<…N1[=OAc­ƒ(ÂÞ‚a}Ñ"Ë×z'P½C¸Ù¾»Î=^Ý£ž[‰­œ£ôIÞeAn<Åûe$“Â]dÍKË*¬×qÝxŠË4úüúˆ°÷ àUêaýTÃÖãÝ´£,ó« |ÚáßåWgy^ÏÚ§¿ùQñÇwXºGˆç4ž¼5g©zõä`TzìEÅÚYäß«*kר—Ödm;ž† ïA`¼uš‚·(qGÏÿõµåö-c…Ìò|>Cü ž¶ái¨NéÒwæœOçvº57‚3âû¯ceF¦›ˆ;΀㭨YüMç² âýÖ¤VJ«¥7+=‹×^/°K·ú- ÀZ-ŠkÂÎ"m$dÙÜÜž@^SAÉ‘£ñ÷Ö®)ošëpt½E¸*$î£ÀÃ38ñwI‹)å/×&á=’P±x¶•‚I×ÍH0C¤¸œüÔhóÎ0y.bËâ¯p!OAêÍõ’*YgÈãoWqÓé?ÿùO±µ²ÿú 1õÜl???Õ"ƒ’1ºaóá t¬]Z8%Æ ÖöŽL&gÂF…Ñ ÿ•>Ãó@È$³¸ͳé9²zq8;ö7ãy°ï?¥ïÑꢴõ ¬èõët–¼è½è«.¿E‘u^^.‹¿`ù¯³<ÆÚ0?œ•’ÈšwˆEÞ‡ tË•¥Ä|'â ^ •jÅôzi5Î⦑îÓÔígó*¸qd9)ù°ŸÝgV@Ãh G Âc} €ÿtêO}:°JÉš_l]ެÓlÓgðyK‰,g£õöÆœ¯óQ£õŒ8qå‘hñÖºŽ(¤ïxw<âú¥ÿùŸÿ w[˪äu» ¸c,`¿¥­Y ƒ#opðIZ¸“wi$š/ ‰ÿ'SÄø"€·®B!¯•Àu§Â$µ\/Aï£ã>â9‰ó Oþ`òÜUÿMÔ òÖ¥õºI¢ubõÙ;g{çúÞ½Ù©–KüW•š×ëÕ¸´°íž«¼çò®Ÿ·à‘õЬÑÑFËßYùŽ„É5EöVÏ UdW®ó²ìCDzÇA,ûwчå{Ñ£ÿˆN¥ù§Q¤èFÖ·Ez´¿{Þž/ž¢äÁƒx®F¼Èâ¿Çvâ,=G‘‹ÕÚÛpͳ‹¿Y)£GÈ}Äõ²úë2¾XÖ¿ÿþ»ö^/ªh4}†wß™s‘©>æ£P™s–Ç–1Û:§lÿn¥âÝã Œ%x·Ð³|yÌÀ"Kçk!Øœz 鬸L‡1xV€Ñ¾è €£ ¼%Ç v´Ü³ÂàËÃ,ŸÛ Yjùü9:™#K6çËÙM)â=ynR;ôR\x>ü]ßÇÑì‡öÌ–…@ü¬B#ø¾÷EìÂÛ7)ëéÇô3k.¾ÞÀÁuCP=(\®/Úøõþh-x0•¨l˳WßË÷³•7¢?¥Ü[XåQŧÞs¡ê£{©µ×Yü­'héó|=Ú³îè[VTzóÝ›ŸúÙ:ï ïc¬-òâÇyμ…ÄNAà4þnáöj@È–ôSÏ~<²¼–í\Ùv3‰€ÈŸ¢½ïÞÙx÷ìýï ~ÖÊ]Ô¶hTó[û¡µ¼V+Y²µA yòyØÍOŽ£&{Æö`ûy^®mP8Áž{Ðg>å\¤–5\'šíÁ~ý„õ•—ŸŸŸÐáEx³ËSï×þެMwuÀÑȼkÄÞƦZçÔîe¬¨6‹©GBöÁH€ bЬ>¿c³3çòúC}‡&ÍI"Õª7òîžÒ‡dYŠ>y"™×ñͲÿ„'àØõí­Û‚ ‘EÐ[Cw¦…aŒ!K=‹›µÇE' YxcÄÛ3^2²ò_¡[£€y«¯‰ì‹Y}ä___É´ ý¦àî„n?¼8ûuz¯{}ËÄŽ‰@ÜM‘õX(½Ç7)Ûõ²´eKË׿ÕÇsÀš¤–Ù§H{÷ú)reZd¹„¼ï\7|Ϩ 7§YÌ{§M_Dæ/xW^ÂXÑMë—hï´Ëm3Ê <?* kTøø) ª¤xQìŠÅÛ¬G>D$˜·RäÞÒ룤ÖJÏ:Ùë瞥äpO`}Á2Ø#À` Çm ÖXŽ…ÙóúÄG¬¹ÕËMwU(¼+3@˕ɗø¬mY-ów F£„8o´?yA`D’ø¼âHi·žù4ñ¸âš,9W¼l3×0jGݽ–òûzÉüxÈ®c‘]†â1<ïz”þýï  ÍQ”£ø+ÛlB¢tp?o˜Ñ"»kK‡QÆr¦ßGRX×WsYXU¯ÿG\ eჭ>œ&>JÐ&«šk¢g}0I)‹äŒîâ>ËQĈkBáE?¶ó îu9¦‰0“ÆrÄ…îËá‘8=…œ½8z @ÏZ¨ŸEd(uÔH}±¿{ïÖþñè·¬j†Úâo#.ÕQoŠU¿›ëw¦M\7WçŸô”¥+ý¼ŽûŠs‡(¥H™ä÷ª’£9U`µœ^°ã»t»iW¸93Þ?[å6ÖÍä:9ÂÈ4MGk ÑAló8­ ¨mEb,OÀçXMãÊ·ð^Æ?pänÏ•Ó$¬ÅÔ‹tÃr{Ç P”jš»ïF•OÓ$Ü\æ¹9C¿'FÔ­íó”†çóù66ÊrÁzàù+L…·RŠ<ŸO> Â;gÞ¨' µW1ðBO“©OòÀõ\Ÿ?º-ë§Èa‹EÍ)™ÖÀðu®y¸F/Œgyí¦€qæöH¤­g9ñÖ…ëærøÙ«k½îRdžÆ£ŒëDùCQþySŠl§ÀTï–1¡•N,«Q!¢g€˜¦ Rùïeó<±Wxý{™>zØÞQ…hŸí+í¾ô”¦êUXŸó?ëë»;G;¶îµëŸÕ÷îîs‹7žµXztYô¢[ÜÎQz¶"^¶_·ç«‹që /2æÝM™éVìF‡Lž°³VÄ(.4¤»êle'Õ:¡«ë×üj—‘vÇŸµýœ2¢×¦(‚ ñCjÑcxêó”Æë""’_¯* õÆÀZ¤¬‚×Íóù¼0²q}Þq½Ã|P¡Øµ_ÛB1jÙ²,“h*¥È,G-¤V …ÀEéfÉ2Ñ1oŠñ›æýÈJŽÜ«÷leä|Àìïý>nÄYãäm>#˜@'ÜÜ"aÉ‹êÆ2±ï8§&¶EñS8^<-(‘G,üYî^œ¿åÆÕHj¦ÞŽ„†(M Ã4Ò'^pþÎkÈV†$£QAp´ÞgúÀËX€ß™÷á¾F „¼Ýy‚GF¢êERl´080Öæ®„ÏY ޱ>¾Åêh¦”’¤Í$«ù±øó4z ùð”|còzÀ;ä1rÎæþýý}8 ‚7ZýÌ‘€Ö˜úÙÙ`Øe”’'w°êÐÀ² l–y¦©ß·¿M™ð&ÔÊ58i˜Ž[¤èžOgú?뾂´ú…±\F©_ø»õÞš¦ÊÁèaàˆ*¢ìBæ b½Gdž'|Qwý³ÛKç­ž“> Ì}zHÿbâ-û¸T¬Zï¢ Ùs#[}Xá@›«Ï÷>ôŸå¥ü \B™"RËmÞñºj¨°°fLs–XÁ?Ÿ¤H|'¸¬×Æ;ŒCVöYɿݑ¸çèÑEÖˆCü+k"hÜäµbLº0- –§}}}5¸õ»vHï¬Xu+)ÆÉëM’*<Êä…æQwÀtÚ5ýÎÙ„rz}¤¡°ËÔÒ¨Q8Qëà²,õùÑ@¬›E¶ ÇåD‡N›%^7]|…™ôk¤üx÷ÞE#iÎ’%dXÑœŸ8½c¤.\m¯àf%ûMÛvÆgñ  mxe=-dÅŸñBxÐ «½\o«_9Š˜Ûâa?EVËsö¬~ dÏYGˆí À&ý²ƒ) ¼pD1»Ë]h½Wd˜s_ßmÀ—"¡^úÝz·ÛgÎÚó®E¸Fë~Tøð9gÓÚëí³–‡û†±øè 9Ã/?šº¾d³˜ð5©–ÇÀLÈ ÁNr]™[ùxÈŸ¤;#ö¼r¯üÞ#Ô¼HF|NHÜD-kƒÈÉJÙ‚ß•–¥È<§Ãçè4 k%Iòõ½)$e®'°Öè÷)M«õþ¶¸÷c¯ùú8yЀE¡€Óæ•”ÃC:kô¬sJQζ; 紥䈬' åeŇ–e‘PR5ßYã†il<¼«z{ó†EOÅO´Ì–ŸŒÂz΢Q«ï´ÜþVt>÷Ylhõ³êYëPJ¬8Z<Ës°€ØÏÿä£á,·î¨Àæsm¿ú?÷ÜÔ†Àw¸gYd"î3|ïÌ3ï윈Y =`úw4’ödisl¾67¦³r$c·kf‚£à7KojZ<ÔœŸH#â̓h ì¿£_}¸ÑS'$²iKgǼȭîá³t—VVË`‘g]ð€¼"-6†5+‚9+gŸ ú‘ÅëÈÖÅrsATT¢ÄÆ(ôrYï>KWRq¼CwXGüîåZ¼ÒWÚ_g몄ÉVùÖÝÓÖ½À¬§Z]+×”dYÚ(`¶Þ¡ûŠƒ¿,¬·•±IyŠ™@Âlî¬/ ×ÜF|çÙ¹ïY{Ê%â³¼ Åƒàʛ˟…›ÈÃÙqGý¯†–Ž ¯!+p¡DÁÎ>AVª%­§…ù³žÓï)¥ Y°Ö×7Þ=Ÿî‡]ÜÝÂ;]ÆÇSÑNœT “'"JÙèfÆSA”Ù!;;êj„Û÷¾Kg‚:<ÁÁrßXT ËÞÿ˜òZ^õ³þ.b$z§ƒF¨¥n¦ƒ}‰}_­£‘t:êô=k3ÆÂ£OckÎZ+F¯‘(=í'y×GÂÞ˜E›…„e1eVXHÑ{rÞ-ÃIZ×/Þ{è¿´{'|—Øj ´úœúùÍËž+½Ÿ=ªßK)òõõÕ<ÿ"‹(*ZžurdgÅÐZ_l=ıl"h‘W¬ݹc»õÝ£dµé¬‹Ù (ˆçñ4ë~gæ °x¥Í”=²Ö”zÓ\s£YøÛœä¬E±u¿²ÎÃ=+dÄ?õ‰É²ôzýÌÄ™.¼ÕwàFWU޾ö>ÑsÇ'ÀðZ°øÂ‚9M2å>Ò? îì_Ü3ÐxŰt{{Ê0+SzÝ:V÷.ºÅÜÓPðšuS`àY‚lÁÒNa͵žð…¡ouXg¢ÜíÆ ˜hî·§‡ÅAp8^Ã4 <áp‚¢–ΖÄ ¦”¤ä,%ç ®ŠRV+¤¿bBjX9qdÏ–æT1k=çFáíÿÑñbàùú ÷°…o‰\>¾íhåb¡ ]ÿE½”4V0‡Åè­´µí%K’£ûÓÎ*YXµ &¥åõ`LT¤pôÒMy° MR^¤=N­ïðí\(òxÌÛ†^a=Æ™%FÓq¿ÌQÊ^ô°uêÊ—ªÐì`ÕQaÐñà±Òï¿é‘:Ô“æšLÄ¿Eð€œsƒ£½Deͽ{§·ÅÂâœAxƒî‹¼",A÷XV:ð¯’Õ‡£F…Qº håWÓÎ@󺕺ÄÓ{i_êgÇ~†FÏÌÕvx×,\”^ÿTî©+Œw¨Ûvžd2G·æóÒÍóëû«–óüyÊ_ß5ÏFLïi"ªf‘9Íkp†Pà{lß­ˆöyzl¸ŸEæùq°$ì´8Sÿï‘§ y÷ž«oÌ£+–ò(°€•‹h¾3Ó‹K޼ƒPøcaÆÊ9r–¦'¼6nZC)U}åÛ‰ú¿Ç;VEeµŽy5ŽQTbYòÖl û¡õWçŠ@fY©ZÌZnÓædá™10Í¢;ªOñv¯öÜh…×v:Ù/W†*|lÉÒºZö¿¾¾ªRv–œ—û{4gÀè\Æcÿ !FÄÆlrÿX4âM:ÓO· €žÇŠCb@3 p–öÕ;¢É‹ þo¢w¢Dßöȹ‹¬ãûóós_sޤš&‘×KuìД”æj™ÓÏ)Ùg1nOˆ&Ÿçd®a×MÓ\ƒŠ¼¿"é m Ô¸©†s÷Œ€xçä q*éæáXí´01M^¶[÷€1¨+Dìi­­@)ý‹§ñFV¶ˆàî^–n"’ì9k¤í±kù*ÚDüšxlO²kÑ#ï^_/RØú{Ìù—¡Ý­ xÌUê½sO8½j†´¶,¯æËRªáâN|ø,Yç—µ¾¤é¦9S/HÎyKƒu.5Zι)#RÞÐúêÍKÞS"XÃ]™4zí‹<‰Ønïyl›Ê.zä¥ÎIÌ"ÀüÅ"ôÈYý–’`#tIô¤Ì( þÎØþ];¥·ÙòïÑ Ü)zåõÄo/˜Š©.NNý€mD L–û9².`[¸n§›Æ ÎŤî4ŒŽ0V\‡ˆz‘nxOe’ÁñOŸ k>Dë]!v¹ ïn+·ÑjkÏ%hy¯ÌÑq¿‹z@U-Ø•ü.õ”R>ÞÕs]2y ·6†t•’¤ýœe¡¤þ´gFû§YÏ‚Ù.ˬž',·”Ué[û­¸rÂ걊e«Ë}ñ©40؆ѺV§#µæußa-ó6ÐõúçV­#ôrÿtS¡œì/\”&PnÚ¨©<SûÈbÒ^Û{›‰eU¶æ>›WdíÀúF‚숕æ$e)æßæ]zíMÞÞ[ž0†‚³¥…óür°aÜWLo^YßC¥m픊OÍØGiO¸Žó±Ê ˆ˜tZsO…möê‹î&­OO ð\NÜžh]Zé1ôù¨l«¾»ã´PÈ~´žQª'kŽæÿ»ds!ÔÆÂ}’FŽ,w´—B̔؈ïó`V½>ï)Õ%ûVFžÿ¨ŒñýŒû³êê)—ï(ÀWž À^J¼†β,2?Ú´^Î7LÀiôy½Ïº~YÅÚþwI7Õ8®XvFNÏ,}F îEZ¡ë(rÍë»9öó™>ŽB{åõ¢ÇEüô.V½£”ÃíYYš¿µ ô¯÷úæðÌC0…3ÉM>IËõÏ‚CÎy=‰ÂPtz§EŒÏŒ=KKYVìht ¸•Ï$9äk0êÛ‹ÀEü3+$ÚĦJŽÉóù”¿¾þ’çò<Œ—aÀÎ,A¶,¸ƒµ‰¹›¬Áñ< ø{tN4—cZóŸq€žY¿ÿ$EüÑÃÇ~ÚÛÄý wž 7r݃݌Îñ»ú g¹ôŒ"|Ž·åÅz>Ÿˆ Î""Œ ¼{loIâ×ÍÎS°‚ñ<ºÑ7Î.ºC#ˆ©xI쪰è.s}3ØÓòþîàQb—+n˲È×××!š™=÷18äbëbÄÄ=«‰ÖS­urÏmi£Ö›}Æ jz§ÿ-‡m±æîíó)om#¥%I’,~`F)E¤5íÈý·öµB?Žko5ÌG…×DßtŸT„ àWk%Y™7«+­‘U!eKùŽÑyHίƒU`{ÛfXdš§ÊD’¤$ Ѝmô–K½FçnŸ3 О;/Ú칺­Ø²^Kd/Þ‡õÇTÊ;F•|ÏjƒXCM+cѾ®w<÷žiøà€{Hµ$­IR±Ïëñ¹þ­“åÂ%Ž„Â?6õö€l-®ŸuQ{À`ý ;JDë Z £É‹æYî´ÑNþ zgóæö]!<ÊÇr)‰±G,ô¡€„íy€ör°¦9n^íK1èá3<Ë­2 {#8Í«Ñän?;Šºª>…»4ï12g€zî}íƵL\7³=hdíièJ<¾¼9yV.o}EÖÆÐaY¨ØrÿqEªÀªÚC8Mkd<MX:ø¯iž×äêf®7çÏb‹­~Bx Þǧ§ôpÂ\/ìO¾†×{Þ­ˆ¯z,û·†‘0ô'-±ìòøŸïÓK^ÏÖ•²«“Mfƒz¿'¸>@ ¤íû4MõZ­ËæÂžRZ‰;±OGøë;Çù¶³€±bþ¯°¬7ü,k|èÁ2-Ÿ;vÖÕMÛghÅÕÏ”=ŠU°híÛ$Ö<:«õœ™Œ½¨BËÚÊ9øG2!øZ?oÍŒœ©;ïø ’G–’ÿ\!ϪÇíôð·ØG8#!ÐWÊ—­m›ýùj;{L«nVJ¶ˆ[ÑöV»¹ß¢ñˆÊ¸j<øèYÀû‚·£½Úü‡”bã¼r-­ÒëÐV§ÓMî/=+‘5©­vºonêœdžËfœ‰$¢ñˆî©ï,­#C×Q ·Æ±›V—µøÜ㋜~õ±ÅÜ#“ytÚ€º¢î°¶zcâƒÕOw“µyôÚ#¿iYVŸ2úÂ…õ¤‡7Bz-Yòòªîê5mP‹B÷°?¶«{Xù€º„« ˆxÀŽ%Ïã#ÁRž°æAlx¹ÎëyÂ!*d•sUé7ƒ?<¼(žÔ´ GÚŽò¾¡!¸îH‘rìÏ$ž%¾”öÄ‹ˆ—±Båʶ’ž{å3õ= qŸà’H©4'}ð{QxFü2 Ævp­‹2Õ'øä[ §)°4,Äu`0kzïéô”RŽ ¡õwËÚ„ÕxÐ=ý1Ò¾™êç;Æq7£aëy©¬ÈO}·ŽÅæë¥ƒÁ1Ňx`õ¨õ3,J/ IÎtì±¾WéSGFî/+5†HÛç–`Õ¨«ëuÈÈé`F‚ ôºÈ~\·Oë¶ Æ ` ËÆÿÚùãEþ±WÄ"/¢·þ•}êYÁ£VhÏÚ]ñÆx[÷÷RÑôxÒ<Ï!·'ˆGZËþNÍ ¸¯ÿGÈ4ò²Ÿÿì•ûUÌiPœ×®Q+=FÕâ{Ï/1ªw®y>FMˆ….à è¢×ÿVc?XûGý¢UÐz·›€õÕ|´|?É]®ÿ[ñ³çfùúú ­yÑ;°SôÚU!ètçÑ;x "3ý;ôNê—!áXÄÜFÞ9‚¹|¬mÑæ‰÷`Y<¡8š~äÍs_ýEêal¹oTpªÊü¦BŒ'XÖ2‚ß”,¡qH–Pm–* ñ9äuÎ-y=æ ¢e~~Däxœe”¸µiSýœÖ”3* çöèJ ÿjaÀ8Zi#Ç×Ðêwv~[Áw ÝÙ-~ÉÜ7ðÞãÚlÄbú,¢îþ£±bªI§ãG~縵²FO5´€Âýwxö„ ØLúŒ—6[ň¢rVð`¼sm'Ãèµ/é‘¡ôÛ§Ýî^ªbPr`.9L™F>Q ï¶ÖóâïÃiKîüI|gú׿þU,¦hYEzø‰yžåçg;w»HF6^ _f,ò[BRä:ú ÌÎm¶êßÐ k© í\Þ™½²mìõqO (I’×ò’ǼÇ(TeoyÉ$Óš»5‘$òõø’çëy(óãâ÷O—zëà¡ý  ÈnõÑŧ‘¼ÊlQ¨Ð”#ØÙ|+·©lú4žê,L|{n²–Ë¿­š°gÁ‹,/õwËälʼÏÅ}}E8à40#áò#„½œ‚^ÙÅþy¿w½¼+FíÚ1tH‘»B¯aF÷[‚SÃzUëµ"ÃÑ:†ÔK¬÷XB¶*²õ‚7ÃÞÙ´ž`†®µžÛÇòˆô‚«ðå§Í.. ´ì«ýþ]˜Ÿ¦#Ô@ûES¬ôòÍŽÒ(¾ÖúÍ´®ìw ŒeYV ˜q]dµŽ•ßR-/[ióçìknÿ™½(JÑyÚÞš:Ó·á>çþö|>«\‚k=G5z}³`/ÏEÒ´çD#CK¬ ™žüNº,öð:,q"V¦dEó2^€È# [ɲ(Ý%Z¸€ž`…í¨“rŽR¤E¼eýǶ!aÆ ¼6r¤áUzû(8ë~@‹ÈÁµkå âÍE7-+ŠÈb"ŒY;t7ÐÒ{ÿm.®Âšl£M*Ëß§ E»’8b˜Mæ#x¿´ã½qŒúÒ³nô¢Sñ^|¯ç¾#i\zïÅwãXþ&yîÚ^]®`‘>™üº÷N‘¥”ó‘ÉÚfKhæÈgÄþi»EÚMˆ'}Oc¹£hx¯ï"¨‹%Ds}<rtÝZsÖ\Æ´VЯH@å6rð€5×QÒsa$J\nâ×ïPÁÎð„«'DDG&º¼Ÿ.õ =w¦‡±ç¿gs“ßîŸÒõ8§¤Ç‰ˆÈkY䡊äŠs8¹p{2‰•Y¡øt®5N:¥ÛAcŹQÈ85bA2‚çòŠ;6ÐXêµɺf1ê;iÔÝk¹z,mŇë;ÐRcßÄã×ô 1üž%ËœŽóà®3„{A ÞуÜw§Ýêd[ß—åù´1€* Ä"eZï‚Í{mú€®ei­A«eøeZ!¶Z¹ü½èöÑç÷{5ßW>œøïí“'õ„>ü®Ä¼,²#ñÆny`Fy2—¥|%:ï{xõ]ëçöt|Îæ!wá=:3· TÀ¡?{ï  îß;Èè˜ÇYï´¼H= `Ü¿½3Cbê)¾Õà$Òœ¢îXuÍbûF¬yw¦Â²è è?ÿùO¹3£~DöÂó†-š¿¿×ŠüüÔÏJõX²œ¥Õ…qƒ‘Ú4žûí¨à+.çœs×5j¹cŠ”žõ©h·,®V9¸UdÏuvSàþâ³Á( ™žä ÆmÆØ«?îÎøc‰"=¹ÏPY°ÊWë×ßJ0®’.cŸ±2ÉV>}ç‘)ï9;½Ï½³@=×õ*$–Š…Š„0¬km«ãÔß¼±òȯ޳Ümø~ïYá-OŽ×ÖyÙ®ˆZç#‘1Šÿ£_—»^T¨õ©zã|Àyå>¹ÉØÛœz‰vàk†®eè‡îª½uýDÀ;\ÀQÄÝUzGè­‡ È&kÞ¨G ºx¬6¼r–Ç4­%ˆ5 "ÚØª²_Ÿ\F¿ÞgF³Î•H»?• úú\ z—E‘«ÆFé7ݾQúƒµ]Õ+K¶ò¢]¡Y1 ûÑŒúÛ¢®"6#+:Zè×Ì@tëŒU¨Gã|F÷ Ïs‚8l$Ï¥ÌxAìo> À“r`ÖE•ÓVÍN,¾sÇü»;ÝÊÙw[Öb/gdÞ]ÊJŸÖçÝëU6¼ï9˜?t½§5N±`uWF}‚[¬Øhô»EkZ¼Ÿ&2^ÿznpËSÚ{æº5$r½"6Ìt;"R¥gžàV0ˆ~¾ÜVùÒ{Ƨz›§Ew/¾E·çÞâ7K+×»ø­¾º:VˆMêá׺#?×Èô¹Q<ØÊÁxJËBãE‚+Ž-j“ïl.£ï‹˜Vô»×îµëЊ˜C+À¨‹òLÛ¼öz ÎÑ*PÉžŒúp’1Ð çL¯®xÕ¶ÅÏ?-%É´¦:VV~'*Ýž·ÉïµÃ£3ˆåéoÜ$*»9ãæýmï’ÕZËR|¥¬«í¶æ˜@¯Ý®4èsc'ØxsúlµŸ,\·þf­ ë}˜6Éó‚xï=þtC~–>’P¥dtñéul çöÓÏÖy±£n-Jñš¿ÌIêw[ï ¯/=¼þ†ÄQu"Çt JÞYÀ^zÊ^·\Úl¥Ñ߬:Ï îÕûñ˜äõê„í‹4)Z¦iK"ºCOiK1²¾ÿçç9$˜]¡39£dñØOMŸRÛÔr¶Wë~ÃczåG9»Dz®R$ÄØÝó2ÜÎU˜Ëë ~ ÊÚ{¼„¿VýF4¬þ‰¢eù]^ð^cŒ/òøè9íS¬ »×-Ë Ó–BÊãŠß{0ï·W°ñ$KXQ˜zkß³|^Å–ŽîU ‰ö9´Úy¼…£µ=…àŠà—s–$© «ò¼^@‡ŽeÑöôA¬NKÁúÇXG-I^F¯Y&{ W„¸?¨ÈRu'DzF€Ñ¨ïÎ`½°ô«tÆba _Z4Ïß•¾„Su(yy'¯¼ƒËôδF꥜¸“> Ì.š(*ßK/1EáP<\æH_"¯ÀzFõÅziJ)í'†XL…VZÙ=Ôcج€xŠcdÙ= +÷#Ö7¥$ÇCžÏgÓGžW~ìƒ(Ò­wÚ_ ^\Z!ÑŠØ]ƒ/‹Xù£Ô!\?Vô§ÉSpëµ­½•ÒŒYE&Y!7ï°—e± VÝ‘zÑéJ¥¼$¥Gó}mþ£~n볪Xf§$É)ËHÆ/Øù ¬–uŸ ˆ¡×ß­ýgmÏç`3u{šðñ Ä(¡µÆÒÔ3°©x¡IÅ»ü{XOšî™<ޝ!3Ʊ@æéEè±pÎq¾ÇúŽ”RÚ3ßOS{^*o„›¿ÌK”9O“iáŠE®öö´6Úêo%‡év:\¾¿ Øô á2²4Y4ÂØP äg#aµ— çaÏ•U}Íò/kä°ò,~Ïn‰ž%çå pã{¼6s}¼gG­×HÑ=‘¥;š3gæR´ÖplyÜ-¥bT Ž¢0õ–Âù§]¾L([tÖRtœ‚¶rx¬ƒ•| ³0ùнF%¨­÷úΉæè±=ˆ)ädî=êZÚ¡r¾”q}–²e±ˆŒ˜U 7oÏòx²Ÿ‚Ä €iî£m„]Ž äS¬vÍó\ëÁV‹Ñ¹hEErŸñ:ÔvZ×­:{V½¨Ž½¨ó³ýû§)R\-®ðìÿžõÇ1¶Ö³zÒ; ûXâ{sŒï‡‹Yr³†ÐbdfÍÏÒót)y©ÌÎòëa­ï– Xä˜í;ŠJÃûÿ{i«»âS­Vªö✼ûz4j¹Eá #û¬HÙ;ófiyÓ½óÞ¢û”k(r©«€¥VP:»!]ÉYˆ¤s@]^@HF,`ü^¯x j„[dª›Ö<Ïò|> °¨õëïh‰´¾ëY¡•-ÝéíÙ¸{„áøýŠpÂ|#R(=졇µÃ@£)©<þãEDr;¸?0‚šOÑù€óåNŠÖÚóþeYÏ#¨‚ ðwOpó¬è–õú,¯½7 fcåÉZƒžÂuµŸ±O­ëïÐí .(t+Ú± Ь4,Ý,Q€üfÊ"/$Ûô‰wD÷r%‹Ñ³°®› b^"ˈÉjFCiý¼ˆp¯ß—Vg=ð[dÜØ£ýõê±æöÅ"{xÈÙMè> ‡ Ô~Ѿ¿Ö>˜ù“G¹½‡³».:ô~65ÇÁáœâöa’g¯Ÿ-ºÂ7F#­²æÁ›Ÿ—D];†=n•w‹Ècšjª' Žò|´ròg=1*ÂØr&l?ò0 x¿^dËQìX ÑoZ £À¬O®/ Áëk¥GÊóòj?ö„ÞG€­‘ZÇHÔïuòêáÍ«¨?1¨í)Z†¿±ôÌÂ…2bî@,Ý*ênœ¦$Ëb»{£Ÿ&k"ŒÖÁ³Ày8„(ýBiyç\âüLVwÔ>ÛÅlßH¿öˆ´_PQˆ„Toó¹ÁÇט9cÄ·ñ¹[–¥}/ÀBüe‘Äø*µBÍóš¤]-1Ò¦xÀºZVû«…¨  }·,ËŽÇ=Á±°­Í‹×ô³Ý‰"’â{Õ*ÊB­5nh¹ç>Ã6£"ÜÛи­Øç;ïÙyæú[uË“iuÙq·ú~ÄâzDî`‹Xg‡ãµÃ|*í>á­s=* ÌÂkí„ÙŒóc=”ÀïôCÿŠr·6DQD÷j}u ^‹Ìõ@Kø‹¬º#ÂæÕ¾Žd™(®c˽¥˜¡Òè˜q=þQQÀHž¦ˆ L¯ýüüÈ7²âø’LÓ,ë‘KËöY;`ÿ>AŠ—•‰¥ö‚‰#ý>M=ÇZTx¼§íªÆ‚B¹’ˆ¿µ$áY“®©G¦p\¤¾kš&y-/y|íÁE“Lòʯú9Kn®‰$™$I¶8Q –½ÖçÍâ7ÍëÙ´sM)PdžüUË"ËÁRHÇíÉ´+Б^´¹%üXLK×3Ž;º;{ ™5Z}ÆJ‘ñõõU#QµM:/¸¿- ‘Z’–e‘×ó%Sš¤l#Ç)S,Œ‘Z„,ÆÎ §bå´Ü^*†¿”Ž`Y¦Ï`)q,ÞuUޏp½±Â÷DJó—¨.#Ê/ ê">ìƒâw#›·åfW>d}?£èQ¯}•Ÿå¾ë×{w$`“FEûÞÚ #WN¤h EP²ïïG—É©°ŒÕo» ªøþ¶þÝa€z`{NÑŽñqñú¬—7 T¶Ü(sc m˜ƒæpÛzå]\þøÜ>¾#X¿¾¾4ø>²Ê·úÐk·ŽµéûOÆ–[kÒ¤y}áõ™G¿“§4ØV.¯ìQá%òœ] Ìé­½Ñ~ô‚°,KX³ä€‘Ó¨˜îpñ§ÿüç?ÅYz’½,‹|˲,Íg¬,Z99â4M‡ u£(sõ¢Ã˜0}K’´Å[”ƒûè]Óox Íæ~ccðŽZ®çšá«¶P(LÉ>Åš÷–éž­}V_°ëxo¯¦£- uCYSq¬õ>¦–ç5ê|µ6G{A¯oïÙL&ùúŠO/èQOˆ¬Åø|cȹ˼£@¢c£ï캒ÖJÉàl¬è\Ä›ZI¦±½àÐ#l#ò¶Š-R×ES–¢ìë×¥VÁRDl F’s“³”=M¿!"®pÖP kÇx&Tò-ÞÎQïÞ|Òþâ±Àº‹l.j?Kiñ-}õ\ñ£å\¥¦ïJ‘«[×9«Ñlï--ÿç½­ëè°ø¦—‘`Ôí;"|¶ïUü§®­Ç‹êûÛ5¹,xD¤ÈëµRÚ{®*Qi:ð\lc„£È›rÞéGk¹ëž|ÛYÀZ0 }<(lõ4:/Ê(¢ÑHÖDæc1w™E”ûë ñâ«íèKœêN)5nTvcˆˆÈtÞexõóp|Q ¶×ŠJÛ«n»d<Êk®[øOÒh¿Gä¥=ˆÎŒFL^¯¬òÆÏk32å&°)窢L²žþð˜gyåEV¨ÊnCë% É «ïüšçgæàK#wO -2°C–p{gy<šË²ÚäQ/O!—mÁdZWàˆµpU´ í|dø‘¾ïS.smÞonrÆå`dÔ1J Ì©ë;¥Ô$÷¯¥:8@þô\e"«`ø˜f)iÿÎë“…džÃ¹ž”$/íqs¼DûLéÎ@SÄTïæióõ(£²Ü(ýõWeœêàÁ‰°%Ÿ¤‘½©æÛ»Û«lØÎY6¡o–׫õ²àügê¹ó›9½¤ÝBš•-·Xto?7{&·gÇsv$+ú±Î£<Ä£^âi$¿VzwmzЏwÌÜ?…¬ú± ÛÃKŸ¡( ¯·{´Öß5‰8ÞŽ«¼éîˆëÚMö™Jµ?Šì‘ä”±1¹y'40¶žþ!b„ù­„ Ãðo—´Ïç¹~NÿýwñNX=y!ZDž¹Ò“Põyµž‰º‹ÎL²H#¶ðU=@¶~ÿ :û´ÂFxGv…yçªým{}»8#7¢ˆ=¿dîv§iÏha*=õNÐxõ¨ïÒºýÆéµ^Û(xLx‰9Ç#׌bßÖûææZJsó;Aé¿i}´ü1H–pSﯕ\³¨`ï¹ðš¾×ÂÆ!¶×ÃWq´²Gg\a&nn0 ·)?¥šÿjûá…kä,®[ÅéAj´Žàu%3u‹ÈÑ9ÀÚÊb[ü>-Þíªí¹ä‹¼~ó 8XÀ%ö`‰Àü…ª”rN’‡5lÖÕ4I&AOÇùºŠqlpoAë¡þnÁœø³õÝmÚ,€+{ï͈ƒ¼,Èüòê÷7q²Þ!¥I^¯g}Ï÷÷_²,¯ B^5àW˜êgÐÅ–X쑵ñ~’ö‰ ÿµ”_+î‘—Ão¤N8ùÕõóÊ/“Ñèdż€Ó4ζ}-/yÌm=Ü0àŽ»Rï¨=V¤!ŽES“ão ¸Ñ1vÞ¹Ÿ¦+¸Ñ^ÔÝÅnÍ"˜§.÷;Gok„÷þ9‰b–Zë×zmJ‚ç™æ,òÊ[ºmƒI"Mj¦=©=¹C-x^•^¬ñ°æ,^Ç1ágÖÏ;KIÓã  Þ»”ÐúÇ›~Vž¾‚ê÷ÏóüeÑcG¡„ýͤçÀV8à†9V✥£¢Ú†QeÙL ÇàC'½ŒgpëÉëmƒ­Œò­3ʤgeçyÖ›WxúŽÕVŒj¿3åÉYÃï–2¦Â+w^ð\¤Ü—ÝéÖÿˆ Øò;kÞ?ޯĬ#›RÄî°Æô€È£“™OeFy/ó“i`¢¾ã  ç†[±UöF„ïg¼Å¼"ìѲRό㒬èÂÝ¥­ßwWJrÅ?BB1³Hˆ-‰"øŸÏgèêSºÊ|°g–e‘ÙHÄœRÉÙõôNs’l¸.‹ìÍ¡ð¾DBöãñM£¡Bç$“ÈÔ&¬ÆT"r8ëÓ lcÅ•«eÔ¤›… %Yr>:ÎÊžÕ RÀîÅ{õO‰ÖAä¶6ÇÖiC$x0˜gáÞ”7EaƒÂ'”¯wù‚% x¿öKXW|<Ç{ÞŠÕ¹{·,žÂu·ÝÈ:v†Îî¹h¹·?œëlÑ´0³h ´êï­å»×5R#rðGÔ‰#fr-]˜£‚Ð…hMh/õÃþ YQI=òî‹mK Ö ÎfiËŠ¦uµ€mÍ!Ïfa_ô]xͳöqÛ•Ð2ªG@íÖb¡)åzŽ«å¶èEùz Z-PúÓÓ7²qJ.’¦ÔXa¯FX8=XÈb¼%ãú<A³®6‰,J78B.ßË("’¦m.Jz›±yÛêŠ-Išãé"¬)[6¸Ü3üÓ‹úEË:Ëx/«<\÷–ÛÝ› ïë~}Šz¼úŒ‘Á‚ ÄڽƑ~*'/ ÒHðH½{øã¨Ÿµ®V '[èq/dœ+Zñq¿Ð“wÖ2÷Ówô³2^ý]fTöÑýóÊ9õÔÿ¾mŒBþG˜ –E¯­f™Eg³£ ññSÞÄìf{aîÝmYâM ²ü¸µ -kžîY­úé_·÷r%1ELÝÆŸˆÕÅÎ\çæN/‚þ¸HÛS@ÔU©Ÿo׃釮yMx®.ý«J”—ª×gﮇ¤,•ˆúÙh#l¨'ˆâwHÁÍËe%ÌJ=aÑHê ®¿åÖeò°g^ä.¯wLk¢ø#ïx7ß(ýŸDVÝ"ËߨÐE´NÓ$’’ÌPžT$AJ§C9Á;¯ãó#‚î'„[}ãò¬zsUt¼zNë}‰,œb,%YJ9ðK¾ ~ZyFÏk£|¯Ÿ-Ó'bÖûöÔû€iÙûâ?‹{3©•ýDDæãïM^oaœ›ÐIrÞ1“~;J“{{Ôms·<ª?¦và3‚£„¸AüÝzOéõ»EÖââHæ¿ä»®-%zotŠ„Ö ;›¬ö,EX+}'*hXk®FšBÌÇ`Ôúg͉‘uciÀÞø ÕŠÇ›ÛàÍMÄšz¸'ŠO)­yÑZëôw#¼‰4çÖöÜl^yÜÇÞ )j)ß‘÷hÕ8Ž•Ç"×µ^ÃõÉʦ×ßÞ˜Ž\C×pS6%Dî‘ÕŸ@“[.ÆîÙÖÉ3èxp‘¨¾ø ÷":˜Ûé[øXSvkkßx.n+ãÀÙ:y}û®{ø6  N<ÜÀ0ÂES3[,ÏÓÊØ”ª J]sXŸ^g[ß43ÿ¤HÞñM80)’‡Å;0òþjeeÚÓ²„1L\wë·ÈUëaXð„†¨/,Ë —ËnfžåsÞ ˆ"£¨Ë?Mg„3ÖÚ'Ã÷(ÕÓ&Ô¥Š®¡yn¾‹Ä+°±P ’מIZ¡*oëcuãnÏv?ýlQ/âÛ#ÆE›¯¥¼Ú9à!a«o–#0ôp]y-Z›)CN°|/ð G®®×ǶˆÈ/$w…~“<(+÷!ÜÀ"oŒr^ö(ÉzÎ[m6‚ž‘ :S–"KÙ¢Õar›¢S?ÞÃhÙC}ó‰ Ö†£·È4ÏÍ9°¸°K)òx|IJv®,ݤ­Üs[izçÝÍúò¬*ª!} êcÒŽ”e–G€5×ÙcÞWœ^D¢)Ã{¬ ëú ã-"ÁÅŠ¨d²êÂ}ü)`ï(E.~¥nï,¸ïnc¦rëh¨ã‘&¦ÆYVÄ~Ž\zèV²0«]õrü!N¯§„ u¿[qnîžÅγ€{‘–^¿{©y¢ÏwÐo fgŽq#œ—q›Î¾q0[ʘÎàG)R\zJÙkymF¡í÷ÜZˆSJ’¦í´I­YÅ 8?æwMïÌK–ižö€¥»½¬ ý¬dù¡=²´7fZÈ4tàjfjZäxãïzn)}šz4áÓ«;ÎQ/:5ªÛú<ÆN¸ÊõÅpwî[ÓWk¬b8o`–ëë1aÇŽhíWú(vTçÝY‹¿ç®(¾?E#@løòð-w+:–ۙǷ”"óãÑXý$¨ƒBv æ6ŽKnÞ¹çÌ“ÊÌ©!pÓÝ6’·„ÓóT?3/°Ö£~Æ>ïaù9Ïê¥üÖª ÿŽd­Ÿ(Øë6,^°$Ãý­ìƒ»qweª8üp'âc{¿yÖ-VJ]ØÃ›í¶æ½í+"WȳСˇN´ò Ö…ËâþFŒ!×í~ù±40ø£~Eö³?±ázŸ |¬ñZ˜>/jíÊÄø„€ˆÌÒñ¾CWÚˆîõ¶–Õtßš+èúÉmX¤™¾×³TOD‰5Ï;Z?~?>35¹áøý– »IG"÷ bSÑÅl¥oy·|‘û-k^J„QŠ¢Ñ”,8È']©=Ü"G±âfÀÊ•(=ùùù¹E÷k}¢6yÏö~S¶Éì¹Y½ ^kjõc˜ˆgõÔ{£rÅ+Ÿõ¢<ëxO³)EF?«Ž×Ev7ß»t·7v]®ö»wÂ̧iä}ÑÁ¬0é\´0uü}}µ5N{NP¯Î£Ê’¾“eülEk¶ n/·{ÔÝaÄ{ýmöÁ; ÇÔz‘?ÈÌ”¢¤lE3a™õn½öÛbõ»Wß«ôn˜¶Ïv‹ß‰xwŒ];8Á)5j; PzÏ î¶®í¦ÂîÚÈ•í 4 ¢„ÊJä^Šû¸?/{'ìÍ †É9³9fˆ÷©”Eðd>¥C‘x;ÃÒÔP¶›Þs5s„ìÝ„› |`^ïï•Åd 5h¡öð¾ý1ˆ£vÛ{W%î 8ùhäú=ƒG¼0ø}40»DXc—‹€ûgÛ~ªZÌ W骲4úÞÆâˆÀ{øý yBõÞß +5RÚ,œ3?‹×Ïâù,løÝtIŒ*ƒ‘ hY‰°cz/2h¼§l "ýèÞÑüAwç²¼s஺¯¨aãFÊB-žŸç6bRo«=½ºÙÄéôÇ‚rRš$ç—|ËóùtëU­å/]7}Ó‹¾#õFÚŠLj[w\Þ8êèÎõà¥@:…k}Žèêú±ú’S¿XÇÁégï¼`ÆìY.9ÎYW]Å_¨ÀÔ¯½ñ‹Ü£ãbÕ}4 —cáÿð»×(¼±+x~é¼3Ârû¬ºE¼ð!0RzøÚ•5j­›;S„ˆø,gJi=ÍÁ®gÍ.äJµú"¥´YeÍãkðçý-³û•öàÉ%ø•_Ë‚nÐDÊX37…é_ÿúWa7†68ÊA- tëzf_¬¼–‡Q *4"ã´•vì(xô<àèsŸ×>Cg,S(Zǘ?4u§´& NSk@+ Žþæ’Œ0°wSüDxW´4#YíÕ¹t)ÂËkx¶œ“YU­1=c½­ï¥ÍÒô½Û™²Ößú¬;´íYõˆQ¬Š{eϧ‘QÒê/‹<7çYw²gíŠL¼à»+YJó&jä7žŒ-ÆM“N¯,W??ó !0⠣¡W†gÝE ´××½ëüžèš7—z}ȸµÚ΃žÜ£_§é!9¿ä2ç©Ö!ç(Ÿ³˜kZw…î`Ô3¾Ü,uÐç”Ѐæ)—nÝ7²0—Z'üžþþûïr–±F ‡õë3___õd,(53N­'ìã¿C^ÊŽž´îõßeƒ‘,õlzÄ›Cï9ˈ‘>v£&9[|/ ˜Ëév!Í©OC<¼Óݤx®Q¹ø|>·“ÁW1'‰HÙ($KY|ë €ž ?¿‹5´®c¿pNFÅ¿1ŽooƒÖ}Ëf0¥Š1Òæp„ò5®Â_+¶²…ÈZ‡^4h´YøÁeÇ *®OÏM†Š`¢õ)Ѻ7Á8"5S?úEÆŒ ï•ÖäŽòF¬¾ï*‰^:𑬠V ¨HPºbѶlÆü˜Õç‡u…÷”â*»‘f½‡óªjpÜ××—<ŸÏÆ#ª÷ßmÙ­õûDˆ’MÆ82Ƙ¡à¹/•éñQc£Ë»da¼ßÞ¥ž•ójj|Þ²ðDV¼{m ^šMˆÜc)¥jƒi@èV»z;MnâêwðP#Tû|)Ã8§¼dYN$"-×ryŽ`rš±+k4¬‰Jܨ ïY £Ìøž×Á îñÝ*Ìt!dË)}*DêßúXQˆ±¬§^ÿ[Þ©ÅŽ/hî2ü«VRÌy¶zú¶ñÛ\¸u,ÀM‹ó¡7ü˜Ë±ß”×Gub±ÕÞ{Uøú4̨—yÀÃPŽf˜x‡,k/Ž»©hµÅS$°œ¨¯G„@Ëtµ,¯ØÑm[6Hdi0µõeÒàû¢zß1ÆÕŠÞ¤‘Yd>2VtÏ)¡«Œ±zÈ4q¢"Žïûû[~~~ê€YŒäù|V3+Ÿ21JW\¾£’ö§™@TÞØÏZL"aÕsóc‚hÏ]Œe»x'ÀI„€k§=I•‡e‘4Ïõ¯7&£ão¹e-<#[h˜Ú9=ŒbSYÊ"’Ç¢¼¬±¼ÒvD<+ÌqñZÁ6L=ʲø8 µø~Ä,z&¢à5ýŸ+Í©9ù ¼ÊSÁ/sÓY¸X˪ØQ¬_)ÔuWÆUMµ 7+òvÜ'<ï ¾go¨Ôg*tNÓT…WÅ×gJ;¤z/YxHÖ+GeT#ç-¸iÙ‚›ô{ï,o¯ÿ®ÒA qx)­µH…„eYdž¦šŒœ­¤Ø÷ÑÚ©§è{÷¯mØéu!0²5ì}ò²îÇ:V½G›‡×|·_Ÿ£K:¥ö¨Æ¶m:v>žÑÂG[i³î¦Û-€V¤¦e5bF6ϳ<ŸÏƒ+]‚Ö{ø>üiÄíú®PwÇóg\VÿG}ðáØª‡Ö³^]š{NÖ­ÍV ˆYÖÀ®W/ûºÈxN²?¤LÆÇÍDÚþ?é|ÒžËmmïQ@°( u ­u°Ë-¥µü!SµÞeÕÅS&xPeõñxÔÏ)¥•ío®ãÇã!ÏçqSRARûl{sÓ—øn~ÖŽ`M’³*ásýìQ{¼¦ÃÏ›§%·ÂÅ<Íò\ÖczÈ+¿äëñÕ$Ë­åK[&{0Ïb=•‰m0±nš|‡g=fº3a?è„*PïHÃO¹GÛ­k$½:b µ»­™e1ð½–—<æ‡ù×Äky,ëH4Åúþãv- 2SGôx<$—,yÙ²]—Õ4Œ¸èê„e׈%a^tXö§±]BIÅ>Tàm:+ަX±ž±±\–k Ýó–õ Ýõ9Cºµ2ƒVѨƿ{‹ªw0¼¸rrlç´[ù0ðIûé·õäå`Ãk8oF\·8Ç´¼³uÁB!ÞÏÃ+6íZ²Hj…~ÜlÕjŹ Û q?;W£1³†…¥òÚi·—…dT¨sý^Jn–ßèขmŒÆãl$±µ¦ÑRbe%@¡¢‡UÖòBÄIªÖªé|€ÚÚ5tÒöc·<¬½öÝM‘€B¸H‹³,¹Hš[K$FÎîìVØS+)yëÓü!°îq¤D”\š‘8G–¼{ÈÊ–*­È–Zj‚cGUVJÛóºÆÁi2×x£¤¤]Ùº³n·²‹V- qýmJ«ÅÄ‹Œy74¢?‘FÆ#K(Ûž%~—wÞ¨ˆBI/—]4þ«Ñ`I3›æI¤¼¯¥Gê'+-傿Îý Mœ¾‹tž[®®£ô¿ƒzÁS¸-…ïëá`=ëúYÙ-¶k]ök9/òxÌ’ó1Õ4‰¼^»ÅmÝÜR#艬÷T…1¤8×÷v·A&Üo«ÐØnPÝ1,þŒULOOÍ‚ž÷NT¦˜— l¥Fâ¶z¿Eõb·¥UŽ'øõÂObWðüáW"vì ]]»( Y¿¹}µ¹Ü¹ÿ“´Pš7Ö´ÇÜžU¯†–«|ÉSø”?¨Vç²UWfÏ(=£®ê]Îù®è-.±[X/ÿTËwgî¢;Ê¿To eÏQ6Bãæ@¾×rëFi|7Uܼ9Guîõe}ÿ6W$èDu3¡k¬×ß…ýý)Ë„EFûÕŽ{Œ†sàE„ÖûOX>{î|+ ×%rÛxË¢xìã$6µ(­•¥D}ßÍ'â›îü:‰!D·-óƈ÷ÚÓxw¾æ:Uõ8=1Ýlz½Û¶Žåk;{ŠöëµJØõòÚ°Ý¢·H.Ûùð°de³àëŒ÷¼²HIDŽΪ yëC ,ò?ôdFcäáyìðº=–ç\ŽUd·2ÄU~¸ m+p^û’”dK³ 2oþó5‚Z}´ãW­gš’<Ÿö1a‘F·.8uiXá^ãˆTñ2'šóp¤a~"ë 1öÒ—‹Ä@}víÏ£;Ø 0±6·(QkTo«™gªu±So`›¼v2ÆôƒØ#aOÿ~þ‡üÇ/µÈë) zˆZÄRBËŸå‰m<–ÜXµÁ>îʳðõÆÈRRxnb`Ö£çÙ@ ßk'^³¬a4ƒÛz–RJG×bâÃÛ-埱êÆ'a{q¸Ï›º;Bóˆ—ÄÊzë9ÄPÏwÆH‰çèè 6^¿_¡ÑÔ[X¿è à¨?8ðD­æ‘á¯%Ë͵ÑÊf‚û*â1í ÏS*eõó–½/EÖÄ]MFØðìå¸uÕ8âò,)Mz…-ñ'Ÿ+;Q뤊[¥l}'vx‹Gû¼O–@LáhÓß~ƒ„c¢lšÊÏXŒW ²‡ï×úMˆ›’Uj¿¿òKSkŽGŒŸžÊ.{t?¢Åèm}$ €&òô¬Õ^÷òž¥;-}£›Xë^Åü\{ôòª ÙIâ¡$9žÔ¢íbÌ›*V®ž &‡ºœ!Ï hµ‰uû{ª ­ÂRÒ4I’c¤0R$äVËCA%`ƒ×Bð±¦o®¥…ð”//¢ù žÉ;XûÑr«±Ѫû™zº{G×ã™~x‡Wô\Õ^tjîâ9–+Ï•nÇO±ÀG¥gTÈä~½"ô]UF¹¾ WÃuï Ú#ë“£¾Ï>††À³/ŽR* u SXR¿g´žeyú$Y*}w·{V g¢G ë7ë:t× ûG= ÁÓöQвÆJ««Út9L÷¡V¥uâwZV‡z$KCó¬#–¦¨^ú¾^®Ð&‰-æb´Ž-뽛߯Bæ²; <·Wpý°ëoh0Á~ÿÔÀ ?Ð ø|ι®+Æ7qÿm5¬&ºÇ²b¬õ@7g©rvA˜GaÔâ L–2Ö+‡Ëô~ãÇŽ•}†W°µål»<…5WÎ~^ñQöØõèá!êÃoÛ<…ÔÇN(£Ö}¼¿×¶«B4Ë–%\׹峎‰´ú§‡“¼B¦èmšÞ=Vä¤Miag0­'y¾jF‰¬{‡"‹Ðo•\ÑÌy-r5öl¯ªGh•~4­E^G„·;A¼àµLðFæõw/ŽõþúÞ²Ôá9Í5Û¢ƒKúaqÉYf£¾5×Xýϯǘ„ÛÏË«u­6ŠKõ4uËCÀ˜Pà«éjãÚyyI’5‘r’s›GõPÖƒÚd;*û¹ªy9ö!EBfôìUÎq‰Žžk•瀵Q¡[Ì*#²ÈD®`ýŒ×¹ž5<&¥:ÿs)U/þ´7J?Å:rBh¯ýœšå*ZŸ=lsôüˆ7æŸ@êε\þÌCFú Ÿ¹r~:’ç žçù˜ZOˆBÚýÏÇ 5¥Y4t›1†‚[9.~–ª#BëÅè3ÝÉîf(g䑈:ÔZ˜©"8›7z ղΒ§P`Ýk}·Ùl1G–Á 8ÑÂgE ÷B"f5§$ ÙœR#ïìëá9ÜOWŽöž‰-ÚígLmª‘6çYJ÷º3F×8Zøv«Ò²awáĶʕÊì]SZA†p”8Zù¬ÕÁv¯ùG‘›·wßEdYP< â=‹Ge}¹.Ñf_oŽ1El<4÷‘y¥î®/‘Ù(wDË›7£I4&UàA×Ú…ÊYæYBݲȪ`¼öÎk?ê{¿‡°Ä5ïÊ4ÏòÚÜ®£VP½¦½Ð=‹–ôd¹­±9Z§uOÎÁ:zÁ ¨h‰´JˆgqÃ6à3HÞ5«O½$þÞ8xnVÌY§XïÇã!KÎÍÆe ð„=åKúD€HOYóv쵎Ú?vym€Ö8ßÝïÍ©iÖr[\¯¥î‰ÆED’)d]¨IÆsûŒea[ûŒû|¸ÙMŸ³€¸,Kó>Ýkð<ΈÀëÕŠa°ÚlõÅ]”þõ¯••éÛ7ðoÞX–ý·õóº ôÈ7dÂßßßõ3v´ÄÖ]`¹ ÞÅú\U´2E‚ÎäE92õÒHZxI³¦‚–2;+„AöL.ƃÜf!cײ´.V[0¹, ¼ØgïŒë¹gW)±»Qp¿\$L×€dá=ü:¦qÖÖ½qØùAÜ”, …ÏYÅ'¼Ÿ1‚uþt0“½`º^=ÑÝë¨à;TùæŒV›„ÊXrA\û™¯—rèý>‘õP¶b2OÄðh ¢iÃ*xÖÁÈóÿ‚ßäEuFô[P¤^õ³žØ$Æ8yÊYJi TœúIÛ=:`åO²œ#Š×5¿,‹üõ×_&œ-Šˆîõ—~OÉ5Ôw&‚ŽžŒî2õq7€sŠe\ jÐ^º‚¦‘Á$¹ÓRèY¼þ¹“,Áµ'[›»E±­û¬$ݺ@ðwÏjGµƒHí«‚†”"S ý{ª5žE5µ}>Ž%nÉÛ±¼1ËçdE‹Ý™SïëëKžÏØõ|65ÕÍËzWÓ[ƒ®%¶[Vl~†„sS¶E8ÍIרZûЬÙøˆ¬j¹[òc­Wä¼vÔÏ¢ç²æÆÆijFè鞨3sÛzÖêCŽu¦. ôA޼ñ¤¼®<:yv²Ž?º„µm¬8!¬ÛkÍ£áõ7d‡[\Àì'·ÀŽØ«¡Þä‰ÈŠLÉóø ú„ß~„x£ð&›‡sòÜô^P@·ÈÊ›„¿YõÈÓÊU¡°ÊŒ‚™¬€“[µ»Dšˆ˜ 4Mvþ¼œ}wÎ(¡UþŠÆž…”«iDÆ6]N÷„õcŒêzQêaòk_}Ô•¸P¬O)íQ¦ ;%y¾ž55Ò( ^D$Ëz¦-on=|_µÆ9lñí;LÇÕm„Pi×ú!fêñ˜7Acq×ûÃp«%Uæé4Øâý<ÇêOÏ o}¿VÉÛç)vt,¯Wµ¬bFß ‘y©ü˜Õ¥ÜSx܃õx'ü½‡wEO@OAE[øzùFßêƒ3àˆàâ „h&m¢PÀÇ®ÚO&œÖddpzt‡ÖgY>¼MÑ”¹<8ÕýÌÂñúÔZ°8–ž{ÔÛ˜q1xø@ËÉiƒð<ÝwW3+ §Á}DÔÈGƒ—FƒFÈc.£ÊŠå*<³ž®œl`ÕÁ«³‰ v÷"©°8i¸¯ˆäe©®ÌiKü\Ý46Õ"€ÖíÙ4¸ 6.XHŸ¥äaüXHBAûñ‘þÕ㫦nŒ·ŸéñìžP'ÒÏ\¡„ Œd¬¡O¨¸'½“hÌgà–‘FoƃϖözäL}Ù˜à ‰·RÊAë:ÖçñÉY^Ïçšó3%y=ŸU†Q—/JÔBh¥@bÙ1ËZ5~÷Æðl\²2“fœßá%Ú‘ð]ïÕNy>Ÿòµaˆx ›F]ÉÓ$¯œå‘’TßņGù$½#Žº­~“zíé 5¬%£EÆb^ºü=Úô-àþˆK':»±'T[ B:k]67*u»•rÉâ/ö;q Ú–Èzrç\í¹°®Ò™5ŠpîCË dY2z* À®É»þNÛGÃú›‚ú«Ìº+å)íà~,C϶ÚlEÝŽ(ºªLa”µGÌ FÊWªkG³WÈñ=‹,"KkÙ:#¦ä˜î.XÇë°¥ïèíÜÝ»ùCSŸ†/žš~\VhÂÚôvl+40¢“±7àu¼wˆïó¼ ü}Ä’7±Ë®ä¥'*ï*Ý‚ÄÍ9Ú4¦iI©æ­Âè-ßzÈ /*ßÅÙ8€å«äiÆ^ÔUß³}Ì„ÖéÓiñú›‡SÂg°,O(@—qd‘°ˆÓô˜áˆ¶ÿ.(|Ä­ìµãS©ˆ"Á]ùL"R,ÿNbEÁk›•„>ŠfA€ÓÁ õ"šoðAqø™çN÷æƒu?gð<',ØZB [ü£M)Zã£^ëxIž·±ËGšzdñ†=ø.ÜLÓ=B‘wvGniÆÖZöÇwZ£SZ‡þ8ʋ>gÙ¥UxZ¯¬baõ:*FÖX²aaãyß¼5DÉʇfvµö à§Á=£gi2¶Ìì`ÇÙ´…»w‘® Ö'¬/Lð,³Æ{¯ºD­EßK£sæ]z¯€àá,8­ÑZ˜„§’y xÄÕþIìK¯ÌˆùXó±_¼©öÜÁž«÷næï%¬G¦«LXä˜Ö…#+EkõØ×ÖÂÜÏK^ìS|<%þ†£ §ÙëQ„ïDë?ó-!<ÎÏŠ<>Ì7 °¼½g¬ñ½‹Î–ËV´(;Æ™½ãªåÙ§¨Þ­ù‘þw°Çø4¬ — -uºîðÝú¬5-x‰þ‚e,+þÁ!· €=\ž÷µêèx¬³ç›0/'…™$r«µð*E‘Y™¤¹ë¿èÚ9C¸œÓ´•¼-PÖ¶1I¥‡ïÓßjÝIP¼¨ƒ'É`9µOˆËå{x tõâu'p%X{YÖ(FK ‰—®016¼~ŠÊïEîZïÓßqž²fìáÑÐÕɨ l)1õëÕ¢'žè( Zé°îRöû×c×åU7ãíÞ¼yãÌ87Ž`­”IØ{65ð| ’të¦ËxB+Šë`õ»F2£ÄÊÛjY0{JÙ;yF„¼ãÝw(t^@ÀÕ¨z¦Ñö›ÞµœÂLžd:ìUµŒ-¨'où çGßmÝðÌß0ï$Y !k—'Vßüz*c‡CÅ a^IYûA±ƒ›Û\ó:Ööv„½_ÃF/Ö…OúÇMúëë«Ñh=œkè\—““h+²”D}7r­}Õ9FÒ¸y¢€Uš£)%I›[$¿òš¤Wo}‘àk]¼sšå™Ÿ5Ýb:ïvØÐMôZ¯Ú¹ÆX+Ü`Éõ¼äi¶#E­(×C×´ØY‚² Bÿ.Ó£e?ADë1Þ( F¸´³›-["áû ­|_JûùÞš#ÍêwOx‹æut-í®ãÔ¼k=bΆ†LÓ¼áÈÚkú_…Ó=(«7²üFŒ w[ß#·|¯#|¨ç½±èŽ}S©Ru€æ¬•ØŸ!ëníóm²Õ˜-šD£×ÏIÒ!ZÜ¢¥ÄkwJÓºž²*‹”\ª°úóó#Óã!eãÅ®¯•.ÍMµ¥ÕÃêOÿ°<€H»uh†…<É××÷,êi,œêÁmE¹)>ûO 6ížyÎÃõÚ{WYhù>¥«‘tJ,L÷€á#dYÔ„oa—¬þ©skË_¥í›‚+#‘ÐWÒr Eãêáµ”4óþ$ÓÁÊØs7ZkÚ²ìð¹°<ÏÎ`,æË¯>˜ †û­çz±”¾ÈR玕ö Ó#äÁ6F27xnXÏ];:g#,´ç!Š”z+ ‡Ç¾Ç< ’7_ô=k]¬ßŒ1uxô;EÆ~’8Pƒ£¸ë1–ˆMÌÇ3Æ£úk@g¢÷®ý;Î P3 ×\°ÿñzFÌ}³æY¦”ä¹^„¬eYjL©VÏ\ú–Që¯ÞsTæv™ƒjhë‚m'€jp)M¦”¬eiÇ£†‰åÚáëïm˜W‰¼GÜ2 ß ¦¿*ÌZ&cp, „’Ÿ9Ÿ‘2ìžõ¬j˜S›.#º¶÷wn¯ëÖsŸ`Š¢H(8Û罨ёhÆ/:Îí4å-²p)ÕÂ{“í7µ=—gcé‰ÚÀ”Rj`S•¢Éƒ'—!Šl½‡Èy[c¹Zý¬ñôÒž‚‚ãñóóSçöŽO.’s:¸mpÍh?è_vó{ô;öéAHÛ2!äœ#häð6]¾î¹Ùl– Á˜çNÚ¼À›0¥I^Ï—<¾Ž‰¢õwÏãÁÂþ•¨õ‘õvv?‰<W¿Èõî)òW²O|oå±Ãë–s [pÕT3Ê£GÜ«–’„ßBíñ#)qð^î¯;(ýûßÿU*>O]LÆ(x›,NRĨûÀÞK£ix);mÜÞuk~<ºx£H\ÞÀ¹&>zCšÒ{ø£«LÁ³ÒhŸx§dØmh…È•üÉT£„%ý®ígk—8‘>²µOpsˆ0˜ø;'_×ß¼ÍyãH ˜È…˜¦Ô^V¹1i]·„H.ËÕq8#tXüxÞ¬‡“SƇN¸3 ¤Žÿ2(¼Ý•K> 1Â6éXp€Õ!pª°^¤âWñýM`g)æ:¹Ú—¬4X}ÊíÓw1Þ]DŸzA-cC‹z…˜×r«ü¹€y3Á_ŽõÜQäœçŸuœ¡¨¬^ê }þ0ù>áÿ*DqN£(2˜·ZVECñõÈMÜ ‰"Ö¢€ nǵqQácÏE¦É³µ:ãÚúYk󲔚Ã:%Ãcd=ë’…“‰-kèu¦R8X.¥¦}ÒïÜ‹%s³N¢ ‚ð8ܳ|7s½]e $wWY‘ß½40 jµôéumb¬ÞÖöŸYŽÖBôXéopFëÖü´n\×ÇLå!yx»hƒíY‰{ü÷jÐÖHy–õ ?×úÅYíé w7¨xñ‹4’ÔÛâA¹´>^ ’ÎåÍâ`«–‰³ðºÁÈakMàg ‚qÝ*>³¼^-Fˆ#A-á@?c¦e° GÊ}‚þ áÿ¶h´½²Žäþv†¢gFʳ„-3â,pݨb0BŸŽÜjt¸²&EåE|<Çú·­×øê»4Ö‘HF¥«‚5kÃ(Ìáû¬.W›PYÿ´¼‘`ƒÀ—¤&ö-¹4ÂWï]Ü–3¼†ç§ßµ/Ùò‡›j„/¶¼9½Ô4lÑð„Q²”¼Ñù†"¸EŸá#;EV%ϲ®s ûóÐ'2É+¿Üìü¬%˜7ýD º‡±ã40‘E<Ú#Þ! ßgµ›Pž1ÂZ‹xbˆžÑ .»;-VÓæž8bºô*É×”éu팿þúËP•Ž1bfÐ}þo%nw’´F0¥þs"kt®†ãO²§£°ð?L»÷ÚÊ·ÿ¦ãäYÌÔJ2M»9çR?Ÿ'­K1®M­Y­U«Ô{wË¥-LŠÄn´hœÖwÏ?Æ2­üNïÒ;ÐÁm»EÊÍi6£æ0ÕHs^®FÏAT9÷ç§°-ÔÑõô!LeÄnj´tZ˜8‘}~`y‚ÌÁíå(,‘Õ£iÆÖ–u&™š ƒhsôê„c¡Gxå9Ïö¬ç\oý}Ô-ÇåFÁ)Vð—7*Hž]«WlX¯NÞ±…÷À³¬`<þè R² Cu‡!*yuWK}S}1Ž]ÿ"lç—Ê:ômôh7%Ó’{ÁâiÉgo[=­¿}}ÒX˜œDhVíÏ|E-SËü„Ö•ªI\¶ºüÿÕ]Û–Û* v¦}éSÿÿOc›>`‘Ðbgæu­&ñbkK$ò¬®ÙNw—aš(éŠt½âšì“ûòªÛÙ]ªK‘^Ü3ØB_ÇZ˜%"äFR't"¢]œmŃŸÅƒóu‰¥lµt?EþõõêóÏç\Û§”‘¨Šv¾´“¿Ç+J3!° VL²]µã‘x«ôãØÏ@³6¸ˆèt;{mÊã¨89øb>Ëþ ò¹µ.¥ô¨ ¿x76Ú÷–ô*á?k(N0Š‚í®¡nZŠä§è*—ôA_R‡ï÷Rvh‘×øŽ¥p ÚûˆTÓÈöˆHcA+¸‰Ô „†IDATkDF¯û„ŽÐÒi:ó:zd¼7Ûfìº}ñb5¿ü‚¿ï«híl¥¦‘nlDíG"ç»ÖàÉ݆~úóçOž5B<#îÌÇ´ùÝJûÀ«q¶¶5£*’œÊ·OãwžçÛÿ¬§pIƒë|ñVþW•†Ú΂$]žŒð>ùŒT|RKwqÑ’øjh‡tͽcPIÎÆŒîž£,pÛDEZ[ÿŒÃ;ÄŠêU¼^B_+°ìS.66$'U3r¹žDú$#Wÿ d‘á£T)R$ÏH#Á»ÆÝ€ÈgUcO¨¶Lº‘¦Q2´sø.þ›Ë9„Û³ë+ì¾?ÚÞžÁ y#ù7ººõãŒdgÞ‘HÒ,Š4+U×kZh$Ì=×ô&F²r+Ò–r3ÄíœW¸õn”¦gþxdûÑõ36ÃÖÊ`÷tHŸþþý[KcåãÒr$Y¢Aìh°Q·{D[ØL)7!»÷}k"$eªïwWaù;µ†ºk@ Qdœ® }™òeRnó<Ç8‘uªk)風WœÜ=”@º¥"ÃIöÅȽïñ×,Ôëð]ÊÛZ«¶aý­"ç\HÃßSN./Çõh:Ž«¤æ++bm›661h­’Â!KE—É߯ õ€DmRz¥qÁ.34w$8#ÚhXh(pdüòôf½8ÚÂOz†äs½6±PLù¼Q™ÑýåÒ80D£œü„Èà p½s&Z×…žÏ'dCX‰(Óv•C¤!ÏÚ»R*<Æ´¤w€I"š§ÇlÛF_¿Óö|¶;Zc^Cý¸Üø‰õÁ6’I ¯,€£þй’¯º€-_þãÁ®7(Ø’Ù¶~ýúª×Y‘¼Úà³ÜÀ¸Zž!Ô[n©‘}æ;2‹$ÍÖÅ[ óytÝG H¤5Ûñ½wXѼ\7­žÞä‡çK{Úï.)w–î{)¹ïÀÀ‹ïJ"ÝŽQTû;Ï×P•´ï45"[K]ÆŸÚ}Û¶5‘Àx¿l/©eÓPˆâ6o#p—´ÔE ßËi40½Œ'‘‘í‘Ñ1]FäqÑP ×È%Áú;bÿ°êi-ý糑6ñÉ'QsK¬9Ù:/ÇFÈa‚Úµ£‹Í¦_‰û»²)» Õœ¦€’WDR‹ÊÔ¤½¡üû0jÚðüÜ/èÞH @»ø²7Çוˆû"_WRíBÛö4IòH¸V];å—9ÕòSÞ¥)¸šÆ*ÿìd‰åèݹÌz,æÙÈßa÷/“Ó—e­h¶mÍÞ¢ÛäÝ-Kƒ¼X'­.Z{ó»¼HFþôÝEóƒ2¥ïUÒ‘ôy —.çòoý‘JWFê±XnÊwQ?ä£hdIKñ¢uÕ³ä8Žš½^¢Ç9gZ:ö]-ö/ uÄ´6¦«F‰Nq¿jÇ´ïžÞ°Æö,¯ý¤þþž|_¼wÎÄÈv±®™•Q}þI$p„«æÝcÑ y–"î˜BnÄõyg½-t{ãu£}Q´¶&?<#ZÔ/6–l2m6ªìÚ5xÎ$Úàp”Ýÿ…»¹?ß„î&D ŒÁ*amù<„ÎÛäÑíäá–ð¼fÆUûra/t€±²Ñs*"ËxG¹“çE`z àNåàñ¢®ºkýòò¢즡m†>.-©ô—NÑ’k:ÅŠâ•R\ßeá#ÀÊc:ƒa˜ÚR'¿óß!\<¼®¦¼"-õPA§û5ž¾õÜËö»{>%ê&\XÊë<)ó ¾×æzÇ,‰ÊÊ;zBë—²î£èWTfm=ËrG{ ,;ІÊzŽPîÍ}ë8Ü—Ùhe{Â2|#¯ËE¼A¦ Àá½Sví¸±ÚÃü7ò¸lØ@ȳ¹ƒ«ueEæ‰5YÊ‹»Êsgݸœj$ (pŒèEôÀâð`š¹Ïi-³V–u¥cßë§,'¶¹<Ö•á|ÞY‰ÒßÕá½*‘û®…ø ½™¿ß1GòÍñšXc$2 #…c¥ÎiÚÍH ½?NKÔ&—"£î´~Ìï” fŒi-pÍrϊ׆(§ÉåLÕÀìïµß…)™ g«ï' Ûá×i‹?äéY¿Qª¬?q&8¦ê¢}—ßÙyå»Áƒùµ®ýtYf®ŸY\~šó¨ñu‰z/F¯[Ac7R~×êϽká­É?Ò!·ôŸI‰êIEND®B`‚Carla-2.4.2/resources/bitmaps/background_calf_blue.png000066400000000000000000010144671420416754300230560ustar00rootroot00000000000000‰PNG  IHDR€¿6Ì pHYs  šœtIMEÜ /Acj€IDATxÚdýk¯-[×µ>®U5×>ñ9„€ Q! )‰ß¡H„Ø!¡@b;ÄOxþpâøœ5ë2.½ó¡õª¹Î›mù9ûÝ{¯y©5Fï­·‹üÃüÏ `@0… "03ØT¤œÐú(¥bÎ ff€ $ðg`3EŒ1LUŒÑ ùv¦Àß<Ç 3@a€½5ˆþ;b ècâþc@L ílAÌøKª*@ € æoeþo0ƒ@ Pˆ¾†J)hWCY Z»`”\ÐZ`ŸÏ­H€ßåyOþ ©TÔZÇy"H@o'ünðë,ÂÏ©c0„B@ˆf†Ñ:Ô%ÆÏ"ôóùûí Lã0@‚ÞObŒ˜} —‚>1E 6 cŽçuÃýí¾Íâ×ÑRA ] ‚L ª†Æ0U® U„” sònø:áß$^Cãw1¤¡¾^t*–ºàl‚_·©ŠøoÕ ª“knN¤˜Ðû@ˆK©: s´³s=ׄ>ë²¢(0Æ@Š} 䜟õÕg÷õ‘cò÷S@€øïcè£sík3ÄÈkï÷GD~Ü›ø¬ó” zo¸/1|ÔŸˆÌî×T>o"|^Õ þüšÚgmø¯rÌè³#¦Œ1ø}RÌ€œ"t*ü!H„ÐzC 1ô>cÆ1èä=ÔûùAÎ!F^k€ß‰/x?òˆ!"Ĉ>îÇ3—@ÐÛÅïÂóü™zo(µbêÄ1%×®*Ÿ!5„ :!"î·Dˆ9%Œ9%rm‹¡w^‡9•ËÜ¿xm"Tœt*†N¤ajH)àü>)aމ©ª†ÿH\»öÙ;üq÷5ˇ8Æ„9'ïQâºÍ%£÷{ß ü!ß[àŸñç–å¿O%sŸö5§sÂÄ|ÿ1„ðyÿûU‚¨)Bˆ0ß«Þ/Õ @BD©ñ_ÿÿî_Åø€aÚ€AŸ…ɇ}òB@ :QJ…¨BBÂÔA@M ƒÍÉ›S T¹°ÆœÐÙ¡ˆÈ!!FÁTC­ct‰hc`tn’Ú; †¥.­£äŒi @BÀœŠ×kÃþýš T'R)èm øƒC@ˆ˜¦rQ@'ÖuE‚1Æ}W` Ô”yómb]¤TÐ{ÇœëZ¡f€)jY0Û€$ÞTúlö‹#ps8ÏǾCu æ‚«5äRýA ›È¥ 'B”Rp;7¼¡|8Õ`¢PU( ¢òçµ`†T+JL°(ÀôC-&˜*ʲ@‚ øx¶"t6˜*7ëž‚‚ø¸ç@YV\çaŠT"fo覨µâj?³?ßT þØÔTŸï Ì”_À”‡Ýœ½OĜѮ Wk˜S1F‡Á0úÀc(渠ÓSB?;ÆœÏ (ú˜Q°Üäp\'0×u¡]J͸Îù$ïj1f”’p‡?Øß÷jH)"EnJe©È)cY ÖºBˆ)¢·×kÃÔ‰˜27‰“÷a¶c¡eÊÏ>'rI1CGǺlÜœU›Èe™bª"H@- bHh½aûZÑÆ È9!§Š«5,Ë‚óº`þòwþŽã@ÌA®vaÉC;zïH‡x-½5,ÊTY¬•’¡f¨KDÐξo£kC- T¢‚R B AS†ª!çÌ"ÀœÛúBo %%ÌÙQk„ˆ __/@µÔœcBΉÏor,JZop®ëB¿zkŽ}÷ÃW1§~vwS”R1æ„)‹ª Ų,€BÌ(1!8σ×E€ÞÑ¿ƒ &‚9ËRß9X@š±8c`Y+®ãÄÐÉg\—ËÊûfs>…ªŽ <æ¾ß6„PpõÓŸÁq쨵â¼èäÁ:F‡cA•©èÚ :`6 CF¿NLSˆ ú¼0Ç„ü'ÿ—ÿé˜@˜X—Ž‹/4µÃ›¯°Š ‰ffÜ –¯ íjP›^åÞ=`Ö‘Ò‚1ÇSEÕRq´ °Œ~AŰ•˜†KY ¦6LD¤ÀÏ+ð,g;YI{ÅúlF`5`:a0ô>±­½˜)ÆäçXjÁqˆA H<0íSaoলzYÁõƒ…† ±À¶ Œ1PKÁô>ú@ÉcL,[Åû½³€"!bsúwˆˆ°ñ£Š ÆjÏ ÜÐmLHØPÿì@È‚’\íäu`¡s<Çæº¬8Î"“ßAîk(@ðMÞ¯Cßø*ÀRVôÞaƒ–×ʪަX€"zõ°;ÕÖ )aôŽ €†(+#^d pdò@ñCæs“•'ôä{©Mÿ³ÈJk xS ˆA¬ûmD€ÉWñCM ~&Ô»A á®Î"¿—ø5óªL 0(rZ0zg±#¦Þ×;¶ºâlo Æç•ÈÓ€D‰˜CQ ‹óÊ5ƈ9Ù¡Öº`š"¥„¨ÀûÜ!µ" +ÿ#ÚÕ°,×ŃÕÌP·Qû~ ÔêÕ·¢¦M»oâwCo¨MÄ¡Ã}ÓÓ¡¬Ä…öÙ.ȳX}1¥ˆ%ı¿¿!`§”R†$àÚO¤Ìî'¤›1^s»‰Øu 4/Lµ„Ä¢ä.uN¤’1|3ϱ , æ¼bA{ïKF–‚6N@eY½ÛljTfë¨Ë3 ]§Ø,ÀBŠ0o¶TlB1cÎ!ÆŒó8 b,%ÂÆ„EÂ?Óô)Ô™ …Þ¢¦©?÷ÛðP!T 0>P0ˆ ±XС…‚°ì|ÍE0‡Ñ _!bH˜j|?ê²ahG stÌ9°¬ úìÈ¡¢]'¡ÇÌêÕÆÀßýWÿUœû‰©£])!¦‚yò6jÎ8ß'¯Q’ÜÐUÀ²¬h­AR`•oãâ&-°Ë‚û–PKFëÁáêœ!;IÐÞ¸±Jlâëë×c5ÌÑÙ¡•‚CŒ ç±#Ô‚$‚éÏÜè Û²A´v¡ÖŠ}ßYÆ̉” áí’ž{v]j]¹Õ¨á bÀÅZ7‚ÑbT)²ÊPˆ(ŽëB”ˆu-ƒ÷>„I,Dsˆ8öƒ]|0Ì!÷þŠºnç¾cÝ^èýB)ûuBüy_ê‚ÖÚó¼^íò½€kq8Dºm_8öo”e…LDA½c(꺠©BG‡™`]>"“k}x9d”µâØ”R$\× ˆ°£pߨ¶_P} L¿—wÓa¥ÚRaÇóÿñ?³×¶áýýÍÆ€‡x’àÆèÌÑñ²û¡fe"¨?x!¤U.[Ü(Ó&–eÅyíˆ!’`6¹1ƒÚÐîðZ6 Z;܈ØúùC °ÕÅSUúÜ$8´pœ°91÷¹¹é>¿D-`þ¨€‰Eòß,)ãtŒV¼°beÌ&fÇ(§@|#]ëŠ÷þ&”õœ•Á1gvG •ÉÍ¡H!cè€×¢ Ξq̓UÆ4Ü#˜T2ìá›[Œ0¿ÎwYåú)îPÕøQÍó¤Ñû½Ta0?Äçgƒ¬ö À²m8ýðå+gãÇ}üÍôÏŒ•çœ1$~F1(69©Îg]Ùè0?3´ÉÞÁÄë+áΦ€wŸÎT$±‹òu:!.2(!%bhp °àóg-û ‰OÑ%÷ú»¯µ`ÓÉ¿K‰÷Ñ«ðà³› I‚h¬0çì Øê‚s ¿_¼Û¶S`…@» ÎWÕÉ¿»*L˜ÏD%O5”º¡õ 5eD4H!¢õ 3v?‚«_X–Í‹5Î@M ËRq¼ß¨Û†nl)Eôƃ©¬í}‘˜ò¶ýÂqìS¬__†)D­](¥À„° R„µI>%Îè Ø¾¾ cBÍЯ ©Œ~y‘Å™D­0ÎärÉès äBø0´ãRr²#åø %‹ªwIc4,µb˜â<€ZW\׉u{aÎ Ó‰R+aû{m€3GÆÑÙ™ñÐIPLäœ9ûDÄq– ) çŒÞ;ÆèÈyAÉ ×yAƒ!Âtc¨Ï„.¬uE ÖHÔ$æÌRÆ&` )GŒÁk1F÷'ÑŒ×ëŽï7÷ø³½!J„ÉDŒ ÆèX_+ÚÕØY;š#ÿÇÿÛÿ×8tZ?‹PeûWËŠ9Õ9B(Kƹ_!ÃÌa®1Ædõ¤A )Ÿià©TÄKF¶ä 1 ?å|Ö SïÉ|(€§¦³wV3ÂAϼ‡;ö4˜vCõ¡æÕY©;Œ °°¾^Øÿ#RN˜³ÁF`Å+pH„Xm "^_`Ä„„Â6èä÷hª1äõ˜ȩ ƒ0 ëöâ©n†ózleÃqžÞòs—e èç‰e]ÑÆíÓ_êýý4^ð÷õkÅùÇî'N~t;ˆ„Š~v@’‰¹ß¥¼¸à¿ñ @ìö¥ñ ’!c`þi‚û™yÄ®³{`.á90Ìáà› ÜDï¶ÏœÝß|>ÝlÐù§ SB‚é ÷”+ŸÃSÂÏö¹ $Âþôçw·Íê>:ž ãó"|‰ Á ɇ¡µ®œÙhÃZ_ØoĜάˊT2ÎÖŸ*p- öã›ß³$v=!`-y)û‰íkÅôk¨B»AuÞ¹ggXJáf/@^ ÆhH‘ð°M Fv÷!%h÷‚Ë~tP1#—äD `ßßøúË_p¼w„L̼”„?¾ß|RFÊÉ7K`[_¸ÎÀ¡¯J­œßßX¾¾p~ï@ò¡°²[YÐ|ؾ^Ÿûâwvÿ~ãõú‚ÚD;.,¯í™^í‚BQJB»:rÊ^\T€ ¥®c>$¢ ßß'¾^Ô 6üþ/ïšu¯å…ë:1ÍPbFÓï½<èŽI i8äj>ƒ5ƒd!d ÂyÓç´ªŠíÅ}âü> )Á0QËÂYНÃç™â³êeÁñþF) ‹bíX× c ŒÁa=ïo„˜‰\ —Œ¶ï„±î“Uìóû{ˆ/@üýOÿí¿²j`‚ºp1 2%:PR…‡·³OgÇÔ ‚œQŒD|ØlÂGˆ9"û‰ßç„ AµCÍ0µq`ï0•éD~†Þê ›UC;/èä ÕLÉ2R…™<¹ùþ£sBÄP6.º{³U›çÄöz¡µƒX<†úÊÇ:'d:ËE‰¯ÚSíM2ͺbÌS8óPÍLÁͶ®‹³¨xÍÖù­_ÛÜn很fÀ<Û3`ˆÃ±ðkg qç¯7ðÞüm¦Ò ϲõŸ½ÿλ ¹oŠC_þAýuìOŸN¼è˜m@î™jè­‘µÓ›3]>ì¬k\¸Î И fkhã²¼jÁh$y†>tr-Ø÷7öý›‡E˜ÝHv‰&Po'j­ì€B@ë$ØD íâsržRʘm`ÌŽœ#Y!ÀæDJ£!¡]'–ÊêtŒÎáû$Kª”52™À†a­+†ºvsu ¦„s?ÑFãòŠ)"µ®vU$Cè×ë ½u\­á:v´‹ÌF]R"¬Öû‰³¸ÝKJÜkB ¬¶Á.îfºçŽ1:Idé½±Ã3C]V„œ`Ôñ>Þ˜:‘S⽪/´v"†ˆ’œWCYÄ”qî»w/†1&朘NÌ1U´Ùùžª‹([Áè×u!ää¤îAS•…úœÈ©p˜ßæT¤p‡?sƒû“~ÿýwÄypä@86ÀYÎ&•€œ2®vpþ=n4‚¬\ÉòŸü_ÿß6Æ€!UE@‚FÀtð¦7ÛýýFÊÙÉŠ1tt 8.ÂsvÜ<Ä3f÷JfL¬¯ ßï7B4¤P3Öuœü"Šeyá8.|ÎFYüÚýÒ™,,ù÷‚˜ZPÀ&Q‚Óƒ'bä¼%HòýÔ«¯|S¨˜:RÄeoÆnsrày3ˆ¶zÈPŸ+pR˽ÏçEBâA AâCŸä¦áÈÄ;œ›r g[yå­Êòpú!:Á <„ÏFhŸ÷U ?¸—oR¦Óž áÇ_ R& ‰…žƒƒsB„˲¡ŽÑ®‡Žø|Æ{³uÆš„äŸåMó~Þô9Ôg˜‚ÏBž×µŸÛóô÷¯à¦O(îA:ßsàž4²ÃñCo~6ü”3FÿЖyˆÜ€ñ5q"<Ÿˆ|ðMÿiI„ÓîkíñnŠ0Yðµúü^…rF?XqªN‰\›ª÷ì%DX°1°®¯‡É-~?L|‰ Áº¾0® mœI¤Ç›²Ïƒ0Æ ‚ãhØV’-®÷‰XjÙpžo”…Œ,s ßtâõúÂûým{a ïº¨Žƒ6‡¯€˜…Ãç1žA¹_Ú§(˜¦H¾‰­_/œ×…RI÷Δhç…œ‹Cn ®6üÞó×eÁu]s`[Ç…3êR1')ÊçÙ>4ÛÌ9ZÌ„fE-…±ÿñíëËÄá0'% ¡>‰I ÃŒs ¶õ‹sHÿmJ"çÉ}RY¤D1 '¤”ЙU1×u!焚 |s^Üas%qg©¸v_G6PSAï!áTxýU;jÙÞÏu¢$ „Ùýº,˜s"þ½¿ÿïþՆ޲$n*jX¶•ÕÀP¬Ë†Ù9ýÏ¥ õÛ×oP×H'ËD„Atüfá ĘSBŽ ¥,Þ]()bãÆ2½4þW>ÞØX#ÞÝttæLf3Ä(Xœ"¹­rÎÈ9úF4a*Ï¢"þM\~PÖZ0f#¥°TÌÎE\G)À"Bä¼BÄñôŸó(Fê8 5â¡&@ÍsŒ)AE½¢å`+‡Ì6R)°Æa·„èPßOr„( …›X*ɹßò©°^ý£g ª°-+»/ d\ô1ŸMåVÄn!s'p£ƒDˆ!F‡$¢k[|àì¯ó<œB*ð³ýË=‹ Yø%ŸQ|– µysâoŽ?>A¢AîÃ#–Þ!&ßÈBL‰„ ˆ~–…ç0¿iœÛR±–!ÔµúFâ×_2g^¤f=טˆßÿ›±“k3Ä«_A©fqJ¯k9BàÞir ËÂõŒÀyJð¹Äˆ˜ 0Ö׆³é¦ÚQ qvÎ'Éè›sàû7J©¨KźmÔ8yçQD‰èª()=áPí„BH–€SP¶ i Ó%>†äÔÿŒà›`´†µT(œò}^®ãù°>Y颬Ôc >%æŒÑÙëb¡#‚v6L‡êz»úŸÏ*Úyr¯I½O˜’Á5ZCÌû~’"?Ic·Á½©ä„$Aà]¡"•UÅu^£³µŽ«½#/ I,÷Ú—€’3öý 3ܽNÚáŒ$KBHìòJJìvD¹±²/sàÚïý„@°o˜çuz±¥Ðih×…y¦*®ýº, @Ÿè£cN²û¦QÓÓ."DzPiý|Ç?Û“`NA0ýP²ÅÀ7çó뢸Ř7<õãüéžØÏw·¿ýi"ÙÅxŸ{Ã÷óÝCü{zrþFT½Åµ)&,ËŠ÷û÷g£€Ó+y8Ú$t[rÅuX–W¿(L 2çC­…¤$XgL¸*ñþF ×Ö¥â8Nlë ÇIK® çq"ç…ìÄ«¡[GÍ jìFK-\BÂLÊ9œçî#aÇÖ&Y‚ãC½—01‘ P¬µˆœy@0M8¥3z¯DL™H)A‡A¢P` _M?›Ÿ±©ˆ1 .›_#}éZWÈP4Ÿå‚Vèpⶮϰ 3.$þ=_%A„j­d}†0&áç,>›™׸ &>së¾>~ýÚ1xo°11FÇëõ…¡çÁùd)Ô§aÖßVüñûs6„B!À:À }?ØKpF(¼RLˆ™âU¹‰ ÓÐzò¾¨:ß° Î}:µ&Çûä”,rZ)è ¡!$Ÿã&+ög¦r³ŠBàl#º^’0¡FÈS§!D^›¸Xc*ÐÖ>4ïû%s¦@ôÇ—»‘¯ç|"¿g&÷¡`æ_!Ãæ<Æwcù1Üöö}€ˆÝS°?Ìò'6—÷€Qø#E•½~ÎÚº)â7;ˆ ÆŒ\"Þ×ù<“ Â×äéòa2:´÷ .`à°¿w2(Õ¯ÿP¤¥>ϧêô®%×qš!šá:©cZ¾¾œáed_N’¶º¡é‰> E†’Šw‡NÃA®£ ,+ R¦¨âÅCtòÏtûÓyžHA…àÜ“Ü Ò}ƒ°¸™]±|­8öƒòIqï%¯¸é×ÁEH¢ÉÉjƒäœuÃqì7+è™#9ÍY}s¸8:À†=þÄD¸j€ÇÓ†wøàlÈd*†`‰ËóAF1#ÁœlÆçqUÄýïÿ»½¥ûAæu±åA*Õ™!ÂöP†²T>¼}² ¯Îj³=°LŸ Ó8zÌeÔÐgÃhÁ‡ä9‚]ΆÑqZù`Q1©˜í¶?á°7âÁ:ô¡.J Ó°nçuñ”™@®ÅåùxÚúþ|w‹–Ö5 1!vH½QÌ6!AÒæ-ðºé_´œ0Wz³#(%£_¬r¶í…¡j¾Á0|1ÇE«’%S«ât²>ÚÓ®|S'°JcµswE>[ð·Ž1ô”oð1%V° )ìhîÿfUEña>‡Qâ¦H€YhæŸ!H€ŽöÙ ï9^¾&~¶Q?;ï|ì†RY­á™9‘qÆ*Ý|¨z‹ž þýÅ~ ¶çýíÃãVÝ«ÍV̳dÂÌI¶×ý¾1&¬ë‚”rJ¤ÁÎŽã8pÓ€ìlLBZpƒCf:;"rÎü½w‚Ú;¦†“#:üùÿÎ n©“JÁm«#A°”?sÝȪ‹ƒcÁ¸:´7(¨²¾‡ë}t´ëÄl1'„Я‹ÌE/ÀHžùãŠC¤ ÿõ—/¤0­s†d†ó½#•ˆÖ/œÇ…hÀ’3®c‡Ãð!¼Mþ>„ˆ«]9£í'Ô1.ec¬ØÏ7΋âÕÑ–eE e8DG?%WäR!ÁКk§”žÎ‰½5Ô”½;$ãJ•³»²®Ð9ªNë:aÀ"特)¶×$h˜ª˜Â½Æî%Ʀ©?K€¡] )e,Ëíœû‰°ÙÉî“€”"ZoT¥ -Žú £DSEïü¼â…ÌR×¾ºaíBÈPëåèH‘¬¸ÛLbè„©b}}‘Ö,€üÇÿä¿¶\œç0CŠ™0 xšíTèÒÏö㛵Gt8cšCê›røñW%ıԊã8k¿ ~œ’w2dL‰é‚Ó÷·,˜s ö…l-K͸\t…®ŸŸ`VÄÃ’Þ)ݬŽP–çþFªv’JŰ, ‡V)@T> %DŠñ Ôgè¼€X_Zk˜7“îoSuAÝTûÓŸ}èx’ü™ÊzÃV÷Ô»IÖýs”mR2G×ãGwaŸ×ac«Ïÿ}Ï7ÏHµgXžr&?]í¿ßbz`¾T"üþ>1~4€69—¾ÿÝäëøtF7SôOoôtš®ŽöÞ\ ½ãµ¾0¸Îݲœ0¹¸ä_Þ—Àa©PÒÃ^š6€I²€çK}Ò{í› *è† -%,¥à?D²6Ûºâý¦’ürNå*&nê¬âÄi¥ÀTCð»·Ô g;îóð®ÆS ˜³¯Ž!ôÞ]t6]c@qy¹ª~Bââ½ oÎoyhÆ”h!pˆ5£Ì‰qAnu5gi l¹• Ðþä'7eXæ]SÝßéi>,'£!Ý x+ÅDKƒ‡Á£FŽâ61÷/Ý=žƒ ã¦ãÚS¡=›¤Ü×äöuúlæ1¦ÍG$öùùO'AÌÿ‡0ô©ðY,ϯ›‘%x?ÎBúg#ìxÄkRÄÜ Ùbµñ°¹nÝÂ3ù±©ŸÄS½ûs—µâ:‚øH=8ñÚ^˜Sq\oFv„XHhid!©Ï?fg1U2I}v˜¦·'™kçŸÃ=èÕ±nDïcGÁ²¬€öv¢º=ζ½p¼ßHZý².¬%óçÎ |6ÿx#o%D("´_h7ü6'¾þòŽcDzn8Ï%FÜq÷r¢‰áÀR–ÀMZé£·Ô y?¯ó²­éE‚“Ô&FŸ.%1$ƈÑ;lËRÉlÒ ™@ýµBg-Çq IÄÞBà¹o¬¹:¹Cpõ³pÏ!H˜x_F÷ùï€iD†P;—3T;"¢ñD\µ”ç¹zïÈKE;®gFeC!9â<¸>jÍ8öɘ\3zë˜Ú‘|DÁ™ 퀄CvüFt(%‹ԻDÔ´à:¿ùܦŒø?þÿÞ_sN4usʘª³#|2_ë ƒ'•(r^0¦±‚˜4j£GLâ—ðÅ¿-F¿ˆ¹ÖýjœKH„$~ÐXRÌôµ áaVMF݃!Ð7F¤”ð—¿ü†«]ÎìòÁ1X%߬ƒ!§ŒuYˆ›«C1"Š?üáÆ&}‘bâœM¤Bœ_ä¡7Ò#Ç>U¬k=Ì7á9\çìëe]Q–];j^ѵ#EšÆí"¤6ì¶.7.1)8ddî´ê #‡[Ì-:$%DÅcŠ!Øg6ô@P¾¡…ÔeA)´È1=ZŠPªº?¸ÊjÈHè Á%ÞŒ¦‡» €¬žŸCjâÄ<8h˜È'ãi`~T•ëöåæ}pú½éß›±>ó…{|¡ sçÖã„p›b…gÖG¹¡þ rx7àÝ´Ý%>„€çŠ;–~¥¸ÑÝ:»|½ï•ý¸|wIˆWw.p¹Tt7‰ jÏá:Ç@׎ëj0ˆÒà´.§»5ô~ž Ôï”Rˆ‰û|Ð2¤°*èk&Å\'òR\ѯÎô¹$RYC@ׇ1éPÉÔÙÚ3ËRUô1°¾*Zo¸ÎC¦Q[ÁYe@sÊ|˜t¤Ø¯C9e3÷ÇÊ®Ér6›¸s®ÖJ²`^ ½uʼ 5£]t×B ‹‹5ëR0¯á.ÈRLx¿ßè½£iÃu6\ç×ÕH[M )EŠgC ‰H5 SÔRE¼èøËo¿á:nq¬ÛOQ,ËŠ\HZ Q$;z¹íà¼Xï.T¼ÉÇ÷t¢PE­íœ ªAÜ ½Túp™‘`£óvÕ6¤²`ôíë W??…›rždΦ¬¯ # VÈ)C¡ˆÿú?ø_ÿu4£ôáЇä%g¬ëŠ˜q´ cпÉa.™ )fÌ>œB)LôÙ‘rå” b Ŷ”„}ß‘¹3CÇõÁ§ÿhÞ¤ }Hk©8öúl8÷1pцVÑAðë×o0åéyn'íƒ~ÚŽs›s~Xø÷!·µÄ]0òóÅ@!Ï-&“ÀÊ­÷A¦”‚“s Õ‰¨ ±nÀJKâã¾Þú»«|§›™WvÂÎn©9S°t0õÞ¨]öñ”Š>† ¬u,ÛŠÖ¦6Gþ+,Þ ¨¥Bu¢ÖÅ}¥h?ç@?æmäݽ¹V)%Óá׿Ӻ½jÂúZ}–ÄBô<)˜»®³Oä\ÐΓº°LáÞ˜†Ûr=ð™ÚÊêñ¼~ý"¬[êmäRWŒ#ÐÚFbÂk[0†!׊º,ÁÙÙëµÑß*Žk‡HÀÿÝï˜S1{"iï£u¼~û…š+J¢ä€±†6›Š%/¤ó^õŽÞÐZ'¬•3Zk8¯ñª´y¹÷çÛ ÷æN¾‚¥V˜ bÉ„•T°.Á€6:Ö…trU²(s)6¯Ô3A­oÎIÅ>Ÿ÷I#V³¹ž½cýÚÜϬ`¶3*ÜÕ­ŸçÙ/I0tD¡q©BPR†üÍ?ùç&>TUøðгàvÚÁñàò%/¬r"HCsšWŒ ¬ K\ÐÚ‰KÊè×Ec³X·7nП`6Àœ)'Œvq‹ŠQ 1 Š4À"!‘>.Ôº@BÀq¾¡3ícSObX¿~¡´JŸ£»&äS,Æ”\ìscFÓMÙfÿ¬£sú©ŸpÖjLÐÑIýUúæ›ûAèèAœÉS‰4_»Îd~Þ¶é B†3¥`ÄäÇtÇ6£r¿÷#kYhû²Ÿ×÷6!®/Ö)>¨P4yPPä”RÂûýí×CžYÁý’Ì>¸«Z¯¢x=Á+žÇ&%EB„îÃC /–S—ª®ñ°ÒÛàsùÞÝš^hÒ&ÿÖ?äà{øa Ï÷´pCV?f ^ê™qp*BÁ? Ÿ…>cw?ÂbƉ·Š3ÁX1:Îuz·5°Àõ~œ2ÍÅ3­ÄöúÂûývʦþ€˜øb†’ E[ §ÝRÒÅS‚`´†ìb?Úÿ!•«#fàF% 0'E‘‘ë|tw¤Š˜|P|2ƒže”H L1°mæ 0ÏTÑZ‡‡Ö 0f[lër¥ñš*T>®çq nõÙÍ1\³³Ð* b"”Ôϋϑ“f(Êû0”îµeà\9¦Œëúƶý†cû’ R£ ál 1àÙ{!‚ ŽkGÎå2ûˆ¡À0PêŠýý ĈuÝžHˆœóØáÔÛÉ|—Hdeb@$aê… ñq_ˆ0løœ‘jø˜èHÁ 8"¿ùGÿÌL©.h׉m]pîT*1eâb£ûFÑ? 71úÌ-ü H£uÚ5;?µ„„Ó7Õá§.Oâ€i¯õ…ýû›¶ÄN¦™ ¯ëºqq­¤{ïÏpðµ½°»3_ùõ~ÿþF ñÙðEêRÉV±ˆ÷þFLŸ í™ç:¢’Cü1ÂÜ,N~ÌS$sCÊjXm@•nöãLH¡xðRˆ¬ÆrÌèíBÞV´ïƒ_þ1Æ#nøúz὿¨“ó³HrLÞA&1ì×mY±_;‚ÝžVsõqk§qàÐ8Eê¼E¸{@úï€át[’Œ°ÒŸ«ïÏæì®ÅN¶aîÙþ\ø@„{CEÁ‡nýsh¢ªˆ˜fp^ºoдӗºß-Þ{ëœkñõ8×"S dÒ1fĤo ø!ãgÔÏ!î}ÀÁ&M??‚w5ý'%¾Ñ6bYÌi„k•ŸYmºZ/’ÙsìÊZ=äþ <\$ ô>ZÏÏ“PVZvKŒH0ƒ¡nÊ}Ž'¿e­¬@c¼ß'ò’ƒ[®‡€áEANÔh<K#QŸ_M½0›ÐÁkMëwú“¥!4‘REJn’ù,å·Ú¯q65Ôµ¢72ÕÖõ Ó:­Óv”ëÕœ*J\É£±Ë€ÅíjÔ@Ì‹ì.‰„$S@Ðù(Óiôh˜(%“!Tíº€°.®ë𼚃¤?g‡¥ï•½.+®óB* %gœsJbÎtß­Õ©¼Š l+lžü¬¥ˆ”Æè¨eÁÕ/¼^_@Ÿ°h˜CqµÆY‹~ìg^¯Îý´á.çŸf›!DEŒ¨ XÀ@wžJz2ŸÌè¤,óÿ¹™ä²à¼Ž·§Ì@YˆÍ-u¡1àT&Zd^ øƒãÕ­NÅZýÀ-³7å¶$8ú®þ|£Ó™FŸá­û(ê¶ ‚tÚt–×ÄR2ZN­lLg…¸p…‰€Ö±.h×ñ°àS»xؤ’jaŠ\t @âç"æŒGå*¤(>›†cã)UŒ«?û¥”»ªf5[ë‚ë<°¬+Ž®·÷fjþ Ãi®PÒM—eÃy´¤ð¿ç$tÜlòRЯ“íÿ­|²D¶î÷ÀÜ›o‡Ã÷ØÚ7ùŸ'‰Cýsâÿ~Þ›¿Àðqó}¾/ óÇ5ÄUáïsífÚç|07Wü1¤®nxá‡ÕKø[/{S‡å.vîÎíiàyQ˜PÁýt€j´ÚñP¯OuJ›ÓÝ”I–(uyÔô:©®™3‰”¨âs¢÷ÙÝhÁM‰ mL,ë†ýxCM‘SAëJ.Oª}<Úêà¶á$t¨N,kyª®ƒ3ŽœIýžC‘ÜB(eûs©tå .°}zx’ygIØ&Ý]§²¨˜€©„O¶רDÔ%s€è$«Ãç~9`ö‰˜¿}ý†æðzLôü‰fçâd1|}}=®¹W»œ¹99TÁÇvô‹?41@À¾ïøZ7\×ùd³”•abtýáF½¬`†è!cN¤˜qîßÏš3p=ÀŒË²aÎBlÐ@4e’™¸·Ýá‘Üî )\û úÞvþ´Š(µ>Ãõ˜™¤i“^PQ S'êºb8öo¤X1}—<çDï餾"âßûÿ«¿ÖÊSNݲúÙ°EI©Œ”c~h·Uî ÿy‰0ˆSÞÚÈeu,8SÍëû[.åqÔ!u-'~ðÒóÀ¯ËŠ[ì5¯á©wÕÃuNv$÷ sùÚPâêáLœë°¦Dpž0fCŠ Û×F‹†áFŒ÷ = ou25,ëJîwg;D°V:uŠÏ1äÇ]/qWÄ!¸J÷ZŠ ¤ª`Ù6Œ³“’kæC?}üûï=KXŸ¬Èœ~+&Ü@n†&Ö׊q±ŠÊµÂfǶ­xýåõ¨hͽm;qk?nÆÖ ˆ˜ûá‰MµÀÀŸ£g>ÁFæÚÄ3§ù áž==ÎOê1 ñvJ½7âèïá3“{ÞÊ–ÀØÙÛ‰TâkÿŒ1Hg ’Ø®ÿ° ¹ç,‰•h¼™YâôéÏl&%' ÜÿÏoJAL+Ènòy RŸg¿¦}Kv ˜”`ض/ú˶äTxÏÛýùµ»³|…ÓyÐÜù 6”Ñ!x†NBA»N¬ËƨÔ\ H•¶ß½w”e‚•¥ +W»È¨œÊ¹Ý² ø½™ž4*± Ô‚mD´Ãæ@¿:úÕ0zCʼo9'žÂbº­(ë‚m£ÑàP²ØJpE½ÚœÞÙ+^Û/l낼eÔ” ‡ØmL´ÞI—†!Z„…È*YBMx-+ä£rú-A&>óA"jŒØ¶Õ¿ÐÚ×ÿ’گĂs^¨ë†Ù=ºX¸»PSÃÙC¿¦RŸîµ˜"¶×ë±l_וŽ2Ú`ǵÖ æƒ,ucZ"/‘𙇚u¡–†\†º®üó² œf?‘#uB£7ZÀ_'èg(ËŠcÿÃçÇÙÉPðÂŽ’…íõEk§{ÿNñßü·þ·5Ý,F ™ÕàM?4óÃãÇ*vÀúî,0wÏ¢6PõhªX ¥øÚ/äPÙé#ž"6`ÖúsÚ¹7ÍÕÚ# ÓîMDü´v%¸güŽSÑæÉ™ÎÝý¸½ÏŽ¥”À4Ãv5,uCÉÌ|nž0sòSÈøÕî9ðÍ&œZË-pÛVR’oû‡P.ÈKÁ<¶×5Á†ÊȪYîꜭåº}!׊v(µ`¶ŽuYXtÉÆ-õmßï;N¶žÌ…F|èýÀ¹Ÿ¼ÏêB/ñìñq‹axZ™~èÄO5‚Wô~¢ý`ÕÅÙh1¸.¡ñðñ ôñ8óYÚ}x…;÷LXûI€ÝöõÓû<_vc„]æüÑéàó_u÷g| ×/Òd¢OÇ"nX)tefþuùÝÙUÏ'»›ƒÒ»3™Ü~ <ÜL  ‹5%:Ò†LË.ækŒ?õØÒ©µÖ§zˆèsZ…è¤ ƒi‚˜ "@RD]W2˜B†AÐOÎ)î'£µ çqzð÷ T¨5`©íjˆ!`?¿Ñφ>çMÍ™ …‘íjhî[fÆp¥{¦©Æà°¨ºf1hâðÖéÛwž3}|r|ÀL ès`Ø@FòÆ”°ä…÷Í#´Ï®y) M$Ö§”âÏyíúB|j›š ]…¿œG‹9\G…Œ)3‘±ÔÌuéB|õuY›hgs3É£ÞéTLGz @]éƒè» !ÀÏÔÔÉ@©©Š¥.H)â8wçˆû:@¯¥Ç—(8“%aL2#nŠ bBfdZVgðÈè–mÃþþƶ¼pß„,î–?×d££îÕ°Ûæ@ð øiµ¸ö åF|ï5:¼>M7fÎ8>¨?i  r°Ç¤mJP#s'F÷¾¹êH>L}6µ[l€¨9ûs@–É4”W¯¯ÕÓóúyaèôàŸà.[îgï La 9¡¤‚ãý¦pÍí왘êó‹'æÒ¿ªç„Ä{ÈíC×&Æü!Ð19¤ÈYîO}>º†;<Ê"Ç3p•vC¨n_òœ@$„¡Ÿ„Ã`žiuë‡Üzæðãé5n& ©ºp.pnmˆSzõb>=yùúã÷Ó)Èó#ù1ξ’kq¨#´§Žâ‡ Å+E߈DŸ38fÞnÈÏó+à ̱9®Ó#‰iTȈ:ÜRwÕ°ÔÇåÞÄ9B@˜œ ˜ñP )cŸå~œ@"õ½÷ù¤!Öׂ9”ÐT]¨õ…¦¯×ʘåÄ5B„²¾Fdë×C¹Ð6eY* áa*mË ûþM èÆØdóÔF.e§·oÛ;7Ð3/¶ÜÈ÷ 3`)ìhä ÔH‹ëlf$ºQ'ŒßÎÜüí×–ÞP·ÝÍPH ˆÞÕR ˜ž\ô’(¾3Ûç`bfÌ̦· ”uANýž³ø33zg&RcH¡®Ë­…äÉDŸFJÿÐáÚ:îJQJò@¬µâ|¤›ƒsÇZ±ÑÚR6´v8|w|>£d¯ûnË–B‚CY]OB x]7œçþŽ%šôqÍð¡Î@ˆþÃÿìÿeuYð~¿ï“ÊFäœ}ÆÇÜ1"«›ÊéPÌ õÖ°|½pîïGÄ­Æ*þŽ0}„c‘øyÀÓ]w Šü @PÁäÞÌïŸ1àÂ…ãÐa@߯Ž0t"ùáæ˜ó+Íœ0sƈžÐwÃBåµâÚg7 5BFkL£aôîë^žk‰ÛÞÝ\E>¨?ÀM+ 摨OIþl¶äá{hWð¬Bߌr)Ȉè2qÍ”Æ|¦s–"C°ìÃúœŠ‡hîΧ!‘¥¥·ÒŸ7øÉ%@ÝT 1„©ÐPRFÖÚ68·ð](]…Ǹž.Óî€y»…}†'iÐS€è¾ZsþdÍý„¹îঈÛÂýç¯ÇBÞ<ÖêfDýØÑÙ™f¯ª\­ŽùÐCHÛ‘$‹ûDá<ÑpÎ…äÞå97D¸ó„ä„T2®ýDðˆµnØÏ?ØkÎÎ(„y›ñ?ë²R]WÑåÎI,ë˜à8vÒ}k…þíº(.mäuLäZ‘b L%‚,W¿ø\NÐc¢.•ë¤pÝ^h'u/¿¾~áýþZ Žvr¶Ñ& ÛV1a´ï÷ΈŠ}GôÎ"œ?^ìöSÊ<R€Š í¢†(Ĉ Á "ÿœ§QjÅt)Œ0T@»ú£W#Kê@Î%¯Ðј¢ôçƒLg’‚ä gn19CæÄðM~­/´¶£¾¾ s ;–í„Á?»/%a3#ñi)+ÎÆ /ÑO¨mSEoÔäã‚b0¨k(â¿ñ¿ø÷ÿ:Û£õµqÒî¹sNŒy=Ο)@ uy±•V} Äœ“h`%YK¥€.ÌÙðúúå|öˆhu% ‚¾Q1 Öí7b¶‘­«™ f ÛRå¢L)Oà=áÇè–Ù4“ 1¢®•²‹c.@P—í³Z[ʆiÊŵ0ä&x;Ë„0.’{þ’Û‡ƒíƒ^E®piq$*r©|_€-}Ì€(‡On—.*ÉØC6â=» ÿ€¬ˆèØø˜„4æ`+;çD ‰‚e{qXê¡=7ƒEB@½óº]x[£ß‡‰¤„ÃCý !>pMȤ{“DÍŽ©"¸NÆ”š¡ºmP·´6g÷á“rfHˆ‹>o^Ôíxk·ÇÐ]‰Â…’GH3tXò9°a?h¹ôÐúh9~ý7Ë1³u7w-–Àkxo—«íÄBwCʱTw%ö1ÜV÷ŒôüœlJjùkYYÑZ€Ù¤å†wDb„ŠñìÊeÅ×kegn`̘P=ÆH?¦áâIFšgåÝ0AòyUìÌcä ºäŠn$¡ÐùÕ\Hë ™áaCÔx6€yá9ûpÙ@Au¤}O£Zúºv^Õè^1'ÆÕ±¾^ˆß`qú1J$rƒwt!DÝÌÆ²dØè$(ž=©õ›ÆÎ ˆ õN+uwßís Cïê²ðà †R\çI‰*æ$Kí:ÂÅá6°¤•I,ùIìc Xľ£Ö…–è¦è÷ׯ_È1!—âÀ$ "ÐTµ–„¯¯—kÊ|®¢„“êÂhÙ–mC¹P.rÆuîôêrëüœi›Ãg$rö÷0énnpÛ§Iȹ¾6Êœ߯ƒy÷0´Ñ±}½èòqM3þ§ÿ÷ÿŸ¥”qoìMfW`21ìNÓëÆ^ÕçnÔfàq³xÀ “˜"ö}G0ÒöÖmÁÕ£Sxÿãà›*ådݶé”ÑÇû¹±äXp´ƒüîÙ¿6è€Ï?æNñªíŽÕ…§Ô­Ë ½wôv°mû›JÌ\ JÌø~ÓÉqI;Ç`uNÖž@­ ÑÙQöh¶×†÷7«²˜bZ›ˆº·í@ŠlòÄ4 ›ËkAPSÁûôÔB‡û%st¥ u·Öö9æd.tŸîäPsA›´é£#Âõ.I¼k g$zÎÄ‹¼ußTxQýÇǺ€§Æ¡fÁæÄo¿ý†?¾ÿ%ÕµôÉi*Ic ²ÛB"8ÝSýºànï©ï¹I«´ÄÅMÐà¬1o»ƒA,=sÀ†–xw!!ÒyÖaš;‰{˜1>_CÂíG•Äßï9È )cpY+®Þüú)­)¦òsöû!¸”]o.…©µgþRBo ¯×Î÷û9Çre2áè[]qô·ÅÐ-0ûÑ—qM©ø@Ö-óˆiꮳ¹(¬6L77õã[ýs¿ÖÚè0„b|V³l+ŽïÅ0ÔmÅuž3)¤@£ëbȺÉ|¦Ï7»4D:CäR ¸MƒÄÀRi•ñ‹Ý'l¤7#mWׯå‹mµ_‹i“8¬{ñÐÔǨq—1õ")„Ú'Ïž ^ý›±êA¸·wÚfO´ÊiýéL~@WÏ>Ÿjêp9<¥®±a×n:ÂÍŸAôvÓÚH™\ʆÖo7aWðCžï«6 *X¶ÁèÕêÅâC¢x·å<€×²â-"¨³¸g}2b c´ù¼Fn"ÂØí†Ûà@ªeÝžbÂ$ Éæà5Jâóó린MÕè)0{"Æ„ã|ó:šæÈB!ÅÀÿYÔxX„s*–må¦w3R†˜¢¹9¤sgØÝ€–A×y’YFw’Ç7䔟4Ks~º9Ã,Ĉ~5lÛ‚Þj®Ø¯6 ¯__˜£ã<.·™§Î(—ês-BJW»ü°ýÌiÆT$<Å„Z Ì”ÂÈݵ”˜ë¡N¨P7-…³µ†˜2‘™ 8¯}rŽh×… e-è—"å€}?µm7ÇÌeÍ`’ õ‰«_þlк^çÀúõ…ãûwžN„˜æ0Ž+böì’ ­ ôqáëë7¼¿w©BFü{ÿ³ç¯1EÆOÚ½D'j©Dܶ·Ø)§‚''\êºa?vV õÞ±Ô!è–u!ö ñ ÷Ñ‹ˆ<£q>,¾bDøPÞáAÁÛQí¶ºy±=o¬1eŠ—|CW>“^kB©%ÑGˆy>/¹½dn'àù®9zš÷Ãêú€m{¡ÔŠ1ûGôf|ðøQo[Ï@FäW­a\SÎ9¦c锇€u]8Ô<ÝB±>Ù9á0LÆàÊhy„œ:±$rÕq»F2Cª‘YØ^íÃa›@ò|‘u*IwŽÆ]é…ÈHP›u[}ñŽNºÛ”“ÏŸÃŷܺ1À"n'ßÇTQî3Ý’Ý><4¡ÇÓúõÂpÅlB%ø!öì­¸+âöìÔ¢Û}ß=+ãèNÏ÷uœC±#w?÷3†k^HÝõ±}ÝÊ è4èh˜Þ…« ”¼ð ëëõüûe[IÉõ¹Ÿ¯uC,%W>WÞáKŠ梱hú©C!T0%o­ Úy9th9²ºÇtwVw \, $ÔmÃu\è .X×ÚøùcÊ(•Q"@¬Å=Ü1vÊRP"ò-Xž(K6Š8û S²µ“1Øf<uؘ›š‘]ynz§X b‰„}B€abv˜HSm®=I™]1@Xô¡X擳%TÔ{CJA”|wœ±‹.s.Ž‚ìÇÞ¨U÷÷I8qŒ ÑÉTI'W‹X–â³ÅÇrôË¥ÐØ( Œ1 ¦ˆ³ut˜E8M¹r.„ 'Q BûOõ¹YHK­c2V€>=þÜYdñïýýÿå_Ÿ%ÜïÊ­­´^F4ݳIæ”S%UgJÐSEžSîê A)'$¡iÝ^>Ü¡m†zõ<Øþ~™\Fñá²nˆ0”5A'ßKÇ$5úãw/7F é•©áÑ7tWzÞ‚¦˜©ÜÛj¸A!|C15¯¤|Àjƒ›† Ì…BmcO[sÜ;‰?ˆé©Ò¸h$ø¼&ÄgC+ëSÅk[1&á(¨ %Aï¤6—R‘rÁ²ä’Q3é‚÷kÞæ¿- q%7”LW‡Ì$E¶£‘62!ÐYv6jrÎn¯Pr!{]ÏLâ¶/ îGÄ\ˆ”âÓÁÈœãÈه̌~Dlþ>âCH TOqÀ\Ó‡”ºúqýF ýR ³7Üqµ!V;¼Uw¼ ºÍíD<œG@å¼ÞdïXì>”)CHøé/vk‘Ä…b¦†þý>‚‘GÈ`X¶ 9pÀ.Fߣ’™»ÓÞŒ001® M3¥G’ ”LsÎúZ )aÝ6 xmïydá—rAªÝ 1ñÀ¡nç}žÈ9ãµ¾8 #J^Ð\˜¹|Q“0ÔÜáEr†äˆzSŽÅPrF He)¸ÇstnVðu§• €ãº8{í)smˆ[qVÄ”z¤ 3âçÀòZ°ï'í~¿j­Ìqß;ATdÃBS°®_¨ ©µ"zTp©¯_/ ²Jƒ@U€  q¦SÂV^Ô–¬5g,•:›R g“÷ýúí·/ TMPsW¶uEªݯKÙ Ý4´C!X¶ 5 Tf•¡© !rIÈ©p&sÏ*}½3>ƒ…‘ö®÷:È¥ ·NcÍ1©‹s[™\dÁOÈ?üGÿÌJI¸ÎŽRÙAô1˜z–3c-á§Dä1ZÇÐIb 싉+gï¡®b׉E)‹ ‹B¦PPÇ|,ºƒW"dLÁ€’ ¦Ng£x;‰«.ëŠÎ}'c©ˆ&Ëf$«¿Õ¯ÒVÅç &À¸Ì²CÞß>¯ DÇ]MD§[· ¡5´ö‰Iq»s:BŽj³Ý9Óµ!Š\+½Œ~¨ŸU©¾ÚåÙ >¸iS>¬6U¾~¿ÍI4Í…Œ‘º,h£!KB».^ãX…Ûñ†Ï†+Zß³Ÿ=F:³Â«Ú×ë×ãÏ´½6\­3+ÛYh„‹èAžŽDIBʬ(†Êb€FšáÝÖ*~MÌ)аè‚ÓÏ7‰O@ü¼­¤ž†BBb6[}×úÂuÎ*Kpûüx±’ æ8]îpbL˜©”" ­íœGx \Œeèìls¸Õôϼ+& Ï=ß)³?]]`˺n1\uYq]'#]b1q54g‘dü-/O½óœ<·ÞÅæB ï#bºmÜÉÚ–çy0Æ<ƒÍÐŽ”2©óTì1=õQµ,UŒ¡Fû÷óÜ9ç§Ûë…éÞ"‚ãý¦B£©iÊ•pNž.Iñf?:¶WFŸ‚ãýíÏäN–×þF¼¡/ð`q½.³LÔðúúÂþ½3¿C3†;?÷ö+A á¦/¯¼6ªJ­Æ½6aX–¢)ÞçAK'uw`"úqPå(ÊãH팧²¤p]g¹HÝ’iP ­a0”½0|-_„ÀJ@†e-Pa˜Þõ}(e@­œšáŽEë­#•ˆöó¤ÿ\ï^¤± )™˜À89ç–1¯ )W¼ïGþGÕ;!ÂRˆneb†9.òÈ]™L³.EŠÁo€ál•:Ÿ¤?Uæð³x"J)Ù´ pçY€Š×á™Üw+|®q¢ê³C&„øÿÍß᦯±ºÌ1?¸û˜ôúoq´æà½Ð¢ç]¼ß;RúiqÁƒïfT˜R]Ln©¶&€° B¼yÒ˜+D9'ú¼Üº¬8Ûõ6•­¢5Çô'¯™†I"à¶M·ŠšCûÛ¤´¾H]Ì>NQ¥JñêÁ\ìxÛàs3s“¶¨Fìm…¢?ØJ¾MO*]UF¬Ó¥^é«ÓMûú çqbýõ üñ/¡Úpû:Ùä~§Ã,?­E˜‘psu{áòT9Œ2 ‰¶9Ôy¸É§Ã\Ï`=|¨ÎHpÖ“àï|ýBW»PKÁûý¦H¥%µ=À3Faný ÓÍMˆX–ûþæ,(s[ðãÞ¹5ËmójB½F®½»©èt³.æÔ‡1,X¨Ñ|Íó™ÉµÒG†åõ¢ÝyŒØFû®|þ%u;—V)!JYPJÁþý’ ¿w¨©TÄÀ9‡dN/LŠĈë¼K@ Ã8 îû’rÉØŸC‰.º·Û@¨$— Õ‰ó¸PJe×Òúè4Üw”mÁut¬_Â'á,å‰Õ„s èƒN£«kq¢gÓ“`¨Ø6£sÉþÅutž'ÆhX^„<£d %œ$ äYŽãûOoùîÇgÍQߢ[Êë4¤ú÷ÃlùÚð~ó5Ù*8oIÁm“(K…)pœßȉæ±ëÊø…Ù½D3u]Ä’ ®9‘DPkÂ~ÐI¢GŒ„®m¹|¦yí'êJxzÎIiU Ðix}-\!â8N—›­‰ÿ“ëßÿëy~ªšµ~Ag÷¡ÑÓ¨rÊ<õÚù8‘ÖeÁq~Ò2È>†ˆ>;ƒë'7µ;q1µö6˲&»íLìã©dîEÓÇ@Vò4@t~ú-²sØ)XÀ˜—Sï†w,ÁMóì±1LJoÈp Ž»¾ Ñ-9|ƒ6êI‘PL¢),ÆÈA1ˆ[`HëäyÝXÝÌæ¼~åJ“½±n¯þp1§ÀMåüÿ«k[‚šæöÎ&†~].ÜfëIå4•ñ\h®„vÈÑ~9 êÌ–é ›TK¤j6 7d òùÙà&1AÐZÚýk\Xë 9%”Du®ø¬©Oš½Õ²pC•  ‹ġQJq"C„%õtÀ'~Lݦÿ^<Œ‚1weº³q©¼nÛka Ø}Ùô¬wø.|Õé›?E‰¢ÏìÇ!aŸÃC3<3®Ku±ÝŽëp&ý›ú¸°¬+¡«Nö£º¯Ir­_è9!z›4†ø(½«K¸t­á$ XF´Šž9Þ; ŸƒŠ’$¯ª¹ÎL!,µr#ÅÔµÜ98œ-½¶/ˆº–¥ ¤ŒŽ0\J…ß‚ë8+z>hö°-Ùñt²H¨9Ã<ßû9Ý–>¸!`É…vžg´¾6Vù^œæÌ¹® a쩆ÞNÂØ‘Õ-«ÏmÜV˜Ö7t@Ì0u`]HQg¤l† g€¯×¦…gs•'n0¸¯Øm¿D£É>N¤XàT;BÚ‰0ðÔé¡\в¬èsb]_è£a[Ã}&Z–Œ\+^ùÂì$ñÜJöÓç"˺À†!÷ +Eª†×¯Õ»£„”à(Ê-ê!C¯Ö‚œj]‘R‚üÍ?þgVbÆ~íHn 8…šŽë<© ™Ãó+hv“ΡLþ†R©¿ŽÍÞ›upÍ„’9Œv!§Š6.·®€wN‰ôŽ!—ŠÞOn´Âp ÜÈé<<2ÏHíZ$}Øs†? “Ý*àaÍé9 Äãg©€»ÆšÜº…þˆåÁwCãÔÀ\³½ðþ~Ó¦`zØí2àTö{Øpx«M‡gS¤ìU~Û™CGÿˆaLs¾мn¬àAK|³û ÇªÀKÓ¾åd¨™ŠU‹·-ùÍò!kCä>E§`fÓÿŒ‰A8ÛúÂ~¾}@Y\oD#?¿, Ç~`ò¢xƒ;ƒÝ”tÅ›:yëTÁÝoè-Àª=:Û…”óá3¬ãµÎyñü_Eži!?Ö%ï÷½ (pc²;ò áãØü¸•òÏR¡èN7÷t‘"àïÅjöº¾poñý¦äÄjSõVÅ“¤‘2çŒd-%¦¯ûþîÇþP.‡’ t¹ÕÿºnX_/ Ý2þ¼Øö÷7~û»ÿ ¿9±nÞßßÏuï:\¸ê޼úa®‘eÆïÇüö‰m]Ù‘¢%eœ×żp5î?™™B„ð^× ÉÑi¿N¢°Ï¬’¶'ŒtþLE,òzôÖðZ7¼ƒ!OµòÃ'OTq…{»NäZ\ Îó„ª>sJd 2KÍÓ‚\ûñ~þÑ >Ÿ5o¸M »U%ôÙ?9F™A~ãHK&Z<j]8¸žâZ'y–gp4aU£–kAY2 .C;Š¿ é$¨¹Àl>ó-€é¦g?°¥ ©&‡ù³­]¨µ`tî÷S'äÿðOþ¹Õµb6M¾~­P5üËÿîw,KÅìŠÖw $”\<µ¬aEöŒî1˜4H }òQ ÚÅèJKb%/º˜î›]ç£GʘÇQ4ÏÁ ÂÃrÌ7}›ÊÔ-°jTsÚÑ9É1Z£q ÿ|¤\R­;ÝÏÆ- 4ÌÆ6W' !‡'4Úä÷‚*ʺ N pÆØT¥0n ¦üÐe?ï¼ÌmFxx8©À€„åÅ}xØ`Õýêø¡¨÷ìᱚ¿‡æJ}†R­;=+H 6;I^þ 5ÑxPϲn´:;>¶)$ Øz/7ã€2™"9¹•†;*Þ>"Þɶv~®5:0¶m¥ÅôP7L¤Žq¥p+¯ Sô—UgX  ƒQ§ÊyZˆsлŠßmbšy^=×õ†Kî×¹é®M›ƒ ¦ü7:-QTѯöÌï¾¶/DáâëBŠ×y0ôÊ€«w´Ö˜ßáö t:.$eÀ­*îÅ ­w¬Ë‚¥rè®0 }P¸)1Dœ> B01Go2é [R„Åh¯eÅhÕÙýBû÷ŽóºPrDðúÚHæˆñq…rJÇ9¡evºÔ†œÑŽi­(9ùÁNXË„óËÙ;Ä]jcfœôyò€°În’YCF†‘f sˆÔ‘ þýÕ/$Or43ôv n_èlj²’‰Q }à¼.Äœ|VS\j@¨¶] svô1œugØêæO¬GñÆŒÞô>cÀûûL?PSH`8ŽÞ]¾FÀèÌDJ9ÓP³¨µrNÓè !hÎák’Ä‹œ öógïš“kQ' ´ãØÑúpRO@Û/ò…02­¥j¦ÛÀèÔœ•JØ9…Œ÷o`*úè(%bebÎcOI0†"{€ûµ_€)ºß'âBk‹5 Œp´Ž€ŒëüÆD@-™vìJ›;Ç´÷Æ!ïàႳ€[ýíõÂyìO®“O؉°™GîÖ²àj—CSÝq´ßƒXxªÛîI©:QcÆyäûù5¡ðPŒÜPc!ÔvÄ3ˆ'ßÁ÷»ÃÏ`$SÆF»ƒˆ~Ô«wUìcßÇàÐýœìvö3Èwè=>#¯oFÍ­FÔOL-œÿôí¨à¾µóæÑèϼ€SdÙâîÇ÷ßúøò|Æ[­j µsάÆð¼þý¿?óD¿'kÓ‡´èDŸB¿˜2´5,¯^eγ‘Ö-Æ”½AûRë3{ìs>0CuÆ@EûЉ$¥Þö4=,uáH;N¥ø¶#” Ã-ñ#–\ Õ¤SНóòw ”ŠuÝðÇ÷7Ö¥ÀT8ïàý~“þ=™î·»WÍK]ñ}|#A Âaþi)ˆj؃±d ôRÂZ2Ž£cY¼¿¿ñõõ…÷÷7Ö׋Øþu<þi÷€»”Õ¯;‹’uYŸg%ˆ›´NМ0¯¤8G ²:£³Ob€ ÐÆ@I ¡:Ï7BȨ5£uOnUêéÔÈHƒª\{§Áy0ôŽñ@gëª|+)!< ª¾^¸ÎÆýàÖôˆÊ>OD‹‰HÁuœ|Æ3Íàï7ÇðXÜ€vQ’°­ ím^Õ“© Ò¡Î*ï;âßÿwþw•@Ê£„½SƒQ×€l|;NNä§z‹*~}-dúèßb¿èÿŠ˜*TÔmÃ×mE*•j_ëWƒ ÛÈR j^ có˜/q¾Ï›êÊ 9X7¬ÛæœéI(c(”AÖ@H@Jž_|¡¬›W· îètE È=²\˜·”êöBöMðñûÍÖ <ØÆè˜®(~fw‚¡C6>åvþÌ]&‚(ü¨–´Àˆ‚PÅmEpo\æx¸g<ƒ Zû,÷Œ*Üæ…ìÀ¼¬æ‰dÍyÁ¼Z»wR Ûº Á¤>„Â9G› ꛵>ÅÍv¹O”;ÄÌÖQ–Š~}Œƒ»¼r+ößß„ ? ïL £OôænÌJ7Ø™WJÅuvôIЛΟþƆq7@©{ïO$ž89HÛ¥=ûd×sœB”Hp ¯§ñgÆÄB€j”f`°ÑyžèíB@`ޏvœÇ‰mYqu’QF÷nâ´SÞ·”®ë¶nР(‘/|¶ïßÐ1‹oBKqʸºˆèí¢ÝÏyÂæÀyž1øLŒ vê­&fÆ?Žíjn?Þpìàsáa¼ÔÅ¡Ivƒ½_ƒ±Pàj'Švœˆ9!¥ˆë¢[uˆô‰ƒ*ÞïÉg#½÷O&y»Ù –_3ÝlkªDú vÓµTä·¾™³£®Õý«æc¡ãÜPG‡õuÐAu÷]`«§¤Ì]pé@^ròûÍëPj¥AiSŒFa63Š(Ü)Ò«JOZÜ7E]«GTÌ'€NM±.Úì¸Î‹TèÉ{×Çx¨þs’l!X·}*“SsAü7þçÿÞ_Æã’»Ô _¯•?P úEº ú—I!à/_¿aÉêæ=ÇÈçći¯eƒðëkåÐF )pØØ®“Hefð²R´T·Ú L#³æ¶'‰@Î4ó04©O>\ô¼kxDeˆX¿6¤ñÔ#nÛ„‡ Ü9†ç‰„(^éŠ[;ûìA™EÐþøŽ:¥_€ÉÖR|Èwo–!§G­MäÌn?–B‹~}‘>]×BbBÌ΀"47“ûšû™•šél l‚cž®|ÜD¸Z+R&;ê¼ÞHyÁ«nd°Ž‰Rª‹²xa‘$´íñû¿Ö c\nßµ]rÁq¼}_Åœµî]¡¡äDÞMRÛè͇¡ÌIŸÍ¥\K%ÓG,&”´+‘ôÑ1ºç!ÉòÿñeAŽó_ë_ø FA׎qtÏÂvã/á˜Ô0q ë¶ÂfGÊ ^‡ÁƒíuŒ6s@@ÆÔ,úìÈeA=sŽó|: »Ú´¡X¾êãÀbd¨•gŒÜ31nö±0¾’HUxñF¤ìú¡•KÅœójˆyAt\u}½°ov<“ÐΘ?°Ÿ ùaÜuŒÐs€)¯Ÿjÿù1gŽpó}ãOî±C ™U~„`Þ¢ÍÁ¼Š›bó)eŸƒñ¥ê,SZŠà>î @¤Ó+7uv5µ¬¸s=Î9 ýúñÝäóEåÎæÆÇ³é×~Ò¶î͸9–O€—}~þé„üß2òõûÁ&j¥¦èž¡,ÛÌ&N·É!Êtw4úã3|òÓÿ¬‡2ÎËÍNN$8ù!@§âëëõhoöãí‡ê=gCñÔM#P\ëØ}°Åô0ìžû{ÛÕ»å ü`…š»>ÏÏç½ÿ;V7ÙŘòñãš½#¤„² ½@½?‡«†á±­¤Ö«)0IÝ–(È1 éCc_3‹ª èàý’4–eÁþ>èl :ñëë7];Ö­âº:;`,¯ÍSùN,¯×›aS’¸vC¢âPJ&‡8³(••áÆ—]Ï0çÀ¶V\×D©}œPc¾Äy6ÔZ>u5,%ÓJ!Oèº(ò°¿ßxm/´Þ‘kâÍU¦ËFFJ›Ÿ;\Þrۘȅ¸£”„v\€é;½dàþH9'´vâU¿è!3§»Ò>ãˆgÎñl >§$ÅÃ}nåºÛ÷ÑoÖÎm/Ô©ºC Q\+s|È}¸=L±,+ç‘àävóúÌ,HqÔѱ­+‚‹ªêZ€)¸®fl½)|LN3%kI¼š4½ñ¾IÞBNFF³0gä9 Í)® <¡âÂ<r›=:%Wæ1ÁjZº•ó‚”ÄÒŸmuÛ~áØw êH+`ŽI(é±N7ŸXÜ– Ë2Ï·†;êŖ¹*&½“ ù°uþ˜É„›_…-\ð™S…ÏïÅÀ8Tà‰ÂÀ,¥;lðy›Ü, ªŒ- ¯…—ê²0¹ï8ž®VbfÞ…$A.+}´ýòÊKžŠøjVe‚„'“$oNlÉ2&b©ØßQDžÐ±øãŠOëë…ë:B–RDí`±ô~cymþ¬ù8ç@-ÜCbÖßqx½^ì{sËÍKª÷‰std·D*KÅÕ/®%º^è—+èÝc-…È"¶ð`58¥ÛoÆ´IjjY·.O9#‡à¢jîÝ("®\! ¦òJ˜$Jÿ¯1HT8lj+Ù|îZmjèm , ïïß±¾¾pî'B‰DOΓd I´~™ŠºdxÈ}IRt6š‡Gk|. ‰.ºÝÉý÷ovÔ1™ˆ‚1nŸ8Âhõ<ùÔ’†‰’—'µ.²Êßü£jˆF/•ļ¢õóIo€µ.Ÿ*5þ€Hý˜¯AKuueçRÈwžó‚¿M9nEJ­3ˆ)•z[÷CÄ£4ׂqP—².¿ÿްw5H1mR˜¸Ì~ÌN Ý­AÎóMXÁ~h)rª®^ÿ }-†YáÖL ¹9`´Äå;ëç×וvé÷î+ m>€Í7‡ó|{áŸ`ón³;B&9àÚÏg¬úI•D#DæÜ›b@k£7ObTÄœ]4(p{-À†óýnê<_âóçœÃçœsÙ¤Ò4Î8Âg­Ðgsã‡óF4Üz¸yepœ}6fpî¦ÊÖh]Ї¦«>ȶçnμ€¹5”OCœõ@¨/x¸Ùí…2i¯=Íþc °+W)%ˆ~VÉóšw}G“_÷ æ¢A·‚7Vq0Ú :Í «³ÛîÌÇÊäézE±-¦ºÀ¶wˆÑž>IÀ÷±#¦B¼|v÷wŒ°Î¹æöz}º.?H{˜Úü’EÀýÖ¶× çEUûòú…ãý¾¶ jâlĈ\"7Ã’bÆï¿ÿN!(Žý‚Y@]Vˆ‚Ú¦(ˆ’pjýò}‚ö†º*–…é‡ÇõF.…‡dÊÀ¤Uy„}#¸Uý蜾^_Þç7–úBŽm6Z¥„æaqÌbàeŸJ蜦š§¨R¾å>Õ¢ ÀøR <‚8’muuäL‹ì¡yó a'†ˆó½?ϘѾ)‘áu Oż{'R®¤ÌÃañ“sÂþ>±m Žsçœw”J2€öœ"}Àä.€ýԢĄºT˜ŽsG€ .Õ‡ðÜÇCä³ó¦NÉ—ÛÂÐ c^œÑþGÿùi˜“Û(аn_€öë Q{ì™ï¸Æ\*Úyáµ½œ±Bœ-„„Ö:#7‡I²¬…:Œ(8¿w‡8ÂÔáÿ6á¼Ùn˜† À ÚðµýbÂX"ô¼N×TDhLsíŠ0¹Ìh¹.»’”PbEÊáQŋʉ›w6Ôm!ÏÞý®ä› 8dD6¢Ã'·C¬SMcÙzY™vǨÃ%o)pðè‚knoN™.ÑEI0$IäqgÉ+µSŸ¯S?¬ƒÈ'Ø}™žˆswÃe¢^ kzªZŒÞÜ¿h™>óÌ1=‚Õ&‚"Ý4Ü;:“¶3ÏIzsÎ>q§QÓvýCKhR™Ü*›‘ öÉâ°ÛsJ4?c„•z¡_Y ™‡n?2 åF Ï;©–¶ñZ/ËB¥÷`.ùu¾†#uB]I…•”Ãqöõ™…;ŒÏ‰øðö6£c—&ì žc›s³Z ŽóBP*ç¢âÔÍ ÛkÃ~ÏšK13P! Çþ‡‹úÈÝ_E"®y“Ïž C*9g¼¯€b+/Œ9Ñ©² !ŒJEkN!F˜c`ûõ´ À׺= ï>.¤\p]'bŠhG£Éa¦J½÷õP1g<$ã=7‹Œ„(eÁì"~ýöEjòÅtÔáz›}ßñz}‘Ž<<Y0%­wÄL ó_t‹–o‘𯿉œúüŸþ SU‡AìÁ–©2þà÷ö<¨€ ó‹£®jÉèžpc¶ô~Ä8Á!äq6Ð?ibY*ºôsb*ùÒ÷f"PÊkt ëÎivÛáI†X)~ÿãwÔšaŠÀº§vW‡å‹jU1ºÓ¶!2Ä(äTqÓßRFÊd²äT˜°V;ñÆZ3ÞÇ)P_a÷.)¤²&¯ìÚ¤Ëú2Ëë‚~ž5Xj&#…YÈÀR6üþ/þ–_L ®¸mtgWœy"ÖZ™#ÊRCB›§Sçub{ý¾¿±¼¾˜•âà šçÛ ^cÂñ>°þzáxsÓѾ¡øÎ&±q¶ÁAy,´á]>z[9Un¬žŸü@„žÂka`Y~A 8Ú7à8ü§™àØï|²‘DäO ÿÇ“ðã°ñ®âÎÅãÁ£ä¶‹W¥£k©È%b ×Шá<ÞÈeAï¿^/üqü1g Ý1¹¨ñçë¹^C‚W|!=6Qh±!È@pºxï?˜]üÙuYq£j†3jM:φh‘Yçï÷óL?#!,K„ŠêÄq\ôLr¶e'a¥›B ŸM2ß)Š~§—uƒ F çîK#aè@ŽÙé¿t±5·y Ïmáêñ¼<‡Áïå±= ó†uyárOM ušqf6¸–µÑh ßüZ7ìSsÚEû•"B2„Ðö”"ÞïkYC@S2ÎrNHO&M@@í±vÙžˆÙ¡á’qC çû€VO„£X ȱBû…)†šï¨b>«A‚‰ÚyùÚ&I\üÄ}C¨Pmî¤p y«hçA£Psƒ;XçX°ïß”´"–€vœ;K@;/¤uy¢©Õƒðäoþóÿʦ)–¥ ÷éî»àðÐ.ŸQ¥?Pª“œlÜ®C CažŸ±m/\×NճǦÖ\<Ûê²,>à¢"¹Ö"Àu]ÐIºå8NHÉîo³à¶^5btêÖ\±_±ái胆Šê‘›ÙVýî` H¥xÃU=Ó0:öÞ}r­ÄþØ\™röÁ«x^Šç’KÀöµaê@?Ãû|³»ö‹Î¨0Œ>!“æoßçápÚÍž°g“F°Ïç©®ÈÂŬs<•ñ6²ì©gs"†H™3|Â=ˆ¿ó(n7d×–ˆC6€=êwqòÄçóÏ'˜‡ÍÉëg»I¯öQK|  êÝi÷×v«à‡fÆ+Òœ°Ö}t\× ›”™œ6Ýh±.Ô&üy¸íŸ‡Ñ(Ly|æÂÏÇÍ–Žâ /›ô¾‹›Z¨öN! {>ÍÕjJèc¸¸ÌiÒ¦žœÇƒç¹<‡$žÏ÷Sr¯53Î8’Üp…}ÓÒn†ˆ`©ï}§ÖÀç;´›‰È1¡þhjR¤sâB õƒŠtN½ŠíëËEÆàrÖž“#9þi.•SÅ8Ûí’OZ©3Õ™„Z6¡ èqîÔ,ÍÉp7V7¯Ü6Záä²¢Äì÷tâýýׯ_¸Ú…ä9å­7ü¿ûŒfôî ‚}#Â8œM~ V†²! ›hSQB"p]¬îë² ]¶×Šùßþ¿ó¯ü]ìÇ7–X0à6û~`5P0ÁÃó8ç¯îOeªÈKB”„c?}¾)Ϊ›È%¢íyÐà'"Ú¦?·a_L7mÓ]§½-A<Óú^ìÁ5 ÄŠœItËCBvwC <Ì€ Ï×nóâ‡Kð»¼RsÏ¢$Lñ9GPD ÏÏ©er¦öyAÄíªý=DåÇô„‚S¹5J"îð "ŽA>3-wuVyfWîÌï¤o0r³€¸>q™N/_ËŠ®ƒ¡KAi÷o´ÓiÚ¥ÉeHNíŽTOc31ý¹æÎêôc?\\ç1æÄkyáìD'ê²aßǶ~Må” ˜¦}`©+Îcg‘¤Ì½ ÁCÆq½ýž²x¤E¸!:í¾,DZӛIÉ¿‡Ž{0-0ä0Tí3f‹{©˜u]q¾wn°S‘ ^½S˜xk“îDÀäs˜á<Ôeƒ©¾Ñ‡ÞÁçÁÂPì`‹cÿ­5^Î Éá“¬éøœ¤Aóòs­\'-M’?KÁé¬7ûéîZ½æ~`~ŠT²3©rÎ8÷ËöÂ}vÔ\¡˜> ¡©áY‡±"E7³ †ãhO·j %{šR z ŽT°ÛŠ!0[¾&\GCÊ´;i½a]WܾbA"ŽëxÓ!PPÝBØáÓfºÓlžåþþŸÿŸv?̰ñ÷¥Ð‹&z`Kô*-„ˆ$‚ýº¼ùܰ3’zïô¾ ´²®µâ¼.¬ëŠ÷7[Ûe[pî'Ô˜© ‡™>fîd‚`pØA?.piMž® & ¬Ì"úyúö  §ÎyÎuL%GŒNO§~5äZ¸¨“8½í ‘Ðе5•ˆãûxtúT¸·HÎPVê8Ä¥ûuÒNþfTùð¾yɧbFxÐÏÝ„=Ö\Ká‡Y¿}R‚(÷]Â#·OÕ‡ê»-´~½6|¿ßÏ p¿'eLÔòw Ó-<ôÊqö’þ¡÷òþ«o†Ëºâ|Tá‰Ð?¤ÎOÁöüïÍZ¹O²ºür“s V¶ 6]ÏãP™ŽIQ%™’` F'¤ô!ˆÜ—æV¢dÀ¤H¦s¸_V\((?óü&! ù ÄäÄ?”–uã<"DÄLÅüûM·Þšw`¼?;²è¦‚)'·± aá|¿‘ëâ!ž“††‚m4,¹BA ÂDb9LÔuÅu”fû2JDÞÎï7þÿÚÿ¿ÿþD"¢£æQÌí8Pm8ß4&TcWì&BvæÎM0O85ÌO‘‚Wë¥dèjÍøcßQJF‘ˆáiÈ'ä«uÆÚÚ¸ÓB¢Ž*Óa¤ÉtÄÀçJ³Å—ºb˜bœ§çn0-㿌RtÌ~8…üu{ùp›Et) b$ì»Å‡e:1úôëqß茒°è3:?ðDHÅ—ôé†cˆˆy]6¨àC!6Aïê²FvU}­DUÍG)Ôtt¬I\ ñ™‡NL”п¤H£ÎRW„p\ßFv|¿‘£`8!$ÊÏ®ŸZ ÿûÿôÿauaÞïìËF;{R»Hgìsºi—Ÿ¶äs@kd5NH)¹yÛOHʈ6)€ó:1»g1ÃÐÛ@Œ…~K~˜Þ s!DŠð"«˜âë·ΓJóµ®nÅÑæt1ßIHgÞªöì¾XE»U6©8§++sˆ^Õ'´‹,®îò«˜˜¶ºà}`8ÕJ! g¡˜WM‚ã}"{*YŠ ­Ôu rÑïI@±¼¾°–ŠñßýKÚW ·Ž«aÉïï·Ãƒ‡EðÎIL î{u]×37¸qÏ[ya®ûWþsæÑŸ!0`ú³áf  ïÓ½í¯ËŠvž>¤öa¾|Ž ’dÂLìf`Ï `êskŸ4’©Sz,½¿éd9ûQq¼ß;9™.±ó vÇGïÙ‰©1ÇbŽNC³ É@¡ëtˆÉýÄȘ Κ !Cçt6wM²ÏÂÖåþÒBÆÎàF$OÀØýý¢Ò¬S='æçûÏÙ?"O'DÔJ'ì’+ 9fìÇŽuYp¶†W¥¢8æðT™Ú½p\ÌJò†ÃµÓAGqxë&cÜÅ ‰"ù>x|¾±|m8Îó›ð͉ìbPUÁçŽ ƒËn‚…Ç ÜÕדôRÆålÊš'ía(bM©’1Uv(;“>:ʺàý½ãõZñ~ï(¥@GÃRᬲ_ëæÂ?CÍ þÅ¿øoP7~Ç¥®WÁg½ÔŒó<8øv—caaZ» Ö2­‘WÖc(æ ͸O2¶Öm}ˆJ×µ#¥‚ ]§AZ±HIJ¬ôò2Få*¨K !âܤDæà &´MJ±>÷.¡_×Íú5hß^´‹)å ×õF.õk¥=LN‘”s˜Ç“4\ü¸,+Îë‚üÿÙa"„4rÎècbûÚpôÉP‰«¦wà %e²R cÀ‚ÓMÛ…T2"2æìžHf¬&c„ÍÆN&Íð}øË²¡ÍùäúªŽvb‰Ããm=cØÈYÑ&ÓÔH·3s¡bp_%†Ð÷NñáP.pcZ[Î ßǯå뇓AÇÀ–õ‹ø³uHHXÊ‚ÿö¿ýoS" `Pô£c"$F¡JdˆÀ¥V‡®|“ ?ƒ¬>]\ôÁ*Õ¥êçµ¹?ÎôùHtú1 ËR}°jÌF¯_¿aÚÄuu˜Û5—ZÑÛÉMCåÉ-W©Û½Ü1·˜îXëï#‘s›é1™â"²ÃT'_(Ä\*mýÏßQ¹éRÍKFÈ×ëmÇŸañí0É v^zÌL¿– œ•Ýt혘cÈn NA®iq½Kô¡íø)FÄ'ê0 œvÌacˆ7Å1 ÎKèªüóU(.L‘3»…D!BœtÂ’ÞKíû)"íÛg6øœ²CbN¯T n«G°’½ÎÝ:²ÆžKu›xƒŽŽ«M¿¼Æt¿÷$ž{¦F;™v=æ4Ãúk…M„ˆãýmBü Ð0ñõõ¾Ÿw =§îfSš @Që†Ë“2 ÀúZÐŽFÈÌ­÷Ïë¢Z@µ®˜£3 Õ]‹›6lË#xûu"dRµ—ºøQȉ[ÉÍóvžÞ¥DôãÂëµÑüTàKÞßo*Þ³ ÇŠ>‡³6;jYqœç·æ¶N,qá3舰¿ÿ@DÄòõBŒ¿ÿþ;;Ýçx&(DPÖ íº_q])Kš,Dö¾0[‚bÝ~áò® ʆ2†LµQå.1¢&½Æx†ËcèZëŽõG#SK… CEo‡ÿ½±+… Ô„ïãx`z OO |-°©¸FÇœ_¯_Ïé9˜¶éyÓĤ×_Çû¢¸°]>œ$ä±ïo¬ÛÓ>>–µ–‡ÿ¯êîµ.ŒK¥ø…¢íÆÍ; 9¡¤ 5cð½)º3íj(a}à_ù×þUí„yH}Ðÿ?[ÿö+I·e÷ac®kDä®ït7ùfCiÐé!?ø¢»IÑ(‘MS„Ë’ÌnP6ìÿ¢ÿ`óÒ§vfĺN?Œ¹"³Y òœSßWµ÷ÎÌXk^Æø –c{ʘ(gA׎vUlÛa‡[7!áÄÛ3sñ<´å†,:tËQ/çukB¢kv*•8N<Ú잺 @N;£y©y<ÐÇDŽ×Ùo…œ Þ@qjÊ{ùê ~G³‘a£§Uç:á¦BśˆI.†vli7%šeßc95) µ~~KFL¦8ÅC\·âÛ’uq¬Þ—‡ù{çùì}ÄÊ; zïØðQ¬Þ‰9…‘Ä£"¤DŒÎTztn8%ïH0üþŠ¢ X~y¹9_“èWëµîsV˽ÃE›ë`çáMÛ= êĤÅNnT?†]^&4QX“ŽÓÞ#cº)~yA ØR¢L°¢pÓFœÇŽó²Š>D¢½íâIé§¥UûÌéRÜFKvI¨‡w¼Ìò~à|=á1æDÁ³jÝ÷ç“J+"mÆàëZÏC€=%ˆsD~vuÞ93–:h£ê1„€ó|Òuì¤*ƒPÃR®wvIJH!àù$Þ IÕµ6¤”Q¯—a^˜nH¥ýÖ¯ó›bŽ©8¾¸¬‹?ë Áoso«Ð™>ÇŽûcÇU+¶rDyUUxvFtØw"h¦8ôÆ·m'Ö…6…L‡Ò.vÁ.@Œ£p§ãBD :\ìµ.P0Ƥ;~zL%Øðx|¡¼N‹#è¶ nµ0|ʼ1ká>z³÷sÇÏŸ$´ÖÍ<]˜±Þ)s>_/;çmlfˆ(Q%aYÌyocEù¯þoÿM)ÑE ¥7îdšAÅèÒmIny ` -fØCçáHë,—-¯&®ÊèF‹ƒUÕ«œŒc¡:}f˪¼ÏVplà n«em­aË 4ó•x‡˜¸&nàõ"Ëy" RŠè£•³ŽŒŠ-¯…Ö[i$ê#bŒ·¤™Û´·†3 ØY‚¼EÞàƒßOROs½ó,Âv~êcðôNq€*öýW¡\ø^˜ ± ¦ï 9a~¼.¥øiÜ*@»ÇVP½å¯·â«3ÉL쀧¤v¡HV·ô©ptLì/<ÏŸ¼@Žy=ÏŸe#![²BîM‚I#n™ÖüýæÚ‡ê–/Å*dçsdtâ¼ø9ZrѼ1åL¯`Ñ¢¶7ÆÔâf| s]ªaÖ÷ &ÉÕz3늾%ÂÛ5Àã7ÿ\ÞTHÔ”r·ànÂðúFÜÝ-pH‰™ Ç«,óÞ~€IDAT¯Ïó|!¹€¦k¦´¡îÅQì)%;î±1»¯RNªÅŒöœ·Õ°ö9g.Ý-ÈM p9بCbÀùªp ì_t¤¯Yg\±Ñ+w¦10ä¦ð~u7æDðB\’8K#upÌúð±ôI•£wÞE£:Œdà0§ –¶DqŽ8ªŠB”Ò#GÚ¥œˆ®W£òN÷õ+Äù‘w<Ë…àl4|^ˆy_žj3„DÜ’wÏç7öíA‰»:?6ª¤hJÁœŠ«²ð®íÄ–3ÏÖû3=.pôb@TZq´Ãe=¬ÒW8´V£ƒXÕ6•Á,­7 m"¥bI„à÷\‚OÌrh“¾¿’ꪌ‡d2Øà¥¥äù?¯ ^¸(E·j¿ „-BıƒÀ‹#æ|£§…-0:ªšÔ”ã:|;J«öÁàå0ç`†Çè>Ẹ@ âð|þ„€!îÁöQÝö>Y˜éΖúr·Ùö¿ÅTB¶ñ àhû=íÐÕ»íŒ4ƒ—Õ¶íˆÁB¯ÿzÉ›³u-bpHP1#zwb‹Õ…ªïƒ¤Ôà1-SI ¨ûNp]é ‚®ÎøGl”œ)Ây1O[\ÊMr~ŽÄÌÆ¯w ðÕª;ds¶ó LTLΫ·‡{'Ÿ¬OØ;ÚÅåø\Ÿ™>HÆÆ@òµV”r¡Ör]+¤«±’•kŽ ÁV T™~Cøê‰^›œ:¹Ÿzû§6‹tÃp>u ¤„6 ÐŒZÛ;BLÌ·ðŠà™éÒŒ@ë@„Ïaû1…Xø“ nÌ•wŽÆßEÙÕ9ø=–‹_ß"Vñ109>¼É¢<Œ‡ò÷Téú.åâ¾m+âþùü‰˜ƒÅd‹nñçh½ Õ”“©@¹Ÿ«µ54˜£Ò+‹8/>xóqZm4O›?¢·FÇ;†­ƨè¥R±ZaŸÊ3Ò›;Þ{ó|2“$%ª§¼‡LA “ Àë|b?¾<÷B;qp¢ð9ɰñåU¸§¥°†â˜Ú¹K&r^ù¹sΞ;~bŒ˜}p·Ö™U<;Ÿ=@-öç©}¨¥éuê&øñãç÷ ÎtË o‡Ÿw×ù‚óI„Î}~ÃÔæå|³Y™;&ºµ¨…Sä´!Æ„ïïßcOTÒ®ûÐîýM‰ýʳÕÕv.í,âpl‰ KêÓÙï܇íñÀùMe.¡spÈ!¡Ï‰äÄOøìls"Ø¿¸ž/øÑÊÉà•>0ú@ÎÚ¹}À¾1ëà·?ú çïO*Eî#Ò*R›ß>¶/\çù8ðóçO3kQ™ñz‘_ãBx«’¦u‹æ¹Î¢%'´Žzñ ¥Õ¤Ó9gDg—.€R¶–­Çq°¢^S¨«bçà‘RÀëûy£µ§ÉiÙ±ÝkŒ_Œ§"Á\¹_Ë¥Z[ ÷w]ýöcÿÚ•˜»NJUÜñøÉ|¶p.¥sXvGÀž7|—ƒF:UË=#¯_ü_û6Q‚²J‰b».'oUQ‚Wצ·âWLbûÀûkQ5âÀýŠ3e,•6f^)d\ý¢sÜ3ä§õŠ-ï€#ciß|?’#%‚Ö&¢_„Xf¯0îgà÷8Ó$²Á¨°H­qQíøýŸ¯—ý¨7—Ý(ßOÊ=…í3lùyÕr§ÂT2ŒTôÞQ~*”ˆÖ× )ïT´e¨ÄÑ;ùg±ŠÑ¹÷Å~îÞÁOòaŠò‘Y#Cyãî;Ckˆ=!²åøÚÐ+߀ó,\ÐΆ×UÞAE†CNà?œîW}ÁMîqò¶c¡Á½æìøúí×ÏÎZ ÆÖ¡âÈRMZKÑ?འ¦ 2:*¥­£ÚS½4ë+ä´qÖj)ü¹>PÎyL™>ÙŽ¡ÛêÜFKÐ[^ [Ð.?/5\‰-ÜEÍlEépÊ»iàçû‚}ìv~ù%ô‘ÜÈpIûG_¿¡÷Š×uqN­vÁê REh²»iÊë b™/÷(ÊÌ #Ò¨a‚fpìU‰}qËts¾Ü;ÐH—#f7<kl„·:Ê'ºšÇhT ëBéðTØùìnãϽ.›ŒN8ñH{ÂT0ÍO b,×…†Žà™+!œí@xYçã@ù~q¼eÑËsŠq£LÜàm§&!F”z}9 ‡o†¹Í!Fø@OÅdêJ¡ðctÅöØ™–(¿ÿù°k¼Ù PmÉüî-F”1 :p_&KÿB+‰¯žjRQ¤ÄÏYJ̃Q]ç=j½cDÎÙP$ÇmŠ]Eš"ì¥4cõñâTÔ%‡Í'hÌ1i܇òú†”7Ôë‚K‹_'æ%aªëìq²&*üÒ1$ÜŽ»‡VÒžáÅah‡Ÿi¸Î‚Ù&e׫ýϨ>ûØ÷z}#¸Àbºˆó™˜:¼‹ÈyÃëõͧáÞÏQ!¸Ì=âò_þËÿI(C”ºwv[šª©^õ6󅜩ˆy? s(‚sð1â,/.ÊuÂMÇ#Ý;1ÉG¼z…ƒÞèŠièœ#gúå…è7ÔÑ !l‹y‹½dð½-‡š„”—ϱíPÇqü0BpÌG6šdp­UªF½e¤·ª‚3£#Û<µÑCŒ‘BËp޾_¬ 1ÔR¹ÔìùAýu^TŒÙÆÃnP.§Š×uâH;ž×Ó‚Ÿ€´óRqŽ‹ü«ú¦âq<¨ühc­ÐA{ŸfŸEG^í€Õ…sUÁö{ºpŸ¶í‹1¨õÄ{žï8;Ýv´RÞ™PN˜ÌI®:ñØx]Vù½\ìn© ìlïDc®ÞkóË%"¶ˆÿ=  Š/F6x»Ðï Ñ“®+6jZûYUó4“¤©½xá: ßQyùŸ'¶íàE‚‰r™ZÅ “«ÃSÛ½[”¦ŠúšâñãÒ.t<ÐfÃf”®çeë+ki/–Ab¼/åÖ ¼³Ã7p¡í,žàjvŸ ž´Þl“ZR$ØR »Î‹£•Jæ–ç'­7Eí$Ûqßâ-¹wxåš~ŠÀLjz¾BDk…Yõö¸yqðÉaœ´ ô1Ñm G)tµK­Õ ûKz6Ú`z%@RÖ•©u L!9”g꓌B:/Û´mwG¾ïßÏÇcGy¤iØŽü,ö>ø^´ Á@Ê;wj‹¬0öíóü&WLþoýÝÿÃ_±nBÇN€ZÎí,¶Ð͈¨¸0=ø˜ 9¢s¢ÊÏuÊpê _P*Û`ï=z«·þÚžŽÌ^rµ‚V»ÉI¬ôpv뛈ܲªï3‹šìèáD’3F“3æîl&m•¢óŽ¡õ“Ý;Û!„Ûà'ÎáñÅ\ƒh•ƒ®”±QË/—ᘛLäòœŠœ3sž¯‚Ó™”˜ V+g¥mrtp^Ú&BÌtÖº@ÔýyÚËL /Ù'¤h3µlÜßøà-ÇÅ`’çhɇ6îšxŸU½ÍÃ[ë½Ü³ÿuêïÇçIÆÒ=гÎóþ7Å™ÈÀ,Ìåýkœeïÿºî̓8öãN‚[ ØA眇85yôŠ]RŠcÏ àQ}ïR@lÆbÈÉJŠ\ ‡Þ1xÐ;„œ±ôË‹±(Ñ:§¥Â´Z1v¼ü–ßt^ëBäÆ_/ ñr.z,ïâ¶U«õ$ø2“bòïu“œ9O™/T¡ÝFFsB¼Ã–7L;„11{ÄœïäÂ1ZÅ‘ìN¸#¹wCKNì×-/f&ž>l1ïѧ9ïw’à(•!TjfZe'é0«à×ùÂTEÞv SÊ…Þ:;Á¬câÉ ló>„‰‰C'‚©ÅtsÅ ÊEaÀèTNi¯˜c ô‚z±Óh¥áºžT€Ú>°q£šj«ð>qÇÖ•>¢«Ã§€³À{´FWJ £ó°B%äùz¡µŽr]ð!!æ@kC ±×9Â!x†å¢šTÕ ôqg¸œç Õ‰ë|¢÷a¾1 Ô“ëõrÜ¡}¢]jár¾”ÊоAJD9/À;D[Û1ÜïužìJV±8'åÊçIÜKçE:ÚÀ½1 ¤” ÿŸý¿ÿWm2ÑoŒŽ×ybŒÞ+ºÅr–ÖH• 4óýøúA†½_q³6;sÀ»uÛ~ x×õD½ªÑ”§ªŒ…íüðwp}ŠT€Ô‹Õv:6 U“r²Ã™ó®1¡€E—ž11æDŠ1G@sij],ó¾ŒF§`öN¿€|Êy0—B>Õ4O€Ø¼×‹çqp¶<ëØ¶ï­ 8çðýýR z¯LÂS^v1eBûÀЯ¯öåZökî.ÖÞ6@ùÁùúzÐ3”Y×1¢ÖFÑBggk¥w´Æì‡…Ì_nôµ x§ßm9C@EÚHUñ䪕Ç×G~æžÿüµ. @¡÷%!÷Ø‹u¸šúkq²>ìÂYýB;8K”F—‚n}Y—¹óZp4Ñú°C 3”ÉYñÙI-uÙÝ•Ûv ×Ó¤”fšµ×f±ÛÄ$³OÀ¡ª³˜€@ü/¢2Æ*÷Nüöœ†ÂXÈyÏâ 䯣Zù­öZ$bó"XN„8 „„騭ªˆÅ•6ìÛ ô‡lÛA¦ÓJ:ww´)g~®Ý*ÄòIÖrJî8±ïÁD)ƒ;¤•¦Iä‰@ß3x*¥Zëxv$!:ô1á&7iªõ–Kgû[ÞQ®Fï(õ¢!X€ÈÐ ]DΜåuuSÊÜ»^'ŽÇ.x¤áq(yOˆ1#m‘—±ÄïIɾ±«‰a#\²q ÑGÅTàþøw ´«ÐÐ7'½*!â|½ðx<øz zÎ\p¨gÅu]H)°ës@>2jŒýv‚QéBï…YIgyQM7 çgϼ š¢ÖR&"_e"ls4LuĘFFÞh¥^÷gX 4ÚƒIf©ìÄbθ4Íd~ !›J'úœt¶Â³JIΡŽ`²¡dÅŸ—¡Ízê-ž4o;žç“^’¼13z‚78„ù¶ÿèc"xίx7-ÝšÙ ß )SÈ…:+ÓÖ*‚§iM¦¸¹€­›ÐâY¸‹¹JåÒ½,%Ì\û[÷û>:$.˜d•¿ qO¡8¶çyqiè™ 4¨æŽ •x .©™£>î$:ž.ûÆÄ¸Þ;ðUÝ ÕÎ;\'s!êhðÂ7œ•ñäE ÌNO[Äõ,È{†÷¯çâœÉÿu)`?F*¬Œ£Ü^ˆÀOxß=wމr=éYG⯊޻z¡ƒw{(ÊoÚˆÑIÀ¶süw~Ó÷b%»}=nß^ ±Ÿ/ÜKÕ÷—œxì_ø~>ù «VñžKÉZb„ ½œQþâIÁý3–ÙO˜]ŸØÓ†sž˜r:rÞDí¡ŸÌwƒ‘¾ƒñ£·˜F›“{Ž“>Þ‹ :×ó ¸Ýá>Fª£¶Œ9•f?pó8xºôÇdE¾Lq@ôŒÀÍiÃy^¦J2Q €ÇãÀy’L-Jî]7ï"쩺;G͢ĭSbNö~ì÷8Y$G©c?ÒÔkAmÁ;$IV‚AK©p>¡Ö {>P挭m¥À{ 凌ë:‘"iÇØØGCp)odÊ©àëñ…çë›AaV$´Öá ë±YæÊ¶QöÚM×Ë5“C-'Ñó)âõü n0¤—ˆÄÓ/´<!$“€Ó±îx~?±ôv±€sÒ–ˆ‡z]Íççu½xv:Gq‘‰BˆWŽëd!ß_NèÞï½qW=ömÃùd”F΃ݞ'’¿Õˆ XqlCÑ9£~c8пÖ. ÿøÿú—|™b¤ÂáuÁ{[€ ì¿ë=·‡*¶íëzÁ GEbm&œ ›{.J>]»a‰Y.€ZoÕ¸?˜Ë,Þs‚8“¨.*°ß;çîÅ  ÞÂí-mœß¶©cÄœQ[”Ü&UEÎLz£Ó˜ÄÑœ7ôÚÑF%Íttìi§‰ky>¬1»ìlô0'M=®äá¤ÄÎc:LuˆÞÙ•c/ t>ð²TAÃBl¥l[B©° ðñsjmV½OD'¨£¡zôb¥Ü%Ù,ÇR9ÇqÖ‘EƒÌ9ÜlEUKÚ›ˆÑ£ÕB•ΠÜO„!¡Gì‡Ç±pÙwg³±xè­@¢E([fCÚwœç7ò¾‘±TNˆò³ãÌsœ Ûè,äˆ^h†]PÎû!Ra!†=oô™œ'%å>³d¹<è¤1¯?냺¾¿™ÉÔ@‚"P¡ÈdV‹RVE ^ÏrNpðôUÀûmbt;m¯ëÄþøBo)Sf¾sbö/šÚRLï³!àVñÀ ˜ïÏãN¡f…ŒGGC Þ)FS„Ä}‚ÊDç‚]x@_ù.1“#êè2!‰:±?蜟Ãâ‰û¶áº*bЏNî- _ƒç¸¯œ…&Ù>¡n"H@×FfÖ ·Êùˆ-8¼*!ŽÇ¶sŒ(ÁQˆR·Yq• ÁŠBðchñϽ ¨§0´‘´í½ƒüãI¯›¬ŒfçFÛÙ‡ÀÆ£7æ]‡èëUìy_³e>û¶3ÏÚ¨­cr6Xk»-þ:;\ ˆ!Ñ%mnhŽ{D’"’#ò£_ߤÁ¼ç¸gÎ$[gv€7ÌqÑ)eéø—øåã™åî÷cר|{i­˜%¦TÄ0šIG'å–)ó’WágIŒkYyXkÌôÑÜUêÒä§Gf¾¼éï!Låë傸 £v`Xš!„¸hû~b`Dz=p>O¤#ZFÇûÌ)Á;çu"   !¢Á~Î<Õ(•Ë;«œ5Bx¾Ö{/¦7烾åÌ Ú:ÚÖ+¶”1Up]/¼Ogf{Э#ÇŒrÎx¹ºeò³_!zŒ>‰±e9óÌmÒèèÒç|r"䌿ý†ÿÿû·Õxw»n'˜ÐWjÅo?¾ðýý´Kרe׬¹çívàˆ6™ëÂqïËÆÆ³õ_:Œww².ÇrwÓ.x›ÁB¼¬'S…SË;R&ú²CÛߪ¡¾¦(æd¶Æã¼’"-)&KDÙ·9ú´£d;¸‰¡zS†ä´¡”‹¤á%OþE0÷!“^?ª|¶ ·ˆN%°} $·ß¿ÿÉ ®ë §æo•Ó‡”ñ|~óÙ˜ÍbV)µÎóû~Ðxç=BÊ·ÉtKMÑ&üH>ÀGŽÝJm˜½cÛw”³Z`žÞÄR T'Z™èZ92TÊ^Ó–P^AÞ)Î)ç Î[œ4:–Ñz?¾ˆ‰‡G›d8Hph£ãëë€E)ÜkLf­Ïú:qøÄ|’Ùé縮^ö\Æ@ÔR-•£Ý úmö £V3ò}Éۆ뢛OÛCÝc-îÖ‚ížo¹ù°üßú»ÿù_‘½äœØØl—¾½ÝÑP¦”ÕRùÀ¨Íƒ½Ø¿£è£`K»-ÚÕ=S±?vçM¡4PcÊU:!PxOµCŒ¥wè$¥²ŸT„Íi.Uè;ïàþAõ}ÞÝ:ÅŠsµÛ0}8僜%/÷ô~d”Ÿ':: ˜öì½b6*½óæ×Ñ ¨µÛ!½.&‚ u li‡ ̘`«êb¤tÖê ›¡ÂñŠ~t.ý€‰¡cÒ•Ý&±¥œ¸^'w/âáLJ1L¯Æ4ræ|gELü{㎾¾~àØw¨P7ŸS2Wù4ã™ÐàhlÚ2%¾)eÔRЬS+íBktEû…E±·!„„21ì—ºXaB§i0Þâ Òvmt¼ÇJâc¾üÄëõÂÿñ3긺%ò£ÃM5Ú´Þ—ü\û¶!z*ÛlØ÷/Hˆ9B-$-æ„ dké½<5Î’ö–@C§u˜–ÁñÒ"/0z–4g>OúQ­ ¯Ñ‰U!zc,€¾ÕpEºÁeñ˜4øJ †”f£'v*zçôŒÙ1Çû¢œ“&Ùã8îêT‚ƒWJéSÌ,,— Úä·Ñ…·{I„;v«í–j8 ò¶#øtÞ‹(œ‘±cŽ(õ´Ý‹bÔuÖAù  CÕû^YÔŽÑq|}aVÛg?AŒ‰ÒÙVÅ:mtæÎø•‰9šM@:öü ÷A'¦:¤-ܲZÒJÐØù¨ îVÒAõ•uŽü\r1»b‚ù$r'±*Ü 0£µ‹»ˆÇƒ^-ÏÏÖTÁUN¼¾ŸT‹‰â›m:†Iö|âIA^ˆ|XpÌä¸kt.ßöcCkDTOóHÔÖ l½Q!t_ÀP”ÎywmΖ«¿”6æ¤OÂ,ÖŽYàêHK¾ ô@ß '¢¼xg®/i(w:bŠ*ÅGêÝj’¬‚¼£yuâ·ßþßÏo è"ëÁ°‘*µöžÙ!­1Å-ô=vÁG(ˆh Áy?uv¤È=™é´ßßOÄÑ#úŒï×·ÍØÕ8rÂKÔ<Î ²¸âp–Ǿ3-e$ïišŽ?Îr1{Gy;ÐjEÈ„ãAHšÅ`>„Å’!æ„^/`8ÐlÇȰ6£7÷4í®d¼jR{1Hà˜)EŒÚoñ–¬6€ú|bM—2õcØ%£óÎǘBÓÛùzÞÆºÇñ@+ G:¯'rÚÑ;Ç?ÝÐ5ŠJ­€ÐÒ ¼äœÐ ǘ¨µ`Ï÷³ðJ?‹¨0¡tRN  ‡£xg)A\Œ,œˆ»Cï`ä±O, `q³ !7§Œóü ØâA3fŒPQÌÚ!Þ“ª`K|ã cbΆ©ÀãØÑl“7 ޼¡´Š"bðCSÂëõ“‰¤PÛFmì.G»¡ˆå|áñõ^ßߨƒŠVï),ÏÖr•wÔÂâµý_þÕÿ[½÷(>Žn\(ÕûÙGö®òDÞ¾P~>á2ƒ¦ÈÉgnÈ‘´©³âõ|Âyœ2õLJÚ9&ßL6ƃ”­÷: Yf†é!Á—–^.Bƒxc¼8l‰]Ó0ñyžë'Ä~ fòÎø]À@¿±ŽÎl±×õþ:Ža_“ªøµèXHJ·³ÝL|"+ØŠ$ƒOìˆ:¹áOu–šS‰ØW}bÛ6Hà›f)Ü^8Ò·x…½ñÐa4pŸc·.l}K¿½¼Sñÿ"Q‘ÔP8vx”~ᱡöŠ8žºžOäÇò¼0dâñøÂóù‚WÀ'W%8çáSD9Ÿü,ÙþÎyé÷[á0”^“`²í}ßïå,„û²Ì2ú˜ŒxŽ9l8_ß8¶/\íDð—1Ù‚$1;Ñ<ÓýZk‡÷Ž>棛 ‰ÝN s5)ýž&ôÌÈò‚›(•§”6Ö La²„Á‰6í5ÎBéeê¿Ä3bÛáÆã:‚>ƒ#.ßÙ>°[äðì]‰Rm5…ÏnJÞ;ÔgLítì;¦QJj‘Á) …ßè£9Ï'2€íùa—@+4aV _øQ"ÜSÄ!ºä6“î_tªÅ]Ž?sÚ \gÅtùzuÈGy^"ž¯¿†ø@ïÝuáØ;…uØûUÌŒiYjœÊÌNõ×ý¨)üöwþ÷UjÁ:;æTûÃægÌ'ž˜­¢Ö¡ÏÎ7mÂv£u\­á|þ1šÚE„;Ut5Y,zè½ÃOÁI¶Îè¯"TˆÒ³1oWó´G%šx-ùh.ãÁ|™|oí<Æä¸Œ*ËxÐ¥ô'ØØ 2Í¡j müÏC¶¶ ½5.½C›4z‰ðgqº|Oég˜ÊRN™_Ó¶Àº>J]o3žÑRB½þ¼v„àQ®úË µçSú@–MÚ»Iï¸ÓèÅLsK;̉ŽÏ¿ü7žD½tóVTŒÑÑJÅì<JoèµcKa:ô9àÔá¬'‚\×e˜ˆ†m‹Á#¸` =Ê»©°ãkµ.€µŒ¿»¯E0ø›X7¶L]|àˆ`ÌI$·2¦aý•ň²Âm:P/<è¸çZUÕBú@éu4FÔ2âÍÞSæ^cIÀ?eÅ÷ŠË.–_oö:A+¬ä›Íæç$sÌnJ1Sââé—hœµÇD/†ÁO½IZ9Ì?•{8[· ÙBÈV­s£ lüô:¿b‚­WvÖ©õ^9ºæZ }v¤œ!:ís^öCÑZaq(Äély³Ï!?/)qOÆî‘zÍ*r[D» À˜Wö¬)GGìØ {î\ðpèrO\ÉgÞ‹ •‚Ú BH&§tEEû€>* [̈9Á9ApvŽïɈÊ;Õ¤S&œ‹FæØÍš©ûœæ ãà¡sbû¢Bmô ûÆN|}}A¦C A×nFÇ•†9gaȶm´Z´Ž9R,½˜QubŒŠ1ÎóNƨpÞã±ï,Æ#¼©ˆ$­¡Ø..æQG[FŸT³ù…­bÁáÿÎÿöÿôW:”Õ‘8«ìhorŠ1zÄ}£ä®jYMöÖ0êD×IVSbÆðÀDp‰‡’ËØM“üàA¾op¦)­šÞ\î¥ðœ“™ê°‘…ÂÔ<ìæèhµÁ‰½ñ@s.à&¼ªA+Jí“»‰©ðyUŠ"¾~üÀhôÔ³ Ö‡ðâ-c÷ŲešÈº¡«u¬Ùµ-ÉÅqtÐ,íO•á~÷¤g-ßѲ€`–‚6èüÝ6~PUÕÜÄÓ²X} åÅNY2†ÚØ‘_ÅqÏš±‡@eÜ×× …¦Â4(0•™A\DàÍ=­F¡«+µ0ýl ¸(Œ™@Ê G>ÐkÖ”Q¬íUÌ)øñøÂùâX§ŽF¢®-Ðu2¶ý ÑG&®b’så šsЈ9rÞà|4†ØDŸg›¡‡rÞá½§pftÛŸMøÈ$FS1ß [OȘí.ƃíÌÎë…îS@+‚Àbí[ÞÐgµ‚Úx~>â86ô>¸³hÅÊ¢˜„Û ½CƒI¥?¶/œ×7†‘)®RhH cLÈ{¦ úC¬xšsÚ%n{¡…Áyÿ·ÿÞþWpzÒåjwhLë:©À(¯ Çq ÷ë–“Ï[u:ÜÙð`b™9!ËF”³18ëãÒÆÑT;DÜDL5Sµ*vÈNK$bÈPû÷‡EábNl;•âWNî$Cçy9]a‹²NG·w?þÄì m4»Á•åÖ‚‘åËà5´ŸƒVJÐ%0è¦Är\ªNUSQÐ ®·ä÷½7çÞÛKÚ«³e=`ç¶ ÑóÃÇ¥£»g|,‹íci ˜(€xJ[A4ü0¤ó´îÃ1˜fªûžSmémÀ[2àe¨ƒô¡H)ã¼^è¨õBœ½F°¥ ï7ÊC[Çoò;Œ:-ä)†€œô9°íæäþm -Ê[àbºÇm0ŒMmZ»]Ê)&lÛ†˜2¼ðÂo­ß£•>‡ «ÄÆLÜ‹LP2:Úb„Y=èe©&ç“ã—±ÕÊX¯Ö‚x.|ЏÛ}N6ÕFÃÄ$ Ø‚UœU©…³lÛ鄘ùúŒÞ&Zo)¡_×Ýá`¾ÓµO`N‹oðˆ"ô&Õ`N¨ÞQ¥x!xoFAÁyžôGœK¹˜ÿáx¯<•…Y³‡:‘7î!0&M‘¥¢Ô âZ(¬nÜRÂuVlÇŽf‡éU/ˆäq•ËDÍ Nú4Zëhýä>i2¿û¼ž˜sð0×­ÝÒRšù±j»0ÍSâoµw޵^¨åD/X#›–ŒÞ0Z3у†‰éY.†Å‰7äM1÷dñãÀ4i=/S|5Vûƒ~,€FÜ7xb$¦spÌ8Z)ÌerÑž¹1?å2uåd×?À}pmÍ·rrðüþFŸcÔ;>üñØ„%{Nóî‰ÅSÎ3ä<)¥•ÉiAï[ ä\æ"¥ŒëùM\y ¥œôQl1ó8 ›z4 °"®PÏ>BÄ~è£ íJ;¡u¾âJ6>Ç/\†¥L}~m ûN— „3!>§m¹>DÂᜳÃršS•¢n>„; ¾¨ m¹®Û¾c*»™ôQ 1ìÇÁQÉì7Cj]&â0;s+À ¢/Y³ñýÀ^¯—µ£<Úî{‹Mµ*iJ0(eÖ$¨‹cRä¼S6óÆLû{s·jÈ FŸµ ÜPí^˜ P8.CiW)¸ÊÉ‹evœçy£Äƒây«BÕ24¾_d’=žrÍZ+Å\ ç9ê'Ĉ؈pŽŠ>;j¹èÈ­¤šì³r¦m™¼/êZ­KX^Ú@ }MyìòvÑe¿·8WK ïËEoÉß+˜;|)ÑRJ€sØb6|L…›Šë:iðz /SX7Ÿá÷!Î8뎻ƒ¸ â’ü-ÍçwãŠìœ­yÏ 9$¢Î[Ek ûãëVINN¨5SF2ìhô o˜ù{dÖu'ûcÃõªpžÝÝq˜£aÿñ òO—üµÁ©¢uEHö5u Ò]y0ÍϹUGu$>0=ѹ„¼å;›ÃAÝpIbtì &p>B:EbÞ¬•E³?¾\@Ú6 ­sªBÌ7“Ë8”1°þ,êR¾-ñJrFÅp@p1廀[tó•r9ŒBÜ:CêD)ÇþƒQß>³Ë4u¤sŽçi¯é8‚ü|û?s6¢ƒÂ‚b›´;žÏ‹±ñçBTüöã7ä-³òOÿ»ÿ¯RKíQk5SÄë|b:Á#?PÎ1xs³FL¼2îÜ€Jt¼íI&èsÒ½«£ß,¦˜·{Ü2ÆD¿ŠÈýÖÔëœÀ«Ðß$K(é¼´ö³ܶL¶î8zƒ³ þ,/£H¾XIÚ"ÿý@ãÞļ¡õŠhÚüjq©!0Ùp!¨o¡Ð$‡Ë p–Ŷ¾nEk«ñŒŒ¤+&°˜ßI$¶º¹­aUKk•K_ñT˜©ZHSf n‰@L%TJRyÞ«É8;»Â±Ñoµ˜ÍÛ8¢ðTÖx¡ˆa*«UÞó— ‹¹›“.ãI”÷ÊÍcö7/%ñÉH¸¶ûÁá~—ï ˆ›Øò,¥ÙTvð~*ªU™=àlÛÇ„Žöñ—r¿U^£ë-Ï9£ÍŽè"Ú¨È>±z–‰zÕµãæ¯€zŽõ#;e-9—Äoý,>PbŒ ­}ŒxÀM{fìý6Åä2•׉üÛ{g—Ÿóa{¨†3Õ99säœQZ½˜1”óÂcg¦$MÄÀ°¡Oމ˜”5ŽÑ ýñóO.žUÁ胣ÜtÅz¹Ç¥Û~àù$œé£øe‹‹9îqGíí=€-?PÊOBÎwwð‡\fãM¾^¿»Fë«ç˜rgx1xx+z8.cõÁ79¾dˆSÉaŒÀ#†`~-v¡¼Ä dÅ¥œPË…9:&<‹fû|¾%òVÄÁA±ëN8†VS4Í¥†5ñLÎ;_Û…éé{~à¼~gpI¨}/&ÚRF¹^¤%˜Â5Ä µqÇbâûAÇþ…R©à›ØüŽW%¼ÍÆ‘¹izFãÈÎ ÿž9;äOÿü/ttf‚{‡ýú†‡7éX·å-?(ÁEtálP xÏ[éD]¾g'sèÙc2ʶu~HWV³@áÔCs¾§ûÚýv.Ã)¨{öý«\&g“1âužÌ]6]5„_O ±Ò;ÉkI(„]Àù|aÚ¸kΉ-'Ð=Ï*yLjÅiˆâä}dû3³ˆŽí“9ªçmntÞs 椸c4KmœÝF1b—,M“|xrÙkŒvc9Ö/ïݽcÀðöaýÈ9² oyéîVÊ`UÙÀý§îqŒÊ¡²ä–wå&Gƒ€YôëOzÀ´Ä°ô «öüû²ÚœIÜq®ügTFM"=ÄÝ.xè€z¢Þsþ=G»ÍëûÎ`,ïß•LNÍNÃÆVJ,þTà¬/ÈTx]/·ˆ¹Áõ˲*8ïÛdáaàè5™¿þ¬Ÿ¯/Y‡Y;ó/(­``à±}¡Æ£²Ëá…>£œ!`–Çù¢wå¬Ú÷¶Ä òò"ï*fD¸äq…}œøt‰7l^ç ¹"«sJhµsÖ?)û¾^…q҉ѵŸ~IÚÀÄ3~}çˆfÎFÏÓèwXXÌj)èò_‘c²Ëtžg±?p•‚”™ð9ú¸ÝØŠª}ä²¹OÐÔÇŽ¹CM6óvu_ÔRcäÈ·Ûét¸à "­À¤WFŸ‰¼=ˆ=‰DìpoɳÞÃM‡«œ–:QÏ iÏhçÅ8ÞÀ}RHçëÛ@¦T4Î99roS;bÞ±…Œ2ècÉi¹€›/eù×õD¶™11@äÿ²‹kΉÇñET¾À3ºà¾¡øÈ‹I1¨ºüÓþê,|DÐëÀ•XcT¤áÜÊ,'fúUßÁ÷)%¦:‡'ÝãÀ\»°™06Ž»Ž2¼Ñ™:XΆc}Bmûr]œ+³‘yÙˆUßþVÝ,¹¥øw5LÕŽ2 ë¼0Ç„‹¬ˆgD‚Â@' £‹™8Å!€Ë?7„Ù €¬ì¿µ,USÖ“HÜC„( X„æûïùHåÓåÄ_±¤Žö•‡Lâ,;07&;qtßOË QÎðÕ¥""Tx[•€fI“Ê´©ï³äC¦@•“IMÅ’z÷>Ê›Tx]d ˜ˆaõ'ÌÀv'÷ß)Ív¶L^„Þ™,Ãv)|ömGwùËdêÞð(vÀÙÄ£ÛNä躅bñ=ÇÝÕKu^]4”½Cé›êmÀG¾¥”_ü<Û¾CâD{MôÚ±?ˆbúÞ×=¾^’þå× 1 5v²”Ëòý ‰HuØBõwC8;šzuÌn¨{Y8üå XÈѣ쳾dÀìäƒu¿«Š!bb`N zîsj½¸›¡UÊ…%ÞÜ÷ƒt ó™ŒY‘|æžBõ*4Ûˆuߘs07æØñx¾^¶9S¢Âøû{¿ahÐCS­S4gy-wdÅn€Xçr¨¥±K·®äºN’|çÀ¾¦\›èög¶˜qŽ bêþÑÛ‘1*}jÎ9ŠffE½LÄâè» ÑßkùÓþb4×óÂ}óC=1±Ç­5»å9÷öžiZ¬’êU1f¿]Õ"œóÍ “¬= ­á,û¶£”?!¦êrÁ ª°ö)Úù·É³ëm\b1¬Øöƒšùóiª:l{[‹Tg@Àeáýþyø·LvׯSŸ‹ÐëjU4%¨c(Ò¾s¢^¤iŠéÞaFAñ´FüC+6fb¦;+Vþ»"D&|ÿüÆñõÀY G0n)ÍÔÌkàe‰iÞ–q¡]âü=[9æÀ…¿†n\¹·¨Ø¢wD|Àl4’ª’(¼fT!ZZš±Nœå¢XúžBoÔSîbâ̘™|9ÿ°Âÿe–ÜÐMNÜx@ƨc²« ô!`B}€ˆGôì_µ }d ŒVßôS[ýÉßøc¼¾Oœ×‰´g £”Ž…€·CÏÛâØ­Üv,à,Þ¤´jwÇÏ1áõîJ¨Žtªð âM¡˜ÆÙÞcQeâ¥.›I³'ƶËg1§ðB½,Éþƒ™ç¯ïo8 H{”é I³1zòÐâ7)Ÿn¶D)’üºªònãÄ^m9ýFœ¹2ó"DÁ«^TµaËçñ6Žš$?DVç‹pëƒÑ»_/{É< Ãç“PMNþ±D âÏ€1n䯿)eÎÿM "f>¾…3Lq‚ 9c.°ôÞcšßEÐ[…óñ–Ã%=·ÏåfÝí(—Y <†VE4¦¦`¹Œã-å…Çã ç÷ ˜[T+w`c2¶!…„)ö}ˆCWN#ۃ߃ð3á=©Çct¨²kžç‹¹MÞXi Ù|NE~<8f@ÛDiMžPªåÄó ù‡ÿìT~P9rr0WôèØ÷¯'³Ãe®ÂQ1§š3ÙÝ$Lqî&_2¶Sq™Ù-ˆGÚ·»¶›µº[9 ÒáýF<‰[æOº§¡šu*U(:É÷wÏsë¨H!½34CÂU.¤”ù£OEô¯ë…”z%³i*[d@ñ|=ñcÿÂeŽN€oB3I_ Áu~óãê½ÍÞ-‰npf;륶ÏÛh?'†p&ß?dÝ"¯tê¬Qœ€zvëC;ý%â1ÁìífFÊ;êyaÛóÝÕ‹i{PI8ùž®±ž€Uï2É:SòL±ªÞºœ¸›sâŒÈË £ÚÚ}õ¯÷pßw\åÂ7Tð1m¢”‹ÍĤñ±zWrŠThFÀ»ˆ9•Òcjøàî=”Ú”ÃygÊ9îšV6ýM®°˜fQF0ˆ ¼KèZn×ûž¨å$ ;RÝ#Gnåù‚šðÆœ Û£–ÜX(÷:l¿ïP=çnòõÉÇLhs ¾®»‚ >š›f­8ScÜl#x`‹ j³E…Co À@<6 ™œP× Üîñ„ø€è$uÞãùü¶‡ãÁÌŒòâ¡åÅMƵ=âÍxÀ-³»®bq’}6l) µ_óÀk+U“sR Ùÿ¯ó¤*É v\ȵ{̶S¾tŸ‡>wÞÀió£p6VZÀ€sËÛ2eÏyOxýþ4áĂܑœS[t1J«ÝÖêdí#BèGÃL×ïG{óúµÔCÖJ³ÛYÿlµ9†3±ñšÊ4/¡°Sò Fgm×ç+º›Uåm/ÖÚ0‰øòR¬V‚?Ïz=e]ÏBñšðý!71%–_ÇUC†O9¿ŸvyNSQˆ2úÇÊÆjÁô-xB,e*Ô¾þã]uç¼C„Ÿ5±QXL4ˆ•RVg=ˆ’é]íðsèÓXw¦Žm'ÈÐ{PQO¨â˜ýM2]%Þ¥/Y»…ƒ7MÁ9ä´Nའ^s › \õõ…\G!$3üN"<åŒ  HGF¯ý–SmqÃNà½N—Š-ì+Ò¶¡]'¼zt—¥”Ðm¬ª­y™1ݘŒŽ^A–Ç¢!&RœC4²÷&:‚©ÅÜò}@ѹä73·ƒ7êø[ð“Ó/g-˜³B\2Â+w'[ΘKŽâ¼88/Ö1N »K<ý¬i¬O`M54JJïèCÖÝ0òþÅ_¨Ò¯×Û¾a´†¸gxu¨8Œ™¦,¶Q“ÒEk'[g(|Ê$ñ:!Ïþü>‘ LŠ!"D™lןO¶dµ_t˜ ø«i#´o.±ŽUâ¿[Øëè)™ësØH`I*ÍÄäK)£~|tù±ñ¡ÂRd*+ïÞj¯%h÷é6¿Tb<–cy%­©moß…¥³ Ô*Uìyë¼  +;¯ù¿ïú¼+¡Ûcà9O‡« ˜†: \z»l}ݵ@—ÉìÝ~žÅ¡ZåÃØûìÄ=ÏçCk*#ÿ¾Œ¨Ö²kÈêìßÇ2‰œÜ­4Y xg2EX·{à|½>ŒYö·áÁäþÚÎÌxÿþÞz²O¿-¬¹ù@Œ8‹Öu‹`D($ƒÞ*¥S²:®r_:|«xà‡@¼yöôè \l´ÇåóÕ UŠëoðk±.6Â;%c³n`Û3Ê«2¯£WÄàÅã¬'ܤQL; É”}‰]"F©¼ˆ•(”ë<{#‹ûŒyÇi&•ÿB@Jà<´9±o™{u;óA‘¶2z,ÄÔüëÂuäìE¿aZre)cv<Ž®³î E޵K²·,Ĉè"º‘&¦íD½§û›Ÿð†sºõŒâî„¡æ½àç>ÇÝ€’ìÓ·¯ÀDyš¤CB^ºLx8â†F·j#tÊàsŠx½.îA&³jž/+Àkôf_š›×YÜR0’Ŷo^¯'à>-¯cBþÑ¿øKåBW߆0$j;¤H¼B-4è!„obÂ;‹¥´:F§HÎ9¤œq•²ôRá—ò>ò€ )b”QÐ ¾µ6 UDá‡gê„‹t‘{ç¨ñ×ww’’gH”,õ޾Ç"žÙÜ£Oˆµ•À¬kþím´±å„éêóx‡,Am²ò+õDÌÊëŸ"t(õóN!ˆ6±Eš»¬ÚÌ”5'$&“&w‚úú:ñVæŠÜ|~öôsðÀŸ"HZšÝÖA3y¸X˜—,µ‰Ée¹Ï˜÷˜€PE3ööiR¸ó™yH{X¥‘^ôu¸ÆÛ¤Ôojì[ D>–‡sJ:ð}žß”6ç2œ„ÍAÅÁñ3¸™6ˆ[¹ –5³ÆVÞ +Ùm,µÜè&¦ò–Ðh <“Ü~êœTî:æÌ®a¥¾loö©Ï^I‰I‚÷%Ê ›ÂNªêÄò°uNH\/¹ƒt(~I)¼G@Š6ÄDÔG+ÁÈÔç÷ɯä‚)ê>§–LU3)®nÈá‰ÇïÌÒV¸[µm–™µ”Âw”ú]ì__x­4Uz|ˆŒI:¶¼£–‹,ºZ ³cÛ¿ ª(ý‚ îê|tƒû„Þ*¶cãa3‹.m¦´¡´×ýõùYb÷]BØ<0<3q,Úð>¯åÞ»¢Á3YÁ{çᢇ(ÇLµQ)Íi㪩Ӓ¢=ÏŸjÈ»«½'•z¿ÙXûs×ê:rz ”—©1íÏ{hÇPà8\¯Ø}NëСbB$Å{ˌέ5*ˆ)b”%Íó7TÑ׈hÃoû—ù8ÞšL˜iˆù@ð¯ç7ï¬Í2ÉjïØŽ¯×eUÒŽv½ pØóöñ^åeS+.CÜ' Ë20mâír8 ¨-üRŒlTL^êÇU‹©:ؽÉêb Ø&Âý¡†µàsí >T`‹Ç¯|¾ŸßF¬UëmÇ÷õýÖ¼[¥²þìû3¿ÌqöQÿ”œÊÇåã`{ÿa¶ ŽíöœÑ” ê-3rô<ŸD’Ø~Ë{²Ð¦ß?v«²~ùûåã¿®ßÝß›sÓ\ÅŸ¿˜jû¡àáÅû–æÊÈ_;Î烅EMÌÚ `Þ2gõ¶¿mÿòVºÝUòôËëËr#¸óNV¸˜ òvpþls1š…nûV‡Zk1€fâ»RD󗼑ùB\Fë6Ni¤/ˆ£:ÐÈûJrƒ÷ Ê´}kÅ<9eôVï".åĨؼÇèµ^8ޏ*Ç«9Ò[æíðñ¬E­ KÊ3gP“¯z©æƹòûî|޼ºB¢ç¸Y„YÖ©‰ófBôh­ã8vÌÁ‚`Û¾Pë…ý oµ±ƒ•(Ä(àÑÂí8 öbôg“êi;ÐËES*˜ËÑzµ‘rá”ôÑ‘B"½ÂD 1&v†ÞcO ç«Ø3ÔòÂvP7úD0g;/ ]È8î°‘7ÃÚ¶Þ;\ašá±=h½yÖ¤˜­€~ÖUáR䨮qäê…Xª=^¯ù'ÿíÿK§Èõ‚ ‡Œ¿~þü´yq–8¼Ðð·£wlÛŽúz!íêyQºê#Îò–7Ôó´*’ß_ÚÊuaK;®v"»Œ:׫D1´Æ¬/èFR]2Å¡ÆìéþþÎzbTŽYåícÀl.‹ÅÆzÌV¹KTÑx µ#üÞ!BÚlÌ0;òþ°e®àzžØ¶µžH!¡£CGt×÷O¨½¡>ESXY$¯©›°$˜Ñù) 9Æs–RlòS]§éîÅyhí–¤Ê kuê1m¥ò}õ[‰ŸæÑXQT| ×i9Æy&Û¢KŒ¢ïE$>ÛÖíM°*u4›Nþ^­Í"Žqûgî¨u7M»Fg+ŒÁJŽW\ØÏ{ª&ŽU—‹†\X Ñä÷¾8c ¨G©L{Wu« žIrÜ­P2°ðït£l9áõ|Úhâ½4$:¸9cFŸ&‡:HWpk Ñ—RHoø//.;€ƒ2R_{dÒrg,ådqà€h7 Þ”Vþƒ.lw+Q[|›ÂÝ\ß|okï”jO˜„Ù(Å—w‚ÚûMC£i¯\ g0ǵߧ2-&fSÃôkS/\å…¸í¤Ø·Xž/f}{X”Ï1ñò˜³Ã9î{öý@7Óó’coÛÆìËgÞ…Fðž&M“ê†@ö¼ôcä…,*ăX€{Ñ1g} 8+ÒVqÀ­Ý:*–¼N‰¹‰§¾IÒüí´ïŒ]Xþ®Ñú2¢š)Ñ wÏTkQšì½C©zØ­RÌI¶ZŠà*!ø;ëG\‚‹O_õe—´ZZ¨C>Ö§ = üÃÞù;†È4UË D±êšÝ­éæÃ2«—aeÖãñ…«\¼ùÁ˜¡ýñ…V»L’wGÞ;:±Å1ð& ¢8Y\Œ˜c`Ïɤ„1%8õ8_äÕÉË̇€Ú.¤± ðj¡9}0 ÆÁ™†ß[ÅÐ¥‹ªŠ6‡-f+mVéæ´¡›ÊfÞã)¼+Æ>íª˜2àºÞÄß}༾)/\¥ášÝ€ÅŸRý*w滺i¹!jnÕ5âR¾›bŠ¥¸ÿض×IfѧÛá׎í=fR(ö-ÓlçõH:¬[±±ÐÊùÈ4Q/Ô˜2úyñ v°ŒU~Ü è/§§X šåÊ5eζï×Ó¹ûË÷ðë_³n³û7ÄþSfäC²w 8„å_i Ü‘p<¼ž¯÷_¾N\Ò‘ù<)'Ň“|t¦Uþ~ †‰4¢FcN¼rÅ#8ä#†ù%þÝ¿ÿw<¯ ÃTP׉ã닯‰¡Ê±òJÆ{$yLt”W…S‡é>Þa‡é…SᇢÞ:äaê@²…6Ò=oÌå“8¹Ÿ·aÎôóõâÏ ªÆtN¨¬I†GJéV‘sÇ×bуE1îHÑã,èñ Ö˜2Ã|ß7@×õ2ÅÓ’sósœöÕºVïçû*È__(/IûF‹à8¦Y'Á0<® ~ˆåø0® £ެí bÅ!SIQfT0Ùt£ŽýSÆY¾ikP¡ÊmX'ºÈbkYLC¢0÷E ŽB˜´ú¼YpÞ{ëªéö¿Ì¯²í;®«ØR]°¥ Ás—B@©´?0„޼¹Z ¢gRii£äq^Ö9¦|”žçÓÄOö9ƒBþì_ü…êäØHûè{¬áŠïcBˆ×yñàk¼ýFhƒâu€­[ò:/â½:SÙþ)£óP?!ƒI\!dô~ñBdAÝ£˜Ô¯R¿SFJ¯rN¬þû³ï‰›à¢íõýäSÒ߈…W¹XÁMsgN3 ŽÞ²§ÅÓ¦7Àœ¡uÅØ.ßÅ20õ „·ä×ÜÕ‘ÉP?Æ8üG¤wÐédÌä¼¥­$æmÐöj·§GœZ‡b=ŽäÖÁ2Í´÷Ž!uL °Dç)äõG„¬»úåøåÿ°ÂîtU˜àÞ»rÑ¿^žø}Û²sB$ZGćÙî "ñ–ý*˜*(¶ÿX‡â¼…‹ýôë½Yô¹è€L54@5ÒéмŒ7¨Í-Öå|øct*þäoü L^ßßøñõ¾_ß!ક‡Ìç7h{gák4t<¾î4Ð뱤ËõÙbš_p©¬\ª÷Þ©2º öã mT„÷Âtk•ã`HÞ¼öãË”ÇãÙõzaßw‚WybÛÌÎñ—$UÔòBŒZ»óÃ+Šà÷ž¥qžL… £Uø Mò¾Œƒ§÷Eä]ЄáœÃu½3ì(¿wæ£SwÌ+7ÞßÊ*Ž-×^#dJ•aHüÇï¾p¤Çœñz>±oŒvÁåÈq££·ÉyRÅ;¢m®óN¶}àx<ìâØt€êÔZ bÈ·’îëëÀœŠÒú=^½ãw¿ûï¥àcדÊAù'ÿêÒv^|ã­›:ï99BÛ©nW³)¸Õ{¦ L¶cÍq1^jAN¯ï-S‘’çb>#ô.³îý¶L_Ãx/æ1ŽÇJ…s ?Äv kNØ[CmËAÃ2R=“®gÁã±ÊY¿*ÚèV]Dœ…Æ?íÃÔTÝF |±‚46ÕÖ‡ÕrëG/w6ï´.o¤K€1…øk]KÙ+|ó–xð.‰sÅ×]¢:0dA m·4yŸ¿&Þ‹uá²—"²¥•_Ôb¢llJACx8 ]8÷Ñ©8±n`ÞH¹»Ž_ý&K¡ô«ÛÝ.c1'÷Úà/eÚªµÙ˜a éÁC”Þ˜drÊ25‹à»ƒ9Ö=¬7Æ '&ÇAûxP¬bw¶ {ÃÆ8Jê½#º·o$ˆ³¤Ï÷8k½DÄèö9¡¨¥àØ6œõÂ:ÔÓFìÏubŠƒHq”xx ðbÉûÀæ;.Øç÷…ík£ßT\mÛ å~,ylûóçï±í?8Eh1;ôå—”#WÀ!àØv Q”Ó²ÎÝbzqÔèc¤4ÞO$cBEGQPÚHãsÜé«´sRbFkåþƒUµ÷Û³ŽÇóuš™P¡¾ÃuÆQ{'&÷ŽÏz·"AîÀªi‘Éóë¹H+¯/¸ùyh19ô®ÐÖ0¤#¸Œ> Û¡‹õÄT‡-o&rrvnëM\0¼8z£Î‚mß¡è]ÑFÅž¸^O¨û¶±‚çϾ¾~`*ÓåÏþü_«¨9ªSäBGì 3EÄ*A[†çL½lÇ…ݺ¢¨ÍRÇL™R¾s5¼ú˜4Úx1´±u€¡Ü±Ëð!Cue%|,^m†©ÞÁ;‡`~ˆeX’ÁvÚ7x8œw4³u²m¼åŒnx¾²[ÊÜ@nÌ6&s.|´6 ñ£"Þôæã–p‚ë*¸ÍÕn\¾v5¾O¿ÓâÄÙÏ4Xí®Êý3Þö³¢ÿ8e¬{ñP­ˆiG­'ÝÑklv[ßÙúµNäÞìÊ\4kÉüËÒݼëÀsk_ãÛ+V¡Bà‚YtQk×–×½;Þt Zle¿Lì‰ü1·¬N"jØå¼Ñ ¿tK†–Ø~%x“:~,âïnÏݳhè¡•ñ¿ýöƒ;çïÜ 8Üîw ³ÎÁ%+¬£\_¢³±1î×Sö#¬åç¾”Â*2ûû9S#YŸÏ û~ tânX¿Ð3¢cÞ‚´õ2Üû*'ˆÎ3*e8'(gA~dþÙ9™l÷¡MÐ1éhÞñƒS"‰7 GiÀ=%øC³hL™áoc`ÿzØî$ 5ʈ[¦§xÇʽ• ç£7¨À$½'‚UÈT$12Û‰ ¼Nˆ¥dŽQù³÷xy™Ö¾ Ïf…èG·HÌ"¡—s›öÜ ‹Ò©1Õ¾Æ0ÑŠ›v²ly|âÌÙ­³^†2aL4J¯Ú 'ÓrÉ=žßßì{#a@éÁE;}Lìƒû ï-Ì«#mÉiFXðÀl¼lCŠÂä¨\<½4ww.á6 Ž1P[ew«œè s:žÏ¶œ!Þ±øÿ‡ÿôP˜ùh?8¯ û¶1†U-•Cl˯6)éAZ3-?9fšN ¸ u*Ž}ÇY.ÇÛ#Û7Óóïå›ÀÑ‘qžnóÙ;£ú–.·³Ú’Gq“|‰ofw}Àëõ4*¬By„.åS´\‘‰œ ŠëÅÅÿ–”úâhZêÍT[sp¼<+‰˜"^OJ+Å{´Ù¬Xôp˜èVaªSÔ«ñuqŒ¾SøÖ¾B9^úþ~—¼fQqU=1Yú KNíæ^a]PºwÛ¨¸÷¢<ÎÔ„_¿¿Hu kÏnCî ±Næ>\œÞKº{G˜Bîc”wß/ö³Û·C)ª!ÉaA>F Æêæ¦áøA{¨RB2hß/ž9açÒúDŽ1g\¯'%ç“Ýï\ÅŠý̲“ö:‰xˆ¥sµÂõ Æ·Ý4þbø~Ï$=á+»¥ÑŽãa A¥–_ÛŽ³TRÎ ÇãÖº!-<®Þ¸z›¼bL\p+}Ü1½¥Æ Åñxàõ|òßíTgQJ©6EµBP&/ä”3s&îôFIXá&NFޘា Ú¸3ˆiʸÊEší–PÎFw·…&íÇ(M€Íh¿ÞG‹½r`5jEHJ§À`ßv\׋jF{Ý)ÜíóxW¼Tn¬P5ŽsÞ¸#½¦¾eÿ÷(xê}Á¬ «),^öã@k£_ØöåõäçØ ±]Hi£²6Z%š…à n„ÍU^kvŠcÎë«0¡2kêï=Jy!ÇÝ~‰z5úq<;®çë@åcC¯ ­w|ýøÂõóÄEßÏŸTâÚ3®ªx’4°á2£–ªbÏàÖ<=ó†n)õ²–zÜbo.é½U%¸±ÚaŠ^ç‡*äVˆñ©`©!¿tââ{ñ¿ÎB;„þë‹ äüê``ÿ6 sÛ×(œU‹ñwléè*³}‹íSð!ù”ûcB† 0Ú…˜6v  ŸÃOE0kLÍ}$»*¯‚°ï„rz …Œ©I"®z"8š€_;üQ»d>D!öZ*"ÀýÍ?Áø·ÿ1o˜“©†:X¡§âšÙö㋇èÂ{8`¼Z† çsZ¤îª¼ç4 säXú.» Pë”ô¶‚c;p•bµ—AVŸ/>íY¨íŒ8>V6Èñø¢¸Âàûq ¼NvŸ!R®ëÃ=yqªW|o2àØÔrÝ»»Ñ‰ ñ!bÌ Uf½@{7Ÿ w¾Ûž¨4å*H!R“Ýiõ,H9#×ë¼gÎãŽã Á#¥ ¢WcðT W9-z‚¾‘ãqàz>ô:‘7^Lå:c†üÙŸÿk=òŽ¿~þ[NÐéq½¾iz> Ñ#¬äÄatâ—ë¨7Þ Ô ½LÄÀÛY¬Ý'}ÈæZÍi§QҧݸžÜýç“/^V9RNÖZ'o§^ðÂ*-l‰‡:Hx¼ >¸Rµ`Ÿ#†£R,¼!ÏÇÇåÁS³òµä¾+w‡œÓ×Z·e%S÷Ve9‘ãü·’POßÅ:lU•ñ­öõ?D°‚éYÙ‡o > (¥"çˆEtÎGœ¯rJHö³zåëªNÑ›’`!„ôßœ3Íe“á`Ám¼\E€DÕWo gmHÉsö¿%Fωçëi¾˜Õ}Ÿ±íQᑉzÏï'¾Žs¾÷.Íír5œß¿‡ >x´Zð'óoâßÿ»ÿ@t¾óp!±. ÓiNøDüM€|T÷bÅŽgWÐMå'ô¬ŠtÉ¢9S·Ÿ!,e•,£!¾gòéÊãH"c¶e=y¿‡Î}ìöäC­f0ü¬âåî¬%„Ûk wÞ¯›wy8”ZïŠxމãA.ÒzŸ½§aUƒ‡sæ5°Üt»½ “ÒàÛbcjÝÌn!¦_Y¥ûà Ê1Î=Š•7Uw‚yçù¾}ÂÍ gyÓì.SjŽ>Ð{žgË6:Ì×e²Q¢?D¸K8_OŽ¸Í QcfuÛç8L%¥w=ˆ oÎçÀ'3’v…›éäAÉñY´‘»q· õã¹pLHL¸úõË+gF«éÖï·Ù­ÝÆÉðºÖ-(oB{µQ8EL"òk§D¼^ß1à·¯ß0÷ÆçUñ»ß¾,ËÉãu½0åË.xŒ¶ücÓ>œÚJ=‘T;®ï‚“å¡+w~¥9Ò–%%å ç÷7ò¾CþÉ¿ú7* Ü0Ž;ö˜P&¹'ëVŸƒ#©ÞÛ[qó @s"=×NAÁžvœå¤š£Óu>•¨î:»©èt?¯ ”6k¿£÷p!Ú¸¡":¦ÚõžÉ¦ uPêÎ9WÌÙl¡)€!Å!€ Ž­ºpÁ{g\xÿ`èÊhð&¨ «‡F¯jT;ää-c=¶}vK6S4{@iPc@‘˜$3»Qƒï)¯x *nð*6C¶›j%ûÝû˜ê~‰åsIòë?[uç-ÍüÕ}t=%ÔzÚëîíœ9p–'îwì—‘+%ËüШuã¼ät0~(²#ÓT”É’/ó^pOM»Äùå°svÄ ‰ˆÞÝR~ï¼-ëßðÙÅf!ÄÓÈ<{ǾeÌUò0€÷ß?ObL–\+bŠ˜}ب’Tql×vöúl„‡šPäV1:JûŸç wLò'‚çó›È øq< <_ßÿâ¿þïÕ‡€^B lgçÜT»-YÙ2;ÛcÄDl³ß6h«¨…ÝœÿõÁ*§0j>ŽèC"ó(¬íC“=œe`Îh)×íòeF1? mvüøñW9Ù®®]V †@ÇDé[Ú¡J¥Ôœ*̉pÑc¶aÙÀ¬¼Åy䜡CBʧA×e GžSb :ûw”ÆϹ BLpNq×:¢>ÌC«GïË!·$Ö2¦¸ÍûdpÎë{~gª›rûyiѼ¸Î•uIñû•[¶íîíÁÇáhLH;zåhÑMwïÖ‰ÆÏ‰ý,s±¸ì t0·>½ œíN³V(ãÄ?k™õV¹yð [M/våøEo*´é'+i°ò„ÅÛÁêÄ49OprGÕ:Sà81´µ 7áTrñVÎ ‰h¶“û„=.C·ƒØòi$¾}'ÄžV¦6¾…XW¸h"x 7L:Úî­W²ý†ó6J{~ã8¾ úh˜­Ù¥þ±1“÷-¶"FïÖi:Ì©´%ÎºØæ|˼½8‹) ˆNà'Å4ÖMlyGiŒYîÝoÞ2Îï×Ýò:Ÿw†ˆw!F8ãjq¬ÈœPÖÃÍ8[”Û;,ÌEXj ¸%·…vò²ø{oÓ”ªw@Öy¤”P'@PgÝ÷ ¥ñ" ×.þ»•iãœeý žy˜¶ó’Ïß|4ëyÜ_¸N:ÌGoÔÒ4óÙz´z]†M¸ÇcÇùº>ö–@Ž çù2×À¶e<_/ªàž [±àSÀ0ôQÎ^ÏöcÃëyb;v޵#ò°ÔVÛö`ç£!dÈ?ø§ÿnùÀóû¯·Ì[Í‚â½ó–Ÿ, ? [úÞlƒf¹×Ó pv¸M5’.Pz»ó5&V1<…hž G©¨ØìÞß—ßùµ0×›õVyéç™xWn#„Ü,8Álne+4J;Yaqì6:Í…­sìAe6+.Ë–ôŽ&1ííž;ã‚­Ð%w¶ˆ¼ßò2Ƚ«¦a—”[K»|¨´QËÈæÅàI¯vøR’«vg|XäÙá×Ǽ†{¯T²ÌÙs&\Öõn.pYüŽOE×¼ÇD+|Q:×åµ*¶{YÎòëþþÜý^»û¯·04ó~×ȉßC¸ QŠV¶ÆÝ ¯qˆÃHª}v8<¾x>_ÿ‰nïólÌP¹öbëǶ_ÞE“¯¾ÇSPÁ¶%”‹2ÒéÙ­ë´¿×þSñA´¿óxì¨gÁ°¸foþØÔ,Øóàb0DÐÀPA uô[ô";G§•Ñ^"z|ÏL­¨íœçkÙG·Q߬“p·"“…‰³bn|¼$‚”©ìªõ"ƒ M£Q°å¾ ᘜc&Aô‘û¥Ñãj½8Újã>()ÜÈGB«b“…¡Ñ$º+í“»|¾Ï¥6ääñz.S£Çœ‚}¨e úA‚P}<¸ÙÂ܇ÈtÐÖÈ©[c ÿ­b'x¡Üå „W€#yÇKnhƒSârªåûx8t³ 0íϰô:)G÷þ&xkpÞ¡ŽÇA óÏoäíÁb%°Ã*•ádÞ¬ÎѯÒ[CÈ PEòã¾pKáû\d •9o¼@”b)ãØÞ—®üé?ûת³#z§4—Éo¦ºê–·çÅRá2)Ÿö+mÚ(œ‹ÛÖ¹€ëõÍU„K[›4l{º+í mÅ-ÁûÀ{MsV[üÝjðžKÚÖi|ÂdÔ+²nªOíCmÆÙ:=kØfrZ7Ë*úăÆ3D©<Ÿ&_CÎWÀ9ÄQËe—ŠùŽÏï×ÇÎc n.1Þ*¼<ÜêÄì’¦’üþs öàìæÝpK]õ™‰±>d˜ð>±+ÁÊ”·¯ot[± œß¦RÅ&v@.³ùzM¸Èdý¬¼UOÂÙí­ò6(ó|à±6Í/äŠ2íoÒ=ëÇ=˲±Äî¸íDWè\«A#÷†hÄb–jbï׺˜fïïÛà|«Òæ"bg]n¬ŠwŽã¡D›—Ä{4ê…^‹™¢„X ˜7ìõTfŽk7¿Æ=RäÝ,7x½_Ó.WçFÁ±‹To•3|X·´‚Æî){_µ¯¸dÛÅ(Sø†í-Ôö ðò¦1+G`ï÷Mç`¸Q㼟AG Ìº ÞÐJÁJ&MÇŽË&ÑòM:¶HR´¼’¥ Ã¤Øáª'ñæÎayæ¨A¥ÍÐ$‚Ç׆ûY%E˜ûRÿa[`­¡&±6±©·Hài†S¨Ñˆ41ÏÊM7±G0S$í<1߃S‡|d¼~pû¢‚Ë„,bDU3€»€®¥6~‡ý®˜¨È;ŸØöwž:€Þ0EC´|Ëu·ŒQòÿëÿQÇè)aTrö}ÇhÎ š±¼çèm <_˜*fQN>ë,±í:Oø \Ú|Ì{1ñs"mt`ÊŠŒí¡Ä”3&Êu!¤dÆæŸOíuæ06ü·ç$Óâ33?Ü__¾¿Ÿ¿T¾N‡™÷ÐÓˆŸ6›—` Îc3‰ç~

k·+fæt9$¨¯ç“k`^Kk£Ö{¬G_€wògþºÅˆ!°Úù¥Á_ת)F› &ÝŸb¼6±íµ4ÌÙ°íœ×ÉJr0žÜ¶ÁËÇayå}P× Ðcû‡-gcùõ,Ð57YEæíüdÓ:.K·í8àúýO„2D^ÐUÊ Ä¼‹~û1s!À«@B@-'—^pxì;ÎÞ £aôU¿¬ú^‹_]¹äþ>ðß;–áDZãõ|½M˜÷ƒ.Žc’9çÛ;ÜC-*kxR$Ït8ïH—…ÎE£ |s(áO;3Y Ü{Ë HçÀãø û|Žø6Ñ)åø_útfk¹uÍqÑ;ÕFbú¾8î×Cô}ÛÂ^vX¢úþL²³¥»ùdíª2[j™ò¨wˆ> Õ 8B[¨p:Í;ì} Éa‹tV<0¯^-µó¼ïv€è!ƒq¨â²F £c8‡`y+ê×Ov9ÞÛ¸Ž…—“û" Ñ£µܽüðšßb1îëØ…&ácÆè­Íîã„U1¤wcß¼[Í#Øß¤´áu~ßNîœv83–Zp<×ó…i¹ëÍ”|ac,𔎜v` ®zÞ0ÿc6jÅØÐŽQ;RÞnIo9OŽŸ‡ÂVcp_SF׉-'Bcàøz ®ŽE;Üô˜ŽäíîñýŠžVŠkBth}2¾áõDÌ!&œ¯ËüVö™°ñž–äH7yÄñéW#Ën3©,ôJFØœ}ÛæE‰ÖA¥ môç¤DµÔupÂÉ®©çDaMeCŽÎã*¤„è$ŒòÇÚ^¯b oª÷5tQô)pç"ÿàŸþ?´WË<÷L/ûúúÂóõBÚ6”óuK[PvÇŠ§¢÷agUPmV OLch-LõÒ·Rà’Ç,~é­?DHi?0GG+Ô'“Êêf7 UôÙpäc8Ÿà™V:ç}8ŽlêĶh£¢—‚ãë7¼NV_7z¤3rÎi; ªÜ»ÅÀ‘‰w1a÷ ùiWyŸ`05}$L \»»øLéV~Ž¢[´¼5~`zÞI[k¾|45ù1zµ?ÏCjŽŽtd”³Ð\8Ly/ùõóüų~þ¾÷Ñ%–ˆàØš –$ÑÅ©²ƒPŒå¥¤¼]^…_$wªŽ} S«8÷~9¬¼´¶7t’?O€Â dÂÅ|X¤_ï cØPη}0žYŸÙ£×qÃUÕ ©òñ"Ú'ÒfÆÒÞSÆÁ»å„7ü‹r 6Æ›Ê+:Çq µNâå’¼‹8;MAÜÈÐFÊí˜÷KseCŒjˆ…™Iǰb/‡Ö*bˆhý×Né~nT{¼}'ÛNc,s\¯ ÛqàõüFˆ Ñ“!Õ%s¥œq ' ûþãòê} ÔŠ8ZÚlñØ€¹ðxuDÙwB%Õ½÷/Љ”¨íuw¥€b;¨×I.^Úœ„1DÄ-àùóy{Ö{ U~c¥ááySµÒ1¯ ôÞ3Gï¥ß7¦Þ Xç=¢I‹ÕÎ+FãßᣇWOR1ç¢H9aõþ÷©‹çæ¡Âñ“sžÈu)›dÞ˜d½0 %¤h»Í‰¼eó.ñ9šc¸2Rê=¥>áçjʡʸ,¹ÕØX®tÑ0‘³.ÑŒ}ƒ½S;*8ö/Ì9Œ÷VW|ÓÕ?z%-|LÐ9îd8¸±ïéq­]kÀJ¯‡Si±¸és©,¦0<¼0%“#C›žŒn‘¤6;Š…ùyM€@ö`Ήb!¸0&#®™'laÇÕ.;M}h*¬ÞB $ü—ÿí¿ÑëâR,&º¸áxs—“a+Þy<>¹3è u.%`N¤ÄånnÆ|@WÌ1P¯r(·mãòŤÀ6zªBç@Œç÷Oª ¦òù÷Ër pÉÓ…](³Ù˜8µ˜ÄÕÞSµlî[»]‹ØºN(µßÃû°[—ÓçiäLmõ™Ÿ!00¢È;%Àðõ<áçµÓ£EŽ`7ÛéÒ%ÿ'-ü°’w‘Ú?5#Úǘ„{+³°5°&–·H³X>ƒè-6“.£ØGršöš*_S±„Šƒ³Ýöþž§x¿o“·»é·ë› ——Cî…ò ·dÍæÇ4¸ˆÜZ0€ÆÁÅÛ§¸ «ýãCit_]°G·àD'ö| c (»Ú”(Aµ¡ëdŽKâb@©>X'‚à#î8_O¸I%Xb· ±Ï‡c8@œ Ûã@y½¸PE‡Ø”4}ëŽí¿;ìÅö%Îß‚—Ï5„¬2Æ SÄr#aðY¦˜‚n¡CØÂÒø6'…1ÖY*r|pg œ8ŒÚ™GÀùˆmO¸®›0õùà.$¤”àurz®ó¦¬ç͇'µ^ð‘nwÀîbñöh&ÑŒ–…!hWiâ´ô6,v –ï9¶b¶Î‡sö K‡GĘmE Ÿ¤]ØbfMú\Z½}1&ÔÎLQî+dî1p•Ó}¹ ¡°Ü“jkD·'}'‰ãùýœ"zzfèÑë÷ q¤ Ã)‰Þv6n™;X€ 6ÖùN6¦6·¼¡ÔçÙ¥ÍIÁL½ø½äÊ,ï=üÿüoÿoþJ‡Òwq]ÈûŽÖ äÒÉ?ÔJÁþx ”.qé;kçMä#®çÏ[‡Ý¯ åº0ZƒÊDÎ1¼Î‚HÞãùz¢×†Ù:fçL-1Uç@W"OîQÍä™?Zãx ‚~&‡%ç]‡?îsNL™–ȵšÚToú3úè&S#‡Õ6ÜÐÁ?»² ze5¹qéÎ6§y …€7ôf>À±2}þra{sÖ’›Ãú%¡ø€êúÿÖa,f‚´ÿ~ÿ¿ÃZèNgð«xªzœÑi'©°“ ±õ3­PŠ5®Z# ÞuŸ'’]È&§…È»Úo‡=«4gÒOº›ä}±ˆ÷jùdÞ{¬µƒrÜ|Clñz{j<óü:þHÀ9vIªpi9-ÝM~ $‡d;€Jðt8_­ 8ÏYx¹èØO”Dæ¼1“fÛÀDÍ)¸s`X¨/t“`+/,/¬¦k+÷å™ó~fÆ`U<×F"Fªëî?Â×Áy{~¢ãÏ,¦W@SÚz/sÊ&M6§³½öÓ¤¤”t BJPuöÚ¬*ÛÒ•^ gàK'ÚG:†»Pp1ñ¢ô >i­±Ø:2º‘}]t@šâVÅÅĤ¾àeÝ–¤è¼gwäœ8f¼yKûãÁs«:9jyï§Pž_Z©èµrÉa4Â&)ΡšK͸JÒ€³$[ިΠŽlG#j(í N=&ôVBDJfD ÛÒN¯™ä¸Ù°â8f$˜¶° ¶îìõ|bô†zU/ô±ŸN1Ym♢ Ó«gãz´Æü9ÁhK4ˆ „%¦´áù|bÛI é$ÖJ%¹“†Kcú¿õ¿þû5ç@o 1Gô1£C«c°ÃXÝBL £Q÷s2sßw†Pu£Œ.÷¤)úhضЉ>xñlÛŽ^+|Š8¯'¿©IÌñ¾í\¤;¥–]ÄT[™K@Ð>ñ8”1n j ‚Ì{û†>Ú½ –Á‡H1cÀŒ±k‘åVl__ ”š~1ɧEXŽYÙê[þ²€2¹R æ‡qð )œp1•qcv{´yÐŒÙlßÒì{!)S>ÔW¿üúeOa©{÷ 2ï‘Úa²þõ©&]ƒxU0På½`à˜ÍþÇý s¢õþz_f]›A÷n'÷òR¬{Ç­ ×¾Ÿé~¹üן¿%Š{\g—‹, êg™mû! žÿÜÖìˆÖ÷Áÿm?=Q9£7(ÄæótLœÖ™+€˜^¯¶ýË”9‚mP}°`è,ByaÅ“rc­['7’âyÇ-'ãÏѤE™'G=ô?ѵÀ=Ž8~fx ôÉ*›™|À‡rïãVôrçXºbÏtF+ sLŽoÑm?6 Ê.eމ¼³kkCiÑs4|DiÜ?êÈ$—XÇhÜ9Þàœ§]yä˜q§ø‡T‘špÂYkÇœ„8hcÖFÚ îÂí'½C/Œ¥»JiCë³v~ofþ%!< FGdJïT|¶~ïfE`Ëvz‘rNhW5¢ñ*µ¨®½N”ÖáÆ³}cEïSÙ ¬5@oÍÂêØaå(k“Hx¥Äº·ÁIðï=‰å®èöZèTôv¡O;gÛÀ¶% D)ù÷ì†{P43Rº‰ãNL¨æ+åæd¥s€£‰SH9³€ýÇÿò/µwÚ÷Ç ¦ä±Ü =!ºö}¼‹Ä»–{¯¢LMƒÚÈ` äwå>ûÀöµãú>q< ‹) ^100¨V¶¦Þ”2çE¦TÞwÞÈöF®â~ùî3ÕF6!8*–1ÑÃ1<Ƥ8À­±Éþ¼§§àC(ž)`Þ!zëü ܦ¼_å—¨@™Í^w{1øo6ý¡ ƒYŸèÄoùÛTÉñ fÚûl³ß~‡·!cýr†…·Ù¹£Üuu Z4Ûõ5yÿlRÜŠÜ¡YjQK׿ó3a§G… ¤_ÿnù¸T|²‘„¬“D?.üêøv™ ‰Á`•Îbc›™Ó鯦ÿB¶.Í.ºáõ";³¾nçÔ}t<¾8¯'txzfÍ áCëRÂè ÌÈÑû…ûõ£i>O¹“ùžz Oû®d~­"Ç·ða}î¡ÜÝ8Ïì•Ñs+ÍLM·Þš#ïø>ŸÄ õPàØ&Éä]®|Θ•NýÑ©nZ0Ç>:¶-ÛAϱ_o .Ók*dú{t%&óN.¡Î ¨‡(§°Î•N^Âù8p]TÍf9ïCÑó¶aô‰è=^¯$ ½Ç÷€qµ½ h#iö¼xY9óE¾öTÀÕŠw?Miß N¡»›r!í]Þ+¹´»›í³m¦âŽTó–!Npž–¶8€)œ˜´Vp_(Õ¼1²Š¼÷à,Yò=¶\äë¥PÌL!=·\+[¥Ý±.r˜9šnÚ‡[°oc 1¾ȴɀ÷ÜYû¿ýwÿþ_ýºxà§€ëu‰pga g4UVmcò ¿ XÙÁm‚˜˜k3ùp{O®RoÄ.ôÚÞ­«è¥bÛ3z†7XÄ~ªT ß¾ª:[úó¢€0]KœcjÖz¼b¶ÆÝüDØGk°a*.°µÙ J$ü=j’Yº…A1ì Î[ ï )m€˜³‚uÇ”îÑÀd=Õ;lÚ2KÄôî|+gm©åý}­7F‡!ëÿ¿aÔna+–‚éãЕu$-Õ²0 –Ü€@ÀªíõH4y4 ZiÔSËYÜ«uØ.ä‹ ß1±ëA±,[¢»0% â ¬!òÇo?:C ÔxK;D äqm!C„n]çò‘®÷>¶ÄU#ÄnÔÈëÁP³ûr\ØÇÎÛÐîøõL’[cF{k£²X ½3gjǶmƒÒÍõù&8‡WÎéxKû†-ï÷n¢[Ì¥€’¹Æ81»)àbŒ$û€##VêD°O%ncôaRr[ |²2„˜mÛpÕV®¢÷åÁß:*™T<:SÉ)ãKýOî×`ÆxÞ3GË1ÙeWÍL<Ñ[ÅvìD Y7¾X1&œå‰R+Žã°gâ‡í8Ð¥°½u3'Rvœ|ÆÀ0Jo¥`Ì{?î„à=“YíyضÕbž‚¨Cʤç¶Ù¬8¤”ñ*O¤´ßÎû1¦½ïýVã‰í{Ö±3éÉ:˜Né†Ãþà„gÎŽèIìmÚy®Ñ›§#º€´Eî]ˆ8´BÁlùÇNf˜í– ÐRù>þÙŸÿ…ÖZ¨{ŸÉ{”JõIÞ6\׉=ʓ݆®R º4ßëÁq°jPØôIÕˆç!·ot”ï¯8OPY˜Özze\5 ³Q%ey Æ}˜êP:]Ï“xpËš€Â²Þj.;@P®¬j~ ¥ã?š&ÑážBb’á¨T ˜ÒëqìCÍcÇü%S<˜s|ÍðCôh¥Û‰³â6§ýçº Þòà·di)™Þªò‘Ò,tº]ªkl‡·Üö½)p7hm…[ÝŒ-ÅàIäÞñÿN¨{¿J–ÖhÆM<ëb êÎ<‹äî|Œ á¾4Þ·ŠX·æ~]š {ªb?vT£ºê`µ[/Ž ö¯?{èè¬Ò¯û‘ÑZGt‘B »¤oŠˆCL»28"š˜}˜_æ49`@äJ-­ v v¸OUŒÚ¬dõÁ=Ó´%ÿ’îа0ß7YöVo-`âŸg.¿NÀ Áâ(û`û:—Ì1ÙrWͺ.~‘ûâÐöqyàÆ UiŸK- g}-1ó';3ŒÎÐ>ób¸Àý…øqë³Ëö¯/f ˆ­’»™[«z_s„õÚ¬]¬£8¸èÑÎ ‰ôx¸4ÍûÎÊ×fÆ[úbÛ®‚ã· Ïß¿°m;ÔÐjEÚwRBd6‚Å´JG¶L¾—ˆ«SÏ1÷×ËÞ»¢@Y$­Ä;u¼˜¦u‰)%£Ìt8çœô:MÁÅ;2“ˆ€á×K™±­‹¾+JapŒÉ¼ ÷Ð ÞG´Ò°'¦†Ìh(ÝÑ­58ÓbOé6ß Ý$ŪwU 0þ õÎߪ¶¤sÙ®J] ‰Ÿ åëè½ãR¸+i7ÞÀt–ÇӠ³e¸Å°úºžÀv–³WÔÞ B—Žs)óܱi†)✩&ÇBv$ެ© ãaWÜ®*¢åÙt{vS^|1:¹c"™É–Ó|@ÂqÞX†]gçü;Çâl"§ŒÚ ‘¡w£vÄ-BÿþÙ&Ç_ÆÏ¢v†jGæÑKR¬jW¿xo€·™ u`Ήãñ"j-ˆ9CÖØÎ™¹úñ¿úßýÕ˜<÷ý JÄRœ ጞ„hÉfΡ_Õ˜N4ýöGŒvK$†Î‰¾¸†ûÖA :&Ñb‹QqÊËÃ0 t¤Ö«@¼ ”BØÙNÊ®÷}P#.boŠ¥+Š™;o2íljðaëÕÚ0÷þºk7•ÔÒÚ«%ߌ#ï"¤ÀyZ*B P(ajxxª°à@R¦6èPì?;’}ÿ•¦8q|XÅ’WJŸ[I¸›rÎTÞ`^VÅ÷2÷ñø‚Îb7§Þûg1¿2a¾>âÃÜ$˜¶®áË÷Δa Üæ<Õ7â˜Õâ|äØ-8Û­«$÷â  Brj5¨£Ÿ¬Lª2›­ªÐ¹`ïG˜T•Ð诀U‹:&RÞxàfÕ°1ç<(ò±YŽ´X—Lgz×IIÚq5~.†)ú˜óá¼Ç–7´R9#ö̬Š ”ï§L/ExáOUûƒXS÷äDÙ|Îú`åÌG’nÅ%OG>Y{{Ø>²µ7 ž»(å!š¢·C†¿9©¸Ñ9Pkƒ:ŽƒÆèè£Bý.jˆç|>{.\ä/j·*ÐGångÆ‘ä€IDAT ˆ(œDÀ­n‰#Ý1&:b&7uˆ˜hØŽ/ˆxiƒÙÑÓÍ_c¥ jÛhrTöÊÍ]ʉ¹AˆyÀøVÇ3nñ2e—ýfÅP¿7WfϪþuÎ{W+¦,,­!E1µ Cð¼xG«8ËË:¾y»þedSxÞ®b„%ö‰Þ;¦Nô61'·)’ì1ÇÒ¢ bè•P×Åå›Jç:ºöN2¡•âœ'|öBÌÈ1r—¦¼˜C¶×@;O{žj-ôîL~oò_ü7ÿ½ŠÍûhÜ®¨½cZ{³eÎì·=ãº*®óäÈAšë´ êòÚªf(ÃT)sÚ¥a 1IÍ\xÇ6€ÀýˆŽ!ñü‘©H1SÖú<«žœ¡žùËI€êľÓ}©à8ª·AÇmÌw€@úÀðfËÓ¨ãD!r);—ôVÌ9=iÀ;Á„Í¡§Ò½Ðj ùîŽe‚¡ ârbÆq©…•²…-ßÔ¯ý¾Ïox¸7U ùbÜ®HU͸¯J±·ÎÜÛ;…”ÙõÉïãö”,Ócx/ûWÒ #GuÜ{g›ç.Z^ôãåã#Ù*p§ÚFÉ ­°XTÝ[ê¼Vâ~Ť/Ÿ‡-Üî‹× tï¸?À«c îºND+$|ô)£ÔŠÑšUŸœ×~!ù uP"žã í|“aNÛ—¡5쨥Ø~ÌL´µÑ#ˆG)[J¨mÀ™¢QÌ6=E­Mâ#1ñxx>ß©wò¦  ó_ŽÇ¯ëe?[10&¸÷Féò¼³+o9/-7<ö ½OÔZ Þ!Fª¨FŸè£â±¸®Ší±atÝwfµ\ˆ)¡FÕQ©ÐøhÞMLÒ Ü— ;¢Õ_Nx[‹sHyÇ쌒ù@W¹H‰ÉŒä”Ñi¯¶/Ë™¾2à/ÄD5Ü0†_­ÆP ïxÉ\E+­à8xß,Ê/JR¼u@6)™1dŒYã†ÖNù —eq”rC0_{ˆ´­ .ÅU^ÖépÿÀÎKï]²s“ß“*?ûVD/(•›_ÁÑ$zo™a}ν±ctŽ û0sGÞ6xÇ|L![­ Ú³làQR×Õ$òÂÈãZM 8à}0ʰCð€üƒÿêÿ®S'‚ ¾«ræ“/Rã7 šÏo­Y£ŒõÂó°’uÚ cFgëv~¬C‹·p0ªí-{äw[$K°ø»Nç4¦‘‡Ã€šW⽈)x–˺læóç¼Ïå‡çq#ãCìÁÚx“5a¬Œç³0Ÿòüù϶m¨­éµ#ňr]Ø_Ì19à~3Ï‚ @Åh~K&]K{«K¼RTyÐÃÄÁÛ¨Ò–Ï÷eç—þ)ÄQçP1t]÷´o´‚O/¸Þ'³S ØT'®óÂþ:¥Tú ,ˆèñÍÞm¤HÇÈÄП¡òÞ^Œwå¢Ò(¥ËÝ/ô{-FÓJí$Eš’aþœÇ~4³‚BÈèZ€f{DO ” ¿ßoŽ÷TM%¨ƹŠâ0 ù²ÖĹ€ÀÉz1Nö³€ Ér_ðø”Ÿ8ZèĶíP0TK§"“Ou µµ"PvM&ãnϳ“S0ué|D™Œøu¶ç´BmOý)Ü×ûÆñë‹]º>³ÛW·½^£¡–Bï?ùë¯yߟ˜V³´3Hk÷ñ~ŸØ7F^åÍÙše.ä`ªÙ™5r™RЏÎûÉæ¨ÈÛv_Ð%û‡G2§éãÙ<‹ÇÙ sëÖ%eÅ혦€†ó^Èj]ŠWSHE&˜yŽF\4¸ê]{_ÔÂ×7†:jJÑT`"ø }褴Îý8s©SðË_¯æ‡Ý5l,ôðÌ#ï_W›جôÓ°Òíÿ³%>Q±Ð˜Gµä³Æ4ú|hKyæž¿_lõ¼¡Þ™ÿÅȺj­u*?nyþ§iÿ(‡lú¢ þø/83d=yÉîÇåaê˜5V£SÞŠ†0f—/oÉêä³E_¿æús'€Àœ”Ù†NóÄ )hWÃ.‚1ÛŸí ­³µåÛ£˜ ß眊 Ζ¡LüˆžSÎ.âé€×ñÂužOGîÝ.•³³,*ÔVÑÆÑÔçk{?‚§1¶÷‚×þ…Õí–Ri¬7e° H ÜWØ?¥ ÷ùGäxÀo÷]‘BDˆßï7‚î f…€9?ï÷"<õS„‚Y ÷E¶÷Ѳñ\DΩ¢ØYG®ò c`ˆÁB'Å[§ÈgM‚ b?z'(RDP Òg‡Ÿ–¥ù<ÆæZU·ñ¬Ö3OS3,Ò€ÿ¬X]@q]çS„Q.ë¨ ‡-Qþܧ2ÐJ½Àyä@u÷Ç)LJ Lt‘BŸ–Þ ÷©9e˧’ê.üœpM…E)õ¼0Tpl Žë†Œ½²ÐF…ª o‰¿‹R\11ÑZÅPfîðRbŽ“7‚ÀBð~3 K@Rwçs|„÷‚rWÒxW¢LŠæ„¨àà=Þ÷Ñ'2QÆDHb²ÔÇñõèÎK-Ì[¾o.®ÅsÔ Ák;Poµ`-äûºl.–«$L 4‡L‚ÉN'ånKbúµ&ÛÛ}Ûq—ëÑKsyÉC<§Œ»’i¤cr”`O[9¾ßPpVê½Ãû}ÒÛn} Ä …"8Çnìgbzö%Wðø„¥-ÙX‚·›÷b°D»"8ò‹ùÎbUê3Úú÷¿Y^:2uùÈqé%1é,ŒÎ¬¦Fæh#"C,½Â&0DHŸ eÚÞ=ì;õ>``pd¨¼ØðÏÎij9cZ»ÑÎ\w没$yôþÌ—Ÿ?Ã>þé<ÜóóHpLÑÜ2†Šun@3ŒLóÖ…4Ø_/ÔëÆ»ì×ë ÷u›*jƒêÄ]˜œ7ÛÀ~¸î7»C“Ö>Ÿ¡ãgLë<Ô„\jï͇äÌ1žïâžßÄ›<¹6æ¦ Í=Êi }où3ÑÄìöý BÌbûY‘òÆFÉr¾¯ÙgÒq› ‚ó}áØ7;‡k×ûDÞf婈ø}® $áaÁ«*ŸB›˜Á»ÈçÓ­»:ZÞ¼·ñ ßé9:œO$ˆ{¦L[„ù¼~Œ_ùP² Ü"Ê·ÉýÍÝì/¼Ï7œ0à,ÚbÛYT@ï ”£(8+z¯O6úè OÌ3N)EgÊàÈjnì)?† 9×}R ÄMŸéG2æTvGì>IQΣÜ'¹g![àW|–ö?Of»„@{:>$ ÛíâGi“ùêô§GÒ¼6Þ{Ę ÿ·ÿîÿ£|X)­#C Páü¸Öм¸¯olé¯û„ƒ $òè÷ý@ëôAL°ŠÝ^/Ô»šì1 ÔÊ ònU§ \´±7,vâ /2gØ.…Æ:J}¦´1r_~ûíŠ1àœÃï|#ÅHÝ÷t¸Ê UA\ôÓ¡kn`áKb©àŽË©RÉÞw› 8ëM/K/}`Ï] ¨¼¯7«j¯Dr?GðòsØ¡g„ËPëC†·íR5ÍÞ «Œ1›ëQth³^@^FÞ:’}×%K¾Q¯œÓkP{a ƒ|ªøçúÁ'ÛDÄæþcôàŸ7ì{¬ªW”©šO<ýº„”ÐV¢¥sF ÐgþÏñŸ^ò„5‹#¦ÉLé#pbÎlŽ×†ógŠ JsmlÁ²Þ¡´û!>‹°ZWÛ|Ç4¿¥˜”çy1"fŒzsl÷°ábN˜ƒ(ô%Õå€Ý¥Ã-Q96 QÙiÚJ·ñ¤õ«ÑÎÁ>iˆTmµ‹« §ÏD&çLQ†ð=]Ñge¾Éï §zŸoîÓ¦ùÀ¼B&GVÞ¹ç¬CåYóëë7ܵ1=§ ÷y‰‡ÏÉ" #Æ] øK“XºZ˜ˆÞÊj­r®Øg²âe1ÔÚɪÿ)Oµ*F•os…¢?~À!E/‚ü‹ø…zSN¦Æéê£?Hƒûmˆ’gR3?æŸõ ©ÿ9ìµJÚvÏìÖˆ´m";®r²mƒKý®P·Â¢Ø‚‹£ÄvÉk{»1!Ø_ ‰m¢·ò žù󃞰 Å.¨LC´èÕÖœ!QT? kçaìcÚm¹ga«:u‘ü8ôõOpì 8÷ GZbïæÓƒên“{gö½@}ú¨±Húå_FeŽ7†þ7%!?T>‹¬«—Ÿ[?/”äM/?‘ƒ”€Cq±ÂaËîû‚÷ò ÀœsèÅE áyÖ·ã0Ò%å”8›oÀáyD¼¿P¾¿¡NárÝüѧãâÖ;xÇŠ¿¯—W§q‘^ûŽ»ÜhuhЊû=xN!8h`‚h׉®œÙwä}é|ðÀaqž7‚˜"¡¨ªH)¡õíiÛž„Â9 $l½ ºðxVžÎ9¿ÐZ…L:©½‰dåÀz 6ºpDÁd ¨tIèú£+¶G…î$×Ë+wW.pZ+Î.Gª,÷tà®7ßGí,*CD+Ü|épò(C%DD¨ÆAŒµž”l‹`*ËÓçÙµïO'Ü#Ã&:x,Ÿ 8£Œã–Qï†ßæ:³"ÆÀ­Uñh} FòÇh¥ˆ,"ͱÞò„ÄšÉ{ÅÏ– w̉~þoÜ»ø¿øËô‡Þª©Tˆ è½rùcã•^Í06'ò¾¡^ÎÖ1hê™lSG¯&S#ÿ>à¾/4Õ´V1ÀqSëstÌi ÃEC\ %§„mß0gÂqZ)øÛ¿ù(×Z+j¯è½aB=GqcðÂæ•X.YšŽ¬úvJüí­y)>îsÃY¢›SõÒ˜ Ê)!‚O¶dW0FÁì•ZíÉQÄõû­W@'ö-s9¨Fiõ):;ÜÓãP`¦Té4YMb§ÝyÖjÔôÙj’êѹ¬‹1S9Ó¸¨[Wן,ÀgÿA0â€Äô¸úÅ^š¹×Ž;nBQ„MÕ¨ø0äûX^<”^}"gM¹g9ñŸ¡>?—¸çÐZ­¸êRÌɈk{JÚð@Œ&€×vP¢8:â(Ä@˜& ÏCu —ˆ¤ÆôÞQ-b9ÇH^¶ƒE€œ˜©1µA¢¹—M–.vÑ„HBk/»’Ä}cÞ6~wæŸ}Bgߢæ1°¡óBóžE½ê0 ºšÄ\&^Û¼w(­À‹gEmO\I×usB>:\gÁ~ì¦æ™L¶ ôJ„À”Cf¿8ôQ …Çvæä‰ pFGYüð²ì…*$F>×§³d÷êž÷qu,!8¨¦øœ úþ† @É@*@¹¿@'*0敚yc®Çë×oðæ%ñÁst:y™ŒF¤ÓÊ”ƒ!tÎ'xPï Á‡G5·ˆ+ÿ&ú€˜œ0ÜKÌ<›· :9.]Y!.B'] Œ°(Ü=ïˆÁsï"T£ŽÞàPªµ#ïBˆh'ÓT½a§¸Óaᥭ=U1¯Þñµã¾.D ̺ …Èd˜à_ý7ÿV1Ó+"ҞЛ>íèÓ-wÓ 7Cž —¡>ñÁ«µ@¤˜Ñkx£e´×F ÞöcÇì¬âEX‰!­ÙtV´»=§¢…ßêUþ Êæf·îÅ–è¶Hüs­$ç” Î™ÂaÍ'`_¤þ©ógþÈÿß~¨€ì€{2–×ÿnîrη-D)3ÆTv]§uaÞÚogç+sîûm;MüëëΓ±¤û±A”›à>çÆhö»Úçn3Ü>'1î"Ä;/´½DXËÊŸŸPf8íB·öÕnµ†Âˆ…’o€åM¬¹¬§Uý<çݳ{ðA¢üœg«µËŸNä?kM¼}ƒ—Y‘Œ²pض÷ým-àÇÇŒ˜7ô»"o÷û‚`Û2®»rÔh•e…*¡šÎÁÙçÃqÓ ácNAtáñbl‘ˆ›©j*,†H¥À¸áhþ+…à8v†z…„ëzV½fÛS(¯0IqB¹/HpèÖµ¹E!ÑH[Â@½oîqê20¹ËëC1Z±Hž‘¯+:Ùy÷4¢sµÜF¾V$“¡º!P7B6 ù .æ*Ÿý l·ö4 Ë?äìµ¢t5ѺôÝ&DðQ¹,:H­Æ³0'ƒÍ •ˆÎ •Ù'TÆã/²5šûdqP ±ï‡}öX«7lû»\½¹qžI¡ìx}¡Ïz]Ø÷c5'èc⺋å¿(æP§N zÀqo­„ÉêP£ðÒ1>Mq)pîgÄæÖàs6J,ÍÔ=aoDÓïÚlà1‰èÁ]ß”ëLz…bÚh°ŽgåÀéã}vÄ”Rg‚QÀÿýÿÝÿñ)'äœq¸ïBú¼! êÌLývïü¥Ä BH6 àN’ÛÁyämCÊ~ûó_€S¼¾¾p_AÞç7êÝS¤ ¨wlaGÚ7Î&E¬Ú0°£…ù¹(stÙb2ˆ¦U37ªZ%×?ã˜Çüa1´"ϸ¶ÐoŠäŒ´.µŸ•ò'C„ÿʱDÌjc:ëæ„Šëz›Úè'š„/Áó3H[BJ¯¯/s|Ó ìcdR¨¾ùŒÆœh£ „„zôÑÑjGoS+T ~h®s}à†ô¦¨A$Ù’ûÇ ÆEè’Ûå±È¹ã3xDPÑ?Ʀ`cñbÂ}>_¯L.j£;ÓÓó{fÄè:ŒŽÞ~žm#=ab>p»g}³–ú«;"æˆQ§á]ºmjao:Íí@Ž Ú|Jøõë7Ž5)µÓ"^ÛhH™8ä¦PeU{y£bÒW ÉaKtL·9ñ:^¸-Õ9Âa%lÒÍ©ÑùG&Ky¸aPi £ |íTHzà#ç‡Ýü½6l93½ Ó¸—Ô Ÿ"‚xtCêŒI#šÎ"h­a?ØÉy Iè—°E¬sû~`Ή m/< _¿ø9ƒ Ðà’%`ò3€u˜ëeÛÒŽÑs+l¬ÈFk~ºZðytX„|F¯cC^LßlHÊü.†Ç<ŒÒ +ý¹Ä$m\Ø·N}±ï-¹UÍŸT /Êûºm"”^¼‡ ‚6ˆ1†'²Ù‡/@Î;œíÖ¦¼^/&ƒzšrN&çßµ¢'BŒÏ{˜¶íYÖ»­+§ÉVLŒRDiâ,pËŸÙXlѹ/v¯_‡yërÞà"¡ŒNtrÔëÿâ/ÿáZ¥ž<^"c ÄàŸ¢J-;šñ™Š-èJt‡ þ÷ƒóV‘)þ'ÿÅßÅw”VíøþýwÔëB½飣ѱ-ü"koÐN-ôu~?>s(·­åÂñ: ¦Æù¡.Ù e‡h'pŽñ‘²>ÿ .$ÅÆ1[úCS“8þî O øüIƒY2܆àú¤º«¶gV5)€-ïh­ÓÌÇ¿ˆÆ=ÊЇ¢Ö­3"·Üçûw´J´~osryßµ³Ší ˜ZŠ9€I…‘×GœðÂ@ÞvJe…î?xõ•í²mä ¡O2¨¯›„Õ­Ë׸aÞ+i âš½“µd†Iíd­©C\çÿÔIÅŽ­÷›lb`ÔÎQŽ]`)&ÔR€ÉL˜>‰ÎC>òwË Ñ•gòı(ÆTÈd>8«´Îe¶áWtÐá›s‚Š{ò†ò > Ä .8üÙo¿ Ò1åœõ*qš‰Òí WË’ŠÚ æ޼¡Ô‚}Ë4xÖÆý¯[A Π‡{اQÀ¥ï¼u<Î{ÀQß¿ªômÛùŸ+qä„}v¬ÎÙI$üs;Ð'/¯Z¿c@Êd@ÅP;Ç”ÁôÆ‹w,ÈçT¤-:Ù‹å†Pmv_´uxŸ1´¡Þ7; ÛN»(±2¿Çø¼ïcÀçdSÙíb—„M‹;vMÉ¥)XvŠ_…RĘ…¤ðÀ,Q:ÛБbFJɺ¾»9&ëXØ@<ŽœwÖÞaÚ`ïûư¨^ˆ‰áþg"o;J)½¡7xc4ô¾äÜŠëºL†Ísuš±»M*ýKNœ)Om¿ã†‰|œÁd1¸os°˜4lóžB+ »ÁCŒ(ï1m¨­ÀMy ‰Öö¼=“ ù'ýïâ°åý‰Äà#ùNS¹¼Ñ¥‡[ÿEe!^!‘¼éL Dö=Üéòõv&SŒ1⺋I:MÅV’ª¤‡¶Ö>ÕÖÔÇøÂÑZ@§Þ‹—UÏjNà©):tUbVjÃËSùçœ *¸k1Sg°*‚=g*Ì;²ª—áð©@œÃ˜ÕLäV‘È„SÇ̃lÇ ÅõþÝš7ÃÛÏ#á9Ä?‹ÅuM}ò V2ã„>À=˜Z> çˆÙ)qŒÓ[µCsñO<­ÉBýrmÓÙ¾ÌZŠÛ8%Áù¡[Öúµ`Áp‰¶þ yâsÆû¤rO,óžãÀ“o‹‡.I.ÔŠ ؃Ìl‡1-‡Æ~g~(}\¤Æßd¼ÏtÑ>5.ž©péµYV8q.}ÅÌå`(Ytn£êfßþøÇŠ=g&vÆô,读 :ñ2M©Ç³ñ™pt”‹÷˜½*—œG’€K‰j¿ÏûÙó¨‚ɇ;¿|d”ó,D*çl9Ù~±P8 Q‡†IŠvNè/ûúì.bÄõþÇë…Þ€Vh– 9ñ{öä81<¬Üò¾³Ðiܵ88ž™ÑyD1ÂAQΊ8‚ºË…?ÿú;¸[Ekyßp¿¿!Þ3Ü©V†>¹À½›ç¨  H‡²icJãu_œ€À$½&üà{ÏKÈK@›7"Ü”‡zœr¦·Œ…í•Ìžúœ¨­R7)pÈ)á<¿CFëL$zÀňaE±¦eöÚ°ojo£tq4T¯ŸØZ'ÈÛQ Ü'#LÔí½ÇùûiÝÊDˆLÇU´Ú¨†«7ùWb[­c Ï4Ží€Þ*Gû½~ÊçIq‘xJñÅÂÏ~’øÇ4á…íYT8Ü÷­2ÚÂG.Ýå¿þoþzÓß—^1gýä@—N‹ Å¿môޏeDžÿìzÃEo¬¦ƒ&çpÞoÞ6_Æ?眛x[D}Úe§Ü«0¨Špº”#Îó²ªã#å<”óÍ”©‚ºï‚¼e”«2J³çÅY-¨sþÙ]¨:ûãX‘¥¼¡Ý•£ Ušâ~„»èömÇy}[Km.÷Ñ Iq½ßP瞬j±ÙýxûÏÿÔäÁCЯÁ½ÓÿñÀÂ{hðzÛß=àcBpÎ+ÊeŽÒ9É22œû‘³A´J7±>£+ºWY¾{“µ†H„4—¸¬Ú¯÷E «=7ÂâćÇÐóöˆr_´"8§N¤?þ°S^- æÒÅÿ¼$øÃnØ÷ñæ¬Õ„òóÇ'=ÑÅåÄ;´ÆlÌb‰Vdé8ÐF…Ö¶Ä픇 y{ÊÔ6ƒG”&;ò¡¶˜ÐMÖÚͧDq‡`Ï;œwøþ~㵿8®Šb•¡ƒ oO¶ŒÊ˱ξ7çšR¢„Þïs´!8¯¿ö/¼¯oÄ”iàµK~ŒmÛQÊ1$¬³ú©zŸésée#ÏÎÖ,_cÎŽœ÷v)¨gA×#o¸KýŒ<  :±¨´àxÚ%#}+¶ý4@‚>‚C)•!Ÿî<߀(‚§¢“ûɉ=3Ã%æ„V:†²È 1bž%M©¾sæAë­ÒI~}#í/††Ùûúà@J5€(G°Í(Ùb)ˆiWÛ;¬ZÀu]x¿Pê ç9Æô>}\âPlÛ†ó<Ÿý  ¤ ØÑÂñDÌ9ó@ysGÆÝÞœBCy‚¾"8Ð<íìlŸv&ÔŠn*Ƽíðð8Ï7BŒˆÑ‚Ìþé_ÿš3oÇ1‰qö21á6ë»)ƒ žrA¨Z¶ä®sbm¸¾/¨IcœaPbJ¨ç „ð¸xYxÎ?”¹W9"gªÑ{`Λ‹i.ÞÖBNûÀ~|¡ «Î«àØ2Þçi]Õi E:pÕ [o~'¬ƒÚ]€é[4ĵÖÖ-ÅuÇØbFª ²– *æ$§ÄXçÄ–é~­«Ò·åzH™£Þ¬>;)ç„°³ †(ŸƒÓÛ.¼ªìÒ$›83eRQõõõ cNÜ×›ê3•]O İʉÝÉòyàq}‹E×%³í/ø ¨µ"¥DX¢whƒíùÒ—‚-s_åé±|ŠT,™‡C×|˜Å’HÖ½<ŸûӋØŽQ3Ž¡TbfĵóÖ©8£’*»­û¦AUÝ£ÔÂä3 ˆÉ]íˆVîBà¨Dhµ"çnvS}•ÂQ¢ +áS…Å‰× tÑÇ”Ðf¥:§[Þ…I8SÌìVì&>RÆUŒSäZ»ŸCÞ °o/x´É°¨ÖYŒ8!ó~߀w6^íÐѱ_ÀTÜ¥ Ä`ñÕF<ôå¼£÷йW¹Ëõìò$xîd*~)'ôÖž „öɱ‡óp¨ãFÚv†õ†mßp•ÛD8ž™ãëŸU`€ÎðÖ;BŒÒÄŒ¢1¨’ìõBÆä¼iOÈ Ë[F½9Jí³"†ïè-Q+F¦_)ÁÀ3ã=ïÊubKt2¢ÀEÆé¶1øÜ=ûº¸[›ìÎó`Tõ¾­øÄ§óˆÆdºcµ<ïrí˜VŒó¾€©øóÿâïàú› >zœßolC0gšƒO¶?S÷\$[ÚøiX!)ÑT ý›£c?^¼4[ÇhÕ¶ŒŠVaÑ©:1JGÊXõ$‡¯× .2Χ/¾’½˜¤³Næ@ÏI™i­P/hwáXcvs… tt~‘ê…}7 «ÐÏÑ bJ9-oڑ©W¡F?ŌҺé…,™A#^)7Z­¨m`¶‚R¨è}°KJ†;¶ý—E1PÛÞ[ˆ}±Ãà 1æ:í3’Ÿ )ëyÞºý‡Æ&K‘.úû<á³µßÓáªTó÷|¶Î+"Á=~>¤Çë…ÛFbÞEtÙÐ{·’};¨ÔÎKÇHfX»a´‚¼íÐ1±¿2Z︯n®Nµ Xèíþ1K­ç̧h”e˜AT0ÚÀñÚYMC8Ê)d ‰ñ¿€Ç3œe¯(BVŠïC!–ÈGÙƒ£ÄaK;ý ê!(ßßx}ý"m7Ñ€ï¾ÿøÆÑG¼ïÇkÇh¥ÒT&BÞ].ìû†ë*ö:›rÉ-i-¡¥!^ÒCQjEô >:”ó² ±1™cÒjAÌÊýFp¦Ìä;çÈgª½²ë,‡„Ak!pBÀ{G°dk^2BZ…ë§ó¯÷Í_øÎ§äp׊l]P±,–mßL5®8ßžS…‹Á9´zÇDTɘØ÷ˆ9?«CßÏiÄîiz)FvìRMѵÜÈÜ™.!Ð¥†b…hÑó2:H£uøèðÇ¿ý#ÊÍ´ÈY vòžì1YXˆ ¸æ“»!BÂ{‡=Î÷‰˜K0ÆD0 ”(мÄ~¯(S±-Š…RƨÜüvðÙ»¸o‡=Ç­4´^s8œãyßd½¯çïßpJ“dHÎDZ¡õÎüm!Ùy ã<ÏGháLŽñQÀ¡M„̈ûd®ø)§§Š]èŽ1'bâ>é®'mµs"í €C¿ »–ÖÌ08?‘ !´·1$ÔÁƒ*àmÒôZÊic›F¶¹T†<›Þ×…-%¼¿¿1ÇDŽ ž:p]'•L)Â{‡”Ê} —xvH‹8ÖZ‡S‡«Ü¨£Âû€};ÐFƒX—Ó+öÚnÛË&£L°3rNóïI€¥aÔ;Oåf`7];3‡úݹ,‡ep´Š×ëÏLª¯¶å3˜"]ÿ$A<®û ™Üý:xÌ%ñî켓÷dbMŽq½ºX]Õ@º~'på{FŸÐ”žï˜–BzÈ òOÿÛ¯Ë#! a˜¶DO…-â8c5R(€”3ñè¦Æá,›RDxÁ+x¿¡á“y!ÃÃâzÇv˜±0cÚò–/Äèí•€¤D$µä¨î©¢]Ð'gBmlÄØ€ŒPï}„#xªMSß Íi¬}˜ä0"„{”3YKNÓ<^‘ÒV‰ÜòPþ쿸Œj¼t~”Éql ÂNçÚQªÉC˜Ëî<ºUe,˵*Fl?e%oÊ™R@å 1räååÀTÇjïÀ¨¨ B0‰ã…ð˜ÑWïl×`(}g !.k?Ú?p!Î1WŸÝløÁOqåØ>eê„LgÚ{ a (}ä¼£” > Ú­x®÷7vëfŽ?ÿÂùýÍÎq™<'Ç'Ü{ÙÌ|7úäåí㬩Ÿú|àrÎ’ E=à)#õE Á3ÜH€jaG±è£ïŽ# 1Åç õ~S ”7¼¯o¤¸Á{¦ë YÖý–˜ß’C/¾á¦c@"å¾9Œ2Q‡9mPZögœ¿¿±}½p½¿‘Vd,äéÚÒ¾Ô«bÛG >0ê`Vä*«9‚tƾêü¬ø ÀšìÇÎô<€¿[§Çf´FÖ•M?ˆ$ŠVü5ŠkzEN™‹mLìÇîûFŠ^ïû²7NlÉÏÀ­¼¢> ¸Oš|£=)×ýFÎ;®ëÄk'þ¿”ÛHÓ6i F9[®bÀͲl8Ü÷'‚˜2D®Z·Ã Ä ÁR3iN°/œç7¼'†&]vi[¦¡±”B®×tF6V¯CÂz}’ÙU¼ð.k@€ë÷ov)ï7ö× çu2Î[å.! FCó+£9jm':¦šÊ_ý‹£mtxa»Ú{Å­Vødšjs‹­v“Êrù˜Ž µôg6B´Ec¶jþb[ußv>Z޳àÑDæ³s>ú€:Á±í8¯Óª´¦;øDé]ðH)}¢[rØ4­ôÒŠ?¯ð Ï!âªåyEÁqÓÌ}†ˆ‡7Ÿˆ,Ú´àuì(µq^¾Š,çéÊ-çAë¼¥´ ƒ{[€>PÓ{ƒf zbgámºÀtÎ’—$÷sùgdF”;Ûö¯¯/üñoþ ÞG„äQ/ ðšú°¸~ýú3Üõ‚ƒ·…Ÿ]ls±$=‹Ò5Çó„ å­13Æ=Hûõ³éƒ)çÍ.â3·?íÿf {9V·å¼unÃè âË&ˆ"éŒ ˜: C1àuÐñ¼¥Œ´g\ï!Ü÷ùàÁ¡úøgBd2ä¿ßüµ£]Å€ŠŠ!ŸKâ‰6H>’wvŸç“mò(°#Ëi:ޝîëÆÔOþ‡7ÅTk$¸úÅ*³ÂYJgT7zq(åF¿e¬åIo!Gh™h£c;v\oªcŠhu`³¬/Úë>ñ:¾lOÈϘ¹ç”³ûŽm£Ëù®1z”›S€ËÖ˜‚¹ªíûp]ÓïÆÀëõ…óý;‚dL!‡Œ.æ ëÜŠ'vˆ9áº.>/Jïó4yÎ÷ïs ày¸+¹àá÷]  3{‚ÊÉè=ºò}ÍyÇý>yÙ ~Þû‘-wƒNóÞªùxócUj{ÆàÝ㫵^è˜ì·’$‡*Ž×íŠ1;j­Ø·ôºÅ7ìÍp8üŒÕD×ù¦ʺbw–µu{¯ô1wjãøŒ™ëa„†1+W9G q¸Þ¥˜ÐîŠíØÑubiOU÷Ùˆ×ù Ø­Ûˆ^”sqòýü¿•£ˆfã&Î+K»!ó“Íá,…lNE¹nbH¼™ Wlhðè‹É¢j9Ï_¸®ßñH1•­Ï¾g\wAÚÊÙlèˆgÇÂêd"æõ¾±;FŸÄ¨÷þÄÈ>§øÊµpë²#ë‡Êóqœ÷ÖM\«$æÂŠc¡™é± :Š3ßi <Ù¢13è|²ÁàbJè…ù•¡L% w.FliãœÒ+R>l¼§–wMœ»®C}Ð Ã"äp9“¿Š-·–‘ËkຠçÔí~öAS{Çqüz’Èîë²Ù2Hksë–\3D1í~·°£cvýx²TSê6ñx‚µSŽ™3}íž‚‡Ÿã%;Ko\nyŒi¤ÐÄ%*¨æ£æJhÊ|ä°}Á?>—3UO‡UbHÞ2È)ÚxíîR¬WlûÁ…¯9ÒƒEÄžï›êž1!‘±¢ëZõ–¿ÈëÀÀ„ …C~¬Atž¿·XGhÎ[ʯãp׊ä"šÒìx— 9îÞ¡O…wÌ¿p>Ò¨»³zg®ßmŠÎˆßQgåWV¹=c¦šÇÉý3;à7ë|: Mì_/܆q W¯ò EÒþB½ß&2 ar¯ˆ1ÒtÚºM<&¶ã@9 ¦Ñ˜1†2|VÊ·)Gù÷ZxÕôô…Åö;:ñˆ&N€®æ&¸ÏËl yÛÐŒR7 ï÷7^¯/L óZÆe'Î }ì.¶cC³Óëe§Èp¸pSµ5&w~j“µ]£l§ÉÀÚ !Zì·™+uNäq– ¯ý…>J¹M)*ØÒQ… ¢ò^(`¢­v샵¶ƒ±Áļιõ¤ÿûÿÛÿâ—ç6V塘cB\‚ŠsK¸×†mKè…r¿`&qú±¾Û"ô^EÐ쿾¾ÐzC-Dc÷V1;CS¶ÍÆEއ”Ïi‹” ƒùp@)ÕPÛöwZjÖ:ìF宂ª(þ|c ŒÆÿìë׎®J%˜ã1ŸJŸ{ ŒÏ À–›~åFBç`¬¦8—ì âî ÷Š=íT[)>[ÙõâM’yÅñ­ÜTò˜ú sB-³@íâUs¯¤G,®Õj…&Qà½_˜ÝG ”kò2”‰Ø‚=DÔV¹?i Î{Ä5"[æO¿§jx÷1'®AÁ:!mïÄ~œ¼¥0Z€”.”ˆÑ=Hu.YÌ¥Uúi ”›Š7t}E>çòFð£çá)p„d LzëÐF‡ ­6R‰3¿ÅèÖ”{v„ä!J·½‚h‰öçfRÔÃRxFßïòc!¦ˆzݲõ…è=J½øŒAS¦€´z!yÐ4ê(áÄ¢6Jçà’¹÷Æ¢ê1G òž!Ãs˜‰õiCNÁ³£ ž‘c(©â“¤ƒÙ)‹õ)à¼OélüåV¶‰åääd…͘تZ§FåDŠ÷›ˆ]EŤ‘òz¿±j-OLJÁ©ÂR‚ŠÈØŽ[\ùB”$ǰ$ì,ŠG›‘tö†—áÎy› ‘×UGÁ}]è­£ R›ƒ,¬íÜä]x™Ì~J ù’ü/þ­Š[ôÕ‰¼10æ}2Cyê¤L²Ü€r^YNÎéÒžp¿/¢ßG·Œâfs7ª²a¸‚WÚéìžëCgòñÂõýGˆ]X^Û±ãýþýi‘…‡@½Çh¯ã w-ØbF—ŽR*²‹(s˜9&¸××Á’Á‘Û¶Ếyøï…Ëz….³§¤x0Cü½ï‹ilÝLcýùÓWªðå”zhZh‹³Ä@Ì ¹Ì…û~`ÅßõþSĹ©TÜÂÜØg©&¯ût d“Ià¼ýú‚ :{÷íÀy½ 4„‚!·GÙ‘‰‚fQHtt]­Ÿ«Ø—'Û¸wó¤:ÿd°ÿüÇ‹gŽÁœ"èÖé¬L+ T[yñPqÖE¼ÑöîÇŠ…« ƒänE“§™rŒŽvK8r™ž2gåéBW”²ãt>Gÿ\ÏWÔ™ßgGôÜ…AÌ,kˆ™¡x@yOÃ*žSu–¢éq_û‘¡"&†™mÕ|ÎÞ#ª×‘êžÝ„’Rq ü™ïûGèÔô9slô m¤¸Y!¨h£ £åžwޝ… u4èì²lˆ~ÇÔ‚¯¯_8¯Š}OH¶àÞ/üþ·CŸ”lèØü °ÉCëƒ9#÷Í_"ŠQ+šÍò¯‹Øô ¦VfvœÛž1ÚĆRoìÛ ïóÄ~¸Ï7BJˆF¾7ôIéw²ƒ{NÂsÊ8ÏofÈ8Ž¢«V`¦GÃÁ"ÉÆÁyÌ6÷»²-'ø˜ÌMÏý"VFtÁ;Û»ðm£cKÎóÂñú ŠŠZ»á†ˆ¹¾O„DÆXŒKMJš9&pl;þæ÷¿¡ÉÎþÃ<  ³=…Œsž 3BÄ„CKÄóc‡kEŸü³õT•üŸ•Ç[ëí?ÃSÅFX•ÔÊ ‚9ûQzG¿h´;^_ \¥T)0Ó×P"Î-³@Ç×þÂÙªaQ²aâù¤ÌâªélN1Ya«8ßßP5]kH)À!‡^nÌ›ê:TR̨×M]HˆÁ£˜Î†Nqb‰³%÷ìxe aq+¿œ—›€5í{pKʬ6ª˜dR©µë %õ<äSÚL€Ç¤`nI§WÕJÛ0^ÛŽïóý ¥Å“Û~äȰå×–3Îó„ó‚Í'hˆpÎû›÷žó8RƇr½á¢ƒ¹JB[:á‡t€=MZÌZ•^ q 'ìàŸVûs©ÑPåC ËßÛÜ?¸uçýh|~\À“‡¿„•óñ§73ÁoBɯu­¢ìª¦s™3aƒaz–Øþ?Éq†Q`Z ‹( ®9ªºÞÌÎ`uß6sã,ã^ÄÀ-·Æ.£-°ê[q«γ@Ì„ ¸ì8¬š\qÁÜA-£§ñ´u¸È" ïM&>ê,ðÞP@&ÝV¥Û{º‰rÞ&¥P¥õ ÇÉ hA«ÝhÚÜIÕë Çnè>x0Š9¬_Ç 9%rÃjÞÞï pŠÓƇ>0Ïâ>ß¶ðŽ–ósÝ7`öMå • iÛx¹*Å.¥ÛC2É0çl‹‘ÌgÕ+'/Éäò)gÔ÷eè&LcÌP™(¥"%O©ó³‘Ëçƨè} ˆ·0&þÍPJ9eNFz'ÕVCË-åÓZ¬‹ØäËè½GÜ5œ—‰ nbÏ4 nû†ó›NÕè9®ÀàCÏg’SÙ‘¤´Qso3T¢,€kqÀø=;Å 6ó7É0;Ì gVy.)jÌÁýþÅŒ9%ô>püz¡^…A]¼ ïüÇ_ã“ç>Çó€-üËÿøŸ…h±JÚÜØëî[Q§Ÿ*]žÿÊÏ—÷ù» ܸýB½VË 5­½Iͯïo¸lÜ ë–ôAÙ‹ãèkydbŒ\Lv4jrfo$"yž¥?`ÿ;Sõf똦lœPî>QùëW™¾~ýÂû÷7¼RH4c;F¹1aI–¿¶äÊŸãÄõç嘀\ç‘`Ukb(Po‹®“ûçIðí•S†ÍhºsèS•‹w¸Ï70€®L=$aâµq/š"ûŽVÊÅlð-ÚÅ$¼èÄñ”„t€\@íC‰]|çûÄ~ì¸ÎÓð%9gBL å¹uçeè¸óžÜ(¾÷ÞQi)ÐKF]ñØ”7{3.ŠóØòQ^j>x 36†p~¿m4…õ×D;kò"Ás>†ªÑ6(šq‘…Ò’Î.žkï4qæ”q¿o QŒ±À˜FHž~!b×y Óß0J…9ØÍ9\÷ËõŸ²%iÚ¬€#ï–÷T¯ÞûûCºX&^]¯®©*åŸý«ÿ )%Üïo«ÌV à4(I•íf¬¥ÄG‡¦Q2Z¥gÂ9±-¿ÃÊ_˜câxøýþF 4®l1Ûr[p— ¯×oœ×JcG§yfÎŽR/P­Qu$<×!ô~¿! ìÇ çýcÙØ2Çi‡‚N¶wäA•jb?Pï pŽÍÑ0š…I Å[æû¦âHM¿î|ım¨mZªÙú\?>ÅBHÏ \‚Ãk;Ð&iš*`ðt¶Ü}ÌqÔ*… Ðùc),\¶!Xç1Ƴ ÇÏ4u±Ð¥©9ŽîÄ °ËÐÃÙŽÎ{o/#%8¸àCäÈÅô†6Óüœ#˜J)¬I¨Wâ#ÿ¿–Õþ'ÿÈó‘Å-¡—jÿû.ï孥6šÌ6Î"h²Û|ß°D’³‹Ïõ¶$•@•|–×ÞG’„½˜r*cXP/°bÈóëòå£ã‰•Úò˜(š9ºiÒÌŦdÆÇéwÇ׃Ú÷çy"¥„nÆÅ~7tLóÊð3ñØbÆ}Ÿ€'%6§ :‰¯¯¥!å` >gÌ$û»»‡µV¸»å¹¿á,K¾·†”w^dÑC¬³×û¤y2lFǃ{Z˜š7ÍœpžAJÓ¡–›?ëþ²n^Ÿ "FÖÊ]·„ûûb¤„8¤ñB1”»™¿‚1Á)Eœç^81Ù^›ðÓò@Ø¥ìq*ÍtX6Š(uptÊÇdöH·`4{—VjŒ£‘þÇÓ½3_…ÝZCŒ ÷}Â{ÏñŸí½xÄÍÚV¥«´·Á8ñÁLhUû¨!ö °Í镆Y@ð~7‹—(÷Y–¢ XÁ Äp_'|`˜âö8^˜¶ÿà^‰q1¤YþÉ_ÿ;…ÁÔ êõÆ×o¿¡×n|#Jü..Ü윱r)P%›jb %²ó“-hCð&ó ˆF—!V~¡˜sŽaù×î¾\T·Ž-nè“3뻜êz;S†$oÒ3‰½ot¾ß÷ɰ ¸˜0&—§2ìp”ðn9³òMta70g¹¹<†ãró¼m÷0ñä5[‰LÄgÏ£Ö=QUÄå?&«Ñ°mHžrÍb ±uA°3:ˆDû»¬êgâøìRžùûìFúG9Æ×=Õ¼Ljç[ïd@ë*›©þì Mm§¶<§8L¸tpb7ü+[«áög¿°è¨ë3[aMbÃ_]{Àºœ°$ÄP¼1¬t~ËÑfb@AQ'ŽŸµØ¾ˆ,ÂacádÒV#ÞÓ|6zçÒ.º`Hì>`ª*~º< Cô‡Õ<+ð)€ÓO°~'ûfòƒŽ ¤'Ïe¶wWyãõÛ/3bâ™ÞgE<Zíð^àC´1,é±ðV,zÁ}6(x‘æ1,*¶˜|}]cTÑ ÆO/ßÍü`-º÷~½¾ð¾n¸èáÜ{·ƒñú¬Åaß2†Âˆ¬Vû’ÖÛR}Îûù;œ `€A9)õï8¾6`pgR{c6Èj%ÏŠxÐ-A®z=»¢â«QRç³ñž†¤=í8o˳%R²6TרF‘7¬RJDaŒn„=¢[òFWåý]¨µN×Uxxiƒ÷1²Â¿îÓtùáÉÛ §è…ZÞ4b¥8þØ #2½ç>Öa¢lE 2X¡ý¬Èaÿ®+Ègo{É?–ì|e;û æ¹™>û>t œL•›fØ„(ö׋Ìûà?§"£aÓÎÃÂÛŒÂ'x"e³TgAØ’§–\ä¢Ày_Ÿwïh@|ö-v/¯f)Ú¢níÚº+à-|jˆàGKÀgȹgÙ?&;»Þ¨ú+;L=S~=ŒU‘_™ÊÊæ¬ ä³wß'?óBŒ¹8çÞº2Qaª:)c¶½ª슮¿ýÇ׋“OÊ}Ãybk ×Ø0 ˼àí]kcRt2ñ.Ûžq¾ß˜}`ýâ^ÙΣû:á]FL£u´9¨Šjº“W;ø h÷€sÜ7B‰™š}c";2§p¢²b 0W½ùܪ i&°¥Ô‹R \àÛÃBDð‚RšEzƒ s+NiÄä¹¼óáRÐÎäöãõ|!ð4F¥Ä˜ÍÒ.ŒjóE“y­ƒ`*oÒ9&tø˜!Ó³ p‘̤0p¿/¸”B@ þøý;\ s½ ‚R:--³÷KC]·¸\qÔŠGË Nq·…+I’÷˜êpݧèì° ‘í·‚ã14\U!c¯ãª9ÓE¸ °â`¢AK¸ŸYÏÊ]Žw÷‚̓KÛŸU‡=Ä#làXè¹,åá¤ýø1jí —"^r‚ø€Þ ž½2\Ç âær,¯«È­ *ɰ9;ÇNÌ':‡I¨Šh ,‰;ÏbšóÄê£4ž}¢ƒ`ЇO ŸÊ¾ùã§q‚1¹Ä> cQ¦ù9,Ì~X*åcD› l18t¥²¦¶†t õ‚à|J¼Ú=¿˜g¿oøõõ\ÔÍÔ‰mhcˆŸ³1m†íás¿Ôt”7ˆ:¼¾^(÷ °ùDB(²aHãáE¹o„ȤAßwÓB‡%¥7Ýqß't8lÛ :„•|ðpÕC"°íFiPd´Rh~m(WEë Þ:SŽmÿsñ„wÞ„?Û'™ï×ñ…«\|ÛZ ¨Ê³³I)á f¿Ã‹åQ{@æàˆd¹úg«4k¥ò8~}aTf•Șæw¤MMýÆ¿BÙx±e&yS¶Gç(A- ×/Ó)—‚ 1ÕÍYMûFEÔ쯪øÇ-üÙU “Vc°øq^ÑK³‘k¬‰%g/¤Å‹ ‘pLúpçrÚ#‘å­ò_ã8¼œ…[…à™v9;•Œ‘;´Ñ9’Is7ô©Èí”~­fÉv€¢Ïf›†×ÊU&"À}]ˆ!¬A¦PååîRåÞQ„îè1y¡æˆVHµNû†hTS0OœÇ~l€ öƒ\©`],qBô…ô9PKC*)kçÌùF]\¤[þ™c(œÃ“êäÇg8»qËø,ÔReUð½óE9P$CxD*«ÈJ¾bx£¸ƒ‡³Œ{ÕñìÆ¸ÓIhÃèÝÊ .Å'TeÉü Ù½8²ÇÞ'BÌp! µŽZn¼Ž/äp—›Y/S¡`çë™J:y~ƒ?s½ ‚§¿HŒ¤à‡x‡ã Nì™¶çê¯þúßjÌßƉwbR­…[VÊ{1éôT't›ÎÉQì=|(ßS9;»¯‚íÐo nb´­U¤ f€PÀà#J¡M3ç„ë¼LCµ“Aíöíîr\[Ø›òeŒ:˜¶ã“®¨ÌÀpÁc6…­TÄ-¡\¦ rÌ÷IáGmˆ>ÂF4—òFʳôç åOà^L{ÔÚžN"ð)<‘ªyK˜Î8J¿¾p¿-Mo€ª&£õܺ È¢ÖŠ‰‰}Ûíc¹;òq]'åØ. æ\©œ¬Kîˆ9² x¦½JnWØÑ1žø†Åí5Ñ…y‰›ê ¨%FÀ>YÞÈèH&f×CÛè“~‘e5Ýðê;ª6î„m¿Øµ#¬wT³v¤PGnµT2©PGGÁTÒZëÄHNPZé|ÿxíj©3`…§‘W8&w<Õð%!œ÷›rß‹„ö‰›·ñï~¼,)qÚåÌwÒÁ£¼¿‘}aô†6n¡’ ÆEþñ¿ø7Ú{þ$:ÚŒ`Ή¯×/ÔVXa˜3yLVH[Šx¿ßÈ[ÄìŽTZùxÄsD» bJœÏfV ,…R¥ÚÆÛ×ñEŒ²_·60Æ ÞÜÚÏõ³Ž¾p ãx}‘_?x°·iá+"Ø7V4×u1yí:1>B­Sâ0ÇzßµÙhb;¦»rŠ=€íëEÈX½MyA¹ŠBgÀÕûDÎFض„Ro„”éÅ0‰#^áNú)qm)hoËê–'Æ–U¬òƒT^£BÓk%ÞcꘊájäH3sÆG‡OãQ6sÄåDŽ،÷8v»ØåÁÉÐ+‚Ošåóÿw@4Cž¦Ǫ܀uáQy 32¬ Š CP|N˜££EÊ‚9âk«Ð: q© „•ö¤)ÌÅÕqI1á¸ð^ÈâÅ–ù†„9ŽïóbǩӀ|–Ýí>ßÉ“¤¹¦™XïOÖDÎ/ôV1f3-ÿÊaèp"È1ó«Å„sBÞ8Ïw“d™Þ dmV$·¡ÍŽ‘€-d”^žâ…š5új‡3¸aJ¦cQÂ[®  ü,³-j×H³¶ÇñBë­lÇ‹ˆ™ÑC´i»pg¸ŒR Žcà ڳV„¼˜Œð‘ɇæ¿Ù^/ôÖ¹˜îÎó0VôïÄk?0 hb ‡¸1“eZ$°ØhoaËGŸÈY:£5„1,oÏdJMëš¶mÇû~[2äþª[k¶Cl˜`ô°ëÖqø€ëüF>2FWʈA?R­ÛÎ]ÒÚ].ù÷y½qì/Vø+QÜk½^/‹à÷ÙK…:‡æìŒ 6Üü4÷º‚ˆv'¶Ÿƒ îÇ´I^a®fPÁ¶íüœ-Ò) þOäÚ„xÿ¿øËø‡×±S:é£éÕÓÚzEëÔ)Ña¨ói³Ž}ƒ‚#.ïõDZs.¼r·­]‹)ÑxWÎ c6`çßaßCBÎ cªÑnMõ3–"ɲ”Zñ9*CŸP¡IfôŽ6*FmPÍâ:cHS:EG5ý‚×ëÀÊqAköá³¾î½cß^˜Ú\Â%N¦Áõz³Ò²e²aÇG•ºkçÄR¢g4ïë8RB~툑aUÌ[1&¦’a]Ð?ôÁ yf—nYš¸ß´|!åÀ–wEl9#ÆÈ¼jk­] kød*5yÕkä%âàS„ t6»Íã(÷´ŽG 2þ.,”IÌ«©5õ‡à"•#3u¶<68¥š¼töùì>ÆäBxÛ¿ cr´”‚½|°‹×‘ég²PÅê"—¢0'®ör¬èùލ~ÆœMÿð‚˜»—ü*÷é&¦`´úŒ@—öý9”Z0 5R[eâ^kpÓ|5)¢·†Þ G¬“Rð1 ÕUƒqb‘Ë´ÚXçcÄm*°|ðPˆÑ´bôÊE®©±Ò¶£ßÌd÷Éã.¶ãeùòN'œ0#ܰs‚95:q˜SÉк+æè\ø‚]&TÑKG>2ê]q‡w”i¢‰¿ÛœÊ¼uežÌšÓW3KL¸+á–¥Ò¨iÉ:p!†ß$Õ~Á?ÉÊZùê9E´ÑP¯‚m;Ua Ñúá樂 ë9âªD€ wSåYÐJ帾2Òtrü’[ÃÎ2Å×ñEƒ¦8ôÙà‚ÌUcƒ=Ø j¹ ¤”1J§‰Ì?j­$Q'B¢ZuÂƵAº>j²\a¼òu¾á$òdqŸü! æÈ"X-µu*äŸý«ÿAÇàÌü±Ñ:A­eN¤öR/ ÀÛû8¾PÚEC¹‘|Fo+áx½pÝD€°0µ?ߢ]Ùró5\r:RY¬¨RÛ/öïrüdÝ…RÁ²í”þr@.£x Îä”Q[%¦¼6x/TÔ¡¦ ›vèÇëæ¸Í¡B¦ŠÊö&"î ¥'0Ö"UlÇn@7‡Ö:¾Žj)X Ú»Ü:ðÚhä{ŸkÁ;¤°QͲªûp½ÿø"‰ešöÆ{ ‘Ÿd û½ús c©«äƒÇËe®ÒÂHè|Ä–Þßoäƒ3Ý5uRLmÙOJ2 “=Äá: ¾A7>þj8,ÏƒÅ©Í ç±Z±ð­i¹÷Î{t££’cê¯ ˜¶£¯ÁêÓÇï>Fˆ*†(ÄT:¦ÈSƿ²¹×çA]…‡,‰¹ÿ\+ÙOÍÞg7q…uÓ*c™µ£õ†×þŪu4^bFzþùÈRïý#KïÇ‹E‘íÔºe…ƒª-„¡Þ1û@Lñ‘†G«TŸÖоƒ9yÑùà=9TCœ„=Àã^ŒÆUË®ßvŽ4ÆèØ·Z&\¸¬ÓvS€ÈÎgtºk¯È9¡Ùª Çab»Ü©©¤tLÖËæûªµ"m£Qmx¿/¤ÄÍ;à*׳û€)óÄ«©Ò*r> P¨ˆÑ£VN f·(â®â¾ßþnyȼOˆ12¡u’ÎgÏ –â-’Ú[éS­3Åóøp\ÎoFÈz¬£ó)cTî…Zoh¥âu)âó·øú³ß˜~h~v—g¼m®û›¨§ë¶±·2jb1žéà"*tòýËûŽòæèlvš±ç˜”C±{«CLôØýãñ¯U‡";昨£"çHÜóä('ìL¬ªm)y wäcG¹ßð~I hçT¹¤É¯/œçÇq@§¢++ê›CŒ¨÷‰7L0ü'ç 11µ ŠÇñÍÊî¢[ÿ¼ŽïëDGx“"r‰°ÝTÀ ¦â±«E…å¢úóÛ__lEtÙÐö¢ˆ iRŒV±_m UÆç¯RÞLûÿ6²Ab½-sù6øá%XÁfƒy3Vp‘x1.gÀTæë¨8øÞ¡>0ÓÄLqâÉÓ qC+ûˆ…Ä÷­^ŒÓ¶Oõáé´´7¤í@-ìhÀG¢VîïÇ× Ålƒâ€©PGñÐù¤öÞ°ùêJëÏHê|ßðÉÁkÀèŲ^C'6Ë»W¤úàñýþÇë³d„Kd€“s!;søÓ÷Ö1 ÄÒC0lLxð1÷uÑùŸ2ľCo—|)„.cð~›.ÂLš©6FµÏ¦×ÆÄ׋™!r¯y—ûQÞyñ6é˜æÅ ˜*9Ñûxò<Æ`Ø _#âha€à¾/ã~3Ö“‘æÄQñ:çãçŠ}HVÅ@þëþßkWrõcðh“#(,)ef.Oš’Bð}.-Õ!9ã*÷óA;§˜nµ‹\àyÓjÃÆ1D”zÓL#úèð`;=íe#nBW©ÍÑ`•xÃ§ÜÆ3‚cWð¹hØyTÄHYïÎqæd·`‡«Â™B ¨•·|ôµYbýu­V‚êærP«ùì–ÄŽøUíz@IîzPV7ã„'±ÑÓ´P)˜qo©œV2ãºTò±Á#â¼OÆgA¿;\Œ!«è°E½GJ×}"ˆ-ñƒEî õõ.QHIîµ~¦fÀ$\¶ .!í{ø¡NR»Àʽð òASرºÄZTÛÚÈE„/ž{îù¬cãâ?|Jøçÿî àÉ}‘·P¨…(Qº€ Å|d¬t¤„]ÄÁ¹€Ñ:eêX;<·ÎgÅ3¶8¶rŽPu(õÆfºý1æ£"¤íOçÉög:‰ôDyš=Y;ø¡[¦"fOеIÚc¤à„sŸ# å†r¨tìù7”ûý#‡ŽÊõyæ˜f Äœ0†bÛ®ßßÈù@ÃĨ.EôJ…wŒy˜æ–/µZDmǺjuöO$6ŠVºÎëuÂÌô¼½€6p•o¯/0„äï9yOÏeí'÷lÚhà¥Âï,'2¥î÷ 8óf5†DÁ‡z¾¡â°oÞ÷iv>|÷ý º€¨¢ÕŽÑ ɘ=VV ÐG£bÊò} Ä1Æ,C¾O‚f1).Øö×õ~žý-3'¤\7ò¾aÉBuLèd$ññza(þåºéËIŒìu6:m½QÚÛè«és"o‰´ Mp¢ðF*v1›ß*lÐâœrxúªÓ|cö>xùçÿÝÿW­3ÄŒË;¡¤1̃„Hïšp‚÷¸ËmK$×E'Žƒ¤¡jÕº—'òÁ¹ÜbJ™Ú dä~ؤgq³Ìˆù8Éœ¥­Mx‰h³# «®:²à†¾dµÁ#@ÑQ*S×®÷iŠŰjéH®r!åU†°Å¾Î‹ã-ý,±bJ¨­==¨"æÄUX Ä o‚§r]Cägˆç2Üò'¼¸á´u”v#çãìMLâáYOÒ]nUê _²ì «†cÇy¾Ya®<Øw!†ÙhfLX®y mú Z[¬‹ñQT­J„èÏ-:þ´[ˆÁijÓ"#¬à»-dý^6®ÔZìÏ¿&¦|’5¾1%š7üÆcTY )q$9Ë' Ì{‡Ñ ˜‰a]Ö´q ïj£I¯òLàº]lÎyl¿ïë|BŸYÓ0ßÔ]N¬º)摱O–˺˜”³ðâ?E¸·ë­a: BHðŽ ÿÖXGçx!:sr¼s]4Õ©-“á”#ªIlÜIJ¤hÓ.p`ª`œï7¶¼£Ô›ïÃ÷iÏÊDÜŽa†ÞhPM9ã<-HÝ#”H!ÁÅ`ãn^|Ü™–Ú‘²e©²åªDÇ›Rîþ¾±¿{å:±o$A5Òݪ‰t„98ýý¼³Ã¸ #@ }NxïPñ"qίždâñú éóN@'J½×ÓÉY°m¿ˆc*¤ú*h澡}rï«üÞ€ö®dµ…H°¤KÑv¦ßp¤ ¿ßO(XHdµ-å»aì5ŽbYC)Âû¡;…›¤2H¨¥Ð ËK#˜¼Ñ´/ˆЦAÕ\ÄD‡¾èu >¤[[ÕjÅëõÂ÷û²¢ÔÔLâ8îU.²}ÎØBÄû>­úL˜³Ú2Øc ÐxÓz¯8޼SÔÊY¼O”&«í¯X ¹4ÓÉ’â!zä‚- ~?oó]8@8“çùã´0[<~}½ðû·¥µaÁ̈¶Gà"v .8ÜåÍJ?Â~ÖìlI´Žif&xë†ôQ¬P.Lb1¦Âç„Q+sŸSB׉~ÙË⸨—É[R£÷bÚ'ùY@/l‰¥¹o¡Y k:ÃßíÇ K,àçyîüÙòìSä¡O\é× =s˜òë£ÊZÝ£s‚ÞZ¦˜¤÷Úg²þy}혃Në>HD˜\膼mLšNù\ÿ:^(­™Ibå:!>"mÙ2c¸ïë£"H˜N<ò±BÇt*¶´1p(:ÜWC !”RÙÝ8à•¿(­)eJkëõ ?Æd·£L‹,ؾ˜¯Qk™pŽRûr¦x{­.ˆ'ñ¶uV©B‘@‡a‰ìçÎ92Ñš¢TzÆB „´·a2_ª&‡RÀÐZÅ”¦º(ðÃq|c£²RÎx¿g1dНõûå¼ó{*Û¾ãµoøOü!zˆô»š=ÀÁ™dŽ•†Úêólˆ£zM­FŽG°÷«I¡<¾Ë…)û–&Ð@öWŠÜ‡œAiõ~¼0ÆÄmDâSàœœ’´+‚éX\ïùÀy}[ÔxÀ¯?ûÂúÿɦÄþ`NûŽ.ŠàãËàõuàû›1âÁy„œÀGú^82$·°¯ ÃÂ4X2¨ü“¿þwÊê¿"û„%~è,¢Ò’àº+òÆÉš»ÆÈ fèà~@¨ŽØb2ê¨fÂâÉt¶ŸVÁÇ»^ˆž@8ªžœx”v’é¾ËÉ™_ ¡æõÛÁÜsÃÐõ)(÷ý‰x=väpÞ" NÎ­ È£Zig>lÐÆqŽSç}=» 2/(¸ß7= 㪛+C:ƈrÝÆ¬’ÆS'ùœx]y¸Þ7 ná/¼g«žwŒÖÐGƒ¯“z?]mxbØa¢æå¤1e’€ë’'iàøúÂûýý YbŒÜÏX.C7ÚjÑž «ÀubÌŽãxá<ߨ÷ƒ¹Úž£®òS$µv›tyÀÁ^èÚi(£Í'žY„òï”6ô6áR@+kO£|†RbGêM("x|`Ër½ßÈÇèD»;t4‚{Ãþë ˜õ*è2áM%–¨ÑQš9µKG<×Y‰Jg÷Ín§Ý…9AêÊãõ‹ã\O³ÛuÝÐÆexÚ7Ü÷M£’ +``]H&€{\CšÔZ°¥ m²ZŸ˜ØSf¾PÎf dçT{ÃlD•øèPk'C0ü“y¹ôc¬Õ©èé´ à÷¡j¡há¡c|}½PjŽIñ†vä˜ñÿöoðçögx_'âÓa0“¦Ïä‹>Œ'DtñMÇlˆ.¡ÍF©òñÂyžðâà’C/㉖穜Ý7p”^‹ãò}ÏJ#ÑØÿýðþ@:eáꎣåñÖÚ,LLlëÏñƒ‡S±Å:¿¯µW.Õ+’»\h“‹q·9 *êh¥ãÚ9ç`R5†Ï°rÌ$˜ŠßŽ/\–Ü—²:)0‹¢Þ7áâ4%ýñ€½âºnªFæ ãÞdŒ>$s%‹éšjëìà•H´@Œ4çÀa}1¹N¾^¿aé„~ǤB©Åô®Lüúí—S!±^Ê}1ånÚn© Vl¯ƒòi«‚go#…ø¤¼‰ L¶‹êd*$&v'Âî ø€É˜Eë䨪ó¶kIÛ‹æD놦…79ñp!ö'½3КYQ×xf °‹$zûßÞÅ'ß^p¼~¡­lr¥AnÚåöë×o¶RQøäYTx1ˆ`€xÏË]© ZrpV÷ιâ¼õUÎ!xÏôLÐÌèÄ™ìf„éÿ+fmô L|<ÂgcíÄ|ð$ÛŽõc´VÍaÞ>®x»üC ‰ ‘­ßHyC¶¤Àѕ٠õ¦ÿÉÉ#ƒ“±¥Ûž0¥›êø¾ÅQlÇ™3÷”b¦  %ëNM`í"æP¤=q¿Ù’Oö!pA¿ú=aaˆu½6Ü­@ ‰¢Zí&ö¯ÃÜb̈.ZŒËÄh)Gܾ'’"Nò™bæ»aL­Ñ¼Cf÷¤I_wAN ×Å„?$AŒ^„Ÿ»*¼Ï;Ö[5/î<—ÈÆFóžq±>™õcŽy@çua6zuh„npsÒ{ÓƤ脿«Ú÷æ €è}t´BΙ7Å(ì‚vÞáûûNî» –‚éÎû¤Ôytš€™ )­!§]ŽÏÚt,è¦òòW‰‘mÛ¹´$(dó,…¦Ûh{Ÿìz…¿ÍO̹üãñ¯•‘´‚¥jwŽÇh”9†àÑÑ ÁÃó.7³vGèì(rÞ0ÆÎcvÏèÙy¦L}uˆ¬ºiÎJ\šŸÔ^<í!mšAÌοocLóœÈó¥µN­s¹.›¥Si³»…Ö°5xl[Âuu2R¯ó˜X )Äq'!“à çV…¨ˆ™‹ù2Ù|øxýFܼýy"–Ö–*ŠGVŠâr:Áõ>Lk@ËF!Øáz³Ê\„gãüÛgXñ©¶ôW¸Lnk ΪɒP ÕtÃûžìs#¤hËRBÝ>ÿðà£O!–#Ã%9w"jσ3V°”ÇGí(òsuÂÐ/]I…"—~do¡Sj"–h–€™,HTc-t|¬?}€¼•iÁxÅqÝ?¦)÷L‰å‚·ôL¦ÝaŒ'yÑy1úlˆž•ª J¸]$ŽÞc‘b™üIS'#G¯ûü¡€@hžëS)d µœðÐ¥ÛŽƒ‡àfyÖ^<¶ãÁyžØS¼G5„G7ÄüœÛ׎z7ĘÑêe2VánÁ­}!£„¹â˜`±S/*Ðú Äûˆ˜YíygvÏ$¢”ÁGìGDo“©wΣ”ÂÝÑ}ÓûR+yaÉC„fÄNtŽGŒ0È)â,'¢ß°ï‰‘ ޤølçÐ|FšsNÔz“Pë9²lWÁq|¡Õ‚`9ô÷u³2,˜Xô9ôÒ0ôNܶœ˜h£¾ÑŽcÃi£I~ft ç€:Æ3ÚÕ©9¢¼OC²ƒFãð¾.„îÑuàõúBíµ¤9ö>fµX§RB»ˆ‘ Þ&ÖåÞµ`Û_3šqU-ê€}í;V¤µctBzçkქ©zÈ?ûoÿý£ˆeÀÉ R¢Ý]\@0ƒ—bê ò¦Ú¬¦V²ƒM€=m„*Ö[Üq7>X:¶”1ª>&eiOk5RØPË…”‚(WAw Ò%‡ÉBwËŒ>û¯íE4ˆ¹¢—BÉŽ“D¨Àz¿Oä=c´9ï}»H4õd¢fLJ‘0mG sRTû4’"Á‹s*¦©É>a^¼µx›ÏJ˜À²Öǰ%²¥ Nʆ÷©ÉJ±%X dSP%¶hF ¶@ÔÏï1§-Ðû³Ø^øçCLÇn?û˜ÌD˜ciØyx=» eXX‡"8áxî¹t??fˆÑ?v~açmœÇ;q+¦{2Cì.<—ã‹r  µ„ž ^0[Þp—Û:L:¿½Á×$Ïŵ<üïÎÒbF†L*Õ¢Ù­ŽÑ1án7‚ (÷J¥S„0Ñõ£êZʼ¼q 4”ÝùÛäí€à~ŸtJ‹¢÷bÝ9‘,Cö|à¾ïÇ{Bs;"ï=‹7Kµ»¿Oâé§ôÂÆ¼ß¡2„vΑôÞ“õŒÕ"ÙqµT*¨¶ÝdÃÑh±L°P™”rzpù½ x×L áÔ Š^+Ò¾Ù£ê€ÉÌŠ%§£1’788a¥ÜJgwP¶mƒ¢ÿÉs‰Z'Îû¾o¨+1fð?Ó  ¥rÄçƒCù>R†BMlj@ð½O¼ŽÞç7D€¼¸ëÙ>´ëe°õf°s~|J`çâAühê˜Fy™„jˆM~Úhˆ)}§€V¹fcÁØ:Œ³eÏÃ@¦ÜûJôOz¥_ÊYûlÔs´›RDp_oˆ*¨:lŠóâàc+“Ïå¹Î ù?ÿóÿ§v“lRc=°m¤FÖJázûè} ¯t5µnLÌζ¹–ÇþÅ[ÏÔ û¶ãºNÆèN.­Fod-Y¬öÂe±½òÎÁû€Þ* GΘ`´dˆÌy¿/$¼Â‘…/ž¦,Î5í…¸!·Âü8Ö°¹÷¶nâü~›<‘/`ˆtÎC;Q¿–ë| ¼/SŒœïoäÌàœGE%lÍaÕç}Ÿbæ<ú:Êe—ôB§ÿie޾¬Ýv?et:/ŒÓš„ãÑ;àAëú)ÕµŸ6ûÎèàÑ“‘¤)Öí¨8s³ÿI’­X¨Óà%¿SLì€ü\ªƒì)ùd­¨Rù‡Á!ÄøRc~RASœù_M>ÈïJ9éá>Å”)TîbD¦i“íÂw“ÑžC?Ê5fCð³€C…f¸ÎÑÄœâãƒÄææ "0'̵ĸ/o¢‰û¾™íà6%#æ@Î;+[ëþÆ,N<oŽjÇâ¯1ŸbÔu¬wø¨L›Ù“/æ$>Ëö<‚OB0-zÕ=`qB$ߣ&’R‘ûÝheEÆ}^ÈÇLŽƒP•µïîû¢ò*D•OnÀI´èˆÉqªµ×ûrö˜Óá:ߨ·ãÓ;µ1nßÚØ¦¢—ò9“lù|ìT Ž,0Lïs40¨ùÇ„†ÁnSo ›¤wO¨‘ æ3½Î!z†»ÍIßL™Öÿ³íõ¢dßJå9ÀÍ /   ! ¥ˆûº!ÿ—ÿûPµ°žzÀæÂÇöDñ¾¸pÎ)a6Eé7¼÷yïÕ‚c&¶ã…9å­+a²¢cmϨ•:ò”"¼xœ÷õ9uy GÜ ‹>!D.âÏ÷ï6s5£•^í/ÊnU©éÊqCkŒÙO\ÁeùÍŠN”'ÕVžƒŸ3Ô9gÉ!bsw¯¨½0s]j” Æ”(RØO’çýþ¶“É€~*%VㆱÑ[Λy.–ðc8\Kíç4ùÄÐ>¼¬u¯Ù(òG—²œç°Ë@lÿçžñÖco‡-Ú×ß+v'>—•A׿o¼,~`¯ÇX—–÷†$ùT÷”£vÅ}~6&­©EÄ.ïŠÍsaòd,?Œ>?âÓšˆ~Xö™É§¹ùtM}r«å™ûá™ÿ¯Σ.ûdŒ*°;z%é&^–߻ܸ;¿½pÞ¥T¼~a¼Ö cxFØú Wcø‡ÊÐà\À××fÐCÁù¦|öugêX,IÀ¶e\窂㋞^*Þ'^þ. ç̱néð™Μ)oæS¸ö£øÑê çÌ'fTé>L‰7=òqP•2®ó)mäÏLäã›è˜£ãõÛÆãÆŒ $ô®–ð7ÑupTw Lƒ7imÊ>D{4FH9@zeCŠ¥4„L¨àB³«vÔwÁpÀk? œïC&^û s4Â!Ï3¤“ÊÉ-ï8¯ßálÿø˜ƒÀA„¡ª€ÙO ly³ð' ˆZc¾G·±v°³Ò?&bLì`‘Äåk2S«%‘nûÁÕƒÀ’Wâ–à&…ë|ü)Àa2è)Û6”Ö>BÇIe,]T`M¶´¡Öþþ—ÿð%?gJh{AëCÙY,…U |ѼÅÞ:˜:SîÛh¾D¨ÉS×±åŒR» Ã:“ fþ^v¸ Ö v>ç9yT–ñÙ`™lÀ‰é'ÕC*¶ 6˳ß0gÓ04 ‘ò‡úúùœ µØ=TC: ôó8ÎÁ–lÌH™s>ž›˜9ÒXß/µ<ÔÐ#­‹H%î¿Ö Lîî8:p.bÛ3FŸ&ÆÄ´qù>'ºVv¢².LGE’NOmXÖu„Gr²s†”™Ø_„yîÇn’Ë‚¹À½Ö;ò¶™ÇIà£3Ì7îßcæ,PØ·_ü™<ž‹ÞÉqҮɓû;ï«Uo†Uǰ"/môVmTì…Ñ»+®6X†Š‹:où49µ/NN7ÉZ›‹á€VŠ}Ž‚Z ;Ç9áœãùVö× ÁÂëļšrByßè}‚¨þm; žßË(•èù˜(˜˜&wì<æPf" àÁ]J7Dÿ¶sdÉb–"G^—ÐÁçhLbqÚhÆL­æï"°Ó³Ä´@JNW¯•E=^û‹c1—Ð[…:Šwbfú,YqÛ¾s’0'ò¶™°Díœã8œ£e*#µÌÖ ÎÁÿÅ?øGqëâ—ãLV+—˜«qädJ¦A~=€asLΜÉáán# ¥DõˆOöłڪ í°LfÃ~ÔÉ ‘ãØŸjnyââ±™VP'ÖÊzKtëT`8g°4gœÊå^¯z_ì¨OÅéàh0ÓIsŒIJ·¯ìz7L9]ð9gŒ¡¨åb%6ÊIÇ+å{bRÑÈ€„HH#·eü»…fÊÞ+ÑÙëg áQ¼Î6>‡‘x*îuÀËŸJdí· Î!¤Œ¸e£Á.$Ã: éƒXyë€tÁYkk§yð?œ©«1ÜŠ‹ð´‹Ä/φ©Â„¨¿\»XÃ4/Œ§åØ îs,—* ýƒ/‘¥ÇX•¨U×ÅBq€DZ„¹¶”†ˆjXrµÿ@T1mÌÇ(×Õ­°‡rÏC°¢U`&¢9q/Òç`ÖLN&©ÛõB&WpÏwWË”"Ò¶1cÞ3}P­÷N9Ð Ž‡¸‹è6f®Âþºå|ôŽÒ GPÖUëVxÔ°ØhªÖ| ¨½£×B ª'J'gù­7‚ø¦bÛ^¸ïoÒ‚·ßçùýø¥Ö59Lé˜/Au 3d:ÔJ#RÊh†Ý3QJ­b‚¦ºõÈ9Qîú м£ßlXÑã¦ú¹˜”÷tâb„‡6;BNpÞÁ©CÎï÷›;¥™Ú; Â#ï sR˜·z¯šù§Úu!¤„zßX÷‡B±åÍ„< RLÉ#åÌgæÍõº Y¬ 1'\÷ Ì*wÇžwŒF+ÇTA“ Þö¦”ØŠ*ޝ_ÄË;ÁëõÅ|C²‡Àå¾ï(×m˜o³#û‚J°zˆŸÐN#¡¬ϱY"¨¹dFñþ«?¨~:s9_ˆ[B4¾Ê“©[œ-ÞD~ Mꢵ5cÆôÞQ[¥²æùe…æ;èTiÕ{ù¡¼\ÄÆ¥³­{/ôÒ0ÐÖŒ†N¦¸y£†K$ü(¿ô9R'&Zµe®#N¡Ô‹8öbŽ”.—MÓ)½%âö׎R+¥¯¶4›£Æ›ÒÉÖ*Ƹ®Þ+&Ø¥\ïÓ2»í‚Ø…ä •¼Pá0)µL4³O¨%@2[Ú.Ë –£ÁÅæÐŽ^íÁ°|iÊrû£Šø¿“ÊÏQm´å ÉŠXh;sÐŒ7š!ü w ¸l&kÉê(0êìDðÒ˜Äñ¯CŽ XQA:6¨w˜­bL1ŒK;ÿ¬HL¨¡ÝP4cÐKäÖïIn˜sÞvwä¹­"E©Ïjtà…T±.ÞTeëÙ¾Ž^ÔgÕÿÑO§n¹í­uˆ£%å ËóÆTvÏÄ$Ù™hü½è¼Éè$ !?9Ùx/´ÖžÌðïý_þa” ‰ž ð× çe‹¼¡¸j ^®~â4èDŠ1íè&‡ë  bK™c©9qì_ðbÉ}À³´]ë2 Î"`íwNðÚÚý×$Âq,µ/èd:âu¿mGn@ûOžÈÕâ ÍÏ»ˆ-&±“H."è_†z3¯Âù wbE-+qÞd¶ttí/”Ñ‘ƒ·¥ÿŽzWK&p†Cøt<@___ˆ)cKÙä~¬ôŸŸY©Ê>àØéÓK¢#02O[­RñŽÜ"¸Àß;P›¾ª#±€.'þA5/y-ü’˜ü8˜ÚÀGÀ:&Çd½i)rY+ˆu³†wwŒ ïODCĶH1F ‚’ üTˆKœm+eÍ¿ýú Û~Pé“£Q”My“)Ÿop†áÎÕ7Çò;õÎ1 08Ü×…œ²½oޏñˆÛÎLë@¯YZyÛMš¾'?'Zcjg«åɲIÛ†û¼CB¹nSL&È 1H¤B*mTv9æ†{ïq)‚‰‹Ö¢@qlÜ?„Ÿ}WÌÄþ´Òðë·/Ô1¸[µ¹Á˜Ù.ÌZ›aÙ™óÒFeÜ®÷èÚèßð­V@™Õ>UÑk¡bIi3ØR„O¼`œwHÛÎ.!„G¢,ÎTµ±¨´Ü9;¾¶/ójS¾~¿O»  :ŸAßTˆwhWÁ°ï;ý#“~:bB0»þ-ïܹXÇ›óÎtiÈ)^…Ô‡"RHƒñ!ôRÊ27 ¨ÜõÁ1L*Jsø˜1$òuBþOÿü¿×ÝPuï‰M°Tlž;'/‡Ïbq*#F}pˆqáV ¢aFÚjà ß1–$:¥ŒV+RJ¨½cö˜Ñ11-sŒŽ¯¯Îóbu²ï8ÿÄÃ-ϸS¸Ï“·:ü IýeòY’ñž¡Ê˜Ðûb>‡s­v[W|}µ~]o8O†7L ¤´áº¾áĪZñ “œÂiã€åD‡‘¹8ãßÝ ·òª–ÿma5â†ÚïgG0W¤fê!v\~…(¶ñ¬š¸tõð| MÆø˜þŒ¬ÌîÎõ墖öÑ?$Î?ùG¹È½ãu¼¨ÚkDCȳ³ü /胿óµô¥œO…ÃÙ¨ï$DÀ'c5Ž&áœàÇ׋Kf…e_°éñ!Zêã² z8Y¸ðgïi—¢{Æ&Ï.eüSfá1¢Ä=cŽaa>J»ñÚ¿(5ò\´¥TÄ(•Váò1²ÊŸ½cTŽŸˆšQú:,t¹™Õ)¾Ž_8Ï"Çë`}·ÑS]—Ž„Q™‚9PîÊÙ:€>èö^ãSç¨{8kÊøår]̹9O«BîF‘Ó¨Lúýßfþõø~¿Í;ú¡<ÇÄ\‰r/¬¸I·­PTû÷£‹¨³™yvù£ä©rx0=”J7`NÔÚñúúBŸƒØzÎ ¸‰2λò¢öôU6ˆ¡?^¸ï Ádó1LMá¶à“jÄ5=ˆF%&n¶„Eë÷ï'tYï™À™œyôïèg[[j 0©FƒèCmgG5Ô¶eÜ׉ãëÎóýâ *ê\ðÍA[{º÷ &ŽàƘ¦¤LæéR„˜hLôŒ®þ út^>0[uì\m¢³D†òOÿúßé’ä…HÚç:܃(þÓ¥ê:rÞpžoÈTÄYçTþDˆP¡¤äœà%¢ô‚Ñêúä 1böNuÀu=×ó¶í¨}@1-ÝÏè®>¡´ gKµÖ:ÓÁ6Ü{Ç(ÏàɺqŠmá¾o|†„?]¶(u Cm†ýÎnˆ‘tY%é¼\­‰AVÓÝ È>«¸í\:­/c’Ú›2ç¾kQ5{ÇqüÂUxð‹ÒÌç•îàeº®!Ë‘¦ŽPA罉 8çV[Ôޏ¶“?C ?a˜Üã:ÿ±ˆÆ<3 }”’á`XqÞÒØÈ¤’€ÑŸ?‹^C™ÏÁ®*ÅŠÝ0Û«2S3—)æcAá?Á²¦§Åè’ûÅ1ÇëÏ_¸ÎÛÆ¢bÌx.Ò]–°’S`˜LQÍ•¼¢‚Í7ʽΜüy ~IþY ém4 ³²v)ó ãñÛ¤À1V×jÅÑ9'Äp]µÞ~ÃT~¯ÞGb‡tØníàCèYÕct ôºïÇñ S¸@£áxýB­Õ|TÌ»€búP¾Z_Øz>žW\,ôe8˜nû¾éÖ_Qõ•GŽ €ÏkލeXT+eùÇi€IDATÇœ0r4¶íû²žõ€$J'îÎÄÝNÂc8í­[ÆH6(û¾3ÌiLÔzQš;¸zb»;]UE½*Ä‘ÁœŠíõB½nò´î ÛNZ€óœmœ×cíLæ½%¾£?}?¼Sæ9ÂGF ˜b°p$îübšÑ\­†´y_¸Ïov÷™ÇAœ%hÎn" õû„dOqÎÈ)£CÑÞ\Ž=(°”/wË1\—bUQzEÏÚÞ UífAîÿgñþÀ0 £º”JÖ_Õ¶÷†ØÞR†:µ¼í ︴tÁ1AÌf­ * ~í¿ Þá|Ÿ͹Yœ³Á}DûQuª’¬9ÌLù sTÀ|€˜œç¥çġս7Ž„#‹©‚œ2Îë›YØÎA†©³Öe"щ1¹Ûس~­Rb5>°§CF­Pùì" B‡˜Ì;x¦§©ñËæGV X*g’µ a<ÔÞžŒmsEkÝö/ ¥5xçQZÁ–wˆ[c>¥­6ÎgUi"[ZpÐ]Jã• U§]ƒŠ©µ0}zÑ|0:M.l°>öüŠ9àf¯PÔ¹ƒP5E¢£?žÕñì¹tò»×1(´è6›j@óQÈ £²Ür®,CÁ~•Á Ó€wt˯®Yž9¶ª"xA·_9Øå:–‘êÇe*¶7³k‡ùŽ>˜Ö‹)¾<&º©Ìê}Q`Vw£ ‹/!“7¡Š¯cç²×d²°ç%Ùn®Ô›`ÀÚ0êD~uÕ ï"îr#ç/8/¼ÐEHãA¼ØRÊȱhï@¹ €i—†2C<'l)™JÀŒ³VP 0d ¹I1GŸ h½Òá<šSuDŸP[ÁÐŽý8Pêý€PeðÀŸŠugaoû;xî™Ã¥8¯7÷dÊË>«}Ëî¨íF1´¾sÕ¾“õÑGC“‚„ÂßyŒaÆ¿‰×ëÏÐk%‚]ˆeWó¯éPäm'ÏoN´A^ w¢ôWIàˆq4«ˆì!ZR_’øpÉ´.Y'&,÷Å9&/:3ì®]¬¹ Óv«Ã„†–bq¤V`zȦŒäÏÀóT±B(¬2ÊwÌ ƒŽ{;¯‡vҜôŻÿ{ù¿ÿÃìüÃkc(Ԝ۾ã>y-ð¶m¸Z…¶a8 .ÀLÓ±oîraßwsYOÔÁD-±/ÀØJ>QEa­ÝR9ç1ÇÛH̸¤½ |Ú+9÷庥¦â®­4‚äæÄ¾mDoLšÖôÑÁRVG„‡2KÝFu)g¨šBi ¦˜1ÇŒ6|à ãú©’ꕨ'4.³”Ê,5´·Œ›Y`A{I·ÍLrú¸Î;¼¶Qù–çÜçÇ÷ë×oVá ´Vf¸¯Ücˆy0¹Õ?—‰º†kYÙõÒÐyÏŽsÍ¿ÄÁ^Ì¥,Z„OøÔÔIõŠX Hh»(•Oôo3;vþ½’œŽØÁÝ&¥Æa5?+C=p<§¶p„˜2fŸÍG#jè›çÒY4ÞnÏ|Y­]ÿ9ÒzÈö€™Â¨Üb:"¥ÅÎó™ë­!ç fÊÖ)T€`χýç¼kècàë׿ä¸!n÷y"ÆhÕ7•E.°h`*§Ú»Ô1:i.sÞºeÅèdAµvÛ»èè7š `£nꤲÞ:¹Ãë•S Èû†z^¨½ÒoÎ"ìŠûЦ¢Ìâ ‚V^¯_Ö5r·ÄÁGë\­Kt1 z‚ýDÉ«Šž#ÎýÈ ª\¤ýÂ3Ìm!†w-pªhw5¢4MÞ ³RM¢]ôŽÜ·6+œw¸KALÞyœçµuÜçcÆ@»`ÅŒ~L¹*hµ?ÞØno• ë’wà¸ï¤#w2†y(ÙU9“IÈ=Åü1æ{˜÷ýs"mà€Ù8Rs@á0Ìc&ëùwŠQ Ã(¨*£÷é9Þ£²•ã?|O¼÷ðñ—ÿð!Fli§Þzu]æRV“rsÏJÌ‹@MCƒÃÀÄ($lеNÛ¶cK| LÆR¾`pÆR¦ ö1ðÛë¿@uïÞ[»å ½O_ò–øÒ[ÅÁp©}§XÕTN^°ï;Zí蕇£÷”ÿ©UÙ|¹™ >¢Ž#¾öƒÆFmÁ3ƒ// ΤÇ.à²âmé"\ô¤/¨“*£Uyê0ÞSE±m¿,ôEàâg´PK5zíš§3 JT™/ DÒ/Ç]šŽ9"“µÀŽ‘#+°Ëtž‡~u\4r¯ H{2dÿÞ¹R×6Í.È%tâ‘s$` îñ@.VœÕ”ɸÏl[üDDïž:ñûq uêæUè9’Äd½U¡®8a6VXÒ Kº3jóB¬Ü±´Æ%@ ÀT‚Bå Ìi &¢Á9&ôy1­§ŽŸñÊÔñ>@[ÅTµq´pÔÒGGÞ.%."ïÜCö1lÌC( ‘çÍŒ€üù'’Eð"%ó­+ø€©ÖaßC"ò–Ñû@ð>ZA§À´'²½ßtª”˜c?ô1™a®çdCqްOç°j=›e#›©¨íBÎ*ž•R,3…RZ±ÝF²µVSY1µŽd]ðçy>»¤cÿ…»\ÄðOirmXÔa'jÅ¡P;Í„36„h.zŸLгÄމ€éÀu¾Á‘×è´0Âû¤˜à>yÉ:>?saLÖÁ>ïwëܹ‹ aC¢ÜwŽ:ìqØbÄûºX ޳¼N€p,§}ÀEÿLD¦(‚D 1?—SÏ$âõt1ã,¦òÙ˜:¡mˆ<òS€ÁgíØvÔÞ!õ/ÿµÊ\vü†RÙ†Å1¦bsT´\çÛv<¦Í·×rlûÆÉ˜p|@į̈õ2S —8pþ™M³Úõ?,1«ó‹}4®PTb†Êg]°yºE•®™ê“Œ·íhµ m÷û$5tñp¿ßV ö׎ë,&pØ6G-=>f&ƒãQ…gT4¹øì â"w+BåѾí@Ÿ¨³Yk_°…Ve¿¹ÌEoc· ƒfÒ󶣫‘ÿYÿÚdI“lçaËãš™»ú]yâBDšdE™p4Ð$  ’ ú/ó‹%œykgf\]–Gî ÍƦß½sgFx¸¯õ,¼eó”ÓÚQ—½KsOCyR<©;§*ÈV{·ŒŽ¼ï½„Dѭ׺ŒòâøÀÄ墷û[‚ÝåCà’g5ô Dä‘$>òÝ©\œ2¯sNÔ#P›®Æ û´”äé5/7?3eL0 æ‘™°*ûãŠ_s €ÑûŸÂÉg…øeŸ£é/8x^òS…s ªíñìlyÃû:qÄꀻ_8K1iq@}²ŒÞן„òd¶í;0 Óó%Ÿþ @sÎaß^æøg z}¿q¼¨Î)wÅÐŽc?>m”ÁVk|goýì,ðì. 1A-ÇÝ{‡Z›I>‡å¨Ò+æ„O½Q1i:ž §b{m8ßoÚzC>ËIwŒ‡HTS•Rs¤$ÕŽ{!М;«rFk2?¤7›Ã‰IZ!8o:áÛ]cæLáfl7ó*TcÆ÷}bß)ucB‡Ú‰¤›Ç 8¯ Á|qÑ ®rCà·€ˆHà¥÷lߎ߾þ€?}ÿ5œ9¸× ÍŽeF n­³«bm3qòE¸ Oìû ïëý¸ïÇœ(œaxš ^r榩ÚY÷öÜÏ1ð¿Ù%*”‡«²‹ôs®½ZbÊ‚l¬à;G뜧lT tröâÿ“¿óþbb*qJþ)/»o¶ˆöcGÌ [Ø0tâëë·'¸hô‚1‰Çv Ž¶ÐBØB¶ž²²ªËÎ9İaß2úœ8òf#&Ãfgå3f¼Z9¢½{¯Àdo݇€}ß‘× @þúu å®ÐùQVä}7¿€2Œ'e;’Œ6àÕ#â½O«4íØk'Ì_wÞÛEÖß4ù­éÊEüG²(BþÏlŸX$E“ýÐ :§"Å„>«9a;Ä‹k5…×4òÄÅQªËRCM.ûÜ––À–¡ÑìÇÚ+ûÒ}<6š•_þ(·uÒ<VhkÁt:ý—”W§b e+° “mëGækbG¶Ž¸eLpþ|D¹/4;.•¿¤;«}ˆµ©üžµ3Ñ):»U„dL§æ™‘ˆB¸±Í>Øž˜Q±îLeƒõœ¡–± {YËÕ©{tѯ“q·aCŒÐ^1UÐc \t`¤ª&¿OP%Ã…‹ Ã^‘ÒŽè<®r1¨jLœç7F+xýúB7å§÷]Ð[Ôa×û.P)9f…L‡àÚlØòŽ»\„ Šb!`î»` z;Ð'jëb‡àYøµR1ÌÝ a‹ªµ‰$Ę, 8Ï‹¬½iŸI»Ka´Ä2êµÚhHu&mRE»oRísé2qšd¶ÕN´K-TA¦uŠZÙRÞïÂ{­·Z*rÊ(çi'¸‰ëº0û@Šâ€÷ùæ¼7&Œ:PÚíØÍÛA3b­˜6(îK˜?‹æÉû}sóð˘ÜxÊÃzæ8<¯­`…ÃéšiXA3O2:LîkŠ«ÅíÓ©À˜˜èV<…I)7a†ÚœPµA¼GˆÚ*šµôç¨ÀP´Q!*h¥ ÇçZã¼Äÿ§ÿ¿úco…J'•½ö+x02r5K«Àj¹¨q¾žÓí¨Nè_X± ¹m;Ê]RB©m‰}ˆGCBl9E4;AªaꃵV›k™’d~Þ'*ÛÉS˜ç<¢áú}øÚ¿øÚƒþäÜ›áÈý¨ÌÄp*ëc\¿÷!ÑlÁN€G ÌæŽ9ñ„bnþ2T™‹îÄ€wªlù ‡ÄuT&5Bp|ð1 Ý>%üúú¢×eI¬õ´í/;:q¿=8îõ\îÇÁ™w8¤”©óLdËdUŸ–« GfU§Ò‰=Þ;liGHî‰FV›Ûµ•þ(û¾óýTšâttÒ‹·ç®›--çüǬ E0"tŒ™>†oúÎö¼Áã¾Þ˜£1éqò™èµR-dbžaíd= &Üá&eÎ(.¨6K ! ö‚1m­c ;Ûĉ¢†‰•¦i9ñ1 ÜÅfvßÙs¨SŸÈUÍ9ÙQ€F¡‘E6¦™la§f+´lhÄÇç例ß]6t úÌ Õ 5Â\uv#ˆÐò|~* {cìoØ¢Ý+œç„˜0³î—¶ÔÂbUþïþƒÿíÅúfjC­rŸ¼ÈÂÊ{útNÓõÌA|¹s!'ä˜8cHÔS§-‘9S ö×GFËô?‡>‚ãñYðÔJ9’ÎY1§`?äœxÊW?i)ïˆ!"n èFO“¤€`¯ÍÇø°«V»ÐI°MApß'¼£=¥ðÔÆ–o­ ‚sðÞ¡N–¸KaFøœæ–öÐÀöVÈ1o”ßncôØÇ×ÎÓ‚88ñØrÆŠc÷žñ”¤ñÌ Jo½QÀ¿^¿,`˜µc`Úõ®¨½“nÕùë·/Æ!Dóg‰<‰¨qÿ·¥ ¢js»` ®ÛÆ6Æ/>+ÐÄ"#ö×n4ò%D±9«b ¶!XÑàWÛ•šmϘ}>m}1¥›sk–¸D6f¼6˜üVÄqv8i£p!ÇÄÖ™pÖ&ÿä_þ; UyñÜ(Ö¯–ÂÙP¹/5Šå ø´Â«ØÚáQ¿™ëœl$1éçRT¤3[qÈ×à=öcCˆïëhí:àŇB˧Ԧà9Knõy®–wmŽŸÄ+<í?°IµëZÀÚßfh Þ üú¨c§7™þZ W˜Ôè6Ïâ ”S6•m‡ü7ÿÝ¿ÕuÜݶÃr‚-ô%x«ê´©*Jh½CÇÀ×ë…w¹áÖÄu€^ U_Îïoš}(æ‡n2£â`l“Š–‹m²¼%´ÒMæiU§ó摘H[ÄûûÄþ:ø3•±‘Ç/ÞlW¤¼£¿O Xãµãº©ÓT8«'ÿ¨†{Äp+ø9ïæg…âæh›*ê¾.æ8 Mp:ôɰS•-ì9Gï+“â3«Þ£´Žèý“Òt™Ðê ï>™ò£¥³ õåvý ÏY ; wL@WøÓù¡W]ëçäPÜÆ‚!Ý8Xz¡>J!&ÌÎØÑvËœÀûÀ›ß69Q£{®ðfýùŠÅZqü•R¢·Eðüâë'üqØÝäÁ?þUðŽ£]9¦Í+€ã·Ùó&cbßw¼ÏoĘmNÁïöÚ ¼C-.,o@ò­×Gú›,Ü©w+¨O7lÅ!!Øà¿I:ÖE¹©CgyãØ^4 $Ήw¼Ž€÷»šçC˜…Ge6‚ÿìÉ´í¨ÝÓZÒßÏ5Rð¾f12q_7 ‡ &=…d÷¯CŸŠ$†>@¹›}NÜ´ò–Ÿ.Bm !E8§øþý_¿¾löäÑÇ$Féʸåz½1ÁÌŒ¡üüZ«4ºÙl+¥ˆï÷iU³"Çì2\ç´EÜwÅëëÅ %Û`×Ï#©·"ƈR æhæ©zSäœqÝ'7û6Ðf§ŠÔ.V7B±xËZJEUøôç™A2€´EëÊ34j}o‹Y¨®¼ýLtÊyçÏäO ËJGãÚ´m¨å~°ëÛ~°Í×8su.ðþ€¥Fšª±›i6„g!xnØXÖ¦Òb¸øõ|åœ8ßû?þwÿV}Jðsb€Zt ÷u¢Ï×v0ŽòÏN|Á1f¤˜ðûïM”ƒEPº`V+1[›rØ©_‡Àù¥¦*æ×¯ßð}^ÐÞ(—ƒí®°Þç· …¬R¿J¹/¼ö¹m(µZ»àÑ»œh±–+ÈJ­·mîë˜2J«È‘`·-g\ç…â"Õ/&­pÂ^¤›Àþ‡?àý×ÿ")tUj»[Ý­9) PU쯮÷7öã ×}ò )– çH+¥¼Ô¦Sóciä*¨ $îºïÇ8ç°øØu ù‘b?À6Žè8W›ËMðÓ¶ú,ÜUURA@^Ï`Y+Õ6jm;”e)‡yÑNs¸GúÅj® L1úòÊ*\'0=íƒU÷ #£Ôü³}8çÐu³fyäË"m,Å™ ë3¤ôç2¬S^EÔÚ”—P¶G Æ´×Cu «¸1ØjcÌò`ŒpWC‹4!cÀoÑÆv|øÇ ttmìõ*˜SsÄq¼˜ÙcZ5‚,%—”–ŠWÔBå)Š××ÞÔbM™¯á¼gXUS8áɺÖÂY…£C› xoãÑá™EгÔàcB¿8ØeäsCεÄÈLzâØ®òž ÖkÿtþÙEO+½ZÓu4lÛÙ¢Bú…-j¥T¤-¢µä"Þ×â÷f!MOp¶¡JJ²*ðþëo„-²ûœ©/©œ£#/”ëm%2Ó0½~•ðàƒ,ØÉfqÃÚ¼âDÕŸÏDÉ}Σ+ ‘5ó´¦ó¾­x&\Ïi›«±õfÐR¼…¼}¨Ò1&ŠgŒ ‚¥øO&⌈1•ó. ÛòŽ÷õ à“¥ó:hsþoþ½ôG/fži•­ ¥6†õ@PÑâB >ÄŽŸP01O€1ªÅjV8Ÿ±e˜ƒ‹èÁîµU¼¾¾s"âÙ ÅqüÂûûÍð—l;8&dÆBǾSÜ*àxBäfÓ{£¹Pûƒ 8^ìƒçì™Z¶%æ¬+S[kpª,Rǧʟö=ýú…Z)86V4¢pž ¯9Ñî›<¢ü‰ÌÄîÌ0'yYà{´Á3+BMÖ)ö~lûÁˆÓÑØÊ°5}‚›–˜^ß¶-¼©¼Ä”Ùò VŽ<‡ÁĨÇ@rì¶m¤­®îÃS¿{ù ©Å >Ø`ØB¨ö_/ŒÆ™VȬRó¾sèÄäŠôÐ]ë}ÆþÛnQ¢ñÃ_;žù:$Y¿VŸÂÁ8 Ý{yúµ¿c™¥„Už÷|ß&ížyDº¡ç½wˆ1A…3 bØé¿ðÞþ>G¤´C@µœÁâRÙÂøí·?ÐŒš˜£ã¼Á½ÃÔþD¦Bl‰WóE81ZAt ª9&;•5ƒ)dŠrD»›ÍHØîð"Èñ­S‚|߃°@8g¹.øࢇ^„øps›§-qq½W~¤Äy{e¸Lä-BFh/ÇøTå`^BTx—Ð}e>ôÊîÉ0<ÿRÔÉg7ï\ ÑQ¼âz_ˆ.`8Åfs€Ø¢( ¯×nmPyN¡>‡qù¦Âš;û9óQS!½ÑA¨=vxÔ­TÃÀë§“.‚ 7è\wŽs/µgÚG2‚ã,Ú;ÎMdò^‰a³ÏÅa߈wñ!cËÛñe,4^û/@ø3Æ ®f(åÄl½98™&~á Ìÿð¿ûãŠ-ïèô̼Q–*”õÎ9ásb?/elˤ-ã8^H! ¿^h¥ÀålÕòdÿ’À®øuüÂÕnš¨¶ƒ;æc™Œ¡µpª”ˆnžÖßv>"†Ì*Ø>s1"zo'öOcH€…K‰ ÃözØ. ûv°J >8HaÃÔ‰#Bàk˜¦¢Èû†é Ëh™¯¯/G]ÿZ¼‚l牷à'“úÂLC>“Šê݃QÊl1ÑûÀ€åS JÀ¯ã…>y”ÜöFýÄôŠ¡æ`E; AÁùÆçd±fR}ñºÌ4è$üX€)ŒÖˆÅcK›}O}ŽÆÎ° Ñ0Fÿ¤ü‹jz°&ì”»°òN^ÛŽ)ÃtæVÑàѹÜ÷§JüóÙ Ý_C©ñ’L+ D¯jYEІ¥!¦~ ‰OÏ,EÄA¢m¦ëÚÀ’Ûcúñ\Ïõúz#þB¬Ý¥áSU]6©µ%ÍôSà°¿~±­rŸp!šÇFI40ódŒ½ûÆ!pˆ/µMl_;ܪٯɘ´NÈJ»(^HÛ+ÐØ/Hç~¼p]'Bœµ¥€ 4ÎÆl󉡈æÕ9éq±:)ìØöþ‡¡O°\ ‰m¶19CUÀÇ€ûºC +{(Ê`–Ç}_µjqÂ.b‚RpŸn (WGÎ,ˆ$²oç]â,Ô0õ1òúÄdRâp~_œw *ÔBʆÒ1µð3šÒYm½ÅDÎL9…£ÇGŠ-&8!Y–R“9U×AŸÉP„@—½·AxŒ™³²¼Y‚çdAÕˆòHê§*çv˜¥!l5-ØášŸ cΉ§x˜”Ù(Ýçl±’)˜rF9/"–êM€Á`Õh¢ƭ['kàÿòïü„N¢WldžVoëqsÐÓ:ɱÎùO„¥•Jzl½o)a‘Ó(Æhé½¢´ ê<Æà±¼×Џmp ( t6ö9Ï÷Ÿ°où0JƒâT’D½óè•òá”"|ð¨õ¶c5Üí¾(W–k1磘˜½£Öóé«ê oŒi¦<Äá…*˜}0}lŒ‡N:FE¹o´^Ø/´´°9ú‚X¼çDŽ”­¶6Ñš˜,£X„ÿ&Š£tW9}þ”ªmfPŒv?2^q…9{Jç¾ÕfCŸ<, `ðB‚§²o ·Z•ă„”ˆX{÷C”ÅêY-S<牥!&žh‡>ü+'ËIÞZÕ*KÃ^«ÍALÅa½bÏsŽÇ§äå#3eJ¢²BSJH>¢¶{í6¼ H1=CχoimJ$» ú=†2Çäoü¿RªÙuŒí…nƒÅA•ªm –à§Ñ›+EÐQá(cW‡=¡‰°Y—ò®É[†3úhyÛáhƒH’èZ›¸ï ð¤#o9¡ôÁ|xÏ¡l·ÅÑ‹Ç÷ù»ù¾ÉÔj¢2Ñ™¡ãO±>|b‘k©pŽAE‹¦“ÔåU`Ž1Ÿá-áSyŠ‹‰ ƒ1’óÅô„n›M­7¶¸?'×èÙŠd$žûǹˆäýÇ×d­ÊU<¸IÄȱÐ9·lж†¼íÐI9oJÉ3U‹Ó¡–mv¶´"ƒ¼ÐÙb££µæèhçúCdñ(LG.!åÌ¢ËSX{µtU¥ȸnÞÖ‚•ú óÌå'Ø,xò³\ðf gÀ.pØ¿^H[†€ÐVjl…Ù,Û(3ltLf!9Î]rŽˆiC‘­½nä]¿Ma§"®ä¿ùïþ­ŽÞpl_€÷}1E0rÈœ£a‚ÐhtRJ™sÂuV¨ö9ö ïëÍ]yXj Î÷…´e¸©ð[Äý§ ùØÈ•Q¶ÇB­cÎŽãõ…óý~ä™Å"$Þwá€0-ÁÓ£ÆYM%õ˜,lüãiáÂêSDo<~NæT"í;z¥Ö¾Vú1b 8Ï‹ ) H N!€CÕRÐ`¸NÎ/w¿Ò=jm«àéW¨µØƒ¾ löF=ÈÑÍdeññõEÅ KI¶ã,:é',öÚ ¬âýà¼Å®¶Ú½›CñJE n>êØ) æüþD˜zdøà).ðßWyæýë{®<5Ôµ·6æ°^2çc˜Å®ã"ˆšÜÚG~qà:O“äò49çR‰±U[Ûmm {ÿÃQ2F/ð1Zú>§'»7‚´%ÌÆò ëد<——b«.½ 1¤-cKW©ÐøâÖUòçï¿ãµï¸k3•Çe°Fï¼]÷i6%BFç4¥Zàfù¾NlyƒR\óö‚ˆâ¼ßÈÑ*é6Œ™F7=‹™E¯œWމ¸%x‘7Vx‚î³#Ç M9?­ZL¬·Ó ÃìÃ$× W¢÷#¤„ó2»Ä¨Nº~«ƒàÍì?›€ÒMÝz'ÛoLC Û¬ ‹Ö\Ø:~r%ÁxW)ã<ßχš¶ ÷u1/{Ûp½ßöý ‹:}ý.ȯ8üûæƒ-lÍìû ¥–gˆ %V„9+ãj¶HqáÚr†N ô‚9:^} £Oøp•Ë`‹~%ÕRòá$òø-\${odVª¬°ÊÍûÅŒS@—¯q€œçC=f34 %NôñßL;Q…@æÒþz¡^'r~áºÞÇë…÷ûýhñ¹iLçͳ"°…¶[5ÅÉÜ`‘Š ëNZ.Ïäk tx—0f…GÄOŠ£uLø ÌÚ´§vú²gkI×Sb¶HHÉüÝÐã”_ŒÎmv¯µVq¼ˆ Þï7¶¼YTEÞ) ƒC錉v!˜±l%?vÎLêü€“7óó}bê@N ¥Üøúõj©hµ#ïÑÿ€ûMtþvåº 3*ÂNŠÌÞЕѼs.Þ)Ø©Îzö)áýý;bŒÈ‰øô`ó§±(јYPuØ×Ñ’Ræfõ¬žÆ¾Ó£rZŸ¹ª"äˆz3ûÄK ðѴѱ­+Ù}¢”ÛÞ#-a‘ó³“R[î›±½fÂóà=O\ŽbÛ™)TÊms% V^‡6Ó4…º‰Ù; £_,?çæÌï¤;Ëýæc¼0×§v97u4=ͺ Iä„”Ñë€÷Ž'vPÈAÌ|Â]ÞŸ°3ÖËÿÿÿ(ÁuçùÆëu Ôf–øç™´æT˜y¥qÎ1éŽéxÚÇë ÷y= ÄcÛ’q°*JSºЫhëdðׂÎûäŽm–ÿGýƒEÄe›CUðõ‹¯¹ÝÐŽm?x,Ήnî¼ÙÐ_‘,®ö‰<®7zàû–pÚœvI[©7áQÜÈê]Ò!O76OÉú6ôr³)Ro/ΡW¯Tžw]žþxN‰ÇZGœ C´æs- û–Qjeõ<ýïÓ*#÷x.à­ À7žˆb¿ÿÓÿnšV×{S#.¹®Mpègï¹qר‚rÆùl,0®@,àê##~¸Wnròá'™|Ýœô‘0Õþõb‹õùäv‘Møè0M¶ùDšdJ~ªÑ›-ØÏÙ‘üF~R½m6ᱨ]¼äl+ü™+Þñdû”¦Ï0›óvÛ¤lõxŽ&¶í…ºÀyÞ!åÄ™äTtaEÍ=øÿ–ðèBÄ}þ Á%„-¢\yßp}ÓèåÙ&dˆ†ÃýþF jx”R/¤´¡ÞR>¨šLRÔÁÅíßÿõïøúúeÊH}Xi0õ*×v.\÷Í!}Š "Šë6)ó¶Ù©©#ˆƒ ‚÷ûâ†l§¤=mèÍŒ‰K†lÐÄèVä1TŒGàÖÎÖ2ˆÌo³Û¡‡hŽç:‹]‹ ôÖð?ûŸÿ…µ’égÒΖüó¡– i;ÐJAŒñGQâQËI¿Ô5™©áýóQfk׉m „ļ'Î<)üXÊYö÷ùÆò~<÷ìú¥“Ÿ¦åè$ËF·wi'³”J¹RLL_œý W[šQ+$xk±Ò2Û@Ì­Ü€£ù²Ö€7¦ðµÿBŸþñ·þó?–ó"æØVг+¶Qxçð¾XåŒAº§¨CO?ÄÑ1ÞjCʉ}´Ä j½Ì 6©üñ‚^/çA¥Š8¶bÊ}BÔ亦¾j}ĘTìÇ9 öµm¨u`ŒÆ<äN6Píµ¶guâõ:¨Ù9V½þ˜•»·EðØãÀEÖQ½dtô7p šÌKà| éx‚†`§¾iùÑú£OE mŒ‡¬**‹ôܘ¬=ÒZ³á1à“G¹ ‚PlÑH§}B;iªâAz¹6X9÷¤>A¦çw9<­ÔëSEÄE´÷§K¯Î*\B„„‰Þ Ÿ$Ÿ‰-]’Ùµˆ>#<„X±6£êü˜+' ’+ÓÞìõ¤;ÛüjrD™6×±½b¡^,ÿo›s™Ö©bKé€ÇÓÌj§YKmåU¬ìzüú9ŠL6ÞÛb‚®Íº°ë…¦&9^(Vò¾£+çc!F¢@’çàù>‘rĬ C8o¨çä„Þ­È“BJ ³ ä=ãº/ŠPÔa´d^ï˜åc¢OC©DÔ›sã>B²YƒšÅ;üúíz«x½~¡šéÖors’¤€°%ÜWáèl»{±HjÚ8‹næ Ùb% ~+2Ú‰@0~Ÿwl÷ %bÛ7OË\(`(ÞcK;¦m´!¤í@pþY'öýEO ¶Êÿíÿì¿üã×ñë1“‚Z/¦úE:a»¥ÚÕv?ù¥ÞÌ¥î7¼‹ÿM±-à:¿Q 3›k)b"^D…±- Àçœðè b?¨X¨¨¥bßwjñ—ó”™õÒ-”ž=ú´%ª#BÄïï D ÜõFŒtPÖZðëëõ´PœC5¸Ëm3W¸÷¬<»¨O9Ì“ºN)æbž²»Àlg¦Ò# Êì†aÁ] eb¡à“k28Ô¦dÉ)ÃEoF,Ç ¾…k9@1Dž²„Š‘bÚLÞ<à¶€~Uæ½Üå3€³êc­Ë<<Ú‚¢ Më]O#0ãøõõžý*¨S!™„RAÕœªáêíT2õÙ¬\´÷l÷—ÎÁþ¯‘fÉçaº<üù<%¹u°Ó$ç!’ÄRxÜ·Ê‘XõŠ!«ÚØìXG«¯¯/´»~dÎÀ#G(ÿõx\¿Þ}|:Ì™ðnÃJq:lã³…4rx*œ©â8¾Ç` pb錌Ý[§Ñ×{ÄRïÉûËRuŽmÙ˜Ø2îûæàŠ>*Š­CEqß'½%)C„BÙrNh“'qUê½÷ y ÷Ž>´O:â© µ´E>PÎûQùíÇ—XùÞ8«jÂ=n`§šå]ÃÖC„î|åI­ZÎÊ÷§/çɈJeJòÁò5VkhÎÉ~Sx—°í™ïÁñxÕ çWLstè½áõú¨ÇñB-1dv]ì9 "qÂÁ¡vÚ Ð&¶ã‹ÊIk§rñ˜}`ß)ñŸÇ@l’Y ¢Ö>pæúФ½[®?ˆ#í›BCü;‡”ãWÞ; Íst$KŒ1 ©Ã”ù¨â\ ‘\À¶Ù!e¤M4á!ÿçùÿÔ1?*‘fwÐIAoȳŠ=&kcñø)Îúd†2?¶º*jáF“ò}j˜Š¼glSÀõ>ŸA³(Û^ˆ‹6$È.²l!„TŠcûÂT¥ EùЮt‘5 ÙhÜr$“úààÔa:… ¸Œóþ6ïÃqPEô¾ßÖ³þÑõ˜dw>‹#sÜÇsò€ÎÏ‚§xÔQ*Ž‹D—*æP·›®wÂè0PKñ¿p•›CD£˜¾vvža@Æ)è: ÂäB0…mŽþ´M(åÌÍþ~sSžÌM¸Þ¿sóüá#d«È›ªh•É[òÁaÌnÙëkýŒ¡ØöÌÊjEéZ­xÿÜ;dñ”0Wž‡sxà=Örº¶^»i7þ"èþX½í³´ÏjôO+áÇ?J[„‡ðgùFpÃNÌè ÑýñsÖË_¸Ëi§¦ÎêWÁøÑºãß…ÐÑ=Þ­áæü³×æ Ûz߬B½CÈÑÚ;,kXдZLÉ(M!aâ6a‰÷d+ èåH!¢vVõÎGŒQ1º>i|)g*Z5ì"ÝË­Ýæ_JhýÆv¼˜8ºIm9n˜h¸îòЩ÷m#ѱÀ«õ†ÏÛHªIoѯãì¾&Rfb£c¬´övÕ‰Ëc²&˵žeï³ÀyzÀœ£±•ÞžÒÖ0?ã~¿-î•¢J½=—¡*hç…eÉ kMLå6ì4ºçLÁÂù bâšìú¼WÑ5 Uo`U Š+V¾¹ZìøŸ£žVcÕ„FÎ,dçi|äõÈp쨊rŽ+쪬òu¾MDbä„-‚˜=t bŒxŸ'rÎðóïýoþ˜½Ç×ñÅÀuQÂ; «][ÅÄÄh ¥æ'÷fNUÆÉ®Ú»ö´Ely‡snÎR0ú@Š Í)w5Ê(ñζ„½àÄOèè¯×/ô6áܽð¢Ä¸1x¨W„˜Lñ@OÞ5ë{º"ö¸ƒGŒ¥ðý¼Ž/ËUœac @P„þu ”ZyèÌ#62©7G§¬ZØ3ÜÌBâ=~ûí7Ó\SÃ'Ï,Äêa<½M¼¶Õ@­†~Xò^?Ér³Ó:ûï­W@-‚‚Ϩ½B¼`{í„¿*/ì!£×·G„@Bè~ýßß¿Ck<ðJûì½Iö à„4XGçîZ“–b&,j¥aÅmÁzzS.د__è†L^ýOç— – ÃÝnŒÂœòµøÊ³ýZ€¨¹E3®Þ¨ÄqäFùÈMÞ¨ŸŽ±6žÞ¼7Å ½4€»èÌPg'$(¢§Î›yÌ8q­Ão§CÚ;]=Τ|Œ)–aጩe'†õïLÅ&Ê(7Ý#µv !b?6εìköͲ”íI(?³i‹kJ+uó£( ÝgÏã:É/3¯aïŠiÉQ[Þ˜Û® ¨§G Ž•¹6£Ïæüœ æ ö¾Õf)}\4œ‹UœÒ ûg;Å8°åÃ*Â`… á~ÁNv|ð·mG/½Þ½@DI‚9bHh†ï€CŠpp¸Ï m4@ÉqSÛ‘tì)½¤1*OnÜÈóQn¶‹K)„V*•?µx è³Ñt©œýÌ9à”3²nÏ©ˆÃu¾±2Èu*‚qõzm¨³ Ù=¼Çû|3YoDSž”ômM|H!ȸ’AÇþ+£×Ž»´vå¢yßÐÊ$(Ñ{´j#É×u#†D¾™ pêéð×,x¶ˆU\9n­«ë:1Z3!†˜Zîƨ6kdaåeµá¬ò  ;ÚÆ`Òm61¦}ߟY7xZU³wžLmÓõÞÃŒ1µµA;­ ˜D¼·Ú¬ÈâúâÇyˆ1£bÅPǶï¨NhœǶvŸ¾¾äŸüËÿ—¶rcØ t"Ø÷¥7l1ã*'¼Yåïó›-‹>>¬&Pñ€áªcäÀ*¥ eKâ‘4†lF}¸TÉÕ#×7ñ¹úÈyO(õ²óê«ð²†‘SÂû<‘ÒÎ9Cm4´mÆz»Ÿ¡UŠÀ¸9œÕN½¶Úbä „èc°€zPMe/”¤×‰´o`ྠyT×Û¢^DZá<ßF‰µVÓšÉ$‰ÓòCü\Êa3o ê㣠? œŒ¤ŠãëÀõ>‘^4™Ý÷òEP®é}@ ‡…ûÜïëCù Kþ" þSí¼ÇPËþ°,µ!ùJäN¦S8¤ÂP ³r–£¸¡˜Á¶ñ$ÄÏo àÁÅ]„ZyÅ€˜ÐEìÍÉSXØYÈä²ôxŒA/ÄŠ¤wÖ>£üÕN9½ã8ès:¯oxŽÎj¥áÌ‹ÔZctìÇ µLía§$}§Jîiè€ š#éžðžâ odVµ™†ÄZøÌwL‹†”Ð; è­"홃RU²­æ`p‘suˆ9à|ÃÃ!¿(5½Îo6á¦@…0¥DŸàÍᎩ)à}~ãõ:0ìDqŸ„Ç ïïÇëÀ]*gD¢ðŽ 8q)$z¶8R¢¨ÏÉóÜaÅ» לñ9XaYÞóšº0Ú´TTÎ[J¡:óº+¶È“ƒÀ¥hRà‰-mÔ|öñhç†ÁmØå,ÐÑ!æ= ! õ ýC’¼!쫵M#TÁX]¤é–Và&E­7&Qm.)ÖJS hà3øƒ%bhÞ®¢w/PePFYí]™ð>aÜùعy¦N¶-ïÛÖ>ãwý$¡æmE«¶œÿeç0„‘ßËóÕlšRF0?ÿË¿ûÿMæ*ö‡$AV„àPîB|t)˜0-õ8^¿Ðj1¤"Æ€¼gÐ ûŠçûM8è¬m†ÝPx¢l×|õYÁvÖ¾Óé2N8lxý:C4cöï8ßߌçœíGËÀP0ìj*^Ç !&Ôûb|åäÿ¼ n;ç+€¨AüÄ1Œ¾µ7é“p>Ñá¬ì ˜MÌM–³ƒÖ›m,‹ýÊip&ÒgF»€¼e̵/.dü§T€Ì•“²†¹6 ƒ£y©š\RlÒ†ð29œí½L„Á­ø‰.;å(Ì\=•íD›ûɧÅã¸!¨¤+¾Ž‡6d€éw¦&ÔA¬(!¡+u1$ldžë:éfž†”q°YÅd¢^L˜£ÑxiÒဗ~æBÏ9á”íÁíõâ}çaŠÅ`æL3£y÷¨·× £U2ˆ”-bÈiãuŸDDìÛ‹¦ÃITLŽõ¦7©Õ‚˜2Û…<Þ<ƒRµßhói™9íZ‘S„t‰aù ôÎD8áB­¨PÍÔÊØîýFŠÌ…p"tßÛVìyG ¬f½£Ã|Û6›5~æCÎ{S$ñäê}à¬e°}¬ÃˆŽ›¬sãnPS„‹Þ½bcp(Ìa6U[R{èäé°UãŽ9ž.Sb†Ue°ï»í\Jˆ‘2Ù3œ}î‡E:&ï¥Éî€XË`çǪ?eêkóø©>ô«—eù=kóÕ›àšä”sÌÿäiQm4óÓQ ©ÌŠIùQûõ9‘³Ý¼·Æ€7ŸµÎ=þ6ÕIµÅyëäóU[a Ë9‡àBŒ|(B$^¢5À‘§¿Y¦ù¶mð S†žØ÷NéÆlWA­LÙšs¢WRqgíì§™8šA4ËÌÅ7Ò{'ê[z%ç¿×Š>õé*¥QJ7ÄSBH†Ý™ô Lì¯/£KÒ|v]z+ØŽ/ä‘bB2nøˆ‡Ö ô!ò•7Þ°:ñ¿ý†>'Z©x;ªVs’ª©–x¨û¬ò{>ÐG5U‘®š &fç¦Ð;‡¨Ëéös#ǤÁn¨µÓ«É$µ  ”j"öèƒû8¤ŸeWx÷TPvâǪ€ì†k%~Ú0T„KdJ«©6@ç)nvþüÖIGÓšFƒê©“­ÇÎÙŠ>RÛÕ»åÓ¥¦d›K‘dtb¸Cô9œCkÑr›§›8òAcݶcê@J|à,Ц°¶[§>Ô~ó´=#š[CÎ7y0¿cNE”k÷VM©íñõë€Ï^8çñ1 ùˆÑ'¶-Á Ψà[Ø¢eÔP[GHäùŒUäÑjáésLÔVy’]I­@@à¦*…ds)F7lÊó81lˆ‹c/7ÔQ!6§â:ßôi¤D…Wg¯~ö’-(C;’ËÄm;®û½Ôåh£3O t73òšô::fWÔQàÕšƄbÊbµœ'ªåͬ{t NZ©ÏL`0Ù].´R,E”Å„óVˆ–Š6:j¹}D»OˆX´B° µ9Ðzg›s”÷vt*Ox Peufu6ƒ^zhföŒV(fQ…Öi-ïýTˆ‘€9Ûq&ÃèÔ°@6¡Q5§ ÕN¢*ÊgÇQD¡c«ýrèëºç>U Ÿ(Sd°&Sà¬bsÖŽþÝ¢èÁ†lfn\òBþo2bg-†Þ‚ûdjLx{ ·¼Ü¶Ž¼©-¡×ŠÖ;öãÀuUÛÆ°Á!¿›Àt‚-íø¾ÇW>˜u®bƒE>ŒSõ*€’BDpï‘Ê[Îϼ2kÎYrNÖ£çÃãb€ƒe³0E]d_WÈÒeV„ÚÍ1o™* ìû‹"Spyç¢6±(fª‹îóÕªYX°¥÷ë·Ê]q_o–X/S•‰É‹yµcälƒóS&šr‡ 5gT[~|’€¶LœcÀå€vÝ\ Œ2 u¦„À²\|`ŸŸÞ‰9«QPZe¨–£OJ„÷‰÷Tú)³Ñ.,·_ÛîÊ, ® Á]o¤Én2ÿÀ]ÊS8L(Ü ‚J'Cœg«§¶ÎÏjRœÓû b}µ0CæÜ$”ZÍ÷@bAk{ÊÐÀ;/­„H1ì3u3Üõ®ü#Y…×ä<á:Ol uŒî&#-æ ¥^6 —rÉT…°ÿžª?ÐÏ_?;Ú?þN–ZÑñÙ}Æúã{/—0Ú`?v\åÄ–Ø^gG£³P_±-yç×õ ×ë…ó<©(ëô-ù”}7ÍÿòÛJ¹Øfþ_ýíðÇRn‚½FGL £V¨©n¼§ §/uÚæ¡Ì0ç‘R@#-ƒ…çv[D~ÿ5RŠæÕhˆiC¹Þ‰Þ8¹Î‹¹ÌŽ=+–‰pÑs£3åÕ¶gÛ5Õrg»c@ë7je®Hï\$£§f;ˆ~iUUkP8ËðæBíŒnYê}ÿe-V£wîàµ!ïT®M(¶°ó@²ò#œå¬$ƒ©­9†WSOé“ëžsbR˜;Ué`o˜€iÙÈ“ù‘’g@ÑÍlûKê›ÖÎÚ_/¤”]`P½qÌ­ßÔ²F£Cu·ØT¨>°¹~7LáfÎIpä k¶Í‚z;} Œ©¸ïw9ßËû÷7Zoh½ [?¶nr[ï蕹""Tª0Sº¡U:ÓuÚ;+æÞmXÎÛj{´ü>ó´ä]zTQ+O$a ›4˜&ªRîÇóÄ+[E„;N„HÕÞì3ÑŸxÎ9®÷f2±{›×®BO‹ë­õFH™B“É–]Ü2BL<¡X›0$žòZï¸ËMFX&À çI.H2ü1*ö&I±Ùd-­YLõ(õ£O”V‘„â‚}gqϵ ŒV M1FAÜ×éîÿ6:´ñžÈ1 ºÞ–XjE áùŒrJȦŒâ->ÛE@L<Ý8ï™]#RÌ`ä…"«Lä>C«­tQ4UÌ^xm7‘ëÍèèrøH‘…(óÉrê¥!äH¹¯¥9bL„´=mÆýõX|õ³È?­&“•;R¯?ˆyû=©”XH©UW ¬f…àÓÄëbóOŠè2q{ÑïuJ8Ï6ò–7†ò…ECµÄÇÚ*×K°®–—Ä{¢’¯¦¥¯,‘I&ìµþ×ÿíÿ¤õڪʔí‚C0 ¨ Ž}ÊѪM÷ÕÚ)ì$ø* ›)G bXQ©ö}Ãùþ†ˆ#TCõÚŒ7äY¤a±eŽÌ9.NÞ3î“葼mè}>G¾æ&Ôzãu¼0͵­ì ±(Gª}Žíe¤sÍ–.ÅDoÉ\Ê%«˜½7ô;YBûñ‚ ¥™ÃPâ½ jÙ‰½Ûñ…ûýfIoÌ3†°G¾ªý1Q[³><v/­ÜØö/ŒÙ™²g7å:½Ì9Ìôcm&Ó‘cL¨,ŽBǽ_Žy3hñ¬’FmPÇ?CIA0‡…Ù.+Iq‘~'M³ó›·lƒg<‹è§Ì⓲©ù£Á7×ÉI(‚nó—U§±B#«èÉÃühØ÷Z†Eç8x3‚Ï& émXÀ˜#H{Z¼ç3¤yp›¦N³v¡¸`ÀNüÈ…ç¯àyòxòœ£Á©u/þ‘P‡èq¾¿·®"û…ŽãÊ}ѳ2 O][B¹näc'¥ÙÚ iËV•*êÍÔ½Z«Éqa!|äK%Dƒš –€˜½µBØŽjÍè#¦³ÄÎzÞQú«Œ“ajœdìÛ Î ç0_×´Œýu0ÅÐh Î1p  ŠÊ¡ˆ»œoÊ9ò¾zë(FΣ–!&¤@*¼G¿.l__œ]Ήv_ÄÝ7$xt\wyìk.ºÞ÷Ìè)Ú6Êœkk­#æÌyäJ,»7õÇí³fÏ€üóû%‰Ûž±Î âH @ëÝ"hõ>b ®Ç"þ‡Oi}+6'°¿ä¿_oìû'×ùûzxìõñÅ>yëÎ[¼}lÁøwP@þé¿üw:LÕ¤¶€Ç Î^,DLq!ä ×ùÆ×ñÂÛÚ×À¶3ÀéüþPÁ¶m¶Ð ¨”ëÆ¾o¸oòw¦šë}á×o¿¡Ôb2)”°ê0Ñá=Íi9m\¤ê„DÏ‹ðM..x¼ÒFœƒECŒ†N6Dˆ=C^Û ïB@ä±ït¤Göüœgµ¾ànµßÈ‘Š¯1Ø£×Nàžˆ`ˆá€éhØëWÁô€WGVmB徑óUÅ]nJq•0¾©4jɇX`ïX=óFx*\kñ’ âij?*OÛfŒ Þˆv\s'Ø&4eŽØâü3ÙÏú½\.Ð çÉU2kƒ‰*–WÿÙßž*ìÇXI‘kÂÈ?sú æá?Ú@ø›ðjùkgZö`°C[ìç=ÿü¡®Çñ2‘Ñ—µÃ¹l=kæ°ó›PЬ:>?t‘UE„Ä„)Ô;¦>›ƒô›­@ãœççà>ߟxûé uïåÁøèdë‡-(<*9ŠCmV˜÷)픵‚&1D"FkÄò?á[æîvBÞlØ7*ºêPó^°óÉ}ßög.Õû@-7Ҷè½ÆÔ*½a”—Qñƒ÷’öi‰”DŽHð½bÔ‰! ¡ ñ“WBç8P ¯Ù´EÎ æ:4Эij­eÞùJ.ÜvŒÖ¸¹Úe?^ÓäÛŽRìÚæ˜Z±zH¯ãÅBØv‡e¸ÛÒöÁá™bö+ÞÔ\õk³žalëú/i°vÓ¶–ÚF ¸ H fÞÔgÓñ> ¯¬vYu¯Ø ß›I¹Ø,V°Üý:†%2PÐ);îb]˜çY·xkí.mß0àÿ—ë?ûãœÄ%OQìÛ†óúF© ~šCQ¯ictì¶ÑIî@¼F+¢Óg­|$æÒ'À#™S)y»A«Ñ&¦NÔûB·+ØšÙ¦ ìoÆdI‰¦ìñ‚^o”Òà„U&Û@b•„âHú¬äÇÀë`’[ˆ™RcGã[m¯ãeåï€zÏ4Co¬%tx88—p½¿Ò†RN8 T©9¶TàÓšWî‚r^¶h ê}b´=fœ×iFš)s¦òj¥=®@¨¸Q3/}žžT`gïüÊÆ‡ú±¡ë§oÊœhúLjt‚Ú¬%cGn±ke´‹ða×AL4+)Æ¿Š*³¶ÏwÞ¬9gÔRá@Ú0åyà—‡[5§aJT ™bó—g4À~홦7˜s¡¦Ï.b`X˪jÅÀRU·Sû-œÎÓÌæBÆ \xè¥JýW>ð®b¢gEG‡˜‘chÃ×ë ï÷›Ð1LÙÆ‚a´n>‰ŸÙ*,ô|ÕÔÙ†ÙÇä©ËøFÞk‰ðü¡ã®Ó±â„§Xû3ï,ÛÜSÆ» _NLt¶½à);õ^:Dò»yL0Ÿïå$@1 ©ßà$ m;òq^åfúáèê¯óý¶àžhAHD­«Ñ§°ˆ¨íKÌA×°gQ#ª¨öÞòF™»±èöøûhü²9:¦N†__ƒêÞY( VFèRîͰ £Yt-™ZÛ¶ãüþÆñz±p¬ÙN0-ýï<ÏG ämþ™b²`¶ie~†Ç±côÎ «^-’5rî¤!DÌ^¡ÑÓèÅlì@Šûºò†<Îß߈Ù#ÄͤÄ;æèh7•RÁî ±…¿¶›ác}ô‘b«d‡a÷}bÛ¿ÐMŒ0U] `9í¸OçÓ±£·n¾•›í<Çg-¿\×MÙ°¬‡¥/D—'„{ BH¸ï €"%bXÖš9•÷äTŠ–Ô+êݱ%³MxA´.ËPE)bÞ­G°Ð@¥b†Oa¯ã ×}ò{ƒE'ð¾¿áb B©wÈ_ý‹£Îxû)‘Ò¸íû¹cUµô†sfÖåùü–NÖ23¿¿O¼^/L38ìä|`ó(OåFýôZ@‡µp8ó!â>/¤Í G{«•iXJ™iÔNÂnm–½=œ#ê†ù#8ˆ\Qâ,ÆQ[f4îuÄÚ,DçÄ A¸áÌÉÔ¿`C†v[ì=x2¾F· >ð‰0¢ÊüËf"Î}6ØÏûülkÁV».Þp‚UyPØÜÁn× ÂôúøŸ8ªì}~Úr7>Ñê €¨‡³<ö9˜ïžw¦Ü]÷Ÿ Yb¯9&¶©”IŠÎ}RÚ{³Åµ¸`1³â§]˜ù,xA+íÉÊXØz¬Ys¨wCŒŸŸ_ 0÷×l·âÝN¼D_|tÿKö+–qÓÚýÌã‹Ã\ZœË˜¯ Ž981²8#õ—™ì×÷iyƒVYâ€rÝÖ©ðæ°öˆ‘ †­¶GÑÉä\個lÎó ¯œÉ¥=›óÚü5Â9¡¶ oÞoŠHŒ©€2%½v\ç‰à‚Í•X¨€ë¾¹Ñ› •µ¥"‡.;Vk¦BUçê.ˆy‘`èe á¹Æ4A²MP älHüÑï‰bÇtJã9îrq#Ëù)NSJ&*H> ›(øDDÌèPuFÏ(­B»"í ¥=9_û¶£µ†ë¾àÿÓÿü¿úcN™Sxàg Ýãcv¤¼#Ø‘l!Ìc f:úD컄gq€ª9A›-‚ËÕbÄû¼é™£C€Ðå\-Nw ‚çRJðˆ(w3RŽ º¬C ÕÙ©`ûÊhÓÀq1â¼Î§ÿ×k”‹Zil­ìaçA=(mõOêWŠ™Q´JW4¼X:I¦ißPOraj+4ýÙ «ÊŒy—#óámÝ]dËi­¥1 Å{Z"V‰­–›A|Êt"W å¯0y´wO{†™È\„†LÈtÈ9³½¨x†—Ëc2‡²G­Z£ßÃjb¬/ô µF+ŒÒû¡¥n™ÙÓ93Â×y¶)8x£d”í7ãÒèrv³¥æ‰ÑI=}ðä39ÐÛíçi*°6 NÐKåÉÉÁ ¯Ýd¨˜ ½Uz:fgr›-àctÒ`;ó?0Ô>Ã%>àLgqÈxX´ï Sˆ)+·QB¢ûƒv¶¹z/pÑ¡ ¶Duµ¾Ùòš"7'<ÑËP{Ù ¬×e *LßïoôÁæu](7ÿ7ùi£”ÖøþÆ„Óɯ© ­Üð>|†ûv*í½ó„è=$rQ‹ÉÚp ôV¿ÀDG¯Qº&@ï w¹g}yßH[D»‹°Eñ-Ý6y O`¢O* [«dq™½À;ª¢úN5Q½/“`Ï>›e-Åq g*Õml‹ñ^¼Ï7ÚUB@¹˜ÆªÂÐ;o‚›ßÿ¢ŠÓ+ÄËpÑL^ePT¯œ¥Ì؈a*·9:…5‰y@Ã\ïLÀf;ª÷ñHÀǤhà¾ÙîÏ[ÆûO¿£Íˆ¢\<‘´ÞàÒƒY/åúql‘§ýó×ù>I!Í>p˜÷~ŸÔÕœ2ĉ%÷±ÏxØoB yƒ#Üm|ý¢S¾·†¡ŠÑÒ¶Ñ 4‰ÒXUtôª1í˜u $R*\Fûà™“ßã¾±í/ž~@ynÚÇÛë@o~YJ(oC´×i…}ü´j`H800iD0t `Ú˜8ÇÅýÇP¦è™c<'UÀ[¿/œ÷Û^‚ƒºâ§*d*¦[ÑñœÜtõÍ‹qµVÜðßÏI£1‘#ŠF[CTf?;/†z™Ti­_&7ûá†áa䙡ðÃÚâΖ ëò-A·À¡]T<9ï‘RÄý>¡Áh“|­©9d”v"„Œ g½pì;úìèWÄë¶ôEVmÌÅèmbj5JOÿµ^ð1cö‚-¿0Ú„t+—ú†úXt’àà"éÁÞ3SN+Û½3÷°ÓºðÏ›q¶ ¨…'s‰Î>}£\ÃAÅ¡7Æ#¯@JÑZd²ÝOó)$xo~2/¨EUØ8h/7ý9\µâHä>1ÿk²E =úœ,žÄ?Äà§ÀSEkìWFÚ<…]³tÒò¾ò°%ÔzÃèÎà¨.R‘™|6˜#¥ÆN>’PΛskßFÐæ@š ƒÐuîƒÎÛSy²M–çP5¸bT­ÛæâhìUQ#ˆð`Ð;çoèŠ6;ä¯þ/ÿF½sHfº´%LÎ÷›ü›ë²–ÎNE ¾8ø`I]kEôPÏÑØ—s„–QrOsÕ\} Yjæa}zêéÅÑÃð¾ÞÈ[„GDÇDG^ÏöŸË×8tXÒaçãîóÄ~¼ð~ÿI 9mðCqµ‹æ:ðu»‘Ò†rþŽmcäf«þ Z¡–Ž=F">üD+Á$Šëhü$€ÌÉãm —«ÕF­}­x½^x¿Ÿ÷u=¢Ã´|eªn<«ˆa×ÎóD¶°ŸV!Lðð1¹nû ÷ý^K×ÏÎávÞ±_l_¤g9àMnI_¿£z @¸m¨…y>zS”˜éÎRü³ç§Ò1Þ;Ž_/Ü×½”ÒÏ%ˆn%Çqƒj»Ý‡ÉXUMej»Mª8¬Êâ=mN³°Á¢ hµ˜ƒª©E•ÓÜ8iÛÇÝg.#\:GÃës}–ùÒ8ý$–Ú÷4ä¾SÁ Þ 3<©ŠN•Zž‘{!:ôÎê³÷Â9šS8¿Ø·W!c cbûÚÑ;#~¿ßßx/ÞGª¨³`³ô¼Ú+^éeE€-ª÷…àÓcöË9ã¼.»OÜäõËyGiÌϳٜÐp$`g"¹€«|CÕaOÄ˃Q3üh9)³vöcG©!GÜ¿_œ‰ À/‡¸S´»!Zgáz¿É^Jµð~Q›Ç.Ü¿—€Ñ+Òñbrž‰zøs)c…å¸8;mmûËÖ²ˆ9é\@Pe­p>rø/€³$Â9&ÚhDµo;[Î`«¨·ö´Ò˜ArªGž"ˆù"0Ö$¯2Çò§%J_ ï±Ùd(^é g9±çÍüD+öÂÜ¡íÇç®d†Å9ËSÆóbtøíÀ(t¥¯%; ÎGxË‚mîޱDŽ2îZ)âø¯ÿÛÿIcN<îŽA<ºNÆ„ÏÞØ:Â㣙+K©–¬gØãëçmÕ>:HÐdÕÍ]wºIµÀ`ëˆ9Ôêçãàx„?ù/ÃîÌüóáÛFµH)ogßvÔÞ°…ô,¼dÀ a .”`=Ê= ÌgÕŒ :&¶¼S å:îrƒ=eg wâˆ9¶®r'é³:ÏjÅûOØÐâëK>? ÏÓ†ë»w]Ïÿgîœ9Ë”‰êÚM~÷Ì „©]gºcm˜ŸÇ˜ô'|õëµ.Ã?Ïð8E¶–t%P=7 ýÌç–ärûü‹Ç)%Ã>³›sÿùYGH7˜ð.ÚÀÚ@œÛfú{kŒ/6(Ç|zÐë§)謯† ᯩ,ŠÏF¶^»c‰Èá¾v"ûØV`é…³¼)çÕaŠž€Ù*:&R¤¢GÄ‘¸*‚×׎ëOðT£Õz>™íÝÓªülM1´å ­u´ÑxòƒÉîÅ!'ªó–̨٠Q Êö†÷ž^϶r9o§8Jì{‡‹¤âŽŽx˜(#FDçчçΓ`ð:¾0•ü9ý³)o[Äu]hµ"m;zkLu¢ÖÂA·Í˜nÑ‚çBpøýOßxí_l™u¶`Š©»ï7ÔBØžp%kimû†Y;¢EIôQIõ.ú+?޾ÏýxŸo䥹>xĸÙ,éÆÐÎ×3'tZ­U•b|FlmN–"h×ý¨"ÅæDOaè3¡ ÈH××îRéW÷Ì8†NF `âz’Xù hÅÈ)~(Àû~#§ôÌ ]4ᆽØR/û$ô1xº¯•¾»Zpl/´ÉYH­Ûfj¶ P%CÄüF QŠ™“yßs^9•$ÓZY£Ûç>Õ²¶6†蟉Ìj¯µA'ˆ£u¤=#8.pµQ†VBâ_ýóÿQSÞÍ1Í`Àá8ˆ–®å†s‚íë…ëûäΟÈD:Žïómü©ñ£¦vØ¿ÔJɬóžønÃ$?ê—Uv>]:VŒ!.‡%óSxJíÏÃè¼`}¡\—a N¼ö/¼ï7Ï:–‹‘"#?çŠ`4AN ßï7SÛС“a<[Ž8¯Ž-zœå"É2²Åáa —R·Ì×­”ô ô«"î£r ºï;J%*9ˆCHÉN1üRyÕ¶ËaÕ´³¹ˆe~Àaû:UÜï·uW…rçàé–Gø³!»±†Ã9:I×ßñ¾qÏÀžr@éU3 Ûî>I5Õ1F´F &¥µ­Ï1ìDº’ ãZõ¶eÜV]²Mô1óùe‡°õÙ4ŒjðQ¨à™y¸ Ærjð0]À AÂÓÃçäC·¹`õWKŒmªÎè°áûû¯ ÞL݆ѽwx¬é/ýs:ùìlø…Ñ[Ãf툴ô•ŠiCp¶cÞŒ¦¸®‹²Ût@ïµ5«TƒéõÖ‘6Ã}Û,y“…œ9ØÀD›°vœw‘‚¦X§À«†‹‹µw;÷}cEW±IÊ‘róQÎÂ\ çÂÄ] \´‹ž”ÍNŒÑ’Ggçi¹Ô)¦§Õé%ÚÜk"g]%M`åþõ@VQµöz{kˆ)¡•ŠlDf÷ã\›ó†®Q"®ûÂBmÇÍÀ7DÎÉ(Iv?Ì{ˆxš·=â>« èÚžJQ!'¹lóC^Ö°"dÎayvUbŒJ¶u df°sò¶?²Æ6’O¨½ñç¯Ønšm®£wˆwŒ ¸o*îF¬óA¢¶‰õe1&ÓL¸òz½¸þÕ¿ø×ÊÖФÖ× Îïo¼Ž_xÓ 61E”ûFÑŽ¶)oFÐ]ôT€±)x\1#¯¯_x¿OˆðƒõaÇè7`áñtÖN³åsAc­ØòÆêZÖ  Ô\éOvZpžÀ·ó.TM ÃÚÂQrè£AEp¤/´ƒÉÝZè õŒKƒ‘°ïûÄžx oªÕrÆÝj¬3Ϧ¿~ý“›ì¶±e0åª f 93ƒù–™)ò `‰€ÞBÌ£1œÐeßÑ9@÷c0²×9‡>:òv •›²g¶Ú¹QY`Ì Ë™cÀù@¶‰ç€Ÿ_,©í#Åuð„Ý5ª¦ʼojy'üÁŠ1ÉõœÏâ¾°Î rŸ“Â2 R &­úR:sÞ÷9~|Äæ4K"ªtâÿ”«ã!vRKðAðÛ¯_øÓïߨíFSÛ³hò¤ 2ž"˜(‚1áÓÞSžz(ãäI(¥€zU¸@°hod¶A&‚¦2úØGQ³ž˜}ذ˜‹˜Óã\.íúz}YÔkǘ|Ý{θËý¦-„µˆ'Îdm+ëç>èB„ˆ2^Z-|L'¶”¡Ap_7}^!Q¤2Í\:&ÚìTSz¤†ZÚÚ¡Ü+rHp‰‘ç÷›`ÖÇÇc×Þ(IHˆ¸Î +ÈMOäâùœDó|(÷ûd[Z& ¥ŸD¨¤D&ꘈ^Ю±Ì‹Ú*[µ“’wÁphl¥;C䬆BÿR«Ú'ö׎ó;r ú\é¥TDï±RùàSéìS™žØ:¶ý µÝOß}KtÍ.ÄÅþz!„ˆ-g«6nàR@Š™êC*ÀóÓ2+ƒãôó:tðÖöò>"¦ôYü„ ´(ûH+RÕ9Á~üFiês3û׋й_¿žð0qêìTf úä_À'k¥­‰8*‰„íºÀ䜵}ÇŸœÖÁk¡Öúq ?«¶µ¬ÍqàU²˜ÿé0_§ÖH²]r`q}vDa!ðñ ¶:Ö¬ElP(ž>å1æÄñ:ðz}A„Uÿ] FmÌ¥Ö‰e †‚ì0ûù|åÊèU˜;Ýû3G@ÝT@øZRÞÐ[…¨ ×Ž” &:•k!d(#N§e¾+P{Aô9oÏó†ÉvsˆF0мÇu½ÙBT…›‚fRRçûìÌyœR$ʼ788nÐÖúÂÖ›Á,e!÷íb”Ñ 6„ ‡l¤f^[ï(öHÛF¹rˆ9›´žžo±>8;IΪÀ}ÞHycäu€(^Ç/@ÍÅ#B¦¶²çV.%*“…;å¶ŒwèÑâ`Y¢À¨êÉV\à¼j®÷÷Ô]³vªH¨vJ<¯Ëڎݲßûçtm ¿È,}ØýãÌ®0âFÓäsêbÛ|Ú}Ç”G¶ŸU™q¿®âùÞ%2ñs0ÊytŒasjeŒïkÛq^ßÈ–ï20¡Ú1í¹úúúîvcϘ}`;TŒâh\•¹Š_…ÿ›ÿ¿üã˜$ÉŠ:ìûA籓3_¹pÏÞáCë }ZùÒ0ÀœYÚ£‚CÐ:óÐGïT[L6kVˆÐ¾¿(µv|íZoH)çp„Õ ž°9£Q%Ð{‡@ÑÃ& }VVVÎcÛw:&¡½wë1~Q®¸%ˆ¨eàë8L1ÁAqpTÏÙOøÜÐ6ŠU½)Ü×…Ñ^8}2Œ4̓÷õÑØëBä"_î 9oHyÃ].š¯T¢‡sÉûLù .`bb߃sí¾àÕG✠zç€híOÉ ûQbKrÌe±öGJlK8Ïœpº‰›-ÈGN!ñ¡ÓOûÄ„sv¢X´`«öSNO¶öR:…`1µZ[m-äxNγ¨ðf`" À?¿XAbx/*–S[ ÛÔÍx%”‚:¿‘Ãp.3j!EÞ Ÿ!Fä#(µ^$@0±¿~Qhðg¤Tö‰U¸Ùñjäv²â^—–Coþ·8f?¸è¡Ê f¶p\ð¸/bq˜‡m'rSØ8— ¢(–Ç Žì³ î)r¼˜¦L$•6 ç „|Âñ¹ó‰ü³¡¥Dr{Éúô8SìXôOÝÂEqN¨Øç:a­D’èõ5/M›OÆŒêxˆ·)f„DÁJô> Þ!1à‹y2,"JiÌwÙâÓ¾“…FνÒÅžS~Z®9eôÁÌéf+Œ+xriâ¡­¡ªRêˆùpÆ›ºåÄ­DÌ)¯mÇîÙVNJx¼fkÓ§&›Ør6¥å¨³¼GidµÝ1¡X@CÁž9'Ù3ms’¾ë€xúi'IRfì‚ZŒóc*¢'@’¤sfÑ«mv­WìFÓ˜ƒ>"f³ì¯ŽDC¨ÿ[ïýñØxÔ4V Ñ茙„-®´ÿsx @ö×ÕøUĘ™™™ùá ¹Ð'°¥„œ÷U0çDë³we˜9ÍS~ëuÒ¬¨6øˆ ˜ÙoGÜ,HˆQº9'œ÷eøcA½+öm·a?JÑy84ÿÕÊþ££æ¹ÏŠZ:• c¢W&ƒ8„˜1Z3=ô â€ûûƘ}t¤ÄÓQŒ ÉQß½oÛ– ‡tUs&5àqçƒ?j±o‡^.Ôra{½lø®™ŸÐå?ÛANåÉV& ] uÂç„Þq송Garˆ[äLÂ{žoz;@Ü¢¬¨y ¦‰Ô¢hkoì=«Gð”=mb'bh-¬ë3|¥~À™OXáÇON¶óÑ`nÌÆÆœ¶éðµŠ(‚KÖ¾‘§tœ:°o/ ˆ9¢^ªl0#…»›CàüE`j™çb[Û ÌÆ>Š)›Â9ðNV+n>­!oª,jô^Z+Í2D¶b§£„Ò&mßÙ*éÕÚn”ü¶ÆØUâÚé¹ð>Yû‹lNæÔo먀²c¦aR9ñÔð‰š°æGɈk`ìŒ*¼øIbŸyŽ‘ÅV&qªb¶ÆŒ4Ëö1X¶·ÏÛ<€ÍèGЉ&¤©µ>8 (ƒÔî÷IõwxAò4µŠXÄuoðüÛdp^ôÓ93˜6ÔR!F*s0ä &ÚœÅY;ÓL¯0z‡(RÊè™î­5&N}ZEΔ‘µ^hs"ZX–³¬¡[Þ îRs|rZj½YÀ–q‹ˆ!ãýþ¦ê,oäÆ ÆT(BЏO«ßçïL’Úý-ù²WKv}¸m'ZëTóYkóO¿³ûOþö?øcë¤Ä˜¼Ø Š½ã9Ö Ä…c¹›{ïØŽ õ®hs GrSFÙ[Ãì )÷¡ÊxkµÓ]„À?‹þ˜[¤R'Ø‘µÁ\ liGŒ¦¹N3àþõ…h‰suTæP˜ ¨q)"è“s4ñÎD-ñA£SŠÈ! öޝ×oð1B«¡tãc*üõëÅþhJH9aß7þÌDg~LuöGÒ¼Ló³OìÇÆ¶¹Á µ öß¾xruÙEr¿à1Z}ž÷r$Ñf,ŒÛíH9³âÏ瘸Ëm€zŸ|nÖ'<]øŒŽmé9‘s²a¾Ãu_Øó¸ U„LÈa§:ÃáÌ^!ƒÁL>R®«9›· )ðÄ5ºEadÂiÙ¡aqÛ®‹4jfðœ=Áá8ØöNqCL÷Iz7b+ïÂÙP«[ÊèÚõض„r7¶æ•Ù1c¨cî\BLÙUbmk‡-ï”VLjý{õ/þµ2ÖÔ>|˜ã°¡Ú@†=8*vT©*¥±Š+[N(•‘‡WùÆâÚ Cï{Æy^8^;J@ñŠãu Ù)¤E0Ao)ˆx¼¯ßM9˜0v]HûçÇîráõ¢b+=Æ4<òÃõkŒ‚ ‰2VµhË¥,éãA+Ѹ÷}SñäLÁöÚ™#­S=^-ÛzÞ®Ö±'BÕömgF‰ ®ßç€`ÛwÜ×﨨(×ùI|îvrƒ¡_æÊ3#UÚ,.Â9öŒ-Ĉ>¢Oæ^¾è‹°¡3€ÇÔ¶¬DN„§—ùi;±½à MsáÝ™Î8a{©N m3(™Ñ-ož UùPᡬð¬5@“ ùeë t¹N˜[ÖýÙ<‚þŽR Ï5V¥W uœ·ðŒÅ z?âWÞøZÕ’ólîäìžÈy³”LÁÊP0Ep)³V«+ÆÄì;­ǰÓ8 è}Â9{Nb2ôù ¿ò(å†ö—ŽÒòa™b zîi=*œµàï#sllË‘]gùÞÌ£¤6ÜT N@ØÂÝÑäû¶‰ÛBê<ÅP~–Œ‡fÀôxBÆèöóøÌ“ßÍi)ˆÔZ–l_;ɱ`ð)]b3Ÿ÷u>ü´}ßÑë@Lžme“ùïiGmÕHÖ\ä·}GíÁe’6²Ÿ ¼¯á Þ[ˆ×² H@SŠbZo m4a^7à&dа,0.Ü2)(çÁuXz1$>* JœÇT…µŽ­°#ox_o¨ò”CÄûý×ë ÀÄy‘YöúÃŽú®<·‰×yÿ`«ÙüN}z‡€©×Ä}$°4«¯Á?¥ÀÞN(l­`,€L^дç…\¢Ñ%ÕSÍGøO’#œ‘">6åŸ=Sê0༵öì£<¶_(å|pö!²í±FJÆ-%EøçIÑTVë#ÑNúÃö)[ž¶Ñ8Kës»Z`Ï}aèý5KJ)CÛ¬}Ògò¼hpñwêPËn§B—=¼‹h÷ ´U´1¢#¶| Þ×û¡¸`s 83+•¦Þ!ÅÄn@§¹’ýá¥ÃóÖ®2/Œ%Xæm‡@p–ß±'îšIª[«4üuò¹îRUì;ÛÛsPñÔ&Í’ ÜR¤-¡’®ó–p]÷ç”® ±€§VÛÓ¢(¬1Òž€VnÌ4šC ±j9KÁã:ßüþspxR%¶cƒðýÍ¿÷ÎÁÿåßý‡|vÆ5>SËÆÅ’@þ”C®!›ÿÔn«]"À¾Û À'š  Ð5”»¼÷×}(8Ù;¶+Qïp_'ö”!üLy瘘½ÁGæ_ûö˜`œ°Š¯÷ý¤§ 1ÂÃá6/ŠwŽ&l…ÃW)ÐÉÁcÝ"Nù~‡õVCŒðÈ)a +Å^ûcΰBò LDÐ#;ç’ÈEm >'ön뀷¾c{¤ò¡ÔÊðªR¥Ûœ9fôÞàà‘ÝÐØ¼ùÄ ŸÃr ØÆ!\u@öâí®µ8åý‰zeðÀ xìTDy£êÚzýñãéÄ~¼ 1;¡uÛ±³bÉ~b³ýáÉXñµj”‚­¯ê‹ä`‰‘2q[ˆx¤ľ¬ “?›ŸÀ*&.þ<­çe’0F­R^ˆ“5Äsõ;NÉ3Þ«X³@q˜³b¥´‰© )“5I¬Í@‚Ä'»Ä;G~Õäýä-qnïÙ~j‘Æ9g\×ejLµN•`Ó9H±CóÇœÞáxm –f^4gªCž÷mG]§›1…åð@p™Â“/G‹ã“Rê9'Rd›-æ„VÚ¬øÊ¿ Î±0‰ Îyƒ_RH‘lœs¢äÖ64ïhcÈy{¼Z£*ั}´/ämCL A>¡ìhˆ¶m‡÷‚Lñ7BÎØ_;7KÌaCŒ‘óçyÚ²X¶”á%0¥ÞPÏ9—÷T<ÛQÿ¿þÛÿËÒ¯¾ØŽŠ6Tu!|Œ\BÁ³³Aû~“ñ°›EÎÆ¼Á»eŒò ½¿ëÜÄã,1&ª†œà:Oªm2j\™\£àBʤjöŽ˜çÍ–®Î¸%V­âÈ/."Áaˉ*U«.•yу™Ø!%ˆä˜PkGŒÞ^dåÓèUjÁ¾íHÁ1ÇÁ9Îe ˆ9P•ãÖ@4¾x~=%S¥ðÆâ&=x2êüКm>½wz=B€HÀ±g>´ÃßóúföÇwAŒÉt˜F¶ôÄ; )¶×»Þè¥Òmïx¤¥A’{6]B­—½ôá:ŸÅž'•ÓTu†±oŸªWÄæŸ(ÍçZ´`® °Jz-È츨ý^âÓgÿl˽î#µîÎxµÓädÛÃ…ðÌ Ö¶"/|æà]Ö;U8áâ<ÕQ°ð&8<Ž}ÏÄAŸœ„ ÁL}<Þ¯áóŠ.Z¥n>'X:ât2áoVŒ÷}!gò»†aND€r_ŽÏaï¡c­#o")16ú}^,³)qãì$‚Ëü1/„Àå -¥ž9fHð¸ï ^7 Iw»öŽz7np‹²lêŒÚiÀíV$yOu`ë´6¼Ï7BÚ°%J¦[ëå©ÍyüïÿéÿU—¥}içµÌ5¼Ì'¥nöåb 6¼nè½"øhýO~hçÄׯ/ôÖ1µ¡ÕÐ'¶ýÀUOl‰3ã×/Ô³¢õú‰4u‚•šJLûøÜ䶸ŠBð†8÷Ô¢‹5édĨç¿õžCdq{θîkM}Œò+¡ouôVj ¶È£Š¡[œ-òbFÈ…:±õ{LûþÂe-„…‰Ð1±Þ•Z{“û<‹˜ÄzÅê*–[P&±ö½¯¶ŒõÃß/GvŠ;j¿(ÃUú Öׄ˜H\ýIËwœO´Q±ïF%Îá~Ÿ&¨ †ŒïXë‡slÙ¾¯7¼…(¹é‰€±yÕPEð‘-Ï1!žóªl‚…9CÝlˆŸófˆµ:Ä ެ¤œ“rJ­8Ž çùM“ߘÆ_Só"ðkVĪ<íx¡-Æî°‰Äæþ4©W,4[~,®ÄG^útf˜¢”ò!½ÎŸf@ÏÖ…AQRN3è°ÔÁdñÙïpŸ'¸!<íö§MSêÓÛwÁ#²´ªäuLÄœ½Gé ³v¨'8Õa¢Ô‚ãõÂûm$ åöJ)ˆÆ²s|¼ï‚=oÌX\Bʉ¦ÅÒ°çhæVvAö¼cèDíÚ»…f¥§vßt*âÑîŽÅÌãó;R2ÙÀ±\ßjÅxÄ ÉÌ:;j눶Òþzý†¦ åºiÒؾô@+†àÊ™°ƒÐè™adÔúpýæüÏÿ•: oç&2(…\±£<[q@µ¤öOÜ­sžpµÒ*Ä:lë ™îI¯jÆÉÉ2°ããÔRª}+JIsʸÏ7àÂTZÅ4 ³ÜãÚØçgõÝNÓÕ]¢]F¯Øó×zdà@õ ló!mtà•;Ž+î›neUrfbLDbË´V ÌóóºîrB,*{ËyÿBi'ö}Çù>WG.¶8&«Wh§køúí…ó÷Ó9Äà?pËRÑ´ñç¬Áªzf&˜ã_-ÜÖ©V™k6oN?J\í³ ¶[Ôc$ÙÈÖn5±s t Í¢0 ö‚`2åuLpðö•jÒaF#ÐáÌ…®ø!pè‹ce™0â8gòLÏþmŸ QT¦õu ’ª6^T›ó >L:ÙF[~góÊͽ ?¤œÃ½Ì…,‚9i tŽìNÄ` /K¢Ìû½kÅž_€zé|½Ñ±!züõÿ÷OÃk§m^9)×]r4¤xÁÅ罯۾¡ZÖùºâô Q)™· Áœ÷ùCÙ´Â:ÛˆÞñžÀèîÙ<صèLQƒ¦2Šx.„6¦D×rm³6kÇ3?ݘ (†0“=çŒRè„Ö1¶ ­V<æJÛX+¦˜¼®Nhâå’Åç11ðÔ²”§[ÎP(•òÿ6h¬ôžÈû) `í)¦·FûþÄ¥+º6ˆf±+ ºŠ†”6Ôb\@GC² 7ª´ï˜­#8Çy¥­]0¨¡@q•û¾ã¾™cÒU¡özèñá|)x‡%j¡¬šÉ†|ζ˜QG³Œx'@˜£¸À(ÜÑÛ Âju¾'ðÿðÏþ՞ĪžnZÎ?¸$`R•5Ð͹Êv€ôÚzW¨Î§¿ÇÍBãB \ˆÛNÉïœÌôAi'¦r&}@í•f! &ÙN}·9‘3zGŒ¼‰ŽýÀ÷÷7r&Zz-‰¤u{Þ8”›:‘Óöc$¼ŒJ7œxøÄöPô4"–Ú0ÛxƸ*ìcz¨T± hN˼Ñ|]pÐ>°®û¤B£ö4%Xe Ä•Xõ-Î!í/ÜoV’!FŒÑÌ’ x½¾p}?Äà‡èòÔýöväå–Ëñ.Æœâ¨`ðüP:qä Í`³÷Yæ'Á‰)¸˜Ô8Ä!,ÉB°?tc‡ýØq¾¿±eøŒì)ŒXB »X†ÀŸTB'‚3š ,èÕß®`yŠ}Ì>©ô#g¡Æ³…ŸU¥1ÒhWB8eù5ºµ ¥á¦P Á?j›z`:š'ý"åŽnøÎkB&”q´f2QS©Á± Ïù–mbc¶§}è]þ¡Ü¢!-;ÜÞ×ûqk«*îr"ø:üÀ¹€IDATüüœuU³ùÊÍÁí××ÞßßPKä[$…¥øž¶Ð(7ž[j‰KºI¤1IŽžº¤6ݰcìJ½Äjn(è£ô~)mX1%P™Ðiþžx,9Ó­Ùݾ¡\ò¾c\ͨÕ’<ž¢Ì'ñ‘‰Ÿ1¢Ýñµ¡~ß8¾^¸jáÙzåÒ˜¦zÝ·ùÌì²8 -öýÀ].l1á®)ç§È«½#ÙI_[Qù ÞÖ¢Ö¢ŽÄÞr_ØvžJÚ"5Œ ÷ä›@€:'’“h£³¥'‚®úaɸZ;r"¿î¾W’$?€œ2Æ —š|OpŠr­5MàÃü˜=o¸Î›FâÙ¡ uù}þŽ˜È?þgÿÊêßÏ Ró)lî³HuÕZ$*°m/šÊ*[Nw¹1»"x‡|l8ß'Bˆ¬bD×: ¼çMÞ*•!˜é°qZœÕj!GJÙrècàØ7¼¯[>€åG€XîàÕÛ0÷£ˆQaLeJÎÔBý}Hwif ä ÐéDHD'êMÍÿþÚ-œoBÕáîÞLv€"›[¶uÌ~ੈʨr]ð)˜‹¹‹Ù@| Vm&“sA•È*õ>ßH¦ ¸¿ßüÌÄ:K1Å1G”rþױã}ÞH™Ð¹à}8ë×òº9Ǿ¸ÀAa”cÏœ"ÊZ\Ó'žu£dSÁê-„D±‚raqOÉ9@42èÈ$?st íùD'ˇÇS±\Òœ/ Û¤/Z{e®© öcT(‘vù tA§9’¥çjp[Äj¯Ú€³!™ Ú§%†yÄ=ÀM&z]×mFúÙÓâÅ“âkÊ£©ú`³÷ã…Ö*ÙE‰É~c(‘ÊkÃþI™uÜ3YÑA&q0½s0kü¢÷õFðD}_ç°üubm‘wf=œÎzòÞ9Ë8[ùW¥Fï ]âMCZè’ ÏŸ›o¤3Oqî§±"…=z<ƒ §3ìú£ôŽ3™µUZL-°åÊ}LÒˆ·ÖN‰!¡ ïˆôß¾væb·Š >{´:0Æýz1(&s¥'†ù0ð–›p¿<ó䇀i÷>é O)â¶lˆÑ^¯—ûù®÷›¢J]|+‚xÊuNá|Â" Œ6ðõuàýû‰ãØ1\ç›§W‹öchwÀ)3~„èŒUúI¹<{“bü7-ŽÕ8£‰­é<´u~yÈdõ€'ÙâÖárD? ‡ì&&qk¸$ÕË;XH¦=ãüýw;"au í«ûúÌÉÖ½%/jȇÜð‰‰&eU ÊY •eúäéÂҊ)BÅ”)Eög/Ò:P O(kɼ ™]Ñ 0=U©-/U5WýÀ¾e”V)›M©‘Iáf«üº8Ó;^Îó‚jG ™­Cl¾Æ¶šˆ ” Ñ{ HÐÛDŒŽ³èÂ<6îË}šµáõõÞ¿¿Ÿ‚B„ [oªV¶°þLã/¬:“A߯Ÿm6Õû|{bHD*(ˆ 6%K TU øÚ¾¼ÔB èÑÂøMÁt™^¿=r»«\&ÕkÈy³@ûÀª/yœ÷…mÛQÎ7bÜ‘7Á8àæMm Å.“Ýb¸ªÝëÊE§÷ õ¢;6ÌÉ£"”2à}³<Š^á% U¢MBH 1òÜ 01å'#aŒA5ÒèP°—ª“®|xPöÊuáëõÂõ>M·ÜÖ&p˜Šà>!Tkà=_C¯•èýëÄëõÂUn*ŸD0FÃq\¨­ ȃQ&¨`åí¼ç³gm‹Oq±6¶Ï’sBp‘¹â¡~åloÚ`7El[Ä슻ܬ´[DZïhƒô‚Z…Ghà}2]ñOÕ“Y¬x½^8¿às"“É|:€á ~˜³ÝÚ²TaÎæ iÛàq_o3ÀNÄ=ã¾+ö׎ú.H{bµ8· ŽoÓŽóƒÑÞöL‘€^Ûcè¡´WPí30`â$]÷ÞYilS*FS´v±­îœáÇ9` ¸í´ ãHÙc‹ë}òõôþÃÇcC0Y#8Þo’–Ç\í>þsÎyxb\÷º³ûÓÚSsPmØøL é³n°xnm6 6ƺ>â…éšBÅåÝ4"8ŽoŸ÷°m¥ù§}ßGGÎvmβ<&Á7³N ˜À–ós-î‹3¢ªŠcá®Ûâj˜Û况ÚÇù+Tá“ÃèjÁ_Åæ'7t׆1òf#F:ó¯ë˜2­FÕGX¨®#ÉG”ÖÐ{ñï8ï Ƕ·šŽ­ÉfHøå)âl,¸—åjøí·Wi$òî‰ÀA¯èupîVrvªDhcŸƒ´:˜u¾©ýÏj-öäÎgÐy]—>­='|öxÿðú¤mǘ —ù˜ Oô±w®¶,¸n²}%&ççŸ{KȲÊ ©”Y/®˜œP±¥ÊÁú4)¦>§_nzòA·ùüÝT朇à% Ü·¹«—ƒzÐïbþ‡ÖèÓÎ$AfL#$7΂ÃM'òñ‚SËP1£cµ4[7˜ÍÑ MÓµ/—>ƒè£P1©‹c¬jn|±N ~‹ç,p­[^x^? ³‘vìFˆ1àû|#GzÌT¹vÛË}Á{‡œwÔfr]çéÑ;OlvjUUÜçe±¿ûþ2W½"ïÎïoFÕHþ/ÿîñGjäiÛ‡ù¨¶§Úz¢ä ˆcÕ¯:8 T”v2×yNM#¯ØÌ´ãWΆRˆF$ýtމà"®r!ÆèDÌ$Ôæ”p}³íã=š!¬×C:¡*®oÕPÎ)$´1ž(ͪ NXS‚éHßµ$ºÕ· dÛ>¨P« K¿i ‘é\9ñý¥Äæä‡Ñ{GíÄ¿Oí¨}`Vž:¦écÌè¥aÌÉÍQÇe»lyÛqŸ'´¸ÄÜu¢#<¼8xÐföm…ÃÉu»2ýŒŠÞsvL§À¤ŒºÞ…™­!¤h|b¾~{A øñ=icËf(Ô ®« ·†«œ¸Î‚¡åºYlL†Q±_úCµgƒÚ=B$ezŸÞ?Çuªx:ŸÝ…×nŸW¤O(F3㙚nå;l±× Îß¿ ÿýF©—‰)ìZ­0žÚÐG%YY`´Ú0j1”š°,áeK[„ùm&=%.ù%EÁ|z¡6x·“ ÀÀ8„`EÙx2ù&ô9ú(íjó4S6碅L…ÇŸR„š¹Ò>Ïô´ñ^ !>[@Qo&±Æ@ÁÌÜÀ–Ÿ FÉâ‘¶ŒRiÀó:yH†RÊl›ˆ8™Š¼‘8þÿçêo{lÙ²ì“&ªL{c¤Gˆµ3hkµ9¥„Ïןi?(òü'ÿBçTƒ,­îRCèÀ°Öî§RæÑ898…N3R"JÄ9ÇÜtåÁèsÐ[c(}Jù7÷h“­¾˜§ZG“R†Š"ÀsAe„>¥€ó{Üùõ¢Ì°wJ`•/½¥¥NMcS‡I -J¯™#½Üû¾Ã‡€Ïç Çv¹E Ìñ1 8רž÷G_]Z(¾ÜpV\M3Y(¶í…zŸpžØøýuX€”A…¼`§3Uá±H¢`ÖƒOˆUF­U3\^Z†.#J=1°½^–ÝÜ -öã`¶¶x´V Fe]Ùó«%]JxWaJÙzB”„ZujjËÒ°±–!w­÷gÜ}D›:Ùõ‰#ðKM^&²b{õQáÀDKŒq~>p)" »9ÍTèˆÖ™ lï E"Ì09¯Ë^\‹¾gŽqoBŽ€n‘Ë1ôZ0Ø]Úd*/ˆ Óٮ⃊%5vbùÑ5›¥}0 ÞUØÍSÈq!çƒjR ˜TSuJ4%:\_÷#=?9A\D-'+«4ÛàŽ¯k·whÚò€£—Ê ß3qŽ^7'Zà^”hµNr˜¸†{œà«öcn¯¼Ñ–JÈSÍŠ>ɼ€þƒ$à §Ã/“Fg¹õªP/ÈiÃ}‘Ý$ay„HžªwÿÀ°3³c8S‘<‹ ³Ø…*0qáaƒ©f—sÀyžð>"D¡Yx!Yw_« 11Ê.œ)‚`;¤UŒì0kF}ˆ€NcŸ¿mû³ƒYçá½+òžQ®‚µsržîtu{>p~˜Ýt‡!J¸éµ>†Zg»U1y6”2ç^ TÈP›s`Œ†×ûÍ‚”Ë?ú§ÿRÅ»cAÒèx2uÝr$p>›JÙ</cË“ÈVESkÜ€Lo7Ã\zk4áhGÐypÌ\ð˜­"¿ˆxÜŸ/äá,§|N{YÖE¦Š˜#¾þí«w«`×E¡ƒÈôÖÉ(Š)£« •U-”ib1fë¬&f§ù´Â ô>¸ÔJÉþ^ L8:bÈVvLdŸ¬jƒ]¦iË„âÝ·‘O'¬8mèäÞ@<Êea÷ò—ÊV'ô*LQbª³¤kiô6œóK*ˆömÇ^j9-IQ,ë›;¨ýu Ýõ‘>S„àl§Œ)eJ½¥ºa+ßBÝ3±ï‡þ™èB—›]ñ£¾¢öûùì9tk‚E"꣛qµ=@`¸t¯Ä´sïðÔªTßQ,ÁŸ¹÷ÇûÅn±ØøRÒžÑë4úKÞ¹Š,€Q¸·„û¼žüõõõ ¤öcž©ÚÒÖo8ö7F¶è&LðëëÏxåÇŘ2ZewC`ük¦ ±ÖÂü Z9‘­Õ§Å#ƒÆÙÞ´À-M€ÐÇÓ•Ä̹íÀ1š7CÈ2gþø±Â‹ÃÐñxªFë€Å5?’e·FG6ö2\ °ÌP”>;Ðf·Oç²8pnðR÷ƒÞ¦crdµ<@ÎY{3éDz6gq~¬ ¶ï"ø‡7›}6n|ŠãȨg¡d6ŒÚ¶ÌÎ¥ LZ£`Uø¸îÍÔ °¬wf³™kØó exñ1àü|ž?_{GÌM–SqWKxÍ>÷ɧzr4€ÝˆN@Œ¡×:â–P¯‚íe> {göã@o¥^8î3Ö¥×;ÏòÌ*w’ñdÎ&oÿ{óýIg³Ó¢=0S˜Ý0&]ØÜ}t^&ް7 .#GoÎ,í=epÝæ(zGóMµJmLËìajU\&ãå¡U3çÔÂC½rþ×îbK:E­ ×ç‚ã~åLä´!º=} á ß»}Ÿa)—¯ÑÐÉ)F¸@cÚž3Zç=Ç ï"î~!Åü¼ ªÌ¦( ­AûÀ]Ë·7Dz«‰K÷m#*};v8q8?_Z¦ÕF˜ùˆ!,Øvæ8'ˆ!XÇ×Äáõ¿þkÄ”¬«r–AÒб É`áKÄá*—=ð†œ1½ˆ>³_tãÖê0ÙRÚ'Ǿ㺬Ý’nÇlPå¸CæDŽÊ(pâ¹tµeíÊkŸBÁÆ’ÔŽ>ѧÚˆm™ãÑã·Æ¬æÍpA«¤„.ÿ0~ªæ÷cNÌŒoÏ.KyIƸˆ·üï⨥¯õF >ð–H—÷>Ôó 4êÉ7ê|(=ËÑîCDŽ.’ƺy¦Äظ:ðÌO‰cW ×EœIpF% oL1t… öÆ4ÎrQ56ùìñ­4p–ÊŒ£Š/G’gµÑ¿C\ߢUvV·ª6š6rSæ³óÂîô$Í>Í%N¶ï~ág¯ãÁÙ£3ßS!}°ÑpV”zÜßñH¨€ÉCr¶)Œ>`ÐØÕŠ@û0Ü>ÇÚèù`ò{!0ZAèPŸcpæ<á"»žvW´å¥˜ŠŽ^+÷»C±EóUYLuö‰1³!mZ»yq€êÓÖ+¼rJÑ;G[õ¾Ÿñ«@‘³ÁÏσpšSQ{ŶeTû~›) Y& LXW8hJ]]rL”*ÏAi­7G¢:Ñ* ¿z_˜½ò"oÕ ±ØŽÇh–5!ÿè¿þ— }ÄÖ͸ð^‚¥– „í&W+оý‹´»þ°¼mpóÁj2ɯÞH‰ûÇTÁ±í¨«•7¤É ÉÊUxÓÕ‚mÿ`b˜'Å;§QN½hs ÚA LÄ´YÛ `rùÙÍ`dÚtä¸1ƒÄÜÌ}¨y!ˆ)éµ`*³LbˆHÛ†óú"JDÕ–Õlÿæ˜Ø½QË QÍŸhÐÌåœ3‡®Uõ)Дd‚>&îë7Ž÷_á÷ï??sÏ%xí/ˆ7‰ò`ú™Þå®[ÎD´€9ð¯÷›Ysů%#ëòœ)€!}#ÞGŸ y"6JpÏ(BŒû“· ct´z#çÕ=<èØv¦hñ&›Æ  N¦Gq2²@¸*ÐÉx«‚¦’ZãŸ`Éz S0ÖÜÄÒݨ´êc"¸ŒŽJ?Ag&M© yO('q½£¥:jÑs8¦ôÞC»bÈ|òmV5¼<Ñ©\ÊOLt+^"êu#mL圽‚Q9qd‹it}Ôœy ‚I´OŒQ‘ìp©ƒÙ;ÓŽZoŽö’6>T"M&½ ÀƒØ×>ŒóD'¹O@b'×ûÕŠû®aš¬Êùÿ´ øŽ ¯× 5ù£û„[÷ÂK„c˜•ý¾¹wÓ£ ^k£dø¾LÍHµC©7¢OhcXyÙ9!ÈÏ8ïËfˆÊöutSÝÌ,‰Ñ0ăpœÒkÃ~¼ˆo±¿¨H{áú|Ø©@$ ¶„-çœ,d‹åàBjʶe,wäæ!9‰±*îq¨u´ÏžtS”PuÇ‘ˆÂ«Çë_¨…&¥Z+ºIARŠö¢3`4à•+ÝͯÀ9uAøçx;˜€`®¤çöN¿ÏB¥+è:så( xÛˆRâÈx‚ëñ59ŸˆÊ¾*ccm7àá¹'ÓfÀJ3Cè€h€ˆI~Áìó…Ý^2â”vôV ¹éÝ2lbÚ¼³nÞ3²68s1ןBĶgüþý!´Ó˜p¶üÕm“„c8î£0¹WR0* Ü§©tâSÀi-šìSI̘€öª¯ãE9•[«ì˜:€ E00ìMÛ†q5ÀwЗ,ð)`^DÌCifõ€ç¸N‘üF2D ×ê½씿‰(`ÝFd¼3‡$–Õ#ó!S;aÐRôéÁ«÷Æw~< :¿ö?‚"íûsø.\:‹¥†˜"]ޘض 1@›¿Þ©\Ú·åä<» w«ˆy#(ÓhâÁyœ÷ÉK~PV í1ŽØ ã}ÀçëDÊkµ‚©”–ŒûS±½… ƒy2½ï_˜³ãº.3 fSÔr!¦Ìð4›]sï×0a¤è#¶m?(:ú‡÷/te},'î+Ó«-´D<Æp¨³á§dÛ6ô1-ÍŽ*&½ ÷}b8¶z-HyÃçü±¿xp„hfœ„ëó1o”tiÛ_E˜+ûXBéÉ3ζffžöèÞaíþ¾íùÀÛqº:Ѫü÷]°m/îb™ Ê›}£µ½´g×´¿Þº¥váO¥|N¸ p1aÔJ¶åªLZœ =jm&fàÏê¾>Ï"ÓË;r^7å%½/¯÷ Ÿi¡1,0Ÿ] €:äL•Û°E­š³ÌI@0 <ÔB’̽<-[ü8^øúú3EÎÊeëà IîdUÌò©etì†H§´C1½>Bà”è2ú pcÛèF¯m%öÕç¹M1=¢è#† mpˆ³Á»„1M]fNàýõF½.FÈÖx±ËƒÈRƒ§~­"¤hH ¥á-:êPT¢‡vºŒWWXJ¥¤èW½±ûó5³z§—c=“¶V³½ÀÀ¾\º¢ªÉ1³KÏð3¢ò쥾—»?J±ÈVee"ãU—jŠKçþÐVè—¨|×ë‡4Wô»xöJëì°gF©rËÖÑΜíOQƒÌŠêOq—ö ÷×i~gyÐ tx3<,S®Irƒ§£_éµAUà¸ÚÅ}X j~HÉFÄ ì÷ú\ì¼ ÔÎÓ«#ŽEÓuÙm!ZæÀ‘H싾kEJ„bæ”æVJsvÔZŒ6Í‘3ÀŸg7Ü Ïn`vžÁ½ÓêPKŶGÜWEÞZefü’o·1‚C¹*B¤,P¤-7äÆvçÇòÿ§¿ûúô¥PÈ «Vu9HÕüHîáJ-SÙ*øSÜPï>pÞ¾º @—‹’<¼xø xJ~ºÖa@]%ÕbÕP $þ¦m}LŽbæÀþÚIk…Exžf Ggiv°‹•Do!q$wÝÌ[ðÜ•ÞhäÒ»&šµa =æ¢ÙQ¯uǶÛœ?ðÑ¢'¾¶ÂE ÎSù„)î÷ý…m{ẾõÙ­5üz¿ù .áºè^­×UàøõÂùù0½ÌXTN—Âó‚ ÄBªˆbÛ6xïq_å ýÊ›Ñ5'ÍN­ÚÞÅlÎÆy^ÈòŽÞ€ ŽÆœx½v\g¡Éɪ`ß¡¦1:9ÆZňpñˆ†0µñu¼ÑGE­SÅL;„¿_ð…•_æDØá]×÷!õGŸ<ÿÀQ€]†ƒx.»Ýr¶ä×í ]U;ÝÚÎ?,;ăI–ëÌ !šâÇÂ×jQ=§Œë<2×)e\Ÿ/¼ŽºIh—¡Su¢É‚k'~e*ðW¿Þh–‘Ók§W -}†¦–š“7 }m@Å©³Sv¬+eÐ?>‚õÍ©=[ö`8^3²kC·¯×»ï4ÅL‰0ôÇñý3Z‡¼>É·°býYâ=ú(HqGôÁv¡ì ÷íÀY®ç¬x¾^{ß­±`äó ªiX^L$½n‚M}äa¯])Ðÿ¸ê÷=ãúTH`7ÓêÀ–>÷‡Xû9¶V ¦Ô‹q¡p8ò+¸£ GjoÐ0ù¨ÙOc› ÞEî±Ô˜pWPk<œuÍ£ìFô¡–8É=ÒºéŸéØ7É V4­±ð¾í¼¤lYÞª©k¥v»NŒÖiûý– rä P·FV4Z…˜Ðiž$…&Ü×ý^\‚3s"/+Çlyþ¾>X^±šÊ+à®DQ;fËýëÔÊñÈš®<‚g\åƒe ãMcsáñ̤Ñ'Çe÷}ãu¼q~‘^©P*®B†D1ø$l·#lk}|Þ³Qß.)Ò á(Á“ǘ÷íBä{”öˆ^‡É§¹lý7C3¨cœp-¡K~ª×mŠã 9 ¢ä3ì鈄H!¡öÂnS"G]u¡¼I˜­ò}°|›©¸jÕ›çH̘@•ßRV}W¶VÞ@Ý€—ÈÌio¤‚1!¢¶H¥ü;=—xúçáç¾J»¥¾ÄûçòT·F%õ‰;m½>æ+(|úTª›bJ$¹ÖÆkržŸr†ˆ –†ºSf¶øïÊ<¯h"×!0i¯÷ž*„’0IŠî0Ù%ÁýÛäbP¹œ³í/¸ý¯­"åEé-ðÎq0½!À§„ͤçuÑ^s–ï°Ì~î³v|ÛÒFëü:F}|6srlþÿ ÀTºV›Í)]‡B°46æB“—u_JãϬ׊ÚÛã _rÞmßà”2ÓÞªuu솅pxCª;ç00°%*ÕTù2xL³ˆ«®^A èœë¯«Ì0üàVh/u3ÇI0S ûë¤"o>‡qûü:§ýs§öâh1XÝ|\ÂbÿÐBvƒ<š,xjX¦‚}áô4q?¡q³𰿤ñ™èž3eUH¢k…°‰:¸©¸îq-JÓãg‚½ä!›§G,?FÍ1¯ >D â—Isj µÕ%pfÅ®ñ?=_ü¿WîŠX±B¡ÃœŒ@Ø6Re„¨÷¿¬m– ]­ͪ‰4ìny¾nzi˜‡Bʘ8ÒfX›è _³@†J?‡O í¶ØDTÿ"â.Òoˆ‰´ÝÙ]@Ì cNÌ9°ï™ïg©&–í9çŸå½b”Lj8”ZÐ{EŠW©ˆS˜"®ëF4‚(;ë»Ü 2ßJ¯ É:€aqÎs¤¾aÅõ®rÃú·ÄQd|@ðíù@EcŒçç70y&M êÊÛŽÑ«pÇqðb´=Ù ª,tŽ_oˆwœè„ÿ{ÿàoÿð_­“N“ ŽõŸ”C²Ê¬”½ÍIĺFk–‚Æ8̉S4O‚‡WÊÏdò›ê£Cee\(j½°ç>ÿ-¢zhœŸ/Vúc˜s•S5óaJ£&GòTRŒ9éd…bÌŽb”ÎZ‹!ª;ÎÏED„gõæmn—½7”RQ[Atª# á>PìßÑ)h½wâ³´©˜­&&îóB±¼ò9&îÏIÄ…\²Û‹Ômœ&âÍQˆýè<äj)ÉSY™â,z•/p3ôÉ–ýñdL»åÈ1žxa'ŠgJfXEÓ2XZï¼Ì #b ̰b¦‘1xÌ>Ñû$3G”‰xýFˆôÇÐüE9¬`|K°•Ïçè–Ì¢æG²ÑÇèŠ)öïÍQZ3@!»FÀ‹å‘Øò’˜³Cúêj:¶¼£´‚o[d€:^¼$>x8¥reu¦,ª—a<Û çNW·Ñ[AtßdVçî“‚“˜9RuÖåêdt«ó!fÛ1ÌHœãèÌ)­¢7&R&üïÒ;•o×iËô©†l1E|ÊeHFì‡ùNÖèïi6øIðÖV $8ˆ]Æ"­WHSÆ-OŠVÛ± ÏçwûqÎ bHÌaºýÅv?Î:Ó`NØ2‚$xïPÇ@Þ3†¡GBLÐ)$CLB$óqð,2’®ˆ÷aræ”"Z+È1âº/´Öà½Ç¶e&-¶=´"8§&qm<ˆÅ‘ù#àÏD´Î¼œ³ÕåÞ›$P /«nûçɱòÞc(^s2|-Y!<&éæÎ9x‰˜ðÈ1Á3 ^‚Q:µFË)¡Þ¯ãד`:U±ÿz£\…¾£òÆ”P+É .xx‘r¤iÙ Zè–Ñîÿ7ÿÛÿøO"!$ˆeŒÃþ} H‘Xt£f}pÌ$Ø">Ö!x8ñøõþƒžIõHJÙÈ™`ísP•²ªô¶¸qTÒÒ‹þ#oØr~^ûË^Ê$»>ÓŒ…ñ›Ø¶šEibÁ•T‰/ Ñ !½¶5Ê:WU’ÓNW¨8ª ³>ûÄvÈ[fFù¨Øò”Á‡™£ƒÙ'ö¼=™i'ωû‡.÷ráõþ…˜t[&÷NS‘(—c 1½›[›p5“|Ñè.ò€Ñ9*€ÜQK5'7;J¨ulÖ5ªU?Ó4ÿâçùSðz¿iö³¼xç¼eÛØdKôøŒ¡Ý*0ÇŽx fÒ^¿ÞVÑÑèILz|: ïø‰ ©Ž¸s™QÎÛ Ÿ­Ï¼ÜQ@KeŽ®eðà\_á¹¥ ­WÏ®H–ÊlÒ—|$¸}ëxØé{MÅ ½Ïg,}1"ŽbkÙ¦)qÆš*¤åj­(÷Mئãá7¦íõh•#Šaùuë¨a¿aDYñ>$Ääp~.V„fø›:à=cŸs̤§šÂ'ë¼èOI;T}¬Ë‡¦bŽR^hµ`µ¢â<“üÑög,‚òyiƒ—tÞ2Æ´ÅÒLŸÊ Çt²Èè'bb4Q ÐJáÕ‚¹Äy"ÐÐÞ ƒìtK·V7zÄZ­˜“#\Î÷ÖÐÕv!:èáqÄ•ïy„´ÛnáU-Õr£‰V ‚Q¡½w8¯ß\Å@-˽!ªGÕ îëCe ™vU•Yåæß‰Á£Ú÷C€vŽž[ih½`‹DÙˆspNií#J¯€ÐsVå昭ÁEç¦qµH2×I$“ê@½ B ÐÎ QîΆyoRˆ¨õ&ìó¾í|ç*Œ«òþ«ÿ—>ößÕ¶Öx¡ÝcH‰md©ÍªG“7š¢‰Ì—‚¼í(•‰Y½Ôr#šBj4Îåü2DjS}pY™÷Ll‚_]˜ä€ó¾¹ÏÈF5ðµ¢î™Ýµr¢ç9Š‹ÞcŒÉ$1Ö²Û\\§>2Ç6˜÷;lÆîCD¯7 9ÑÒUá11&<éÃÓØ[+ßBYûèˆvútA>6Ü_¸@¤º c:÷×Ë(‡á¦]üõ9n(íæ×"äM9 !3fW˜1ÁqäžIu¾ËÛ~X8Z¤qO8¢Ýòç'zÇ^"àÜs8;Oùî}7l{64ºÍ¬S4à ê­5ìÛ†¯ó„A6Š4¥¢Çœ'åë¼·~x& ÀC„‹4–^ìbe¦ÏRœàöÚ ÊѬx†,q¿c£Ký“Mðsƒ®ŽDìÞ¢áwЇ|çE]W>üxƒ0;M8Æõ♯ÿ÷þƒÿøOK.6Ï„ÉéA ÙoßþFžA0u yƒ˜Éd 8_SlY9”8)³P‡sÆm‹&uLª«µšÌÖàÁä¼cÒáÛ:¢ã×àƒç‚/ïH)!Å™÷¨tª«Ø¬¸"§Ì*¡T]9JÔœO¶f½µï˜ÈU“Àq\sÞPQé)²ScZH½ØXJ°ïd2M×ĜùáûÀÀï8Ç }6Ž»¹NNz)xýñB-¯ãÍt>Uìûód~1 ”ÝÚ¶8µ›FäÔ§*öŽ4^: $ìÒƒÁ‡¬7ª¥rʸÊÒƒNèR¨Ù‚ÚâûþFеÝ{Ø8gqvh¤ ðfXë>w»È4ÊUÐ1 =Ãï9ˆGÌN¸ ™àâ‰ïSP…˜ —w|>æ Ëã Õ*µÀ9AÊí.Ø:‹[/\2Îö 7ˆð°Å°ç;AvÙù¼tªµ3„9ÿ¯?0Ivôjh•Uª„¬™IíÑGEʽÆh¨µ`Xœiˆ¥Âåïu]˜ƒ&Á<î} „q-ë 1Í@ë(µ#…€ý=Ž‹™FT XÔ`r¬É.p½.ËtBY½w”ÈÊà¾D‡¹Ô=+÷rßÈ9š+¿Ð¨¬ì’E¡’R†jð÷u"$ªÝ0Iöí£?Äçà(]žÍØNÞ!¥ *Ê…¦ðâÑÁhË ¶Õ½4Ž@jAŸdܬ…b4÷º‚ÒMLÝÖ`OjUZØ"µþPÜ傪 _1»¼©J{FЉª J)2¦~»Ë×üÚ܉ìB˜Å÷„ÊÝ ÃfÒâÐú0ò1Ï€À°õ(—dB᪩rØóŽóüY§Ýs2.x©OzãØQI±uÞèrÚó21 /x&6ŒIKíè¬\C`v|Œ‘8î#ûĊPañļ‚K¸ï“¨lçÐZGÎB h7gÉúTf6rð Ór¥‰gÁÅñ;'"ñY‹ F°æÖF§r—×ÉRêà^Æ9&2öÖžÑ!©Å§äœàE)ð™m]™#r3·$ÆÄKÏ Z)Æý²6ÄèOo¼çÏ;DSEN“©JªÏÒ™À½ˆÑ:Ù\iƒê´0¹fÍ„ ò¨¢t*Ä‘×jÖ2ÇV×™£Åö²Ês<øø9 ·Þ‡EÕº~}Þè³"6*šÉˆÝ¥ì½a¨¢µ1îpÑcØ.%eFJ$O5Ûu_Ø2wCÎ[âää":*­VæLt4ìÖʉÁ´îÝ9‡hAPsÐÕ»ý6+âés¸ë©Äÿ¯$„ ž>p¿œ}Äx2ÄÐñ‚72²Ê¼m(¥pw5Ä"*BޏΜÅDÏ©dÀ 35ÕΊidM±1•?X‹8žI×] Ý| ÎGŒV°à¾.?œó<S¶O†ƒø¥’ÏÍE:f0·äDïÌÂÞãÒ+¿©û"6#8ƒçJÄ4ï4ë ˆrYz÷Šl» ñNåóAØ2ŸRñë¯ÿš ɤ¬x0ÝkËœ¶Öx(ôFvÉ*Ý“`s`ªu™ÝÉ–â+À;”û5\ü¶íø|¾Sd…Ò‡µ—QÕ3Ø’2úeü/k¡CJhõ2ÿ»“Vfõ¹>ËU‡J¿‰±q uÌK˜&éTYÂNúBpD#œŽmCïcrI!$^ÄLŸ,÷ ËJ]w ª!0j¶¤ç‚©e¼¡yʲµ £-É/‹ƒ1Ôyì)ãBUQMŸZÅz·GV|à.-”ÃÝŽ=]1¼¢\û~àºozàZ…:‡V+þøã¯PÇ ‡::ÙT ”»"Úå¾°½Þ¶Ï¸·yò½uÄ->1çyÁŸå–Úh43:ÇxnØhÍQڻƯ"é¤ï®ûf¶P[iŠ¥08 ÜŸ›#Dÿü¿ù—Vhձž“ 8çM6_¯õ„ ~¿üÃT`‚@›ûþ:ØÅ˜ª£g˜wLÃÝÕ4Â\õù§- éŠæS®.hµwpC!Ñ™jƒ24Âô"º=C‡-ŠYu‹IÞT,Ó覭7¤=! à<ÃûˆmÛp_—!’ƒS.lû›£«¼â¡Ü‘Œ†rUl¯®÷Z°îÓ°Pä}gò!q¿cÂìfÞÔ†-m¬ܳÇÐŽ-g8ñ”ꊷKœ'Ç–#,+}>{ŒÆ\÷#o(W…ž2èQ11àÅ›´—£ÄÑ¿uüd›Ñ/°§>ì –¢&å ÐÑ S_Îó7Ò¶“M„µƒÏrT ¦µQVé ‚)ÿøõ~}¸ö£ßœÍÇl㚆o“B\„Îþ‚)m BÓŽROÛqŸÊÔVnʃ£hˆæ™Ø÷ƒ#õ$®jºrT ‚C¦pk˜ DáS@i:ø ŽÑmFßž1_)$ŒZO¼KëÌhŸÚYáÊå¼N!Íiœ1E ò˜ÏB 8¿>8^oÔûz$±iO¸Ï‚-³Z|³1® (&<¡·”NõZ*´+ÒA¼‹Ö·1ëÂÌÈ‘L3%fð ^8•¸®/v6âµp+ )|š_s¬û μ-Šûºl'Bü»‹ÎË K%rÂ}_†Nêèu mé1âºÀ½ƒW:à:¿ãþÐŽûðN¬X2h¨]Ü¥\4:ósR­4:º-ÖH)tˆÁ(âŽ9á"P;£`fæÅº*½ÃëÄv¼p–¢‹1â¼?4o«eòÜ<`Š®R/v±0ÿŒcô@ÝÐAÞà–ѧâH¥V—å>ë6ók»/èz 8ÞÚ·p`¤Äl£ÖøküäŽmãï­òOþÙ¿Ò1Zn“·.rÅ!ùˆ:M()èØ›-: ž­w”€ëþ`ÛÜ×Å®£R¡ôzýÂõùm•+4ñV™pã‚û<‘öaC:ÙE€¡öŠ=îë2.Qƒs ™w¶·©mÚ¤T•ÕÄ"pªe3¯­”Û~°Mﺛó‹©s×{Úyl”÷ ã1,«·ÂZŠ =üa›i*Fª”¶ý@ï ô ˆ‹ã?–‡™ï)ðs_߃(s3|ð; Jø£ÄmC«—¹Õmç1‰W ;g÷nàuð–¼'Žñ¹É ¼õ°JS„d¿á¼¯Ç˰.BXø“77o² å˜6ªz`é{Ó´óF}Ž)A ¸ËÉ}†Á UÉ"Ì‘á]µÖçCUËi£A¦š¢o¹Ýù<±k¥^߃ª¸Ö*©ÿà[Q¶VÂÑŽ^[ÊlˆËä¯xˆ»}”ï¸:@cÕº]á´_C4%ÍD¹èIbŠÝýTõ"4ùÁµ<4bc}Œ¡Í†Æhæ˜g™ó†û¾,´+<†Íè¹cË9“ìºÚ4òó'gn©©œcÈÕ¬tâOíP-Ú§Ù€=üÜîÒ“CéÄtÔRéJýn&.àþE•c¹R¹{ÂdŽÍu†ôD3;°#Ùó†Ï}Zzä|$øm‰#tb‹¼PÔ ^ƒÔ ›PæóùÍάu‹4~óû|Áoʽª›¸k3°ÇŒËög!„ÇäØfª“fk3Z§-¢ÝíÙl{Æu]ö™›ŠÃ ÔÓ0õÜ zìGÆ]²1éjg×’Ã$ƒ´>Î=UNÎŒ¶àŽÊÿU(l×Å=t"3‹è%.Þ9Ãøð«P¼`7v!D ÿÅÿý_)ƒ[Ô!:!ÑœR¬"È[F ÔÏ×Z‘· m¬¬9Ôg”|Âtj/‡} ¿AÀý5Í6[¬|¸Ž×ÆÖÐk©Zá|„óߪ!>`¢`@Ò=0d“8äÅHh½cßvÊsÁ‘ÖªӵK& Y÷Ž|ï)¯ý|ñr9©•FôÀèö‚3)S™zè)n8?_€:É,3‚)c`…i˜ˆ‡ÊDÎ¥0Ç› [ŽN&€×‹*é»â€}cGBäl×£Æà ˜hîΓôYB ™ÉrCÄ#¥€ÒoP9ĤC÷ƒL«ð>šC•x÷9y ­]SÞX _×—äû‡¯w„:8jïÐã¢DŽ„-Âÿ0Õé0\ºA<à©Ì[8™¡ÌP)çEAÁäC!nì†íç 3hÖRX„pyÒ4½á¾9ýs–y8oèh¶(58b(.çÍäÊ®¦¬3:€=gK¶žr4¿ ?;î=&c,›dŒŽí8P/²øèâxhÛÒ“§âî:ŒH}þFÊôF‰÷È1òë¾³Õ²Û8ôvÃgîœrÌPÛ‡°}¿çR ¥¹ú òðћɚÿçú¿ y±~!øj™ò£õ²Y.‹àbäXË3ä(:8>¯ Kѳ%@¡ÈH!SMdJ3/fØUªòÎóc_üw$Ö3«°7!gÌÑ\Ày~X‘C1—»~?ãÞò8Eᦇ®]Šð"ÔÉŒ!B›u=×}?&ÒÙ'ÍžCý6 ^°%’ºG§nèÀqì8?_¤êõ „ >¬.€gÈk¡[îUx ö9øŒ‰ý×/*ɺBçJz£ZnQ® ÉL´º&!£A :»=v@‡áÒiWà^µ!§ cÜWÅkßðû:±w¿jü¸>­“3Ǻ³M/(ÕÆŒÁs¬mEÕJùŒ;Uˆ¯ý¥ã)>ûµ>I÷`ˆãw¹çˆOþñóß+—Sw¹¨ÿm[H¸ëÍŒ{m2'7$ÛV…³…á¯Á].¼ß`@Ñj¡—¡5ì¿^À”²=S ùÅW¸ÏŽ(\L•ZðÚ6tfã2'î4‚PÆ·¿ß˜ÚñÿûÿþìûnÕ~ƒZ[:Õä­1ÛØ—GN ×y3æ6&”VàÖyÑ´¸‚e|˜­? ™Ò Žã…óüÂCŒ[zé®@Fç¶úà(羉Jw›é"Q&í.ȯoyá=cDÉg#ºò@–)˜ö²ÌÏ9ÛïéPÊù½§šŠàƒá®=è{HB€œ7”V8>k¬îzo?¤s~];yÛ¸p¯•7©ëœ<¨¢ .Ø27¢œTà}ßM½Úþ¬–b*EUx;TÙ BHÂís<»7|(‰¾4çs¤1•ß¿ƒìÂÊÅw'FôṴ́žçA<,ÁÒ!å÷]1%!»Gbé½·n’ë…mg7‚7_¼‡üãÿÛÿ û¶aÎWF¥‡:¤äÐ)N­x/sX*‚#÷~K;Îû„8#8 (¹·ûÁ;ÄœxxYFõš [¶dNC;‹ˆ;\rÚ,ã"¢Öbê-Ïç ÛNÊn5ttJ Ó9:Ÿë ¯ý…R ³ƒ 9½ƒv>XÓ¤­Ñ´þeð"ЇûªøÁ LïPn£’  ÂƇˆ»œØòA£NphFÝ…eèvDèfPc¾v¹Ol[Æ]8n æžV .Ì· n jŽÔÞù¹]áY¸¬_mqŒ™Þosú¥¦²AtµçÄ1†(ÛÙ!kA”ÿ}|'º@1ÂÐÆCÕs>r¼p¿p.¸`˜„ˆ™$âæã`ËŸ#j¡dZ{GðüYÚ4ìÿ‡8ë:Âz5;ˆü~rnìLšÆ# ¨s³2{¯•£LÙ1UΙTÖÉÊ,á!ÓnòòЉ†=™áÊfôê˜0È Â䩃_Ä\"ÿÁêO<ÇZÞCßëþxèxxCÄ3Ü AÞ”óƒmAåÅ|þƒ^†Úò¸äLôüÊ–‡çu#vÏ pxþ>‘¶ïMĪÏ3#“¾,v ßc,ʈ0k‚|Ç5á‹ÀR*Ò‘!ƒ²êhPCÒSír=cù½s,'‹¥µÈ»ìYÇ`Ìn+7GE0Aˆ]®ëkß¶çu"æ½Ð"°mççƒmç…sߎ÷/”û¢ !Føà8{Å–“ÕŒÁ|΋WÎó‹ÅªRB¿ÇÁÇf’úI#«Éfs&.}Oµ3@JTŸ€©œ#%€àZg—Sâ{yò0í­4r®ëâˆ~ñäL".Â|ŸuéÀ–v܃—mJw)LGÜ0}f*ô_ýK ‘sè½vY±®}`ô‚×þ¶}©š±)cÂĉð°ù¸€^ þÑÙ »/äãÅù©œåƱmÔóß7D´eŒIû=@—f ”núèsÒby[XÒG@#‘Í?­US8¼ìâbÎöèÃLRß©±/œçÉ1Ú¿ë €ÖÑGƒÎÒÚ¡mÚ̉‰^XIÇÁ<ñäY j½\–¶óÂñëZ+ý$™ßå¼í¨WÁÐŽc{£ÖÂ|’°:8yÌŸÚÜ#,um Ëyu¹.k ¿!ý1Ô±À‚™Ïà‚³1ã嶦NºÆ[¾ ¶PsŽË·Ö/x‰4L )HÌ ’l”l†?žË7†HlË œ´µB ù÷@ë94¨aæh˃j>²À˜w±’#¿Ëòui~oî5Vƈs‹b¬?i}Hì†lóóˆZ—:8Ò硎9Nÿ]c—Å‘Ö0á\4¯ }ªÓ<5¼hT7ôVÍXÆ ”aPòŒ-Â?OiK¨—«Ë³q;>çtŠåCT/v•õ&Æ¿o~¬>U:8ŽÝ.N%XÞHÒîƒe¯sG"NAE)7‘eÙÁq./??Èt¦øih¶ëñ†IœáÕRñ¯ãÀ×Iç±íÏ0µmÛÐfC/¯÷×ùˆGí:x 0³†×I•±•žµëü<…™wެ®©)›Í!áëÏ'BÌ|_Äãn¥nùÀìMդ”ݷQiyPfŒè$…B‡"§ ¥~ð:~áüý‚g°Y¯”‰×1dú¼àÑ1àÅ¡J¶c 2(3Cè´Ïç»íW !šêÏó÷mµ7¼Luu}>ÎXæÍ#²Ù:8¦?z3ys §ÿü¿þÿ¨.>_¼^o’v]â­t±žwÙ»)U¸,Œ¶ÌýV±xô>ÐÚÀ¯?8–è:ÌÃq±木õ†÷¤kæ´q|âùð×ÚBÀ}]Ø÷ÞQñûë {ÚpÕûá1ýü«/Ì$]ùâM“¦nÛÀ”@1PÕäœ]”•œ™÷ЉnUS)1&ˆ§ŠÊ‰#÷ëú|á­ÐƒUeš‚(ú€ËôÖ[¢ì°Õ†×ë…Ó\ª¬Æ ¯2-l¦ÂI´ñOCÞØV–óƒj1túœ4EAŠvÀ9*]t ¾±¥…Ux< ?œä¯ýë<áSÀÊWS-TŠ£Ê>f瓆(àóù˜åÅ#‡Þ'^¯ çy"ç/†‹˜­“t ^àÇëM*Ûñ‚Àã¾?ð><8UË÷`@9±ud¬«]`¿+Ⲧ!ϯW“¸yᘠŽÎaç×®Ãà¶ìþyŸˆ[YP ‹²Q“ùµmì@ið].âôM¨çAu £5L§Àdt®Þô΃bLªþŽ×þŒ©Ú»áY]>¤qÝ•žp<sÂh¼€W‚Þu]|—|À˜TšµÊçÓ…­ä9åׯŸËR®‰{ò@¶=ãª1&øàQê×è…ê“ïPµsŸC/FjÖÉ=‘öŸ<}O_ó}^Àä³pY¸Øºü@ÊÙš<˜¸ËÐõ‹ l/À$[»¤mÜé iWCzmXÿFçÄõu² ò–E?‡…éMÔÂp%Uµèe±8z„T¶m‡‡Gé”I¯Ñ-Öó'‚cßðù|æÓ-ðqÁÁEppp‘U%.)D^ûν—óÁb ö}ÃuWËVHyC­ –Å#@© ûž1:xŽÃ0/J⃠Ù3u’°S¾Ë€c\›ý2äÿüßþ*Î#ùˆëdèQ­…f8kŸ¦’fIèã?*-Ɯطw¹qlL’[j—m‹P|}¾œ·#2™ã8‹ls ð0fêÜbóBs³brŒ3L6FylÞ­z§úáóùÂñzÙ¤3eOÇÁËìÑ<8*HrL¬]@9¿†RÚ6ÔÏ8÷=:ñÀ¶e¤¸ãëóÄbL%änÊ{kœcƒÃÓ­ë"öà¯óÈ9V‡PE-ŒFåi>1&œ%š&†:¨¸§“ðð¶ê}›Êähnù%ðd\ð¾ã !?º/‘çìF­]KàïçJ¾[zÞa‰}Âe‰Á^à‘Ž€Ï¿ù¢ó×RÏ<<ò±q‡vW¤=c´ÎÎlvsGÛE18ËåXÅT(ö³œ³-ôò¶óE‘@¯Ä¤ï¶nÅC‡:…÷ÛæñùúBJ;Tó²Ð#bÎqûþ"4Ñýã9ƒn”[ª"å¼MÅûSúËÁ”éÁ´ÙÑÊõ\F”Ä¿3qŸ7 ]!Ø6η J`tno,luš ÆL¿Ž¹ÅâzZï8öŸÏ‡XnPú9”„ßãþzAÛD¹Nä×¥œÜ·t’yke÷±~öW)mˆq§¼ÞFyÛ-ÝR]Â}}Uáçó›ô86âZ+¼D¤}Ç4Y-/î_ïRˆý±L›1€npjŽ÷e;ç™9©6#¬EÝyŸØR6¼}b —°p™SŒ"xàOÅëØéó 'ÈœöÞÓ”Êe?Ÿã-Gs®½w&ž'G»^|Àm“†i(Åc¨EŒ§pÁó~§ªÜcíÛÅÀyìÊÈ;ƒÔö¼¡BÊ2c+ð9OäcÇlÃRcݲ qĺN'î½OWW”+{¡”]þ‹ÿöÔRL9“iI‰xòn?﹬†¡àÂ’¨‰u³’^ÉÖlÎzC«üÑ'%¶&ëm“¡?} !xÜÅÃ6šâÈ£k…rÛñþG¨°¿_¨å‚ó ½“¤¹*qr hRºÛï“eû²žÀPt[Èûä,„æ‚ø„a8gŽ)žÓ“Ëݙ΀û>˜EèÛðæ¤Ì‹æ3 ߨód¬¨V÷Ì,9¿w1Á™’CtÚÅI#Uˆd•µF×ÿv¼ù{®KSƒÈygæJ»Í`WL]uà¼>æ§9pŸ4€IàEï…£ˆ©Ž{•Ï¿åN£Ül‹ëwŽ@²Çh…9°èXåL;§Œˆ19k‡ÂC˜ñÁRIi+ð–WT*óìsˆÄ¢ƒÐU.¦=rÊpªø”0„1³q£#ÞäëÓá6é›8ê˜c"L­Ü'¶¼=&9î øÃgb[@-7ömÇeÿI>õïmÒž’Cl¹Gĸǖò_DrÎÑáÁj!zˆ¿Dp}n쯥}GF+ {>ÈÎi1ï‘\šëú®£mÆœÏa°ßQ¢JM‹bÎЮsEÒ ò–ÙM褺J8vZŸèÑ©10PœÆJk|3Õä_ÌyšËVÆÇ$Žš˜™A¼þÒÞÑ;ÌÎ.kUÅ(s,\Î"ÆÒÀ:jg<ëHÛÆB%©šSŽÌûlØ3;ÕŽv7¨sxí¿v™œù?›‰7Ôv±Ê3ùjŽîz‚(‚ÞèϨ•ö…œHtˆÞẋíUÇ£êŠ>S Óš…ÕKWå³>‹÷ý@o•adCq— ÿù¢$¡Ç çuaeÔo[|ÒTí¦§°/2ùƒìÑ+¿0…ê0XpV­4‚«¼¶Ýèè|o’‹€ŸPá˜nK†×ùÁûõ‹bq•Öý#ÿðŸþ¿•ž oÎeÞÆsPz)ö˜‹lq³ƒzàS>Ø·’s¸Ê1ñ¸wl#Ô]¢Úr3ˆPg‹D¦kW¨§3E.|ÝÊÒ€÷›9@©!Ï9c¶Ž#å¾§õíüU(öD·èž˜E2GGë¯÷¸.^`t‚ÂÚn.¯ÏeJŒ‰jid³7Äb„#Uë}¡ÿLY;¬3ñÂ.LE3è™Y¸T<Øõ¼ýB©æN‹ážv›1çEŒEN¬ú‚x\õbjáð)à¼N8Oè\Ç@@@Ú#J-Ø×SuiÓ¦;ePQ-7®ÕWXðüœx½h\k³¡×fR@Ó†c?¾;­ ·ŠW>¸Ÿˆw–ü圣ö^œ)>¢j¨]ºçó °E;¾G.¸–üFñh8|B!ýÜ5@=—ZKüæÆ4Ò¨äÌü…V/bì†Ý:Ä=¦Ò Šw¼ß8?&Ó=ã1<òÁ`.á§Þâ4CôÜ9¨ÂéÀþúƒ@;ï—‹˜»ñ†ÔñgáE0'çí}¶?1ᔑ®\H^Ù*ùYÎ;Ã/YºŸ££ß‰G²<ölrìëâ²5o/ôÚ1G…ßz-tÈÛ Ï¢Až…j¹/¼Ž¥˜ÇŽzqµÈÁS2‡Ã³#RÒ†·ì(¼8K¼„­y&U3û ÕrZúhØŽƒñ(õDŠÙâ”=<€«vYÊqÌÊÓSŸÊg,Æ åº°½ÌÚ0XuƒËú”â÷XË9xC`ôÁ 1Ÿ)®pâL q<]kž˜ÚÚ<Ë|1#'Ãͮﱆó'l.DÄæ›ã]"Fº<ÕäÒOYõÐvëÝV›NY3~ •¬0î£~4i†S‰‘Toç:¹äŽ1Ùe;)(³¿E`c5ǯ³Uˆ¨ÅAxeje½ÎgÏæ=å¹ðåü°³²¥²¨<ª*>ïž:ºyCH|œ Øsü9O8PŒáB@½èå8Ž7# Jƒó@JT~½^ïGZ{–)gxJ¹1¦bK$I_׉´í¸¯ßHá€s1ç4ôÞÉ Fkx|‡ñŽƒ;§R)sÞ¶m2#¤ ’§·p• )mðÂì!ÄÃ`:\å,ª äïþùÿ¢Îˆµ1|oÞ!8ˆ&[VŽ\äï¦èñìZÖ èŒdé)œÛ¶A¦ +«ŠÛØ[.r€è‚‘„ã@ Ú¶sœòïØ¥-ÑTgQ­2¸µ¾ïÞy«nžb& ÎG^»ICñ}¤++yª‘h0[év¬õw·Švîa¦³›f®\〠T@µ6Ñ1E±ïzFm…ÍýŸwí‘@?÷'€àC…&7Ðüz½ð9CÄ?èåuQÈ9öjá×ì5§d!Ed`íÇ ³LÜã²Ë‘ÿŸóAåŽ]) ]Dáç2²JKNdž9!Ö|PÁöÚ¡CÉ´y{1 OA?†}ׂïáÏ41æNÒã0_bήû nx¨£#˜Ð¹ø0¯(R ï@DS°ˆâŽÒ öíÀU ¬/Ÿþ©òÍ?H"ÁúvìvÂ\š3¦E§2ï"„œvSù)0'ÎrI•ÀAoJ±ÙI©n“¶PGŒmߟ±¡Èx{J0ÃùØù¼?È~C³p³˜Œj<&RŠd·Íu‹|Ýíá·ïÆQ1H¬…­ŸÉ;ɘ2™~ÕooŽ)Îd·ª`d²7JÀš_ J ÔçmtfÏ}¤ ÕÆ·M_‡Zì°bm{Gë&WfÎÇ ¼3ïèˆp1Ȩ<2o/\Ÿ/ˆ0(ÎÙÃ+ÊÏÐÛ¨šª?+Ü “BBéët&¿æ™àÍ@{lÚ ˜†¨$Eˆî[舉³È`vz°RbxØIŸMLÑy|î‹ûË8“…¨Ø„R"?‰±ùãý ÍvÖçõhÀö+£×Ž`rr”Ñ¢4Ò‚ü4/ŠÚ]0À­è&èJ;Ì«|ó ÑS(ÿäŸý+…çuâ8œ¥ÀØófm;å›uvŒ>¡hé¨Ö*ÇvàS¬ý9&8—q—‹Ê…1!ÁA”>U”z?¥N "µ4Ç€<šd”dNÓ1&´æ–r”íè°Š„3;ä±XTTm*E• Œ!¯ý@L‹#A”lž9–šapñ”ÎCqÆäœÖ9Î?³-ˆ§2Óƒò¸7ïpV§µó›Á$/P:¾$#ãN9ÞFÿNÇ3ß‹Sš1cG«v9ötŠ ÎëCÝ»ù¶ƒÑ©>vqâŒ*¼#xOÆÿ86ºT§˜jÊñ¡-•øìc;p—>FfÒ¯1˜±.GoðÂEmlq/Έy¥ªæëif £W‡€þ\¤2 ¼î/Çp°òÀ mèì° eÛ^T8¢¬wa>ýu{aÏãè.xxg̲JQF›·)²=0(!î4÷Á°åŽŒ¦"BJ&½\¼’ îZ­Ó#agãîLÔ“ñz“wäiB¤ª¬ÑqîY´Œ^é¿biÔ t.两¢Æã>yßp~]6æ.dôÎîj4W@D‘·Ã28Hƒ.çÉ…ìú¦Çó©gfäynGoØ_æ„û)»®}?LÜÆ”R"%½+r–;Gò/(dX’ó=Eƒ£Øó>q/\…9AÞlœt(ÎóËò†h& ž#ù`ÝœªRæ »Ó5‰ùÊoŸØwšýúTì9áºø3c `äB;f|ÎÏ·@F¿Õä˜@Ú’»•ÀËÏçD d…Á{ò÷^ÜsðàpAp'6C°@bŠ\’;a,‚Iÿù‡:—è;š!ñœ¦9œ1Ý!x@<’“ïg0N·\•9Cs§öœF'$?œ×olÛ›yF ÊßTW9M§N'ªsL Œ!0{÷戀ÔfÏŠÜ RÈñ(僔w8çIúÍ\ _ç ï13%¦¯‚¡w¹‘ó‡Z ç…J¨Ÿš™¬–™#Á'ŽAÎs©J1§b?8Þq^LŪÐ!Ì'H$Ÿ¯/^4¦šb4+ÑÎSþæDx8C ês> EV¬Üj/ØÒÕþèþßoSO”†¸‘(\@ëTþ¬†Š`V¾¦uRV]DëãQ‰ãA¶Yj^¹/k$ct¼^¯§Ú;¯ßØ ¥À6}RUg‹kvˆ!ÐR€ëºWÁ¹Ú@×û…¯¯rÚà¼Ç}Ñèx·Ç¨çŒ„Z:½ëbOæS ‘äÊvo^‚*ÄòÎtýÞKís‡y‚§î=¦g<ÅlHº-ì'à#R ögä}34G>ÁEÓ¶óç·d¼ÎûGÑ%æÔŸJ‡»4yú"g{qxÔE)eˆs&·…¿èlGb·ìˆøòǼ¡ŠÑHæÏëÄlÓXgËø©Ð¦¥xaãæƒG+,ý·œvÛ2bÜ2—ªR¥sÂÇ Ó~âNÑaqž_È™´¦Þí6öh£!xÏèåØˆ>&ÊTuLŽêVƒ-*ôˆìù`' ŠR+±BŸ ûkÇ]ë3’^rÞÖ*ĘPMѱ½^(7/„1mjb6L…6{²¢¥§®`,lt´`ÿd0õìqb>—ö*zKÌý¶n³°¥ª¹â9zóÄ©æH7ò©(‚DøHœsÜß`¬S‰c}þèv„Ê0‹³ÀÝ®çP>l·àE0;•€Þ{\× ‘%Zà¥:‚Þ êMó¤ÌoPŸƒÐÙà&ÌkQb¦¾ß2¿§r®ÝZÇql¨×E73„ª¡Þ ˜K¹Š}Û0»¾à‰Z¸öàÁ?ÌuÂÆC²5¸-6æÀ)"7™·-â½Ï‘%Ÿs`OûsØ)‚cüê‚OÎYÌiîŸqï–3FŸ;úHrE¯˜Sp¼·ç’˜“EâqdºÌ+/˜#¦A(³˜è•ûÅQ»…­ñ0 âpWF¯Ý#`ɍм)¿ïoÜõ"¹8ecæÉs£‘õ5÷z»9 j:;BØž]á] rJô§•†ãµãëó÷¤_gŸ€à0 c¤³ÃoâB¸7˜eº” !%ôÚb„O â÷ù…ýøÅÜ|)w¹áœ#)¸4¸Ä=‰¨ 81µpª˜õض ×]H»vŽ™Y"Õ±9&^ }Nä@SL”m*¸É™ Õóü‚‹ ›Ñ#¯‹œçèæ¬½ñ>¨Lùýù}BiåäÛJÔPÓ!D²©ÌèæÍõBBL¤?FïQ7ÿ‹;3T1g·½(¸¼÷Ô2îàF­ÑI.À”‰ûjó '10 Xå'Æ3†áïçZœ|âwQ<¸dW%Ù8î;zkÈÛö,‰9-‹PŒ'¼É=-¼ev—9çg.RäÒÚö+uMØŽ ~µܽâ¯ÿê¦NœŸûïéè¨Ãb2Uhj²t>ɨsÒìgÛWuú”’ß&B¢!à2X û'@)Ä×Êléi#?Ñ€|$’]­ãyÖÝ1ØŒãqò$=®¿ÄZ¸²<Ä9ÛÉÈã”&~…]̈́ۊ{­˜˜ÍÎJÖ ™€¹.8v…+ïDÅï÷¼uIæ!˜fúL‰1·½s©½¼s.=•ƒ1$\æ°ï6n)å6C™Ñ†M®ìªhïÄo‚G3™x¥¾wÏ]QZ±¯™#›nJÀÕÁ,©·÷)ôZ-¹3a óBàgÚîº\±$KKç¾ÐÆ®­aYŸ«¦Ú !¢– 1'Äq}®gç©SŸ‹KEاí‘H}^&8çù5(¨ ÓÎÓ4somá÷Ëçpäj»(½\õÛöÆ´ïrÙ³ÏÀµ»^ÜŸMÀ'ˢщ×ÁΡ þÙúð¸äQ®®weZ˜ØšeùȽ 9l)aLÁ}ôÇÜŸý1bDŒŸÏIÑÊèŒûC“çÄ]þÂF€—X¿ñý†Mäü‚÷‰qzÀ˜á|ÁÓ|CÄyÝŒ“(ì¹Ïv–Ç´a£ÒÿËÿãÒ«Þ†+`'²¿^Ê|šù®>í/!Z!=1;31†å(Cø’çœYÝnœ“yQ)c‰vûñÆ}Ýü(,? ³#ò:öãEtÀ(ˆž2Û6Òú3`‹NÇ%„sÛûYyÑÌZ1=ý˹é=å|mx˜„­é¨Ær ¢·ðÝl+WvÆ3ïY å i²¶Û;Êãok¯–e­æ±àÅ ±ÉÉ{´1¿w†'dh;^@¸ ±¯6Ú€×ébxà—cÇži8sÎDT¾¬y•NÁ¹gu]ï†ýØTþÀÌ÷®pMÆuD.ß7â®ó2ú© âá8²r ÷Ô­±„gEª“bû윮VmØ¿ï¼8¦I…Ž… ]iœÄƒgñHÁ³Rô1ÒŒÉz"Ú¼®M÷ ßc4ÞÙpÊåjÈL( !RÜÑ9ÚMÆ‹|hGÎ/ŒV->¶ É< bØ7Ñ®B Dó¯\r뤼xÔÆCØ™VÄ!:B” ‹x@;ÝÂ{F«Š9šM“.ÏñƒLû}™¿Rf(Õ’e:Øe6zƒ6ÅöbŠ—° !rŸäáIûôIøc Î S9RŽ®@p !q„æ<•nËqÝj!*dý uÆDÞÔÞ»g6;c~OO!ÿ$9ÒF27‰ÍŠ}£Éù®ôølÇR¹ûãxí[L³TcÞYP•Ù`© Ç¢Ó Þ¯—ñü>&nqO6  fþcŠcê`*ÃÎŒ’ë¢r±4ø`¬®Öð>œ'‘59E¾[)!øAÇþÂYnl9ã¾-æ7zø ]ŸâJ„ÙFk&®Ž>k'=FÌ}O)c´fݹ"çÝ|€É"ªþËö?ë€"Š%X9~à½Ó$è N¢ñiÌà:¯Ç1¾‚.öý@©mÜp@‘Ý×Íyóz¨»ýP¼ 4£…mâó æ`Ú™žF¬lÀ4t>ÈÚâÆ±X½/„œ‹µí}0pj» ˆDÖºÆÌ tvØÍÞ­‹0œ·*$ ´Ñõ}}¾°¿9®ñÑc”ÁJ×*õ×ñ²Ãžóàí8,Ó€ÔÝ”2®Ï ÅôõÚ€í×Ë•„ü™5;^Õá9òcFkc6ºäÅì‘/à”Ñ‘·DPdˆDÕxÏîÇToÌñpÞ“¡S œL8 ñ’1ÌÞ™Øj¿Èr’ýõëaæÜ÷…7ØÜไœ#÷i ‚,[kß/Üj㠨ׅ¸¿ Ρ^!ëŒi«CÇxJÓ†r}¬êuôKôïÇlOt¤ýÜö-£ÕaÁB ªíyH–› Ko#)¹â³Q©4&Q8^,8 sºv>g!f~}>{-fšèØ[è̀ï£1÷!0ø(ÛHàφ)Òw¹‰ÙvòŒÊFW2çB`f¼cnG>ˆÉä€xp¦¹³¹+òNéU òÆËëþœÌrÀ}O‚]kÍ"¤¡œcÐ;aÉÝFž¼tÙíp¬E²c€}ðVMh+ZÁé˜C®R&ziÛ&½ŒNÕ[ÚJ¹áBÀ–7ÌN¨jgŽMÜl=1zÅ–w|®GÞQû޼sáož‘Ò}oS{ }ð¸Î‹Ëz1à娵pÈ)?þ£Z œòÂ:Þ;mÏPhƒñ­T‚jCD ÜÑrÕÀ€Þ*Ä“.BˆÝWž1Ž†Þ”6tmØÃŽé'<3ÔE·ô€SzëO‰à¼/Ŗ î°ÚìO¦ÿ›¿ýÏþT+ù³Þð)šrÉ㽓3»#bL†\ÏåžûûÅDÃ9©ÄÚ²=äû±Áy‡Z9G;v:L÷Èy³—„óD£3liE.zO—rëŽëxí»4ÁŒÞˆÏp{Þp·ÛèªÄ¡§mcê 9ß×R6jX!KÎŒs:€ý×/|~ŽpREíÇûx$Ä*däìÇŽœ²IF é&MœƒIŒ!DÄð¹>ð†Ï–1,ëè­Úg©æÇÜc{mˆ›–±Âlçfè……†væÅ36öù8öz¿àÔ¡ôj>~ÞÄ”‘³TÆ .Ý'èTÔQxQÌArªV@Z¿3!±MÝ3ç@+7M¸!`%ÿ9ç°í DZÃGÿø‡zïð‘ÝÉ}.á¼NÌÞÑuÒ !ìwd6F<^ýrÎ¥á{l)ã*z«¨sXr''#þßÿÿ“? ƒ*—Ñ:b k(„ˆ::F­È9!„HÙéär4'ç¢÷\*ƒªÝšµ¯Åçs"mÉ{\Ÿ/„È¥£gé~…ë6Otð9aϪ±%õÊ¿>'¼%Š=ç…¸Á4•ùÁ\ÑGb<ƒù 0—i¤ ªç‡0˜åFiåQv=vjg÷Ók!QT9zi•™·¡¬½sˆ?ˉ‰×þ¢üðºl‚Ä kL<êïxíu±M¬äµ•”7'¿öÓs)5Ë•_T^A¼…ÐLŒÙÐÛ´…9UpÌ ·Ã˜œ5›)l¹¦Çh.sfn¦—`.ÝÊßG2¦"R!þB9ËU ,Y™Øwt {k4~ÙŽ‹6A¯­ÛLàÕð“D‚^™*gÔÔöMÕ p[Üá¼G<"D=ú(ð.‘«5j¹éÇ`ˇ9YqŽÞ¡BÈh:ËX¨pÔØ;/°i.÷Þ[`þûè1ÒœZÊR j©™upŽë¥ôAN÷ýÁ¥ÝhµrÆ-ç×s(|–G#BÆ‹‡zÅkÛàÄamÐJ‡8Eïc Ô»`Û‚…#«»\ÌóQ„òa3D^×…}ßL‚/È1rD$&}÷] m/|߯æ9ñ¨– ´Ø_kìך!Mæ@È ÑGC°³ã!P,0ŠÎoR@£Ž{¨Þ àmfJªœ’Å'{k|#úìh­`ªÒß0ÕL}—uJ>pW4¡Hg·¶å ÙG¨#Е“ú&®rÁ'Sœ# RJh¥"xk§Ä¿Ü'jí”JŒÉƒìdÿú¯þÀ¨…)ïæÏR½µf9< @ÑA•FK« h} ÚîÑ nbÛ7ļ‘žEÌ¥W”ÒP{a±WÕç`Ñà­ ô‰¼e’1¼ƒÿ›ÿè?ý\µ Y¥Ô,ã.Æ-cbÌõtžÁ%§˜üoš‘ËêÁéOšLToÕ'• µ°U.§>îhï8KŸ Æ>#µ>¨Š²}‚Øâ¼Í7)†f°Ï‹ç,͉£u¸hò­ÉC«[v3©6Î<óbfL "òà>څĪ=gÆ~Š.Tw$” öc§×%'dêŒnQºàryu\ÌuÉ›[í= ˆ>=³à µ þÞNøÙ‹º ´dk ^J˜„ZÄ nbù"i hKæ˜3? ÏË^ Ziè¶$ΣÓçâçÿN¨æ`Ë™»½Ö-ði"ø çbLÌÒ¨Çë@JFôh“qã P 1aÿÂèÚH~õR”’ÇëͫކïÏVD˜ï!ÎsÄ:ô!÷~¾¾ÐgC¹ ‚O¦îá #%Ÿ!òÀ®7ñÃ~~>yä¸Ù„2 Æ4÷2,£[ǽƒ÷‘© PxøÈ0µQ:Ò±aV²ªœßK{GNX5ß’ ‚^éÎoµX¢&wÓ¸X¶5ƪæÔž_µÏFMNÐj¡O,$.¨mÏ“bDLê= ã9CÀ°åó¶Pó=d(ûHf\í„z:q÷ìýÆàDã{ÉŸÐ •î{c(bHT­vóAÚ;£cT†N+F”¹ó9!ç„—Ø^o„SƘŠ#ÒFdʶmNµŽ}ò=¿µbï•’ñv¤CÎ!ç>%„œàƒC·VUʱ_¿ˆr±3Ê;ù»ñ¯µ V±ëÐq+´\ŒÖN³LW©l½·üD–“@B¸>'ö÷ m4´«àxè]=U?1Pj½ÃY.‚Ç„‹ çïß8^oÎeKaok­ýÌ0VÌ®\ª‚‹Áõu~>ŒŠ}½Þ¸ï“Yå]!< )}…¢œYÙ¸X»K1~Ç&?Çýa-Œ<ç^¼É±!ªOƒðÁJ¦AåC)NHU­7†ÖЧR¢×öã ¬ÑþÜ‚e,¯ŽÄ÷pðŒÑã!/xÀt^H.vb€ÍA)†Hñ@)_ð~CÚn®®€”âiI–í¾M>OÖÕìœ R Äï˜Ìý¾/ 8$Y”µñ ï"F`§³.™¡Kż%cÜÀ$ó*Æ„>óPz…³ ÀT!…ãÅ%ÀÊÂÀ©Ïçcé™ÌÖñ.¢¯]A$¦)9‡fŠMrÞ¨îSÛ…M+ªfohj™"&›çl·ÌÍ=°"EÒ1Š‘m[ÃñZ’}¡@=/æ´¿^8Ïûq‹§ŠQ„(…6*–Oä…ËvÐúºtMˆáèeI1 ÖF•\ëØÅ4 dAø9OÛÿ:ìûŽóºpäŒ:ˆEñÁòlÒ¯D;þ»ùï?üOþä+éÙj)¨…­Ì¶3Õ½£\•¹ –·PmA<9-­UL% Oƒ›îRˆT; .’™ &ËX-Q¢L¡Õ{W->ùòuË(Ž•´Ž®në&RÚà=U,sX²žŽã 2) ÎóÄñëM‡ko€en1LøÂ'P#¶cÊ‘mŸ!ªH{æ,[;¡à~ÑY‡]Rä õQ͵] TtX—z='.ù'çõ6Â[·™“ùŒ¼TÌî`Ù”…Sͺ!Ћ‰øØÁrÀË}Ùèd ·‰Ön´Ñ¹¸kݸIΔmÎ^ªæ´v{ØXÍqì—|BŸ©Ì®Pg {s-¶ù3ÇäX‡ã&Páe1µ€@lQà[m¥\v,ˆœ˜Ï¨= ÊU<“‰Nv&S;wpkÉFå>¶cÇhÖ9Lj1Ç#s²kì;g*1ÇýÕœµ»êº6li§°4ôNI¸B™i#VSS Qz«BpHyãe«ì°Fo8Ï“è(~ýzÁ‰‡Oìz٨.xôÙÌçøûˆgÞ¸2ƒ†©kù*8^o„è罄ɋÁâóy®¶m·—¹Á»o3âTò¨ZÃf^%ï˜×žCDÍÚàRĨ >%Ä”¡“^’Þ8º#ò–ÏÆ÷üïò‘ÍyNÑØmÖ Ç”0ÆDÞ7ŒVè±o‰Ùꃜcßét÷bûNJ†uNt³qåyUGµ‹"›á–$ì^*‚”6&RLu˜¶¯I‰4ÞFU~:Sf†‹Ÿ‚ ¸>'±G‘v…Ù)ó¿ï›è˜ÆÐª:z½iYÈ™D]-rÃ3*)3TЦoÆ 8Ï÷Â9ApeÐÄ;A:GN!E8'ô¨d¾ÃÎ-p*óÏu*úßɯsùôþßÿßý§qH>ÀYlkÞl/JË\ˆT˜·ÉêÑEy`Î1°å„”RfŠaJ;M†:!“:î·Çi¹æ°C;Ä{„H‡*ðþõ2„ƒ¢ŒŽ=oËwÛv¢–†:qÏrÜ 0jGÚ7.ÅX˜!˜–&à‹Fy¦é”˜Æ”ìBšð!Bás´™TV‘%¦ÁEˆ:ÆîºÈñsœS+/X÷ø,¼KÏÏDŒDb¶4Ç„¡&ƒMcTôQ͈e3`DZ^òñ/: 8 J„sþ‰Lyvår%‹8v¾Ë² ˆ~ËÀÈ@2 q¶¾ŒŸ*ú„U9ïp¼_¤È¾v“T‡©uY‚Ç(ÝLülsÊDé‡ÈVæó¿.r)ÄaÁϹTì¶â¨i…âñ ‹¤÷ÃÒ<¹Ÿãþ÷Úòü0º¡–F¡³°²äñë×_! `zŽg1ñ9®•òk£i[)h2bgÊÂV úضŒëü@•xûr]Œ­^”‰ž' J…œ£*mý@í0âla·vZÔëbV-y-2-„«uôÆgæÏÛf92ŽDfu·fD4u'ßÏiä‡ò)-äí€âl˜‘å°o™ÆSq$ÝfÎÐIj>”hŸ{J90™Š›ûâ>3%Ùí1ÉB<ýgŸûD¯ yg¼÷õ9M9 ^hæ¨,È£‹PBøá„‚ƒ5¶ž“;1!›[JF q! y»PsUŠ j½Ñ'»¶eð>öµUFëºÈý±È1Óð¬ŽcqçQ+á³ ÉíðŽŠ1…>cÌ2÷¬Î!Ú|* ÿå?ÿ_ÔYk}„x»œH1²Š¥X‹ãVåN侄Ç-öíÀ×ý›„Ç×N»yÇðõ¢æxŽoˆûüàx3é:?ˆiCŸtz Èh:ö‹ÝVé:àº/¤1ZÅ4VÔP‚Ú|à‹,êHš¼. œ´(KùàÙ±„Ÿ|¶Ðæß˜æ–5Ô¶¸¯ÓBtw£ƒÂü Œí„=£Þͤ¬ZbJ¦/çCU ³?ÔXa½ODo Cep˰´À9ï×ñð{¬ àè©6Ó11xi!O¦30ú´œnØvš+Gëdny¦Ôy ,šs"ù„«†ÿ`æ›eìjàaÃ&=/0äÊ\Ç#‚ânƒÊ9ÅZd†—qÉÏiª|ukXFœsÁ¾”×:ÛµÐ[ÀÅ*?Ï•üf~»ÈúlðŒv Y‰Û_¥òåÚ÷Œsí–‹RÕ ©%j°œN¨—Í¥ìTúŠci(†ò0?ö„ÓȺ[Þpv>póéDöíeª.eTp½Â# GuìÛçç‡æ·Û2eÔÌ—Þ{@Å g÷Ó ˆc²ðzí$*8<žªÙ; $.¨Múì…`ñ²Àzg|våžãÇîˆØè³?F@õbŠÜ‹Aa‹[bRSUTS+r¢1ò^Ç ¥Þ6Aìc`OÜÙ¥q[äÀ¾í¸î {Þ­G_—VXU““…#†6ô2q¼vr¯,=±ôJñ=’½±­ÜrÆçäÏàõ:ðûë ¯×‹ü¬VÏ?óµ/8ÍQ€IDAT/^¼PJ¡IXæóÃLÂ&׎»±+Úv’”]+öá>²³ó*ߨ™ìŽlH¼Æ¯ÞyæÕcÂ{^ÞqK,J pŽg,ŸË >D*jm7ÔzÃ2Ô+zŸ”ñ¶VG]öTš|rÚ‘bBŠüÏ»%nÎ%„À঩qß¼^o¶}ÎaöI‚~w¼ŽÎØú ¼—ó¾SÊp) dÆ\úmq¿‘$šRûÝZEØØÀ;x$ƒ3:¼_¦D°,xo㩧ވÃ=÷ÁÛ2Y–ñ\>¹ž7,[\ ©¹'u‰mr¦7Ūº÷ãØÙfFǦ*Ø0b°÷¬€¼£IrPΜ·Í‚¡:e­ž½‡¨ãáe‰~Çñ‹x{‘Ex˜®¼eïh¦âÃ>¡dl.çì…·¬ htµöÃäÕ ]†u*Dž¬ìs·‚ˆú€óñ‘pŠgl«NÅË”_üºÂ7½U‚z¨_’[ù Oƒ›‘ßçç,Á›ŒSÌ;Â_›ÂŽgj³_þ'ÿž F*á¾{sïëZN{l3³{oh£áØÔzqß"*Ä ‰:¾‘æKÇDþ½f-LãRçµÈÐT=‰NLg¦Gýf‰¥è©õWÐp~¸ÀÖ£œÌ3òÂuŸ“þ¼NÌÁ¢£ëÄû×GÚq¼_flè­ Uªh†1äœ÷p}Ѫ)ÍžƒEaŠ›…#%S³y„-#û „€>*rÚøó3Ùk³pq‚óu¬ ~ƒfZ¦)d’E,=Ô£Ü㦜ù܈C5E¥˜èΣÜ7—½ÞÁÛôÂ9f»»ÆÕmßmIÑKùÞs ãØ8‡#dx¼ôZžQ¾öi»` ]®ëÂì”9I˜ak i ô¦ØÈGœ ×Ê¥½¹½SHvI5”R÷íó1÷­8`åÔ ›")“QÞœÎrÂÅŒà‚j)(Ñ¿_çZ£×«µèåÙéD—L9昪¢–rªBÄçúp’jip! +»oÿ÷ÿæoÿ”cBˆ«Üˆ!¼Ò¼¢È)Ð=fk&÷DroAíŸÄìû—,|É™ $÷N!ê†A±Ë˜ dÎ?¸o±¹®(Ø€'?`¹¼‰KÁ7WªÏgþÞgG93Ä’P\*ÙX$§ z«–ú6¨_·XßvsOM³-^¾fS™K=ÚcvcžIªôo "Øá)ø!X¾·D"“ç"ìFÄDW¬˜*ć`ËòÉìä1°bxu©¡çÏÇþ¦\W»]¤ß †K–´Ê%8‚1¯¸Sâü#o&fèàEǸÔÈ_ÿØ:xä¼Ó0‰ÎÂ:<ˆÀûôìLœx;ÑÉZÒõkœ¡íZ}03%@Yå«s8ò›F²×›j½5SÏ;àÝCˆ]p5!ÅT}Ævκ5¥¡x¡ ÝûÇç³F’ôž,‘Èx|#KÉ5ç@Úhš#Õø°wh’4›"…α »™v•ßè…¦×nJ£W: â0*wÎv€ãn˜­£[5ž7²Œ«H)!® ©®,€loÖZAŽD+õGÙ¸ë0f×ñ:ÐÌ»Ò[EÌJ9±/¸ÀhÈŒC¦$˜;Ã`ïg‹ql;T<({eGJϘüzZíö¹tôd£òúäáè&º`"i¶i®7ÂABo)$´ÙQî‚3öÄ‘x+…h“f¯¥ú¾ïBrÈÂñOCÉDá“`“Ï$-;^¢ÎD [ ¢Éù€c;à”c@B<×äïþù¿Öû:±¿ßÏñÓö 2žÜø§LØË)áSNûwDDÇA™,½MN|zǶ¿þ"DžÞ‹V¾³"‡ ¥Ñ”–rÀõ¹ñÚÁ9 6š†ÖhL¦µÇ†qA\B-¼\„ÙâV,^V„aYC;ƒTÊ{ÈòžqÞ7až«²‡}Ûɪ1'õl‰wÛêÇUD³bð†í Âe©˜7ÂùÆœŠ×qÅU!tSÛÁ²‚\¼OiÚ?ß Ƀ‹û…5¶š˜“ʱ5PÚÉõqS™q? eÃæÚk|ç…Ýìôшzl¯ å®;̯s‚{'CÝŒ‹´¶°³šCž¯‹j0ŽŠ TèŠ?\ßi56í²^áŠ4%¾œYÝb¹1$ËIèF˜˜ Ç÷yC—€ÁŒÙà]6X Iv婘”^Jºò3¼üpñ«EóŠ%*[ ï3º«*-Õœê)G›e³ˆr>°£c4k ¤¼cÊÄh ­µ_£Ú… ì¯Ñ@¶kX9Êy۬ʟðÎzÅA¥ÄÁ?ÿÛÃ¥¸è£1?Bإܦb¸•#a8à‡ì¼wþ<ÎëÃ"dÌǤ™c"WK˜wB³âÀuܤ€œvóhLDQ®èáØrbFº8&•Ú¬kÚ^¢6+•£ez½Úˆ>sàsŸ¶$?ž}ý&þÙƒ¨lÛnr¾÷Þy¤”pÞ_xïGZ]Û€ç×)Y§ïÄ9Ü¥bË¥ ¤h±jøóãÅÎáü¶m6ŠV”Rp¼†·-ažoõ)Zéø6]˜¸KÅëà˜ß)¼™æx¡øÜ_H™S¤åîïæoŠ‘ž6ÓZ÷}ARˆˆÆB+7ý3.P!æPï‹çæßý?ÿµ:ïp'ÒvÀAáUЬ"“#ïJe6óèH2ûq Y L«”&³ìë˜Ø}4Ô»âØöC@©žg°O°ˆD—’-蓽A L:ÕnSŽ[üž€Á‘Åçú 7ÂÁÊ7‡lG;ÛãINÕG¢Ë†ß,l°ãßï_¸Ï“Éaõ¦Ik˸ÎB)§Íοq'ô=èÄúç«â^•§7¨=Ã.5ëj&X¬Ä«Úë©n½1ëÀæóæl1—p×Ó²;~³å®ZÖ9øçÚ[¾|øç à€Ñ«§"¥² [¸,)éj)mµ “ÎcÅT5ÍH§"ŠÅqÒGC)´~nBI¥A±à}BŒd5_\ÌÏ% Æ ¦¯͈dm ‚'¿pÄáÜL¿œà(É{y.hþù‚ãØñùóçéî$x¸9ÑWW:- fUѳlŽZëá°ûf %™Î­CÕÇJ$Pr(Ô'8¿NS£M{.œuÐ=²O£ÂûŒE)7 e! œÜ 0áðÆÛûd*ö”€0GÃ}ÞpâIv€6…O5Šç÷µ½èÞo…‡p·ì{N£mÖ»vßB²Öà¨&¥„)¤@蘙Š)ü3VÂÞ2ÓµÆdÓ»Þpp†mñ(×Ç*šo  Ù%€‹T-õ¡ðNðùü†‘ÒÕÏï÷mtôÚŒ£eÙ6> ¶bQ¦Jòççƒé—‰1á:/:Ü×¶Nøî2«¤bÏ‘'·-m3Ö}·å¨;(¦ˆí nf›Ì‰¡ o;×Zo¤D:ˆxª¯Ö‘â†1ê“ôoçUèÙp”µ§Äð¨ó& $p-Ñ;!¦äضW«Ø3ž÷ù±|ú ÿ7ÿûÿìO÷uZεÕÜèG´9mqþâ•LÉ!b‘S(ãÔ5âgï6ÿfÕC"F€¸˜«[ÒiXp]Ò>¡t8儴ܼwêÀèƒ5ž ×^ša°©6ÐÖ]ÄP®µÞ[£°– ƒúó9ùAE;XQé­uÔëÆÔ‰Ö›å/ÔÚmÉ kéÍ(çòflŸI|õ’º-‡»Ú¸iuy¤pج]¸\G_ï›9Ð…&£å!àÈGÈâ_* 4L.(¦÷¼ô]ÄÀ@kÎóçÁúíçP¥Ò¥•bûx*ëm{¡÷‚ä“u+õq¯?£¥'aXú]Ãbsw ù M“>ç¼Sfì乯œ‹&åfuí`6PúýHSÚ˜Æ/5Áô¶Aw}JÉ×$§räÄ%aï…Õ³pÜ—|D_*®ïïˆËO|ä¨:íÂYû¡÷x°jŽ˜â %‚B(µCÇ™i¬‘”PËV›aYðÈ™§¸w}}bD½ öc'ˆ3$ƒ6mø|>æå ÖD‚%­ûì­#¦ø¼{ÒªepÔóƒrªä”²Ù_ï7BvØ÷÷3ÌìwCé…Ÿ‡rȈ[²oÚʯŠÇP¯Y.<èiï=òþ‚‹|ÑRÌP0LH B ¶8wÖåÚkêÓ¸Œ1 ´ïH}PE¸HçßDÁ T^HÃl‘ÆÑŸÑ$‘ÀZ’C˜CïÈSAˆß—T4`aˆ âôáGyLL¤˜áä;wC”/éÚБ̯²ío‹*µ -ÓãÓ§¨Ü‚³øPeŽŒEçã –cOÌCÁìÜ8“J³¸«q¥Cýçî%lŒ[†ÏÙáBfC ùÉJÏy3µ“ÂÅÀ78"Z| ÷ñëቇQsí“ñTþ8uF5à’WE,[$œÎÁ;A×ɆNb^ì¥çmqfJ´5ó—Îkä„—°¨>3q'4£ªØPa‡±C¯Ï²ª¡Ï)åç©´ª.:óÅŒÁX[7¸—„NÄmGë…¥çû1×ÎÓ¢“ƒ·$Ì^ÐZÇ“|:¯cGˆÇë@ð:õqQ×N·9÷T±¥ï„»«¶¾â3\GÚ€%¡zÞèÏò‘iŠ:iru¦:Ìæ>‡¯÷›ÎëN÷{Èž\8K—i½bön#éÛ¾A¼`KtW/2’+URàDUÇ£z}ྠtp×Dp¢€Dç€nËk=ÉpúÛž1U ûß¿;LÎ}yZ)å$Ú3±Fd9mcÝoËïÖ;æ¤ñÏùHØãèH‘J?ú¡ø¥1ZÁÏuoýÏEœK  p^§Ñ±ùyrÊ¢Ø÷'LËôÿ¯ÿƒÎ9RÆTÎ4ËýË>ÛB§¡¼ú£3ç5еÃÃa yO½!â-€¤™e¡›¿¡‰œQó»® *ïmGWr€¶¼ñ–ïtÇÐGk¦Ïäñ:©‰ï­b¶Žñ` *uѰôºÖírãˆj!¶×ï# “>Æ„à÷hüÁöIÔ´Zô¦ÇûÏ×ǘ71¥öƒòÎq÷˜1‚G5ܖUv««½¬LåsO%LG) ØhxpÒÛ=Ä,MÀã\—ÀLä5R÷<ë—¬nÅ ’P:ÁTÁñÊ8?—Uè¶4ÿÿsõo½¶lYvÖú¸FÄœûdÑ¶Š¶HQMRЛÈ Ø@‘aÀ0 Š$Äý”üÅ6™{͈×î‡ÖG¬U>@UfžÌ³÷ÚsFŒÑ/­}ͱα˴…†Á‹Šb€ß±DªÖ`y êxéû Ÿë¤ÂoÛ¡pNq]7¦ ЉiôQU¶úß9ëDŸÅj Vá_8Ž_8-qRa J¥‰²÷µsYTÝãxÝÃÁ4Ä{x™èfL|òÙÇ@H³7 %•/¨™`—#=ÔΠ9øYòóúf…yç8ÂØxP’ŸfcIûs뜰–îFà~£|H\pœÂj›#>xÛLÊÆ£g$ooP?¡¹±±\2Wƒ0ª DôIç;ïË|3üáF·_Ç º¼öåíÎóð¯ ÕF ®Gã2è999JädÂ#ç…@wL¯4™vŒñ»˜p@iÇà€iÕÆ`<C´Œw(w±Ç†z7ä-â:olGÆç/'¶”ЕæQþÙ¸¢j©£–B\»*|!¢VúÈTi¬ø^¥ÓX8ÒžpŸ…]ÞôhÃ( &AÞ_½aöç欘ÖéÍT B'ÓS ݽÂ;B"½H1ö`Áâ¦ÑEVÁïýcr…*RÎP8t²Nå"?ç'w¹)tò´õüâ0±€–ö·ÿN·´ásQWÝ Á|¤¢!g”ëfθ2éíýëOø/ÿù?Ã{19åqÞ êMè]Þ6Þ°àþ¼NÞÞ£.¡•Ë@e ×ňÄ×ëEvQ`fG¹/㸰29ÃM…x¶WÄ%“¡C”qôÒõquJ «æ™ôL+3¦`:æ$÷ÑÄA|Âl¤‚jïPï ¤-ÃIDi—á¦t²Ú½¯ËÆ3?~‹u‘€æãïCž{À¨n)‘"¼£ªÁ[^qï°…º tÍçt ŒËÌ™áË@çƒ(˜¢¼ FG°¥¨XžÄ»ÈY´sL\KqßÞS\0:`#†¼oå€ðÆû¾Ÿ M–f}).Ø_;j᜕çE· !«lƒgðV:C>vôÊ  9;úœ¬¸ç|v$Ožü³0œJ _N;÷p6T³ 2›\àØB; Þí1O ÌqðêQÛmj9Væb£´˜2ç¿x¦X,€hÀú`ux0èä(g¬@5Ûñ¼Žî«`€#¯˜#BH\ìNÁšoç–5z,~bY9ôk0«¡FäØŽÉBàsf#Íj àúÜ·éÀëýB¹n xx Iëµh @„X¨2îÙÒ$·¼á¼.DO ÷iO¨'e³»5':¶|p1ëÚ(ðJ“òçË>ˆet[wU®bÉ–bcO ŠÇi—ŶíÜpªÒ>¿¿ *„iNïYD¹ùýñw»€[¹°o¿, €œ<Ãj£lÖRSäh¬ÌŽ=$”ÆÏ€z›1цŸnµ]zø‹¤Äƒ¾w^âÞ9Î Ú­šwÃ’6ÍÜ\î Ûþ”#?² GKÛØ…‰%. c'¦. *Çz:½]&βgµ5Â59z­YŒGJµÐ6†±Í¹FÍÜ{çàÿúü“?ÇÈj‰®†èøŸƒŒ: Ø÷µMä¼cvv¹2}PØnúIVžÄ]’UK B¸Ø·c©DyiDQ÷J{2Yíº0KÇ/Œœ2d*|Ž¡øhaCü™š1ªìÔy¸|TÞ ^ïÆ8öƒÌ)xgò×è-ëø…Ú;g®³S‘-±-¥ŒÛ±ÞRó–†éXU¤÷\öµø€@çˆË[1G·FÛaNâ^‚ÁÜxjxþ «Ÿ\@ç”)镵Œž”κ⃌×ðÊ/Ô^1µY§yò¥êõÉs€âI`¹ìµÐŒè™ë¼í䆅à)/îÃFgäGÝçQÁ}}ÐËM0`˜Â1[»«dŒ¬#õJ§û˜Ãä¯ì(ŽýÞÙe¬„À9Ù¶>|BÞÑÑ?u@{Ú `85c‚~Û=‘pú —K!¡ÖøÏjiX·„gÉ:æÄëõF«•Õàb[p4XoÎßcϘøù:AoÓ.´Õ™À$óö¢È|öì€AÿH‚!"m;} ¶Sk­B&áy¥Ü¬¼Ë  z ð0ó> Øh—ï=sÜÇìüœ”nû1;à^û ¥u8ÐHã/¥V)-–NçGŽ™àG¦—àºyYñcV\×…ó/Œ›¾nf†³“4шá~ýÕ/ÄLdú¶oðB1LŽ.P•Xîõ¼ðõû7j)Ìù†§XÄ+0”Äëøêý‚ ‡ jxr x¢7°¥}v$™fõIäE92ÅÔ[®ºÚøÖƒ„ËfŽzÏóÃ1לÄÜ;R®[¯1¢œœ ¶{6˜önî•íf®}ÈbÜqG¤frõލ†£-Uí°Ýâ@ț™c©bÙ@›åâ…ñ¤dÚh ûþGWÏKîú7ÿA!4·mFÊM1Rî$ÔûDL;¢Iñ–ª¨•¶^'^ÛÏIuƒ(0AÀ]>2î/ª_BŒ\о˜ ev°™uô‘2Ü¡HûÆÊÈöÚ©pé–™ñÏiß!¨­ZÕ¯©á.Ì1Y7ñ4øÚ`«€íõB5„yHî[ŸoŸ“([&8LÔÂÕ¶³ÈÝ÷ƒ¡Y­ššË“d1Ž×xD"pÎÆ±Î›"s9õGç¨÷ó…œ)—ö·ÿ‹®„3'w¯ð¶ º[Á–6”ÚȘߌ [F»*^ï7Î3}Õæ2sò7Ê9=ŽÑaŠRës=ÒWsM÷arQåjZ èÚ)T;Œ•HyãƒÞm„Ó•\„Qá±æâ?€1 Úfé~&!Ý_ÀèlKoóeF´ ¦§ÅˆRÛ#X] ‘õgí2¸ðT»]™-?.ûã¬yö÷/AuFÚÑêÙBŠ <„—ÐöIÂ[T[^™þAºÀ ¿oº<œº¯ËÀ´Ý·I0Ûró[†ì$bJþÌßÕ‡³üû5Œøª ¿æ[n¼Ð(ü.ž¸_à”žŽ‡k2Zï&!x0I¯*€n­4»±caZÆ{£Mêw´q?%gèޤbˆ¶{Ú.jýѾ¯)]B2ó}Ïžì‘£W—#fïˆ1કY:SçBp¨­ØÏð-ó^ röÝŒµöƒç¹oÀ~d´9ÉM›‹8q~£µF?`DÕRÌ­#o;¦(Z)Ä}7Eðõ®ˆ[ \Ø;'ÆœZî퀻џu]vEô+\KÂ-œ«ÛX4dEÞÚET&GÛN„n=W½r)eâ…¢Çyžˆ)#:*BƒxÖÂ],ltç‚c‡Q tvìû ¥2‹ƒ‰„!ôÚ¡ê“ œw½‘|xPAëËÿ|>qb?ö'´‹Žq·ôŠÏWç=l+€\7]àë÷?ïâ=²'ª}IÁ; ˆIiY ^æ«Á£ÖËödLPê (wÕÅEÉüÜ'9l`t®xVÈq‹VìdŒ^àCFôW)Oˆ'@‰Æp ÑÒnIâ)~ >P ¡‚ë>á}„ÿûÿèŸþÙ‹ƒ 1#dä3ƒŠA2ëzp‰œ“>´F/œ÷*ÕK´‚ÞsN$DééT¹0iÛžØÜ9Hÿ¤ônƒx‡œ#ÛÏ)8öƒã” T¥3wÞæ1ÐI½m—Ó¦—f šB+ÇX‘!!æDuI©4Ó<͉GöÑäµj,ŸHùî÷k9[Ÿjã©5 R‚w«‹aõÇÈ Á—òB”R%øÓvK429ïžÎÇXªšLS•os`¹!œËFOÈe´üŸ=ZiÊÜ¥Øv"<Üw8ù ãHè›Îi Cþ]Ñïn &1vâM¾ìá {ÌÎ0QŸô¢ÌötBüõó“œ8{GJûƒA—ÀÓœäaV‚}LŒQÑFÃhN&Šå`;óŠÆ/²[%²e’lcäìx©¼dRòJœ‰@>φ¢Û~FÛÀ¾o8Ï Þ1ï$z˜6Ä ”j›E &=ÀÈÂÍ~e'Ð[Ű¥ŒQÛ[£ohP¾ÞFE½Â6Mþ¹¥L1‹‹Þ°!`•˱ ·ŽÊÁ;FÜæý…à)A…à¡PoÞÑãbÎD7Ì…ƒ $/ÄÀ<-iÔM¸I¤·¿aÒû1•¾ Ë,w&}sÎӇњÁ\7x£N3t2–žiè1ÿPŠ­1<Éù%®ó„Öóx‹b‚É„mbU)1å§Ú*wxµöØ ÒN.¡Œylú:,8…Çá-J ­¿ŽÎhÓÓRØja°•Ñð)ÊJY7õÊfUPsmcœåï›Ö­xs×b|×2>:‹‘”'BwŒŽ6´Q)D˜¦æQRx§-™WOðzýÕ‰ë*!$.à…óäø-D&ö±ÒX ;~§b¦M½„v¯Ïìû¡R¤}G-…A;.¢”ÏS¹ÿØA ÚØEŒÉ—ôï@¼ÉxyùÐí=¿³{'»]>ã»aCܲ¥¶ñÿ|˜“ní¥¹ç…C¯Fÿì…rÞp¿íEPž¼“c£ÕbÎqv 9%L¥É9÷à­JfOweÏ⹈Uæj£ ý&ÏiŒÐ>g3(r†UüÕà÷׿å*@ùœ˜†'ñðO1G…#¥¡|¨ òÂWå¼Nùó ˜úz½ºåv7:A·»æ©|Γ‡µñÙbH¼p-näj¶¸ƒBÀûŒû>-I¯bß(Ę2!f¿-Ý¢Ê1£æ±Llµc-ªïû6å;?Ø¥«P\Ÿ|ˆˆÙ£”Nüû>çÇN‰¹ÁÕnl¡ZSS(ªp“fBR¼ÒÁsìóù ¸`I‰ÌúaürEÄ­ÇÐ;wC¢_÷o“[3>w‹ÜÝ–³0å4Fô^ðÚþÀ]t4ã‚mQÜ…4rNa¥•'EQ{Çv¨­[G­8Ž7cÇãÆï±6vl6ê_Ë~îvŠŒlŒÿcL¿D!$ŽÔ=ßMù—ÿöÓÚ\·<†ÄßdØœ&;$‘‚¸ˆ“¶ å.Æãg®¯8VyjÁ1yKVqñ')×ÉЗ| b2Ìo0S 1A©nðäý/S¼°‚ñ£4þº’×¼oDU„:'0æc2'Iu` ½âûqàëë7‚£Ö©”ÄÑ›Aü(%¿.xòzl;;Uÿ®#¼<Äy[âòáwÁ^`¤˜qÞ_T~ÍþH¶èjhoÀQÂ5þÉ2ÐNULJ™¹ìÇñ\ÏÁµB¸Lõ 9Ò ¿–£ÖŸÄàS´Ù»©…¼À€î¨ârÞ£• ^º9(õDÎÛÃ6¥¤ÒÙn)Æ ½VÈRœA¹h†ylúäø xäLÁ”qz íꔩwÞ=‹{z ÌÉù!‡rè³X?å¾ÛASŒp|Ä—"™ŠlI%&$G¥ Œ¢»ž7NOÝ¥úèïcHÐÙqWš*÷m&ЗÖ$'ÛhfòyîIžÄ}wCK˜l;xþž«•µŽCE°ÅŒ: ‚Ë6¤ "ÑÇÎÈ¢áY<—ëÂ1 µ ˜€§Ø2]-²yÏÜw£ôR¡è¸@ƒí)¬˜jµY2£>Å_­ÍäöjÓ!ÑØö•­Q˜â§ÂQM@>Èl›ë`еT¤=P!¹v¨æ0û|.l[æsZZï 8ë7Ⱥú–b÷¥üŠ’ ”ŠÑœgÞKð‡­ÑÚyæ<ÿ»à#(Ø!Y»Ægð¬#A:ËE?!ÿâþlw(&pæÔF›¼×ùªŠ¼3=O 6ë ¨×MG±¹¥ùq(dNŽ1´#£X %«1’ÏÏ]0M„µûŒ}öí@›TÀ6br5÷yc1ìõzáóõ¡Q躸“ùÔÃŽ‡Jû­|a¥Á¹*!ÁÓ×âÌqš,úPê­•ûÖiº<ï :•ÝÔùyêuCjÏßãß)cöj{Cf‹‡H@×òýÏð© ±Ï1x.jCJ2€Ëa'JÅ|sò»ÒCž:rÚP:]ÝjNñÅÃr>pWaïé~ÐaéxŽT_^Nü™!˪õýçupÞÒAã˜2ðüŒ.Æ×ËpÞxc÷U âCÌ_à,÷$°îÓòë’O€Ÿ¥Aá¼ ¤Œëþ‚€¹s}ÜŒV&(/"-‚äá²(Í9g´jÆ)YL ³f0#¢öïmwÝyÃYÏï‹Î Є—™Du'€1И$™HoÍ$¾ƒyQÒÙo %­3¨òbñ£¤ÀøyqdOF›ðýl#éY;BŠð1 8‡ÏçýÈà…çÃ}Ý8ÞÌÜfŒG$”ÃRÍ)ä}·K×JY¡òhÎIPez¸næŽlÇ»P•ÕGƒLeÐ flÇ “? Ôö¶‚#>__”aGã»Mptb&Ç×û×sFŒAÃï÷ÞkíDÆÐ;°[™u:I)EV××.3;7Ôz U‘’‡—ŒÎJ!r/—RDïõ·»ÙŽÂþÀ1õ¶í¨å¦ìVì#à)˜³£«"Ç€ënˆžø¨Npik3'º)üšº”É€sW-&Ò°$щ…q;4ûßÎ1÷6¹ñ&Õj}óò7ÿúßk­õA‘ç˜p×ʸÄr#’xÍ-ÁåÁjLÔ«[l%<žà´ÚùÒKÄì8Ëßó†ËŒI>0Ã<&ª¿Ò~ ®™¾üN_ŸáÇ|~öްSJÎ$˜è|[Ë:fã2X¢·ê‡†ÃZ¥¿£>ö~/bÅ ßÜœ#ª1G¼±Í]Ù¦ŽÚXˆ9°/\åæŸ€ôFÌ1ˆ'18¹?ßï´u©ÿ’üI-Á7Å¿gÃwýåâÂÍD 4`˜Û= aÚ"ÛøUac¦uWzcß`I,·œÌ©n{`Qh¿G„1xœŸÓ+RÌ —ä0í’ÔÒU%Àô´6xw¨ìÖ¯Ïã±<?$®ûCÓ¥PMã$°ë1b³‡`xÇgheÎÛïçI D‡RXP,å–siÏ(…‹nUO–}ÜúÿóüØ0è=!Àò[bRÞ°Àž}R˜ – Rz΄)í w+dq¡ÃKb·g_o­H‘}£A:€€ëºS"î½Äœ™¨çœãŠCS×ë;‚wŽ—¼ Hî˜Üd· ñè£roYPÇö¤)x3R ö¼‰èCFçHŽè$µ3㮼OÐVéiéõâ¨ïë±=³s‚ûâÅ”S&÷çÁtŸÄíÀ¨!Œiáöâi•©K¼¹•E`@²x¦­_˜|J5Cvp¼M«=TƦ‡ÑeŤÂì–2ÊÇÈŸÅ Žtàª÷c„¯÷Ïׇm˜ã‹M—í„ùà húqœxË;g’ÜbêmÔ³Òë´usþ}’"žúpýî¸åÞáúXÕxåA>úàâÛtÞ¢Üù”¥jñßËßå,sð‚qd"½¶7>×Ek•²Ý'j:šajtÅ$¶¾ :Væyð+—œ-ëÍ”MøžwÚUÌüsÿE-k¤ u”:zs‹°Áà˜ä¼¨hQ)\'y?Â4@[„Î> Ía.h­<‡+ݾ à ²póÃþíˆSŒ©ûc÷2Bœ‚ˆÓÍ:OôuïÊ<Ö1/ N, ±Hß¡9$Ü­Ø®ªZàÏzWä-2ŠvÛ1Û€O÷yâ8@€ë¼økf‚ÉKFÍX9À=lD\jeŒ²µ¦Æ…÷@Nõ®è:‘B„:Ë'Ÿñæ»ÄÝR ¢§3;¹€.ÜAÞ÷¸EÜŸ‚¼eÜç‰÷û³ÐÏC(Ÿ<~’à)³ Þã÷ç?ãÈ¿Lpb}8ËWÞ™Š8¦9õ&€×~p¬<uLåîâ:?xotÐÁ4FŸRHFN`Þé•\*ç1G5·¾>Þ'-½^/œ÷‰hxµËy½Þ8 €¸å !ÒË3jǨÕÜ(<‡gìiÉœµ¡)ÏÜ÷±@iÕ&6î_uœ³NŽè"Çw§Ucújíèµàõ~Bð"@xË¢7 6òs8^;/Gç µaúï×u"Ç u@)Å<4EnþZ+öãeY9)ô>-êfБÿœ@Ÿ3y¡Jv*£$ä_üÛÿ¨DVËs8RýÐ .6;Ž_Ú]¹ì)•q£ªð.âüü… ¢IݶÑZ)|>_x½ß(Ÿ›‡£ ð‰ÔRf—‹ ˆ¶í×e·_ÆG±ƒqYq-|‰3R&꘨W…Ïá9̸@å’ÌÞÐë±~½_è}0BSùÏMr*4ÙòfŒ™°ÃÕ)wº‡]ðæ"¢Kè³>]CðÑXƒÍȘ"j]’OÏ@)apmœƒú0ú·KUu“äÛÙ>‰GÏÛŠÚÙn^×IL†w?dzÎË(\ûoÁ;"ÞLTT±u¥¡L00tÚs!o8Ü¿O¨RRÞQÛ ‘„”Z”¶û¹ˆB$_-zÖÍ9>ø÷[-vÁYFˆð6ïåh'aôÂ.Sì8u˜ƒÜåæNF] äÙvsÀÒýìÏê-SÂ~ªrÊÖ,"Tú€ëóÅõ”˜¥!å çî뤿Âüc zn ¢Å–„Ãã÷1ã>T:ijú$ToáÚ Ý˜år}¾ äãÀè½’bm”ÖŽ;´À¤®“] &%§!rÏÓé6W€éà´»‚>•%Ã^òlÅ„vEˆç}#F`ênRªÛ ¨×´% 0Qïb]œ”‰à#Må®§ ¾ Î9”ë±½P']ÓSÕ²wl6Æós-¿ ê¹Lï×ó¾0ç@Þ”ëDÞw(ZéØÓfã´òÄû÷äå1YÕ‹ z²_÷‰äèÚf¨Ó@ë7^Ç/:Í• ™÷ý1è¤b;Þ¸¿¾ç±Y"ê“æV±»Ho«H1A?)¬»™ABô„*§=…pçXΰï/4“{‡@º±xy$ã€BBBŠ<н0,ø@ƒ¥sb×<ÚD3[Î;D”ž0!¢Ë»åyß…¦í 6ŽP1ó>ñ:ŽG½5¬+ gÉ#z‡6lŸéJe7ÜjÁ±¿q•E)Ë3!ÅSlê#þç8N 9x̽:q—‚cÛip–.;•fß>¥!…Eþü·ÿß»-O_Ç ¥ß†r†ø~Á9 ··6•Zöe´â¢ÊçÈ• (µ>´ÓfQ¡ÝÐkAõù/¿Y™‹ÃuÞdÛ¼ÃHÈ^¨ÁŽ9zˆs8^ T:Ę·ˆ"rÎ4Þ GCAR p> þï¼sÄ{ôм¿øbêÄ샦«LG6ÆÄö+*¶ ô&¿œD=—!2¸¦·f­%g¬>¹Çµ ꯠ#V]Ôk˜½ñÁr˸8 cðÏ0 9£³ãš“•¿¨:dS¥‰#ÎaÁÜȦrßÐ4µKÅy†¿8bRTÄ*.ƒÕ šÀ ³LÜ aÁÕ8ÊûV(œÆE[#$x> :º^ ³ÛfÅž¹.|3j5JlßhxqÁDÓfÙÜ·!ç ÍªÍ ¢/ØV‹)¥LQâø¹òÒ&ýR¾“=€Ióçš3sƒÈYì4d(¶=Sž ÛÙ€JºfõÛ¶?û”£ë´+¦öcc5ÚPé ^›ßýì<¶}Cm† ñTõ6l_¸É™4ÞYç`F‰IKçPhµ1‰d¼³KYañ­Ýb Š-S:E1¡Ô‚Ö*RÞÿŠW‡ŽIïI½šáÒK&½Zn^H"¼ðì9] ñ0iZ¬®)•z«ކØr_1â¾OÄi„ âT¶¼¡ôÂevØ÷c ”ë†zELüÜ¢÷p)‡R.ôÉXÞV+úÀM§Zœ«£48Ònû`‘ã„´ç1Ã¥»{´I\PGfâ)^ÐŽvŸ´ C¿df¤ÄÈ©YV±¢ÂTÓ,d˼¾õS–Ī,B•MÀŸð]0Ã&2 à}¼hvTA».´NoGoÜiFÇxµË º™‡ä}üÂЉäŸÿíÿªüy|7ƒð1±u³Í[û¿þ. <±Ü7‚÷ÔD¯Åz @[’Í»È4ÄĪÌ.éœ4£wvc,éÜp¼_8¯ë |Q,`pî¨vã{Ï\æà Û±gè$z]çDÞÜtø:?¼€Æ@Ú"®›*ç™Ã1•¾‹àG-X‚4VüÜp^úmçci<ÜæÇ.Üè’çÔrJüã#áØ†0CLµdAòYùû“ÍÓ{°Ù2½áCø¥‡ÑîB…‰ÐÜØk!µW;¶ýMÙpŽ`Õk¼“±›0þNw2uÑ×.'% lÌÉϰwÄ=£7Ô}{GVràwÔÏ¿ˆü¾®û¡  ¾•[Êà;ƒÅ£­–çu –A‘²·ÜÙJjbÁ} “8ï:aÑÌ|Ѓw6êj̃ö£*òAÂjÜ<¢cöt ›YRÞÐíôb¾ X4¯wp“c®}Ëh «Ô ډˮ6BUóUðPÝÒŽëü"«È ::¶ý—½3 ÝFYô·€fFÛOÅ@•ÐôÀ‘|}¾ÌÀï› -3ˆ‚&ÒÞœ6û@›œó÷Áâ!8Ç웘РàUéuÙrÄõuâx½PJµbÈÂY+ÅÜó_p¤}3jÀD-×ó]ìÇ Å}žÆÆZ?£ž=¼E^oŠãîÙS%ùzB ¼ÕvMÏËi{¦¢DYܯjm­ÙØœÝêùù¢8Ãê¢9:ö×/Üåââ}{öq[ÚQê …C ¿^/Ü÷6;á;ï<œ®óFÎ;%Ç:ÑkÅ–7tíˆ.àºoûµ}mªXðY1!‰£QÖ.õä¸+u.⺾÷l»F¢ï$”™X·Ì÷2´±6NÔåò7ÿú߯üÐïË#ðÃw>bh‡{t¥{Z¢açµE:mÐ ›qÂþ;|KñV`åtàíûÏï¿àø«7>ÿå 1%r®¾NìûŽ«[]Ë㸻D8îºo[ú™ƒoßÔN³ :%£½}ïU–ãÓd|6ÙrF­•)\ç o`ÈZnÄœXi)«Æ˜"ÆPœ÷ú«?¡ÔŠlùŸÏþô§?¡öQe¾³8ó0„ç£]ƒ¢7‡ÞGDbÃ*Ct„>¹C‹¨Ûç KB¢Gà8¨êÁ¡¶Í‡®Õ%„-[ˆNG½O@M þŒ²äÒ(í Á›S|¹Å&óîûÃçÁRõfo” ¥p xh›ÆâøÌ?¯­b?Þ–øÆ®E•­r«±©ê( X¬3€RaL&¯õ÷ fYUÔŽj_¦GNó?¸g%©ba‚=ï¸Î¥u3Ž®Ës©—x!Ï9·ÌÅëèzýåô»Ò)Eij|ío©!¦ârÄ;·ã½)e`B”a£D¿ ø”(‹¸Ù %c£Ü=gÔÑà ýÝçàN§w¸5NnŠ:*BôØ·ÝVù÷}¡Ô‚16 pbI‰?Ö“²]ÌŸ_÷çûeÌ;ýܥ⽿p^'RÜ1g#bÇR9Í Mw8³J¾¾~e4;^; ÉcÛñ¹N¤b"†d5Žòðîωég;ZC©…†GÓ•0¼Ž;˜¼o¸î‚-FœŸ/ˆ8„y)Y¡ä#'-lÁhåF!ʃôàÉhÙ1Ç›^9v>7 !¶xàS(‘†®Ot2â»—'™tyÅB`^P­…»É˜éÕY#keìCÑ,ŒŸ~½þÀ]NŒ©pPÛ›dôý…»]$Ôödª`‹ÞÁÍ Ønî)ÜW÷¸Ä'?º¶Ší}ŒZ‹Íïu\1•___x¿ß¸>_P¤´£—‚l:zNU<Ô™9À]oìû‹rÌ>01Íæž/öÚx>xJËu,J3%ap½m/Ê1·ÐưŸÊ°ÞrÞ˜[Q˜ÑÛMCÛÚs̉˜zA ÅS±é÷÷«–«áe XDé\³yçŒÿdÿÊk_úz8ºÀŒDÓ뤞]mÇÅq!2™s?W÷¾½0u ÖF³«íœ`Ú|¸iËbûñ•l+†õ”«ü™tp@›ÌÑ6!â‘7V¦ª¤1è˜4zߤ€Ù8R R˘[ªÄΗ“u×úAVAôC2®žTÝ`ž˜,™]1ˆ˜ôߋΗÚx"¥ ujþë:‘R$¥6Fˆsð+sÞï•´Q Á!ý[Ú üþü†w΄Db" oòé†2Ú]à=…/"ŒÞÕAewÔf—Ú‘7|®ËöŠôPíiÃ3ÑzVoêO„'ðzÿƒ‘Äé-”c`JöÕN =Æ0ÏÈÀYœ‡](w)TeµŠ˜2¼W\çE‚Æ+ãú0¹14 KH>Zà3¦vòÀÎ!2vaù××÷Çoã,Äl*MuÑãúœÈ)sÿ`¤Öô,pù™´Ù]zŠ™%’GS®÷uÁ»€"¼óæO Yí:O¼mNº¹¡(µ#¤%ìx†ð»ì¶è-÷e—‰gb%8á“t †6Û ªuÅ” >¢Ü§uft£S^Ïls@1íRdçþ6A̤É@+¶ýÅñ|búbïí9+b"Wïú"&eLÐ +Â_Ë:·¥ ¥áR1MÉußÑ…¥sdpÇÖ[Ãv¼àTpúDBÊ"8ËEù6€h,±Q3Ôw‡m^`Ã̼!>êP' ×ÄŠ@âI–l›ã¬¢uM4ŒsPì00°çÌqùßü«OÈÄTÃ)ðý9*Z|XÔ&‚97§½@ž#gi`9'žòݼC#ý$>fÜ×IÿF£¡Jl¯7—m¥Bb€  ôÊy{½>ÒœŠ?Ž7þrS9å'}&¥QöÌTC¡}Ù3­Uæ_Ìåq°B{0+`Ï>Ÿ/Ä-1·B´‡T\€sn*ªÂüfýæy»´Ôs©Ï.HâÂ0ÿl*”Úeû¾¿íAxësÜ(%ÄÊ2æ_^ˆ²(å´®zå­xÛ‘(¼9æóöâù`9뎖Âç–#zI‰9O[] ãl§6DgŸédüm3ÌsE ¦vºqMÂ,œJuRpÎhÊx¼&.rÿÃjœX˜‡Å‹·äË%Û“g¤ºÒóƘÈáFÇñælÝṞkãbm™T„q·9¾‚iÆÙ•&˜¶ø˜eK­Ö]Ùâ´u¨l9£Üÿ„`<%,X%U‡Sî›ä\d ï6ƒæ¾âä|Í5 ÐÖ™)†Çaü¨ Ë2±1ÅöBq•pö¹‹¥;ò¢n½2y.xîî1Ï>O•ªÇhü­1.` ¹Îú½*¼ÿŒÉâÌYíÀªØ;zø¿—ŸÏҜ؎ƒï^¸Î/Ûw»)/æoÈ´…}!P*Ópt€:”R)`;ÖŒt…ã­,”ab¸‰^š¦¼˜B0á (`˜½1•°Qm–|‚ œ7¶}ü=Þve«ó±½H ¤àÜå$Ázt‰æqJ> ë@Ž ŸëÆkß!æ‘ ÖQ”û6ŒúDëó5^…\°-mŒ±I!¡cÐ7Uj¡ä]W1CBmõ™ì0ɵ£޼bLð;±ñèün™)üßÿGÿäϰä+X¸éòØ7ô>཰º™a ðˆØ7BÜ™/1‰!!õÓò.:ƒî8Œ †/Phï8Þ±ì{&—h( “sC(s¹ív¢e?ä1†ØhP,œ£’-m$u‚ÕÌy0ª6*ŸP°•s~!$äùâ[o¤ˆ:n^ï_”û©iÍÁ˜ÕmaÛ2Ä ‚[Ë25‰¦·ƒ--wëÞÐ"D LŠõyû{gÊ}Ð㘓ÊOÍ9±‚¸„±'X¦Šä3+;:«VCˆ¨¾ƒɶZR±w,žR-”5ư=Õë×/^xæŠÖ‹UÔݤǣu¤mcW£ÓZg". +óEÄ™Êka–Ö¨Ó1Ò.5 ÞóÂoOÏÏØM¿ §lËŒsÔžQ !~Ñð$Þñ–¸g9ßϸÕJjñb£^´¿QJîSBt.ލ6úôÎ!‡m{¡v¦x†È1hoýÉ–¿¬"õ1A«¡³çd˜ÚضcVì¯_è•b…2ŽtT†‡5.Z8Ç 1fœõÄvþïÑ4¦"úˆó¾Ñn†uMLĘùsŽ3J99fJ>0™®µ í ûþFŸ1FÇ ¥~ ðÏ‚øõ÷~Y]ÍE{ï³3iÛìq£ £Z›šò× Nº]XÓ.f|¦ÄÏT"rì™÷ ŒŒªÛ„²æi¦®}ß‘\Ä×uRUÔöm³ŒÞ—RN6¢íFH™c¦Î²¶òìZ½íÂÑgçÑ ¡§Û~ æd±ÀË/Ãl378,MPBDŒžtÛÉ̘ë¾S@iµÓÜœbü;æÖùþÅ ãï1H£9Ì-Ü9Oí³ÀìÁ¼ùÈ%»w‚Öº… 6¤·„»ÝhWÁì<¯&øÜOð”ö·ÿN Fí |K¾SÑìe…kLdR¾8u¢TPiç"ЃK°»^ÄC€ùÕÑrŠ'Â|µÇõ.ä4é¤éHõq«Uí)m|Dë 1xœŸ› RK´]Ãoo-hïÍœÈV‹@—9 ÷õA)%\×ý=æø±·é³“Õ$‚:y˜¤ÄÌ…1Ñ:él6çúèï× ×çü|L —0{'4NH÷ܶ/Ugæ²ZUKeµÜx ¥›½jÀÿtP;03ѱçW9¹ô}0OÀiÀ”þ|Á:[> žþó¾a^péQ[©v4ëÚ`óè1ëk>Hð};xùˆ‰‰ÑBЏ¾.¨(B`¦4&ŽdôÇRU„hõ¿C&X#¼A‰¬:à'&‰ÊÁy^‹©$OëÇgJ„ ¶8æ[¸ž¹<68šPÛ†‰…¸¨Óœ¿}L´zB\°RlÛQ8ŘÏÔòæ;ÄÑENŸ-vÁ'x H^¯]ÁŒSZEO³l)7\´Ò°o/ænw¢7‚÷¦Ý:ÏbNŒs¶±Sr,Ò·lÕ,Ç‚1ä'K€µ0#z9¢#ßmÛ2Fgf0±m/^ôª(£ÓÕ=:Äy´z1S$2âxÎæ×¸5‚r°ÔLd´à<~__8¶ƒïŽgü€S ôfËä çy0Ç”¿ƒ¢ ¬úµ#ù }4rÆÄ?ÎsïÞ&) ¦˜ësxæ³>ämC5l¼ˆc^{½9ÿï…¿¦çHsN"í]äû °cç{Ýq_ÍLŸ¬$0ŸOÆJðË™Y0ÇkÇ]nÆvƒŒ±»\ÏJ Ž‘xKÚ4°¥Lî³rL̶+ãeC1²¶÷µÆF8ÞÞÞoÂkAÊÌ,Úò†>&¼ÐUï½GÎѤ×ûÉóØxÿ¢çK+–iäPÎù8ÐGÃhœDôZ9Âú?ý×ÿ×?;#®hËa¦µˆV5Ù+_¢‰¼%´Ò!ÁâQ ûãÆŠ½Ö‡"SƼ F«YÛÐZþ¿hú8Ãÿã<–Igí¾!!ò2*œW»à‘ÓŽÑ*ÔQÕÀ‰ÐÄ~¼ÈzùuÐ=ÙhŠšK‹ïô‘x®nHu¢Mæäì"±ÏBæzÀû£˜€e «a¥Wå1jǘ”ÍŽa®.¹è|ÔCªD•¿ò1®ë6yÿܽ39Êö„)&f¡ôFD/è³7!+cÜ‘$`ÒÔVoûN)…Mq‡‘ãΉé~s ·ŠZ8ÇŸ:¨²©ÍÜà ^:ï‹£ŠÑ(¹ô­v”z3¡·%&BŸQ𳡶Â|•Q¸³ºO(ˆV÷.ÚÉÏB¢wŽt†*´qüÉfòE_aW}pL·ýɾE†7ÍÎ1eï¶äŸÈ) òŸ `…ŽnãAú Ö³§Ïmc±M )lI̸û®<ßçJؤË~Îαr4 5¨¾rž¨p‰ºÀ`®‡>z­fr¥¿H-–v4^@:'•Z·å•€riŽÊê¬H’ð¹?Àd\µHÞvŽÌ¿·È "¨õÄœôÕûæ<ÝÆl^j-„².ÞØ küº/š{;Oª ÍrÖµ¥pìoÀL®‚Ïù…Ú G@œ+£¢e¶u:x´FI Ñ`¥Šj%ΦÜ÷wγHb›F¬ÎNmÕ[£yTñy%“ù×Zà‚_äœP[§ïÈFOÕ—z_ðÈ‚îÏmb ­³<‰B7ÄLg§lãÛœ3ÊMš¹8‡ˆ‰Ê1Ó“#Ày~aËÎó4ð­ Ü…©:9&´èd( Ü[Ü i ³s×¢ƒ…áÕ.”RÐjÅèüï£ðÌöÁÁéÄy~Ès »ËÅŸÁ.0(àÿëÿîø³º¶ÅPÎ+"Îó‡ý!Ë•)ßA22è81Éé@È Ýæäûþ ÷u!ejÍé ¥…¿c¡[¸Éþ~=•WΛu8E¥¹[X T[Šæœk¾ƒ^eb;è•øãOp쥊¿÷§?Ñà5æ3æbx lo@i´Ëa}™p¼ m;BL;d‚óP§ÏY¶ªÝàç’npeËjî ¨ÈbZ›GØ¢åfŸ;7ì¯ ±¦<¦#n:f=O.ÏEÇ_“ê­©œ©ÃQF¹¿^ÌþðÎsõR!6:;"'âY™²[c¥ïÄ#¥ø)= UšwÄ‹ 'v«èå.÷Þãx˜8Þï'mÐÙÅ8;/€nѨ[ÎüÌ&ƒŽò–¸èt¯ã…”#tÂ^[¤XWÅCJSÅDÎ$Ÿút Gr»œ{æ+‰Q‰jЏ§«î¬ÖçœF!öÈ)+›Z½Tä-YCsë >˜kß9´r=û#jÿ78®zÑw¡ë IضmpoØ{ƒ ¬C¦ân7BÌT{* âXà cDN 1fŽÜ„…CLÑi9µÊûŽÑJ7WÎæM1 ýõþñŸ¡«=§êGØŽbJß)D‚9&—ö"zŸðëõ‹3S™fhkñvô^èt‚Š-F”ó‚ ü0Ïóä²eÚê}0j*SúÆÝØÞtN³M œ±šÉË© µŠë¬¸Ë…1Îû"„î¶<á5ê˜J ïq°âi\`ïûaæ ²³5´R3Qñú6CiÞ|h±K­Êœp# Û"š ÇÕ»š¼”ö¸”2q®µWÆ |H6ªà¹[˜k¸-”«èc&ÜŽ—}o£Ù"Ž=#£›ÃYD,½N<ú(¦3ÔÆ¼Ÿ.Ëûˆi’Þi4R‘ôwà꬜7âf3 ÃeIt7ÇB™ò˜¼ Ny;HñAˆ”ÈcãK—ð¹¿h0tå=V÷}‰{ïÍ@HüÇTp„Óæ£Òƒ,£«ƒ‹Ñœ»ú\ j•¡˜HÁEk3mÌ:»£1Zo}âxˆŽyاÉHu!'J&Û {ML}æèr) ”Š´ïŒ5vÜTÖQñÚßh¶+Ú÷å¼3•:)%„è¸Ot/ÞÒ-=bŒÝÐz±.œã’jÎñRnÄhcä>!;ÀÐÁfñàÈ¡ 2§"ÆL‚çš‹Ûòz!qîúYâën¹W™ˆiǰQœw³MøHµö§Y‡nŒ «ÒÀnT„è’ãuØ¡Üq_7ö}C© è ÄΗ»B…ˆq’M½e†.aϘ££Õ†ã}P]Õ¸§ )@Í ¿Ð:¶Á‰à,·É¿I,nŸ‹Š%Ú%AïÃ:|vQ£wä#cvEV4lŽ'vu®Y»ÊE¼¯‹ ÄmC+û¶=1µ<:û`ä3X¥»`îg-Ä‹cmÅwŅ̃4uѧùïgeÀW2Íä© '{Üèƒ1CÜž3¾®̇ç»eÞδ< ï¸èw“Š(—ê,öcç®nšSFß g)˜&©vyCå>áC¦Û=x\w±ý—I½Aµ˜s6"[¹âK<{×U?Íéèë¨7ò–¬¸e§¿//QjÅk{;Nð9O¼^Dç½b 胷X8‹=æHqK;îFÿÖ˜œÄÔ»Àň’y€ó?L–Ÿs~ÄNüŒwNìJ©Õ¼!kÎ)ß— &œÛ,ÆÔ>?2À`Zà}šäô‡ëtwÐA¬ #*OîWÌPàó»YprWã‚ç!,?HÅ"ØöÝ™Ëïß‚¹Òì:Ëu?†<óŽó×Öè6´å÷°V …hq§ÕFk‹¾k|¥Ã[ñõ9M?l|ÄŽ—•#ŸÁ{f…kô•{N½„7Gp¡ùM¸Èmáïüù¬ÐÎ'È{±‹.<— ŸýŸæEâûR±¬™9qì/|¿±D×õAò ]©^«÷mD^<ßËvÐ^Q/PYÔfUìùÈ€ó‚Y&£·ðuýÆn‹{^ÂbÀÃÉ ;P™¨yã8v|îGÞùyd…0ÌU^ZÁ‘w@œ¡`†çŒ€ëÊSÆ2Æ|BŸÖ„r³P%iÈ(.D+ºHŒÖ9 ‰d;7'^¢|®SÄu]ÄÔÔj¹HÝLÝüǶ¼£÷ @3§'Tqý⊔;Ç_³´í 1of)ÈæœhåÆëýÂõ¹7.ÍOž2þàüÿù¿ýïÿ¬6Óü–ê®âRM¥Olè:å$o*"oª4rE†Ô‹¶×Ž-YGÞX1ωnc³ã_fÔ9-¼ÇæúœÊƒsØIÆLn©Ü:(e¹>ùÒíïƒ2ҩȉÀ²5Ó†7½ù#QæÈÇ`ɃKÊÑ+1;•C-”‰‹¬…WwèÌTÉi³ì Ãæko1ÊñIIˆXðÈ/´N²ZW¸í½ ÊçÄÀñ:ÐLU¨ý1yxM@³œ=¶c´Zz-ŒûAÚ2Ä{Ò>û+ì”vŽ~ ÖŠc£ +†г\¼$&9`iK|¾ÊMê館ö{{"W§½3£6“³“p=qöº‘BÀ0ÞÊ0cE/!EôQlGC¯4ÎNÖÛ7ÐÉö*µȉ]K ‰;ë>G¯pp¸ï“—Ô#ž¨và@øŸaïpÌü8¾òFH¦À`¢õ-±3­!¤dÉ‘¼Ì{©ŒÀnÕÞw¹QîJñH'¹aßZf‡bà.Ÿ“Ò|<îχ˜ø9L6QÊ…èœy„H8îC .¢\ÔÖ1¥µ¥T;‹xPvK€T(T›í›eº°»ž&Vé³#›DÖ»€r~ñ×è!x‰E‚C½ Å/sB |Z%:ÊEÔÑ1ján¬*g=ÛnšºlbÛˆ©õFëÅŠò”R°çû¸Q’Õú“eïÁdR€Œ¹n¢’ÙØ¤”9Žsùÿößéº „Á7kt%f:3Éš· ؘGEžVN‡ÂÈûaʦŽ1'öã?øF5Åâ÷‡”8ÿ4ã¡XÛï·ˆvWÇŽóº _üÔ€êŽýE _p(÷בQÊ|RÇÖåÀ¶Vð~½ñu#âÄ[^»#V†òö"tÉÇ Þ~­1”Õêà¾Á™N=G Óä¡°ÊzN5W*/&¬b©dc2تd§ehÇÓ\áK1´˜PÎyPXx3É…áë@ïP7áýfztǶ«`ZXÏ„!Lfgîº6 …]så=œ£Œùëëëa;áñ }·NÇë@¹/¨Ìn*`¨ëàé^îÊÏqÌÆ?röÜ{3Ù­-ÀuÕ4üÿ!²®ˆ¨I‰ÉI“ÅݘÜ×ÞÌÌ:™ÍŒ’µXÿÅ]]Õ0>„¸—9;‚˶EÌÃh G:ˆ–~ ¨µóRi•èçó@W8Sˆá‘ÙÞ×ýŒ\–×£^ª©bÈhë2]ANs ÅL8_kEU^ò.8묨Þë­c;6jØ|~NAv¤å:m§I çòY½Ž?0´bšl¥+!a ¿!ºÀ8(åú•š‚ƒýõÆu~°o;JmÈ!A¸G ‘ö­\>>Og —…ÙÅ”ž< >†yØN‹Šضç炇ÃD0ÏšÂÎyOÑÑ•€%jù*ž—k¿ c”[çÚÁ²ë™NÂ7Fþù¿ú÷:Ç$iveOÄÀ¶l”µ\˜ÙáSÂì•ËFïàà“W²•ØR@)"œCËG®À¦…­öí<ùC.ÙSaD®Ïæ3›´^‘¶õºàª×y±³8Ÿ0Z'!Œßv(y3 ŠgðaíWˆ‘`O®Tˆ Í fÎ~–&3i…˜¸¤L sòPµƒÖgC“ÇNºé½§1°·NtÉ(FC]ÇÜ`¸½pȳ fHŸÙnŽ“ò õþ@Ô34©­?Ìiœ§ÕîZ–‡x3KfôÁ´8ÞÉô‹8/ ¿*z›7à ©2;ƒ¢Ø¹Y0”(RȨ}@A¹¥3£×Âj<ï^-CBH!\×IŽÇÛØö ×ç"ŹžOÎùʪÈiÃ}ÓècÔA!ÅU?À`´ìupC«­C£èÁGêúRZË”2ˆ¡pÁáºolûA)ªW)ÐNÅÌ–Ù «»bߟ7â»?_¿IÅ.Ü1<ˆJ¹9Î º³…ë *㾨®2tÏ]¶”p•9™zÌ ¼ þòùp»âu'h9&œµ ˆƒå.ضª«n9?öÛŽ»5Û  9qÖîwGcX•9ú!{ÊÏbôï ±nïbÎC­Êºd'RÚ Q,1 ¦`J)~•m4†eÅ€ûs?ÞÛçùEœ%7z“Ø®ê÷#L¨\å [ÜÑ;3FêãeBLð1¢|>¶`¯6"¯n𯖂‡žEßdú}Ý +­ø“,“U ¡« @æÀuŸÈÛ å¾°í›e¯gÜç‡FòôçØÞ±·Ž´%x«ÿ®ZìÝXS%5äþäe~’nì3ßmˆÃ~™Í›¤_þå¿ýOês€S|Ï3U æÇ/WÌ9ýwÂÓרË9^.Ö¹P $]ü$Î&W ØrBmÑÂØÛ1;G+˜ä“b ñ²ÕöT Óôè‚oVÕTk”ªµF£[+CÇ·w¤_ŽÎÈÔ=D _?™B·§®vÒ!íÙγ‘0LŠç-£K©¦¦v‘„Ö¶ÒÞHãUÛáÁÑ.©œÁ³à“†CÞίÓ>;@B ùë [>0,sAu]-Aŵ¨ðr2yÙÆÌ¹%Èä­"[U¡ƒNc*—:ö×aoÎØ½ãwßõ‡K{Á ‡"mÛógäÏÊ„Bï"ú¤<Û)ýCkÌȇp Áj[îá[˜àC€?CΖ»9ÜDÉùêƒ*¯ÕÁ¥=£^Ä…0„óæ>…0:ʼnCÍ”ràçñŒp)k5Îúãé9ŽîóBÄâKpàÂà 6ò½?VÎÀ³«³N^¢`vvÈ‚I÷ôùŠí8žB¥”b{GŽÛÔÔ û~àsÿfgiáþú…V¸$o}@ ¨¥0O§|àÔ!ç ¥^ÈVM'cƒ©²âÐg'J£ÒÏ¢F¢¦ò§ß0ˆm6ž+<ÄX¥ö>q¼wˆ:ÔÆ.lÔŸ26ñ8kµ¸…D«'›*ºøPϹàþÜp1¢µûëÀÀ¾´Ö¸dN>œsTe=2ëµgø±÷!¥ 8 ¶Ž×Æp­6‰mqŽÔE‹f=¼o/Üå¢X”ÆÏB^oFéµøíéØá-SèS ¶œ0†rÌe~7Û¾ã*œ"j{ ¥6ŠkD‘]DÑ'@˜w#*ˆ96ãX×C”Eî9à)©§9’öŠ~bäg€—ÿ¯þ›üçiô]În}fX /°p'P³a›üѹ4çLú¦ØòÎÊã9àÔ¢Uùí–V°åçyÒpg¼þÛ˜ôÓÂç·}{2”cŠð0Õ”v¹ñrš:Q ‘Ô¥\ØóŽz7c½R«…+A0Ú€åx÷°-±ºñöGoìbæä¥fA¢ÌVHÉLˆS¼i»;÷"y˨ý²ê½cŽŠÙŽý@k–­,\ ¡+Æ,:°¥2×ùXðÔÐÆQ­«i䥵^úÞ¡³š™p©¶A×P§sÆî„‚8ΤƒP£ï H(w¥êË–Þ! Ü–|12Ï=oÛ3Nz ‹8yQÅ‹B:ZýFˆoXpÑ­]ècb*ãVu ®‹^•10Ç4Es¸%6\µwÛ¹MôR0†>2¦bóhvµÃj­uÊÔãµWŠ<"å¸]9W7“ŸÝZ1'#l'À±Þ7¦°½×®èJ¿ âÞ©à¡ñs3y×pJt 3RäÒ´•ŠV+^¯ƒl«àQ, J;çÖ¯¼%>YÝÖóDïÝxG£uH`±„ ‚ ÏËÞOæ÷xGêAk•û('Oráƒ" R3Ø:sÄPfEÔR1ÇøŽ‘CªŠÛ¡º¥”.!Ep@«)e†>_Ž0Ní•ïHŸ¸[á²9zÜåÂ±ï˜æØ!``O9Žþœ¿9†Ý"Jg¢sà÷ï¿4&޼c´AaœŸ =~}Qà3D)>ˆ)£õŽV ^Ç ççÜùîŽgëÌXŸÓ<8“áUÞc´ `À;¢•â–rû Otø*aïPî >FxG#)”é‰ Ä*(ƒéœ­6LL¢õ –‹Edð¨…Ä”Ê(¶§m¡ÀLÒÖx´Ý…ùòc`uÁzòèþúüã?/UÀP[Rö‰!¯í@i7edB>ót©ØªŠ(å«Á^¼Ï× éóÑ«¹¶9@Êyaßv´Ù±ïÄG½M¨ãx§Mªçú†>ážêx½ÑÐÑ{C-ÔøçmCLµ5FΦŒ×ñ†÷‚::¼÷¤SffbÂñd9#«½9ì95yð¶oü÷Óö†Ž*±mËp^p':cB Ÿ›XŽãx!:’\K%KJ!áQ¦òÿÇ»)&ôѱm4ô¶Öž‚fÂ<#Ê¢òýúeâ•qçžHÕ}ÛͼI„OŽéµb˜¹³µ×ñB´ŒŽ•èY˘½Ws¢´1x„è°Åéàôcó¼ÿ>Qê>eÔ9ù„`hÕ‰cßÑ[±ÏóÀèƒãÿÁIKމ#éIǾΡøž¶Þc‹ÙD"|&¶y1Ø…ATÔ\°°2E°ü#?)nVÈ1)…Ç–3œÝZoÇg¹Ýå1Чœ•¦ý‚ßd=¢ÐÎPnþyÕ sþïÿ£úg€ËŸ`ù ËY r¸Ø­„L,öÒÅ–äúH gïh£âH;4¡ïsù›ÄfRn•L ¶2_è ˜rÚèÈ"{l|;’Å1¸éI~tÌp1C]ëý•\Ÿ >³ríõ¶îŽ®€ñ¯mã÷´X]J#k+\Ö¢±¼k­aöJ¯Ã‹ÐÍÑ÷u¡uJÌÿÞ_ýصÛs:çDJ)fV‡(ïÅÓÒÙMî;ø ™MÓ|µ^¨µbLåøÏ&Ó¥2bÙb%)Æm£Hct´ÖHa°±¡Í;éw^ˆW(œ2¼.úÈÎ}.®»Ã9瀤¡-CÄ € †èº/VË}`Ï›Eä2Í2FZZ¹íõB <·ÚÐç@¯w'f‡°P°ïïýåËæN/µaŽJïÏk.ïéän¥˜@ƒ{5­Mrã|°Åt²Kp Â$${ö¦I—ć(@_Hè­“®ÊïÑö„2é³Ç•ƒX€š_£qs¶‡\A\LØ"¢(£Ð¯†2wC n£À3_hJ-q‹üyÿæ_ÿ{U¥AÛ‚ƒ˜ºFœ!KÀ«aÞØÁÖW´©E\Ž¡°œ*ì!"DÍWtÿqñ,Ö ¾ŒÇ¶azŽZîÛÆ+JÖë}0—xtfRLƒ!f.±H™xíT|ôÞ·ƒTάRLb_‚˜èÇp¦Â:vΉEíiÿ½¸ï†)aÍ\u¡.º-愤RØ nkœË†ÿ»f,˜d-ñ¾•cüœ ÒtbŽÙef²ÑŠÀ¹ºÃľ½˜/EÌ™#VM—þ#p ‹¨öì« .B<ÐÚüv+;n`Èö0N"í.ÍÉ—Šoýì"¬Æ 8>×u hYß‹h¼‚Ʀ}#îÑñ²§p\‚qŒŒ7t×'1ð];¶œžjЙ´›CÍ¿1,rËÙ9ë6Z-ü^|°Ìjgß/%½½&ÕräsÞpþå2ÖÿŒÕaÒ ?!pnÖÔšG±1pz8qÛñÆõù`ÛwlûŽÿïþÿ°@X‡=×˃C‡™bï¸ÎB§¹÷üŒS4ÚÁÅÿÀ8ÜÎ.a.LI¥ 1&Â7K½áAe›ê||½3’:q^ç3©t"˜"ÖiLh£r+¦ Î)®ë2î2•¦Íil=8¶6¤úô‚ì#Ïï-z€úÐþ˜‰Ïû|:ð¥–:^/_ŸrJ€÷`T/Ž÷ûŽá ˜20º"ù€`Œ/†>fÈ%“gŠ žU·ñZd‚eÎå¼±Z©î‹ɨ¼Ý˜l:ºe¿¸Íà¸Å ·íÝ¢|÷Ã'ygVÈŠóÆâ~ ›6h#ZhÊľí)¨£"Ål?Ó4" iX'qh÷‰m¡Uò á€#¼t¢?çY Ôû?—ýåðÄ1®/J§¹ÕÁʈ’*|cà­KcYqz0!.2l(\_š`^oÜ¿? Èy–˜4!Ü燕Ÿç‹[ÔœImýÇÁÌ ^¯7~ý~n9‰ÀE‡(]kåÄ#zO|@>ŒIrJIÛ(vH˜[2Éì8Ž'ü)§ŒRËßý!žc>1¯ëðÏñ@mœ’ª[mñ¼vC§Å^ª¤€1 tÞ._XÃ/j-»×nÃňQÒ¾±ŠŽj9ÚTÇx U@¾¥Èjr[LϰÀ#žÝ†tL¿^hgAŸµ¶\{… Pi夳â ëèÈ·x^Õ‰””BIeôÁâyÛ1gg—¤ÀÃŒí#0‘÷çù1là ­Rήïó1~myuÖéÜg1o˜>A=}tÌÊ«ëøƒ³o\Ÿ /¥uÀu~L ¶C‡â¾nJÔC€6ú;^Ç £1÷»€óúÀO 4ì=[©{â,âØ”½½[ÀàxÑS>— ¤Y9i|/›“ëŠEpv‰ë\Ìó€ Lˆž]rkì$}Lƒ Ët`cPµ1UÊ4ÍÍ>,diåzêe è-aÒª¯óËB¡€c_ïž÷(úô¼‡Sö|pLX8‚M1=Níâ4#Cw­$>œ÷SM0îwŸj)Àtd´J°VömD)3§Т(Œ-_°Cœv ñû Á#x2øh ´ß[IânÍT\ÆP’ sÚâžtê};pÙ%¼m‡Ç'JmØÌð÷œ/Sמé•Q?å¡3/cå} ARkÇâW­âÙðÎ;sås\Êw03’à>É#ۉЯƒ’ñíµãú:)ãUʆÚkgêU>˜ÚM®¨}©õ˜^h"4â¹<¼Íð¸0Gþþzã¶ú¸e.ÆŸwŸÎ|ì&¯Äƒ1ÑÎÎqVYëÀžipùœ¶ë!€ïóº°oÌf’Ç.yßðù|!m µ4*îÂÎkr‰åNâ:o¾@kZ¾w#û~X…åðõù‚ß²S/ >D”r~‡»X{è¦GÎçõ…=Æ´Œâ9l¼E\†*Uj×ù¡s¹ ¼Þ/ó…X•êîdCÈç_>¿îÄsYf¸õ‰ L±ö~ãؼúhíWFøòvÑ<<À1gôçuÁ<Ñ90â6êä^A¼@ÀŸã>OVÇs‰gYô±3áË=:¹RÍÄÁ<\ê®Ñ Ä’(»–e<eAÓ;w: zò˜½2tl2oÄùðhö× …É__<2¥àëny½í¥VÀ.2™ËÑŽH©¥â~`?ø]ÀûõÂ×õ¡\|0kG@7ú2±"¼Tb±^øÛ ÐÙÁóógq¡«°‰Ùg‹]îFÆè8ö>ç‡v½ø}4ª>RB»n#Û²jp‡à|xZñè\`†‚kÅ;äÈYÛu8ÓZwí&—0p,ÃÃóaÎûŽz݆-¡¡¯ÏŠ6¨PSÿù|™‹Ž] ¾Dæ“h¸–]Š U S™Dˆ4M,GÔäìÐf;$Å2äˆ8|JeEåAlÿìVÄ”R"&¡–εë],épð03e˜+ÍÙ(ªLjë¶ßÁ†[]•‚­l¹)yžó{y]B­ª­¸X€KÀãý0'/OçŸ×u€9a>5ÿ ï29e½@Ág£Öûö~¸<ïC<­5Ú1:Í]­õ• ô4u9þÚË·çÅþNÙÄ€jC½:\v˜‡kðÕ«Ž1ÓFmvè>—%ØMNu“3îšÎoÅžšYhÛ(‹Sâ©e~ÿÈ”·=—÷ s¶ççÕÖíAæÁ-Î+†#ÿáÕ –·k‹Î"îzS Ï}ЧŠíº®G2͹»I¼'_œ¡bеm1;BŠ˜:q–‹‡]çN4§ *&ž0a ~øuÔ¨Ÿrcൿñ)¿‘ÒŽfUíê<_Û ªÀu_öÚ¬YèÂìÐÌw_¡þñú¿¯/ì+<ͱb´{'ùwöÆ¢A)m½¯Ëº Žäz#Hõøõ (Wå»$ÃÄÞvA¼WÜîÄ`P[«xà<¿x>È„‰±°½áµ!‹«Í†^*ŸOO?›xÆS죘6:\ŠÊ®Ï‡~¤óı¿9І\j–rj…}Û…„ˆÊï ð‚H@HL˜Œž ýRoƒÆr7æS@J×UHªXs€¿ŽûñŸLHרUþæßüú³Äýàºð VôN‡¹ˆÁ²—Ž)UÑÐÍV–ÿ89ÇßsÆu àYòu–_^¿9C½3 Ž÷yZ+c8Gh>†r2D¥\yÛ§‡¯óól¦yOàcâC¶Œмm¸ï‚-gˆ°Õ›£@$ÁEÖŒ” ý!+()e#³Þ8^àü|l¦ËCÝ»€¼'ܧe1ÌIŒ²$Cµ^=†Ð71´ÃóCz.縤Â:™°šoÂĬVAg£+&uô0å‚ê°ïâ»é)E”Ò¡è?¾; £æ «u |N‚‹hã¼·`ƒóœÿ:þxd‡¡úÀeh*â=Awòï~_ç/ǽ^;>_|p”—c¥¶#;¤E„ÔèÚ÷ èÄèÊœX> @EŽ=(s²h˜O›¤Ï³ô|,ÁÓ|e†2"‰´ uŽïÑíu_ð 6(àá Žïsë ‚}Ûmw@ hJ.D¦é=‚:yŠ;~>“ndO±A½£RF륤ìÐdÚ¹ºMçùþõΔÅÁN§O*êÖè*øÈâª3‡|Ûvâ?jyök«èƒÑ¶%@@:G‰&¸a±Ÿ:Ô¼S\GÄÀ.ø.„­Röì s¡øInF$ˆÑ¢(àqß_vL£"ðþõ ¿ÿò_à]À¶6îž&'fá'nÒ±¯™ǾoO!ñu_xíÄA½VHŠVì™|f® uÚÄ$áu8ïŠàsÑeï0àRæØs®ÔUa‚ãü.4Iˆà»"G`^è=Zœê¤ù¹Û¹pŸn>¤ï¼mO¡:Æ:7Ô"Ÿ‚ ÆÀ»öx×ÍË*‹/¥[`Duf‰ü_ÿÃòç¥lØ·ÝÆ œ)TY‰Z§À9ì˜Æí·àœ9&÷'"–DZ3¨¨Ï‡×äìÅZ‹cUþ»1€x8â!,@Ì€Õkƒ‚Úú¼m¨uå1%´Ùᢳ<#Q½#cé! »‰}ÿÅP–¸¡ëÄìÍð‚(΂åôUÏå±³7äLî̾eŒ:-|‹±œÝÆòC)^è‰rß”¾•›ªâ t.®•Y®t`q½tLÀ)T½'ð(7£B·ƒnj2˜‚zVZ#ÄmÎæ’ß”ûÕAQé}V:x{yXOÌ7O×¶²^Fo”ÝNãJýb|¦*Fµp"Kûƒõ’r†`öb’u:Š fa&Bnp<Äcˆµ?ÿ1…Œ‰û¾-O„ž¬>ô5-jwZÎ ½KÜ3`[nsÈw~}˜¬iÙS©¡Ï[¦[_¥™'Æd”s0·Ö/ä¢õZ±¥„V Úm¡`Æcš½óÏÝ]%|i'Ìse¾ò㢽Ômt”óætͤÊsNSý1ühÎnj©‰»0|ê:¿L&jTÜ>¡èhå&~ô(%Oó¤b ¶ŠQ z«˜BµTŠÜË`ª}±@«ÌÝÖ9-tˆÏã7”›¸þè(®©}˜'ël‡FÍ4‘ÀT†‡m;Ï‹9~™£7ä|À9gï*Í^œµ¼Z­ÞèÍ",÷Ã{∈µOhµ#$o%Tú¯1Ž[áØ®²  ©zà¼oC˜7ëPà•ð•û¯aÏÇq ~3\þu~!qƸoˆ> XöÊy~ÙçHNaÑÇT2:ïPkÅldm­•@Ú3j»íÜgòØ;CÌ ü÷êè#éCë4k;ÛSFp•µTôVÑ,œ«ÕÂð¶1¸'5(èã1íêRýËÿçR]æ L÷c4þ=êÉD½§¼!ëó±9®{ÔEL`£MÁů8B̸[–‡'®2Aï¶ô´Ãk;2ÊYðXKýw–RFt_÷^Ûåü ¿_(wƒjGL q Ò`¹¾ù‚Ð=ùF½3‹dŒNuSl»Ãy^TÉ:«¼\r¸?lÏsIÿ 1Âňëóõ£x&Š$§¥ÝœÕƒËãaÚÂý½“Ûïð½tžŒñí8 8_pN¤˜-š_¨Nå ÿùØ…Ê‹dÕ¼N¦6x¡úbuC«/Tmžƒ1ø"RÎm{Ë6ð!`ô'rÞ/8Cq–!Œ•¨·®’<1(;MšB¿ÛUïïÅøÓ’(h~4ó›˜iÏRYG_vybr±*}ëŽ'HÑmwƒÞ*Žã…R •YønÍ!ߣ5±¥4=<pxF-Î;@¨·¯­aô ^´v[ˆ»Ùóñz$¥×ùa§oq´j„`ø]0@èGGöŒúìï™"ÁGBpÇÿR±½´Ú C‘·„ÞIi€]¬>0…Ÿ¥>@GïxøBl°­$<“€;ް°¬È¨×ȪºöJîØ¸âŽf![¥Th§<{Ô8œóó…(…ÏÍ0x&‹ÉððÑÖçàl¿$å"öŸr ›í²Ìš6¤DR)…æGYê8ŽE91áü|vW9&ÎÛÄ,g‡¼+ÛýétÖãh; ù›óu%þ4ðàrlmýBP@ ø bÑ©µÂ§Œ>¿ÿò\?>…'ß7—K"{ÄŒMfòNRà²R,l^¹ðc"Ї÷áÉ:q®óõ‚´ÞÒ11ŒÉ¯Î’wíàÁ ÏÅG?KÀPf¿÷Fw´—h-?M<®÷J†”©.Ü ŸÆÂw:Ï:·W_é„!ó"F¯|0•Œ,#Vð ‚Côää¬*¢Ýò±b€>tÆçŒV;¼Z§v|íH}­ ÈyÇìŠÚ/¤´[ÀPB½uî´G9Ãç¤CÆ÷¸N‚·ªzRgZÚ7ÜWŠÞ¹8ŸƒªèÑà?Iê÷Ž JpäHE¢Ú}°…6áL/¯ÝF%>Xº!né6Þvø©,˜£É±”'½aßx!ƒû)€÷¯_¸ï:h6ôB‰°8¢G`Îú\VÛû…ûü 8zL`í¸>'¦ƒ¥þ‰ÅäR:~õ‹rô/—Ba…ñÖr$#íº+‹:Äm,ÁÑGìèöã…>*ó!}]Îó²ˆc'bFŸ ³O¦ýõi‡/x½áóõ…×ëÒ*Ä–ôs²Ã\`KÀÖs“ëÆP’ºêó9pdÊtÄèÎRMj;MšiüSŇË.-fY('Cá‚ÐD »@£Z—Rðu(•ñ¿¯_ð™ ½q"û{Ççë4dùI¦žuÛkgîL\gŶp’kí9| ³Á‘•x± Ýb` Ày¼-&ûº4æ\àH¸Oì¯åªPPlR ðÄ{ìiâI!ÈiCmÞ‚1qFĘm´Çâaö‰Zo¤mc·qߤGrÄœ8\àöý—O¯ãõzá.å! Ã –Îòá1þ¯ÿ›òçà=uý" Zr/X|¥ô¦‰®Îancñ4c1¿¹¢^{æE*åcŒ¨åK³í9'^Ç)F´ÎÀørW¨::ˆ}0é%»’6BJ<¶…û—i .-ýIäK)!ä€3ÓìbÂû¾™qiⵈ!aµûÄ=*µR ö@SRø~¿áófhd+CŠHy#Úüý†€NhA~óK\UgÒp‚ýøƒÁ]¶ Þ¶7|$ÕôÑô;A öûEaœª*ft\aqºç€IDATºS[­OÕýàbêmm Zdur™6lv›· @žN@mù¼Øh‘ñ¼ŒüåAB@@`åìXñˆa9bŒÐIç¸~ ηEõÉ7?$…!P‘ÆTaæ9À ‚åtPá~ìöüê§çµãíÍï#Ÿå¸œÌ>Æ'OÃY\±‹Þž¶ëOj°Ç€O™¼ŸÑQGµY+}k~Â…÷ j6­«}rÿ"Æò‚Þù5Ny㷀Ѿ³[x•ªI… /”VO²Š Ûí‚C½ˆ·_‹åå…Yid½h›H[bXNŠTõ€‹ê3z+`ÞåÆsRmO˜_H‰•LÞ(Ç5zJügKå쟢F¾ÎÆ‘ÏJä#ogÅ›’µµÐä+thý¥kîm0N…Ò®Æ Vë¥éú”ä¤YÄìTŶ%4Sía|*¶Í óFì¸Äs$« izÄR0s ÝÈëRt’$ÛZÖ3Gr½“åöçw¹8Ü킘;¾ß”zñÂY±{:”V Ú¬TÁ|tš÷JÐ+©·JÀá| –¦žçHÛÆîCi Ρ|}0:»v̉éLÐ`óíî•VÒf®tþ÷Õ2Kj¯˜˜È™&ØÞÈERëÀn“rúà‰šjÈ’ µp—m¤EÿÀqÑGS¼5»×îY±¿„lçªð‘Ñ£M£"€#%Ç=DPÇ0J…Ã].òlä¥2°BЈrp)ðÒÖÁˆÃž3ÕePxø'`)&*@½Ã#!°¤:3Weއr6¸í Ä`eò-­sßxï‘ÒÊCwØ÷7¼s(¸ÜCìiG ißð¹>„¢ZÊa Ñlo¯—)Öz‰ |ë}c´Ÿ©ž™”XdÍ9¿mPòÞRH&t°Ë­—Æ:ÎíÅÏë¯ÿÑ?ýó0 ú·Doß¾ÄJ·,Àü‹fÄÒmÛ(ŸæœV%`\ÇÙÙ„ βœsO°ˆgå<8;-'¥ys~›uöm‡÷­³%[»c|ç5xZí|XÇŠ¤d¥ÚL7Ä€´oðÂ?ZûÇŠ8C3˧Á ½Kæ´fÎ1•&xòÜ)!¦©1øÌqšÿøQ(P§6ÇOP³¹x $Oô2«‰nØi¹Ý>Ûi‡@M¥1mSÛÍcñ@˜OÈSΉ°!à¾É7øèÐ*;q†)*dbLµ!fîöý@ Ñ%”vÛŸobÊ|.7X™0ÓÃ}/á•O"É-fT©ö‘t˜rgL3½9ˆŒïÏk*ÅÅö„OúæÁë}ðÌíj¹ò ‡NðÝ…zšz·m£IVœwÈ!¢4;GâwhÕÝo¸N{Á¶¿™·^Täú·ÿ›ŽÞ%ÕíüWÛ@Â<É_¬“3fÑÕÒü`Zae@N'W^Á*tïQ­ZÚ&cV¯ûÄrInœ6¥žƒ3ô#¹ ˆ :‡ÏõùfÆL#­ÈÑs´c(‚#>ç‡yÊCáMJš2áfâ®ë‹ˆjÇ(ÙÚ ¹ûçù¨l 0˜$ez ¼GŠŸû÷7ת8^ úuªE¹r¤G'o@ra³œ>ó#–rÙ¸E÷ŒRNjæsMÄ^æ $Áôã:±ýÈŠ¾¯‹I…. õöÌôÇ”=[• !8 Ó¤/Î’wjÝ\«Õ–ô¬B`)eKä*a2ÎÓ;±¼ËKl±ûƒÍµ¦wN¬Beê¤öoÖÓÒðÓ˜áÔñ%2ü:(%#ö9žf&æ m”1{ -ÏŸ;¦„à#®ëÌIjBebFìïy÷úë_ž¢‚Òã¼m”ꪠ6ú<'˽Ž"—ôæ·QÑ/AÆ:/¢]¥Ý˜£S°"îϲ‘–Á£ØÒŽóþmgÅÊL·G¢Œ>__ؽˆów„©¶6ø¹LR½_ï7ÎÏIIðð¶Dö)@£›»jоùgtf~ì½B¼Çf(¦»é¶Å…ð!Õ0û C‘_ê}“×ךÜ4¹¶^¸DÄu~pì¯ç@.•ÄhyõÞ1À,ûˆáäQÇ Ÿë¡qS€ÓƒêŸ}"m.(îß'â~Àõ‰:B ÜÙ€9)+ ñ¹ÀF‡ü‹ÿù?é#]\ê$»y\ vÝ$9eø øúÜØSÆl}²êŽ1^p7œ£ƒu;2D…8pÉZ® <†#¡Yû±ñ¶»?†… ;³~n^H‹ž *ºRÊK„óþ‚GÀ2²¦=DðÌ:Xãàƒ¹‹‡^¸”Yžšïf`ÞÇ! ‹ú¼-Ø@ת ×ù›!E »+ÙRæ_·Y´4 ðÖ‰Luä (‡c»;Z£”vt«Ð-?}¨HQ"zìoˆj%ùvZ/æþ$Üç 0]þ9¢¼ˆ1¬“c!KÁì g‚câî6>ÐS¤ê½$,Ö'ƒÒu` âó‹/Þ¨í–éuùO&äz›×º`°Ä:ŸF„ËÊß__¶üuضˆfdÝó:=ññ”˜{Ž8OVb°åª(óF×}˜µ=i†W°ˆ`0:38HŸŽt›>a²q> v$…¼!:ÆãÎAIæ]NĘxèÀáëú‘wÜ…)—X#Jðkß$â·‡’¼‚-YtQùÔ΂dïêÄU.ùNU*¾”‚c?ðùËoŽñƒ2ÓZ™ÉB3[Þ”JÙuŸæ#I¨£À •Ÿßˆ‰y@:IŽŽÆÝsÁSnhûûfÐ×´‚ëµoTP»ë¾h.=Xøõ9PKEôG>p–­w,úÝñ¢ì·œ'š.àxÿ‚@ñûë ­7f¿ç ÑqT—"w Ì¡=cö×qX·h¸WýÀu%×΄XÁ ¥ô ^–ÿ÷ÿ×ÿ®D¨G\÷‰×þF¸;¶×ëÉ0÷Ë÷Б^›ÅD‚#‡¥'6‰-ó2ì0¬ÐÅ1ðI„4ÓÞ'öœi¼úáª~½^ÆÅrÏØ¡µŽ—-݇NT»MY%5æMXøµù6ÆP}ìø«Zp!`Ë>×o¤¸£6Þæ"¬z{§ijuÌ/PaOîŸ@àõë…Q™“ñí"µ nL¸¥ Y¿“ÈTáÆœçK2Œh;-OúëËþ33B¢O ×Qþóª6Q…:’LÅ„KÊüx:÷Qs4ø˜˜š¨„£t—)kc6 4SEôÙàý†1îo9²;©)§–<ß™1d-àžBlk:×ÜÉKÙ<ãÛä{~õ˜5‡½ôÁM±Að˜¹â…£;»DÕò0œ"ùóg̼©T‚=’N™ð)aÜõé*;Hœ¦&žNˆ1X»_6×w˜Î…¶?q.`Ô½I<ù3¼öŸëä»Û¿%ÞÏ]‡©Y±‹s~þ†¨£nxïNšR§eçL( ÓÏci´MxŸ°m™™ ­ÁÅü¸®sJ¸>'|ôpÑs*¬P³ [œ·ìíÉ€,’Ô0k´«!y;rͼ`ÏŒzM9bBQë /½V¤¼¡wÞƒ«¥Ü,@-M“TŠv|¢u ×)ïÌ™±vóýþÅŠ\â#;öÈ<˜ÒŒ: Åk£«¢Ü'^¯¢äð}öÇû‚4½CN‰Ž|çXŒi¬KzâÎëÆûõ¾>a¶SÌZácF¿nømè7=Nž{ýx¡”b"àS>·÷烉S¹*‹Œ}ßÍŸûóW ¼Ò¶Ó›’"Z)Œ\èýPQ· š¯óâ^m(Ž÷¥\˜ÝBþþ/ÿè¿ÿ³Š¢·›3lf›pÁãºN“6ÙИbD¯ýÚ È9Ñ9]Ä«-ªj·'ÐûàL9ó¦c07BÁD°QÆ”ýêT¦¸õq‚rߨ­@„ÝCæH](oc‰¶í09Ýš<(Hm³>†»Ö˜ý=瀊…B chGŸFÓ»DxÐI×î7t D”r#Å 5”Á˜t~»n^O(–ûz"z2ú‡å,à) è7DE‡ J&<`¥ë“¡¸bnUïl?Õ–ü0¥5óG1÷u¢u<[«Ìs° eUþ99SßÐËým^¶šZrC¡‘#3L’ÞÇAiëUÌ“11,¿y%Bê’ [öBòt3ó@µù1Èž%öœ†D7D¾ZÏ4HM`š¤á%„ÀF’ªÙiY:WÈc\{ëÂ¥r/íY$€¸:¡Îl„ÞÐ[¥qV`c1.²Ñ-Ô)°X™é£1xLL±S{§C±î †ÅŠv1ì1#íÏ1T<¸,‘tqAx`½÷µvÄLZJ‰¹ÈÂ…íöf2X€ç¡(>$ìïí “}:ËT€(¢‹ð1Ò :)WôÞ6ñ¶>$Î~%õÅ(Óñ,ٷ׎ѶÄèשT*íûS1D8ÛVåRRƒwDU‹í'DL’çèbÓÄ2ÍÏ@í7D¹ðg*A´t½œ``°ñ,cÚ˜Ó£áYRðø«_¢ô×2 ^û/ºksÆS8úÌéé›I)ØÒö{Ž[‹Ú(Ê?Õꘊÿ[Òlɶeçac®Ú}ïs3S]ŒIHF˜ š‰¦žA¶(¦RlÈLF%uô'ÞOμq¶»¯rª1¦û‰)P¼,î8±·ûZ³ãÉÿ|×òŒ§c)rÉØâ‹8ë ïÌj±g øŒn¶ŸËé‘0úÈLöÓ;Ç\6²ˆÌ*˸Ð>SóI9ç9µÑ![{û—9b À—ÄÇÃöz6¯,³¦ÄÈQ@H!‡B7³Å{÷Èè™U½õ,$î0°7'$ÐÄXʆdc/牆ßÊŽ6+™Vž´ß%î.ê"JgéD,Öœ‚.Ädc  ý0òةĜŸTŒ,rŒè£Ná‘¶½M”R¬H¢ ÊIÀ”i ±Û8þ H1ëÄ#óµ8㜑Ï‹Av £í¡ÒõS ôF2BˆäÝ;²R¶GÕ¥&ß󆣙þ"]ã1 8úNH…àg]ð*óTÑ®‹#jKT >À)/úó80æ4Ãp'bŽÎ‹ºu¢ð³9ÆUñ*;~]èìÈi³€½²(\IaÃy˜£¡uÊ–KÞð9Žï2F7´ZZgDÉ–æ½w”m¬c;„ž2Ÿ´.»x†E+üÿú?ù?üeZ&zºVûhl.IJÅjeÐS4¤…áM¦à~‚a𢎦¾ä˜AÌ~Ô£ ³©Ë¾ó"ã1 á.n=Ç .zC†-=^KLBá2òù-º`@N ½±š¯çaì¡üp¡ngñœÎò¨vYy†¥5¨[üÚ¨Àš¸€ 1y\­b6êág4ä-`êd$¬%Љp¿æ$õRj)q¤érÉÙF7ò您Ã\4få´A!˜“÷Ëf­KÉòQL¬®pÂ{.}–ÀtÆ'”-£]'Ç!BHàê”Ëþúhºú……6ªå¯w¤¼#†lRM«h•‡æœ S—Ew.l%sfm9ÑS—V•Š]h7ëvò. œ*bˆÞÁGÄ{mìf†bÌÉý•0šóÉ\€1xlÙ=M]4F'»ª3Ã{ßv*ªÓùâX¸”!ÿjœöCÕ6ÏарçH< ½us)g`âÉB÷Áã:¾ óN~äïrƸ%õ:!ƒ"„Û¸zó"îƒâÌ©ÜÑÆ`Ñco1ª¤uîÍœc²˜câÄ /¹‘ ÌQVï()[.š|{ …Ä8Ý^91.óÖ/l‰Dç”âc¬»…Ó ¢ §öî Hµ5vR}>ÿî ãfä­EÖ›®‡á¶Kk¬‰¼ETc¦©(RÚÑÛÅÂʽ5äá‰ÑŒ~kMĸ¡Ž µžL%uìêzo–“1Q!®×E |Ÿ 1Púê‚Ã3ܲý§WmôZåÈï×9l1§ Þ9„Dó`¿{Ρ䑎#Çц’;B„>DJ­éÛ¶=“o S(ýO!Ѭ«Š«QÄç°¿^ös~P/JÐÏãD 4ï ô! ]ûþ¢$gÈùßþ[ól\íT°ï;ç¹Çç™Óz¡O‰µÓnÊ×ëÅŸeq—ßÜÍÇ[Á B.v9¨ÍÚ9ƒu´ÆpžP2֏ޓäÉZüÐsÌ€Ê[ïP¤‡W¡ÊJeaÓCÑàÃof¥1Ç3¨ßÌÈÓì÷žs`O/íàîÅÓ00 GÂv‡%÷–p!g†Ðöêá£@§àøü¢±rq¾î¢‡ ^ÝpÞìÆ"Áö¦¶ÆÀ„Å›]U¶Í ‚6²Y÷¨ã–+1³Ø™*‚p£ ²ˆùÎ ™tÃßHq@XF’j¨[wžƒr … |IØ1Pú罇Sb*æxÿñ‡…ÞÎïo*ÕTIèK1{Q)åL5ìB1¯ ‚û³5¹¸£ øÀþ6NÝIŽ7È{î§èŸ˜?¼-»SœP¾ýˆ8ÔöfúÐï Ã-€=@ps¶gÏF…˜Zé|ÖNÞyÉXá3'|IVq{æ¾|N“K+Õ„JâèU”\pœ—.?adç{|¸ÖÄk{™!S©ô¹ï9'TÙ¼^<¥¿)F*üE9TNÎV¡£[ ò´]/W1µØ}©°qdǯ×>Ç/.ï[ƒÞ¤Ø|ÏóxŒÁ©Ð›“o ññmI¨óéJSæ%6º=³¿íˆø1ð )=À×çâ q£YáÂç6…ôŒ’ï0¶Ö)׿®ŠR²!¸C )`Ãóèuû¦øJȤÿ¸‹„"ødÔqf$9Çp¹zÑÌùzïøªìZc/%ä^]ý@É;êe°EçlÒ W•r[Æõ}À¥Ì…×ûŽšÅG1Ì©˜³[\DbX×èØ·íyDØ©Þ1Ö°Œ›)Gʶƒ£¼|-È¿øûÿQ½8sŽFªVÖjDÁ™mÎe[ ã4¥D5Íúà%o˜¶à­µ12‡y@ôYÀ^9/P5U@%Û¿7øcÆ4­q2,uïÛ^ÐÎ Ÿ"Bˆ8*[&,Áì·êЛ®bÅXH©p´à™-\[¥£Ô™âíe‡¨ñ`XµÞ s€c+§¶WÑ…˜ˆ[¸eˆs4ä¼C••ÿþÞb•a«íöùà Bi,•W{ÐßÂ1Á‚"åÀqŒÀ:o6“]¡`ö >&£ÂE,ŽÔC¢Ã¼_ðTI ¢9ïÑç… LÆ‹!›Öýîë{¤{.Žª±ÞÊVàL9{Ù"ûžíN3/áVþݾ˜(‘^ÎÔ€4‹­;6y(€œ7x/¥—æûןv * æüTLygÊB“|éêPË‘QÌ Àqñmâ¸ßÔNÓ¢€ñs»GŒ;a}ŽE˜Þ ÆPDÏ‹QT·ŒqV¸ÄñeðÇñ¡BÎ9ôvÑæ0íˆUªavKO$m•@KqÂBÃ0ìËøź+&pñ{²x°'Ÿã'ŠWy㨠›RÉøw5éöX_å ¿ÎÄûч g·²À ¥ÒkLÛ9ÑäëTÑÆ‚7DÆœ“qÅ·”܃w –ÀªGíÌá÷&öyÀ>YŽ—F»Lée¬2 „[Žötµ÷ûR¯_ßøúÚ3a¹+kM¼ö·-È9ÇÇs´&… k-ì–Ðr0'ßùtKæ!‘CµûD »UÚÆ–ÂR.ùÛ…œ™)\Ÿ“£C•åw~ï¸>Ñ÷9àú0„/%&³æm‡SÆ ìÛÎ3.L7.¥³Sr¼m_¨í‚‹è“dä”q¶Š éU°úÀÔ‰ÑæpC€mãZÃÿûÿôÿ—à 1 Îþ’bPB‡›‘ã<ž}ßÍyº!8³P¼ö·u*¤<¦’Ø‹À¹ˆëºèè~À[Þ°ºb{½ ³)$xì¯/xÄm¡67&—‰„P:“w–M½°—/²t!¥qbVÞ'8§(é…h‰rXißéZ[ΘJÄ÷VvFÀþ¦1!ÃLjržDn€Ú²hÏ‚bÿOnvÉviÊÃT ![;}g0ÀÉ{o¬«{VìBÆþ~ÑM»8+cbÛßH‘¿UKü\˜(È—g*s™Iö%[j)à"y8·ÏÂÅÄCØY°’óp\Œð–wá@íûÍúóc\JÞKCJ£aˆwþ?ç-;ÀPbæÀ·Hït>XÞé*–bäJøÍßJ®jê(Ûë !:%_Vî< À¢Tì‚áŸË.J˜V¨TÎè3"U^0b®yœysð˜l}pØòÆ s)´/”œ8†i¶3šíR E¢Ñèèæ˜ÖÃ)©©D]¨eBñß™­?êÀe/ó­„»÷‡T.:¥ÆÇÈy¼íDY”òø%úhDËLËæXë)øÔÄÜËQFý~}Ù(éîÌL‡> ¹îQ™bš¯-’}—©É–=ßeßÌ Y0”4ˆ’ ÕV½Óó⩲ó'*áÞ‡©ãÅ…€m/sQt úìKðœÕ4¬0Ê4Í9œ±ÞJÜL½)Ø÷ cpÔÝZµ?<·¥×ÛÏlû½U”\Ðê‰àZ9¢³ JHˆ©p’"ü»òˆ (¥ Æ/ÞöCò¼cÎylÛöÄ…‹›í‚ËVž³fÉÌw‚›SB¯œ ”œ1G‘i{QHÒ¹s™cÓP™è°dš§Šab¹d¼_À”2®³ÞÁÿGÿì?ûK½NªIt‘˜™ÓÛòâŸÔ³9ú¨˜SÑÏŠkPWïÃl!³â¾ÚIÓ¤óY¬}Í œyûàp~>è­B•U×íªÏÜ|4*¬–ó†ÿXÖ~z LÎÑ—Rÿ|ó^Þ<#1[ÃcôŽÖãV½C)Áfâ>x”Rp|xuPQäD>ÿB³¹¸½¸Š§­@%‹.sä 5åK)DV‹XŠ>:ú"áÓ;^eÛÛ…ý«p­rÑÜ'ã#=s¥ç‚í}Xu0”;œæ°hýÄ«¼MƒîŸð(yNb{gYÝPKRTæ‚ð³^†q9£jΚù÷â±ÌýM‘ÒÏ-Cõi Ø\=¸î&Å>‰tFWöór/ÄQƒXè‘>³z± œU­zm.ÂF'/ª%h\”~Îi±´Ê€°ib ú0­J}p%D|X(”“ßȤ¤”0V'›íóm :ò½|iæó Ç;‡«V”­“Š9ï™…ejZhXj§@92½17Ü;FÊÜÞï<ˆœƒæÞá¢ÇùëK)wö>â¼.2œTYµ^×3ÄkA½Ž"‹¹&RtOg³°¸È/|Ç\ðÐNÿ—‚¹!è"ŒÓÁaö ïÝèm Ä@ùì¤ã=åˆ>&¶mÃqç¨Ûbt-Û•.`{ïüÙiûBmÓXú£|ˆˆÑcŽãkã]›Si,”ÖAìuÏ¡ G,{ÍFï¦À µ]O>‹÷A-úÕ8fÎ |ò6B¥"r)A˜sLxo0ϵÐÛçÈóŠÑá:NC­§»X0µ—#™wš‰ùõ~aMb¦zoÈ%#«5¸@Ö]·Q½*ÍÐγ;rN°ïobAM ÀF^¨èšk Ô«¢ö½5ørB ò¯þõÿ¬TXy$ñ¹&¹Å y/v3j<Ò[g*¨Ú*\˜/Yð÷rõ¬X“-r‘ìáo’;U/!ào¾Þøõ9ÐÛ…×ë`M–K-Ž*©”²T- TOÙ¯1:‚ùr)Xsáª'¼äO É©>9¼>®à·e9‘dq¶¬€gk@æG¿lÉý㤾ݳK @ÝMúLTZ ЮŽýU0‡â:¾ÙE:]É¿²½Š.”?Þ8ÿüÅûÆøÛçašcú  ³Ã«ä¥Pòr ŠmÛ(ŽpË…1¬‹,fˆxèÍ?·×ô6Wq¼¼¶ÛmÝê%¡Yî^ü­>áýÝà«< ¤Û¶[FŒí7ÖüIü[7fÛ…¤P+“ãQÌB!%œ¿>ð9¡^‡U«Ü¹Èò–pŽ1&@%™7qB=†¡Ùáû\oc$ïï{s›ý¸ä³§¤’Pƒ3ê1kƒŽ õŽòåÑñ7__øþv·oû–vµŠh’ï”"®ÚžñÌÝ]À*Ô6;°¨âI‰‘¾.D¬Ö!ž2y.yìß“€œSÞj<âqÎGä”ðýùÆ{ãÍrè/””Ñ»Qš»a1œÃ^6×Á¹~kð>Q°a£H'þAf0v0Ý®w<®Â§_5 ©ÇT'Š¡UÑÄ7<“dPz"L­´d’ÐË#PaÞÅ Ø;ª „ÀQ„`S‘`"„«^9Ëу8ZLí§’­¶mœÒä|^ߨß ^|Œð6)i¶òÚuD—0;eî(vb/;>Ÿ1þ€üÚ85x¤‘l*Û›l…f¿¾:‚ ØÊ†¾¿¿Í`ÌÅ pž•dkë´ïðnýÅËó\²‚” ‚¶"‹«· ûàó9x@ôIà¿÷ü³¿´Z1ç FDR¤Ö×'‡ëºP¿Ôó¤\n)BríÉÛª7&ÕÖà… Èó¸h R¡b ‚<÷&g뽡·Žóª\¶vR%©„ò™.×ÖÚyÙ¡Ò!Kà9jí\xé] ³Jå9BTØá˜3Ú‡ðüócuÛuXâ—ôAuˆž7¶£·¥¶úUµV‰(±¶›út0RÜ]è\Ìjh£Ñõy£[¢-ä\ô¸ èÑ×€^>ä|žË–Ò·æl¦a†BíÌä‹ÎÞ)l赡n:w¹Ñ88¦F<&Ìgùz“ øŸK@üÇì&›Äóó¼›¶5èÚ2È"Lûožž1»ùhX=SFH}ÿZ }Uνû@¹PÍ—"QÖ½VœÇiKyŽ]½Ô‹/ËÔÉq‰rÄ¥Éíº0[eñàµmä¸ÙgCþMýu/œa9wô©ù^~‹}'˜½£l=? P°ã¡yÌÄ¡µ]ôP]×E”úÒxw^—ͦһ‹Ry¶R(|°%(&ñ7ë 瀔wnPf 3< €WÙp]'Š ÁF1ÌË¡ˆ¹…nм{‡ðwû¿Â˜ÿÄÙ]™Ç6êñ?Tc½sãé_R¥àB-‡"¦ £ì%sÿ½%4N„À‹c=âÂgN0jåøÚEÒ‚ƒC«û¶SÕùÞl§ó›øá™ßËÒxFcÞ¢touZÎ…K÷à‘=#!Æš¸êœ³añY 8B,ú6r¤œcä„Nv.ð €i;+B5‰I )a§|oR)Øî† º´ôÊ1ù¯ï_ôa"ºøì“ó–1gCÚ²!h8ƒI–ÝA¶ <¨bûz“.bdÙM^ÈMóž“hÅÍÒÿþ³ÿì/÷ƒqÖ½ Äfê!²5Î%Ã;.½î*Ç{~è!sRv#ÂlçB ðŽË몖½À¶˜™ï׋q–c xâã5(BH1<)^Â1&ÖH‘žŒR²¹jéÔ…ÐÑMù/™mß¡6Kž«ÃI´*˜/ám¾=LÓë¬ì…óGš§ÆcôÎÁÃŽÎ]öPsÆ=³Ä9„\¸òœ÷ѱ¿ßæ¢v& ó<0{gìælX9ÔÛ¶a¶; ¶äçNªw õþ<íàóÁl6*ZƒH®›˜ WÌÜ&*H™Ù:ê³ãým÷ÖùðÆÄ…GW,ëä6@M›£ª0~Öí¿C$×ÏR[¸ä}½_è‘âX\ÌNzìݺ‡T ó*µëcQž“¡qÌ8ªªT%©uV²Œé†Ù·&ÔçcÊ*µ(g± +¹Oð¢X‹£¡»pº®“WH£?qÆ7˜±~·?¸{zj­ô;ÉýÛsü»— S˜ŠÞRÜž©µæhO£Ô¯ ™‚ EfŠÇRcDˆ ­USF£©BL­ÇÐE,øìÖÊsÑÃ9ÔÊh]Ψå“Lc“Ï%u«L=¤ …KrP}&ôиబÔG¯/-fºõ>òâ1³7,ó(ÌÙ쟿•Eìl¹+ìöóßÝ2¿3ÜÑ÷3z'’)(c¿…!€¹ë<Ñç0,GpµS…5u<9?ÁGøè!˜Ý ¦>µt, gèã¤Àu|0{G•“ðB*!í€9•]ýœ¨m°»µ¼ ¼¶²AƒÒÖ¤ä~YR¤ƒ³1ÛDk¡x‹«pH1£Wû;O› ¯²£v’‡ó™:ŒÖéÁ±Ôœ UX„«uPÊfU‰IO­2å{¸Æ@Ìõ¼c¦*&ÂÊ»˜Ã—ÇÐÉt0<æªLÄêõB)µ¾Ì×uÀ«pKT½óhge•.@Ùßpâpœß¶œV×\pÀPL0Då¼*Lí”àª'Ä:yÀ.°¥ƒ¹¢3Âr ܳ`»«•l ݨÀ 9VÏå{žç=–årøfð˜¡ÕŠÕÉÏQCž1Áª7%^¦ŸÏŸD¨pn«s@4™h×Çêjù×¶ tj‹ûÅ„Sgr\Å×׿~}Ã{–˜‹õ隟C‰³óßp6þ “ÓÁ‡1;¼!nl´·½ð9ÿ&Ùiçqb/_8Ž?±½^½¦€ëóM†Ë*¿9^ÁýGï¸éâ`Ì4f¢œßÓâ&‘ïÓdŒíjv°êù»Àåqr}YZ^ôWµÃ5bM‹e¶ÊòÞ á®ÐïvGœ_XãÞ±pTú»<ùhÅÿ™š±¸§WDŽ &Ö$ "½aT*Ž|`õuðŽ0¾›}w]‚ &þwÓâþÚpÖ %|>'S8W³ý]Ã?^¶\¿Ê>ü„VݱªW ìÆÝû91FV ¥Œ±½6|~ýz.¥ã<°m/ûl“&½&ª%gÇûþbìp «8ÅõMÚ¯O‹èÕ§éÍäè¢H± Ö ï×nc-޾ú\üsþü~V ___øõù¶LtUâD¨AïÃBŒ&òöB¿ˆ_c`©­7¹¤- šyØctæf¯†-QúÛ*ƒlýX)ªI+£÷}!Ðt ¶ë™Å—\lVËÎâ<‘Z:'⾡\"/x¿ÿÀqÔE[<âƤ¼à_~ÍÍ@fœ söìC‚މœoiÇÕŸƒÎÆ ÁEä’p}Xì_/ˆ8œŸ_ÜëˆçHdiß1j3¹ªE²Þ9äÂÜóò&Ô×÷Q9[^Š ™ÞÀ‰`êšø‡ü*pÌ/Ê|ó ÎvÙ‹Ï‚s‚Þ^û½O„è¥×=†¼«2¢< :é:ŽZDΚÛ– ÎCbxv;Ãà€ž} cyÕÝ¡©:•—¿ùZtËØę5ìð4™§ôØ ÅBG«ÝæÐüŽçˆÞ-JÙ󃋷s1xoÕ5»¢5Æ“=ïÌ8•·‚f¹ 7^à’vÍeKzAÞÝÎFFö/£äªR×_¯Ó~‚õ\KÇŽß åÊî÷óÛnaë~‚¶›¸GŒ0ióþbœ.‚³.Åó :­_Œm^ƒ‹ì;œÝØMs-øÌ.؉ÃDÛÏ?"múÕS‚À£Õòë¨b\ƒ•?Nîìˆçî±B ›ã›ûÖÑ?ßÊýéÍmã(Œ„šØâ#Uß^;êÙ°”»ç¼0u j3K¼ß;1õÿÿµƒ0ø]E# \9d³³¹ WæÞl¹à¬^Û ˈ,¶ï‘Wm֘ؾިׅè½Ñ6Br¤MYÀXDŽÜ0טFSŒÅKQÇDÙ Îëƒà2}tá΃çRRßAµ™E˜ÞáU …ˆÿèi6\Pô~±`tÇy<0YIßóœËWáKuYJæ_Ÿ¸,>—òŸÿ×ÿƒ²Â €_vk.ÔV|²qÆÂ^6C8GsÚRZÿ[«ØöŒãÃ*•Å%õæ:ùÀ,™}3Èbu‹¬|([`ÀE;ì½÷øœßH±pžšÙ‚x<^P“eJe‹¾aò–ð]W}Æ"¬|6‹È9Xp̉-ï8+/ê@ÙX ÀDô†vÁ³]\â"~< °®€q©­}€ßf°xŠ ç<ÇvØöó‚¤`=^wœæ¶„ñëþ4T4w8NXe•0Mò7AÕ\Ù †%ܵvÒÿ1^Û‹ð@Ciø@Çì½ãVÉĜMr!§„Z›E‡þ|¦1ResÇäâ.œmÞêÄÛf´VÓ×CæíÞ|)÷˜kª¢XÌìßßÿÀJÄ?‹°ÜÀC/xzŠö×›Üþ‚`q>ìœLJsìü‡ß¿mϧ"ï…ãŒãçéÒ{§$×ZsÌ4Ȱ%3,RbÏÏñ0¨þÝà–LßÁc7”$èßò"ÇBÛ¶£Ž Q’½«Lv$Ç)ÃňëóÍç7y̾¬C¾y^Îd1 !f¤èp×_¡öKÙ,Ÿ)d^èPDçñ}~8²Š×ÅtÌv“…¡Ø÷—‘uöóKrN–¿ÎQêyÏÅœb²ï3˜2{q”ó»ÀÏá¦çŠÿ÷ÁA×ÂþÚq|¸cô1"‡ˆ®A8*›6ÞZJWÉÄ$]•Š3†è½à‚Ãç8°§ò<×ùá®0P-¹•®ë¨ o›E1{´^‰jéüŠíkÃñç·)ž=Þ_/œŸóQo €ó¼Ì&Aâw¯1ÁÞ›Z%ö?Ô¿*°ç"¹Wï07˜ŸÑ ´XÓºi Aü9v Œæè³#ù`B*ôn£êhN¯× Ÿãàãßÿÿw!Å—ZçybËná1Ó5kSsÙ‰2‰ÌT¦cX¦òØ^;RJVq3gãì«û5Q¶‡:€ósqž¶æó¹Ð£¦Æq+D˜“Ô+0UÐú‰Þ̽i·I,[ÆužœC6¦ö‰Éiu-”Hçe ”7Æìq^ÙEVÛÊEZðkñr›ƒ )osu~¦yÛ1k5YjBøÄݪR)"Jı™·±§ô‡ÅÓzC·ˆÔ±:<‹ÈüJ1FÃDtÌ1±e˦n©xÏY¼ ½2ˆìL¸ê…ä)s½3A¼ ”Æ€Z/ÃEDJ§6«ÃmÛ!BÜþL{‹!جùçÈíc¢Û²ÿÆWüFRúA®˜‡€ÏÂÏ(ÇßÕ¨ÑH˜C.è×ï­u”L&Pï5ëÈY“àà”‡uHœû«*Voè«Ã!pdÄ@ø$~äÁ9gÌÖŸ¨Ž7Õ¤¥•rç@VÔh,ræhG¤èÑf'±Álêr?ÓD%ûÌÜCX‹Ëuô€p)ËTE˜]^Ñ×´4¼ ³Ãît̵ˆôi'úhõBÞ’±$íY´}9[–n© щã0ª.øÎ¯9 “(/U(j=ÑÆeñ¶ ^<Úhhý²ïM ’:èÖ×nØlŒ|m2}vÁܳ #à¶ëâ9R zë(…íh1Ræ}äžrT¤Ìç Z`Âq‚ÑÑ#)[p’áv@ˆë&~éÌP/Áÿ]°Ž¬J ðb·ŒÉŸUí9ƒy3¾?"Å,ƒ§b0oå8Éñ‚,ÐG;!•֙[½Ù(ŸÉ5ùŠÆ|R5·}G¯zkhc"†ˆ^/2ÇÌ"¡ƒBŽ#œ#£.¸€hœCp|þD=+z½0[CÑ¤É ºƒ×zC*¤ýÖÞ9öªÍDÊ<…eù¾ÝwÌ×ðÖ¹PÓã™q¦˜™  ÎJ=»¥ìÉõõ­OÄè —;!&núN­µç(yí´âGsžÇÅÃ[©ùpžJÇù¨C ¬§ò÷ >j0FƒÁyãû%î&ý³ß= +Ò+l¬µ‰T|q籡µ²‚A#ïÖ€·¥‰¥†TðÚZ¸¾?6ÓˆãGlq*v¡HÀ¤¶ûiM,n¶u*ÐÔ2,övR¾o/Ì¡¨ý„[jé€C0ù¼Ãœõiñ_ïÎïB$BÁ;¡ ±0ùð8þ¤k(¦vså6Ζu½ó6üämßö2,ELD8èN‰{÷Ãâ‚»ž»žZ?Úî{ö!`!bƱ1Y\8($òe)¹ A,.ÆpáÁdÁ¶ì:¤¸³Ó¿qÌ™Ón?:_în"Ô3Êù·Ž$ßI$pÜ€WÞ1½(ÑÓh6zGL NsÞ›8˜Ó.wOy±`>’ð½|á¸ë0ž–îGõ¥ ±\çIŒùçÀòÁ€Ÿ0×ü‰°î¤”ÅU/è€÷Xnÿý'ÃÕ$":<Æ0E[ŸuÀÅ@S°êçƒé<^ÛΧ`Ùr¾þø[zo×ÇqXN¼Þv)XB̈»¥É4—Î6)ØPVQ0Ca´®âùSÄ!›Ñì½½pÚˆi,«ÌGc _×'jö6uÝÎsã‰ò™Žy]¸Î uæ Kœ9µùyIàU¾â¬'áƒkQÁ²€^\Dõ8G}¾ß×¾™¦ž!]´÷x¸hã^ê–Ä2Ü*ü–"ØÊŽÓBº‚©Ç$îýþ<@Ç@Øwôƒú}#fï€#AlN*êtýÄ2çWæ"ZùÜpŸ¸àsz½#ö!þöhŠ–Þ¼Ä~ƒgÞ˜7D’ï] uÃãûÀo»5Ö×VvfêÀ¡­‰y ¸H¹í9NlùÅ?S®óƒ¼ï8¯× PÁÕNäL¬‘:‡ë<ฉ©Oâ)]U#÷ºE–^)/Žs ©ý닾µïƒg^ õ!§Œ"Ú\ˆžXuµg*hõBHÙG´yAmO¹ãS$Ýkœ×õ„ãy ¥Ê÷À,~Τøbg—÷þ¡N¿÷þñûrÆç?K(´CΪÑ#ÚÕ(ÿ•y[Ì`ùãÄSÜYçÝqÊô 8,¼J…*šì ŽëUE)…&­Á§€Q+ÊþæÙ”VºˆÊöê œÑ·‰ö¨ÇI“¢1nØ=™þúúƒÁ9s¦jâxgáõzc®‰«VxGíÿ}1Ü$–Ç,knñ³UŽ2ú0DÄÇ&KÜþõȈ…„”p´Þ« hpµ~ª{øAé}R¥ÜUªêÌ¢6Çý-Xçø€ÅCnȤŠ:Law3Ú¼üdØsçÔ‘sÁu?Ý„rÙÑjc× ÏøÞÁâ28ª‰”çîúï”H¶SVýx#fæ\–¢HÛÆ˜ïůÚúC?N9CÇB zçDÛß}ÍŠÍMvž‡kÞöÓøÙ¤˜"ÇVý"¢eÞÞ¥Âè„R HÀíÌ3ñÞ¦ Ké÷káõÇz­h}"¥DH#KNà8ª‚#νløœä´côë)*@Œ…GÐsR2=kôÆ úy‰{D˜«¼ÞoŒÙHõð:»õÎTL,5æßmæÞðïãÿ£ÿä?ûK› XÜi(hï/¹ÍÔ9˃ãü¶öo©°l‡˜ð—R¶†„˜“ñ´<àX15,ÆÔÅy~ŒØS:޶X¡P:'çé%o¨W—ØÔ‡“”#i—*¼ý{k¬$•™ç1Ô¥”>ΪSFÙv¤-s¹èØZ«fàè^^ƒ3¿ÑÕK9Q>(‹³ò‘ËŽ2úäËB‚¨š7daÛw„” .àõÚSy<Nl‰â`Y$|Rninqq\ n_&q€¿k?š‰T'rÎÌ6ìHfŸh“¨‚²oL¤[T¶Ä˜0'ÙÁV6í£Ó}»Ä U*¹|`¦AïÊEœ{並›€ó= §ô9ÿ›w(Fó¿Påç Òȱ<ÒA"DÁªT¦”ðþúÂ÷¯_d7™dz .GËk  ÁV˜'‚©h}­ÁÙ~1©Ò¸käm‡š{›ÏùR)g8Ã…ˆs˜:INžì"9¢mãjêEÝŒ±Ü“ô¸•/¨8„”iêì"vÄ͘ïFœÇêãá qwle£wÀ‘Ø,ž‘Óõ<zí‚"…ˆÓ¼¸Ñô$w£íZÙc¡W $l%!§ò¬Ç¶ˆçxuô˜ A¤Žgã>;ïfÊp$ªÎ.ñá]ß̸û_(ÛFi³ºŸ‡ ·KßÏV@MûÙÖê§Š9âv†‰7tÉÏNâ¬8Çÿ¼÷†ÈçÑ+x¿ßx½¾ì_Tüú|c,Eˆæõ >Gv~“Èú>:¤/Ä’é¡9š³=U®[Þ káì?ŸkÙöçó –¦Ø{cö1²R,ìÒ—mÍÕ;wÑ÷~ƒÈSžº€X2ýnpÐNßܶ¿Ì¨ÊiμxF%-ÜGQ©ð=SP-ðØrÁœ þŸüÓþ—äèV«qYÒÈÀçKÁ²~'šŠm+º³,aŽÕÒÜœ*úUYÁ.µ(ņ>¿~1öÕ1A "žƒ(‘¤¹N•‹»[Äë²ìà 2)9kç…V[²¹¨ì0©ñZòè‚'>³eUÆŒúÈP¤Ù:–XÕã.Se霘à:æ¢Â®&§B²l?­J‹8>¿Ì5ÏåaÞ¼–ªf­2±ÀÐóŸôÞ|Äy~Ø™ÏÀÞó-ºí×bÕ0'¦C‹æ@ëÌU!š'±kÊÞ´Þ¨ÁoMÔÙ¡}Â9aÖwmÏe?ubÛv„èmÚ-²•äÜ©‹‹Í«?Êì¿{Å2Ç5õîÝ0ò(×h $ÚªÀ>:–N”mGð|}aôÊD¿µhœò4NÞ ¸aËÑÝhĶp¿2+L]ëg-ëP9n!C‰¡Jd´©aÅé­ë‰„Iyã8Õ¢ŒY(x\çÁï6ˆ‰YF=¹cH‰ßõ}8*;Lx’ ‚väVlÌAÆÉnL'Ÿ¯”‰ÎE™jLê/ç-Ê•žªº&rÞè„“ÄÕEð¥·ý@›³=sšg$çLeŸp¬»z7“K¡©2ûLjȆl_O§ôø<³k¦Nl©Ð$7Ê‹°Vg&ÙÑ:/_/ÖAë3âRû?1âuB^iÞcÎIÚWÔ¥)c-Ž¿§åÝ ”¢z]裣ì;JŒøúÛ/œÇ…_¿þ¬ºž¼WÁy] F“…vžfüKdHYl±ØþK…#Úè#¦t\'Q6ÞAú“n’+Au"x:˜Y?FÇì@EsÀ/”Àˆ×,"»M ­^hmBžü#úf4U¸¥4xZ×§ÂN¶d‹%^‹ch·ÐþŸüGÿü/£u”WA­tvàíÀiŽßµZë¤Ãމüb‹¤Ê¹ó—í&-™J²E¹P¡îglÚ/ú3tLtU¦ŒYkbÆ^Þï7†eŠøŸ˜Ú9(u›¢7JÉŸ °½ß¤ín×UŸÜº¢2‘ ¤PXX g-n9*=îCTP]@S ¿ÀAào逞á0X–â&OïM½½0>dx'xí; ”¶˜ë½ˆžW(^¯Ír¤) p—ðtdð?ñð>¢l†.(&t‘,“áøüBȉ)}PÇÁÄ?ë²Äs9¶m;|pµ[ÐÖaª¥Ö+Sëœ ¦„öœà¢#¸®Žʦ–ÿþ× »8â/¢ X¢Ü÷Fß’Z5x¢¬(«íbzo¨WCÈ [á.DDÍ,%Ï k0ESj¿x`U*‰ø ;&¶Ý{k3©Mfã8õÆÆ,stpÁGocËŸãbÆ\ 1r}ô-a)¦äRpžßf*´ËÒÉ“¦çC´hZ’‰µéƒX¹weÀsI÷Á‹Â¥Ì¥r)8Žo쯷I£»ÑÄ9J\‡çþb Ó¶íPïp'‚w([á2¬(1ô«¢¼wŽ…0O5¿ T¢`ô U^ôõ¬§½:Üâï‘R2µ œ¾Ènyjæ¯9qØŒF[¯j ÷@ÎR2û6V$!S¸Cç¹ÎÅ=Qp> ^£|¾ÿçÅà1Ë¡d¦ÜõÉ G¡ØË›³ÞRi«F¡]Ô¥3UË!ºÀ[xMliCÎÛ¶!¤ ïå·¨Ù€…Áy½€ÙÙ“­·Uón§—ý[¿LÇN>ÔmnR‹¼]k¢öŽz˜câº*rŽÌé¬1°í+]׉1¨vçœe“ØhiÚvË;Bð¬L±ð*¤ŽÖz’mc4ÏRîL"^¢7 ”¯ö 4Ö3ÉyŽ–¦µçP3¢ôVŒÑq¶f/µGkÕ°2€L¥yÐFXâž›Š°acå‚TìbÐE¬Vx‡œà¬C•µÇ›yßq'V¯dýI·Ô²ZY°QðàJ9³ãQþ|âýÏE¼­lì¦ Ž;îç%Š)·ã½)ð&à¶¼Þqéìè5çPÂÆ¢B(5;Mt.ë´œ¹œÙ͌ш›˜”™Öë€Oéa„AGSJøÞíßÛB‚8Vê".êu2¨IRÚØy åË.xJB;QBûV˜<õ¬P0u´ŽZ/"ÍHÍMµ])`7߈‹Á”3Îócã4¾¿ÃFƒeãgb‚Šâs}sÐ/Äñùu°+p†~‘{4éðô|"ÜmˆçûÊÍCâ®#ÇÂÉÞûàøÖíïå…¾ˆƒßÿx£ÏÖ+®óBò}*½&+gʪ‡¾lÔA¥æ¯'÷? à!?çÀ{ßáEpÔ) Ó™–U­Ú,:úUé•1ž—ú1JJ&y&abñp°Ä ]*×m4Æuo[Ù€Eÿܾ¿¬ æ»œ"Iký,ïíÀ\ççÿÊ6»5MOœ §ÄÔr"Lº­£¤Äð$ç0ÆŸ1¡ý%Tö¹èàÕÙ9{Ù¿Æ] s<`‘´7©OAõ×/ÈϞЧDIkØ·—)][?'¶aXpÞy\p?ÊÆöòþ‰¸£›²Û¾S+™z—MB=.Lïï¿üïþ­ÞÙ­ “iºÐeZéµ0Aé­ÀaŒ…×kG­'R*ä±¼ßä$Ù2•#1~ø éa6§ƒ‚&w»ÊøZBטQ-åº}°tKW¤ô† ŠÙqËr7ø2æ}G=úM0Pbá﹌¥6îÐ,÷]Mä<3%ZmD=Dº³i3]˜êcÒ#ªDE˜Ì÷=§¢.ø& ÎÆj&Áœ³A$aݘ“GEƒ»¨Çð`'´X5Çâ9£WµØ[ðâ]ã'QLëÊqÙX} Ü|¬Q»Ùng¸u¤^™Üg ïugÛß(“œz‘‡e&"’EX¡g:ǧŒ1/^ff:Üò ŸãOÀx?Ï+ã=²8êÉÏÕ1fN)èÀÞǽt"ÇŒ1µ²²å¸…92—ãgèĈÇ.P­wg‰—L¾ÛRôÑÄ¡õ†mXh†þè•ñâ=JLÏgp;–l99ÍsJx™uAOÄ0µ#†B|€&‚:ó=³=;@Äù‡Ñ”˜¬x`žzçÉï~VÓj²½[ªØ"ñ÷÷÷¦æÏbW˜rFtmN:Íf‹vâ$’§×ÉYêà$UÛóBœÊHƒ6RÄy^Ï($ ¼Äç÷w‘‡¸Ê·íe©„ÀÙJÌ?qÅà9}™?D ÐÀç¨Ï‰W)Vð™_ƒ¦Â5;^û ³›*Ny«2¤õW)!Çj ˈö¬r~Ñìç±Èž•–‡’Š}PfK‘ž‹ÀEw.›˜ƨðRFκ˜QRûE´7 ¬èYÂ9SÐ>ºo/ŒÁCNÜ󱄎WšµRÎV¡ „ J—ì-Û!P,Ë\òÁ’ÜØ]8ç÷ ³“ó@¥Õ2e‘ˆ`˯GQ”bzcÃPß>0ÐeΉ1i£zG7Ê1 up‹ Žào•ψ–,¹tൿ¹Wê ûû û{C½*^¯ £2H':¡¤Õ’oˆÞÏx[Ÿ‚Ý-õïê!Z ¢É]MeæÄ¬$”mƒÌõ\½Þ¬ÚÉL ÑF‡‚R Ç7KžÔEI\d8 “DÞ;Š'†}Ÿ´ îyE—á "J؇<”Ö¸ÀïmŒNƒ¸bžæQR1x¦GÜóI öQ)+:nѼ)à˜ÏÛá뼇@±oDÛ$E’,ãF,ãÆ•ô¨ Çk0H)ŒÉ\ù`ÏGõPpö¬®œ¸Ÿ ÙEH X/á~%æŒ=ïH‰Ëq¢Œv\FéuKAÜß_4GF§"Fø6üñ7_Ü«)e¢|¬ÃPE‰ÅîJÏ¢¦›Ñ /8#~ÀR sHsLÃç³dÒ›÷RsƘ ­ôò$ã=íÜ!€sÑÇ´SÅWR†çqk#‚Ö/DŸá¼Xî†ÇÄ€w]Ùv¼Ê ý#u™—s´(oˆp,8x.í¯RÊt¾‹¢Žn»*úéÖí¯sŽAm£#Åp?6\—sÁ¨ e±öjT"YDÑö×΄L£§_õ²$Yª SLH9ãªÄåøÑ[G"€ÿßüóÿã_>ßSœt΢MQ£X”ð­'Ô¤‡˜Ð³ Ö¤~ZVú­qœ gÁˆç} P¯eÛØéˆu*çÁ/Òq ÝEDŸ/ÆU¶ˆ>Ùä£S 1•8oïé\%½£] >òË#H|öÞ 3޷퉛$šDˆ4ÐÉ£³õW„ÌoXœåš©DŒJÛ-OÔ)&ãs—¢õÊ£uš7ÁvCW½0û⮀UXû€¸H†˜<Ñ"A×`¢Úuü)qñXëe?A›ígIÞ'z¯¦Íçg¹&I­Î;ÌFuJ½Häýþ|£^eÏ„á™ÛzšÃ|¿ÐZ3Ÿ„Üÿ÷g4ù_»ßvªÊÏVøï­I¼M;_U+r׈ۆ¹î.ÑðýNÐ.ú·m³ ‹EIòP 4¢\õv§®_߈!ý ,T¡mbŽŠ¥Do«p9½ÖÛ¬÷HÖ”C1D‹ 0ñ‚pi_/E¯^m£Ï®L›iˆ¤JeÙÈU Ï®¢W çœÐfO–ÉVjcÞË÷ñ¡“z2 úø|àƒ1ª”Ëv¬ÅŸ³QèP¯‹‡ ÀqeF% Ùm­…v1 Hç"ÿÌÔŠõ<£‡—€”#–)̰&FoðâpŠT"¢z‹]f¸@¤9 6fœÊý_ÊMúýîØ¼:ä„`®úÅyhk¢/J•Ç\Ìùv,‚óÀXøœÎóBtÁ¼QT)ÅDx¤ŽÑ'¢sX  ·öɲ2Žód|®ã…á}†sÜ ';c ÃÜÛp†¾*ñîöì̹(Õ·_4žrR2½N½¨X¨‰wñ½Ö0Óñ¢§Ì¬5p'&‚P¬3š­–"䀜(íž“y=³1ZÀÇ@¡Œ.œ¸žmÛXÈxŽ=Fž÷ Ψ¢í8ý¿÷þó¿¨.V}6K‘šwŒù,Q¼8¬fLyƒ¾ö—åC+Fãœ~½| ¢)$‚•óNàõzÃy`L¥ùg.¼÷Yö°{PçcfGo|¡ˆX˜‹·ß­ÜXk`6ÊòRºIšD­Ô£ê·Œýµa-jø”X°•‚1˜a™¤ÃþþÂÓâQÇAÞý˜ÿÀù1LÓÔ;ŽóðéŸÜ’»â|}ýÁŠyß1:õiïÖ›!Vœ-—QÓ mUz0ôÂ2Ô¶@1U°eÒ6[ç²Ë–`1b+\†îÛŽ1'<8‡ö E³F†Í\_¯7zmÔ’‹Ç¶e\ÇÅ\hïñÇ_ðޣڢщbÛ¾õ›¨€ÈÓ’ØBD!˱²U…õêÎ{ËO˜Øþø"v;:Óë›”¶ Ñ»Ãá39ëx tu4‚­*[FJÄcN¬!–"Iq§ †SECd¡] â„#)ñ¶£õ†L—"®+F±€©ån×9}2Þ ¥Ï¶÷X}¡ì ^¢[úg¾ïiý&§ÈbgÕ¨ÅPЙü€õÇlgùðyO˜èktЍ*Éãšµó2÷Þ3ÃÅ;Ël×gwÇŽ.§ü^dAÇÂþzáBÀyU¼^\˜_×Á8Ý-ãúœØ¶ÇqÂyŽ˜À¾ýÁbj(Î~RòáÀ…¯ÑaCLÀ(¦°TÜA,7<[p÷0ñm…~€ÄˆzœŒÁUÁ¾¿p~¾±m_8ÏʾQ"<)x‘àQB€SízŸHñbÄÕ¸Û ŽYï,j %±Žnü±š]0m‡MÙEƒ¹äáo9]È9ãü,òí, ) ×aŒºN·u-w@V¿N bRÆd}„Õy¹ñetx=>Èo ¡ˆ ÜG:NG–.Ô~Á»ÿïÿoÿÓ¿¤°„Ñ sMÌ6ÐAƒ%qñä<=Ý !Ñ1ÎÅ#%!DøÄ]EÊŒdÕ yyÎ+__/šŒB€Ÿ)ÖD6-¯” Ä*dž*Þ9f†`Zz/Ÿ>*]ð.٢Î¦Ö˜Ü ø€Ú.´zÁÃWq]Ïâœ`ÜY¦eŠ™BÔQãߺåM¤\ø"K@Ž ÕLfKnˆà²Q7Iý°Kµh2ócuÜí‹‹ÙÆ ÞYµ.tB÷6á P¥ÉÊæ±;Çå½Q–ˆ}v0­5ä\à½2¯$‘íõÚßf´£×e¢f,¶Â¦&±ââÖþ3Ñ1›VÜá¯7÷D{aÇ$z‡B°-ŽÑÊ_î<Ê^l9Ý‘KAŒ 1Eì™hï!“`¨ÑAü“‡¾†÷†í}ÄÌRÓvЙŒØ™j­…Q'|âÝ… åvKË e~Mf¤³:Ä­ÀAlÄD èl]×Iÿ’·LŒ:.¥tp-›GÓ³".<¦J—–%SjïÈÛÆ*U{ÙÑŒÔ*ÎÙ®††Ñ› ËN…Õ;ÄYÈŠ?ƈÙ(1gQèÜ<Õ”Àu]P»‡ÆÙüuþ¢dÜÆ-Á;t3Û*€œÓ#‰Ž)áº.xOãkÊ™•?ÀèÖΉBo,&cJ|nE˜1L}gù0¦ ±>9gv3ŽKàª*z«”ÆW~nX 1¦¦A'=TÞÕ¥lf|¬XêB„ÏžïLJ¨•æTB1ë ¬¹¶aª;Žš–ð²Š)qtù™Œ1w`Ê+gÞ2枈½÷–K“#½)}јJ&86rò@Œ~EÉÛ—UʶÛn…Ñ÷V‹e#¶k ÛÿN,{§úÕà£¤Ý c ö>PJ‚@þåÿåßè ÛkÇñ}rŒ1/.f@ç°šŸö­`Ži 8µNË/¨½aN2›F%çù—ñ´v™‹š°èüãþ}Ò&ДQ¦nR©Ò{çâÞ11³ø¼N»X Óf«HqÃÕOSWLøpbæ1ÅMÚv´ëx"ÞøŒ©„Pz»å ŸãÛº„Z/`9¨[ØöêY‘·¬®î…—bRZØ:\l¶~"‚£·š©]~0 Ô{ïÐÛ{~㨧-åYHÞ»µq‰,¾Ö@hkðòpö@úàžy»¨ÃÐ-½SŸ"#B©ÈpÈ1áêD´ÔÆV;çˆãs`{íl{µ¥Kq|~áþ0Ån8삇áEÊ@šò«O„1[3–™åGÙá/brÉßD7^Ü3K‡à7¦×Oç(B¦šŒßík° 0¥Šë¡ªÞ“ªÏ烘ò³ãÉ–üæl ÉÝBë ªý¹dDŠ _ àÕ:çhÕ1ÜÚ]°Ü[ùáïîÄÛJ„€â ¸[kbÛ6ŸÎ;¼ËŽ?§CB«^¯j«´÷Ç盦¶#eô”qüsÖ :ÀØÝêXnFÉB×|h­#¥ˆãóýë ³sâñ7Þ‡‡”ÂÝÐ3tv[ÖZ‘(‚÷þB ÉF}gýXx£ë 9#¦ì sÌs ©,Ë,z¯ã€‹ ‚e¤ÂoÈ2‰[Êø8󈕔éRUOÕiŸ ‘üív]@0_‘W`Ê\€È‚‹žÅB)¯Gv è@çî)$v«ûyR?jg²êöÚ-¢›ë„”2[]ô>Q³?æ˜H¯„v2Ÿ&úH‡¼EiœWE FnYtD•ç­àóùF°‚m)c‚:A™X$§„ï?¡¼7È¿üû£ÄT$D°œâ¸N¶É}<9Ór?GÅþÚ)Sv&Þ ª”‘bÄq~|FîÙaÜ€³ö9'—°oËy£ï:K\œCòÁ² LË >"–„ï?ÿÄ–^À€ ðÚ^¨­šúI]ú烔v`R5…¡èF©e˜ Vbùá¬D½Þ(ùtp&½5ÅXÕÇ5ʪƤ/]&!5‰òÒI×ìXS™2,´I~N¼ûï 5ƒ²Åà ¦üm¶Ó‰99[&é[¦å‹! ¯0—ôÂÐiü-ö¢kÞ8.åCˆ$Ý*ž@§#+_ã-õ³bΉ××ÚÅlí«_ðƒãgªÔmËGÊ·_FwÁŒÉâ` æ]3lâµ§ÆÚ_'¸@@bJ½Õ™ÉÊ¥~~-ø’1®öË»¸$$R Ði¬` 7’JŸº"1"ØË†% «›)Î3l®¬…}{ãóù…²íèv¨Ý*5ŽzxyÒôÅï“ÝX²à4? sH°”#³Û2ò¨ÙiĘƒ ¿¾¿BDÎTB‹â¼9î‹ÄXh–‘“C⳸&z·lx”̈æÔ”vôz<Ë{A²ƒZl¼L„ þÁ“™Ô…!„Çà[ö‡ó8QS-$ŸÇìñŽ‘ËŽùá1F„ÈKê¡õ*/Ú}Ûp| ÞYvÆÀ„âýþ×yXÀ©³GaÚj!¸ðdµ!xÆ0«*rÉ–'CأΠïUŸçÁ…¾̵°3ÞðE¬©È©pZ"†pqþ‡zl(WüŸ‰¤ŒƒEV`]ßvÀ´Y>K*/ñ8>ÛÎèœd¢Y@yo˜cá:Ä\p]¼³[ëpÁA&ƒÙ¼gŠb‰äëÁ 0¦’æ½\ýDÉò¯þõ¿Õà<–9·×­}nÝ”YTƒ¼¶3ØEÀ\ðçu°•Šçç2:/«E6 ·¹ Í‹±¸jì«;ߣ”ŠF†˜ÂÀÂrD1¨’ÜÚ®Š)wôéBŽ;\`¦³4ê/Ñxö²ìŸX/ãîÛnzËmwóز’iÉ•„~U·ªf¤¢>fVûÿqtm1;¹?>¿3Äï_bã *%žÈ[øÃ»ið=^ÝÈÈññx£¾;\ ‰68Œ¶îâÞ ÆºËn&µ±Rœ”Ú*—…âˆS§S¸Ój4\Îl¿cÆœ ­5òy*9c!f3¤þ£08Þ¬­>îú‡;×Ï?èÅpnu¯Þ@‘Ó|6œL¤Lý½ÇìëI]°ïm,.PEüãØ…à¯}Çç8àíàॽðz¿ðùþæåuUæmØÀ{Á|`F5ŸiALqÏ“Œ¯˜gõ 𯼋ƒ;¿š£<²Ö¶mÃqìö-Kf ÝöÝþyEym8¦èIÐѼl±ÊÝ dÊŠÏJãßZ ÁÄG™0O*@ŽC'‚9ÍÔºZOÀÜøì<¶Âà£iÁa€+I°íåéäç¤á÷º®Ÿ=aÙøl†€:J.øþüÂ{ÿÂ÷çôË8P=Æê4®š$Až\ uTŽçÝ‘ ʶã:~ÑÙªË&YŠ}ÿbÁé€}ÛˆJ?±lˆÞ3@ËÚÑm¡Oîj'dqâ1A¤±dKÒ W¿ãhXö.˜â‰¾!Œ ñ‘J¿iŸ5á¬ócòÅíl¥ WˆdÙ¶7Ž?ÿäX{tлéÑM¼•"¨ÁK³ÏÆ•BÈ­”À£ŽŠè' `ÉR5(ǃNr.ø\Þ…ªGÿOþãþ—¹¸‰…65çù˜ÌFß·] bÉm¬tãÚʹ|Ê)x±v'ôNCaÉBL蓞 /!¦†Å§‚¦&%!ƒh€·tÚr)=Ž\ç9¿Õ°ànŠ©å´Qκ¸t ‘¬Bé Ó¥âF>Î#ƒ·—‡¿gPBÕ;ïI!Ý_údLj_þBÄòB9§G­±ž<»lÂÌo* nºþ)$“Y‹™ Z§à€Èõ\6jñRú V_J……´Ühã³»”㾚»'Ü}̵LùV,ê’^!/ÞñËÚìËã‚i i!E8§”=:úvæ50• ”7Ÿl îôNä³ 7j½7ÉæhDzØÏÊE)wpÕ|û3UʾÓE­b…—ÚÞ“v›R"€´Vf÷ÎÝ™ùº`Û^ðŽ—|75ÖÓ•ß-ÓIOÖ¶È®sÚÜ?Dª¨Š­¼ ÂÏ6FOÏE»Bˆm\–¤¨FUçI à{/f–¥JŠ—ÇÑÿ'FáàÙ¨sà::úÕˆñwpn)!ÛlžbbGìÐúlöR`t¬¯ó@¯ K§ —Ó !²À1?K›ÝmŸIÙ2z=žg3úÆÈÈa ð ù9IR‡©4ÒŠ‰KÖä_þýÿ¤}Tv ÃK™”ecÇZ/”²?Uó]¦ä!!a^õYÝIÁP1G8¥c¸ÕÎ@*ËÒ†J~ẾQ¶à˜ñ ’e>œÇA»}`¦‡÷|sU€}Ûñ9>¸ì"”]ŠÚ;Äa}.ÓQÓSJ&|Í$²Pþïj?©£7"æœs1©^'Ô©í~‚}ÖZ)‹òtyb ,›d,#B*ïü¥ûqÎQTáÍÙÒ&`ÅŒÞñò¯=#€}Û1­R~è# LLÄT°æ ¢kÝ µT3ÈŠ@§Q~}ÀT˱6¶ÑcË_÷®Ð2åŸýE4µ£1É|BJä«yïЮë™8ÌÁÏæûõõf´iïx½vçÁ±R«H%ØÑ[e; qÖŽޔ­öÆŽR)*€½Ûå]Pea–S2£¦ wâä}^uTVóâR´¿/Ð[g\±ó6ýø¶qäÓqÛ>fY¾‹bE$÷’Àûõwøþü??wÇ €†ÑÛ ê„FЫÙBŸ§^yQÒ.޳ó9n9´Öù^š³^¼ d&ŠÉüsa~Q­ Sü2E$˜§iËáHYç@ÊZ­H÷2kY*§3’´0¡“ Ì9#ÁÌ—7 ã7Ǿ=1Ú±&…0Œ< —E‚cPš£ç©žÌÑ!Ù@ KX¼C ÿâïÿGuÎ?##"Kg¾k"ä‚ÏŸ¿°íõ`ŠVŠ…ó¬Ø_/ŒF<0î@’©$ÛBˆŠˆáaõÖ1çõ·®=ˆƒojŽmÞ¯7Nã8©Ò7"«¦ÿe;Q –Ræ|ÒÓo0ûÄXTÆÀä»ÞÃ%«U›l!Ž©wçõDÂ>‡810»˜ËÏBš1ª5Ü^ð1àøþfrç½[8Ô-±¤|9X‡Ö1ã4{çå:×ÄëýE3˜xjÙ= ÃF’æƒÝIíÉô¸õDÜùòûëëóá@É £OˆN¨x„èPkE.r,âÒ }4×õ1ˆ®9LB,6ºÄP«úv"东0Û"¶mCŒdYÍÅ n-ºô½÷˜ Ù­6ÊN1’öÞ¯7áx݈·£ãý·gêÁ†vVóAD¨Èspßqºb;oH—;•Oà°íŸÏÁ ˆºY^Š–er]—ue1àx†¡p‚çѱ §œi»Ž âbtÖÑýþ€©lŽ9ëÇ/ˆˆ´–¥N*°ÛèíVŽå­à8ì[±âŒS‚ïÏ'Êñ¦6¼Êf½xŒè´͆ϟ¿¨\Í *¤Çæbaó.pùèðW‚ü˜ -\0;éàÏJ·t‚#ŒŸzð9´ãÙ‰7µ£ØÈxš²‹,&Ϻ'‚vÎI’MDÄ>*ëôq}¯µðÚv8Çk ,æÒÆ"sÒ3xâêÏ÷ ¼Pä7dŒ}9”¯·Šèº0]Ä×ßüÁçðûK;OH¤òˆE+¶‰a"þÚß»Íâ:Ýß/Üó’Œ> ë´«§„Øþ…fÝQýþÀ§„ä"ÎvÑ'wÔ¹UÐ OI‚P¹c—Þï<­ÛÛ#žF¶U-ûÊ`´Z&Á½lxÀcڋòä@Zèùýå’p¶úøVì6mYÎJµ^1qy<ÇÀßýÝßÑ, OñÀ˜JЏjEÊí8ö­à¸Hðžükáj:ò¶Ã‹ÇY/¼ò†k ÌþC á¨ñµ½çp}¾aÒ1ëÌIˆÐµàR$Gtðò¨IUﮓ~«˜˜ÃâžqÑ´Ýó<:èAYF²å˜šE²baß·‡eU6âñï÷õgÇ TÖmæO—ð« ¨Âq¼¨’<®oÛã¼¶øW´qýríuË@Rñp(icç2‹hÓÞ—¥‹:‚x¾œ¦¨Ýò†>ؽ…˜»Ó×cDÞÃya&:¦àªDŒ×A’Á²t.äLe…÷äé"°oNƒ..`ÈB·%<«¸£{0Á±@N…Ê®Ñkb|ˆ1Ù2žU® ñ 6¨<ì#͆çuÚ8ççë½RI suÄü´¿ £ú„DzœÔÑ[xyîë0#ŸÚ\Ÿê+'‘å¿0›ÍKÖ ]×aã*=ÜaDÌÕŒÿ_Q6ª!œwÌ––Á®ÉPUù÷”¥pA ôVÍ0L÷é”ù0Õö$÷¯¥÷¸®àúœ6ú¸g4+&ÖdàÔœLTå¾Sèß1´v˜I^"/˜¥Ü#Ì6°½7œßÇoÐW±Ëƒÿõ4¸*p^¼:LL$1¡æâˆ.{×Ty€Î9s Z?¥s¼%×ZŽtdšô¦«xÁm™—jo ÄyªÁ>žÄ9þMõAÙ8B,…i}k)œSô>=•Y>e”’éØž7¿Í.xÛ›ÄÄøÓÙñ¥‰©ŸÐ8~˜ÂfL&«îÍ|FÜAÌ©H["Yá·_×u¼ö÷#§ýþ‡¼øìžŸ@á;K&¦ŒY‡Q“ÙÙ·ëbõí<öBåZ)QÅu‹1~χÝP2XaŒ$a³—¼£+]:'^¯/ô>L]0!?Ôeû=›%ìQ Q1Uñ._· XŠTÒSÄxÇ®!evÁ9Ëù«öäù¹ÛeÃü*1§E?lû‹þÛ.ËR] Ä[s’ŠªE¿¿¿QòFÁÀo£E@°ß"+ø˜Yâ§’I`²^€}{±«z®Fïp†5apù=¾‹ÏXëéh…Rã}WRthuÑDj Œ:¸'L‰”Ö/óÏÝïEp•ïÛ›òó¥è–M$ÿçÿûÿGs&0 “ÌF½šiÈ~²98S>âê¶´¡ufAËÊ~íj¬s˜C!n>`B1àì¦.Óæßñ¸j¨ñR \ph—EŠÂÁÎNáÔ™…îé¥\´ËR[¸§cG¹mˆå>õ‹\Dˆlû Õ4βC;¢Oè³=N_‡ð(‰|ˆXS11á—â¦A¨ÌàA<áÀøÜ½l¨MvlÜa¤”qÕoìû‹x‡CL£Z%³Ë ”ØšN½ÖÎGÀ)Ak7zü†ºiG€ñtN°üla`Umx½¿LóÍij1—a`N;fl1ˆÂn•û“uSwoÉ"_1¤”8Ò‘è¶Ü½ 7tÑq4°n ¦ À %“A T=—¼ T|Œ›>`G¡Ð›NÇþÏ¡zÇÓ²“÷I }Ú bÏå¾Ê{sãÛâÂ.tñÞXnì(DÝó]¯{7 ¼v\Ÿƒ‡#7*oÄ©‹Þ›­õTÒ>”ô~ß™™ðŒïôìµñ3^£“hk²Ñ³rù¿í4"^‡1РsQtˆ1#ù€é€6,™Òý~µ :8çOežÀ2^€­_œàÙÈò–òç¸Á™_(ZÈ[k—I\?6 ›Ìä¾Óõ<ͯíÍ‚Ày}C~sÜ€ ñ1©Þjõ ¬{‰»{¹«}•WKõP.›}ÛËè6Œ9ç±[ÑÃGB”§Û÷o8u;'¼îEÐU/me{Xt1Dãÿ) –$:§íš¶ý Åùù æÈ(\Sµåíëü˜²Î¸HƒßmŒÙ¦)4øjÝL!8òs|ðÚ_”W¯…Þi•H9Rqæ÷x1cà2õÕözaõ†¥ÂQÝœ·ÞTïçua{c¦y¢Ltræ¾½vˆP»ÅŒiYÛb#ƒ%„©Í1ÞÿZ}°’£&^ñõÇ›‰èƒM_“KÚ×þ¢DjYÀõ9°m™—WaDîy}hâÛ6Ç%;ÜIÃ<®IœN0­Šð^à%£õÓ f±‰Þ/x«4ð(iÅ 0Ìt‹ìÅ&ÒƒÚSoØyæ+Ü´QÌèÈyCo•¹¥ž9 ˜XÄ]éŠGˆ½W½:Md¢|‰4ŸÝ-¯·=¬*ɹ0tÉ{aæ £”× p˜á1Àc€®YfpFœ|Ä\ g½Ì£ ?]È´ ×‹c6êà×$e#ÞÆ6ðµW”Yõ÷ù,(9àêýù½§=Œ7ú?¥øHneYB‰7Œ:”ì¤}C¯—þt§RÐçÀê ¶Ç`A9Ÿ92j“râ¿ý»¿Á Ÿ_¿ˆàë—]@ççD. ÿøç?¢Ä„>&ú¤,²J†v5%žƒ,Jµaô\yè iß¹dÖÅ$ËÀ9¸ˆ ¼nÙ´ˆGɧu¯k1¿Þ*Þ1‹ûÄi‡%¼û‘­ÂÃ{Kƒ¹/M½o'`é ×Ê ã‘Õ=|®%0üŠñ¨!…º,­°ôVQösL“*w8_°&;6QÞ{¤œpüúXàÙ0·;e«4òÉ# ȹàª÷Z– ::ß›l—Z½^ï7úÈ>>êg›ý¡-BëèØCB[½wìyƒzÁl®jULuèã²{™Ý|%–5ã#ÕYª·IÚcuzbÌsº+€”)5ÚÆÐû0? ¤{ìíœ"ú@6šÉóE„kç©ëÛ¶ãóëb±ñ±eã­÷1 `žKÚ8ýù½8q¸ÎïŸý’D"JN8¯ ÑvØ£Sð,-óóý­´É½ÍLO=‹~¡è1-¼löœ2qîK0FG‰ ÇuaŒ«VÔVñ¹.Î ÍÀä=—iiË(yÃë]ðzíƒ7ó4ˆ%yF-bË.¿ Ì9!†Ž8y¹¨RrxoNÎÎß{ä¹,¿G-æÀf¾3c\ûhŒ¾Ì;¦r—àC4·(ÍNâÜ“ý ŽlªûgqÎRôDbá²Õr…qû2Fœ772¡m>D¼ßT å¼!ï;í¦ò¡„8`ß¾RÄUOä-#„€¯¯/´Æe}Ù,ÃÀ›iuR`•†+þ\¦*[¢¶—^@7\]`ª˜èQ±#bÒT L÷Œý-\|®\˜éçó–¨@ÅžšüÕEveÛÐi·Ã¾ï•c”ˆ-°2¸Gss¢s·6Þ^bp î<儜/Ó u£LÜrØÞo´ã" ÓÑÐYk#¾æÆøþóƒë¸pà]ç˜ CÍ]SŸŸ¡_9†é³Ûì™’Gçmçã/ZJF«!%˺ Î&…¸ðT¼:'jkdᣱ;³i ½&‹Ôd€h ZÇâéhˆ(YÎû k¨™ïÒÓ=§L0äVvvyÈ4é¹óh½¡·×kÿ™:„Ä®{tø‘£ÀL‰¹S,±S-Ø!ïk,+^½`kXúß²&L^ÊDTªò «º¨À²|ôÎz"zVÎãƒ>JÊ”+ÐæÀê4Í’€áœÇu~“Ë•©[F$Ø^‹±øó¦˜m¢¸%?^æc춈Ž!b 8¾G€¤OSaqÿà]Ä@gŠa٘ÏpèsÀáìæ\vf9ôÕ-û…»¢©ÝòÐY$Ð_w»÷טp¦PtÁó=ÓÁ¾}¡·ŠT Z#Èâ0—â©`R˜ Fç ÿf-ÜóÜÞž¹ÀwÉ æò_ý÷ÿ/Í>âœ)XÈËý@.b«xîLÅDzœ•{€ÙÇU(â92£v,/+@DÑe¢_cP|]§-YUy ?3~gÐ={QÜb,.]°L…çP¯o¤´£µ"dÍ8ÓžÃC,‡>;i ¿É–ùg3ß`Ù,þiFàm$¶ìÒÉê‘¡U€xANw¶5"q(!£ïÞ•"G^‚uf<´aKÄã$’Û +ÄZ;æ¼ ’žß™¼3‡>ìòwô­ÌÁƒy/ט T¬Úë•ódˆ©“ø6™YícÖ5*jrd>óZ”3Ñ-ûˆ¾ÄöFÂqçš?ãgƒ¹]G»ðPG’·L±™*uÊwÐ~7nÆQªx½^8Îj˜sªRhÒLF …¼9GÔJ“ÚÔ…i˜”zœÑSŠz\Øö ççà÷Ÿ“<¦rÔ ÀkðçtÎ5…yÓÓ鳨r¦BØøZ„l.xïð9>ØÒ†s6蜘£á•ßh&NØ·G­Xæ'pŽ Ê$C:¼ô51æàhKxëà˜øêÍÑñz½oÚ‹æÀÝL5\m†9‚QÊE“… qÇ´ÇýõÆñùp¯‡ù„ ëb öN ¯áðcdáuwÁåµãú>Ò pçü¨ã‘ ÃqËWy0Òµcd¾‰§¡®÷1n˜íB„ £U¼¶®Ã–ê%B[,úWœp5ÛÓy0 é&Pîà&ÜøJÌ€IC±XlrôÌ"O>côJ߈7Ò2$C«ùÞM:=Ò¾Á‹Ðk´v_Tw^ÑèLKô.áõ7Z©-ðpèkbö $}»@åM1 \ºb.èíBÙ_æŠçÿ¾µfV€l9'¯ÐËà=~}#;§œ‰·ªÇ\6î[ÿåßÿ]ÊVgß^Ù"jÝ®éµSa¤£w¶¨š\ ¯e†$†©„Qm&8gG ;ÆbôåÄD`tE)›eøpþ}Ù­¶°3#Àßu;”-deß6¨Îë€Ç\àè(§í ˜‡NdÃ80 Lí ç¢Pë ˜à¼YæÞê‘É}6o¼_0g¥ 4D9GÐáèõ[)`±»î!n¾¶7î,Ž>N ¥Œ‘ÚñÈ!üʾ£'©±âi碂â~ñ<ÓŒ~ì@Hlõžª”uoê¡–:Éð§õe̪s¶OP`v5¯Ê¤jm2­QÓßíKqê 20= >êáÕ.*両ö“E° ·(€ ŽìýsyŽD-¦×…ç;¼‰ÌNµë!Î0Vle#Î?ϔݸžÕ'»©’á7ç°g(–UÄ£WH6¶ZcÀ:»cʨõ@ôäg͇Vûב¤{Ù0ÌQ¯óÁÒÜÙèÓ. (]¤B\§bá× ¿>ñ¶¬…L`ØÎÎ~¢‚ö׎먬bHö^؇Ûÿsl’—ÇŸa@÷ýóûƒýoˆ#º®ÎïúX@—ØwMÅóÙ YÏÊð9Ð|]§Q›ÿ5!Ž»ˆàµíhFÛý\Çm顤÷j¬ú½8j·§¿ýö>pk&ê¼oh­Ù¹êH´}êDùÙP›°cËG^Pæžœ½p8ôm§e´†å-îh× þ)¶Ï“ôr  ÂK-{Ýäþ³ã6<ëÒ§`è½a+;ÚhP$£ïŸÊV°†b¬˜zmöž. chÕy,ºHºÄ³<÷BïýºðlMp.þ¶[iõßþ/ühæ²CŒq Än˜5_üó ßÊg#/šÑ–i§Mÿ=™'&ñM!aA/Û¶a)™LŸÏ7Þïê#=ƒ V¼%ý[0'ç¨çub¶Î%O$bØ9Áq|ÃI‚‚(î;PÉV–€ ö¯‚ãsþUwÀ‡üg_ïýœ«›\‡1ajlEÕ‹wU?&ñ*sRýãMÛ=1C¶…vB,:Žã4ãS„]Ót”º)Ú³qhTM¯Ør²*¤ñû­JW€IDAT‰Hh8Fï]ܦ(‚ãò9Ü*´©è:ÿ>ÅözásFtup† žþš¶ŒÇÇk¸>ˆ•ç%3“:ç nQþ“õ˜†É¶Cp:˜YM|A¹)t¡ÏAò#¹7.ªŠ²í¬¤Ö„¿c?Í÷3=InNÌßúĽtä­à:.„à@¡†s¬0™Øgè]ˆ’(¹mZµçØ…½Ê޳Q”SƲŠó9æ-SPG5Ë5ÑPãÞ3ÊîkNòà=¶˜Ÿ/íûüFŠc˜ìt ¤Tl§¥híDÞ^ÜÍñÞ„ŽÇÛFo^k°(ÒYŽ’~ÃÚðù,0ñrÎõì`cg—â|ü,¤s÷«a½­‹¡ žØ{Åqœ ©óµ¸ ªÜ©M»ç%D~†–´8× ™$i"•Œf™)·×ãöIˆwhG…þ&QÕŸàs)¶íË*øà¹˜v!<`Êœ‹qöõ{ 鸄f Ôô2Ñ1Þ°”^°~5ä²£¯Žl£Tv Üy­5s~é)[ðY»³¯wDH±ðàô%Äô`¢Ö–Ô cpчSk}¢Æ•.lÆå¸KqÕö”9¶ìê¤-bLåç#êIe­‚ïºÿ'ÿô?ýË9šJä¿<Ú-¼&ËÇYkdê†ýÍå·÷%&x%I²†øôÞ±½^hWE,ŸóÞ­A•IgÎE"û@¯ ³1ÿœ³OE£ üùÿ€Ï÷7`‹Ÿ¢íK¨ärHx½2BJ<<„í ”Õ·Š¢^œ¥ âÆ¬¯GƒŸ.Ôƒ©ƒ°ö‘ÔÉ8»ÄÁœ$Æz“·Ýµ_®ˆ[>mÕ ËI¦L•Rf'4u­>8êå̹ç"_c< €jP¼1:Љ¦^7)µjô×´®ÃÊQ‡É}õÚ^˜k ŽZ¬ÅQ Ÿ UÛ¬6­’æ>KMf;«]P߃ft,´ãDë•îrï0´Óå­ÊŦ'Â¢Í (q,«{«wŽ'w/ËÈ¡¢“‹,`,*¨ÀñÄ UUæQ ±Ú­VLå÷å’y­ÄŸpjE0âûë…5€1;ºêŸkvÒ‘aSkV´IE”šR cE»N[‚*zkÖÉ:´vAÄþ3:z,Dmh³±ÔÀ$Ƕ¤§Šiác½V p"CÜMFŸ©Ažª¹9 ÓSòÚQ¯ãeøà‰.¯JÙ0Ú0Á‹˜˜j@UÇ®i-¬É÷³l o¾öF†“6¨«ó ÜÈÅqXª¨í„¨Xˆ‘à¬[ÊŒƒðÌ/ŸÏ;µžŒ‹&‰62@»TüÃaƒ©¿–ª}÷[f‡qçæ° aç)L8´ÁœtqÎÚ‹4ï™%²È¿¢zKp—a—zèà&§²¶†“‰jÀñ³†mW@¦QnwÌ6 ‹= x~Fs4K ÔãîÉÃ!Ð0#ã8:7sFâ`r.èWEÞ‹¡f–ùª2Úyâjçƒ~™kÁGf¨ÓjÐ;—û5h†X—,ÿâÿú?ë-ÍÄZؾ^d[ÝK!ŠaPÞõªx¿‰=X§pfÒK!òßô|õ.k½Ê¤õ†’2Ôyî.˜Ê£õ5;’/ð%bKg;q~,,€:ó”MïüFN0Øs²aÒD;M=äkrñ×jÇZN"tuÎyËŽãúP¿~6V;¦œu=ÁgŒYq³ªƒã<ùóýMÕ‹$Þ0A+¡U•9pVïN‰dÒÜã:¯}ÇQOvIƒè ¿ïÛci‘°gi XCbD=OŒ¥ðŽþ ·ñc&Âd‡™h~¢Û™­ò€Õanì…à¹+‚Þ!H6HÀ±hΆÀ¥pª,Œæ…5¬z—˜6oí­³|P$÷"S¨l¼øà˜AÖ‘GŒ49záÁɈÛuÎZhíè}<Ù+Ú,_Þyë ¹‘ß}`‰É—àýj…y%g"¸'‹‘m+4‡ê²¿#e#cLÔÞÆÍ‹¶0s4ðn¥àóù…´eøåQû…3®óû.‘¹¢Çñ'¥É“«Þ^’ß(À½Ëøþi7õþÆä9lä–D9›c8Å«¼ð14¿8RyÏ€Ü7FƒSÿøKR¶$ìåÏäÖØõ¿¶7ŽëÂ^ Àçøàý~áó9R¤#F|ÎBJØã†)õsòçóÊñ)è‡éG³Q§y·çwN®;Æa+ÆRô6»Ì p“I3¾âÝMyo8ÿü<>)yÏyC­'öýEVYï†Ç9gÝO­Í̸fšmÕº½»í§$ˆˆkÊ/¡o¥QIµ¤'PÕàžÖJpŽ2>Ÿ{ŒŸãƒ”˜3Yzž¾¨š›<ìyø>òÎL%›Sfè–%ŒÞ¢¾{àÒxg›LŽÓ…å”U±],S!8q- Ûô>´tÎÙÂé¹ÔU›YGsŠ6 …Zs"íËRà`m1”l«k4ä˜pž|ð˜M.¼Ð÷Tþ×EŒCi²©MÈjñB0cp7vƒ•ß!jÌIÑ]4ÒxÕ¦>©Þ<¬û€ žšu¡Â©[¦Ô=*˜§ 1ç)[`ºÐoÀÜ­„I†·lʈañ¾z¥&åHÀ*g,’<½3O‡(„·M好d™‚CŠî-¶û‚™×>b»c+UÁ)ÄEk‰ûÃþúñ»ÐMóá ¼ö~W] /åÇÑdr\š"Pzk¿–ÝÂöÏÒñÊÀ.1É£½("7|¢z¯M8²ìÀz7:}A§Z\}.9bö;‡mã<¾íEäŸãn ¿7ý¿NÁ3öÔ9@Êö…óü…×ö¸…Þæè\²;Vöc $»°ïg N¸WQ «²=š­)8’Ê*ëy¢ì‚_¿PʆÏùsÞ.ÆÛ¤ö”Õ½X±n¹¨ªí EF([1i¾ÚžÇ?{xÛ êLUD Ïz,Ïx`N8ö¢È`2Ȩw`Nìû†ë``Læ=ú€×qàõzáÙúCðù|R~Bê|hµriçÂ( ¡Ñ(íý@Û»ÖzD.xèð1!ƈãC…’ƒíÔ¢#?wR¥@÷Ê*•L´§$}XtñM ¾wUÎE†°é„«^Ð%¯ÀP"ÖuRê®t°Ï1è±ïävÔ;qf¸™°Ÿ™’{ žEëðÎá¼lÙÐC%òüõ×y=>´å€zžä›Yìõ×ë…s6ó# ¬Ébf/;Žó©$´Ëv×caËŸó@ $™÷AZ»üË¿ÿ7:×´Ü_ã¬'ÝŒyß÷)Á-ûãìö~IŽëÄ+oèÖB]×Aš-8/À(Žü}|¤B§Õ†>ö÷›‡ èRövbLë¨-çÁ—òNsNgÒÞíqö:D3[½ö íjóž›!¥ÄÃEiL›S±mÅþ¾ÂLbUDÛÅÜ*Ÿ²¬¾H"UÃϯ‡6  ¬‚,/“»œq»Û˜‡Àó¹þü·X¶Àoî\c5Ý‹@"¶u1;ÝŒÙ?&ÓÞßaU9óªÜ\S:áV–ÝÿíâCî7ËÎF±mN,D²ÞbŒ¸Îyß°V7!“½ñ ¢!ƒêIÈT¾3âY8 ¡ºŸ¥…ä‚qærI8¾Ïç¢v!ê8ºã¹Toù¯Ê­;Px½¾p|Ÿ¶÷ú1gR¥¹îÄè²ËüçAGŽ0Dÿ @¼“úZH†qÎ!8븉 œ\†cu½#’~Œt‰Ã+ïhÚ1Zƒ ΖnË—<Ó\Xs˜iFKåHÅéÙ^á–2áÕ[uŸ1ÚÀ ‚-¦ç_kwb›œ³5Îó'<¬¼vœ•Ê·}¡(€mßÑçxºqñ¼¬–¹[ŽŠ.óiåœæ}gßàíß::åÉXX h•H©¼¬6,ž¢™ „9° «À?Ë™GŒæ„rtùWÿúßjk̹®­áµ¿ìŒšèuo;ÎÓFPVMyƒ¦˜0'+~ú5ndÃBt c­GÃo hõDJ K¼_øó›|™¿ù›®ÚRj«g½}â,ÕÈçq"–h¾>ù½Sòª »ÕÐıxâHfsÔõì$X’,ePËœ{ù²Ìåñ%«HètU:áí ¶wPU~!â¹x^1VØl…Ÿ †8caÝKE1~Ðv¶[kNÅÌQ¡]€p?ˆÊ¤5eOX 'Ç»'ÄS“EðËÌ€¿NÜ_I$ÓœeRßt5;Ôš Q‚ ~«cžÎâþ3TI^†Ë 1¢\ŒHÑ[ž o†|&Ý$q7ç„mßq~þ¦Ø\tA"5ùrÏì ¡¾í/|ŽƒÁF'±Î|K½U¼ö7¾à˜kR¶Âç¯Ó: õ¬¡pž£—ãsà ¤6oß|/']{œxº1£çÓKÿVÍ*¦I69ær+G±"¥`±[R¡òj®Á CÇÓ!ßÄ æ‘{øà¬“½%ÚÌ~é}ÐÔટçfB`·šò{J½ ”œñýý1 ß?o—Õ¼}Ž·àãQÒ†:ê®ö4Î*)!‡«6{9ÂsðP? MäÐΓùjÊ¶ßæ>fÊ»€«R]RÆ€ékòòòÖ ;B \´y3h2-ÛþŒ·mt¡¶Ž}+øXÖ='è !e@}\ØÊ‹ÆnC:G%`AŒ”Tóœˆ2ó#*³Ê–p Û¾³³wËŒÁh»<Æjx”²`ªJñå_ýwÿ‹ÞH³^U(8;ûmv/âC@¯åkÇuœö‚ËÏû p>í‚8ô5,,…ÕÄÔ…ÎúÁk£Ö†èÚêý¢ŠàΜ¼ŽyÛÙ}ÿzLq!¥ß’Ï ç=œ=Ôeßp ùιùLBÝ3V”9æmg²œI–Wo(™9Á½7þýDP6:¨ ‰úÉ­p ­ñ€Ó¨¨ixm/^&BðÐÅY±·ÈܹBÊ8¿?¿}€|)>ÇIó ~fŽk [$N»€¨žñvÉ?ˆK>s¶ÄL>âºê_¶¿}g÷A#ÿÎy“rbN2†ùp ‹EÔ8Óñ¬Râ3n¥díÕæM XÄX°=T”3ÙÚ˜3p³ÏŸ_ÜL]qváV À2åKÃTÄœÉqzþN?¿dˆ-ÿWÔ0BÊ‹GÝýΧ=ô><ùj{’§ŠU“/ŽmŽãc±¸Šó É7ä ”zh‰ºs>Ý©ªàµ,ûܘßžƒ˜÷Î0í??½g²m1'²ýœ>sqÆÉ›«§Éв[™&bÁoüN–*=&=þ›¿ý[ƒŸªúDÈñ¯ÿÕ5°ÿcµ5Èoí§w‘®açPÛI†TkO®4îø9$ 5%ë(/b†e)¥fŽ/ñØxB—œ´7êÙÙyÁò,8'§pŠ1•ºkpvýÇû‹Èdv`ô ŠÎìpxy˜K}’kò„ùäRðùüi-›³LÁÃpÐwIy®Å]Ρ‹ŽiXÀ [7þ­Ìw‘·:Hc•Éj¿¤d®Aök‘EÄx\ yžuÈâLxL*¤ö½à8‰Dq—Å‘I4'ø÷ÆZ /`òë‚0«ê‘p‹5·Mà¾lœË\ðС†ä—æ(ª9Á «:ªÎÎóq0¶ !"¦S¶ÁIßÏ=®–Ø>B¬k Z[Í‘ëÓ û9dmûœ˜jÝIÁkrvÞúMjÖûþºkMpôÛXÃÄ Ñ{DçÑmß2çþe{ãj'¶DÓçú@@xk[ÚpTv+Pàs~s~z|§/)çLúñ¤z7Ëû€\ ®óÂÒnß™>Ÿñ2ƒÈ¾mŠõw¿ù#nŠ€HÀyXʽa«^ï?,ÙÓÿv=3Þk+Žïo¼¿Þø¾D{O|ŒH!Ê›"B¤Pà÷lŠ×û ×ùAðÎGv}ÄFÛnJÊì4ÑHJ ­WR«Ï“2çúI¸T­z0nÙ{Äà­c¸ØšŠ\ïpX÷Rú®€€'epß7N†o_‡x¤=¢~~ –mÿB­d |‰èç…Rje‡1ç@ëÅT ûäœ0wŒ9dtËÖá4€‚‘óC>WÙ^8Ïoìe7¶UQÐõŒòya3$Kç@Ùw+zQ<ã`ÁpGëºà°úD p÷ùo=l¥ ž'×–n 'ÿê¿ÿk;/”œ W3S‰÷@)ÌßJA­>ÐòNø›•B%Œº‰Waeá8ªxÒéÔ¸÷½W{‘y-b¼÷/JÊð)2Ç<’Ä»æ@Ù^hÕßqû”Aq¹–êƒóßïÏ7ñ*}!$¶íjad^ô-ô˜J°#©—·›O ÄGh9Wuæ·ƒ†ó}1D…®…˜7敯õߊ‹Ó%@ g;*áßúŽj–™©4 – ísQµ%#*ÊÆ¢Ô0¤Ì\°{Ä¢êh´fKþ)Îs”vŸ×?l,yÐk0æ×ňqV*?Lüˆy›.'â¾Ýílq6Ôf·0åçɺ~{Imc¹îûÂ󑢡ßõó¿»/bܺ7Sâµf󪵦…R=­‘Lטü}çxšHŸƒ¯rÁYOîç–>¬ã <‹y ŽÕ)¼{ö{­^(¯êyp¿ñý 1E´1ŸÔYqDÎQžÉÿ¡ÿY&;å+%?w wÀZw~ Dz˄.eÛ˜™ÒƳ“‡)ö#y>°§ LX2~»3-ïClÞn‹Ï×ë…Öóklñ¾”-3M´5„dÓ‰}‡sçAj#îÄ=¨~$ÐÚ¬ºðÚ_ܱ™tû~Áöm„1ÓÞÿÞJÎpž|p \Œ/[èˤ_Ê]Mɼ`¹Ÿdæ<Õ‚| ßÌ=ý¹ãù:ìâj¶‰°ñ® BÊèí|ÔJÎrh8Úü FJšëu¹ô“E–,Èb‚£wäÇAùîDÔúü÷˜ e{‘à±Ø-å´!]á3…(·—È9Ù'ù0Å”(-¾.ämc¬B ¨çÅsÏ↽÷öç†go ´‹cÔ¼‹\¢‹(0cý`š…ŠDg0ÿYž4;#ËVÁ;s :“Æ }!cXîŘº†®ç`ç\€–þ9ö}Ç ­D©ršg‘ž”41‘ïÄʘ£¢òÞ mby<âµ1yºvTŸó€`Ùrþç»UÌìÖ'âf‘’¬5\ü|lažc†X®ò_eJð÷ñJÙÊãý % pnð…%)ôâNØ1'Zl–¬¶spN묜±½¦-)KÙ«Ùy‰äDä‡ׇÅCòÕ\ÇÞô³Î"aÉiAÌ™è G8ÝCŒÿ]ðû_òþeÆ5êåžÙ˜lòç°½-Æ.ÆUt›ýúä76ùO§äY±–˜ç0êÉì‹PëÅeêR3IÊóòÐ5y·x-âPëÁÈ[ÃjàAÑ0~8&&Ë©2|ís|Œ$[¯‹E‡ &¶²gâ¬ÖPlïŸf¤ž%ÿ2̸»Õ+÷íþkË|ô9\{Û#G믊3å©þõ!ýµÜÿ,Ÿ÷õ yî‡WîÏØ²B8Ò=)R长_Ûk¶VŸ‘‰è‚™xúmƒ7X«yž3ÁÝÏ1n¡ËÍ; ¿¥2Ú%"óR*8\–…r{Ê‹ÁÚêsX?aÁC¯Ý÷ çYöi‹gÞïÒ#™,ʦþ[°óî hyöwfÒgÞ6f•L?ßx}¡VÆRŽã^7s,)\—íóûåý‚p•¦Ìà…(öZ»M – öX Á³ó‹,èÎ3À¹ð{÷÷תDÎßyO÷çE£:„ÀK¿µŽíýÿ­ëOzäÙ¶,?líÓš™{üßË4ѨT,BEÕPl$hD‘Y$@«!EhF©Ø¨ôÞ'ÕLReÞîf§Ý¬}Ì㦤xȼ]ü#ÜÝÌÎÙgïµ~‹Yê£7JQë¥Z¼ó¨µP]ò>q<¸Þ'B\Æ„à<Þ×)mˆ)àõz#§ŒÖh6œS9´m“†k“,D‚™´©dxULåN0•á.96x]'†Á ûàðHú°€£÷ù ï£3“9>×à—È‚… ¡$tI$:\éA Š1Hv.p‡ÿ‘¥½B³œ7÷ó=ÛPcq3 >Þhw8Â6Ò l ‚r^Ô!·Á¸¶åBðwî8+sKiÞJ;HÇò©Y¹g‹%îGåDyó¾û6y1Pg£Ôõ$þ;†„ú¾è!™`U-Îd ¤¨~R+–ÌÕÉ73U¡°Æ»ê1Ñá°È¦‹ZÌybÒOBåD•­VÇ¢G[§d[ ½„ qo²NÛ' Ĉ˜¦j‹Ñ€š¤TUáÆ°!}²‚aÚš«€p(ÿ~½ïÅËû€ÑéÎ>ÏË2BXˆé˜Ø=QÎ )'n|>³.Õ •‰¯çŸQJ1ļš+{©®–qÏÝé¾ÊîëmÛp]kù±‘XrÝíÅY2°Jžc":wÇ<ÿþýÛ½¸ëøQQàØŸx]/è8ö'ª$çn"ðY^ô!Ý캄àsRLx_oÛËràaLº `?(‡W Ç+âΖ¨ê-#ý0õO7ÑŸ÷k÷Ÿ³ hª`{î(¯7'j+vú†-èjÈ•%,pTÅðS˜–œ¸>c³.EzÖ¶ï8›Š9BÇàzÐyòP¿ö»ÁyYkð.B¥³.3J³LöýØl½æ°«µŽ3}:Á#8ZûÍ7 6ëç0tà±}˜(f«È¥úù@î!êzóPÛn27‡ëzY e%šM¶1ìXë=³Ô† ŽcGkìDŸràà]&‚¤{'O)£”!.¦Ž½àœ³éÒçû7lû“»¬S‚ð¶¹øCÙz²Á´x©¨ì`åê]´f/1|¿QjÎ)…K)2õ®^pœoª@òv2øúö»ºÕƒK³¨âÐSjm<&Äý€~¾|ÌfZ+r‰áà±S•øû—IüÖùʼnàØxŸßœËÌÕ¾àÍÚF7õïžÖßLó¾¬oB†B"iÃò‡VÄyÌFý|2ƒ[ÞöB—B¸…†û¶óÔÊAU½ Ê2ÅcÂpItºë4÷+È)Òr•ò†1IYuÁcv…º LÄæ[û±sx ²ÕnÇ–-Ðä&m8ß§=蓾!ä×õüÌ—;ÓT@Îc¸iŽÜ›È~<¨¾²Ï[„¹ã<‘åMgºwÃf6âÁ­Œ¸Kæ¥rÞÛéŒ5x¶è¶mÃy½±™ÙÄZ¬ªØŸO@ïïß)8žOƽzÂQédÙÞR÷n–×òMªO¶¸“ûóÛ÷¾_/xóyçP[AJEÞ!y¶þt*ÎòfŽOŒØ¶Œ÷÷ >x£!ï”·t·‡ÊûMˆ">'âÕwB®Þmú½O)…Û"M¹<êÝÏâœ8#1¬M™-^…3߈ º}v¸á¬¡ä=at½ì[Ü€àðúþÇÊuÝ3ωœ­W,.BÅJ9[˜Y©fù"tiÛwˆw(W¡±vL<þüD9«å}œdd™:‹©„Z›è“þ½•ìª6k\3@JÚµlab+’Å#?6œ¯“‚ N£üÿÙ¥Îs¤þÐè(PŠà"aiV'1EŒÖo9h,{½Þˆ‘ò.™–µb>é®´üiâ[ɇ±°©iºp^{AðW=­§È…Z'Sð Dˆ^DËÞ£Íif+ÞT³7¨LxÇ ¨-6ØöœÃá}’_”â†RNĸݧ¦ò½ÉÀ¬Òœ'y¸ŽÓè¾æº7TËzÈcæPµ£ÆÖpª3Z¹õlúsˆ÷‡%_àÂæä6D›œ5Bh 2ø^WžjÖ|Ç!š<žßÛG™åŒÅC³†µ}T‘bÆÄ@??j u6 [’ÜnçT §ðJ™it\<§›&_åX "´û$¦ÄjO8« >À:νóx— {Ê÷¦5f…—„«žæç½ÖGe n¸sþ¦¢“„:/÷‰ÈžÐÛЊ@)ðþx ¼O;½„{`-&ÏŒ› CÅÝUìÔ‰Çþ€x¿7‰“rrQŠS Ô$ÂB©¬ $JÅ›_‡%÷}Zó.ҋ㸸‹‘k×bæ}Ä¢X{çPÎ÷Œï9Ï0u!ý\Œ Þò×ù‚Bx½uÂ[¨ØŠ=^QSaIççä¶Åž­ÅÙ”yµœ/<̓aqžÏ²˜‡ ¦ì‹>Ra¼ã_ ÎRá0áÓ†Ñ+Í‹¥X¶ÇOGü\3«úÓ¶›ZϤüÊÄLjQ+žú3^¿ýN‰±N›{4Èù'̉¿ BLh­ gâJ¼Iåû ÄÐ ‘ úãôãR´î!‘[>Pë…”2D¬ð±¶e ЉZ;öçQ1l å<¾_ß7× ÎHzÞÆb¦:öV¡HrÅ‚µìk«8öJ¹Ø)2C¬‡m;ìùÐ¥Zgš¨8ĸ¡÷ ÿþÍç/kxæ\D°>¢ºEQVÓS‡,”rª-F£ÑåJÉ©rvaîR.ÇB䪀f™Õ‹žsbhǶï÷C"Ê!'Î`–w$nëéžÒ]Á§DWÜ6¢%ìx¨èü €ç"Íþ¾õô®†˜R$¾÷ ñ•‚—€Ž‡ÍœóXù磑×Ôç¼g))1Ô*fetc µ~Q»LM`õ­øÜôÞªƒÕGý¹—Ì SéØkÓŽÞ­âµ]©õ†9Bð·Þ9SNÁæ1BÙ’Ôú˜™r‰c¸{éά èØO%jÁÄv:ñÃÇŸsàá%™{ÚZFF:­õ³YÖY¡SÐë0²³§lÞ–M~*<]ÅíZ+öcÇþØpìœøó_ý=DðüóyÛ°[ï=î‚÷8ö)eDàcľTÀ‰GÈ[ÚØ³ªÔ‡gù1>FGœ —ôƨóØö[Ê8Ëe탶H‰®}Ònç\ $Þz*]`Ò¦„SÍY[3o$18‘âÎ ÆÉMq$¬³§µk'R¼CÊé68æ¼#Š^T0æ€:æ^8c—­öL·¸ñgN½[ïözù`Æ-sC…Ð1>†6äý sNÇbàk?¶Ã2×™€ºâ¨0bî'èR'±% ‘-¥Î}ïQ¯JŸŽ[ýÎ.çì¼çÖéÍyËÃЛÿ£ÝˆÓ:1=»½]w;¹rÌ ô©´Æ˜oLE90îÂÊIœ½¾pž×Zb"TbO׺ŒInà¾áªœM:[ØÅQBFÞ³Íz^Èû~›·[/ˆ‰ž”V úœˆÑÓ`)°(rE ½u¸ÈÖü0^y“3êεsÍLgW”Zˆ2zƒs‚V ŽãAÀ­Èð¿ù¯Ôâ7úhztV9&8/x½NÓãS«o³ä+1:†ÉØÜc?òmj»®â<¶˜p– ÇŽÞ¸°&ÐFEð AêT´Á>çãñüCÞ;…­­óTK• F2ñì Ñ&2á˜5 mXûí5¾³t¸÷û…”wÊIµALŽ»mObêubÈÀ–”óÄq|A1‰Å°êÛ‡/!߯ÏçªÀu½ j¾‰i^K£ÿŸéze6;ôâ¨i7iª" åÌL51Ï\ÃÆ ™dDåœèæ5 Ì4šê´4År]·€»ÙÛmË+Á]èsìÎU+è¤1á¢Cy¿~Èim+ Œ‰ç_ý ½NFÉ.Á†Ž| NªàÚ`v6ð1ÜѹSx잎•ª÷<…-†ùÝÊ€7ŒÇh>:Ë¡ç "ňó"ÀïiYyZ† Ááõz}\¾ alÛ7sÓ .ÑC&ƒCmëÆ§7ˆ'DŠÖ›Í¶íÁœˆLÙåy~›¶gÞþ49ý%åºxrñÁpñÁZvT6mÛf9ÚÜøcŠñ¦¾» ê!:àB²ÌgCSò޾¾þDçèFÓõ÷=0‰±ŽŠœ6Tû>êÉ×5æk_äÆfŠthÙ?‡µü|H)Ø¢<î6¬ ³6#çZ+÷ñE…§Ü(÷wlå †¥œp¾ß²-€hæ1£4¦ ªB¬pË™ØÒ.´Ò(·.ôYÜ·ï}Ÿ ´OÄmƒz`Ò/bÚIµð§©0UEb¸¢ó}Û0lXÿ¾>›ˆŽŽ,ó£÷?dÌ|¾¬å*þ.œè½A8ÛØŽçï÷iE’UÙ²ú„ Р?Ö}fÕ·Aw0SÁ)Z³¹Ä÷7–4a±êü’"k@ˆÉL§8ß§ÍêVÆvÅãë‰rDLê>™Ð—‘ïG’"I|®Äðð¼gÏ/´ÖPK!ióÛ»âv»©­í¶âW¡Œ'c`Ë”ö‚¶›ôåáæàIÝ/³× ïÎ÷7œ¥'ªÍ<ž'ÎR˜Y ×ûÈ—Š˜"Úpó'é@póì³RtŽ{ÃÌû¢›<m§ˆò~C"Õ¬kÞ¦B‰ïù~ßy+s<Žû·€ý ` e+s½]…Ah× )äÏóÜ›0€@!EâéŒíb:áy^ØwÒyÛA¤ïÓ`Èô^׉c{ FO%ûÈ_ÿ³©ƒa?õ‚óžPïá<éœÒáPKåPTAùÈ(Wï®óEòù†ØqÖ1Ê}ÁÄáÙeA:10|;ž(ï7«† ÄLélù¾ vcÒÅÌ\ïœúœÈ9àû}Ò zUG¶t=V(s`RöWë…˜6¢ÓuÜ\ª¥(RSJ w‚žwSØJ³óØ 3Ñ Å~P†*)‰Šˆ‚V›™#i6”i˜ñ1µ#†€¡B¹©¶É ‘Þ+]í­Q¸ îÎ!‡¹ûÙâYýû[ «Ö§6å?•^ðƒCøë´:—©‹¸!XË)`Îv“e?{á¸ÿâ­xXð ç– eÝÕÖ> žÃKýaN‡¡ù8 h­Ò§&·°±Ñmx>Ôž±EhÀ¢lÞ¯—å"Ì;R•‡¹˜ÁÛbÊdI~&]È\é³ÜúFÌù¤¾^F…µ¹(ÍR£ñt/?Á›s‹¼·ü,o,cFëõöâxïb@}›ìj1¯„û(›”gX~ó,17Ý9C”(°?ž¸® à±gôÊÌuƒ!MΨ³'üÒxÁ÷ëX¬#ã¢GÚõFˆ¬=}*Æ-UIr˜­axGñƒš N2‚˜·H jÃÿ}Ç4 öÌÒ+ä2#«Ï³ æˆz²ˆ™NqìO”×ûâyUkù­Ô»v‚óû‘ñz}NÈ«†]*ªã88ß‚GÜ2fŸÈ9ò’WŽd‚­Wö;”3§"ƶöz~väü¸‹4ïÞ…I™Н_Â÷ï¿[;NI ™1rfÈèYÎ Å+¼D¼ßo‹ã¦•bôŽ9yšx>ž˜ƒ<¿˜¨¬¼®F©ûЛ¬¼캨µæsk˽&:!ÿÑ?ýß«ˆGÊï÷7BØÐ{AŠ;ú¬ˆ!Y0»Ü•ÿu]˜Ó¬þ´6h8¢š!¥Q†×ä”!PÊËN5Œœß;>¾l³4r®²ºç,7?æ4jtw£âo–"X}k§±ŒÇbn˜jœ1ÅDÈDO; rÌ(×ÅD™™®“j±»óg­×ˆÎÖûE˜arvÆ™À6Ä1>-Yu†r¯X¡iâ=rdz\mÕ@JÙ·:Ž\g´Ù1+ ôeŒIòé¶ïðN(óUž÷cÇõþ¦·&%†ÇtzÏŒæè†Ê‰7&¾?ØLTI[ÞPêE“$<à'D-LeÙ9¡Ô‚œ³!}L ¤Jµæà©È3¬»oZ­x†*ó.@Ñ-ýð‡'Ç>‹##¢?æ²Ï".9lä’…Œam4Uþ®ÑìÄbÈñX”ÏÁóñ°„-åëUl3Jv?Qµo;ÎëBHÉ2b~L%ÖP™êè^·V4¦âøúBëAðç÷ïpstÕ¢¥à*…‹ë¨è}ÒÒpž<(ÁS‰ºy|}á¼Nˆ*Ô{d˜ì”r!o;zoÌ8™€‹ÎNm*bȼyM +Ö6èq‹ÞEx/(åBkÍ\öÐÝÊž¤)ï˜"…›Q%ji—†ùçèÇØ¶„i•RÎ4Š øÓñ >¤ÄSKÎbLxÒ…ý)oTßôŠ$ˆWì;‡Æä®Q4F¿=¼£uæ‡;ÎlO½Ýf:pL¡¦<䟋|±öûó@äMëÁ;X5ÇéõzYµ8ïÏ´0¥}¨WãÏ3)áǦõÃ7@¼0ÿzrs½ãñx2/eÉoÉt¿óËï'Øv¥ûôr“pA0rt7Q•mç=mªhµ`€b†R¬W>?’Dˆg¾†8¦Bn¶’óÁ Tþ¸)À=(¯·}¶Æ-º+KË÷ÃNÖrr‚mÛ!àÏðC¬¥Ê×2ÕÚ*}ðõYÆ‘bDL‘ˆýñ GÌb&ö¼ajG«q‹ôÌ žøß6ÃÀTä}·¬óŠòfb«ƒ¢Õ k+S k¯uøHÒŸµp]Z30gàD ~RÎðÑ£½/ ¥%ÛP€˜3iõ²{ƒB;=ŽEg½<~ý‰­xËlwÉC þü›ÿ³¿ô10/~ î6è˜vŒbë¡—†ãIõRkĘÐzCô>”÷ï#ÆDe\å3ƒ2ý³ˆ·¬ç…åæ)Èù«\ˆ)Þ'ôi™ì'¶¼C¢#Ùriz•ý@¨bè€G¸9÷9&Ëw€×øTÇ)eÄ0§ g-=ñÖ¦+ÓÕÙª!JJíÔ,תÐÕŸåIk DÙz¢pt:ÂòÛY´+a‹îþÝ>²2P÷AÓ?¿p^o@†åµ‡ËU>9ÀøD¬²Â"¿ÇE¾æå×1.ÇÈçÊÑUÿøú2Y³Šw‰öpVqNÜØSÇ ]\‡”1ÈáÚ Âð. m¤„:ÏŠgaÐ! sâ)6ŸÅЧš|ƒ÷Æzg-“‘®jvP5ÔÛ0—3]ÛbÏ?ýúÓ}jé³#o;‚–eG1àDðõëOøÓßû«{8)pp1áØëeóäœb²äDÎCœ#Mw/bqÄÎó9sΛÏ÷Â÷øzZÑ" çÎãùx"8AÎb æÕQlÛŽ”6@«$ï¯þžÏ_x/½E°M½.ß-ÔåY¨åB0&”@LnÍ{yK‚çóeDoÊ­Í»jß¶ Þ‚†rÞ°¢RÎh«¨Q;)…ôñà7M<ÙjLËT¨½T9ƒîùÀö8PG7³íäæä’<¶´Q’?|b _Óº,Ó–ïΊ¨ƒ‡è ™wÏ}$°ås¯ÓÊê$ˆ 4bòãnYæ@6Z¿ ÌûŸ~á|¿ÑZÅÇó‰Q fœ§!ue¤ˆDô«`:‹ÞÖyC4\¢bŠl«L”óü­ç9d9GdÃéï_OŒÎ¼‘Ç×bö†:€_'bJ8ö °7èZϵG‚@þ£ö/µÏjù¼‘`?¬¶†Ù&¶c³]ÔF“V­óCå1 BåÊû}âñ|ÜÕE©4¦°Zyãx“Ô9&J=á¦Çöu@ûu]Æ a͉§>Ú­šP±7”z2sİáÃ\Ø¢Ö2‰ÎpÔvŠîVµ LGï1Z¡k¸Ó|˜ÓŽR¾ÍñÄëûwx~PuYᥔÑÎB ¨õU§‚®ÚàÐÛ€÷b2ʉÙªƒèÅQvª«š·öÒ¶“Ú: “ë.8ñ” ˧ÙåBÄl<=Mê–­Š÷˜•ÐË»=öé!xÂø~Æ*¬kéÝíDz°  /ÂÙX-ÜŒ\ RƤ¸Çó‹)lFâªô}Ÿì¹ŒÎv‰§¢G ï»ò³¢$T?Ü"ñÁ°ç–…±®;œ6p]Ü¥XÈ7ŠêUn#j[Â@yGkoxh°+åð¡zræp&yQŸòyrf¤[BÇù.38ð´€~cøã±EïÆ%ÌJeÛŽ jènSª³lµöHÞ2œ8œ×‰ç×¾ÿÝîPnöϯ¾_ßp¶<¥.žšsKzO_›Û“ùé:¶ÃdÆ&gÖ9)©µŒ=ff¡Š«œ,*G‡oï‡&eÿ >°¥"A0 mÇãó¬Á!%~ž}°HMqC/?÷…Ü‘gx8´^‘÷ÚuY xû~À‹àªÖm`¹ €F1M€õšmƺðýV*­ˆ žÔçXÞ…[À%p¦+‚œwÔAñ‰ö‰.Fø¶Ð©ÛÉ®À(jre¿E´«!烢Յ¿g’,ööÇM‡[L€0:¦ˆ Ey¿±=v8x²þDplÎÚ¦5T{­cQø~Ÿdƒ½/û]bµ3™Yï׉}Ï<¥ $ä?ü§ÿ 8ŒF 0³¢\yË–#M=;<¿¯\´ÉsÐÍÊsômϑɾO0¶R€z 蓹Ô!ml%ÍiÆ:Ŷ?0¡h1ï”ǵfÉXÇÓ©Æ— ïW_áFÖQ±£žØ<¡X]öÖI á3„¡i¦îÆ!Á‹ççyäg„ë’f°EÐW_~-ëBƒÔëõZígSûüóɆà÷E³×’3o¶«”ZÁ¤žKŸa; 3¹«œM@w†{°¾lȨ•R<<¾¯ÄÉEâ:¦…}Óç!ÆZa hWAÎvšè>žeÒrÞà•lçÀÒÓ$‘ë$SÂU.VO“$cAol#¸)7bK9‘ûß긡ÛãÎØˆ)!8ž¾Úà\N<•~Ó²5b¢ÈEgº|µüs{Z—ÔL€RN<šN ÅÃ{Áh¤·™è­#fdû×=ãQLž¾±Œ¡•sI’Áß½G­½fÙ·ÝŠ7o ¬c{ò{ÙãÄYNì§ùµòÆSÇy}òÔ W<œ²¶®bê®hqÂ…§É°d§TÕrYâ!ïï µgMŒÜ”zâø)«6ºÝù$FÏèèÖ*Ô)Ûžâ© ö­†*(…kP ä5ÍIVÛTKÖó2'òÆöu3ïˆØÊ?Û€‹Än(¨äªc`Öf'iJàG¤„Ë’I3–ø<ÃÌÃ91/VÃöØñúýçã ×ëí±á¼NFðA::gx}‹UqÉ9\µ®Tk²ü,*{öN Â\rvÚ‹<ÊU­})DâÔuÎ"~ymâÚ˜á̦æK|ft"§lÒÀU:Òá=ãj=¾ðþýûž·äLíuœ‘.1¢¡¶ùÿé¿ÔÞ oÇ5¶ºáÌÉU2 ë œgI÷ÇŽ«”;|]-ÝMäƒzñzUJA±’Ï:¢`ÈJ@)ÅZ7d§-a"ܽDÏŽË¢cÜPgåpëÇüÀ;ž8¼°Ê ‘,ç9ˆŸfïWÈÊ—ÖÕ«¿®7CfÈ$èóX\¢Ù‡1³êíhVëŠMÕÌ ±8R϶ Zµ‡uúPcOYö9#º9¬¿)™ÞÛݪ۬Ï~#[Ԣõ iœ˜Í°ç×ù‚K„EGxf@Àpæ®Ðú \¶ÓLŒâ;0g·œ.Œõ*8ˉ?ÿú3~{ýŽ?ýðÀë÷R¦¼6åDŠWl£ë óM–2M•§(pƒO1™l[yÄatÎé–bïÎ+°,ç {b&)UÛφ"í;j1ä¶õ‚Õ¾ò¾£ÕvÏçhÈú䎨«‰x[^öšqÓkJF›DÇÏøûõÆŸŸ¿Ðuàu½ðØèÑNAØŽ ç÷7= Œ®aUK”ÇBÅ„@0§€sóZß5PçýÓf‹ £Ø¢ Æê¢pËöÌš”XÄ^ïˆÕËxe°íit[â}äg}c6›¡µ Dw³íL÷Jn[Î<‘¸ˆè™ØwUû[3ÛmÔrÙ¬Ãö ‚«\–;Ã5‰|±·©¡ÈËðžPQÒq+öǵ¶[Ô¡:ñÈ^åM÷yT"Ñ#y2Äœ8ÄLåÝû|ÃéJ£³½xNäã 3ßÑÓå¼£ÿËÔ™ã‰Ö*Z©8~ýB«Õb ¸Ž(ºÁ`?§OFgWï>DΓÊEÒCà ½žo@ã ­Yø•µ½óð(¥ÙÞ±ZßÜ7ôÖ©ŽŒhð>B§¢–OdtˆNZmw)*ˆiGmoäÔÞä?ý/ÿ/:çDÞ³]”ˆÚ*r:Pê|Q Y¿S¼’KŠ`ûcÇèÊ”½-óNâÙ½º9EܾÇñx –†#€×÷`À)Õ:û3ãz7¤=[·ÙS¹Iˆ%‰­®Î˜ûã@½Ši–V>´iˆàƒ¡kãñ½Âùt;bu~(§?}ë|PÛí}4¬³÷ââ ;eêÓŽà¢Å6c3jÿdXŸ¼w5‚¹"DÏêAj¹¸˜ß r÷Æå”\ª @¬Ê?ÚZV…}tldžë]xÑ5 V,Ç¢ ”W*sTÆ;l˜K~)E†Ó»5F¦S7†—Üæ·iê²µø­Êˆù%j¾÷ãáµ×¦½›Ÿ½9?U£~s;/Oãö—õ%xòðëï9¿è“òñ¥Ì©“ù'äs©ØÖ©Ña(3Ôˆ º²ç—oa¡¬R×%hS· öÞOF6‡Qk @¹.{ŽÏÏub¨Ú܆¨•Ú®íqì ‚º˜L¢Ø2#æ¤ ÇÈ2ïZ9±Q¶˜œµ?ÔÐÁÁµV0WÄ[ Ïtå"~Ã÷0=oæ}áæÅ#Nbhåçñ/µž˜£[»C(ïuJ£Íê{‰‰7ÈðÞ#úÄ!xÞhªsTêDPG‡*/¤wäÕxŸ1fÃ'ßœ=XÝ™&a\Ìï(®¦ªùˆ'EÅ´ÓŽ¦1 2‘ŒG³o;rÊèS‘¢¡2òŽ^Œ1ñæIÁ[«¡OÄä‘,S:j9Ä„"J=ÑZeÀ˾Cí¨O§0__ï a Sò)–’8 -âM{íìùj‚CëµPó£s·Š¡(&&ÐX¹;gmŸ•O!B¿„s& åæéƒ7c%orÆ/߉˜_·úLDàqüÎÑÇDÌé>Ùˆ88Ox¤ç<éòC•¼¨µñ ‡ë6z0`Å7æ´á6ž>›Íÿ”e†y€VĬÛ9<•¯ä>ÿASØü"ez¦ ËîË+¦NZ§sÅãq ÅŒè=۵⭰©øõõe³ Ë ðD’ OŠ>ÀyA »¹ë)4lîÇŽ9ÌLíºµL¢IŸSplS¹€«T‚ÖbÊù€ó|žÔVè/óR¦œlÖåï“bˆ1zlÛi¦Éçâí9϶'ˆ‘ÏMsÞ{Š/:Ûê!%¨q8¯Š}B„¶¶ÎC ‚ÒýIÓã¶=0uºÈ“HP´rÞ4o£pààß„èñÌ|Î@_QÎ;òÎY†óDõÁ™¯óâޝ/¶*SºO†jê²2\ ÇDÓçDë9mÈ)!†ÌÄ5'j™ÛÖ÷´:¶šû•þQÍø§äzÕ٢̸®By±™ç¸¹8Ïà¹R×¼ƒöÈk+øúzNðëOO3«’¯ÇÄ RŽøõ§¿Âùú _OD¹8€ fsL„ñëO_h–¦æ¢³ÍîÀœT“HŒd8™)“DZV¥b†L'Áq1IÀê©s±§²Îö¿ï¢e4õ”»{Áþœ.Q–KqÀ‚³¼}Ï’FY°Ï’‰7e–É4E@…“®–Õ}råPœ£ÛÊ9I÷¦g¾~~"4މ®í¦Ê®á9°zïÖÖ‰?ýú3Ô”±çâ¿à-õˆª"m;tràù|î4• ±Ükq£ò´?'’ÏHGfÌëAB±*s¬ëÏ0-!U žäo*ø^¨H„p3i… ºzÎÌbd[OœC­×u"ïLµX±ÆdÞª†9iTM»e[ŒAΛ͵¶Ç‚9Ö§!â¹I94C²£ËäƒîuÆû:k·'0G'š!ÏÙИ ¢Ù€´%ˆmÊàé^' ÎÚ°voí{ÆÕ‹m²+GaÌamó‰>ÔÚ©ä~-˜'Á¯ëÄ­òÁ©Ý(æ$O*‡HþPZoh£¡·†V«™‡¹&’<¢C œGî't²€®µršƒ¢”[™H4ÿ~ìh¥Óê@3WÈŒaø\mŒ¯Ž!Yèï{ï<ĸ‰þïÿÿö_r:¸3‚CNR<±9á|bµnZÿÝ”1Qé$t}>O"¾S€÷ úúõ !$C t—35«"eö^™™Í›9í;´Q'í=(c”ÙÍ!b07f0É¥ ³uÜUmëd½xSñÀañÌ!ƒLJÔ&Q £aŽÉ㢬ÙBbFôèøz>Ñj½7é˜ía[‹Gr*7àÄ‚z&œ:ªAjC ôLKQ‹.£]'À^ µ<3ºÒ0qo¶Žó]-™³—×ùf‹­t¢^”C¹÷õºñú)Dž`Jå"h½nÖŽkÝ>?wcX`'±¹ »/AÌ;à‚1 ,7bµ–ƒ=x[ç\\„x1g¢9>ª Ÿ¢q«>Ã@ñ'tî:ž N½!AôSQÿ²«(ÓÝ'ézeªÄ”Y¥3Ù)“ á©–¥Ò¥”úùzèH!QÎn{†øDˆQA¢G=I‹H‘é¦1òʂ缫5¶’J… ÞÔ¤ôˆs(µ ÆÌÂkÛH~Öœbu‚>ûŽ19çøHá3Í1y}Ü„%ÖÍ´jÛù~÷¼£·A?H ð>òDÖ;úìh}ÐÐŽíqgÓGÛàÅ÷$R=fÇ–6\…Ý‘brܡÔYŠÇN3ö¶í÷˜âŽà®ó}Ã5™??¼CðÁè …Ü90@»uexÚ=ò]:|ððÿƒôoÿE•h¨"‡ŒZ:¦vôV±%öëtvâÁâŸÛ@ŸÎ{¤äQÚ…R*bôxŸhzaôŽrb¬§‚ Ô‚f‰Y:™&×Ѱo;j›˜£Ð0§IIÒF÷ùPÙZmÈ)²ú‡˜dZ#z­(õD¯1G²¤Ý»Ü4µëC§Ù½X•Èr‹À‚ UÕ2M&ê»Ý-ða½ç1¼U\ªºUÜyËLœÕ°ÞSÇ-ýÝâ†ó4UÌ®³-â7òAé˜s µŠaFϰä—ÂESàH¾ŽãAuŽƒÃœ‚Ñ j+Dd8±ÍØÛg>sFïyÛîÖÇþ`LoÊõlðÑ!XáSJEmÕ1úg¶-±I&>9ò°zálÎTd̘©ô6x`tűï\l € #"ÀÊtrŸÅ„7׉ä#Îú†(ûë!DÊﯓ&4»wæ ¢þ*Ä–çQÎ7T†©?É®›FC Œ3ËÚ/Ë›™H–ŸÑFC¹.ªbAI¾‡ƒ‹Aµ- ¶ëü†O£V#=LŒNõÖ(T*µÞ1{'P°w¨ ‹ŸÎh­bßw¶Ó'çŠ)¦{æX*OI­6ÄáÄáØ6´>p½Þ˜'™•]T×yÒg‘³1sLÔz¡Æû¸p¾_ØR¦¸I1$ôR07çø=C;F¨­Â‹!P´cÂL Bõ*78(×sµ[ï!D´ZÑZAÝhÔ þüÿÎ_rÊÖ{ ð1Р²íè“¿˜ýRöq M”Áí„(“[";œ# ,wÞßÝmü`UMšÊTˆ³ð!¢·Æ@–`ê&ÇŒ`Oè\³¹/Õ0Á£7¼ -¢XŽWêØcÈDC­-ÂaÔíúcÜsµð݈p±0£aÈ o$ÑÁÓšÞvqÎâ›-zs¢|*bv8ßç`Ž‚I@ðC­÷j¹ÛàÎt¯@?ØV¶¹Q5ÅùUïÍdŽ0uÓÇEs%•æn ­¿êøl«/'†±Ù2S÷Ä‹‘+ç) ñïä–‚¦¼Y»‹®Ú¨ˆ±˜¦cÿùåc&[° çãndÙÑjý`@î†û|«hÿ}wU?¿Œìr‹8Þç¶ôõ™€×¦Ï Çð•» àºiü2Üß&4+8[­<{;.bôvÏœö‡1ÀtZ'iñ©xèS²ÎÀd;§Ÿ%ÍC’‡sâ™ìç½gt‚ ¦0ÈÇ2ÁG›S™Ò6ðQ+BÜX]næể=m”†¦øQÔ‰Çè [ʸzEŒ™…ç¶£µ "ćûœ0kCŒ‹#Xt¹¥cLèÓ|4)#ÄŸ¼ù6YŽ1qì|2ž•xB5Ë…^éxwÎãªǶ#š©xŒŽ ’g×=©S#åÝ‚´¼ ÂMTMíXzAŸló L¡´Ññ„KZ›§wúœ0¹:ç ‘YãÁøSF8abŠâñ|âù|b´†©ŽäÌ–¡ÎÙL6­.3œã µüéÏÅäOôŒ‰”謖™øúÓ/Œ1ðx|aöjE3Iμv´S,Sõè€:ªþJµ#†Œ(LÈ<öÄ’”b²DB.ZH<à9&¶(Œ³?öÿ«ò˜7øÀD3ÕEtS½—‹PˉVûG Bëuáx<Ù“Ÿ ©È$*¾´óN qGoô}¬ÖÅrìzGëTò’ú¨ØòNƒå‡àSÂUÎ;—z‹›mПS2ì@d‰Þ•Ã=.\Ò&ûÔÎâ>!@J)gÌ:œCÚ7fŸ81x¤˜…=ݘB D,|ŒèGæy °ñw-6t¶ fåZGúÂ’¬H° ’jL…sÓC¢ØP]Ì«ÁÜo‡Ñˆ£>¶}ä´!eöâçC´å„6'f<þš<øV_‰˜Á†íòá5Ádິ®k“ Ч°µéýüS +¾Tb†_½â#q7¦(âJiòiµª \í¬Ï)kK!ö°ØR±Ïþþ«W1õÇ?ÿø÷¶ÑÜYåK¥eï?ÞGo…Ý9™8øàÆ@u`->yf_ÐÙ ÎN2уG ÙkÞœ¶Ží æ®S{ÿóN,áÌʈÕ7Aè#Ó-ë­bL%UÛŠ•d*#x»wÆ@Þ¾0F%jC( M®gç?sP¢¬JTŽòöÙ‘cfZßì&[VĨòì9m q{>q<çqµn£ *Ð?¶ï†¥íÍÖ,É£Œ 2•^å|§÷øøÇ)R"üëÁèb{4cˆwDƒª"ï$!oÛ!ŒËHÓžÏp½èaëc`¶Î ~ ´ÞàœC© Ïç>˜xÃND­6ˆµçGïɈ •iæÇJS4)mpQ0k^¥Æ4"Aà™ÀJ90Û÷³W®èðMi:Ño&ާ¼Z*†Åìï!ýÏÿkæÃ¥^€:ã±zš£Á‡Œ”jSŒ~Â! ¦O? Ò±aö‰ý²xaË |ª£AìxìÄ _ÑáýzC1H:mä-qˆÃ!áUØß[ „3ÔJήò² ‘´`UX΂’hê)! ‰Ñ˜$š áÐìÁåé¬]@pSˆ£>ß'G‘ÒÇàMîË…Á iµT¨QxÝ àz#2æhXvÆ[ÙjÇqG¡6oT}žš<´etÜai‹¿eR`ªª}r8¼b‹i½ ƒŠGþOë)rQª£Ñ?€ßûW8ž_d%Õ‹‹8߆ˆ^ÙÞÙbiKÒÊÕ𖲪SÎR,ÜTtsÀCMm˜ë˜køHª0,u†Ò¼Á×°Ì~ëd¦Â~ûywÛTO‚Áû{#½g5ʶâÀüä›ÌF²%® ŒA=ížLUÛåÖádù~X©«ÒyËŒW0Ö‰Òþ”[…(áFZ8ÞoæBütq‡hrúœ1‡ƒ¨Äxy»IæXž âuÄ{ó#LÛ¸­%¹ôxìOËžû¯ówâ9¬Òÿ~}›èa~Âæ,M¼Cm!f&~óux‡çñÀûõÇ×/F¬ÚL‚²PÂ(Û¨˜:ðÈÔÑbÂUê Å\ÎT¦¥¡Ú1ÔZ“Npl._“Œñƒj' ÅfI€³s­àâÂþñíÿÔ¤æ‚bŸç¯/|ÿö__x½^Hdžú¾îXjØŒvÝ“KþÌÏGpÎ÷‰g\­A=go½\€óØ÷ƒªJsñ›K˜òÞ™ÆjÜ«œˆž¹½Qbø‘7Å?sNrÄÁò)|n§a€D<¶GÆù:á½ ù„6³±˜€·ù¸Æ8/Pu¿þçÿR²]èzVŒZƒ@$bÛÎï7Dû¡ãÖ¯?Òšr§æ¿àÀ7bæ+Òé»í‚:EÞž÷Eº^¤µbÕzÞyKh‡í:cÙ&ˆ€²ç7Ñ©ìRK¾¡Âbêílè@5g+Ãå[a@Ó°6ª0ìÏB) \DÞZ=­æ{À°à)ëíkg«b̉Y |J¼ø“ѧjUûûõ"«¿tL“r2‡'#æV‡M¤(¯!SeB„ZòØZð×_Å3Þvz,Ûõv|áüþ ™wÐö¹¸ÈÓÈ4 Ûr";Ä"NÇPK¿ä‰µnè ž ÖB&6”wÞß¿KmFF´´ 'gcP{¾¿ ®'†œ°!î}ĪJÜ6¹fÜHܽ+Y–ëöçX5&p<ž8_¿Ñ“òÃøþÓÿsŸ½‡.ê7átTlaí>¿¿Ð?ÈÈÁr)B4ch0l …ÞÑÌUk£ôÖø´‚ÅdÈ.@0 *XÇç}g²°ç'3ÓQF‡û÷뛢Ñ;I¶sL®÷û†ŠqÒà˜Q[½ý_Á›ÜÙn:Yó0OU^­Dè¯yÚ¶$°^6O½-¬ ³bd±²®BâÄ–‰=Ÿ )•3"#´ôx>PÞ§]›•˜èð‡¯•=b,-ƇÛ_Ö[‡ [Fªi ¥-)®âsÈ}ûŃA}9m”ÈB>ásXƒ\‹=uÅd Êu÷}½Èçï÷ Çþ€*p]ï ÈÅ`7ŒÌ\Äm“º«dÒËâ· ­\œ±•  JŒÏrñ €†à2Y`ÛàµVÈ_ÿóÿFsÎÜÉ'þ–”3ú8 ¼Ùžº®·A£Ø¿L3á\¼ÛL}6ŒÑ§õzŸ¸Îo8ç‘öŒz;nWÊûã ïïßîêÓXhrÐ tüCaÇ«9¶ÃXJávX¯"OĪln&O·|!{嵓dŠmö­p-«8=V:!!n«p'h°ÚÌfÒ­¹ƒìùGHô„²ß ^p½^Là³T1jIsÃZKÁ$ˆ) Ô ûþÄûõ ÜnôɉµzgkÍeÄÿH-2SÍ×S-„àí(ËYT× ôÏ n½‡{55ƒ›—Š…û%íó…´eö’ª+¶)`µ¾ìoç\J/[IÄ6ø¹Õo| xú\öuz¼qìë¥ÙÉÙÙš3­™ ±áœ P»î+X$èd+õsñðiC®f>þ{cùôCÔÐ3€ÚfÈ×9çįÇ¿½ÞÖ‚ÙÐÇ ªç"9oJåâb„›‚>ÙŸ¾Ê…ýà‰V§@mÏ¡ ÊN(`rp·,§É‰mÛyÒ ·–í*|¬û âG­õ 2ð¼§Äy‚ê«VLmœ -³äP”ú6ó2ƒÙ椬{ö¼ï¿þÿÊtÈ{B3J(Õ.`ÇTNù@ôD/×g2LyŒå*”*Ö˜ZŸˆ‘á,mTºCïž z9&”VPë 'j»-çûî+ï7ÔÉ}Cm)sX€úÂ@LÆobN3[‡®«÷Z;9ë1•Òõ¶„°éPW—¸°i£É¨YÌ)Õ ×ûÞgzYf»üàU©¨XjÚ…•¨'l2ôâZ&Ÿ^é˜ g©iÎ9k×ñ!Ü¡sPVœvž8 ±VRPƒ1¨œ¡.†8¯e÷"¦„qõ[¹CS áß>ŒBè g<³Í»…åà°o– ¥þb@ØöŒï¿ýy‹h'ñÕüõú‡_"b5Ô×5¸¾1%óÅþÊÖk« C€¶öÙÔ°f+Dhñ¨b¤n9|çû7n.sÀù ŒÆ¤ÆîH+.l1âu½ÌŒ[ Ýðm’{¶äÐb‘Èí¾7÷íÀuËo£Á Ú¯óǶ³U¯.ÞYGF7ú/Zoµ"oOˆÎ×7Ï'ÎëœÀ~d”Ö1»ùåJa±ž3Êû„z<œœ¯oäí (Ò9 ºç_(åeÏP¼1.:HÄîC¡X3>ªëü?úŸü/ÿÒZGØ‚õí9lî£@ÀpŸýñDN|€æÍ÷ç…\|}ï‚â+^Q ´÷íx„Úu¢öJÂTô6P®ÓîÄ*ŠÂ:̤´ s£OJÍRDíÍ0 ©ÎAÚ¶e†à ½Qèi èu&B0Zǯ_Ì9Qš±ñ¿øíoÃh Þy´A\¹7٧ذo½÷e¯[¢¶á'¶mÃ0¼@Œç÷ 5tB¦âx~áýb¦FðÎúæxx¨0c¥Xæ»3̹÷‚«U¦Ìà9è“U~뷌ϚA”}úiŽi" Ñäœ)1°)<‡µ†@ÕäÚBÅÝýkµ–E?`“÷gsŸen%™ó ¿Y'm²“Fièµãñ`®ÎGLNkÆÏB n 3Í‹)ø:ž€gû ì_8ufVbA|ÄhôdµÙ0&ì~§´\œXì,eîÇ=K8xl¿v NœCt‘æX vóÎ#F¼ó¶½cÛwz“*G§ùæ^ž&c ,ô*•œÇñ kpAWCº÷Ùrº•xÓJ.¶›FÃt@X„jeQ6Z…2ûædq •ÛˆX{CJ‰j³RØñèy§ÿÆÇÀ¸ Ô&F`X½ã)`,»mãzïQêg­<¤Ã­êbBôzBAŠo µ!î;®ë…^XÜ·>ø¼÷ï“ ÌiUPKièŠ_~ž˜Dj;1gÇ(ÓD‚9 ¼ß Âyaï\+0›ü(|xB“ò/þ;užØçÖŽƒ»fÞhŽ4Œ–QpÇ ¤õ‚8‡|$\¯7Ò¾¡½+&&Íúø³wrëè£Þ»Ü~‰þáØrÿ-7÷!ãîŠÉ4ÕÚùFÚv´Zðx:0Úd„}~!&ä” êh¤3䉪âëù ßo¶Œ1†©—9,!A Å€÷yṬìA™8ŠP´¯v±àñxd•òuq¦°1psàØv‚WyÃYôïœÇñeí4JŽÿê¯þ„ï×ëVŽ~kP±a°ÍŒÞÚ•#ÏÖM«lMmÇŽÙ'æÊDÙf!Äô-*ÆŠÙNiC¹^ØO”JílÝ ÉmÒg–"Yygù6J4(!z¶ÇßoÞ &yî:0']ÝT<ñ?ûÉúc²knu‹»ÓAœå å䃹RЍå9WèVçûRDZcN··ýÀëýûÇ‚kËûu3ÝXÌxïBB)oòÔ’0wçüuLvC„êÜOx²ìÿãÿíÿI½x¢„E€ (¯|Êæðå±xv…döôeÒ½žÒ†Ù:ºÃg“õÂ9ú´e”óâîªô$,ÔÄÄà¬Du_wOsËO\×oy‡@QÊ…˜6x'¨ïÓ2Âq?÷ý€¨Cib *¬öúc/–Ûõí±î¦¿ùÙÍÀ~lÌ2_û¸:Œ2Pð0f§ÊªÍ»O¾†ŠùØ1ÆD+×›'F}ÂÇdì׋©ŠÌÎæéi˜ÿáîàëºlÛf^‚%%ý¨­` 8XKðFŸÓ‚oGÙ…ˆr]pÎ#$›ÙôÉŠÞÖNoþ‘5{ùC6Ь÷K1Æš*üœ‘üáo‚¥®l (7§~Z^¦‚â{µ¹àÑZ¿ßÛŸðžê6·~“º0 êm–ñÈËäùã$ãßÿ_”×™aRÔý ÓÏð°L‹”"Þ¯7ý:÷ ïò† ¦tg™¬qîÂÀ/ú±óçF¿>»°ylœs4¡ärIýz©‘J­dñ¸!­ÍÛ@cB-ÕdúƒÆ6a1v<Œ”p–ó–´oiGkÕÜöÀu½H .'ò¾Öˆí½VšaYì~q?˜ç?3àÈ::Z)¼µ7ç5<¾G€ ìÏ'¾¿§Ÿã]MøÒ×àÔŠ“¼o8ß'O¥ppñGš¦™?1Þÿ>/ÁÑùM•9W{þÂûýM‡·ÍSÒÔáÕaÊĶg´«axZ»c⪅ÝíØ 3-JC„}G°°7/†¯=ž¨­¡õr‡OµÖ Ý”÷ª«“Ø{¹ýÀž7¼Ï7×½•ß;aŠ,&'d(¦ã,Ak‡ºyÏ»VŒÖ0z‡ŽnÜ)ÚyÉd9íÖSŒ>0&CN朄yÕë~0§¿\@-liÍ9Ì:_I)5ØÙPBÔFoPµî9ØrVb”IL´^ !D¦+‡¡[Ì&¦<úˆR+öý@iÏý ­Œ6PKá" |jÎa÷p܉¹®Ç¯€ ¹ØÃ¹ÖBù;Õ©m€UÄüôJ˜$5d²¢æèp1"ÇÌê$'æ„pç¿ïÛaL…÷ödûãîÛÚ/eöHÿ¼®Ÿ Þµ&®y…7yðWÞ».¡ T±m¼°åV×éÂ~žÞ׃né?ljáF œyaSÄ*Qˆš–præ%©]³ðÄìyCðvJ4Øø[½¤àI'æØŠèÌe¾N\Ó¸Xüwt7w»Vþ>]ºýŸË›7èúgõ÷,PÄ“F,ôV8癇>Ê5îÆÓ1,ÿ#a–†í`4B²Åàþ²yRJ Ñ{›¥ýüYœ9œÇœ¤Ï>›Ð@ê?×®óĘÏýÀu11ÓG¶Àí°vËlÍd²>PÅÉ‚•³¡Ö;BDÉ_'Û\½¡—†Þ;ONªŸôd;Å€”ˆòç? J:2¨Ô¥"ïRʘ³a?¾¬Õ# OK(­‘­ÿÑE|’>½·gd@¦âןÿŒR ¶Çn®~u[b‚_ÚZ#Ç9OÎÕÐ>)Wž\óæ„Í‘S•Éç"¹œ×¸·|ìpâPM¾«¢6P÷¤‡‹Y„tx`ôŽ<®‹v(IÄcÒxìᥠúùctγC†óŒŒPs­å@œŽ*»ºNˆÿú?þ÷ÿ₳ÀxóKLc9V¨2œ) &¼'z|Ϧgµfí0}7+Ÿà¢e:nâõ¿åÞ¾ï𢱇öx>Ñja~²Ñ_©«³Û&³BÁãêœÑŠËoùn?•͘T1S;t ^d Àèlo(å1 Ľß9ÎZkô°gºe>î^ÀÄú´Kù3oÚñ2ßq}™Ÿ…XZYi [Z¥ºvëf(Pê{ ìxLLìÇÎ9$oTÇÓ¡_†¸Ÿólùñ¶K­Ä×9o:­µs¡å'ÌÍQV sš[#"}hú`±Ñ':äóÏvßè\–Fªì˜p‰ÙïjÄÙ»)ñ(UõÞQ5„yWŒä¬qðHC¿c‰çäÃÆÂ~¯R ÑkGWó ¾Þ%7½ÙÑ;¹WüýÓ §ÕÆR^£ƒïjÞxœ•?¿SL9¦l³© æ¤÷)ÅuW}ÏÑ*gs`h'qÐï¤}È“¹ØÞòLÖïÝŽå*LµŒŒp½Ûê>ï“Yˆ\ô']k½7“Rª!DNÃÑXÑw#cÚà3Qk¡)-‘eÅ%ÁL¾£Ñ=~]ÚÙr1D ÃÈôN‚œÜQµ:&Å5Æsêµ¢ÖjŠÃV‹ED„WW"&¦ Û¤­5ú«& \x WÎ:¡´ˆ(ûd+Î{ íª€° 5aÉæAIyƒS…ó×û…"btp…+èµÞ@èDÞwä=a6r­Fã}ÕFE´èmÒ­<èþçZfsŽ`x#{8¤mT7>޼sƒðž<°Ûï£ðÓN—¯­• [~Þ„Þ+dt#ó.âðЏÑ1ïÿá¿õïýåýú¾óÏP§\ æd.ùhÛ~Øp,"nÕpÏs“v)€uÁqW0ìoR¿ï}æ…0 –f}ª=TÊïQμ!¶-s#!äO(‘7\ÛÅŸaÅ2»°¨8¶ÙŽRZYÀBPê¶È´m);d¢ÖF£ÛäM}ÕzïtÄ&—»W;f7Ó)(ßÿ’㉦ù1Tõb € Æ'šD>4&-d&¡Ó9AN›íhæ„s˜£cÛ3³V4ÀJr󶣗ˆ͋L«^ÛmªËÉ~[n­U%ì•¢é½sLÚçýý ¹KÔ3™¡ãÇw>FðºÊï­Ÿ½úÚr–÷Üý ³®})ÄpÿN±À q³Tš­Ù‹%à‹Äë?2Þ)6špj¾!çi†³{Sì}êÑÇóËNyÎpñŽL4;~‹8çYÚCï-êfÇXïy% Òe¬8Ž/@×ûfa@`™Ý¼ß½ÏØ÷ùMB@"ÕÉ‚‡!YDýK&¹uÁÙÂ9¶ý®êóvØœsa@Üæ?޽Ra–í„KΗbÛžÎ2±¥LWÚàB$£q=Ç4¯ÓŒböžsP¢¡‚Ú»IYޤ˜LtÇ“³Fa+)„È=hÌ“Lç­[J¨ +ì€-oÌcÿÑÚã"l‚ qˆ9cB‰—µ <¤¸ñY‡"§„RNÎ@Ôx}!ΡÆ?çœnê–7¨7p¥ççY˜x:XxÀyÈà`¾ÛóÙjC œw q# Ý»í½’ÖæD#Ƭ–Ñ\`žMëôžä”±‡„:Ï®Åñõ'”ëäénÉf8¡؇pÏ!—ÌÚÿýô?ýË‘(íÂãñen댴혓ìÎS/Ä£– sNÔ:`5¤)" ^'Ε10ô$y2¦RæÂ?×çî£Ø5äO ¬OŸ‘Õcï?Ô k¶`éa“=sB#d% š×@ h‹'çÞE.Úñ<~‘*b:{¢¼7›Ÿû¸oö¡QfÚªT˜¯¾Íyâ³u2áMíAÕ9‘cFÿaÌ\ƒl—"Õ@}wEäNøè-_ÁÞÏ€Éz™]p1œ3rÂy½ ­ß¹ ÓZN¼Foa²¡Öq'?¾|`Žîóï$O&´?h ¹·Ö”Þ¢†)À‘7Ki³*~ØäPÄŒZæJñÎXQz·ë>Ç!k2-÷ý}rý´ÎÖ‹\mSö¾×F ¹Û9ÞÄÄvÎ +Î/Í&þø<Æh­Ð_ƒÕrü„ì¬ d®†}D¶Ùÿ|[ëäÁ~d‰Dí´ HÀ¾3ÐÇEnF)%”ÒØÿ®µ×ÛÄÓÔÀu½Y< ;Í„„>9Q¶³Õ"˜½Ý-i¶ec&ÑUçDpœgªL3ÈVÄÑÛ0•$[¾­wÔRÐç@¯ÉGÔ΄¾Rè÷“1=é²:Z©&ä p]ÀUOļ¡\'¸¦«íºðïó¢µ “8Ì&‹Dú8À¬ lÛÆÍHX¦¹ Õ[ч堔Âõ&Ì>‘Œf͵®ïÒY òä=ØÚJ®÷W9IþUšƒµj ÞïµÑDÚjT oåY$yÿÿGÿó¿4íÖºš¸®RJx½¾ a›€ ƒê–£¬:n¨!{|;xmX<ýµÌщ#ñð ÁD‡Gd?ÏÌr"‚z-ÈM¨ÏË&«"­Z˜ì½µ‡”ÕÜÄ´PžaÚk]¹âÖ¢™cØé}ÚB¥–O<,¬¦qQwËSPZã1O)«ÎÔ> :æ\x¢Óia5÷û'_Á”úYìnšëüäh0ÇAÙâ2PbLÉml5rホŠ99ù >)`>°åÛ¾cÛ2ò¶C1 Å\Jå`¾Ïfƒnå³yÃ’†Ütß 3hŽû$å ÐÖ™áQ[Š1ATͿ̀º‘y£öûh¯›i|ü.¬®ÜÈíb·EÙ°î0yäí!ù íµk1+îÞÚm,œ¢t ëÀÄĶ3îcÛm"Þ}~?„æ.Û8¼Ö“æ{ä)DxãÙ-¢0É'«ï)>àßoÀl˜ ÄqÛŘ8Ëáö¥ø¡9ã wóŠöí0÷?a˜)íx~=íTL‰jÜwˆóð‘Ù+@‰db²gÌ ÓÄ2ô%´ÑVÔ+!l˜“†4nÜ<›’ó¶±( .DË¡yµ5ÃÅH_–ûÎ<by.¤”8¸ÀÎC×ô‰ÑJéP!p]ñÁ Ol9Ã%¶lçæd‡#¤ŒV.xq<÷æœàØ™"XTôxXQêP®‹¤r3àúÙáè$(çmg ÕLÖ+p,ÆL£uŒ†Kovu5&Ûzµ\P´Ú™CÞ(¥ ŽYôj³•@鼃ÉìÛAº±¶ûsfk‹s*Àñ|"fcâ5§xîOÄ”×IÇ:L!ÛÀoôÈUR“"Â<Þl”ÙŽÞ0õã&f+àãHæ¢E‰ÐZw¼s\ Uám}”è9ð²vÂB–¨]“ør T(‰i¯±Mæ.Ì¡ä׬`Êu43sšÎñ!¸*YXCǽ8‹µ§n’ÖRøÀþçNlüÙ¥t`6Ä-aÏŽƒèüÖ‚sxýþ;Êy¡\J/¨çE½ÍKøÚ"_o_í GŸ†˜<×;ï-€+ªÕæc€q{Æçta[‹öJ^ØüHvÅø;û¾ájNY›·ø”8[˜K v/üAüz¿/ ïÛƒ²ú⟆¹ÎËG‚Í›óV¸©0äÎ|ýªŒ4¶¹”ÀÌ¡2!SîÍj1ÏÔN.jÂ’5ëеyO %×Ö£²Zëdíá=· c\WAN)$š¾^/¶#g»7”Ú,sgâèé•Ù2Û S …‚ËÒæ¨6s"Zgvf·6îþ;ÙŒvΛ„ø±–ÌÛF3k̽5<ö‰Ü"˜¥a~†,ܺ gô3†¢u+JDXX˜hÄÿÜkÔ™•@ Ñ–VÈM¡cÖ‚´±óá}´{ÏCTQʉQ+Ô°+)mäe9ÇuÉ;\ÆzÊû†Q;zWä©1xÌÉ<âœX ¤”¸® ÅlqÏÈ_“Å7¬DS¡LvuÖâ|ã–t"åˆëuÚ½G¹1„DñQBÅß/޲ù-e”V­Ýİ3ÞKæD­]h…b…‰‰1;rJ¸J1Ún#DÕñPQ¸é0fG É3QÖÿkÿøßùËh ªÑH Ì.†§ûІ'­4û3Òe,S裚½rP f\ŸðzýÎ#ô䔸·ÓŽe<Ѩ’©_KA©'5Û³cßËðFëv´/vSÝÀVWŸJ£Ñ ŽIÉñœHÛfaOt[ó@ãQï6 … W×?‹ z‡±Z@hü° eÏp¦qµÌN¹±8~Y¸}·7¬ *ç8(­ynCi°¥v›¶éŠÉÄøl,݆¿cBtb<€¼Ïåºð>O¶ºqû×:ùº¦™éÖF§6œ›ÚÑ1±ç­ ®LÀ2\˜RK—pÙÇidÇü"ÀÚßÁrËoå*T™Ïà3ÌžX™•_²6 {Zl¬ç·8hå&ûÁ À*1EÐ:šÛØó”ã$aCl˜Àb-j ‹ƒ[ÌoÞkÄÙKt÷¦úñ,pˆÊìòE•Y§&nŽÁy$µ çÅ–Qï÷£1e›¼c¦ÆØ2ùI>üœ ñEô>Ð-ügÚ}9 3017Û*b¾R ï÷ïP(û¥T›¥ ‡Âù>zgnÌd¶¹ƒCíýVöIðXPÊ•†ÈÍDï_¶@m–jbEöåa:~î[N¨ršS‘bå[­Àà"ƒG^ÄÚÚV3ffqô&&œò(µb³ ±ugoYÑ÷ãö9Ì'Ö®â0~ŒÁͿӹ>UïTè-È[†7¼ÏOî¢EQë-òIO£ù`ºá˜ŠÒÙš”¿þçÿµ®Šiâ¹£ Æ2·$oê°“GGðU/¢ÖiZ«.¡õÓN0" p”±Åœ®¨³aÛòÝʹánÇZ8ïP[À‰%Q;Ž}ë/Ä6»ü(·ÞŸœ®ðàM›¸+G[²“¬"ðÜ–ZrØçu¨ ÕŽ·”XA¥¬÷í«žýø]¯“!~Á8«ª_-”Æ®‡Ù;ͰÞ#† ¥_”nº€Òùq1á:¿ O5|xLDõÔZbFy¿ñõç_x½Þ,l”þh&ÒózÛÃå¡h&ˆ°ÝùQ?° q„Ž® F-Ãä#Í`¸\£au¢^徿Ö<†-Â=A‰©ˆG}¿Ù Ue´À˜q8k·FG|I¨å2é}¿Y˜â2†0ï~}Í©”ÄCM¯8¶LIö®ÌÁNN£°fßvººÇ@4E›s\ìû0 µwØ£T;…1SV»pëÞ R ¯Ôby7Óh ɾ|ìÆ81gÅcPTàÜóqO”«bÛwÔë$NgÛ©µýy¾à|4åZ·Û6~Š<çàÿµóßûKH¢ÛÁÚGoYļáCLö tºÓ›%Zm™;|-ì#wSA)¡dDQÀvF÷}røÕë&7 Ù;×€ ä.a4̆¹ Ù, NŽ:vI|M##ÛCøAõ¾f<­üìcšË¤Õcß±0î ¾î…ð^9¸KBLœ÷‡ŒSD4;ªc| €7å‘!P¥Á¡¹UÎaß7”ÒR0¬Ág9cÍ ¥ëYÀ*B'BÎmo€â ²ºÿýÚu~ìÀ6»†Žv+Ÿ~öø‡ V”“¨‚§ûœ‡ÿôÇÆ²L°ÏRäFçCy&g5ºR ÷q%È]iþ‚¸2ÎmÞ$w…k¯}‘-‰Ô/'î#J•\4©q“`QBå•s  •3>Ó宥q}fbF« >»¤¥I9I`7Ó|#N….úà±o;z7|º½î#‚çé©›Z)çÍL¹:YÉ–r!çŒì3|ò€S¶E”z»€ó<Ñ­•U\×ã C‰¿ðž3ëý=í8ßßPG‰uëÎ;¤í@´6)¼`K}û¾1ƒÄ¤½>®À8¹•‘Þ;“‘Û ´³…àûõÍ?תå‰ì¸Î ½wôNç}­ÌHR3ÅÎ9áS ˆÔÔjÉSA6­U|€ü'ÿÅÿQóvØ`TáÔ!y‡åÑ5/!z6»Èù@)ßpðˆû†Z/Ós'2ÿuÒn„L±Å‡R„šzk* Fcv(<[Ê–Rp€ıÚl'>ˆa§¹lXú¡ûQ™Ñê/v<냥Êï{ºÓ‚{Ö`êŒØiW¥.F„àÐú€sôÁx¡Ò¡šéP”:õ×ûÅ¡éT¨3üÂP "ÑÐÕ sqQkw@Èbãä 3È9®‰3™¨FÔ^(sÖφ°rRDôn¥,Öí·ïMfËÿfw©.w´‘U-MÈ(±ü DutÌù™y”Ó®œŒ›ø‹ÕVúTÏ¢«•|̃Öö“ó¾˜^g¢Àtr#ÉTdC3PŒjŸ›(–Oν(@‚ƒG‡®óp: õa'Wùœ`Xz~æ«ÍÕç€Ág?[å"amÀ¬×û“ûZÁD2(”]vƒvIDAT@ààU FgK*§„ZOˆ ,Ž|„ø¯ómßàlx>–©-¤¬49ðþöÎsènùð2ºQ‘´O”^‘Ÿçœ6x«vçè8Ž®RnMN”Än;g,çû„‡à‰îágp½ßˆ9wëä)žbå¼îð¤è|¸^oïÇd^z#È1äx{BÈT Aᓱ¸Úàðù¼ÐuàøzÃ:'€µ*ÕFVom?œÍ ‡ãkC±õnBq䃾“ä-µÙu$m:E²$Ç=ïpâq•“øÆø aš:! Ä„[l+>OW»PÑ‘6|DÌ¢gG¥Z+T­«J²w7R¹Ÿ‰CoÔÁÖ*ªÔ\\ï‹§>eK=Fã‚Ä9\×›†A°ûQkÇÔÆ™©µ|ÄÅÂbzšH°ž¸Â©¤bÂ;´í8ÏoâI¬÷v#~,Ę“7GލW¡!& jCL›õP9DÚ8»°»µ@ˆˆ©3Ø—„üô·lwJGÎôFÆ>3:q!³ý€è È)ã*Ÿcð~$¦(š“{ËÛ ˜Þ|+Ößq2—œsÀ|ÖÛbèL5dÍ(+ tímT]ù0j»Ÿ³ÇmáD×ÝÙºî7”ëúàMxb5%[‘»±¼n Še@õ ã§=twñ±0ù°^*~¬wXÁÙ¤ÌÔÌÙi¯ ^ìD@ô‡³JŸsœX´0 Øó†r@Ò¶ó:­CÛñàÜĆ ‰»³Uöçïïo8ûñ…÷ë>RñÓ{C—‰-FüÍßü+‚í8Ъ¹tx·[a`”5ÿlyQ§?[Åׯ?ã÷ßÿÆ ª¶(ZõÆÀ«u‚Íì¡»OF«]º‚eÙ.Ý¢2à<ƒù9½Y´*OkÉúõ¥l £™‘Ì{ŒÞ-ûâ 7™0CDë ÑS:œ× )$ÔzÑŸdI} 9£³µï=ú¨x_¨½¢\Ÿ¸Ú×ëÅ`'ñÎrâØwè®z"ççõf ŠZ.Š1"ÛjPÒš{û˜y—ÏE`KÛt]··ˆÏÄÄÀãñÄûü¾;µÛ–ÑZÃ~<ðýú ã‰÷U¡³cß™¶zž/>£"”ÛéwšáÔ‡H)sm\ýæÄ–6œçç Bó çBKŒÎ„ól;y瘣Šc'Ò„Òàõ<)[w>ä}ðɉvJðDŽ__xÿö;¦ÀÖ*IÕRSFJ¥6d+œ)d8pVnÿê_ý-¶LšðTÅóëïïßÒo—blI†7±=˜ü˜E¥ÐòOþóÿVÓJʉƒ^èdgª›1ÛX=çlòC«ÂJ¹ Z¤˜Q[Sb>\*þ>çR–}@ír` ¥Œr¾u6h\X jï—eºÛPŠ_Á'ËGßp½OŠü| Èp˜Æ[EÑ®jó š÷íÀûýmËpp^o¶WðÙ ¦ûvß‹¬ýͪöW»_æGrjU­L…áK^¦XØŸM{‚ø€÷ù†Ÿƒ?JŪSÚ [ÚÍ\ ôŸ8ú;;±Áf@Þ3O€â0.’J·œÑÇ@­ »©xJ«†»DX>®ëÂc;Ù}2‚+ ZáÄãûû mtäñýþÆfa\2uTS[ݱ9ö¡}f???]¹ï-çÖ¬èûÇ— ‹b³º;«ÜNx>¾pvö¶»AôȱÏ“tûT?„y˜AP±†ÿ\ÓL†Æô’ïË@Œ‹B ne"ÙªUÇÓÔœ<5¬ÛÆzä.Qÿ|<Ð{G›õ:‘¶ŒQ8l}Ÿoļ±âFmØú¶#C'g4µØòÎ/Àyž<ÖÉr²P8ŽÝæ¥Üyß)YÛe õ{Åñ¤›ùužø«¿ú+ü«ÿ×ÿÞ®ÛþxP”J‡ ÏíÀ«žHžtï :ÛþøDDÏn/î5¥õb—‘1¶ï÷Ëž'5s ÛÑ¢÷>Oî0×|¥ÖR¸‰›Bn…x–Vâ¾g‚ÌÑa³&˦^vº8·Xä†`-7\ dZ‘±Î§Ìáñ¦rÛ(RŒø›ßÿö¦bçÌâÐ9౑¹ΊGïð.â¼^wÑ-Îfž‚§”6øäÑ¯Š«ðn­›Ñ“Æ”’8˜0»æˆÎec®}dùòOþŧŒ} h³ÂI4‡ëàų¶ƒwÀ¸!{GæKét-ZÈ7ƒ„QˆA1›‹–ËÕ¦¼Ð9Rþ¤tÙ5L;¿†ä\%{Êx•Ó.º»ap++|]Ü×ù&’Ù9ô1™2~.Oµ,%Îñx9'¡hÓ¤ÂÄ9;auÓ¢h§ ¼‘yooÂà KÛ$ɽ+BpwUI×IsR¯B¦3Â㬅&¦™Î ¤ÕJLŠx¿O#oBºr \´—€«¼iR’Èj¦VS±êûmÞ >8b‚LJ>_çË„ÓN@¼Ü$ÙæïÓy>K²zßâü±®Ã«ðSí°®ütÿ4¾ÓÿW« ú£Úÿ;¼mÆ«­4Œì<:¨ÎæQ –{ÞÂR Rθ®ëüªŒ»eåà>‹ù…Ë-Ïßÿén*Ü ±7â=RHx¿_x<¤J·‚7@'+{;y¦mCrm&¸Fw‹7v€÷ûÇñdl¬ xo<Ÿ„ò•VáÍ«yO>cµVNã1Ê€ñ¹‚AØ"~ûW¿™ÊÒ1¾Ö“óµ”ÊÓéœ1dL™èW#ß­1Ùoì(¯Ë 0Î"rÜP{E€> ÍèŒµí ±,ôàý>9Ç–L4ÏÎ0•ZŠ}Û c¢ÔÛΓíþØï ¤ÙœÀˆiü¼O9sâîŒ<›9&ÞçŶ¦*rÈ€gþ8àý~ÙíÆ2=Šmßyz°Ð]^adFÚö;pjÿqö>ˆ†ñþ~=9–PéÜ9/‰>¢öÎÁºSÇc‡LΑ_¯ሃÔõÖ.ìûà  ‰:¨ŠË1¢g3^…ÿþÿi­"åHþÍ ÜLÇ„óÕÚ%ÃŽgáÆvDq]oǃnÆHÿužÔ=Ž>숪äÞ¨=^Kõ.ÁqFâüÝ“çˆvâ±=Qk1Çê¼e€Ób@½ È)á]˜ŒHç´Üºô•E2& mK~Ìl‰Ï°HlsºYLÓ¢X'¸Î9Ò.GE ˽Jéðq<é^÷¢‚h‚ƒ_Ï/ÔZ‘·L™!®¯«Â{¡$Ð6¬œ7üR+ÈꉜšV+zi÷@|Lqôó}â|½)5ì•Ð5hÓ`”â˜]ðúþp×ûäÜÊ2j»ÐlÈØ+MTp‚=g([LpIЮ†>‡Å–zìû†Ö™l§j-=ULÏ÷¥\h•±Ñ›ádÖ¦À jI¬uµ/V¿ÜÐÝð?¦–@Æ7Þ ¸?=ÜóŠºx6gZIˆ†±€sØ÷ƒU­¡ÏçÊqÞµ6r¢Zc®õy~ÚR?ÂèÖæñi ®S2¬Ö4‘Á6¹_ÿGUÆoè­˜C¸±wäV.|¿Ð'½[Lè`U¼§*b¹ê Çñ€ïr!¥„«^¤\«Rh&œÒmêÿbH¦”æˆÒ¡C©ŠÐm¸,Éãõû!Gãq5Ï'·v_Œ>ÈùnB‚áSˆ€ùíÓ˜gˆpx,œSÀÁE±käpì»%L7¬Ød.Ì×ñ¼=T«;q+…Òê7ÔÁ.ÉÀ.2`k_Ÿg}^ëý8˜ù>1”DÛ6;ŽÇÁMS¹ÑÿÆ•wW<¾¾Bà3éŒXœ”7Ä·øG%A‘œ‡öÖî.H΂è£cß¾˜3$2qUÅèÈÎ#Š7\Ldúõiv?ïœ2TùsÉNs`õ½ÆQ/v¤ÄÖìøÿÝ¿'FçÚí˜ÚGC4·ø¯_¿xñ­ï'à]‚žÈky@§Å/zädFš¸qè¼I ílñ¹cšBbR=ǸsÊÇ`{…)+U‡Å½Þ¼%8…·0 -ç )gÊ%½ZEn3G@ˆÛV9%†ÓÛL$æq{ÞàÄP,øÀp©nŸ•sLjôâPKÃU à¦q~X‰×w%:ʤ½1Œ«Öj€ÀŽ1¸@3nÂ¥Lºy{ë[„ÁU)ÇTÐèìÆƒåɳš6Ù¤çp³ÌÒ­à‰! Ñ8¥„W>@Dp?ªa#§mCΞϩÈD}¤bÌGl)gC_rˆðyÄ!¥­¥÷Ÿƒ];õí)“ ÖRPQ }ä ŸægsXó:’~ë1Œ^zÅÒmsZó6ú‘.´‚ŸV³jÍþ[ô1“Ѩ—ÐN?wÈÔ}òÀâj[°Yãg‹c>Xe½úã†Ø ÆÍRzЦ5[ºv8LV™þ¶8[A«z{H}И¾ZÑ!š Ùp'û@p•“Žý>n"±Â‹ÞaË,„XdušC@¹NŒ1LœlægÐKeÊéNb@«…èòAp_ʉhòÎûoNÅãx DNa ÚTŠönl-¶¢)â'Ýbê ÐÔäõ9o–ßÂìV:Ú,NƒpkJªJª­wÁ;¼_/ô: ÒÊ{¶›I6{⌠ ûÚòFážñ¨Ä9Φì~­½m s€›~» ‚j-–÷ÎSÆ>6笂Ò¸ü"ï×oÈ[F)ßèsš™8"Ä€)óîôJÕi_Þ´AI¶Z/ŒÙ©´ÂSŒx¿¿!ôZM ÇÙ­N…üÇÿâ¿Ó1¶í°¨ZšïÊûÍá´SŒ:Ð&Ÿ!dôÆŒºÆ-¦«Õåol¸÷ 1¼ßoà[ê7rš9Ã)eÛ@Ëy¿¨'—`<.*˜êhD˜ŒŽ> :ÌÛfRV@FÇY*¶œqÖŠq}"N…ù­å@'´uœ¥Ê 13$ûC·`jéøɽKŸ_jÁǾ3žöû4 ့0ÕY‰_x¯ ²%Dø!9µ7V7å…”vÔ÷‰þ#”(g²@.P³5¤ÇŽ"µÁ;‡«ì[B·hLDAvÙ*y¶Õ¼O¦°+h}çe„»Û>Úí¤D½ÿëý‚ƒZK‚”VÎ\àé°ÏŽ#n¨£#y®TÓøÌ‡…#€å÷FLÅûõâB³c!§Õ‚˜vÔrx1ÄøöPÂ{çÎó8@ßP3jÙ¥5Bó´ gUð'[}U~?޶I}N¯ñ0?s·$Äœó¨©×‘ßäÔß§“Eê]¬·Çã……6é´M0Ø Å™RO(11|ý¾KMDùúl·¼c ša¡ŠãùÄYOÛã&ï>ög+?”R{Ž8/C™8>{³n •\Ö?'â„…‰¸Oö*ŠZá<ƒøu¢8BÚÐk³ƒ‰YÒ¶C„ ¸÷FËÆ&Ôç×Ó†ýuT´FÉ5QkTVu'ŸÔ: .®“°»­Q^I6ðV*ë>3ûó ×õ¶Ø˜€Ñ|bc!ˆö™¢ðêï·Œ÷ûb—Bˆ§År ¿ó^,1‹~`Ûh§Þ«|_ßÖbì8Žï÷1$ƒE&¤ìñzÄñ~¿¼û £XXä[¥zÕ y 8ÏbÊ6³˜ÙvåèĸӘ87ç ÿéùÕ© ¨ÇAEÞiòk.VçÙÝò×õ;Ù8NP qƵ‘HÙZ5]½ }¼%§‚µ4l1â¬ÀÄÞQÇ@A­ s_t˜øuìØk½üTZ¦”Я‚ýë‰Ñº õÊ]ý½Ï“JcøLU$mG5UÇû›~2]f;ãbýјÒ]©ªšR¥+D&DÄô|ø~¿¬Ý× ˆã2Å) LâÂ%‚QûÝŸSÑJðè• ‹ùî˜Pfå {¶€+L!e¢—ÒO$ŸL$he µ“FCÛƒPòËûÅTMCÉYêǾÞWŒÑ(Ñ´j³"g¦)ќɧő¥p`Z[PœŒ[Í:‡¡©uacä–ÞiUwûç󻿤ÃÞ'ªœÍMêUÑÚ0ƒ› ÔSås —jó:k™MÃ’c­þÿ¿ç%kxï}P<<ˆ¨'œ°-ê¦Ã„1Ñœ©Çü(ƒ#Õ>„;ÆÛfã Ã"Î#ž}A.cL?KVLäŒaÁbã61šÑSV—O¡Nìô„ûg9 )äŒqäpo„˜-kG &:˜rwlpÂ,u?Æ9?߃ÁU*´Ï;©ÏY]D|DÊêl#®M?x¤yï'àõ7Ìw—éàsà|V;bŒxŸ'ö´Ýù(¥Ñ'áÄSU7}Ûq•v|°"@ 0§—ˆç|avˆ˜uþ ¸^ol£xǤÜv?PÊ 4Xû€10¦ÃqdVî!âužl¯š×PˆôÑnš­‚øþi\¾éHµÆ`Ù7Õ ÙD lÆ-¢÷º¥Ä ÿ%æGM`3ç¼7…cPÆ<×)ý#_g‡Å6ÿ µ,¸;4³qOÿõÿîÿ¦—ÅÆààÐjCÚ2®ówĸÐá€ÀÃé'rÞ£uNòϳÜèmÛ C™Ma»-¨ý”œŸó©³È×9¦½ÍOÿlq¸®È*“;‹ÎœÀ¶g¨”÷…¥ü‰Û†z½·ƒâñÖgµHrDp ðà<£7@)›fç™1F` £x'jίtŸ'i¿ð¡ÜTœ¥Üx'„¼‰ Þ&StÅ;Ï7Ž|P)e~ôe•«GNl vûÄ(–àb¹RèÚ˜ð‹ bäϳ¼Ùf™Oô¼,…’e;Ù¨$d8L!A5x+ݼ ”«BBDò‘-’bþÁ¢EûÕ64)zôÚ‘RÀëõÆã‘ÑO×ÚÕ€w\°S\ƒ[*qBJVÑo(ãVŸÇmv”ëÂóùD)$àí<…xà:_¦Ç¶{r™…m­±HÐÎ}€ ÊÁcôC TaÙiñÄ‚ÞÁ²TO»NÑ'òµ x_/bJœ·¿:„u‚÷ëu犄ì1ΉëóótL÷ý k»ÔBµæTÄ0ãX'ÎóäÏvìÅÈÄcG½ÞˆûŽv,V[ÇãÁ˜k¼8ú]‚Ç­7¤œá,€KÚê/0U)ë½h:pNy¾Oì_t\3ãÛp/¥ÁgíS*¸âq¾/ìÇFQÂÂäXŽFÊôQ¬dˆ9i>œP\'gÃÅ)^Ä ì éð1£·7œÏˆÁ¡X‘º”tâo¸ÞŸB™j±c{BŠ8×¥9&Žýi§jA­‚Ioµ[j¡Üí`gFS°çŒ6HW>˜ù›E1?w7r#‡ä?ù/ÿϺr†É÷Ç-M«FÂ%9óóAÕJÕU0G7Ѱ —?Ôl¦C¯ˆ!£ö NÅz­öaëàªfë‘ÛëCH)QOãŸIù–‚ ;Íä[ÇèÆþùQQÊòEüðòÝm¢árG´ÆøGlÉ*HõGeú‘ ®ð £è.˜1Gþÿabjó"£wÚÌbp²Â {ØTBªùk`Õ^ïíTÆÐj¹æ»½_óÇ“C„:¶ºÖïX¸b¿T,sÞd-²k¨z»µO_ã'ä§”y}Ö†²‡UÃ,ÄfebFgB$23ZñºŽÏÉXH&ðB—³Øl`/×÷@ˆÄXDZÚ9k8m' Y¹îzŸÔ~°×þßûïÿ}ü?ÿÿw“äÎ?<ÌbÕ-ÓÝËÝ?CÿŽÌù€<ŸC¶´ú¹ÏîôÆõš~~†kðo/.úqÎNÕŸ/žX*磳a_^>±ÒÜj¬[©vß9w¿nŠ\ ”)žNå3¼˜v!òþ½Ão’ÿuÝ!÷ã¡ó!Ü'£f­éÅ[ØòZW.ÐŽ3C1¿Nˆ™÷¾¸{Ö±Þ¯[ÏÉO?ö¾œÑ›½û‘Ób_‹±œòbVƒõ `©kA»'ydÆg€Vx]xÁ½ž¨[ŽüyBÇ}0˜(á4=¯ð=Ú)ü®…ª‘œ¿ŸX[×bÆÂŽÅ>ùnÊL%½îççpÜ×ýgΜýö;93íýôÁ'îmè4IEND®B`‚Carla-2.4.2/resources/bitmaps/background_nekobi.png000066400000000000000000000003251420416754300223740ustar00rootroot00000000000000‰PNG  IHDRlYQÅ>'PLTEjjj))))((*))***+++((('''(''&&&%%%###U*£F pHYs  šœTIDAT×c``@‚   @ ƒ Q$0ñ¸€u  È T$€Ù P0Kn~˜Ÿ†`\ÀЄ ö 9 à,d¸n`8†¿ aŠ0ÿ³IEND®B`‚Carla-2.4.2/resources/bitmaps/background_nekobi_left.png000066400000000000000000000233121420416754300234070ustar00rootroot00000000000000‰PNG  IHDR9l& 53óPLTE\\\hhhiiijjjkjjkkklllmmmnnnooonmnomnononmm;;;((()))'''***+++,,,---.../..///0001110/00./1001/00//101&&&/.//-.(''-,-,+,-,,)((,*+.,--+,*)).--+**,++1./0..0-.<;;<<<.///0/.0/:::%%%999'&&:99&%%%$$$$$888###988877777$##655#""666"""!!!Àf  pHYs  šœ%}IDATxÚ­]‹v$·q¥-É’bGý@ì!¹KÏîÚ¤%éÄvbš‘˜M¬8²#9ÿÿ5ªî­*ô ×É99=Ý=n×» ˜³³Iû±n?úèÇ?úñëSÝù(6=ú˜‡òñÇÕÿÚ¶¶OÐtç'µ}òɧ?‘ö©úé§|œhŸ}Öþës}jíóÏôT}|*ÿuïó¶ù»Ÿþì§?ýûŸÖö3}ç§Ÿ}þùçŸÊg?×÷É×éóÉVûòìÔ^j?ÖçO>ÖÁè€td·QúÀ½}1 ã8 ãОçyÛ¶6ÝÎsâ6¥´äöXÒ²äœiYö­ñ ”ö8??/õ©í¬ëykuWvÖÖd»«í|ݵ¿ÝŠçìÊ!Z=s±^\ì.¯._]^¾~uyýózFß{qaŸ•Ê~{½Xû\¿È¿t¢m¤eÙ“NÖçSc‘Q¦6Øy¬ 4@Úöì‹ý~¦ÖýˆCP6£jHÏd;Ì%¥Ü6í¿!Y¯Óº±hg´‡Úµ²–:vPÇU®¯ëöz-rnmõåk¶ú’=ä¸=ŠžYõ «½æ»×+ë—•ë"Ïzu½¥+o®>ŠÜûŠM.B: eÛ Œ•æ¶APk›alGõ¸!7ÊfÇcÜàk×Jsìd…NqÃmÓ{»–]ëýRwÚy€Õ¶õ¯‘J{ÇnÍ iškXŸÚy£Cm«žÂG³P™|×›«]Yù}ŠÚZ_oÐåv½Ö£Uq[„1„¢r®#¨}R6Z»h)Ë õ€\‹³/¦ýÄ64¦ˆÙ(”7ÈûÀÃ=ááV,JwàÞ,j犧ûòß0# *®»iüÖ + 8«(4ënuÔ9EG°DòÆ7o¯w¬È rÙ“Uð*ÚŸBŽL@/qɈ,RIFn‚cEœ*[‘w AAKŸe/¢ÝAGø¿œ2ˆ¿à¾æ²._6~UºÈ:DA’ òmW ºvëº9èò¯½*<íüùÛ·o.õ.ðÖ( “ðkV¥úv(*h"½%W«É,Ug_¼kmx7 ºÓöF"GmAf=Á³¢<R^ʦ5ÁŠÔr˦=l„¬”ÕSft!üWov4ˆœ¬È]]áëx{ ñÚÍ[UÖ¢¿øåMþÅ/n 0aÅ.šjÒ&ç†á¶=„Ønoëÿ­0+ž"dä•oŠÜ›2Ãâ°AMØVG¸ƒ£2*õªÐS‰ÐèéÝêT§ï£¨lÌzuùö Z±¢¸«mYòÛææW¿úò˯jûeÓ :HicTð4rЂ “JiwÃ]mm÷n¼“÷ÞÝù6r¼~u¢Šíí¾- 9 K3[ b5ÒXE¸«ðƒÄ*àWò©À#îõÜõUEîz­Ø­çoÞˆ`#q­Qw•Ã/õÕW_¾½ùꦑÛ<ë]OP¯³kVkE¥¶³/Æ&áö°D*†j“Þ7|ïÛÿ}ÛÆ–ȤKº7‘üê÷*x (Â9gØ(E%vwm€•H†Ë+ð¢ÈAH¸Ò¨pQ T•FQ@½ˆž¸z{ùöË/¿|+7k]Uµ.JíK;§B…‚.ËP²Êš´ÜKïë³ óþ¨*ç*Íí•ê€Úå%\Rm0›èL¶}hmyxhVì,KûPE•T‡•BÑlrH™hÝQacB‘Vô+ÌåIìkA£Š¦ÚŠkysUÅ]ko›!’AoEákJ vœ‚—E¬,2éyQ’<Ø8mØ­‰‰{n„ZUä^Í„Q8X‚iÛ„¼¨•ÒVʹ©R÷uXmÍL€b•ahXE©ápýöòR … +k§Ôlq ¾¥^hW¸ªwþ¿¾¢Cžƒ­a¾¾Tº™¶× Ä £º> _D#Ju…­­¤†@§ÊøÖË9Êï âÜ ƒÆlÑôhËšÓ8SU³[€'ŒÿO!DgAwáÏ4³š‹t¨Ø]Sj¸j×^èàÕïªcðú5ë"ÄìðÆöH¦‡¿º“²'~Ø‘~UÅæ}>a Gؽ«³/nÕ&¹½­±n$Fr«ñ€¶;Â*™EØÍ›»@A—éDˆÈHfÝóõ3©@ÍÖº{õöí¹‘™Q QJ /uüw¯Zéµ¹^ñ}»›‚2Êm+K´äLWØÊ©. îȨŒ I˜®"÷›‘Âm˜ZpdlQ’ö?ßIc´D·· ð™ŸMÔ%˜.ÕÃ_;«J¦ ÅÑ@¸0xvkpÂê‘…QêCÞvq*h ¬\ ”Ü“@"B”Ã"ÙÞì¬f=LS±Ž\}0\4·XI3æŠò4Æàù=ƒ‰{íÔ|Ÿ’„Jà{9Ý-À-“ä$ìº@ŠI'(’ñ¸h:qbàVß{A+&k$…ªa‡Ø;¼ q.¨rBlk†›PHá,6Š9¢´{‰%éf<û­Øsc´E3¶üLbH¤a/‘„G× 7ÔÈÍÝ1‹ÈÁà3qm®ñÛv¢wª/›E²‹þµÁJà ÌÊ /d~+YàaÉÈz ƒð–8Þ¤“cטpŒ’¨×%ȉ=¸²7A6¡‘.L‚€zðýÍåŽá90­zê®Û1L\0Js ¥"±>óü™œÁOwÙ¥ZØwN +FKÒ2o-Ê4ðFuW]§n‘Ó þrsÓ7ØÓý›¯–þÞÜtÐ™Ì ƒ0*އ#·:ýîw¿ó7Ð|C^oƒ³¾Y?Œ ·/¥?7Ò–ÜúºÈHò úï€!×Ò£é£Lð$Äoqo´ç~ƒéþÞÀ&²Û˜óáÛ¦èÓ¡=Ji³ÒN¶:XžO©ÎLÒÏúOÿü;Í+=7ó©¨"$&Œ’#äÌf”i1³.ÆÍõn¨ò†ö9ðl+oZaü²¬9VÆ<;š*ÑÁg¢ÄÒ ·§=1YÉåì‰0Ö1-jâ½ [DN³YJGŠœ¥ ÚHsÎ28Èè›Ç/Ĭª*X«jZP;çii†Ö-mª¬«yÕí š¿N{!°‚ÈJ tÖÇ4Å]+ mš_‘Y˜³åS“<`[«Ò¡Ì·¾›ZAÎ;ÏUr{7"#ÿ‚¢‰ÀA§:è˜K²]è‹ú/6þBg þ~”ç;Òì_Fxs‚ó¿³:óÄI}X‹8„™n‰D¸4À$÷Hæ8¥ê8>}§PA—ξ¸m!¦V†sÛªq$À4¶}£<ÚÃ"Õºq¼ºp¦¹ÎšÃaGrÄ $¨¥,r#¯®tKA$#—n+²úíq¡”Ò«–B8T˾PxAÖ…ÔBæÿƤ›­¸‰Y ENâsÒ¤ˆiD„N23’_Û¨Ò1£Eê3LäªcøŸº¡1Ÿcüd%ºÜò¼éÅŽwM 0ºbÝY¨"€…FL2s&îxO—PóÜ#çGJn^á ä~3ŽZ£ ¥p§•:¥«M ˜î:Kø¨_Ð4Rçý$¿.ÙÂ"š®+jd* ¦üóà$ÝÓÜxÒD"IÒβ¶ ç(dRl§{ÉJˆ‰Ã6îªlÈGŸ•E`ÒB T ‘§…ñ¹#5kÐÅ`‰!'n%\¦nÝÆëÐò÷»5j“ð^TC©Åhé6¹® ½±ÉÁö|9“éTmüÄo¦¡ËÛ £•H03!ž§á¾9Ý3ùp:JlΫ…-L—™X-$G˜´lkG¹çOjØHˆFdàSmÁ{x€k T·0ÑÚON8Ep ®{!«|KïÎ@N†i(+¹ôä}¨ž›5>\w\»¦Î*¡:u]kås^°Yrs"ÊWÊAATŠä˜¹7Á%âÍ}:Cqó¬‚ÙÍ(`fÍÁÂDºeoŽ‘k4qÏ\Î=DÒý½ !U{nl3IÔ“˜Õá—º“qÆÆ^±=b÷‚MlhZÚ?“_ƒãˆh@¨‰æ˜wV¼^B[®7ƒ“á¸Xî+f –<Ãì`DxP¢– -²Q !ä“7âX.o‡â v=}ö»y8¢»ÅbÚ:3‡U<)lHΜBNùu‹\œ1èbT&/yCw BÄF(VT;(¯™ ª­P….0R£î!n‹*cáäj]ƒ@†ÒÕ½2Â4»_zöû !t2‰’›['q¿~ƒH€™¥œ™izÈ5á@¡—3Iiå8E›¢XWÒêzPqE\òÁ5èÁ.À‚Õå§ÉÌæàØam’°E´ÙTWT‹À6n… £DÒ8³æÃ´",”Ô‰žAu Ï„=³.G¢Ïè@ž©…I!›:à ÇÑÊBêx h”³)aýn½;Ep$J¼³ ÖŽƒfmFqœƒ3£äöÊr”e•Ö:ŽMj'Ì‘°d"MÙâL|ëÖ‘àáç.Ê~вCŽÊð¤E·ú‡ªð6Ó P¡¢~ïq,f¢æcY/›™ÃáüV›÷Å % û²J¨ËìzÖ*Â:E”­N¾ïÛ‘³“`Ü„,bМ´¤U8sÓÒÅ¡rÓä½r[nͱŠÅâ^@CIÏÈ›"GR›¦ÁË$<+1XòÚÓÕÁDa‰•ôž¶rÔåƒ)<ÈþbÒÜí;gd+Ç+f”ñýŒéVvÐçárfÂy|6æ<š›¶FÎ~2^ÜõW%16ÉÕW,1¶H±ûG a§„]æ(Ý7˪+³Óß*${í [ÿ¹™ÕT‡¿É¢  Of'›ŸÈ¹…‘Cr+Šès_¥þ°-Ù$$7©xLˆ|Ô²vý O¢›%œ_rË2 jVuF!ÿ&õ(H‘y¥8˜"6w®÷Nˆµ£CH˜yÉ&zPS‚¥râ KIó ¹ _!ë‚aç n`zºO+áj<¡#Ûʸ±©×ýNvgdš¬Îlæ“f5W ²¨2© Qw'fI #¦²zR˜GÙLTñ´È§2Jðª:_ÃØÉ¹7+n J¨˜Š£Å¨3QåŠzFÑäZuÈÌ£=„AEÑ—!´\Ò_/f1g·;²™%ùàˆewÂÏù”3§òMÇFµéJ‚¨[7ÀIâߪ­7óÒC¶žy¹ô·ÕŽâTïK# íÐ9*ɃÆñ®@DƒjÇ©²ƒ,’|0ÜÝQM1޹˜^M¡€µ6¥ª-Í™ó5ÄÁ6ØÍAÅz„žZâ&F£-T¼| è~Ó…·eD~ÚãÊ%†Â5Ìã§þæ›|ü­7˜u° d2ÑpcÈm“„Ýr/¶êÒx9Ê:I%:r£5^/ÅäÃbUïj±ë8Ÿ‰ÆMvà$`\˜Ë°"KG*B“ýÛ[òr¼·7 ãçG÷VCE¾AgyÁ#97¹ÉÙÕýWŸ*LfÅ ‰eœ”˜¢ûøR¶G0é‡/oÙ)º“¦BJ ½"§Ä;óZ7n¹Å5Ï‹k·fI é‘à† Žœ/›#‹"PHŽª…Ķ@vî`2¦vD—6ͬ HÉ ý|a‹Åa‹{«ðdz‰ßÃ5ÃÜ>ÌwðK M¨N¨¾޲ „ –äv7¦9ÛzÂûý±kÛÛÁl¼ºi³%†[Ì–0³ævМ[ÇèRN¼É‰K˜’oyêe½ÔNÍD>’”øFŸ ‡|/Ì æNù>šùIch2³A‡…[9[ä–+¹·•[÷û#¢s‘»øÖæLØÌ‰[¨i|3k½ôF?Ì¢}}¸ô£Ž²¶ï²u{¬0ß둨ë©ã<âÙTE €‘Z=¥¢AäÜ~šNá¦MÆÓ kÛÊW±šÞE¡½i©`%sp“#çüö’†Ý wò]é%Êõ „G%bG0;æÙR£VÏqA¼q&]u¹aòCøÅy‰C¸Ž!Ç5îÊQl6q¨Ñî{qNÏ)SæˆìNãlÎ…fža00pýB ñ ­8í ŠÜöOOOûý“<=·&óžLô¹™2Ù i¶f¯sÁ Iùýž}¾" )€w„Î Fs>c ›C‹T¼Ñ¡©Æ8…Ê4O¤‚è'8Fx-ÍPAxj€<ýËct{Ïw«”{j€=1òdé1‹DUu]õÑóB\m=†òj Ï8.³/®Ãª+ÎScö[¡ÈÇø‚¸KaneXÒË¢þ eÖýQE°&VÔåXP„Ò¤6Ƨ`gµýþëÚ*zu»ïÚÕNÞ+Yvö¸#¸KE)Àèk_ÙÂê)t¡þ~=S¾G@åtÄŽÁd3MmApFÆ]ÄÎn‹Xh» þT\’𴦋é˜'¥¼½"÷5qÛ G7æÊdÑöX6ƈ€-OÄžgh—䊷+Ns¯’Â/ ×ùm. ÝNæ[-KXXeá‘Bi€¥.T² p´šK™g$‡M|&gxlí›¶©ç÷/@·ñ2\PàyYv.x=2—H ˜dBuÏÆ6ŽÔL[/ÿðù/˜‚°u”‚‚ðøh‚„?ø`‚Ü0.ƒ,´†ˆ ·|üöÇÈãNûZ^±=MŒlªÃ2¡$Ào7cûK\urŒìˆ@^¡&‹ÄèP›uœ½°-ë-&¦À9/àG.ÙG`·wèÎþðü,ÈUz{ØÏ2à€™‚–i±óH~„7r‘i90%þDyóÆ êüg¦6 „h† ®R•¹çFqJrQ¹é Æ­û}ÐÙafKÈ\Om°‰«dYÕö î¾Øœ¨úÓaåÙÙf³)Mˆóƒù˜Ø÷‘›#ó„ ÄTuëc‡Û 7QÇRæ™/2¥á×Ejm4#ï>À•î½f1Z;%ÏpÑ€Ÿ5ÖíSÂgN”¿ŸÔÇꩳ}å=CâŒ$~ÑA›gWsP^B‘"‘[\ÍFéÛ£ñªÁÜö¤dX*ÌhGe+ 1xÙõe=de ÄÚRºÖÇœ48 £/2xŽøŒë§Yâáúº]O—ùuFhg$Àm·ÓTÝ‚(Ú«×ô¤b!Ü* b/ ‰Ší¨Í&~vOÛf‰7rÉÚv“§¡oQcá~×+Ií„ëa¬+ \®žß^Ljß'{1Á7ûµ"© S餎tQ ™±ûÉ ŽÜZ‘{ÿLôöʱ€Ðœ:ŽÅ7¨Yl»Û[DK5zÌÇí4Ĩªôä°$O[/[D·.Ð ÎP³•1¦`@Ñ@!©ëFéÖ(qY™¡íÏòúím0‚å;Lz'¹@sÏ0LöºY”j¤:nßáI¤OC~à {ïô>¾c<Ð|57\°ºâˆ5*™—äd /åp]vRN>®um\+ˆ Àá\þÄßÓ³P%Ñâ¸%ýùèÎÔrÚ„ÔÄ:Q‚;a×D à`Û¬ Å+Êü×M‘7ÌêhÙjnfà¶Ñj¼GS50Àb>—™íJCtr¢F F!w÷”kA7(;FähÕ=›yòBèd S¨¹rìš!7x3ül°1$ë ¦9Ÿ ãØûñÔ›Ö,lùõQ;ûwPÜ7ßÔÿoÚγDë¾y|©íaöáipe­ÔÍîí‡=­¾a°yŒ0G é]Ÿ^kB?Íá%¯ØÕÏëÂÇú‹G³-88ˆïÙÎEkÝ«<ªó‡g®b~R¶|Ü#²mgüöÛoE¹>ûþÛºùV\ ¡@¥B³C““QѶ+6)&7ÀùÎf4»ÆTÿÈtžC)¡8®2²TÂ3ÖÎ{•dûAÈ9»m¹Tú·çÏÿLPŸ*&z 2&Õ1r ­³ÿxÿ§?ýé½6µOÞCØ™ä{|î?‡Ð & 'ˆD¡9%=c]ÔåÏ‚1ww°UyGS’&ûC-Z'Ì\­ u˜X]¼QN=67P˜P@4,¶È9gÿÙ û®þ rïaÝ™‘çJ#¸!œ7™ F ?ŸE ¬?ýIö ‹*Äa‰®ð„–›³Á¢GásC¨Ÿ(ì0Ï ÷G{ÿ”/H¬ ÈÙßÁÉöYñ{†;ûÜ£Öyj'ƒÈflGÅf‚B7XèÕ3sybŽ?`5ÛogoÄâjKýi8ô]ÁmÝ-XWD¥¸w ÀŠÜwß³çȳÏdÙ {|ìCy$¹Á‘ñ—äY‰Tdž&€Ò0¬û½ zý Úkÿ6êRMËOÁv:“”}o7à^ÒÏäÖïþüç?Ëã»ïþÔ6õ©6ÝŠlOíOò½qr´ŸM“ì÷0¨yé§§¶«[dÃ'­*xÚO’¯»Óô$yHªÜ÷Ÿ4Y.yó^âIyžìsOòº^J¿øÉ³ðÚVÐ`¤Õ¥ïˆ‰7>{P%„½ X8ñýã3¨œ}÷—¿ü×_ê£6Ýóö}m?|ÿ½ìþоÿËßÿšüµ=¤áX÷þÚxü¿¶ÿþ_òXÛ‘õïëö}“~ÿ½îéó÷DçBhi‰·rIEND®B`‚Carla-2.4.2/resources/bitmaps/background_nekobi_right.png000066400000000000000000000203001420416754300235640ustar00rootroot00000000000000‰PNG  IHDRl`½–™PLTEjjjiiihhhgggfffeeedddccccbbbbbaaa```___^^^]]]\\\[[[ZZZZYYYYYXXX)))(((***'''&&&%%%$$$####"""""!!! 777$##999%$$:::&%%'&&('')((;::*));;;+++ +**! "!!<<<<;;:99666 Üî pHYs  šœRIDATxÚ]éšÇuÙŽcGV%¦7v7€ÆF3!-š”¸˜’¹y† ERbùýß#Uw¿U…¡‹ƒnø³ÿø|w=÷ÔÅÅÅ'ñ|òIü ŸO~ñüŸ_êùÕ/çŸâ'œ_Áž_‡¿_‡?8ÿ>áü&~’óÛßüVοøóé§øüœO?ýìw¿ûì³ÏâÇžåóûßÿþßâÁgñ|þùçðøüóçó¥ó‡p>ûÃÅl>»Ä3›Í.gøœÍçóð_„缪*úÔ¥Ó„Ó6 ½Ú®ƒ¿{]ÞáÕß»w¯»×Æð/ã0 ã?ñ,’³\ÂÎjÕ4Mkü¬ålälñìüÙïÃ'¾Â¹¯ç@çHçt<á¹2ç:žñ?:óáß “ºPªº ÿ¨Âÿýðn ‡ð¯…œЗð5 ò ‹Ï¾ï€  aé°a„Œ=¦ðY­ã3 ²‰hLð²¸l·ôÚí":,áõ?6‡Ã±¨$è:Ð54ü1ÚÁÍ¥"s©«ŠŸø;©›/š/¾ Ÿ6üS‰ï/¢å´—¾‹&a ul0Ë0³ N<‹ÕÑ3Åð˜Ô^ŒÍ Ù í¬ÁPìÐAX&NÏ茈ÍàM‡Þ‹ãVá<‹<è_Ï\hNâó.Æ „'üöc<ð¬ç”çÏcžz^h:ÏÉÁЈjô³¦®1J‹ÝÔ‰õ4‚ xVá'¸UGèП?yð‰q9óß/ðLáOLÈñ5Œ?ÑlØv|Ü΃òÉ&,x ¾xyù2àó2ö°ŠlÎvѧ‰è4šÈùFÓt{&†ž~0ÆcãgszƒÙ|m³¡õzèL<oÀv6äTs8gíKÙ„å%­o¾ù&~¾þrr(v‚c¡‡AðÁ04¯±Ö©(µ£á ÙBÇØOŒËàR¸zÉçq†!õ«8Ö+ø,_-¯^½"×¢r¢ôÄAhÃ~µUŒv:ŸE!ìOzN¯¯^¿~Í6ÐyN,áÌñÏØNÌòl.áSY»¡'ØN‡Õ¥,r©aภ/fߎñ/<àËÛðz»X¼ /Œ=~b\ëq¸hñ³61™áTZ$«í4¦<¶9Ë£¶#Q™KÜ+:ÖÉ–¦ZæäîôÚ[Tˆ“ó ³£¼ÅqëC|ï:Zø íüé‚›LZdEU¥agîàñÆ#ÅUs§9Æd“¶|^çÜn‘)¹^§"hVS”)B3Ö>)vŠGs<Ö<´€; ª{ ÅsÒâlî¬'IWŠO¬‘;ÂÅŸèc—Â0g™þje æUž²×lívZíì‹'ÁFC‘ s²èĨÌFCà`fGª©•¨*6šÚU;m×Xt">±õŒ=è½!|£´¿‡Èôiµ´]¨©z¨ã*$s|pÂÓ¶¡Ðh…~k¿HÀ”Ì(ë(¤ö1q'f*'æ.èB±ê©!sI£•”ÉÔ“6-4¢·pºøé8¹Ü%Ž5ò7*œ—±ð‰!‡[R¬}V•ÏÔ;1,o©ây¤'ö]hF* Ïø–­zަ0Œµò¥ä*0"ÀÌžÐ×ÐkQœúVè=ñ»ÑQìK¡ß²P‹¤­äNa‡ FG‚òª€ŒúÕ“5´\¡Ñ²ÍÒ–‹æ‚_AÓÒGªÂT„ˆNlA923‹A%òœˆØˆ†ó¸¢fô1¶¢ÜÆg+aˆËÁ. <ýPgÄB=kqš8î¬2Ëù û®Ž6Z[¬š ì(4•£27[¦[G뉞EYÛtNY˜­8_~ }h@(ô ulF÷…ÏÛ Jí™m+mzn;BîŒÚ¨›˜³Œ:8Ö3Ój=“– IMÈuáÎöû´ÛÊ< 9ž£#Á:Ñ•$kÍñ ½h|Äôi´§Ok"Sа!t8{u$v¤yb;F”euc:†!tùŸ)?k‰ ݳqD!‚³£vbïíFãΉ*æ+‚ƒÌ f=UÅdñaê´†œÅz«è@Pî4Ÿ›¬…è‘æó• =%ˆœ-[ÎÆñ¨ŠNn4c ç3Œ9¡CŸÐ©?ŸÏžÇN½Â~}ŽÑg^¢–±B ›QÛ¨÷Àr©ãs9À‚ö“˜Î"v¢ÜŽ®èi³–#É}'å²8Öyp6*_%è»Á=têÁxâ{ö-çe4(Ìç±ú1ŽU)1.‹ÑŽkš Dk¬'©w¤òÙÙ†‚Ñ9äðø¾K (¢óWð+ü›³‡Q/:3c „¤r!ª¢â»–V 7üsV&LÆ>ÛзІB7º„²[ èÓ]Õlì'2ñö«õf«5³úšŽpÞx¤Q7½Æ9ë à‘™{Q.•¹Éb`ªÜ³è#=ÚK´ ^Âqžpnâ‰ÆsƒÁùF8B.—\’íxçBã¡^ÔÏnLG±»£Ù2õλwñqÂ^ý¢DÄlÆèÌišÅèTÌÖu1&+“Qûf¢“"P¸Ó¡P0û®}áÑ‘¡Ör•‡r®ÉW‹ÎŽ)°¼ÌHø“±!ƒÎl¦ß,:3nDërÆâÀãÐ1 ½ïoooã‡Ÿæø’P{-c>9ËìÒÕ´þ(:;áÝ3tÞ¿ðy<¾tN7àW3îEç‚÷¢2Ñ*“V[·nEïÅWhD¥u»/zLì+‚G»­4cÙ3Ñ1»Öýû÷ÝHTÇ¢÷]QhHà!(*@ t* < Œæ*©’µàÁihlEa(ûPð­½í*tÀ FœŽ”Ê£ <ÆlbÍl2e«I˜0F[u´lÐy.ú.CxÕ“”…§>zÖœbÎå¥VËÔµWRÑnd|^›yÍw5êqlÜõ¶å(DB#¢Â­èÈ4ÆJú‰ØÍt‹*É ƒÌàFYwãVùœ‡8çKÈõNÀåÍŒx=rïÂ^ÀÇ"‘8Žkã3Ð_t:íJ<¿yÊ5È0Ýϵ£‰ªïXÈ4O–ÿ ÏGqjüH¨ =»6{m'Yb§NâR{teß!Óø¦„œÇ"èÒãuê‰Ì2¿Á´î€éuŽ3.°!EŸŠ ó{uEg*e!2hpyŒ-1O¼0#ƒÇédBÊQ<ë’Fé¦Üá. ¹S@§°x²Ž#öˆŽkn/™N)H¬bÛ-±•¡¿Ê Yw±'Hò @e'†cÕ¾f&|úo/¨P&šñ,]2’4N—SG.C ±+OȪ¬ û3èôf˜æt È\æ9 9ž¯Ö2]ÿŠy ©S§Ôž»©ûıt¨4ų;v"‘ª+e }¹Ór¯ÕsQèyx*{6p¬Qý £2:Ö4-]‹e3W:P_–‡-i· ¾%9ë$“?%–c½3|æÆ©‚ùDnÅð=|«Po 46òÜÝð(:›Ð£ÿ×…;£¹ëÐI¦é§~d; (z¸#U9+1˜vïÚ$â¦ÇPË ðÀ£âÒzêX¾î±rËu‚Îv·/ Ö½ñø&'ZK–ïà`BGÆ T©ªyzX«‹”`]ó7ÊW¬Vé»H¦B2w’J]ãQRùB'~©®[ä˹ñ¬WêV× üŒJ®’ÚG ;SDçÛ‹Ù0œ7—DÙÁÍŒº‰$æ \¥a£a×b±JWn°|äqE2hœ"¯üö-óv¹ÔN¹ÓÂü"ÎÄ’«ò¶?J껲_¥õ2Ë§×·ßÆýÍ%Q`¡2œ³Ö€²”ÎiV—ª”\–j™µMôÈÆÅT(«ªû-“î 7ëiUhÝË´¢4™é»„&ø$ý§iAI5§è¼Fâý¢r$ÀfĽÛÈS,w8W éc•<‚ê¿Ú,(Sì¹¹á?dÞVœk*Âeaò'Æ“«U!—LC?VïøœyÇ,ÇèãÜH´Üc5¦lœ–2šåÔ¹ü4øàÜxérB .oM4]·“P7ðKbò?V&|,:³KéÓ¹TuSÉpHµ\#kJ¼r#ÂA¥c¡L ¹Ôzâ3 3FpÆ`=€Î é–GáËScÉYÂ+¡q,™÷íŠÔ×u„n,ñNÔ•ï€u'ºrL_Ì0•[pæäPÔ€6"z§J‡&¢ÆeºF’²à <70ÏBǺ±èPe8ªÚ@]kJÐñ"T×bJ ‘i å\+ŠOßí¼Á”…¢ÊùL'¡e·ò¶C f-ä°¸í±ÐI£òmüƒYMç5·Ò§:ÏBµŠëE}Îb¿HⵤÉß“ ’Ùò‚ ƒa{¬Nlplc ìBu zÉ-¨”ÙræIÈ!½{S‹4Et• j xªàt†[fˆaºXxtDæ”"cldzî)·[S딋dk?qœEc-¨—ß[šÐÁJPʾm“â"¯Ú–€È\`¡CÖÓS½Ã!Ù™úéµ…ò"ï=M(Ô¢Ãm…d!¿öÅŽE‡A¦s:Zenÿ— §I©<[17èX2™èvr©/Ì6\(÷ªùòàÜ@W96cx÷U ™Íd dwGkgT‰åI÷‘ahر,σó,‹ÎÌÂãÁŠ¥B–ò$é®Z‘¶Ò•ÚdôÂ-ÈäîlV Bµ– ¼1l»¦sÍXçRù>Íæ9:8ÏâîJ:,©ç&“á:Tð´mÓ4­›ž :i.ï=:ù5Q'‹[.ÏÄd¡M'Ï'»+ç-:ì],n2ÉJªATE‰‹êÌ”ÆÈ)õØñÙ©ù­;1•#:¢¿+Z —°ò”¦Â(o¬€GƒÎ]èØØã¢iº­2Î*žYzµ¯nØzlAiÓînM:”d•,r“„Ô”«_̈eÜ¥2å¬M’Îïp-ÁæðÞÇQ7ᦇh/3t©¨M¡FËŽŽ"PEIÍDÛÐX¸oéÖc¯a¹Óˆ“TÉ#¼­x„Îwöíu[ Nœ³ÖkK_è ”•_l=YFçRÇAkdçZÌ.Ã=‰ù,¹¯– …%èÕŽðÔØ? :»0ëìçÖútŸÒFèµb¹—>.ÏÆ£p²²/c<$‹“9ßþ¼í@Bÿ^£²ª*g9¾K*Àä]UU­vÃ!§kµûÔþ¡qØv/Çuc*•s€DjàÓdˆ¥ë ¶ÛÝè¼µ²9V’ë´_çÑ™›‚G¤ƒzc–Ê@¯c* ãEBn¤LSt–¥Ç+N~½Æ¥¬í¶T(3:æÚ(¹-ñe&Å—´aÆuž)³ƒ^UÓ+¹1ÛvÉmâ3RÁA¨và›Ñ[Éæ©õtT‹Kê¯DénÅg+sÀ¢CR÷x_‚¢rN±Ï]Øqj Ù¢b&¾Á®• ‡a´wC¶ƒ¦ÃøÈÅÇ‘ïõQ:O; žs—µ‰¬ VÊp62Å:—Ó©V>üÝ,ȃñ èÐP˜À™ã‘©gÅ–SÕ­0^b6u´ÀÄ•íCßß(48¦aÓY.ø›Lø„×Ñ{³YŽ‚¦ ÁÝVµp"0à°¼+¢Ãd;Ï!t$Aè`½3ã¤EΔ‘5‹¼p:ƒOîØ¥(mõ&ðÀ% vª^X.¢.âl}°éAëLÊš “Êתö":PÖïÜ™´rUнmÍl®®^cFŸ‹¨ ÄwéhûòV¸Ò3AÙ¶æ¤F‘ <´c  h¼nć¯ÙA_‰ÛYO&Þ :èZ»¬¸+'¢#AcáAÛ¹k²§he;+3ýì´H¦RÇÎö¦qŠ iž°œåMîŠ÷ÆiBߘt—êRî‚FÇÃîšþ•½ÞgÐ93 1ÑY£±ËYVS ôE!G²Õ«W#KvXµ³ú:N{qN´³ÿ:‡»ÐÁý;*ð:ƒŽ1UdÛATðUl²´³ÂëŽ ¾f ’‚SI±¬aÇè)ío«KÑÊíy–°JèÐv"S÷eÑ7 rwÕp%ÈL2:dA´®À°xW^C Ît¼}ñëe¼+»\ÁƦ¯¯-.°|Ðʽ62>ßnd§òö3žåÖÇ%òö+\ŸrŠ‹­®âf«97 ÎvdÉ °È45'(˜š–©v|ZË¡¼5èMÙ‘E; Úµ#BS ÆO¼?¼ÄuVN+ÈÄZ$ݬJIu¦[§ßÎe˜œMSf;h9×´oðÏÑv` ZÞYqÌýgîEWŽÚÆ&«âfIXœÇñÆÈ˜Ûávì Ù‡_­ò6þa¼y¡|²ÊáTµcF|ˆNJœ*ñŲ“'ÙÆè¸ä,òȽ,–éX.EL]—mÝqòÒi®aÆEÞ[©69ž\œ\6"½òˆÊö3q‡h1‡ÜnkFç)í,&ª„ ¬Ùl¬¼´íDA™·Ÿ¯þl>7}ÕB6‚¸¥ é£gnãà³gë¤-²¦Et|©c-‡7y^³k:ßpù[âr£J¦&E§£} gÑÑÈlÐ1·?:”ÂI»dñ;ëÒ:FÕ08û»ê}©”\Eè\#:À³ðJQ•\/‚·.Üù²v¼mmB¥ù×yY;^ýÍÌj¤v\øQ£Ñ™¦ä"ŸÖ7_6ZÃbØ/£| <ûRÌ¡œåòù‰ä('Ù÷uÍ„:óêK¸%ÈàGVÉ|ÉJv'hç%qKnÅ×Ð-µNeàÒ\IöX%^µNÛk¿å4½£/¡¸¤Þ–€Ìqù„l×Õ• ;”±zžî(À5DxiïqmâÚí‹­êPD»]ÌX½£ ø"÷¦ãŽj üFÌáx‰oódwŸ8éù6ÚÏѧ󓽓eóç¬ùÜ_—ºÒH=Fx«ðÖ´žåË4ƒ/“½•Ï‚[½P³,ܵ=yD—B[{ÉÑÒ:»’Ìôhë@æew -‹Cl>€í$ì–©‹u³®÷Š·…[Y7Mb Ö%—EÛ=ßà£[X ˜©Pò+|Úvòìa½5­Õ£ ]!Þïîì²L‹uH‚²³çYU™ºn¬xÉÝ„•©°¶V]:Qø?²ÌÂoiZøž3‹ÆŒÎdÑáGh g4g³¹ž2±SFÇCcÃ%û(aSÞÆ€ ÄUp¿/gsêFñ*F7¡i×IU@ÇŒ…嶈bÞÆ¥îp+.æ§×óf>œ€£ÎeKA‹NãjÌ]F ÁfÝ^s;.`ÏÅ=ot[Î8ò6S~£ñpKn&2²°@1c=Y ‡+ˆx#ˆ|Û­¼¸ßû•×êpj‚2dt½ë 3`"EOª*öæ¼ Ð•¦Á¢J‡•:öÎyº’’–»ýLªaBÛÙên¯ÒŽÆVB”ŠtéPX×”1¦¥_KãI=‹º©ºµ˜uRºU‚M8{\cÈèÄSÉfõ¢›Ï@ìÙ)?ëI:rËu9ñ¤KÛ Ñåä,G9¥qÇþ”ÔË×cD§²®ÕÐp\¥9ffe®NoaïfÂÉ]ƒ`2”þ¶Ed0èŠd™—Óc[ÔNîwÔeæàmãiÇW6êX>ŒiTΗ'.Jg*”Ò¢q¬C)_ábÊ“‰Åìyûß&ƒž ç$qQ’êØè»†Ìlè!̓¦ð’òÄŒÇK…NBoy{•Ó¢´þ9:œ´äNõ•³«ë:‹?¦èˆ‚4m:{m7•ÌÁ±i|Á?å³HƒŽ‹6¬^Ÿ<““ë[A'á?ŠŽìÐ1Á&A§á_}jðÙŠh]Ë@;èÔv3Ńlk—t–*®à½LØpRWn:ÃÒ“X@S"Û+j%¾ËdBÇׯÎrl$Vl¾ÿ>¢ÓÐ…ÅUo´òM)uüJB ïä·Ÿ’·ƒÙä%d¡ÝUXt* 'ÉåkÙQ°‘^Ûíc8[¹¶“|eÓçpLêÀ#n¶§<åÐùš¡ƒS†8kˆëè^â+`±¢ë45÷&æˆzÝè%G£x[¹Möø;SÑ™ìv‚5³9xWÞNw噟×ÎÛNRñ°réÊôU¶} €¾WÛ¡Œ¨HÛ‚‰ŠHRD¦¢ïíFÎ,—þ‡Õ8î,™¬À¥ K§@^»“(I™Ña™¶ùi,8Àè“£¿UÊXð|°èh#n–È’ßq‚f”4µ"­ .$Ðp)…¼\j/¾Êswb=^œ³óiÊÌ~ó;3%²Då+«¯%&+:]Ç{s”Àá¤ÁÝÚœ¤Hþ—]zË;¶q îØ~ëÁá Ä”W9Ç.9Û{t_J[ª£ÙÝÀŒÅ•³žk”St0ªôøË3Ä~Ò¯ÏÜã•ìúŸ c ÃHÀböØ_.âꥀ4š¯l}3™m]keû¸šIà gãd€É†“¼G^“\ ÓK o3Rë\0è,ÿç"~ýî»àkßÙdÆÿ úßÅoßççÿõ‡~ˆø’Ÿü1>â;??Á'<ŠçÇŸþ7þ‹öü}ð{ø—œ¿ý-~î:?óûçŸáQ<ÿ~þ{8šÿ5)ÃLjvIEND®B`‚Carla-2.4.2/resources/bitmaps/background_noise1.png000066400000000000000000004560401420416754300223340ustar00rootroot00000000000000‰PNG  IHDR^qq pHYs  šœ€IDATxÚl½ÙÖ$In¤)ª¶¸GÖ¼Ç\LÏt7‹µp)’Ýóþ/Óán¦f:°¨3ÅSÉʈÿw·E DMÒ¦S—š^úªkÓ­C]‹šÝêZ%I‹n]jº55´jêVÓæ?mZ%ݺ´jÕ­®MC».Mu5 I«Îüù®¦¦©K]M·N_Á©æï;ÔÕ5´¨ë’4´kÕÔ®[C‹­úhÕ¡K«NI—†6ÿ–$]šjÚ}‡‹vMI—¤©&ijj¨ùêzÞSÓ¥©EM]·nMM5ÿsèå?‘v-º%5 ]jêZÕtI:ý»M«†º”ŸÛÔuiQÓô}vÝ:4uûºâzVÿÍêçŸ+]~º§n­º%uÝZ4õÕKM]‹¾êjšZtéÎïßuùw]º%šZô’4t«k×[_]ºu««ë–të–$uIS‹ºäg±úž¤é÷}êVÏÏ•NÿtóÿÚÔuûS†¦¤é7»hÑ)©iñêXüoW¾iÑÔ¥ÍÏœÏ]} M‡]’½tû./uÝ’I›šu ¿‡[MS«þ—ÿnjhê­¡ESM]»¦ß[ÓéÕÜÕ5}õÒí{™þþ¦©®ÍÏ5ÖÑðû–š6µ\ßñ››¦n-þÔEMMÝ«.žï­MMC›¦–\;±®N¯•MSS§WÈû1öE¬ÄS’4µÆ.nú³.Õî _44uiÑ¢Ÿº´{9Ħ•†äÇÚÕµøkcyDðX5|ÁS‹ox£ÄKŒ…"?X©ëЭ%ûÔ¡îàÐ53lÄRŒe&z\YW×¥¡K‹o4–é᫔¯µ©éÖÐêO¸Ô}Mlœ®KÓ›¹i÷•Éa+þ÷¢ÅÛjqÐPnŽ[«šºNmZ4Ôt?–èô–fËOv„6¾)þ|ËåæÒˆP54ýª»”Ï5Lsê¹aä?ëy÷Êåsjê嫌o¸´ú3›nM¿§¡®©E«?+¶Ïðòj¾‚œ·.-Ú|d4“øÜÅoBZtiË÷×¼¥IßÇ„|ÿré’Vo6N÷f“ƒŒtiÑ¡æu¼jÑá7[£gÈ’Ž\³S»ï1ŽÁæ÷Õ´èÔªMÍo㫦UÓWpûÝóö5m¾Bx„Ðx^òïÆÞ»uú jî<8ºCÑÌçyªk÷]Lo쮩]§w«6þ³ùš#Ä/šMÿ)©éÎÅpx¡Ë¡ùQI›¦Nm^—º^ùU—nšZµøo7ÇÑáláö'³¤»#~üÔæ…vkjÕ¥E—šV­újjÕ¡æ3?Çâ…}iÍÓýôö Pp~7¿DBAóÝ-ÞðwþÔÐæ×gíâͳhèt–áèô²X/èöùs;üLMíÚ4täçDîtzÛ\2«O»®™)N°Í÷ß2¼!ºŸÐígÛ¦·ÀôÓnœÒ¡áïºý~om^âCÒ­Uò9¹Üå¿ùn»7ÜKȿѼ kÛ^Þ’„ÝK›V¿©ÃË0îsú(‘ó#NÃÛ›H>}ë¸Xuéò{^üS·¿gzÑ7¿ûM—ó&²¬žá7ÖãËO@yÎ_ÛA®åfê™»Æ[‹3–œSÞØ/ÉÏ(BÖíë–3#~+Öåå«¿%­êÚÕtiÕâ7Ö3X¼Oÿý×!xú{ŸÙ©Õçþ’×.ïi6ý‹6É'çøô"&™#U—†VoPéðéÓ½•NŸ`-_|÷¢\[#BEšzú´Ž 2½)šÏ9’äJ¾b;_^,üo^{…!´åCï™q¬ºõõfï…r:¸f¦®{n•x 3CÍÔ¢#éíógóâjW=sÓ4-Z ‚§-°ò&˜~ÚráÕ2á¹4›äŒépú÷ñ»!mjÚôõûJqä{l¯îç-¿ ±ÍçÍ’I÷å÷>t8‹˜™µDñÄÛ[3»‘ß~×ê\êÒKÒÔW»×ÕâPuû)Å’ßýä†].vn?ÅÕW§}€Ã!¢åB¿õÕ¢ÝyYl¾8"" />:êL&¤­ÎZ¸›5C`ó¼8ˆŒtqÞ´hQÓGòæl£—¯úðuŸ~ W®å¦ÕwÙ2“9´é•%F”‘lÞ!3Cé¥Ë%Çšå[Ë÷*±gnŸûÜ*gåí„&6jשUMÝÚ3\\º´ió‚oŽO—_)5±Tɦ¨Ç¥¡¯3éó}jê¥ÓI ‰úæ-t9ÞZ=76/²ûÜk®m:òõ*·j])5§ÖžÉÝâÅuy9(s åÉÈÉ•‘xhI”¢{CF€ˆ”{:§NÿâïÇ¢¯6Ÿ4Ö§Óü:y7ÙùÜâÿò–šFGâ ¸â¬yÑÄùé÷âúuó2‹p忢¬ãmI»×ОËùrȺ³$Ðßùîšïöí79¼"äk¹½¸#(½ÙÍé°Á7ð£i<&2—Û+#¾ï­ÅX÷úºýÆ»gõ¿_~ê‹N¯©øÄ-÷ÇÈ÷м2âØò³ã Z½æ6}]bŒ,+›ƒîåµ:°È÷7¯,¾ƒ8úØ‹wæp)^Åz÷»»}Ü’ZÓÿ̪‚DyóÒ½¬b ^Ž(UK7W¿ÍÛx¤¤ÔrË2böÐÛí¿™®ëÖ¼ÀU§OËŠ‡ºøE]úZYœeŒG– _Nø]_‡’ÃAnq˜™xF¦›¿ûÑÅÝZµú‘ó𺡯GgÆoyQ6?ƒé@·jjóŸ/Åág½ú'nKþÜíúøÎ*:²Ÿ]Ò¡'ŠFϽjZ\ÐLC–‡·\ÀBÓy‘~ªz÷t©Bþ×tzÓ®z¹—Ë€îÿd7²v–‚éºå¦SiÎNM]Î|ø©–ቼçR×¢]G¦íò™)cò8@ÊÕ0/Õj̦/ ”Ytfö—@™Ïgym_.xÝ™ØÌ÷½ùÝHپȹj½6ºC»’©Ã{’¼8ŠQ Þ3‹––;wqÕ/á,òJ10*2²«é/þÕÅÑbóâŽ:Q ýT ¡]_½P\º ÷±ÝOo?ù<ŽógóWo¾%~²ù¤ë™È'bË›X¼¸Ž{9}¹¬yÞê¾úE5îh # ÝUûê—̆<óÞWoÓæû¹}þÄÖùéÒ¨j:ÈPÒ4äùÜ– /Ìx­]¿û‰ÜÆICN=_%Õt6Ôü¬[æ(·—sÏ„÷ÔÛ £e^pûmÌÇËgëÉ9ÚæÓÈrEš.§×„²ZŽÓòð©Û}P .…ºO¢U…D<ÓÏîëy gz{Fù&7dNd9dJòÏOëÅ!ÓŒ4ðÝlžÝA|õ;f\§ÞÎ^z¾ ÃGÕ•ùÛ÷Îó»:#nñ_ßO5™Õ›Ÿ"èèTWåÇTî·‘€3ßÏ¢~ªë­f„†€|<üÎb7^RÓ?úËx Ø~!òíÈ MÏÚ#.2ª–—† ‡x@«/t4yfã¢ç‰LKëÊå2Ôb ¬ÐÈp² þÐôõíHt÷ò¢¸ujw Eå´ø$¾|•DïÓEÍåÅýòÒ¼ž†ýéü€~Ç%àË®—.?ìáô/ÎÄNp‡—Éâ_EPÏŸ¿}gl•Ó¡%Šˆ¯O—Kw^§ UÅ¡)z:ã PïȬL®j/'…zà;•MÑUCîòsè>9o¨ît•:@²9xF!µûä]2Éo‰óSÓ_¸†pX}]·^šZõõŠÝ4Ô|‚‚ªsÆÛù©—h\W§ãv?(sUÏm¥Ëö@”ÿ¥»³½·IúêΣ„Z¾åj¦¡ÌÁq©°£x'«¿ÿtïàÖ¯`v`ñ]d“ä[-ßõ'×…Êj Z.E/_Ç¥Ùôo¾ÙavúuÑ¥¼3f5÷ŒÏl 휙IHÔ·‹‚èÑ^¢M"ј¹©Yºd ÃÉg ïµ^úªPe{nu9!5Ÿ×`ü3ñåE_}¿ð’Áô¥Ÿ^$•Ò¥¯¯ù›ßåW0\ÝE§Î=òT¿ué%Zu÷£4ZuˆÎqœgÕÌ[³sÜÔiøœ® ~$ª,ýÈÝV¿¥îô¾g)W²gÕøñVîîFÜù[—s²K›vÝ~œ6S4“hO-îâþŽÍï žñåzHíPS7Q›š"meUÏd½ªt²ˆU·KGÖ*-·xû·v÷zföH"ùoþ”âlpÎF ¼©Z‹¬&6b¬„xR€n=ñs€×)øÓÙ`õušáêx£‡`47.W}3‚/ÁèÎ}W_U +§a^ŽPàÞ꼜jRÓ_Cƒ§â®æ:†‚àÞp`éÍ#Ñͼ qӫϽ%O"rõÝ|¶ï.¢"±d$úIדˆšjø·Y2›Ó¢J/¤¯¿™øw DuŠ"çÖ©®È½L߈uzu-îrlÞG¦ˆ3Ÿ×ô¹1¤¼ÚÛÙI´ »«m¶!4¡=ŸÛå'siu“çv¶ðJø®û™·Ì[ª§ìM£®Ã@Л(¡`@ì‰ n=/-z=jo:é´ËÈÖÇÉÀ[`dE7/ëp–›3«åø-“ã)@®¸&0þ8Wäû‡U&‚æg³ä¿3'ª¸¹¯°áÅA¬pêxÊ4©zÖ؂p@ ÙÑ6”VwÌצÝçÈÑý²=øÛOuuõ~×-À8³ˆY½#p¢NæOº1'} ‚MÂûQ¼6»‹YœæÃoêPK87ž0QVñ¦CÝÝ“[´¸é¨ÁߨñЮ)`EŽÐ"·Eà>“ÃB¦@N²8|ÈÁ§5ý{V]ô›Iûo'ÊS{[œ€‡h@ƒ¤·½ú“º¾Ž„§Ïù˧°’ñ/Ž8½LIV6n@P»£h\É%é•×LÛëÔËššmÕêvz¹òvß½uº“ËÝ;›mÆã£¡áF¥FAj;ÈìRn”E‡«ÅÊS}õ#£µ|Ju5oœK3èî-te™ÖôlAv7Íýæ–¿7âi®‚TÔü·EÝ‘kÑÊÝ ªåó"Éç¹DGaºÐYE÷uŠÞÍåëu8eHÖSC/í¦hÝ™«3x?A@«F{­»îÕTdphÔ#·däŸÈ¦6Á(ìç·ûétge›Oâ¦ê }µš¸~‹–5 qlgÏÊ2ƒV‡èî§QmÏL­ŠîKôŒ~ÑxfgöäZôÇ;lMÿ¤[»ª7K» níë×E'šªÖ¸¨#ÓÄ%Ï×Âè©ÇW¿Ö)ˆ¢r*JEI­KÝñ7ZœN§·¼´êëë= ŒMmÉ` ùjzkfäŽOÝuå?águã±` 2¶ýLÞWŸÙ4!㩾ëÕõXØmËç9¼AH«óÐ\£7°þ],ø·ºµyCÁØ£åW‹¢¹Á¹‰ÞÀÈ7Aãv[¾ÙH(  0‚ÖöËÂ$7!PÜùdVAë ³{3ÿ‚ƒ Ž“[ÅLË‘é°üu7!þ³{›_V(`¦ €r5%ééÌW’Þ¦¯Þ§ ¢sV~?ü¾oÆ|dxyvÎ,§KŽ[ŵí~´Õ£4‰"`Ï9©ÊS§^¢Hƒ*µø¦¿6ýO0šxÆ·;!SWÓÿp"`”|£»FnDè><¼ˆÈ—눎Ë#É•%— ¬U ¾%ûækVh—Ùd·[2—@ù¯L}÷G4ýÈz^ߪáEB,…ÞrgIB;ŠvUØTuýiGFBw{± g+…ÍN_ËnävõìNB‹=ÙøW^~ẗëÚ®ëšv}4u¹tá\-¹³Dˆ¥GÅKAræ•_Ë•…W26^¼™ÓùD'i(&0vç7Ó?<RÍîÓ™¢«…Ï›v$:²ˆÆåÐÔK0?K£2{F¢ßsí®ÚòÜï‚ æ^ˆS!º Ü4r Œ½VÁêSš€MŠ9üx¥Óåð9]þ* ñ!é%èß·¯™‚~ —w€.»ßY\ÕW—º 2RZž‡ZÞs}Ó’·t7ýÅ[-ßð¢¤ÅµšlñÍÏ"@¾E‹¾’¡N˜[( áq½…XZ;"®ô[>´®®]‡8€ÄOm:Ĉ5·ªg‹i~Šþ5ÙÛ¿ÐÜ"dtôitU7y8é ©Ñéo;ý:Ÿ°§¦6/ÃWCÍòŽGý”UðÄäŒaó& œn[¸g½OsõÖ•sœó©ä7²é6Ð×½I6]:Ý8\ž}Ý¥(ª±´5.äpåXº²R\9•¦Ï“UGža0öcãžù6»·õ0½Ý ÿ™¡.7` ´³¦@ƒ‚»rŠv<ó8¥W‡ª!´ˆ—×Ä¡E«Ð#vƒÄ·Þ™ó6AëªÞÌš«çòu@tp±ñ6Á ¸$<„B–vòê°þÎ3;rÎß2cS®²%8xÎ*˜`_—‘Õí>d—Ì¥ÙôçÄtšBøS*6íð ÐenzùÁ4ÑÁV–ÓK5N”ÍÛGþD¸É@=ÑòC“Ñ–~5ЋÜ踜ºMôΦÖô9µøoåFΖ©=bÛÛ©WsðXü›#ã>Héä €îq@-«ØËH-H¿|eÜï•óp×O/œD±{3¯b»OÌÃÁ­:ÚÝç—kâÓ©6<ˆ¨|¾<ÛB6g:T–h!.¢W\Ô¦a§5}„gúÚ€]åRoæÏ^y:‚ÀT_\³B»­,G¢G²>jÝ&¨R‹ ¥3±§!$ÞÍùEÀo~Ÿ°\Å`)ŒÎ™¿ÔGß‹ðÌßѪì‚FFãõö5-‚D·‡)?z§SßD$`Óo*ÿˆ[òN`€0Au=EE»‚%ˆoÏEÙž6¿"’qÄ,<7^6¨Šü’”I9HB¼žéúr¤ëzðÙ[86×uóñ´.מ·»hÇ zµ°iÒÅ·¼|ÂÏ|bäX$¨¥k‹¼¯¸u·ÏúÝ x„Ôh¥‹3S:€?:d?— °©}1¶çfÎa¦žt”ÖǵÆyv¸¸!´]¹I`䟢ϲ1 ‹~%%¿éîróéÁœ^þí –}óV–¤Ê×i7(Ën’ôОÏyº‰LpË_.’ xœ‚EÈñˆ^¡ åLy@y§h€ÿ¹ø©SパLÿÙmd9zû¥€ EMY<œ+-.Î`‚…]ζãª~f`ùDŒÆb“šþlÃ^—òG›—e÷¹’’ˆ¦‡ý,š¡z†êUL5JâË—²m¨›À1|›HYš8 ŠüU·Þ–õ²´H¯g–Ë/„Õ¯ñvD>Ì}Xœ|Í|õH.¢M\€Ø¼kÞT¥°’âö„ߺh¸a©2¿jêc4…ÍUíQjÕ5¯¶ºÒØnðVº`‹õüØÝËâÔÈÍŠ– Üi`õc.2üŽºͼ"@XˆXôÈÉ -­Y, |‹ÖÙK-Ÿ … Çùá* A²”(§6A¯ÿ ¯‘ê"-Z ™Ýz Ï„8¶°‰OAÀ…†‘\:5¯qäȰùJ-âÓ¹[dά]…‡à`T™Š¢%„i-¿mj˜Ïzc2Ð&Z¶›WOÌë#Où¥­'HYC?…„Fó©jŽÒoúSžg¦²œdO¯h†/©~«µ²‰~r/ºã;YEüúq(/§o…óùK ά¨Ÿ[¢¬ÔŒÝéfô—ž,z–Ux0Öþdx_Mt¯¿þ¾‘‰pTªséhŸ~§T‰C ¯Ô50r6Ÿ‡¡Ç0¤ôipê$ü•Û¹o„Îx~›àNi"G¦ìUа).-ú­)g„»ÖÞVÀ“ ò¸ Ú,³|‘`‘.*‘y‘en}3wÚ½ä!O]™Ð¯®èé:¾ŸŸ¢ógp|Úœ g.›  õ”^•Çê<í487\[C—ßÍÇMÐÀ*­'KE#Ñ„;¬™ø³M‹ùŽ‹;oؘ-¼ìÐ|0[8>å²ä¶ð 'ÞÝEê!= !QŠŸ’Ö¦ÖOhÜO¿„jXA”¤‡ ‰g¿æ­u'oŠÚ¶tÜÐ#V¡; 9õ*[òÊ0B% Íþ¬øgí+?¶MWÆÜË)VÉNïÇcCd[¿Zm—ûxØœDê,ã"ÑÆ½ŸÎªáÕ}ºÒ.:4ôzTžXBl¾=¯êò½T£© î|ÖÈ“z¾­%ÓÔW‡V§¬ðº©]tÊ>¬ˆ&$úÊO©ÖWd&[ftâzzn>:7ok};£oV°qø Õ˜ ƒ5²“·KM‚a¤ÍÐj»W÷™ç™«B*qRw _Vaòµ(K8Ê\[$Ũ>§0ÊáT†ãí‡òp>¶-Að%L? ‘aÃù€s0ó:W‹ÑÆb‡ äë'GÉ*© j6ãª"5Dúq$J]lö8vѽ¼rÓTÃ*âê•ÛO•Ø:Ø… ¯éÆõ/(¯Søñ ¦‘òòrƒ«oÎÿæëü ô{úJW§l›+d0eÐXEgÿ9Á—Ÿò§Øœ¯LýéQ”ÑʪaoŒµf¶§<\v‚6BÝß…1j {Wcïq.­Z¼ˆÕð÷ËÛn¸v]2Ä_ÜÚ¬KXüžnÉÄãCg6r€{!(Ûs#,*G6}ˆØˆ§xúÚSÅa£ŠŸú¨d´…” ‰ òÊŸ»–Õ[pÏîÃTõÐgòó冈 o°Xi[&Íe’×ý-˜?ÓKÓö¢=KãbjNqo„™z:"ÓEŸÙRQ´Ì·—|v—ƒLPJœñ—˜¹.nµ¦?‹®-Õ3«¯ì¬PGòÖJm©4:³+J]Œ‚ ϶[Õ>;<âQDB4s Â]îºó SÒG¡ÚŽæ„Ÿì¥Ÿy.·üéÕ/‡Öiäâón¨ ]_¢5EßûÝûhý‚lJ:–ó0b1DùW4èëNg2Tߣ¨ø€Ð†°) ¼DÒ¸FãH»¶ÜðfÀÓ¦{Dˆ{kxŽÏßsM 4åNW®P’qˆlyWMÍ«ÓnK†>Š–‘¤žÙ¼Uhd[>qr%Î~òã‹7aÇ/0µ™÷ÓÕìÍÜU AºkÃXQC» ¿æv)’ñS´ÙÇ‘E¢ ˆ|æhú/~Ç#¹_/¿¾åy'¡W¢æÀ„ðÒšç!x&¹Ä¯VÚ/¼hn§Â#Ö2žˆ(z RTœfª‚üòU÷vEŠuàG›Ï¨é+¾}ÅÝq—ë {ûàgøD~g>2”®Ÿºƒút?êtPögíö)#éñVŸ)Í÷‡«LO‚ÔWçå’…CÂ×…‹ÌKÔÔå}[Q‹ZÞJÿÛ",òpqh.Ô¤#ß'ï6Ü!¨Û…:´ ¾Ê8«›?‰ƒ2L§ÿ|7Ë’Y ŽlØ(˨‘‡0òîfŠ|M{'=§ñ¸m|: ‡G÷Ý„½'&Á› ^ÆP5¸ãûë¸`ÇЄu ³@âý’'zÚ±LiÖ­, Ö@X¹!Åû#“¥¸<²DX´5ýS6°¹·?Àœ—@–I¬%ˆ­˜Q Ê@¤ʵ3#?–â±|£Ý¶[×›“n+ }u¤O‹àtnójþ}”÷ä—¯ðHôeˆ$Ò&¨.—ëñÂ}/A–RåÔ¡ýQ7aÚ5siFÊ ¹“ÓKŒâ|ìT¿f:R%ø >Ï,Pæc+,o@1Iƒ1×½/ŸƒÓH‹| ¶\ö´÷€€/u½u›Jƒ'¨Èx~3Hö°¤r=hó"`•¾`¸ž‡A7ò!ßÝ¥©†»œé2–DDbÛÅx‹r8À„¤ØùÕÆÞO!fû:¨Ãì8…6ëpÈ»K6s‹ƒaéõøžxG§‚@ŽG$ë<î\ Ü;u\„¿¤Þ Ý…Aõ%Èλ€ÜE^‰doO Ô¸êµé?4 Fȱ*~ìLj µRú=9aô WkSŠËö2øw ®Êïšùò›B®%ÎWÊJ‘½¼G¤T¦·$,®øî¨Uq2>nÇÏ­~Ô¤V¤‚‘ì-úê§p¾ã,‰Ô£°s UŒB£ÏQ¼ôæò¢Hƒ.íªî1õ5Ää'‹„:þ×p‚D:œr–7Ðí÷½=64Þ}W€Xit1|cϺºú< [’cÖ´f—”«¢œýXº¡†ä¨¹53B+YG 4¨‘AôÙO¯yE¡ÿ\½R–,ï 眪õ"¼Ã+vÍ;¼›öüˆ»ä¨5<¥û@ý¸;ãa¬\àd¨Œ\ÃeèéRnÈÏüèÿÐmˆBïLHÂxu"íã;ñVÔÆ“²7ý![¹i°'¢¦:³ ²ZÌ¢ˆ\3i‘ŽìŽFœ” ý{n\&´TZõPIFPdmúæÃö›®Û†À—ƒvÜsCà\̦¾íx 52Æò)6ex#Ž®/þDÃ$Aà)$­íQq“ªÁ’¼…$cQµÁ$ê|Ôiq'GjPbÈ j~¯qz•®–Ew]LúÌ,ˆ.dÔ’»š~wï„Ô½¹·Âg¸èa$½øn¢ÕE¹uç³UHžƒ»9Üz.Wá—  Ñ…¢Ó}d®Ø´É6g«L^Z ¥âQq “õXå$ÖÃå=MÝ÷Š¿3ñî#٧Ǿ>ÞUdÊQ„®9¸÷!Áï‚õ¹â¼3釳9 T¦ÐìÊH.ÆFP¢¥Ü}¬—Ù葉µéß‘#°÷]ŒA:üˆz¸Â—a¥¼ðX¦ñYJAö}zï–Ót%¿hØuèës?ª±X§ðnG À°°ÎrªÇÐbÍë“pºBJªñ<RC´ýp¬ÙUkÐõ3_$×V,l‘’ºzçÆc¡#ø€—€/ %N´cO¿¶SC¯D¹ qöǹ úŽ,˜-=¶Éf±KÀ1N5ÞO%càôEöå Vá+D’N¶#gr/¯€©‘Ÿ†ý+ •GÏnÒÔW ù´2uò`ÃËÈ‘¢Åáà•…FÁ)™«£öà¾LÄéáYÆ1EàG¾Á;?›B˜ê:®tWIçxJ°Mã|H‘¨ á5z¦©éó(W ÓçÂnÓ’k”‹2$ÊóUL>ºØTÓ¿ç¿ôÕ"¼ÜP#‘j⨋»ê­iñ½žIo õ§ÊqŠq„—<ËçL¦{õP÷¬¦›[”˜lŠI¬O ì—0Ñ€Üpå ÓË@½N`šú‹{» ŠÐ¸ü!ü÷âš6!aŽ>û)l,0‰bNò⇠ãžÖábuÜîš^ÂNóHÆ%p#öàO!Uw‚a Šÿ´Å…æ¹ù‘ºòiÏ!j°Ø šÄ&¡¸€¿±Ø’«©Ë¿C L%^,øÛß kórOLéÈÜûÔ°÷BÓ×½"˜µ¼‰ñ-„=ÆÑÉïJÌÕé(5Uût*üþ±{‰‰‘Ýþ’óÁ/Ä0÷ô:=Ô<7xÍPyç /Š™Ƈѡ 83G#pÜÂañT#YõS5ec·ŒJ‡~Þ`1,[Ø–LªÄ˜wF1Õôï‰Ò:7ú1½ÒˆU3Ïv¨=0ïOßì•9-”8õ ÆìBÞ1T*¦Ñ!ɤî¥!DWüðë@[”šh¬DWŠÈFBÀvl E[>¨Åß„ÍþûqåžöœA4Ó±Jûu:Ïz]`:ÍCš”÷„ÍUx/"~‰×<2L†Â-o†«U‰Åèµåñ±19]¿O}¿Ûëò/Ñ݉çúq–#1?×9ž*ß¾f޹öÌTyˆ™‰ˆ€£˜ŒÒ¸çgÆÅÝ~f!" ÎÈWµS”…`{èÝv¸Hdƒ‚ó¦j e)Òûškpf€[]`•WöÝêgØóp­4±N¾šºô›ª™Y &YP¡ÿ=Ã:Ðh9Kæe™‹‹XÞIèZ¿Üœºu7ýQÝ(啚/–Baº0Í0 ~‘Ðaˆ@l:ù¾üHåÆ ó×G~‡DeDß6†ETÿ½v!.¦L³äv'•Çôžži?•2Rä»—Ê‚[³¸ýˆ>6¢§Ç<ÓØJæÚ³…9éð|›q”§Ã¡—¯Œ\«RxæóTº#ÿ®ð$ŽSâT´¹ÞbvòPùÜ4c&Ï9 Ý×NMü.Yc²cK%xqaþ|É#ƒSyæu¸B +bÅx´F¡¦?ççNaºVV`Q¼E+Ä^Ï7‹|du•6h ò(³2T.{BxȨŸi?^ýgÞoÿ¥‡@Ù˜Q#hž; Ýåc¹BÆÉÐüMtLÞªQä`Kåï1´j6ýQh”¢b:TD„(°Ž€ WI+o÷EŸ¹kF/ƒ”kÌUkq±88Ù6akT™ÈKå‘.UËv´‹‘[#Tü˜c×øïRÐw•¶-¾CŽTUÝÕáô©†JRucãÀœÅ¢H©ì.1‰tj!ªr‰H©ìˆç͘ê~Ðô·p¹ƒIcõé®]P¼`n.‚Y‰@%ˆVñæ£<\-Gî*."ÞÆ¥pè‚ëÿÍoÄï_y/Ó8Ëp’*ldØýQ:BP_D÷ÅŦˆÜfŽ~¥h9—çãÕ½À8µåÛB²Ía ­òÚXc· s/ÞP.t5‹ÆÈNàÀÒ1Âæ ß‚ê£Lìn‡"–'ó=ëkG†8NgKÉylúOo^}üØåmCo’ ‚Ã5¬2#¸ ¨•ùb¼@Øù˜! ÖˆøuXƒWtáò·«þè¥UEö¹}“›¢yrdŠÉ–Ç éÒ;Á .é-“Y†@ä£5[žJŸw˜Tºº&œÖÏ*)1‹A)Ò !ºêðk/@0h.O+ Š-ŒÙÀ` ­¿k¹@kЬÞßê”—s’¦&eB Òf§Ÿ©2º…{/wEÅszã•Ï©ŠÁ¯hÒâ÷;…¯nS>õxpôÉÑ()˜òS¢§®Ýåó$†Ëwéëñ#t–އp‚ÄA' {âJèðe=ßÎÙ»W">Gh¦[uM5Pt1H ’OÁF›`v@ÂB­©y:UäYìQºK«nsdÖÌj/!ž ÕÈÒô'ÑO‡¾Ý1(Ìð/`¯h¡ýÔõ€öjVzwRM%T7‚¯ (ˆG€b»™Ä‚l "’SI~.áS‹ zZZ»:PöuA,zùÿðŠp1|²Óǧ¡ Í©¦M;‘Ô„9Ðÿ§ƒqµ+ñRÄ=¶'4Õ3ÈÐÜ– âHÄeWY€]ÜW“P„³xqZÝ„üR &+ç/§d-wÒmDXeÀ ŽÁj-5;²‰YK˜ž¬i†9,Á ¦)V¥éãü¤N^t%DЈvà¦'Þ|ºžúdbÛPظ`™Í¹>„AØ…Q\)ºël„¶‡7e<‹SxkUö³d¨f,W„á¿iO­b”^«ðØåß™á±lX¬””ì£2% €u~‘§à²ÑtKMÿ¢Õ[spq¼q@]g6žuýtÓ(–& Ýp(0ã;·:ÛxæKæ ZE£”—:Ž8öI•.³íg.ìP2W›ÑJ»|wo*+NAFOA&ulÚ胈vy,"ŠƆ@ ¦Cß5ò `ôê‹ì+Ä-å²I¬Hì7d¥Â!cW¾r–9\÷—[»Œ*¥ÁÅ0öøýÃÏoó b îY|Þ‘{e«î´J1f¼¤\ÎRMLÀE*pŠjvîy=€£xÕd)(Täe¥F¸r Õ `¹’¿D¿Šl(mu-»,#p½Ž!ôvä´À añRâ÷&f/Ç[ÞtêGbC­Ý!pqЕ§²“`¨RÐ2Eiu¢Ü§WQþ4ëFžäðÛrpº7ÁO\4šþ–ÅÓǧ›Òþ‘œ…º¨-r Ý1*ŒSÕŠ#?(œù˜¨i—E›í£%—(•².¢›ÀÐ&é§ž®z§_h˜AbIß ~"@P4è6A˜©­&Íb›AO±²úy0¹¯X“OE¦3 µ'öp‹a£Ï™ á|LY0ós‘—~]²¿]úJ’¿¯ âKÈ‘˜ºtxù … D'ׂ4‡Êy®\o õ¼‹X¶»Œ³5e¤¹¸ !ƒŽ ÌÈìÞe-9Žõú%˜)<¶ä:3ñ‚báÝÎþÈ%éHÑÓhõ\_ˆäJ{GÐŽ•Ví¨i¹Û3ùþ]Lhz2(+t;²Ð+Ýiêzè}ÝqŒaÈùM2Ów®\ÞŒ¦6r)2í­øîň&|ÕqL¤qƒ?¼¨’”‚+ÿ‘'8g# e8wļâMLâS@¤û‘Ô_yM0ñÙ•ñ£åU£.÷Óá1a>•§’ŒRÉ“ú„ç4…ç [î `Â\‰53bŒO!-¦Z¾œuT6‡¿wW:Ô’˜—eÊWåNj،ŽCõnð8`œÆ•[2Ž"…àÄ2‰‚.ÙÅÓ<ŠBqæóU 3„íø‘Ä°5ú*ta*´ãâ´¨H{eo‚¹,럃ç­òŸ¼ü {JQÓ? TÛ üfª*\TPÑÓ/.½øKøÛ±é㌠áG'µçKŽŸæOöÇ$S˜îÁãµO ÆW#o‡¼KïÄ_˱íÌWÞãîOÕ^Ú*\xL$Ƴ ¦_*ÕáÓw äմϺ?áH¦ÎÖÛ"© Ìôy¸ö¢ØTʺ‘átÆÔQ†ÜÊ5Á.†žŸBŠaëЖ>I‹.}Tl†r³Å”^Ié+Xd_íz‹Ù‰4A¡ñâ*Œ«Õ,fføQžy§8+âéøL<¦ ¬B,†SpÑÔàuÞ–šI²IJË@÷,»šQ†SH}Ÿë¦Z{²ý-ÞcÊãðYò½Ó¥€ÌR7ɲ¯coÉ.ÐÅšŸ&‡yPú#Û½„šüÊ>È&5ý7ŸLB£jZ‹ôʦ5ó”ÀXÖNÅ‹ò Œ–ªhª³¦Ȩ¥¡†x ¸»@ÏÁÈ‹ç#º¥Dû ÏâØUî/5=5 3Fnj¤Ó z-ÑÜ [™·iš´§#\qÜô±_ƒ—øÔÌq² wø)ZM´ˆ°Cá¬DS¢ÜØ@ÑÂÜ-ÆîNßãÕ±˜6¸ðáQ¨x”*ÊàBeËt©Ã‡Nt\ŽÌfèüÈ6Ã+¿' ˆ]èãÉ&% Ve!Ó‰cýýÐ’•r¹éîX¹*ç°+Ù|}ä}"ÖcwÉBIZ.EÓ!ô LWY¹–ã[?BIÊ.9ý)·¹´‡ÅÕbýfaÍäÿø»€…ßååÜ)r”ÓÂê`1šþæ…|äÉŽ¾Œ)9‹p÷…œ þXZ—°´Ä‰þ9iy<‚jK×ûVóùSü)t¥LDŸ“ùn³½9ka1ÂaÚŒbñ€mÆÃ¡'å-æ±4oŸ)†ˆ‘3Ùc±»/ݼµàþs»úBG¸8$­©\㳿.‚KÁ;\ýƒ¤ÓcTŠsÇPTdFðÒqB¼ÊÓhî)Ùàêwù©`ª¾djZÔŸ[5Z"NŸ`áá|_<@¶aevÑD´Ø eDߌ£#|ªþ)d³ Af˜CÅ Nt#¼-Þ \ƒ.ÆcøU¡¶Ý–§.ÙXKdj5ˆ‰Ôù ¤Qºf¶6}„PR€F`"Ce¿ŠaêMLÜÀ¤À¨Ñâg¶Êy¦¹l‚5Ø4\jE–´H1¸êF 0ˆf<ˆn ?RÆMqºÜ>]˜º·d’< £aç€?Z‰)híEnpæÃdzËž)8¤á’þÀ"SžVÕI¯Žùæ®Gðîn½ó7ÚÀ›q¾s#@>ÅN\Â`ƒNdžHÁT³•HŸ6"ðøãvŠ8Ýq:µ¾}‚Aõ¨ ‡déŽ÷7<ÜzbÌ7ìâ¿ ú/ÌÔ]3[Á¨LÇjûÜY|m.T¾B©†çRœß-³;Ô§ßK ·@JƒXƒV£hæ\ý–Ÿˆb— w)k±2¾ P ж¸™‹¼€ ê`þ fÞ˜<àÞÏXj’੯Ӷ[´=š°wŠVÎ.fÎÅ&eä46’ð®# œÂÔE Ûºù䆪‚"aS§6¡Ã¹Èð&®·¼ïi?ÆÕŒô»yqrõKMaà%f1T—aVjOÁnÂŽ9ö’ï‹©}L¨Áhôm¤E˜w–9ÈKôb~ué¥6Ï|ÿ5‡±|þ°2 ìdÓê¦ä&^U*.îÑ·|vÕ°¥!«î£61]€”™]E«^*3Œ³0-yj‘î–¥z‘ÒéátÅà³’•½EsÜ–#v ×ѯ§¬¡Œ­iG·>Æ Âý¸p~ \Æ÷€¬ÀêÉé@óÙH• ´I 8Æu-Ômq¢¿\U Ô3D@q,ÿ’r{br‰ÎR™Õ¦†\A” *}ù‚ȘäŠësð`ä&"ÅÁ !g1°ž*z­o‚73¿ƒâiŠIrøý-Nª7É‘×Â3˜þ[°ŒùËkŽFN íExêÖ„ž?jô§‘æëïj[Î…0“¸ó¹mBÑIżezX¯|[SM?]°Ä_ ä㓚y¦xË—s»è??c¯½û]òÝQŠ60Z€Ãwt ¡ZQd]aOºe@ä-•§P¹H-—D2[\yp¢+óRõÊ$€¾Àú¿¢n‡ÁGQ±æuU“:¼‹6Q‚Þ¦åi$P…/—¼h 1Ö©² Id¦ö›þU¥ ‹e±‹I¨#b¡‚nbé4„ ¨„—5Ud„•K¢J—½œRp>gô#£!ÇùR¦ÎÀ'¸Æ"è‰e|§¬&Ã"ìÍ0Û.7UúÁŒ¾:u磊SdubŽÊ-&BR=…qø-¨ÕôðÊ©p‡½ ¡œ æ'Òénæ/À_YéFU O¬¦ÞsR~Ú±ZŽ"ïöÍD·¦=ó4Â;Ë+,Tn*®% &îA¸ã×ðÔÛæÚ¸%•g™U¼çÕ zçÙ[X¸”GPàAçüæ'ðCÖÉ=‡©5ß3vÖ/}*xäACå`P14TbÚža]Ç&®lDbü)TŽqu/n¯Ù¡ ДA3å-à–P!™ªÊWÆCLo”Ÿ&¬G&mKŒb¿4µ4ý‡Ê ÜÌt¤€¼øzR&š4’ Þ’L±}ãDÿÇ¿8EIÎJ5¶zàØm×\÷2ú¤É'/N ¨#ñâ4©>ÅIæiL\.gŠòL{e:§¡ç^ÓUŸÉf$õÌe¡|;+ÚT ÍMŒ/ßV¥DZÀÔb¤(ô梼· ÎÕ–w\;rRŽ”ò•˜gIþvy#ÀåhÙB½…áá ýÂK#Àt¡×+AŽ‹Âϱ]ò~®½ .(ÖV%#¡¯ŽÀL›–‘•°|¾m‹šÀIW%Š·n Yˆ~6!â¦e«ñÌÍ'Ï >otæ&ü…8"AJJuºZ~phž3“iŽI þAñÝ`@#¯0öèGxrEï©fRM“…™_¸¸ô>ä¸6ýYÀi°–J)WMº&(UHÁió,°k¹ývw14ˆáŸ—‹zGL?’Š`ƒ’¡ü|pÛQ®}˜ŠŠUtßKÅOŒ]qè63¢Y&ŒSÕ¡Eo‹Ë^b8I© ‘©èËiס;Wºœ Z®”?yVŽsiúïº wìÒ£¡ ~qeK=²æëa’,Ô 7ja€±ËgÌ‚!"]å§µ3n?¼(¿P&OÚ*AæÐ¥?ˆžÀ–g (ù%ÔmÁ•ð—…[pœ¬ ªYºñ(OáËŠ#a¨¹cÔ‹0Ì®7ÏLÃjÈ(G%G2qåoBñ2 1ø ¡3¿ÔòD„Y¹9K›Ý–è½¼|GW’±ÙÐÈc¡lÏG=\èF F Þ"†P]^hhCȂ۸X€2„iz3ά´gæ÷nø5d4b™·€lëÜrkUñ12<€Ð€Öãyh ]…2a}ßzgˆc²¦h×UN¡3 â¨'oÙêmapJŸ„€Ã<<‹ð÷»ôÞ‹!×’±88 U²’qŸê0/³²€jìK8dæßà¬KìR™j›Z~øO³D°f78Ñ×6Î©Õ 8Røâ 1%¨^òšÀJX>cÀ8ܯí¢KíÌtìR© UDr‘÷|ˆŸ§—W¤ÅoBŠÐ|ø¡f§»ê”Ð<ÛE³ãè8ùË50$!ˆˆ©cnKÿ:jxF²¡8Êî!†gQ¼ á^S®=¡ÉC'„#\“›ßÄ[´ˆ«¨|'›˜§g]¹¸éÜà•¾IqØt™X ˜—2%> R©'éš­Œ; ùËÓø*ÍP,@xƒ°iüqÚNöš„}»ÃÙêL[”harúBj+V&ìü8DÊ™Í&ÍÍ™åÆÔK]wäj:'sPPÄï¼¼£¾@˜_.š­d rÇH¥«éŠPVÕÝĉA÷æ\R3Ðc¨zì#Ó|¼J7MýTH uAwNw“g\•|‡Í)^À%[*EFÀ©Uéâ³WâTÄï†|ƒÚjqè!‚Ç2ûé\옮ũÍ—Zf)ŒT¢2`qí_ÄMÈ=Ó½üX¾0*Q€£t,§ƒ’GŸX»zøâÓH–»Ïà+—þA=Éâyð‹RZñfì CBÔrÑÈçH$Ílƒeu<ìeúƒ~‹ƒai4†“k(VS›}zŠh^I0ôÜý¿ /ô !ö#š™wÛ]SGÄÔJ nÜ `È‹fê%Ô¦Hì.Ï‚…Ö|¨áŒ±8›…¢'#‚ûê‚c£kfO¢ÂDØ‹‹¹Õ¡ò°ËRÓ¿êé‹Ú6(ŒÀ,äÿ„J 8ÌE`To¢©A^¿ÌJZò¬«N%C¥…täG‰ü£?îáÖ¦M_Míiá¹óåø„è'§ 2*&V‘à­Gï´`;l¡§0­å¼‰ÅåOmÓfƒ•áÅÆ|JÞz<·x™C«rCo¸ÇEeQþ4˜Î¤½|-Ù‰&àš¹Ð#²0± O1µkÓÏÄÞ*Ê ‚"ž‚S…iÔh/h®·ÓÒC4e [§ÎòG 5‹Ÿ–Z‘«r% ẫä§3»²ë(×]!Œˆãky%¬r‰Aµ€ÅÑ{/o]T‚‹³¼XÏ_1ÐbXS Ú.$ ³q€E®+{ Ë`&àW1³)ž[M¸í*L™´ª(ÁwÓ_ï3‹eóÕæ— %„K:ÅÔ3ì ›k_êu˜S5 "´O5¥wujòäC±=íŽciRÀÄ–)´eñ´Ë¥ä@Ú; âÀW œ?6SÌÏ#A,û†€³v_K1Ó0àSâŽN^yå 4éf–—˜wXŒÃSÐFé=0å¥:!ZEíPÐW1-aNM3Ô2¼A‘s°rŠM›Ë,ZȶÜD…úP6” kæbÜ0èᛟ©¸ItŸA5æt΄õ×È£„®÷Û ¿~tnXv0–¥È»ED“‘²ë~ly“«Î «¿ G¥rÝR z,äJ=?rg2‰M«¾N›…Í ‡¡’–+XÍÚ¡W^þåktKøw®a„A«ÿt{äC5H·©7ýk&W´üš#øK´x¨®pä\š–—BÔ-P-8êÎ ’ ¨ç÷¬~‚0ÌH©xE«ÐÃ]~*C‡‘7&‹·pð)çYäGœgP$qB£®e &MÞÁ8,"¥Þ‹WBxÍûæ$‰½ûC¥ÿ¢F…|…ê}ɳ à Î36âÕhR <•@\Só.ŸCˆIÊ~ët×¾ §ì@åœåk0¯E¬VjÆ.pUQ°ªˆDÝëáÈcçxÚÉüL’ȃÆ#S¸ó<½àt.OË53Ôœè߯Sâ}×{^|L„¢òcp"ÏÁ¦„nalÕ¦‘CZW1+ zÜû£ÀO‚EQ›Ž%K:)ŸŸóΊ¿xj1¿ Hë­£{ÎjKØßu…£1ãÁ.ê¿'Ù)»Ìx@›§¯BÓŽêøÈ$› ¢4gÈ}e@ŽØ|0çð€ïyC!o| ƒ‡ï/±îWCf©ÌFñ¸'¥¬¡–w²ÕB*IÆ[ÍYyæÕØê´¯»8Ÿó †hµ ]AëÝ3˜Y2©áh_‚šGƒny®A[zÎ ªá.t¬kl:Ã\p?¸„í7'ö•MÌ5Þ¼™ÝXÁB‚-!*N¯C`æð+”ÁðÌ1•l§Š^DWdÙðA[là-·ìb"<1eW#¼öëûbXüª²þ‡ ]üìŽKšJ­‰»ã4Z±ë69zw~ˆãå•yFe6 ½o¹…1ÑY]½c–ß|$‘–©*¬[ѯ±§ãÕúŒ[Þa…%˜ò„ÛÜ–ÝC–•/<%&¸ÑÄ Òl{zÚlºráÜnCàñ¾æÂ!ä7ù99Ê×Ȫò†á\˜~[‘›ì%@;€¯&̘Q v!‚=\-ɉ@cV/­lO@¼ ù”ºr‹Nׄåªte`dA^~5,oå3-®Á’Ï">7|XtÄŸg:¬'ûë¥MG:SÁ“lvš­êB \ûé”ÄœÆã>gv!êb@Ky -š¶.?…Û³+ò#7!wA„Æp .ÉÌ5T´aˆàÃý œqÊ ‡ ¸¡5L£ÄeCÝ\?Ælð\cåÕ»¹„ð:Ѓ)C!+1£BþЮéò€að«`Ä…Vf×rŸUŽ“{f½ÌWw<’ AÒ%5ý›—eS—Ô&ÊqX,±iº¦% ð•wçЀ1|+@–2›Ä¤G¿]ôˆ9M‘„^}ûÔ<…òž3 © ÄÙ+™í§˜GÜ}æ•ÕBTzW.9õ¥§3ÁþvÏÓ²ÅWs¤®—kâXÀ_¯›¾¬¾ #ak/~Ïm?­¯GÒ×NLuzx]Š:ju­Ÿ¼Àžx"²ž£Ré^¬*ü_ùw0%Vá@LY€‚­ç»&ø³ å'²šÌƒßq)"°£OÅâÛ­!:T8ë3߉œ°zV±"》 a`Úô[‡]_˜5Ó€n¨yf~ŽE‚Xмægöü{‰6.¬Þg± ›Û¿Ýo=ÚŒ§ËqL|цïñ×ùòi4 VäšO§iÓlúAÓEŠˆ°Ý_´[VWcL \“kÇpE¹ŸÎ%{à*d0äÛ‹‡åÎé‡R«¼‚ÊlºF[‘·ÜÙ–Üäèß­èß¶L|ãüp…[!ÿëR”¢œ¨lB)‰–Z6žã™±:ŞϠùÉ’Ôѵ/ª€*¤ž©bSV‡{1|YBÖ2ˆdy³€ºô4l[l¢!||v0Óoƪ»¦ `J n¹|Oáx»3 nŽûoᢎCĽhŽ6i²…ª­Gðªa"¦'k¥ú h]¸ø’Ç’âj"K£júo`Px”£‡’A—×w‰® cüÌГMU_ÞÉG·µ-qpº:¼×M @C¶6sK°üëY;ìªæ:d¤ÞP‰:i‘âw1ü¨©ë§ Gж+j"ŸR'c4/¨i·Ç+„áVí5Æ>îO—!·S( £{ðr=ygU5N@¤Ean½»Øy?<ŽMtyêÔä×Ãi×jÉeÅWà·˜ ·8U£Õ‘º¦’ê1Ç)£E§aÂßîÿO£qS—P’AKºÆJðô™±ß“|5Ùnôe1tMðáÖú ÜÿEˆŒ 8[òL;êl‚A‰ò1~¶tmSÃ'&¶KeO›gˆ­ó ·Bæíbæ"y.ˆ±ÝÏ7´=ò68°5.Örjœb:ÞSàl5 ´ /8À²<4µë«fÎLü.àãÓ¾¼DÕÏéÀ›zÓß|ŽÔ0¨ØÜñ‚0Œà ½}’®³†Ày™€mðEý ,)•WˆÑÀb"ãtâVK‚º¬á¬e7©f<®Fèé3]ùø«;,cËÇ ú]´aȦøí#u­©‚q Öé“cqM—ÿ)n)O›b‘aÅ@Äá68MÜÜœè{/œ#ûÉ!¸%é?ñ•ñZåƒÝBM*Øtex@”Æu"‘á ì Úìm S¼úkQ^97m3ýonÒM˜– a­¾%Ýêö %·˜ÞpeSZJ8tß‹z.‹š1¿:Åëæ$­½{âûð'Fêî±þÄ?£êÀ­(t˜Á¬ ¨‹<W¬ÈÛ½@ šÊ¦ ÷%Ž––W ›“™¹3ßf¡ä5ýqõÚ˜¢«pùøÜÕ ÃÈÙ~Q¦Â)=ŬŸÈ†÷<8ç\YÌQP‘‡A /›WކjáÎ BÓ…xŒüº­   u Ã51 „ÅåI4°ÖôG!9)úKð¹Ð%eÖÝ#³€xä߬‡OÑžËS*»‡šáÓ29k&lD-x Š'ôäE_dGV‚?à)SQ<dxd^ñô}ëùšH{ÖµŒÂdCð 5½\ËÏ +˜C1‡-âo`4i0û* ½ˆò]¦Ø SB¡t»Ö¥Oͦ…þŒûÞ̧ZõyF,ÚÍ)vÓ0ïÂ%¬>°„’«\ºMÐ}úAƒÈÓ Ò t«rµovôCxKý“w©Ì‘`D@¤i(U4€W•³Ð™¡ç$¤K‡s/r‚DmÂhÝ-i÷=öð-ÞÜæÆŸ*žnÔ™õåQוûÄPðrÜÝki$ØØòÙ"K[+• e•øã±DgjzÛC@c®G4?Ñ€uEÿaiú“O[¢``¦õt{ã­‰”™e‹Ðð@Ô}NAP dø“íRK¾åíÄëVÑŒq¥‰,âÖSLÈ™}‰Yóe85tY±¥Üð  ôdkDŒêŠË؃“Ú3Û,ªóßÜÙ–ûâðµŠáâÀ–—ïá99¦žMüóòyåKÉyÍœù«žž¶OLï¢Ãç[’Fg´¿0¿€Žƒáî$Sò¯Õk.(”5_ø›¡ŒT;TŠŒ“azãAÀ `ŒÀ+à<‹'1¼¯Ì/bª %ǦŸÓÙÛ&tÌ àˆUtêò UÂuw*ÖFàØŽ¶|Žxú> nÝô ˜1½Q<°tØÁ½³˜éÂï‚áõS%m"¸.:|a’!œ¶1&ïbæ0|—3Ë âÑO-z«5ý³f+•ûªšaDTsÚcˆ©½üÃ{ÓG¨þÚªëßsóG,>…wùÖ`Þ´1|ó1\Æ. ¿Nëç§¾ÁÈ1¶ùæ,ƒ†Ée(!†a!ªÎÒDp÷#ã(‚t£Ÿ#ž×ÞÄ-±ãhE}ý±Õšu…ˆkÉH”!O è“n¨r™¥â}ì‚"—ÖÈ-†\—Ó Ûȃ~Þ»UæX/Õp—òöÆéâáëÕ‰ŒÜh½ù™ßªnx<±—ä² €íÌί3Dþ/„.oÖcHps`K0Ø#6?ŸÍ:ÝŬá2;+ÂU„”ß!ÇâŽõÌ5èÝï¢]J/o¾áíz‰I\Ø»PBBQëù‰p[,ȘÛ¡ÝŬ­âé áÄ€Œ^jÚšþì­h÷üºÛéøý©5#LQ}¦c-ÊzýÝå”o=–²Bb®ªÉõ—N‹ˆÀ6®žn3‘gÐÈù 5á–/:tvcË­¹IÁX/ɵWÄWΗút@Nü 9¥£óúSЄž#*dÿvÌ=Ù6ø/.EeVä &¹à çU’áеê“EMŠÊlœòâÖbòniäŒZ9\ÿ"}>E˯&$TC“j¸¼ŒF>5Ìd£Ã± )®÷Ðúi˱_Uõ«àN1ˆ³ôŒ¤Úô¿«¸C…ME|Ñ+3€Û(Ö“oÊÚí ðâé>çA,INb‚»À¼ŒnÚ³¤±š FIƒüΆX h3êCÅ^œV7â³;4fu ÕÁÍâËÃ퇦?9ª=½Ys¬±=m~¯M×:HÃŒ„KÅ ƒÎ+_<å][fÞ´rëÉ5ÿtBIö[lhÏEª¸ sº±§0¹žù™T¼(±à§k<ópÍÔòþ7ᬋ­gðÊ! Ò /®93jY5:h(r¿XdU®AÈŒlèTQEpó¡Blp2°†(£qÚ•ŒÑˆåÛòêŸS34riY–à—n=¨7„虽”3s>,ªC/™è3³¨;ôuRQC‘áàÀ·â æQ@Á?¸w=…_l×Ý$!¹ õö £Aad¼ !n^-¼t5Š{¿)Vàmü% žõ±®§Ú Ý’ß`YZ$<$Û(>n1ܹúô½ŸyœãOëãç³éjú³.UÚ½ ’¥Ä¨£(ô¬¼h¬×í°f#†‘"óÑ•-úœd‡ž——_c}Àë/m!¾C !ųħ_*ác§â?·ŸywèÍ1?†bMn)\UUÀ•¥ ølZ<¾“¡ã§·Í+ï' 0ÔÙù8ÙJÂ3óÙCwáWEo HAdzzü·6ؾ<(ë9Ng ”=l‹Ë§r­"D'MPÄHŽLÎ,chÀñl*«o‡/OÊrjbð“¡e—…7î=˜”¬æD4Ý]‹º>YÆ­¹Q°`‰ü|jÕÌC!ZÖ¶´K|Ë‘AÐ-> Ò°™?Qþÿå*ɘrÖCÏÏ¢ýŒƒTɡ¢Sø!XÚU^ö\¤|$1»áÎøÖÝýÅ®:$—“À¨ _~U®Â«˜Æ3ôUs+ ÿ’"CÂ_óõÖÆ–+Õp%c"ˆlŠÊ Û üïèŠBaR†»išä–é7žmÊd9^ï®jÜÔàG¼úÀhÄ””P‰­Âü2àÀŒ­gÈ 6_ø œ¤e˜®™FQ*E•½ mÁG°à–»]ÍU‚” gºhÏÖÞXó*føYvÁÓ¤”9Œú?™䀕ÍÉF™oNoz ]$eš°LAÀФì;Þb˜Ûó©cD2³$ñhdô7š 1c²^cb†×åKM‡ïÚÍ4›€á@"jâã%HSr>XÀ;ßóõ±%ŸcX ùQdʰUÁ>—o¢õãèˆÓ…Áadïísj‰PÓîQè]yK‘–¯B›ê(6üð2$Dþ«¬#oaµ Ãh–Ä‹yyÉÃÖ¿:Ñ;唋Ÿ^s»üÌÀÁ ™'~©KM â|¹óŒ< G±ôÀìÝ; §¬è<1€óòÆÑd"R¸ô Õ|cÑ'obqø.cöÕË„<îiìB†‰j¸ÝBQ þ;Ïìݧ=ôT2,ðhØ¢§0ƒ¹ŒŽ ³Ú”  zÁ®›VÝ‚ÖkhË.ï¹W†6ž.="e@mZšþU ±«ÓËiĦaâ~kWw¢;rÑ Ÿ %E&Î?+â2-díçÒ©]2;*¶ì­—qw¥@ØMPãJÕÝí/vŒôÒ7,"$¾ò„Þò¹òoœyŽ—IWBÖש J $ΰÝ!Í ø3¢½ˆáT­z“Åšþ_oM,Þ”Ãù%æ¹ À†éE"Œv  eX8c†…ù‘¼xX:ŒÁ`73^ñ.ÿÞÛµ #†F„ó uc¤®·ah#%…Aõvë%,PWŸtàãl}¹¾‚~CÖAð¼bºâÌF'äÐ&Æ3¿ ×ø=S:B"ùÍ)Ì®J­q‹É¿œÇ·‹ž¢$rM˜ü•I>#À937t¡Ô[Ó#¹QxËíXžv/À!†œÓ»óÞËø|8¸Gƒ«‹é…ý³¤54(Éë’†]ôIºƒ%|•b†^•QLaíò# ™²'/~,ýþ(Å[ÿ ¿LžÙúXe”ʇW ŠSˆ³˜ÍêÕèTèWÙÖ‘cÓ¾•–e1¶;‹ù!º5« («÷N È•†.jú›†Àß•OtÙ+™Zè“£Öø ÷ Ãí”-c|÷…_¹o/™ÕŸÇyPDúÔ¡Ep(j Z2ŸCÝK؈QÛŒxiW~~sñÓyqܧççrZHRjðdÙ§v¿€™/ªTôÝ k&ÚˆO!Ny0mY^ Í­Whª•=pž6Ñâl¸]W>§hŸõ<ÂÈ$¬«š‚‹!ØR~óùL/î#Žh©mªY;XzŽn¿£·pˆ& lºtdm=Í0éî¢ÈÇ’î0¹în # ª•‹ndÍØËÜÍfô²¬9ðRÜU> ‡.½U£ðýOCÒuúð¹ò®š†$­”—.¦¬ÅößLb^/P¹¼A[àÏâû|¸?’{ìi»)j`#ñvp¸'D»ièhú7×»§ÏÍ/ u¶¨=!ºÅñ ‚Îø"l4ÁQº2 £a&}è®xð{§ u–|dº¾ Fù.z´X>Í嫈K%=šÐ…óÙU.(­ªn1/€‘&%êâ=ñœ*1ž®R̆0„ªÜºÊß “T­IèÎC5TÌfw=V¢‰'%4iCY/=g-yg4Ácn$„ ²ÑÛR;C×€Ñ0E ¦‰Hf{>·Ý;†ÁíÈ‹š0q¿5u5ý§˜fžªÓaÎÀþKÅÕì…‹ á"È?w.înµ[w2 L5·öȽ ¿µ+—|T6[˜æ†^zI³Î÷ÕƒN»¾ª±YÝÕvyÊ”ðiAy›'ˆ äTõwk,ZÜq¡’>ǵÀgÒ“p‘†>g °Ø /]XBî'CÉ‚·Vá,¾m#9âœs2/[^',®­iò³.Z…e =“8ÿ‹¢§‚MŠŒª ­{$çô8ó–ÜuF–9W%ï2…¬ˆ^g¾1Ú¹ ÈÄ‹`ÕÔ[¿ûä\U@YÓïî¯cŽŽßó¢OÒÆâ·51_*=Î<5¡&3YëVÙÆº¿«Úð·×pÑ~€oڽ涄`)3*üÕ f7u-Mÿ˜'°´ä*…„cÎIµ¿ëðùBrx»Œé„‡ŠyÓýHä«G yaSÙ3Ÿ*š1ÅÎzlXûTn›kxHBp¬9vç> 2ñ¬%içUÐ4»…AÚá-ûdãB#@µ…âLö"öNÃÏœS¥å‰sûtŸ9MâN/øj9Þ~ÒÊÓbwÑš1ú"<)ëð+€ÃÀÔ%àÖxÚ°Æ*¼ùf`uêI¢ÌÉ|C:=´ª8·ÉÛ¦1ž‘K¡.$*vrÐ%ÏÄ)„É`!Åi-Â:Ô!Œàè’_ºÄ@/ CìµVáN…:„b,š¡_1c±Ü¦n‡Ü[‡Ð%–Êav¹&>%i»¨À¾ÚcäËRÓG¸ F S–MLy’ê¼XX*‹î¦¿ ãæû±!ÊW /^"›Y.NÅkxS @8µº!CZQìâæ·ò:bA™šRGÃJIJØ)¨‘ô'*˜(C ƒ¨8ÛPf->ýQ3–õ#@#ÕYdLg%» x\™d.î]PyÚÖ?ãóI Ë‹Vb t*-ºT>ñR§šbéB?3&ƒY’®CÄk@y5ø'Æ¢„/X£/1:Y„KSLF)Œ· 8jè4åí[„+EL!Uý¨fä0)rS©þ#GX½I+¸BS#È-yú>¥XMµ²c_ä_‡¦ ]ö~"È"ì)†8ÿs7„£¼Ûè3SG;·|p•*Õ¼Ÿ™¯ˆ j=?ß9÷zz¹•(º§HÉ)bú,4Üoþ, &Èüæo¸³âźeà‚Z #‘Ìc5æuz¾ÞÇaœ¶˜£]p¬ÓÃ7¾@$úŒÇ€@jÌUM‡`ƒ@Ïâ”r Ú—«O °lô 5eáJ5(Ðe@-S`XP&~ë•g9Oà¥ÕÐäGS§‡p‘'ÖdÜMHÌKj¡©é­æ*»9 /é2HA?X†¤SC5h{µ¼èr©Ä¼>ìñŠÐ9Yk¨< |~ž%ûc:@qC+ëY3·X4­z¨@RBä2%¼cfðÒô œmÚ-XÐ0.¿"RùU¿)*âæš·Äî8¶ GŸ /ŒÚZM©( J(TßÅ çò«"ö ÁÀŽ[=kúìÓ|ƒäûzÓè#—ÛÑM .’¹aˆÔý7M5ÊèÓx0ά%U†¶Ó.ôÑÄÎ]4J |ŠWqæ#Ž›ÞUóã6Ñðcè…2¼ÑäsqñköÂÍÀ®¼ŒÊj R•n‚rÂZ :h­–ò¡DJT}€‹Ø“D£³ÂÑþ)«žLVmr¯º² î»s®ëA¸¢B§ôpfBEPÛþîÙPâÁ#¡›_.ÑÓOëT“WœgL¹\ŒÀ‡„›~ O·åqÀ×ïâ‡`6ÐÅZ[2/%ãt$[ý8ø! &å"Ãåªy\Î<.„5šfÜØ¢ÁÝ¢gE.òÖ%&(àF ¯ =V[£®ìH4}½7öü–ÈÐŽ¼S©5ýW½t[u ß ÏÐÍSlâC÷cÛC6O­´†ó•áêË1O¶ö¨deÓqn{ ®¸½4§íË!^î³k»°L¢ŽÄ¥Åçóåó"Î1j¬E‡ÇK,/D¾”¹;ù:0É<µ¦b 6 hþ• õá Y/¨ ¹ÃcM‘§`Æ9ügˆ˜jÝÔ' \:&ÍGxزÞ¢uIW†`‚I)I='ú“Ç›áÈøhÚá®óñú@™‰Ú£ŠÆ‚€Xl9ÉùÊwA*]Ô)Ê!6OÕÅeÐ$¼òþjfãžøà.ùïÈ€†÷oÜ!Â8©Æù¾©æ?G1¸ˆa"«à»" ›žË¨ µ#D)Ó[˜wCž‰Ô©$ùXïBÉZœ_Œ_Q0B†v3ãi›þU8»”®¬ç{ŠL‹dÈÓ ÜAæõYÅöÅY©ûÌG¶æïŒÇ…–OiÉå&ŒVs#ê1ŽÔ|8[á”Å^4Úx‡àÇÃùc¼€$ß52vLau …ÀÓòÕœ¹X7þžÃÇkj„WNêØÞ6aia¬t,‚˜Ç|8jLe èjH¹#;{ †ès¨|û40¡'žÔ×)ꆟ»`cÒ‡ ö.zLK¢WBkü±‘t¨­%ÎüJÎo3e®Y¦ " &¶OÖéé$=6Ê‘%FM-®a8¥ñ2”²Ð ·ÌOÈ5)²VÑ>?…Ùé•Ï~pkÚ³1]ª¤|ËÄ‘ísXÞB;€Fh<©6iÁÞj~›0M¼ »‹i4ñ:NáĂᆒÝÝÍE—Á Ûoˆ¤í…¼cA&ŒGu¥Eœ¿—» =ÓóE5ák¯‚Š‹QÅÓÈ*ù•ŸWÛ´fÈMyß^Óå±Àÿ|gB|ó‘-kô[Œ¿òZϬ‹Ë:rñù}©çá§hwDýÃÙêúŽF'Õu½|ªÜË…TÍ®ó€÷ÞËa"ÑN"üa‰òº9lL¯|ïàÆüÊ51ŒÙ´ôÖmVote">.ù\:FÊôÜSøîKÃùÔ(˜-C{n”iÅ®²ãï6§óÌN×ßœ½—w 2cZpd—”Ë´þ<72tÔü‡K%P¿LcýàGÀSüêðÂÏ)îgWu€Ê`†ç´†¸ÆpÏ  ^n BÁ˜iß³œÚ¡ä°é9S?‚g†IJ¿;Ú½t '¾êyžþéåÅY¾9Á!WV¬›cÒæ ÃR„ÌÖ y9äÔ̶:` _Í©UoA).ùÈú’§N×Ò°ºi¡Á° uvl¡0¬‚~tzû·¼ÖnÒõÒ™U#期,˜zËýð©‡÷q¹3LCfMIEm‰¢¦$FOƒŸ[D94.Á”/”?ÓK¯¨+¥œ5ÑŠŒ°Ä­æ¼”£ˆi e&Ê,ÉiÞ¥Sc:b„Fõ9*Ÿ]Å0׋N°'ðGZó(`ü½­-â]Ü¡Ùp?ð?®;‘Ú¼60V㌦y wÿ#Ìì VåÔð¤¸2÷cs;ñ>Z¥¦ÿª’–¢UÃ˦¶É&ÔLQc¯ÆL#™û:•¡>ýº(žv´º™ üÛiÕ‘Q®ŒW=§¾ÐÛ¦Zj*ªqslƒS@Á1ŒtÄb„l÷‰B1Bð­o"Í@* &kÆÁ^'9?Tô‰Kèê6'ˆ„hu;å´[öbÁögà<·C(Ïk¬ø"xû1³FnÏ •îrd›nîD©Àë|ö˜‘1AQ¢[KEE‘óÖ“À|ŠÉv o–Œ2q1¼= ÇöpQb€Vë´º†±‹oæTe9¹ª8êXBmÂp;ÌOc[Bó~;8÷Ÿ·\¤¯¼÷š×xe°YÇæ„t;Ÿ‰PV–ØrÐùæÆ^‹3ªì2èûìÞÄä845‹Ö;ö Ü,6ˆÃêÄŸó¸f[³wáÈŒ:ÄÓä¦E=g6dmîâ-Pql¾rK3Á`ÉgÓU‡¾´ÿè@Ÿ¶DG†¦ù82D¶yhM¥ÿ» ®‘.>L›óRÔÑNìjêMÿ¤:¤¬É6 C©Å æÈ©ÒY¼Y¢ úv ½¤üéXX«€‚†6ýT÷öÁÆ¢ç㉘9--kʲ­ˆn)iDœÛ 4ÖŧåâøZàPqãHZgnéW--˜òƹm~VÔ£²Î(éN°ËÌlææÞ„é‰ð-šGñg‡Ïà%¯¤ äë¨WŸ«›à|a©†9cµ5Di.Àï9‹*4Ò¥¯±ÚzwR³‚Ü2L‰†©‡0s¨^ÐUK~¥<ÕòŒ¼”nauN2„iYÈÁO•ãÃç¼íº„eRÂÔGàG#³Tû»Êéd‰`„C$ºƒ™olͼ©åµ–âÞ71­µàâÐSNJÝ03«aƒvV±EØ×„$hx $dà·~³¼MLÄ,/åE·î¦¿8ÁéÅN´Bg†+,^DÝ_Ö“ou³›â£w=**ø_èÎ PVth&8u»˜ŽRfØ~‚$‚8-¡Ó"ˆ:[WѦ»_~Ð;¨×±(‰×̲"B‰àTLAC§·e¥…ó„1øÈΤ«@»7‡àKL|”ƒØ²øšA/V‡<p¼¿l†[H•U¯G.7™*îÐníbhGÕ¹l$^G†]ð„O$áØ` ;YÜå {¢ŽfðÎâïòÙþeÖ¤Q{lû(ð+ %ûŠT‡@[ª]ª¼OÚkQFíª\¼; ÇEpê8lbºàªjïmùNÊZüÊL8º6 #¸¿sžcäL»`¬–Æ¥ŸÚ…-+bøxó.Áˆ”GPêža ¶ ŽÒmЪš>*Ïêß…ÖÃ@õá4./ÛYo¤|É3¨júÕÉ"\bÏñšñ~0OãÙ‚Æ£_€H:9<8qÊY©eèä_y¢ŸŠ M‹ÛU˜ÌT7æIkŠßú!F‰.ºóùœ2O•CttŽÕ À˨åê0` Xíë0<²ˆB ¯fö’Ûëv΂×u§g~Sœê5·åšjYfÇçG÷L¯Êë¿ýOLZ(Š×tT*Ÿ-œ Ùy52Åþ‰Mÿ(\\IéCFÅÏxíîtšÛÄ£Nàå PDˆ™7Í™Mªîˆ†ZyþM4¬šHliÏhbüÔ®ÂÖáHßbNìôwñù .!`ÛTz?êOœTK²«Lü)JvAîÂ8¨X¿bÚad Qážê> šKˆ2±Æ$ysœž/IEùjÕËŸI–sjO¹§\„ ÿ‹6ëO¿…ªá1ÎÇù…§,Ì:ÈKtaʶòÊŸ J7auHÛô&´«°;ôf]GVë¸Q†iVeShÐ9à6'rUÁ€ËÎ|öàLÎÃÍö^y'?%ÝúMÓ£øØ¸S4 ýÐt¶ ÇüúN‘Én_%˜EhHP âqQyé%lI åwçáLï¥&†÷„íMQΠ?EðDt4¥¦¿Júf”ÂUµˆ1!ºˆ‹@TÙµ«¬)1õX¼)‰íSX%AA‰Mçœ9¦ö45§Ÿ,K I8QNÍÇvÞòÓa¬ ´îD.ÂLƒå‡Ž¨ Œà`ƒ]¸œ‚sv áïž•3¤Øö –tSR©Â¥§Ì þþÔêÔ˜¬$pš·{ðø Z°Q¯cý¶<2òÂ+ .’á×AçæT¹Oƒ`³M‘2%Z€t‹Ê˜ŒÒ’‰±¼]ÆÓ£ÕFÃÖ¦Þ]’aLºùÉCvÂÿiíÂà]4÷†J=2ô¨™òЧt0"K‹bâÐÓú2\<¥æ~#ø(&7µ4ýwÿ=õ—¿v€KÐb6M€éhSãÁþÂ$T<.Êg™ˆ]Ym-bF ê½ÝßÑŒJ ãÔ“¥Í† ¯[ú­°ë°C=¶ù·ÂÖ¢` “‘T1â;8髱 ÆuQ½Êi8D¸×<ƒÕ™CÉRI6ñ{e€3SÍ"CØxuð,Q¨‡Ëw°FW±üÁø«øª@.ÝQ÷ªxÜÅ¡—Ã5©xs™ˆÁt˜g4l±þË¢e:0-oÆÇÑ Ftì(RH|h c‹Žq]„1ªfè\—×D9ð•­z¡Te~.ÜM8,Àר]Á†ƒTI5¾q¥ˆ£™Ú< V~P»Â¶ú4YE©<(}ngYÑcïÕàÓçØšrÛ@ÖGKÙû¦ÿ'_"š5Ìnan] 3ˆ´ ¾k.²Û81,c©êkª&týX–_Aê‰*æÑm§§¹ÓóvÉN”Ê cÙ4´Kr¢Ÿ™(Ñ3q†TB¢G½ >Á¦{Šf…Bîé×WЈÐCB? ›³Ý™4Ti,Ëéˆ~‹9…¹?Ç©U2~ Èm)H6]Œ’¢l~³4ïê`Ä–ª 2Eƒ78¤ôت–~í«]/]ºòP¨º÷~,Éì¼½yŠŸÞ†)S§Ñ”‘GNJ5löJÄÃ0â5W•:î9ËAû*F•“6ƒNГxNœ^ó· 5‹»:Å·UÓúòæš”Œa}Ê¡KÕXšRÌŽ„£[¾gZƒbÐöבÌA°:T0N/Þ¥¡Öô'Ûcàr‡-3ÐÅK—ÛY5®xærúªl•¡òº î ÓÚ²Ïð÷BZR1¾—))´úhìœÂsíRÙ8#Ź ÷Ô¸ Nx>ñ%XÐ…°Á’M§ð5¡Ç¦`€Èü&L£ iÓÐS\÷P(íFf2»`NÞzŽ!ƒÑx´är$ƒ§IC … .¿OGÔ¢q|„ˆfKîT×Û!úþNÑQ‰,í4’›„ž;#1±na°åK·N#)8DXsÉSÍ`îÖŸp Y5X§ÌÁYÆÕsý¼·Sò˜=¿…d¬däÁ×iÍ EÖˆ а]ÜžÉÀÀÑ9F5>uË|+ Ú:Do> ‘KFh @å‡à³0”þÈ£6BO8Dl Îß‘!…»‚¦w:mMÿf¼WYe›Å2ô^³þÐ#±á¸è’;Òí(&dÊÍ}Rt~[Ã%ÄF’ÊÛÛkwŒ1Q‰i¡$W÷!6Ïá³¢ÚWÑ>AÓµæï® ­-–5+ÏÆúN¾ƒ±S›˜˜Ü´[Áò¡¦ÖÐþæâ*_^š—œÖOë‰r 3‘JM!Cœj`43Ì£!”ž¼½‘˽æ ÔT‡E‡>&ñ,@ÐCԴ߸Ó]·7{yÔÀ»,™îÈŒešS}ZË»žœÄ8,ØÆ(ݺ æpø\™aÜN°y#_‹b,2NÔK¾Q,Èqp §}šÞPRØïàDvD¾B&ʆ'‰Í{¹é?½¨ ç2¸˜d{UÑ>˜ØWq›&]×Å<ª­§ƒ¼„.°=DBLu•Výžf A˜Žêºg 9ÅB y ¿’¾@³k€cKHˆ ø戜í‘OoØÃi÷*æSñVüÆî– œ6\¡lˆF#Ø=²Ó'‘òüÀ¬Ê0:ÈU¯K…ˆØ9ÄÁ ±=2ùS™OÑ?ÁA¨F´óö9GqJhyÕ›ƒòp`‰L ï„K=—â"|rèØK¡Ì?è¹§ßô"Æ^£?ˆßÝÓtœ³¹„6P^W7OBbƒ‰Ì"é“›ý6ÚÿÕ– Mà\˜—KÊU¥(j!LE/aÑ™ÒrüžQu–е>ëƒì¾8XEÛq3!ÕŠãà4²;…n EOÂ-Šp‹  Èˆ˜62Ÿ7ê¨ÃQñIåd0Ñ[xð" EÑtçB^¥Ü€Ãß ½c§âka:Jò„¡xÏåD0˜Úµ eyÏ“äÊM¿y9|„Ü”·ÙH»¶œDwyɳ¼„£§O;‚$©×7ìçË`ÊòÔ›¹¢YuxI1üä£ÿ?A-ç¶Ä@qÎ,¤¨£¼º‘=s ¼žI—á=Ð}¦ñäð«‚¾P×GCo¡:§žÄÀœ+ˆÓè0ñæü S¯M؆WUÞ,ñ‰ò*£2âv]¹¹k ÇᬂNÅ•oE&˜Á¥½a‘Uj¦2~_ iGáÏj.K|©i½>Gzð3|…'T{ÂÀÈŒ©Õ“óRÆ• Y8*”Š‘€\ÎW‹QãÒi›ZÔšþ’‘³¦÷ Œzºt[]›SVÈ,`£ÌI/^Sƒ» Æ™µˆ«Pû²Õг#z¨‹jRpĸÈH~sà¡íx *Éšó‹9³°-+FyÐqåúéò9 ¡‰úºkê“Yz¤Öœ±ÑÁç¢øÁ± yMw_¸šHBh—Q¯N19æ% §,@ž.# 1ŸZ̆¨©eÎö¯~zuâ” JÉåàx«bs•ÜA-iÌŽŠ ä7’<+é60 †l1÷)F˜MÁ}›ù¾Bʽêôð0rLÃÈeàm:5Üdú.œ (`‘ÀJ?4»‰þÔÅ‘ä 3.nËwsK”¬›™k¥œ†–lþÖqPïb:Óœ.7£§V{¥eVßï\Œ$³°­|xxøgQØÜº=äés-~&jÿ]€MGV¨Ã:€5_yMV¦pülK›Íu$k"°øWž HSaç].06_'î¼e¬"Ä3_}…Þ Ur šœ‹J͹ï#¡åÉE—zd„„òû®™•+aw †ÑR^E—QX­A’uHÉÍÛ¦eFr ¥¢tª&a–‰ Nõy3ïn±‡„„ŒéòÓó½áî[k+V#ÄùOeÄ#µ‡LœXÌ;VW²›YC˜ÃHŒ %*òrü4›§D—/…ÝÝô'A2ÙŒ»ŸwøÂD'9ü—bØÔ)zÅOÕÕpÛpQ!Í À—ÓÊÅeÄþxðãQ vbT3Hns±/9*¶Qe¿2€¡óF«uçÒ”¨¤)nZ.I©j°Å¯sc.œ†ÿ =z(½—NÓ‚qÜA:]NKQÕ‚Çÿ ¿ÒõÅg%ú‹jæ,~¢ˆ½Ýš„êÈPªN?c¢Ó‚|Ig‚¼Ôõ}ÀX…ù—p•‘"P]" Âs˜¥ Ñ©?žÂtyQÏüÎ<-þœ†3j†ó§è¡ƒþ4ƒL'¸…M¾¯] daTVÍŸb‹—úöd­ìI(0^*‡Èø³—7,~…´Ä!`Ao¹N€IDATñ¢·Ccަ±”&·õ”òS`-”ªìg¬“éãÌfïú[i` Þ[BN丸á|žU°Æ^ÑѶ<§n³©ð#Ÿ^~ÌèC»ô#e¹ £{&¹Àv4~š—Zµð´ùM躢À°' -GB&±Ø#c¹­°»õ§¤|]`¼P¢#Žï²‰-Á?ázsÑ–3b……ÏÜ]Z7›ðºCÁÄ'©£ß°ð< H#gÂ}j±bp*~ððšîÆ%8#ƒ,*OšžÁnñIµøçKÜtùeÌ{Wjbr˜e„²aq(=}2Ž}õÉxû$dVsŒ1#c4ÈÑbÈr£ZŸ1%îEDä…+]Ú’ÃB ÿÜ p#|›±_ÃïviSµe7}¨¢¾|r$J@ýœnE“8váWÐéz®Ñ™Co™:Ÿ|§ÅnÁ¼ÜÅTÓ?ç‹í¢·'Ñ&ì"?¨–\ÜÑì‰Y«ÕÐ!ñ¯ ÿzצátWRÞ CÚML9_s9aeÀ²@ÝÇM2]N]ã…6& åÜ«A[þýY ¨ás‘c¶-Áéô!â/ç/Q—…²˜ ¤JÈ“ÇoHi<ܘ#W q$Ðy:$£NdNdsšÖüD ÉñÌ+ŒŠ½»,*Õùí{Ââû‡@/Ç”&8-¾„II´ ‡˜æCúZ†ÜC¨ª©…´,ç™ y 2O Îbtª|g[âSM‚§ëdBbKÎ ÁiWYÆ0/ˆã¬fÉá ”®#r³Œ³äÁ¿£âÃcêÕ;’ùÒLŸC<Š–¸‚ŸZUœBšË[xœzKº›þ//Í©n­žŒRé=r"™>Sȇ4“¸l"Z˜‡€ƒ’–QdpÞÞB¯<9àá“ì¤XRÓr²™nDaO½êtH héÍž?½‡HátÁ •N/ò`l­éìvë6¡¹ c•îáZ¨Ëμ†%!-ßpm]:Õè*#ª#à\Âá•V#jÕÿ:IÆg.ÞXTÒ±Ö<ƒ*¿:U¾ÍÃO¹Ëc’–¿ÜuqˆˆÉ`"Л#Î]89aÅL&SV’.KwÁü½;ha C÷áÌļhP?}uwmª‘7õ¿•W‚( Y9޶$ÃÞ°Ä)ñ×í9Äôìía2^Ç y'bôU¡D›/ÿãÙô,n®G†» :8ÃD/ë7ÉPT<Å[gøªKíQ®dœn|Ð XüÚH½ØB´©.Ÿy?µ…GøL «&RnlâÕ w8áÐq6¡*»…yv1͈}Êó.;6ð¡ŠÂñRù²BÞùÝl]å¹*ÇúòÔźzx‰CJªVÑ›ˆpJ¶=“fRIáB}Á^nÍV·çf¨ç¦ÇÉ^ä¼ 8èx”g5ºj8Ç}ú<ûÃv#NÂ;^éùº3‡¯ðLbNÍ*Ì^Üžíb¹dsà\ãJoûAGJ¼fP!.²7LfHAÑb|jä¼A9b’Î*œ¥·JóWÃÐ`•YF†ƒ·A1ïGNôNh±2cèæ‹ 0üW¡Ïˆâ÷-TøK€cbR ž_¹)Vî¹~ÕÔhú[& %€9\)¬bªn¼ØUtˆŸ&Ùð¢ÐAѽó•ÂUÚò‘BÙ¡*ëBüŠIrW‡+;ºÆÐƒ: ’üØ |#à$߀èoÑUöGÈö9ó|Å'ðTˇ*1E"o,ˆ+±[¸„GK%uѨz)ªö²ÖZõÕ×½p¦@´K˜Æ!ªrj¨„Õ¢ piÞ?Ï GÄ¡'uuˬ«¼m^‚Fºùí¢dêãd¼òäib~6¤— &—jƒu9˜N›²òlÎÅ`\ô>pÄfð £mïÿÈCâéÑÚ+7‰~y·ÁÄ)™R—`ÏÄ´sUÓË$’û2£Ç¨P#,ø3ñAˆmäQA®v‰é—ð€'!3Ї‚—·üñàeZ<&¹^N7Î< à2K(  ·'e”åªìÄ˃[³à‹"Bâ§Œ¾‘¦—þí ØÜð±N§CxØ…'û"H®$½¸]~x« „P3z4 ž‘3E›nϸzùñƒ[4cV6±K9½.½… 9R^pð‘®ðã±EN— ‘Ö3h×Wgclh(æH‡og^{f^!QZý+¯Úüæ» r›¦ÿ\¾úEÇC¡É¤FÄ¢ÿ/¯¡¦ù+ʈe?€_pO³YèÞø\b@XóZ}òá`åÐo‘Æ":bN´õØÖ õärL.¨Üð•º?‘¸b)óÁÈìàMtCê5í¡ô¸IÔÜÁh¹33dœ+½mƒÙØ*@T|‹/¬q–iúkÆÔ™Ä•%ÓU¦­’&›ScÄE<$™Ûô¤£RDoÿôªSЋ‡B`‘=ÄÄ——Ç8àzOsoêÒAoE ðF;2¥ä+H-—ܰÝäŠbyPU6àQÓUÛ0J„Ã’VØø®…³ñ)lžiŒ!eÏe92dàèOYQ æiÈRjðäþXJL¤Žÿl-Xà›ÏÝM€iT©•\c… Éɉvnq.U.=˜¶/¹Ý% I0>×<ÅKt]–áÓXDs®ÒUθ5¤Ç­0Y-Í_÷ã‰}5›nÉ™á⬪ì߆HÒ¿éQ€ã ¾½•ã÷#—,¨ŠÁÚ³î_o· ó”HWÞGMº~ò韭‰ñÀÔ :ŒMš¾ºÜ*'ƒ+Â?©‹aL.Þ$óñç‹hƒOšÆ×“ Ë|Ÿ.„½œþøê¼"cåð”^Ìc‰œù°J¸ àT][tv—·ÒLJpÔ|»ðN9Åh(¤š àžZÊ… $R,ÁÀ?8ÿ«ØÈÉ‹Áz1´k‰¹DÏNáa+3à|Ú¡ð¡>„¹üâ7Èуî0(º‡,Þ÷Ì-EA» Â.%N1çd3M¨Lf ”tŠKx+kˆÉÕÊë¹pŒ¼ŒAãx Å™ÎÞª}A#äc iq7Š"ŽæáÌÄ[!7©±­·îG~ÕšþÝÛçÎ˽ó‚.z^éó&Žî†vÊÍ•Yï‘K í0ÄBZÄK@Ó,1L‚&ø:ºé™×(•Læð§Ò»ß|ªƒW³ØÁ#pånËü>631–N0Œña”€@L Èé‹sblœ¡ò‡%å«ó"N¯5•^DaP¶TœUKvp¢Tâ]bÀv >2EŒ~ÿ׋K›v1ù#J9{"x‘ˆŸVžDÁ¹ÜÄD_§ À ³g$XýÔ'óŒaiý™UJôÌ›ïBf#âÁ‘ˆ±,@À°‡‹ž:ƒ‹Áq kRÌ6‘ô²º°Ä¿´YÙÈÐ4ÖÈŒãk„hµ±}›Ypz“g‘w gf¨_iFjÈ/@ÄÈ¥¡ÃeP ݤ—(š /Mu¬;óü/…\Ô ‚.nõ-,‹äô:Ò7\YC´啯Ȅ‘W qÉ$D ·KñÈ?Îonmj"º ‡°+W¢è°œJˆÃE_sÛ_B s«ëí×Î2¬žò™mºíÏY9QËSÕ}<ÂX VBÓñ*íÎC6ÚI5H¢‡ ™Ù®²qEö‹t×°êr>¶Æ+3ˆ'3½9Hïü·—O¬(Z ¤`6]â-Âxm˪4Laà"0 <¾‰1C²›.óaºqx”™ùæë tÁá„„<Z:Îç¡SwG»ÔóŠ} '-gûê# æ’OR¢×SæíhKkÆ"ô'Èî¨.#{ÂTùF¨‚ûb´õ`ïL—òH 9ÿ±0Åkøå B¼Þôb\~üõµÓ ßéX û_ñ–iÚmyB‘0Ÿ(/¦M%°hù0Nc#[,œXŒM1weñÕ%Åb¦ [1Øÿµ`* "ë¸b$\U0цWOY¤jOðc¬¹OaPö2ik›3”™›áöÆŒ…z âuqå¡(GV‚6°ÊÂfsª/]ž±P€*iï%D)5A ¹SežÏȵƒfäbO¸Zp› ·2Ñò2ÊPÕ4€Øíuˆ%M×SÎSÑ-±?ùŸà*uþnT¬³€qÙŠn‰Ê7 ¾Ð„ÕjS syf$ÌÁ`€ 6äðØü v=wÈâèWš9Mi@¯¦?ùUÂ&®ÇøTq)E¹Àº*àŸ‚·úÊXEÛ.Nø-DÜò‘§SgažÈ,ù¼ÌªbiÅã™PŒ2:ßÂÒŠñ•ñˆ¨^OÇe\Ô»Q|à<Ƥ`îW+S|¯¼ @ ‡€™Jf4óñ×Ði&õQÚÈéæc g{fgO:/ß(Hc ËT¸ç,BìÚÎLò§bΤ+ó$–î3uŵåÇ¿·¹K…=Óž›óŠé°‰ ³çèŸ@`Á•‘QŒ\§63)ð÷_x.àN 3èa› ‡Ñ}þ”eøÁ€î\~«lË® iô:ü€¶4…ËåýXO©æ]*¦uÒQh¹k­Ñ;Òv$lÕ,‰îCzqžÊ0Ûȉ¾Mÿ(ä¡a/ ¼+=Åh™á+ 3«:ä,²ž-™Øf‡NínZ•‘H,®ˆ•EÒ]ò›K.‹Û%d±ôIq?•#öŸÏv··ƒ=/:h(œÕ8þòÚ <39yºõFÇùôiQú€šªTͲŒ‡·É&Ø^¿êð!CÅÿ™f˜6T˜Åi8'/ýpÒÑx+Í\(=cØúæðK/ôô»Ê´|ñ}È¿C@(•¬Ý§h ‚ãÙI™ƒ’ÿ> ÚTKˆž¡n•4e ¢£Sø:/ÙµàC妯¯®Gtx¿êb@Lwø®^Íoyß½–_Ö^l½C?„,N$èSÓÐËŒ²Æíb°øðiŽï#é8iðâD§c㹞d ²·»„BØ®ÒøâRRÕ+Oß‘Ee üG$]L$¨c Ž'œ™V1+  ?†2ëújZ‡Cñžk Ñ\d”·»SŠ6 ‰£?BLÚØUôH¼Œ®f8öUpIÍç+~ÂÅšI±DÅ‚¿Ýå2U÷tAD³'É´)áùŽï„U¼n0– …¦ÿTkç¶JŽ~4Ž…§ó¶ó!zx¯ÀÅÛ4ôµ×lqò¨sIOñ^x)†‹2_‘à{?¢@Vž15ªÜžÍ¿Åç=­]Î :ÉáÿKj½ú¾¿þ†SeÉE '\Âlô˜aÍM¶µd·dˆ–%%B=ïnN_÷\XŠlÓXoÑqi±¬ÐUv—~l“@v8á‡1͈ÿâÌl+²€Ý¡%¼x‡Ví‰ 1ý3ý‘}zwøkÅõ‡$p“—”)}ãkÒ ˆ‚–ÇÎÜE 3Vß&ÚîÍß^Oœƒù’Ô›þ"<Ãw 3Ìq;Å10>ºüdVW’Ð}+e;g`A<¢qNaï.v[¯¹H±êBXIDΞü3ÜN•§u5_WÍÂ8„Pb¢Ã½ ¬°qç¬Jŵš c°ð ä‘«# 1^ss!¸bdt@m,|ýƒ½õJœÓ©sGžáC £zÓ".Æñ9ݘÏrs‰MC;,ýRçSÿÒxƒ43üÓ˜†Ó-?}ï—Ph0«§ ç·ÜP|Þ-ÜrÖÜVËc]ÄÛ]Ý  ‹PЧ®þyÎòžþv?o¨L´kBT©–ÇV*ª/ª&'®ÇUЩ)÷ LT!Êceåh=zøä\Aïa°X–`鿪ÆÔ´yzÕ¥R ô qnîðRÉ×xÕž|ãêøö ó%¨“傺êLšÈ-L?ùiðȦ¥È,À!fÊw¬¨„#Ëe$‚pÁ}QÁ.F{‡£ä©šÉr;4:â<þ6•`ôñ$¦£kÁA5YžÑÝ(ñv•n-¾ûÌßÇ&N+HX§‚…¿©$W¸Û ¥ "u†"7h¢O£ÆŠÝ¨§Ê¦ûšn½Õõ3Ñ´iA‚EËp Âåñ“i2ŸF&Uv›Oâð…\…lçtÁÒòü‡„M¦ƒÐ)!0a Í·°óÖš«äáÊç…h½Ør!ð‘˜Î,5ýîCI7sª å¢/6ó½J Ha€3@äLÃù"æª`85<>Þý‘ìË)Ë»«¹´¸üïÛ*³{ÞDÓÿ­®Bû+Õ)Ö6$Ò#êÓéos›ò%¤2‘àÀ'@F3 cO&Ú Ñ9oZ3¥)sx‘‡àñ­‘ñ’u–)_!ï— èâŒÁatÑé&}ÿ ^†PñŒ£Õ…3.dŽÛé0¦^·‰À‡€£: ?„¡ÁɸAõaAßhRåášÇ:Mˆ)’ 4<%,½}‚bŠú¿gjË«‡;X#«BüRâDJ¨6}…›:ƒ#X–œq«ÏÍ‘C«`Äë.¹EÍœ‹üèÐÌ ÚÝSn;ú5åk‡Eˆ­)~ÀO—Âøéd]@´u—ïF ¡ñÌ܈âéò`èE8( 0€cß;³2„¯¨Ë›˜È;ŒÎS{Ó@f>dóVev!ËAÚÄÌåE˜\0-’Õµæ²ß|¾] |B?[ìz OópÈl¾ï#Sð Ÿ<§ƒô\âm¶ÛÇÅ¢’ì0t·áî•íºŸb¦åÐÐË(Mý6HQ<Ïâ¤Tm„ׄ_ctQNÑ #çCºuù@|—ªþ&% eƒ”;|®žq´Îér_?Ö8isu#ñ9NƒÄ4PTüŽË?÷-ÔeéÐ)h’ ¶Ð¡|r < -Û'CÁ´i7|e½–#ÑmÄX†p2–l„bÖ`XelNÂ1ÛDœuä›À^›‰ôN°<+µ5€7P¹Áš¹B™’òÜŠ@„Ê‘gö´¦¤¨)¢Òâ¬SìÅÛ‚‚޵ ±4eUáùÑçØЉ›ÊvæWl¾¸¡ò:Œg_ƒA¶ì À¹D+9N÷rª`øŸ*Äûù P‘çAnT¾ØÅ½LÔ"Ø\~3· OFÝõüvV#]+&*F&ÆŸ6Çjú£p8¹œ¢ÐId"U‹¡J›˜Ï£ê6® q¥ÁÓ„”ö# ¶씉×&æÆTÇ` d±gè¦b¿Mg«—ÿÈ-ÊüÖf ðŒ+ÏÝÒ¼×À…à ’œy®¿,áE¿‚ßnº„ ùp (Œƒ\ãYyÕ9ŒWQVo˜¢íî  ë–Ê®“ÿ¶T©=7mÔæoz©e–TKmêÎ'—¸ßPÑ*,< Õ£±UšQæÔD NÏ@ Fžñ¦áåX„YÙ)pËNU­Wií¦*"x†kÑp+¼GÛ)ùjH”Ù†3ß:%~Ä1Ï ?#¦CWÀ OÝ ¾d?„G"¢aª÷®¡03§LÚYùï&f#•j¢JG™à» §é;Ã%èCÑJ‘c³Ð¦¿8--Sˆ.]1ú‘‡ÌØ¥]€Yôc9¡€ø°6Úò•ô\Eñ]ó7ߊ ]™V†\è®HçX<Èl( ûóuõ4ÅÐÉ s`fŠVä:_Ÿ!»VËEA4droQ‰ '*×Ô;lÑGfi£5g¤Äåé>·p`.Ê“Ëþ]¾‘_yÀPÂÑ·äÓ±õ`§)Ÿ(‰ø&5õw¸MWª4@ÑÓöv²» ^›´ì4éa¼|’–d¸˜yq¾]bÒÒâÌ üs°Í ¹-ÕàpŽÑ—¢÷ñaräæúÕØ6¯l^”¢§$w8ÈÑÚ¬R32µàÄÓ/—^z"•–ûbËçA‰pj¸ðÜò*É¥cÌ ø ”õ, $Ek0[–œúÕlú“§¹«éÐS[sÕ¨%O16¢Í•atm º­u{°š®„ ©Äp°{žXX>@–mLX4Xr¡ª‚ã˜íüƒ‚›w¹÷ÜŒ-óÚJ‹Ÿ<Q»£?.‚(¶"á6ЉyN’ êÈøS/„æRãQcRÕÍLÊ[¢'OM|”˜Xbðq¹n&áž4S®Df†3MFYµ×øt†e]ùçEÀ鹘`Ç6“š'Õáy/ÕÈ—(@Ž,Ü6'ìÅ£þg<^‰ŒA}riÓ©¯š!Øo±^AîDFвT®¾øèбú¡‘k¢:œÿLÿë‚°µf ; ¼á;QŒCÝbDp†Ãà™ÃìÄ:÷©»”%¤à3ÀXT±«0þXÕ, ºœUÂQ“µ»ÔôÏI´‰EC²(1ŒÄ÷RuïËÆcæd”EÏÙæ-—Çt Iýaæu683 œ„;KɧÙXO¶5HôPUçÐ#ØL5`‹ïxí,µrÜ¥‹=D aGH?*uº:“J¶øS”m8ô¢¹DxŒPÀÜÀ#I*ÿã–[ó¨Uø–U*ïaŒW†ÆæŒgýÓé{9åO‡&$L·nýÜÉ;ßê­'KÀ1³xXò(‰Ï«iSqV2?¨<“Pþº@d,Éü27é9°.`T”šCÓEz‹î<̰©Rß=Ûל¾¸1–‘ÜéÕX½ö8å<¬ªe¬_ÖW Èc kw ëÔ[1üãW1Øõt$(+w2G2<›Åȼ:êÉ Mÿ’)E¤¸¼œÂèc°®uME¬ é`QÕšô{§ÓvúïÀ\¡sÂm‡›rN_tyzªg}§ùkÑÕ¦–¤[¹6ĦXƒe­Å Ü¡j•µ<á P êJ IÖÐ?Ƭ/_kœÃ¤ô“BÒ„1(˜0ÖŠÞ4}MiOêM3¢_gŸRPöQT©¸ìâ„€£ e š÷D“³•ºæBÙ0õ§Nn²0© ƒh›.AWqíNÁ± Ð-*y1nç/¯<PcÓ*bžm™*|„=W1AágÈáÐrÕÙשæ)¹Ã¯–Ú'Ue•YW$ç5®î¸ªÛ)€çW4•%[BU6ô¬W¡‰è‚¥]T¯ËX3“‚á`â|yúdgê ™UlHµô@š~ íX .Œ6^yF!PŠÃKº·U&±ý^þ̘òPY©÷sžd0!¡ÙÆ=nÙÊÆ‚œ™ÐÅØ¶±UO•ïó. j±ç„ŽÆ¸wb5ëhñ‘¡g5ò2òwO0ŽO ŸOÆF¾kg×S+üÃ×{Ìnz}Ÿ¹6šzÓÿT¡’M ½ÀÛø¦²ÉäzeŽ”N^9W¯ýz˜~à+ÌÂ]Tr…ª·HgÁ¦èï2^êTZ£S+¢ÙˆoêâÎ9)äGeZ‰ç¤Ð5rä5¤¶§ðÙ¡Ö]TÓð<ª©õ²BÎvѨónÇùS î.Þ$¬µ-O–!te±;ñ3OOÆ¢Õ4ExޱiBµÇOæ+ ³H»ˆ«ÏÍ\‹Ãô©§-:ÍKò•%7'lÂi°®r ðð]` `ÕØ[}ÎG6‚o"lSܬʸ+rÜd{r0—Ü ÈÞ |† Sšg ï¿ %GðÒ¥´šoúkúˆ´LÍ奎Oüð0ï鄞GŠÕŽlEì-›šÝ[v Ø^RuÂú‹#=)ÂT°‹`2¯ª‡W^æ3?ùi‚˜µæFµy GwÕ>DÛ/Š€‚‡ºwd±X׌ì\ƒÐ?õN¿â°¾ÄZ9ô¾Ñ23àJÈo3œ }©N¬Ø‘eðâ7ŠqMx+@.^êXGL)`î&™8[y¸,ç¡#Ĥ¦ò4ãðTÑ|ŸÒåœcàGØv6ý[nÀ8·÷L1ä“”R0Ë1¤…4:0!d^ZÜÆîG¦àÖ¸ –ß]Xœºs©Â™ùî´a;½&­övü,j|± Î”K+èpÙ.†Ó LzRÖÃ5òí GIT4Š™«˜Ÿ¸š[HŒ|ù+˜ü<[^Q<í¢ #z](½F¦¼ý±|¤"MqúuK9OkÌ9ðÞ.¦ Ñ\}zÁ¶šwž¼0ÎKUþT1„Ïê…I ëɘ›^7¯\苆Á_,ÍN•“îîœ.²¦MÌÓ ?ì¶ÍT)H^„¬èÏ3Óú9U—v‘Ƴ;k$‡ÂžùR‘{âJÍ®ˆDK¸|q^8“ä\ÏÅ»¢\[Ô3é}råê§í w ìÑ¢¼ÛÀï^bÊ@Jëšþb´‹ºø ½lŒ\‚Äš%·à C³ *Ïô6)…w¹ºÀ1‹Ë|ebƒ»/ÃÀ«Usç ¤½§` œª‘EÊðËâ$åÎK´úUÙšMׯ‘ˆ~ô6áiO‹4“.6\ñý—SQOÝ=€¡©C/!wžyýu²M"(|TýöH¹Ë.hº€¯±0‚粋ášl5ªDä(‹>N97bÞlL¤ê ‰ÒÑú«Y‚MÏ©>w&¤lczñÓoî‘gÞ)pÛ`|üšÏ±ô"†Ëál0„P‡Ò„Xrfqsf°:3xZÕ×Ü@:F˜uF]¼¥v° £*t3Vwš* «Iš„àÂin1šæÌ-MÞâDxC³yåzƒzÿôã.£šþ鱨jVéDÈ3†ÊD6]ñÏÓx£É Øréº1¯n¢â^¼-öô¼™Žô#{kÖ²wÞRÏ-\† ¢šùßÛˆëêž*yUðȪ¯P‚OŸÊZ/ªÒ8á«ývå+¹,ÚÀðªJ¦úÁ·c†1¸C!å @ROkmÍ;Žöblµ†ƒ^lë-7)åVz÷+Y}e‘­}…“3曋1nJž¿»¹Ô.‰bÓ¥S½#˜‹¯Ç!þn>Y;zj2pû-jxàãÍŽS¸ t#²Žpw¢kÿœªÛ1~csö¸©y|XPkw5ÃÄ6¶>2ŠY”/…blî·¦3‘i †)zÚ¸²îœ)ÂH ²[„){4nk–2I«Aã°¤; ™3 “ 7¨Ë«­ ¿ä‚Õô_ƒ:¢Möq¬=Íœ ~û*&¬^¹k²ÙâÓó-n¤#Üy°t|"#EÁ¥.z„#$»€pC-ƒF$š/ÿ}¹è×ôWÀ4â›1`¢æ÷B "㈠ú´ ¨¼i™m¿<Î‘èø’ìF`Øuëó( 8•rdyp;µÅ;§@AH,HEO?'è,› QôÝ©ºÅQ<%ÉóáŠ@³ºËËñ’¡)²Ÿ5³§ÃÏš JTKÚ4î’´–)f⢆ïRÙ`e)?›·\3)¦hbnhÚcXü­–$6†¡–0ó°ŒaÂ}%¬`ÒÆáó«t¿ è#8 |&s-oæ.¨pÝ×ìÁKP®kÊ@ìÅ.é•\ÂB ž¡Åˆ* ¹x.Cô¦sDŠÇ8NÝMÿ.¹VÁ¸"kÚ:ÅFÜnÆKÅy12Òa|HÛäzJúó}>• ‚FB—w;b"‚ ¸/7Oÿ4UÔ\÷# ¦w¤ÿ»€}¢qòö‹¼ôùÔhl;N¼üî¿Ëe¨}a'Æ+\DÞ¢<-£’vÙéíA²Ãò6$EJ7 .Ñ,¥œ&%Ç™>á®|.§`"¢X”CC¸üRÛÆßy3A¹›Å7®ByV0­2£!»+—Iå“&«C®L¿ý\¹ ­Sr!”Û°èÔï.ï°‚G3xIÎp‹ÇáôrAi¬fö€æóIOç Ž+ŽŽCúFÕ ,GOP'¯&w¸…@_l(ØÑîDûÚs…U(/[‰·Q F()¢7dôKWÓ_³6ïÞàÔ¤ùà·ôêKÍö4hÄ22bO] RІ0E…†S8ÉE÷—j6x©¤‹FÚªaõ¦™ˆ-ŽmÂΧÿ25’*³ïÜÁ9Ì ÏÖÇëXNí8 ¸ëCÕ¥Ý2`ýxäBVϤò"å+…´ª†HRe‹m|D©Ì»«ôZ„Wa¼Æ¼RA4‘­ìLj“ÂÖï ‘•Æó™áÚXÂ1¨°ÈVÁÞq&ÂüynâÔüòðá ¡–F/ßÞs£IeBãXöFñ2‹rÞ3H.¶'ã:ë ¥ÚÌÊœŠÊŸAn¤Þ@ë›ðê%(ôùò1Ç:)òq†)é¥ WÑRpŒ« Eüoäïoás¡_ø6µOuMq|Ü}*‘FÕ½¸¹Ä8MLIãp]Åõux€ñÒ÷<­ÊÃÃûñúBûUÏ—³dn§æhíIû/}ý’7AÇÁÞŒïZE'  Ž;#o¦Ö\x¥\ÀcaÓ!:îeU)e$ÏX§/ 2ÍË­$h/,¡g PC!º † o‰E…ŠàƒQ+Þ…€IÓo,ÞìOA7‹õÛá?eƒËvƒ®ãî‡h‡1e‰”µ” ]-·z,n4r¼¿¡[E’‰•¢ªñCS?2Äâa¸dê}?À­g)»'rÌ@ô úÎf—@¦0ÖD ŒRFäŒQ¦ìqšÒyu|FvÁ¿°NëÒNäÅãÃãßáC\yGüïÃNWáŸá;&0îË…+°î8Z´?<(œ™ ½éoy±ˆ2j²;zyÕ¡JIEu™Ÿ!?DÝõQ×KÐ5FòÖ$¨B8š¬ªþæp¨ù$HºÉÿîØ4‰Í$HX ·—-ÅŠ2gïý40©d¤Ø»¯àpß*áð³Åæs8x†7Çæ×œ¢ UKÍzÍO‰žK8ÿP#¾©úTˆu_5éèÈy˜Ÿ•$Ö@M³ Üñ2úþ‘…Ú¥$³[¾é(qN7“Abšï²ÄB±ÐÑœ„Fm÷¹„ÃQyìp‚ЯF¾ ŸÊ¡ÍÂݯ¹zâ“Pâ3šÃ&¼™Í@®0'ƒjl¢@“‡ÝýSØV”" T*v”H·gÂÛÊÍÿûå{dèMu´ÊÃAþ¤Ò±é9‘MÃEK8ti SÐèSD±éãsnWÍg§†Â醧6lå‘0Ra¸ïÝ7¤D4~ñ€«xThçQöÜ‚¨K´œ¢_»¸Ù鞆«˜ÝÃ$ bqw: ú[èÎ I"~‰â0  0ÎÓápÄ]å"„:SÖ¡œoTÜ|Ãê{NÊJF=„…¡ 8"1}{´’C—\>“?ÂbŠn ÅS8 Ž Ù…sÏ)´ä lO¬àgþsqåM¦Bí6-¦p|H—qÁ½]ØAò¹•áÇÏzÖ[Gn›¢&APS>Ó"•Bk:ŒD]ÞàÓq¨ìBŽ]§)÷k^$쮜66.#öi´‰NØø%ñ¯ÏîPZ3“>’‡Ç £IU‘?v ½s… ½2»€Yœ·–¦¿<ΘíQ-ßNO§\¤ùS·~ÔÛËÉ6yá—ŸÇUÀRôB1ÂX²·¼†Ó ¯³¹ÔÀf™o‹×óâ1Ť!v´I8 ël ó Œú]qá×úäŽä|³zdè*úÆß6ó:›Ï‹Ÿwž‡ŠÕ‹wæ$låš‚P~7ðÍ¢DYÔõÑ;Ï‚Û9 ¢¨aì1/I*.æ-ˆÅ;zé“å%à­§KÐíeZ£IxÎq·‡³A¨¸Ø]ù<‘O”’žl/½K5ùpf.F±….åÖ;5ñ¤æ§x²¨Ì¼Ÿ€[k *1/ùkRw¹Åš@p³dÐe· •z×7S‚¸GÎîb‚Õá÷UV†qeÑsíⱨÌyt«ŒîjZ›þSÓ‘†)$ÍI·Š9]…C ’L|ôf,€ùiáÄ:3>²”‰=°`…,—³ï§·{9‚k¿kÉ<ñsF!'vm‚b̳€‹ ›lZl[Oaï}æ9Èg™¦!.eñçÓ7Ñ<þ6•„åôÏIôn!vi†fÈpïÌIð×AeÆPè2~.X*¶Ý®§©©’ÕL¼5K)©J¿˶¼*KÆ´Ö0UÌ¿špàÁÌ@ó«j²MÓ”¯´XkØ­°|‹\óAê.bC}»t±"ÉK—áÆîw@ÿ¡;dÜî þ¾TCTæã)@g/BZ<½]Ó{ò °ŠÈ¾¦“uÑЋCò-tÓ-ûƒRšÊñÅx>,À:eÊâ@‰Å(â¶òYêZ›þEå¿Ï(¥>- sné´Z?ß¼äÂí·`+·"F]œð‘L'Ò•s³ž[ÿ‡@âiGÂo¢ß}»Xˆl#¬©ŠÉ–—¾zyƒAiBÈ;UŽ8øÝ4Ý™tñ°’¤Ó.t™zs7â  ʧÐYÆÃ)3Q^A¹3 ´\¬ÓÛhs˜¬kœTA¶*[ª˜Î$?½ãÑ:üubà|üÌ­‚[±Ç ˜¯šú솱„覑äöFÃÚ4CR9ýÐ|‡ÄšÖ+äÃd-·K"ãVMÃŒžô `ƒÐIO'ÀPó®hË}½h·Œc×cã0=¸çp–ÙTí'*B`Œlºyë5KLàZõu2ud:ù?„ nË*« Œµ¿¦áûÃÅf "9f–-)eÉCË2«JŠ!Ò&Ì.©™;bKëdžy:øÆ\P§°3/k‰5ÿöRÓoFÐ@<§0+`ê|N¨Åz<‚'. Èd6ŽÉ¤·ÀKe×½„WA‰=]›cÃ:òl‡ùÖ}¦°ûõ¦"°¡¡ê%®Â—·Æƒ¢v›blYJÊŒ-¾¨ZÀíñÔ8ø€ÑtVˆ”ÿ~s ’ξ¥Ç/µ(6Þ”'ÔýW¥ûñ)M £Ù‘¿Y3ôÄs=® }+†êøÒ¹5¸º¥+ÕP5ýƒp-»@9—Í#ö 56 þ½å€ƒäÜ·tH‡0Ùî^€5D!R¤Uè‘`Òਸ਼Ғ 2pMúÃ$Æ eÒQ™yP8”-FhÜè3úrzV=Æ8ë.HÆhÈà¿ÃYÇ–ßØÿ›ð¢£ÊäZåBs³L6ï¼(¸ñúÎÌֈ滃åí-¨,1jüØpIs²¸ÏzµÜ¨Ê˜ú eìÇC§Ö$çËײÂîvÕà`_³‡QüUPÛWŠ-Tîï®É «ª8¬o+ÉS$ááÊ4ŸwK¨d´ì* c­¹²ëÿ~¡±—¦±V1 âðñ÷4¼™£ðfØ ðßšI|321=I829æN08þ¹úØ+Œi¹C#²…-x iƒ·ŒwÚúX²m1hšje'­²†@S Ñm×}RÞˆå`“ ùPÊ¡…fPI6Á¿C™÷Ên+Y4jQºÀWdl(oŸypÉKLr&ÞzéÊ»Š\ägf5HYŠH|¥ÿÁS³_Ú»èÓéÏKŒ“n.€ ]/y2ny7à5ôÇà²_)³eh‚÷ãêLîÖ­ŠQ$±­ÁvpjìvJÀÁ¾ ^³«7öíͪ0ÌiÄ?Ö¦©·ë}ò…"Ÿ—…Lé1Xa‡'œ©—Èš)4%lb|mb}ª×3Ý„ÃéÎím{Õ¦ÒxĤʣxföÉŽzxð oÇ©§é-“‘7¡X“øý§9].!ðçŽÏ>ÎCÉÔ,Ô)·[-0€âu‡]Ò¥¯öLÙ¨ÔûCô¡cI‡Ï;§l7Ùöt½Š?ÙH4’B& •]7s‡®ª F0ò^YÏSëqN,ÝbÚaTÆ<ÜPƃÚ2±+à,2 8ôpݺ~¬·]àp½Ê·ÿ7è0§P’5=[nŒÁŽtí9 >N>ò1вJ­¢ÉŠÜµûœ[½à¡¥ì‚‡ÿÍbåòÃ#¿f2•o}l388EÀ\,C«ß<¹wßM: .Ú=:­ülpf*&ö”¯pÉiYµ%?¼ŠoÁ'ݱ֎R“ Â¥¼ßfêx+¹º‡†ÄŸ~`ÝŒ,œ83ß~¡I@u—ÿ¹¹w³ªæ0G'Aš†G0}š—BC–ÚwpU° CH4BœxÕ,ä¶Mÿ](½¡ñ®y鑽Ål‘bÃQq±@OKjJ‡™ú²ÂÂ"l ¤'Nà›µ™¹µrx=óLcü”ʱ{M> ƲÏ@S=†#«kÒ$f%ÁŠhÙV“°« +¨ÕK¥Ùgˆ·†N¢‚ãÄ$åØä¥ÉI:yI¨ðh‚û¶hcC/³2QÄQžDþ°yáGzH/+1r-|bQ UtÚK¬I£xF\v¥ÁК ¾´Å*´©`†;Ä|òº6çnã‘g/à•'*ê€Õ­CYèÚmª|f‡–lÕÔ]QAé\ÎY¸1x›nÌåLâãíh¤;µI#JåžñVL¡Z äHvÑÓònщ´\#9_ ‹È–ôˆüç4$}ˆ¡/î¦5ýY«Fš2pÎЬjV[ãkì7¤ _ìN"#6ˆWhþѸAÇF×¶ ˆI/ýZ1âvœ¹·s3Yy ÙdЖ6ßîOÝzçqÚóØg$$ Ø¤£ˆ€ÔTòÖ¸'üñV§r4] Å’£1ÉùÚm¼A7-_ ÆØÅdæù \õÌfêÌÅü$’ÖCôôo—5 scžÖx,6ÈØ±™J^S®tL ,'~LÔλiôÛ©vY|¥Hòá*>u„Q+@Æ~tnj^™uQÖá ÙÛ¡rÔÁù¥˜WÜ‹3Ë.¦.`Ç;bj“LÅ)ßelï¿•„@F§n*ì¥Ø©‡Ý D¶-91¼y†|êëër“øÊ L>$LQÞÓhšºšþ˜iê–‹ýV ÏàD+ƒª8>N×¶\%Å1[Î5]Ê=ˆ¦Ló²ç•Ó %-Ã#åièYÿøSè ‘u‚Ô­Àå%Ë’ºTcµYŒ ¬Œ*ˆ¨qÒÃ⢾{þwˆ®+˜wŒ2]óß›ïnÄô_r‚ñŠÂŒ—@\[dp‹j¶ ÙíKšGq‡?µdg‚ug™„HXuPŸÂb;þýK)éÎJžn=÷³ ‚1(~B—󪦲ÊÄ)áJüiyl[L¢#ƒïðâ,¯ ýÊêõwõÍ’Ý’7J—¦ô€« ð 0=Åg>Uw QàY¥4ÿÿu­¾5D‰îÐ. èÃ4æW¥hIôÈlÉ.#\1´næ{"¯ : Î= È¦ÑŠ­ÄÔ>f¥£Lë¼`~Ëük°R6tzWWè\Ÿ”1pWÝIüw­PšO«þo1n¤¬9@aklÔ¡§ÓjMd[}=unÅËÜòt¡_6ž@sù©Ë*í*/ZHtzºÏDš~ŠNöç„**z,X ^U"Ø™Rù R„ÊdÚ–”È&©3j¦m<•¡I†f ¯‘-Uæ"ˆ‡†Ã ×3 ¶O4´¤%7µ1L¶XÀ*Öħ[XiG=KNÉ”žý—36®vdˆ¸¼º¡ÖÏOÚrc‚uÁHenvÝÃÊA|.š Ø\\icZÌMLFJÑèX°oÑ~›^V8’iÏÒ½Šýu¶·æ3 ‹´a½è¦©¯ËÀ ò—î5Zï³éO‚¥† !Ké2’ ü°hèQ0Íg1ºÍÒÅ ã#òƒ’þìJ8ã‡[ gQ‡~+t¾Sg)øìƒnÃé©Ì†^ Þb U¦âF0x© 3ËE_/Ô]O9¸Fó5Òá­v¨|¿¼§ÛÐOÓÐ×ì€iùÚxò»Ó÷K»OËEYh 3"­d¯|ï‹C þN = öâ›p<$÷¹óÀõ Ü×,c˜ºð\ÆÔŒSÂÁ/DÎÈzÊ5—ü¯‹=OBaÔê§ÆÚÀ¦f>?¦î–± â"qÌ€› áiÌPY`¿Ò>bèJ'¬ÙÛáNõ‡¿·Iú(ضtŠ c/…nÁ|ƒ¦ @ 㬠íÔ³í‚Hd¸ZF¥Ž5Å–®ª“Õ•ÖÌh6Ä\ûêúÃ]º5eÕ­@f˜‚,¼iäµFÜ=œhÆö„Y×uxîœ|ó@›«Ã E}€˜»O¶MÓ[mS)&‹ôLÿdu$ÆäöyGnsø|czp1¢<œa¼OÏ\È2—ùàÁ xëÊe´‰ÆRåQ@%d¢)ÉÌg0ó¸¦È¬^ê:2O"©Ç`w"Ëh ʇê`Ø)•PÁ̼TSAØf§¦~Š¡—ßxȹéBø»e8/Ð:g(S¡˜ÿ´‹ åGyèr_b8ñb%‘ýÅ7ìzÙ¦ ¥ÊÊ›‘‰Œ´ï|ØßÑÈ–W ÅšòMïÂï¨ö/8ÙX9!PÌ0´…ƒh4ý17Äê34^Ǧ𶅠HÃÉ„8—¹ …X"J„Sk6¬¦­Áb,šÚ­ÖÂÜ+íæ:p: :…ëiX7 ÄdÖ˜ð¡;%$¡ÃÏ¥œwNÇN(-«JøŒå2ÕëTqúxÔœŸ ª®"âÒÐî– r4À¡”ˆ4kabäQ¢Æcnvœy?x2_ ›5ûë«-é·3ý·«ßÓm¯è÷ ç‚øßÝNk‘uc¾åÇ}útoy•™”—–J´Máæó#æŽ ó˜Ä”¤›ÉrЃà~À¤)Ѐ²8Ç5—l¥»$XØ—­d]Á‚¡D <[,ºÅß[ÂÂӽg¶LÝÏLA`9 ×(÷r. £†”tð‚8vèBÜTØÿ–€ €×T°6®¦ØÛÛ ³…Ë'nšÝçñ0k.„an =ÌKÒeT’ñFòa…cKÍÀìƒ)ÅQÜ\\çË×€›á!¤Ž(ܿڬèd9Eƒ }'N͘r$¥kn zÍ¿‰>ú*{?”‰t ªWAcª‚äÌö[,n<àÑÓ1ž»Ü ‘Mo8øëT-Ž3.EjE|èU 9[.-8õµ«SÑÕ*œž ôo1Úɬ%q(d=Û›C( naÓd+U“ðöö/+±Ò2ŒŒƒ@zNé#M§É!BX)õI©Ì¸ò´_Þ*4cø®e7 ®èH¦RF4€ò´‹1@úŽÀ–&¬”ï/Æöð n1 €‰’äÙ•Yìù¿«¹:c6`¤k•xÐVà¥Å龦sO{l ;¿˜˜ÆK/<96*€xýÐ]èŸáãŸ/·yh0 a~yú–jyÐØâ!yþñwçì’ œb¡›bäâY&ÕÞ>»¾˜˜ŒÄ¹ ç)pl?X èþ%ÜvW1•©óC6 Ò*V°-1´`D7#Ì㉵ägÝN"»ÁE*b@2AèþªÉG§¸ëÒ'Õ%¡é~ÖjX ȇï¼îEÖT¨U à§ÊÜó *ì&¬Ç¯|[·ÇV¡e÷9™§²¨Œé‡+y\÷7Ñ@d˜ë6 Îf…$²`JIùZoã-Ì? ')hC]·~x i\óm€|½óXb¥-I¿ªBîÌôòŠ-yÖ•ÇmªÛ"¨äÝNÚSSjúcBq$ªG¦ï—?/¸ÅññÆŸÌË¥íUR:âlJTýô;Ë<"^ó+O.úǤ;k¢µ€±‘H¯Gàˉ]Z>à_Yf–L.,[+JŽÈ&bÑîþÙÏ·Jª ìÎZªw(¿¿š¦cHÆÈPg¶Ø)<ço'õk†ê·ÃΕwðœç(áO‡{„ës¨cJ«HÐ)aîKö[82"G¥L‰Áe@¡/Ѭ%••3/pžX74¥®.A«i8Äz9òÜ\}„©àioŽxv3SŸ‚Y x [f 'IHZT0›^kÂX»” ´zIÌžŒ{<„úŸB–côòÜó³.á"ˆa.ðûêo¯ÄA=×P•–«)ýÅ `ÅëøÒÝô©&¿Åx’î¨RìˆmÛa(&ŸîÂÉ0üÞH¸÷2&}*zCùÁÝz)šf‡˜ÀÆ~ºc^óÙf.äxy_'‡Ï‘eÀM¿ Y¥DœízfŠ ¯ —>â5$ D@1ÀÁa@žyá «¬DËäò‚Þ½d`ÝíBÀù $8š¢—Ê7N½8É ÔÃÞåDHGâgN==+ݤÍÙ2ÈòÝ(åëÙλSTáRì°;ÌôÒðÝà€laﮟb( —ÝwûìpÎZ0×±•P〈ùYb]FÛ7—¸@Ã-?§: ¬zzOŒC0ìäŠeRòàCX£(ßêSo ^r-Cë>J¾í—+"‰›U9ÛWKÓ? øäV Z¬8ÜR®@»'•Nî0o+ü„¡÷³éÎi¡9õFÙßɱ$‹kaò3[#åÌ0J'–\`ñ¸pÍ ~d||RGé¡cŽÞõSˆ b*u¼oj€—l•nœéŠr;£ð+{%ÃÈ¥݈#Íé.Ë"tsñ3˜ˆQv…cq„Î-s´§°¤/èèªÀ°©:!ºË$àñÿOáâËt€Bn"_13ƒ[’lâMBNÎŒ¦©Ö2ù W GŽŽE|æ‘Ì È·”SL-$(_þƨÊïûÊwŒÉU¨]JíP¶\cMk‚ñH¨š¹rŒ"Á_í&ƒ« º?½GN‡ŠM@•§qª '¼–ä~q£¨^««3åЂz xð¸°ih¹°ooCåb‹”qˆÊõôË\…–¯9šžB Õ½âÁÌÝ™àÔ†~ŠXåx‡síÇôœ]?\So~Ä#Ýæ0Zú•YŽ×ί¾ð…Þ2+ðLðñ’£Uh´ ¦Îü ‹``éÄ4ü•Êv§` G1M—&$“ÃÀ$†A–Ô¸¶õÔ¢?5¯<Ëþ¸¿ËÈG 1§~h A ö¨Õw@Ôt;iŽ6ë-é7£ ^P¿žp¨a‹˜.tŠ!lxþ`œt³÷(ͺŸÁGe“Ùý;Ÿ@°ñQ‚ Æ=ª~O íé[˜ŒMÃÂȼÕxgdÆŒs ë,>u}¤âŒ3c>MÛ ß]`u¨ZíwîŠÕì yå÷~{l ñÈ„Î\]„ºš@´ªénúW^”Ã<⬆ÂÚiˆÉã¶KA d„18-¯G£ÑÕ…4Œ3Öj¿4¬ó|ë*‚2·¶À!¤¿Ö£X-–­_>3Œ-!:—YiÝ>›‡Oo ¶Ræ.„šŽ~q'æùŽ~ØzÎ…†JN'ª²û¿éë“u Kaßðqz*̽§þÝG£é` `+Â!0W›©®)hx»“¯DÖÏéÕ¼ ]{Ò‡“”ô¿é1`^D$Z½yŽÁOW¤W¿cŒÎ^Šœ ’ÕåÓÈ<õ¯n%Á X¤¡2‡7™à>ðVl¨µA@FJ0÷Ùü’gF;aè7‰(Ùö¾¯Àfëë†xu4 ï ‚ß>z”Ò,@…Än!ñÑ ‚œ}j®>˜aö4‹ÔÔƒ¸Hq žN¨uÈy'Plé1‚Ôº`†cû—çx·5GtuÄ¥Þâ;·gty<©ÕEtÞØ.Üó.ífiÀ˜Ã®2 èÞØ@ŽþY¨)q®•J×:tÈcˆÒ‚r̬ˆ ê9QŸzú]ÅlÒþū֠ËÁ‘͆ÀàVýß` 1—+4ê2{Ç,ÜB6*¨•:pé?‹[:ÉÉ %UÆé1÷­8\$׈Ûý6ýd¸™Öo `BÆ«·ÆÐ?‰Y)}Gõ&œ(‹'¨ •%!:Ü{ɣ˺]3 ¬áÌè¥Y÷i~£ÛS.‚èÅ!@°$ýRÑÔí—ôÕw ‘Æbø– —|Q@¶³Èš‡o€úΛ›‚Moo t€HŽnÑý…i'áÉ6ùDÏ1ûÑhåJ'ïNTü.ç7î•©osPirøt›P,`kÆ›Í R½Jöó%R£@M˜´ûú´›Gm“GRE(ºü¹à-\ WýËqŒ ¾M*Bkµy?_| xòi“= Wu×o‚— ls˜Ÿ¥‘©ÄÊÉWQœ•qˆlòàÒÕî ‰ª%Dnnvü-† Ѓ/@I‡)rØp¼Ø6›Ÿ@]Wûп=¶ Ý+`»ñŠ;…xæ^Ϫ¦Äž bu2ñv»í>o é€ôÙ ç/ÕˆËpÊn:R–+==6Ha&[ž U^a½þË]ÞÕpe6¢O:ö£_áú KKïUÌt‹"…ДŸ{ˆ’ñ$®¶g™àÿÑêÆ u×[w¿ì¹—Ç(.Çh4¸·jŸz5.Œ T,tˆ5 µ€‰çÂ#â£äÞZ· C”Ãç(Átkè$,Æx‹k7 ªq-¸›å«¼‘ã@¸†2õï¥I¶Î!ô‡/?žU„9Áu>ÂÜæÔ¬/;\ÎOŸdx\T´Ó´u—á¨XëŠc¼æK]h=cÖ½…ÌÄ«Zj&ù'é‚õé,ưÞïCVzã¼¢’G/ƒØÂ¾Ca´ ý$¢¨ ­ÂáîR¨½±1ªh¥½Ú[?„ùØ3ñçP\ÖPY§ÏzþT˜Ê LM0ÕÀ±w<|õ½7N uÑ[¸ïÀˆùY‡@;u³¶ ó(o!ÓÖA(/O(Sñ0ÆK)"cЕZ`/]íYûñïšü7Oè"гÁ8¼PëˆùƒÞ—˜0Ë?m?9Ù⢨-L>¸ï‡¡õwÏaê¡r§¹ãßB8K¿<\×Ýû`‚§Gà÷ìOÿqó3÷R¯w¸(lLÐ>´öT´*ÿù´È’âNx>rõ†VÞ{Ö ÍÌæ:Þ3öª¨DÒT—ze×ÚIœÅùM`w›Ë-×GØâE„½ˆ¯Õ:Ó©IëÐ? ¦3®ä°¢o+ßé #D¸ûuãLjp‹I§ÛUøŸ€ïÇVl3,¶ âç0¾‰%¤ôÒ®o1è k:ýUëÜ^\_`*`îÈS´‰“Oò­!–ru9»P‹AÄÞ}ÛíϳºÀüÖ"è+œáTP_Чc÷„õÜdzQÐhâ¾È“?z(…Ÿî0LÊÀéùŸ`ÅÌ·Þçâ»Óòjû¾55àÇ#fß8úHòMº¸ †þŒµû^=M[€¯~2­®=Òž]8ÜÞ*¯>\“E×O+”OY—±*ÀÁWj±ÕOd3µ\(FÌn0ø±/@I73—üþYš@Y>”Ä –ȸãQºeõ¡³ž¼`ØÎçR‹·¥ cÀÃ(Mãb8tjúGŠ Ì}†ójþA1Sˆ98ÞrP æÞ¶kõj*^.‡;Åwß §»´E°¶cö ÉòôøC^ì§6- \ž½ËJ€,J:È,H¶ï¡0TGg ~ËѪÙ*@’ êon}s­çO MW;iXß¶»»c™B¹ÇQYÛ ¬K·¿/ãØJw¡ógAÇ>sïÂÙSÍâ?N¯Ûú‹ uÁ‚ð ðl>³®JÎ]Oú¦Ø•ÜýOiWfíÒØCp–ÞsmT„§«ðùª"JT„9,mÜâD`ì^}<ûáx‚€»êxüIÜ0Àž6 êêO/#1L4"—.ÄMO•>6«øa w ;›B~Áv‹s–Ÿ¨“÷yì.a¤­‚zÏD˜ˆŒ¿*<ÿé$1=¯:ë­Ù5W-Òào}ôÕ-ÙÝÇ.8x/¿õ[£%4–`':õ[‹ÉÑ’™W_"Àbñç=zMìˆ@˜Áep—Þ^ߊ PUNl÷€¨à•‡1ü .W‹Œw)¦ÿNô£»ëÞ;Ey „¸×{*òM1w©8ŸÃLo°Šãý=× 04“¯dÔ†Çlì6Ü7š®u½ÆÇ¸X¸ƒ¾%Neguš1,oN‚‰SÉLP¶ïé¡cèŸÛ6â0Ž£ôVz Ê)lµ¢(ÎÝm’O·¸gÙEïÞnꇌ;çêðë˜zf\Ǹj ç8¡ã ·Ø,qW’¢­;¼9>}÷•»ÏÚç&ÓÕÈ’™EGN‰‘å§eÄü¼]Oa°š3ˆu%‰9ÎzBažw  âªƒnàÔèã7#­ËcvCöœ¥óŠRŠªš á Ís”uð&/aL^ü0 fpô~)Fh誮ƒ³Qó”SÃî/a…’Ñ,cXjEdcLÒc— ¶ R†XÂÔ”):×F5*?Š'bq›bË‘{¹í8]ˆ,ŒºšqÕ­Bz|5±˜*­,aúæ„ïõè§zˆŒ‚ƒ˜YáãÄáS*˜äY\Æ¿ BmB–þªëhèÏÞèåô¿‹ Ö |]$7á©`ÕG×#¨Pa‰|=,ªPž8?–Yl«°.¨’*„‚ö„F©ŽŒ/é Ðz>n×°Í>ćr[£ä}€ÔZþ4ºðò-’4.ö«°Üg ‡\ «`-“pí΂ÉZ†ÛX4ôÿ&‹ýn_þ•螸¯¿µ8oœ<‘ѵ?ÞRñ¯ÅôIþ“Å!Èp¢¦áÀKÕsÑõbqã.YÀ…³y)ùø’‘ßdP–Y.¶ÖD9zkÑÙpœƒ¤Ù¢»\³|´õØ¥žÅG{–†ñç—~ð,„B5vóâ‘ñß»…w¨;hÒnW;© N¡€|ÅÉ8OzbÃâ⊉¸—:`Î>%`¹ÃÇðfO#d͔ɗ־Åçž:ãæ'¢7ù®C_*¿ôyñÒÂê%ɸ‡[5¬]« bÚ‚HàyÕÙoR*šòâ* Nåñx^ {?…‘zIØ´PÇÔ"~Ðpùl¼—Úâs(þÀ»!Tª‹‹piš îBs-½V*éµúùK-èÔ•HŃˆ…¸d{qwCç{<§c¨oõäyatT€¼¬——ïªMÈFÐGŒ’F/xÐä`ú%K{`lÊnÈØz ž.ÚòÚ?ïrO‰<`ˆ ©Ûß0ùÀ‹2¤ áq P"‚“E¸t†YóеW–,ÛÉͰFÁ. Ä{=cE+Ü Þ¾ pA€æX6Ê "/ã xõq¯]ïá ¸=îdÄCCDœÒÅWuD—?z–Yïßä³WM$WÔ0ÈÑ!+=¥3ŒIk¥Ã9ázcEžç ¡Û)4™e+ií'‡WVxø<—œ´‰ª \ ì§ïÔn,dVLOc ºøÿ;uô›A6^e~ñ,ß¶ü~4"“f¡¿ºï‘FÄzˆ4÷b*`øì“f}k׿cpñ)8/½ì3t>–$½•̶é"b0˜mË`VÙPëծ}d„ÿ~|Œ'#üv`ˆ;ðoðÔCÐUÕwœôSI³==f<ü÷9ê„ßüÛ% ‡Ùüâiíä?Ç¡ÁÍ8‹$Îújt†ïðÉ7ÙÚPØ"ü‚è¨køEõ1̹ rÙg&è¶€…ÃOº FŒag”Í®?V1XMìI4ÀÁ CÄ,b”Lž-~bþ»GÍ‘á2^OÏ嘙£TKÅEˆÎN£×!$5<[Ÿÿ:°®R¹ïFTÓÔ±ÄÒÿƒaÀË—äÕ›óKðqº„SE¯ÅY=4kVP‚Y©e\§„™Â=ô}kØó )¯8AùÇo‚­ ‹Þc& L]†—f?`è4Ø€=]ýa uõr‚o-?rBn?dõë ÍÝZ%n:þSa‰¡øÒ£ŠHW…f’“kÛ.ÝkCÏÆW¶(á&àù‰ÅvBÅäaV6Lx„US¿Ô©Ž¾ƒwÖX¶GRƒíöõØtÌ­oû‚„œ#œÃÏŸû“R… ½\mÆi^"&>¢pZ²jÀk*à„‘_ô쀇»ptœuùpŒKc˜ò“B3‹<å¤3%nƒ16?k„®E¶~4Ò zzJsëN5²oU¤è1W×°´h‹àÇp´ UË„žø›ÉÈÏ[øìŠièêÚf÷t-‹·Zÿµ|)ýßîÏn‘ÀþΠ ‚îí˜GtÜ“QÆTaéI˜QšQÞ…d\yÜȉEJtu=zìg¡® ÌÇ‘FTã¥Å*,Â'†~<>My¶°¼è×å¡a˜ö°¤„Eɯa3ýäòtöÔÝ÷Ô)lºÎÞ~„šÝ]æ.ûOZ¦ØkÀ==îxâøÖÑþ†gÀŽ‹Ñ>Á#íP‹ K† w!d^šß—2¤ØË+ç €¬&ˆUX‡ñD˜:Ýæ>œB\>ܺÕ?!ä%,Nãá·ãYÛ2‰Á*Æa9Ïpøòn Œ-|Vm|v>"¡ð£Ðéaoà蘼 <꟔ß2ùXÉŸ¾ôSdd&7 ’kü¥r k?>˜£ó!˜ª¬ÒÐÑÊ‹võ=;zIrv©‹Ô²Â÷v2>L„¥LÅ€˜­+½û—ó¯-£ –Чpd§$­Ûà¥Ñ[‹ª»(ò"ÄÃpÐCà΄‹Ólà´Ñýë蟛àìùD짪&``xú<ÿr N{x[N¶$ÇÈÑwe`ØaãV|iF÷‘S…ŒS1.¥u«ßtM͉ñ—ü™¸[°.Ý„+ÞÕ-nz‡ÐÍU«Ä t‚+N·D¶!ñáy—°fñs@¥Ç ¢þ¨‰A‰w¿ëÙÇöîV):ÙpóíŒÙ=‰>Xãuk±tùòo?,K.bÏ[¿uBÃH冚á˵Å&´û»¿É.ìÂÁWJa09|p–A]ÉÅ »ÇÕ8t!&kŽ#ƒ³°•VÚuý³7|tŒÀoø´Ç„³’ ÷47¤·!(\wY¸õµÑÖF;½h^¿ÜÂÀ« ?<%ü=èø €†'<\²0åäÛ²úöÕ›³ =:DàÃÓì.˜ìÒá0&õ7®.ï¥Ë/éÓ` [o¶ÚÞoá¸75uz).|q½¶ >^U,Äø/0Ï2†£ךEx¡ÇßZT´„t‚ÃÐìêŸ/"E«]}ÜÀ+À,ŽÖmé÷™ŸŽy¿gêMBnQ¡‡ æ:ø–þn³`„*>Œ(Tý„úõí T½)Vs"Ðt"‚BO@:N•‡p·âÀï¿€õÅ È܈Áå÷³X¨•ñ,ZÚÅíÃC I=G5Æ¥1iA‰¡îÑG™˜¡¿5x@9—€êZ.5Ø#Žä©'òT†[møçÙ({‡°pØHÖT‡žÅEßÞvBª°ÚxŽ"ÃÜÚm-†:¥3Te,®áts»=Õ^p»ð#õ—­@•ÛqÒ»mÍÎî¶ÉÌy+– Ip_M*ªO¿«”iÐt#·©Ã„»ÛJ5 8Ï éúïºÆw—éûÙ–—å*Xïwéj"Ø +¢ Ÿ^ì’¬æ`aC“ŸÒªRS¼‘ÖÔÿ¶")¼sßdŠ"Ù¹Ý_ÂD¥VÝ?h±K%ÕMmÒ˜˜°¢t‡'æå¬F/§^E›ÀuÅW*Ù xiÇ€â_åúýD—f[b†ãQÑB« ìKw¯h&!‰há;ÁÿÐü-BƆeyr¤4ôºuë‡Ð ÁÙ¢|Ûz9R"ï]>}zûfxsySˆ(0ÔêÍW-îEoûÊRÌÂÉ‹LbòW‡~zwçÌh)~™°Öãþ‡.ãƒý|<æË$ÕUK D(±Ã,XÜç튱"þò\™f¡|”™Ñ?ÍȘ;Ë‹:%ÉOqÓ.Âô“äf5*ßÇR7!ò`À³·Å¹5÷1ÄÎÅ4*Ÿ½Ä)Ã/uv½5ˆ|‰ÉCVð¹´…¯š(Î|sÿ[î¦Û=~•”ßBɬ9F­8=ðHÁÈÏRݼ\ð_ßç HeÁÑ;´¿…½x¾DË@ âN|ozôgíñ݇;ƒºd-ó‡zW‚¿d$àJXÔ7˜’-}ÔíZ¦åuXÍ"'0ߪèsèø ?Úû2\„.¤Ž¥M!­ý­W1€Š½)öíŒp1ò`=RÅ”ŸÆÒí_’K`D# %Œ#†u3týIhÚJ…ª™ÑÓå<¸]½|4p‹Ü"]¦,">þ·ôì+×äTËû‡HÃÙ¼’Ðˈ Z QÓ(°j}«œþ“œ*CB™iЯž2wóo ½†àNígTÃÜß­:>™ŒÃýÇŒŽ7Æh´>À&è6õ WÅN–Ö$ofv9‰ã,KfêoK@0XHGkš€/žP"ý6ŽÉtŒG¿g4ó©²p¨§¨­E¶új)^½8Sk(¾1t—ÿ-N—°wÍïFÐý-$èe+³Û5Í(oõw¿Uîb>Ý—„½Wja.%\ð0ÆNô2¾À$ëÉb`.3IýïŽÆãã3Tk¬Ø1Sï‰YŸ/ãü„¨bÇRÉBò…-_,—‹ûUسž¾˜Q ÁhuŠÃÐ?uLjp#ŒìÃŒo ÂÛw~#X2¦»Ýmѽî§UñrîÍñ¤(‡h zYÅßl0îì†e²µÌ‘>^½`Kß°{ÓQ‚æà9»ª(0péñ™<â<šÍVäÓèkõ¦¬£pf·piò‹*ÏÃu\ÈÉg< ÙEÃUºD¥øô÷C›†§üÓùNòuÂì÷ƒŠ·¹‹yO<!iÉ CÌ)ãpð-¼†\Tëà$—¦Ã%y ‰+¼å%(Vþ‹÷*¸…%®ú(ÞÀ%ù)ià §›Úãu\ì8æ]‹áf°v7\Öæ‚_Nÿ%ýãš6ˆÐ-,ÅoW±Ðx­¸·§³›Åû²zP~४N4ÐÊËV.U:î4õ¬v ‡‰ïÚ¥¡û¥¿œúP*M΄ն |öhü›-ÌOAžY‚Ödò¾sx(;µàÊÿñqCt€‘¥$Ó+. ='9i¤î`• ,ÃY›wb´“ò‚ˆvô ¢-}h¨ÆC¸°öBÇÉ·ðrüâ¡Cq]ÓÞS˜[°\'æn¾—O]V'x±!°É¨»’ª`ô±2ŒÁz5Œø“NF1&wÔW¸£q‚Ÿ y+S€ÒÉ%·z=À Œ#f1?Àžsé¢Oe˜…õ7j\\dæo×gÿ<Œ8`Àʼn‘‚üòö¯£²€Ç—01£:½ v/b|‹Ê³/6¿ÇhI0Ë_ú3ă—úâöÑxx;Ãñ‡D¤{×:‚”Úˆq6¤|PŽ[$o×›Ø{­Ñ²Ã¡ÀÈðП}ÎÂc<@ä—KøÑ1)¸{£^”õkÞÝEŠ/b‚+1HÁ´ê°ÙÅí‚›ª`ï6ž šÒ(³þð 0¬N0vq­(Ã!^ˆ›ÌÑ­ 3VN^I^—b; Гü3ŠÄQ/.aqÊHfò†DWhóÞ?ÁiÝOÚ|–Ks¨0ññÁ}áõÕq< sÆ|aíí";4%dYbYiÈ7‹¸Òß½ÙWßB‡»þzÿ”ˆ§q4«Iû×㨀J´ĪÏ÷³xX P¹k½N©9)g!?õÒÞ|þ“µÁ6eÊŽßÒ¤¿ëîMvõ·MS‚Ìå§5Û ŠüòÚHæ4\™\q³÷ÌÛ+%v÷U7.]`ì5 ™3M6 Ì.¹´zUÍ„B?ýÕE:p×ÞeâäîºÊ…ÅKtï—MÔÓ&渃И¼A(p‚Nô|Üøé,ÚõÑG³~t‘Ž´§ŠP¼Š`:3°cf\[åI¡¡Ë䯢'|Šz É«=÷Ãâv­>žx -^3n}Pr‹Å‡oèK¨É0¼*‹±¨hØ´Ì}QÉWuõ~´eegµ Ñgðô˜z$è»Ë˜t¼æa©éØqÙ€—ó !åŒ@1x +ƒª©šÇ­‹UDáØd¡cøÖÙú¸]H¡{\%|¨‚.Ï^ d­šõSÌØ·¾0n…]º+ ΫßÁ.œ˜’¢ÌF‚¹X°"]æîõ»Þ]Ö#ãE§YÖ³õ¼kL¸xsVÛ…€¨ŒÞ¶† aÊ@¶Z—!X½>uZ¦u‘ž>€%R/6.”æ¡¡ièÂѦοÜJÉÑ5ݾ7ç~0çAºc.V]s¶Êágm‹`ÒBö“âÿèE<Ú>¡^Ô.ìŸ'W-¥|žmxm{,–K,;{숇Ñ-ìMrŽKø‚l2ûóÁ{Χ«œdÙž}œrPWïãc%“y’øäÉF$œzAŒ¾10à8\°>%L_ ÚÚÇØèoIRsž,¨2Û<ÍëŒ)J!»àºÅi0=h‚¹ÈF F3£Êr¸ì« :Cûex‹Ùæ%ÂçÕ›†¼?¤Çi^ÑÔ _T̵H~Fûñ†JÌ·@*2…€;Wþ)ìo}ü QG¼u¸&ùú¥:XôqãÍ÷2ž“?¹Õ£®0xp£ˆÞ#tŽV²?T£­t£¬g´wƒ9éú÷¿¨2a„¾Öý¸£€`(ÂâØSV™P™Zòá«G>uõc¢Gó޾t_·è[5^áÿæFlj…ëյƭ·‡"@ÞÜÊÌöî—†m6(]òeUÖڣΫgT6CѤÁð¼ (²–cyÕ0ôèÓzŠŒø#÷ kîMVÕÏúxÁ«íÑv½5{¦V"¶¼|ÿ.ˆUÆo>–¸wwW„^c÷½=ê‡'0SK]½†b®A"2Æ/—ë¶:Cÿfš±õ5\À“þƒ¨~éK§‡­Ü¾x?¢`@w9D܇.Ãào]ngCº\XäC%‚Š< ¹­é Òÿ¬…‘¿#[݆„·–F ^ò9¸oq¢L Á@dÈ{zm±é?£Q  ™†þ¹ÝYøµ,‰7:„¾™´HI®vØ?½Z‚R3Ÿ-Åpñî[IzúðaÕG²N“ÉïhÖ“3‰‰'ÛÌcøV¦þXûwL}ôFóñ.¸¡aÎ>¼ëo=ž£mˆQ01PãÏ¡ ¾X1è½H0ÌPîéåQiVI_jÖ·Î7WGc ÓÉp”öQ¤AÓ20je½ÈW;M]PÇÐ\Zñr7CÛ¯^Ÿð"è#J…› F©®Ž.È—ÇãÅŠ›d‰,;\™år¼‹€æH‘ÍìöÙ Q~(š¥)ÇÀ žG’\ Ÿ>¾É/ÆðÁ±Î̆à•ç0Êc¨WØ.s|våîqÖ.Ro dïÆì¯þtpào•Çï!ÄH¨ëé­ Ç°n 4´ÕíB: ~þÌ>ºõñ›NW\Õ G#hQHT˜caV“l(ÚÅ˱(º2“@1hÒæ¦ÑÞP&ÉríJehwv.ÈTDLíÞáÍ‹C‘PÅñé´Ò¾P‰ò[Þ¯ïòö‚‡7¯íÓÇÙâJeï«‚ Ë)|œÕOÿ?*¯Uèk7Qݰá³yZ Ïf€éÒÐ=ôç¾Ë1–\Œåóé0'Íúö‹æT§/ß…shãÒèÑK Ä“€M8ˆq•‹ ñÞ'Û¯¶X°µž‹(‹ÍýŠûXBÅ=}_ìGñ‚AæB,çmßÚÓKäìWU4§Y ©GwiQ"„\\7Úå'Å-Ìaù'åGÓ£ó„Á·ú(Æ>‚‡ýÓìÔŠÄ­Qb³V!÷À …ð ÆdD·NBFw;nk®P« R—Ÿ2Ú½¯V«ãÛWþs5Ð[… .õk7*s;I^ÝTR?ÝÊX3I>uNz†qÐMg>;|;éÍ©Ï`u~‰‘ï—˜IÑ&R›$‚ y|@<&I¸4õçBJÇü„žŠ5"­áÚúÓ¿aô'{^! W«\õÇÇucA…‡°Ü"ÏpÕ°û Ž:lq<ë™ !ïÜ«÷6ZNliP1cÀP wáSxEc9Ê”ð<£¸¨¡?ù³õ€Ïyö±U­W77ý(‡ê¡»×{ê¨ÉÕÉïW´*§ñž)½‘Ø/M¶‹„M©‡Ó+<ôˆ> —3DN¼U §@>'õmtŽ€câÀ#W‰9¬4€0È?`Ú5Ž ¿‘s6¯¾!ñ&ª³ÿÓA1œu2†½ä±÷`b¿¨”klb^†…6“åQK“ÿLJ\@KÔˆY4>¨ÃIJT?O<˜<íý=¹Éi/át›.¹À¼ÉÎŽ°"ãÀìƒÙ;dUìÏøÙãñݘó}ï€ØË¢VüˆêjbCi<¤8™§ß}7²Qçþöqs‚2!Zu¹þÁkl‰ŸY#É»¿ÉÙ×Õ$zF^\*X}ÔÈ ~T+¡±E/ÿ®ãѲÖÿôþH¬í([p ‹ FMµ`~èòyJ3Pò7d·}\ì3L* àc$™ çd4ezé‡bœ\›¾B€JÀf¿DˆáC'ùþƒ½€Ò Z½YD<T‘6\l~1­Zõ²<§6 ¼,úwÜ Ñ¾Ó L‚)P ,ܼ(²V7•ÙÎ ‚æ}l?x Å(]ß];MnE}!,@´ h< Å߻ۄ¬B÷ÓGjnüðC‘H…Hi{ú`ÀSòT¦3iÞª>z 8[¹ÖàÞmГ™zÓP†oÁL‡ÉMµ³˜¼0$ä.»¿?ê-!ŒcêypˆºzÛ}¹!ƒÎ^,æ5|Ê:ˆ~Ójœ…øÑL”ÍÙÞf’­à^ 4³’€¯k?ÓËm1ñ±#_•<+ÏF†þ­oîRp  C6B§9¹× v*QZgÊÏk)ï¹eÀ¼ æñ¸X²,ýÓCœè¤Þþ¬pÏ‘º ¢‡7° mA-§¢#×Qw»¯¯S—ìü~wÛb…ǘ’ÅËL¡:±Ó™o/•&’´^¦à…º.½‘—íñR©Ÿe¯¾‡Wýj¥ÉR“*¤ àfFl>ª©`ªþî­0æ3¹(Åü|é#¥ Ú·ˆg/5FÐc&×j“J¯^ÂsÓt¾¼M*„ á —¨Ù>hÚ‰cÅÔý4[àô9 ~Pæjpïì§ÈV?Äû[˜’âwQhÔêÉÛᣙ3yÆv`QUl¯ÂmγˆÆåp‚›ù«=IÉŒaª’{üqÍLjVñRëYb¾‚;×aLƒa¢%lCÿ¢Sß.›èÐÐCtöî—O]€RrP­á7 ¶Âî‰(óéN‡Å€TB) ¤ˆƒÍýwøŒIfÌ rΟ}SqœE±· !Ò¦Sß^*ÌPg/Yœ[êL}éwÁy‡ ÊMÿZ`'ÖªPšX>ê ß½þÍ®·û»ãÑjÜ"hìRlVY¤6ξ“.—|ßÛïî¥ÛèÆ-û¡ ÓÕ‘~|ï} ÙPÝ‘!-Š,g6Çqo#1)^¾P¥ð`&R¿Ül³Ù–µÈá¬íæ8 W$Xm6šƒI#›+ê"[‘–qµP²ÚK¹=`çað›·VMÀêF–gŠÅL­o† ú¬ÝÒãÂLÉèL+ž×êk)9ÄI–<{?Üné`kÂDå`¢åxù0ÿh¥.+CÌ a$ßbL…oÍÔ›qêNrÊdJŽçs/Z>6»Z 'Ó¬K›' Æé?g¡ÝcøBo ßD&žåO|žQVÕL!åœNG®> õB ™‘â¸4*>ˆ¦8'—Ó ÍA8ë¿Ò@.×·èô.ae&©— Qd'b#u“¯ê«¨V¿W&aj—gøŽÑ‚Öv+ƒŽÛ>ÀPzKÌI'†m‡â9?ùSbwô3ØóNÊu“ì<'ž™ˆõÜ1t»ýíqÑOßǵôw¡gA³ÉJYz£VXÍ©—`0®~"AÂΣË'i‚Ê9’œYß®eþ7/Ý:¬ýt%6ûrÜ]9>}0OášDœ^Ð…?©×ßÇWÃЫŸ¦uTvP”I!Xu ýIðÿ9».—oБPâ 6J rõù:ußÁcН È÷é£dzeýJü褧§ëpY^"|ÀEøÀí}»ä¡ó‹ $NÀ1=Mé˜ D‚½8Esœp,ÞF`ÿkÊÝíÒ?I=‹u}åz0»™ö®& Ê (OŽÜ\<ïB`!×Ôöy‰¨ïMÈ®aÎOÝö@åYƒ($Ü!ͬ¸ê Ÿ©ùäVÁMß®šicÿ9ÄHvÒK»¬MHó¹y%lÈá!šáv+sf>€·‹N½µ «38“iœ~¿„W^mɟ–l4Ï„qkR¤‡«šù¨»îþÙŽƒFl¾q<¡…4 O™ÕüË›®ªwó|-Œ…Ùµf’‹’ÿF¤êAýž©„‡¤¥LAëkn‚W NÌÂ:Z ’n÷ÒS2çk^ñò1—[„­æÔ=zì™^*f8“yL§3J[4éÝg;LðÙŸ–›5>q¥9ã¡ÀªåO L‚U¸´Á”ÈHËt‰Üžô50¬I?ígT†„õаÍrM?ã6K4 Ú¬I!H0½ûÜf;—¯}½V¦ý—ð $ZéÓ¯"F–„¢®…JK„ýwØá…5ì?ŸÈg(6õ$6eL µ7>Øe.…0ù V kc~,¼»ï1yi-Ÿt+Î8IJSŸzúÛ%Ê$wu*¼g^Ää?âãôýL¢LF[9•1& H†b€²H=\„Ÿ– * X´ÑwBÙE5ÀàÜžµšj5jRñ.‘É RjõÁB¶®ÂÏ(´ €$mJ"!ÎÐðS˜xD#Ãx>“’_/ìPË  .ðø­«ßB[› ýQwŸ5 Cš ýÍìB5@Úzèì“'#:]RÙæfçaÊŠ¯˜6÷KC |[à »Œ79NAx6†¨»õ×ÓZ‰2EÐñKÄc_"¯Ý Üøê™¥ÊŒå9/ê0¤8u“‘¨Š\T?½xsýsõ“ý[oÏ+øÆqöM’àÝ?ãXDÂUd¤ItkH]§޳ÙÁtÌZЀ‹EoˆÆ¿uëЭߟ`HÓ»‹_ L [ƒ"ÎÌ=ZÊChòh N¯ÊÙ÷éi-CÑÆß~6¬…©ßðÕ‡KÀkKn¼†ƒÏ‘0ûîmXëÓÑ@ÆÌqbh {5Mú†k1æhµÆ_Þ¾‡ð}‚)óEžÆp›ñ"+ KX¾u¥Hñxº,MCÿ*üQê~W4¨ òɘŒ¶ÿò­ˆaB ³ËqcÀDU+0À¨%ñQF¸ÚW5òñ×Å;k.^äéS3¦¡Céå¯Î­Ì¿ÍËA2€ó«@–žªR,ßRfz-ýzjS¾ºÀ'‡|Üî§>†Rÿ¬ÒcË!!å¾6Û[‹Þ®{Ö_Êè—Âáüî~;êÚøu$Á^‹æ§¾Éo 6ö%¼!ئP&yn¦` uD‚C*/U€`ZÌË먂éˆþ‡É¹’sÆ>Ú´÷ž[]Qo|iUuÐQ*‡–Åšú|?¨íg¯ê“[§}!î œÝ`]=D;¹Ò1ÉÁØT:WW€IDATÝ1‘p¤f]‘‰Q s“ë1A $í'*ÝK!°¯Bøt¹²[üÛ5ôW¡˜ŽP&õ¥NÇ1R(Ÿü™²ùzi±! ·IÉpÝ\|•"©H¶¥+Øú¸,p s½n:’Qja½„/8(3øÙ¯ïPÉš }>m]"±Yt5ŽƒËOþNmŒ¾|Çq´¼4´ècà‡(Í«ïÜ# ½…¢½…ðñ~Ác÷¸Lbñ¤PcNÔ&ðãg!þÁW:£¦X™Nýwë ¼„+óÙ}~FXDy^2 ¨1c™ wN>&ð‚žÄä!¡¨×EßÝÅo©ê àÕ˜r.: ÈNÂ(f±ªbé«êÜ} ¥ëíM´GÐYÒ°1{Î~‡›V×48ØÚ!9"ãðr}uy ÆÛQÜ.Xˆ|#žþªM·>‚_WÓ¦ÑOiQ”1Ðí`<‚¬ y ‚2ó…[³ÆÐßúàŸÙ ÊÉ}+¶g¿´M8²ð·.ë®8Ï'7fˆDÞËK‡–N|ktïŠL†fuÊ%þâÜ…³‘Ö‚³œÅó4\†ÅÊîÃ/úì›röP N£4ë§ð˜§pVÿuÄî¾­Oýf*‡4zyâÂôTG$œ²ÃRðqÈÑáÄM‚ìJvêõx4£ÆÒµjªZ›gê—ÞZµêÛ7 ]óx,¦ûa›™Â %^‚˜<̽˜«Šãéõ ©ŽhॹËðÕßìÒG‡Û l2æ®ÿ+Äxõ‘p ÿ*jB8Ù;?µ*¢¥Ø_„¤Å¡.}륚ÑO‚ ®~Ì9¤]ÒÂÇà:Òª‚Ã/Â<쾆µÑKÄ‚VÖ[Œe|-_:4 —°e?„“º.™@ 4Úd ŒÍšZóæü8£þD© ¢Žà—¯ ¼Ë¢Å‘Z×ã+ ¹¹§bb+/¥ ǃ·Ê¼EäÚ_‚Ø%{,²êx yÇäcø…ŒNT±á!BÜ^Ž›ˆèX{†P/ß]æ¶ia)cùÎ2uýwx§M992'ÈØ)UÀ'§Ï÷_Ü:šV+ôöR5öÑ/ZjQDפ"à‰À$%ä,‹‡¾ôÑnlâ·ºä›ûpCujÕ·‚¿c‚º ›‚€öÅGħñœJñ‰C"[;å*²á„q«GEÈ ;6ná˜dBO#ÑÃïÝ}´ZÕ:+òm®ªØ4Jjø:à®È‘=»¯þ4vD8G O¦d³Û½ahóìëI¹¾¬ŒÌ ÖÇÆÑžïxö±£SÁ·_nÜowþ“æ~W ;—<ÒYŽ@àê‹€¼¦^ Gÿ|íJ‹G6Q–“Ù€‡0‡äÔcÁOÂHT¶…‚ÄYåé!<ãÉÿ!ëÊñ"é[°b6FxHì3ëŽØµö¸ßÞèòùê)(·Â Ó:ÅÈn˜*[mËîg1ƒêçpФ›U¨ qJW¼‰¤ Ç O¡®˜4éïö*fÄê»ýê1Û§M|€‘ª&Ó'â^:Ñ*Ç/á0C¡Æ¬ýgø¹õt>}GEDU²Ã’ñDÃ`§eh°ÔU²ÞR‡)m -qmÂãèÖfŒÂPoÀàö‹“$í ‡’!-ÆÐÆ0¬ê[fì×c=óûnÓ¶˜ú1Fð8Ú¦Ñû‰wðÔÒ¦üZOáÍASvzxÏQüñP~ã¿zËø;×ñ¹ø¨]uá=5ÃÊø§8¢xØ»ÄaœD¬åº¯òÒÝtX#?Ó †¼½$Ãí>M¸rs,BÄZ›WýôÓUˆ± x=@{dü¹bHãJIôRÙw/>Ço1<5éË“X´øðùËû5Î1¨Ì.·K??)žpU½õÒ®Ó¥ø¾Ð§Us¯í\è“Ρ?»ˆ:½8ðãAZð }fˆ%?Å”xñT\z覠ªÐ-.õëþ"ÙŒ‘‘3ŠqʶÙìiðýáé0ÓêÅåßjJéÿºØ?"ièÅp¿î~l[ogJlNdM1d,œžºâI,&àã-ÂÍ+a3Qß¹çÝ%äGøÌ® €Å¶‹”‹žEïÚGL¢&GRhvÍ£7ÿFH¾5²{º4>#-Š@~ز4m[1Ëy×ÓÐE–ZñHÇ‘pSª’úãeýYt†¬B ô¨ 1te ºûçSMÖ´£Ôd:0N£š<{µœ áV¤~Û1´‹PëË£ÇÛëú7O W_Ʋ¥)HÀ=„3¶ði æÔ¤ß129ªÉ鱪ëwíÆÇœ¾YS€§µ@ è(®†nŸÅœ-ê_ÏôÙh uãÔBŒÊ3nćM^ü·1ˆá¹*/çãÞnò+u/0JíÙ• \<\Ø7]Zx>|4€ÄÏ Ã: Ï´‰hbE@æåŒ© Ð|#;ÅŸ©êüËS@_^ŽòlrÎðò䕹ÿËO“ ÅRжÅaîüáÅðÝÚ8Tþ{ÿßoCe©E·™ø*ßÙ»ˆF£ÀeúVPôª»°Â˜zÝÄöãËÛ£Ö˰‰!)Óš6êÑiUb/M4oìèC«ÚýJ<óÔÍÕ‘<ÌÆ¿}lÔ‘µûX#úd×î÷3ëK§’*Dí3 i“›Émñ"Ü ËÏ ¹©wE߀Á1VÁz†C$LƇC©¯wcÈcC`XEC„‰7È÷fmS¾Â.ˆÃ°Ëd=¦“õ5áÔ¶»ÌFúËXnq÷„†jjOúìú“f’qÓ<”—Ñ&œt/ß †êˆ€³H©—ƒfëG"4Ü“’À}ÅV­k °€—bÑMâéÑ>Sr÷»ûPÆÏ¨'9‚ Û½¶eÙ»l¦êLÜ6÷è> ÒaȃUØ$H¡%#/ŽýØä#î©7½zßqŒOž6€œ‚ꋎ•Tm)Ö:¡€•ü éÐ!ŒÏVÝÒпÛb﯃qãÑîü»@½tÝLí±1¨3nAÄ1b>º6€%Çy:yê¹(®Ãs?ŒZVTÕa¹ß>tùP¢¡8„•¥ 6€§]2£¯ÃÇL¥Ù~ ›€F§µVÏܖØšˆ£»7 © §®²qøh+óèCÀ@:˜9ß®/böˆ½z-,Æÿ_8,…ÊSnãE@mHXSïL@]õ|15ƒ,SÎïØ^Þ©£¾Íë+œ‚(X@êÝ+ ž[Ä] F Cgú©Òä¾qk¦r 8twl¥úÏÇw6w4JÖµqŸÙûá%,¶†F½uéËÅ7ÜB¦aøB^ïd4Oþ9ŒcO.1;Ý D“³öôö1s÷:€zŸk7ª€„çÐß\Ò¤l‚Iö«kéâSò£ŒÉüþ`‹y‹Þƒ…„%JHq¯îf¹#À¶ª=ÓÐNÃDœò!ðî3¿¾«_ üIhÂèÁ°§<…Á è*ìÆ8^ö9œÌ—«®òeü?AØ«ß@dZ’×°ÜážçD‚øïk­8þEW™mröaUÇQ-žÓHr ÁåG`”È+*ˆýσ:ÝýI«´†]1úx]UÑ©/¿»· ÃÆ r™ áþ̧>5ë-”‚Å€­w³¹Ò»û)ß®òÁU!DæèQhÙGר‹°BÚ°ÁxFÈ-"Ö_.7˜+a$ÕcÜ!Ü´&ÍÂl_^¡ú« ½ìRu±h£mß{É0ð©‡ðö’Xü"%ÜÊè£JE?û#Îbç.Æ"‡ZãÃMŒ¼'1DbZ|v…}Ůɥv-·/W ÓÌðš&ØÐ›xÄAý뀇ˆŒ¤4Ф#â{·Šd%¢¡y}‹Å²Kw•rËtxb}åÒïáÓÅøâMX€öl{×µm>½Åh^ºõ­U0ÿÞ*‹í‚#wE%€VŽ#‡9<G.@QÂà œûØÁŠ„¼lÉ dÓÖàŸÏOfN2ÚXîì¿Ë/>¾•ÜT)› +击ñöσFóÑÝer¾QÙnhZL šcŒéª.ùï>¤e§H&H„¾P "šcndJRKW~À±‡×O!oýU™}ëÖëá7POä-¼¼áœ ¦#Ùº¦:†þ]ÄUÉg-î+$Ä1À°Œ á¬×vŠ1VÖ1 Ù]ä“XhPD¨ê% M•9ÄÓÉžŒE0Ý?~¸‡â_ˆòïRH0µ릨‡u ±RÂÔ‹ËLÎâYPFæ ož×ÖÒZ½ÈY«”Ë­ÿ¹¡ú2Ã`\/íC›±H;[o¦Ìðo’^ ¯ñ[†+“§ƒ@iù rsø…9w 3i3Ä·ùp9}EÊ ®;d‰c½ÊÌİvî³ÓU$#5šF¶ ©SXÁÝXÎ=Ëàø„ÿyøZ Ê<½¢¡Ö€”$ü•U‰ 2^»Ã|é9Ïí•EfÅ! ½YCì°ß\e<&OygeZ†‘(ŽMì‹o ýæêuîO9õâc¾ZëÕ¾$ÝCÿKÃ}U=¸Ùð謖ánì»Ä3WzµmrœÂ{-è7ÝŽÁ8£Þý¥ã…2ëì—\f›¦^:ˆ†HIÉÍ ˜Jäꇉôí9Ë:Y‹Ë(ð‚ÛåÞÇ·â¬ÄkrKñ*˜Cñ\‡!99ò] þ.¡úãfE{Pu ôT¼¹y6/¡OÿŠdXßЉ8žèpIç[Ül-(l €ëqx¡|Xü4úAîÏ骋£rUH^± ¦CêòíYÛ•#çpåY„ÜbpÆT¾ÚÈ8øE3›Ò¼i¸Íã²À9ˆ†+T& hèfÅNnê˲bÙ¼´ŽÖoI_þû³›¾Z˜£ ‘ð “zØù˜&Í~/3&`NÞm /?ÃWž½ÃRy“§'ì=kVfÒAÚG¶¤GÀ£Ñ×sBs3‰ÕÙ-ÒŒÐú–#KWIËï8õÄš7qÞ\81?“ ‡8l:0z½õwUÎØíèsü²o6aÏrºqİõôºÄ*./· =-º:îîì‹›Š«ª)ø’KO©#m;Âa| ý›—Oææ›@¼YUbÓ·`c±‹tSœF±~¸¼Bõ‘/ó—W/õËXEýòn÷<ßZ5ÛX‘îo².†‘(ÿaGO•ßš22QâfŠ7¶(ª}ÐåËw'è÷“e·ž$š˜“‚ðÒÝ® f}»()BÉ}w žœZ¦Ü¼B˜÷w/¾|ãúÙ«ˆ~BLº óZ5‰A* ”Ù„ ¶=+ ó½Ÿ.Æ.x쥳¼­<7ÛƒŸ¦Xˆp©À°,–Å*<Ã]1‰›R¦ECkÔ0 «‘Ê@™eˆGÓ†™W݆´yàIqcN­Bý›Ä=ê_™žb©U ~Œ#ÔÑMè}8‰ïÿò‘ª­xå~ßýg™9¬Ýh ÚEÌ vaq›Ë|üï&ÁMž¢ÓUCFx/a`ô”|DVîûñʯ~ÜEgÜÄ`§òÌÔp¦§¾78oÃ8@µcäÓE|X…a½ãMuµzJ¼ók`ôí/{ëm#’’¬&?Õ.¦õ¼U>dz¬¼ü×Kmx{‘OnIÔgÿÕ gŽ#»ñJĶãöŠæ*ÒÐ[¸Û3ø”˜VÄÀe×f14Aµ(˜ƒ0†ŠöO4ìs/F‚ÔôxÌÛcüŽ0ý'Ö,aH!Å3Ö ß˜ÿ…ºWعe*^õeÝ‹ßçGS?‹Ñ?ýàp”èð\D}c/QïÝ–Ž–0·CH€’E°y5SsB–§N%LF†.¥ª¦µI1’¯ÔÅ%•sñ;\…z•ºK—^:š#Pq5×ПE<$±’I+Z*a£C0™…ÇdWLéFªäÍAœRŒ&©$æ^Ð("^=Tøô…²¨¯Í eUœˆpŠ-ãb {ñ­{éK^¤ÕáºËçÀ™{i uŽš—?U¨”–µ–L~BM­ßÂÜS:Ñí. Ã&…wÿí"“H¬SùíRà&\ ŸÆÕEo®0¬/c,G“Kˆ¡÷Ɖ,h|™(rÃYÇJމÖº‹Ê(»ì;ë¸Ä,íö:«›oD,@Ð’À}#{à­¡Ý Ì"²aïýtÒf0DÂ5õSÝõ¥ŒË3>üñG|ZJI™œû÷ÂZ™ú÷Ï]¡Bž#—§Ÿ„Óó[Êaµà0„ÈúÓÿŒk6S€Ô2\—\Q‹¤kèõã­»þ£ø§ÁÎÜ]«¹ðG›O¦E»‹:öv¥/3âS‹¾úôä˜X|{N†#wöÒ·ð·;\°°ÜŸÚ»ÅÕóÕÑœBî#`†jU f*!©— Žìµ‘Ÿ\0TÄ{߆¼ð`¸raPM.›3ü]ñÿgÜCÐÖïšÚ¦antaíâ—IÈ¡˜U‚e$3‘›•9s›UôñWÿÉÙýøá#†Z,Ñ^ø(3¹ÜxqÀŒ/¨òí-¿*YFOˆ«?7h8ƒÀ–$ýÙcü]Ïkúõö`H lC˜'c`ö”!›¤Oé«[@õêœ\ßI³WîîËÑ&æçP±7›»öÑ Ó p½®@QcV£D¢C=÷¢­#Õâöç(c8^MãzÜIä@&oAÁàoŒ¡?kC ú0k=¨ÌücÈL±ÏFRãÄÚ*«àXCh|Z‹ÕGýôÉ b|èKðÌ#$´ƒ^gÒ[‘íV@ \ÒðmËŒ8ðÙp•ç4b¾wU:úˆR€‹àfrLÄh&K¤Ç™1æç´@‘pWÏüæ¥|XÝRŽ2T¬åôt.œúxË€tH€ÞBˆ½ôeP<ö¥ÿþÐЗàøsÇ-Ý$\ÕéZè§`"ƇËP tæˆvPñ_úv°«gê Š4‡Ãc¶ª|n½µ´•Yüw$p¡ú¬[âá]>§F³~úοkzl+˜ hì™MÀ7¤q@;Jk š² òo-ë@X„™HV¦ÉKbÎ~*Y<¿¤2#œÛ…Ôl–t”‡ûÑ`í¾-„ :Ê'¹eú%l,Ÿ¦a¥€ø W q)A!dMD×~¡âƒ>tvo;‰™w˜Õ ¤ÐñÈ@¨Â.øy=¦Ÿº-Ü)ݽýGä²0´¸Ÿù|põ DWùá1.3¨Æ(ï6aµ}yÛÔ6#@4Ïæî׎à'†¨€µMN¾G¸Ÿê7=ùìXwWèÛ!\ó Nâ’ý(LI—$,×r.p’1jÿïÞ†D…1¬·»vùÏfE|´d" C ÐöSØ®Ôoßͤä›ÄB•9~‹›>bĽu]‚R`³€™U}ÞÑü¬è0e)q¦žU“`¦ ƒö"ÆîU¯`>Ƥ*V0¤p%“>«‚}#ʽz‰âÊ îz±xèBðxûO™m<‰¾kî¿» #ϳ_kÂL ¬\…°Ï‚=@#°*l;˜O_qæØòH;N1ôÛ]0&‘7÷“Ý=fŒ#oƳŒ‰Â_ µD&o‘jÞbLJÓ7wáñ ’êð6IÞ¥!žJtÌ©Hž@—jY~’<ùvQŽhˆÑÜîÄ–åò4¦N‹ 13Ð|”±ì§«ÒKäë0ïš=¸BÀ „KPë"¢9&¯h=X€¦.CEÀj¦ŽŒÄûî‹– 2g*FHÍ›@%È„ª«wúŸúˆé.È4ó£È¬u|ôý]áˆÝý÷NáŸÂÐf]-7n‘úœü™ã—Ô7ösÃhå©ðÕÜ‚Ûù„`H¸ÁŸ‚‘αö{/öZ"hÍ?ºMÜ-‘}‡b±@ƒƒð“Œ!rÉî-¯¹ªw¾õê#kq‘c.2bŠì¥o;úÝBk¾çðxÌà!TeL¶vûÅsŒª N5Uµ”2Ë>„™ï wãÝÿûòÑõ•Ч%!6ÍB”‚³Ðþý§1&ăçøßM>gEÞLÙYî/ɹ{:KQ]Åÿ—`0Çæ½M$|àåq\ÑÄpo0· 5Pu¦îä Æ³~úåù¼…Vï¼ÉZ„น䨢V /)Ú黽$;1_tÌŒÙâHë'ßbq¨üZö,lÌ`¼c*÷òsü6µ×ЀÅ8ŒMË9:ÍWÜ©vê?$õÖøs`Ûð•Dž.X‡¦ÞÀއß*žÅÆXÃÉ–<ÝPÅ™#Ë Ím¨wP¦õQÓ]CT™0–BªNWäÉÛ¢ÍÈ&£íôr6ã…#f¾T¼¥ scCÕm处³‹kxWD;Ä?gò&\u·›,g ÕËèeêMØ)cš€¢EŸ”à‘×f~?*¢‘0a’ Ò» M7Ä–'N\Ëû-¼ë—þä—2†’k‚à’݆O/ÍgDZü˜KSžÂ{ ² AÇÊ#:§~×§2«d:± ‡B(Êý†„»¸‘bÆ]^[o=¶€1#µ*°Oá´Jf]Ä5*8 |%CŽ])÷'†Ý´’e7wÓ+6œ=ÖµÜ`»ÉðööÁ¶xsáëtúÊ¡™>9©Ž«ÛÊ|ùºå8Ÿ…ÿ"T0ÚÅû4 VI“b‚ÿ-¸û| •Ññ=ôêÛ§Ù$\àµâ${ù*ˆ)`M…#–§¦À,Cj©‡|6w4ÁÅŒ{êAa«t™žû‹/aðç—ÇnÅÓn‚0Š€BEáGs¯m:ôÒ¥ËÐÔ§ùìp÷±á’Z¦^À·6¦T‚sk0'u+X;$R2IéÖi%°lc¹Óב'Ï‘‹.œ&È.“—s½…ÅÏ´bÇàÂ㣘Ö e-´Ægÿ½z«b#ÊMŽWø9ôáºRJn6kï§‹9j„‰³#ZµÞ”k™7·ô¶hü ÿ‚zÞ§ÐH†{QÈ"üÁ ×!$7Òh|4»Ï¬œ—NÂÅBY×îC¿”x/ÕÑŽþ¿Vê-ÀUÊúD“¥x8 ®\¬H’Wô3éÛéÀC«Ç  Ô·P”î2œ·YÒÛ.c¿i²%Ñ% ¦­òßLj*~ôëšÜhRòzIüÅõFõéŸz c'ª»ÿSõÝG>¡‹2 ¾»º"ãy1_F÷6ܤ¬^Xs/àÛÛæÒOÏ,H»MÐ3˜Sˆš­8ÞG/qù_}¿2ab u»ºÄa€û®Úýë3=ŽtLSAç'}».¤ªƒ³q›AÈdš3÷çD«Êqûœ<ÑJ }¹öÙºíÅò f -ñè•MªŽ#HôöØ‹Öpròž ½‰x¶Ú•­±”-8™ëìàäUÀR   ¸K×éR,ãÕ€JÑ.%žzñWäÂ1ŒøárO\ç20Gy«²àI©·#SöÓË÷£É[4 æìÊ\vã³ØePJAh˜KO NZ À Þ†w7‹±èbT ¯;õSšúƒDî:Ü1¶ Ó¸GBS@¼ÊèFf²J!âWç:Ò™ŽöwˆŒŠç‚ŸOXÑË‘{mrÕW¥:6fáJVûÆ€‘y bY°¤(öiÌøR?ù§^žVÉR£¸G@Ãc ˆ¶7ƒ&“«‹Z¾Á%ˆÌè<f²‹6ßû¤Šã@ø?ãéZ x̧x ò<~T€Ö†jÄϯz¸¦X åêO5ô—þÕ€(ØñC u&nó¸£~—s¯Ã6^&oM"1èhVÚSyÎÒ,“Ӿ貴»=â3ÝbÖ¢o1b»Q:Æ…žÇS3䨮±8‡F!ù‹0樕ף.ßG/`Á½3†%6I©½u[â‹8ç囸ԑߞÒ@Ù…1VkÃþ/(÷XQ‹}tjó1=v£Læ­I:Gâ,B@ãC|öJÀÒu^Õ„PF[uHð>áÞÀÁΘòÌ—7a‰jýÛÍœ»FExUCöñEµö¶F7ŠB3ãà=p ¦mHîrÔ\ £Ô÷¬„ªáÖž4QöëqÌa%_ˆSò÷Àô=ü:|¾EÓƒ;'4((Öa½ž]½Ô…8 ýGwaÕósêÏÄW7ê‰IƉ ½ e祣;†+×ãh¨âø»»VR?]Ä;}mXiªÛ*1HÝñ³Ÿ%%‡Háߢ{xŒèdÓÞÑÍîVE>sƒwŸ~ôðNayQ¶% ¾!òŒ˜â;Ì&(êßúiÏŸI€?S(±E•ËLìD£*tž£ß_¡5tèÌ*v…Gñ+÷ñ2õ[‚Õ;Ë¢U=ñîã0ÕÇ Z{š¡—ˆÚ¢Z„E쬠oá7€1 Ÿró!6Ðæÿ~kÑ¢o¡ke*4+Fï³â ƒqðÑX=3ü)Àù7Uvújˆšàî”*ò¥ÃõŠ ŽvÌF†ïrù}Q]e¯~~O?hÆâØ‚ª€ÿl{‹UèÔתyuÝ‹§ñÞ«‹B’NûÀ±I(¨¹û.ýСSßîåÕ/;ð-Ü„øw6 p¡C¬-®dÌq3• w8¾t‰Á€®±¸{J¬ä%؉$·@zúæâ.”ÍÖ'=Ž—0@ƒ\÷>"ózÔÿ“ÞÂ=÷öß)¤ûÕ»zS1*eTzvgYMË[¤Ù`ÏŽO.Àë"’JÛá¾~y&0ÓaÞUöãVžoU/0weè{«Tó­03_š'ªCÒêhœ…­ ‘×yŽe–2ôÖæÉÀb岿Cˆ†!CAáÁí€96pk—ø¡ga N³»+¨Æ·kŸ]˜°.þœf˜Üƶâ@ðéç Tí5yˆìbH\\"UØ}]¾W¯K˜w×,Ãßèú«ž™>‡ ?>鿵ô6Š=|ªÚ²êÍ~zÍ=z‹¾T±ˆ?jÚM:[Ýl„G1'£ðêÒ@k%<EÕc{)Ðß"’›«Cw^é§~xKïÿ§S‹è‡I|Übž®1¥üÙ=â-¼ÿlNaxä|3äRrA÷é?C~_õú‰¢fô‡_^-ç®þMÜuln^øX° çû!øê³ù'ýÞ?Ÿ¼žûj‹Ê»‹ÿ¦{ž°7ù°Ý½‚®ÞŽK·| TƒÞFDÑ_íå©‚ípu|5ÊÀ­G¼OŒANåéœ.Ä7ѸžBdRûrPl¾±3kª7y4$½¸A{;†¡cyùÏ]ýaGÆÞ0î®ÉKP„Ä*òð©Ç¿p%DnhÒ=ô‡.ÆÈz£ ¡¸–÷L£okå°¨NzñÌ€­x÷[ú:ô¤2¾‰‚ ¤°H~ Ã0¼„"¿ÐCŒù¸ŸÑ“S2‡¬;ºÒ)¢¬v ©¿û Ro-©úºš#ÿôÆDå ¥/Dº×·^^l#6­–ù3´áÐáÅÁƩϜYF;³6+ðhϪäD«È€¶ø›}82Xe+ Ë:|BZnCw,X5ÂËϲîUü“žÒÞ½Êbà™€h*1,¡Ò8MÚÊ={~AŒõ€u âä(}çU+õyl—f·xSQ˜/½½ðžÆònˆ¨T ˜ _ú¸y¶4Cÿ'‡/O8±Ò݇Êäzöl9Q|+‹b¤¡×¡ð-Ìr0Ýhv(ÌÙUðX W{µýI$0—–âýG†ïÔòð©_ÏÃ¥h=Œ"#¾ÛÄŸÁÔð$M!¤#¸oQ±S_ý™˜Îerõ]19W7aÑ…³Ó•Î.ŠêZµõD$0)1ÏP`Ôt™©«$ù¶Ä vÙÈÃå`ÕHõ Öþ3x®ýû¢g«A¢Ž4' Ê æÎ1„¤ébkq»./›S§-¥§†ÅXTWo#äOõÓV¿—­‰*[Ÿ:FPQ–@&^´#ð ³ß~O·› §F{./î8í&é÷vE™6dk<æîM{x“Ö!±ûO¼„õLU»HòeVòÃað1Izë-XL]>bf³% 1Ò/‰äLØ Ô$·¾Ä„¿©ÍÒÕOjô.Z}äPÍñžjGíZ´ë7î5Ž7ô¯"ïn†IÀÅv&dÈQ†Kõ"=ÔÒ!e¦¹™ø4Èññ‹ä^>½q…C;Nì÷r¹ìíÈIj=žÄ”¶uÇçìdÀH_§p RR¬K?@ÄSýØIè&ái|ŠŠC´IXmD,sëãWw>×ÙOcnâ-HH«Àö¨N¯l!®þa08ÄH7ÎK§n} Vf´ÃÛ-ßùÂà`Öá9@+ÅtæìE¦®Ý8:i_j ùñÁ‚Âñîç’y>Ö “Ð p„C„¢bÓb¯šÑi] ›Þþ¾‹·žÄÔ¹²Rˆ!]ôÒïRÿ"ÕnÅê|ˆPã”IðîÊ€± k„±e~ Ý£Ÿ«䃣¬§º.?>>°‘ÔŸ©žÌ¡¡yèO"­¨oYè9ô½š¬bhFˆA)—Áå™CGÊ€›|¬©‚„éÆh* nê‘ÝåÝzµoÝ%†XÁÕ™wA„Â]G×&’~btŠ1¶KD?“èž’z¸ Î–ãjBUªÌSapON_Â… þÞÞ’O(©Ì4V`èhHF’л«—"þ¼üê«~X ZC°ÉËšêP«VË\€àÞÇ)vf«‚L]K\ÆDªð-Æq]Tu¸| ¢ ÛäICç§*=’ãå˜É*zÚ™/:~Yì0F˜¬LBþ-áXžèá!Úúh~²Þä7̼Õ ù<‡mì'Wˆ|vA G¡º ƒÏ³ëȳßüᦲ4è\¿_‘çãÑE“œI 5lx*“?ËÐ:ôŸÝÝ?}ÛA­/Ҽؒ¹ë±ø(æó­I_>Tà‹#Y^ ·ËÚ«—"·^Ì“`¿áK(×¢„›wfËánÌpš…]h”õ‰¿5úß?ÊòÞ»& §ˆ 9EÚêêíy<ÀÂE„iÖ_vrvpÕ¹8½Ti‹ˆ‡@ „ Ok³Lƒ¿ ½­f^$È– ga͆Ãz£ÔD¢ÈBÝÑŸ ‰òé{qrý€YV€+Æz·ŸÌ‹!õg¤ÚåèAl{æq\¾Ýؼ|ð}ºNÀ/ ×ÊÞØÈdBí! aŽXË {ñd7çz¢ÄwrtÉUPü­ÐÈVÛ4ëA§·È{ÆI“ÊsëýQ«f’ÞS¶àdL…æŒëDñ5Xý(E²é9¤$Ø“ÆÐß~y­‡HéCýþ¤‘Ô} ënšOH °(Ï)é¾â €„G"Q=@cÕ"`ÃlåS8kÃRL"Vá‹ÿæËX{ÄjsWL3H›}ëNž¶fîÞpòBÁ ëÖÞ„hBqíG3‡Û.¹¯õ’Ëê¼Êè½Ëj¼Ü±'K:N<ß@‘T‘U LqEf@4|`,’~wuQGЗ'1¼çÑêMjâ^ã5<‰N‘h„˜ú˜Jôp%áqd Ä‹I;ÃÀÈ[†ßí¬·oÊ:t üòΨCXÃ`à ™iÈjÀˤ.¨q‹Ê`äèï· õhfcè#„šE‘0³°ù¬Öes‹bÚqjuKH5C+Bn]‡«mÍÑA5ÆÁ¤‚ö¢ðkæM,º‡þQØEà€`1˸™ áaÇÕÜùU1ðšµ÷ ž_)}%ª}ëKêÜ9Iú!ÄœŒÓÕŸJpÄÙc”ÚîOÚeÒðéY™p‡H™!í‰rÙIìÂL!tÏÍ< jîïCÀÅÒ6âNŒ$c'Mxöáâ¶:ºU(Ø(~?‚^szvÏŸ${8ˆ*Íf8-æÐÑKæ#d±˜]Å å“÷UgÏÉ“I»ôû‚C¾x |ëI·a"P€0±°*A¼oáºxt¯ ½ê¶ì1;û÷n®2*+`;®Cêº5!s¨ðÙ˜dÐVA°^…–Zb]"»\c1Ãâ8Þ.õò® øuMmlÂ'ëWÎ>–øPÐx3¾0,ªÝªéV{W×@µŽÌ¿Cµ»|@}z%Äæäú‘ y&¿Rhî€åóÒ.%®byXDWKbôׯ¿¿º‹yÞïf0¾rW\¾CCL½<|Œû|ÕQOí] p6?Á?ù~”§òDvýi{poúáaV)ØËû=ãÜW»H¾ÁÊùÑÛ¨3™Ãu˜mŠÓ!¼Ãʼn¥¿ßî[0±\<ç ËgE§ŸBñjûÎ=¹GŸÄ³Q™%:|ÐÇ¢ ^ÅKÂ/‡m„U$lD;µº¾º¨/L‡šÕ:ti6+Pfš¯œ¢•ÍY¡+›Ò–Ö–Xú²ªutz”F>ã3?ò,¾øBƒ>^ë–•IMƒÿáÖíã)Âgâ[[ 9x' •Ю½÷v}ÙC2~"iviÂó7î<¿Kø¿tÇ84 ýU Ö8Ô‡É]¥*ḹ\½°A#¹ÉXœôUÄË発¹Ji¾ …÷¥UaÆïÂŒ…öéeIOý†!£‹´c¾…ËK®Z–$ÀܽE«;:Ü îÞ"Oï} KrpXLtðÊI‡Qßå0»>6ú$8ð,Öâáa,6yq/B Žë_áÀ/OZna{- ¥îåã0jz•ºÅáøÒ­Ÿ’d¾Ýæ>òðöߌÐÀ!\Ùµô“¹1cL0ž†2xÙÖ!C¤]ûÞußåŠ,gnY˜‰omõÎñØÅK"ržÈª«F˜ûc½qí¤q môñ .¶±€Ê‹ &ósA’cYŸ.êÐèc×'j’:j>ý©J)KžVn̨xêlùÝû T¼ñyœtýgÇ<Æ2cr7¿÷’"ÒbÖOÅS'qΘAçnžZ%ŽwZIp‹ŒqˆT€‚qÚ¹\Ðb_€NüI‹Á\¾ñ·®Gð̉¯=½ãåŸôQðÛ ëµ(1°Ú]Z!T™úÿ=—ÁPtZd"“̼û¥ÃäX^{7`“=§¢"º·MPqah0‹ˆ°¦`ÚŸb>‚ý-¤¨%kc.&Ù,ÂY@6¶‚½Y °ôí¸òYà-L?f3.æGCƒ„©ŒvYðE›—›÷Ʀ{ºR®]ͬК­óôfZ³t8·­ ܆…á>·x‹$Ë—Ü—ßòðÑXÔ¯¹ï—bÍ…‹º‘õ´: u÷! zDµÊÆg¢À…âá05¸4›0Ž#ᥠ.uHl¿³YY¹ŸýUérˆAy} ÁEd[0ÐÉ„M¾ tÜÍååP\Wäè+T õÙlâŪ”NcIrvÅ®Œi(ÑT˜,Ô@…2XYü 7áÒ.­¦mBÉÅ#¸ŒÅÝfïÞDÄ2M.äªrx‹pˆ˜‹ãQH7Í@hê%rYÞ‹îMB˜ °YpÝK¸áU(ôêƒr~T»­%Ñ@|ý9Ï.n ¦ˆnáh˜kí™t¼Ã<>Ú§·–> __´z.?ë#(C¸“èÀ ­ªî…LLMîR cAd¡Í”€ÃÐ&‚é̽՞ôlåÅÕÈè·Eóà?dÓ&× å?„ˆëöVedÉq!*YàT1Ø‹Y@àó{”׸ÂêÐ2†»oI÷п IÄ*a×Ö½çìyŽÆO—‰w¹”¨òîå‡`5ç‚È*‚ÇÖÙöQrk9‹é¾c¤ŒÇBÔäà@™Ås ªÄó r{ ÀRþ½MË$gòM¸úñãd€`•Û¿F.Ü]Ä‹½QÑ'Ö1Sæh8 TÏ–4áw—‰´ÜTqaªN0ð'˜ÄÚ…÷Ç[Ïš´Ò©·"¬áiMžºDŠ 0Mkbí{†R¨58L^†È’aL3Áï}»ß=DlfÁ€»¤.ƒ™sÐÙOŠBô6슈¸°j¥Mш–]ÙÜ÷m¦üK?u vÂb†¡]aÆè(ö¾Â!âåP„{«ÝES¿­øp¨CÈF‰ ï¢Ù@I4:*Yõ{#Ÿúúo@Î}_Rz`ê”×]À"F‡QFÃÏJb9.ïŒ|žóh¦Çu¢oþ-k?‚«¿~@»`qu CïêX7èo,½qó‹8{ù b‰dpÓãœÍ¥àÖ7)hr H§¢ô¯j¨rj1Ã-«y,Ø(êáJúNqw÷§ÆMzÍâçÄÅ $_Ѯџô™X€WѤo¸»ÒÐzç>®™ylb`†í›”é·|'cî›Ò3¯ç#õÚªóê ƒnûôÏX…uHÐ~æ¨Þ–¾{kWmS@6ë“;úéPÝ;jWx—sšÅµýw_çc~DVö°‡ß lÆËÃ×j´èú/½Ò$$-s¹ÅkiѦ¶¾ô¸¼êú¨Ã Z5=µªð–ºÔ18CòšçiQ&¡ 2kÍì9Þv˜ga!Å Ž‚v±ºö¾a ™Ý½á [Ó¥áCü‰ª¦ØtôR‡ ¾´ãIkÂþšÎ'Å$ÆL«ŸÀ[`êMZ"Ц„a9›Qý¢ö.€QÀAbN:!q sÍ ­¾\òÝ¡‡ñö4‚º„îùôÜFÐõgv%o! v Ô_P²NW»ÙøQ/1ý¾mïm‘ž`S Aá=õ¥Amèî從#õAŒÈÕ¾ÁR‘ä(:Åœ§þG$ApÙ‡¥Û¤'¦Lhöã焃ïxîÆýF¥P±3ðº(Ü žDe!§‘2fbˆ‰ÉÄÛTLZëªAž¾ KðR¼¾ú‰B<ŸÜ¶=Ý ~™~6ôÿRÎB‘íǪ Nmb$* sI¾7ê<Ýü(!5>CžDê.*>ý‚®6𨢸`»WwnsBá ^J¢Ñè>¼ !׆_f/T#´UWçÌB`ž-Yúˆ|C®³û¬ÅTƒÏƒ]³tP¢¸NÁ¦ÇS6@ÐþKq‰¢r«ùPý™·(w5eƒÃâË}+!| É–q0ñ°„…”Up¤ú¹ð¬‚‡­JðKR—ØN.èãÚP]zÙ³nBN’ÙâéÁÚOíóØ…‡6UaØ%Z›Ï#¿&=Ó£ ¦ò¤Õp^])ág™¥ÿ< êܱêmD¬| T µk(>àøY¹Ô·X¹œŠV`x÷|º²&=³Ú‘©ˆ@IO-HgöYB‡„"êjmÞ&À5ì ñJE*$Å^¬Ž‡/ÿýO3Å®> =å”›8›Ã-£•8ºä°„{ wÚgV^h¨i<¹j—7o½xÁOýçæ‚ó[ô8à²>]ÒÆÅÏ\øiòÏþŦ]Éã©ÿDZ‚Í×ébêeq*斵ć’”øÌY³•iXÀâ2tzcb¾pªîE:Ž}6ý5®ÉOCwÔyص¬‚ëpöÏãø¯U†~îêª$ÍË0mú´x(jQ8¤É©bô·hÒß}EÅ­3¼>ô !¡²ìH^ £ñKÀ&ª‹úyÉC¨Ÿó\L¨q(L“Ûœj¢¯M“/Mîí7^•T¢¤©Ç¼ƒ „¸{ ÎÙÕ ãò#¯¡~,¸.ªñ"!ä5«0ÓF!Ítµ6ÆË½ÆGD,#ç aFbP‚˜òÈ* ÒÍܽ`OcáŒsbZ†RˆÈï¹oAf­“9ðµ¡>BàþV-õÃÅ9.È7r\©Df)õ;v—„/£Šg‘0-ÀUÝ ñ­¸ÂÔçøˆ”[,!°•ˆÊ ´ SÔObxJ‚U'a"™Îߺô­I8̯ȦIN¢ôì*,¬HI~ õ^Éè»ýW«Ï©¿Åá{}fáD Î_>Y‘böÇ·0îžõ›üpŸÄxƒäÁ¢DšáltÊ:¦3( ‹1ÍÝï´vÎ<\ZIFüòñ÷é[½¦DÓ7Ïš+ªŽHAxR!?¡”îþ®x},ŠiI×ôCÿ»—ÒK„^.A 7½úî¹úW”› â Û†pÔá¤?ú”ª/X[™y1Ð3éˆn@v•¿üÛá`M¢{?vJ¯ŒP*S„GÀ›¼ ´Äq2î „Æ¿!É™Eè•~˜Û¿ZªêbwË@†Lý §®!ÈH¬­Ëýñ‚Qâ+¾ûSî,‡«¸˜3ƒý>ú¬ŸE¨8d#¾ûÙKŠÙ‘$»Fo$j¶ûQ«%ðîß+#çDz¿»M£!EŽÙÛ%ó3ív© Õ«ós€““’‚UbZÀ‹ÖG=ÉŠ³5•,f²Kë%kÓob4¹˜„¬½æ8 ÜÇr ñVå8¿]ãH—®ÎCö¦=¼›Š“”Ï‚[àiì H•£FCÿ,üófAÚ¬0»”´”y -Ùú‹—õÚX;öƒ0ì9õÑíºôåÒùê1.œµÓš; ¬ÛåÓ,$4GoûU›¾E<Óìïv¸¶yÿàþÀ½º–8¹–Ç æÙˆ}ž\q4{Ño3‘é2 ûw*ŠÔµ·Æå"qÒæCšR9ÚbŽWšMzwèÊ—‡ï‘ËÛ%Qᎀ5Øé ·lHŸw9&^á°ÉÇ:˜ $î@!‡Ù‰=UQ¢>=CÈê#©z¶Ÿïdì© ³á¶]®{6 ³‹º$wù“Ó¹h``PklÆÑA°óî*ôb–$‡EøîV8 €á«g ϵˆYmÁ¾«à“,ýFbíB5tù'¡Ñ•ˆÐIí I¬vbí.„ûAÆnïJSš†þÜe•°^¬¼–§ë<¸+ܳˆ\ Š/E“=Kæ~”ˆÐ‘áûIq¾ÁnÀp²O}ÞÕnx›û¯§‰G¡½ év/ÓZ|h`’OK Æ_‡‘ò/1ܼ¯ ÿÿËEÛÓ*$ÃÔ½€„BÃ.o#¨ çci•WÃÏ>*¡>Á–Ìö‰?°<äèo4iÓ[ØRÀV(²Oßw8:.,ÏtToæã&íùsVW[7:Ooÿ»§ØAêPƒ%RÀ×Ü› ´#vb¸Kñ•ˆV’ ˆ”áÓò<ÑÑc ’1ïärë§ÄÌ«˜ (ïQ†à]•îÇUs5°°ívUÁÏ ùâìñyMm_‚aí­þÆ%Ä>.h´/¹ñ ©”‰¹g2…%1l1GÔªVì—Ρì~åØmã!$)”Ñ—µøFy Ã㲨t7VpºÉfDÇçÝ›‚%_¤›‰@Üõ›v½€ÀÉáBÁ$F‘½8ë/ÍÍsâ:û®%B„Ééâ¾.Žó¡Ýž ö@‚ÀK̉{Ô·Ì˯ïð ‹›dÜZ[Ú9É ²ü¸úÁø™¶¬d6ß{c„:ººHûRYR} xÕ-þ%â¶`žS<îý„i”ø†Lw6Wm„pá"¿‘jñFáb©Ë㇗ëêwÌOÇ×q²žŠY–eÈK Ÿ†Œ€:`hS©:Øi0Áùtë.Áh5‘7T…õ'v1A(¶õmNû÷i›u‡¿úÀöí†Áð“Atiô%{ûv&:—!JžN¿'Cÿ¤`ï·nIò«ÍPòÇU$2%`¬Jv*œÏ)iHH#Ž×$Ñ,"z÷i…ÊŽ4XC1"Ç•üÓzëÅ"F³³ª£}+³e*†YˆSª”:ú» .5#ö Ã#OZ @6ñϨçÇF§Õà˜Ã„ôðë=üG‰£v×IºÅ;·@&ÊÅËbÇqÛgzêÛO+M<ÿÛ«gò˜È°º^êˆaL|ûYÌm˜RÌõ'B#Ajá %õ˜ü¤· šó† #oäE§Jié¨cD‰0H­ a®\vs=Š<·ôĤêcó·zIØÓf%êÄK&7˜Ù2<‡Ÿ“ÕVµ'Ö1Øß‚qs*Zƒºè5ôg}‰Ûj€.¢ñ_~ÉÝGE-¢Ø2_½æ^J°øv&Žäeòƒ“Ý0jpõ Y@ ®¦—àFyEp¶ z²a ëg°»_2 ËÖ[uÀ%,¬†âÇ­|;vp©f²¸gOv—MHà¹Ã3( &³`à··kª1b¼IM*·âÙA±i%|ôn´ÐºQËŸ‚ÄCìY œ ¶T•C¡;»øÇ=±¾GùP\Ï.™±U)ý×G‹»ßቆ‡aãÄ~NÞ
x¯½)Af²‘ð±”°_2o OuñïÛ]= a|Ï‘K2\çqQ¾b Søx~õçg^®Õñ%AqòdàZ“8 Ö¯6ãKï®ÈPÊ$~qû, Xx lº†þQÎÀ­5ú¿ÉqƒZ›muxôµ˜Wý.,=ˆÇ.àg`²dé^1Î*š%} %‰:;¿5÷|Šj&«Ü&¥€,ËÌáÇžåÄ·ö¥—°[< ']n5pP¸ìA€¬tö½Ž~bÕìqjlEªS®›¦ˆ¦lpú\š­H˜n}¹°g Çë¥Y‡Þª„Æ ÌOg¢ðÂf‰&ïÖ—ä¦-ãë"WÝì{5ÍÁ¶…2¼ž©ôÖío·vÑúTW(à„²|ü†‘Ãl.²?BZß5>õò-Ìæf`ñÄ9ùþ¥æ©w¾{øzô¶d ff±´ö.)Ëqt.ð™L‚ÕáÛpZŠ~ƒIN O6“¨ajž®˜T»:ùç™Û´Î ¦z°Á„¨äxï·ƒëjÿ,}IÎ:‡þ¹»m:j*!d–ýÕÖåëôxéÞ(¤è^(X7•~¿6ÞÒ7ëðc’ù_’zƒ0ìÃ<*pP@NÎÕÀ% B~Òh*•BɃ°ˆùPÆŸõ›ë€,8tÖmjvæî—ùY(=I/ŽÞ½"mॠ,cä7¸Ø&<559ÞUŒm_~‹5†Äm·Ä:VWA¹5rÄnø°zêün×,à KÏ5Po¦á«Ö«•E™é×%Á•„?Å>º”ªX_ÊæPÇÜþÛov¿$úÑׯÑ{”õµvÃU¨Ê<ôGÁV‡;韥i#Î260¯göyµõ]Çpc5f°z›ý#x¼¨ßXjõ¡_1]è¶íqÎ…ÞÂ<£6-^¸q-ÚY(Ÿqó?eÜ]‰ù>qWÈh(Å?"0…È,¼è>Jr bUòù0@Í&àN"L^ »»Ç¼}|¼>/Ï ,!èzÆ^Ô<ä#øíÏ2ßšôå"óì.0þéåó7+Éí¼œÉÐSỡ¢„NÐË$ššŸ‹Üö£§gs°X º*_ R(à®¶Ø.¯Í\ž½#KªŸ°ùÎD>ªGÊæžK.¯_!Í«[tÚ“· ¶]@Uå@~ßÓ·fÖ#]’ßH•>ˆ½;’Õ¯fÅÕ˜6ØäªŠª«c?ûéŸ}Ö±õîÃa÷ê­Øc|Ü¿ýŒ'U\ÕÃ*² è‘Y{Ô8áÕJªÐÖ|ì¹¹˜"”ž…ñÖ؉‹ˆ`ÅÈ5N|¸à´Ë½‹Vàê:/­+ukŒaSÁb‘¶éÖÏ®€.×5«'ri©>~ïS¿§É’&\ës ñÚë7mvjÞzOo_P¼“kè/~h³ï (9!ÀrÚ2Å39l°8ž€7¼c ~õkü襰¨¾yž“̵‹!w@Iø(áXaP†Å¶ÓS—>·î–†Âƒj ¦†YÈ¡²A𢛠ƒ1¤㎎›;óí·›(Ä‘ ¾ù4Í­2vSì»w}ém02êo¸øyýÑ›Ýý=ë0½™FwÍQçEäâu~S`Qjì2FŽP±![ÇÀ$Öãs—¦ó£* æêOâ…5nÍ£òëÿîípøHâ@â¨eˆ+-)î—g¯Hþ4wßR ðâ0|c‡¥Ú(‡$\ÕÆÑìX"tWI/¿†òG_® U yií#kÑÑ~ wã1õnW‘K5 ýYÑ"I(¿÷.0YÂxir7Ë¥MÄ5¥dŸ|Ë1pù•7ÈÆlžåî¬;L+“÷ö¤Û Ëºá!l”‡£³­B’½½"O˜I¢“~Hh1gWÉI–¤ø©ˆ® ž «Ë÷ÿm7dÌЕjÖ²7¼9 e°î%r$€E‘MÏJ ¶h·¯¯U±Ó®ØÒá7ϼ=•iUM¬Bê\(Ĉ¼oÀ Ýž"Gb“õÃßô½·fßô´«ëEÈ©˜ê§¬"JæI‚¼vÒSß®ê.€l¸¥ß}²«ˆn¹µJCÿ쳦椥;ýà!sÂ¥NÈÐðÆ© ç¦d3ä`>Z§òªo%Bä=2N½J|g¶ôé_Ëpœ«‡âq.‚Ò\)¿Mæ8â¤Îæ›ËrÕÜ¿Œ²­„Önv_¦Ç"Ä5§¸"—Ô"K Øåcè«_Î?ÌnÃgOè‘ñ'KtÑÛÏlWºì*£ñǃ 'áêC‘ñèèOzŠQÄï·ëõ}Çý$—û\êgù8±2÷ ë,a0œö½Ÿ fš›ð ¤¹`:e¼ì¦W·^Bj ÑÀ„ü€ØÉEºS+vïËßÿÃ22)⣼xKV¥EШ”ŠÍzW¤ÓäCËEû¯kù•|OàqÀC.3œ0¤€Þ™Õß'ãˆ)4*ÄL—&ÍCy-LÙtS/Ÿ»éÝ‹Qhfö‹PéÕ ‡ò/µÛƒ$6ɰ¸¼¶PQ<«0|±q`X»ò[úâ},0!b”­Þ-TGTKðoízùÛ`±Æ!I{^èÜ[„ºWSÎa>DÒ4Æ<+cmSs¢]cèO}6‘Æö†°È@ «Ëøæ÷ãO&Œ@„ã 7Ø"RÛ:›‹B ºÈ>­!¨¢ˆÝ P³õI^ÿ$ŠgÐÒ§Áyöêÿ%êÄB]>|hR;E.!*<qâ‹/ŠÇÈ4™à¿´ë÷æÀ„ŸVKtW µ?=9(>ÞK³vmZušÆEV1秦ƨåÈ+¤)`6ô1òÖæã5l·ÏÑòSúÈ:šbKÚòÐdƒ*’ì.ý&hÓßRoÀ]£7ÍÚ·2‰ ¤/p<„`\tìM«€ñÊ{ †±§?CÁ(ï£dTë&kŒWmÝflô5*±eOS[ê‚bC|„Üûrýq5UŠèÒá㯎ÉÅõk‘Úa$`[Â$iõΚ›#»ônHÚAóQðfàâÔ*#Ô·ÞªiÝ6ôGŸEÕ®ë‹ø>µåB穈zéìí…¹'#ªÙ‰-™úž]>1ÖZ¼©c;Ÿè†©—6fVxº ¡aõé…üñÙwø¼DA°‹\´ICQ"Ë:´ÂÝ…ýTûiò4ÜåÁ­¯ºé4ü“¾öpYŠ— ºs ŸL±«øû y™½ýìa’Á³ôËG±÷æ=ý²É‚íP&eÈ Ü«[žNv¸ú[U£¨Û‹§¸Ãm `ƒ¼âëñ¿¥8…s™¡ÙêYúé7ñî§„ˆŠ 4bɯþÿ÷„ƒ*êÙ‹K¯=P‰ªnxzÔõÆ×Þäg¿5˜˜u0|šáHYds“Bˆ*;º¡d4qµlÂ8ôvÅUhÄW¯Tt¯h«e\FJ¥þÍïÖ"ÂØýêë´Ü¶ç悜º5ý·~`4PY˜ÆóPèÚÇÛ?…0)$hì »ü鲄çåÈ 2ƒèw¹Ñx=lÀaÛ½p«»-kF¨IÛ_Œiöî0‡É/j¢~NF`ó£l£/¾\¶"#Æí÷–:ðˆ ŸQÊx5Åâ)d;5AÊŠ'âXØÏ£„yHäÅ.ÀG2ñ°ˆí°+Û Ôaòû£qC·)º¦þG£>àÌRhze· 0¨Â8*¢¦i½ÕŠâ£š ·„(UÆüð:.Ø& Ê7]½|Mt¬§oMCÿÚKŒvB6o×ÅÌÐ ÒfL”—>-n†¾lê ‚€™"X8 Ú­/Ë+†P5l¢ Œ…ã…ŽõTJKÜ{` Qõìûh$”rþ…Ø) }÷\Œµâ’³ø¸!M ™4LÛÅñ»ù'PRXºuëBM„×—]mªÁ†Ê”$¹D‚ÃJNâ'h fãÉ]Þ»>Cpzù+Ç…¸>)’—f˜Íj˜}GBC0é²&÷$éŒDùÙTCrxÖÞ¤, _êY\½ý¥—ÃâY‰YoÂÎ3 Q¨@\4É“–¿áð!!]9’ê™m@ÄôIƒgβé´eúЬoªÍ>LßJ$mÝë»4®J;ÕÀdvÆÐihpn¸™xª@Ñ´„”„¾…Q|c«ÆÐö¿)übRÐgÁaÆHbÜþpÛO=±ë©m§hÖÇr¼{É\F Š,BℊXR…ù pC'8Ñž8¢Æž¼È(³vßòõ·®=f8ÑÏQT1Œ; ÇvW,Ž!‚VŽngžN…‹Í}éò&Ó†=>2P R¼ˆ@hÌZ•…—ÉrXHg±3‰œ7( Ø ƒµ:bÏ¾Û ,%M¯ç$䨣á3,©~Mwâ0¤~‚ã^¡íß]v–;ñðçä DNC@V,/q: ý KΘÅ»±¯Cqèi# n‚&A‹Šw Ð Ô T„u×*]…Ò4‹5FÝŒo0kÆíªg—Êõì76 ÁÀ„C÷¦ú¶å½Uû›Zâ–†þ¤bþÇ`ê‰w2>’ðDÕ þH&%|ÆtD1$ôL¾Ýà™ÿèÛ2™|T¨æQoÇ™R2n°dÀ~„“£8ñÁùRˆ¯!5Í#~†£mܽ$0Öºú"®Ã ò3“:0ϦI-ByyxH8w³!êÛ#´ÑàëGd Õ"ïìÃøRÌI/'ðÅSiuÕ-Eå®+-"°jÆ¡uä¼j¼ûM2º öä7„–n~lý¥ÿFµIËÔ?1Ùà`EbŒŠO’i6ÛÕo…8 *.ӀŴ5ðCahN"éhm<òØW§E1ZÇåîã™ ©pö (ÁAEY¤ë8_U€ÞÙÕîä÷5êF*4lÛ«wßí‹õWØ[ªx>ÔñÅåT$꽨ÀIVAŠxö-?‹aÎp´ô‹$YnW¬šgÀµ™‰Ã'[L6¡e8½m˜Âž? S 67Üùx¹éµ(%vÊBÄvºÄÝÿ¦<â0 –;©>õJr¶’.Èæü4jrø{o½’=À¸«€ÆU·Õü£{B¦ç‚\@Gž&TCèÓžÃNœ ?«Ñ Mi)0–¾ºÛ$VƒÎû¶$(ÉuÈQÄáQtV~aÁë#Ï®'y¶·ME‹n‚Þx£Ôâm0‘AFúòCj§õ ôê6³\™q¼8µúm•KÁ¢Õ‡c8¡HXñâMÆ´v~„ÅX†zí`ÉèQY‚D-¦ÃÏŠ'ÏŠNNÏ2 ¬ Ô*9J›W„„±qkΡ?ˆ”˜2z‚»«›,¿PEæ.¿UˆL¦*˜ýÙ ¤@blT…Õ·—y•@§HP­²úÝ@ÓÚÝ,÷1Ø.áÜSÿL†~#_‰,¹ª02»‡çÅAB¯´k2¤²+B¬Âögˇ’॔Ã%Ä™>}“Ô }‰Ü,¿ê¾ŽÂ‹‚Ê-榷+0$¦Ì´©ÝÕVÅ÷ñØ;“ηîÄ/Ý;ß&7ãeò²«ïP&øÄ(&$Uå…Ãßiâ? ·b”ÁÌätY‹>¯6ÙªX‡ áû$V‹l³ O5\k?×Û£OD¾¸3ÄÌíîßôqë3+“šœ/.*å$Sbæµ J7ÚWâOÂLÝèp¯Kßšú/B(_–®8-QorüŸV+ý£Ñ{Ïb z´,—å± éx/ß^ºËê™Á{¹Ä¥SÃbéi.’ÿŒþ:ÜöL6›‘Ó…ÆÏ”(ª§HZpm=€-*”ÛPN‘*PŠù>@ˆriÑË[#éÁßÂÝeÒ®—j(øQúæhà.Á²—ÖšÇéoô†BÎ3ºÖ@ TÎCÌ øDÄXøàA/¡#çgp ÔTw*ÑgÕn‘rö¢’² ºì‚‘ÇÝ-"2dáZAU1®®¿n·)^_½Ajý` ³ ¨c™LäW/ؾï’Ú%ÄÖ€~0/Øò02r-Â@ Æ<¨_«©kQâÝ.©O³]’KðVùm=­Øå#Ÿ êEÈMÇ@‡!S6ì›ËM»³Z’/aƒ‡ÖÄìé‚,• Ä:ëú›PYUÏÌ—n•ÛÛí2º5N?–…fÖ/®[eÓdæ×$Œ6—ÆÐ9õ>—Èzr±Æ‚M|àÆÙ½NuñTIŸH„¹»RZާ%¿GJ§(ÿ­ÙpP\ö(·kù½µê‡pãÉÏL¬C,¶€ËXöÄŠÑ'Þ½¸3gˆ¿áœÛ£´†ÁOW¦a„†AäM8Uª6X³R[Ýz;k°žâíc¯>aÝ*»¾„³rg|po´ÿmŒ¯6o©«Æ¥«3ôõ¥¥Ã—ÞùT›$T1@Æñ¨*PÈXŸµ³õ8z¦~~8M\­µ¼«Š"µö›Œª²ê%¬Xâ@õv´zuÕi÷ªÝðV&·Å¡í‚{ZGc]t$%¯ý*g›ñplè.ýЮ¾\ÿÉŸýÔúOÁWÿ(Y+D¤ÛÍ–èÖ"xå‰ëöƒÛ|楨ä¬Âàjô¶„VÓŒ;&/¶úT—Ìéö¨ž¾KÄh©“¤x~¼| PA„1{Y‹ŽaOÌ.wÝ:uÖ~÷±’~‘Å…,‡Ê PCöÓG/$U+qc­=‹ÇºaQåÇ~ÇD–ë,üqðfÿömCL}ž`;¤'‘„0÷àÁáñÓ…öÔï~CO _ÙÙ™ƒ?Œ›gÚ} Ù+„ïÉ-MÝ¿ÃÁ‡L,– DòYqñÌ…Ö¬Þt™…0b#¿B‚½Çcÿ¤S/õ,,än}#‹¨ÑC8.C)Õ6»QD¤GsŽŠ0ãJÖB±'ñÿ!.œ|ˆEñè¼…ÄMCíûo÷¢›Ë~V/êŠ× Q…QYà [„k ž©@9ðªÛ£]¨éî­Ùä×úÊŸG©?÷Ë”kæÞ(äéÏñO—k”„=0ÜŠ÷©NE¸ƒÑä­2í<]NA=»…#9ôdt>y/³[’/‘Ùéh~lÛ¥ûeâ³&oMªç( €YÎäæ»Ï©PX ‡· wÝååÍ ³žVàØ›æ¡1OðM Û Åþ&Ríj‹+½ âqþô6¡ÐÇû‚îíiN¼õÉ>Àür2c}³xdi˜ÇIAŸ†æÇ¿•¯¡§É!r ]“ˆŽ €7¹¯Z‰×G@ÊKã+«Jë”ìÕ— kІXM£ODËÕoªÞH„…~©æ›àq3`ûøOîzi˜Ñ•»€ÊI³Çupy”ÄcÐNH^ÏþIe¿…I9Ï 7újà§IÍÄè4 Öôài†1ÕM±é?—þt‹5éØœ`‘~õ§ý2Ãw8È6Ï~1º_뤸ž±S/´ïav@8õQž¦ló­|õº˜öëÉHÏ.2BÁ‰°Ã‘§VGØñsˆvöÐÜ™UpGMXL˜Šõ»Ðs ¡¤_ýù  Q]…äHðncR;44°ÃëèÍÀÝÁøƒÂ'.2oE§|ÚÒùpW¿¨°äýQ=wOI´xY½?>û»6£ø(õøO%ŸA› µ¸îè—˜÷K̦AÚ±JÄ‹ØóÅK±MÌGq ä™Ü]Í$`ôB9»¯¹{}Û ¾=9…»;f›èܫˤ äœ}0Ô›Ø|šÃBŒu‰ú Ð/]~{Ò­áLÀhóðr DE¹™¡b*EØD`­þ x 0#IDØ\R]XЧ^žÖBf4HCW=4bÝŠ3[¿œ„ 髹Ñ`©‹l¡J·Ž+e5»·VéMNÉJþ!LLg×¼%lßâB(‹Pˆè Àñ©D†9¸ãtiñ3Ÿ\9A‚&nDÆy ü\ƶñ¦ê%ã0–sèßuõÒ ¸LžŒ|† w¢«ð¤É>él‚ñXŒøÔ¨¬ÁE¡ëT—Å ƒZlÍ&èö?>ž <ÂòÅ FzxTuˆÜ Ä1<Ë.¹9:ÛdÊDßœ³!²¡$ ÅÂq¸x‡F–kÜm&¡Àmqë"nÒŒ‚™¢Ë‚,‚&šê§Ò½`¢;Ç à™žWo¶®ŽÅï+ó—Í7;Çêì爛$òºƒ?}M `½ZbÏ$‰t+[°pr‚p ½º4u?\‡anZnBO›–|›Kê㫎sššŽàß×ÚÍh(ë9FŸ¡ÒÈOí6‹j ‡¨S1/Zt)Æë»z承#z BÙâ&`ˆ - hxÖ­—0‡o0ù0ΰv¾Põ®¡ÿôCÎ@¡%¤Õ%Ó³×üåw÷Ù…e(] Ð!ÔUà¾D`ÅÛ›š$¶Útpë¸iêã¯bøqc9× ]¾ýQRg¬¶»«‡óàð /ÿ¼ác-Ÿhשoa6 Ïæ¾8& ¦@$s»%óûˆº¹V•còWoX4s`ýÙºÖÖŒoiiÕœÅã×Où[Ëô­(í²•7×bè-ËKñ3î*®Zh7·ŠËãN¯ÀQTu«WIDyP-L½…ñn†ÆÌ ôaô»“Yº6)v2ºe¹XF±—»±Vm1ôy’C/s#jý¡=å]ÌÎŒæFV\÷ûòh$¼˜X$›£ ßÂÓuÃí#f‘7ÞÈòº£±ù ð%,Ôñ4ŽÍz ¼!ÍštW:0² ¼g1t{á^^T“ýöÛ³>zùK9xêå…^[½0=<¢êLO†ÏêàÑL0§˜ "Wý)¡Ì ÿ`ÙTÙ-INgÂ=ß©IßþŽ0ðá¸aå#KîµZúŠ®¾Å3ÞcȘEñ«!‹áÉH¼Ü'.ý;™e›S;^$‹ñò–{+SïÚKðØ*öjë ƒ9Ì\«ÒÁŠ£—€q´3¡ç ×xáZ˜ÐRùú+Â:x’J„Þ¡0ïg13 JØw7—¯ªT¯‰,‡eSq$Ê5K!êÐë1²QžÀkØú³û„G˜2“#¢òê2 .ú»!UQ¼Çä—ú¢´Û§üš.h˜¿G’H¿ õüdh =ƒ²z±)ðc©Xgûêv‚³—£†»â4Vöá%ý-l@ª¤zÅogò‘œ´t#À¢›õÑaaH :±éâF&K‡[=¬ERu‘<Ç÷Å“é5ö\tŒ·ˆ…«Ï±+a¢THx s¥¾Ã ФJ ´Þö—°ê¤=Øuù ì ›b”Æb/ÛO¸˜õÙ¿Üö|´*Þ‹5ˆýcõ¢=áf™X æjI6Ný#¾5ëŸ6kî§¶»:ºÁººúÝÞJµ‘öÃÕ¯#.µ{>®V¯€b; <ƒr7)¨IDè^&Ü3/{J3½õÑ:ôÏþÚQ·1säî½úË“ÔVÓåOŸØ¤±TL÷KÄÂIŠ}ÅÒ?‘|ïGÉp±ŽÜáã®ru'K§³»Ó°xLôËÐ9é{'Í֭ɽÁxþt;àq‚žUÁý£hfà wN×/Èš8»O3á+m¸Ú—o©Û”“‚?“¿îÖ · $¥á&„îóè^,Ï÷®fjy½YÁ·p¾‘>žA V¡·ÂÛ·HRµRn£ßï¬E_}$üj½Î”§îU&&‡k)àÖ¡©8`)ÉDd˜‹8ŠÉúኡ&¸éTS¯Â,fV„[‹ßÄ,æY·Âñ¸¼Á™ÏÀ>L=‚8æšÊàv¡k£IJÿ³Õõ“#Ï[t™¶ˆ„'rf­áÍñ8°n€ùwùtŒ“ à5yPÈ4Ûo µ¬=ßÍ*l2sHKwÏi“ww»Ð \§~”—GX¹o—Û …ðž|gñ» æSõZ‹ê\/ŽŸDˆzÄUøÉž"·† =ïŠÁmBB† øèË/bõÌðlæÛÆAwJuV[ã#¦?­ÙÐÜoì#;Ù`̰™óSÀ›ú“ v~ÆwOÍéa‰c'ó/• 6ë_|ìh˜'Ô1ÈMÇ¿‹ êMhÁv× ‹Š£!Ò…U‡›ÒÑ-P¨¨'‹¿j }çÓ ûÙ×$ó«ÛÈ›ϬŽLÔ„u¡r|³ë^^#8y€ŒL’®¡?(‚”:«_R/)ʹ¨ ±>\„ܧz{N⡊Džü¿|(œN…¯^g8ì4TseùS³·4sen+(+…×¢ÔÃ`m,@};¤LI!ó#DÄXN~TAé/‡ 9úI¤6‹ o] çŠTFŸ6 ûÖKK/ÓÓólh#ˆ“K[Àæ"x‹ͦ»Ÿ=(|d[Ìão?¬Æ‹X Rñ-T}£—Ì|½Éã/ž3²(¨µøÜË("U‰à~"ßòð1À”ÓNõáÕ&[ý!@TŠðÊÔ&$ú 0`ˆv)EBĤaÍšûØÍ-N"(Žu¼£ÖÞbO^Êt~%Î=]¬ ‹ÛÝOäe ?‡$=.Áð[Ó™©×mbÄf%qÚNCñ/Z¼‰å3‚ # øª–eÎ,0Í_ ¿6EŸÑõ¥Û¾0 ·°eÈ8â-ˆ¨änR"§þR³kŽBì)—cƒ ‹ðTœÿŸ`Ð3Î2<«4šð½ÃÙÃ< Ý„$CõA…5 ¿CLO¦^ Q&þ—·³ ¬Ð…ŒCÙ ¯þ4Ÿ¢,Týݾ«B ªFäêƒæ„.¨4æ~*/#g$F}ݲ(gã&ÅÚ5|€šÊ×P7ñˆ²lÖ~eH“A’Åâ©ÍÐìÛ6Œ¡Õ­Î0€Í¿aÄ9» çFÌ®ø]àbønŒ°S ­¨£ï#¸±ÃeþK?ývbsÒZÏÃw8ž úâˆO;ÇJaCP–‘cñKúc8•—>ƒT/9!Ô0Õ+ôêìcàhurýÌßKɸà’É*k•~¸$ý©­aCÉÔ t¡³uTE‚ož*Ô—Ù7Ü©M—fý®[_^`§&}̱bIŸ^Žë®.×p2øö|híÙ,è< ‰× ·Ð(²Þò­!7ucÑM'Õð*j2ïð­[Í!X%UéBÎŒ‚qádtaéw5ûÄ8fì r`>p}<»úßÅ‚/Y$ÀÇ,,´N÷IáÍatÀÝÂìž$ ºù Âȹ(åè"†Jo $@}þŒóûÅ@¬ÆW/ÂB$.oÈÁñ2‚μ˜ø :|µŸšôÒÛGVÙqmæ-¿ëK8ÛBÉ8®€%³& Jëù ñ‚w÷ýpñêiá´TÇP}—UHQè—yÌçgßí¸UßXÝú&LR g@UrœQAÔ›eÀšA/òÔ”¹(X9Þ$ÕSŒU·-Ûô£ˆÊ`+­2ÖÐîÂŽ?ë§jÐu%Ä`òñ»éôè• bAZhb'1— yÂFFBYƒÏnK² ÚõÞêgsú3›%¦f -àp-˜[í*G‰Ugâ…>¡p†EÉóQ_Ô¸$CÿÒgPtðSßV(œ/÷ÕÉ Œó+¼8èÀq®(ý<3×J£L»ô*´â1©!Áb íb,1'8˜º'·U€àø€â/m—t» ÞÏ"#—Ûy³[D ÁnGÎÞÉ‘K„ÆÙGì€Í£<ºxhµÞýÂ߯ïx˜>u4FRPêõXÆ¥£/ÁÊ[³ÚÑK•Ž|@NnÁz÷¯> ™ëºõÑ*ŒÁ“tô'®¦±B±¡ïܾpv ´T—…8Õ¦]}ÏgšSúúCSo[„a¡A¥/Çö&ÕÐâ†0ÌL8,Ô€ƒ%)G(¿‰6^$E'±S”x*¶G­ÆÜ‡«!)OÌÊ–o·ý5(âðwïÈîI´HzVz€äú‹°©ª±uï‡úð6Z„¹Å3}8ÇQâ—…i»|¨)É'½{ãÀiЧô ÜÃaaðݳÁoß0 ß4"] žíbL‡q!ä$¼Þ>nN—Ú¡Ôìå#`‰¸\Šnþó»L§%AuŸ¢ {ä)ú,5>Âá>C9¥( ¥Á-g1ÆA)ËA6{Ó~|@} Ý]z`HÌ…NWr‹ û’¼¤>Z£$€‰žÀŒ—&O»‘‚Ý"<w' ¦n©ÄbR¼JÏÄpmï­*ký`•1í~)q«Eâ)Ín¿{ ÌöLüzÑ·…¢ «ZlŠŒSXÀÀtà˜Å#ŸzêÍúí )ÉÈð3rÕGØ®ˆ‡ (íºõ­££.°C¯Y÷¦£Æ'-›Ã³úÞ˜zbÜY°õ0Høwd…×È,Gý쾄3Wÿ BG9zHNš*,ÖÔÿêÏóœ5ÅF”ö ß§»?áÓªöêú.ä.Z¦UHƒÙìØ¿Ôæ¬CU2ðàk±Mêq‘¼úrÓ©ÿlD3@¤âì‚Ò È‡x! #éÁ–£ Hì3+ªªˆ/—–>2TŒÁ.˜Ûÿ ËwÕ¦nQ Ä „Þ/7u=îj`þAŸ$…—Þ<ØX«¬>ð÷¡4_}P, °öíríçN÷˜`'Kþ2À…¾ ô¯òÝOÛsùÏðö>½ð@ÜšùÜ8ÄgìÆ¤LåŸy‰èHÇèûYÈf$ÉtõAéaàOZô-L^ñ®÷søàž'š… R1K¨NȘž»Ÿxùr FFÍ iQ`•”AÉxüqœF¡ñìÄ/ã¾*Qßkéš©.ÃM$-ÐðȰqš¸ºà 0Oå}Æ$eaøt¸wÁ+} Zà5ô/ ±qnÍ÷^ÍW;z»“¢Jy ;ê8•¢£¯ì¶wÿ uñŸ wÐ¥RìÇáOóðߨûÒNiê­wu5AÔåí‡SU„‘U‡8]AåÉHÊXh×Ò ´NÕ£‰)„sÕ)ñ&÷3 Ðu rÀÄØ‰Áé!LZ&%¨:òÑ5XݼCXÖÆÇá×0³E»¨êYÄóôÀê£ öU]‘éÄcj³¥½„+Jò 8^V· Œ‡WWo³©f›­÷ù("ó{Øšõ6Á‘8|\¦Yb>Eè'­ân¤Òïè't¹6áV'7¨f1yß+Ó£ÓèJµÃB¦'ãp]%1r‡R5òf·ƒŸPSÁV•þ1O(•Ÿ)~¬] c„ƒ0èúsŸ§ äp¯Ñ½ÕÞúäUë Omd¡½û”ÛÅR̵ 'JITÝRÙfå>®ª:³»UŠQrˆ™á£Ñ‚ª‰ã3|Šo¤³`¿œÝÌuŸG"Ýr"È,wÀ•‚êѶp3 òy¤û£Ë…ÅΫ§ B±IýdM½5º*«…üÑ埚±[<êߢ¼ëÓ[‚iD´ ÓÒ“ÓG‘^7ÑG°Íëî¿#’„pÄøâַǽ›ÈzÑ~&M³B$õüSøÐ^ ñý…Mr JÑìÕÍÅÿlžF¦ÕÁ¿}Qm]/ÞæA†}ÉñÉàQ~¾ g…¼º©øn d²‰?Fµ*…Uœí~S¥âv/!*óÛWU Õ¹ ¨0ï¡¿×Õ»ÏmìŒñ®ùxÌÆmR„•µÿF)ë+~ ×;fmà;¥wmÖÀRY!( øh 1›)ˆV€¼ݵŸ>bN´ö§:XEž5€ì*’€ñb£^^‹ëÑ«Ñþš…@b¯6'&·››Ú½¬„uèß|7s–mJwŠ#\õ,§¡³4óýD>€!*6[ ¶dÆTÿ‚%døò…¾™—žN`—”Ø„ÊU{¨göìÜ›mòß…Ë“*H9Ä£¤âÖ7Ûi”Éþûõ `† }Û‰˜A&ÙÓTÈ#™±”Ê÷£)™…Fd˜)v6\‰ÑŸZýó¸‰j:°u×\Kåó¸å LÇå®Z Mœè&lb«"L=³ô¹ïáçòçÝì šmÎ4"ÄÞ·‚]¾gÉg*öðÑÉniTÞ}<¥@¿zã ¡H…7O.%Ölê'T¿])— ²©Æ–^]³0¿=Eh ¤éÕ+ä4 Yÿkë6õ|a꺰 ¿ w+š¸ÿá"” äèkXÒП5õfà /àø®3Ú@uIL¾º‘7…ÉD˜÷.¸ÕP*‹”´‰l À.×…&ËýÐ⣂…TÅßÇ/oÓ»©ºD!' S€­Ã³RÚt^/1áfÑÕï]…µ5lzùõà¿ô)^¼9Ü&³Äë&ªŸÂà.™‚¡;<üÓxÕ‡Yâ <‘áÅI(V[{·HJâFC`ÊÃ]‡è]ðòýæ^E|~b6hnS‘¨‰†&{4Í>N?&kßAfTò}áÄû-Ònak޶êÿfü\¬Vçz+«ÐŒ~{žÙÃç¤ó$‘'ù ß¾$¦^OLuØ¢ŒF“d½ 7 »ÆÛZËʾõ»›Æ¡ÛƒHŽ*Þ6ÿžßŒÙÉâ£|àªh°R¼ûfá„Ü4÷Â"”ÿ »ª]P–.K¡IÒyrBÎúôÃÄåÓƒ5^õémVÇ ÓkhÈ5v!’…\pã"¢#€.ÊñK§mDp|ý©[›Kf6ny³!…:#¨AÌ–‰ð®©ÁÚ¬xçÕMCVŠ®Ú>?ý[麿½¬ãKüápWÁ±`áBOìö*² Hê 7l“¤-”÷1;Mí‡iEäJÏÀiZ!Š]À:0øUäÞRösU4ì®ÌžˆûBQ¢ƒL NŽìK0kÔ‰o0L“O ”PÛ僚­Ç†;Z»ö~àï“?ÄÍ…=æs|{òû°K†Ñå8/ ÍÇËU0ÈP'»W:hXÑÇwMz ûÑ—€!Iåà¨!PíÂÎb²r ýA0ô€ÄàÐãy#àp©ò¤XdXŒÞ5Ñ E-d; ý³—ÖÁ­§ÞD ñ7¥_Ž…• i`/B%AÜTV8ö&(VáúCbz<&Ì{?J¶$¹¬—ùï“‹x¬Ô±|$…8ÃÆ£·_Ýþ» Ñ’–8ýàX@ޝk}>Xg/è*ÚÁÛ£©ÈO©ãåï¹ ÒƒÙºSWLŒ&?ší’‡&äÔÕ‡\‚=±u=äög:ŒuÄ,‡épXê¼/Å+¡.óöÃ7îhlõ\lÄ&×›«·pÒ•¨$`į’…À7ž¨JpI»2!" e9…³”„èäo‹|x#i{ëYÕE õŠ'Â|‚qÞåç2“uóÊ@JóE­¸¸5¾4ôeb[’ïG;ðírDyÖ*”Ö?…³î©o«÷.»+ `v©té-¦øgÉ«¼;´È,¦IÊF®¯Jù| †ó bk;ÃéÇŒâKA•‡ÖîÖX¬‰]ÞÙƒzäÕð'Z·JŸ8|Ô6õ«‘C&C“þ(É.eæ~&Hˆè_/á'\B‘ŸÀ½Ë²ýReªr=ª³—‹{Vú÷”¬¨1~Y€«¾:úwA…FP¥> ~¼‚ÑôªÅßÞ8 ¬ŽC[ÑBŠÆ3€LZB^ñ€bDÈu2 Ù”Ù!"Sˆ¨­ÁôÛG@7µ/!^gû$P?Õ‘ð|Úµ»ý©WÛ®&þk×ì=á¦d0~žû½¢bÀó*:ª ˆÆƒ4\š[ v' }†þ¦€:‡z ¿Fz†§êlí…jé©Ðe†ÜtAv#°LdÕäãÝþ¼yÚ_½Õ)ÃXjðæ4y#«Ùn,Dgò¸)!§Þ«Šp;<å-o»Ñ%-HBÍ.S}‚W b×x¿0’]ÄöŒÞ Q ³däc4Æ<·x§âvOmþ`ÆŽ_Êf»H1ݵ½+€dó(à‡†^þ3{#ã Ñ)ì ·nÒÛƒà¶czë7Iß^Ü„¤‘Èð2@*+m\mâÉÇÄ¢M¿wÍÃjá„ 1”œ…»ÂГÓçpvyoÝÂ0Æ`q|¼(j4jÝLÊÔ~qeÍžƒºE HÌWA]_¯®º!‡×ê^„ñ÷ n]¶úEŠˆ›çÅ&tħRºþ×î^) VØÈz9•¹Ÿ8_¾Óq†x/ïÔb_¼Åb¸U…eMk«Ñx nùú8Y¹éñ „Oˆ‡Þ¡ÍÕ …ö¢’'!3%’„Ó6θ˜?Ð!®½Ñ÷^®‹ÂÉ2=Ÿ0" 8ò¥?W]¼rgW §À£1S+ôeï›f1…¯~%ô‰})>suD¼\ÁýÆR Hø(θH©qªnëð/¤ª‹Ñ"ª¸îÜUµ~#`œvÄC‡[É©ßJU|›»ðI̦@£p¨ Õ‰ÅõÊ&t*p?fãU‡@4#ØÑáÕ˜í¸tU²ëÖË”apæ'éU† žÊÐãVÜG¯f¹>=…Âpfì´¾! UC³yÅÆ´eê¦d ý©;ŠÀ/…PJ¼q•6èÓàTsÅ(+œ°X3Âôªeɘ- üFÞTáäÍ1T#„ dŠ[øViÉFof¸É·a°‰v îúÖe³aL”1Ë`ΛSuù˜ÓúòS„òÌ ¹îFîV6B|ù˜+LFNsÙN‰ÕCÇÃÔ“;“\~æŒÕ±ø©ÄoÀ»E$Ú$<>Z‘0Cs‚?œÿ9šÂ„4šüZE€ŸäÚ¬ý”¡1Ó¿ß}«3Ef>¶ê¬«É‡ÚÒ {yÄÈÝݺbJ¯Áè#Ðõ"&^‡•ºià üt N;JF„IîÚ] ÷Èqày3e™l­F*VÈNºa°—yêÃäí®þx*óóH«dÎ’ÆÐ¿iéóA¤Ç0¹„Gy-ì—ï "1Ýgsà PÐÝìWieî <„†9$e—ƒ‘¹(ܵ^K͈%Å×/Ôtdµ(ÆaD™Ž.œáàÞg*€è&´W§«§³5}HmK_ú!ô—±Pÿ¯1â¿vç´N` ȃ3~›,Ë¢ØÅ.4õ Öd:иT õíw2¹V«ÿ+Ã%(2Ã÷|n-â_‰Z!ígò“ªùL™w¤°G©{PYô{™ÇߦŒß¾³áŠ}€¦)·9üJ|„‹u½µ:^kµ©HjD¾³‚j#;D^ºõÒm‡†q`‡È{XuëwÁ;]\ ÁXLjOÖ5ì”Ú‰›0|;4;S™@™ø5Ðèår†ìÛ2 .ËúôºÜï%¸:"Ñb›sWÕÙÌiùDÿƒÌŠ™rFÎ.¸†EòÈNaBðöCǃÑ­M1Nà–ßz+²I¦D`@Ý~Üæ³ÈÀ= Dµ^ûÓˌϛGv¤Ä*,NÉå/À˜¬x×KKã"£ŸR<ôk‚0ilÜè6¡½crÂ&ç$%ˆÃÈîcœ©ÿjäfø˜ªûÔ…á[ LÌOYN‰rã.Ý"$Á(!ص¾js{-,Fü3Gçn½šgñëžJâ¾kãl.ð¼Ë/*¤—øîBÃÍ.‡øçÖÊZ\ØCâ’.}›Šs£XzmSìˆÕ+‹Ú…ËáËuêú€D9"×¾T’Åœ€IDATpì¨5K-…+ñÞ‡£D`WAõ»†®¡Upw“øÑór'ÏýRŠlPvR‡(TWe ¸oü{bZÓm8Mžß×ï…W¶ù~zÊ9èÓáÏKt—@†‡‹TpÔ5P9é«&ïA¥E6ºQ™Œ ¿¥®J¤þ>÷âÑIu±£à®~޹s¹­ˆYŒ§ÜÉt_¸z´É~È¿üÄáÃs¸@ܺ"ÃúŠÞ˜&l¹ }?>Pµ/ÊMz ÇZÌDM]]íz2óc›ÁÜà£ÐVÞʸëê Ibp™Š£<‘¤ù`{ þ'4ªrgc/uçÑô@ÛFusz2˜ã«? ³Ž:˜¿5é«›¶° ‰˜z F0TOŠ÷ ÚŸMŒ#Þ<äÔwÂi˜®Xò¶7™§’$LÝq°ZIÌT—œ L59}Ó;!™$‰–nôßK1ºBˆÂ‰~ƒç{ˆ< á~7°ê%¨’XˆqD+H£p…:‘òk÷"ª1õÞ ^‡2ìr_Ze-Æ™$ì½ã~0ù¡3Jår1߆E«ëÇɇLÏ®o]ÍÎ)F_³ŸÓ.˜tñvúa$E÷N˜Ir„÷~šH²Øl&ê¤TtêVØ2£ä:<^"<®\ú†·p¾„¤àE·s ëgÁ§„®ƒ0¦Þo¬°‹–»~©Ø@€8½Y#[[Ä\ýÐõؼ¿H‰8`jô‡ ÿÜžO‘ö‹âpÖªMßB ‘ä%ÄI%Óy¹v]D²Ô®gðé[ĉ.BèK>Õð_o»Ÿ «ÆP†þIPà¢!ÃAÁG ¡[NÚETÝ̇ÿ’;:aFY‹k¾u¡vvTÑ0Ój:; E^],× þRôô©2ÿRæ`B‹ róÌ<Áoiwd ÝÄÔ[› †º‹¬‚xÊQ‘Ü"›i4ÛÓì:d>þ©±SçSILÛëhù]“s ±÷®©D¥ÿ„ï¨,±ÒŽÉ·69NØ·¢r«Írô±á1.7¸Éü¾»7Z±ç.ÁI¬Õ°úVZý _ÂGïêg àz¸ýØ\³=˜\|Ä-ýf%R€‹4r_Bãj«V⬂ ¸Ëïh!=Ç 4Àå›Q4süBn¾ú¸‰CÏØ›µIŽŠãõ¨Ï'£T‹¨ÞW/¿wå;»=d† ¸}úK÷ª·Ï*Î`ÒQ‡È=3· ‚(ty™RóÓ@Ðr<7XüvïÞS/±UðÕ Dð¢ù~j‹ìVkYcñâ-õÔº4|xaû£­&Ô»Oô¡.£“\  /ß] ÄFß^eÁ…Z„´«n1ëhÃ×eòB|Z¥ž}ò0ÒÊŸµª©hðñê|õø©äÔݾܴlªÁ†š‡7×íT¡ÃOøácl^Ì):£`€ò[U^“—Ã1§M¯N‡š[ o…¡Kü¬RžÔY€U$QÐÛ'M6™ûÉìv.d0Ž}Za$%^¼N1ÀOfV„cËj G\Ñ*Œ³§Ç[eÙáÿF÷‚{P¸¨L%RaÑý)ƒ·«ÀÃÀqNW2³®¡ÿŸ‚®C^ˆ™eŨ»(pc‹ ÒÆ’w<Ôžü -I_àF„Ì”ŠñÄÊ¿Hrw¢'œ¼<‚Ø «Š¯,–Œ“0ï*p¥>ZƒEÃÞ¿‹ïÀUX+ÛŸÅñηÆÎ®?.£sܱa9}ûBö¬o‡‹P†ê#q¶mÅ¢·˜±@äŽgRY<‚™m”?ÍÞw…|¬áÄ ³rr|SOW’DÉœ¬ÒYŒ‹»"¨)«±Ì¸cÔ=,çú´“ÓÜíÖjä‰ è67õþül9(HT“¼Í£IWuñÐ~ 0îAý‰·'ïQ3ì®Ã1§Ÿå ËOÂðJH@29ÈËÙüÀM”/æ‰Ñ/º:$pžê¬$ÐBW—Þá#XCëI?7Ê&(g£ç¨ø`Ç=6 )¦.h¸ábqëÔ wùN®ÞOŠ¡¶z“%ƒh›²Ã‡H ×K0ÍŸö‹f"î{ÁÖÍpÿòBãjW~k8 "UÀA wÒÝOøì$ºK)„ë¸eúÀv ªCiÕO‘·¹{¯?_3uŒÕO?·ÝKi³öÔÚºKf7òæAÿR,¦ðµ©³¸{û/Bú¼t°tª,Ü¢Ù<ú.Þ%½º ¯e»ŠP,„KX’1€­Ñ.¥º<µ(’LÆgÜGڨꚩӨ f÷Èq%®&èg_ˆ£g3#æþ¹ÁidèÙ[SÂ}¶º®c€#?€]˜ó2£Â*þM—#àa-°^v­¾žAsüÉ£/“á7; ý‹q]‚³'—h¥Ÿ½^Eð3Çí2¯<¹pØpP¶3*A}Úìù&FñV¯DrÌy—X¬º±?ͨÁTIƒÅèn=¢µýÑ?%齆WDsru™~l æ~¼àhþôøßP™“Ƈ}úå1U<ÜS MZ\>ÖßüRŒVyÕ°ïhYì¬ÌVHöQòô0zadÈg¤ñ[„§/ ÇpëÈþcLH2 v¥±$RsêŠné¡"¹yh"‘Y:Ì.™9g!#Tgm±Qo·«£CSo1\¡LÁ_¹ý³‡ƒKü¥áaƆX[­Q5J¼C*Â]`G‘v߀ڃ F²Å%À)cêON3‹‘¼ZÊ$¥æD„¢¤½ü´¿ôÑ®—b/}°²C«=84t ý¥'›Ç£ÃC.ñ çZ>:#†!â ±b Wa‡~oxc zëGE¹dèÄRàv¹ tŒÇR†Œ<ôû/3…PR’•C,¶D°5t&Çß‚:<õË¿]°V@Ú¥Û.h¸Gg q$]½lAáäLÇG85S²}‹°*™°xÙóÓ9dçÙÓ|ñçV`(¨q³–®9bJÊmÖám0’eƒì†)¿‹qâævo×8I}´fû¬ý9ç>~°ã¨Ê!þƒÔYØÀ1=z«†\ŒpÀ̽os í³s€?®‰‡ OÝŠ½î£?Æ8°J`iâ´tÕx žµIbä‚P#⫝̸Š=‰š‹WWÌc‹ˆ—9Š_VãîÆ¥¶¡¿H¦;ʯ ÒÙ,f?>¼u™òoŸÓ/¬zãµÏ/^¹üË?êš<˜1Š3ÛÕÿæ·¾³¢P¨m¾»0ºú"Á6ãÁäÂã­ϰi觯1'-ßÚ»çíјìÆ÷é¹àV,é¡S?TÉB(ÿêæ-—üC¨íˆ^EÜiI‚qâÉØj@&8!áð²wkë¡8} š€QwÑ&Ò¯nžiŽŠ«72w(Ø”oXA£Ù‚±~}fì!Wÿo\ðO76Euú©Â7vÕÄ?ÞTÐojÅ!¾z Ä^íGo?¦4AÞ_=»ŸØÒ$æ§Âpö³¬n|mZ-ôdԙф&£‡V¬Ãkýðï¹J$/ŒÐ[?ú-oDC צÖçÑH•|I±}cÖ†î¤SóÐuûÌIÐ÷êAVêSÓ&‚]ޝ=»8[]4Âûª‰å¡ÛmE–û¢¨ó%¯‚Oª.®6X]îý²$èå’e ,D!Ž­6åÜòË“x¦ª¸Ú-šõv÷´ø&dþ̬ž ¼U0ù0K¹º ¼W ?e â °æÛõÁ¬ÓÆÒx½ Ñ{—‡õßï^ú¿Ê“&q\¤Ž‚o¿kRj¾…=Vm„Ó„. ;k ½­Šƒï†ã½öÕ“é»ë<ô¢‹™“P<èˆ4•ÓêŸó×¹bI¿ø°”ûúÅÕa]ÆÂô¸ü¦U“Û¸¦S·£pWY)À‡ãÛd¬ý¦ÙX îÄìª×j¬;X«åR0ªûñù¦Ì<ª¦cÂùí°`iV Mï¡¿)‚)@X^šõ-ļ)”PLÕ-qø>åK ]¶8HÊ Jw|󤻿T1/ÿ=zÜÛG‹eª— xmî„XAÕ„ykðÕ¯†å uö8TÌ[?5™|ûq‚˜ö^õ¾º½ˆ‚ýË¥ôÙÓäštQ:ÚbÖŸ}ѵM^4²`H4H»žàPUV‹§(H•ÑÌ©oÎ[¹KÕ05®-ËÐ!¦úGÿT$שNaË] Ô­Izü–gºñ&g$4u{ÃÄR&$*Öä)œù³›HGH?q¼… zËð–ÓÀã2çÑÍaÑk¨[àÑÔŠxw ©>D©•ÖF ®_*côžøX„ƒ¬-†*ÉÞ¢mù¸ñä»EImR°$j–áarûêÁô™¡Ä³4‹s)T^~pÎÏP- ν¤¹÷2Õ ¥AÊ×c‹âüóÅã¸þ]xã¾Å±íÓ ±0´TBIêHãþ‚—ì\À#÷ã%ÄOŸÃµ°ùÕè~„5ÃÞ„5·6ZwеG~Ù–p3¥ƒ'd…­wõzòy3„a2 „­?z&p{‘ýÛIêá âÚ{i7µ—ÜðþßÝT²ýWÅ]ö¥lX^~ªH7ÅM %Þ&ü*ª»/?ƒK8 ¤ªÿ¬®“˜Í"“ƒû¤Â}Ø”ø‘’¸ÎIñÅ/ ´’u(¼}`¦~9ãhégÈçôž½7ðãx[Û¹ôØn ‰Ë•Ó®DŽÖg_”øÚÕêÁO³F>|aÖ=ôŠ[j]C TjkÄSîï>Jºk1º C¨KÎK%šYn©3ªzb’ve0…82>æ—‹|„@+Ÿ>ª˜®¾E´×êâ‡Ôx{d–CÞäºãi žŽ'ßG䣞$ €lVîWNbº_4h9ßÙœ‰h‡9|RÌ^¦|xáWxj¹ò®b±¡t“ ŽÔ79c}åá¥OþA(­¥„„á/ac’qO…9:‘€¯‹+¯ RÉÕBVT³oo}èIE:5ôœ¥sÉ01§bCHðɉŽê‘k}°¹›)¹Hàƒ2ÝúÙUæ¥Læ®ñXϳ6€t¹`c_¶Øý3ÀdŒØ:cð‰ý ×nŒ\ëèþr}b]=7UêП„!TnÖ˜ ..ÏàHÏZôSLŸë+³ñÑ+ã½¾ö«‰/à)ôqÅ»z‘SàE(¿"JòÛn*%-•`=AxaNpµð”Ñù9çé!æÿ§'ôÐRŸÂÊÑÇDš]¤\>.ñ¸Ý…¾ ¼ìÆ€AÓ‚>]¤Ö"­'¼ù™Ãšmü)acAwߟ"˜96 Ô)»^®Ú@•‘3•œ9 ád#Øu§¤Í¹}3A~â^c9^Ö£éá1³Àâ4º¢©ºéBÝŇzJç«ù%±Ï`ƒ®æ Æg ×넹Pà]2±Ö¨ö NÏßÐì£ñ"HqdN’ï¤[oÍ®0Ë9»ZÌEy*„”Ô–ÝTFë“íö×>6hC@NžhB]1%Ç€€ÞÛ{tÑ6ô?LͰ –Å“®‚?¯B.òäç… ª[M¶>8°k& è©õ"<,bÇS¸¼·ªÔ›»F´G!<ÜšU¸Çqæyx\BÑÇcxk ô†é+Ê’GÈÝV=ð&4ë%®-Ò-òPY•O¨g5 †5YIJ¼Èº/빕×Ý&´·ˆ åØUû+^ýDÀ`SœÂ±!BæáhÕ&áTÌrfºNþB¯_R¿1̼9̶®p<@=zú dÊÏÍY!W]ôÖ‹°ŒÞ¦4t«ËÂß šJ¨×áq´1[½ÇÅGõÕïÜýÖâ°‘'nŸÞšOR$§÷¢$Eà?GßÛ¬à]•y J4‘£q§À0”Chêϧšû«lµ?ëäD Œr^š*IcÜÚoobxZU mšúáܶ<ÄB‰!Û‘ûYø.\Z€zÐãÕ–,8VdS÷íè _"º³úá²cæ_O"ºªÝEå¦È`i 0„Þ•!%®ƒXuÏÆ >ÂŒšèPå‚ÇB´ £â2€6´š¥÷#Ðú>³¢Ó†¹`èÜ1†Üôòx o}¤Ì½PIH£q5 5õQY›«i¤á(ß“œˆâ£LR Cƒ%xn¬¥žÞÞjé;̧O¿çµÛÁ·â XcÕ³ùhøà¨rUÞà¨çÔÿpw„¢ý”=}%YS‰%Ëñtõ³ºnðV¬úgëÍ4 ó›»ßÐäÙSr‰ÛÅÿ*žT» q†³½U2iûn‡Ûêíõ—*Mý´™Î©Áëýѧî"lDŸÞ6‡¿Ž\Ô€^"--:c›á•@+ŒMžñÑÇÚ[»Œ+H²9KÏG}±ú(˜=j\ÄÀ‘´Wßzä±×䀙kA#ÌI‡9~´)uG}ˆªÔ[²fB|{> ÎÄ7¦j™Ý³^€=N嫟p :–ê[hßQ†sH$(*2ê2©“oˆ8 ÇjQ”êZ2ï.J±•\¼E^‚Xó›[Üy§~– Ñ³ïºú‰›Œ]³¾\ÂC¤¦x­rzé­†Çퟫ-ìµNoòÕ—Œò0Û§Î¥ ã˜`*6-Ê7v‹^v¥® lóÁM_‘ƒâÐ_•ñ®Y›WàËvâx V’ÆG0lC.z$žÉµ*2~¯OûÕÕ “%)vúU·¯BÒ_O´àO›Ìý[² ¤à¯"4ú×Ûïø—$°+1Ÿµˆª€~õmJ'|ki&5dFZtä²ÄqX.CŸN&ÊN.ó! =#¾Ý].ßüÕ~lÂb¤–~ ƒ0Ê6©þhÕK“výÞU ÔèdWù å‡û»ô}OêÈÒ(\‰¹Ÿ6H  -¶æ”}Õë’`_[•hn£_õëÃåKŒ|ÜccZEñR¬%äç‹’Ru÷ræ~®OB[„äBkæF^мµúæ…¼ÄdÀtkÔq‘`MÌvvŽí|Ýþ›¢€[mÖªØN†øf}«R„†±Øûˆ£?–Mšûù†K2ùÛÖÆ/£ÏÝÇx­µ½¥ÝМÍ×§| c–]8l!EƒüD„èìÏŽ»eü¡c]6thú?Äò}>Ö­/w ”u£îZô±DCo®ýQ¼Õv_$}ûWo½pé‰L±Œe*—ðÜ­¨ÃI¹©¿…NèºA—¾#âW€‚¼¶v”›q:È[P~÷¾Y·.ûxAØ;Jè«n/ÇÝõÔÚ‡êÝ‚C¸ÊÉdV, ‹su™ÌÂ?{c=s{oíúÒáÂ< µˆîÇá0õ¢NHùÙ‡úª]±Ö‚™(5H@tæÙp1sÃNuø Áž âK ô)¡©G˜öó ¹,¡ ø5ß–üCÙ-â#’¹*l4SpâX Àú“"¹žíG!oeÒ1ü¦Pß/ÏÓÊÄȼ~Û!î ÷S÷„›áe#^<9‚±°›„•(Ð6†%WËÇcE¾ C÷»[‘’\½kH³ÛeJñ÷뾂þ àÆMÃ0-•¤R¶î*æÑ³H„™ÜŒv.¯ ‹å@ ì}xóãñë,,’c¿oaáüë zŽ-$dgx8V°¿X쳈nÀ ©¶ù±µPß^`'‹…ª‡«n)‰!^—KzÆ>P[ß²©”NaÆé;¼\˜ Üýœ7aŒ>'á<€«Àáã–ßîwÎn¸ªÒ•Ã*µº#åÅÕE>F%â2ø–ÑÄËú:t8ãÆ"û6Ïãå Š¸6~„=«#/„îk+å&ŽA[=ã Æ{{ ŒŸ\ÿîúò0ËÅCD'Íí¢—ŽŽ-A“_ú 8§C˜ºÐ|<ãðh—“Jx¹"jt!2î®/D{?þöL ðyü‚e7ĆÄb ùœô"4@OÐ÷GP^–ÛäòéBY3ƒÍgúpëì;#ÈYXRÈ›æÔo‚v;Y¦©þ$«PW‘_S[cè0nðX-¾Ýç1#‚v¾Mà©¥‚¸ä0…çìeŠAZ*£o:ùöSçJ}Iê}„V(ìÏn¹N¶HbZŠY&•câåc_!Æa´yJ8ÿT[Æ2c}‚Ø…ú!R™¡-”xãîÀ} ÃXôª·ð?õi57_£:ÛPt¦ÞÆA{ÆÅ¢ì™\«ñðç¼ÿ0Ũ®²/߸gïˆÛ{„¹Fîud/®rÔÕ+o¢.ÝzºXˆ~z§pdÝ ­½›/S1€¼üjDWuSÕ¿» Ãq¸¡¿*ðMQ}?¼Xtlˆ¡à`!eoô¶»z °ñ=†ðÿã„sÆG]{A\úý¶ÕèRû™XHO¾ô$÷îÛABV´x z°Ù5÷'‹ÏþábóPd“°‡ÓÀ7­'Ä„>à¡kæþ-‡·L:F‘· PÃ)ˆ;; I¼¾ü4íª?uÉvIÑ–‘"t ZíêF£žLdNøÕ•B×AL´¢W€¯S!—È{r=õ¿?oæÚ›†W ö¹Õ¡£ÉAè•xÍ(LB•Fh{¹AÅ8C1èJ’yêY¬ú²J6ý.ÆÏ“H:æ Ôß@;3Y®áí÷‰Ûqí¬Šû(ÎQÂEÄùríCÂ×´uËúÄ=¸rï¡?ª²wŽÞØÅsÃ=fú[ï–¾_'AO Ÿ¶nHB´ ¸a¸÷4 Þ…Æm<î{(£ò™(+Ðj‰àqöL­‹+àGpø™½b@]‡Ú,€È—Ê—þã’Òê껕éºìÙEdÝÃ/•ÑÕ.âÎ%œ/‚Ò&ïrì|ÜÉvÁw™ÁÓŽÿ§¬7Û–dMŽóì)w<ˆ´D€˜ 4µt¡÷ §vfLºpûÜ¢ æ"Ù}NÕÞ™ÿànnÃ¥ØyBÆmè`,JÞ>îp;€ÿ6Œ4¹±bºUùÛE7tÒSÄu3«ÿ¼ºY¼}ãí]eЊ^ä\è`øw›A"Oš4,¯x£Ge1ñŠFæÛ 7 _‚éÓÄ­+ªVÞgQ’ÔWZdj§/ðOðõ„½ µRT“ ¤ÃBIbÖa5°}‰¹Ø©¾Ü& Á FC,M°©–ñµsªS}ë9rî&^ªHoØÅõo¾ˉr/nú›;&&·§K!Hˆ¼´Ð_y…l7Fž>,Ýë$"Fÿ¿W㦸҄ñ4¹c;扬¢€C{‡`QÏm 1\ùÈEÿ䢬4hh–]q‡AµFCX·†_ÜS/+¢È9ln!ç¿E¼8L´0$ ²âfþ 8 cKÜö¸ë í `ô±4ú aúƒ4¨ÈUØ~̾åêÖ„oÁ%…ïíÜÑ— =Œ˜Ã4˜»m£Pßý¬¡I@„0ñ6×8KR캺^¨&B¡hP…Ž~òî ».ÁLÝK³~ ÃU‰ñ°P3Üpýê«WZ<»à°@oÞv;H_ˆæŠëq¾.—ê­YçÐ? õôi` ÂÌp 2|w„’Á¯ýèòbšú¡‘»²8_—!ÇÓäò4ý¡@>¾ì)F`Eùho·Û2׆–9ié“÷úåAÞ½ ñºô­g±ÒÃÓº©²¾DX|a-pâå¬Ó׳8ãüñ±Y¥*B¢·xóÉÜCóW9¶õ¾à|L`\.ŠU8ö½ZNÉó†jeq|ź¼E卸ÝoO‚ s ÿÀ°3ê ÖÐ?(X2¤Ÿ0þ~%Ù¶E¼ü08ÊjÃmb·bÕÌW AA>»ªß£D^lÐdØlôãt@ôjõbˆºÜ¹Ó ƒÈ&íxɬa­Ã¡¾ãÁë Ü{¹ƒãOb\Š÷=Å4GJ‘"×ìŸD¥Í*Ë" !®X)w·.ÜÂK\&Ù— ‡@­f*Cïœà—S §noì½ëµß…¼JÌ/_†õ‰†3É€³7üù ó[)Çß®µÔ³IÈÀ™–G&žC£ÔÅwû¥—ÞÝ᢫$1iräõ æ˜O‚£fÊpèb—°~Ú„ øÛXî@u¸”97ÑpH¦ðEJMYU×§(0h?úÒì½Éû… Æ#<“Ñkú­É•ç-8­»×þÞßïÖ9ôÇþáèæé{Ò#B!©*ᙎ…”¨Æ§åwŒ(&%ºŠ»…Žæ]Q-Vá0 Àªª‘ÅEö&ˆxâŽCCÀsœâP¢«˜\~-§E¢%m®nùv\O‹©K„¡G£}t‘O×Ñ 7»Â…ëÞ¾úe.~*‰ÌäóH¿ ÎÿìMW¶ #™WYLG¸wÁÓiŒ%P5PPÞŠ;^Ä£DX¦ô§4Ñ9 ϹAä;øäP%.¾»DŸÕ±pq^‚çxù,«‰FðN‡^=£Ð]Œ r_¦˜ÐT÷rm€ æì§p>X1uôÔ¼ù°—ž&.°8va STiVY¢ãÉz"êcô>ٴصk0„C‡×1Þ—02#Õ»ßί°¤EÒT¸œ+¸¡¿P,# '|ÙûüÔÓår8w@ô˜ˆâKûé×Z¦`±±P…µÇÇ]r½–/ôU%> D¸ÒÃ~³?[û~542ú‹?넸Áá°§øê&T´JZÆ9T5P=ë;—=5bãÉžý1¿:}7e‚T¨ª‹O/¸Ù4¦DXZ⨷֖;s¨Æl•²yêßñS—þÌ5C¤ç'Ú{C2¬»DºêÜo%^ ØjÉ]:V$Éu „ØòQzy:_ÖÏeÝÿíæŒ œ½ÄÔ"êNÒ"©a /ÃàÜÔ±…„M{âO 튂’P=/Ç(˜Á<+9ù7“,€PŒj*oãåC(˜Yé VaØ‘J¡ûÄêÒa.È[rõ)P*= ý +fí£¨.±˜ó^CáÒþ1F³·Ùâ ÿ“~3ÙIïÆ_Õ†vž2‘Wøê{jáÌãoÿÖKÐ7ß?_Š7ößÉØÛMž |A*M"!lˆKiRªŸþ®h¯«¦`Ô†jœ>[îÔ«¬üÒG‡' n#¸ðÜ ðâ±m"Ó½ ;Üö1dÚ»ñÁôúðb¾Ãèá¥Ý]÷“‡^ )æ¤Ä—:µ¹E;n·£Ÿl „çî¾õŽG× gþ!«A1UC,±î~úµt7e0­;¸ÔäºôðÄéî# F°TP—ïOTüû§A‡ÕègIšC9]B8_Äü ‰ùìƒìê5Ç'©k©8•ã—[ÀVü˜®Lý4Nc WsH Kú·k:'}õzÚE‚!sÑ k†ÅÅyéúMý* Þ2„á><©çø²Rïä)¦Eä ¨óꇻ[:›‡È#9ð±:¢Gã~‘2jK¬Y&ìßmYÎS?{œ±ö>ús>•†Ùá,øu--optÖsà“×âÙAEÏ›»ý¬ðuœÜ¬R ×[5µ,ÛðÉ1ZW0§á–×i4!›p4ˆxj÷¨i廟<¿$;óÈ1a'ášô‰jÂó¢Î¨Ÿ[+û3ôWÂø‚SB-èû¥oýæi:ÂÚÐ^6ad9L6À+XŠ ~ÝYtm”ºtîêÅ9#ø7z7¥»˜z"‘)ö7–Ú§(ñq „4¶ JŠÏ¯öXO°mò¢ÈKaÃÊ+o¸ÕŸÊH¦ûp*ÀCæÞ‡ZM¢ªHT“fýðožÄ0“6Ró¸ËbW*!ÊÁ/€:‰®6ßlêÃ’Wš²9Kæ:¾Ó%²!õS`Á† >?žÜÔkaîõöޏì> WBÑÅp/8Í% ®õ­K_®ÑîîÔ‘ÿaYÿåxœ½¾óŽ’iAY­+ãJ$ÛPȰ*¯ÁøÓð(t‰§vc¡·C™z;'#!úËè—¾´ÂÎíùò$ !i ým÷;µáž/¤\DcáX%S.ÖQ!O Xˆ¥b°2•ŽÓoý§ì «H?»Hãnà b2Ab-˜DެÓ]Rî/Tå|B¤!“ï "Ew»¾PZƒ´Öøä[Eyæàçž… { JÔbúÌ? Nì EØÜÝU¿˜a"}úÕÄ©E/ú]¥N`ÖÓ<_Þú5´eêClïÍËç"i˜œ0ÉyÒ¬u-½ÀêcsÆžð9! .k‘4ïJh!õT ÿ«+•ËcÜ—’þíZú¼Üo‡/¶éäµxx… ¥A[2[wÇ.=¿lã^om÷Ñr÷³ÚÏ‹ô¿ZµXz€üàr÷Ñ5\ óysÙ]ýäïW; ¾¤åj.i‰òÆ0^HY×Ì‚\ ýU{㌰õ‰Í„¸-l/ ÇdÆ[œéúhÒ&ClÌê~´«(µ)ß >QS+Dz~„8ƒIðåeS]Ô—ûÏ'™(jkÊN"½ƒöC&a-ôÏÚY} ý^B)ÏÇ ¶(NGÜÔ“_ +27[–Á¹\x| —Þ. X?‘°}›#‹ŸY7R¬V2c(ú)mDÈ;³Ó.ë)!ä xkîM9?ž´ß8Õ–àŽÌÈ¿Î~ôp¤þ,"  â[ ‡ë½«7Õ*^B¶ñKFȽvµIšˆC½%ÈÕ“ß"êT"¡bnêÍÜ“<úq¨¼=®ƒ6†ÒeÑ݇2ð§ý žÀ›ëš–[1×AfÌ`žÃ¿®µ«5@TÂXgÿ·h ½¶-ÈÐ?vÇ£* †€%x!ð þ\`%Æ0©)VÅLó2ü¶Ålí§³P¸èÈneh"%¢„^öð2=„÷ilû<ú]ø¢âÕÂÈ# Ÿ GàÙE·üÛvc"~ dÂ.HxÆ2'¹löõ Û‡ðÛGZÔ¢§è«‘ŃvSºZ´³u)þdÏ3P+Î\è®Æˆ!K1µž´è÷†R d‚“AÅHZÏé%òž{[w¦µÿæèï=©ü" ý¡ší€a_±ù=B:´õš‹Æ4²r*‹¨ï®Çût_ó®³±ùÑP~û Þ½µ¹£IõH5+iA´˜·?#Í ³$ð‡UaÀ’Ë€\®.ÒÍŸééŽ$û‚ñè.Î^®F -~’AH >‡þ/}ü‚’>vø´„‰)ÐÉür-U9¼âÊUܶ]D£¿Bµ6¬ÏúìaxêðMLäZäSÀw« A(Ÿ}täW_— ÓëD^„2¦‘àÑÉS,º{Þ88e=Vs|Ç$pËÖÖ,u@¦W 1¸BÝNvsŸñ-ªQŒzªo­–Ϥ9;ýÉ·~g€ ˜s$¼¥d=ó½oBžBL0þÿ´¬`SwWE‰,{npÆ£ .ã}=ŒTήê n×–#úí£œ§3ôC—b'£~ž˜ŽÍ½®&AΩc¾VvŽw˜h*7?‹:N3j>nM@ª’SŸ(†ùsµÿ òÉ9§ˆ ó屉FÁh‰Äº¡¡(­AòŸiÈe8·@“Ct¸›BÏþ<ÕÀÀW@ÂY„B§~ÔT‹·;_>^³´ ÀA{ß9 é ßFjîÎv­" ýÑ`O¿<>eÝÅ ü™bßÚMpþ¸/<ýâƒ÷âiøx5Öž[Æ:õÛ ú*#1àªr0Üúލ²”œhî:¬^b}÷ï’ÖªƒÂàÀÇ û/0ã—þ„kW^êéCLÆca6_äÕ烳ñ¢Ì$PÖ·z Û1PùÂS¾…|ÙÏ„ñ5´àSsÿ<øv̾HvžÁ‚¬ –Ã|…c8|¬%puö¥»V¾NÕß ÁB5|"GÈ ÞÔŒÝß­vs]{“î¡èNuÀ5ºÂp²ãÈ%H·.ýðÚ|åÐà+@©p°I{¿ä ôȰø±t¨ûm GÆ›} =‚ BŠ?B1Á•R{cÁÚþ«°Ëd®€íeÝ!ø÷!L:{a½‰$™—ˆ‹Î{Îþ!£nÃI¡&ì;ê¥ ïœÏS,WH'oWL‰ûâ^JÄôK)NM¤>ÌpCõqõ{9{©”ÑÙ,|rqö†Y]V&s™º‘Ĩ"ÚÒ ƒ ŠS\‚Úî»°¹\È‚ñƒ’O}´‘b͘˜5¬Z|©7ªÌÍlÞZ×NîªcÖY t6Thaã5ùÕ÷ì[Ìî—îù©i9ªxÕìÌB0V•Í¡³1%\' Þóí¡ñs00ýêŠl|,?(Wi蟄Yä"@dçBç½Å¹Ç "æNvâyRfñCç¬rñXqû‹?{bzFÆœ[{÷íÜN€Â9Ã%Žf¬s.–×ñÇõ 2l?N¿‚C‡Q]ì9 oÀ§‚ßx gœµïëa‡!¶P‰˜¢t@ 32|u ²jvÈLB/À|¦†± 6/ëz©2€ÁB¼\èî àÄ2áo§á©ÍÄ1ÁgÙ•Ò{ëå}ºÃÜ»¦Ìg^€ÍÛʰuÆ%UÂG€ÃýgƒÃD}{Îý¦ŠÖÂUÍÁ.k ‹é×.O¡G½<΂ŒFát°à_¿ˆÉ'ƒË¥>zñ“ok,’Ã#×UØamý.Ÿ·rŠ£d¬eSüÃ÷,«‹Þ³÷  ÄÆ‘‰í]eˆßGNµUqC:Ta¢ßÞ6«foAu$ò"L·R;9,ê?E²‰øróBdhE÷ê€Ñy'‹¤ßÃ*Z~Š „¨„Š–Æ½6Îêssx”É3¨;ÅðöLÉq~?ÎÍÓߟø èð_®v€Æ 8Sa€åWËQ›fíå‚CN¢.0«‹ÐP^áûcHGä]ÐD‚Â_šµyò½kÑféôÞs|*¤S°-åÆì§Åk)Øw] MA¸hÿ·B*ªçr ¦1pŸŒþjfUWNNG£+·×[Ð.2s¯þ7·ßjá&B4ÂÛ éàzB(Ìd„*3pS×€Ø}n"©lf W M×ÿC5Ý⽯`ļYŠ!õÇ9Øž¨4\à°ÌÞüäfÏ} e~¤¡?ö ;ýJV—€AÐ{&—{«ok±@S”jæY0Kùå‘$´?–n½–—ËNX†‡`ajùý8ý¡ë„aöÝ%Þì›Ä­¨âJ˜|Cn§Ce·´õÉK3'(Ë‚ ê6)vÕùÕˆ‰ ‹¯ñx,pîÖ½KLæ%hÙÃ% æÑýg´%<®gŒ2“$¹Ao~õ‚TŒ,šÑáäÛ¦Ò`Ñ>ð}ñác ërà Â^îXžá댎oó¡ÆOÆÿàx‰30uÀÏÖ .ôaŽ"äë• hQ$C‘‡N !)~“•è\ÔsŒÃª>Ý;n.ùH̲^zÒ|êˆÁp/uJ­´ÑëaVjs7k»[8È’ÖÞ­íþéF“‡lˆ“£ØÓ‚¡¿•œOËé=ÜÝ‚—ò½ú/FCDvFÕÏB‡Sé$ @ƈ' K³f¦×œé«PŸIø §$—k ÎȵoqÚ ˜Ò¸¼,ý¹ëìÜ…›oÌ–/ ñ1Ë Ò0…7}0~ƒÌ Ý0ãÅ|ú†lÏq¸¦øUE$?Ní£-0Ž^ê‡+›ÕÏøË¯wo€hz¼þ¸³h¨òê8ÜõR‚?Ñ[œÝÁí"wFs†…öòê7ý\<$FÈ‘I‰îÇ@t ;U“’ʇ»¼ÓÛŠceê·s ‡?ⵘ0@d¶ÏìýR)X éÀ Üñ8‰Íx^"fu÷zÚ\ ?U®Šo}ü¥iDÛP•f<“0V;LÛ–bOŽ}™üÆ£Ó})dþÉU–öÐß >eŒ³PF½zC²58¡j®x ÃÎÌlŽS€‰¯þ;“bHY<~*ˆPÿÒ9üd…úÉH*A““˜Å׋¤`§(G41µ¾|GSÜbG= òÂJ·îÜF#X}â‡Pßç4æ︚,¼…~¯Xh“")=EÿKôÙìŸõðá*”yRW—»°çRsåh4àuÖÜýô=RïbòW¿æBmžS1†åÿÌV@.Þ‚‡äû¬ H ¹×³HÇŒE·IRbTH:Š,Ì8îSÞó&\!>­­˜Äô¤¶çá^]Q¢‹7*ÚÂwŠëo†˜õ&3ˆ[‚ ’“¥” ^ËTÕãqPÁ¥nšôÖoŠÌëi–C•µºF·â.T€“€ K%rŸÝ[¾žMÈíŒD¯¡¿ôŠ «qNþ9eØK“ ÿ©×üît6Œ‘Ȫa’;Ì.B¨¥J¦hÑ>ž9ÔB~»@# HŠiÈåWŸ¼Xm¦ßõ‚VÁ«Ë1rôV‡®AŸ~ø\]0ïž £³¢l«ÙtÝwü‰KÑÊR…è³®[DN6Nõ3?½PÚ?‰y?"§Ú¨‡˜ñ&N’¥»à˜¬Å_<`|/ÿÔám70Hº=ŠnŽ'T­`q16Á# tѪV/ï©¿+ó¢ä:Ö­úÜp…+¬~Æ[>Üö½zMçÆOo=“0 MæÞ>LQäªl“œ««—ËQ‚·ZÿŽ‘’2¼5!6š­-•7×õw (Ú%ÜëÛò¶êŠ‚‹À ¼ÙÃo›u¡©s²d‡€û‹„‡_¼û%ATO'4J>™JÉäÞe'›¼^/ vÞ®SßÝv,ÂS—áž§´q ÂÓ‹K £zÔ/l®j|‚ëp)XÛevb{wˆµT¶nY˜·rÔIÄM.‚]°"†×,wøìhÔ0YÁk7^/Œ}”‚”©!¸å÷®>\°Ùô*¿ü|ja}‰”‹”ÍÇ+2&Ø%&¯¦¶Í…ê7‹Ü2{b §”¥\„ç¾zÑÒýâ²M†­€Ù0õ3¢ôçÔèšfÇb£M>òà%Àx‘v}iÑa9@?½ùV‘ À›êoô,%Bä«wÇîÑîCíŸ FŽXèÙÇá©®*…áÚ¡‚u%ìk^"Áh’tý£€É&A'T/ÇÉJmLÐyÂ9à‰½M?9PBZÌQBçM>àè{š.9ÙB—‡Swo"Á@ákº[Ÿç%Ì !1-#¶ŽÎN»È}è.1aø!Ð #°Xb|òjŸáÂÀK€§UŸëeü|è#˜Ý‡°õX{1óÙ‘ðÐgÎ>J P9|Lp‚u0oaP+ÓEêïB‘2–’y‘‰î]M=}hnúrõ×€[hâGÿlE†Þªx—Â.j+m"2; ôŸ‹[ŸI™×1¾ø EÂ}(ï>Îg¡×¨µ¶ûÏ®nP»Â»Çµ’úÞDá`?ú*™(ì>´v8úó¬Ñáq¿å~÷¤03}¬$hëê.ÈB´¢‘pô«ýZ‘þC›¤—€/·GC³ö¡?uù6ºƒ@„pÚå²<\þY˜D«…Ý›mt ЂÑjjÈø µ´4 ±äXƒ0jS/!4 °®¸u^öæg„FS‡K&t×£„«©øî凟Á©·ï|ïæÔWót,¾Š1¿‰<…wß¹1~ÕÑ÷ʦ¸þâk®QÅû«—¤ª’C‘#8)Çz\‹gÙ4Ìܺ¾á@:{¹FYÁ¯é+ÚÁògªOñè65Z(ЖÄñ‚K07âA/%…'Ç!g ßK÷ÅHÏ@¬&]ú麄n¨×¹¿ÕeDU[/C›»pY ßõ9]ýw¿¼Öo*néÑmΈDó³·ù©[_^׫0<æ2WòïÇíà+|ÈZ¯kW¼ ôùíX©Ýšt ý‹pG)A&qVÅl’¯t·À¥ŠšðôÕã"‚ŽÂ×í­Ù/w´€ˆT7Ø€(æoÛZÖ"ùîÞkô2Çô0ÞÍíƒV[¨‚G 5…}ÒyH-@¹ÏF;|líBYOÑv‹` Ú“·Ðr \ý&(ÁÏ.§ÙxjV ©ØVòeÈZˆzDV—[·¹-¶Q0BxzTñ;i¼ö®YFOÞ 1Ú‡¥-cÝñ¨¹:pá[í?| #:l2¡f•¾“ô¥Sȇs”€å†ÄaŠô¦×á #ž½ëº<üO¨³Ê\e±+@àsØ‹*á´$îêÆzQ)ZÏ>Œ £Û8ÌãiàSB亞ã„4 ý‡Hª[¼9ž`ÜîÐÑUñÍx +£R/p©à¡03®¾‹$ºÅì œ€n”(8ÄVѾy þîsò²€¨»*•ƒ¡<â?:ݹPÕaóB6tæÑ ïKÌÞW…–Dþ½‡ ÞÑ›WŠAK³‰¥[È­ØaÍþ·Wš7I$ w)»Ì¹uج½ýÿÜv{KÕ¡¿ù©U¿‹ +3¸š$9¥tÇîÖmÜüYUíÀ—paD£@iüíû#Ù³g>G¯/ê–Cx"HºÎÝ;s%DŸ•„uF­®­k™ŒGÿ@R?Jë„€34ÝÊ5JšË×)m.DX®0\Œå[mØM£ßÐ%¸3{C½¬ƒÕ«pîËñö¶F·’˜ÚªÞ>T+1Ûsù›ÏÅL¸å»GR¨ô‘|.º’Ò™$^ˆ=u·•·`,¤ªH]ûþX‡å3÷.âTÔGõK«Û5Ô¬Ñú­S€sšLëñJa¤C¸4Ö¦ ®„wÎ"F#î…5‰^Mç„B‹_„ÉD“©¿;zò|¯>ÉïþýO9s™”} @•)u&þXÐi&£–“ÿRLÌåÒ°–à*d+¿Ðz ªø=Ĩj sUnÒP>ê¾ùݘErJ¹Ô‹o¸P—«ææÃgúÑœxbBh?ή æþN1„üÌÌ–Î?‚ß|§PB²¨À’’˜N1ÇìæïùVÍ~¿•¬84à2d·ögF}€Uפ·°saÎþtŸ¹Fé+fa×:z¹]þÖ²]ý¼?¾·ŸF(03û§¥áî¡fé/ Ué @èwóAèF¡N§¢$Åv><…MsU ceé56égW$ÏøoX‹Éj–õ˜Ì쫜ȃÕ%˜YÊ¢¸+‚CO®W–¾ÞÊü…2>RO£½úÈEÓòDݾ +ÞU¡×Õ§Ç)¡öÝÏ~öfúÇr†¨%ûÔ§òå>èG¿l ’ˆ„Q5õ¯B]>¹È½ûa±!ðJy ¡ñÙ/æYn8a{“¡•EHzŸöà±Åæ/]ÌÏNèyS`ŽšpË¥‹ë¥ï³¥1I ¢iYÇM>`)®3'®ÿ~ Ùj / éf‚ýv÷_f_“>Ú|wɾ;õ,_ýiAŠK)YeïÙ$úÞ/}ü ±!p›½Ä£È«Î-. KÿžS@˜eÌ^‰”ÌÔ€«°ìªßµ)ae@Vqû‘ë‚Ë·"³ysƒ|ŸnR¾Åð˜@í,Wò7âä‘ÜÂ'Œ“ÕâM‹/'mÓ˜]•2µaÚ_T·ÕuáË|•p1ÂDT¶“90µ7_®…ÀÖj—¼µš³Jö€;9bH9‡®¡¿éZÛŸÁ˜Â¼ÚÒ…;"RC€ŒÃÛ"ÇÔJ§¾D_ÉL‘XÜ‚–QÒä»—zöÇ™Ÿ:W/ãE¸ÃïJL  4ÚŒêÆ1{8•ìvè21Š@טîì§ K÷Ëϸ…ÝDf´ |ÇÈq®_žöË·@Ñh«'ÇOàêÏG½ACƒJÿÔG¨ÔéÍQÉÇü“¼SøþÈÇÑßæ§ðd\´xÛ§a¾ø¿|D¤2éé!H -Û'¼¶(âчŸ¢¡#YVÃ*æUØeЄ é[„*q3N„Ô¯³7)mÆåãä@³±„s‡÷lj›aÃ%ƒ3Q¥ôdþÍFƒNסµÂ7á÷ðåö ftõAö$p\¿ÇÑëüÐYjÀøà )[7È¥£Sìê®7!‚›_eÍ[ˆ97áx½kc 5œ9µÙbÒ—0²N‚ë¡ð¬ÆãŒ¥{š›Ÿ7 ßTƘI‡Àn˜Ìu¡d21¿ûˆÀ•ˆ»'0Nl&«8Ä9+†)q­ÏTSnLŸ`ðïcŠñØè˜trĦJº…T¿šLRö® ¹G™ÞÜnyx«£D¹¾—‘†£%¥’šD¦ ØÀ§ïWÊ4‘ÄÄâG@çꛕLˆ¨KÏ~ú±°ÃÒuÌ…ÉÛ‡ÈË-aüýpÜßåÍéħ›§ÝXÙ—Èf˜ûûbvvÃÙGê®ÎI¤a o¬v~ש/“ë×®+â¿}ý½@ÆI"áï>Í?:ô¤‘ztèçKœ²=Æè›“žý­óq.J^–Gé•É]ÇžŠ" [ñzÄøñ"¸º¨G-¤ùå[bõ™éˆk_‚%k‘c`E÷VÛn7÷Ùˆ¸Ï."ø©ð YÊ¡ÛÓÙØ7 Ÿ>AQ€kõÝ×®¨r°Ë "ËõhXº±OÅGøüå·CécsÅs :w-É’³N¢)º2D ³¿ÈÉ3|Öð0ŽJÃHz†žõ&_"¿ç‰A̽M0»BE‚! Ñ „γA&oa©Z·õéJ’D¹=·f•‰Y€P‘bÑ y-¥6­¦zÍŽÇ·%(æª á"_&Mvb¬z‡?Ts ,Ñ ÕQõŠT3@›7týO17Ä¥<äÎZ(«?äö˜•“1Z}z®g(™%â+#PáŽÂφ֋I8¥0÷sg?}‡\þŒ¸ºp“ÂÙ‡držôºD|…cÙxvIFf;¾ÇÌž%+ÅW ¬ª´ÜuëKo³ðçn3°¦"©í8šOË:ÑÑÊFåÅ’žô2QûÝ ÕìI¼8àÞ@|t’Ày˜¸MM-&‹hîbúÚa“˜—ߨ@ÚžŒ‚á"r­è™¸1 3†{)Y6ÓÏ[Y~ž¦Æ×øc8ÃÏøp¢º¡¥ú‹´ ¸·”õoÿùú©«pdƒ R„ÕÛîÛµ…¼šHªàxU4Œt.Æ·\ÍÄêÕ÷ýxåAæŠk³ð°P:t ýQ dpº#M&C¹E«sÏŠÏFfÆß@~H¢Ûi®@â9Ëû$õë¼æ‹,à¾EÆÖÍCRrЗa#MGˆ›?ÍÃOèÆe·NqÂÏyì0Ôn½•”Ö2¹ëÉÃ\Œ"›yèîlåÛá2‘¬r’f%Xœ 0”Ù °%Ýú)â×뎬†pIîU”{+ ‹Ä…ƒaŽ–b¶áô[ýî&{ø#½^øöf+Ö„éE_>¬(ž±û µ™z}…ÝW8UM<¸m1[º#À O­ª··ãˆIGÝåßnœW8uö†–Ÿâ®™‚bT…µÚ¸¥$T!ÎK@Ü— ˜ãc±6¯TýÎå I×âÁmF˜Hµ'-úúƒp¹Ãƈ¾Ø3œÚ´ëGoX€Bfé^žtV‚ ŽGQw ”“i>äÕËg)¾å§KÎUA¡s»H›6펖ä럂øŒS¯ñX¦¾º§…µe9JCA¿ ï%j+2jÙD|¹zëß&w0p¡ù¨Wq ïž°Þ¿ü[˜e¦í¡Ê¨cÏÜÚÄ_¢Cÿˆ1%B繫—Þæ0òÎc»%æý3;¾Œ’ÿ&¦1°Èþzj"–DZ„fòèï@÷ù_ŠÏˆ·a`™‘ß*TìRQÊCÙÌPqR2%õ7¾þ ª’dBVù§®Ø“à^U¿m×ÓV£:óµË÷ð؈ÃoéVr÷[î³ 2ü Ø!„e›TX¸9öhó@SÀ.šE,b =të?‡þÒýIÊ&D6ôo ÌC“¾DøVÂ5/¿ÒÔ¨®åÓ±* À®½) ˜U]Ý«½GCaŸÌeÙ–¼`@pòDr\rôr¥æÏ°‘^]‹<(»#QLâq—¹tüp¯¾ï ìÜõ„1½ (?-Äg´t ž”/!!.Cëºÿ¾yžìâ{Áq^gW™™(`ŒiÎʧÛÞOÔ“'4üùnWsLÖÜlýEŸ‘E€¤ÉbfÀ·z£‚±Çâ9ûo [_ Âà‘½Šû¸ÿHON;V¢A™¡e¢±úøÑ- ³Xúßa(ÑH=þóq–2rÂãbD0ÞÃÁ ¡Ož>Q¡qÂø¯²ë†\§ãO@þ/˜u†—µóäßBÇ[ßGÃÛ 癪3ªo¦GA/£rÞ]²s Ün.:Üà0þä­p´r?­§THÌôèßñã?õ»ŸùGøÍÂÞ’b‹2 éRa]bevõÊCQ7z!×’ß»† ¦„x,``êWìÕ*k‡oî:J²…ñÉÃrò†:EN%¸|ªj©^ŽÞÚU½^ýÛbb^W")V>Ä/<0q&J¶§ åÇæ¶®ª·ÁÛªÁi£j;Kœq `Wžš‡þÜK—aÔ”bÒ§˜‡ÚÀ]´º‚üðíÛ0Œ½ÂBT¡<ÅÜòn$þ%zИFÂB/o•°¸0Ö¸oâÕ÷ÆIÜ,ÁºwK‰¹û§Ci"—wW0òÍØÓ!'yEƒtáÖ¾E •\ãWíKë Q†Ï24…Òy»«§L<»k©%µÔí% (¶^h gúv­¥™’¼H' ^ø!ÞD.Q”oÑV€Å³Y¼u¯¦uU ÈÓ˜¼¨Yk94±‹Ç%X"[šH7®®ÉÛ·–þæ?‡›ÆÂ5jL¼ôÕpD*Åx °_EI` ¨:·>þ‘ÔrÁkÈϪwòí§´ê4¾Lšpøc_É;E½ÑûËõLù1¡ôØ] v;4ô7z‰1ÙdHâ#è·x ¤Mê] gF{÷t6Lýoc• ²nÁý5‚Y$•ØzTw)57ßB)3ê3>è!äaOóŠƒrB}zÉ­îAjÈ–h͵7:ïþ­ÊàW¿ 2ôPk±ëÅ’„‡Ë-léZB/18cÁƒƒTdÖOEŠUãpƒ¨†nŒo>‹´ŒÇã•ÃÍÝ¡­:z)&Fœ†&Ù‹§ïæJ6 Ïœ‹³6'APx:œ~®u¤p3%wUt÷À¡pïH«Y…Â%ŒÈë{½=ðňmnÒõÝ“°t̪P±`K+ئÁäò? n”WÎqâÆ£wwíµ «`f4{D³’’E¼M=û·a¹«6'ä°§? ²â©!»/•kúýÅû!ò"XP6!U£]»^åbÅ?¨®ê¤K’,u›¼©Y‹–2)»¢Ã}¶ÕŸ.A>*|-û·o´KÄ$ýõÉ ,˜(vxíB¶¼Ý¿î|¯GD2‰1ôY|pœ«ŸÃ|UyûDàÃÀ„l–CBòˆoÿ{¸çy>~ Ö:NHá>ÒÙG ^±.í=É…h!?ôqÅ–·kÜ£äN§y¢¦‚‰)³5ç~í´&¼©UDP„3^¾t[¿%d]‹ë¥ÉÏ0aˆc{Ož2qUП©pž O¼C(ªÔÌ€ÿßÒÀÊzŒoâ¥C›GkR NTwQ lb†sºŽ¼ H$Õ¾õ­ÙÞ|Õ,.†]1墂×QPáúhsH@’@׋ÃXÀFÈZâ=,ÆÍ•ŒïÐ,ŠQ¿Æ³ÿ¥eèÖ^.›äÂ%– ·âÈ€†R5ÀêâxwËТ çâ‚]PC¿{â$ #a+AÊO`­©ïéÛE;GÄÚ%™ü¡ø†5–,=ÀšÙçñáNº %yzü¢`“ájžÚÐeéL ã'DøÙ¢¥k¡S9ÉÙÎX•­ 07û¥tݸ õŠü-râo÷‹Žž}ósüAzÉÑ[J5ªê Ùø¸t0cƽuV#%òâ„qÏÝw=Ö–d’苆p/Ïk 7Ü àò¯~6‹p­ ·–; À*à¾Åf£J“ží}wq•P½@Æ‚ê}³€Õ)åNË€ Û,¸”«ÂÈ„Arxeέ–Â Â4FkkÏä!‡—þBV¡׬7g~BÚŠÀ}èeY÷êêmÓËÏ_=¸–ŽjAp:uöÛF[‰ÒåÏYzÈ´˜Uin¬ß¡¿iè¦^DŒ› æDÅŽ8• ¨¼*Fl â&YgQwA Æ& õÝ0ôS.C»Oä·Â"Œ©'hAÕ÷Mqvo¡‰"'Y€ƒ‡²JÅ—ðå=›:q*…h¹Ð~têåw2‡·/mÄónºß‚²›¦…É0®pÜ`)ÕãÖ‹ýø“¼}8½Ü-ž†‹¨æ˜Ô`ñUUô-fH‡æ6áÔªÃâ%"á +áÀ…<ó ŒLès)½å[êòUr»\…hXYAâ´c ­pÝ!òº®.æ,ÐÓ@G(zõð­Æ—±ZW‰"ñì^µ9²cìŽÆþr“@ÁþéK„cI 1‡ƒö~7Ñ—½µ5.òë÷<}˜L>:åKqrõR8}ðY!‚ÕEQr¡ÔX¢ ’—¡¿óbŠyDºõ¹ 1‹iãý8yª<>›Å€üX:AO‹ ˜íqyË”y /}Yrš‘]SŸVøÑÍB¬²gß¶˜oÐ5‚½^úüƒÓÛÜ—N“¹/ó¨q•¡GÅÇ…97fš…Y BÞRl%c*š#õå)ÿ’,¶‰ <‹Sðñ7~)déðz3' ’E  yô‘Çæàp›$}=ªE7ð)¯¾†Y¤ðêâ^ir>¾¥(‘¡Ÿa±Úâóè§ø’/=þ$åx6ó‰Ê˜ã7=Ç€‘À±2PŒœÂ!å@¡¡AƒÃ³§~Æ·.{#ãµ³0¾?®—ñMäýqm½‡È†ºÉÂY1Ê ß°©b(x ÓükèŸþË}—¸~Ô[ ¶{¿¶É'7@ݤ£ä‚QßB‚Z‹¯–¬«X—O}WÖFMÇm‡/þõiLI_¾ÙÓùÃû7n5RM®Ðí¿²¾K&úìf!¬Ý«2Â|Ê‚)³ËàäÔ®/…}4• Æ¥'48y~Ül„€â&Â…Ï&Ç#ªƒ£V&4ÉÞMþÍìŠo¶ý,päÔuf‹"³okXràBp ñ¾žµOf¿Ô·Ãœ9ò«Sò(ä⽑—/–ë¡ßÄm÷F(]XžanªŸˆ¶«÷\ kù[›p às¿ÎdÕú{WéÒ1ôo‚+| þUÜÌ?"b Y&d‚¬KøÛ¿³:ñSÌy!'T™xêÛ&#µˆ!ÇŽ¤îèMxÏýᙽǃF× öúÔPg6À'S#êXõTäO`ÎUr`=þtn|ËSñqåÞÂ誧iØíï‰'ÑÇ·ÎîR â1ØœïŒ1w—ôåÿãÇ¥«-0eª°«¸çP$ÔݵõA³Hú…íCÆ4:Ы9p@ٙǫˆè-d»ûãf”Ÿ.ÙSH[66¤© p ž¹Ÿ^sLn€ƒ¹Ô[ß¼§^ÓÜ·À·H°Ô ™¬,Jn‰—7(ßuî=Ìêúkíë`4ý.&¡±—»ûÛ2åÁ(­¦kïþäü³ÊåHÓZÓ©Yß~²5¾†þÔ”’1G•:ß"~b꥾öb~TÎÅUh®Ãx;½Vð1þ€z‚w}ÙOŸõ`{÷F<ÊKX{í}£q§VñÎ4µßÜ•rr^ãÑö„Š ¦J§£-žÉ‡ +û§“PM °8¡âi¶<²ù°°©äÈŨ3ª‡ŒGYZ4F„Z!¢þô„­ƒÀIØV'Jbê;(¾Åh&Ã];ºmLC0úð iRnìÔ†•„¬¤ø0¡æ¦Ûú›g“ÃÚ[¿DšJ ¡xR=Õ3~û;Ïà*áM&u'Ù?µw«¥¸X‚##« ¡§g²<ã¸{Á}©Kduµí "7bªI`.?:s‰úT/_”tú´§·ñ.®Ê×y1(,Cÿ»Dªsù-À;艪åd›…Ë)¤EîP)Q “O2(‰W'²€ƒ/®%BAz(`×-bo=GRÌ!8| gwzÛ§5Ãð¦X\@OþÞµ9¼ W`»Ìˆo÷±Qàb‘ynßÛX\?m ë~ãšú¨È Çþo­¾ biÁt¥ðbLÑëã@DWȆ¯g¹Š¨iJþ_Ã¥aŒIX¹\¾Û0S`hȸtë»±\–QHÏú Ò±È:;O$ÀÜ÷à(a[ÞÚûmÿj3é2\L÷ú´{?P5Áð\Å)QãÈ­É‚LõqsPß°>y|!U_®­j+¿DR#*Q»³ûrOˆI£ßc®T˜– Îšõ-LmÀxOº1Á™¼6ëŸå © ¥!’ln_z|[ˆg!¹Çp2˜\n‚ þ‡Tx‰8C8V§žøô[Œ–ø·õʰã\»øŽŒ*`ø&¡,ÂŒ"Áׇ+üñ°ØBÝ„³zelÄ ü@ÚB]Ÿ³0ŠÝÏuv›Rfl4(ß³Ÿã¤P´àVÌú(‚4 ò³DhM’0, rî~L]&_ËÈÒX‡þ¾E*m««Ùc#¼Æ½~)]!yÅ)–•Ó:Xp †çGq Ç›qgóÜ[èP gðÓÙý×å Šƒ"á‘¥wö¬ö𷚺X:¼qn—Çe8" ß œÝ‡_åéºhø*  ;çYX»’›sû¸‰† –É'CÈU£—”dÄL“FWKFÈçE˪r™sþV²âBņ.:´ë£Š =˜Ñ‡NT1+ ûîìï!e*š]OÛMdÓ“.}«¬ÎÐ8M"1‰ÂütÚäcfѬŸNeÌMÇ-[f7ÈÏn_9Tžñ’"®(J[ß±ãìåv{6F½†wŽ„å ÜÁäDóbI*AÆ[€Ûàìê‡ÃêêÄ!„ Å1þÍå±v÷¾x?×"Z€ÙMè"¼Ï®N¨ˆÎþsê‚ße x7ín5’Èxùñç˜Ìµ@ ]N{×Z8!aºî6z* íCÿ¨W’»úibç"R„©‘o®ßÑk¬CèR®UH4œ2,û:ת[¿:›Åáî­p÷Æ­íóqAµ÷é\ÝÕ*€\„?ÂfŠ‘Ý[”ð°¸çþÔdhl°¦’Ê/ᘔpè`^ISR©¡¶%µÅ1. ù†IOm¥™ lûÕEÿ¤„Œ=Cæ`i¦H_ŒÐä CZºÄhBmž­Õ-,/ÑûM拾œ`Ä:›dƒÛWÀÙ%hëDÕÍ6P‘»‡©q¤D\–s‘2]€é¥²­ãÛ®Â_+¦2åÚôÑ»ÑÐõŠžûVÇy% D27 ëõ À|wÁ,E:‡þ(ÔxÈ$ŠÇ´>ÊqºâÛÅèá“‘ÓÝÔK˜hV w”DbB­ÅfŸ—R ž½…é¼aÙ²ER[/xô›ú·½ôS›ï ´¿þw¯”‚Ì'p4Ä»–¡'ªo7¤´`Rñí¥Pæ'ÌXawJàWÅ“H<>~qà½Æƒv3áèêÎ1Ý'ÄTlÄÝOëÔe%à¯Ö¦¼5ÞÅ«›SðK9Q”²é~S‚ÑI_â¦:ü]VÅ>䊻‰“ñ3• ¬×˜ÞEF¤G-Åߎ©¹ µëÆßÄ$ø›Pn„vûà®v3ÝÙª]€×¡Za#ZÀ8ß*iú;”?í'öq×+‚g Äâ³ëä¤ðŸ|C|:"e/Sþ©·W^Σ‹®`Ò1÷gD…‡ {yŠQñÛþtÚðeaÒï OR4]–ýN%‰ùÖS6¥/$è¼Ô˜o#`e 9„‘ÐÍ)¦Ýìª&Bïd3Ðz2ß‚—@èÅúXvüíMoþ^ê7DÇy<îbZ‘úäÄjg®Ã0Ð Ò&£Ù11½]æ¯Cæ>ó`bÀÄI_kVØX¾,Ê$ž§r ÖhÝÀ‹Ò¼«Â¦Ç( f7…UpËýXŸh±7[›Xõ|°ê°vHÀgøXÅ/Â(-Š,Ãá´Ä_'‹T¥TB@䆛=*ŒEH¯iG¹ü.Œr†þþQĆ*Š2|mÀøO¡+‚\9„ƒ²}nÇ >"6Ê‹Èò{2 ùÚB-¸—Г!wÄ]åé­‹½4Jìo…1¼’<œ­ø$…` Uy=?ýÛ&a+½¸ˆiÖ[s¹c¦‚ŸkLÆ'ÏÁÖ›ô­äÁÁGq¿¸3dBŽÄ“?IôÔµÐô2³2æØéü±Ç8›X:òQùËqÌoŠ”7ø K‰ÄਫÉ=ÌP’“'Gztù¦ƒñFcB­^4»Ý;mªiÇx A±–ªsø´ ©'â^T ùumêoUè Þþ·VóWÞBCÜFº0Û!ØoÍ.êñŽ®QžÞËW¯|Zµlm¬ÔªR8¼Ñ_|Ìñª¶C*©_4Ÿ¢4ù§cUv ý³J¤C™‘Fîa7!…ïê{a#yqˆvêÏ~„I&&Ì 7Ý5[Ç_pi6ÚÜ_¾Ø‰5€ g:L5†P¢õªv,¿—гe“x¼¯†±¨À5ê¯&W3ò­ÍrôWO¬1ü¸„ "F=3nWîGÜe–Þ~—ûÖòCˆÏ .º¼VlA‘"¯½Táfz2õñrûÉì:Û(²ö±Éa]Û`ñôÿ(üBËê¶Ýz~²êpaÏä!2®âƯ.o[TU5P–Ýô½Q‡¢õ;^ÎòF.=ý`ª2÷ÆF( øˆSÕáÛp²¥¹oaÚІy¨Dqš]eÔAö¢íáu¶tëS³†0#ón¨¡ð¸”!*¹îx1óëÝ.‚€„1é¸ OÝ¢ì} … ¡ã¡õÅö]L…u1rHâ7ÅœÒ3ÇÛ©K€FˆO9û&o¶Å›æy¸¤Í­8)Bž¨¨¯þL÷£w“¡²ÕÓÏa3¹)^õÜØ¼€ÅÒ–Õ+XlË›=t(nG·€e«†~jõñ»!y4‹HÊûxÀà¿MÔ)g² ÉrˆlûK«6½…¯ñéJ¤ÊëÕËö[0+/?‹°Ï«.û«¢ÍB%Â.Ü7¾@Vyöá‡1Eq¦*DJ„-ú%Xì<óÍÁéuÖ;Ø4Ì#Ž£VØá ‰Ñè~»~âúØÚˆŸªÊÀ¸ ŠÑUP·«'á®~TÅ},Îëù.¾dhêé/bW‘£)î«:ÆVü,(;w4A“àÂRýHrê"®O#òúÖ¯¾ºñb°¿J½"à—ô^ús%p¢l‹OÝýñ#F¨¥ñêò2Yõ‰*Ú”Ñôè¸&1.B†%?Z8š Â/ŽC@‰7’FÿV(‡7,xCu¤ä“T0ÔÇgq9ö³LEÄÔVfõoçÞÆ0æþ¼Ã÷b &c¯D¨Õ-„"pïˆ"~ïƒmÍz#YÁ—²/å#<·$Ù`/^#[jymvX é>óöBÂNjqú GT$2Xn¢e;…éK¤‘1(þø͈´U{ ÇdÈ0RäEpCi'g_[»˜Yøíèm­ä.$YÏð[xþÌ«‰”EQ\âyÈžÍÙ_Ç!òñ¼bD ªAA^b”ŠKWXàkS¯<+ kÔÕ¢Aª§~š«‘ñúÕõ©sèûTDS¿ k 줰r"GRI )6Átgñgõ#fnð&d¡b?ݽ —V-¡ „€Her Cº^üÖ_ïVQêûå6.‚ÑV"•µø&øáOÛXv»®Þ—Ï^Tp§¤É ”fênL–*n·…8×[¢`ô–ÑP¥ëhû(ÀXƒ×Æcº 5æUè&(j3ó("3¿}öÇŽ Ô:wš@—‡ÀÁ¹;×~R$Ùžýoå'FóÃט³“¯è¿5U*{7‡"Á—ßRU0µJið(ß¡]r-•<¥ut)¿§÷l1 < jbýFRCòÛU@Q}ÈjÆ+‰ ­`2ˆ\œ«Q¶^Ê<ƒƒpN³²¹½2‚ÇÀ–lÍ÷î¡? Õwùmz|ûÛX*tQŒ”(aFÿØ$œÖÖ«œÕ˜Ö9úr!~º·‰W.=ô¢³€dR¥ ;®»öèb@¯ðŒŸ"iŽÿ;’t†_ìäòI>ò^z‹Þ½å®E/½tè§Á©X`Åâo4î@Qçcz ÎyÙð¨ºý’±Ö‚”Lì(]a´äÕ½b)5¹h– L'У¶IšBb"È›É9Ek”µ„©YÔ¢†²·ð:ÌÏ?ºFªçÿqs"××cAÔÝ8ÍÈ"H²´‚….L¦ëþ.Fk§âkA¸èÜϸž%!44*IcøÖ,õÁCÓWnè@åµ&OÏv7†§âx÷S½zß0ÌÔc¥ž~DñA¼F÷xx >MGhb䫙Čr†(v臡ÖE§4ô—þ@/ÅŸúühôs ‡$l «ÇòÛÙ G|,LA]xt[.f¨¹Ö UqñkÝ…4iY„;³KÐSDXÕy’è¯BÛ7oìÕƒÉ*ö‘Òz?Ÿ¥—ú¼Æj»6ÓKL‰!IËßkÓ®]·~çÕµÿÛÓÞÔ6-jï¹öÙ³‹òdùŸQ¬†S°à A)?56Ó‚Zj,.ÊÜ»ÑÛ0a©×nhÎÇ:XõdN@s"‡ÑçÞË•D;výˆü~wí^ ˆ°—nʨ‰ø›Àf€Á8Þݽ=>B G|Gì³KpÅ]IÀ'©OK3Giú3 Ф¯š+qäHn°¥{rKøæ±édäÊ–;e‡Šö4”ú¡>ᮄ½B‹s;ÓNŸCÕèù!l@áú¿ü*êõ¿¯÷!}¤'N‹àìûžvÉlg71j¬¾%^¡þW%âËÈÜÐWŽ>w%ƒ°öö ޱ¨Æ=ð T€9CßáƒæTïK¥¬¾Çh~~m[0¡ KqqWÆÅ2Ì-OQW®žDQpÏf“Gþ‚äùÙaG²©ùò QÆÖàú«¢À¸ó‹, ç.Þ*4ó|³C4‚¶!¦ÞÀ¿,]h¯L`¨H£ÆK‚§1zcÆðºX‹gW¹†2ëÂÜ[3áØûãÆ+°þÍG#×u÷ÕýóÇÈB ›/¸C@y1;i:%}uÝËP›œ†Ûuà*\%÷¦Sá˵ ¨EgD[ÕÞb‚÷ÌÕ´·Nýp“@sýжµLhÝ:‡þä3LÂtÅòÒœ­˜ÀÌáG“écÙZÈôr á4¼´¡»0r!jdôú²–Žˆ(¬±"šœ}?’¾² c D̸DJŠø£¼¡/'¨–ðÛ¨ò) ΠæB¨¬ç• ĸɡéÒÛø·Öá£áð ËF»»À¥„'çîtÑF*ÆÓwG\ñàðÑÎàa_Ïfó1¤*?ß=N:Ý¡Ûrx£€çß}Ô'¤m×àöF©ÍEô×Õo€±`HSÕ]ÓlJÒ³O?„΢a/ :úÞ¾./3P{þ¬Rp€²zjšEÞ*H2“çûX·2axw m¼ÍU†ãy6R8¸öq=»Z¬Ë.Hɺp Úª}¶éÔ¦Åî ‚ÿhu­H‚ÞÒë*f¨‹÷ÄG¸¾4éúWõÝwóÝh( 0º<\ILWÿD¤Ãðf!~§ß©ˆŽî~•>¤¦…ŒR[6ºµYg$.?fX @h»^>jf¡Ï>Ü?¾ÄXsÖ·â0·ë´KŒŸþ—‘l–Ô[ØdE'±)T™'ðœ‰÷öŒY Q•‚!«°Œ¨Fì¦aÒ«nŽd:SÏ¥™«Ÿï0ÎÞX6?ª®š)=»gn+DDUñpû eƒG÷%lc† %c‰Ø"\}žˆHüí›8³£[ÐÁpΧÿEOâä0ù¸Ýkè}7Ñm銂ÍYžìì÷ÀW`ÉÝOƒU˜ÌBZؽ«JVtp±„ÁÏ›f àYÂhÈ“[xˆªà?úÄ!ÆþÞµÄE×Yõ#– šÿ/¸ùK%…|+pÕªU°¥køòÑ&´Öq^êîê¯3=í«KîÓä#x_ÑäSS¤.uqDêôÒðMx?1Ò,ªœzpRo I$Î +ûˆu^=ßm7£TÜÚ‡—Î-”–2öÏ ûñ)ëÌ/覃 )ö`ä¨ÃnM†yñ‘CÚ̳©:¯n¼—+ÄÙéöhÓP¶?áºÓoü¼á‰5dr-©Ÿé-œ'Ðýó&Ô·õÝkày•( CãAÿìa‡ÚvF]›¢}$Ú¾ègxC¿½ö áAHd ¦^è Å-ói¥RQ†7=­ò&Wâ(_Oƒ×ulÍmË# }‰Ì $Ãp‚Ú` ¢:)ìä¥]cè_—ÿêm‡ Ôb6S$¡•’¾>Ê:¼É*… ºÁGè×hP/Á8@ Æx¥–ô.õ„ãíaÄ7TÞâ‘Qj~$} påÕž¬W ªz¸Ð7¹;`Üõ§=Z¡î­1ߨ%º9…°ÝzÛ¾Íâêq ÜÔ~‹¦^sT[p;‰;½û½–¢»úËØS^´_ÞÕŸ~ÛC×Ð…’‰%\ êÆW—;W3¯v¤/G b»¸X{N aï}º8¤øÃ¥]újU‘kB»…ú&ºãè>‡Þÿ½jzËúN³i©ßÚõê)6#´h„dÅxáˆuU ³“ˆ*ˆs¶4¹^Ö¢°ÖFŸð%ßò8 ÒÛ‡Í9† Çh†f˜ú8&îB`²zÁ‡>‹ñuĸ€B£¿ah*ð faOùî&ªòhÞ¼Dgæ)±¢â œ­'“I8’`€,pî ÙÒ`=‘|ÑÂŵ†ÆÖxBRáí×í·îëÑ5b½c>OgI ëIPÞc2 ‡žÚ%h%N?ÏE8Ý®"Ë`ô#\áhŽFïñ}z~ó醛¨„õ¨Y†p8¼|ä2ÂoÆ¡K5J–‰Á"-[/¶èù1—^ü“6/H²»'ÛQÎýòórp ~*¯Hmy»hy=NÙEB•ÓàÑÛýýöЬŸÞ:%ßÄä¹ ù7 ªXEÈË uw-Ððp¬3œ¼½°fÉ*`ØÉö©;ŒIBŽ·µ_¥#Fž âÁ0Ⱦƒ¡_޹!B&»÷åÚÂaXÆg&ûÕ‹´œgÿ­Wo n¯}·þ¬ÅÃØ…[DÇU§C“pp‰™H8h%¿‚¾ó©ÍÀN$®wo×­7êdL„jâzSpõ"\þ6ý…ÊÆˆ7DbäPiߘ=ŽÈR;Œ}Ôwøx1ó÷~*ö³T‚PÏowó‡Wlúºn“q ŠgªHL×ç¾ ra,ýü7Á}%?¸ê÷°]˳†„‚!DµÝ¸uÂÒ[06&p&Á‹†KÄCH¾qA¨c…Ä%lhy;„Ë&®æöσ1÷ÛÄLãzÒ¬iè?$€ãƒoV_B84é§Ÿ~»0dà¤Á²ñês‹‘OH[÷Öê 4–HØp§/EÕÍi¶hÓO]ý²C\^zK*Ãe×íóò&º}5[Êñ¡—¾4ô-²ëè¸ù% 79ÔxlÊD8!P¦Ô¾ºV–y²#“.K·y¶_MTîw/Æ¡]›öÞ(´Z»ƒU PÛwã«n†®ÆnÅ¥éÖd øô­ÐO3û/ndÂ,“n‚ße<éGQ¹C(Ý#ò×L`!¦³‰3ð“Óó}õêNˆ(ááE$ªU€÷Õ¡ݨÄX”YÇõ8´‘÷„¾EüŒ ,þn_}U§’‘È/(Ó³€ 9 ‰E:§õMÌÜl‘Úžü§X•õÜÝl ý³7ôË_eKý™ñj(ºÉíK¯üìOgtu¡$¸ô6Ó›~Š)Å“òÀLuH¾ÃÂæÎW]øgó2YôåÛf6@2}ÚÒKí%üün˜8à[“B<Ù5ºídçÜÍl;ßÛ§´—˜õ ”©{‘B~OXIO¤uÔ~ ù*Düåb§Ûí†ê®ùˆ°+Œ.ªù£Á`mêJnÉ‘XDÀª<‘‚€t?ª<–í,ðŽy€Aéß™Áóf°Ž­úpëö¬¦T0;qàK¦ujSâ[ÉÙa£“‚ôf.¤ËH€6& 0FPø½5NŠ_eÝ'Šæ‚B¡,À“¾ñÌ¢ª&z(aÔ¸RbeP.½30„+܃*æòo¸ŠPx0äW–D„ sŸÏgŸð“âJ Úæï‚üqõ«Ù] ~‹È.È 1]’ƒ°ÃCœõvG(óÞ/=᪺‘¨0>úøþJTÈí³ð꼘õ댢è¢Ly¹Íãñ›”׺Ê=©äM™Ù—kŠYp$x `äXUË!¾Ì~¯Þf—¤:‚E²5DÞÓ6ÒЗ ^Ë8R¦:™À¨ïw¤©õvɆ‚…à ÄßKX†Qµ]½pAɹ`¸¼\±]ÊÁaÂZ{÷çkXú÷${* ¼špL^ü;ŸDáú¶p adìøy¼ÿ[zÁxDþ]é}‡}ù‚‘ ÄfBf0à)+’l«mb<¯3Ÿ#/9ìÙYãÎ~k³Èkèn ™æ!š q)˜Ø®Õ+Ä+`èÏ3˜ágÙÑÄâÑRÂ’æ>u,BúÀ‡fdR¶IA?ûCúè4ò+kéÿþ£Ï¥€5Ü8ÅÅË£Ip~n“Óxfዳû>©©u)ßVA+Æûœø'F¬^èÒÚIˆò#M&Û¥É JF8ÜÿŸ>ñŸ±·“­Â^bê¥yø¹n"9˜•Úê)¶äš3†…Jz˜„ÿÌ_//œ'Íg2Áhé#£nµ’.ËÇ*9 x Mz‰™~W}Î]Œ@æEÁŸ¥©7-Ã8,å“0 ˆœ Y¨dñú=]࣠EL&ðÑdY3Äê2 ïr»¨9T­p:nÞ)ŠÑ£¿ ÄéÛ¤(äm@ä+4H“ß(µPlw8èå#í9%á ñ,ÇãrªzÕÕol2™„g g®¡ÿMe_L×]eKÝè›í=.A ŠõWÆWßM¥ZÚ½YEÈì—EŒ'梌Æ`éÂ7mÎC·ð#¾lX"5—H†;€mcí‰ «\õËÎé§p[Å’I3¶Í‡^&ÇB±ˆáüï¡xÑßz{à´+ÑT‡’PcDŽVarkbê¿Yw5JL¢Øèçª<ú×·-kó:ž7eÐZo(À Z"ß÷ê¥8 ×hjH‰þ9ÉèÖ¥Sß-)ÃT=]ø'‹à.ÝcsTãÀ(L"€+ÁðZ&!a{f0Ñ·~S³¢±|EõPÇá.´Œ“`ìîý f[¼æI~ü­kŒfKBŒö#l?ySÏAßèÃô‡ùØ.|©žñ0ÏF„ V´jè?š¾|ìCtB †º˜][E2m"¶„‘» ꜡s?ðêÒH‹Y¥GÏ}>Êœô¸í9Zöž63* ÂÀÌ JèCÌJÕP¨”%ŠØ͇{Vs8Ú‹gؽ@èƒq¼Í6_…™ÂÀFÚ‹S‹L½ñN? òû€ /¥˜û9 L’DáÖw?*õ gDõk–L5TÀEñâx` SÏ-%3ØCÕ5§2KŽwRZ´g¡aÜe1ž%3’éÈ¢è7‰"äÔGH•hP2*&µ YìõXKµoáyi¹{„âõ÷ÒxALé¨qb­¼…¢qò»¾ŠfaO2=ž-uLž 6,³?ÇÑèË&†ç] ÝeÌÉRÅGª€ïCЈ§~o‹–¡|Il““fS3‚Å%5¡D‹À«§^š ÑW¿pL2n² G*‹î`ØÛu‚½õ¥S—¾í©†3:!8»LmÙµ>¶:çà®/UVÖ¦ù©ò‘}M˜…3 ûÑã9–Y•û›·S±ù'71«ŽÄg5Np(žîLîéùÊ{±rvÅœW•<ø<£Ê ³'0 ¬rGÖ­oçjÂâÎ@Ey”­µ?j»!?KOœ£Ãg{Ì]ÂÇ:É܃OQP­ÃAL>„GnÕb³YuΗþkFЪp1Na܆lûhM õ‚n~"Y©˜´%d#ë,Y ýP ¹ÛÞ„ÙJ•îoW|»¾uk3̾IúÈÚÚð¶\mœ½V¶7|]c­óTƒ ¯³AËÐ_êtŠC±[ºlüê¶ ü?ÜW˜°"¬$ãÑË2Öˆà Te’„÷ÖË·î¨ukÏú˜DçŽn€ˆÊZ°Ÿ^Æ7Q;Tó³ù³ÎzùÔåЃ"»kv£À¨<Ž!¤]ê šŒ.8!šÒ-3éëíÁ3ÿ…:@ÞŽwò¥ÿŸ£`rˆ×ߣRâ(?`ñ³ß…ŠíK»Ð¢QkÔÀÍ3bßG¿%ˆ8!ÿéÖŸøX’…9…4¬H$ŸÝÈìëò¼ gš¸3TC=™C¨¶Ü­/#ƒâ”íâá÷qÄ]±Á‰ 4óÔ”_³1)È4”o>=Fªgcc[¯×ÅMä—NánñòšÄ´™ð-¢eGך­ð-?n‚Ò¨w-³=éú[ÿƒMso ä?Älš¤!(B.ýniÙ&àî ±:Ý‹BvX´{=™]HþtèYüÏ’¾Ä”ò 6]§qq&ýÈŽêä^ýÂËš$aÛòO¯—»6´E#r Ÿâß\ëÈ÷e-ŠM𮼽õ4ÈÊòayÕ£ßûiÉ€anûKioj«í¾ÙЪóí‘€‚•P9Ü‚D#}ú€ÄÌ#‘¥´q‹,õG†”a=rÀ¥WxÅ;º«¡¼è2.ÃMĽÑ߈Zòô'c¼–…¡PoqLº,G»ý$.1‹(Ÿ„µ|jš¸¹ŸÃ¡"o}MÒßèúmò¡û¢§_à^Zª]1êÞZÞ.·'\„Êß>°#Q¾¹2¥)”guûÿÐù(ñɺ`âs•§Á üÚ}èhÐ.‚íNÐ j¨ÂšÈE]J?U»—Z…K %-‹ëãÞw޼w8Ò[èòÒÝ¡­"Õ¦ ±bÿ°(ž…ØReKʾz@A†—7Áläôê— Ç|ïšEŠË¼¤I–G(3µ+&ÐYÕ!oÅòùô“Ðc28̤â<7á+.[æÉœ 0 9u¸¢ãVaFÁ䘕|ür/JÅVÇ& à2ÆaKrØrlèYH¢N×T‡b‘ñ7yƒ¼u?þNªG.€8äΞX¤m¾µX­¸t¹À ø7nŒ7Ãcdu„UPÓªz§å;Í‘8[¦›¡Ê×;w(>uc¤G;´x̶°ýt^úòþ<ÚòÈ’pÖÂU±ŒÆªù©ÉS ËŸsÕ=ô¿têÐ[?„Ÿï*„39,¾(g9m+Sððƽ^½°P]` #sp-¿]OÔÌÙ"ð×ÉlUSÀÃwFŠð˜A&ˆ4'h¼q´çÍå²ÚDÔ6ƒ¨'S-ÊùÙý¦„)7ìE ª¾ÂN¤TDPbŠQà/ßµý7’Ü(øêgÕÍÊ]Ea{t½O`LE ÁpOä Á£Ã¨åö]Äm~e!æóð1ù ¡Šd{ôçD+xôFª£'&á5›®­3o[8<㪄SuDêÄ£«1h@¼ج0@!ÆÀï€7BåT àOÁɨ¿ó|A’¦ÒBºZ¿æ»?gT òñ®à(éÄך©ñuùW-çÌÔ «“«÷Y&G…‡”?À&¤vÉ÷ž4ýáÑqGÅM>RO:g@³³ñÔ»—9Jà x'Á¼ªD[\:¬¡>t&“S‹ÛO3º ì±ÈÕ7/¤'/Á|'¸‘.ÇRvVÒa–~õ€dË/¯myìT§J­TÖE·!L&¸)ÅnÂ<„È-?£A†¤ü Ì\ú.•ÔË‚wV˜ÁeH3 '&£¨89è† T’êÌ”{RI£Ú¢å@@Fâä¸Ó¢:cIUŽƒW;8ÔO…±†~/C6DdåœS¼·2$Ã=aÑä¼ÄúN[·8ä¤îú4~šTë{ÓÓºÓô½«¸Ù IÕÊ/Å2ýô¤bKBtãE˜Ï„Ô›†„RVÇÕ-B_Ø…IJÂpz TfŸ®èñÿY]!<‡¸—&]CïâqµBÊ#8ZÃç=’0°õøµX6q–¹üß÷ÿ›FŸ¡‡ž¦M0È/&Žï—€a»±øo¢´’o§Å’–̕Ӯþ)õèpa¡ƒFçM/ZʲÃý_=ÔMè>‘'Ýo À©T ƒ¾º”e¹,}·FI‡ù%ôSè?b†sú°pE³‡x5’ëè`ìE.Ë;w5ñyüÔR¾10}†q.æ‘2Å5²6òKÄŽ-Z{WBDô#ªO6ïš…é R%HjøùÁɄЃjqò¿‹~îYÍO>]öù €E®]Oîík¢<|7÷Öõ›N? Xý¤(^—p ¯}'Ç?9Γ‘«DÎ2xF½ˆ²µO;û0ßYŸœºõqµr»&ŽoôW7°~ûCÿªÙe"pß0ݧÀ…]ŒGÃ*æ”ÜHqÃÇ/øî¿‹Güì;ªüÁ#ª¥}GºçØíôv>ªVÁ# ^ÁŸ˜S9äPüî²ÀèÎ~ö‘GZÒh`rEžع6†‚ä÷9>Óc3,½µ«„'y[1þ+ ì嗹驷8„ ïе¸Í}„y.£îEf{ëÖï‚»þjÅoãöòßͤVäl~÷°™¬Lv–WÒÒkG"Ù¯n?$2‘EÃeÄ`ò (“ˆàL‹‹æ¾pGž/ÑŸÂÈ!|•©žCe$N…Æ-Áé’1€¼ÛuÅÁkñ‰8•yî£JýA±6‘Nyö³ÂJ÷З¿ÓGH–¤Ôêˆþ!õ¥æ ÅU"æÑ¥Nó'5e꿌@"sÒÚ„ú€ÄàɃ h,Ü–p›à]Qšötxä4,—CK9ݽAÑûQ”a̧cÝ"HÒè¢qzÁ` Û "· ž6*Ÿ¬Ì† x vâm\"´Uy1}‹ˆÓúíäÖà)€Uñ“‡HN& e!ÊŠ[tˆàÒl‚—íÙ𓻌e‚‘qxø›OA<ǪŒŒˆÒGòÆHÏ€I6ýÙ ø’ßb8*6‰¹“ŠhV@AXµ!ðDµðÖªõ±ŽW‘>u UKŒäñ¾›S—űïöjž ŠB¤B²–¹|9 gSŸ’~(É¿—à˜>‘$"ÊaVe±t…ÆJ†—HõÇ,ŠgÁ~9µjúoŠ—”ø…°Ÿp“‡šs¥Sg?èEktL—v“(á# =õS?Ž[ÿÓ¢ºp!ƒŸÞN/ÁŸ"já[€N˜FÝÚõöëR6œbi&wðáæá®áãŒüB(VÓÕ?Cv âìn,Óén~@­LȱA«ž¸ó&Æ`¤Å‡HÉ<ë?ûÉ' ™zæ~Äb¶>6%oMýy«šƒø‹!T­Ø‘ͨ;8• \uæ÷Ð\ã‡9Y‹ 8P©Ó€çæ>ä§6ü»™mx ßxnpœQó1ÜFÿ°»Rä]œ.Ú Ÿ©ÿ†¥,hIj62‘ã¢f” Ó\12!›ú h_¡ínÎ.¼‚<]S­¦"zQ°×®¥Ñ2LêìÏ¡¿<6¸o%âÔuý•À-ŸDXÍÉLî[†Zs¶ž·Ìu_.pkûUÒ;›aôC¸µwñóí-ú³§)ðð2„|Õ8<Ã:_Wƒw@Pñl™…ÃÁÉ=!Ÿrò’sa¸oeVÏÔƒ¡TÆ­T^‡°%'û.Àb€Ÿþw~ª%ž jwÌ/aœ1(‚ T²bOÓlïÞJ»Ëô$¢}yfCB@ _šÍÊ|éY‰›Î~º =SÅe†ÂáAe´*È d_1D¹;Ëð|ÜÎWo×Ñ댶m~üÞ»ÉD·Q¨YR¥D ¯Ìš´×5‡V€:ð“¦ÉGû±¢)du°õ {•pP]zë%ôŒ—÷Þ§H|Іðäk<©žå·x¡óªbíÛ„Ó¢å,ÂFŠÙ''ñH²®…øi‹ì*úÞ}æA©8]äÍzZâÓWÅ'žt„p?ó}ª†Ø{a 3@‘Of^Êp¸g„‰FÈñì»çèRŒþ-<.;§i>ÑýØÒ zªÛaw'`5j,b Ž XI¾\NVòA:Xtø¿Jv"$›»çÜoœa'‚ìú3éQ #~9u°¼”$R±ºˆ"˜ ž£[qOçIJXêfÞàê·`uâdn·£Õ"}ü÷¿4A ‚®c_PËû« ÎpÖwÏ#VÙ¸º¥P¥k{ŽÔŒ<'4NƵ-qùÂcÔV<õ-‡A.xÐ.(K#éHaŒ…T-d ˜^‰R‡²1»ËJˆmEŒ,îþíG+ ˜¦W=r[ruqÌqÑ è©¦ “’qÿmˆìP¨.ዯ½8K\žAÓñ8þØ*(%îÇ»>Þë›— ß9fðQÕÅ’¹ÀgH‡Ïþ³Àq ݪn£î˜b¼|fôx:-¦ëÄcäQ?÷¥ÛL|¤Íd/ÕZ §ŽuÌi>®xË~Áf²r…5{ýaê?_DbÔ¿XÕ%“$Nr!Ÿ8Ð0+\ðdq5¥8­(NCÿ&þJQ¯­J½¥CÏ>eŠð Yu^¼Ð×ašîüÜ›øôKÛµù$ÿø| °äÐO•‰sªƒ³7H`µúp@ÉÙF‡ÝÝÛpÃ|u¡grË®ÂS`ñŸž|7M)gÁBb(ÀbøMVá/c½ˆoÇrØM^þoSaêsnî±Ïþ3‰½Â„²Æ±G?½Ý»¼—Ÿ2R º˜€€%×1̲ž#Íj«ñ>¨þ§ºûcîkGJ<<>êz0fÏt¨P”«¾$õCÝõöëÕjÕ¦$ ›;ó^S`QP‘ŸAÕdÕ'\úxH%ó¤3Mnh}É9œ¼6!ÅJºû »Ì(Àó Ž£Ûµµ„sÐ&<¼X;¨0À+n¡ÿᮓr=1ž7,Wz[N¯À>‹Þ>DË× =ÿÛ‹ j ‹ùð"l)PñÔ‹ ÑŠp¾éQ#œÎ{cÐ(ÁT›…ížt,«›ˆC£ë”xöÆé.Üv¶1(°Ö®^tÀ-¸ñ2ÿ…r£þ§<½·è)H$P)Æãnxô3™ux¬†˜xv»Ë®Ú)Ðuô8íò”ƒ ÑŒæF?¿án„œÄŸÅ?é©Ô? ÕžNæ¡&#BæœÈUso›·PæO}ÿ—;ãÜo²S¶>ɃÃY-‰L$jñÌX¨Ì±ª¬Òðó)õÓ=|Ü V¡_xÍêZ×ÞÜUi=ÅÕ?ì…ÄxLý߈Ì{úh>—P±NþVüü¥«X6£ŸÝág;ýAØv|Äðb÷YÅë–ð½Iz@Ì­i®Þˆl/w=,€ÕãKÇãASò„„Ĺ™ÍêÎÌ æâ8ñ@ok¢^>ª§üv ² /Bº]H.tÂSkÑ&RLa>K.›åõ(ýù}¢kþöòË׃zo!¶ÂÔ¾íƒ68æ·b>¶z’Æÿè‰Æ¬Qe†›ºú‹,ÃOþÿͳ¤]à Õ\,Â:›§„xîcˆÀ³€¬sÏq º…ÄY’·±¸×cõ–[T Ê$ûA#û)<­Š‰lë¶ Š#6Æ1ÅïÈŒ¬Ö¼ÎCøñÆ"!#}‡HeHˆwÀC«§õ1,d€A'̧Ù&H[êÕˆdzLéCæ^ì¡…B)úø¾=| ó?ùËU'Çò-úuˆ!€Ѐ~º~ƧK-:ÈÓ‡‰‚èèÀ"Á‹¦þ&#a´žg0߆Ëg¨G¾ú6&çnr3´õÑǨçK —:D¤v@Iúé't*«¦ä¯Mô6š¼ø™Ç´d„ùCµK¸bŠ€~[’ZÎ@œ…}ˆ'È[@A#›õRr“h)ñ÷âl„± º„í*”z`lâïþ S7¥›‹q¦/Ó£a%Ç Ãì(z‹["vð§ ÆÆÃÖÐsŸ¦.è1°KuržmHVÏ¿§ËçµR­Ì®b*.ÂÓ‰±85$B»cèo¤™ÌªâõùÓÓ–’PzN w…íMÿ¾zsÜfÈqFfˆ *ìïÚÊÍz‹ùp-òÜ>‚$I r¹åKô˜ØU@² öÙ.+uŠ£`Î QxõôýËóð7¥•‘¿÷GAŠÁ—æ!¸:ÃÓŸ­çBSsìÐI8$¹…wMþ÷p2:ØWÞ]Çšˆ°²ò&xë²x……1”Â|Þî?ëXª¿•ÃaÖÔ]çd0ûgȧúÿ&!1‡ ºT/Xµ€Ñœ½l¡„a’„D«·}§-I¡Ͻ~µAfÁÓÊæÉY^ØD‹Äu`¬]ØóÁ˜‰›ûí/*$Ï‹é¨÷œÞz©’áÄ¢F¼ßá´]À¸8V±K„O5©³K÷Yhà¸Õ±®<܆ÀLc˜Fõ),EÙXdLÔ¼‘ï"F09>a˜Ð˜0•¤—v!H¥!+‰)H¨6®ãDEEK£{ˆ [Æ·Rn‘ôX«þK¡Vh\Ô¶ °u1@g¯6v8MÚMA‹w;fõS^ Ç'íï݇à*†…™ÊQ!æè•bÄreý ýÁ7XmˆEï%Ÿ©·^=¢©É´lwÅòÅÌà©Ò‚×”9øl~ØPxí ^$Óž;Â;` Ý÷»¿6)¼ê/á6+oÛуnó¥Ñ2;ÑCH¥†XDBÌfè§ëß}PL}|íþ”x¼W q§‹[ÑšÈxŠ­vtO 3¸FX‰ƒÚš!Á¡ÌÑ1i×Ë¢“ªî!ƒb:ÎðòÓ= ÑÞK‰»ƒÞqí¢»Ž‰Ð7T¹ú£["І]¸ü½ü¶VãUˆà‡ìBß¶û·‚Õ±J‚¥óùÀÕÑ¿±–±=·#ÉQðê3À8ŒÃby 1éBØ5 #J¯ÿÔw\mYÂh•4It 5\]yl €×F-€1´.T9|Î:J§Yoô$¨ü34´Ùd~Á¢X½Ÿ?:5—KñпëÖwŸoÃýŸšþ¡^„°Éçþ¨øŸÇ#®:Âß}D c¥ <½ ‡ÐŒÇ57 Ǭä¬oÂTjrŽžÈ ¯C1õ Zz4"¼˜ÓÊÎö˜`süLæHíÀ@æK‚é}{ãŒáR\â]?D…0g”J?™ö$‚²œ›7Ø µèѦ3„,/ØBÒgû«uTCØ·m—‰Ü?²3¹¦aÒã9V•"Kd£o``âÒÜ6¢ãñV äÚÜ^Œ~ª0Þã™8 #õͨÓéZ Xw]<ˆðƒ¸ßR€ñÖ}þâ+s0x¥CXÀôôÌ›€³<w=ÀÙJJˆSãÊB·v·£ßa5T¹Áe½]3Ün*aìÔóÃßþèÕ»{Eš’¥Y¨7¥¡kqriýàUR™?/.éõ“BBWÈpC´k§0R¾ŒÊ‚´ã4“í[%ïiïßSx¹Öƒ­ÓlîMMœX¸Ö|®XnÁ̓ª+ êE{y  f³ˆO´< ç„'qéÛÞÀðÐÐÓqBóû'U¤Æî…®`l*ܾUé>?}|¼…ÌH'®BúÓ…^èÙïÞÈN‡Ný®Ù÷s'«—q 2_"EÙ!é§.÷®OËrF^5(„’‹=+¾uÃ@@?É`¿?îó¡áÏÀ‘»ö±1÷[9úØ!³Qòa”ýÝmbª€ÐCÈ‹$¦øD n_´!_‚œìáxWCz«òÿ­HmòlÒ~„®6õUªÔ±SÈèñ}ú©Å FBSpQ }{ &#“„§¢çåg‚«uÚH û]6Lˆ¥õ¦ÉÞ 8ÁâþÕU-vǪ̂+Ñê+î}L0¬Þ§fõ›»­8€Ÿ¿ åI·õÏ6]ÍY*EÛás~¿ø ^ö‹ÃÎóT2ŒNUBÌ)òjßþÀ’'ßtÐU ý*kBñ†ÇÞéRMÞ°L%ðN$5êh©PFwO¤# EÞzëÕœDB7yjÈ—qšÅ1¾>Ówsq¢úÂ* ÉŠ4·p†˜|_".,(«+HêZInm¸ŸÁÁ.Ý?B‚%} ÏGŒ¶q3—úí»oõÉBéOwó@¢8ôDxD볕ÂSaƒnš:¡&¬&k¦v#¾ûÙO®4>ÂU"± —°¼ù+uEèì±ôZœ…£Q¤ò5eÙ{vññºûñKûÐ_ëÖW¿œ¸RúH'n…á\ÿ}ö&¢ Ìsí¾=e5$¼us:ñ¨AÁ± ˸ãpƪØXUO—æä¥þiD`†ÏB‹‹ú!0T[ooXf¨ÊÅÛa±H"”X…³V/ò¡µ_Þzê•·\=Ô‹h&ˆU9¼a½‘mP[‚á)!©rÞá«+0øèuT¼ü\7ol4ª.Á'!‚XýpÛ(J_nï‚i“¼‹]åæšíìÂ:cJæKÑìQ±•MiÒ~áßOåQ^þ§«»E­‹Ðöeäw >„O1¨L‹ür®¼cgvÍXóKØÍ0VEWÃÁsZ è=þŒT§³ßÚ›Šs¯¦K´â÷~s‹"Àªµ¾ ÂUdñ¬}ñÑ4ô'aÒH![ƒ¡ˆinÿÒºcöþòEÑ¡ËbŒu‹È¤Ów yí»œÓËûeL=Æ¡ŸÞðDÄ;öpQ\íärÿK±M&/y¦³ÞfÊMÂç ,Ò */7ùvšì.ÉFã,„!üOÂG—ú³ Ã²Q=DLEÁ›pÍCØuÖ?çê—OËÖx9R„O‚ ?€„¬é™’ÌåÚ/Ùhò/MzëK´$‰©í·Ýú^B•^tèö[¢M!¨”IC\$—ÆÞwu;fæ°é0;öŒ_çî¹êÈorr¯{ fT‹X™’ýxÐÙ0ÙxÚšb•Vð'+;áixAâý(Ùi)äƒ}ÕOÍ‹Bïš{–yóêËY·!lèBß"úuòA‰eX;<8ó©\Ñ Uç.*Ñ0ÔIùƒ=çá(ÆHC~8Wñ^‡ÊrÙAgFµÕË»H†Y1 cš<ÎÇÉ£—ò .2Da¬5€)ÑòÒ¥;æ¥idj»zòÁD¬ËÊôðÃð%Þ¡(¯-=yúP§ÔÒŒW}Íi!å”XiYô¯ÄSq—ÎCì<únÃþê™É!^ús¼|ObòY7>7ùî¨õÂÏä&‘hJÊ’¥}¨Òó9ÅN1-Bÿ ‘“ݺ>éfäi×&¢°ðV`\Œ^±¾ ~Ê¡A»‚Ÿx{ÎEqÙK|¥ þV1 ܬ™8ôýƒ'ýaô³LVäìJƒY¬BÔ‘kýmöf\ “zE²P y׿³U·²RRÖ9ª[E/¦wCã_ mA†‘’”¾ô6ÄD¡¤§uVÐ5™XÖ‰PGN;Æ éXtqŠýïw1œck³ÈðFÔðßbôÁFH–íä;•%*á}¸6L³øfœ<¢„/½t)‰“O*–ºI7O×댟„ýøeIç"") ö¼JúîÎéêîû”g™â:Óört¸\MpŒ|7më~ ÏTœC ÍPãɨçŸíi2J*F¤M¢={böíHB µËÚEÔÙŽ .õiëOþÙDÅ@,®M¿(jù˜Û`v?5þ¿³âeÁ `à‹a —VoSëU9¢Œ":oéK_ÐÒ.cýÉBÝüÉñ¦à Š½,CÈÅ5–§£¿gY’@‹¾tkú;—c§>bv^_ñÛ÷ aˆ¥Q?{ù'øhVBÔ‹Š°qˆ=˜1ƒÊßö]åAaÂüök¾Ï£tÇß~ Y6Z~kÒ·à."‹òXìPx€Õ™ƒÿ/‚á7[Ú(8F–5ÿQK9 n{û'“fðR$ž¸!šÞ}ÇþÑ—n÷àCO“l‘MOE%ªðÄ`?iÃ4*±ÍP¿ApíßÅPU’ḛ̀ÿ¡¦ŽÞ¶lXˆ=¥P¬açÒ6^èà /Éž!º´ëåcæ‡$X'ÉàF¬kikL d»› $3ÁbkÞ>XÇľv/¸`ôÑCçî»ÏUŒ(w]½§þO´ëÐO¤[mÁ"2ŸP^]É@ߦbôšlXø•d~a.Cÿ¢[D6±à ðå“°ô£§°‚¸Xø[I~¯í…Ïi¶öÖD­Ï¨1qR f½{:1÷§9ûsÆ4 ;Œhó@¦¯ÇC‚}0÷ò;DæÐ!2W‰'l‘é"܃Ö^”õŠá+v(ÁLϧÅkÇÞ+ágõ‰W=3 Bq4‹`ù7/ü„¶iQ´ï±M¡úxûØÄpòáTO~{´V@’ù2§ÅgÀTžûøÑMwïTZˆ™ábž>H1¹ ¡¢c *a#z‹ø¸ú'LØo² [™ït<ÿ+&ƒ#ë̤=ìþ=0-äû–v‚’rüÊpQ×ÉÚ5Ñ)<„ëeJV5ÕG˜Ý}ô%Ð…Ù×®‹P—Èb&¡ÄÛ¿69×нc¾hìP*A´YÈHàÃøù`p‘ }?.mÏ SK\bV?2B¬'&½öYNÍ¥?ÂG¶ðozeDI\ ãØ4œE¬¿< ¦“"­Bª^F‰?[|?ÅGÔ•å 8ƒ¼ ÷ßb`ž"%,õ¡ï{¨H…‚ÂÄ»ºØÓÇ(5‘×$|\š®î‘1ê L¬-’ã-Ù|‹ÿÐ¥ósTîžû AÌ8R¦"Œ€á{k6ŒÒò%ˆlçËe+Ôª,P—Cª(û'{„‹Ë2îÙÔvÈàð5.Þg_:É{˜ß̪bfTDzâS<ž(ûéí± ßI˜‚²ê ­Þþ41@­oW•5×DèÝ1Â=H*’q”¡ÿ&Æ«ât['ð¦§5ý!Kƒðd†`XFî\JîKȼ‹|=÷Q‚ ƒt!RPBE­~úÓè+6ˆEýyõç,@šõó±,† ʈœ°ŠH˜Uݹ ªN1 Ê9l÷Xpq{c¶±l-â]tÜ@DPŽ«ÈK°ÈÚˉÈÔŸ/Ö˜ŒÕöÝ=°DÆõ"ol݇¾ujs±¾¹²©e‚&£Ðúr\¾fÎí|u;žÃ”û6Øz¸ðå"!O°îfJaHÔw×ÒO3týÍ:z¥ìŠ|š±)Ž4&á‹ÎnÊ’„Dd=T °[j¼Í 4æK«3Û›³µ oxFSC˜kò‘’gd £µ—Zï>Á‡â¾Æ Ü`ìHL\ÄÜ› ñ¥Hk1g²òíº„<ç:X÷þ´ ˜kÑ1=™23¦/êí À·ˆpì^j tjÑ— ¦V=÷Ó@f¡>wo˜¸KbM®]Ô«p[¸ÆXöî›û¥XŸL–Âp¥Ðo~›@Ïrß-=A܈¶îÞöŒ ¬JSŽÃ‡á?¨0gç÷ ¬“1ž(£lT—µJ÷~ê‹`¸BÛ9„"ñ·¾6Žþ·ðø`.J‚‚2*NŽµÃ‡Ýp…±hú§.^‹:¡þªà½¡mR²ž-ß,DqÓ3'H¨pœXîEÃH$‚úMàòX[Þ}‡É3 ^£ .ThÊW×/¿Ú[útÀã¢g4#y6˜’@½8û¡UUÂHhõmþ­K›ç/." éòOù(pèî¦/ÛK·¾´ùT‡v òO4“˜S¸ûr“ÆQ7z6Š#Ï©æw=æê°üÖ~ž‹0/g!'a-“ç83ƒû¬"l»e,­†¿Æ›+¤0˺êxÛWß—0ê ç~*Ðpa&ö=¸GþFLBÀiHwz½·Ù~X²Ô±ô”ì:Fd„wKþ ó„ ™ø“.f4¥w79Û¬Õ­ëDš¯ËU8 ŌͱǸÎÓž«ß• `ÖŸÿV¤Ì )7öÇЖ‹~ˆ`¼Yê(X7k!¢R4I,n`<,·Ã¸4é«Á>^ †ÅvÃùE•‡—+Ž £ªà&Á2b1V±+¡„TRŽ‘2Ç­Û±÷-mÃèe‡1B#J_øuWo7&æUÐ…GÜeŽ{7)ð ŸüB)b(xïcÏ­~S1Õǹ\KÁ "„É=¨6ò×áû£¸(}D\Y·Å,;‹šJ¬7(d-¢É)ÿ ôL˜iˆÓ„Q^ËÒà§ŠŽÏˆ$w3ô¼?¢´‡\3 zTÌG ¬1€ «oñ‘ÎŒëTÜSÐϒ̃´k¶öCZ‰ÃG4NÁO‹{<ý¨ÆK07 Žîá¢[FÐG7„Ãÿ$ú¿Ã¿uÕÖ[»€Ãkèô_àêì—‰å"hèÝ ß-š }âÞ$ À4ÌzP6~MŽ©ÍýfU‹ÌÒ sŠœ¸Æ]>õ%¼l!#¦Ž¢&xp¨±•žzx£Rn~”|Z|'ÿl4p‚»ê&ÇÇí£U¸ñ_ž~]6¦­¶)DŽ}Ia˜}wVw: ֤όzø÷ŸÞPõ4  ïn86ÿw`½*ƒy‚Á؇k%F|Kÿn±Å÷Ï!‰…k¢ïÞ§çÛCèõO]úêχ>òÖзpzÀPçáú.JÄ»GŸ0´·ßp]GH´àu2&òcVY¶*YOpYbßRVjK_’õ-.]V™^ýñ–¢Š¨Ãí[Ň„¢¹Ã3j €ö!´¬qï¬fŠIšŠ½Úš¡ÿÓËð#\d I]{qÇTÀ JÎ[OŸ‘Ú²‚ lÈ¿]… ööOø²ç襄$‚—Dù_÷z}|ÒjŸF%0Î8††´?ÕYÄMƽNŸ$mZLª< Éœ]Œå@ ûŽÏaö]rör}:Ðá{3 û•—ŸØ$ü A‚H’Íx dnš(€Qî°˜¨`Bð8Ê]‘_zN¹EÎÞî£Yì†^©»®ÆY`l~Û%ä¡ÅOÀpŽ,ˆ[ÌîÁeàŸÈujŽæU J1ü®ÉÎéÛ0˜ï<ÉÑ;ïTÈG/oè$îq@~”¨”§$ùôU Q˜8“ZµŸöEJ¶ÂíVqc·víz=N܉Èëø(2®S2æ¾ Î>¤ª5š¤|tÛÌïÖ2ôÏ&)œš[ÑÚ¥wEx1~ž èiíÙ¯´o2îk™×´Š€‚§Oi•+¯æ°B9ºU†M_ÂÓ ð`/ÃÜîòEúÖ%´üuó¾|'@Cº…¥GÂLP@9"âE:¥^òO'ãûéV…žî4E†²0vñT Gu‰’ÌÕ&Ê{9žâ©ÈÌ›‘š™Ò]*&𞯾½q¦ŒÏÝ$ßJ€bpâÏn&ðHúøŽbe-ýü9´€dIß ² §§½¯§Ä…,z»Ã-©¾ef,õ½7;º~(cà4³ŸmõòѯJ€.ïçcª}X‚±ˆËQf'ß>Xß.ä_.ôWíÍ߸ú{®Âåº~Ê*؇±Ãd6Ue½¿}èºz‘¿ €‘G†¨tñæugÌPNbLò”¦„GˆJ¹r¹ëÖ9¾yÂOôǬõáæVœ—¶ÝÅ e(áî{]†·ªÜ݄ƻoØ‚T)zfˆÛ}7Þá RêÕx)}å¤(­úéå_ Ãñ8$˜:ÔaZV©åù¨ç¹5,rz`Lñ3±–*fWè0hï°®¢í)›º!oÇ4òÔê‰Îé§µ‹¨‹Ú«¢‹˜…¨MŒé PǸÏ'#C”Ó/N_ºtêK‚ãx|éå¤inÆäLÑþ‚ö„aH¨µ†©ÿ¨CK…±‹l_æý “Bv®êÇæ&j¼ü™Naûõ¸Êè·ˆ±:x.Ys_xY»5ä /÷èŸMÀýÙ‡!Jݪ*>^¯ø*ަRñ;ôG-^¶ôŒÜ"Ÿ>»¿{¦].ó‹³Ð¤p0YÅ·5q×g½]øõ„à"q¬eôòÒ9Ì«®×D™S +&O!Û$GÃ¥_…NA=§°Ø:ÜŽ`ÝÀðm<¾Ù)¢èÖæîOYæoAfx_ #ÔÚôHœ# 8œ»ÃÄ ±QÙ´ÆPúìò¡ßüvßVuÃVMC4fÝG?78˜uw}õ]9|HaGó² a2ßêwÉôîüŽÄÓ·Z X™,OF–ð?³ÕÖÆô:yS`,HÏC¯^Å·náðÝôöT ‡É™¡™[=\޾&&m¦¢·ž)ט„<}©â>Mø\R¯îÇ·;{ʔʠnyø¸W €<™”AÕ¨KÊ:¦ºü‰:Ú4ôšíy[°({yÒƒÌ2:‹Ö[Mæß¥ÀR9TW(¾¼Ô—2µ-½~¥úí>çèœô0‡:]S\]¬çà4¾”ÉkýÆ]pñ˜\c»Œ —¢èݯ‚Ÿ<ú¶ß…šû_õ!5ù0«ú æÈêå’*î]ÝŽE›:ý9˜UÃXC–³jôqC§:›„²/‰¸£7 „O̽ê‰PxÎñÔ*txÏö„{|ê¥C´ø!&uÈZ… —R¶Xh{—ê“ñRqæ9]½dnNe„ßÐÞô !ؘ©áÑ|ùx^ôi –üüzÑÒŽŸÆÊÔ3 9J˜Ùl» É™Âø;Ð&$H†ÿ DôgØÍå7ö´T“h0'Ô¼ÉSpBîÇêC·Izòd$˜@öËÌIé£1ô·^€/!º¯Ê–—³ËÿÉC¢rAÁº[îî‰râBØ pèÄaÑG`»7Ã+:vzDþ/¿üpÔïÞ1ùŠYÃÕ #(œÛËÿ0ß©.4˜¡’ÀsùˆaguݤVbùPÍB`,ß*ÚV£ÌøCûX…ñWniŽ@4Ä?^fHÂÇáê͆GœL(=é8â¹\®9æ~f¿ò%.!´J$(„ð ]ܽ‰cøqùϲ€K[²‹Aµ£ýå'ò #SøþGa¡ _.sÿª.¹¤¢¯r8‹/Ì€£qü Å@NõåOñî£jÕ»±™uH«cƸ¤ F9?uê#8IWÁ ”^›`L:–tWׄ³ð @áJÖŒS ý¹_ËÖ·]•f,‡z\‡PõLCíUx¦¡ûËQsx$¡òéNPVèÃ÷þõЕ?ãFT6zÁ°Têßã{^8ÂíÖáÖ­Ÿ‚STvökyÊ‹àâOýßÏ:)›ÎóêïBZM½zb17)FÈL aO,ó¥ožÞéO>‰ðê±2ô $º5ÄÃsªCòŒ"û€ ÔVþM·›Ÿš©|üÄ7/·b˜¿ôV\»ÎÞM7=ÈØ³:Mõ J$ as㌌ªDÅ_ßÉS×QízSpÁ¨ÀA2ÙÝÐÔ¼ ÝâÑE;µG?ÔÄ›BÝÆ›U°2ýåUɨèÈÃÃ*LH¸ ÔúIŒèáÈNa´{j¶‹Ôêꑨ¾·*ƒ€æõv ¯â»™'>¤‡þû’s¾l}š‡‹3~f• ÄŸÇ9UÝ3¼êÉKy3zÜ…Ê•¥ K¼và–·Å¬õôñƒKLb—wA,ÂP)jÓmºúŸá.zèãÒñÕË ·ºCXHtÎ2Æ´¤µÚ‚V}ù)•…ƒ]Öôà°‘2‡ ·20å¦["\7Nm­'gîP²¹éÙG/<†¶²QÙêwMë„+?Æ “Óš)H¨ÞoE˜%I_Òã§S­P»®ä@\ÐLneÖ†Miw"C®ûûéæ@Å/IŽÉê«¿ÏXð:“û±¡ÔÄeð5´­Es¯ÉX«ÐR„d„íèÖÕèñhJ©¥¸¢ˆ2 óSºõgÞ —¢ç€+šY´Â¸h‚ÉÄó¢r2?VÀâMÅ‚¿&|V*8 ýAP€ÑØö2 È‘~)óß"ÅoÑ¡t#w÷LfÍ×·¢ü¡;H‰Ì•H5a«8ù–Å,Þî<"¡Þ‚Oûç» :5§°v8ÌU FZ‰´à{¾µNŸûUZs³0ø¼tõ"¬£¡†6eUõÝÛ‰”;¬œ˜ {¹ëÙ”‘Xm þŠC]%Z‚SOIÕPÔ ,¥ø+Ï_B¨Äà+Òý¸å£3À,ýPb¸pȩʄ ëXS<ÍÏfX¹<ËYøE2éÇm¯$à(JŸ‚£Û‡Ó«7(¯I(¢aã-È;à#¹."Rƒ¹ ÔÄäåî§‚ÐÔ—@}úí±ËhMÉ"äpb%¥î"˜õR(T¤GeŽÇ³#punä¤ÚýCk‰êu‘ gm2^ã¿ÿw=nãÑ˘°,&.o±M(b‚ü9ô_ÚžË7þ#7ÍGaϲ*y‚ áâùV´`ð¾1nbÚL' nDç-¬98áäqüó¾Z˜»>‡„HR‘í Ù¨¶b(U~«‚0pQ¹"3Bîsý² e²Ô&zå·>dPv ›º#g>ðuñ¦µNÞ®Þn­ÝNæfâŒ[5æ¤"OäÞnǨEcLÊaÀÚ"bD½†Ã8JÀŠ}yã󳱺¯+á§kŽ=bnˆXr3—Ô[Ñâr Ì-É«èØ©ð'™$lRò,8äIþæê˜Ò£Ë¡¿ô¨©áØ6uGZ…m9ŠÁtùõޖ䬽9&a{œnåDXfÛÕ‘|uÁ5\ÞáÄÁ,‡Á3vbÖ÷£çæÞ'Þ¶š4é«ñõKxÍBˆS]WäsÿÞÛß1ÑÌÄ„äÞš„™9b—ÏÿÑÏ÷§`-܆P &Màòxõ-ìEj˜8{Èu¸RÚ„qø®§%"–Û‹õ¥oI¯FØ‹S‰ F%tËô´µ]vsÅ3b­.$únê®ë±, B}¹ô¿ Ia7SLQ&Fà<—úÂ{gÕÕk, Þ>•4æ]ÃäÚx:zuó:úÝÄkšªf¸à·õ@áÈÍÛêPºôí£§ë³LöK'ø6\ž›Û•C°TI\vl‡âGÄXI8U×ăK1ñîÈ‚J 5Ì)’5|sè"—¦6Ç»{Ôµo“úÕG„V\ðêX¸L©ýCxØRº`#§àôæc܃ˆ½3ºyI-ýZ8 eÌÿe0òv±ýîC"¶ ¿Zx»ÜÞòE™»Š`SRJá’".;sôÚw/¹€Ews!Þ½0™#×K$5ã¢Ð®—ÙÅ—?ïîv [P,8Iº=DV÷A8osÊM°f t¾üv'ÏYLvÝúè7%‹æŒªjžZCï^! P“ÈHý·]À´$üÆ+¡~fhÅÔè jK:*& =T÷C¥8 °t×·Hï%ÇAquûkox§—Ùêï/Ÿq€L¼{vaÌ‚»Fµ|?/âðXµ.YÅÊF±×ó®ÙWÌe8pSx+ù žŽý”‡þVÌ­WSGµºX-÷¡wÁ3ašÝãPÜÔNì>PàþÂþ6GQrïÉü—É0´£Ón,»HQÅÌ0†ô¨=uÊ#ã©M³™.àÌüXxtñÜ5‡¹µúÛ¢þ®’ñ#]ôt§OÜW)ÊÑ5ÀbÄ– ƒ²ED³—°‡[Ó“S“©¢hÙGG̤náEA­ÄtŠÍ$æbutü¯ÙÇ߬]ÓÐÿ´ršëè¥pøL­¹Hux$¬ ý!x°-ß#9³Å³"Š™‘ ¦¸µž}°Ø]‚OEÄ2šÅ»—Tº#þÝ)xX3IYú<•ñî¥zñ˜:­Cg}Τ±gºü"YlÁ¼!‰à©?yÛ3£¨×“ä¡ýl©ns¨IЙp"Ç¿¶gx³äíãF$‚bäLjÊw-¥½Ÿ?õÝ;ßaÒ$T‚„±rÄ…À¯ç‡ÒÜÏâèåþ#š:¦7%5\6>”ëÅ-\¤±DŸÆO‡æ¬íñ§mÑ}ƒx¢Õ‡j|g¬²wáb€G¨~¿gŽ¥AŒp(SµE8>€ÇR&9T¯C²£.·åX⤵KMÈè/æU·4ôoFÁÉA}öÒ(”çÇÒ˜„ÁjôÃfLØFqtL½-aTר gþûÕÛ&®/oÿfÌI³0Nÿ»UXœrCG ¼+ #r¤I€$ðÀù$¥X0Ü~Q“Ï[©rïb¤)—É„t¡JÉÍA‚ú-éGS“[ÉøqMƒ~íŒC(›žVQ˜‹q ƒtàÓGCd×›Ÿ‘Œçl"Gáv1`ïð!”Yö%Ü›½¥Êã7ÊO™‘ZD„>ŒïÞ¬ÈËè€ ™àvéFéôí]LÈapxwPXQ­&7ICdãn͇«éRQª &·‚èŸF4D§ â†[°x>±7÷-ËÔÆÌhÀý  Å âÔ­:œ‡HŠ0Œ’Ê`(cS§/®Iú'†«_ë“-wIúÍ>$ðä¥r9&7ÓÇåò[ñ¥·¡_…ªkmÜ9,æU0ëO˜ qm#nKF\ ‘Ñ aJcBžËåD8¬™yÌlü«tâÂ+… Ê1È”¿Ì !ù"àCðÚ–¿A–ãLŸI'ÂÃp÷mù-ˆÄ”ܘCq0@Ö¢íÁ’äêÊÍÚpésr•³‹¼›ÉŸuó§$æã¶Ùg£Ó`—^Æô¶Ã«b{´1ÿ¦”'h¶:ïÅëìeÀõ#E*­CrïDÞl̶;Jÿz¢$90†®zkñVÜ»qxù¨)Ø1I05ùß§øû¬½Rá}²¾A;AnsSÁ2=þÓÂ4ZÇÐ¥Óþ.—.½ ü™ Ž¿¡sèO&м…:4Ž©;–d¤ _É<ôÝ-rÙz˜ù;ÐUèÝbeD¨%”R¸PÒ¦_vˆx Òo"˜eëæÔ7p±K«˜Ä’¸VË{,ªÛ@V™T9Ð*Á¥+Â:RÒ¡Õ‰F›2†qêþå,O¬¬ý¹ŸC59»€è²É¥xsŽÇ)“ûÛÈÎ&D͇Ëþ¤&Oý¿˜}ß®£Þ§¬ŸõÒÓY¸!Í ÜÕ1ÿvaüÝdÝâ‹?ÑKhOÕ«!¡µk׸,eÅ- 䈪Ê—©žº´nê§E«YÏ«ÀR¢¾Uò8ÈÖ4¸…ÔôŠ·%­Ò>¾‚ðôçs–Þ¦gìÁ¹L¿»Ž”bëYæ¼ ÞÂO™ÂÄa›òAò&¯|޽Ÿ~~¦ïý“ÞÍ®;]ús»prþ:«…ô˜®2–NÜ[kßè«ˆŽ¸ÝÕçg`éqõYz)¾{1×ïðg lé«)º±øÎá­ª•.}ŒÇ"ôº{̶/A©$zXä̲OýФoßH†0Ûx² 톔°½Z¸#€qÖ"òY#U)m…?þD1%Áví[>깷вÕMþ’ÜåæÁ gl“Ž–áWøy¨ö¾‹ÈÐÅÿíѳÜ{4uiÑËKR§¢ŽüpsQÈp}¦ªï@Áç>b®‡²ƒÑ‡…ôñQvhÖÁ'ÄKéЗæVz®ˆS=ö!‹o=žk+y ‡ïÿT#zR}]b &0À!Eüh‰Ñ죳hàüÍÅ·ç Ûò¼2\ã(ZLæ¸Ù„ãBÿ»Fo@|!qÏo>Ø3ˆ¾¼ŽŸÆb9‚åß[Ííîky5 „ŒÒk·ÁM!+˜5mÓÑWmcC¥ÙüÅþ¢¼‹e& ø·–FP«(#6‘!ÅסXD!Uˆ+êÕ]øsáaö˜‡4):ùäNºõV†|÷2&ÕŠaTцnøèt} þsðÔê.ÞÜ1Ö+’ÎOó½’„RQ\þæÇQIIÊ;y9L™®—£~Iò\¼ƒ¶ ¶ø!¼ê@z1Y…5ÁýNØg-'|x—G²ô³ ™š“d]3}Ý«Ø@­hþX’³³OV%¶z‰Æ‹¾Ï~rÁzN2ñ3Ælõ³<Ó4¤ËIÆ!hr•2=ÖÉèa,IJ4³ë¤çî%ºÁär:P#«µ‡oî$i3jÄ nè%Tµê .™@€UÞ×Ü 1? ËÝÝ5Qi Q2`;z´Ž¦¬ÜWaßUî3ô×Ú”¼¾·½Y¼?㥈…gC G#þq$M:7qüØ/ùi0ÎðŽæz¦ÃÅQ¦ê„ݱòPÝŽ^ætR‡í— ž"âÓéPØ¡¥yðð…¿D¤5Ä”u“»®úù«`äcâPÛ•àŽEl@q3„4uó‹š% ýLaÄúywQÖß§7Þ.(¤‹ÎÇrÚ“Š—`êUŽÿ, SÀS˜Ô|}= $>W'Ê\hÖÔÇmñWǼå‰ÀÀìt[ÁùW  Hõ3Ñà!-ÚúŸ2ÃàwN>ÆH[ j¤ìBR l}m[33JëјLHYº‰:–ÞüÍÊ-^ ɰItp0 ±t>Nbš…"7{ŠZÚ‹Vj…CŒ½A]hµŠŒS‹èl€ëšDì0‘Ï2ÒDöR(Há#¡®,]-ÖM»)H>éwÆ6}5»OÈCУÎ>êc–r>ppŠöµ¯·4°ò]YCÄtæÅ3qò uq“…KW‘è?g¡K¸…Õ+ž…ß‚€T˜ˆw†œ—ÎÞ_¨]ß½®j:¶vý”¥ oOºË°~ÑWûœÖ± Ö_{Vd,GßÑ+|ºJ¨G¾) QDõá/Ÿˆ}Œ~L—vÓ’`»í†úЧ ƒ,üÖéÙá‡AE¥‡Ÿ¼L˜   _çÖ‰ ‰ûñãßGsòŸ{†€Træ2¬y+³àOßuç/[‹äƒ§»|üpýg D«³ô] gö=ô,çÚ5ü ¦0žíRàч̩øî! ›DŒìâÿvêvL*ÙJŒ­cýÉ­yíߘÈÐYè- ú>…—fr. ]1ÔV3 9NB–«ª)iݦ°‡›ˆ€j~ /½¡ÿ)x^äÖW‰¹÷G¤ˆ cYV‘0Ï&o–°f3‹"É9Ð!ždsF"a”¡ô9·ÑC}$×3Œð·%"Ô4èïñ؈µ ÖGY h¡ µ™€2)‘3{j©òÓùì6dô= Ÿ`×1¶©ª¦ Eð€FMã´iñazO:¬¼($q›—'8ôĸ»·PÕE°Õ0Ñ~°ýâd‡y55̦[»'&7‰ç*ñkˆS‰£ÿÖÛ£RzW6_õðG··ÙÅó‰58»Y/Ÿ„€üÃÀÙ¢/<“O‘Ö³Ûç‚ËÛps–ÜÙïàpíK²jŒ©[¨«¸è0eÃd Xô'_RóË£*ÁRd_‚]€Xºs`ÚáÄq93¦öZú§.“9Å5å *œSÒ‘H©z°RÉ2ØT!ØlŽ>‚.ËB«,ÆB:¨/¥'· J5:Íw[0ø&Q¡¼žv‚/²6„^އàïeuÏN~†£—mxbf”gîµHµi…ï¡5.æî­ÏPsî1Y:ö¨3/¦¹acÑŽ™wDÞXØíþ¹Ñ*ÀÀÖR0F¬‘ѪGÌY6b5)`èŠÑMU{Ua¬‚)Xdª/^c\aþ×§B}4BEåË¡’gÏEXß>âa€IÆv†úƒqÕÃ'#¤ΙIP ’†ø ÐS§ÐÚ¥Z¢+)_q冑0hÞšA7 nXui»N½tè§f JÓ"—ð·nëé õýxþ:Œ–Ö¯þé[¿ ’Éä{*¦ÞS/Ú£¦ÂRoŸÖ·LB:ÅÔ„vgqÛ¬÷pÐD¾q.Ž Þ<“Þ]çˆBìÊa\¤Ÿ[pðäà#‡_OònòÇK$±2dÞ6Ç3Ö°á1HIfRß¹ô± æòçI^U¶•õÜ7á8y÷S•8¥l}‚Z±áøx*‰AÈŸ¡ÅTƒPVê!@BFfuŸ 3 Õe˜xA¹Ùºm¿ré§LÞ²ÀoŸ¾ž¤—VÎÞD!`cÀ T¿ýéÏþýÔÇü‡ …ÃðïKๆþÑÈ)óÜr+2&" B7áä† }ö®È9k¼º®¾¿ˆ" ,<]Üzb¤{¿ yÀBô4'$ÛÿÔî_¿÷ÛT¤]Hq @"©1 81¶t¡àô—bë â¼³Ö®MjAÿÔe'jÃfÕïýDŸ^‡¸/BÝáÆEŠ$aTÅÝÇ$‰2™¤Ñj°{¦—¬BµàÝÕ¸À&õsá÷múùvÌ+†C2o ?# «ÞbîÑÏùè[xîÃ-ö^UžCñz»Ü…É*¹Zq±d¾D÷ÞȤŸ~VY÷$6…|DPç¡E¿ 9—"LH.®£»ŸðÑ×á"ÆÉàüнWëŠ;<»œ{•á„4ìd¯ò&p{¼4kk¼ é\¸·4M¼Ÿ·æ¡·íÀ¬/›f<ŠCLŒ™ÅB‚JR’âïî»+Î]5¥_xË— ¾°xÑîHU)O©5 ï7@Ñ€Bð$¶/1nc®}öß*EÄŸ@ƒU¦W)»y«|ÙŠƒ²8òaæ¸ ï¢T¯gëí? Eß©¼l&+.j™pÄľŽeˆ´{‡kOóŸz4ïÃÇn·`¼×¡UŽ:Ü vCè ]‡bþÌÄ:T?šð<ï¾±¨gýôz:\A`¬’ïþ$¹pNn0•çQ¡~ õ¦>nñfûýfÅQŠ'…ji£Õ˜á@݉ÞŒ¿ÞhãïC°Y‰r§¹8åm ‡“.;0ð£¹ÍèaC-0iÒ3{ÊJÖ”+ƒ\M‚L”OCÿK¸ÏœBpˆpã#~k„_Åï[«?ÄÅy µ—…Ó—y.…i°Ñ*ö>n(m/°»ùóelš ½à„G0"©7³§v-/B§à „–±{¹CÞØý;&íÍDf'”‰µçð÷{ûgÖ-ùîÍS§;C­êÉßîù·Ø¢f›b4)SŒi¸W’&Dý6üôÈ®¯ÜEBlQˆó*Þ"|É Öb˜„&ÿ6•L2t‰•­@mÇwÁ(³†³˜ŸÕ ùRä]Óã©Ì"Iqíº3|TÌ-‹#ñö¹b:zëÝž-ºô£+’ËS—ª6AÓŠBB"]£ÜCqð¬]=x¦½*/Æ›Cð<†‹{j°ºÒx÷ ­ðMϬ èÞx)Í=—š½+žÊ2*Û…ïP¨zäûÿS°‡Ç-o.üIEND®B`‚Carla-2.4.2/resources/bitmaps/background_noise2.png000066400000000000000000001702741420416754300223370ustar00rootroot00000000000000‰PNG  IHDR„·…¼çÀPLTEÿÿÿ9@IUUÿ@¿3™*€fF3ŽtL€ÿUUÿÿ Ÿf³ `’ÿqÆIIN‰Dw3ˆjU™PI€Ÿÿb±tÿj¿@ªÿÿCy:€@Œ*q*Õ=†=mNI$]¢U*3Y&f@s(k² ùB@tRNS          ÁŽž/ pHYs  šœ€IDATxÚíýk·-G¶ïRU©ª$°Í9Ü Øƒ¹ƒ÷pçÿÿ+öP׳Ÿ>"sn•ÛûñÄlMÒÒZ93##¢gŽK}|ùÝï~øúùý×Ï—/øÃï~÷åËï~Ç¿ç¿øÃüüå‹ÿæ/ùëþ0ßô·~~ž¿ÎÙsä?pŒŸýÍþ-?ÿñëgÎòÃÏëÌè¿|ùᇹNî¡¿ÿ»ßÍ5çˆýM˜Í];â>÷Ü»ÇkóügF–|»·ÌüÜß—îkŽà[ç æ®]¯_ægþÆ]ö9fv2k¹[~ëýÌÌÏgîaFËßÜ¿û×Ì5Î}’«° ò7ç¤ç~ï F•œ3x{-ÏïpæpÎò\Kþêj÷½ýòŸ hüøãŸ¾~þüõ3Ó˜ œíÆ'¿Ÿ[ûÃþøÇüË_~üúùá‡ù÷Ÿÿ<ÿüîwùõóÇ?Î1óßùé/ù󯎞c8_¦zÎ7Ÿ~øã·Ï|3×™£çûúåóÇ?þôÓ¿|3çÑ€>Wg,<Êç·Ÿ ‘Kþùχùãœ:¯Á\L˜ÌD0Ø™6>™ül‘¹h¦h&˜ÅÌ]õÕ,O> Í‹†Ï|sôÕý™;æ›lê/_€üŸþ$`3ßY u¶r\ŽÄ‡ËÜC6Þü…‡„И‘0ó3’lšù÷ `²®3ƒùk¶Uæ/Žæ!3/«·ï~tá)Œ)û$#ÉÌæ{¹Ÿùyf'™ ~@κúÝÐðáâžÉªeWõÑ&yœ÷º~]‡ ï@#Ë“éž àœ “_^1_€Q6û 4—w‚²Qr©LÈ5ßä¥ýÜœórφÈß¡‘×*Pf;fÎ_ß ‘d“= ª˜9W½€S턆f‘S;ãör—@ƒÿ{ƒÆÜûlÀl}æ^c6ÿÑ3wÆØ€×ç:³Ø„1‘„FVdhq1¥suL¿9zFh°Å~úi6û†Fþ}B##1 ÙaìE@,kïc‰‡%€ÀžõqVc¨º{74XK®²×2GhP}ûý…Æ…Æ…Æ+4âèeËæ˜¯òBœW¢/ÇmP±õæ•Ä-ãXÏR1%RÜÓ™ü6œ* &9†Â,Õ,Ó,4?çÙ?þ8îyCc¾=&@~‡vn}έ“ëÕ‚l<^î†-™×~Ž4HjPmhøó|3ÿ°€3›nÓÌýÓ\úãqƒsÅí¶f$¬ÉüŸƒva¹ÇYÍ¥<ÖbP ¨«ÐH'4fvrõYí¬þìœnÓ/_%|#fLîˆÇ¡w3ØÐh7Üy9$ÈŸ9Ë#%WÉÊ?s1”ô¯|Ý›¯Ð˜i!ídŒ¯v*'¿õ#"ΘÁD/D²®ÝÙl ÎÕ¹ —;Öß áͤˆ¹M®£ë–°&®·€xš.:¿™jÒŒY´$¨H-üœŸ0u2Ö†F6[Vs "EfØ#I*Íá³g«Ï·17çpÍ}ÌÍñ³] žÍŽ1°ÍútPÃÊ|sÆAßíælæˆ9)w¦ÓΣ(kšD[;æ)w~x´¸"=›ß~¡q¡q¡q@cŸ×›IζÂñ -Á×ÂA;W¸‹,&îÃjhΛf’Càµ+ç{.}S(þðiLí¦~àÆßÄœã|ígNr—¼ÊcFI›šù‰e`²Å¹vþ 42×97.Iœ0Î6`Snh4Õ‚o2Î-5™gqP1šgî9Çüê×É£cInž”îŒý“=“‰qE?ó ÃGN—0srÇù[¯±±ì™@s ½gšìÄ3ƒÎÄ^ïÐÀü!¸ÅËœà×ÐpÝHE1p§6nÛåË– ¦æn!׌‡[Ÿ„Õ¼4›üoΙ1Ë2Ipóõ>Gé”â eãa&˜Ž¡•dNøšCÜLÜHBÀ3‰ã*›’Ü.y戭Á?À›*é­\+—ü3¡ŒÜi†FáÜc™ûioæ˜ ”ï&x;–nxÜV…92›˜9žsç~¥~èÂrvÂÒó½nã’cÏÀ»lPõ§Ÿ nç/9ZBHÒ–³ûâ¨Cybæ!†ÁÉlκz7fZ©× ÐD€a0_†6↲)yÅåVHÈp4› ¢Û :Ó ¨X´LáI0l—”Ÿ·ÉÇ”ãÆæß&Àúˆ„|qù=TÇœsR\[ –&j°Å¶›ÙßdûžÐ`¡{šÐ3ò@Ál%xˆÌ]¦™Ù™{`—‘`P!EfS劮NÛu21W6™©ÁgJ-›2!àlê9WŒ«Ìo’ÀPUFÖ…3ÌJuâNS•`ÄÌ%î6Ð !™Å5öŠ@Ccí50s¡q¡q¡ñ ¼¤!øi˜8¬@€‚ƒt¦Ë:‘$)} *(Rxe纒ÈCxLjêÉÏ«;ÓÉõ}•Îäû×ÅŸÿÇ$ÜÐ`C6 ÓXôH)‰Í¦›„¦’-¶ *àŸü;t¬&IpLKÇõhìM¸·,íµ9ó™:#¹6Çj›B%¤¬«høXš9IøOÒ Îœà6sîŸ~ 4²ÚYK¡ž«64~_ŸF¤ˆÇ!Ø€‘°bM]”/yxJÈžYËÆúé'‚žmŒ°R–P±ús„Eü££2% Iˆs÷]ê äLjJ >ãæ¾æ|Ù˜enxfŠä„ˆ²zqÃ5—šfÞ{°“Ôî™å†_h\h\h¼B£SP-ÿOjˆ—æ.»ï¢v§g²wª)ÄSŠAz:2ýW(+y¥oaR€-i°…˜–çßMôXêó¤Ï#|Ù’BÚ" ˜ -~Ô"Ô…=ªNOv:QY€¾KWOI†– Ø" 0÷9ÂGØž»ì»K9²%'°Fýó&<‘Ñ'­›-ú.`~œã}˜ûJ?ì™ä +õîò¨§ôÇÞ3û~j/ÐÀy™—FLÓÆfxT’)”Œ3¦+ØIzL1J5Lò’kð[^ïór$l7¿™ÄOÜð1<‡tq næ:¨Háæ5~&sŒƒ cÚñÓ|‚K»…š1ý0€6±e¶sGØ8ëòá ö¹1 æ¯^ë9?˜Š)|Ê\uè8°h2}LæÞí”&¬ì€è6áHâ†[±ûÜÛ€…ˆá¸gíc’ÆX#ž•"U‰ø£Ý2 ṉ$¦¬T‚%Ù±eÖ…™J±\®þu‡]h\h\h¼B#[ª M,R…¦M ŽÄQ0’ø¦ñ8r%3ÉqQ',¨,žj)õŒóf²g¶ÁOß>I6ʼnk‚qî!A>K^œÂH<äìø¼<çNÑPGdÏ0DزoИ³Q¤¥tÐY2…sº •6™‡l@YÖçü8ªlê@ãœÒ[Î Ä KrðŠ„géùnªAb­¡ô޲̦ ‚Ü$`òFö¡x–¢Cøóa⨳c[ºƒ‡"¢É…Æ…Æ…Æ;4 ËP,{oÂ…Ÿ›ÞU> –ÔSHoL!èkW¤pئôÚ`ÈM0ì ð0e€F^É”îoh¤h#!©´ÜåÏ?g|³ 1QŽnSã4;˜ð¦Ã@ñxTÒJºê­ 3K•AÕˆ®}2¨$Œ¹÷ z— 0À`9/ЈØ[¬%FCš9ŒIƒÊ”(A~\å J`ÊÊ “vã|SV°%öIæžð®Ô"¡Áœ¼…Ö: J ì whhPá74$þÎg¬1cp(ór&å—dXèÒô¸Q6»Ð`a¡#û3Ƥâz©2•¡%pŽ˜F4 ¶s'½~ÈƒÞ æÈÞ@.÷ñ—§®Sú4¨zËê’³­]ç’ëùé³h6*Œ™ƒ¹ÒùUô脆„‹'4rïn¸Bª¬¥rý¸hIW ¬f=¸·‹4ð}Ðlhœ•% 6¾çÃ%ÐÈßf;åH.4.4.4>A×™®²/[^Ó(<‚©Á ¤™  g^”†l%–@rTºÐ 7¢5‘IÐ’@ÜÞ4”Ð0Éqß Á²â†VèŸ=‹®7òt9·&é.XµàØ»Pž8†IÆÛÐ`ã‡ðé\µ°±!j’o)ÛágzùmK–ò=‰Ž@Ã{ÇÐiB¥Aˆ¦_J”o ¦×À¹å 9·” ÑÂÝ-òÔG·ÅVJEú˜¶ðŸ;ïë/4.4.4^¡±“éÏf gC ¶*ù܈E±‚3ÿ¤6ôï›\ñé:'  ¿¥HÁI-ÙçkRÁ÷I9ÿ¼ß³Ë&EœD F²gvÏÛIÌÙwÝgÙsòl­ò<ÿ9ëÏoNÑwü>Â÷ùéu}®MÿÿIO9‰ïÔ÷ÌÛ(ÞÆêÑÏf6k‹]h\h\hüúÁÌi9ƒq(yõ´ó„ç«4nh¿¡O‚3Ì×>á<>šÙbR@YN°#Ž#H=F” W´Ø3tp¥,úG¡_«üž -Yê÷4$B9×9Wβ1i0! Wû¢· CšÖðiãÓÔT B„8žchøB’nž»çÛfÌ‘}g&˜@DAß˶ÑÃ|o“¦B`BõÜÏsDæC4r\rÆ¥i7÷Ùì.iåÎLîå:‘êÔœÓpê¶6PåM^_h\h\h|€F—¹´Ke¸Ópc;C9ÒPodˆKÈÖ\‡w• ˆÃ„ø ÀŠ@ ‰»Þì¤uR1 À) H¶8mõš¤Tñ²ÐÍpÚwŠŒm‚C™P¦¡aƒ-ŸÓíx„å› Ç*Š™Âï>Ǟ̀:½eRÐ’ (5„«ù´ëoÙÐ.ÅÐ<¢òòá6Û*)VhŒJcèòBìH rc6«H/eRÎ |7ÉFÃŽ|ˆ)úA¹u¨÷ˆâIÉ=p\h\h\h|†i¾††79NQ^(ç|šB¡œÑ¡6HVÈF¼>[³[¡(u¦4ôÙZE %áNe$òñ[ ù=¯Z‚ØÙV1œ¤<œìäŸ@z6Èï™õAcˆz—ôó“¥@#Û¹[/pÌOL±¹bÜFèn¥³B×2wˆˆRÆèvæ+Û*#è@n¯eÓaþüç°y~2…UvSÿ)ƒ¶QC—)ðÐÉ}"Ö–ÙÔp³uQÚ÷`æ]h\h\h|¶(É–e¹SÖ”aC CÄ$·ö„F. 4 ÁYŠ")½IÀ¼`#o†cĦÉH‘sãµs×mÂ$NØ€-â’Os©ÅÝþRÞÇöÌO»°¹ö'h`òá¬J•hh8›º¶¹>ôø-î–ùc®âBZ”ãc!©37j'÷€=Í!žÐànEH؃q·,’%jT ìÄSi ÓœŒI1ÏMÖT‘²Hà¡é®Û ÇÉvÕv13Æ>„ÙK-u¡q¡q¡ñ ûUÚЈ1ÒáFƒ§:I;x‹ó;nx‚¸™B©~›|lØeƒÃÁ˜â "½Å”tA­Îo^·U›Â.…¢Ës6°%n:¡¡Ë—òMH v+.YÊ6@¼HhÄp›oDÜÍoº ݾ@#?ûp™£[z¦Ýð“ö’ ªóíCÌÀ%jo74r4¢o6-κºÁ‚‚ù¥Ã`¦=Þ\cR1¨Þqô¼ ]kPåAƒŒkÈEITrÃ/4.4.4^ ¡èLèfyqçu÷&ÏâVz£<©ûÿ›pñ­÷Mb8@õ€ÐñFh°ÝÉ–æéc¶„PEhuŽŠyÐüêDç='’0¾hv’FÞÈ =’8”¸RAZ\ÇPo`õNÙ«Æ (·ã\ùMšÖ¤[~>ï…ãsç•›¾ó‰($±ÅuòM¥‹z]Ý'Ìî¶4ÜÆ1;à)ÄSkv¡q¡q¡ñvÿv‘>©1‹“¾|+|BN“W¯Æ.}lÁM…idÏkƒ*Nx®è«‘|^¼¶¶­©¦ü¬Yƒ*ç¶"b•§á¦¡µ‹ª4¹|Mçîm¦€K·hƒJÉ. UTŠÿŒ–¬1$w‚Gl"‰4O *d—qÃs¥n~s’]4!OB ¬¹3›#<±Ýýaq¦c´j²Th)‰>ªØþ'¥GŒ Óz<;ŒÕÌ9æŽc~qÿ&Ò*!G%9Ú—í)¨ýue/4.4.4^¡Ñ®w‡;°¨E0VhÖäÃÔ¶ïÙ†çÎ0ÐÀ¡#Ô{¶Žlhèªö=œeòÙì‚jÃXg^f "D;êΉ HF]Nüã·OË($ýö˜à¤ÐhiTÔMÝA²'÷+4v±“¢-—í#‡DíœûlsYF¨oĈ(fNàSæ\%Ç#ÐDòÜeÛq >.4ÄýÐéÂ]vÆ)Ã×á|vJV8 iY¶Ûû@[ª  Ó*\Ó¨˜)œ¯Î¶ŸðÛàiPõöUÞ¾©É™—JãÅÔ#©½|ºåÊ–‡G’Ê *N€j›ŠI"ŸdöU ô·Ä†›ÅøC¬oZÛ†Óßnf zlhduؽ}¡Ð!·mBpDS•@o lðb6¦,V õ¸1ÍH}†·yȵ îD6Rå†CÓÝ}È&𤄔“|€zªÑø|p=÷æWGüBãBãBã48nð–¡ ,¶úˆ{Õ.$² ¼2CìSŒÀ0Ð@Z%î“æ\C‚©–™ J!w°éIMmhÄx˜¿ ŽÐ…U^è÷¿ohì—:iN„‘ySðnKEâA£p‹G·8-W$#˜’,4Íâü"¶ß6àmÀ6„†RØ <Ð,êbΛë î¬Rpë“ðóñ}h $`B `gÐÇGµ4Ad„l¼Œ © K]WÈ3<¸l‰Çlöš|ùr¡q¡q¡ñv’lì…¦Ìe89¦0„¿|ùB³wÓGILiråÒ¤ƒx!zËs»³-mVéÊÙsFSdów A A¸s®Ci*Òš$À4®#e;¤©:ÌÎvËLå>B9H)€Ù.gÜbÅ‘“"3FøVú\¡lŒÛÆCʳhôh2MÓ³I1n2ªÝÔÙd*ðæB>ï„­NiVJÊÅI­3BÜcW™fb–óÇl`Y¿€5ᕌ*áØ\ߤa>>Bc4a„öM‘„f„8i$Em˜‘Yqß]h\h\h¼C£éÃyå³µ!Öõ2 Òõœ&non¢‚Ä…¸7,}Cƒ–X1¿fj ¨v[÷lG&ÙšÙ˜'ƒô…8Þ™Dx9KMƒÈ92Âlü>£vv2ƒ]¶µ$wŠ’´!jBßÌ 4G’1l‰g9Á„ŽèXYz†Ò™£YUB'–«eæÍsnH-3?÷Y <61]š¦À0Ür;2óC –t úHrÍ’¹ç.1ºv— Ni†&4ÜïÐàÖ’a©º=±‡]¤J¬i¤,cdžÁ$}u€œ©ÎöŒ‹/µ\GWy®ß„M—&6!EZ„M³š”î´ñÆ„#DÝ”ü´Nc‹3k»ùo ù»9/å9çÎβS‰/Ì7WIchF¸%4>m/½“a&wqλAŠÓD²¼5AP$#ÚŒÑõO9©\~O`˜ðãÖ=Ÿ>©8 h©\¶¡ì˜+(¤'"ë4lAæäT¤R3×iAæÃ¢i2ÏÌOTη€^Cï$ÉÇ´Rš'ôÅÀ®E¦˜A ¿SºK÷þ42ø&õù*ßBÀÃbP…×ö˜¸-£–ƒ|–历AKóÄ™:§Sªº‚›¾0ZEÜÚ jiɾÝp ²˜EŠ»µÑcRp¾#MîÙŽÇ6õ[ìù qJclè†[~–ÙxsÃÛ ÆpiµìW‚§ƒ1B£]ÿ¦ø·¦¼†¢>9&Ç+HJË *R®k_=»@s‰õiñè?ÿYð(¸ÛÐø€ºÐ¸Ð¸Ðx‡†%å;•ƒ)²›xp„¤N>™Ü%ÿ !$‰ÇkòÙŽ†¥²)»H–‘߇$wÊ&l:ÂèÆ• tY¿åùš=B‚×8¿Ï¦/BpkSô= Ew6\1•*÷õ[d!ÉYÏí AäˆS6¡î={=>Lâ7+¸÷Iú ½–=hi ’Êž¡Ï„þ”x8“›Ô’!©\ ¤½þŠ‚7Ôú4Ç/4.4.4Þ¡Ñ…ù8):5ó"'57Ü¢!Œ¥lQâÂJa§‰I¿ìC?À=N")G)""Œ‘¤Óö> ª,„”ê°b„Yp v׸ËvæmWÙµg°ëK-àŽOƒjFH0qþ_Éf«¹Šr⸦ ƒ”8ås,ãš¹M§Ýä…s@–Ph wQ ‚RË->Nxv$Qm¬sËö9óËo;9Û2jÔcæ…ØŸ2G˜éÙd:³ßsG»ŒGa`)TƒkV>ÉèìBŽ¸Ð¸Ð¸Ðø _!lHÊá;1–©êP¯%¥éÝb˦Ÿ­;È÷¤©hŽ5vœRÆâc¤EŒvêŒ+*NÚ€éÖôνw’»ÙEUŒr' æ³îƒ;èÜj¡Äó8A̸¹ƒ-a<<’¢ÝâÚ¤°!|Ð÷Щ‡³.~ j³ÛRœ¿ §s'¯Þ¡á«9¯UÈ †;ÝlÊ4ozÆ'h@H›[tãNd³c\½CcJÿ¡»ÙdòàüÜí»ÜB{³w$C*x—ƒº˜'4v*UØaŒ<7–†*zÍ”-™:Aº7ç3/5…"€üÿ´giÚú4SÀÍc“@FC#ä"û¤nQ‹ž{I¦'4bRÑ<5ç;iý'4æˆìŸ<| ä^h\h\h| Ç:iÚ…aò„†²¸¶N¾ ql• ËÔÆµÔ¹äŒÒšù 9îm·/t£˜NŒ!¨º!²€hhd‚tĉ[Ix5áݳаi ó³¡p¥ÆMç¿mˆrĹs ÀƒŠûj*Ý÷ ác©~Kîiòø8ÑÓ÷ÈÍf.»E‘ôË6½çì]\Ë\éLCçIÀB:Ì{Ëm[Î54$7fm–´@ßF‚e$ô†M“¹$[†‚Ë݆–¡½M)äF³Mi…ÂÄ)¹[”ÐZ*ä3ÃÁLR ‘¿ïöè† §iV>í¬¶œ ã ÄÈæ4´hÈ›À­Á[ÎíBJŒQ™ñé6ÚÈ>¿ã?BG7BóÔìРRûÚM‹{éÎîžg5Ù¥âØ¾f.6ü³n<òN³HÒÈÜ¥^i’ÍÞ`¾ôÐ˼y¬R~ çá‡aËþ¶Ha‹ª LW³| g£‘3ý~tªYÔ’gc—˜—´¡ÀË[âÓžMGNÂÄûHÞˆ M±h²B74ùDExÞñó>÷¹¡&ðß¾Öï§V=}?{–÷L71§W°×’ß¼iÞ("û¾B›8çí9ÎóÎq’:öÏg» ÷s½õI: ){åöº¾QMÎ|¡q¡q¡ñ6…xñÑV …FÆÒÙLFѶÅš»M¼/øíÚvÐWqIhÂ1r¶äe~Ûn+/iËD!Op~šûéâUL_ÓMRî†&c¼`*’àJðbË&ð*ï¦Ò¦üš$=÷€1f3™ž•MpÁÅï–4sRV,Í…*Ÿ¦>Y(çÿlq@k “Ì+ôæþͬî221`(oƒŠÒ16|;p­Hõ\=WÌ•‘ee<Âç¶á§;£#qpçÙß¿Èã]h\h\h|žó³Ëf*._´¼Uj2niËà¾GŽßÀž¢,Ü(Mf„”xaÂV‚0Hø’‘ ZÅÄ]]CƒK¶«l+\ ¦>H Š”–n„3 *dÔ¶q•sî&ë$‚iÒp͹yE,Ù¤#`£³Õ6ÅØ)}Ó%¥¯XØÓ¤ëlå,x_S€¤9Vope´¹ß´ïqŽqrs¡aÉT·Vi‘"‰/nÍ4P`£lƒê„†ßã›H0]fØðCæ,Mè&ž<.¤jî”_$sZh)!•nj•f•¡›„2.þî GÛÐð¹žc¤_r—ïÐpè¶ØêؼªfP@ƒ§ „hVR† …|¤It£vL²ú‹)D)g—åZ47<…¤’É0]áÓïöœÂ3 Z €ÒRÑþú¹e;oÐØp̹qÃmÖ›"C°´*ˆ$?sÒ+¢ª¼u$ˆ8:gØ!•¢{÷˜í†ÃP(œ{ïáLu8?-…b|žn8Ò¤1ã-F¡ñœò9!4æÖdw³·¹™öCž—ÝP{“c³¾)¥_h\h\hÐ0÷”VáßqŽùk§ñi5bËšM›0Ô‹4NS4Nb›¸Ìûïßþöö×S*¨ÇŸ0 ¾‰ÝT,wÑâ8MHà7[x'ç7”êöy’8úV"õ›ožÍXΙâê<Òο*œô¤ Ìó-æçî9i{xgl·ç'ˆ³Ûçðÿ[ú$Šðÿ-´i,ç^ÞŸžÁìbWð׿]h\h\h¼B£­–¹”hä}^Ù8Ê”/ñJjÄ §M!ˆfQœú3< ‘Â×j^¥ª u9ZŒ'^¡Š³<Èàœ"AJÒHòðuŒs×éÄ}— ¬r–„«¡øsޏ¢ Ñ!Éy–La:ºHÓîc7›gspŸÌ1æ—îv¯TŒÅÌŠKIZRÆ|âÎÆ8î ‰[žé~ZϰÇL J›èd^1-Ïr,¥À½bŒ¯È9å!|†WfÕOSÚpµ{úBãBãBã-ÀßËCR'ž!ÒF×’“ïT»Ä»™äNXuáŒaC62ÀJ>È–ÍÒ›ÚÄD&ÓûÉ„ªÓqÜ%¿’Cú:ÌNZÓs—»ÝVo+>;iº¡Áüô¸74 úˆÈcšÞ–ãÉÒg½^N4Ûj·MÐ5å×Wç~xpíó°H³Ê§©Ø! Fž¹"D¹66u·•ÈõÙIÝÂptC·NËY´¼E(\¡aȧwïÙÁ=}¡q¡q¡ñ ^ž-ìbp+7§ ËàɳT 7J3`‰³Ål%/4Z8Å-ÛÈ4Ÿ’+¼àvÛßä|-ÆŸ¤ÎžZ Á+˜£‘ûœúùgå9M&ÄÄn!:ÃÊQ˜O.î}'Ú\L+hðµ¨ØÌ&äÌù®$î–+BՔ߆Æ­iÚM6{ä $¸4”¹„Ae:“'Ð ,ßFáp°å€æ. °‘²pýøìý£mÓ<ÒÕÛp¢M¡–åk\h\h\h¼@CÂÖVa ¹MäaÚA–­_CÛDŠ“ÅË‘uy˜f·¶ÐVb¢º€­CæÀ1Û‚A-÷€¹ÔrŸHGJ†Äqœ—:[Ls@ùRÈl™z-*ñÓe;,q²%ŒmÞN“Ç’ã U‚ Ñ­#’®7.l&³¡˜än0iLóåaÉ\¶cmSLÜð ˜T@#» {¬n¶áæõg¯±Û×ÀßÒÐÊhh†JMQ¶ÝÏí†+[þu·]h\h\h¼B£å4 ¢ÙN*I*_TÛ —ŠÅTµVŒ²L2¦ôgØsöNtñb…l—¶ZÝ ó‚‚š\½E š^T±/Íb~IûS,Á¯‡R”l%^¼¸°ù)çÖ™¶}@š‚Ú¦þ+©D„4üŒ„×Z™×mPżɢ']–í#*…DÊÌ퇘r7Ê̱­4ÖØ4Œ$wf–Ÿ³Fl^h-¹÷½ÃtÃ#ÿœcH*¼uŸä1sˆ[Zpî¬ëÃ,úVr—•P•3øí›¯ÐH²=KeA<Ó µ"„-ŒYâ,¯Ä-œH;mŸ!bí¦]©æ{à—3JÂ40Õ)äªCñžÄÈ’˜ §H„B™•ü.zCÔ yB²Ï1)ã§Ð5Ÿœ!hÒr1/Û*‹3HâJŒ@.Y…8iŠsRî ÐÅDzR+vˈoÍ ý0³ÞqÖñ¹lèfaM1ñA#Üù1H33ÈÎdŸd¶z{„j#›ƒbÂliš_h\h\h¼CCBe.=[ r aâºì&`ir|Ò6¹ Ó.ƒÁ5K÷ÉqÒÔí˜~YX\Nå|cÐAP§ô‡ÒYGEKEËe#HúóÏq·€Ã›à ¹0¢$p<)&™Üzh,9Kv”ÎFX&Tgm5rnG•4hm=ß»Œ,áXšzN×üÚM×2ãq•-1êà­.¾ei³7:±+¯\Q"?A @€Ó>4wBá„\md‘9sNú,ÊU’ÁGQR•Pn¾ÎÛ…Æ…Æ…Æ+4lg¾CíB+OÚŽÆ•OÈP¾”aÛØ4½r-sÐ[¶%\2ªÐ»(G!1!¥R¦LaaZQòjŽÑ×rý,V–!ÐxRéòa«ÛúsF¢BKdK@ޤX—{„Ãï¡›„háH濈Z¤¨*›“u˜;$h©Qä|wº5óIÜbž¬¼mÙºØ %-ãzB€j0#„0åÉïÉ^¡±ÓR‘#i•ǯPæÇ°mÏ]|³[ª¹/4.4.4>Aã<¼á€I#4’ kƒê ¥y˜dCºqv Zoƒê„?³°-怃Py†‘¡¾µA•ßfK"ÈÅöìŸOƒ*ÿ6<ØÂ•T] ãRYî0¦‹ßl1€•žaÖ0‚[äc¶æ¹ÅxIÓ42¯Püß ªÀŽPj ±Ïá ˜³‰1 wXÁTnÎü7°þÜÐØéCîk‚ÿ>îCÊ^Ç4?Ó ¿ Å–»A¬vÑ֥t„o§ôÝ4^ÆòÚSA™¶‘˜…Gg{E‰eqÃuÀëÆPÁýôE½ÝpŠþÛ ×숞åR˜Ç]z¤IÕ§E6§žÉ×=ž¹ƒƒŠG‡…=È##¬àFᣌuÖ-¶ÛÐt‘Ïlq‚Ä4€nÚD“,0O{äêO7œâ¾giÔ–¸a•€†$@vDËXó ÙаXÍ]ÐÁ†¸ç)«ØÒæ½:–ò]h\h\h|†¥ãùo›7¦Î:m¦¡Ó…æ$ÂH½d+uÊÏf,¤B?ØEö¸Ê’MvDR]gC“>þÙÖBJ¥‘tJÒ;“…’Z¸ËóÜ¡˜¤c_[âÄN—%P@@€ÍFJP™Ð& ~n ÁK*Œ”¤¢²ØóÓfcË3˜ðÌ#8î™—>bëç8v"Îæ™VB!w¨0ÇÌ¢¥¤D{Iœ{Ðõ“"ÄcóYèo^h\h\h¼AC·":ÎXKxB£ÞíeqúxQÆÊK+Tg[Ùîk‰¶×;è«9ç+›ß¶i7Óîî"(gKåõiÃߌ»eÏtÿºÀSZ:y Á4Õ¹åP%F#HúkëÄ/œeƧ3OÀbX© Ù„“ y·Ì¦Í‚M!Úda®îAÌæ#Ø™ Â?üÁÍÉš´óC)“pRîŽÌ zÝTU*fŸÛ0ކ`¬ï–‡ºbÚÙ!†XŒ)ÚTx ÇôH Öÿʼ½Ð¸Ð¸Ðx…‰–¹$S4¶É—MÈ Åu¢ …Dd1›. —4!‘t €8Îc©7Al Næg¤lö ï–Í6™ÓžqãB Ð{XoŠT¶W¶Å!ríÌ=ä™*?…»„)rþ™“Ì›ÄH1’‹»c/4.4.4>A£Ër¶ðŽM"-²  ;Òd Áà¼â ˜‘ãx’Ò¹¡Ѐ„F³<˜(;iz;8ÙTÆÑàI “i¡?&…èóõ\uPSSh§ùrW6Z˦iV;ßmJ½“Ðâ:()4ÿÆ<<)—Ïû™ÕT~ *¶ä™ÝîFh´0†N{Ï[\g•‘ŒÀB¼€²/CÀ—¹glõ‘ëK©nÿ|,!„\wÌi XVcTµ<ƒáâ ÏÐ8‹þ74¤ªaD¸°¶Ð×邺˜b|Mͯ1)žÐØ-Èœ¬N´ 4bbHhÄ´ãÅo#Ζ5¨ÚÑCȬÝLfåšÀH°ÁË£ {Bò"ÆÝómË0ƒÈÐ3H'ºÙm††)’`ƒ !6ÙEò§VqGëšt"pS.&TŒ±6x`̹i€Qš22îáMÒC™žisÉC h ÷ m^Á§R‰nø—/ïÐàÆØ„ó-ÍÖæ@n“à-Ä2‚h.loCgWHYâ1·- UK,{FJTç8ú´sihð9‹´˜ –ƒöΚ¾Â 6¤ÆÚ¦6(J÷ã·OÓ&lYŸy`»e.»)æÌ¥÷Ö¤>Z¸ä,¹[H†¿ug[Ô§©t àµÉ!½[2Y’¿D@E©¯+Õ$AŒ5Ý‘qs•™ÓDÚMÜ}³ølæÊÇRûÒú¡•¸7l“4ΦëWƒêBãBãBãR4ž´€M³8ÛwìV(û÷ÒÎF5Ïæ omB>µéo=›Ëô·¼Ÿç¸?µ(i²ÉùÛ>ßÛL »ð¼ëÏGŸ­löÈžmVš¨rÎÐÛÝ#9ç³eŒÞ×€#Zøâ9Ösÿʰ$ÙF„ZH'öšØ á Õ“”$ÜÚÔÓÉŸ¿}, Y&÷€áíŠD曢dÍw ±ù÷ÌŽö–­Ã Â´"ËJ¶,w !ؤ§¥šv)|"0r¡q¡q¡ñ8/Ü|'d Ÿá|:ATÚK(ñÍËï .’“"0Ù8c,¬Žc$õ™Úe$È'Óyþ¢„ƒò²ÁËò[˜šÍ&4öö `™;ÃÅÓn:ŠíØ%A»h¨çºÞM]|3ÿ—Y˜‡„N{ËIõÛ´å9{Cn2}G¢^Ž0ð)Ù…3vè$ëÚ¥³[ºßPüNƒ²7ºÄÉæ ! Ü9¡™ÕàÏnínk¥ wh$|i")ClƒŠßw;zi%!vh˜t ÞeØ/á¦k»9x‘7eå„ßCÚ tE^Ò-{oÛûˆ»¹ÜLuÆmR2K™Å씟ÛÑ…µ4Š„ ÛsÂ2tzNc²ÛÀéS$ÍyÝ&!Î9ãghð`p»Ù `KV4­äùÈk¸ÚêAqgáÓn)dƒ´1¿0Ê,’n§A·Üèþì^ÁÓ°#Ý€1Ø]h\h\h¼CãI?Èí›4üµ›ÚÜä-FÙ /r›Ž(/4zû¾Aƒofê ˜  ‘ò¥@CL$»€@Iµ¤À4¨ÞÝð<.,uNÚ´ìB~jhPÞßiÆm’"{Ïõ…†E]â¤cô™O©Ÿ–ÊÏ’P6…&óÓR;ûœÜå;!ÅyhšC·ËÙ”ýMÊH–ðÿ0“˜Í=ª/ÏI#y_µ&\œ29ûL’ö98º%—Îq`›0E} ’D4¼»—Š´Óˆ:§ñWŽæÁAC…|\¸Œ.BÄq(XMØÃÐØ%­¸ºHVX°@#¡ ~ûóϽ!ã'ؙǒúlü/_ÚYfƒ·T’Àl¹þ¤™5 `¡’(•·‹nÓá9ß7sMå64ºLùM-ÎʸØIÝzfÏ,At»©CSópÊÑ–ù6ŃªÉM‘­Ë¼H#ô!w  ª ÐPK`è6Ç é™EKYy7륹È~%µ¨X^ªYž>·I4Ñ I!6U#nxL1Ýðn›ùÓO[QŒ‡Ü™T„( ŠA¥Î"67¸4Æ:‰wºá¦‰!ýÛ6ª(Õ)hÃ2~ßnxÆ¡lSŽ0Œ£í…Æ…Æ…Æ'ht³Î Õ™©¿uÀ×¶mÓ)a„œ†©c€ 9ül^ÉgqÃÙVLвÓ!Y8=IΜ¯ì³UUÆjË@9$BÀUÌ,‰ôe^õ¼àm·“í;¯`ƒ­'M/&"s—JTÎùÚDÊõ)vJSÚ”ÑÚ—s7Á:Å̆npÎAp`iO …4"ŽCÌŠ–„FÀJÙjæÞò ¹Nv‡ÅVÀÎ!†Vf3ã¶«Jjñ Þ†dê¨$vÄPfNO7ò™±f÷`*ÆÀÍ2¥`ý²Ê/ÐHòƒ¥jB‚)øPžB2ìr+”ï’–Ž82â @¶ØW6ç›ßÎ7Iî?Û›AKPÌž#3Ú ä:»½X΂=Ôí§”ä-NÓ °^LÄwæÏ]nb‚,à“È‘’°$%•–ùñM”¦Ç·œŽ[‰plÏOÚ ‡³?>l–of Y©|7fn_3ç†EHùœ>·÷ïÝa\±¾O¢ˆëûÞsÃ0ÖMÉ|eûÐûFºÐ¸Ð¸Ðx…F^Áyí·¨³é–.¢iZ6ŽFJE÷s–™Ä ÞâìÈEx>Ý`¹ ’:éÖ‰À:wkƒçYÒDwƒ¹KŽ1A·V¡ù|@ºÝ9#É¿q~ý9³IÐYg!Jq»ï–gè⛤; °þP‚ÕÊ Š;Wí´¤M&߉yélšvT]œÔáØ¶ruÈE¡Ê?[ÙduÜm†F"ÍÏÔpœ X×·ÐÍ«³ÃNA [Æhâ÷Ù„ h(Ñ¿åõOhHã6„—„§¸. ËòsÒN™¬wÅD$T:q—)tò›~°S•¸wOhàðwÊÏ»D+ôŒ|»=¡[^ß¹{R™Bƒ€@·ÀùwÞ8"p0¬¹—~Cƒsû°R€HhÌû(Q(â qþ?µ –%ãë°G¯NËAJø„YSÂÉÝÖ¡T[Goh¼·ýùüØÐx“{`NNBŠ‰Ò whpñm^44Z¸¥Û­ÏO;@†A…]önséòEùnP–æÜÐØ©JÏM³ÃTMZkƒÊ ™-&4˜ªnk3‡E!œ°èlƒÝ¦gsC!IðOy†<Š~Û Š¬)ð°xC:N$…R&i›ík›¶R 60L =tR¬šºBCƒ*òxBão7s8¡ÑÍç>C#{ð4¨4—˜7ÇÇl@m —;ΊüÒùBãBãBã4|…(}¼[sM* ú74æï&4,khìr£³äê¢nøž|§‡Q)-‰à…ûÉÿ!+ܯÒwhä§6/ÚÐÉý!±LàUrA¾k³4qoCg>RL²õ„ר•«3#“x¥ñw¬° f+P Û|Fhä¿IÎb¼A6Á bëS€Ž[Ÿ4éÜ©¢×-q“„¨æî6¨Ø¾½®ð.WËßO¡k…v¥+Wüzö Wh(†’ÔÇNxu“’]\¾S~h#õFj¨·AŽé2~¿™'±c‘>€SÀÁBü´H_×»u":qÔBfYÞ§€Gô7»gÕ4$âš|¤âZ¦€9/õ§ä@`y²˜Ï£M†Ž†È•y¡0ëLâu††Fæ ¡^ËA[Ú2²~è{èqû{ò°Ò)foÌ?œ¥i%-|šÕÉÏœ;eiœ…欚çhh´c½KÊX&eÏHüÇüêÝæÃÏGÀ–ÅVÂiJˆž¸Ð¸Ð¸Ðx‡Æ6ØÖt‘M£'K9~‹çÛl/ƒE–——YTgÛ‚ÜZ^u–‰Æ°hé…Þ†^»YåÙÖÜM—m¡dŒµ@Є×€ºó¢‰"ç=Ęˆ }Œ»>úûЈéÂìïroÙÏÐx& [–Mh@¨Ä,ãú Ïîðè†ÅÑjTqæÏ•òÞ wâNó« m74LXŸj 1)¦ÐÍv¸Žb *3W_gùBãBãBãí€I¥ÛÐ =²E¸z£tꌛà5š—&É+~îô>[6‹SLšù sJI¥äߎoR]Èþ¸lŒ$øL[Ó›SœÙŽËâ‹—¥l26ÉGCœMS黄~±¨HP\D–m?Rø‰pDÆ*40Êb¢åJ´ù<Ó~JxOWÙíÖ°)fNI4#Ýrîâ¸3Lvf³g€Iæ]s7 Âv²Oh`ü‘df›ü)§¯H°á—3Õªa… ß‚F6 .nC#!S†âòØD2‚ŸB‡©_ꜧØ3`Ô"ÄŠßûlq¬MhäßHlú]|ùh¢˜ž„¸|Z€ˆ¦]Êõãf Ž€Ò=ž%Ö JÛŸÓ Êõsæ ¯M]Ì<¤eÛÀkw#ÌÙ@Juj®´Ù„ìE os¿˜°T@ƒÐÔ§AÅZ I“4;Ï‚quvó2pÃwxW?óPÜ4'Ö[ò Ðøu®.4.4.4^¡aZþ(ðLÌwÉ›Ý$äÙÐdSNΦ oÍNNù)gÓ7j@ŸùíÏóŸroMXº½Ê³YŠ RQ±œÿ,-n¹"–mE€u£iŽŒâÎBmHÚë|ÐP\;ãÓÏŠ³‘{NLð&¼L‹li‘`X‘ˆº"Šã/$Êü¼4„O#8ž{è°´ÿ× ¶fGt‹ì-Øz^3¿õᲯÃNY‰È ïB#E˜b°¬S~NO·j•ÓD"eó„†%𠬼Éq‘(àÅÛÉŒ€þfÚ³‡j ì¶¹²…è4! <*Úà¦Áhƒ*àqb›ö 4”#s•+2¬ù×AÃ¥ÁÉhz-eãÕw›Ú€"¿}¦ßZæ@‚_ \ðà²9ó†˜CZ¹ò˜»$?g]­Ûí#š£¤"Ö†-MÒ|¸±Ã’âL’ºE”.4.4.4þÿ[¹S,&GúÖºåeO–oËzÙz«ÓQ¸€›ü€‘gã””àÛÆs©o~T¾„Óð…s†-mÜBj/w¬9¹Ý}…[އŸøÙ‚`-‡êÓ”b`–ÛÄ] ÁñHÄÍö4òI¾tÓã1áXÓmæ5ɾ¥55çf®¯lgÂùD@ÁmzTùÄ$‹ŒFVõܲÒÝãúGÎ)óA幕:MãLÌCgð ›s¡q¡q¡ñ6]xiP±‰$6¨lß[oS§ÿüíý€"U^`œ-G»ñ™ˆi¡Iã­&ÄtAÔÞ¥÷úQ’Fœ.9ë´ÌQ2ç„FÜf"žÝÐÐ ÁroYJMÊi“æ~vãÜÝlB¡s)á#ÐØMYbBµ¨›´ÏiÀBÎ낲xÖ2#Ú©}XÆlƒÆø„sÇYpwX¨ÝðN »ÙwùÛÓ$ÞáïwhH©&4ž´‹3éO[Ž¢Ù‚;41Ýÿ$?¼“.ž²-›þð‰æ! âû4‰Oiá¯{’Nø™¶%\Ë6&ÈÊô=|Ÿr²Ï´Áû?“,ú®[dá9¿ŒwÿýÛIñxRWvs–/_ÎãßÈ.Ÿˆ¼Ð÷.ïûÇëv+›÷£÷Îz}>.4.4.4^÷KÓ¡ßB°)¯Ï‡²Õ¼àqÆh‰9pških Q•3æ?ß„b áXS•¡dT‘$HŒ!ˆ;Í7cÄ`Ú"ÖíH¦Oª²›èæÕ.¦¯é´FF .$ôå³»yO·¹ä*Ý$:¦¢?ç{R´Cÿ6hÙ hëIÀ„;¶É¡ð¬4 „»-H"ãîP¨"?›T/çËφ€qŸCrŸ$aa›Ì~ bÙ{pÎ@×Áש7•Û%²Õ¡ñ°~½O¤›”Õ…Æ…Æ…Æ hpòzƒ‚ðöÜÔ]ðggé;T‡EØP×-²I‡Ùt›;€¨«lˆx›Âïââ‡$‘’VSw¶gaTó[ï6\|6‚@‡Ža»vm%4ÎY2⸰И¦6q‡…F˜icФK¦v¨Ea™vmù)Á˜gHhÌïS@DQpÖ#4T“x&I®å|6:èÀŒ.t ‘pÃ.!î²­«û]‚eRyF@R.u†Ž·Àó wh„b½¥P:íÔÐH 3KØI/ƒ·lëY(r æÏ_iá.ìæ)ZCømL C­ý‚'„ú„FÓãó[ƺ`¤†rŽA8 …œmE*)çâhC; 4æ‚Ì€@#Ì›;ëV?b”4"%#—€~—ƒ’šÍJE"IÚ!‚ >:8S ÞÅp£Ü™àñn?™ùH€UÄÜ1ÄÜ} " còѾ´  ì<ŒÖn›‰ ·Šó]‚´ÒrºQM…¬¥ÐøòåBãBãBã$Ë6-@Ä4W¼Þ•öÍBà<%Ÿ…{T,=é}(nY \4¦­)Ú:¥ˆ«ÙB3¯L6;7Éh–GḖ~èæ&¶‡™m…{LÙNiBäËùR¤Õ¤‘n+i‡cPÙæÒcÒ¤^]àÓ òÑ1•í%5]”8ÝðŸéFé"œÕ]7œàGæ„Ç‚âF§@A ¡LFÎ-¡2$Ô¡ý”wÝÐÝÜ(&©9ˆõÀ{³cð"Xá§‹ËN¡Ù ß‚F·“jòιÁÖ;Áq£6´©[^£(|6\¹9¡3g¤9ÂZžv[-“s {kò²§áÊüÜʦÞ[„eñh¹…OH±<§|)æ\C#"£l%à6Ðʹ÷¦Ý`$9?¶6èpl®Þ¦/Eb8źç“G!åþÙ@‰³q—ËjZIÅÌý$É8|ÐìUëÆ¶·AÜ<\\)ÍjfÝA’’Žæ©û‘³øÀoiï whìT>­?lÿt¦ü1´ ©]=A›4‚´ TìnxõåW˜âFÙž ŠÆHÚ`é n ßÝWæå<çpò™@ÚŸd¡bHüúZ]Ô’-χS!„Ýî¸mjC²K°pvÛEìZÈRBþdûgÏ×䑤µh5†›rI›BÑ3ØtÌßlÂÌP[2Ià@`8±Y*MCO¢Èn]äï1îw{¼¾zÖuí¦y½Ãº©EïŽ`¿]ùBãBãB〠bÞF€Ž–” wãY\2![èß´qÏV6Ù”Í/È ù¹Ã¾RFGS©`h¼¾1¤jÄè ñ9²ÆMMæ¥1š,mvãXjeì” ÐTãF!˜(E å!K¯ (†eÊ| wk2ˉ[ü PFt„5­N7Ü5VŒصš5&…9™ïç:$‰{oò#Nalf ‹h;áh âsF‚;Ir2VE‚æ|ŒbØ_éßÌ÷<ØlPC,æœeÉŒÿëÝ_h\h\h|€“¥¹² qm"áºXæ’m`ÏF˜R ¤æÅ¯oÒM§ÔbK6 ‹û‰k•×'7lƒC$· %!˜Äm&½•’)J‚º\¶ƒªŠ)ÌÏiÁÓ©ÊÌH’^e^ûh\ù pHËÜEZr»aYK?ô¸-Hê"^’aÆ0ƒ\e~c²¡Ñ-Ú°e0*è#’]àÝòþ–/ÅÝ眫9#RlŽDúQ‡C4}!1º{%™ˆ¦}=æBãBãBã;Ðhš†=bT#'™6—ˆ¥PÂ(4 6ÔØ^M}Ûƒ¾‘§$eã·;KÈÖ+þôÓ¤º€RÓ¥i2_~kª2O¶û;44‘ ÁÒîÊ»Û q5…BßóþZŸ«¥½Œrá4º¸ö{Õû 640! ¢äˆ Ì¿H´54H x4¿í]·Œ …\vAËšj¨öX{î¹hîIƒ*‚ÑÐhÀö¼]h\h\h|†Æ»¶$ ®.¤Ähsú°t·Ð6º5W6góUJŠnCɰ~! ›ë6Æh3D„‚²…a_ïíBãBãB㻡‰E9Ýæ×i¶¹ˆÉøÓUfXöèF=¾—mÐá]–-¡=¶!ÕÝr×òœ8í±Ø~w—9BŒ¹lH þ.óejㆻí[.Rùï¾%(nTIMUb,xî3Û²«¬N6![%äŽsu“urYÔÅÝãBç‘ÃN±SC:MCíôð'ÁªFqZê`ƒ‹P:“(¡×jè†ïG«¥cÂG´Ýpå+v´A¸Ð¸Ð¸Ðx‡ÆIV`XBæMÄíl;F»ÁNÀÑ‚,Iª† û˲ŕGzÆ…`©B'gAÙÊnYB¦™Ä™A®‡`;Œ,Eg’#s~æ:ü$)â,€Õ„D잦b ËlÓ®MË@cÅÙ»‘РȌmª«N)3ú `çÜoY‰.+ :KÇ‹pÔXë&nŠtt“»s¾;ÉÉÊÏHÏõéÇO߃…n1Ä0¹]77r]çÜ߃Æ80-´¶ ÓNs»ást$XÚl§”´X2 0@]¹5̉-…hD`‡m}.ÐØº|iJ óÕ,LÀ}—Ú®ÀÐÀù¶ ðn¬AålƹC¬ ÝB´¡‘³èpÁeέ4™f¢7Ú –#Í|C#%LÔ˜¤!¶ç:Ìø>@c›K@ÔR!MÙ]êð”v¢eNï ¹¥†BŒé‡öI/óHÁ¸b.%ª&pD ¸1ðu„¯Ð€ACB‚“Púu§€1žü>-kã¬2‰ó=y„ÖBÐuÔaÊ” ix×~ ªL—¯tÙd·NqÄš n8–MØ„×Ùže—ÞYþ¿‰ûˆ÷óüçÑMù4¢çÏŸÏqœG¼fÏæžï&4ôßzæÞÏy{Þñ—ãó+xkßϾ÷Owüyu6åèmoý5s÷\×çÝžã±éP …oW»Ðø7_ž ¿ÐÀ¸¡Yel‘w1ô¨8—m)»Í%M,óâÍK_©{2†`9Ÿ²½ÝÔp77é"Ú6ó =æÅûtEsäw>Ýt$aŒ5( ÊEB’Æ…µ¶Ï×¢¡º°64 Å‘;kWù y2…¦F B˜ˆDd!×2ìa[Ó.'פ9NÎmй©å}?ì‚HhroÛ€e`|æ:¹ò“ÄÝ`žÅœkíg³æ¤[ø¯é5œÜ§?%]À7sýH\ph?˜v߃†ò9qÊ•˜KšLQnžp-ELù¹}Æ5ßÅNS†‘4){@à ~†5Miœt«ìÔÛ•` d ’ÚÍih’–DÛAâ tvï-›£¡ÑRÊÊ+‡ŸÀ0g$@N°Ü¦,Œ A1ÄA – *fh0k)áÍÏœ›BÛËCL%ÉG)8n1wAä ̈;ZIv€²HyдÌ7sߤ‘¹C] 8(eJØ@J‹dð`ëfÝH•'|ÀÏúê×Î1ÓàÙ`ð…Æ…Æ…Æ;4¸LJZ%hHD‚,A¯Ü¯ìÞÊôw¹âec :è!Šq¶º±ilX¯y4b³)•ÆM®¾_Ù™8RZ}D>†` ÷£À‚L¶ä£ôæmdf¤uÖHÛÙ6á ÃÈš‡Ð)²õ0n ðn±eÎ=›[ãŠtÁw6gf˜-–óÍ·²~­‚š"‰IhðHÈ”»dÍ·TBTƒ·A…™¼…þûhî>Àl´0@Ê›ov9f„/.4.4.4~ èoWYpd²±{37¡{“Ò;a¤ëÆOqÆ0¢L6Ù†8i¾mPeRp²·ž´[¢GåÍŸ” ïÞ§´£»4j>µsçj~H@LzT7Ü,ýÌfžÍ¹rlŸ.*Ë)ñÚMO ªB÷Hñ¨S€ áXÄv ÆPF–‘CJCd·:kÌ&ôQÔnxÆ"OÌã¹GηÝp©çÃzF·sæ-¥RÚ›+¡Éœ‚­Ì‰»wT]ÄÆý6ERšMÜÚ˜ýÅd¿Ð¸Ð¸Ðx…F“ :qžAŸéýÛ9EZž„‚:é£) #;Øø¦ ;ß.}þ“Lð$r|þë™y~ž-nÞȈÉdòßÈ$õ *Öó>²'e‚sKy’$Þ×¢÷vž‹÷1Hy›“缜GIÆè}õ”$zëÛܼ‘ð~Ï óãëuÿÞ^¹Ð¸ÐxÜÅûþÞ@£[ÿi.é6‡´›W)b È>ëpw :‡„ó-ÊB“—„óò²Ó0MÅ$c’T”I§`q-ÙÜå–¤ƒZØüþ£ %Ž8/^“^í&‘7³]7ÊiŽåÃ5s]~‹05©8M4Ì2 ^ÃÒl%ä.­%Χ"ù§;»å iæéù2g‘3?…†AyWX“qÄ3î4€YÙ”óÜCÚþ(ò¼cf¯)ô‘• Ù2æT„¼èú {°“{ܘ§3ƒåî_h\h\h¼B#ÃEª““gsâ6Ó"€ö#Ù¾6 °‰d Ñ!96« r  ª¶PÃÞVY½$ ÿÝK¦uBA†7¨l=ó>·¢×-f¼&˜±¡á5¡ÔŒ;Kãî™9y7оKs~ÏšHùìå4˜ [DÀÖºÊýsV$G·x´P'ÑvÒ2Jðćޥv}ua³¤£ÏÒç ^KwXCƒµ 4¾¥/4.4.4^¡!ýü™¾!EG‘¬Ð` U¬Ã“LÀ6¨rAeQ0áâ6ijè¦áug ª ôxBC±€]ôo`Ø9_~-NëÊOÕsë”-á75Ðh‰ZÏ´ñ°7¸ÉÂ6Fr¤RIƒ7š»ËTœ¯e‘ž¥«ó4¨ò‘ ~Bæ÷ PÎ̧fpCƒö—B#‰ÉÙ Ifº{û|îˆÐ]óû³RFB!rRÿfÐ`a#¡4¼ùÕp¥÷1/Nh˜ÆâÜ=!Ñ57‰ì¢×‘¨†@B¦“¿S$ïäC42É-Ñ-[‚͆ôè˜BŸ ªn…¢¡CZN7œmÕôgv–'´Üð4­é"¨\焆2Í'42H­ Ò ›é½…B¸¡‘VzJ9Ç(=·RˆÞ}RÆ3šˆ` W}TÎ=ÐÐÀoñ ï­M+à vňNaOez$È»^h\h\h|†F§AžÁÛ ¼ËK74xõîZ·÷ Y a] m%#R–‚¹ÑSÕE“ºáqÀ”ýQ˜ú4¨Læeé]b ¥<¿C¥ͯíâCKpYÁn( Œ³õ€ë\cÚ衽Ù±DàL“”-Æ7qP#nYvh]Iý¬‘w™5˜ëgî1óºA3H˜ ¦m$wÍ®ÁUЏñàÌ=Ì57÷c±+™ŸS(Ûá¢4p`܆£•_ЏÈ9޹wXcì¹â¯I¿ ht3«.2dËl¢¯æSVÇ…! Ñ¢>9šmÀÍÛö Ò·™Æ$™¶&°ihW’—wße§·â¨K(È’ôuš: õ{x»÷ÞnŒ½ÉMVðî³ ¥1f¦ºeNix(Aéa1%ÒlªGÓ6¤àœ«úJ q64òw6¯¦ª÷F™­œyÉ´§Lù)“¤ÿ&H”µâpÊ,aÚvØ~\|T"ñ@ûÆ!¹Ð¸Ð¸Ð8 q'³õ·”²/dÈ>+õè`tº˜ªnÛ»Û„é Òp “Ò¥QšH-@Mè3¡V)+ºçÒrABÑù}lÛ\AF·Ì¦5ÀñîCGOW»ê&<-¯ßn&ôo‰/9ÚFκ]Ê4ÇxÇ11`9Ú$l—FÙô:î{î¹¢¬­¶ Ž"Š–0c ª[ô0ë§8‘R ˆ’f'µ<ÖŽáÔ­†x”ºÃ4}¹ãv¸=úl™ã é0\h\h\hüµÐÈöãR)3ܯ»vx;5Ô—ßÂË™`‹eæl%P BHS˜d{ À‰·¡ÁÏÈ.C„þœâ}¦JÇ¿M$Š_ ÈÇIænb!) 4bH`”¹9ºQ—C:I4]؆àÔ!Í´¬²«Ýz¦a’Q'™Ùº­Dïv¬ÙˆÅA*ôŽÝ²{ûêÌ[Àd£¦©t€¡Ë­sîìžSšçœ JÎ,f64A¸HÓ/4.4.4>CC™Ì„YdÒkùÒz†£¥~ìàm7³bñ;0Ü“TÒ¼y‘[jïÔr6ºS£ %;ˆéƒ*÷¶ƒ“)ø› $$(±‚»dä1Bx² ìô͸ʱÒÂ÷böÀï‘l ­¤[:*+º ª–æÑøì-Ö‘áX»ÉÂnŸã48[š!ª“³ ‘¶Í:š4( ŒË=ï„#ëç\uÚ™&44ý÷6¹0”¡Ê'ÔÏl~Ë…Æ…Æ…Æ+4š à`yÅnh´AEã’eòšFÄÒé´ÍJ~æ»»,ÅTW¶`ÜN»ûó[Œ '·!VDÅûÂt a`·+¡YIZæ`j´¹¤(››éÝ ÚŽºbžm¢e~$7ò(ò,Êãᆷ|3¦Hº•[x‡Æn¥Üm¬BØn¸bu®B 8„P䣃°‡F U·XFäýe+¶¦†V•šÞ›=ç`ÛDb&”XÈÞTØó$1e¾/4.4.4Þ¡¡JȦ†H¡l±‚N™XB–ÇKŽÐqTºg·/Ñ£äÞ]RPÀnK5ä¯@ˆšÚ‹Q1“oãJR@Ê °}³ir'Br$9ŸR [ê€yØ dü=4‘ž[ïÞë3‰¨IúÖhþ«ÀÎ)AY„h™ æž»ÛçFâ&cÝë—4Ÿ.yL’sÚÉúõîàœlÎ^οٺÊ:œ3hjò)H±¯ëœôîíµý•\x¡q¡q¡ñ Å%ÓPÓ /ֹ̀ éö+ “†v)Pt~mõ¡#Ú„îäâuœdÄŒÙb¹î~¿V]*¥¼BîN2Љí-Q` P{Â5 ¸i:%d©9·AÇ/Ë\9áÆ-Õip›DÓ3º€¨…èLËY8|JË1ê-¡ÙХ˨ H¦Ì˜m1!¹÷Þ„€…Æl®Z Šc¢bÏÙó‹©š]€ÉÞ«¦1Ù™Á6`c®¹ œ§¨ÓŠßì3M6‰P]h\h\h¼@#—ŽSŠ“$)g'·×BÀ:q¤±p•M¶´¼#‹¢54´S²G— Ç·Y‚‚i .[|Sᔼ°ÃÏŸ ˜tYóDdy3~¡q¡q¡ñÐ&z©ò²¡Óàã¼æ”}ÞîÝH¬C½.ÏÇâbw@ÒÖ3x†pÖtiÍ< š˜Bƒ‘PTÅÖÿÃpÓl:¡\ cÆ8’§Ô} Ç6 6%ƒV1PpÌAM¥$òàŠl@@ʦ–ÜsTÜEUI'6¤s_#¼ )üdiïH í‡î´TÃH|hœd—N ô–å³S¢°†Ðwã ƒÑÈÖbÔ\:MLš_‚·¯Ð0éµ…yÁCìh™x\b–¾MšÝ´˜¼½Ôݾ@Ã)tÚ†ÌѲ:l¶'ÁXòfY»|¼²[Ö¡Æ|ÅÆÙd¹ãîÇ%v~4re¬]ìÄÖL"«Sgœ£ï’$§Ð@&":7Hó0³L¨›Hýü4½ÎÌòɸou$“Ìã*FT9S`gÊÖ€±Sô?w¹…̄Ⲡè!1–š~Ô³Ù)^Mó“™pÒ¨‘–ãåBãBãBã4h@i«1Äd &ëœctÄ9?Ëe74¶¸ä^;Lê­}‚F› þ½T9»T–²$n³éqs o±Æ·é€CÏHp’r ®ÓæÅÞn)UâØùø0èGÑn¬•0A/`;í ûÆ”<3?ϨÏÖ`Žj®Í‡° Y>%Áј?6]‘†FB*Pìw©Cïiý´œxs@ƒëdþX¬Â\Kh´AÕ†Æ9´HÎA”¥œmÖT™Ô wh4u@úÍMNêARe šÐ° ÏtýÍäýH‰OI†w¡†}®ówÏßïmjÌÙòdÿÕÿ—¶ð6ÖïÝýûÑçÏ;ÙĉÒ+4êÖ*§pÁ>ë¹^c7–Ùßæˆ³}NˆœÔ!FõùÜì/É=›oíˆ>í°÷™>‰.ç¾Ø¤¨ÇöºÐx^ýBãï4ZÚ‘äþ¥áLÌ&D:2tdÛ KɈäZ^\iãZl4¹G"N)6ÚfÚæÒ—=¯hÊ'c`)Õ™+Úæ2î,R&l‡vŽIz RD—×#\™"ÌŒ"ÆŒ"ÁݾcäK•{ÀiS¨Iší‡ ÒÂÊŠFF›€€ç•€Î¨œYÖ ê m8Ÿ¡c @¹#Lof.Ïæ”'ÏŸág³ r ·šÕì…bË èH5²~Ù½™Ë̽+ì¹5ÝÉ1î0I¿ÎÄ…Æ…Æ…ÆhZSÌØ&]¤cI±Ðß„ -¶"øþ–òËbæª:LŠta<­C 7˜Ò'”x(Èì°]Óuruxwá® ç†Àaã\”Bc®Ê¢tQÌ —Ì*[ŒÇ…’ ŸÒ£»ùA·ms>ep6…€@“5‘R¦5s¶;E n†Ò£„ƒw¤ÿp¸MÔ¶dŽÄ>=¥6SÂÛÔJ Ñé‚Úºõ;oÙC'P·6æÁĸ/4.4.4>A#Å>™d,Bc¾ áŒÇ,`“F8u Áùo¨yY Šç³¬’ó‚£áT¶½©3EײÁó×´2äªò›só"O«±ˆÇØTžÆêç¹ÙJ¡»IöKÙi&ÓôV“ÜßåaøVÄ °rÇY‡ÎtNØ’-V@ðh` )ǼåȺ¥ü1) øiúÎ5ZÂÄÌ Ž6”SL“töŒíâÖ°<†¤…ÄÉï 9CzT¦'æ°‚r¦O1áÆ††m.4.4.4>AµÕüü3ôo ª¤Qg‹i±Nƒ §OeeïÓœË妰§o³i3…¡u÷º‘¢²g]ŒßU ͸ºý€±Ô Á° ªL.?c$(wÌ]f+kPÙžEÁK›y’U h<)섘yKxºUÂg7|¾C" Ç̦Ҭ¿eP!HŠX©³¡­{õ6¿žUèémxoÃòŠ´…'l™ñ¤¬òȉ±¦kà=$HÂÏïÐh*¸­#)™/¼ÅtI°ÍQ”onƒ 3œlÝ!‚M"žIdóâ•èíH„†Âmqô(œ9§h¨ÀƒJ!iÚÅpnM Íœl”|h žÐ.š¸ ‘ΆF t[ö•ùA°ÙP†mά y’÷N7c™ûÅ 7ž9—Ä9ßÅAmƒŠ²aÜp?:ç-öÜôÔÞ†>AÃÙÒ ‡¨j¨#wÖ4§77ÜR&îsŠ¢°_¯Ðh"D§Ú›q¦ë[Îåèq¦þ7dÓAÞÎÛ$Žç5Ÿ¢>-}ãÑ}¥TÎño¢Áó '%áÙÐäICéQ½Ýs‚àËžÍóœçÕ ŠœswR"6ýåmÅÞH-OO“4ž’9®eŸÉ=‰"ç]~&²œNû÷ý[gôól¾ÓoÞç¼nüBãíÜçý\hü½¯O’çš¼¨mYá[A ߊ‘9I)gÒv)ï7}Óé²8†-Y?×Å,™¿.î— )›6€L´@ÌÑ„‘ç. ÷͵0}éã RJe’Jr>d…9·RΊÅØ2Liˆ3sƒ°(&„wÉN~ˆH07'† "ýÌ`K÷·“+á̳•2šçI‰§áŒ-­[ÒUªFF˜¹2dù¡u¹rtÉ-GŠ–ŸãPS<…;i¦*†?¡„¯»ðBãBãBã4º-‡t˜¤N2ÁÄÞÊÌoǺ“nºTúöiB^Að”à ­å›íB„ÆLz×ÒÆž@3éD\/¶…öo®÷–dP¨ÛBzgÝšÞ-&4’bU0Ÿ”V‡f³­²Qœy˜ÑCÞâ†tqÏ¢ª|LsÓA˜1í#Ñ6B†¼wrÖmÑ5Û˜yǬHæÊflÀÛ†44!UÒZÉfGÒa¡}÷<xä Ê»œþ6Òø¥éBãBãBã4 …iPIuRa¿’g˜-É«üý,äÔ4ÙMÅü}Ó#º½YÃ’eKa>’j\0ÖRÒï¨X„@£%ÈØzsFŒIŒµ4(ð.Öéà¨M674?ohÄÔÈ2P dE¶çîÖŸŸòŒ›64šX ­ïÐð÷îÓrtü4¥ç<_ ÁÕ 泫œÏ¦%u[©B»q‡‘N%A¸SŸŸ ÑÇÞ¯#‰Q(xÉ…Æ…Æ…Æ÷ ÁÒëŽxËi×ä· 10ØT6¨ 7˜B“úÕ¥-¼öÓiQÊëqg÷æÔå³]$nfÒe¦â,ÀO[¶lÚ6ó”Ô?¡¡¡D *Éü¾Ëu‘Ïaž:ý¶ÍjC ¶|ƒf Gº:w¶Kkq7GuºáŒ»®eI\h\h\h¼C£q,½B“)ÈtÑz³S‚ÈÀ å4-}´ÉyRU€®›ŸÆiÇ&^˜o[´cC1ÆÞøYÚò§MØdì€Ä¤ Ñbû.‘rŽØ©r=P›×²¦>\šT‰ùÁ|é{zÌü¶€_˜ãS8îÝ ’ºÝB5½ ¡œ„d*4tÕ³ ›ýPÄ@$ì›íËÊdßaöƒ&í–‘“¼hÒ´@cL™@S$OƒÊ柿 %›CôŽÉIÃܦ“ë®%)4˜¨LUœe'+R:šmâð²…êÜ¢]–ñwƒÛàôò¤= à  ²gÆ!'DzkCške…[@#i¾7ƒª#ÌqšÖ¸rÇ,•U1cpēģ‰Jîwf~ˆ–@#3¡‘™“̑ƕ,çflÒí[žjÅn÷bén½×ÙTÑù„†½‡1Äzdë$¤øåa™F9pÈ7ÏÖ8Î@B< ³:ùfÆm Vü»M Þ_WþBãBãBãjñMÝ<È3m qyÉÙ®älW›—¼&@¾™iËOl=§°pLí1“jî_Œ? RÒXÌùX˜Ÿ—0i¡þeá1zN ìÙBa~Òìˆ@&?'Uæk—Ye›¿e1Ÿ¬FàáìŒ;¥…O'²£Ô $6µsL—FXÎÝÆXKsœ„ZXˌұn,Ã]…Bð”ßKÚÅr˜yÊègûúsæ/Æ ‚PÕ çc̺ó5Ì9Œc÷f`Ú¢ïаAŒT-ÈlL Á¼Ý@&“÷œ#0ŲÅp£"ÐKy’áFnz-r›¦bë-ø9K;¹qÐZ"²K…°E1M;¥˜AOÛüRú&R !í¡e±W  Ø~—`!å9˜bˆ†félCÜwŒ‹m9jGCÑ i.͇«ÏÈ(ГN„¾OÛº˜UÒ‰]B †=ºà¹ƒ·×»}NåQGòöL*Ú§=«`À=©Ú|Óè¸S˜s>Ä3:V<špÃ×ë_h\h\h¼B£ƒ·–¨ìÒx¶Ý“º•SÞŸè\¾Iʘ´ô{SÅܲœ-“ÂÔ¢ÐP € ÞÐФè¶6älh¥ïöK”K`˜àíÀ’‘Øl'Gæ:ÌeT³(lE¶zBiD”|ó|n¼1˜(fÝ-4z²&.{f³ ÛÃx¿4ï¡©wÜéD#¼5½Ó­„È-PžyDÚɲ+ ’²†;•+ÅÕÄÂ<ò@!…™Ð‰»†0wîÁ„uLéÜñ…Æ…Æ…Æ;4ÛæR»³ˆ…µ\¿žþ¬d}¶f·8î°&/û-ñÞ/ø&of²æX^Â- Ô¢T]ØݪÓee›vã›vÃm¬€ScĦb…¹–nsR•´žQδI}@#ÍÚ:¼¢°ŒÍ Óî!ãkþHí.B#pmcä4:Ìn{©â»}©mmLû(âq 4Þ ª6m¢Mȉ"É&ìže²Ï«¯q¡q¡q¡± ˜ïÙ”·ÅÉz(n< „hYÏë;f Á2_T ‰6" ŸÛJó àY$=#dc7î–ŽšHÒã¥JHk£ø'džð@x—s@Í˧¿é¶ò~É”S 6ç±%±[Æ‚ŸŒ°ì°˜lÈPóXîvÃÛùí¦1»šÆš’ÍH£ÆˆB¤Yùœˆ¶}oÿ~·æ ­ ÿ‚ây?PÞκ›º¼3#-†À³QÍ÷Î}þÿ9›ìÓGä: >lé‡s>?ÍÛç§q+³´çêѦ„<Ï~ŽÿyÜ9¤H½³>æ×¹Ð¸Ð¸Ðx†) g“aaɾ”½î#t3ã´û[ËÞ·Ô¯¸ÓùMˆs0ÞÇ$Ç ‘¶½qV»| 3Æph¬y!w:ÈDÛh1Gz$ìLâ8wœÃaáWóñ:›ØÑs²Ý}\AE9)ãˆáagÌ1BÞÝ`^Ó×0û/ÁÉo (à’c\v™¹Ç­'5›ë`ré’wÑë̽¤ô&ÏXÒÚò9;Ø ¹K:š@<"wš-5­pœ·!Dv[‡ð™å¯×¹Ð¸Ð¸Ðx…†›FqœM¯¶¤Õæ²gËBrù¦ÔrçrÞ[ —™nýÏÐ07߯2=xÚØ—´2þgâH$uVKh-}¤tÈ›ûÝ×1¬Ð…¶'4Z`•£;uÆõö]2n™oËoÏ–9>–| ¹ÚÝ2§ç^YåÝ!&–€åÞ„t'µ¸[‹ËvØ÷ -±8zoz÷–Èòý}n ô˜Y õõ˜ Wh¸ÜýÛ-/ÝšlN ‘IÚjÀ0pox“Nhœ دÒ^em~þYá˜ã¨ÀC'/Ü íÅ0`«Ì7‘sihhPe.ï.Æ× :¡}®±|‚†ÁɾïLHc(jPee¥s"s°¡‘¦”š¡¹3¡AJ1Çö#`'i9mMÁÜ 4>IïiLþ5ÐØ›šÖM(ÞñžoîiÂÖ›U½Ð¸Ð¸Ðx‡Ó­ÔÙ'h„ÌõÙ ÷u×t.ŠN¶)†›íùÞ¡Ñ¥(mèDâ!fTŠƒâìmÒã†î_‹äÓú*i'Úg9–ì2‹e&5¶ * S‹&¯¶Þ¼®²ä÷@ƒ°¦îq7ªiù‰q¦i›Ð-4¸Ê¤Å2Öv›ßæÞ‚­Püms Ô¤§†O@Àm„õs‡îªÉèÇÜ4Z¦Â‚­í†[–ÖAË6iPED.«|¡q¡q¡ñ ýJ²\dËAkô(F‹Ú¼’ºdÿÔ¡5…—-eòšo-(aûúR· ƒJšCn͆ÅBŠ@d!93ŽüƒA5n¸4‹¶eN·»IPÍá M&­…N‘™Lqo j´¾[ƒa PØ“«JU Û£™åœ›GG æ›Ò^ƒ·<¡õCò䱉 ÇJqŒ¢àÙjCz—êÃræšuÞ5«oh¸ ”s^sÍ…MI¹-G4ìš.dpåBãBãBãÝÔeK—<[±lŠmDžiJðìo›Ìß‘7âÃyî=ˆŒä$4•äû†ç1Ï+{?ïçkù›¦•¼“núN a¼¶xžÏ£Yù¶¾û›}V)}û˜Ï”žóÏYÜsâý(ÇÓWè#žw,yæy´­gžÄ‘=?'í¦~ºÐ¸Ð¸Ðx…†¦ &RŒ‡6”}n鯦ø6¢vœð#å›ÂTÌ(̘´žlì§E1›Ôìk’•E¤@K%‰a—ûa¶°F<=1R0<—„Ú€YD)æÂDwwÈ’£-=âŒ1—2>BÝÚWg5$ ÆÝ’Ü< ÆX~GsdE»à‡’.S‹Šà£Á—ÒµÝȳVG½[LI9êü?² Þ%n³$màçïQCÈŽ íZ3Ëžd&ý¯Ç\h\h\hü4žífø¹·¦!Æ&š5Í7áPƒ» ÅFfÄL<ˆÙ½Q;¼;‰?R~nË€&»hÒ¶ àúxH‹ß!îÖÍÆâ4˜vòݲ Ë0ù@c·ØòhÊÈÈ#$``ëB°4ÉdN—,϶5ð9ÿ†â#º‰“3'„HÝ Ÿ;ÑrÔ9ÎÔ0ÔHG@#ίÐ0Û¡ ¯c25È|NïÇvh%4ÃÒ}>à ׿ap¡q¡q¡ñÛÐØZl‰Ýšžå 4H帙FT¡´À¢3€Ä7g‘”P„‡,[בBàH¨®E‚Òà0…©‘ëJAd/f®H²p¶  vLæ ƒê„Æ3ëVîpµpÀ\P5s£(Â?P?úˆ†F‡z‘ bHó%a‡›@ƒ¶cÌ$òÈ›åïiÃà#¯‰ÿ¢s6{šVí‡âiÙ#¨L7LšjÔ iƒ*cD>¥»&91Ñ{ýBãBãBãß )R²;Y—ßjP™ôT Лx‚³ÙÕ;4bÐe\ºvŽ Niè!q½i‘;€~•6±×Tã‡R& 4«³‰À'h´X\ÜpœËÓ Êw5—ª Í,1êÙìöŽù{LŽND Øù·÷ã3n8[‰¶Ì7NöÀ¾Ek0SŠËkcMY…†`Ó~”bãÎ64hsɹÛàlÓ—9žkyD·œËúÚ -°ƒ"‰,ãvÎ ³g÷æóõš¯ÐØT„ÊI(È6¡ Sì–¶œ ø HZ@Ÿ?ÿÅp3\¼“þ@Pš³1/û„}»m–c•èxRK8·â’oD®C»­¦œä‡MYÉg-ïÂü°e%1ð“mÈ$yôutëÊs~Z`'c ´Îùis²)Î×?É@üä–m’†Éµ@¦ÉÙòÎf“CžDó½:Ê/ùà¼ãCÌÒ€gS7p¡q¡q¡ñ6¢ºå _M[”mR„;‰Y„±3ë§ŸeÔ\ÙDˆL‹©xs^ÂL¡®·AË$ôL†QˆË1è,ÕU<ä˜(ù™íäÝ´ü?mr²A 6’N<ƒÎ\ÓÎÒLŠëÜJsˆëgÓfd-½#JcÄ”FQwÊ8÷בB"8ÐN»ä Î3!Û” ì0fMrQ¶ªݽ7¶Ùˆa–ò4p MsäÓÍ Ìt¡‹.4lýÉ.¸Ð¸Ð¸Ðø4(‡·=Œ“¯èÚv½›öc}gh[ZêGš¥œîioß³¹¤Ð€g 9i-›f‹sJØ0œíÖÿñÛÇÍ™íKá“„¯’{`‰™7 ‹œ5¤ÚYm‚\g­¡! $Egšb«mÐlCƒ«XVµK¦tVF‚=’=‡$M5кiƒWŒÛœ4ñ4v34×Ç65Ý”`·½Q;̌滲 ¿ö׸ииÐxÆ_vR]p°Å»DŸ×S¶/ƒMI$D¾†áÃ'4 ›up’*\@ I”Š=×±Ií/wc«SXAçf1†¡ÇÞ(¶Õ¡ÍÉP€ƒIªü†íÓMß¼3äÍ0!Ù(ÆnZö^›¤AŒé"4lÏм´3*‹G·`ÇJŒµg³¯ÃÝÚd8-˜5Ó¡i¬eåY3MиÊnåN•>)ö¬Î¹%žLÌÿ)pJ"8ú¨¼Ð¸Ð¸Ðøë Ñnv—÷Ž6¨Z “Ö%ãpZ²ÞR ¶(a9p¿{sjPY|b®ÐERd𤹒 ÷¹ ›“Wó)¬ÐÐ4Sð“é#¡ôöU"nCÐÊ6Ü à$e‡éâ=t2,Î|Ö唓³¡×éÇÒCäÄžë<¡‘µqƒ÷¨´zîò-Ú"ÕÂîXÚbYy§M]Üm••ÀèÒ1äÌ É_¾\h\h\h¼C£‰ g±9I)]N—‘‚ʲáhy¡$• t3IØ 0s‘­¬ÑÓŸ‹#L+RCܼ#݉Ȗ5=Öeü¼àÏ!‹š4hHßïR2²5·l ›—:çG¸Œ#&Q-:…æ y³Üç ÎoC–ÌFõÞmúb*.ëxJð€ džÉ9¾iÙ)í›; j(¨ LÒeL|šdÄ,ëtè¡À|[ßÄXkyN Ünø’Lî!….¤bG좳ÌfuK™ÙÙ$›gLýRzĸ3>Mâ´%±ÙXWBf3>ç@Ü 3Ô4ÄŒéBãBãBã>Z¨x·EÁáMpÐ6"Y·XLoŸ¡àéÜ1Ýî=¤ô·€@Üú”¨XÚbÑíÌ´%á[M ›Ê7‰W9á>ëlh†O»ŠÅîÍziñ.ýÀ°&-|I®¹!ƒs’D[Ö©…efN‚ÍHØøÎN“úH‰Î?;­«ÛJ‚—ueËu¡™ííß›…ú‘¦×’‡ 6›ÄÝß2;=`âÎÌÃ[Ä$Þé†wò‘ûMY!• OÐxžÚÛŒ—Y¶ÉlªÙ„-’A×–t½ñ@ƒ¥¦-¸Àtê ùÖˆ?ý¤„LûH¹l3 –kJ!Ýhk•M‘h^¯ˆÅ 4rM P75häa ””“+uãyÛ.6‘o*9BQҊˉPDZ(0·±{^O±8(#¶czux™ˆWÏ<(K¤ÔYƒµÐцsF`™Í.4:9Kz †¥mEh É:@çt#Ì7c•´š“òÃ¥ð:óÅ~äqEQ÷…Æ…Æ…Æ'hì×PùðB¢5P@ !·‰A%åÌ× D¶i¶›.–;ÆaÂH&7<†I§üº„#o€ÆÕbâ£Ô­§!©¤4Ë ùd‰Yú¦jàú#³  ‰yjãÉïIb0`ž¶¬D 1Fc„» 4]Š=5¨²ÁBÄÔ)u„‚R+æhÝÈןB:snÖªÛ¡nh ¡ I˜;΃jŽfò0Ò„s~o`PÙZ3ŸÙÈšyQ͹۠H õ—Au¡q¡q¡ñ %$»¥›Ǩ`Û²(Yb–Pâ‡Do—§ *HäãsMÕs hÙé8€Š|žÆ rЀ´å"ÛU–Ñf Thæ92f=g#˜˜ ž[ú;²c·äJOƒŠ¢.ÛçHÐ1\±›—9îE¶8h`üÇo·Õ†fNBœÇ„Z ¶ØMåïmÅê(žY¤¾c¶8eM1 q„iÐm!×ÑäkiƒÞo»cyF¬¬^(œsåKyIԿииÐx‡Éñg‰z'ý»1‰i•&-<[{4ÝDò“üߦ¥œmDš2°[ÄœGïF)-(ð_›»¡ c"qx ôÏô~ßwQþSºáØç:?çìòê¹;åœãžIÃÏç :?çýô•ß[µ< $Ù¨|O) ×–ùÙ{fßÍùOþê#b¤y›Á>z·úéãØßïÐPÌJWZy¬¤Î»6q|·‹$arG~‹‰@#a^`x’³P‘BNÛÞçEº›oòš´-Ip~kqm¯îsóÛEòŠŸ¿cˆAaȨxÏ«"¸É0L š˜¡)ïJø9FO~ŸWý)¹Mò3†Z‡Å›®y&I†‹/ÁÅVˆ6ÐTÄÀt 'Cî1g¬s÷™%g§Xèe;ï ¤TPÜz !tëÏaòü&!wDŒ?ó’g–»ÄzKüe,¤>)d`h”ŸMo‰ ï@#â¿-ôßr‘´:ü•pŸa;þêVÖÅŽ‚¬ [‡¦ ™,×ÐJHGmhìÄTâZ åúGª…$žÁV¶nýìå[‘;Î$§t_Q ¶ý\ÇÔvàe`Ø ä5[2LðlÇšÇDB¦8¨ælHPèÉÏ–p¹{‚XV&·Ëp¬ÄÀÝÄ ÀœÐP°^É·=?Òปœã„M®é–Ø¢y]Þ¥©ÚaMça—´:ª†F·ÒÉjÇ â„ã"ô¿W^ʧkü×Bƒ»œsÿü3’zBÃÇRcY% *Kˆ¥Ÿ¿Tý çäëï/4.4.4>@#Sal ‚Ͷ‚Z‘ß±ñÞ AySNÞ)&-¤bÙÐh‘¡a1‘íäÑeb;¶8Ó Âœ;N©øl¥^·˜´Ã¹cÍà óã š ;B…ÖØš‡˜Û ’ðžyï.[ìtK°:¾&nfò°Ô¼°‘O~ãŠ(`ã¨vù€DýÞ?P ¡‚Ç r÷œ†å¦ÇÇiGäól÷pºáT ;Ò©ºqÃsoß| Ѐ¼×ÁÛ$–Hé×´BƒÐÞiÜ`ÞPšd0Ñf2ÙÒà•íTDN"asõ-éO¯"îæ–ð› (¿¶ÅŒ™¶†Æ\Es…–XMgHó_ *BÇB’Ò„w»Q‰.Õ@"afó}C˜³ÒJR¾”™L±o߃Ј9™À s5gÓœôñ$9$€ÍïfžDÆý„FŽ6øÑU?N»DÂc½‡ÿsýÒ^y‚½qz]¡)ñȻииÐx‡F N:F·-y’Hâ$(W9¿)µá¤ HoØ„‹7‚Â&H¼¬GrRKžä„MdizFÓ6MáI- ñ=R…D‘&.<ÏÿNìè<ççIéûÙ?Iñð~º;ÑI‹éùzþ¼×á9‚Më8ç' Ð6%è9³ûüç ¾‘Pžÿ~¶æ9vØ…Æ…Ÿ _ÿí«^$ Ô1zHŸ¤ðCf7!Ôxj¨_‚º… ¾wîݤ1çÃ83 °ëœÑd˜fžrAà“Þ¨àÞ52q~ to‘M€vë;üéI"3F¤u)ÕE ñy£cB¶±ÆÝ‡’+mË{¼·O@’~Èã´“hcq )ªÒØíV6MpQ©Æ XÉ•3mÈ0øX8Kíýæ8뎤·¬¡Þ¾zÓ)8hd6ßËfÁ1i„b;¤º|D(•×-WšìŸÍÎ]2¯i¬fbSz!T?È• ôvÉ”t¡Ü1%þsnÃJIìf½;HÊ*—oö#ÏÇ &‚¥Ï6=”.4.4.4>CCƒJ×v“ÕM¢µÑc³^¾×ÍÊi”@–kqùn œDcŸ[™è.jç¥9¡7Ü=Éâ=”®RmPÙ6Ó&/<òÂæƒÊR„Bg y ¿A#[ÂùQÔyþ/rrqy,%dÊFÅÔèöœ ¼Ù®T4ÃÙWðर74<7TÈl­-rÇv 4<·ÝT¥È~Ìzv­?REìt¨†'4ÓØY ° ”´c=g “]e5‰PM¿üÕ ºÐ¸Ð¸Ðx@£ø ÌFð“bÿŒ£4G(†³ä¯¼âÙ ˆf!â®Å¨Êë€Ð’qd¦nP€ ÄVŠs§|¼f^x1â ö«”†W DhLâÂV„3áYHk"dÏB8–^†ÖËÑ$¢ó¶Yv–šæŒI@sÍöŠC4…yÀ$Æ n}F•£C1‰!(‘0²<Ö2¹"þ¹JœiÖ2n8áB ”Ü2›Ýö‚(Y² ’ZÈ÷Üà-«½Fr#×0ïÐhW¹ ["…Ôý™äTl:"CA|ùû“"­-âÑÒ0æ7]àÙt ÎM“+%/O‚Û”2!ï°[”D>‡ñqL/&­šœ RÀ¨ Ã`êæöÙ+ÍP©,̱WoÚs¬¹”¦5=GÞ=" Ϧ]Ì=ò—ˆ(q. b¤^7Á¤ïFZÉ“&’•Í.`\9V¥Í¯M»q½óx8¯­dEØ›Š”ÙÌ_žÔ¦<5ÙiÈöë¿/4.4.4^¡ak_B³yñJ×Îï¡«ó2Í‹ª”L¡’Žó]Ýz–8‚&yZDê>î]§è˜Ç]›‚¿ÝòRRúŒÊRÿ]n„rè!’Å jM`¯ ËtI«AØ‘iɃºÁÌâ/Ò¨U¦…Kƾƒ–Œ/e¯m~!JàÌvZiÒy S+‘„D6 œ›}BÒC”£:ÑÇň"qˆÄM ªÌ&¥ & &tQ° g’:{oŽàúw AJgG¾MÚ2÷8³v¡q¡q¡ñ ¥UL*íöñºÞÝªŠ“C ©„Ã=—ä›â€qŽlZ…¹ Øn9ú.i¢ˆþ›™Z ½n;†#ˆØÎhΜ«¸ñvZNzš´ Æ7wÌcfŽ2#¬4§±p×ói¸e\4= „+RœÔÐÈœwÁqËJâ´9WD P° æQ”ùK–$g?¿í“Üûš€Ž´Í[DiæÞõ‹ù×)Iæ‡ðAË^xEý`Æ·òˆ ü­ŒÈ]^h\h\h|–;nƒ*ÿlñ§˜l‰ýŠeˆ,T&9†EnÈà¯U(fP(¤ýnT>Ë–[‹½…—6öÅhx}kãø,%t½¡A*¯ìHP0lkžœghÔB#¤eð0Õ lºYÀi"a<¸n‰NÎî–Žl1¤y2¯I²Í|FŽY”½ñóÏݦì„FÊÚ4]¨›Æb D§´ÑÛÊa<1E¨8Œ¦ ™2‡œ[ÙÓ$y´ï”ß»Ð¸Ð¸Ðø¦eë êŒ‘ØÃ bR”;ÖµÍVQvQ·Êp ›DM¶ßíÆ¹Ñmšq>›®Ý“¥SгŒ{ܦ S¨SJ[¶´Õ¢¬©É=á ¹• äJGÍyj¤èË„[¢›†Ò2ÞÒ ’âÐâÚ" ÌJA+é£I€±É"T“ ­éÓ\ÍUÃT#%šLVAÙãPD{še3ߺõ섟•‘>µSìTº¢×´‘ª4 ¤S$A"P¡>[e–¹Ë wht#Bq&ú»LK;]¦èÐXãnÎ’Ö‰ S(ýðިƆ1ƒz8÷@£Û"íÖ¬BÊÈ0©pÔiŽ|¡q¡q¡ñ†2 p &üv˜´Û‹Ø0‘Ÿ(Z”ŠÐ…Ÿ:í´}ä%ȆDWé³ÙÖln¾[ƇB4Z¾Ù€ß–æñš ÝþºÉ, RŠ€í2MôY ïJá!48d‰YL«@¡LDŽiɉ±Æ§‘}?èpFýyÃÎ5`6hèvËœ¹’”‚èCÌÄaÆÍÜü¥>{‡ù{J!²×ܽXp¶›úÁöŸó% Ÿ¹OX¦6~1U/4.4.4>@£ *8œÜé$!‚S£Kå+®i]-•‰Ì@)»aYnåÁÐéwD\Z(§›H2»9×;4›6Ã)or£ÛÙ …T„ ÷ò(ÚÁ¯?óÝ´`ÆÝç{Ò"ãØ;Êíæ=¶é!Ÿ Ñ­-‘WÅi·ô¹©Òæ-O8.lÓ9αšVÝnxTî6ϱ…ÿ4Õ ­64l=“PBC듚4”:Kâµx´nœ¯i åÓ¬Ä[ó|q!4 >”4ƒÎ •ÛÑÁOxY¢w ØéÐÌmlùK ¡¶#m`x©ë8fC*‘E±ñV©¾ö ppg9KÒ1ª$ʵ̜̱²Cné5ÝXx‹9hÒH‰ùñœ5Z»äº CÀî0ÉE¡QÇ6œZdS1‚Ei Î×Á†¾‡-ÐÍúEòÛ‡‘$Ó wh¼5—1aÞ­9ž­>ž?û›n2B¢J…·šHÐG>[¸¼7ªÙ4wÊÝtýþæ¾ïÝâD*DS\H^Ag4òÞ4æù零ÐZE‡“¶òÖ`%ÆD‹¼Ï•÷~R1:ÉÙ÷Þm`t›ßÈ>{¾÷ß<ÛIÔx~c¯ù§U»æ³!ÍÞǽûŠvßÕ|ãP]h\h\h¼@£QL¡nbÙíÌ‘ã5Mº…4/Gd)‘¢´ÑmHÀül]lÈ $Å#ÿãS£_«˜4cËëcèÄ쀰½Û¶è z´IÁ¦¬hÚµ˜CÈçž#`œO ¾njS@Ô•OP9Ñ?ïÒ‘p> ªn?¹åß\aŒÖ¬ƒÎ|sÚ„Ôäê³t3jC&þ–B*®…qÃþK0f'˜)Œh:Ì›A•Uóÿ¼ƒm’bÞ¶ùeÃÍ¯×¹Ð¸Ð¸Ðø œ¤N†u³1Ü”.Û¡ð<Òôɽ9'p8ËÞ~5`\Bø¦~(Ý)#LQÜâBçå ×1u4"æÉ¦lhXb”DdƒCJ¦Ü€h-ç·¸VÌÁ@B½†Í{,ëpúP w¶(fÏIß½ Ù=*(»É‚áj·2ß8ÇÍ5ÔLa1bÝ Š“Ù3zwz`“$¸¸² &ì€!ÅJÒÔ*A’¤£),¾Ð¸Ð¸Ðø ^T\¾E˜›,40¨hÓá@x%EÔK‚q^m”½5p¶…„ÃNâI„èWiâúµ*PsÎé °!PãÜmPõ<ðùññIРe^öR' pJ]Ô ë ³Bÿ(@8óø!é½%t!¨ùI rŒ†É¦.tÏæ`®&W)ÐeîmP… ¾MO€$-P$NR¢ÑI+&Bƒ{&Ì£èfËlÚ\m·Vâ·1´hJp¡q¡q¡ñ,·NÐg7\ƒJ—¼¡1ýùgš¹(阩Œë†;h(¬ œÊÛFÁèA$?cÙ•¾J{ƒë¬jÒlƒ*.tL®ì4¶. £©¦½f¦F¼†6'šY’B4pÄqÃqÔ†´~]NŒÖÓÝoòÅ–Q{ÞMÅ ¶8kIŒAy‡EH]bmÛº†F—IU»á¡›¸éâÙJùÍ ²+?‡nèÎû: Ð`‚Îàm.Ü…¬mPé†*g11& à bHtëu]_[¢ga!.4Z‰Ñ@Céê–ájGÕïÙØŠíh|ß rÁ jοC1a»¡¹¡œì»zÇÌlƒÌàüìœ4ñùŒ/±0'[ŠûÜÊq‰½3ehòMO„<éB[±Kˆ\‰?‹„Z6¼V2°Á}††pCÄN10¢ø}‚ùïÐèd<ä‚ÝÀäËãóFév*oô…÷Dÿ% ©)M99)ÒºeξæITh:þV·myÒ\ž’BOÚÌ9)먧 Izßõ&5¼“,¾ñ{ÖýìÙî•;góÓ:îYã÷´ŠiÊž±çŸZÆ4äI_AbÏ÷“Ò#Ž÷¹:ŸöŸwh‹ïg}ÿBãBãBc}¿Ýmßó•äK[ƒ*//MDÃún'Ò͋ЭiÉËù«ID%t·ù¦Ôín—›Ð##iƒJ ²IÛq~›4Ò%S¸–Òð“Ôôd¼ãPr÷Mªi"D—åJsˆ0uΊ=A ¿6…9:¼]Œ U>r•™õÜ·î>—&³i¡¯%ošA쟶™‘JÀ|–Ô"ȃ¹©´{°5…ÅV‚˜°¶ñQ\»]ƒù$èœb†Yª—YKHº!ÉÔ¯g¼Ð¸Ð¸Ðx…†I%Ë4¡9dhqgÀ¶31¬®ŽA;¥…<Ãü×È­%ƒÛl÷“e…^ÈHøÑ%g£fé “öÛnë‡Hµ\§öŽëÀ§¢ lÒ |/Å[Aïn³Ò¥¡q"uy;8Ð߇K$ß²È:œ<Èu%I£enu~} z„‚n)@3ˆì²iK 4ZhÊÏ~àöã/ɸCvÃè=* Á~TRp—âv@€’Ö9·)DÇCaÌ/4.4.4~šz„,Ñ4=—§ƒ ¶JQ=BáSZ†RpÒÂw²GñÅ_(ã§Y§±$4íüÅ{ØáX D[&ì™°²Í¯r ûhSZ¹h×¶Ýq¹wÛ®ù7FÒF¡!S“W´ö™#öütK!7~ƒ6Ù¿›÷Ìý`è´Ð[7Ùlƒª“…M÷Ƚ‡È·¡EZK„69wJ ö¨2C\G³ò ÙìΉ‚Ì1ИQÙ~hµ–»Ð¸Ð¸Ðø ;i ä\²Än1^PBƒÆBƒßf£ÄáVR-GA‰MYvƒÃ††‰Ÿ|“—wL€|âr ï† ÔÔûܧAÍÁïILl#*w uÛ¤ó I† ÎÂoÁÛ:[䇺­ôqË ±e!ÏÄe÷›s~š o‰¶Nü ;F0äEÜý ÷zEBQVÂVgs,Æ­Õ(Û”UV ¸wšÅ5¥`tËí¯w|¡q¡q¡ñ møúÄuC8/ò.h Y SAÝf‚YŒ Tƒ·q»-uMÒçiPÍù Dx Î¨Ï (çKørµM,Û oÚtÁi¹Hvø¢™L~²=è6zº@粋3¹›ÕQú8ÁlÂâ9Ês³%Ò6!¸x›ç@²`¾5â'Íù4ŽyäidÒŠ2”KÛ›å¸p÷ ©õ˜‡1^ºU&×AÚ€{ë>Ƀ$î˜0v·ß¦!„wdZì0i=îJa?òâ´ó0ø: WhlŠ’2„¿6ý!Tð@&Û÷2€(ÍSÚ逜b€¤^ˆÝФi ¸þó;[K5 €Ð(’4{l¾l•»‘‘©Ëý`ðm‚3‚t€Ä‡ŒÄF˜›Ì`ïr9Üe®ª9yÊà”Ì¢Žpæ X¾xþ¦ôdß„Ž2’'õ#/ÇA5ïÞ†eÙ„'݉0²­êœ‡"ÍâNrG—I±:ÞAÿSöÇ;‘/ˆ6‘còà™\h\h\h|[y¶ ä^O’P2ô3hÙž(š,ÞÎ]@ˆÑÝd¸i™!®o·ØJS{d ’ K@ Ũs…˜v1<šØÔcš"·3¡MK˜sÏ5"§Ù³Æh[dA" ¦À˜(.'BV§üŠ”h# vé‘@2Ä€ûÞÔ)ÞÃÐ3Xd#g»á²Ûš'›œ;ÐøB [s;Ÿ9r¯0ç6ì×cšVe™WJP;La0†v3I‰:ßmÀ"'3Fy()³æÓÉ]’(lhà®yw€´ïx!k‡nQ&E7n£°Æ‡N6`Sw¸þ¦_¶xßÄ i£E>8Â=YÜ‹R¦Y{3¨(°Tɦ¦  YÚKgTœoJlõÓw …„uÅ´ÛÐИUúO ;6Eª52³;/4.4.4~&jva¿M¡tYBŠ`RâÖà€QV´¥  “IášßóÂ>ÉÝù)‚ºüp ¤g ðÛMâ†IÁYr—H¶ÌHr ÅœÛ-™6L$“pÜCÎÍÆ2UI2“ô1Ó&dJPóRÏ‚LÅõ¥Œvîl¶˜ 8Ó]¤H½:?g£*—4š‰´Ù1çL–uÊ–‘ä¾Y5¯ÍáÚÎËógM2nG•&(ŸS sNÒJ¾Ù J+Osq{?²§ÎT®a?”Ó±{$ÒÑyD\h\h\h¼CÀ–¤ð20 Wš€óŠ•àÙ.¯5\£¼Ôcæ@{†Fà+“ö‰ÊŸH›È«1£²QWÌ$‹yšðž£1nšøB˜>ÐÈ$C?h!V, $ÙÚs>îÒ±fƒîÍüd¹ êÎX p`´âÀKt@ª!$8Ûšßi]m8=³—uÐ\ز;”>$æ‚|®°CÂ5†Â•ÍŒxtŒV‚)sW"%µÈ75ˆû±ÔÁÔ ØÌ ߬Ÿ- xüYPÛfhf!ç$ÝÚ…¶_¾\h\h\h¼CƒIÛé›.±4P©HbŠ“ü™ci;«,?Gþ'LŠ©Ã7ß W˜NŒ;©,»UŒ2~C³8iM'y 1¾.œ yY£g'¬òb'AIÑi~‹(fŽè9¡,,å›HŒ®¥ý ?C¨Æ¤EXÁÇH.L†Qh:ίaÔgÙi;Öqg[>G9Š)Üål¥´ÁÛŽõÜvÜ¢ D ²`ÞPÒÅCÇÖžhÞÕóçHWgǽÍCv¬âÚš_Ÿ¡ÁáBCrî Õ€–âÇïÐè‚Ì-¶C˜r–sH+yBCÊž7aË~Ù¾/ ЀîòL;í£½¾Ôäl ¹X: .=ƒHej*š@nAfÚ¥½T\=F•ôË>Ÿ4…ÖòoΡ1©XA?hžU>ÅcÀºò-¤ÚdÃiUhô¹{-[€Íý³K{3RÉ!í†ÛX¯ƒùÂ!sÔò ûÁ`úÑÏÞ¤ûáBãBãBãûÐØtí.#‘ÚÒn‚ͱ¡Áí­$¯³œhD:Rv¤D÷÷˜Á6®| iþ)­ÃÛ– ¬%‚Þ9ºçž+nãJÑ„q» (×±1EÛ_ççBãBãBã§£wBƒæNói —vÔmr>dzõlt&b”u°5·œÀ§×é¬À@lÞò×g;ƒvû[‚´Ÿ;\MñV6&/؆¡Gƒl߸°]ÊÔÁm~?ÀH p´pEÛÚç&ÑfÉfC#¦!ņZÏÔ™±&N¾©JÖ܉6Û1Óx‚öˆU°P(!SÀFx"M>)ïJ90‰»O€UÁŽl9?œ¯Ýó< f3ð‚ìR»šÇÙ׳\h\h\h|€†´^$©òB²4´‰J¡44X๩¿ü¥—$ 8Ú40܇¬Wäßz[±Ýsô>7æÜ†FÆÎùf9…wÓd2¡1w¡qÁ#¢‰ Ü»tÅho—^p `Ùê1í0!{£Já=ƒY‚OhdÓhRlh¸}M¥n‰L¸–æawä{1¬ 6/@âqÊ*44v³J›í˜Ø"€=æê§ŸÞ ñL±64xøf¥²Û0§² HMã0üBϿииÐx…C”À–“7)L .×9@å*M쵑@ʨiuyÝ¥Œ?¯Ì¦–»”y9Ò¸—›O›_IíEâ³h… ­$gë %¥©[\²Éˆ¾¦•ÉQRÃŽt£‡Œ&@¢Ì8„ A"Slnš³½ö|J£¦hÈZ“ÏûyTITò°ŒÄ'ÄúMdGtr–b`h1F „cP1?]~Ùü¢Ä„‰Õ„@HßvË7Õˆ»ÅݦABª¸û¬”-ß~Õ¡ºÐ¸Ð¸Ðx@£É¹¸¯Ý eþ«‡ò¡$ÒÛéÊ"ä†ÂüØ›üóŸþyo‰o1p@¤`–s Õ!MŸ Rh‡(0 Þr7Ùzœ±ƒ&¶w„6yÑMà¡g얠΄Wg|YØ~è†w¨·Å£ßf6Á^ŒBÇí¨0iú•—VºZ×–™§–‡Ž$fd7ßÜ”œÏ5®Ô ¬Œ 40€le¦uYTÀ»©1jh…”ÝÆã~—,£¸Ð¸Ð¸ÐøMÃøL’ؿݭf:õ¿‰ ß?ï³µJS¤ <ÓûçÕ›~°i%Ÿ®¸É-5äqç7¿O_9›íä|›@²Gö‰Bñ~‡ÌÃsî¿7ÇMù4þ÷5~_ËOëÚMf¾>îU?÷ÿɸ÷îk*#ëæ6ûêoô›ß¸Õ ¿çÐð•¤k¢ðsŒM!E‹-¼Lp#Á—¼ym‰HBœIGñÚW¨FŠÇO?µ”ÎsP$G«Ýã11—æx^”ÐWB g¬ßX䊿!X^ÙÈÄäÕ¼ƒ  .tðVÂ…&—÷Û4s {r )(^J»a®r÷ fbPAŽoɦ¶C+‰ñ×I¯ˆì ¨˜XU¾AºG¨òRô´N gAŒ(«ÓaZfʦ6 ´ӈÊ\ÑÅ7IÝE]¹KMv懕wM~uæ/4.4.4^¡A2>Eªlün Õ‚Ô#%IÅwA‹i'Jû·kÙÚW.¸­‘ÛUF^?WeëeÊ$Ø9nÓN3ùl¶¹*Û}—L ™0å4ÀŒÌµŽ*iÌ#¤ÛÍðMÆÍ7Øhãù.ÎhK¹©$„5i`LQUCº¡áÏÝZÚhÖÒ‡¥Ð0Ì6µ ? qÔ të.nÃv1pšoÆ>èâ¤–ê €«f¥m!@å²y0pŽ OÐpƒ÷kˆŸl*&ÉbÃù– !³e`vcF©ˆ&Ú€Æn‘¦ €[Œ¥Éë—qÏh~þ™åIØŽinƒ*…®ŠÖt¹,Û#D@Ú—w ðçÞb¬)v¯¬(…Àùt±•¤¼HLå#å|Ïf“PN±Ü}?–v[¶nÙŒ1•Ç…Û—+FRˆß[ÒjÛuüŒ‘‚1›±&`}Î`‹]´Àj‡¥m Ó¢gR$ÑÐ0„¯ q(—8ÃßïÒ„_]ò Ј)á&<Å_}ÑЉКä/^ßN3“rBCêbJ{2<6J†er¾©$¨îl¤˜1 1ϨžæRŒ$›Y5É¢]eî °C¨k'À¤X(’fB±Í%„Ʀv£â§äe`gùM'¦#V€i‚óÍaÌ6å\IÃ!qP†³Ö£j1¢w‹épë%对‘ÃAÖ‰dL²¸áOs‰µŒiÞûGH3ý¨~Û-2u¡q¡q¡ñ’Š%Iw¹¦NäÅ<‚v`Š4v“Ú 3fƒgÚ ¤ÐÚwß0rTŒ+¦gÒ3’ [<¸ŠçË’ ¯¯oQ±´¦§-À6 ¿¹h_(ͤð‰¦1š.. U2’6Ü„®¨$ž¦FSYX‘8ðš13û1Å:8 ÝaMµʡºfT M9÷î9E²˜vJd÷ æNš™ŠQˆ4*;¥.ÎU×nê¢4…Ts—'ß Ñí0.4.4.4Þ¡aKÀ-‚“¤yäTÀ™ÎßÂ5oô_ä,ä)çB¢*Ò<¤î;Ñ/ÑñI`‘)Å9© Šà ¿¿i„q(ß(J =Éoâ7ý7€,6YÁ£iÅs iºÄ¤mZIÖÇGÎsTˆàФm.-͘åxžÄær_=29ÂÞ6mÎû'wž;&æ¦ôl2‡â=çÜ?×âm/öìñ÷ü¼­ù…Æ…Æ…Æ'hàl±yL\9^Ù‡¦hQǨ©$ýâõ¥ÕÒ3¸h¹VÎüÓO„øòâ‘’M‰»¦}¦¼„-m¡y™®2ÌÜG…»<¨Å~ž&’a×À+W'‰§èD€¯ÞR1)ïÊUžM¸ò͘1¹Ž)(MRZR¦p—"- ü1dvÛhýa(!ÒE™«‰ïQi¸1‡[Hµ‰úÊ„UŒÂ`³ÅWÌÁ…F· Cbt~²ŠIªK#’ŸöÞmR`…àNDò˜è–0”lFTŒÄëiPÜîu%ŒÛÛ7И3OS` ÑͨqàFÌ)ÄâRwJmƒŠû…*êêHâìV?Mz$@Ô 7ÙF ®‚Ðh£Ã;»l™¥“újêáBãBãBã4\*6^ ËDJLƒÊÔK&¬_w ÿ…¢Æ&¹ù‚òt¤ æü3é Wòš¤u-Û [¨àHIª‹A§ôân7™~³K³ …wΖƒÎ¨ÎÀÃ6¨\Â,Qœ””PâcV*vŠxYÆMêjTl¥¸ò:šp¬1Ò¬1Ʀª¡p –&$ñ6±´Ýð@£E Œ4åÒov@b7½öѦ«#÷ –î yÎìk’"‰Çソ–u¨Õ…Æ…Æ…Æ 4( iÍ–yÅÎtÏáqÇϤCË&iDê.?ÍYß̦N¢Î7mqÓªŠä %AqDÏ–"„ NºÀ@¸Í¼ù‰É ˜yYž¼¦³¬6jó¢_·¸é"|Êd³Ùy,tãeš¯´B"Œqc.I®¦•WÎ/uÛk›ÎËF±q['Ñpýgstë™-Bas!…^c¦0 q·üw¹³KZs4g´•¨"£¤ä²Sº@ê¶?@äÙ²²÷I€“]Õ+˜ÝùË©/4.4.4^ AÓ(h6PL¦BtÁªÃ"ðhå`ì½ÇæUÝ­Z²%$°áp²©Ø€€­Ä-7Hó¢ìУ.­Ç€ì”Ÿ#wSGBbÏO—í°}[¬`­±v6-Æ@òh7ÀBoÀx‘ ­ÌeÎÂú%P‰AœMêÒíæÙRÂ8@1‰0,é`RÇ‘ßTù<²‚e0޳“ذRÕPmYn}”FýÒ@¦æ>a± ѳ¹K ª¯ß¼Ð¸Ð¸Ðx…Æn™ÊõO'‰4º”a¦¢ !Zì‚ùÀ€QåÒâ&Mqm¾•ë@%¶¬3î,‚ÆŠ0s4g&®¨›zŸ@æO?Qœ´ƒ†Œ›¿T…¨‚Ý.g\ä-€EÜZ§W¸ÝãÙâ‘ñ 8(RP²€²¦Ì ÐÊä,yüåhÊ BÊÌ N©íf2êÌ<­_’NÝóchB7:ç–æÎº¹¤"NBG';ÉìÌaofÜIßBò'¨#Ü]˜–0 B*Ð/Í€ôBãBãBã34HÆ3Ȭ`ì#“úJÚÍá5 Ná)¡À Ñ@e¤ €ã È‡Zw¶EíßR93V Ó@šY—ù6L²¸8ˆ¤»m‚É8å‘ ³ •a°ÍAÃŒ*÷…˜±B4B&Æ¢Ò ¹ÇÌl–5KŸæQOX~‹y”MØG0¯;q×Ë6ŸÂ;<,€&JÕ们iCCcï÷ Q¡_RZs*¡€ž銶R ¹¨ÙÜ¥¡ã¯;òBãBãB㯂F&hrÛGtù_ qOh4¡Ñ–T»Õ%ŒªÓ¥üB<Tã^q•–ÚòBºêaÜ^‘‘nÙ:6~B¬†)2Ç$9u3…†0ÙòG&ÚÚohôÜwÒÍ ó$®2„M¶ëÍÞÉvë7J ‘ï[3—µ–km»îmP½CcËéíqoh$„>{ ñ -Ôç ¶4ê…Æ…Æ…Æ;4¸I …€s»t_ i%.½Á]èßTTJŒÚ šI/‹ró5(Qä,Û!À‹|NÛv½5â ’„DùFcË"G–;¥ g–Êåé¢*Á ‚âs톇fÝ$+’ d£ÍŽ$б-ïÚmÙB< ª½Å:ð`8$w£”i®¯ÓÉæÌ±›pË0P –O~;WGâB:‚½…=IÉ 9CÒa~\îøûÐ qp¡q¡q¡ñ]Foî†*$ÀžEî» ß²ýgë÷x‹Ø3Ø&„ô¿¥˜=KÝMô“‚z–áïåF»W\ÀëK éßdvÎ+ôFxñ,÷?ç§…"Úàܳb‹IYÏžI‚¦Ê6í¦‰"®ÝIñÙT ç ÆMŸï¹®Ü‡Ä¯ÎÙôL¤’IŽ[èö÷{_ft»™A©™‰ÒþæÞßïÐðE¥¹‡2/6ÚH’øémåæU;¯û¼ª8ZÑÇ6Rx•µë10#É(050@t¯0L2ÍŠKöëÛ& büõ=àúG ª|dò÷˜‚Òþæ·[·¾çG÷4%b¶ÀjÇz–H¹jŽžscþlz!Í‘IÙ&¤`ãå„O 6$åÇ|ãîÿþÛç„`ŽÝ3mbkj!â†XÛSfªÍ„”¯Ð>ÏízˆWzê=¦˜”Kî ¼Ç¸:“½™MC*_×þBãBãBã7 Ñ!AS~8‘ÜVíö%™©ÎÒ†Fdnʼn[¿“…³Q„[´­‰')ØÇ™µE‰K??;ALmq8ÎMGèæ"»Éuäp±Ï¶©M›xk…²“úùƦS¼}sZ§G»)ýÓyõ瑞çI+9i"Ò¾7î÷Ù?É7Ïë<Ï÷6VG»×ïyÖsTosÛÄœ÷{ð:o$”½ }þ½gXï}Žs-Ÿ¿ï»|›ï7êÑ—çI.4.4.4¾ÉºC?ÈKIòżŠ,’æ°v^ç4$„Â…Ô>²8¼8…)¶åµŠ+ØF™4ó}ô\Ãת†©¸nnBêˆdTBqÔ hè 7šßb\´D:’«t9hS´›èí 6•eÏ`f¶Áó½8`d®°= Bf¬fC›u˜TGÔ²¯ÈA“zí` W±Ø€ôGLLðs­çÒ2uÜ¥¦]Ó@:DÍ®3ì›kÒ¾¡Eª #ÇDÒ\òÜ ã°èбDšyæÞ/4.4.4>AÃÀÛ¾‹Ú;è•M—‡… Iÿ¦sµDRÏ”o’^£ü•\=Û9d^§<.'#é³àŠÐ%܈s‡ìNœâlɹ_~ß³`X:¥œŽË ³Žúa»ä€Èu$Î êÖ¾¹V7 -e7aV4Ygy ™pÔ…î¢Òg#ûÜN TÒÆ?NÓ›´y˜6)´Óºqšå~i%‘µˆôç–èPP;@êu`–m¤“àÐæ“+j‘ @Ë“G8|~Ö ÷z¡q¡q¡ñ Y`š×·øK.j'íYfÑ7™ƒÛß a9wO'†‘ÆR“0òúÆÜÊõ’mPÙZ%ä öù=¯wEidO›MÎÓ!›z(€~vѤ²1êìl‰Ór”kPuK˜<†Õ‰ˆ€[ù™Š‹° ˆ)F6Ѐ:£b-¥˜HÖ¶T¹ÛžÍºAÍ£5=¢®¥Ä«}øÅtA´Îf§^ƒÊÖŒO‘…̬sÜÔ%—Nƒj¾©Ùƒ/{¦‹½3*ÓïЀŒlS–¤Úy½'¡—ˆä€¥û˜7Ø Ã z.¶À˜S+YàiPñn¢®-‰$ “ÜMØX†Ó Ê¢eƒÛd˜ß3¨ªvÃ3?[dA±iÜ)²eéO *š ·akû®. £¨ŠÖiŒPÊ¥í[‚5×t{ôöÙæíKÝ4Ž$…G™µÓ±n“&Ÿ.1já˜ÊÝ ‘É'4$œM2ÅÝ¢¨¥ZŒ¨D.4.4.4^¡!“К?kFàH%@&¥9—çg6áé†ç ùÌå Þê¤å‡&³¡²Ä£ÈG'’2¹$Å”€Ò¼LÚ:nx·´ŸDJží"ÞÆ#Ìn¯è¸ÓÚ2#Lh¶ýû ‡v¹H¡Aø2r£ÿZµ‹†¸ ­Ì`y´Ÿn8›I!‚q[y̹ò LbÊN)€õ|Þ™4ʼµU¥LºÜÉ.ÌX•*µèÖ{fMhP`•=ƒ¤¨Â_Ýð Whìä»qƦ|?Ñßôƒ3¹ŸO„ç&8ÿN+ôw@¾Ï¢uc¬þ¯ÍOæÞé3¹-,ã9÷“XñN|8?Róhßuް·o ì &”žìï#³^ûÇü`ðm™&q(“Ö:}•–xPˆ¨©'çmwàšŒ3 xï™fmoùÄ€Ú :ï0—7âû›‡ ”=ÿ¿ûö9úBãBãBãÛÌÍ+).N{˜NyeYA×Í–ñ–eˆÖZa;1¨hœc§³‹X€èÙ¸À)F&„iHÏ„šô•üÞG´ËÙíÞ!¸¤Û!Sï=EXû.m†–qëèéþ5Ù¾¥¸•¥¤±–GàÎ&L@ûœ”8ÍK9'h™ÂÃȆ/1sÀµ]úÜòÛ¶{ I댔µÌŒ6i>"Ÿ¤ø´ø&›-¦ZJ’ )Ÿ0Ivi‚+¶æ’ÊýpÉ,  Áç<»ÀÀ·ŽÄ…Æ…Æ…Æ'høútÓ(ŽÜr.Oqd¡aû)jÈA#‰¥ëöã·4¡!mâ”oza×m[´&ÙôÛаi;#L“Hîì ¶¤I™’Ð`Yç` R~óØö?üÐ3ØÐèùái³"f6™×E~?Ät4¤yRÉfS¬lÃë4âÎêú·!’†WŽq¬»¹€EoY³£ã¯”NÒŒ|OhÒ6.à~)–r`;/:üt¡q¡q¡ñ³õL&©¥¼LX}†¯ï@#KbãZÄИ IéÊ”®°“…Mn!„.¶Ì‡-í#hlÓ¥ ØÊêÌæÊ}¼AÙµmP va·!(i£ˆÆÏ€„‹nG‡¢’¯¡•$F¡ùÙ;;b4cËHXaäBƒd/áNRg<HÈø†ÀРJÛR‚7­Ë¶AµŠ™7~{f¦<Âð.@"4vÃ2 º ߆FM»½‡$-â»·,&•8ߟ¡q6i´h‰„ f„v¯q!ƃT’.»"Ù#±mT›°¼Iº³}g›BÑããůP蜥 7¨1u Û1—‘~°±gKŒì@²9óÃU”éI›5®òûß÷ã¢ÍS›±A¢ ©nTlkiýÙ4RV2ûh¯J[ðÄ=vÜ-ÒÚdþ·Gr?cPe§44â†vÓ)Qö·K Aû‰™ýÜå…Æ…Æ…Æ;4vÂÄ„ ¯§*m¢Iak‘3é–W#G~›Kf༤“záh%AiB1=Gd»%ð™…xJ(p!]s7}L;`šßü*ükB¨ÇÇ3’nýbb "DÜL>:Ò˜RáNi!ÉÓÂØ;凛¡„Hp{R¤çZP@ж÷.“.€»½tî¾Îœ4±Ã6t”Dçèù3òL²y;}h‘5AUöO ZP)INÜmĘ4}Ÿ2 „λ¥ô™´õŽ/4.4.4Þ õ,D]eØ“T‰##õ¹å9YLnÁdX‡Íl¡I9(Ä2¦“vRܦE÷½ñL£ùKŽn¹~Âl@ 2i§v•m‰0AПNºó òýꢕ4= ßKÙÎËÐx>¯lˆÔ\±Ådö ¢ 5(”êÃ¥EC!b@Ï ï€¶3SCÚDÅ –µáÑÑâ›»\¹JЀ{Ïy¤žMŠÀxˆòÁp4‘œt]öOËDCmáÑŠÙL >¥¸™åÞ½'44ç Q_h\h\h|‚Éõl’^´ßÝn—í¶:¸S6¤ ÔâöH(P„ÞÖ1>1çn—F™ùôü`ˆ”„‹l *>û.74΂·ì¡ÑkéêtëÈœ›ô£»‡c3*~fÿ@T! ÑaÌFV¾)©[èºez,œ›ëÖh‚R?ˆ™þ%X~¡q¡q¡ñ .ã‡xÑ%ðÏù.4—äñÖþDAhR÷»D"{ ؽzd—çwóè+ù¹iUrl®úã|~ãÌT”Œ*@Ϧé¢úm°tŸ£9i%}¾÷v3ÝpÓïìuнé0ý3ö¤Ì<…úÎvKšÌo§'·Ô»€µì1˜>â4ÙèÜ9{]IÐu{›AßÕ[+¾Ï§Üƒ´¤Ú¯ÐÐB¬7/GÄB Ìëx^ƒÙJßò²×YEê1Tp óBÔy£À‰—¤I):c@b˜h8y8ͺ͖×cÆYÓÔ ‰ ŽmoH „qPm*™\ÚDˆ‰ë§±q„ê¥á#AFñÍÓ±¦ý$•¡„$PqŠ¥É˜.3x‹ÃË\ve„˜pRm$¿K¶³È É6`1¨G *Ó‰o¡–nÎlX†¶¢Ýº(•F\ ÿÙ,@¹=LbR‹O#ê,…;| ïBÃÆ ¡Úh…aÙe±ŒËZÒý t¸&¹ÇeX/O‘Ns‹õ¶¼c©He:AÝʦƒÑí ¶ãÎÆ]R63ÞwÉÑÓ:μ“/4‡¦Ïo¤ÅȹICƒ9HOW93²[µ¼¢ÉBÓ{Lùµã/IGr7ù´:||$9œs¸e;ð€ôMÚC´¸,÷r#r¦®ôTÄ—˜$,D&|öî5LÑr-²p¡q¡q¡ñ=hdyšŽ,é€bÆÐ3z[qy[lö_âXÌI;¥2Ð`k*æ{6%j8†[þ2FOšüÌ4wj±¡Áǫ̂ þô“M7‘OƒJZ‰ÐHÐT“ÂÍÑAç~P‡KÅ–™{Vb®‰d³¡õ1Êøì‡˜›7@$²y°}¤üï„Ê™ï¬k~ŒõY LÚ£çÜ„ó“Ј`7»C£PâxF•UJÚÒt°sÒAlÛ0„êÃ#¬É!=?ÝdÁð÷…Æ…Æ…Æ;4úåHrËù j?_<‘à†zˆ´‡éÒýÓ0Ñ1óÜUå<:Ž›’Öäså2w?÷0›'ç¼4qÃ#©&8NC°¡‘™ØnzR’"AUšÉpŸÜ%çˆä¥…‚€,³wÃ|G*¡4¤åHÉΣƒÇÚYÒʹ)¡õ6¨ÜøöéG^ñfPa~aÚ9’vx]K Çyø¾•ßîÖEJ~ëøZ0(ÈŸ›ü¾¡‘ß+øùu/4.4.4¾–!ÎK³ƒ[ŠòM(hwÖæSä„MªZ 3EïL2ã ¼¾îvØ™—Ê­¬ØÏ¸Ç|c©C‚¶íLÉj‹bâl‡˜hÛb6jë÷bbZÅøœvÂó]I-„74˜Œ$fæ¡slkfÅbqé(oqÏ]kÑk2D}+àä7a°Ï·¡¡ ¦s"4RfjN%;÷éƒ:CÊB#G™Oiž8í-òíÊ»¿•^9ŸÇé…Æ…Æ…Æ;4Nš@ÿ“.vò½éïMfžéùç·79c7 y~ë$sœç>zéă÷÷ôv…çù6aãó|oŽÞÈ ok± çl¾SL¾?¿Ÿïlÿôv–Ï3zR3ö¿·ÃöÏoc}›“OsùyÕ¶èÐEæåŒçý]h\h”¨˜/ÏùðBJ††’1iÉ«ª_}s¦4Q´Ý×]‚™˜1yMórL£vSZP,º-€Ž Màc@Žo²Aâ@$âæ¥ž¢Jå4‘R¦œ—sAÝn‚s ϹVL™hfmËvÎ5˜M HT&9‘¢„š’BVd‰æÉˆÆˆÂàKÚ•Ùœ3qƒ'J $@À3‚Aœ/mmRFs)S„©#!§ 4Mc2«–‹Åt™"Uþ–,ô¸™í-:k¨({2ÿ¨Û4"nÒå …s¦¦õ·„øWSðBãBãBãE ùœÒ-h(uKšu3›¹#óF³ùb!ìkA&é(NÙ©!S(6°™ådk¶¨3.6¡2= e H´A€ìð0é7Ûáe‹’Ä@Ê 1©·ˆ kb,Ŧ€Ú䚎(Ò<€×Àc€N˜€£+Ö5cäQz³ÙaRÿ­0éÀ0kÖrE¸á–›0D‡)z$®qÂy¼œ³õÎãQ4z>5} …¤)hI³Ã:Г=˜•7Äp¡q¡q¡ñ ^,,&¯j Ó¡TÄ<[ 3Û×ôQ“¥št‘a7CC„ 1üü>KBÙi–q&¢‹ç5©Z¨« q¾([ÜmKÁ‘ÓÓe“— ã*K 44‹ ìö]HÈXÆŸM&` |î‚U— ºÆç|nŠ|2¯ÝæÒv‘¹KϧIÇùf’nc]óí\=Û6¢B)Mp†UÄÐ\‰~„"î&4æHAEŠCã¯%€þRfÙÔ¨TÞåQ‘ ºr±˜Šyü@žiÞƒiw¡q¡q¡ñ ‰Ñ’ãbjà2ÅòòOƒŠ ‰ N^wÝúX:E‹¿$}“s#Ã¥ìI¼ùÛl6˜ÐØíÝ(lßù™ÎêCÚƒ… ßpðܘHˆÏ`Py7˜gÛÈ´92°Ýðâ Spnä{_Ìåä4¨(Éë˜<Ú˜ãl<¥t0¨æŒ ´°Q²qþy(ø1oÒ˜gÀÍXÙønÆ„AÒ#”pÒ Ÿà(À ©ÐÈX‘ä$ŒÃC9Ððá+pÐ}XÎŽ¡ôyT”¿!29^h^h\h\h|‚Fl Þ&˜`Y¾6² *èäп¹5LdƒãRI#l)/ ª.$…¢Iaãñ²Íù4ó ;`Pi䦓ം T”9.o‹ãHäK,Ýðlä¸Ê˜T\'wÁØß ª,'ãž‘X"+¼2h=V¥Þo·à ÇÑ4£ûÉ#*†-Û0«–ÇKSý¥dì†e6‹ƒáæ#´KZ=K ­O‹ð6î--Úx@²Ù¡¬`¼[€øR«ÙÓ1`17-Åýºg/4.4.4^¡É@“X“çóÉ«/)šHµ$¡ñJS Ò EA¦â¯B* 4n¶‹)}­¦ô›VàX»}šB>ÈÐ<ÉóJªäk!Ÿþ7¿w {œ6NiÑ K¹öœ8BAº›syìnÂÜÂ4ß#s´O¾ùNé1f>x”ÏI „S2eîá”úÉÖ$Ix~“¦4&Vý&2BÜý^9Wš’ãÏÄÀú”úáÞÊ;¶È…Æ…Æ…Æ 4,ÿW´F2GÌ#óŸDIB[”B?HZÚ3 Ex æ|´?1,Y\aË&F›fÌ •×]›6]Œoó…šB3c¦²D’=Œ;2A”±Ú8 å4)I’rMQÄ……cÒdóÛ³³¬çžÀ¬‚B¡ª+õ3÷C;²nÍ-žš¦^»h‰¶Á|š”µ¤É #Ÿ°&’®] l]“+éÌ„p úö§éû]2ÐÅmM‹üó·´QZ£„`½÷» whlj2¡º¹å´î6õ“(qÂÓÖž#h¾„çhÒñÐ’€ÇHÒÍ–¤]’0,¼-Ž!ÐÅ0!´¡a‚TίҾ_¼b6~Bš¼¼!™ýú*ýÒé ¥L³Mz‹Í[˜ºø¹ó!òÍŒ»Ï¦ÞЈûÛ ES‡&ÈJÁ%ˆjº,/†ŒTìð4HJÍ@FVêl1 iJAi“V¦<þÓ#|‘F R ¡¶ä[€dñqæ„@FDá‚'ù(i•GŠGì´g(!3»PûqÁN¶=¨mr.4.4.4Þ¡ünHÅlLJŒ((ÃóêÏækAxè  Å m)©´†r`£w‰X/„;»AoS   Q 0‘L€ ‰ð<°s[u(á$,@dq~¤®äÑ‘íÔw)xOhPFµiš?C³9™S¢lØœÛrCæÎ<£ ÃhêÃ@s’qwÃ9š´µ`tVm\zû–&™ê9íC,톖—ü^Bæi@ï¹óèôMï¡”‰ß*J·¡ÑÍï.4.4.4>AW1-;O 4¥C-ôOC[ˆ u‡"bØŽ/žPON¦ý.·)E`K^B'(kð¯ÁVÚYH¤d²$zШ,sN½>·¯ŽzJ|âr7iÄ0…’©7w“ù!‚ig;²¦q&›V²Å2¡­Š;ÛøS¤Ú¹÷ÚÝ—¢­lçŒð3pd[e‹ +¸qƒI¶ùÕM™GT!«Ð2=ð·ÑÚQ2¤Œ¾e;»ižÁvö ®|øfvï…Æ…Æ…Æ'hà†w ’m•%$4«ÔóIVàBss¾žšrÀVß›×VUG~Æ$¨™BœLŠms)öóoJ:n¡Á§%ÐXÌS$ŸàòïZŒ¯`þnfblÎcZ žn­’0-<ÄõO\älšŒu Ä5©¯›°%#îÕqÕBŒäÞ ®ð(Ò)&ðaaªãë;¶#kAÀHñQbd¡ÓÄó ¦ÁÕeÐݬRù¥n+Cp€‘˜ ìñ‹qu¡q¡q¡ñhDdÓW’R‹1_q‹aÒ´a‰‚‘ÿðH¤3aü²i$ Æ]&TÒµ¥BÌY\ûlš•q1µ]°jëÍŒ;Ák ÜãÛŸ”È4¿Ü Mr–$¯"å"©"æ¡T›¦Mtkß.eBÚ£•À³y™ŒÕpín¸éF…Ú×¶gPÁLïÞ¦ÐWR˵± –dµ)¥>¡Ñ³ 3¿A#W´Oj³OF)<8š´Ó H‚nh°s~™• ïB£ @#_î†eL+nxŽÎëiÜÝ@ƒåKÙŠí´Aå« Ê{š42 6kÉQ,JÎùõûoŸì̸)¯v,aK A\`‹æÿXzHîšQ¸Ç@c®EÊ 7<Å?)ìQ¬€‘HTÖ4@æ÷ÐêbeF0¨bReîqJ üðCo<įçã0¸(ON;¡ºÎïÙ„Y7<¬ % HáQ?:¿†1BÔPfå[jš–s¹*»`þ¹Tƒ±B Ö ßB¡<¨2b Q .ïÐØ…è–÷S´KíuÆZ´à” €æÐÅóç;XÛ• ?`rr75±‰-©Å>¢‰P2vë’…-&`ú.ÅOIXÅ,ØãÛsu¶Ky !̘‚ò:€jÏZFÜÄ—-ø@¢ J¡‚ ˜N| äŸN·zeE,¶h蛈„+ejq¯<‰¶=S\sŸ©S~¢4wVÛñgĹ¢áŸÞaŠ!`B*Òñ”‡”{- <–ûBãBãBã×ñÙvÑp¬A¾ˆÄ}Î+S7|ýóáŸ$m`Û­•ñ—æÐ›ÃtTÒ7yÁޏäˆ4&ÐÚF‚©®¤¦pÀÿE¤LÒuˆ"$Å™.{f#ëÜIxÏFV^ÒµAU\[´Gb’ê”4Ì=@jéf,7\MR̘<Ð0çu·ÓLQ)ó™ÐD’^sç1«(ˆ$…R¹ Ó­g@&ùf7ì Kؤن:ì€Ì7s–b9ŒyìdxgšÁ’ÒgW}“wþbÙ—Ô”6Âçê:䟡Ar$Ž ©!ä9Ýœ- šyþ ,Γí¶ti¾B[€^X{M½èÄÈ9ß„ƒ rt¶ùTËz¥½dÀ/_F29äH”]¨4ßh‚Bƒ´Å ‘ ™Ù!HÝÍ!7&›¥L»/ c“Äöa€àfšt ·ƒ 4[6Õ%c‡Öw9±!ô‚vrOYˆ …³! ò·ÕÁv›³èÚF 6×ÓP>Kq[ 0*û“vÐÜEËACûgŽÙ˜f€£¿UBA)¤ ß‚†ÄŽ.!¤t¦Ì&ÍëcƮ͵š´¡h‡&/&À\XnÙ µÏ)ÁÙ¼b)üÓ·O–$I&ËëCDoh$(˜%ÎfÆèÈ"'|9c§(vC# h —ߦõL ] h{—Y6Ì8¥˜IùÅ$åÜ4¡'4m9¨äœ[‘f*æЀJGøÛ`´ÐˆI‚ñ·“Œ:€”ùÆL=ÌNrvrp¬ Ù@ƒ[$JÅØƒ>g5„»1GœÐHXÀd4áeÕ˜ªÌTßÊ.4.4.4^¡añ‹ñS’ˆé„)+ÎtŸœÛÏ+ aÏ6¨|e7IÑtš/>¶˜I ÜðùÍu[ðeÓ²°–o*YJcFÓTi¿’¹P8)k)ǧ¨X'1I“fdÑ€ðüM!MÆ ’¤8ç1L1à¹)üÔ‰|T6¾ HYÊ—YWM;f$ÆüÁ”&ìÇE'9m!é°Ó·mèôzA|ZÈ–™ãÎ÷ Hth”tËHEÈ¢°€™CKº€`§8î–—ÊŠ97'i¤·“†ÎIúA™mªÐQ›v»%†Œ˜•¢4½FÀÆ8Ïì6¥Gƒª‹­|ˆõ¦Ö|F„‡¢C.Å_*ÿ纑¢ ùÐ5Ì”£5KúáBãBãBãM…èæ'Mà¤,죟gù­#ÎsïÏùû³åÊ>n_çyýç%|ïêÏ;ÍIéüt?»iLÏõþæ{;•÷s﫟£ù4«çŠ|šÛ³©ÏÛywk—ßZ¿çê|ÞƒÏf@otÞçäù{i%owµçî»ÃºÐ¸Ð8Ïú÷U‘ä„Úà‹-P§²*Öi•¤pÀ,ãßòĺ:šp ÕáXÛ^J|Šk)ûÔÌ3…]Ût´hõ\[HL¿7å>R`vûH2˜zϑⴸ6Ò:‹}nÍ”˜|ÐÙ1–¶²M_äEû|ºÛ¡P0³&ü kêXçê†zó“­#âð†²žP¯­•.jY¸='€Áðó‹AÓátIéù‘šÎJyÇ{÷ºÛÜ' 8$ÈÏŒoy‚>Ÿ¡1Ÿëßú·ÿínëÞÎrÐ)j5eÃO†fÏ;¬M(°<Ñ £bÂ@ ÈŒ05•$gÜoß¡¡tµ²cÊ;îÀ'TÝÖ='I£±Y~'Q|CË2)C™M쀕Öì¹çÎLÔZ4La*¥c€RM6Š…a„Ùm‘ïpÇÙ„3ŸÛж:Ù†›àâòê}Ǻá»ÙÅ4 +}‚FÄÌM ôƒfÏç¸Ð¸Ð¸Ðø ðÝʽ¿ª³[yõòü64øm'æ Œ"ÍÃ$û3R?ù@êûlPAdpÓØxDôÓj-% b³%„Æ–©×xøK}öH4B–hXôßT¿]$†!Ö vÚè¹Ò<64¨ø¹¥1<úÊÉÅ\jh`Œ A³‰˜= »-‹­4Ï ÉïY[È`XþuÐÈ·%€ò[äs f^‘…<ßÚ"]h\h\h|‚Æ¿ýõóþÁüsº…¾âMÐõ-+ÿÉ jx—¤ÝpiÜR´³$–ùsÓº@ætÃûå 4¤JE’’¼Viu‘a„†zN8Û.&jQLá’#H×Í;ôôÝ­_ð@t¡ÁEKL¼2ɘ-ìɬ a°Éô/¶ÛŒ@¤–0Q²§âì’·Ï•¥ÏÐÒ{Üýð5%Ú *à0ГՒXÚäüv¸ Dš¬å…Æ…Æ…Æ;4þá/ŸÈ¦t5Rþ¸W Î ¿›ŸÏçÕ,ÅWѬ.4~!¹3§A…D·LYe&È :«ù§ìÄ‘žïo"¼ã†Ì¡а\6WÔˆÐ/%Šäç4$Ä5]ÃZmÙ0¢Î¹g–¥‰;'Œ‹ØœÑRPHó¸0`z®e?0h"¶Ã]º:ÎU›4K\eVÊûiÁŒÜ‰<-['ý’Àu>ÝšGr¾´›Ù½€4”´*PÌc¨]h\h\h¼Cãý£çßù›¿ùÛ¿ýwÿÝ7ê@ 6ûDðxiÑä3oê^ѯñ)séf6Ý·¸ÒIMPšç‰`·(é;hZ‚Wßóƒx#Ù"Dç?}×Ü!m`vãš'ãÓšµŸˆ7-‚³Oó•s69‚P ×yÊçøÝßì«(¿Í({ž²Ø'~Ë}÷œûsz~š^’{àê{í¸®í}‚Î…Æ…Æ…Æ+4þá?ü÷~ùüûÿ¾b; ´@ É+ Á ãÏ€¥¼úpóº…K ¸ûrŒ‚§-Àâ¬òúnç cކÈ9¦l"6šóµá„y1£25d Éös—Ý,çóbL (ý"± Sã*Fîs¿öI„vqæ0ƒTÔàŒ '¸:†v;DîZÒX¡]XG2 –4|qGXÄÛ :!»i$·%ŠÐD ŠƒÍubÌb~)á£-w騺ÐVê¿RÏ e$½gœ whüÿÁøþãüýGC1¬ÙÂË Ê!ë·k6 îl74¡`h´s®;;€žÆ²E~ñ_Üæí Úd‚`œ1aÙI% YgûvÐ9‹c)[ ¹Ã—Ïà-"nsLz^Ù]ÒÕaä.3â| ="ͲQÊÿ.TÚÐ |À<9*yp›#CÀ–Õiï¶-P!G`LJNŽeE$Q&X/40d%®6LŠH)Р8‰µ<÷ŒN»EË-`nsµÔ0¼ƒPV›À:ЀòC’ñBãBãBã4Æ ú¾~þ½ï?þøá?ùO.š”àŒÔXWðkñƒ“ó­ N†aPaHÌo1¨2Ug“«$ã ÆwÒ‹à Ô†l.,¡Bƒ¥â…-4Hö!>׆ "ÑÙ44(Ð0ÚI<‚ª¤èJbR|3¢ 3o à’dÔè9 ªl2©ŽõÀ& 4l´–FöyDaB¡ˆ¨’Р!C¨ÛMôÖjÒÆ4&b ÷ã”Çl7Ù´ñ Od£‘òÛ´'„ržÄ«ÐmÉ·~œJþüúû ÐøÇÿxLªòO€†ñ½}sZ)»ÜíÈŒ©];—ÙÉ}ZlñBn“‚WŸ/ØnWÒ¤Gw¼JOÛ†ÒԙؖpÁý`y•Ò,Eâ@Fˆ ”¶69‡®çÙ¦¹éÕÊc¶…ßʼnŒ4*Û·ÝðÐÌ™µœ9” V‡Ö3¡EÒ†¥Ûw醧¡$¢$PcìõãjgÜp :(:ˆöµä’¡æÍÖ<;• 40zÚ Ê'A ¡TMB!,œõë¹·¹®ÿ”4 ‘G¿ûqv/‡ whüÍßüÓúÏþÙ?ý§ÿéhàPL“z“ElR,Ý ‘èß0p_…†ä÷$ŒfÊq %Øi<Ð0„"%H›R¨³šÀbBŒIå:L´ NÀË‹Wéê\O*8Ë©è>i»³]$s–ärùR5 ³í="<´h#J³J6¤¦l;ê´À!÷Ã^aêf•#¯iÒ´þ]œè„âahö”ð D¡–f#c,v ×ý3é5ŒÂ”øØtw$è. }N¶?¿•vƒùì=˜â¤=ˆáó+0þúÝ WhügÿÙ?ÿçÿìŸ 8ÿâ_Übƒ É0–>›s“š¿ƒ)"›C˜ä¦›æ0‹é¹q=w&¼¡AK¬}Æ”Í$Á 2ž-¶ AÒ@¦ª›XžT—Ķ[›6Á›àÀìì;æ·Î‰&3ΦA (ä”(h ¡ ›ÿÚ´s2  š˜¤¸Ä–z1ü,¨ï˜À½íò=›[¼çÞ;0çÕ™‡ `:Ål”zB«NR„­É²=‚´Á ø €\h\h\h¼Cã?ÿÏÿå¿ü/þ‹ù/ÿËÿòý£7™f^ƒóÝì}—‘H®˜l^JsáUéfG¢2¯id~'0Üa;`¾ì›¬ÝDùnƒó!g)4Øz„L‘¸É¸=ÂD›Ñù­.á3Í8™Ÿ2k‡¨s¿´¦Å &&-arß-VÐRÊ-MÀ$çs3ùÍ4(ȺÒzÆÒ1R¯ d—œ› ˃W™PoZB`Ò@ªIh’ElŠ νçÞò©Ýž éñ¦ܧIøèß-ì²Û™¯† Whü«õ_ýWÿÅ×Ïý_4\žFÔ4(ÛyÊ4'̇[/lÐKsI-þKÚHñÛ$JÖ³È'ÆÝ&X4òÙÐ °ÉœÅÔÀ˜mh0#!¤èÚ6Ùŧ˜g—aˆ%åǨÚÐáÌ»œ¤ Ò­I»Ê|“¤[’uÒ¿ÙU”B©×„2o=Û„BàaŽá1냣ÉJ•IšÏ}]Ÿ Whü7ÿÍûßþwÿÝÿßÿÿÃ?ù'øÃÿø?î’ó$½zCîr~Ä t>wñ~ !äVaú—NâÍÏgikh„oMlÎ.}ö-(@ês|‘È–=GÇ1ùÛSøÀ+ïäãó.I5uÑ~7ËdNáù”$Hú¯ïrÏM`z…³Üg"Ø€©ºWw¯ÎóI}rLRlÏF7y„)ŠpJ laŽ>‡çN¢vÏÞž“Á³uÍ&í9‚:$0×>ºÐ¸Ð¸Ðx…Æÿô?ýëý?ýü/ÿËÿú¿þå/ÿâ_Ämmº/R^ór²!¢Á¼~õu W™÷¼:ç÷¹ÍvÀò=DóMðŒ9à+ÓsÏð“BT¨+Û€ÄOŠop9»0U¹€–R¶% mc¦•r^±–QLŒ®´6Øír—¹æŒ©[6·Ô÷`š1 – £ÃÁд£‘€!eD׸c%Èedf•;0¨±8Œ>D0ØÏâ¹ËÜQF3fæ¸Ã(1Ë#Ó¬óËÝg]™p¡yÆ ²8áX…ÊS ÓÎ ‰­yZx"û›–ÛÎ ‰…_–¯ÐøŸÿçÿß×Ï¿þ×÷wÿüŸÿíßRêÑm°Ô·yÇéFEª°=¢ih¹ùÜè¹ô9ÚPÝN¹ÙšÝMG”'î-Ñ®·„‚^X(“Rê†e†I·èµÏý&–n¸áj–8b•oí¶ †äÑÑ¡G‚![[Ahæ;†w†té58ñ1´tÏ #Ç ~ (¹D°#­µÛ™ögg0’FÌ`†u8Ÿòa›,ÐÖ¡ ˜ÏÀ0ä–<ð{މ²HÙyþt¡q¡q¡ñ1§þ·ÿmòÏþÙßþíÿþ¿çRq¬yYuø‹.Ô<¡Á« š×4N{Lª Þö# Dz§Ð–ïAih (¶¬2a¸1ÅS?KÂKÚ–aù.Ç"ms€cþÙäcBœP²Ùhñ¹Ëò!u4Ò‚ÇoCÉ 7o™f–ø)qC„msi Etq’F‡2`FÆ_É:9<~†Ú€%¹–Ÿyø%üËc)òÍÑŸ ñw“êïþîÿø?þöoÿÏÿó –£âžf’1ÎFTT¥ýÍï•¶„êÜíG„Fn“×¾¢Ï’êº$°¢`>ÂÜVž<Û7Ž?&$nøN€aæiÒº BÐÅ fÆ¡ÈóhHcHàiPe~l¡¹ *f‚¢§„ËOƒj޲èVWCéž$ÀNhäÞiŸcB©¼6¨þì”_æG!:×Ò–BÙëUÊ—4¨4û3'gó±ŵq²/69%+ö‹Au¡q¡q¡ñ ÿëÿú¿ÿï¿û»ÿçÿùÿßúOÇ ÷µÊg6JntNAÕÇ {Ú´AŽÈÆâÔUõvvCƒ on8·œŸû›Ý­]e~—rÆ¢ÌJ– SÝ,aR]ïùd[ûéVÊ–çÌx9º[¼·ëÝrÐÎ=w›%n5›ŠuØn8Ð0|!§›>*vJKûœ{=¡‘Ðq n¡YvA •ÄÁ § sù٠߸FÔ òÆ×þÜpKVíÌð‹ ½BšDagIg±‘¥YÊ—b¨ !«µwgß%‡qþ`B³V̸»c³L³Inn®®Û2e¹}wM½ê/eïö·ЛmŸß,Jdzˆ.~îb¨aùóo¿²x–\Û?庤7ö“ {V2©ÕÄ›pUr¹þª¡Þ¹“5ÙÛŠš|ù•0",Óܬ¹IÔz!7dxnF‡&¦hÛgL?AŠv©;¿@¾öFþlƒßzÛÃŽñÓozéõÞ÷XˆÙxƒâvM„²’ääƒr³°š{nX´÷psø•1„’ÔÂÜ6Ôã 1#±Q¬ƒ”ì«ò‘êw¿duga‰ÍvRÄf!Ê·& …›p.€õb³NÂ$&;ß}ËiÑu’\àáþaÖE*ËNÙ~c5GN¸×UgÜnÂ%kÃIn)¦¤KNr„ïø˜{l¿KM?[­eœUK oº5*4°óŸøà‘ŒÃHžæ6³"ѰŒð±ÜÞ0Ù Kí=³ºgpüÀxx%â¹9Ücjf¡¯ï¤Ä|kø’\:J #‡='î +œ›{ƒÒ™gw<ÙïþXå¿Tœd~KwD2rãš-C®òûÔóO°7ö<õiBOf_ÔL@»jﱟi™!„pþ^\•oK;s< _Àз5*ŸDˆ˜e-ß@Â?æDªx~GÞèn‡r{ÍîKT/o/œ“‡ßüžUIˆ7=IIÛ†%„4O“$ûÏÉ!'á‰T¾úfyž_hïYïùwia)½‰dF{‰[n2 üz«,ž‰¼Üv?ÉÕ—fü%ø}BÉ™ ã=QÊ1=r89=90yýÐFŠ¥ñë ´;Yòÿ­ë-õë™»šœ.º¹:a—"Gúþ66ÃföoÈtf2)zqŽ«·¨n*tÞ°mû>é:0õ_§…rûB!H÷èˆ_Z4 é»ÈÑs’—'5ç´ùCëätnÿÔ€IEND®B`‚Carla-2.4.2/resources/bitmaps/button_calf1.png000066400000000000000000000027211420416754300213110ustar00rootroot00000000000000‰PNG  IHDRI}ý+ pHYs × ×B(›xtIMEÞ '_EC’pIDATXÃÍYÛŽã6 =t3-¦‹ícßûúýðþJÞºbO<‰ODRG²œÌÛEÝq,SyxiÙéÓ™æwlš€i‚Åo“»Õçü­óãðüõYÆÚË€Ñ0yðÌò”ß[yµmeœlï ¸mþ¼:ØXîIg˜Bsãž åUÁÁؽ°¤ÊŽd¤ý£þÑFܺõ¸ “4P€o-‰ŽëÝçNŸ>ãTŒf¸þó×sáÿçÖSèÎÆât/+ïXßÅ0Ü«h ˆ_ûp Ôn·¶û44ÀŠ«€ Y+LÒ !`wëºeÂhˆWfQx—1Öh£(4º^Îô’Å“HŸÓE§Y#ÀDL>Aé¿|ùÛ) §˜v¿ßñ¾®à(´\°MÐ8¦HI+>‡¨óB3Y S(óo+‡M§ˆAk( ·³ª9—J[æ^æK†ã)Âïv¿áº®)¤Ò*Pö©Ÿ#o²S´È¢2Ô©¥‡È``¯T(dÅcCÒCxÍ5àÀïÃ1Dþù2#P:E2|_oX¤£ø9T£¨0 у«,AópQs X}AݸºXøüXœGêt„fÀ<Ïù*ÃíímÁº¾lx(£ôSŒî^I8|ÀHéÝG`tF W6Ö|ÙÏç9éNÁdYÜn7|Íu”?ž³{£yϬ~¼Tƒk—¨ùˆëÀRÅ“ŠD§Èò˲øÖ©Ø~ƒë²úžW†2Ü HÓ4}\é)ÿ„¸OT_ æ‰ÿårÉ &sÒ²,xyy)›”=^|/\lSQ_aŽ”XǪ+ôPç¦õ›ˆ ‚ú(ÈVYçyqvÖz·Z`0W‰¢Ò‹5_4Ö%£¨“ªH„êõÒ±*à‹%¿\²W®…ªÁDI)f;býµ °D¸± 7óp å °RÛxr£×ˆÂPðâ°Íâ1Z‡Ôj…cDV=YtVÚ”ÅFÍf^ãMqY… ²¢‰¥²˜„‚4Ï%Ü´j5-÷‘Jêµ®ðv@ 6KLŠ?JAn;1Ï¡(Ãh%bí´}­¨ý]Û:¡Ê£€ŠÇÐ×µÚy¸ ÷~z}•=jˆ}»`.”è!½™ÄLTæáâi]B–Ⱦ°†Œ=¥xÌõk­ÚzH¿ô =Öª=ÒGÉ.›ô¶àçõ“X•8k«Ÿ*(>®é•R¤e@™4¤µ…CFoX2sˆz ÛX ¯°Np$ËuùÌÒíDöxE væväq ð~]wEW 5fþ ×±.J2Ù»ùÊT÷J?(<«[´_Dkâ/¦Õ±ôTñ:H3n&ýgä±ø²¡-Õ´óå’"9iÁõý ݶúN»x•žô&Øføt –¡Ý•hl U»v—OêöÕäÖáD &³•GëYèÃp{_ך_M£>4ëQ¥ »wóf‚|F °2 úÓMĽ,B—éæ]Ø 8jÀ/ Ûp»^×½âÂmø bÖ`¸ëò¤ÆjÍÑuãé•ú!Í> ÉŽãêÕàIW<éG÷$Ï ójžqèÏé?ªôi„7û/QL–v>Ÿq>ŸýÛ¯ãê‰7T³·ß™Åaý@Gp+¿3DÿÁ؉`åø?XÁÛ¦æ(É`利?Zò1Ø”|tGK²}K4~V‹ë¥;œŒ±Þë±’!mi(Ä1ôH‰rô$GP ¦×_0¥UcÉp»”„Ím 3ÉÙ¿xj§á˜Œ?¾Rð6éûÙyÈn»^ð/ï£tFlƒIEND®B`‚Carla-2.4.2/resources/bitmaps/button_calf1_down.png000066400000000000000000000027141420416754300223420ustar00rootroot00000000000000‰PNG  IHDRI}ý+ pHYs × ×B(›xtIMEÞ 1&òÖakIDATXÃÍYK²Û6ìáÓ‹ËNùÙæ9„¯˜}.SøÚÇ„D‰ì,0?€ $WÙ©à•Hf=ƒR~ÿ‹” €oo€LÀ4¢×Þ–ûì^âz-`µ†hŸÄ5Pk/ý½êÁVoz½ÛVÛ¶µ¶o›ÖkÔ›ÕÚ¶¦>꼓 ×(‘Ûú’ú›ëÝò}þ5dÐÿJ‘®î»_³ŸKsž¬áë——Eûß– >A¥a„ýÙ‘Œ>kAnñÇߟN†Øý~Ƕ®Õ (€¶Å‚"µ ¤N’7a±0zèÛDÖ%BuîÚÆjž€ [Ç䕨¶*U¸zEBDº;¶š¢ö_]1éyü·oÿ8ò'k\×·eÙù I‚Uh*€Â³µSÔž!â9Ó@BÆÆÔ‘þ¿•#MaÒ¡Àx•ªMèàÏ2­Ï–R|é¾Þq]R¾+ÈÓ»~줕è¢5@V…¡N-(=D{¥L!©Œ5IáÕ€Þ1’ü¥ownË‹td?‡jôÕILôfó,6æá¢¢@0¸i3ÎÅy¤N7P$1)ƒt¹,Ëm´‡‡ò7J?…ðAë®+™Ã ›äì>£Û4£²0üeÿ¬ƒ”}R)÷ûßSŽüÇ3`v=Ù/àÙ®/ÕàÚ9j>šu°S¥GNc)EÎŒí(?pªÿ²ì7kã4M¯+ý’òO÷Žê;Áü™øÏóì‹4æöþþ^)y¼ø^8;¦,¾Âœb=œØNмBµª¿%²`uü é¨4<.à‡:ljÙܶ0FÂòòf–h@Ø¿u·Ó†˜ t+·Œ©‰uHɸHÊ?Íaì–òH¸€(ó ³Ë\p½]‘­>Ó®¬J†—òIغùt – =•(6Ó¨víΟÄñÕø–pI Æ³1Gˬºžö $3·Û²„$ òPs¬G9TvØ=Í›ÒkËýØ ‘|ˆ(ËÌté4ïòÀNÀQ>_JË$¨¹]¯Ë^ñ4[gˆGh š»,/ÅXívtÙ¸³2¿H“$ÙÍ8$XíîãÊœr7n¦†/K Ò5»ÕF´OIåQžûÐGÉ3ñl‘þ¥JïVÀú¦¶=ÝœÏgœÏg}÷«¸*ß6Ķ·ïéÁa¼ #¸Q7¾›¹ó~­cܲlÍm«ÓøÉ»Evð‹}]‘ßþ$Eêg!û”ôöµ·i=|b²Dk`÷Æï5»û¦dsd"„ú ¤7íÚâÆg#ÿ¤´Æ'$û­ë¸ÝžssÓÕǽ§Äµ 'IPwÔ*¬+${…Gy¦t€ ´åS•N¾¸Ï'™Áqûè÷/‡ÅyÕCJêIEND®B`‚Carla-2.4.2/resources/bitmaps/button_calf1_hover.png000066400000000000000000000030421420416754300225110ustar00rootroot00000000000000‰PNG  IHDRI}ý+ pHYs × ×B(›xtIMEÞ 8,ÃÁM6ÁIDATXÃÍ™ÑvÛ6 †?ÈNÛ´ëb—{œ½÷$÷iË–Ð  HÉNº®;SC™" à'¤ð§*OÀ|ž­|>_ì÷'à+LŸRÛ³ùdõGà€'{÷2Y‘TåѳX½je±¢Ö¾7+`¶ú œk½¾ÅÚOÀ«}+Öÿ[s«mSb$ 3 uLïù÷^9$¡GáßÈ£'Í<îÑð2ÊrHã]Žû x„£\ÿÖŸàüÿñ(€*ªUÕT¡¾*þgPÕöÍ›QTWPAQ~ÿë+hÅ€ÛíÆº,¨* ZÑS©M(H$/ÜÄ¢í‹Hý-*ø'E©s×61åPA©}2%U±_jUED JJ3S‰IA@¤”Éäþ¯¯ßBC®j˲pgtP]IŒUh*€¢ûÀTîh‚ú¥s DÕ¶0µgüïùH@«õðFPÐ6Á@U“¦Éc5÷­cK)1ÉÑíó¶Ü¸Ìs0)B¬ yúÏ—DIƒµÈ*²+SÊ‘ è(” $UcÓ»ðŠI ;zø/¥T?•Íí:ߘ¤{ösWŒ‘¡:‰³Þ-xæÅû<$*„6]ÈjÜTÌu~ŸGâ E’&á à|.Ìóuo ïòß ý&„Z7Ÿ’9¼c‘B»ï1,š«²hó—ãØRJìtÕܵñv»ñ#Ï=ÿñ0›/Ù/ðÖªß'Õá:8j}4ëÎJH¸ã¶F ÷žã'Ÿqªÿò s›àèÑk)…išÞ½çdþiçÑQý ˜¿ÿÓé”@JÈ===ÕMJß2çÛ”ÇWlÀI!ÖÉ}ÍF¨cSõø-±«ýß!¤­Òñ8G Ô¤k 04¨xPiÁšuºªÔ¥¨(15j¡cÀˆÅ|Ar®‡ªÃ$wÕÔCdÃÓß,pH©™[ÙÑû•R37¾›bsnj1f ,8Z#xôÔ!•áH"¢ž:[ßàEö Z»q6ù# .EI+urǽ¸O(§S5·µJ÷ ¡õWX:6 $šrÙ°ÙiŽ&aÔS §kß"jûÖ§N4~2 IcÔèJË‹ª&•’ÌÍŽJ9óñù9…èClÓ1¦’)7K6㑹«x¬®’HD^ØL&=5x ú-Ví5d$½ã[Ôîîc´dã̓I®pd&(çÂçù‹X­sÄB˜ˆ&ÏîUS%)!m)a½¾’áC²¶hoK®µnÖNòrƒ?“P»Ä»ÿL‚TìÄÖQ+Hv†UA2ä®—yt5SÓð?®:2XI8{÷1Ò,ßUÞÍ’„í©Cs;}ˆ© ݪ[®©IëHɸHÊ?Ý)ÍØ=呿@)§S=t[²¹ —ë…¼m™vÕªdx)„m˜Ï` ý®¤ÒÀÖÔ«§=ø“¶}u>¤W¸ÄPçÙˆ6G¯Y èФ%‡çÂuž›ÙIå¡îXïåPÙajÞ HÇ(Vø±H“wp²™q¦Õaàѯœrœ4j>Ï=HĨí©}J*ïå¹oú(yæ®F¼Ed˜ñ¸*±•wµ¿_wäò³Ç¹öû÷á#Ôˆï-iIEND®B`‚Carla-2.4.2/resources/bitmaps/button_calf2.png000066400000000000000000000027411420416754300213140ustar00rootroot00000000000000‰PNG  IHDRI}ý+ pHYs × ×B(›xtIMEÞ . zSMŠ€IDATXÃÅYKn$E}QSdÙƒdY–gËÒ{$À–[p`‰ [Öìç*Œçž0 UVWwg°Èøfe·4Â%Ù••߈‘/³i¼øžA€@DÕ*„úðGw¬kÚŽÖÉü¾&¬,Þ'= p}3³T1À,Õ½²Ë8fŸ£íge–éaÉ`"©"LIk–Q²w¤¶D}É»!gH“›áš~öî ‚hœfX0þJ?¢<'†‹wë<„íæ“Úk%’ÖÓ±¦cýç]’óÀ-ëÞ÷ëë^–ÚÀÞͼ$Ì+íÜ·ßýUÚÃá€ý~çÒ3w\þ9Í!€5(ȧxïª9ãæ 3¸zƒ*Ddj(aŒËÞ×|N·2]8•¿|ù«öaÔ©Ëá€e»eDTß것Ž+DL³£Õ¯•³¹F_*Ížrkï‹Á ØB‡ƒ f«¯ý(ÉÁ¨ºOÓl»rÔ¥`Ù-)ÚJ'ˆÄ%‰Ü3L8€ÌŠ.€y¶(Hæ#,àš%­)¸>µÛ™½ƒ˜2J!V8€P»˜Xú£!À˜çŠÒ(Xc¿?`»lAü„d/S°/ËÉÔâª8LkIÁÁ¢¤U_>ÈU· %[–mþàA"œÊg‘ùÁžª˜Â ,}ÅË*HêIRšç »íâÊ©Žm`Û…ì <¦äÞâQÚjÞE >§ZºbÑI —P²"âÚª„ëeÓ-€Æ¾ÿÝ“$ŽÚ6M3vû%(X4 šx·@õ„¸‰¢¼aD)x¥UQè^cÃýý=^ã¹»»3ÐFåEOó æb'TVf眎öÏßæ='úh캺ºzØÔíLóŒ7o†WèÔóš )ï´˜ôô4ãíÙÛ½Aö—î” ¡ó˜˜{K\_g ²!ûãAN =~$zò8€¿þòãjÝÍæA†‚'MpÑ(ÑåÝXÆ¿a¡}â¨YLÒq€J$¼¾¾y‘å} +ê(Ãk‹–ߎ®ñ÷f2• ¤yžq6ŽÑé’ôx )ÇxÕcë+Š\×€pªÌ6êä77·'Áùðûφâ%¶F¯+(À¡”Ôe€!{g)&kéüü<#`yU³YM¿ÆZBšÓ㇨lgI f-#ž–ÃÉ=,à{{ûþEžôµŸhdišpyyi®iÛA ò –¹OÊwq×ptq²6¦°ecV£–xVϽ¹m¶By&¹ ¥__Žè6öAzš±ì–°‡ý<‘¾+•Ó}¬©>Ör‚ÛëÃG<„‡??eÎÕe „t† ÆÞ”„+oìÔì€ÇÇϦËvé’¼Ì&G"»>’'QÛ²(æÚjLâ°=;f °´àý4O–%SLZ–¥‡H³äÿõäÃÂ×Zùîmå¤g74drY–çïú—8í…‡øÒÞ-qø\_·XïžÎ}H{krŒ°œÔåD_‰OxRïΧÑ+:z»`†¢5† é„•l?+6¦Q[PgÍ„2‚14{×D|ýþdâÕBm£žª++®Õ‹qÈ®4l%‘Æÿô¤o D Á‚OªgëRª7#imò»——²ìûÔFešf||øè¤ZÉÞêÎXLízð”¡ým„ØWnûÛhÀf³Ák?töî‡ÊdH1À®l ü§Ÿ:??Y½Í+—4oË‘°/ý d,@$jàæ ×þôÎ}í¼Ãù·ÊÛunõW·0Ìæ"L(vƺ‘Ñø\ÞâüN)¼åF æ"ܾ#‹ƒ¸#üS¶þ©‚϶í™ôÑIEND®B`‚Carla-2.4.2/resources/bitmaps/button_calf2_down.png000066400000000000000000000027631420416754300223470ustar00rootroot00000000000000‰PNG  IHDRI}ý+ pHYs × ×B(›xtIMEÞ 99·˜œ’IDATXÃÅY½Ž$E þÜ7wÒŠ½`µZ-Áðˆ å1È÷x r$â»#"%bn k4=Óe‚²]vuõìž„˜ ¦~쪲?»\®júüGf@ @C©I]èÃû¬NMÝõÁµAËT ¸6Pyò0àZ‚œ…Î…¶(àÙÕsg<¹òæ¼2žA…òJÁ ÍŽîKãÁR¹@÷í•HÿSrôdXûQ3_Oíüík‚µs³ïkLkÄuíŸXå‘fpí,³ãe0ó’®lJg7¯t´sñók€€ ;Ï3N§c•ž¹1×34°i²”Ô©vUÐ *•ÒOdj(`ŒË•לCö4Ñê¡þþý_^¬ž Ï3¦ÃQ”aQ)5hx :®à1ŽVZ g«9PêRaö@ˆÔ^‹Á ˜È–PÁlý…‚Œ¢û8&“Ñ@šsÆtœÌAÞV:@$.IT=ÄȬX0ÏÉ|„\ó¡ 59×§v;seSz)Äj; ;‰…ßéè FJÉä0N§‡ébç'${™œ}Y¦&Åa%x;‹’CõUὈªê¤d˲ÍïûR@¡ö)9ÇÜÄkЩ ²¼ÊÛæ=gx4vÝÜÜ\¤›Õ“S‹ÃE:÷»8H~»í÷ ¯^¾ê¥7ˆþÒ²I(Ï%ŸqŒ?{KÜÞF2¢!ùê»p•@犒ý5ÄÕõŠòÍïß/ÖÝíþÑ6Æq>j”èæÝX$Œ½ü†%è'ŽzŠÉqÜK@%ÞÞÞ·¸KÏÖ²¥£v²k÷Öø{7¯m·”^n6õ¶é“.9}îÒƒ‡}¼êe당¬É©b¶Q&¿»»? Ò·þ„aȵ#{ª÷ºŒ< r,ÜÇ5rÎØn·öF!M)áêê*"`窞fåøµ¬Åsz`•ív/øSËO;éz˜Ã÷þþc\âGîèÞh|Jãˆëëk;ºm;g=ÁbîÎ;¿k.› £1¹-ë÷µ‰gñÜ»ûf+ä'—!÷ûóê€.‘$oCö í¦ãäR¤zŸˆ~Uª÷–áym ms€>%ÐÑ‚áÝ›_cÎÕÍá㈖½ijYyc§fl·€?)] biL˜S7ÉëÀ,`²Od—Wò jK ‹bU[Iì¶gÇ Tw›ÔV‰&€E¯Og,-xïÓhn5NJ Ó4õi–ü¿~ñ²ð_­¼†{Û9¦d)ƒm·Q@z*#ê?â´ìâK3£ZŤ‹${ÎíÞÎëöÕd-ayî‹XË;¦= èxRïͧÑË;z»`†¢%† BÒáV°ë]±1Ú‚:k”ጡ§w9È,Oâ `(¯$ÿ´Pf£žª +.ÕóqÈž4lM"5öØMŸœ>ª$³àyS#Œê͈AZIõm¦ÊKQöÓ<7§—W€·ïÞÖ¤Z“½Å›±è {+b÷n AÒ^ •GO*ɱï`oõO¬ì4{OñþÑh÷V©mgïÀ@ïHü¹<x`°Ú÷ܼ'ë›­|Îõõд͎6Ž÷©î}'Zþ0 <.ð®QÂ_iè\!îwEAmþåDÏmhÊhÚ{/˸#Þ\wº â94üYÿgF'ZSÀìÉ©ÜÖVTîëì? ‰¡I*U…–ÆüQ%Z…ªnû …Ìû•Ƶ†vìϾ}h±9–eÁù|*Ò«òMXs` VUûJ¤ÒT@W($r»H¨% ëʸZhÃi%÷ŠÜ˸*¿}û Ï£»×º,˜'SF!"ù óÆ ã Œiíh¹¶q¶¢RXU£Wuo¯¦Pˆ*,d¨F{¦“JEÖ}šRÈ8úü[Öóiw„°­|@Ä\R¤xFHX±žm Jøˆ¸áC•ÖB®/ítÖB`¦d)Ìj€™\ ¢FO:²! H)嵉§Ûù¼à8!J~"6—…ì«Æ 2µ@4+Ž z*P²¨˜1\_ž RTEʦ¬ÆøäA&œË±ñ¡nƒ VŒ Fk^–R ±3H; ¥ §ã\”s+Ü7c–Å.ÀS©Ü[h=ª¦Z!±BÓ-‰ÕÉ W¡E0oW"À-åÐ@Ó2ÿ‹' <ÝvÀ4%œÎ3)˜ÍzÁS {O"–—þ¨@"¯Œ&!ò¼6¼zõ ãyùò%0|cždŠR‚êW¨lÂÎup¸—¾®‡÷<@ãk׋/> H±6ÀÍ2M)a·þÑÀÿÆóÿÉžÃ!a±ï¥7¨ý¥;d“P>”|ÖÿpºªAZQòû¯¿+[‰rùèè)—«íÇy«sBly~ü⇠߻»¿òv‡£Û4MÀ§ݼ›„±—ߨ¥ýÄÑ£˜…ã^j+áÕÕõãLïÛ‰Ùù7‚’·“J=ÞMA;:aJ ã豿Nº,š²ì÷Ò&žÙs¯oš©°¾'¸°WUÿÝûC·S,oà ±fºtH˜O3¥He?Qü¢Tî¹™B=·j78%ð¿ywÞüòksu3Aµ‡¡ÎÈÞ< ¬¼±S3noÏk$Ò”0çn’×ÙÀTNd·[òJÔ¶Cb+Úúš¤4=;f8MÒàR›ŠoŸ°´á}HSŽ„ O·”0Ïs‘†åõÔ›…Åù>ÜÛÆ)¥ìI §Ò{Ïú‡8í…ÒúÒž-)U·Ç-¾'¬wûÌ‹FÕ¦þ€¨ï{ZÚiFŸwOêù4z±£· û04ˆˆl1llP%”°ª]öŠiÜÒáY¡ 2†GïÈœnÄ `ŸO2H|´©¤§êÆŠ[õxŠ# Û“H_{b§ p ¡†O \ÏÖ¥\oE½H{W9›)òJ-ûyY(O²›†iJxýæuIª=ÙÛœ›€U¿–³"¥s[$ã¤0Γl,˘V4þÜÝÝá£=`_ªb@¹âòå èåjȯŒöT¾ð”ÊF7ø …)(WU@¹½ð /‹Ér@¹Nj¯–l϶¾³ýšÈ÷e3b/mg åŠÉiæ2^”5—³¨+ê…d1m*ƽÖ@ñÙÙc%|y{bcÛÚôˆówP,ÚFŽçu~®´G£;·ÐÁ———hhhFFF G?£££yyyRRR N H:°°®ŒŒŠ&U+\,\-]*Y'T #MGD H $O(W__^!O:@½½½ŸŸŸ'W-\ %QF>=A !J &Ulll JËËÌ´´¶´´´¶´´¶´¶´¶´´¶¶¶¶¶|||ÚÚÚËËË‹‹‹ Jèéèàâàààâàààššš I¾¿¾¥¥¦¥¥¥¦¦¥¦¥¥¥¦¦¥¦¥ttsN=²±²žžžžžžžžžžžoop M F 6;›œœ–––•––•–•–•– K€€xxxnooiiihihihihhiihhhiiijjkjjijighh C 2< A K"P,\,]-^+[ !O F@0 D L"Q%T+[-],]*Z'W$S BD§âÔ pHYs × ×B(›x¼IDAT(Ïc``ddbfaecçàäâæáåããçà—d -%-#+'¯ ¨¤,«¢ Djªjjªêê²jršZÚ :ºzú*** l  ¢ UŒT ôUUôML¤ÍÌ-,-,,­,¬mlll­íì¬í¬¬íÙµœ± v5ap“p÷À<½¼||ýüq€Ž@æ à 4,œ!B+2***:&6.6>!1)99%5-6..(˜žÁΙ•“““›”Î/(,**.)IË8ËÒ•PU]S][uuuõ ДŽÈjlš3Z€Ò­mmmí Ð:3º˜M»{z{z{ûú'ôNìíŸ8±¿wâÄÞ> ì4Y”ÁgÊÔiӦϘ1mÚ̳f©3§M›=}Ö¬sæÎ›Ï°`á¢Å0°ÎZºxÙâÅeËÙ#V¬\µÚÍšµëü×®[¿Ú݆ þë7nÚ¼f‹¿èV†m>>ÛwÌß¹K/6nwìÙ»/—k˃ ‡#L‹9zŒ÷ø‰¸Ý±@°gïÉS§ÏdxÍ?;šŽÚµªí/wIEND®B`‚Carla-2.4.2/resources/bitmaps/button_calf3_down.png000066400000000000000000000016261420416754300223450ustar00rootroot00000000000000‰PNG  IHDR­u}ö¤PLTE%ÿ/–ÿ5žÿ9¤ÿ=«ÿA±ÿE·ÿK½ÿMÂÿQÈÿSÈÿUÍÿWÎÿOÃÿM¾ÿI½ÿ=¦ÿ9Ÿÿ3˜ÿ/‘ÿ+ÿúúúüüüýýýûûûùùùþþþöööáááÆÆÆ7Ÿÿ1—ÿúùúúùùùùúùúùÁÁÁ5™ÿõõõòñòòòñòññòòòñòòñññññòñòñµ¶¶;¥ÿðððêêêêêé§§§3ÿ‹‹‹WWW===?«ÿ–––hhhGGG¡¡¡yyyRRR®®¬ŒŒŠSÌÿKÊÿEÈÿ?Çÿ7Îÿ1Ñÿâÿ ñÿ#Ýÿ3Ñÿ9ÉÿMËÿ__^¼¼¼ŸŸŸlllËËÌ´´¶´´´¶´´¶´¶´¶´´¶¶¶¶¶|||ÛÛÛËËËéêéàâàààâàààššš7£ÿÀÁÀ¥¥¦¥¥¥¦¦¥¦¥¥¥¦¦¥¦¥tts²²²žžžžžžžžžžžoop-ÿ”•••––•–•–•–)‰ÿxyytuulmmihhghhhhghghhgggghghgyÿE²ÿG¸ÿC²ÿmÿ'‚ÿQÄÿ#€ÿzq¥ƒ pHYs × ×B(›x˜IDAT(Ïc``ddbfaecçàäâæn.^>~6VA!aÒ"B¢bâb¢’¢¢’@JLTTLL\JJJZFVNž‘ITARRR„EA´’¤²¤¢‚¨¤‚ ³*ƒ¼œšº†ºº†¦º–¶Ž®–––Ž®¶žž¶ž¶–¶¾ƒ ¡` Ä&‚ ¦fæ8€…%3“•5`ci”¶µÃìÁº¹xœœ]\ÝÜ=<=½¼}\]|€‚~¬ Ýþ˜Ò@Á@°tP0„„†…†‡ADDD$D펎ÁÌ€v 1ÇÆÅÅŃ@HddJJNIMIMMKÏHÍLMÏÌLOÍÌLMÂÔ,9y¦ìœœÜ¼¼œœü¼‚| •—Ÿ“S˜[PWTÌÌÄP"TjepV¹U…•U  C¥|UuMm]}}ƒucCSC}CCµuc]c³u5“¤.Ä<ǽҶ—†wáçêi‹8cVM0Ò÷%ßøžvã‚fzO\1风Bn i“øV+íoÎzm«Æ]Û®Œ© .쫇ùò$œ{ŽË!ÕÄe#j††j6Œ,;@ÓéÎáʳð-µÃug]jûê“‘EeÚu vnt.SÈ<-Ê“0oÉ=WJSV•i“°ê(þ›7îéº{ùùo>åÿÅOW¥»‰:AIEND®B`‚Carla-2.4.2/resources/bitmaps/button_distrho-white.png000066400000000000000000000007151420416754300231160ustar00rootroot00000000000000‰PNG  IHDRn½¤° pHYsÄÄ•+IDAT(ϵÓMK[Q…áçÆ$%)¤´Z í ŽŠ"øï•Ž,HÁÒ_ƒ¢$"÷f7éÀ¦TJ¡ºFçl^^ΆuxFЧ×,õõ, éÁµaÔ€ó•M#Cw*-Ëú–œÅÅop6mèúcȈ„ìxëÆyLžÂ[Úñ‰\µ¦¥aªrò½ûøú œúñ‘ܱ싑–¼qÇäÃ8ÿ¹Vd›ÜÉ­Œ,³›/²›eFnåÙ΃, Ð7Žû\µìDÞ‰™BÓ¡3û¹ƒë»j€ž!ÖjØUi*5Uv5œZÇPon^t‹–‘ŽT:4Ñ´+uŒ´pkm‡:Cá›ÂL5ê,ÌgjÁã3RifÁLa–eY>ž-˜E*åÜü`ÅXeÉPÛ•ÒXW…sóµ>.m›:Ò2Q›h92µí}×sóÐëlÇ _ÚtæPGÃÔØÔ¦»d[ÇÉsÔ.¼#Žuìë©Õzöuâï\DýoÝxfëžÕç¿ù)ÿ/ß¿gº¾Â°ú¶IEND®B`‚Carla-2.4.2/resources/bitmaps/button_distrho_down-black.png000066400000000000000000000013371420416754300241020ustar00rootroot00000000000000‰PNG  IHDRójœ qPLTE                ‹‘GtRNS@æØfbKGDˆH pHYsÄÄ•+tIMEâ -8I´¥ïçIDATÓ­ËKaÅ–- …„Ý(¢h/ IJ,ÈwT›‚‚ÚdB~ßÜùÎüõÝqFQ—ÑYœ{øqá>€¿)±¶žÜX…›?jk‰*´Þ¶ˆgÍ"56•Öº“ñÅÎé®ñöâ˜u’›á‰M©ç yõ¢“˜–Œ”Ju¿zÒEøØú@íDS½Ÿzg@ó\ÓEhñ2ÂWâ´»®éºvw"Ü×úƒáÍ-Ð#ïâ™âŠê÷á&älÁœc6ŽOäóüŸ|yÕúö\¸Þ‘[ }éWœ*ø\}íWaô=Æêwñ6£,]¶IEND®B`‚Carla-2.4.2/resources/bitmaps/button_distrho_down-white.png000066400000000000000000000015401420416754300241420ustar00rootroot00000000000000‰PNG  IHDRójœ tPLTEêêêëëëììììììíììíììíììììììììëëëìììîíííììëëëñññîííëëëñññòññòòòòòòòòòòòòîîîëëëíììñññòòòóóóóóóðððîîîìììòòòóóóóóóóóóóóóóóóïïïíììòòòóóóôôôóóóóóóóóóóóóñññîííóóóóóóôôôóóóòòòóóóôôôòññîîîòòòóóóóóóòòòóóóòòòîîîòòòòññòññòòòòòòîîîóóóòòòòòòòñññññòññòòòòòòîîîóóóòòòòññòññòññòòòîîîóóóóóóóóóòòòïïïôôôôôôóóóóóóóóóóóóóóóñññóóóñññòòòóóóóóóñññóóóóóóóóóóóóóóóóóóíììîííîîîïïïðððñññòññòòòóóóôôô´è8'rtRNSs½áîâ½s^ää_~ý~\ì‡>+‰í\èÏ&'Ïèr"9³á"ìr¾†8ö÷Áö†¾â;¶ò)*ò;âîýãÂÂýîâ)*ò¶â¿‡ö÷Á÷ö8¿s#³á³9s&Ðè^ì‡>+‰í^~^ää_½îâ¾sµlJF pHYsÄÄ•+IDATÓÑ×SÂ@ðµ÷†±PFØ@Å‚b»X°÷Þ…$—ûòÏ ÃÀŒO|;;¿¹‡Ý=¢|RPXT\RZV^‘£•U±¸žLuM–Ö&Ð0ë3 ½>£ 1Ýp4JMRs‹ÅŒÖ´¶µëfGgª•œ¹ºwÇ G)n[¡^•³>Áý: mÐ;äÖh|Tð˜aùÈ?>A“?MÓ‚gÌY™‚s‰n>Hr ‚O¼,ÑòÊ*ù€5Á댇IÛØÜÚÞÙ¥0°'xŸq5BÊÁáÑ1ET *øÄÅá<sŸçé}.-àêúæVº»·m{í±,Ñ/Ç·V‘ï65C~cuÚ¨Ø÷eȆ‰ë¶µu&Ûè9VÙƒªÎxmkòɰ¡®«° ï0çìºvª7y(©u‰ž%™Oax3¾µ¢ébß§î•w|SÍ×ÐùßW×ra/&ÃéO©Žžà$¿Ò¸»Zôg¦¥ßALÕäÓq¡#‹µ˜Ù“;X]Y^ÚPñC>RÝcó¤ðRagp‹ˆAÈIEND®B`‚Carla-2.4.2/resources/bitmaps/button_edit_down-black.png000066400000000000000000000007511420416754300233520ustar00rootroot00000000000000‰PNG  IHDRójœ äPLTE‡šÓ¸tRNS@æØfbKGDˆH pHYsÄÄ•+tIMEâ &èòäH~IDATÓc` `dbÆ*ÎæâÂŽU‚Ë•›0¯›6aAw!TQ !áá!‰*,í"à çáé)¦_ÉÍÝÃÃÓËKM\Í$ê奎n¡6ƒž·——>·Õ{c÷ô0÷ôôôp·Â Û` ÛzxØa G'êÅÀ‹ ®4vIEND®B`‚Carla-2.4.2/resources/bitmaps/button_edit_down-white.png000066400000000000000000000010601420416754300234100ustar00rootroot00000000000000‰PNG  IHDRójœ çPLTEÿÿÿêééêêêêêêêêêêêêêêêêêêëëëëëëììììììììììììíììíììêêêîííîííîííîííêêêëëëìììîííîííîîîîîîêêêìììíììîííïïïïïïëëëìììïïïïïïìììíììïïïïïïíììîííîîîïïïððððððïïïîîîððððððîîîîííðððîíííììððððððíììïïïîííîîîîíííììîííîííîííîííëëëìììíììîííîîîïïïðððñññ¦™EtRNSŒí¸u$*¹ñTt÷âØ(1ùõɆÁ×´dÑèÂÆ×Þ:~„`~üôa[ùU¿%XýÜlËñ2®Õ@Ž] pHYsÄÄ•+žIDATÓ­ÑE1 Д™™™™™›&vzÿót²Ìdº¨T/¼xú²,›ÿ•Íîpºtv{(õú,òþÀ+²ð0c¢²Åâ<‘T8•Îl _P¸HKå Vk ׌ Í–âí—*D·§x0'o!¦3mÃùÂÈãreöµá›­Ùw{DàmÎQòI¿ÀàrÕùv<}Ê×ú¹–ÒÖÙæIEND®B`‚Carla-2.4.2/resources/bitmaps/button_edit_hover-black.png000066400000000000000000000012631420416754300235250ustar00rootroot00000000000000‰PNG  IHDRójœ ›PLTEœššœššœššœššœššœšš·­­¾²²¸®®²««¦¢¢œššœšš¨¤¤·¯¯º­­¹®®·ªª¬¨¨œššœšš®¨¨µ®®µ®®³¬¬ œššœššœšš°§§±¦¦¤  œššœšš¢ŸŸœššœšš¤ŸŸ¯¤¤®¥¥®¥¥¡žžœššœšš¼±±³¬¬››œšš žž¬¢¢­¥¥«¡¡ª¤¤››œššœšš¶¬¬»­­³ªªª¢¢®¨¨«££©¡¡§ŸŸŸœœœššŸ·­­¸®®´­­¯¤¤­§§ª¤¤¨  §¡¡¦   ¤  µ««´ªª°§§­¥¥¨¢¢§¡¡§¡¡¢ŸŸœššœšš¤  ­§§«¥¥§££¦  ©¡¡§ŸŸª¢¢¦  œššœšš¤ŸŸ©¡¡ª¢¢¬¢¢ª¢¢žœœ¤ŸŸ«££­¢¢°©©¤ŸŸœšš¦¢¢®¨¨®¥¥¯¦¦±ªª¶¯¯œšš©££±¨¨±¦¦³§§¶ªª¶¯¯œšš­¥¥µ««·ªª¨¢¢œšš››³ªª·­­«§§œššœššœššGytRNS@æØfbKGDˆH pHYsÄÄ•+tIMEâ &*Yù l‘IDATÓc` `cçàÄ&ÎÇ/ („E\TL\›zY99lÂjê¨:º@ÂÐÈØUØÂÒÊÚFÝÖÎM¿³‹«›»‡§—7š¸Ÿ@ GPppH(ªxdTtLl\œg|†S’S<íRÓÒ1Ä3³lm³Ýr0Äó ‹ŠÅK0ÄËÊ+*«ª1½Z[WU-š[Z©[-[ë!ŸåIEND®B`‚Carla-2.4.2/resources/bitmaps/button_edit_hover-white.png000066400000000000000000000015761420416754300236000ustar00rootroot00000000000000‰PNG  IHDRójœ ¡PLTEÿÿÿcbbcbbcbbcbbcbbcbbcbbHDDA==GCCMJJYWWcbbcbbWUUHEEE@@FBBHCCSQQcbbcbbQNNJGGJGGLII_]]cbbcbbcbbOKKNII[YYcbbcbb][[cbbcbb[XXPKKQMMQMM^\\cbbcbbC??LIIbaacbb_^^SNNRNNTOOURRbaacbbcbbIEED??LHHUQQQNNTPPVRRXTT`^^cbb`__HDDGCCKHHPKKROOURRWSSXUUYVV_]][YYJFFKGGOKKRNNWTTXUUXUU][[cbbcbb[YYROOTQQXVVYVVVRRXTTUQQYVVcbbcbb[XXVRRUQQSNNUQQa``[XXTPPRMMOLL[XXcbbYWWQNNQMMPLLNKKIFFcbbVSSNJJNIILGGIDDIFFcbbRNNJFFHCCWTTcbbbaaLHHHDDTRRcbbcbbcbb™'™å‹tRNS *G7# ¿óÙ¯n( sÚúúô–$¯öùíZAéùq Zzöøôi <ã»NZÝø÷æP+ÁúÖ¢ä÷÷îbSÞùùø÷÷÷÷Þieèùø÷÷öê) gµ¸ž´ööòŸ,&šõ÷÷¿S•õ÷Ûn"˜ö÷øøêB¨øøøùÞ:½ùózOÓç†4@6™àø pHYsÄÄ•+ìIDATÓc` 02221³°²±3ÂL˜™ƒ“‹›‡]˜_@PHXDM˜QŒU\BRJZYÄ‘•“WPPTBVVáUeTS×ÐÔÒÖAÖÕÓ70426153·@¶´²¶±µÓ´wptrFfwqus÷ðôòöñõcC²RÍ? 0(Ø+$44,<É‘QÑ1±qñ Þ‰IÉìw«¦ð*'§¦y;¤gdf©!¼–Ù9öö¹yù(ÂŒ–…EÅ%¥’eå¨ÂŒÉ•UÕ5µuhÂÉõ 5MÍhÂŒL-­mí¼ŒèÂŒ]‘P’”_,ªY¿d%IEND®B`‚Carla-2.4.2/resources/bitmaps/button_file-black.png000066400000000000000000000004331420416754300223120ustar00rootroot00000000000000‰PNG  IHDRn½¤°bKGDÿ‡Ì¿ pHYsÄÄ•+tIMEâ .Àþ‡^¬IDAT(Ïí’M 1 …_n‡z½ÿÔ#ˆ›¢øƒC¡ NÓºq:Eë  Á…Éæ%ù ¼à[Á!&(f{(ÒqCUôjì¢If§v$VtNÁ [l"XÈf4K:…V#øXV¦ªÒeW~DîK¦½¹3¯í‚– éZ/¼Ë½!h±Æà-0¶­ø'wþÃéGXŸuýe {äHÁCøgX] ”Éí ¿7»r2¸H†…ÒIEND®B`‚Carla-2.4.2/resources/bitmaps/button_file-white.png000066400000000000000000000003601420416754300223550ustar00rootroot00000000000000‰PNG  IHDRn½¤° pHYsÄÄ•+¢IDAT(ÏíÏ¿ 1 ð¯^‡‚›¨ÅMßÀ{ÿ]ÔG—¢(¢‚ië çÅ3øgÐɯKšü -𭘲à!\m¶§B6èV¹Ók1iÒˆú<§½† VX œñã,çíÊVCŒ“•‡qàIˆ)玆k±O9Vy‚¯<,Ð~ 6‚«Û |Ÿ?–!Q›£Q„ÑpBî"=bßr¨Ûý'OýA.Ïí18f°èIEND®B`‚Carla-2.4.2/resources/bitmaps/button_file_down-black.png000066400000000000000000000005671420416754300233510ustar00rootroot00000000000000‰PNG  IHDRójœ cPLTE  KÅ*¦tRNS@æØfbKGDˆH pHYsÄÄ•+tIMEâ .(.æHIDATÓµÎÝ †áéÔucnü´´…ÝÿU®Ó˜žê{ø„”¯ë~ÖáØ÷'í\ós^¬Û»T<[çÞ¿–¼¸€ˆáV°õ€‘ˆ"B(ØŒÌÂL öYRJ„$I9gõØpÎëªN³¨ª7L/þzý¾ÝðgIó¥î&­x £1ÓdÌ8tÿnï³eG¯îmIEND®B`‚Carla-2.4.2/resources/bitmaps/button_file_down-white.png000066400000000000000000000005601420416754300234060ustar00rootroot00000000000000‰PNG  IHDRójœ fPLTEëëëìììíììîííîíííììîîîîííïïïîîîïïïîîîðððòññòòòôôôõõõìììíììîííîîîïïïðððñññòññòòòóóóôôôõõõööö÷öö÷÷÷øøøÆNÿtRNSúúúú¢­·Âúúúúúú§trF pHYsÄÄ•+’IDATÓ­ÑÙƒ …a[»/ŠU–fßÿ%Û4šÞù_~!pšf³vû¶=HÇSÁ¯qÒfí|ÉyÔÆº5{½e<€ˆîž±¶€žˆ<‚ËØ8ôÌ™XîîX>Ïsï^ûû^òþŸPŸþò#˜l˜#Á÷Ï÷Áþ¨¨þÁ÷ÏÏ÷Á#˜l˜#òžPPžþò^ûû^ïïs>Xî>s: ££ :bïbZ™„Û pHYsÄÄ•+ÿIDATÓ‘GSÃ0…Ó{ï5„@(¦Cè½JB¯ 6²výÿ3ŠuÈ —¼Ë¾ùfõôF(MeŽS^„**ªrùj€šZ ëê¿›š=¿¥µ­=×ÑYÀ]ÎwÞóE %|¯»'Zïíó„D$B”ý6ep(Àá‘Xl4N4–ˆèø„@Jþ¹$3MN:=ãKrw5Ÿ íü@^0x‘ãRh—WâUƒS¯­¿±IJ…Ù[Èj{'º3±Ë*¾·px„||b žžé³„R"ñù…­})‰u-=ÒW|}#R·™,s6sçÒýƒMy|xf~x}+zÜ÷ôg‰_õ~¯ó:´Þ•óIEND®B`‚Carla-2.4.2/resources/bitmaps/button_gui_hover-black.png000066400000000000000000000015411420416754300233630ustar00rootroot00000000000000‰PNG  IHDRójœ éPLTEœššœššœššœššœšš©££¯¤¤®££§ŸŸœššœšš§¡¡Ÿœœœššœšš§ŸŸ©¡¡¨  ¥žžž››¤ŸŸœššžœœ­§§±¦¦«¥¥¢ŸŸ¢ŸŸ¤ŸŸ¢››¢››Ÿšš ¥žž§££ššœšš¢ŸŸ°¥¥¬¢¢§ŸŸ£œœ ™™ž——œ––›••§¡¡Ÿœœ¦  §žž——š””˜””••‘‘——Ÿššœšš¤™““•‘‘–“““‘“ŽŽ™““œ™™œššœšš¢ŸŸ¦  ¡˜˜––’’œššœšš“ŒŒ’œ——ž››°§§®¥¥ ™™š””•œšš‹‹‹‹”ŽŽ ™™¥žžœšš´ªª®¨¨§¡¡Ÿ——š••–““œššŒŒ”§ŸŸŒŒ¥žž¤ŸŸ›••••‘‘“މ‰‘ŒŒ›––ššŸ¢››œ––—‘‘““•’’”‘‹‹—‘‘¥  ¥žžŸ˜˜–’’’ŽŽ‘š””ž››¡žž­¥¥¨  ¢——˜””•‘‘¢ª¤¤¬¤¤¦  Ÿœœž››œ””š””›––œ——Ÿšš¢››£žž››¥¡¡¡šš¡ššŸšššš¡œœ¤ŸŸ¨¢¢£žžÎFH¡tRNS@æØfbKGDˆH pHYsÄÄ•+tIMEâ /0†*ñIDATÓc` °²±s  q1¿€ AˆŠKHJIËÈÊÊÉ+( (Á…ÕÔ54µ´utuu´µ4õà†²FÆ&¦ff¦&ÆæS¬´­MmlmíìL¢nî:ž †¯Ÿ‡?T00H#8$ˆ ‰Š3cãâ“ Â)¾©‰ ñPÕiÕé@ÕPc2ƒ³²s@ŒÜ¼üì„Å%¥eå•UÕée5ÑÚºú†ÔƦ¦ÆÔ†æ¸p[{GgbWCwwCWbg\¸·¯ÂÄIY!“§L6}”Y@<{Nð\ 5-p,\¸ˆª’d>†RIEND®B`‚Carla-2.4.2/resources/bitmaps/button_gui_hover-white.png000066400000000000000000000020631420416754300234270ustar00rootroot00000000000000‰PNG  IHDRójœ ìPLTEcbbcbbcbbcbbcbbVSSPKKQLLXTTcbbcbbXUU`^^cbbcbbXTTVRRWSSZVVa__[XXcbba``ROONIITQQ][[][[[XX]YY]YY`]]_]]ZVVXVVb``cbb][[OJJSNNXTT\XX_[[a]]c__d``XUU`^^YVVXSSb^^eaagddjffjggb^^`]]cbb[WWfbbjggiggliinkklhhfbbcaacbbcbb][[YVV^YYieeiffcbbcbbliiollmiic``a__OKKQMM_[[eaajffcbbpmmokkkgg_[[ZVVcbbKGGQNNXUU`[[ebbiggcbbollkhhXTTollZVV[XXd``jffjggljjqmmnjjdaab```__]YYc__hddliiljjjhhkhhnkkpmmhddZWWZVV`\\iffmjjnkkeaaa__^\\RNNWSS]ZZb^^gddjgg]ZZURRSOOYVV`^^a__c^^eaadaac```]]]YY\YYbaaZXX^ZZ^ZZ`]]b``^[[[XXWTT\YYGôFÚ¤tRNS(G¡òñ ,‚Y1Ì÷÷ËYP¬ùㄘðöð˜„ã¬P`òø÷ööõõõñ_õõõôôôóñôÇ‘Çóóð_:lÄöô¦/¥óóÃlÝõõôß>ÞóóòÜLùøöõôË2ÊóöòÛÄôó¦¥òóÂl_ñôóóÅ‘‘Åòïôõóòòòœ_ñöõôóóï¬÷℘îî—ƒáõ«PÊõÊY ð `C€ú pHYsÄÄ•+=IDATÓc` ™˜Ñ„˜YXÙØ98YX˜á‚\Ü<¼|ü‚BÂü|"¢Ü\Q1q I)iY99yE%Ae1°°ªšº†¦–¶Ž®žž®Ž¶–¾*Ô2C#9cS3ss3S K˜ÅVÖ:6f¶vvöŽfNÎV`AW7w]O/oo_?Ï€@W °kP°fHhX8Ð"±ðˆÈ¨ÐèW pl\|BbRr HgJª_ZRbB,Du:BuPu¦+Äì¬ìœ\Ùyù9…E`³.).)-+¯¨¬ª®É(¯…ºèîºú†ÐÆ´¦ææ¦´Æ–V¨»UÛÚ;:»’º{z»“ºz‹U¡aÒ×?aâ¤ÉÙ¡S¦N›>cæ,1XÎáãŸ37d?ßü°„†÷ÂE‹£„7ÎØ! ƒOéÏõÆ~IEND®B`‚Carla-2.4.2/resources/bitmaps/button_off.png000066400000000000000000000010721420416754300210730ustar00rootroot00000000000000‰PNG  IHDRójœ ÆPLTEÿÿÿ^RW„•!!pW‹z‚§%%jf¦%%±''}KŽ ³((r•!!¬&&f’ ¯''kˆq£$$jT“!!##rUi¢$$¯''˜""‰n##a„ $$^pyЧ%%·))³((Å,,Æ,,º))À++Â++Ä++¾**»))±''Ã++òn³4tRNSD9•úr ¯sŽúY2õùm†¡¸üFÄó"Áú0 uWà% ÇÐD8ëû¹“Gß$“Ý$Tp*gD pHYs.#.#x¥?vÚIDATÓ­ÑÙ‚0 и *ˆ¸ (®¸+ –B©àÿÿ”0¶¢>Û—Ü93™´)ÀO© ¾åÒVªB n7¨ ÕJ¡bœª‹on",É9ËFM®-%l«œ;j;TZŒ»ée%c€‰ºŒû±6à<Ðâ>ã!ÕGYÉ.0Òéñ˜>gbÐ1‹Ó{2ãVA]‚bj”pPoT>VAc‰hVy[\aw¦}KiOIeMv¥}~¯…Y|^5J8[~_ejek²†QqUi“ozªIeMh‘m}®ƒLjP`†f\€aPpTt¢zKiO‹£k<æ<ޝ# ŠÌÉ3NLD ÆÖô†góÀb>÷©Å;m'º/Wëõjyûýzw"‚1AáÆýÜÕvçÑ$¡Þnû³Ùýáx<ìÿùWðêß9Ú‹]IEND®B`‚Carla-2.4.2/resources/bitmaps/canvas/000077500000000000000000000000001420416754300174735ustar00rootroot00000000000000Carla-2.4.2/resources/bitmaps/canvas/frame_node_header.png000066400000000000000000000001741420416754300236120ustar00rootroot00000000000000‰PNG  IHDR•p#· pHYsaa¨?§i.IDAT×cTd€&œ –ÿ0ÆO Æ/ã/ŒÁH„9Œ ˜"fƒC ÆÜ{\[wÇIEND®B`‚Carla-2.4.2/resources/bitmaps/canvas/frame_port_bg.png000066400000000000000000000001771420416754300230140ustar00rootroot00000000000000‰PNG  IHDR–¼#¼ pHYsaa¨?§i1IDAT×cÔb`````bÀM±ü‡Pÿ Ô/õBýA‘û¢ „ËÂÂÀÀÀÀT¹X¦†ìtIEND®B`‚Carla-2.4.2/resources/bitmaps/carla_about.xcf000066400000000000000000000627371420416754300212150ustar00rootroot00000000000000gimp xcf fileeBB G gimp-commentCreated with GIMPgimp-image-grid(style solid) (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000)) (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000)) (xspacing 13.000000) (yspacing 13.000000) (spacing-unit inches) (xoffset 0.000000) (yoffset 0.000000) (offset-unit inches) ¶ *----- Carla Plugin Host -----ÿ      ˆgimp-text-layerl(text "----- Carla Plugin Host -----") (font "Free Chancery Medium Italic") (font-size 24.000000) (font-size-unit pixels) (hinting yes) (antialias yes) (language "en-us") (base-direction ltr) (color (color-rgb 1.000000 1.000000 1.000000)) (justify center) (letter-spacing 0.500000) (box-mode fixed) (box-width 274.000000) (box-height 42.000000) (box-unit pixels)  *, ã ï û*L5ø é ° €ÿ €ÿ €ÿ=ü eÂ:ûI·c/8ûx˜:ü„ž:üVÕ:üõF;ü˜Ð:üüpþ ((û ((þþ ((û ((þþ ((þühÿ-ó Äÿÿv Äÿÿvó Äÿÿv Äÿÿvú Äÿÿvü´ú;ýÙå<ýóæ<üîÿ;üÅÿ€ýJ5öPÿÿ=8e¬|6øYÑ÷å´f € €ÿ €ÿ €ÿ\ü9ú žú®8ûÊ-ý-ûìð© üϤõJ¶õµÅßšúIÜÿ„üLÿQôJ¥Hþ»Qÿ¾úLGÿü•õ økÌLÿ~ýèõú• …ýܹò7ü9ŠÿAôÖþÜü"ÿ~î­ùÈû &ÿ}"ÿì@Ãöô×{cÓ íqaÿBù@Ãöô×{øéÚ ûÇø¥Ô aÿê —¦–ÿ&m»ÿíÂÌð3œü ÷ —¦–ÿ&óðØDÿŠŠ¿ýœüë—â ¾æ4 þÏ×Ë÷—â ¾æô´^‚ÿÓ¯¤Fý×Ë÷ü~ û¨ü8ÿqüÿ÷ü~ û¨ þ ûÀþ,üÿ÷wÿ$Fÿiümÿ.üMÿT÷wÿ$Fÿi üøÏüMÿTñ¾õÿ*®êï‰ÿ¾õÿ* ü<ÿ’ü‰ÿòêèïï€Kð¨ïÄù qŽ êèïï€K üzÿYëÄù  òÿÁ¸/ÔÿÆ89ÿeðéÿßQòÿÁ¸/ÔÿÆ8 ù¹ÿ! ëéÿß©¦ÑaÒe~ÿ"üŸ¯÷¦ÑaÒeõdûùôòîèÛ¦FûŸ¯ ý™sï €ÿ €ÿ €ÿCü9ú žú®8ûÊ-:ýϤülKô s¬ÊöÿQüNÿ¼øX®%ÿýõ ü¸&øDþ(ÎÞþ¹þø±îþœþ~þ'øèØQÿZýBø5ÂgŽô2¸ñþÿè ‘€÷jª3ªœ øâ›’ÿò4 £ÿæÿ[óq¹qRPË/1ÙÿMöPÏÿ™“óÿn ú *îÿÿö@*µ«Uúægå ”ÊVüTÿ¬ÀClÿ* üÿ‰þ–øèp–µ÷ã‹ôˆý©Å÷Kÿ‘ ¢ç üVÿ4þÊø/ÿ<×tòXÿ7EÿK逸ƒöÛ¥ü›Ôòùpÿ%ÿAòžú«þ-ÿ>ø¼¾ÿm üé.ç1ÿqŽ ¯æ zÞÿIˆÎæ&£ëÒípÿD“òKÿ8  ü‘TüeÿQíëþÎL¯ÿàƒ öÿ–œý–í´ÿñŸ7ÿD€ÿd˜úCœªÒVý˜ÿøÁ¹™%øÄúlHÿZü°½7õû ¶ÿånúäé»0ý¹Ü ÷&¼7„ÿýªyüº²&#üA¤ýÁÔ þþ$üV£ü úˆ4üGüüpÒ4ö½ÿ™M1K–¯5÷XÅïöÝ¡?¬ €ÿ €ÿ €ÿEý :û*Âþ[9üC :ü6ó:üà±;üOÿjü‘ !ü¥ÿ#ýÕÒ"ýëÝüÿ”"ýÿ—ùf»ñÐ/ôVÂñÁHÿW"ýÿPøOÏm2¬ÿ¹ö°›3y’]þÿÿüþ³ýÿ÷_ó2ÿÀüˆÿü²æ"þØüô„üÿ‰û½ÿ¶üì© þ ((þþ ((û ((þþ ü‡ÿüEÿFú3áÿñYü'ÿl ú Äÿÿvó Äÿÿv Äÿÿvý hüÕíô²¿ ÿÈùbÿ/ þ0îöíYõ/ ƒqÿùœÿ†L ê, ßÿŠ1zÃ05ÿÓ!'µ€úÈÿÝÂ,!õ¯‚AJãðµOù¬÷Þž5ûpÔe#ôÿôÿôÿhþ ((û ((þôÄÿÿv Äÿÿvn‰D "_6 LADSPA ...ÿ     /`gimp-text-layerD(text "LADSPA\nDSSI") (font "DejaVu Sans Bold") (font-size 19.000000) (font-size-unit pixels) (hinting yes) (autohint yes) (antialias yes) (language "en-us") (base-direction ltr) (color (color-rgb 0.000000 0.000000 0.000000)) (justify center) (box-mode fixed) (box-width 95.000000) (box-height 54.000000) (box-unit pixels) 6_6Nù_6bÚÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿ ÿÿþÿÿÿÿ ÿ ÿÿþÿÿÿÿ ÿ ÿÿÿÿÿÿ ÿ ÿÿÿÿ ÿ ÿÿÿÿÿ ÿ ÿ ÿ ÿÿ ÿ ÿ ÿÿ ÿ ÿ] ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿAÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿ ÿÿþÿÿÿÿ ÿ ÿÿþÿÿÿÿ ÿ ÿÿÿÿÿÿ ÿ ÿÿÿÿ ÿ ÿÿÿÿÿ ÿ ÿ ÿ ÿÿ ÿ ÿ ÿÿ ÿ ÿ] ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿAÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿ ÿÿþÿÿÿÿ ÿ ÿÿþÿÿÿÿ ÿ ÿÿÿÿÿÿ ÿ ÿÿÿÿ ÿ ÿÿÿÿÿ ÿ ÿ ÿ ÿÿ ÿ ÿ ÿÿ ÿ ÿ] ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿAÿþtýïÿÿþªÿù÷íÞµx õ{ÉéùçÒ¦t ÿþtþUÿÿý÷ÿýãYýáÿÿþ ÿþtþ³ÿÿþfÿú³tŽ´úÿÿþjþ¢ÿÿøºˆ‰ªéÿ ÿþt÷ûÿÿÚÿÿÃÿþtó(Íÿÿóßÿÿ«üD ÿþtönÿÿðHÿÿþ!ÿþtó%÷ÿÿàÿÿÁÿþtöÌÿÿ¡èÿÿÿþtø¯ÿÿ¾„ÿÿúù¹ƒ? ÿþtþ)ÿÿùK–ÿÿÜÿþt÷‡ÿÿê$øÿÿýìf ÿþtø‡ÿÿïAÿÿþ:ÿþtû‰ÿÿéü)¯öÿÿþ< ÿþtóâÿÿŸèÿÿ˜ÿþtû°ÿÿ½û E‚Üÿÿþ› ÿþtþCÿÿýîÿþtú$÷ÿÿû´ÿÿì ÿþtþ ÿ ÿþSÿþtô&Êÿÿò¨BûµÿÿÕ ÿþãÌÌú óÿÿÓ¨¨ûìÿÿ±ÿú³t³úÿÿþhÿúß®‰ŠÀÿÿþ– ÿþ\ÿÿþ?ø‰ÿÿúÿÿýàVÿýÚ ÿú¹ÿÿÞþ+ÿÿümÿÿùøíÞµu õ1tµÖíùáÃn \ÿù÷íÞµx õ{ÉéùçÒ¦tõ{ÉéùçÒ¦tÿýãYýáÿÿúáÿÿþÿú³tŽ´úÿÿþjþ¢ÿÿõºˆ‰ªéÿ¢ÿÿøºˆ‰ªéÿÿþtó(Íÿÿóßÿÿ«öD ßÿÿ«üD ÿþtó%÷ÿÿàÿÿÁúàÿÿÁÿþtø¯ÿÿ¾„ÿÿúù¹ƒ?þ„ÿÿúù¹ƒ?ÿþt÷‡ÿÿê$øÿÿýìfý$øÿÿýìfÿþtû‰ÿÿéü)¯öÿÿþ<ü)¯öÿÿþ<ÿþtû°ÿÿ½û E‚Üÿÿþ›û E‚Üÿÿþ›ÿþtú$÷ÿÿû´ÿÿìû´ÿÿìÿþtô&Êÿÿò¨BöµÿÿÕ¨BûµÿÿÕÿú³t³úÿÿþhÿúß®‰ŠÀÿÿõ–ÿÿß®‰ŠÀÿÿþ–ÿýàVÿûÚÿÿýÚÿùøíÞµu õ1tµÖíùáÃn õ1tµÖíùáÃn @| ÿÿ ÿÿ ÿÿ ÿÿþÿÿ ÿÿþÿÿÿÿþÿÿÿþÿÿ ÿþÿÿþÿÿ ÿþÿÿÿÿ ÿÿ ÿÿ ÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿª| ÿÿ ÿÿ ÿÿ ÿÿþÿÿ ÿÿþÿÿÿÿþÿÿÿþÿÿ ÿþÿÿþÿÿ ÿþÿÿÿÿ ÿÿ ÿÿ ÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿª| ÿÿ ÿÿ ÿÿ ÿÿþÿÿ ÿÿþÿÿÿÿþÿÿÿþÿÿ ÿþÿÿþÿÿ ÿþÿÿÿÿ ÿÿ ÿÿ ÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿª|ÿûîΖýïÿÿþª ÿýùHþUÿÿý÷ÿó³ty¸ùÿÿë³ÿÿþfÿþtþjÿÿõDûÿÿÚÿÿÃÿþtþÿÿôgnÿÿðHÿÿþ!ÿþtþjÿÿôCÌÿÿ¡èÿÿÿõ³ty·øÿÿë)ÿÿùK–ÿÿÜÿõùE‡ÿÿïAÿÿþ:ÿîìÍ“âÿÿŸèÿÿ˜ÿþtþCÿÿýîÿþtþ ÿ ÿþSÿþtú óÿÿÓ¨¨ûìÿÿ±ÿþtþ\ÿÿþ?ú‰ÿÿúÿþtú¹ÿÿÞþ+ÿÿþmÿþtÿþtÿþtÿþtÿþtÿþtÿþtÿþtÿþtÿþtÿþtÿþtÿþtÿþt©/´6 New Layerÿ     ^,·´6ÓeÇeÓ´6ë4ÛNVEýcÒÿ6ÿþOÿ9ÿþ¢ÿ:ÿþVÿ;ÿýÿ<ÿý~ÿ<ÿýÒÿ<ÿþÿ=ÿþÿÿþcOOþŸÿÿþÂOOþÅÿÿþsLLKùfÿÿ‹[ÿÿþL99þÿÿýúC887þuÿ ÿýè6332ù‡ÿýA1ÿÿþL998þÿÿþu665ý>øÿ ÿý‘2110ùÞÿ·//ÿÿþJ776þÿÿþÅ443þ¨ÿ ÿüO00//øSÿÿi.-ÿÿýI655ý4ŒÿÿþI221þ_ÿ ÿþÒ..-ø˜ÿø;1,ÿÿüG4433þ‹ÿÿý†100ü/2èÿ ÿþ{,,+ý0ðÿÿýåÿÿþE221þ‹ÿÿüÜ//..ý-ÿ ÿý=+**ý)`ÿÿþÿÿþC00/þ‰ÿÿüR--,,þKÿ ÿþ·))(þ¯ÿÿþÿÿþC..ý-ˆÿÿþ—++*þÑÿÿþe''&ý5ûÿÿþÿÿüA--,,þ‡ÿÿýð.))(þwÿÿýõ.%%$þoÿÿþÿÿþ?++*þ…ÿÿþ^''&ý8ýÿÿü$$##þÈÿÿþÿÿþ=))(þ…ÿÿþ«%%$þ´ÿÿþO""!þ>ÿÿþÿÿþ<''&þ„ÿÿüû2$##ý"aÿÿýä"  þ€ÿÿýñÿÿý:&%%ý$ƒÿ ÿüm""!!ý(óÿÿü„þáÿÿüÈ6ÿÿü8$$##þÿ ÿþÆ  þ—ÿÿþ<þIÿÿû ÿÿþ7""!þ€ÿ ÿþ9þJÿÿþËþ–ÿÿýøXþÿÿþ5  þ€ÿ ÿþ|ýßÿÿýkü óÿÿýîCýÿÿþ4þÿ ÿýÝþ}ÿÿûý*þVÿÿýà5þÿÿý3þ~ÿ ÿþEý3ÿÿþ­ø­ÿÿú7ýÿÿþ0þ|ÿ ÿü’úÄÿÿUú%ýÿÿmýÿÿþ/þ|ÿ ÿûñúcÿóùhÿÿÁþÿÿþ.þ{ÿ ÿþSü"û‘ùÉÿÿMý ÿÿý,ýzÿ ÿþªý¤?ú1ÿÿÛ   þÿÿü*þmÜ Üûîÿý!ý;  ú zÿÿsþÿÿþ(úBÿÿd    ýãÿ ÿþÿÿþ' úâÿÇ    þ?ÿ ÿþÿÿþ&   úwÿÿ+  þ‘ÿ ÿþÿÿý$     ù*ÿÿwýõÿ ÿþÿÿü"   ûÄÿàþMÿ ÿþÿÿþ  û]ÿÿ8þ­ÿ ÿþÿÿþûûÿýÿ ÿþÿÿý;#""! úºÿõ&þrÿ ÿþÿ=ÿýÕÿ<ÿý’ÿ<ÿ=ÿþVÿ;ÿþ¹ÿ:ÿþOÿ9ÿýcÒÿ6ÿ@EýcÒÿ6ÿþOÿ9ÿþ¢ÿ:ÿþVÿ;ÿýÿ<ÿý~ÿ<ÿýÒÿ<ÿþÿ=ÿþÿÿþl[[þ¥ÿÿþÅ[[ýYÈÿÿþzVVUùnÿÿ‘dÿÿþUEEþ•ÿÿüúNDCCýB{ÿ ÿûêA>>==ùÿýK;ÿÿþUEEDþ•ÿÿý~BAA@ýIøÿ ÿþ–<<;ø:ßÿº99ÿÿþUCCBþ”ÿÿþÈ??>þ­ÿ ÿüW::99÷8]ÿÿp77ÿÿüSAA@@þ’ÿÿþR==<þgÿ ÿüÕ88776øÿøD:5ÿÿüQ??>>ý=‘ÿÿüŠ;;::ü9<êÿ ÿý€655ü49ðÿÿýçÿÿýO=<<;þÿÿýÞ9887þ”ÿ ÿýE4332þgÿÿþÿÿþM::9þÿÿþZ665þSÿ ÿý»2110þ²ÿÿþÿÿþL887þÿÿþ›443þÒÿÿþl//.ý<ûÿÿþÿÿþI665þŒÿÿûð72211ý0|ÿÿýõ6--,þsÿÿþÿÿþG443þ‹ÿÿýd0//.ý?ýÿÿþ ++*þÊÿÿþÿÿüE2211ý0‰ÿÿþ®--,þ·ÿÿþV))(þCÿÿþÿÿýC0//.þˆÿÿýû8++*þeÿÿýå)''&þ…ÿÿýñÿÿýB.--,þ‡ÿ ÿür))((ý.óÿÿþˆ%%$ý%áÿÿüÊ<ÿÿþ@++*þ…ÿ ÿüÇ''&&%þšÿÿþB##"þMÿÿû&ÿÿþ=))(þ…ÿ ÿþ?$$#þPÿÿþÍ!! ý—ÿÿùø[ÿÿþ;''&þƒÿ ÿþ€""!ý"áÿÿüoý%óÿÿüîHþÿÿü9%%$$ý#ÿ ÿûß! ý€ÿÿûý-ýYÿÿûà:þÿÿý8#""ý!€ÿ ÿýIþ9ÿÿü°ø®ÿÿú9ý"ÿÿý6!  þ€ÿ ÿþ•úÅÿÿX÷)ýÿÿoý"ÿÿþ4þÿ ÿýñ úfÿóøkÿÿÁýÿÿþ1þ~ÿ ÿüVû%û’ùËÿÿPþÿÿþ0þ|ÿ ÿü«ý¥Aù3ÿÿÜþÿÿü.þoÜ Üûîÿý%ý>ù{ÿÿuþÿÿü,úDÿÿe ýãÿ ÿþÿÿý*ûâÿÇ   þAÿ ÿþÿÿþ( úzÿÿ,    þ“ÿ ÿþÿÿþ'   ú+ÿÿy  ýõÿ ÿþÿÿþ$      ûÄÿâ þMÿ ÿþÿÿþ"    û]ÿÿ8ý­ÿ ÿþÿÿü ùûÿþÿ ÿþÿÿý<$##"! ûºÿõ&þrÿ ÿþÿ=ÿýÕÿ<ÿý’ÿ<ÿ=ÿþVÿ;ÿþ¹ÿ:ÿþOÿ9ÿýcÒÿ6ÿ@EýcÒÿ6ÿþOÿ9ÿþ¢ÿ:ÿþVÿ;ÿýÿ<ÿý~ÿ<ÿýÒÿ<ÿþÿ=ÿþÿÿþl[[þ¥ÿÿþÅ[[ýYÈÿÿþzVVUùnÿÿ‘dÿÿþUEEþ•ÿÿüúNDCCýB{ÿ ÿûêA>>==ùÿýK;ÿÿþUEEDþ•ÿÿý~BAA@ýIøÿ ÿþ–<<;ø:ßÿº99ÿÿþUCCBþ”ÿÿþÈ??>þ­ÿ ÿüW::99÷8]ÿÿp77ÿÿüSAA@@þ’ÿÿþR==<þgÿ ÿüÕ88776øÿøD:5ÿÿüQ??>>ý=‘ÿÿüŠ;;::ü9<êÿ ÿý€655ü49ðÿÿýçÿÿýO=<<;þÿÿýÞ9887þ”ÿ ÿýE4332þgÿÿþÿÿþM::9þÿÿþZ665þSÿ ÿý»2110þ²ÿÿþÿÿþL887þÿÿþ›443þÒÿÿþl//.ý<ûÿÿþÿÿþI665þŒÿÿûð72211ý0|ÿÿýõ6--,þsÿÿþÿÿþG443þ‹ÿÿýd0//.ý?ýÿÿþ ++*þÊÿÿþÿÿüE2211ý0‰ÿÿþ®--,þ·ÿÿþV))(þCÿÿþÿÿýC0//.þˆÿÿýû8++*þeÿÿýå)''&þ…ÿÿýñÿÿýB.--,þ‡ÿ ÿür))((ý.óÿÿþˆ%%$ý%áÿÿüÊ<ÿÿþ@++*þ…ÿ ÿüÇ''&&%þšÿÿþB##"þMÿÿû&ÿÿþ=))(þ…ÿ ÿþ?$$#þPÿÿþÍ!! ý—ÿÿùø[ÿÿþ;''&þƒÿ ÿþ€""!ý"áÿÿüoý%óÿÿüîHþÿÿü9%%$$ý#ÿ ÿûß! ý€ÿÿûý-ýYÿÿûà:þÿÿý8#""ý!€ÿ ÿýIþ9ÿÿü°ø®ÿÿú9ý"ÿÿý6!  þ€ÿ ÿþ•úÅÿÿX÷)ýÿÿoý"ÿÿþ4þÿ ÿýñ úfÿóøkÿÿÁýÿÿþ1þ~ÿ ÿüVû%û’ùËÿÿPþÿÿþ0þ|ÿ ÿü«ý¥Aù3ÿÿÜþÿÿü.þoÜ Üûîÿý%ý>ù{ÿÿuþÿÿü,úDÿÿe ýãÿ ÿþÿÿý*ûâÿÇ   þAÿ ÿþÿÿþ( úzÿÿ,    þ“ÿ ÿþÿÿþ'   ú+ÿÿy  ýõÿ ÿþÿÿþ$      ûÄÿâ þMÿ ÿþÿÿþ"    û]ÿÿ8ý­ÿ ÿþÿÿü ùûÿþÿ ÿþÿÿý<$##"! ûºÿõ&þrÿ ÿþÿ=ÿýÕÿ<ÿý’ÿ<ÿ=ÿþVÿ;ÿþ¹ÿ:ÿþOÿ9ÿýcÒÿ6ÿ@û3{¯ÌÈ5Èú޵…¥™6™ü.Ì”™9™û Ëf™:™ü“™;™ý6È™<™ý}Ÿ™<™ý°¥™<™þÏ™=™þÈ™™þßììþ½™™þ®ììþ­™™þÔììùÛ™™ÆáÈ™™þïÿÿþÆ™™ý›öÿÿþÔ™ ™ý ýÿÿùÈ™™óÿÈ™™þïÿÿþÆ™™þÒÿÿý÷›™ ™þÃÿÿøþ£™²ÿÿÈ™™þïÿÿþÆ™™þ­ÿÿþ¸™ ™þèÿÿøã™™×ÿÿÈ™™þïÿÿþÆ™™þîÿÿþÞ™ ™þ§ÿÿø¾™›òûÿÈ™™þïÿÿþÆ™™þÈÿÿýü ™ ™þÌÿÿýú™™ý¡È™™þïÿÿþÆ™™ý¤þÿÿþ™ ™þñÿÿþÙ™™þÈ™™þïÿÿþÆ™™þäÿÿþè™ ™þ±ÿÿþ´™™þÈ™™þïÿÿþÆ™™þ¾ÿÿþ§™™þÖÿÿýôš™™þÈ™™þïÿÿþÆ™™ýûÿÿþÍ™™ýœøÿÿþÏ™™þÈ™™þïÿÿþÆ™™þÚÿÿþñ™™þºÿÿþª™™þÈ™™þïÿÿþÆ™™þµÿÿþ±™™þßÿÿþë™™þÈ™™þïÿÿþÆ™™ýšôÿÿþ×™™ý¡ýÿÿþÅ™™ýÈ™™þïÿÿþÆ™ ™þÐÿÿýùœ™™þÄÿÿýý¢™™ü©íÈ™™þïÿÿþÆ™ ™þ«ÿÿþ»™™þéÿÿþá™™û¿ûÿÈ™™þïÿÿþÆ™ ™þëÿÿþá™™þ¨ÿÿþ»™™ý›×ÿÿþÈ™™þïÿÿþÆ™ ™þÆÿÿýý¢™™þÎÿÿýùœ™™ýâÿÿþÈ™™þïÿÿþÆ™ ™ý¢þÿÿþÅ™™þóÿÿþ×™™ý¡êÿÿþÈ™™þïÿÿþÆ™ ™þâÿÿþë™™þ²ÿÿú²™™šéÿÿý÷È™™þïÿÿþÆ™ ™þ¼ÿÿûª™™×ÿÿþò™™þËÿÿýöÈ™™þïÿÿþÆ™ ™ýùÿÿûÏ™œùÿÿúÍ™™«ýÿÿþÈ™™þïÿÿþÆ™ ™þØÿÿüôš¼ÿÿû¨™™ÙÿÿþÈ™™þïÿÿþÆ™ ™þ²ÿÿý´áÿÿúé™™£ýÿÿþÈ™™þïÿÿþË£ £û™™óÿÿýâýÿÿûÙ™ÆööþÈ™™þïÿÿûß™™Îÿ ÿýý ™ ™þÈ™™þïÿÿûý¡™©ÿ ÿþß™ ™þÈ™™þïÿÿûÄ™™éÿ ÿþ¹™ ™þÈ™™þïÿÿûê™™Äÿ ÿýø›™ ™þÈ™™þïÿÿû©™¡ýÿ ÿþÕ™ ™þÈ™™þïÿÿûÏ™™ßÿ ÿþ¯™ ™þÈ™™þïÿÿû󚙺ÿ ÿþð™ ™þÈ™™þßììû«™›éììþÄ™ ™þÌ™=™ý°¤™<™ý}¹™<™ý6°™<™ü“™;™û ˇ™:™ü.Ì”™9™ú޵…¥™6™û3{¯ÌÈ5ÈüHbst"tÿýÒ} ûH„¤Š…"… ÿþO ûd¢8þþüÿ ÿþ¹ ûy€þþüÿ ÿþVû|w" ÿ û|w" ÿþdû|w" ÿþÒû|w!ÿû|wùÿ½£n…Ñÿ ÿû|xö¶ ‘Œ110XÌÿÿû|wù¤£˜‹‰//ý6¸ÿÿû|w%ù™•އ…‡--ý3×ÿÿ÷|wûøùøúúýûúûûüüûýþþüüöÿÑÁ»·µ¶£,++þNÿÿé|wesw{€‚ˆŒ•™¢¦«¯³ÒþÄÊÊûÌ»¾i))þÂÿÿé|w%R{ƒ‡‹”˜œ¡–- ð 1\ºÊɼ–…‹ÿÿ}''þgÿÿû|wô7ƒ‡ŠŽ“—›Ÿ© óšÊ¿zgn€‰ÿÿá(%%þJÿÿü|wõH‹‰’–›ž±ê ö=³Î›}ˆ‰‰Œÿÿú7$##:ÿÿû|wô hŠŒ‘•™£Åÿú2¨Í™…ŠŠö“ÿÿä%""!Dÿÿû|wô'‹”™œ¡¬ÜÿòŽÂÂ0‡ŠŠ‹™ÿÿ[  þgÿÿû|xõJŒ“—œ¡£¾ðñ\°ËQ$h†žú\þ±ÿÿû|wôj‘’–›Ÿ¤¥Ìÿû›Ï‰ú/]›KþNÿÿû|wò †“–𣧬ÞÿûxƳEýý,Õÿÿû|wõ*“•˜¢¦ªµñû$¼È|ý.Öÿÿû|wôW•˜œ¡¥ª®Éü÷¤É¬øÿÿý1Ýÿÿû|wé{—›Ÿ¤©¬¶Ýÿ„¾Æ3M¹¿Ìÿý6åÿ ÿû|w ê(—šŸ£¨«¯Àó£Ó`Š•¥òü\óÿ ÿû|w êPŸ¢¦«¯²Ò³Ä‘'Š˜•Ãÿþÿ ÿû|w ôz ¡¥ª®³·¼·Oöœ“§Ýÿ''þnÿÿû|w õ¢¤©®²·»‚ö‘¡˜Œ·îþZÿÿû|w ö=›¤¨¬±¶¬#ö”¥–‹¯æÿ   þYÿÿû|x ÷m¢§¬°¿Bö™ª£›•Ž›Ì   þXÿÿû|w ù –¦«´vö¯¨¢›”‰þbÿÿû|w ø0¤­ö£¶®˜‰…‡‰ÿ ÿû|w ùR‚D öœ¯# 2ÿ ÿû|xüû"'ÿû|w"ÿû|x"ÿû|w"ÿû|x"ÿû|w"ÿû|w"ÿû|wåþæéé ÿþÕû|wæüåçñòòýöüÿ ÿþ’û|wþåææåý¬jÿ ÿ û{wûåæååææý–ÿ ÿþVüq"üåæåææý—ÿ ÿþ¹ ûV ~qvvúp™çååææý—ÿ ÿþO ü&e‹––ú“«ïååææý—ÿÿýÒ þ00ú.€ëæåææþ—üMÔäææþ—1úÄØãæåææý™71úµ×áæåææýÆÏ2ûµÕßçææè4üÊÓØÛÛüG`rs"sÿýÒ} ûI„¤‹……þ†… … ÿþO ûc£8þþ ÿþ¹ ûx€þþ ÿþVû|x" ÿ û|w" ÿþdû|w" ÿþÒû|w!ÿû|xùÿɲu‹Ôÿ ÿû|wûı£;;ý`Ïÿÿû|wù¶µª¢›99ü8@»ÿÿû|w%÷¬¨ š˜š7766ý=Øÿÿ÷|wþúûúûûüþýüüþþþÿþþöÿÙÍÇÃÁ±544þUÿÿé|x“—›¢¦©®±µ¹½ÁÅÉàüÕÛÚÛÛûÝÉÁo221þÄÿÿé|w !7j–ž¡¥©¬±´¸«=/$î ,?lËÛÚά—™ÿÿ‚0//þlÿÿé|w Kž¡¤¨¬¯³·· î «ÚÑ„’›ÿÿâ0--þQÿÿü|wò ]¦£§«¯³·Åï öMÄß­šš›žÿÿþ=++þ@ÿÿû|wó €¤§ª®²µºÔÿúF¹Þ©˜œœú£ÿÿä,))þIÿÿû|wó8˜¥©­±´¸Áåÿù¢ÔÒ?™œœûªÿÿ`''ý&lÿÿû|wó _¦¨¬°³¸ºÎôòoÂÜ_2y™¡¯úa%%$þ´ÿÿû|wó ‚««¯³·»¼Úÿó®à—! =n¬O##"þRÿÿû|wò «®±µº¾Âæÿû‹ØÄRú %!!ü 1Öÿÿû|wó <®®±µ¹¼ÀÉôû9ÎÙ‹ü ü2Öÿÿû|xó l®°´¸¼ÀÄ×ý÷¶Ú½ùÿÿü5ßÿÿû|xè”°³·»¿ÂÊæÿ—ÏÖ@^ÅÉÓÿý8åÿ ÿû|wè :°²¶º¾ÂÅÒ÷¶ån,œ§³ôü^óÿ ÿû|xè d·µº½ÁÅÈßÂØ¢3&œ«¦Ìÿþžÿ ÿû|w ò ¸¸¼ÀÄÈËÐÉ^ö'Ÿ¯¥µâÿ**)þpÿÿû|x ó "§¹¼¿ÃÇËÎ’ ö(¢³«žÂñþ]ÿÿû|x ô O´»¾ÂÆÊ¿/ö(¦¸°¨ž»êÿþZÿÿû|w ö ¹½ÁÅÕQô)«¼µ®§Ÿ©Ó  ý Yÿÿû|w ÷ ­½Áʇõ*¯Â»´­§ ›ýcÿÿû|w ø A¼Ä²$ö*´ÉÁªš˜˜›ÿ ÿû|w ù e˜Tö)­À¡0 '@ÿ ÿû|wû õ/3*ÿ ÿû|wû ú  ÿû|w"ÿû|w"ÿû|w"ÿû|w"ÿû|w"ÿû|wý!&& ÿþÕû|xýxˆˆþ‡ÿ ÿþ’û|w!þÿ ÿ û{x ýÿ ÿþVüpŽ!!ý ÿ ÿþ¹ ûT ~qvvüwk ý ÿ ÿþO ü&eŒ––ü— ý ÿÿýÒ ü0100ü1 ý þþú ý <ý=þ~üKevwwþxwwþxw wþxwwÿýÒ} ûLˆ¨Ž‰"‰ ÿþO óh¦;þú ÿþ¹ ó|„ò ÿþVû€{" ÿ û€{" ÿþdû€{" ÿþÒû{!ÿû€{ùÿѽu‹Ôÿ ÿû€{û̼¯ª;;ý`Ïÿÿû€{ùÁ¿¶®©§99ü8@»ÿÿû€{*÷¹´¬¦¤¦7766ý=Øÿÿö€{ÿûüüýüüýýüýýþüýýþþþÿþþöÿÞÔÏÊÉÉ»544þUÿÿé€{›©¬¯³µ¹¼¿ÃÅÉÌÏÑÕ×çýßååûæÒÁo221þÄÿÿé€{"*9O‚¯¶¸¼¾ÂÅÈË»SE:5î"5BT~ÖåäÚ¼«©©ÿÿ‚0//þlÿÿé€{" c¶¸»½ÁÄÇÊÃ#î# ¹äܤ“˜¢§ÿÿâ0--þQÿÿü€{ò#""t¾º¾ÀÄÆÊÕò ú`Ï麠§§þªÿÿþ=++þ@ÿÿû€{ó"2˜»½¿ÃÆÈÌàÿú[Æè¶¥¨¨ú¯ÿÿä,))þIÿÿû€{óP°¼¿ÂÆÈËÒìÿù¯ÞÝ*R¥¨¨ûµÿÿ`''ý&lÿÿû€{ó"w½¾ÂÅÇÊÍÛ÷òÎæp Gˆ¥­»úa%%$þ´ÿÿû€{ó &™ÁÀÄÇÉÍÎäÿó»ê¥7"+Q~·O##"þRÿÿû€{ò+ 3·ÁÃÆÉÌÏÓíÿûšâÏdú#! );!!ü 1Öÿÿû€{ó#"SÄÃÅÈÌÎÑ×øûNÙã™ü"#"ü2Öÿÿû€{ó#'‚ÃÅÈËÎÑÔâþ÷ÃäÈ úÿÿü5ßÿÿû€{è7ªÄÇÊÍÐÓÙíþ¦ÚàTqÍÑÚÿý8åÿ ÿû€{è#QÅÆÉÍÏÒÕÞùÃîAª³½õü^óÿ ÿû{è"zÌÉÌÎÒÕ×èÌã¯H<ª·²Òÿþžÿ ÿû€{ ò#¦ËËÎÑÔ×ÚÝÖoö<­»±¿æÿ**)þpÿÿû€{ ó":»ÌÎÐÓ×ÙÜ¡"ö=¯¿·«Éòþ]ÿÿû€{ #öeÇÎÏÒÖÙÌDö>´Ã¼´«ÃìÿþZÿÿû€{ ö!%–ÍÏÒÔâdô?¸ÈÁº³«´Ù  ý Yÿÿû€{ ö#2ÀÏÑÚ˜õ?¼ÍÆÀ¹³¬§ýcÿÿû€{ ø$WÎÕÁ;ö@ÀÔÌ·¨¥¥§ÿ ÿû€{ ù$zªi-ö?ºÌ®F%-=Tÿ ÿû€{û"%2'õ)DHAÿ ÿû€{û#"!ú#"!! ý"#ÿ ÿû€{"ÿû€{"ÿû€{"ÿû€{"ÿû€{"ÿû€{û" &=AA ÿþÕû€{"ü 1ƒ’’ ÿþ’û€{þ!""ý!ýÿ ÿ û|þ!" "ýÿ ÿþVüt%ü!"!""ý ÿ ÿþ¹ ûY¤‚uzzú{n!"!" "ý ÿ ÿþO û)i™ššù›“/"!!""ý ÿÿýÒ ü 4544ù5#""!""ý ö   ü û !""ý 0ú!"!""ý1ú!"!""ý2ü ""4ü  ÈûË®{3 ü(¤áé"é™ú¥ŸµŽ ý*îÿ$ÿ ™ü”Ì.ú­ÿÿÌ—–!– ™ü‡Ë ûñÿÇ#" ™ý“û÷ÿƒ" ™ý°6û÷ÿ" ™ý„}û÷ÿ" ™ý¥°û÷ÿ!þ ™ ™þÏû÷ÿù™íÕɨ™ ™þÈû÷ÿýcýÿÿý᪙™þÈû÷ÿù ‘ÿÿþþÿÿýø±™™þÈû÷ÿû”ÿÿþÿÿýù¦™™þÈù÷ÿ3da aþXþGaaú^ÿÿþÿÿþå™™þÈú÷ÿÉÿÿþàýæÿ ÿü®Ôþÿÿþ­™™þÈû÷ÿuÿÿþþÿ ÿþzþ£ÿÿþþÿÿ™þÉÿÿþÕ™™þÈõ÷ÿ|A‹œ¾þÿþÿÿú÷®’:úNŽ˜©ßÿÿ™ý¢ýÿÿþå™™þÈü÷ÿ‚ûiÿþÿÿýúv þ‡ÿÿ™þñÿÿþî™™þÈû÷ÿü†ÿþÿÿýå-ý¸ÿÿ™ý¡ýÿÿþç™™þÈû÷ÿûÉÿÿþÿÿûþÿ¬ù\ÿÿúÿþÿÿ™þÙÿÿþÑ™™þÈû÷ÿû,ëÿþÿÿüþÿeòëÿÜvôÿÿþÿÿš×ÿÿþ±™™þÈû÷ÿýpúÿÿûþÿø0ó´ÿþMTÕÿÿþÿàÿÿþÞ™™þÈû÷ÿû¹ÿþÿÿûþÿÑõiÿÿžqðÿÿýó¥™™þÈû÷ÿýóÿÿýü‰úçÿà.ü_Ôÿÿý𥙙þÈû÷ÿûJÿÿþÿÿòé=Ÿÿþ{ÿýí¢™™þÈû÷ÿû‰ÿÿþÿÿðþÿ½ IõÿƳ° ÿýé ™ ™þÈû÷ÿû¿ÿþÿÿðþÿÿÒÿû!ÿÿùSüÿÔœ™ ™þÈû÷ÿý?êÿÿõþÿý¯ÿÿd «ÿÿýµþ·™ ™þÈû÷ÿ ý…üÿÿ÷þÿÿ¼ «ÿÿûgïïþÉ™™þÈû÷ÿ ü¿ÿþÿÿñðA «ÿÿþÿÿSÿÿþÓ™™þÈû÷ÿ ûæÿþÿÿþþ”ý «ÿÿúþÿù|ÿÿþÓ™™þÈû÷ÿ ûDÿÿþÿÿýæ ý «ÿÿûþÿüÅÿÿþÓ™™þÈû÷ÿ ýŠÿÿþCý «ÿÿöþÍ™™þÈû÷ÿ øËÿþÿÿœú «ÿþþÿÿ™þÈû÷ÿ ùF÷þÿÚý «ÿÿ™þÈû÷ÿûvÿÿXõ ±ÿÿâNCT‚µ™ ™þÈû÷ÿû<3úY‘ŽAý ™ ™þÈû÷ÿ"™þÈû÷ÿ"™þÈû÷ÿ"™þÈû÷ÿ"™þÈû÷ÿ"™þÌû÷ÿüWùÿÿ ™ý¤°û÷ÿú{ÿÿþÿÿ ™ý¹}û÷ÿú¨ÿÿþÿÿ ™ý°6ûøÿúÃÿÿþÿÿýñe™ ™ý“ûÚÿ†û ØÿþÿÿýñN™ ™ü‡Ë úlÿÒcWXXúW]íÿþÿÿýñO™ ™ü”Ì.ýÿÿþþÿ ÿýñO™™ú¥¹µŽ ü ûÿÿþþÿÿýñOÈÈûË®{3ýý½ÿ ÿýñO0ú°ÿÿþÿÿýòc1ú œÿÿþÿÿýýè2ú{ÿÿþÿÿ4üeüÿÿ/tûr^C….…û‹¡}3þ(ûU§Cþ(û"¨Z/ü§_/ü§_ÿþþÿÿûÿ÷óÿõ§`ÞÀ²¤Ÿ ¡¢¢ñ£ªµÅÕòÿÿÅÉÎÿû§`‘ŽŽësTB;;CToŒ”–™£ºËǸ»Âÿø§_Š…R ô*f‹”šŸ¦¯µ½ÿú§`Ž( öd‘›¡©°·ÿù§_‹ ÷;£ª²ÿû§`¹ éɹž…Ž ¦¯¯Š¯ºÀÅËÐÔÚÚÜÜÛÛõÚáì§`¥õ è=è±R•¢«yFYp𡍰¸ÁÉ͵»ÈÊÊòÉÓâ§_…±çêÿÒ3øÎ _ZŸªM šž§®·¾Æß7t¯ÉÊÉÓá§_‘ž±Óäîúÿê6øé¥,KZ:™¥¬µ½Å×KérËÉÓá§_œ­½ÌÛëó÷úþÿû6ùÝ'õ•›£«³ºÂÔÿâjÒÓâ§`¦¸ËÝíõõööôîîùÿ1ÿgõ˜™ ©±¹ÁÓÿñ²Õà§_®ÂÖêõööôõöòßÌÊÑ­ç^ÿõ‘˜Ÿ§¯·¾ÓÿñZÏÕ§_²ÈÝñöõööõõêÓ½§•™»ÌÖÿõ“•¥®¶½Ðÿý ø§_½Îàóööóõí×Á«–ˆ†Œ¥·íõ•›£«´ºÏÿ ÷§_Q¦íûøööåõìÖÀª•Љ‰ˆŽ Ýÿ’™¢©²¸Íÿ ÷§_uÐõõöåõæÑ»§“‰ŠŠ‰‹“œØÿ‰‘˜ §°·Ìÿ ü§_à`ªÕäìÞÉ´¡Ž‰ŠŠ‰Œ•ž«åŒ–ž§®¶Êÿ ü§`ö @o¦°œŠ‰ŠŠïŽ– ¨Ç½‡•œ¤¬³Èÿ ü§` æ9iŠ‰ŠŠ‘™¢«Ä·†‹“›£ª±Æÿ ü§` é1‡Š‰‹”¥­Ã°…‰‘˜Ÿ©°Åÿ ü§_ëEŠŠ˜¡¨±¿ƒ‡˜Ÿ¦­Äÿ ü§_ë'•œ¤¬±v†Ž•¥¬Ãÿ ü§_ë>‡’™¡ª¸]€…Œ”›£ªÂÿ û§_ÿ êv~‘—Ÿª°@‚Š‘™¢¨¹ÿ ø§_¢Óÿÿåÿ¾‘—ž¦Žÿÿ±ky‰‘˜Ÿ¨­Üÿÿþô§_Šˆ“´ÄÑÚ×ÕÕáÆµ£Ž”’Ž@ž”‚nmy€‡˜¡¨±¶ÅØÞÞûê§_HWahpu}„†ytnhaR:ë 01577=@ELQUZ_dlpuwŒí§_  ýü§_/ü§_/ü§_/ü§_/ü§_/ü§_/ü§_ééýã»ý$%%ý&ò§_ûûüÕQ4……ýˆVô§_lloa02'ù§_&' ,ô§`ƒ|{zB'øFªOýýqvvûsš)ý)‘––û—‰<ý00þ/0 0ú/.#üôÿöK5 ýúçåíêÄý æüçÇS ý ÛûܹG ý /sûr^A……þ†……†…þ†……ûŒ¢}3.ûT¨C.û!©Z/ü¨`/ü¨`ÿþþÿÿûÿùøÿõ¨`ã˾²®¯±²²ò¸ÀÎÝõÿÿÕÙÞÿä¨`¢ž  †eRJKSdž¥¦«´ÈÖÔÊÎÕÿö¨`œ—cñ 8yœ¦¬³¹ÁÈÏÿø¨`Ÿ7  ï +t£­´»ÃËÿù¨`™ ö J¡°¶½Åÿû¨`Ä éÐÁ©• ²¸Á»°ÂÊÏÕÙÝâæçéèççöëò¨`²÷ åGòÀ‘f§µ½‹cxг·¾ÆÌÔÚÝÆÎÚÛÚÛÛòÚáë¨`—½ìîÿÑ>þÚ°sn²½W´¶½ÃËÑØí#EƒÁÚÛÚáê¨`£¯ÀÝëòûÿÎ Cþñ³;ZiD$²´»ÂÊÐ×åU ‚ÜÛáê¨`¬½ÌÙåòøûüþÿö Cÿæ3õ#¯³ºÁÈÎÕáÿÛ  {ãáë¨`¶ÈØçôúúûüúôóúÿ=ÿq õ!±±·¿ÆÍÓáÿâ Ãäê¨`½ÏáòúûûúúûøêÙÕÚµíhÿõ «°¶½ÅËÒàÿá iÝߨ`ÂÕç÷üûúûúúûñßË·§©ÆÔÜÿõ!­®´»ÃÊÐÞÿò  ¨`ÍÛêùûûþúûûôôâÏ»§š™ž²Ãðõ%©­³ºÁÈÎÞÿæ ¨`_µöÿþûûúûûúôáκ§››îšŸ°äÿ"ª«±¹ÀÇÌÜÿ ب` &€ØûúûüûúîÝʸ¤›œœ›¥®àÿ%¤ª±·½ÅËÛÿ ب` #l³ÛêóéÖIJ ›œœ›ž§°¼ì"¦¨®µ½ÄÉÙÿ ü¨`Þ KzµÀ­œ›œœ›Ÿ©²»Ô¿#¢¦­´»ÂÈØÿ ü¨`á *Gz£œ›œœ¢¬´½Ò¾"¡¥¬²¹ÀÇÖÿ ü¨`ã  ?˜œ›¦¯·ÀÓ¸# £ª°·¿ÅÕÿ ü¨` è Vœ¡ª³»ÄÏ• Ÿ¡©°¶½ÃÔÿ ü¨` ê5“Ÿ¦®¶¿Ä†#œ §­´»ÂÓÿ ü¨`ëN™¤«´¼Ëm œŸ¥¬³¹ÀÒÿ û¨`ÿ ꆣ©±¼ÄO*›£ª±¸¿Ìÿ ø¨`°ÙÿÿåÿÈ¡£©°¸¡+ ÿÿ¾‡•›¢ª°¶¾Ãæÿÿþô¨`œ›¤ÀÍØàÝÜÜáÏÁ± ¦¥ “P³ªœŒŠ•›¢ª°¸¾ÆË׿êêøÓ¨`WgryˆŽ•–“Œ†€yqaI)GHKMMRUY`chnrv}€…‡æ¨` #&''&$!  ú ú¨`  ý  þ   þü¨`/ü¨`/ü¨`/ü¨`/ü¨`/ü¨`&&þü–¦§§ý Uò¨`‡‡ˆN‘¬ÊÌÌúκ‰g ò¨`˜–•””û–˜‘jò¨`a_lŒ•˜—˜ ˜þnó§_¢ÍÊÊɱ•˜ ˜û—šy?øD«O™¡  üŸ˜—˜ ˜ú—˜€^tvvùsŒ›)——˜ü™~”––ù—‰<˜˜ü™˜—˜ ˜û—˜[*00ø.#’‹‹üŒ‡Ž˜ ˜ú™Zùþþø%„˜˜ú—™“P ù»™—˜˜ú—™ŒEû ˜ ˜û™Ž;ù—’‘‘û’‰,wþxw wüxwxwwùxwwxwxw wþxwwûubF‰.‰û¥8þ þþüøY«Gùü÷üø%¬^/ü«c/ü«c ÿûÿüúþô«cèÑǼ¸¹»»¼¼òÁÉÕâöÿÿÞâæÿä«c®««¬“ud]]euª±³·ÀÐÝÜÔØßÿö«c¨¤t0  ñ$M‡¨²¸¾ÅÍÔÚÿø«c«K ##"#ó"@„°¹ÀÇÎÕÿù«c¦'&"ö%]­»ÁÉÑÿû«cË êÖÊ´¢­¾ÄÍÆ°ÂÑØÜàäæêííïîîõíðõ«c»ø çZöÊŸx³ÀÉœ}‘¢ÇÊÐÕÚßãçÑÙäååòäéñ«c¤ÆïñÿÑQÿ༃¾Éh3ÉÉÎÔÙÞãô84Z“Ìäåäéð«c®ºÊãïöüÿÎ$Vÿö½P4m{V<ÈÈÍÒØÝâíf!4’æäéð«c¸ÈÕáìöüýýÿÿö"VÿëH õ;ÅÇÌÑÖÜáéÿí#""Œíéñ«cÁÑàíøþþðÿýøõûÿQÿ"$#""õ9ÇÅÊÐÖÛßéÿâ!$Ïìð«cÈØèöþÿþÿþÿüïáÛß½ñxÿõ8ÂÄÉÏÕÚÞéÿá!{æå«cËÝîûÿþÿþÿþþ÷æÔ²´ÎÙàÿõ9ÃÃÈÎÓÙÝèÿñ"%.&«cÖãïýþÿÿóþùèׯ³¦¥ª¼Êñõ=ÀÂÈÌÒ×Üçÿó#!«cq¿ûÿÿùþøç×ų§§ï«»èÿ:ÀÀÆËÑÖÛæÿ ÷«c""<ŽßþþÿåþóãÒ𧨨§©±ºåÿ=»¿ÅÉÏÔÙåÿ Ø«c## 9{¼áðøïÞͽ¬§¨¨§ª³¼Çï.:½½ÃÉÏÔØäÿ ü«c#ó/^ˆ©À˸¨§¨¨ï«µ¾ÇÜÄ;º½ÂÇÌÒ×ãÿ ü«cá#"*@Z‰®¨§¨¨¯¸ÀÈÛÆ:¹»ÁÆËÑÖâÿ ü«cã#""!!#(T¥¨§©²»ÃËÜÂ;¸º¿ÄÊÐÕáÿ ü«c è#"!g¨¨­¶¾ÇÏÙ 8·¸¿ÄÊÏÔàÿ ü«c êIŸ«²ºÂËÏ•;µ·½ÃÈÍÓßÿ ü«cë`¥°·¿È×&8µ¶¼ÁÇÌÑßÿ û«cÿ ꓯµ½ÇÏb&B³´ºÀÅËÐÚÿ ø«cºÞÿÿåÿÏ®¯µ¼Ä®A#ÿÿÊ ®³¹¿ÅÉÏÔìÿÿþô«c¨§°ÇÓÞãâààáÕÉ»¬²±­¡c!/ž³¦¥­³¹ÀÅËÑÖÚãíððøÓ«ciwˆ–œ¢£ ™”‰t]?0`beffjmqwz}‚†‰’•—˜æ«c#+059<==<:73.'!%)"þ!û«c#!!"! ý"#ý#"##"!þ ü«c/ü«c/ü«c/ü«c/ü«c/ü«cAAø32ARSSüTHü«c““ø\ )^™û x-"ü«cú6300ú/263#ô«c("$$06 6ý5%ò«cH——–j256 6û56)øH®S9GFFüC656 6ú56,+vzzøwž-5445ý6566ù5663H–ššúŒ@66þ5665ú655$&44ñ2'20100/156 6÷#!  å    #"066ú564!ñ"!"! ?65566566ú561"û 66þ566ü2 ú 5332÷323230/éûÞ“ÿ0ÿý×*–/–ü¹ÿÑ.û0Úÿ/ü Òÿ/ü Òÿõ %+/.*!û,8ä ÒÿQ‹´ÄÏÖÛÝÜÙÔ̲‘f<PÙæGú Òÿ÷üÿ ÿõýøôðêåöÿÿPä ÒÿþÿÿûõñïîïñôøþÿÿþÿþÿÿþÿÿPê ÒÿÿüÅ„F"  ;h£ÐúÿÿþÿÿþOù Òÿòiû\»üÿÿþNû Òÿß þ5ÿÿýãÖ××öÝ7 Òÿÿd ýÜÿÿôC Òÿþÿž/þÿÿùþÿüöóþÿÿüôöüÿÿþÿñC Òÿþþÿþ¼yEûÿÿþÿÿûobaöÿÿïpcx“´èÿÿþÿÿC Òÿÿþþÿÿúìͤbþÿÿ÷€ŸÞÐñÿÿþü4›ÿÿúE ÒÿÿþþÿÿøþøñÕƒ-ÿÿö< ñÿÿþ!öŒþþÿF Òÿ ÿúòÿÿ‡ý ñÿÿþ!÷ØÿÿB Òÿ ÿ÷þÿþÿé¡Mý ñÿÿþ!÷Uÿê. ÒÿÿþþÿÿýÈný ñÿÿþ!ô k[ ÒÿþþÿÿöþÿÿùÆ ñÿÿþ! ý ÒÿÿûÝ ñÿÿþ! ÷ Òÿ,‰Óçøÿÿþþÿ ÿúþÿŸñÿÿþ! ü Òÿú2kÈòÿÿþ ÿüß8ñÿÿþ! ü Òÿú8d§íÿÿþþÿÿüùLðÿÿþ! ü Òÿ÷?¨ÿÿþÿÿüóHðÿÿþ! ü Òÿ ú •ýÿþÿÿüÍ,ñÿÿþ! ü Òÿ þgÿÿü¬ñÿÿþ! ü Òÿ ýØÿÿúþû[ñÿÿþ û ÒÿD ý-ðÿÿùþÿ¢ñÿÿþM ø ÒÿÿÓdüjôÿÿú¦ iøÿÿûïWû Òÿþÿÿö×¥„phm{–Ãÿÿþþÿÿýê ÿ ÿþþÿÿþEý Òÿÿþþÿ ÿûÝš=ºÿÿþ%û Òÿãÿ ÿ÷úÍ”U*¦ÎÎýÏ»ë Òÿ 0Qk}ˆŠ‚taE! þ  þ ü Òÿ/ü Òÿ/ü Òÿ/ü Òÿ/ü Òÿ/ý ÒÿÿúT9ùÿÿýVû Òÿþÿÿú¥6éÿÿúþÿþ~ý Òÿÿú³1éÿÿúþÿý¥óÑÿ%(fn^CAjîÿÿúþÿÿÐ ù Òÿîÿÿþþÿ ÿûþÿá(ùBêÿèÿÿúþÿáhWXX÷WgÓÿÿèÿÿþþÿÿûÒèÿ-ÿù´!èÿþþ ÿüþ¡ói­’‹‹£óÿ ÿûþÿû›öÝÞ×Ê<)åÿÿûþÿù|ÿú™3æÿ ÿýô_ÿøþÿ§3æÿÿýîOZ- Carla-2.4.2/resources/bitmaps/carla_about_black.png000066400000000000000000000311221420416754300223350ustar00rootroot00000000000000‰PNG  IHDReglîbKGDÿÿÿ ½§“ pHYs  šœtIMEâ 8G’þtEXtCommentCreated with GIMPW IDATxÚí]y|E¾ÿV_3™Ü „SN  à(  °È¡<ݧ«Âòž«ûÔõXuUÔuqDñQŠ ‚œ ÷}‡3É$!$$!÷1÷t×û£k’Î0“LNÂÚßÏg ÓGuuMÕ·~WÕСC‡:tèСC‡:tèСC‡:tèСC‡:tèСC‡:tèСC‡:tèСC‡:tèСC‡:tèСC‡:tèСC‡:tèСC‡:®Œ:àôºµZ´¬wU­¡¾à°€¨×­Õ¡€ÿ¥wY­ 1ˆ@Zè™ñÚ·ÒºµFŒð“Þ]uŠ`O²Ù§@)€•BšáY<€c¾kæwâŒð€ ,ÖØ Àç:\¥ºy@< `B þÎÿ àGF–V_¼®  ‚©u:t„{ü`6€ì{ à­fxÞDVöšñÆX`€8&šoÑœÿ«CâU¨›÷±çmmg=ÀÔ´žìû‡ìÙ½®dX« Άð™ÀXÖÉ>j†ç~ʤƒæ™Ÿp€äE¯z]—ÇêÑ’uó†`#€^Íüœ»™öÑ; Ýǵ“X{ý©™ëÔÀ‚f’zu´ Þ‚jPôe0xÍã­H°©™Þi7€›5Çæ³1JsŒP àL Ö­6Bon¬P¬yV#–%>®]ÎÚ«G3×é4€“ú0¼¶1ý†~nw?ÒASá'/ k?——”Ñ‹Õão¬ÛµâÎp·j7ÓÇû07s}"Øó?чⵋX&¾iÀ½wØÕHW à,€—½DõÙ’™Èú€"óØùÇXº³å×…|)šïÁŒDöù˜uOy‰ÕµÕí&¨†è6šcÿ àŸµÔeS[ÊØìOÙ€ŽdçC™hÿº{E¦Z$hŽ fß—4àwËð…æûǬ>±^× aÇÕ¢Šýª½© Àq¨v5_RÖtÖfev0)ȃqì93ôáxíâ3Öê#R³Îõ=Tj[ YgèÅf²çX£Œ“ýØNޱßyTÏõ¡ ¬aÄ5Àÿ1ââ<¬!UÏG°jðŸŽkHqøs=ï[Äf5í KÔ .#›Í‚XÇ8†jo@¬fžeª¾åŠ_<¢ùþwÖY“ü Õ­;ÆO™¾êvxë¬ÒŸ5X-ÜG9ÿ ‡µ…Ÿ@u·jUËרoæ%‰LeFÙ`Ý5¦ãYv¬_#û@[VÎ{>ÎyÈ;Êëø£ŒÈy‘,eõÓâ]v¼S-uø¥¿í4LP-áž ð\sÞ[žb?r|=Þ±ëðZÛASVx];œ•?ÏG9màÛTŸòëB×÷íŒØn¨Ãžá¯n»Ažù.däâK%¹à}¯º’ 0-VBiñ… ¬> 4¶¥r›`ðMgeñqî —D¨Þ•J\ 釶±ãpeœŽGí)dïßãîjŽË!ÀnˆöB€çšóÞ@flg=„/²ç\§96†{ÚëÚçØñþ>ʹ—›Úˆòë;“Žê‚¿º©#ÀH/éåy×>À®¦9v7;6Ák0åû±À›ÌN$iŽ¥2ÛNcñ³ö€o¼Ž¿Ãêïœæy/o[Û`ع2zïÍÎ=Û ãîjŽËßÎ3±»>HdÆY-ù|è%f{:åj—ýÕ{ìžö=‚Iõ)¿>ÉÊø8€kýÕ L¡5¦'®t'{àYŸ#iç*&Ej®‹geÜæ§>[Q3XÎc“y®‘¿#0_D#{ÆS^ÇO3›ñ¡ž$y'šç|ÃÊÛïußãìø÷é¸FPÁtÓúà2í jHu ûD°YuÔ0ëÒZÔ‘ÝlÆ fªÏ?™0Ðòë‹—X‡}0€kýÕ Ì¶r‰©M/A â¢ÌÖp—ÊrTÓ¾½˜¡¶WÆKüYc‹¸‹S=ƒ‰PÕãå­ê רpõu=óLUšêçü“콎[‘ðšc2ò ùßôRi;°ò^ó*o‰†´cüjРŽkÅ^³+üèùZ+9»gTwæ&S{5ûfvìI?åæ³ó¨‚hùõÅ&VF7ÖÑÛÀÿÚu#…‘ÄDF,jù›^v+;· ˜ŽdöÝ[Åôˆþ_3‰ÃƒaìÜ]šc¯kˆç ¨ž·@fñѬ ŒÌ¦×rígì7°¶êÊŽg Úóu##Ó]^„sªÚݘú²žÕÛ{Ï~v­ªgï}X^{ØÃ~Ä×ýÁÆ3#˜6^â{' ÆYxfÁ“Œ0´_¯²²»ûyö×lF{´üºðT­ƒËqæ1ûÂ÷ð;ã¯n`÷!ª=› ºe{ú‘lœLÿ'¨Ž—ðüZÃŒ’Ã|”ñ{­k+'ªû7i¤ €lF’[|H¾ˆ7µÃß5ªÛx¨äRF“|˜ÕÃdcÛWŒ\|áÏl¢xÒKÊÑq a²ÆXô!€[ÙŒÿ$ë¯xøêƒÅPW–þ^Ñ‹Ù6´äð|/Œ« Pc/´ØÌl½ô.¬£µàA&ØØ ÷+ÔhÅP½iŒQPcTÚøfN5À–áH½‰uèøÏÆt¨FUoejλzéС£6Œ…L×Î-à$jF®êø@7þè¨>‡ºÜ>ª2j@Ö<¨ÞˆéP ¾:tèÐá@õ„•@uýš| àvèAV:tèС£1Ðg‘Ö…ÁPc1†@Ý{Õý;V¹/85hïHC 7vBŸØ˜ØW"£"o%„´–ïõ½¿¹ïñu¯öXm×5¼^ U,……Eës.fÏß–´ù¢N$­F¨¡Ó½gÏž}|îܹ]ããã+Ï ’œœ²jÕ*ç›o¾ uÍÔKP%F"÷Lì7rÄÈÝ]»v¼”{ .§«ù§dÚÊËCeÖã™’ABtt4ÒRÓÎmØðÛý:‘\}ôðÕ¤I“ö¯Y³FÔ›ãJLž<ÙµvíÚáPÀ´ï鳟úé¶;n›²ðÓO‘™yáˆ,ˇÔaâk†&  µŠçD;ÊêU!¥µ”:žZG|cÙ…XnÝÒÏó¸uä­=¦L2fÉKN z7½ª0øréÒ¥Ÿ?üðÃõæð5kÖˆ›7oÞ2vìØ/¡v­uÝÓ®]Û»ÒÍéHOÏØÏqÜC”Òl߃„h¨¤¶!è¡vUiø#’+aÍ#þÎ/jñ¶@:àëIˆ½Rnõ=………ôÈ‘ÃýîŸv·öíÛ÷׉äêâ½éÓ§ïÔI¤nŒ3&júôé;ÞCÛ ð‚ Ùì6¸Ýî­¼(fæÉz+6-,•ÖRJ©]”Äß}²è«‰¡;w¾iåÊ•zž“ÁÚ*jf¼º¡N¦Š®¿7ª¥H®ÆÎš5ë¬Þ õÃOñPW‡êÊêB$ûÜ5Í$¨q MñŽ]âããêÔP?0·x;Ë“V%E)HøøãøãÉÉÛDFV¶Ž®œxÏ=ý¯¿¾¬ž ¨ímúpŒ†bÃîó¿ýeÛçeåœËé‚Bêr¹É‘ÃDZeÃVwEA‘<ç!ž<8Jy(ŠƒAêwC_2rÔ-\ÏÝ$—Ëe°Ùí4ÇPL ’AF#• GZÞZAš‘HÚAÐô Õ;l= ‘ìðR£ú@ÝUÜ“kä=¨;X]`ßoÕ\û#Ô\,ZðŒÊëñÜw f€ûT#õÜuCŸ¦xÇ:‘ŸŸQTZáï|ii©ßÙgøM7UVT˜,VkG¼§5§H¬Y·®wcˆ$¿ À°kß¾¾²,sZ5Bûœ‘ǧ©¼¥`ÃæÍñ¥¥¥UæUkÖ íÓ³gÖósçwàð‚’`vBݱ­ (@HâÄCQFœ9z"þÌÁ£ý:õí)Ž»ç.ĸ„p„Ïq„pOÐRÜé‰y¡h>c냒*CÍli#˜„P_œƒºhÌcßAÍÍwµý%Ú‡Ê!3°Öó¹k¼¾÷hÆw TD®úÔQ•A¦)Šχzþ–e(Š‚Göp8 î+ü±‡Ûåâ´Ïðz1eJ*lÞ¶-¦¸¸8Äûº³çÎuþÓ¼y÷mÚºµCs´WxxÄU#‹Õþ~y…eŽÕj…Ín§N—‹(”Ùéª0ŸO{Ž Gæ+°˜7ÃbN‡Å\Kº¶ôJXÍY°˜÷Àbþ Öô‡!`4<ž}.më—Ÿ}+'ü𩬬„Ûí‚Óå„Óé‚Ëén1"i ‰D+ò¯ejF>Ôô”„£å¦2…'Å¢6ÍÀw¨Î›{{Þv¨I¶B]µÚµ+ÞéÓšùkjl&÷6zzŠR™L?>5iÇŽx/&ªºßb±׬_7cÊ” ©_âŽ==õ»‚Ø(Åu={ætëÚÕ ¿lØÐ“*ÊRجVÃËÿû¸.qq?õéÝ»¢);cjêÙ¥ÐÁ²Û}#!D¦àˆï ,BÔÀ3õtu¬)ÀqÄÆsœÏ¬ ¥cJ«Ò¢ò„È'S2n,­´>ãtºàv»¨¢PBPTRŽè6E®Òó‹êõ"Öôß8~æ|iYåÁœ¼ËÈ-,¥@TT$Üœ ² `ÍÖ}ŸÎÿrÍ»mÚD‘¨¨p D¢$@ˆA <@ŽãÔ>Ak“î( /Ä™mÂx³UsI_Tç¾Ô=9e¨9`žÖˆþ dÚÌhÚ¹¿šÄÉÀ¾KÌ®2êÞ¬EP×kÔ¥rÜî™Ð!ió¹BÍïÛÜïXý²Y›j] Ñ]K2>p˰a…íÚ´)É/(ˆôGF¿mÞÜ«!D’|æLXÆ… í}ª4ìûÝwÜ‘ ‡ƒ;yêTGžçÝ.—KðEâ|¦i×qï™Ì¯%IŠ©¡Kq…<–O•Œ  q9?¿«Åf"8ÈX¿$é\,ÿü‹oý°jÕ؞…¼Ù{£GÇsp»Ý8züL§#ç. M»¶h‰~}{ ð0$"Œ’ˆ ££$@àäå_†d4"4$X%Xú ¥&ƒR³6Ÿ±U;S—²™PÝ¢OkÔƒ[ ¦_¨/8x¿Iµ¤p#ÔÅoc}X®Û@ݰù ÔÝÏýa"|çqBݽ À_›ù5öPµÍø4׿­Ã‡§¬Z»v˜O2¢ɧOwÎ/(0´o×ÎQŸº­\µJ•F|(…(Š®î¿? ƒ²{Ë–àR^žñ|JJèªÕ«{mßµ«_U·¥©ii±»öìi{눅î‰àµÂÔýµ¯|44,<m¢£?x0úÞOF¡U31U((_­:–bÑÇŸ¡¢¼V‹v»Ë÷$d }÷¾{¦Ç„……"²M®ï‡G}€FD„J)**­HIÏBAA N$N§‹nÝ{ô‹ÜÂ’[xŽ[Ð.2,‹R·HˆÕf넸Øh””–#3+{öÆÝwÝN)@N>,o^ù³ rhÇŽÁ.^HdJA©EVßM–)dˆnŠñcþ`É7§r‚¤ˆ˜|ï>½pëm7cÄm7ÓØ˜ „†ôæ’H8ÔÌX¿Õq;4¢¿‡p2ÈzkþöÞhø,Ô<-&f§¸• þšk­ƒH´(bÆÜ½Póœ\l¡w¼’HüÌøÄHLŸ:5måÏ?¥„^ipKQøºÿù™gê ·sÏUUñEpöïŸ~…:Û¡ƒ=¶Cû¨Ûn+xõÍ7- «WÕ¾Çò+úÜ:bÄî¦è”Â@Öº-VW±¥2²øâÅß1lÜ82ñþû)B)…B)¨‡L8õ{›£ýì±ã¿¹-¶l¼ Ýî[ò!«Šóò Š/å™2%òØŽMCo»}D×Â`µÙ‘¸ó ŠJJ`ED…™ p"BBL(*¯¤O¥>Ö=.f–SV‹Ë­ÛB‚¤Ã¢ÀŸ „\öù,I/ªk;;¶¦gϛɑýGs1e…Å$<< EEÅÿ Aª¥Ôô)Uh ( UÔwe»Ý!ƒú¿²>#»¢Ø®4ÿrÇ9¹ÝlIòeçNí{â<8s*¥ê E_óÉ(¨!ÌÌbŸýÀ\èÊc¸5£ý­µ2)a Ôü3¿¢:{Ýà?©PwÐ]s¿ã•D"Ë> ®ØH G·n–ݺ]JMKë蓌lMJêU"Ù¸uk‡Â¢¢0¿`Ò„ ©u•óĬYçW­^=DV”*IóbNN“YG)ˆD-éIPÓmÁ="Aé’’FFEbô=ã¡ÈnPJÔÁUeŒaQü¥‹ÇöGG†ÍGm»XÌ¿@MŸ¡J€÷Îz'&&ú¯‚("-ù x¸Ñ­c[uà€çy™HxXBB‚©Ã­›Sm0`´CF‘ å‚Ó-Ÿ8.‘l%„dit]Æ]@¥ÅBþþúû8äÄ0º¬OXs;¨R9gA•zO»üË-ËAáªDQÈ U?n7~MXü#!$6vWPpÚ³$÷òÿóÝ=aw8ÉSO=(nr¥™4ƒ×æáz\‰ú¥.ì5~ijAMÔØV¸¾½}Úcù­ø}N©ÞE–«¼"uÙH<¸{Ô¨­§„2¯ç“‘™ÙþdrrÀ7¯^»¶§¢)ƒj=5Š‚ÐËÄ{î©3]jç¸8[xhh¥öÞÒ’’¦ ¨¢Ñѱ¼fЗÀš¾À;»·%sJ U ¬Õ³´BUÛS¹Å&¦æÏ¥”Æú°Acþ+â™gÿxcll <‚Ë 1‚ãG@Aa2!88a!Á$2,Qá!Ôd4‚ã¸6dÜL«[YXbq$WXN;œ®7)¥ñ°¤»]N$óß_ˆógSnB‚ßÇ?I£A›ü]R<Ç©ä!+ªT¢0õ­Úð]sû ›¹ ÖôÃpe= …~¸èãÏhffåx ­–L¨Æý[_‰d.T¬/Üà~/µã´ëîBu>”GüT‡Ñ3†‘ÈX¯~©Ì`ŸLǘ‡‡@]àu»æº蔦&~Ǻ%FZÛƒ/ɤ.<8mZÆ¢%Knõ:}Iß'$ôê¸NçÕÊ8x°»âMboÐ-Æ¥ ‚PgårrrŒÅ%%!ŠæMAA47¬é/UÊ]F'mÜ8´ý¬Y ¡”SÕPµy…ÒÜ¢òXó¥¢×(¥BêÜX顇¦NŒíØa¬¥Ò‚9Ï<ïê{}qÆÌû)Ïó’A‚Ñ`€É`@p¡ÁA0J3EP@•ŽG8ƒ †¢r[¿ôK…ý·ó•)i©éÈ+.‡Íf{—ZÌ!”I½_’«Ãé‚Aä˜4¢ªmŠB!³w­öŒç)é6qÅ÷?öþËóÏ.‡»)l$ØÇ¦ fÚÅgý Ú÷ jRê¶Ì¨Ñó»?ÁO=º¢:ëž@/Ci}ÑÔïX/c«/âP$’ððp÷ÀøøŒ‡÷ôGF;víºNQ”ÃW» ºbÕªÎV‹ÅàO¥€gÌH ¤^/¾òÊp—ËÅiɨG—›Îiÿ‚7ÏÏ>äHÒ¡Þ½ÛÞ9v <†W…Rðê^#ÄæpѬü’ûÛ†oðE­$2÷Øî]»|d4âoÎ7;*¬Ÿ?pôÕÊ Kð]cG¡s×8d4Q” ˆ<$I„A’`ENU­%Qÿ§”‚ç9Œ¨”l¸\^AÍ…¹¡ÅåúËÖ]äáG¦?~ätJì™´Ìûöèr˜’{¥ù†€ãd…‘ˆÂ$ªÚƒd%€þCÈßV,OHX³z]Õj/ôåëhJÕF+òg@M˜ì K5‹P»üÁuÑ]Ô|°/@u½ú"‘A̾±]‹™4‹WçBÍ[ÞÊÞ1 "ñViªl'ª6pïøñ©Š—J£ +,* ûmóæ:ƒÂ~Ù°¡§?•FQtŒ‰)vÓMµz \.yøñÇoÛ½gO/Å+Hnü¸q™Mc©jERÉ)püÛWÿìJOK#σR¥ÊV¢P B€Üâ ¤]*ú7¥´Ö|·ß~Ëç]:wj›¸%‰îÞ¹o™óA¸Yi'Ïœùæ‹eXùÝäè‘T–݆$IàyRÇA<냨ú¿ÇYÂósKóDRRVN%ŸÞ~ðÄ#ÇΤý²q÷¡Ÿ‹JËæ\éäàv˪ŠL…*ŒTÔÿ)"’_—ûYkqÉ<Øí}QµP/boœ®¥ÌÆ<ëû|ШɫvŒm‚w¬ß`ðòÚxK´+['ß{oÎ;óç[Ê+*‚}IÀO«W÷š0nœßE9—.“““;×$wçw¦ÔVòòraæ#Œ>yêTï÷4p`Æ}&ä¡…` ^à°XîY¶øó1ÿ÷ö[44ØDÀfkfK <ÏÑ̼CTHз”ÒÁ„+Äû¿¾ÿùÓ×÷ë=!;;[·$}Sq@]}kKÿÁ=vÙ-Ö™'{íìésá[ۆᷠ¥Ó¦ß‡±£F£ÄA¦€"ûfÃjû ªHŽ#„B Ë2½˜W@ò‹J†å•ÝhÎÎ{ {Çö“! Ë2@ÙCüÌCåQo”@$‹Ù†êe"hn‰DG3@aF1RD}ˆD:â–[Òªî÷’N¨¢`ßÝ+++ý&NûfÙ²²ÛÍy‡ÚWI'”*=ôÙßýЏ{„ÉÇOžìâýìˆððÊwÞzk_Ó·¢ÿnî(:MAø™%%•ß-YBÀóª4ÂVêP P…EQpöâåëË-Ž·½Ë¸îæûºÜ5úöW9Bp`ßÁ [V/ù´ÛCXÌù°e|ž‹tÚ³r/åžþyÕZ2sÚl?p^zã#œKɬ& ÏjC§Ó—Û —Û¥‚,³è[Æ'«”tðäÍç/\ÚO)m@æyN§‹3ÜËž¾S¿þÓ°ÖÑ:ˆÄJ£%“úàÁiÓR¯X£)×f³IßýðC÷oܼ¹§ßû×÷é“ݹsg›¯{ÿ¹`A¯zhJöÅ‹QÔkÝO›¨¨²„åËé×·oÓížOêPmª½E dÆùäSؘ¨NµÌàJ5d‡KæÏ]¼<Ë-+Ú¢ÜëûËë¡!Á²³sè[¯¼ó€“v‡³ ¥4œRZí °¤SXÍßÂ’~@âAÈüKYÙ§ÞÿûyûÜäèÞgžùŸ¿aýÆDddd¡¸¤ŒÚNØ]nØ.8œ.8N¸Ünø¶…pà8Ž&§eu¿TT:¿K\Q‘å*¯J ž Lê¢nàæ\k££‰àqÓú3¶Ö·Ü<|xqL‡…999mk”¡)w݆ ½žzòÉtï{=ž‘‘íO¥¥¸wüø+Ô‡ÃÁÍš={äö]»úÀGðZLLLñ ë»wíjkžV `¾´˜7Ȇ.ó7¯[ÿÂu}úNb)¥”hƒ·…Ò¢ [ô…ü’×)Uî%„³¾µèû±±1í§Ën7Þyóƒýpd¾}ï#ó:í8œ¼H9ÔtŒRú!!¤&AZͧ¼àE˜z  º9?+gÐ7Ÿ|yý7Ÿ|Ñ/4&&tð dÀ€~èÖ£îЦà`âr¹àö"Ž•HˆL¬¼¢;¾Zº°ßŒ'^„Ë-ƒ uï ¸G'PÚ©¢¨ä†íGoߘ8ÆÕ¾}4:ÆÅbàà´wßžÄépª^BX›žçÁqxÕKë¤\[…Rê!…Ù~<’ˆÇN¢«6¿‰¤•FcR<öè£i”Rêm£ð”+»ÝÜW_ÝÛВ{úSi¨,cè!é!!!U&à .ÇNœxïÉ“'ã|ÙwÆŒ}zÛ–-ëš…D µ38X,æâëç.Øôëz"Š’ª€ÍÜj-·:‘Wò꺇îÖ½k|â¶Ø·çÀÓ€’£Ëéê¼  ´Â"8g~œR`²aMßAüFi Rw‡ÕvGVú…•ûvÀ’…_“o—|Oe·¬®Tfd³…‡<σãyPBœ§Ûí¹F©òÔ(p+´ÊýÛ8IóïG¢£©†ƒÇØêÃ0J•†˺wíjë×§O¶â«\ö}æM½´÷¬Y·.¦Ð³—ˆ›ÍŒiÓªbG\.™ñàƒã2ÒÓÛy×ßdïí·7.ûöÛ=ZâiZ†íÊaKßIúbͲårêùð<Ç\Õb>Bä–“ °ÈÉeHܺ}Ûù#Wj Œçy‚…RdçO¿˜û¥4pOžÕLaIwÀš^[ÆØ3âr:;x„&&î(!¢ °ʉ ó?ø`xŸë¯Ÿ^õéׯê3wÞ¼Mkl­g7·˜_ÏïúüãOPRRJ={”hU€ªP:p¨líëÞ†ºdC}!x¢ @”$š“_ˆ”Ì‹Ÿ•”WLiÔûXÌXÓŸÓõ§¬Œ,ج6Âó¹¹¹¹yyUŸÂ¢"S[š@Bdfa^~îê Äár1/Õ¬œ-++¥ß~¹ì;XÓ“¼ŒD¢Q‰ÉDO¥eaÇÁß_º\øJ]©%êž]²mÓþ¼$I*‰ˆ"DI„$I ¡?®\ãþà?(÷¸Š=ê e¶ªãkÎ0u‹ õúØ .ÑO‡ºïê_¡®cñ‡0¨»Ÿ€ºèÎ êêßï¡nhdl‚{¼ëúüU'’Z"Q¥áqaaaîaC‡fx‚ö“””ÔÓív“¯¾þº«Õj•jsC?6kV•ZóÁGõ—e™£µ¨NþÞÇsM“$ÙüÙbÎ…¢<²'q;N9F…RO†NJ‘…–g>±õ¯Wr( ’(B”$b 2ÒŒìŸ~ê†^Ýø‘RgŠJ©˜tàø“Éç3æSŽK’ƒÁƒÁ€ìœ\|4ÿßäbFÖÔ’ö(€®¿$ºgó3§Ó£$ÂÄ”ª*3(E¥Í snÑRJéSvPJ 9Žs_ DÒi&š*5ÅÕ'’ÚvHPQQ!šÍæz©QQQÎÈÈH÷ýS¦ä¾øÒK•ÅEE!Þ^-^ÜÿÔ©S}­ôõ Ö{Æ«ŠùlñâF£Ñá$|•á}Ìd25qÒ°R‰Åì&!×-¨ÈËõù'‹†<ÿò‹”ã’Ÿ—‹¥_.û(Þæûi’(À`0PJ)JKÊHYiÜŠ ÇsÈ+,¦ëw¸aû¡“_tëÔþ‹ÝG’Ï… 2вL ªØÙ¸+«°t,)¯Œÿî—­# JÊ IJ©Íf'—/"iÛNlߘX` ÛðÕÊ¥~º*éÁâr K+Àñ"<û«¨y.Ô¶PÕPÏÑ”œâˆü2ÛŠ6á&HôË¥ˆ 3ŽÆ-­™HZ"ÍDS¥¦hUDrE ¥ønùò!Ë–/âsàú¬”R <8sÛ–-›9ŽÃè;îH]¹jÕÞƒÙs׉'âj“"xžWž~ꩪøæÏOþ`þüäÿUeZ ¹îåã;w¯]}]ÃÀÁ±skRjyYù µHp8œpØìäÂ…,|òÑgH7gÀ¤&¼êÓÑíÛ‘ðˆ0˜‚Môôi1}DƒÔÇ(I0$p„À%˰;p9]p:]p:œpØí(+­@^^>ÉÊÌBvjz:Ü®màùe¦Oš ­èI3áo ôžÖklõ2ªú ƒŸ-½%€ÃGŽt¾xñ¢1..Î>ûñÇSW¬\ycmª†¯âÁ!C²:uêähmG th™l†©ûk?¯XõÞÖ a©´¼*—/öy1‹‚¼ËÒ?þ>¢ Àfs\Ì:{þYH¢ÅæpFÚJËú_J¿0 ý!JŒAF"T[ /¨Þ³ê×ãiQdY]kãtÁaw¸ÜV[2y@v@OsAƳ¼ kEyáñÄmÇü°›öGeuåªñœG$à¸BØ2RkáÖC$@Ó§™h®ÔWÍkSÛ`Èö =¦(ܧŸ}ÖãÝ·ß>=|øðÒ.;_ÎÈÌŒ¦~TÚlS¦LIiµm‡&LðBÈT–÷–•Ø Ë'ý^dw:+ÒSÌ™dPºôRRÕ–CÁÝ×D @VD»ÕÚÙnE7€Ä2›a0ÔL.€Ú™Ô\ ”¦((¸@D',fl,e @aê1¢ÈÕ©Ê‘:ÔLJ•À[¸u‰G2ñ ±i&rϵal­ƒ4üJ,^ß×­]ÛëÝ·ß> ï½7uÁ‚ÑþHÃ_™¦à`Ç?žÕZÛÎ#‘4 ™XÌ Ù4\½î\é4`çÓÝ^“X1€ãMòÂV³íjµukŠ#©+Íľʓfbd#ïiDâ#,¾¶M…|ºX}¸mÍfs»={öDÀÓO?m¥J2}DÒz?çÖ#Ì&“Ii­m×Rvþ'ƒ\…8’@Hš‰¶Lªx€÷ž6Á=­ÖØê—8êØbÀ_$ª¢(X¼xq/èg8`@V­Äáã9³fÍJiÝ]GóSuë"’ú¦™x•ݳ^sîMxO«$’ú„€´òÛ¦M×¹Ýn3fÌH­ÏsÚµkW6eÊ”Ë×F7×Ñ<íÛºŒ­½ GkK3ñ9Ô¼$´–I'¿‘÷´JÄuêT* ‚LëðžxlþlþZRRRäÝwß]üÇ?þñ¢E‹.Ûív>zM:õœ>”t\M"i‰4-‘š¢EÚ~÷®]›[¢2&“I9þü½ß69èÎÊ4"IKùŽí%ˆUÓYVŽsùyÓîF΀…ƒn3„oŠ”4Ù2}Ú(*•È]|Vå­jy!ìêzmZ2ÍDCîi)dŸ9s&¸_¿~}> gΜ ÝÚŒ$—Ð]ð"Þ"aÁ0ÎCID8ñÅ€’ºµ‰gÛUœß{ 7eþëÐur!Ó—Mî}Cé„Î#¢%Îÿå9ž-7DÙ9 O°¯å<jx!Ó}1„º_>Ãù'ëxJÀñáAý¤×ðXÞXh~@‹xÒ¨&TGh1òj8’f¢%RS4›æÌ™3ø¹çžÓÙ¡˜3gŽ À¦:;9¥lÒŒ>…të@@VQJ@õÁð½SÀeÎU¾¤£ñù®v×vâŸó‡ðÛ*›¡|)º^wx(Tvö/‰ | ½Q •1ðúGÍÄîz|œ:>69‘PJ@AÕ÷l½š8àâŒ3œ+W® Ñ›£n̘1£jš‡ƒu]kµX²:uîÔ32<\LÏH%ÍD"] ÈF Ú›0U¥®‰ˆ€ÀÉsù)¹©3jÀÞ¯ŸéUû†ìÏ;…ÄìýÏSu-q€“Å ‘ð}OcoþXì(nVƒøÀý»óß¡¤´T'’«ŒvÌž={ë˜1c¢ôæðÍ›7'$$Ü…šÆrÿƒ<;çãþû¡‡žXQQaE±²I¤MBବ }—­“¸rò/4 Õ$Ro©·ÀVæüäTB œ›Ê ¼À¤ªzÕ@¦]B;ÃÀoŠèóÎcÑJDNhj"¥²,GÄÆÄ<[ZZÚ.%%E'’« +€ÙcÇŽýjÒ¤Iû׬Y#êMr%&OžìZ»víÝG€v­ã'qc¯Þ½ïСý’&ÓX ì°#*, Æò X=Y¿X¾[q#ßZä›kjl^HùÔ“ç“"ÆÐ9Fi·¨ktWˆ\ÓsB€òòr,ýv)ÊÊÊ’u"¹ú8 `äÚµkÿAé6{öìãsçÎí_ù{n”ääämÛ¶µ7ožÀy¨6{ ÷§¤œuX­¶¹‡Ê!/R¡)G‘B*qZ¬Ä3®âR#xi™ÚgE€Â­¾‘R€€ˆ;Ë`=V¯¥¯|^ÝZõl¨e±X`³ÙÖxN"n] `€!âp¬PnðPc‰Ž@]~¤±ÆÆvnBxudR¯Ët°U3|õuZ+%lqß)忊€p'àÐ\ËYÊŸîô23×>”‡Ò¾ª^€‹0 õ—t ì(¢m~³.“LÆ—eP¨vÕ©¹¥'i¹çý<'ˆWÛ(´æwÕžS–{)ËèËtèhv#&¼-¤oƒÁMâA@ÁÜE~°Ž³T|ÕÎ8o¾°ÞÊOkc¿ïr™ë®|¢äTê pt•:T>Úa2ÚJá)8BáTˆ¸­ÈÝv³í›\kÞ“-Ù:‘èÐÑH¬GûÐî0|d?[¬ƒL2áT‚WÐ ”A2hE Oÿg¤œ©ÆÇl¹½/Òm[¡ÐXu„ÿJ‰‡D*\$hS±3âûÍÜÒœ·®†©C‡ŽFà{XœãaÜdgç€;EpÄŸ)" < BH©m3ˆÜñŸ¡.÷Ù˜6›QZ*cDû.f‚ÐZI8XÜ$xu‘%ôŒüt^Qο¯FèÆV:šï8ˆŽï) — ‹x€&iÐrȤ’Ð0‰‚sz¤ —â#wq Æj«°ÉY–_^ >–s9g­þKèСC‡:tèСCGƒñÿD¾ƒûU›øIEND®B`‚Carla-2.4.2/resources/bitmaps/carla_about_white.png000066400000000000000000000314311420416754300224040ustar00rootroot00000000000000‰PNG  IHDReglîbKGDÿÿÿ ½§“ pHYs  šœtIMEâ !&ØtEXtCommentCreated with GIMPW IDATxÚí}yxTEöö[wéîì @XeÕ" .ˆ*¢€2.(:?†oQÇeÔQQÇÁQÅ D!(‹²&¬Ê¾„=;!! dOzï{Ï÷GW‡KÓtVâxßçiH×½µvÕ[çœ:UèСC‡:tèСC‡:tèСC‡:tèСC‡:tèСC‡:tèСC‡:tèСC‡:tèСC‡:tèСC‡:tèСC‡:tèСC‡— Dd"¢D$èekµ¿Q;" Ñ{«ŽÖØ9Èè "rÑr"’õ²µºß¨/m#"•ˆþ ÷Z­­ƒÆÑ"J$"ÖBy&Qlk,[+ýFÑD¬÷Xvš"zœÏ>ÅDTNDK‰(´ò‰è }ÓÌu‰h,½FDk‰ÈLDkˆh'eѧDÔþr”M“#¢§‰h\ þÎ!¢ï9YZˆès"’¼ÞBDUDÔA:í\·ÑÏD4ˆúóïäÆÍßxžöÝÍX§±D´˜ˆÆQÍ7jžßÍËÜÒeóÊïNžß¦Èë>®¦õàßßçywòzO&¢"Z¥Ά#¢O¼mD4šw²š!ß¹tÜLõzŠˆö‘Á‹^öz¯ˆÌ-Y6e5Ñ:"êÙÌùÜÊÉ´·&ìeùx÷.Þ^jæ2u&¢9Í!õêhY"yƒ™gÁDôfs¬Vpig}3ÕéZ"rÑuš°Ù|`ŒÐ„ DTMDÇ[ªlµz 䱊ˆJ=yQ4'–>Þ]ÌÛ«{3—é¥ê#ñ·M"“ùilá|»ù’š0ýˆÈ®•°ˆh9µRõäåøGcÊö[YæÒ×IªÝTïúÑy"ÊlæòDòü?ÒGão—Dâ¹ø>ªqo&¢íÜHWMD'ˆèE/Q}:!¢Pnè,!¢Yüù#¼ÝÒô(_¥i¾‡pùÕǬ{T+V×V6"º†¢ÛhÂþˆþ]KYrµ¥‚ÏþÄtÆEûW}Ä•‰èOD”¤ DDI¾¤ˆÚ%—ˆ>Ó|ÿ—'Þë½Á<|^-ªØ‰h#¯×!"êïGmžÌÛ¬‚ˆ¶Q´æùžÏ}Dþv‰äÞX=â„Ñ<"ú–ˆb‰¨-Íå¡'ŸÉžáŒ8ylã¶Šr"ÄÓYÀUÐú¤_r–{ͼ·ò4fkèl"Jñ1ˆ.)u$¢E<³Õ ûƒŸrÌ"¢õüÿ‰D4ˆöz]MD§xwxÅÀWŽˆˆæQ8ý—¯¢ÍhÀo¦ù»/WsjÃ?¶“ƒüwÈW~È[$"#­$¢Ï8ùý—@DjHÕ•ˆV‘I¿-iÄED®g¼y|VÓ²dÏàâ ƒ‰(ˆwŒƒžÕž§gž ¢½õM¿åü‰ˆÒ|ÿ'ï¬Gˆh}CD£üØ….)—úòeãešðIÜY-ÂG:ÿGDùD¤ ûˆˆöx©–¯ðß"ÜK¹—ñÁº…ût<ÍÃú6²´åé¼ã㙇¼£½ÂæD6Ћd‰ˆ¶x½û6ïXK~¬ïoû¿>0ƒ‰¨·æÃyÖœqë(ïüGN¬G;òÿ²&,”« K¼ÞÊÓŸå#6¾V‚ê“~e òú¾…ÛUµÙ3ü•Mc7(Ô’/pkü¨$gˆè]¯ºšˆÞözw)íôSžq¼ÃÃûùHçþìÞ†¦_ÏßÇHD6":À»>ËÆŸõçφ{I/Ïúx÷>þ°ÛxØ8¯ÁTäË>Ÿ¿ÎíDMX:-n‚~û·1ö;}åþ/¯pO½Fy…"¢ÓüYÝïõ¼ötS»Ë9.oÔ)"ʯgœdnœ4aïkÅl겜ˆÎù"*"z‡Ç‰ÓXîÛÔ'ýz–{8OãÃÞõY6þ÷Ÿù³þ½‡÷r²&Ïþƒfp.ãRQ”æ½DžÆ~ʳIë,§±É<Ó«%E~ˆþjžÇ^áǸ͋ùPOR¼fl¦Éç+žÞ.¯xòðþÞñtüvˆ¤ŠˆÎÖ3Î9"*äÇp—ê2þ‰$¢W¹(.qcç?éìà3^7Bþ›¯\”~êúï°÷ð®Ï²ñg+¸>ÄÓÌâé¶å^ÀokÒ9ài_n„^Ä—SS½òóS47ÿW3E"ª$¢×|¨:C=*\}—žyºs|I]üùã<^áN$¢&ì~Nþý5"ÿëZ•–ˆÚóô^ñaÔ&¾§)žˆþEDãõÑùÛ"’RíìêçÙËÊ_ÉãlåË™ý¹hLDô‹¦s_ÇÃ÷“nž­uA4ýÔu=O£+ïèmüíñW6þì<—(p/ÙüÝ>x‚¼qÊ~BDs}¨˜ÑÿK"j§yv-v«&ìU ñ<ÆWÞXm0’—#‰ˆR‰hr-ï~Â󸊷UžíYùâRË |‰~€&î5£vW®¾¬áåöÞdz‹¿›ÉWö®ÒGæoHvòñU?F°±Ü¨õ—ø–ˆs? ‡¥òLëøõ2O»›Ÿ¼¿äƒ0Æ+< ô¨ÛcÜ@kçÆÁJNœ…ܾð­?ßeã϶rU+ZCPó={V|H6¾ÂÂ4þÞŽ_+¹QòZi¼Âë¡]ÁZËÓÉ'¢H#œ ò8Inô–4üoo‡zT7Þ'Îpis _öVs$¾ÂdåÛDtŸ|þÌ'ŠÇµRŽŽß‘LЋÞ'¢øJËã¼#¼¤5ðÕ3íùDô—ßqÛöä¶ ­¡õ _ãêH'‰ˆþî¶Û$zê½XGkéð÷s ÀÊg¸Ÿ¸·b˜Þ: nÓÜG¥iæh}m>¢ôVÖ¡ã›D&s£ªèÆÕœ·õVÒ¡CGm$2š;Óµóc HÕz®êøý@Ò›@G=ðÀDô€<ñƈp+c¬Ro&:tÔ&‘ÜÇWÂÊøÒo&}MD7éNV:tèС£QÐg‘Ö…AÆ €ëwÚ"€3öXÇÿ¯7ÆŒ×;>.þ¥¨è¨c¦À‡Õò½¾ñ›;ޝ¸Ú°ÚÞkx¹TRÍÅÅ%kòÏäÍÞœ²áŒN$­&ÿÐkúôé‡fΜÙ%11±ú÷Ü GŽ ]¶l™ãõ×_p À l“Èíãû6|G—.]¢Îœ…Óálþ)™Zyz¨#Ízäi0ƒŒôŒ“k×þ|N$—ý|q×]wíZ¹r¥¬7Ç¥˜0a‚sÕªUC<  sO›þÄ7Þ|ãĹŒœœÓûEÙë&¾fhÕ*ž˜v”1ä•cQ-i Ž<Vëˆo,»°Ó­[ÚE7 ¿¡ûÄ{'ŽZðÙ‚T}Õæò"Àç .üôÁ¤7‡o¬\¹RÞ°aÃÆÑ£Gà&–ºâ´k×öÖ¬Ì,deeïá"Êó=H˜†Jj‚áoÕ†?"¹t^âï9ó¢o D ¾.‘„yÑ[ é^ˆS\\Lû÷ïë{Ϥ{ºÆÆÆöÓ‰äòâÉ“'oÓI¤nŒ5*zòäÉÛ’’’ÞPçñ¢$¬6+\.×&Q–sŠ‹ ½›æjK9Ùdƒ AoŽË†!:uºféÒ¥ú='‚·U€!EpO¦ª®¿7.H+:‘\>Œž6mÚ ½ê‡Ç{ì(€ÑÿSÃÑ}.L~ˆÔ•ªJý‰¨??·+?·ÆPGÌjw]Ues %R[h¯«ùW  ’Z%鯌±÷l#€B‘šàeŒ±É渭ôNØàCƘÅOüp.öÞ   Ï»ÀyGðcÌVG¾”Ȱ ÀÛŒ±ÜÆÖQƒA÷Þ{¯€C§‡À1cÆŒ® ,©ÏlY›ô2GPv^јÜ¢ë+«,}¯Þét¹BcF&2cF8Ùb2Yv8V–Ð¾í±°à ãN0ÆJà—ãÙwI’ôŽ,KaWw{@ \|v¡]›ÓFr§×€;ˆ(’1V`&þ‰ÐÀXOÑsŒ±ï¼~œ¶pûxoaoÏ?‰îð ü Š®0ˆîbŒ­k¢:vNLLÜ£SCýÀ—Å8Yžµ:/)"ŠLÞ“úÎ7«“ï--¯V\Š "À¶§³sQZR»Í0Àd2!**â‘Ð&£TQ–œÁAA®Ø¶‘®½Ç3.•œfK”(IAF£‚ZZÁiN"yÈ1Lðiñ°î½=Œ èà["ŠbŒiOâú·‰läã$t€˜zä+ó8#øg]Á«h‚:ÚåŸyfTqY™ß#&Œ{xÚÔ©¾žmÿå—vïÏ{£ßÄUÏÍœ¹õúk¯-nÌýì‹/;•‘Ñ^3`.zÞ!.®lþœ9ÉðÞ‡&:r¤C›¨¨êؘ˜êñ·ßžÝïÊ++ê™e@mǨéÝ1е;öMÿúÇÍŸVTV N‡*©ätºØþ}‡°qí&WÕùDÁÆT\X2@$BU%†¾WõaÃG\/ôèÞÕàt:V›ò¥Ìh0"Èd"ƒXË[+Xs ß:F”ÀsÂÖƒÉV­Å/„^ Às×È;D´†1vš¿A÷{ÆØ$¯2‰œ*ë‘ï[üréù÷¶®°©‰êX'ŠŠŠ"KÊË#ý=///÷;û ½æš’ꪪ`³ÅäïéâFÁÊÕ«{5†HŠÎŸ7nÿõ×>Š¢Z5B›Ïð¡C3ܼ¥bí† ‰ååå5æe+WéÝ£Gî³3gî4`@YSÏ”uùn47¾Y»5ˆH};÷ì¹6› N§“TU…,Iì‹Ï)'wïÛ cP Œ†m2Üj8Ù¡ÂÆ¢Á ª:ìøÃ‰Ç÷èÛ±OyÌí·"±ÿU`ŒA`DA`L`D†–âNÏ ¡ùŒ­÷kHª€ö¶´aDÔµÞ…fì$€ûpÁ»1À¬K,?nÄQ¤W|…1¶ÉŸ}¥¬ôúÞ½¹êX¢®ùÔY–Õd¨ª χ<+ TUÅîºÛíö÷ƒ¥ßßÝåt Ú<¼ò¡)'¦À†Í›ãJKKC½ß;qòd§?ÍšuçúM›Ú7G{EDD^6"1[lïVV™gX,Xm6r8L%bŠÃY•y*ã1šw2cÓçŸ|­$}÷«®®†Ëå„Ãé€Ãá„Óáj1"iv‰ÄKä_ÅÕŒ"±<߇¼Ö2I'¢u dNHÚû\Šìk:^hO>k“fÐ]$ºkIÆ®¿öÚâvmÚ”?åŒ~Þ°¡gCˆäÈñãáÙ§OÇúTiø÷Ûn¾9ìv»zôhQ]N§SòE<6«Õðü?þqÓª¤¤ŸšlªtsqÔŸ^_07<"|ˆ$Š$²$Ad ’$BEȲI IdÉóžû»$ èy€"i×á—ã9_ †¸‹t)Áˆ p£ÇòÉà&#ÈÆbœ+*êb¶Ú 2Õï’t!^|öù7¾[¶llŽâtáyìÿe/FŽAàr¹pàÐñŽûOžF›vm…¾}zÀ(‰0 0™d˜ 2‚L2L ’(¡°è &ÂBCÜëC$"e0°Ð‹{`ó[µ3u9Ÿ©`™fu'¢ëc¿4 }Þ5qK+Dt5Ü›ßFû°\·0ŸˆŽ3ÆvÔ’þxþñ†ÀTÆXý­™ë¨±‡ª¨mƧ–6o:4mÙªU×ú$#"9v¬SÑùóÆØvíìõ)ÛÒeËÜÒˆ‚dYvÞwÏ=Ù`4Õ7~g M§ÒÒ–-_ÞsËöí}kº-Ò32â·ïÜÙö†aÊ?«# ‚»½ò圆„GD ML  BŸ«Éd22ª™‰ ¤H¼ :–—cÞ‡Ÿ ª²³6›Ó÷$öö·OŽ CT›h\™Ø=|EFF0"BUµiY¹8¾ ’ Â ‡“6ýrೂâ²ëEA˜Ó.*<—1V·H’˜Åjí„„ø”•W"'7;݇Ûn½‰`G÷íS6,]á˜Ö¡CÈûóç2…D*TÅ]7E!(*Ó& cGÝm.ÊL "ãÚ‹½z÷Ä 7^‡a7^GñqíÁcþ éÍ"‘ðk´7Ö¯dŒyü$¶jDá4dõÒü}ÔKõ9àn~ì0n€ª±kÀÃv˜W €Ó¼œ³cgZ¨Ž—‰Ÿ?‰É÷Þ›±tÅŠ! bt駪Šß%%uûóSOÕËAnÛÎnUÅÁЯ_vDDÄ%êd|ûö¶øöím#n¼ñü˯¿nNZ¾|ˆ¶‹—,é}ða;š¦OÂÈV¹Ìg©¹:ªôÌ™néûöÝ|í˜1lü=÷FDP‰@2ÜßÛ„šl'úÙe¶æAP/¾@\Óñ–•/=[œ£ªQ·®rãMú è‹Õ†äm{PRV£,#:<’ #44%•Õ´çhú#Ýâ¦95¹´Ò²94ȰO–ÄÃŒ±s>ó2 Êî½bcèÄ©L¶×~äŸÉCEq)‹ˆGIIé_ ª@DÆ  I¥  ª•Tw]ùÇf³cðÀ~/­ÉΫ‚,·+/:×aw~A×ݓީcì#=„û§ÞK„K®bͨڌ€Û…ÙƒiD4Í_ÿ&¢™Œ1{=ˆê \ìÕ˜êÇ–báRÂF/óc=·×Ý àñZ²©Ëé®Yëè“HŧÁ5 tïÚÕܽk׳é|’€M))=ëC$ë6mj_\Rî—àÜ5n\z]é<6mÚ©eË—VTµFÒ<“ŸßdÖQ39+@ ¤{ˆîÛ’27*: #o Uqˆ¹WE0…G‹gÏÜ>µB`ÎüÀ5àÓÞŠ‹‹ù›$ËÈ8r"\èÚ¡­{à1@E„³ˆðp„††Ý¥2«Ci4b¤]A‰õ´Ã¥œ!™1lºÈ’TÞÇj³™ýóÕwqjÿá×`4v^“´ò&Z %NzOÿãR” 5¢ª*•Ü— ?%Íÿž1–+Ô=Œz”œû¿¿ýŸÇlv{â‰GÕÆ.]_fͰjó`=Þò£Bø#‘ž¾…ÛOªàöñ<_BD·ø9òOVÔZëèoJõ^Q¥fU¤.‰·‘¦])!¾jãùdçäĦ9ðÁÍËW­ê¡jÒ íJª",4Ô<þöÛë¼.µSB‚5",¬Z·¼¬¬)ª(&&^Ô ú2X²æxkÇæd–™–Fnë…YZ%·í©Òl•ÓóKgQb ™ õ‡È§žþãÕññqØ»g?Î?°P Œ1eÁÁA Bxh‹ EtD(›L¡ tA˜jq©sËÌö#¥Uæcv‡óu"J„9Ëåt8a0ûݹ8u"í)4ä5â0Èýa2×Ê/ªªB7y(ª[*Q¹úvÁð}ññÖÌ X²öÁ™û8TzÞ‡ŸPNN. ¢U{÷±fù·¾ÉL"ºÏϳÜã¥vóñÞ­Ü^áý¨Ãè·CÚh¯ ?Ç;£ù>…rˆè Ü~ î ^7iÞÛÚÕ-¸‰ëX·DÂICk{ð%™Ô…û'MÊž·`Á C§/IâÛ¤¤žý÷Õ¹x`±ˆ»÷ìé¦z“˜f5èúk¯M—$©ÎÂåçç›JËÊBUMƒƒ‚ìhnX²^¨V:LY·nHì´i %ÜjÈÝ<ªJTPRŸy¶ä"zÀ{k…/<ðÀ½ãã;´m®6cÆSÏ:û\Ù[ž2õEÑ#À`4Àd4"ØhDH a!A0 ÜA€[:bŒ’$K*­}³Î÷U]Ž—§eWe¤g¡°´V«õm2gîfŒÜNzv_’«Ýá„Q¸4âVÛT• ðºÖ [ö³ÄºŽ_òí÷½þúìS€Óîj IGþñ…‰pûvxð4cl«Š½÷iäp;µeŒ×Ãèyš“H’ŸrtáŸ+þÖˆî×Ôu¬—±Õq¨IDD„k@bböî}ûzø#£­Û·_¡ªê>A¨]P]²lY'‹Ùlô§ÒÀýS¦¤R®ç_zi¨Óé´dÔ½{÷sM·hÿ‚·(N?µÊÞ^½ÚÞ2z<†W•¢û¬fµ;)·¨ìž¶!ë|V+‰Ì|-¾[—ΙLø×ë³3íU–Oí>ðru•9äÖÑ#ЩK™LL– dƒ £Á£,ƒ nÕŠ˜û"‚( 1šPm°â\ee„•VšéÇMÛÙƒM~tÿ±´øã9ß÷éÞyc¬À‡šA`PTN"*—DÈmRÔúcÿX²8)iåòÕç-[±µŽ&Um´"6€m~Þ[¨ù[†Û±ËìpoºË°–Î>~Hd €¿ò÷Nðx¹Ü¸:À€F^—Ðu ˆH¼UšÛI€ª Ü1vlºê¥ÒhÇŠKJÂÞ°¡N§°×®íáO¥QUâ⊯½æšZW œN'{ðÑGoܱsgOÕËInì˜19Mc©iERÉQâ›ë–¯pfed0AA¤ÖØJT"0”V!ãlÉëºOø¦›®ÿ´s§Žm“7¦ÐŽm¿Î‚=g6˜0-#õøñ¯>[„¥ß|Ïì?LŠâBHH D‘Õøq0Ïþ rÿïY,E/K‹L’$00VVQI{œˆÙ²çðCgü¸nÇÞ%å3.]ä‘àr)n™•TN*îÿ ÉOªÓõ´¥´ll¶3¾¨Zª; ֤ƌ±cðãµÜ˜¼cð^â²ßÝØ:Ö{0x­ÚxKT­î¸#ÿ­Ù³Í•UU!¾$ ðÃòå=ÇãwScþÙ³¦#GŽtªÍIî–[nI«­•••ÒÔ‡™zôhgïú 0 ûÎqã ÑB0††Ì±›Í·/šÿ騿¿ù……3ðÙšÛ˜( ”SXfŒ úšˆùrlüÛ»Ÿ>yeß^ãòòò±icÊWç³w»wßZ³¾GH÷í6³eêá½_9qìdĦŸ7cèõChÒä;1zÄpf2PPßlxÁ~ƒ’cŒ1(ŠBg ϳ¢’²k‹J*®ÎÌ+¼¯[‡Ø»cç@Q€Їøù •G½Q‘HÌ™V\Ø&‚æ–Ht4Tnó'EÔ‡H$I¢a×_ŸQßK:!Uů»ww«®®ý¥ñÕ¢EÝ—Kðvµ¯‘NˆÔGx Ó_üÝ{÷FÞ6nÜ„C©©½óŽŒˆ¨~ë7~múVôßÍí%ÇLœZUVVýÍ‚ ¢è–FøN"€TbªªâÄ™sWVšíoz§qÅuwv¾uäM/ Œa÷¯{No\¾à?ÐaÎ,‚5ûˆB”Ãæ˜Vp¶àØŠe«ØÔIÓYâ€xáµp2-çaxvr8N8].8]N7!( ÷¾eà|EUQe¶Rö¤^wêôÙ]|/˜"Š"'' n¸W<}§~ý§a-¬£u‰•FK&õÁý“&¥_²F“®Õj5|óÝwýÅ_·aC¿ñUWöîשS'«¯¸ÿž3§ç}<01ïÌ™hòÚ÷Ó&:º"iñâûöéÓt§ç³:T› «%`lÊ©#G±#9Ù=Õrƒ+i Èv§"žœ×âââJ¿OJZÓ­Kkó´bó¥9s­bì<{Ãê5Ï]Ñ»7ëØ1ž»+p„uIDATˆˆi·T•¨¤Êsº¨ìU"õÆËó¾;Yq¹ðÖëïí‚=çÍ;šÕqë¾#ó ’¤„$¢÷c¤%ó(€ç<àîÁ‚®+ÊÍøÕGŸ_ùÕGŸõ ‹‹ 4°?ëß¿/ºvïJ1ícœN'\^DÂÀ 0æ&¦[Xró çöòØópº0Iäj EU ª"®â4…J'’ß‚Dâe ‹_¨wš#GŒHÿjá¶þÒLMM혓›ÔÅK²øjážµíû1Žxà¢=;eeeÒ¤©So;zôh‚¯#º$$œ[ñÃ?ÇÇÇ7ý’/Õ“n%éí²³g‡üðíw7Ï|îY7i_d› Ø.œ)®¸%&*ô¯^ëÜ9áv1mƒßgŽkÿ–å ¡N‡cîÁ=û)9yÀ@Œ1È’Äw(‹ùß.—’–™•§* S¹wtMW!Ô¸ÈëÆÖß þžÙÀtï?>¼ A“WîéÓmwþòKÍÑK–,éák•ÆówdddÕ„»îªqˆúË_ÿzuzffŒOâhö{ï í}å•“k>}ûÖ|fΚ5 i­õìææÌ!ŠÛ?ýð#”••“猭ª#•°w÷ÞŠU߯~î-î܃$ % ²Á@ùEÅHË9óIYeÕÄFÕÇœi†%ë)8œÊÍÎ…Õbe¢(B–eH’Qt“üüó¦ìYOM+Dª¢^Øc£v…­‘D¢/ÿþ¶TïÁ«ùÞÐÒ~àÓ²,;|šæ ûòë¯{@uuµøË¯¿vó§Ò¨ªŠ‘·Ü’îñˆÝ¶m[ôâo¿èoɺ²¼<¨°°0Òó)((ˆ,(,¬ù—”7±¥©$Ħ,_’ÄìN'_Å!ÍÎYPEE9}ýù¢o`ÉJñf0Q’!ÉdYfÁÁAt4#[÷þöì¹â—êºZ¢îÙ%ï§Ø¸ØSƒÁM"² Ù Ã`0 44”¾_ºÒõÞ[sV¨ô,{ÔⶪãëÎ0uË ] +•Q­!¢¿ñ},þâ‡Ñ‹D´›ˆŠˆÈNDD”JDßѳDdjle}ö²I-ž¨ªÚp?€ððp×µC†d{‚ö“’’ÒÃår±/¾ü²‹Åb1Ô¶ ýÈ´i5jÍ{|ÐOQjQüÕÇóN“$9üÙœYU}hgò¤î?ÈT•_ZB‘Š  6÷ÃO 3oúÛ¥Ä ËdI†A–! ,8ÈDÙy…†5)»^Ý4-…ˆnmh½žû×£o¾å†öÁÁÁe7™L0˜Œôöï²Å_÷Z•¶LÁÁ Rk$[¥†@ܤhu_®žØØ¶¾\«6ÍzÍD3]MqY ^¼KóOÔ†[=˜2iRZrJJ/mºÚ|JKKC–&%Å/_±¢‡÷QÚ•›îݺ2xpddfowïÙ¿§½óñN³©ôöFþ, [T‡ãݯæ/økŸ«ú²ÈÈ’lÀÏ?®EòŠå¨¾”HÜ®é²A†êqúâgÁT[mâæ]®?žyzã‘SYG¯êÙu܇•×yE É)»=~äTölXˆÁ`€Ñh„ÑhD^~>˜ý_v&;÷;2g<  Ë){oß°û¸ÑápÂdáaB"·Ê "T[È,(YHDOØJDÅ‚ ¸~ DÒ×L4ÕÕ—ŸHj;! @UU•œ™™Y/U ::ÚåºgâÄ‚ç_x¡º´¤$ÔÛÀëÁ¼ùóû=z´ƒ¯¾žÁzû˜15¾#ŸÌŸßÝd2Ùý‘„¯4¼Ã‚ƒƒ›øÒ°R‰9ÓÅB¯˜SUX4âÓæ ~öÅçI%VTX€…Ÿ/ú(Ýì;7ƒ,Áh4¡¼¬‚U”WÀ¥*¢€ÂâRZ³m÷U[ö¦~Öµcìg;ö9r È$g+ «¤Úø¸¯¨2w(«¬NüæÇMÃÏ—UÀ`0@%"«ÕÆÎ+FÊæmز.ù¼1,|íK>üñ²”ûK+Í(.¯‚ Êðœ¯â¾çÂÝn5T€$ ”–_YTa]Ò&"IDÖ¹r$„›FÉ&ÓÆÖL$-qÍDS]MѪˆä"|³xñàE‹ö9p} V"ÂàAƒr6oܸAŒ¼ùæô¥Ë–]í=˜=±>œP›!Š¢úäOԸĿ7{ö‘÷fÏ>ò?c£ªÎÈg¡W¼xhÛŽU˯èn0h¶mJI¯¬¨|®Év»v«>‹>øY™Ù0¹/¼j‹˜Øv,"2Á!Át옑™L¦Þ²ÑÐÛd0Àh4@` NEÍn‡Óá„Ãá„Ãî€ÝfCEy ‹XnN.òÒ³²àrn†(.ö?ú Œ D‚à& ƒìö1‘% F£²(B’EȲ$1Ya2ø¹µn_”v&–ScëewHcŒägœ¤ruÇsÍÄŸ}L'1Þ·Ø1ƸO‰÷7§õ[½ŒªþÂàçÈCo `ßþýΜ9cJHH°MôÑô%K—^]›ªák x0xðàÜŽ;Ú[cÛ1h=E&Üí•K–½³ií:˜«Í/+§J}¾,Äã|á9ÿþ9²$ÁjµŸÉ=qêid³Õ–Wô;›uz@ý :š‚LL6ºm)¢äðž=¤ž•UQÜ{mNØmv§Ëb=Uù`[a A¦¢$1KUeñ¡äÍý°›öGåe.„‰‚Gd„bX³ÓkáVB$|`7õ5Íu5Åe[µ©m0d{І©ªðñ'ŸtûÍ7 :´¼s§Nç²srbȪQ›câĉi­¶íЄ¼0ö)Ê/•%eV(Jªß÷‚‚l»}IVZfD«AgSjŽ é¶`2 Š*Û,–N6 º,žÛ CྠÁ KÍ%ò@”  ²ä“0g:aåW–„àîÓ!ËBª«CÍ$RoáVD$MyÍDCâü6Œ­u†_‰ÅëûêU«z¾ýæ›Ç`üw¤Ï™3'ÆiøK38$ÄþØ£æ¶Ö¶óH$MB&æLî~ï;þññ<Ë@;‰•8Ô$¶dZ/W[·&?¿×LÀ}‰÷J¾ÊsÍÄðÆÄiµDâÃ-¾¶C…|.±úX¶ÍÌÌl·sçÎHxòÉ'3A¤^”¦OZï|n6,388Xm­m×®ìü_ki?’Që5Œ±»á¾{w€×xŸyñpcã´fc«_â¨ãˆž¨ªªbþüù= sB‚m@ÿþ¹µ‡|¦M›–Öº;ºŽæ§êVD$õ¹f‚1¶‘1ö2cì k4ïnª8­•HêCjÒÊÏë×_ár¹L™2%½>ù´k×®bâĉç~Ý\Gó´o+2¶òk&¾A-×Lø@ ?-ÛߤSÔ˜8­ ;–Ë’¤P«'›†?‡¿–’’uÛm·•þñ<=oÞ¼s6›M ¤\÷Þ{ïI}(鸜DÒ×L4ûÕ-Õö;¶oßÐ… VO:µRï· G>º €:‰ űÈÓQQ‰“E…“nCþ÷€¹¯ 7Fl‰ Š2Ôvœ0C•½kMÁ²Âe-/„]ÞU›–¼f¢!qZ yÇéÛ·¯YŸÏÇñãÇCäµ6#ÉYt“®Ó°ƒàˆŠ‚HŠO²¤ÁùKÜ ³Þ‚µÖ;›ØuùU;3€ ¸¯ŽØà#Ƙ¯–FÂí‰Úî{uCáÞ#“ ÷ÅÝ ø5‰ÓÒØ¿yóæá:‘Ô›7on‡@ïnn¡ù9]#Ì0…A€Z\NÕoÏ÷y ʯ°"Y xœ=D¨ì0cø€Ó9®˜1̹ïÜ1ì+J­£Ä ˆ„ˆ †¾†WðH÷^˜›ù €YI#«N‹IK_3ÑWS4ÖϘ1cÐ3Ï<£³C=0cÆ +€õuvr"~ŽkÆ5…|tmÏÀ–0œ AîŒáû¤€s‚³rAÓ³]lÎ-Ì 1ÿU« ab9º\q3D¨¤8ú@4È 1©Êí*cô‹žŠ•ø0}8|l&lr"!b 0Fú™­—{œ™2eŠcéÒ¥¡zsÔ)S¦TÃ}ÍÞºÞµ˜Í¹;uì!ge§³f"‘. lz1®ªÔ¥P108D¡(í|A:ÄèÿËóWNв+ŽšsCvErÞ.@ɽ—8@%Ž@¸*ª?þÞç~)­¥Íj0 _7QÛ—•—ëDr™ñ|RRÒÖéÓ§o5jT´Þþ±aÆҤ¤¤[q±±Üÿ ÏËÿ°ÿ€ÿ}àÁÇWUUeʲ\Ý$VÆà¨®¢>‹V„Jö $¸yã¼µÂñÑѤ‹Và\¤€‰—ªê'NC!Bç°N0Šë#;ǽõH̸2YššHIQ”Èø¸¸§ËËËÛ¥¥¥éDr™a0}ôèÑ_Üu×]»V®\)ëMr)&L˜à\µjÕmåmV'¥ú,"*òêž½z>Ú¾}ì‚&³¼2ÅnCtx8L•U°xnýn`ú.Õ…"K‰o®¹èðê@Ò'Ï=Ÿ„8c§8µÝ¼.1] M?Ì*++±ðë…¨¨¨8¢ÉåG*€á«V­úc¬ëôéÓÍœ9³Kbbbõï¹QŽ9ºyóæ¶³fÍr8· Âhü´´v‹Å:sïÞ½y`ìIM9ŠTVcr5žr†2§Ûƒ‡±† ó¡ y6vèBD"€ÉÛ*`9X…/ _ø|»1´ê9PËl6Ãjµ®ðŒîEܺ0Àƒ$àâÍ]¿'ˆÎÀ}ÊÝ:þ£ß©Ý#“¼F,Ð퀭™á/¼§µ‚à ³ÃôV¹øE$¤[„‡æ*Á\ùd§ ‡“³ ðáÀBØÕØšr1NŒ,Õ_Òa€´µ„ÚülYd6½¨€œ í®#vñ”žKË=õó<`^m£ÒÅßÝöœŠ‚³¹6@ߎ CG£°qmaø:Â]"|¹ÈV æª/Ú™fí*’ÖXAâ¤6¶;ÏU8o-bj~5#;#ÀÞÅоúáöÐÖ˜žÁ¡2ys‰«íëW–ÂÇ[²t"Ñ¡£‘XƒØ°n0~ qº\™äÀ¡1á|{’Ì*ˆ™Àì ¨*M¤ÿ7\ÉqûÇl¼©²¬› R¼{„2ÿJ‰‡Dªœ,h}©#r¯ëõ‚òü7.‡©C‡ŽFà[˜caZ Á&·È˜?SD4D!”€(¥m³™ÒáßaN׉¸6P^®`XlgSÁXX­$Ì.²¼Äv\y²°$ÿ¿—£ tc«M€q(²ïA‡wTÐ9;hžÐ$ͪ„ª…‚Ã#e8Uw_dØpÛ*¬ B•Eœ—É?—¿Jÿ%tèСC‡:tèС£ÁøÿŸÓÙç‹BÉIEND®B`‚Carla-2.4.2/resources/bitmaps/credits.txt000066400000000000000000000005441420416754300204210ustar00rootroot00000000000000The pixmaps in this folder were made by falkTX and nieee, with the exception of: canvas/* - OpenOctave style/* - Qt (from Fusion theme) *calf* - Calf Studio Gear dial_02* - TAL Plugins dial_{11,12}* - OpenAV led_* - Image-Line (need to find a good replacement, suggestions welcome!) rack_interior_* - OpenOctave Carla-2.4.2/resources/bitmaps/dial_02.png000066400000000000000000010200611420416754300201400ustar00rootroot00000000000000‰PNG  IHDR9Ð|ú^µsRGB®ÎégAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<ÿŽIDATx^ìý˜¥U•/þ;9ŠÅ(fÇ<ê˜1€äФn2M“¡ibš$QÉH”$"ˆbBDAQÄ„:êŒ÷zuœ;Á;y.Œ3sgœ¹ÿçúþ÷gïúžz»8§Î©¤_ó·¾Þ÷ýÜû¼ÿñ|}믿þ/ŠÀ÷•Ï\¸*îo¥„,æxä«_ýêŸÀ þò/ÿr÷;¿ó;Ý _øÂ®hµÛy练>¸;ì°Ãº#<²;ú裻SN9¥;ꨣºÃ?¼;äCº}÷Ý·Ûa‡º·¼å-]yHÝoÿöowÅ|»ßýÝß­ðÒ—¾ô§Å2Ž\aWHÈ"Àfåÿˆ6~ë·~«Þ m¶ÙfÝâÅ‹»ã?¾;í´ÓºóÏ?¿»ä’Kº÷¾÷½Ý7ÞØÝsÏ=Ý·¾õ­î“ŸüdwÞyçu'tR}Ï™gžÙ-[¶¬ ¾Ï>ûtï|ç;»u×]·jø7ó7«YóÿÑïÿþïo¶"ÂÎYÈ·¾õ­×17#­ÑØqÇ×½ï}ïë.½ôÒî²Ë.뮸âŠîø@wíµ×vŸýìg«pW_}u·ë®»vÛn»mÕ áÏ=÷Ü.ªBûÚgœp UËÛl³M}xþއé¡˹n®‚N,dÑÞºððO•YúƒóæÍ«¸ð »Ë/¿¼»òÊ+«`\pAwÆgt·Þzk÷å/¹ûÊW¾Rµæý[n¹eÕø&›lÒm·ÝvõáÐ:í{O„õN>ùäjîo¼qÕ¦¿Ëi­þàU¯zÕº“ ;‘EÀŠ#¸ŸCñT‹ÙtGqD}ò„»êª«êë9çœS×Ü 7ÜÐÝu×]U{4³÷Þ{wÛo¿}Õ !7ÝtÓn£6ªféÕÏhïƒü`]»&äÙgŸÝ~úéõß .$\ýû¬è/xÁýåž6šDбB·yÉK^òsæâÃiÁ·ÖhYžuÖYU›ùÈGº¯ýëõºþúëëúäT·ÕV[-' áŠWîŠóêÞô¦7uet‹-ªk”°á¬W‚žxâ‰ÝATßç^~ã7~ƒ—þyt›q‚Î*$ Ðr÷»ì²KÕ”§lí}ô£í>ýéOW­}ó›ß¬š³÷ÜsϺöún¾ùæ ¾ãï¨Þ—G-{bW¶Šz½æ5¯©ó|Ï{ÞÓ]wÝuÝ'>ñ‰úÀ"ôÐù,ÞܶCÐW¼â³jt¤Ö õÔèÆ­¹Ûo¿½ûêW¿Ú}ík_«B6™ïn»íV…ãˆvÚi§ºæ¬C7e ¾ûÝï®&JÀ4T#$áÊÍÚ2u;)ë®þs·>?þñW­Sï#(”÷Þÿ²—½lä)$'c 2Q$ ¡\Lõ˜cŽ©Œ—df»ï¾{Ð{i€Ìtë­·®¤˜(“{ãß8Ð aÊí^þò—w/~ñ‹­·0$hXguj`?ö žð„'tÅÂêçÚbÜcù½Œ2Û¡BÚ&x3‹Üd¢4HÀ%K–Ôµ±ß~ûUá" í-X° ÛqÇ«#¡Aë Þs‡²ì„î¸ã—uG½´;øÅÝüù ªÉ.|þóŸßm°Á5Ô³W̽ðªO|âk`ÿ(øÖ³ûô³â˜†n/ÒFï r×¼('c 2Q$àþûï_7m7¿Ç{Tí1Ïùóç×?ì:¼˜ï¥—_ÙÝôñ[º[ÿð‹Ý§o»«ûÜ÷v¿å»;¿ôõò½/w·|î‹ÝGËÏÏ9ï‚òpvªÚ! ½‘¶)±--ÒËýʯüJ]¬„%Ѿû%x1Û R$Cýþ€uF0NÆ\ºtigáûà½öÚk`¢4H{„<á„»«®½¡»ñæÏvýäíÝmŸÿr÷©ÏÞY_# aïøâWÂú9¡/xÿeÝeí”Ý´@žpü™§x— Ö¹‘yŸŸSÿÑL³]NH±(᨟6샶 ^”©Ú˜©=ˤEë‰r¼ÿ’îšë?Ö]w㧺>vKîæOßÞ}æö¢±"0 ~îÎ{ºÏßýµòõ7«foýûë÷®¿éSõ=W]wSwÌq˺W½úÕÝÚk¯=0SÒ^z&ËA &,![‘ûfÖÅô—‹u—R°Í› ÕD26xžÓ6ñùϾš(aâEiöº¤»èÒt—^ù¡î×ÞXnôcÝMŸølôŸ¹£j•æCÐ/Üó­úoÚýÃ/Ü;xßµ¾¹»ìªëëgœ|êYÅ9½©jeñ¢3…äŽ=öØz±,kØûŠ%ü´¯ÍÒ%&âiP¿Í]$c£Ï6'c z .^|hwþEWtg_pYwÁ%Wu_ñÁîƒ7|¼ zÃÇn­ZeŠ4Fƒwßû­úJ8{Ö«÷]vÕ U“ç½ÿÝ9^Þzæ9Å/¼¶š!™( æ"ü[lQ£%™Î»Þõ®ú3¦[Ö÷ M)´ïXôL€]„µÑÛ2ì•Ì”€4¸÷¢}º3Þ{^wÊ%“8çýÝ{Ï»¬jóý—_[ÍöŠkn(š¼³^„¢A‚Ñ"a™2áiœöüŽEȳν¸[öž÷v‡yl·nqB~_À|mŸ¥Iiœ{ã¨XcñÒ÷E›UH½„—‡²eˆ.ì‹bQ¡šõ˜}0‘Œ½ð”ÓÎê–.;­Þ̉§]Ÿ>a/¼ôÚîü‹¯¬7O›Ö$íåúò×¾S׫5I“´Nûô{ð˜NïN8õ½Ý^‹ö[n-ö…å…-!àؽþõ¯¯¤˜ò/Êš­†*¤’OFýœ oÊáØÅ¡4µmô‡qT·ä¨»ÃŽ>©;òØSº“N?§;þ”³ª4K‹LÏÚ$¤õGƒ_ùÆwBÓäu7–°­8†ÐÃ;áÔ÷ÕÏ>úøS»·¼õíC5I A?ëÜ»7æmß,¾å¸j2Ü4‡ã‰ˆ?¥K² BZÔ„ëoöG{RwÀâ¥Ý‡ÓuÜ{ºC<¾;öÄ3êM½ïü˫ɒ&mÌòK_ýv}ýÂ=߬ë°iú–î’\W¼f ¡Ž=ñ¬ú}ö‹êöØ{ÿîWõW$(!m9î‘´Ê·ðÆåû÷„Tt²°Å”r;U>Èáˆý¢5h/´/Úg¿nïý«×Á‡Óí{ÐáÝâ#Žëö;øˆjº4ÀtyJëŒIZ“Ÿ¾í‹UPZýè'o«[gC‹4H0‰™.9jYÒgï±è nŸë^òÒ— Õ& toÖ¥@ˆèoû@²„pk‹pØ9‡"Õaª^kñÐC­±hòA¡Ú’#–v»ï}`ýûîu`Ö+m6žÕþ¾ «Fi‰@4–½Ñz¤I𿛀gTó§¹C?¶~ÎÂý–”ÏÝ¿¾îµï!ݼ Ò½ÛNOËr|Ï>[|ÍÚ+±ß<€MVÀ-ÂQ²Ñ ç¢AB²ý-·ÜªÛç€C»=÷9¸Ûq—EU¸vÞ«>qºÁ×¶uD£<­µÆdi²mþ÷Nm×W­?BÑÓd>ç=ö­¯(!çﺰxÎß*¨ý±$u+Q6¡IArÞ㊠^ÆéØt½`j2Â8‘ á,æ$½óìÜíYÌgÞN{v;íºO·Í»VsÚeÏ •'Îd]ÖjÌÏz³EÐ(m2Ó+?ø‘*`[sKëÃa~—övÜea}õ¹„ôïwß§[oýfuÃ.Û¥¸_¼x·¹ìqEúK“ÆX¸ªjÌ”gõ昩MWj³Û{UÁho‹mç×§òÔiÖM¹q¯ñÀï9ó‚*döÅ÷žwIÕíÌï.Üoq}póvÚ½¾úl‚n¿`Ïúõvó÷è^ú²WŒ’àJ$‚}¿8ŸKW‚€©Õº´p• ¯¹æšº“.1S‰¯|pþλÕ?ºéV;ÕÉ ¸ÿv¹Y7ÊÄÜœ‹c:í½T§C@Zó}V° hÈÃñY ‡f)ТÏñ5Ëñ³W¾úµ³ )Pe`´Y‚›W¶›™ªH‡öhQàM@ž4e I¯½ãü]ÆdÝŒqs´çfÜtnŒ0n–0$ŒÇ "ÌVÛ5 ñYù¾€~>NÈhSÊëåÝLÈå4yË-·Tµ]Ñ %¸ÛÌÛaʤöœÒÀ´ieÛw›rJ «ÌÌ—€¼ª`fý¬9°…S\T?» ½çr$ ‡ó{/ÕXMr@„¤É"äÌõRöËê` xÙ˜h¿.CÈ­¶™Wÿó¤-O¼9ÅõûœïÑšµÆëÚû(ºáaEAþmÛðsŸå±¯ÕɔϠU-&¼õö»t/xÑKfR•ÁR³§bñKWb½e¤f²ªÖ F ¼¯¤T€àR—ñ„Þù®ËMíWo&‚Z_4@¨Ü,oi+àa $0hÞõëU›bUkÔ¶ÁѴ탠Ñ>aiÔóºKüiOÆH!E:ÂO%ZÅMVï:ëµOÊø.é -PBšêšo×=÷ÜŒ#¬-ƒ§¤Q7.býPDC¨$Ì¢©•ÐO¬k?å4A—‚µícQýÞVóæºe3·û¤zEÙ ¤eâ×"dÝ'×Éû%jVÌÕ›ÖY›LTeËú­e­¶Ý±þQ‚¹‰„tLϾ'•PValYÇ=5n°‹€$É"‘Ôgùž™…´í¨iøMom‘̰KÄc¹Q«K^YÚ€k×,DTìJ æ*PWµVå–¾Pm´Šº7¾é-õf܈}0¦æ& )#!à¹%™–_2S&ÊTSó‘c Þ J£Þ_óÇb^„e„õP×yæ³FÆ®–—Tœm¯ñ m±«ÿéðZ¤ ºž†ÚŽ*݇>ô¡Z‘‹€_5µ•yÅ!Иu—µ'<;åŒsë Ð…t4&¥¢EÇ“¯•Fð4íø]JÊF8ŽÉg{ˆ[ÍÛ©û¥’ïÎÔb²ÑSe}´*Ý*út¢…-ꑞˆâ%Í´)²>m®Šº´¨>ª6ú¦·lXC1 ¸9[™Ÿx•7•0OštY.ñ+ û¹YŸqöEu’SŠé/>bY·Þs6™OÖ¤¡³T%ýÖ'¥•õ8OêÑka{*Êøœm2Yý{%×LƒdœÒ±ËN©NÀJ Ì~ø£Ÿ®…,Á¹×~)’ÀÖ)MËFh=‰ßgòíáѽñ-ï¨uÕak1•˜*k#GQÚ/ÊϦ+S&{·«âEíu­ê*)à&m-Ò±ï}ÿ»óßy'.¥A2;7M‹q{b‹Y[e@€îk&KpB2Y… L—%ЪtmÇ÷(ÛÁãG:NѾN‹²éÕ”©._ã!$‚xÏÓòfû¥þ G$h/åÊ*( ð¯þ꯺ÿøÿè~ôã?-¦yåÀLSb†©ñX‡©Î¥ É„­Uïñ Ôyh>UÚ\TRºµŸ¶ÎH…mLUÉFe€Àî_öQ,óÁÕ:‚!x âXO‡m)Úg" ™þßÿû;×7¾ù­R>, Ù«?ðÀ`/åÑDÏxÖºÝÞû\M0=޶mL Øš?÷ÔŸ[§õþýKð¬g®±öö·xR[œWѽþÙÏ~öì½B‚‘Öy3^TK¹O³ç¿ÿ÷ÿ>ð_þå_jÑY"=³|ÿ¸Ç•žÄSÖî6ÚdËîø“Në®-Žå“·~¾j°ßݺþ¦OwÇŸ|z÷η¨ï÷{ã´—Ÿû›ÒAûbÑ\õ¨âïâQÇwµ F"Š÷‹B$&¡Ãuï½÷v„û?ÿçÿtßûÞ÷jEÝè7afÞä/—'þÛÅôž¾NAdmPzÏa}¥ñßþÇw¿2¤Ì8‰ ÖŸ|×þíýv†"ìdýÉ”ÖÁHx/¦kŸ$(óU9øÒ—¾T##Lã£Jø“Ü슾ÇVÆ›Ò(gYÌtnf‚ÂÉ€‘$z`ºg%•l7+z“sý½4^i0]i+*ß{ 9wÌÀT€°tEÀ}ÖŸu`ˆ€üQŸëMOò~Ÿk›àE9—”dh€‚ðâ ^˜CÄládJ£ÌBÎÆÓêðrH:Jò7Ý%!Ó]QóÍïú‚Ø›-/ÊÉXƒqt,ïÝv¥p<ùe80’àé³”.É&¼—÷ª‰d†mô“(f…„ÌCY!0Ý€{i˜†Ü¨-‡FxEæ(ù&,íwgpø>­yh,ÄçÈ&Û3cÑIë¿g¥„Ì!èÑka[;qï4ÁÍ <f.&ÂÊ÷vð>‚MáÐQ–Á}ýti®‚­r!ózôZØ:¼ ÁáЈ›'/êÕ¿™¡‡â(:©É(Y$£_ÁV›3oJTPûLwIóEoBé¾|}©Â¯º¨²áªhØç¬suƒºØš¼z Z„:hLú/Úª÷ŠÛj¿!×_¦È/¢‘‹-ç1I~$ÕT j3òËÅ_\ b@PÊ%’ï?üÃ?”;U•äeKH.‚!½hîêbßvÛmµð$ÀaSqRTGzT‘_Àdh6P´§š ¿"àùE®Ì)´cʧžzê€õóˆ#¿2IˆJ7GH˜uÂÑž5(NâI¥©ä™Þg0‚t"´Œ‡•ü"¥zÿûß_+ìŒ*@Ãÿ|á _¨‚Ý}÷ÝuÉNíŠNɤ¹nHø!^e!¬@ã÷Áà˜3Áò‹l‚¶>ó™Ït_üâ« !½x…ä¢I7êDE¢dBkwµZ¹T+Ä­aúX§„•˜»¬áÕJ~áL˜]”ÖœŠ@è´ÖG5Ïä†0Ü>»Gÿ“€ýþ§6¡‡áö¦›Jç«XOŒÍÀìW9ùE» Ï ‘ ûc0é® šÃî ’+fj J®c¢0òÏP—ÒÿÔäÕ=Ó‘»üÛûäœi÷«"¨Ú­2ò „#€·³%„ò‹"óLn/ê’Gzß1Ç[ÐIݲB©8²xÒý(ÀÃò3æJ@©ÁÜêx‡Ý#2J6꜓¶Wù…`š±ÌÔš A‘J¨ö»>šæðÃè.¾ôŠîƒ¾©»íŽ/×FÏ-ŸûBmòè`ýá¾V{!È/]|yåƒ0×h°O~‘Jɘg˜rUí Kb¥É/´%ØïxÍ´Ê™lê¡OTLl¹Ž*^ñÊk®/­»ONÁZ˜7—Æ+À½†f–ž¯oþäçÊï}¨l3ÛØ=!¿„ƒ`–§*|­4ùmÂV¡=Àd£ÁÇL³`Qwîù•åõµk œD°ô ÓV²žÜÅ×ézù½JOó´3Þ[ ×p ‚øÐ—BaJ5Ð4¹Òäû Lºõ¨ªf}0^”)ä² /¹¢b@Z€"tš5ajùÖú šL¾NçÙ{™qã‡\ß}ÞE õ–*$3 }ifáš#ãáù…&¿h¼Ú™ª­Â‡1Ó°{)YÅYç\8€cà hk«»aÝcdf™Žó—¿öÝ»Gß2½Ì`?äšî”ÓÏ.ðš×Õ"I~±.í«+M~ÌÅØ”Ãϲl»í¶{¹‘BË-h °”pB Í¡ã à e‚°ám1c?# šE0p@g{iwÜ ï)åÈu‡ HH•A¥OýÓ"¿@L~êSŸª^U\ÉDãI­|*€%A¡5@]‚°Òg¶Ì`Ö£×8à%ÿ†/ ý>ÇExp°<{ö¨¨ÚoÈÞs&¿X‹ -ò®Œ“±*ëð‚–ÚÿR1/7¬ üuI›aÓÑ¢í})ëÐ÷˜2ms:aø€ËÀ¬ôñïé^ûú7 ­Â3eQ”ö„ímNä†6aóù¥ŠwêŽ<æÄ ûƒÊ‚‡ƒ³ë„Á ü:2`¥Fzùb2×P)…éš*dYô°B„Y´ÿ!Åù´ üÌK4D›s"¿Ð¢¬‚™b‰Ï¤ñî»ÿt[ÚE“€}àŸ Zº\íèÆM5ÂËíS¤´oZ~Ö¼¦þtËð Lè³ &_ñÊWR Àº”T&"¿p0öFYF8ZöÁ”õµæö;pÉñzyÿR9¼Ž %9¢Ó¬·°_9ëѶÁ9Ñ`°tL><‘ $¡1=ÀívÜyhï“ç—c®œÐXò gsÇwÔ-ƒ™ö”ô ¸÷;è° ¡†VŸš·6!޽2[PNÚà%9‘Æ“l^6¼I&BGöÉmAF²Ž@¿ ºÛ^”=s­¡Úi!Ž%¿ð 9ŒD¦¹í‚€’Þ £|û{U|ø–óT|x¨€·„„M°´AHp2N†g³Ò,-s0„òP\¼Ìßåo„kR_ Ö}ù…÷ Ãg$ùE°+r}IMH™™©dv§åòÇñBº`<“¶çfbÑ9B2SZ% ³¤-~ݺóy~·Ñ.ÚR  ¿ ®ýê×¼ndSWÄ“ûJ~QðU_Q.d¦}úRÿH‹ìZ,Ę)|xŸð ’ï¹9Bû0dÛ6bå ä=„òê3YÁ–óv©ùìì½>¯}} Žº„yî}(ùEeÛ¢UÒÛ*fžºâæm_4\8mMºÜHnÐõô™®¯#dŸüB+4E¿ß[P¿& á¼Ç2“ÈïûWÿþëǶçÕ‚Jyù…wRb"q09VFVÏ{Áì°S é¦x!Ód±EU„ŠVÜdŸïam‚1ÝÆBhlºð>ÚkAyLñK6Ûz~ý·ï7ìe¯¾ôáhºØí‘äûâ‡?üá¾…Ý#¢È¡$[n½m1³ª¦B~±–˜½’&à#Œ‰Š~Â$¶†_nÖ€Q=aõ±Ý~ÁÂ[{Ѭša<${Ñ"|ùEÖ¡†ª œdÏq…ò®Þ]n¬±ëÜ !ܘװVC|±-ˆei0´ ÈeA¹ó¬<*ÇãwYƒ‡Ã <(Îg3å¦ÑÝf%¿$`gcÉ/@ö{dJ‡ Oo(¯;íºWÕgBXB¹Qß³™Ž–lð´áK§ÚI>_¬Uƒ¼Cï 9” ‡®Ø§n?÷¨·£â†]Ê$ò݉È/´I“L7'P}Tf›ív0q¬5Z´¸Y‰ÐNˆF@[…ȆWMze‘uÈR˜±÷ÚN|V5öÉÆŸl´&~óÛÞ9+TÛ’RwrÏ‚md$ùEÔ#fOÓ'¿¼áo.Z[\ C]tC{¶ éRl ¥ô2AiµU>QAù„´F JH-„âoìPœÑºë=w¤”Ë)'&¿è2–§åç` ð’—¼´P~¨‘Š§Ï±4^ȹ•‹ @@éhÑ:lë±aÒýÛ×J&-8oìtæNXQVC“›o½}÷kS§Î4Uµ µ'#1öœÈ/Ìþ¼_UUÞßn‡»£;µ H‹¦M´²‡õ§ÆÓ(øw 6±>™,kÍ ýXGEPN)g ,*k}g §0ñ¦!¢­ùE³E}‡ÉªVÝ+d}ýßè>xýG üú½µ"Ðx!Ÿåæ•3Bn Ã''¹¨ñ¤b@ÛÊ´oý†Dc/%,Aß²áFc¸›©Î™ü¢5à,Ke[™_a4ûŸÿùŸ»¿ùÛ¿ëÞÙÕU8fšS"xN¹c¨Ô«Ô™¶ýòÖÁ‰œPNá•™¾òNØoüÆoRϾRäëRKsTÔ#óþÁ~Ðýìg?î‘_Î{ó¢œH­NwAˆ8F+üÖàVm„4Þ—öý.‡ÕŠXw{•µø”§>m¤­E•Õ&¿ØNì™j®?üá»ý׈B£Ÿúôgº¥ÇŸ\o’Çlu›OU!8ž5ä—F_jšÌS^9(NHÍõÜ‹®,¹ãþ³’_ÀQmkÖáJ“_d&¼‚ &AH/^ý[‰D0¿V)Ù¿{³­»ËËMÒJNˆh4ÂÆÍ Ä>ï6ž¨Q€/ìÞöŽgåg*­bªÖâJ‘_"$aþë¿þk $ÚÄw¿ûÝ ¼B…ü‚ß¡èÔè½÷ÎÝiÌž»5Ø>!†‡½ä,ÛÒU{£vý­C*åo«é¬4ù…)ð²NtÉZÄò±6•ô'ßÌMüʯü:Ïè6ÞtëîäÓÎ)šýhÕÁÒÝb¾¹™™¿§’džü”§•òƒ¢©œP`•_Ø=“pvÝŸþéŸvåèZ6EÀQàú_ú¥rzo¡>}gv뮿AÍ"žÿ—êǯõ„YcÑQ*uО:°´j•_ÒÚæ®Å†’iM>‰iMB˜Ë{˜jÂÍUJ~Ñ£2yåÕü!àáRh sòKéFß¿JÉ/zöË`âîö«àË碑Iß«9Õ®­wåÕN~±àUö€àm8'åùÜÊ ë÷5qŠf*›Àç² ËDž8„ü²Í8¬ìD ÞÙÈ/´ŒÐöS7F³“j)Œ¥~ÙŽÐ1èIŸ'ŒÕ(Åä˜+á8wÁléCJ~±†h ÑEæ‡)2O¹$æZhÈfßEòKΧ$ -I˜qCdþ¾çs|,!OSxµ“_|»4„”'Bª¹tb¢9#6Ü FQýÖÿT^T u‚)Š3â”8'U‚¯ò Z{Ö¯nHÈ/}nHàj™üŽVÈ/™üÂD¤a®Öà}Iü’Á(’k&,©æ”r˜§É*ü ÛçO×q2ƒ‰lìßœ—n 6òË>uHÊ©§–©J'•“µËä—}÷-«âhÒà¥A ‚H8Ðk©™K![¤D0Ó¬‡ˆý³J&¿èjq"š>¡âd˜éq'œ2©^ZF°7p=„¤Q¦„‡5IƒÖ!gÃTƒ) af X ¨ ³?õÌóºýXÄÑÐ!Máe}mj§7ZÃ¥7†Pcø°’cN8­€yG×/‚š3ùÅváLW7Çà  ±¹Ï+›ø¡G4x5è \ÃÁUG.š´>ãLâph®Š6mg SÄM0¬Äß6ùET„$ÔsM4ùÅ>(àF_‚Æb¦}ú’ŠøÂ½á˪ˆèä° à_¬óĺ>™[fmµý±Me²…â"(°å„ÂÝ0"Ó óu#ðçöTÑ×ÄäBŠj˜©Åܧò&=dÉ‘U‹`Ô^oÛü úsƒ9ì=вцßP ®®Q—L‚)Áx±” ^°ûеIÃ* M~ኅnR)‘K„%àÎB$`[°iÀøßßf~”ÕÔÙå°q4FfÝâB›4ËDñE¬?Äïù—•¥àsY‹×ßr¤c†ætµY'¿¼eÒ™ŒZ u‚eó¶Û¾À§Váßaѧ2J~A4ãÒ¨5 ÕLÈvdø§KÛ;¥9ïcæ9v<'Ú7Lz9S¹¹GÁù¬·þpÌ«¡˜Ú~9ëäÚSEãŠiOV1óćwZÐm²e™çSpáÌ€„UÀªÝÁ=ù`Ó Âƒ2Ul;´niËÈÖx¶÷٠пÿÓgÿ‘¤4Ú”lrÖÉ/¼“raŸÂDƒ!¿È·Û¡Ì˜ì 4 /„P!«Ðp3áý£j¬+ëL`` ÒZeA°çmÄM[ï!Ö„oò¦· "&’žå¼ƒ‘ä—dáÂ8O#ü¬Œ;Å*ØiÁnJòŠ5Hh7D¨pCüÌ×aêäÁ2%P2&ßa«€ùgVж;îѽþ o¨Æçˆâ‘äštì„(GæÏÑ0•5‘þ¼íiiÚ„h¾Vlá€aMñ’B5Gð^–Ï Û÷£Éi—BL0/åkfÅ!Ð&Í:ùEZeŸTf ÍÉ+„ÜbËmª#ùŸƒ@qóaõ4z`›‡gkÈ0æÊéð¦0æ´™¹?Ñz&01ÙÆîk$¸M¶Ü±{^9³y6°…`^alÖÉ/„S;•?ò°ýÊššÌÛßñ®ò„KNYÌÞ5€a&‹ë«­ {e¦Ú.B›àxö@ÆMÎC ›`f÷d«Úv‡Ý вº?ê˪úvÖÉ/„Ú©ÎÑ^ Oàf¯ýóldPBe4›£™L1 –<¡]bÕ #4¶Íïù<ŸçRšµÜ¦7•‘SÛï<8…t”m÷;ÑäçÞ¨©2ÕŒ¶Q:TUÛr›í”† DÉÄB¯ xߦMˆ]ÛÔÂÆLOD fö•Øb2]F³=Åtiûm:«iξ>1ùEš% ‘Ó ]j£o(“_8’ÆH7¼¤ Û”j1O1«0­~»½ úRæ„(‰é›Ù•¬ ¤ÑæÄÄÆmpà‚ÝuÏ^oô8ªò7Ñä]ÇAiÚ2 Û÷ÀC«`̼_h‘-Ûo'B´Ê@®/X>™óCÐF|Y6Èh$t“-¶‰È$ûtâY%ÎO~±&iSXùÞ«ÀÀ¡\xÇ݉SIò4/dz^H¢p2™ "f•07¡¿\cW9¤9ÙG?0g-Ìtï¢ÑõŸÛJÃ.åIÀ'‘Úœ'¿Òys¼•¾… Ýÿù?ÿg÷oÿöoÝuå@¡6ð¶ñBmñ?뎫æ|ŒµÉ´íVܺµÖs¬Mñ- ½pZ,Ä6Ľi–É//¾Âäi—¬DP Ž×þíßþm÷óŸÿ¼îÿþþ±»øòv‚Ã2ÀÖz‹&SÛ±•õ¹î'y¯èÆçñWùä{e+˜6™Éló{&¹é¹¾G•‰®Vò‹ÈB èÈšo «*¦Ðò!›ü’a(&¸l|eçúäAYãºUÚrœ›‡è" –ÀŒÉ/«ŸüBØ_´t~gsD3Í“`ÖŒl NaQu³E©àÛ‡‘_òÉ/‚à"¯ *ò»ÙÖá€h‡CÓs ùÅþ§PLHëoØä—R°ZoRÈøœ1è“L~qƒ´1LPŽJ´"{T‹X2ùåQG~ÑBS˜V5c¾ K¾ B;‡Æ–ü¢>doU]ÐNû!€&9êcbò -fòËòËšÉ/ݜ䜇‡Mê®ûï[3ù¥Tº5eD4¼®©ß†b›m¤òŠ<ÔQ¿³Â&ÐÿÀ¥,,7w_ ½~!´³? ½B啵€uÚûä—Çìä—@Qt„E8ÉìeâSdÒÌ´óÀL6we4»Bš,™ÇfåÿHÚ“ÉhbV{ž ^x§ò®C¦ ò‹RŠÖ`¦À¨6è›= FèZ’î\H– ά ä5¯vE„³Å™\Çì2¦dS†¥²‡åò‹¯ ¦S–3œ¶QâÔºŸJÙ œ½j4a`ý(»xx4ëaz¨æÕÎUЉ…,Ú[·¤S?ðT×I^e „ „3¸a%çí¦)ãmàeÁg@K•3EÄ#"ÒѦÉGùEÛ@pí\fÓ/QÑSŸÅÑÀ½óÎR’, ³çæ›o®`"cÖºØÚ‚á†hð iO'ÍA ëä§Dà„d A˜ø6Ò‹³(i4 ¾>ð>ÂYw¡NÐÁÉúý[ ‡ù>,äp‚éq0á†Ð¬’½f`&u(CÉ:ä„a÷„ŸÕ× ª!3pËÀZï3}˜ÿj'¿X+ÖÔÓLþ'U’½ã†äÕ˜èLúR´cæ†H¼e/4êaò¼z3]­ä—pChQ¢›3:¢Á™sCrŒqhq4öDšÊù”4HÀ>7„WU Ä‘€g$a-ÿ^åä†&AD9•pC27„iefA¦¾Nm†6–”¦Ð±Ç•ƒàÏ|oq@Çìú¾Ý6%©VyS Îáê<™ü¢î#5ƒ›£aV!Ù¶diûYe“_l ¦œ¹8ž/Ô‰àÒƒ‰%àN%9>¢ðªP(®ûðG+BòceèIŽîÿÌçèþ£¥ñsS9'Ëû s°íÁ4(ž׊zTr(­ÌR±—Ҧ߱­ù™yµ3÷Ñí“"½}Ð"·ÿ!¿pç!{2SO1ƒQô%Ba¢­÷_ZX°S£4ôArlPoÏÔڃќ½ý®¯tŸ½ãKÝu×´[°ó.5Úé'×hŒ’SÕR®ÌÑà+M~–”ÃAg 7„™¾´Wú‚¢‘³/¸tpÒ§V¹¤V]P ú—Úv0Ûz%øÇ>õ¹îÌ÷žS0 ¯L~é ©|9³­š·Ò䱦¥X3žT1*5›:¸;ó}ç×î°¾?~#ÄrŠÒ:Ïš­„ @~T[koº•wK}ÿ%—_UÖê+*G‹e ëÒœYê´®WŠü",ƒEÏZ´³í î]¹!Pzý€ €Á´Á]ÚôZôªûìðLÿf².k—6iž¹ŸuÎEÝkŠ–È<‡5™h•ãâímOÓ5qøA•ù cÚ¸n.š³a¦"ƒùÄ£}iqϽ–£OO«P3Dg0 $ÀaÃÞÑFç|h/-¯z—Ì:G¥ÐZd:ñ”ÓË]oÖÆø ÿ±B“_lÂ5[gòK8’Ç.{O ‚‚ùp„øÉli6ãt @$¤É¶F›¹B‚0s¯†L²ë°#ŽžµÏ+rNäyŸí«@W™½04^Bxà{q7öÜ TUÃ_SqæÌ0fëÓ hÉúôw“:’ 4ÈÒB~yëÛ6)¨ªëCžhò‹7Û.àwhQœS„ô!"™…) ü[Î@‡³6h¢á\ob”‡VL5X;¦3Óœ¸ †+Yrä±µÓ5¬¿bOµ¥ML~±ÑçT_÷÷ÂÛÈ/{í»x0[Â65ÐÐÌ ¡ÚÌ9è™’F“<+”'Ó˜v×(L~`}†ÏQæø¼î† Éû²6©ï/æµÕ˜ú]tS6Ìyp´ôñ¼zRk0ÛD¶Š°ÍM~Éió¸.f‹áÓÌKƒ‹@Ȭ3{fg*Zã…ê#Þ˜æa`aêN´Æ!³,‡wÛk¨¦{#¤¬eÖÉ/ò7±)Ï'3s0Š” ÈÖ€„ëpaTz¹ 6Íæ€@D€© \µjÍòÀ9"<§áÓb¦Áú½ûÂý‡v´m-rSæ:vò‹õ—1§™¾$'” ¶çÍ+krû]ª€ÔÐ×Ü[£„†‰ o‹Sáhh2%kÐÚ#‡ÅÌÜÃò9™Fa‰<ýéë Õ¦l…wK~ᆥSªlL4ñhPæ¼ív¨À÷6#d÷ÁºÌ( ;nkሼ¢áÐaT€@{L3L ^z9SünÖºÏ÷Ð^>b"“Úç3ùE¹AmÆ/X£4˜ÃdõówÞ­›¿[£4ÈöÚæƒ4JS£5–ÐÔ¬?÷P¬/BZ£ÖY;šñ”—^RHèX~?ã:2«àõoxÓÈ­DÞ)£œ‘ä6²¡ <ü,fšÁ(†¢ôç„´‰/ûWÇ »!‚N¯×ÒŸ"È4òË¢Ê]Âk†£øld—˜}ø%hSþΆï}ð»­„_!ä¬ä8æjör†¥øÄkm»ÝŽ\È.´™A(!Â0¯¶.©ÞÖ–`›à|˜®ŸÛzÂî ‹/dÂ…Æä{òš×ßF³Úæ&"¿äˆ'ë’‰æÌ%ÃM7/Þu ïæýqÂXGwÐ`,œHP ¼³…ÈB„p6}[3oƒOÌÊx›Åƒa(!À°Ž Æ_꜡â(Ç’_D<òGHÈ/ᆼå­o+kiIuˆ0’Â;fà Ô탶 ^5Cü„lÞÇédm‡ïÅ,£Ñ (bú›o³ÓXò‹¨ÈòK~Q‘Ss°µ˜ÓÔE%¨&¿dÔmfraž¶Ú“…ˆx˜›B9ÿ¦Ù_xÕ<$Úd)1Ͼ·ØfÇA·l|Fþ©8ùE?B¡˜g•”¦6êÜœmæÍ¯ûAá3ÄÏk˜ö?›¼ˆ¦%Ä÷ÖhG¤#œêeªÓµù[Û<.M.‚¶qs{T°ïlØ AÁT¿dWÎ:ùùE.´ëŸ|¤º½Õ6óJÆÑB7‚e Jc\60ÑL™ÈÔ—Ð|ƒ?gÆ4Í)%ë• Çñð¸ÀúÏÙ`V!%Ö|ÈÄä檀Ì%g*¶ Ù«¯¾¦;·¬)Õ€$Êm^Èeõ²PðÍLmþòïÛ ”VæˆæC‘`ºÖº5O¸Œ‡{W9õÞÁñ³q´’ç†üR¶”{g.ka«mj€ê*ñ®j¬‚ufÒ‹°OðþÿðÝ×¾þÍš3F{„´E29Ô$Å«L+ätzhL"¡Ÿè'C;“›Z«;íºw·Þ,Ztß ÖîÓQÑ´—Äã¸zôÅvÁ¦5bFPŒX­9ÚSšüñ¼Ü¤‰k¯¿©_ܤõ'ÏäÐð—mñªŠ3ž°yU äi•óÊÈœ¶ÇÕmøÎwÏj¦–“ʺ¥5§É/*túŠRkéå?þã?–ã…üÝßý}wi™!“È<ž D¡ÅP˜r°‰VR,¦Ú†VßPGåaa Õ$¹ëjGÛl¿`$³@ΨŠÐ-8¡%Nñ´îVÈZ¼ªÌ_ÇW+\˜÷¿þ×ÿzém/äî/}¹{ï¹­–Óx!ë‘õgóÏYq@„·Nì4ÏÓŠ†¼JËlA4kÌ”á £Ö¡%&ºY)ò Ëdg_Ì ùßÿû×òˆ€ø%/ù½nŸ– &õf²K›®mØí]ŽHŽÇH–¶Ίéד[JývDz…<éÉO)`æÀöÉ/”¤6[¶‘Ÿö[˵  ,¤,Ö¦ WKÔó—ù—ÝþçVm†òWõWµß/CQU°È×*t#Ô‡\ó‘©Z_¯¦™ñ6¥ÕL„¡MÚ¦ÑvÜÔõÕìOßEÝ;7.Ë,TkÕ âh,'¥H;k'ÿ²ZäA½( Å\Â2[v~Ýu×uÿí¿ý·î/þâ/ê´ %Ò÷¡¼™'hàwvÔqe½}¢ô7Úh›> -3|2ꆳbÞç_|U·K™¼îˆ!ú&Û7Ó•&¿8NŽF 4Cë‚”ïňœÙŸ0ÉÅLä—+?ØHÛ·”nVÓÑ2Òæ¨cO®‘ÌS ³çWõ×fõ¢TÔ¥£¥µJÈ/9–Tu€{¦áü1^LŒ8“ z‹éaü˜úòÒ—½²>×~za.=[èfiÔºoñ¦«œü"¡†/g¾„Õox¨h}¡ÃîQ*eQ«|ò‹ µ­Åš”kêþ2Û¹XVôý–E:׫•übËù%CsÃŽvZQaFýOn >¤ävÈ kDgiU Õ_ÌRÿ°L~ ÓÇ~%7¥ÿ ìÇ.ÛPØÀ–µG øŸkýõA…eûzàa!¿h1%õ•qZ奵ÜR“ÉQ‰mž3Ǫ2OBŠp-â³M_ Œ‡@G~}DÔ;s·®ì½aôd¨;á&$¿|hÜ=®´Só|6+x›јh‡ Uà#iû—ò¥ï1EÅ%Ór`ÖãÀlèþÝ'¿(2SÙDÏ>£hîG% ~hð®ý§TâÇ# Üú§aÅ2'‚¦hÖT¸X´íãa03äš\C~)Ñ“9YÅ[Þ«dQÌò‘Ç&å FnírÍ+ײbÖ—dɦҗëF3ÍËë²rÍS6œ«3™Ëû'†gÏåCóÞ5ä—5ä—õQ¼ó}¥T:@U­ˆ%­®VíYªe?µeÈóÄšÂ34 û¢ý2‡XfâKÈ/‚{û¤J›ØWØö˜!¿€²éêh+{Ei,c¨¼=jÉ/^J›ŠbPÇØÀúðB*ò(2áÍJÎä!›Ê:3TºÌÄxXeÆG†&˜kð‰O|¢–1áf *MóJ,² µ›ŒÑxDL~ArÁ¿»çž{ªfàñ]þLE|*ÃÏñ9/Ü?gºõ= @ ¡£u_bçû‹sÚh‡4vŸ,d›’ßý\™Ò‡‹5õJ™¨(gâ&fæ¢]·Ì"TŠ>u"Â98!ZìóB8!•BP2æýO~ñt]@M´—Ò`ÑܧNÄsV³Ú85 ö£(Ë@€tñ,½€_Mé!›ü¢Ç ^ýõ•ƒåsˆ'åöÛÿÀî„Sά€† G Mšl*hÂÍÓ\ë@æ;ÌD³¤ÆÜô‰ÏuΞ *qŽ:±I’C°çL~‰‰ÐE¸¬a¦ÜÑÇ48 AÏŸFÂëÈá|Ì4H8Bùw;Å÷®)“¾³â<ç³Ê,Ÿ Êù³õZ<ÕœÈ/¢ ™ƒ‘o †b‹ÈfäÒã+R J2,ŸOL«@óP!.æJ5vÏ=U“®œ- ïäáü `‹=|Ösòh™w·µpHõ¸ÇuÖùEñÖµ VcײWW½,j‡¤`¢9 €9špCh“ß·˜)Øf;|I…ú‚ÊkpçL—©Ï“S´i2'öÒ&,µK8ÐŽ+T(VñÎwŽóºo÷$@˜ˆü‚vÀ‹2Qûb¦/‰f¬Áçð¡GUx \Fiø‚  Vb˺´GÂ~ÖÈ¢wWÚ7=†Ùå Çù²ä¨º6‡õX¬U–†5?vò o~f†]ò‹hf¯…0è{&L´#õ÷àà…lj6™ãN3‘É¿™jÎw($탳Šf­ÒÝKïeC…´•ˆuØÄѳ’_˜"<øŠELÈD2uvÏ•~¯2·c»ù{T9Äq&M@58'G LöÌLEcªÙ73 b²`ίÈfWƒ 5¶Ï> ŸÊÄ)yø„´ÅÍJ~ñG;Ý¡O_ÒÇð!bQ«ù».ê K $,9-⺘+3ö}ðë0tŠÍaïL֞ɋBbÑ ófêœXcø´¯ÃðÙ¯8¸'<á‰Ò&Ç#7e®cÉ/Þ \!ÃïOAË`ÙÄV[oSÐþ…‰^‚2ø6ë2ìà\˜q@7K‚¶µøõå„§ËxB5´ä‰UÀþ´§Ý÷> `^‡O~‘h«Ž%¿Èè¡#ß!ÃçhÂÏÊY&¿dHG“¡%„#tŽÛ' f…›µïÙ&ÀÒxPNɾjÛñó nàY¼«‡Ôæ’,.V²¸{Ù+^5t]b´‹e'"¿Ø™ $£ÁÌ Q¶Øaþ.ªCFMÎ e¾GÆÉÓºŸ¹qZƒœ ¯›Ï¶ÓpèGÕÏ ¥"Œ¡<°7½åmC…„³Ä&"¿¨‹ª«(oäD@E§ ­Ý~ÇUCöFÂùZ0@ FH[RbÆ„óó°uÜ8`{³çÀaù=ïóýöÀ› #rÊüýì o.¤­…åEȱäE_åCVLè™-f›m·¯B¸aˆ9b4ò˜Ù=ˆæÆ|¯ F9wp„8Óô>Ÿª/í¡` 1õþ€”íçozËpF¬ê½j!'"¿¨å¨“ ï2‘—[–Å¿{“ÍŠp‡W³Ê8Œ¦Æô˜ 3M„p6õ`am¶NŃi£l͉·Îh›FD[RÙ}³°ÛºÌ yñK‡ï•4i] ZD=cÉ/hLU껇ÕdÞúÖ ËIóû×Ð-ÞF ¯áxMüd0OÛ…=RÌ*0ª% Ì£xìÆèk\/B{m`ö˜•üb+¸Ö'"¿Ð¢¢1Sퟺòú"è¾…á#ls“ÌÒfM06‡B‘ŽÈŶ!ûȱà¶Y ÌzåÄ2@f¶Ì8¯[l3¿ž90|FÁV7ùEÒ¬î©ää#`f»ón «æBÉõ:^]2È%Ûo&Úh¾íT{1* sB~y{@¡ Æ1Ñf<4AßöŽÙ÷„—»ß䕳’_”þ·æ©H_ćÎý¸þÃ7t§”á—6yZ´Ñ÷¢ˆ`åLÔ¾˜Ù“´(Nõ}ûd’kM†…M›QT4ÚÂ(‡¶ùÖÛEyÉRTä'žüBHI³¸Uú¥¾ów÷wÚÄW ùå}ç_ZMnz¬TˆB0ÙEPtw R¬ èÞº”3[‚¶¹•ËAËOª×ö vëÎ2¿‡iʇí“s"¿4H5tLzù×ý×Ñ&>tÃGËÑ4WTïÙ&¾|ª ׈/w´™2‡‚M¦‚`o{‘yäLðA8¶Ððæ·½s¤U(ìñhÿùxj 2ƒ®–½º¦Š—ò?ð®XöþèLl‚þõ§?ù³îò«®«Þ²<ýØÔám„âTŽ¥Q°b¦œO¿ ¹Î¡2e´ Ó=hÉÒJ~ùÍY`ܶ  CçD~Q†ç|þôOÿôAD›øéOZS+f<(qÐb¨´é“TãRTÎ)­–sÓà´;gªáö%g}ÊSÆnØE Ñ ¥pˆœ£÷AS¯úà£jÔzœÀiñòPØv~Y“‡ÍîùÇüÇmBÀ®¬¿Î3ÊLÖƒ«Úl4¥»–[ƒ9+¤N‡‡UòÈÁD4ÊKÓè²’(o¿ÓnÝoβ'Ò ,°QÙ’xuNäÛ†ª€Jαu‰";±wzjJó*ÛÊ¿[›l¾uÙ">S÷DB´ƒÚÞØÎÆjÃo]qLÙ3m;Õ vn! mÒýîãGO{!Ed ¸îØ ‘_2üÇþ(¿Tk­©l;Ì:ÎÉG‚d“[íh÷‘ßVš:_¨[GÿJUÎZeÊ•mÄe8Ê‚ÝöKÌ&µ™í«pò »§Ù`Pm´ýÓǘûÇ;=ñIO©´¦e'ŸQþÌ`ŸÌ_1—^y]wÊégwï|÷æÝŸT…/Ÿ;ñìﲤUN~QVP$òá8RL4€ÛQ‡såfýü·çñ…Þô¬:ñå¹Ï{Q!|>¯2z #53k”°Ò)&ºÚÈ/¶—ËÎ"ŸËD‰qZ÷sWEÀÕF~Q¡ùEÞ&õ†5w³+òsËÁ’À—Ìó¬K)aÜý³ïg…¸ÀÉ<êÏ â)Šcûä&,V]¬ÈÏåw¬EZ”/>ääq­?¾º5 ú»?läˆ)Zî3ò&Õ’‡Ã[3½ŒÜÉ,Yÿü@޹°0ч…ü2NÐÐ’¤Bn˜ÙÙwiHÙSÓ&&)‚ ¸‰GÄ_Äiõ5I3„r’ƒMœã°‘‹¦f’_güœ¢*ZôY>CðQ2‹Gù…×U9s‡š gÁåÛo]œ‡‘_hOWêQA~ú–F$ÞÚ\"¨5ä—§>õÅ©Ü×O—&|ŽzÏX(è\>\¾ÀcŽ+é×½Nÿ šJ~gŸå-ÕC½6ÚþZÕ¡ÈfÖ_J®;—‡½JXw“þÁ5ä—5ä—Ç ùţߢ^”!+œÓ£vòKÈ/°{ºg€QrT˜¡“N*çï”ï7ùEßàP Þ@;\TQ&È×!¿„/|á{z ð áŠZãó2Aû1ùÀöÇ1⦻àŠ`ìP>ƒS`f½eI·LŸ§Äûįu&+ Ö)¢IЕ:4‚3qFsµ”@~P*åëNêå'Ú 7d£ò‡ï·y+V)ÿ‰Aõ0ݨ> Á ›?ûÙÏV¼2¦ŸEK^ýŒ¹¢, ëd-ˆk uèÞÁ—‚sÿÃF~±v˜[L-•3/7$“P·®¿zÍ`”>! Þ0 $ÅPÈz°å˜ ù%C‰€šH¤înH˜‹êO’€_f0JèKá†0SÌ9iõ2ææ!›ü’¹!ú LÐz" 5‹ ª–Á(R¨È{¢/õ;Ø¡ìg0 ˆ¸}‚é¢Jõ½°´1È $-æ(Ôœ3©?©½vOÐÌúš~FÛ¸úººÐ¢‹€®™‡ Ôk½W©sÎätxÈMž}úÒÂâT+¨Y ªB@Úô šMP£C¤ë>Á0 ô+Û˜{ªÖïåË÷É/濤g9§É/z‚h0m¾m#LWž 'òzÄ1'Tà D$˜ AÁVeª=[(ÁDq\úê}ßãO›š³D̹bðÞ{n-mŽëžÙj´iSºV<ôò§‚–øq-£N™‚M›çŒ•)È !¤5ˆ>xèáGWÌ*|Ę'`aH0Úäí`ÛOT`½uhfZƒ!ÀôñäÐÃÆ6”ì«,m"ò (ÙÃáô¹Ê¡NrïE…æ[´0n½9ºL±5lO/T”±7´è!dÄMÎ~À?ý½um<;®Î>«ú.ð·.9,•Ãç¸ä{-n¹!’}Ðk†]ÆÛ³Ù÷€C+:9e@?˜TÚ –¾ÜÚäaCn!LHh!¦5S›õÃDÁ^˜8 ü0ÓÒ ›­‰d•ÓŽ%¿H{dêÒ¤Ü! õ£ìZ¶‹vûŠ4vøöÒ$¨X¦3ÁÍq@™”f½…;‰C{ñº´ ð;=âæ² {¤<☓º?˜eø3ˆü‘Èîi2SТÁ>•~ÏB]€C…*†`$X›,±ý:ã0¼¹ið𢽯Ÿ¼§n„¶iÛ{‚Ð"\&™'í…9Ë#ÓloMÐxí#9q$ûNFãž'"¿ÈÜeùh™¾”æLü²ÝödOs™ÂT 8µ¯ƒ<æu±|¬Ož–€„Ù 3 (É€ò½ŸØŠÂð Lô¹<ïAk“&3@l"òKf*;K tú$½Ò%óB”>kܬ%i’F³F30…¦­SΤÍñ¹«jЙÝc C0Ó`°í„µÎsà»Ïÿƒ7¾y¨b®s"¿0YÅ&æ*£w…‚’“æÝÖ¢ôJ WÈiAýØCè7"­g¼MH3í…ÓÞ[7Ž}•–õ>cÉ/‚!:)3E¤¿åÖó‘M¦½ÐX‹.ÿÎ÷DCÍe¯ô0B.mäÌc¬v¯K€¹gòK10YB¿öõoj®²ÛmNL~qлü1³{”-ÔZ6Ùtóª­lúÖmº‚:Îè(ñkb×ÌÕ²&mð~I‚™{`f÷´ ¢ BrÑ®ŸóØó Àð•¯nhÈ™—Ô=Â"L4ùEö!ÅrU¥EnÚä—C?nŠÒ0✅À<¯X=„±Ø:ØümÎÞÃL›¹ï>àne¼™5Ý´¼g™ü² {Æ3Ÿ52òQ"Q˜üBPEb¦JƒUð°†ùq\|Xª\~Ø¡øfêKæNR´“¨ÆvAS‰”BS´=e8Q#¾ìÒhNeËoýÖoRéD¥bbò‹DY©6ZÍ´ o÷„àëλð’ºïµ¡(gT­ôÏ Á–(7$s£Û·½‘ÀL׃Õx8˜BÖnößFT[8E]Ú½ ,ÂzWŒŽÊ'c¾œrçXò -jÔ¨Ðá,hÓ&œjÿo–rä{ΩškÂe Ê%5rÉ1âR)á¤U"Qáë8ÔÓ ˜ºõçZ´˜17Ï)ç§Ï¤Cva!ÉH&"¿ˆx¯…yögÖýìg?€î/)§´D8™g’±Ån“('„ãpÊù¹`3–%4ªo3Ýì¹ñ´&ä–Ûî86qö”AlSã4FO~±Oj½Iž¿ÿýïw<ð@g²DŸ.ñÕ¯}³;»_˜¦Ð,Qdÿ„h…ª»« ¡M4Xv›U@ã„”FY×<2›ýÒkrÔ=Ò={ ù%\šœxò‹¾ #½ÖÔ‰ëotäÅMÕ[LéÂkØ2å ÙGfûH«Ê ¬Mšä3zÕ«½ÖÖò†7¿}ìéù‚Åì‰É/ª!¤ýû¿ÿûr¤Qš5êæª²w©ꃴÉÍ'gœ>ÌäûS3aÛ14 ’ui]s^9WÀkFÈ1Ó_ÿõv®ó°KàD¦Ì{ä—oüB“‚¿ÿû¿˜ª5imrHÊ"öP§8œz湃¡ÓÑf£åß° ¼ãxrJ‹ žíÄÚfö'$Pg¾†”Í67„КBÊ2s&¿¨eJ³¡±Šòƒü z"žµw2 Å_ÈÅ'— -‹_:¨ŽÛ.²³[ýæÎ„Ý“!›L=S_2Ú†3ÚjÞN³N~¡A [u­=QΜÉ/Â9ÂØ ¬,ïßJôJ÷ýºÚ‰ô¿Ûmºå¶u²="\Fg2Zfj…™—‰¾ VœÐ1'žÞ! Í¶é á˜( ®4ùÈ)pÁ™+×Óž+Çíâ¶óÐ Û­P!>ôè­ö²O¦*ƒMÚdí¦Ihþ® Ç’_xQ Áø*#¿8ÈGTd/û†¯!h&¿ØØ/ßWwþ´§wm²UþÉ[?_´ûùJÜ&ðu7¶3³./[Ï!eœÜÛÞ±q÷Œg­;¶¶j z¸«…ü¢U¦wÏã2_ˆ ¡,Œ:œËMýjY;œÇ3žùì²×=·{Þ ^Ü=gƒçwë”?¾ 7š«î}»ÈD­ÅÕ2ù… ¼®ýˆÉ ›Ý3—›žë{µÜÃîyHÈ/*cÿlZœ«³½ßúWs »ç!#¿xšÂ(@ÝU)ÐÌÏâØrT1*í³TáÅÓÿ|ub,X©˜È6X>œ '#íÒÂV­Œz‰úW§F5dyúL˜!´¿GÀ²§o3™5VHP¼êFåÝOcqá½Êa} ’2WmÆ#Ë•5Ôvò‹´Hi” òôõÓ¢Ž„é‰žT”/¤J9T¯Ñ¶õˆ™üb­xÚB½ºuL>õ ݼ‘™[Ç6ñQä—œ6ê³,LR ù¥€&®gž«ƒ^žöÈÉ/À…„òª8­æbŸuå +fNHÛÁÌÉ/ ò ¥šÍiOÌ›)Ø}òKÿp15ÎK€í÷3AFTeÌâÌ)„‰&gþ‘Ò]¨GïüFÞ¸÷˜­HN•éD€ïßY°Ì›÷†×)qòòËâÉ5“_Þô¦ye›XV0­—–èèÆ²Ü\®Ë×—–mÃ÷ýüÑ3ÞTÆ1ª€Å‘<`󿄬Eù¨uØ* O®[µi/´¿–8øâ¬î53ÚH幚älïŸ(â÷e\nî>X  ¦ÃqL@h}„÷ý„ƒ!‡{fF?æ&¿„üò˜›üò‹–-ä†`ò ª¹?¡YÈ[Œ‡f \Ù¸¯cn Öæ4!P×¼Íp-‚ä u_kÓ Œ&Ó*ôAÒm½#ä Á ”/xD_$Ïðw¸! j.g¦ÃÆ"ÄÀè9äÏ{tÊ´é}ígÞã½pCj¹ª}Ñt˜Pða%¿¸šÑý¢ êDF.ú¹JÍiËcþhÑ»hÆÕi`Ä«¨Œ"ó€t”ýûœ‡eò‹F5¯@“& ˆe’[A¹3Ñ@d‚"Qâׂ¹e¬Fèb^é–5ÉÔÉkêK‚yq® Æ•ÌKêÇyÿY·ô%£m| w/²–´Ú ©!D@OšûsC¼·Ï ÉÆ¡JÀ™³{fÎ ám Ä…B³Ò01îÔù?—Ô¯Ð>Ynb]ü,„€þó ÑŒÌÔ¿gÎ è>ÜþäZ$ ‚|‘‰kC@”¦õ‡£øÛ„å„Rò‹?¦ëÌÉÈ ÃÏ 7D!š•.=õL^Š™™ª ›üÂc‡üÂl"#Nî!!¿ÀÁ:™0 Ÿ>7„åŒ1SÂUp¡6|ð!ÝIeâˉe=uôÒ¢ýýÊ{çW“Uþ Aâ‹-J¨'Jf½õ¨/³ZÉ/<¥6;×OؙÉr¤?3]º´àØÏ½ »äŠkJ¿ã£µo™6úP_Ú¹ù–´xqR»Ô:. Òž+Šuå©¡Úfl7N.]eä}ÊQŒiã&`ŸBH{;-.=æØ2ëãâÒ¹dp€­v»æŽÞ¥K?$¨].M[Í ^ÿÑ:æ†6™'3Õ=Ks©÷»•×åïÛC´JÈ/+ÁDÀÌ dû=§—ãõËì]cՆƺªj°zKíOF°Æ.øb…kcNÜZº`ï=û¼Z>IÖBH¦ÞÊÛsT„ žn…É/ˆ ´(Ü" jìk‰.ÚgßîøO`SõþÁ_`rdÃÜ:…+¸uJ¸ï˜=:^qóÙ;îé.¹üªÎ©À9:Ž—W"éS'˜°õlZ"sžüB{×\sM¡E@ÑKÊ…ªp¡Nì½hŸ‚Ìj‡Dƒ‘å¼åœÛªM×JX4¦I ëR£¶Í)á]Ѧ7“n“`.-ëÙ¶’ÃÿF FÉ:&p@JêNÃ0÷Ù`ý`’Ø’p}/nH¦/íV÷‹Kö R#0P•àÆ «ƒ ÀD@xWx‚h ®Àׄ B’„9¿ÿÒ+«6ÇUÙ g¿å‰Ç’_´ÑɃŠKÅ£L4ÑL~ÖÁ‡Q€hW›<ŽGã•Ã!T#¢5Ìœ¡¬Ù´Þyd]h“_&鵨´OD~Ѧ€²  C~ ÓÕ¬¼2ùe÷îÍ9æ’I4 i…2ÁTá}Aci¯Ãõ`û€§åPM¯´È´ åA½ýíïÛkYq‚J›#É/" q¨ô*‹ö\Ö_¢™lô{.*cܦ°©~.ØÕ>ÄÀ§µ&9ž`^›æÃ.&Œ÷x/ó†Ø" °á §œ>«¼¯Kr ˆðoç >ŠNܳ˜R4!-¸'Íh›ÐéwÙ>µé_f†à†Ü–Ø“ å nØzÌ”´˜(sͤA˜;æM8|’† ¹¤>,XÛQ %^—BÆN~áPd÷¼jf†ôùYI™vÞm¯ÁqúíÌòÆ iXó«§%´µj;Bj¼¦ÎDÿÖÔ˜) ÃÛªÁõØW ç÷r<1”ÖÞûî?RH‡@½c'¿Ø ¥RL–7íÏ’¬Ó@™D÷MŸOÞ@õ0ª!¾X§Á¢ƒxBX’¦ó®q%­O2OgáÀ]h.¤ Ÿ# ‘§¦Mƒ†°:‘ŒÅvã{Æš?NáWø$ª@a¦’aÞ•ge¢1Sü¼ív(æÙÆ]„ÕÓf 4BZˆ0˵¨zßœXOš›>Eû–ªÝ ™a_¡²xeûmÌÍuÌ §•AbÏ*$"Ž%ƒò‰ðOÃÈÜöÇ©l«uZ¬6|B*MØ'y×L~IV¿ýó§H/‹«¶2¿'C`yšÍAí~nÍ– DT˜4“$‡‘ñ6„ `ß÷˜þe¿âU¯*¤Ì%­AÎ1G%Lÿ8¥{jõ&êÊÑ$*ay¬œÙaÝn‡äû¢›ÏH› K A-´&¦ÑÖm2_f˜ÞyeBº8­öº´þ-¯–‚ÏÝèÝ› RëÆ.óBX'm–àæÆÇéM0UõBÒ¤”JUM0•-,èmæ•=²ð:löAÃѸ‘F^iÃN„x9¬Ý÷rB=OéÁÄÜCšñ=ë—€¾ççáäó|æ†ï>)M›¾ÏðK~¡Ie ‘áh)ZÒºÕ6Û×›ñ…o4‘¸5ßóýÐ’¬­Œ„£Eû_>Så•` {Ž s`¥K0ûL–©üÌòwßøæáÛˆàœw˜üb‘3Ò&ü fòË;Ê̹ÅG,«Î‰@á…X?aÙq$Ö¡=’pokR,Kó€“j,¾…uïÍx›Œ¸ñP½w«ív.øÚW 5W~…ÚôM~¡IZ”få@5¥Š-¶ÜªuôÔˆ¨kèï§*Œ³Ξ'ÚádD4‰rlöÖc¦I4Fm9V£8¨„‰ 0BhÃö,sµ6ÉðI"=ùE1XG©_2ªFê9¡O<©Ð%ÚœIÑåëþÌD*âÕ6J£DH1œyXzaæ5†]¡"•-)Wnȶ;œS ‘vŸj³‘_xUe{5N[ˆ}‡3Ò øë¿þëîºëoª©T¸X"&˜¡škÚ“Zµ™“¦¾LçŠ4™=Àžƒá´˜¾µ˜qT„3ê&7|ç»gM¹X›„b"ò‹†Œc0TÞP'¾÷½ïÕY!Ýó¾o׫Oz鯽¶M4 “.QN*Š/ÓfÌ=A„µ²KÆÛX§¾Þày/˜5H—` M'"¿8|Kô ÃÔ„Òç…\úV“³ß‰Xd­"רKmrhmÓ†£|y€EÏàPU¦¥1× ‹¹p“-¶K›ÐiSóˆü¢Ü§Õf\ÆÌ!ù7òË¥E¸ŒCM‘ŠâS‚ö×c+múžÁ "kÓZ¶Í´)/Kkv-kÐ_œÎÏÝå¨ÊOD~Ñ\átþæoþæAB2Y4Š?úîw»SËØbA·+Iq¸X}â bRL(¬@ ž¹w­ªÐ¢œp™÷Ú÷ÐîMo}W÷Ë%•š  (ÕµO4ùEh$eùnÄÚóJèoûÛUË’üóà%GWYga÷È.\Öa¸!mÚÄÝu]æÈ Br`¶”Ä®L˜°´¸é–%Øžš…0›*r?“_ì¶ a^ªuÊ’ÌXpàÃDýlß@”%G;åI¿8ˆ¢´Ál3â«@ÌJ‹4®–í†j,Ÿó«éò¶ÕÓî°s÷ä§Ì~Z¾Ô‹WUèO~)ZÝûAÕº™“_xV‚&ÚÚÙ3ŸªÛ ùå™4àâ#eƬEN'ÃPÉIsT9ˆÀméÔé5b2»g_UŽ€‚QÎ ‘_Ô{‚cB 7íM ØܾVcºñ¦[ni•ðbš™å“ê[Ðm4ÊùØŽ\œÐâB%~ã[ÞQ<éìkP@n»Ð* ¤Js¦Ù™€Ã5a¡,¡jØÄÓ_žÿ—”QRO«“_cÆ —ŸB~»ÚÉ/J–¼®50IU{RƽÏRa–!¿(“Sd"E1ÓÌù°w‡Ä,Íý‰²¥dò‹ ]ŸÙŽ»Á•ý¹‡É'0ч”üæbm讬ã~ßšó·¬Aõ!'¿ðr«s¼ 3­½—’0ØÎXÏCN~ñÇ9ƒPÆi%?Ÿ¤§q#±Z4ê÷–É/ö*P±a^6쀩Q‰•üåÁCBðâö=¿Ë["€P„{Ä_ijÐnÚÍJ`Õ„”$´ß .ªi*óy• Èæ]ÊûÌ€)øž™“_vò Íp ‚ew?ŒøBÀG=ùEË¡O~á0dì‚þ µ&üR>ë§Å´\!lÝ\>tò‹Œe ùåÏx TÁï-Z;.³\çò W»&×_Ö_Ö_î+ûåUµ2ës¥>%ä:²è?µeˆ1%ÓªŠ\‚ƒ”'´¸u±¥h¹t…eÂÂGù2Ù&ž  Ÿh‘ó)u±gN~Ñc3…]%¸ñ7ù…ÖêÓ¥z —îÄmÔj5Z—þŠnÁ]!ÊR«ÐÏ%ä~æý>Oùˆ ¿Ð†CàaÒUÞÝ,`…Q*î\˜Y!½O\ä+‚i÷¾VÅ—V="È/„Êp¦)øl[‰B`®æfiÏqã4î„|x!ßó;@Q 4shG™‡ÌDEçÄçèVÉP¬{U ã\'qHcOq Ûà†(Súð!ÎCŸ€Þ¢!™DŸü°¡›³£§?Ö¦?V#  Ú„Œ@Kâa!¿Ê:rÞ$L¬Ì¢N3ÍÈÕ‚2RÉ,ä•ù°{úܽ|ÓZW­ïZ—éä—ïs^ºzO&¿pBýÑ6òÃþ±!¿ƒ0s´MŸø’“#@Èx\‡Ô6äÁÙ¶$åŽì(Ú9i¤¹–?þƒE+a÷XS Í™Y aØvL:ÅÌrÂ/ ºQÌx©L`«VY`¦4èêFQ©gº`6„dºeöJ!–QiÙÍ­$‰#©M`‘[ƒ¼§õG@.ÿú믯s±åh‰Qi=Þä—£—ÓòžS ­â¸J~aÊ4ÚŸü‚R¨4’q«¡NКtÍ^ºÚÈ/„˜ÈVqà 7 4˜Á($”›ÇâAj9ÿýWt—žä‡>òÉÚ&ÐÙºås_èn»ãËÝÇJ+/“_4Pc¢a÷è7æd5õëÕßYåäN&°N†Ã¡=ÂmÇýo¿ý/~XwÆûÎ-­¸óJ§êÒzb6°’¾LflŸ“†íÍŸþ\wi¡Il»í¼±;GÇid©¯­cõ ‚樜žüBsö19ó$ 5h›ˆñ¢{î¹WŒrf¾8óµxÂÒoÌ¡¶:X:Ñ9kRÿR·K“VçÙ«–;Ú„ð¾s._Ba´þìÖ¨­Å2 ¤bØ “_„[1Oc¦Ô¶‰¾káw¿ý»£ 7‚#¸:8€€–hB¤Ï×jè»*Ð>ì€&—Vß VèM¥ÚçgŸžÙ{±–=lñ®?'ò‹u%ä–…º”oÑ`vÈ//9fpd8uZp¡2Ålu˜™l† d A!¶­YK»W^{C1ÍÖÔu²n¥Î›‡=§É/ö=Q - Ç2?Ë^*¯Å¿ 0圿§^¿ ¨AïŸÀðv:ÈÖe#¿4ó$\f÷àˆ°Íi°m?§í³Ï»¸Œ=À–£²OD~±eÙÀ³e!c‡Ÿe«¨åÅÂYrDÒP`›PPTõì Rµ[ÇÓ€KwW¡B] m‚6a ‚+ðÞ|ü¶r¼êIƒ(fkCpT¶ [ŸcsŒTP&œ×!|²©Êå}²™ä—pC˜óž UÔ"´È&øf0 €¥µ ´$!iÍúƒ‰Ã¡åx__Ûvàôοø¥ªþú±Ý3‘Qf·%¿Øü Ù'c‡ˆÝ@÷ó:ä`?¼0Nõ2]e²ð8<-x™›…9ˆœ°ö˜+ü@`0]p[®¦ySE‰Ô³™—2vf}j>%¿ÈèE5æÙñ¦ÙŠEwš_ýÚ¦_ª‡hÌ×ÌÇºÄ !(®Mò¨ÁÚa0Ûg›!`^™!œxö—•pðí#µÉDŽü‡ ŸVMý®æj`t΃³ïPޤ$FL¸ÖŒ²û^û Ömf0 ˜5Mæàvðíì—<¬}ÑڣɠB€\í–ÊѲ†3¿‡©‡sÀA‹g5Yñ±NôDäɯ à ƒœŒ+“@·v°×‚½ê:ŒÃ 0׺ ´š°¡6qÛJ€ /šWBÎCÃv&Ö~kKâ©M~yâŸ4TP4¦ÊYND~åÂiÔBvùEéͶó¶/u¿Á¾¶mB3UkµÍÙpˆ;Ò“ ë•s±æ `Ü´vϘ0|–ÿžr„ê3‡ iµ¼ðîw,ùE!I Ð>ä—Œ:ÅðÙ{ÿCÔ¥  æ]Fj€r‰Ì!Ñ ÇÓv·VÇB8Z '+“_A£Aßóêzó[‡¯Kû£¨‡,o,ùźTƒ¡MB0"à…€i§r.™û!0^ƒ0ÖcÍ£;µ‘7mZÓ•UÀ£Zwâ[Á-c$%Iƒ9A›óò3¼‘ƒ–,íÞò¶áƒ'k‡ÐÌŒ'Ò¯Òá2–1(I?£å™IkÌÜ:6„¹Ó^hQ^÷9pI÷²—¿r¨&áÒ¦Ÿhò á„õ/ô4¸f¿è )_„k·ž’ud#jó¶ùÛÛÝžGµ}Ff÷Ð$jDf÷´ ÜÖ4 óàÛî¸G÷Ìg={¨bV™’„b"ò‹5iŸíp<öžöÿø»ŸüäÏJæabbŠÜ>­Î&.ŒË˜Ô½gÀ@·é{‡bÝeTFöܰ|wkQëã=u„UÙ–˜à° 5Š»'"¿¨ÄÙ©2ýÏÿüÏ»þ箓%àÑ?tÃG“BCz¡A¦iS·ZÉøí‹Â¹Ѿ½j™¬ ÍÐZ2`Òr\4Úg÷؆Úä—-FF<„§Iñ¶âXU(±µkIÒéS?ÔÛñ¸~ò“Ÿ €ö}êÄ7 ùE,Ù4xY5¿6HóSUÀPí3 M—¹4)ò¡m çd]Î6Ãt³å„ÝC»„t~ú¨TKíÇ’†*vÍ:ù…Ê©¦éòÿñCy!4zÅÕ×OQë[¦@@ZÊ4Bepf;š¦áÑÖ)sfâ4é oÒZLÊæµMF,¯[m76 á3\‘_æØ¡KôµhH ¾Ö§nùLwq­À¡JÜZ³‡é±6·Um†ˆ–a·™üšo=? Ð˜IÓ2¬ˆV3ÐZ\¿TÆáöxIÿXò D•.’"–¡D´‰ðòÿøÝ~ô£š‚)×o²É¦Ýî%†•'Ò3Ì@”œí1=¥ÍböÚûÚ8Fa–‰L¡í4Q_›Â4nð­ŸëzI³¦È/¿TfÐ&p@¥Å«â%ö«µò²æk©¨ïˆ€Ò}ÎsžÛtè‘õ¦åˆ™÷ÚÊíÈ‹Œ™ÊPMk6Œtš$¤­ÈºìŸóÝx³mÊlƒáµ¯Y>Eõ®G~Y~º/ç„8'%Ÿ"Wè¾ú†‚7Ç ¯»ÞúÝ{Î8g0¹W)ƒ&ÛÉI÷N­ÅÆì‰Æ™kÎà¼8 f›É¡¨ËLaÕÇ™)-êŸä¨uÙâU|TÍLò‹MU˜„5£^’þ(§þ„° ¼“W3šméñ§T!R»Éx©6¥•Cuʸ©œÓ#Å\d%G´ÍöeúSמU@fé¡Kûäx¼~sv¹®Véî™Fí!¿(Å+}ø0Õlõ&=fŽü²ÅÖ¥^[Zë{׌)nÇ_ÜZ³µí´s=ί mîðQÝ[6Ühìì[„¾‰`Å2ê“_fÇ’_xZè ®™ J@•í˜â/³yòSÖî•|“´™ù=L83µ¢ÉôHì¹'çnÖÓžþŒ±[EÚx¶;Ëj•’_Ä„zˆL—€š09»êA“_ äÝ›nUŽt»¶ÔN?S÷ÏŒ*–SòÄï)Œ»Ã^Ö½sãÂ5yîó':=IøÆÊ2 ˆ™®Rò‹¾ 8Vf’#‡•fÓ#¿˜ü‚üòœ ^н¤Pè×[ƒ:ùå7ËÂßøßëX8‘y†®`µÚ&¿Tæ#טè$ ùqrÜÏ¥‚,)ìžÕN~IO0ð¸\ÙŸóà oÏL øM~a.z†++Äl¿oí N8™‡…üâä3ûè¨oe…·ÞiÌú{ØÈ/áMeZY¡fþ¾º=ðA~ÁךÙ$ÍjOSšàæ½ ¿rÚ§ß™Ix‰ "+fj‹xD_rN²†‹>D*î²ô[Éš¬+ë+[Lzäw=‘ŒZ ÔRxD‘_ܘÓÿôL˜˜RDÊöý‰/„žI~CPOÊUH4BGZ¥m{2oI šÃÞûo)3Y6蟊BD>™ØòK=‰©d44[Ïí`&%¿<ª&¿Ì‘ü"!øV?]šò9g&ìŠ|¨}q,Ç9ÞP4Hª°Øm5Zö^Ž ò=€ü¯!¿¬ÈCzbÄÊ|аßÕÅ.rÍä—5“_Ö_º±øù•Z“¥ÓµY µ~$<Ëþ'.rϦ62ª˜ÞÊ£žü"ÇT ‚Étr˜*¼>'ˆF’KÑZk0S`BŽQãõ3ïñ$Çj7 h‚ ÓCudÇ\äÄ*7u.]5O)ÂÔ`Ñ r£°±Îj†ª›Âä)•¨$âóÀ׎þÏXÝ3X¾1pF>ûÙÏÖ‚¶¯EMj:ù»þR)ÿ-&v"!Í 1V#Gu#¨dò  !1zé²L¬ ^Ω\¢¬)>ÕL¼pŒ#v´ô?=(íBm¿K@Aƒß‡ìxXÈ/€÷޳ 'Þ ÐÝdÈ/4.†íóBÑá(¸!R*i›r¨‚tÿ–½<ä“_àÒ­-° ë‰G@ˆ‡:¡Ò'¿ôÙ=¬CÊF ­_ä•Ö£ò“_8mØtŽ%ä—(ã Á>7DŽ … ^ÈÌÙ=¨X¡Np<pq0S'dµ“_¬),Ôš -ƒ‰¤U¡NÈ£½&–É/„”ƒj$e´ A:3ù%½–I#½¬Vò 'CƒN e¢äêsBLlÀ†žtÅâlìÞ{—ÙT¦¾øØ±Ç|B·ÿå ÚRf$0óäTúÔ9såd5&ËñÅl $W=ðh»|ÆÐíåAÞÕF¯ `›°NàÑ ‡übÝe›°Ÿ…aÇkÒ"íYƒ ÛGutŽòþÜ劫?<…em³C´ >öÉÏuŸüLJ\xqý=ë1ÿhPé#é!24‰6WùEÙ‚iP3.Ý>è)ö¹!ÁÄÒÌâ%‡w§œö¾Òs<«ž`¦Ñš^$®~ˆŽWƒa·Kkï³åúÀÕו ÂŽÕTÓÿÔ\"`¦¿ð¶4îï¯ò ³M:£Úìc¶° ˜i¨ ìÜW Ô gª9–p0šê¿ÍøióhÙÑXf÷ämž—`¶›Ð–쯜VæsÙk ùê×üþP!m¬N$R -œüBHÅ&k’pÊöOżíçWÒK´DCÙ2 <DèÀ:m5ÌšC±Ùó˜ÙC[gT¢õ›H‰€a÷8No¶åÖC…ÔTâ?D>‘_¶%Ž$½_õ˜Í·Ü¶lò'Ô›ÊyåG»!ÃÞ6âg™)f¬ Á{=Y€0t ŸÁ½/[ÒÛß¹ñP!e-TDȱäÙ‡¼ݾ_“‘Ùï8×ÉÐAÜTæ…Dp¯´Àôi ˆW8ÇùðÆaçYÛ¡#&K€5XËPF\ù÷¨>B;¥ÐÌðK~!¤Ü‘§¢Iž5mòe…_|ä±eTiÙ¤S„ ƺÉÁíã%3’Qc-Z“Þ—µL‚òÄÖn™7~W›ÿãbú/ÅðCs¥fv‡‰&¿¨À)P ,`q«5Š óÃþ°ûöwþ¨ _¦óE0ë~Z•XÕº .]Æ!„óoÁ:I€6«ÍîA•†°Ö°Wñp5ëbâÃÈ/<«,ÂD䉱r‡¯*6Üù?üÃ? f…üKÚ¿ïüæâ—ŸÒ†¢ð”¢”Ì)È0M?!%ÎgÃmCm4U4ãmÂÒk_Xãcç¤ÿN9q{Ø"fåt&"¿0U…\=ù—J™0 V˜FH7Ì,aWíÓ·°­µ Ý«°Íï5Já‰Õ¡0à %²þ˜o/B~¶ÉæÛŒ Ĭ49Ñä‚"¾Œš‚ürÞû¯¬ëM¶ŸÒeú2‘Mñì‹Á¼2c‚Zϼ¨‹·¥½Œ£ÑhY†C“£†Ù#¡·)‘˜hò‹Ò3)äÏþóJgò³KêLI—|¢¦F™™EB7¹Òªý‘&=ÞÖæÏC3Ie“ ê´§Z›´Ip_o\NÇÿµRÒÒzä Ç’_< ‰²š*.È¿ýÛ¿u÷߇¯eVˆ ío¶ÅVµ¬H+B3Ú Ã¼?À¾©´¯>ºMaÅfOÌ3çvxåQ E!\hö«uS]ÇuÜb©aøØC Î+n¿`a÷®M¶K~QöPÜž˜ü¢p%DJï"87&¡B (1]§|°(©ÉxÍ´‚åЄŒ›j<­ÆF—FÑdcÏ.Œ“KpÀ|™ñÖÛ-(L…'Œ­ "ªûΉüb]ò²\³¦‹4FT¡º®º-=«%ü2ùå¤Sß;8…%Œ»œ«“a(mbh;òÂ6“q¨™öBØi­¶ƒS6Ýr»î‰OzòX­S÷¢§âë9‘_„u„%¨0‰`Pu[´¤rÄÒ«“é—0úÜŒÐà 8žœ³DOšk[ÙrÛÇrCâ„d)FË‹áñæD~Ñù¥QBHM˜þá\­µÖ*ýïCùÄÔа6Î& rËþ§¿ Qù£,„€.ᡸ÷Meò˯”¢Ô¸Â•r‡þ‰räJ“_š +Zm}Ì\p;fÁS×.ÙÀ‡v7êsƒ UqI2M TI“¢§#Ž9¥ÛjÞübþÃ9Ë}…qîAêg7X¥ä—¥K—Ö$:§1ȾU·]ýê¶XOxâ“ ­i»Â˜-gN–c Ò¹þ¦OÖ½õ¢ËÊH›r"Ú!‡SÉ/ë–±6“̱ޜvƺ\öE~b•M~äPµ…X“ê›™=0Ê´Ìõù­ßþݪaS_6xþ‹ºç½à%åßOëžôä§Ìyò íÉW+ù…6UÓ%Мäé[[ã~îo¤]—É/ªr«uòKÀDÅÔëŽÀ¾ý“_˜‹­e¶ñPã44î百$’ ê!ü’&(hÜÍ®èÏmYœ õ÷27è!üâ© ŒÇ 1Wš÷ Ü„Làý°M~± ©ì—Rtñ- Û ™tXãÁ¾6ÊÔynI‚íù ëŸð¶-ã¥Êµj±uý Œ$ÛÇT°FCÖ˜§ŽÂ/ùöÊ+øæf§y¤ìæ!¯Ü¸è…Eh¿½òG~¡MÑÊ÷žUäž¹” ûäÎ+Ä‚Ùä’<´G4ùÅÞò‹½4ä—_2ý…j?ÈQµÛ˜´•àB !ºYC~)ç#L‚yèM“|ÐÔi0kÈ/Å»ÞX‚é›[U¾¾´¼.+׋š‘¡+  L…ñ:jÂ@Ä#fò‹¤pK›¡NˆipÁØàÖC€ „ÐJŸ°åaÿøÚ÷‹…‹;ùåÊ+¯¬j÷ÁþˆOgrC8 RåÖ^£1^lšö{‡“å߬ÁúÖñ~XÉ/L-ÃQ4Aƒ¨L¶J¾… mBl Ù‹àûR3iK`HÛ¦ÆãßrKq®ŒEŒ[‰Ÿ—ÞÇ6ã„Yƒô%£m| ¸t MÉÚ‚ ¡=AG‚pÆÛ꣚¼·¶úÔ Bj,ȱÌ‘€²Ì—d< {[zÇ[3_uVEm‚–œvÖY>#…D@ÃÏ ‚ßÍg0 Nº µÂÍÔ¬¹>»'j NDƒ¡/P¾HÀþìE+te¬†Ö„\Óû’É/´˜õD{YƒrHWŽ'd‡¶–hi€!¿„Â4s´FiQåAu@Çmµ’_Ð!(™'†¾%íEÀ>ù%“_¶*9£)/|HwDኜ|Jéw~D™+rhAzmYM–™öÉ/Ê'Ô=s¥¹D›Ì/d•’_í!´œÁœ_´g¿K¹ƒ'ÍÜÂ)m²øÐî¬2åœ .éÎ>¿LJ»ôêÚÍÒ´½þ¦Æ(øà 7w×”Añç^pQ%Ì6ýOBª¹tάKBzUE§M>@5]áY½ÈÃ(P—ñâÑxáF™‰è…æâ9mðZÚía÷¶úÄaGÕXˆ/†£%i´æàövjïõµ»¥Í׿>yëšÄüÂ/Éüž4–¾\jAêJîMíh¥É/@ƒÎ\ÎÌ›´õÐç†è(ñx4‡:qì²÷Ô®uŽAeY…íi§‡&lÁh«kçéti½gŒnôig¼·häåUƒ.e¦ƒ'$ÊZaò‹ šV°’pLô¢è”yÊY‡™Ý³ç^ »Å¥;ÈXÐÊ09²Ÿ  1Úé4Ù®[*P"—~Ç¿^¢\_:Ç­ɲØ?ó‡×·ÏÚRVˆüB;öCZ ù…‰†ªìÈ<à 9àv‚vNÒ†´]4OëCÒ‚µ# sÓ=§ˆjÅÃ\ÿ‘—&ë+ë~˜ªy¿í`áQÈœÉ/Ì@\ÉÁ(Ñg0JFÛ„€¶Ë®»UvO b^!ª2&ðM $k¶GzšA0M€iÌžvš(€Å§>û…î¢K>0˜™>¬RoÝP‰˜˜üb´]¦™©*-fÌü¬½÷Û£ 4UNÙ…â Iírd¸;Ýek2d´ÓnÌ‚ÑÞ´3jÇ2~öŽ/u'ž|ꀌ6LPflv¯‚‹‰È/Â5BZ“¦‚&T ³ žm¼{!½¤T¸!€EÀFø‚§0[¨ãðµšge¦_®5Eû:ó|2?ÄZ>Eôã%bÚlÖž‹5KЉ'¿Øä¥?™ãZ¢™í¶Û¾C~}cž9¡>G·Y>嬂â $ ,H M*šF Z¤Íœ¬ Íåk˜ 8=^ˆ¢’_Šš­¹DPÁ…-Æ×ÎÌð)ÑF==›·²Éã„`ºZ“Êø²‰lBµ»À¨î]M4g”C#·É/Æg,©%(Ð4$Aû” [G;èÖé_Ÿ¢Þ[1y̶c7,Þ»×S×Ah6üBHQŽ<©Nk°ÑéwÛ³ ÓŽÝoÈâ†>^TQŽ¡Rø>lN€òµ…ÐT¦1¦Y‡íì×[ªÖÚ©¡Ÿªû*!¡DXÂA‡,+¤Hibò ïj ‘ö™æ&¿ì]4ăþpLÖ¿™o¾ÝhÂÍÙJ”‚dn„´v‚/GœOŸFÞ%À!(Ì©gž;vô”"hR QÂÄy+à‚eT,&´×dİ´Š¹2Õœø Û¼Õ»ï}ÀÀ Ë$ -¶Á „͵}@ÓkѯW‡C8ZC¥1¡_FÜ  )AF9¯cJ¨ø’—¼t¤6s„†l,ùEžhô¢T*ù ¤W¿Mo#¢±î20,´ˆÐ} ÉdC~±v™3ا-$§÷ŽÐÀKN¡Ðž‚Òj$˜3j<üoxãH!ż¶;[ÜØÉ/öIÅ&õ•´×h‘)l±Õ6u5dc› ÒhåTÁ³f®Ö"Ái9k5s~8ÎÅz£±LZÂNÙ%%ƒr^ú;Þ5œÂ!)¥ó&"¿ð°ØB:Â%«—üÎßy·*\ã…5  È3…¦C+ôŽ3À®CCzO2!¿d¼Mæqù;®pµ<Ø-·Ù~¨&–V„K~‘ý[žHN´ÉŠz–ÛHÙž²§ÏŒãÌÍø¾5d-ÑÇÁ,­?fS¶Ži¿÷fŠŒ¿‘ßÃx?ðУˠ¢ ‡ )œSOD~±u.m]ú%Z5"\. {þ¥{îí–Ò„sY7ˆ2M£hÄ—Ìä1Û¤Â{êšd–™¹Å3sPÌÝ«‡ÝÓ¸_¾W¦%–e` ¼áÃi¿ŠÐâW…„¦Eø¸ë-S¸å]U­eÜ™ƒþ'ò'ÝßüÍßTêDf…üýiÑÐ…5ísCxÂþPk/Çù·“߬”BBú=š"Lcê5`}Ø=_ÕÈmŒíðàÕŒ$ù“_‹ÿöoÿ¶û¯ÿú¯1 c8¯ ³µ¶Ú@”Æa’}nÓl§Ù7,º\`«`ÊÖ°µ˜é.Õ‡¦È”3Ó'žv_x`Ùÿ sUú­ML~‰¹™1Šbò ­e:¨(fúÈ‹[+³ qMöïUì!C—°>ü,&6ÍZÇ›Ðð°°ˆB”Cȱä¨Cæ*@ÿ»¿û»iÒX ô‰/|ñKÝŠFVOIH¶Okši=¶)¢·Õ‡ÑËçWm&˜ðÊ$3'$š$ü¼’Ò=ÿ/¹GŠÊ&"¿X¼qp•9ë7ÄÜëÓ¶ÂóT风=qÀ$'h†/(gzØô“å3[ñiØÌ›Fi30d*iª¬Mk»‡À[•×QÃ3WÎfbò‹ˆÁ%ÂQ¼b¾Ürê¨ú4þê×¼®»jŠx–âTF¡¦Œ‘œ± !¨æ ÞmÓŒÙݧâáF54ÉYÏáp.s¨÷öp…¶‰É/úƒ²¸9 ZކT¢t¯È½^ ¡¶Ý~AÙÓ?©,K°6i–©¶Dø•æ`ArÍ\m©0„éîØ·½ãݳžš¯W#hQþ˜˜üb+QÓ˜ëG¤|p «`ý2ùåÖÖZL)!T¿~Óˆ/mÔy`‹ãRÍÅð²¹&7E~y|a*ŒË#-±"¿¨Ø‰]5Z<¡4`Rº:!m{B9epÊ£6½wŠ”ÖhI¥€í )m²ý0[ÁA3•I¸H³‹XRÖäÎ…üò”±J«$öÊ"¿8#‹Fů4™ÓÇ„QŒò´§=½;¦œªôÉ[ïZn JØ=áƒ0WN*³^ ÚªbšÜtÓ-çU þ8 ú¹RExè+L~I[Î^H@¥ÀT¶Õ^˜ÔfåÆ˜dŽ¢Q‚f~O£ ÞZ3A“¥I;TGOí{h·á;7™˜ÝC(»‚–µÊr:r$ÃÇJ½çGªÓB=¹}3ç;êô*/ņ>P¢šêv->sÝîÀÅGLM~igëdžûɱ̿iòüÚ^ؼŒÇYï9ã§kG»’}í?_¡YÊyé3;Ïj–^áfª]öí4åšTØ"´ÅÍé¤Óm“?Žð¤'?µÛdó­»ãN:­SœjÄ—vJ ^ôéï+$Ѳþxϧ­óŒR²øµ‰Ì“@°±²$K)ä¾hqó±Bzƒ3TýÍèÑ Ø ªËójEƒã¸!nü×½``Ÿ]Û+_^ôÒ—¯ü¼îéë<«{jYËㆂåÁ…ÁcíÙÞ’õblsÞ£ÜQüÐ0üÀÈvº3T­5¦kêo¨Àœiq® úIɰ÷°.HØ=jÁLÕ=ˆ]áÒç|Ø»Cb |ìþÌÓ÷O‡WƒE9~Üüž¨ÿ{2Ó̬ƒŒïXí“_>"È/ªÈ/z$E@øáuÐhŽ1VªÛÒ0<íj*’)­¸œÿuâŠvõ7“_2ÅMB0[=üþ1Æ Õ.Uå X!xv¸ZG {5EÆcNBtL¹ƒuýžÐõ°"U‹Rðž•*1ñ4¦²þ¶Á ‘7úp g CÂAo1;Hà& CËyé”Ù§NÐ Ç”¹ìÖ !ôÁ®s&d†1wA»¬ä!'¿xÂq0€°?²‹ÌîÉAÔmêåš!¿¨á M8¦¿?V#Í%NHb3Ç#?$ä— i2äy 3 –ö¢AeÌþÜž™ä‡x)/†üB@B…’—òLÛÐjüB{¶O~ò“uýq2Ì)pQà0£mçÉ3ÑT ú³{Týh0#W g¿Ô\ÊÑq}^ˆ÷©êÛw%ض˨Ð&æV’´MØ›,òã¥Å‡²50OÂ*†a×ç†DƒÛ`Ùí³o’rÄ‘GuK9¶;~Ù‰…r±°> ë̇ŸE{mSÏÆë Fa²*„Öü*#¿0!5V8žl à¡ö¾ÌíÉh^4dJÆ×œ|êu<ü¹I÷ÙDqãÍŸéL’xïÙç•èh§jª3É/´¨¹$æÍ!GŒÒÊ*!¿ðvŽ%FYºå–rÂné@Ïä†ÐGÃɸ:dqᇔAòÇœ<8’¸± . bÈá¶:^:_®[o¿»»ªÐ$v.Ÿ µ+—Þ‹(È÷=Hf›çÖ,Ó-[Ëì ±¨¬™ZSö= 0‘>7$Ì´MìZ˜G.=¾6Pum¢µ žŽ&A³AÏæSËqBÒŽ¿íó_©0ÑSO;«6›2ÚF‹PL›ÒˆŠ­p¥É/B°lì„Lg~3͈7ìž……Y yª÷ß?æ;#n °´êtšÁЂ#–@³ kÄM™UrýMUô@C ÕUNã•3c²+L~±s4 ö£Ø*˜( pÿƒ¡˜b9'íýi‘ÂÞL8óT_°Ð6Þ¦î}Ù!×~èÆîUÅófòKL“)+>[F+D~ѳ™Á(!†ôSÝ}ჹð8 µÜ.°f ”»Ãé´¡DwN&ÚFhhÖpŸ17^¯)‚ÚJFuÏl99ÜhÎäëQª$sèO~ « BC÷9 Šàl\Œ¹áÈl!)áu2¦ètÀLÁÞÑf5|z£M,=nÙÈž‹6ç-Ï™ü"«¸õÖÒþ.iShýÁ(»ìºG9¹sþàŒdДpDh4t&8ë’óm±iJ„p™ÀD›ñ´y ãç#7ßZ  £aÙÌY+2æD~Æ’É!¯;o^°èÀê3Þf÷åø!9¿|ZÈëš´0WQÔB•¨”´È\Û¡šË3ò8¥³Ï»hÖǤº@ȉ'¿È⥳‡Û`”=»¿´ÝÃ."h |µ8ãèÂØY«”~¡Ä@(BÊ>˜€0‰€ŠJø!8¸_2˜(dlyaޏ ½Ì_ÎŒIñi(Lö@[FÈgÓ_v¯$4Õ‚¾ý]££BÛø™ª*¾V9Š ÿ¢ ½ÖZâRr°û„AjžžŠTK0 ÊÑ !àÌòýºë­ß-;ùô¹…FsÌE(LÖ%û#­I{¬ ÂVÒ¢© X=n&1¡Nüî ÞLmŠt/Ksžü"0ÐHõ©ngp»ì›™¬·þsºãO:}@%l o; "mgŠm§«Šf*ȸ·d2Ûî°Kmóı9¤ŽXàÚ+D~’ãÉ]¢ a“€XÜû”§<µ;üèªC XiÓæ2‡VhO U"†-…éfš!­¾» {rùÜI@Ã4iû[)ò‹l„çb¶aøPžâ¯aBm²eÕb¶š …‰ !¤‰ˆ8 &MJÕì‡èKo~ë;GŽ{›)´=ÒRêO~Yaò mŠ Qú Ÿô ºÆ3ŸÝTXä™Ì”IL1׌DU%˜¦0QöÌeÝÛìÐùýI´ç=T`Ö…^%ä=©GÄD]°;™N߯nónˆdïz÷ÝÑÇRæú|ºÔh>: ¾\xiÛ'O<õœZ'zÓ[ßÑ=¥ I™T¸´ `Ð&ø‰U6ùEÏAó‡É0œÀòK¿ôËÕy<¹°ÊM|y^¡ì®ÿÜçwÏÙàùÝÚO[gbVO€ [ÓV€b‹[-ä=k3]¦I:sÑÒÌ÷Z œŠ²†S¿«üº"¶§º™ÕÍðQã=íBÎ_ÄÙ!•ðÀlS'fEdÁÉ8ZTˆy ™xY0éÙÊhg’ßåà0 ò‹‚VæwLr³s}% F–é{¨Ëäq+·í J‘G`¯¹8&éï†çB€\C„¨Rdn C²ð°M~‘JÍ졪 »ð|¶{ÆdŒsR9­,k/|͇}ò‹€>äN!¸V1¯ËÞªL˜ö;Í[k3sCæÏk;]̓Sµç=yUæÎ/Ø›‹6¯›+tÎPPÀªP¢ æå&fN~¡E&vœÉ/까´­²fË̓­d¸§®Ô#zòË8ò‹Bu@…AjÙÐ%äÿ_›üò‹² ›ä—ƒÞ«d‘Œ~®ko•bÐ'ýãkÈ/¯{Ý¥Ž®RÜ.5¦GÏx›5ä—RÂBÈQüJ(¶Žì—‰EJ*‡ k ò‹Ú­èE€ dh¯|Ì_`dq?$ØÀ÷@ÀÚŽÊ×®T“_`òà|gjÁæÉ&hUl ÚMP—$aæQ1ùL €7ÝtSÕ `ðaÎKW²ÐÓw–¬“iÔñ…Йü¢¸íû(ò !ݘ×ߤɜòÌÚ­PN>êò}fíwh×ï(h§MágZ‰(R2’‡mòKŽ.¦AšÓâcz1Ñ'#øŽú+.Du¹¢ìƒ0hPHlÖðí·ß^ˆcþ¨’ëË?+£m‚’bá…(DÐx’bWŸü" Ó–ÈPz‡¤tÖéj!¿X+®pCxM3bfL‰ƒ ¢2¦hPAЉöÌìJµ\J*}nHæ†äÐ1ElÎ~»ÊÈ/nŒÇÃŽËX ð—™Ü (b’Î4粨”G_^Ž:º &ëä—%õ=²B†£Õçg霥¹$:ÊÑ8L–ç`°†Z±/•ój'¢ûb¹ ¿Ÿüq=JÄ&ÉÉx‚Á¤§Ta[ EkwÚi~·xÉá݉§”Ó|O>³´ÞWû0€±p×ÝXÎ;ÿðG»ó/¼¸Û±œ ¢8ú’Ò?3…9+D“ÉC^%äû$³ôÊÁ(o„’±4xÐÁ‹Kÿ㤊¤JÒhÂÐZ™ë£ë•3`±}æ—˜µ¨Jö ]ŒbmòÈ´¹Òä›3Ç‚¬©HEH•9 .=À{Ú;ôð£ëiºú‹GÚqúŽ€¡JÐ"HŒÎs¢èPƒÅ8®ñÓ¥Ýwúï«ë3ô¥þ¡cyBjö¸{ªÚ‘µÎlÕJ±lô¹u˜æö ë‚æÄžö¨zÜi0ƒQhPE-ýíÓ¼äèÁœ Eé !=àíý†j®íˆÔ~Gºa \—}àÚ2ùå5u*Uº8´%tÓxê•"¿Ø9” Œ‚ F¡AÂe¼Ô®»íÞí1uš§>? Q`b4 ©ÑÚÎ,:ArÒ…¦ÉœÍÜ€÷ßé>\&¿¼¡îžžÇLò‹õËt…È/´gËàt˜mÖ /ÊDk물îYX (ÀEð6Ð :a—TL€µ h˜™!„jP¾<݇6û“ë×|hP{Ù\RHX—ú3+D~4s:\uœL8’zô»í¹h0ñ… °8Àõs©B`ñ°…6í5Ö2 ]ßìŽ?ᔑ‡øÙZ8!{õœÉ/¶ &›T©?…Ý}Ïv6yÐŒÑf0q9·œ œD²zh…l­ïTÜOŸ§EÃ0yÞÓæ‡ÜRÖßF#»höSZ”œÏ‰ü‚Ö›! !¿Ålƒßcï6/¤Ï ÉñÞÁ¯:@\Y“„ÔBÏØ)š$ÈÌÑ64G›´›i0<ñégû 3µÒ-S…)ÅãOL~‘Ì Ùœô†]Bµù vYŽ*ôGsL•F­I¯PŽLÊ™&!+Á_B@óš©Ao5ŽVóº™'ò‘šM›œІmebò‹õhû`²4vXtÁ® Z ±?$œ{¥ïÎI£¶°|h,äxؾÀ¶—ÆîùX˜ùâÃŽœµñ«/#sq%¿0U% É/;ù…€›•¤w߃– ¦D@Re~@ü…»Õf ¸ÍñYVq;˜:íèâ{—Ãûd¼(¬Ôû\¾v¾ïüKJäÓûÍF~±Ž%¿Hza[9ZÌÉ:Vc³Í˶qHѶ±KT_Þ5Ä—ªß³®]ˆ+š¤¥Fm¸Øéc‹M2üxãfäÖLžÈ©g]XЙ£Ñ’\ <–üb”«º%é•v‡Toi“o3?Žšš¼´d0°(`@‚Å9Ѷ÷»ù0]Å­!œaöôÇÛdÌpL-ç3¿k£ÑCQ‚ï‘ÖÍ:ùEaIÍm¢?T*ëCËaAåf…lÅïAÅë41fi ó‚€äˆ\nšæ ´¬·Þ?Q[ø×pwçWà¯=>via½oUhT£LU°ÀéÚÏJ~¯Ò`¼«ò;ßùN=¶ÿOÿôO»Oæ¶Á0ŽÄr !ý;¤7'œóêÊ6â{@ƒá•øL{ y¦ÿðÂîñ›m>šüÂD«c,™ÌHò‹¶70¯²ÆŸÿùŸW`ýÌqŸ¿ëîút¥Ož4g~ˆˆ&Ûí„’Sµí•¶W†ŸX߃VÐ̇JÓ;7z÷HM*•€Ã°º‘äµÙ†ÙD‰a£4îýÚ7Ä éD ùeZ¸–3æxæÉÜ­Ñl?¶šÆØkóñúìK"Ü/ã­oNH“ä3Si—Ý`ääo°e ,šò?~ôã*d&fŒ›O®Ø§Oº…omÔâÕñÖƒ;ç¤Ögºš½µÍî9ª ÞÆÊR¨nggͼ˜g@M³’_$ÃÖ£z†OßTQ™PšþüÏÿ¢»¼Ühc¨¶},cÛ཭!l×Ì ñsZ·þÚþÚBCBöçpÁŸgDUµubqˆÑRX§ê—ñ6vßSM(¥œ:!mí+,ª±.yQ|æoûÛÝýÑUóUWÅÆã}\ºlp´EN|h´‰iÂ5­Ù*’]𨶠ë4BPJÖ®Eƒ‹ÐL9W&®m¿ÓnCOk{¸{;ùE-4 ¨ €§RQK0¢èÛß¹qwùÕ®7ì>g´ /mv ‚pµH“Ìš©óÈ™ÒÌuá˽Q˜b®ý¸øE#FÀq2‚ó‰É/ž†J˜'bSôfÊDŠ¿/.³}\RM5&Ú)¹»bÐg_’Mx¿M߯Î;[›uAq8™•ghge`²™ ³ýüÝ ¾ö·†®G…/sNä•h*u°1ÂÙd5\2啯zMY“åt²¢-y_²üÌ“”¶ FÁÓ2Úæ¦* ýŽÉò²¡&‹ O‹€©4l±íÎ…Ë<:œÓOá49ž9M~ ¨ëØX-êœ]¥J¦.ëšW( „‘MôÁõÒ£¾©¶3n«Š&3'D,Ë¡d`K¼ÛÅ%mÛð›Î Bz†ü2§É/Úp.%5Œüî—ðŸY2ò#9qQd Ê4½þ®©¹’Ó!œ-ÇšýЦÀÞÉ,£¹õÝrÛJÅnôäÞV)Æ}®0ùEL‘™3ùEøÙë®_É/!ºôM— sD-N½©F?ÌU\ÚÚgÔX·Í×j,Ÿio»°L`ÚiäD´l!ñÌáÓrXaòKŽþf²0©n§ óô2cÉ‘ÇÖ,>T¬UÂ7âK¤)ÕÊŒtŸV³šÆv_ZS8{èÖÛòõ3ž9ͳ*Ǭ4ù†•3.‰,|pÌ`&e>È'oýüàœ¢l/í§UÂ?–ÉÊGCJÛaç…ÝÞüöî7K‘{Äsh÷+M~ÑôQ×”gæô±þ]ƒâoAý?mgv–0L êIÎH‹’àv®€(ΰ4 “É/8’&¿Ì¼ï V ùEßšTëìO¦·øûì_þåR=é©Ý¦[l[Žt;§T̯¬ZTÎPwÕÝÂp—îUz'ozK™ ôìõ p©õ9&½—õL2ùÅ}•èíAgÀõŽšü¢ÃÌ¥ÃòËls?û­ßþ2šjÝ:ñåy/xq÷¢—¼¬Ûàù/ª“_Fv›MPõ~A¯Ä¾í½rÉ"àÊO~a²ºHa÷rfbR-¬ÈûX,oj[[-äÛ‰]s´ßaZ‘žôw¦Îr­q´°-ìž>ù¥huÕ’_œ‹?Œÿa¿L›;¯Ãò¼çfŠzØÈ/ún@lÛÇêÈÈË4@xkwdfò+šŠi>bÈ/9©S’‹ª,O€‰Ù¿÷öÖq{Ÿ5ÎB’Z{òKòË0ò‹ì C;ѸúQÍTå—8Áö#žüB0ë‰GÎ%Ïd^“©2ç0„Ä öáG=ùEMTIEÕAúÆ{Bn¬!¿¬ä˜±[Ȥï+!ÖZs\AeÜ[ö®²½ˆTxZë‘™zõoŒQ&aC/¿³†ü2—>ëÍý a¿Wð¬k€r ’Ë¥¥êw£ÓÕÊucùz ùeU>ìU²&KÙraÑÌ}%Òù…ßZ ¹E¬+¨Ì’_ì•‚Tæ…jaÇ>ª'¿„ü›§6¤¤Ÿ’s¶2¸áQ;ùùÅp¯ý)’m…0Í$G9*¥`ôQG~WsóŽú‡²L÷WÙPLêUðy0C§žzjEI?âÉ/„se~–’…Ã, «@X(/ÌCpAo¢U_[¿aüxeþ;ùj Ö€öœ‚¬ /GÂÉ I@<—üS:&0' <¶^(Ƭ-î á¹½_ò.I—ÌKêÇm7³n!¾µ‘Ñ6>Ð6ª? ëÀikɃ÷C8‡Ý3Œü‚àD5Ý27,ÒêW}󵎔K{‚&=£;©´êt³Î-žK>Ð0×~øÝ®ùpü²{™V¡H‹™Ý“æ“®åˆp&Î [£Ì[¥^HéÈŽ™ŽèAާ˜Ïä|bM ?mDÎä†Õ\á¢å:à Cº#Ž>¾P(–ÖvyÎfÖÔ—„ÈêŸ ÛØ>mHÊUTo¸ SÍáÑ -ædµ`Yí­+M~ —ç Zk&7dš€¶CwP9)t—=ÆU›œP`j*qU+Áÿ4ÁÚ©¢9p³ãÿùîô3Ï®åþ—Ñ6´ÈTÃh÷ÀWjò Sàl `°÷A…„ÂDÃϲÑï¾ÇžH—v~#Ô•Þ#è° V¼^ˆV¼üÆ-„H;Á°Íô¹êÚw¯-Û 3¥AÂ)[ö›KÖ£ûâPÊÔ ¶Ý•ÊÄO‡&ÍÒ%&¢\H;ÌGYŒI“2 ÔŒBÀ]Šyí^†1l»ãÌa „ l ‚F¡#õ%–ô*¡ºú˜þˆ]ë«ÊÏ5x¢½™…j½INp¥È/i@{Ô[{`¶Š„jÆDí´Ëž•âêF l¬íËpÍÒQv|¸&,üSÕrà‹ L‚i<úWº+®º®Ö†uÏ(Dô´Rä3˜6Aaz2»‡“Íì½ïôÜž郠3VÀÚlÄ´2v±h‘©jÊæŒæ`—+#n IN~Ï#[„$+[aò‹˜Ñ°0ÑLèK1µÛî{uów+{]¡E„âëàâ2Áºd®Öd¦¿è8Ã@‡dÔô•o|¿^ý¡E€‡1Š.Á„µñ9gò‹IÌ5#§Â°ýØ*v¯‡Î.„7í»j=ò°WP@ÀÌÕZŒ&ÛéÚm´ P ”)ÞsÁE—ì§pL|!)cNäHIN'#Þ8š ¶ßq~Ù*¨Zälr2ÖØw2Ah‚2Wšl„´[«'µMëÓ˜2õ¥ HiŠ+˃™mò‹½UP?'ò‹¸”€ýÉ/‚íÝöܧbnÚÕÎee–¡JDøéQ «°€I¶û$ìCE3nªO£hç©ßQß{Ó'>WBÂSfmþ2[{§n,ùEéÂ!² ž4cÅ£›^È.{,И © §¯ÅÆvO@¹ ×¢Lþ4&Âåt_ß·oælukWDÄQù½3ÞwAÙ7GO¬ûØêXò‹B“ÃI¸fk0­:‰i»í«é¹B°áI5=W`aTÏ|i^äà <­/âiÚš7A,&‚žñJ¦2ûäñ®Ä|Vò‹PÎñà,9˜¤²ìÊ¢Vƒ˜mK ™0{¦MwÚ„§qã0síDl¦-ÚÉ Ûm~OCj†Æ€~Ãì ñ%@~ãmÞõ®ÙÉ/Ì?@{ƒé§tï ¿¢Û…À†gýîw¿[9!?üá+/ä3Ÿý\wÂðÁœŽë–ÑØ?K›í¤IÂ1Ë #"S>„³Ÿ‚¦Ðïì¡+·ßaø|‚~[ÞÚI~±©ÐÔ—Q£4n¿ã®žå²ÎOäüz‰jf^ùY²?ø½\>'Ÿ² Hš’Œ¨iÞv;Ìê|(Kb(ùE§º­>úßÿûé%Š?üü—Ì iOú²úÔûCQ˜&¯5eñ” ïÖœãÊä`[ïbÝ0… )#øF&¿ˆqÕf%¿7¨˜™*1“Ù!¿ZÈ/„“O3zÚ”PB1;žÐ6A0°ì0^­Eï±^C|±í$hÈŸLzj³€¦ù`Íï¿nVÚ¯Ò¥s$ù…cûT}3„ .œ”¦þçî¾óGß+Îáº*H¸!2‰ D±Ñ,9¢}Oè&’±EXwiÂEÐ0ìµ.šÍ•Il„3Ò_ø¢’aX£mdää% Ú¤n%Ge…+ŒXÅ_'Gœ[Ó™g_¸á%“^Â(­>¹aè¼<(s¥)·^Þ<)Z¦®åÿξkÖåã¿ÖP!·øM¤±ä™‡l›ÀöÈ6¥pÞàð©Í®%¸ôÊ×”Iâ»<³çî©_hP N»Ö&É ™±[m·ë`öîs¸ÄÂ;Ìßm¨€R.‡Iì…u3âmUНY»ÖxJ¯ÿêù… ¢zODu[ÑHÑW]ÔôŠW¾º»°¬­Ð˜š©63¥Mk0LצÝ]7{f­£ZkLqš*á³<Û'YMª þî0(-ÊwUïT,Ôe§à¢ Fi”šç½*Ò ¹ž†€ p|æ\sUµÅå”–v0IÊÃ3‰V·iS&hž£A£öÒ¬»û¶ÀA„Ô§Ml»ýÎݯ–†î0!Õn•fæL~XŸRZÌ`å?eÃW½æµÕ{¶ó:¾^Yæ_ùÆw»¯Þ7Êú›©ÞV7~žÕžÉK 2Ú‘P´6ó"h¥8•5ûŠB¶& :,S]aò‹&aUÀûìÅ_ûêÖóv¬,o¢Ó4&÷Ì¡(¢™Ú¢›¢Jàƒ´±Ž»T*“Ëz}çÆ[äV]<ó£[óªrÉ"¿HDÕ\™húŒ¢„܉§ *mÓÇY´‘S3µm7Ò mþmÚá4'dZÐ9[ïÞÜä—á•À6gã0¤&¿ÐIfÖfNôLá·y¾^wòé¥e^´6=êTfqGÍ*2WRÐ-`à]…oÓB¶ø¶ ÚNà€¶›¿G­±c¡g´Ó³‡]¼ªåcÛ¬ùE»Ž·ÍLóô'úä—#–ž8`Û5“ÄMP)MZ“’æ>U"¤ÎÇ6AX[ÇÖÛ-(S(Ú1n£.TWL£7²Ò“_€ÒaJ&“éENrج úè'Ëlç©ótZ¾ˆŒvûr”{u†¯'D¸vÞ³{óÛʉ#<éL°ÜQ©Ôàgªí+<ùEŽÉù°™í—ïŸþŒguû­Ðï+ʡŌAÉÕâ_y³­¶«´Š¹󯣶ÊÈ/Z>°O_’}sá3+ÛÖ ¦Ïôä—OÔ±qï¿ìšÚì±O.+™ÅÁKŽ©ÛÃ[6ܨ{êÚ³›æ0“õ÷yÖUF~Ñozâ*'Y³áÌõW­xÇ'T!Öîóº—”Éj¿÷òW•É//èžR¦Á ›B8 @ßßåííß!¿Œ:Ò$f ˜æ¬5¦R´C<5ß›d´Í$7;×÷?-]/ú·{)þâs>½Ä©ë–ÈæþÌÓ£W×äYç²fæ*Ĩ÷Lͦ&¿Ì$ŠB6Úø}ÿ1A~Á€ÑSƒêÒ¹é¦ó‚|EÁÇ¥—¡Ç¨hf ²­0ë²þ¨„w²NbÖsv<Å™\ÇܬËÎëbV°˜_°¦uÂtÇ I&ÂAÐ"ˆ¢YáQ5ù%ä7ý‰O|¢ÂHµþ¤f“ª°ËÈ 5}_™‡ôˆ'¿¸Aæ÷áx0?Ä¿ƒ"ÉX ¡ EÓ»@\K£ 5Ì6Úõ»ò‹*žVŸÄßøüç?_‘\•†Ý#eê³{)û·ÊôïÚná™X˶^Í&1õÚJïqµO~ñG™—5‡…c@Á2‰þ‡ɉ÷™ÜROù-”Tç\dººêð®fЏ÷JÆaû|®.·‡˜9>cµ_€­7¤ _ˆ-‡!p¦P„6AƒŠNªnZ åæ˜'ïI#0 çãÉN83—[³Öõ÷5\=‚ÊZT-JõnÝ9WëÊýAünýßøFÝà ¬˜E CQ …‰€®>?k¦€È/9Ý0Ý³Ì É@ú´&Tí2~•‘_h ƒQ˜¥òD¸!º»m[Oý¹!Yƒ~ß ƒ)èâã—u'žtr·ô˜ãº½ ùåÝïÞ¤²{hOUNIs銊„}9—+¬û§½Sa•‘_¬Aûœ’ÆÌÁ(Þ÷„Ù*,ü£=¡;¦œƒuLéaW&ÀœtZcháÁû\QÝD~9ó½çt»–*AÕzhQ<›¾KŸ:ò Sµ$TôVšübsgž„ ùÅ+:=xòKaºfÏ!‡9Upñ›`im¶fˆ äV§1Íùà 7w]rE·sÙ;ûgãP"ž¹!©Y‹Öö*!¿ð–ÀK„sö¹!ê2ñ¢ ”åK«`}áÀÆàé2+2'ŠæˆÔ'äŽ/wgŸwár“_" -ª·Z“Y—+5ùÅèâÆ9ž>»'k°i—]vív+}ØVØâþiö -À€„¥ÉþÓÓ(®éƒ6¯¼æúmäešËÑq©ç†B›+L~¡Eû"-Úû˜¨£ÁÌî1ŒaAa4¨ïA5Vu‘u”§)M— ¦¿Ð¨>&h¨fíô†;ÊzýPñº¯¬Aú0^ˆu)<´®ðä—h’Yƒ}–ëüb¢»nÖL3a¢A³—T¬Žf+¬ÇC‹0=„ë›kÆjLHùzgBӓ˺V˜fº Ï4)à_¡É/‚l_| †«¼Û^ûLÇjþ@o“cK£ÉL˜L‚_…¬ŒÓ§l·Q7¡N“Ðý{N;sdÅ6à ôWhò‹ _t¡EÈìƒuŽäî†*LŸ~ Qˆ0œF“‹+Œ%š„‡mÓ˜2S«añúãmŠvA–o+QÏ0mJùTèWˆü"Vd Ýl¼¨ÐN$#›Øca;ü6®ÔwŸñçÂbMÒ$­#B΄­åPøLŸmâÜ Þ?ôxp^ÖÞºBä— “Ñ[‡¼(-tä—}:¬:”ÀRàâM¢ô§Ž÷îDá]”ì9Ÿ@0 kæød–O4 E¡?}Ûe_|×Pm*fÓ¦¦ÓÄäJ¡X•WMº$ØVÚÉŒöšæ Z¸bWl¬ãˆhœ6m! k7Þd™’Öˆñ´3)‡qôÈާ¶¦v4–ü¢$¨‰î•‰†„–±§ztʼn[gŠˆN®Òî´fÛxëÒ>Éé¸yëMcòšÃ©¡ºÚ$¦>»§ñE.¹âš‘ íišdÁrš•ü¢Þâ` ™ê2 Á°kÿýè\|ô@¨Ð˜úh*Z•)‡EÓ¦µ)¬c®A97òKCnõ¹Y™Ývu|þû//g<ŸM k;$¿0MBÊ:î¾ûî ¸ÿñ\/œŸüä'ÝçïúBÁÒ3˜’¹6ú E‰f…wÚƒà]3S«¡(sÂö­ËÑ—ì£@N<1qG.,XÙ·–JÂlÍ\­}™ÏÈÉ/!g+>ýë¿þëÐIw~áîrZö{«§d~}ÞF†£„âDX ÂqF´ ¨Ô˜=·W¶IK×׬¤1{®©À_ ¦`B„á™ÇñB<‡Ì )Åìç`.9•m&jo¤¹Q£4>û¹;jÔ²¢—õ»¡\Lò Y™‘7 vÞe,ðBâ-µ‡–òéÍ„¬4&`m!3ýÏÿüÏ¡‚Þqçë^!û˜™äšI:e½Y{¶‘6ð¯ é,É6ÄaÁ×Ѽ­&\Ž-ä7KáÈcOî¶ÜjëY…Ð+³Œœü±¨þâ/þ¢{à*Äåk×—¿òÕbV×ÕmÀ:!çÀ쀧9"í 6r± Fa¦„x6tý0|†·™9 èø“Ïê^ûú?)¤XÖ¹"¼ëHò M’GEåe¥X.‰³¬ä¼ó/(Û@cD¨ "[Êt[ÕálaŸÛ2xPާ·i8Qa›VÌóé³{2Óç©k?mÖ½Rd¦ô»ÊC‹¹.{\Ù[æ©£x ]žÕ•Šw¸!ýÒ¢ó· N¶oóêî¬ûÍøòº¼¹×þ|¼Æüiû+ám=•ñSÂ(Ï*êQ ¤+œÍ:ùEþ(?£I{O¥øëRt=Û~§]«P¢k­å‚· ޏ X;;mê9ðµ&™&MŠ€éaÍ]¸“ks¸<Œh|û†;I´)j"ò‹n³U¸"‰$p/B~yíëßÐ}¨dÌ2L‚V¾X~ J‹=£Àƒ°n•@l;9ªŸÖÔ/ŸÁì_CÁh“F_õê†Nžy1MÚSQù…VŃSªú.ú2è6Sy§=MÈi*}â‹Eiƒ"¤äÙzc‚„Hl}öÇÆõiLxÔÃpµ´¨„)SâS2?A5ÐbÀðц…c×B9ˆæ}“ ú©¦øû²W¼jÊ<羽ÙÖ` ²o«ÂY»¶“ Cï&@Ø·€¾o¶ÓœVRÙµ3if˜Õ}B~±;Ìyò‹J˜Ö€4KM”€Š¢6ºã‚Ýk0ÝÏäÛ×4Ø@öÓóB¦Eø¤Iž´OÛïŸSÐ?»`‹­·ép„ovƒ•šü’õÉTÅ…3Ï®:ò˜“N¦?Ç•vÃ"P¬²Ÿ ϤZP„,:ül‚6Îѵõ¼ù³Îœä …£+E~a²`Ù6YÚ“·©n‡cbÙ±'œ6e²m(JrA¦röLvÜÒ¾hM¶á¹Ó”ý䤛mµýXnˆ-N‹Pe`…É/9É…÷ÒFOù>ý Õíg<óYÝáGŸ0Ø2š§)L™"ÚÁÓÜã.ó°öÀé³ Ón›vï6Ýr»?½ñO`ÛX%äçÔ©ÔEƒÃèr’Ã6ÛÏ/Îè³]CF³—6“½¡fâÝÛmÓèLK*Õâ7&@@{èLU‘m¥É/Ö¥ìÄš¤Aqa&¿¤º-bââ×)ä—=ËxãË®úÐr‡$ð®B:©V¸ZáONþÝ›oÓ­»þsF2ìfzW^ßæ¿JÈ/ P6äf*•áÂgV·C~ÙxÓ­JîyfÑ\ëd¹¤Vº[2Š}<¼›¿ë¢2ùåݺëîWƦQ}AÓè•Aù›+5ùE ^‘íW*Ó?}, ˜Ù²u—§=ýÝ _ü{ÝË_ùšîÅ/}E÷¬2ªêw~÷ñsÆ©çïhþØÚxýUF~qdMŠ$ ýÓʰVäwSkn®Rò‹…m ItEnnE‡P!áð Žc¤ÁL*ŽpÕM~ÑôÔø±d'¼íª†Ò–®U„‰ñw•Gg’_Vùä=zM™ÄyªÖR2!V0ä+¢5ãÌ!2|{ m"çÐ`α›"¿l;_7¶nùE¼ò‹W%MÁ²Þݹ ³ ÎôÄŬEôB°_ìƒï0ø&:Nƒ~"!½N¦~`ëðÄiÍ>å†äqúƒBÀt—ÀOëægζÁìAÐòY*ò‹ ÙÍÃâ ëÛŠ˜?MåÜ¿#ñ}T‘_$³qöØh,E—Lšd½LÂû¨&¿è†ÑªœT Æ¿hòïÇùEÑ×µ†ü²Þz<6Á¨}ªx×µË5¯\Ë­¦ù¢7Q®Ë×—*üšˆíÌœq{ÝÊü|â-dEþÈòËc™üëc’ü‚ ¬ Ožö¼=Ò~)àO„$Nç?-Õû#Wd¹Ì9¬ëÿ‘‚!ßÌyé´!õrSJ•6rñf&¿(›À…£V¤MãÔQß'°¾Ë£’ü¢(í"¨Önà\„†¢Í†)ࡨÔC~©Þk8ѸÐÎÃó=LÕ¼Ú¹jubïjê\º\€îJ±h€F€ )N0ÚÓf‘ŒwöÍÉRÔIE;0é.4 eEYŒ.a4x$Ñ’ËßD8²Ã‰“ ;‘憫! öTU ¬/7áœÏ² °“Ù@ù(LrÎ4G3V#sCÐ'¤Wâ[õ KÃ+ùE²Ì i‹Öá6±%“_ÊÏQÆLÏù!a÷’€Žê¼"aÍç!Öad)ù…©…ã¤%¨-(ÊL}ñ5øh°xá…d¬ó } ׃€R-U€Ì Ñ"TæàŒ´ïÓ‹Ñ|²ViZuµ_ä|˜!ö o™§Ž:!] lÛ¶!£AU™HÆÛôT> 7D¡J•@R. ',¬Üo,Igö«”ü/xÏ=Å1ƒ¢ŸnHˆ/ŒÀ! °ÏÏê ò‹’§*½\3'«¥Áäxˆè®5¬gª¢.¤j1'†Ž$oÆÉpõÖ³ésCxD[+ÜàÒi0£m¶+Qï\€ø‹öÙ·;üÈ2,ᄸ?öøzvó¼yÛ &¿È3 ç %8ì÷¢rØŠ@‡÷PVù…sí!d¦^÷5¨D{œŒD¸Î-X´o!¿8ù¸ 6B€Ñè æ¢Ë®í.¾¼€ù ù%ÇÐ8„üb›Ê¡cZ®:¦Â 6ä!¯ò ïi¿ƒEÆ ±ú]¸÷>Ý¢rr™Ññ¡ƒ¥ÙB7ò’}o¼ù3Ý¥W\]Gs¨ÊÑb’k[—+k0=ÐVĂ֘nyH?š•^ú‘ž3µžìƒ=sµ5ø·X³Ïϲ6¸c¹8¸ƒÁÉP½H=ÉpB@]ÚÙ°ÓG¦6ªÄÝÇJ_ó´3ÞWPèKi.©·ö›BÌ×Ö´ÒäQ‹‹©ŠK#`¦NXžþž‹¨G#f.Aÿä]ÂÒ$¬¶ö]4 ÕÕ?7˜ô«Ëä——Aûªª÷«~L—3-Ù¶Vhò -òf¸É„Ìä43nÈöóÛ`CQ2ʪ‘`UÍêA öŽ`y:Óôˆ›Û>ÿ•‚úØ ç1ì,—7+L~¡A›2SÍx·þ^–i¤ÆôŒi€Q”,]ßdayBc¢É@Ö‚êê³|.¾ìÊšr:aM•OÙSè¸Bäkm‚­Efz´M9Ê¿Ð&fR&úÃQ2™‰‡uX&ì”e3Õ[+¨¢‘_Â1êæ[›þůÜW½ï°â4ë„å>gò ¯´G¨ý‘éKÌ”SZ°ËnݾSCO¬9½þ>¸ž‰öGÜô§¿Ðb[ š²O_ ùt tæ­o˦a~a…È/´h>A(…™ŸÕenÛíµ¨ñ°l¬“¼üœ†Åáˆx\‚Éò°ð•Ì’€ ™9â¦Ï±½üniå 뫈wUæ4ù%£NÅ©¶˜hØ=Ûl»Ý`^HÎ+÷šóÊi0ç—džS (l€ßf¢¹h®¸i¸<Þ–¶!-_÷º×¤2å ÷‰È/Ò'™†,C@¬éÚ'¢‰Lv+L»Æ i%'¤M€!” 6ë{`Ø g:à…€ŽŽsYžr`5Óiö’ú`À\ µ2ÇIr0m¦Ö×+¨¯ÅþÀ”‹ËÑ©€a&ëû2%[ɬäí3©“2Æÿñw?ýéO»¿þë¿îþê¯þªûó?ÿóîÏþìϺ{¾ro÷ž³Î«d;œ8¯I«íhᣪ°LÖÖ’Sëí™LXXG‹Í£~y`’Áâ…#@ð0\¶ׇ>ò‰RÑ{þP!y_ ]²‘äáœ2!”Çw¾ó:tamâk_¿¯@{ö€BÈ_ú&œ‘7Ó'c7“·ÒÚRhƒmí5„³µ:Šé#4ÿnTSW¦Â1JºG’_RJœb^H¸ákÓ\"Y¶µ'º”[³OkŸ D4Ç7LcòØ?]!ÃðĹ.¼ôªnó-¶)¤íDn*¡9ù%GÊüÿÏÿù?C5yÛퟯظvMC 'Äš›yåû~Ï«ï…ÅãÕaÓ¹àï|W_{ÏÙ\Vf˜ü"SQ}:ùÏšälöGÜ¿ù›¿éþþïÿ¾Î¹ÿþû»Ïò‹Í¼ÍÛA9ºfðïtÒP'V)ùAÃÇ+OkMŒ*ݯŒã~×Þ( ™1ùåþ²ç~`¦õY„Ù¨D6?÷´8‘O†ã†y*®åŒVÇÈ› ±’Ô[{™ÝÓŸü2Ž:1¬4sò‹Vò ¼àjÊ>:ç1Lk–‡Fø€ { õÇÉ !¿¬þÉ/J$ð5^íWà+nr®S_ 8xÌÚÔ-y² ›½¢q˜¸aÀ–`äq³{挒œü’É/b\$¡g5޼¦sÌå«:ØbP­qaÚ#~ò‹-Ç +C7Ì4K&Éq ËlèrVÂ…eþ¨"¿05&¬¢A90ÎJrK[L’iZ×jò *ˆ©(2H‰Ò´Ö3äuP&ÚŸüÂÙ¬™ü²ƒPú€¥±ûä¤èàaï[C~)퉲u,s²S9ýÑÃð)‰õZ%J9®xÏ{Kšö@†Ÿh£%É–ÉXŸöÇÇìä—àX³äA‚ËÆo( ÁrõaJÖ p„%·ŽÂ„„FÍ ‰ñC;ò˜î°‚Í9¸ IÉ`”F€9¯;뜂̺àŠî‚‹ËÀø3ßW„jxN8Œ€á†¨Ú„‰*.ç¸f½JÈ/6r‚òšLF¹‚³9¤F~Ù±Ûgßr~N9Lsïý­øœ|µÇµÑµÓaïÀÏ4f3 åšëoî.) úíŠ'V_M{P ò lŽzkíôkV ù…cª´8“¢”±ÓNó»…ûT™=šªá…dCŠrVmÄÂÕ–ÅœqáÒ¯ýðÇ*x—Ve.Ñ^ÿ\®~¹ÓûX•½Ö÷e8e]/Gô^Î\‹ ÿ©2¢uÁîi¯BÍ š³³ ƒQÔBûÜvÙ³D»<dÿÚ2×{Ôƒd²ýÁ(ÀK„„ A—hÀ¹v¬?ø¡›jM(ä—œ‡5³ò‡Û•{Zaò „–&¬`Úžåà igVíÜí]¸YÓçA¶ùzÿ^u- Øn€¹‚¼„á`„W;}¡û`Ñêk fÈ‘Tj´Ã*îÖ¬ml…É/4 ¸„6/T#`¸!ÖàÎ…ü‚¾4¿ôÓŸžãÓ˜=´2ø˜&,,!5fCJk¼­[*š’°9ÖÿŠ«¯«ÞuTs‰ð)n¯ù-þ³ŸýlÕb $aØéK,ܧ¬Ï)(vNÃL%¬Ÿ€ÁÆÂò€e…´l¬‚/Vm8ôoÎÀÜÙÂɳöXÜË M~‘÷q6Â7!µE3öÁæï\´X†¥ÔcKK|:ut_8@A( yVš„±ãUáÊÛYé_¬,‚þa¸íßíxãÏÜþ¥ç¾c$ÌEh( Øc-ßrÜà8b5nšÃñD ‘÷q<}­,×RÞ½P˜8Û-5–Ï4]"PON6Àû" ­Eˆ­m´¥v5mö> mÈ/Ãz+<ª}2UʰýpT%¨˜>sYÑÉæ*+äláf‡d?äM퇶‹y=¼øðã«·tãL68¹ŒÎ€N»‡F¡xñôDä¦ Ö’0îúëˈÒI€Ûl­½ $sŸêLÜxÿò=¦ÉDi.ó}˜´µég`®¶ [­5âw#n0 2©Í¹³;öø‡š, '&¿ÈôÝÿõ¿þW÷oÿöoÝÏ~ö³Š?ÇÁ ù£ï~·lèNÛ=cв¬šlc÷Ls·¬ÍþáÐ<­ÂéàLòž aÙØuµûh®¾·%äÕ…O2êxTišÙXò MyÓ·¿ýíî¿þ뿆² þÇþ´œÏŠrFE!gf@›‘‘7'VM3c^—S ¸Þûáz˜*>H‰ŸI_ Ò²ûßÎr¾¶¬ã—ŽÀ¼Zn™ =ëä!ìùŸüÉŸŒòÞ¯}³²ËiÄú ÄíÚ*Û§­× ”™-†Ôs°éÏô±Å·Vk½‚«qN®>¨ÿ]¥21,(à€4s)iVò uKLwñ/ÿò/C5‰üò¾< '¤½6žH†d€ ‚¥kCUámüÍF8—çûMЛê:ÞdÓÍgeøð®•‘än˜gµß¨¬ák™Ýó—ù—ÝßýÝßU^ÈíwÜ5?#ÐFz‰ 3‡¢ÌääPiß—„?VO¼M3!Æ´‘7WuÛ–FÁ`D?òSBŽ$¿RÑH”£œaó2aÑáü2©¬Ÿ5äÉs&¹úÚ_Ùd¦¼«,Şʤ­QÚ¦u +`\ÿ¡V1Žüªªb0rò Ç£¼€uG(À<Ù·L¿²`çm_M)´y&׿l œD2жߵÍrÉDI¶˜ðA8*B#Àp`ý©/~§1}ÎëÞµÑÆcÉ/êG³’_˜«üѺ$àÌÒá›Þü–îò«íqž`ÖŸiC¸PvyOÇ Ûj‚9·ÚW IÀ°{h8|L}ÂðyÉK^:VHÛ‰.öÈÉ/ýÄxª~m´Q'^[M‹@á86“ÌÌÚÌžL=ã=9&G!]´šé.²´ Ü´zbÝ‹ Ëa-=þ”‚¾|Ò¬B*ÝLL~qz’RŽ—a’}sÍPßkD´[+OËzÌXë.ÃÁÃæ¼k4‘L#ݳÈ~ïå¯é¨Ñ‚ªiSÌyò‹u©˜L“TÈu5Ìs+ù%fÙ?€‡ 79óBlæö@DØGЦÍÐ&v¯E0Å0‡¤dŠï;o‡#ÍÔº“þ©\0UuX¦[*}¿({f='vP­+?¼O]SÅKûLÕÜ^é\,ZT9£AOM]Ôûàh*ƒB¼¶?Ú3# ¯k- ÇhÒ^'È$¦vA£HdÄT;ꦙ¢ÑË¿ŸüäáÓ}¸b¦+<ùEôãT36 ŸŒ·‘}‹*ÖÎÕkª®ePX†….Á³f -öù 9NcúHVí«ZÝfÇ‘òž´dž©*²­Ðä-=Hà&vO¦Ó¶òÔ'㈦ÝF ¥Qæ*6%¤@€&SQHrÝgúÄdÍYçÏi¦ÊâTÎf¥È/ÐÉJ‘ê>1ÑpC„Mùݦv>±ÛxÓ­Ë~x]l'Ejƒ2Û|É E«fâËLnÈVÛíR(›Œ%¿Ð¢Øz•_ıöLæÙï0¥3s¬ÆSÊÜ…ûTB¿ë¶AHÙMŠ”Â¸kÞµ š:e×âU·š·S·Áó^0v8ŠHÖâ*#¿hìd0QÈ/ŒbñÏ<  pg<»{ÇF›–Ðì¸Av!À>¾tµ„iB¶=÷)¤Î{toÙð]Ý3ž5üÔûai•r#*C’4¬4ùEÀéÌ܈™h¿…6*ÇûõòžºöÓ á¥œ,X&¾˜þòœ ž_&¿<§ÌDꜱêþŽ`$G¹­2ò‹½§¦ãk+aª«ƒ"1Ž’Ÿ»€UN~‘v©À–3‘‚l¬.|܉Io|Ò÷±(gµ“_ñ¢!ÅfLWxuM€‰ð,GyÃÒyÈ'¿Ø>J³B¬¹òAúô»é^qf‚J/‡ôY{"/ÿž1ùeõ“_ì¥õÊŒ%­sÅYC´Ï©E‘^è0òË8úÒj%¿ÈZÆiÔÏi$guh*Í$¿Õ䈶œ^Èf# Íz`æ$xs0{¦íÃå|`âdRêÎQõ‡ Ä,­+¬æ9=}ò /Þ'¿ø[~×z.{âê;"¼ÿJæ½™#F…vq8U¬§¡÷ÎÔ˜x7Ú´UÒ¡+ô1A~á0'¡ÍQ©9Í×÷3äž—é­!¿”i¼Å;—Œ~1É{Ö_&yJ³½gÍä—5ä—õ¡°Vª„ WÖš–«Ö­È‡9mOÕ@q:SÅ—z(Ћiq C F„£>“AôêÉ/!¿€Ì¤¡tíµ×ÖS€¡°$Á"–H*$mz‰´~äÈŽQÆœ½«#ýáZcÂ:Z£1ˆ(u@'Rgò‹¯ zP>¬(ÛÕW_]»ÂÚÒÁš?â&¿¨äõ'¿JÃ(c½:»‡`€Á cºOaèBT0®Žªÿò°O~ÑäTÐefÒf‡…5¿_DÿŒ[õû€`~&€*’60#5„uŽ"Ìì«ù>lä7áIëDÃÞ…-¡SLÛOõ -y—ßÏÜœn(ÓO{Ы ˆg¶ ùŵ¦ǤÔ}h¨KÏÜ€î ןÝÃóöo”vŽ…hØ(–ѲÏf1qó_ô-Aµ ¨@8ÚêeÈÜž™ãm¢ABÆDu°1zÂî! g¦J Oµ±Û !]¶ ÕB~! -À)K3熄Ýc-%•’W†¾d jdÁÑÐ^Ì´/`Úƒá†Øƒ¥jZsÖ)ƒ‹ «œübK@0»ë®»ªS™97D¢¨hrE&ºM=¥œ~¿ßÝâ%GÌaÝ’Ãïpm]«4Ųr6Þ°š.ÊâJM~²-ñ¨b˘h¦N'µËåü¸2Ú&«†äØ9–AWÌW·™¹K8gR³6ó|.°¦öáv¯)¦H‹3ÛƒýÊ;¯-¸·å¤T¶¢Aš6ÐËf|Ÿt‰ls6xÊbQ^ÍXÚ&‚•çÚÄ^û´¦T0C…”-¬ðlÿÖl¥ÅÀÇ–hF,”6ÃôÉqþ 2¨W\ýÁêlfë¢ r|•Ò¨Š|aïÝ·\Ýqe±ÿ »d a÷Ñ0 h‘p¡ñò » b÷äDÝ FéÏñ³@ÈÂÕ 7„Ãó™>öŽåÎq°psÜ #É/¡L$8Iõ¾8­_”=wââ¼î—íÛ{lú´È›šú)Ú°Šd2ùeÇ e¾P&ÀU¦ÑÍDs”iFhp:4Ùgøðª™þÒ?…{ù!)ß©ÒOßvg÷%xÕÞ%Ù $æ“_Dÿ6Qް™ŠjÂòq2’m¢+¼d`ª´f=†e‚ó’Ú¥Åf÷ªF°é±e@g1Ý‹Ë\‚™' Fh[ްR4ùÅz´J™dîLÕ¹Ë4Ë$Ûï°SÕbN ç1s„i;œ¶1¶œ·`àa}Ÿ€`.€KÍToYŽ|–17ÓSk€ÏãŒÞ\°¶£0b܉È/ÌѦ£eqÿùŸÿYù!ÿôOÿTç†üèG?ê.¾ìªê! I›Ì1Êà¯]í¼Öëåkšd²P œ M‚Žþü›ñáˆô§4âÉC…ÔDŒÒÒâm= %=®l¤óD7ÞHƒ1rÃQ¼Ÿýì_êf^HPÅ^§1s‹ì¬Oû¥Áé4vÏíð/Ða#½Ü9@Y6“ýf}#rWwùU¬-¼™Ú´½R ›uò §£™jã5åG?þI]SÒ(ª 1]næÛˆjÖd¶?Ç€…Ö¢¥`Ô1}2(%Bçˆñ>·Òúf²œ¥$C™•üâ ˆÙj2Fh ù¥ñB23¤ñAúd¡›@œ LÒ‘´ LÀÔN¼oÓ–€ô@¤éöí~~ÃÇ>=rÊ„øÖ>–üBÝöH&kŸ|ÿûßïL‚ÁÝúßÿûwŸ¿ëîw~ Ò7“ÞП4B Á!# f Ðx;;½°Á¼Ì+¼ºPN¶‰Œ8½Q[‰œÕ½%¿ò*JRC|Po!øû/¹|À ÁiعéÑ4L1S[ì……~ý_Gxß³. à5cmBˆªô™a®‡Îäý[mµÍ¬G†«RŒ%¿HŒUàì“¢Ù·äW–ÏÖw(A@æ„Ø·êSSßkœä\ÑNÌο9'¦Ë#‡Ž3+hÈDŒžFxqùúÜ‹.ï¶Ørë‘B f0 xÚ±äÅ*uRñ)èÏTÞðíﬦÔ&&}b0 4{ÆH…QÇbk°9©Ä·}ò ge[ê³}xqš·4d,føŒ#¿È-ÕÆ’_¬KÕm${Ž\-sC^Wب×\ßcýÙ‘m Jcp$ ´ ‡aGhæMÈéñ6û×Dm8<C®ÌöáÈ'žzN§1;ùEÆB›cÉ/Ò+!…Ô@34ZðkÞÜ©g¶±Qº@À~Í<ý;Äk_{(œa)™¦I—@!³|üœa÷ÐÅy^´íægƒ¨åÌ’‰&¿¨Œ©€«™*ök£»íµÏsµmÔ-*iLòþPß“[ÜJc,ÐöûÁ¼uJàT¬Ý\Ö. ØkÑ~³ (#‘h¦=–üb¿D/ÔˆñKŒöÚ×ýA1Õ×},㙤(¸ÉöÀF|iSÏÉ‹Z_4Ä<Å·a`ÊÒîtXØ¿‚ Úµ^_õêߟ•ü"ïdy“_İê:2îþÑNʆHaGwÊàl€iêRã$hŸÙ>µ éf )[ÉdÃ_ÂIÒíߺT·Ïþ‹gÕ¢85ž5ä—Rñ›¦à—ªÀqɭЈã±_r>ºRŠ»|žP¨/+ds|2¤¿Fû3#%ÅM‹—  ÙílÇš°}’wú Uüh“õŒZ‹Z¶:û¹B¶‚—*$É Ó\ÖÛZ¥vù 6­¦iãçx¤[öÍœ_•™!õ<ÈR&Ùº`Æû ¯µMÚblâ6uB0èýá bZfšÓ_”LrŒ†œÔ×»ìYF#ï¸ëȳ?¤¶#ûP=œ3ùE7˜§ ù¥Ï Q]oýç”E'uŸ½ãK¦íƒöBz½ØÜ™ª=PjÝeg;Y¢Õ„òµ\ÔzuÌ v9…Í8F”€…ÙNñ´–¯ñP)BÀzRõUZ—1Ñœè™ê6Û_w½õë01ûaÆK%P ¨ÐŒ&E5âÖð´2$׺$T;Þ¦%Ùô½ívÚ­ÜôƒOߎÙj¹ ãVŠüÂÃ:E™f@‘Ne;c¿ŸúÔµ»CJ óí¬OPæ÷Ð$!Ã"ÈÉ¥=‚1Ùþ>f÷3jÚin¥É/zhLçÊÐöL¦gÒ Üõ¤'=¹Û|«íj!– (–ÉJúCQú‡-Ð\Õ^™Þýöwm2ë¸7¾ÃÒQA´¥Xp³ˆbt¹×ÑÇG1[( uK®² €¹†üB‹âBW¸!Œâé>mgwèT\{Seö°?¤HŽ™ËæaÍíY¯p¿Æ!Ÿ=\ñ)3]iò µù÷uªËT‡ 7$%|O±V~òSÖ®];êø:7ò¤ÓÎíçÆdE2‹8¼žˆfâÒÞ¼aቬ_<èð#¢fâÔ=ô´W ùEGX"*Ýrî íE˜”ïg›òk¿öëeªÒ:ÝsŸWÖõ ÷ò/î^ð¢bÏ^¯[«ð»~ã7~s,Û¼/¤¿ï^ÉÒV)ùEÕ cÖúÂŽ: kRžÇ\ß'Ⲫ¯Š§Wéäk@…ÚÖ¢þ*„²øj¦í£Y­ä¦KHžW!ÚŒssÕØ°÷[Lôa!¿¨7¬ìÔ—fÍ÷˜%a-r‚ËäuÚ`áT†Gi1ÜBø=Þœçtyhâh©ç'Õc1–­ì‡…ü"-Óõ•ÑÌF~ÉQ¥„QùVx’Aèb‹`XFp ¶>¢È/nNÚ#2š©A{ª "íïèጀ3É/‚ä—Í:g(¨?0 ù… ¢&Zã0hƒG¦1Un Õ_XÖ?£Ù²î„„Ëz4î$ Þµÿ1Z2“Ÿ Ô…v’æÐ–¼Î>–Yæ¶ ÅêœÇ¬†@áòË*Œ²Bæ:jMèÑ;¿Ññ†Åó=ÀäBÕ—©$Öõêß¶…%8q¥üÎòË\Μù“+òÖ_Ö_#ä€}2“_À³3äDU@íAx!,=QáÝ£–üáE­ˆK‚¿¡]˜¨€ l$ =bÈ/j®Êià{Z ßM†¶$Ù´ç\•?4 \æ*Ô“½ÔÁ¯EBb؇ü¢jíâ«. ìûÅ/–°Kw:t găsÓ–ŸCZ¦^Ôg÷ë$ÂÂ@1®ƒ¹éÉxXXD2›ú…8~¿q®“lmc#žòt·))ÑÏŦ>Ž@ÚÈ™¬¤JîéÓžR¡ [®)«€Ö\3©a¤{VÛƒEX&þO~!ó„žÔBÈHSÃÓO‘)Üù`È/¡/enOZôš¼!¿ä ¸[=¸§’ô!#¿Z_L–Tðl”® )yJºd 4íŸOÉDi@a÷¨ÚNTîYŽÏ䌴-V;ù%ÜkÍÚK7¸ôpCÂ,Päâœäˆ! YXsø ´×áüý€iÒ¤¾‹ºªÓ·T°öVù…G„G67¢y&G‹yÔ„—}÷;°;ðàC»Å‡ÙíÀAEûå$ü²æÉD•B”8G‹™ü¢®#›¡]€bA ÊQ«”ü¢ëÌÛÁ¿bԡ醾DÀ~2Œá³hŸý».àÁÂ2ØcQ9ú®K–Ž3=þ”3kûàœó/îN*óAœ’OØG‹¶)Wºg„õK³J&|Á*™üPhïy±9›pC˜h¨õÜ= Š£n¹ÃÎ k›<œ€~µÆ5b5dA^4ƒ C.-P´s/¼¤’_°|TôK# Ü3äÂÚ[í§îƒã’·ªJ8“dV†"¶”½ˆÃ°¹;4\dfŠ]†OJƒÖàŽeòË®{ì]8!;ÖÓÛ@†vPm„…€ÑѾ Èê ¬¬‘_>UÐ^7w§ñÞjºjD™þB@B(b÷{/îUS8{è M~±E3Hhá†d›ÈܹÎv_x@íñHSÕ¡—:ǵ%^0:4JHÕÕŠ&iúQ Þ«éuÑÅWTôЃJBÈ/ÃÚª  q+4ùE„B@¨I?÷nHvóËä—=ö> âr´Æ ¤®ƒœ!E3’f®€K0sš´m0ÊML:pØÌýd B_UËõ}>b…È/6~kŠ<ÂøY»áC‰&s¢gp9!À| ŒŒ&`úteÃþÀæ™çswwÅU×Õõ9[¯Åzåì4‚Ôi'&¿ˆjțڈû ;á–5»çÞûW˜X:Åý£„!­)ž–—唼ßz´?öÇMYp@_þZŠmfÄ ¡?~Ëç‹c>aBv$²šˆü"’ $oŠðòÿïÿz}è†Uh&'Â;ÐfŽoK‹œ‘W[H~!¿D˜¦EÇ‹·¹>„ÎÀ?5ùÅ*6žxò Ö«øô*à¿ÿû¿wç¾ÿŠêmŒ’¡(4l´>Cgj³¶v¯‚z?oÊáa¸Ái§þÞ3 Z£7Üô‰¡ÇÄÙBd+Ìuìäo·y"¢Ô¥™Ü“_`Áà ±d8 ­vz(ÊQU{„Ë©õÌ™Óuãp²0²!¿„'ÂÙdÞVcùÜÝÝP~ômXSW&“É5³’_ÔkxUɰ>¡˜ÛÇ$ó{ürîEW ßÓ 3Γ¶ƒÝ×ðN ÀY03´´û® Y Ý7Š2ÏG$Ôðî·Ž\—â]ûD两X‚jÓ|Û=¦|Å®žâ…ÜTažÖ–¨%R¼6zC˜BÓ¦]æKÈÌï n½aeáññ¥M|iû¦=Óû]ùø­%[Ùv¨&Ÿîu"ò‹Êšâ‘Á(6X +{W§Uì´`׺žÜÀôð“vC™»ƒ¤’ ð‰Å÷hÞ¿g¾·Ot 7+,¿gOõž…C=Ì\Å´Ì4BÎ:ù%åDåCÀ̬~ãM6Ü` ¬o`ÑCCjl‚¦WØ6|xrëÓ«5œ,$#o8D~ Cˆ€í$wo²ÙÈ @^Éd'"¿H±€Å®ýi¼ OoÝðÒ [Trg5µü;óB2€¡Í̺·j›¹& { 4`A‚pÏúfî}–O›tÉHBíJÍD>4:–üw.‡TÈTìpCÞðÆ7ŽÕÕQäû†m½uÀ,ÀwÚ‘ÜS5*Ê!d2–ì<.͆]ËaÙžÙBq"$¯þÒß{ÙHMJÇ,/ÕÁ‰È/‚rÛH*k9üºR“¹øòV÷Ÿ‘á„põ!u&“ˆsb¶·Š–lb[û,œz†’ež¡—|úX@ìÚÒDä'¥˜ækM0U5¥Ã .¼íc¥J>ØÀ¿9ØB¡È8 fÊã 29M˜œ¹ð¯Ñ™ÚhÛ‹ª¬[—ppï}‹¨T.q¿9TaÖÉ/zJÊAqöõÚ׿¡0ën­B ¢£UB3UQK£ÎßU×)-r"4iýI»”GTÚ¤—6u4fìç9“ ‘ÔÑËÞÓ½ìå¯+¤ýR½v¢É/"åªO]Tñ7Ü#–.xÏИ’Eð¦<©- y¢­„nžÖ˜kÿt a Ì™ù CX;øÐ#ÇbcAÈá‡&žü=‡‹C‹ì=S±_^&¿„üÒ13$,Þ– xv¨úá;‡Üf„´aœ9}"” I÷¢–òËèØ¦ÊÏ:'ò‹€@e@@ fú‹øÑS3‘åö»¾2E•¸³j/ÄÐ>“€g¤EÙGì„¡9W+4®HJ&9N„{Á®{Ž$¿díPϘšü¢Š7ûä¥xí7k’‰*†:‘þºë®×{Âi!Û´¥ˆ5­CǾGHë+£3¬Áþ¡(íð…]j…/ŽHp¿ëžûv¿Sªu£–öCI¼¤™BæD~ÑsPÈÔ—ÌîÉÈoaSÈ/§¿ïüå&òŠ7E(ÌñÅÆ®ä‘œSMHÐNV6„5"fëgÈ/8'ÃŒ¶„œÊ4jÁZÞ‹mPîóÁGÕ¨:sü©.M)sð®p§J÷!¿dêKÐVê¢O-,œ9¼FB}¾3mŠ;™+!ûs)[©dár*›„cvšÔ( D ¢/’‘<Àa¹ÇŸö«èË5aKóÈ 9y¥=‡[Îä—h™€Œ Æ~—Ħ[lÓ½ÿ²kjA¸fªíWÒ¯þð°Ì¼ã|¸É–;t¾sÓK[kV®¤mö´ ¬E;ÀœÉ/Rê'\ž&-Ó`J÷TóÌܼާòËÎ圞÷¡˜+v |z¦JáÒÁ™!q8Û—á(›l¾m÷¼ç¿pìiøê°=«„ü¢¿`A{R¶&’£óûÓég~¥=OzòS+éàÖÂõûº¥ÅA-]V&—Hf¿ƒ é³ì•Û/Ø«œ«µc÷æ·½³÷¢Y=h4sÔŽ·sîJO~QÁK/Pˆg½† òËlÜùåÙë=§p.Ÿ_¦¿¼¼NYwýçvOxâ“Ænð3Ù=|ƒ5¸ÚÈ/B=H 7ݯUA…˜ô3X’,ƒ€«ü¢BMPeK`‹?&<é®Ìû%ú‘z"KbEe+»¶©³B\àdŠgý¹õ©ŠâÊpxuš„3 ¸W¨. ÌmA\íñ.íɰä(NQ ?Úß*–ÚÓJ¥|ÝI-o¢-¤¸Q‰'ïÏá&²9Âj 89¾Ø×@©ð5ôH0Þ£‹­Â€/ÆMÿS0xú)$ô7¼ïa#¿xÂLOñLTÃVåÌ¥*‡7ÉK›dhš1Á ôÛôiðj,e0ŠŠ½Á)¡C©DæÖ˜. ¬ªEyøÛŒÓ謚¤Aì(ów³pÖ“CÂhйEÀ>ù…€s)S>}Q'7“݃"¡Š]àUùQõá!%¿XkÁÂRþGHšëöûÜPí  †ŸÕΧ|Ýrgãeò‹J€”Í{“2òKŸBØÌ ¡Efš™™üçA@&HƒÖ`Ø=aø¤{^L9G‡âwý-mþÕJ~Á,KãH ¶¬‘™Üp´£mJ¼`çÒ;,CR*ä—ƒYRH0åtí]w/ƒPvª‚J’™f:gé½N@àUUÁÖBP>@iTåpµ_>ùÉOÖµÈLmÜý“î­Á6©@·Ëp”ƒ=¢L9¼ôFöëv.­8-»ŒÓ8úøÓê°ø3 Eb—]w«Âælu‹&í£–ÈJO~±ð¦&N éÚ¨¼·kY£ð±L~Ñ-Î`ÍÕ_t•õ$“2/D÷Y;O[ÏaÓ™râɧVíX9qBÉ2äUó@Y<`ëÞþ*2Zaò‹µ¨ëLÀ€ïUÔ‚ dj¸!zŒ®†ZÞ¿ysª ï·cL—Vô•Ö:Mp¯a Cç‚7¸äò«êö’ö ‚­ ã†xœ–ηíΡ+CôâõZ>ÄÍÛì3¤HÔ¸4l´ÍNå4mm8íñ´Ás”i¦õóA¨mGÇTÿÿìÝw¼æUu/~ï/‰7÷&×{o¢Iì‚"؈b¡—™†¡3”a¤÷6”¡a°P”*D¢ØP$Q1jLŒ‘h’X’`r£×|~û½÷ù<óÃyÊ™3 îüñ}=§<ç9ßõ]k¯½Êç³á4oႼ^]Àõ™ü2êTµ ÅPb¬É/¼(l´$Š<¯ÆD}ÚÄ‚Ý Jꨪ¡œËJØœÙêgoÜvˆt`d`eV°s€‚M­Oí:sí ®kpÔ©jÚ¬kìÉ/@Â)Á· X?Ф£d Ú÷YØÎcåT˜a#ÁQ±ÐY‡ +ÞÆAaÀ>­ÃúNPদÍvV,üÞg'¿ÐžÐýM~á=eßùÎw*uâ/þâ/ªWå]Í<©}®‹7olž´Ñš‚É!,À!s26̯š™Z„kS'ª¸ó†›mWpè[oÓ† ºcM~‘Š&h`Ýq?ûÙÏêl‚¿þë¿.ùß—*~²Š·´÷Ù.F ëÑE›Ì×Ï<¿$Œ‰ÒS´ÇLïs~:LíW.«ù Ô2Ç£g:’ü"íI˜A`(Ê ^ÈÃüõŠ‚œ ¦9 ãêkæúF²Ãï¬E^2B,¶BxɈ›F™hlÂ$¾u• Qt,ò ¯j 2×ïÿû£˜we ž^ˆ›÷uƒ¯4¾VØw]>­3sDæ@F]ÖaP–í¨ñ/õÇÛ€·}ÎÍ•‚hRp0tò‹7ˆlä‹bS£l{챸!˜?FiŸÓ—a[H¢YæK»ÁµÒ¤¯ýó•ƒÃmüÄ—¯Tt¡£E,Âß|ë]+ÃÓÍ)ö„‹üb4Ã'w8Z?þñ{ö­oWSk{œÁ(“Á( (xQ†Ö˜n›˜Ö4ËŒ9BÒ\mýµý‘p8[aùdÞÁG mâ¥%Ÿj]ò®c“_TÓ¤S(öD[‡ÌÂ6ÂŒoþð-ƒnóÆ avMÐkª†ˆo.¥Žbš ð²œ•è¦ lx q6]Îí†Òø[VnÈ[4TòäKp2ùEœªê†*.LÙB@lëØsï}ë†^‡W7ݸ 7×½¦yÏtÁs¨t¶fJkÍ$ñ±š åòûî!Õ~׿’ÜUÒ³½¦R ç96ù…ªjòEÁ¯ÚŒ¤WEmöÎóúgœûÇž® £5_ ÑrDx ¼ÍiG÷g‡ŸyïCx Ë'Ó^ºã:nûÈÇ ~ï)… ]blò‹Œ_ùP=GEVN@u™í ù$ÙBPʦÛfÖ-?Æ?“Ïš©UÖ\yÈȶ"ê¡áœ3ÀôÁFm’ámý™$mNcøÌ/ùêTæ*x·;ŒM~áaÕJeÑ ²…Z òË-w~¬?A©Qçï©æÆœÍ£ q›·$$íX“™Ì$æ5ZÃ~ ¾m]7So&ß0××4Œ€„ÝtÓÍâ_µTð§E~Qr ù…•Þü–-+ÅJ9ƒO²Ïå÷p“iÀ­[§öÑ왚ªíBSòмufúÖàÌ^6„ü¢|"‘›üÂË‚g+PnW¹!%9uL¿§%áW¬Ý(q&)E4&˜ÏN7Ìûª=6<éåó|®è§d¼ãŠCý‚X–)éÉŒ$¿hÆHµÔr˜i´¹öÝÿàbš_ìÔ´ÚH0ßìDICƒ<0‡C±«ˆÈv"¡Þ¼e2Ëìo¦3Ô:úø¡AºuI@Ë*yå@òKz2¨6J@Åß×múúTO«H{„â|í5(f&G“Ö$sͰ…åƒPU 7¾V%gõ7Lø´³.,÷2õÙuD*ð*c‘_Ì ÑÄI…;Ç:ùåÁãÊÚÊ^—!(ÝÁE„móB’ë¶™•+üS öåÐ…Œ?ÎÜ:cä„%õ Q°6ìẻqƒ'¿Ø:®œf¦.êédú‹ò½zmѦ5H[V›¯eø!F@Ú MÒV€ö픉vÒKΑƒ4Ó(„†o|Ó[G ¨ˆÅ\Çšü¢‰JH‰sL”UÐx0µQ×n{ìÛû轚Y!‰L˜)—ÏCÚÉüxWÈ5sº‹;ÂÔ÷)£HÂwßkáP95YÑÙØäÙˆ™Ì<¬d4ü,= MQuQ…£ç•(KÎ8§H·É‚÷ÔK¤ÂD¹}[BÖ£œ2{1WN¨9nLŸ$ÛPùŸSÌœìbÒ) sù:ä—¯>î|×É“_4T•svU4HÀT¶Ù>îÆ9\R÷à Êä”D,b×L7ä%3Zœù°;å%ãmš×-àÝ"ðÁeí>¯`Õ­ÃŒ·±7N›ü’Ê—ýQI$ô¥hPõL¬èÒÒ3¡å¸²ÎÂϬwGÛÐ&ç‘3B˜"Se²„ËvB£¾6š|}J~Q:•ÿü¢óÄ騫¸Kƒ.&á ø¶¡ü´Þ³v©eEâ„ds]žg.íO¦ÍŒ·Á¥ •i›íçPïÿ¨Apq^%FäZRâ“£ çô$ ˆsnU>)ßóhÌêwïÙå ¢Ck#§åšWך§Ófi-©VÕÀúëš­É/½x“¡N&£m¬ÁUF~aÊ!@Å*AHØ=îaµL~ ù…°þ‰íeTb&‚uÿ–OÈ9X Èk„ü¢Ê®Ô ¦]S_dŠk4˜V^q„?E V‚“—á=½<­6˜™ÆWʨÖÚL4Ê“ÓÞZ%¿ä(µéj”#éšûT¦o‹ÒPL[«äf !¤±xcû¬ˆI ­å’˜DŒ¬-îg‰‘-ï]g&¿xÚ]Ζí3‡'¶¦¬'fg·ÿ†üâ!ùY&¿x_È/™¤(ÊñÙ%ä\}(Én~Øä鎠V!°Ô\ÐöÚ”ñ»B=aÉ/ªÙ„8ˆ”ê‰L“È/9p:5é3æà2A†`šOžB8 08ô|×éþqÞ„P6ê‡ËMþÒÚ‰{·>™¬^0Ÿõè §gå}¼·ø¸ì‰ëÉ/ÓUÆÈ}rºØ})I<£\ó˵´¬Óõä—™<ÌQ»J5YZÚO+1åée¯{¨8’ŸØ¼aÕmÁÈÙD0Y£œ”ŠC)¯ü¤8«‡ÌŒ6RyÔOç÷«DHh®rs³ü%`Õ3ÜO¸WK$¥¢@è  ïç C÷0ÌŒ.?¬î4aV ëÎiÛ¥&û(xEaióTïÙàuald1¹&O~Ñ‘zRM~ ùE;B/âv5GÎñ”Œ%°ÆÈ/!Öb Ûþù nHwòK†Ñ =Q1ª;»‡™J·—î™ê€ Á>ì÷4ºFÈ/ÖG¸!œLpéŒ2™¾$q6fã E‹{‹)'"u\™üRð¯…72§p<4•”8¬A^•€¶¨./D$·¤ÑºÚÈ/Ìz³À~ò‹uÈÉHŒ•-v+I²ñ‹=ª¶ß´–Q{-\\…GŸpjEzœZ€Ág– 0ç^pQaT×b$$-J¤Åº.a ‹Šåco^¥äBÙßP í{“¹! Y—¾ïþ½=K;.ªt”»˜`Ö¡)s:ï%W\ݻ藕nñÜß2Ñ4——d\0¯ð•Sm13&¿p2Ö  Ÿ!µ²3^Š aæìPëû7tǾõhÓ9»îU{‘(édi©I ÚzºÒ@ï½îC½ó.x{5af*[aªbã'¨çu•UÔDHÌ~¥È/¶ Be( Ojdž.OÐ?Ú{Ÿ}+u)‚ ¸!×` ˜nŽv€&ì+X™ â¦[?Ú»òê÷Wï›É/9+µÙ ´¶·*žY&+5ùÅ~h³‡°Ou½¨²a-PúÒþ‹ÚÔ—î‘ÁçÖ×9ÙÐA§™6Ñ&Ú™Ê×T!š‚;ðõ5ï¿¡Ô`7­{ZÔwQÂ̳ýŒM~‘1Qö.ÈÆÉälB_Ú­_tH¿© ðc»8ôh¸Í YR±ê9[9³Cr:ÔH°épçFh`TcI>j›‹ü"ܲÉ&þôOÿ´² þñÿ±÷çþçu*!­Á}Ë¡ë‹ÞvdEOÞ™ñR0: ©\œPdñAp¦šá(@4˜3ÏÃÓâuÁï}üþÏïûö‘M%Ú`ŒE~ÉpÑÌOúÓ>mGäßÿýß{ÿðÿP¥,»æ}å†Û™ bÁœ£ˆJƒ±4ðs¶uI`Ûë H‘£ù»T¦àƒ»õÖÛŒlÖ²2KˆióÆfF«Ôò‡šŒ’…X&!½ùÚ×¾62Qð®2 t… 0¶_7àqý£MCg¢akÓ%àM»S˜‚˺~ŠFAL±ðr"ÚTýû¨- fÞöÃQŠÝRщM+YätAG›ö2æ+­w^áÆ;Z_ ÑxqÕ(mѦ+fÚÓ% ‡ÏjÛè>˜ÙŒ·ÛBÄñµÓº_ÿúÍj%t`©ó5õ» éÌœ´Ä8Ù;g£Á³þíßþmïßþíßzFÜD`äšàþAÊ ­h”3q@”rƒ’Wׯ‡a=æ|PR&IÀ E! +XÚÏ|á˽sÊL¼A³µ˜gJ(#É/öFB  Õ„NR*NˆúáÔ»rÙµ} -÷O+ŒB«„´E„’jm'ÌxÉ:„Ãk³CìÏî!­ #ÃÞ ¬xý· RÌ2S “Ð$VÜ~JÉ–Šlºªj„£>øàƒu_dã¡Ö ÎïüÈ]ø¡ FâC~i|&0íŠhÂò –.CÄD:Àúqg ‚’úºK|if !ÝNÌ7nª5)ÿ /Dz§ÿ"RR½JIw– Ÿ,Vû#!•.Ô`TÏD"Š:G²àæiÑ€› ­ëÇ€ˆte YÁ󰜒÷7 ûgêz£½°ìh,Øk÷Äü;ÿþÞv¥R0•Ò²´ŵÂA¡ öÄSJ÷jµ.eøÈ/Ø‚qû%3 TÂ;kÎ.un!»LlñóF‚¹¶ ιÐ2a³& 37+çåžµ°™lŽýçu=ßï¼Ë¼)…”¦ÁöŒM~‘q(8ÑjÎz 7dÖœ¹u=qHœ,m²Ògê^'Zqïá÷ÚFÅÝ[Wj˜Ê\åžBϱÉ/¶_&Û-[Hg¶Þvû"dãRYOœG(º0¯m ùY³J…ï±t¬IkÓžék©Ge-Ǽ ŸY?µ<„-Ë^>•Ö'96ùÅÁ@Ò*É1 RY3ùÅšj΢E&4F¸¸ÿÌ®Ë8 ï§EÞ—`ËsËcú¤ï„zËgú\[¦á= «ßwÃÀ¹ZÚðJ/¶‘±È/!n+3Q…§“ÞqÙ{ª@mÖçªËGYÊsÖRÆG1G‚À¶Ä-<ËÄ¿öØÌ¦ÌÌØ  Ï½ð’)'¤Ñ¬,…Bl#c‘_ï¿ÿþZÔÍTln ê«TÍö=°øÙªÅ„aáj!À’y.w·U“´•ˆqà ¸ËLš×móbáb= ‘SÆ8ú[wüÉCƒtu[ër,ò‹ù¾ûî«O%Õm¬ùš²Äk^»iäõ±þÄ—d ´çkN"“@yWæfÏtÓ‚x‘OFh¤Š^h5£mÄÃÖ,¡O>ý‚¡3(i¬\”6ùE.w„±‘ŸÑ !37dã]œrÚ9}mq@q>Ùïl!öLëŠ%˜€´‘àÜ6’Ѫ©$D»¶—L$çò”3Îë½ú5¯™O‚ËX—c‘_4tTÈÓ£èk°wk…P®½÷;¨rBÂìáU™jNcál2|AàNChÃìÇãêú$ -%£m2,Åúç^xàÛFV8AºôX“_„wªäõevQUa˜ürüɧW^w¼3¥Iî_@HÇürÀB¼Y˜;¥ª§lÙX†Ï»°Lï~Fqƒ’Ê…-'ËØäUÏÐB& Ê¶ªA@ ‚ùT·Ÿÿ‚ {§œ~öã8É6rfÚR°ËªguÓ®œÕcM†ô¢m}Z—M¸rŠv©nXøÃd¢œã´É/Õ‹—òt,`i‹ÊuFÛ¨ˆYÜ™òÌg=§wÄ1'Ö8V(&8gª¢‘L2‘ä—Ì5&Ê˪Ë6WóuôÔ‚ÂÏÆîa’RD™ÚŽÒÇ´'¿ˆW¥.z L%ãm”ðC›P2ù…PÖ¤ì#y%“«ò®uøÐÄÉKÌ•öJh Ÿ]vÛ§7kçÝêç ÃÎzà£@Ýàýîe2àðq8( ÅÜ_t4X9¦Qç”zJήR0âÍð¿TzÄÞ¥±sá%WÖ <Ìž6 ¸ÍN–æmé "ÜÞ½fÏ«tŠQ5V:q*˜)ExàÖfñŒDI‚‘øÿȦêIÙ7y\é {bÌX-À¤¤Úð%¿hiÛO™îL„ö·LrDÛÜ^¨=ÇD-ìžâˆfvˆml¼¤WÛ•î±àéÔ83Ù!Mö°«BhëPŽ˜‘‹dFðµ2ùER=•—´ËjkÊ1¦¢ªÐùíqöå <¢%#FÎ9‘ëùņìÆsæ†ä,Ô‡D&Úï6nÕ4õQ¯œHJû~ï}Öž’ JЧ˜ü²vÉ/‚x7($dbôv‰/eFÏ’übKáˆhQ«½ÀaÔ£§&0Ãä,f5ÛÑTä—òY–êþš?¶ò¦;.ùEÄú¾Øw=ù¥4OWȾßi^U6ùsÖ“_6ÛlY©!--ñçüÁZgÁ¥ ºÅ¦qšÎ\kÕaÈIC[ ñ¨¢"ôó·>SaM¦#RRµ(¡ãvãìñ#£Š²-Ì3E™Ò‡kp†ü‚Y íÑì5c5d4á ð‚$(’_d(9¾Q¶_ûŸ%æ•}HìK9¤µVÈ/¤ <+Ç1N憨€Œ έ­Ì QŒÊù”Œ’Ù=I¯B~‘ÕÐ&¦«Z(£‘Ö©Ê9Ù!©¦Ñš4}©<ÕÇhPõœv˜&‡O ½Ð3…Þ ‚+̰L29Í— !3…ÓûTÚHïE÷Lï…6 ãý<6AÔÖ*ëQµ(bàt¦B/¥€ÌD¬" êDsœbYpéá†H¥2¿‡‰æܘià¤Áßnˆš®þ§=“©*&DÕÞ'äjŸüBƒ˜˜v°>]'ض´Ú,Ý¥hqUÛoá…ürDoq·qÈ¡GÖI0;î¸SïM%ËŽ3ý…€Ê%®ð¡ýŒùÓèj!¿„¾ø‹I&¿0É0…œ:°Œ×Ø÷€6„AÃ5X˜“Ï8·wúYôN_zvoáþôO7 »'¹§å’¶óµÖit•’_h "ÄÄ '…Ú´»ô¥ЬÁ…ûªDé ÏÙuŸ:ECGǪÍ9¢¢?4ôAÀZt»Î)]/À‰‹Þqy98zZ+Òt¥¹DH—“¢¯ó€fL~¯Ãb Åî±6»ÜŒÕØ£ : t…÷)šÛm¯B/œ˜6L㉴a)Úw°èZz9¬Vö¯í-=ûܺ.Uïh±K~QÉc¾¶¦KP Á•"¿tôÑ ¯*ÔÊ8 Pè_LUrV-.‡îe( Ár¤¢ß5,@ƒ²4G‰Clém^þîkªùÆTÃîé¶õx`ŽMíˆ÷Ÿ6ùEà|Ê)§ÔãO…j¼3Íœ¿Û‚rÓ'TÀƒ^(ÝÙL5ÂyK ¯ FÊìÝj€Â ¼þ溥ððË{ +ô®Ea{ñÐmOc“_x.›®õ÷¯ÿú¯ƒšýõ¯½âí2$eŸ²µrıUÀFl9¹ƒ hæÁžîˆ Àgªm†ÁÒ Ò׬u4¸<-‚“ÂÁã]þîeµÁÊLµøÔz™´ýV‘ÚÞîT™N•Ñ;í)ÛdÌó‡?üá l3CþéŸþ©Î9¢h0ƒNºð•Æ$h3}‚ˆ ³Àzô7Þ¯Ý!“Ñ9:5‚‚°ñ¾ã´ì©Z†csŒTס\È,äƒRÇ‚2e³à¡?üR¡M\^±pá…h•»VÇ ¼íå`¼ú}`eADZ‡”´˜7oÃè}´€¢¶ÜrjhWxŽJt5’ü"u’ëeú íM%è{®¹®Ï ± ð’ Œmµ1Û§„…Žô{fíMëÐúÚÚ…´$¡»óDÞ³ìSŽÑè )ÖåíG’_˜ªüPZDXëð?øÁ ”¦/?üÇ£³¬šŒN£ÔEÈH:¢ ÖŽ^\=,-{?!m€M´Íe§^ˆŸƒ²Ýy÷'z›–0p˜Ùr@‚“‘ä^Uæ%™k~&B„ÁúùЭwVC—ðuCy\\ÖÇBkAx0Õ6<ìä 15Øõ=Uk…rFeˬ¯X> m§œzú@!y_¿å6’ü’ù­hLÒf†£>ZŽ ßu7WOÈYðŒ™NH£4Õ_«4I‹öM[‡½±}»­š)çBs ¤4 $œñ6ËY>õn/ðSëm*mRXiW‹üBsöFõ¡š€»Ï )œÉ« Òªáç7¨'A™_†¢ðœ„͹ç¶Û3ös—qR å|ÿãˆ/«…åÓø!¿ß§k€0•¶ Å0‘ÐHò‹Ø ]-F6A@é,鎳æTÞ1Sã(lÞ.ßçÌsÎDÂZ§L5ôBp´Œ™j”¥¯LL¤øRu:¡5…øB»àß¾ß~û¦Òöa=R\;’üÂáPÎ(l²w†:±Óì]ª›Úm„—»ª¦o‚ß]&ŒKLJXN‡S² gý…ÔB8?³ cr8ÍŒ›ÇÅÀO¥IÁ¼VÿS˜gK¤Íìß‚;y§øP.ãGHªLä•ð ›_29"äy¼§ŒðmhÊ=õ¡ ¿d„ lls:sØ@¾÷¿h•åÄÊSi’iÓs@Â;š,5 [pµ–±_8{¶•7” ›I¤2 O[n½m¥Jð€f‡ã¡š&š§$,mŠwåe9"Ø> Y™ñ6!½0ë<^˜–·ÝnjBš¦,‰69JM^5 b®Ëž¢}–CÛòxV9£‚°@=³{pþ%«›¿áýH„öam…Ê 4RY§a[—õ¶‰ü"4´­0eËæ¼œƒã1|ÞsÍõµæ3•&ý\Åplò‹Þ„Ê·)c¿Á¼`Ò ½¼äò«ú”À¸ÿPsÛ ,3êš³à˜š×½¶OÎÀ¡^à¡™.JXÁBòL+ü»üÊ÷®p´ê丕&ÕhÇ"¿iw+k97gÏ}öïcέ?B…÷˜©g‰?­/7½ŒM^“ ÷ÙϘnFÛЬ÷‹Šì»ÙŽŽ(#…uR-JQÁ×!K^9åä:!•=‘î¹9«üró­meØ!9&Êœ™©5gíD0Ž-CÉ|&œp€‰……ˆ‚fN»[nµõ@!¡·¸$Ï#É/öNGá8ƒÛÕS2¸]¦îCN>õ¬Ê"ˆP4ºaÆPqnŽ6ܨ˜µM=¬ š-@H!EÎ8UÑ‘¯;ñÔ¡Á¹¤ÚdzŽ$¿P·N“l$Åß®€)þ¾òU¯íÒè ›Ŧ¼©µ¥—Í^›¸!íʱ6þGذÝјÎ8û¢Þoj&8ìbucM~±MäÜ«—âo ¿J†/(×¼ÝöšÈÚѲúF~‘+rIŬ7 3§£r—á L6£m2˜°MZfþó8E÷ç^'È/¿,wye@‰À•6OÅ[OC™^h„„¦á2y2}%À”ë¨ãN®QJÛ#ï¯QMŽž±%ä°fdM¼«ºlÆÙ0ßð©Yå‘~lw?m¤iX@Ð!¿¬Xã!ääÉ/ÌVwɦª<ï„~¾ÎÑNö×g>óYõ(Âeü©È„Gåm uÃ9M"çÌí1éÅ×~¿|†Ïq½Å‡W‡4 3QZãYY½Ü{}_î³¢è ŸâT•¯1G›ª¨ž&'"‡ºg¼M÷ì*4££ S {bhø6t‚¦ăÒPLTŽéÊ©mXn9)IýöÀCŠ%ýÞH Štt¸ÔvB~Çë¶òV²xÑ“hÇÓÎÙN¢‚ºÔOÂîñÄÒ£øo¥|o>ˆQmÊ‹<*J ’ILöÉVEoë’öSòõ^eŽÈN;ïZ’ã©'ùF«Ö¨e¤¨Ç½ñé¼OÄ•«mb­‘_ÜDÊò@n—(¼4§!2ÉÁ´9Å>' NU·ÿìdÛZ'È/zB ûšðÖOà^mÞ M.!£ïUä¬AoQQÆT!Ä¢ëùEÆ¢dÕ;³ã ×ø¢.šªšµ¦&ã½9›R›™ÚžX†=XàÆ;ÕF¿J„Ã>¤ô'•ÌäQOŸéebËTä{0^íy]òË“fòË4É/_í¦KãhlÚLØ•ùP=zç7:ÞÐé]» =Dï6¯²‘¿9–PœÑOÊßKÈ£ :(Èl衪ZL×ãm®€÷péj,µ`Uþ¡|ì…pn0“_2eôÔSO­€ÃÏ~ö³µä!«¤cmæý ÓN )í™Qnd;ì¨Ü'S°®hÏ:#”6\,sÛðžpa÷0ìžÀ™ãk‹¾¤gifnˆ´KUÐòþùŒ5N~á4ÏhÐ+3•be(ƒ¬#h.ëÊ¥VCHZì IƒºQ™ú¢;Õ=:.gtAR‡²FÈ/œð=GÈvW@k*G3ÓЗ2ù¥A(ë.ô¥§¹DÈ<&uãa­Qä´ÕJ~q²6 "Áp -2çz.sq9Æxöì9uòËþ…ìrÀAe(Ê¡åýe Ì~…Z1wÞüºÃîa¢.U[‡½ReÀÅ£ËX,f»ZÈ/Ö!È6'c r8Ö sº¶uØØ=ó{{ìµO99°SºS»î‘ÇÔföÜaGŸR;aKÊŠ'-9½·ï~ û5 õ BNæ…(Oú™‡¸JÉ/¢ëöGƒ¶kÐ6 &óGWÚ¯±a÷Àh´jÏ¥Á¡ñœ¶^=óüK+ùe¿…û÷KÉG9½ô]x[­EÿŸ 3žüÂöíiö/˜t`_n ZİkNf÷ÞA‹Ü3À‡œIØL€¡If½Êî)øpग––ß’ÓΨf›É/9ÏÖÁly{NÊÞ;#ò‹ŠP/žÙ´} Áì…Ö_ŠOÈ/‹9ªš"MÁèÿ»–†¹Øë=¡3…2QiLåÊÓ—^þž‚>ysÕ ïš±æb¶’%AùÚ´uM‹üB3¶ðëïþîïz?ÿùÏ+,Û×<*á­C/Ø}ÏÞAenˆV\ã`W 0¥ákÂ2ל©ÛLP(,èMZM[€Šà H®*“%ì›éN®ÔÓªí†÷–L‹ü¢UÏcýMf˜‹±uZqç—±RÖ" As>+!Âìñ5Acª´ ¢! «¿®ßX>·Ux(¸Œö<ÁïüÎï=ÀVKb<ø±&¿@~XÐÌ˵;]¢K ÙkoøPÖÓ gâ†}M˜Ì!ȘРØ~IÕ¢¤!DÀ`€š€) ¸ #¡º ,O9õŒ‘íAë5³ØÇ"¿d¦}]‚¹Næ†üÑ—.ñ}sÓ2Ï`”å˜vúg4™s\sÜp„ƒ†„Éz„‚o͸½í@@»½• @¬ß¡“_$»¶ OŠVøï|§²}ºZu&9GÂb]ñ”^^ç¸>Ì3ãn :òsmuï °\G—¤sðzèËÞwÝȃ 'z‹ü"Ç£EìW›½E]@ØÇ{¬÷å¯4ò Ss6Hk °¾‘ÔÚ(ª6Jã°>ŽÎfªà/m8Q;’?¸ó=Þf|¢â÷>zïgJ¶ò¦¡Ý3M&12g5tò S¾Ñ èÆ6‘À[ªCØënøpÜÒÄr^HÖÍ”#‚£cªaÂúº€;¹zÔp%yRˆ®vH|;¿ñMùJEzµ-9méP!9Šô &Ô~ŸRr¹ù²|³ù»„qÐËI—ú“ìG,ð^‰q@‚á…Ðlã„\ÔŠÂáB|¡E.ß»v(Å­Aš” r,ò‹Â”5é¸ f`­²Åì ¹õ#÷õy²Ð¨ ÷×ý-óêxÍÌ!lXé´mÅL­Åf–_êéhs{`Ù?×çsíU¦#N%¤¦‘õ86ùEÙP2,ãÃGyPØ´óÜùÕ 42Jã9ºh‡´®Bôjðû[›ihñÙ3|ä ]†ÏHò À ¸„¥;O8i«m¶ë“Yb½dèPã]5ºQ¢4§ñPÕ$/œà@`ÀªÒ:æÐ¬ië<Ô_Âg ¹î¦; »aË)5io &a,ò‹ @q—³ h!Ô‰Í7c¹á{úûí(CQ2¦ÍõiìÖ6¡éÙ pp‚©NP{©@‚°t—„sòJÛ<¸õÊRðšl®9éa,ò‹ÄXŠåœë1…'¥Ãœ›ƒ„âæ­¿pB",Ó´>cÂ4â¦3Ú&Øs{£J,©ɶ"– ˇ¶%Ñ®Ïð.~细vÂ9@Œ±È/LU5œ6­C…ßP˜R:D~Éól³| [µfÔ@ÌÏÍf Št /D¸'-É–‘´sΪïCV‹°R0 Ž>öÄÛ‡B4dÉX“_Ô6€zm“£B~Ùìõo(™>Y×"OÙ´vŸ!çgÍÄÚØ(1* I¢3|ZYê•‘ŽÝÑ6mòo¶Á¼ßÓ{ó[Þ:TÈ´F’_Ô5eÿê¤L4fšâ¯xÉK^Ú;󜋪¶\ñ€áQÊ™˜(ÈÊ ) S€€ \Ö§ÏïrÈÛ0”óë«Èé̳Ï·ÚBàDhCÉ/âBÁ¸ºŽÂ0ó ?«;[ñ÷U¯y]ÏÌVަRä‹öxEŽ‚‰f¤ 9ñ«4Ì:¤Í_´¯Hæ"0G”i£"¥ðŸÝÛjÄ$QÁ¸Œi,ò‹ò½GD¯Š vÉ/Ê‚s ´š€móo »8‰–†]ÓŸ.áæCFëEI H¦BHï±Íd0®B×¢·6 h_Tµ‹ü¢âÅC©—DÀÎ…¢ºM@‰ésžóÜÞI§ž]ŒKdc†¾Ä̤] ÒÝ<96¥ÏÓŠ\‡õ+Þ§œBëÇŽÖÿ. ÄQèJYÔ¤É/£É/š«]B*‡sùÚÏhÂê9Ï}~áR]X…äîŪ¡11SkŠ­E7ÍL­ÁÌñÁ$H+U<·Ž¸)³I­1J@¿W€æ§M~1®ø/¸7‹Û%ÿ´r@׳žýÜ"Ä‘5Çäê3YÔ+A3#„†RÁË!D9…fsú m/<èðÂ0Ø`,çösFËýMü"޵÷xJºL.Þ‹ Gò6=Šß,Œ-·Ù¡wQÙ.´kC¿Î«{_ª´–COò*™¦YÂÜûöv]°w©µþæHõ-%Ê’äîä—ɧmœü¢U@P!“T˺ÔÍä…ßP'”_°áF½=Š9ž^è€aöØrdT;Ä16Rˆå“178"¯|ÕkF–ëЕs4*ç«”ü¢ÿ¡¯H‹Ü>Õäëd‹·lÝÛ½xÍ (J”#´£Ñ]Jä3·h ùå…/zñÈ h!¸ÐLº¾HàUJ~ÉTkÞ¬Úe rÿßÿ÷+uÂ˳‹ƒ2ñå¥/uï%/{Eýú#*ã“?“³£=‰n4|2Þ²)KiJøË@ˆKq6ߢ%sL`º¼®z, Ã0fÏ8qÜ÷ø?¶®.ù…U­Vò‹øVËŽÉŽ{£3yŸ D$¶ÆÉ/x^muŽ·Éü:f)ëgA¾V•ãìTè F)ûöÊ}hœ ¼LúƒÒ.‹^ZãÉ ýf¢¥a+TÓ²— ¾eük|ò‹5"P%äÊð¹86•BNFNà½ÖÈ/úž—é-nPh-‰=³PÄ” /Ìmª¤ÙªÞkô eBk•ü"ÄËXDæd‹±v¬!BA„‚oŽ‘a~9s‹‡&¼‡Bàœ7g”ê­s䡞›öä¹wk(“_ÔB]Öñdò‹‘ÐLÓâ5¡š€c%¿t'¿¨é¡Lžü"»¡õ©È/¨Ã!шÛe->)'¿HçÖ“_¦ƒ^¹<Í{ד_Ö“_Ö“_¦½Ä¦ýã_D;D‚éì•'tRM×r©‰}ÅÁ¢›'Ìäñ¥H¢K²f>ãà O~Ñ^Åõ€»Óß Xɉ†P%ºØjF¼.Ä@ ?3Dhy™ü¢RàF LA8½1«ðÎ¥Té 6ãÄQv "“¶uÔ€2|ž¢K¡;§bËfÐT-Œsw[kM¢N«¡(ä_ ºÝ ¼6H !é]òK&NãT¬G…v=c´nšSóÊñsÌ &.“‘‘¬µÉ/ j„ÍÍ2[9QMËÜAx09¾QªækÙ¾¬#£5Ò&””«3é²­ò ­§p±˜hW ]0N@Ž)p Þ•7Ó »GvÆjfùÈJXHF¯‘É/´Çäb¢Š[1Ñé/'L¶"C‹´æBGJ“WŠÆ$Ó”l0)EJ¤µÖÈä—ÌÊB(úÅ0°÷…¢<ï8dÿ ÈBI‘!72œ¨ËîÉ`”)g•—rTþ§‡&ÑV:-Àüé £.OùÆÆÄìuö=Þ““±%pŽ,-Üä— 'R¯%ä®óˑʌŸƒ ö¼_¼îYx#;í4«˜ëÕ<£Å°{ðBÒ`ÒÈa®œžbݯrò‹ýŒ÷ÜsOŸÂ凒±4È“Î/Õ}öÛ¿·ÏÂR£Ù³ ´ÝçàÚÈÉŠvße`@«N[¯žzÖ…½³Ï»¨’_˜)eMÌÔ—ðBü>C‹fD~af˜<„»»ðLh3¶)F¹˜hŸ²û½ýX\ +å„–"mÑ\0èºW®b¼G;O{OCÌNö¢K¯êQ¦J%P•.“_”FB›°ÅpFäZä®mÔf†Ûƒf£XH@fÓœÌuòË‘…{•3érdbÁŒpš¯×u–ȹ˄Vg¹rÙu½K.»²D!dz êG)c²6{«‡¾Rä[€u(Ú0 ¥Ë$ÀùñÜûÚ×¾Vò=÷Ú»šéf™_nž&õ iÌkÆix:É~ï½ðš´°>ºÔ ß\ jï)Â:þ˜p9¯{²šV}—µQÊ´È/¼샓£DàŸþô§½?ý³?ësÁ;êºÊp02ëŽ!ÀЦõ™þ¤¯ÁXr:/Œü:ô¼ü@! ðW^S‹ÒƒÚƒІ”6Ç&¿p.jO'#n¦šrÓ‡o/å·W\@;¤¶Mp@“L•Ê̹BƒÀL•ƒ”_sÝð¡»zg3¨Ä¤œ¡Àb,ò‹pÍ…„æ Û}ôÑÞüÇôM÷¡?úr…„…EsÓ†¡W íÑ&Àt…i@¸LcbªàÜÐ#9ý>ÇŒ¸htëmÚ¢aWŠÛcM~±é3WZ´Ù倜óEaZöþV!ƒôÈô—€ h¹”y æìsÁ€4P0¯ C½ÿº›†2 o *DF¾v.P†OÙ„ba š3¤ÈÞ(ª PØ&š‘ÿÁ'ï/N‚×L`®™˜sEu"Ö‡ÂÃZ‡9˜¶ñ¶¬¿Ï¸)k/`'& Hw›ó@ï#¿ÿÉrzöè£ãràîHò‹M†‡æÒœI4S¢ÇŸ2Á ¹mËÚ f.Úú°Þ8#Ȫ6ý¥D@E`‚ƒ–Ù ÈÑÀÿ4 b¨áh¬ç9·fzúÒs†"C¬EaáXäæª!G´ŠEeuÌbÁÝsÁ;'¨wW,› p—‡ † eJmŠp¼Þ§MøLÿ$îÌ!`›%RÊ(CS>pÃÍ5¶.31‘&¥À=ÿ)%X*æÓÿçMsÊŠpŽ& *=`¡W” ›9Á²b[W÷¶â!ݼ+ÉvBoÛBKÜL£€]ågÆ×ÉÄß=µq‰S iûHš7’ü¢Æ’Y¯ »GjƒMpË«@ÁÐ ìg@½!–Ycs}` $$-z Y´e2Ó/~¹³¡E¤¿£ÕL²ØnÀä‚«"Ø øŽ‘“_쓎»p%'Ìsv™ßÐ,æÖXs Xo…þ`͹ËáÐ(Ll&¿¯N˜à×­GfK0ž•#è ò‹õ¨”"kò‹íCUͶ‘3;„L2ófÏí³âº€úh%¯ “¾œ3âç§Åœ™Žq¹"y@oc ˆ?„fl¾åTæjo´DÈ‘äëÒi=2ÑpC<)“_ܘ6))\G7äæÃ0 Ñå칯Ô÷ap<¢#k2bîmнÕ"4>PnôêTBJ²¥_o3”ü’qS„T|R›¡ÁP'ÞºåÖ½ýÁgëS&PØrÝ¡(6ñ6# u¢Ñ'¬aŽˆãâqFB¹Ì „ËìÕû]ªQ¥ïÿ¡åO%$Ä–BšËn0tò‹R8Çùtg÷¤èôÆÂFýÈ=Ÿª.?Ì_3¥Ð•òä;çÓýQT€ —3ƒR8HxN âYô#â Án×{Ëв ŽŸ,¨ÊŸ´k,òK‚^Š™ªª)ŒY¡*Áde(j¶¶À±È/ŠSx“Ì3£mÔFà Q:Ü{¿û,‚’u¶?w“Ö¡›ÏïB<æJ“,X£¸©:i/öÚësN8iÉÀˆ‡÷çtF’_< eydꢌ¢ÜÒᦛmÞ»}‚Nh„ÈÙiAvVA›úÒæ„Màë0|Bc²v…„Ž,Ç{ÚÒs&Î*uösëq$ùEzdd3uZ.¡4w ¦ºƒQDÈ/×Þx{Ÿ©Úθ·j.dn 1ê†3—™w ù%õžÌª¤E¦+/õpÚÙ%ç¼à²¢©©gÜѪ@À.õ5ùE¯äOPe…œ|Dè”ïëä—¢õÝ÷ZX /¡øòˆ¶D_²¾¤\ÉF–Oÿ=¦j3àú¬QBÒÍ´]*gœóö2Žüð¡A¹`\­GÆ46ùEÔI-bVå{Â)঄O@x¸ç?ÿ½£;¥fòa¬Ûà3ÌÖÚ¢5 Úree;ð¤_§$xF®&ç<á”ÓK øÙC…Ìèqö´&¿(à ï¤.Õ€±áPá9c¿ŸW]Rf ‡•ÈC27±U¨*¤EEç ÆÍÉ™ãìÁräñ%ËæÈ²ÇÃû¯Ôä{¦N²È‡¢É oOu[á÷·~ûéuÖΕeL›p©Z‹^3#– ¤AæÙ¸ ‹j¥ÀÚôûºøðãzû/:¬·Á†/)`<­`%“_VŠü¢]¦Ch&-b÷Ð%‘ýßÿû·zÛî0»wþÅWTÈ3f´[æÃÆé ₨¨²{œÍÁenÏ‚=÷ëýΣm81xº?aT°0p86ùE$Át™lx!Jš¡2õOkcÃm\š<û÷Ž;ii5×LajæW¦|NÌÒ¢=ÂR‘KïiùeTUÎï'ðçÕ«®Rò ‡¤“e I†…UÝ£ì[OÆïò˶½}ö/íºÝ,,æG“!¾èr-Ø{QoÇ”Ù?sJÆÿÒÞS˃% É’ìPòËÄä¨Ù“Óšüb}Š…{„›j2ýä›4²Æä—g?§Œü~é+z/{Å«{¯(ÓÕ_˜$ÁƪâÁ…Y'`(ÑlâýÏ òËMÓ:"|ùäZdHõ878J;ãüž¶-ÂîYíä½{è0úÒ87>Î{XŒ¨‹ÖB~ g,D¸b¾•l ®g(ާDÛá„(ñÒ2•ÕN~¡AâˆX{Ö uÄCèÒì™g&¿X_tåøF)!•3%ÇÇ…¢Z Ö+ƒ±­ÖÉ/Œ‹öÌÏr)SvéKáhÑ áB_ TF5!ɺ†¾D{J™ü¢Ç! “`Óüj›üBS†q ™Â!X;1QIpŒöwÝu·:$ÅäÄ—ýö?¨·w9qwÖì{o,•€Ìîa¢PŽá…„ü"Îy!f²«”üâñUÏ9nŸ›W` u)ä—¬A³C±èmG”^ÇÂÚ Ðà &ˆfÝ«£O8µw\9€o—y»ÖŠ@FÛÄLuÏÒ{a²J%Î!¤{šùE9#C¬AœF—¯iL¸FÈîÜùówëí½ÏÂ2²£5Xµã´ìºít‚ ¤Í~réqžVð¬ûì»_5SZ¤5ÌPΆÉ2]K„ÙΈüb_³9 þÿýïW^ºÄ~ô£JD³‰Ô«9™Ýz|Xi¶¶ƒ/Óo ZY—B».ÇùT“úCSgÚAòg}^ïUE«!¿N‘+§8)}rR¶–‘_%)¹©K “cˆßù®«*¯2ݳɇ1[n¥É/‚ft%Ú4]b*AðƒÑ5¥¡«^H†¢Àh´æÐözDÿDBç¼åÌ𾂀$|çWUbÚ #¨¤u"£%K–LŸüb{°]RTóõ¯½÷ÏÿüÏ+Ì ¹ñC·—'y53xë‹&C‚a®!¤qBáhµé/'WÈl!ávr˜44Wàß%jÃ/Ør8BÁü´È/¢¦jËðÈg‚ç¿ù›¿©Z}èJ”SÖ|@¦J\Ô0 “£³œ5Øø[‹êš¥yÂy8°wmRE™pÑGIÞU¡ °z@„Ã&¿0gëW¶#Q›üb/¤I[†}õzþùç—\ñK;÷¡zsm^ÈòÁ(9 4üÈ6‚ê˜êˆà2ý…&¡C¬Ak:’Ör>lx!„täñeïºz$ùEßEX9Öä™…„V\*éõ‡‰dêо}ö+7sce¸¹ F Û‡ prPÖdhLÖ"~H¦1ñª\>º«M{cƒôêÍ5jŽÇ„áã‹ü‚é#ÇådÌ"o¶èm‡×›à÷Ì`”`¬1^3“%8ŸxÚ2m r0„D$0"3&$fŹ…);ê <ÑQpC'¿p:Â&Ù…Î2ä¡`›rº³Ê‰ÖÀ‚._G`¦‰E`ZåTl-6}&›“²™23…XnؼOô…i#nêyðu¦Z|èÖÔègXC¾pi$ùE%ˆ3Ó¸!³æ/þ‰ £ÎúÉ$Úa†Ø>œ’ý“§µ­p>Ö£u `ŸQ!¾4ŠÄ7*Ì4,ßÓ4˜ö‹^´ÑP!ù,o$ùEÆ!VƲ…30«° 8ƒ¿nÃQÜ€×€âï±Í$€+§UÛKNè¥E€Ã0èo3å%¼ÜDÐoïñ:Œb(±¦”±È/öF™>OJÀ_$¼(¹)Or Ù…Xæ¦=yæÈAÖC›¶ ðí6¦´A¯È÷4—ÉLѪï?~ÿç{ƒÈ/LXCXÂ@PÑm–¾ç-O)iËRªŒ[@®xÄT»ô%Ýd(¨9eòK&L– ¡O´™<UÍ6ó{¨ã&83Íp"2É qð5Íùû˜«ÏÏè)cáþLi®’¼CÉ/ À‚•7™-Êè]ÚàÛï8«hëó} ½'aUø*Â/}JÁ™ÏW€·Ÿ*ôÊ@¬Ážì;ŠOJ‚¯ýæe{x_ßÁd”†u²'!›ç½·nô÷R)yK»ÚÑm$Ü’œÓ*çdë Ô»;èσ½üÊeC;Ëj,ò Oj= t¥2ú;ÁÓ„÷?è fÏòI/ÖmZ[¢ _Ç«Ú+í’äåãS«ß‹ˆhT(˜a›-–½v‚ Ü44{ÚgMiª¼¨šc‘_d‚ñ¬Áé¤x$\rmZ&¿ÜùûÐצ­ƒY2/[Fc´±p® a¬‡ü’` âÜ6°Ñ™h5ÁíZÏŽÊx]¹‡©Ö#!UÞÇ"¿¨”ypÌ“‰æ` _ØÿÑ…¼QmÌ’ LÓšrc.±© ÀË3õE'#…{´Ì%ƒ‘ŸÒ¾ˆ),Ÿ³Î½°VͧR('q˜ù%GAq8йÝÁ(*ÜŠ¿¨LhøâJÎWdRœá2aÂzcŽ4&ûñ%{YŠPoù ð‹ê6£âàsä­Ûl»ÝP.³¢Ö´È/¶åH,XëÑ&ë" ò}­n—Ë4&Êœ˜+-vMÔMf^,3M48ôä˜eÊÞËKÁŒµñzZäpô±' WE7¤Mˉ·-Úýe!Ž>­˜‚/Jìa¶-4â†Söœs8L4‡syæéóž÷ü¨?½®ÃvêÇÛü«š\QMÕK­2øD0@X‚evH;áeqõ¶4N¸0|Ž?ù´Þï–úë°ÌÃ2³3pœ+E~Q[ÕÓdFÛ¤ð+ªxÖ³žÓ;üè“'ˆ ×ÖíÂ:²¦8WدH]Rƒ¥=Ú D\ë–#:¡+µÁŽß+FCT²:C³‹æZ¡?YÌñQõ`>‹Xô#Ìó”ÔOÄ·™üÂDRݘ7ù%)X‡Ì-³´2d3ŬÌRW%h&|L”cʬguÜ _8Þiù,Lð2#ò‹’¼Þ‡ÁS#`FÛˆ*x½ß.,ŸívœSÆ_RMUÆÁ£r 6üð±âY½†ñƒ’¹=•¼s¯}(ÚžwÍ—ÝÉ/+M~QŽw " ì%Ô‰ —M~™WyÌœõÁsº’ê]føxe²{:Ò¦`^»éæ%úzêH bZ©‚ZÅV¾XÚ##y!ÅÉÌB8Ë$@­9uW5]$ë3‡sÑâTCQÜä3~ç÷*ùe÷rãFmén1ÝwÞ£°ö¶Ûi—Þ+^ùê±È/Ñ ÿ­Æ*¾^¥“_ô¶rˆ%ipÐŒú´4RLù¼¨’_^õšÍ*ùå…m\'¿ü·ÿößGµ#˜o݉¤S«ü¢?B›:Lkjò‹‡˜±©”ËyS&êa3Þ1‹lÚ!±`$„áXx/•›®Ð¹tùYÓ¥DŒû~Ý+ìÖÌ:Ð X#äÂzŠ£Xã 2è}¼¸‡k\ãäæªõ=S!†ý½ðQ´e¿^+“_Ü€+'x ó ž¼\ Dtd:·¾86Ë"äëo­N~¡U²@>z'r;Ùº›÷f4ͨ2¿´.ÎEÊ—Øy­N~é’_8…êNX—õë!ç£#4œ,,O RFk’vÂY÷¼*kàEƒ„ ÃØÄÖMõÇÎP-¦úàBÀ !¿(cÒ¤2D×ü"Î ¢'>jï£}_?¡É/éBÒÉ81¹ªõÿùå—e<9É/%¨Ä¡§'£Ë:Î{VjMŽóÁÞ³žü²žü²žü2í%6í?˜ùÅ~¨l"ÐzèNyÂO~‘\ëRãC`8atF©Ó‰£°{`4.<U‡„‡Z…")‘ŽXV°Pª÷¨ZŒëôºï›¶&é¯Ü ¶#ðVD¢±_spà 7Tôˆ^§ÚO-œ¼?¡&¿À¥äžæX8ÀŠ@¶3”AÈ>ã!€’jßûžæU2 ÆðsiÖ:E~Q£ežèK¨L9ñ^œ ¤í8Ũ~îÁ0e|.gæ1_ŸC`‚kYôe$ªrküÂ䜀u©™§‚t´,?H5\ÝëzÒhiÛ ìÁ­3èÕ SÁ餦Zàzi¨ÐàëÈã\G­Ó¡kÒììA³4GuŒ1M`&ëχqC00“.ù…€¥"`÷tÃL}¨ë»hIx•jù™^iN«—Ž­ò‹§ÍCýf´ “FhL4€COŸpæxÏ´èµ»ÜùfšKað´9xÁïå¨Ì^Êû+?Ÿþ).Kð-9^”f2óŠŬ;šC”+v¹!YƒArA /å \ÚèžnHk4FƒÖò‡r /å—)©øÜU:ùÅ *(kþØÇ¸~æ ôk£·ö&ó³8ô´çÌ)Îf—¹½Ý÷(ĘB§@€1fA9ŒvvùÝp¡É›Þg†N%_e äIº½Óây•Xš9#呲—Ž7V¼¬•Yž ò„¾‡ö€ mɶð¹Ï}®z?‚e´M¸!™ŸeòË^»ß÷,mvÙ½O€Ñ¢C|ñzä±§ôŽ<ú„Þî{î]M{Pÿ8W àҎ˱§Ê'<îŒÉ/žb4òOÿôO½_üâ=Ó%þöoÿ¶ -àÚ»Ó— ¦ GI»Ž :®0Úui¾Â hÎêzŒ.9ýœâAw­E¯¨7ÄׄF‚AsR|Úm·õÜWÝ,,‚i¨2çÒHËN'+­<ï×vä›óé¥}~zÖs0Ì4ãmTÒ»Í%f-Ê²Š‹mGÌÖû‹E¬0(w…-¤¬GíA>€)ˆ)E³®á†üÛ¿ý[ïÛßþvY§÷vtïÄSÏ™×—9ç­:‚é4w™>´©}<ºŸ¦­®tÀ¾^|YÔvjžHj¸î“§vŸ3"¿ÀŸÛ&lÿ÷_iL“ç†|ëÛQÈWÖ^dš®´B“!ÀhÓ¥uÞÆÜ4 D´íýš¶°„…~°xÇe臭@´8¹{¦#.³ÉQsÓžübÃ?b¶¡N|÷»ß]Òô£ÿS50’ÖyxWn:˜”Ù4wLÕhÅ}ñ3ïÍ`Â…]ÑõŽw¾»0¦ªÂšs´dVŠü"öGÊ"샚.Üö7¿ùÍÞO~ò“ªÑ?tGů¶é-UmXW4˜C£i­Q–Ú ½^ Ö¿c¦ÚîÍÔ$DÉM·~´wÒ)§ l5Xƒ¶,&;mòK(õ„´UˆdxRZµ|î/PÒVà…05¨ªJøøsçEÆD­QÚãQi?ë°ñ´J¸XOðy@ƒˆ/p{Öç Ïëþ˜î´È/—Ι6üpC2ËîâKß]oÀMaЂ×"@Í’€^ƒ–„œô`2V#Ÿ Ük  —\vE¿4YX[ŠI¤¥w96ùEà}ÇwÔ àõD2s }74 h,OžFf…2¼ì•1]kÒï`u¼Ö?ˤ=Zt´”‚›:EÿM¥Ú>H›Ö¬8˜´Æ"¿ߘª@<±¨tH }À¢Cú¼°3p³¦…k'½¦®ÓL?˪Ld²^]¼)ìONto½Âêiç©7Po5œ{þE#{¢ .2c$ùE%™¾Ñ`&¿Ì)ñè¥W\SÁ‚yêž8ø'cjnÜ…*ȱˆl29-4&¦ µLcPÉþv½¸þ\ÛC_ÂÐ _ómSžhßÕ®Þ¨€$ù…W5_2“_2jQÀ½cŠrCñªž®'ŸácÕÐÊ€µZ÷ºb޶¿}1 XN¦Í h Ÿ ŸÃ(3Í`”P›þàÓ_¨±í°µ=UÀ?’ü’ñR9X:³\ë<×f•'þÅút=ñ&ìrâ Ð0á™°ãÂaíÊ«Š[9ö€ñC³Ö§Mf¼Mˆ/ ß,fÔD&BºÏ¡“_ªiÖc%é’_æì²k2‘›ËàZô3¯ázÛ¶‘Ön®ÂÑ& ëӔ÷ B`óx@M¸6_ä‹_þf¥Ldê‹÷íVèýÃ4)WU4J~QÞ¶—ý§ø$§ÌÜYsæV¦ áÜ”›Ë”‰¬'Þ6bz™¦ä÷Ì7›±R¤Bˆ61æ¡þXS+†Ï ò Áe,T[H~±™J†­E‘}Ž´Õ †ÕZvœµKÕSmd—R{ø›õÆÃ˜cÂn»ñæP>SÍ¢!œí"d6Ú ƃ Ÿd¹ÐefsùÿÔĩ4)ÿUQ5Ù ’_¼GUÞHé0ìžL~Ùr«m'\zòèi/ŸšôPŸ;Âsµ.­I&+ A”9‡+¹œìò…Іöù´Û˜CT`ÚƒgÞq¡Bœüâ N…vÙ=ö_޸śû3|º˜xÇFV3íì3Õ!5ÈöõußÊ%íØGÃc­‰<®µÜHn÷õgúÜrç=¥Äñò)5)ârRÔHò‹2¾`œS:TGIUmÓAyç»–õŸ® ÕÙÙ+™jö>ÞÕžH v¸B9 ´d"öÍÐƒ]·Ïú[žÙ oÒçÞøá;ê¡ò“ÍrD ‘ÿ‚ÕõÄ´¥”S'¤=C=ŪÑÀŸ‹U»ìž_ì?¯)©ÍƒÞVÍÈÚ£±6+òýˆ…ù%0êÜ T Þ¦¾VƒiYF¦ ‹n‘Ñ6Ö.³õùÇŸxʔوõ(ôkò‹Z(º•ë?øž I@H}e‰×àíw·é‚Íœ«‡yŠAiù…ÐÝòÌ%ýZð.¸ô0IJó%¨½Õ:Ó.Þ¶X×TNG@€ÔÈÉ/¢ OÃEPÞÕÌîh›`Ž<æÄê\BebÈ/nˆ¥ABJŒÝ|½ª´€½T,cŒì<¯pÐgÐl´zÞ…ï¨Õ©„Ìø·i‘_d å­¢ÅsvÕË^ñª‰q¦wVS"¤'捻\pèòJkQ‚L˜ E‘DÏš»×=q})dñº.aŸEPŸ·Eu5•€²LùUæ0_…$éóBŠI>­”é”ðUÀ„tÖ'[çxr8m§6:o·½ª.#“r1Q7K¸$΄Ë0Ü +Êζ6KQªsĆž€ÇpòÀ(ÇzÌ"¹ä´&¿ˆ|”$ Ê!Y‹Œ¢º­ÀûÜâ°Þvø1u݄蕄pÖ›µ˜ñR<+ ÖÃ$ài m×éۆωKÎìCЦÒ$¦=¨Ê•&¿dâ¼½Ò^¤BFH±¡¨â™¥}ì‰gÔ@œiÙ.¬E?í´Š]›=™@@… ³Cü<ÚUíóh“™ŸRŠÍ›„å°XÕö¡‚¯43#ò‹ý‡#Êä¦pC´ôžû¼”#£Žì]T6üœ+ê]¦¢É#9› D¡IÄ{'“mU½65Íul97ËÖʤÓ‘_ôú3¦1MZÌYrþÆÀ6Û—)eÕC^TI*ã$#¦Ú”2H·ÎDÛÍ1åéwÇœüâ>¹JÈ/Úe4˜.Sú¼™ƒxfánÍ-)µ™¢M?&I{´òKZÊ´¸÷òâµ§ƒtö€WÙä­nuAA¦¾¤?¡„ß5+?ç¹/è½é­Û”‘5¥|²ÌÑÕ…øÂíV~¾Ëü½zsæ-è½äe¯¨‘Qæ9ù÷9ã΃aY%z{ fZ“_`Ô`»§Ñâ0Èõ¯ÿúëýöÓ§ð-_X¦¾¼¦÷ê×nÖ{ù+_S'¿<ý¿³R‚)mhØJx}‚ûYpæ“_4=õ”ÒaZÜBø?¼:²5¸ZÉ/‚O0¦éš×tߟ.›ŒÈ^¨@@qugòËOVéäH }º7;Ý÷+)Zo"°L~ñªá»Ú'¿pÕO‘—ÍÓÌéxÆA‚ËêÕN3õe­_Dý™i¥¢§p”ù±à*~zât&¿Xw<¤MÈ/`3kü"ÁÎáxöRù¨ý4€%¡ùQLàáà„„N¿Î_꜂ `ùE9ô,#ä¦2S^Óƒ‰cl¯³äîÀ¡*Žå€è$µ<#¯é²ÉsʶúÌžü¼ôHÅÁΦ¾žü2!(#‰Û£`•Ã~_R±§•Äúô²¿=T¢“Ÿ‡M%z ¨½ú^ ,Èg²E‹?)³žü²² ˜6}:ÿ¨t˜žQêCóK„²´8—e×z‹ÓÕÊuKùzYY~î÷ϘÎçN÷½«TÈR"yZÙ N/Bž8VOL“£±]tÉ/adá5we$òEi–L$gãi vOV“pÞç¤5¹¨÷¯òÉ/Ò£Œ€ƒq&³­àöÛo¯¤;%ìrC˜gP$YäøF7Lƒé¢MD ÁƒhHÃ%P $‚Œ½Öçª-Ù›ËϦwޤË"÷ALrßZy衇ªç$¬Ä˜C`Vá†2&Z×aáhÍ-4ˆyóôöÜ»œ§^0û.,UõÝ÷,p•í«V´é3ý¥{hŠ CØe3"#YL<ôŒÉ/ê3°Ýžg–íÒ—¬Áʰ+Â!³,4…üDH D(L¸½K/»²TÕTäû3!§E~±}˜ü"(Î$Єjö²Æ `ÆgÀÕÁñSljÐ3 ]"4C‚B‡ø÷Ñ]q@"€",-­š‹7¨Ýg»~ Æ&¿×_Š“¤XV¨vð!GT˜L'îFhÕ1µfË­9fÉl­GžÖš¤Iä´ ¸`[+¦µ0 €}Ár¶:Èöigœ="âAå·”DC#É/xZÈÙLÕbÎÁ]LBºtÁÅ—÷g„ÔefˆÍ Ú´JPÛ mò¨¡rP `ò„„õ9mZ…Sñ†X˜ÙÞpÓ­#'¿H(b,ò‹ÊÒÍ&ÚĉíË?wzý§ëÏ`¡v¢}”Ò8!´z}5E‚Òf— J@°QŽ%³{¼f Íü?¯àû=M¯sÙŠoíCÉ/ÌÔ^(¶à ‘ÑÛ“v*ëѺªoTÔ èå6d(““BŠ¡UæhíѦõÈûÒ2“oZÂNx`blÆýñ6„Ì…øBðAЮÐ2[‹ÄºD?Ëž¢t/Êë««Û‹xúަ˜¹!&¿Üó…7Á$pÌ1/Oœi…@Øxa¥M2IÂùœŒ±AÃÈH¯´Šüžˆ¿™_âÃ@â[éÛPò º½µ””ó:2‘·N~) ŸÞ‹ácdF›îGx"a4âÊ—ª6š–—“_Hcù|µ~Á±|B_òóö¾6“dï½÷*$e %¿è÷ã…ˆt˜²E@âË4¦Ìéɺ!@›ÒxV!¿X£!°Ð|¹ÐŽéÒn8#màI›ã¡0Íêgmëósåä‰= )³ œü’É¡´èIÀŸ‡£Eƒ]òKÖ!a3hý‹_þFL\?A8"NH†’ÓìáÒOx’màÑgª°>/ôJÈaäÀ • iß@ò‹Ø¥³© »Rt"’—Òa-<•É/·ÝÕ˜ž¸È˜æKA¹Î乿î{ ЀðùØ+ j_%,oœíˆ‡¶ äÃçžû>;Z(€§È[ÈÀÉ/ÀA¢yë1§®Ð¥ªVÇj”E}éWWáüsûXæi…½êÕÞ)"BUº‰nrTx£KW³±®m†Îe´M éÚØ*‹¹æ8ùE¥”Ü5’ü" U(¶ñg0JÈ/:ñšr(ûþ}ú µäÆ<ýÌß¡”M /’`„”4'–•jI´yûšjÒþ¦ö¯Ù#¤ÿqzŒ;•gµY\NK£ï“¢•ræ3jëNTnz’£Õà[3JƒÁÍi2+Ä:Š…ýꦘž½‘r0B7¡$9g~õ‚cWvѰßgŽOS‰& Ÿ›ËyƒÎy¶ñà )ŽM~P»ôª;Û\à›±ßÇ”P‡´ÃzÍH› Þ´/J©lþ„¢A†.:‡Ô%¾d´‡†ÏÅ—^>Ыª* ?§M~Q¥³¥pÇ4Ù¾ëU¯y]AiݵÀú®ª=ÌN† ºñ6fªž©/™^è{&ëªì‰ƒ2ŽCÐ`­^]²S ¦2Uù$ïO‹RBëqlò m²q]&úèX ÑsçïY×aL”ãÙË,2µWöï’(‡B“öK?ÙÎy<øÒè™Ì¤ÖsäÑÇ s¢ A­O„p´ÉÜ?é´ÒüyéÐ0NsÈzœ1ù…É*-Rm“€éOx’lø¢Þþ‹«OÞ¾gýѤ<’Ãé®EÖº´¥dâ 9)—%òé½§ù6y]Ú¿­E[ž Ü-6uÝÕVR¶‰“Òèí¨ ÈJhÓa'zLԥܹ!ö©ß~ú3z[n³CÕ-Z‡J´ÓøXåàö‰a(Ì–à*éÞ—àÀúTß¿Psþ( “½\¤ÆÃz¯|r¥&¿¨ 3Yz—øâÝLŠ¿J¿ó{ÏêÍž» „mË+uÖÁÂ$lJ!¶†V–ñr¯Ýôõ#‡ÛFp^T:¸ÊÈ/:Ê*ÕÝÉô’Rù™|´ÓÓËÀä—wݳhmQíbeë@|iLŸ}Êd˜{³vžß{i!¿üÚ$Í(p¾jÿ*üb;Ñ»—­Ð  È>ó{¦º)Âÿ¯B¶Þà…UÒË«^Sfæ½úueÒÒFuòËoüÆoN‹¶Ôý:Ð"°_é?‘UöÅo¥“Ä8.^–C~YìQëþÞò°q8Öá*Ÿü¢JmÃÎMÍô½¬Äràô&äŠîaµ‘_|pFbd†ÏL…ô÷4¤kÅ{L\j«Ð¶—Y*–BÙ ~^‚“íg„’tH¬Ãb ÅDűªvk)ï3×Êž9™7݇@kœ›¤=Ä_´(¬AÿÃû&œÙ!¶y:¸°3Ts˜4¡Ü€pOÛL•Oë]}Eœk­X;žö¸BZÛ4£fªüB°ÌíYëäq—ü¢…–“8)`‡QÌ<¿·ÿÚó'^‹ê¯““_h”'ÎäÚ`z²—Ašå)Y†ö I~ ñÖ‡¦8® 8ì·Ö7stq0Oxò !¬Û”TUØ„‹òUAÿ“jò OÌ9e½r:¼·@èÓ'íä—õä—u…Æ49êXO~y2’_”L´ÕtŠ|R‘_„.‡ÆÑÛð}oó×±µþ0ñx^5‡•efÂôY)†áAFÕzlìnІlä"µ!ÈÊ.¹%S#€‚õ¯¤Bè'ìä°4àCˆ.ƒO2Bô#ýФº‘ž‹3d]™ ÌBËZpž‡èaz¨«>åÑü3JµòÇE{Ï5”A5OÁÊ?”niÁºip5õ BUB‘ÀªkÈx¨"ñ**yÊfÂNX§É/L/óCt¬]ÌW¢EŽQU€º—©S0ušT½÷ Ö:ù…æ˜eˆgj³4‡›å†Ã, A)SWÀpCr|£Ò†4‹E˜{à0ô&‚c-HÔW;ùE±ÙSw„t¸&bJÖ¤³su"äÉu憨.H´õ?}­/Ê|1|8)r›ÿÍ2VÛä&¥ÇkêDÓ°/Pçbmeò‹Ì>‡Q+YÐ``24Øü"—ì6xõ62sV[‚à„–ŠåÁ2q·Ê'¿X#@íƒG‡Úâ)™˜W4]ÞL L~ È"³{¤Y¼„ ÅpC”V 4h.¥-¡æ«5¡¤âÁ¬2ò ð 2þ?þã?îýë¿þk8tï{ë‚sÉô¥hÍÿØuþn½ù ö(WÁذÑî{ìÓÈ/ÛlW„lÊ']oC@QRæ†èÿö©öêg^ôJO~ñ„mØ‹­á?øÁ lýë_ïŸ$ÊD3^j·"ò˃­+W0ÎÆrtÈQ½}ö?¤wèÇöv™;¿ûªº/ꆾ”SÕº'«¥±ÃjDL3&¿@/‡ü‰I0™BÐ?ù“?©›û¾Å\ì¾W¹ñƒK¿ñ”þ9taƒnLàÚšA~¯ûuä±e¶@Ñðå°!f*¬‹Q'rð!%Û¼ö*!¿ òž¼š}ïÿüŸÿó8AÑš¾øÅ‡*IÛN+½µÉC€iÐlí:—†¬óê¢aïÓÇÔê;qÉÙ½#9¡÷êB1$`„Lï%%¯Ö´­Euo¥'¿df“U_ýÓ?ýÓÊÕêjô;|·wÙ»¯©ÍS X‡Òºa‚eÔMw(JkÊ.ªæ Ñìjç%:QFÜœqöùö3%¤¢²h+ýëuÆ“_hQˆfƒ·}Ø"”™gE~y×Õï¯f $‚ºÙœ@H³Ì ! áóç°*¬–!ÁÑ,.¼øŠ sKKbrs) ˆ‘_23„™Zàkž”y|ãßè}÷{Õ»ê½×Wô#>x!nºÁWN® WæFO¨M´›ÃmiÞÈ ¨¢ž/xG=}tP[Ð~i]‚ãØKm3"¢²Ç>œ¸»¦Z޳pÚS°e0MÎFd#Ú°á‹b“ôõa‡Þ»æý7THK˜9ŒBXÐ’–y0MÐ6Ã'¿‡Ê O‹E@’4~ÈõÂ}â)§¬ÂƒÛØJVšü"Š‘IHƒlôöÁ̑ܣÌÏzïuÎW~áyˆsçî:´EO›p™hË`†l"¢ £ ¡]’éL åWøâ…†¥±ô¬sjQÌî %‹ü¢¾)?c¾1ÓLÅæ¹^ýÚM -þö¦¾¸¹lþbPkPà-PgšB¹ÛOHÑø53( *pð·’‡åÊäBs«™ˆõ—£kèVqg^ˆã •ú2ù…•9÷_}Ôgì÷ÑÇŸ2‘!Ü]=eLŽy¢;ÈîS% ¤X•pj;©È3iÙ%ô „ø"ì7:ð}½KÊØTëlrH—cŒ)„©Š±AexY@‹¾Îo„HTGÊ¥»ÄlUÌчą„TݶÀi“çôÔÝPßZøV„$œ¸”–rØIúeêK&K¤®“šñ89oàª÷ÝP î4¥©FèÉTAÕ¦M~Ñ;„V¶dòKhê¢;—™„³–ܘuHƒap6mL1 zA]mªé4ãS9 ©XæÉz Ú•×\ß;úØã¤ ²‘ ª&®4ùEÀN›B%åûx©.ú¼ç¿ Œ?¦˜Øuµ&£>ã[Yò¬ºe„!óȸ)‚2]k4ïÇ \“3Î:¯Ö`¡-9C­Š‘_ô 9Àceò -*¹6zñƽà Í!ÇaX[œš M¦:—‡¬Éî\?OµNfgEÐ¥¥49,ë°MˆÆhQ?f¥'¿ØR•Èîõ'„a÷„²á Ëáï ÷N?§ØŠ™••·*9‹ÐØ~/Ë|Û'KªÙVvÏÉ£Ù= ÏBP{º`¥'¿ÒnŠDÑ`Ê÷ÁÇÕ#üK›ýÍ[n[o¶á)4¦©.ù#Sµ.™hµ3ñÅ«µéï»ñ{ÅJF‚—™ª*âŒÉ/éGÒd·ÓL/úÿ•_ùÕR#Ý pAöè3w’ |‚Ò"Á™*‡´øðc{ûxHï o|ÓXäU:Ý0­UB~Qç¹ë®»ªãa"SÒ p*ðÍ<ù_ýÕ_«Ã‹Þºõ…í³{ÑÖa½ÝŠsÚ™Äyî‚}ªðóvß··[iåmò’væ(íu/y†vÆ“_@SÌN—zׯljü•7WcÈ_^ñ겿n^H0¯î½p£—8Ï/eŠÿ1máJ“Ò?Ú\eä¥xq! .ô¥Qøòéhf:ïÅþãMW)ùE k¿Ê¼žéšÖt˜ü^q¨‡É‚„•âhŽfµM~‘~¹öIÁñêÐfÎÓñ`=`k¢D%2ù¥hu»!²&“_üCfkjµërq€ âßL€YYͱA‡+¡Þ.ÿS²` N"¿ì: \8€pùEКC*cÊfhxº‚Š‹Y‰×%¿ØÞ¡PyÅŠ¥ÁZw£ž„ß—µð\g¨r<ž6/«…É/òO!`ºK*}‚zÛË0a™:O-«°p'¿ˆŒ\Ò4íw±% M%(8¡<†`òA¶lâ 5ùÅÚ%D€EÖí (˜¶ˆÅz#ØžüÂih¯Ùxf¡m„ÊpžTä±o†¥¬'¿Ì€2ò8âq<í¸ï)[É3Ê5¿\K­¦ù¢7Q®[Ê×ËÊëR±™3îg®ÌûÆÚ'WæƒýÍzòË“™ü’cnžt“_앺؂ ¸˜æIC~B©P+‚EÐÉÖ®ºÐÕøõ»œÍ¥¸-~•/Š’DE¶²>RÒ«Çä>Ž¿˜¶ãq¤¿ZO˜êªéÒ1«Ê»“D1 tÆ`ó@לÀí@\ÂiA€¢D:ÀóiI<¡È/´§ ­Êaé¢9)S·E/ÔËíL™f×éÉ/ËäR€|šƒ•…Aºãsº¡Z4ÍZµfqAÖ:ùŷ΀šæk‚©}êSŸªèhg&œÙ=Š`´(V ³ B¦É B³'°^ ­Y_¯ò Óâ(¬3ÞqÇU(Qi]Jµº€Ã.7$ :׃€0«R.— Kµ'`¼Z˜@Gwro§rÜqÎÅK÷¬;‰”y†" ª:óÜK¿æ‘¡ù¤)„ÌCušBpÏc‚£q2Àý×]×dW£ûwö>pýÍå4ÂÓ&Α<«  As~ô²f¬î–Þ¤¦¬÷Aˆu\9óõØ‹v^Ò¯ t»g©¦Ó¤²'‡/0#ò 3E„E·è9Èæ¿ýÛ¿íÑ AùËïõ®\vmïô³ß^1š°e Ê#sCt²0 ÆtC£pò`¸$¤Ú™½- 3OkÀ•Ñ6Ý ÞBËp-yÿ•šübƒgª& Ùä êÒæßÿýß÷þüÛß)Àˆk+f0 F§˜f˜«¦*Át–™gŽ]$áµñhVÓ6˜Ýjà œÇ§E˜>LÊ›,Î~«¸M›"'¿cºe+êèìè&ZÔ¼šµ'¸v‰h@µ™i´wÙVn¼éæÞû®ûP…µ„âæ´Ä]´“ó!ƒÝÑZT IM7:„4ã!YÀ!œÑ%¥ßÆ’OuñÌ\éÉ/cªbP!UH B5™ÄGŸPEð6]Aà ɼ.®ŽãɆå<­³ªsªÓ˜Š ¡…Bqù{®í}Ì`ˆ‹u© ­z¿R“_éÌ‚˜ høŽï-ZkGß<1êæšzƒõdÏ‚´²ÎxX¦ÙÎv]ÔmT§“+¶ÀûÁ\h0ÜØ @(`¥AäëÒ~¼Räf*|Ë8D36úùå:qÉ™nF“}º¡`J+nœ0™¡! n}rf-[×èà@H0o¿äò> v²ÙbŦ=1-ò‹ö9Å™ÚZv.í~¨»Ÿ±m0J;ÜxÐE#„È9¯OPY9·i¯ЬkìëáA{…`ãôì­¶jÃN&_Z†ªñÒ´±É/rCgu𨲉̑L‹žû‘{>µ/tl3Úµž2¥{ÎkamÌ”Ö çŒ!.ùåž Ü‡Â<õ´¥ñÂ;н|$ùEéA‹¼V—ÝcOš={N1§ê…Z¾õ´áÌ3P!Ú $ÔÖÂdsØ;“%8-6Ó¼¾jŽ%øŒ†b¾§ ¼+¸ö{®¹vàá¶‚ß^>’übo$ |1dþÐß~‡ËM´£úÛP„†=Ït¯nG÷ßU5Ô›¾¨î‡™{GH?w«$thKíÓ4éÂ>xá€6 >§4MÄo $¿89750¬›.RF¯&#¶¼ó÷ÍØi„Tàú d á6É¥Ñ&Üd†0 *ËÞÉÁðÈräóXF¬ä3ÂÏ„™Ë =Søgiñ‚ÇM~ùË8ÂzíÐ2VCN([øØ'ÚHšÜØ>üÍ>úßMe} ´F“­§ ohÃQ˜% á¼úÛå_ /jKÃÀÎak¹( 8ù…wR: »'ÇÊРÞb#¿ì:!`›ÝãÉ»/~y¹ Ì.coùå+ƒT>S·˜h$`æs2\ÅìÜŸß~ׯáìQ†wRŒ  Lø8òKfø(1äÀ oFj N¸¶ßqvïã÷·I-žz4Jmþޱ7Ö¨™ôY´&ä³Òh(ƒØÖ´™ñ6ù.‚Þ2™¿Ûî#* ¶ëRÍ ¢eìWŠÅ3©Ž©£¤3œÂ“’fÁ–[mÛ»·2|».Ôß»ñ.ͶÒX·U°¯µh åØbDJÖ¬¿¥}æIXk3l Ãçs_|x$ùE0ç3üBƒÊ ÁªÚJ9R&eC”øÆÂ¡Å¶m¸ÁÌÕ"-çÂo °lj!A9Ÿö7÷W/Ë:²Ö3ÖŠf+¥X‹„z˜¹£¤E)šèSJAh>d•^rE½ÂÐ~FØ rãmxص5ê‘Bà+˜ È™s' $âK—"iItd @Å£I~É©FB$wæ÷¨–©«ì½ßuãnšl^’`è ^“•ÕB›È8Ú´_æ‚PîÒÃj#áÃÇ’a-=û¼íÂ>>6ùEöÁÓ*}x*ªb93GmtÓ׿¡w]Ygm¸Ð}ýQ4²N…pk “ Dìš©/9Ö_\kKñ·¢ÊZ¦ÙÆ»¯ {ëGî->¡­™ê¢š\wlò‹ºŽ¨‡3ÊÉG¼–KUMÑÉcº)´ ÚȰLŽàœ³ŒÓdˆÛj;I¨½Gx‡0Âw†üqX‰‡/÷ÕÅT}Jíñªv|Š@`Z䉨-…¹2SjÕ)¾êÕ¯í]ú®kj¾G„͸SD–P쭽̄Ít‰Ôy2ðÖû]þ>Ö@PZ°ßzÇÇ lûS üäþVšü¢R­B.Ä#` ¿á†ÌÚy×ZßáP‹¢ÞtÆäÇcÈ/™«º¦Ë‹*T·itÏ}¬BÒbê§9o‡€mÔÔ¢J“"U¿ËY«Z¬àm‡KyÖÐÈFð"PE´m̈ü¢p+¿Ôf¢0LeÛ&œažîï=óÙuòË#¦h‹Yf(|>4jI%oa™ô¶ÃŽ)œé75߀jOÌUøéó´EÃ{!%`$‚uÕj›ªš¦"³¾?-fò ! (ÉP”0 0}ž]8oxÓ–uêËîûXÉ/ºYÏÜ医âq[`pT%¿¼®Œµ™Š:hóç»%<ìŒÉ/š¯*Ôz>˜â‰vû+ÞÔéýJ©½<­˜ò†/|qøòªB.5]í¥/eï™ÏzvÿÜéâÕeDj:«Œü" Õ/œŠ1yvÏtoveÞï>T)V9ùE-í’ˆx¢Á5I‚Éaž“&¿T6öŸdø‰Ìz´m^…jòR9ªàßÔoç96§ý´™XÐjáj•VÂ"`'áH®™ðN O°L~I¥OÎ*ÑMš–øØÃ(Ó/‹À—Ï죪f"ôŒÖ$ÀaT?JÑD›ÇT{ÑæËÔAáž A^êU8(öÍ™VOøÉ/$*ñ.3|¨Keló',ù…@„ƒzÖÊ×®Çôt‹†d4KËO(ò ¤³Î˜S™ÀF± `À¸¥fÝ8eøòTf  ¾ÎL~q34ÝìbŽŠÑ4ˆm`ExYê1Ö^¸!™’þ'ai7‡'¬Uò L)GB¸>­_‚ÉÅEk.PBÃÕ„Ù ÍY„Y¯îa¥mwÚõÐ\kŒüB*êž¶2%üïáï­Ýçeñ“£Ø ÐBÆÏûR­&ƒQ_ThWÚåˆr^˜°¾Ö€Zíä  nŸ¦ŒÕÀ,øÎw¾SÙ²ù€}3ÚFM4ÜZ$ M"†ü!µÅ¥cÏëZÚüJ-œÔj!¿ø'¼$ìëüã>Èàþ»ßýnEÐ`ÌYÍÝCpi€*¡/1Ñt±•?Ù=Oï…Ð>;ó·XŽòÈ*ü À¢Ó˜Y“§Lüû¿ÿ{ï[ßúVÕrÆ¢zÒ´' Þe¿Y°GáMVâËnNºkü²ùæo¨&J¸!®4—DNÊ¡æø<‡ªÞŒ'¿X°=¼%'€‚ÝÓ¥Lœ'µ%Åó «g¿ÊÁ˜‹(h£k«Nk@“G»@«`×ÒÚ§¼ga9lûvª=PBÀÁ+†i0‰oŹ̹\)GÊCYÆ*!¿p0¶…?ú£?ª=Cºt¦k®ÏM7¸wÐÛÊÀ¾“Ï® Ö`Ï]ÂÉg€K.MŸ½Ê¹w‡sSèMM{0gr…“s¹¨’ÎôÁUgD~ µE+胪hbR<£m"à~ôãÞM¾½wÎ…—×þd𬴗“C€ M&Rt¸Z ïäÞ!‡]Í4™KFÛä°¡îVê°¶´‘_hК$ í‚Ux|ó›ß¬ãn¾óÈ_ÀíuØ K¬­®ßHPšL’p9bQ;=g×ÁõÐf@MÎI?©`Ü_ûºM«™v›K“{/0®¶4ët¥É/‰;iŽ€.ÎÅ«ëç¿ð`ŒòÁŠÝi‡f^VûþΓ¤A‚ÒRéFY>Ó§‘b¼_·ÚƒñK–ž[P`›×Î3L~a²Ìš´¹Òäކo¸á†~P hûî»_ï‚2‚ ò£K€`¢9Ä–¶"XŽïÏ™’‚¶:ì€Ä"˜þ¹ACéN®áÒ´½s¥É/ÌÓp½L~éF±Éü¶#+ü 2 î¦b{M%¯8’€€B‹sÓàg‡Uœ÷xMKàÐ{ñeËzÇpòÀÖzøZ+E~±mX¶áZR£ÀŸçÍ_P0<×õç†ÂÜ„ú^ÍdNO›þ²o]A~dÄ Í2kh ¦§N«(_.NU‰g¢¨ðEYLÛvSöÐÓûÇ«É(YØX=‘LµCçM,JHqèYç½½Â?3ù%ƒQx°i”#ʶ´æ" AiŽCâd"ÀÏ`¬EËü-X=¯^üÎ)…&ô½±É/6~Y-ú£ÌîÉÉÙ;ïÒ»­ú2/þ-“`  êæ˜@}wüÁôeqÿðÚÐhÎßyÍ‘†Àüp›ÞQp›N)(°F:lc‘_xS뀂ã®å‚´ø¶ÃŽžõb ÐìðA2½…6{iƘILöKØ;[…‡À4sR¶µí¡qd ‡³¬Œ¸êÕ}¨Œ$¿zˆàƒî˜Å±5gvÜiVïëÏ€ï‚ë b ŒK«íøk«·´™©mÄžÈ9¹r~`ÞÖ·״ئ°˜oùhÿt—ÉNÈÚ”êr ùE”Ó1/D6vO4(eR²@~ ã&„H_»ºl7 ÛŽñ¿¾:!‘Žà€ƒa’!Çdܬy¦Wø¼pG2îæ ?•—µÊJÉ9NI~Qí¶x• ¡œºäÌ¸Ó oò£÷~ªjÏÍ„ÑÃt}Ý€òN0ÚP”0}hT`³Äç¤åâÁú0ÂDðYôù^3WÄ(=öÜkàž)úqßCÉ/J öF ˜Ê9‰iŠN·ñ6÷}êóQÞGcã´7Mè&¼›lNÚøpëåäS^ùÅkøÞÛ˜=íÒƒóÿ>~ÿç‡ Iê 9º ùE”£t(Ó =Wf*ËÝvš½KÂXC™ÚBˆè¦²Ž¼Ç Z_L™Zw±Û/ÍVáóµÿÃ‚æ— dàB @)'¿p<öHÝ'§1×6Ã' Ÿ‡R #¸È òdèä—T¾í“j¦P^‡F—¨ãü·_V5†h‡qô#jIÀžÜ’ÃÒy¤Û'=‚Ò¸Å4\¯0|ÂÂûà‡n¯i×0MªE~Q´Rf¶Ö#3Eépï…‹ªPž¾‡ƒùÙÐÃlͰLhäF™8¢B?s‚½}R¼*cÉßú¬Ð ˜mão5v³=팳† ¨ª§·biy¶G8ÖÖ¨ÒÏ”“Çs…wb×Ù:êÄk^·Y5Gš³ÏÙmú6v7MÀÌ“¬Çð—œÒþH‹^Ò‰x˜²€<5=<Ö`7kÁ‚-—¯UöiQü*"›ù…úâ×Éc¿e+Fh4ãhÄžuôEÙ“0g6,-Pñ*k’v[²´:%›sÉ:¬íÆÊ{ ¤[Ëú§·LíОLD 0-ò‹þ=SÍTl5uÑ——Óé/*1)S£==íq(R'ž”Iæ$—6—yq=½… ~ï!H¬sˆBTˆ/"m¾ïúO?k 9ª;M{ò ú/¾§”â/-¦%nò –Oj;òG7ÜÆbœÜÏü­Å·¶©/tÂÛJh2š÷÷,ƒ°!·Ñê)§ž100Wx¸ˆÖ˜ª%%Ž-•¾_,BÅôÛézô8‡ê)žŠ úŽR$[WÀ ÃAáwÃB•P<–e¤.cÃ' OÁ8›8” 3b£1ÊlæIĦ‹«uþE—¥j=̈üBH…äœmž£B°Ø‘_*ZÊhT7œS4F(àúî+¡i4<®åÅ«2„º¬i–až{á¥åó7XPe—ΈübM:Kž–Áí²•ÎÈʳŸó¼Âدš*‡¢`/äpD8™üBØ& †¡E‹«Ö3D,­Ï,ëú¬sËh›!ìÎG,M‹3&¿8à‹°žáºý‰Ð'˜¹ëÍ[nWLôÈ*HƉ·™ ûÕºŽâ•¯sfV£45A3>õô³/,UÀÃê$™a›¾ÿ°3"¿¨JëûÛJ˜jøY6ÙhQø$^´ÏþjÁì¼`ƒöfí²{1σûå{£ &ŒŸ.ñžyÈ‘'öŽ;é´2Oäu#Ùç„×× ŒtÆä¡&(-Úô'ºô%aVÈa(>ëÙÏ©šÝm¯ýK«€òwÛçqÄ—E‡¸¨ì¡%‚zéË^1–pô8C=ÊUB~Qî³Gv{é0åìªa܈«§?ý½½x“Þ+^õÚÞë6{Co³Í·èm¼ÉK‹Iþnï׊L«î½v€Œ8w~f¹”%uãTÈ­ˆ¬RJøV-* ¸Â;ÿ ËY³BF -²W ùEñ–'åËH2.cM`X¤aµ“_ñ@ ¼›Íxe(£´Õý½‡‹R®±É/ê@ÁÄ1y§’Ãtn~ª@; DVÂÑ©À ÕàÔa„•“&¿¬^ò‹Ò%œ ÍzUø’ŠM×|yhˆ±öyNÁ¶’¿mLޏN‘_‹¬!ß0­2?ZóPÚn—ü¢Ñ«î cÛòðxÑ|kmÆ Þb>7Šü3ˆ·^1YO?äÎiñEPAk´¤K¬€F8!aŸPä‚+I(.‰Š<kKñ7#³ÌÙ°OXòKÆ­ª‡ÊhB~±† õ¤!¿ð–Ì|=ù¥Lã-=™Ó“ÑÏ\ßýÛíGÝÄzòËzòË“ˆühô¤$¿„#P;Òð8ˆ’T䨉lxãR }´·Oµþ‡ý~¥O Æg•üˆj¸ÓM)tÙóTδ匢yÔ%¿+uº­óòÁÆÄ¾ZáO¸É/ºÖºcz.E1%Nv†Z/÷€ ¿°Ýs ¢‡ç!z˜ji8M™ý¯Mí=·T¾%[¨5œòÏi¦F0ÚKqZ‡ŒpNà vܸ¿Ñû˜KŸr„£„hx ¿Óà ˜$a˜!ð/­Çhù«scöКәÔež¤MÝ.vŽp”€C™Ð.“W)ÔÞ÷µŒDn™S$Jðÿ˜-ÆY«#×dyÊóJ“ççÌEÍǺ£‰ɘ—>DP\Ž‚å!ÈLÂì })Ô‰Ð&dúêG7 l‚µi®ò áT˜Ý#FÐLÖàdeŠTg¢4˜TÌš »x*ÄŸœvb§«œüB{Úö6©+ä/~ñ‹:Á{döL´!¹f÷fÏÙ¹Œø2ÁÞ½¹».¨ðµ­ËùÉ´ÈLC_"d—ü"5ËÅ1ÙK3¥I¢½Ê&¿ØxOžÓæ­iNfú 4Y§'žXN°ß·àdËé¡ïC~9ðmÇÔÆ+þ‡Þ%L_Ú z[x»RUߤO| ù%£mº“_”OB0µ†iܶæ½åTŠÇŠ{œwÉð¢öAÛÍ8OÒ‡ ´5ÇD)Èh“‡£<ô‡_î]øŽËëÑn'žzNmáéWjºêtµÓ[ o§]ö¬m<Ý.®} ÛÓ'£mÜ´}Y["GÇu{/9¶zlÆä‚bØï ö9 ›¾ù=Lù寂³9§@>5RµÊ¡;´ËiP‹0ºÏø z•„…! h /€¿‹=²÷²—¿b…“ÕÄ´ŒBk){ú3ž1ù…W×6Ç'ƒQ„aLÆÁ}_ÿÆ7 7äú l&.šŒ²¤6d ´çB|iÓ&Ú“ú–éH£:5VÁ)½ãN<­÷¢B/ÌhE0Ëäš.íÝ3"¿²mì?üp­˜w„Ùî@A27„rc\] 0 ÙðL4¨åИÚñŠÐ …LS:Ó³~æ!мŸiÊžtê™^³Y­òÕþgéƒL®åú™àb¥É/5ÅÙpO# 7^”±Ÿ5 cæ´Cá­=[3µN™g(‰„b’Ë,$_0þ]÷Ü?ðT{­A5¢‘äêæYå‹ýñRe ›´ÝD³æÌ-7ßÈ*n(¦Ú†™4nˆße‚K¦ÀpHÌÑ dÈ¡¡VP†¥ñûÚƒkÓ+ÚŒ‚û>õÅr>ÁÜ¿_Ãç‰7nÖý}nG–bXѧ+ £7|ßÈ/mXJ2x”a(ÖûœP%2€e¿…ûÜ/áþ2pwè䙿ŒCU: «Àä—h+S“ÂöiCR¾P5®HFHY_LTÌ*`ð7!²EEø>ÃP|]g…”uŽá3l†ÄØËG’_p(!–™,3¥A録Å[·Üº˜ÐLÌ iñpCܸ›ÉÐ/æ jm+±­Eà^Ÿ[ƒ´Ö¦0aôøÞkØ>ÕFàøüASÒÇBUÛ F’_$ȶ‘Dö9;‡›~÷è]]¼ew˰¶xÑ6í¥yDÚ²}ØàiP&b=ƳÚ6Ê)Ñ<Âù"”¯Ãáò5³Å¾Ý¨àx†¡J$ØJ"#É/¨LR,AÌ4㆞λè}´?á\¶Œr ׃ ´&¤“07ª¯ö˜¾!‡Ò6A=N¦Mwº¿nKaøDø;ïþøÈcÄ%×îqääëR±HÑŠ¹æä#xlϽ÷¯ZCk`šMk×ND+WכϜh0S&TÂ4ðÀzQ޽Ñg6"Ûò¡GápôÌ2ùeª¢Y¿S壱È/Î×áeeÿROG]Ôñ¥¯Ûlóbj·NÎ Ùl3CÄœB87o› ÅdûÊJÉ<2Õ‰†_úûbÛ^KÃèa¦ªÊ'Js’iG÷ÙŽ7t¸žh>õM9¥†Äƒ©nù€7Þ¤L–8¶ Gkɘ)ÁÚá&Kû§¸d-Nðœ´*±j,„§e¾ ßõžk†Z­ºÇQÚ#%Ϊ ¥Š÷P_Hç7ŠäÙ³*8ÓjãiSü%$ò ¤*¡dít‡kª€œL«SÍ’ö–¶÷Ÿ8µeq%Æx¯µIóV>KF­wûò°ù=t1µ½Ý«è‡Ò IúB: ÒùŠD¶ ýAÂq@ŠÊÌ4§1 gûsçïQcÒÌí‘äF@õœv€B;ïƒãÉH Bû½’HŒÏðÀ\œ+áhó¤%ƒ+Sk:Éš¦M~‘n‰ei/å{MQ—Xùe¿â1i’Vì…M—I@ÀÔvÊñÈBZѪ¡àEØŒ¶±¾i’ —¿{Yù_Ï™r-#T¥E¹.àâ„©®Xã¡R'pŠ÷,l©ŠžCVèΕE ¿/Úhã"è!µÄÁ<ݸM¿™èò!OJ’ÙJ”D<Bæxa_?¯¼ì=C1´´R¤fR)éþí•Å2?§™ @žMöñ°ŠXÌ•p)Ý[ØÝò½;ó÷Ø·h°O©ƒ»˜8ž‹¡ôa]fmf¾s›»¬wÆYçÕÑVƒ¼)A$«„ü"‰æxèÉ0Ô ¡Sˆ/¿õÛO/“_¶ï-\tx4Äl¼û#Ä™pVè_zü)/pì ‡EhÖ6JÈ‘_˜€Ö¸ÅœþDNËüáS0ö&ÃP¶Ù~çš7òÙâZÏÉ Ó‡Äù0akøô³Ëz>ñÔÞ›ÞÜX¬Ã.»€ä™Ú fD~áEç9uW¨d«ÉñjÜÀÑòÉ/¿Rž<§·õv³Ê¨›r¼[1ÓùÅÙÌÙuŸÚÕòzpe£Û¥ëµ×>ô6ã›zÿ½<°Qú=G°¬c•L~ñ¤t}»ciÍþDÀAÜB?õ©ÿµ˜ÞïUòË«_³iï [¼µÎÊ{Ù+ÚäV0]̺ä7•;®Rò‹Òô”Ü2ÇðóäWå{Âî±eE¬Œ³„KŸöP”âlž F’èAA™ ø ¶Úe6LvU 1ê³€)¸ÚÉ/ú ªíE5løå¨÷÷þœÀ#¿ÀØ„üb}ˆ¨À)}<Ønž4äGlh&a xuÞH 𾞿À@í7¡¡}WÉ¥ š1¯v_0cNsq&7ªÜ%£PËÐ¥]*ï`£ÍŠÒ!¿@wÁ¯£@R-7‡äB^bШœèh!¿㘙› _1ÚßëqҖµ‚Œ:ijC9=@†.«@‰E/ƒFa$èLÚ !Ý%Ù!©W«cm!åF¶+aÚcbHõ˜Ø!¦ˆA C+4dѧ?ýéú=ò Ú’¯sàŸô)‡p2“'$ÃR,ß[³]kä®ÍÂàÅcr’iU8Nð±6pšQÔÁVÎHk0#5tÎüLoc­_šcn@õ?ýéO+?eB!Z0Ç3½ÔI§¢/1ÑP'©ú†:!×Äû,V²FÉ/œˆµg„ÒK—6ñÿøÕ±€¬e(Jæ÷P)1ǨFƒiÓPænˆî™ß1kŽù2ÝÕN~ 7«ÀxîÂbŽ"!–Ðú ³G#(’˜h=„s’ Å!µ•¨ ðÀJ,´ê²×®ò 4óm·ÝV½$øgög£L0[à{yc:ͪ(ª¹eÈü{–k¯B„)Йf¸ÌV5ßL;ݳô?sdONPÖô¯Z˜Ä{•“_tŸyNÛ÷Ïl™èd¦Ï_þåw{gžU†¢,>¬ :9®ö>ôF*gbéfí¾ÏÁ¥rDoμ½{{•ò{–6Á;Ϊ,û°¢•ä[… “Õy<ËÁÖ¢d¸J&¿ÀôEš¹[²à]»LŸ?üÒWzï¾êýÙüŽŠHÖ·Ìp hß5^ÈþõMMYÍÙ>¼·íö;¬ÐA³?vŽ ³€Àœká¼fL~É&“n]2UOÓö`müå_þeïïþîÑB~¹£Â©aºÝç†ßi®œØKXBjë¹ü~ÁÞetU¡5Yi.ѤZQLï%&WQ·‡{ Ê2³cÕj„jbÉPx…cÙÃ*PFd*ö²«®^Ö{ßuª@ bmñ嘴-Hmºh‘fÓf'°óìhÒ×ú•ú›‡u|9x³ pP> /dªæ’÷ÐèJM~áh¸mf*³ÃìáX*\´Œ’:ûüwT¸YC)£L´Á ÐÊÚåÚìLf€¶2æ†`9%´Íõi|.„ö-(’6zqÕ"!•˜*«Z©É/ÐKÖ¡x4£mhеë®ó‹€e€_9±·½ÛÅáš ˜o#j.¨Bºù # ‰®f¦C@@'Î XâÄ%§Wg4¬XÍDÝëR(›ü’ LâNN‡C~ñ¢‘CÊ´ àÁÌ ™<¶Žãq³í0éF›`®Šöº ì¸Â)£LþÌb%ÇŸ8xò áÕ~íͪîj¿Öfö—±²ü|WÃj¤OZÔâRèe&Jؘh Ûð¤óæïVquEpqz!>â„ܬ›n-ôÃêzƒ#ðuœ íù}°=íäÞ6ðÈ:gÛï°ã@mÒ$h- #GN~Y„øâ|’P'™XG+”  ?‚Œœ °8p« !/›¡(E•5Ë+[»°AÖ8k€ÔZzöS2 h’—añô^y[ë¸DMËagÆ [Ø8ˆ<ªC¤EÖ ?Êh·Ä£svž[ `Ÿ­8U`Û XhXñô6 AÍMã`Ñç¿“i̘9[‡®®C€5/HënªµÉûªÎËŽ8 1°¶_ñ¶ @¨l(ÂðÇÖG㊓ ùEF‘`ûàCŽ,~¾ N$#`n}ñ™ éÚ¥Qæ.V¼i€KÕ‹–‹pÞçÁ@N²›º=´SÏ8sJ!™§`,ò‹HÆÄ]x×h°K§—îTzW¼ç}džI°ŒÑÈÏÀ­3…hÄ–bŸ$4çl]ÆÛû 4ØÎ\¾c #rGYë×U´ÕT=NÁ:s9ùE¢K@íî$P0´LÝ©°Í¯¿ùÎ ’# ´ˆ _ Ù¹Ò* EIc4iÛ`²ñ ƒcMÖâ©95Ÿa ÜZ^_Vê©LVZ:6ùñEÁ\»§=xR®JöÐ&³Ü?1Rñú&C|³?ý%àù`É™0ä#e 4%ÏiõšÃjÌž0ìo3‰à[ ÚKÃð:ù…ºmªi¶k0ç$áS†¢4"J£F0QÈÿÆiyBãƒ0gm¾¯ DƒÂ<Hßgn«ðàÚ,‚öýÂ[ãþa,óJ2•&ÕŸìÍ3”ü’éØLV‰0ìž+ƒásÿĬžLšpaá…õC¨68¡ÑÂòyÞ—á >Ë{3åÉŠEdFÁÇï°·û{Ü/ÅÂðI~QÇ‘‹OS¶ª¢1×{?Ù¶ kT£O×§Þ´zÿ (¬5`|&*ºáD¼'ó}¼bÐb¬¡ñ½Ú$˜F®i,¿aBÊ\T˜ëHò !iR‘·[Y“·mµõ¶Å1|¤þSk…€aÀÒ^f‡„V(úùÔC+´é'$ ‡ S¦¾Xãe²^™µmk‹-Þ4P“lŽE~±.zϱ2lñ¦·¡>6A ýtrì‡<¢=ÁºhEh'@ÅØ.¸÷µßy¯ÔèPÍ´ C{¡6-gø|¦z×½h£¡Á:ßa«‹üˆ$IÎi  (‚ßÍ6{}ï’B¤&-Ò­ ¾ØÛÐàÉ}LºH'¼Iû¤øÕöÑÆ¾}¸zT^4Ôˆ°÷Bf³>¹¹öƒ8N#ÎH=È‹ü¢D¯*gÛÈLeõ!Óî{íWs“„ÌdÑ %Í‚kQ­e6APËÒ.až÷1gÛKfäeÊSx["*ÞméYçŽÄñY‹N…‹ü¢ìÇùˆ Õ?• ÅŽ*k¯)³Zßqù²JA¢Á¬;‚ÑPFžŠIÅ÷°þÑý"šeÂÞÏl™6˰OF£Ì˜Àm;úRïãŸü|聾0,¯¯*gªlŒE~QúS™³ˆC_Z>好E%°¦Iñ&MÒ`(ô"“$xTŪœ1 Iýð¶bÖP ¡­ñABB%$s½jÙûGò´ÄàÊ !¿ÜÏpò‹AEz‡ì›ú]ݳq}RoØâ-½óË<Ø6õâšÉ™§Kv¢v†¡8š&Ãüh2C|†Å2ÖqFhMÖçmwÝW2¤-‡jQ9SN9-ò‹mD‹& ×=Ú)µÑ9sK}§„j-½¸¦J9O “C¥T4×͵¸š«÷«d†OFU5ÊáÝU£]rÚÒ¡ó{D7¶ŽIä¸ùá“_ô¬I‘ާD{*Ûl> ûw¾÷ƒëÚ¢=7-Ó Á.Ôf1ïÝ7Õçãoi4£mºÄëòW\U3ýAkQd#œSúÐO‹üb Ñk”jåÜ*†’ÁíÏyÎs{{”DØú Ñ,¥äŽáNæ5§¸ÐbFÛ´ÑSW÷'Šò¸_ú®âè^9PÀ4‚•IWŠüâÉh¤z:´ØÚîÃ])þ>÷yϯ“_hÓáA9yc¨h9ž&DQï§Å_8.&{Ñ¥WõÎ+ó™Q3HƒÊ“ú›AVJ$hU)¤ôPX\vĨ}Fµ‹™ÊDt4^x®.ùE­S«ºð›·Ü¶Ìiç]ÙsDA[1¹S# `Æ©ÌѦPÏÖsÞÛ/¯s™ŸU˜ƒTª±­…üb-Ú¼_6R¬mpôPê–l[o¶”üüq—¾!ÕW¼ß{DÏ}Þ z;Î)pв7îºÇm€ÆðÉIJ­jw\M»¬ÍvÀÉ¥˜|JÑζ#7|Ýi-«„ü£Jœ ›:§E° Fál¼Ýêö¯ýÚS{ÏÁ†½·lµC”É–l¦t°Œ¼™»`ß2]­t¸Êoº\‡–³Ëü%ÞºgŽ3¥¢¿ÊÈ/9UW°Îù¤Ñâ5ä—A›ð‚·éëߨ{c ðßXöØW¿æuõg¿Yú£ëþAŒ{µ_T „zbZÉ)ÓÖŸ˜ÎOç½a÷0×ÕB~!(â aáÇe%ÃØâÓ¹ùQïÍ‘ÇiWÈmYRyà ›:1ÇãØ²Nc<¨ŒDyA[ à,ª\÷¨›œéïC|Ñx]ãäý{I*A§K,›Žà¼¼¸t­‘_*´šîx…¹óÐ<6Ó³5ÑšWÛ ‚ÐIއ÷~&ZÚ«æ8âD%Hn |K¯Þ¹ ½Â)èjqç@ £4dÏa‘Ÿ†Å#o Õ²K{Â÷ª…ëÜäkF?ùHDæ&4Љ39.è Èò‹>ãˆÉ/kŸüB›JbnÖ*·/Ð'@Jù„XÛóºäš³îžä›¶zŠœ4ä¦lø¤!¿0Ûõä—âÈ8± ªàúÉ/ã"•gŒAŸÎ?ZO~)&*xèÛrLýv.csœ*3‡9ê½caÐG}ÈzòKÁ!Øìs ½L&äû¤èª$aÛ“bò‹&/\H»+ã8d6öÕu–ü^↠¡í÷¾÷•Ñà“_"Tø"ŽÀ¹é¦›*êË)¤Î“UÈö{4š^g&¿xêê³ ¢t‚MwÒ6Áô9]´ægwÜqG= ´Ô÷ öUDIjJ½µN~ƒ¢1XoàiÎJ§E=EiÀCa`ô\ÞChU6‚È@rºa—:Ḡɸ·ÖÈ/J LËÓvòVˆ¶)¨ê ¬)W4Øè®ýF™d0a÷¨£Ók,RN»,Åô^ý?T‹”@U-ŠæçòþC·ô%£m$±ŠÈÒ¨8 ëæ~ô£õöH0õWUË" TYçU„Cà\ܰ¯‚TúŸrLBºì£2kt’_g½qÍ“¹!1˜>#´G@Ù†ÒEøY]Ãh0ó{tÐ$ÞZŠÈ„eÖ Õ!¿ŒIšá£¨õÝï~·?æ&Ô “'¬%™}÷ŒØŒ—b¢kCƒL” H(*uˆ„|íg0EWœÑj'¿Ð"grûí·× ‹ðÒå†üÇüGu4¼fcøÌ*Ó^Êá eâ  òˬٻôÞR«!¡iÒ šaÚƒ’nýGù©%à"¨ËC^¥ä[Ïùñ¼n²|ez]¥¿ø‹¿èýìg?[am~ñ¡?ê|êY½#Ž9©4v\eÎHéb…Q°Û^e ÀÂB _Ò,1ø —–¶„ŠÓ" ùE[‚ð"#ÑïÎK‹˜VùÅ^‡C‹\»’E¼¨=kó¡?úr™rCï¬äÕ}NÛ\»]ÏR OÓGgK‹]‹oÞîåTƒ«ÂTàÎñ¸Ò9SS¦m….ŽP»€÷ž1ù…‰Ò¤}y*BP>×狳ùЭé]ú®k*Ž ïzq…²hÐzÍ4‰´î´ö2æFƒ¶‚ðK[oa9Ñp“²i1=P¥ÉÉ©8¸¿Wšü"D#¤†,\O&`«v³×Þû”¹=ïªø9hcíñ¨1 I{“ÇÜäMèBkéø°ÒÒÛä%/­uל—“–ºEìt˜¬þ©íΡ+S6a¥KÞä˜BB1&j ºð— I{¶fbƒã‰áoÀSB€ )°3‚2Wh¦⋞%óÕ‰öô,3ÇàˆcO®‚ºñœ7¨¦«Û6mò .ˆ3—íy‚hŒKM”[ÅmAò‡Ž„« J9ƒQ–hT÷Ùú$dÈ.i»·Q7mÜM„ô™ãN:­4v_Ç,¬}Öƒ{ò / <ˆU  æª3¡[R4mâ#÷|ªbo‚˜ôuàØÌ¶Ùàg„",Ó´”ðu›[°¸¾ÒxæŒT†ÐáG<Ž RŒ§‹ü¢ϹØçÚ¶‰h7£AI®‰gwÞýýSí™k;hÚ¼Æ )ƒŸƒò€ÈôÆ×„ øÞ÷Ö+Ó͈›P(Î:ÿCÉ/´*ÀW°9ùņ n&è–†B8™Y0·„jÌJ²îÛi×@· ñØÌ·¦¹ºzÚnK[¼+Ja¦2.§ƒÒ$á˜8“g •àvî…{¡° â_>c¬É/N|ÄJZ9™¬ÁÌî©<åMšpª}CgÖ@Ž ÅÜ.€„Ò&ïÊ¡dPX¶ÅxÞã0oX=Â5€áµå]ÓÛ¼2•ãá,…ŠcM~áU9BÒb G+“_*T] Ü@±A«Û!íËA÷4 2³µÆhɺ´&˧Ðv‹3âyi ˜0{lãb–ã5 ð7p4З©:Û~FHA¼u9tò‹7Ò~(w }‰p.AòìÙsÊ?]Vµ,‹ê‚4&Â2ßàbi3“Òrb/¥E—ì¯4g¿Í€¢å¨è; ø}Sn%ÌU Ë\G’_¼A2,ƒ—Ep0²K6ÑŽ³Ø©wËÛŽâð™Š,ް‘p|èL¶fÊ›ÚJ ¤mZ³ŽÁͼfÔ M2}‚_{í½gOœB8Ùl%Ýv±È/aÛ¾V„LÂ+¯Û±Ì´mdª #óÍØ‹`È3vC @›„  Ì n¶z滛vkˆ€„ [a»Bìžj]ÊbÒëI~q"k¶!›‰.ŸÆ‹ò‰Ï|±"ŠÃýh컦͌µÉ`””ÿJé2ÝŒ„ƒx¦-Ÿöé3Ó¬4/mïµ®yqŸïëA” -wÉØä¥A€ gv(CÈègZ¡µJa:m þF›êÒfm1g$–êöBÓû|æNÖràØYïèÅטD¬bϽöžR“yŽ2BŽ$¿(1*ªçtO]QXÚ©$» 'þ…ú„=ÝŒÁð}ø"™­e-Ñ ˜–µeÐ\¦GxøÒˆ. ¸ÞƒóyÍbÚ×xÔƒâW9ÁXäV™C='$ ÂÓÖÛî0ÁåÀâùD”œÛü6%H|Hû`¦ÊP¬¿ÆÍjt%2ÓpB2ÆÊkFXÝõ±O•­b«)…´(¡$ê9ù…꣸” ¾ö_L~1o’SÉŒ÷Ìl,šÃõà-CºeV§#ð¦YΈ"[Q¸˜ÖwFW1Û ¾/—ªÁ M¦D26ùÅ‘ýÂ;5Ò+“ªÚÒs/ªÞ0ÁBÔ¦=¿}.C63«@´Ã\ M»þN@OƒøX„¡]Ú¤]Ô&‚Üϯ¿éÖ’8ÿ÷Bªð#Àc‘_¬KYsMeLb·=ö©š²Ñh¤9aà¼=QG Ž+Qí÷È2¶±.SO•À‚p€jˆQÉgË™Ã0BL6gn$¿0U&«ÜA‹¡0)Ji6Ýì USbÊÌù ™Ff€N,šA Á£'_ôħ¶ÍvÑ šá—ê¶’[÷~âRº|íH!•0átÇ"¿({( çp I©ºhŠ¿rTu,ˆ"4ËÔ Ùh.„«¤V~çÈ3¡ÐúL^®%fÄÜ»¯zïȃ«UÜŸæÈÉ/öI*´_t&½ Q…B¯Òàe†@FšºÙÏé¥$Ù%§=iTf1‡Ã\e¥MÁ…áÃѬý³P‹F·)€âQp6]`ìÉ/B;1løY„S,ÊÈoîY;ïÚ;­ NhÇX\ÔÏ(’‹QãÄpßJ“m´ñò¼ñê‰Ñ6%>-[OsF÷×uzÏ|¶wúÒ³‡Öx8þBBá~¥^‚ƒ¡äˆ}RK…›€“vòÔ6Ø`ÃÞî{Ð?CÀ^ØáE5>ež*p´š©/f„dªR¬Œ¶a¶¶¤vžÈ½½e…v¯'2H‹´ÆOH'‘_¾ºÂtß©&¿¨³ ºü¬ÎÕûýülP*ámVVªä´…¡G`ë‘VS×±fÛ4îf™$š"xîÊZßõGÛDhJPI—ÿÚËý|¬É/LQeZJeZÅš€„s°ŠX·ðû»¿÷ÌÞ¼ûÔ5H€ E{¶‚漚¦IÚ¥E{*!Ã×âˆÞ[0:ï¢KÊÚÑ@ ª·rŠjR.Zœ6ùÅÖÁ£F˜.}ɇ¥G‘éôOÆïŠÄvÅLËqßE“ÃÑZÎðÙ{¢=Ð8±…0Y[Nˆ/öÙK®XÖ;òèãzÏ*5àA&jÍÙ&Ø$ú+M~у=xJÖdªÖ~NÀL~I àÝÞôü¼°œb¶GŽi3•€$˼oÊ9fêä3 ï”3zƒòÅlÃç™ç*#¿pB‚^9¥Ø0gT±{½ˆíÔ}êuÌÍsž×Ûr›z;î\æ:òË‚½‹éìHÐC*ŒØã ×rñ¡õ<¬q˜ .ÓTh[¥ä—O<±Ï QßôkÃõê²ÿµ²Aÿvqç›”ÉJ›m¾EïÍo-mô-·é½þ [”Mû÷¦Å-ñ,#^ëp•O~ ù(B͇3ZìÉëÑÿò?Ãî±'®6ò‹¯¾½&¨½“—ÕŒ©Œó{¦¬Ã뫬ò A=UU²qˆdã2è=Ì”7M?†ùk¿8Ÿ¢NŒDIÂÉÀˈ,¬An«…±¡Q!ÕªžúÒ˜GÏеF~qFˆÐjÐè©aZô7LÑ•¿Ÿìe¥x¼ûZ'¿è8  ”8‹{™S·¶”ø%»Ì÷¤-áš-˺'ä:3ùE¢[ŽÄº”$BŸPÇå4˜»½×f>™üâw:Ùê4–FÈnœ›èªD^7Ž‚™­ ú°É/4“ŒEn'äâ0ìµ!¾¨†Ñ3ùeÈä—ÙÓ°é¶2”¿4ùEfîF£ÁÎÔCC~ñú¤&¿ð’ë'¿¬Ÿü²~òËPß2#Ç3Ùi•½îiŽQ-ÐCá´y«ÏpDöGÙKNÂVqXO~yÕ«6qx&Þÿq…¬•ù°²žä0j œ¨F°®Š-‚‘ï)OŒK~yRM~ O$”ŠœRÆTÕ:7ùÆG#×ÔCq…¤E¡ÀÚtͼï†n¨'äæ3¥?ãÓÝ^gÈ/j-Â5šð²ŠÂ4„³n5¢"5a`Æéçséœy¯.óÖv“Ñè‰B(¯ÕÉ/„¢ 7§ýo|£ÎɃlvªDæõ@’8Š 8ŸÖüß ÂeûÂ?1o*õ«jÆ”ÿ2A¿uo^­-Æñ%#·â@æá†@ ûpOZ'§‡šîb|F0èÆi|ó›ß\q.v@þ/$̘r¦{fíLÛC`Þkœü¢ãe íL5iâŸÿùŸ+áLZE@7jPç:sCä‘!¿Ðbh9xLÕÞ¾ª2·ÆÉ/Ö~Ȩ#1¾ÿýï¯@™øùÏ^g‰dÌr4׎UÀîp¢.}I²nˆ”Ê*ŠÛÖë%¿ð”X4)_ä½¶è€æ5y2£`Ÿ+'£•ÑÊ5o·½Ê¨›­+ù%M^u <–¾ ¡%áo‚òЫ”üB[™W`@~É)G„µÐæCøåÒWli¶SÌ.ªÂiŸ§ÉÓü¢…§iŠQ7;î4§F;´—îYSk%¸ªƒe³D¬×‘_lì<©öºÍÛÆžyᆴ© jÓÔñúðs9HSÿ‘ð° g„ÕÇ$¤^¦®—†mûYº× Kü»q½q«¹Ô¥NxmY«êI+M~ÉV"zñ4h{ð뼂º?åŒs* +]  VØêGj§cúäÐw}LÚ„IO«Ý÷‹ ºäÕÒ¢ŒŠ]·¶«ØÍAÁẦ=ùÅú³b€kóhÌ2¸tOÑÚ˜WØt§à¬\0éÒ&TVY ØÖ$-’° 4±¨jS Þד>ì¨z¯xå«j¯e²€Ýú.Á妲Ÿ€”Š—î§iýˆ§x®‡=1Q†(†'ež4( ­K_ÚµÌ 9÷ÂKVà„631[ msæš³&3Ê&ç0G`‚æLæ„{ôñ§ôþgÑæ8Õy{ðXä!PJ@1*ÃQ¦A&*’9ôˆc*&.XóÀBs<8´Óͨ ZŒ–|ÓAs3aMËì¯æsjY³hLc‘_¬9@{ ÞÌÏRѶU„ŸÕ&¿,(ÐTÌ[½™Ò@G·U´• è¡â ¥uX5YZ T»ËÑ"p;Hséı¨s¿ ·ívÛTly #'¿¨rƒ›e|i—Ÿ•±öªÓÊ?‚¹o¨à¢v®yŒû Ÿ{žé/#dfø0Y¦¹"s\=y(ðz¬ÀëÒs.*¤`ÁR¢¡“_Ä”Â&4ë2ɬðÍM~ùÈ=Ÿ¨xñ FédÂA.ÃæÐ&.e(™4‘ÑS ‹·¤b{B,µõðÎÀÍ"®.Òm *5“¸ãvübKàdl²yBf j¡c÷È(¬Å6›`9“ ýªÇ6Kàúºm„2ò -.Ú‡‹+ ‘örž:kàÄ0Ž:öøBÚJ+g‰Q–5LðR7zÆSLÄ.éDyƒÔIš¤Á<Ó»`¢œ3gçÞe…RÄ$ ’Ñá…0Ý VÜ“68Þ“&]L”í£ˆÓ($dNÔö÷Ö%—¿gà°"Bª$(šÉ]u¡…ƒEÈùO1ò[¤/ªðɰjÙ¦ŸÁ(ËY;–õæèîÆˆ6}Ÿãöà , g P'ùÐbåGæ,JbH/`¦¾ÏÀA†íiÐäÁ½€ Ê29ƒ¶¹ô)fš[´«'AÈŒ`´ñ/§/µI mòËç'71%©Tà&¦¢…ãÆçÁº7¦P›ác %§Š~,7IôÈ/R*5Òž”,¤3[ÖÉ/ /ά¼r ;ÝÏ€ç3’ç´UÆ9kSTOÆÛd ÷ÁõÕ{Û–ÃÇûÍ(°;È/áÆžüB“àÙ™ü’CÞðÆ7õnºõ£U(ä0Ö+ÍeF=OzãÊáPiOôwy7m.Ÿ¸æûÏ´½ïö»þ :È©4IH”+ÛàXä[ˆìßÅL yík_×;©œéYœ&ˆÈÄ>' —uо(7tu+§M‚2ǬqBeD¾Vfø4–-òËm%·|Ú@“àœc‘_TãŒ*Ö˜és0ÐüÝ÷®šs£^mà6oi•hE¢ì•'µmüÂÀ³úy¸“ñ¬U¸—‚~È+¡mM„\zæðÉ/Â9ëÒÒI~±Oš"Ž Ju[Ùнé-[–õæø‹kª…]Ö }É}*u z9üŒÑŠ ×lœUæs%° \ ëÑü a)W&þŽE~Q–GF£úLÄVÝ^>ùå%½ýщš(lìæXšÐ%dýbV¿c®mêK9 ­™¨Æ͘ÇåAÅ—ª—}ßn T”ni?Ø>F’_ÔVµÑè d)üªngnȶ(çâœvNJ¸YÒs4ŠS-„[Ü7×düR/ˆ63#D¤Ãc·½óêMwüSå¢9#gÕ¼€U9J?åô>XÉ•¥˜ûKÕ.UnTv‰³€<ìžÐ—ÔE3ùe‡Y»ÔµçÆ9›Œ³É! 98Ášôu U "ve¯ÌlmO„ôµuɳžsÞ…#GMñ®Z ÁË$¿Øo‹m„üŠ ÓŸñ+þ>÷¹Ï+Åá…}f‡Bƒ)3Ìü×LñÍÜIÂѤ$o¤M9'Ä㊈²7¾ûê÷ó{æP-2M[Ü´È/ìZeNQHLè"`·§ð+{Ù°p7°|8š ËØ ë0ugVË>˜+ à™lˆ£mÎÖ'z—\våÐÉ/,OÎ(ääU§E~aŽòG^ŠL¨¾?¸=°e@ÅßlðÂrÖÕÞuÓw1ËV0Þ{b=îÛ?‡‡é í²ÕÈD¤`´É[ 28¢w¾ëªbA/ªAé¡%…Ö!Ê™6ùÅÓ‘iÛsRi%ÚÈô— EIñ÷ÿïßê½yËízûGËÚ62ݫԊ&öJZñEÒL›2“KJt©üæo±á^X–zNŠÝŽíeZ“_hI‹òaÖ¦Ú§R}έ" î³ŸùÇ´¾ñ&/ëÍž» Ž¹‰6­I¦›Ù=¾'$sµ&•=¼S¼Í¶Ûô¢üÍ­Rò P½Kô£¤q7a÷Lf<õ©ÿµ÷¼çoÐ{ëÖ;T×ü=µh…ƒ‡”'í©ÇŸ|Fïà·ZG‹RFÑy-%…µÕB~!$`½àWÉGôwoô×Ëý[¿õÛ¥lñÊ:U …Ë­·ë½¬Œ’Úx“F¹%\~ïûÿ‚”ÕJ~êù%œ(cÜ›œÉûü/©^ˆk_ìI¢!ÛÌLn~œ¿å „•4¸ÆÉ/º¼Òê¦3qtê¿¶ µá5J~ÁáåD@ãhdeÞéÂNü/ø?ãɱ{ quf‡ØíTôíJ´ó'Ak" OTeÌcC^]f+ ÉÈE~ÀƒZ+“_¡$ÓÓú¥µn£uµ~òK!«y(ë'¿BÙ8Ö4ì=3þ€a¾~òËzòËóY¼ózòËtÖéJ­ÉÒšUB­G´D7€)²±ÉƒÇ`hæZ”¯©ÛüÒå‰À @T„ˆé^‰S…|ò–^Ìš Š3¹Ò?ÁºŠº`]ë`%!@f¼jìê–yÕkñóü.¯Mà5à§>Sà¯Üá!z˜j‰¨V§¹hï¹Dñ-OUÐíJœi€PâO[Ðmœµ aù©O}ªž¡®K‡ ïékè»îº«‚Ái M`ùü}ŽÞH%@›ÿ«R´ú­’D?w\“Ë\Í )Žà1å>OU OÀÌTfA"N 7ĉM]fA—ÒÒzÔÛð Ö ù\Ôºc^*yó7³›èÞá~m“3b凋‹æ”9uˆÓ" ³ GVI”Õw¬wÿ‡ù,]+GvHêW*â±™¨¯/ubžxYÖ•¯­#‚¨œýñÿñ ã4° ® /ûÐâæ}-nH—¾$s‘H0ƒQRZ‘É8"yL~! GÃiprBnã}©K€±6ï¾ûͪLÔÝ“¨îY:hZ„9—K6ÃÑÑà!¿ Fp>Ì•CPþübÝu×¥ÁE?üÕÒq*ër·6íeî®»÷æì2¯·Ó¬{[nµu#¿” B†eò‹m*Ü+5$ÙŠÿEÐÕF~Ñf‡hÖ»ä%Á¶3uBW­É "ÚüÊÃ_ëÝø¡Ûz•FÎÑ'´SÍ;ú”>ä¥5€éí¹ïA½¹ó÷,GJm] }) †6!7õ{m:B®Rò 'ÃDáz¬A›9 ,€__Ûß>ó¹Ï—Cn?XfÓEÎá{rVmÒjÝeÂD†¡ì¸s™y°×þ½m¶Û¡¶3ù%GÇe(ŠWÞY¥ ª…3&¿ˆ`à_iÏô=—Þå†TLzác~ôñ½÷àRC+‡sQí?j¡דfm&Àèvá…€‡¢6í½ß¥ç¹AížIª9¾œª¦ÞÊŒ™µ-IíW ²Rä°õgêR¸ÆL—¾ÔŒröùWØY#À,‡œÙÃõ€¿”F^‚E×° 2¤õ4÷¯õÝ óg“ÒRõ„ä,®.uÂp¬É²™ùÅŠ#?ÿùÏWíñ¤¡NØÜ»ô¥yå4ëK.¿ª²`RAÑ€4T3…ÌVóU»Ž‰VAÊk›&¸Î4¡Ã.X|Ø1uò‹  UóÉUx‚òº¼÷Ø“_¬-:è&êk=®Ûv\÷Åï|÷Äç÷ôYË£\]Lš¬ºÉÖ"S%P„ôª)K¸jjØ‚°—Á+ÏzÖà# -Ô¤aA…×Þ®°¶Âa ޳(…á_ ¼mؘä4(æd¢™B‹¹ÍÝæ|ÄÑ'T¬ HJ;̽iÑ+­£Š™l–f–9Å7€&¿ Ã@“€Âß|ÈE“ÿud¿EzfÏ%´ÊaY·u¶l Ðס$ÏîÌ(ò¶Úëj0fZ‰Ø…ìyûG?^Á·™M°.¡á]+À¡@W*kœ Q0˜&T©šÍú9s&p†¤Oø ¨×¿á#…0¸·‘äÚ³ÉÓd´/…ÆOzæ9M@±lý•>4;Q ™m›þrMÅ€šÑ æ°ÛÆÂ;®š/a è!pPùÞù¤%gŒ2§õŽ$¿„¥AâRB0CQÂ,À´ƒ”Z>åÓÿøG8¿kÔ¦ûª6m)L–nžÃ!$Xá¬AkÕï8¨!NHhJÈó/¾b(ùÅš´¤g*p(Þö'Õ\• sœõ&=’ÁcùÈöýŒ·µ3fÑ&Ü€ëáà¾øåoVA3(ÅïÁ7ÁÊ8 ¦Ç$­»@Ðh&™&àOÜpwWŽ—¿õ€XƒÉ/ÃŽŒ“Ä[n#'¿0UM’ýqeÎ.dÌ+Þó¾>£`9/äÁ>/ÄÏÚܺ%ƒ¸¢™h.ˆIÛ…Hˆ9(>æ³Ö°wo¿ôÝ}2• öRKÊ=»×‘ä—° þa¢„Ì ÌíwرwÛGÚx‹†øoÓx×`Ç#¸µZaÕÅl4ÂLCó ?KøG@Zó0 ¢9+0QÂñÔþþ=×\_{–S )Ücª„du#É/rE™†˜5­ ËD~ùÄgh¨ßc–™ÌΖW¿oCª ]ij2QfI[Mc×WÈ7ØY€û„ V=(ÊË7•΃¶Ýr,ò‹5™bÕ·A™-áÝeÞü îkZ…0“Y|M«™%¼*¶¯½Ï&oëÈ´%Z"@H0¶!ÛçE@_[×~óm÷ôf®Ø ÊDføØÇiœ6Kµï–§·{§X ã Zž5¼Úì ¨.3kμ>ã&웜Yî9ŸÌq£L5¯âZë«Zîë“`<,&îï2ÆÊï GÈðP|?hò‹°Ä 49’ü"•Ε-Ä…™â€Ýþ±¾Û4´;ª©¹¡é™öbûÈ \4CN¢a¯Öw¼sÖ¸%­Zóæî{ì5¥&ç<ëØä§A(òò²ÝÉ/J[m³}}Â]6\p䜡ëxYu6ÙûB·G+̽Œ·AOÌ»B‡Ê Ÿ·¼å­S ©ÍñŒM~‘b)+1ѹ!›÷ÞqÙÕÕÛ‰S KS„ã@’}ØãrZDè„"á=ˆ6ó纾› m¬\¨nÞ¹yñ–ñ69;kòºÒrlò‹2‡ØÕÜáhÑb›©¼Y¹ùÁàÒ†ö¹ÂêÖÍá ™kÒ¶=‘ö!”Ý<óm̼Æð!t¶#´‰Æðy¨w]y¿äyÃrR­i,ò‹Þ„2‡h'äçæ„ü²û^ûõõÑ Á‚[µ±Ëb»uI@NX±)j­{@!{P ÂL¿øåÌðiQ”ߟuÎùÏJ·OÚÏ…¢îy$ùÛŽ’ÐL}‘¸ÔE¸rÎ…—ט’€ÌæÄž³ÉªÍ<í²Ou€9·©/î{Úϲ·z%0mrLozS»ùAš¤A±öHò‹ö™Úª¤Y8‡se´MJ‡&ð`>¬:¶X´wáëàÑ k¤ICÓ»ˆ!c …0YM˜µ„½âÊe#a§”,úHò‹‚°b1-Ž»å{øï×¾n³Þ‘ÇV£Y¿M>”‰VÂhÓ$˜i›ß³Í>ºS_'äúêĹÌÁ Öe¨†wþþ' BkêwѪDÙ}ÑæÈÉ/Ê€¸5G;u\^üÝ ·ãìyU+4f%³O™‘™†áÓ¦¾ÖŸ¢rÇxcëº Í½£j3A…ÜÔ]zÖycýau›˜üòË“_”û¤Vr3_k¶¤t 7îwʆ8!ÌÓz$-XOØ6ËgQýy#¤µ÷æ<á!i“·åˆD@.{ã{?ðÁZ\#åx¨Œ9aª+Öx¦šü"œ³÷dfyLù>%ü”7{ìÓJ `—Ò-N¥~ÃÄ9ª ¶%¤A”DPNÆüë?T;Íãˆá3mò‹MU.©Ó¤š~–h?gWyjMUªi;ÌÞµ iíµ³uʧ&ùyf…dz(s• äÊ$aÕ ßyÅU•Q4L@ãIŪÝÉ/ðxÝVÞ æ¬Ÿ¤¤Ç¦µ°˜5X­Ó`V»‡ÒÒ²K ùeëívê;š`ÂÓò*af²^U¬IÚ䀢ͫÊùZ'—IhÆEpK)ðÑ‘_tx JèîìEÝ_~C€ÙèÅ/éí8g·2 eªÑÌF§ÍTì•9ëƒ6 ûöw^]Nh:§÷ÆY ›sÐÅ+ä¨TÅe÷â>Ê2zd$ŒÄSôa9OãS‹ùò´ÖcJ÷SM~ùµ_{joƒ 7*&<·_ÊŒõ…¥´yx(º/ç£Ô¸dé9½Å¥®úÖ#'›«%b› `8Z:`¬OÊX–Óã`0S#ÀHÔRü¡€@‹€ ú‚âY^Ìzè6a¦Z;þžVžQ†½ì¯ª_¶ÙnÇÞßôÖ2f«úóÿUnl”cñ{09ýubµM~!¨Rˆ`]7xœ¹;ã1ê=–ŠzSØ=k„übÁçÜ›Q78Óßk×éIv\#“_4\=Ù ÿg*È ¿·,ÔQ³×8ùEZ³:9!¡/É%Äkü"µã®Mòò@ùºÚ¶‰µF~±6•*ÅŽ]A­#¦ì5“˜WUMCFääolEÝÑ6ù Z´7ÓÞ:A~±f`áĵ<®ïÕiÕlUÏ}3 ÛÞ«¯yI‚HX„`bZç&¿@iÈ;9#7N(ÎBE;—šh¦¾L&¿0{ÂÚè“MÐ*K m‘ÌTý8HɱP’ƒ>hÐä—_h”6C~Hçò³_ÔdDW ‚A¯*.^O~“N1#MNÖ°}É;O/-‡‡4@»#9ŽHÆâ5Ng=ùeLMZ—«T““ÿÙzòËzòËzòË´—Ø´ÿÀºF~É ;x }N‡‰K~4ˆŽtÒÖ¹É/ÒXs%7 ž©k „FªÏ©3 tákÝl_{Þ§…¯–¤]¨€&óWöOic­“_ܤN->Èw¾ó:$†Fa‚@f GÑ‚@µÐoñ{ÇÃ'à•8ñaÆ¡Ö1À‹0ëküâ&i†æ4‰φ?ÿ«¿ú«ÊçÈñþòBÚ¢YlÝl¯Ø>jH‰m…{jKÂB…&ÔZ%¿Ðà'?ùÉZ좽.ÐþßÿýßëÜxNž§é™Ì#§†:‘æRFjÒ­Q½‰ðLWŒ‹bœëŒ‚ô%£m| rŸ›E[¢=¦F@æ§—I[@‡4ÚÿüÏÿ¼ö ±|“Éù”¡Oèž.£m2EkB®¢xÆ*Öùˆ)Nu.&Öšû·û·¸!èL€°5@9'–iÏ¥‹Ý=p©ÁñRŽ™ñÉ–†²‹ø—ÙQÌ@‚ÚÀ-Ã.dì²{h0S'&wäúÝÄ£>º‚jk²‰*kºrºaºgiê¿HÛ5c<÷jü‚Âd0»‡iÂù8î"Ch˺ìšì¿Í~þ öî`oþ‚=˘]z³wžWÏnvVëæÅTs|£Òs ½2Ó_¬Í߯I­ò ·Oƒ4×冨ñëkÜ‘ýèG½/?üǽÞ|{Ã\U1š´š<:;ÖåZT?{í·¸·G™ò–RQÏÙx4È<£EþÀÚôJP• «Œüz.áhÏeãÖ.àl”:4m™#³>îø{ï¿þæz4èKÀJ$dˆ~ˆæOŽykG£î[ú&ûÖGŸÿüFaR)ÈÑq–NŠe r"+‚ΘüÂað¤N¥=$Ï.7«GÈ5wî¼Þ¢ÅGô®»éö D h)cnt®ô&A`šÈBjís3o÷r2Z9õc2³R¢SÕ´½<Ü‘_„i¢h7µOñ¢á†„Yà°çÓÏ:¿öú¡8ôþ™h^§a|.ªB‡ÎlµÙ—³|ë³|´ûö/­ùmÔ¶%E­”,iX5O­ˆ6§M~ñ‡Ö^Ó$ÜTähv)<ÿíWÔ?pƒvøòQÍdãªÙÊTÃÐŒµ.ÃòIWZ§Ú×Lz¿£Ù¨Ìò!¤ÂVWÈTò˜µ¥"*›übÑ ²…h˜uÖžKXåiYƒÝÁ(KϹ°?Rƒp€öí|ô»*|¥;N˜W¶;„æ2y",ŸÌùy[ékþîïþÞÐîSM 8Æšü¢î ['HÖÔÑï ÅÄŸÌ0éÃŽ<®âà@9ƒ‘ Ð.  ±|.ª„´8œÌ ¡¹hU“6È-_c #.S!›mÌÆgªV9$‚Z›`ŸÂ»P}9ÂY“ ñ¾”–#ZâmALþ‚‹/\‹°Û. ˆ¥Ç"¿H $¥Q™¡ÅL+sÇê6jDã…|º ,yðãáˆx €øL6Ì:[HˆgaËf óæ¨.þe —kÀ»ª$È7Ç"¿äŒ'I÷)lÓÙeìxŸä¤kަ (j‹ ¢c¯ê}nÔšÌaÓà£í¸ÿ+ªÆàÙÛ‡Æôqq‹¢¼zP[lñ¦)…´Ec„‹ü^°}N4§¢/$¼&¿˜2Ѽg›Êb»àdB@ÂùS%`\ô…úÛïÉtÁÍì¥ÖkÆÇyÍÄ‚‰ƒ™;Ü'¶Çž{O)$¸œlHä3ùE©PYC-‡’™$½rÁhÙ¶ùY\žvwŒ÷4Vvޝm'‚ƒ«'„hqnŽÊ´= V!Dôm¼œ‡xOÉI§o#±–™DÈ‘äÔŠF»“_v,'=¸q¦“)…Ì©o277ç÷Ycãó¤L-„ìÒFe´½5L½L‘i Ÿ{ëï *ÚµlcS­ÉœöBP~„fEA¥ØuËSŠGZÆõÊÀŬ² Å*uRÓ™h/…'BÙgVHÖŠ5$NõÚæ€ÜÜg¿Ú6Â,Hàí¢yß/T¯œ¡F„é O{¡9vÛr?ƒ„´}ŒM~á]‰yÔÌTî—Ë¿ð’wU'ÂëY7²uæ59¤°,Cü‰WyYZÏü-ÂZ·>4‰üyÖ¶mé÷‹)?ûÙÏ™RÈLc‹üÂDÃNWB&©u†:±Y)ì”nEheYÒÈÉ/„tÖÍ2ü,ZÌÉGꢯyí¦e;phÉÉU‹Ý(2qàDlº¸&„Òef³µ›Qp¶ žÚú³ï®K¦Ñ·–îÖ0ü^‚±È/Ö¡GŒØ%¿¤?‘™! fÛïTÆXÔìý¤~™1lžn%Κ̺ôP¤P.&kmÚWÛh›û:¬v!áW«—=óìóG’_`ñX_Îe/0îÁäUkµ} š »ÇfÛŒø¼b"»'D Ά µ~Zö‹ú³—ÑZYÌ›bÖŒ¶¡I!ç“1qBÄkÞÃHŽ «ÉÚæ¬Í±É/ÊðrIÂdr´¨B&x¨èÇ _ØÛ¹Ð•¬7Ip8Y̵%ÐŽÁ aæjM2o‚fŠØÕ¾)ÈÈà?Û‡ ÞF茂™Z«îÅ’ò^e̲F?§Y¯hîQOAÅŽwÕÚVÀUNP¢Ïéc¡N¢êYÏzNe Ø Ã²Ãì ¥É«í£NÒ.•ekÒ¾*x°6EA¡ÛßZÎ1¸êškG’_"<íñâWeËi“_ıÍYr4ëÃr´S d¿ñeNò³«öZ%¼™,R3ÍpÍŒ¶ÐfÆ¢Z›Ö%aO9õŒ‘ü,Y÷!ä´mtÉ/Å_œ4áãŽÕÉÍäm2,çEJ·„O´JƒÌ¢;¸ÝâßðE/®”&{ã®{P_9&Bºl9Ö£íG\KØ6iíݽsÎûÀI¡“M–ïнV^eä½~ˆ BØ=ÜÎDºgWU.ã‹7éí0knoﲟîwÐáU@˜6®øä‰AÓ%R*ùå±ÇŸT‹T£fø\_ù…éˆsGÝìÊüžçVZÌ‘ŽïµF~±6¤6nÊúá ‚‰¬€ÙÞšó là¶0k§z>ËRÈÜžµN~òÉP›˜lpPÁÔ2ÓÜš²¶8ŽŒÄQq7š§Éx0,d#¿ˆgݰÍYòªqËÝ«ƒæšŠü ¡4jÙ.ñ„ ¿(‚ÙO'O~I§zœÉ/%ÛyÒN~\þj7]…„\©Ó³WæCד_6Üp™“ÇJ0}§Ò}ùzYy]Z®ùEcÏX™‡:î߬Ð~Ü_O~YO~y_äš¶|`ŸÔ!“ÅäÒA˱âS•¶Œ‘¨8ˆŽÔœI2î™ê}+µ&‘_Ä—™ü¢l‚ø¢F¤‰¤S6jòË:O~ÆÈ!bOxšF4ìÈÆ[P,¢t´õC=ŒL‡?•˜‹– 8Ö™É/¹QÄĉÿøÇÁüðÃ׿.m¢Aá‚xk£Pæ¸ š†Êç™Iâ! Ð×êä _—ž¦5!Ì m¤ 6A»¦.ðX5 \ƒ>Øûò—¿\qµºÛ:jš.wBª ¬5ò “ôä™-Y‡nt27ø^üšFÓÜUSysi*ë-ú:äÍ%µ$i­_˜ÌÏâfIÅx0GwJ©¬xØØTóº* ¼±sú3|J¤ð [lèÔëQŽ—7]Úwž»kï£÷š ÒèK n‚*È*¿#he À¡5Ù¨0Gôa0„³gf­ÒžàÖGqòçö6/YÊ(m ™îHò‹èFö.< Ó5£mtœ‘_‚EmÓ_ð´¾P§¿4^H3aóms Ú7O &B†À„ßgмOh‰ÐÑÇ?TÈDic‘_˜«QB+è®{a ®î]†…„e Ò(áhÒÏ#`ÍB9[—„Š’y2M&IHk¶Q|E”Û¼¼‹ëß^pñeCÏ~(d¨çÈÉ/ÊÊ2vÛ†ÅLƒbÆÙ³оq?ÌÒjÞ4c‚7ZÓgª!ý,`&Ø@†q.K*2‹çåi;TÄì±€úm~ÞU%{Å@mÊX9ùE…wµ&•,”2 t§"ä?|gŸFØè¶Œû+e‚€„ 9£2p@hˆ€/E[4E@&M˜xc[µœ©ïºúºÞëKÕ`ªuiÛà]C™@ïç³ ›àyšÈ_ŽF‹Ò)t_!™(Ô$D†O´^H¸aþdJ¨NmÕƒUp&i£Ï1ÄÐË쎵=#™yÖ´Ÿ¡O%¤õÈâTÆ"¿HФ”œ†6üÒ8ËwT͉nÜ ËÏ}ï¦| ùèÆ|í ™;ïmä–F‚ɱà>Ó{}mCaúì»ßþS ™ †c“_)nµG0ƒQ™œô’‹îF<ñµÆi³Dd}u×@¡=ÏzÍL®ÌçÊt§lG„ ‰¥°dç]æN)¤äZŒñ6CÉ/dçã2-u™ FyKÁÀµã¼¯¯ˆã¬¡Ðz3oÀkÝßÊ.³µ(T£k8äÑ'Å™e !55–ßUãæÈNe®á…`ø0[KКÔ"|J‰õ–¦¼ 7!)V'åx˜h&¿Hk\>]zUŽ`™e'‡zôj °ö2”¡{œ¿MßߺaZƒ5GvñÊI¦Ø¨N¬1|ZÐqÓ­wõ6.H’©„to‹ü¢nä„2;…'˜ôÍ6{}1¹¥}†*óçd†<'ÍÑV"&€/*ª‘_Z—‰Œ–Bùf³nâL4aíåh~‘­B¦‘>a¾ª÷Øm„äQiÓ:´N ܦ¿HxЉamW^ýÞKË%`~¯ ¥`τǛÖäeåx‘½§åƒ˜„þDB'¹›É/[m;«¸ïûvâð ÚhÃm[ö¢ªMûerÅИ>\Ìõ¤SN«s ÅÊ4Œ¼_!ºXÛÊ‘_¤0P2P _Ýà ×?Üð…õæÌ]PÏ>ý““h²6ÔŽ¢Ey¤=¶×³¬wå5וî;z³ŠÃ›|‚Ò à/í©Z¬RòK;ñáÌTœE·ºMà6~IY«åÜó2©‰—]|ø±5PõTÇsÎÅeŸ-½Æ}ì e¬Í›†žëÑTB¬Ï©L:™üR´8{äxo4ùEsE“UÝ'‡Vª«tÙ=Ý›áʺyÞó7车LTÛâÍ[–¤{×Ú›|íë6­Ãßs‚Ù(Óä\$„s.B†igÉÇëOæ)”}ñ[1Eæ `×Ò¯´½°ýA¥ûQ7<Ýß{X¢1©_Ô2\­äá“vø YÓbØûiš¶ò‹¯W;ùEè'„r’çªhòg)÷ H2™b“_ôH\«KHKE5‚y²v­_Ä‹„ìNd²N»Žhœí`òƒb¢‚š£E½˜µF~± àïÖˆr‰ÐЉq<¡›õ358[‡2ˆ­çç2Em=GÚ“ ù»@D1ìÊ5ðÐÚ±¶aØR0!õ⟠èC¹Uzà…yß´¹}-µÓŠÈÉ{8â_ŸÓÕ<%¾Þ³Î’_TÊx¿QäžRj9"æEmWR»' ùeòäZtésv'¿H“˜< ™<ùåÉN~yx=ùeSV ƒ>.èÝéåš_®¥ºKëÉ/ÓÐ̸9ï[¥š,ÊÓÊ~yzñ–Á!ª»ãUs~²Wé’¬îFÁ¬Ô’~R¶‡J•þôx?mº‚¬vBZg.*7÷p1Ë_ò2”¤P"ɵ=‘ÐAAÞÏy¿üTB^Î/‹À—ÏìR2¡g¤ÉRÐ=©äžÀ ŠdÄœÊâÎ ÅTÙ~Ò‘_D=òNÕ>PRÍ\Ý2ˆ’œ«®eÊíÂ'ñÞ'ù…0Zñ*|n^OõÈïÞ{ïíA{ù=¡»ä}Q`Œ_DDëù‚‹@ø„0B«þð”›ÙzÁ}/jíRZÑ6$¨à3üLš%Û±V-NKÕ‰ã®Ó±Ö¤¹!Å<Æ¡ÊeCnÈMÓî« éûõæì²koëmÊ4¦—é Hƒá†„ø"ìKs‰OPYåä—Э;¨rïSqCúUÙ^vÍûzºõÎr àßÕ½¥ç^ZQ"™Ó€ö'”É/‹Jsï‚ÏÙ¦TÔ_Rþzðß»'ÇÇ¥-¡èåìçU2ùŇ«Ëpã´B8 &sD ¢™PÁ¥ï\°oÇ´´·ìý7WdV0ðªðté6$‘3íö,Ìì×—6ý &uÙ=9YL˜§e¶3šüÂÕ›SG8^œKA¹ ¼ïÎ,PxzÛaG׳!ÁÅ23D£53C@b°|hS ^— ö\Ç+}ÌÙ¥¿‰üò‚lPë<É\˜ª Þ>©ìÉSÂŒÈ/ÌÔá˜NÿÁö L¨áúo‡ÝóöKßU¡c9¯U×XÏ1p4@BjÛéSÒ(¼¶­ÂtI]°×þ½—½ü•}âK†¢¤”I³<4þôJ“_Ä Ÿ"š F!`¸!q2sçíZNš_Vq7€ eÕÀ¾9x:,BjÀjß2@ûÀÒ`~t©]uhʢà .aã~mr¡šÇeqÑ´É/8P‚g!š³Ð»&šù=­~º[¡/]RÐ_¬Ø› •ÁU‚èèF V€æšešLéYjµ[›áƒÀøÚïv+C‹þWÉ;ipª‚´HȾÉW¸·i‘_¬Cã Z†¢TvO1ÑŇ]a)€ EÝÓ"lìkÎC×Yp‚ɸ©v.3Ð})<AýÈ×̹‚öÚoèùx 7ü…e5-ò Ú„-ƒF'›¨­b×Ýv¯Ç÷¯8¥ísâ}FÝpF Ö™þZD[“üâ뜰Í\»§ˆvô‰½W¼êÕ#‰/¼ý´È/„³ñ+÷g(JŠÂóÊ:À‘„·qM¦LtGlp@0t°apxÑðDøZ]¤!i•7®|Ë"èdBZ·Qäw*ð 9cO~±á£ á"¤L–°K!¿ÜóŸí[`²ÐS9Þ{9£àsÕŒ™,mò°€n:3µÚѨ C0Aáh6øï?aÉYÅÛf˜cʹÐc‘_DŸÿüçëI¶‰¶ËhǾíÈþáÏ!Ÿ…E@³fÆ9±ÞÚß¶gf¶V(9Í—©2c@DÚ#¨ý”7椼.>ôð‘ýÐLe"´}vàäI*¸ì‚g­kp‚U %wÁÅïªÍÀ8cž¼jŽÛ÷3Þ6ÑuÉñÐX ¢„£)Bùì,ø‹`!GC‹Àâ-=ç¢Ò+ùõ¡‚rìÉ/b³µl]vÏN³f—³‘?<1ÿÜûª°œLðªã2ÛÁša(Ì5ŠhŒWAŠ€áZf` v¨Iˆ8Êda9’ü"WTƒQš¨Mù# º^³æLxÏ„'$s ¦FÞÜ?1ò¦týL$âaª´iû %l#®ép (¡È € /½bY©$l?P“Ñ"ÅŒ$¿H€›død¢hJx!¶7‡X5<‘ 9Y®a ùF9¤qk‹7¥QæÈëÚZÚX›ëëkÆÚ,-D°QyNAÁZèI1Ò3Bë¿<¥”ôïTɖ⨗ Ôo¬GûÕu©ü`¼ oÉ‘0A›sµ]8êÛC?$#kÜ<³óÞüôÓg` d„ÏñsxX?‹w&ìî{ì9PH±¬Ú-!‡N~‘K¯çj)á†(YÈè¡©€äÝ@ž°'ގ࿾n X_rHk :’™Ò^/Íû6Ó¶×ÔÏ2&'ã6Â(E R¡MEB k'J~±/2Uñk¦ñB3«’¹¶ßaVïÒw5¡K3ÖËfO(^Ôkæeq,ö=áï馳·2ck¶Å¾Ÿ«[¯Ì; ð»ëý–;?V@þSOcRÿ‘È$¿(ä çB ³'ª¯lU†>ïí—÷…ã°yÄ¥œJ ž‹Ú&¢µIhrG?÷ph-Sšð@"`&K2s|h–§¾¡,—L@>»ë2 ^ª¼ÛËåŸêÄ|J©–͹‹€hQ‘*kÐ:ÌLe“_Ž.›3­(¯´–q¨ö½LBËĉ„n´Ê ì Æ<›¥È<1// ‚°yê{ïYö¡¿1ùEv¯Ä()îÎTV6Ýç` y»íY×[تnÜf.ñÐXfJ ¶¥N‰hlòL›ƒbŠ´E(¡Gd0J¦¾ø}¦4-=ëÜ)'¿S¸÷±È/6Ò¨;4?c¦ÌTìM •é˜ZÃ>'Æ´æì{míµ}ÐfïÑßµ’Ç’êˆxX^“¦ÂŽ&—O}ùjÝvêŒË{?]*[MéY•H9ùE^&­’õ§Œò‹Òa*ÛÖòKFÕÄ4 H°6rñ˜ºÞ3YkÓû™µ?S_h3 Z·CcÊDÚeª46Õ©’Çú¦E~‘eÛkhÓ: Gkòä‚0šÌ@”Ж„nrÅd´(ºÉÔ‚Š”x[‚0ÍÀã€~Û]÷ ßCøœQ26ùEÍD!‹ ÐdèKŠ¿úû½C9~ßú#dŸ4fO£K¸2N#'@ˆt˜x¢™ C±îh5L²w<íŒ3‡"œE7¶i“_4oP& -EF¸!µø[Êø³ ¨žÃ!3yê ‡ãw^³†œ€AtÄÓ ø™_Ùèü–Ñä·•8ôéC3{¤ÒÌJ‘_t¬l+Â¥îÑNzÂ&Q…jÚžûTÇf0‡”Ð(í¥¼Áñ0UÛmÚz„y ™læÝÙNp´n¸éÖ’憄zÏIZ³Óžü¢"\’ 3 ‚3™>c¿˧¤d&Ê›f®]¦öÚZbªB»pB„‡!xó¤LÖÞi´ÍTÿTއPj;3"¿(àòº!©åÀv.ªíÿÖoýv™Î´sonáƒð¨)Jeª¶‚r8!Ïäù=û‰Þ5eÿ\rÚÒÞÿ(Ÿ;.*,Pñ‘_‚eÞUV¯u¹!Jø¼óµËî½½\ë8„ä39-{¥\â^q®@üÊe×õ.{×Uuò˸ã9B£àý=p÷Pú$Œõ–MsôáÔ{ä˜ú!Ò±œ[•³«&s;„ˆJü³w)¿/*…©CŽ-–#¨Ê^ÉTÏ,ÑÒ Kή”áó.zgïÈ£+©vòÊ8ÚË0%™‘fì*ü¢î£}@“R›ô'ÝœUçújÓ+_õšrFÁœšto³Ýöµ7ù’B~U³™,´Ü—5ÉþùŠIä—›¦uRï ò‹õ)`Ç Y““_xtICšOöDÞtµL~Q½#f2à¸ëg3ä9E]"0q5!W;ùE|(„’}¯ìûwºVÖhfO~a*(ïãÞìʼÏ6eïóP×ùÞ†Wãa%ÝB½å¹s"YÃtMZlÌ,io­’_D;¾ Aè'=SÔõUåSqwÉ ¤h¨éMoiÝÒ9t>c!¿0a7\«n˜Ë¾ªLè†=žÙ>,Jêš1mêòÂ<$Q¨æ}¼èÄPÁ)9’«¹\43«¤\ÐfLÒÍHËd-º`œÅ É/~§ØD``Ó¶°Ñ%µ{B“_xåL~á¼"”àßÚþ‰üò˲ù?9É/%¨xìÓËëºÇ&´èד_Ê`zGW)n—’çg¼ÍzòË“•ü"ß ñ: ÷“fò‹œS‚­S­P-5SÇ•pk :qô M~Ñ¥†9 DNûE—FæÁ똆õ“(Oò |ºN5”3üA Ú¿øÅ/z€öNÅ¿ãBÝ|s<”¢b¯†Dp—Ÿ)n³¡!¤òZŸükÀµâ±ht2m7Dú$³Ήa5}ÁÛ\üàë—ÓI ‹g"³Q ТXkäÚ³Îp³t©i†&pA&sCe$Ã9¾QSIyŸ†¥l„öÌùÉÀÓd˜¸Ž·$ 'È”èèç%˜Ÿ7Šå3”ჾ„Ý#h–æè7¸yk ³€¶˜™ÈpXà_^ÔÄ—®?ùÉO*— øirÿ3GÇenˆ´Ë±Žhú/ÚŠt-Å5B~Á±"Ü7ÞXñw¸!ž~ŠL†dúÛßþö Bþçþgíd2ìéaTÀs6žֺݳ:ÆT= ­ÕB~Ñü±FhÓ7FÝnHÀ÷Ò©¯ýë+É1眑}Ì„L{s BJž%ÜÒ*üâbkŒS° úºQxXŽ#ÀûɘXlÞ¿üËcuò‹!)Ÿ}àÁÞ­·ßÙ›¿`ÏÞ¶ÛïÔÛü M‹L2³{hi*—¨µÊ1yV zŽªr\Ï»J&¿XŒ]f_ñ¤Îóà$”4”+rVzÎõàHö(ÃQ.½¼ ÞÿÁ‚ûYÖ&MœsIm¥ëSwòÙuŠ sËYZŽå× 癀éžeò‹*m*˜¥Qì>üj½Ÿ«ZŒì…›Æ?°GÁ¡‡Õãû.7$'~3³`^™Y°äŒsjcb+çŸgœ†nüªÆþ¥nW›ürho×ûôÞô–-ûg㥚æ’2IÊ-Ê'3žübÝð¤æØ5~8–З芀þé!ÿ?{wniU݉ß~žô“Òùe"Äç3(¢ˆŒÅPUE3SQÌ3Å$ˆ"‚N€€ "`Ñ€Št¢$Ýj‡$ÍÔfhM¢Ig²óç·?{ßï©·.gºCMtýñ>ççžû®w­½öÚk}¿kwRïco¥•â”ʽÊ ¥¥š ¡ Û!gNµð_Y_•çwßsaï9%Ý™Öqa÷Ø:B›°nyrõä±&GC‹¹ü§Ta¸!6çÌ Á YsÑ;+d[€™–«ªM2Ù´êT;¸t°˜ýö?¨÷¢¿dñ6ÝÚ ÚoÝç¬É/bJ m9.›€Yƒ/e b÷\ýþTDUkýhE8†Q@ص}™¯®Ð4ÅXfš–Å„Ë`åw­kÕzùá=UléHNoÇA±¦Y“_løbQBÊ¥†6‘ÙYmòËâÞEÅ‘Ð`ëÉúõ>¢TLy­ z2ƒQ¬E B`ЬÇLyñê"dzÃtØÑ%øÿÖ.ÓfН˜ù…€Á½ÚC€±ÓSç¸N«h*Z„ÚfèFæ Õ ÁD éJÛþÌëI/ØLej½bµL=¹·¤°|†Õ@­W`c&;còK(õÖd¶‰Ì ©Àû2 è®)^–uØZ󷹡41[^–ÉBTfúK_@ƒÌ6Ý~ƒp:¤T«·}ãöC L¶A?‹›ùÅzÄ—$dwÄTæ†àhÑV¨Lí!¦Í 'ó{& ³ÃÒš´e0Y°˜ôgŽ @°?¦O{ïýõvžjb=H“’ÔÉ$Έü"‰%àèB“á†È«´ìöókVíð£Oªë/é ¦éŒÈ£†c=¦ÙPfJÚäÃ|å=sb ò™,ak”tá%#Q[V¶?q¶ZÊÄ“_¤#•ÍdçF™i¸!Œòk%˽oˆçÌ©>S_Ö¶ŸYQpät™ì©™ÂËf´ “Íüž– ×|àCuLǰ(‡/׳ýÍšübsu1ÐO—ì¶”ƒ¾lš¬šx”€b¨õjkÉl× ´/Aƒp 2ÙŒ{ËŒ­› ùE—¥QG+©I»LâœÈ/LA~ÓZT€IÏV.ZdñkÏyn醴¼®?WÒ^9§d昪`ÜÞÊà ÿ(8°öœRZ ðÅÞ ¾¹þ¿IÁ)Ỏü"¯È*`—?Éô—Ì5ç¡0 Þ¶ó…éÓ®åqNª\JçFæ*Zò…"t³6Û$à{zw—œÐyç_8ñì!mqÈœÈ/²èÊwé[Õ%¿Hß§ÕË·yeÍ~/,u €g²Ö¨À©zµÐ¤“…Ktsù•W÷vßcÁD“_¢a÷#hÝÌ™ü¢«‹ ^ ÙÝúÄ œè6¯0ï€Zµ:¸_Ψ¦*Öå|_Ìx}g æM~1âm²¹kº<(­qˆ|„ïYV‰ÞÆWµFM~Ú)ðôR+ôô†M~qS?¥ÅðV¿X«U»í¾go÷ÒñaϽö.˜]Ê´¥WŒÍÙL_“7–Œ½QTFÈúÊ’)Îü"ªPwðÁ'l(Lê’öDј4éz!¿ˆ ÃDB\ww„Æ$^p6ïñxYAIʇNÿ„ ˨le?5ub$úC“X0’t¶¶‰*9›žÉßøŸ¢+™ÂL~ñ*ï$ž& _P2?*krd3Û±Mládê‰Z\µÖºLAÔï&ª4‰ œA”éŤ4¸Á'¿ð°²ÌFâYš$q. p®™L~á!ER>Ï)?Ô%ÿg£M~3 âÈÕ•·eÜí©Ö¯ƒ¬7¡Çq#­oÑ”ü áºä˜:ùÅ©Ž"¿ ã„ œ®][à?øXŸÅÑlräÁº½kÜäëŒ0yë“mI¶¦Ï,7{ò‹83CølæL‘ÐÝB~™Ã¨±[È8˜e÷÷eÓþé²¶VTÕãeïúa‚y[B8Y€P¼®ïÅžŠ`߆^þf ùe&|è$ÑÙ~Ȱ¿+ ܭʂ܂är}ÙCïÐ]­\w”¯·_æóÏËšœdò‹”É3rò‹Í=Äk‘¯C‚‘ÄVœ¾Ù#……"#wfÚ ñJœüÝbÞë ²©–g¥ÉRÊ[2J;ΕnJ“¹ ù%ƒQ°ãˆæw¨0´вYN~USÈE{ðJ3 àÑŸ¤P¼o¿ýöš×õ>I²Í†ü€ò áPÏ_»4BîW&¿ÜõéúNf Ôðåßúïð=3ýE¥ÙZlØó“*¯ Yx˜åëµ#nè2ò; ‡‹´9cò‹xÑy9ÔV"hÈ/Ìtí䬞G«Ù~å«ßœ¢L˜Iдl­ÂÒÑ&\9ÆM*WðwS„ã0ã#Ëó1HPkUœKÈ‘_2´ÏIÀL@2¿ç¶;ïí ¾¡ Ç„Uãˆ|¡¢"¡#•`z ‡ÓšQŸ2ÕŸ¹uþiEµ?­÷ê Ó¦m&ƒégD~A«çe9šhP4sä1ÇWøt<©}1­¼AÅ2@—¶•€XÒö±ÖD9” ù¹à€ö¬Yؽ~—îòGU·Q…Ed‘_bùì¼jèKt_¦N¼£Üh bKcÜ_Í3pëÌ]‚b²„¤LáXB% AQ(‚ÀLã[`àSÏ\=‚fûS*œhò‹ŽP„­N¦D?l¾ EÙ³D1Ÿ¬øpÚ³†&ÁÑ„ñN¡3TÁßX“­sä3EZkÁAƒw·‰MgV/l»ñ7m½dlf‚‚•$¿H(f-Ú6b¦„DÇß}=«é`$6õ5èÚi5ìŸp+™°ß¹aë/ Ã´ü§©@Ò aú¢Æ.¼ôª2åb÷±xG¶í ¦–Ô½8ڈī¶ [HWÀ@¶± >X°àár0A¥uÁ¾³ß ;À@„À!¿çs*L’ró´å„‚ì’‘¾ö@úømÔÍu½eË)¤èˆ&‡N~‘Es0¦E±jˆ/PSS@¯þÀu;h1i›»Óˆ*íEɈ)7çäFƒ©¶÷LØg„Pã½öT±±ÚoèÿŸ«®ýHв|$½P#Okr(ùÅiÛ©_šÐ:ÌXOFÉ\–{ŸE‹K ]›”›w#žt8Uჸ9 R™)Òœ½æx[k–yÓr10y B¯~ÆB< 10Á¯+ƒ;w/>aØ6"˜' ín(ùEæGKŒj¬M¨Æò‹µAˆÄ¢YKÐG÷­W'²YYˆÇšå²—rVÌ™Ð9¦‰˜Ðš,k™°Žm;”üÎ !m-Ý,p$ùŤåCC@ëŽv´1»õôsÊð÷h»a ¬ ÿôIDATÄ“Ö8^Ò÷ö¸@¶Û˜·•ÕÙˆ]â%X¼bgíz% ïmûA™òý+†Œ‚“¹£A¥Ú9ùEÂÊQ –&ºC£ßPf…Q6å7¹ýŒ?M¿s߇¶DÐ̱²M_º¿j2S%Ʉÿä9¯Ì,àÀ>pÃGŸÖ25Z•)p°·äÆ’_d°¥:lÝÆ@r£mf«½,©ÐV¦Id/š î•vY3´ö° †"ábÂzd”\ˆjÌ™6Ï<ëܦJ‹ pbl h)Ë‘äPkSxÄÙX‡ò£R‡„”Y{ã›ÞÜ;ê¸SjäbÓ¦¡“*Z¡AÇ'}z x(Ö+OH6Bö&œØ7ZLèø‰»?ÓF~qØ_Ó¤×tö†C!¨)ÉÐ>.#­>èiH ;i;§1Õt>6"¤¾ô€6ý³ ežc /ˆ=!i›ömî?y[Œ\ÚMȯW¡ Ê R¸øþë?4Õ%±m¤ §cû´è Y„X-i$ÕGÝN uµ•¨?°;×üõ…O[a–·DmÌiøY¾¦aB®úÒX¯´ÙffÝWÍ4|,œ8£6 ñËåàý¹â # ó¤EJ™ù…ÊiâX,Ÿ˜¶N²Û»î±O5Í DÉÔfJ“™¥!E6¶AmòœœKaÓ¦¾p< êÛ~úhoõš‹†î,"B~qÌšù…§• “oÍÐvBPfûùÏ/xÔ’+­iÄÒ^'„óÊœ™¯ýÒz 36cãxLÛ‰ó(ò¨®iA~IÿåQd4Û߬É/¸N#5+Æ•áf÷®—¼ôe%«v@%¡e´¯3[+C‹ a,ˆ`²6wˆ—ÙÒ:ªÝvǧÊð†ŒŒUŨ´8gò‹„{·Ém¦cK$=ïy/(3BÊ‘¬˜i#¤µÑ6™­Å\3…Éþ*ì ¡Ûž™3)ÁB#´'¾ä%/{â`žîÉΉü"I¤\ç}P:u¹!† ™Î´xy›åc[i[ÉQ5iE¸¤#Ž]»ý0‹K¶o—B¥y©*;°Ï†z!çñÕ3C~)^`Kÿ¡`¥é“_"¤¤–'Ø%¿L²væúÂãô'ÊÂÌyŸüb/Ráµf˜ÖLÍk6‚ú_,†€“ñÿ›ÖùE°n¡ÉÙ˜ØL„´Æ88‡G?G([EèKë•ü"¼+ÊÜ9P‹i“4ŠÏtÊtáeÃó”Ê»“_ FÒÇ»§&skb›B&œL‰v~`±Àb÷tE‚xÕ^§a•àT Þ?SÖÓ´+ôfV|Â&E~q%4=o¡`¤£Ì•—õ@Õ\ÖØñ›ÜäiMÕ¥L~ñ5Lûö×ékÙ÷„DvFJÑ7;ò‹sª<.sdö´Êô™·µÞ×3‚ü"#Å)•/Y&õ)j‘²o™ü2K̬àÙÃ0l[È/¥ºTpêw”C÷§ÊuGùúz#¿5Ò3g¦àù™¼^59ýo!¿8™¢Œ¸tŠÆGR£2‡¥±é *š„üâôðŒ&¿8¦%ô*û÷Œ!¿;aHV ²Kœ«Y¼äX2a¤–¡Ð$!`y`Öe}ʼڙ8œ¼wÆŽª™Ù%XYÌJ˜_`ódn¾ùæâ)î¢Oüáþa%J>D…³Y‘_2ýÇ…ª Ûàïÿþï+݆¿ýÛ¿­Â ç$É0ò6yò FmB À¤)5ì:á¸7òøBqF5Û:õP€Ãó’½ùÅÏ$7 ùÅMe0JßböŠÁÀT§Ô ¬ ÁéçÎ!ñëg †Þ„­À¤ƒ‚Я÷É/œ2m ˆ‚9†m€Žä<è>ÛL¶pÞÉ/šK3 n B-@ba’¾&4MdnHðxã¸!„s(NyIJZ¥³šs(Ú†ú#H*¬‘Œ¿‘nqj‘µ(?ÛzF¼o.Ä”'ryQÁ¡( 7äî»ï®ëÏAw:7Ä!™):V¢dÆÁ¸;ÚÆÍŠ).eò‹c˜ÜÌsUNœ7ò‹C¬=€Ö›u’ ò/á†Ð`¦Nx(È®¥%…øÀç>ßûí¯ôäé=ðù‡z|é+½OÿÆgÊCXTs§i݈ü’!Äc£ýdî’Ô¶Ò¼‰ ¢Ã·ß+˜,¹Œåj”–`6oÛ Â0I©ÁpCœèã`B~¡¡=÷jQàoøè­SÈår:ï¢+ÊuyxžÙ;fÕ)•übÔMĪφü"ÈXäLñÿwÎäùk3±öÒÙÈxßå†Ðà‚Ø:÷|Ýx˱lPÌQ‡TYV|%dÀMéªêuè‘¥-ã!+zoÜ~‡u /„ñª4ÉtYÊœÉ/Jêö/B.9à°ÒŒsÙÐÒ:/kÙˆogE~qÞ~ –3œ(‘ÌÂ2?ë“÷~®âlÒ·<-¿3%CS€’ •Ð3ý’xs ð´_ÖqS”•ÑÛ¼ò× Ê9ŠmgL~ÁÏ/vÇÛdø¾%æ\}Á%ŠÂÉð¤4 Y€==Zæeav€t @}wúK3Ù•Õt ¸L¨‡qLñ®-ó>ý²¯ÓæŒÉ/¢Ž 9ñ¨PÍBßkï…sGõ¤„H¿ò8¯ÁË…j}¾MÈ ,3GKOX¸Ÿ€›b²íg«*/Ä^úªW&¿X¯¶ûºrÄDäH¸½ÑÓ‰‰f0ŠIhœ sdо¦ÍxUÚŒÐV4šY„„Î<ÌH à&Ze¾®p)30Å^jí.?èð¡kSÐÀOX—‘_œÎ,î¹çžj]Vǹaƒ§EúºáÉÛp"ÂÒ&áÚ× ˆZAÈàcÁÕhŠ&í“¡-5|lAYïkÍÚrl5'vÎÐaELXìË9Ž%¿8+Þu×]5Vub¾Æ£¶½k)ÒåBRÅ¡d®]&DpDѪ5›æíÂ;BßcÝÌVA³„ï²|DD„ƒÿè:ýÜ {Ï+x¾auN[ \ÓÏHò‹mó•ã±³ èô¾Ûî z×ÞpSÝÜmò͉lì‡Ö_›©u_Õ,'Ä|}OÈLBã`ì“̲1.¨¯¼o:n7Õ(éÂË ¾ !v1[Õ²¡“_äG™h<*'n^÷ÚgQå…Ø²÷ ץᖺù9­1OZ¨7Í>X…´9¦ÉÌeúE@üóµý•6œFñB"8³ Ѧú˳4æ;¿ñNÌT0@@åðéƒQö]\ºGL^h°Í ¹º’^üÞM¹2“ÇÖá¡$Tül',Âg€ Moãïó»0|>ä°±˜;)•äV°OB2ÑÚaŠ„FýÝ#¿\rÅ{ë »)O:´ú¬ÈÂ2 )šãhÜ,K³Í+¾¯cò¬€à±Š°€¼¾·LGDe®”¥°;”üâ¤-*.€ªÂ™üâh³kY“ç\ÐNžrÖ5>ˆ×ÞÁ»†”MãÖk ëÕ>ËA52[ëO x`)„ÍׄCa5 RÌÊòl%#'¿å¼„$`¸!6[Y²7¿ù-½ãO9§ D‹ŽJ¼ 'â•û§94ÑŒí‚Vôæn…™4¡9,šúÞ×¼ñŽš-&¤£—ƒ„¥6’ü¢^aMŠr¸ã˜)vô2~È¡+Ž«š‚am{^£OØñºP¦†e2,Yº¬ÄÄo/¾^X­`¡¦¿Çÿ¾Ù¿çüHÄù¤ø’îcë›:1èøßÎöÄy%¿8m ŸÒy6O¶Ó™¹\ch÷¢Ò<ï“_˜…žI†žbf”ÏöæGý Ù‡™¥^¹^ôe?\¯äU$@ëS(ÔO–Sš+ñÅÍ ãT,Á·Wikpƒ’_8$YgO¯a6eOŸæg²^yd5 ™ˆŒµÙ¤&¿ÖA;ä—T—õ¶šqæÌ°èØ>k“'¿Ð¥# ÁG•çM?³Ç‚·¨µÐšÔ…e@ØÍŽüD!9m­E«ö[‰2ë[%Jäât¿Ù“_ ¨Ò˜Á×Nr¤¼ç3Žüâ7çÔme*úÚ•5úãr^}¢„k+fƒTžþ73F.ú§[È/[È/oÜ|> 2ű¬.)ÌÇ‹#ù¡Í= @{a`d9p?£É/É08—†ážÉˆFùýKlüDÁÂn|ÇSŠ@gÀã ÔÃXO“5”L~‘¾ tI0ò2$nö“_”åá@»E@R)ŠJ”¸–(SQ–ØìÈ/€ÀR™2ñ€Â5#2_`4¬vº `zX‚žª¨-´%9Ù ­ïb9ÑÉ£¶¶‰÷IS'àÒ9 § ÿP~…Â,€Ç#í¹yX P `¬¤—ðCa°äKØ«¿lòäÂ*â‚«As;™óá,ˆì‚ôÀ=a•îiK\+@gºa¶otò‹µD iÊLS…¨Ìp(G&`'çCOg ň_xÕ t.e²ò¼&¸Ü¯Wæ½ÞÉ/YÌI2ABA5ƒÄ¸tÚ6{Ç©îÀåÍË~ºH1RfAþ…ÂßyXB€Å¤ujíòÐÆz™ü"·2âÆ•üs‚uÂ{ ieìo™æt!=BNÎHjÃiÄaÛ«,  *÷+5ÊBœfÒÕi^È/LÎ0ŒâL(]ï°Ûå†À‚f ‰ã=*S’d ¼R'ÙÈ/j/J^ýÞñÌÿ⬟ül^&¿8ÄZ<å0nH`Û1Q §4ÁÝ}÷=J÷û%½»ïùtïáGë}ösõ,$˜¯>ñ»eöÖƒõ!Ð`¦¾²Û:.…¥”'ÒÑI‹6ç…übóf*øYÓ¹!yªévúRÃÄ–î„G­ì½ûê²® Úã#žý¡>"kÍÅ滛#=±‘_Þ´}Õ¢}QÌ+ôSU©êF‰‰Ú;9,÷àïlkZæ”tÊøñfØ Í샲o¨ƒ<©ýÎvô`w´F¸!•üR`Û—½ëêRE¾·ßI»¡)ïª5Ð4¥<Uhev…!uN½´¦öŠ9â\ÚKæ^Å:dX"Ò)L·ŠŸyh‹.uxˆ Þö€aÇsv¹!ÌÔz ³ÀÔ‰Û>qo““.»PªÊ2½™ƒÜ˜hc5Ê0†R™^°÷â¢Ñç×A0ƒZVÖ)Â0¡û‚ ›ˆüâÐ j–™1ÓºÑOÅ¢GµªÏi½Yë•P^Óò;Ô‰ ”C/äYãh¬ÁÌï[ó}ð±mxÑÊêœjGüCWŒ„‚J¯L4ùfGdc_䵺ë¸k.zgÝÜmòö¿ ð˪°‚i5£Ië‘™Æ< “†·^Ó7û^TäýÇçdoêu’f#É/Ayˆn¡¬Á™BØ­ÜW”vÂi>‹Ñ`ÔwÕNØPV¡¦#}fùÀì2šY‹]Q‘[ÿúZ@XBú”3Öô~©¥†Õ;aœP˜îPò‹sš•…lÝáD¡Nà…\um› B  #_‡õcÝuói ¤kß$¤õg/¤ÁFÚ^Õi# ¢9[ t´Ö#áŒsßÑ{íë^?hÏÒ°’†’_¤xS¶S^s–Qì»dYÙ뮯§ ‚iŒ¯‘^@°ÁË`è¢Qk” -1EZâ„ÒFÜ´Yx<0³ö3½Ÿ­.§–½÷Y8²r-˜q¯#'¿ÈÅ0Ó:K²ØxÆjt¿¨‹á¥!«pAÜ ÞÏÝL÷s7mZ¡ŸÄÃÖù™¿±wú ÑÐôñ6þ>¿óÞK®¸ºwÐÁ‡Œ-Ï;güÂ3iwÁ [¼Œ’É/’H{OxqSuT1-¯€‚ÖAÛ´—3§°êg÷÷Aš´Õ„-Àœcú¼ofu…ŽÅ˜8³ÿ²Æ ©=khLÚÇTt=ûuIJéK:?&UçJHœD ¡Þ¾KŠrQ5%‘K¡dÀ/æ·Ÿ)„iáOHûªm&_ˆðÄ7RÛíÕäÛ,k¿5c ¸¾ÍãiÌu(ùE|*oêx%·ˆ%“ 3¤œÄ·óE[/øPð«¼_wˆ„µÆ¹ˆECÛµÿ á˜8ÇÔH¤ ©Î¥5›m‰`„ ‹Ïëû®ûHÍ팢RH¨…ŽiêÖ²Ÿ<Šsš$°S‡”‡¼ŽmƒÃîi#‡ßÐ;âè6ƒŽÇ#P<„íj. Ÿb˜2! £™pk™³WGåAÐj ÜþTtà’ÄqÐ2I~ ˆ7©¿Œ¶ ùEfmß%Ë«ÛÏL[S¤’ ¶B¶(¦5|·=dTUÖe›Ýc0Jƒe'̘ kÖú•e8팳GžF.O~õˆêÕ4Ø7 &7* hò˲"”M;„ÂÐ(Á˜iöAÂÓ¶µ ƒNHŽ$Ô`Î AÈàÏù¢¥v5®4¡ß\–Ê S¥5KJæB:1ùÅ1KöZ˜”ÎGò¢>@Ô¿×¢¥õ°› míÙàí é{Úõ0hÑ&$JëO!i5Ôàœ`✘ê0ЯėÓŸbû›xò‹@ÝAÔôBY±Êì)6/tBØöÛ÷)Ä4ZÃ._;¥Ñ'âM9 [‰L€-&S_Zœ{¥OŸúÒˆÞíêòvØað<­4S˜5ù…§U^³d®9ïPëéí³ïÒbž‡M ÙÆ›°™j“™8¨˜ªÀ€BAZgaÙY뎶y°?¤èü‹Þ1t-Špä}çD~±gªA¦µ“ìvòKùzß%¥Kv9жîQõÊ„PkÑSñ4!?Zjm´Mk«A{„Ì$&šä„>øá %¿ÀˆnæL~‘ “='œ+­ä<ÙþK_öòÞ>û1×Öõ!’·Éøð°#d¶^VpžVWÈ›n½³?`aÃQÎüž9‘_4ÇSž*Ñ â‹}Õ%RY˜Œ-=qÐT‹ÌÖ Ç’W• !Rô’ù=Ö[x!É(X§×^÷¡±ìÐÞŽ«5'ò‹bhÖ¥Ð/³{ ðþÿë/A—׎+Ö"Ï›XbYB&Ø&dæª'›Ïvh¿P(ô£Â79X±´²Åœ'¿Ø/•ÇíA0çµT™B~yE!¿txãh9F‹œŽ“M:ydH-Ú ï¼çþÞõº©P)F7Kˆàé€O“*os"¿€¢dÒ§W˜hQ˜å©v³ÛZʼªL~9ð#z§U¦0•Y®g—h–#•¾!ï)³ÖÅ¢µÙByEã}m)ÄN:Ö† üƒ,À¼_ò=!¾xjiq8jê‹›ùÉŸüµxó–BòT§<ð CÊÁWçÁm«eÌv,‡E&ÞÈ/( ‚ékŽrþ|6¿wé&:oäëΓ³'©=ØFÔ gb^³fúß()Šp#ÓÈ/?(e÷™7Ìœšf¸K‰l~pŸ`=@xÇ0BsãNá@óó!È NÜ@ˆ7<*«Zïä-|á”=Ê¡š†‡åE'}SÃø*XÂáWÈf‹pº°ñopòKºÿ…ü¢œà-®ÉZ ;OðO›{&¿@SRBõ°xt4 ¦`—I0êcë4‰-¦ù$Ïê¦xZáï‹bOuÖï¼gœ‘cêÐÎrD²±.ºIO~IuIÍÐ ì­WÒz¦9‰p ´7+ò‹@‚©I†uµÊ;2?ø]kœ`Ú›-ù…q&¥Uû›D-sXi¢òŒ!¿Øj„†ŽHbOˆŽ-ä—Y޳Y¯ Ÿé^‚è­Êµ_¹Ö”u¸eòË$ûÝlß3ñ>9É?ØB~y¦O~ ùÂY ²! ßì‘Ïò‹ºŠì‚² ⋘Æ\è&·»ÙN~ÆweÔàa”`þàþ ÷•¯|¥‚ÿdê]›ù…æÔR¤3•iI{¿ÿû¿ßû×ý× ºÿçþçú;‘PüJP­ËŠg5ê éFa^m9_=$ÏjŸ,^s—rPýÄ•óž,ª4PôíÐ:… ªê`>­©Ž)êzýþ÷¿¿«¥IMQ̪ìæ£>ºQÉ/ž*§ ½zðÁ+“?B‰!¸‡_ïý‡ø‡u„|ê©§ê{RèÏZ·þMBK»6ù>†æ&MÁÃÒ 0IÞ4}š,Ò·ÃÃø—ù—u„d¾>W TŠÃ…Ãë2{Ö! !%ÊüyçõF~AlaBƒñÏ ãän+`ŽÞ#Mnˆ³báJBzuY—ßøÆ7ê©DbJå,åAY¹Ç1РMžÙÚ•cš×É/!¿à›¹!¶€Ì ! áÖÁÄ¢N$ÀhkËÇ ‡Ýò‹¡º‹T Á-Y|ÍRñp啿üBƒ<scž<¡‹£ˆà sŽÜu7˜¥½;>qWï7úb½þÛo­÷Ô}§÷H)&y©`g0 á Iæ^Ö. .V¢,u2çÉ/Ö™u÷ªºuÓM7=mnˆS}—RGÛL¬É/•¾ùöZ„Å»òêYtºèÒÒ˜ó¢ËJ9aE­\»i¿TÏ%ËnÛ7$D4¹#_KQÎ ùb<”³áâ»Ä—Ì,`Žžî¢B~9gÍÅý΂`*@HMÈ»*Ü,Ð3•.ZÀ§£W•±Ç‡Ù{Ýë·íysÀ΀¢n_.BJ¨ÁÍ™üb´÷Ù>ûÙÏÖ¸3Bf8QMeH%®:©÷‰»[ßV•cå8BªE*Ó$Œ!U¸©ÔNHà _+äî¹Ï’ÚÂ1õOZ”EH»¨næ^ tΓ_„ffщL¸qky²ÍÑ(äœñe}À=dGæ(™”:ôF“ ²ªÏ]„Tz PЇÞÚ§u_ø¢¯3õE&z##‹uÙk­a™Ár@ÿn7êéŸ' ÊT"·ˆ©ßFN‹^…dh€´!ãEu³¾êÚ*‚#-úÕÀè I‹M³¾€˜T§i“&Ó„zñ²CzÏ.%Ž_ Æ¦·§ùÌÞHX<°qÔq'-òBƒ¨¨%¿¨0ÓŽ‰†Uã-šFxù{®­pNMhCðµ-"äkÀéŒ ÏšaEÖcÀÌ•°Ù#9¡ ¢ O@ˆg¨ãN:£÷¢¿d ÉÒ¦û%äPò »v„²é ×âEýA´M9îì[N—¿çºÊï `fƒ„â•Vi V§‘_«ÀzÎ xÐÓ0 À e ’ t´EAgWÀSÃÌ^Ð{C!vZ—P`h#É/ÎkN„LÀÍÖ]Jo"Šý ù…wÄKæ)9‘pBlòø"õsSݛЭ¯²Ë÷Š2A8öôe&¨½3ØØL5¦—úÛwÞuèži‡°¤(h(ùʼnÛÁØžãD‘Á(t † EñO­« çëqDêrÃ6ý6æêåëü½ï}F¢¤ýüªÊ;ñà|®¨(“×2̾û-*¤¸ÖvbJ~±Ï8yK#ò¨Ö ,šã *‚dÓ¥¥°›uDôš©I4Ðnǧ5ÕÄ2F*(h2ÛN¦8<<ÖA`W{XWW÷Šá3Žüâ´â^‡N~ ùEVMòˆ€Ò4˜‘;ï²[}¶O¹ @i3°¬¥PxCãm›yûÚ2˜q؉w ü+†Ô–æÓÖ~(‰Æn%Ë0l!]2’übŸ” Ô±…Ú3ÞF\Nå­;¾­w\°µã_SHö9‚µþç…ÐYö™<‘½—$€ý4múx3;„ÐíÜyW´ /Îk{}w¡úoóŠÁÜæÎYZ÷‘ä ²p™ü_‡áƒrp!R7}ã`e¿ËDÐçç9¦}?G² ¯S ˜¶(‰ ŒÌéÊ~ìõвuÑÐ0MZ“,n"ò‹C² \NH.ƒ£ìi/ZÌq‹ø2o˜WB:_F0B†sF`{k-ט>-и§wÎêóGvÿÈ×òiªPòE[Õ½ä8h3e’öÊ´éW¤œ°Ë Ù~‡·Ö0Œæ2M"s ¬OB ɲ™sLL•÷dv™“GPf›€>Mì«„ à—æo¼õ“•'6L‹4œãàÄä©y u¥5i@É_Üt=Zº¼$‘‹ ¡I4Ê’Q6„Øaf áÅ›Îyò º„ÚDR÷Â&@9–Xr1u2hKgð¼öF±¬­#qkH¢6øð"Û4à–*!¬¯¯ùÀ‡êƒ& óµµÑâœÈ/éí(ç~fïÕ©!²øÅbRx[Þ†‹]Oa© Ñ\4)|C|isïZ `=Þ]N*«×\4r8Á%ªÒZÕZœõäyV!ž–‰2õ‰0|Ä.îÝÓýõW½¦ztz8­£8§ iÒ>IHû =°²bï¨P—>ÜÛ£dÆÅ¦"fÌÂä æL~ñ!R!Ö¡5É/Ý©ôÓ÷¯Ÿø‰ß{õk_ß“—=ýìó‹ ïè9&©h¹¬GBÞvç½Õ,Ï:{ua²¾mbv‚šˆ³­å¼_bVÚêÁrmÂçâ_Zp®o/Ô}£NÕ)w/3,³áî‡M!¥Må ›¾½Û{}N±¶½_‡bëÀH&Q«žªBf„ÌudÆ8“õ{Ñ9žy#¿Ðš,AÂ&çKSžuC`~@!èž©€ .l H!hp¨ò£ŽS^ýí_ÿõ_¯#¤ï^|¶|’˜V:”ùnpò MXOØ<¡'ñ–r?Hšã¶±ÀN4á¨ÿÃþp!ÿôOÿ´~†“¿ì[ ú½¯üœÙvƒ_˜²Ô–º¥õ5âAÐX÷¤A@§ ?ûüç?ÿ4–žß©d«¢AH«ý;„3ukÖÿ$¨»^È/ÖL·«v¸!È0h´ ³s3ÌÐ s,Lz:ËÇÀ"ë1mãd 4xEžWæ·Výo[ŽŸÏ+ù…cajÖž¯i'T$`—"«]£”ºæ^{í]{²î¶ûž½Ååˆó…/~©÷ß~ ùåÛ½¿ûÁ*-Ê{ ™ò èHqIíEå¨&j²¶9"ëÕ0íy#¿@O¢L¤Ã}WƒÝÙ=pϽ–2Áñ½kJOÖ÷¾ÿC½ßTˆ•ŠqÃ¡Ãæ*â•×ÖÂ쥗½»´”Ú·¤_ÒŸú‚”îjê.B@—2…‡Áüi’i{ sžüBƒÌ…³š ABfv'*mO@°íó kç¶;ï«Zg,©`&µFÔá†\QÁƒª_K–R&¿l_òF¿Öo§DHÈÌ IB9I29_Éî9M~ x‰ŠžÜ{¸!ÁÄî·ßâZÍúø'*2½ÐÕ Ãî rR16´ e=È<¨£WÞÛu…½­‹& (KçJë8¼nÉ×’hsšübýÑ"J¡¬ËîÁ,p¡N\rù{ªÖFA:z‚€2UBêíJ‹Jë ³„TÇT¬U†wUã\´ä >ù…€Ì ò ²"Þžù…WsÂÁòh>,³{|øÂEûõ®/M-?ÿðW¦Z•Fl©Ãæ„I@XµÈÌ'ÂR©` t¯saÃé©X/\¼¼÷«Åt ç”´&Ï Ì;+ò‹“·› ¸DÀéB³{R%μæú•¯~³#Këa°–LšH{qkš¦áòVÕï ¹ü£z»í¹¨äi¦ 8¨Þ•²ÅŒÉ/Ì Ä%CŠh°KE@»ïsVãJ³h_ÃæÐhã‹|¡V“Óó\Å´“‰Z„rÑ ,žµÉt lú ò˨‚’®kJÿöOè1ï-YÁ©Üç…Vk/› ÍÙÌôþûï¯[†P.Û„ ™‚ißT `G ¬3<‘ôO:j¿kBfŽOwú ¤èޏÉ€‹—™übMŠ”œI3˜~"ò‹È&cÔ .½q$÷-Œ‚K§êýmt ‚½¡=Zt…!ÛŸëú#§GÈàaÓ n&ýlqtXmJ$‡‰È/€÷Þ{o%¡1W{`¢™P'ö*CxKuÿ`T!{ õH¦Ñnoó®¹ò¬L5|If˜ð!“m¸‘´:L›¼¯ËÄä¿0K„ÃÑ„Œ…`ûÐ#Ž®0Û-Úä}o‹HCè{¬ó$´÷r<œN††eF6|,íy ^/ÂòÀ ¨ƒ´IH12!ÑÞ'PÐøèY¼ŸðɦjáÒ MŠIðK¨Ö¦NìUxÈ—WÌ¸í ¡«îª‘Œ¨† -Òy°jÊ*Ü¡¯ü }s4'UàaFÜ´Î÷'Õïf½5ŠÇ=ü¨z?UªÍÓuïPÕLv"ò Gãžvœ -zRbE<­ËÞ}M¥>Ð hg®b˜pÖ)óÜ%¨ €ö€†„Š„áQÛ0±“úܦì ^Y´ù [ýâ@mZ—•‘ä¾7h"ÍæãC¨ôºçU¡úmæ ò?@¤ ®‚o²M•x° )ÂaŽL1㦠›9!ë” €N4èçðÊÙ½7m?  ÁúÈ0’üBÝQ"1) è¼W'8ì[øË,Kü™~Êáz^Æ,1_3ÔÈvBë¡.EsÖ[ ‚ÈJÚ¦ÁôP§IÎj—Ý õ²øÍ!‡’_ ‘.T͈):øZÐføœsþå¿ ‰œñоwc4àhÐÏܰâò^ÛGÚ…û>Ÿá¨yè(˜çD0ü“@ØvKsæÌV7’ü"Œ£I‰¥¤-B›é/(„´  Õ$äir$ùE>E‚W6.©‹ÌïÚ¥O¬ĬaGâëî÷~Ú„­Âß ©¥xø mdÕõ²f3ÚÆºohçrž-_ãˆíºÛî#Ð,o,ùE>öœÉfòK>Û—8ñÈ)ïG OÂÄëgö:Zkñg#Âxó$PÆÛÊëòÆ~n¯å´¬kÞ;^ÜëW½¿”åG“_l/N%BÔ‘äÚÚi‡ÁT ( }õ¦²tر}S ;t]Bs,ðè™aÇø¹uf?µ_&P$› ó´ë÷a=_ÓðeW¾¯÷Óê6:±5vòKÈ/ïò‹¤ô†yÖ[—¦”,ó#,,ˆÈ©ñn¶æ\©L  XÀH‚4eYM4O:åô‘ cbò‹l!Å­¢|WFïðÖ·Õu("IlIk‚é0Ë…i„Ì( ʺJ(h;±w:ÅR”DàÐ(l;Ο4ëÁvØÌš•È‚»_Ô¾©eqÿ¨Uj 牔ÏÒZM"Y,H@&Ðm ´ÿ‡U! Æ4i2&ÚåjÅAÙ xÉLLc’L5” oBæl*Ø÷B[§W¼û}OëÃÞÅßJ}„`.é¸U€T÷…,B¬–ê“ ãlxWÙr™9ëR‡=¡t>zËŽ…üRX>ëÎ A#l‹˜mèºa¶‚fó”mÑýýCu¨L„äŒ2^#=D>öñ»‹3îUmüBÏ“_8BŸ§wU2ÜÉn›”Í\i™fË d€ö‚û*§ã,MfÐɘ,ó펶iG¶/àý…C)L l¼iê03&¿¨ ëA“4(»M@LÝó‹y/^Öúsð®Â³ÚÌ4ãáå÷ªº2Õ7Í6"'DÈĸésÇo: H~‡Ç—&¥Ea¨ãÕ”©> Dw„ñŠ0ixT‡gÚTg´&­×hýY¥gÎâ’¶/ò¸‚lZõu›BØÆ‡'ªáxB´[O‚/÷GÛ 0ÙNxè+%½rçHò‹{ÆÑ¢““]À:¥Ý‚GúœfR—”ûw=}ªYW$±h2³{h0“éÓùèÅ/~iÑè!e ž\IO„d¦ÌUäÂ\CexMk®yÔF1$°˜£ú’û¶'JE:çΙü¢l¦ÎT…Kê)„ü’Áí×Ò¢Ñ#WžÔOJÑ !ÞN,O&¶(G¶ýñþáº5EùrïÜóί=xFmú–œï/Éû{¿(§hñŒ•òÃR²~JUY€kDâ¶ÿ8o¦#.ôa¶ n·/Y#Û½i‡Þáe0nš ²Ù7Ô+QLB¸Œ>f²×¼ÿƒ½wÙu"<»õÇLçL~Q'=¤Q¦'%&¤=voË!»yÑŸ,&ÿ†mßX¡Ó;óÜÂÕºP?ëk§ ŒVÚüħ>Óûà·Õuwîê z;öܤøu¾ƒiRöpΓ_$kůB:š´D¤qNoÎÕ½ÙÿR4þ²2– uß1IúÄëîå ÎyýÌÏŒ†qOœÏpâMmþóB~!ˆ£‹Ú½ WÂhŸqRMÌå}–ÐÍ:´}Ì;ùEæÀÖ"£.k`ñ¯¯a(ƒ„%Á²$ÙÖ;ùE9@Aý·08-û[¾A2Í~¸AÈ/™üB`… çMÎhÜNò{óÐb%Ò"™„—…üÂ|mÊÒ$ÖëL(M° ¹Ð‰™#S¬ÍTŠs}qa D6 ò‹ý‹såqÝ(¯l‹Rv“KÊÆž±6¼§PÍÁ³oräOžÓ+ô&pRT»$ƒaU±'™üR¢®[gŠdžr¹¬Eˆ§ÜpÖx–©qD"%?‰F……LŽëÏ8ÛÁ¤÷»ä‡sk0Èg§„“OÌTÀþ¡y68П¡§8Ö~Ös¥-ÉhÁ=h¯UzZÄžk‚DZŸ1“_¶_Úœ¬-ä—Ù.«Y9žIÿYIJo¥È[bL$—-ä¤FeËCÙô¸Z[È/eìN~ E`ˆjÝòHïÐzycy§ñ¬“Θt¹<-[7“?,àûå?åýQÒÉž'%!h¥F—À4_ ùÅ« =|PÆex?x)pp*iÝ8U*FZ¦p›7L0PœÉ-¢iO\þÇ Ý±Kæš á%“_|-+½©¾â÷^x)Žˆ¾ÎÈN3û~ÑÔ¨‡çÿx˜j .¶¾¥¤‰½kÑÞÖÅC>™ ,Â8¡:P­Ñ’6p¾(Þ!föŸøDºDÕ ñ{ßû^óOÿôO½'Ÿ|²šµ°Ïgntò J¼Rv—|¦ Ý}U§aÔÓýF–PÀOh†ÕÃAa2J#—a)„ "½l4ò‹uçI39‰gÚ£ó ¹dˆIXuw¯@úÓY>ÿøÿX?CŒëhEPNi£_üSÎr‹yºa‡1}f#W`2$€$Ô –*“u+˜wzÉGëcÚ`ä—LJ‚  6sCxÆ€~ —†ða÷ì™Aãi]sý“?ù“šK• Lg5N‡Ð’ßÅ:Ö+ù¥Ë œÈh›.7Äqªâa˺‹€8r·.G,V€m×ò÷~ï÷êÑ‹í—.Ûˆ…ÒÁ‘82cn|¿^È/„äTh1„ÎL~ è—3»‡yº‘Ý÷XP“Ë öZÔ;à C{ŸüÔ½eòË•üòOe¶ îý´˜â’º‹³©$´D!9#hHëU0AóóF~Qq¶)Ü.ŸÇ à°‚ ‹FYŽ8jeïÊ÷~ ”ê>Yk Êjÿ¼ñöR)ÆjϬz·|üÎÞõ7|¨š¦ôf&¿ØE=).©½ÈÊ I—ØKýÿy™üË)FHN¦;y)£m š± λà½{§  j® EQ›T¾¬e"ä&›Æ´ ^ŽV! •8žÀ¯yÓLšàp¢MB>’Ù(nóŠ_h²<°=S$d{“½WP*aaJ¦-! ™4ád†]7Ø_"¿À¡fl†H&fìM¼l8•’ÓaªFÈ`cÓ7Ä4ؽL¥Ø{ÑÒÕ2æ!'šüB@©ŒL_JÀÍÖ—ö*×ÙeH bAYù>Ýêƒp´g6-†E;öGдht”æâlZ«ÿ•S¶6fé‡ müÇaZjcÉ/âAô%é‹î`”îqiá¢}Ë´Á2˜¶n7ÔõE£LÐ×íŠQ[ôóÈToóß®ÎÉCáXw4Ø4·ªÏÕÊÜ;ÔŠ´?¬˜³}szµÚþ© íÐ0–üÂ;‰Qåbh’ùæDŸÁ(ˆÙ™çAÈ ÿàiˆ×dÊM»­k5:¯„„œÌä šŒ`„ãˆ@Ö\Öe>4o?}Õ«òjúe¯´OD~!¤Ô†¬Ye›;QLê.Î9ÿ²º¦À­½BC†ËÛJX—pÍ+¡E=A!ƒŠ†]Çñ„nA0Wäã33äà" ?ßmÁíŠDZ‘“_¸`Á¸HGÌ …L˜{!ímœ8RŠHéŒZ$¼¯Ã<÷7Þ§ã{¿Ïg°XÖƒòsÂû™ÐÏÿ ø‚½ à "äXò‹t"“åU3…>D“„ð©<õð¨¬1_‡¾K+ö¾6kUßP©K¸^^yq¯„ÛNo*$ ë³ÌÆ’_xWæ hÏD (ÍàDþ¶vîR\;óÌį!¼dŒ›ý-´ÁlöL9o¹œ#˜­§¡(o«k¹ñŸÛx+¯œÛ6Û¼b$Vȹ’™ˆü"Uz¯î¯¦nˆÄ2oé ` -øºÃø`ÓCðd¾n’‚ûg(öP2ã@· hßd†/½â½5.x’=+š˜ü"0àQ (‘”¹!ûì[:4”5h ˆ+„ÏFÏ=ªj1Û­7§sCõ´é,>êD£ ·Y¼0½—æ ÌœO<ù´±ˆ/&+¬ó ¤MFN~Q€q–” ÊìÐù”·ºÄ‡ÚŽª›y„´i Ï\¾¶Fã!m1 SæÔ8_2Xt>A '&nó|n+BÞRx)ƒ§F³xAÄôDä‰\)AzÈ/>) ‹ QÚÔ—Cûøs?o³éJK©²d—ÐOœ+ˆgšái…ÊDPƒØ·qG­ßiùeT;r‚Ó0Õ_ îg4ùE˚䩨?äO îÍoÙ±ôæ8pY!ã€2…§µv§¾4r÷}Uƒ­GHTähFجOšÎ‰æ–ÛïémW°­£Ö"+sî%¤€ÝÚÔFµVR£/¶ûc1 oÊéØFD>âVè`W—b J&¿dm¦•E3Uº_Omä6w)Ha^Æ9†®äpÁœMص£m¢Õ3Ëì‚Q DÅ EgD~`÷8r…Ù“ì6VAÈ/¢ð¨®x9%k‘³±Û¬Ìg¢¡í£‘Ò2í¥±{2Ýòý» g’V†iQê#ýºfL~áxhR@@H€ÀÌîY¤wÕ+‹38¨Œ2µE0WÎÆ¦ú:rZ±Þ¤%i’¥=‚f;i\­Gª§½õö»Šõ¼l¨€r²–ÓœÈ/êR™L¯ÊD‹0^^6è#Ž.ƒª§!dÔbHØ¡0q<™¥žö5-?ûßëztÙJ¤K>ø‘•$ñ6C”ò°‡;$+<Ñ¢x•*Ja×ûäZ•4‚+çˆ&¹É¹¼GÆ–ÁD7(ùEÀ~bâ…ç"ĸ¿õù€LbÔF~±fGm$D˜œ“}—SóµP7WÓ°˜©Æ´É/?([Éü´#Ný½³¶.ú“nÄÍ9ÚGUx™­¦87 FiFúÐ ú%Êl.§{ŸMÞ9ÖÚ¶9¬v“™ü"ú`RÓ·Q‘˜×¶®bkò€\]ò áÒŽCðá1QÛG9-mä—ô] ‹£pÓ ¥Iå¢i5ü⸴Y_ «˜#á2í%]Dû½`§È/ϘÉ/ÖðòËòKob„õ ˜öœþx8 ù¥¬QQŒ,ƒlÃòK7Œ³šya ú€Cx<á—ŒšHH¡ENÈA;ƒi‡‘_|ÁÅ2ùEôŒ!¿ LDÉíJ}ç;Â%!÷»I’_ ¢ºäH®L~A~" *„ Êïöþ–” Cqläq(l¹s%L,¡°yàaAHáhMÉÁÏï¾ûîZ_IY¼ ›àw÷w«€Ì×+¼9Áe"’PsZ1¯¶”-¶žtN´ Ëúڥē?H7œÝ¸ve ¸Z†¥"ýá÷„d¢ò¤Nø3ÿ÷ßÜÿsÁ£KhÊÉßYu£L~q4Ê踩°Ì94A7†AœJ\­ËïžõhR-žýú׿¾ÎX €{M޼OÆ^VΚe,ÆçŠsÕœ;‹£úQyø‹Æit¤&iÐhè˜ãŒGœnGX4“™Ö”£R‚qX )q;¸ÌãšøÒ¥MàlÁôy„tŽ”uØ “_¬­°é¾øÅ/öë—´(Dc0¶ƒæê¢HüÎçüÝßýÝ:BZ›´&—£R%Ó`ix¿‡²ÁÈ/nÈÀÁsFì’_ÒЉ^N&½šiÐÍ»üŽ©cÜu5iôT†½KyØ7!­089Ÿ-¯´ÞÉ/¶f ›ÎDÙîrC*èwj´uµÛî0{öv-ãÄ<ø°ÞŸûÍÞ·žúv³!è~ô£Š’¦qÚ'Ó:NvÀ÷L_Š…Oày“æüÂÓiÖnˆõ'/c­vgp¯jZyü)½ËK\YàŽR]nóBn¯•-ý±_L…¹õöOö~û«Oôn¾ùcµÐ ФœA¥Òº£;å¢Kß[x%§×NÀ´F{).…"däyW8‚Ò=ÌËäkÑ~²ÍÑÄ‹f šürl©f}âîûk}QÝ1e9…Uå:Bº”ÔárTŸ¡* ƒd>éôóËT‰=‹6ŸWo<Õh²Ë Q2NÀ:—n‘Í›ùE$cË’ÀzõäºÓ—hÐä—K¯¸ªŒÕøb-¢¶–ýW`C + ˆt2}ì`ÑÕ2×vá^S!ŸQ/xá‹k.–€Ñâ°>?R¡,`Æ“_„gLhÉ:”a ù%-ýU©.-ÍßÕ :ÇŽFi2Ä—îD&H+TÇQ‚W–B¬pÑ/Þõyýòà°qå'äŒÉ/„»ùæ›{öCÛ…0.ÌFŸuñ;ß]!da§£ M~å«_¯U:g¾4 3 «( B‹qCHà   BºöZ¸´öYשIÈÃ;„OD~±=p2B,$4Ùñn$ÓÍKê´Ö‚äÃ'hÁWÂ( ]fìýºbƒs+³ƒz2UX=€ ЀCB.. Ÿß¾ÛØ¡ó´(ì›xò –«= )›ÉtǼÕ}°´ï¿ñÖOÕÞå4ª³$4°Q¼«uÊádüT¸Zà0­Ö í1ÕŒ¸ Ú’f,\Ö{Þ ^8C)îm$ùE¼(NŒ€Ó„eHß²ž|ú9u¿s¥­7-q,„ O‹&c²„å€`ìlÉÀº`1Í(ŒÐ‚¢U}uì¶&ý’Óñl¢É/œ5Ø0$PfÚÆÛ,î½»läéjÝ%¿´­âóÑA8& £ðƒ‡™j ¶i+«3ý…°AZ#‚˜îS n/yéˇjSØ7ñä[†3`7\‹'M¨vø‘+û¼æ Ÿca ÐTî6š¡uê5s¶¼‡&™*j-fœF4SÀÁ@‰û.9`(üÌ^é>ùE ƒ³±áwçHö™æåÈtÚYçWïH°9>ä•Ð@‚¶ ÇŒœ¢MÂB€Ø#™)팃¡=¦I¯~æ5co¬Í=ªTËÚüç;ùÅqÆq ÎÕSÉ ^ð¬m©~­áØìwá„טoÓê=UÈ4r·zþ–i,ˆJ¦ ¶Ö°²mÖçãç´ÊÛ"þêÖÏh²ÏÄäI'¡›0.túî¡Wà ee ÷#CQã]¶ÑvƒckÝ:e[“N†2$$Áßz©¯ì¿¯aÞWö^ýÚ×RžZçØÉ/„t8E™HS‹Ú‘©’_JZBŠJ`ç8ÆG^S÷sH,kÎèÕz% .¡Ã® d´;!Íçd$Gú©ÓºÏõs#U±%Ö2ëy"ò‹#•¬šý1i Bʇî½p¿Šc%˜M<´#7âCxá5C=òµËfÏ´ãUÝt>#¡]@ÀX¸&>Ó{ýß=÷Þw b\rbò‹Tâ§>õ©z w¢§Aò` ö\X‚¡…äÂÄ"¨ ¶²îB[²Î¬×P$ uÊ2Ð*˜sëN¾ö@ņ,loâë‰È/NÿIøJ†Ý±û‚½êÚ ¥ úÊÌNƒ`¡Ɖ4!Ë8¨âQÅ®òåê˜l9¶ {'³&8è(ͺ<Ç1‚ŸU>¯{ý æÌáÄädméF5 W¸!oyëŽÕ†×Fi´)/¾¶Î\\¿=ÎÏi™sA`“Mßkë?ð@õÆÂÉqYË¢¢xñªé„L†,‘I#’ œˆü" (#%  c*^~ÈŠ>Ç‘€„«ûX¹<¦Pti9Œ¹ÌÜ ³¾5_hµU½³ kkãòÒ ¿ã²÷ŒDRŠYEg¶º‰È/Rƒ2ß½Ö ùeéò6$sèÄš¡L0KB3ÑÐ9ëŠYZ“ÙNÚ‚Ò~jê8–µ*bj&|S0x÷©§Ÿ5õE0Š€K~¡EZ”ÁS˜É/à'øZSÚçhÁ:‘ 3e²4ÈqðŽÖ™èÈVÒhLB½†X&¤°O(HP¦KP¯"'ì}ó›w msÈðšˆüb¿tž$dwò‹\ŠË¸áî@š$l· ‚m†³qœb~ÖZR ­Ù‚ƒõ7«f LpÙ„Æt¿¿ß…À—^þ‚¬Sy¾‰&¿Ôe¨>“_ÿù/èP<-BZ8!é@H ÇÙš’Xæ9mÊz” ÊÔ—v4ks|¼^{݇*&o˜mN Ò3‚M~ÁkÆða¢¡/Ñ¢ÚDzWIÙ·Fi±±b›©Z‡¢›9÷Ï;fÔ[xXH/‰Â×ÊùÓ:½îC7ö^V,h˜€Ö=<ƒêíÞ;ñä$n ,Ú›ÞœKfÛâöÔ$_öòWô;ò¸ºedz²p‚õô  E[-‰|ZФšÊkò¶7|èæ’wž×É|fxôŒÔ˜1ùÅ~C¸@: •ÞU„Kß*&ùñkÏynoY™µE‹i EP9SÍɉD“M‹_«f›5zÏg~³wÞùìÁcÍñ¢„›ùE^ DvÀš$ˆÅLÀ`2™žÙ؈=·¼u§ÞI§Ý;¯¬(Ä4ÉéX“4hM&!*‚^uõJàñæ‘äùW~AÂjÞÈ/Á£ãª3d}Lg÷t“¿´»ívoì{Ü upü%W\S¨ö„¼­ ((ÿ’‡õ5ÒÙEïxgÙªÞ:–câ{øÎ·óN~‘='„°AbÑà°TaE#¿ç´í¶Û•n‹zzX)ëíSŽmo¯Œ:µ‹™ lpܳåƒçüÂEPpææŒcÌçïù°{Ö+ù%½U· ãÈcó%$Ÿ-pƒ_2ùÅÞ4Žû?‚ò¦*ÚaËo°É/Ò#²Öž°Èc>„ô¼v†bo4ò W.òÅ=öºÔ Ç£.É-Û~-ðÞèä0Oy˜0<¨›–UT™º¸³fKf^ÉZËZkÞg:l2“_‡J([„Ü‹ŸK0IOpÿ²j.)ÄaäaùeýµïâׯM~¡ ©äB3í%i|‚…Ñ3CòËžãptó´×btÐäOŸ™1C%%¿LUòúŒ&¿ˆ”2œSˆÈ#'ZâplES1ò˹ö‰î ÌÙhpN³ †ýÃr°þéâ Wko¨ûŸ`ž0ÎwãH°œ\Ä¿ŠHƸá-“_æÀ(˜¹<[SÙB~ÙB~yÎ%ÖJ¾·?¡w¶Ö4çáaóM~yFM~‘î”×UŽ€QPÙ†Õyqú„ÂMbò‹pM4®¦¶é‚9…ÏXHK,£m”"à÷LHÝ()*ºÑ'¿HøºiK|~õðÁ÷PŽ×˜:Mþu‘d ŸÁÙÔYü  Š>ñ­o}«Âk’bÜ$È/0?„SÓ­Pzøž`nãG!×^ÕÂßѼ`Ý™ôÿøûS'ŒØð>)¿ß¨äf¢¦¼Ç 3aúX qk&:N)êY(ѧý±©/aüÛ¿ý[Õ*S•Gà3ï N~ Ø×ìB°Ë,pꦈ€]nHæ†À"ȶýþïÿþÓX>> CBÛ1F7è䦨­”u“ÎɤÐoì6Áe~Ñ ,Á¹1°H Æ{eĽ2ݹ@ë}òK2xÚ4ÊI¤|f®$W¤=§5ONKýu©K€ùîw¿[r`Në8û'¡y^ðõJ~á™ -†b r÷´Ç¬Ò/½rCJ¦›€†¾ƒÆì±ç>…SHi¥Ûîòê=òè— ëîúB"¤YL†g®ªg*jÊú¬ÃV³ÞÈ/`/¶fjƒ‰µþ‚¦ Ïä3Ò:ö„ÞU×\ß»½Ô?T‘`UaÀÏ®ÿÈm•üò±2æk¿óß òûu\€u+D8€Ú‹ê™ãš@ÁCå•û˜Wò‹ý l›³ý³´óÏißÅK{ç”>éjÿБá†(ש2«?6(KCxÀêÀœÿŽ÷ôÞ[j˜ÇŸxRÅ(d´ !à  ÏL½Ì,‘J™3ù…“¡AÓÐìwÚgòKÂ7vÏâÞ 'Ÿ^™=´–‘Š:X}R±'ÜÖ· GQîS´]uòY½Ý÷,“_žý«õÀöq´˜É/™È-ßë^$ƬõY“_(JA_‚ƒ ï8ü¬J!,ìžw\öîZct5 >\뎮´N 0 àU¡¡¯ \··´4ÃÅ !œl‚Œ9Mv‹KZdï…R±~gL~$}0QSÑ2>1&ÊÉèp¯<Ná©á[•ÈÃö è6[›áª©ÂÐÂëR¤åÂÅË{¿ü+Ïî³{Fµ“;J:T:¥[ûÇ´~f ¬ƒ'<56/%T˜=8³è®Á:7¤D3Š­ «)ªb Fdú‹R9íf^Aú*Ãâ ¨`pS–ÊóûàÓOýÔ[ÞsïÓ‘_¸ož3‚i.CÂ2?Ëf~ä1Ç?35+ä ÕD ¡îO³%¥ hFܤ#6S&N€§¶HàbÇ·ïÑûw%Q=ªÖÂŒÝçDäIß0ÌiÐfòR¶ŠF~YÜû`©CtdœTaÂLŒb!­ÇL¡Aš„±Á¶ë4¦©¾Í 3‡¬8®_^4RH*‘ÖØÉ/RöN„M°¹!ÝþÄSΩ{(áxNß3]B†ÛÖ›I{ þŽhÞ"Ù:¤ÅÙ^UqAnàÄÃ{»ì±ÏH“¥yØØÉ/ŽJœCl7Í$]²ÿ•ÅÚÚxßV7wx8Z…îƒ Ãl!¾‡C‡ÎâU¡C"`ÐέõøŠþˆ‚'BdŽšãC“áXœüÂÜ )xîF3ÝãÒa+Žé57ì8”k‹pÍìÊtÃbŽ¡íZk¾g®öP^3Y³¦Ëì}Ï °ˆ rØ}ÁÞ…t$ãC&&¿d¸æ½÷Þ[³j.‡UÔ ƒ‚8Ú#`FfXCq"„Å á4Z+ÿÒ§¬'' ë3qn&I„þ›Áûé‚jòठbzaïõoØn ¼©àÅ›˜ü¢¡*S&¿Rùå°£Ú …€ê GðŒµ /$ëŽ6™"S¥ÉL“H“…ÌîÙ^8.š´-Å‹{Õvü…/zñ@!miþ>ùÅÉß>)—cc•xÊäÓ>ü˜ºq‡ÝcŸ D;ÃÂO’™3BS²oÊ „…4kûá‘mO¼³ã˜Ã4Ó>÷üKë‰dX .8—™ˆü"Õ!ׂ†OƒŽ0>@oœ×°ïþRö2qPLc÷4ò -†ȱЊ@¡qµ­Ù‚Ð$dBφ]Ë|36®®ÝÓϤk3ùEqưwÕ&&Úå†8˜îXÈ/J4B°fªGMØ+ë÷ Æ‘0U7/vÛfÚ‹Cuwú¨ßѦP›Ðt{Pî¨ILaôØ &"¿ŽÓ±¹J*¹pCÀV !µï’µQ˜jØ«™ÛÃQ´tFɪ•õd­¹i'‚0ÕŒ¸áˆrÈÎ<¼ jÈ´˜ ðWúc7„±}Œ%¿„$ª(ÃDÅ….O(À{ä—½ö=°ZëxÚ´Aû\<¤`<ìuÞ• Éd´M›6ÚY§R—† ‚Czãß4 FM~ÑJMNš Í7D’·µvz^oñþM¬O©Þ–6ýÐ"gÊM¶lÝ=ý^!-ÿóX¥‘LB{ Û0üÏôN?óœ±JP„{ˆü"ÿðÃW— B– G´èHŒƒêþS\JÛ„-ÅVQ Svj~(L¶I.Û†uÙ„3ý屚.ñó–Yx¤>÷½ÿ†Šóe¦´—[òËï< ¬„ 4òaþ@½Áët &˜—áöþ—½ìåu OÚØå§ÔMîÕ‘Œ9“ŒTívz¡Åä‚2(%CŒ>pÃGÇöVwzbq‘_Ôíé`íƒ2¸=Sé3×Üï^RóG·6vµ?ù²êU [_™¼M0ÛFxZKiêËãUÓ7|øæ~ÓÌAZ”¸ò u梜“_œ8xWÞŠ@)¾x œ¬Ûõè—ùWzvdouIQò¦dª¢æÚØ=wVSd²Ì3cTëîkõ|ú³ÕÉ/£<©ÎÒ¡Aeid”­(iøìt6\ÌSþAÈ/à×*ÄžZžhØ=ÁÌy¿°Ê‚m!VŸzÆ9%Ⱦ ¦8ÏJФ,3vÜš|࡯TÏúÞk®«ÃQFQ0܃Rž,â¼’_¬O¥2Z ?‹™JÝg´Mפê\2¦æ”SÏè]xé•eM¶9“™ükMö3Ÿ{¤wó­å4òÎ+êX›qü¿÷ÿ%ÕÖ ù{ Q²V™ ÊĨ›k¾¸l=ozÓöµ&i ¼ÚÉ.¥fÉ:Òáw>ërô“‹Z¯äÂ2Žh¦£i&dÔ{Ú g‹sv\o“_˜-AÕŵÑê\õ÷"äUN&£m6ùEÊÒÞdm®O!ywgD[…ÿIƒŒübÚŸÒz} *(Iæ0Ô)Þ¼¬Ñ•àdnMl•xp—â¶ ÊÉÈqz¢L6͉ä9ç[ÈxSëo“ ¿ØKm+ÃhHœïØBÁ—ÕËÃTsbÖ¶HË{쓼®Z£³¬~“ ¿dNe¨G—³¨@_l©B-›fmÙÈ}Í™$•¨öâ=ªS2iŒPy˜k'¿l\ò‹³§5#î•g!—/}Ÿ~Ø<~g¿›!ùeÁlÌsÚ#¿â™aÈ/œ“83˜xLcÔä—òYß-G»ubÑ™ :'!óÏ€Êaú‰r ø±µ÷Î̬ENiËä—-䗹ј3›`ÜÚØB~ÙB~ÙB~™ñŽ0ã?°Ëf¿ „ZOÉ÷H}ˆ1¥)hmò &¦C(æÂ(чâµK~ O0J  –!˜HºE–a“ ¿„ú€& ÁÔT|&O0ªfhн 4˜ŠL2÷€óªÏÜdÈ/²ín‘šÿÃ+`Œ¹WuFUÊ@¼=¸Yx!ïÇ-Áñ3£44<ðKoôÉ/*Ò´¡—¨3…¦Ì湸Uiþ–[n©³{w™-м÷ ù†M¼ÿë¿þëZ ­ÂƒtžTª°4ùJë¶”Ðq~†l–õ±È`kχgò‹§ M™á(‹:mpè4Øv·G¬\ƒ°µsÃ\ Ö%À|ç;ß©A½x£‘_p¯ ·´ó§Þ.à0:‚¥W³ƒ/ꃣ—àÝqŠ€û©AM…q$ËŒ® D!¸ÏqÞtü2âÆ¡~VÃÃÊSÞÚp"t–¥Îä‚¿0QëÊy0ÀwçÁ@F @Èà€ºä'kNypú˜ÃRLf FÏt™7§´ÞÉ/óÁ´ã`²þI¸.7„€‰Ó'V¦MÌï9¥îD&šüÛ¿ýÛJj£qÇ6qYPÔ B~áhî™V]Nüò09/f8Q:¡/ ü.»îQºì.*Ä—ÒUiç]{oße÷2^|y±†'úŒ;"¤sÃ"ÀÓYÍŽãƒ'èz!¿„Ýc+`¦]nHtnî[[ES*]W–æ^·Üqwµ|¥V­‚œTü¹ö† úùÖ:ùå«Oünu<¨…f1OÊý¸Ô]Jù¶f;¯äkÐzDݶ釆]úå,*e€ó/¾¬w×§?× fnH+¬â…ÜWë"Àm8Êu™uÍuî=ú¥Çzg–=Sâ:“_hÑåðö¦4m–lá¼_D-6ukÐÖZ—bò˪“N+Â}¾V»Üe:†å“fð^à Q«`J]sÙ‡ö¶.Å^xUNÏeû /D9ߺ–V±\ìdz&¿Ø¿`yl—v·‰Œ¶QÀYSZ9d(JZV5™ pmÒÄýýÖÃÑb«i^Qq° 1È/[ÿÚsj½Ñv‘©hÝâ’ŸY÷¬É5ãÉ/&¡!r0^=­pC¬Á F1Úæ]W½¿–âZ•øÑºö2ý%B¦#h˜>j—¡1™° Øð€CŽîýR)î*ºRíævåqåe¼qðJËèOþÆvÁDcš]úD Ý4ŒÆD³~o+Vä(jÜçXòK¨L*É9ôŠë‘©\'œznHž„t)º`UyÞ´&$¡ý$m:~63Díðú‡Ûüƒc ùå é”b' $¿1–ü"N•±>3,3--ö)óB‚îÏ´ ÞÑ÷ÚÀ©™3æ˜Z{þÐ" eçbíq4yõ»b2 s›Wîr(Ô³¼9Ñä€Ó¾À<kퟸÆ¢Š©…ÓѺfŸ45,åìúÊcZoB4BsJ4ÊûºÙL¦ðJ£0í¾´ª®M¯í}‡Ö‡æo}û@M éDe.BÚi³dzJHô©E:L¡LHo0Ñ Fqè]´ßÒú„Ř^ƒŒtcn$S– ðºãk8^ÔÏ™´.3~Š%ø}X?áRú„Ýiç݆rµÂð!äXò‹³"s•¤’‚ AK¤ßÈ/¥¡I¹I7I„¥h7ä,2>*Kü ªÝèWW‹hôûsú<0HKÛ@{+O<«÷æ·ì8PH{cJôM~á]¥Ñ&^%_oÌv…ià Ž ¾oû[ÛwAø4à÷Ö¨ A4”iöL[P†Ÿ€2u—eAƒö?-ƒ7¿eð "8\Žgbò !¥i1y]®-Ý Ñ¼ÎãŠúuM‹™1RSÐË¢ŸL1ÄÿŠœl-Ì™ÐiûO@§ ~A À{Wzú¢OD~±…HöªMÐ 3 ùjùÁ&»4þáhŽ6›éU7î8Ú°Æì«¶ûdk°ðåºorFN&„¥ÕÖþ£Õ|ŵ¼´ •éŒs. £qîÒZLD~¡ItQNÈ/„ƒî0Åa¿¥VAÂT%ïJ@‚ÒÓå­7΄†Zôv þ\l›ŸÑ¨€?£Tye” ÈÚ=þÄS†é2z¶»‰É/4)ÝáG‹Ž0a¼}—ÝêÔ—ÆîaªÔõiÝžc Í™ÒBø¢¦*аa¯Ó2iRxh wë²w Lœ¼}ˆ€ä~XœãàXò UÀq`vÚ} ù%sCN—áh©f JÖ ïÉLp)iŽ[Ž]9g†MàœÉlí£ÌšÖ™°˜ØZ]sá;ǵ£XßDäÕ%±kèKÙƒŠá†€Gïôö]ªi.›8smÄ.èEá-§O}IÓYž¶Mi˜tÑQr@¶æ{Íõím_<û8ìžmÄzK~áIDå5™§5è¢Å_`á\\:*M ¨µ&3Ï•bZÑÖÀTí‹™4j2YëÒÕXxV!i’F3kK¬{Ö¹ç5án;ä—üâi¤XC¸îä'oeq¢|ÉK^Ú;jåIU“LÔžf ®õ×A™¸aj Ê]ÕüİÍ\Û샊I»ÖcЄ戮,I²_ú¥_«Ek’å!¡Oñ´žI~qf¤Q±t­…Ý“Áí²ÙÊ܆+µòäªQ[… ]$ÃíÛÂî¡!ǯF!¼Šð‚^زÒ–„L7&çÎëË`”ç—¥1®±‰{´ÌˆüBSÎ’4júÞ¼*‰¢ mïö®Úæ¯ìSÆÓ¤“! kS'$S•Hf®<*Ë4yؤEì›LØï ýî÷¾¿òÁF Hc¬-X½_àñº¥¼u€%X?ÃÍËvy2*¼PŽ>(ÿ̹-õ }æ†<§L~1·ùÜ —¾¢îmŽ+“E™"-fÊKéïY—>®wò‹*¯ƒ) ü¤79×÷ÉZƒa÷lò A%·ºšæ*È ¿Ï6AÀF~±FÖ'•‰ó³•cúËöo~ko‡‚É‘øÆ7¾Q×`×Tÿò/ÿ²vrbÎez(Ýëüb?Ãoô„ Úå†pkÉ/‹êä—#JØ÷¼ïºZXýä½@¾¿S듊¬ÊxùØ'+H¿’_¾ÖÈ/.ä41Û†‹ ’YŠPóJ~Cã` ™_xQ®=c5êDõ¢–vA)Ý}æs_¬%ºµ'ZñÕ÷ª\Ž¢¤¼÷î÷Ýл®Ô#ÿÛo­G‹ÖŸ5›I¤²J " ‚²‚Ιü’ÞË<(1ìqCÚX¥ufϧ~ãsS5ÈîÜ/WVAºœ)¶Ò¤ ¢5«½®bv.¸äݽk¯ûPn´KM‡ð¬a÷¤ƒ*'Ê#1éY“_lΈ/aöÐ3éâÒà Ùoñ’ÞE—¾«Œ¶y¸p &ø¯ëbš J{Ž¢®©€ ûsxA}=ç¹Ï_gò‹¤–4§Ë:•¢ÑŒû˜ù…K~YÖ`ˆ/¶‰pC˜h…l¶±î‚™SšËä?ûÊW7„¹ú÷Bb1ÕИh˜ÂHw°÷¾ËJåë¹ýÞxÓs»¢/Û‹=Ø}Ù'&¿ˆ\è¡ÀfO¦N„²¨Ä•gž{Q:F{­mé}Æï•Ìð¡Q&”Ì  §£ìÞÏ—UüÐpz§/\|`ïg~öçê2¬‚f‹±÷ÚÆ&šü"ì²!c.±û®‰v£~ä±}L\¨I­Qôƒõ¢ÍÆÓZ;À(ðЕLcƒÉp”` ¼àò,¯;í²`ÁñƒJÖ)|‘ ýDäÞÔq)‘L7Ø&}ÿå–µôŠœ „ÇÌÐZm=\›i”ÐÊç~„OAE„„¡eª„óuhË.…ß—¼ll™c’à†rVfF÷“Ë%­ÿ¸‹#’³¢&Í6žòñ'Ñç>f O™ÙYáL†éCÀfªk£Ðd¦¿„CHH¯Œ¸!hÅìí·¼”ñ3 ¢Y»xx"ò /¦#ô}(L´Xg¡—É/t§á‚}ú Ž)3}LÙi—=G ©†B)‚~òŒ$¿@,K]8ØÚ i0Á6ò WÔ Øãlê‰íéºh/:& ¼D‹0x/ŠDksTÕ& F³pɽÿ0¤M¸½JÒQl"ò‹N‚oBFƒãJ§/ìò“Ï(SxËÚáö¹{PjBBcÑN†ô­¥5ÝU=,AÃðñ`˜&à/ 0¡ .3(…Ðö [KÐEK) ¦Víš~1O§BND~ÉÄ]I©ÐÒa¯}V ]f{@ú[;4Òö·3++-‰Óo¹ B~¹¿j± k“)ÚØ•}~œ á 4ܾ>¶`ù^9”Æ$"›˜üÂáH2‰vÒM%gB£=uëˆpPþ4 /|A3Ä„Æå9šÆßº¿Zh7Áºk°Ëð!(ô%œ{Lض²Ý›ã^yTÁ€½Ý‘o,ù…Â:bÁ-æD¿pß%}D$Ó S't‰6žæ¤êöó甩ë¤úp¬Y?#A<ã5)2Þ&cp<Œ|æ0ò‹`^q7BŽ%¿È×𮂂Ìsu¢w2G~qó„p…I@`pPßû9 ¸Ú@¢f–LÜ ¤6q/[Dz¶¯[´sAE[ºü-á<^ØCÚñm->~‰td êT$… ÊZvŽ;žU<ÒõŽ3ò¨ìÙztÄ’Új)£EºÌv¥ŽÀZÉšêNSb‚#•-€æ¬EB l/™ÁÅYã' Ì™ù¦OàŒxÅ+×"6»‚ dR¦Ÿhò‹ˆ‡\qwò‹¼ `à’ÌYQä BèðBFkL–¦%Æm‚FÓÏT5ÀÞYÏ”ÅqŒViÏ:Ñn³c!%§'"¿h{!ÅÁéˆî!9À¼ìC&¿ht`ßÊ–Qö·lâaÊEÆéhV¬WG®DH¶kVäÔ ÞWÔÎø¶' áSÎX]ÉåƒÌº:­TÇ’_`[¥î%Œ­C©CÔ‹ƒÀ÷ûph0Z¤Ašäif9–Fܨ5(ÔË\‚Æ y¤|ÃlÏ ÚA1cê@¾™´Ö(ÅWÕ!IÃ^Ì¡0t,ù…‡ÒëC±… ˜É/þX«˜m ¸~ÿ«‚EƒœQ(La’3qÃÈÖ£+£3d œNBP#h˜îL—æ­UÅù&¿ˆSí“‘_’•ݬnj¶a¢!¿pÕø!¼ìþQ5fÍÚ6ÀLÓ? |«´ß?5¿§M˜69!š%XÖpW=§Z&o×Ývœ;f9LD~±öxU‡Ïîì¬n7Ä \ÝðÀCKæ¼Îid4ž4N‚¼$“í0UW›üûh?ïC›aü¤?GD«øZ„>ñäÓÆ˜í‰ò´”15ùe8ùEÆ‹ÉJ ±sÂàfÑ`˜=!¿¼¬˜îŠcZ¤žsã=6H‹PDÀL¸g¢öˆÒflÝߟ'’a ïzÏ55c7 Ú’É/£É/4iL£@ ÄÀ>_{a“ë Û¾±wxÉ”Û*25Û«Í=”‰6î­Í i‰­6Ά ™´e&5Ñ4“½¦ä__þòm&P¬$µÃsI@?}N³tq*ß•¡¦)›ªÒ6¶OÆf‚3•>“_äR~ýU¯.#ÅϪÚ#œ×Œµ‘5 ¤à<•Zã“vôj잯׵šv6Öç5øPo›bAã4ˆÙÀ!RȬÉ/âXG&›7™ü"…nÈÏýÜÏ×Ö5g×M&ŽÃ‘ °Æ„t‚+‹—±Si5eß¼ï³÷Î=ï‚rŠø¥±ô%HJ9^µ;ùez·í§¡?¦O~‘žTæV€µG&uŸÉôŒâÐê©ÛCÏ9ï¢êÌ”ó )&H[„Š€´h2Q䙇|Ö0-¦Làž$•ç•üb³å}­Kb1o&3=»mã>¾_.¿òêêpnýDëÒ¦¢•Ìüo~©R–nºõÎÞ9«Ï/dÔíê©a”yJq°aæz%¿HÙpQ ÃîÅ ùÏÿù§ 8þ׫K—.ëtpÙ°ËQùÅúžÔsž¯|Ëê»$ÞïýÎ*Îf üe(X Œ$mÔ˜ƒÓÕ+NrKÚoPc®qŽb6¿gžª3e½N~!¨ŽÔln|&cûrF´s‚þ÷!¿xš¼ÚLÌm&‚y¯eÀÁù?ê¢ ¿tò‹,ï&ŽéÍOú~[•}šÃƒ¹“9ÜàäÿÜMŒ› 9©PÝ÷qj´´txo4ò‹ÓŠ7ŽÀ6iZH¬ëxFãÂ.û,¯Êi¥r<ý!ø¹5Å&A~q:Ie˜ŽÁ)ýì³ËéËj3oé —›ç@är‘fœ„‡à‚£aš›ùE…× ÛC9 kˆ»ÏÌJÜ'¯"&è– êâÒ»Ü7.ë&(ç¤Ô@Ų¬áÏÿüÏ{ÿðÿPü‹Ø(äkÉ—ºÍ[‹ÈèºÌ‚=ú„.7Äéo„þã?þãuFk|ï{ß«Úe²N1”ü¤°ìGÈЗ G“©«ñ¼9sÒ¢›v^”q#¤ k0J£K Mk¼SÖ0œï·¯ú¹yµ:Z Ûf†n!vI Ëåd´ ‡Á)0Qëˆ÷t87$¨i°K~!`æ÷ƒ@8çÇ ?úîw¿»Ž€ÿ÷ÿþßÞ·¿ýíjþR’Ó´ºÞÉ/ÌR »ÀìrC"`Â[K»—Ó¿ê®»/(S_ÊäÐr!¿ì¸ÓÎEÀ7”è¶UC¼2VOW‹?øÁªW¦yÑ‘,½´ˆ”輓_ ‡]0ˆÒ% UnˆÙ={ïÓ;z剽+Þsmï–R¹÷þ‡j)=(æ†ã¹¥pH ƒàÂK{_~ìñuÖ"ÆÏþáöÛÊ9® ŽþmÎË䈽 /‹izÚ6v9×Ì éFi..õý+Š@ŸëñxÒÙ,5ÊðB«(¤_äõþXïñßúZÕ¦µhi0mZÌù“6%ÅÜÛœÉ/¢ lÄÂÚqáÓ÷ݹ!fö¤çùÚvý¸"¥]­.­ ®ŠLØL¨€ Æë-¿³hö+Õ è»ìž”&dÝÔØ¬É/B0aÏÉ“J8e¼TXvYƒ™ürë'îí ¤|!U²R¶£½tÿ¤Ñ G uB}óäÓÏ-Zܱ H‹'•œZ|Ï3Óè¬È/ö8„kæiï³Áã†,,“— •ivÒK9´‰®[WÞ¦æÿ…c Kïöѱ“_`ëÝ‚o§N¦Ë I$slA_…9â¼Óm³Ö¯µvû¬¸€ÖÜ×¶ §9›Ë**’yBuáiAyµî¿ ,¼ÇÞûÅpJ¼®ŒÂT_ÚÇû‰,I'‹XÐÌ«â…Øüc®6ûn,ºxÉþÅ´.­ìWóŽ*AXBÒ*°ƒu™}2L<€öá|Úô—Ö£™ö¬GhK ^˜Ú´9†áû•_Ýz¤6™)ÄØD“_tnÈôq£u˜!}ŽC”fïLË͵ÉfWT0=çA34KSL˜yZ§Mik—™{?á½p?î:[« ˜?ûæ!&R#¤àa"ò s%¤ŽG‰ Ä™È/ƒuÄÔ*à¶ÌqÀªr"Ö&m)YL•°p=´ØÉgWçBðµ žƒáöüÜ…áƒOùï§²€ƒjž”2ù%#†í“L•£qàmÓ_ö*­‡O¯f„ìâ­%B»h˜v™!AlÌ—ë‘öİë2Œˆv½ºMƒ!¤ÑS??„üBh§”(eìäÇCHO%ƒQ‰ö-ó´hí„Óížíw4J»œ “= xé>ž3„3¦ òæÁZ†ÏªÊð!,ñˆ_ Ö¢Cµ=SòZ¤¤¶7a!C™:ùE–LR‰ÀÉˤÛòËQÇÒç{t‡.¸3µ¸· œÒ”âÆ ë=~G8?[ד6fÏðh/|ßo¿Ã`ˆ¶Ì»­nbò Ž¿@@tÏDiÑöâÚgÑâz“rPŸ&ÁœÜl† 5YÝÓ€›…hßò¼‚ZgÖÖ&Ón-ÿ×Ôe=2Ó™üÎ}ËŽƒ‡0È8!e†ÏXò‹àœg•®ÈDÞ´•Ù«ŒA]²ü°>$‚’`n„“ð}ÓX›ªDû©h‡jôûF,嬘t›æ´¦ßO¶còÖ0«x}Á×ò¬á…À$Œ%¿ˆ[’ŽÓV&ó{€¡ /o¼l]^HcÊÅc¶‹§T¨vö>XÉ/öόͰ¯†’–5*öRì˜ãO-ÑÌàþŽ]iÂ9–üBH@{‘óŒeÖéÖÐ4-Òžï™V…vd´ŸÚJiŸ\K•x¤z][ AñÈ„p2%xM1÷³õKîÇzœhò‹¦BËÄÓs£À÷¢ýÅû·É/ˆ’Šå4\4hÍY‡öM'•µ@û6>#±mæø DB´IóLØßúÛÊÿ vâ~F„tîK~áQ­GÞTˆDƒ™üéìöÖ™l9v³ -×ú¡Qž0s]=ýuy!ídw }b[§’F‘¸½FM!…'>>§Œx}Éì Z„¤ëq,ùÅ^) ¦âDHÂe0Jf†Xà¯()…wEûãX˜jútMM,‹ÈÂTÛ¨Œêm¯¿35]´ (Ð$¢L7¸¨ zXSxæjIÑLD~ɬsB0ô%À= "G‘þn%º²¸úì… ºQ€%d2Ó˜N8[¼m¦Z›4*pÈZÝm÷=Fž@˜¨-d"ò‹^äF ævxY¨/(‚zÄ1Õs¶ÁDgÖ-À•F%nÎÑË 'kzDæ„Èà¥áB7¹%³@£®OM~¡aøx™‹‘_x)‹9Š€ÿ”»™4 º gkå §öcØÌ á ­¥ÌÈâA²—èŠ3õ%Ý$2þÆyÓÚ´—¾ó]WU¼Á8¤¥^z¶Ž‘_¤ám'4d#¡B™ð5Ô†¨âe…œ²êä3*}0ä_g¬M›Ayg5W[!Û¦æ|˜/“e®ŽdöOï‘ìz_ÙvXÌ8s™ñä—_ÔD=Ž5™É/™k^ÛGtꙫûtÝdD4\vg½q&H0ÂÒf×X›.u!¨Ñ¶dÚŽÖ;ùÅО®÷]L,3íãÒËSŸ>œÈá:­°{dœ™®óå“O>ÙVAÃòñ°}Æz#¿ð–Ö!DsÆKyºöEˆáŒ—Êp"¦¥¬` 6òË…ø²ODf×Ý”’üÛK‡Ñ7õ^]j„в§2Ó®Mg2ßÇç)èHµX£ Q‚ ‹3’‘µ˜¨Ï–«´;w-·"…Á,!´hÍ…F(Íð=Ga †aW;m—Ôæ‡ÀÕÝüñ»ë”{ø€OÜ}éõhýb\YZÿ¶â˜ÞYgŸÛû£?ú£Þ¿ýÛ¿ œÈ$5™Yí´>/äõGöŽ#DÍk»B~I·{ä`€áyÄðÀƒ_*p–/õ1ЫØÓJuö{FVPÄ/×­…üòÕ¾è…Ö¼u¬Š–¡(îMz… sšüÂ<Ж¸q}æÏÑžÀDÑléŒ%…¶tBiÄww­X¥f+î4†OتXªÏ´Ùæ†ÜUq<W^}}!¿|²÷¿¾ûU³þ—,`:«±0^•³"àœÈ/6` %´»Ü #`†¡.]t镵È Í©;ª§ëg+£?65S¤M~‰€J™sÞ…ï*ŽJß»÷][÷EÛEL5Ô‰`w ³&¿Ø. ãÉÈ–‡¾Äv2ì»ï~½³K×ÁÖõ³õ¦£¡@²!°Âð¡Õ4•NT•hëV=b°°ð°#Wö^ø¢—ô'¿LoÚÇYÿ1ùÅÆKHP5“ 7$˜ôêd–îß;í¬56qE°[àrZ[ÅÖ»5…×”Ì=ï];âæ†J x7À Åâe÷s¼ƒ0µtXÞŒÉ/¢ƒQ„lL4ÛD—ªw$¬MºêÒ¤ËË„ ÅW(pChÚï˜2SN Ã& j.ˆ.з¾mס4‚+©sz,nbò‹ý0Ó-lzJ¶ ·HfÙ÷.zg9('3S6',BP4çÓ°O>™þB‹m-^WÍ4€Á4}‡ôJÓ÷_{ÎóF–”+Üa'&¿0W›>M2ѱÃgqïèB#„ò`Zð:œ!£-À@k0“˜2/„vÃð!¤Ïaš@‚ k´HPHK`D€¨=ö^2’I ð¤QŠØw¢É/NPÖ¤Gê*á©gž_)„äúaàÚ¼*Š tŒivû¶ò´P^i1Ó_B¹€o…Pm¸OéÏú§MŽÉ![eìä—Ÿœë8¡”阩ð ùœ£€@·Ö`.³ƒßá1 »CkLÔÌ+§Ó»ßP ¨g0àkaø”6 ¸ïþ‡õÞ¶óèæÒ´ép z–¯å~ŸUb¿ý`fðœR9'vÑ„hCtÃDÛíлO!¿œRÍÉÊ&ækBÓ !h´1ÌÓjóµ8 f̬AÓÒž ¡^À¬û>{¸ZhÌÝ÷Úol Ÿ·ˆü"å8[‹9ðÒ¢i„Øž°ô !ÉÔÚ<5U£4Z°®ý2k2ýͽ×ß7¢K¼ò0?4¦F›8 ðC–õ¶úÅÿ:Ò9O4ù…ÓѺŸãɸӌÔXXØþ)³räæÝ¨ŸYSL/#1˜/€½è&ÔBZdîþ–öÐ+|17^ýœ¹ú]hL¾ +ߣMXZ‘_œöå\¬Íœ ™$”Œ^<☓ûÜŽ0B;²N±¬ ݉c00[fÞeà¡adœMh^ áãwF¼a»Á“_Îé8TL4ùE”ã´/”kü¬=ëa5B†hï™Zªm-µß5j`ˆeÞkOÌZóš÷dÆAûþ”j%Öf®±¼»7í0T“N+Ò#´9ròKFÛÈ›f´MÚY8Ç-^Z…Òæ…ÞŸ4a-eŠ› ±ÌûB~á…@¬Q!\†÷qb±€ >"$Khk³1Ž,l¿a3|”å…ž¶<§¢‘䛿1’¼²háhÐ)ÜÈ)O— å {m­ûWô‡¥pn.uëÔ¶’(È>ªohŠõ>Âsb±ŸÃ±-9`EïU¯yÝ@MÂ⊱ǒ_l!4™¼MøYŽ;aìRP‹–4ú’§ÜÌõ¨>‰ð¾oŠJwÝ)-ñ´­á{kžý“ùÚWÖ­¨'‚Zá—Ъhèù/x:ÈWü*…B@DZä—dÂî 7$#5ÀZ––ñ64ÊRwýXmzÒ)U™³Õx!÷Ô}’ɶž†}º:$— ÛzìŸmNWZdß% rêO ˜SàliiMD~±]¨_ˆr2»'$\˜ûNMºBB =‰17AgâSë0gÌœ/iSÐÞ³wVA½7üKkÔ;VV½j © ÈŬ‘_âÔáÈ I"IjAƒ^îºÛ}Î#§’éLÌ3Ç$û ›¤‘Oh¿âV˜sÚÄ ¡M&\.Ôÿ£5jbº™ÒÔÈjõ^Qú©Ú#¡§m‘_°x(%\ÐT„ʵÀÚ¸<ôÈ~´CHµnB9"`x!ŽLÍeð‚£W3Ý–&q4ó{Έ Žo4K“>çÔ3Ï:¤HHšé‘_$ª ¨¸áL`"$Á@Ç\¢|M„?úÄ*XÖ`Fž27ŽDžù‚t'¡€€6êµ”Éç«ÙZŸ9—¶ÄV;Š™Ú=,Ò‘É“½LL~Q¤Që’™h&¿„âAŒ¹~N"c¢2Jƒ€L•€R9WêB‹æ…xÍŒ­µ£mî\gžvÆÙ#ãU'‹äš{xò‹êð®j5ú!˜ ¶Vݦ¨cO8­:ÚKÿæ•(Ö"§B‹i]“‰/m8ÊãuK‰¹† ÄÄí¥^ò® ï7¥I !èŒÉ/•`ºœ!ÃîIKÓíÞ¸}ÉÖ­ôÅL­§L`r¬âT˜fã…´¾<á…$ÑÕæ‰<ÐgöÊ÷^[þ߯ÅÓÌštÆŒ'¿È0.šæ'ƒ êÄ‹‹–Ï8ûüšÂñ…iz’±5¢Më±±{¤yئU·‰L´úîR>˜dò ¡äe­Å9‘_ ó¤hR\ÈDT™2ùå9Ïynštù{®«§ÍǺ½nö„lžõ±)òKã…dæ]Ç{´~æY«k2jRD4­-nÎäëS åÇ<ÒÖ) ò åU_VŸÿŽâpnî÷ (Å­kMÁšV=5“ûЇ}ÿu,ó·ŽíÖBÎ…Ãq†ä7Tµ¦ð²Oå…”'²€I†Aƒ¢ «˜À‹– I7›°"íôöûÿ¹üüUexÑyk.ê]_¼ë]ŸþÍ)ªÒ—¦fø|©æ{n/fùñRÙZ]Þ·ýöoºÒ¨¥ãŒë8ü²`¬ÞPöÅ[¬7OKpN‹e¶„¥MÂ1)Úµ¦q“_Г—nû/+àB‚yÓ›¶¯žzܼž®€¦=ÚÑϾ˜¹BòË­Õ'ó¦a“_€Š a÷Ät&]?³y3d]öí_$»yS¿ó°áÒgÜK²]¶.O턱îÔè1{ÁbDÞu&Z˜pþ†• þóðÝÑ6ë}ò‹2¶ý3EÑÙ 0îïlURhœü’ªò¸›œí狀•Õƒí¹6 ù…¹¤58oËQ1m¯Ïk­Ì†Ïe)(29åotò‹ýI6O0O»¶!Cå¹wn^ÐÌå Æi×)GéL«dH›ü"Ú®$œ ®ÆÀÅYIz´ã0.Àï#Bsbö;Ÿc½+ÁñžB5ïáEEXÄj?+6A9[.(ž÷©˜¨›p3öO7G“¶î~Ðä&H[ö»°ÜÿÉñ:ÞmÖäÂ…ü8šC9´3ÿ_#¿<±eòË„ìžyŸ2}ño!¿l!¿l™ü2ãmoÆÐ]wÃ&¿Ølú²Ú¢ ûå3Žü"M‚þ Oˆ8/ûçÚìÉ/Ð\Q8‚‘…W—‘ÇðzÆ:¸ùæ›ë0ïÛìÈ/ø!#>éŸ.e¶Áä é”ëz qP•VÑÚQá¾=Û1ËÊMbò áh&à{7œ™„¬¨æ©6ªµ…j9]8Jaú ÀÐ02 톎oÎüHÄ·üBNPzDÚØ€!¶TlzIRÓŒ“ ç¤þ)P—Þ`Ö'0D à–§œ(ÐwlÛàäëƒÑw’€Àn,TF£Á.³  ²  ãTx!ýúgy´lMuƒü¢¿¥÷¬±AÈ/ʈµ§ócý„"?úR:ý†¾äf¸]’TÅÈ/×4žþõ¯÷§À`úüå_þe…§²gÔõF~áúiÏ:B"Ë쥾ïåB# áœÃÏêšh ¼ªÛÑ pƒlVÞt~È?þã?Öy 2]zëI±á¼ëÌR’åiÞ›YäÌC®•¦L| 7äþûï¯ØïpCºÔ‰ 'jçÅ’)—Ž…»/Ø»N~Ù­L~Ùá-;–ÖÂÛõ^[´˜ ¶ÿE[ññ4~È_ÿõ_×õ*Ÿ•2o“_}΄rDïøSήp3XTkpÐZj˜ºëªéZ›¶Â6BÚcõÕ>êw„ôP˜¥„iI@˜s¶W³|VöÞºÓ®CGO¥*­˜$žˆü"G~±˜ûô¥Úaaïð£VULXu ØÍ5JÒšþ@”FPûtÝ* >€”x_k×:¤½Ì!SóŽ– °ôÀ¥ºõ“#ËöS×~ª e¬ù³ "y˜OYÌ~(5!pBçYSUÎH=÷Ú»À@p× 4”d‘yZS°ç 8%kÑVÁÁø»ÆÍ:©?¢ƒ`]†‡º  vø…­F“_ ¢£±“_)Ëf¶VfI:9.,ÌWÿ0­ÁÛ!ìö³°ålAh,5[íÚìÃÁJ8Á…p~–é/`àÆì¹hyï…/~éHM &"¿Ð¢HÇ"ù…€Ü4ö9‡xv¸„ 3Çïýœ¾¶faËAC9ëÖïiÏßd€ ~ª°ŒŒ¾ ÖUc› k²r;K$Æ:isàä^U¶Mcƒî¸Óäe–.kL7ˆMà gºÍøºÑi%À{ëÌßqJ~2‹÷yq4~GÀpL|Ý@ý+*ÃgØäBÚFl!2 CÉ/6SB ʾL4fêT/]±oÙ>Ülæ…DáZyê~×Ì­Í, 7ÉtyXÑ‘m‡s±¶9¯L§ð9„Î:÷ b5~\ﵯßn ¹¦ùCÆÛŒ$¿¤# 3 ?+-e¹O9/f¬ MÆäñ;®1}üÜÚ ‰m벤K¤#€ lèê·A*mÛ `&Ö<ú6¯ ¶Þ)I8vœüâMr  2QP/WÂ*xûλ”Üæ÷ty!1ÁL4s“™Üb£ Úý÷±º:}DL¯l¿ä¼8.+ƒŽê÷Å"~é—÷G—cOD~‘Zt -}sB~‘]3+„€L)û™§Öœ-†a.¾mMßïïw´ð7‘­Úg9©ùœY?ŸãòùG•ŸýÇÿøŸžf®LÕý1UCYû$xhA”Ô}r+„g WºÏÔAX²ˆ™fh´Ü¨Ô¡ë B— ¹Ì aJ§ÐJ`pƒô×Èf7õ§¾2p¢Ó2ùSdrF4šµêdBØ“O;k(èW`.5ñä‹WâˆÚyXq`È/á†T`mÉ£Z/™}e-e A­C2õ õÇk€ŽQàŒ™c˜d—‹Æm/åsSõ¼„vn}K™ô; ²¦èË«ÊØ_-ëquýQÖåOÛý±d23•3Ák–•ãx$aÞx0 DûfÂ:„øâØEPëé¹h‡sÎ¥] z›bø;ý4eKƒ´¬‚WÂfÒè©§92”³¬Ò›}Æä ]Æh0 dLB:˜"ˆTf]Ñœ§žÜ M4¦]›ÞÒ2xmQmb÷¤±³õ>ë3¯„¤Ù /¹¼†h£€‡„tZšùEZž#²÷Ø+ühPø$lòÏ_üâ—Tò -ºB|qƒ´(;À«fÔT&½„"ÑlkiY¾ÆçbâÖèW]SGèŒð‰J´Í‰ü’²@z™PØÄ«Ù‹Ô3N+“_.½b­™ºI¦—üjÒÖ!çC‹^3í7cm˜míuÕµc5Hxû¡­Ï~Nät5æúò‹C©ó›²‚±ˆc—\qM5SMZ‹Ì•…tÌ5N'}2»Ùï¥5Ï>wÍDÉi´§#°Î™üba«0UlT|™>7ÄÀ¿w¼óÊÞKc¯;ïù\Í „EÀœ9–xnô_æ{ù»Þ[öê·ŒþvÍWfnÞ&¿¨(ó¸Î•„Ëä—pCº]¾ÓNo/&|vï#7ÝVI.÷=ðÅâQKĊ¾Ô{ä+OÔo÷~æ¡Þ-·ªwáÅ—–HêõcÇÚL_›¶ •7ÖåÿOM~_ÕE~Q¤M¥ìЗDJÃæšû¹÷ñÆèIû,\Ô;èàCëë[Ëäû›ƒíLqê¬I¸è÷¼’_œ7UºÜ´µÀ³ÍfŠÄ8ú ßKP FX’Lþz%¿0[AÂLXq³*ciðêi!¿PœJW)üüpÔÔ‰‘Ø:Mbµe’ÌŽyH/ØRærã“ü­õ&àpl ùÅ+èŒcYRñô?*æ;»Ö§)IAÔ?¥=€j_3Yëi¾éL©V©Ál4ò‹…sÓ§'³*9áŸ@!aÍå=þÆæî€êóÜh“_ÀM£>TCxQÚkº)gLñ%AäH†ú û68éã?^—i«Š1°ÙN~ßW#Vp*ái cà®»JO感‘ö„4Ùl&¿ ¿„î€O@È.’´ô“*w«h{ã˜öB`—Ú¨\’ßg0Ê&C~!œÔsDu P_z5—î„ï(%Á¼ã„¥uV€íz ,Ex‚2§ŦF~±öÜTÌ\--ý§EB@†4ÿãpœbd‡ÿ¡É<0/¾˜ Ó§Y§u~ÀÑÍaÞ¡~œSé]‹ƒÙÅhÈÝ;)øg´æŸÇ¬Ì0€¦t8†¾êD4˜½Œ!SàU=s¸Ó8Á•)˜4•ó©ÂðzŸüZ ³Ì`¢°ë‚jîrCÐ&b¢éO©R–o>á†8ÈÊy¯d#‚2•"[îò™I‹–­çåOªÉrüy2%7mKÀ’Ã!†ÍqRS Ã.vg÷tÛ7:buÉ/£¡ÁoûÛëÐ'2&,f?/äë…yBhq&„ Y¬Ë a¢9+†<Þ{,¨S__\»ÔÉ/;õ^÷úÂî)æ) N{.ÁC3æ«g:?uJ…M¦aÞ&¿H(Ó„–ýÙ‡j]µë㟼¯BA—X0ª¯~m=<Ûbg«6¯­,ßÓÇ ´i:^WÁW¼ç½Ç¾òxõœS7OËÚäiYAg5ù…G%¤”7 …0fj "¿œTÀIPn ³Æ\iÓ_Ò}°µWL[El}—ï©píûìtâ)gÕ`aXõŒ ÛnfE~l‹ mÊÖa°¤Ñâa+Ž-åóòÄKÐë¡6ZI¬¦Iž‚[?×/ôÍX©ÝÉ€qdÿ[L~)Ø€Aå¥}Þ|Öäñ¨(ƒËìž°{/YVÖáÙ‰ sÓJmŒF—2XK>4iM1Ñ88ÌÚ7—U¨ ¨LlÝAÖö¼ç?½5x„fʶº“_Pê…n„ähD=92ÙË/¦ô,ÏXóÀÅh³5“~¤:[GK )³ý­‡ì¾†Oðz{/Úä1°À–61ùÅ©÷Ç»ƒQì…XnÄÖÓws@Kn˜Ùò–­õi#„¦mãj}¡š©õÌÜý=!ÁÙ ${ é:èðc ùexC[=µäÄä'vä8»xÃ,8èÐ6$¡ÌXSynÈMÒ¬ èXɺ£ÑÖúôkuïä ˜¶µÈÁ€®0ä0 …tÈßaÇ]Fm1£ÀXò‹ý‘Gµ? B~I7²ƒËS%¤5“i-Á’gìM¢0G0O{bÈ/¡MX‹Öt÷Ù#§ÔÖeø4MÛÛ«˜l²{ÃjžÊ„M~áM­EÑNw¡Ó„ñ6ZæÝ“ņî…yusn4¦Z“ÌVÂù„JÀ0ƒÂ:Èd‰ tè2|¼çça«‘ÚtrâˆÆ’_‚Q˜2§* {GäÚcBóÄC€!4Po/07fô²uÈdi–€€ÀÔûœ6¦M}Ü2Ú×>kÁÂý{/xáðÉ/´ë€oM ûœ7Kž÷úg•@÷?ðåìÃZ]tÍ4 ö_^š%ØàÙ8!`ÙaТŸÓ®› Ø7-Äê­MçAa%¤õø k©GU‹ìGŽE~!¤ Ý{(ùÅ>cÛ°:¬Áœ %žDK—X‡¢ìQxSt­¥MU¿ÀwcŽöO—üÒ´¿²?ô$ÂÅ:2¹ÂƒðÀü?ÿ÷uoxãHsuJ±—%¿¨ÕKKDÕ3áTÒ))‡Õ%û›Š”™:Ýã)·Q5톡(~žµk{â  iÓ´¾ý-3Ãñ|MèŒí ä¶o>ÞF7S…‡’_Ä€&0‰S£A©.9I'ä—&Dã…`ó0Ó Gaz1Õ<™­}Pt#Ú±6 j룆Ïå5kš@¬‚À~ÿâ—¼l &Ŷ2y²–YÖdÉì_ÿ¬ü®!5Ô£7˜Âdóòx‚ä@~Ùkß6Å ¸‘¬­˜g›ÂÔ¶ÎE*Ô³_&@ça \ ¼x•ƒTdÏE·hgeŸv¸ìà#‡ÎÕr™ÉÔ³B Fž¶øš5Ï*)‡ý¨Ùþ#• ÷é8ÕÝ#d’Us÷z`ÙBh3´./$ûœ½Vh !¨G€N›O+â<Ъ}ÖEk¹Â=äˆã†õ³m„Q0’übOÌh`Þ”£¡ÁdÕÉ=zºª®ÃxÔð«2S$d¿äQÛh›OOi|´{ jïd´ì¨F£L8!­º|_ ¤%ÒØ+]#¬³´F’_@%‹Òï&”ôu±û=JÆÍ?å(¸þð$ &4sq,bXÐb&úŠ_E>A+3[!žS‹O€ïsü}ÆÛx€« ¥i›W¼rèqKdf¹9*'€Âö)E;Û8Õ= ¹ªw†ì’_ü±´áËË+òK& 1Q1«ËÍ­rÓÔ¼ûkXçôA@é¯Ì7éâ…„ÌœÀ4é¡­:éŒÊxðl3&¿ÌÓN½û nô”“È‘SÌ:fÙX=í¨äæ’-ˆ¦Â& QìžðB|*ëïÎ3¡Ï*ƒu_óÚ†1Ÿ~q8¶¸_f4ù…6 éÄ-aD‹‚_A×A]uRÄ)/IPdm7è†9‚6²íñAxØvnCqEA œ[¤£µÌ|/zç{{+W84àEÕZB~á3f4ùEqÇ{JÑ š¸!^Ï(¹Ò_8 7G@Ά]Ì´Møýí* u™©/iœxTþcNä&«8*ˆ‡rôÁ.H ){‚^P²æÌ”Ò!…&‘•ý1S_hÐÏå!´¶6­“„må²BŸ°<Æae-#AÀœÉ/´©,î£Af"Jrnã™ëä—“Ní]{ýU 4ÉÙX“m=¶Ì¹Òø•6[k©Gk˜Ç¤“Ê<ýÌsê‘iœ€Öž5(x™óä—Ôò™…\ŠºgÈ/`)nJü(`¸äò2G}г<=çJ`¶ÉÛöË·ßõ½«¯¹¾PwŸHÀP˜lüóF~a® °4ØÝá¦sC^WhEH-¾ñÖ¢Ñ6^ü³~©:œ»ï{¨_î-¼µhüÜ5”òv³Â²óó6ùE†ZšR0@ƒB)ÌìžaÁØ(“^dÜM~YT² ;í´s݆|Î8³ô{ýÚ–Ö!¿Ü2çÉ/°6"‹4«Ôn67>îoü/pp^Ôp½L~ʦ‡%°¾Ìç["Žy6ý°{¦“_ÊÖök³‚ "¿ Ófѯo!¢-uÈÌ‘\£Á.ù¥È·ëœ¦LL'¿Xé ‘A¶ÎHˆ%–œ«ð’P`0Úhä!ž§+ÜsZq9žI™–ò¶š™:ÇqN¦žp›ù…÷1-I1¦–€y;ÏC‘fÉߊEE2›Ää—éä©LîL~ÉÈ›DKƒ<¨ðS! `[=C°½Ù_º“_dÑxE `û§DÚ °Œ`ò¥Îƒ›=ù… Õ±þäv™i4ýÿÒä—-ä—qÐÏ-ä—™>¡qï/Ç ­ vu? KÖïz´ÐÿT¹î(__/{/¹­ñѸϚËïçD™˜þK2ú§K2zuâñâH~þ‡F!Ç4¯Î¤Ê²÷ÂN¤F‹ð«u•™‹PëÅ\K˜·¢ÜÜ%ôcÙ½í‰N*B>ˆ ±è3–üb¯”´V‚Èh8?{F_ÀdäoõnÎ -ù}¯iŠª¶÷xUžH-Cp.’Jå˜YóʼÚÙ˜ñŒ×¤–þÖš‡€Ú©ZRÌ*ëò‹ŠµäWšýiݨî)ª|ãÀ&Ð.A7+ò áÜ4¶\^&Àô+F…MwÒ`ºR*ø$¾Îä—MšüB.³zaé–Á(ÝœJƒ.aÓ†‡#Qæ$#iØ0åø™äñF!¿@Râl¸9ÚÿÊÚ#¬3gú4‡"Ÿ^à•Úð3çGëfÁçÊÜ’À֬͛üÂÄƼ†F¡é-íé +”™Ý&¸¤=çLÙ'DGª Fñ½ÃóB…¡8AOûŸ”ƒºÜîz›üâ©Ò`!ª l8É‘ä,ضԽõ—±©Ý.£„LÊŒ·I:%­ã2$ŠS£òkwÒò¹óJ~á44~7é]ÐÙ~òKw´Mæ÷0ýAºü,ÚSàÕÛ*ìyylG1&Œÿe´"˜>¿û»¿[×±4˼‘_Ü 3!Ê‚ºH—3³ á׎¶YPr¤¥•ñ‚½z{/ܯ·Û{õvÞu÷ÒQp§Þvoܾâà$/$q-aŒéC@šû«¿ú«NH˜¨¶&ù¤y#¿ $Xg˜=i<%B8Wèl‡>±÷Â}{+Ž^UŠ?·ö>Uúa)(ð4*E¡P|ö‹¹ü¾|¸·üÀÃJÞm Fç%µ’E@ˬýèGëpDh>ÞA›#š3ù…9r0°=4i7DÊB¢7¸ô¾-%€³ËäÌžÖ°¶u3kÄ—Æ Q²ƒüP öõø‚ Ø£hüª«Þ[Ù<ÿú¯ÿºŽ€ÿüÏÿÜûƒ?øƒš*QMƒR°š3ùöŸÑ“ÍhûZ—b4eÅÑÇÕ’]ÐÊ©0g²„úcÚ?Ø'ÀR•ÕÂßB‹ÜtËežÖwŸ6ææOþäOj8h ü9}/YÍŠÀœpJÞh¢÷:a]¡÷}W®Ô·/1 ûâ5ƒI_ºÿòÞig­©Å×xS|e¢¡H¤²ü•¯~³éñ@¼G3Õi…Ü|ð¦ÞSôí*("ƃóÈbZA*ó³žüB(³W_±)~–5ÈLlô<(òË™Å<•ÀiAÍßZk€ˆÖ#’ifÌ `Dú.û½‡¡œî¢Qf ¡UKó×~¸÷øTAeϜʎ Î¨’Úsšü‹eú SÍô¥ôÎQ†[uÒYS7uC½Á J7PÈ´!VJË'Uæ6 ¡™*p~„ΪTŒ÷ÖíM7×½Ñ:ìæm ,x˜ù…©¢11×î`”Û‡~T…‰A&ÃîÐ$~БÚ£XƒéšT„MPZ„YWÀË*Ø*kɲƒëZ”˜vwD›5ùE“LN§ËSŽ™.Yº¼° Ϋø9(,7‘œQ5´B;´²K’ÖfKk¸6\Åg"ëÔ³.èýÒ¯<{ ´ÉŒ 9còK×Tm%¶ {`Ý*J¸vD§$$m¨äé»ÑôZî6”¶•„?I“ÖªuØeøä¡†jáÞ½×¢¥¥ªýCµi[!äŒÈ/"§Ç¥îì÷’âMƒŠt°©y¥U¨,€%æÛ¦2}¾ð°d´yRBz0éÛœ†ïyõ¿/ÜÌQs|„†Î¤“_l¢~§ lÓD3épà!+*äì³Í8³"&™„#ͺÀ;CN N'·à!# ¡ü}ˆ5yþÇòCŽêíøöÝ‹&ÿÝ@m ÖEJ–‰È/Ö Ê„H'{! V*}¹ö/äötOèÓ'@C¡&™0Är’5Ôrºf3[ë7& Soã¥V×Ïô÷éÌ7>{ñ²CF"Dì›–ÕXò‹}é…<*OêJ¯mKÃå‚É¡Î|¯ €S²69 `%_óÀLÇz‚wN°ïBú” ^´ôÞOÿ?3-RÇ … %¿p0N˜¯Ã]3 ³Àzlô†•âfB pX>™¢äæ!(­ÑFým„ÝãлˆéFüãh2úYÆk4ÖO›!Ò?‡®3ù…Í›5líx›6 ÆÃ[KaZ^ÿïk^·íH!ÅÞÒ#É/"9PZ´x»‰§Lœ¼_¼ô€Ê´i¼õ5Î!<‘˜í0;¯¼/ Š[­Q}Èlþž°Ýµè3B‰B~q± W¿f0‚9ÑçãT4”ü"G#—b-†FÈ-.°ƒŠ<ñðBÂŽsS4›‘64’§u‰a_ÌàM |<û+Sä¨É{iÈúWF”¥­àI7ù…óáÑœÛÒ>#Cÿ"ô$B {ᘢ£“c“=Pð-3.Õh zÍmSöî}Çáí&ÂÖ•ÞEÕhM +Í (V6sþL€Ì äia¦ÂF¸Ðé7ò "`—ü¢ð"•I듌¥²å(‘³Ÿ¥<¾I“_Ò?NzS²Úr‚ᕇ_rT²çà»Ù‘_åÃßHðÖðÖžüŒ#ÝfM~!€|¨Ä¯8ÕÊr2Ï8òK@÷¢”Õ¬]›úÔ†-ä—q[Æza û§[&¿l!¿lÆä—L~Ù<ã&¿þ D3²Ò)‰I7ûÉ/]ð@XJ ¼™ƒR%ÌfK~ú%M‰f=3 D84 N6ð¾€_ˆ'´“çu¦)1ñR®xúŸSŸüq©Qnm(ƒs¤^þ¡ü H¸Y˜Ø0{€òå…Â2Pvð~gCQNÆj8BÉ"{û¬M~ò‹’‚¶6h€‡Jóú´—¡ „L7ezYk“IÖº•jÙèäf&*ëé[{øX•hLT–/8 €,œ8Ô=!I¶yÓÏwcºÌÖš¥e—´¨Ãó!¿$ÑŒ¢,ì`­Á©ØzÊܘ(!áHƒÝÁ(ép(Å(ůÀ!1w 8ß;³òÐëmò‹L€š3¼¢,”´œæ»“_Ò/ÝIÃM!JD¹œJÂî‘ÚUÀ(ðêÐíï f)Ð,§äÌêwóJ~qðµ^h $-Üh‘àÒ3³ xجA ˆ€¡/e¬ %Æ\Ž[):{ ¼fi‹Ïð"ÿWh^É/ˆaaÒ ã†t§/e0J`2È/»í¾goϽ÷-˜Å¥}jÁ"¼eÇÞ¶Û½±ÎLW~Ëh8œH«Ç $c5|Ëðl12å!M–\6âÍ´MxÊj“øŒ ̨%ÓŒy↠O,,Ín9®$¤¯º¶T­JçRøüÃÕ‚«ɽ÷?Ü»«T´.½â½½ƒ;²€^Ûïn¨zÆÁøìÿñ?þG¬;ÆÐ"kŸ£šò f+o‡§eñ‡‚YЫa Ú¼.ZÜ;÷üKj9N)N‘Gý#ˆeÕeu`Ô(U·>vû=½£ÊCyeÁÎÐ2øÆ7¾ñ4 û¿ÿ÷ÿ®—gPÌ™übƒwñ >ÐæíºÜÊÏ*9ÑÃ<¶÷þ>VKwŠªµ¨3¥9uÈT±Ô+}¯ÂÕf|¡nýLÖøŒ/?ö•§Íñ! !)Ÿ-H1ýhçD~šY윎õ v× nÈ©gWëþp9­ÊüùªIuGH,š€W¯¤U?÷@ð€úÁÒ î[OýÑÓ¦1ýÏÿù?û#á$³=ð9“_lÊöCÛGw~V¸!<¥€‹”ÒƒÛi7zW­ûšP„m£4¾Plå¼6£ #nÚ˜›¦Ær|¤°|¾S5‰ù² Ž*}ºxì$·i×ÏUÞJ´? ³ŸA× Á¾# ©ˆE]"µ5v€aÛ—öVžpjŒ’‚•sN£Ì/”&ZNŠ€Ö#!•ÚÓßÕ×þ¦K€Œ¸º`Ô¿ó?î}ýë_¯žÖ6ÓÍßJJÓ¤ _ÐÏ„óÅC?‘¸» ©…n<ª¸’ö¬CGšA Š.a¹Ú&* ¦”`y ©hÓØ@È6aâá)°Òïô§¿Ðrë»\¬¤Òž>]NwŒÏ]}áå½k¯ûP/«Iêé j™?÷%P°ÂÙR ~àÇ%¨¨í5ªúu(M«u¨?ð¨N„åpœýÂÏŠ‘Ð ¥àà'äê*0!¡"•¬Oë’–¢½LÉÌk׃€áIãÚFaòð.«0¶•'žYÀJ­YôôK“UÍŠübr‚@MÉLr8L×Ã,Í‚ÈßXò =å¦h53}8¡ÖãÕ6ÒL6åu?§EÀ¦6jê†ú€|Ž«öZ.8;qŸêý‰ŸhCr»­e¤<11ù…GuÌa¦4šÑ6 Õ/Ù¿wXâFHt†6£áà˜ЮoÜÈwဘ^¯¾÷@c" ‡äò9@ƒô¨XÜúמ;P›¼¬À@?1ù…€"BF@L·‡eZa 0¨  ¾vÁ¨Òhk2}Y½ñJú,‚ZsÖ $H„äIÛ,­*Ì,íÅ}ô%AÛ¸SªÀ;ìØ¼ç ‹Crˆü’¦Ö¢#SLÔi@°½°ðB]±ªâPaPáËseNÒPa:ag4\°<¶ *€ÁÆî) ®)Œ+AYˆ‡G`xôe9t¾–²¿cœ€e$ùÅ‘ÆVaËgŽ oÒû-^ZÑÊØpá®0 —ƒ=Gmr£´Á)Ñ&“Åò±¥ØjX„MA³ƒ~ö·0®®Lžh‚ÙûÙŸûù¡Úܳ¼‘äB¦)‰È&½rªw\\à)ÀïmšÄ¡S´‰F QæKØvµIœˆ5ÊÉ0Y9,æØÌ~UÕaò9ff À¶/.öy/M~qü"äPò‹8Ù63e¢]ò !—X¸P…Þ@@4†h²q8ÚP”ö3SøžF@¬áXí™ô½‡Ð&À¬¨Âd¬ êïýÖÝï}ÎË_1œMþ=Ìvà䑎’¼¨ð€éº’Y®•áSÆÛ¬+à¡õ&Btqc´Ü8\«úö3ÂÛì½ßgxE„ÕC8ÊçÄaÍ&yÕ^Є³©¬¢}¿?õ,Ç2ÃG¢ÈÄP¦JƒéÛ‘¤“#вžâ…¬¨7Ø&¾¬èߘ'N€Ð'hÂ{˜$ xRë0ïõw„ŠÖò5i€Ü+_õÚ‘€ (]IÕ?‹wTt=û•Gã᡺£m$ áx8€üs&JZ í(¼Çp<ïí™mãumB9‡VA “ÑUy@1Qd›fõ^ð¢Ñ½Ñõƒ–S8ù¥K~‘jf8QFÛHíRRË6!­±á˜Y÷UP` )[ §C@ǧŒImQÎíuô8 •“ò`Â9ñ?°†šu^-æW·~ÎPM&Äc…´8tò‹}R@.ÉßÌTüÊ©W„ ½˜bãS𡵦:7ŽÙ#ò! °­;Ú¦!%?ßoñzˆ¢v8!„Ëz÷ù‡”Q?õSÿe ÊòNJ¬p,ùEfN&œ6¥ »yQY5¹{óâò­7IHÑN(¿ÔdÁ*ÝE;¢žÌ!ÈÉÃ:¥uÉß'’òš,{î³x(ù…“±GΈüâŒ&E›a÷dnȾe]Œ‰¹‚ ɺ“ ˜9wñ6îñÊ"ÖÚå"Br…ëÅ|ýß²âøÞK_¶îY²ÞÙe.fD~qÌœ§]“Äo’¿„=ñÔ³ê?e>QB›”·î¶|Ý©/2LÖõ;çNgQÛ “ZÓ¾öZÙ1ÇÕ¢¦Œ0”Ýú,½ïïŸ'õotø ŧµš*“ÃsÀ³IþB.¢ýž{a;óu‰/4è,™I¢bV@f6ÛÓhk[ópõ´„lÄ´«úS™Ò»ÀyÕú~ÃvƒaÛúÈ«³&¿Èhß$(Èäg7yÙ¼à…½Nn3³rhÎÄë0ps¼âhŒµik²Ñ™hÓ¡ÚƒpÜJn'1mÍGµrèQDÁKLuV“_x[©…´vò¡¢#sC^õªW÷N?»ô™+8]LË™¤!iËZ$˜×Ð&Úœ¬[›N%é";àð}ê™çÎä/ô¨Nð·ŽWs"¿¤˜JHÔãÑÅîµõÞ¾¤òßYYݳ£ƒp··GeÓf„øºM€ic=Á>Ê Ó¦ý™æ¢Kß5’übÃ—Ž™ò‹‚ªê“ô=EGbÃÌA~¹øÒ+êfâ š½Ñö Z›!Ã0Õ ÀõPä„\×ÞpS!¿\>tŽV¼*kJS²9‘_{W'¡ÿ] *²ˆ*¤2iÙÄ–´Ÿ±ÎÒK) Â1UùV^—ðÖ*³MÛ©–ÀáÄ“O+‘Më :ìbª"0Bò¬s"¿p>·Þzkõº¤=Ww0J˜þñλìZæï\Už4OÌ3‡€ÉÃfh¼ó‰»ïï]~å{Kµj‰&¿ˆhœwmþÒ¨¸HÑîSc±uz¨2G®9äKÚT.gª„ó´†ïn—A3¼hõš {·}➢)›ÿoUÍñ¶Ÿ}ð±:ùå¾¢A½°.¸è’Þ[w|ÛPè múß« ü亷²¤žÖv ŒÄ¢ö‡‚s ›6i0&*KíXð>lî@þñË_¾Mü²÷> {tpoqɼïX„⥻=¯f‚Ywf”èžWò‹ðnÐMt58“›œë{sX˜WòKú>ªå3•Ìî™ëÍNú÷y˜^-ŽF„Æ’Êvöò·ž1ÃÇ šü›1‰fq€€œÎ¤7<éû<Èè™%k’¥˜>ù¥½ËœYÓ'¿øŽÎiÂ)Â9¶;ùÅ>(¥Á‹&#g€æ8 ®Sº›Ó]¼ÙÖ~ò$ïJ[ÌH aENHBeɕԉƒì¸‰/<´­Šù{HN¼ù&O~‘·%´ ¼SÁ°¹uŽl»s%ÐÞìÈ/ª¿2Ú²h„Ëg~iHbÌšÛlÉ/L‘ÆJJ*?´gù…×”¾ïr/·_Ê^=‰S÷žyù-ä—-“_ž“_B~ñ Täü'ÀÅØZ¦w"›—ýõ‰ÚõQUãÖÝœb×Q\"ž34£–1pƒ"!QŽM^L oƒ \ÐS"#qé3†ü”¯ä Ã`®L†5X¿Ù’_‘»Å.Ș iÎ4‡WðUáÎ`ú͆üÍÑT¸L˜L4S'27D=‘&™6ôÉ&9ù‚ /„B‚rI" FsÊó®°{€ÓÂQ̪ô&°§ÕJ~w¢×» Å ]—0 tõ…7m ¢‹sq|ê‚,ü}€ŽjéQ)g£ˆ*˜×ÍÉYÕzµŽ]Œüö‚‚ )¸4¡:ÄÐÂçY½ßÉ"83M Ã ¡NÀ­ÆÏ=kšp„UVGQ\oäk‰ÖvmÒ”nFjxT³Ó‡ u"ë/H’˜é/ép˜ò „Sfº0·Æþ¶£yŸüâ¦1lGkLÉ“ž>7¤;³ £m¬?ë»ìž®¬åQ»ÜƒtGˆ Añ?­[–ANÈÞ,k1£laŽCKnÐúãÚm¸Yá†(HdÜ)•£éj°ÐJê·=_ ­pŸ}˘½K»¨K‡Ñ튉~Ö»Gå >NÒ94Ù@k—µøß–‰ÚŒÄV¬`^È/Á£Ó"hš57”:Á<‹Ý{ŸE½#YÕ{G©¬”ä>óù/VÂKæ…-ÝyO©¼û}½¥¥Åñk^÷†)If¥zFXUd$8ÃP€íÿíßþ­÷Ãþ°ú‡mJÀím9«k_&(à)ê÷-r[\j=J0°K~éN_Âì9åŒs{ýØ'kµ¹;%5I5‘´ðW„UÖS:ùôs vî×kòØš”’D@ýã?þãÞ?ýÓ?­CŸøÓ?ýÓš)䨿L~! Se&Ha´8üâ™p¯ì}åÕ×UØgƒeaª»Y+Ï)º*¡«l©Q¶N¡0×÷*÷]ÿ‘[ªfwÞy— G5ÇÇ$¦.É×·>ƒqù…çÕD-4%¡8¤Ú¸¤pCN,ø€åpÈVd—kšð1Ó —Ó<“á(Â*Þ^s݇{¿ó»ÿcIL9M=ŽGš—çX€dYIr·ë„ú™ƒ2&,bêÏä^Õ4¦Ê£ZðÝñR£œtÚ9ý¶¥ÊêêÿªÎp­Jä4FPÌð¢à‚UÒË •`{®¹þ£ý74™ OK$ÅS󾨈N6¶–Y“_lÀ¢AvwÌFÔÊ“û$€ÔüiÚ* 1i+&˜j+©¹j:xdêÀ­×ëu…ûucïï{Õdÿ×ÿú_µÓ>‡£”î*Ùíg[™ùÅÖ/-fZÚù#¿4¸Ù}¼9à.³ Û'Ó_hÒúã|" uHË.ƒæ=˜6憊vöy·ÜvgÑèÕ½š‰v§À8x{à³"¿d!-:tÙ=‚í¥ûÐ;¶ ¥ ¥àxày –hDHZuãL·aíƒ"RVg®MÀﯫK“>–ç¢KK¤sÚµ¨4½hë{ÛŒuÉgˆ}4\¶¤Õ}D–i¼jŽö)O$c9Lsk‘“éÏ‘,{ᡱ¹1•ñS b hH,´Â Ád:“ ó®õ]n¤5¤`®ë¸ ¨ðÀb5ÊHj•¿M~Á ]0SÞ4SÐ<%g?&`Þ`Tƒbô=¬kFݤÉ{×ùJDPæjÂî[- ÿÚz-_\1³íõÌÞ/lõ_ Ûê>'žübO„Q8(Ú„Œ©&¿dTFpæÁ¼†*áF éæ9!ø¹|¹"B¼ÚfhжÓ=B_Ò$ ï[wÚm *ÎN5„œˆü‚J(|“®ènᆠ¿^†cÅC‡žîóL×ͦ6m6^ÈoWLóåE X{+0Sgi=nÀÓ…ì³ßò¡“_ļ‚ö±äkÏa €Ýó 3¡8qQØÎ\M˜°¾Q­7°¯¤zÙVÑÌõ‘ªÙtÉÎ#^:óE˜©Ïa1.øöÃ>±÷3?;˜ü¢¦â@NÈ¡ä±*§“£Ôtv£ŽÙÙNƒá‡¸h Ü.ð>˜¬QëÉz% /ì!Ð3ä;“`< {î³8䘑äNUiÞ(ùÅ \ºÓ³##ºP&GH ÆÍd( ·ŸT5CXf’»ìCUÊßf¼Mf‡„#â÷«5ùÅÚ¬qt 5’_€„Gð­QyÈ/é×QÆVy!kyZ‡V¼xÈ/4Ú`(ïrã!¿Ä´iÝß1ÿП<˜h/t¦e<„q¼¡že6pò‹Cª}ÆÆ/û–î€Ý´…”ÅZMÒ ûçn$‚¬uB…¢?E& ǃ3²gòªØ4&O¦ÃXÓ´Þ5*FððúöØgü H1I±¡“_l¨FŽT¾NÚ‚]bÆ¥eM.âUåI‡üÖ]ò± ˆZì…âÔ¬I¦Ë¹à‘Äc¶áœ4ºDÓ6=„ç¿ðÅcñB`0½)"úõÏ*R¯!uÈ/qn[ G“ž9™©¼Ç‚=Ë5'ᦚ™­¬ž0Áʃ-ÄWž.÷¼ªøUgû°7fh˜â3}†‡•H«mœŽWŒÏ/ŽRä&¾K~‘ÁÚñTL®4°3y•cVtô‚³Ñæ†ØãxJÛ­€G ´¡(XŸ¯ûc›úÒ°ç Äm„ÜýÉk¶Záoí_–È*Y‹Q!Ëk"ò -:X›Îm2k„ËÜãŽ?µ>mæfÍ5ÂË5¡0O'ˆLŽX;žñѺOŠYíÒ#öŽh¢K£,¡;nªÍï9©·géã¼;HHû$E8)ɤ©BqD[ÕCsIýP4Ï$Õ$0|$‰eÅæk#7*m¸`ϽK&`u½¡­ F‹9XƒL’iÒ¢­C.G6 SDEAB>[ ­û{ku-Gú¤©ÙwgV­¾l›W à@û„œxò‹Ô¼õi[‘ÕFx± }€$Óg¯©šsSá…áœÝ4Û(Ô&d Ú2B;‚Š€œ7½—æ š•4¶ûu}rÄ1½_1H‹À‹öÇY‘_Ô$İÌ4ìÇ1‘Åž{•ñÁïhÒfhÌ¯Ë q”r´"œ5IXkÒ×í˜uO]³bXŒ%$†õ¹Öæ±'œ6t~J5Ÿ!0×1bÆ“_Ô em#Ç)ê:ùÔ’v˜:m.¼48‘ X;„ákýÓGëàòhÕpš)Ф¿g AÕø•%ž-†¡/e „ ²úLuÆä&«R%$ NT!ÇòÊWþz9µ_1u¼¡fêähßLoÛFfø|ù·þ{ýÚ™’ Ì•ƒÀ7–ÏG«4J³'Ÿ~îÓ¦úÆdùÛÜœÈ/„ÔVM"Yf;½«(lÔ¿ùÍ;ôÞñÎ++׊p!¾dþr¼)óÌÌÂùy¨NèmðýmEg˜³Ï»¸dãžÞÔ$Bâ—q6s&¿ØF¤c¢Ò–`¹pÝ—_yu½Që,Ù7ùÕd-†âkšfª¶Âú:ëùÝﻡL’)ä—!Þ”¶ {xê2s"¿Ø3%˜J# -f´CtAà /¾´˜ë'§Â7]“î{ÕtŠ h¶”dê¼¹¶6-í£N«–2jÓçpœ6i-ΉüâŒi¿L ï„€„ 0“_êÓ-1î{¯¹îiýw’LNÏ,Y‚D?-£wW%ÍlWÚ¼^R™€ê2s&¿èn¦ÓÇúìj4¨8dŸêz?©zDµ5ç_\ ?wÔ\kˆ/Ÿø+SNç‘ÂêùLï7|´wιkÊ><~BhW³²åîM`Îä{'•ù!¨™ö0̬R7|nñÈo*Ÿ£Å òË’¥ËJ®tç Ìg3Å«³¦*K¿¬9O~!¨ÐމLÒ>Óœ÷Û³UµÅÔóJ~Q£—¡VEvüùŒ¢0͇0Ã>ƒ7Ÿ6ùåóJ~ˆÄ«þŠEüö«Ùr®&yfY"– _`0Ê8êÄXPïtò ÓUü”È%(%¾œãº¨ÇIn~Ð{äs\0´f?ô@Už­Ái“_CPŽÒŒ›üBP¥máŸu2ÉÐV¬u{⪙²½€› TMªK~)Ø‚]Ç Ø/øLòÆIÉ/2}¢ÁÁ8J“‡am[ãBGBu'¿(øú,«ReN—ñR£ÖàX’è8õPÒqýþ©¶=KÔá&ÓZ-³A™$͉ƒ¥)œ%ÍB~¡¹.ùÅÿ è— 6ï ^0’æ=%ê {GÉÒ`w8‘Y°ç^…³ ’_öÜ{Q%¿¼m§Ò£²”^;Uà%¤¼nJ„T{Ig5Y*Ó¾ê[ÃóF~!¤‘L5ä§ûàÒC@ËúÛ§ðC_®¼ºŒ(Õ®:F£T¹ÖN›ÐåþáB~¹¦ZúÚ×o[´ö’ªÁ°{”E=Éy¸ikÄd™¹TÊœÉ/4,‘9Y‡ò:Ñ •úØw¿%¿snE#à ¤ÿ¹Šs ¯^ í‚l¾»`N8ùŒÞË·iäé{#'Dƒ‚‡?ÿó?ïýó?ÿseùüÍßüMõ×¼_l花L\4ÜÛòËŠ£«ðê4ÙS­¢9¥:‚©h¥Ï+¡3&íPÛXû{{(˯S͘ÖC(ƒŠÂ ñµE´™$7³,”µ½N¬»N0€i.er©¢—L›°eˆ33…pÉ×€‡®*H*uȵð7ÜÀ¼VÍD•‹ òµ©ÞÃSh‘ûKµúÎÞçœß;oÍù}ŽÖt†!íɼµŸggÞ³"¿ Áà%Ó¢}+k™Ú´µg;îÄÓk_“K¯ÐÑf: Ò&a™g+ζš¾o`¾PËñNkÙx[ï÷žüƒ§Q˜þõ_ÿµ÷ñÕB¥xس&¿$ØÆÓb®Ýa²ÜKKw{ÍeXfh€ù*`Ð¥¸Jа ûßžøfŸ’¯~®¬žî½ô9š÷}ïûÓôÿñ{ßþö·k)R☬Ye‹“_˜©(#Ó9›î`&rÈáGU<]»à)Y0s4 Ï“f¶)¡7Ìãýy>]!9*$à%Bú¬[>þÉ*$Já7¿ù͈Øcsö”Ûµ¼f<ùE|*6e¦¢ †€f¡/;àÀ $Lçk¨HZEw@}Àó€azñ¬L4¼¯4×…÷U×Îði (Ë îîKe¿ ÀHáÕy“³‘ϵo &&¿ˆlî¹çžºe¨\u7ûÆr]\È(exX4 ¾•6 MP#¦ ÍA¦tŸ2Ñe¶=3ˆI*³CB€öòÀ€ O?kMï-%ÌC ^z°O¦åÆD“_@Ín¾ùæ„3Ùî4zR¼éE@0Ð ¡3À„nŽ LœKkwúå>)ýМÒé7¦vóOÛð½d0¦GTÄÊ&&¿p6ŽJXág…Y©&¡Áº¦U¿W€\? §ƒÙ‚aã|@\Y›mÚƒýÁa4É1ÁÕ’y¦¡4!Á΀|aí<¸í¶oÏé—h‡#œˆü¢¢dv‡eŽ$ ¶Ž {Ëiô€çÁ¦i’^Ü Ñj4ÊÜl ´i_„é!°µ ffíBHÂ饿¿÷À|F Üql©¦ýǧ ©p«¼Çd%ÇFN~qtøuXÍìž FÉÜ}Ëz\zà‘NPèÿîFgjs}dûì ú% L44B!ìiŸ‘!H™ dÍ[¿0ž-‘¦Æ9’ü"â÷¤+¸h§‰0|B|©ä—Bí%Xf‚ÂÓhX¾w3]êCø• GË6‘áD„uÇADP>Ë×–âëç>ÿ…C!1–!G’_¸`ÎÆ–Q£÷}‰€Š­x!]â Y즼"ÃøºQ VÖõê=4jÒ Ó ËÍgrL¶%fOèL¡]_oóÊWE/ËÛJ|QÎHò‹³#3§“qÃw*£vð¡m8‘›¢Í6ž¦iÏ÷{N!½—¶™µíÁÍz¾÷u¸_uãóhÔÿaòyP‹—Vúl;T“JøuE~±p©äGm%éÙAƒ.éˆC_ÑóÏ2Œ(ÔBd°P&OÄÔ˜|¹íÄ)„C2#lûŒUÕBBz!8íÕQSåòðí͙̅Қ<¬¿¡UÛˆæ3 Ü<¨j™€‹–Xj/ÿi$à:Ì}Žüâc¯»J%Šø]}쪓ª)²É@”¼:Wfª¨m#Ý"˜ª,€uÙàØwÕ('3,3$C‹ââèî·l,¢Ò}NL~áxôÞà©" ¤‘Cê²2[ËÓÏ<» D’‰=ÛYò£uÜ‹YmLj¼ ¼cÆöKW˜ñ8YXd­ûzÔä§‘Ìu–ùƒ»Ó²¸È*uŽÇ1Ôì3ÝÖjú_VÚ/àÝ|ÈÙ«/ª§†"<‹­;Ç'¡ÁàΙªW߇Ã!YŸ*qU Ĵ“jPPù”>ÔT™¦“H::I‚M4ùÅq‹ÒìKÆ,ìžÌ YXjg­iM˜§c•ËFÏÉ´Ï}ý2í™ú’æ&-òi£mÂÀcîÖ7Ìt}Ÿ™[Û¼røø79YIµY‘_dÌ”p\÷ÉnŸU¢XS4A‹N4ØÞ:?¶ÅY‹ÎÈàLÙhN÷O‘Ò®ªŸåôj”µyü)g÷Ì»FD³UXR²ê³"¿(·) ФÌvæš§óòË;.k‡cë‹p.kpr§Û†5ù•¯~³?ÅZ¥]&k˜m“›Ç—\찠ܺã !*g=ùÅz”IJGvë™â°ºÃ[ÞÚ»êšjf€n> ƒà±j²æ÷„QÙ°³ö€l5^­MÇ.Nì´’ ø•_yöPÊ¢”*hQ6¼Í~‰PÊ OŸÓÌ !X°Ž-]³Bh’wõ3t¥o²=Éz å+Ë øOÜÝÈ,4™T#Á$¯"°-D’™©z -eyO}¥Å~s…óßQ’ÄÃçhÙôÅÒs&¿8i›¶?4lœØ0c5rë„ݳÎíçmh“@ÌÕ23|Seξo̻۪&µŸ:팳Kd3šÖ˲òç…üòÐCÕX0³{2·G³‚_‚—†0䪫?P× Oš±o^ Ô/­‘÷Ð ­2Ûw^¡ßÎc7|[†33ùE)Íy2q!ñflÞ¾*>„Ÿ>ùÅï„\tiïw}ºj—€ýôg¿X&¿|©^7ÞúÉÞ‡Ë x°S1½I9"8GC“’ks&¿Ôxµè€.'„ Ö…§:̽{8‚äçS~ÛÛvªä—ƒ.ù å”Àÿí½—•ŠòÏþl›03`¾ÈÆž¨š5oäñ«³¦<¦°2S0ýL„õ^ÚyÑžèT4ïä‚ Ü9¤`hs¾˜äshŽ€„ü"õAXÛËú˜ü2Hh'Œõ>ù%ä—îä 0Õn²I´2è=Ö'/Í É§rn™Ôkóç6 ùEРv)‰dïœÉz%¡ìÁN}Ù¶•éÙÖà&3ù…veù<ñQ3¤ïsŒ“fñwJõö>y_[„PÍá=›ùÅ©€çdŽBA£q§d°3,ÁD/ÓÉ/¡ý2Ñ© h·N œñ ŸîOB~¡ñÀ.û­¤u½^ –¶qÌ™: ‹¬<$æl¯5ÃnЈ·Iž%9샠,tàŒ e}¹QiÌ4E©%†"  YÊI^?cÈ/ÄòK›“õxAcm!¿L²çL-œÉ?)km«<ìW<íšr𾾤Qî(ÎèSåºÃ`z­«ÊÏý~«™|îLß;'Ç3ýŸGóÓå„°Z—Ñ‚WýaøÖ¢­# ¼Z£"éCÙ¤FÍŒ.Boz\-­ŒËÍ=Q²?&—"w8ÊÂIk&Ïä—_R¦'MÊá(.©¢9•ø<9¥ J~ÁÍ Enr&Ìĉ.7$8  &b¢Óp2QZ$ SKˆ/ò½ŠKx">Çÿ€Ö´Æ×;ù¥Ë ™>7$pÑ.u"Ó——É/¡/¥Ç•u8$”ºJ—"€Póàq™˜>ëüxÏ©t¹!á?ê´]GÛLM~A|Ù£ô 4ùe·Ý÷,ó]zÛ½qû’[ÛÝe „Kë8¯™ÔDH¦+ƒÀ’<¬y#¿ð¤„´mèÓ¹!ÂATVú` dôﺺwë'ZË6…—RBÐ]Ÿþ\ï½×~°·ü Ã+ù…Ló¿në8©¦ËK¦ ƒ‰ÏËäûœ  7$ë°;œ¨~ Àð„R¾ú®Õ*5H ¥F~Qu~´¾v¿Vñºµ¼÷¤RBÕk^×ûµ) “=9CéÓÆÆæ@µíͲx„ðKcêI2ò¨e ¡¨‚úmô6u$ M^A“µË !“_à°WEnT‰/ô[wûK†£”—vþ)cq-^Þû¯¥}†“‹ˆCO>È2ù^«2avÈŸýÙŸUÏ›u>'ò fs‡ë‘6 ñ““ 7då §V𸠘 S\m3CgÓ'À¥Õþr¿Sh˜´ꙫ{¯ö•êË’¾óïôÐ%º$ß#£rjÌvÖ“_ÒÌTä"SžÉ/!¿,-íÙ Ff€ÅÁ ¤×ô‰LPZp<šgªH3W?W§¤iµJ’K.{OïsŸ°÷ýï¿jn:ËÇð".ëTr{V“_àÑ c°3ùÅ ËÕÓC~2I!(̹šJã°»D‹´×€K­HÛ8Z÷Õ&-rR‘ó¡oëýÕ_ÿï~ë[ßúÿÙ»ïxÍ«ê^üþn11Åö=j,(Ò{˜˜†6ôÎP†"  H,€Aì!H Š%J,¨1&$¹˜ä¦p5¦\Œi×äþá÷·ß{ŸÏs¾óÌsÎóœ™3îüñ¼Î™ÓæYßµ÷Úk¯õù¬O;”>Ý^4‚Ôi%ó%Jß·ZÝÕÞ…We[Úõaï¡ï12K4Kiótö­ä—ë#CnÙ2pÉ‹‘<ÉЗ2 Õ~d|„üLKÜ2Ð ù…'q´þñÿ±ûýßÿýZ”Da×´9‘_x Ã'íÁìÃd2 gK zŠƒ’ô9Hš¥Ë£< b)¶q‹m'èX²>2PpBc²¼žwÉÿÊWï«ÚZô´Üb¢à­ÍHÈv0Ç*¿¸]@aÙƒnžNx’9ý!ä6ÜøŠú¹Íà•t”9Ê ô²,3¹×2ÍòͨÔ6ôý5xEÃͪ¸òÝï­g4C¤‚Ž—´!b„¥ë£R C)|ß;ÀÖ):©Éżh@&hKø‘!cGÇnñþ –6 n@¾€~ µO¡½ižá¥Ì~ e"t&{¥ª«/qã÷C¢9iåÙ5Áкî±è>ë¥ð¦ãM¬_Z¢m*fœÃ\HöÄx‘Êú¹M„Ê{PQBÓŒÂDx’gý;Qà£`îr„0’M¤èκ¤ý .ÀÄìqÁNáívÜeÏ‘M$FJ éˆsGõ $=J]T ª&B¹èò&ï Sy¥k{–kÓ⥠8ïÅX¯¦#°¼~ ©!™Ï©͹ò‹å*ÈD‡ËðõpìiDz’ è÷§Š‡FuËrÏ«üâDRÙM–hTxáÑ%Ü öÞ§Ûq·]+ñeqEGÅRõy€ó–±7 Õl1*؟ǃ²$ûÎi­ª{<Óí=úøÓº_~Üã×0R¦ã*ÚŽ%¿8PIi¸é7èÂÚGteª:’…Œ¹hIó`(Ø8Ü7>HÓ`¬‡Á£ žÐÊrW¾=È{0tBÓ&ÏnZöž fuø?f"¿HêÝgÇ’_D'×ûÒŸ™×a9H±–¸|@_ þÐØ7íÕˆ/ËëCàUËhÞ´¯DRð²HÛØÃ9k¼¾‰ïÉÌ£³Q&œã®_cÉ/²|eCddœÂ’— }Ð!Í; ÊòŒ“½Ùˆ- ÀòŒ ù…Á¼áƒ–¼—Ïç÷ÃTÈÏD¶ã¥/ÕŒÌ;‘—‘¶ØŒÊ/<éúbɺΨÍô•_Ôe<øÐX"GÈ,ׯ¥lêI<ЇXÛs’9ª}ç÷ú²7ý‡Ï1<) t`÷Ò—ÿúŒ¸!÷Í\Æ’_,YY…5òK Oämš,ÔqõÉ[b–œÏ–TàÕ² Q’÷ä¤Ú~&ÇGË›!Y ù¼O€± fS~‘–f,ÇXò‹#DEÎ]R†ŸÁ@J »þ$/y>26ê-<$ü3 ÉL]Q“ÐêC¹Ç› ƒ@€Éßʲ})EâÛŽ»í3#Š9ÇŠ(먛ˆü¢päÉ“ŒóRt2úÛ\ÑÐrt®… q”h†ôÙémº}«ÈYUBQÕþÎC³y0F3P´ÞkߺG—tm6 ”‹6 ÂÄä͉pämB~9îÄS+ÒŸQ!®äsIyR¸¡FQMð­ ÞDQˆ÷– ÇŽjLÈߌó-áеw[0Qi/*zyrÚY•_Òd?’‚(¿(øªî¹×ÞÝʳ/ðBÜQ®®¤—,Q¹jnø ®Y™d1¿HÁIßìigªÀ•žLŠá/}ÙìáemòV¥Í‰È/*ôÐå¯Q~ÉxyyRg¬j©—%uBøqdú7Þ‹C£@!ëñóÊ%¡ÚG)QÍ2Þ»,ÕÿþßzÖ¥œPÈ/¥ƒ=} Ѷ–]Oä¯.ÍŠXf HxGU·sϽ°)†ò†äÚl‚(M„(wGF1®©ù~ap—Tò;~_ÀxÒ~oúw+ëÇEKé^þÊÑçcø‰®„2³L݇$\µôèËÚý‰0Õj%…dF:dͬ »Ç­Eí¬³Ï«C…x0³iâ‹ÒcÓfVê°¶wûH©ÃÃHîjÉ'B7"i#pï·äÀr­ßÃHiÎ±êæ¤übOêR¹§Yã ŒòK>D.¸èÒº<›Æí5¨¤œ=ãšÒGXx ´‡*+"TC[ ¹ì¡ÅÐ_ø…_œq™ª¹fœx¦vOñ´V¯ñpiq÷òLªÖ6Ó<5.Ê-•íT·]ͬ{©Ó¯ÿú«*'$“Z—à”8ˆ£…’;¤û¤¥Êûëc]®Ek¥ž$3þìçÌÌF÷~¶ÖäËTKÿÃÍp.å…ÀV”ïUË®*s††›å£€Å—ÆÓ¢ðÛˆhy)y0Ô}3ÚÌç^xY©»žÕ=ëÙϙуâ‡Ü:ÈʵV~ÑwýŠ£ü’ùUÎ!ô 7sÞ=§(¿|裿5*4M|AcúVM\³<€È[Þ›!Ò^üŽ«»N>­®”™}ǃ½§U±Îä7OLö ’ïÙ¢M0P}Èψj;”ÛÊÕï¹®Þ$/ 4Œ Ý×çÊ!ö±pu‰²g—‡´ý;ŽîÛ&ͼ_·á9Û=Ýéô¥mäéòu*öo½øíÝõEù…·¡;~ûs1ËÕYzÕ5ïïN;ý¬²ä_]Ú8ìº$\r’÷¼_°Ê ZÛÐÈžbàÕ>C>ÓtîsŸ×mShGFÜ,[vPÑyÞ¯äÄÛW9©¹R.âÅõB~Qï4ËÑhž E“è?@y4UÖùE=¹¬%;n‰Í×÷m·~™ *“ÿÛJ*Ajý(¿ðª¯‚—óu¾Œõw6{Q?tƒ’_ 2ôð]R¥ëÓH{W!ÍêÙhä¥@çé¤ô@$ÜÇ—KBp9›=ÊSîÒ>É¿‰+›É/ë w3¯ž^R›É/›É/ÏøI¹ùß§î´.gÎϨÿ àÐ0jeD6#°HÃ4‰$.·û¾ò‹¡óÒ9 •ìˆq…’=ì•_B~‰ì†²§J½1U°´Ò¸‡-ù…Q¸#*óŠÖºÙ m™çl`®Ÿá]‰Ì&A~Qƒ'° £Ñ£ºt˜ùZ¼„Á£å ¼ Y'VJLÌ:Ãÿ´ë‹ê·Q•_´ð})íÁ_RóÑ.t†Úû:m"3_@^ €¾}nHĉúpÑ:i»`S\~xwÑÛ¯ê®)PÏ[>ô‰Ú.˜&ÀÜSÛÈ1𬝸õWwÏï-Sdn™ Ct›=KݱÃP¥ZDžåg¥3GƒÐ>Ì Øp¿ÅtÇžxZí@kæhËiÏiðµ¨KÓ+hŠ0·ìÎnåYo)ƒ£_VÙêÎaõ\wÍ såQ†Úâ80oÊ/€÷È'ÆûãÁ¤§œxàò# Žà²Ú^ކ@÷Js6 ^ÍTF†QO ´`á’î©OÛ¢èRíÅhûXÔvÞB¦è„[Âö¹|y­É/2)à’½Ø' …²O1ðÐ#Ž€ëáÆÊ“˜<=­t¯è÷DÛG»½ 2ÜS&ÞÕväñEâæiu©FÇG~û§ú§ÝC=Ty"ÿôOÿT·NÉÖšüb™âEùcrÊa¨Õ¡+N¨à%/mpcˆµÇ}9Ó6çQ Ø —ΰ>ÍÙ>ZKsV«ÝÏžzƹuœäã[ßúV%Á 0õI0ßÿþ÷ë÷-á9“_,OÁ&i™Î@{ QtQ¹|¨Ñü§V¤±~?GèÐÊ@<oZžK™1™š<È8ÝhÞšðï«®¹®ûÎþaUaføø÷~ðƒi»9)¿€‚:-Q”¶ + UeíB~”j0ês*pЋ±¼ „ÄÐ?kS{ya\ƒ½Ü[÷kHk™ù†½}ó­Mùeøe¹ÚB¬Jû¤‡öf)JÿDam€ã1¯C$“›*Óã…0ÎKÚÖ7P­Ãƒ L 4jSH‰ ¡½á¢Léú‹ˆ›ýé!0Ô²Ö^™‰¼Æ¥W^ÛÝû•¯ŒD‚yðÁ+ŒÜ™ì¨±/%c•_ðˆ¥M‘YL’ÝW~©¹hñâòÃŽ@³¡®·lŒ@Bár À^H˜vY²ö¨ ä#/ò ýœUßS5G®½®ûçþ—º<=|ÛGjèHqFJ>ÄŒ±Ê/6¯Ü4òRaØ…#ɃþØþeäÂ%˧@~ oÉ tÛ@ò§Ö%,e_6²hÃøg'²2Ú×Èã~>Æ5ñ£Kºs.¸´»û3÷ÔË7>eŸ“)¡V#eVò‹C7ëÓŸþôjü¬a*ý²ƒ¯Á¡F%ÚAód›jÉ`.3oçå\´\ð–ÈUE ¨Ðƒ²ìù<¬v¸F(\)¿•üâ\¥Ü0úZ–¨èå>è£qÝ!¾Dý%ÜèFxrµ_íSAÈtœds(L"/aD .ü¬‡‚\xH9‹G!%µÔÝf,׉È/R6ù©¼°ïÁ0 ì½p â‹Ñú¡F„åC½€”&ýöÕ°—Ãîa¡‡Â8KÞËçÐÍ‹—Þ=æçFÃ`dCi >R@퉒ï®z”±NÚk"”z솔†sÒŒ–kÔ_ö_z`EõG$ôˆˆ¢ 8à‹XƾõË òÊr\âA‘u‰q9~¢S÷:ð`YàÛG†ÏSŸ¶¦ä”¦¯#gU~‚• ëš’…’GäN—zø€ç!ŠF%FGO ú!>±W-ݰ\#m“#ˆAMÿ稊\Îqäïû<ÔÅ_}ÑKGv²¥t’‰É/®Tªj¢jÈ/Î!…§å‡6©çb“™jüt¦W"‡ág¼|Ÿ§ý¬¥ÒŒ¯7RKÓño{š±~>”оœÕK^6º]«à4ˆ‘cÉ/á…&õõ”1<éy£^!¨Äö‡mà 7a”+êž´TE]çªW˜#(DšE¾ïïóbè‹_:‡.Ëñþt°%,cÉ/ê¡è¾**k}nå—çX¯ ¶ }­°æb9çDOæ–mç!ÄCU`aJÕ)ž·2¢ßÃÃ!Á<÷ù¿:#ðB©D-HàK~a¤% ÔâK&í´ó.Űæ)K«qAVÕá…0ÑÓÁÇDs˜ðùš²ñ¬3PâÀ ìGžcÎ8ßgüî{/™UùE©Ä}sbò‹+–ȰòË–[¾±Üü IzŠ‚ü"!¹“qsG½4-ãÁsøKáâ ª„ýdzVFŽ£$ö+y Ÿÿ^Ê£³AhxQ™˜ü"½c¤²`ªjꢧqö ‰ ŠëU$5b`4a£ Å, Â9NüœßÏ2zS²&ûù%™ÕÖÛí2v8®r¦ôDäIzN¿.šÒáž{-èÎ:ïâì…ã ©‡^7`~ÍkÚ+båÒlJã$âMîœjl=ZYê/úÜÑô‚άUïb90t"ò‹)FÒ;{1²6FQ>cÕyƒY»u÷“ˆ».y¥:—á%Ñ ‘g CíO™Žåk¹NS†[Ò_UÒ–:–ü¢·©¼éÚ8‘ò‹ê¸æMF;1Pæa“éyÞdîŒD‘ˆ§†ãÆïÖ‘2G6›öëíº„$Üñ#˜ FÑí‘,,.*‰/CaâI©ÝœÈ/®4–+#û£„i/Ëb嫺«®½¾z¯‘_néÝ3ÄÄ2ú‹=™Y‚’¤Ýr’“3Uäö1J…û.^:k°QìR¡WXó^™RÕRÚœ® (èÑKj¥GÊ~i· :J÷ ¸¡NDùÅè§·_^†òUq°×(Ê0žìKh8aùäþÈ£¹?Zn‘µA~‰ Ù!GSÞp›¿<ê¥%n¸G£ÃML~a¤Öœ'“%ªtïÅÈ”ï_\öÀûnhoöa›n\ɾâKóæêÒM‚ÎH/KÞEÙu+G‘³öèãWŽå†ÈÈ”ltÕ,WbbåE!Ŭõ•_"Žå—W—á@—]ùîC ¢¸Ry1,í :O+9f¹*0P½V¤>ãœr+9ùŒîI³pCÔ£xP› ’òUwËRˆ~pFØY¹uŸ"糦ÚižS°°z‹òKªÛné¢ÚsÊ>=ç¼ó»OÜy÷€²”Á øBCý®–zFÓð>EfÇЗ\ÑyôqU;}¶Cß{‹ò‹j¾ûyP¶‚É›Y;õåxx€aŒU-wû°ÎežR†sùca÷ØÁ·n[’‡kÞ{C]’ö¡eâ‹åÊXžöyÓpnÁçòbèÙEDe‡w ¶eÜæ…üâ<´l]aÔMx1êx6Äë!©|‹¾ï/û•ÊKäl¤¶?Þ]_¢ñ»Kîä¢üòÊâ qŽ]$U±õdæüâÊ¥Téæ-ù¢Á¸@®‡ß`@ "ó¶…ìRkµeÌÍ>e®¸¹VĤÊ/ÙF–©òÌzQ~QŽ7”È2ÆÀ‹Q“¾Éq^÷}]-x½“_ª®³(7îÍÍÇ÷­÷Ú¸AÈ/–¯:gÔèçÃÙþ†€gy 8”È\•¯ÿxub,ŽN^FpdúÊ/PS"œ”Ê÷×—¡™C_ýw£’_xTGx®†&¢:¢0ûÛÒô1 2re‰÷F'¿8jì™ÙŒŒÔ†´È!Xž”;ÕxyÌÊð²,±Ü7åç©þ`˜x‰º¢"ohÔ¤S¦ªf©"¿¨ŸªùÚ}ò‹âÔ&C~qïtÄhÖw%`ð4С—Úh=£È/3)¿”¿¹Ë8ݨï <³ýÑ™”_<}Z¾<òKDç7“_JÂ_n7?)ÇÂfòË\–í:-×qÿ‘éåµ@û¬t®)wÒÛÊ1ðÑòº­|~Mù¸ª¼˜™3îo­Ë÷׫‘›É/›É/Pò‹ÌF$O•D¨*SV–Ùà{²tºv.ÿñ‹yS ]-²èxj]ëP*úäu]ßWô³@ îªp82#¥Q)¢Kˆ²L©ãì¼6ÆÎ9ð”`r“DÙ=ÒW®tØkÅSÀa t¥þ&#ý›A¾§%¨ÉË0(h|@ - ]4BK&´Ñ•_xQÊ&÷40ìÞ{ï­T’Çþmt÷­·ÞZéI€ˆÞ¼GDEÇÌïçaÈiuÐ0,S÷F+ìF²Åùkñêý¥ ³Å¤^È“¨%Ÿ|(õå¿Ô}¼I`_ËNÕ€×¼xÈŒ-ø7Æä!kòª—ºq¨jµEÅ߆äpo´B6*ù…!Ñåa âo“ž)¿}lz°@¨:Ø*€®[a÷¤*A—äË%ô…üb ÚcÀ¾à¢*gÁ¤gÒ6#%ä:¿}¨L€‚K៥ éS'|{ƒ*¿2ÎǾ²DãA^t­ê£®²SÂDö\ø!<˜v_%ò6šˆ­R¯?*jo0ò‹ ÁP`ZÑQ7I³%Üf”8FÖÆŸžÉƒ¡/eÖÝI!õY¿kuˆàë•üÂ(ˆ|Ô07$zŠM–¨ÈË@e§‹ÄÔÔ‹òËöEùe«­·í^ó¯­#á2üOZ©CàQ" 7DÆç‚“Õ‚å³ÞÈ/ ´LyÑÒÉ>ô„…|ä=çÛ^h¾}ÆÙç×–òKØvÐáúÐÇ~«»â]ïíöÙoi÷Š2F‘3ø÷2:.Í%=Od–<0v^É/Ñ+àA¼>Dà¢"ht^iuÜ)Ý%e4[¦¶!¶wÔÖ^Ó$hãûÓœð}ì—¾ü•5Ûa¤³Q{0Ã$ êE0¯ht|æ…üÓã|“‘`³*XÅÀpCö.óÑ«çJo¢#U†F%cPuµtºšN–Ïêç^·Ü~G·Ï¢º'—d£?qÂn¥ÁÊþ—,ð.ÇZ“_ä ãAâ(Ž ZžÝ IŽ€v8huò]pÇÿôIDAT< O ñØK@KÍ8¢($nŠ\\1TKþ´âÕ'=é)¥Ìƒ^ŽÇÃð¡IήFÒJ¦ÈMqxd–P¦=àixóòL@±y2{°/Œ²ï~‹ ù¥Í]ÎP÷6.ñÚŠÌÒ\MÛ\wY§9Ë5­uPmZÎ çeHÜ­_yÒ“+YTTV᳚þæoþ¦€îÿ¹²||î}ºÅdà‘=\È`FÁ ­£ê© ÝzA0ó ȶ£Â2(ƒ(ºÏ> »eˬ¸7P”@ª!9 :€šGo­VH¬ÈÌ|&Àdhs&= ¿wÊég—&ÏÑÝ¿øÅî¯ÿú¯×ÐñÁøñ=Ej{v"å^t+ðËn Œó »§)¿,ì–ppŪBP¥5Ñ…Uõ„Š^ÖÔ_k~"Ä2ÍÜ×FX»kš°Eã:†ñ–Û«çF`(Á@©H]‘_¬÷0{"ùÝW~‰fÁ’V‚wEK È Ðò0 ¡eË{¡I0® Áû ¢}¾œFd»½þž ö{=òKŒµ\ÿöoÿ¶2 x’#j_j+›3`øP㽜S:U -²ÿá=(š…ˆ}PáhõqçkÜ:È ° x±ÉMµ¨Ô¯‰¸ ŽöÉêuƾn$˜«Ë@Í <É{ÿûÿïŽP9*‘U<É0±±Ê/îp–*Ð}èKI¶è°çÅé3»êËž-ûÓ²õ‘ +Ù—öZ}zO]²¢h ô%¸žHÜ0Òï¿åâË»¯ã[•VÈ8wS«J7ÍyêX Pb,ùÅD~AêAE5“)FÒ°ÏäÉiY&qãßA:‚e²½7mùµaïXwm¢v󠨾‰ÆÙÏ0w™µþ¾ëoªl\+ŠqŽŒtѤƒÞ³-æçë#•_ü€Ú‹?ô|`ªÅƒ™°ôà#VÓ jD“ÈÞôo{³‰14 z¦k;"‚–ÌÔ^pm Ä@C—‘Ä9{«PʑǥÃ×Ö¥9Ü"tSɈ87=NUÅíG‘ü–éCt(e8ü­s*–©Ìƒ¹2!…î½hY]š1Ò¸/V Ÿj Gä=*"+Ú{ö+y.øºéiù—Ô&zûxòéçu³Ó¼u–ªVŒU~ɰɷパ–'z¹ð.;hy%ŸEÂÞ³?°¼ï1óVUv´@^Ù‡–h d¸Y ÚÀ½>Í,ôˆ:T²ª§>muÒ÷¦}41‘ò‹²†Ã_}Ƶ&Ìž(¿rX£6ðP°âŒæ56ÀÒe`„ÂùaEPÆ5Ý,„S«·,kxWxtÁ+Y”ÿÏ×1|fbHb,×9‘_TÕx”q¹ðê7vD›"œñPÓ8´Í {Ðò=o´¯¿å{YÞBÆò{8a„[Òÿ·¿ïÁýÚKFóBÜZ\Þ'&¿¨¦©¶)sd^¸Ò¤ßÂÙð†|β㩞¯Y~<—tÍ×=˜ „úäÁx(¡M„Ágÿ·Äã„:‡`.A¾*#ãMÙXò‹ê›â0o*;ÉŒTU[vàÁå?1g¨äœqM3䖚툦r©TÍuÌßàÕ&›ÑX´–|¢ë®×~2#ùÅ‘!o,œˆüÂHžtÍR]sÉÌW×È.í ¾¤~ÎHQ²wÝàŠe‰:û•€&¡q]õ6м‰ÒQaŠ\oFSoÇ]tÿu$¥+ˆü"!ÀÕ£LéqªÛªj§–¹åýÃ:Æ9ï"à'ƒA™ðrdÈn ™uB ‚de0¶©<U#4&»ÂðÙj›fÅ IìˉÈ/f¢¡6å—ðC-^Rß\ŒsþÅ@U€ roÒ6Ÿ¯ÆyIÈíIiûeÍI§¤y3*h–­¥êœ•I9š,ág?çy³iɺrI Æ’_\˜•|TKQ8b`†)C¼õâKëáž—ÔÌÞkz®®Lw øË tÿ¥j¨´Njj¡·ÖüÔþ¬"Ö2¸}êeÉî¹ÏþåÏúURÐ^K~q>jä8súå{cü#ý½dÿJy£ðÿKZ†Ò Ö·×ëTÔ]2Šæw¿Ò¤4|½é4ß3˜Ð˜èM^µ v¶hq1K÷àëßãXq‡´¥L×Vå˜UùEùCÐq¸ÚƒJ÷^Ñ4W­e’³Î©¤Q“i—ß{ê­"ã/Rœj²mÉÚ§Œ%+ÒJÂy2ÄÆ:‹eAŒÜy÷ñ*LÀ†VœnØDä9 V›s'KÔ…:ìž_^øÂuï¸â]ƒ²E+=Þ5 I4&ú× …éÛõþ(øØ“Œt´%å^"µ#(Ç`Ä›K>²ûÙ1Àa'…íùåk Ìì+¿Èr!"*#3},ó«B~±öß\Úoï*“V›^F¡J„Â`ûÒGûÒê,€ìMÝ@rë0WàÏ|ÖŒÁÆíCf#ØÈ³çD~a„>†§’ÙS–¨Êv„QúÕmûàê÷\?¸é[–!»0Üç<šB–"I·Ìc,-[G“„âèãOéž÷ü™³{ÐC·¥TÒ] çL~‘)¬þãÅ@¯Œþ¶Ñ}]á×”ò˧îžAË"j#¾4 u˵/oÃȰ÷ª*Ó¹•?‡w¿T.¼3ag­®ŒV]'ò‹êÀƒ;¥6Z@¹.Øú1^3ÈãíÊùæ½×Oí¿ÖhEãÖ™VH»cPawüTUÑóÞZ©ãÐÏ<èПWòKúÎ Þƒ±‰£üÒ§MT&\IæWž¾ªt³>Ö}䓟®{1šé"±£ÆÇK/Wwìñ'voÚªÕeÆ!Ÿ-ÍõF~³qñ1ʲaP°â£ÞàÏ/[Z;z’Ò‰ó•¼#£^üâ—Ì  o1P-j½‘_xUÂ^ˆìEï8ÌÇ÷@ç`Ø=J3¢¿ÿßj*—æûg‚¼Ìq“1C5ºq´ý©ÃËP…\‰B_Àh>Œ™éoHi¸npò‹èÆÐÙ–ë|îAZ¦¼èÿÜàäOV>;ÆÌô7¤j{ÛDz¹Q”_´Ì’æjèLl½þßQ»ÉŒØJ~íDÝ™ög¸•Þ°‡áÍÒâ X‹ïÁȦDnÑjk“Q~í¤w’„F5–š((Ù—™(O8Ä-ó£¸Òù·F¯&“ý'v.GéÉetIJnš8¸NíKÒ¾s‰¼¨ˆ…ˆÆ  †æ¹oŒR¾O _…›Q µæB~)9õ†Á»öŸâ(ò £å·ŠJ*}öÏXÎ}ò‹²á¤Ê/eyoxäòðrB(wÍûÌo”ö…Û(€ØÒÀ¨†ÝnH&rüø9‡ºýfòËZˆ£LêëFÏÏo&¿¼úÕ×”Rçªy” æáÃð)=“Ç£ hQjŸ?tf@´óÏ>t øh:Ee•ˆrSùa V÷ÒŒ&©¼¶«gÞ©…ùƒÐ\ÀNeyþĹ&)Èí$‡ºˆËh·—ÏàÐ}SFô0hF?"•_B~yD)¿„ü¢¹dü1hDAF¤—‘\x“!¿¸þ¨ºƒmC7ÃÃj1¤ÏÉFiîæ ¬çÂ@?難G"­ÛdÈ/ªípéæiyT;ð¾Dʽ‚ˆŠ—nYT`Œ>öò{ú¡ªÊŒ‚¯ntò O7踫»DZÃW~jF¹Ÿ e‰Á°p¼ë{÷L¿Ö=“÷J 0% ûFS~Qa‡ù!«¥¨$2 ‹Y@eÜ=ïÑ'`â¼ÜôûÝ\\ŽÝh\É,é ®ü0¡Ýßf™ù7Û憄üÂ@Eë áQ£üâZ•á* ˜–¬h+ÑG•ð Ýfü9®cÇÈŽòPfÕò™1­+ûøY ÇÎ3ËÆ²Kp†"†÷ ù%Ê/‹®Ö'¿¸‡é†Œã±ÌÆ uB™¡ ‚'Ú`ä{KäĬhp©Š>.=K4£Œ“‰PjÎè}æjFâ1·Á•;R7ùÅÓÔ…†KwdÌEt;â=wņæÚ¹,Ñ*ùe—Ýö,D˜_£ü²Õ6Ý«_óÚºD3üO ‰²¢ô^2—KPr7eèz%¿àEڇν¾0J¸!.ÃuJDÑI§ürVéo\QúZì\âÎÏÔN—Éh—_õžnÑþv/ůØ=ú.éž¹&ïB=ÖÊ#ç•üb‰ò ð’óOÐé³{ÔwÂÏ"o’¯ÑlW¼ûú©Ö\ëF·‰ _XM& ®SN?§{Ñ‹_Ú=}ÊHÇHämäÃÑs† ³r-Îéy!¿b¸ò l$'ܯÆîYØí¿ìîÄSÏ®X/Ýd^ÔYöbŒ–»v»Ž³F®Wƒk±~mÏû FÇ9F¼DÙŒŽsƒ±§m‰°|ÖŠüâ)E£Îaí Ÿ>ìÁJ-Ì‚å‡]Vž®‘¥£ 8ÁHÝ,í$½õ4ªµ{üɧ—„àI5²+“0RýH­ÖGM$QXpS0ó ç¬ü"‚J¿ôÒ3ç“(Ú§NTYB~9¸àPü À {ÎP€$ýG(­º`ÚÔf\æOæ¯úÚ™¥!ûØ_øÅ})AËÛö‘óz_PXsV~A6á=)ïå°~–'GœhÉÒC*BØ(Sé›ðÂEìgbÖ(MŒFÍdB^køžM :®€×);=ïyϯIƒÈʨßÿýßïÈÚüèG?ª:>"½ã ¾Á>K~‘‘H¢í?ýÈôEÚ&²ŽŠe·áìÁµ6•YÅPýÿLÑR+ä´š˜&À0PW:~í]KÜÇcO8­ûpñ‘¢ø‡XCLJ†ˆc…‡'"¿Hª•"ç” ‘>{Ð=`ÙAÝÒå ì½Pšax;/¨!DË®O€p"9Ë›÷ß{û/Ýû•dËGD&&›òð¨YÉ/¼—›B–(£c¦ëþe2l*H \f–½ Ì  ~%àÍ(…åÓŽŽ68³ñ'a€àÐÃ` 0“àU1³ï»q¤¸Zò'R{—’Ah,ù…Û=wÂ,Ñœƒ¡ñ°tYÚ#¾àªD&Õ·éE;² °|/À¥œ‘Mxh™Æ¸F‚i¯¯ß÷­¡Ô™P˜ìOïYz(N0v,ùÅ=Ï%Xò-’öEú’‹tHÖ3²A«—WL*Ã}Ö º` (Ú¢&µÑý@!ïF}"ú!‘¸qÖ‚¾ØÛ7ßú‘JLþËõN²/-p$c•_D/a·uû“‘IÕÂY\"jxZ< Å_ƒlŒW¡Æ¾»®.WUZOZš!ž5‰›&N`!S•É)_ûx!ª2D’/šf|œ”/ÓԼϱäy)) §$ÜU‰°tªœ‹K g’q†±‹¨áSŸ „ëß¾çåM:/•ZTmûÐ×y›x :’~Àpű§–"×›ê e¸á+$:VùÅmŸ'Õ`d=¹ÑçNxðòCë›·$Csà­ˆ¢0â8@Ü¢?ªþ¼‰)ÁÅÙɸ€{ƒc—9ùÜÇÆ9µ°“VžÛmñŒÑX;·–xr"å$QÙŽÔ×ru†â…ð¤7Ñ“,ÝàÈ>HF_Œ¶WýŽCž3H:0PKš·;ŒÊùÛ˜ «ê’÷7Ÿ÷‚ÑøÝj\½OFÚ£zÃÇUJú•ªlƒ°ð¤{¢„ÀmC©!Äè_=ò„)á°Â-„écœ<æß!°@Œd ïÛoMƒà„€ì3Ðl^oz=8&+«±öx-:­è¼x$6LU ‰‘c•_ÔKipB’È eú‡¯8zŠìÒtu¼,+Ðj/ŸœË#<98g ƒ>Š1Œ4Ž=nù7y›F‘bã}Í*YTÆ÷ÿê‹^2ÒHy-#ç¤ü‚^ˆ‘n‰ ÉR&í ²'ýÇ–‘}ãÀ$£þÍPdž "ÓIzæà·'yÓzD<žW£EWf¨þOËõY3€íÕ‚\¦'&¿<ÉðStrS6Üy—]»³Î½¤Þ6"ò%`HÊûÜ‘³å¬wÖhêèp:&<žg,¯…i¹Fí…ñáL7rÛ¡ÝãŸðÄ‘ž””Û“ŠÑ‘_åz%Àèšã‡(<½éM[uç^ð¶š|Gɬ¯7é8p 3°áÒï®7 ^ eBdÅW¶,Cû—»dhß‹‚Vee¶™òUDZ7ùE1W%À/dÐld¿C~a {£ð/;ÉYI›¦zWÍEÈ‹zO-‰0ÒïZÚ!žY’*ŠÃ,›zÛf’ËHqÃY9ùÅ$2¹«l§?(¢(û°´¾Áh…ø(cA™hÐkE+z’m„?¸v†¼3Ò’õ0¤jí¤œ&P„ˆÚäÃîÙmÁ¢Yñè’Ä9‰‰È/Ñ YR6 uB…û‚‹.­FJ¼çŸ[Cf{n©Z¦nýR¹(Ld†Ce6M!2Ú©¢©ÜXR±÷¢»]v_8VùE9D†6ù}É¥Ù“QëLF]TmÅÁ»¨z¯½îæj˜J\Ó|½kJz±Íï`à—¿öí©éf ´zŽŸËM£Ñ˜.ª,JLÍ“¤mÚunß²_ø¢Ñçã0Ï~ |uVò‹$¦–ëK*Û LñWâ ¼êìó%ð=Ãçw«ayaɪð®;¤¥ìÁNVC²œ&åxê@.´ß]vß{"p¢z­÷8–ü¢/kpQæµ æòy>Ñ5·<(„Ѹ÷h„öbˆ/­G5ó=>RsY‰B"µÔͲMŠWƒOYª?ó3k¤Š§(DOñ´f'¿¸q؇êYËsX¸=ºæ6¹{2êÂ=1ãgBcŠî¤ ãì´—½DYK–±^ÎßxþóKYrøž÷É9‘_ð°\˜ª–c]eÒŸ°±£k®–â?¹ú=× î‰}ý×*/G gø½œÁ'"3CeK‘•;¤d<3ü1Ú]R¼È|¼µ"¿¸j9+]NAñ‡2ÖI%[ùÞæÒºêÜ·o~¶êƒðf(!¾4¦;k©Ñ‹Áö¤ôO ª2y^»±¢ûùòwgó vž>§ G™&ÖÏÏYù…7uxµ½å®aö0ˆ3 +ÜÕí­Š òË‡Šª}4M_,k^tÜ'|œ»+Ï<§{C¹ÏÆPðXU¶ÕtÜ”¼¿WbÊÀ¥5š°f¨ê fÔOJï‹TÂ,eO1Ò6¼pÔÛûÚ«J ˆzxã?Rë:­‹õ™rž~¬.[)ß5˜=—½«;î„“Ë%`Û±Á…§Æ_ÂÑ ûÈ•q&vd§¹¬ó›xK(–"e(C¶Ql‘÷emF’_Jº%*o³ívÝÞ¥)äEÊ-CkJßò‡%ZÞ«d-×¹zlÎtßùø6“_6“_6“_æ,çü ý½Z2žSJVò #C ‘ ,’·†Ìæp>á¨ÿ™—sSï_Bà||Ø_Ô\d7¹dkæFõÅÇQÊ/!¿À®2\/C¦´É)¿ð™&ª‡B#|DKVÖ|JÍÝHÚxP˜þ Ï ?«¦äïñ®r‹ä@þ«,£j1×È?ñr¼/}‘û£ÀåÐ;4„­l†êÒþ®D„ Ò%ƒCÐ÷Ô¦7ÆvÖGŠ1ˆ/àn!Ï@…ñ(ÜùFU~á‰ÌƒE~Áæ±\¤†û:H52ޱåêfë¢*z©áHöÝ<Ô’|nû ÙQ 6²£ä¸³R%&¾jîYÒ¶[.‚ŠÚrB~á}m/DbнIŸYå—àä¶–d¼š¼’s-Âô^äÂî’ʡš÷"ÇÅ !ç:nùκ\i÷0ÐtÍÑû³·]ì?À_¼¸X×'*[2²áa°é 23„Óu,Ú=<§Ái›h¶{°®p¼¼AÉ/–›€aÿÙ‡–`_”A âÁ £æÁ>LÆe;@‹>7D-ÇË•MïE÷Ì’e(ã­ † Jþ¦c‹ÊÏ>äR?çÜUÉô$ì³{DÀ@·Üç†ô…‰‚æêψL,9—ã̧L{0ãã2]Mde$øŠâµ#Š‘ë]ùžÀÑ€Ýc?ö˜¢:nV[¢»”%ºs~/Kµ^(¿l·ÃN¥Ø¼C÷Ú×½~0„³o`èK1PÍÕZ×êXoäAÆ$§a‰†bòt´{¢¾òË@acfLj|àƒ/˜×;këàW^Óíà!ݯ¿êÕe„[k*Xyñ`Ø=™Í¥,â!òè¼’_Zú°{°¼x¯?ñ~Á>ûv‡­8vjJï5¸‹Æär /m’ýç+žÀ÷¶ÞÑÒéuf¤l‡éžiYØ:ÑqF«ÁFõ{È/<'ÁÍr:ÐÕgú<É¡pC_Ž;¹°n¦ÐÊzŽÙ@ö¢u§Ûš¶­ÃÙ›6íþînᢥex[ã/ö»g¢¯töÙg×ÙZ‘_V®\Yjb ¼gyfâJŽŠœƒû-ZRê5I ­p/]ã†ï¹aÐUÖÉJRÏR÷9ê6µh߯~ìŽÏtÇ´²{ÚO¯UÑ5Ò6éž©ó:gÓñžæD~±¯x”p÷¹!ñžc7˰0hGp² 9x4z!aûD„¡!E¦ 0Q|Ñ¸Õ™Öæ;í̦üâðWµë×eyWñ+š[n:s"¿ØÐŒ“WZžbO*Ê/ö@;SPÌÿ5ègàŸŒ…ÏF„hC¦?9€¿4€ýÝÕ{ 0>Fâ&ÒËˤîÇ<æçê5Ž÷\ã$"·Õ&o¶¢œ›€Ç+¿8#§á¾7,Ô—Lfùa ¥ôÐæ5ýFÙ‡ÆÔ'¥}ùkß`|Â.°|CA´‡ŸvßkßÚÔµ<éiIæÿøÿ¸²|þîïþ®ûƒ?øƒJk²/=ù­±9å¼­ã5jZg^‡3ÈÚ¥tƒ°mè>7¤¯a‡ü²GÜFZ±o@~ …ãÝ0 xÒþ„©Ëµ<fyúèë–²|„Šìa¥âÔßù®jÌ÷¾÷½ªãóŸÿùŸ«Ñ'¬ÿú¯ÿ:’Ãào}ë[õj†³5–ü-WPP—\ÍFME|I6å—eÕÈx1:þmÙfò.\,”GŒLÐis˜·ÅІi³_Ûàé[*(ØCzûWw_»ï›#ÄqQ`  8ùÅmž'“}–kæZ ³T§5|–Wc£’}{Ó‘ÂPË/âa–)CÛœæ»Þ³þ‰ÊWQq‹ Æñ"ê;Ó'"¿8{Lƒ°Î#µ˜ ïòC/ûí¸)æN;BâÕˆ¢„¤Ödoš˜'ZR[®¿[÷Œ]¼1ÆòÎ9›Ë¢`Ö·Ý~Çzß })íwy­Ë‚RÉDä—`i#²á†4òKÑ-¼jÆYšÑùðyÀYÂÙŸÑ)Æ1 Ä›§¢ª6¯kâ -J¯¬0n Ÿç>ÿ…#ñ ’våLËUK~qëWh²\c`¦=}l#º´aì§V£¤sÞœ7ÕNøU ç&o"wÕH2^ìôr”×"yãç#ÎðÂBÑÂÞE‰‘cÉ/!m÷eà 9âȆþg`˜èý i@Š7ìká‡@DÂ×ÙƒÑü S/A*Y“¿‡à{¤¥ÊЙ4|ä±iÓÛ›c•_Â&P!Sr` ”IU¼Üž å/Ô‰()‰„sD–ã@Ï^ôQ´t¼ØÃ9c£ äc;š–×-á¢Fz;¢{泟;Ò“*’± 7DD•Â9èíEKÐ2g¬ã§%M¢ÊòÎ~·—£ßãçÿ„_i¤ûåÄäAÐ^‚.ÓOU-ce|úª–x3”Wì3,:Æ9 Rpþµ¹M<Ó炎ÌÇaI‡&O"sô¸B[´Äw/“$fB!¤h1–üââŠ%‹ *þ¦²VÁ9ç]0à…0Š>Zšö\nÎD©Úó¦¯ExAåÀ~f`س·¢þ» ’Ñ YVo:Ûl¿ëŒFº_:>2-MpÒ¦/IÂê-Äô?‡)ƒô1DU¥ÆØW~‘.]v`ñÞ»7ÉwQd.M1ôîjVì&¥ )œ%ëÁXîŽÁ*ÒU9W£ÝcéJ,0k·xÆ3g„· 4 „fU~Qê7Ã…4Õí”ïõ"¼àÛ.zÛå•ÑãÕx!·W¸5Ϲ]ä&©\Kîœâ’ÜRS U"jhÎ\$5ÆÕÛN¹Sþ÷RHž ÃÇk¢êDäs4¢’ê¶ÞDF;-µ{ @ï~ÏMÚ`QÜËîÞºD#‹Fº}É“IÂ1¢²ã¦im-äÄÉ}wß{I÷ü_?¡Ûµp"ò‹|Ðy£/%•¾2}pqrÆ‹ßöŽºÇ¼x‘–fP"Š¢´ákòéºoe<•<Õ’íKÛX¢!WaÀ½ÖòÇlHLõAÒvš"¿ü$P™AÃÇ€Jø¯p,úÆEù…qÀ~îå/EwÅU×NQ§éƒÍ‹ßð³ìÍÜé¡8bä²÷$á2 >Ž™ÐÂrfþB™ä2j*¦Œ=å—ûfU~qëè@)%È@ÆyÉ ýÁ7¼aËî½×ÝT«kaØ5”¯Vï…õÃÃ!£É~rÜT€½-\²ìð2eiæ`ÃïÉ–ò5eÌU×Ôifu‰J2JöàÌ1šIRÎ °šòBU±èš¿æ5¿Ñ½ÿ†[ºOßóå)~V«Ÿ†i׈/wˆ/Ñž çÒÒ™›rÉÑ'ÂöÇtÏ|Ö³ÇzÐûÍ´î_àñF*nûbÙƒ§ÅÖ4ãÜÛ¤x–¯Œ‚‘ á\é|YÂç_PÈ¥SÇFŽŒVÚ¸§¾r~ ïä†Z"–gÊ÷3哾îõ«¿úÂÒܶ*¾ÔòÉž{•zÌÖ¥“üœîÊÃ9ó}Û%äFªä;|ßÉ0ÓHÿ1eÙÞÏ# ±´°ux5@aôÒ„™ôM®íÏyP^ŸÝ³ÞÉ/Úe‚‘ 4î^[Ãò{ ´=X)§D…„ü¢ÇPj] ™í÷íA9©Ë°Æ“%*+‹4@ùÿ<Ž:1‘'/eayBøk9CE7ùíú2R´dU–c½ùБüÛsF&Ûq<ˆšÙ¿!»Dê&{<«"©¡’s÷/üµ‘hFõåmÆ’_DW‰€ý˜‰+"—Œbÿ¢ŽvNûnZbŒŒò £"°)ˆ8Î왤mOú9Ë8äí]†„ð’ýmkÄÓ‡¬8®{ÊÓž>ÒH©ž‹ÄDä*7y+SxЦòÞ{ïS¼xÁ”æU‰x%òÙWÓÜ*ô:º!¡÷¢ 8w¿!”¦ËÕ˜{ÑÍcpÓò9n5"ŒŸE~I-X)f"åE*¥}ãÅxeû^Ü&Aõn¢ãôñ–zÞÉ`$Ù €üÒ'øºàÓ@¼+§¢ñ²ÌÂШK”ÜØCˆhÊ‚}‰¤‰ñÞìlj”_\–UÂ%äꢪja÷¨¬ Ùç_xqwé•×ÖèÈÀæµÛSê¥d<ØrÔ†`vøËn|Ïù” c™6U¦&!Ç0ûšʰ¶Úf‡Ñ_*€aÓU~áAÕD4z)þ†Ýã6~@!n_YŒDx>ORí~Ø&?|µ¾24!e‡?CíåiŽd£)Æ0#ý(P,{Ö d4Lj÷h?J^fU~šr|Ø“žF_ö;Õm¨*Þ|ûeWÕ³ÎΈ,Ëùȃø!M§à³õAø½DEiÇ#C°i)bÓíáA—˜ívÜcFЯåªnk?ND~q9v¨ú%Ë“q"W À©‹Òñ‰‘ei¯IÙx ›'Raú„õ#H'`9jìÍ€ì#J„íŽêáó^0š›dÀž„øšˆü"š:T-Kð¯~u[…Lo"ܳ 1Í­‚‡ÚݰÝî[YãKÕ‹ˆ/òÔ”4ÂenIøµõ•oÊ/™Ü"œ ƒ®ÄÿÂ_ÿú7”9>e¾dy-(ê/&%½øÅ/™H3‹áa÷ÈÄ“µaÚÍ+ù'„GÃp[ß¼Z-Ž2­€À½-Óõªüâ ¸ì¸åµ®ßçAç´êý%¿ˆ¶2~W°u5b¶ß×µè<Ô>ù…7ùÅSu[_FÚë2.÷CKt£‘_€ÄÆö÷éÚìYt]b˜ $ñÞ(Ê/2· oÀÌÓ÷5´â—ûºe—)Ÿ¢ñlâFrd{PËQáoè8û©Äãþ’|Ì/¶®Ÿ"•'|“ôI{Ìê+“Xº®i Ôª|^éy©… ùQyÑɶŸEÌHÛd5È`Të·É’_Âî±Ôì%u—¼«>ù%øKѽÕ!ïs)ÚÃŽüÂpGNŸüÒÇÛ…üb… +¿l&¿Fý$˜×‰~h’?45 f3ùEó¥$Ó-¯ÛÊç×”«Êk3ùeÒU´Þy!ùʹøXcTËùy/‚+.¶€’ ®CÈ |âRº0ø¨œ¥÷– á™%m«sYçë5/èÿIò‹¢—cj$gå#Fù%ä8ñŒiÕÌ…°4ìO»ÞG|mû‡•ò‹ë—> ƒî¸ãŽÚO‰ 8)¼,ƒSŒê c­…ïkþ†‹¹[Ç&¥ü‚Â@8 'o<°mMW&hÓ“¾ø‚O`P´Ì Rñ `r`Y•þå¹—ÍF#¿XšèG!²hÿ¹eŒq\ÁùÀ3)?àa½Q^§ÂâëšOEù%äû͉ñôÝH‚¨TM“§fN¬Bu”_Tçõ@ýÛÕÊÇÌ8÷`|O¡J%ÀUÎMfƒ+¿Xn 4Öd`–h_u‚Ã.@~é·éà IQj:0¸•8ksYÎZuVEm.#;Êï̪å3ã9I} ?KIÑîÍGùÅžyв²—úÜŒ¬† ÆÀLÍøFh*W­(¿8‚Ò"d dÁ}ÓpUs­Wò pa濆>aF6ìË­?å×RÔÌNÁ„q© /éœ1Ne º!齸‚¹`{XÐö©Ï]Þ•`èÕÎIÞ¦¬û›2ÌÙ'¨ÀÚñž.t”'Üéo‰öµ{ªòKYZ»í¾g#¾4ÕλîQæ&ïÔ½éÍÛ#£™]’³Dü³LÓ"Tãu‰V‰Ëg^É/ö™£Á'Ò…¢”Tsx!!¿Ô ³×Þ•BCŽòŽw^;ÀhÜÖqüPqñ¥ïìö]¼´{Õk^[ڃ͋i,ñ"ãÒ{ɸªhù¬3ùEâì@†±s»¥Y™iî³ï¢îÀÒv;þ”³+'¤a|Æ(pð­4mÓÓüðÇ»;yåªîe/eí1PboE)b¥÷boJúÕœ¥Hk­üb©ÝrË-5¨À£;ÌõA¢:Ñçgµiœ méЊ‡ƒ…kð³sêtAèG=Iíº¾^H濆UºÄîeväS '$ä—´”à ´œ×šü"º‰`<'CÑ2m%{P/"ìÔ‰ÅK—W¬ #Á7ãIFF&†Z²}Ch2²ñ”•gWò‹È.°00 ÞäY%OéäZ“_ìà ¼¼ØgDeñ’"¶P¸YPSP‘ƒúÈX`Æ޺º ›ô(u 5j!GÒ¬Gu«}~ö[..#ß~©8Ü"„`ZEm{sÎÊ/žŽCIÝt˜Žä¢âA’‰Áàèõ7\\Ù¡›ÌÈÌc,-oCL ˜‰ 2ðGJ÷èbäLíAž–QÙ£s"¿dN€d[Òvã qT,?ìÈŠZÎ0huqEb¨ý ü9Ô$Ã&èKjüÞ}T`@ÓšÄMR¤ œ·ßiîQÅs£ú.¼,úz_¶ÔÄäÐlËR’Gû©šÚi- xp·ëžû ÀDpq€E`ÁÇ”AvTüxAFZ¶ài"kDö§Möhvk0®`e㓞ò´j¤%*aТPd½$ƒ¼·‰É/~ÇF_À=lsÈ1Ás€ô€õ¼iÙNÓ™⇔P_à×ÀIáj 6kÊÛ4"šïT×±'œVسo¬j×3綘AòàÑUOÚˆV<‘ò „¾;ëŽrR5KÔAèa¦Ë7^HÐ`bŒæÅ`UÁU`æ%< ‘å*à„ÕoúZ£Þ1ÅÌ»«z³` •â·îüTeüíßþmGíå?þã?*ËuÉõweESƒmX>fæÈ0,SÒÍH{Q†#%Uc Å‘…üÚ@nf—gÚ—‘Ñp¤ˆºÎMG $³åÚ'žõÒ,S†ÊŠDa^Ä‘H|ðC)oÃP|Ç«XšÃcÉ/rC)\‡"˜OëØFµŽ .PÍÈNY²–oß³}#%¢( l›¬ý¥z„ÔÄ8†YÚ–¸36/{óßÿýßGúÃþ°&-öfª"”4qÁ£L=’> ÅΚþ´{2³BXT$ß?ªi ün‰2, \¸8XUË××yÛQ"‡åLÕ<Ôòdx¨³tX↑[>>ðÝ?[ÍHKõÿñ+©Ï)K~QT²±Í`¤+/ÚÔ‡¯h$—p±ì¹À§y±-ß㦄VÔ#%Ѷ՞Œ÷x-KqZÞæÚjŒHì¡ZÎYIÅÙ翽ûÊ×î«Fýå_þe÷GôGÕ8§÷©ÙűäÀ^Å&—ãxPfÁÈ£Ž9® WÖ•q¹á‚¬Îó8µþÌ4ôzYõ®½•)Ú ‘um5$4$ç*¬—Ï«UÕâ’î½ï¿¾^ÞDZWµŠÚ,…‰•_DVaY‡Ø}²Ï 9ñäÓT X8ç …:Äc”_õh¹ú9™Ÿm’i¢ŒŸi‰ý9 FŸ$ãº`3ªŸ©ä¹(xÏ™=+çÕ`21{5“:¨r¡šºg’xj"בGS /$3Ìc°§ŸÃ?׬Ìp\µÂçJØ2£Sëq&_do×ô{ÞRª•_ÜX$<é4˜•üâè@ØvŒ0Ð+Y…Ð|HÁÔœvÖ[K)YnMÉlša`¿ÉpÛpìI¾N:(`EȨ Ž5‚i–?Ã3ÛãéÏxÖéd]ÚýWò2VùE§Êí1Е&¬÷Æs/¼¬^†s… 'Dð°Ïx+Wª~ %‰ÕÊû<åØ BJ™á¾Ö$æèq5¸Ù4¡¢#ê­dT+Í›˜üb©::,UÆõ•_\TÕEßqeSzî½ú†ÉPZÞ^Œ”ÂE5Ôqáa¸oò£ä¼^‰ÂŒ › ÔÅ@µú§f¤'•)'&¿ècàjY¢ÉצüâLk:!€t}îXè_ ˜üMåžzŠ¢‚,ÈžËrŒÊ /2>gqhN[nµÝŒ7ÑŸ‘c•_"1×àÅЗbdtÍ÷,é"”ìÅžKYcZ¹·ˆä–» ›Ef„Ç=I†2Ò² ÿ2ç­38Òrù\Rñìç>¤‘¢¨•—ËĬä•2‘I”R‹qÖ»ƒVèv)ò^ù®k«Ç¤cDad[¢Ó¨ˆ/åÓ¨½‘~³Ì1ôDΜ§ñX<Ú34×.{ì3+®VíibòK¤Ôœ9áf1Šžò½Úè’%ûw7Üü‘0‘$;´¥x1‘Ü‘V`’8†)¨Ø‡¸!áRF»gÇÝvÏzÎóf+º8« ̉üâ¾–Éb–¨Œ‚ \}å—KÞ~YwÇo—b×”¨tFÍH¼Ýô››ã°ê‹ÈìØq“(Ø—‘¶‘ó¶ øA5K2c6,ž.cçD~Q5×ÛàMÞËÜ*ç‘«™ŒÃ×®}ß õF/À4å¥FB O$C…r´Äy’‚,&5!^ _‹q^{4w;+äT»<¿VäÈzƒìî1ÎÔ`ã3þô3Ï.º ”´?_½ÉXâh¦KÜ'§¢l’u{2¯#Ž)ú%u™€>!óáEÛGÛoÉ/‚‘"®öZ¿|ŸÊvÊ÷[mõæîª«ß;PÕîkÉJÖ#'ϵ7å¿'Ÿqn)«œ\º\¿1'ÛGREÝ{(}”†[xk4aK¿pgûÍQEYMMV °Kiš0)ß~•ó·ÛnûêÙw¿çúîúµî¬ÙÄAqé•eê;®îνàmÝáGÓ½ä¥/+m€5S¶á>ì ”]m’äGŠÌcòKÆW8ï\Â-Ož–ªÕ"‰€„Þ-&/·i›¢°’j½»¢´0´^ÙÅa‚¼s}oëld1`çò?À0¨i…üb´~„æam¾øÅ/VyŒˆ¡<ìÉ/À÷`2zœ/îÖ¢„r×]e*våÃ$胪í>ìÈ/PQ`Ü0y<ȹhP–¯û¨®™ŸIÐÿ7àH ÉK427j¿úÒ½®ü‚Â8 F=(€Ã¾(Jd5¤u–4”É—¾Tæj/[Ò Ì /3Ü*ð ìY[þWµp©Ÿd¯Ž=BÊþÛ³”!lïùãö'VÂ8mwo†w@b@¹íÉ>¢20™@e‚CPBqU“”«é N¼M h"˜É®ªhµÁÉ/ …Á0Ђg¤åÝ>\«¬F)¡0l¸‹&oºgn'¢´Þ‹—ÏE^Ë}ƒ_p³´,/`!íwô —gU´ŒôÍ>2.¦Á˸¨–å—ŒŽsÇLkÂehÊ1´ÞÈ/"§ðÃfï .ĉ†E*« ¼,ÁÅÀ>A Eƒ7#Ót©–8xE7Ä}•‘¾§ér>¯äQÒGë <°‚ôR‘7âDÞ3Pù£©/íZŠÊ]¹ç>h´{),ïÖm·Ã.…ü²M™’öÚ"ßæ‚èe ó³P'œÅ² kAG-I\˜7ò‹'lÏA0G3D9˜úÌ•½€ª!¿,YzpAc^§^k \ñîë+ô%í‚[nÿÍî-o½´_–u¯(27}#ÃîÉP5¥ 9ñs‘'còoÙ– ©<¬ÇöBd2¢¨'¨L‘#Á“憄€6Ð ).ܯïµÉÁ˦ 0 [§¢ùo !¤·ùÑßüínÕyo-S _R{ aµó ï10cqüÛ>_gåAÃÁ c'3Éè¦avÏ4­(¿òKš¨pà+`€õÑ®ƒÈÒüÑ»$ÌK»Æàw~¶ÛkŸEò #(²z™ÕcÙêÇ8guÛÖJùE¸¶œW–©M®v¦keì·¨ð²Š2ZAi×k¦ÂÂé"?@yg¬«³‰Éh½L¸ƒOÝýÅîÔÓÏ­ä—ЗÔ~¼rk±<í{Ëv­É/xÇ#ížPööŸAÓÖ cmØe{ñhÄ,Y}H`Ж,W†EÖÆGF¶±_(Æ~±î×_~ÜãÊ/10u[‘—ךü"uTH²y0aÉd ú-^R–èá|àjL‚´ÆÊ£Œk ’Ëž„ù‰2¬½éÕÚñ­C}t¦FX¦ÃEi_ƒg°•ÖŠüâÀfˆH‘¾p$yñàCW”A³ûU=‚ › &=À@{3Z>} ËÓ(LmdjXA‘PƒÉcÁiÇ]ö¬ÑsTåÝe[z˜éMs"¿ÈE%Ê%2Ò9Hù¥BP Þ& ú¾¡–/4Gö'àƒ½)ÁX’ý‰¾}y›Æ4h M åõé"Xôä»hSEU—m5'ò‹ ƒ"ï†ëRŽ F.?œØÂò©W#º€p6&AØÛ£Éö$6È(Ð!#£þ’%Ú$o¾T ³ŒmⓉªG·V¡@䈑I3Ý›Ïz—“_BÊ&ž™û`Rµå‡"½:åÅý+rÊò ØÈçŒÒ ~Üž„åY§ñx–ìÝÕ¸@F#RÔ&s7¦³Í¶ÛÕ‰=èx“R¢«<`AHyt"å—0|xQà6a Ùã“N=£âá¦!œeìba ¿2ÃfÎÑ" <ŒL É,æiªa“šâMØØ@bdJïyÿU›£áËm‚¼ R««˜Î4¯%¿ð¤«“È¡L¹¨±ýÇÞT´´rtôEP€þ¦@+2ö¥=ÉË38ØÚ »s°Tfyó®k?ÐýèGÿ<’üBâÆI€Þ/âÂ3ÌJ~a }I‰¸ ÓŸö`Ðûò#h†U÷cÄOpy¬o,ïzð䈬 *AÒšwW¯5øË­ŒsµÉÜ´—)úÃä—hùð¦kŸ{ªÕ6–üS§c?FÚ&Ô‰Ã?²DLZ§Và_¸’–£31¬Û›¡8 B@¼öd¢§eË[<ÅÃÓ°ÄMØ=<Þï}õëkx’ßÿþ÷ëÀ«‘cÉ/²®·Áûbµ6¶©ºö–¥åè tL4A”FÖöïðB,ë¦BƒkYÍxx.¢D ‹´ C¤ÙsÅj´ ÿßYç]ÒÝóù/V]­ÿõ¿þWeà}ç;ß©U ÷\^ä§€ oŽT~±T3Ë£C(w7mquäØãO¬‘è/ô"F÷EQ¦‰,«jKƒÀiöê 3ó;yEÖÆ ¿ÄG“qþŸh“\õîkkNþGFl„#†8 fU~ ‡?5a95™c;¡;ãÜ‹ê5Ê›óF¦…„.$ãÉS]­’åÈKý;”¶¬Á³ûò8Y Óâ M„Ì×wØi—Š¢V÷X’¹™xŸ¡1ÍH~‘ìªYªÕ¾vÐìà=bÅ‘õ, 7Äù×îŠ×Õ Q‰xHÚ2AÆžä1{4 DŸE+ Yâ w¾úY[ÂÇ£O8£ o\Ïá—¬Çý– ³’_\ЬÒ9f¤Œº #µ½÷-ƒ¡/½²pžË^êŠè†ðZŸ]4碳P±ÙŒkºáÏ«Á,L¾¦ ³b }ãë¿ð ¿8’¢&ÇGd>.Ø.×ÒÕZ Äàã:¥86AèKa÷HÞøÆ7•(WfZ•eçn£¤aý—óNâ–káßSKQdâ-ž ©©†rBõf fü^%O…¤”¤{‘_D&>+“M̓²xuŸóÊäzËΙæåì³,»çÓÕ0‡=Lzæ£rD\<ADpŠá†ôÙ´<ÜÄ›vcgR~á Y™›ÈXò‹Z¨u-…‹ú’‰»á‡DVcaùƒ–dÛew:÷Ìx‹Üô›xfcð¤¥ÍÐHÛD+¯ñ ÉÔùy9ƹ±ÅÓ×$£Ù›ö£¨:1ùÅÓ°¶e9öaÆ:ñ 2}¸!ï¾¶Ü7Ëa.SáAË“Q<ˆ*Ñ8Ëߨ÷ÂHi„ù*H Z2 E‘¢0Þ£“H¼Ón JªößF=¥Ñ9‘_2­ÌýuQfòÑ’ý ˆšBé‹¢DF#mKÙ­‚'EgGÂRL´Í¬‚èˆ/=“yRÐa 瘯– sæ@dÓ€J-ìÈv«€©·*V)ýõG;E7ÄÓ»è’KkÄtEbFã•aÓ|­Vΰ¼íaN¨½ÎYGC¥a¶“¶‘è{m¹Õö#Ë ôži©F±Æ×JAú'¥v[oºZzôÒ Å!aXR÷ÊuÈjÀèOx9ˆ›í+ºnºu0Ò‚QÓj/MóÕ>Œ jã2¤ž©MõeU >!‚GO¶).¯µ#£7~îç~~ƪƒl¥€çL~q1åU iPƒÊ¶áØ‘ún¸ùöZF á…7y’‘™áF¹«D;¹©”O6Ó×»Ëh…‹ìžZ&ÃÎø«·Ò« @«õ'à¹y*Ê/ú –‚€ä댌¡NèõÞën,çâgjòÍcQj²œ*@U r„È$áOßIìÝbj¢PZÂÇÈ(GžãoÈ/‘ ¯E™^ÞMó6€}‹nÕ9o)m¬×hk5#Û-_t ñEêÇPù¯µè/\t@¹*=~"‘Nݱu&¿Ø§¼iOZ÷ Lùž÷ýg>¢4]ýžëŠòËç2TMoùãÕÐ&RÔhL¼V¬âØ«^ýÚ9±¤n ô^Ö™ü›^Ö¤mü Säí×E}íu¯{}wÊi§©›º[?ü[%yøXÍŠ¤W^]š¸¥ËuþÅ—w§y^©ßѽ쯜Èsýý©7âìÖâ›7åžÔé²/#Ú>là¨ÛÁ³Ëqó¦’äï³p¿Ú«Ü}=»íwرœ»/ž˜“•ãƒéÕ ¡çü"&VÍ›'U¾ çúýðCœ‡.òÎïõJ~ÑsÐñÚPìÛ@–¥nã, ùEžòK‰ª?œWò‹ãÄÞœ«7æúóVˆóX-]Ûàä7{cØ›kÃe¼ÜӵεÉyí2¿Á•_ô"¼ U)£•æõî#ü'¤;VæÂªc°È­"áïÙMùÅ¥ZñYÔÅÑ õy®=.²ë³-Y«ÀùëÁsöž¿c¹ªˆoTå—qäy¯¥Æê¶2¦aÝŸPÝx\~C-–‹¿cEðrYE7M‚§[g¼+Ið= µ³xH>;L~áÕ³¾ò‹}ÆË]t="ÿäyeÐèéù»–¼ýÆ[Îç5à+“<@8Û)‡ò)åfò ’|À½²×0oÔ^uhR~É iK‘Ç\Êÿ_#¿ü¤lƒG&ù¥,Ç{•,r£Ÿd)Nò3ë´\Çý›É/¯~õ5%P­RÜ.5¦'Œ{`ëòýyõäfòË#•üâ¾'÷$’’3óE~qïĈ@Šv Ñ¤ðz Ýkåà{/Ý`ƒ©•6yU>ÊHs*ÁÚ04}VÊ/Þ8#p;´(¥c &R 2ožþÔ§ÊèþÂ'„ÖÙŽ<Î&K~ª´ éöÀãqƒ«ªIZôŠÕ>woƒ4Á3Ñ:d´¿¥æ«ŠÏêÁl4åè-` Ë“gxÐ×¼©Œw] ³ PwF8×5ÝÂ-Sµšxѵÿ„ýè†à†,>à ‚Ò8d€Xe¼H-t@%Иhø4Är£HLFý­nï}— È/¢:Ï)~EÃÇ’µW=àuR~±hÄÏ>7„q!¡ñàâBÐvË0hÔ@Æt’ªUÇ“¼¦O› ÛŒŒ|Ï_ptOyêÕ@ýϘ‚¶"˜¶ÎäGqÈ++Fù%KÔÜ¿€|ïe¢}à;cá€`´Ð#Ž¢…Hß—·É ¿{ÁÅ—•óù—«QéîWéí[±aÈ/òJAÇùh‰Æ{á†P~Y¶üˆ ¸ÇÆ"ð t b™7i_òdOg>3ÏMÃÓ°© ÞürUhŒÕ=“¤Ø›âÅZ“_\•ìG{1Üd2û”ezø‘e¸e‚‡ìf@tôC ª`âš–OaŸЮ}®VØ=–kã42LÐ\¼»Ëî{ÏX}”Ää´9+¿È?] ‚yÑe`È/‡Íf\›ÃÄcl½ lê…ü€åUyozàí·+¯!¸šÄMŒ~ÿî÷øÑ Ëב'!Aœ›ùÅR•ËlÙç†H×V¨X&Ó[ªÀE^aù@TÁèdO"À8B ?€#ìÅÐ û˜(112È^ŽŽ5ùZ"­¥ 9æÈ›ùÅñ!…sñÍaÂC ùÅ9µ°=4UT™º± £"ù9ûÒžddcø´ùè–j Êík‚C(i•©aÞS÷­ßÿvÕ ùÞ÷¾×ýÃ?üC!Ãü¨2}° ìvãj7–ü" ptóë´p[ºìÀªöà°ï+CF½žÍ s+ËúÊña©FȪ2À&K”q “IÂîýqüüéÿøîŒ Ÿo~ó›µ)ì>:–ü≄Ý~•,ˆ¢„Î /ísC¢ to7vìŠúeíÉȽ5âYƒ£5˜Rþ˜’·M[ýuuYê×t÷~åk3I ÆJssš•ü¢²†ÝCÕú·™ÝÛ”-üò1Ç? ¿8¼Â \"ŠÂÓÀºPÈxмŽ©œ%+ëOÜ »ºFb?ël )FZx÷g??ÒHT²³Œvœ•ü¢ÚælÌè Œ6ö‰'ÒyÞÅõp7„gCr‰$Mcµ‡Š-ã‘¿2ÖÕ‘ÒŸ…äâoû}?_;³¼>}÷纇z¨ûÁ~Ðýõ_ÿu÷gögÝþáÖÔÓñ!nÌJ~qÓPpp–S¶èÏë8ù”S§ç—Õ\Ô±à {ê =Ãá¥(Qäð÷½ rÁ;týÈÛôÙ=íA]Tó_+å²Ë›Bw¦îËŸm#—g÷N™™÷>#ùÅM_½¦Ïî }‰UÖŽ>úغ7pBÀ¬½Â‰(Š}ǸÕù!m¼Àc)gŸ24ºÓú"™ˆÜc»Õ¬êÞ¼õ¶µD>ÀuËÞËhFy,G –Zýæv•:Ñ5Ò>cµ{ä#³ãÁ_<­ýʽñm—¿{ Ú º¥Þöa„éêÀï³ìx]"$µä¹þt®já|…ìvØQ'Jþèð€ú.긳’_\[Tã¸;uÑÔFž¶Þz›![ $¯¾‘”ÐOÛüŽŸ²÷ÆÃé'¡OäÌõ=ÁKÖ´¸Ð&fD96ÈP1Dª§îSòÚªö„ˆ=ËW}I]”C~ñÇÞzq#{{NНD;ä°í°{xұ㘱Tû:>É¢|õÚr«mGÞFÜ7+ ¹¬Di•'ã±” $æ µ¸\ H?äîÜ´*Be0Ú(à¬QemyI«nýH›øõêº=nûmp‰l¦Q&WËÃɸ~Ë2 ûþuÍç<"LŽ"•‚Q€'—g…gûÑDZÊ/ž†³R¹Ï’µLUíç¥l¨Œü"ÿ á,L‚¾0JŸV/ºFÏN$v\ˆ––­¥hIƳ}VO[²»î¹p$ù%ÃN2€ZÐQ“°—Àtï€2QöÚ™êšê&ÜíC-Ù(¿ô…Û÷.ìÃ% K€Éþk„—oTŽÈ—¿özGlûñ³5e“Ùð$#%²¤h÷0(­0g«V^y=ëÙ£•_ä¨Á‹*ëöãÄä­¿Èhwµ˜ò=áÛ.½|5”¾7}Oòxã/¤²õœ«Î>FŠ –­%Ùgú¸½¸§bâmùæíf$¿X¾b‰ #˜³ò‹« CíÇ·O“_^ÞÝpã­Ý§ïùr¯.#øL×ir|DÅ‘#M“ÍðbÒ¾iñܦHÊ@ià.{,ŒµÅtÆË³×Šü"Òêêc¤„ŸÙUòCóG?qg .})âˆfF¼Ö2•,ÈIeJR½þžÌÕ-Õî±÷ârQžyæ£ñ*º_ëD~Q?Q$µÒ›` ¬B¡Ÿqu‘ÌèïÏ”EàÌ`hŸq'U‹€X–«³“w•9Íâ‡xƳL×™ü¢vbJÖû&…ß`”$Î}Ë[Ë1ÑØ¯)BÅ£2¡P&,Ù¦«Õ”Ò,[çbª%Èì¼û‚rÖ´6ZPtl8Ö‰ü‚§Ç¯’>¡ƒ¶?Ú)’o~óÖ…ÒtS÷É2ë*“ úÂÕ’õ¸…Ø›z&+Ž-ײR…ÿµ—¼l¬÷b¨žˆíâáÏ ù%5ÁG1)Ú=Âõ0Ûõê’@œ¹êÜî=Åà÷ßx[ør]Ù—×ÔÛËéç±ÍÓŠ\©Ý¼ú7^W+åã–gÿû°°â¼)¿Ø—®8.¥ nÀÌôæä/zѯuÛ– ÷NEñeï}ö­ƒÃ*ù¥´Ìí陦&Íf°â8³'ýœrÇL¨æ‰•_ìK$‘6ìžaeú¹xa®?ëAL5Zëò”v®å˜ÞŒqþãù¢IÌd´,̽‘Au.W9³EÓ>ù¥½ù%¿8pí…µYbsñž½Î87 ^ gY?”ÁŒ—Ò•sòÇåçff; '/ã?Pì©“337trfÊeBà\ êÿ¬•!r3Dq^œü¡á‰*<Ë4¤U–²6‚»§ïg²ö\Œõ€¤Œ–enù™»QÉ/öCTÓBÓ]òTÎ\ËÆioy<È{m×<¹¨¿­,ê ß¤È/¢0#£ü"Áço×¹áQ‰ ”T0ÆÏI5˜ìý‡ùÅ›ñÅGQQ I¹…reE†9Y–òKêG–²Ú®RçfòË:ÊlŒ=BÆÁ,ûß/ÇËcKšufAUÝ[ήºÀSõ¥ƒR0©a&ð:2èj2›É/kéÑyõä°×KyB97‘[\®)³ÛJió£åu[ù|3ùe.ÛdÜÏ΋'KÙryñÌ}å®ù—j{-wLç¢ë” è©üò‹ &²«ÎÎ LyØ+¿(—à|xIª[ˆH1¥ÂÀl }Èð¡%â*ƒn ’—€r!x€^í¸¥9¨wÜ)Áä&ËÎQ ßt3ç19«Ê;СQÆ>º{jÍ3ÐÐ?™¢“R Ä——ÆÃ’ü¢²Ç[ýéZ{ÚòS½CYƒ%õ¡\À mòäÞcœ7jIBàu(üÕ,éîk†èb3ÞR8­1rC‰%F«úÚF%¿0TÔ²37=ÞÓbHÒå^Ì„Ñt±3P»^@¢dá,õ&í}† ^DùE°€Ø²ç|ÎH ¦ˆ£2.ÑP•¼Ô—Õ°LןQ™¯þ§¯ˆa‰Û³ö2ˆ¸q¬Œw•“ØK Sª¥À¼våÒFߢü‡©Ì9ç”" --8ŸfßYj)2 XSô¥°{2Ýš÷2eÔ=S›>ºè >$¨hå f¹û]Œƒ°|”eÊÏ=T~o‹™‚æŒÉ@IÃîw¨‹¢–X(þT¸!>·ÿœ{}T3yÏ>hT2B58½Ñ_Ç3êE1P)Ê/Ú É~&:9V<Ðy#¿x‚B¼@‚Ù#HDq"RÆ#¹!Súý]‹âËî{ÎÖÞû–ûtÛï¸s·å·*ó°^SJ¯ê^VªàßnˆsÒåZ×XÅH%ÞùÉ“óF~QP`rÖ¹ÝËR¢81J»‡×,Ø»ÛkÁ>•ü²¼àëŽ;é¬Òª»¸6_ßQ&`_uíõƒQðñÚ«D~yù+~½À,Ѩ¾0qñbšKŒ´wíOz”_ü‘HºÙø¢[fãÀœÚ§aØe™î[È/K>b0b¸Ï&hJdnÞ_AKMÏ쉧u/zñKëRM‹0£(¿¤_ÂpÅ.ýÓu"¿„:HâF”Ö é“_*³à`ˆ†»ÑoÔ*ךƒ›ã±QL‚¶hº·N0üÍòïE…Dó´)´• µ½Øo0ñ¤Â²@´Îä—h×9ûiÞëë† ¿F ¾l…¡­5=Æòdæ1kÐF%è­OÝý¥nåYç•€óÔvOú/ýʽcÇjSìcÑÖЕ‘£j\—,ù(÷;p"‡‚Ž®–? 'ÿô3–èÒ¥eòØòŽÑ…h…Ä£pqZçZèZvz”À…Óš>ÍÐ1@’häž{ÁÛê$BÑÔ™8Üš°g½`BñÂùRâ¬9KÒ}p pWb^A3¾ß±Á‹2ôrLÀÙ-+û/|°”›)Øýe«é Ó±á]< ±¬#=ÝŽ¿gj’èçº hð1¥&4ŠüÂhHež\kò ,Ï'>ñ‰Ê »gZ¨o¿î°Çu»÷Œ]Îd6-ž„wm>(LŸQÞÀ"Ô Kxûv›±9«­àá¯5ùEr,«±tÃ4O=ìð"ysÈ‘«±Âö ž’£éˆ7 31t:‹!íw§˜Óx<㌽€>ôÑßêžü”Ñ3ËØýs­É/ö£¥j/ffJ9 øò`TATôFû÷ ƒ( éÚÒ7ÐíG+#µ©,Ž>þ”{¡ö¦÷§=1'ò‹R6nHharhæÚwQ’@‘È0èpC2 ¬ †ÎQÂHg£@“£#˳›¾P1{ 1öj™úÉùå~qzLÿp»Oz˜3|bò‹Û…, 0K4Àû•g¶É<•©óÁbñ"1íSÇ øµè*ª‚¡ñR˜ö`<‘¢aCwØi÷z¤H@jdFA‰ñ¦[Žy,ù%ú=(LÃbÛpêY—WèL UuÔÓgyeâ%ñ¸£DÖc?f©6Æ]£2e6s¦ýfšQäç]ø¶¬Ø§.ÉL'ÌTÙ7–ü"ȸq`ˆXN)[Èú‘_,½þKêæß}uˆˆe`»å-)ÀýðæyN††ã#\­ÌV_áó‘²Ê¥üw¿ÜýÅ_üEeùÐòÁôyðÁ«nˆË{»ì:;ùÅ^ñÉìO‡‘®K^ʇ~DÍ^/i›ã!: –ÎõEQ¿vfÊvì»ÆÏúBÝ{°°mTqÓì‘×"wûY© †Bc*\]È/k*¿¸¡þò­o}«ÞNÜ[´'Lÿ(¥{_K‘H Êp,‘´o ƒ÷„Oª™‹×(â˰òKP –®åÚGjÅ ay†5ãÂôi:>¿ó™Ï$¿0”Œå*ݳoG*¿¸F™á¡åÒå—ÈjXó§Ÿqf5P¤ô’Å8ûàäV]Q FåÕ” Û¬eh¦—ï÷¦ÿ7~ûw>;ÒÈû·«£2@e¤ò ®‚‘0VA<ÈýržV®<£>ÝÄ,§ðA¤k–™¼H*ÒuJúR((hÔ#ìÓ$ñøÒäp†ÙBaúœyîÅÝg?÷…ÊðÁ¸£¥E è¯þê¯êû–ÃÜ <³’_ìÇ”-”ú#e”-Ž<ò¨ê F:ó¢ö£‘D@2Ö?{ÐÏÛ› [Þ%Dg‘wXðÈÒï+¿œxÚÙÝ;.»¢¸”^Táå¬ÎGÎÀ|H}iFò‹3Ftµ®#ÍÈþPËø½×°è ^<%p4µ‰;¦”BïZMÞÍñÊ“Œ‚-O®Ï6:b“·‘@ø90Q¬Eð³«X®zbWÄ ¬B%± ˜gT~±LÍúa-×P—ú…'U¶«®y_]†<Önö¯ÆM“^îh½B4{92xÕ¶—Eßœ«ÒCIEŒ³„£ÓåçòB~ùérí… r¹V€WxuVò‹"q ¹¼Ø+MåK/»r éšë‘Ã<äå•soăqiæûQÄÍ5ÍǾGÛÅ»å¾QbÚz»g¼(mΉü¢Ë$pN*þF¶TUmáÂ}»›?ô‰çRÂ`¯¹=|ùkß®¯¦gWZå!ð¶#C´\À˜Õem¦©ÂQW³Œ÷?èÈîIO~êH#-MÌlh"ò‹R‡‹¨heoF;äßó¾ ô\Ã2o,‚0 ¦…2yÑ~”DcGNÔ%äÀÌ’m·™¼`ÒO(÷ÖýJu  Ì~ykM~‘XaøØð)xàAÅ;M ”·š Êô« µ½èª];ÇóS¶$ 0’7‡o3‘]•--ZzX÷ôg>{¤ªnG¼(èÌ™ü¢ÜÇ«ÂrŸü’¶øEo+ÔàbDHØ¡0õoöÑ’œ¯d1Ë5ìž¾(Q_S–K—Y*»Ï=uèÛVkM~ÑûÞ9“©áêj#d«Œ¹Ã}àæ•DûkÕ£¼×¿ÑKÀ#ù©å*/ ‹Àru‹±T]Ó„\Í2}‚´Ív;íQ°­™1àh-(0¯ùÅÞt+qœôG;9—d.¨×}àƒõLœDùt]ž}š„,ˆ¥rÒBž”8.r”Dñ%“'öÜgqÉAeVi €cCõb­É/ÎMƒ÷!Ë»'åû çÒËxÿ ·A”/ QÚ2mŠ/KÕ~t„X®ö¤ëoö¯e™:±×Â%c…QÔbÆHd­“ò‹& :#u˜ü±þÜ*!œñ^ô¶dÚð é2F®R.ËŽé ÌG”e¬t.ôÂý‹¸µÑ4“°{¼)¨Jâ:“_´·5@…êàå Q«ò‹Òý–[¾±»ôòw•TïS¢µîˆ·Ô¤Ýñ‘"K6Š/mÙžR'µ¼ü¯šqZËðÑá :óB~±TyR}3ƒ¹龦$8\øõõW—¶Üª³ßÒ½«t°n¸åÃÕÐw^s]e¶g_žrÆy¥ãuf·ô C»¾èÅ#¿³Á»@wÞy!¿8+íMµŸ¾8QúØLo¦*ì–i‚ŒÞu÷=Ê“_ZÈ/‹«æòóK³õçÊJ˜ N=?ëÁЬCÊ/“ çK£¤¤F÷‡Åc98lͰËä1KÔk}S'F=ÿ¯£LrŽX‰ ÷Ϲ^òÔ-Jßþ¡PgÝJä…Ã({],¼€‹õF~I_?b–b4 ÖfÉÍö;–£Àâr ˜æ•Y]Ãä—ò~¶Ÿ I6%9L~q+ñŸ9|•”E|Mæ/AXWO[~š8ªJÿÎÀ_™,QèKìžbຠ±ÍÓ“# ž.äûT~›Ašié¹’ k‚Œót$5ÜaEq·ŠMJùeùE•ÁEÖ’§ÜdÉ»ëœ=,È/:K^ LòÞd#RÀQKÙf‚GÈÔQîaG~‰<ÜZdHYºþ€b‰*’=ìÉ/¿=çÚæVõÅ1KNœÙ:ÎB‰G‰°–Ìæ”q8ÜuŠ®“üq „2ƒà¾ò&%ÃìC%’iK37{Õדú9†ñ4©ÓG¬òËfòËZ_S\&Y’kó3›É/e*Ÿ¤-nðQÉ®î56‡¤òÚ<Ô9'èsùO&!¿@{¹÷IÙÜå¥î¦!J禂Žïÿ„¤r1x€ªšËûþÙ±¹ël¼ôHN)7ƒà :ì¥sªzz™!¿Èˆ¢B @/Ìá/3r>ºU¸>aƒ¾‰¼¢1Åá’ mø#Ä@øò?r¶7ÅCri™^ŠžŠKvÚlæS‚Ëè#úèß~ÎÈã‡-ùß#DÔ È.½O‰·â“ö z.#•WùÅòäEÆÈ¸Sù»TÌÞÝ v»ì¶WÓúš×üFíŠeÂ!#$FÇ%+Òc 7$в$GЇ;/Ê/ú ö €b¹Fy·¯:Ñ×îI]¸ï¢nÉÒƒ»C,³?N<£Á³K7KWëÒB€¹ìª÷•¾È»»³ )fßÅË Ûç7*?˹èÅ8y-/Jÿòâ5ÞS]¨¬¦u&¿8ÐÍaT¤dÃÜx0QtÑ’"V;K\6A#À\[‘[™æ« tÌñ§Öig–iøYéžõÉ/Ûµäç…ü’‰ñ¡M„¢&“=è‰."ŒR¦–\ð8éV™i8´6Ž–¶,¹’«sBÚ¨TÝéEûT0ç„–€‚̰0Їa¥ |öºíåç òŽä…ø¢dÛ²/ÔRW9ÿd.‘Ô7DÄ­Ü‚=àÀÃ*&guÚÄô”] W¹LÐæIhÐ& D‚ òùå©OÛbµñqÃÇxÔQÛkM~áE碈*ºÚè} 0‹—2h!žéó78öþc› Ìê´ h, ØanHÈ/:Ô!¿œý–‹ºÇ?ቃéj£ê·b€\—7׊ü“³'*NÓ'¦•_úȪx3*`,à,< Þ1­ÆvOS &(°í“ hòËLíG O¢Lx‚•Õ¨°–%[ï“´\M{ð‡’kɶdY‡ÙÑa©®Î YØ{â©cÓT%û¯6NxE=h•ƒš‹®¼¨µÞ&mz òÒ`k<5ü×®{ì3#]B`rWum[+å ²¥*É–0R±L8²aã ‘y±é÷4AXf´ú…°âMÃk íuD†Â‚ÁØ‹«¿î®_¿áæ—¨OÙ¬µ/eE™Í5'å7 · QUÙ_€ ³€‘ÇܶG'$£½ûÞìóBšŽÏ%u?j­3.ìž6€ú«uõôë«S“~Q)¾Tô‚ŽëU¢çpãHD• ¥=11ùŹÈH7x†êg8å£rÑcŽ=¾;¢ào–cŸÓF‰žÌô•=ÉHQ"R$ƒ©û7Ò°y£zÝMîžðÄ'ô¦R‰Ä_¤XùÅ^D«·•3rÐGGòÔÓW­a` }èjÊL–k–,¯3Ttµ'íØrjË´ñ@§1{üœ3ÕÞj›FÉ›RAù´ÐXò‹[¾›…r…z¦=„Yà6qZ9Ã2 š7í·àãx²IÛ,[MkË×DYS³ayÍqqO <Œed¨K1²Ï 9³ŒJÕl’$„Ì-ís„cÉ/nä–)Šo˜ü’ºŒÈ+³1—5\q}¸ "iàÓlŸÆ¾ΕҤY’mÿ5‰©i]­»kÄmÆÞYF ¾êÚ2$¥$ !Çõ·¦‘[ïqÈŒÊ/.¤˜Ü¹=CI˜ ïQGS½1­í1-Š|3ç¸ÒMq_1ˆ°@ú¼vãx±-Ó;VÓîýŽÔ3ìûïÜýÙîÏÿüÏ«Nˆ×ý÷ß_ã=ë”yͨüÂHûP!*ã,ü Ó–Ãi+OïÎ<÷¢)Á§LÂø‘¯†éÓ°sePtYÆŽ{2¬FHÒ1B~™–·iê/}GÏLÊ/ÿò/ÿR‡=xð#•_\oÜ2ÔE£š[=#yºêìsë8á55v†5wÖÔàáÅu}}ê·ïž•ᣩ«”ÂHײRµÿè£L IÆ åàçAµ”—šÌ)§®,‡¹7{m…vzò!„#ùŽ0Jãˆ|rŠþù 9„ìWtç'Ï[ꎘ¾NDañåÝgîùÂH#ÿã?þ£.[‚H™‘übM!dd¬Lʇu´\„öðCDAÆLóB;DPÆ^ôp,ߤ}a° JƒíkF[þM ¨m³Ï{÷å{¿Òýð‡?¬¯ú§ª/Ÿcù@ŒÙZ*3’_T­eôJûR¸°{B~¡Âð«ßwc5T0p~1¦5“DÅv«˜Nº~F‚ߤr”_’I"ÖÙÈ/§Ö¨,[À†—^úŽZ™wyp3òBh•»zŸNRtr,ËuÕ£J9pÌ]ÝD)A¾joú%¥l˜©+*k7ÝÚ躑Pä!“L‡êð=ضcÂÑ!ÀðNèÑð ñ¥iö¬К°x÷ІVRRòRáóQMH½ÃY>+ùEÑÊY™ ©‹F ÛÞ]Ó{ýyw×>½Cž—%å˜y¼‚ÕÑ…ÕéLMP†$ÁŒûõ[6益*ô“£&R~‘·ò¤½%›¡@‘û^Zîmùäï ¼×—´iJ/èíe/ò0Cí_ÁI@á¡àÏ›ŠZ{e¤FÔ˜²\}|ú3ž5Ò@í>ïÓèš9‘_Ü)—J ¹!À€¢x½ïº¬Fº¥ü S<é¢ì¬EÃÕZ]eZ´³/(Hí°ó3N·*ˆ)sR~‘¤«Øä–ªâo À®6ËÊÒ¸ów>_¯CüiAÄ—Ï×lFôê hvÓ#8e ~*ƒ†¹!<ýôgŒ&¿8 ™×šü"éwH løÈ~«^K.}Ç•ƒÛ{ D¡—qÒ59¨ý( :Q}q\2¢i:û'"¿ºÏâåÝ›·Ý©û©‚óµu¹y1Ku­”_ÜJܺSºOÏ߯œÂ_½.Óô–ûR§¼èȱ#R$bZ²ö^fd C_¨7d&:¡A¼p¾¯ùEi’`™ýÑN•˜Y2ÿnºm9I¸'äÖêE :!£9EѦö’«Ù4ÃgûÁÛÑŠh¼ªë†äλNäGŠj]&iÀ¨nK›ÜíÜçDÝ÷\wã ñô­bÚÈŠ…ÏêRS«+’6íž}K%`fv#=d _g£`È/¤Å…hKTâÀ@iS.¬¦\T”Ó¢ñjoÚ—"kämÂòáQEfIe›kY“ž:¦Ûm¯…eÎÇìÊ/*‹€ˆ–ê¼_%–mÀÃì•ítšÞXÊõï(ä$R$4Iã,צ=yEÍCcÜ4W«ÀEËUì%/{ÅD U:‰¸Ã_¾ºÎÊ/òY5ËS™ÁL&ä—h›[FÞÀ›KyÒ)§uï¼ú½u„Û•%è ¾ˆ®g—K÷©g_ =»¤p¥¸ÿÝK‹q£¦'Í”áX=)JéÔy¼·3Ö˜;¬Fb9úE)’Ë´þ¤Œ¡Ä׋1£Æð÷ߘ7¾ÅO/ ™7w ÷ݯÛizRæÚ½ºô&ŸPZã°é3}ß~”ŒÏùÅ¥Ù².Õ§…¶¶otm/ûqÞ•_dû’A'½úu¥G¬‘ú2.”³ZI%V̯ò‹C×^Jõ·lׯ ¿£« xèÒîÿU\ƒY¯Ê/îl–®êÜÈHÚ'‰w~Ê%×ÖÃb€- z;{••dþOÉ7&šO‘_ö‡ œ%9ùE¾ÈXÑ×GoÄí3×Þž{X“_¼yõ"Ù¾KÅ2}D‘_œ±™O°™üòô§ozl‚™¢s9JžP^ Êk•Ñj¥ªp›ÞDyÝFÓ\á—"6ÁèI"üÚþÌDçäÚþñÍä—G2ùE¥ïK~‘$Èsúî§²£ƒö䥳›õVªÁ«u³½t£¦X*¿¤­Æ0†~êSŸª˜YxðMýOW§ÌâT|X‘_ô7ó†Mq®fP]}\ºLð/W·M–ülhI†wåsÔ%µÈÛHÖy/C8UÚÜT¤tÒ=è’ìÛ ÜhäoÆrÓ>Ðz‡K‡3±ß€í7Ì„•€ï媌ôûr×ÈjD7ÄmEcI¢óÎà(6mPò‹›º`3ÃC<¹å£‘© ERq³FºZeÂh¨ Rá†hú®OC8Æò0NÈz#¿èSêÓå+_©/t#G€>„Ën¤\J÷<8 N/ªÄ»l{ñ\ŸÝ~ˆæ’«™R‹K¸}-pùÿ i€oµ*æüb€¢Áù8ï\p•&¼0JØ=¡/©ÿ.¼ÃÀš­wIö=ØW}a RH¨*÷ ÷ð4[Äÿí¡ÌùÅ’Ñy6lZPæ†0P`‰0fõ.»ìÚí¼ËnÝÎ…ü²ëîÅ«…³Û ºvÚµ{Ýë·,3±^1µÑÛ`œUèÀ 8#®mÊ&ZwjDSjÜ“MVÂrUTÇQd,¤0^´',Ó¨¿XÆá†8÷*G«TöÞg¿¢èrP¡P”i,¤]·rÕEÝyo½¼B´µ .*-ƒSN?»[¸è€ªü‚ÅÀ8íA©_šK©Ü«(¨ E,PepÞÈ/vÚ‚MŸ£Õe`#—ì_ø"V±éZäZáºU:W@H€‡ú!Ó)©Í¡÷Ýð¡‚i_Ù½ü•¯ªê …ÒޚRŠe»ÎÊ/hŽ ^´/=9Ë3¶Mùå CÀµ›a}­,¨*ð-.Y¯ ¸`|4nMFÛ}¯ýª#NŽÖ0ù%Ä€u&¿HÏÉ‹Qض<Ã,àÁýXZ„QŽh…LOôl£…3<:ÆÂ×aúhéA&30µ Û4½þ)OyZíTAW…£Õ/qúÜž”-Ù6k¥ü‹}àFB JÁúFb÷xÈÑÕ@°mñö:¨'Ò˜>–l¸!–+of²6ŒA¦ýjà~êî/voyëÛKÐyÊ@ùe¸†+àˆÄë¤ü"à8€öL–¨#ÂàA{—~L·÷¢:Ã$ì $ÞÔBo 7¤O™ˆò cóÒ–?ö„•u¶ÝL­AJò±ÖÊ/ C~‰¼Mh-Èì×}ÜÉS «{/,Ð+pm^„|ÔF!…C·'à é¸Z kÛí¸ÛŒäa™ØZ“_)m jÒaœ³ðÈ£Èi4!”éW +mVòS¨É܈°è…‚ON«¿4Ù©>u"ò·}ôŽî‰3_$!¿8ÞæL~IŽ:¬ü¢"~òÊUÕ0¥aãJ(/GFH0öh_´ˆ7c ¡¨*Ø0 ïË_ûNoõ×§€+î©hL”E{pTÉy.“‰ML~qѵLš/ö 30TúC;¢œ}ÇTájMŸ†‘›6rEõºè #½ùè÷¬>V¼ñ´2>Õ²ýÐÇ~kFò‹%‹ô21ùÅ¥7Ë>t£H²Ýב<ëœó+×o¼Kµ†¦Ø>ñlŸÚÄÓ`f`-ÐËåsGõoM3î¾P[]$¥ñF¶Ýa×É/n6Œœˆü"GNŠvOøY!¿P^9÷‚KÖÐ i:*!’Ú—–o#Â4¯z ×> ÌÀ[K6žlm™öÉ0Žšã ?ì¿þ×ÿ6ãD{2¯YÉ/–&ˆ/JÂc`„Q ‚*ÙιS2ÓÜ‹êù'?eh_¥Ñ­ÆKDÔìņ‹ æKÕƒ6‘"b)T_ˆ¥ÜÒ=£Œ —¤Kúç¦|ÖEœ‘3’_´Â]TÝê%åÁÈDq"×¥ã?±äÕ—Õ•_¦?ü?wÔ°þ¨j¤%Ú'ž½ÇsÑëi¬ž×d!B@ÁË<¸>|÷ÉÜMU\¶Ùà,÷ÞÇ’_ìÃþ}PÉ‚‘U«õ¬³× ¥DÀDPq B]y–1Ô±}*’Æx&†lÆS2 ©^>ÂÇzµ¯µ×oþÖ§*»çOÿôO»?ú£?ê¾ýíoWÇS1ÎjsÌ$¿¨l»å«Ó¸iă}ÉaOîŒ3W#éé¼§Þ$ä Ã¢(x!ö]{]W_~ÆÏJÐó{þÝùº×4˦1}àñ¼>õéÏŒä…üèG?ª[#8e¤ò‹;¤s&ÅàÐâA¬·úO:¥yÝR÷ÈêO>ÿ^Jö¹}æ(@d±G-c÷LÈÞ¶$ –³•!õ‹a¡31øÓwß3ÒÈÿüÏÿìþäOþ¤züfFò‹Ú‰²¢ê›²F„QRxR¶X^êÓKèÖƾ‰(J8!¢dæ7†+Ca24:xŽQ9ô{<Ä—F~¹¤>ˆóÊUí÷¾zߌFbøØfŠb³’_œÒ9G‰õÍ­²¦°DPóC»«òBÜÿÚÇö²×7¹y-·Š0ëe$èög¸ÐIàyÖÞ•Ä32ÆEù‰‘oyëeÝ·ÿà;•Õó¯ÿú¯UfнhúØ—Þ¯ 4+ù…‘^¼)E¹2VÆÝͲ½æ}7 .»!]çÌ ?Ù±€ôâÅ‹ h$‚‘Ä!i`ÿþÙ§L4"LáS4c/¹äm•Õsûí·×j…º“3]Ûvy'"¿¸$ㄨwFSŽcGù%Ò¦qÇAdl6Aö6 @{ÅÒK´`Ê$’YT k MçTÏzí±`Q¥k¨Òy/Þ“ŠŸÊŸ 3/Jï”;帎]ìÚi6ýÏajI:+-WLˆe5Ó¾*¶Òá²rQ…©¿,#ˆÒ¿I0T"î`¨Ç$–i?ÁÚK>†Ãeÿ>~1>÷J—ú‰•_ ËVbò¢²¡?BBcxiâeEÖÆGÞe¸"Ê:RÔyÆ%Š(gú¾¦,ÏJ*vÛs¿±±Š[)r×u|¸‚™2:˜i~£LÞs· #Qgà‡?üáº$RÝVnðZV”_x±Lc¹ZÆ¢k¼èîè¼tLHxÒž³Då¹yEÖÆžìÍþ%~Æ3Ÿ3ÒH©¸Ö䵚°rÁˆ¢¨:S-·½ãŠzŒ ¢ø7#-SÍP:æze©:'í/G/õ/Øá…øè•K÷›¶Þ~Æò‡Ò%ÇÈ»-Õ9“_Š÷.¤a÷¤ø«Šm^ûþÔåè5¬i‰ 8ÎUCÝrµ'] #å×±éa ËkalÇ]Ìw‰–ݬùŲU9— E¸=’ßíôE±ìÆ~¤V×Úä:®‹’F6Y›&PÄ‹Q3tN:33;$Ò6>î¸ë‚Y¹!²uàu&¿‘¡_¨ï 2å—_d¸Mù勃«’DÁMB®hÅHÙ/:\Ǧ—kSÍ%›‘_f‹¦ŽÇ/®3ùÃÇQÂȨ¾00Üí3w;¥ü³Ï=¿¤vŸ¨$´\™$ö¤e+q·/å©k²|š¡û”ò&]æŸÿùÇŽe¨=1Ò^\'åÖ%ZBhf`Ê÷mW¾«Æ Ù®´è.½üªzÔãXÓ“V˜ù‚Ë øU<øÒ—¿rF†]¿ˆå=X¦‚μ_ ¿Åús7uÓaV^þò2ñè¬sªÔÍeWQ-]¬r³p×<í,ô¥óº£Káø°£ŽïöÙï€î%/}y÷_ ÐwRH·,G³Gä_gò‹¼ÕšÏ$zÆYšà_fÖ·¾á‹»íwرۯ4…¨¾øü•¯zu÷¼ç¿`¢e9l¸‡ê¶¡š×éûÞO1v²þä°ò‹Ì!B~<™Þ`ïãÄ&õÌ\~ÎRU&wò‹ë‹Mî2-—õÍåÍ×Ïz¨Îç!å—‡JÔßb­¦g—ìa»r.þ8“­¼Ò'I¼FŠž0ž¹“óeHþŽ½Í¨Tå,I—%ºÞÉ/©VCX1X² ¶âˆG‘÷ l«D0†€q?tL؇EùEÕš¡¡òGËh®ª/5—«ü,CUñM¤@¸a(£× ùE0`$vض'ì%XÄȘåíû0“~3€Ód\´{¨=v~ˆ¤Áî¨ö(¼ƒïÁÍ+ùÅP´ ì}n¨W¸!‚‹7†Ý.ÅÀ f·Ý÷*Š/{”מUùe§wëÞ´ÕÖѝªÅ)†ÙÃ8…¬4˜Ò\Òl²1ÏŠñæüÂ{¹Æ£q"öéKŒ4*jqG9èÐâí#¯Ðm»3Ï»¸(À”ã¥t¸.ºôÝÝg_Ð-X¸¸TÔ_Ó½ Tçx0äFÉ{ûš!*ù¼0R¼¯ŠïgU-ÆÖxhعÌ*/‚; *ð¯ /B„ñÊ<Ø×my.-?¬ž``}„‰Õ¦Ó®ÓeÖmŽœ°„æåêi XèKJ*‡-÷~Õ>Õt ?ã•ef5’ !ã¸ß¶C›0ê—‘!¿ð^´{ìÁ%%òR~Y„T‚R10Øsð–ÈÛI´¹Ì ÂȤf ðn{.ìžR ]Þ8ãÒ=cD¥fä!¨ò­“ò‹½(ºYªø°ë ê‘_–fu‰vßo0ª_¿1xµêÂÙÒÙÒ§d¤Þe#¿Ü]¸Ñ*8cÕÝÓ¶xF­ÐŃÃÝ3†ò¤8à}YÞ kå¦óàHyB™Ê„¼h :ÈyÑçÅd-á†ÈLüñå‡VØ=+¦ÚáMõ%s”aqôaéÂô 7„‘:ЖªŽt›Ó|WÅThÍŸ{ÁÛº'þJƒ«¤ƒ6 ¶çIG•h»ÖÊ/Œë¼g újÍKË ºÃK1À¢aÀ}_Úˆiàdð8ö$pDÔ_,SŠp¶"’þ©gœÓ=¦'u<\Ãe¼Š JþZ)¿8›0PyÑ-¡¯¾Ä‹'ŸvfmßAnèõ85øØD±\u˜íËpµ¢Êy1Cª3/ÖÞv‡]Fj…Ä`FºªÍYù…]íÈd2ŽˆcŽ=¡j†ôg³Æ“ í{I"+ˆ™ùÈ“¼h™¶åÙ¦o{E+¤!IÚÐÍ'<ñÉ3¶dO>Îï‰É/ ”`‡Ýã 쟃ûí·¨;®HÕd4l\†CO`š¶<@p­ - „N¶›x¬1>?¹áÁfð½Ý§ïùrwDÙÿå¿üÔHC§¤zs"¿ÀîHß|ÔQ²¼¯CcO8©î¯ c·Û’m`]Á§/?ÅX‡‘p«Œ˜€é{1‘uz†:|^›¡nÿâ/=n¤‘"¬Ôrbò‹hjƒëSŸ¾Ôב<÷ü¦,á5 ¦_YH™†=­åÓ´BxºOeê £ðXYe[¶Óà§wÙs¤‘ÎQW¸‰È/òQ /¤O@Ëš?ï·׬¥±.ªÔ A…§¢à F3.@${ÔÏÙ Ü–g–'¾æÜôâé>"úü‹ÞQޏÿ²†¡¿~ýѱäWq‰ëûK4ÌYÿÁËéNˆËEÉVHE9§*Ádxö©%ëÁ82x/áy,ƸÈPeÚïÛËÙúèŸ}ÌHoÊ[¥›³’_$ž„*Zöa‰º.é@tò)å“ã(Ä^³|ƒüÕG Û«í¼d¤C?S}Ú’@0b°ì –,ÈŒ¤/yé+j>;Œ:‘$¨<0r,ùÅm ;†‘Õ8ýô3«(Šàù¾‡ãŠÈd<¼,X:É9jiG¼¡Ïæ±|‡_Qcj27íuøGÕUæÊ•¹!gnF³’_„`µQX:¹©'“ºŒ?ª.sÚÊ3*gJà€a&º4‚ யû~¨>úw°u’s?#wõ1$D˜_òý½ˆ¬øŸüÍÆðÁîùÖ·¾Ucˆ÷+p!çFÎJ~Qäµ?£ÝË ôäN8ñ¤Á› ô”“±XV^<’Ï›Æä]S²RŸ­³S€âUÌÍáÅ hò7kJå„ó;Ÿùüj¼t ô‰¿üË¿¬ù¶UçÂ>+ùÅ2ÔíCº”š :B¿\ªo«“Æ>Y¯H ù¥/ži)gcÊ¡s5÷L™ýlyÛ·öú0ÛǸ÷+_I~ù?ÿçÿÔìŒ7ȱä—T»ÝFB_R:¦÷,?=éXn Ž‚¦8Ø8ÉìV‘“–-ï1R^ë,Mâ.÷PÂòiº>MÞÃç<ðg3 ýÁüA]}Šb®g3*¿D¨ÝG9«Ëh*kê¢X*K0Šï8-á–¡ WÄç¾.pXš.Ñ„6— Hà ɕ¬/µÊ³^f…üeÑêùçþçÊîù¿ÿ÷ÿÖ—%‹f¤ÕfõU~QÚWæpIxRõ„ÔD/¿ò]5ïìßB‚Áè ð¾¥d_ª^Tæ°ïxÒùÙûFø«G2ßOíÛ>ÃgÅÑ'Ô2Œûí=÷ÜS—çïÿþïwßüæ7ëeÂÊ '&¿èc@؈F3R=”›e9¬Ó“‘ýÁ¢‡ü鬓‹’<ÉPžbœóÓ%›ðŸ‚’¯»µø™(4xÚ9ݯ—b—•mëXa ÕŠî”Þ£sjk€(@Á{å²yeýL*“  ÍýÚ¨âï«Ê¹tÝŠ$[Y†Ã‚(}Iß ùÅRuè)𖧃.áìa´þD¤mÂî‰òËkË¿þÆ[Wãhµ½øÉzs›F»Ç!¯þꨈ~OŒUüR·Ýi÷…5ÐÌ&mã°w®3ùEcE“•‘J÷®c^ÁÆ¥ºm“óìégžÝ]óíõ¸h¤îF©O2ï–"] ë.A'«Ê&{ì³·õv;—låfÅË"ã8.æ…ü"!Ú1.ãÕúåû0|D4«`›m¶­\oýhOõ冺\íGCNñ¥Í i¯6Gd¿%u/zñK'Ò6l#]gò‹§Å‹JôŒŒúKÈ/éOØ ©n3œ±'ž\8È︪e˜f¹dŸSŒ4Ö-Œ»#Ž.K¶¹pÑÒÒÑzQyH‹vΞ XÏfÉ/ÎG†}˜Û¸i¿?¸þK/ãÅåo ¼ìµ L¬ßu·n›ívèÞXz“Tî=¼¹ªR8·ESAg^È/xX*ažœ½é?°ÇáË××÷=`U +l½_T-Ê#öÍ?WæÀºoEñàz%¿È,ä³iÆ:CŸöæº0î÷ý¶®wòK”_¤} Žd†^â¸7:é÷£®¦nRË!å—=Ç £Ÿh¢ýLÊ/:]}åKØQ3–Ÿ©!ƒq}Rç5í=· qùeƒ+¿ÀÄé, ãØx"ª#ɽnÃÊ/R5ƪHlräoØtXw+ i£"‰¼ÓÖ^E~ §$ä—’ZÞªvË{ý&RF?bÈ/òÝÍä—Rt2DÉ¢ì»ÍÊ/“Ä‘8ž¹þâ$?¿Yùe3ùå?)ÇÍ}êN“¬˜q?3QZ7Ó8,W¯¥rî—²· Qg¤Û‚sP÷·O~ F†£B/s«ˆ`’ÑXÝ©d<§Œ3dÞ™°ƒŒBTºozS²¹« Fz§Ò§i”aÈ/&þú¨ŸásP6T  }É`£Õ~U#BÒ–×–Âö¥M±–uãçìÉLnR¹ã1Æñ)zékÂÇR¢ˆò‹Ïä{ºd†ÏÅeân* r!‡Ýs³ÙäÈ/¼}¬·1àòÂí 68ÂKEžá)ˈ0 Ò<•EÅÕrWzäMÛAżxõþ’EÍ8!b­r×ò¶+à!W"ÞsqµÏÅ3°é†Zzzø”_奯åãM»Uè{ã–eúŸá†0VÏŸ×7šò‹}Ç{ê±8Wz„–×g>ó™ê¥|àUîBqÚ^ƒË—I®*M1º!éœij݃Ù@Xmò ³€Á@Ë”GÁ£µÍ¼±L¼Ï¬æ@eú(ƒ sêD¸!Úp’vS "“ÃØ B~IßÃÇÒ à a`_%ìÞs)îÓ—‚$±DÍöp)f J`È/f4GþAj½“_úܵÈjÄ‹!¿Xšö^Ø=; 2Ãä¦ÿ™NZ„ŠÆ"9¯ª–c7(·ð¬³v½_œy÷8}n/fïõùY'Ú}Bx)Ê/_vÞunÇB|¡ü²Õ›‘_})üލ¾¤Áä,Ödµ¤•C 8$ç±Èk¹Ïù…äŽÅ^áA{0Üp0\P´Ñô6–u‹—×áÇ×ö8  áç^T0@J——ŸßíµÏ¢îee˜åγ,ŠÑ QÐöR‘ñ,:“màwÖ™üBùEH”7$A&¸ôh°ì "­ÑÑ„Q,ûÔØ¡º[º\z—]º_GA‡—`²´3YÍñeèPŸ"íSàRyXgò‹eŠ>Âäó¾9¨N|h™>VæÎE— lÀís½IhJH«þ`jø9}̆꺣ÌqݯôBŸ1 íË‹c ÞK¿wb©ê‚¯3ù…Ñ& šK´¿(Ô‰eËYÙmA5^ºÇ:Ç–+’% ⢵G å®6¿»»"½N:õ¬ÂòyZ]¢×%Õ/RÛÏRµV~‘d;.,S{ Ï ±D<èàÂ*(½ÅÒo#ú—U :«ÿÏ“–®Î²sŒlZ>·TCÃ,¬ô%ðK¿ü¸z ¦/õňµ"¿È^ÂÑr>%І:±´xôø“Ϩj…3Ž‘:1Í&è¶'!@ô+A?íI˜;ÝiH‘†òÊàÍÏWIªŸ/]gKt&) Ål%Î9“_(7•wÊOc`¤mœ…§œvVõR£*>ÖÆ ó*Ã!­<ÝdØÀ?a,×`úŠX„¿µýN»ÏÚc€Ü\æD~­ssh¼Q_ uâ¨cÚ$Ý(¾@kD…íÅ6þ»i…Ø^@ Õ^‡)€‹µ3V¼¯á“ã¼û¤'?mFCi+ML~‘w*us&z:1Ð2uºÉŸ¾ªMÛ5í·`qZDmªyõ¹ZZé¼èØh€ú»êGû(ô‰HÛø÷¿ý¹Â ;aÆå*YmÉ‚¼Wg¬`UÎÏé™Ë&®ØØR®DRÆ:Ë•½\nWytÅä4tÕªz{“9É ´GAV|ôg$#GFób›Ý aù{÷}§BÙ6Џ¿X‚ШÖp–ƒv„H\¢m*f#DRtÓ÷Tú:’‘Y|K›A ÚzÓ Í Iå½ÈOñnäàB-„˜´T-Å0{¦I/ §×PÏEÛ²/ÚÎD~”ÇHu#—ðp+ >zTÉýHŸ²Î@5‘4†FnCÏ<§é…´ÑúPÅñÃ`{/@¤ð¸"?%øˆ¬`i°wañð¦WPÐ „Ø^äC+8·qB.«Lø ôB~`ìWAF.p2Ç~ôÆyÉÞ‹a¶ñf6ß1Àµ‡òs#&øò¤+šàXò‹è$ gh„Q\z3zÍտēN®i£óà â¹:ä’ŠÕ˜x”7ÃÀc¤7úR0±¡ö à÷³ ´'ßãmÝ/?nô4R¹®sr,ù…»ŸTÓiÉ>T²P—9åÔ•ùØø ×Uc#rCçëÎ?Æ3\" ¯¨ËË‚M›°Ý‡ È+‘–q^Q3”úÿÆë¶¬Å¬á¤Ê1‚åXò O:ü•9\zÕt2VƆ>måéõŸæ„|¼f+0­¹M„ìâôµÆÎ¹½FÔp™}¯‰5M1~7lu¿çoO3|nïŽ9î„åÃîQTsÉf¸6FÎJ~‘( ®§²&'T²°¹Ï;ï-õ [J}zQH0aš÷=Äcö›¯ N"¯=ë²·%–<ïGÞ¦`Æ×<„«®½±ûÔoÿN÷Ýï~·CP ”v*¬YeÒ;·"a,ùEÑȾ”ÊÅ@W·pçær¾­.À÷ùÁ€÷,»œq¢cpê|K7´`)¡³ÓöuÜ.F‹¾Íð>Û‡nÐ5Ýï}åëªÚúÄ÷¾÷½š¼Ø“¶—82–üâæ!oU¸Š*6#DÝ(˜…ò‘LÇAälœmÑ)ðó ´‡“m4ÿ´d£KuŸü"íë3}ú§¾;šü‚âRÏ£jJcÉ/¨L¼) 8Ê ð5¨¼yã?<¯‰aáBæH諟ñ¦€bO:rDÜŒë‡\n úvç”T„“™‘º¹¤²ù—Éðùÿøº|9cbò‹„À/ù…¨«¨¬I™®¼êš*YO…M€}¾çû–**¡€"K²4#ýc˜ã¥/›Ñîž…ù>%m“¥ìwÑ4hõ  aõ„áã#OªÒ H c¢ïXåFôÊtRUKaä’%ûW‚>'¤Ij|»J,†Ùc_ò ð/š ,€½ÎP†¹©˜Iàrm KôíQ“eíe·ÌiµÄðÈTî©/ýùŸÿy D*ˆ.ôäÄä ý BʆžczSQám7…/ ˆhöc_¿'<.†:ž ,;z <ʃ¡ODŽ*ÒÇ~gŸý–Öò†ÌFyÒ2ÈÈÂUPäwä 'ò‹Î”¬>³«TÅ"ûíæòÖ‹ßÞ“ÎhÚZ¼–4Œ¡¢*/:ï° úÌžþ„‰ìÕ0Úy÷ oÚfÆ ³LG@t¹°\ç¤ü"ãùà?XKó–h´SÆ:½ìe//:!7WCójš=MÒF6#ųL%óúsDDv*g¦Y›èlñ育_󘟛ÑHï+ZîâÇœÈ/zZp–mš/‘¶a¤%"u²Gn*Gн™92"é˜*\¤m” yQÔ Íò '+µ"_ËÒÝ­Ì÷yÜ y¢§„eÈ/zŒæ@êOXž^™[å‰ Ñ€¼¯xÅ+»w¾û½ƒZ cC'äÍÆ¹ljèBá´\œ6ùeq£iÑv½uý…_œÑƒÊ”Îðu&¿¨–+1Nd …)ä%zFªpó2}}ôÎZÖpd$äbO„ÃrëWÜy‘úÒÏýÜÏÏh  ¾¤é´ÎäáØñá©Yž D™>–L¦‰h‚ÀëJFtñÛ/ïÞw}cøˆªaöd/òbc¼®,ßEKK¹dŸÅÝ ^økc!Þ¶I´2Ê/Ž iœˆÊÐ@Nxå‡)ás;Tµ9îÄîÂK.Ÿ"¾¼£;ýœé‰G׈/K–Úí¼û‚"ò«3JK ߥ˜™›7/ä—4@ý1áYw)ÿ©Š˜—å3€-òË6Û–‹…£7¹kÔGÎæÙÏyn)ÿÿôXÏõÿ¶ÿ_Ÿr½_T tx£bÙÎfܤ¬¹þ\Ø=2øu vQ†9‹¢ÀÉ”åúP²)C5`•þµÜÄ-×¹¾Ñµýyÿ—ö„{ãz%¿Dù…WõïÝRFÕ\ÖÖ™~Ïž#Ôq6(ùCéÄEÂ0WbÙ¤"H,ÆI17ùÅyê¾9L“˜ÍoÞ±ã£RdRޝ@^\óœÓ‰ðågÀ¹·›Wa¹£mQôûÞ”lG滣։ü‚Û!¼ç¸™É@†©Ú»÷¹"ù–¡½ðàï J .›$ùEÇWP¦Zb ϨÉ93ÓÊCš”üR°=›ùEµL5×yM2j¦¿’R>£xÍ‘Ô'¿¨ÒÛwÑírL9ËR~ ,× ƒwíïr„œb'ÜëÌ’þIxMôuü¨jkyõ!i(å—Íä—²L\ÙL~Y‰›9cÐ'9—ò3›É/›É/ ò‹sRfcê¯k“Š›Æ#‚ü¢ œK„^¡ÌÀ\E3gèÖü¨ ýÓàÅÑä…¼„2¹ lLqX»I‘_ô]µBrÑŠM è)Pjµ[ÜpR†fäª&1× ?DÃF¢®á´QÉ/®@*e&ˆ~á _ ¾…ÃóoX †è4e(®.t&ŽFÅ-$Â(Êýú.*öªážÆ“©®#M´_ÐT-ȹNr¤=' mÏòŸþXnêË5½Qø;h ¥öãòÀeç© ,Á…Y a³€‘}Í =&‹rËW~ñt-C]hÞŠ:‹(éúÔ‡Œ(ôÉ/}íË2Y¨ú£ã”:ü›G-Ý J~Á*0ËŽöZ¨<T³ûb€÷}PÔ_ì?ËTM× …ÉÍE‹0“Õ,OÀ N0ŠÄÍzU~ m' Èp7$pµ ¢»'f‰†€fö=h?ª¥ÿâ£âÎþÖz%¿ýö¢ â(ðG~&ü`bÝ#)¿ìR”_öØkïRT.£Kµ|‡vé¶-Ó•(¿¤Á«ҟן®¦æãŽêï¹dg.Êá¼’_ ™= õ¹!Qp 0´w·xÉÝÚ-:@{nyÅ4ÌNCwœvÖ…¬tÂi«J«|ÿî•¿^´ÔŸ÷üÕFÇeð˜*²§`dEDEXð=œy!¿8И°í„õaòK <ðàå>è°ÊÑ*vГ Ê9º!°²š³:^°z—\vu¾Û½ü¯êž^ŒQ¹c\ LïE”׋±Ä/É/(¼2Ëߎ(ŠeÊ‹‹ "ä°ò&yõƒVNF]_RgKÇ9cÆc¨(Û{ ÖgŸý@¬ŸVß8†ÂÀpCœ—ÊŸ–1«æûÚÆn5¢÷jç$¦¹?dãë4ÛƒŒ²L“‚E?«¼_ºìÀnùáGø Ô\õ BÃuyUŠÒe©‚•õÙ 0À¾7èݱ'®¬†ÆƒéyŒ*szÏj¾kE~=“@gÂD^*ÓXL¸?°€4Ofh-ñf Wf+ƒ¬d8-„¾%(šåA]j˜WÊäŒZŒg«ã:jæL~±D½ú‰¦ ìÓw—Xj§í|yàd×3Žá‘¸ tÄE{H0¤4ƒèDNèì·\\:Ù;’* Íb¥dM«O¥åZΣŸˆP6q¨ô}š|øYÑ,pØŸ~V‘Ÿê -0šƒaö £B‚ñµ†kˆÈ¾V¼ÑòáQF í´ë^³vÎìMQ×ñ"¹°7KdþIA†Ôi0uO«Õo”›J¼-шö3L!<é”Ó ,ììj¤(,N0OÚ—Œg ¬8DsÔ˜° ¦U%ªÙ’ ¢Ë>VÊòuÑ’p~ŽU~‘/Úw1ä,*„9èë²âÅ·^rY…¬døeæ$32{±Í:ožx,g†ò"Tˆ7d2Èv›¥þ¥j`”`2øèãO™qÉZM'QVò‹œXÊ– ãˆ-™ÌÑ…Âtn ™¸ËX/G„e:½WÔ€`Ó YU˜GkŲ̈˯Wã0 ,Ó¾8ŠŸ›Iù…G=|ýR•…YÉ/¼õ‘Ù™RŽÈm"GEX®?ç_xñ'ä’)¦Ï%S 0…Ì]^²)Ši–oÔÒ@´% 0Í ß#6@"ƒ!.aõ,YɃء ¶aµ&\¼ ò2+ùŘÓ!ùE&JºÝ*ÞvYc d~2/:ä½|ÞZ¾‘·iŒØ‚=(žtd00Óð‡™>¼˜} GËË”-2jžå*‰dã¬ä—ZºÑÛ‹îƒI×"µx衇 x!ru%ÃxãøƒSu.ö釢«€ÓÆû7&ÞI¡-ƒæÊ1Ìž‡ð¾Ü:#ZD¢.aŸˆüî¶ï¢j‰Æ‹Žaú¸Òr{ç5××Cœ‘^Ñ ± yÅË–¥}äUx!Ò·Àºfý«Sû± 5D%a¢n¤â@ÙžüÔ6Âfø¥œÉÀ‰È/–«t7$ìÃÜO.G‡í{~ÏÏEPÅç\a¤#gË­¶‰6Ѭ• LL~QOQ>T˜b\„Q ³N>åÔ Œà²XÞ\_¬yì õeŸÙ“ÎÌ&ìwE5:K>ò6>¢C…íýì„“N©ß{‰v$Þòµ/u°'"¿Ы`•ªšÂSÛÜ'Ö7œ9ç ÙZôꔌò)y¥âɧ´°¢}Ç`×®^šèѵLHÞŸÿâïv<ð@=Ë á:6 QQ&…q‰žˆümUngŽðœ¹9Jž2̰^T0xÎלq_ü½oÖŒ¶œ½qg¨3S*˜„ݱ"ÕÃ2@z©×Ôô¹º»ôÊkŠòËw+U»çûßÿ~-âïUâÂè‰É/êª)¿éƒ·Ï¨ßó/ÿò/µ›ÕR £¼oŸ¬ç¨¥çM3(z•¼7-ZTfˆ”|7ŮЇíWÅ1É·‚š¦‘}øWE´­É¾4³KeÀiàÌœXùÅrpeö ¤¤p9·ä Œ´|-YÑ—q¨’AGÉ#lvž’d_æ¢Ý.áEšuJĨ‰Ü=ë9ϯ5ïC|õq¨<(8fTÕœÈ/Œ%ÙïL>’F]R°æíˆh"˜D 4‚b¼(ÕÖª”¼G·§ t¶IQµ|íÏ­¶Ùq»¤Ãß‘¡æÊk¶•òŒU¦2˜9±ƒj•fÞxZÚÜ–«=©òK„QÂ.ðT ¢ðœýç°ˇ£mçHhA¤½¢ÄÔ'»D°(bœêµŒÝ±”>3 ³@ 6^•†Î‰ü"ðØ“éM¤?Ú„r êNÈÍ·}dPa¨ã"Ò6-½¶ÞP×–âŠ%ß¿Ã×ê 1pÏ…KʨšÇÏXßa }È)xZ–±¨:±ò  Ÿ˜Ó€ m‚©n["W]]º]%‘–‚µ|óÎ-Q5j£–!CU Lze[é²ÍîááwYPgñÌ àt¥j:yñ¢€c˜éhÅm-#F½ykÊQa ûš=¨tï…Ýñv(Æç>÷yÝ9ç]P “H'ØØ‹ªåÊ4N0±³D}Lå´Íß¼]Á3 Øû ùÅ^”Öùyï¥TÔg® 3ÔˆQuK†E.Fþ€Ï£Ýez)” ·¨†÷Îrß ñ%ž´\3FJA+Ó$ª"p‘µÙµÃ?ïù/œUxš‚'óB~ UHíGBl_¹!Ê/ Î…%G¥é„“N-ä—ËŠâK!¾œ}á@Juű§Õ.×¾Ké.^ÖíºÇ>•üòÓ?=^©Â>ñíCGȼ‘_ìO•5XËÂİ̮’'Î4Ú‰‡‘_^ûº×w[o»C·ç‚…Ý–o|s÷š×¾¾¬ˆ'ÌÊɵ\=l-»õF~qpE4KfR6À|ýœ•¹·õJ~a¨3°ÞSªŸ/ýÁ†ЯrnE•þÇC%(Î8ÔvVˆ œL9ølÉa×¹‘„übùêøºze¯Î§AÃKÀSÞPìÞàäûÕQ³>—/o1LÙhäˆ)†® AM¤ŽþÏ-ÿh\—,Ig´ƒ?c®ü¼%ºÁÉ/ HrÈqµ©=T߸4Ìrg€â”ÚLFã(F) Ù÷.›”òË(Cíg}},5Їâ0OA8ä—̪Ԓð6YåwPÂÆq#`ÈPì_/Á+F “_xÒíf“'¿B@€–!è§04¯`î6+¿l±Å}}¡ÌI Ÿsf®ÍÕ£/÷Î374ý/W±èTºÑÈu}´Oå¿ ¼ÎfòË:_ÀˆµñÚ$¿³™ü²™üò%¿<â”_ÂI÷LÓü°Á-c“S~ÑwpØëªfCsÁärC9GùÅ×½ô<åeÞ& š…Î6 ö€Ú’ôŠCŽ«ê q—d”jþM“½µÒÕ*‰ôåÒzXü‡®>.ÑÞ¨j;B‹Ïu© c(ƒ¡ž}Tâô=} Ü/?çn* r_´—zpü"åà`q­x‰!TºiŠð*¼"50¢ƒ—2J1˜Qr[û±Ï,Ж`¬’ãF#¿XR 0ÚÙ–2Ld5ú¼àñ䯙ô+ò‹k–^b†ÿi,)T3RåÞ¿7ùÆR´D-=¥A¯ˆ¢dõð(cº#F7D'*Ô ÷ÆðBÒš°%Tüí N~a ýg)*hyám2j脺Ä@wMFª"(DY¦ŠSiòZ¢ñ¢Þ ‰ åO†ºªm0òKp邆=nÈðHÿ‰”–g 2 }‰ê¸<a^ÔŽKï%Âôö¯Šs¹^É/ä4€,Q^T ?+Ô¥`ñÜ+¯¾Êç{ða‘ße·= y÷n«­·íÞø¦7—.ö«Ó •9I TIÐ{Ñ`¹ÖÎW±R+ò®ò‹`#r2ÐÓ u"´‰Œô÷f-^Ò¸üðîàÃ´Ë ¥·´æ´Šå9åôó ÊãœÚÎC~yÝë·,,†ÔsQ{0ÆEùŲÕ`¿/S<ÃxPMŸ7ò :ïDS{£Ï ñtÝúxÒKì–|D5Jk.@£'ÈIŸÃÀÜéxšÝzè‘Çu¿öâ—V½2:.ƒÇÜ?ÝQ•W”M¢g­3ùEú%;‘•ðdŸâ?°ÿ£¶â¸ò u ˆå´Ç3“¡ÚêºÏPXæ¶jë5ÚÄíµ·¹û^ûvO.‘5Ý3F2PÖ£Ú§÷¢*舉Ô:)¿HË ™ ´%ñ¦åç[¢¸!GÝ:Æ™Àýà ´Ê¡? õ Bi=M†bœpÊÅkO¬]ãÌÆ5YÍÒÎ8V•=5[CWF¦uåÌZn‰ÈymÉKf‰âL:*†B¸¬°{Ž+oZ÷˜AŒËˆá`¢ ' ù@,Ü#3y‚ foeQ²x|1ÔgàL3-{W"R1| Ð9è…”³ê¾Á¸Ä’l›ˆkô© ãØ@ÝÍ1†Ýâ\N9ýœ.'£ùû$‡üÒWÇUoC§ (X ÈL$nHvLB~±|ņ‰É/nì3O2{P2¶£â̳ÛXáˆ+è÷ô à„uÇxír-tK•%ôÚ u¨’$z 3{ì½ßHá…~SÈR刉È/ξ0{r؇ê„#â„[‡×2š}.È´0Jî¸ÐFçIFB†0΀ÁžO Ýõ¡þV÷„'>iÖ~¨9¯*óÞ›å­ ¨r8(d@Ľ¢—TÊùc 0žLèKÙƒ")òË…—¼£¢«0DK u lÅ~4Î4û‘·yú1†åãxŽ'ÊÜØ{ºC?¦û/%ªÎÔ”@LD~q+p rT O$ÈX¢ýLæ„NªÃ/¡9¼œ{0pAw„ÆŒƒ-Û¶/©04ÈdGFP]¯ÙZí{Œ¾í£w”y¯¿4£‘*öú¥‘_àÔ¾øÅ/ÖžÅ07$ ÷¥—]ÙWro6žäµß,KÔR¶LíG /Ä2w6†iÐ=lžIøˆ/éCöæKÕ`ß›‰ü»@Ž<É9œåk‡5”_ü@Ž âìÁÜ(ä£Öü;ÞÙDÌSf°³¯lä5K4´&F2ÞÏÚ‹MM H4ýR¥-…ºÄ(„—f08ø§» .F~=T¢/§Õ%K~QdrËw>Z¢Œ²Ý&\™+¹âS!–\ÄQ|ƒyÕÒÍÚ6»1}xÙï8³<ކH€ÁÓxö¦ósë‡ï(™ÎšC¦Ÿà8øe‘_ (‘›*Y82B]b¤ëÒ‘%ú¾çú[jDt€cÏ%5¹‹PŠ Š”w-[{TŠÇHYMg¼õ¥›&îÐX ö¤ð±;>S’ƒ_¹/]×`{&&¿0VtPfFZ¼åü ê^‰xIão||š!¾ˆš Ã%áö+oÊŒ¼ùx+û-t&cX䨘iÜ>>bk†abò‹óÑruœ„¾”’Åg®ª¸Vo¤ so)Î9o,‚`Ã_g˜ŸA‰Ȱ‰ªHʧµz"oãc†Å'qw^>û¹/i¤d@d˜ü^ˆýú#eúçœ{^ÝKAB&;I4l\«R­+ËÍÒ‹ÒYÐÌÎS{TðÉ5+ô'g§åßgû´‡×‚ÿó oÜz9• ”“_Ü¥sx”ê2*Ú²ºÌ+ެ{#ØKi'ß´ÏDɨ:",G´'eEÎOXsAÊm„Á‘²iÄ—«kÂ`Ù‡öô¾B"”$z*aª¹Ž1Rð(á&"¿Dù’'åà·ïn´Ü0{x«‰¢|½æœÙÚ”Íùå u#´¸…D%GJòY@|?³º´ÍÕõ4û Ý7¾ù­îOÿôO+Ø^ÏñæáËx#.Ó“_DYóRüU:”ü*D!¿0,ŒÕ€ëó5ÑÒ‹ÁöVè<åh ¾5wLÞM¶$GÏgu–ÏÕ%ˆ½¿°zþ¥Ò%`þþïÿ¾Rš­I5\…5qd,ùEB ¬¯:îáÐ3ÚÉíÊw^]C~ˆÿø"ˆÒ(º! ùÈÛ u62@‚À›.СìdzQíçÄö®2I•Ž+%}>H>Gg’ŠÚV_TÇ•ú-…þh'µQµœ»>óÅš0°op²–°ZÁÄÙ©äÁ‰¼Ëuôbs™öQr/+r[qçŒ:"òË}ßøÖŒ  0j>VžÄ`,ùÅ¢ä!Êò`T±mt/µ•kßW:RåÉ †9¸åá<Š–<É@Þb C+°wªšÀ›<,KÊuL`²”k®[<ù@!£ýÓ?ýSGjjØ£–­äEU>Ê/¦Œ®ZÅSgŠRnשT‹¬’u)üò`_7dÑ¢ÅÝoñËd*Ëd¸¯9Bš*ZÓ'Peß’µTÛݳ©½0¸Ñ‚—×Д€Ï™R¦8§Ûn‡jWæ›ßüf÷—ù—•ÒD´ˇ¤d8•‘_$~I#gØÀ”ï}¼ìŠ«º;îúÜ”÷>_½êâÉ7…)™‘£À•ÌžìcÏûÞd°D>É"ÜiùR~qDZUŒÑCMÆ¿v8ìɉÉ/n#"–«Vz¼èΖ±NªÛþ`DY“áãLdœ30bœ<É;ý„½ ‰Z¯d jÁ¨\Ö‹Wº`ߺŸ*E¬áTÎÿ/_UXÖvÈØ¸ù婨õ YËÃ@ ²\£ç)/hÀèMè6å¥|ÿîk¯h,[¦}½gž¥Ê‹ö\höeödH/aüø{w¯…ûÏÊîá]we9“_Ô2¹^õÎ })ý C®¨Â­r­‡ñ®kÞWS/Ë3©Y´´ÜFÜ3úKH¢ Б8MŸÁŒÝuÏýfƒádà:‘_xQéßžT¹fL_¸=Õm#ÃÇSO;c@Ë—Ž9Ûd1ªrŽÞŒ@‘e™ÒˆJ»>>.\rPG—ù±³_TÑ=XÑÔÖZ'ò‹*'%˱Ö3w•*ÛÊ÷°rBÆï¿¡ìràï¸éúšš¦eÎ@´²ŸˆãòœÌGàÙq×½»g>ë¹c Ù> kóF~‘ ê`)I Tõ} ¿/¾àû[½yëîä’LŸó–‹Ê]ò‚Rû)­¶BaÒÕ’³¶ihGaùÝλ-èžñÌgwÿ­üq`}V 7ïäeU<œ^õy3™<6›º„³÷Wõÿ_ùªÚ›ÜzÛí»m¶Û±{éË^QUîgÓÌ6Øê‘ÑX¢²Þt~û9¶ÄŒ‘ð—)%5º?KQ´òKŒµdÆáÍÇye.ß÷ u¦Ãîq¼­7å^†Ú¯þÓxu.oxm~VL68ùEƯý½¾ÄPò06Ë”‘–(ZE¶K9Æ~<Ž:1vˆmÉ*öÄò‘âc¸‘[2`fÒ>ûUŠ·6Þ™ôwci4ÙƒEùE;GgëŽ2¨¿fú]g°Ê½¸°ÑÉ/Ê"虌a„è(S’©y¥d!é–{É‘]•,Ç4V}“ ¿¨”I”3Ã*3šy˜!hûÉRwˆ;¢üâcx"¥ª¨-/–:zp–¨ 7Ó11rrìžõËåf²sy󀜄Wå©»`Ç3®C‘2U M _…Û¿cèÖüåI¾òaíi–ªZŸübŸMJ~){q5"özûÎö‡ ¨4¿ÑÞIxOV$áõþíÅ¿%rÞüœè-Ð”Üø'åXØL~™‹7×jONúh€–ׂòZU.Ü×”¨z[Yz-¯ÛÊç×”«ÊkA &O˜ôo®ÍÏ­W#7“_6“_6“_æ¼Åæü 6~érí\R­T좌&UÓhqÈ«ÛV¨‡jFGDÔç!¿ø¾—Î6쪬GqÛ-C=ÉÑâX‘õ˜IR #W‚ÉMegœ|Ô Äaõ¯IÄJÞ‹¿5 ÷TË4Ì…lõ^«¢ü’¥i¹úò„DÛ C%;#ý3N<ÌwÂLÕ¦W ù%É}z/¶ú*ã•[¢.ãç3pÁeÞ¥~œGgõ$’¶qÓpÍQ̵ßà_-»O|âui &Q|è„ï“_2þ0#TÃîÑÿäÁL7L÷Œ‘›\ØßOe,ï{Xr\×/†–3«–ÏŒF" Y¢Qupû$_¼0è@¶-A{‡¾ÆdŸZMÔ——á¡0¥=èšÞ‹‹¶¿µÁÈ/¸!öb¨öLŸ»'Í¥LWSÒm³Ôý?T¿çübã;ÛìCjgÁ¥3.ä—}÷ݯ;ð Ò_~DE-kâÀ¢#ÁhÍEŸ@gË+ü&ò΢9rl÷¢_{I÷ÔÞè8碗À'Øð¨à¤¦$)®3ùEáµ°ìIÁ¶-ÓK ùå˜Ð&©ÈŽ£ø\תÍ\QAºÍú–UPÒ»ŠG¿¥ ±Þ]È/ ‹×ž1`øØ“ TqQyUÂ~¦³y­É/qÔ¥h†`¥ÚƒÑÏJ9¤ €?î¤ÓkC•ç4Q}d(#}ŽˆåLS¹¶ÎœôЬ,ÝI§Õ=m‹gTƒ¤^޲~}VéDt¶’¬¬9+¿8Í\³ÀaÜW@³\„õG–@Ù[–c8YM#dq5  -ÙÖAl›¡< S±áÚð`1ŒÄ9·4pu¾$é^£ о;×Ään"¨|Sþ—®úvPÙ'”†*ã4U3žŸaŒöê/WÿæI‡'¡B™´á½ÌŒÞ±Çcäâ¸ê¼ìÈ1$U~q–¹ˆ nú„EÚFt[¸pßî-^R=“é»<—½Þƒ–Ö¹‡¡ ¸ÄH耡!yê.(Ó¹w+{t\SÉ÷C‘_Ü]wȸhØ…ÆêÄqÇŸÐy®.ò…P” »ŒfXø Ó˜C«à¬ƒìG‡¼È@  §Œ5¶|÷øVIŸíåx±…,áYÉ/ÎG…## ­r$KQ¸* ¾õíu©>do€¼fiÚƒ}­`sj‚n34JL̓íÕÀ‡Ÿ¯È.]q̉c—¬$DÔŸUùEÒìFヌŒÖg÷ăþÑýçN…ÿ6Êû¢úbì4.nå`‰f¶2ïZ®†ãëW”‰ö3ñµdEI˜IcÉ/2F >žJòQ¿è6!˸öº›£¿Ãqg¾rÃÓ]T—.#y4äÿEkÒwÖ%l¬ÏC„‰¼M`ÞÄûo¼­¤uéMy/O2Ò–âY‰„êý£ ¸áà#›Uù‚‘Ò8âP‚Âîi\ÿÓ«¢ax<âs|û,‚(rÒ ”æI ̾ˆ7Í 8õàdy«÷ïªßÏþl¸ö{ºO܉ü2šbèZÆ@ï™c Ȥ‚Ú*5•Û¸ZŒEµÍ…Ø4Í}Ð@ÞÓÏ8³Â­ÃÀ‰ŠÂ3Lq,ä…ý# 'ipDä äEK5Ë4ê/bÑŽÿ£½žùìçÎèÉ_l¯\Ïô_ “þ¨ ß-œ‘<)ø(oÈ[-Ѿ`ío½¨i/Ms Þ‚wõæÂKÎ×ò}Á*ê.!††·ÅÀè÷øÛ¾Ÿ:ð ^ôÒ‘F*—@‡Ø—ŒtE“ïj01r5OJÊ©¬á(áÁ %QDZyúõ‰F‡ o"8tCòtÎñ”—¯;"\±x;+ɹ%Æ¢‹‡å1º­£Ç?Þ=ý™Ïi¤zD†7-W%LûRÍr½ÆúõCÖ´%ª §Nj¶N–©3TÉbE)5zÃÓgX£NXrž¾!™1®©À “ýN]¾½)I 2PÁ‘·Ì¿Ñ€ÅŠá¯zÍ몇†3žs`¨„Åœ"¢_ó¨’ë­bµ%+š*o¨á(ÿå— Ú§<%2 Àýˆ!!Àý9Ìß4Dʰ¡â%·Žœ›Œ iT¦ä{¡ä÷¥mDì&ÄYðì壘 â'Glb¬ÝEÂk"ò C_x5LUÍ¿o/ÙG8!Œ {5¼¬ꂉ§Ï¢1³å…QW´ ùÅù)±–¶ ãçš÷ÝØýY¡Füáþa•Ä2÷ÀR)°£þ;ùEUœ2}þH_SÙ½í²+Þ5à„D¬ £4y†‡•å 'ÄÑvn6æ@ØIÚ]ÁdM©L‹]ÝÝ|k#¿ÐïAÀ( Ä«R¯òÎ8¥Ñ‰È/ÎÉèÝe´“Ö€‘ÊÚ’)­ÙHéÚÒ—üöË^/,È«ë>ðÁjŒ`“£¤íÏ&G%ê –)LºÄ t‰vq>nŠø²¸2‚jîKÛX¾ÎWl„« O‹GјÈÝØ^<é\ŸHùÅÂÈ4_xкg`T±÷.àã%b†Y ”0ü[°IÚçÍZ†¡LØ—*ѼýX{ÔÃÿºŒ7†ÏYÝoÝyW÷½ï}¯#H4l(obÔ ŽÎõ‰È/Žâ#-OF20š!z† ÀW\yUÒîÎ6)žóO¦a^ñÆ-Ç,QÑ5RÇŒu~òp(M~Þïí]†¡'aŸk ¢,aõ`Þñ"-E6}Õ÷‰”_ä°~ɹȃQ¦ÏÜ*E^¯—– ô®k®«—ÛiÕ´×+C£Ûã†2 {0Z²™’óÓÒµw½Kg”;"à=9ìå:ÚVž²å:1ù…ÛEQ%?ë;K4 ¥¿h‡`¼¯°ÕÃk¶¥`M*ü݃ûffDŸ‡ÇRªìKÛ(Ÿ¤N´Ï¢eU§yøàgˆÕ%(Фj®R¹9+¿8T; ’,èQ¤£ùÝçÓk_ûºîÊw_[ åŤkR5g^fƒ8&,ÕU§²žŠÛ«ÔlÍâ™­¦£`‰ª`¸^ÍYùE¾j¸,Ûƒ žR%飓%E×ÜR>ã¬sºw]{C¦Ž ·JÝð´x3K“1Ê!j@ôÒfiíµïE}i§±24ÞKg&6î9)¿¨µ**1@<¦/‘í”ίºT«Î½°MQTºæÜË8 Aˆ/<)ð4à}»mvØ­$àÏš•ü¢ôèA{øòTÍ_•WµÊ6z`¸ó¼FŒÄñÇDTmróWÝ'-OO¬¯L?¬Iàwß¼õ6ݱ'œÜzƹÝÉåÕ¬UWèG4× «n›íwížUî‰ãj«þ_qAn*Ïvµ²Lm#•wK@\3²Ól†*oùÅ*¬9E~a¬› ¶j‚'7Jm·¿~±üÇOyÊSkkî[m]{“o(Ê/¿ö’—–‰fO-¬º5gyÌ´=`7 ñb½)¿Xº²!õWÞ“›äé+ Oò}]œ»gƒ_¶úWIÞèÚþŒÕb«€Íð 7˜ò‹ÊÄ}}zÓ–±™B~Ñåe"kë¥q¿çœIEQAf£_”å3®iÜžë÷e\‡½c"Ûc£(¿È%ÕmûF¤ŸÅ$Ùˆ£I’/{’û*‹˜ N}bãDn?Ë{› ùE‚, $d?ò]E0÷;gš r¡}åß}†ÍªøäaI:œÏ¹ý +¿lTò‹7Ã3ž<ÃÂstÆFñ%Ä—HÛ8úäF>,”_\XC~QésÔ0<䇕_Üz$™êi©Ûw²ªò·|Ø_ì½Íä—'?ù‡’¯-×qÏI¿?¨wÒ?6üs›É/¥=¡z_Z‡ $ôáÃð)IÁcKNy¦)£åø¡v ³1U„`ä|´G9ª ÎÌ’5ý°”\î56§ýص]=£~o^–«QÆ&ý–åùÁÂ9Ì%îšz—ÑòбÎ@§w2›ŸT.s0Rx]Œ^'#Ké”r÷|Þ D]ÇI¦"Õ“À; *€úŸy9;%ÎSçãÃFùÅ}O. ýïÞ©l8 ùfv•á~“S~á5“ÅhÜšÕL}EB·(_)ô 3ÿö|Ôº÷=ýÆÂùÈ`«a“!¿(î7!¿çä «Â³Æ`_÷ý°x`hµÞ<Åá;þŒRÈ3~ÆÅXb£’_HÁc¸!š¶pP“Üâý[ñ–¯ŸgpX ö¬½éöÏ 0 Ü`ŽMqo•¸Kùìû’'?DÎu’€46ð”%³'nH(õè_0 €'"qòKhô\ÉS£üY¾0J6^šK`n3šÜ×ÿ)™ß äÆñ¤%Æ‹J–AUòKŸ‰®y‰FÉø8ÉzšK®sT}gƒ’_(8Àú0бà}_³@“1ÎU÷Î àÔ»Ð9óê{0뜧ÎZGÌ%¿ˆà¢ ´Ç†ùYÑwåÁHÛX¦Ž†>ЂC_Ò`âÁŒŽKMc)è*#¼-Öƒs%³GË%ýþ9éOâHJ¹lr{]°…xнúŒôWƒFÉdä^Eñe=t»ï¹w}íºû^ÝÖÛlW–ê»WNÉÛ„¾Ä‹Ž ^TÓIZ¨ Cò~Ö;ùEÈîA5;'cdøYK ùå CŠ8Êb !™qáÌ0ÇžxfùÚÑÝžE{@U=Ó ížä½pxÎù…·ò–°D5h#/%È„:! rØSÊ/Q€6ÍÈeír ÖéÉŸ—Ôæ¹^V¥p^ùª× f.ž„>Ô ÆÚ¿*"î¼_d%xÐÐ……Yà¨È@xº!Gwrmâè3jËe¼)C£2¡ÁÊ@g˜î\û†ÊôÙy·½Ä—ÌÅSÑ ùEŽlÿê‹€·(­ùEo’êKè¸ö¤?æ‡#Dó¡‡Þ_È/£8Í Y^ÛrþݺʇÖ#5d£þ¢i ‹®ýxé±'œVE™'À¨¥ƒæütä¨Ë:ŸçL~q+€­ã½þ(ŠöéK–é!‡Z¤hΪk‡„¯ÕŒc0LÝQSˆ**Ärm>mdxéGiûÓ=ñWž\›©ƒf×Iû%±wþNL~±Îï»ï¾J<#j0,&È0òJÊ, )ºÄ«ŽQô¦˜Ä“ºÐ^0>P" fˆ ÐQe <¶’i/£ªðSdîzþN¬üâ†`ÿÉ2ȃ}i©ÚÂòzË…WĨX‹˜§TOYšQ€ ´,£ûžé»ö£N´Ö;„$2²IÜ4\:Tɶ¥ý¨Gý³ö[<„© C=úŒÍ!©<˜Ô«d!T;TU´]}/-Ó0ìò§œzZwÎo«o2 Ýd²& µìÅè…„¤Ýn‚tó"`Eð®MŒáîŠú‚zŸ<¶©Ä£(ÄcÉ/.¼rRW$žì™†yÉ¥m¼°å3ç%ÀxÅ!ÒšøÁ"g¤)¡‘â€Ü ž•'§Á‡ ?Ë›GÊXò‹è;1ùzÙ¯Äq"‘Ô9èÅ‹o¿âšŠÓñfqK‘–.ô/аŒåYËÙ÷­€°{`|Фí JÓŸô”Y½éæÂH)¢ž Õïº\ÍÌÉ<8™‹¼Ô…×%W~h‰Fb*ÜKßqE]f`eö’3œ%û“GÃÉh¥ <‚áù¶D§©Ï–(ã†Õ' 0·Þn—Yt£QS’# P3*¿Èn0| ]ˆjä8^®. $¡Þ›4¢Â3á„ÈjÚdÞS§‘M‘Érõõ€_ž ¦q_þÚw¦`ÝŸ¯tŠ&ðùÊ’ý©ŸZsþ2ƒ3Œ³ú&"¿¨»€g[¶! U™Åbä¡…õÚ$Ûn­è« ’Ãd *’±–qŒd`@‚¼î!§E'$óÔ#o7k˜<£EZ?X¢îc~®H~‰¨â#'"¿X®’÷ž–«ÒÄqÇßÝþ±;+ÆU$ôf½ ^ùœy¼%‚Z²ö&OЦöCŒùéŒ!M‚£IxÙ“Ñ>¿åö;ºÇÏ ¯r#ÝT Ç’_2‘ûr§ç_paÍF¼<áhDý%ü^èåmË: ö(ï[‚Þ< 0ïÙþ–—ï…+Òt £‘_ž7Ò“ÎHç¹z‘$e,ùEð1•)Ê/Ê2ŠUgŸ;õFî(³x#¡Qˆ”øßÏca·zã‚TRŸ½cÙ6Á°††n4Ã/LýlSlò7ŸûüÑó*]®û Ÿ±äU5ËU‚ºŒÄgžUÿóp©B™Èò‹g¢Ò–ä×ëCpÊ|ìSžµ¬ ½,uFGÞÆYés^OŠçóç<ïWGzÒ­DEpbò‹J€#Dz—š ä0#©1Eó ƒ í§fˆå片h†Jágy‹Qö¤ÄÀGGcCQ´‡c°’ì‡ñ–þõ7ß>’ö›‘þiÓO¤üÂHÉ€ °¬ ¹aL‚OÞùÙº¦9!ß(™5ŽÈ· óŒôDÛè„´Á epfIî£øy3\‡½–öÖÂ@éHp,ONL~qVJëû°¯§ ©ü›ŸúLõ\ŸQ”ÐóD]^ð•å4O.«—èˆ-87%ùk²|®®^ö»,í©%ÛòСC\¤s”ˆ¦î»3–ü¢ìGßÜ=Ò30Å_xÕ5O8!Œ -†yMëÎ)Õ‰Ô$AÎj?а ËG†é ÆZÆ‚¯J½>ø¡VFk ’¨û#Ø›ÄÜ+WBï9÷J#k]Ô¥Ô7•ä©ô'ÔEûŠØítÀK:!ÑalË;[î)E3Ä›…^–Ì <¼èÊåìŒ ÃyTîë\µ´ûÂErå¯Ý÷Í~Ï~ðƒîþà*RéCrÎH5'Ah¬ò‹ª¸jX´{úì¾íý7Ü<%)Õ®BB~cÝÝ;ůüäpoñNS}9a@ÿU9`l„:}O…A/·e¨àÄØ«ßû5ø 茕‚ ŒÑåK~qw4±%쪥 +¿@”_r¾YžM¥ià5~ˆ©,×ÀööŠ@f‚¸ŽEqBÚg)7>Weã~êáüÊ×î›Q¿çÁ¬m ïÙK~ACPÏtµŠJ€Q¦ÏÔ#ø¸‹.¹t0Õ7…}¯pBr<ÈU½áp=Bcr3iU„&€âRmùFâXäõù™gŸß}ûÛßîþîïþ®^†>ßÿþ÷ë6SwÍš"¿ü$P™AWK^´RÔU…d1F ³{"ýÍÃW¿§ DÈá-Ü7·òâUõžéÍFi”ç)p¶Ü;ç H Z²ìУNy”~£P—룗.†ôÈ/÷ͪüâª"›ò/Ží$¢½á [v×–ýb©:ÈSq‹´M-„NÈû.K6Ä—ÐôýÛUÚ«Œ•2Á%À~+Êñai¦›† `OzèùÙU×Ôifu *ªð”C5†FÅå"ý OM]ôÅ%]^Åh©&ô‡•Þ˜+ë’ä±L]â1Ë5rÇ­ºWj»‡W´Cöê~ùqMÇ®ÿr XY¼&ªZ¢.ÒÏ_àñF*nûb9OI£ÇµJ½Çy$Ùƒ¡.ùc®6Ñ4^õÄ“Oë.{çû¦ª×ÖȘڪ€Â€P”*º¦$’Úì’²/ß´õöÝÏýüè¡ }z¯†K¼÷×'¿ ×è41ÊsŒ ùE‚` [žQ¢WÔUÂg Ÿ®¹n!” .iâï MÀa¨¥šÙ<–,#ºªÁ öëžõœ"è0‹T1#Å gºªù¼’_ªu`Ox‚ýÁ\£ ¿”_[qtwbá>¶åÚÎH†\–£´w!œí¾`Q%¿’0°‚‹¥¹ÞÈ/ú‚Ž{GÓ›˜m´Á¡g?ç¹ÝË^þÊnÛíwî¶Úz»î7^÷†îW_ôâ*ió3?óè±¥FÞ‹¼”Ì!¿8t¥xÁ—Ï@¿6?o«Xž1PÛ~ƒ(¿àú£1­Aÿ#à…Ÿ¥à½ÁÈ/Ñ³Š Ä|3êojêÁÙƒTùÅ,-Õê„îõa¤}/Šz ú2Ê£…übéHÖ‡‘ Ì@ÀJ~Q—Í8ï* …íB ð [’©Ø_~^2áȈÞHÿ!ù]ÇTh¼›ùEN©bàÍñÒ,‰„—~Š[ÑîN±)ßã%5$Ó¬Ñ:TÆð@2sd“"¿DùÅñÂö`‘‘N!¾¨ÃŒ"¿d>¬œ;H^ä³½‰Æ;Šå:/ÂÙþHIèO)pë=ýL¶—à“_Œaå·øI•_†‰Ø“6c‚>×_ÎÏO¢ü2Gò‹}û²lYÛ÷4ïFæêÑ— sfñî½ –\€F™²kßIêýÛ2”ä{e¹o&¿¬‹GÇ‚z×åoV~ÙL~y_½±ä…]suÆô9u­Ç)¿ªÈÀ KcÉ’UÌv“1.ÇRöÐä¿.Ý¥)õPñüŒêL3AF-¡†” €‰Çš–}ïlê’7“!¸Z3ê¶ŒäAFj·e6uÔ†y!î–ÂQ~a (Ê@ú.Ç10Ò ´Ýw+Fî¹×ÞÝ>û.®ª/» yñíwܹ{Ö…ü2åÁL7Œò‹òGFÇAWñ˜Û‹¶^È/P“ .ýÐB~9ôˆcêM3dñí‘F«v¹ællÅœS0>Åà×¾nË5Ø= sïŒôœ%­/3/Ê/²¾fãú¢ 1PûLääÓάdˆ++ír¸Þl 0­Ë üzðè]ú®J~yJñ¢Ë´€ã%>ÈzðB¢±çÿ_kò‹ÛSB:ã=Yˆƒ9Ì‚aõ¥åËíN>ýì/ÄRd`”&ÍØô õ(|{eõ¢¶;#}Ì€éCV[ Ýb@_rŒØ—iK0Ö~i¥”s&¿ °®@Aª×J‰ŒcB6Õ ÇÄ‘GS¼q^õP8¡K³ º¶ã£Y eÆ¢åÞ`f ¹eÆ2˜Ùy¾½xóñµ`ö;hö¨¤Á*R œùÅz ”É„£Ì‹10Ô‰‹Á^|Yí?6jRÖ¥¬ÿïߌŠ'õ%=Œ¨¿L@‡4êÄ S Á;+’äØWv?S–éLíAÍ&GÝÄäW$ˆ,F2. 7$Ð /º¤v“!¨ ­,¿F:¡âzÈ€Úàêx¸ ªmªL e–j ~{ßGi ùåÿ+éÝl­­„‰•_DTs>õ©O­¶DÃ,yú­ËÍÈ`-4dó`,b4¯2ÐÏDÞ&Œ»ÆÓº¥¢»‚\†×cûåÇ­9uØhJzhïΪü áÚãFFZx’¼è°¿ò]×VŽÌc3Z´´×àDQ$û& `$´‰`]ý¾½9’¡îÐÏ](žxê™u¤¥…¼ª£4: 1™¸"zEùż‰7a”,Ñ_ä¢È/è , š–Z–mŽ ûÔK”ÍÄl-kFЍ`¢ö¨l^Ó'¸k€o÷5 aË÷ 3€ìãQÉMf"ò 妎›ÙòÌuIªöŽËßYß”HØ·fféZ¶ö[ m¨ÉO•1ÜÀTn{ðãÍónÔ¥ÿÂà{;ï¾`l‹S&"¿X®nÎH}®KòQ]«÷]s]b &Fó£Á² H)ó•íEF 6¨–h#ž5céLŒ0Jðî”Hþ_K4)¹µØ^‘_ÞT§é_x%ÇÎË•±ýƒ}Œ%ç|óÆaÍ‹ÇÚa2ù«€Ó j·W”e8ZQ}áI˜Œoü9ýÙÇÌ<*Õ~tßôžÇ*¿`øHÊãÉz›(l#ŠÏð«x $˜°„û „!Î?FÉSíMËÕ×–ˆ¡0´ôe¢ÏòAiŠ¢…ÿïWž¼ú¤ÃxU!4&Û+*c•_Ô_‚[Sn”QœyÖª/$"_–Yc ÜQpÁÃ1=iIó6Ã䫲!_‹ä°~óß[½Ê@'¬ŸÈXÆ<ùô‚ýµ\%iöND~‘˜«ª©¨ñ yQô=ç¼·”7Ó˜=Þ¨¥k>½¬0Ú!Ñ ñ5žp&f¬–)CB½ð°ü¬{hI B7|Þ f&¿H7ÃðK~Q^T>TjHÙBÁ‰‘§Ÿ~æ€÷!¡¦0ñÕjX(I>†‚”`bIKé$ÍÑøñužÏñÁ£\Te"¥ó‘Oþv÷ÌgÖðq÷Äâ¼ÍXåÇÉí}ò‹ªÚ %öæÁ0"eŒ½å©ÞM± ½yoT– ID]‰c+/»OxÉï…öäa<éÉO¹\Uù9±ò “"±eêå«É8R>ÿ嶇bh8!–¯1Ö2ö&Ãdq×/’ùÈ”9!¾ˆÊ7Žs©Ç–H^éŒ%zäÛß—‚Ža"òKÄ5¬,O…'ÈÈ0 |í–ѧûÝÊoŒa-€ ôJ¸g°T!š#Æ ËadFe¤"yÀh(m¨‚½ë÷ÚYÜ´|Î9ÿ’Š x¼?ûq"ò‹"‘£Ã/0®Ï ‘üzbï,ykS\º{Š·õjï¶c¡1W½±†f¾¥#)yX²Å•ÈŒxÙmƵKNÌØ_\Á*Ãçš÷WOyO Î1Ö5LµÏ{vk«übx‰$À2ÍMm4ÕíJkѵ‘:EÉDǦ©u÷€>hŸ5 ð%Õ™OÎL7Þ•ÐGP¶d ÇXÙA´ ²Ž6ÆØ>Jy–«´nVåOGÇ…Ù2íË~«yúeY…¸éCƒü’×,Kû‡‘ÙC’‚»í½&ÄyÜ€åã æß¾ÞûëSûåÃŒ¼¦G~ùÑ~ÔýÅ_üEm 9øó¾Ôe;³’_ŠÜ2\’£ÝÓí”Á@j£äR?}c¢‘:Àµ4S§ñ1úÒ;{1Œ )Ó]á¥ñ}Þ4-/i‚E%gý½¯~}5>Èþçv?üá»ï|ç;u [¢¼;ùEj¤ÆciÚäj()ß+3¨n3’×Ͽࢩ{_áK†#:ò€ë—%ºâU<–zOæ…Ø£<ê õbph‡7Þò¡õ{ÈÝè¨!²*‘NL~ѸQWUÊOK­3Õí”ðyöê÷\?iË2D£= *Œhä—Õ“¡L¤b ,’ÑmVÁª‚W?ª\ûnè¾ûÝïVÏñ`Ÿáƒñc’ó\ùcNäìÜÏÅ!LÞ‹0Š ÃÚçéw–3MR.ì‡"¢Ú‹rÖ”Cœ I9$\#ß÷ªSaJõýyÏÿÕÊü“²éZÛ‹ö$CŒÚæÝZ)¿ˆ´ŒåQK5FEù^-Å›0 $Eöaê¨J#öXEÝD,M^Œ"£EØÆüi*À”_ú3´ÕÅ I¸–ýý÷ßßýñÿq >ö£èªg"Q/ïonäɺָ”.FZrà ¥ Ç븢ò¶)B'#£væh`¤,‡1 Uóñ±™¥ŸY–¯ïóà–[m_† ýôÈCߊb¬£$“Üz^”_€D^ðh½‰”î3· ס¼ÃŽ;ugsAÕpv´êÝqo2$Ô#É„ût‡] âÏË ËU°Q9Ÿ7å-»hX mW@f¼îõo(#Ýšp¼¨êhX¸¸Tà ñ…·ö^tP·Ç>û—e¹¥-áˆÌ6=)ÙU#‚*ZºÎEpÞ”_¤| ["™ ^ÈLoÎ\I+Ï~N÷š×¾¡ô#·ê^¿å›»_Õk»—¿òUåFñ”îÑ¥t8N=ä+ˆ× ñ^o¾Ïø™FúÏØi.YÄý<%Að‡5V¢üâs‘l~|}îÝ2aÊ0Œü"I§4\Ö‡Qý¿e´À½‘_'ë]ùECȺ>9!1TæeYº {¸”üâZ£/8L—˜/Ïò €Âs•ü¢<2¬©Õ72e’À2üpäÈ<¨u('u.n4åiH‹Ô¢‚]E8K*(q‘u]‹À‰LI:èÁÌÄ•ô@üŒ(Ö\’?g*¨(Zþ¯ûËkFÜÎX…´qÄbÄMÎIAÇ’תÇ&òY^ö¬¥Œo‚!€Eø ‚†ýìRînš~ÎY©¢Z¯ÄCß$É/ú&1$ÓìíßQä—€œü¼{«U‘ûë&M~§üb:~úæ%Ø–ù(åÉö#šüÒŸ0nÍöý‰A½“ü'›É/Ï~ö5%úÞF•žh{ùüšòqUy-03g’‡¸¶?3¯ž~›É/›É/ò‹z஋í#NùE~é¶€¹sŸ#Ñ-A•5  ¬t ¯‡ ùE §è¥+—®iFªciàs¼(» ÷É/p ¾ò¦ž$‚âØd”_xð—§ÈÛ0Ð2Í0j· 9,¯Ãìé2ʃÁPZáÑHÜ€¢B‡É…%û!ÝLMʾ¿$ÿó› —žäv¥xô`­¤Ü­”Ä›dœ9w™Ï̃öQ¦m[¢¡0…ÝcB~adz Œ ³ ß=SLvýŠÌk›¿ãßð€%cúq¹¯Îªå3cƃ€f‰ªÖ)òN¸!pw‘‹²¬ȃ m"K4è½±—}x!– tÝR™Ëà±Hjð¦!Àmò‹‰„( ÂíØè £,ž£…áh…ÝÓ7’q^ÊýÉjª™º«*àr–ϼ+¿0¸YNkgÛöc‰ölj{3æß1t¯È/‹º}P 0;ïºg·Ýö;u[¾ñMÝ«ŠwTÄS6ésC”K¼BåWRM˜wò‹3K`Á¨‹´Œ¯µÇƒ}Ào&A,;ðàî¢ê²ïS³éE_D“§Í<®6ewßkß"sóêZ ?KKiÅËñ s{ÑÛò‹?î˜à9gÚ’ïì .=AÆ> &öˆedâ‘Ç—ÕáÊâ¥kärc´Ñý>ê(þʪҜ7Þòù8æÅåïØ4ûñj†„0zVÚ#ñ*a™t@¡&,ø¬¡·×>BV¯¿ù³CÁ/¶[Ë›ø%sè´j›Êürð!…€áŽ:Ä˼‘Iƒ7´!ùvT¿Ic¦È©pLõ èâxlöDï%„¿m}¹~M6Þž»»¯ÝûíªáLDû-Üx&«ý® ÈANÈü"ëPl’ÝC‹š­'–ààÓŸ½£Þ\øuh#Øpæaš¦]±ª5IxïÔÂ`>³ô}pY>›p~Æ»Ï5_ˆ¤Z>ªr0)ð‹²¡l_-5 /!O:ù”hD¸B¾1»¸)Zi$séæÑ±Ì`TZZo¸_€&‹¬=¯ÖŠ¿o0'`κ¯W“üE„œü¢>jÌ‘aãUDZR¼îçïüêá)’´rOÅ„d]Ü×Ö«}ÒöaM2iÎ+t8+hß~2£ÞY7Þò/ãrøç„uüŠ´o(øÅþ¨´aMò¦)Y„eñÖ§Úç  N„Óˆv`°˜]†}m/öJ!ž`ÀÚ$lfd­ñPß;kP@{֯ϸæúOùXÊ0†í'd~Q³ Òiи¶2¡ (© O NDZ$MÁƒX[L5kÒvàÕ>Êù$ÔãmÅ® å³t@B”On­ vAüçg>kLsuo¼ð#Fæ$Ùz k”s{ªj³±uHšSícChôú²Î€ÉþœVP=LÎÍŠŠh‘™æDûñ¾Yšeu 6h’ã" ýôäÂ’øŒ1æ`m*€“¿ˆjô.€¶i/&ê)‰"r0Ðy\T×SŠg¥Ñàƒ”kLjLŒ€R1q+“Í /!쾈‚‚ð Uœˆˆ° î[½…ØøÌ&~1X¤*Ç»æÌZ”¾˜qSUSÉÞ©x±ÏWJÌ´jL,Œ!¸%Œ@=Këg\ü±«*ËËý÷ß_[¬LuV•DrFú„àOÄ´”ZM†×<TóÌùUóæíÔ]}ýgª' ¹—õg£çd˜(s“i¸i;G#~PôS&°÷HÛÚ¹­b@Я}½_Bi£¨Ms–‘í‚GÕ›4øE)A5À„Þ)Õí°ÓÓúi.õØ"X˜Íh’E7’a ÔÃE™àœ‡ ³hˆþ¹‚Ú¦‘â2ÝãN>£»êÚVb{zùÑ~TѺ Á椘_¸a¡ÓU²w¿p¯)ST]zY”ir Òx{xMe˜%¯Ê\G_üœÀa‰Iýç¬ó–v?øÁÇäïùóŸÿÜ}ó›ß¬[†{•}LüBP¶VÕmWˆQ|à;ŠY_pÑ¥ÕÅ3Që‡ÀIµ‚&1aR-ʇV èaв×ÃYRØ»—€{÷š¼## ¥Máóýœ6ø…§Uúð¢ #ŸA÷¤G!Wµ;÷ÂËëÇTsåÔŽ¥ÏŒØ„õ©FÛGÑâ–ÛìPxíÖª•T5ÄÕóÐCuúÓŸªf÷»ßÕ›$a~™øE9ž öNBöK÷©lÏ)kôˆ£Ž­Up ±mÃÖ w Œ‰–Ú‘Ró«ÀýµI«­n»o÷ößU)6úû¡™YÍ[Á dõ¨m!”ó8DïåŒ8œó‹x6#ÒÖfæêW·EL\ùæï™[Ú¥ü|«ó´3zJHÚSƒÝrÛv² óõsÚ~/_TLæMmqœ£Øš…ùÞЯÈÇyéõ–¨fKuù™}Q‹€&õB¬OÍÑœ>–ùúàZxíë^ß-,ˆ¹}Z"ÃJGkŸj’•éw狵ݼ] ªg»îï|÷PáF mË ,g#Ò™uð €³ ó‹ùÖaÈœç>÷o zgîuÿø†Âøòöz½}“M»(Ì/k•^‡‡4Qq*¿÷?=x{¢ÖÅà—«Ç2œ2ø%£+ŠDÌc²78“÷Y œJübOS»õVséãMQŽ+¤9™²?>Þ8±¡–AæÊ¥^«‚õ…bêœ ÀºJÀ/` "~aàL44Ñßòâ¦ÿ·ÊÁ/LE©Òv2ÑNç÷Â2äXhîq¿¨×Bn]¸1_sD´Ìœ§³n}®mAxÉÁ<®à©ŽhƒSë)ØjìabÉœW GŒÇ0’°ð¸ÏxÜÁ/LV-ˆ ÛS9'°´¹ûà—~m„­eÖ fê}Öj~&Úç$çba1ª-Aüé ~‹ùÅæÝg~ÉÄV˜_lÒ95[Çãsটìà—{Ÿ¿¾ÌÉâD&ýÆÉ~`ÿ}¥D²–þ`¹Np´ÚSà—)hfª|V5Y²“5Kv\ñ˜w;„S þØœ€-ÜëJ™8õ"¬ß¥*xw©WÑšSä¯H+þÂrs÷³|Ôf.%Ê(ƒ ˜m‚Ð@¡ÞÏÓ÷~I¸‡QΣ(•Ëgzg"ôŒ4Yj³G”ràOàE2Â:eK9§­#Áµ¾¡@!—ï…mj¼¶% eNá -DYÅÃ8Œw• Yزüãï1Å0£ÙÌ~Éô"ð‹J›QRÃÊ(æƒVkð àŠ¡ “#Úºc¦»t¬±ÁŒÁºPîô>ƒú„^mÀ/ð!ªiN:R*”A$|«3±%&U/2'ä!ˆµ#ÓѦ2}”>©R‹4Ë@Æã~1k4ÆÍ›Ç# “€Ö\(5›é3_mB‡y0×]w]Åw™–ŒñJË,DhÍZ¯Ö½ªEqNC¡YÇ:ž²þÞWRª?Y{>ܺsì3$Á˜ž¡ûp¤…lÖ‰þ …4ÌågÞkFÈì*͆ÉÉÿ!pδ\åàÚcVι3¢e|VX'‚î‘»úÌ/¿(/ü¢ƒÖdž¨óÚrl5a]eàNÚ “ÑQÛA´×7Q t”{.G8.l)–J¸d\VbO(ÈY­I‚zHUð‹m€cà\¢ƒ1§O‘Á{Io¾”Cpá¯BmCHé æG$\¨mr²šB¶ý2TÉÚªçfägü¢éÃÕ{±ïÙH{6ûѬ}”ÓÚa‡÷w;ìXQ(à—y;ïÒmµÍv¥°Ee~É!œ1QBr0L”•L$Ð}\'ÆóšàT=àŒTôÙ1©â²Þ?½hn*_˜ë!”.séµÁ†¨ï„}©Öy ½ðË. ö.-ð…, Ùë0ÃŽ8›n«mw,ÇKmT!L1Ñ´i„.„Ögü"šQLbŽ„ãê™Hh58˜Ð‚‘¬a\¡Ö8äˆãJŸ£€ÓJ§*\!íµ1Àh©çlWÍXí½ƒ?¡Ûy×…ÝÿÔNú¤AW°!‚zÞ]uÐÏ8¶ƒ_hÃÅ4íy}lHè¥/º`vÇ¿¤ÛwñƒƒöÖÈÖ‰e߇}"³fÖµöŒ¸èiÊüRN0[gÎÀLiQllSaeÖ¯øwFà¡XˆÁD¢—ð×e›íðž{îÕ]Zuú‹m’ãgHŽëמ ÍM(6ÌäPýL3í,×eÝ^ûÔ½ìåkW¬N¦’¬EýÇò°¯NüÂÑ0Q-Âõ±!N(N-Z´_(6©a¸VÂ&¡É Smô6„Ý£v—ýÞ´s5¿ž‰ç ü.>ø¨2wþü*œB5 öOi’–qr‚‡i_D¸{D1Öa8ììƒÀìQLôCeÄKЙ×É86³$X¸ h³ Ú4î¡0Ys;ºÔFd`CL‘´ØÿÀË6Ÿ;æX6Á9!KiZà“YbIšTï;fb³?÷ü »%#|!„ ÄõEKÌ1X­t“C­AëºÐ„Œ©Ò  › Â`Ë­‡³K¨Ýòå”À/bQi‘À¹¥ÏF̱Ǖ¸¥u®áB>< F¡™¦Ñƒê0’VyÐ>A–€þ.ˆ»ǃßPG¼ šîZzÙ'Æå$àm%Ú Ó,އŸø´Ðºì×|A—^zEi .„Ã`¶æ CÐ&GDc4#±¿c¢ÞO¸  <Ñà ö—/ש¯}2´ƒf‹‘p†“¿fC¼ò°öÁà³óË‘#xœ;Ÿ¬³ªFÌl~§Á™NLFÒ¦aÞˆÑ4oêï˜hô3˜ÆgÐ øž÷w/*(e|uÒÌ/6ÚD7A¹Êétœ/ºøÒ:¨k@)ô4EÃ>~¬:k”çt1Íáì[…´ViØ¡AcÚ4gª2ä ¾7…™QS_oUöωúª9DsBð‹‘Ó ÉW-Ø&äåW~r€¥2ULX¯æÉ™pÌØæNH‰l1ôµ‡`Þ‡iÎÚ3â3Õ ‡?¤Á&¾ÒrúYj_åˆ&¿Ø#%ª„dã¡Z”0[ŸË‹Ü ÕEˆQÌŠs´kôÌ !§Äl3Sgë0ùHû1M8“`‚h(Ÿ†ñzÙ•×?æˆâ±´*pÖM~±‘‡)Eä0¨ÖrøáGú€ÀÄM¶›h0Ä %¬5k­r0mÔla ßhŸ 2Ë5ÐV¾ ·ùv} ò•úµ×‰Ö¥5i{›ü¢r&(266ÐO:y0`ï釄iåÉçèþ°Á˜%g–¼.AixÇ=B¢æ`Úg¶þö»m<”WΛ/„VE@ä$sƒþËÅ~o’«IqdÜLÕþ(0ç’åƒÞÔXN/Ôo²  4Ø÷ÔŸ»)7ˆM0S7ÍÁåc-B#äïi7Zõ0p’Dãÿí5¯ cýØ †‚_ÔlxU 1¥ÁPÛ(Y‰õ)»@#€\æû ¸A_û}Ø'm l¾æ¨²éÇä"è #|#úÆç{}Å8Ì/4©4z›qÁ/Þ&õ$ ;WUSÊß{Ÿ}ëMäÒðV÷ (¢|M@7á­[ñ¨ <ãÙ&“ƒD÷;k™™‡×‡ð_©DMu{¤½dLMÊh¹jÁPð U+é+üöM4E'¡ÓvÛmßÝ\P©žtÖL_«Ý¬`µØ^ Íç,tÚ´X£&œ³¿rR÷fºõ^íËз3jD”e&Ê&îBð‹'á„#GÝ“SWTÖ¡®¿é–ºžÜˆ§5Ø'E ѧCZ„áx„yâZB‹Œ¡· <˜ |BdtÀ¡G©EB²6–(÷µÕ™%’l;áHt­JüÒA&ŠÃþÈE@•µ”…Lç_Ày °i¬e¶ÒnCÔÝ^Í+ùä¸~9e‚tûh }j›@0˜»-ç]ïyï˜B ìå*“b~Qy³mŽ™2QöÁ/»îº[EÞ2HÐD 'U ­ S´þh –™p¡„ !ý^^Xà̳-迳VíFj?2¥Iƒ_¼¾‚g AQN=êãCðé4í‰|n«aÍñšÌ,`nfêŠÅ­ªâ{U%µ<æ+«y,ÂçšîÒ’,p€ªz}AYâ”Á/é¼+/EPZ_ÊÁ@þ ŸO\{ó€ô+„(„ädB³]Ð’V% qƶ²ˆ‹víM#, µ¨¨iui­ùÜýõí~þóŸ×ý›ï`]™ÒTar& ~Q3Q)—}0×À—TÈ ÂürÆ™gW-2)šÆ1OWȬ5¹cX_Bìlˆdš’z…Ú&•‚Ð_yÍ ðËo~ó›J"h¡º¯ÌÁÊ@¦~Qî³FyÔÀ—Ò󗘮Wzç_xIM‘dö;y¨m¬5Bq:혌FD-XOý•#ò³Ô_y`ïÂç¼òùÿ^ˆOúXP¦ŸýìgµjAPËH±M„6eð‹¦Ž’B8}R¾WüU|:iÒœ}þÒ* \Òú£IZ>+ܰô¤‘bK±&³‡ú›œ6qä±Kº¯‚"ø¾ùú§?ýi=/Ë|‚mÕY«Ê•ýi®Çô' !¨èÿÛot—མárn•Hß^´þúo.U»B”eu=Úä' Ð,àж•&0™.í*lùÞëüÝ-m\ãéo}ë[Ý/ùË•ø{~øázú¡<—ÿ˜øÅeº‚õ4`ÔT<1y¾Žÿ˜Ò@ý*x;¶Fá¸1‰¶‚¡xÖtB‹´šòd5Û¢ÕM6›;84ó¥é>øàƒ(œÖ‡£yC .D@¥Å€_d/ŠÃòF—,D-•ðÞ#õ’Ñâ¡þêàØëÆZ2Ez)p ýˆ ü6¡ “)’˜8sº!Ár *ƒvDxC zÒ{‘ƒÊTX«Py U‹òÆeg7â)áÖ}ŠÇÊnÜú a˜rM΂•É÷±!¤Eë0ö-hGE<‡ÿE{}ø’ö`ÓšPYPØRà’¤Ûkg üây;tRö;&iÍp úó´×džôYB=í­ñ»æ—y;ÍïvÜ©ðŠÌöïß¹›»Eédo¼I´äÒ ÒcúŸ4¨ˆLtÎå¢Mæ¬4êáÎüÂþ!ììu´¾¤¼‘ÁûŒlÓt°!´Hƒ{•yŸý<¬‚[œ‰UÉàGÚ;:Ë;~ ˜wùzÛíw*ÇJ½­{u)„¥ÿ©L’Zÿà1Bª÷0Yˆ/4C¥U‹ ãe¢þЋg ‘ =Ð d¢*iÁ…hÕé0›œÜqþîÝ?®÷ÆÇÀ—˜(¡Ò\ «°æë¬€_˜©9;Î%Ø£ô±!´Ç£{Â’Ò½:`pT›q]Xgwt¯ÃÂÁ`„®–βy‚t—;ú¤nË­w(ëqZðJ‹HÅœ6™³ bÆà[”ª±Ð˜hŸ î]LÆ „Ztnº‘ž4Lë?. ÚÓ.ƒ ñ ô2õ4CÊ ¯O9çU뎎c]Á‡Rq›—f²3¿ð¦Ø^9WˆQhމîWÈL»IæL*,¡½â0>“…É©ô.¼x0)L{èPm1ätà¡ÇÖ΋¥[{Ÿó!è´À/6|æÊ“ªŸ «¢ÅÄ¢~ö‘s>Z…#$4Aìi&t6^}O“é.·Szzäȸv¡kÁ†ÒÖå€?‡ýU‰çlTÛirZà½xBŠCµÓãIC«a<ëœñ”­sÌ)m˜ªÊ„Uà0™ÈÀ=-‡ú€ÉæTÞœn ËàÓ»Þ³Õ¸=P`Zà1©4ȾØd~9¬ßç/Årq}ú"h3Ä(eºÖe¥ÁjµaˆhÐ,I,ã,æ}<¬7´ÑÐÛëLìWª½|Ü.šAŽ c§~‘&&µþ’M„;dÙ¥—Ws2j–QNšp³L–°Á…ÄlÃÊ”AÅzÌäU>†žÌê5Žä·u{-:pÜv»>© %½ËIƒ_ħöHSÌöÂ>6„Éd$³ŠiѺQPˆް>+ÝÛˆÙZŸ91Û ! 9ù,-ô† 'šá»òš›»¿Âãc‹:Ú»' ~‘çñ¬„%`Žûª]¸¬€ÕÊSÎD¤'ŸC¥ ê•ûç¤]èmÝ<éÒ:¶6 ŸKHÂy5’m^Ýð{·Ýahã— ER8ÛÌPð‹-CC¬*/ µ¤×ןZ~ÛÈtä­#øÛêè™ ckÈ„$ÍX§Ö[yÏžÉ|­EBW3|hˆ× pƲÛììõ"¨ëôòàžþôÿ8!f+ç\e~HVŸlbQLÔ/âÁöCžvŽè÷=­2;£h¦%!ëÖÅÚä•qO7K0¸—)høE〹«<ˆ›»g?ç¹C…´>ü‚³FŽ®ÂM°L|h± ¾iQf/ æ–©¿ŸÑyÔÑÕtB“‘Yó ¬Õ/ÐPènl-4)Ä#´@[¡¶a’m¼|¢±XøáñŠøa­¼h¨„³w¿(&‰W i»ø%ÇYœzÚéÒ˜$æ#D(õsZÌÚ¢Ycž„äœb§ Ä}Aƒ9idßXL`N/r\qbÚ¡àš$$‡ÃñÔ|°\¡¶+žò¡ÓÊhvƒ0%‚æ†C³`L#gÀ³üDP(n2¤|ˆÏ§Ip¦°3ÝúÏÿ£[÷Õí¨þ±.¡ŸÁI¿€K¼Ù0B¿èd4š¹úç!M¸)Ђ‹v=𳦒IŒÆcî¡Åñø…Ï òn<B«$HàYàPæÎFi±/`ŸVcß}UStÓ Ñó•)Jaš™Ý5XS6vZ‹ÌÕv"Îõ3kÓöá3mjëô‹ƒ-$\>^_ø¢—Ž©Eq¬²Š:oæÿÔ€J4´l í3RKJ%ɶ qª5‡’ô)‡/ÜZ ¤› ÛKÖA£ ë±! n¨‘Ð ^ÊR6)ÙA[Æqy688$¯ áÓP~×ß|[·f9¨z,Sµ'ŠxŒÅ e~¡fÞU… |) ´>ó‹”ëŠË[_2Çà£AÚ p´qf­¾0YÛJ8#QO9D IDAT`¿Áo5’Üw´+2kÔ•4%ö‚_Ä¥æ×x§¾€¿¤ªvÁEp…´'lŸ³u$Î ð“vhÊÍ…•©ªõØ3…v!Ùôž|¹x„ƒrù€½g&ðf›o9¦UðT' ~Í»,`Úì !w)à—› ^‹öh’YŠx6¹!{‚îqóv1lfÏ C›E÷sõiZã¹xÙHš€íÌñØÑTõ$ô“¿xÊ*Ö\qHÚEFË”]—\vEýç íÖúÔƒTwCÁ…\‚ô ˜lHLHBò-æÏF؆ð¹¡ÔNíÞXŠÐ£×#Su “ûeª“f~±W*÷s@‚Ý>½ò_¿ì>xÂ<ã B”Ë+¢€V81ª¼RJ&Q!ž@ݺ„0 ¼÷R¬ëïƒða •8øöÏÿKmü˜Òʹ<˜cäU BMü¨žò_Ð=Š¿’Tõ•“–œZó>kžº Ü †6Õs8¡7yX_üå€å•f*L/}”Aõ2=|åéàŒÀ/J~ŠZ¦œ!'•é÷(Ö.íƒ=¢¬§S« 3 Z*tŠYªè´¦¸dOŸœz·…‹º·m¼YÉÿ¶®=UÃÿøÇ+ñ÷üá¨9¯ØšƒÔ·áˆfÄü"+Ñ.Ëá\Á†ü¸ÞT MräàÌp< ²_š )@«˜ÏÝj»‚>U)?>½ÞpøÑ-—ï~÷»Ý¯ýëéþ⿨Cªš²³~ɼkŽWëƒ_úsè"7­¿A¿|°”ûìv(]-±*Óí0ݹø²cq>Ûl¿s·ñ¦s+²g¼YvAm‰«øÃ ªÔª…`…uÍó‹§éìV^a¦'а9ógǰö+^Ù½îõo¨Œ/nôŽîõ뽩ô9 ø¥0¿d(x¢|{3ó¬¨;PïT àoYÔxSÍSb~ÑAòO"`¿3ÑMÎô÷$‡gô 9š>óKi¹Ïó‹ˆÂ‰M˜U~‘í3GQEÐ=}ðK™#x¤kO™ÞÆŒ~Q†Ÿ©V&ó÷Ö§‡)¬´å‰¬JÂGR´8ô0Û GAÍɘ—±vhãᴽ훼-³µ&¢Ù™‚a˜%SÔƒIޏÊÁ/Â99§ž §ì˜RBá ´ãs Þd4ç=ÞO{ÖážPàŠˆd jµ¶iû—MZ]w"íÚŽŒ¸„¡·~yÜ™_~Ñhqc™g ø…FÏ6m¾a,‚wJ‘¬9Ÿ¡Á$Øf²¡Äy‚_à‹WÙS –ËJtýN’NØÕü’â¯R¾dÜ/jy ü2Cš ·É" ¼¯„^k–Á¿ãÊörwY«ôÓ1…Þó^}o- ™¬ ½üÍSà—©<ðþ{gU“£o¢¬·µJa¸ÈeY™Š¼Îéj庮|ýøeºZ›ÔáÓùðÉ0¿ˆ€Ô‡žtÌ/Æbì•Ê…J(ÆJ}0ÌjÍü"¼S.1ÑeÿsŸû\=O]sWFïgàÈQ\Ò7Iybóé")ñ¬¤@×­Ô}¿‡¯v:–6eÇSœÉUò» ÕÍŠÓ˜˜5àsêfó‚1O(ïV¬Ö³Ûª´©4¡!èjÅüB8ˆåË—?† E¤“á{¡›CðpûÐþj~ ‘R¡igÎû¬¼×ti¸8fÕß›FfêAüxõ7ð Í17Z15ø’5G[} ªÍŒnÓ‹[]!ÖeÆ?à­qX>Oéc•1¿˜Ö2`¨óE[nŠp´§Smíõ‘=}lH4˜C8¥`À/Á†øZ*' ˆ“¹[¢€`„…Ò/U 'ZLëœR~yIyR)÷O™ŽõæD# ³éQp Þ>ø%ÇgL†€9eT!J¾8ú„ÃþÙxJ-öV¯„w»æÍÏ*ø…VÌ¿šGoÉ;ê ªdl[$ð¥elЩ?ƒ8¥[.iðºyõÕ>1ŠI±Ðj¨0ØVÔ€üY¿XCÖS ØÌfn}d&½,茶a§mºËÄðËNówíÞ?o~aÙ¹{ïÖïë6yç¦å˜© j’œCLd› |É>)SÑ\²u©.èIÎ ó‹Ú ÏfÍ2‡þÐ\„ |)|LÔÌÞû”RÆA‡uû”3²v*d'À/m¨·”6Êk#‹ß¿´ÊÛíØ½eÃ~yu£¶Q9`¦BÁ>ó ó 1 ó5A¦ˆ6#ð 1IMOÐ>‹>Ì/†ì]™jÎDó~…ù刂íØsÑÁµÿ‘cÛ¼j¡ë…4‡ò5Ž‘E…äà ~Yïë 6t|4ݳ6D&ëA yqï9“d( ¡W’§a*³QÂL›úBhžrÚ™ÝAuî¼1Lèh5J½z˜ùƒƒlµî¼/d ƹ÷?øènî{·-ü«*ð¥îéƒ_ëÁÎübtÁj©¾Í>¸_©°¿èKj¢j‹§MNà>WH¨nmz¦œ 5\æì¹_·îß¿ºV˜(/ï )}” ͪ¬aEð’éüd̤YºÄ“Ñ¢›çl4@ Éá0mkZ )Ãâ0¿fÐ%¦Jï1Ýå }ô*õ&3è«aëá˜1ÏÓÆ\.îrTEäl¼˜b5o˺¦ÍüB8»4gªr"Ü=\té.äÌzƒ¥¼ ÚëkŽã‰†ÛÙ®UMú{ÂÉ)½{îëdµF¼9ºO³Úw3¿Ð¦4 t„–>äD¶ŠsÎ+‡Ì–C2û¸&k¨fÛg—賿p>´í ‘mH„¡êդ׻çn5n“‰÷åõ§ ~1â"\ãt8™8ñè‘eXâ’+®y .ÄüM2YÂr(&@r^dCÝíU[ëÖ!íf˃1Ú’CpMWfÂò’2Æöüq¸BhSÔd'°¥Lü">µeóYƒ¼®=ñªk?Ug錘™3Îi†‡¹Y›´bª£±¿ìQµºÕv;×W¦Ì¤­Gk‘ '… ÅçJÌ¡Õ{/:h\$µ)Û!$§8ið‹l]'£Ë6KŠiâêë>]q™S¦Á$˜®¹:7žá@{¡Q&J{4š­ÃHŒ÷ú;ïÌfƒ20¨xé×v/zñؽ™= &~átŒ´ÀùÛ‡Ù§Z\zq¡; T¹)£g99ÛÍJ¨5üÖ¢ÁÀ tPÍÈzp™uõ ÃHñî¹ÛŒ»6í¡R6=ÍI_¤R² ¦Êá§,eª×Ýøé*¤ÑìLJ2­Fu[5c –OÌd ™³–m„7CÇ<Û öËÇü›ˆö9¦£šØ7÷~Ú™çvO+èñúÌÖý²¶ ™_´iQÆN@ù ‹û@và=aƒönÈô2­†O ƒ…„e’Öe>¶ŒfÓ íeÝgÒg·×vj¾Ÿ_Y4<øEÄ&Êüb-‚÷Ê-â€_d#Ò¥c íów}µ XdMBxâž¾¹q¸« ól m2rêph9&ÙX—Oá0X44AƒZ´ ü¥qí£]fkMÊÅ»ˆé×Pº#JmTÑB¥a-p41Ê’S>T)ü¯·ÑP¾QoÎÀ=ó ÎÃ×¥A Ìó B9^4Zò÷„õÅç}í^Ћ/ xBB\´ö+æ ÌÓJÛ÷´¹ó‹Ìž™âyyök2õ(àBŠäðKÃ…üÏúÔ 6p pÃÞ—uækÚÏ]y@ t×ÏÝoÔ!}Æœu{dÿèõ)v•¤ ~‘¿Ñž°ðm4Ym9ª€_®ªáA¢Q —Š¡ÙÆ ãæÝÓó7ˆMƒÒ£=GÀ©XŸÁmåø?>k2É5lЂ"ìc‚_"ÓP0"$ ZÀ©ÉRÙbq âÆ xìî*,ÆäÜ8sóPp`Mò´Lמ·lí]·ÓœY î eMÙ+%Û ;-Á•À/ªˆ^É ‡4ÚžÓg~ÙqÇyÝÍ…rŠ a]j€´/n(?²€¶e÷/´OÔç°Ùþ¾ñv5^’…úÄ'—^­5ÇÅi ï,9KMz&M+¾¦B ·§Eu™¶Šœ- ´Ñ„Ñ€07ÝrÛÀ©JÈ<ûTSa€0  XV(—Ò‡ÌCÜÊt3Öm¿ [šÏmŸ}ëÃÌ]݉…Ju¼Ó¶í‘K‚u —ù%Õl¹?`²„ês*f8ûÜ ªyzÚÖxê Õº¼š¨È‡öÉŒaÓ¢ˆ±íœxï=BÁ·Cm2²pøl>wëqµ(åJXÇò¬[%‘âkÖª ŸR|„ëµæt—iøˆÐ0 :±û‚=*WHöD7A¨à­Âw—`]6"ÂiydcšïßY«I”ƒÝòyœõÚX,>Þ=ïùk)dNu!¤LIíVÄc|UȲyÞm‘ª”iŸY—0þˆÃQµS ðÅaAË ÿdÐrž¼ ÝÚ“nYc!'º1Kšd¢4@Á{ û}àK½@˜ö,ü§—˳º·i_ä’iš2×ðš+ÿ™Û®¤\W\Ý KLÔ«kæR§)Áyð¤) íµ±ìR91‚ð©ñX·"£_h•÷½¸<¼÷nµM­¤W˜6øE쪑£âöœ]%B:õô3+ÄHŠ–B7i &Û÷*V%L#*Ú}Ä\ÑÜ4w[ŸG¨mú_{ýM~lù¸¾ ¶ »ÂŒÀ/<­K?G;üÂöÏ<ëü* 2Ñð…¨ŸeÐ>5? •!e&9ù… ªuj=,€]òñîßþíß»_ýêW•7DUŽUEPè»ÂŒÀ/‘²fM¿tlÈF½­ûðGš‰YSLN†áÆSâWsJ Ô H‹¾Ø;]* ¶³Ëá)ßû??   î»ï¾º†ÄÞhÛ˜øECTÿQ $ ó‹½I±á†oíN>µôý?ÔvYcÌÓÞvß|-´kð½ªÓ`#ßl#ÐIE£¨mFÓÚüö·¿íî¿ÿþz?ÊÂ8U}É„o¿/éÖØuW^¶<#Ä|ʹ°JЦ£Û¬‡p÷¤|OHÑþœâ™÷^TFAi„·nÞ §¶ÊDÕwD ð%¼Z ÅÍ&›½§{m™}Õ±†Í-(F&³<¿ªá¬€_îꯚ,‚Åž.“­Gñ7ÜæÈP€Øö°š$ÓRŸ«ðÅ÷ñ°³N§l»C!Ç|ñ VBkÏ+ L}Aÿò—¿ÔZ°`…™Î øE…Zž©~"OÓBËÁ\„]Ùv’SËv˜÷n§]ö¨Bì¼Û^u¬Œ/Û”3&ë÷ óÎw5ðË3žñŸVÚ"ìÉ´F£„#¬µ)‘Wóü³~±Ø;­Ã0Ó§3øÅÏŸóœ5+›ý×ÿ§nƒ·lÔ½¡ ^[X`€_ÀwÇlô^¨YëäÃï|ç;Ýã´'%RBŽb~¹jJcge{¸/æÀEkb¢«ü"ª±}°&žžÃ˜¸Ë¥l%³~Ñômš“E L÷}ºWá9E^)ÉŒ¿Ìó‹Íß5›Ööto~¢¿£Kƒ³S¥E…cý{cüR’åͧ5ý‘? ~‘•è7„{•÷„íY¼®ÞÄD û½¿çÁ™¤äÝ2±'Ðÿ]eÌ/Ö‚2AµÍ죙~ts!1™ªiÓœ‡hY<¡À/6bÂöÁ//‚iÎÁ~:¤¯ÍJ#W QbP!Z¸$™¨5ø„¿è>‡ù…ŠbÚið ÖUF;G›*Ódò4G@æ¹Ú‚_8Â$2²ö¬ã´é Fû«=ø…ãsB¶ÔvËxnaAÁ»òà‚íR§9b:üù›)õŽõÏÊ¡ K®yo¹ÉGŽÓñ*€·6íu¡vL`8¢÷L QГ—ùå)ðË  L³b®ã­—§À/eÚ>Tô0Ô~•FKju\‰ žxDE“¿Ø.ä}6}¯â_Î'B˜E=Å›>Z¾·¼p&^uV¼«ÃRUÿ xEƒèEÙÒžð‹€@€ ê'/õú¤`~IÌ,d‡Hx ´ës+«¬Öà‡néÆbtÍ$‰‹D6Â7c¦„4×2}å!žóˆ˜x±œ1³ÿ¥Zùcƒ÷H8 féšÎ’˜Á3ûcª2ü!*ïªm†hÖÂübH^Ë;¯ïb6N[â ÏübÀÉšSŒVh¢=D¹JA÷ä”Ñœ‹'S‘ixXàÖ®R(§éÇüb­Ñ³$m*6éY¸LV2¹cdzQŸVC6„£R^d¾„e¶„5rCP– sµJÀ/©Ú)QBá8E”ÖÔAiŽÙ]홌:A{*msBª,Èín]nÿþD½ê‡Ð÷ü«2¿Xs† •z¹óÎ;«`’fÂå(ñ¾ûàÂ…Ú&À— |”CŒb2tDëÌŒ ÒG%_î餳Y¿(° !”$9ØaÄ( ÀÖ –w-¨žªqCºq¥æ|<ÑÌE#ñ–’Ét¼wVÁ/L‡3ûÞÑØŒm[WÛvÛ÷u;í<¿›¿Ënü2o~!GÙa^·õ¶…·Éc~‘_Ò  |t¼stœ@#àÂÉ1ƒòágù…§c¢œÅßg~é£{r”¸äx¯½Ëñl‡Ýí]ð J¿#-Ø|½{A h#lý¾÷—c¥€_š€Â>Â>Y-­ B ­õ3¿¨Ñ,g¢çt–@'lì¡¶ øå°#Ž*3ÇΈ 1ŠæA%½v²ýÂú}ú“^wú@9š­4Œ"dNVãºÔZÓ{‘lsdîiÆàÛ/ÊTÃ|jS”!FÙ£TÖN9íŒÒ%>­ö'Û Dk°ºhO?2‚VûÎϼ_/Sìà#Nì6ßb›î•ë̩Մ˜h_ÀÃhžÇU-ä©EFj¿¥Åø˜rÉcòIÁ¶ðÉ·9óšöAÛ/ öáK„\¼ø€BŒòßk‡Yü!-t×vŽä¢Ú®‹  ÎÔÎ_Îñ§ºÌÆ]Ž9ñŒn—{UðKŽÓH{°_Þ¤iuß1¿^Ûè탼+ 3xàuç^°¬¢ôúCŒbl…&3Èë5}I‚B/B‹Šºä³Ìì[~öŠWΩqkšKýËd<<÷ŒÀ/4)’±Ñ³ý೬%F¥{š¤2 èæŒµ4b”j§¹ÙxB—µ¡iغ5´”14CÎu…Nøà>‹ëaÒãÌ$ Ié›û“„{( kÉ'q¹¯ö¨R÷]МXT¨–YtÓNÑ !Ï=ÿÂ:™ìf\¢ j8‚Vsxí SmÜ=™Èòr³9u“.ŸešÄÐÓÒË®é6Ùlî¸ÚGY–ÐÖ&°°6U*3˜È*±ãq6[ê7YÁ›r8öGq(F@‘Œ-âä%§TFÃDa–0rA³69óç4&&_çLΆ™·“Cp ?cóêA¾ôekÙH"ˆŠš2ø^6AHë‰Ò¢ Ø~xÙWשH£g&!30hh ¡róÁcC&¦ZŒ—!¥züp™ƒ5”™=cm‹Êú\c•ñZ„tžˆ{œø…G•r8‚c~°!ÙCËüùÓÄî&2~fx™”#ÉÈJ§µ‘3ÍhKȼ?49l¦ëü«)L“ã ²@Þºœ4ø…©Jx­E¦à”3—~Ée— ǯÀ…¸7EpfFX7Î1I&k_ìà =ÞØú³cšÌŸedÞÕP¯‘ÓÍ6˜f;Ñd¼O ü¢d!£—´†Å:F‰l–ßúσSì ó×t#^ͺ˜ 3;‚Ú‚ŒåiiÕ–Á”­AïMo“ã3Sk¾öø%§;))ð+šQÆPð‹8UMF*ÕÏè“.‰[?ûùz1{ô@†ã3äk½ÒÇDÐönë $S6¦FƒA™Y7¢mÝ×>«Á˜KÅ57|¦{泞3n'ÛöA)2ü¢ªÆLm°Þ Jkj¬XÐþiCÜS_ƒp#=¸ÙFIsKõŽÍ”$oêûp÷ÐZHà¥A¤®ä® LCþ¼x¿–pO&cyËübá*:©ª®î!¤¶ÛqÇŸ0ÐbcùF,h7ñCõ„Y‰`<¬qÑÆep×ÜÒÞû•ú}˜dÏ—+B¡ ~w÷Ê9+ϼö»N¶Ä•À/JöÅlüìÚ ª …§ãO8©>Ñf® »áuÌG¸DÜ$ÓFƒÓÐ ürW½ñüMJÈb%ÞhT³îp\H´)åuKFs“¡ÁŒ‰&yUêVUëWÖ”,${̱Ç×'Út´F¡{š÷Ô×FÒp{]ƒ<,Aƒ²ó ò°BÏœI_£öY“Ñ$4”ùEÝSJE@ZŒUÉ(¸p‚0COÝÍ…Þ&,M¾·Ö< [ ˆµhŸ´¥”S².™jÖa[ƒ_¨fšÏ õͧo»cB@š*ƒ`\ð‹¢¯A{›«"R¨m”ÔeĬŸ-„Aœµí£Á CòE0?§=àÀvÁ³&0öÔ~Ú(8n¯ž4ŒhÍq5ˆSÐw …Ï|Ö³Çõ®ª ’x¾Äzü’ùxWΆ‰PmTÄO›Ÿ¼ayýçnÊSçA"ç¶‘ ¼1¦ež³(ÚÉ>)[!¨˜!ÀŸPM¼®yüɧuÿ¡TÆv²OºOŠ’~ ¿(æêMë¬MfšÊ¯¥.zÖ9ç׸•6Û¦}[…L´¨ç†Áþ(’Ñ&s­e—H’¾;!pÎZm@Óªñuˆ‘Þ=ø…Ð"²œ¾4!øÅº”º0]æÒhÅ_×üù¨æ˜˜R8Gs4BX¼Sâ+í’FY‡m·±¾p@R19¤™sõ7Ì[pjFa¢¯'Š])$ˆ‚Iƒ_¨Ô/à ¯y¿tøÑe!"º±:ZhÐÞój, *gÐZªoàæÊtýÌZõAÇ&~õ ¹ç¾ ÍB´˜ê”˜_hSê¢2@“¡¶QüUø]P2ù$§!ö !ŠX4Œ„É@Iƒ°V+¨±­+‚½ô>Î:¯j'×¾¤ZvÅ,íÀ)3¿0Yý(ÕmC½j£µØuÒ’nYÉ8Zyq57y¤¸”`„˜Ëþi/$ „ùxß Ö¥\Úæ¼‡­2ÿ%©°Qq|<æh!S˜øE)DW)¥{5QÌ]¨~æÙ•ü–­­¢`O¤=¤Z§ lÓ%tN”Ã/aWZj¾ÅJþ×·¾]OUãáG Ê)æðêi3¿(MJœyUfEüâà Éûég‚.78÷#%IZ uq(¦ò[;ÁµÍÑoˈu1¿üñì|ðÁ•¶1U%•i3¿ØR´Ï2µ¯éŸØ°<Í£Ž=©šGB;¶‡0û†›™‰0¦†Õ*UÀJ;uÒ€bܶrBÉÿõžo  £Ulvé˦Íüb¿¤I(½ ì’ʸ‚,~ÙsŸÂ5w¸“•Ž®k¦bž€/9l(Œ¢¾x(¡_|ÈÑÝ[ß¾iÑÊFÝwÜÑ=ôP#)rô¨YZ|„ÔQ›ó‹¯uI£ýS°!Aˆ8T·7zûÆÝÂâdr ‡cóg¶ð ”€©ØqLLvË­ß_˜_ÖÔX"Žxä‘G‚¢µÑB”!ñ¤ªú^gÌüÂË2Yë1ð¥ Ú«l ¡F3¿üÃk^WZt;w;—ãÜv){¢#ݘkÅ3¿`vØi·ÊÙó¢—”£«Æ8×Cü¬¸ º¢º ó·}Q›ÏV¢)Tîq¥3`Çœ­3F"Š÷‡ž&“P1 ôM´úØxÃóÐ>˜_^ûºõêqmë½ñÍÝkÊ×_A_ðB 3á`¾Ê8Xáïÿû*¬³$ð´9«àŒ€„¡¹4`hp½ÍLù[E)›ý—¾ô¥Z¹°å·}æ—Y¿ä KÛFLt6˜ìgø¿Úñ4H@m»XRñªÌøEäÎfE-ÿ(glLöf§ò>N'Jr.)ª¿Ì:ó‹œM:£Ë¥ÿ £d•krLLwºæ›¿õ9Qå2€ÁÉXƒ,‰'GmSÞ»ÝD“”“êuHl‰WÎaÒ£Á/lÂê.¹1½‰l9YÍy¿¿Áøœ>øÅ¤I^ÔçñLt" Ny´l¾//ÂÝg?âl8!-lᔪµ"X˜_ü,)ÏD¼Y~ÏäåƒÒ%fµ¿0åœñ¨rf]¥QÁó—ÑçÜéM®vÌ/J÷¼sÀj^í¹ŠN9Õž`!À^-™_ÚÁ¶ójòMXÚÍqÊža*}Ò€_d.É^ú\\O_f€ Ì L´ÏL÷÷eÛY«\Û—ëG«9yLo¢\×á4wêQ¹¶wfÎtÿÇdþîÿÁ{‚·ˆe XIEND®B`‚Carla-2.4.2/resources/bitmaps/dial_02d.png000066400000000000000000000123501420416754300203050ustar00rootroot00000000000000‰PNG  IHDR99Œƒ…sRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÛ ,æWõ(hIDAThÞÍ[Ëoc×}þÎë>xI‘—Ôƒ¤dÉó8ˆa×€v hƒfãEéÂ( ´†½î¢›-œE‘"@ t‘?À®»j³jëv$@P °ÔE»öÈãÑÌhDëÅç%/ïãœ{O÷ajFãØIœäC %ê|ç÷ú~ßïˆàK\»»»7Ò4}QkýŒÖº­µ®à€9!äÀ»„×n~Yû ¿Ìëõz›I’¼¦”z.ŽãZE$I¤iŠ4M¡µ†Ö„ò¡”‚1Ã04ç|Æ9‡RúÒÁÁAÿ7 äÞÞÞ«q¿àû¾Eâ8†R J)0Æ`š& Ãc „h­‘$ â8FEH’œóò1M¶mûœóïÞ½{÷å_+Ƚ½½7Â0|Þó<†!¢(‚ah4h4¨×ëpŒ1PJAišˆ¢iš–±X,0NËGJ Ã0`š&ÇILÓ|óîÝ»ø+Ùëõ¾EÑ+“ÉÄð}J)´Z-´Ûm¬¯¯Ã²,!`š&8çÃÍf®ëBétг³3A€J¥)%â8FÇÃççç8;;Ãh4‚–e¡V«ÅBˆ¿½wïÞ·¾t»»»F£kóùqc}};;;hµZ¨T*0MóBÌ1ÆP«ÕP«ÕÐï÷±¿¿)%ªÕ*ÖÖÖ@)¥I’Ò4E†X,Ç8::Âp8çŽã`eeåöáááõ/d¯×{6Žã k>Ÿ£^¯ãÊ•+èv»¨V«B€ìã «lnn²,Bðᇢßï—@”R0 ÝnœsÄq ÆlÛ$I)%æó9NOOqÿþ}ÌçsT*Ôëõ1ö{÷ïßÿñçÙ;ûœ¿áûþ¿œ‰ °½½§žzê@­ui×u±±±jµŠ[·náæÍ›Ç%À"ãÆqŒñxŒÅb••¬®®b0”‰HÃ0P«ÕÐh4 ”Âx2‹9!2ZgY6#èt7qã+OÂqjeï%£àèè”RT*lll@)… X§Óyõ!q¿†!Z­Z­„È6[t§§§eÀ¿Ô²,¬®·¡Aaš£H”‚Fþ~Ö…d?$IöyI’‚1–·`Ú¶ ’·e6z_yâ!×]Êð}iš}^½^G½^/zÔ.€ìõz›EÃÛn·Q©T@A†XYY!³Ùì¡ÒÑînÁ²JÀ8Ë2¤i’R«Œ1$‰ ‘¦†ÁËq.ÀÏÜÜ2!•„mÛ ”ƒŠÇ¿Ší+de“ÉãñŒ1X–…f³ ¥¢(rÚíöf 2I’׊†w}}¦i–ÝD«ÕÂáááC…¾Ýé¢âÔ¦ lË%<Ê9˼€꺌‰<¦S$‰Î=%KJBdŠ@š¤0 ‰R¨T2Ï`ŒâÙç~õ†{)È‚àáàº.8ç¥|­™k2h4%ãkkk€ƒƒƒÒzE©p›«0M«t¿âç„àPÁs÷4òì+@)ƒR ­Ó4òÄaÂ4 †Y¿(”RpÎñÔo=óH‚v||ŒétZ&!ÇqŠlü\ 2ŽãšR F£ì ã8ÆÊÊ ÎÎÎÊÄQX²Ùj¡ÞhB) ˲aÒ4…mWÐ,ŽM †! u ž·bBd¥B)‰,IRضB²˜6MB€išòS ½7àT«ÔZÃó<„a˜²@µZ…R I’Ô€îîîÞˆ¢ˆŒ¾èì777aÛ6îÝ»‡8Ž/$v»ƒ$MP­V!¥„m[0 išÂql0F!„Û¶3·L²2”¦ ÃÈ_§àœ‚q†J¥Ƴ˜*¼£¨½P ”<¶ýø¥–Œ¢·oß!¤TÒ4…”’¬­­Ý iš¾˜$ cp§ìß,ËÂG}Ïó.pQ!ª+ 0šÅ]µê ŽU Tk Û®äñi Rq`š’Dƒs†$É€†™ñZaÀ08œJ”Ò¤΋ìnäiãêµk ”^ Ô÷}ìïï—êBÁмHµÖÏ|šÂ0D­Vc ÇÇÇ%ÀÜü¹ú–% š­ÕH)Q©Øe#í8„°í¬ï´,I’”›¬V«Ù¡ ^&&Û®€RÀ0 !À9ƒÖ „0Å1Úí.¸0.©”Âh4Ât:¥´,ž¡Zëvš¦0 ”R4›MÔj5¼ÿþû%£Xά–])»…¢Öe­–é?K(Õj†aÂqÔëÜý$,Ë‚mÛp]U§ Æx ʲl†!òò’%+Á9 CäqùšN§è÷û%ÈÔë+P*£ŒY¦åÐZBJ Î(Mó¢žq] š.ѺËV!jÏf³2\i>]*ÝòôôÕ¼=Ø/¦iŠ(  ”„¾¿¥4OJŸJaBÏó¦ Aàää ³™¥$†Ã¦S¾ïÃóf +“R6KIrð,÷ ­È\ù{ÔZ__G³Ù,½Ž2§„“¢øç kkk9ßLê:f³YÖ&%?Ï¢HBJ…4Õy_€1šë¤‹…ù|!Âpù|Ž !æ³YÁ7A Ç¤LòŒœ%Ÿ`±@Øh4°µµU6Ô¹'žPïRJ‹>¬$çN§ ÞâT´Ö™>,ÀƒÊ;þBw Ãl¢%e)#ÌçsPš-¼¬PÊ3­&„”Ùdk>÷¡T‚(Šhy)¤iJ ÎÎN!¥¼ ç¼U(¥ ¥,<ã]Jy½°Úb±(ß4 –e]ଅê=ŒE1(cù÷3Ìç( !e”[F›ÍÀ‡ïÏÁ9! A ˆ¢J%2Æbá#I$¤ŒóæXCÊRJ$i‚;wî@/õ“ËËq\½zJ)„aXÊ$^§7ó(¦ÓiI኶«Æ, U÷îÞAšjÄQ J)¤Ì¬3›yHÓA"Šb$‰„’ A°€iZ‚ ŸSARZ?IRH™ñ2a:ÎãPg¡$ïݹ išØÝÝ-¨|ß/†»z8Þ¤¹©gË €RŠõõu¬¯¯?¤—öûG˜Ï&Y"ÊFÇ „ÁófH Eiª‘¦ ¢(D¥RAe@ ‚EB¢(†R2¥~ ´ˆQàƒÞ‡?Ÿ?,犻iš¥§ù¾_•YÙ…pÎß)@¦¶mGGGèv»%ÈÂm•R¸w÷6Ò4Ö)¢(!q•…Öˆã*‘y¢(ëZ‚ €9Ð`‘»n¥dÖoªA”–ÑiŠýÿÀåå£Ûí–¥h$!ä$¥ô¥‚rŸŸ# Ã2˜+• ªÕêCÒÇÁíÛœ—ÿ†À¨šÕ©8’¹ÜArŽ™Ñº ¨@Aé YVÔHÅ"Dš&Ï1œ_ pylQ诅䩵~©yppзmÛ7 ggge\X–Ïópýúõ‡„Ý(ŠðÞO‚…?Ëc5žf›À9Ç|¾(ûǬÓ!¤L`Ûa‚/Y”]ªuŠ4Iðýÿxë‚¶sÈ"áL§SpÎa†?ú„,ÎùwMÓÄh4Âx<.³l1 /$‘e4™LðÁû?…’²G1ã9÷äX,ü É+c/È;A°çE.ÀÍ)^!¾÷ïÿŠ( ™pªÕ*!Rb6›a6›åYœüùCjÝÝ»w_v'Bàèèóù¼œ†z½~¡¯,ž~¿Ÿþä]DáâB™áœå²Qº£R ’Dƒ1’gM•SÀ  ,‚ SðT„7¿÷f³é#‹¿eYp]·$1ƒÁ ˜eÞ‡ÿx©¸lšæ›–ea8âôô´Ì´qÃuÝ ã€eQ«t„ÿùïcæM‘¦™~Ç †‘ ʜ”,Jƒ -[¯ ðÁ¹jÜúè&~ðý·> €2¥”e/)„cì;øL&“^]]ýë0 Ùb±@£Ñ€a¥¨tç·†¦…ûA€£û÷@ Q©TBËQ@Ër$ ÌY|fŒ ¥F{zrŒÛï£ÿ^I˵(¥ØÙÙað<ý~Zk8޳?þä3§ZÍf“¤iúû³œOÖjµRóùàƒê/ä·ãÑý£CÈ(„Š8gˆ¥‚b hBÉ£á9>¾uG‡w±XøŸë¢c NJ)a6›Wkþ4‚?s>yïÞ½omooÿ™”òÚññ1ÇÁææfiÍ8Ž/í5—Wš¦8>îãø¸!j++°,”1I’I)Áb`áÿL«=ŠÆCŸápXÜâú§ápøÖçþn·˜¦©…úÉ'ŸÔ_ýêWuµZÕ4¥T !4ç\B4!Dç•úWöt:}íÚ5Í9×Bíºî{_øöG£Ñøçüå Èd2ïû¥¬PŒÑŠ$ô«XÅEÃZ­†f³ ­5NOOsÔB~7 Cï ô<¯ïºnÀûZdcï­­-¬®®bmm ­V«²–•õ_æ*ê ëºØÙÙA§ÓA½^/*¥à8NÈ9ÿúx<þߟûFÖÖÖÖ·ƒ ø«ét B¶··ÑívaÛv ðèè¾ï—×")}á;p¹~ãº.\×…ã8h6›%yX,8;;ÃÉÉ ´Ö¨T*¡âG£Ñ¿ýB—•<Ïûa«Õ „Ç1 ùtØ,…èF£V«Unj™þ}«¹®‹ëׯ£ÝncuuŽã”—™<ÏÃÑÑNOO !|Ì9ÿúh4zó—v·nssóÙ$I~äyžÇA·ÛÅêêj&ó箫µ.»™Û·o£¸Eù¨UÈú»»»å¥§ÂrÅ­¬Ñh„óóó²­T*ïx~<ßÿRnIv»Ýçóùµb¼^Ü£«×ë°,«ÔW‹[’ûûû%¹L“iµZ¸zõê…ZEÂ0Äl6Ã`0X&ÝE™xñK¿ïº¹¹ùM)å+¾ï…6T¯×Ë;­†QÈü™;Êöùù9¤Ì”¾õõulmm]ÐdŠÛ•“ÉÓé³Ù,³lÛÞ'„üÅh4zë Çú/’ý:ÎJ©çƒ `ØÂýŠY‡mÛ¥= Ç1LÓ,c·h‘|ß/ŸåëÚ¦iÞgŒ}g8þïõz§Óy5I’¢(r²6I•µ´˜K!JõoùΫ”²ü¾"®‹~òÝápøë½ƒþàj·Û›Zë×Ò4}.I’š”’<ø—–‹âæ2cL3Æf„w´Ö/ ïoÜŸL<¸ÖÖÖnxÀ3Úùp©M̵Ö'Þðúp8üÒþ.äÿ‹^¾eš ñpIEND®B`‚Carla-2.4.2/resources/bitmaps/dial_03.png000066400000000000000000000033701420416754300201440ustar00rootroot00000000000000‰PNG  IHDR"":G  pHYs.#.#x¥?vtIMEÜ% ‘ ´?—IDATXÃíWKŒGþêÕS½³³3µ×vb­9@Ö‚ Ø „$.pᘠN\¸pæÌ•H !Wå–À!Ba ‘•(ÎÅÈØãÝîÙéGuW×ÿs˜îñìzÖ/嘺t×TõÿõÕ÷?FàF’L$€€B‚™€„¸MÓŒŸÖ¦xJç[ž‹¢Á)åŽ÷þ#)ÅH)ý¼sî!Ä@ÁL€:M³ö’$``ǘèš1fÏZûe¥”Bhfn´Öç™Ù9ç>R$EQ¾%„˜;W½àÊ4ÍÂ3éØpÎZûc¢/F£¯cÆZë-…bC!€™=CDhšæųÙìÂMçª?øošfõ3IFƘoÆqüýápøkíç´ÖZæ…úçÒ˜x`Ž™B@Q«ªêÃùüðgn¦iV­ó§Ö0!âØ|~4ý(I’oYkÏ)¥êºFUU¨ª Î9¸ªBÝ4ðM"‚”RJ(¥EÑ ƒÁ`WJù¢sÕûqlœséF¬2ÒÚ|}8þ`<u0<רª mÛâüùó8}ꃌ1`f8çP×5ö÷÷qçÎ(­Ç1¤”€¶m1›e:88ø €iš¹I’É@Juekkôã$yîÛQÅP×5ʲą °÷ÒK8µ½ EB€ˆB€ÆlmmáìÙ³ "L§SH)¡µ†R ÆD—˜ù\]»ƱMsôNœç66†?œL’W£(²àœCÓ4øÊË/ãì™3 "´m !˜y©‰~>1™L0½wD´EÑeï[á}s=ŽíÜ9wHÛMc¢W'“Ékq¿ „@Ó4pÎáÚÕ«°ÖÂ{˜ù€ãs"AH‰ñxŒûÓ) ”R½~N;ç> ¢sdŸ+„ã8þnÇ»=宪peoƘ%ˆþ*zgÇçË=D  ¤Ä…‹áœ[€ÖÚÏÄqü=;=²{´Ö¯lnn^SJ™^|§wv°µµõD ÂýºÑ“ñUU™¡”Âh4ú†”êÅ$™˜ bSkýE­õÆjˆîîî¢mÛµ Nt| ˜1P×5BX$XcLbŒ¹ `tÇÈHk}IJ33¼÷H’Fkxï—Η`wó#ïÇtrdÀp8„÷~¡!0 öêÚ%Òþj†Æ˜ÓBÙÙÞÞFÛEÆq&uúuL…î[k-Ú¶3CH‰(Š.âT’L„N’‰°©”ÚéS3…k-Bw-'EƉ§_ó1CI¹´'Q4BŒ™YèE‰C)åx „Rˆ#yᱎW>îÚVj”BXfÈ^#b)ÜnÓñèxmœ¸¾’[ÐéŠ'õ~õ‚vDä™ÜUѺi µ~Àžæôëövšé+ôXÈ^$´E[Çy!í)SR"ŸÏ—'yH”½¾Ç¾óM¹(â`f´m˜1£À}ÔÖu}«q¥5îM§êIçøQy#œðÞƒD(« Zë%#mÛ0s€z iÓ47B RJò<|È®„çñ÷e8-¯ªo ˆˆ¼÷·ÜOÓlÉȼmÛw½÷ó^HÆܾ}û!£'²sˆžÕ¢(`ŒéE ï}Õ¶íu€³ÕZã™éßEQ¼Ý÷Zk3¦ÓéÇÓÆšµ6„E[¤õ¾Iªó<;„ðWnÙ8çǶ!"2Ƽ¢µ ! ¥Äáá!¤”N£'D 5eYª¾[cf”eùQQ?g¦÷úNmµi™yFDƒÁž”ÞûâÈÿ²¿¿ÿg£µ5ÆìÐ1Ç,s3ZïoÞ½{÷WÄÜXk/I)Ñ4M:ŸÏßiÛöwî9çøŽ•*„öcf¾,¥ÜÍóüÍ¢(Z–åëM]ß.˲‰­}ÀƑڳ¢®Àeiš¾~8›ýržçp™Ï)¥.—eùº®ÍLÿJÓ¬YÛ³:çBÛ™÷ÍèL]׿gæw‹¢Èʪú0„ð÷<Ïß/ò<•R¶ 4 &ªBwïoeiúæ,Ë~Q”åo²,{/„0·ÖÞo[ÿŸ¶ Ûu]ÿ–(¼`Ù&®í⻎-îú„@ž¦Y÷ß €ÑZolnn~VJyZ ‘Ä|@D÷‹¢¸å½/4îlÚ›EgóÑ@ž`ô äŠ @«Î?ŸŽOrüˆ‹æ³1WÀTIEND®B`‚Carla-2.4.2/resources/bitmaps/dial_03d.png000066400000000000000000000033701420416754300203100ustar00rootroot00000000000000‰PNG  IHDR"":G  pHYs.#.#x¥?vtIMEÜ% ‘ ´?—IDATXÃíWKŒGþêÕS½³³3µ×vb­9@Ö‚ Ø „$.pᘠN\¸pæÌ•H !Wå–À!Ba ‘•(ÎÅÈØãÝîÙéGuW×ÿs˜îñìzÖ/嘺t×TõÿõÕ÷?FàF’L$€€B‚™€„¸MÓŒŸÖ¦xJç[ž‹¢Á)åŽ÷þ#)ÅH)ý¼sî!Ä@ÁL€:M³ö’$``ǘèš1fÏZûe¥”Bhfn´Öç™Ù9ç>R$EQ¾%„˜;W½àÊ4ÍÂ3éØpÎZûc¢/F£¯cÆZë-…bC!€™=CDhšæųÙìÂMçª?øošfõ3IFƘoÆqüýápøkíç´ÖZæ…úçÒ˜x`Ž™B@Q«ªêÃùüðgn¦iV­ó§Ö0!âØ|~4ý(I’oYkÏ)¥êºFUU¨ª Î9¸ªBÝ4ðM"‚”RJ(¥EÑ ƒÁ`WJù¢sÕûqlœséF¬2ÒÚ|}8þ`<u0<רª mÛâüùó8}ꃌ1`f8çP×5ö÷÷qçÎ(­Ç1¤”€¶m1›e:88ø €iš¹I’É@Juekkôã$yîÛQÅP×5ʲą °÷ÒK8µ½ EB€ˆB€ÆlmmáìÙ³ "L§SH)¡µ†R ÆD—˜ù\]»ƱMsôNœç66†?œL’W£(²àœCÓ4øÊË/ãì™3 "´m !˜y©‰~>1™L0½wD´EÑeï[á}s=ŽíÜ9wHÛMc¢W'“Ékq¿ „@Ó4pÎáÚÕ«°ÖÂ{˜ù€ãs"AH‰ñxŒûÓ) ”R½~N;ç> ¢sdŸ+„ã8þnÇ»=宪peoƘ%ˆþ*zgÇçË=D  ¤Ä…‹áœ[€ÖÚÏÄqü=;=²{´Ö¯lnn^SJ™^|§wv°µµõD ÂýºÑ“ñUU™¡”Âh4ú†”êÅ$™˜ bSkýE­õÆjˆîîî¢mÛµ Nt| ˜1P×5BX$XcLbŒ¹ `tÇÈHk}IJ33¼÷H’Fkxï—Η`wó#ïÇtrdÀp8„÷~¡!0 öêÚ%Òþj†Æ˜ÓBÙÙÞÞFÛEÆq&uúuL…î[k-Ú¶3CH‰(Š.âT’L„N’‰°©”ÚéS3…k-Bw-'EƉ§_ó1CI¹´'Q4BŒ™YèE‰C)åx „Rˆ#yᱎW>îÚVj”BXfÈ^#b)ÜnÓñèxmœ¸¾’[ÐéŠ'õ~õ‚vDä™ÜUѺi µ~Àžæôëövšé+ôXÈ^$´E[Çy!í)SR"ŸÏ—'yH”½¾Ç¾óM¹(â`f´m˜1£À}ÔÖu}«q¥5îM§êIçøQy#œðÞƒD(« Zë%#mÛ0s€z iÓ47B RJò<|È®„çñ÷e8-¯ªo ˆˆ¼÷·ÜOÓlÉȼmÛw½÷ó^HÆܾ}û!£'²sˆžÕ¢(`ŒéE ï}Õ¶íu€³ÕZã™éßEQ¼Ý÷Zk3¦ÓéÇÓÆšµ6„E[¤õ¾Iªó<;„ðWnÙ8çǶ!"2Ƽ¢µ ! ¥Äáá!¤”N£'D 5eYª¾[cf”eùQQ?g¦÷úNmµi™yFDƒÁž”ÞûâÈÿ²¿¿ÿg£µ5ÆìÐ1Ç,s3ZïoÞ½{÷WÄÜXk/I)Ñ4M:ŸÏßiÛöwî9çøŽ•*„öcf¾,¥ÜÍóüÍ¢(Z–åëM]ß.˲‰­}ÀƑڳ¢®Àeiš¾~8›ýržçp™Ï)¥.—eùº®ÍLÿJÓ¬YÛ³:çBÛ™÷ÍèL]׿gæw‹¢Èʪú0„ð÷<Ïß/ò<•R¶ 4 &ªBwïoeiúæ,Ë~Q”åo²,{/„0·ÖÞo[ÿŸ¶ Ûu]ÿ–(¼`Ù&®í⻎-îú„@ž¦Y÷ß €ÑZolnn~VJyZ ‘Ä|@D÷‹¢¸å½/4îlÚ›EgóÑ@ž`ô äŠ @«Î?ŸŽOrüˆ‹æ³1WÀTIEND®B`‚Carla-2.4.2/resources/bitmaps/dial_04.png000066400000000000000000000026451420416754300201510ustar00rootroot00000000000000‰PNG  IHDRr ß” pHYs.#.#x¥?vtIMEÜ)Ù—íDIDATHÇÅ–ËoåHÆ¿S/Û×÷‘Ww‡4ô$‘èfj$^â11b ˆH,æÏa‹Ä‚-b +6£ƒix 5B$­4ø&εˮªsXÜÇdznB`ƒ¥’]¶ëüüGùþ‹cssCÐP‹3WÕTnbƒnQrc"uÛZ{?¥ô4¥8µÖí3§¤”Žˆ”Ẫ¦ñ.@%€]ç²—­µͲì"¢ceŒÙÑZm4Mû;"â®ëÞŒ1þ–9ý@}•jZ"íZë^)ŠâKƒAqß¹ìýZ롈œјˆ@˜¹‘²išŸÅÕÙÙÙ· ü$¥ø ÝJá"nι/oll|u0<4Mƒ½½=¼ôâ‹Èó)%,]šRBb^¹wX–ØÞÞÆiU!„€,Ë cÌíBè]yí½‡ZtZ›F£¯Eqš¦ÁÁþ>ö÷SBß÷H)ÍÕ­)%R8<<„ÑÞ{Xk7'“ñW”ÒP`Q¸hìœûBY–ŸRJé¶m±³³ƒ÷íí!„€ÂzК€îÞ½‹#˜Îewʲü:@·@ÍÝ)k퇔R`fô}ÃÄV ߥfÂKפnߺï=ˆeY¾LD‡››FÍkNíeYö€ˆtç=ž»wD4‡‰\鯫 3Š¢XÍ­µ»ÖÚO(C¥Ô¡µö9A¶··çÉqãë/ç£Ñ!€5æ!€‘YïQ&"H)ÁZ»Jeê/ÇårXÍ×ÜcdY†úâz¾9ì( GDC`f­±ßÔøºw˜XÔ¬ˆ€ˆ €œÀ"– h‘8iiäƯÊ"kÏ"1Zf>]|ú¾_eæuƯƒ‰8%Ä”@DKÍtÀŒ™ÿ–R Zk«”‚÷Zë•;®5~01£ë:¨wBô/@f @#ÂíºîXlÀ'''ï-‡uYyÕγ¸_×5Œ1H)u1Æ_¨€à¸mÛŸ'fcp||¼rëµ¥qÍ6×÷=ôB÷þí”âO4Ú{¢È³°µöóι‘ðm‹AY^ë¶u%³Œ}5"Ë2„ªº®¿ËÌ?®ªi£À{Ÿò<›¥Ä[ι‡Æ{Q× ¢&sν§×@/ÃN«*j­•R u]ÿ¤ëü·yïyõ.мK‰ŸŠÈ€[³¦yýôôô kÌ Ë²;¼¶®âRýøñãΚæ-cÌa×u¿÷Þ_„߬ªió®?¾÷>E^§Äuß÷èºî;MÓ¼ÖyÿÏúâ¢+ò|—€3/ÒþRŒCÓ4o}Ó{ÿ½Âë)¥G1ÆG)Å8ñÞ˺žFÈ(féÏÎ΀+ËòNžçŸÑJ}x2™<4ÆŒ¬s[÷OZïÛ¶ýMŒñ—UU½ -ËR¬µŽˆÆ€œTÕ4üÇ6ñ™FK°Üh4ÚUJ µÖ)Ƨ!„Ó¦m§zóÆxÕ”=Û*Þøìû—Dz¿Q×ý9þ wü3–ø {tIEND®B`‚Carla-2.4.2/resources/bitmaps/dial_04d.png000066400000000000000000000026451420416754300203150ustar00rootroot00000000000000‰PNG  IHDRr ß” pHYs.#.#x¥?vtIMEÜ)Ù—íDIDATHÇÅ–ËoåHÆ¿S/Û×÷‘Ww‡4ô$‘èfj$^â11b ˆH,æÏa‹Ä‚-b +6£ƒix 5B$­4ø&εˮªsXÜÇdznB`ƒ¥’]¶ëüüGùþ‹cssCÐP‹3WÕTnbƒnQrc"uÛZ{?¥ô4¥8µÖí3§¤”Žˆ”Ẫ¦ñ.@%€]ç²—­µͲì"¢ceŒÙÑZm4Mû;"â®ëÞŒ1þ–9ý@}•jZ"íZë^)ŠâKƒAqß¹ìýZ롈œјˆ@˜¹‘²išŸÅÕÙÙÙ· ü$¥ø ÝJá"nι/oll|u0<4Mƒ½½=¼ôâ‹Èó)%,]šRBb^¹wX–ØÞÞÆiU!„€,Ë cÌíBè]yí½‡ZtZ›F£¯Eqš¦ÁÁþ>ö÷SBß÷H)ÍÕ­)%R8<<„ÑÞ{Xk7'“ñW”ÒP`Q¸hìœûBY–ŸRJé¶m±³³ƒ÷íí!„€ÂzК€îÞ½‹#˜Îewʲü:@·@ÍÝ)k퇔R`fô}ÃÄV ߥfÂKפnߺï=ˆeY¾LD‡››FÍkNíeYö€ˆtç=ž»wD4‡‰\鯫 3Š¢XÍ­µ»ÖÚO(C¥Ô¡µö9A¶··çÉqãë/ç£Ñ!€5æ!€‘YïQ&"H)ÁZ»Jeê/ÇårXÍ×ÜcdY†úâz¾9ì( GDC`f­±ßÔøºw˜XÔ¬ˆ€ˆ €œÀ"– h‘8iiäƯÊ"kÏ"1Zf>]|ú¾_eæuƯƒ‰8%Ä”@DKÍtÀŒ™ÿ–R Zk«”‚÷Zë•;®5~01£ë:¨wBô/@f @#ÂíºîXlÀ'''ï-‡uYyÕγ¸_×5Œ1H)u1Æ_¨€à¸mÛŸ'fcp||¼rëµ¥qÍ6×÷=ôB÷þí”âO4Ú{¢È³°µöóι‘ðm‹AY^ë¶u%³Œ}5"Ë2„ªº®¿ËÌ?®ªi£À{Ÿò<›¥Ä[ι‡Æ{Q× ¢&sν§×@/ÃN«*j­•R u]ÿ¤ëü·yïyõ.мK‰ŸŠÈ€[³¦yýôôô kÌ Ë²;¼¶®âRýøñãΚæ-cÌa×u¿÷Þ_„߬ªió®?¾÷>E^§Äuß÷èºî;MÓ¼ÖyÿÏúâ¢+ò|—€3/ÒþRŒCÓ4o}Ó{ÿ½Âë)¥G1ÆG)Å8ñÞ˺žFÈ(féÏÎ΀+ËòNžçŸÑJ}x2™<4ÆŒ¬s[÷OZïÛ¶ýMŒñ—UU½ -ËR¬µŽˆÆ€œTÕ4üÇ6ñ™FK°Üh4ÚUJ µÖ)Ƨ!„Ó¦m§zóÆxÕ”=Û*Þøìû—Dz¿Q×ý9þ wü3–ø {tIEND®B`‚Carla-2.4.2/resources/bitmaps/dial_06.png000066400000000000000000000017531420416754300201520ustar00rootroot00000000000000‰PNG  IHDRžÉU¤žPLTE@@@66655?TTr‡‡»  ßee‹££àŠŠ¾XXu888???225OOk’’̯¯ö°°÷±±÷hh’jj’µµú··û¸¸üœœÔQQk115339ggŽªªî®®öhh‘ii’´´ù··ü¹¹ýµµöii++1447hh®®ô®®õ­­õ¬¬ôff‘³³ù´´ú¶¶ûººý»»ýkk‘!333777PPlªªï««óªªó««ôff²²ø»»þ··øJJd[[f••Ñeegg‘±±ø¼¼ÿžžÖ..9\\zeeSSo††º‹‹½§§â««í²²ò²²÷Ç^^„Ⱥºþ¹¹û¬¬í²²ñ¢¢ßˆˆ¹ˆˆ¸YYvQQm44=Õ (SSmIIc==@kkeeˆQQQÝÝÝ“oo”¶¶÷iiŽ===ãããÿÿÿÕÕÕ::>SSnœœÓ››ÒKKe<<YQä:£ú5.¬oh„¦æŸÒõp+á1M”"míÐÙEÊu½›ˆš*žˆ ž^è£x%…z?¥U†ÅŠ`ð‚Lš”ÃÐ0Œ˜/‡C!Å~ `Á¨A“¼,˾±ñ •Ѹ8Bh¦ƒ¦HeâïZhfA5Lš6 S§xw–eü‚ŠM´VšƒyNÔ4§áKQ%NYVä8)nãâ4-{RªÀ·!ïÊ*ÀÚz0be nlnÁöÎîÞ>úmÿÀ}xÇɓӳóŸÃÈÅåÕõÍ-$ïî!×ñðøôŒbO/‰×·÷ÛÏ/Ýe[LXIEND®B`‚Carla-2.4.2/resources/bitmaps/dial_06d.png000066400000000000000000000017531420416754300203160ustar00rootroot00000000000000‰PNG  IHDRžÉU¤žPLTE@@@66655?TTr‡‡»  ßee‹££àŠŠ¾XXu888???225OOk’’̯¯ö°°÷±±÷hh’jj’µµú··û¸¸üœœÔQQk115339ggŽªªî®®öhh‘ii’´´ù··ü¹¹ýµµöii++1447hh®®ô®®õ­­õ¬¬ôff‘³³ù´´ú¶¶ûººý»»ýkk‘!333777PPlªªï««óªªó««ôff²²ø»»þ··øJJd[[f••Ñeegg‘±±ø¼¼ÿžžÖ..9\\zeeSSo††º‹‹½§§â««í²²ò²²÷Ç^^„Ⱥºþ¹¹û¬¬í²²ñ¢¢ßˆˆ¹ˆˆ¸YYvQQm44=Õ (SSmIIc==@kkeeˆQQQÝÝÝ“oo”¶¶÷iiŽ===ãããÿÿÿÕÕÕ::>SSnœœÓ››ÒKKe<<YQä:£ú5.¬oh„¦æŸÒõp+á1M”"míÐÙEÊu½›ˆš*žˆ ž^è£x%…z?¥U†ÅŠ`ð‚Lš”ÃÐ0Œ˜/‡C!Å~ `Á¨A“¼,˾±ñ •Ѹ8Bh¦ƒ¦HeâïZhfA5Lš6 S§xw–eü‚ŠM´VšƒyNÔ4§áKQ%NYVä8)nãâ4-{RªÀ·!ïÊ*ÀÚz0be nlnÁöÎîÞ>úmÿÀ}xÇɓӳóŸÃÈÅåÕõÍ-$ïî!×ñðøôŒbO/‰×·÷ÛÏ/Ýe[LXIEND®B`‚Carla-2.4.2/resources/bitmaps/dial_07.png000066400000000000000000000276741420416754300201650ustar00rootroot00000000000000‰PNG  IHDR ((nQàé pHYs  šœtIMEÞ+ vz\Ý/[IDATxÚíÝyXÕeÞ?ð÷w?+ ⎠jà†¹W.Y–[©3MciËdÛôØê´ØŒYÙc5•3Õ´h-Nõkq”JÓ,S+ÉÐ20,\@8çp¾Ûïä$íéúè£>úè£>úè£>úè;É|Ê÷\7|>ß-¶mû-Ëš+)JW7hlÓãóŠÅ4áè:TË‚+ËPmŠã@±mH® È2×¥iÐM–®ÃV¦…¨®Ã5Í^_îÞ=.!!á™Aƒ™™ùAII‰ýcG}ôÑG}ôÑG}ôÑG}ÿ~_b›®î…·A.Z Ûë¥ïx}%¾`. eísôˆïý•p ΆúA!Üšýô¯ï½ÿ·U¨ÅïBÙ½ƒ¾_³¯´Êg[ •}B߉øêqIPV>K}Çëû¢Ö¨ ¡¿ô¬²"úNÄ7ü<ØÝÂø‹ÔÒw¼¾WEtâÕpK‹z}¹s}ôÑG}ôÑG}ôÑG}ôý"¾ïlñnµm;Fï’dŽßÇë… ÁUغ_8ŒŽ:aìi§!++ ²,CÓ4D"ÔÔÔ ªª k׬Åîýû`EMÔ{=Ð, ²ã Á0 G£Ð£Q¸Žƒ.]ºœÑ«W¯ÞO?ýô}?%zôÑG}ôÑG}ôÑG}ô}‡O7à:}'â›1Îy×A}ì&¸+¥ïD|™]`˜ ߬^è˜Oßñú朎Ž={clV²2ÚÒG}ôÑw2ùÞ^ÝÁtX»?E½YOßñúŽÔ ~á›ÐÖ,‡ü÷ëè;ßÞR4̸úŠû¡?u+}'â{æN¸Ñúè£>úè£>úè£>ú~‚ï[Šñññ³LÓLŽF£aÀ ÖÖÂòûá* |¡ÆŸuÆŸuêëëáõzá÷û‘””ŸÏ×ì^555øøã±yóf¬*,DÔ¶Qïñ@q]x"{<ÐÃÈ–‰ŽîÒ¥Kêßþö·¥?<úè£>úè£>úè£>ú¾Ã×÷ Ø×.†zã™°êÐw¼¾¹çÀú¯Çá¶ï ßÅ=1~ÈúŽ×÷Ǿ!è£>úè£>úNÌ·i+¢fõfˆ¾ãõZ¡~á[PÊŠá¹i4šJßñú¼á[Ÿ‡þÀlÈ[ߢ>úè£>úè£>úè£ïG|ÍZ<'%%îºnN8¾URŠÇ0àê:´pÛ¶ÅC‹!=- uuu$ Š¢@UUx<†Ñ èñx””„=z §kWD#Tî)‡µöxàJTÛ\{¾üjJN·nK†ž¾qãÆ²ï }ôÑG}ôÑG}ôÑ÷+õ[)p,úNÄ—ÙΨßÁ=õhkžCÇÄxúŽÇWp6´G®Eǯ>ÄC×Ì¢ïD|—OGzbüI᫪ª‚$Iðù|Bú$I¿þõ/´oßÁ`PHŸmÛxà0räH!}Š¢`ÿþýX¸p!Î:ë,!}ªªbÆ X²d N;í4!}O?ý4>øàäçç é3 7ß|3,ËB§N„ôÀ•W^‰nݺ¡M›6Bú\×Åœ9s0zôh¤¦¦ 瀺º:¼üòË9r¤>hhh€$I8p >Qóã;}í2=\C߉ø*¾BåºW üë)„Í0}ÇëÛòÂ7.il}öþëÀžôˆ¯f?ö”–ÐG}ôÑG}ôÑG}¿r_¬@1##à ࢺºº¾’¢äX ]J$G×qzAn¸öZ8p–eh|¡ª h¼^o3 eYˆF£°m‰‰‰èÑ£d×Eé®]ˆÊ2ŒHŽ¢ êñB5£ê¶OŠk 0àã7ZÇÞ‹>úè£>úè£>úèû•úZ¥äX~Y3 ­ƒ£iô¯òK(//†ÓwN—ªpìßÓw¼¾úÏqÃø8pàjkk¡iš°¾ššlܸíÚµÒgY¶lÙ‚wÞy¹¹¹Búàµ×^ÃÞ½{Ñ£G!}®ëbõêÕÐ4 ;wÒ§ë:^xáäçç£M›6ÂùEaxê©§0cÆ H’$œOUU„B!lݺãÆÒg¶oß±EÑ|^¯+V¬ÀÀ‘‘‘!¤Ïu],X°—\r dYÎ_|ñ–-[†©S§ 逷Þz 6lÀ°aÄôˆôæåå é³, ‹-‘#G——'¤/âå—_F·nÝ——'¤Ï¶mx<ôéÓGX_lýí/Cé¶è;ß—_!:d2ŒE—ÁÙú&}Çë»ÿr8í{ zÍb¨kþWÝöÁfúè£>úè£>úè£ïWì“›næºîïÂápëºc!Ë€ãÀòzá& Š™¿ÿ=ªªªà8Žy,Ë‚eYÍ®7 Ó4aYlÛLœ8çMœˆË‚¥iˆ$×dŠ$_ºfÍšÒ`08õ›÷¢>úè£>úè£>a}ªJ߉ø‚­€ƒû`]x;œ«Ów"¾!1é幘9z(ªªª …„ömÚ´ %%%ÂúlÛÆ}÷݇’’!}Žã@×u¬Zµ %%%Bú [·nؼy3ªªª„ôÀ Aƒ°nÝ:˜¦)¤Ïu]ôêÕ [¶lÖgY:wîŒââba}†a@×u‘×ß±¾Ã‡#>>^X_UU<€>ضmz÷î-¬Ö­[‡‚‚a}Žãà•W^ÁèÑ£…ôÀ¾}ûðæ›o¢OŸ>BúLÓÄÖ­[±|ùr†!¤Ï²,aΜ9ðûýBúlÛFqq1>üðCa} ˲оØú+胄«ÁúämúNÄ7d"¢Ü ©¦ðÇÓw"¾`"}ôÑG}ôÑG}ô ïS ++«•¢(c>|©«ëÛï‡ Ar]tÊÈÀuW_P(Û¶áº.\×mQUº®# 6ÃG"‘o½¸¯( ²³³ ‡±«´°mèf ^4 8\S=èÔSOÝ4jÔ¨’7ß|3B}ôÑG}ôÑG}BûúŽ Ø7-Vü>¤êýô瑱=|-¤#ÑéÀg¸îüñ'…ï½÷ÞCRREË7eB¡ÊÊʰhÑ"äååÁãñç³mµµµxüñÇqÊ)§Àçó 瀔”<óÌ3(((€ªªBùÜ£Ÿjôù|Xµj  išP>÷èÉzGŽAYYrss…ó@0ÄæÍ›‘’’‚¶mÛ ç€øøx<ûì³?~|¬ðJ$Ô××c×®]ÍÚ‹äSUEEEèÞ½;ÒÒÒ„ô5µóž6mš>]×±sçN'(Šè ƒxê©§0yòd!}Ÿ}övî܉³Ï>[H<ÿüóèÑ£:tè ¤Ï4M,X°³gφ¢(Âù`Ó¦M(**Âyç'¤Ïu]<öØcÈÊÊ€„ô…ÃaÜvÛm˜4iºté"œ/‰àÈ‘#˜;w.fÏžÔÔTá|¦ibß¾}¸õÖ[qÆg --M8Ÿã8¨©©Áu×]‡Þ½{£OŸ>Âù cãÆ6l"õuÂùšåÇÉàûlPù%ôE— ÁŠÐw¼¾W£áêÅЪ¾ÄáO?¢>úè£>úè£>a}òÑ0µ¶¶ö€6®ª6›M–qÏwÆÞàðx<Ð4 ²,7ƒX–Ó4›Á›*+›ÞÔ9vx<Œ?޶<ûüpdŽ¢B–”ìU«V•)Š2é˜ÐG}ôÑG}ôÑGŸ˜¾®}á´ÏEôÁw öÛ“ÆW__/–oÑZh•_âžI# iŠŠŠðì³ÏB–e!}𦡤¤>ø Âá°p>]×ѹsgŒ9ýë_c')Šäóx<èÑ£N;í4<ñİ,K8Ÿ¦ièÖ­ºu놗^zIHŸ,Ë0`LÓÄöíÛ…ôÀˆ#P^^Ó4…ôÀ˜1cຮ°¾¸¸8̘1ÑhTHŸëºèÛ·/&L˜ ¬Ï²,Üpà ÈÍÍÖ—˜˜ˆ—_~YXŸiš˜5k.¹äa}®ëâ•W^Azzº°¾^½zaáÂ…Âúàâ‹/ƈ#„õ¹®‹o¼@@H_Ó˜6mš°>Ó4QZZŠñãÇ é³, 7n„mÛ9r¤>˲ðøã#??¿Ùï‘|ápwÝuÎ=÷\ôìÙS8_Ó‡–æÎ‹ & }ûöÂù ¶¶úÓŸP\\ Ã0„ó€mÛX¼x1ŠŠŠ„ô5P(ÔèsB^ö„ C(_lý ¾ýeß]'»œ.ýè£>úè£>úè£Oh_Sbr$9×UUHŒ#G F£˜0v,222žžŽÄÄDø|>†MÓ IR3 mÛÍ0MÇ;~óEY–¡ª*RRR0|øpÄ{<Ð- q % ®ªà‹/¾øƒÇã @úè£>ú裾“Ó×%Ò¨0L‡¾_«¯þ0ŒÙPW? i:222 I¾üòKa}mÚ´ÁÝwßgžy„ó¥§§cäÈ‘p÷Þ{/B¡p¾¤¤$Ìž=ýúõÃÂ… cí8Eñ5åÇÙgŸœœ<ýôÓBú ÃÀ¸qãòòr!}š¦a„ ÈÎÎÖ§( fÏžœœ!}’$!11W\qEÌ&šzõê…N: ës]½{÷†,ËÂú<Z·n-¬Ï²,øýþØ5}"¯?úþ}>UU‘ ¬ÒÓÓáóù„õ麎Áƒ ë€ÜÜ\ôïß_XŸeY˜7o’’’„ô™¦‰>}úàöÛooö†‰H>˲ХK\xá…Âú¾øâ ¤¤¤`âĉBú\×Å¢E‹Ð«W/œyæ™Búªªªpýõ×£  ³gφ¦iBù ¦¦7Þx#LÓDÿþý…ó@$ÁâÅ‹qÛm·¡uëÖÂùšò£¸¸®ë ëk–;Þ^¸q—çA~éú~­¾ë†CÛ%>úè£>úè£ï¤ö)={öÌt]·gMMÍ ÛçƒåñÀÖuø$ wþéOh×®4MC €ªªp'vdcÈu]hš†øøx¨ª ×u …F›áE‰Uc꺎öíÛcÿÞ½()û!Ý@T–!I ]øì¤I“ªËÊÊâè£>úè£>úNZßsaM¿öø?Àwäî¼`}ÿß<×uÑ¥K¸®Ûò¾Ó ßšÿÁ“Ï@»víP^^Ž¿üå/عs'ºwï¯×+”O×uœuÖYX³f ž}öYtéÒ‰‰‰Âø4MC\\ °ÿ~,_¾#FŒhvbNKûšò£S§N8räâââ'œÏqôèÑiiiðûýBú\×E~~~¬e€h>Çq ªj³v°¢ù€ÆÖ "ûDÚ_è£>ú裾“Ãgš&<°¾h4ŠöíÛCÓ4a}III2d$IÒÙÙÙ9r$TUÒW^^¿ßóÏ?_HŸmÛ¸þúë1xð`\zé¥ðz½Bùà³Ï>Ãí·ßŽÄÄDÜyçBù ªª =ôÞxã 4ýúõʧ( TUÅÆ±víZLž<ûw}Ž’GÈjÂ÷­ü ïÄ}ÕµݸÑ~c? ÿA!}ôÑG}ôÑGßIëSÒÒÒ&WWW+ cdË‚rôM¿œvíðÛiÓEQ ( <ÆÂK˲à8N¬/µ$IhÕª4MƒmÛ¨««‹ýC$IjvL¤×ëUb:t[?Ú Ëqd(ª ײžÉéÞ½Û¦M›:ÒG}ôÑG}-èƒŶè;^ßg›¡ìú0|È©(ÆoG‡$I/z†¾úúzŒ?Žã gÏž±5Dñ5Íï£>Šçž{:t@ûöíaÛ¶0¾´´4L›6 {÷îÅ‚ 0bÄa|Š¢Àçóa̘1ƒ¨««CVV–P>EQàõz1`ÀäååÁ0 á|MùÛµkWƒAa}àóù„ö‰¶¿ÐG}ôÑG}ôÑG}¿Œ¯éº¨¾Ö­[£wïÞÂúEÁСC1hÐ !}’$¡¸¸ùùù˜9s&âââ„óíÙ³sæÌÁˆ#0oÞúè£>úèkAŸ¬iZëp8ÜÑ•eDââ`jdÇÁÈ!C––Ö¬âÑëõ"..íÚµCvv6ZµjÃ0 ILÓDCC ¡¡!V])Ë2 ÀßïG0„Ïç‹ÝÓï÷cÈ!HŠ‹ƒ ,I¨€ È JËÊr ÃH >úè£>úZЗ’…Èóû`þùUÈ“çœ4¾’’8p@ ßSŸÂ/½ôî¸ãlÙ²E8_Ó½®¹æ¬^½C‡Î×”Ó¦MÃE]$¬/..§œrŠÐ>×}ôÑG}ôÑG}ôÑG}ÿ¾ŒŒ ¡}ãÇÇ9çœ#¬¯{÷îX¶lfÍšŸÏ'œÏï÷£¨¨ÿõ_ÿ…'žxƒ ηbÅ \pÁ(//Ç‚ о}{¡|º®cãÆ¸õÖ[1vìXlÚ´I(ß±ù[UU…½{÷6ú*K .ü=ÂlŠÐa!|Íòãdð}õ)£g â¯›€”,úè£>ú裯}ª¦i²mÛ¹e(ŽG–áèÞ½{¬E”$Ie®ë6;f? ¢¼¼{öìA$A8F«V­ …bßëóùbGÊ«ª ]סidY†,ËèÔ©zõê…]ëÖÁ`È2$YAÔ4¨ªú&}ôÑG}ôÑׂ¾`+(Ÿm†Ó¶3+ŠîþR¨ªŠ¥K—">>=zô@vv¶p¾7Þx?þ8EÁÀqíµ×";;[ß”)Spúé§cåÊ•X¶lêêê0eÊa|——‡¼¼<ÔÖÖbÿþý±óDñ5åÇÈ‘#1|øpض Ã0„󹮋¬¬,¡}¢å/}ôÑG}ôÑG}ôÑG}ôÑGß/éKLLÚwçw í7nfÍš…„„!}¯¼ò qÖYgáî»ïFbb"\ׯW^^ŽÇ{ [¶lã8˜1c.»ì2a|ªªBUUìÝ»;vì@}}=¦N*”ï{ó£sœ”v0J?‚HDô`}ôÑG}ôÑ×B>U×uÙqœÎe(Ñ(T×…ŒÆ`ß’$ÅŽ{Ô4 †a  11;vì@mm-¢Ñ(,Ë‚ßïG\\\ìÍlUU¡(J¬¥á±¬¬,øªªBRH²×qz躾†>úè£>úNÈ×%J—|¨‡« —ï=vM$_ÓƒƒÂúZ4é£>úè£>úè£>úè£>úè£ï?Ü׺uk¡}3fÌÀE]$¬Ï¶m`Μ9èØ±£p¾ŠŠ œ~úéHMMENNòóóa†0>Û¶ñÚk¯¡²²…B¸ï¾û}ó§A•¥FŸªÂ5 ±òWtß3wBÍì ©U $Ãoÿ£>úè£ï¤ò©ªª*®ë&Ûª Óãx, ^¯?4$IŠ}b¢]»vHIIÁŽ; i:wî ¿ßßø’£ˆ¦ç|×}RSS•evÀq¬(JRÃ0è£>úè;É}Ñh¡P -ãë=æïïhôýóþ˜oÊ”)p]7v¿çŸ>ö3Eð <•••سgŠ‹‹1a¡â÷‡?ü¡Ùkš&”¯itìØ;vl¹üø_‹ç/}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}-æËÊÊÂÅ_,¬/;;;v쀮ëBú,˺uëкukdff"%%Š¢4ú‡!·¨Ïu]œwÞyÍîñ /ã“$ ‡еél6¿ãqøÜ+É/þ7‚{>+é£>úè;¹|º®; š&ä£}£uUC4mV¸ öõ±Ú¶h4Šºº:(Š‚Ý»w£ÿþð-Vù)C’$xq†]×á9Zm©ª*è£>úè;ÆçõÇ|@yy9öîÝ‹òòr\|ñÅeY_NNjkk~¿Û·ooßúw~Ðè««FtÐÕp]³gÏn6¿®ëÂqa|M‰Ç®;ûhœEð;TU.~ÇŽÍ_úè£>úè£>úè£>úè£>úè£>úè;‰}†aëÓu‹/Ö4v|ÕgÛ6ú÷ïúúzH’„`0ˆO?ý´ÑW¸q;ßoôUïiŸeYøÇ?þ¶mÛ¢mÛ¶ÈÈÈ@rr²0¾ï’$ÁóösôÑG}ôãSu]·eY®0%ÃôxàJlÓÄž={`Ûv¬hãØâˆ&TCC"‘êêê …`jkkQXXˆÜÜ\´mÛªªÆ R¾oÔÔÔ ¢(8lšÐ©>â £B×uÐG}¿~Ÿã8رcRSS …ñ}ðÁغu+Š‹‹Q\\ŒGyéé鿼oÐ9æooÛª ìõ+b¾‰'BÓ4¤§§###‡‚ÇãÆ÷î»ïÂãñ@UU€iš-³þ:öùNß AƒšåG$Ê'LþÒG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑw\¾aÆ ëSŸþ9€ÆnYápøkßÁr®ÞMQ}qq¿¸/‰`÷îÝxçw°gϞ؉™¢øvïÞ™3g¢gÏžèÙ³'úôéƒüüüFß™³p¸`<´Ú*¤¾¾ñ¡ê_ÜWSSƒ½{÷¢{÷îÍN;Å÷ƒùK}ôýê|ª¦i–,ËŸÂu3@¶,H–…²²2˜¦«’lB™¦ ˲`Û6"‘B¡LÓ„$Iðù|¨¬¬ÄÖ­[QYY‰N:ÅŽ{”eù[X×uñÕW_A + lI‚¦ªðz½ŸéºîÐGßÉ䫪ª‚ßïÎWVV†_|íÛ·ÇСC…ñ­_¿+V¬Àúõë¡( æÏŸ^½z ã{î¹ç`Û6rss1eÊx½^TWWÿò¾†P£ïãuvmCYØ…išX½zu³õ×ÔJYŸ×ë…mÛ‡Ã-›¿ßãf¡>úè£>úè£>úè£>úè£>úè£>ú裾ô-nÊçóù0þ|aã—––†ûï¿[·nÅÖ­[ñùçŸ#//¯Ñ'9“ÚÀNïÍŽ¶ˆoûöí¸âŠ+`š&FŒ)S¦`èÐ¡ÂøV®\‰’’Lš4 YYYÍçWß‘#G˜˜øÝëOßî/ôÑ' OÕuÝÖ4m³ ®¹.U…£ëx}åJ\xá…ðx<°, –eh¬ lªœŒF£±vŽG‹D @UULÓÄÞ½{Q__¬¬,¤¤¤@Ó4(ŠEQb½©+++ñÉ'Ÿ A’TU$ø}håó£uëÖ*ŠâÐ÷ËúšNkhhÎW]]_|S§NÊFQXXˆ¥K—¢uëÖ˜7ož0ó[RR‚ùóçcÏž=8ãŒ3PPP€P(ôËû"‘ÓµŒprÃ9e^ø2\xá…Ø·o:t耩S§¢C‡°m[(ßõ×_ß,?,Ëj™üݲút­îp£oÈ„˜O˜ý…>úè£>úè£>úè£>úè£>úè£>úè£>úè£ï?Ì×¹sgäää`Ú´iÍ}ûß@pÝò¯}¿¸///›6mBii)Ö®]‹êêj¡|ذaÆŽ‹víÚáÏþ3Ú¶m‹Ov|І— ¸sÖ/C«½Ÿ¢uzú/î»úê«QQQ+®¸ãƃ¢(ñÀ—œœŒG}¿ùÍoššÚU×õš6mÚìßµk¢>\Y†äº¨¨¬Ä† pê©§6ƒ[EÙtì£$I0 ²,Ã0 hš†††X–…Çc×®]8tè222¾UM¹cÇTVWÃ’$T54àˆe!9.ýû÷ߩ뺤ëºùs}¡P’$ éûꫯPRR‚¼¼<á|~ø!,X€™3g¢OŸ>ÂøÂá0–.]ŠåË—cذa¨©©¢(Bøòóó1}út$''cúôéèׯêëë…ÉÎ;cÖ¬YèÛ·/LÓD4mß_ zó3p“Ò ªD…k`Æ >|xlý…B¡–Û_¾Ç'ÌþG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}?Ó—‹.º²,cÆ Bùn¹åÌ;ï¾û.’““ã'û`eæ ªÇ`9rÉ ÎmßÝwß7â‰'žÀüùóQXX(Œ¯¢¢eee6lfΜ‰K.¹@@_aa!–,Y‚{î¹}ûömžøV¯^¢sçÎßÎ_|@ûöí¿{À÷ƒûßøT]×ßÊÏÏUZZ 5†lÛpeQUÅ–-[пÿ¨éÏ­[·BÓ4äääEaMÓ ë:¢Ñ(\×…eY¨¯¯‡ã8‡ÃhÓ¦ ’’’ i$IÂ;## HñxôùU…¢(8í´Óâ ÃxA×u÷çøŠŠŠ°páB,Z´Á`P(ߺuëpÿý÷ãüóÏÇ)§œ‚¦ÑÒ¾C‡áá‡ÆæÍ›qùå—£wïÞ±Å'‚ïž{îA}}=xत¤À¶í–ó¹.ܼ3mÛ)æ[¸p!Z·n+´mÇŽ–öõîÝáp¸Ùñ¬-â[|äªr¸ )ˆöó½û }ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑ÷Ÿá+((øÚ÷ågH¹ª‚= €6ÙPd¹Å|¹¹¹xòÉ'QYY Y–…òM:“'OÆ’%KpÛm·aþüù¾žÃòÔÍZ! %«E|íÛ·ÇùçŸ+®¸C‡Å-·Ü‚`0(Œo×®]X´hnºé&œ{î¹Íó£…}¸úê«qíµ×bĈßÎßöAQôë×ï»÷—ð©>úè—W]uUœ"+¯;Ñè™ÑøøØ)l¯¯\‰SN9¹¹¹1ØG}„{ï½sæÌÐX=©i4Mk† …B±B2˲‰Dàº.ÊËËQ[[‹ÔÔTìܹ« Q/I¨mh@µmã”ÌL´jÕjM\\œ/''g7üTß+¯¼‚¥K—âúë¯'Šâ{üñDZvíZÌ;]ºt‰M®¾¤¤$H’„|^¯·ÙâÁ7{öl8Žë…Þb>«3£‹ÖÂm“ ©î^ŸÕ36¿ °m;vä©h¾¦ümQ_ñ»ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}?ì+z§TïF«¤$!|›7oÎçñxpå•W"99¹Ñ÷özÔÿå-ÔúãQ]½§ücv‹Ío×®]1þ|üóŸÿÄîÝ»‡…ñ <ÙÙÙ¸ï¾û°uëVÜpà ëOŸÇãÁï~÷;Üu×](++ÃäÉ“¿Î|‘HO<ñ®¸â äçç7Ïßñ© iڑ̬̿íÚõÅ™’mCnh€lFqXQ±zõj´mÛ>Ÿ7nÄ_ÿúWÌ;·Ù鉚¦A–åØ×ªªBÓ´X1™ëº0M3öwÛ¶qðàA¬Zµ {kjîõÂRDlMÇgœñ¬ªªZS~Н²²Ï>û,æÍ›‡Ž;Æ(НgÏž8÷Üsá÷û›Mp‹ùRq8V¯^3fà’K.iv*¡H¾¦õ'„oo)ä·þòû¯áð ‰ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑײ¾Š}H¿ù4Xg]†HûÞðÔÕàŒI[̧ë:¦OŸŽÚÚZá|¸ýöÛQ^^ŽíÛ·7úzFúÃê7¦E}:uÂ5×\ƒ‡~:uBff¦0¾®]»âÒK/ÅÃ?Œ™3gbÀ€_¯¿ñÉG+&MšÔN’P¦90ƒq°|>¬÷]¼úê«°mÀ 7Ü+N”$)†9¬ª*TU…$I±ëM“F‡ñÑGá͵kqÀžpŠ¢ wf&¼>ïÞ³Ï>;Ý0ŒeÇðG}™™™xä‘Gš'ŠäËÍÍýVqb‹øêêóo„ùX¬ËbýÎ/cóûÍAßwøn>d˜ ߤ>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>1|•{¡¬¸½—ΡïG|š¦¡S§N¾âR¹àì¹~EEïÿ¹±E}ééé¸ãŽ;œœ,œ¯C‡˜9s&***¾žßŸà“`Á‚5º®×÷èÑã*¸.E†dÛÐêjÑ4¼¾z5 1fÌäææ6Ã4ŽM•Š¢4»îº.PZZŠ^z 5–…ì`¼ºŽ¨ã@×uœwÞy÷êº^‘™™YÝô¼ïõE¹ò!¼¾­………Í%¢Ï²¬–÷ÙœÌ.¾Ú íº‘ˆL»‘>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£ï?Ï·ï d/8Þª¯Më]UZÜ'˲°¾Î;ãÔSOmômú5ç\…ìÿþÝúä¦'ƒÁåS§Ní`;ÎßÕºz¨uu°}~غŽZÓÄŠþ¯¿þ:êëë PUõ[¦ ÊoVQš¦Ùˆ[±Õ¡ê• äfd gf&ÒÓÓ_;vlŠã8Oâã[>-ûžBØg\€Úü1ôýߢˡÞqìÙÐG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôýçú>ÿ¹›…žÿz¾Ÿãëuê‡LAåÔ¹È}îÖïõÅî¼jÕ*k̘1¾Áƒï^÷öº ²ª¨¶× ½¡†i±mìÚµ ÕÕÕÐuiiiÐ4 †a@U›WPF£QD"ض ˲`Û6:„mÛ¶aõªUˆF£H  ë:74 mb"‚Áè} >éñx6·iÓæÓoð[¾ŒÎª=ùZèÏÝ ãÙ{èû9¾ÂÕäôôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ô%Ä#ÁÐèû9¾¯¶A×4î9 m?{ áêïôIß„>òÈ#¾ÿþûûž{î¹U’ªB + Y†$K%qqq(((@×®]ѽ{wdee5«”¬­­Euu5öìÙƒ ¢¢6lÀ¡C‡`è¼>/|>|~\IFœß›nºéªnݺ™‰‰‰ÃŒf¾´öP|E}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôýÒ¾ä,Ä…k¾×'}òÉ'Ÿœ³|ùò-ï¾ûî[²¢@–eÈ’ E‘!ËRìi>Ÿ èÖ­ !IB¡ª««ñù矣¦¦µµµÐ4†á×Ûˆóz½Ð4 º®ã’Ë.»|èàÁéñññ·â' úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£Olß÷(z|>ßU7nܱdÉ’ç%I2dYŽõ–$)V1é8\×…ëºGoçøºGµ¢(±£ ½<^oìXHÃ0¢7ß|óœnݺ%¿H’ù‰¤>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úöI?}饗fÔÖÖFn¾åæÑVÔºPRd(rãCRdȲ\4â$ 5y¨i4UƒnèP5 †®CUU¤§§¿‘àÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}bú~Râ1ÐD]×Ï×4-¡¾¾¾öÕW_­û裺Õ××ç[¦•ã¸v[EÑL¡W‚ÁÏ“““?2dÈçcÇŽ øý~¯¢( ÃxF’¤êGàè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>1}?«@ñر}ûövº®R%Q’$E–eEQUUUI–eGUU[UUG–僲,¯ôz½»ÿ/‚F}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ô‰çûÿ{‡»½gú…IEND®B`‚Carla-2.4.2/resources/bitmaps/dial_07d.png000066400000000000000000000066671420416754300203300ustar00rootroot00000000000000‰PNG  IHDR((Œþ¸m pHYs  šœtIMEÞ.;Ä·= VIDATXí˜kŒ]Õy†ßuß—sÎÜ<ÏÍ£`._ µAàÈÔØaÂE PBã$U©‚Ò‹"ñ#B¸J~E 6(?šª@U‘ QRW²sn{ïµ×Zý1çìÎxL¸¤KÚ:çlí³Ö³¿ý}ïû­Mð%‡ïû}ιBˆUŒ1Á9ç„ÆsŒ1ÍKcšs~ÎZû?§NúèˬC¾àõ-Bˆ?BtRJµV[k :ç¾Bé )¥³”Ò“Bˆ·r¹Ü»…BAqÎclNký̱cÇæÿ¿}!Ä÷cÖÚŠsîf×85F)BÀâŽsPkA¬­_Æžëèèøuggg!䜵ö©C‡Õþ`@ÏóntÎítÎEÖÚ{tJaÂ1iBV*ОBD!ÈZ –R€¨8œ%t²§·ç'}}}„#£££Ïý¾õÙgÀýÀ 1æjkí=DÊœij1Öóà„c¥@ÓŽsµFˆ8ö=€0kù>¨1…r±øÍO¦§Ïöõ÷Oþñ{ï½÷Ö  ‚àþ4M­1æ'„1iƒ,Ž¡››AµÕi@U*ÐJA$ @êÓ9‡´~.ò}¨8†á)c+U$‚C& ˆsñ•W^ùížžžK‹Åâ? Ç‚ð‹Ñår¹û1‰1æ!B)lÀú>¨s`q #%<­±®»CÛ·£¿¿”R!Eæçç1;;‹ž§Ï~ŒÔXÄ’Bh”3h)AÈ$Qo¼ñÆÞr¹¼cÓ¦Mà‘ÏŒ`SSÓ´ÖíI’üJÁärà¥Ò0„c AµŠÛn¹·Ýr *• |ßG†hkkCËæšŸŸÇÛo¿#GŽ`äÀ$Æ ây`ÎÁ‹#Ô<²¦×l¹æë—]vYç£>úëOÍÁ¶¶¶sWÔjµŸÆƒU NJˆZ —ôôàW¿ü%ºW¯F¹\^¬XÆÀ9‡çyPJ]˜ÃhkkÃúõëqÅå—#‰"ÌLM‚%)jžG¸1€³˜úð£?»bݺ'·mÛÖ}øðቀ½½½>€{ÊåòÕ„±+ÒææÅGE°RâÆk¯Åý÷݇O>ùišÖSÍe€J)ø¾¿ 0MS$Ic Z[[±~ýzPçpj| ¥PQËÏ× ?vüÒ5[¶Ð-[¶¼}øðát`>Ÿÿ«J¥"Ò4½ŒÁ [×µÛ·mÃ÷wí¹sç`ŒYž#„€sß÷W<â8Ž‘$IvCRJ\~ùåPBàƒwÞA-æ#µÜ0«ËåÒ?oذaË‹/¾ø&Pèïïoáœ÷Åqü·NJ¤¹Dµ EXÛÓƒïîÚ…(Š@)¥t„1Æ$I²ì¼sišÂç\v^;wâÆíÛ¡¬…ˆc¨xQ7¡NŸúçÜ衇Z2@ÎùÝ¥Ré<€.ÇùbØ Jñ?û„RÂó<!–A6@´ÖË@Ò4Í/žçá¶ÛnÖ¯~Ô9Ô‚–RXÆA ™`ŒÝ±°=Š¢o:ÎA¨…ð$Á·††ÐÛÛ‹îîn´¶¶"(¥ „©kÞÒH-…ÑZ#MÓeÐ@)çضmš<2MQˆcPBà8Ã|ð7žçå€nذ¡Rª­µ×Yσö}Äù<<ÆðÝï|mmmÈçóèííÅêÕ«ÑÔÔß÷¡êùya14 —þÎ*’1! ”‚çy¸á†ðµë®s%¥Pa ¥°Öݬµ>ÿØcõSÆØŽb±X#„€×jPµXšâ’þ~tuueú¾ööv  ££afÎ9Äqœ5r²=BȲyÂ0Dð}6l@($„µhrM„‚qŠƒ/¿\Bl§BˆUµZíG)¢BZPkñ§[·bõêÕYþI)áû> …Ö¬Yƒ´´´dZkÄqœUo–R ¥Â0D>ŸGÙœabëÖ­h+ÀÔÁ4@NMLlTJ5s!5Æl¥`Ö.&+€ÁÁAðºùB@)…sœól|>ÉÉILMM!Š"Ôj5´´´ Z­f×6"%¥çRʬÐ(¥X»v-6mÚ„ñ—^‚ (¡ ‰Ö[8ç¿ãRJj­½”‚% ¸s À Mk€.ÌÿåR.—Ckk+ÆÆÆP*•2Ý Ã…BafpŒ1BVýýý¬ç„1Jà¬]/¥|žsΙs®Ýpíy‹2¦+\áb°œspαfÍttt`ll B\zé¥ÃpqÁ:Dã?›§³³ ¥(Z X‹vÆ'¤K)Ź”Ò×´ž7’‹eI¾Tó.ülD¹\c §OŸÆæÍ›áÕoöó B>Ž÷ßÅb1ƒl<‰±±1ÌÌÍ!%³qŒ‹ àœcóæÍïK)ç©”ò¹«®º*tÎ-:ÉÂD¥‚„1¼þúëÐZ£Z­¢R©d¼°1`ŒeÍjC#“¦)*• fggqòäIœ={µZ-ËáW^y qŒ)qYK Z[ÁÃöíÛ›”R£ôñÇÿ°¹¹¹À(ÛO’I.‡$—ƒV û‡‡qèÐ!Äqœ]¬BdQkÀ6r­Ù(¦ÉÉILLL`aaGŽÁ訂ã§K%´ærhiiy¾P(ƒƒƒ§yý®úúûÿàÄÐ8Õ ŠŒctt===‚`…ì,m@ yB,k¹Ú(ºsçÎaddgæçÑíûHCd >Žýû÷cll œ „¹¹\]m­è[µ -ù<xàûzzzâ¶¶¶ß,Ëó‹yãž={~üôÓO¿~ðàÁç(c‹E(£ ”d ‚ÍÍÍX·nš››‘ÏçAAµZÅÜÜNž<‰ùùy”J%Á¡”—mO}ßÏ4óÞþð¯¿výõÝMMM?]QˆŸèAð£Ã‡=ùä“ÏBTÃG—öt2ËZ” À-ËÑ¥½£ïyðêû™úf?Ù½{÷×­[מËå~N‰>`cìÝ»÷/K¥R´ûïw=MÒ¿ Œ‚ÑŃ0 J(á% ‚ H%Á…€ª7¯ÝÝÝÿõàƒ¾Z(Êaþ˧1|æ Ìáááíœó?yê©§N?÷üóçú)ç‹”€RF((£Y·²4zKu±¾øx×®]Ü|óÍí^ð<ï¿ßúŸëðÁƒ}cÌ÷!MO<ñ㝽öÚ=Zë J)8c éiä-ãà|°­­õ¥¡¡oKa›ÃNIEND®B`‚Carla-2.4.2/resources/bitmaps/dial_08.png000066400000000000000000000314401420416754300201500ustar00rootroot00000000000000‰PNG  IHDR ((nQàé pHYs  šœtIMEÞ+0.Ì2¿IDATxÚíÝwtUUú?þ÷é·§‘BHB0¡'ô>€€ ¢ˆ€ è¨3Ø ¶Á:6~£¨ðA•)ŽŽåÃGl#?Ti*…ГHB å&·öý#æJT˜ïyïµîbݳrv^yö~ö ÷>Ù[À 6·ÛkÛöHEQZI’¤È², ‚ I’dK’¤K’dH’¤Ë²|Ȳ¬vîܹÿD¿}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑwrù„ãüúEQ.V%SEÛ²,ݲ¬|]lÛ>M„,º(ŠÕ¢(îPe“Ïçû*h²,k’$ÖuýõÍ›7×ü‡âF}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ô9À÷s ÝŠ¢\.IR¾eY¶mŸ ` U °;ÄíŸ! ƒ°e¢eA°,€$Iedd¼œ™™™!Â!˲æ}úé§áSàè£>úè£>úè£>úè£>ú裾ÿ„O’Y†hšºclÛÆ';:Ò šâ'¨°;ö¸k3„CôÑG}ôÑG}ôÑG}ôÑG}ôÑG_‚|?Y èr¹Î´m{¤mÛ˲® d šæ ÿÁˆAØ» ÆMOA}`"ô­+j4ЍÇ5†%Š€ @‹FÛ†(ˆemrÚü!777S„õK–,ùè_‰}ôÑG}ôÑG}ôÑG}ôÑGßqû€LÁå¡ï_ñÉ ÌNý!Ø„Âîôj>Q„éõB ˜& ¯jc#­Yøtà@Gút—«)~E§#zßkPŸ¾Vé&@” íØX&}§š¯mg@Ñ ýe‹Ð÷¯øô(DôÑG}ôÑG}ôÑG}ôÑG}ÿVŸø¸« 2M³›iš@—™æ³kawê»cXÃ.„¸§`§ç4ØBSÝ£hZ0U–$Á’$„½^¢SVVöÂç6I’ÔzìØ±¿ù‚G}ôÑG}ôÑG}ôÑG}ôÑw|¾”ŒLsÐù°½ÉôˆOQ2͔آ;©¬¬vwo¦ïTóÉ2lY†¥i¿Ý!ÑرXÓá¾xüÒsš|»6ÃÌ̇åO…% ôj¾Ý%0‡]«}/XÞd„ûŒ†H¥ïD|û#üÄJûÐG}ôÑG}ôÑG}ôÑG}ôý[}Ç*PÔ<Ï}–eeêº~R2GÙ×=!†]Ð Ö¤Û -›;ÁŸ qÓǃ‡ã7 ¶ É4I„-P º¦Á’$ˆÕ4D ãÒ•+Wþ½¦¦¦vòäÉ·=Z;ŽØÑG}ôÑG}ôÑG}ôÑGߟOs²;÷‡ Ñw">QeûýL¶?V~}'âšÞ¸òx Ø [Ñ ké;}ß" ¢Ñ0Z¼‘èx_]5¤/Wõ‡`+”ƒ{é;}dØþT(¿=¯3,_2DÓ¤ïD|n†Õ®b¤Ñ‚žˆ}'⋆½âˆxSè£>úè£>úè£>ú裾澎vÑçóÝgšf,‹="¨¬)Áºð÷ÿvìÜ0‡O†gÚ™((êŽÑyÉÈËiQ¡( "‘jjjP]]åË–cïo`Ät4º]P ¢e!ªiPc1¨±lËB‡ÎêÖ­[÷_|qöω}ôÑG}ôÑG}ôÑG}'¡O’`]õ0}'êEXúÀjW yÇØã§Òw¼>¯–Û 9‚}Z/˜YíàÙ¾ý‡Òw¼>I‚©ªð6 ºvÃè½—›Kß©æ ‡QPXˆÑgœ¼¼¼“Ó·ücì F`Ô×¢Qè;Õ|¯Ä^6ŒŠÝhì4J刻¿ ïx}õ5hœõ!”e¯B\0ÑÓz@Ý¿ ê®ô¯¯b'¢Sf@}ó ¨/ÞÛ4é;Qß+3`Ç¢ôÑG}ôÑG}ôÑG}ô¾(&%%]­ëzz,û#úœó¶¹ï=ÆíÏÁnWÏï†cìþ;¤?áv»áõz‘––ÇÓ¢¯šš|ùå—X¿~=/]Š˜i¢Ñå‚dÛpE#»\PȆŽýŒêСCæŸÿüç—,xôÑG}ôÑG}ôÑG}ô„¾ô˜]Aþr9Œÿo}ÇëÓ4˜>䆽FÁö§À³íSŒ=û,úŽÇ ÂðzaK<º‰±cÆ`쨳è;_(Ôä3†>úè£Ï¾å+3 4Ê"}'â[·1hì4Rc-\_~ˆ°¦Ñw<>_ g}iO \L@¸Ë`¨_­…Xó }Çë{êz„ï{ê“S!nüˆ>úè£>úè£>ú裾“Ü'ù$--íLÛ¶;…ÃáûЄܰF^{àyPž½ û?ÇÓ×_‚ìÔ$444@H’Y–ár¹ i-wit¹\HKKC×®]Ñ©cGÄ"T•—AŠ»\°²i¶…ò}û'uêÜù¥aÆe¯Y³fÏÑ‚G}ôÑG}ôÑG}ô¢>U“ß•¾SÕ'I|)°ÚÂn•åÃWPP¹•¾ãñI,Mƒ­ªPªÊPàSðô}Óé;_8Œ‚6mðô¬Ç‘™††TWWCx<GúAÀûï¿víÚÁï÷;Ã7g²[·ŽûLÓÄ“O>‰#F8Ò'I8€Y³fa̘1ŽôɲŒU«Vᥗ^ÂgœáHŸËå‹/¾ˆÏ>û ½{÷v¤OÓ4Ü}÷Ý0 ………ŽôÀM7Ý„Î;#++Ë‘>Û¶1mÚ4Œ5 ™™™Žó@CC,X€#F4ù  5:ÆÑh‚ `À€ŽôµÈ¶9ˆÕDÕöÍÊw",‹ô¯¯r?ªV¼é£ùŸÖ¶ê†|¨×Ów<¾  |çK°S² ¯]Ø…ò½{é;U}5P¾³”>úè£>úè£>úè;Å}ñÅœœ7€+ú)Œ¿~±j¤saõ‰3wàŽ±ÃqðàA† éªf ¦ip»Ý-€†a ‹Á4M¤¦¦¢k×®m;wíBL¡E"°$ 1—²“7o) èß_ìß¿ÿ—kÖ¬1Žì‹>úè£>úè£>úè;E}š»“1hÄŠ6,…Õw}§’O’:ÉÉÃAH5U°ZåàÌ6Üqј“ ¡(Jâ}¶ )¥ª8³_Üqõ8xð jjj°fÍ´mÛÖ‘>Ã0°aÃ|òÉ'(..v†oà@ÜqÛm-æß{ï½‡ŠŠ tíÚÕ‘>Û¶±dÉ(Š‚öíÛ;Ò§ª*Þxã ôîÝYYYŽóI’MÓðüS¦L ŽóɲŒP(„7âÜsÏu¤OÓ4lݺâŠNó¹Ýn¼ùæ›0`rrré³m3gÎÄ5×\Qç€Ý»wcÞ¼y˜úè£>úè£>úè;…}bsg¶m_‡lÛ  pè¿yÖ ¸`Á½¸jÔPTWWò,q Àa-®77]×aLÓø|>L˜0N˜€dÀ¡(ˆiÛD ’ ^»lÙ²~¿ò÷û¢>úè£>úè£>Çú|Éôý+>E¢!=a5ÖÓ÷oô…B¡ÄûD°,n7¬p-.H3qÕÅ“P]]uëÖ¡´´Ô±>Ó41{öl”––:çi¸`èP\õÛßÆçŸªªX¼x1JKKé€Î;cýúõ¨®®v¤ „+V@×uGúlÛF·nݰaÃÇú Ã@ûöíQRRâXŸ¦iPU‡r¤Ï0 ø|>ÔÕÕ9Öçäùw¤¯®®IIIŽõUWWÃårÁçó9Ò›7oF÷îÝë€+V`àÀŽõY–…wÞy£Fr¤¾ùæ|øá‡èÑ£‡#}º®cãÆxõÕW¡iš#}†a`Ó¦M˜6m¼^o“ïÜQHÞ´Fè°#|¦i¢¤¤Ÿþ¹c} Šb“o`$ß2FC=bíºCˆ…EK¸/>ÿèû÷ø†L@ì²û ÔT¾dúþŸ?•>úè£>úè£>úï ///E–åÜh4z£Ýg$Œ»^‚òìï ¿6 …û6àÒ‹&!‰@Eˆ¢Øaš&LÓD,ûþÇÙ¶¿®( Fމ3Ï8šeA‰F¡E#ˆz<€¦`ç®O˲ì~ä‘GRšï¡>úè£>úè£>ÇúZµ‘ÛÊýÐw">U…¡ˆP>_ yÏz„“Æ·aÃèºîX_yy9yä‘…. ñù|PB!È‘ Û´Á¥—\ßääd<÷Üsñb!§ù$I¤I“ðÒK/!‰8Ã÷ë_·ÈMÓpÞyçá­·ÞŠœä¯×‹~ýúáƒ>p¤²³³áóù°yófGú K—.ظqc‹Âc'ùLÓDAA¶lÙâXŸišÈÎÎÆ¾}ûës¹\¨¯¯w¬Ï©ùñ}_}}=€c}û÷ïG^^žc}ðå—_¢¸¸Ø±>]×±fÍôïßß‘>X¿~=’’’››ëHŸmÛ˜?>FŒŸÏçHŸ®ë˜;w..½ôR¸\.Çù Ã@CCæÌ™ƒë®»‚ |ç1Ü>Ó4qàÀÌœ9©©©ŽôÙ¶ššÜrË-(++kò>Ú¡2({K múQ } ‡ÃX½zµc}-òãdð­ú'”×gC{èBDÛtÒ³é;ßߦ#zÇ‹@ß3é£>úè£>úè£ÏÑ>dYž kdÙûÀjWŒØœåPªöá± †CQ¨ª —ËEQZ ›!º®·€4WV6WOÙ\.ÆŽ‹þ=z@´m„=^X¢K’! RþâÅ‹÷H’tAó×ÓG}ôÑG}ôÑGŸc}Ié°|ɈõåÃy'¯±±Ñ>Yn:–ÍïƒòÍ×xìö› ( 6mÚ„ùóçÿà?INñ)Š‚ÒÒR<õÔS‡ÃŽó©ªŠöíÛcĈøÓŸþ/hJ˜/€"ŠxlÆŒùѵkWœqÆxþùça†ã|Š¢ sçÎèܹ3Þ~ûmGúDQDÿþý¡ë:¶nÝêH >eeeÐuÝ‘>8ûì³ãÅNôL™2±XÌ‘>۶ѧOŒ?Þ±>Ã0pÇw ¸¸Ø±¾ÔÔT,X°À±>]×qõÕWãšk®q¬Ï¶m¼óÎ;ÈÎÎv¬¯[·n˜5k–c}på•WbøðáŽõÙ¶;ï¼>ŸÏ‘¾ævñÅ;Ö§ë:vî܉±cÇ:ÒgÖ¬YÓ41bÄGú ÃÀsÏ=‡Þ½{·xmq’/ã‘GÁ¸qãPTTä8Ÿišƒ¸÷Þ{1~üx´k×î;_»Ö˶"ìv'ÔÁ`øÃPRRMÓçš>Lœ;w.6mÚäH_s …BM>ûÄ%/#Üý XÞ$XtGøâóïdð؃ð£Kaåw…Õ¡/}ôÑG}ôÑG}ô9Ú×\ ˜‰DÆÙzCh¬ƒ6u ä%/b|k999ÈÎÎFjj*<4Mƒ¢(¡°¹’²¹5oïøý7eDQ„,ËÈÈÈÀ°aÃärA5 ¢Qˆ‚[–°{÷î\.—ïˆÒG}ôÑG}ôÑ÷ŸðZAøämhW÷¤ïD|² á›íÐ>]¹¢ãõFNNAÀ¾}ûëËÊÊ£>ŠW^yë Õ×CŽÅ0~ôèøøŽ1–eáñÇG(rœ/-- S§NEß¾}1kÖ¬ø.…Nñ5çÇyç‡N:áÅ_t¤OÓ4œ{î¹HJJBYY™#}Š¢`üøñÈÏÏw¬O’$L::ur¤O¤¦¦âÆoŒÛœæ€nݺ¡°°Ð±>۶ѽ{wˆ¢èXŸËåB«V­ë3 ^¯7~͉>'Ï?úþ}>Y–‘œœìXд³¬Çãq¬OUU <ر>(..F¿~ýë3 =ôÒÒÒéÓu=zôÀ<Ðâ'ù Ã@‡ð›ßüƱ¾Ý»w###&Lp¤Ï¶mÌ™3ݺuÃ9çœãH_uu5¦OŸŽbêÔ©PÅQ>¨©©ÁwÞ ]×ѯ_?Çù ‰`îܹ¸ÿþûѪU«&_´ê]|¾âŽøý ¤¤¶m;Ö×"?¶}uéKLíqÕØ4úNÄ÷ûaCõ°;ô¢>úè£>úè£ï?è“ŠŠŠrmÛ.ª©©™b^v/ŒKî„yæ¥ð,û_̘xÚ¶m EQàóù Ë2,ËŠŸ7Ý ²mŠ¢ )) ²,öm„B¡lû(IR¼SUU´k×**Pºg7Bª†˜(Bh6: 0`þ\pxÏž=úè£>úè£>úþC¾Â0Úuƒ™ÚžµïbÆWž¾'Ÿ|¶m£C‡°m;q>†ËSà©«ÄŒ{îBÛ¶mQVV†?þñؾ};ºté·Ûí(Ÿªª3f –-[†ùóç£C‡HMMMœOUáÌøÃâó/`àÀ8pà^}õU >¼ÅŽ9‰ö5çGaaaüÉ@ à8ŸeYèÚµ+Z·n ¯×ëHŸmÛèÝ»7ü~¿#}–eA–e´nÝÚ±>eÙÑ>'­/ôÑG}ôÑGßÉáÓu=~´³}±X íÚµƒ¢(Žõ¥¥¥aÈ!Á‘>ÈÏÏLj# ˲#}eeeðz½¸è¢‹é3MÓ§OÇàÁƒqíµ×Âív;Ê_ý5xद¦bÆŒðù|M¾²ý(Ýø)B’˜ðõ¯ººO?ý4>øà 4}ûöu”O’$ȲŒ5kÖ`ùòå˜8q"ìÚÒ!tZ/ÄR³!€V[éœ×“Áw8ˆÐ/#Ö÷ì¦ð?[J}ôÑG}ôÑGßÈ'J’tV]]]XÈ/=í±)6.CFVVE¦ip»ÝHOOG~~>222àõz¡iA€mÛˆF£qpó™ÔÍ ‚Т¯× Ç·Û¢¢"xŠe!ɶ‘$ˆd«W® *Šr}ôÑG}ôÑGßú^¸ï¤óE"ضí ߎϡm]©æ ÒS••…êêjŒ9/¿ü2TUuœOQ >óæÍÕW^‰ÒÒR¤§§'ÆC ‡! òòâ¾>}ú`ñâÅèÝ»7n¿ýv„B!Gù4MCFFž~úiÜtÓM‡ÃŽó¹Ýnddd`úôé˜={6€ã|Íù{ÕUW¡¨¨È±¾ÌÌLtìØÑ±¾„­/ôÑG}ôÑG}ôÑG_Â}ùùùPUÕ±¾Ž;ââ‹/v¬O–eÌœ9—_~9<ã|‚  ²²¿ýíoqÿý÷#==Ýq¾òòrÜvÛmèÒ¥ æÍ›‡^½z9Ê'Ë2Ö­[‡n¸ ,ÀàÁƒ¿óQ(uUHÚõ’Ê¿Jèú¢ë:Þ~ûm\z饃Žó5ç¯$I°,«Éw`”MË‘ôÔõHzu¦#|-òãdò½þ8}ôÑG}ôÑGßúDEQZ…Ãá;#‘|ýœ« î)ÁˆÖ^´nݺEÅ£ÛíF @Û¶m‘ŸŸ”””8R×uD£QhEš¦ÁëõÂï÷ÃãñÄûôz½2dÒÈ‚€JØ€(açž=Åš¦%ÓG}ôÑG}ôÓçò"Ò{ôúZˆ¯<÷•––âàÁƒŽõ}ôÑGèÛ·/n½õV|üñÇPU51>QDÄ놬‚¸} Fô*BëÖ­‘——‡¹sçbïÞ½5j^~ùeGùEÁ°aÃðöÛoãÁĆ ç  + Dˈ!CZä‡×ëÅ­·ÞŠ%K–`èСŽó5çÇÅ_Œ+®¸Â±¾@ €ž={:ÚçÄùG}ôÑG}ôÑG}ôÑG߇/''ÇѾ±cÇâüóÏw¬¯¹0ñꫯ†ÇãqœÏëõbÓ¦M¸ýöÛñüóÏcРAßù$ré:„k*Piê ó½ù書ì²ËPVV†™3g¢]»vŽò©ªŠ5kÖà¾ûîÃèÑ£±nݺ&_U)äÿ›‰ðájTv¸| __ª««QQQáX_‹ü¨*…¼ÿ+„GMAåŸÖyôÑG}ôÑG}ÇôÉŠ¢ˆ¦ißéëõ°Ú´‡eÄÐÅ»3~D” E¶m·Øfßï÷£¬¬ åååˆD"‡ÃHIIA(Šms¥¤ªªeªªBQˆ¢QQXXˆnݺa׊°h¢A”Óõþ²,H}ôÑG}ô9Ï÷òË/#)) ]»vE~~~â|n/¤à!Xî,ÛB—.] Ë2>øà<÷Üs$  Àm·Ýÿ‹|'ø&Mš„3Ï<‹-¼yóÐÐЀI“&ýò>Q„dY°D÷@¯^½Ð«W/ƒA8p þfžS|Íù1bÄ 6 ¦iBÓ4ÇùlÛF^^ž£} Ë_úè£>úè£>úè£>úè£>øRSSí›1c†£}çž{.®¾új$'';Ò÷Î;ï`éÒ¥3f }ôQ¤¦¦Â¶í&ß–æ…®ƒ ¸â+++Ãßþö7lذ–eaÊ”)¸îºëã“e²,£¢¢Û¶mCcc#&OžÜäkß VF[h;¿€àKEìÐg­/ôÑG}ôÑGŸc|²ªª¢eYí¡¨V½ ¹®â=ðL»ßo‚ @’¤øYÒš¦Áçó!55Û¶mC0D,ƒaðz½ñ³eY†$Iá¼¼úè£>úNi_u¤§o…¬G Æ¢ð<6ð»ßýYYYÈÌÌÄù矑w‚/ bÙ²e˜9s&ªªª°bÅ dggÿò¾p=¤-C¶mˆ‚ç"ÀÍ7ߌ›o¾;wîÄÊ•+¿cø %%—\r .¹ä’øµ_Ü'Šb±&ÇóƒüðûýðûýŽõ%4é£>úè£>úè£>úè£>úè£ï¿ÜתU+Gû¦L™‚+®¸âè¾_¬|ë“eØšö‹ûLÓÄÀ1mÚ48ÎWYY‰3Ï<™™™èÔ©z÷î MÓš|s®…ìõCÐ<¢Á„Œ¯išxï½÷PUU…ÊÊJ„B!Ìž=Û1¾ÍßWf@Îm!%‚¦ÑG}ôÑGß)í“eY–lÛN7»ƒþÛ®·ž€ÛíÆ5Aâ1Ѷm[ddd`Û¶mPíÛ·‡×ëmú…ó[Dó=Gë'331QDe–…tI‚_²4M£>úè£ï$÷Åb1„B!$'';Ê7iÒ$ضïïõ×_Ï_Ô—’ ½ g“¯ì«¸oðàÁ¨ªªByy9JJJ0~üøÄÄï¾n¸¡Å+Š’Ÿ,Cw¹š|†ñƒùWPP€‚‚‚ÄåÇOøž¿ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ÿ­> ÷åååáÊ+¯t¬/??Û¶mƒªª?ô¥d¡®u@ú¡Ýðוÿâ>Ã0°bÅ ´jÕ ¹¹¹ÈÈÈ€$IŽñÙ¶ /¼°Eo¼ñF“oàXÔ»©É÷Ïÿ¿ü«„äGmmmü˜Îãëß1ó—>ú裾“˧ªªòÊ7!nÿ  6FlÐ-- 7ÄŸù¯išˆÅbhhh€$IØ»w/úõë×·?ìÏi‚ ÀeYhTU…ëÛjKY–A}ôÑGß¾Ú*Äý¶mãàÁƒ(++CEEÊÊÊpå•WBEÇø:uê„`0ðz½Øºu«£|S§Nm1¾¶mò¬_ÞWµbý¡&Ÿe ‹Á¶íxAâ‘óÎ4MÇøŽl²,'.~ºñÛ¸¨²rT_Bó—>úè£>úè£>úè£>úè£>úè£>úNbŸ¦iG÷UîA Rßä³b ñ©ªŠ¹sç:Ö4øtT߇ÿ‹ÀöµM¾Ãå ñ™¦‰~ýú¡±±‚ Àï÷㫯¾rŒÏ0 üýïG›6mЦMäää ==Ý1¾c5Aàúø5úè£>úŽðɪªš¢(Vê=rôKï’så›(//‡išñ¢#‹#šQÑh‘H …BÐ4 Á`K—.Eqq1Ú´iY–ã)Çj555ˆHêtŠe!ÓãA’¦Uªª úè£ïÔ÷Y–…mÛ¶!33~¿ß1¾Ï>û 7nDII JJJðì³Ï";;û—÷™VŽ®ù`kn˜áƸo„ PÙÙÙÈÉÉAmm-\.—c|«W¯†Ëå‚,Ë]×3ÿŽá4hP‹üˆD"‰ñ‘ÝlA€©ëÎË_§û$)Gw¹è£>úè£>úè£>úè£>úè£>ú裾_ÒgDPwø(’Ôä è;ŠïôÓO?ºÏ„:[…Ò‘%d|%IÂŽ;4–‡å‹D"Ø»w/>ùä”——ÇwÌtŠoïÞ½¸êª«PTT„¢¢"ôèѽ{÷nòs5ꎅ¬FæÂ¹H þÅ}555¨¨¨@—.]Zìvæßæ/}ôÑwÊùdEQ Q¿B4”â—+ ìÚŒ=aº®Ç«$›Qº®Ã0 ˜¦‰H$‚P(]×!<|>ªªª°qãFTUU¡°°0¾Ý£(Š?ÀÚ¶ýû÷C JLA€"Ëp»Ý_«ªjÑGßÉä«®®†×ëuœoÏž=øç?ÿ‰víÚaèСŽñ­\¹o¾ù&V®\ I’ððã[·nŽñ½öÚk0MÅÅŘ4iÜn7>üËûL£ÉWsB°{öì®ëX²dI‹ù×|”²S|n·¦i"'6ásÌúbÛM>À`ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôê¾H=ĦËEÜjb}ß·8ÊçñxððÃ;6~­[·ÆO<7bãÆØ±czõêÕä,ˆiY0³  ˜±„Ì¿­[·âÆo„®ë>|8&Mš„¡C‡:Æ·hÑ"”––â‚ .@^^^Ëñu€¯¾¾©©©GŸðýèúB}ô‰ªªšŠ¢¬7,òäTˆ;>‡5d<.^‚ªª*ƒAÔ××£®®ápÑh¡PuuuƒÐuš·‹„Ïçƒ(ŠÐuØ´iÊÊÊ …F‹Å`š&,Ë‚mÛ¨ªªÂ–-[¸e9?R½^´jÕêsI’,ú~Y_CCé+//Ç_þòÇùjkkñÖ[oᢋ.Âý÷ßï¨ñýôÓO1nÜ8Lš4 DVVVb|ëC¹c4ÄWþë›=Xøþû¨ªªÂ7ß|ƒÓN; Ï<ó Þ}÷]tíÚÕQ¾éÓ§cÚ´i9r$òòò`Fb|ÕeP6,„¸}-¬º ,\´ÈYë }ÿšOס„BM–ªÒG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑwªûî…{ïÈ)û ©F#}'¡Ï4M´oß“'OÆ£>ŠGy¤ÉW²ѽÛá~íqäÌù-RK×%Ä׫W/¬[·o¼ñºvíŠÃ‡;Ê—““ƒÊÊJŒ=çœs>ÿüó&ß¶¯í.Ü{· gþ ¤î\Ÿß-·Ü‚‘#GbÁ‚0 ã»ùç_cc#fÏžŠŠŠæ‡C| GÏ_ø~t}¡ï?æUU­ÉÊÊÚ ÛFìîW ÿöAXm» ÒÖ°jÕ*D"‘xÅd(B0Dcc#¢Ñ(,ËÐt†´¦iEš¦AQ€a¨««Ã®]»°}ûvÔÕÕő͕˜Û¶mCÕáÃ0ÕÑ(öÕÕC–eôë×o»ªª5'â«­­u¬¯´´Ë–-s¤oýúõøõ¯+V8Ê ñ׿þ'NDYYjjjã«­­Å¸qãðÚk¯á’K.Á=÷Üã¨ü¸úê«ñî»ïâ†n@FFFâ|EC¡ô„åMFemV­Z…aÆaòäÉhÛ¶mâ×—£ø³þˆy<Ð].X’„ʪ*úè£>úè£>úè£>úè£>úè£>úè£>úè£>úœækÁpPÝê4ìKkY’êËÏÏÇW\1cÆ8Ê׺ukÜsÏ=X»v-n½õV¤§§7ùDŒÜN¨ÿ;ì›òxÂ|>ú(®»î:<ÿüóøÕ¯~…`0èß–-[°gÏœ~úé˜5kêêê¾›ðÍ›7£FÂÚµk˜ð½òÊ+ضmÛÑó×¾’’’c¯/ðýèú÷#>YUÕz÷î=rçÎçþbuìä Äúž 6 _¿~ñΚÿݸq#EA§N’$AÓ4€¢(PU±X ¶mÃ0 466²,„Ãadee!-- Š¢@|òÉ'¨F‘árÁïñ² I’pÆg$išö†ªªöñø6mÚ„Y³faΜ9ðûýŽò­X±O<ñ.ºè"ôìÙÍ-ѾÚÚZ<óÌ3X¿~=®¿þztïÞ=~æ¸|=öñä“O"##¦i&Îwp?ìšJÄܸoÖ¬YhÕªt]WÙíëÞ½;Âáp‹íYâÛ¾b¸v¸1Y>æúBß1|á0DÓ„-ŠôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ô9ÑW_ƒŒ¯–ßž xüôý ßÀ_÷?·Èl Iæ+..Æ /¼€ªª*ˆ¢è(ßäÉ“1qâD¼ôÒK¸ÿþûñðÃ7ùŠNGÆ?î†ßy ñµk×]tn¼ñF :÷Üsü~¿c|»víœ9sp×]waܸq-ó#Á¾ÊÊJÜrË-¸í¶Û0|øðæo‚}›6m‚$IèÛ·ïÑ×—ñÉýë_÷Ý|óÍI”Z%«Ï‰ÍY;+BC-^]„ž={¢¸¸8ûâ‹/ðøãcÚ´išª'E‰WM6c›·´mFF"ض²²2ƒAdffbûöíX²t)Áh‡M=ss‘’’²,x:uê´~®ïwÞÁË/¿ŒéÓ§Ç‹â{î¹ç°|ùrÜ{ï½èСC|pàKKKƒ xê©§àv»[L>'ø¦N ˲âg¡'Ì·vÑ9±~çÀÎíÁˆaáû ããFã[—:Ñל¿ õUî='–”Ûçƒ`ÛX¸h}Çã‹Åš|¢H}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑGŸ“}ö7ùÒÒèû¹¾?Bcn%‡zîXë˜ñ]¿~½ã|.— 7ÝtÒÓÓ›|¯Dã?BЛ„Ç+ÐóïSæëر#~øa¼õÖ[Ø»w/Âá°c|ƒF~~>fÏž7âŽ;îhšð¹\.\~ùåxä‘G°gÏLœ8ñ»üp€/‰àùçŸÇ7ÞˆÞ½{·ÌߟðÉ (J}n^îŸwíÚ}ŽP±âGÿqí{¨4K–,A›6màñx°fÍüéO½÷ÞÛb÷DEQ Šbü¹,ËP%^LfÛvü¬jÛ¶aš&:„Å‹£¢¦Ùn7 IBÄ4áRTœuÖYóeYVšƒðs|UUU˜?>zè!Äè_QQƯ×Ûb€æ[ú"ê\¾õÊÃaH’„î¹¹p{Üçw^¶¦ióŽàOúrssñì³Ï¶(Nt’¯¸¸øʼn ñÝu.°êÿ‡Þy0ŒŽý°rÃññý~£ï(¾Ï–_Cwi0<¬\½š¾ãñÕ×t€>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£ï;_°Re)ºGÊé;ß§ëPŸS„òôŽ>}Ý_™NßOøEAaaa“¯d'ê/{åÓçA’dtÿß;êËÎÎÆƒ>ˆôôtÇùN;í4\uÕU¨¬¬ün|†O€™3gÖ¨ªÚصk×›a°r;@Ø¿ÊïG rñX¸y'–.]гÏ>ÅÅÅ-0Í #[sE¥$I-®Û¶h4Š;wâ·ßFa ߀[U³,¨ªŠ /¼ðqUU+sss7ßwLß­CIn…+VcéÒ¥-åDŸa‰÷Y,oBc=”õï!bX¸d }?×gÛ°$‚iBi"¢(ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑ—_c=ò÷·CLõ@Uú~®ïýP£&!ÿ±‹á®ÞXëÓ ÊRÂ}¢(:Ö×¾}{üêW¿jò­Û‚šóoFþÿ\þ£>±ùf¿ßÿêäÉ“O3-ë/òœë!?x!Ì©OÂ<ë2{Ÿ7ßz .Dcc#IJ,ÿÒ\Aùý*J]×›po¾‰Ã¡- UÑŠsrP”›‹ìììŽ=:ò¬ð½öß´³`¦åÀÌ.@ЗNßñø¶¬†¼~!LÁ„©ªê:}Çãkh„ÜÐÓã¥>úè£>úè£>úè£>úè£>úè£>úè£>úè£>ú裾Äúê¢8¸EÖaúŽÇ§%£1µ ªŠÿ~ŠÞоãñu;C&¡jò½(~í¾cúâ=/^¼Ø8ûì³=ƒÞ»bé’ñböi²9ñ6¨¯=mþc°L»víÂáÇ¡ª*Z·n EQ id¹ee,C$iš0 ¦i¢¶¶›7oÆ’Å‹‹ÅêóAUUÔE£h“šŠd¿?6{Ö¬\.×ú¬¬¬¯¾ÀøÜ^ÙÌ/‚ºo ´}%ôoÙ²ñ¢$Ê¦Û 5…¦ëôïããEY¢>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>‡øRìóÒw<>; UUPçJA;„dÑ¢ïx|û7CUÔŽ6_‚äðá£úZ”>.Y²dÏĉ¦¤¤ümë'^¦¬xʺ…% ’(²-”——cëÖ­¨­­E8†ÛíFRRÒ*%£Ñ(ª««QYY‰]»vaá…ضmdY×ç…ÏçCVZ*r[µBŠß»îºë¶6mÚDÓÒÒæã­…ï‹Ï.Sîƒr¨‚¾ñmÙr™bP,‹>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£ï¿Ï§ÚÈ£HQúNÄWù5r¿^‰”àcú„£A_xá…i¯¾úê†Õ«W$JDQ„(ˆ$¢(Äoóxúè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úì~ úöÛoO ƒ‘»ï¹{”3~#H"$±é!H"DQ‚6šp‚ ˆB¨( Yª©šªB–edgg/x衇V¯×;÷çŽ>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè;9|ÂO!-Zt†,Ë}çÍ›·÷£eËf ¶'ÊrR Š$A„(5UXYiÙüe9þðx<ßüú׿ž}î¹ç¦Xîr¹Þ?‘àÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}Îõýd"¬^½Úmšæe‚ $ýãÿØ·víÚ+t]Ù E²$Aøö¹üí5Q’!ËMÀ´´Ô£GŸóú„ ²$I: iÚßAÿ+Á£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úœéûYŠG@SUU½HQ”䯯Æà»ï¾ÛðÅ_tnllìmèF'Ë6ÛH’¢»4µÊç÷ïHOOÿrÈ!;Fíóz½nI’išöŠ ‡ÿ£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úœé;®Å#ÛÖ­[Ûªª:R’¤TA$Q%I’dY–Q-Y–MY–-Q‰¢¸ÈívïýO>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úèsžïÿ[«Ÿ²Y':#IEND®B`‚Carla-2.4.2/resources/bitmaps/dial_08d.png000066400000000000000000000066671420416754300203310ustar00rootroot00000000000000‰PNG  IHDR((Œþ¸m pHYs  šœtIMEÞ.;Ä·= VIDATXí˜kŒ]Õy†ßuß—sÎÜ<ÏÍ£`._ µAàÈÔØaÂE PBã$U©‚Ò‹"ñ#B¸J~E 6(?šª@U‘ QRW²sn{ïµ×Zý1çìÎxL¸¤KÚ:çlí³Ö³¿ý}ïû­Mð%‡ïû}ιBˆUŒ1Á9ç„ÆsŒ1ÍKcšs~ÎZû?§NúèˬC¾àõ-Bˆ?BtRJµV[k :ç¾Bé )¥³”Ò“Bˆ·r¹Ü»…BAqÎclNký̱cÇæÿ¿}!Ä÷cÖÚŠsîf×85F)BÀâŽsPkA¬­_Æžëèèøuggg!䜵ö©C‡Õþ`@ÏóntÎítÎEÖÚ{tJaÂ1iBV*ОBD!ÈZ –R€¨8œ%t²§·ç'}}}„#£££Ïý¾õÙgÀýÀ 1æjkí=DÊœij1Öóà„c¥@ÓŽsµFˆ8ö=€0kù>¨1…r±øÍO¦§Ïöõ÷Oþñ{ï½÷Ö  ‚àþ4M­1æ'„1iƒ,Ž¡››AµÕi@U*ÐJA$ @êÓ9‡´~.ò}¨8†á)c+U$‚C& ˆsñ•W^ùížžžK‹Åâ? Ç‚ð‹Ñår¹û1‰1æ!B)lÀú>¨s`q #%<­±®»CÛ·£¿¿”R!Eæçç1;;‹ž§Ï~ŒÔXÄ’Bh”3h)AÈ$Qo¼ñÆÞr¹¼cÓ¦Mà‘ÏŒ`SSÓ´ÖíI’üJÁärà¥Ò0„c AµŠÛn¹·Ýr *• |ßG†hkkCËæšŸŸÇÛo¿#GŽ`äÀ$Æ ây`ÎÁ‹#Ô<²¦×l¹æë—]vYç£>úëOÍÁ¶¶¶sWÔjµŸÆƒU NJˆZ —ôôàW¿ü%ºW¯F¹\^¬XÆÀ9‡çyPJ]˜ÃhkkÃúõëqÅå—#‰"ÌLM‚%)jžG¸1€³˜úð£?»bݺ'·mÛÖ}øðቀ½½½>€{ÊåòÕ„±+ÒææÅGE°RâÆk¯Åý÷݇O>ùišÖSÍe€J)ø¾¿ 0MS$Ic Z[[±~ýzPçpj| ¥PQËÏ× ?vüÒ5[¶Ð-[¶¼}øðát`>Ÿÿ«J¥"Ò4½ŒÁ [×µÛ·mÃ÷wí¹sç`ŒYž#„€sß÷W<â8Ž‘$IvCRJ\~ùåPBàƒwÞA-æ#µÜ0«ËåÒ?oذaË‹/¾ø&Pèïïoáœ÷Åqü·NJ¤¹Dµ EXÛÓƒïîÚ…(Š@)¥t„1Æ$I²ì¼sišÂç\v^;wâÆíÛ¡¬…ˆc¨xQ7¡NŸúçÜ衇Z2@ÎùÝ¥Ré<€.ÇùbØ Jñ?û„RÂó<!–A6@´ÖË@Ò4Í/žçá¶ÛnÖ¯~Ô9Ô‚–RXÆA ™`ŒÝ±°=Š¢o:ÎA¨…ð$Á·††ÐÛÛ‹îîn´¶¶"(¥ „©kÞÒH-…ÑZ#MÓeÐ@)çضmš<2MQˆcPBà8Ã|ð7žçå€nذ¡Rª­µ×Yσö}Äù<<ÆðÝï|mmmÈçóèííÅêÕ«ÑÔÔß÷¡êùya14 —þÎ*’1! ”‚çy¸á†ðµë®s%¥Pa ¥°Öݬµ>ÿØcõSÆØŽb±X#„€×jPµXšâ’þ~tuueú¾ööv  ££afÎ9Äqœ5r²=BȲyÂ0Dð}6l@($„µhrM„‚qŠƒ/¿\Bl§BˆUµZíG)¢BZPkñ§[·bõêÕYþI)áû> …Ö¬Yƒ´´´dZkÄqœUo–R ¥Â0D>ŸGÙœabëÖ­h+ÀÔÁ4@NMLlTJ5s!5Æl¥`Ö.&+€ÁÁAðºùB@)…sœól|>ÉÉILMM!Š"Ôj5´´´ Z­f×6"%¥çRʬÐ(¥X»v-6mÚ„ñ—^‚ (¡ ‰Ö[8ç¿ãRJj­½”‚% ¸s À Mk€.ÌÿåR.—Ckk+ÆÆÆP*•2Ý Ã…BafpŒ1BVýýý¬ç„1Jà¬]/¥|žsΙs®Ýpíy‹2¦+\áb°œspαfÍttt`ll B\zé¥ÃpqÁ:Dã?›§³³ ¥(Z X‹vÆ'¤K)Ź”Ò×´ž7’‹eI¾Tó.ülD¹\c §OŸÆæÍ›áÕoöó B>Ž÷ßÅb1ƒl<‰±±1ÌÌÍ!%³qŒ‹ àœcóæÍïK)ç©”ò¹«®º*tÎ-:ÉÂD¥‚„1¼þúëÐZ£Z­¢R©d¼°1`ŒeÍjC#“¦)*• fggqòäIœ={µZ-ËáW^y qŒ)qYK Z[ÁÃöíÛ›”R£ôñÇÿ°¹¹¹À(ÛO’I.‡$—ƒV û‡‡qèÐ!Äqœ]¬BdQkÀ6r­Ù(¦ÉÉILLL`aaGŽÁ訂ã§K%´ærhiiy¾P(ƒƒƒ§yý®úúûÿàÄÐ8Õ ŠŒctt===‚`…ì,m@ yB,k¹Ú(ºsçÎaddgæçÑíûHCd >Žýû÷cll œ „¹¹\]m­è[µ -ù<xàûzzzâ¶¶¶ß,Ëó‹yãž={~üôÓO¿~ðàÁç(c‹E(£ ”d ‚ÍÍÍX·nš››‘ÏçAAµZÅÜÜNž<‰ùùy”J%Á¡”—mO}ßÏ4óÞþð¯¿výõÝMMM?]QˆŸèAð£Ã‡=ùä“ÏBTÃG—öt2ËZ” À-ËÑ¥½£ïyðêû™úf?Ù½{÷×­[מËå~N‰>`cìÝ»÷/K¥R´ûïw=MÒ¿ Œ‚ÑŃ0 J(á% ‚ H%Á…€ª7¯ÝÝÝÿõàƒ¾Z(Êaþ˧1|æ Ìáááíœó?yê©§N?÷üóçú)ç‹”€RF((£Y·²4zKu±¾øx×®]Ü|óÍí^ð<ï¿ßúŸëðÁƒ}cÌ÷!MO<ñ㝽öÚ=Zë J)8c éiä-ãà|°­­õ¥¡¡oKa›ÃNIEND®B`‚Carla-2.4.2/resources/bitmaps/dial_09.png000066400000000000000000000275441420416754300201630ustar00rootroot00000000000000‰PNG  IHDR ((nQàé pHYs  šœtIMEÞ, §__¹/IDATxÚíÝytUÕÙ?ðï™ï”’’d‚‚€€Ê €2Š´¨¨Uh RÅ‘VPàÅ™j­Zµ¼¢ ø¡€ ‚2‹¤¢0h@Bn’;œé÷GÌ•ˆ#ék6ö»×º+Ü»î9瓽÷³³¸÷9û‘pŠÍëõfº®;DÓ´¦Š¢hªªª’$)Š¢¸Š¢˜Š¢XŠ¢˜ªªsçýû÷yª×¢>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úN/Ÿô3ßßDÓ´Ë5MK•eÙuÇt'@'×uÏ$) €)Ër©,Ëû4MË ŸÆÇǪªŠ¢”™¦ùÚîÝ»Ëÿú>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úèÀ÷S½š¦]©(J¶ã8Õ®ë^ à@Ó@›n÷~{èU(k^„Ûþ,ÈvC:v (Ê{)))/¥¦¦¦H’tÌqœÅ›7oý‡:Ž>úè£>úè£>úè£>úè£>ú¾Û§(€ªB¶mØãO_C|†I’ ú~;H®ªBvHŽC}ôÑG}ôÑG}ôÑG}ôÑG}§ìûÑEÇsëºC\× ;Žs=$)U2¼°oúHVÒÁ|X·<ý¾q0'φ$Ú ÷"rϫП¸ NËŽ€fÀxz:`F C*j‘ÑâîÌÌÌTI’¶¯Y³æ½†ô}ôÑG}ôÑG}ôÑG}ôÑ' H•<>úâ“eØ~?$ÒàßÒןmÃòû¡WWÃ|| } ñy<$ Zçôýš}á0">ôPεsèkˆO–I‚‰} ñ¹.dI¦>úè£>úè£>úè£>úN3Ÿü#¸)úÚ¶ÝÕ¶í»ÑéœTû©­p;ô†Ûþ,8'@.̸Í2 YQÀŒÂm–Q{òÏó`œ§m8ÏFè‘°ÚŸ•QTTôüÎ;º(ŠÒ|Ô¨QW5 óè£>úè£>úè£>úè£>Ñ|š–j7i×±èkˆOUáª*À|àßô5Ä÷õ¾®$Ñ×P¸.}¿vŸT{_»ìJô5Äg;°uŽ¢Àé:€¾†ø!¿–,ÑG}ôÑG}ôÑG}ôÑG}§™Oùž× ŸÏw—mÛ~˲fIIiíÝ«î…\°ö³€ÄfP¶®‚Óg$ÔÍÿn“4¨y› ìÏ…òÙHÕ•@|2”Ïsa ¹ úò'` œ»ã90V<ƒè˜ÛàîÏíúÅÞü‹_îÛ·ïÈÌÌÌ ìŸØwôÑG}ôÑG}ôÑG}ôÑ÷Ÿ÷)J{7€løa_y7}§ê³mØ> (PTƒ¾†øLŽ®C­>·MúNÕgYpeªmC‰„ékˆÏq Ø6¤f™ôýš}® È2”ö½`]4…¾Sõ¹,Mƒnš°®˜¾†øt¶¢À°]D¯~€¾Sõ™¢º×4»~qð }ôÑG}ôÑG}ôÑG}ôý">õ»t@àÛ¶£¶mÏ‘tÎøipÆOƒ\QeÍ‹°M„çŸAÇgnÂðsÚ#Kùò¨>Ð4 ápååå(-X†õeppÖXÇËùí,hï¼ «ç0ÇÜ Éu ¿<ÛØ¹sçòªªª »ví:À‚ŸÒ{ôÑG}ôÑG}ôÑG}ô}‡O–ék¨ÏçƒãõB.>@_C|® %­ëðl\ŠŽN}§ê3MtLOÇðóϧ¯¡¾¬,ȲL}ôýT_i)Ö¿¿‘¾†øÖ­ÇÁ#_ÁŠo†H×óè;UŸí ¢ËÐLÖ%7ÑןªÀÔuHtÇ¥¯!¾h”>úè£>úè£>ú裾Ÿè“¾ýBBBÂÓ4›E£Ñ¿à¬ aO[uÖ%°þø,ÜV]àûý Œê6Fõ?ÕÕÕðz½ðûýHNN†Ïç«w®òòrüûßÿÆöíÛ±zÛ.DMP=ÿ=(…yð<ö;„îy ú£S!ïzçœ}ÎÐvíÚ¥þõ¯}é‡:>úè£>úè£>ú裾ïðì@j( kÞ;ôª/„å÷ÃUø4?FAß©újjj}#FÐG}ôÑG}ô5Ì·v-¢ñMQýô.úNÕgÛ¨öx ¸.úè£>úè£>ú裾ñÕ+ñœœœ|ëºB¡Ð=R\™íà ¹nŸ‘Оš†Ö_îÄ¿›„ô¤TUUA’$(ŠUUáñx`F= ÇãArr2:wîŒ-3-þ%Þ‚²ã„f¾X[:iëJ üí/ß¡cǘ¾eË–Âïê<úè£>úè£>úè£ïWêSgäÐן¢À1 ¸ª mç{h}ô3úNŧëÐB!´nÑOÌù3} ñ-\ˆôæÍO _ii)$I‚ÏçÒ'Iþõ¯¡U«Vˆ‹‹ÒgÛ6}ôQ BÏž=…ô†;ï¼–e¡M›6Búà–[nAÇŽ‘––&¤Ïu]LŸ>C‡Ejjªp>¨ªªÂ›o¾‰Áƒ é€H$I’pÎ9çé5>¾Ó×¾=¢å¥ô5Ä£äP”ø4„þü}§ê‹Zyx÷ÝwñÎ;ïë³m{÷îÅöíÛ…õ)Š‚ÂÂB|þùçBúlÛF||<>ù丮+¤Ï¶mTVV ëuþ}ÛWQQÄÄDa}®ë"77Íš5ÒŸþ9öíÛEQ„ôÀ|€]»v ë€%K–`Ù²eÂú,ËÂã?Žõë× ës+V¬@ZZš°>ÈÌÌÚßaáy½ô5ħ*xÂa8c§Ñwª¾PŽ,#ìÀ•%úè£>úè£>úè£ïWî‹%(º®{e(ªr]w8âšÇ¾‚uÕ}púÁØ7gạPZZ»à×ÇÀ²¬z›iš°, ¶mÆŒƒ }º#ñ¶¾°úAôŠ{ •qIP$ù†uëÖí‹‹›øísÑG}ôÑG}ôÑGŸ°>} ñÉ2à8°¼^8yèkˆÏ00vÀ\wõÕ(--EMMоmÛ¶¡  @XŸmÛX°` „ô9Ž]×±zõj逎;bûöí(--Ò}ûöņ `š¦>×uѵkWìØ±CXŸeYhÛ¶-òòò„õ†]×qìØ1!}–e}g‚¢H>‘ç߉¾ÊÊJ$$$ë+--…ÇãA Ò»wïF·nÝ„õÀ† ЧOa}Žãà­·ÞÂСC…ôÀW_}…wß}Ý»wÒgš&víÚ…W^y†aé³, ¹¹¹˜>}:ü~¿>Û¶‘——‡;w ëY–…öÅæß˜1H´,X·>E_C|š†¨a@r]@ÕékˆOVè£>úè£>úè£OxŸYYYMEVYYyƒ{Ö€}ëcОœéø1´9úþ0þbÔÔÔÀ¶m¸®{ÒæªªB×uÄÅÅÕÇÃá“>ÜWÙÙÙWWáÀgù@ÉÐßZ„Èm‹ •~ÊO?î{î¹çn2dHÁ»ï¾¦>úè£>úè£>¡}º°aB[ù$E¥ïT|~?´šH®‹6øÃ-SO ßæÍ›‘œœ EQÄòÝvjjjPXXˆ… ¢Gðx<ÂùlÛF0ijÏ>‹3Ï<>ŸO8¤¤¤àå—_FŸ>} ªªP>×u¡( |>V¯^>}ú@Ó4¡|®ëB×u?~………ÈÉÉÎqqqؾ};RRRТE á|€%K–`Ô¨Q±Ä+‘|P]]Ô+O,’OUUäææ¢S§NhÞ¼¹¾ºrÞ—_~¹>]×±wï^@Ïž=…ôÅÅÅá…^À¸qã„ô}öÙgØ»w/FŽ)¤^{í5tîÜgœq†>Ó41wî\L:µÞ.¢ø`Û¶mÈÍÍÅ„ „ô¹®‹¿ýíoÈÊÊÂÙgŸ-¤/ áÞ{ïÅØ±cÑ®];á|ápÇǬY³0uêT¤¦¦ ç3M_}õî¹ç\xá…hÞ¼¹p>ÇqP^^Ž?üáèÖ­ºwï.œB¡¶lÙ‚óÎ;áPH8_½ø8|û÷¶ ½egDf-¡ïT}f¯šT–—ÑG}ôÑG}ôÑGŸ°>ùë L ƒÒÜögÁi•ƒèÂõÐJ¾ÀÃcžàðx<Ð4 ²,׃X–Ó4ëÁë2+ë¾Ô9±y<Œ5 g»Ç )D衵p²;Ãi× ²¤d¯^½ºPQ”±'t}ôÑG}ôÑG}ô‰éSU8Š‚¨ßmÉÜÓÆW]]-–/>š,ãáÙ³¡irss±dÉȲ,¤OÓ4à±ÇC(Χë:Ú¶m‹ÁƒãñÇí¤(’Ïãñ sçÎ8ÿüóñÜsÏÁ²,á|š¦¡cÇŽèØ±#–/_.¤O–eœ}öÙ0M{öìÒƒ BQQLÓÒÆ ƒëºÂúâãã1yòdD£Q!}®ë⬳ÎÂèÑ£…õY–…;î¸999Âú’’’ðæ›o ë3MS¦LÁõ×_/¬Ïu]¼õÖ[HOOÖ×µkWÌŸ?_X\{íµ4h°>×u1sæL!}uíòË/Ögš&öïßQ£F é³, [¶lmÛ˲ðì³Ï¢gÏžõþ¶ˆä …B˜3g.½ôRtéÒE8_ÝMK³fÍÂèѣѪU+á| q÷Ýw#//†açjK²-Z´¹¹¹BúêZMMM­¯{wȃ&!4P¾Øü;|®‹ÏG–á(*}ôÑG}ôÑG}ô í«KPl‡/uÛõ„T] cj¨kþÑÍuddd ==IIIðù|0 š¦A’¤zÀºZÔu­n{Ço(#Ë2TUEJJ ˆ„ü ¯}ñ¹æ8Üv=ðùçŸßäñx't }ôÑG}ôÑGßééSUHo<ãÚú~­>ÆñãP£QŒ>$ _|ñ…°¾´´4<ôÐCxùå—@8_zz: Çq0oÞ<ÔÔÔçKNNÆÔ©SÑ«W/ÌŸ??VŽS_]|Œ9:tÀ?þñ!}†aàâ‹/FBBŠŠŠ„ôiš†Ñ£G#;;[XŸ¢(˜:u*:tè ¤O’$$%%áæ›oŽÙDó@×®]ѦMa}®ë¢[·neYXŸÇãAÓ¦M…õY–¿ß{MDŸÈó¾ÿœOUU$&& ë€ôôtø|>a}º®£_¿~Âú ''½{÷ÖgYxà$'' é3MÝ»wÇ}÷ÝWï ‘|–e¡]»v¸êª«„õ}þùçHIIÁ˜1c„ô¹®‹… ¢k×®¸è¢‹„ô•––bÆŒèÓ§¦N MÓ„ò@yy9fΜ Ó4Ñ»woá|‡±hÑ"Ü{ï½hÚ´©p¾ºøÈË˃ëºÂúêŇÇݲ¯‡^C߯Õ‰@–$¸ªB}ôÑG}ôÑwZû”.]ºdº®Û¥¼¼|²}Å,X“f¾à·ð­û'f»-[¶„¦iPUŽãĶl¬¹® MÓUUáº.jjjFëáE‰ec꺎V­ZáÈ}(( ¢fæKˆöVÛA­mwÎ9ç,;vlYaaa<}ôÑG}ôÑGßiëóù`y<°­0|;×böôßÓ÷ð=úè£p]íÚµƒëºïÓuø$ ³ï¾-[¶DQQþò—¿`ïÞ½èÔ©¼^¯P>]×1bĬ[·K–,A»ví””$ŒOÓ4ÄÇÇ£OŸ>8rä^yå 4¨ÞŽ9í«‹6mÚàøñãˆG||¼p>Çqйsg4oÞ~¿_HŸëºèÙ³g¬d€h>Çq ªj½r°¢ù€ÚÒ "ûDZ_è£>ú裾ÓÃgš&<°¾h4ŠV­ZAÓ4a}ÉÉÉèß¿?$IÒÙÙÙUQ” ;’$ ê‹÷CÙ½Ö€qh-…––ÛAUU¨ªŠ@ €ââb;v ‰Dàº."‘H lÛv½’C’$ÕûÏ¥aPÐ¥K¬w;ìÜõðn~Þ¼¡¨26mܼxÔ¨óE‘è£>ú裾Fô=7‹¾†øB!(¶ KUÑ:;iii‡ÃP^¯WH_ii)&L˜€‰'b̘1ÈÎÎʧi „ `Ñ¢E¸á†Ð¥K”•• ã;묳°zõj<ýôÓøãÿˆyóæÅ’¯Dð)Š‚””<ñÄXºt)*++cÉk¢øê1cFŽ ×uQ]]-”¯.~¯»î:;vLX_qq1TUÚ'ÒúB}ôÑG}ôÑG}ôýr¾ììl¡}íÛ·GçÎ…õ©ªŠ¹sç"%%EHŸ$I(..ÆÕW_aÆ é+**ÂÌ™31qâDÌ™3'–-ŠOQlݺ/½ôâããqã7Âëõ ã«‹ßp8Œ·ß~Ë—/Ç_ÿúWá|uñQW¢PT_½øøðCØŽ¯$Á«P\‹¾SõI2E¢>úè£>úÑ'kšÖ4 µvS²~áS˜]¹0ƒ›ûѼyóz^¯ñññhÙ²%²³³Ñ¤I†I’`š&"‘H ]‡•e†aÀï÷#..>Ÿ/vN¿ßþýû#¹¤ê—Ÿ"4t2Šß¤daaaŽa‰ôÑG}ôÑG_#údaÅ…¹ýmÈ_yÚø pôèQ1|ññ05 ²ã`pÿþhÞ¼9Þ{ï=ôêÕ ·ß~;Þÿ}èº.”/++ ‹-ÂÁƒ1tèP¼ôÒKBù4MÃÀ±|ùrÜÿýرc‡p¾ºsÝ~ûíX³f   œ¯.>.¿ür\sÍ5Âúâããqæ™g íqþÑG}ôÑG}ôÑG}ôÑ÷ßáËÈÈÚ7jÔ(\rÉ%Âú:uê„Å‹cÊ”)ðù|Âùü~?rssñÇ?þÏ=÷úöí+œoÙ²e¸âŠ+PTT„¹sç¢U«VBùt]Ç–-[pÏ=÷`øðáØ¶m›P¾ã·´´‡®õÅÇC½l&B÷¿‰â¿*„¯^|œ>!IB1\@Vè£>ú裾Fô©š¦É¶mç ® ”϶ÃiÑŽE'ÿ~¨jm‰(I’ Ë2\×­— ‡¢¢":táp¡PMš4AMMMì½>Ÿ/¶¥¼ªªÐuš¦A–eȲŒ6mÚ k×®8жœ”–0ö )„è±Â³UU}—>úè£>úèkDŸ,Cq8² @§N ª*^zé%$$$ sçÎ'Ýé.‚ïwÞÁ³Ï> EQpÎ9ç`Ú´iÈÎÎÆ7~üx\pÁXµj/^Œªª*Œ?^ôèÑ=zô@0Ä‘#Gbæ‰â«‹ÁƒcàÀ°m†açs]YYYBûD‹_úè£>úè£>úè£>ú裾_Ò—””$´oöìÙBû.¾øbL™2‰‰‰BúÞzë-¬]»#FŒÀC=„¤¤$¸®+Œ¯¨¨ûÛß°cÇ8ŽƒÉ“'ãÆoÆW·ËÒáÇ‘ŸŸêêjLœ8Q(ß÷ÆÇ† p² IV5Múè£>ú裯‘|ª®ë²ã8m¡éP>\µ²ò‘Bø¦ßˆo·º­ÄëjI†@ €¤¤$äçç# "²,øý~ÄÇÇǾÌVUŠ¢@’¤“YYYð½<jf[HMR \Çé¬ëú:úè£>úèkï`”{.êºU¾Ç9-|¿ÿýïáóù––†ÔÔT\rÉ%±?ò¿¨O–¡D£µ>>Ÿ ±nÝ:Ì;%%%ذaÒÓÓ…ñÝzë­¸õÖ[±ÿ~lܸñññBõ4iÒ“&M¤I“b¯‰ä«kqqq±ÒÄ"ú5~é£>úè£>úè£>úè£>úè£ï¿Ü×´iS¡}“'OÆ5×\#¬Ï¶môéÓÓ§OGëÖ­…óã‚ .@jj*:t耞={Â0 a|¶mãí·ßFII Š‹‹QSSƒ Ôú2:@mÕ©ÖW¸nQ¾Xñ+ºÏq ª*$E$Kâ­ôÑG}ôV>UUUÅuÝfv·0¯¾àyýx½^üP“$)vÇDË–-‘’’‚üü|hš†¶mÛÂï÷×^ðkDÝ1ßužÔÔTDûŒB奷š½ñ?ˆ;ôišaôÑG}ôæ¾h4Ššš$&&6ŽOUaz<µ>ËŠùÆ×ucç{íµ×b×Áׯ_?”””àСCÈËËÃèÑ£…ê¿›nº©Þkš&”¯®µnÝ­[·n¼øø_£Ç/}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}æËÊʵ×^+¬/;;ùùùÐu]HŸeYذaš6mŠÌÌL¤¤¤@Q”Z_ÿ±îs]&L¨wŽ¥K— ã“$ ±2õÆW–Qé8€ã ™¢ N’ÄŠ_úè£>úN/Ÿ®ë¨—AÞû@¯*C´ïmõ7ÄžŸøÓ¶mD£QTUUAQúè;ÁW~ѾÓáº.Ž=Š¢¢">|EEE¸öÚk!˲0¾:  ü~?öìÙÓ8>Ó„lÛµ>UC4…뺘:uj½ñu]Žãã«KHúèûÚ§êºn˲\l¶îžaþö.¸MÒ`o\†C‡Á¶íXÒÆ‰Éu¨H$‚p8Œªª*ÔÔÔÀ0 ƒA¬]»999hÑ¢TU%¤|_+//Gø¢)¨ì3 Z°©+!¡¦¬X×uÐG}¿~Ÿã8ÈÏÏGjj*âââ„ñ}ôÑGصkòòò——‡§žz éé鿼¯´(ì*…+I°M3æ3f 4MCzz:222PQQÇ#ŒoÓ¦Mðxøà:t(¶c¦(¾ƒâºë®C—.]Ð¥KtïÞ={ö¬õ) *Mšã ÕçC‚aüâ¾òòr>|:uª·Û™(¾Œ_úè£ïWçS5M³dYþ‘š ÿ½ÒÝ( ¹0M3–%Y‡2M–eÁ¶m„ÃaÔÔÔÀ4MH’ŸÏ‡@ €’’ìÚµ %%%hÓ¦Ml»GY–Oº®‹/¿üšä@NNƒÞš…×ëýL×u‡>úN'_ii)ü~¿p¾ÂÂB¼ñÆhÕª  ŒoãÆX¶l6nÜEQðàƒ¢k×®Âø^}õUضœœŒ?^¯eee¿¼Ïuk}–ɲPXXÓ4±fÍšz󯮔²(>¯× Û¶ …7~¿Ç'ÌúB}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}èû:¹E(ŸÏçÃ>(lÿ5oÞ<òvíÚ…]»vaß¾}èÑ£G­€¬(°% šª6ŠoÏž=¸ùæ›aš& „ñãÇcÀ€ÂøV­Z…‚‚Œ;YYYõÇWßñãÇ‘””ôÝóOß®/ôÑ' OÖuÝÖ4m»¼c ´G§BÞ·NÿÑX¹z JJJ qüøqTVV" !‰ ¦¦•••ƒ0Mê¶‹D €,Ë0M‡Fnn.ŠŠŠPSSƒH$‚h4 Û¶á8\×EII >Éÿ‘³/†÷à'ÈX2Iû·£iÓ¦;Eqèûe}UUU¨®®ÒwèÐ!<ýôÓÂù***ðúë¯ã²Ë.ý÷Þ+ÔønÞ¼—^z)Æ£G"--­q|Ûþíæ³!ÏŸ çýÿÅÊU«PRR‚¯¾ú gœqž|òI¬X±;wÊ7cÆ LŸ>C† AVV,ËjŸiB«©lÛpt=æf}¡>úè£>úè£>úè£>úè£>úè£>úè£>úèû/òÙ¶¶mÛbâĉx衇0gΜo|w¿ïØiÈ8k0’ââÅ×£GlÛ¶ K—.EçÎQVV&”/##ÅÅÅ>|8.ºè"ìܹ³Ö÷É'ˆH¼ªŠŒø8$ùýâ»í¶Û0dȼùæ›°,ë›ù'€¯ºº ,ÀáÇOŽA|UUUß¿ø~p}¡ïÿÌ'ëº^ž––¶®‹è/üú~8-;¡Ø5ðá‡"Ç2&kjj Q]]H$ÇqÔÖ6 ²,Ã0 hš°, •••8pàöîÝ‹ÊÊʲ.3??%²Vf”Žþ=¾˜<ª¢ wïÞ{u]/?_EE…°¾‚‚¬[·NHßöíÛñ›ßü6lÊ ñÌ3Ï`ܸq(**Byy¹0¾ŠŠ \zé¥xõÕW1iÒ$Üu×]BÅG||<¦L™‚+VছnBJJJãøD}>˜EAqI >üðC 8'NDË–-w}ùŸ0ë}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôýL_vv6®¹æŒ1B(_óæÍq×]waëÖ­¸ýöÛѬY³Z_Y,IBi$‚/*CUÕFñ=ôÐC¸ñÆñÜsÏáÜsÏE0Æ÷É'Ÿ °°çwæÏŸÊÊÊo柾ŋcèСغuëÉñ!€ïå—_F~~þwǯ¾¼¼¼ï__ðýàú÷>U×õ÷zöì9dÿþýPýriÜÄD{ ÃŽ;лwïØÉê~îÚµ š¦¡C‡EQ`@Ó4躎h4 ×uaYª««á8B¡ÒÒÒœœ MÓ I>øàïrR^¸qV ’E–qþùç'†±T×u÷çørss1þ|,\¸qqqBù6lØ€Gy—]vÎ<óLÔµÆöUTTàÉ'ŸÄöíÛñ»ßýݺu‹ÕÁ÷ð㺺>ú(RRR`ÛvãùJ¾€[¸QE‰ùæÏŸ¦M›Â4ÍX†ð‰­±}ݺuC(ª·=k£øB!ȶ W–UÕï]_è£>úè£>úè£>úè£>úè£>úè£>úè£>ú裾ÿ_Ÿ>}¾ñR*¾BÜÞÍ€,CQ”FóåääàùçŸGII dYÊ7qâDŒ7/¾ø"î½÷^<øàƒµ¾H)â|>@UÅתU+\vÙe¸ùæ›1`ÀÜu×]ˆ‹‹ÆwàÀ,\¸úÓŸp饗ÖFöã¶ÛnôiÓ0hР“ã·‘}¹¹¹P½zõúîõå|ê3Ï<óÅ­·Þ¯ÈÊJ'oÓEÑ…ëá¦eCªªÀÊ)]pæ™g"'''ûøã1oÞ@mö¤¦i±¬É:lÝ–¶uÈp8 ×uQTT„`0ˆÔÔTìÝ»kÞ߈꿼‡ ?ee‡qæß§¢I“&ëâãã}:t8?Õ÷Ö[oᥗ^ÂŒ3bɉ¢øž}öY¬_¿³fÍB»víbƒ+‚/99’$á±Çƒ×ë­7ùDðM:ŽãÄj¡7šïƒ7.Š&$Àõû!¹.V®ZßH$ÛºTD_]ü6ª/­õÉ2}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑGßûdKßöíÛ…óy<ÜrË-hÖ¬Y­oíZTK‚‘Êlgff6Úø¶oß>ø ^ýuǃ+¯¼sæÌAaa!Æ÷M|à ‡Ãxî¹çpóÍ7£gÏžõã÷G|2hšv<3+ó¯8vÒáýPÏz×Töƒ5kÖ ¬¬ –eaóæÍ˜7ofÍš…nݺÅ@š¦A–åØsUUc`p]¦i"‰  ¡¬¬ {öìÁÛo¿Ã݆"ýÑk‘¶öYxËÁSUŽ /¼p‰ªªåuÇÿ_AA–,Y‚x fÉ×¥K<òÈ#õ’Õw}7TV±fÍx<\ýõ'%'Šâ«¨¨€eY'Ç/îs\H¶ %‚<ŽÊh´^|ÐG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑGß/åûôÓOk}½.AzvG¤ðj<šÞ¨>Y–1iÒ$ƒAá|¸ï¾ûЪU«oÆ·¼é^o£ûÚ´iƒÛo¿K—.Å®]»„òµoß7Üpž|òIlÚ´©~|üˆ¯.AqÙØ±c[J Õ;G’ sþ»°nœ{¿ÀŠ+`Û6Ž=Š;î¸#VÚY’¤“0u@UU!IÒIƒF …ðñÇãݼý8~Åý84c1EE·΄×ç=lÜ´)6¾ßnô}‡ïøq€O}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}bøf¯‚rùèÖ2›¾ñiš†6mÚÔúÖ¯Çq‡B!(Š‚n™™êKOOÇý÷ßfÍš ç;ãŒ3pÝuס¸¸ø›ñý >æÎ[®ëzuçÎo…mÁÉlé˽Ðþ0áËgbåîýX»v-† †œœœz˜:Љ­.£RQ”z¯»®‹H$‚ýû÷cé¶OP~É­ÈþŸ+á-ýÑæg@WL˜0až®ëÅ™™™euÇ}¯ï¶~Wcåš5X»vm½ŽÑgYVãû\Ž"C²mhUA„5>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£ï¿ÏwÝ<Åqœçñ­v’ïö°KÂÖuM“¾Ÿã«ª†ZUÛç§>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úèûïõÍø'rºöB—ÌLú~ޝ¦ÕŽƒ’H9ßë‹yõêÕÖ°aÃ|ýúõ;¸aíšÑrúª=nôWçÁXò0ÛÆPVV]×ѼyshšÃ0 ªõ3(£Ñ(Âá0lÛ†eY°mؽ{7Ö¬^h4Ф/wC×4Tv9->û‰¡²è‚ùóŸ÷x<ÛÓÒÒ>ývžä“ Ú^/ôH†iÒ÷s|ïo-« }ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}û6#Ñ®¡ïçø躎ÊH-’’÷¾z©kÖ¬)7n\Ÿ&MšümÏï^¡mX mÛJÈŠE–á¸:„={ö ¢¢¡P^¯ 'eJF"”––¢¸¸ÀÊ•+‘ŸŸUÕàøVü2?Ûˆ&Á#øÓŸþ4­E‹‘äää%øžVÏ÷É'Wh–Íqè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>ú裾_Ò—œ„̦MÑ$.î{}ÒwAŸþù鯼òÊŽM›6½'+ dY†,ÉP²,Åóù|HLLDÇŽ‘˜˜ˆ¸¸8H’„šš”••aß¾}(//G0„¦©0 ¼^/|>¼^/4Mƒ®ë¸þÆ7 _¿ô„„„{ð}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑ'¶ïû=>ŸïÖ-[¶ä¿øâ‹¯I’dȲ«;-IR,cÒq¸® ×u¿> à›ÕТĶ‚ôz<ðx½±m! ÈÞyçÓ;vìØ,üE’¤ðOì@úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£O`ŸôCÐåË—Oƒá;ïºs¨µ®’Š\û²¬@†µ8I$Hd)Ô4 šªA7t¨šCסª*ÒÓÓß|à>Œ¯òûý‹~JÇÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}§‡Oú1äªU«ÎWUµ×âÅ‹¾·nÝ\Éu³dU­EÊdY"É•Ú Ë3-몪Æ>Ÿï«ßüæ7 .¾øâfÖ{<žJçÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}ôÑG}âú~4A6mÚäµmû I’^xá…/¶nÝzišCê ²,CUH_?W¿~MVT¨j-099iÃðá½6f̘4EQކñwI’B é<úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£OLßOJP<š¤ëúeš¦%VWWW¬XQõñÇw¬®®îi™Vǵ[(Šfz ½$·¯Y³fÿîß¿ÿ¾áÇü~¿WQ”c†a¼,IRÙ¢ãè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>1}?+AñĶgÏž–º®Q%I’$E–eEQUUUI–eGUU[UUG–åc²,¯òz½ÿ/:>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úè£>úèÏ÷ÿÞhAXNÅ?IEND®B`‚Carla-2.4.2/resources/bitmaps/dial_09d.png000066400000000000000000000066671420416754300203320ustar00rootroot00000000000000‰PNG  IHDR((Œþ¸m pHYs  šœtIMEÞ.;Ä·= VIDATXí˜kŒ]Õy†ßuß—sÎÜ<ÏÍ£`._ µAàÈÔØaÂE PBã$U©‚Ò‹"ñ#B¸J~E 6(?šª@U‘ QRW²sn{ïµ×Zý1çìÎxL¸¤KÚ:çlí³Ö³¿ý}ïû­Mð%‡ïû}ιBˆUŒ1Á9ç„ÆsŒ1ÍKcšs~ÎZû?§NúèˬC¾àõ-Bˆ?BtRJµV[k :ç¾Bé )¥³”Ò“Bˆ·r¹Ü»…BAqÎclNký̱cÇæÿ¿}!Ä÷cÖÚŠsîf×85F)BÀâŽsPkA¬­_Æžëèèøuggg!䜵ö©C‡Õþ`@ÏóntÎítÎEÖÚ{tJaÂ1iBV*ОBD!ÈZ –R€¨8œ%t²§·ç'}}}„#£££Ïý¾õÙgÀýÀ 1æjkí=DÊœij1Öóà„c¥@ÓŽsµFˆ8ö=€0kù>¨1…r±øÍO¦§Ïöõ÷Oþñ{ï½÷Ö  ‚àþ4M­1æ'„1iƒ,Ž¡››AµÕi@U*ÐJA$ @êÓ9‡´~.ò}¨8†á)c+U$‚C& ˆsñ•W^ùížžžK‹Åâ? Ç‚ð‹Ñår¹û1‰1æ!B)lÀú>¨s`q #%<­±®»CÛ·£¿¿”R!Eæçç1;;‹ž§Ï~ŒÔXÄ’Bh”3h)AÈ$Qo¼ñÆÞr¹¼cÓ¦Mà‘ÏŒ`SSÓ´ÖíI’üJÁärà¥Ò0„c AµŠÛn¹·Ýr *• |ßG†hkkCËæšŸŸÇÛo¿#GŽ`äÀ$Æ ây`ÎÁ‹#Ô<²¦×l¹æë—]vYç£>úëOÍÁ¶¶¶sWÔjµŸÆƒU NJˆZ —ôôàW¿ü%ºW¯F¹\^¬XÆÀ9‡çyPJ]˜ÃhkkÃúõëqÅå—#‰"ÌLM‚%)jžG¸1€³˜úð£?»bݺ'·mÛÖ}øðቀ½½½>€{ÊåòÕ„±+ÒææÅGE°RâÆk¯Åý÷݇O>ùišÖSÍe€J)ø¾¿ 0MS$Ic Z[[±~ýzPçpj| ¥PQËÏ× ?vüÒ5[¶Ð-[¶¼}øðát`>Ÿÿ«J¥"Ò4½ŒÁ [×µÛ·mÃ÷wí¹sç`ŒYž#„€sß÷W<â8Ž‘$IvCRJ\~ùåPBàƒwÞA-æ#µÜ0«ËåÒ?oذaË‹/¾ø&Pèïïoáœ÷Åqü·NJ¤¹Dµ EXÛÓƒïîÚ…(Š@)¥t„1Æ$I²ì¼sišÂç\v^;wâÆíÛ¡¬…ˆc¨xQ7¡NŸúçÜ衇Z2@ÎùÝ¥Ré<€.ÇùbØ Jñ?û„RÂó<!–A6@´ÖË@Ò4Í/žçá¶ÛnÖ¯~Ô9Ô‚–RXÆA ™`ŒÝ±°=Š¢o:ÎA¨…ð$Á·††ÐÛÛ‹îîn´¶¶"(¥ „©kÞÒH-…ÑZ#MÓeÐ@)çضmš<2MQˆcPBà8Ã|ð7žçå€nذ¡Rª­µ×Yσö}Äù<<ÆðÝï|mmmÈçóèííÅêÕ«ÑÔÔß÷¡êùya14 —þÎ*’1! ”‚çy¸á†ðµë®s%¥Pa ¥°Öݬµ>ÿØcõSÆØŽb±X#„€×jPµXšâ’þ~tuueú¾ööv  ££afÎ9Äqœ5r²=BȲyÂ0Dð}6l@($„µhrM„‚qŠƒ/¿\Bl§BˆUµZíG)¢BZPkñ§[·bõêÕYþI)áû> …Ö¬Yƒ´´´dZkÄqœUo–R ¥Â0D>ŸGÙœabëÖ­h+ÀÔÁ4@NMLlTJ5s!5Æl¥`Ö.&+€ÁÁAðºùB@)…sœól|>ÉÉILMM!Š"Ôj5´´´ Z­f×6"%¥çRʬÐ(¥X»v-6mÚ„ñ—^‚ (¡ ‰Ö[8ç¿ãRJj­½”‚% ¸s À Mk€.ÌÿåR.—Ckk+ÆÆÆP*•2Ý Ã…BafpŒ1BVýýý¬ç„1Jà¬]/¥|žsΙs®Ýpíy‹2¦+\áb°œspαfÍttt`ll B\zé¥ÃpqÁ:Dã?›§³³ ¥(Z X‹vÆ'¤K)Ź”Ò×´ž7’‹eI¾Tó.ülD¹\c §OŸÆæÍ›áÕoöó B>Ž÷ßÅb1ƒl<‰±±1ÌÌÍ!%³qŒ‹ àœcóæÍïK)ç©”ò¹«®º*tÎ-:ÉÂD¥‚„1¼þúëÐZ£Z­¢R©d¼°1`ŒeÍjC#“¦)*• fggqòäIœ={µZ-ËáW^y qŒ)qYK Z[ÁÃöíÛ›”R£ôñÇÿ°¹¹¹À(ÛO’I.‡$—ƒV û‡‡qèÐ!Äqœ]¬BdQkÀ6r­Ù(¦ÉÉILLL`aaGŽÁ訂ã§K%´ærhiiy¾P(ƒƒƒ§yý®úúûÿàÄÐ8Õ ŠŒctt===‚`…ì,m@ yB,k¹Ú(ºsçÎaddgæçÑíûHCd >Žýû÷cll œ „¹¹\]m­è[µ -ù<xàûzzzâ¶¶¶ß,Ëó‹yãž={~üôÓO¿~ðàÁç(c‹E(£ ”d ‚ÍÍÍX·nš››‘ÏçAAµZÅÜÜNž<‰ùùy”J%Á¡”—mO}ßÏ4óÞþð¯¿výõÝMMM?]QˆŸèAð£Ã‡=ùä“ÏBTÃG—öt2ËZ” À-ËÑ¥½£ïyðêû™úf?Ù½{÷×­[מËå~N‰>`cìÝ»÷/K¥R´ûïw=MÒ¿ Œ‚ÑŃ0 J(á% ‚ H%Á…€ª7¯ÝÝÝÿõàƒ¾Z(Êaþ˧1|æ Ìáááíœó?yê©§N?÷üóçú)ç‹”€RF((£Y·²4zKu±¾øx×®]Ü|óÍí^ð<ï¿ßúŸëðÁƒ}cÌ÷!MO<ñ㝽öÚ=Zë J)8c éiä-ãà|°­­õ¥¡¡oKa›ÃNIEND®B`‚Carla-2.4.2/resources/bitmaps/dial_09s.png000066400000000000000000000073271420416754300203430ustar00rootroot00000000000000‰PNG  IHDR((Œþ¸m pHYs  šœtIMEá 96¼¥lvIDATXíXipUeš~¾íœ{Ï]’›˜•l@ »d_Ò!Ñ!j¢ ­(M Nõ`¡íÈP¶Ž3.Ø›ÓàXÝ¥4-¨ÝvËÀT$€A¶4&€ I€l÷&¹É]Î:?¹KÜkÞªS7©:çûžó¼ïû<ïù¾c8Îl˲ !®cŒ Î9'„0ƘÅÓc:cLãœ÷š¦ù~SSSÛwÙ‡|Ëû}Bˆ !Ò(¥–iššišyŠ-ËGI QJ{(¥ç…§Ünw£×ë•9ç2c̯iÚ[õõõÿo€N!Ä}Œ±<Ó4‡,˺À,Àuc€üëAÏ} cÑrlÏXÓ@›ëAz/cûSSSßHKKK%„ôš¦¹íðáÃá¯Û˜}Ý ‡ccì~Ša÷[Àb";³ŒU/ÓÞ$èk~v¦zÕ#°ÆOíøѧÞ½Ô}Á=0æT‚Ø?vp ÿöîή".ø¾”””ùùùùrSSÓ…¯ÚŸ~ ¸Ì1 cŠaÿ†âYiƦ£° gÀ*˜³l hË€•’¢«€¦ÂJÉ^üÂeK`N¸fÑL„yzÁ´¬ööö׎;6™1–QYY¹ü»”EÙ`šfš¦iO—¶ÈZù"ˆ†5~ Ì»VƒØË› âI=õ!hÐñ×ÍÝ Òßvú#À›Ë“ñá[ЪVÁ;4FôÇÏ"âò-;xðàï@ßÒ¥KZQQ!ã»Ýî'MÓTu]–H23ïYsÉ£ —/€ô´Ãœ½Ž­Ï °íS,›”…¥‰Tæ`qQ6nÊIÂô“Û?E°ñ"‡ÞZ½wÄþm°<>¨w¯±,°3‡øåöö¥^7n\å©S§_‹eT“$$$< iZŠªªÏbÚÍ0Vo_ôŸþÖØÉP½•¥3QY:CCCp:p¹\HNN†¢(qkœ>}uuu¨ùä$T·C÷ƒµœã×#¼á-H¿ú èÉý˜5sÖ¢‰'¦½òÊ+o|)ƒÉÉÉ ,Ë* ‡ÃˆÇÇ=æÂû`Í^ ±i5Æ·Ç=|72“088BcàœÃáp@–ã³äp8œœŒI“&¡07 jgº>zìØû¯ÙË—~t¸‚ަÏï*,*ÚRVV–yäÈ‘–Q5˜••åäœ/‡ÃshRš¤ÿö$W ñïw–…K ðŸU7¢»»Ñh`FìÒu}T©èºÓ4X±bnËT ‚Ý ¦ Ç,ƒ™[„Ȧ:X‰×9þ¸}û?pΧ¬^½Ú9  eY÷…ÃáA˲*àñ½—¡/ fiªÿ²÷/ú>zzzb^}º®Çš¦A×u†a×6ªªª°dö÷øÈè¥UPïÝètàÀ&dz4.Å999>ÆXyÿCÖ´…ncÕ¯!~³d ùÝgñØ]·" Á0 X–˲â€pÎ!I<OøH$MÓâÀ3Æ——‡ÈÐ šÏ6]!½·ÑG6Cô\Dã‰9sçÎýdáÂ…ŸïÛ·/B¯n°4 öH· ¦Á[õ@t]Ä Õ7BI’àp8 „¥t‹š¦Å·™µÙ»¶6+++1Óê½Ò‚ðó{aæM‚9q:(ay555-Œ±êXŠ9ç)‘HävkâT¡~È?™ ¾ç÷¸#CBVV233‘””EQ Ë2„ „Ä´kñÚô^Ë6¥œs¤¦¦¢¬¬ CÚ»ÞÇÊ@C°&Þ€ .ü³Ãáp›ÏýA„Ö¼uz9ùÓ½gÍšµ½ººÚÏ222îôûý,–Ó³u`ͧYAaç,[T¯× Æcp8p»Ýqj×%!>ŸB†ÁÁÁØ‹BâÊÄétÆ2Ñ×ׇ“õg '¦ÂýÎKpð&˜¥ë[ ‹‹‹¨âºp8<ÞJÍAäõFh·ÜÚr7e¸‘‘÷ÆN§^¯¹¹¹ÈË˃Ïçƒ,Ë „@Ó´˜üD£Ñ»”RȲ —ËÇEQbkº\.”––"¹ësð¶F„­@çËŸ©9hji)‘e9‘ !¨a%ðøÀÎÖÁ3¦®¢ØÕÎyŒJ),Ëç<¶ÇãA{{;:::‰D‡áóù …b÷*Š§Ó I’bÝn7¥ùùù˜2e š'Ü35rÓ wÔÞ–™œó}\’$jšæ ìлàý= WZ <¾rT÷ÙÎa×’,Ëp»ÝHJJBCC‚Á TU…®ëp¹\ðz½p¹\1pŒ1BF]999P¶>ž=Ä— "˰Ls’$I8çœY–•b\_íG?–?ýN§_„pÎÁ9Gnn.RSSÑÐÐ!&L˜—ËÎy „ýÌ­“––uv%úoÿ@ÊŸOGcº,ËœK’d?øè¹OÒ êœGFI„ýÿÈ_Ã0 ª*ÁCkk+f̘‡Ão„8>Üï¹£Ãäïˆy<—$É ”vjã¿—¥-{–/ÆÁwÐÑÑç6([ïTUE4E$Áàà B¡dYF0ÄÞ½{QRR‚1cÆ€s'ì_@‘[@ÿìJˆ`ÒvmFBÈß)I¸B§”6"Êzú#æz´„­˜;Œ5Ò_#‘B¡4M!Š¢Àív£«« 'OžDWWòóócé¶ãÚ¬´µµA49FæxC…Óé<+I’É%I2„uÚ±= Ä`?Ì’y0KïÀ®ß¬ÄòåËáp8b¶e3h3§ªjLëìu»Ýèéé¦i¸t醆†““ƒÔÔT!bMf×fWWþÖЈèŠá9÷ nƒïR#®ËÌ<Î3¹$Iôôô+Í.@]·VrH_:-‡Âܹsã€dÑN;!²,Ç4Oh4 ]×Ñßßææfôõõ!++k› è¢ ôìBôLš‡n¤ß¯×«·ò«o=“ýJsó…[È¥&Ðý=ú?èŸS…={ö`̘1PGŽÁË/¿Œõë×DZ7r³åÁöd¤¦iqÒÔÛÛ‹šš\º~2õOЧ—#2öz8¸¹ºj;ç\WÇ-!Ä;ÕÕÕ¹„ …¯[  mã>è+7â๋عs' Ã@ww7žxâ‰8[¬möF´Ezd·jšUU‡qâÄ ì;Ó„{†ŽÝÆ8®ÿÃ8ç¥Å‹gʲ¼-ð¹çž H’44iÒ¤U0t˜ÙAÚÎA8{Ú fŒƒÄ–,Yò¢$IÙÙÙ~ˆ­ìñxÞ\ºtéƒkOúoþ‹‡‚ÛãÉ­0'NEðJ ÞùÓfD£QÌŸ?.—+ÀöØ‘a3È9‰=0<Ͷ¶b×îÝðß|?†JïBWn1Jvl€bD‘™™ù犊ŠTMÓž‰‘`ÿQSS£———+óæÍkýhïž;hæ8nܹÒŽ!o¦a ¹¹~¿’$ÅF1Y–G1¨ª*"‘HìkÏ0 ôõõ¡¾¾{jj ª*’Úê! þÉ?À˜³#1ìW_Ú¸ñ5‡ÃQ—žžÞ³ÁkmgÓ¦MË=zyÇŽ5$c,Xw(c`”‚PJ(¼^/fÏž‚‚#'''®Þ‚Á ü~?:::ÐÝÝÎÎN:t}}}%NÅ EQ ¸X)9ð†X»víª¢¢"-))é•8Ÿþ"o|íµ×óÍ7ÕÖÖî§Œ ‹*¡`Œ‚R{LQ$&&¢¨¨‰‰‰ðx< „  Áï÷ãüùóƒ‚C–‡§i{F´5óÁ•+þþ¼y™ F _С(ʪ#GŽ4lÙ²å-Bˆl+ÿH›Ó4G Àp½Ù÷ŽœWÇ}Î9dYV×­[÷xQQQŠÛí~–ùFíx÷ÝwWƒÁȺ'×-ÒU}9aŒ_„QPÊ@A`a!.…«…\@’%p! _^333ÿòôÓOòz½ƒ.—kó—aøÚÖÝ»wÏçœOß¶m[ëþž#–•C9ÿ{MRF((£1ÉÞH]¼ú pùž{îyéÖ[oMðÃáøß¯Úÿ×ÖÖ: ø—’ðúë¯_Ë•$i!c,‰Â(¥Œ1Æ9ç„RjrΠιI)í¥”îv:­ßeŸÿw}\¨{é¥iIEND®B`‚Carla-2.4.2/resources/bitmaps/dial_10.png000066400000000000000000000400161420416754300201400ustar00rootroot00000000000000‰PNG  IHDR ((nQàé pHYs  šœtIMEÞ,"’ê÷C?­IDATxÚíÝwt”eþ6ðëéÓ3©„„Z$DŠŠÒAAEÔeEt­ˆË²®…µïª+¢È®øs» èkÛU,°AšôŽÔ$…Ô©O}ÿ3$”µdî„ïœãñ“„×]æš'wžáðv»=ò¬a’$% ‚ ‰¢(r'‚` ‚  ‚  ‚ ‰¢xÜ4Í%8òSÿ.ò‘|ä#ùÈG>ò‘|ä#ùÈG>ò‘|ä#ùÈG>ò‘|ä#ùÈG>ò‘|ä#ùÈ×¼|Üÿøùñ’$ýV’¤V<Ï[¦ij¦i¶Ðݲ¬Ç¥Ðxž/çy~Ÿ$I[].×Ç£ˆ¢¨‚P¡iÚGÛ·o¯ü•r#ùÈG>ò‘|ä#ùÈG>ò‘|ä#ùÈG>ò‘|ä#ùÈG>ò‘|ä#ùÈG>ò‘| øÎö€¢]’¤›Ahgš¦ß²¬+Àóýaš°†Ý)¯ë\R‚ã_}…7ÞC’`qU…(KSRRæ´jÕ*…ã¸ã¦i¾·fÍšà/Ü©> ?p‚K’À8Ó„qéxp¥G n_Ëøìvp†Q×a¹¼à|UìúXÏãÀYùÈG>ò‘|äû¥|gèáøxðš%`³ÿ±’ùÈG>ò‘|ä#_sóQÿ#ùÈG>ò‘|ä;·|ÔÿÈG>ò‘|ä#ß™|žXz‚?ºÜñïÙóŧÀʾü¡íàŽ°çc5¿&:ÿ÷£m6Û%–e ³,+dšæZ™n7LERUS¡¹Ýü~ˆš†¡¾Ÿ3»ïº a§† Àé«…Éñ0y²aµIoóXFFF+ŽãÖ/Z´héÏIît>H,› b0xÒ@TU_X qÝ|ÈïOCxÂó0“ÚÀ1m`°,ð[Ÿ× QU!ƒÿmÌÖà¸3°,ö|õó“l@8È–Ïé„Éópøj› ùÙõ)¶óãxöæùÈG>ò‘¯I}?Ôÿû˜ë äG>ò‘|ä#ùÈ×Ü|ÔÿÈG>ò‘|ä#ùÎ-õ?ò‘|ä#_‹ôet†Õ$ÄÏgÁ„Éž¯S.¬Ën†øöc0M=_ýü:ö‚v÷? ½÷ Äoç³á«?ÿz…6õ HŸqñö|]ú0—_Sžÿãw€ Ãè© Âc¦ÛÝŠçypºpLQouŸ,à UTLA€`8节°ÃçÓ‹ŠŠÞÞ´aCŽ ­¯¼òÊ›FxQŸa¡îÖ“°$ †ÍóÄÉâº)ˆ2€ T3³+ø’ÀT› !— ;Ww^”;ñg3«7øÃ{ËbÏ×8¿‘ºg »› êæoÇC½å)„þ±†+žMëù±6ÿÈG>ò‘|Mâ;›þw:SýÆ—|ä#ùÈG>ò‘ï¬}ÔÿÈG>ò‘|ä#ùÎ-õ?ò‘|äcØ—Ñ™m_§\¶}‘ü:åÁt=Ì.}ØòEæ_Ï‹`Œž3o›¾úù=P÷É ­ØñÕŸ‡vÔ}rJ›>Fò‹Õù?á WÇ#†a8u]”ã¸.Ö‰S“¼®CÐu68Žƒ¨iÐ<‡ÛÌ{îAåWKP±f-4Y†¤ª`!l³C0 ØT º("$Š=‹ºÂëõÎ½à‚ FeddlÜ¿¿q–ÙâƒÓ Ãã©ó E‰ú¬) ",^€°w8Ë„>àˆë@(Ú°ÍÎ4¡h: A€a=6­ã`YC—”}dÝ©^aßö|Þ”“ù•FxìCàªË ¬þŒ W·(DMƒàp#|Ï,påG¡Ìƒ=ŸÍÑ0¿vÙ0ÂÁž‡÷ïeÃwbýFç_·~0‚þž‡÷íaÓÇz~¬Í?ò‘|äûßÙô?É4¡É2D]޽þGãK>ò‘|ä#ùÈwÖ>êä#ùÈG>ò‘|ç–úùÈG>ò1êú[w> ~ß&Ç¿gÏwía<ñ1ø­_C8VÈž¯~~{×Ãx=8ž‡¸m¾úóïÈw0FOÇ WÏcÏWRx2¿ a¥ux¤c‡ØðÕ_¿µU°Úç€ß»RáNö|þZ&ò‹Õù?ñt:—ËõgÃ0Tòž1=ˆŸ¦× Ãé„PSQ×áözqçí·’„¤øxx=^~•¼€#¿ù æ/[† ¦!Èñ°(jÏ!l³$UU6mÚô©Ïç»´gÏž“Ì8›ô¢>Ãx’Î4Á…Ã0ìö¨O ‡Ñ¥CŒ¸äddd€çyH’„P(„Êl/ÊË˱üÍ?¢¨¤A^€eYQ_ÈngYpøý±ñUVÖù„¢ÒRv}‘ü2³aq<”Eï°å[¶EG‹ìÒ/@ùSÙôÕÏÏéAèwOó×À1ãV6|V½ùçI@èáwÁÕVÀ1é|ö|¬çÇâü#ùÈG¾Æ¾ŸÐÿü~?**+Q|ô(»ýÆ—|ä#ùÈG>ò‘ïô>êä#ùÈG>ò‘|ç–úùÈG¾_Ó×.\Ùp᛾n}Áí¬eÓÉoã#n…qí=ž¿_dþ-ÿÆÂ˜8Â.dÏ×8¿Of¢‹[ĈɓÙð5X¿ÕPfÝ.²Æ¨¯¦Q~ øì¡Æ gÇWþÅž iT6}±Êó\ãÄÅÅÝ¡iZ²ªªO[ §¼¦Aª­…i³As80¼OŒ»î:„B!Øív8N$&&Âáp4ø^•••ضm–®XekÖ@´Û¡ ìÁ ]ƒ*É4ç÷íwYçÎ[Íš5kÎ…WßQ„îõ‚×õ¨’„±—_ŽÇÃï÷Ÿ•oýúõX´d ´pA› º(F}&Ǧþýú“ï‡|«ÖB«:ήoíhÇKØõEò»õiè]ûÃþÆŸ!|÷-;¾Èü{ìèç ƒý¯c lZž¯q~ñ­Š£ìøÏ¿”¶@I»>Öócmþ‘|-ÄGý¯e/ùÈG>ò‘|ä#_cõ¿–=¾ä#ùÈG>ò‘|}ÔÿZöø’|1õ¥dBh6øƒÛ ͺ¦,±åKÏ‚>kø«!=v5LIdË×8¿óG™Ý0Vü#† н¯ñü»ü6 s>ÆV¬ÇˆÁ³ç»ð*¶ócmý’¯EûXè Þâ911ñ˲ºC¡Ç!Š‚ iuï5­(€  W‡øÓĉÈïÙ@ÇAˆ¢›Í†ýë_ظq#òóó6› ‰‰‰ÈëÕ ÙYY¨õûQX^YÕ h4EªØžÇ÷^×µ[·Ùƒ J[»vmÁé‹ú‚ÁÇ9Žxà¤ãÛ©^˜6 ©­ZÁçóâS .ÄÇŒD}ÙÙÙèÒ¹3Âá0Ž-§u>¹î}³]Gqáá&ñÀÎ;ñÚk¯aذaLúÀçóaÞ¼y2dH¯C;¦|‘ù§ë:úöí‹.í2™ôEÇ7’ßïÀí…°q1[¾Èüۻܭ–}À¦¯~~ÃnAøÆG |·Å;6³á«?ÿnxáûß„°ù+où–=ëù±8ÿÈG¾æîû‰ýïL>–ú/ùÈG>ò‘|ä#ßi|ÔÿZöø’|ä#ùÈG>ò5öQÿkÙãK¾Ÿïã·,v}ã>^ø@ Û`ö¿°»‹jv|'ð¾J@qÀ¼ì&À‡\ÿ¶|ÁÚ†ùÝ„nƒÔ¤D6|ׯÄ ¿¹©I lúœÛù5Z¿p¹\Ìú8ŽÃÿû_´oßn·›IŸ xýõבœœŒ6mÚ0éE³fÍB8FÇŽ}Cçÿ¢ÓÓÓínõù|çNgWÃåoÂa€ç‘œšŠ§y¦¦A×u¨{?ì@EQ°k×.ˆu]‡ªª0  èÙ£UÅ‘Eh²A×!ùýà8ˆÛwî¬í߯߯_¿mk×®Õë‡WßÇ BWÝëošÂap‡¡çŸ{&OFYYÙ}v»ß|ó  oß¾§ø²³³Á[ ÷ïGH *u¾º¿£i|°dÉø|>ôë×I,]º«V­ÂÀ™ôu=ï¿ÿ~\yå•Lút]GUU^|ñE >999àEá²/˜ñEæŸÍfCnn.øc‡P¸àæ|Ññä7ø¨Ão…pp„UóÀé*¾Èü»ö>¨7> açjóß§…Øò±ž«ó|äk澟Úÿ~ÌÇBÿ£ñ%ùÈG>ò‘|ä;ÕGý¯e/ùÈG>ò‘|ä#_cõ¿–=¾äû™>w|Wý¾×Á—A(9̞ϛÜUŸ¹|ñ~EûØóÕÏoíçà CíÜsûÍløêÏ¿MKÁ‰†j‡qÏïÆ±çÛ³žíüN³~kkk!I³>UUñî»ï¢sçÎe™9Ÿ®ë°, S§NEVV’’’˜óEæß¢E‹ I²²²˜ô ‚€]»vA×uäåå1éEûöíƒeYÈÍÍýÕ},ÿ‹Pt»Ý·ùý~I×õ;9Žƒ%I0l6p‡ÑC‡âÞ‰Q]] Ã0 "ÇqEv»»wïn ‡ÃPU5ú’eݺv…(Iغ?xMƒ-xšÝžãÎó×Tÿ3''§ß×_½¥þßSßg‰"L› †¢€pͰa?nŽ?þƒ>‡Ã%K– 55999§õuéÒ²,cïž=0 J p EhZçù|µ¿ª>úè#ôìÙíÚµcÒo½õúô郶mÛ2逗^z ½{÷F—.]˜ô…Ãa¼ýöÛèß¿?“>UU±eËL:W_}5“¾ÈF¸}ûv 2¤Î·~5L5 å½g=sß)óoÍ×0Ã!(Ÿ¨Aö|õóSl0ú‚xx;¾úó/. Æð[ îÝȦÏåe;?Ö/ùØñýÔþw6¾X÷?_ò‘|ä#ùÈG¾S}ÔÿZöø’|ä#ùÈG>ò5öQÿkÙãK¾ŸéËèóüQ0.¸ |8ˆkºg²åËʃ9â—ß>èÃ5íÙò5ÎÏ^…ñ£G²ãk<ÿÚ80~Ôpv}Y­¢ùmÙ² _½õ«ë:ž}öY¤¥¥!!!9Ÿaà8Û¶mCQQºtéœ/2®š¦aÇŽÈÏÏgÎy躎;v`àÀLú8ŽƒÏçÃpÉ%—0éE¥¥¥¨¬¬Ä\ð«ûX:ÿÇ@fff¼(Šápø÷–,CÐuÈ55àU¢Ë…k¯»š¦çyð<ßh Àªª >nYt]‡a°,+úqI’0ü²ËpÕÅÃiÐd !·º,Á’E8xà%QíÏ<óL|äkêû8A€`««ÁkÚgdà†n@(:+_yy9Ð7lØ0\6t(õ|ªÍ® |°gÏtéÒ…YŸ¦iX»v-úõëǤª««±råJ\zé¥Lú,ËBii)æÏŸn¸IŸ®ëðù|øÇ?þ»îº Ç1ç3 ¦ibæÌ™X·nÝI_^78¼Mäcî‹Ì¿íÛ·cÑ¢Eu¾ìpÌþ 4cÆ×`þEòë3 ¡?φ:z2¸öÝØñEæß°ñÍÚuÂtpÝÎcÏ×oÛù1°~ÉÇŽ¯¥÷¿s}|ÉG>ò‘|ä#ùû¨ÿµìñ%ùÈG>ò‘|äkì£þײǗszØö¹ãÙö9=m‡üÌxð{¾E{§À–O ìZyBoð— ½¤³çc=¿3Ì¿åË—cÿþýÌúxžÇ¶mÛ0wîÜèßÉšO\wÝu˜={6B¡s¾Èü9r$¾ùæTVV2é€ .¸›7oFMM “>èÞ½;¶lÙ‚@ À¤Ï0 dffbïÞ½Ìú ÀÇãAyyù¯îc­ÿñ ŠâØÚÚÚ*S–S5·ªÛ ˆ"ܺŽW§N…Ûå‚,˰Ùl$©2Ñ4 wÜqî¼óNu'g#Àƛ͆«¯º ]²³¡Úíà- ®pÝÏ í.\X ˜ÈçG|ú4 Óÿö7H’tV>˲ðôÓOcðàÁ?ê»òÊ+‘ß»7,IŠú$p¿ºfΜ‰víÚ1ë³, >ø \.“>8vìF§ÓɤO×u,\¸Dbb"“>]×ñÆo ??=zô`ÒgÞ{ï=ÔÔÔàî»ïfÒß~û-¦M›†öíÛ3éêžl^yålݺõ¤¯c.øê2¸^Rñþ˜ú"EQNúz _^ ×ãWA:°• _ƒñe0?Vçùbëû¹ýïñŪÿËãK>ò‘|ä#ùÈרGý¯e/ùÈG>ò‘|ä#_cõ¿–=¾Rµ‰‡úû™@§<6}S?‡:mÐób6}‘üZ·‡ûG0ý¦«ØòE柿 î¿ýÓÇ ‚$I$‰-_Ø× ¿­[·âƒ>8å Kë·S§Nxýõ×±cÇ&}6› ¿ûÝïàóùðå—_2é“$ ݺuC·nÝðé§Ÿ2éãy^¯çwÖ­[Ǥ\..¾øb”——3éǃ[n¹ªª2é³, iiixä‘G˜õ麎>}úà©§žúU},žÿ‹PL…BWó¦ !‚%Š»\è”›‹œîÝ£·cu8P’$ã¸ÀÈIÊÈC;ñ^Õõxž‡(ŠHIIÁÈË.C"W8 Ѳ J’ˆC‡Ým³Ù\õL…BWs<NÓê|N'F]uÒÓÓÿ'_ä=³ÏÆ7hÐ $ŠbŸ% ¿ªZ·n Ó4™õɲŒ0뀌Œ ÜxãÌú4MÃÕW_›nº‰YŸ®ëèܹ3n¾ùff}X»v-î¿ÿ~‚ÀœÏ²,lݺ/¾ø"¦L™‚œœæ|PYY‰|š¦¡oß¾'}‹ß‚ë¥ßC<°%¦¾ÈcÓ¦M˜8q"ìv{oî_áz`(Äí+™ðEæ_RRRÃüŠ÷A½p4¬Ì.LøN™v7Ô‘`eå±éSlçãõûKøÎ…þw./ùÈG>ò‘|ä#_cõ¿–=¾ä#ùÈG>ò‘|}ÔÿZöør² \á.X™]¾ó9Œúíx¶|6¸=ëauîðÿÁ¨oaËw†üRSSÙðaþ9NÜÿýøî»ï˜ô¥¥¥aÈ!0MÓ§OG `Η€ÜÜ\Lš4 sæÌ‰Þq%ŸÃá€ÝnÇ„ °uëVTWW3ç‹Ì¿Ñ£G£]»vÌú8ŽÃÕW_!C†0ë€Q£F¡U«VÌú,ËB¯^½Àó<³>Ó4‘À¬O×u4~œ+ýOÈÉÉɰ,+§²ªê€ ëÂaH’„Gï¿=²³!I\.DQ„iš0M¢ ˲ Iâââ Š",ËB 8å¶‚ DO‹Ê²ŒöíÛãû¢"ì,.BP–¡ò< ŽƒÝBçóû÷ÿ`̘1˲r*++oá8®Î Á!Ixâ±ÇжmÛ_×wô(ö.„_Q ž8Ý/[èÜŸ|äû™>MÓ ³>UUѾ}{H’ĬÏf³aĈ°ÙlLú€ºÃ\pòòò˜ô†)S¦`À€˜0aìvûIß‘ÃØSXóõ[[[‹™3gbéÒ¥xðÁÑ¡C‡:ßáB&|‘õQVV½ å¸qãêòKì ÿÏCíÖ¼eBÞ»­ý¯ã…ð?9jŸáu¾M_±åKêÂv~-áùú_Ë_ò‘|ä#ùÈG>êçÖø’|ä#ùÈG>ò5Çþ'ˆ4Íü*+oáD ‚¦²ëã8»Ö@øæ8Š÷à‰ 7±å3 Aøâ58öoÀ¿»Ž-ŸeBؽî”üžxâ ¬X±={ö„Ëåbnq¹\èÞ½;f̘}ûö¡gÏže™Ÿ$Iðx<8ÿüóqìØ1¼ÿþûÓ4!I.ºè¢èÏíYó™¦ QѺukf}õ¬úXZ¿äkæ>Fû/Â¥ÕÕÕAC–ôx :0ÝÛ·Çy¹¹$ Š¢Àn·#99íÚµCJJ œN'EÇq°, áp8 ޼'uä †ã¸ßÇétFO{÷ìÙ¼ B6Mx- ©Iä±zåÊZI’†F|Ç!äñ@u¹`ÚlÈéÜ©©©¿º/''NI†bšˆ·,Äq<ò‘|ÌøxžgÚ×½{wôîÝ›YŸ(Š˜6mnºé&8æ|ÇaË–-ˆÇo¼¾}û2ç3M³fÍÂÿøGdeeá8é;^ eÛrÄÏyq‹ÞŽéúÕ4 Ÿ~ú)n¼ñFÔÖÖÖùŽîƒ²êÄOý-âæ>ÉÞþÂP~,®ß_ÂGý¯e/ùÈG>ò‘|ä#õ¿sk|ÉG>ò‘|ä#ùšeÿ{ôÿAøw˜ƒÇ"§{Sùq‡Ð›Û¡>ý9Ì1DNNOö|‘üÎ…›Áž/²>L9j RSSQ^^ŽaÆaΜ9e™  äˆÁh~O>ù$ºté‚;î¸sçÎE\\sûË\€Ï>û mÚ´Á¡C‡˜óÙív¤¤¤`Ê”)˜1c<s¾Èú4hzõêŬ/%%.—‹i‹ó|ä;W}¬ö?^’¤¤`0Ø‘ LQ„j³Á‘€Ö­[78ñh·Ûáñxжm[´k×ñññQ¤¦i‡ÃÐËó<EÓé„Ûí†Ãáˆ~O§Ó‰‹.ºí<¸ 6ž‡ÎsÐx z(Šâø,¼iÂhŠ‚¾}ú4™/ÑãË0 ð<4à‘|ä#ùZŒ/==iߨQ£ðè£"))‰I_||<ÒÓÓññÇc„ Ñ©]t}%pýûïPnfj1›ÿþ÷¿1~üxaÚ´ihß¾}¯ü\ÿœ eÇ h†ÓõQUU…O>ù“'OƇ~Ø0¿ÒBhYyàÝ l®ß„Thù—‚÷¦°éó$BëÚ÷´ùQÿc{&ùÈG>ò‘|äû¥}ÔÿZöø’|ä#ùÈG>ò5»þgs‚ÿþÌ´NІ݌¾½ó˜ÊÏrxÀî‚Ù¡´ß>ˆ¾y½Øò!¿×_7ß|3Þ}÷]”——3·>233ñÊ+¯ °°—]væÌ™Ã”O’$x½^Üÿýøúë¯Ñ¶m[dee1å‹Ì¿¤¤$<÷Üs¸õÖ[™ôEÖG^^Ó>ÖæùÈG>òµÄþ'J’ĆÑC4 ˆš0yW]z)DQPw’çyX–Q£ÛíFQQŠ‹‹ … @ ýÜÈIIY–!Š"dY†$IàOÜn²S§NÈèÐ{kjêN\ËB’¦õEñ«ˆç8(~?Àâydgg7™¯gÏž˜·r%TË, © ’|ä#ùÈwÂw÷Ýw3í»âŠ+pÇwÀëõ2é[¼x1ž~úi 27Ýt ›ÍVçKµk?@êÇÏB=º«É}Ç¡°°»wïÆöíÛ!Š"ž|òÉ:_ÿÛ¡æ«ó½pÔ}kØZ?’õ?ö÷ò‘|ä#ùÈG¾_ÒGý¯e/ùÈG>ò‘|ä#_³ë† åއåIDö“2•¯ÖBùëµÏÊOEöã†(ŠxðÁarssÑ«W/deeÅÆw†ün¹å´mÛ ,ÀóÏ?iÓ¦aäÈ‘L­Þ½{£wïÞ¨­­Å±cÇàt:™òEæ_ZZî»ï>†EQ˜óÑþG>ò‘|äk.ýO”e™7M3+ìp€À™&8I‰‰hüà8‚ DßKZQ¸\.$$$`÷îݨ­­…ªªÐuN§'Z&DQ„ à8î”ÿ:wìˆo6o†,ð° $‡ešÙ²,/‹ø Q„!ËàL‚iÂáp4™/33ŠiÂ&‰° Q ùÈG>ò‘¯Ùø’’’˜ö]sÍ5¸þúë!IÒ©¾m+`+9›¿JEqL|ÅÅÅxì±Ç““ƒììläææBQ”:ßêy°lƒ­ª Jɘø ÃÀ—_~‰ÒÒR””” `ÆŒg•õ?ö×/ùÈG>ò‘|ä#ß/é£þײǗ|ä#ùÈG>òÅÀ×ý|½óUA8´9_Îܹ0¨¥¥Ð«ªÒº5[ýï ùÝ{ï½p8HMME«V­pÕUWE³ùW[õ]wÝuؼy36lØ€wÞyo¾ù&233cë VG}‡#GŽÄÈ‘#¡ë: È}~gX¿n·n·˜ôÑþG>ò‘|äkn>V¯ÿ‰¢( –e%¢p\sºcEQ„(ŠhÛ¶-RRR°{÷nH’„¬¬,8Nˆ¢ED¾ætß§]f&œ¦ ‡$A‘¥È×¥*Šõ™‚]’‚®Ãn·7™¯U«V- ^ ùÈG>ò‘|MéÛ2› Š¢Ô}Ï7¹/++ K–,9½oöô˜ût]ÇŠ+””„ŒŒ ¤¤¤@„:ߎ÷á%(’xZ_Sõ¿§žzªÁ÷yüñÇÑ.3^·R(Äîü$8Äzù±æc}ý’|ä#ùÈG>æ|tý¯e/ùÈG>ò‘|䋯M'è}GÔù–sÌù’®¸¼,G¿Î1oœr½î±ÇûÅ}gÕÿÎ߀PZZŠââbìܹ£Gfjþåçç#???æã{6ë#âaÕÇz~ä#ùÈG>ò57³×ÿdY6ÀQS°8Šbƒiu·\¬÷ˆü¹þÿ Àªªðù|………èÛ·/l6Îöa˜&Ž Žë: ëàä$%AED|R8 )®óÉ TUm2Çqò|Ô—b·£Õ‰ ùÈG>ò‘|ä‹¥O–e¼òÊ+§÷ ‡ã_HYý1Zmú²¯©úŸ×ë=åc–(â¼½{OþYÓp8?¿ÉóÓ4 “'OFRRÚ´iƒ””\sÍ5g•Í?ò‘|ä#ùÈ×Ü|tý¯e/ùÈG>ò‘|ä‹oñH‹çÀ²»¡ðԫ΃eYøÏþƒÒÒR=zeeexñÅ!B“û–ÇÇD¯ŠbÃÏL…eYˆ‹‹kŸiš±égÈ/r ±þ¸†Aó|ä#ùÈG>ò‘¯™^ÿeY6xž/Ñ8.ÝâyX<ç°ïÀ 8–eEÿêÊ_‡ …àóù ( jkk±xñbôèÑmÚ´(Šàyþ•••pYQà8(ŠR"Ë2">H7ÏôLÃ8bSø$q‚BÝIOò‘|ä#ùÈG>Ö}‡w#ní<ÀÇñ#§øšªÿMž<ùT_UŠž~¶¤$(­ZAp8b’ŸeY2dJJJPTT„½{÷âšk®9«üšÂWXXˆÛo¿999ÈÉÉAnn.òóó™™áp‚ D »Y­ò‘|ä#ùÎA]ÿkÙãK>ò‘|ä#ßOòŧ¦{Áò¦À¬8vZŸ®ëPU¢(6½¯UÛt#ûBXÉé0K £¾7bË–-عs'vî܉—_~iiiÌä·råJ8¤¤¤ {÷îƒày>fýO PÕhÿ›8qbƒù …bÛÿL¦a±·>X_¿ä#ùÈG>ò‘|ÍäúŸ(I’ÎóüÍfK7OüægYعg4M‹ž’Œ 4Mƒ®ë0 ¡P@š¦ã88¸\.”––bË–-(--E§N¢·{äyþ¬eY8XP€8EÃá€(аÛíßɲlF}—®ž¸í¤ i(((h2ß‘#G s<ä#ùÈG>ò‘|ÍÉ·o=ò‘|ä#ùÈÇ”ÑþÇ˲lH’´^ … øý°UWÃ^SƒõkÖ ´´µµµ¨©©Auu5‚Á Âá0ª««Q[[ MÓ r»H¸\.ð<MÓpôèQlݺEEE‡ÃPU†aDo^ZZŠ5[¶ œãP ¢ ¶5š†¤¤¤M‚ ˜§i}>ت«¡˜¿`A“ùvìØã'|…µµàxž|ä#ùÈG>ò‘¯Ùû¨ÿý@~»váø¤—Qp÷,޼œÃŸaÈÊÊÂØ±cñì³Ïâ™gž9áÛã3¾FÁŒÕ(¼ë%p.oL|#FŒÀ‚ ——‡Ù³gã­·Þb*¿O?ýçwþô§?aÓ¦ML­_¿ß3fàèÑ£-r!ùÈG>ò±é£þײǗ|ä#ùÈwf_qq1^}õUøý~¦|kÖ¬Á”)SpÙe—aÁ‚±É¯`ä×ÿ ÛcWAy㡨ïÍ7ßÄܹsѹsgÌ™3ƒ Šo÷:ÈÛ í¡¨ÿÑþG>ò‘|ä#ùÎ-«ý—e¹255u» iàu ¦("l·£°¦«V­B(Šž˜ ¨­­…ßïG8†išu'.ënÉžç¡( $I躎êêjò‘_QQ“¾òòrüíoÃ_|8˜]ú <ö!“¼Q_mm-^{í5\{íµ(**Beeel|3o(ÂzÇÜiXµj>Œ‡z˜3gÆŒ›ùç«‚ðÝz˜m:5ÈoìØ±˜9s&ÆŒ¯×»õQ]aý˜µÇÙ\¿¾*»Và Ö0é£þGÏä#ùÈG>ò‘ïÜò±ÚÿDY–—æççÛð ž8€ãË‚¨ëX¿~=úöíýfõoïXÿ!EH’Y–¡ª*,Ë‚®ëðûý0MÁ`©©©HLL„$Ià8Ÿ/X€jUE²Ã8— ŠÍ^à1tèÐ8EQ>–eÙÊÏÏvàÀh' Y, ºi`Æ ¿ºï›o¾Am8 ¯ÝŽ8·6›‚ |ä#ùÈG>ò5{õ¿ÈÏWïÆùˆÛ»6‡‹½ñ­©‚wñÛˆ[û1lN7{¾”ðîüš™ünºé&ÜvÛmà8³gÏFmç~ðýq‚Óõ;vìX\{íµ˜={6þò—¿`êÔ©uùµéoeâ$>f¾nݺaÿþýò5'ŸeYà8ŽIß–-[ IºvíÊ”OUU¼÷Þ{X¶l^|ñE'Þ²‹ßòåË1sæL <}ûö…eYM?ÿFO†qáÕ€†^¸#ê{î¹çà÷û1sæL¤¤¤Dç_“û&L‡qÅ@8}÷Ú¨oîܹÑù‡c·~Ï_sÜ_ÈGýï\_ò‘|ä#ùÈG¾æÒÿÄ×^{íðäÉ“="ÇÏ×UõrÎ0 ª*`Yø|áBôîÝ=zôˆÂ"§&#Žã IRôÔdyKº2 Á²,¡¶¶­ZµÂÞ½{±`Ù2ø‚A$ó<2¤$&.óx<Ž®]»ÀäÉ“=/Ì7C¡Ë9]úæŸx;¹_Ó÷ßE‹P  *B² ËãA¼×K>ò‘|ä#ùÈ×ì}ÔÿZöøÆÌ÷ÍZTÞúT:’|‹¬m ïr°ã[³•[‚*CCò¦ÈZú⶘ùl6þð‡? 99ëׯg&?Žã0zôhtíÚÓ¦MC=PRRÂÄü€)S¦àÕW_ŤI“ðØc¡C‡̬P(„·Þz ¿ÿýŸÏÔú­ªªÂK/½„û￟ÉýeÍš5ÈÍÍÇqÌù"m4ßý™|ä£þ×âÇ—|MïSU²,3é X»v-†Êœ¯ºº>ú(ž|òI$$$0åÛ¼y3¦OŸŽx ¶óã0ÿ«åQ_uu5¦M›UU1mÚ´èáÄØùxÌ_¶yyyhÛ¶-^}õULž<yyy±[¿k>¿œûþÄ pó½‰ÈËËäI“`š& Ã8å‡oMê[ðöå\ánˆ_½ø«1ßåbkÿ«Ÿ_ÐÇž¯…=Pÿk>ù‘|ä#ùÈG>ò57«ýI’j223f >?„PÏ#ìv£ZñïÏ>CEEt]?I’žç£E1 ˲¢¿ý QQQ]»váãÿüb(„66’„Ÿ°ŠK/½ôQ+#_ñAÓë|B¯Ê4±hÑ¢_Í÷å—_¢¦ª i6œ²Œ€®Cäò‘|ä#ùÈG¾ã£þײÇ7&¾£‡‘öñ48Ë#Ü¢i°å;ri3o‡³h™Ùu ßž={˜Ì¯k×®xî¹çP\\ÌÔü“eøÃ`³Ù°bÅ ¦ÖG—.]0aÂüóŸÿÄêÕ«™Z¿qqqèׯ^xáÔÖÖ2·¿=z|ð“ûßW_}…yóæ1¹?—••áóÏ?ÿñý/>˲°mÛ¶Üÿb髬¬Œð`Íœ¼(øKûZrÿ‹@a±_ñ<’’’ÿ9¿¦ò­Y³º®3é{÷ÝwQ\\Ìdþ׿þ…yóæ1ÙïgÍš…ÂÂBæ^„Ãa<ñÄ2dâãã™ò­Y³Ó§OÇ£>Š^½zýìýï'û:å!|ïë¨~{Ô·aø\.<þøãp»Ý¿Èþü“}=/FxæJTÝô$-Z]×ñÊ+¯œr8±É}…{ ¬øFzçùUUU±ñú|ï&ó^†ö±yý ’ŸdÓG×_¨ÿÑø’|ä#ùÈG>ò5ëþ9 øï1cÆ´å8è4ÏCôû±mãF|öùç§üfPw¡´1&E1ú õ‘ªª" bÝ·ßâ“+PÍóˆs:Ð#- ½22‘’|tÔ¨QiŠ¢¼W/À¨Ïhî:§ëXµj¾øâ‹_Ü·yóf,XºU<ÃŽœÖ­Ñ+#v‡|ä#ùÈG>ò‘¯Eù¨ÿµìñ‰¯t?rÿ½V¼É¦¯`3rÞú#z½û [¾bªÆ? ¿œ©üB¡P¯J@ÕCïÁÓ:ƒ‰ù·Þz+zöìÙ0¿äÖ1÷uèзß~;JJJ˜[¿C‡Err2Þ}÷]æö—+¯¼GŽÁ–-[˜Ûÿ.¼ðBlذeeeÌíÏ)))X¹r%ªªªÎ¼¿Äȧ( æÌ™ƒêêêÓî/±öM›6 ÅÅÅL>ÿ>þøãX¿~=“ýïµ×^Ûo¾Édÿ[ºt)}ôQ&ûÕ¡C‡pß}÷vÿ‹µïøñã˜1cDQdÎWQQ/¿üééé Ö/ ¾ï¿ÿ+V¬ÀW\Á\¿_³f <ˆñãÇ3÷úãÕW_EZZ®¾újæ^•••áÏþsô­câËìmÒ‹°¼)àlúú÷ï{ï½²,Ÿqn_—ó =û_XÉéàv¬ŠúN÷Ã-–ò;§_Ÿ“|týïœ_ò‘|ä#ùÈG¾Æ>ÖúÓ¦M«”eÙŸ=™SUpá¤ÊJðá’„¿Z‚… F‹¶>&ªÿˆœ¨¬ÿ[èd8ƾ}û°`þ|Ø9ÓÄþªj )qqøÍo~3]–å’ŒŒŒŠÈ×5ðix¿/ê J,^„Å‹ÿb¾à³Ï>ƒj™š&öW× l™°+ ®¿þzò‘|ä#ùÈG¾–å£þײÇ7–>KgÛg„Ùòy[!ؾö›ŠpFWöòKÉD0ç"ìdÂÏcoþ5Î/ƾ¬¬,\xá…Ì­_Žã0~üxôèу¹ýEEŒ;ŸþyôK¬øÜn7 „/¾øâìö—&ô9äççcõêÕg^1ò)Š‚ž={bçÎ?¼~cäËÊÊŠÞ]Œ5_rr2ª««©ÿýù•——#99ù¬|M=¾ûöí‹zbÍ·aÃ\xá… îàÉŠoÉ’%4hPƒ;Ʊâ›;w.®¾újÄÅÅ1Õï-ËÂܹs1qâDØl¶Ø¾þÐu¯˜€wD}ýû÷ÇäÉ“Áq\ì_‚¿{ ¶ïÃâÅ‹1|øpôèÑã´ûK“ù v‚ÿøïž¾üúÿž’ßéö—&õíþüË‚t{/ð ßaïõoýüÖ~Áž®/–¾Úÿh|ÉG>ò‘|ä#ùšGÿ‹^ur»Ýï;¶ƒ ½*ÖúÀñò‘|-ÒGý¯e/ùš‘oÇRtYøPBµˆ T²ç[ù>º¼ñG(¾ ÄU}ÏŽoùZ|ßw4»ù­ÞŠï/ÿ=SóO’$tëÖ­a~Œø:uê„û®3·~ éÄ[Ȳ¶¿ 4k×®Þ]”%_Ÿ>}°}ûv&÷çÎ;ãðáÃL>$%%¡ªªŠúßÿ˜_yy9’’’~Ô‹ñÝ»woƒŠ,ùÖ®]‹Aƒõø6•ã8,^¼W^y%sýÏ4M(Š‚Ñ£G3×O¦OŸŽ=zĶ?;=Ð'þú౨éÜ?êËÎΆ,˱ï÷žèO}ÌQ“9[¯?–ÖiócÂ÷É?Áù*Ù}ý¶ü#pÁZv}ôú—|tý¯YæG>ò‘|ä#ùÈ×Ü|¬õ¿èw^¸p¡>|øpÇ€ W¬X9Úp¹DS–!«*lªŠÏcë¡C¨>v v› ­[·†$IPå””‘·3 º®Ã0 TUUaùªUX½bü†¿eA’e´MIF›ÄDd¦¤¨Ÿ1ãm›Í¶>55uOãû8Qu›²†¢iröíßêŠ È²ü“|Û·oÇ¢… q<F­iB’ed&'¡]J ìv»:ãùçÉG>ò‘|ä#ùZ¬ú_Ë_ò5Ÿh ÝáͰ‹<›>+€vÛÁ΃_ÿѨí$›™G6±—ßQ{ùH62K¿coþÕÏÏw” Ÿßïgrý@vv6ª««™ó¹\.äää@Qæö?‡Ãªª*´oßžÉýy÷îÝÈÍÍeîù£¤¤………ÈÍÍe®ÿmܸУGæúß²eË••…Ž;2×V­Z…‹/¾)))g·?7¡¯ºº—]vYƒ·ŽeÅ7pà@dee±Ñÿ.}EGQ½gôp¢Ãá`§ŸŽ¼ ûŠKP½{œNgìûs›Ž¢>ìfÈ_Í…²dNƒü˜è÷ísD}ìŸ!8Êϱ÷ú£q~¬ùèõùÈ×l}tý¯e/ùÈG>ò‘|ä#«ý¯ÁÑÇE‹\{íµçÇÇÇ¿¾{ëÖñ<EÓ`Ê2‚’ѲPY\ŒU[·¢¬¤¦®Ãn·#..’ápååå())ÁþýûññgŸaý¡C9m<„- ÇØÒñÈÃÿ©M›6áÄÄÄp†G}ß®;ÆË†É4aÊ2² Ó²P~ävìÚ…êª*ƒÁ³ò^ÀÞú­ŸŸ¯”_MM “ûŸišðz½LîÏqqqÈÉÉaòù£S§NèÝ»7“ý/??ùùùLö¿‹.º;v<»ý¹‰ÇwÔ¨QÑÉLøFuy)‚Á úõ뇤¤$¶úÕᣨ.=AØèÝû#pý˜²å Þm¾ó†!0ùe˜v7Ê?ø?6úóšãå-K!íZ}j~,øV./¯øÒ·óÙ|ýQ??}ôú|äk¶>ºþײǗ|ä#ùÈG>ò‘¯±•þÇúöÛo?ðþûïoX½zõRH|² Žã`0y7¯ÍS’ЯgO¤$'ÃãvCTTU¡èûïqüØ1l/.†©ëH‘%Ó è–…¼ôt8ì+)AÏví0iÒ¤‰÷8ÎâQßÇ |6¬z¾Jއײàu8à‹C÷îÝáõzáv»Áq***°oß>-+CM0ˆ8I<ŧ™&’ââpç]w‘|ä#ùÈG>ò3>ê-{|ÉG¾éKH†æME’¿”M_R*´”¶H:^À†O‘qìÖÐ=IÈ›÷4²ÄV~Š‚cO~ =! y/ŒƒCó³1ÿl‰¨q%#nçò†ù™*>o&j3÷͇l®ßH~Û—²ék®û_÷¿Ôôt¸Nð¦ÉNÿ‹‹‡×åD÷®]ØßøDxtïÒ™_Ç^¨÷Wxߟ oÙAöòë1•SæÂû÷ÛàÝ·.æëƒ—$øîy–Óƒ„ï‚™Öád~Gw3à“á›ù ,wî½f Š©ýå”üÂ>¶|ŒïÏä#ùÈëþG×ÿÈG>ò‘|ä#ùZ†/ÖýïLm‡còÚµkw¿3{öGAQTvŽC%ÏCÐZà7MT™&’„Ôh æÄŸ3$ ¦ ¿a {b" žÇž²2¤x<ÈïЊ¢¨?üðݺuKv¹\Os:Ë£¾Ù³gdqœb ŽCÇA縨¯Ú4‘ÂqÐ, *× [˜ã,ŠQ_·„X‚€Ýeeèš–†ö))ä#ùÈG>ò‘|ç¤úùÈG>ò¾Ž½°ûŠ{ÑuËçh_ð-{¾œØ=qº.zí7Á†oô½ðwî‹noÝ«M'öò»ûÿàï= Ý+ìgcþå]‚p—¾Hþ÷ô†ùi!6|ƒpþ0$ÿß]ì¬ßö½ vÌ…kÙ»õx2?Fú_æ}÷¡õ}÷akv6Ê++ÙèýF¡úâ±HyåÐÒNæ§klìÏÃoGõè?!åÁ¡ÐÊŠØxþ¸õYè­; õ‹wÀßkÈÉüªJÙðýõSèm³ÑúžþðûªØxþuÆ)Vr”âïæ¨eÃçIT¬6 ìßÄf©Ÿ‹¾s¥ÿ‘|ä#]ÿ;gÆ—|ä#ùÈG>ò‘¯±/Öýû!è§Ÿ~zKmmmèáG¾LWõ›UžÃqË‚‡ç‘¨È(Q5„M픫ª4Y.7*5åá0ºÆÇCµ,¬ªBǤ$d$%á@YZÇÇ£W×®óž|òÉUÇçt:_9›à~Ìg <*, 6Ž«ói:†ñÃ>++Ñ!) ™IIPMñ.ÒÒÒÈG>ò‘|ä#ùÎyõ?ò‘|äkÁ¾”¶ˆ÷•±ëËè†øã…ìøºôÅÁá“ÐáÛ#óàZöòˆƒ·ý¾x™?ccþ]8åçA×7'CmÓ¹a~,ø®œ„òQ@ׇA­.ccý¼U}G"ë7¡²ÿU'óóU1ÑÿR| ·ÝŠ}Ù98ð³Ñÿ®}á6Ñþ¥;P~ñ¸“ù…lìÏ÷¼‰pÇ<´¿§/ÊÃjìŸ?\TÜðؾ?€Ä¯Þj˜ ¾¸TL™Û¡mH|ï öžçÇšï\è/ä#ùÈG>ºþÇX~ä#ùÈG>ò‘|ÍÍ‹þÇýrÁ‚CEQìóÞ{ï.]¶lZÐ02I‚Ìó8è÷Ã)Ihërãh0€ÊPy©©¨ …PPU…®))Hp¹°® ©qqè‘™ ‡Ãñý¸qãf\qÅÉ–Ûl¶ÿþ”ðÎäã,+“Eˆ<‚@²  Ý|ÝZµB¼Ó‰Ã••HOL„×é$ùÈG>ò‘|ä#õ?ò‘|ä#ùNõyp¸÷(¤Þ¯¯Œ=_B» éÛÁ{ü0¾nP0ðft[ò â˱—_¿«P0ö/èöÎ}ˆß·ŽùwÙ¨ìz!òfÝÑ0¿£{˜è)ÓžsÔ(÷îÍFÿDÜöwÈÕ%h÷錆ù±°¿ˆ" þ¶rÙa´{é.¶ö?»¢i4Ì%ŸÓ Q ³ûüawB44v}-éù—|ä#ùÈG×ÿšA~ä#ùÈG>ò‘|ÍÍ×ÔýïG(ÀêÕ«í†aŒç8.îwÞ9¼nݺ[ê:¬V×! âív®­EM8ŒóÒÓáWUª¨@ÛÄ$´Ž÷MÓ†ñ<ð<$A€O«;íÙ&.†e! ið:]°+2DQDbbùÈG>ò‘|ä#ù~ÀGý|ä#ùÈG>òýO¾¸Óá-/„Ý ³çKJG ­3¼Gv®ùÙðu:ao*ÚìXÂD~û_òóÏCéßå—\ÂVÿs¸!i¡†ù±´>\^Ha?»ë7’«¾æ¸ÿ‘|ä#ùÈ×L}tý|ä#ùÈG>ò‘ïÜò5Uÿ;«Šõ  ²,ÿF’$¯ßï¯ýâ‹/|›7oîæ÷ûóuMïjZFA4›"—ºÜî}ÉÉÉÛ.ºè¢}#FŒp9N» ÇE™Ëq\Å/ùÈG>ò‘|ä#ùÈG>ò‘|ä#ùÈG>ò‘|ä#ùÈG>ò‘|ä#ùÈG>ò‘|äcÓ÷?P¬ÿصkW[Y–‡ ‚ÀqœÀó¼ ‚(Š"Çó¼)Š¢!Š¢ÉóüqžçØíöÂ_#4ò‘|ä#ùÈG>ò‘|ä#ùÈG>ò‘|ä#ùÈG>ò‘|ä#ùÈG>ò‘|ä#ùÈÇžïÿ)FOÛ_èõIEND®B`‚Carla-2.4.2/resources/bitmaps/dial_10d.png000066400000000000000000000070441420416754300203100ustar00rootroot00000000000000‰PNG  IHDR((Œþ¸m pHYs  šœtIMEÞ2ù{©Š ÃIDATXí˜{Œ\Õ}Ç¿ç}3³;;»ãõ¾¼Û±×öBj°Å/„ø3!Ä4J©³Öjkm?€çÜLBH'M)¡”BìÎd2r¹œâœ+ÆØ¨ÖúŽ{÷ŽýúBˆ¿dŒõ[k«Î¹ÛAé×`-œR0¾Q¯ƒ¦)â|Tk¨Z F8BÀ’œ±7‹ÅâϦM›V$„œ³Öþ|ûöíõ?Ðó¼[s·9ç"kíC¦ÙlV)¨ñqXΡ³Yˆj\kÔ[[Á“²^G†0Œ!¬”a …¥ÒØ“Ý=ÝÿÔÛÛ;²sÓ¦Mo~Úüì3à¾`ÀsáüA†–¦p”Â)𦠯Àx˜µ Æ õ<0cÀÒÚ÷ÁŒOShÏCây iš«”J«Ï éíëø£?üp÷TA88ø€'?3[ZZ¾¥µîH’ä‡.`ÂTkˆrÖó ƒ+¯½qh¢¾ï# C ApÑXcccسgÞܲ›·o«×Q÷}¤ŒÁ¯×ÁRDH0àºÅKVÌ™3gÚÓO?ý³O\âB¡p«snn=Š~ÎÓ V)€1\5s&¾ûðÃX48ˆZ­BcàœÃó<(¥¦æ0 …¾zÕU˜?{6ÊÕ*NŒŒ@&Lkh¥( =zïÜyóž»ùæ›»vìØqüÀžžÀƒ•Jå†sM&j X”¢£³ÿü裰Z#MS€s® ¨”‚ïû¦iŠ$I`ŒA[[.KüþÈÔ9‡– ,M!ªU¾÷ƒÊ_[²„.Y²dÏŽ;Ò‹³Ùì_W«U‘¦éC„8!š…ðõeËð÷?ŒR©c.ÎcB8çð}ÿ’%ŽãI’4HJ‰ysç‚ Ý‡ƒj ¯V(öPB®©N”~¼`Á‚%o½õÖ. Ð××—çœ÷ÆqüwNJ°4…œ˜MðL÷Ü{/´Ö ”‚Rz„1Æ$IrÑuçÒ4…1ιæu!V®X;o¼¡1ÐR Êf‘J'9Ž=òïœsÿñÇÏ79ç÷—Ëåq+e§Îf‘d³çȦ)ÖþèGÈf2RÂó<!.‚l€h­/IÓ´ 85<ÏÃê;ïÄWæÏGâû Î!ÇRJXÿÆ3Æîž ØEÑjj-XÁqŽ8“Á¬«¯Æ‚tuu¡­­ A@)!!—(5F_ÈÕÉÐ@)çÅbºb 2q î!PÇŽû[Ïó2@,XÐK)ÕÖ¹?¦ÎAFT©ßüÍ P( ›Í¢§§Ó§OGKK |߇Rª 9¹ГϛÉ„PJÁó<ÜrË-¸éºëP“%ÏC•1Ä”"µîv­õøÚµkû(cly©Tª)QÏå„!¬R¸â \sõÕÍ}ßGGGúûûQ,†aÒ9‡8Ž›@œl¨G¹hœ0 |ßÇàà (ãÖ¢Õ9t Á)¶½ývY±Œ !Úëõú•3–s$ž‡ ­ Ó§O‡RJH)áû>r¹f̘þþ~äóù&¤Öq7«·K)…R a"›Í"‚æ˜abéÒ¥èÏå5¥H)¦ GŽ_¨”jåBjŒYÈ×`)ÅË—ƒsÞT€R ç8çÍ ²Ù,Nž<‰S§N!Š"ÔëuäóyÔjµæoJI)Á9‡”²Yh”RÌš5 ½3gâàÄÄyÅríZ/áœÿ–K)©µvv ˆµ Ú …Kª¯á“s)“É ­­ û÷ïG¹\nî{a"—Ë! Ã&c „KŽ9W^‰ÿ~ÿ}HFá1Á(œµó¥”›9çœ9ç: çù?kžºé^–sÎ9f̘b±ˆýû÷CÙ³g# CpΛ{.7N_Bk%Eã¾N¥çRJ ÁÄÄù $Jy°S6ØFuNýlD¥Rc 'NœÀâÅ‹á]èX>OkqŽ1œKS MA,ho?/€”ÒPJ‡4!=ŽR8J¡)Á¡#GpÓM7Á9×<¦:GLj¢•JµZ J)”Ëe¼ñÆX¸p!º»»Á9¿Ä}¦ÆØØ2Îq0¥Ô”\‘RJhÏë±ì¼5çðÁMw˜ ÕØ€1ˆ¢µZ ZkB2™ †‡‡±k×. cÖ¬YÍ徜U:çpôøqxZ”B oÿPJi¹”Ò!vò(º• i `çöí†çyMÛj(ØP.IXkqÁ ¥D&“ÁÈÈ´Ö8}ú4ªÕ*úúúP,!„hY#7‡‡‡±}×.Œ‚±zIQÌdÑßÞþcÌR)åXggç^¦5hªa9Gìû811­[·"Š¢¦bµZ årÕjq7áÈù%iîyBˆ¦Ã”J%=zD©Tjv8•Ø¿?EÈ3†€sT `ñâÅ¥”c\Jùæ¢E‹n;|ô(â\ËùJv>ŽÿÚºÛ¶lAÕTƒ3Šè.ÐW,&ÿúä“ë<ÏÛÙÙÙyà@Ø´iÓñ{î¹çº|>ÿŸûwïþ ´†•u!ÀÃØ©Sغ{7Î Á¦)|ßGKKË%JÅqŒ‘‘ áðáÃxiÃìµZ½zõºöööáŸþä§V®Zùç)?*rŽ¥@)CÝøœCIÂΕɄÈ4^ζ60JO)\;gÎÇßÿÎwþá©§ž:Ïç÷~Üg*؈mÛ¶ùƘoBZž}öÙÞyçã$¹­œ¦Œ!ïûø¨\ÆDãšžT“ÇFG1£ÐŽéùV€RLëhß²jÕŸ¼x×]wu2ÆÎ(¥~BùÃ_Om“RÞ'„h­V«åW_}µòþûïÏ«V«‹RεÎt3&´§äp&›=ÔÑѱgéÒ¥‡V­Z• ÃÐgŒSJ=Oý¼s~Ñ·üÍØ·oß )åmŒ±6B£”2ÆçœJ©åœι¥”ž£”¾îûþ‰/3ÏÿJ^z4› ¸¦IEND®B`‚Carla-2.4.2/resources/bitmaps/dial_11.png000066400000000000000000002154561420416754300201550ustar00rootroot00000000000000‰PNG  IHDR  ¤æ:€IDATxÚì½wt×µ¾ýœ Iu‰"ÕÝí¸w«Ëv\’¨P2mDZ÷§Ü$7ÅÉÍuºÓnº×wË%¹ÛêÍ%îE.*V%Õ mæ|Ì 1€„ë›w-.föÁ˜óÌÞ︓2|øðcu]?8RJ©!Ú„-Bˆ×·mÛö`8Ý¡pò¤úúú#¥”7—à <}ð¸aÙ±cÇ{%  ¶¶vŒªª¿’RΔ.ï"Ö>]·—R>æóù¾µuëÖm®0tèÐ/ !þ ÔXjæ !ž0 ãåíÛ·ïÊ|þ°aÆ1Yñ)e#Pe=Ô*¥¼fûöíO8@}}ýíRÊÿµîÆ€ß(Šò‡mÛ¶í)4¥ƒ ªñù|?På›ÖûD?jiiùYÁÔ××ÿDJù?ÖÝ÷ ÃøâŽ;Þu8ǾN’R>býé¶–––_æÀСC/B|ø]×_NB\ÚÜÜüXÖ†>L×õ0ùGÑhôŒ}ûö(%¸­ÚÚÚ!ªª®–R ìBœÐÜܼ2ÞÙº®ÿÆ Ê`ÇŽ; ø Hý¤”©Ã Ô××\jýí÷---”+¸­íÛ·¿*„ø£u÷+¦9)嘇#~Uîà¶t]ÿ5æg‡*¥¼É€¾h=çÑ7îï©ìرc'0Ǻ; P”ÚÚÚϵÖL4õTp[BûixmmígUUϰþ`Äãñ==à%ûEQŽW ÃnÝßµwïÞƒnö$g2\Îd¸›mš››w;­Ù8\Qe0€”r‡ãÀ d×`0ƒ'äLF¹œ…ýÖm•OJ™°Fãs¼‘ nGrNz<®•´^´æB´J)‘Rö+|õÄù‚íÐà‡b.›\`ˆu»K1 c5õ#GŽìŸ7x“Px4Ö£ò%1WoÜþýû÷Z3°EQ%õM—H$Îèº!gp’ßaë‹Ñ¹ZÌe«Û¹…B±¾ƒEyÕ×ÜÜüN]]Ýv`¨u"ñ\*øUÙÏ€ó¬?þÊ<þ-Š;ö†1C”²¹¥¥åCЭïl„6ÌœžiÔ³Ÿû3‚·!ø¦hâ_Å=zt?!Ä¥V¬ÇÀú.B܉y&[mÆÉ™œ†Â¿#¬m7¢ðeÑÄÊbÛŠÇã?´£BÜ ´µµí®®®>Zqì%ƒÛÇŽ¯‰÷+Øÿ–¯PÅ×Äãæ‡G±ª¯¯? ¸×Šù`KK˽©På;gö‰·]]ÛîÛSÍS(Áìçëâ!\}Bv•õß5Û:?ܯëú§âÚ¿477o9»_ô/q)¿MÜ!–š¥(‘Hü¯u6$…_Þ¹sgþOÝGƯxrBøäRƒfª®®îŠºººH}}ýw˹_OžÊ"GËó y| SÈ+dÊãàñ´<>(¸E6p=s*Áð?ìCWÌi{Š(BˆVëN¿‚Ágr2qʾƒ[{œÈÛQä ¾ŠÁ]›d‹¼æ&rW>àSå])ÍŮŞ뼑Á¼ÉÏØ‹•$ðGæóh1«äP(4QJ™âJssó;ÀvkD‚7p Å<)…X±š›››sóÔ”Kþ؇e5p™XÀ›Å†Ü|Àgݹ¸¨©%~ÀÛ„S;Mù¼â¦«K )>ðŠuŠö@KK˕ЅÜT×ì7”­1u4ð‚ËÊÜ1©â~€V]t¾&šJ£"¶<>àÉSwòø€Ç<>àñx|ÀãÿòÉød7U†Ì`4ð$ÇXê>`]E¿xRÁ· ¹¾>à3 c"År}öËéŒ@áÇHŽ·þd q—˜MÜMd÷| ™|™ú~ß Ü.æñjSïœÈô“Óù5’ÛVpÉs\RlppÊf2xÁÙ"ùž˜ÏÅZ‹ ^„Yý‡CöÌà ”>¼ÂÿŠù´ØV.> ´´´| ¤|üç£2:¨‹è"Œ™®q/¸EÌ-=¸Å¾fÝ}°¹¹ù£Ô œÕ_ÿÑÑáD£ukL}d89A4ñz©ÁäÉd²{>0çƒ]k7FÕ€Å4Ö”#8x|À“§îåñx|Àãðø€ÇJå£*æ–Óù.Oô>˜ÎXà6C]Í”ûúù%úÐÆ·|>ãÏ›0ø±˜×Óù Ì$ÂüŒàq¶òÞqÙ %ÁmHÆfìãu$?óØRÌÜwå9ë äí(¼ÍĹAÐÚ¶Áh¢©”«èë æO ŸÄ[܃ä«Á—¢1K41·”àÝò·L­>.›©‹ÖmHþÈ|敚;øÀ¹ý:ßR×F›® ·øÀ24ÅüÒ¦ÜV>>:8{~; KuøF0„ï‰Ùìr*[Žò®ZѺjC‡z€!ñ±GLNäñOžº“Ç<>àñx|Àã(Ledeø@#}e?@íe>`­gçVDêÛÏñw†Šà³ø oñ]à˜Œð5~Ù£ùrµ(| ÞÁ¯Ä–»}éŽù€¼\ \ÖÅlIÁ?Ðx@̦£ˆ©wȦs;ùtzs½‚ʯ‹˜îNêÊ|X|@qk­_^²všG§•cº»jôèÑýb±XnÿªÆ_ÛWÕšÓíÁs¨â‹åê î;³ê­Skâ'u~cÑ ¿þ5ÑDÙ¾ ÖøU嫺$)A¬ïPÎ`0ëÊܸbUëŠ 1íU y|À“§Þ’Ç<>àñx|Àã(ÌâJñ‘²ß óxïòôCp= fAI§íîø€lÄO’K‘\ƒ¤:ã¡÷ü¶Çø@¹>å; Y‹à÷ÅdÙ;çÓ™ÀÛ| ɘŒ¯¬Ý(ü™ãyVÜ^š)Ìd|8=uÉZAá~|<.fÓÁÜbB›ÊËújÜúå!‘Ë'héWlÏáçN1Û,‚(E¹ø@*à'#|å¨p¿;¡Ö×ùõfàU þ(ðQ©muËž™üx˜_?\€”Büö„âß)W`pÀ¶Çµ«l>Б”7ÉÐÊܸæ¥ÖÕë¢ðä©÷åñx|Àãðø€ÇJÍS>0‹£ä ~ÊìÞå³8Ñ™„ûs‰L¹ä³8Ä |v—À«Q¹SÌé)>0‹£Ðù:§gŽÁ"tî Ü_]uÄdG ¹ñ^±`!p¿hâãbç¾[>ð™pâêæ ›Îg@+Ü/æQÔ×r¦òò›êÛo>°cVBç=MI[¼‡à.Ñ”þß-EyùÀôÁñ‡vÜ ¨»“ê:¿¾È \R¿‚®ê–,œØ0X3ÆkÚµ.]Õ~o9ƒä’â¬ú‚ÑÄÿõ:˜µ2ºÐ®/ðø€'O½)x|Àãðø€Ç<>P˜ÁèRù€OQ”ÁÖêØ9˜ÁéH®ÎÄ )gr‰Ë+èû1WÈÎù€¼…79Á•tNñ/FÎù€•;ðÞâ #2Ò,Dç¥øäår*ƒP¸Š8SSî|¦ZGÐxBÌf¯Û—^ÈFÖà:à\ÀŸ±íNàtæ‹'i/vîóò‘}è7†·ýœ8qDƺP²ÁChÌ+¶¨!S9ùÀY}â‹þgÄÁ/ùNLHÞÕI`’s€ÊÑߺá3ú·ÏU_2$Êæ˜Ú÷а~M¬*GÙ¦òú\ùrÇÜíqe=@»¡Œz|wøèr/è?Іv½añQZâw½Ï–µ-ù$¦Ý ðä©wåñx|Àãðø€ÇJã¥û¸ær2>ú3ƒFœ ½ÅL‚$ H÷˜Á)I0ðenGð ’GË^_`URLGÒ ï²Hû…‡PyÑmï(À®|àÒŸÂ($‘Ø@xÁ#¥Ö£wåPO]ÛüúÖ!“úÆv èéé”Da:Oˆ4—ØÖСCïB\#¥lÞ¾}û0 _?¤íƒªCêÊ€„¡oÓÞGð81žÏ+G`è† ÐŒ;I†Dy¹ÕŸœ¸$þ¥rÍT^>pɪŽÇ›ãê:€~>yò‚Iá[ʼ Ø+}×ÚõCÔĽξ´¼m¹ç?àÉS%äñx|Àãðø€ÇJõ8¼÷ù@‘|Á4tÆÐ|À‚ã0˜Žd –xYÓ³8„$Ó\ˆd@—oŽVà f—5`Ó›I¦_@ïTúoÚ*,C2—y­ €œ|)9±:ÁÏFíþ+ FÎSÁfàIžNuƒŸWÜÜçÌøé)}NÐѧŸÏø,¤¦³ Á‹(<)æ¸ëÒÐræœN¬N9¨+: ¹0¤ÿ&Æâr²èÆŸp‚_eÙÿ(1gË äìŒ+†ùõ3çL ßXîàùÀN©]móa¾Äo<>P®ààñOŸry|Àãðø€Ç<>àñÿùÀ4ŽDá³H>‹Î0z…Ìâp’|…s‘ŒJspÂ,6ðYŸEg4‚®¹Ö-Öâõ©²ø(BÔ¿q^pâI¡èéÀdt†æx•›€çQY(æ°¡˜—ž“œQã˵íâÝ‹ ëq'°•™Ã»¥æœçäß8;맺ҿ¯O?ìað"'óv±fˆ¹”“H(ïõSSêÊ€Q¾=úLýTÐå Ý Ø?“|Ô¡ÝXÎWœ©¼|àúWÚçÛõõ~ý̦ á›Ë¼ Ø÷_ió:-ñ+ÏŸ°\ÁÁãž>åòø€Ç<>àñx|ÀãEó BNã°^åòBø9˜€`<0¤Çýd#ƒI2ÁéíèKQ~> AÐÀQH&Hpö'fúƒ[ XäÅ’ë ü œR“¨¿ÿT姨ƩȌ^éQàU`+Ä“ì.æ¥gñ*¿xÿ÷£ö1*¨#—tá;Vã?帠Åî<ªåÃÁ†–´ý&xÉr$+XÀÇå.‚ïÊÀìñ¡WŽ%OWƶ¤vÚ‹Ûß(gP[؆¹Dÿ}KKË7­ü‘ÊP ã¯= ð‹ Õô3*R_°!¸àñx|Àã(žÜŽÒëùr£œ†Ái¼Å)@_z2@ΤŽ$§¡p*’Ó€ÁHJÍ€||@62€§"8 Éi O}TuÚ¼ ¼ŠÆr1›Í.Й\:¸ƒ³ûÅê“qúFŽõ°¼¼‚Á8È»Åæeñ¯ÔEöO ¢‹ê¾>yHÖ¡ðàU’¼QŠ'a¦²øÀ”pëCj E mŽ©áã|É[Ñx­÷E'êÊ”ñ«hm‰+ïHDÝœ=UÛ{*øèÑ£û !²óZuÅþvRjý®žÝð‹WuÌÞW>ê×Ïxd|øšrï–»tíÃ|·‹1äz|qeÛÒ –?!Òãž<õš<>àñx|Àãðø@ñ| ‘œÎq½ÆdCœˆäxÇ“àHjäÈFTâ‰ÂñHŽN@šï“2°èÊBŠÁIUñ!³Oç'à¡n.[ïCð.ïâcYIõãûF÷}£®*UJÂõ>su”)X‡àï’à]ñ¤k ‘R˜Þ?¶¯J5_jDU}}r ðnFÀ÷ËÅ %"s ©Ý­´×#~yÎ’Ø9å –K9ù@³ÅùŒÃŸXu\OÏË"ºr‡õ%$õ;{jÝñÇlÿ‘A}Üc«®.wð‚ù­R»^Z|àðPâ½Îf.o[¼!æñOžz_ðø€Ç<>àñx| x>09ƒSz…È™Ô!9É‘ÀÖO½9oeär2>2ÉèV …#1²¿éJTšôW致s|Ub ýXŽn¹öÛŸ‘ÙŒ ¬G°ÉZV—T_pk][p\¿8@() ùD'>°øØ ô±õ³IÌÎbŽ•ÅúøyË~pKÌ·gL ùoà#ü¬í‰«èY|`4‘¹Rj÷öQ»ZwÈsÉ—;h¦ròÍ1å]€ú€qTEø@‡¡ØŸÿJúß{jŽúŒègU¤¾ Cún´ûV¤¾`æò¶Å^COž*!x|Àãðø€Ç<>P<h`ˆœÆ©=Êd#ÕĉÂH F!…d$‚‘HÂ(”‡ ñ|&œèóÐ\‰Â+ØhVˀ̚‚rç\2¤£ß•ƒ#ø…†àk tÛlF² …Møx­¤ú‚³ªãIU€ŽÐ’Õâ»M6#ÙŒÁ&|lb/ÛŠ­+°•ÅâB¬®Xq °jʈØwÅ©²«+P¯‰Ì3$ €¸ÁÙ=L>`½úææææ•3ŸåàV‹ÔŒ#\}lOÏËâRùõ¥JOþ­§‹¤ÞïÏN ®­÷ë‡ ãÚ­Ó–µ—5‘Áâ¯X§h´´´\™š€ýºïz£’þ_\Ù¶t½Çàñx|Àãðø€Ï0ŒáBpÁd#~¢ E£hsÙê4zssóºÀ¼|@Ne~j1¨Å`(‚:$µ†µ$ˆŠý¥[Hj3v0&˜qÑ™4a¾ü©ëãåå¶Ò|঺¶Q'T%P‘ÕÀˆüóN… v ØŽ`ÐB’wļø€¦˜S§#´˜!6ù‚íì@¥Év|ì³)Ë'cÐ¥X Ü0OèýKVµÿ¨¬“ÝEY|`pU䉤$0@Ó{28äàç¿@¤9¦¼0D3Ž(÷²,Syù@{Fþ€Oî©8ÊV©ü}†ïºŠòËV´-[ïõ7ôä©òø€Ç<>àñx|Àã®ù€lÄO’~@? ú£²­d>0Ä—d¸_?øä4¦ Ò¬Òº5Ì¿'¥ç“ÒónÚ:jÚÀ(!G ð›ò:ÕçUš[¬€.Q³ç›‚À~û‘ìö#­¿Á~ >(‰Ä’b-¦è­9®þµ^Ó_CeUìë‰+é]ù€"ñ²ýઃCÅ|ÞsÙÚS—ñC¡ÐD¬ï EQ^U†#ëè£è3{"h¦ròÛŸ°.`9bø¤ž žßŸÐHû*ÒøSO  Ûü…“kÆòƒ¨vã%+Úï)gð‚ùûЮ±ùÀ(-ñ»^çKÛ–nˆj÷ÇàñG|@6â§ !ªPÑHR… „ŽV28¾Z?dÚÀj}ºï¢Óù i ¨!0¿dí/Z; ¿T>ps]Û‘‡“ø…¬Bðó@õøaHó¤õ•jñõ˜Dm¢˜^­˜Éï"$QhÃH=þ‘˜Ë—Hó¤ë³u„öüª_\°$òvO¾ô,>`bµý`$)/îé¹Ïâ}bi>úŒž@˜ú:í60Žzîì äìM*?·ž£ÈdïæääkcÚͳ–·—µ‘BA>°S×®¶ùÀ0_â7•Êðê àñŸaÃG ªU¹oñ™{‡‘ýe£" çÝBsI|à{#Û&Né# dÉ®_O‰|@94¨×ÈÞ i¥ù@‡ÁA°ø€ä7(f!|†tŒn®¤«|èæXJóÍ(B{ñ@ÕGç-¼Õ“/=‹´&ÅûÁˆ^>P#"suË ôé==€,>pñKtl³ü†Œ£*’?°7©Øg*̘X?Øo"@®íÐnšµ²ýîr/Èšuÿ—u›ø¿íu>påÊÖ•¼úOž* x|Àãðø€Ç<>à;)=öœþqªUÙq}]ä6 ‰BI‰Ž’úÌoÇ\¬š³Áõâ4‹\_×1aL0I@Hɹæ<‘víÏüŒ¿Ù*•H{­nî¶µdò„¤ ,> q®Ý@6¢ •°…h’T* :Aó@ºC4–Ò|@ Rþ‹÷„O€ö7Äl:°³y’Qeñ=q±Ð~°5){¼ü?‹ PÓþ„!a®Ý{R9ùÀ–¸Ïö'<âù)áSz*x^>°3!~jŽ Å0*•?ÁÖEµ[f®h/k#…‚|`«á¿ÒæõZâ׽ήZѺjÇàñx|Àãøtð‘1Á¤ñ—#ö},§vs©¾<êÄÄgT7ë›á$Ž 'Þ±3€ƒ˜«eóGZ÷­ˆŒÇ¸]œÖÕÕíÀä?öÕûõ*2Ó_!í;`Í]Æ£²Óï¥ÕØ×u³`á. I ÐǺ5} l‡'Ͱ–àÂÇ Ü'nÏ2!oGá­Œ ªKæqC¬¦ ­^>Úÿ“o+kpû­Ÿ¢”ÅÚ¤Xj?Ø£Ç/ßgñ‘5‘ÒzÔ¨ú¬ž@Nÿõ1ß[õãˆ&‡Oí©àyùÀ¾˜ø€!Q†ñ‡ž@·|àÅÉuC4ãЊÕlL.×+Y_pýªƒ/¯‹z|À“§Þ—Ç<>àñx|Àãç¾I’ŸWC7× m?¦¯>À v!ÙC]ÖeÜr©3˜;>¸ðÐ~N>ÐUíÀN${QØìAZTy§$>  ¥ô®| «ÂÀh£;±rø) €8B"8ˆ`0I¢08uß` ‚A˜ß|þCš‹ð1˜ƒânöw·µü}ˆ2ˆð±½$>p0)>¦ÿ+B§@ÇË…¶q“!mpûÒ³ø@Ì+í7EÅçKœÚ‚ÊâÇj‘§ìü¾ ô/¿ŠÖµ¾7jýÆáá’â—`ò)+пàúWÚç·Ä•õu~ýŒù“Â7—;xÁþ¢Ë“¨U¿êu>pË+_^ÕîxòÔ»òø€Ç<>àñx|@©­­ýL_¯Ðéã3žì©à¶²øÀFG®ŸÔ'À1¡Ä|'s= [‘lC²Õêu¿•j¶ZK²RÕ¹¾`¤–<À'Hø$0ÉPàÔNý" 8ˆ´§¤n_+©¾@SE?€¤$ŽäiÀá˜_0%éƒà˜'(•HÃâR æó¿©XWd?à ǰna8’á@¢¤uCšĤ8Ò/¯"(þIÀº]oýtžˆÛQx‡Z ØYÐŬüW¶†NtÄÌ<‚ëÇ•²ø€NÚŸpC‡¸°„iu¤l>Ð/òT*@1z?àÌg9Ø’PÖŒêG=<®ú3=<C]ù5漨U"ù·ž@Þü bÉäÀúš1ïDü×^±:òrï6@€Üƒv: %þX‘þŸØþ„HxòÔkòø€Ç<>àñx|À÷åÏô{\¸­VJ8,?0ãLÎBgƒXÀŽbå•â )啨|à‚~±ëŽ ›vtÇ„g#™„rm6ë‘Ö­Îñ$»KCg>Æ(°ø€0 ß-U#98>õätë|¬GauYø@›N •‹18ÉaÀ¡Àa@=™_DfšÿÉÖOé|¤‘::sØ€yEüEû™²‘qÆ r:‡"8ÌØÀCFÿC´„U©ÉÛQºÖXù#k¬Ÿ”d#}‰q>v•Ä’Rn&ÿs+ªŽ…È;Nö fsxÓíKÏâ Ô”óÆ¾¨ìñåy]™cçôñUˆl·ù€_?úÑÉÕÇöTðüý “éþ†}e²¬¶€™Ê›?иªãñ= å€z¿~æÃã«®.wðnóºòCâ:<>àÉSïËãðø€Ç<>ðéàCÆ—FuT!ëm> þï´ðÔI} |†ô÷úŒUÞGò> kÄ\÷WG»S}}ýT)åÃ0Ž÷Õù™é³þúªF8iþË`€œÁ^쵡ÂûÄX#ž.É*®3¨RŒÑÖý„þEç*ûÀx`< œA3‚5¬ÁÇJkUíH]ù€"„è 7ˆ‰ùÜÀ‰LFåb$?F2Xcu÷ë4“HÎEð5t–3årö[·U>Ÿ0ù€´Ú fÞ·~S #8 {KâQÓ`’”øŸ_Vu8ëo(ž¤pÄ2•? Òù{ãrf‘SêXÙþ2ò„Íú«úE==€œõ- ³¿a}À8jîøªz*x^>С+¿±ž£ýΞ@^>0seÇ#»âÊ€áý¬GÆ…¯-wð‚|`§‘æc‰ßW¤¿aŠxõž<õ¢<>àñx|Àã•ç7¢~uXäÚïhåú¡‘—?9ncÿž@N>ðØØàåGUéŒ $×õóÉÀ^$¯#x•טÃ'"ÛB¿(eñC(çb]µ¯Ve›õ¼> |˜Á>)yxÉë,`} êÌ áS¹ɉœŒàXÒUöýœ œf°_ ÞDò:«Ä“lv=+ÀgåÄ bb.//ƒµ$ñ”T®Àq¤ÁE?$S€)¨|½,õX|À–µ$Óú¹O6¢’ähkvNN$ýEåVi>  “©ÉFT»AWYÏúù·¼…w9IGI| fˆuØ|`wÕ±Žù€ 2Öº}éY|@BŠˆW `˜lŸª/ð=(ròf‹ óëGW´¾Pª•dYÛd*/¸heÇ#;¦ÿÀ¨ >î±½œ?°K×®5$I*U_pÙŠ¶eë½úOž* x|Àãðø€0@M~u˜_¯ÛÏ£jmÒ¿·*ýR²å„ªÄ߬FçUëâdYUWW÷/àJ`kKK˨|| ‰à-`5 /‰9îWA¹”ÅÈà!E¾Œ²É©À©è|MÎ`'æÚ~5¯ˆÙ´7„.þ„M‚‹ êg+8v\"È[ôAp&’±À™˜ùY‡ÉÛÀK¨,v¹4ïìOèWÄ€vƒX†9þsÀsòvÞä(`,0Ö‚  ",n`pc©|@PºðH­€íÔþ{å—èC„3³¬A[cæ†C>)[À€$¦q(>¢¥ð%jò¤Äÿ̾ªcœîA€ Xç6x0«ìÛ¢òâ"§Ô±²øÀpy¬úE¯ ØKç<>±ê¸ž ž—Dtþ@Xê½ï?ðܤÀÚ:¿q˜ùqT»ñ¢í÷”3xÁþ­†¸IšíLÄpòw½__°"ºhƒÇàñx|Àã ÀUCÚîøïá­âüþ±è·õXNi^>°ÝÐö ÖÏgìÐ7¯‹ÐYV†jûNrÃÀüLÁbt–ˆ4—:€nù@B*w€~æÂ3d¢œ€ÂÉé|ˆÂb–ºIéï¢Î|`Þøàâ1!}Š€Äqý!1]^H€gaæ Œ·l»j#’Å<+žä—‡!ÍTÅÌè0ˆÙ+cñ,1`)°TNÆÇNEçl“I‹Ñ®Aåʲô/9ø€XJ3©áey;wð' 2ÅJ`¨+ò0dø ZBNø€ ,줆ÿ“Ó8¬d>b€á’”…Ä ‘òhí=žÞŸÅ홋Í*Q_pæ³ÜSÞ0*ãOØ‘Áz; 'ø$®}eú²ö²‚ W| Ö—ìýþðä©Ròø€Ç<>àñO8läÐcj5ýRk:z•ø~3êÀ? &Å®„¢ŸT•Ø= È!%,>óJ×õ_+ŠrPeñoˆæ©„wthû•40×x’g0x¡œŒ ‹Ì¼òˆþ/€¡~ýí!šÑµÉžäUTž%Á’R“²ø@ÂP&Û|àݨï²s|q€ÏYöú ‚318…ïËé,EåYT^înÙ:óùニG‡ô)R’8¡¿Éäd|ôå,k0“Èîè·Á‹HæŠyÙûCŠ(Šbú$eš€¹,óY!æó}4Î~†ä Ò•\àñŠóàöSûMžÜ7ö›Aš!v'ÄŸ6lÛñP¹‚ÛjkkÛÖ§OŸ¾˜×¥éÓ§Ïã­­­»ÀS‚¯ê§(ãÈ`âUMåY šÄ|Šzóuw(EÙ€ù/úÇ–––oˆíçQÕlhûÔ®|@²AÏ”MßI]ù€²¬-Ø Z}êvÄ” ãU ¾Cœçä þWNËpò/RYý ¡œcó6)~!æñ¾œÊHT¦Ó~‚ÀT¦Ê6óññ¤˜ÍÞ"ÆP8 u¦ÆÇÌDpT§ÝH¢"xX4ñ±ËÃÍ]ø˜x¢‰¹b>—#¹˜tX‡'|É¿KáŠ*¤0Ý~3Šù¬óø)¿Ö1ý¶òô7ÌãOØi æÃãÀãr‡—ê? èÉ40ý KÌamé| £AEü Gšl•â[cÊ»uãÈÊøiÿŸÐÿÒSøt×dòŠÔÌ\Þ¶Øë_àÉS%äñx|Àã©wv_%þMÈ^çm¯"Ðú¨Æ®ÑA½³Ñà5 â$VZ59QxakhšbñÕw!ù2Ñ]r*‚ßó³å fÉ«–2€®|@QñYûÁ¡äl1Ÿ…b>× òeÌ:s;¡að}öó”œÎ-²¡èÂ÷Î|`î„à¢C3üºN³œF- #hèRgžGå·ù&ø€&D°ü s9÷/`‡˜ÇŸññy¿B¦ÌýÀÔRû(iC‰îùÀl:D³9‰‹üðj‘‡:õ/°ê  Îø€ùø `…ld$:FiõºX&X¼<|¢›½ˆÙl.™$+íwǘQ´:R8¬OšôQõÊô7Ìäɰù€5({·Á§' ‚vCEóf-k[âõ/ðä©òø€Ç<>àñÔ;ûšÁ»bH{Í@͈Ӌ|@Ì™ºä°@òQ€~>cÛÈ€þ'4þ-f³½\ƒ“H)¿èBˆc›››?TÈo(£Þ¯ï.&N“làrõå@ÎþÛÏ£j¸_? 5)>ñ >°æFCÒ€B“œÁÿÊFF–ãPÐ¥²¤=4]X|`SÌ÷óø‚o‘n5¯SIð„œÎÏä¬Ô¿TQÊâŠ祎‘š|T€M,ó¸…¯#R°BAp:Êî³8¼È1tâŠ&ŒáæÞILTâŠ[Ä\V‰&®n±RûͧJÎEça9ƒß¹Hssón`§5‡+U ËŸp)É\‰y¼*æs 7^– `:”Äìu¡OþjsyCÌã ®!Ãt¿eô/æWª_¡ ÿ@j xøšõÊõ’ø@‡kÁôX¸/ì*KFÌeSÉ|@"RïÊQ¦—0­Ž”³¿¡.‰ Rõ7HÌéO¸-núõGÎRüv]¹ÃzŽâOêí©|ºù@«Ð®7$ÉŠñÆ¥mK×{õž ÚOzøÄøk××µ×ÔŒäЀœ±rÓ¾Rò†;)‰Dªªª^B\yFTÛÖÖ675 Í<6œœ0H3¶×ûõuHAò€X@k¹’— ðÉÛÀäC4};Bp ‚ùr:WÊ ”c9ùÀ–FBC5ýx€-QåCŸà»ÀÌùéƒàkh’ Ì”éCVŒròÕÛ‚³ìüº:_ÌãöÓˆäÀþ¿‚ä6’Ì–38OºÿI)‹˜õ¦†jɇ!Uyÿ3Ü Vu…d$ð fð œÎØ"ÇЙ„1L>0ùˆøGFk^1¿éHÂÌ8ÁŸätî– í&zÐ2ûÜm.Õ³¦m6Ä|~ÆLàIì¯[ÁÉHþQÖZ]uÂf³]ÌãǨ\ ,+ò@§þ(hr2¾|”¤Ó@Ì”oÉŒF!Y*øL>°XqÉæ±±d> /ÛîŽÓP´:RÎþºÅ‰ú*È¿ŠÖË .`YîeY¦òòVC±OEî©tËN ¬ì7 ?ˆj7^ÒÛõ; 훌ҽ__`õ7¼<>àÉSïÊãðøÀ§‡üüŒþÇïl7^y­ÍÜõõH}åžlŸ;´¼Z¶ËU>{ˆ/©ˆ§ËÞ\”:ô2!Ä*Òù_ë_ë¡q¡™CýÆ¡ƒýÆŽCBÉ hÌ•3øb©+b[ú?°0i†}š^|‹Èœ^ŽAääÍS ×úã¶ÄÕü'ÉYÖÒÜ>þ‡wÊüV6ü,x(èÊ^Þ¼ÈöhM*óÅíb>O£É£¤Óû'“`¶œÎ-²‘P±ƒÈâ†2Ù~p¨–|$õÄg9(æó[T.Cb?‚kH0G6pA‘ ¢3¨VŒÑ"s!*æs+ßD¤Rû‡ ù3¸W6p„›èY|ÀöˆwÃÄ–3˜Kü ™ú:¡dÿÀQ}€¸›„˜Ï¿ñÓ€i†PlÑKŠ(vþ@@Esº³Ù+æñSt.Bá"·-&É—?ðüZ—ý ž,C}BêθìñåyâkÜæÕ•àS–Ò¶-ßpþÄðI=°¶C»iÖÊö»Ë¼ Ø•Á†ù¿õø@¹‚ƒÇ<}Êåñx|àÓÃæN©žT-“ ·ÄTß}-á HžÜ«õ52q_­¦ûN«ŽËß}pï¤}—ÈÆ,·ö¢T°AÓøÐ‡h&¨;ŠÔHðˆœIY¾š»åAU~ @šŸ`·a­Ý€QÜ%ø‘üRÎþv®”“ìšF?ÐS>öŒþb4wcž® $Óˆ0_Îà‹òö¬$W‡‚®|`éÞ`ƒ?°?©6Ù\OÌãnàZÀ^1›Ää-þ,g2¼ØAdñxæK>ÖéÉóYÃ<.Gá‘´þ|OÈ|µÈ7in> ev}X=îçò4’Ë‘Ømê}À—Ið€làX7ѳø€¢€Nþú0]ûÅ|¾Žàûêiq(’{Kâ>ÛŸP:ûjM¼ˆA#曩t>`ûüN©X@«˜Ç/ÑÊÀb†Å@{~w•«|²øFº¾à`Bö¸=`è‹àñN¦o9®ßùóíqÕæŸmnnv{™Rkkëö~ýú=(¥<¨Îéӧχ­­­ïgÍÀœ‰Õ Ä PߎhûbIã”ë_ºj¨žOŽø@•HÞ'@ u4_W½WÎ༢£f¨ xb\èâ:¿~@ÕØTdè üB6p‡œA¿RÑ-ð«|ÛzÀøÈ]ˆäïØWÍ%çËL.u9ý wM£fk»¶Gh;âÊç-‹ 8ƒ[-l=CŒßŠgS+e×Êò'\¸74Õæ»ê\û‰¢‰©åJ$÷“¾¾ü9 Að'ÙÀ²‘¾EŒ¡3gäL?×bë‰s-ð ö7ä\<(grš›èyù@Rï®òÞÂ6n€Ô‚´ƒ¿”Ä4«_¢îðÔ@Ìã-4¾ˆÙBÀ ÝpÑÒ| †8Vÿçùb¿F2«d>0ÄÌ—¢=óaÕQnö"æ³¥d> Kaƒ'"†¼¤ˆét¥,> ÉÈcå¿D‡í?0,`U‘ú‚}qÅ>SQ$Æ‹ÜA9ΨHÿ‚íIÿUºÅ†W¢¾àŠU­+6x|À“§ Èãðø@'>ð÷3«îølßèmCa[\í]>ð𤚳ŽÒ¢+Tª ­?ë4~#f§Š‹VA> A ñTaò1A}}_Õh ÎýrjyLñºåsÆ…íüƒIñvPÈÖü…ʃr:Ÿ+uÝçøøo!0"Òq.C²ØzrÁOät~,§.eyû4ïÓöŠ.|@60É· e€° ƒÛÄ>rÞTx~khªíO¸Çʰ%š˜‹ÊÀzëO£Pø‡œÎ%ÅzdñŸ"η©%fgm0‡ ĸ½¡ÁcV\”Îþ„c''Þɵ…x–˜hâ þ;#‘a –Óp•]_ D?°ø@!çþ,AòEoZªEáo¥åØ|Àá*_,`'p#p7¶Ì£´ÿ@»ûŠôËFüN>ù¬™º[Îä€Rü| 6í¹½UGAä§{)"p6ˆ"eåЗ—9¥Ž•Ū2ü‚è=n˜“´Tº¾`OPå§À "õͺÿËz%ë ®\ÙºrÇàñŠó,M:dÈïFÖ•Vº÷jkk‹îoT__R]]Ýzk_²®®îûÝnðè¸ÐŸÞþ¬&LÊ ‡ ~Íú+IÇPWW÷š=ˆúúúN—…R‡à_ckÎ:6]á¨~!£‡†’oj ?M©EjÑr”?0ÌÀgñÑA}½&ð#ù•œÎ×JIh|àÁ³B ƒ->ðIT]4íã€@p%oòWùyJ:Ýò~>ù0ù@PõÝ$æ²ÉuH«‚à44”³øL)ƒÈëO8<`Öl‹*ž¿´í=°2ë—“öª¯EçÙ@ѽÑsÖ¬l 5Ø|`¿®ÎËÜ@Ìc?óø ‚?c~¾û‘Ü&gð‹b=ºí_é?ÚÀìgð/$·íÖŸÏ#Î=E¶—èÌTa P‰Éƒ³ë R™ÏBT®Jµ…²³ÜDÏâ>«¿aÜè>,ZâçJ$Ë­?õEò‡Òø€b§_àb6mÌç[Àß(Gþ@»nºmÜä€ó¸…™¥æøb“9B{ñãªÏ@ä-§{) 8˜©Ïúˆ.{¼}@¶ÿ@"Ýß0 *À¦¾N{s¨HþÀî„òSsTŸµ1íæYËÛï*gð‚|`«á¿2Å|‰ßô:¸jEëªuQxòÔûòø€Ç*Î:]¾—·£ôë¨ybˆO¿ymTCšùçoß¾ýÑÖÖÖ'ÁÚÛÛãmmm kjjž> ή©©‰·µµ­Ì;€c“¡?ŸZÿò©5 N¯‰oY#&=ýÑî¢]ü]åÌR=i´[¤Z|à°PòCŸ`-ß h.vàô#q¿?0Ô¯¯ò tàþ)gáÊÍ»« ò‡Ç†f ô‡lŠª/õÓåç,´ž3¿Ëéœï:r†º÷'Ԍ۬Œ*Ÿz‹x–M|¸óìGð39ƒJqîÏ™?ðÉd‚û}ÚAE m‹)k>·<Ö BÈ\üXUÙ’çðó“bsK²ò^/Êè_0¯ëbÏ"¸ ó“àŸrµÅ  ÛþƒƒÉ‡rnÔÄÇ\O:‘áwÙl±  ÍÎÑãçùšÑ¸ Ák&†¡óOÙÀ$7ѳø@ÈêoÓ»÷3«žø®e Fò«Rûèæhœ±@ËÃò·–‘fÁVy”Q_`˜)ššœì|- æóJéþ>2øÀB_ø8hÓé^ÊÂèb‘ýàÁ½ï?P̳ù@•Ðgôôrò­1å]€ú qäsgW‚$Õzïú*W¿Ô>ogBY0̯Ÿ9wBø¦r·øÀ׬»677”À–XšÔk‰_÷:¸æ¥ÖÕðä©òø€Ç*βÔ4!´dùÙyå1z% Ó <46ôÇc«’_*²­ÏønÝÓFIm‡ûΟT=e„{± Ð<Ì ü¡PÎqwrÄ$ïV* uÉo|Âj+(¹Œ7ùI)çŽòlÿ-1õåc_LþÁÀ^kž.`¿/%½ßQþ`„UõfÑÄH®E²ÍÄ™¨ü½”D†œùk/$P4ûl‹)ž½$ò¶½˜Ï®ìEë1ø¸¯È«æ¹óÞ8lô!ým†² ëF¢‰=Ôp=‚׬™‰à>9«“1‚ceñÊûÁÁ>=7x€>¾,²1»‹ô¯ìÌü ©üü|`6qæñ=$ÿ¶þTƒÎ_Ý«¼| ª+Ä}H1Ÿ?!¸Ëúƒ†à'%ñ¤µ.Tç¹B¢‰{ü“-”–?”掩¹IXMÌE)Ý X¼<|"´¿áxåàûuaQö'èýþ#k" dº¾`FO ‹œÿ‘1ß;#B•òHŠŸ™£ª¤ÿÀäÀº!šqhÅê 6ÇýWT´¾àÚÕ­/­jwƒÇh]œ4—a’>î”ÓŠOdè–„-B †"|×§ŽÏ|þ„͆ªFá/¥4TÈÛß°^Kžfÿ»¾ cw!ø•9>–ÝÄbYõû‚³|J*`~® E³ü;›Âà—n³êSûêÊÚ %õj†“æÝ°‰‡€ßXƒ ùl`|cèâO(LBÅô'ü°»-Å<~€¹*ö#ù?·¹øÀ°ú:©¼ŸÇ H~Œù•« øQYø€â†Ìç? ù†4ëF|à–¼XŽü%ŽX‡9Ÿp.1—­%ûˆ‹%öƒûâÅ×9U82y¬üJøNYJÛ†ßÛ`Ö¼09|jOÏßßP?0$J\7þÐSpÞß°õ›þË+Z_píêÖ—¼üOž*!x| k²õÁæðS£¾ îÛ&fˆÞ«/8~@hÑÑáäg %9©*¹÷ˆ:ùã­;î©ú‚N3ðÄøÐ‡‡’7„Ù6&˜\çƒ%à;…R~óÉqþÀcjÆŒ.Ô„¤ýØpbq@¡ÎzøNä‡Åæ8â}•Ä?±úlŠú®¨\ ©Â†óx››Y憎¡?°=®þgÖÊŽ‡E;1¸ »Õ d3øo÷áMuËT…oXRø®MŸ4£p3v"\,§§Ò2]+oÃþäI;âÊÇY|`.›Ð¸0ÿWʾYì¡ +X¼;8]IûÎ͵¡˜Íf$ÿ…Õ¦Éer—3ˆ,>Ð’JÏÏåO˜Úp>kðq i‚oÈé\YÄ:ó>Š1,ÂÁ‰5ÝŽ~ï£r+ÐaޝÊî.÷fñÕöùÀÞÁH-Íð’ø€a­ U‡õbËü5ˆÒò¤0© šlÌþnÈ;ˆrñŽdº¿áKC§¸ÙKYø@»Kí·DÄÔ"¦Ó•²øÀÑJä)¬÷AU¿¨§ÅƯ¢u]Ô÷@]À8¢"|à`RüL>0>ùë¢Ú-3W´ÿ½œÁ ò‰Àå­/¸~ÕÁ—=>àÉS%äñdóó&†Ž $Ïþ׎0î ÷nÿ‚ÇLJJž²c{BýÁä%±ß; ÜUNútÀ¼ñÁ¿ é7B$0ø¶X²s¥B| õÆúרš³FõëâíýUãÛ>AóÚà/Ü6X·µuëÖ½†a|N±@Jù÷úúúTK‚ÔjµÄ¿mÿæ„zÃàgŒ»€_YóDò{9Å ¢ xt|¨ÑæÍ1õÕéË£ˆy̱šëôGðgÙÈ€bÑ-3@ Có]ÓiËùü u?œ(Ö™/'ØÙHõ¨€É¶Ç”?·¨­ÓU€d¿V[:†¿t³ŠÊ<tåÏo MU->°#©æ\ž‹¥$Ñù`nkPøåÈnQ>WþsYU>p0)>4Gƒÿeø@±Â~ps»øB‘SêXY|àĪÈÓv}Á@ŸÞãY|àÔ…X3ù@­ß8üù)aW‡Áòò¶$¿“Fïú*_~©£i{<í?Ð4!|s¹ƒôXŸ \ž´ø@–øU¯ó[L>àÕxòÔëòøÀ§“ÈÛQ~¼ æ§Ïî }}sLµ×ù½Çš&„LžÝa¾µ¡O|CTûu¯ð â‰ñ¡È൚þŸ~aÙ f§.ß:–>Ðé¸>>.ôg;¸&dë¡¡äGý4YEœßÊFËÎ…œÔ¤ðq}Î<,”¼  Ã‘í 1Á'¬UŒàxâüÀaÜNrÌFúbÙý vÆ”›Ï^’x›ßËpjÿ¼l(êRma>ðиÐÌAþ´?á´•ÑijDå¿ e†p«œV\f}·| šZé"à».sC1—M|iá…_[m‘— ÷›õ;âÊG_XØ–e /ð& öèî(Æ!'xzkèB;`WB“ocÑÄ£Hìü‚züu])»H÷/8$˜Ÿpw 1;ÅKNb?-"±¥Kþ€Å$Î<,ÑmCUq;~~ÖzPr.Óù¢›èY|@7D¹/ââns‰Öí fs•o¦Ò9_/‰¨ŠùÝm¸˜J1‡ ¨ÜF9òÈä.ÞTeã­ºøÀ þÕë+P_—"•ݶ)Jeø€íO8ȧ÷x…œ|`]Ô÷&˜ùáí:w€É0*àO˜Éêüú &…‹! Ýª0ˆ¦ùÀ5qGïóW<>àÉSeäñO'x`\øï»ãÊU÷í¨ ìI˜L›^á·£Ì^~þÈPâ\€;|ú÷6õûUÔPþ¯WøÀSƒËFô `òAý“°*ÿ)šø“à™rÍúƒ0Äoüõ€¡ùÔ³¶öósÀ^¶N6PT{òœ|à“Éíþ†-1åÃse7^³‰£ñƒŒôþ¯ÉŽ.æPЕ,jM¢{ÿk›Qøé>‡¿•3èçvY|À¯Š ìG‡s»Ý¸‰•þeÝ­~QDÎÎ| Z5F™?pú˜ÄÛ7ßÇ]lûÓy›+ÜDÏâI¡X|@&ñ¥$ñqvƒä–’ø€†”º‹S1›]À÷)g}Oà“p<ˆy¼^>p !Öÿ«2äj=P>D¬²ÜØ&\Z£œõºÅkàãWÑúq‡ï sÆa‹§„Îè©àyù@kR¤ò’Röj}pý+íó[âÊ:€¡š~zEøÀºXàò„QA>pëË_YÓîxòÔ»òøÀ§“H ßsh(yÕ‹ûꟛ«¡7ýžÙ\2ÜZ% Oï =ñ—í57÷J}Áü Áe£ƒúDÈàŠÜ‹ÂånÏý\óûÎýÖ~P{øŒï…Ù„0ø™ÛoHWù³'ÕL8¡&ù €„¤}oLŒòŒñ'$vOì£Ùë ©¢@»A̱ÏH5?³w\QZCCŠÎóâ ÿ‹ù]Œ9JFC)…ôË«:Ä\þSžúÝâ ½²5t¢›½”…è»~ˆ âÂ"¦Ó•²øÀ±ý"OÙõ5ŠÑã ²øÀ™Ïr°%¡¬Ôzx\õgJŠÐºÉP~9/j•Hþ­§×@‚X29°~ fŒä;ÿµW¬Žü£œÁ»õ ÷ ]c˜¬âðPâ½Î—¶-ý$¦Ý  "=>àÉS¯ÉãÝà7§×œµpoðÞ‰øÎ§·ùÀìñá{Ž %®2$êm›úòV›Ö{|à©íÁE#ƒú$ë R¬ûûöš³ÿüÎ^Gg?%å,˜\j/Ñè8$”üÄZ¢?.æñk'°åšÌú«0É/±Î˜0ø®›EŒ­œ|`Ï…ô¢Ç‚ɦ/iÍÙ«BÌg ð uwÜWÞçäËZƒ3l>°/¡tŸÞ¯q‚O¬Cq©là·ƒÈîo˜Á†û’w»ñlâ¼HÁàÝ\o¶Ô™,> 1ñìøû…¶óya ÁHîÐ].>Р]wÁ¢Ü©ñer£]ÎÂ~ë¶J©[£qΞ%†ävl> ¸Î!Èèohˆ6€°ê²¿á|Þ-Oÿ)7€™?ðÌÊ*W Ó²ðjÊ`»ìýþ†‡ÔDæØõý5£÷ý Ï|–ƒÍqå}€a~ýèG'WåºãDùýtÅþvRªõdYm3•7àâU³÷&”ÃúØžUUTY_wê6@€Ü­‹ë$èB Ž 'þÒû|`EtÑ'1í>ðø€'O½+t;€ûÆUO9ç·î ŸØW{ŸJ\¥€º%¦r˺~m )zÜ€öÂÇÁ%C5}œõ9H3¶ƒ¼£þãONYñ|àv”–WõëgD ÑvT8ñ^Uj@ ‹Ål¶9Á, þÝ~ )ön2§öѤ=êq¾ã48¸äó'UOí½¨Q)Úw&9eêÒø‡Ó¹ a5Õ|G4¥.\:’£ú‚j%q/ØÔ¡^3u©ÙåM€ÄÇVõ=H¾-§v3€‚|`î„Ð¥v}ÁƨºúâU®!‹9l@I­Œ‡ rƒ›@!> öJÎüúréŽ_”³8Üí òö/HåD•¼ùâŸD1Rå*I¾ï¶ò>oÿ›ìÕÕnù€åÔ¹Ô¼Ãñ4¸sæƒ|Àʹöƒõüý SÒø-vƒäkE9dõ7´³ œåÌf;ûÚb_p×N"‹ø¬ü7|àë­{ÊY©O:§ÚoÝV)`æ¸âKIbðsÌÿkiy:WøÀÞ) HfðçVT¹Z˜–ì‹V€ŒÎà}|ÊØnçTŠ´&Ó| ¯LÞÝSÈËWu<¾'¡|Pï×Ï|x|ÕÕå^dæ¨PþÀ†/À“§Þ—ǺÀƒcçõ󉿮íðú»m5Bï|]¤gý ç¼¼ÿð°~9VÀ¿·TGçí >Þó|`2¾ .­íÂiÆZMÊ/ˆ–M\7rÃ:ÊÛQ^Áevð¨!ÚBŠqg_oÖ„¬Bp]¡à»wïnݾ}û÷€3€ Ö ýi]]Ý÷»€ÅÆ‚™?ðI,pÊa1ý*ù¿Øƒ¿«ú‚¹Sª'ê×Ä Ú÷&éÊÖÅR’HË—N ¡¸k®çØŸ°¯‘¸‹lŽù®³óÄ|V¯šÇ‰)n3)õ7´ý 7FÕ—.ZÙñHÖ^T~Oúæ›nkÎÕH04n> æ°]$o¸·ËËêü&hŽ*tí_ÐI>þ†ÝÝOps1¨†\|òÓ*ô~kƒñ¹÷¬ÌÅαtÈÆF5—ËiÔºC>`ù‰)ƒL2V`âÀ_¬Y¢ð7ѳø€‚Éâ11Ûá2{/"±½*.”Sãrö[·UŠO˜|@ºáægûo±ù€æºÆ Íâ)®óÖ”'@—ëÁäÏ/«:ÎÍ^ÊÃ5åO¸?.gº|%®•ÅFÊÈ6¨®¿ŠV;`„_?úñ‰îƒåç†ò ë9J zïç\²²ã‰]6èg=0¶|à ¡]'+Y_0syÛâ ^}'OÐÿ|`â!µÇ­íP®¢·ùÀãª>;ÜŸ¼§ŸjŒúöj^Øß)•¸gó¾ë˜PâañI¡_¿¶ÿc­†úhç<óapáð€™eŸâ>}§¦ò'Ñ”j5—W¥ñ‚Ëìàí†h[Ó¡^Uç×ßÒ’H®ÓRóªT>`æèbï#pê¥+£ÿ¶,jÎ}È\×â‹- Æ¤hoé'Ûr2>úñ0hGc†›ŽŽòúÈÄ}ÖNn‰ª×§ü°®Â]ÖÝ0I®rð9C— ÖŒCÁäYõ'ò<öÕRÉE²!unïHê dfþ@N%nÇÀÀ>_ô#¹ÖÍ Ø~Uõ~ÓŸ°[ÿ€,%Ýbpºl,ø©˜u(Ȫ/h 6@aÿ°Ö„ wZw}ÄݧrtËê‚…ù€˜ËËHÞ°FTÌʸ3¨RLó )Iœ3 þ‘£](ü5õ›mc)‹!ú$¤s> šx;£“Ã9%ÕÃ2fÁä¥ÔØ| è–4ñqYø@ÔkÍÑTˆè"í?°·Ò| ¿ª÷~}ÁøU´¶$L>P0Žš;¾Êuñ’Sååºb›!+E¿³ÈýT^>0seÇ#»âÊ€áý¬GÆ…]ÑRA>°ÓHçŒ $~ßë|à²mËRùž?¡'O½¨ÿ7øÀ]§‡?ÿОê©kÛÕ/Л|àþ±ÕgÓ’÷ õë‡Ô®[ÛŸƒÉÔ&½W_ ŒEûƒ¯þzkÍ/zÚÀÿüÎà¢:¿n{ÐÉ~ª±µÎ¯ïÕ{1ø‚xÒºx™G%ñçw—ØÁ#ºh{·ÍwùÈ€þ=M!‰ *ÏšŠæóדּòèbo³8íò—:ÆOö©´äKN{ºÎÒ¯ˆIÑ~0Éø‹–¶š)þ¦ßÀ#ÖALÒù…kÇþ„ýeâ¶ÿÀÆõšÌüjx”t›ÁkÝœ/æãBL7&¶ÄÔ—»Öˆˆ ±/nײ‹sÄN©ûüŸ´kG EóåOTQx¬öô’«Ü¦÷ççšÉ¶ÄÕ5Ýåˆ&ö X`Ý=Œ™Lp3€œ|`u{p–Ýßð@B™Wøeðo°±®/nåò'œb?X_ÀŸ@, xÞº{œœÆ©.Ç?`òäøG»Pù'ö7žânºÏpX_ æ°XnÝ=£¤ú!¥ÔݹÁ=˜ÿ×É’ê tañM6šß|Žfa•…Ä ±ÌüwU€dö/Ø—¨¨óEf§ò½÷ó¦,¥­9®¼0r÷uë}õã6–ô¨?áÓ;‚‹GX—ðÙaˆwN®Š£)$?ˆy©2ðœ*ž€X°=<&EäýˆzåþøšÂnëiº¶T4xb|è/¶?a«.önNN½luôAË…+Ýõý-&â@®øÀüIÕS%o³¾à`‚ 6°žùÖé4Âys=Ç| Hç´$Ô>·¢ó*I4±,ãÉ©r‡9DA>°`bð2›lèPWMÏè_ÐI"ÕBT.s:(ÀB~ËzÀ|y¯‹&>À¾|opžl¤¯›Aäåµ¶?aLù°ÛúS6+ ’t×à 'X‘Áö'»¯/` Áú—4ht³œƒ\ùþ„CÉG îàn·fa( w¬ˆ®| ˜áOèÄó°Y‘ ÑMô¼þ17|ÀÌ!zÉI%ñ»nóT¢œ|  Hw|`kËʤÄÿüî øHHåˆWÀ`˜lŸê_à3zPä®/H¤ý +Ú¿Pª{™(­ìxdgBY0*¨ëõú€]ºv­!IR©ú‚ËV´-[ïÕxòTý¿Áf5j ß|vOàˆ{C <½¼õuš~×`‹®þ¸?;*ô‚ÿÀ}‡‡õ+ÈȨQŒ}kcþǯø ïÿö(xaWp™íOÈ1ßòóûGc!;9‘/tw[xzGÚ±Ãmoô]6}yÇä€"íW0„7G7*š4MÞ9Âêì1ÄÞ±À)W¿Òa&;ë,À~w ¦ã@®ê æL¬žxX ¶Pãí»ââ´®Kt9ƒ?cÏ‹'SÔ¤[9ª/è'ÿ í?p}×àÖpçY¿©¨Î“ òÇÆ….ÎðX³¾`0+ UY1ÝÍåûnù@Õ°¿§óûb-Láëîfàê¼!C¿ƒþ†©½¤L€2ð%Û‚3ý S³ð$Ÿo[wÏ‘ºk7Ù­?áp­ûþ)©YðãÇm7¸.|@1F€ÉçxRÙT3ÜDÏâ~E èpÇ:V…àp7ÈÎÒ~ë¶J‘R&÷ç³±ù€Ïò0u® >€ˆÜ攫¾ “<³¯ê7{){þÀÙãéýÝæô«„ÿÀ”¥´mµò*Ö¿ –™?`Tˆ4ÇÕu#úØ“®ûÔRA>Ð!}7 KCÔÄÉøÄËðä©úôó³ß]è’ büwÌGýbkŸð¦h·§ åõ'¬ós× Í¬KX²?À¯¶Ö@Oç<6.|ÏQáÄU¢ ¨VåŽÿÞÔ·wKæ6=š?°9ª®:½&Þ4Äo\fðb~*µ7K%ñgw—e欉¨_žº":aH•qöÕs…ó»;tEó§&ï0áDÄ{w&ýg~quô1›ÀËœå亱ëü‘]ü ¿°´­ë»Ø^ h$]1uìOØG$îÃöˆù®Ïª/ÐY†$j¯ó ·åÈŸ03 OÒŽHeTŸäƃ ûúÅô'4Àðù´ë»Ý“Âs©ß$ç9tãOXkñ–¨òÁÔ̼‘\ÄKZ÷ûPËŸPqØ¿R”d‘u÷h9“Q…¶é´}W>@*œ?`ÎeƇán访á9 ûp2o`~|Î ¬ÊÛßиÉB{*™U 0Ìþ†ŠÛü³ØÅΈ»@šÅæÌc}¹ü*ËŒ >Е»|%®•ņËÈ`õ/PôÊäl¥ý*âOÍàa©ÿ­ÈýTÞú€ç&ÖÖùÃÈ£Ú­h¿§œÁ»­/h5ÄMÒâÃýÉßU¤¿¡çOèÉS%ôéçOŒ ]PùÖˆ@òÄ×Ûüþnìö:UyùÀP?w Îà7®ëϦ¨ÚÃõãÂwN\mûF_ÕØ×O“ûZuþ2âã™Û˲NÁd#ê“C‹%g PÈm1uõ6éÿ¸êØIAEÒG‘¾”ºŽlFimíhkkû µµu~0ü³bê $„h¬©©ÑÛÚÚ–w—³¾`T09Ìü÷#ê—?·<:þRs¥¼Âš·cº[–”?`×´ébïvügØ|À<,K:Y¸ìÛ%N9$¨_•¢ý@‚ 3ºæ™xˆY÷&¸¨/è§Èûíú‚O¢êU¹ò¬ –vìéN¯æB—ôó™ÿj[bêË—®ì˜wo» ˜g:ª/Pä·­ ŸêëžÄXýI'ÕšØÊ›?0ÌòØW>º`IÛûÝíD<Í>„uù^0NNv~æ”7Àîo¸'¡Ì°´Ôº­¡¯»~Ù|@Q>k?褾ÀzåË2~wôß¡.|€tþ€Óúk=ø1`võ(…¨ŠÕßаd*¦ÁuÃÍýÖm•"(’¨<ÍDêÃÉ©2úÊ Bïh«÷iúH‘ê_ðœZ>0DªÁÁhòêý‘'ìú‚>j…ü¶Ä”wÁäOL¨:¾§‚çåq©üÎzŽâGÿk‘û/¨nùÀ³“‚këýúa€\[ >Ð&|×Ûþ„•á^COž*$WçëÏ¥ïw :yöNm½ÉšÙÇ'¿o¹{ûoßÔ‡WZóºÃ•ןp¸–¼§Ö¯w*é\~ À/¶Ôô,hüç!!ýK"ƒø…ÜU0ZÊlÑN’“3Ï!ËÚßð‚K‡fô7ÜS_Š*êWfôœŒäk”WŠùäÌÂ-ÉŸðY#<.EdM‡zÕ…Ë£ã–FÞBᕌ-ó® ‹ï_°8ø7;à .ön‰ûO»teôß©'ÇHë²­Qxaê:`T@¿ jˆÈÞ˜;syçTN/4pèOØ?íOøÒ%«:òç˜ kL9¸ð'DÕºµ‹siA²Ùº{†Ó@7þÃíþNòÌYxÙúm”œIÓäõÀî_`8ä2½ÄÆ`¬›YèÖ NqÐß o`ç¹xXÊí?$Î9ÇYþ€e˜i·<ÝÍEïlB‹DÝóû¿¡£>`ù ·|ÀÇbÒù.Á­`õ7tç?P>b˜| "ùqCØä“ÖJÔÚ72R| ÷ûœù,·Æ¬ú‚À§ÀŸ°·ýræ|×¾2}Y{Y\åÔú’¿òòÊ<>àéS.WçïO¦úm½jÆýÛ‚5ïwøë{Õ *¿[ë×àßS¹nmÿ|]”Ê›?Pïçîš‘•9{óºþ»?‰ªvzoùùÀœqÁû3ýcoRÙpRu‚°0"šàÇb~Êɽh>eó'oGyfbpÙáaý*+¸ÜSW­ïðŸìh/O²‘ô ÷D7 «0?ç$ÎQã;Ùƒ0ÉçÛÖlëæ¢w.>ЬþKSÔ£°d*$H_Žp9 öìU)BJ `¸ç+±ù€š¢æN•ÑßPˆƒ!!ýÉГò´ŠäÄQS|`_´þ„£DdŽ?ЯRý íüŠñ˜T~k=§r|ÀÎ ×vh7ÍZÙ~w9ƒ;Î †’¿õòÊ<>àéS.WçN£fͪ‹Ö¶)‡ÿe{µ‘Ð¥z‘Ôôã i¶•ûss5Oï æzzÏç¬:èütsû¥ü|àá±á¿S•¸6³¾`SLýðäêDÛŸÐÖ‹y¤ÎÊ—?p;ÊS‹‚‹GõIæ«@n‰©«"ªïæK—¶½'gð}ÌE…Îä\½Kòxjqp©0”ÉöƒCBÎø€˜Móÿ¾3Ô™T)fq‹”$ÎÿÈñnÒoÄ1òBN7ËË’’˜˜í¢ @úQ%X|þ€Ïg}u»æfƒý>hu¹mšD¥’æîü6–…$eØ[åjaZ¦ü5U‚··£ý Gš2ø€«ŽÅ(‹œº[2úVÄ ÓŸ° ½òùãÚ­Ó–µßYÎàù@»Ô<BÀãžþ(×ùo%ª¦ƒÿ̾ X´×¿z‰„¾=<à$®ý¸˦˜š¤7ü$è›cêG4ãµÓ«â'h I¾)æšNme­/xÚ.Êô'Üó­h•êÍ—¯h[#gqzª­ØŸEÿ꺒øÀsFp©ã{Ö†_qÀôŒÝ¿:mV°¿a\ýàül_Êll+‘J:@Áþ†Nú€ei­pÑN9ø@2# .è°¾À”ýŸp¨›/\òØhÝö•3èçt£,> l>`¸ä¢¸7¢¥ýÖm•OEæÈŒ2_ªµˆS¥ù@LšùÁ ñŸnÈæ,¢-Ü>Úßt<—lrð˜TSŽ{:Ü5Ä(FY|`4‘¹F%ù€åOø.@]À8²"þQÒ| PiÿŠñýºïzC’” †ø’½Ï¾¸²m©×ßГ§JÈ5x3Y5͇œØš#~·¥êÃýº’èq>ðØØÐ¬jŸün}@?A±øÀ};ª˜½+ë²aùøÀ=gVOHÞ—,>hûÅæš}ôTÿ‚#B‰«T‘ÎØžP×îOŠyÓDO (²/‚×D7A9ùÀ hÏ|\8¼ HHå«­ˆ¼ gpp Ð,æ1­ë>JËø0¸È7ˆ|С^5}yÇ$;¸¥ëvˆ¼=»H¢h>0w|诙ù;…ÿ¬Nþi5ÛoÞÏo”è> ”¼à ."ëÛÅŸ_y7çžEj`ÝÈ1¨&q¯íOØS¯¹â¥Øº¼{•©C C) ‚|àᱡYvÃO:äÔìo(í7‡òùn*¸·; µŒs\þŸ—Ô,ÿ˜ò¡>`­!í³G3` ºòemÁ5íO8Çéΰÿ‚Ôàsô7LuãL>æ|O©:“Z7kJºòPF}Á”Aû˜¯|»õ›Šî¼™FÞü„ÛüÌÏoDKû­Û >€k>ðiˆ=.‡äø\Ï;åÊȬ/x~™» ×e¯/دPþ€ÍT* “Ì_åªpɺóøµõÅ'ô¿ôÔ>Ýý 2ó*âO8syÛb¯¾À“§JÈÕ9ÀÛçQõq´j–nȱª‡¿|À¿ã¡¡Í=ÞßpÞÄPcXß­õÇŠ >—‚†5Ñ;ç”ük|Õ¹#µä½|Ùþ>AB K?¸}WBéO¹ùÀãcƒ÷Y¥_iû ÑW×îIˆ¦)ýbû‡jF£µ‡ËD—5à9\Rï×Ç[OÍqõ%Tå«,n@ÎààW(Ü*榌ҀùÀ“zp‘ô—QVÿ‚ºØ»%8mÖŠè?³æ-q,Ìó»\rÅæL¬žxh0y#˜þ„“ŒÏY_c_ÆúÓóþjâ’£ê59ûÚ1Ð V/3É ¨ xt|¨ÑÎØ-àOhK¦Þý >—| ZIûúC¾ì‘ÀGϧ»þ~ý°øÀ òLíµfÂñòö/PŠáö!ôwµ¤ëŽÔ…]åì¶n}¼å¬™†¥.þ„Jý MíOý¦:? Y|À'L„{Âô‡QÂùº ¾Ê—òpÛÛHðéü].í?T¨ H–?!h W†Ý9j”ƒÄ©ú‚Q¦»|%®•ů‰Ì³ùÀ@Eïñ‹ùü S| irÕ‰=QUÄ¡1ñ›mÕonùv÷(xb|袰"¿3, ŸÉÜæÁœÁÊ›?0&˜¼°¦g¥lÚ|à™}¡Èï¶Vûèiÿ›Hˆ!…'¾0°ã€ÉÓb>ÿ[>>ЈúüÎàÒº >°-¦¾‘êÍ™—ðå ^À\-óøvæ>Jã;B‹ê2øÀÇíêÕ.Žë’?XÆ2õJS*š<6.ô§Qä$0ó6éÁS/Zͪ °±æ°*Ïãîý %oÓà`”‰uçc/SV`y.ø@#q¿*Ìþk#êU¬Šwo’'œ Ö ö§ê ^úÒKÝô7LÀ6¿pdؽÿ€û Ūù€‘šÓM7ý “'4;Ìèrï;›…œ|à…­¡i6Øíޤýèb…ß©qwåª"Rý G…“O8ÝQÆ €æ|dõ7´ø€‰ âNñ (H:@ЄèsËŒŒ¨®f:ñ«¿!î{¯'?ÐârÛ >`õ/TŠ$t«¿!h‹—‡Ot³—òô7$Ýßpw¬õ‡õIçT¤¿aW>Pÿ;@€”zYÓú3õéöˆ ÝPQÿYËÚ–¤ò<>àÉS/ÊÕ9À'“é÷J²jš&ä݇TûdxÕÿ–ûwT½Ó£õ &…¾@~+ӟЖ.aƃH¤C–³AÕyµ~ýïCºáÓ× Š·é¢¦ësŠç·£Ì^¾ûˆPâªÌþ†[ãêÇ’J“”âñËj#ã\ €Æ9ÃWó•ÍŸðù%Áeö³Áêíºvíµ«ZSU¹²›\gíå|Ñ”¾ˆUX\’âRDÖ¶«W~yt|fps>:9|wÊ+.…üÑΈfÃnø€žñ[Î/.×|àÈpò€¨í»¢Ùý »¼ô òs:÷0÷¥úÄÔk»éoh¯ô Ýuîo81tÉP¿q(À–˜úr㊎Â×3gÀ(|îÐ-H™âZБ?açà,¹=/nÕìˆ+9Îp9ö¡ +XÜœ.Ò|ÀYC=cÂEÉxW> „ržý`ßUþ€ã7auæš0†ƒÉ&O޶‡L¿êô øJè_PL>PDÃÌZ7É i¾ážl$ÍÜVá§ù@Ú*ZEø@ÌkÁìoX>D¬²Ü«@þÀiÒ+Ý¿Àæõ•ª/h—ʘó¢”Þå À¥+;fW<`Ÿô]§W2àKËÛ–¯‹i÷€Ç`ú:WYø€D¤Þ•©/)#OèÒ¬¤V ¾`ü*Z·Å•÷†ú#çN©ÐM>(þd…ü +ž?Ð*´ÊÖ4.Íð'ôø€'O½(WçK&Ü–¬š)¤œP­Ê£5!¯·jëþ¶½fiö/+ò¿‡úõ|"›¦¯HB (wþÀ°@òî\þ€îRèßçÞ¤&»4SpÂržIÇŽÞt8ùë°"íÊjcKLýpCÜÿ·}†ò_çÈØ×kûÚ`Íè;D36ý®¹ïIRÊW…íÀá€_q¬”òúêêêµmm¹}ðsÖ<¹=¸h”ÕbóZòʘToíšâ/gð;`°WÌ#uz_xjGp‰<&Eäƒõª©Ë£sÔd¦öwjº]Šÿ@º¿¡.öíBËçOh«°u›³ë·kÂÃ-¨!"[c⬼þ„éT[3‘·í¸ãü ‰{°úl©7\\(À .4pÀºÈÎpÔ¿ -ó=`d7Úìªnù@?M¦ú¨šï:'‘­‹œA'3`+¿?¡?íO訿!ÀTaÿ;@Þþ`žÿíKºÈd$´Kg€\þR9Û~°.à‚UgÀR> #Àä®ü ±þôÂoB[¹ò@|ÀÈ8ªyÞ…ö[·%ñÒ|`½«m3ù€!Íéó+hr²óµ@Ùø@».>+@©02ø@EòF‰È; ¥ò¶¥óŽªˆÿÀÁdš¨ºþçž@·|àùIuÖ7¢\Ó®]ÿÅUí÷•3xA>°[j×èfN‘Lþ¾²ùž?¡'O½(×þ„k£UICŽó+ò›ÄtÚ~³­fÁ¦¸EøÌŸº¸Z1¾;X3>CŽüè”CP>>p߸ê)‡øÿÈÅ€DÜ@¯RM>ðïaµ‹Bñùß}T0qMfÿ‚­1õ£º2O̾txû;Ä8 …‡6v¨û΃eé_ðÔG¡FúÍKø¶ÿ@R*_º"Ã"Ó‹àOÖž¾#šX eè_`DÞ¨_¾pyt\×àÖÖ™n\©‡¢ùÀüñÁ¿eòÝøÇ~quô¼o#cÉ Ë@K®ë ÆXý ; Ùg]¸(é¬LsÄݹžàÊ‹lŠª×¬/€LsĘÕï.§ ò‡Æ…fÚþŸ8õ'„Lg¾‚Õºå|ò6ëçþæ °⨳[N>°¥‘ÐPÍâQÅYôXq4€œ|`õ¶tƺÀid‹Øïǽíºõ'ª%²!ø}±I«težŸß`2.ø€–ñ 8Ÿ¼þí1±ÔE&Dæ§ Ã7a†ö[·U>i­ÕU·|À`6PpÓºð@ R| CŠ¡‚|@ RV¿»ã4¸|%®•ņ›ù €¾JüƯ¢µ%®¼¦ÿ@¹—e™ÊËZ ÅþvRaT†,œX?Øo"@~Õn¼¤·ûì4´kìüQZ¢÷ûXþ„^}'O½.×þ„ïí®šTå$‡õQe•.‘IƒÈûíÚ[ÛÑç¡Éxð¬PCMÞ6"¨/en>0`懃Heæõ¾ä½õyê Ú ‘ *R|quÚšA9%÷/8ªJ¿’ ÿ-1õ£ƒº2ϯ2{ÖQíIÈéÜàä˜!vùÏÐ{Ëžÿ(¸8Ó`sT]ÕjønºlU[–_œÁ >³ÙbI|àéƒ)„Aä½võŠ©+¢r7sPk­»©._Eó‚w°ø@».öíÂ?öK«¢å}“ĨÍ8DYÎ\®ë FõkÀÌ8 ™P(ýÌ:÷9KÉ1 Äÿ©dä\°¤€?¡yÌ2ûÚåõ&sÔ¿`/Í爌PsÏ€­îóT#Õß0P ÷7LË@’Ϙë½î”—ÔjƱ`òÏÊé,ûìtR·ž“¼ÜlÌàó]OÏ€è~ú3•Åâ†2Ù~°Öïœäû p Î| ¬šXÄw¾Ê-ðOyûÄÜò_F{Q‡ÀÒ~ë¶Ê'íâ÷|`/60(ü™ÑYÙ| ¤üy® 2ø€nò)ñ/ô…{¿¿¡PÒ|`oGø@­/2ÛæÕ•àS–Ò¶ÍâÃÆQñˆdðŠõ7\89°a°fŒ ×Dµ.]Ñ~o9ƒäûHóÑþäÿU¶¾ÀËðä©åêàÃiÔ¼µ·ª!(ô)1: È .!ªs0‰Òü¯=Õw?÷áÎWè‰ú‚·G’'’'à_;Â<²+\>>ðϳªÎ©õëwçã†H ¤ð+h†DýçŽ0îJç8áy˜¾ëÄêøóÁ­1õƒ7Û?ÙСzÌØDðÔ…ñðÉÕ‰ 'Þ::”x{dPÿ±âŸXÙöBˆKt]ÿ`èСyÓsú<½8¸dDÀ¬Âä–¨ºªMõÝ|iŽ‹šr:W#ø :âI>)‰Ì_Zd¢íƒ¾Ë¾°":áÒ|WT¶}d’V¶@)õãBc™´êbÀ)W¿RÐ(o´u»µëi½+>ð𤚳 %o²^yd’ñ_^Ùúqw‘¥ùÊF[3ñI®ç8æ‰?à&ØWnꮿaJÔb·0ræØõŸDÕ—¦¯ˆ>X08@2uüî×Ýç¨Æ¬Œ Óþ†æ«N@É?¶ròæ©„kýÆq[âê.úBú (I¾zš›ì ^¤Z| 5©¸ãŠ5’Ýåd*‹tdð¡ZòWÖDáéÏPg>P­£Í}˜|„s> ?O ŸÛdñE}â1q·¹Ds$5uü׫ãýÖm•´y;> °›HÞpµm.ÿ€Šæf1R>>á?ðüÚªcÜì¥,|@!Ý*ø@\öøò<‹ ñµ?þ©âó'†Oê©àyùÀþ¤òsë9Š£2|àÅIõC¬üµÚM³V¶ß]l \*Èveä ó'~ëå”+8x|ÀÓ§\®ÎÖŸKßWb¦?¡_‘GhÈ _A‰´Å¤Ò¼>ªÎ¹íµÖ§(7˜?!t©OÈoåêo˜©C0ëƒû Y&>ðÀ¸ªÏÖúô¿çò'4$‰$" T¤ß¨q)hX3ÝÊ!()à‘ñỎ%®Q2òvÄ•u;ãêœ>~š¦NiݾV(˜›Ð9dcÌ·oò»C6–ìOøÜ’à²úŒü–¸úr‡PoiXy+ëùT“` æU§'DwÏnGyjqp©€RøÀÂПìú‚)ömOΜµ"úÏîÞ'ŽJý®Ó)/Ù˜3±zâ¡Á4ØgÜœä™ËÔâ eCׇójaö7Ä 0u´u».ߦ xxlh–Í6ºàr*a`¤5ݦ…wËújòûæ>0>‡ý TŽHÍ¢BÁ¼ô¼|`¨Ï¬/hŽ«\°¤ÍÍeØ£S¿…—øË ¡4¹žùLâg“M²ø@4ƒÔû“¹€°f@²NÌ6ÍÕ¨3¨òÉ®"HÑ9Þ.‹H)ú$¤K>°Ã±ß€¢ðñï¢ýÖm•OÖŠtÉ­¤ùÀ\ Í’éúEø@Ô®/í¹õUG»ÙKÙë Fe—ÿgñþáÈã¶?aM%úžÿ‘ËŸpX¥üö'Òùš^¡üÅ“Zù©/ØC…ë <BOž*%×ùk†/‰$9- äEÚ“l“ÊfM+æ­Œ<4Û…²£<2>ÔÐG‘߯è'(Ýð€û¶WEfï=X¶þuZòž\ù $¢Òä*ÒoÛ<¸3ŒíCPtþ€ñÐØð]'„c/dæ´$ÔÞŽ~¶6¦|l¿Dõi ãáÓÆÃ'Õ$.>:”x{D@ß°+©>M©ùO- .ÙÅŸÐ@ùúôåíoæð ~|ÐÑ™2ø¥AªS> ºnqpy}@fÃMÊWºi1hÀ,r€Ä<®°ÿ^__’”ò ÀžÅÛZZZ~™¹mçú‚ÅÁ¿ÙÁêbï¦dàÔ‚Á§Q‹â-è4C.ý ƒSFôkbR´ï‰±9ñ±WHg`dÕ#8æa!ï±û´Ä•ù˜:1coåzBA>Ð4>ôÅÌþÓ—wSÖ‘[Ä“¹] ªò[`òÇý ±fÝ}«Ðósò]Ó¨±ýšcʇ®òtN (Þ,ôôœ|`éÞ`ƒ]_°?©ºãÇgü^È0(P_0Ìç’HìkŒ{™ç¸þ ²ÊÕ¶™| Žh*øec÷ßõâgò9Ù„´€rô7íùÝà†‘ö'<˜._‰keñ>±4¨Vô/pÈâS_§½%®¬ ò}ùó'\8)°a°¿‚õ; íêT}–èýú/À“§JɵÿÀÆU†!Çj|@@toBùD±ì-2ç3K(;ÀãBõWŒÛûψ|`{LI\»~À?IãÏeá#ýÉ{kú˜®åã f~`6S(>àv”9/ï;4¬_aç±-¦®Ý—TæJ)¿ÌyÏ>‡”øã1–E eÈë­ZòÊ £”üÌú«}µâS¾vÁâöœ¹£²c‘üÓ¼Ã_¯ôDÑý ž^\šY_°6¢^ó¹åÑñù‚`pfƽWŠÎ˜=>ôÛà€.önѧÍZ] ÀÔXëv/óI­-\çfÕÄ Ú÷9äò ªÖEòz׊c>P%’÷Yo8¹%¡:çmœ ÖW·’NÍTA>0gbè’:¿~ÀÖ˜úÊL7|@rFêw¯ä{Z·|Àß²0TÕYÿ‚”Dê ¸IÌf{wOÍÛ¿`˜?y"Àޏò‘›ü9z¤•A!rO×CAW>°¬-Ø`×ìJ¨s í¤“ÔŒ?=ÿôwš°®|@'Ý¿`D(9ÛÕà,ë6NÀñìÜù@bÂΖ,‡ÆSÌ—Åûb6N¶Ë↕? Kâ®ú¼Í‘Hú˜£)|ü»h¿u[åÓ,> »ÄH:Hó%.æ1ÃâBV†Äë ‚| ³¿a[%ø@MGä1›TU¼fÿ‚çή€?áÞ > '+äO˜™?P‘ú‚ízšxõðôÿ+¹: X}¡ jUƒ9 ä¡5Ь2€¤A[T*ÛÚ ñüaHÓ”¥DË:€ÇƆfõÓä÷kýúq…ø@Ü y÷Žê§ìòÿOYøÀ(â¾AZê¼1%ÛŸPÉð°{dW˜í—V_0g\ðþL>@ª˜/Tñø¥–?!˜]{;”ÿpÅÁ¤è{Óºþá·#ZÈÚÎ%˜Œïi#¸(Ó`cÔ·¼CUo½´›dw9ƒc^EÛê;ýgmk|ß}þˆç&WØ—ð£†h[Û®ÞxùKÝ{ÕɆ yÚÚß“b?†"òæŒýÕÞ¦‹½»tÿY…‚[š”z1‚¥ö]ó»¿aÜ }¯á°¾À`’5…Qúv^¢¹âX|`SÌwÝÔ¥Î\Ü­+èö éeñÏìÏ€‚|à‰q¡‹3ùÀE+;œ× '‹µ¸E²,ßÓºç*ß¶'ÓP´«759u +º{bÞü|`ª“¼{úÍÓ¶±Ö«KÌK­ùr*'X¸74ÕÎØpÑß`7§îò·ÔÉ&Y|@â\ûÁᡤ³Þ¶ ¦Ø“ábÚÅŸ0ÃÀ0ÿï'XwÖ‰¹Î< óæ$ÝòÇ^å*ùßýy´ßº­òiW,‚ÄI÷/xÁå2øâX| Øú‚Rø@ÂÀäÏ|Xu”›½”…èR¤Ò/"†¼ÄÍΊQÐdšT$àâ—èØ–Q_P‘þûâŠ}¦¢HŒ?¹ÿ‚rì?ðqT»ñ¢Þ®/Øžô_¥[|`x%ê ®XÕºbƒÇ K’ï´k¯}w}Íõeá£ý‰ûjÙý mB¤µ30$L]3ˆ¤QB}ÁããÃ÷ž\{!#¸±%¦~ðn$ð³uQí”ϼðŸº0>uQ"tlßD¸Uú&ŒêëûªÆž:´¤.‹­/ÈÑßpkL]½_÷ݘ«…@j»\ü`gRýý ¯ >®¨üÚÁ‘:Ô«>·<:¾»à–η¦/1$¤?UTþÀcãB4ÉÈ]ìÝ‘ðŸÕ¸2úï‘ôë*ªÂKb6À%xlB͸#Ãfþ@LŠöã>¿Ü¡}‚s±/á<Ÿù#> AôSâÿVÿ‚ê5Nù€5íç[¿uàgyׇ òyãC—ÚþÍ1õÕ‹Wu8Î1—Ó¨EX5‚åù.ávË4•oZBq?p~êPê§¿«òòaZò0ù€Ëþ†çY‡á CÓ+ß\ÊÉžÛú‚ÍvºÌ3á±ÐIñ|ð)â<ûÁ>—|@ò¹ŒßŸu¸Ug>´ú HL<Û90÷€ 7vr²³ÿ,>¦?aRwÒ‡"õ‚8"•?/¸Ù–œ|ÀQ}Dæ2ø<érë|@)!`ë] Å|ºŸ+ â¸\Ã-€| aˆ•öƒ•¬/H„UsíÞ“ê6`„_?º"|`o2Í|•êoØ) ¦Ýðè¸ÐŸ &ψèbß.é{Ùj‡Fú‚ö¡B˜gÉNø@ê<<©æ¬£´è U &%ítÆž½$áèU62˜O*’Ub>_Ï|¼¶¶vˆªª«­oÄýBˆš››7§f@‚,â¨Vÿ‚æ¸z³Óà$™Šì¢åïˆdø¼2uya,“zõ·£ ­é—ì—û*ª#> †Oñ]ïø•¼Ã)Ø Ïvwù7'ØÙHõp‹lÁdêÍ’Ý=5'x~khª°øÀ—þòK2ÍW#€IDATôA¦.á¿åÄ".°#µ„»ú‚v>‡ýÝ ³ß|yÔ™„1ÌÚ±±“Ž\R2˜nàg¡“M²ûXý ]óYŽàpëîóN ,í·n«|¾bù€N›øp[’æíRìë+µøú‚µ.æ 6‚ÉžÛ[uD¿ÊÂ"†H}rµÇå¥nwèVY| JFž°ù@}zO gþ@K¥ûìÉÈPe…øÀÂIõƒ+Ù¿ Y÷Y¯d}Á•+[W®óø€'Okÿ÷UÍÈñÕŠðÔ„àåBðµ:¿~‚* ð)’[£ê{»üüúW:ž(´ïnðàØªó†øõ¿×æðˆåð°uPWh\Ó¿øü‡Ç‡ï>®*þLFpck\ýðÍöÀO6&´ÓŽ“¨JùöOÖFý'|Ôáû£Ív%”"ùÀd|/\:T3³ì…Õ¿à€To¼¸ÀÅlÙÀ•H¾–”¨¿ØR³þ®í5Ó\×,˜Z2:œ”D6ÆÔ[ ¶ÀZ#¾Å|ÌfìûÐøü°UõŸqU_Ð4!x§<¢‹}ÛôÀN‚ð6“±;ÁKšÄlâ®ûŽè׃Y_О`ò47>ööùd…Ô»ßqþ@-ñm>ÐSo:wEÜñÙ±làö7èbÑd®|läŽ Íä7ØS_ž¶2ú€ãWÞùÕƒAΖ”Ýò~>ÆG†®º«/ @p‚wÄ‚ü.}yýêfÃm1åÃéKZág:ér·K´Üõ­¡é`õ/Hº«/7 !°ßÕ;Ð ç˜gñ53À­ÿÀ.&ƒ¬Wßä0;¿3Ð,>  &ÄÝâûÍÇ£ÙËâ>‹Ä ×|àHy”¾ f³×ÅÐ÷[·%ñƒ´ÿ€ÈÅ‚JIõeâ뫎þÿ‹Ì©(°òR| "þ„{? þ„™ù©/h1´ÊÖ|iyÛr¯¾À“§JÈxû<ªÖǪ.NêòÌ€"Ò„´—êÑ e]BŠÅ' ŠÌ/k}À¼‰¡KBþ÷P¿~\¡þq)’ŸD}oŒË__÷jGÁsÌnðÐYóÄßrñ ï†ü¥¹jñ³ª¯,ºÁgª§íàô­qõÃwÛ´_®i'ŸH„S| ™îÖ}g¼ñÿJGlQ¬6Uuåì¢útío¸9ª®Š¡~å¢ÝŸ-É©„ññTÒ ÿÚ¨VsáûƒGÆõîù€¯kpËŸp<@»!ÚÖDÔk¯}¹ÃY¾±Â%HúøúÑáÄ÷ë›ü´®®Nï–<±0ô'ÛŸ°Ýä§9 .ñg¬’öÑ—']ñ­9뻿¡í &:ê_`+ÁTìU’àÛÀ±ÿÀ0üŸÅvD•›Î_ê|•$Q/›wˆ w^¤äžjlå|UW»æqÎ'ÝFb¶X@k×§àò`æUßMnbK³»ç—­»14òzVää[ ˜ý ¶E•]ç408Ôº7¿»5bN>°²%Ô`çì×Õy®_½äFëNay•v£,> È4ª%{OÌäTàëÞ ]áTuæª0†É&vÞ¿ƒëR¿©8:ÏÅúƒÅ\øX|À¶ÿXær¡ºßº­òù¸©N:ó·&ë|@7˲¥ø,pÞbÒRšÄ&s„öâÇUŸ0$i2,>âÍ| "õ»ÊOÍQ¡(•ª/è”?P‰ú‚­†ÿJ½’õW­h]µ.êñOžz_®øÀ’É[ôª‹„!Ç©B^­Ê*]"“‘ˆ¡lnוUÚæ}Éyr£ãþ}ù½Áš~œOöø$ê{§-ɯ¯|¹ãñB­¦ºÀÃg.¨ ð·îü U¤ÐºøÚú ][óíMÎ+:àèjã©ŒàÆ¦¨ºæýví—ë¢Ú)Çô5ûž¼0:6žî3|cßø~·;©|ló>ªqLQ| kÿ‚MQuU§Þ:sIájL9ë’ð• uèÏ·Ô nÚRqÓßð©ÅÁ¥#­%z‡éOxÃ/9óª“ Á< ŒdÛqoÔýtO’Çpš?ðÈ ¡?¤‚ëìÛ“ÐÆ: @’/b~߃àïmiyÍq}Á?Æõ9ó¸PÇJM F ÙåŒ V¹0J3_ý| „`3>íuFÁú€áZìAÍâ;Ê-n‚[¯þ*À6Ƽ;s‘SITOcL1àÐÕ¨ˆê´(-ˆ0"sËÎ8+ ¥ë \ó©„1¸Å ÁÏßó=7'x5¼Èæ\æ r-vòŠÂÝ…’ܳø€!”sì“®’Ôe#C!•âßì°¾Œ| Î׿ÏühΧ,>RÅ@€˜î’ÌâDÊ ñm8k!ai¿u[å“Ö_—|ÀÌ0ù€äw…ØPeö74ù€&¤&';_ tâîètá©ü…¾ðqÐî4™ƒ(78£÷ý kãi>P%ô==€œù[cÊ»õAãÈŠô7ÜTSùR7þÒSÈÅ€«_jŸ·3¡¬æ×Ïœ;!ì*¡Í‰,>ð5ëîƒÍÍÍ¥°%–Ψ׿îu>pÍK­«½üOž*!×ý ?ÕS«|ÆÙ†äаb„ý J$ÉA¥ÅPÄÒ¡jäÑéoX£Éï èÇKéÌŸp[ŒßüjGA“­npϙՓ %þ9À—§nžuí_`ksL]»[÷_yõªƒy[Rçío8{|øžÃ‚‰«Ô >°%¦~| ©4…sV¶¿žz~#¡E{ÃÇîŠÊ/öõÉ †ùõ#±>eßk×ßZßç2W|`ÁâÐÂÑäë ²%®¾,UåÖ ·¿á䜪ÜÖª‹¯îI(µs÷„Ä]-UÎýžž\>"hÖÄ "Ûãê7¦®ˆ:NZ•3ŽÁc@à@R$Î|»vè¤m=Ü}þÀcãB´ƒGuöïÚ7Á0øÖZ¡¯*Ú&}§à$`þ¤ê)#´Ø‹ª@´ïHˆS¿°Ü]¢³làl$¿¶î¾Î°öBCýV}A\ýàüÜÕÈÛQ0ø¶E¤ä7¹ÚLÚ‡‚®|àµÖÐ,M±ø@RYà fg½Í,Ç[Á_ó»ïò˜Í2úÕ\æÌ ûµ#ùƒƒÍòûLì’À·€¾Öï ØQhƒü|À æ0¤^½Y_puwû]Yî·n«|º4×êJ)|Àànà™| .Íš ø@7Öy”? #´¥ZøDhÍñ ÊÁöÆÓ|à@LÎr»C·ÊâÔÌü£Bù¨ TˆØý ¤DÑ“•ª/˜Ø0¸’ù[uÿ•¯/ðòðξ³ú 9g_Ršˆ+? ÷&•ÂþO-.=4˜œ“"²)ªÜâ¤Å`¦Ž %'!iîï3öÿjkÍà½IeNüú£?Ñž=Rë6¸œÆ©HfT)òí·Ác)†4G•“§¯Š¹ª¦•S £ò(f%¾ŽÊ—Å>tĪIÜkóÍ1ßõnƒ[óù Ò6÷Š9|ýl­qõåY+;\­äLNÎh#±žÁ áùPd}¼Š ?²ö§#ùq®Nyù@]°øüöó`¸5õÿÎw%5'xã@°Ñ‡é)Óf¸çr'BÊ}c¾î«ð³ø@Ån€À`Ÿî.àBˆÔÔ~â`…Ý™ø…Ùß°(>àë-ÿ!š(ˆwòò¨î’Ì`4¤*k6¢á8á‰L>´Ö…ªâ’˜2ÉÝ žL>´ø€©ÉÛ¢Kþ€»Œ«|ù‹—‡OgßxP&>°_©æûô>YY Óþ„3zzY|àüˆlŒùÞªÿÀ¾¤Hñ‰á¨^¨uË^œX7D3­Xÿ‚Íñ >P‰þ×®n}imT»<>àÉSïʵ?áë‘ê/hÒ˜ÔG5>£)æR½C§uoÒ·NrÅQDæõH}AØ'¿3*C1j|êW\O»©ïa'0À¿EYËüü| `°#®|T ÓiÈh3¸†ý¹k òýºâ´E`:øLF!Råíhü°»ëÈY| ŠbWлç7 að3ló ÁïÄl6ج3 3O¬(>°‹¯G›£á9ÑT¸Éb.>0¬ú7|`&£2(ì¤:•?äDû­Û*_RšA]óÍ ~”ù/ç@|Àü·@Ej–á©#uÉp|ÉßRŠ(†!6X/H[²;|¢›½ˆ¹lu˲øÀ¾DÚŸp_’™._‰keñ1ýÒ| \‰ú‚ó_ ²1î{þ¿öÎ;º‰3mû×óL•d›^lz‡$RcSBBB1Å@B’¥$¤mï»ß[xËö¾éH/4HH£¹C²Ù„$´Ð‹MÇ]mÚóý13òÈU’e¼ç¼¾ÏáÒH÷£‘-Íü溯ËôØ9Õ}G[5o’T©ø5 TU¿¶Õ"ÖOÎ+ô½k£Æ**ý@»ÌtøvTGµWEÅf"ákÍ3O5Ø8‰² óXO¸¬Òã~ƒî¼½Gí»qÏ/ØšîZÌü ¤m)¿@5  ò_ üá¡éþ -¥D5»€gîHÈäÖÖµÄ(˜È7’_pY¡'K5iIL|`Ýx÷s·$ª+iÝ´qY¡'.)ܦ$¹³ˆï ûð›e‚ßM]·–ú± E2f÷aŒ™Ÿ²ƒþŸúbÿ"ZË—{ÑõÑY³ÇÙ…Ûç£Ü‘øÀŽ q”Nè+)¢~°ðp·ÿ:ZzqUýmì¶Ûº»ö ’ÍáÅ€÷+/¿tAQàëO«-JvízýŒ~õõ[´® ë[«“¤½5ÿQ…œÙ[À[©®¿si  F'å嚘¾°Ø·+ÒÆ¡½˜…é¾+R¨xvpé±.µƒô05))éHMMMèÌ;ôäf&d‚; À© ¾«~rgŒ§è¼óÀCÁŠÞ%½®µ¨p1mµ¤XY¬| .¿GKãI.GÅÎ+Ü'sbà¿@å{$·.n®Y>àæðc`€A ÿh,½Yæ¸×üŽ¡3~[›FùÀùYp§ÚX8Œ!¿›‹›؇YUàðÃÆf Ï/¨çó4ä?=˜$0üLIÁ¯H.4µ}>à3h†}gY{Q$ülá ðÉÅîÎÜÄ´‚¥€šÞU‰<6²ð(€tk5û0-j’ã]@‰v¾`Xaý÷ ¬Š"±ÒúÛCmý0˜¿Û¿$ïâj®ã3x výÀ–T+Òªã ÈqóÁÒD^qáU ÙcßY¡´áö¾ XþTŸÛÖ hÀ&ç¡ö¤¿Ž|œé¾½­š7É*uò+ÀäŠÞN|`Ç$éDÏöÌ/8«Š¶ë|ÁŠ’š½| £:ª=*j‹š'Û› 6ÂC™[3Àto€ÑÒ*~8B®Ý÷ù‚M] e?ê-jc[ÒØù—ò?O~êÛÒª¬KM˜ÒKÐV7Æ8ÕoM#\ù—zê¼*.ùVIÍÞ¦z4¹€WRÝÏõ¨+‰ƒ\R¸ã:Éuqd󬞾/ícH– .¿Üuç…²» ìÞ^¢â*ƒ~"À?»°ÈÿýÆl£òLðïê®dÓ"&Øë£Ü“‘ò’iâè«Aúâ@YϬ¹W]¯®ú¢zi‹ ÈMwíl5׼߸¸Ç( ¼Iã°2ݪTòþy…»YeDúÏ3Iø¤Flà?ö¾½3Ñõôp‹x R^¥‹™Y…þÓÜ4φO˽;sFùÆknmýwá¡oÓÓG¹µ'¬÷ÍçS0yz^äÚa¥âߌ¢øõKò-ê¡®µö;äWL+T¢å5_}–Â>KÎ ˆ_üóÌÕ ÍòÍ®EN>]èê1Ô|2Ë© ~@>0/h6Ës† BùG¢kk5Ÿ¡Ö…lsÆÀÀ/ê_Èn’ô±øÀE…~sÏžÚèÑÌ\ôÁÓ°ÑŒ_‘­ø¤þvòÂkò<›”kÑû²•Àðkô°nÚL¶¡É9…|ÀïÐÄÄ®àŒµn*ÂXü®…‡…ójš_ÄÄæbXÈ"ð$ñÿZ:EoÀDjæFí?`êl÷…ZèøyݼAUZ{x=Öù§~€á—ä]œŠâÑqæ[QÕâëñcæ ‚PRè¾-šg‰ ¨ÕIž}giÐÊ#iÃjÀ†Ju| 3§/hÍ“GRÍòÉÞ.ú ¿L> i×w¾€ÀÃûü9WTz RD}|nº;ú@ªE³Á:>,¨¿ëð'ŒWs ƒtÔ¿xEÅÞŸéZg –Î MäŒDƒÁ2Ô0ÐK>|4Pòæ´‰?aÏ~ÞKÔÇ´Ä4í¼Â* `U«ý ßH•¦wÈs)ð?!!Ljb¾à¼Â¨€ðÐù±ð îçÇ&¨Ú|€z™Â«ÕÉ6™'gôp^Üá­jÆÒ"»··¨¯ãDÿÊ'üiy‰÷g-€eƒÛ~IÞmç`çƒÜÞåžšáÉ꾩☋ }~°¬O°ùÀ×^aûƒ%¾™-.`sšk÷P—©P¼§ýÜS НFÒ¸~½[x^cl™ÊˆtÔÏã»':7Ï6¥¹žæÒ² V'å!¥ÎË÷팦ihOÎCF7ÞXÚ™3*Ê5.áÎ&ŠW5®i>°uRÂäa.m%ñ] ’Ô¬]µÑºq›Í³p'tüü^ÐùGb‹ó«3¿ 4ÀÅæ?+Åøu(Hâãw?n–䦹îOõ¡pQáþ‹ÿ`¥ò+³‘ØOÔn€K =“~ "TüÀ Vóݸ¥Î"Ò®FùÀî«ò;¿àšÆåDÞÖQ*~À>«:ÿÙÔYr³| ¿ Fã°g¾Ø¹x €i¨Fp |›llvØ-œ$9ø@j5ª_;6‹À°ÌÞÞjIe߀pÄä ‹Øú0~BrÍ'Ž *­¿=Ô°Î ¹hý ÐǸ†ŸG!PÇ1ùÄ>_Ð>à×êøÀÞj×õç>VÇÎyɬ(_IÔÕ€Œ¢Þ÷`ýti>VŒšã~?$KÆðvÑTk¤n¾Àøðh—ù‚Óªô`»Î,>i¾!|2Y¸¹ÊàÖôõÛígƒÜî™iõOVšå:ƒ·Tá¾7» òˆAg½7Éýä`Iù³Êˆ¿>—øçõGÊäÜ&ì}ËI—ŸêÒ³Óà’&Mœ•ïû(–æ,üð®ê¢Îœ‘XcФc~AXsÑ3Á“ØÄ|Á†ÌÄ´B ç7ˆ÷ªŠ;¢p6G'üà3È™[¿èuKµF¡©ù¡®ƒÅθ17_ŠÎø7»9ÊÜ{¢JÅb4ÅÞIse÷•Lý@™Â}²°Ø¿>¦æÁø F]Ã$—#Öè¿<–æ€,|$MVŠ'È6œ·ïn”\œÏ@I»0ùÀ̵±íú¹ø!€‡¬ÿ^ƒŽGHÎ8·i”ì¬qͱõ±ò6ƒá뿵`øy·q€ú|€× ùp©›ZjÖÈ+,t5¬'ÛÐà ç8Ó“ê„.jTò 6³Àðmë¿ €ŸµÐ¼! @ü›¹vh`øÙ‚O#|x¥õ·‡2ë\=ê|Cç|ÿµ”]Q¯êø…I¼y¾ù†ÑâÜ:>P«“oÀ`÷J®¨Îâ ™· ¸±‹÷]Û +ß|`ü¨>4ù@o±ôµª9f0PC7þÞV h^? ˜úÞ‚>nÛ$wô»-TËú¥N?ГSÛ¡ˆWs ƒtÔ¿xE=_p"˜0+3¦ ƒdb¸e\­N«j z†+ì/z7µI~AWÎø·^¢qi(Œhe w@1ØŸ^oÕÖ¥&Lé/ªk{æ\ª³l>ÀЬ~àx-„å1ñÕãÝ¿-A}ÒÉθo¼Ù&ódÓœ¼ºà%;ßð’ÝßSb÷öôa¤îSV?èåŸy ÄÿýˆÀ²5õk#ßð\+áxúÝHó vdˆ£TЗûHúv~nÇÜäÀ ²ÑÊÁjjÒ\;G¸LóÁ{^å~83?“sïëiž‡GÉê a.ø¤Zؼò_ØAOØû¶%M~ÁæA•—ˆ˜6sÿƒXš@Îmª¿‡hÜZ£“ž:#¶r÷ ø®ó“Ó‡‰=Ä╌‹ÅÀ.6c@ñw ªþOe‰}Ÿ>ŸÐ5Å¡®#¸¤ÒÇZÕ|>nÅß$€ÀáµgKÝ÷±æø€­8ä>ÙÀl>žhÝô*ÉÅŸK/]ú¤I> Ó€F+ø›‡[¡ãx¬›V“-uóèòËÙH ™ú‹AzôÞÖéFþ{Æx†lAØoO£|à£R×,ÎÒ\Ò¸¨/ß›‹ þßɖð »ð)öC\j‹l·‘æSÀðk˜:€Ud+šûÕ#˜É0ð+«¹‚_“-Í6oÈÀHh JÔ|€â7–\ÇêH ­ª´þöð Ög3‰îØ L?@ðïd vDñè:>@`ê=¸ÖðܨšN>P­‘#æj îÛA? €„ÎúÈÌhž,–jÀÆz¼Ûm>Ð׳[õìT>pûNT°ø@/ÑöÑäèÆ<¢©¦ù€c¾À0®o¾!€oíõç^Tè èÓ^ó'4éA­=ç ž4õùÕQ×½¢ž/8[ž0+Q0¦È`#í|CÍ€·R£gDŽíêÝ4r›Q·¼”꾯;Çþ} ¬ÝÒд³Aþk•±¿´šg¾¡@˜HÐ8(3Ä%V7y)§Ñ0€¬›à~úfú¸`ñJ`\Òã:ÝââȦYù¾ÏìKñl%„]'ÜcË|,»¯ddõ!NÂc>þ™ÅóU ïîrí²ýl> Púýéy‘¥ALoêô•^‚~»=_ð_ø0{šï¾úzã°0€ä¤¹vÙú #Þ2?ýÞÜâØôo¥y– “ÔgEjòÓAnÇœ‚Àtç6aïÛ­éòêÁ.}>tT–©ÒøyE¾¨ýìÚ|VÝÿÛdäNAgdÈ¥WãóoMJœÐOÒ—[¯ÜçeÈœWÛudÀ|+Y~Ô•7f –´c<1¡ñùDy#&¸¬Ð'§ìQ£Ù³›¯„€/ñ?¤Z|²¨JlÀ8¸a¢káY_ ç‚ܾ™ïÆÒX6P¿Ã¶Œ.ÃcwìP÷$%%u à†¤¤¤ 555W)ˆÔtß'† ó+cn~º@Ås °'JÁð8ÙŒ“@ó|àVÀäwý|°ÙHµ°g €o@°‚lÅ9{›FùÀç\÷Ù|à²ÊE}ùØ| Å:+éà3$b%ÉŵúÛ6˜/%öø>†È1ð9H…Žuº›7`x<ÕÌ$~=>@!梡Žï¦FµûÙlLÁa(0lÄ-øßú4ÔYõù¯$€ø€ßÂþ0cxlÅK‚J˜gÈž³ø‹òØÀ¡ÐAð;²ÑèOâÊæ;ýH#¬Æù@»èœ|àt-¹/ÊWu5ÊŒ:>°°­Ð(°õ)’1üÃ)íoè3Gó`0P]»¾| .¿`’t²‡ØŽùgTqI»ÎtävTGµWEu pd6÷^M¸O$f¾¡},©ð–ëü 0–—ÚÃû^\ùȦ4ׂ$ÎøyɸIgÍóƒA;£ðjTüþÁ½þwsä‹x¹=qâõµ^¢>¸þ}ŒAUaò‘0qå«@_ÿÈýì íQ°~ ,Ƚ¢ò›º‹úöðÊ/Ȇ«äš|Çi?Éê-3ëóÒ ¿zv¡ÿ©Èü ’›îÚéÌ7, r%AÊ};Rÿ2Å‘ŠA_ éãìcÍ“~ngÖ´ÀÝ-òMi®Ã-ý@À µ—TúýXç 6d¸W ´§e‹”¹Ý3ê 9„)i7˜þ„fs•WU!5Öæ°°À·–pô‘2ô‘ô)?Ó)lÔ#´^ž˜4~ŒË_ÄK?``Ü={b¿„Xç‹U ?àG–9é©«¼7¦~ ?|“·ù@>Ñêæó1¯,Ph9¶ë‡';kµ:íÔ@?ðæD×¼î¢y ÷L€Û;;¾×ló¹¸:^Ðż;’¡Ï+×¹ÆõI~nÝa)6BÀÂ2sðc0ü/L iøÙŠ_l’ôMÂK ý&æù‚lˆøÿ Ê»S@ðd Bi¯òí¥®¶ÿÀ•Û]ÛPó®Pðî±n*‡ÇI.>¬¿m>@ q»Á±ð¹o‚`ŒuÓ!XB¶¡)“Ízþ–~€êø¡ê×Q5Ÿ‡ñ`x>äÎÈPŒDþ KªàmÜ‚DèQXiýíá9j~6±ñÀ<×ÿÙ‚ÍØñ£ëøœ| Š“‘zùÑþðÖñ6W±äD;ä(Œ„ÒuÎÐ>ú›to/>p<À˜þí¢ðéuó0ŒgÚjé’Åvš/8¨Ó´Ë|Á“Ÿtè:ª£Ú§¢æ%×‘ææØ(0ó³‚#,X¥ó'ƒ »S“j·ßüqÄÆÉ‘Ï¸(~:PÒnmI?@íd?p!€ÿnµÿÀŸîHLíV_oŒP@ Xù†LÉ7¼¤'Ïë­È7“ ­´ù%0®ªôÔ…æôv³íéràÄŠ’d«@wä¹o-UÈ‚^¼>»Ÿ¬pæõñÏÜ_âÿAÄ|`ýD÷‡£ÜêtkvIå>Ñ)}*Òù‚’iâè …®îçàg‚ÜîY-ù°U 9;];mý€Âˆ÷b~Vaà¥Hׯm“ÜO&óÚmýÀq?÷áü¢À ç6aïÛÅõ·‘nm`ÎT!sFžÿýXšÀÛgÔÌ,¿+3} O uØÐñ½\¶”ª!OƒÐ·á«©‰†»µ'ÓŸ°<@ÒîÚéû"ÖævÍNòvëQ „à ¬Q¾‚ò†`ñr>ÕšùÀôºdsñ]0üN¤úIú©÷ËecýU·Ûɬïž}{¢ºÎ¹½3 ©­j~º€Ç¯A`ϯ*0ðÛ>Ÿ¥d0Æ~@'„Ütþüù#zˆì߬ Æ®,™¿€ Žæ§<@¶a[£|à\6\ýĺü‚Xü Íçø+l2| ಧ¦ôg]÷Ú| \ã¢>=6ËÂøÌj†×0ß&[B'¢™/8bC ”Ô¨›ÁÐñ̨Á¿“7q%=œ$:æ ÆjTÉlR¡á¥Psà (!9(nê1 ùh0Õf¿57ýþ‚$ë¦|$âa[°ÒBÙo‹‡çÁè,‚‡9«N?`€àäâå–м£šðÈnþ»ÞY>0äb]Í'¨ÒÉ!Àôø¤¢ôAV§8hýÀ(ê}ÏhÏù‚´bÔ³ø@»ÍøõöópêNô°ò ÛE?pJ“–hÿþ„| £:êºWÔþ„GáÉØÄDŽÝàâ˜K5` >ô|¹F·Sµ6÷±F~á#¢¼3Ñ5§øÑ@Q»M šÛVaD;à¾:é'ÿñ“ú¶·jº#1u”[}­O#ù6 #”4ô'dθ£^*,)¿à­T÷ênu¹Óàb¿  ë; ƶÙÃ}_ÚטØ*ÐÝ®Û/°¨Ïîé/ë#|à@-ÿ×¥ÑønÜéþh„KfmÀ®¨Ü§:·rA¡7¢£æ}SÅ1WTú¢S?p>Èåß3%0¥EýÀ{r~É4GT xÏ«±ûæNr¯ì'hµýŽ„÷úÂŽºÂôo¥ºþj7W TV¤ÖèææûVŸÖÅ;ü©€a²zï[ÝaÇ¡¬OOœ8Ò­= ƒïZ€¤MÙã‹6Í»AÍï^{l„K{Åæ½ýñFù@w^yÍÖThÜ÷ZË€e£?T¼Ü™7ÒúIú)ƒ½uÅ-4àëÆ¹çÜ–¤n€ó ·oF~`B«›ÏÁ½ ø9ê¦ñ/<ôM—ò]•òÃpðzŠÆ¿[Ï=ÖªÆ3ÿ†Éޛ߇Žßî((Å|‹|ŸœÊ„\Å Õ„@¸¤‡î)ÞsóÙ‚ß„dþ PüÙ©¼NNN~ÀÃJ/\¸0€îò¹f‹Té\¤ÃëáÍ–• xÍ1cðÖ—}7࢓¸Õ¨ Ù,tÇø’1¼kIn£2ÿ0>À'pÆÀül¿sPt“5lnµr-{Z»¼ÿM¶ ¯©Çœ?þjrròe= !èF¨¥`j úçÍ?ÃýÍ5wT¥õ·‡ 6ˆR>àÐèVãð)k> „€ÒéZro4OK5ÊìœËB;èÒŠQsÔÏn.Àº{²k\[5o&ßÔå2výó ýÄ·õ‚B@oA¿³]ôǃ҃ªÑŽúoï«þäDPxèàÕQ×·¢:ør:<'îE~· `û𬓃ó3ZåÕɹ~è©önZx0òÁɈ°1Í•-Pü°Ÿ¨ÝÊ“–ý /¹ƒçUü÷ãûü-c6»€¿ß™˜>XV×5•_P¥MaIœ!ÑFæ JƒÜ1ðÍɯÝõ6¤¹_æR—:žØ¸¤pÇ/ëüÆDÞØ2Ûåû:”_ nW¹ûÖ«~¶$‘gÓûJúXŸ² ðò{¨Äÿ£ˆÀVæîrípÎ\Q¹O/©üŠŠ# e/™&Ž®Téê>¢>ÑÎ|!ö‘ô‰ 1xϸïÎ+ ¬‹¤qýÚ˜î~d°¤>Í›†iêÂøÀë\¶›û©¨4„ŒX›@v¡ï¥+†0Ñ«›|`¨K¿çÍTÏ_ÝoMJœ0\ \Ѐït€Þº0ƈÁúõéTéžNßb%9èïW»Çý⓪†í®P^³õ—UîÉx5gY˜~Gbð'ý$ýXN¸·/H¶šßÜ/Þé¾o|'õ=8àJæ&¶ºñ}è?0Õ¾í“Ñõý“o8àÂõÉ2ûOÀDq%úí{Ö5ŸÉ°>ÔÜ<ê~þ©ãIÓθ0ý96R­*ÔPá|šÑ>0Iðcuç Ç@ñŸ$GÆø@…ë>[?PkÐwcn>S a³£¹‚§!âA»¹¹—ëñ7©»ZÚOТÏ7ÌF'hø¦Õ݈# øO’‹<¤Á|Á Àœ/×]ÝUóy¸*Þp47¼ËÉ–F›7ô8Ò‚‚Í4Ò| <ƒºïŠsþ‹lA$/¢¶ÿ3˜a¿9Qí{§~ØO·-é¬:> R 2ab«ø@tÕ„OT×-Ñþ„ 邚ñ×¶Z@DþØW^qÅC%Þ—ãÙ¼EýÀ]Xn˜Ì s©»î|àþ¢Ú¼SAá%àÀ:ø@GuÔu«¨ó *4Ïý”èéÁpb]Ø6ü~ƒž£…·r¾MƒòÂu¤­^À– ×"Âðƒ>’v‹@ZÔjz¤J%¿[Tx£U X—š0¥¿ ®í!6Ì/0T-ÿ˜ò ,‰ÿš‘nu©ÃøÐ¸¢Ò×4šëÓéKïö´OµÙJs¹d÷wáÙ½)’>‚:ò N¢ñÈ÷þ%yO_ë*ºí?วæíñFtU­`ªxƒ¢ÓW{ úmaú˜V_8Û`[Óåü²ž˜ógüô©ÅW#i\¿6¦»(j·ç .«\Þ´ÌÀT'¤ãkǹþh7¯ÖIù)]º-Öæ€ÉÊTa\•F* § gnÛ%‡ÉÃò  =§2øÊüôÖ9q:E9Õ3öF—Z"Qæb€~Ø/M»¿¨6@ÝWnW(¯Ø|àŠÆ=5§8> Šw\NNœò7à¾ñ’ÿz rÓ\÷Ûþ§\ÉŒ¼À+qiž…Û à<šÈ³`WÁ¸\T%â­+žñaþ.ΰ%6'ñÆáUwbsñ^]M.]ѹÇþ÷\’·F'áþ½c4”)ÜáXýBÍçà^¨Ø†Ù0Æ oCGö-)[Qo¾€/º ÏâÒ­|CS¾¡Õ¸~àNÇÍ߀áWd+B¡ „MŒ±‡aó £S`÷µ¨³-Y&xtÁÃ`X„tf~¼ï4rÆ®p£?`ê&ORcO„°¹¸ ÿ§Ö¬¿#9¸ÐØcêëB|Àg X£6ÛÜä/¡îWù*þaÒ_%êó°ÿ•Ï’È}ˆêø@9øÀRÈä•ÈÂB|€%Ôl¦þ„ºƒ”ºÆFó,$¥Ñ6oÀtûΓ~2#š'‹¥ð›:{ß³ó ©1¿­Ðh¾á•€~²>ò­‰ 1“Ò–ªÿú{˜û…óíù¶Z@“|€dO¦t¢›ÐN|€ìÚ™dçuðŽê¨ö©¨ý•{ÐÓJ†„IÐQS«ÓsGòÇòÞœóP×lMw-–9öãÞ‚>h™œWøÃµ:ûã‚¢Àë­ò'\3>!s ¬­k,¿ ÿ ž®2„åQëØ*Ðõ;Ü/Žp«Ëlýô³î› ƒßÜ•êïÍìíßo{\³U Ûv»o¾¦°Å=E6³Ÿ¤„C?pÂÇ??¿ØÿÝÈø@&ø!çõÌ«è`g\q-Ç?±8¡èü qT£kÈúx»G™Âå͘~jÞ`lèG{äÂdQOÌü‚3údvQàµHׯ7&z¾5LVŸ·ý /(Üž»óS{"lï¦Ë«ûËú£P«“òKš˜ÖšØ’á݃W 8Ö N„æúBqE¡l˧ ôpƒx/ÈmñâkÆyÆŒIP÷É”¹ @ÿ: M}¸°6pä$RöÌ8v&À­ˆWsx¤»÷\oQßNFÎÍ´çìû(lIs-îj ál€Û»°Øõ9bcÅ2Á³,Ü9ý%}PWÁ¸ ÅÕòÈp>@|@l=6ãÐoø¬°Å.œ±÷§:ùß¹â¢!>pq:<½Ä:>k¾a¨q6ú°,üϰ T*üÆ}›ÿ…W°¯Ð›| Ð'Ïnñ« ÉŸÐjì‚‚ePñ ê>®5Äòª±HI©Ç4HqÇÀ‚,Üß óÀ^èø3y§ê=¤q>@ujºr»¢h>#@ñS7‡n$8 ![Ñ(nŒtl|àUÔñZkÑïD0§P ›LÒ>lƒ€çÈF”Gøè:>ÐM>àŠ•¨ äÝöäQ6ÿ×ä¶ÿ@ßN|à¢ÍD}Ô† Ïè¶jÞ$¨Ö语m¨z\ÇþÕä|ÁÂbÿÆ+*=}%}Âk©ž¥ñnÞì|Xµ!<Â,>0Ü¥þýºóyµ»O…µ@討º¾õ|ÁaŸg¾LôLŽ`h"54P=` Fa¤Ì dÏÍߦa :n `«@·çÉHŒý°‡hÜØ’?!´‹ =R­“ßgÞhx#UšÞOšμѿ‘»ÕJª<Ià×\Qé)/VDϲ1ͽf„K]êxbã¼bæ$RcKV²o¿}EŒ­}o—{ìU,ìÁ볜|€ú™hõï]”wõ—õIÖìL+òƒ{ja7"WïíiÒp•—ÉúD£`Ù–.çÙ—ð©=¤O-Ž‘¼™êY:Ô¥>góó ·ûžÉ»œGßa Øœæzn¨K{¼)¿ 1=«•§j9™ 7õ JaÏ:À‰ ðâ¼ßã 39aÒ >¸‹Z|àŠŠ;f(­‚v­MóÜ|“¤îµö„~4 Þ]èÝ8ø@’¡®³€+ r+ãÕVy¿¼$ÿnýr¨:ê2õé®E=,ýÀéW2¿ÈÿV¼š³ÙHdsðä}݃Y6psbó¨ñSk{¼°‘›4ßx$ÈXKmû¸ž¼~ñ5b·gÏ{øÿÀµH:§ W P¦pïÍÜÔªÆæÕôÙ0ðhÈT0OZ^èûIòÃ1_Àç×ÈY¶~ B¥1ù¡Óô»@ð8ú;~¿®Xƒ l%yÐRRˆ'P| /¯mˆ©ù¤‚à)#Ÿuµ x <Þ®'zç’ƒdLQ¢ ŠÆs1 ~àÈ´Àx™lDUýÇ4É|zL|àeÐѳ‚÷ ãÅl*G>ùàðl„戀“h©7Ƕ 4Ò½âxÛ…3Šªã c'Óàý"OT®IJ£mÞ€¨àB0©ÒÇÚüô¼œèÝló.‚± ­Ð(8¯ÐƒÐGÔG½“™ÐªOÂæªéùÚî84A×Ú‡”«ô4ô•ôÔW&xŽwóùÀU<‘nõ™ë¯( ìêàÕQíQQ›¤¯k<ó°ñذΜSÝu³àÝwýÀ;]ó9ö‹>’>¦%> 1heAþ`•†ßµ:ßðÕ4Ï´dN±±ü¨5:Qu$6á?pM¥§+‰°tÞó2mÄ `«@7ï×uë‡~àL€û¦JçsÞÈY\àÛo¿:– þ=Ý=æ’Fôô9õùÀñhõ2yOЍ§Ù7 rE—uáÑÅ5]OΟ&ŽªVèÚþR=ýÀˆÀôú´è¶ï’óûÉfóÖò7&z¾5\VŸ—œóy)M궤É/ ré&(×ÅI3[a%ïNöÜܪùnjéšâ['É“ˆúÒ|àí ÷-ƒ­ØeÍkŒt"l­õÇN¸åñä÷ø¾8äå¿ €€ëJµÕöìIˆt±ô'ý\ñ¢bLçˆMËFïe½|Ý:óÆ%è!ƒþv§g:`ñ71ì#ƒç…GãÁ¬Æ} a)Ì,è—ªuÚ󸟧/\Hœx?"×f é¬*\¥qâVãþP±À „@ýΉÎÝs¯¹î2˜ÅvÕÈsFX| ¼|°¢4,‡ŠéŸà9Š—ƒÂœ÷LÆØ]°ùctjkæ €ÍÅp0¬€ŽÉ ŽÆ_ÁÀKd+BWgSêóÙ1_Ù#ºŸ|6àãq0„N·Ì;ð9^"¹hqÛ€Pê˜/ˆÖ@Çë@ØÑó§ x‰ä ¥È™JØ|€°VϘɎ k›‰•¬_>RXó±ð€#98Õâ|@eì”ù‚ |Xè‰êWÐòˆªy³| "ÐÎ| ±½ô—,ý@ÿöÒT9ôˆ¾º­м~@1õ½E}ÜÛiîåñnÞ"¨0È£¶~`¤ýµƒÄ«9ÐÁ:ê_¼bš/ÐÁ&p„ “)“@cð ZjùCºøÞ¹Ý Ý‹Û6¤»t¢ìç½Å–ç t­Låª:ûóÜÖάKM˜ÒGÐÖôn„¨TFš÷¨Òè™ CX³~ ¾?aiМ/Ð Ûø-G”ˆ¸ãŠ{Ì… [ÔCd÷¥ˆúâà§ü꬈õ+!||TÞcÏ`ç\±pOF£ºvˆ¬M´{\R¸‚»z¦Ô?ðmÀ>Þ#õõ €ÉNúé“÷—^¤qýZŸæ^>XÖž‰C?²¶€­éòêÖ|A•FÊ/BJ]¸'2*ÒTmM÷Œé&¨‰\‹| aò@1¸`ÄwYÃm³ò”#­inךqž1£Ô}68”¦/,¨Ý 8¾Ž¨Z7_àç–Ç«9<ú‰÷«>þÛ°ø@7N]cßG 'ݵ¸;_§ˆ×|³Vôö½Ç€ãЃ7½“æÊ-ÀMëø@<üœÅfcËÂÃÀÖ\ª ûk…%À_™Ä2Ÿ5_ ‡g¶n¨0›ð9ÒÀá0Ü €@ ©Œœé‚»ïÖr×m@5åw_•çŒôX|@-ß0Ôx)dTâ>ìÇ ö±ÃðÞœ¤»' ±­°ù€Aè´Ð|¤½SãY芅¨Ä|wivƒÃ›d3@J ºÛw6˜/˜Ü=ºŸ|+\ñ!wÃù%EP †\¬'¹¦¡]Mûè1ñ·àä gAñ6x¼×‚U`%úhµ~àS0¼[Páé}õNÿÈ#8êø€æÐÄÄZë?Ðî|` ƒüKÌ´‹~ F«ÓtbÚõçÙÅþ ׬ù‚QÿVšgY¼›·Èœþƒ¥vò8éïð討ºþÕ1Àg³à>]åÉ&Œ¥‰ÄÁY^×A°\¥§Fvõ½›&çE~Ù-âüÅûJÚØ–ôªí\?þpúäf°zB¤~¢¶.¥>ÀTÕò'¤`"߈ÿÀe…ž¬¡Âòèõy;ÍýâHY]Α:ý@™Â«Ph.ãÈú§y¿ù®ý¨À=ö¼-ê&°ûÈú(âð8ÛBì´Ÿ+ª¢ücG8‰¿5SjèôåÁ>pYå §!0¥Åù‚&É}Ä:ýÀñ}|IqàÍHׯ×R=p©/†ÍÔãaþ„9i®gíæU:)?cH·ÇÚ.ñ¾~AÆÕZù)¢>eSšûéF÷@Îä„Iƒùà.p~ƒxùÈØ‡öÇÚÜYo¦zƳü @?à—¦=dùÖå0õeRç?°<^Í`I‰wÿ7~þû¶ÿ@Š †R#C|ÀÖœp%ñÖÀC%¾Õgƒü?€p>À€‹²ÿ€ ò+ãÝœÍÁhPÌU4?ŽÃ` ÌÀ÷lä/g#¡¬B˜|àÞÂÖ µ„šÎF"(f€a.†"$R£¢Tậ¿ê ø)¿§LΊ°Å\0Ü@®÷IóuAµëƒ?ðo #=ð˜õö«æ0cgìÆ ^P| ‡äâhJJRwÆØ¿p;ø@&¢ä¦páw Bxƒ!>"[ëèy“ú `ýÉf››ó¯!\?àðrœ¶T%l>@I«ò ì: Þ'#ÒÖñÕh¥~€ÀE6ãXT‹Óè„ò£»pMrPmó†|€rEö• ›å+‰ºðþÌ»)¤ úõŸ/H+FÍk¾ ¯l´?aµáÐpíÀù7]QèIÀôx=µø@Vtø| £þVTÇ'¦¡Óþ g.À&°¡Ný€_§ç!ù£ÜÞ 7 oÜ`Σ»É”ý8YÒG3Öò|A©Â¨TðÛoíkùúc‹þ}%¬î›¹ØÎâT¿aò‰2‘±†|àbž¬dâË kŠ›êÑÜ|ÁºanýA8ôgƒÜ7—5~6­èS{8ä? îã«&è!±ûœóƒ~ÌÇ?³¸ÄÿýˆÀ2Á×Ë¡8ä ‚ ß‰T?`ûö—ôñ„˜=N¸]szîŽD?PØÛò' ¤ö˜{ìÁ½±Í¢×÷( r»gD¨ð¤ülP𰏍æhtmÃkëTϘn¬N?p*À­É* „Î?ÃøÀ>¸ 0ó /«äö¸ÍLpß2Ø­ËMÍ@'C]‹œ òÄu¾`¯ï‹C~þ{hr¾À‘_p:Àí]Pä;^ÍíZVâ[s.È ˜ó9®…¡ØùÌäqÕØÅæcðø¤`¾­pÁô<à¯ÌFây¿©8G>,= a:î…ŽÝxµ©¨Òi·k ¾ú`³à†€É0p/TÜz$ŽRräå2÷Ä*] ½z%ÝȤn¾ fý@68è†{a` 3×ÔQå`øÀûã÷÷¼Ì»b-f ïæBŸóÑë²0ó â.]8?Yy`ø"Jê>Ï#œÀäJlù†o‚…=30|Ší౫™SõJØ|€·øk8‚í ø ©ä†zåÈ7´ô.£~@ƒL¶!Z¨éðÐÙ ÀÔÄÄ¢lþ¯ÍÚC?VŒÛ Ýü k| ±=ü ù7Ùþ„)íÅœþ„íÂæÔî>ÙÁ:ª£Ú¡¢:8˜‰„C†ggè“8`Xo$0BZU^žSÙyc7oN\ç @ÞËpÝ/ãG½Dã¦Hôçþ`¥Žß>\âoñ³>à™ÞWÒåP+5¢R¸)“¸Æõ§j‰°|nžy™6â4æOhXþå¿© glËâ}_:¯1½“™p“OaöâõÙ}%}ù†'£š/È÷áe9Ïé?PäJ¼àžˆ”|0Y¡hdÝ YŸ`ŸF–_íérÓà¨[ùÐÞØÎ7¦»$i"/ÈI—Ÿ"ë¦~à"‹Ã|A=>pÒÏ­ž[x¬Á¶NJ˜<@ šþŒøNÈ-‹‹‚­‚v­çss‚º¯±|Ã:>@Ôÿ@i€{4^Ís¾ÀÖ€ëΫ/Ù÷™ù®ú½ñô'´ËÒ| ½cðú‰> Ãø‘µ]›ñpñì§6ðPfòËÙH¸PY7_O>„”÷™ ˜n;à*ªtÚ-EÒG×\3¸˜ó ÚÎF 8LãáøYë,°Š«é¶ùªKìÕKçÉrl|Iý'ƒa2F62aæPr1@>[t¤ëŸN@)ÆðʱU§vU¢úg³03@0:Ìçq~²TÃ@!(v#€}äÉɤŽB:1ó·GÏ×À»QŽÏšÐ$T"Îú ؆݋¯"8Å£~ >ØÑòþ$¤ˆi¾ µ|@ ñò`;ð¾>Ð…k´bÔØó}D}T»èj ú[kÚnù†»&I'zˆÆ ÆÀ¾ò‰Ë.ñ¾Ïæ-æÚþ„´S~A‡ÿ@GuT{UÔóÇ+< d¢O&À`š§ê5AFË@Iþí ÞœøædK†+[ûq²¨ßÌ‘–ó Î+ü¡ZýqaQË3ëÍ.àõ‰ž»úŠÚš®ð ¨Õ:Ñ4–@ ©±ù‚k*=UI„e1ÏÜàR—“zúk:¿Q2Œ-‹ïö}š/ÈÛn¨Ññ@ФÍé'ÖÍDŸ_°ÂûGä}%3B–?¡—òOFšoøQ¦8R1躒>Þæç‚Üžû¦¦µ˜oèôð¤ö·riŒ|à4ϲA’úlsù†aïÛ­ºüb_IŸ˜|à<“Æ-)ôæÅÒ6U÷OëçÊ‘`,‘(äDŽ *L‘»o<«¾ß`8ç ‚Œø.øÉ­ñŠ\›æ¹y´¤îµç öûäÉËŠk Ç×q«ãçÜ£ñÌ7\Qäýò€—ÿ®=_ЇWÖÙ÷QØœáZÔC0†mÇ–ïó½t2ȽEcHpæôx$ÞÍíòjô À䉜ñ3 §Ãs‰ @üü ë›7Æ`Âñ ÿ}ŸNz0@TµŸ_+Ï ñÆ…–sŸ RÁ0ÖIlÁ¨:£s=‚ÿ«´ëèøñsÆàN©&@Ë:´Ë >{ã²{èžJ e 78Ä‹˜S@‘ †1hÄ@9€} (Ã>÷6£29Ù=õù€ÊbâëAÀ×û„7ÀpÅ`Ø‹[p¤‘3îJÄY?p @ €½ð`yÓq<и%@Cý€Ü ý¶áDK¾CõªŽ rÌ\Mìúhš7ä¤.ß°¼½õ]¸öš/PMý@ŠdŒÌIóÜܪÍT“|À¯Ó?XÛP‰êÏÅøü-V“úyEþ·óoOt¯ˆwóõ—:ÿA’ú—ëÎ(¬ÍùtðŽê¨ëVQÏÒÜÙã8Ç|cðWëô %(¼‰÷mˆ{~ÁúT×üÎûE$þ„ƒvÎÊ/ˆäšs³ xe‚gj/Q_Ò‚?!O˜ØX~Á…žò1òÈì‚Àî¨ÀVnøX~i„GØæ„À( šù†:c–í­»”ϲÁm¾è¹±FÇ=ëé —¹—î+<S~Ø…Û§ôÛ³ }-™a0ý J^ éãl>pIá î"©-úlÏóûYæ>ƒÔžn…?á[ižeƒ%õYW¤þ¹éòsvó*”—éÒ±6€м/_‚0ÞëôÈp?Óèpꂌø.ÅÑŸðt÷­ƒE­¨IÿDª¾dó ]OÂÅ…¾ÏZóàzÕ÷'ܚế›åOx6ÀíS»íCSµ¬Ä·ætÀÔô!o¥ºæ‡ 9ô¤ ù@¹N‡Å’xã—@ÎÏ‚û’_¨¤Â9…;8³ ø€]l}â÷¸(â…×äy6¨je~AX3€`>AÇí ¸ ·è:Ò­©g îõ¹f„ÏÄè?j8C@p€Û@p tt±ï´ËM ¯Î8|V+âo=aóQçÌBp˜èx…šØTÃP|.|±àp·wýéAš/PcÓ¬ððY–_ÀÀçpl„bß™œL*ô€S?ÐJ>P`?€ÏAðxnáÅ4ô'Œ™¸0'¢I‡„ƒð˜d0ˆ;‹Ü7¾/"}’ƒRÀæÈ;7àÌÁ®ù‘ÕÛC5«hBç|ÁÿÉ|ÃЯҎLéxO“˜³C~á‘û‹|ëbìÓh5«€j&<â¢zýó æç×î ùtðŽê¨ëXQœÊBç•îªfL†sÔüU è¨ñ´TæQ|cg߆‘ÛP×lšèZØY0~Þ[4nÔYù 誊ÿ]¶×¿±U h.¿ÀéOHQ ¬8¯Ðµ—eç×6Õ#ªü‚Sîð5ßDÛ¼ônïA§~`c†ç&¯†%)¢>§· ‡ÃŸð¨Ÿva‘ÿû‘Έ]–w%;æ Ê‚\I5åT?ðn†4Œ1òê@¹N?PäöÜ;2pw‹ù†í‘ “-ÿ¯NjOúc÷ؘî~d€¨ýÝÎ7¼¨p{¦×Ó„ñ­;åçìæU:)?oHwÄÚ² }/]2„ 6è-ê“7¥5Ár&'LÄwQ‹\VWÿ.­ØÍ1—Á U¥é‹¬`èÂÔ—©oès¾á^ߟV 1F ø^D]æ?°y¢+»«5_p.Èík‹ü‚ï}æ}ý´bêº ÆÀõi®¡¸xSëÀ BÛñ ‡~ °:ýÀC¨°øÀ™ù6›º€&ÉGRD}…WÕn|‰Ož?Äâ[âÝÍC2tÜŠÀpã5MÑÊ‚ˆ_kò<>Èèäxð`Ùè 7€áÀúc +B¿ùIÔÐʬׯ½âÀp>©B^ ÍDÇ4ûÕAEr ñ G¶^s )©¾ò‰4Ü Š3ÜP~i” *Žá €Càq£q𬂑œì™`8!Ž|CDylPN8à8Å1'”à<‹®ã:±øeƒ‹”’8ô]ÁpœD1ä'ä8,>°ãŠg4àÝé³X| 4š×€h !³¢ µôɼwcÈ€êןLÎCíy…ÚÑŸÐoÔéi;ðç|Úƒ€U³:ÿváaþ| £:ê:VTÇÇf é×½@7Œ‰„!eè ¾ #çƒî¼ÑãÝWBÈÍp-töÓ>’>ÚˆÀŸð’ªÖÙïÞjU¾áÚ‰ “ûòÚKñ§?aSù†=S­“åÑëòöD÷ê‘.u™ÃØÀ(U¸£*¿)Q4¶ÎîáûÊ>äb«@swzF_ÑÈÂÞ‚6g ¬‚Ãàt´ó~#ïvúœ pÅ¡ßSÙÕ”â¨è:§~ 2ÿU ÛwÉù¶ÿ€Âˆ÷D€>¹¸(ðZ$ë×ú4÷ò’öŒÃŸp׌‚À]ùTë¤üŠ&¦Í‹0µ¡©ÚžpCŠ ”Do(O(ê;`ù^UÈ÷*q™C9Õ3öF+¿€ú×åxÀBù†î±x5€e%Þýö|¸Þõý6Mt-ìaùž rûæÞˆWs»–ïó½äôË7LàŸ[ÛDäã.ç´«¤q>pÑ*P¤‡î-¶ÙQ1|0I>œ"ê#mý-ñÉó‰•IS®ÅÇ ±b³Ñ‹ÍÅ„>’q0éêA×ì0>k~AX£Yèƒ ±þf  )+üa¿y¼kP’Ú:>0}a 5ÔÌÀ$ÕmÐð1…ÆÔ£~^xóJB°u|ÀÖØÍ~³ÎÃŒ8‚ã 81óP÷t†á„£Ž´N?WœÃqp8Ç!âTcA‹ÉÉ>`X|@¢,V>ÐN’¨Šbùaúã&1ñ£«ž›ï—‘>KÜù@»ø†ñöÐLÎCmi~ ´£?¡Ï ¿³¶¡.Öó‹Šý.[óýe}âu÷'€&<ÚáOtðŽú?XQû~¡yf‹`“$ÊF$Q=‰Â|:©òôœäßÉûrå¡2® ØšîZ,QöãÞ¢>º%BƒA» ò‡½:ûã‚¢Àë­â«'$L(i/÷ôAÜ­VéT%`H☄&ø@•!,›c]¦x o§º_éÏ7<䎖ëü&‘3rOqø¬„ðñ1÷˜‹¶¸‡ÈîKõNÿ³Aî¥YÏdƒÛ~IÞÝÏá?p:Àx kFò–mO“†AÖ qé©vË*W8­G`róùÙ–.ç ”ÍæAF¼Ç}ôñJb;W|+ͳl¨¤>+E:_°)ÍõŒÝ¼F'åg5éöX›æ|ÁYC¼£Æ1_“î~¶Ñ=6_g>°fœgÌMuŸ›c.ú7Aiú‚ÚÝ¡=À’äð'¼ r+ãÉýÄûÕ¯ð”Ù \ON]¦Ø’æZlëÚj¾àÑO¼/Ÿ²üºòÆ Í|ÀÅuþmèOèÔ¸þ¶~àzðí“äÃ}E}¤(”¨]i¡OžO->P©µ>¿ ¥ªVÉV €x°VžËkŒN ñ¾õ|Ø$¡}AÐ }@Ð}` ¯Êü)6)MË7̘¢DAL>p;P¯‘I¡_ðº E€Áh:Váºò<çÈ7l p6j¼®(CÙú+®¾ßøø^{kå3<3âÄÌóË Ö3C)8”Â@‚(5ÝÍJNö,Ð `|H?30Ïõ/` .E±êZÍ"äk ç Lë@•ÂÚüô¼èÃ|™oÈm(Ÿ/Pëæ ÚE?àÓéï­mhÂuÖPXPäû²JOÀ€öâWta…Á ¡½øÀ…µù':ø@GuT;TTÇ_N‡çkŸgŽDØd§ÿ@PG­Âh#$4ïÝwÿ·Ó\s)~ž"jc[ò'4´3  *ù†¯LðLM‘ô5Mñ…™ú™2Ñh$ßð¼Â¯!²…y5EMõh’lJ“×wéÃ1_p^1ýe›*ª;pa3 íºn.õcAwÝ×GÒGÚ|@gÐÏ£É/Xº}·¼Çæ`ç‚\‰úHõÛÓ¤á*!/’õ vóA.ÿ˜•ÿ@<ò ‡¸Ôç\Îù‚Éá&‰a Ø’&¿0È¥?˜ù†¥Fëó r2nêI•¢¨ôŠߥ6Ê74´é®úDZ§8§r+ã=_pÐ˰æ êû¬ŸèZhûœp{çµX¾Ï÷’Ó`“ÓŸ0É:WGçÔ:üçmäOè,›0@Ñdµ -ðÉól>PGÿ¦ªJ3{@З×6ijˆ ôA7PôЭBÐsóÕR:‘—©Éh¬|@Çt1À@tÐ*Üõ¿!ºpÎNÓx áEJº@ V>@úkß¶ü`¦•)<¿õš\VÇZ7_`—à*®‚⮸WÀ×ýÿžƒ= ts ¤²N?À!VÂÞPWÃŒ›©ää&ôïïöÜD–ØÄI?àä5:ks{Àfù@R{ù–ÙþíåOèÕëò \íáO¸°Ø¿¾L᎙{AŸ°m’ûÉx7o‘TéüJÐ@zòÚo¯;¸¿¨6/äOØÁ:ª£®cEç?‰Î_îùša¤r„ ¬ù*ž9•}ïÄ}¾`cš+;‰3~Þ[4nZö( ò}ûC«ç ^Ÿè¹+YÐ_ìÑà TŸÑ¼?áe…ž¬¡Âòèó VnÞ!¯æÖêô§Ü7U¿9‰[³’}ûí«+,ÜÛçF5ý[).6«¾ÿÀé¿:kªÿÛm5ªøøŠœß[Ð'Ú7ò^=rýÀ»Ò0€¼Ú_ÒÇÛ=Ê.oFÏÀ´õN>à7HíáZîÑeŸ´œUÙX½™êY:HVŸóp1øz R~:(ÝksXRâ}¥To¯ÖH%`ê67¥Øœ‘1T î†Å®ÄQ?°6Ísó ¢º×öø:(M{¸ÐüÁ¬Ëœ#ê˰øÀÙ ÿh<õf~© |oZo¾`ýD×Âîbˆ”´E~S?Ð ¿ÀÉ8©íø€_%OÂâ?r9 eBùõâ¶ÿBÔ®tO™œeóxæ4U׳įj\³©Aè4ûξB|ù@ýb³àåÑCËG2y™ý¬Å6_À0 @"€D0$Yÿ6ç ’Ð[‚8è4ç Ê‹”tkõvEðýÊi:_¥SðŒ1 h|ø€]>0TÃô-¬±þMÌÿ¯¾˜ð—TÚ÷Óñ¯ƒxÍ÷#Fÿ)`¨ 5‹ê–ödr²ËŽº¿¦x¿ÂsC«ùÀ–æÓì|A•¿ø€s¾ s»ÍXþíæOtúí¤8¯pÇ Ÿ¤§¶ ð3þ±àÔëÏæÔîîð'쨎jŠz¾à$Ü‹uÝH †ƒ€c ¨ ´Tæ°÷†.¾wâîO¸!ݵÀCØÏúHú˜–æ tíœÂ¨Pð›¥ûü-c6»€7R=Ó“EíÅîB(ÛÙHÕ[ð'¼¬Ð“>Ä4_°1ͽf„K] ‡~àL;R¡ó›)a›œæýÚéO¸>3áÆê { EÐçô“ô‘óàÖÌžx*2>ÐH~Áy…ÛëÓ¹'çE¦¶,š,ÞX«Óµ)’~§­!¿¨pÓ{¦´È>ž$õ¶,UÞ3~îÛóK¯DÒ¸~m˜è^1HÖžó3òSÛ4àvsŸN*.êÒøX›ÀÂbßÚsºx§s¾`}Sþ„›32†HÁݤ øÀšqž1cÔ}²•_ð¥Wš²´¤¶ lt£ê+¤øÀ£Ÿx¿:àã¿cçöÔ—ÃÞ‚Ü4×ý]¬ù‚¶â+öúÖÚþ=DcP˜ÿ€=_ÀÚ˜ø òlÿjz+³‘Xê®Q¡,@Þ[lS>ðQ¦|¤·`òÙ¥v§»¯ÊsBú½íç ®©u|àŸ×äÙ”Þeßoý@c•$ÖYäI„fð"1ú­ÒŒ´þë…ó7É 0à9*&‚AáëtÐoòêä¾Öꀆ\œÔû·5ä`ó‰ÀÓV| é"¨öD¿¦rȽ&Ÿæu>0 ÐÁ[,|ðÁ€Ž¨N#„ääîWx|Ê/` â‡åžïW¿˜¸èùÕvà}™wÐŽþ„iŨ) šúvó'têÚÅŸ>˜$Kõ¡`§áÛ³ó}q2´˜_àgüc¬½ù@‡?aGuT{TTßéGf#ñXµ{QP5Æ ÃÎü¬Ð|Aƒ–ªŒì¾YðnŽë|9îZ$Sã'É’q‹ÀŸ°Tᔫøu«ó ÞH•¦'‹h”@ Zóe"kd¾àbž¬dâË kŠ›êÑ$X?ѽf¤[]J|à\û¦Rã7«ŒmXÚ×{(¤pøöµ¬¾>`ú‰ÿüüBÿwcö8àŠ«À?ö`amDç‹ùÓÄQÕJ,þ„ù C.ì#™â… #Þ>úD¬ƒ2Ü+‹ÚÓiZ?¶€wÓåÕýeýQÀÔ”ë⤙¦64U[§zÆô`jÇž//Ì+ô=Ñ`['%L(Cþ„—ã8_àô`€~Ø/M»¿þ|AQמ/òÆs¾àÑO¼_ö™óàºÕŸ/ÈMsÝoûœôsÅmÁœþ„½EcÈ›]óB pQãÇ`Ï m7_ ’'1ù@'ÊÌ|ÃëÍ>Ì”$ úPtYíÆʯ(WI.`ú»&ϧpèz»´³i[[I"Ùdÿ›R:‘-ýÔ©éÊìŠüÉ,ÿ”&7 ðõNv ŸrÀ/h/R6¬õ|Í=7¦£#¦) ¼x(3˜´õþ„QW¥­õþ„uˆ¦aQxЈÌïoç_öDþg­¸3|¾ úªK—.dYNÆØIj8ôµ¶°µ»µ¥j–$Q½}ül>"#ÛÅŸ0àи™þ|[- Y>ðá$éX²h %;[Pè[k£ÆªE>PcÇm>ÐWÔþtÝù@va`W‡?aGuT{TÔúã†{¡nÈ —%ÙÖ øüŒ–2¼q¼77®þ„ ÛÓå%Å÷SD}4"ð',Uùƒ*~ûpI˲ðfðæéîd /vB¾Ö¡rÎ4•_pA¡'Ê!>ô@~ÍÞ¨`çÜàV—‘zþÙâÈæ°ü‚lˆ;®¸Ç\²…É›ÕË1_ 1è'ýüs Šýß‹˜¼wÙµ³¿¨eÚ7 rE~pO-,ˆìh)?CuÍ kœþ„ç.︫Eÿ÷2äüþÿãúø’âØfÑßIó,ìð'ŒÚàª!fÌÞÙTES•“™pSw¢vâYg8^ÌjÌ`ã¤Äô¡b`mÂ7S=c‡ºÔÙÊ/8ïÎ.ôî_Ç] ¼B| žú%%ÞýßøùïÁâ]8íEû¾°ó ÚŠ<\â[sÎâ=cðæ ×¢ÐdŽýÈÚÎp üã1öh±jPÇ$ÆÌù‚+³‘Xæ®á|šÑÆþ„Ný€fó;¿àªÎE‘á[]³øÄoÊå¹áú6ž/GB=xBÓyÁ¡Èì³ô}ÀAƒ<¼Ð¡Â/hî`öHß§Õ‘²a¼äôˆðÌØj^§°?×ìYÉü7Ë`JüÍxq *Ó"€'ÞþUbس€#æ ¸:ÂXôs `2 $€‚ƒ€ æw"L ‡ 3ÇB( r£Uì©÷‡ÍD­ØŠsÎE³ã,>°c…áóvð'ìϼ›Bþ„´üÎYùí¦pæ´‹?á¢bÿÛ` ¬OÜœæ^ïæQùô‘´?vøÄ«9ÐÁ:ê_¼¢:(™×Qx²<›Ì6¼Õ)ñ´²V§gu=q×fî™ÄáGý$ml$ù¥*Ч²?.ŠÀv¾Eý@o/öhB?P¥• ’#†0Tƒôd5—fç×Fµ›Œr«Ë¨Ã LáŽUi4—pظ¸—ï+§~`}^ >…=˜"賓Í\ó~à\{iÖ”À“û¼{ѵs€lò°Ò Wrü£G˜ôW0U¼¡J¥kûKú88õ‘ø8ó ü©=å§OƪXŸæ^>@Òž±ý Ϲ]3 ÓœÛ4™oX«“ò+DLÏÚ™j¢©ÚšîÓ•Wó“,>p4(<—]à{ªÁ¶N’'õàŒø®×|ÃQ.µÄeù HwÝߘ?¡uÈÎÊ×ü‚e%Þý‡þ„=ëç椻Ûþ„gƒÜ¾¶ö'ì!ƒÃü$Ê~lmgðÜuò'¤ì§€å?p¾B('ÂE…¾;?xC[-¨Ó„ò ÷”ÉY6¸¦¶]¾¡]å>°_•ç„ñÞÒõÕH”N ›/˜Ü]9Í“…øE€Jð¨lŒ 8ë¾a¾¯l>@Áó<1ù€¯5|À&À&ð¨¬E• Öß@%.¢BeÐ8A",‘7aA\õnëOrÝj÷RÀEQBx™|@¦L`™àëÃ䦊lÁi6 A1 @gAÐ ]@Ñ̺¡“Å B¥ƒðàÓÉ^aä€LƒAüóÜxgœmñízT£+€Îǃ|ÊïK?ÐðE­°™W R`š/ˆx/ôuxxœKIé91F€RBSÄ:>ĵÃ|Áä<ÔÚ| E2FnJ÷Œi«æMò…Ñ?YÛPú³1>‹Ñ|v¬=ôµ„Ô°ò ÛG?×Á:ª£Ú§¢ó'ÌBçÏÊ=³)céÄ‘_ ðÖèô,åHÁ°ÎÞ ·¿ _Ü`]O~@$쇑Μ ð*õ8̼5Aº'YÆ ]ù†ú8ò šÒœWè –Ï/¨mr’µIÂ-;åW»ôPT(4—²aI‰whû•ryn(×±¨'¯Ï ë£àô'ôó/fMó'2>°ÂÇGå=aþ„~®ÈËø'"õ'ÌÏGùA_vúœW¸¼{"™/pê|©ýÆÇ­\º×ÓùÂú4÷òþ¢öŒ•ꇲ ·ëÞz| Ì`sšëY»yµNÊ/¨â±6€EE¾ue¬.ß°¤OÝ”î# ›/è/wP€ Ä{YÇí³ò¢;QiªÖ¦yn#©{EK?ðµ_šÖ ¿ êK¶~ 4È­ŒWsÀò'ôóß#–~ Ÿ ® { rÒ]‹m³An_[è–•øÖœ²ø@WÞ´©)>@D~E¼›Ûå#$”oèqæ\bBp}ôL’§Xù†¢ªv£y^9 °ü®C¾a…•_@m>ÀP7_,j1[‚FZ„º:‰Ð ^"uó™ˆÉPq 2.¶ÄàÞLßçŠ->@ØP^pÎDxfl5¯›/à`³k.á".á(.‚â\"ïâ*YãS¡Š‚DXO˜© ñáÝt ºlÓ°,(.ò2¢@¡¼R®Xù€€Ñ0Ð ½@Ð@oôCR#ôc„`c¬2Œ|D<7F•oØ `K!ã’Á¡z¢7€ž>}Oø¹ÛxäWŠa| Je D¼€f÷ NYB•’’2‹1ö8B6Ò!¼9Äö í0_0þTŸ šþ„}åvš/¨uøx ·~ÀáOØ>ùaþ„í‘_æOØÁ:ª£®cEu pb:ízæ¦gp„ ¶ó ¨ÔèCÁM}ãîOøÎD×¼$žý"ElÙŸÚ%…©TÉï–ÞlU~ÁºÔ„)}mM/Q\ÿ>ç|ùFô×Tzº† Ëcò'ÌM“_ìÒ—Ô›/8vM¡9‰rfgú>ù®ÍÍ÷Œ® âþž¼>»¯T§  ðÏ/(ô'¢°LðCγùXYÛ ÜSsóê Ds•Ÿ!Žª]ëÌ/8àvÍš˜Þ<XúÁn¹ÀöPñžÐ'^‹¤qýz=ÍóðHI}Áö'<ävÌ.Lwnö¾ÝjÈ/ô—ô¹@ˆLÈ.ôE1‰^¹gÕ/gö•ß©ñ€@ wæÙÌd¹Û¦sê öÀÖI “ˆAS?`ïŹmNq°UáŠv9ù@“þ„n¢®!>¯æ€ÉŽøØþ„ÉõùÀ¦‰®…=cœ p{Û‚ÃéäÍ&¬ Xù†ÿÙš4»¸×áíÝ[ºÆØù‹/¤ã?@u©ÅúHí4_àwø\ïù‚FýN)ÂSsò}q5BˆÊ ¯ý®Ã ^Í>ÐQÿâµ?áJÏ<Í`©<Ø0e.BÅ@­ß ¥‡ÂÛ¨/'®þ›áZ˜@ŒŸ÷#áz¤B§¿¹?‚ó‹ò µÕÍhTƒ Œ™ƒ`°Fó O]eâƒ÷Ô”4Õ£I>°y¢üò0·þ |à¢Ê»¤9²€ó |ûmúÁVBøø˜{LYd§úœd±Î@gÐùùçû¿ÑX6¸/Ëyv~,ÿ•ã¾3oOdWS ¦Š7T(tÍ@YŸ`÷8ävÏœ¸«e>°GÎïc5W xøøGŠñþëiž‡‡Kê ²#¿àžÉá‹[Àæ4×sC]Ú€™_P® “î‹Ðu¡©Ú49áÆÞD)N´ý ƒÂ‹óóÈ™œ0iÜÕVú;ß°Iÿ¡®mKý€ÓŸ°s}ÿM] {‹&8ÝF|`ù>ßK¶ÿ@¯úóa|€–Ç»¹]5pèìù‚0>¤‡îmcýÀöIòá¾¢>€¢v¥>y,>P¥s[Ú²9TYúâÁZy.ÕbßÙ[¸|€"4_ÀSšN]ÄÔ‰‘õ, ·±ÙÖ„}5s”ïk›ð„ ñ`kô`Y8à(€£ øGI.ÔY õÓ Š‚Hà ñ´ž¤X2Á0€ÍE5 |à(8ÁQ\éZ_bÀñªÅdÂĨõó°RA0 †ƒ`0œÇ I ¸À¡OÿÎP$$ƒºÁ*xÍæ€õ|ANøi8Ë `8¬¼Ð\†ÅTгa| µó]9aýùб°®P0 Àˆý^ñÞÒ 7N(Â[¤h"\¦ÊõtêÝ»÷ZBÈr‹ô óè-#Úe¾Àé?à"z\cœ©~ }ò + þƒAk·ü‚ kóOtätTGµCEíOø ódëK•‰1‚³Æø¼ªýŒ–êŒìºSòn‹»ÿÀÆ4WvÇ~ÖKÔGG’oxQåyuö§ì®9·è?"bucþ„ŒAUÑü|Áe…ž¬ â·æÕEµ‹¬æÖr<±q*À®Õù\Ž7rÂü’;Ù3æj‹’y}v_YEógÜšÙ…'#ó'\úþn9¯¯¥²‡å?4¸§"Í7Üž& ‚®âÒ&Ú=Ê.oF$þ„Û3äü~Vó #Þƒ5Ü#Ë>iÙk²±z-ÕóÐp—úbÈ ÀíœY¸Ë¹MØ|Á¦4×Óvs¯AÊÏ3ñÎX›ÀÃ%Þ×/)Âx{¾ Ÿ¬Ok2ßÐÉüñž’[ÆÚÜY碌o,jE’å?p Ý6_ÀÒ ê:›œ p+âÕú>ÿÆgéøÞõý¶¤¹wwø,,ö¯Ws»Úë{Ñž/è%ƒÃõV~ChCÿŸVÇÔÍ\4„ B®pêUíFK|ò|Û ò:Ì\UéfÀÔ|tÍ¢AF'Ûwöä´¸³¡úÕ™«Ë7tq$“º|`*§Dõ“Ïæ¡/›ƒÑl)äH3“ó}E‰ùiH ÂSJ:€+ àQ eá0|‚¯@°Ÿäârc#yÐþ1 ŠHÀ›þŒ™çê­ã€¬¹‚Å– á€/Að€/Áã¨ýåeüj „W©W,|`>€L7a4€.ŽMz˜S;¦Âϲp _~å3)cU¼®±S09&>°'œ ½-³ÐFƒa4ÆêxÁ.·iÀ°b'üŒžäp…€¾*LÂØù@ÝÀÃvkAn¸Ñ± Ñ^ƒö··×uöahë"©Cº¿“, UW7|SÞ#Œ´µ~`ÐÀû„™»+%VK¯Ã~‚ŒþÑÚ¦ýôÎ|Ãc~áñùE¾Õñl±ÿ@»ùvøtTGµWEu ðÙ,¸ÏV{é:›À6L²üt_Ð e:HÞí²oó¨Šë^ŸàÎê"°_ô‘´±4ýÀ™  RÁo¿µ¯åó‹f°zB¤~¢¶6EÔ‡Ô¿j Eÿîx –ÅÄÞHu¿0Ú£® á|àHµÎç0Žm|x”÷0Ym^|b+!|tÜ=úZ€-é!²{ëçœ ð/Ì/ò'b>°}·¼',ß0ÈÕè‘ûlO“†”¼ý|A=ÿ…ï1}ü¼&«7S=KËês¶ÿÀÙ·sVs|`ÃD×Ó!óTœSÄ;bmKJ¼¯\V…ñ^‹ô—õi›âõó â™oøNºûÖ!¢V$Z|àKŸ45l¾€¤+­Ë/8£ð+â™o¸¸Ð÷¹í?@ ø~‚úrØ[›îZdóÓnovaìX¦©rúôAa|ÀM ûÅà$þ‘x7·+ŒØóçgÁ}É/TR¡LáÞ›hÓù[?ò(ªçÛù†•*ÝÒ–Í \¥9€é?ð•"Ï¥šQÇ®‡?a©Î@àh:MàÌpM¨“YLóCÙªðÏ“æê¾I¾/lýGØž’´‚PðØJ–…‚á øŒlÁé¦GVÁpèxJL> £U| 3€© ˜ l®€à0ðxü£¾Z_J:%9®ÝC$m2Ô›:«®¨¦,²Ñ*2`žrßó¼±*Á?¬=´ÿëZ¡ŒüI?·#Œ|tÕsSTþæ|ÁÞ`+!à"nÅÆ¸ u_å}ÁÐÀ\ÍÇ,>=Í W`ór…ÍCŒþÖ±ÁÖŸÕlÜàq+€;aà @¼M°#¶›MD¢Çe­¶¥ ËFW¨¸ý­ËîßtŒ[+uâ]”ìïJàÝtéŸýeãVƱ€xË‚ÂÈ1M45pàÀÎÁ`° æ)ú_.\¸ðC *!¶¶iÂvË7tòÂ>ÐQÿ§*êù‚CUžŠÆÆ¹86²Õ“ÀkÐJŸAÏi„ì¹ÁåÝxóÇuŽqY€­H‘ôÑkY?pNáÔ¨øÃƒ{[9_МÿµR§*Äi"ß°šˆKcâo¥º_¸Á£® >p&È©VéÖD 9³áÛoC²•vp½äg‹» l†3¿@gÐúøg•ø1xo—¼»¿¬OÆÀιb/Ç?±8¯ö@$oÙö4i8¡äµ¾ÂÈæ É7<êãVÆ:_;ɽ²Ÿ ýU Ž|ÃüÀTçž;žÏM—ŸëïД©â±6€¹ù¾ÕeL_kñÞ¢>ySF|`뤄ÉÅà\ß% ·ÅKâÿâÏè›Ýê'®¦ü @:u-,>pÊÏ-‹ç|Ác{½_ðñß¶ý Säd¸vÌS´Ó®dQ±?îwìõ­³ýzÆà·R]óC ð#4_ ˆ|Üã¤ìrÎ$r¬>pç tÅp©]hq…¼€^Gý@•fúpâñ yU šißÙÓÕöúg~!tõPsŽŒ1¨S»ÆÈ¢øVuúˆ„ é4Ö ÿ,\f E ¡àSò‚M=ެ†úÏ©ÐxÓÀÃÛ鈭ÔôÁ<ó "ÀæâS(„ˆ"²W,žXMãi€Ñ:ý@vïÔ&_‰IAX àìÏw  øPñ>ËÂë, +Ù\Œba+!H¨À5^cììù‚hó ÍE¬†y:ÞéÒÜ æÏÆ(£À°Y¸\S†#¡ùƒžåƒ+ôePîgó£~€¼‹«rä² ãÈA2ÉèiP:Ìñfì ŸMC'ÂB ”è¡û ãûAÄ‚ùé`H?äfTi´{Ѐr‡[íbò éóþ’q ã› 86Ò`åhkàÀtÿù± ª«B#ë¶»¶ÂÔ8üÚÚŸðšF]»*%ö…Wú=ЄÿÀiEøöì|_\Zä>&Ôù¶Ç|A˜?aÇ|AGuÔu¬¨ç ¾Ð<³E°IØ0—uIV1àõéô¬Ä£øÆÎ¾ qõ'4Ï]÷ „ý0EÒG·”_@» Ð#Õ:ù}ö´À›9öG¼Ó@±‡ ª_$úk*=u‰ßŠ)ß°1>PªpG+T~Sƒù‚•6ñŒ¬U°¤‡ ÏìïÈ/`€þŸvQ‘ÿ{-€e‚ßnÈ»œú ·×O"÷'Üž& ×yÙé?p.Èí¹oJ`Z‹|àãIrqoQŸ˜?\gýÜ·ç—^‰¤qýz3Õ³t¸K}NtäÞW¸«I>°5M~Þnî5HùeUœksÀÔ”©Â8[?ÐOÒ§®Ÿèþ[£{`sFBÆP)¸§ð]ÔIÜøÀšqž1£Ô}v¾á×AiÚÃ…µùa{  §¾ +ßðœ_ÿG?ñ~uÔÏ–~ ­ÇÖOt-´ó O¸’¶È7|¸Ä·æ\ÿ`ú†åtâ û{ºMù@•FƒÅdÛàzó;߀¢ÊõøÀõð¨PˆÝC3jfè”36ˆæ1÷u¯ç?@`ñVø²9(ÁØA¶¡YÈA6BùlTÁöHæ úX Š¥l.ÎÂÀNðØA6ãX£‹¨ó ÔÏÌù9>Àá¯C,‡Ž·Y6±9xŒÍG÷³lˆ1ù€n°J²1U^;Üc^¾¿¤Š·Lð/ìíæà&P܆©0‡ê×Iì8éçÊjuºù…5aú«*› ê€a+¾ð5þ‚¹wÁ”uô°6 †Çº ¬S­õ“&R¶‹ì›$Y®¶Å|[Н0¦˜  ÛÙ 7 R£Ý ÜÌ«Ia|€ú!Ÿts¤ÂÅhsp¯ë ™Bž¼a|àx²h i7>PcÇX{ò0Â>ÐQu+j>°_õÌ‘)ËcCl>`çˆE7vñ­{~ÁÆ4W¶‹âÇ}%mlKþ3ùÀ5•þ:’˾-ò^¼þBSù~ƒh &r¤qÂJÄÈÞžè^=Ê­.£Ž|óAî›jÏé"éïÝÛÝÿ…¢Å²Áå^ðÜTeàþdAŸíÔ0@?åç_œ[ä*¢4ÆNùÂÆ=ñ`aí¡HÞ²â(¯A× vé©,Z>ða†\˜bå R{ÂOŸˆUâÿVšgÙPI}VräÌ*ÜÝ´~ M~Þn^­“ò ǵf¾à"ïËgº|Ã’~צ4÷Óî“Ó‡‰=ÄÒ\ð“[ã!ðrªgìHY-qs&8~¾a7ª¼Bl>àg~Á²ï~ÛŸðÝ85$–lÀδQ¾áò}¾—NùO ·h ÙœáZZ@'Þø¹µ!Ò¶ã é$‚–ÿÀC¨¸^ó6ùúêæ ®i4§µ Z*{¾ ä? 8ø@Q‹»÷DýJþ<™Lh˜Ü=ÂhùÀ°:ÿ€ æ ÈÂIïBÀv²åÍ=Îò'TDÞEX"ÏŃƒ|*¾Íæ [Qâ¦&ì¯M „Ð`kø€Á„@8d€áOèŒ÷Y¾ïd€IÖyRç?@6¦É놻ÌË÷—™pë];}_Dµ'`B(˜ `îÌœÁ6ðø8ïŠ0´«€/àWXÍ—oë®ù‘s> ª²Ž >ð‘¨1f‚Àö¸ 7AÅÈL©ÑÍwOâØž°ù‚ Azøž‚øù²¹¸ ³Àp<`óA¹EP“hZ1jJ-ÿd)¾þ„$_’-ø_tÁÝ`øŸA¿¬ÔhW¸ ò_’´g=þo ’9_ÞšÆ bÆM¾Ÿ’Ò{JA§£Ý*óî1Àßø|A»ðJ4äOØù†÷ÕæèÈ/討j‡Šš|¥yæJÐ3 !C$Ê$šÚž1(Ù3Üðæ¤î…?® x7ÃõOØ“#ð'T h—TþP¹Šß¶š4çOèÌ7$€(Öè|Á%U|è[%5{£ZÈú‰î5#ÜêR'( rG/«üÆN¼±uÞTßþP¾!@6§{FWjXÜ‹×g÷“õQÄá?p<~`%„íGäN>p.Àû÷d¤2¿üiâ(¿B_NqÌœ p»gõL¯àÛ€|!Úù†~ƒÔžlؘî~d ¤ý]$Mç†- ']~~ˆ¬?^T”bÆÌ§*šªí™ž±]¨šç±ò Žø…gù¾Ý`aþŒøÊý¸óžb%.WNÞÎpß2׊Ýsé Ú—~yʲb\…¾Ž»Âô ¦?á#ñj÷ø¾8ìã¿KÆð}xe}€7'ºæuëô Šbëhª–ïó½tÆš/è-CÞœèšZ@'Ê~imgÈ.þñ{´XA|¡ùü¨ÇÚrì×®2å#½}„Îä¨Ú–xëôå׿|àšÅ8é«×lDH¹|  Ð…Ä‘ÌÐ|53S‰ˆ„ÚÅæ¡/Ë~ET÷ôô}îÔPÛ@3lIùV¯ùØ9, /²9˜Æ2[>’&¡ X"8xBþ­ä·à6t–…\Èml® ´k¾À¸p>…•Ù‚ÓÐq?€Í|æè`%T¼Ëæâ·, ·5ØsÙàú ªì´µáÃBOTˆŽ¼‹Sd ~÷øX(ëÃ4/²,l`s‘ÍfÁ —„1¶ÿ@Ñ3Ôœ/0Ëš/ˆºÈFÔ’-x[1ßAùš˜ºŸÃ‡l~¦sÜcöãx°ä‹Lt&¼p9Þú6)à°²@dßnóPÆÊjzK*ËzR$cÄ;™ q!¥dΓ\ü f€à|£1pÕºÉι¯È»ð™ó pn]‹k¬ ùA’‹­d –,;Úå«]=àqF¡ÿaõ4ëÃIò±d‹´O¾!©ãí“o˜×Á:ª£Ú§bš/àÁ2°á"e.Žš¯ÂÈù èα¼7'îùëS]óxö³I¿¹%BA+Sùƒ>•ýqQç”Í.`Íø„Ì’¶¶)ý@À€n€0™2±±|Ãk*=UÄsòk÷Dµ› w©KÂã¢Ê«ÔÈ–.Þ½«»ÿ!ýÀ*Ðm»Ý7_RIvAÏê+Õé @?àWgúŸŠÌ`%„÷È;ûÖÓ¨Œ~'R› ü qT5躒>.L?Ð+pW‹| ̟Ѐ÷D{rqYÕ¦t÷£ýEío¶~ ,Èí¾· 0Õ¹MØAhNšëY§ÿÀe"Nˆµ9,(ô­¹dlý@IŸÒ¬?á!°‡#f¾áwÄË"ðÍTÏØánµD$Mø&°~àØé·<žþ„KJ¼ûxëò ø¾•êšâþ¶ñxh¯ïÅÿ€h óH²¼.¾íø€Ï OÁâI¼ñKÀâç ¡‚»Îù:ƒðªi~­<×Τ¹¦r›[Û ¥ªTëüNy>ÕP—oØ_Ð6ÆüÌ–Ó€#tbˆ@Í蘇Ñ<æÞá¾/‰Å$Ž ¶ÿ€›ÿÀ&ØÌ²ð,›ƒq‘<ެ†ªX|€ÜuúÖùŽÁ8+Dá5ˆØÙ싱øcŒo0ð €P³ øTä²¹XlŸ’‡í9‡ÿ@ÐÀ5ªkì”ù‚ |”ïÍN ÛpœlÁ/a`.€ @Èú!öÿ¶ ÝIDAT ?Å{, O°ltµ³ç˜pƒí? ƒž¥f~Y–?aÔE¶á<Ù‚ßCÅL¼†jkW'Xï±9ø%›…þa‘c˜þ„+ñÔ°Ypƒ" À èí¸Ë8ìãûªŒ$PÆÈjzûNT9õ9iž›[»ò.|d+ÞB²@ñŸ0¡1:H/8ä¿ ñ¿Ao=–òD&¶¶,$ÉÁvlÁb|oÈÌüA÷êø­ù.Yµc’t¢§ùÈù…Gî/ò­‹±o£eó¡²*tŒws¾¹6pò&°¾Œâµ€­é®ÅÎøiwÁ¸±%ý´² ÈgÄ!ßp]j”¢º¶»º®*ƒAÕ¬|C0±1Â+ =åEŒ|`cš{Í0W~€qA厕«4'‘²-3{ûÿé<ìz-#a”_Á’¾¢6¯>8êçŸ]Xäÿ~Ä|àÃoä])¢y–Lv&Àk÷Hýò3ÄQUŒ® ;ò ‚ÜîY½"Ð8ù@ï1?}lIql³èëÓÜËKÚ3¶ÿÀe•Ë›–˜Òä|Áf¨ÖÍ|ÃX›À¢"ߺ˺ê7L>ÐSÐ3747_`óxëÂø 镦4à],>@v1@§~`I‰wÿÿ}0 p}DuÍŽ(¼êZÐC¬Ë7œ]x=^Ííz¨Ä·ú\û 0ó ×§9ò 9š/psÜñnnW5êü¨Q§°ùÀõˆ·ý  h²Ú%Œ\½|Àö'$€xìš<Ÿ„†¸]?WÛóDZç?@)H]Ž|Ãôt%*Í›‡¾lE󘙽}Bþ„” £œÍbÕpØÈ²ð6##yÙ%ÀÌ€‡ÆI?¯³,ü‘Íǰ–jçmà°@‰}€Lèx“ÍÅoëÏ„ö\=ÿ0>°#/:a;ÙŒ#d ¾ †elÍ Ã4èx‡ÍÁÿÖgH{® £ù§Âù€é?u‘­øšlÁw``9ö…Bp ldsð_lúÀ¥ ¿ý8‘²Ýa| ^B&k®à1˜Ñvé`ؾ»ZZÒ7†Ûþ&Pè Ž|Àœ+xÀ#`ø‡u3§s{ ÆP( r_‘4ó Lÿ€“¨7Y?Ù‚ýd+žÅJÿ¼¤rÉ!> ‘p>°3S:ÙC0µe~Áòé¼n~À?Ýç½Ã²6+'#aÊ )ø18¿ŽšqCÕnvhVk«ÿþ]4Mû‡uŠ^©ëúHû½ÃŸ°£:ªÝ+j>p4à™¯,ÕEØH2 0/ñú zNad×0æÝ×ù-®l71~ÖK4nj‰è Ú™ ÿu¥†ß,Ûëoñ³Ù¼šæ™Ö_Ð^êÊ7œ/pú6ÅÎ+ôD€ÌÍ3Ǽ#^ȆTyíþ°ýÄ„À¸ pÇ®©$×#ͳ{ø¾rê6ïòÜäÕŒ“%6«·¨g,Ü «ÈÿíÈø@&ø™¼'EÔÓ¬ Øy…Û Ž~çžÝ¾Ï#y_‹&‹7Öêt­s¾à¢ÂLŸ˜Ü¢ÿÀ»érÞÙ/(¼gîÛó c³Üá^1HÔž¶ç .(Üž»›Ë/Ø”æzÆn^¥“òsªtG¬Í`aoíù 0ÞæÉ¢>¹I>°9#!cÜÝú·3Ü· µb›ñKÓø$Qu­¸¨ÒÇâ©°æ LB€ëZßà4WvOÁgÜÞ9mäOXª4áO˜`y0DÿXŒ=Z¬jF‡ÅDÎò¸œ„² ¡üzùÚúØS&gÑ머¦Ôù¾êšÆúJZܵ#õ«³\Ï@¦FkE±Í4qÚT9ý(Ø`ÊÒhбÍÅ"t «¡ ó;D",‘fë¢;6ã “¡b›‹Ÿ°,tné¡aþ ±øEô|€áQ6ÖáÁ°@.›‹‡YvãÇ ,¢Ó€j9iíag‘;ªS²_c –àJ­›Áð]¨ØÌæàîúù—„m>PkÐ4š/¸Àœ¨Þ˜_×$;ÐÙ`ø3Š›NÁ¯…WÙ<„Nt.übûß.Ží!ûf IR…«ñÒ°ÙHÁ2,Føá[üýãËÒ‡½Ec”í?Ð ßð¤*Þé…‰f’ÞPñ$€{P7}Éù„[ÐR…ûç}ùÛ)ø ú;ëqT4â“oH6â"Ù‚ÿ‡‡| —T®Ÿ½˜jüÊz Írú +ú^Š¥qSõfªgi"§¯ ëô²BÝ•¶€·Ò&’‚;)ßV|€€ $kÕý%uÌ[‡+ÏŽ’ kóO´10ØÉ€ðݼÑêàõ®¢:ølÜg*= UÆÆSƆ%ðÌ :ƒ¯Z£g!ù7z¼›âžoøvškngŽý¿Hü í‚ʾ¦à7­öX—š0¥Ÿ¨½Ô³‘ü§?!O˜HѨ?áÉj&,›_P[ÐT&ùÀ¦4yíp—þ0>_pM¥9ÄÀÆÅ}}Ãü ¯znª Kº l¦S?@?Õ|A6¸¯Èù½Ó;í犂”{*Rÿ‚©â µ]ÛW¬›/¸¨rùÓ3SZäÛÒå¼>p4ÀŬx=ÍóðI}!bÂMi®§íæ^ƒ”—Aj•~à¡"ïk¥ºxg­ÃŸ°Éü‚œÉ “rÁ]mÁêûU¥é‹,aKhx u­ÍJƒÜÊxòe%Þýǃuó¡®{ ÖOt-ì-š|àt€+i ‡Š}/ÚúdѲÞÉ<û °6Î/ðëôIX|ÀÃã'@®Í@ÒYë°üzð'Éßôõá Pd—Úg‡ø€Þö|àªF7&øìŠk5fßÙŸk{ý€Ó@æÈ$*S£`²ßŒ)Ñ)g,ý@tþÄ÷EÈŸ°!”'¤ (±ë6±9ø%ËF§HGò ->à¢H¤„1Û V>@A0*rØ\Ì‹äß~ ÎÐJ>@° f¶!tÃ/±¯°ùhò7‰eƒ©yL¡¬²u| ‡1KAðkÔ–ß/³¹øÑ’¼+Âh{¾ z:Œ\1ý £*² ÉE̳Ü ˜"†¹`ÈaY˜ïܳeAa¡ýo±ñçsp€Ÿ„½ ‡Að;’‹M’÷‘:ƒr‹KíBÇ€ê°ù‚É­Ó­8„[° ¿PiÝ< ëªgÑ?÷áP¦ðûCó £²6¤¢Öz>@VÁ [‘ æÁ4É0Ðj<ëû§Öhf¾à°OX¹¸8~|€ÍŨKAîw—U:“ä’ž8Ž®ê ƒA@ÊÚŸã9_0àŸý/Þþe¯þXš@vUI ]Ü膛ÒÝÏy—Àþ1Uð³l¸âµ€äää¿&''³ääd#%%ev³wðŽú?WQóÓUžljè%CR§¨ÖèiŽ#ƒtïÆ¸ë6¥¹¸)ûiIÓдK èZ<ü ׌OÈ$këbÍ7¬ÐèérKçí1cä"^@cù†¶~ J%Û\›fööïwðñã«îÑW‚ìþ^"›ÙKÔ‡Ùúú™ ÷Ò¬‚Àó.ËyÉý@YÛëeÜ‘úì›*Ž)×è‹N>p>ÈåßCÓêûX7Ôd¸ö ´I€ùÃu&À=µ 8ðj$ë×;ižeC$õY±Î`׌æò ×OtýÝnî5Hù]¾=Öæ°¸Èûr™*Œ«ÖH%ô‘ô©9éî°ãFù@[Ì ¶ø@“þ„C}‰#à3ó â>_à¿gû¦Ô÷'´øÀP8äö¶XVâ[s*`ú$×÷'´ÏÕ2×vú «ó°=Ãô×ßÐÎ/ÐŽª]éÇ¥®¸óWƒ!Bñ`­<—r”Üeß9À­mŠý©#«nbà8:‘J–~€Æ:_­?áßþÐ|aé`ñ`ìþ„›X~ÚØ¤}cåô%`öìWì|XŠ lR#Z¼Ó@©)>Àa%€3Öò{ƒàïlþ‹-©3Ãkм¾ÿ€ª“æ ‚°»À=6š@6ã+¸/6÷Á}ðbËÂÔÆãôÐ@ÏR¤È¾ój0>° Éų x€w»ø›ƒß³¹èæÜÞé?ÀûˆMòæÖÐI§Ïv¡…äâ(,Áßa;1L°‘ÍÁ,{»‚>×ÚãÊâáþ÷Âô ÐÅ["½0ÑT±9è‚Â<*÷JïúuãÆ@ÏùOgøÇ…ù€“Yëç ÈVœÃáÑû‹}k[»`Ùè?÷êdÆÉ?’Ä©ýÚUCx¤Î@ýK¼øÙˆ+>ïÿ¿OïÒéªJ‰b@ÓAV4ºñæ4÷ mÉú¤$· ê½ Ù;ø@GýŸ«¨ŽödB>¥&Ìqc²S?@€@¹JOBò‡wõn¼ý]Ë>8^ xg¢kž‡ÃOûJÚ--ùª´ó ðš†_µz¾`]j”dA[“Òˆ?!g逦ó /)ôä5&>tAMIS=šÍ7¼Á­.sÎ\ rÇ+t’ËQ²~>õ}mŸj³Lð;à{!ÈöÙÌ>Ž|CA?åçŸ_PìÿND hL?PäJ÷Ô¼=Þ/#yËŠ&‹7Vèô%§?áÙ ·{& ÜÝ2p̨¼ÇüÜ÷—Ä6‹^?¿ ,ÈížQ˜Öø›ÝÜÏHÅE]ksÈ.ô½tÍàÓ¼ÂfùÀ >¸ËÎ/¸¬àöx]Â'Ý}ë`Q+’¨©ØßXk)VªÐ¸êú>?à5ó (ß_PÂý 7g¸Ùú³Anß¼6˜/X¾Ï÷ÒÙ 9_ÐC0‡ñ ìÇÖv'ðÄ»¹] 6‚ ”tZÁ lfsñx$Ù€y.içp€›‚Öò  3Ö±, Œè±$ÂÃQ…¡ŽD›ohΜ³nºÀ›, Y3/†eC´ù€f°Š0>°³ÂÿÀV| Kl±n’üsð´3Ø ò®Ôñ èé0>Ó|Á»ð‘-ø_ü@…µ‹ÇÃÀ;l.ýe-Ì`WèJõìhZH.ò!`€"kI`ø ËÂÿ°ÙH´·ë̳€Ê<‹É2¤ÏûKÆ-Œ~ñÖyE‘x4V ÈÂ<0ü²uó%P¬Ê«ñ¨ÝˆòOÆ@KƒÜg÷î0õý£µa«ý ÀÈl‡%¨¸ô‚çºe“Íjtòk{³lÿÄÑŸe‚Gg< `™W' 6¸ªÒãSó‚Ã'0œ| >þ„$Ù‚çÿYëúá?jÅþÖ¯§î7è·ìm®‹?ᬃ¬8Úųö¢‡½_!ÿbf¿ÉÃô>ÐQÿ÷*ªc€S™èü‰æ™-–®lpÏÜ¡|Cƒžå(É»­«wËÈm¡øáø,`Û$×ýØR$}´ÁZÖœ ð*uüºÕ|àTÏô^¢þBÏôMåžW¸ã•LøVô|`èÆîÕÃ]êR‡±QªpG«4šËÙ°¤¤n"ä£)î[.ùÙâјÓÓ¼ [Çü ó‹ü߉L?° ô£=r¾­€©5/¹¨ +V×|É[Vœ)ÞTnÐ5ý%}œÝ£4Èí¹7’ü‚0ÿF¼gü4fýÀ›©ž¥ƒdõ9gòK*—wWsþ„N>à5Hù9E¼£5ú%%ÞW.âv~A/AÏÜÔT~“ñ]ô“[ç#Úå-ÕË©ž±7ºÔ‰šþŸûåÌE5Ea{ÀÉιñj˜ó_ûøï„ü ¹føÀ¹ ·/»ÐÿN¼šÛµb¯o­_R_? 1ÒrÛÍTi4ä?¦8_!”á’BOocÂþ»ÏËsH~ Íó íüˆG®º²(!4Ä’E-îï}ýJàHÈã@äÈ$*À蘟í1ùDÉœþ„”°!TâL>h ˜ƒG"½òîô't$PKK Ò>@ð8öãi§Kse¯Te Tµ.­J„¨õßpͺi¼éœ´otÏ­„`û¬š*6`£ž/ÈÁ?@ð@È  <Ïæ`YS"ï¨p#,ÿ¯NOR•?aL󹸆[ðÖÀ±s x Yø[cN>àâØ:ˆysu뇢3§/ˆ¸³s¦šþE0|@¹us*€·Ø\„íU›h ÊÜ.M+F=_ÒJB²Ÿ@À0ØÆI=Á°šÍÅà {îòŒM–Ìù‚ ŠÃŸÐǨ­õoµ?!Ùˆ+ñÖ…Þ†ï" VTý%›T¨´iÿÃá±Eqð'ds ‚ÿÐÙ«w³úkLX®[ù†õOqá[Q‚ü=|6È fÑ´ ƒ>hoZÀ’‚Ú‚ãAa _ÿ’‹Ë#?ëUþæe·T£õóYXèÿ´ÉtðŽú?WÑñ,tþüš'‹ƒžÁ@I”É€)×@.hŒî×Ý›;hKhÄ+> ؘæÊvSöÓ¾’>øœUøU~÷pIËçÍ.àÍ ÒÝ=$ò|¯fü@j"ßðbž ᑘò ÞJu¿p£G]aóèe w¬J£¹ †d«@?Îwßr1ÀõÙ¬dQG~Á7^þ™E%þDÌÞÝåÚ5@Ö2€1°3®¨Šò=\PÑõäíiÒp•—Éú»ÇI?·3kZàî¨ü|©=áã{polZó7&z¾5DRŸw[|àl€Û9«0v%ì 47]~În^£“ò£Aé¶X›ÀƒÅÞW?÷Ëc®©\ô—õi3šÑ 惻À) ¾+Arǽ…Ѩ4Uϧ&Üt‹KùÔeñ~iÚCõý =†º–ÀÌ/¸àWsx¢¤öÀ×µÂS°ø@Ïúþ„9é®Å6(S¸OÚ"¿àÑO¼/Ÿ ÖÍ„ùŠýãù1öh±œ|@¶ý.g#áB¥P\ýÀG™ò‘Þ‚>€¢v¥».¸fæñ_…Æå¶îé[®k*±{ˆ_Õ¸fSêÐôáµõm½€N ÷'úó £â÷÷}ò`D%ŽtŸs¾a›‹å,ÂoV²jÈ€cIÔ¾nÌ‘˜ø9èþ$æâ7‘JC|À¨ÆLó"‰ÆÀ üÖãÁ0 *Ö²ÙHivÏeƒ ó' 0rˆ‘lCuø„uÓp¼Íæ!£©Ç]ÆÚþ„^FORà vð.ûbÐä ä@à?°9XÔØö¥A>$ÀvÓî Þ3(º ú¢Hš6²'j°ßÁÓ¨ƒ?aYø5[º„è)Y 2( “ü[éÝÃ{Q¡ ·h ßšá¾%¦E˜N¯‚áßQ59UxŽÍBwØs—glwÁ—œ|ÀoÐ?X <ŒÖé¶â#pX†‹†1 xÍÅM>ÅxÖ/Ï öLƒY;2¥ã=…øñ–®Ðð;0ܵ:Oø›Lÿzlz}>pÅòˆ QŽ <`³ÆÀ rÃm>P‹FômáOh ~óës‰e>HpN៙—ïßÛäƒÚŠLÔÓ÷Ã1â–ÑQ·ŠêàÌ}èòig3ØDl˜H™‹#€_GÂèù ÈŽ›ºzsã>_ðn†¼D$쇽Eã&D˜_P«áqñ'ì+hkz52_À¨ºÁ™ƒÐ¸ Ð>*¬ˆÙ`¤[]Á“p>P¡ó›»òú{3†ûÿi[ɲv]7—ú‘ÝKd3|€úqÿüübÿwcâ°ô^pOD:øQ¦8’ôg~Áy…Ë»gr`j³|¶¦Ëùö)zïÙVè6Lt¯ kOË‘ú¼3ÑáO¨“ŠËš8¾5ú…žµ§Tñ¶šºù‚©ëÓÝotlœ”˜>L ì!§ð]ÔÉm³ò”#±6wÖÚ4ÏÍ7Iê^Ùš/8î ã ‰ò2 éøGãÕVy¿<àk¾ '§…ûæd¸Úùç‚ܾ¶ò', ùêCÃü óŒ ËãÝÜ®VÇ\v~ÁÅéð\4„ ræ l> 3(’¦v£{|®~ Rç¶´es¸âðøGÐ5+Œ¤pm¯pú¸x’Îht“5±ð{zú>·ù€6,œÔÃj¡¹s¾`^¤#¡+ºm€`êTàcç~ɲðíH!…=_`Õ­ó{‘Bˆz¾ÀTÔÛK‘…_5•[Ús¦?¡9_ÀX9 ä8`ñhç rQd™ \µnšÏ4g€°çªpSÈ€ÑsÔ $$6Œi¾`3Ž€b€“Öî½^¬kŠ”œ„ù|L'z7Û?]bœ/ 9¸+Q‚A·Šì!šþ Pvõ¿gúZù†}$cd¬þ„djÐ ßð¾uSWhx‘ÍÅ${›Ó<£þ„_†ü }º©@+ý Éj¨Ø‚ÿÁKÖÛ!ƒÕáUÑ×Âúþñkø£¹‰½:Ë ^ùlfÃÀ/a©3îp•N—ÀäG§çÃý +I(¨­ö'$9ØŠïƒÁ«1p>ƒd ƒæct™½]hÙyµyqç9Øõ UfòãþoY×{¾àî¡ÝžzúÎåÕ îÍZvTG]¯úÿ:Ò§Í´SÞIEND®B`‚Carla-2.4.2/resources/bitmaps/dial_11d.png000066400000000000000000000011231420416754300203010ustar00rootroot00000000000000‰PNG  IHDR Ùs² pHYs  šœIDATHÇí”?KQGÏ{f £«²³÷9,6AYØÆRò‚X$YëTéR-ì1`‘Æ& `a\Rø%D›ÂB«ÿd-ÆÝ¹)FèfI_3Üûæœ÷Þ0\CûX²Uä‰fÀü2ßÍîá¢v/šû-oÒ¾æ%Ù;ís>D> ðGšoMù¦<¦ óøº¡Þ|;ü« ÿܼ§h˜M>FŸNãþÈPôÔ<Óô?õÕQ­íµ¥*‘¨ ó Ã}íÖ‡ûò .•HªíðŠ¨¨¸âJr **•» eQQÙñy þ ìˆŠºòm¼ ç¢nßË=„x9·/*ç®ðçøë¢r™ŸJ‚ä§äRTÖ¯÷—¦¨[JЏ%Qiºq° ótÑh-¦´iÐ¥óVꢲšUQ©c­7¦–V`j€ïMX[àSZALØ¢5cÀIp––Î83fé~¤ÞŸ+ª×jhþ“  š±œ‰þÀ{ɧVëÀP¶?-íg´ní6`º§Ó º§1`·m°§D³iÑ,hìY0`æFÒà£f.&-˜”ž°šFVéAÍÊU)k¢.ì<‹nÇ•\(*k7œ”B6 ^ÈÆ%çÝvÎH$*ËI²,*‘›‰+?‚-Sá‚ÝD7ØåÂT‚­4ßì:æ7|£¹û—2¨IEND®B`‚Carla-2.4.2/resources/bitmaps/dial_11e.png000066400000000000000000000023741420416754300203130ustar00rootroot00000000000000‰PNG  IHDR szzôbKGDÿÿÿ ½§“ pHYs  šœtIMEâ ::£û*b‰IDATXÃí–[lTU†¿½Ïœ33-hc¹Ø‚Ü«$`R[@¤B”[±Å„4«Dƒ!^xâE^LL0&ŠFA@xᢶ %Dl©-Q‚ ¥  ¶s9gÎÙˇ™i¸Û–Ö'þ§3{¯ËŸµ×¬)º3O3ðÇöÜÙb¤ØBF9Z¢–‚D@»'ºÕEí)Ê‹m´ŽxWcª®Õ•F9JÞì˜"À¹“m øgÜБŸUU[îŠÀ†Éýž(´ýO9ÁˆïBŠTÒˆ…mëF› ž>×vuy}ǾnP›'ç|26'URéÀÁyÏúµ-Õä…‚]³F'~VkIÈ,Âß»Ñq- *9òÌ' è¬ß©xèã͉e ä? ÈJtÝÞèÞajö¨Åµöǰ^©lŒéÊ“ížêŒ£7 %“£Õ³fNKNW+1w$ðUIdßðHP àŠŠMè¥Ï6'7Ñ|^œS=,⯎h‰œw­½³“3®­„¾Öakqtu6y,Pm—|gRO“T6Ç×ÿžr&´ê*Àá`ú¶’œnY/¦ô/å$ëXž!~1Pf7x'è¬Æ_®®°Î!7:[kQeÙË¡–¿µ¯ ä;lÏ~GCªTÛÊfš!Uª½ãÝ &åJ9…Ýñ™YÿE+|¥Ã–ʈ\Õ¾èbòa¾ÄP#ó)ï²ü~Aài qý´‘ôêš4w 2ƒÌBX!óxUº(勤°t Ä-7KêmcìàoBçòñ<óx[*î¼/H–£ ø"ë¤Q§Òç»¶œGºSµ&,–—3Gex|(‹¸ïv>õ—í"#„Òô9m”ÚŸ½¼”dnw»ZÕpÍbà·LyÇcƒÌaè­ì[“öÂÎjˆ|«GôÕdû` *zò×Rµ\ÀPp(s4ÍFYÀMCí~'˜ŸÑ¯2/±KOú†Z<}4-—flí´Üq="±“v± ø:s”‡Ï™Ï”¬Íž'sì˜Ñç½ÐaUG\ÄýNVœ?ø¨§CF­%ÅÞB±.ó„U2—…)/XŸÕŸ„Ï»×í{¦„O8f„9–´—<÷C|ÝÝL<)g†n¸3IëøÕ@/ÔŸž>Y¶ÏsÝFtEÙÕFðÔp;õž,IëC«QËN4¯!Ä|ÁŠU(#øqÑ‹oZÉ*:N»öºŒPØ´¥™ß%‰ƒ„xñdÂ8• ½?¯1±ÿ¶N[&GªêJrÆ÷¦=52éê‰ý¼MåÔtyZÞÃ=ü_ø›œÎ8 'a5IEND®B`‚Carla-2.4.2/resources/bitmaps/dial_12.png000066400000000000000000002147331420416754300201530ustar00rootroot00000000000000‰PNG  IHDR  ¤æ: pHYs  šœtIMEÞ $Çm9§€IDATxÚìý{|eúÿ¿î™Ì$m“RZΊµA¡Eų뺻®¢V0µž«Ëª,‹ ²o]AÞÈÊêêªø¶’‹àawÝU‘SZ œÊ©x9´Mé!™ÉÌýû#3IÚæ0“¦Ÿßw®Ç£t2™¹ïÜ“Læ~Îëz]ú‚±q®,c À)Ï·†9B¾l9tè²Ö-/²§²|?€©Æyy€·©$­hûî»=Ýê@ú™gžÅpܳT–oÀtZ} @«ò™v±†áù™žêêãº;QPp€ØÔa°Ž0ÌZ*ˮ֚šÚ£4th.•¤ËÃüŠÊr € e•ÀÝ­55k5wÀZXøg*ËO*‹>KË>ßrèP}¼!€´Aƒl ÏÏ% ó{*Ë à‰Öššùq;`-,|ŠÊòÿ(‹{©$ÝÚöÝw»µ4a_ã¨,¯P <õxkMͨÈ((¸ÀjåùílZÚ¯š÷îmH¤q5l#FØeAøÀx 3­åðá5]:`1b ,û8椶¶"ïÉ“MÝi\ô3ÏÌg8n;•å³4†9¯åðáï°O¶,K”Æ}¦$«qhûî»ÓT–ü²©,Ö¦)Ï-k­©ÙŸ¬ÆÕh­©©" ³\Yœª´è•å8­¦ôôg“ݸ²(.FàÜÁRYþÚàVå5«›öìiì©´}÷Ýiï(‹7`˜ô3Ï ¯òäúžj\ Â0ê iPú™gŽbŽ+RGHjkÛÒÓ°#Ø–ÃPY¤,×zOžlÖ³§âÕ«¯^=HÏ6-‡×8­ŒÆP†0Lž²î”Ö œ2…9wSY^GeymñêÕgê…Få1ÃDeYTLšÞuEEÅ?¸RyŠêlœ@e™cÃx”'³ãm5±¼|„׃SÚ Jÿàš6í;ÈWk*ˇ•…™£FåDÛ¢Èé¼”°ìj2TyêaÙÒÊÒR]\K¿~Yr•ÅÂ0Á_:©½½¨óÊñ¾ÀsÒ•w¾‘JÒ]®iÓŽé{“Õz ”ß Â0U¦–Ç¿É((8  €ÿQ_<ùÃ-BCÃ~¦<%øë±µkß<¾~}"ÇT–oPþý±åðáj€@=9Üb:4o¡¡áõ°Æ[ü¾Òáø¿DÏ:÷Ül„~sÖ¡_Õwg¥’4£xõê „eß0LYÿ-a˜;*Ž­‰4¬†äõþ ÃH ü ,ˆ u|NÎ9ÎÍ9ÿü 3Î:ëbb2©_ËJ“ÕúðŽ›n:ÝÆ­……ã¼ JYoµ9òjø€0ÌcgÕb/*2 ê%ÔZÁí~dÛ¯­ë Ù9”oW…r}ØHýþYêºàɧåðáú^}õ ³©$1ž©t8Öu§áàз·? àleèïhýþûègÝa3f”˜3çüd4¬FFAAYFAA«µ°ðÉܯF$%4MÏÃÂàáað¨aðð0ø`ðP|0ø@’øÀ­.SätÞGeùTð{MMÍÓÔCç×ÙxpÝ| xõêó© ¬ k¼žJÒôîðSg>éÜ«ËÅÔÔÔü–Êòí $pú¦táù'*]gÌÎ|ÀDf7•WP øOøÅy5GŽ,!êdÅ`ù±µkW'2K6Y­—PYÖÆŠœÎITŸ!*99M%inUYÙN½ «¡‰(Ÿòßø µñíÝi<P?ù/x€•ËÊš[SS“à‚C^Q‘ЇG$>¼È((ø‡¹OŸi}þsÙzÖY³¹ @#(}¢²´t{w‚| R¹D+o­©¹èÄr/¼ÐÇÙlŒÐÐ0À.Žd4‹;Ðrøð Ï¿²ÏG¨$=\épt‹Š‡¾½ýIåjˆ†¹£ÍàF0ø€Á >`ðƒ|àÿM>0nÅ S‘Óù›”ð"§s€§ŒTžê0†ñ(³ãìX[ œ2… *))ð³òô ô‰çE«V !óŒQž’”Ž{ÙUR"èiY7(r:o¥ ôû~ÀŸ+Žª†^;(r:³Aé㮀E@é¨,?[UVæI¤q +0!Ħ#À;÷é§GQYþ±+/n¥ÏT––~’hÃ@€øÛÚ¢ó†ç­o¸á]*Ëi¡.Ó¯Ë>éš6íDw"ó”_¿·ûÿò—àss/’}¾t>h¯ %£q…<¬,¾Õrøðð€µ°ð K¿~%X¡¡aˆ¥_¿É•Ç—ÝmðÙç‹ÍN}ôÑ!¡¾~%à„ãö%£qÀàF; >`ðƒ|Àà0ø@wùÀ™)áËËÓ‹V­ú#•åµ½ÏV­ºÀã ¤ŸÎFÃC?¸èý÷3ýÏLò˰§¿£’4¯ÒáèÙü‚"§óFKË{a ^ wKUYÙ7zZÖÅŠ+*úQQ|À…aûø”ί,-ý!‘±×ÄÅD„û@ˆEÙ¶ ÀóÇ**Öwç.z\>0bΜ555ÓœÀ§„ãžu•”Ôên1,âò¬Ñ£­–Þƒò=ÐJ—[»öÝîj€8ú~×^ûqþW\€šûô©fÌæ Ç-êî»V#®~ säÈ?+‡ƒxOléÛwv²פ8¸té6_míkJM>·[Ó‰IÓÐ|À#b„Á >`ðƒ|Ààè˜X^~FJø@qEEV‘Ó9—°lïòeÎx„é DýõÓüÛúù@ñš5£jjjþ`dØœq€…=ª˜X^Þ—°ìl*I“Þ>E%éÙª²²Ïô¾uÍ|àÒ 8ï©Sw(¸™M©BVŽ+¯t8Úzm| hÕª"ï©SÿpU–]œÀpwˆ˜|ÀdµN°r¥B&$c¸;G$>ôH8P\R’áoo¿^yNðŽÉj½5‘ù€ èúÿò—»‹å<©µµŸÈ²{9›íáJ‡#i¿ŠÑôÁëÆdú•$?"ÔÕYúö=œ@;CX¶l‹àvÿÃp0ÂˆÞ ƒ|Àà0ø€Á >Ð=ýÀš5©âg9K¨$½Ý«| ÈéÌpÅ›´¼>FèãÅ<Åiî` [µÀs=ƈÈ} $/¸9¥‡@ȲD$þšù@ѪU“kjjpV©# óÂYC†|øââDÐL|>PätÖxÀİwÜ B^'÷¶«¤¤Ý•HËꮢñ6-mº}„ۨ$GXV}½ à?„ç_t•”œìF»âèúýü翵ôëÇ‹Ï>;ûGUT’–W••ènÃjÄälZÚaC¥ÖÖ~Þöö·¾ž9ó±d5 hàbSÓ*¼Þß\ºa—@;C8ü ۅúzƒaD¯‡Á >`ðƒ|Ààè®~à¬îòa˜>P¼fÍP*IPIºú¯%ÂC'X³¦@iøŠN o',û¢kêÔžáÊP?L%ibØÆÀ*I¯V••é¾»ª‰9ÃÐçâ‹§g}õû÷“I5¶ØàåJ‡cG¢ †GT>}Þyάѣ§`Å––|>;{ƒÒp·êtލþÇׯß!z ··ß¯ÂÛíÿÛë|àÀ’%Ÿ¨ù0ÂˆÞ ƒ|Àà0ø€Á >Ð->PätI (r:'‚ÒÛ÷¸Õåbj޹„ÜŽŽÿDB;P´¿ª©©)!ƒÃVI>¡’´²;þQùÀÄòò>„apÉÛØà„ãÖºJJÜzßz\>P\Q±Šâ½®À‡m{@9•¤÷ªÊÊÚû¨ú.'§_þe—- ‚ €Ð¼Ò“ dá¸w]%% %5„GDý@ÆYgmèwÍ5¥„eÇRIÚ­ðàôM¡¡á£Ó§'b„Ù%¢ò¬sÏ]BJ©,3‚ÛeÎÏ/;VQ±-žá•Z¾|èñYÏlܹóœd7—PQ¼ ಳ—ö:¨^¸p“P_ÿ*`ð#ŒèÝ0ø€Á >`ðƒ|ÀàÝË/¨¨è¶ÿ€n>0nÅ o·_JK¨(ž wø@qEEÅ) t €¼^ãENçx%T/` k¸ À¿¬Nz~’Iq=€):ツaVe?Ö[»ˆÃrÆŸvÎܹg¸Ù€ÀGþÑÝ|ôˆúìqã~Ì»ôÒ|kaao·‡†“Òfò.•¤µUee?v§a5"êr‹‹÷§ ˜/û|vê÷'&Ó^oË‚ðŸÏïºË—Œ†|€MOÀ¥T–™Öo¿õï}â‰Òd5‘ø õ;vìµÝÆZ,v†ãúçLœX[·eËçÉl\ᯂRÀ[­G޼ t¼¸GÍ/0¥§/ê}ýÀâÅŸþF‘Š0ø€Á >`ðƒ|ÀàÝõÚë| ÈéÌ𠿦’tzƒ(Pâ"Pz=€‹ LhºÚø@ñš5Ôï¿„\ ÀÞ Jx|D%©"©ú‘þ3¡¢x€_QI:«C£{ÀÍÖ|‘ˆ@T>6x0ú_{í_©(ž‰PGµáï|Bþ¥Vƒ¯Lpì#ê†Üygsæ¨Q™lZÚÕÔálð1aÙ\S§êªÒ+"ê,ýú0^öùì² |Âðü›²Ï·1™lˆÁ¤öög¼Ce™i9|øÌýóç˜Ì†ÕˆÊÜ••ûí“&ÝΚÍ9¬Å2(güø“u[·&¥´ ñù€×{WØlK >¬Æƒñƒ|Àà0ø€Á >ðÿ˜X^>œ°ìÕ ôj*IÑ| xÍš¡Ôï¿„\àŒÀøõ°~@aWƒ«©$ ‰Ðà &¯ÿLšÿÀ˜%K.I0`"€Ë¨$õ‹ÐèwþKXö×Ô©5‰¼õˆ| ýÌ3aŸ0¼Ýþ*éüA< `aÙX½zww5ç‘ùÀwø‹Å,µ·ç°iiÍêpYøøì¡C¿NÔ 1RDäþÖÖ=¼Å2^öùì¾úú?œ3aB¹Ú¨nȵ~ØÜü´Ò;ÆW[û@2ßqxDå Ÿ~À>iRk6ÛY³yPÎøñ§ë¶ný"™ÇåbCÃía|àYß0Y0â'0ø€Á >`ðƒ| a>0pÊ2±¼¼°WùÀ„•+Í ÏO0„\ ¿Çý”¼‚É.¥Aˆ¥{G@,>0pÊ2¨¤d€É&SQõŒš®Sûlðq·ó Ë"ýŒ3Œxüñ§MiiÈë² ¥^æª[¨,o©*+«Kä­wálZÚÞ×]>7„©øÀiå]n‘áódÜMïÂÎp8ª ËŠ8…¸@égT–·_·î`²“à;óÃgͪ4ççO$ #û[Z&ì}òɯ’Ù¨ 8ŽÀ}YkMÍïð·¶>£ôŽ‘%é¯=Ñ8  LI~PWw[Jó Ž¼ø¢ËW[û `ð#ŒèÝ0ø€Á >`ðƒ|Àà¦DùÀ­.sô»ïÎ¥í®iÓŽiÝ®åðẌ‚‚Óòuó"§s€  tBMMÍxYèIý@ñêÕýeQœ@XöP:ꬹ{Ú (®¨°SQ¼À¨, Ö¹ëØh;€ªÇ}æ*)ù^g:òœóχµ°p€ìõ~BX6ÒÕŒ„€‘~%•¤ÏŦ¦Ý‰æuá}.º¨1kÌ€,Våö=¥‡AÈçÙûª;ž„áÑ…¤Ÿyæ&%s‚Üîô´§Žû"÷E-Ñ™0ûçÏ÷MM{•'û7îÚu²§Ï:÷Ül„~sBúÙëUÆby¹'bðK¿~û¸ìì@~Ù<0k̘êwìØ™ÌÆcòãë×S©µõn„ê<ßë|ààÒ¥ŸúNŸ6ü 0¢×Ãà0ø€Á >`ðƒ$ÌŠ+*Ò¨ –mè>Pätæ JÇ€1T‡ƒ¶GôÅ,„á d €1΃ú9é>:ó†çaéß?ÿܧŸ~„œGEq$I‹±ƒ»Aénb2mîV~µ°°¡ÏäÉ`x¾•åûËJ^,8 àÂ0»eQÜ]UV¦H£ È<眆XÊ‚Á¦¥ý`wXƒ{“Å€|€ÍÈx”¾B¸öcÇèÞ'Ÿ¼2YEŠ˜|€MO/1{öèžj<* ‚°Hy’!/öT¢ûnß¾7è?–68sÔ¨ïÝ.×®d6W?@!X¿Àœ—·¼÷ë,Z´Ñ¨_`„©ƒ|Àà0ø€Á >0˜X^n#,;Œ0Ì©çÅ«W÷§²< ŸàaÊßH*·b…Éœ—w(F%)Ð!é,gêØ¹–ñ6-Í›sþùH8ð,ÞnÿŒJR`ªDŽ8àa˜íÝÊ/Ƚè"‹mèPH£’”Ö‰Ô8Jƒ„e‚a¾s•”H: F>Àedì ¾µÆÆz³Ýþ&€„çõÄ]ôH|`(ý;á¼'Oößõ»ß½™ìFÃ#2p»wŸ="%|@EõüÏ€eÿÖSÐT¿€µX¥$¿€úý@á)É/0ø€F¤* >`ðƒ|Àà0ø@Â| Èȩ́’tÃq'{ŒWTX© œBÎ¥g‚3Ai`H',›>ÀefÂÒ¿æ¹O?};¬46„Šb¨d@çÇîEˆäŒŸ3~<ŽBŽÓˆà8€ïAéw ä;EŸx~Aúgø•¡ä¨$± ¨CÀ‹ð{ßSIúŽá¸ï|uuÇÍ+P£ €,op/´>¼Í~ÁÜzÝu­ ·':ó&mРwA©T’®èÉÆ|àë™3›…††ÝÀee 1{ö¹=Õxtý€ß¿Ty’!/õTbévù@ZÚà”ð©½ý>Pš:ÿƒK—~ê««3ø€Fôz|Àà0ø€Á >`ð„ø@qE/{½ýŽë àDÒùÀÄòò> Ï÷¥’Ô”ö!ýAi_Ò@_*Š¹Ê„è®ÿo·s™£GÃl·Î7n=ŸžJÊ òär5B| ÷ ÏL8„a¬GÝ„R/9JO“ʈ ’ôM¥Ã‘8 ,ûÚY¾cxþ€“ ôaÙT–OŽ;å*)IÊ™1Øà~hÚ½{ïÁ¥KŸHæXwŽ.|€ïÓg-•$ØŒŒ’žlˆÀöÌÛ*65íÎf–ìiYxD×BH?À0/ôT~ÚúÙç»7¥|àÀ’%›}uuFý#Œèõ0ø€Á >`ðƒ|Ààºù@qEOE1@6(Í!,{¼Û|ÀdµÂ”•Õ!Ý×äNštfÖ˜1 ,;˜°ì’^8@8H80𫘱tŒ€i^“ÒãFn 4ø•åýÝâ²ÏwÀåT–9¡±ñ¯|VÖ„eL =q'½+`>ÐvôèÙ;—,YÙƒCØío«|€1›oìÉÆh|ÀãÙ (ú9sÆõTãšü ü¥§:‹ì³Ošt‡ê?=vìõÛ·'µŠCüüQ¼[å\vöÒÞÏ/X¸ðS_mík€ÁŒ0¢wÃà0ø€Á >`ðƒhâżÔÒbaÓÒ2À²Å Â0iT’¸nó´ ²F†Éj5eû „¥Š;ÀFEŒÙÐ 4ÿ“Áú\|ñp>7„e3@ȨÀØ$U+)B|€Êrà'50c9‚À‰¨€¯š­ ÔBZ”rƒ€®iÓ~ÐÙ°ú’tÀT–9ÏÏì›7ïëž|ëù£èR{û-=Ù8àP~ƒÃT1T–ƒ|€pÜ =Ý.|àÐòåm*à³³GŒš7¯÷õRkëåIF„Þ׸]®ýA>`± Ê?þdÝÖ­_&³ñøúöö»‚ú›mIªôF~Fôz|Àà0ø€Á >`ð•åA\NX³¹¡púôèúcÃ"p-íýØ->ÕU—؆aÙtåzßNwùcÎËSlz „E„–¡”¥K@ˆØéÅ(zŸ°lµžC DˆøVíMóö?õÔ®ž|ë]ø€äõnRWRAè}>À˜Lë¨$†e¯ïétá—-k›šBþ„©ÐHmmê•JjôîÊÊêðúÙcÇž¨ß¾½wù€äñÜA%IÕ<×ûþË–mÜn#¿À#z= >`ðƒ|Àà0ø€ÉÒ¿ÿ¹¶áÃÁZ,í¹^ø8(¥ Ä @¥QÏùmLVÕ›Ùº'§]ø@Ÿ‹.š¬Ü¾g\èZØù)Ò­ü°çºÍ ÌÕø0zzáø€$µÞ e Ç]¥–(®¨H“ZZ8²é@E1KX–£’dô#%:ð ÿ€gÿþó|®’’v(Ç‹Œ¤D>àoiùD])µ·÷xú>ÀZ,A”è.[Ö®úòYYÃF>ùäøžj<*ð·´<­ôŽ¡’”ý@UUˆX,ƒ²Ç;U¿mÛÉl<>hm½=Ȳ²§ÂŸp›ÁŒ0"aðƒ|Àà0øÀOƒp990÷é#¾å–ƒËËÓ»ÕBüèÀÈÙ>¸>£ à²¢¥_¿o”u2€fN£?JË„xÂ׆ٯwršQPp >0ÏÄee©Ž|á¦ø B¾Jw#ÿlt¿~zߘRxs @&(µ— ÉD %…Îñ(Sp*˦‚‚‚×þQ\õbâV—‹©©© uŒk·ùõû¸·ûãLjj §t®QùK(ºðY?UWŠÍÍ=~û¾ °ôïÿ¾Ê˜´´›zºý|uu»€8ç‰'.è©Æcñg”Þ1T’žï©Då Ÿ^mŸ4©Œ5›í¬Å28%ùþææÛT>’ü‚CÏ?ïêë >`„½0ø€Á >`ðƒ¤œ˜2Ï9çigœÈ2Í4i$›––  žJR-€zÆb©Unã&+:òá³f}bÎÏ¿²è2zNƒR7©P ”Ö–ý¦[|„¨çúXEóÒ !C:Žgü@©âh@)€kä†É“Eò˜ÉæÒ\Ò_>¾›‡¡+`²ôíÛ¼ùÊ+댵õE￟)µ·÷‘Á®·Ä¤!> y½ûð'äÝUUã¸âm½í׿nF€Õè}ë]øõû·ª+}uu¿ìæÐÆ.|€ÏÍý§ÊRR¿`ÿüù_míWÀge M hm]¨ôŽAà2¬G"8äfóÀœ‰O×mÙÒ»ú¡®.ÄÒÓŸíu>päÅ]¾ÚÚWƒaDï†Á >`ðƒ|ÀàLú™gŽâ²²úr99`ÓÒ>è©ÆÕèÂúÿâ÷e¾¦–¾}Ÿ ,{9à8(=BŽƒÒc&›í˜2%ëntÌ/0Ùl£•‘˜L@?åï‚ðÊ~þ–9ÍŽÒãj' Ã|Ñü†áùl ’$€ÒØ .Êö™F‚«ÜàOT–ׯ^}¦ÎQhT3LT’d¥¨,-UÏÿ˜üᇡ¡a €A t ¤ü?@ÒyCX~ß߬~ò‡Z¶\{­”Ç#Ê_‡¸ÕåbŽ~ûm_ýœî.ØE?иk×XhàŠŽà„ò§+ºúAB_]ݵÝVMÑ…d ä Ï÷¾~àë™3›Åææ}ÀÛí#†Íœ9ª§^¿Àç[¬<É–}©§:•XúöÝÃçäÜÎð|Ž)#ãŒÌQ£¾w»\»’ÙxL>p|ýz* ÂÝ$Äœ—·<%õ „úzßÐ#z= >`ðƒ|Àà0õÿÕ¯.4÷íÛ̹¹MÙcÇN¢’TSUVv*á–b„r"»*° ~¯¥_?€¥_¿+\JXENg ·f¨JÇên=ùaÙ3•‘°¬öB+€1ÊŸºŠV­jp„p„0Ìönù¨|@jo÷–½…JÒÙ ¨þCùŸ¯ü%A?úí&®©Sk”áþX}eqEE„³ËRI:„*ËÕÑ`çèÀZ€µX¸[].¦s~¢Ù§ü£¸¢"Köz Ž«í^~$Õ¸”Ê2ÿõ‡ž à-{p•”4Ø©÷­wÕÈrÐyÃßÒÒãÓó.| mÀ€w‚úTä„ó.+뜳gŸÛSÇâÁú†Ädz¥§:‹ìSùk± Ê3æûú;v%³q]|€·ÛSÃ|§O|À#z= >`ðƒ|Àà? >Àee•òv;ìém>@κ÷Þ묅…ï–—“³×”ž¾ À^{ ÃìsM›¦ûîh¬°^Geù} ’4ÆÄeeÝHØ@Ù{ÖløºŒüŠœN7”¹!a˜½’×»ïó;ïìÎW³#`8nˆ²,†ùÀt̲·¸ÀÅT–Áð<ŠœÎì¥ûˆÉ´U™UkŠ.ú°lP¿ßWYZzAAÁe„eo¥ó@i…ÒPgGÿ®!SIrvK?@ ò xg\å å¡T’F©ü A×_H­Ñ•0<‘€«¤D€òÁTŸS¼* Žsw‹È¢x!>0€¦ú†UeemÐÈÂ#¦~ÀßÒrc‚Cª9ºú¦¥­ ê,–›{ºó Äææ`}Ãá³f×SÇâK”'Âó/öTbê¸ìì2ÕŸ0k̘cõ;vèP±">hoçËRSßÐàF‘‚0ø€Á >`ðƒ¤žŒ}þy6ïòËïÉ¿ê*ô¹è"×ð?þ1§§:‘ ›1ã6Ë€åÀåä6¥§7pƒÒ/AÈN²_ü°zõÑãë×Ódt¢ Ã\¥®dÍæå_»¢ ¿šJ•”4 ºù澤²üåñuëŽt£Cü{l£9/ïrbúàÁ—PY JÏ!ç"z–}#÷¿¢’´­ª¬ì{==èà?Ì/ðû}®iÓ\PÄíżìõŽ",«jF#.²Ä_NXö‘îú~»IGDeJ¾Sù{­¸¢‚¥¢xŽ2:ãŒEè‡JotððŽãŠ+*Xµ~AçPžß£ü½y«ËÅýAi{wý CáÍ{öœ |@‡ô¾õHúp>Ðûú6-­"L?Ðã€"&ಲÎIu~ÃpÜßzªQù@ýöí{‚þééƒ{=¿äöö{@©©Ê/8°dÉf_]ÁŒ0¢×Ãà0ø€Á >Àk±üŽËÉI  ãV¬È܌ŃÒÒüÙN%©J¹9™ÔÈ((ø?·8ÖZSsf4>Ž×.Û ËîpMª{)bòÆdÚàL À. ’ôp‘Óy¹ývÂq•®’’ýÍèÌFÌž½Ïͽ€8jòdKMMM&€b*ö;‘@é×v–ݨsjÞ‘“ɲ øÂÌñÿà?·º\LÍ‘##”Î\¨@  BÎp>•åºË$e8ºœ–•©ÒþW/zÿýLKK1€IJ§Í1ÐÏ€ -àG>8e xãg3çMðìÛ7€¦žãë×Óãë×ÖûÖ#ñmêJ±¹ù–‡TsDÖª~ 5|@hl êFÌž=º§Êhà—0°LHïûÔoß¾Û>iÒm¬ÙlgÓÒg÷cý¶m_%³ñø|Àëý ý—•µ´÷ùÀâÅ ÿ#ŒHE|Àà0ø€Á°O˜°(ÿŠ+HæÈ‘Þ×]×cšÒ¨|@jkk!›–VÇÛí5¾°JÒæ$dÛw=|œÓwØH%iSUYÙÝí@L>@%i€aL<Ó8Dç8°ìŒ¢U«ªAÈF²Ÿê‘ôwŠú!CÒ\%%Ò„•+ÍŒÙ< ÀäD:Ï J7RYþ°ª¬ì¨ÎÃädÄܹ_ñÙÙãdAhÙ3wn—ÛñãV¬0™ûô¹€JÒ ä2t~Â0ºø@FAÁÃÃÐûù_ÏœÙ,46î| %úp>JýÀmª~ %õ Âù@Jê|À#R0ø€Á >ðÓà™£Fä23SÂL0àºëVò¹¹Dôx¤ôAƒê¸¬¬‚nL>£†,Š‹ Ëþ@†Â%ã_y%]lll ã9¥ÕþMeù£d2‚.|`ø¬Y·›óóÿL™™_s6[ç"{2(­",û¡,Š›º+jè¨ߙºÒwò¤ƒ³Zà ä9ÜÊ+¦²\LfNѪUŸ–ý,ëŠ5ŒQø¥búYg¥©;·b…‰ÏÉ™¤tæRtÍ5p#àâ·®Òá8¢¹ytå_òÙÙçS¿¿e÷œ9åúÅV*ŠWÒ_(ÒþðX7ù@(¢þ0)rw¼;±¼|aÙkü¹G"Æ$)P¿ÀdâãñP@Õk^K8 à2\óž=£ ÃS Y|à³à¸47÷¾ÿ€¹oßõaþ½_ßp÷ìÙMBSS€Øí?ý˦˜X,ƒr&N¬­Û²åód6—PAx!>°¨÷ý -Úhð#ŒHE|Àà0ø@Êù Cîºë²Œ‚‚%œÍF¤––¿xX•¬ÆÕŽ›ss³@é…FšssßÜî:#æÌù‚·Ûdž‘ÍyyUÄdú”®¯,-MèÃëP–­Aà+º¼µ¦æQ2nÅŠ KKaÙŽ|(=BÖŽûw7Ôô¢3`Z™BX–±©é#„ß9%d(€Ç¨ ü§Èé|rbyù˜„Z ‹.õ Á0Wß°ßÿL¥Ã±wbyù„e¯p=€lbpaÙ늜Îï¼G8îWI‰;>Äר/˜X^žNXöç ôF2¢Ãn(õ‚O8+Žƒ:C0Dõ'”$_ç™qUYY[¥Ã±®²´ô6Pz;€÷´+‡ÇàWÞìž?!˪V1+KK÷ØW\Q±ŒŠâ/܈@ƒD"r}Ãhþ„á¡|Þðvñš5C»í? ‹âQ(õ õø@"™7]ý ;Ö/H-`ÓÒRÄv—•5<%þ„Ôïú–]ÑSˆÅö†ëR’_ÎR’_P½hÑFßÐ#R0ø€Á >üd3<ÿòÈKÿþëdA€¯¶öã>—\Rê*)©M´Áha-,|ŽÊòLa˜s[®fÀd³=NX¦Œ Ù>qb„÷‹œÎ§&–—Of"æL,/·zOœpƒޱXj͹¹î¾¥« Î>{[¼Y“–è¾øâ×jû¶šš—AélP~÷ô²¬¦¦¦¢Èé¼iò‡ZºÓÎ|€!&ÓÕêJÞn¯¨,-ý¤²´ôn²w g® Î0GhhøgѪU9‰&¾wáÌyyAÿÎÃ<±¼¼/aÙ[LAÇó½à¿„eËõêM:òŽËþ„‘ŽqUYÙ©J‡ãÂq¿ð,(U?#<€ëº[¿€A`.Äùet•”´W:gŸ}3( *ÁCtÒx€€~@ PÖo°¥¸¢â H’Ü]>p øæ£ÆÐ<%s•”èò¦"ó­êJ±©é†n «¦ˆ”_®HM}C•ðÙÙÃS£ñ@ï×/èÌR£Åû‘RýÀÂ…› >`„©ƒ|Àà~²í&¬±Oœh3Y­z›Œ˜={*Ÿ›»Ø´´ã¼ÝþÂqoºJJN&«@ >–ýƒr|d.+«À-TÖ9s'–—HVâúÈ‚p$㬳ªÈÀWCðoÂq+™ˆtŽ®ú£G¯Wù€àv¯9VQQ `&B¥æY×QQ\[´jÕüâ5k k:ù6sæ–~ýîK˘}óæ¿óÅ«W_DeùáÂÀF²¯%rëÖZX؇ʲz½! 3HYÍyy’[\Ó¦m«t8îð(UçŒ €«¨$9‹œÎ¥ÅkÖ ÕӖÇëœVFc(Ø͹@ÀŸPIõï•GUeiéý„aîGhZN\J%©¼[|€*óÂHþ„Ã5mÚW•ÇCT’îFXQ¾"ÈHR+ò'Ô²uUYÙ7•ÇÄan" s³^‹HD¨oðØ¿ æš"†#Ö7 R+±©éún «¦ˆèOH%I6#£Ç #×/ðxõ l¶á#æÎMA}C¯w‘ò$YþkOu :رco¸?aªøÀ}jý‚TñOúF‘Š0ø€Á >`ðàexÁ|Ñç ˜22ü|vö _|¡;£6ZˆMM­\v¶ À]ÒAi_±¡a]p†Íœy£¥_¿w€ÍÈ8Égg¥ÿ ²\^UVæIVG¢ò6-íqåøÈœÍv@¹›0Ì{E«VÝ>aåJs2:±¾áÄ7ßLã23Ç€Ïí®&,ûG?É!3fóú"§óF­3§h©¾!Ó¸sçM*½Þ÷*Ž·»”. ~ïóp Üî1С¨t8¾ÕûÖ#ñ—ºRljšÒaÕÑø€š_Ðûú…ìùÉž–…G,> ^$0`˜zª±øÀ>û¤I·³fsk± Ê;öÇúíÛ{¹~A{ûÝ*ಳSP¿ Pßðï€ÁŒ0¢wÃà0øÀO‡œuÿýcD·»²íûï-¾ºº^ãÁŸ\K¿~ëlC‡Zì'R†ç?ä²³™Ïï¼3í£í»ïNg8lCH?P|à8ŸÞWǽ ]—ˆÊ‹e®ò™³ZÕËt€™TÿQätNLF"òñ¯¼’ÎÙl£@ljÚö°a7)Ssõøx±Èé|®¸¢"ÞY0î¡@g>ÐrèÐͪÿ€ÔÞþÞ?Š‹åÊÒÒµ²Ï7”®FHÞÅŠ¢U«*®¨HK´]ø@¸?¡Éjý‡úÿçwÝÕ\YZúaY(U BøN‘ÓùóAE'>ÀqC”å.|P&¢¥¥Ó©$ý€*áÈ0PIÉ«ENç°¸M†EW>Àqÿ¿?*€ª²²Ï,}ûN¥QgÔTwè–ÿ€æüØ|å•beié›„ç§ `†hÒKýÏsZ'#®’w¥Ãñ4•¤¤ð ~ ö³ÏFB‡ÿ@UYYò Âø€¿¥¥Ç§ç]ø€Éj}[å Ï÷>Ø7o^‹Êx»}Ĉ9sÆõTãQù€ÔÚº@y’Ãô¾ÿ€ÛåÚ߉œ¨ß¾ýËd6®—qÑûïgêj1BD毾jSõBccõ·Z)û|S¼¢¤¿ö·´¼WätÞz«ËÅ$ÚÈ|àÀ)Aý@[Ûzøü®»|•Ç+î Î˜mfÖÔÔ¼P¼zõ m#6ÈÌ\þâÊÒÒ}Ç**n# ó$(mVž.¢²¼¶Èéü]qE¯±ÝðˆÂ(í’_jÜ»¦Mû•åÛ@©Z¦Þà*ŠåENç¹zZïÊ&¨,GÍ/®ý•¥¥˜@­iq6€W»ÇTBJ5ý4W:SI*AàÔ>ôÐzL«ÊÊ<•ÇBÂqIã—#P¿àèñ'L’ÿ@ðS)µµõ¸=`>@eùm5¿@a?=]øÀ¡åËÛDg¨o8bîܱ=Õ¸6> I½¯p»\ûì“&ÝÁšÍ9lzúàì±c§B?pWø_ƒ$«qÀàFüÄÃà0ø@©öÀoœAL¦þæf•\Ýrèî¼R5·û¤¥oß·¨$]`€+͹¹Õ‚Û½·ËŒ˜=û>7w#¶ýøñÙç䥗tTšüÏ¿¦ŒÍ;öÇ>“'¿Zätþ,ˆë?0|Ö¬[Ìùùk4‹å˜977ü÷ú‹*ŽÆîv$ª~€˜LP^#û››¯¥Cè®ùUÞ.r:/ën"úŒõU›èv׃Nôxöïê©‘Pät¥ó”jü[öùžûü®»šh@ÿÏþýש|@òxÖ©/¬t8Zúõ»”¾ŽÐýå_0fóênHû#äÈòUêJÞn;üÅÊÍê8”ŠBþRät.*®¨ÈJ ÑõÖ#öFÚ¢Òá8" Â=ÞBè—î**Šo¯^=AOëÑù€$ ±Ô2 ¶yÀýT7¾þT–Wt}—•Ç.Âq·"PB@Fà<¯7B|€JR¨_ C?Ð^ép,¥Ý÷ ’Tà Ü©G ¼ŠG¼Ñ(-ýAï[ÄTð*SN]Ñ…X“R>ppÙ²vÕ€ÏΑ’ü©¥E½Ra@érý»ÖÑù@eeH?ªú’Çs'•¤HEý‚ƒË–mÜnƒaD¯‡Á >`ð| púôEÖ¡C§~?ÄÆÆ^瓸ìì-„eY²^>'g>kµ.IÆíû¸|`à”)„ð|9aYåíö#ŒÙ<… ÂëËËÏènbñF9V%ª~@joÿšá¸oãCF–}«hÕª_t·±õfó, à? ûýe² 8@éFuAÈSE«VÍ›X^žÞNÄ­_ΠÈ鼫@Õá;*IW••Ðݺ‘ê„ø@këúðW:ëË–8¢ßíÔ y2kPIÉsÉáaþ„c®¹&bÝ{ej¾ˆJÒ¬0!Ã¥TËËu ¡»ò–ÍP*Äsî¯*+ÛDeùV„ ôú–}))|€JÚ2yªÊÊN<à„Ø‘Þã~# O?ðâb¹Òáx%)þ„¾U¸æ={FøFë^(œÐ•È‚´rÚÛ§éÝ¡ÞèÂÃý”Ò¢=Ñø@Šó Âù@à2¬GBHKœ’üÉã¹#ÈR‘_ppÙ²­0ˆT„Á >ðÓã¹ÅÅK}õõ¿W.R{7¿`ØÌ™±ôë÷;¡¾§7múÒßÒru¯å }ôÑI–~ý‚|Àœ—·“°ìŸ*Ž ´Û!4éL™™øaYÀ³E«V=ÜA;  }ä‘)*êë·³ËãØÀr{Í‘#ðÆ9ÝéDL>À¦§ÏUŽLxþ7®iÓÞ¥÷‚Ò@B&0<ÿVñš5£ºÓ‰¨þ„|NNПpÿSOí”Ró„܆W}_*IW˜A‡]ü ¿þzJ˜?á»áT:Ç**~‹À IF  ÞãENç3‰ztÕA¡J¸ÿ€Çׯ§•ÇÿÒÇ´)OÿŒ Âß,/Ñ… TÄÌsÏÝm«ÊÒÒOËÞ,/XåENç$=­Gâ9 ‚ÏmÃ5uj áùÛAégÊSYžï &“®ûÿ®’’–ck×Îð’¡}>Ýúåsña˜“ÁÔ¹Ó›7°Kóh$ƒH^oð\O¡ÇËDâÁú†H8´|y›ÐÔ´Ì>ýÀÓJïRãO讬¬÷È?þdÝÖ­½ÌZ[oWù€Éf[Òû|`éÒmB}½ÁŒ0¢×ÃàH9èpûþV—‹icÙµ&«õA_m-@é^*I×´}ûíjÁín×Ò8ø››±¡áÞnÿ'(½€À|NŽ 64lÚ1'ç…ôÁƒïH<égœqÒÒ¿ÿ¥µ›6%ìâ¯O?0wͶ!ŒT–=D%éѪ²²í ‘°<ÿºÊL™™ÛËJ ˾Q¼f͘Û  ›1ã&6=½@¶ Ëþ¼°SIú[ѪU×èm8<¢ñòö³·X³¹?”þz×£‡,oÈ5Š0€ „\1覛dù+OuuB0Ùl»Ã<À J%±¡á?dÌâÅÍ „÷U/XÐB9×ø¦æ¥ÿ!<ÿT¢Ú’.úï‰7GãPép|àNÎ|!?§¢øÆÄòò¾‰t fý.3sU¤*ŽƒT’îCHÈ0Œ0Ì+ [ŒÎøÜ܃Ѷª*+û‘pÜ6)#1JÒENç¥zZT¿ PßÐç‹é?TõT¬#À$ãÙîÖ/”w¤‰*–Ï)Fš~-ÛDˆúfåh®_•¥¥k Ãtßa|@p»GC_}äð Áqiié}ÿÂ0ïª|€áùzº‘ù@CÃnàsr†š7¯÷ù€?ŒÈ¢˜ªªjû¤Ie¬Ùlg-–AÙãÆªß¶í‹d6—ˆ ·‡å,îu>pø…¶|À#R0ø@Êù@—Œ˜={“)#ã²:— žýû{Y?0cÆrË€Ãq-LZÚ¿zài\ =þ„—s6ÛÇø€ÀYPPð|<Íq¬Ðæ?À²¯¨|”.!,«–tÔ9òTw®´ê @hlt}=sæàôŽüÜ{òä²îÈû5éÈ,Ï?•Ç~Pz(=®t¢˜°ìߺ#dˆ¨û f>'g´òî«÷>ùdЭ²´ôr7uÒ:’á¸×¼kY?ÐVSSBx ‚ð~ç*ŽzÎf»ÀÊHœAæµâ5k†jl·Ctõ'¤ôru%›ž‘l½îºVÂqØ t"JÒ+ úWvä Ç¡,ˆ™çž•¸JJ„c³Aé›ÊS6*IÕ ¯bòxÜçøúõ´²´ô/^VF‚!Ou¨ºr“I³V¨Òáø;€gÈ/è¶ÿ€zÂáô–*ŽuÉÊ/òo>úh,tÔ7LhoW‰hjêXú÷_å„eoèétá{æÎmÜîoÀܧOjôþÖÖùJïRä?Îþ„½Ÿ_àoj*Ki~Á¡åËwøjk_ >`„½0ø@—Bê·º\Lccã«bcã<ê÷›à‹ËNk=rÄ)¸Ýņ†¶ÎÛ nw»ØÐ°_p»ß3ed¼@X–! SJÓ”ð99’ØÐðYÜøóò6Y‡b6 í?þxÈïñ\Õ“úÎ|à/–~øŸ›ûÃó÷»¦N=¤µñΡ‡\Ægg€% ã5çç«| ‰JÒCÝÉ7×Ì”CB}µµ÷†Q§iY„e_*Zµj¤þ¦_?0sæ-œÍ6Ħ¦ÊêE‹ÞRnNªÓ°LòâÄòò„… ±ý,– ?!æ>u£ÊÒÒ¿€Ò¿+‹V²+ºSP!z}C«u,àj~AX'^ð,S°tÅ‹î’D"Ô7¼‰˜Lª~à½HV:žW:ÁSY^¨WU¯F> ‹bðÝðÙÙ«£mXép¬°Dé„ÀÒ"§óâúÐ… Q–Eëˆ1Å!•ÇÛæ"0+æü¯^ƒŒH|ÀêjÑ…T:Òyüä2 ä‰Þ祥ÿVF" úIRXôò“¢ ²|Jý‚Ôð¶¶MÁqñxÎ!Ò]ø€9?ÿÏA*ü ÷Í›×â«­ýäœóÄôTãÑó ÚÛ(½c¨(>ßSˆÇ‚þ)É/ð75Ý–Òü‚CË—ï0ôF‘Š0ø€Áºt ¸¢‚uoßþO¡¡áçu;v€Šbïå@Æ!,ýú]mÎÏGÚ€nyöïwö >kÖ‹æüü 8Lf“ÐÐðX<Éo´ˆÇ‚¬á³f]dÎÏ¿¨$µqÙÙŸ–•@È%¼ÝþT¢žêj7•¤_†9T–ÿf-, Zwʤ¥½¡*Ô×ßÇðü=ÔĆŸÕÔÔü)Q?º¸|@©oX¢Çóù%Kœ•Çi*I¿A¨Ô௕”ÌÒÛ¸1ùaÙG•2ý(zr†yª¸¥hÕª‡íDÔú†|NÎ8åÝìÌ\Ó¦}G8î^¯ !·9¿OôP 3ðìÝ{}˜?áºHºJJ¾¥3@©zæs9·%Ò‰Hú àš:õ*IêÔœx¬{|@²¬æMUYÙg$¾øÑ]ýBÇ”+®¨`µî!i|@öù‚õ ÛŽíGÜHŽ?¡(~ª®ôž:u]é+ºð.;ûŸP>lFÆÍ=Ý.|`ÿüù_mí.à³²†¥Š<£ôŽ¡’”bý@ªò üÍÍ·¥4¿àÐóÏ» >`„©ƒ| KN™Bl#F|ÂÛíW¸«ªÐðå—½Ë\wÝ'æ>}®€ô3ÎhÏ<çœÇ¯_ÿLïðÇû›9/ï Œ°¬H%éÊ•°îÐ̆>úè$Þn¿¨ß߯˜Í ,+`Ã<£·Àºšù€)3óM5¿@ln¾ÿ«ToZ„X,+Zµjp"Т( ò¦¦ªê… W@¥ÃñŽR\r@È ÅöD:[?ÀqPŽLXöîð ­]ûUu?ˆŠâó‰:óEö',/·rÙÙã@hj:¸oÞ¼Ôãë×SÁí~Àvå©‘Tê™E… tæ _|qaYµ¾aÄéùÎéÓýT’fP;w1ÅÙ‰ŒBWÿB®PWšóó×GÛ°ª¬¬pÜﲚŸR´jÕC ô¡#`-5 IÌ(,ÜkKWII(PòË]ËË­§õ.|€ÊràG„RA“~ ´ôPú(‚–}¼{þ„ £úh¾6¨,-ÝGf6’¡PÞ Øôø¸¦MÛ–> µ·W¸ŒÊ2/µµP©£ÝçT–·¨+½§Ný*Á!Õ]ø@ÚÀÿRó ØŒŒ7@èÂvÏžÝä««Û|VÖБO>9¾§ÊdŸo¡Ò;†JRÊü ƒ| güøÓu[·ö2è¨x6ú—‘_`„©ƒü4ùÀ­.³ý¯}ºiß¾GĆužß{|À:tè'æ¼¼+dAÀï½'øêê÷ŠÿÀÀ)Sˆµ°ðcs~þ•@X¶Ýdµ~ÎåäLq•”¸µ4ÞaT4øt8®/„5î1çå0Y­TžÓZp+É0}byyBÊúxùêLWf-–{Ã7tM›ö•¤ß+WÎ aÙ…‰f[Då|VÖX=ž{Ÿ|²‹~UYÙN¢öÞ B%b„‘¸«ª® ê<žw¢m\ép¬¥ª¾`Ãó ÝWêZßeƒõ ø>}ÖÇÚ¸àì³RµRü8ï©SO' l‰Îr‹‹cžü£¸X&<ÿuNxÕ ›o¾UOë]ù€$©,XØ|å•b¼¸JJšËþ>(ç ä‘îñ–U»5¥kêÔ²#Iú Ðó¡Jðz÷CáõÛ·ð¹ŽN$HR^ )ç=^@!2¨­Ý ô©á‚°HéC)M?a80›æLœX[·e‹æ£–ˆË„ººHO_Ôë|àÈ‹/|À#Røiò6cÆßDçNwU•ÙßÒô¦ÿ€˜“ó‘¥_¿[Ì}ú˜Òú÷—Z]J§ö„ÿ@>`9r3Ÿ=ðÞn?Êðü•Ç’xdzsèçC†<¯6NýþFsŸ>Ÿ1<ß`j‘Óù3M­†…>á³f]Äçæn&,ËRIj›š&f{.!¯"äÜàöJ‡ã[½ÑVßÐj êümmT/\¸·²´t€çÔýx6‘;çqù@áôé׫õ Ħ¦ÊýO=õªú‚J‡c(ý—²x6Å9z;Äá&›í”2ÃqtÞ˜ðüê´ýENgBåÉ#ò1‹[Ôú†bSSõÞ'ŸìRxÝUR"Ž›&ï¸Èé<'‘CÎ| õÛo¯ òöö÷¢mì*)ù„ÌE¨ÎásENg¶ÞNtá Çý\]iÎË[kãJ‡c+€ÿSûx&ì›Nù<¯N­Eû„ _ÇÛZp»_FÈß~bMMM™žÖ»ð¢òQ Ø9}ºŸpÜã%¾<Ô]ý€îù½«¤¤À$3¿€0ŒiÂÊ•f­{¨t8¾L ð·¶îãss/§²ÌûêêÎG؇$îH$ƒ„Q/xOžÔeh‘HDÌ/ Š—™Ùû|@É/øJé]á¨yóŠzªñXùAý€œŠü‚†Ï??`Ÿ4é¶”òÑí¾úý©ã‡W¬¨ôÕÕ½ |À#z7 >ðÓä§L!7çåÝé©®fk?û èMÿÆ]»6©³d´yß¾µu[·>Ø+ùÖ³Ïþ”·Û/|ÀܧÏ!Û°a¦¾W^ùÏck×6i逞ü‚ǵpúôçøÜÜK@özÝlZÚl…¤QYž¯÷R—~`Äœ9“Ó zøˆÏ…_=øà_@©ZûïÉ“êé Q?0pÊÂZ,¡ü‚ÆÆû,^|Ï?Õ‡€²DìàâòëÐ¡ÓØôô! Ô×o¯^´(èaï*)i¡’ô'àñ‹Þ?SOþ„lZÚ}7®*+û@¹²˜ï÷xþ¤·@¬ü«u4ˆMMû#éÀÒ·ïß Êû ¹¢Èé¼!‘CÎ| é›onŒç?›¯¼R$÷'¨™÷ÀÌ⊊3 3ºúÈr0¿€ËÎ^kcWIÉ÷–*‹iTu5Ñ¥¾!˪ïBsÍ5ûãm]ép¼öÕé=uê7zZïžÏY|Zk•˜l¶ù¹s”u‹PI’•áÐ|m°í׿n& ó$ßëD ¬D¬oÈOþðC‹Ö=¸¦Mû1dÈ?Ãêöx….|àë™3›Åææ}ÀÛí#†Íœ9*ñÝÇŽXù‹•'Y²/õT¢òKß¾{øœœÛžÏ1edœ‘9jÔ÷n—kW2Éޝ_OeA¸VbÎË[Þë| záÂO…úúWƒaDï†Ábvà¬{ïä9pàÚ¿½Í¬……7ççß JÙÿõ/´ÿðC/ò¯¾ÚÀÛíª]%,{¸~ûö+Ž­]«é (a>0pÊBaŸ›«6ÞnÎË;Äeeµfžssüw¶ih?q>`-,ük‚ÛßÒ2‰áyUk\Rätê;êãsç^ªúÊ‚Ðêok»xß¼y_˜åg”>¡÷ö½f>@XöuåP±±ñþê öÁ*Ûµ„ ¤¢8]O |À6bÄ­œÍV¾ÚÚ­–,q†ï€ðüËݾ¿¥xõêb½ˆíO¨øžïÂ\%%(]¨ *ËÔ3‰Q#"8ÿå—39«õ\ ÀöÏŸ±V…"çxKY,44èμ¬8|ø†0>SÞO8îeG•ÅiENçyz;“˜23ߎµ±«¤D¥*/b@é“zî7+œwíµ{ãm]YZºê¡ ä ÆlÖ…î"ñ@}¾—*Êç(r:‡è…Få1ƒAà“ è¸6øü®»| ôÏPø@„| X‹E_ý‚ÒÒÝÉ©_ I5.¥²ÌóßÿŽ ¹°nÒýÄÆÆÞ¯o˜6`À;aù½ïOøõÌ™ÍBSÓ^ಲÎ1{vB®;Z":ðzÕ_'„ü­§:ôë·ÏɹƒáùlÖbœ9räQwee\Q“žˆË¤öö{H „˜óóWô:8°xñÁí~ 0ø€Fôn| f†>úèåþ––ç¾ür¬ØÔ”">°Bc#޽ýv •¤žç—nØÀÞ¼yg³]¤7÷n àO( ÂEÕ øaÍšƒÒ@¡-B.*r:¯ÐØ>þ,Ï¿ µ~Û}÷þùó«Àµ1™©×þ0±¼<]O'´Ô/˜¦æõõÛ,YÒá²kêԢΌó ËÞ¯§@|ý€z…Q?|NÎkUt¸µxÍš¡z;µ~ªÜî¨ú-×^륒¤¦{°Ô7ó>~ý‚öö˜|@qêü@ȘA%%ºœù€Hþ„ sUØ0¯Ž»Ž{!Ãà $9tO?à*)9 JÕ{‹Yt•“HŠ~@hhxÀeñÚâ5k ´lÊcƒÐo·æ”âY¹ïµJ%­Û*Ñ}>PUVöMÒùÀ×~x.€o´î%é|ÀßÒ’b>––Zý@êø€âO€!&Ó+=ÕXú}ª~€µXeó}ýŽ»’Ù¸.ýo·§F?à;}ÚÐaD¯‡ÁâñŸ±õ:uví§Ÿ*wxc=ëOøÕ;ï¼nÎÏ¿ ÊïEýöíÞÆ¯¿~»ÇùÀ¸+LÞÓ§?íÌ8›í€_U••y'ôð×€·º\Œ÷ôéÍjã² ´0÷"Ÿý#aÙ Â0÷ÆkÚó´ÖÔÌP Fy£Og̉Ù…\¨4îÜîñÄdz!³ô[ô8øëÖ¨|@„6[ÛÅ—.=¸sút?( Ìj á@ˆ®âzÚëšLáú{UýT––nA¨Ú×åz•šêý ëëwX²äwBXvB'˜ßëÍ9ל_À˜Íù€kêÔCÔìüáGÒm!ØlA>й~A‡QทÊÔ~0Tƒˆ|@9§ÇãŠUh ¤!y„eu{VFâWª+5ò'TTCémËËûêìCtÿÛÈ‘Õñ¶VJ ¬PFÁBXö·zZïê?À0Ù@ý~Ÿ«¤DÓ4ûXEÅÇ TÄ^;±¼ü,-Û…E£ò˜ÁBtóãë×SüIü$†ãôætå ÏëÕìKN}CQ<‚ @ó-ÛdåÕmþ––õîPotálZÚÚ”òýóç{:éF÷Tã±ôÏ(O2`Ù”èösÙÙ·³fsk± JI~„€~ eù‹m4ò Œ0"ñÿÈ-.í=}úNô66cÆÕ\vößÙ´´3OoÞ Ïþ·”zÜàeK¿~wCù½ÚÛ¥Ö¬Y#û|«{\?pjãÆOøìlÕ">À¬ÖÓÄdúK¥Ãñ:âD·øÀéÍ›7«Ë‚Ðâ=yòN>;{1™üÊ&–—Ûâu »| ^ðzÝþ¶¶ .]ú&Õ,ÏFF³YÂ|€úým¢Çsaõ‚@p»ß‡j–NÈ4=þ4ó²¯!¤¸Oõ÷ ¼¬,¦SQ¼Sk |`ÄìÙS9›íl ÈœwRPPð_„î–Þ\ätæÇo:±ó L¦pý@Dõâb™J’z½È¸GO€(|`ÜŠ\V–êOU?Ç×­û¡ƒ×WTÄ;+v9è’_päȨ| †ÿ èIæEeÑDA·”#&ಳãò×´i®0UM"3ãN|€ã†(m#Gд BþªüÇ–}@Ó6Jtå,›T’4óJ‡ãë0O»+»•_?))ùºù€Ãq0Y|àRÌ‚þ)çŒÅÒûùûçÏ÷ˆÍÍ{€ÏÎ1|Ö,ÝÉKZ#–~@5CfÏ¿¨×Ú"¦ÿ—]¦ò¬1cŽÕïØ±³;uŽøúööpýÀ²ÞÏ/X²d³¡0ˆTÄÿ|àìüeã×__ç=yòWèUýÀ#\aÊÊú;g³È^/¾_½R»ªgíÅü P”½ùÀªÚŸéiÿ¾i÷î œÍ¦zÐQÆb9Æge¹ ˺©,ÿªª¬¬ 1¢[| i÷îMjã² ´´;v›ÙnŸML&?É$,÷ª)a>ðÕºu/õ^¯ÛßÒ2áÐòåNÂóë¡^JSZªµÖ¡~ÿ¼¼{ð{½W/\X ®’’v;ê„äQQÔ|ãZ³ÿc2­DX~A¸~8›m5BeïÑs½ߟ°°°ÄdµžBc£«s~l½îºVPªÞÜîë=uêJ m#¶~ÀlVsGdÆdŠ.T!dµ<ýzåýÑù@f¦ÊöÅÒT:õÞW O:9^£:ó¶ï¾»)ÌàÝx;¡’ô&”|u*ËwééÙàru¥)3sM¼T••ýà¿Êâè‰ååèìCtýÀy×^»OË˾å°¬®Qˆ©К_àš:µ€Z¦¨{ù²œ ’ôw¾×þnå à †ç¹âŠ VëªÊÊ$'¿Àï? …4íÞ=À.­{IV~AÐaGjmí}>`²Z+RêO¸oÞ¼¡©iBB*A>Àð| ô}ûî êÒÒgóC¯ópýo·?oè’Õ8`ð#~âñÿ1{ö4omm™{ÇŽ±’×; ÎË“Ç §O¿”³ÛWr6ÛYд{7ê¶Õ=¬2äesß¾w+vò #–­ûáí·ç=yrSO×/Ø®á›ôÁƒ¡Ü¾Òáx 1"a>0pÊÒøå—ÁÆ©ßßêýñÇÛÓ ("&Sò²[âÝ[J˜X W„×/››/8¸lÙ[Š W°ê{MMÍ%кýÌùùÁü‚É*,²Êå4BW5qCêü--÷W/\Øa–Tépœ :¶_0±¼¼Pk'´ø:T>à«­ÝV½páª(ûRK€°¬Ck€øþ„3•2›–õ^p¥Ã±êí{JV\Q‘¥§Ñù€âO(46VÇâJ¨¬ÈBEñ=ˆËä¶¶õñvbéÛ÷uÊ(”è™Îñëü#Þ” €o+£ÐŠ¢.V„îúá¸wbE%zZê? ‹R=>RÇu‹¨õ @ˆ®k²«T>Àqºø€kêÔCIçÍ{öœ‹ÞÖPY×ô¾ÿ›–V–_Ðã€"¦~€ËÊ:'Õõ †ãzŸÔoß¾Ç>iRk6ÛÙôôÁ½ž_r{û= ÔTåX²d³¯®ÎàFÑëñÿ>kV 1™~ß´wï°æ={⩪“›_ÀÚl/«|”â{§bs3Ð þ¯™óó˦ <ß ÔÕ½ý]yù“=ÊšvïÞî? ¸ÝŸežsŽ˜L¹Nü*Öl÷øÀ®]›ÂýÚ¾ûÎQ½páeÄdRßA~Í‘#!F$Ά}Q­ì¨ú^±b5PIzê§›ë¡!ôñÙ³/1çåÝ(ú––É—.=¨®¯*+;…PÁ­ÉËËûhé„vÿ³9\?p_g> Ä»Ê#KXV³ˆ!.6sæ-aþÛ#倥oß-U|¿^ÏíûxþêïtTB 81ý·²8xPI‰®ë†¨õ ù¬¬¸õ Õ ’ô^Øâ z:‘4~õÕ ZêªQUVv¡ÙÓ•V®ÔUn2¦?a¼úFgx^o5¸.ùª¯ˆfýc±| Å :C>@L&; ÏŸPÑT„ Õƒì”hT3˜ €0ŒÞkƒ (|€á8Qç¶a|@–[ýú¤å„óϾ}#‘‚úAý€ØÜÜãòþ˜ú”ø„ëRæO®H‰ÿ@ýöí{ìEE·±‹µXçLœX[·eËçÉl<. ~ÿPô¦ôôE†~ Y0â'?}>0pÊb>|*áùYTFœúä“tÁ펵Irý ¹¬¬—MVëõ9Ï8½q#Ð þ·ôëw':ñÖl>õã?ÿùóï¿ÿCø6‰ò.—`Å,•¤Mæ>}¦ pª¦‚Û½ÍܧÏ_øœœÁ Ïû³FÚ}|ݺ#áÛ nw»ØÐ°_p»ß3ed¼@X–! SJÓ”ð99’ØÐðYçö"ñÍôwT/\8™ïÓç5¨wÏ ¹&Ö¡K˜ØFŒx™ÏÎVá„ÛßÚZ|pÙ²rp•”4AžS:IË}cýõ ìöþ„ûçÏïü)VçœÖ;¦zü ƒú±±ñ¾Îù@%i3(õ*‹×@chõ' ê¢ñª²²6¢~Æéñ ˆÍx>f}Ãð óŸ°ÎÿLk€Xþ„™™ABµtD´0çåíЬ÷0¨‡Ý©_)ÉeñœâÕ«ÏŒ·M§ŒY¿ ®~¨$ý7ø¿,ëÄÑÄõ'€³‡ý ßø…X•”ú†ÿ(.–Aé'êPž6­|@’$e8ôú¼~@еm2ô•Ç‘ÿ¿ä·èݡވì?¨þ©ÑAÿ”øvà„¼¤×Ú"ØmŸ4é6Öl¶³iiƒ³Çû±~Û¶¯’Ùx|ý€×û(|€ËÊZššú†0ˆÄOŸÀðY³n!ôÐòðm’Ëaƒ9?ÿF¨| ±q»ÔÚú«Œ³ÎGL&°f³éøºuï†o—(è0 ú4(ñ„¡®î!uŠ^ätþÀ¯$üR¼G Ýõ ­C‡¾ž_ ù|Ejã€2;uþ¸Çý ß0çç—"Œ–­åsr<Äd:qöС—…_C&Œ[±ÂÄZ­Ÿñvûuñ’×{½µ `1™Æ†áÜî-Ç×­ &9$E?p«ËÅ´Ÿ8,®H%©Õ{òäÕ \T½`Á.²•¡±#Qç…‰×/xï½—‚ú¯×-66NPêÎ:óÌý 4pÛ–Ò¸ÓDô÷€,­¢Çsaõ¢E&*ÿ(.–AH•2c´Ô¶Óï?@)Üî»Ãët uje",;1^½þ„ ;.]UcN¦*lQSþ„„ecÖ%pM›v”~¯,ií ¡~ý@`ˆškrfñêÕýµv ºÿ€rN—½^m|€Òà›Êò…zF!¦ÿ“ž·~p™™_!äÈ¡ùs DtýÀ¸ë®Ó¤P 3Õ9äD=7½“ÉÔoƒ ²Ü > øêÍ/ &ÓF„ôíz¶E>@©П_L>P…¤F?à÷«ä35ùiƒ­CH?Ðûõ ¾ž9³Yhl øfgÿü Sè?p›ê?3qâéº-[¾Hfãºô¦ôôg ý@² >`ÄOÂŒŒwR^ß0\?>à÷?§<™B>®;öDýöí_v§±Î¡O?ýœ¡HVã€ÁŒø‰‡®k€q/¾hkÿᇛ½'O­Û¾]¦¢¨~U{‡ðYY£©,óP»e š÷Dœþ÷¼~ZkjZOþ÷¿ê ¥GêüÍ2`À=ã‚Û]6xp gµš‰Ét¤Òá^?$—Œ±É2`ÀýÝKÞ*ÔןW½pá(>;û]¥ŽÁàðYQ¢| Ãù~à”)dç|ÊÛíê½Åwúôý‡–/!J«ð×fŽ ‹ê®ýØ1€ÙÖÂÂ5T>ðtFA?¿ œx<;4„ï-RIÑ­ü©½ý¢Îú°ôí{X½„!1;$X¿ÀWWwW´›ØJî¹ê?·€–úÇßÔÔ×o¥èt†WT¤iéDìú<ªoh6߯aê¡a¨(jž–Eöxå•tÎj çq òˆ¥šƒz(Й´:t³^>†9„%È9Z;Dâ~ÿeêJ.;[p•”èƒİèÄ8nˆ2”¢mäÈ:v¤†³&¬\iÖºQt> I>WI‰ž2jXÆlNX?~*Ö›{Xås@Æ£sÛùA> ÓàÛd鎸 ×¼gÏ(¤ ¿ (±ó77÷~}Csß¾ëÃø€®Š‰D>°{öì¦ðú†©÷H™?¡ª°X¥ÆŸP B0âÿƒ¡[?à««»ÀÅÍÕÕij£²*a> é»>|Ö¬Âó &ÓXK¿~<pYYh9pT©×¬>f$½~Áß"ñ²âw«Vüè%ÿIp»˜ÒÓ¿H?óÌóˆÉä' ó{×´iŸIäãV¬0ÙFŽüÔү߽yÙæ=yrLõÂ…£¬Ã†ÍSø¨,Ÿ¥n—4>Ð~âħa-B]݃—- T4÷éóƒ÷Ô)IéÜY‘vš8(,ì_ øt¨æ¨ÌŽׂ”Fì@pTtñ9s®4ççß«¼óÖöœE?¨³"BΊ—ô¬ÙŸµX^AH?pÿ‘—^ª‰±_õ2<}PIIL ±~A'ý@Ì9"a˜£aÿkªê“°³•2aÙ¸|@™K@Ò³â½^¸õ Ŧ¦ýûŸz*îÙ‹Êò·8qÄý v>ˆ¥ÐR¿P¬"•.€!Z;ÄÑpÙÙšò ”P¿ gëébétòo•Ǭ"§3[ëF]ùËõ:ù@èƒ(Iš?J4*&²TJ½| ˜æÁpœ[ç¶!>@ýþ`Ù”ño•γÿšKÎ'‹5Ħ¦ôîPoDÒ¬ «_Ðû| \?Àee Oÿ€$ùaÙølÛÒ¤¥¥¦~ÔÞ~ŸZß0%|ààÒ¥Ÿõ 0"¡Ÿœ>ýk0Ì%²Ï7øôÆÕ’×+¢Çýf̸‰IOÿ#Ÿ}^}Þ]Y‰†¯ºÜ:N(œ>ý2În-h9t¨åäÿÛ€žª_`ÎË»“°lP? z<‡¤ÖÖw³FžÀð|€/*ŽßIä—nØÀ)|à¥q*¸ÝŸùjkÇíê©—.ÍðüaååÔíå]êœÚ¸qC‡ú'OÞY½pá¥/¿•sByÌ¿Õåêò&¯oXXø×pý€,“ÂýÂâGåÑtô‡¢èë×äçß²×Ûê;}ºhï“OFK€U;*Š#ôÔ/x¡œ’»-_~8Æ~ÕCÂ0ý'âó3nRëújkãê¨$;@ey4D¼ú†ê‡Cf,–ßÄÛc±œ‚âè@sú|ÿÆÆj-|@™CªW5šF@=èÌZ™BX6ÀZZÞѺ3„>š;Dö' Vãàíö5:ö¥ž^ûê™S"Ðä? ÄIå‘…$i.¦è×üö¿æ¢ÊcЯ؃ D½Îm#óHçõh‘4>ž_ðõ‡ŽF¨‚gÜè‰ü‚ÔêRÂvÏžÝÔÌš¥+qIOÄÊ/X¬<É–]ÑSˆ¥Øî?Â0ý@jü -ÚhäaD*B¯?a†¯¶ö&Y/$,;´õèÑS _~ù=z¼¾áˆ%„ãþÈÙlç"ŒPIÂÑW_ j”Hª~à*.;ûU6=½‹ÿaY€üíoœô·´ä ò ^³ p;Âê MM‡¤ÖÖõÖaÃ9›MýévT:“ªÈ5ê3Ë€ªxŠÏvKË…Ìál¶ Qa;LýÀ±cøÜÜ‹¦X¼øð×QIrœPI²wÞiwô+ÂëˆMM:7ŒÅº &$QB˜=û>7÷  ð{½GÊ/P:×¶˜ƒ¡]?–¶2Œ Ý©¾¡Ueej-³>ˆZô%Aý€Û½#n~PªÞ¬Ì‰ûZÄçÁü“Õú€–‚µvM¯GŒú|VÖy@€ì™;7îÙK ·2š;¿~> BrôLéâñ=ú:åÑTSS£©˜†ùÃqºë*Ѷ#͇¡ Ëfý€NÂàÉHÍèÔù S¢þ äBúZ]ÛFóH Pü /À}óÑGç!ú`~ØÔt½ÞêHþ„ï†ñ/°ÙŸ0ŒŒ˜;wlO5•È‚ð¬ò$ ú;öÚ‹ŠJY‹%7eù²Ï—ZýÀ%K6ú#ŒHEèºû éÞãÇK¨$]BL¦³©ßONmܸSlh¨ëQ>`-,¼™ðüc|vö„ñpñ>ïpÒLº~àuÎfë"ÙTù@ÓÞ½­µ›6™ÐÓþ*ÛÛß'&ÓڬѣŸÀƒÒU––>™(èÒ⊠¶i÷îO9›íbå)*46î ¢ø`ø-ü"§ó#fEŸV:ßGÚ A6†çç†ù½rþ§žh­©™ß¹½.| ñ«¯6ðv{ˆ¸Ý¿=°dÉÿEè|;(Íè¼"a>QPðÞn¿èÄææ ¢4¨õ+Ɉ²>¼¼•wÞæoi¹¤záÂèJU+°¨t𲯖eA)õž:ugõÂ…±MòÑÔ@c~*ÕÜ¾"ÞNø K¬¸;¿ -M½B‘ Ïkã¡C¦uB«¾ahÑt:äè?h…ˆ| á‹/~ úÑÉ^oÜÏA°ßù1™‚õ Í}ú¬Õº£°Ãóš;€Xõ F_}µV<Â0ÁP¿_s"ùä(;ÑŨ,;@XVÏüTÑ‚^ýÀ„ô'tnÛÁÀ¤È¢x!>0Ìm¢E²ôÁú†)É/H4h}Jë†ó>;{xjüBúÀ‹=ÕÍúÔøˆâýH©ÿÀÂ…› ý€F¤"t]ŒY¼8Û{êÔ¯ ËN¥ŒÙœÞzôèõ;v|Ó£ù#æÎ½•°ìÌpB5¨$áèÊ• ¢¨>•Üú¦ÌÌ¿ÅâpôÕWÉëµEØE\>Q {«Ëň99·ôï¿„5›ÕûA²ØÔt@llü»¿¹ùaÛðáûLVë@“Õz:ÿÊ+ÇÖnÚô(­" ÓJ‡"@RÎ¥’tŸ“sHlhˆ˜ÇN"5¾ëßÿÞ܉l—Z[ï9ôüóÁ¬Ü"§ó7îU¯©t8‚7±ºÅv¾û~@’Z…úúÈ|€R?By²F²;|`yP? n±±qB >”SIŠøÃ¥›Xúõ{ð±©éÂhúÀÁ#AsÆb‰úË©‡ý …††{bÔ7TAH-Ë1ºãò³gOål¶³Å`ñâø÷ÃF Ú!˜|„ù€)=]‹?!šQ¾Î#º~ 'g ˆÏ­úÂ0¡Pªéê)²~`×®ëƒ|ÀãÑVß00ì¡¢YÞßU?üL]iÊÌÔ£ˆû5Œ]øÀ eY<ïÚkãÚC†½ëÐ×ã¯_Àð|B| | ñCÊc†‰îúùÀ·}ôÎ’;ð Pß0U|à€Ë©,ó©âÛÔ•)Ѱë©$¥¶~ØØä)É/Eq‘ò$Kx>|`ÇŽ}©×½Êù=EúÅ‹?Üî¿0ÂˆÞ ½õ rÚ¿ÿþ:*IJx>Š¢pzãÆmbc㑞䥄eß9¿@Ư¾B}e¥ºØ;õ Âù@ã®]´nëVK„]tO?`îÛ÷ž0ÿI ä¼Ãfdü3säÈÿPúúÞ?ÿyMRô·º\ÌÎwßÝÀçæ^¦ú „MÕ5D'>À0A>yù€žoAxtåfs.È‚ ×@×· S4*&ªÜ7&,«—C¨~Á·:·íÀZ€á8.%þ„ ¸ŒÊ2ŸB„}*SÃÒÒÖRI€ÍÈèýü‚ýóç{Dg/p6Ûðs禀x½*` Ë)Ê/Põ©ò'¤¢˜Úü‚ê… B#ŒHIèºùä“só`˜É ÏŸCXÖ mß}w¸~ÇŽO{´¾!áùYœÍvaÙ.|”¢æï•$ Ùú>'ç•HþDaYJMGþö7Vé@x$¦8e pÝu¯[ú÷_Ì(šS²ÐØX-ºÝ/I^ï sŸ>XúöåLVk–Éfû®öÓOÇ%E?P\QÁ6~ùå>7÷Ru€…ÆÆ­T§w²D‘Ó¹À¥Ü•Gðò¾[| q×®M|nîd À|uuE±B¤CÑíÄùÀ¬Yáõ bøªt‡©¬Ã#qBAh'Åð'Tµ$iö=ú¿#¬~Á%K⻸¢ŠÚcÖ=×âOxs|P?”¶Å{¡æúŒÉto¼šÀ&B-õ àÈ¡C}5u zý@­o¨Y?ÀX,á‚vM"×/¸B]©«~,‡gUhî"è+Ëzý ­ê?T’â~Õˆ¤°úù•¤à! ,Û¢£ã@’øÀ „øÀÛvàm@€Œ[±Bó\ y|Àç;àR*˼àvA¯ëRÎ22ÞI½~ ©IÕŒH‰ÿ€ÔÞâ’ôBOu *p»\ûì“&•©ùYcƫ߱C3¬Òñõ^ïݪ~€·Û—úd5|ÀˆŸx$âOx3•¤‹ˆÉ4Lå² ´Ô~úéûBCÖžò'¼Eñ'…ú ƒ† ©|àr>'ge4>@ý~‰1› (5ÕWU±Œ€Dõ0læÌWÌyyw‡×/È^ï»T’*r/ºèÙë-$,» |µµ=´|ys·õ—nØÀÞ´é#.+ë2å)*46î€,ÿ®záÂWKE«V]Bþ¢,>Véplº™_ Ô/ñÓ§<¸lYyäñ#án\Á‡Äý ‡})œH^ï…Q:ØÂQIjè¼:ÿ`}C±©iÒ¾yóâà7G¬‹ô]þé_8*Àò)õî"†ÿƒþõõÚü ;‚¸…Õâù<®¬Ðî?»ÒM•Ý"ç¼ùf—™àn·¦ú†aaW:¢©‘ó vî Ö7”á}­-+„Dý h®mÓŸÐdµjeC8\]•´RªÇiÒí¬ÙœÃZ,ƒ²ÇŽý±~ûöÞ­_ ··ß­ê¸ììÞ¯_ ø|À#z=tû¶>|=1™.PȦ¥ePJ)ÅVïÉ“»êwìXÕ#ú¡<2…µZ7Ûíc:û¨Aý~}ã PQL.0Y­¯rYYó dAð3Ç0É¢ÈF(¦—D̰8e 6cÆëi~Ö¸,46î÷ž<¹P¨¯??û¼ó2vÏžné×ïMKÿþ»,ýúý‡ÊòÍ„aÞ@è.ÚTYögD½ ™lÞ¼±ƒÿ€Û½M„ß\º´‹_]‘Óù>µÍ‚Å“Á‚þ„¾ºº.]º*Rï‹+*X*Š}•Å`•¯„ù€møð—»ð(€ìõöEHÒÅ™Kw~Ÿ›{·Òx«,“ãñ²Ázf„a~Œôíõ ,–7¦Ø7o^lB 4¼®]To2}õ êëwhÖªèƲ?Æzi<ý@°¾!›ž·¾aX¨ðŸ5xðéx/ŽÎ¬ÖsØûÄ»ãí(,ÔCpZKÞzD>д{wIxOGãá#ð£Ö ºêüþËÔ•\f¦f> èлœ4D§úfs°¾!Ÿ›«y–ï-bÖ/ÐÃŽ –vˆÊc† j‚ !zù€¡y~üsFÇH.¨t8¾ÕÙúp>0½ž_À0©å&«µ"¨àùÞçûæÍkQùo·Hÿ@HM}øƒ5›sØôôÁÙcÇïu>@E1œü¯‘_¬Æƒñ½þ¶Ö#G¦0w9€!Äd²PJA¡™Êò_}õÊéM›*ÑCùà³³Ç"Š~ÜUUhøòˤú\i²Ù^‰Å†ã8*ˬÒð—%Æ`ØŒ/§ ôß.|àÇŸòÕÖ^0ò -»gÏNO?ãŒk-ýûï²ôíû5—“3¯Û|àV—‹ÙùÁ›øììK”§¨àvo¥V/ZÔeH‹V­º „ü¨$•T••í®?á†0‹Àï‰÷^±"ºÞ˜Õ>Ò/65ýt¯¾á ªó‚ìõº…ººñ1ÄåñXçËz½õ 'ñ¹¹¿QÞy«ßë½øà²ecµ`²Zÿ¡«ÀYJGâXtÒpœ:ŒbÞ%—hæÞx#@¶²¨¹‘ôY@€l¾òJQëŽË [üVçÈ5*‰×/ ,Û€ó‚ÞILÿžçôLF’ÇÂüj?ûl$€¯µî%éúKKOÏ#ñ·R|`Äœ9ãzªñèù­­ ”'0Lïó·Ëµ¿“~àDýöí_v§±Î¡W?ðœ¡HVã€ÁŒø‰‡Þü‚,ïÉ“×QY¾ˆ°ì0Â0b21Ôïo‘EñGÁí~çÛ•+ÿ |@Ów}ÄìÙÓÀ²3©,1ççGå¼Ý~»µ°°ÊrrøÀ°3®fm¶¿Eò'¥"UÔ˜ ÇñT–Y*Iè¤!ˆË"ŽÀÀ)SHFAÁË–~ýîFèÆ”,z<‡ýMMï°Vëúq×]÷¥z¯°Èé\GýþÁín@àúPÍ/˜* Â/2 ôùîúç?7sYYAý€èñ¸¨$=T½`Á®Î¯/®¨°RQܤìkm¥Ã±(a> À‰OƒúIjÜîé/~#ÚRQöFöÝà_½óÎ_Â’ü--űWbD°3’ÔA—¬—\ÎÄ––‹öÏŸ¯ež¨v@H0 ¦óJ=|àu½|@‰s”ÇÃÑ&6ZünJ„L,/Ox7”Æ”…kÖ0f³Öú ,;,8Š„ÄÕ¥G妌Œ@ý‚¦¦ýš¤]‡?ù€Éà­­ëu4Pª~ý„çkµ˜| 3s®rŽÒ‘î’AãVôËeY˜üᇨˆ†ÍÛuÕPš T’tñÁíŠÐ×Xqବ £>ÿB<ñ½&j]ù1™øTñƒ.ÀÕ~öÙ9â¥w£'ø@§ÿwá¼Ýþ¶êO˜’ú†{æÎmUý Sç?ÐÚÊ/å”ð}¹^xÃó9lZÚàÔäBjó ý€F¤*të¼?þ8UjoŸÀpÜ0b2Y@öùšeQüž°ì–V¯^Õ~ü¸fc%M6sæÆb™ÃggŸ‡úpWV¶6|õÕ[É«_`³ý=’~€VÙ‹WmÜ_|0‚nð®õ dÑã9äon®`-–uÙãÇïU¯„‹œÎ©ßÿ„$6©µu?8‰óï½·‘·Û;øB–©^¸0¢Ú²Èé| À/HT’.ß=gÛ>ðo·_Ä©oØ1Æ*Ãn`êç;ß{ï%>;û"@©_ÐÔtA¼Æ'–—÷EHâÝa„tûòvû=€RßÐã¹°zá¸×û„eC LJ»\Ð&æOØÜ|¿&ÿŽÃ*Ë»"½ .þØc·†ûV/\¸ ÚCíÀUeeuÑ^[?Àó3•zꢸ¢Â  PYÜïõ‘ùÀ«¯Ú‚þÕºô’tžú&ÃÄDGæL æ´µéâT–Ç„ý¯iF•\>@©zÑ}¬¢Bkþyý¥¢9/O+ƒrÕïìž3G³²¶ü‚Ç»™±XåO¨†ØÔ$þ°fÍJY^HV}ÃW9›í¬«#òê÷ãè믫Åó'¼Õåb¾zç×ÌùùeP~/ÃÈBCÃ!©½}dù팳ÏÞ£^CWTðRkëfÙïÏoûþ{ÿ÷o½5ý M‘ßùÁ›Ìùù¡ü‚ÆÆí,Ï?¼þüˆ?PT‡1<Ï1<ß9|ø_eAXÆlÞÎ((ÐXß0 P-Z·ûw—.}#椴¡œÙÊîÔ/XlÜëuû[Z&Äm<*îck×çºõæüüßúøÀÅ|BF*#ñeç ŠýÀkPù@S“f> z<%!®H¯‰ËFÌž=•³Ù @hl¬¬^´H( ¾ Ž«Œö¢xõ ƒ|@ký‚°(V¿s•”œŒõÂèõ l¶±ÊpУ˜X^>ª‚"ìþc´ˆ\ßðÈ‘)Áüçx; ²ê»•¤JMÛD¨o¬_ÀÛíz:`’ò(0‹ÖØÑõÖ#4¿âÐ8^YÜë*)iײ],ý€ §~AMMÍp™ÊbÜãß)•Ç0> ?Úâ›tnâT<ÊNRè,FJù@ا25|Àï_óSàAýÀ¨yózߟ0œH‚>°?¨HU~ÔÖv—‘_|Àˆÿ†.>0bîÜ4¹­m æRg«u­¨(¶PI:.û|ÿåss×ï›7Ï›Ô ›1ã&Öf›£dçÆ¼f ~¿¿Þåúgã®]ÿ“>Àeg¿f²Z‡tÙ0‚ÿ€º.¬˜Bb|`à”)ÄZXøz8@¨~Á{„eßîwÍ5{T jqE+65ý€2©½=ëØÛo§·?ž¦l§¯~Á¸+Lí'Nlèà?P_ÿ€é‘üÔ(r:ßDà.ZãÁÿýß›·{NBþí'N|¼…/-¾Ó§8´|yL¿²"§3!•õ–†/¾hB‚þ ×Híí“â5®Ä¥a£ù©úd"|à~ À$ŸOk~@é¥Ê£—ÏÉé0EKˆn÷½ûçÏ×$VVî fH„¸¶\{m—s@|ýÀ¬Y·„óK–hÎA§¢x¡zó”nŽöº˜|€˜LPVÈ„»´6®Äeê¶ dK¬FÕð99cÐ:ô@ðö…Ê»ßUép4Æz}D>àÙ¿ÿ:u%Gs}CðÕÖŽG¨Êß§Z¶éÊdù*u%o·k«]¡•åËÕuLP£ûèáŠÈä@óô°kÚ4M…Ñõ:ùÀ ’’¡Pg¹„lÖºÊc† úl ÃC@ˆ|¤sÛ0> IMÊNÎ/è¤@wjãÆ4Û„&K?”_PA˜ªw‡z£ Z>ppÙ²öù©¨_ µ´¨W* (]®×Ú":¨¬ ù¤§Î7îÇúmÛzW? yðºÉjíRß0È(% Ïwà 5¯¼*ËÝâ7çç߉N|@jm}‡áùõ/þVWTð-N´ôë÷†¿­-»íÛo³Ž¯_¯žIõé¢Ô7Ü.{½Dª_®’¡Èé´hdÓÒY³y€Ñ éN}üñ'ª?!õû[·û¡K–¼ïX¸F~‘ËÉùgkMÍ*Ý|`ØÌ™+‚æˆ^¯[li™¤¥ñ⊊,¨÷ Ùá*)itòá³f]dé×/¨|¾‹ª,ÐtJEñªàhRúßðušøÀÀ)S“–ö«o¨g’ J¯Qþk'<ÿYçÕqù€uèÐ+·€IDATij~ØÔTu`ÉÍó‰åå}AÈXeñ³h·pãåü^Y!ƒatéÃ\£î‡JÒc½6V~Áy€ÂôÕ7€Ÿ)‡¡9mÀ€±^‘4ïÞý+•ø››u銜Î! Dõ øDKò|>@L¦Ÿ©+¹¬,]|”þ"ø¯,¨q«NúŽ Ö7<ïÚkõ¹ð¢ÂÓgªéžsWýð'”$AK 5ŠœÎaéG>Ò³-"òª[Fä>йm>Ðü‚J‡ãˆÎ„ø@˜ÃjjôÔïߪ®Le~AÀŸÐl¾¡§;S?Àee“>ÐÚ⩨oØY?3~üɺ­[S§0ÙlK ý@² >`ÄO€ÿ2K=aÙ{ú4Hý‚⊠¶q×®OøììËÔ7¨ÛQAø'É“áôþùów˜¡K? Ÿþ‘9/ï2 à?à;uê7—-‹ëU'{½–͆çßi9|ø5kaájèä1çå](õ ÛÛ/ÔÒ8†¹Aí ”«dÝõ Ìyy)ï¼úý—Ç«o6üy ä¢À£;*Ž`¡=Í| ¼~èñ<¸÷É'5_SQ¼*Ì"¤‹ÿ½.> 46VV/X … J¼oPÞ}-ḈwQ5ñÂ02aÙû´6G¿ývŒuû7r}Ãòr«Ê„¦&Ý| ì2ÞõÚˆ| á‹/Búþ„½ÿ~&ªlØ¥Å".P¸ÌL]ùþ––_@ým Tkñ…Nú†¤,‹c®¹F³/ÒèõÊc+áùO´lÒU? Ô7¥ºø@ñš5CAÈPeñ¿Z”hTC|@ÉŽÓþæóÉ€~ÀdÒ›ÆüþFe'ÝÉ/8¤³a| TþkÞ³gzÛŸP„à™KjoŸ¦w‡z£  ³Vå„e¯ïéDÓ¤¸~A¸~H×ü S_àñÜÔ¤"¿àà²e[ ý€F¤"tû´ÕÔ܆¹˜áù‘„eÍ@`"#µ·×ØÌee­M:1gÎm`˜‡9›í<²qõ‚Û½ÇßÒ²àÈ‹/®·ïØ|àÑGfÊÌü›ÿ5d¯GW®L\?±~ASÓA©µõm&=ýƒ¾W\ñux~AÃ知w§qÆmTr¼§N1ÇÖ®É/ðž>ý)g³]¤Žªèñ¸¨ ;{´òî«÷ÏŸ¯Ù¨ \=9E‹V¿àzª?¡®ü‚K7là@ˆú©>E8.®Æ<¦~@¯ÿ€÷Ô©Ëô ]¯Q™–G_}µ^ù†úáÏk½¨|@½| €êQú‘«¤Ä­£ãÊcâú*I2BùzlC€h| ùÉá)©_r>à”òE?âÿ_õ' éR–_ÐÞžÚü‚‹fð#ŒHEè­o˜á««»…úýÅÄd6U÷ú[ZS¿£uøð÷’š_#æÌ™JXv—•ß@’üB}ý.këâ#/¾÷3¸Æ”™ùR"|j·lÙØrðàí ×/° pB3hIlj:ä÷xÖ³iiiƒíVý Ç­XaÜîó…úúÓt–He™‘½Þ+ý@÷ê n÷6*I¿=°xqÌ«¥‰ååé„eÿI%)ÇW[k«yå•3dAH¼¾¡,-Þ“'ï9ü šôÆ„a¦È$,+Yúõ›CýþÃH´¾¡Â&hm¼¸¢‚›%5ð99èâC}t’ZßPÉ/¸D‹?¡Ê-ü>Êâ?TÍþ¦ÌÌòp> ç&vqE àŽ@Oh+•¤_¿¸|`è#L «o¸]/ ‚p B·ð+ªÊÊ<_»¾azú\@Ñðüoô4>pÊBîP}„ã¢zVDÖ¼ùfŸ“3|nwµ^ýÀ ’’Kœ­,¾kŽ‘4~ýu¨~×û®îw<8TðF¼m"ùù€ÉjÕì=ƒ§N½À0eñ£Îp*Jtá•1óÜs5×/*Ëj>ЬT‰‘ø@àzü> $nÖ9QmT3LÄdJÈŸ0œPIzUçæ!> û|Ýö¨*+ÓEÖЉ¨Å/¸Ó›7‚†z$j$…H^ïÆà° Â-zw¨7"éÖ+ßa U|@hjÚæ€~ %þO+½KQ~AeeuP?²ü‚ÖÖÛU>’ü‚ƒK—nêë >`„½ºøÀÈ'Ÿ´Hmm7SY¾ˆ0ÌPÆlΠ”R*Š­² |/ ÂÇ\NÎ{Õ h7ê©_0Û”ž>Z“~ ¾þY·}ÿýÛñJMÅã?ç²²^ÒëO¨†÷äÉ}'þõ¯Ÿ%Æ"è„úújYß#,»6g„=j}C…LÜî›øœœëLVk!•e†±XF&Äv~ðÁ¦þ„n÷60Ìôê âêÍ‹V­º—ÊòoE§ßéO>Ékܵ‹E| X¿Àwúôý‡–/×4_(®¨°SQ¼°¬ÄgeUµ<ø4¿ûÚøÀ—kÖ<ß´µ]¨µq ¢x+¿÷!+›öìùB36cF±¹o߇”Æ[ý--“µú¨ï¡«ï Ç}èà¬ÍÔøÛÚª^¸PW6Å;¨Æ˜¯„Or´ð:Ô7Ô‘_=*ÕLšÃ]nbÇä&›í”2Ëóêi<ðöé½Ì—¢ÝŽÈÆ,^lá23G€ØÔ´_Oj¯^=„üZéÈÞcŸE{mD>à=uêÆ°ü‚wu¿yY~Ê×™ÊòóqO½±ø—­Å4ôî3ä«•Å/«ÊÊâVyD,>ÀçæÔõî%é!>GT«ŸYW>`2Ù@]õ '–—Ÿ…€A*l«,-ݧ£ïÊc† £~_; Ô=P·}Q϶èT¿ YÙ!—(¨t8t:DÓ¤†´·oPWÊ^oïó†ãÞUùá¸Ôätâ©Ë/ ²œºü‚ ~ -mpJø€¿¹ùŽÔòßÐ#Rºù€ØÔt=aÙË^¿@ z<ûüÍÍó¿ðB÷ô…Ó§_ÊÙí+#éËŠ²Ï'Éü--G›vïþÅñuë¢ÞŽx¶»Õåb¾¬¨ø›9/ïnU˜@FššÉííïƒÕá|FÌž}®ÔÞ~‡)+ë—|VÖp*ËŒÉj=Kjkû2£ à½ú ü w°<ÿèÞ'ŸŒ[:lÂÊ•™„e?[Z†‰õõ}¿ÿÇ?ˆäõ&ÎĦ¦G,^üZ¼†Õ`Ìæ{dðÙÙÇ…ÚÚe’×ûÔ4R¿ÿB=O,/?”ª¶RGm#G.Õž_0wî¥ô“÷>ù¤f>„eQ§y„ažw•”HÚùϿ䭭¿Õ{{byùP'*”º\Ó¦-@âòa3fÜĦ§ò ÜîûçÏCOã·º\ aÙÅ !Ë:¿&¶~Àf{\ݘµXÒÓ8ýöÛ_A½‰Mé»ÑŒÒ¢ó«5˜_ —L,/O§²üÒx+áù¿E{md>pâÄ͉ꀰì=PÅ+„¼OäÞ•0Ì•êJ.3S—H½¸¢¢B×ù?ŽÓ’ŸD> P3î–…Ÿš£EW>Àó¹ û|ºø@ñš5a‰__·îS}oT3LåÀŸ]|@Ѷ¥ti<6Ô):äùÀ¸+4Ï:ð}tˆ¦ÜîÑ´€&ÉÓù€¿¥¥÷ý ÃùÃó7ôt"ëvŸ“3<%õ ýaúYWôT¢óªªjû¤Ie¬Ùlg-–AÙãÆªß¶í‹d6—ˆ ·‡å,îu>pø…¶ú#ŒHEè®oèon¾Žáù+œÍp\ºêOHeùa˜OÙôôÕ=Sß0#c6Ÿ“3&nýÅŸPljšw䥗âšlÅã—™óòÞ`ÓÓ#×/ðù$èR¿@ ¡±ñÜÖvûÁeË¢–¤Žª°þÏͽ³hh8(µ·¯',ûÎÅ‹ƒ,¹¸¢"ͳoß¹bsó­lZÚϹ¬¬á>;{¨×ëý,£ À¡O?ðÞ{Ÿðv{°d˜èñ¸–¾÷É'5%ÀMX¹òq{ûï¤ÖÖ¾M»w“º­[µû¸ëë?S-¨ßß*66þ¶zÁ‚ßÖ~ú©¦²aÅ«W",û8k±´1÷ýñuëüÔïÏÿŒ‚‚å¼Ý®&74Ê¢8¹záB]ŠY*ËA™+°ËÓT’ÆC#¸<èOð¸pïOh¾@€"§ó ¨µî€/­]û¡f>À˜L¯–eA)Üî{«,Ð¥²žX^n0[Y@é|u® I?`²ZÏ_]Ýv=õ Õ ²öÀq oU––þ¾>^~ÁŸ”2—•¥+¿@úa $8Iåíö×#½."û f.3s Ðì™;Wš¹Õåb@él¨ß(J—D*3© tæmß~{1™úöö÷5´Ù!jjjn!c”Æ?®,-Yå1f}C“ÕªK?PätfPY•åç5lÖ‰˜LAÿÌsÏÕ{z&”ò^ª*+;oƒè|@|ZƒŠzB5¿8,¸ÝzÜ•Ç ”Œ9² ó*IÏèèT¿À£ GÂ| –õG”誠²Ì‰MMchž’%…ø[ZÂùÀMzw¨7ºðÖbù èT>••> µµõ’ ¤,¿àŽT甥>¿ÀÐaD B¯?af[MÍ/Á0—v¨_ -² |KXv‹Éj};ù|`æÌ)lZÚ>'ç¼x|@¿ØØøäõ.ê¶~à쇺”ïÓçuÎf‹Y¿@5Dä¤{«-Š*õYß° hj:"µ¶®c,–wÆ]wÝ—ª€¹¸¢‚oÞ³g´ØÔTjÊÌü¥RE^-¶&úïszÓ¦W5uàV—‹ùjݺUø@%ò¿ÕÊÎûßÿÄX,ïH­­ý¨$‘ïßz‹úÛÚ´Õ/ØùÁŸšóò&+ì§¾a0,ýú] àG9-­ñôÆyþ¶¶>ÐT¿`ÆŒåáù’×{¡ÞÆ•»è7Ãó_ûjkÏE ><#æÎ½œ³Ù>&,ËR¿¿Mhh8ÿÀâź²i ˆÕdâK„eïpMZ~æ™ù ÇmW~ Ü×røð÷F€1™^ ã÷émÃ< ÕxÕ5uj5 Ñ èOØÔä:°d‰®9"¯^}>¹AYÀ˜Í Tbpe¥ÃïÄÔèáENç„2k¾%§Yð„N| 0/4™tñ%d2(§§óˆÄpJMMÑI? Kq…húo>úh,Í–pÉÊ/¿H °ôïÿ~°ì =Ý.|`Ïܹ­‚Ûý ˜ûôIÿ€_©oHe™Ñš/”HhÓ¤§§¦~¿©©,¥õ -_¾ÃW[û `ð#ŒèÝÐíOØöÿp)k±Œ"&²Ïç‘ÚÛƒ-¦ÌÌw{$¿€1›ãíöññò >ðµ,Kµ¤Ççvûk\VÖÙVý £åhÑDíÀðY³^3ççßå÷Bá‡ýÍÍo›¬Öå_~ù—êäcò‡ZÜŸ>ÆW[;…Ëɹ³Ù†!t–•<BóÄ9Û~ýëfu}ìú‹z…"³ii¿ÕÛ¸³¡ €7+Ž.Óüè| ++ ðx$ŠV­š‚P™Á}‚Û1Ç .ÛÛµ– FñêÕg‚5½£pÜŸbÝGŽÄÔ zÝ|àÒ 8*Ëó2¿Xê*)ù>Îf]øÀ™Ê‚n>à=uêwÎPúŸJ‡#îFâ}ý| xõê3šåœ6Ùl‹uô½QyÌ0A’@? ²L ð*IO„å4DåVåIN1<ÕôzUØ!>@%©À8Ͼ}câºq#9| ­-èOèom½QïõF>6hÐûaúzº‘ù@CÃ×@À`Ô¼yzªñXúg”Þ1’ <ßSЬHI~A¸~ %ù†?¡F¤*tñÑ Z}uu7RI*b8n8c6g(«ÔúŸX‡ÿ ùõ fÏž–ÁggE¼ú~¿_p»¿‘EqÉÓ¦½¯JTÌœuÿý—Xòó_Ç¥~èñÔHOiB| ðw¿{1ýŒ3îGx}C爿©i-kµ®Oëßg„ú7›²²~Íge UŒu@%IòÕÖ¾ppéÒš: Kü¯9/OMÔ7”¤µøÀ9úÓ9`˜78›m‚ÚÆ·o¼1¯yïÞ?w~m—a³n2÷és¹r<[½?þxçÅ‹gÔmÙW²«FÝgŸÕýÀvÖl$û|™mß~kjÞ¿ÿ²Hù:0lÆŒ¿˜óóoÙëuûÛÚ&\²dƒÖ†Õ(r:àab2‰¬Å²÷ûU«ZdQìàJsnnµàvgÞá|à2Ë€)Ç­ÍßÖv‰°ƇPÅò1™~/z<×há¯(#BŦ¦„ø@qEE€ÅP]ç*Žýºø€ØÔTY½p¡n>Tç à7ÿ¬t8‚åæâñ?(+d0Ì}‰4^ätÞàžÐC|N΢ί‰ÈÆ¿òJ:gµŽ”ú†:­”ÆÏ ^f5–ý}¤ƒhõ ƒù²×«›LX¹2ÀÓ ? `kÚ´¨)A]ø€,Šª!*øììÕÐJqÎy WÞªt86ÆÙ¬ ¢,‹Ö#4— €A%%÷˜  ÔUPPW“‰Ø€úý‰ð{”Åz*ËÖQ±QyÌ`Õ(|€"ðÝ~¼ª¬¬NÇæôêÅCâú‡Cï]Ö0> ˇ@l)Ò´µm Ž‹ÇÓû|ÀœŸÿ€Àç€ç§ôtºð}óæµøjkƒ|àœ'ž¸ §ÎÚÛ(½c¨(>ßSˆ§Ô/H™?aSÓm)Í/8´|ùƒaD*B·?¡b˜3‰°ìp†çÓ©ßO©,·RI:&û|ÿássßKz~ÁðY³n! Ö/ CËFô=ž£þææÒCÏ?¿#ZQ;0ôÑG_L8°38,µ¶®g,–w²ÇŽýZ½†,®¨`=û÷O›šJØŒŒ_Dàm­©y4’mT—Œ[±ÂÔ~ìØÇ|nîeꨊÏ*Iiå£.-65½Ìçæ«m4íÞýß½ùæ_Ûeزnj٠6N%©Õwòä=ž}öQ=|àô† §Ï~è¡wŽ»\„> ÔÔ¸sçX‡ÌœùB‚[òz/;ðì³q«¹wŽâŠ ²üÃqýX‹Åݰk—¿ñ«¯2“Ì™3Ùү߃Ê;oó·µ]¾ÿ©§vém¿ë®f !3•2aÙ{u´Œ‰åå…Êl5Ç`NçÙÑù@fæX  Ø7o^"Ò|(Æ•T’T––Vv~]D>àÙ¿ÿÆ ÿ@õ ”kÇg@HžòÔ;UeeQóbêáÞS§ž0VyjkAAÁ³q6ëÂTÚDøÀ]T…Îf›oŠ©~A0PÝZ¨$ýqëu×µjܼQyÌ0ïwC?J¯*+;ªcó$óÒÒíz:N|à>°ûãLjëÈ«FRø€ìó}ª®­w‡z£ àssƒ|€Íȸ¹;;×1ùŸ•5,%úÙç[¨ôŽ‘%)ù••ûƒú³yPÎøñ§ë¶níuÂp>ð¬áO˜¬Æƒñ½ú³ïôé)¥“ Ë2‹ ’$SIòPY>% Ây»}]ø2éé³9›mŒÖú¢Ûýçnû}ôÑŸ™¬Ö£ò8õ Ħ¦#Ôï/«^´(>ðÈ#/¥ tBXIlj:$µ·¿ÏX,y_¼'üÞàˆÙ³GË>߬Íö >+kX8ðž8±ôÐòåÔÔ⊠¶q×®ê66îðÛê vi9dç.X0Æïñ¼ÄçæNRÛh?~ü_‡žþW_ÛeØ2† Ù`ãB]Ýý-z¸nË–“Z€Ó7žªÛºõõþ¿üe?2”šd¯w˜÷äÉØ|`ø¬Y/šóóK€€~@òù.¬^¸ð­ wÉÕ«/aÓÓïd-–k«õÔGñþ––˜úËÍùù÷BÑã¹pÿSOéuãùSIzCX¶JÒM¾Ó§µëõ”*¹bàz‚%»gÏþ(&þØc·*Î=žÏñU•Yr¶òÔ«ª† & ,û¨²BFèv¬ÞÆÓ¨(>B(}ÿXEÅËᯉÌ^}ÕÆçäŒSÞýÁDôżr³k¤ÒøÆ‚³Ïžß™ þÿÚ{óð¨ê»ýÿþœm&Ëd†$, n!@XeWÄ­ÕŠ P¬[]±JSxðÑG¿Zh(i ÜAló¢Ôjk[˦, VAÙ’°#`È2™Éìgûüþ˜s&g&ÛÌdBžßÕ¼¯+dæœyr&Ë9¯s¿ï»m>pðà݆|ÃMÑ·m)*Iÿ`‚öé!"/·w•É8#àÓÒbqØä–•= @7T;Á¥¦ÎÝy×] »µÏ,#FÄôc—»nÝ iŸžðtg*ûÖ|€eƒ|@Qbç„èú0/(_YPPåîíßú}ãXý ƒ|dPº0Æ> Äâ/èPðž81Àžh_%1|@’¶éOúÏŸŸë ÆZ­øo³}Šžä‡-rêë÷A>ÐSúÐ|í>ð!¿@nnþiÎY¾¼¢—ôVoõDÅœ_ úýù ÏO¡Šr)„àM*QtRU­°Å”™ùþþçŸ$tCž{în.-íx‹e4:™/PEQ–]®ý’Óùë®ógŸ½‰MM}K°Ù²[íÔó x¾íü»½À£UEEí:yw4_°*iàÀ'ÚÈ7ü„ü9møð_=ôPzÒyNœ%»\³™¤¤ÛŒþX~dÅŠ_Eµ-ßpoµ^¯=S¾!Œúõ¯¯T$éÞb¹Jï!:[\‡Ýy±Ò«ôé³YÈȘ¬­Þ#9OUýæ7së·m;Ms¨Ûºõ|Ãöíï¤çæÖs))·€RŽ5›¯pUUY<ÇŽý³Ý [°à PYn’=žk«~ó›DÛØXãV­â’/½tk6[¿?MlhàwíºZHOã-þ„Ï?ž¾ «Š¢Göz'Æ!`l.ô鳄ܪ(žª..§ø|W =B0Ì»Ðç ŽGâm>«¢‚ÒÓ_Ô›ƒÒ³Œ <©ø|3ÑÁ|A¾`³µèЋߧùÀiÓÈñcÇæÐaTUÕ'+ ê:æ Ò0<ÿp<Í`P~þ/@ˆMf' óäž9sBß¼mòq«V¥ééã 8øòËqúܲ²_˜£}ÚHåÑŠ™3O·io¾ànƒ~ .>»nÝ ´OÝ tÞž9sÚ´hÅ@HȟД™¹1VnYÙ~¡}ꢊòÄž9s:\á|€5›õ¡)%;;&ùFîºuSÌÕ>üW'Í[óhqòüF–AéUD{aëÐþM ùÕš¿ØYvED…ñ¿v8¸.äÆŠsÃø@5€ÉTUÅë Îd9dfÜ#| åòË?Ñu$=¾-,l44ìzV?°D[£*ʺkÑêö™4©¾áË/£³DS±é’“—ôêÕèå½õ¼bž/íö©Œ Üà Â0ÉŒÉĪ€SÅS äKÞjÝÐ=ù))/òË(tæ? (²ät ²üûêââÒ.-`ȳÏÞÄY­kx‹åòV;¶ðŽôG©¢<˜;÷Iƒ=e份Zõûÿ˜Íª/±d=ßPljšÅ¥¥Ý¡©´Cþ„þsçVÕ,[ö\T 8m±ääl6æŠÇ.V~m~Áð_N)]+Øl“ôººÏûLšt{E~¾Òá†ÍŸÿ/S¿~7kï§Gv»yxÑ¢·£iYCçÍ{ÀÔ¿ÿ›„e“ÀsâÄÆc¯¿vÒv&o± ÑᨨZ¼øñ6Ï+/Oõ×Ö¾àGÚCç Ë>xìõ××vÄ~ Ô¸ääÇâm>ñ½÷úPIz„èçg@é3f:æã 8ð 1ÏÀ¤ÒÒ‹™ Äí¡jTΞý½¾M{|à':››c¾}yï¿?„°ì» D^ù7o±ÀRfĄ̊ª.þËŒÒ7+gÏ^å•­Á+äް¬¾ÚxøEËü¶röìXô' å÷ýH£¬vùÀ…×DðŸÄú‚±Vg|àþî^@g|`èÈW^¹ðù†ª(þV[£ˆbðŠŠÃ=ž_ ;³{v¾ 7ß°·z«‡*¦s€q¯¿nqWWÿ„pÜdÆlI´YU£ªºÍ2|ø§ åÚõâ}LRÒBÁfE¥C>Je±©é€âõ.õž>½¾-G¾¨pÅ£^k¾øâ?ñKV«')•¨ªv˜UQÁüûÏ~Í|ÑE?ãMM5²Û½KMý«yÀ€ëùyååI‰ÆÆ{x«õÎH> 9o»ª«ŸŽÊŸpà´i$uÈó E‡c€¹Ñú 饪(k›-W隷ÿ×øéÓ øÜp ß-»ÝÏUÅÅr.|„³XV2‚äm 9„éR²²Võ²×{M¼Í jÉ’5 ÏÿX×6ÛM„ãÂF=B :o^ž©oß'´æU¯‹'¿ÀX“JK/N4h®)3óaÙ€är¡ùàÁÚôàÒÒÖ…ø€Óùd<&yÆÊ{ÿý1„eÿ ‹pœÌ˜Í›ÏmÚ$+~¿µ-ýÀt.55 D»}wõÒ¥ò½Ž*·¬ìÇTQÞÐ@éç\RÒtÅïoÅ8`Ìæ…Ú*k6ÇåOhXæØ±_¢åÄS°¬röì?@òe—-%,û€<ÇL*-M¬Ö±@(ß0®ù‚¼òráø±c¯‚½¹à¥Ê‚‚PÚk›|À¾gÏí!ÿ—kcL][š§SQ|„üX{ÈNå‰Ê‚‚¿GnÛJ?@X6Äí„ÌÌxôé(þÞ`xˆð|aeAA};»´¯ÈÈË‹éÇ.oýú<o„šSº“·Xž¬ÈÏo¯yk>@%ÄôìÚ(›_FUu9ZÒbÿœ5xð²(3 0ð}‡®èŠ+ 6F}Û½=>ËÅH„~ Öo^ðûCã»vÅ…ö'¤ŠrÇŽ×ô¨¯ß ù@ÏèD14_@)]Õ] ˆN?ÐSóbCCÏÎ{ýõ^ý@oõVTì| ¦æPz#Ãè¿+Šß”nI¹âŠ¿~[X­qrôóŒ ,Цs…N6—E»ý€äp¼ÚeÿËy䚤KÛäÑä:Ç'þ|ä3òÙí>!»Ý›„ôô¿& ôÕž9s¼€fð·¿—ÎûØÔÔ»LééÃ"õž“'çEÍR²²þn0@?]§’ËUɰìÓÑÎŒ.*-¹Ýoù€h·oqUUµò[À¬Š æ›ÿÒ(ŠGr:Ÿ«**ZMãÈÊyá…§øÔÔßéú@]Ýß«‹‹o7nö¾‰Ë ó€3€  ²|ãá_ÿúoñ4€†/¿ü*ãÚk?!„Ì&,kâRR²ÓFŒ°Ú++Cž¡¿†Cž{îjSÿþÁ|CYöÊn÷u_zio¼ÍõJËÉÉL8ðaÙøjk7òП\Þjý_ÈÏÓ]™/‚^—T’ž0‡"ôés¢~ûö¡Ž}û’5>0;t²Ÿyæ®p8*/Zô^WšO|ï½>TWxÁï3‘pÜ5ìØ±ŒJ©àRSõHH•°lÜú (ógá¢ÏžP°gΜ¿´­øÓŸ’„>}ÆA>?¡¡ù½–C'#Á› VœÚæ\cEÅ)W\¡ûÄ|y×®51&ÓBúà4¥¥Yƒ¯jÅfUÕ óFt¨!==f@‘÷þûYTQŠ\¦=ÔLæ*fÎÜÙÎÅj+ý@ˆðVkLɹëÖ]Ceyµ¡ù)²VÌœ¹³½}ÚòHÕ>‘töÕWôXBÒ´‡¶ó˺`¥“rhÿ¦p„a(P5ÚlÄ`ô*€7Ï”—¯í ͪmÿ¼òòÎþÖ‡ÊÀ¦W¼Cs ‚‚æ?à9zt<€Šh_%1|@–Cú@CÃ…×ð6Û§=:_ ùê| ‡æ |@•åñhÉ7ìAÂÖ,_ÞËz«·z¤bö'TÜî{\ËÂÆdJ¢²¬RUõRE9§UDñÃo¿õhùÀt²…BŸ>Ç™:ÚVÏ7 44¼tríÚ¿vi—?òÈ5I]ô§¶ò  ñ²„0LÛþ„5Œ+¿`è¼yo›ú÷¸Õ|Ëõ>“œü—þ7Ýô­~iVEóÝ?ÿy•ÔÔ4ƒINþ±)=='"¿ 6Âo6nü‡©_?]îKe·{âó=V½tiTgÍ£/#{½o…ñ‡cû¸©SoêT?`1b»`³]ì,{¤æægãÖ¼ðÂc¼Å²\÷Ô×ÿ­zéÒ°³®pýÀå—/74w¨¢8¹Kúŋߖ\®‰ª(:ÀÔ·ïC ÃÎ7B 6þµ¦þýŸÖÞ7¯ÔÜ|ÝÁ—_îræ±mìØ#¦þýßÓù—šúDÛúÔÔ?…ø€×ûlWùä•—_J%i-—œ|Ð§Ï PJ›öîå[é²çν›MN΂þ„‡_}5.&d¬Üuëî ’ô¿†c2­Ûºµ´ùÀ R?ÀY,ÿ£í§2<ÿxWO\»61™þA/t½þFeIó¡C©„eï…A?@Æ,]jÐ BxÉéªJ³Ù„6æ D‡ã€Ç«/Þó†ÍŸ¿Úԯ߃†V%—ë¨âr•3ÉÉY²³÷ëùyåå¬ëСñ’Ã1›IN¾M°Ù†ÁàOè;{vÅ‘åË £ZÀ¬Š æ›M›>7ÎÈn÷Ùí~¤¦¤$ªëÅÑEE£eçmÞj}¾À2bÄ—‚Ív­ö~zÄÆÆ_T¿MãVGqÁ‚G…ôô•„eÍ@Ûú0>|饿5—å&Uoˆ·9T/]ºZ ® ñ~ý~ù“”¬¬O@llÜUµdɵ]m<ñ½÷ú0‚°ÀÍúcž'’Î~øáÑnWÃŒr=ZÅo³½ hþËÜ8{†jRiéFÞ5Þ•{ã̆ ·ˆv{˜~€Œ]¹Ò¤ú|.‹Ç¡ªÅ‹ãæœø€–ë J€—+ j€Ö|€qWWÿDŸ/ ¢øI¼ÍsËÊnbL¦†æ"€•D~ª7׎r«ù‚·‹'ß0¯¼ÜJ%éy!PZ¥}ÕÇÚØ%B?`2…ò SsröÅÔ|ýú‰ˆÒ›«þ—ÂÃí4o=_À‚ ¨,:2.h£ùeTUW¡åoÅ÷^©,(ˆæ‹p@Ÿ/ ŠüÝŸ?¡®Ø@x~eE~¾/ÊÝ |€ÒfíýâäÓ+ –ÆÐh‹àýµµãp¡õF> Úí~¾@ã¢ödÏê¸ÔÔìž×Ë»kåý’“/I9ò´½¢b_"›wÊça™1õí»â‚óš’’mbcãj —ôVo]ØŠ9¿@ñzg–½,;”Â¥ÔGEñ{ò¥)3sÃw 8º€œçŸŸJçñ6Û¸ÎøYr¹ª—ë·5Ë–ýo—ÐQ~A´þqåhÿwÌ<ˆp>pLñx>TEñ'Ξ}P¿Ôž¼y3_ÿÅc$§s›’rG$£÷È+/gûömÕÅàéªÅ‹£º«¦ùþ‘·X&À Hºè¢["…³­³páv!#ã Äž®..ŽË«nØ‚ }úüAŸ/\®mcï¸ãf#¤ãÙsçþNo®úývÉåšos Ȥææ\Åçso±Ü¸÷£Þlóä<ÿüõ¼Õº•°,KÅ+Úíã«—.MÈ%úgŸkê×o—æÄ økko©))Ùæ Ax/ÄÜî§Õ<¯¼\ ¢˜«øýÇD»}$6PW·Àu¡·`Ø‚³Bó»º:_ WnYÙ*ŠëAÈÏÙ¤¤›’Rç>zMß|“é? KlT6)éç øª­T’ž0ÕpÅu^õù~}þóÏ×HÐâ?À§¦ŽÉé<¯ÿ@è«*'6¸ Áï1ÀŸ©¢ä[Xø1"ç œß}7ÝÔ¯_—ò µÆ—€çL2<\ JWΞ eh¥ ªÊ/àm¶˜³-Ç­ZÅ éé (^Я-}Þ$<¿¾+îp>@XV—ÔHc~ô£˜nYÙ(!=}€§ Íw†¹¿² `][—ûíòU±Ü×øÀj´ü(7€ÒßE™ôç@$ ,¯ÿ€ `U”×öÌ™­Q  ²â×ö™9Ú„øÏßWYP°$†æ@óSðŽ}ûÆâ‚ó`—þd ¡áöX_0Öj+ß04_À½ݽ€6ó ¥ææC ¤§ç -,Œ›”vVå,Õd ˾Ñ] h—˜û÷? ôéó#}¸””K/88ûá‡TÅžåUEE½| ·z«G*fÿï‰÷¸ŽpÜ`²&P—*ŠßŽÛnÊÌÜ´ÿùçÝ ]@ÎÂ…3‰ üŠ·XF# ÿÉé<¬¿s=ZÚ%Âì¹soäÓÓßm+¿Qø(^ïIEŽY?0«¢‚ùº¼ü-󀡅(bccµldÌæOmãÇïÓ=®gUT0{?þøJÙížÉ¥¥Ý)Øl90ð@]Ýî£G·jç¯«ÛÆ[,úí[*Úí;Aé“UK–D5=âå—‡«À!##Oï!9ÛÆÞyçÍê4'…/y‹å@Ë/°ÛŸª..þS4#kè¼y?23ßÐý %—kkóþý7DØû&÷íû–`³Ýù€ìr]]½téæxš@cEÅ·é¹¹!„Ž3³&Ó¬ÙÜ¿qçÎÐð‹‘Ü$¤§ÿZ¾¡ätNHÔ%úà§ž“4p`…Ü\SR²0ä0‚°Z;"Tr8ITsHŸ4é{Þjý+‚÷YÂ0¯ëÏq:dÈL.5õ @ó',.Žù±­Ò®ó<&¤§[D‡£Nñxú{NžÌIÍÎÎ éAñFºÌ wݺ\!=½ @!´°E.9y÷¹¿üÅ×ôõ׌®àÆ­Z•¢x½!>pxÑ¢¸ò õÊ+/H%i€ ;¼‘“óᡳg×"¨¸À/9ï©S÷ê|@ŽÓŸPkœDEñ!*I?E˯k@¹¼óÕC5WHÍÎnŸéé1¿÷§M#ƒòóL%éÒÏðÔnª(¿ß3gΉˆ]Âç "ø@ÕÁ—_Žºù¤ÒÒa„e¸ÒððiPº¬röì6ùpä|ÇB n>ðG´ð7€5æþý×G1§à€Î¼a˜®ð¿ž½"?ßåî-|@ ‚|€ãââTQî«,(XCs —´Çؤ¤žå¼Õ:0`À!Þf ù¤yê‚ó*Š¢…üáÂó%K¶ˆvû —ôVo]ØŠy¾Àwîܽ Ïß–Íf8.•RªPEqQI:Kf«yàÀ ûžy¦9a ˜UQÁìûôÓ0Ì/y‹e$¢á.W•êó-u=ú¿]âCž{î6!=ý6)éÒ6ž–T¿_@³¹mý€Ëu‚*Ê#1óÍÅÿVóNgìvo`á£>'îÓoJi|`¬âõÞϦ¦Nä±ë¾ùf³ž>Y{ˆŠÇ(ÊÓUK–Dåê³páPk…ŒŒ«‹~`à´iÄ2lضÐ-|Qt‹vûÓ5%%ñò…ÌÌ×C|ÀéÜ2öÎ;omW?šýš¡¹] rãm5Ë–½'»Ý“Bú«õ¦½}ôºq›>ð “›m34> {½«/îÒ}d½†<÷Ü•¦¾}wë| P_ÿ#|´ä²ì»há%ª9Y¾ü[Ùåúh|€1›Cg]:˜¡[Š»ª‹‹ËÕ|Ri©…0ÌrÎXž¬ó]?°@Û^%÷H"kŽ}3@郺}ŸšZë;}:£aÇN÷àÆ¿õVšìtŽB| KhF£"wÒŸè‹ÅøiÂqo~ÿÁ³a䞣Gï1èâò'B—é·"¨Œ¸ÔиÀ;¢ÝþñÞ¹såÔìlS»|€KKû žæ¹ëÖ]Bž†æ7¡•ÀŸÏÿ9BwÞ>¸òöÛzå•è—• ¥ó ™–@p²âÂók+òó‘û$š¬!úÙ³ àSª(oí™3ç|'»;É~l',ûZ”æˆ@„~À ¬ÙÌϪ¨`¢|p_eAAa Í# Šrš?áwÿøÇHQçX$<ßPr8ºýò¼u~ÁÅo4øÞ×Ý h“ˆNçA ÄFuWóöõ~¿îŽÃ€žáBŸ>?cÁƚ͗¤qÂ^YwÜp[Õ)P|¾  „˜úõ[uÁù@õÒ¥›{ù@oõVOTLçcW®Ló>}/UÕ<Â0CØää4Œî?@Uu³)3scÂõC §3fóó‚Í6ðÝ@ñù~Ûå|áóæÝÂZ,oµ—_ ñ´ç? »Ý'UY~°jñâí1-@³\cê×o"ôŠß¿‰„Mî#Göé_ݸU«8ßÙ³cd·û>.-íî®ëjk·òVëuúQŽŠÇóó#Ë—GuÑ2jñâá²×»F°ÙÂôý¦L¹-ò†V+ýÀÞ?Þ.¤§_$„Dê¶5ïßS»ú)=ý Sfæt­¹]ñù®«þío?§9Ôd\wݧ„Y„eͬÉt9—œ< aÇŽO[œ^˜"ØlŸ£øÀ° ÆñVëζø ¯ë’.ºh3#éh ¾~Nõo»½+MÃŽÄεi#Gžç­Ö©Pzž¾ÒUUüNM2d†®Ô×ï¬))‰ë±½Ê+/‘——Á&%.5õ ¡oßÛ}¾@ô3”„é´Æ©$=HEñNÂóiiçÕ@ _ ¾žiܹs*€4hþ„/ZÔå³bÍòa·#ü½æÌ† ™Îï¾»•ªªæOxôèÝ!ý€Û7´(Y~˜JÒm'p‡ìþþý÷¿tîß'UÕ[aà!ÞjK;’[V6À#TQ¦€cãï@éêÊÙ³CwgS³³Ûçi£FÅôc—÷þûC¨¢< t¹ ô²º²  UÆm+>@xÞù@ÌþŠR è€=„aVWÌœÙYäŒ!> ª]/(ÝIUuÍž9s¢M€ñ”º´³**˜h)IeAÁɼõëïÀVÌœy*–Å#‚œ@PrÃûÙg£Dc‘p> »Ý=ÌzL?àv÷°~Àã éˆ ¼Ý] ˆN?`2 ´Žó}ãîÝ]Î22Vçó~ÿÏ¡é„ôôå½| QÍ^>Ð[ÿÇ+Þù‚«AÈFÌ@ÐhÊòªªÛ“/¿|ý¾gžñ&tÃ,¸1›F3_@E–Ýîƒj ðû.Ïhþï´Å¨,K ¤CÿÅç;¥%L? :ժ׻ S^SR:qÉ+/œû÷‘ΜÅòÞjß`òæÍ|Ýöí[Û˜/x*ýUÕ5¦¾}¯Õ{H.×ÖÑ£oŠ<ñmk¾`o±\ü’E·ØÐðTͲe¥Ñ4ެ¡……›úö]¥çHNç–æƒoi¾ 3ó-Áf»[{ÿìŠßŸ[½té–xš@ãîÝ{Ó¯ºêÂ0Áù³ùЍø•e¯ìñL8¼hQU¼Í9_ 66ÞVµdÉÀðç˜5̈vûÉjÇ^ý;mí\hú6)éý9Ý`¦ž_ é2_`¬Œ«¯þÀQ`““¯ZX˜´ø„ø@"üŒ¥éÏgƒÒ[Íýû{õõ*UUÆîÜlå܄ի-’Ý>D»ýpUQQ—¹Ð¬Š æØ‘#×–-p€Ž“©¢œkܽ{sÿþ ÎuðàÝæ‹/Öó ºÄ®ÿì3³ØÔô“ãÇ–½,ìIJ¿!ëN¾÷^Šâ÷ €aB¾‚BŸ>ëã<Ì™„aî`5<%ØBXv]ÅŒ 5;;S²°ŒÓw¾®8ÀþGªÀ‡Þ¯,(¨3îÓ–~ÀÄÍÊ`䔞!&<ÿi'n}ôúåxWô{@音Þåå} ˆÔÄÌX–©ÈÏ? •Ñ쬶õ½|àÿÊ|Aè~€p\ðþýéþ¬Ù<È:fÌéÆÝ»÷%²yLþBzzÏøêêzýz«·.xŪHöŸ=›OUõ:ÂóÈæu † (Ï ª(›y«uáW^ñ'tÃæÏÏ'‚ð+Áf‹Îø€,ËbSÓª(Å5%%ê“;ó˜ÌÛlïòVkký€ÁŸíøH.×qª(ǬÐü ß2õíû°á…Éé<"»\†yÂŒûõ³§YÌwÿøÇØ@Cà .%å'BFÆp$ÒŸ0P_¿”>^]\ÕEKÎ /dCQÖ F>ð¥¹_¿›:/H9ò ]¼ éž¨))YMãÈòÜssL}û¾eœ/ˆä­æ BÍý~»ìõ^os8²|y©ìvçª~¿Î¤fg¯lóDÎêêÆY±âh¼Í5tÞ¼±Bff‹?á¹s·Ô,[¶-ì0·>¨æP³lÙ¾@}ýsÐøo³…R#C| ä?ÐØ¸+Ñú8²|ùÛ¢ÃñÐ0ú˜L%ºyîºu£AÈ4U!66ªTU¨êsʹI¥¥©þ~„ø@—üôšTZj!,{;(B†h_(ˆ 4)G†ã»ï²0œã›oîIÐ!,; ”Þ ÀŒpKüýžcÇ>ûá¯}‘*J¿V| ^ý@諦ÆÎè)õ€Ïlª,(¨IÍÎΤªú"Ð0õíЄ nE‹?¡^‡Aé&ªªÿØ3gNˆž·« ²ˆü5ÙQióB¸~Àà t“Ѳr@ç„®äèuÀ&Âó«ÈÏFKƺ¦ $©bÆŒ#±,F> JÒq´èFˆZÒ(ÿ¡ãâvOõc­V|€MJÚ`ð'¼ðó‡-réó=çOè÷‡ôŒÙÜ#úüÍ6Çà?páý ©$=‚^BôòÞú¬Xý¬þó秸@¶Q? Šâ÷¶']|ñßz¶m}„_ VëhªªÏ8¯wÉ‘+:=ÇìÜ OŸ·ÙääËZíȲ’*Š20éˆvO5VTì˸îºO¥FýÀÅ ;v„äÚã^Ùë½*þãL}ûîl׎3ú<š`ÿ½ººgÑ¢x{à´i$´€ˆü‚ÝÕÅÅNTóÐ"V¬xGt8öÁù˰a÷‡`Ì/`L¦„êôÊ{ÿý¬”+®ØNF@ô´CP?ÐÔdÔ$„@^yy_MêU”a\r2Ÿ¯‰úýŠÇ3‰ÖÀ¤ÒÒd†ç§PU½ƒJÒDD8²UöÊÊk›NÕù@h¾ ^ý@^y9 EÉ£ªz(LU5ÒãÎJÿ àoG~ÿû:ªªõÚbÆpŒ è¿çcÖä–• 0JÒ­Òƒ_bè'[° ”~Fa—ñ7`ÃØ€¸ó ×!œPPº„ü•ðüæ.Õhź¦8௄a>«˜9ó‡(vo­`!.ý€*Iæ=sæÄ 5ÃøÀ1´èþÃù@èŒ| Çæ Œ| §ü Gøö÷'ì>°dÉ–^>Ð[½ÕÓ9À袢TÉéœNe2Â&%¥†Q¿ß©Šâ÷TQþ•2xð¦„Î œ6XFŒ˜EX¶·XF! ý€ätTüþ%G–/ïô3n>@R|>‰Âó¦vô'4ýÀ¶˜ÐÎ|"66VËÏ6)é/É—^ú­ñSÎÂ…£Ÿï§ljê]]Î7t~ûí¶ÿ]P”'£åÃ_ziÅwþ„Qå œ6Xrr¾0úêê;²bE\׊Ã,xTHOÿCGóáú!C^5×ôñ6‚ù†²×›¦2¤|Èù‚@CÃ¸š’’š{¶Ymä„ò |` Zô?OTs 8_`Ô°))«ÃÞ‚œçŸ/0èv'ÒŸP/M?°x‹%khaa  ,[¨m×m|X“iÎAòI¥¥©þÚÚná@Hy#¹ À„@ccõû3x«u4"õªßw¾aDÓ‹ ËNp€Ñ0|¯ñ©©M~'Ãùí·B+>ÀÛlqñ $õŸJ§€œ66ñØ%Úíÿ>õ§?} øýàù˵ $ˈ1ÙCN*-½‚0Ìí ä&ª(Á× ¿ ß J¿![Ô@ â«‡ ‘|€e­@Ü|àÏçÐJ·–Ýhhøw;š¬øÀV[²²²¾‹â?qúH>åŒA«ù‚уþÿ§ø@ÏèŒó=£Å%ÚƒLÏäöëwPç\rò¥=’_ò ¤gò zýz«·zªbž/ðž_€„ùFÖ¤ÒÒd¹„a®44<§Šb_"•å ÎsìØ´~ÀãIBÎ}W¸ÀXh±|Zš3ÐÐÐWEáüçŸNÐf &i ¯¦ŠÒ¯ÍTòoû¿ÿí>zRSSV  4f> YÜB®0møÑ°#˜—· @ÅW>èHÉʺ ­ø€¢ÄÃÞ7ä´|•”!;Aéî¬Áƒ«Ú¸âv ÁúFí+ÜÍ¥¦Vì¼ë®Ðù@;—ë‰ÕœÝ´éXg¾C¦8‚Ö„4{œ0fsñà|Í–3lþü+ãùŽ«#ÿbíA†Â뱿ttÕ‘ÿÀã|u̘3ÞŸÐç3ú,»ð| ¸x{¯ÿ@oõVOTÌóbSS¾*й0ÎPêSýþS¾4ef~øü‚yóîe-–ç£ñ'¥²h·T|¾ßFsMÙ™?áÍœÅòv[þÑøJ.× *IVµëo×î|Á×ï¿¿Ú|ñÅè/LF›šjd·{U”Ž®\º•ŸW^Î6}õÕH5(hS?àp¬v:ôdÜù’ËUA%inUQQgfØ´|C–ý£`³åê=$—ë s¿~7wžo8bÄvÝü þ„á| *ý€ÞÜï·Ën÷Äx›@MIÉZ%ÈSE1¤° ¶ªÍ#Ðþ„ÃæÏÏÛl;Úõ8m1úJÍÍ%ÒŸ°º¸ø›°ù‹%ÜŸÐ’“3+äOh·ï®**ŠÛö¡½:²bÅ;bc£®Ò“.¾X 44€àýþûÛÃø—–·7åÀiÓÈÀéÓ†™`G¥Oäv„e=TQà;s _|‘6_k~Á¤ÒÒK Ë^kø ­íl*j—ìß–Ý{ò½÷>QE±/a˜Ë»:_ð>ZëÀ«YBò c6¬ÈÏõ'S²²šôEõ.û|`/áùÃ|1mðžÏŸ¤+.»ìX,éh|÷Ï^ êK2TÄйC> 9÷ÄðZqÕÿ/æ þó wï>˜~õÕsX“)MJºä‚畤žÍ/¨**ÚÚ;_Ð[½ÕÓ9À„Õ«mÞ“'ïS« Ç %,Ëš~@–Ï0&ÓΤK/ý`ïSO¹º€aóçßÏ$%-l¶‘TQ:÷p¹ÉÍÍ‹Ž®\YÞ¥t”_•?¡ÓyŒ*ÊCUEE_¶×#¶ü‚ÆÆÃŠÏ·ªêƉ³g4ê,ÆR|¾ÙœÕz7o± …økk_ó?þ\´ó‚sÿþͼÅ9_ðD´úœ^Eù£‘¦èÓM?ê4ß0‘þÃ,x”·Zÿµ~@JOCèÓg ñ'¯æw¿Û[Û–jܹó›ˆ|Ã+X“©oTúÉíîÿ E»­jÉ’­¡# ånÑó ņ†ª—,Ù–ˆæ`¯¨¨MÉÊ:mÊȸ„°TUoÒÓÿÐ’o˜š/p8*º#¿àÄêÕ¥bSS%p©©—§deÝèþ&Óm;•á¸îã^o‹~@ ú¯·Iã/ZÔmS·0üÅ«´œ“ ðž:u¯žo¨x<%ºaÞúõQE BF){½²ÔÔB ¡a:GUuоqWøä•—§SI ôAU5Ý(ùgAÖêê.ãWÞ~û¡C¯¼}Ã`¢ãuúWG%é¢Nvñ–­rîß?ØsâDªÿ‡˜0>Ën(¿ µ~ X”J ä(=àḃW\vÙÉ?çå©)YY“ % Ó’oˆ®éT'pˆ°ìA0Ì#”®¢ ù†@H?W^ÎFKI útG6Q”a¾@–BãÎýûG#H:¢*Ĥ!hk¾ dV¤x<^?À¥¦–ü /<8ôÊ+nÑé<ô ?!Å~€„ðèß?4_Ð#| Ò gø@¯ÿ@oõVU¬óiþsç|-aÙÁ„ãL@)õRI:Gå_I_¼!¡þ„óüó÷ž_µ?¡ËuHõû—zŽ/ëZ¾ásÏMáÒÒV·ÅŒþ„íæz½§¿ÿá˜õÚ¼ÀÛ¦¾}2€Ur:kd·{›’ò±mìØïôS.ÍÏp´âóÝÏ¥¦ÞÝ¥ü‚É›7óu[·n ó°ÛwøEUQQT †¿øâpJé»aúhüfUT0{?þx»n@Ũ¯ª¦¤äOÑ4ެ¡…… éé« þ„›]‡ÝÚxÝ”™9Ðø€ËuuuqñæxšÁ|Ã>W]õ!ò?Õü ³¢Ê7TEÑ+»Ý5‡>äÙgÇšúõë8¿€°lH? »\'rþÈŠûŒó¬Åî?0lþüûõ5ÑᨨZ²äÕ\¯£+W®ŽðÈ-€IJZ¨m§²‚ðH¢›ëE%©c> :‡ª/î¶³bþ⋇y«5íð„ÍDÖ¤ÒÒþ„e³ü?üp˜ªjÁ_[{Wˆ7¿ ¢Q&aÙ,ƒÿMSß¾œÿ|ð”0Ì5]ãë×¢ªzM¨ ¥ƒAHZGûŽ“A©¨¯ç›öî tDêZ+TçŒ8à(aÙcÇß~û3ªªC è-| kúhp ”%,{Œ*ÊQ"'Ú ZLÉÊjƒð|¼| /c6¯ÈÏwưþ¶ù@ó£û|Aâø@Ìù@è½òŠ[ljÚô¤?¡(þV{!~¾@Ó„øÀ÷'*Š!ý@¯?a/è­ÿ¨ŠÙŸ0PWwá¸É„ã†1‚F†*¢è¤¢ø=UÕíæþý7}·`#¡ ÈY¸p&„_E;_ 57Vß¹-íÈž;w2Ÿž¾–·X®hãiIõûõ)=Úã¢øPÕâÅíÞnŸ\~ù[¦þýÃò E‡£Fõz7žÿpüôé!ÿÉ›7óõ_|1Fr8frËO´û‚-|Àn_íªªŠn¾@Ë7Üæ?ÐØø…*IO×””Œò-Jå]S¿~× e¾àKëèÑS:Ì/ДÛ„ŒŒ€Ê²'PW÷DͲeq]+Æ>_½Jo®úýv©¹ùªx›ÁùÙëáOøZ›G ;ù@¤?¡ØØx[Õ’%[€pýÀf]? 9’­X«é«¯Î[rrÎ }úÜ¥õë…>}V¶è† iÉ7ì¦ù‚c¯¿¾V÷`““¯HÍÎ6ð³9ä?ÀB·ùõäÿ “ÎxOºZf­êõ&l¾ Ý£àñ|¬ýWð93£ªz“þdWõz]û—¿¤É.× 2”!ƒ ¥ƒ¨¢\âw}X¾á•·ß~0>p€°F²ÛºT7^tÂq*aY™* ':é#6 | ó«ûg@éYÇÞ½ƒüµµý=§OŸâ¨¢$†¯/!g´FgËž¡ªzV ÎèIxúàºÌ¼ÖÿáŠË/?ÃL<ˆvÆ ->`ôèöËó¶æ Œ| ÛE‡þ=çO,Õdžïù‚]»„æ ’“{†¨>ß# TFOñêââ톆^>Ð[½uÁ+Vÿß™3w“ ?aÈ@E7U”³¶›23Ëï?PX81›òËØNý )•Ŧ¦å>ûìÍÚ|A›|€*Jgù†Gµù‚íõèh¾`©_¿ÿ úBȆšeËB'.×®5y¿ÿþJ±±ñ>65µU¾¡äpD¯˜UQÁìýä“­þ„» ªÏD«ÈY¸p(€µÆüÑáØžtÑE·Äì?È|CÉåÚ:öŽ;ÂL#ýÞ04×ó â6Ê«Y¶ì=ÙížâË”½}v?¢]ÿîœ/ðÿðí­ôaþNçc‰Î7 éáZù -,¼?ä?ÐØ¸»jÉ’„ó£+W®6ú ›??,ßPÿ;Ý­ùj ò íÌt«ÿγ¹ã=ujºÎé?Ð^2ïñã÷FòÙ,¯¼@ø@ä|A4Wù”Ê’ÓÉ98Ûº6_ — ”6€Fõ©¢Ô3<ߨEK6{ã/¨ªŽà›/ˆÓŸp#v6)©ÁhŒØQ¥deµÍö~òÉHQ%ö‰Ó„ø€ê÷w»=`‡| Çü uÿó'¤Æü‚žð'lܵë`znîlÖlÎ`ÍæA}&Mªoøò˯Ù¼S> ø|AÓpÉÉK.8¨))ÙÖëOØ[½ÕÓ9À˜¥KmbSÓ½T–¯1Îð+>ß)†ç¿4õí»>áóÃæÏÏg’’F•o¨(²äpT%©¸ËóCçÍ»•µXÞj‹D3_ ¹\ǵ|ÃØò ´y5¦~ýæ "ßP 6žÿ¸Ïĉûô»+yå嬽¢"G ~Ƨ§OôßwÏ=sÛ:Ûj;ßpÿþí¼År­~TE»ý U£×¼ðÂ4æHNç6ë•WÞÒ¹~ ‚øøáçGW­ŠËϼˆÉŸPí¢Ý>!Þæ@HNçUŠÏç:Ó,\xƒ‘±:hnNÜ|1¿€RÙþü-5%%ÛÃŽc2­…!¿ ¡óË—ë;{öiè| 2ßphaáý\jªÎvuG~Q?Ð*¿ÀÈؤ¤îÓø|OAãlRÒ| “JKSý?ü`¿€| ä?@&q|óÍ=>ÐmózÉ.—ÞCðž>}†¹E2Ñ| ²&•–&›/º(ôk™„9†ç/Ñ>w¾`8‹ö‘JƒÿÎXž˜äK/…¿¶V¦ŠÂlŽp\:¨¢Øõù :>ÿçÔ@ Þ+a˜Dð½¼ ´AßBiù?àjܽû%Ùíä=uêÉyþùmBzúdÂ0bÒ¥—&ÇèÒ8ˆªêÅ Ô­5reee5wv$S²²êdx1Œ¸.òÎ;œ/š›/<ø¿1_ ùô˜?¡Ñ,ÛCúÜÜŸ²fs:k6_Ò#|€ÊòãèI>Ð;_Ð[½ÕSó|ìñ̤²| Xv(!„¥”‚Š¢‹ÊòÂó»“/¿|}âý ,¸ðü 6ÛDÜΊ×[tdÅŠNÏ1;ó¸·ZßâRS/o£‘ÍY íùùÀ£qÍ´éOh·W©~ÿF'̘±?Ÿp¤ìvpVëÝFý‚|àq÷ÜótT| ü‚ݪÏ÷TuqqTjË‘¯¾:RÅ5¼Õ: -ó_XG¾©S>6zôݟʲ'ÐÐ0·¦¤ä½hGÖ°ùóÒÓWŽ ñËÝlܦ0˜#6ÉO^¼Í º¸xÔÜ<É8_0´°°ü‚nä‘ó¾³go:²|ùaG€1™ÞC7ñc¯¿þ¿¶öhþ¼Õº6ì-¶`Á¬Ð|A7ñ£+W®Ñý¸ÔÔ+Âý óÝɨ(>–|Ã…@&¬^m‘ìöF‹vûÁª¢¢îå/½TÅ[,ÈlJJ&ã:xðîÐ|ß!æ B|ÀsìØ] æVýÉîæÀ¦¤lÔÿOæŽáùAÚçñêr´O“´#É"xîPšBX(5J­þóçÈÚó'Z 7þ•p„çSº‹tTͪ(*²× çþý'9(ŠˆßŸªêÅ@XÖ¯ý‰VÏ{@ñx¼ TaSS%£‚ÆRìË/h>p`$€ï¢ýR¢@x¾aè6è9Â˹D‡#¨èAÂ~ Gü 5ý@$%õò^>Ð[½uA+¦¿éã^Ýâ?wn†䡌 ð@ÅKeù UÕ-¦ÌÌ /Ю|gA˜/X­£¢ò't:Èn÷oºž_Ð@tóÇÕ@àêââíõèÈŸðó€ÂÈŽjÅãÙHåƒÌn8¤Ÿ=…ùZ­÷Dò@}ýî#G~¿ÿ€Ý¾SÅÇkJJ¢º^µxñpÙëÝŸPÓ|)Øl×!ÿ'ãÌY¸ðÞf[IX6:ý€%'ç-½¹*ŠÁü‚.äV-Y²FözÃò S‡ é|¾@E¯ìõ&l¾ ’økko©))ÙvŽ[}¾Àáøy"ç 4>ÐâO˜’>_`äúúÝÄŒþ„ƒ‡N-€„_iÛu¯ÿ€Çó$aÝŸPË7ìA>À˜Í}Âø€Aûßme˜a¼Çߦúôé4›¶«Å¦¤l}¢Í„ôc~ô£ªƒ/¿õ‹…n^·_^Ï´[ŠRÑ_[+SUåA’xý@gE´^ “ÂPEQ€°ì…â¡Rý~¹ËþDÓÖW›‚6d~ _~¹VE³ïÔ©%\?ÐY™ °²ÉÉíÓã‘úû»zX;«Žù€ÙÜ3þ!>`³åôˆ?a˜~€7ºkñýéW_ýS=ßÐ6nܹÆ;£Š—޶:÷ðûŸ€Æx«µäÂû,]º¹—ôVoõDŬš›ï§²|-€+“) ¨,{UI:`›¹ÿêO8pÚ4bÉÉ™MXö9ÞjÖŸð ìv/9²|y§²ðÎøÀ4>pY«£›/8FEqNÕ’%»cZ€ž_`0à!Dø(>ßGŒÙ¼Ñ˜_ EŽ‘Îû9«5l¾€*Š"66¾î>zôÙ¨ù€óÛoÿÅ[­7êUt8v@Qž®Z²$ª³¥/¿<\ñzß ó't:·™ ¸5fÿÑn¢¦¤$®YôVþ„±ú(>_^¼ÍÍŸÐížš/°X¦ìýøãvøÀóÏ_/¤§oE7ø7o¬™Ê/Ô×ÿ¨zéÒÍaG€ðü{0òêj–-Û¨¯`Ìæ·ÂÞ‚a ÌÒó º‹Y¾üc~AÎÂ…3B `¡PÛNe“’žHts½¨$…ø ΄ñ áOØP½Þ]|ýN+Œœ<9í‚ëA0ö¸ž#,Ò¤Óô ËJTU}„ç=PIñùâñ×ÖJ„aªª<&%ÑþmUðJØ(`ÐþOa»”o˜»n]>€ab¥©š¢"@^[€À ”ò¢Ã1ª Wuõ¾H˜ô•³gàûXŽœÆfhŸ~™_Ð#þ„ ù†=ä? åô˜~À˜_Ð3þ„»w·ø$'_b;ö‡Æ]»¾Ndó˜üx›íw½þ‰jôòÞú?^1ä¼ðB’âvßòC“É€¨²ìPýþÓ¶&\?sψ  6ÛXDÉçwÑØÎwªàÒÒÞâ-–ËÛx:”_@xÞÔæ|Óyœ*ʃUEE_Æ´€vø€"9GŸïC²å}&NüΨØûÑG#Ÿï§œÕz—vÞ–_0îŠÚÀñõ×ÿ22nÔªèp좢øóêââ¨ÎšGýú×#d¿M¤~ :ÿC~*Šn±¡á©xoá·•oXµxñ-ÆmZûò ”@ ·+úš’’we—+Oç‚ÍvsÎÂ…ç$ÜÀ˜oô¸µ•~ •?awåÂq©©ù† Ì ùó »ÕŸKMÍ ÷0ê8î‚ø2‚°ˆôp¹~õÕݵ œPYÎ÷hñè¶2ò@CÃÝa|€·Ù.¨~€°ìä°ùˈU±¼˜Î@HáyG[LÀXý&OþNç²8°l ¨ˆ—èiLÀ À   €#òÃwî\U™°,OxÞÂAS8$P?¬}\ÔÖ“„eÁ¡Š¨*a (!ýÀ¸U«¢¾¨,(8Iå~Pú(-¥ïø”~àߦ:6è¾ÅiG½ž£Šr ÀTU…@}ýÄÀöÌ™sÀéζ»î“OR¤ææt¶@CÃÅç7oþ ª ïéÓ9*Ë;<„æ ¢^@´µcêT€ïS³³/×ß>Â0».-mƒÁŸ°gó ›-gØ‚cº«yûúY.ÑdüûKGWëôù‚ääžÑPE åöˆ~ ª¨¨—ôVoõHÅt0aõj›çèÑ»¨ª^C~•eœ&÷EÒ¥—~°ï™g¼ [€v?¹€°ì/£/íöŠÏ—ù‚ }ú¼É&'_ÖÆÓ¡ù‚võNç1*ËW-YòEL ˜UQÁ|³iÓ{¦¾} Ád—ëCÂ0Ô,[¶Oß~òæÍ|íßÿ>Bñûgp))w Ã>_ðÖøéÓŸ‰ŠLÞ¼™¯Û¾}«ÑŸ0P_¿ƒ*Ê“ÑúŽxùåáTQÖ†ùÄ0_™_ðØ‘+âº^ˆdg¿jî÷Ûe—kR¼Íò ›íæa D5_àQ|¾«/ZÓ…J{5ä¹ç®4÷ï¿[sbPüçÎÝÒ*¿€á¸>àp<–¨æ@ПÐ_[Òð6Ûš°·`Ø‚3Cþ„GE·èV¬xGçlròáù>À Â#‰n®UÕvò }¾&<ßÊrã9qâ¯T/L¾¡!¿ È£?aÜ– Ñ›”‚ „anàÄæ L}ûÆÌ\¤JÒyÆl®íŒ ÀØ;ïüæà—_ù!Ù F‹BÅÀwóç˽€¡yh¾€°¬Îœ¥µ ä<(ý„Ô–=¯Šâù=sæ4ü9/O]T$Žã ϧrPƒêƒùdÈ!AХ騢€°,rËÊDçý?ü@¨ªªÊ0 ÔõñðÂ0/x”n°A.Ð^ŽàŠRG$‰ò ;â×ö™9ÐÐpaÙ¾ ´? Ÿ ÔÕMËÂ}ìØmñ¨ÐQ}yûí~'´P¥fgO¥ªú†)g’ Ú„ÿ ?_ðmaa³èp‚ú™/Pýþÿ@Ïøõº?aÏäôúèÕËzë?®bÍ7´úÏŸŸJo ,›ÕF~ÁI—^Zžp¡……ÓÙ¤¤çy«µSB²ärU).×o='O®ëR~ÁgŸ½IË7Ìjµ£a¾íøÊn÷IU–Ž×Ÿð=S¿~³>_pDv¹6±©©›ÆMú~©­EŽVÜîYljê]‚ͦÔ׿Q½té3Q-`ܪUœ¿®n[X~ñÀÓU‹ï‹æ-ñòËÃUY^cÌ/7»çžÛ:äÚWòEÈ@Q<úú§jJJþMãÈ:oÞ¦~ýÞÔý E»ý󪢢یۄ½orß¾o }úLB|àêêââÍñ4€ÆŠŠoÓ'Nü„p\aY3›”4Ø:fLFãîÝŸµ:‘|@r:'T/]ZoscEò6ý ˾HTs Èuuó ñ.--‚ÌŸ?o± ÖÞ§ÝÝÁj–-{+Ì`Þ¼ûB `L¦Úv*aÙnãŠÛÝ¢HN~ˆäÂÀ_À˜Í}ϱcÓ ó ãOø‘ößÖþLrr÷ë,–?&w GX6”oh;6¦ïü¼õë©’4€°ìéÊ‚‚ºhö1êÇ ãÏÛ€øõ„e9AÝ¥§AÈiPz „œ¥§ù´´SÚ½cÀö›o–FÉ„ãx0Lr"ù@2Écœ%\® ¸Ðœö=ü­ª\È+/g£]@eAÁIÂó÷ø (]‡ 8Hˇ`e€ñ¦xVÏL¦Šb稢‡ÆböÈÏoÅÆ­ZÅ™23ª’taÙË\ª}\ “* K%(`ŽqT–¿ð0Ê/ˆzm•6ÎwJû«ë>ù$åÔºu?íö×ËÂ÷ý÷«¸¤Aƒ6QU}¯åFoÃcí˜:Õ“’•5Aûôœçøñƒá|Àfë1Âÿ@ÏÌìÚu ä?œ|IŸI“ê¾üò߉l“ÿ—œüÛ^ÿD5zù@oý¯˜ý }§OOW%éÂ0Cˆ $B@eÙ­JÒ†ç¿ÒÓ7%Ôržþ~Âó y‹e$¢åOQMII§×Ñä¾ÝÖ|•e „È ”0‚À·éOèrPýþŸV/]º«½ñµ¦~ý~ #p¹ŽÈNç&6)©ÜU]½O§“7oæë¿øbŒäpäsVëÝ‘þúú×kJJ~Õ4ÿmÆüÑáØà™ªÅ‹£º™1ê׿!{<ïWë=D‡c˸©Soí”ìûôÓízs*ËmíÏãÖÌ›÷€™ù¦1ßpìw†-"ì}“úôyMÈȸå\WÓU>põÕ`6á83k6_qvïÞ ;v|Úêä¼ðÂdÁfÛŒnÒ„ò Ûõ`Y£?awèBþ„­ýŒ| ±±[ø@„?aÄ|‘pÜÉn®•¤~ 4_ГúÂ0éŒ÷Ô©éháugs \?à;sfCUõ&ýI.5µÛù#-ów=§]¿qꨪö§ŠR³gΜ¨yÿ[nÙš/ $;Ĩ,"mZ:i¦È-+; Fû¨& SS1sæ‘ûm¿ùfiô’%’6_â Ñ%#êÕ¸Xû¸Q{¹eeÍ ´@ aÙR¨¯?!»Ý:`C|€°¬«~€0Ì %þJ«DJ8Ò@ÈD2›ªê+TQþ,¤§Áð¼ ¨¢4…ø>Öù‚Š™3Ã.ÃóÊËY*I—J‡‚!†¢%¯TQ’¨ª¿PJO‡ñ®ÎhŒé˜öñwÃÂÒ©(0Ìwöì’Ã1Ħ¦2ŽMIÙJß!<›’r€—â]@ ³#þX™’•5Y{øœçøñ-aþ¼Å2¬Gæ Œþ„ç_ý¥£«hõ=“_ "˜iÒ3úêââ톆^>Ð[½uÁ+Â|ª(מFt/«@ Y•¤3TQ6']|ñ_ºÃ ŸIJú/ÞbéÔŸ*Š,»Ý‡Ô@ ¤º¸¸Ó{ÎÑä¼Ý–?!(•¨ªvæOxœJÒÏªŠŠvÄ´¼kê×oŒù‡¿ÿCF6ý4UþÙéœÁY,w ééaóbcã;®êê§¢ò'ÔnáoÓUöhñx:Ú|Ü… ‡REYcê×ïZ  þ„T–=¾³g=ºjU\zã!Ï=7ÇÔ·ï[¡ù»ý_UEE··‰œ/Xiô'”}¾Iñ6€#Ë——Ê.W^h¾ =ý–öó #ø€h·¯))©‰·¹±†ÍŸ?ž·Ùv„ü~øáÖ°ù‚Ó¦VÞE x$QÍ º¸ø›~€޵XÂýR‡ ó¨..~?QÍCoÇŠoéó¼Å’®¸@þŠßâlJŠa¾Àëmº`þ„ý•å Æ{êÔ½Ân×Èn·î(økk§2TU§èO2ÉÉ gC‘Å&%…LA¸1Œ$]tQLßùšÿ@!=ýˆ&åî´’üN dªªLr^xákÁfOeÙ½ÿùç-ѼˆÖܘ_ ¨¥ßïìëHÐ0zÉaÙdÑáØÃAUõ?]á,€Ú\ÁLÈ-+; Pþ;ßž¯i%PUBr.Ü"ddL ±IIÉ1Q’÷ßÏ¢Šr#€QFèÓÁæ>‡@é·¾sçVàÄÆÆqª$0ñð3Ž8®>©´ôR†çGSU ` €l´ü½I0ªê$è’tœƒªùÀ½±, ² Õ”ÌðüHÂFSYÖE3 ²üw2üÅ-|ZÚ1J8m Ôׯç,–û©,7œÿüó¾lÃ_ˆ}®ºê6)é"ÖlΰŽ³±q÷îúîXÃq6ÑnKlläŦ¦·¤¦¦èþ¿Ó·é9ý€Ñ 'ü ÃüzŸ°× ·z«§*¦s€±+W&ûÏ›Aeùj²CÇý(õRQÐØ¸»zéÒ„Ï ý¸ÔÔ+Âù€Ù¬Ÿ¡¨lRÒ£‰n®—‘„æ &¼ýv²äp8@/9/ZÔÝóáþî#GB|À ýï¶’Ýn}ü_ÔÕMc¨,‡øÀ…ð'äÒÒZüxþz†1™®Ð>—„ŒŒ˜ç &•–fϪ¨`¢Ýgìwì…6éMX6a|ÀàkPúùweAÁÉŽöÕù€ätîá!ˆ=¯0b{€›AÈÍ»n]=ùŠ*Ê¿žÿª !C°§¢0a| ùòË“bš²(/¿”JÒ &‡à%x[uÀWÚÇ>ßÙ³gpúúÏÃø@ó£Ãø¿6_ð¿þwòæÍ¼ïܹQ„e'ÈEZèÊiÓ¨¢°ÚÛª('9¨êháÓcY€±´sƒ½ÚÇÛ“JK“ ËŽ0 ”N!Ù•åT}²[.È+/O§’tUÓW_±ËxÅãñ¤çå¥Èyþù¯…ôôñÔ@}ý¸ê¥KîÒõ²×{ÁKôežãÇüù¥ô÷Ú6=ãOذcG¯?a/è­Þ걊}¾àûïïSE1—„FÒ@•eÅïl5Pþma¡'Ú׌I? X­££ñ'”œÎŠ×[|dÅŠ®Ítä?C~c6›Ð^¾¡$=H¹üò7Í_Îìö*Åëý˜MMÝ”tÑEûô»++93Y‹åvc~U%pþü*ÏÉ“ó¢ç¼EHOêþ(¥bSÓNPúdÕ’%¢yË4>ð'Áf ùF5_hœ^xŒ·X–– å6ïß³ñH´Î/0êºèOXµxñÛ²×ÒðË˰aíêÂò dgB¢$þÙsçŽ6_tQ¥>_ÐÊŸpà´i„á¸Ð|A ¡á¡DÎ]µj¿¿¶v.ZüÂõ–aÃîçRS¯±±qWMIIÂ3\ù®>_À¥¦f 7ïÞЈ¦õ 2&Óc‰n®WØ|ÙÜš\Èùª("›’Ò‡q9rß…Ô(>ßG@®zOž¼¡²|£þ$o³u¿~À˜_À0W3„ç/P*YFŒˆ‹ œ6-꿪ý&Oþ:ม‰âu t€/UQÜóÕC:ÚwtQ‘—p\’èpTO½»Âúé¦3‚àÏ-+ÛJ¿$‚°£"?¿õm`B‚T•#9 nÕ‚sbæ¹ee—¸ Àu†·ñEPU¾ðå™òòªì¹s9Ǿ}^ªª\ ¾þŸdØüùïšúõ{d·ûÊC¯¼×…é¤ÒÒLÂ0׸À$bnc³:Ùë­’ššæ€¿¶v5Geù Á47OGœú=sæ4øÀ‡×®51&ÓDPz¹@?ý­bXvˆa·ÏÉè%K¬„aêA/Úí‡ªŠŠú‹hà´iä’™3‡QE¹Àõ¢Ý~»âóeª¢(&_ziŸ xá…o›m‚wEÆF¬kióç’.¹$Iözßmؾý‘VþÝíO({½I®êjê?{v)Жÿ@ùŠb¯?!€^>Ð[ÿó|A ®î.Âq“ aL¦$ %¿€1™v&]zé õ'Ô®giùòhþªÏ·tü½÷®k˱?êhþoñËm<Ý©~@v»O¨¢ø³øò Ûà’ÓY#»Ý"ç &oÞÌŸÿüóÙã™Í¥¦Þ9_௭}­¦¤äÙ¨0nÕ*Î÷ÛúÉåÚM%jœ… ‡Xá?°uÜÔ©·tÊÒFÞÉ[,WÁo®@CÃÜš’’÷¢iÜÆ[ø ©_¿×Cþ„ÇfסC·vÄÞЛ«¢h—Üî«ãmõRssnH?`³Ýœ’•µ¢Í#³pá BFÆtüÔSc’¬0äÞRSR²=ì°IIkaÈ7L$8öúëßêëCú6%%œ -,¼ß ØÕù†G–/Gt8¾‚þ„aùºÖÝÌT¯÷qèùô¸à|ÀoȘÍ|àBø¸\zÁsôè=a|àBøý A˜Ì0fóåÚçRÚ¨Q1)gt>Ë>ÖÑ£÷Cã $›`‚þñúæ®[w„|Nåó=sæt9*òóÅ0ÿ²T[Mü|€$,û`nYÙiPú/ÂqŸW̘q¤½ÝªÚEý@p¾`*‚9m*ž¥Ÿk‹9yåå‚÷äI4ýZX¸Æ<`@ÐÐåwøÕW÷År$€à±A÷Ý7 „Ü àfýÛØì8€ÏõõgUQü+økkßa3òòúpË= 55Õ5îÞ½-Ö¸ªªpvÓ¦º³7þ9mäÈJPêЄ¤h›õpÃq÷(^o07#(&W–”¤QEièŽ_D³**˜'OŽ¥ªz‹vd2D»ý2ÅçË š23Ó"ù€â¯­½2Záb¬‹9´k×dçÁƒÿ0ÀKvûæco¼qKðTQJÔ‚°Œ ¼… tJhý9/OMÍÎþ‰v…L Ã< õW_=‡5™ÒÙ¤¤òðû{–ôúöVoõTÅÎî&,{#(¬óhù„ew$_~ùû Ï/6~>„_E5_@©,:UŠÛý›hnûFÃÞŒ7¿@r¹Nhþq𬬷Í<C¾¡h·W+>ß&.-íSëèÑ{õ­¼òr¶iÏžQª(Îâ¬Ö»Œúhù†ÕK—>ÕÚâ¢Ýþ¥*ŠOÖ””Šæ-þâ‹ÃUQ|ÇÔ·ï5ˆ•XFŒøRÏ/PEÑ-64<÷|AaáCBzúk†ù‚Ï]UU?jŸdg¿jî÷Û•@ ·Kó%%kÃò ÓÓoMÍÎ^Ùæ0ÎPYöŠMMã–_ðì³cMýúí2ð[kJJ¶…ã|h·ÿ<¡ù+Vì ùùÀ;aoAè¦|ã+W®íöJ Èr.œZ›’²PÛN%,Ûm|@ñz[ò 9îW@„ÿÀ™/0ðVþŠÇ³©‹¯ßùQhé¡ù„ëî=YlJJ‹ÿ€É4¥E?H–#bö'Œ•ô›<ù;Â0úß,ްl×ù@YÙqŸžÿ«f×niþ„"aYŽð¼%1|Èð,•¤¹¹ëÖí!‹vûÎN­T•0T–› r5¿€*ÊOµ\Cý„!7(ÒÓÿ–[Vö\Þûï‡ý)Ÿ¼y3¯ç€Rg˜~@ñùÆ|饽± ¨(N0„LBÄßü…ðü?›ÈæRS÷€ÿܹ·9*ËÛ¡é$§óçb*í¼àþ‘[VÖÀ ôN¢{ Œ0ŠJR¡™)ªþ _áù­aó’Óyøð¢E#b]@{•[Vv%€© ôVTè|€*Šhîß?í‚Ì\ÿÙgfÑn¿I•¤{õõ`$§ó«Ã‹MÒg=ŠüCXö5u +Í£äo©ÙÙ7q©©Œù¢‹((}0œ ñÅ#¼Õšàˆçܪŋj”¨ñJí½Ôsüø€á»Uñù~Þ£þ„5%%Ûzý {«·z¢âáÓÃÜHXv0á8¥T’Üj pŠ0ÌV&9ySÕâž„. ç… !¿ä­ÖÎý eY–ÜîCŠÛ½¤Ë| #Â(ùÀ1¹¹yΑåËwÇ´¼c0àAù€ÃQ#77—³IIŸ>}Ÿ~©=pÚ4’:dÈhÅç›É¥¦†ùjùÑë&oÞÌŸß²å_|`'(}*Z™ß¨Å‹‡+>ßZÞjm™/hlÜb›0á¶ÈßnåÃ,xTHOÿƒ>_ÐV¾a[ózó&Å绺+| zéÒÕ²Û}ÁàÖöý #ø€ÔÜ<©ª¨(!wN†-X0Ž·Zw2‚DEö×ÖÞtdùò/ÃŽ#ï¡…<š¨æÚ‘ث󲗖önØ[0´°p:—šÒT'ürD~Áà¡……ÓC `῵íTÎby"ÑÍõ¢¢8-ù žð'ÔøU”ÃóŒ÷Ô)ã|Áã„eMÞÓ§ïb¨ªÞ¨?É¥¥u?HJ Q0‚p#ÃøÀ•·ß Õ+oýúAyåå—Æ²õÊ+¿A?À€eÓ€ èLùÑü2ªª¨$mÊ-+{+wݺ[¢qÿ¯ÈÏW¨,Ep<Ÿòè"˜B&}úÔç–•}HxþÃ6ç ôj™/`Ãø@,V˜`#¯öÂ}½ŸÔÔt ÃóW€âõþ–ŒZ¼ØÆð|]¢M*-½˜°ì} ô’¦?nÔ˜ ÍìÕî)Ú|ATƒÑ”6mñc÷SE¨«CU•ŽW-^ðñ€ÛoÿcÒÀc…ôtÈn÷K€‘¼ôÒÞbÑùÀÓU‹¿‘¨EQð*IF>páó «ŠŠzù@oõVT\ó`˜à 5äz¨¢œ£ªú/Sf榄ç 7ï^&9ù¿›íJD—_pPñx~Íe]gþ„7òéék:Ð((ÃóB[ù†²Û}B•åGª/ÞÓt>`êÛ÷AxP%—ëˆâñ|Ä¥¦~’6jÔWº~@³ ¸Rv¹ò9«õÁf Óˆo»ª«ŸŽÊ >ð%U”g¢Åø#^~y¸*Ëï 6[. úÛØ±·FÃÂò  OÕ””tšEÑV [°àç¼Õº"¤p8¶T-^|³q›HýÀkFÿU¯Ž·9T/]úŽ\ÒØl7uèOÈ[­[ ˲ª(zd¯wb¢,‡Î›7ÖÔ¿ÿ.²mûA> }ÃQÑn8‘þ„5Ë–íóÿðC(¿ •?áÐyóîÕù@ ¾¾[üެXñ–ÁàŠ0ÿÝ €Ê˜ÍÝÉžF‹?áÝî&²4¿€*Š(¹\6ÆsìØ4²Aý@K¶@·•îHXVP½Þ{¡|CÞf+÷…£-£ÿæÚ0ý@Ú¨Q±óõë/‹eŸ~S¦| 0‚0Œ é%ýÀªªsËÊ^Ë]·.7šý¶ß|³¤ó0Lr‹~ kþ¹ $7·¬¬”þ‰¿:üb þ]å?ðOÑ0 „,¦’ôanYÙÌI¥¥É‘ûMÞ¼™åÊr#£ùA>0:–£°gΜ£•ÿMe€èÖøa˜OsËÊžÌ+/O×÷iرc„žoHUõ4£åùÆ\{æÌ9WYP°TÅ;Ô7k‡: À#T’>Í]·î¿'•–^*57Ï0ìî?(ýÀ¤ÒÒdÂ0÷(! O©þÚÚATQ.B0êêêÆGœÔY[µŠ3efþˆªêSEa |૪ŋ'éùKµ}²«âo^{çΕ+fÎüë™òò™žóž<ÉRU f*úýK€p>pL;ù¤þÚÚGkJJÞ¯mÛ¥óSf&Ϧ¤|R·yó]@¸ÿ@ÈŸPHO_Þ]|À_Wçp9J óèõ'ì­ÞꉊéàÊ’’ß¹s÷†¹ŽpÜp²ÁTQtSE9`Kòå—¸ï™gšº€œ… gAXÀ[U=‰bIDAT,#M~ÃqˆŠbò Ÿ}ö&Þf[Ã¥¦^ÞêÉèò OPE‰¤fg¿cê×ïAý‚|`#ÙÆÿÚxÚ5lþüáŠÏ7›³Z§GòmíkžãÇŸ‹šÔmݺ™·Z[ò íö`˜g¢õñòËÃÕ@`‘Ñ’_`·o±•~ ’<^SR×,úЇM™™«tÿÉåÚÖ¼ÿMÍ´ð¿ß.û|“âm5%%ïÊOH?À[,7¦deµ?_ óDëÂø øÎž½© <ßššžH¤~ fÙ²}þÚÚçÐâOø®îæ¦óût':ÕK—–&ª¹^G–/[t8þ­½Y)YYaù¡ùVžLts½¨$…üôža|@r¹~õÕ„ÉzÛ*c~c6÷ ç.W÷óÍŸ€à=~ü^ âvBzz·óFZz0̵Œ1ßpô­·ÆtÃR›/¸"–}lãÇ@ žÍÄ£ ,[ž[V¶,ïý÷s¢Ù¯"?_¤Š"iG …I~àzª(¥¹ee¿Ë{ÿý!ÑìPU¦K|€°ìƒvi7REY—[V¶$r® täÊ˃~ÀÆöýíocb9 3fTUü”>@× 2n¡Š²>wݺE‘ ÉuèÐp´äœãŠÇ3-–„ŽÆìÙû+ ž¡Šò0(­-„SU-Ï]·î•Üuë.ÉᘥïÇðü–pÂJm®àq£%B_(ý«ûèÑÙlròP´ç?¨«›(>[V6”>B&j‡œÔ¿é‚þÀAH˜¬¿² `_åìÙO†y À×’ËuQˆx½­øÀqÍüŠêë¯^ºôøÚ¶]©ÙÙãÌî±ÍøÚwöìij~H†H7 ÿD0PÉ•‘——¡‡fuµÒFŽì£_i—è*Ë9ú%z¯?aoõVWÌ| P_¯*I×0<ŸC8NÇîU’¾§Š²™MIÙ˜Ðù‚Ó¦KNN>áùÿâ-–QˆB? 9ûe§èèÊ•žcvæ?p o³­f““Ûº/M¾á1Jé£U‹o‹iš?áóÅ? ¿0aUt:(χŒÙ¼Ñ6vìwFýÀ7›6RŸrVëTÁjªÿÑæ?à>rdnT|`ܪUœ¿¶v+oµêŽà¯­½¥•ÿ„wu> »Ý'4ß08_ô'ضüòy‹e0ˆvû¢nñ'”œÎ¶ý ³9”_À¥¦>žèæz©¢ø"ý&•–¦úøÁ~ó ªx«µÅŸÐñÍ7÷„ü.€~@v¹Bþž£Gïã¼Í–píHdqVk¸ÿÃóú|@|óí\„¶W‘þ XÖta¾@Q>È-++ŽvÐaûÍ7Kª$‰@xÞÂ@U¡˜B%éƒÜ²²ù¹ee¶¨_DU £ßé&3¥?Gp´^rÏðanYÙyååmž7h| ä?ÀPE9®=Ç÷Ï^ËQ¨œ={ÿ™òò‡<`ˆ"Xü‚JÒÆÜuë~™oÑ|àÀHm±PcŒ–_œÎ»cYœýðCZYPð¹¹ÿ|-¤O›¾„,”ŸÿǼõëC:²Û=Sÿ?c2m ó'L„~`Ri©…0ÌC d&ÂOß¶žÿƒsÿþ¿óËðvýD‡cB´7&:ª¼òòT’žðc´L_Rmíxý¾>¼hÑUÁkuQü­~T$$ß°"?¿¶² à%²Ø’Ëu‰¾Åç[ „ó£Ú_D¨«{¬º¸xu}Û­¡óæ=ȘLk„Œ Fr¹Ž~õÕ¡a 6þdSß¾ÿ!\wñƒ…ŒŒf!=}LígŸÒ9 º¸x{wÏPU¥bcã½y{‡ª—ôÖVÅt0våÊdß÷ßßO%0ÌÆdJJ©WõzOa¶']|ñ†„ç-,œÆ&%½ÿ(•¥ææÃ²ËUÔuÿ`¾áê¶ò ŒþèŽSQ|¨jÉ’/ÚëÑ‘~`©_¿І~€*JyƵ×4ú:öí¥¸Ý³ÙÔÔ;»4_W^Î:÷ïßÎ[,×ê5P_¿ƒ0ÌÓQûüú×#”@` oµ†æ $—kûØ;î¸)f>Ð%ýÀ¼y™™oÆâO¸2ÄD±ëúeËþ$»Ý“Œþ„íç¼ðÂdÞbÙÜ| ÒŸP´Ûo«Z²dkØ ,»Fç’ÃñX"ùÀ‘+ö‰ ¡ù"o‡½C ïñ ÿ@Âý k–-{Ë <´°0ŒèÝ›o(ŠOAãlRÒ| ãßz+Mv:»Å6¼­þÒKÕ¼Å2€È¦¤d2» þb¾@ï!¸««§2`˜[ô'¹´´îŸ/÷˜Ì0<‰ö¹tåí·Ç¤œÑô1ù˜ Øâ„ fÀ²}€.é6ä®[÷ßyååÖhöÛ;w®¬óF, TUo/`@ÈtÍaz,—øTQºÈ‚®~:Ö±øïãÇ¿—÷þûíþ$å•—³ Ï Ú]ㇳ²²ð´\– Š²6·¬ì…¶hIó£CóŠr2’ÜË€ )~eAÁ&ÂóÓ5·FÁ_pÓ@é¦Ü²²{GVr8î×ÿOæ_LÒ AR ؤ¤üX WE~¾³röì߀ÒAið§)8àðüñãÇÿ˜[V6 8«ušöÕ‹Ö1c>m‹Œ¯Z¼¸KúYÌñcÇî!OÐßU vžÀˆÇžªÅ‹sõù]?À@U»Ìþœ—§VΞý!—š:A“ #û|ÚÛÓé|Ác5%% ã¹eeÃ%§ó·²Û}'"¹\5‡_}u`8P<žGtÿ!=ý÷‰œ/8¼xqmÍï?¢nËâ:rÄ/;- JÿO·û*Ê`Wu5­ß²eÆ‘+Úwíå½õW1óÿÙ³ùTQn 78$Ë“eâó$÷c6—'\?š}„‚Í6Ñè\®ÄøjþïÆ›o¨x½'Q|°jñâí1- ­|C]? ú|!·Á6~ü>š-9³¸´´;«uˆQ? Úí«]UUOÆÂ¶ñKH? :»©$=­ÿÀ¨Å‹Ç(>ß[F> :Û“.ºè–HëÖ| 'g«ž>ÐôvûÓÕÅÅŒ¦qd -,|È”™ùZÔù†)YYЛ«¢h—š›¯Š·9Ì/š›sŸÏó S‡ ;ßh“tÇ|™¹«CB²« ˲ ”ŠvûÏ=_¨«{øÞ¯¹1A´Ûww8²bÅ;bccÛþ„úµ:•B·é¨¢´øhžˆ^?ÐâO(2<ŸÎ4ýûßw]Pý€Ó©û ¾3g¦1„ãnÕŸ4efnˆÿ¥£+Îb ñÂq×2„eCúxæ bõ'ì7eÊ>hó„ã†2„ç»Ä¨$mÈ-+[ÐÖ¤}[á? et?~>ÜOæƒÜu뮉jg£ÿÅ¥Žxæ pJ{Ñ ä¹ëÖ½rí_þ’ÖÞ~mùÓžã¿ûç?ÇÆr*fÌøŽðü,kèÜç'²Û½!·¬ìæ¶öiË`‡þd<| "?_¬,(x Àt¼›à·¹ëÖ-Í-+Ë0næ? ªÿ`’ úPçŒÙ|o¬ 0¼%5„çðèN „Ü D!ö¿í¶V|@ÇE{c¢½Ê]·îò"£Gåî@cã'T?Óæ Âø€î?Àèò|AåìÙߟ)/”. ;t]MXöOú©Å }>ðóš’’5]]ä•—÷¥’´P n44ä ÈBú£?á£hñX–(>P‘Ÿ_xñâEßðUv»‰öKèýù°_>ÃæÏÓÔ¯ßãT–ý)ÙÙéùùQ_`tT)YYËpTñx>dxþý¤Aƒöë—ÚãV­âüuuce§ó~Îb¹SÓ ‡ò ÄÆÆ7ª‹‹Ÿ‰jméD‡c€§£Åø#_}u¤¬Žð'Ü’tÑE?êœDêêꞬY¶,®YôVùÇסC·tÄVš7ÉO^¼Í`~\Ê/°Ùnê6Ûfèùn÷U ›/˜?@(WDHOïv>À¦¤„þ>†¹š! 3Hû<>>°~ý Xö±Ž½-|`C!èú>Mv ùü BHWù àQ!=ýÝܲ²Ë£Ú9"¿ ÄbÍ7Ôæ ¾×`]nYÙý‘’þ°#W^.ø@Sp>“ÿ@åìÙû©¢Ìð‘ö À‚A÷Ý·R‹lUÍùÀÉH>ó|Áž9s¼•‹hÒq(]Ÿ[Vvkäö²ÛmôØÉâÖTl'vLbÍæ¯[ùPQü~TºêO¨|l$,;-—þTU_gÍæ Â"@;ßkܵkúÕWÿŒ5™ú°ÉÉ—XÇŒù¾q÷.ufÃg¿)S>a“’€±j *{ZUTôîOhä ñ'Ü;w®\YPð†÷ôé_zOŸ¾Áß5Š*Ë?Ó· ýÜ7ìØqÂ6vìÅ\JÊU ”2IIÅgÊËåxG–çøñ_6>|=•$*57/<ú‡?´Ÿ™ÓËzë?®b:³t©Íþü]„e¯¥YŒÉ”Ê7ÅÓ„e·¥ üÑÞ§žrEûšÑæÎ",[(X­£©ªvªíöŠÏ÷›®óçž»KK{³3ýÚãNçQU3˜UQÁ|³qãÛ­ü ÎÅçûªúAͲeûôíN›FlcÇŽíö™œÕz·vÖÈÞt=úLTúY̾¿ým{„~`—âñW]ue›|@•¤%ú»êOX‘Ÿ_OáIPúnè-~1(?ÿ÷J °ZçŠÛÝ¡ÿÀãÕÅÅ]ö'Ì]·îò*›$w¨Pýþ‡µ³\ÂÛl%‰à•³gïP Šâa±©) ¡Š"«~ÿOõmB§Ò;wžê3~üE\JÊÄDò³7zš¼‘0̵‚ÍÑn/©ùÝïÞkw‡^>Ð[ÿqÓ9À„Õ«mîšš{ÃÜà Âqf x‹—ªêTQ¶X†ÿðëGu$tÃæÏÏv¾”ÊbSÓÅçûí‘åË;=ÇìŒüˆKK{£3ÿöò %§ó¸æOG¾aÄ|Er:(>߇ŒÙüḩS¿ÖÏ!gUT0ß~öÙ8Éá˜ÁY­Sµ¹â–ü‚sçVyNžœ5ØûÑG›…ŒŒµCJ ;@éãÕÅÅQÝOÎY¸p(€µBFÆÕz@}ý¿ÆOŸþ£˜üTQtêê?²bE\Zó¡óæýLÈÌ|Ãà?𯪢¢°»(aïÛÅwÝõ†)3ó^ èO(66N:²|ù¶xš@cEÅ·i#F¼O8n#IlRRVŸ ú5ìØñ·VG Œ(ŠWr:'VÅt¡Ò^e?óÌ(ó€{t>à?wî–še˶íñ»ý‰D5€£+Wð=û4tB‹%ÜŸpØ‚3u> 9•Ý‘_pìõ××ù@˜?!1èË>gN+Œ˜LAÿI¥¥©þÚZ;€ :_@$ “Î8öí» €®ø°k/ßy)ÞCðž>}W$x?¾—¾Ø¤¤pB£~ Î|Øø@¿)S¾ ùPzØL Šb¼ù†›rËÊî莹±Œþ„ŒÉ”ÆPí¾1aÙxøAð'é©AùùEyååI1½†,ƒ¢x€áù˜ùU”ù T7?º…JÒšI¥¥wxäÊËYPUu2ª$ÕhŸÄÌöÌ™ó…vX× % óç¼õëoho×áÃc¡çHÒqªª@jjŠY?P1sæª(BOr $…ªjqîºu3ÚÚ^jjj‘0ÌFÈÌ,§Š"k±Ìˆ¢g[GÂu¦¼üY+Ñ)æç–•ýæúÏ>3·åÒÒî4ÿQ£>n¥íö«ªŠŠâ¾sž»nÝ@ÈKÊ9à;ª( öÌ™Ó0jñⱌ | ÿ@˜~ X?(`˜.é*gÏþaÙG@i­öÐÂ0¥¹ee£Ÿï-è·rDq)Ð| ¯¼Lø|AÎ /Ì&,ûËXò Ÿ¯8Qþ„ïè¡ka;ù€JÁß&p¹Žiù†ñù˜ú÷Ä Lòg#›’òi¿)S¾Ö­d'®]kò~ÿý•bcc>gµÞÉuuo¸ýE||@Ÿ/P”'£þÒK9PÕ÷Âò œÎmcï¼óæùä,\¸=,¿  þÃæÏ„·ÙV†ø@gþC þ„M²Ç“×ý@uqñÉéœò'´ÙnNÍÎþC›G çùç¯ÒÓ·BÓÈτËUÅÛÜXCž{îJSß¾»õùÿ?ÜÆN›FϯE øy¢šÀ‘åË¿5ú²K¸?¡eذûÃôÝïO˜æOhœ/ „<œèæzQC~#Áü‚q«V¥(^oSOø€Ò ÆsâDH? úýugs ÜÀ_[;5œ¤¦v»~Àè?À a|ÀÔ·oL“5qÍ\yå7Â!a| r «“æÆù‚éÑîW‘Ÿ¯¨¢¦è*`üwnYÙÜh!EØ|‘Ä<_TÔë'ÊÏ_Ü^nAèÈý õ|C;£JÒQí+bž/((Ø¡™ 4hÝFEqUG®C‡Féó ô{- qÍT̘QEæ!ǵÃ;^v»ßm”ˆv{PUý'“tñÅ»:_P1sæTQ ))€Ë ˶i©ûmcÇ~Ê|[XØ,:@°Ùrr^x!&L£×ž9s\æ~@GñéT–ßÊ-+›¬o3òÕWGkgKœÎo÷Ì™ã ó Dý ·ß|³t¦¼üe«µ·Ã „k”@` tÂ@àw@;þ‰È/È[¿þ.ªªÿ H«~ÿl´çOH%ÉȺìOX1sæ_Ã<J=TQX*Iù(•©$=¤o×’oXT”pŠ™3+Ç=¨¯·QE1@ ¾~EUQQè'/ìOãεŽuœ*Ê’}¿øÅ÷±6l«ÎlØ`W¼^™°ì­Š×û±çĉŸ»ªv²Õ[½Õõúÿƒ-Û˜ŽT>ÃIEND®B`‚Carla-2.4.2/resources/bitmaps/dial_12d.png000066400000000000000000000011231420416754300203020ustar00rootroot00000000000000‰PNG  IHDR Ùs² pHYs  šœIDATHÇí”?KQGÏ{f £«²³÷9,6AYØÆRò‚X$YëTéR-ì1`‘Æ& `a\Rø%D›ÂB«ÿd-ÆÝ¹)FèfI_3Üûæœ÷Þ0\CûX²Uä‰fÀü2ßÍîá¢v/šû-oÒ¾æ%Ù;ís>D> ðGšoMù¦<¦ óøº¡Þ|;ü« ÿܼ§h˜M>FŸNãþÈPôÔ<Óô?õÕQ­íµ¥*‘¨ ó Ã}íÖ‡ûò .•HªíðŠ¨¨¸âJr **•» eQQÙñy þ ìˆŠºòm¼ ç¢nßË=„x9·/*ç®ðçøë¢r™ŸJ‚ä§äRTÖ¯÷—¦¨[JЏ%Qiºq° ótÑh-¦´iÐ¥óVꢲšUQ©c­7¦–V`j€ïMX[àSZALØ¢5cÀIp––Î83fé~¤ÞŸ+ª×jhþ“  š±œ‰þÀ{ɧVëÀP¶?-íg´ní6`º§Ó º§1`·m°§D³iÑ,hìY0`æFÒà£f.&-˜”ž°šFVéAÍÊU)k¢.ì<‹nÇ•\(*k7œ”B6 ^ÈÆ%çÝvÎH$*ËI²,*‘›‰+?‚-Sá‚ÝD7ØåÂT‚­4ßì:æ7|£¹û—2¨IEND®B`‚Carla-2.4.2/resources/bitmaps/dial_13.png000066400000000000000000003265511420416754300201560ustar00rootroot00000000000000‰PNG  IHDR  ¤æ: pHYs  šœtIMEÞ ) z6¢€IDATxÚì½w|Uöþÿœ;#ɲäž^'q Jb“B_:IÂÂ.l¡!¥Ã² Ë Ë6XXBL ¡÷ÀNè-͘–î*ÙV™{~Ìid˶$Kþð{}}^¯€Gš¹÷êŽ4å=Ïy!¹9¥9ãePî`4‡zÝG‚¶ð‘o³ïs2Ñ)‘•¼%ÞÑ,ù7fg¶µUà)6ø–ï[¾ìѲGdï#âO,ù,¢]G;øÕßýäÄiïIáó›74oMzžbÏ/ܯfÕÙÓ$h9K®ò×úwÅÌÒHo| :™%Ï­Úoðk­y¢»ÞïMžbTÿZ=Åž[½#½E‰nïæÎñ{îð–xƒžb«vþhç·¨ØSìù"{Dö~ ¼c[zŠ=5¶öu¹§Øs¶í“¯É—[jçV䔿zŠ=ëT›ì-ñδ¿O¶‡Ê \À `“Ñb”µmokìé {Döáï±ä}4  ¾ß€ùÍÈ ¼Su0=]@Ë÷-;Yòaù,ù1+xK¼¥žb¡¦é)õ’@xK¼w©ïBØ[â-Ì€:È€=[¿3S!yÁ’k €ÌVë<ÑøecC¦Ðò}ËN+ÔâY„È‘=À@õâªLun ²04{Dö8!¢LÍ‚4ZŒw3=Xc!ö,yÌCí®¶ímMÉ´T¾´|XùÒòaÉlã«ñí°SÍÆHA‚ú©÷v$ÚÈÐéC©¬²ìW,yK^V¾´|D’³Ð >t¶Î’CêE=¡O½¬ÜÍ!¾ÀÑê%N²sÀ<€%;tÔÌ’ ¿»­&-ž4„ƒüFª®ý®¯šUõ}’ þ¿[°äoÔ®Žýe•eÓH£JJÔKßFçTÏ©Nê‹›5(+€ufýQ /¬7V£¬ýjÿÀ]<ê“¿ÁÿªjVÕ–dç^÷ê‡CƒHÐZÝWãûÜSìÙ`̃ÃKÖÊS_œš¬^à8kŒþ±eù–Ƕ®ÜšÊ¾K>Mýù“¯Æ·A¨F­«•օǤœ†ëƒ8V½× àªêŠêÿ¥ÚyÞø¼|³Ôâ“@ôlø56x^ùÒò‰¤Ñÿõe¾#AçWWT¯I¥c+Œ6ã:˜—jL‚þ „êC»Î1ÆTp¨gÏÒÉ¡öÕZÝ«_þÁ™ììIçÞïþ †àqÿ7þ‡ì3tg¯°¬PÖ‹ÕË+‚uÁyïú^RGÈö¡~]O±d€óë½ÈÁÇWãûqà±° Öü±º¢zeO:ŽL}«q€}HôKÿþκ£®5·tQéAéèØ O±ç\O±§Ù[â]˜Îvû¢/Ò ÝžÛÂÎF!Êü½Á.p6¢|€;Ù¾À26øïéâfÉÓÕºdëx;€µj€ÜvïÀSÂ)®ê ¸æí`ÞP¬"A+ºá') aç¦Â õ¯ÅSì¹%>ðGo‰·ÍSì «Iñ°êüóìÙãyǶò{6«¶Â‰òZùÝ4òµÖŒvǾ‚¹Ï7-Æä4ó5ŠÔ“ ƒâñ»åge€œ “ܳ‚âÖ~Ï40<Åž`<>þ^俳@0¯T ÀÒ^à+U_Ó¡øÀX˜|€<“©Î­P|€aãåê…Þäæ‘Àî^ä;Ôl”¤ÄfWÍe•å²äe,ù©ùxRá…µµµ·˜¤^ 'Ù9`Þ…%; jV/æuÛùÒÉqW3€:6è²ø@µýn½=húª©>Þ”×Ö~{1Kã:|3> 'ÝX]Q•ÔÓÆÀ: ú‚%3R|à%ûåËÊû×~S{ªQ‡ºËò—¦r—¬{õÃY2Á¼Að01| ¬²üPñÍ ä[SÆýaíܪO’íØ ØfçO«ÏòŽô©où¥ß @MW€9=é\ñêÃ,¢ßüø¯#Ïqmmmm6€ƒTÇ!€îß²,µ)·‡âØø@äzÀSìYâêçš9ðøÒ»w“p‰ `º©zNÕû=éˆð÷X²À­ÿ—@,XX4¹¨Í‘ã `}p/Ÿ8'«+«¥ŠÔÛù@d¾ßÂ)þ2 ‰ ¾¼º¢ºGT$2õ­Æ êj$è×-?´tÇƤ›Ìõ{½%Þ=o­/ú"Í‘.>`é>Î$¸æq|h7«×XÎ?˜.>pG;>`Åtä@ô X&œâêžð{`ê“–?C‚žN€œëÙ‚¹Ýo’å7ª»ä§Øãó{nNQ?ТÚzŠ=×%ÚùͶ>Oƒ~`£íÃt@µ1»ÀSì9Àãj±Zsk§Æ»FL&rJs eP¾à@ Açøj|Ov@NiîP4>‡ùeÚ”>ðŽM?pp>`üYu@føÀ¹ˆên·Þ€É`2@¸Ï_ë_Ÿ®Î­ð×ú×’ ûaþLÏjÏ.´ÖÓ³õ»Òݹ2$ÿS¤[LÂâ8zªøÀ*5 gÀ¦ Ò[|†X|ÀºÉ4z‰TEcã„”øÀaÃÊ—Öý@„°õb"qàêe•å¿ezŠeèÉò¥S’åÖM^?PV9yoÀ¸ à1ê¥Tø@Œ~À§ô]ò¡Ó‡Ò°ÃÏŒK¸ÔË[À⦪Yï%ˬYß­³äõâàÎø@Ù’ÉÃAÆï§64ZBü§jÆÁdzŽÇ¾T3€x| ¬²|:ظÑóû.@ÜZ]ñÁÚ¦ºWŸjõG‚ÖÙùÀ˜‡—ÌŽËòÁXð‘‘Sãe–|×Ú¹4§Ò9°äÓÕ§ÿÉWãÛ #Ê~àLïHï¢ñ·î7Ž¥\B¡Ú® LªžSõzª&·„ÏR»q9ýæÿÀo…Sä =}è –Ò­Vb0>!n©šUµ­'€Ñf\‹¨~à?€:©³ßŠÁ' †³Èy¨ H7 Ð#Áúà¥éè\ñ‹Õâ¾ßFÀvA2ð¸A#;à3iÔš5(ûèêŠ>êiÇ€Éd@V±ä½4r˜÷où¡e{d`Ç+Û7÷@2 9øëttF«q=KÞGMý¯­ÎãÆ¨+F“>pާØSßÇúâg©òýБlï->0¸›Õ¬H'ø£:ƒ‰voïB4¿ Q>`å©-hÞД8Àݶ†}VÛô»cfÉäÓ˜¥Õ ã¯õ¯HxÞï,ùZÕ@À=¤Ñß|›}{º›RÀäÂ)‘ Ëf·úký·w»±âõïÓ4ñ€§ØÓ–˜`±Z¬ÖÜÚéiâ/ Êæúj|Ou€xl6ZŒ)iæo³äb$èx|àO0¿8mfd€üæý@K¾ÕzÏÎÎR3ò@ùÀƒè„\ þöe˜Ü….øXÑ |`µê+¢óQ*Ð{ù`p{> £G²Ý‡P­f¤Ñ~výÀžäùÀ”Éóæ]v ‹ôWS’°~`ÒâIÙeKʰ ?Á2´4>РfÁ£³ä ZHŒ,™<×€x@"ëwÐÎ/˜²zJn¸Ù¸d}•~d·UW$ͬÁï±ç êL;VVY>=ì ¯±Õyÿ f¯[õy2=+>`õÓLð²µrù²Ãq(¼`[Þ} ¬žóþ©Ì½âV~A„ìTÓr€—MÅÄwçp0ô+PÇ´â-Ë~XÙ“§è6ýÀv;X à7¦—.ó`mí·<>z®¤wÉḫjÆ»»Rè3Šœ©;ð óöËód q-ØBv~0=°eùÏôT;Äç‘Ï8è„A/ 8jÀQØÕϵQ¸´WÉḳ§ŸÚ o‰÷ o³dÀ“þZÿy€íz wlþíP¿Ï¶mòº®MWçê×µDuÞÄa¾Æz/2€Mwox/°Ëä`èº@B¦„¦¾Õøƒ\Ð~`ô9¥‹Æ˜®ÎØã-ñ^Îvû¢/Òiæô±ossFùÀ™ˆÏì’þF˜|àéä§">ð©6 }Ìooóétð+¿À“<ÍÕþZ_;ý@Nr :Qñlk÷ø]²|à–lIñî%MÜïÛÜœ,¸X‰×ÀmþZ÷²q•ÜЪþ}ÜÃü‚=Åžõ*I¢ÕS칦ý:ñøÀ£0÷wµæÖ§7}ÕØC>[(ƒÆs& :¯+>ð)Ì[ôÍF‹qxšùÀ[ ×7‘ I]ñ €YàçÁ¼üËcÉ·YïÙùÀ™È<ø‡Z<#¿žíøKº;·Â¦–fÁâ3Ô:+¿lhÈÔ°$§!è ý€•F:ÔÎ,ÿÞàUª?¶øÀP˜Gª¤ùÀ¤Å‡î•Ø ó<Ò!¿ aý@ù²iye•å‹Hã'X†Så@²ùêžñ4~Š@ìžäÄð.õåONW[ûí|clðõÝ•‚~ÀúÒïÖYr­Z”;.¯ ý±ÒâÉI“W³š‚¨Vp't÷Ú¹¼“ìGÏä¶ó-íø@8¦½>ÍѶ#øK@Vpa=F^R]ñAk SÝ«uÊúÃÔ¼\¶dJYÛŽÀ•öŠnJ’&þ’ÂtÇK>EýÙüV÷êgN|dRdXÒþMwûÈŸŸn Yú@ôløo÷P·>c¸;Ü:Iu.¬Ò½Ú9é茶ð"˜»“IÐC€úéùkýëŸ4øk‘%Æ~£H ­wä8çWW|¶³¢ÒüN}ú§,ý@äz@èú|6Ø@ÁÝC²:kRëªcäŽËkÏ"©ŸQ>pφwƒu¡ÿ r¤—„ÿÀ’G¨¶“—nýÀœ>>Ð?ÛH䎗Ac˜.-ÖOÕŸa>3š¥ü5Ì“UwúF+ÓÉnWg°ö|`'ë”\„èm¼ `•pj×ô„üQ¡Às ð”à!Û¶Ýï“å׳䅈êþ–ÈÎNZH‚.QÇðÇDùÀ*©Áï)ö|”ýÀWª-¢|à¿0÷÷ZÍ­Ÿ‘F>pÌë€_uÅ>¹ïj9µm{k:ùÀ›6>PÜ ™éêˆðóaÞCäÄÑä”Âü3€øk}™æÓUŸhѳ™Ôüfn’ÆRÆðK=Ñ|àY˜3}*ÚñVof4l| &¿€°Ñ"{‹˜ÙøØÓ¶½59ýÀ“SŠSä»aöÕIP?•{ž˜²‡äÅl‡0Ê—N™›ä-[L…½7)>PV95ÿšCÆ©¶õSy¢—äv¶vù²r'‡ÄL 4ѳ#Zh÷VÍZ“ì «•8×50‰È§qÐ8$£ÙvLµ quÅ{IKü°Dóó²%“«­ýî"€GØNY{HhÿÜgï½^z¢ü‰„/»ì¡ø ÑA?pFYåa߯%€<Öþe´€ÄbrÈeU3Þk­Â{©ôm6åÛ|5Í>ðŒæÖ.,œX8ƒÐ8ÒÈúÌ ×É©ý«jÆší©u ÅÎP‹+È7™þ=èøAf Êr†šƒƒœù®}̆x`íÜ÷6ö´c+l|$„øÖkní[û~cP[k`Ùgó?Y”zWCñË”÷I_Ms,5¿aƒÃæHCçO{}š#¥žâ„âÛü ;òšû7}ÜZ Sb•n>pü®>Pš >pŽ§Ø³Ë[â½*íöE_¤%RåûÁävýÀŽLó_!1>Ð`üÏ4ðÏ>ÂA·%Àìú{¬NmaOø€e'˜÷ùÏ’ U ðÓ«¸8>`ÝJ·¸Ÿ4ñ@’|॰ò þè¯õßÑíÆ6>àó{>L°ÚëêÕ€uš[?3M|`5¢ú.ùÀ‡0¿L5F‹œ–f>ð†:#6‘ Cãñ?ªÎÍÎ ÈeÉ·XïÙùÀtõZ¦øÀ:ô/5ëøÀ¯Õ™ÖX|@XLÂâ–zbe/ðÕj1.Xj㉠Z¥þŒð‰Ö õ2`Òh¼Å€øÀ¤Å‡íÓ>;’áON-e#ük |(KåK§[5ëídîaîöäôåO>’ЯՓôd¯%쑜ÿ@ù“‡›#ÎûfÐZÒôWÍLêÓøvàæT±´ß'0@o³¡=ºvŸ®ÆÓ|Õž”U6 0.d#T»9½hUW¬Ù”êÜÇêć@ó{6àâ^µïE#¿øp˜ÆúŠÿÐ`ñXõœ÷¾Hµc+<Åž¨°Ã_ëiñÕýëwAÞ~y§pXn Âjª×ôpuÅûU=êU…ì| ÿ€‚'óöËû5òû9ó³ÞQ§ŽBâ„Ѿý€xP'£­+·T…šC? Ão ¨ÿ¨~Mº;·ñXÖÈVš§v9 õÛ3Àþ§ô¥æk­÷"Øx×ׯv7§‡Òœ_¾Î–_ðûîøÀœÒEãÒ_0ÇSìÙé-ñÎOg»}Ñi‰TøÀ8ÅF!z aç_ ƒ|àt$Æžaƒÿ•.>p+K>ñó ,ÂÎøÀ*áÔ¥Êæø3L>Àª³ç»á‡+>p*¢| À¥þZÿÓ @ñKõð÷ô HÐE6>ð§dø@£ú·®gù9<Åž/<Åž&õ¯[>p€‡`îïuš[?+|`À4ËõÕø–u€âëñG¥™¼ªÎˆ$Ä_Ms>p;ÌGr€Îɸ> o¶ÞkÏÀ?3Èþ­OïŠÜîέèŠL‡õx^-žŒvþ„@ïèV©Ýü_èzÆÊ*§î]¾ôˆTó ˜•è$¨HéNñ-«œ2Ì@h"ËP¨|é´ó’ä–~ [gÉV~€ÖÕ³«f‹Úo~8$+cTÄÃ?µˆ[ß0.0µÚ‰µµßÍñÛ[ ÞfC,®®HšXY»u–°ôí|`Òâ)ýHð\ÊãAF¶mc ­ ‡ötÕŒwê’ýè±|€:è&–/›¶C¡ócgtSÚ ÐR6œÏ®ûVK²[aúH{~AóžbÏNGcÀ€#ÞÀÁ@yÄ`Ú¢§È‘½ºjÆk)%5؃¥°ù¾«BÍáï@†ä°†OêJÓݹ·$g€_«Ååø‡è2¨ß§#_Ü’~>ÀÙø@Ä¿:2€ w|õVpO¸L>àH'¸V=-‘$ÄÅÝñŠ ð O±g{Ÿ~ /~–‘"ûÜ™~ c|à|˜|`Pœ6ìGÍFϰ·|ïO ¸…%Ÿ„ø|À®ðÆiâáÔ¯mÞИ2°ÒÁÏ°ä®øÀñЏÕ[~¤ÀþÀ’­£VÀƒ)ê~kãö×úÿÔíÆÞï žbOƒ§ØSï)ö¬Íáé~ g‚§Øó¹­½©^ñøÀÔëjn}FšøÀ*ûÁÊ]Ø È*ƒáµ0÷ù7â#`ò©qø@ø6ôÈc)o²Þ³óÓ`~Yþ•A>ðµxZ{>ð+˜»£UÏvü5Ý[!CòDùÀ¯¬X|€Ð;|à9µx L>à‡ˆ•;=—rë  aigðŒÂAÑ«þè U(/éü‚eÓöJ‘(ýJ,ý!A>pàêÎBïàðé îp¸|é´ó“äÍ0w»ÛÒtëOX¾ljÉSÁòd \Ô#õ@'ú¸ùe•Sp‡B“Òm·ô* /OòÓ±ùù€™I!OäI€TP"Òó7$Ë _K¶vÐláÎsÝø½€ð¡ˆ^nà0 ½è˪+ÞîÑQ²øP÷Õ4‘`þîþÓúyK¼×2zõÂh‰ØÐV®ûÎO=é8Ò¤”'ÁüÎíˆä•÷«quÉ€Ìã°ÜNºØh«d0ðòºó×ÒÑ1ÃJ4¥€–íx@KÖüßù¯nøòWéêÔJ?“üP'£Mw¯_j4ù€æãJ¯÷ÛtwÞŽ¬è¨â2•_@z6]Ÿ>ð¨º>lâ0"õ¯£ú;¿~7XᎠñ&!.iùÁß“>àã)öló–äôñ¾øùEOù€Í@lá“LóÓ`åmÏìÑ`5øO:ùÀ èÈv#V?<Û>à ðË^ìšðá$p¼<Øø]î¯õ%Å®cÉ–ê)à)ðŠXþwÅã Ä óÔ{›ØÀ…-ßûS2zKr&°”"j¬t‡¿Ö“ZÞŽxÏøŸ0÷÷Gš[?;|`<¿õÕ4wÊ>€¹Ï¿5ZäÑéãžÂA/Gó Äáñ/Ì ÏsÓËü;Yâ7ˆên²Þ³óSÕkÿÎ ð­#AÃüBžÒhÉ,à{`fíhJ³ÐA?ðLfù€ßÒ0€aãªÒ=ß“ âõ¡)> ±f¨—ø@µ5ŤåOXŸ¼ÿÀ‘#{À˜Š-ý`~AYåaEdzѶ€pùÒi¿JA?P„Dó L(‘3lœ“`j Ò‘_ [|€‡”?yd1‡C'ƒäÑ@(¿]—Í€x‹ }eŠú°Gg‰oa~äŽË+{ÓÄ!y c£m/í⃉±º¸xØG©X(>o¶iãîán >aè_9ŠhG³[¦­€xäx±ºâÍ@ô«œlè^ý°|`ïóööåŽËõjnm*€­ˆÅÛ¤‰ªf¾Û㼂ȧ1ùìŒð¬Aî#_yp:ž×[ëÎ-mlˆð«€Â3€úæ­|€‡Y2|5MCÖßöõË©vÒUØøHˆG€ˆ~`êPsøGäÈÓ*]8þ‚Ô»‰Šü ʱ#h—*Bè9¸!|à¿,YÐÌa\o½gã_Z|€2À±ä½ÔÔ_Ú ;§tÑøLð­Þ’œ¾ü‚¾øùEOø@ @Ö±Bùf–œóÞaP7«7x6]| X8è&`Ûv{­oX3¿€Ûµù¬pê×õ„X·kP½HB¬f‰µþÚæÎøÀ/”àÁæ?@W¤Â®T‹ø{r|@, £úú‹¿Ö—ȹ¥¼\-Z| Û}ÿƒäL`)A”ü)Q>@0ùÀÌ4ñ§aê@Bü®+>ð>Ì}^k´ÈcÒÌ^²ñiñøÀ-ªó @çf€ü@&¸Ñz/ ÿdüðóÕß-z¶žI>p/LíQýÀéjÕ½À^P‹>0‘G©½ª”=Â3¶ÿ€‘ÖLÛN†P sÖIùÊ!HÙŸ0>Ðd÷',ÖIˆ~,%Ô‹ÝÆ¤Å‡&‡³Ñ6@¸|éQ¿®šõF ùœX~Aù“GŽäpø(q8232ÈŽëdEÐê2ÚñÅŽÉil´ ïxÖ æÍ«ã¥ª™oþä,ÑLÝŸpàþw2Õ=ÄuÀSØhë¯Ø€½Ó-€x“4Ç›U3߬M²S1|°ü²Gd£pb!œ…âô!æÂ‚vâ]Ò´7~\ZóeO5çíøÀG&øåˆ€È.£5œ§¹5@ €x— ¼±ïÈ៧j†/l|`{„„ýr³3KŒ—#/°'|ó˜‰%•V§I{@vŠ(ƒDó ' ÔdÜ €Y²ìj97ŸØF›±ÑúQ>ð̓ŸU|€9Ú„Ò…ãÓƒ~â†Éø<µ¸²£?a=_lÕ/Ðsèº ñK?БÔÜ¿þƒàã DiÎ/0,>À$ÄeÝñŠ ð O±çÇ>>Ð?ËH•ŒGÇú;2Ìø<€O©°oÏí–<¯ò ¾êÑ”~àF–|¢m]«Ó݈æ ¾~àùžðs°ë^êœäªü§ø€]?pe’| ç:–ržZ ô/“4%î& l|àn­ïÏÝÀ[’s=Ky™ZÜÌ~ÓC>ð_ÃUwwúk}ÝòÕâ'š[ŸÕs>_(ƒ¡ˆê.ꊬA”—f>ð¢:#6‘ÐŽôÕ4ÅåVý‚_f€ü‘úF\>pŠ9#ô¿Ö·!][aòñˆšõ“Úñ>_­×ªgë÷¤»s+dHÞ‹H~Ûù@¤ø³½À^R}ž€Ÿ`ô.0­Ûmù„$ó †NJ“O+)_zL*| ¶ú–ÿ@·‡Ù‰ãÎðD |(H–Á"–A#E>På?Ð¥~ |ÙQý9šÈ2pËgµ[¥Çõ ¬ü‚kj‡Í( È)€,ãPk ¬#fôÀÍ€Ø ˆj@#ÉODËìÑYò·¤²÷ÊPzí~×ënq,ê° S@Ÿ¢Š¥öÞÚ¹o%„tÚ‡€­ºæÖ×9eœENÉS@ä®N{QˆdÐùa:ž¦Ûø“ õ½*J6’ ÐM>àø,ªXÒ{[Ÿþfsº“àYÊÕŸ;}5Í F_=æ5×Ç~$ˆÃ>턯nüø“tvj…âŸÈèa­o‘€°_ÞgŽŽ…4îQ/]„â*¿ 0~G޶éuç«|5Í›"€ànãb[~Á¢ôò‚€ÿ£ôMÆ Ö{‘|óà†êÀ®°âéÖ„®±ñy èöÏøÁ[’seÏ[닾Hsô„” šgñ}››¿DøÀ(`Û΢êöVL>ðŸtòãÛ­KˆåùèœÜм¡qKÒP|Àzœkù¾LB<Û5 ãXÊË®J…X·è!ÅLü:š_@÷$ÊþÀR^ªkØÀoSç¹X!Êîò×úb¬écž”yнgùF5°O4·óLßæ¦dHE"XØž5гœ y$Ì/ïdWQÖ÷Áºà×f §4¨ †ÞE4¿àiæÏ«3b3 í¨®ø@ ó2À.‚y?àe)c¯¼%9£VɨôpùÀ£æŸdöåç©õÚôlg¦ù@:áÐs_Ö5dj6>€ö| æÁ¦7ò ,>0ÐÎz‰¬U–I£ñºâ@’|`vÕlñí÷Û‹ÁZ[լ׶$º¯¦i·§ØS Ðâ…êî¸Û›Í²Ê#÷äÁ`cBmí÷ûÁ|ân”/=ê‚$ï›aîvw—úò¥G –!y0i<lŠfÀlN%¥rïØÁ€ä–/;¦C¡ƒy `Lš:å›ýXµÚW€ø˜Ž÷ªf¼žìáÚºý7ù@ÁAä-ñm¾¤‰vŸÈü~Ú&€>bC|jlú2Uüvú­z¿)óö÷0È ôhna꘾iŸâ#6ðIO< í¡ø€ùÑ}¨gð¾ FÄz°.åê¾–Ž«f¼–´ûb"¡ž¾À._MóF±þ¶Ïšƒ¡ÍêÅþ ŸÖïÈTçyã óÕ91úÙFWã#‘ed¬–Ѻ‘üð×6¬5["GŽ~À¨ùã~™îν%¹VíÒ31|`ëÊ­løéJÀpЦ½>+Í|@þG]ú8ÌùÀ¦»¿|;°3ô”š=P·;|`!Kn¶Ý-W‘!>ðm苟e¤ÀòÆÉ añë§Ú¢ü ?ñmnʈ~Àâ'#j°ÝY4ôœ.> nd)gÝÝ0¯ñêèáÔ¯oÞв~àf˜·kó>ÿÔ8¶>°2áxKr®µñ @ÿI\‡ÜÙí¸D-Ö°ßõüQ>ð—îøÀ™`¾ Q>pVøÀ 6äˆòïºâï Âøø¶í-éæÃaò£ãñ›ÕœŸ®Î‹ÐE0ó rXÊX=¡âÊÌšþ›>Ð¼Ž„x |B<> ü ÷¦»s+dHÞóØ¡[š‹œbŽŒžÍ< •PW?€3Õ¹$èY¨Lïö| 7õ€òÐYò`¤à?P¾ì7}IÓRäEíëvy˜-«ð<` ‚Bñ(œAý@èj˜ö±úw}¹<ÔÞ³´à#ç›îΘ ¹­î à v5”¾ÇÕ_Ëø—Ò—6s˜cõ„°áOŸ¿Üc,CD?V>°@] IâÊ>>Ð}ažòË—¨Åô O3ÍNDT?ÀqÚb˜|àE6ø¡tð½8±þ„–ÿ€uš¶ø@;A½hêRç7"&¿€^%AÏuÁ¦*ýÀ/ˤ¬[ô@¥Èηñû’á©i¬e¿ï!ø7%ý¥»ýµ¾˜ÒuñøÀ j`ŸinçŒ4òþ&»ŠÜßëò·å'¦xû žgÉÃ`òcãñ H…ñëôòß.–t1Ìë–2Ö¯Xñu±Høk›3É`òܘü‚óÐ{|Àò8Ï€ÅÐ ½À^Q}þ6> n•¨7ø€•ÃÑuøìÂH~AŒ~@ñ–„ùÀ¤Å‡ç¦$!v¦Àêaêö±ë:=Ì–/=v0ËP €‘€Q p1` Â’%Éò¥G_X5+©'èÍ0w»'F?pàê®þù{ƒQ† È}@\̲ūô0w1§c-ÙëŠh~æÖåÃ=4{¨³0{5@Ôñ,A–P ñ jI8««f½’ €=zÑ”®œ‘Ùàbƒ³H#u5ì²ð¿S-HÔ’æ¨hþ¾jF•‘d‡‘P|À*æ¸Uwxœ_Bý ‚ W¡w 6“S«ÉÄStÝ«M‰òñ‘®yôÕ`܂ֶ½µÿ§—~´$ÝÚ#V?Фø@©pæ;öé>`s^,ý@HX9†-|g*'F[è*Dó  `ÓÝ_®5†4gAß¿ôºý3_;àsÕç|®#ë a^Ï“ž«3Ä4>#øì­àc¹9=ÐÒÌ®QWCLB›ßòƒ¯K>0»tÑ„tóÙžbÏ7Þ’œ+ÒÙn_ôEZ"E> Ǽ/Ìg Šå?>0Ò|ÌÆ'ÀäÜŶx8 |À»pÐõŠP»õ÷ ÖÀ§ù…S¿1U>0à›õT|@<Ï’;á<•ŽU|ÀJ mM…,²ñ @“&þ‘8ðä'ÍoÇþ–(¸Nñø† \ÔC>ð/DùÀ_á׫}ª¹g§0@8°:ªÐóÕ4ÆÕdd€ìdI—"ê?ОäÚùÀcä‹aêŽ7ûŒúž‡^áü7Dëœg €åÌóŸÅО(+÷ÞàÂ* `é4«~Ñ;ú{ý1^g)«’áe•Ç `#8\8ô)ò«~A¿ÎüÊ—éå †ƒh8Øâá`9ÄCiËP¸|éq¿KòÙâf}CG®YƒÝÞñ·RÂP° â¡ æÙ©šñr²‡kK?P¯gïå “F`É,Lý5´?ØÂý(λwmM5¯ÀŠvú-:$U8|5þ xÓšS^ñ§ÚAwaæ> Üà ž«œ#\žÉ΀¥<^ýiòÏæ¯i Ö‡7€#OQºð€q™ê¼x°Îaí!µŽ…»¯ÊœbØø€´ß”~àó'#| P? ôºý/Lw犜£>ý󾚦X>`´ŠkÔwAdˆüÓV¿à&ë=[~Áïv+€¥›,°ñ«ÿø@ÎlO±§Æ[’3/íöE_¤%RàùãdÐgÖ/ˆ©o¸„LérG±”çÚô@ü ‚É^6ý|_w×v¢|àh˜÷‘íë´çís_îÈ™Èå­½FB<ÇëüµMñcXÊãÕ´b¡¿¶9i>`Ý¢‡úoŠ|à—6>ð@2|àwjñ6è’–ï}=áÿ0Tuwo7| çL°¼Î}¦¹3ÓÌÊ]Eî»âoÀÜçß-|RšùÀ3Qý€~|<>p£ê<ˆ 2À.C”\g½gçêb‘þ—A>ð¸¹Ä¿hÏ~‰(¸/Ý[!C|?¢ú_Z ›ÒõÅ^à¯Y³“x-ÿô°ô²Gx#úËŸðýL@ù˜Îl¦~ ÂÖ”/;É)Ûƒ„}{Õ¬—’àø@¡ªî9ÌNZ|\?áäl„û1ÄÀ²?ˆûÜC ù&)ð&˜'°,ÝYèÒs÷ËaWaÖ üû=È"Àï`ëù8µûz" Ó)Þ¡Mî7Ô=Ô"×*b@b˜vƒh vØÎ†öUuÅ+©úÔ餉­ˆ¥Ôd? §V ˆ]`ÚEšØÎ;ȡ﬚ñrZŽŒ6ý´U‡8 ¿hØ´éî¯þ˜ÖÉnºWŸÂÒTp „³_Ö*6L> yèøž5ß}ØøÀn_MÓFñåuúCápäè#Ò}[fŬsN”È ø—A„nÍÔŒ¶Ð|Dôâ‘lºû‹¡Æðpæëû•^w@¦ùÀ ø€ h׀ɬ_ÍWf€üƒ% ˜ú›¬÷¢õ ïúüÝÀîðrÈP~ÁP³ínùÀøÙ¥‹<(]>°±ôÅÏ2zÂöEÔŸÐGBìÊ4ø¥:Ž÷ïfõ&€^a·|ïK‹~àŠX‚F+ ±þ„íõ Ð+Â鸩yC}J| ¢>ð||>§ò pŒ È Ýß>õˆc„¥’~¯¿eƒÎmùη"Xhí®c+ÂM¡`¨>ø–³Ðý6XÓ½«ÌYà¢P}ðƒNÐŽ|ž&>°’ 9 Q>ðC°.)ÞgãCe0ø:¢|àä4óU6>pB>º&X â ðËÉ/èš,î>pl<>˜þ„½Áôxúè¥^â ð1ø?æ->p°zÁè%>°ê×GÓU}C Aý@ù²“œ åF¤9~JÔ(ˆäè^õ°Æj×€#Oß«tÑA2Õy;>ðñ'Ôþ©Ö@ðæL   >ðùÓ¡æÐO€©}õþ祻soIÞ€+Ô§ïÈ8ä¼lúƒ8òqMúù€ñ M?™åh~ÁŸ¼Ø^ dD?pµeIKB»¦>°ßìÒEfB?°Ñ[’Û—_Ð?¿è)h§ Ï|›3ÁòF±4æ*X¿.ÚbÍŠü7|`oÅŽB´D¹u©TS# ˜| ÛÖžå?ðŠp:nN•ÌäÕ´ôF|àhLýÀuIòÜ…,ß©÷ƒ=š¸’æF늿ûk›ïj¿n<ýÀµ,¥Ê¶£oÙÀ¥©ëò&° ?@]ú‹¿ùk›cJÛÇã‹áŽÙ=ç^‹ô¸Lé:å¯Âü2ý`´ð)iæ+1÷‘ÐOìŒXúߤŸˆyˆÔ/0Yï)>7`u±˜)>Ð´Ž„Vi.ñ/Ì>#|ÀPVMhÓ³KwçVȼ‘úFŒ~ÀÊ/è >ðºÙ‹v|€¬KåL†Ê/ ýì| ·õ€éO8.¡ü‚òe'9 _ Ks;<ФƒCF6 r³iZ*| @> ÚGwÉÞ+o¿\Ò½=€¿ƒX³ÌÓ­‡CM.€eCš¥X‚@–l”/=î¢ø@>€l½ßaövé \ £V&V²fÍÖH¼RB‰†âRÓYr+L> b @A€[„y"òÃ48mÐ&D~0Ú bsÕ¬W~LrkÐÙÀfÉZóÆÖû¿¾yÝç)|¢„#–`‹€ZSj´¶–b» ‡îÕ§X“ –¼RÕ´9äQ™€M?Pç«iÜ(6ß÷eK¨ÙøœùŽãnž˜iý€‚ 6ý€á§ˆÿ€lÍ [|$´Ç"Ø|ï«BÍámæ,èû•.œð«twnò9[}Î|5íô­šÅ çÈ«2À°ñ[¬÷lúÏÞ ì6V™Ó“>`éuÃö¯ÈXï-É—Îvû¢/Ò=à(X+¨…í4ý 3ËŽG”tæQhéI7h_ßp€6ó*‰sõ'´ Ž^í)¸ÑÄ‹¼Ð 8Jñ7"uÅuþÚæU @ñߪŠþGšøW |àœh~øG<>G?{-KÃâµlÐù)êÞvºß³ÒðDgA–Ö~à °\hÎ }¡¹]¾Í=Õ¬RùØÒx@6@?-òÔôòzš¥ S?pr<>p½Ù9‚ý6ú+ÕtÅÄ’^àǶçç"™äÀÔhíùÀñ0/÷xCÍÂѰñeÕÖ+|àDübõÜË|ÀÒð`Gƒ4—Þ\rÉ„!ˆ@E+„pv§Í m[ | pÌ ƒsFz˜4á÷ÚÖmï¸÷¹>K„Ê—wqÕ¬dž “ànáêﲊ娷wÞ^H`PW¶@]…ªo(:a&»3 °ã!…lƒ!€ 0:uï'Mß”Ì.Pc·øÀÀO0³´¦5ëoùè³>QÂÑŽlF"g'†OÍd瀩€•e#ÄGBèbµUóšqd¦ .VÀ_MãF±éžÏ[CF-væ÷Š~àæ’x°ø@K„ tS¦`´…¯D¤~°ñû¾Xj+ý€¶ßè«8?Ý+>0Ë\¢—:ð£Y[À+ýÏO/(*äýÑú†Ô‘lºç³÷ƒuÒÒ¤¹¾að*u5Ä&hî’Ì.]tpè‹ÿw¢‡| ’_àW|àsßæÆÏ‘> çš÷¬ ´b®ì3>€^K§~àÚ8|êRõ 9Ñ4{ó¯÷„T(>`éÚz³>p˜X¡Zñ‡Tø€•ðÄcÉóq% žÍ/ÿô×6'’_»HuN}Çýª‡|`*bù@U§P|àÕù—iâÏØô“\Eî­]ñ—Í}N?-ò´4óJDí'á8ÙWÓ—¸aæ”ü.C|@ð° /´Þ³ócÔK•âvÁ¤M?àÊ$ø;"úy®5²9e½Òøåî†L   >Àùj/gªs+H•ÃÀýÚóÞÖ˜| k°{tÎh´,=X4yè<~0$ˆ‚ÂæÃjëæ”Z6ÀD›ÙˆØX5륭‰voòoÀù$ho½ß”þ™ïár³û€cþâö¯™õ “åðAéÔ½ºÙ,Å» êQÍ/`CM/C#8Ó* P¾ì·áƒ¤išGd‡Œl€iÂɆt ÎíU³žOR?`}éQ§´ÍÔ›×óþ>€ª¯µ"šOXŸâ'ííøÀO"ì“gN£µíätuÔY(ý€åOø±Ð²´ˆ?!9doðK2¶;‚õf~3Ï1|ìÓšöm¼ñýòmúWu.ûL>ÀR 67¦Ø~·a´¯@4¿`qd5÷ñl¨Ùø ybÜèdJ?Ðð‹(ÈÃæ—›?ágd˜ 1§^¿¶;>0+|`–§Øóµ·$÷òt¶Û}‘–HŒ—ÁðöüK?ÉüyŽÉy¹È¶m¼ @¯²GÓÉŽ@¬?!ªG$¿€sõ°?ìè1Xˆ(xhÄ[$èy–ø°>p4býnH–\‡ü;I>p ®°éþ• ¸@ï;6è×-ßùžN‘¬Q| àCœY"Q>Å椉ŽùÀ `ê¾¼n?°;TÎ<ǰ17’a> Õ9ÇtlU|ÿR£#6×gjŠtÔ|óà—>àÌׯ•.<0Sú™æ’x¥7ÑÕl¨ú†92|à>õüÈÏatä›ïý|mp|°ò ™â×uØUºèà éêˆð/½%¹—¥³Ý¾è‹´D*|`œ †Ç"V?Тêdœ§ø@·$D%ý>€^7ó š{Z¿ Gñ㈎ëGø+ ©ì8ë¼.œÎ[›7ԥ̮AŒ?¡x›„xÑÔ4vÂè(–ÆQˆ©o˜¸BñxŠ|`¶ü;>ðkµ?¿cC\Øò]sª|à½v| ;ý@î`ãjsfè+ÍíšëÛÜ.>PdòìŸ:á…Ce0ð‚¹ÏéG£…§·m÷§“,3ψä#¡Ÿ‡¯C$¿@\”®Î˜À¸[>°4ƒ|àIs©#8Qý@oða1 ‹XÙ½ÁÞ„yð²ø@ÎX%4G/ñ•ÃÀý³GäŒÕsÇäíÞËIà¢C‡•hnçYêÙÐö¨Yî]U3V&| H ,ý“†±4úêý–ºè“F¡¬AÞom+Ú”óh˜š@Tˆ{À¢ž4çW)ðu¦~@ûâl³3’±ÚÏtìxƒmíéOØ._zÜ¥IòËÀ­ƒÍ{Óó0û—’ýdÈ( ú™üˆ Á2Äù€Ìàl7ØdÃÒ8tA՘ȘßôöÑK÷ØÜÕÖSVŸœk´E2.×Îø€úÒ£N7Úd-€ ,ÙQ·ö‡ý’tïú\Ì2ßv·nûÈä±ñÚ.8ñ@`·/ã·ç±þô‘p¹_VúÖ<Öá8s¡ÄŽˆðõ·­kì m@ÿw|ÀÃÌ3@ð†L  ˆê¾yðËçU~;r´1¥×ôëtwî-ÉŸÈæR>܈~@Ï6.M?0î5¯ÉÏaÜf½À7~±6°Ë°ø€žf>0?Ê´nùÀÌÒEé5ÂP|à‹>ý@_ü,#E>`ŒxÄè¬ú_"ƒ|à›~ÀÞ†ý±¾ 7Lý@sOõ9{ -biLClýT  VÍSy©í’Ä›ÂéH•äVrÀ*¿€Úz›„x©s>ÀJ?`ˆ~€Zq“¿¶iUÂP|À:!Q™B~Á$xV;>pwûuãñ…, ¥¦£ïH1¿ û=0óAØÁ΂,G"|`>ÒÆÚ¶g ô¬Vþ…â*ÊÞÖ>oîsÚb´ðiæO™&lä'¡ŸO?púÂ…qqøÀU$À–Æ5Ö{6>`b‰'3ÈžR÷¨ŸP—Êâµ^ào›K|$,>àÈs8 œÐÜú™êÜ è—="g¬>øÄážb k ÷÷¤igƒÄN@ìÓvØ?é9ž­ïº<¡òƒÝ Á–_€1ºž£•˜ d.`žlŒBÀ(U>} …}-(«<¢ í`± $¶´ƒ„ó“dnN}5 »=ÅÞFS?@ÅB8É l Ö×b€FÄ=L³û€Â“€àé@à·,›ÿ^¾ôĽ’œ˔߭³Á³!Q=çõHÕ÷©/žœ¬™Ž ,00‚å@€û"GÑTr ¬ú†ºÎa´Àô‹Ô§¾xrÖ»'<×êÿµê_LÌ®š-¾ýÎ?Ä®ùÁÎè ŸÖíø€ÒlSÿ’ @Û "‚…ÀnÆåýŠ0 …gï¯XùÂÙ+úëöÜô'ülþëM¡&ãpêÃGÍ?hl¦:WùÇÀ<Ý¿ Xõ ÚÃjAZð–Ûï6Œ¶à<€]`Öà«Ù¹"ì“ÛÀÕß1~ä¼ý礻s“p|>°uåV–Açõ0¯çÉÕ_¤ÙŸ°¨0îa)u€|qùÀ†;Ö½ÜÃÏà óë»áf¥ŸäÎò{?÷–äõñ¾øùEª|`¬ª_ ©6ü$Ä}áÛÜ1ýÀœ8| ÎöÔ¬øÀÿÒɦ"zв„ –~€`&·gǾÄÂ鸭'|àjhèÝÎù@A†•_0MÉ?í|à™„à-É]`»E´„4ý?¾ÍõÉðy$0Ó<þƒñP*|à6è7¦~ -Y>ð޳0û}År>(Q>p%¢|àÜ4ñK?Ð-xÎÆÎL3x²øˆË(h—d€\ S?àai´×䬄WzÒ_Û˜)>°L}Ü#Í>£þ„ŠP›žíz ÝGf9Ěϡ!TÍ„ö|€ÞÈ< ‹@èƒOÞ§Ü5òÀU”Ûœ?apüÝÚ¹/íH¹§.ÂBÉã£çŒÎ™™5Èü5f ò´DÔ­¸ø жô= ¾cCûníÜçw÷pë"i4N' ƒÌ&M˜OÒÍGöÀØ0J¢€Ë–áÄVØh?p¬M4˜úì-„Ó4¹5Zi9—Yœ+ý#€v!öö[€Ø 2F¡£¶óX6?Ð#>`å¡@ÕÌç¾E»'âå˦»9ض7i¼á Ô‚.Uý€É$$;ts Ö²4}vÕlÑ>¿@éGÖ«¶–'Ûû‡¾;>§vj½Îm°?K©öâwã|‘H U3žiði²Ýä6ÿ–ôÔ~ûZNLqJ“pÔÀ=¤hµ•_ ¹Ñõ l| !–8ò´á¥ 'ŽËTçŠ ó’îu ÊRã#Òƒ·¦ÚAw¡ø€¦~ÀÎv¬ ûä5 cFÍ?0S|à,sI¼Ü ga&ü {XJMén·Þ‹áÆs@FôW²”ƒ í†nøÀ³JMœ®ÎøÌ[’×—_Ð?¿è °ô„hý‚Ï3ÅFÆòŠãOÈVIAK?ðXºøÀB–òpĺ:L"«¾a.¢õ íb†7…Óq{ª|`¶ÉbêZ|àÃ.øÀ,呈õ'¼%Iý@Þ–áóÕÛ!€*“ã99‰ËM>Ñ<ì¯mJ„ä-diœ§Æ÷=ôÛäù@ÐÆäa0ó tɦƒ¥Å¾ÖÜ®_öìȘó,†¸»äϪ}¾Åhá³ÒÌ–²äÁü$ôéñøÀ"Dü µK3ÀÀÔÇÓäVjwôTæø€Xn.q>`]‚õˆÔ7ŒòGž~œ³ÐI$Ä›½ÀÞyó; €Ð÷¹`ÜñÞgiGAÖX=Û}' Õb çÆªY«“~:ÚU˜2ã8¦~À‘§GšùcÐ\zÂ¥˜e+•UÙ hµ€ö }£ÑÞ°î¼—{`ÃÆêÂACÌ)$áØ#Ôµ»Å rÐ@è–€p‚Ë*ÚˆZ°ö éŽ*uWPDõÈ%A{ h&dæ0ªç¼~Uqñà™¤åÌgýìzоµnÝ9E@h¨m¾¿¦Èà,ˆ,çDžŒ[œàEÀ¬ð‰}Ù—²0Š9Q…]²aå8u›€ÂIZ<>U3ž¢#0½*ä¾Â¡ÕUÍz.a‹HyæÀ©N—!þÀ~,ÙñًߎP}õsŸoA‚,Áø }b½öµžÂt&ºWŸ¬þ$⡹=«Už D÷VýØã«iØ(Öß¶¦9Ôd|³~Á°ÑW²¦:W|ÀbÒ1|àjAÎP¦ý U~¶$2_ÍŽå¡æðvpæk¥£æ87õn⇷$ÿ€Ï°>½¯¦¡huÞ¥pò¼ÌðË€:òw}¸&°S¾dŠð 5õ7¶üÐÔ%˜™>0ÓSìý¤ôÅÏ2zÀ°¢õ ý$hWù@þ(óÒ`éâVxÐ ÐÛéÔ\£ø@ûõÍ/ÈAÔ&Àžƒð–Òü”ô¸ QŸA‹¼œ˜¦¶c˜¾†·¦À¬[t„±”4íß)ð³Ûñ¿¶_7¸F•}#?°A¿K#ÐCõêNà)Î==C|`*ºçECe0°Q>0#Í|à Å|$ô3ãð Å‚€vYøÀ5ˆøÆçÖµÚ² ê,>pD<>`åü=Ý[!Cò0½ÐIi &Ü{ºÖÿÈ' 8fúM´aô5“ò35ÅÞ5?¬Ò´|ÿÃY¹¥ynpd ­å¾²Ê#›Áúzö5iú§?.ýä»­+·¦êSæÌ8@aöˆœ±:„q¨õkÔ\õ[çPhšÄ0lÆ(ß°³Ælô/Yâ³­OQ›ú€h"þ„4–F/Øÿ W}Föð!² ‡Ç€ä¾k4â´M€þ¨^;÷¥¤Ìó=ÅÞ÷ä“ÐÕ…“<Àa„ªf=W  0oÉe›1†4Þ0Æ™bS”lú†Â‘FåKOœW5ë…Tê¸u6Ø*Šs^P·äŸ©(_v®Æ¡=¥àð~ c `Œ6uG)í ¥ºnªä@Â!ôòeçjU33âm¡^ÿJý3s ¾÷ƒ¹5>¯våÃØ¥hú²fä dÔ$²®=ÈyÜÙ&XŠOaÎ#‡}-½É@B|*4·ç™¨~€Èôl| ÎÆÂ߀#O6jþ!™Î/PRØù€á‘Éú†¡Ë­_åïúhy¨ÙØ€œEÚØ‘ó&dB?p Ï„ROÄð­ŽU® ¹úSšý ûÆ_m|àÖ{±|`w¦ø@ÀÎnú¿â÷ñ¾øYF | Ðò'Ü`õS¥–Þà³UžXmÛxŒÀÐ[éÔ\ÃRÖn]BG>àîØ6½-œÎÛ›7ìIY?0±õ »ãSºàÉää]m»EâÉäù]N‚g¨ã?ñßx| ÃP´œ~dƒ´|ß”ô£³­üX†ï0@ â?þÚ¦ûìëÄÓÌS¯×Ü®ó|›ë¿O¥sÀÎä4ì*roïŠ<sßm5ZøìôñÜÂÁ•êŒè'¡ŸÕÈ‚©¸<½| i'KZˆH}CcõžLS/e’¬0—Úñ-KüÒQà =Ûù`ʽt2Äÿ€yì Sè>p´'T_w‚È"€E³{háy ÇGlà#õp2mÑò}ÓNOqλæUšúÿ7õ'g €á(t…A¡#Б¤!\VyÌf@ÿ”4LJU3ŸMú.(^(>p €¢ì¹cu£Üò´º£€åæ¯ÆÀ(e#0»¬ò¨z@ÿÐ?"Gö‡U3–ûR‚¥ Ò0–JN¨t‰ý2ÆMu`mmS.À‡áƒðx€s¬ l­`­p|FšãݪY«“b‰Šä’Ðþ§“/È  ÙÌñ_ðÚìªÙ¢ö›æÑ@èÀ˜2öUfŽ1ŠeÛ™åKO—ä |0`GùiÔá°¬d=¶_`óB%Ê‚ á"g¾>´taùøLuÞŽ¼ k*8¨/†uImÔtΖ…šÃÛÀY¨•Ž^pð¹éî\ùN7?(½Ñ‘´9n‡Ò8òdšý ûÆ_Ôó£–ø|àÎß îáŒè®ˆò½;>pÐÌÒEeÒÕ9áõñ¾øYFª|` €}S¿€v™õ 2áO˜?š¥œ­¼Ë ºÙÞˆ·ØÀâ–=µ'ÃìÛ0LÛ({~»c{ô¶p:ÿØ>pLa´†„¦ø@CW|àpDù@ U>`ÂJ?ðP |à,Å&ªX àL> .jù®ieòúÀ;ÎÂìÀr LýÀgA–³;ý€lÐÜ®ó}›ë{ªxNù|«({G°®­K>àðSúù*YÊZHè3âÕ/X¤:g˜d³4®¶Þ‹Ç–g†4~HB{Ú\âi1| pb¿«5¹cóCCN)ù_êÝtñøøÀÑ£¥á=4Ííhvº·úFÀQŽ×ólûØðçÜ«2o÷øk}GéþoêOÊBˆ,]‰ÎÃc€p)i8¯¬òØZ@¯bÃùÞÚ¹ÏüÔ£Þ˜²ðѰñC 6œúÞ@x¿è“òð¾@x_ÒÚæ”-9棚4íýd$ýíÂÎÆÐèTºúëû0²÷wpՌnj‰œé®¶I@x2>qtbÚv°¾Ž¥x}íܾKn7x߃ÉSéu¬væëûÈ ¾¼îãCÚ¯|à'è®~úl§€Â²=°“ȹ2>à)Îy à¡$´e:¤©õ'ÿ¼ôÉ%/†Õ´­›]5[|³¹q?ÒŒÉ@ø@!ùk @]/˜õ ™Ú@8Itǰˆˆ&->ißù€ò@½Î~‚ÉœÉðX;÷ùTù€EV¶ Gü 9ÔäïÿÇdX¾B|"Üà žƒ*°)²ä™KC¥ÿ£>â?`òÀ™¯5Rõòm|à ‹Õ:$Á òÀå0ϸ ¡UF°ñ®-ýœEÚ˜Òë&þ*Ý+ýÀé0f½î«©ïœèÙÆïÒϤÅü¦;¬÷l|`]†ù€´øÀÍÿW|àCoIÞ¥él·/ú"-‘"0Æ(ÿÌãº]? >P ôòH…è\;À0³í->ý€¸†¥q(l- P×øˆêÚówzÂfòJÄøˆ÷”~à£ø|@*>`L…:é˜Ûiô×6&Íæ"V?,¸Lñ+¿àmÓ=í×팜kvN?°!.N‘¼ë,Ì®R|À› È›6Ï¥ šÛõ«4ñ+¿àÀîøÀJYýd´È™iæKÚñú…fç01/|`:ã¹ãúqäêÊê#SúÆIh+Í¥(Ð`È)ÃnsijÙÃú78ò¼ûTÍ|&Õ›ÏNC†ø¤ád.Ån ƒÿý‹ìPÞ÷@¬inG“³Ðmþ¾Yÿp¼ËÒõæÚ¹+ÓÆ<Ź÷ÒâGÓè«™åÀ×€ž›õ#ÇÙîÖŒ¬¯'ÍùŽ ñ»=5xKòO`þ3fCÌÑ9>Äú5¶‹kÞ\£@¡r@zPx,ËÐXô«²%ÇJšã-hk»ºì<„=¿` ^pÀW}?0…³÷;ÑjôÀNÐb>šͬ”-M3à¨/VW<[›Ì<ÅÞ5ˆò «œùZ1‡ÑöÅ¢&ÅÛ |ÙY^µM…Gµ«,(Ix¯H !¡-·.½»LPrç<7iñiCH §r@wÛv>@¥ ¬t‰ñÙ{=$™ýåÉå(DãÄ£:Ø`<ÀZӗߌEž=à6ý€ÉÌü‚¦–ãS˜Î¤Âƈ„øT¸zŸ“@½Ãd,øbáÛÁÆð÷ÁYèȰ~`@>`}ÈXýÀãj/´¶ Ö7 \õ¤-Ø€œùúèÒë&e’ovàtý 0éÙáLð»¢útäþTývp¿dz’–A>pk7|àà™¥‹Ê'¤«sðçÍô{×õñ¾øYF*|`¬ªo¸7bø€ØB¦ùpg|ÀjψwÒÄr÷Z`ã¶©‘üÎ…yWÄ ŽÞNç)ò¼Ù€q9¢| ˆ5$Ä«ëä˜ÆÒ8fYjh´Ûýµ«€·$直Äa@<•¸ÔÆ$ þ—(°‰èÇžñO5˜'#Ê\‰ðu¼¦iàÛ³æ<¯ø@¡â;»âO#Êf¥™ð“«È=ÌcÞËU”ýV°®mYƒô+œ…ùD‚xØ™9ãIwÍ»^®ž³*ágˆ‰„ ñ?m| Àtà'{¾mï’FJ?ý}³Ør¾A÷«©«écCñ£ªó×6­åŽÎ™îÈ£ÃÑ"ªœî:€ 0ˆsðm' ;«tï¡§—6m]¹igOà*r °<€Û‘›õ®•_@ÀaÇ?«+^ùzÒⓇ“&7o@Ù ‚N! SÊ*Ý 8Þ"‡ëåª+ë’‚ˆñ'¤Ñ &<îê¯ ³÷ŽòÀ4À# GƒCÇ€ ËÕC Ç:ÀõLuÅ3›“Û 9ïœKB{œJMXé,Ô÷aƒ_,ü¨¬³Ê–œ6<NBô8O žTôƒHh+tÒ„uZíòÌX=ç™õÖ+Xq¬Y@Ášü.`ú‘ªoÈ-jèùÚCýVXYþäôÓ`U*úP¯Ë¶Ø€öÙ‹?$\¿ªf®LÁÀkñh»€ŒÖ7 ûZ~‘â”&Ê€` Ü?®…/Xõ 57zßв¤mðÕÔo_,|µ1X¶ê }õ¤ý2Õ¹âJ³Fo;Sëi¡ë25ÅTý‚>°n¥M?P:zÁÄ äØôâ­Nø@$¿à¢ äÜióˆÇªÞì”/›Óƒtóy6>p[Ëÿ'|`m苟e¤Êìõ €ÿ>´{lb ºùÀÕ,É×¥&Dò ¸½?¡j[¼+œŽó <´âýÎù@¡•_0¥qbõJV?`ç!“èû6×%«8Ö_ðX2úeG?°!.5ù@kª|ÀÊ/8 >ðë4è,>`åtÉV ÂxvÛv_:ùÀbÅZãòáÄu¤‘âÚ•éêˆðë`ÜøÀÈË:©hrÁyyã àšûÅ>L|f˲õiͼ·ñ1&ð¼¬kÛ#@ÏÁ¯H#èNêŸÇÁ†Ë*OX0iñÉ£Ò9âÂd‹‚¥Q4iñtoÛ¶-oƒXYz“«ÈÓN+ o;Ÿ-Þ×[ÕÝ]S"á)Îý«£eïå9Õ‘‡#pëá•î!ýV²?ˆUJ—ì M®¯o6ì̱Zñ¿ÿaÉáTÐ.-Brzž¯ž³úKo–?yúX6§Áƒh€´ž¬o;«lÉIoÜÏTW,OèÀ>ÀJ?0a±™_@Ƹ©%ÛOó¤Åg $­í x„­ž- ŽjÒœO'«7ñç¼£øÀbAò‡9o¯ûôŽêŠ"GÎ…@öc`¡®hY‚SØðÝY¾ôŒdëøÕÿ³Ç5ï»ÚB•\5»jöêÚo|å ÐÉ@¨4ù] Z¿À¡Ã@+À =1> ÞÀûåËNƒdÕ¬§S©_uº ™ù‹Ï_Ù²?’¨YX5㙤¼)‹°f øv©}b=Î5¶—â”&긇å=oò†È2ïQë „ÔûjêU~A}øG€àÌׇ”.œœiý€Ò¬ÅòÅêRŽ€Ö ò <ÀÆ»Ö>mò"g‘^Zz]YôÆ©æR<>²øCÏ_˜!>`ùüÉzÏVß°ê“e ¿`žºbúíÝðC2Ū½%ù}| /~~‘,ÐrJ‹Æ˜þ„¼"wVÔÍ/¨Ï˜¥ø@7þ„äè6ðx:ùÀ¡íÖ%¥°ówÇv#| •úy³ã2ÄòäS©oH­€H–ä_Å2|ŽZ biúCIòKIà –RåhùkáùW«Î ­lˆKRçÙ–~À“h~Áé`ã59›ÒÃr_Põ lúˆxÞΆÈ`pÀYmK/È ¼˜¥`ZŠê³|5õ?ÆÌÀà†ÿ'kpÖ PcÈAúmëMÉ^jw¡Æ€ß‘ïÞÈ“8Áª¼™Ò…eÓEòÐÜŽzgaþ rd¯¨š±|{ºÞ’üX†§`ŽÙ¾šúæ‰:H;ò²ÀQlø[Yå‰ó&->}pº`ãá>p²ÇhÙñ6š b‡gŸÂ@x˜};ÀUE÷SU3V$}#Ò>8RñcµÜ1y§é9˜]Æó{ÞûöúÜq{ox( ó" <2ð‹agŒÞgøÌ~Ú²|}CªP|àh˜|`„#þ„º×óœ²|[`MùÒÓËY¶žiÓc'±šXVyÂǤe=•Ê£Ûvú14úês 0ý4w¿r•me•§n= dŒŒÍmÓ?#Í]™ì@<Å9oœGB\å¦?a¼Î ºbÕ‡Õs^^H"çVÀ±!zøÀFó)ð먚­3+ÿ8þ„í£jÖÊO|:iñ©ãI žm:8¦a˜õ 4ÅáÝúZ±vîê/|i~ri¤Àòaž)tâ­Æ±d½yý·ã¡Ì ‰ªYO'}žP|À£· @ûêª&ÔØrLŠSšpè^GäâFÕ/Èz– 6æéB•_ øÀúÛÖ4‡šÀ‘£ )½nr¦õx°ê´éÿ3GÙÖû|`ÓÝëV…šà,ÔF—^Wž!> O1—ÄÛñøÀí0 ¬g‡/Èø3K©äï„|ðn`·|e@?p¹â ¡%Â&OHWç€Årúø@_ü<#ý@ÑXӟЮ ´»7øÀ4›~ }X²?@kÒÅF¨ü‚rD«;+ AMˆ©_Àîè ¬¶ÅšòyIôAµô> í5–Ü8œ¥œbÞc6>L~AþU,Ãj•0 –“¦%«°ø€:Ükùkïm¿ng|Àê| tYøÀZ8ÀYàîV?О\Ðóü‚äøÀrÅ~2ZxNšùÀc6>0»(þmé“ý&÷Ï×=éÌϽ¦þÃmIgÔvŠlø$€;òQó'’5ˆoÍãlpægï»^e©-[;÷™æt Ä[’½TDø€æ6+z’ väd5p‚'‘hy°lÉÉ3'>r¦«ýFB†ø_Y|`6ˆIêväj{@ .ôižûaþÆ Ù ÀÙÂÕü`Yå©§”/;WK½{ åûƽo.ña„æÙ;÷ =‡@¨/}~Õ[‹9ê%-ËÕ 2ö ³€Ð-G ;s\+¤ï»æ ©íWQ¶fãï #’q¯{³ŸLC¼ê9«Ÿ!‡ç"Àõ4Ì*¯d&»·^4lÆø{Ê–œV–Ò¢õ @$¸¿Z4ú>t“}Õª+[«+ž[BŽ‚‹ÁÎW„ ‡ƒZ”-9þOe•g$õÝWS·Ûô.HÐAN²ê„ß>zi(ÞFU3žj¬žóü¿È‘7p¾ëtKÆH ùæø€•¯’% Yªéèv«ªË·WW<7i¹ ÇçH±¸!”f¥ÔEÄŸÐ!´8!¡{ª™+¾­®xáfÀ3ßÌ®Hú6=`V|[Œe)õ`<’ÐTW¬JºÎÊ/ÈQÇÀmо€y·ŠP£¿ôŽÉæ§HhŸ Ííz– S? ¹yj¦ÀÒ°r|5u>°yÚtß–ÙCù*‘DG>`†h»&ù¦ £-x)ÀNóy Xkñræë£F_=inzŠŠœ ó‚¶£~@¶ºnSµ.É‘/3à?`üÙÔ—R+‡éÏ‘ ·þØx×kÈ„ÿÀå,yL4Ó˜˜)>På-É¿$íöE_¤%Råcì˜ü‚Œó9Kå‰t³º wÙ Ç[¾oüºGÈ‘··pà*–Òά°ò ,Â,t5Ðû=á³y":´TMB{Åô'¬Ã䬸\ˆÖ7¼3YýÀ|%ñÌü‚å¤iÿMŽˆKIðé¶ü‚Ç“àÆl58‹¬JHË`g;+> /2;§MšÛ}¡os]:ô‡Áä\Ež]v>À>¿™0Þ™/îäÔŒ–ð6£…åÿ¶¾!ÕÎ#ƒØÝÒêÈu¿%t†,'ºŠ<¯ëÚšb0ø¤¡ÿó{ssÇ ßäo>yÿµ?­úº-õ®£Õð‰œ`Žð FÍ/;ÅUD'€æu4ºŠ²rI ;ìÌñbø¬²M[–}–ê Htõm?¹Š²¹ÀpW‘÷`]«™_ ²ÂçA™R9¼žæ&ìZfshç}e•§’jÇö0ù‚˰Éþ÷ôlGŽnN•±ußQ'^ v/HeXƒÿ²Ê¯/_vÆž  ˜@ßæŸN!­ôÁåódõœÕÏÈ@Î%`×P:p t‡|-[ròùå˦»S@B{UýY˜="wŒàp訒îÍŽÐÌuç¯hªžó܃¤å.ë*-‡uPà$µÜ_VyÚ1C§MÁ8Ÿ>Œü¥ÑXA TËFÿÇt𨚹âÛê9/^ÏFö= Ý ó–ß›±ÿŸË*Ï™L÷&€Åöä æ0:å°vî3ïe ,¸ œõ˜Í·õ€¸T®q"·úo½4T=çÙ'ÉYp)àzßD÷ºƒ8¡ü ¥.`@Õ/z¢7#U3ž¬«®xî¯lx®$‘›"0`ë2„­Æ²dm×;?•")ÂU)æDü ·[|öõŠ?¡¥ Ú§B÷ºŸaƒÍúNÙ|@å ÞWS·Q|}óÛ¾P³ÜÎB}Hé¢ÉdªsŦ¼@yP7§†_X|€  35£-x ”…H Ø|ïºÕа3_5úê²_¦»s@oûjêÚóçí`ó÷éÈ—¿I/Pw°d3¿àNë½NøDzù@Àâ ¡ÿ±;>pvé¢Ã&¤«sðçí)Îù ôÅÏ2Rá*¿ñü¾È(ÅÒ˜‡´÷ Põ è]6hIºøÀ|–òÐ8ë6À¼ÆgDëÚeñ?õ„\‚h~A *Ú«]ðÉqø@Ðþì¯mHJ?0ßz² 3¿àéäô¹–?ái¶ú ó¦^°• º°øÀ:°<&8 >pšâhsšøÀ‹lÈÃä|@{>Ù¥×M9Œ4ÿ_CõA±çƒ]»Z·´ÎJ³~àQuFl!¡Ïé èä€:r^Gž“¹×žÁ'ŽÆðYeë·,û,{øØˆÃ†Y|@Àèåg:r´ yœMÂ)  õTí¼·|éYÒ1 þÚ†IhÏšK<Ù[R­o(œáYˆüv=Z£ù·ÑŸeÓue•'_1eõÜ«¼GCñË@ñ‡ÎÌQú6„·}rÑË•2à¹p?k>ÂaÉaßο—Užvæìª{EªP| J Gñ[O±²…ÖÀºóWª+V?xot%Û–Y@ˬÚÚWo)_:#UO:;(P| Á/znöóö•«ç<½a˲ϯ ‘óX¨ã@p4ËÆ¿–UžzAù²s ÷‚`2\ý½Û¯¾uåV®šõôË,Ý×€êäÂhý‡vÝ]V9=©Bl±|{ p`–î,¿ÖÎ]µ­zÎó7žÑd¾øo,_:#ÿà°tœØ©¹ºbÕ›läϲިú³~°ò H'‘è>];÷ÉæêŠgÿFŽœù$ò®¬šµ,>@Pþ„[ŒXoúò»ÑHÆŸ0…´ŸX>`ú|na£¥í„§4áP|0ý ?,«Íü9Çõ¨õ"ê?€F_MÝF±ù¾÷ZLýÙ¯.½nÊþ™ê\å¨)¢úÃ/5_$‚‘iý@$¿àÉÈØÎ"}Ôè«ËÎI½›øá-)<@¥û wâñÛÌüFúõ>`ùÄåïvËWK?î‘r.fê[—›jJ0 ý;ˆédÏ{?½‘7~h#ÎÇ>½ì¥-逳À=à‰$´Ç}5 •éj·/ú"-‘¢~ RßÐúµš|€¾ôm®û䪄|L´¿(iÄ{f~AZøÍWùí‹)Úü ;Õ| œÎ?5oØ ÈŸ —"Ö š„xÍôèL?€©Ê0ÁÒ´Ú©ò†Yë.>p‰M? Q™Œ~@ñÚʆ¸¼å»ÆTøÀg¡Çâöü‚µ`è£~Kº17܂ɲ~Ó3>Ðì‰ëOXºpòg‘qѺµÅ/®_~ó¿Kµs{˜|ª3b ˆœŽÉ¼N ˆó' ¨ï7µßÍe•ÓJ±Ï˜hù¾q'Kºæsh7KyeÌ.}uùéÎB:D–£Þ‘“ÕÀv昒agîÿÅÖ_Rê]E¬~€‡¹Š¼ïFô¤‡,"Æá&Ç<°ë€ ór=tà»§¬òŒ?Q“!þ7"ú“ÐÁ™ªÛò*Z¨Ùضþ–O€²Ê#Á¾K@Ò¦p®•ç¿Ö¿¢)ÕAxŠóîVGÔzmóñ¢yý–_€Ì]a4cµbuŲÍYƒò®»^@äùrp’pùÿZ¶dzŠÒ~€„°ñ¼12É/pæ¼`_Ù|X½ú gXS·aœj¹ª¬òäEåËÎÎK¸çH»~`LŒ~À[:|}¼Mª+–×Ê {!àz‘3]è 5ßY¾ô¬ƒ“éÞW³ÇÎF¦É-0ºÊ¼WØæß€÷v@(KYȲyAò|ÀÒ§À-’½"¨®Xñ99ú_ 8ßÀ–P=ɰü 5ÁTýˆÄõµVW<ûw°çJyó“çœó × ³AÛŒ ïxcë(Ý&)FfcÎÓIß;(>¨?¡øL œ”Ât&ü÷*68ä4¦dz6>`ælºçíÖP³Ü Àäi~lk¼ñƒò! ÖðEôÜvu*'F[Û%PVÒ±úûÖ>«ø;‹´‘£”g ¿ ð@ž óñMG>`4ë·Y^޼Œèþ¨®[8ŒŽ|`Ó=Uïëø5sz êœéÔ\¦®†@BÿS7ú² èògxŠsÞ÷–ôéúâç=á{#ª°øÀ¾ÍuÓœ­®fó;Ùκ-oÄ6.ýÍgi”ÙÖ·:jR9ÄPþÃí•¶øsª|`6`ü^5Ì‚€¨R|  ý·ñµ]Ò| `>ËðLõ¾¥H"¿ ÂN³ñ'’ág›ÓV6ļžñ¶ø€•_Ð9(¹ä EÞ‘ÙgrXR¨!´Isgý¶ç| Çâïï*ò쎯X8e¢#?ôi$HAgAáSš·èU3 ¦:+l| €VŽs|5uQýÀÐéC)kˆûßZ–ð`W?ïáÂP²¡ÓøzëʯS¾ÚûÀưP}àe@]xKö:Í‘£õ£? ‡Ã, Gᡤùî([2½ÇÙ¸þÚ†Hhê— Ûé\¦é bκA³¯;•?;A-”-9åªI‹ÏÎN¥s+dˆÿ3=ÊÌúÛ^±5ËmëoYwšµAYåô“Ö Ó§´]ldÝ·vîÓ›RxŠóîRЬzmó Zö^¹§8ò0BõüÊž~zÏZyëŠ ›†Ÿ}ÐÇàð~æÑŽ=$B‡;c? nÞ˜Šò8€Û‘ë~On”[o:r½/¶ß jæSßÊ€ûjÀõŽzIµÎ6ã ?¤‡ôS‹Æþ¿8-nMKukþžÀd öãPó]“OOJËh„ ¦QÃx¢|^—§ÑµsŸ~‡eÞÀQk¾"óIk]”ðÃL)ÈŠð6»Í_;÷ÉÅÅÇ\ ¸ŸCçýv!aŠ&tÁaø"ÒIKT?ðDù`l@ÎBÇàÒE‡e0¿ †Øò |Z¤¾!q>`é–F°ù¾êgCÍaåO¨}õ¡¨oh׈5]ð&G¾‘æú ãvu}ØW?°éžª‚uü:@ A"³| ¡;>0uBº:OqþÙžâœ5Þ’‚‹ÓÙn_ôEZ">ÐÏò'ܽÌfšybÖoEûK?6>p¥âí×m(h~ÚHý»¾€Q%œŽ”ùÀ,À¸Q@kÍüŽÃŠŠØ0&·ÓXùI•&XIšþ_ßæ=ÉòSÕñ€Xâ¯m¼¯ýºø@Qù?­3Uu¡­lˆ+zÀ>s9€l€÷sd»CõmóQó'ÞT8©àdÏÞ9ì |Ö/HxIÕ7ÌW|`O\>0r^ù¤¬Aü7‹¸úç|Oš÷_Õ+ÞI¥s{dÈ üKÙíø@ät¬ç7¨tvfï"tÀqÙ’Ó/쉠Z¾oØÉRÜóøÅ҈茼¼ìd+¿ ¸Ç¨Ñ²òþ lúÕ·WûÍk·N|ô¬îüGº mý‡$4¥]—‡Æð-Û80ù9³o¯šµâEpÞm`­ƒB#…³åÏåOž=¦'ƒ!ü¦~€,¡Œ˜ôX…ÛYàºÐ¶õ·¼ý5TÏyr=(ïÀ¡ï2ŸæëË*Ï8¥»b ª`ÞN 4O±ç4=Sp¨¯ìù`«|Ùé+wÜÞ. ¡ý‡9¶xø¬²·,û,é:‡®"O,0똡{³Ÿk¿ÁÖ•[¹ºbåRpö?L·V0<˜ƒ{nŸ´ø¬ÊKP>Pd.™;~¯mV=çé·H˹¬Ý“1Œ4ÿe•gNê¶O[˜|€bø@ÄŸ°;çþª™O}KÎ~×€_š3ÁÙ€ÿÊó p– ]$õü¿jÆc¾-Ë?¾p¯†rîH~7Øò d@úÕþЧ½þû„ø€ú^,!‘s%‰œ«RÌ/@ ºò•`€Åη¿.ðy³‘2ˆÔ/Ø.Œ6¶\3‰ƒ^È/pZ|ÀÌ/ á|LC ÷°ü )š_l o@®BÇàtß–Ù#–PGýKD&ù@Àâ²=x.’_¯•”.œœ!>`œób5ð;neƒé9ÆÓ^¿"|@ÀäwYïEùÀÝïW÷ð«Øä{ÒÍú ÇŸí| 6¿àý­oæÖĆcñ§—=›Îü‚f~¾ÄWSß—_Ð?¯èÀÞчYh!!vg:¿àlÅò»i² ÷Ó­˜h[×ÊhF¤~{M°OXøÀLÀ¸J|fv&ªIh¯wóñµ]ò|àJ–áYæ'EÐV™ú”ø€U¿à mýí×9Ï®ºW´hÛî×½t\`W+ÀôSøÀ¡H”„ êoÎî8<{xeï•Û”5¸ß…»Þü¶6ÑŽÛ‡Éò^Rþ„ù&ðî ÖµÆó8ü0GNà.Ò„ B®þ9ÛHslg#ëkç.ß–ê €ø¯yF¤ú¹ø€æ ,$M¬çz6‘F ­å¶ò'ÏîQjÅn`œÍÒ¸ÂzOÀ¨+ÊOѲEsÚÂß-÷÷€ëSsée£yQÙ’³ŽîÉ L> +íz”h0ม·i.ÊÀàìk>÷ÂO¾÷rÇí팑 Pèàagîç†lþ"Uç~='k > €†3Tx›ö¿óØ,À÷z°!´uÃíN·oTVyæ±@Ëy‘Ã.»>"gÞ½©jK¢úªó×6(Ú¶5Ÿ¢ò X¶‰ÚoP]±âU ÷fåÊPà`ÕýyÒ♓íHh¯Ã¼Sù˜h½éÈÍ}6ÞFÕOnbÃ}# «š—á!$|7•?yö>) ¡=`ÅÈp96w¶Ùڹ˷‘£p!à2ïÉ(dÃwKYåYIek·ã{ rªú†Ù¥ÿ`ªê‹‹¼œõ–ùŠtþ‹Ë—ž=<Éi°åH³–(±S³éa¹ê`Ï@ÝS‚“½®PùRæVD%\¿ªç¬XM"ÿ*ùW÷”ì0€¬ ŽCRõ ŸHäØùÀa´!RU#ìóÿ"Ù“ ›~ÀâŽUM;§19ÓP|€cù@}x v8Ž»ù¨ ™ê\ñ5ô NFaŸx ±d!CþÞç5÷W?géybßÑ &gÀŸ°ðÀ8Ñüôâ½| T/¬ü8òŒ_eˆhµÄå5÷WW÷ðë€å?v>ÐÏœzýÎnøÀðLðALB¢ôÅÏ.zÈО|áÛ¼'Súy¶é#Ãùˆµhßd @˜þ„ iÓLì¸.5#Z¿À-'ho[| œŽ;{ÀäE«û| ´Ö¬oˆüµu]èd¹Y40Ÿ´‰¿¦ÂÎV«„ñLò|@\B‚O1ëÛBÚ“Ýò(]8éщEÓŒ€àîÀ66èÊÔø@›ÅÊ`æŒï^?pÅÄ]õCI”3² ØÿˆQOþðø¯$ÚqûP|àe8  >0uª#'ôg¥»ú{"MH ëÍââiÿéNsÜU(>ð°­¾aG>@Z`åav¯$Mk3³ïÛŽ®ýæÍù=¹>P|àf˜|ÀG?PÕ4ß|6ÿµ»Ü?ä AÁ‰mÛ¿¹¾'ò~Å,ý@Y<ý`Í™ó'¨®Xºì¹Ñԃ£Ik½¥'B3¿€”ÿ€4õî?Ùå,ЇšŸ>¼í«_›«ç<µ”û@ÛfÞ~Ã…£íÖÔžš›» åÒ) DKížS-ÿjkÛoT]Q¹Ç‘“wà0“È@¢õ–ò'+JR„â8?{DÞÁФïkÙÙqVkNyÜOŽü[ǧæîà\6ÿP¾tÖ„†`÷'#„ƒú«#wü°šÎ6«šñXp˲ÿÎR ìf£iA²ð*– –tÇ}¶®ÜÊÕsž~È2I Aµ\P¾tv²úP÷¤'^‡ ºâéÇìÅPyÉÿ€.XùГ,UW,ŽDÞU$ò®®šõD²|ÀÊM©·ôX|þÊsû#‰ú†éá­\mÙ„}½RßðP¨ƒ íS‘58÷e°™sN½£˜fþE¾š=Å—×½æÖ™|ÀÕÏ9¨tÑ´ ™êÜä<ê°ø€ßâ’À­ó35£-p1À€˜„ˆúÖÜ_ý¼ÍŸ°dôÕ“3à?Pt U uäáFíV6X*Â_§Ÿ„o7ë_S[\>°ù¾ÖvÉ×Púù@ÐâÔ5ø`ë›yã‡7²á|üÓËV§[?pH苟eô„Œ@l~A¯òΚc˜Ußgƒ*ÓÅ®`)'Å>!†™7j]ÂyÌ:h¤žžXÿUÂé¼³yî”ùÀï£àª¾á]ó:Ì4Td—h Ý㯭{ÅÝáö|vÕ½¢¡áÛ;B -³9,u“hO“¦/òS¿:X×Zªomi¿]°®µ5Tß¶)X×öšîq­ MË!‘`8žê,p{BõmÕÝ Ü¿þQïHÏ!9£ ¸õ§Ö]áæð¼–ïŸI¼ç,ô~dú²§3ý@ÌEè¨+&Ýä,ÔF€#Ï,¹ä ºýï<)eS<_͞τ3ë\@|gîYá-)Œy4@éuÓË¢€Hˆ³È»“4d±Ñtí¤Å³F¥:ˆæ ;ëØ ËHˆÝËð¥Þ’¢ÈsFh½æ—Rváo$Üo˜ïÈlÒš¯-[23ee½Éèf€”~ ËFÍŸ|º#G€BòÛ Z³¬zÎÓÿg½•! ò]3iqêB•_ð‚ú‰–yKŠlþYa«h†„pßnmT=çé‡ÀnØMšAj7¤ªqÓ °0§¬ú†^1 ‚ ¡íëoy3æèU=gÅc@ö0Ñ:Y6_]¾tVJöaqù€oóΓIfý‚6­:Þ†ÕËŸ²—«™ÐX6ÿ¾¬rFRªz+Hho¨”Éd(™Rg~ÎómX]±|9àYª¡-—•UžÂL>ñ'”ÞÒÁ]Z;TW,[xÿm>5gð]V¶dƱÉt¯ü|æl˜|À F·|ÀÄSo€³•eG-ç÷€d XyçÉð9Ë^p›ªuIzN(úÛ¢þ„ôë=x¿:¸‡ßDfù“ÐÿÒ…~`‹Òd„LBÒWS×Çúâç)òc À½ÉŠ,Â)0ý ; ÅÄl | oáÀ,¥]?`Øò ÐI~U÷€ÌTþ„öü‚u$Äëóiå”Ån§ýµ3>ÐaåËÎÕêÞ_ÿ`}ó~»?ر¥x$IýÀE¦~€5sÖÄ“þÚ†îý<{»Îäçàf÷œÖ¶mÁyÍëw?Ý>PŽˆ~Àݵ~`ôÕå·ºèe zÐS\¸§ß”ùŽÚçýí/Ô$}ÜN?õˆêD´ó©å®ÚÑ39ò½ëIç,̺2U €X>° _fç‘pÌà¿k.òDÁÝâ÷°ÿBåÜ@xp}ýÖ!MkSQÖ‡ÛüŽ|÷&€‡Yßph¨>ðJdF/8ì ¥ P³ñíÆ»Ö¬¨®¨ÜÉFÖÍ€PU‡›Qö»Tfüµõ™|øÐ>@Zh†ù1à¾ÍÚhíÜeÛIxo4ÓÊ–œyAªƒˆòP”P5ë‰È‘{s¤žµSVyÖoS€É„úÈrB4µíxS?@0üø Þ†U3–üöÜ ¦€yèh=²¬rÆŒTAB(ý ²GäÌ¡M|fGnÎKmX=géÒsþµ‡m9³lÉYg'?„vþ„ÂAMµ Éœ±ƒ7tµiÕÌ'Ö“–s—ÒÔ:½¬rFR–¾šÝíêjð˜¿}NˆTÍ|âK6Üÿ‚y;G@Ëìžñ‘–8X;wÙ{€÷!5ˆôd«ohM' •/;7áZfÕO¾I"w‰ÜÉóÎQ4è2 ´RZË·»&ø(ÑfzÎh»!Štض£þÈdL6t¯Ã*ÎD$Äg‘ïyŠhôFýëC6øjölëo{£9°+ô#8óô½ÄÐŽÐb˜®™`£%Ó|Àò'|*2“„w g¾¶ïèS2_Pt ‡¢#ù@“v›©yò¼ôòAдrqøÀ½ï¯ î‘o #| íR[~A"|ÀµäÓËžIw}ÃIèKûø@_üì"|@Õ7Ì,˜Œ®ù~>@W°4‰³ns»úqò ¨J8wõ„üý ß0ýºäå0¡4Ìí:×tÀÐéC)§tøÃÎB­´níªÿhgª|àb|’ÍŸ01>0ä”1»úéc {¯ÜPî˜ao]¹áþÔò ¼Ùü Ç›õ ÚÖÙ×å ½Í5@Ÿ€„C¸úywºú¹F =ýÀí[W~•t}kPp« >0rÞ”IÎB:8Œ€påþ—4þß–UÎNªÀºŠ\nã—ÄÕè¹Æ,ÂP“vÿÇ¿v±zh œ€ïʲ%ÃRDT? ÀÃÒ¸€Y¿Àä“WxùÚ^l ïüúæ×cnP·®ÜÊÁºÖ‡*¼g ãPóUÉÜEÙw…”¢þÃo#¬ú†ïÆÛð“K^ ³á¸ з 4–Cþ”Ü—Mý‹€ŒC¬÷\ ^ïlõsŸj!Gîm€fÖ·@àв%g—Âì| ThYbZ{Jú¯ïjÓª5‚=w´÷£¶_LZ<#);¹X>@#Ki~¡˜Œ„ôs*·€³ÿYŽNk='y>`aà,ABi’¸2¨ž³t‰œ‘zý‚¨~Àâ$’ó¨šUYE"g‰œTø@´~Ñ*´Ñ,¥f´Ð&ÚLø€J˜¢í‚¥øÔz³mGý)NiÂaó'4븇½nùhî>`å(ýÀ Ÿo ìý€yú€±7s`¦:ï”È€¶Äþ+Sl¿Û°ñÄðÍ÷}ð|¨ÙØŽpkÔŸ0¸ï½u]Ææô S|$wu‘_°å­¼ñÛÙp=ž!>𤯦î‰tµÛ}‘–Hô·êØù€ÍŸ0s|`†™'Ö¡~AûhDU¦øÛþï³ñ¢õ lmŠját$ÏfWÝ+Þÿûç7~½í¤P}ÀrqâCÓ€?N@?`Û.I>à9ìaWG© øé™Úp`w`5iŽG|›w¥Ê,ýÀߺÀÐéCÉ[2ì!×Ç M„toö·Ž‚WVÍx¬.‘Îcf¥¤è–á[îgö%*ýµ Ø×‰y$ï)~£êœIm®þ9Ûu¯îâ`ó5‰ܲ‡™_à: uÑ*g{K O;€QW6ÑÕ_2(ƒáf×å¤9M#u íÅA_J…rM> ,>Ðy~žk\où†µ¿ºñÕ/dÀý—¨S{pbYåŒÕ-ß×ÛüàfiÌ‹À¨ù‡¬{µ"¬ ×n¼óÝe°îüÊ&ÒòîD›¹zÛé“ÏLéÂÕ_[÷ ý%lúô‹É/¨Pë±–•{»}êY‹`#û^0i-¿-[2«4•AØôÂrù“WxyQýÀW7¾ÒáöÚ¹K?ÏÍš€IDAT¹W¨1:@­—M|´"i#„–ïëwª§ç °™_P·öÛ£AêéYs|ýTW<µœõ¾¹dgëÕ©\7*ÿ8/{DþAZ¤Œ,œýr_ëjãâ}û;Ø¡f(´OÛŽæ>4É©Pú-KDò ŠÊÇvY÷þ‰òy’œ9÷š:"vÖ”3’é^ñ̇c{ 6…ß>úžPw TÍx¬‘´Ü»ÁÂ1œQ¾tn²| EÍB– -R¿ ᩬš¹ø[Ò¼ÿèA~ÒÈ> ’ùR™| ‰üU³§¨ zÝh“?Ú(–RÛóþ×û#)ýÀâòllˆˆ!b°¡yZ² &6>@$´Ï…{hák`sŸô. F_ÍnÅvLýÀØÍ œןPõJstLÌþ ûXùº¼ÿ|¨9¼9bïÒ릗îÎM>`(Lñ¾¯fw,î&K?@zvèÜ ð›£õ ãðoüÀÆ2¢`N½ãîø€3“ú>>Ð?¯H•”"¦~µ Ý ñ¥oóîLð~£X†í| «&[MB<‘>P°·p`^|ýÙü؃øõ Öšþ„»:µžït£®(¿5Ôì;¼ní6=ì Q>Љ~ a‹LB,¸7a>0»ê^ññŠ¥ÿv 0áv¶ÊmÏÿðŒ ! >Ÿ#œ°ø€À€ö”¿¶¾ˆ9>”êê·<â*ÒGüEg(Ü=àÈQ¿ýϺ„«ü…›Ú,ýÀÇJ?àxœòˆÑÄò½÷ºÞ™¯£ÍÕ/£pjA íð²ÊÙIË=8OñŒŠNùÀè«(w Ç`6 59.%Í{iþ_–UVŒHvŠÌ‹Õô‹Ã¼¡kMý!ÜâxhÃo®¯žS¹È~Ò\ƒ@ë©<9W|à˜Ç7Ë𼘔\rè Z¶(À¡Fã»õ·¼¹ÄZ¡ºbés`ׇæ†r¨å¢dÄðtàz[)ž,Þ?µß˜œÙ÷Ž-æ&xHYåÌé‰u±ùfQ±ÿ§g9 à ÔhìüêÆW¾l¿aՌǂäðÞF@%SQV9'iH¡ø€ú°™_àÿnû/@,†ÑJÕm\5ã±@Þ)ïðÏ+«!‘w ‰¼k’ç‘úzØoüà,ÒG³d=°»íkm%u>ÀQ>Ö"Û¶×OMa:“ŠXý€ö™päç½ñ¬ÏIUäH%:ðõ·½ÔlñÝ+ú»ù؃{ÒAW¡ø€ª«JïQÿ%0ó Hf>¿ #øæÁªÛñ éŒ_@™iwà¡:q;‡ÍþeøÀ-ª~A|>PóÀ{ë»#| Íõ Û.a)‹`ætÇöjfÃUùée«2å?ÐÇúâç=ä‘_QkoñÉ ò*6艖ïëÓÆî¸.ùã?Àq.fÄ:3¿`grú¡Ó‡’§x¯Û]ýµ©Íêh×;[ ê¬#¡½Ù90&“À–a  Ý篭KÜ áÓš‡ùZ‰z_6}ÝôÑî5?Ýš ‹L> ­ú†ÝóðîëyÄY¨•i"ìêçÝ•3ªHxô¸5[–Þ˜ÈxÏYèùØ–_0ÎYÝ¥?aÉ%“®ui#l“-š;ÿqátMK8ÿ%Éž!;êŒYÞ’¢Óã tÑQ“ÝÜÇ`68jv]òñïŸyìøÂ¼3†µmßšôuB;>@qùÀÐéCIË ,´ê„´7ÞùÆ&Àº3õ¨í¨²Ê9I×½R|àVåè–Å2›_àY2]Ë…ÜþfßÞ^n­P5ã1Ù›€–s§¬¾07ÙA˜|@‹ÏDV8r§¹sÿØ~ãµs—| ¸^W%òÂÍ ))ëmõ ÈLœ²ò ¼ÚP5†·}uãËãmœ5pèb@ÿÑtïîWV9ûÄTvEôîXå4~¾åD™ dø©ª³ß>úž9rî n`[f–/ûe²Eõì| ßô¡ƒ¡n0ù¹/tµqÕŒÿýh‡Vj¾4ù‹× Ò¨T†~jYîÿ‹ã7v·yuÅ/€ÑŸæŽ­IYŒ+> ü i/!œä”áDk•è9ùxR ptŠ|€¸…•kLZâ—ïúŸ&ÙÿFêù–ÿ@¤¾!H#}ê‹e%ÚBÕ¬%“ȽÆôHšDýŒ6ù€Ñ‹†O¿ÝÀºD[éˆÖ/4ʼn»›z‹˜= í3áÙ{à«`S ÒKõ cùÀgóW5…šŒm³³Ð9`Ôü#R6Åí.L>ÀJ·$¢|@L­?À‚´¶™€Ñ¸È*5EB[€¯æ›§Ã>c@äêï,9oʬžt/¼%ýìù±ú­+·² ºî‚Yoˆ\ýéÂôóðÍf}+jã0î¶Þ‹\m¸ãÍ5Á=òm€2À—Úü ;ç»×üð¦Ê/H3ÈîË/苟o¤À(>ן0“|À˜aútËZªN Øç‚²IÍúUëÖ¦q«:ÛõðÄÖ7ŒÔ/X+œÎ¿¤Ä¼%{ßî fñÓóµÜú£/Ї&ÀGþÚ=]ðc’­¾a |à㚇œ…úHõ“æØ½çý]—lYþyBW@±|Àš9±,!ýåÃÎ"«s ¹úçîtäerÇ ro]ñUBé Q>àýØô'älcè\?à-Ùçf«s”þ°Ïu™p:4g*0µ¬rnRbG_ÍîÏ„3Kñ&À˜Ý9¸î¨)®âÕy0Üâºìë›_ùÈŽz±ï×É>¾oÞ°CñÍÒ\—¨+!3¿ Aûû†Û_ßÕo»_À YÈ¡ÀyÉ °øY|ÀÝ䔎:Ñ£@`Wè›w½½ÂÞ9‹M}Û+_zÎ!‰wo†â–—Á¤>@ŽàYj=No>P5ã1œ¥ Ë–_&sc…â–ÿ€Éú×Ù¹Šp¨1¼}ým¯Æ5Ð7å®70`ë÷$íkmãáþšÇ[uï ?ªºj€®Ç£éÿmÓÊ*ÏÙ/ÙAÐÞTæe(ˆð =×ûrWWÍx,öüVJû3ñ‘_%ü¼Yu£ô(Ê€4V|Æ'œØíÉ£zÎâ¯Uáƒd‘pù“Ú±ùØK§ð dø€ d?è»Õ®8¢¬òÜdõEvÂȹ;ákƒuçÿ7Îþ—ò6”$8Y ­~A˜Û@ËÒERõ æ,þŠDÎB9 S× AgƒvÅRꟿüò_%ÚJj| ×î?°C°Œæ„šz«¾¡Í`HÑ `„@óp/ðy¸ú3Ê‚áíàÈÓ•.<*%×D"V? >,>Ц[÷kj»&S0ùœdŒÿ€¿ö›ÕaŸQÎ}Ÿ‘—–RZ_W¡ø€úމª|ÀhuÞ \è7Ê/Pþ„Ü‘l¼óÍ·ƒuü ÿ€¥èŽ|ÿFÞøá>6²*?½le&øÀS¾š=}| /~^ñÿ;>p(¢µŠ;‹V@T›ù=ä#çMö5_TÿÑÖ¡¡Æ Ù¶Qþ¨e¢6‚¶«#Z×C> 0Ú°å©MA6,>À ð¿%̦½~…cçÛ>äÈ¡bÓͬy\M€ûéO.zæáDv™œ¨ò ˜]u¯øæµ×uäÐ>Ae0k`Þº×вÄ^Ãg•UoYöY·îù6>ð X–!ªðtY¿ ÜÏ«3_F«l5Ú²/ÎZô8x Cîµõé¯ßNd Xײ#k`þ+ÊŸ0àñ®"o½ÝŸ02€Ò뎞ê,ä_‡2ÚÜo¸ý•Mlì©Í;â@,É~ÃÎÛ2Ð×ÜÞ;â5à,(\ hæz#ÊŸ<¯$ÙAÈ?„ˆÿ€â?4'ÇáÕDÁºðŽÎôïžð`ÎÇÕ'öý:ÙÌ{›ÿ"| ù«aÖ/­]óµsŸxp~ifí†÷6ãðã“…|"á=΂®õ@Žìÿ"‚hg¦ä°QÿRA¬ü‚„ôU3Ýv?«vE6Ðòëdz÷ÕìÞƒH}CÚK§pÉé‚õYϺB5ÁƒÊŸ<Ÿä&à¬”Š£|rÉÃl¸Ø -o»$"Z¿ÀÆ’ªo¸vî’/I,$Q°°jÖ#©×/`;Œd)µÏ^|a,€/m¦jÖ#©ò¥ ‚¥áa_K/ð»~@|&ÜC _ˆøº¹ê‡Ã<©4ÙõXºð˜ÞàËúRkVHo[˜©(>`Õ7Œò_Íæg,>àÈÓö5ÿðLèö¤å?PÕ™~€ÀYÈзØü ãé^_Øi¼d"¿ p‰M?ð×–ê;«_ðÛyã÷ò™ú´òÔÇúâg}| >pø‘š'|Y`GsÑ®·~$–1Fš£Å˜:õX'œŽäù€i°ü®Ú¡PGË=ïÿjøl÷ºùÀD¨¢9‚J?ðlB8ð_ém;7?äÈûª—Xó¸š9Ù;¼ËÖÎý_··çqøbyB|`˧kþku.ƒ2 eå¼í*r{HFïÖ§¿ü¸»Äò.ƒé?0ÖYàÉÕ·v^¿ ܯ%ÂdýÁ:ýbgѰ՚;4Õ¼0†;sÒº­OÖÔÝ ‹ä½b«_0®=°éŽ™â,SÕ'…[\—oºûÍÍŸ\òß08ëIµÃ4P )!³© +lùÅõzÛÕ €8Ô =°áöW#wIÕspÔ¨Ï5>Y%…Ê/¸ QÂö|àÈ3"þ„{Bßm¼ë­§Û7BZöb•ø mN²9çþÚ=6> '¶çg© WGýTÍ|´pªìüðào6¯Mú^†øaDëØø@Ž6`ëB;¾¾ùåN ì‘û$âY/§§‚j¡Œ×ä$DøØªîUÝUU3ª²Ì2$sH œ…$ÃV¿ÀâÆ! HÂY—ÐWZ€[š´ø¼ÝmÓ®ËzÎÌ/0ýŒœ±ý6u·¹Yb ËL‚!8Hk›“L÷¾š]–~Àäœ €9ŒpՌǺÍÞ²ìÍ·Àº*¬8xÒâs÷Nr¢|€ˆ¤Ú _l]¹•¬GUê-Ù<;0Sö„S$«Ø@"o!‰¼žñâíF²dý³_ [ +zÀ¢ú â?ÀaŸÿØdL6t¯ÓªohòÍý¼â¤¹¹<Óˆ­_ ü‚¡m€¥8z\¦:W|  ø€©0ÅIZ ƒùA‹Äæøkkž 5‡ê°3_ßgä¼Ã2”_`Ó #à`ÖÝÖ,¸ú‹ ÒËÆMÊŸ°%>øÓëï÷Èw`Z´¤ÛŸðâ(pÜÓ)ؽæ{Åœ}| /þ߉ðŒ°ùÚüv¥Ÿ•×¶³é4Ói»C~ý‘=Á¬_PÍ–ö˜Œºâˆ#ùržæ;ßþÍëíþù1þ„^˜úö¶N8w§è?°Ï­Yƒô©Ö:Fk˜|rÓ:¯šõ :å“m|H–L{ý ÇŽ7>ü—òhW³Ãën"ݳººbI·G28>Z¿@[ᯭKD?ðÆyZ„vá_Þâ‚ìŒCOŸôÆÖ•ŸuYýËÆ>U| »3>súɪ•·8rÄ> Ûdk¸%ëâMw¿ý$õ¼ú®e‘ÙÝ Xaæ¸~ º„7fzKúwv>Àa†š—n¸ý•M¬s¾óHmÓÊ—]p…?•_p ±X†.ò–ôïÈHk»Jé8XGn¼óµÈ]Ò'—ü7 ¸•…jIx åû:‹Ä×”.<út+¿ ¸'üm<>P\|ð뀶ÝÜÃÊ*/Ì L> ¿€yˆ·¤ß¨ÈHZþ¬¹sâêž(Ÿ'Ùp®T è€?)O: ¢ˆ­oxà3<Ž<ËÀØñÕ/vú{ëÓo­QÊË—?8Ù]¡ølòÿ7;O€ú9v—_°uåV&‘½ÜTQ@p°-é‹WÅØô',(ሙ#ßÛ-¨šõè:°ã[³µÀ!)ÜG¬éMB À`’9cûoN¬,ˤg&Ó½ÉlþÐLÈ̆L˜TW<ö…YÉ÷+«”~ ºâ‘Í©óxÕ§hÐeÛ”˜úÞâ±þ‘Ã>ÿ1É6˜l(>ðÿ±÷ÞqRùÿÿ«ªÃÌìÎì.»ì•´Àb„S‚9‹Y9EOïôîs§w“Q$Š'çOõ0‹9+ê.@v K°™ ;Týþèê »—¾>?ÞÿÀìtWU÷ôôt=ëõ~½­ã§t=•|¾·âþÞC‘_÷h n«ÙB7Ï{·Io4ö€š# ½ël×ÉKN#‰€¤è^²© Qõ¿¦kI|€7óØòŠÞdÔ‰³ÐÈ”3\«å: ‘_ T3½¯îå,¢,ù€DÍÅéáLþÚï%ò }üe¬ÊøÜò€«ÓÒåOØ‘~ _ÈÒ¼>°ê08¿¸8H>I´‘¤HtË©ç×oØ}j´¢qD3>ÐLήáƒï8ãt9›MVr‹ØýÂ&˜ÃÞ5Ù =ÂÅM¥•É/8ÏS Ÿ{òB k,«ß]ýñî­óÁøÉœ±‘€["úOÇ|`̪Ô†w-St }z©WmP³3ÂD¢Aβn_{ýÓa´ ‚0›¼*¯{¤ù¶-øÀ®/‹ŸƒiLîgK…½×É,B(5÷¾üC»Ÿ­Å"ÍùÀÑòï_yå¾xçQ6‚ꟷ>üù+DÍ~'¾ÔÆ£ç:­uè’œwŠ'_:¸Áu#ªÞQºÀÊC/ÿ¯àµ$Ù„¸Î/\7ãÜÒä·ô rì.ñškuä‘dý(Ì×"Ê Æ.ró¼ ø€È/hÍŸ°pÈe²_êZ½±³lÑ'¯5odÍ¥…À=¢¸ËŽVÖžî¤s;Båµß >À[ðê1ÇCÜT¨Üz~uú3^`XD/r+ï·ôDG >÷'¬Ø4û6õ%¯ÞUs‰È/€êص›Ò«÷Î"—ºм~å?0Ü~SÎ꘬½~ù~@ýÞ„qä¨å7¸¬ƒF¾³ I?`Óã/Ûa~µ£÷µD#Úånº| kqìH j-$sƒ;Î/(¾æé€²Ùz¥óâMýÝ…¸ÿ€‡‚ÙÞÄÕÍMßK°tA&8w«àg\¦öÍ…ªT³êÉi k¯z ¡YÓ ÍšÞy>€™ú&5üXu4€œ¶r| Ù ÁÌPøPñ¡ ë©ì¬¶ó ¨Ê¡~@ðM³ß j ‚ä*=†L9ûPù&ø×Û—PUO³~€+iÎÊ^|€«¹òÀ!SÎLƒ~ ?‰âà¶êú‡ ¾Ÿj.ÿ}×óc–å_Ý(}àƒÏ´Zž¤èJ>û‹àh—Ô¬ÙùIö1ý‚Üô<ßÅ| ça>p8~±Ñ >ÐcÓôa°ø€ýU JkÓÆЦ;.Z]w^Ý×»4£ºí%Ä[ߟ„²–›ä…𮺃ã…·žvŠ’‹¿*%~¬BÍšŸEÇíùÆOXçù@fÿs==äSE9zJ8‘¤ÐÏÿÛòX´¢é«6øÀI‰ü‚†Êk[å-ÁƬºAâ&}“¯Œ Ôò`öùze7Éo$wTá–O·° ÔêBý@d‹VùHÎô¾J$)‡P22ÀOV»eô‘óŽ”éyŸq}Hýw;WsäBÀZEî3ñõîÿ;"Ë"±A;«£µ¥Èžú¦PyÝßy€:kQœ]•90÷/íÀ_8h¦š§Ðå?oyè³—,.Ï—ÖVFNyù:G++ÁmÕnøÀØÓ<òYÀ4S3Âê$›X¥÷Ë båà̸¥ >¹S¼fFPùwé‚÷S&©%Ÿ¨TñÄl µüÆANañ2?ÉŸðö”ІýZöÛþ„Zyé‚_n½)Ï›ñ¥I»Ä逿ù|dª~@ѯ„uca’/°°­FJ&>]H{¬ÅïØˆ1«þØQÒSJ> ê0+¿`ÄÒñ™–ÿ ÕkUíñ+¼Vu?®Gƺ@*þá]µÛ|€…iIGx{ä~fç;ÃÍt°ù'²l>ð+ÄëÞ騫 ÷s«¨Ëæ:qÅŠRõ4ÕŸð¸±ç•:jBñ¼P–é9nºOè¸íO(Ù|ÀtÌÆ?Q¨ë­WÆ€1/þÁ¥ÿÂ"cÇK¹)Rèˆ;>@$ï›âÆd„ÿ€”à ¥n.¨âkžÜF¨:¡éÅžèlý‚™¤B?ÐøSÍQ8Ôùœ‘¸á ªü«{JÖSÉç] n}&’‡€0;¿ E?`û ™rnù@Ÿ‘a€ ýÀÿâgEÑÒÈ¢­ç”-úøÕ¸~ O8xÒ‡–‹¨ÿ°¯O>½) ú™"ÿ´-ýÀ‡_ÆjÌ$Â.çÝ­¶å¶ó j¿Üõ©¥P»š$éjóÃñËŠÎðdÿ[?^>0ô®s.#²~eÃÆý=ªÎ@ûE–#]ké’ ™|æ™R€Ý¡ä\|÷ÊÐc€•7šÄZË/ ßvŠXþ¯Ì÷('Ùvq„RNT)¢Õ°µ»–¯[*¯é€¤ø>Òhµ~AûãKøV§oËÖà 2Ϥ¦OúK{°B?p ¡üÂ$ÂŽõ}Æõ!Ü”žP³åA!Lã±È}é–¿ø{ßñ'fú`€{ÔÕîÛûʆ6oÕ ý@`½ð'þ™íêüƒ ïSsâÉ !­Nþ˶¥_¼ ܤ–ƒ?ýL8ˆ–|€]Ý6˜vþÉž|ù @è‚Êä-‹?ˆ ×^ÿL% nµ>5ý¨QËoìîdÂàÎvùPOì.ë‚#\«Ã£Íù€ê§âº!D2ψ|ÀÎ/0oKÀ)g].û%QßPßQ¶èãWZkÈÛ£Û×bZ vŠ›å{ÁÞŨTý€×/ŒK¾¬ÚjÄš˜ªßXÛ²¼¾ãÇw: î?`óK?0jùïýj¶Òô½rã¬Õí.`sSýÐ^½bg»€È/.ìD”Ö¿ý‹p˜!Ò!X{ýS;ELÅôãF>}“«r“„RÛ '£_î0 ÊN´±¯œ•ù®“F¸).þ'SÕpušåQª<;›ëø ÏwĨ7ë3Áz8 ¹ªŸê?€#(‘a×7tÁþÔuÖa˜=Ý ;qì‰ü.Öþ uûhà}‚¬QEÒ]îœÄ‰ nõ%ŸØJhÎ4Bs:Áx ý@!g\jÚt ®ê<Þ%õ â@Bo<õ RüÖSÙï_ð'<Ô| :®Hò'ðÁç ÿ´ð<ÄâuUö{­èú‡,ýÀó]͆ >ðÂÁ·x8GFWðÀÊ/Hè3® =ê ¢ê㹦T~X®hu‘övé:>0xÒ™g)ٸݞ´@SY-ª>Þ AQ£ íø|kùtF?0pÐ yÔ¦}«wܹÿSnTÍøÀ‰Hø´ËÚÐH{º+ÃŹVgìðtÏ{Gíæ- ªlfÝo÷ÞWÖïHÞ¯™~à5"ÑB1 ÀOr®X¿ë‰TýûWé‚ÏnT»w{öÅEŒvÕIúÉ©µÄ~ P4dŽš#ÛÉ a#¤Þ±å¡OV@ñøe €l-çsmˆ“uc‹xÿÊò¯huE3Æž¦æÒSEçºV'mž÷n³«ØS,®‰ë1Gõ±›J÷7ãúÍ­ó96ÙþÌõzúhéü–&úÜÄWàs}´“ñü›ø83SõC§ž;ÎþªÅªµe‹>j•¬½þé0ˆ*Õf7¡òšd>0Ò_˜ŸÄTã*ëè ¨ÚN~BÕ5â|@wµpÄäOxƒ_É’{àZV±yÞ;íäyò³¿IÌíôQnê?ð'|€3ÒqÕwAIl-Iï1/üáH7ƒH­_kûrj·ì·œ4ÂMiMüÿLs©@* |€°ãÆžÓ¡?! <| 5ÚƒXÕÌŸðJUÉæºS>ðü˜I \±øÌÜ#&\â–ˆt!K?ÀÄépWË€¨Yº 0pSsµo¼¾!“©ý“êV?P2ñ‰r+¿ »³|€$U?pˆùÌôÆ&×eA܆ìWEö}Ü ðÄgB½Ìñý½³‘àÄâ›ç½Þ¤Õë æ¨EÓÆ¦ÑŸ0™d> ¿›V’hý¢·@XI*'ó^Ñ›ŒZPs•C§žãÊüÔI¤êhIp[U3ý@Tyâ‘KÉæ7¤ÌþTÑVù@ÙÂ8¡DNÈEÜŸ°M>°#I?Ðå|`¡òK‡ùÀáøÅE'ó Œa?ñü!”ÔZþ„UéМ{9Q+Õ¹oxwƒ´ÿ­ø‚ªcô/‰ä«~ÁAó³Î’³ØíJ@I±‚ûùÅÐê¢Éþ„mÕ/úŠÎð¹ޞJܧ^%¢ø}a#Bß^÷ç—RJ v-Ðäeže„}Zµzc‡RgdÈ9šÈ’GQö¾òã‡Éû¥òßkD¢Ù„bP‚d¶ÊZê4éq5O ÂJþŸ²…ŸÜ_³f[uß+G ÌÞ <Ð÷Ê“¾Üûò÷¡ÖŽ*U?ÀG!áOØ‘~`È}"¿€³( ›1ßí[ú8¾–ÀMé;+;—'Ó²–|Àï/Ì×êŠf\pZŠÿ@X¼yÎ[) ™Ô›ù-`OÏÍ_u4  œj5¿@òhv~Õà‘Òï¶XEµ,ñw½Ðéºq0­ü‚f|À?ø¨+$ÍÜÎ-‹?z£­ÆU׋$i‰zø un‡Åä`ùœÐŒ迎Hö/l¯!3ÊK`9)ppÃÑÇ`ÓÙ“â#”â|`Ôòßû•,¹®7™U›f¯n÷îõÍïž>È;B@ôa#–ÞäøÉ)‰ î?PÿýÁ@Ì&Ö¡ÿ€ÊzQÒ£v#ÃÝœ…àY‚'B%Ç TI)}¤›´Ð yâ¥yÜØ³ùXsBy?®çŽT%ûA‰B3€i¦cý€Š5§$,«ïø ÝÜ´q»—BüvÉu~Áþ„"ær&,%LaŠúŠDÝ\ÑÅ×<¶ƒÐ¬»-ÿNåp€ÄërƤXuU\Õ7ì,à>ñ²’rƒÄ Œ`èè<©õ ä,’?á¡à¦Àz¤)¡8 í5G):uì1éê¼m>`(6œ&„FïL×’ê¢øð½Að&ññ»bŽoG?pá©Éú½I¹£ôwS&*Ï™Ä@„ˆ˜G:©mgñšœ_ps[þ„SHà€V‡¥e ßmcU¶Ÿš%"QG³ãð®Ú*Îèýˆû6ç…Ãþ„ô[ôz[ª¬C<ÏÈpìoÄDý‚üþ„Àˆ”y{ OXV.ÊI@êt@sÿÓö¸!SÜá ÕiU›ç½Õñ6±}éX÷1/ü±§Ó„wÕ&ûŽ„å?°ï"ûL°hÇùÖ¾r¼X;gú‰nÎB°ôÂ@3|ú€’•ýâ?8¦ËuF"¢¾!‘ Òuˆ9âÒ±Žôk.}0.ïÀ}°›Eï$>À 6`îø€¼Ù:îó¹Ô "΂—‚ §EêR> {¾FÜŸ0.HpIú÷'té?ðØBw¸»xÂ:é?ÐŒ4mj8úlÛŸ£98„ùÖñSiõõÍGhA@½‡¤¾¡ÍƒÛª¶Ð S^lÔê5Q¿@)2å¼4ûðÖò ä„?¡¢§1¿ ögûQP饸Ê}øªÞdÔ€š§(šqþ ]ݹ¿°àx€ ÌÖõ>@ä ³‹ó útŒ™Iþ„­éÞÿL«5¿8ºžDÿlåöù@ÍšŸd3 | '€„J‡ùÀáøå…+>pì‚_ûµº¦ j¾Ü–­hÌCŸ0)¿ -úó.§>s¼{´ú~~þÇ6Ú!á®ã“Î9KÉæ·Ë~¹[óýö¬ÚŠÕ„ì'¡d>TTá øÀû=Êh$éÌ0«Ë82D¢1"V”\÷d|•ÍâÌÖœêOH—:æ×/¡ujŸôä)Ç!ÁvÒ̼1Ç>ÅÍðù„€ÐØÞ—7Ä—ï,>NâR¡d 8WœìX?Pw öI[âÏ ®E~Ö—nYüɵ_m¯Úýü×zß+‡Ÿ,4¡{_þ¡U³$ýÀ†„ÿs (:3)¿ bD¼·o[úé«©ÍËÛ-ý€Ñm̪[òÑN·U¹â§x ä3­ÎMM«“nß<çÍV¡åRûòáºÞá¬(¡Úç’ªO±?s½^ztËâ÷Z­òFe£xnààúŽØ|€Ü/ü ½­ë2¨å?Poì([ôþkm5V<þßÕà¤ÞúLÇ+¦"¿@_ø‰þ‚dý€¯ØHåÌ…7§l·N‡ÙÓ ¦±ÃªoHt€7ãV~ð'|ssÇMÉ[­S"IŽWÙRù³ùÀþ‹þ„Îøg4iöd9`óØù©| Ñ~`ï+oïJdY.WÎã„D"CSô¾^=¶9À«{¹qÜ8ÂÍ¢·ÅˆUßPð fXåD—¶Z‡Yí&¹ÕØõ ¼Ì6´p÷l@dõ[X¿ûŒHRØÍ¾ˆ×Àà2µÑ+‘©Ô ýÀtB³gt‚Øåëe¦ó*ƒ.Ūk\êÛçt[;,>”_&%é™?!•¿J™þ·ãõ )€Å6Ï{½I; j>ÀSù€!ÇÍq©b¤“Øþq> @íW她£¼DòJR†Ô-gø@³ö«rÇÅ4œ„ÅÌ[ÀA²6´½æÅønz—Ø|@Ééjý@ŸŽó J¼³&V¥¯±N¡]Ì’ò ä‡ÛÑØ|@éb>)ò ¤Ãù‡ã—®žF<úÛ@äçŠK¢õ}k¾ÚÁ¸nÚߢôê†ÞuþeÔg^­f+½ÄÍÕ_ìDãOUÉ›Ù5€ >P{°ús›éây ð„ÚM”И­0þµåÿ½fÍÖjèûë @ôc-[ß–=/}[ѼÑT>¯oè$¿ è>5G±ý #F“tÛÖ‡?Nå„$2\Lm`{×Å`èq=’pÄŠÇ?¤’ø!0p²OÒšÕ/P`±>3pTöVç É6ûËùôM§{ >’_ànr£xü³.ÊÐö¨Gî¤?!÷&ß ]æªëÏ/ AwûÆý  QÀâîüþ½‹Ðì» Íî„~ÀöÀ™›¨Pp©ñ§úapÅþÝIý€ (H%åYo¿i4U}Cà„Ò ÔÓ£û{I|ÀUáÔÎgÌæMÁmU[èÓ^lÐô \ÍU Ц]xˆüRý _‚¸·CÒÒè?Kö'LÖ|ÐäÈý‹f\Âô\Sÿ)´$DÎ0¯M˜™ÄZ«oøÎçZ­aó®Ö$×7\Þ]Û–~ ü“ìc¹©¾¸þöiàòËÁmÕ‡õ‡ã—.õý±šªóv|ciš6WÚ©ßBi Ù˜&>0ö2¢êWª9j€[ ²ƒïzvá¬E)ƒ°à/42ù¼³¤»Õ®o˜Ή$±]+Ö7é¢fÛþ„Ãëí©Æý 0­.V-gdìÈè8’È’Ihæ¿‹',û üƒ{ØþÉ|€Ð,ÿšÕ­õÕj~õ©Íü õíz™Q¶ð£ÿ ¼ùüí Ú™'àòþ½/¿h“ ꈤÜïûŒëC"ûw=®æ(–Ä_35­†/ÛòÐG¶Üžîêžh%¸56³wkGÙs  ÀBaÁ{€1ày»2s`w*¯ùWò¶ÍôE÷Å;ša3æ½}ËC¾”¼5;Úrn¶+ë|àÿ„ÿo_?0ý¢3<Êiö‘Gö™i]?’EEˆ™ßQÒ³àSµmù´ô'”¼úíâ5×ëɶÿûãm7kó¨}Ç_Ö®ŠHá&,Âæõ λ\Êò@«×w•-zÿ•ö$TÚ›ø?ï×Ñ€æú–ʤL~µØŽ)£Cý7y|"™ሒ)|€¦êürOÐôªÍsÞìðîÅ™'1âf§|À^=·ê„wU\b 3Äñµ×/ ´AW§B¥Oa•ˆÌÉè—7Œrf؆'PrŽò ¬ Ö…HLW€åOhe^ Bq—|Àþ&pßè•ÊqºWù±ø€ÁL—| þMà&se)ø€•_@$"ª³¸<‘P~²æ„QEªw¹3À9c2å†à‘ÝóÎæp¿8äz™›¨0mÚÜt,€õN›9>T¿ ‰è .+r¸þRfæ;Iõ ¥ÿ@²~ÀÊ/P²•‚¡S/üà?`*ñü"iiôÐZðK?ðåöÒÜÑý,ý€OÊé6j0j¾Ø¶á`:kIú Ð’ú3"/±ë¦™DZå[¿·&V“.ÿ8à„*·Éj¿,ÿ4á?>ðRp[õaýÀáøe…{>PU}>¨9œÅô¼ª·î1£º‰tó!“Ï»˜f°kÔµ7Ù^Ư+ù¾oñ‹l×/8x>Pxë9§*¹dr*à „HÄn­Ó+ÞÛþ„žfíq‘_ð`SéþNñyž|å$"Ù¹ œëMFâßd[PHUê”ò’‰ÏÌÚä€[ýÀMVô [æé®O(|@+7‚òÌÒûßÿWí×;¾<âêF¬@ÈÞ—7¼´Åìü~’ÚÍŸ¥w\¿ òãÿc/ásƒkÑ ãÑÒý¾lá;IK9’HýfY×/i‘-kùÔ.¤;õ Ì+3voßÀ_8lV’~ Ì4ßä-‹?X…A…ó§;~ÞÒæì¸€Å ®huE3.>ÍS œ,jÆbUü¶³^m+6þkÆu³Ú‰$>`ëZçTÖ&‰×\«Ç£[~{ÛÍJUvö6¡¤Ã©úÞ ˜|Þ%B?€XulÇ–Åï·«à&«vvœ3ÃQ¥Gá?`×/8!5¿ÀkÕÀ¨7ðŽ£ÞX•¥¾$`ŽLgOÁâg–çAªÿ@½VµyÎëÞ½¬9$m„5ÍÎëhûä"¡þ„¡íû/$•À 2gþ,{Àt< ¹ÿ@Þ0 jþ âæ®æf;ªoh…$¾Š,ËÍœ >À‰D†Q"!_üÁ •åÈÀ Zgϰ`:$ev$ùBIßp­@²”α…ˆ¬³î¥D¢í—n#”2ˆy>À¸Ü™Áò'”(7˜àTní¾ÞV$ñéÅÝårvý‚F;¿ àtÃ;Ÿ àG§­tžp;7©"9¿€ÁC¡ðØú"ô¹ï >À%9ôþ?N{±A; ‰ú†Jþл.tì/ã6²9"G(¨ÐÜŸ0™LN×’ê6÷x÷5½É¨,ÿ¡SǦÁŸ°Cý€b×7„’tä$û´¦xûóX•þ…uz®üXùmñ¯Ê?Í>f@˜›žÖßþ\WóáOx˜Ž_X¸ô'¼63V]Óµcˆ„^¡uõ¾Û]cù’Zº1¸µ2 õ ‹Ž¿Œ(†ðàö½ƒp“óO|C¸U“I<Ô(@º† ™|þJ™$eМ¤í-'IbøÎg¾ Á˜/‘îŸÃúïííceX„R®5h5fˆãÒ#¨èÉÖÖ9%ÝšÊ؉b@\ø:ç#–Þ$Kž'<ùê±Ö ô&s'72ælšýÖ#µ_—uäÄS2+]˜Puýž—¾Ý—ʼ¯IÊNò'Óh©سû15ÏZÂçtí{²láû/&oÇMVO$ûÿfs{[?°È_Xð>Àg<0í@?pÔL5O±ü¢,¢7Ûʾûbó¨W©KúsÐFÿÿKò¸ªm>0í¢“Õ<é @Ô7Œ*“Kx»U#u5ë“^ÐN4•îs¨ð™S,ïr­ÿ*¿ºM÷µ×ÿ§ Â{àVzlÅŸ°¹~àüËâþuÚŽ-‹ß{½£FÁiÖ¤$Ðá¶BåÕß*·á?àeãíTöçtȬM‰PS3¿£ía×/hæ?0jù­~5[í hõ±ªŸf¼ÔáÝKŒÀçŽ ü¾gÁÊ/¨ÿ~K¢~A;m œZÕýËt3¥K­_w5ãu(ÔÜìwœ6”0€–——;*¦!"¹~ÁPJb㸱g¸àh²Û!RË›Q[!ø@8‚BBÀ97¸KBZñãÄ4=ÇÅÀð Bwµ ¬ã¦ÛUÔZ—{Ûþ„·FCd"¹çþ„úï.ž°ô`ü ‰ðýáýÏŽàxÉö ôÉõ ê Mg¹mÐmX|€'ô¾¾½Þ³×Œ%A~Arý‚ª-tÔgúµ hƥǥ«s‹pÁ’ò ˜&%­ DÓ̸by$ñ-‹ß{]oЬú9Jÿ¢¥+¿@Ô/ %Ám•Íü cÊC ý›Øõ|€ÝkéÚàe‹Þù2V£¯@ºžÄþ™iç8Ñt5Èè`¸åOx˜Ž_X¸zþÈѽ•—pS?ŽÈèÅ •oÝ¡ˆÔ Âôðáq—կ樽D~A<ê¾ý¾Ù‹¤¬»~AWèÎ=UÉ%w*¥[Òö!5‚†Zõ'Û%$–ë“›?>P4ÛÛÛs*ì5ZJ™Ö Õ°¾#²úaö±y·LW¿/¹îɇ|€BØ·rÍÒT·ÊZÜnǬºAjø±Ò.!@µzmוÅe ß/á^ùÛ(€L+³"¸µ²Àj«}}»¨*ÝB(ËWóÎÌÝû‡Êkiw}Æõ!õßïL͵ù×´:öDÙ¢þ×ÊÉÓd‚ó¹ç‰ü‚ïúL¹ë˜dv¯š›ðÐ¥[˽ÛJçìÒá„·™sÜVÙŒ°vøÀŒKNñä+gŠ#× 2¥tÁê¶'*Ü.%ƽh'ó"Åî$%à@´ÒXZº “~•-H jÆ"' ÆkY€«N'4"¿@@9c > d)½,> ;Òˆ@˜¤rìøy—#“Äð®›$ü|[zží?àJ?Àµo¿,vìÒ(ø•Ñ/o˜Ldû9ÃÓ=çÇ ÇÒªœéx?+ÃBàÞx}C€°cÏ;Í!ž•ìoçw|‚Û*„?a  „ÜpÃ8ãvŽ!@ ß¼OŽ{ŽºÎ0vÁâ$žîá`¡t=õõíù®='¤^J–|@ÍQó‹¦]šFÿ6ø7õ €è”t  ýÀ;¯éMº]ßp@ÑŒ‹ÓÀz$éZá\÷ÄõéáæLÎ8E›þ Þü"V¥¥I?s£¶ü Ó¥¨:ÌÇ/+\=·ð79ÑÊêóˆÄ7 ¨GVC;êêj¿Þ±#‘_ÐÅ|Šf\2ŽHú•j¶ÚÓ*–šnrìxz-¸ïSøò»j;tï ~ÁùgÉY¸M𤺠ýÀùŽ'Ö23ªwŠ´ª†½¶x Õ»™s½½<¿‘<Ôžýr½A¯ÑëÍÏŒF²40´Oµì— d¿/TpÎ 7VRú8ù™PJÀyOÑvonš—ªÝü úp«óL¹µÎ׿ýîžu€ý¨¨Õk;Ì}`ë’÷ãŒ^ùÇãÅó$¸ÎäVøÀÍ„ò ˜ì˜¬{í­ejž*êB×jÍ'ʽßrŠÎa&>@)åL&ô=ÞwÉŽš¡æ© >POn+[ôN[| ~ÕqÓhõ£tÉ.=ÅÛÓs6`ñ½AšTú@ÛKø $®A¦^¥Í_ÎÖù@Öø€6ÙZL"ÐðGË®n•ó„šñvº;äEÓ.¹B Èyâ‚ÛU¶ð×ÐQXg€XïðÙ!•°ü…=|$f×/àrFŽƒúÖ…ø}ÁtÃRýF-¿Õ¯vóô¶ä:zõO3þçh‚J(M|Žžž,>@׉áýÀúmc->Àa61gþ„ÖiO €PÇò~áO>@s¤Hß‚œp¡H| ¸iºÈ/ Íü %ž+®%vü…§wh™è?qR…¸¨_P‘êOHU)ààsÅR/Bç½Í—|2çœÇ3%\…´»¹uñOæˆ T•¨;>°t¡YÂÀ5°•7 2Óù>ƒ9còï¯9T|@Ô/ ŒüA)õ†ÆCɸðð½ËM~ë²ÓÅÑ7·UZþz¼¾¡'è]Šüž’_ÀtÉþÍ'DÕÓè?ÐزøÝ7ôMøªýÓÇxR~Asý€¦<ÄM&ôÐg\Bý¯q>PÇÿ³yÞkíòžÂx»Ù:ä¡#.·¿jZ½¶«lÑÛíúŠ]“Ï@‡‰Ó©ùìÄT> éq>@ˆïþŽ;À“€%çŽJÒYùБ\¿`ÄÒ2­ü@«×ª;:õ­}œqG9ë‚Øù–?ahGÕX+}‹Eñ“†€*R|„JŽ“æ ¥‹dgôë^$ø€²?Óà‰»(óª€ñ3Xþ¹–ºž°¬cŽù€E@ãáø X|€$ôÔ#ùΙfºôH:pv $EÜŸP望–»uÉè~ûD¨ô³Ë$ü aòN‰ŽY5Ù%ðßÝÉüÁH½Ìt^ðBΘܴùçCÄâš“J H›DŠ×šÎtÛ Ûýž¸¡Å|ÕÜdH™äPÔ/8CtoóUMz“nù”ü¢—§9¿€„õ„•Ä¢ñü™”®¤Ö/“ùÀ;¯Çõ¹žE3.I³~€–·U4×(KRó v!8ÂÿÀ‚7׈üQß°¶ ù@¤™~ ¦->°-I?ðTšü óÃñ WÏGͺÊk4/eéJú‰ÈHxW}Eí×åëÓÆ†ÞuñeD5®TrÛ@+%8Hùã_sn2ˆü‚o­ú†Ë&=KíFo—2äœVÞ6‰DÎ¥íÿùŠXHÛ`Ÿ;ý@ŸqãHïKûÝïí¥N¤JB? ÕǪõ:ó#3*ÿÛÓ=ÿ!oì\Ù¯ä@F]õ§;þB?¡ཹi¸ÓŒY5Oªÿî‹ÇìY2hõz9×凒ó `ôÊ?ŠÁ-¸uÈ P•ÞœÊòû…Ê«—v8€úõk–©yê@„\‹Õ˜oYün+`KûíU0+"{j“ô|À»Yþ„ù‚äHø¤ð?e*Ùª¨o¨UošýŠ£ êö­;3§dq­x»‘”_€¤ú?_X°…Õ/êMQÔ;ÐÜŸ°û0Ê™÷'Tr²œ×/`<‰ÕsÇ@J}CRD‰÷0G wá?¨ƒ›ÌñZòUʘƌâñ÷8žçs3ñÉÍÐŒ0q:ÜzTBüîªît¹o ˆU$iÄÒ›ÏRùÀ’ƒà1+¿€3NµºÆcv>Ó‚Äbÿäl Rfàm{ÍøåœkzÞ˜à º­(H?à'º{–â·ÀŒ ±&`F'¥kàB?Ķ.yï ½Iþ„žC¦\pmWwÞ!`Qe±}-¨¹Òﺞ°öù@ÙÂ7¿Òê ¡H0ò!nÊ/v=ÀaýÀáøe†K›2cÕUsÓ8–Èè%ø˜ÆbÕŸn-Ö„¿ n­èjÿq$Pd\nù*=ÐúŒšÔ¿‡×–ì""Ÿð…𮚃Í/¸à4µ½Sð”ü&78§‰€sZ»v9ðÍÏÉmòD~Á>wú2åü¹ž|Ï)Ij\«U³(¾á&ý ï”S~bÑŠAD ÏÀcÕÚê­¿jÝ€¶©h1€3>Z¨T}òé£J¶\˜èXÛ æýgé‚×Ö'o;zÅm£AB·Z¯2/™¸ôsHð~È/@_ •Ww”_0ŽT~üÉì):7¸«2ßòP|€°$c<7ÎNåFR~A>k—øG’ù@ÔŒzîÜòP;|€'ÀÍdË@+Z×´ÍN±õLcºÞ@ïØ4û¥ p'[ÒV­Á,>GùwB\ZûWÙBG|À¶4¬zw­‡ÿ /ŽóÚØÎ-‹ßîØŸÐ:áIGCm*¯jæ?Ð3Ù`Ú«~gþ@„@™Û^…íG«úQÏÞéS²”ÞáZ]¬jóœ—'ÀÇÒ„49Ù:•Øùë6‹ú†L÷N»„D(¤©£É|Yýºþ„ÖýHö;¯o¸­t{v\IÃÑàt¿Öø@¾PϘž|çõ ¨JºÁºßsÉñ’ò ˆð°ê0Í4×Ýú”c%¡<'éNîâ ¢õ d°$êí"8#5ˆóe»«ãõ ¸LÁ¡T‘dw|àŸ» ͸›ÐŒÎðLqêe¦óý 9c’VEåœs®s-ZѸ£öëò·»œÀà;.¸Xò“ ž\o/Î’%݉v¸ÁøŽgŠÁu–T¿à õž&ûùd%ÛÓ“šHÔdšÉ©"àÓM²ã‰¯Á·ÛuÄZ½Ûõ7ŽdöÍ÷öVG#q·Œóªx?èqÞI›>;gª>zÅ炘ý™Æš8#oJ“ò ø L‹=9°`i¨¼ÊY~Á-Tª>ûì1%à`ÿM«Óv0.Ú²øÝ8r)}à5ûäçUÕêPyu²~ ™?a~|@øLÕ˜mYüÎË­~̪y×wØóÃøìXð…þžïú½pÊCcsÔ5•,~»Õ΀E« mºæï·U¬wΦ_~’š§œ€0éLSïìˆ ñªï„J­ZƒµÎz¶R¿ÀkþâêÕëù6Í~¹CÄž\v^ªnk³–|ÀhÎ.ºLÊâ| lÑjgúÂ%å$y{›¶Ï’ôRF–s>(-ÈÑ·º£­Ûæ~ÅÒÔŪ6Îtæ? šÌƒ5=ot’·.ò ÄìXð†Ë.±ý Ýðш˜!Ó:§{J?ÿÍÊè×ý(Ê }„•#B de­vÚИUó$€µ¸8Bü ­úÉ®QiªyþmŽ=åà|ÁmµHö'„dÙsƒ17|€*´â´Êé~âØm½Wã8që>Àİþ/¹©ü$ø€DÁI œ*2uÇ–ì"4k¡Y3J&.qYß‹ú†h”YÌÜo嘲V:®ê<ØY> è*(¨¼ ÂXoh8Ûmƒn£ý«mOªbôA´í(„ÿ`óM³_ Ú|@Íõ ½ë²CTß0¹~AHo}ÃX[þo½¡7i@Íóz×%»ºsaÏdµ­ä¨É|à·éÉ/ˆóÅö{Iù¯­‰ÕÄÒ”_àšÈ]ÌüIþ•‡ùÀáøe…Kÿ?BÛ÷\@ŒX>‘©Â9×X„3~ þû=¯U}²ñ[¸à޾ëCïºô2¢šW™¡ªÞÞžq¶Œ@í®ž”90/ еÜäŽø@»|Ç…gÈÜ¡dKݬ[F¼ON$ʘf%P…R«J ÀN'NϘ/ü\æÀÉcçøúxo¼rr~A^g|hFéŽ;ÿÌ|4áágÜ4v‡P†ÊžP´:úqxgm]Ÿ Â@ƒ~ äÜŸpÝ›ï?nÏ’@«‹í÷ü£ôwâ§´l¡p—çf_€È’™Ú1¯íXöéÎHÉ/pÆÖ½öÞcjžgÎ4¦E÷Çþ½mé{¯µù9ÖÛ>CzCxšùt¤(ŒÍTó<ƒp5#Z »µÝά@|šµÍëƒÛ*lBñìØ˜vÅ(5O>Ã:rS7¢Êä-­ÞÚ^×}Æ#3äÖçM¥{ê¸IîìUû›{l4Ñe¥ó_)CqÄÄAñòœ¶y¥‡wUw¤¸èâxý‚ÚØÎÒ^ ‚ëZ¿¤“Ù®9Z*`©|€zaK8¹ÈvÎ8ë+Ρ.^&Õ/Hð–ý1C X|@oЪ~šñ‚>ÐË 7Íӿûª[ú·î»˜HVÑP3ÂÝñÂz„€£¡= IÊ.–?!IäX|ìÏtž_`|€sÙÅ츹?¡BòaÝÄÍüÓGmuÚÌÈgnë0¡'ûîܶ¿¹~€ >ÀÍÏΙª;mˆH8R'޾­ìm×7ôʰrHª¡“Hõ°œ8 ÿäf_Äù€•_ „SU’ÜLF,>¸›Ð@gù ü ÷ħ՟SàG§Í$€åO)þ½7‚ÁsÝ6è6ZäÈ~ß›–~€ªŠü›Æd>P¨¹Þ‚¢éãŽOWçÙÇôËiÕÀ ñçã[ÑØ¤t ÀŒFo†¥à)|`ë’wVëMZ-¢æxú½ë’ßtu炜'޲5ý€dó¢äÐëÓä? ˆ´îO¸è/c5±Ï€Pš>gz¥=>°õÓìc…,ýÀ‡ùÀáøÿG¸Ì/¸1;ZQsgƱDâ½¥ ‘)á‹1Ðꢟî|úÓ÷Ñåþ„Ó.¿’~¥šãíe'È"µ“U“J3°óéâgpÌÚÀÉŸ)p›PóZ¼ÉapÆB*sÆ 7ßñÄW„3ûÐo-ýÀ^·þ„ãHæÀè\oOïɰî–Üò5×j­Xòg~<âÒ3ÖÛk…£Wþi 7ô­.Þ¶ô£*¡PÅ~1€þ«-ý@‹\[¼„®_ýáJ¶bó®7»¸©>X:ÿåšo?fÕd?׃ÿ¶^©_—Lü×£Íø€@+ò ,8ñANp“kZùdÙÂ7_lërÝ,L¼¢;€Vù@À®ì|ÿòû÷ª9qsĈ”'µ×¹BÜ©›4E]›ÄÄ´÷ö¼¢ÕM»âd5O9˜fjzNÚ<ï%óDS̉éëÝgGów˜B¨µ¸ÙЧ‰RÜh"Žø€€hŒV´5±IåÜ׊ÿÀÅ—Ø_57|`Ôò[3âKø\j÷çÛⲨǚëÈ5â÷8Ø1‘-{3d:ö°Ú0ûÛGTRîè¬Åëðœ$>`…œ•õ®«f]€\®,ÿæl§äú†´ˆR¯”/ ,ÿôóÓÞ¹Û °îâ°»óY| Éœynrà ÐêBƒSzÉåìIú‰rQ”§C«Ï” $«~¨ãwÍý ˆLåÎñ'øü°~ëíú…—ª?ÿv(Ç´£ó|À6Ð • ›m‹X#<ßmƒnCö{OBB{²ª¹ÝÞä¦å²I½‡B?`ž.ŽÞâ?Íx.¤7i æx Šf\™Fÿ~9‚"Õ Äíß|M£~ úg›®7ão¿a…~ ×Óè]—¦!¿ çñ;ÇzE[꘦,NâiÈ/Hö'ä­é^]«‰ÙþéÈ/ȳږ—tÀ¦‰@øæ‡ã®õÑ}Õ—™‘ÈPª^D¦ °˜e:«!’²áçJ^‰ì­vîaíd£!S.½˜zÙ5jŽ··àmh®+Ù©øþçbË ú`õŸné”<«ÓDyC¦]à’˜UQ-ý9-s`þ÷TUwŽôÌöôðžjO×p½I«5¯%oÆG9'ôÛl? ^yÇÅÜ]gjšgßkö7nÚ;$¾¤ ¢ôŸ¡òªV»­ë^ÿ`™š›ŸvkõÚ0ÏÃ¥ V·ñìg!2e²ì qÍiSœþ¼”à\Ø”ÌùòŸTs=¢¾!×µZãñ²E«Û(1h‡1Ð:™´"iSðCðü:s` •WµÍÖ½þÑ}vr‹š½ü¥lÑ›ív>jùäˤ”yEØc=öµÇfüú45W9õ ›È¥ ^éP®K$–¨Í¥›„~@ê€HÚ$ñšëü?e ™èæÐxÿŒ¶úDmñØúgæí):õ²qq>P¯í*]ðÚËpö ™Ô®½þ¡š¶¶úÁø ©ú•‰ú„ËYŽùÀ˜U3ü€e!w8;ù©õ Oxâ/%Ë®_­úiÆJçú3rŒ¨æB•‘N3>`åËv_b5ÂÂÎëgzÒçÏ$ÿìŒ~ùÃ(7Œö-Ö5àqFܳj—Ãüóæþ–~à0=ù™ɘ•‘˜BC"ïÞû꫎f×Iú‹jùpÆ]ùD+ö ±ýfdÇ`CD2 –‹w§¡aˆÊ DR]æ¦Äù€bû"S:fÕdÕi %ÜMhæÝ„fÞ]|Í¢]³|€$üH?íŠCª@#!R¼ÌpèPð1v„Ò ”3þ¦U¿€¢òQé@ ÿ­¿Ö›ôJ€*>0 Íëš!öìÍ´úFoxjÎÞLÍ/¸,ù¤Õü¡ÿHâiÈ/`3-å-Zçe‹^ÿ*¡Hàð-‚ÈéÐÿÃ|àpüÂÂ¥ÿÀ_2¢{÷^ÊMýh"‘ÞD& ¬Ûªa†ô*Pi§{þ;?NÚ‘K—ã zù¥ÔË'(µG+|€'·¥7DØÏ/~·†iÌè ¾áŧËÙt²PmÿäŽ[åÜ`|ÇS_ŠZ¤súk‹—Ðï_þ`ž§ …í3í@¤ÖŒðµ`Ò»™ƒºo¶Ÿ!Ç¬š¬š¡¦Ç™a»kÍÝÏ}þ„ý¬)úG{ ¼Eç\«×vJªÿáÍóV¯o­®£ª2¥ªÎ:à-¦}µÚªoÈÇrÆ=»3s`AÿPy•ƒú†o~dëÓLM«3žÜ²xuûKøÜb­ºt]ª~À˜ËàÊùÀл.™eëXÔŒAzk‡Œc„8:¸ç¥]ñ¹…àIõ ÚÕŒ;ÙSà9ú¸¡7QG|àÔ7ïÉa},†%mo>A±ø’ó nööjM?`Ü ›4°ÿ”-ì¸sЛBÃHÖs†Ü ó‘ðHåEÓÆ]¡Ôî Õk»KpÃŒxŽ*QäïÛÚ*T^Ù6€¤ÿZlç¸~A"ÌaâXjŠÇÿ£²½-SùKª_PûX§S¯Þ4ûEÇúQËoï%<ÈÖ=|`ŽÅBÛ÷^Ï/h2ŠÝ;‘ȯìÿs?8Ú‡J¢¾¡ÅdÀŒ7¢æf¿ïòô ‘@½¾u‡móB$RD©W*w[Ó_t´ãÓo94šân)í)ÿwG%àB?À½7¹é¦~AyùîÁ÷Yƒ—]ä¥Â°ë@"ÌJRp$ K"©_»Ü—œsÆeÊ5"ÉX¼‹Pÿ B³:Áâùõ2g¤ÀtŠüÃõÜ¡™ÿ@%¨]¯†˜áðÿ>`ÈoØþ‡˜4 >ðjX踚ã-8zöµÃÓÕy )þfˆ=/N 1µà¤t @ðÖò ÞZmE}ÃOÿ¡w]–®ü‚$Âý©|À cqÂ@JC~AÇ|àËôñ˜Sý@2xÐb#–Þ$Gö×<¦æ¨‰úµÑm€çÁÒÚ6U½òÖ¬U4Þòà{wiuMjV¿à¥PyUûõ ûŒG"ûkKøœi¦«ŠýgëÃo·ëU7zå” ÜG4¹ñÀ·Ûçæ,á?0>s`š¢™ÿ€>+I?6#ʤŽ:·‚ÙY¤ø šÅ’벫Úá¿>ÙSà=–ã¦fƤI›ç9ô©ãBÍ¡©Ý|ß%¿•Äj€öùÀñškuæ¿7Ï{É+è–Ÿ%Q¶~qáý-îÍüZÑÜuùåÉú²E¯¿êèÈp=<D\Kœ:á¼E~‘Í«ìöQç;íÜ óD{_¥¤½-Sý YB? vóÚ| Êé©ìlc¨8ú%Õ··½àâú¦Í»Ï³êf“ñ›cUWD¡MÈŽ¦ç©õ ó‡Q°ø)„š›ãJ?À™!&2„IùÊÙ^mé@˜¿h˜c>`Y€è–„‡“Êâ ÿ¨p²ŸÈ/újëá&sÅúŽXpË¡‘ÈŽðLR˜Á½2ˆõCã²À¢]¶~à —û2°ø€ Á¨KÿŶÿ@gø€]€¥^æ&¯0à´òãµCltÚLñ„…«¨¤`ä'{‚kÚX· º Áˆü@zÃÎ/ *?”þ„ØòÐë½)–È/˜~åðtu.üĽ#©~d¶ÿOgý‚¨íOÈSêl}ø­Õ‰ú†ÞC§^ž†ü‚^ÇÜöXÛ’4±E–’-u±~ _³üÖ’lyèͯµ:Íæi¨ohóéÿ°õòKÁm‡ùÀáøe…+>pì‚ýÑŠêóˆÌG¼U$/‘)g1#ÐzÎÈwýX½þ¶9ò§r4€k‹—Ðu¯}~9‘Í«ÔnÞžmÕ/°ÿÆM΢M»÷¾úýÂ.âò²_IÖX;Zõ 8'T•Sø8P¾ì3p†o-ÂNñcž§ î?L«U›!£˜ªžË¾ºÞÞ~̪ÉjpKõ Þžž»ŒpÔÞYãÝûêw¶©~ Îù€UßðË+ÙjR~Al‹’…[¿ÞæSóè•wžDoÀŒ ­ô—Š Ä™þô•|ñ5Ï;á×´:}YÙ¢7Ú.1ãd œ›J·î†Ê«^öözà6èX?0dÊ%³Dç`Q3¬Ée‹^ï°ó1«îÍÌÁˆ²¥xüÜnÛßœ´­zׯÇx{úÎ¬Ê fL¾£tþ*G|€ëÁÓb¸”²ü›ÄD~Ù’ô7ŽPŸ9Õ¾&´:ã_›çýϹ97ìgI¨-×›ùx[ðÿ`~…ð'$zƒ¶»lÑë¯9í{ÔòÉ v¼¼¹­%\‹ÈIþ„½’ó ¸­` ^WúBÙö™ã&ý²½m™ÎžH3B+¿ ®Ø<çE—ëÀ¦åÂÍñõîÝîô>¼«ª%hüq×¹60uWúÑ+§ô³, lp’<Ÿä?`ñ"Ç+‰’õž«ƒçÆ™•3ÉᕤúR… 1¿p´ ûÄ?¦Aƒt´æÜÒȸÉL'u(ì½rêà„~DùÞ;HÉ/ à'Öo˜›05KÊÇîö… ËŸ›<€™vB?9ÐÌé%92ÀHŠÀ­ú†à¤ qý@…Ký@gø@·lKúJÊ ü`Ù8f8tø€§y~,ü A¨‡ŒL÷8cgXÿ#Ámûãúý‡’íéQ4ýª4ûò‘ÂÝ3Ù€½`} œ€êi®_À€³T>°dõ›–ÿšãé_4í××wuç`çÁRO´ÂÂ$ž_ Èoºž°Y–~€DZåe‹^ý2Vý H‡~Àæ¼£ü‚²$ÿeéð'<ÌÇ//\ñãÞ˜­¬=`ÇŠ^D¢ ‘)e1#Â4VMdyƒìïöæ¦ÙÿíZýÀлÆ]N=ü*%ÛÓGèZxÚÛrƒ™zC¬¢á§Šî_ýM‡¹ðKO—t’’í±ý ãqƒ™ Ä@©"Iœ±ä¶xÝÚrrà»ÝßQUýGSéw|†L¾x®·wæiIÛ0½I«1CæZêõ~8âÒS6ØÏcVMVë¿ÿy˜š«ÞL½´× ßÞ7¾§‘Ÿ–~à‘Py¥3>0fÕ<©~ý7ËÔOÜôÌâtá–ů¶ùÔmþ~xW•í?ÀaÕ/h•ý@lWéü—þç¨gØoãœ4¥[«St¡ÚuÞœàJës¤œHÞ¿;ívìÜ7`9"ÓÞòoR~AR}Ãåwù•,å?ЭrË8Ó’j¡Iµ·m B]Kéo7ŸÂ;åOxʳ²ýÑù®’‰‹;´ˆ|€Ãö 2FÙ3#%+ËU~ žû^Â¥ÏíEŰëPä k8ó¸±#ݹðsíë_Ĉª:@pÛ¾fþͰÒÿኌyqj!ëi½RÖ9Mpaÿ\ûdñÛF¸épÓÔ!tDVÝYGÝgŒRn°°ÕHçù@ñ5 —¦!ê’F Õ†ªWþ„åIú¦ñõö:ƒ ]à¶A·!û½6Ö%„Òõ”PºZ¬s"ñCÀL›¬Z|ÀÒhû5×w(ø€­=JÊ/šÏÛÞ¥À!©oØ\?°Ú®_5××è]W¤!¿ ™ÖôXd³"%GîbÂd>€7Ø?ì÷’ô¯%ëÒÄ:ô(õ äçÓÀF*­:ÌÇ/.\û„Ë ʇS•ö%•E²¤fFŒ*€~¯dç¾Õå| hú•W‚㔀§· ÛVp“3­.\aÍ•Û}çÍŽÚnŸLºì,9‹Þ®<¹Íû5…s€$BñÕ±ãé5ßYù.ù€U¿À˜ãí™q*’ôzC¬Æ ™_Ñ ï§=ÎùSr~ÁoÖ 7®ð™u × _´²{^ú†À-±ô&9ZUÿ„PØG£7黸F–>ðR»jËÑ+§\ Ä.ã&“*ßÿ©²öëÒãÄýV~Ae >òyö7ŽPOøqNp“kZ­¾¬ôþWçÕ¬ÙÔniùk‹—Ðjo¸—P uü䪾ýœàøQj·@¦~ ”²ºšš_0˜Ý§æz €i,bÉíe _uà?”—ï=`Ù¸òeñø{´à¶ý?PÕûû¤úWû {kuEÓ®¥æª§7˜f„é_7Ïsž‡® ­ LõûÏM¥?7Ó7û {·¢ð°i¶!¦vÀXV:ÿEÇOÇ£WN bŠšòÉ€°ù@ÜÀÓ ³¿y‰ìWl>°³lá«4#ÉG¯_„¸ŽHz§µMBå6 -ù@`mF8!¾ûÝô=fÕÌ\C¬!K»×^¿¸Í3ת?ሥÊ´*´Z}¤jó¼ç]•‘çZèüDö•Úîn3ý€Å‚[÷µ`aÖn†Dó8㣅 ˆ~¦õŠ6%û“ŽöiáO(ø€5þÜWúheå)³òȹü¥3u~Š~`%¹V½d{Þ nå"Uœ˜Dõ¿ãdf| /%ÉašÉÜñéãH땼®xüœ:#À:í>Ù²àÜmý1Ÿ´ø€ä]íf_$ü %Ê çîò þ¾‹PßtB}Ó‹¯YÐ>@Ò ¤ EäêÏ×»¬_pP|€ÃâlP3p3¾Èmƒn#É„Òõß²•ˆÄN<¨ÖD >Ѐ¨¹E3®N·?¡€ 4E?°RlC`ÆÒÍ„ÿý_|[—¼±Ú >ç8tê¸4å°óa]ýÅ-ù@$ΠdËiÈ/`³Dþi˜h¥¾áÂW¾²ø?þ„UqÛ f| ôÓìc…¹)¥‹¼ÜVñüÁ·x8G†Ëú†7eÆj/å†~4‘IŸ¤©ºnõ nà{ÿÐ~ïvi~M9‘ŒñJ¶§7š}u›79ÓjÃ{ù¿í¾ýÆA `ð¤ËÏ–³èm­ð»~iýŸS"Q[Øߦú‹­¥Á-•÷uŽô7f{{gžž´ Ó¢5F“±VòùÞ÷õ l´ý G,½IÖê´ãµÚçøúdŸB$dsÆHå?!¸­RøT¾áhV}ÃÏŸT²Õx}C­.ºƒ›Òâ²…/·û´4jùß2ˆý'7ŒXuƒ·|ÙGݘf$ùT¶¯°Ì?{RÍñØþ„±hEdé¶GV¿ÞÑg „—ÜG$ʽ={>à ìÈ} ÿôß¿üé½I‡ ù‹ÓÎǬš§‚ègYw$¨vË_è~Ÿ”_pµ¿°×­`ð¤+F©yêY°üt3&ßYºÀ¹ÄŸëõç#þ´«~úÅ…‹q>09Õ wKÿ9‹Úú®0þ³yÎóŽgIcVÍ“ýk~AbÜTRæ I|€ðµàƒï¸ìâD}Ã莲…¯¸â\k8[,á勵×/hj¾àbîÉG¦ð)ƒN„~@õ9®_ˆt¢_h½":Q2Û¼fZõõì>µ›·7ÄêÂUnN=ô_x2ÀzXJY¥¤½9¢àß "û–Òú åÚù,Ê]éD¾E½8L@éÐZRð¡(FyÀ€ìÏ|ÛÍŽ¸fð€õ²”Ö7‡Sm ¡™ÿE®õBbYÇå¸~p¦ÛÌÉçˆ' >`çI‰D2->`nü,>`G¿©xÂý.&ªÄþ¹öÊD–Ü$&$ŽÞšCXó|Sva+ á? Q3¢Ö)t[ßðï»õO#Ô?}íõ‹\‘5á?@4È©†È/¨úlÝQWktwÚ­hĄ́¿*¹;”þ„úåë;Ì9$v(ò ìú†Mq> 5D÷žÜÌEÓ¯ž®Î³éß `£!fÈ@B?°Öý™€j“Ò53½qý@2xø·ô¦˜íO8 hÚ•iÊ/à‚ÐVø@·X!r@J“~€ ýoɶ,~¥X«çt±ÿ@ô/œ±îÖ©—j›|Uúiö1ƒ‚–~à±Ã|àpüÿ#\ñ£fýÖk†›.áÌ8–Pô¦ÅÃ9ç\7cL3k˜Æ¾Qºùß-ÿ?ÇâF‡õ ®¼”z1AÎPz‰´{à&7µÚÐ>¦‘UáÝÒ땚ꈜ£dË·Ë~ðH´%ü8À9UdIdÙ§4­h¬ØÿÖúIíñVÆÒ˜s½=3N³ž÷­EQ­6\Ét|C$õƒn#ßT<þ ˆó_iuõçªÝ|'È~53F©WêÁ´Ø3öø§cý€5Eÿü 5ÇS(™huÑí êƒ¥ó_ìPo>zÅ_¯ã,z‰ÞΪúðýz[jì˜|þ¤­°ü £ÿÞúð,­e\®7œK$ÊÔì@ypKõSõ ðï^ü螤Î#F˜NrÚ9p=|Y¼´$ñ¼ÓðÓ®u‚ØúkÚäC&_1ÒÓ#ólgF#H&•ÎÁ±AÖ˜U3s]¤sÒ¢XYÜI|Àö¸¥U> èÝD²jÜa,+]àB¼€ë¡«…5•7’'9‚Ì~å­ñË/RÞ¸~ tþÿçÀè•Ó DŽ©bàÀ>-±->@[çr@K4„KjÆ?œtÚìð¯V(¯´µ,ø@ Éõ Ž[ø'¯•_À¡7D+7ÎzÎqjŒyáî> Â¥K{ö¬ÚÚ¦KŸÅlG¡ˆVV]dÕ7$0C†+>œÅ®µõœI+;¼õR*D[? pV8>Àõ ͈¿*Y4r(ò ÆØ%+¥(U$ÁÀ‰‚C `§ ¢žÈ/°øHúùÀ€€þ_q>`¬£V>p‹õ‹ÉA¨”ÂVA­V–Å€¢iW¥Ëà|ëâ§ÅÁmû¶ÆF£¹PhIˆèêúýºì¾vëlyèÕ¯´ºè§@(‘»˜ÜÊþ҃邖~ «ù~E¨¼*¸mÿa>p8~Yášè ‰ÿ à=ãõ 43Ê€‘oh†úv—óÁw\~¡#û•ÞVR ¬c’š±RŸÉM½)¶ßhÔ_ØöÈ›.û¶;€Â[/=EÉUÿjOZâÏ| ¦sÂ-ÿÛ¥ŸÇÛ5‚ZmÃû¦î}å«-®pmñúݪOæxò3Nµ¦k„h ‘jakAä÷’ùM»æ(3¾\ÎV¥fû 8³JXW}ô“Þ´¥rI¨¼Â9X¿zÍ2%["þĵúØIõýsã¬çÚ´†·cäÓÍ&’ö õÐk›»ŸÿfT@^ •Wþ³ùö­ð/žPsl‰¿ÓŒ§Ë¾¼²£Ží r @¼jN ^«Ž®6£úX¶ÿ€Ùœ¤üèÝ|³bË6ÏYáj{Ôò©#óhËãLÚR<áþ¸ˆð˜‡x}CóŽ” ™|Å¥R†’hu‘òÍó^t5Ѹ¶x %’qøš2õÙæÛ$å ¥~ _kí .yý‹]ô رsÿùñEl.—L| U£4¦›O î?Ìüj/€p­>RµqÖ³®øÀ¨åËàL»Â:0#jF›ß˜fù£PÝ_y ˆ¥ cQwù@$6!nO”·:¹'ø€­ üûM%Ë%X5³G‚Œ‘DÉî0·¬šÌ˜š'»ãZè·73n*/&ßšÛŠfùý(Q¥ÂbîøÀ˜ïb6ݵ÷•­k\ŒÝþ¹öÉ`Œà îž ¸©3ñËÈÁ=ÏvĆš…Ð0‰rƒEÄG Xz“ã¹€Å2¦š1­äºnè`ñ ‰ @µ:ãhý@ŸЌšvñbƒ‡¸¾!YO •ßžtœªäÔ7Œ×/hHè„-ÿn¾‚£gß0<] > *8$ñ#h>‹Z¦‡Ò˜_ý3þ‰ú†Ûyãm[? d{ûš>ÐÛö@J‚Ûö¥êôÚ‚Ð4æÈh‹l{ä­6ò™uzÕ5uÙ,>Àº`„Êv (|àÑŸ»jj·@€ÿÊò8ÌÇ/,\Ö7ü­Ïh

Ué ïIÉCdJẌpÆ*¯“2ü¯w¹ÿÀÉã.•2¥ j7_Ÿ–Ëô©Ï!Ü`LoˆVè úòíÿ^ýÖA  ðÖËNõä{ï’2ÔnÉ¥ bóËåW•©=Oâ\«Ô°0_°å¡W¿q5«~æ©y¾Sìé¡”kÂÕfÄ,!’òaÙÂUñ2bcVÍó5m*;Jolº@òIÕl_{ÀÑŠ¶÷Õo»âë^ÿb™šëbÏ–ô&m•|mœõìz'Ùȧ'ÝjD‚š¡h áÇݨYSжø@ÊúŒGEäi5×7Ðú<¹®7O•.øŸ£%9ÀZIå,r?ÙŒhæ–_Ï6#š(QI^lW?9ß«æf iÀQ¦Ëwºé8Ó~1W¼™Ë¹InÈnë`ùa¯Ë[@ÑŒ §yò3Î8熩aܶq泎P`ôÊ駦UëRùž—¶~hñ~g‡|€Êæ"Q Ðêô•ÎÁ•ÊzÔòé f)àÊcö\!¼«ª2‰´¬o8øŽ+.’ý–h¬&T^¶è%Dz ;5'<Óú”OJ®[‚û“ò ÀG5Ï/°S<¹’ã*¿@œúÁ ñIj½š›×ªçU¿ ή:ü‘›=J–¨oØ­øiÆ3®Ð̵ÅK(¸v“ud àžv~Ió華ó ׄwV]LdjùFLWõ  ¼|ÿ% ÌJ‚çÒú’ë´[fPð@è˜3ËþÌïÝ©§þž@¿L¼Ô8“ÿÛñ^q>À-ý€lÕ/ 5³Ž)r™Äû½ð¡ ¾¹öú*;Ú#‰K? R¡0 '€ÁŽ1/Þ3°Í/h…VWÝaf]R$ò `Íx37CÌ!¬y¾)=ínÄ8Dý§ƒºãówê›F¨oÚÚ뺳–´+C‚ÔÛþ„Eœ1Io`ÇpT­8(> ;¿ÀÆl>À`è<· º Ùï;Iü—J7Pɰõ 0E~ƒÛö•Ñ-½Ñ„-ÿl_þ!ä_¶~ Ìž³FLj©>€fþ„¯½¥7Ŭú†9¾EÓÆßÐÕ[|€ÛÆ)Å-ø€â lB9ÐÕþ„ý…~ ž_Њ~`ñKÅZ]4ÉŸPëJÂ[“ò ÚÓlþÄâtåúÛÿÙ…ú@’?áa>p8~aáÒŸðެpùîsAùBIo"™ÈašcšQE$yƒì¼Ñõ|`Ê•K>z­ÚÍ×WÜLì}yRÎ4ƒëõ‘=f”¿°í‘×Î`П/=Eíî½K ÄëÄê_ ›-ïÚXhõ‘˜Ê¢Ò^hóI¹>@æ«yÞS‰$ ퟥ0CÆZêõ¾?âÒÑëõ æ©?m9Zoh¸HÎR¥¼b˜à&ã•ïm|¬ê“ + àÚâ%ôûW>[æÉ÷µÿ¦7ÅvPÉû S>püƒ7¦^s¦Š¸Éèîç¾àFX_*¯h_?ëÞ\ó¤'ß_ppƒiZöXÙ"ç^öàí™u`Ô3Ÿ7Rõñ~#Ë0>s`O3T^ÑNý‚ÉWÌTs¼ƒ+¿ÀŒÊw¸íÜZE·„îTUwŪÿù`×ú {_ÑêŠfL<ÍÓ#ó\Àò'ÔÌ[7Í~ÖÕÓ®eaþA¼äDÎXVñî7•ÜÄ$Bi5ΙÑ0¦‰p0­N{´l¡‹ú†"å7Åm ¾[|ÍÜ2Àš”6ã©úÁwŒ»ØæZCtgÙ¢Un™1æ…ÃAŒ“¬Îi¥·GnŠ¡™ÿÀ(aï¡ñ$óIÍXä¶óÓÞù»—³Ø¬Î Wk­Ò_3>`é†?r³Gíæ³êÔG*Ýê@;PwÀ„YŠòa[+©­óòÊKmý׸k>0zåÝǺX ¤•D ´+ùIøŠüÎ퀔ás¥ùôdû¬’ÊãfØöLÌ®o(å‹®ùõ¨7¼»8õ”L\Ð!Þi¦8’UÊ3L7|`ôÊý]dÖÐj¢\àcí£oÁŒãþ¸?aŽú»Cζ>üÊÚXuøS | ê|m뺚ø…~@þ_pÛ¾Ã|àpü²Â¥?áŸ3Ã?Wœ°’Wîg¯5±˜1#Ú~iƒœ•óNéüÿvu~Á¸‹¨ÔÜÌ#…)bsá@0Ídz}dÓ°jëïv¸þظì5×s—’íÍkeWÆMӪȲ6¤¨„~àþ-½ìN?Cïºò~OAæ)5í ¥\kˆÔÚ—²?ó󂳎_oO>N{çïÞºo6«>pŽÒÍ;Z xò"ÄySYõë;žxw±£X|àóežüÌ¡ñBKac§Å?J<ïh1»hÚµƒ•ù~"¡ÒXºÕŸlrʾ|Ê“ï€p“ÅbÕ‘Ç·,~ÙUù—œá…QÎ"!Ó*£•uÝë×ïT,ÿž,T^±4yÛf|`ܽjŽÏ*ž`°0Óä;Ýv~ÆG nFo¸‡zCöç,Õ„vYg›]Ó.ðöœ+¸Ž®7šwlœùŒ+ýD+ënåè9 mXwëÒ—E~A5™ù—Vù‘Œ;.z½þ¯ÒÏ»«`ôÊ»Oô³`— ów{hÎx+ùS®¼\ xóíü‚Ò^tÍF¯¼7Ðþ”8(õÑ//›Þh¿/øÀ»ˆë’øõÒ«m«Éçwï?ˆý à–‘>”K&Þß"ÙâÄöØ| [蚢•g=㚌^1ýbÀ<Æ::ºG«“–·¶à©ùáòªKA „³ˆ»ú†0æ…{úèã­W$F”ŒGÖÝ:¿Íuäþœ›#l£4)#Ó8㣅 gÚ­°Ê‹Åãgw %q%w+|`ˆ+>­¬»0û àÒ÷%tXà ¸mo’ÿ=ÒÎ/‹îô/Ì<0lß‘F9Ðm™‹±‹Ÿkî•a2k^è’pfÄõò²ä¯œƒHâŒÇ`}%ËðÔY>0ÐÌik¯_Ða\³úÔËÜD%„ÿ@Ó¦­ÇÁ•~`N'ô¹ÂŸpÔ ëñѡйnt²ß{’ ‚Púõõíñî¡Õ0qá ýÀO3žiÂ{À“ëïyôìßýê Úo7þ@ªÿ@Ø\ «ª1µð¤t ÀŒFÿ@oæ?ðj’~À;pèÔ«Ó© ØÛ\?`.HÔ/Pº8¿ 7€Ï| Ú¶~ 6ú)âù]ÎòÄ©_Þ]ÙV~Á&¡V®¿ýá®ö8PéÅÃ|àpüâÂÕ3À± nñÇjª/â¦q4Uhoꑽ¢ÝÆ*¸Á×ú‡ö}¿ëëL›0»RÍñ‘¨àÕzpƒ™Z]hÓÉÿNœpúëU‰jwþxñ)Þ‚Ì©ˆ3{WÓ¾sZõ %Q¿€Ç›Õ›¢µf“9oËC/¹ç…·]6'ãÈœ3&€ëMÑ£!öµäÏüÐ׫ÿöã÷ˆ¥3d­nÏñZmÃùr¶g¤šíË·8¸Éy¬:ôޖůÌs4Q,q™'ß_$|ƒ¸ÞÛÉMiaéüŽ&-ÃîùÍPPã^%àég÷±ó™O^nܸû¡æÛ¶ø<ý…yOyºg±ô\î >\¶pÕý5_üèÀ“ÜŠšÏ¨ô§KzH¹‹iÞðÎJÚ¸yÏQj·@†~ ¸¶Í ™Ó˜nd8Æ“—]§Õ5µæ?pÝ©ÞÞYçÚeC0¿£tþsnWÃÄz¢&ò‰AdïƒzSôö¤ü‚[ÛâSìÏKoè³jžÐ'ÜcýEù_ÉÄùe‚ÌEÜ€5çW]n‘-@oˆ•—.xÁ5®ÿl9ù€üMÉÄûãsÍPùþ異@;å/ìÓœˆ/UèLç£WÞ})`X‰ôœîW»uûwóm„~@Gr}ÖMÊPüž¾ Õ‡+6ÏYî²À0zå=ÇÚÕÖ+!’wQk9‚ˆ›’àÁ­{ãù,Ê\ó‘OOÏ´›HÖYTÿ[À Ö > Ûë€AΔ¥.ê#Ú?×>*ø!²Ô >@`yzÿ½öúy5.vOò0™à\r¯ðýPßßJ&Îu<¥‘Ðp†ýˆë6¸Ôtš$é|€MM‡‚œ,þK•6POAþûŸ Qɘt Õ`oÝ4û©`¬:ø3âÉõ÷6óútóVò "æ X|€r=zGg;è(šå$ë^³ý¸š›1¨hÚ„4øôð ì£oÁŒ}žý”+ä4é8E[|`ëÃ/£ÕF>µNOÚôpš,ý@Wò@€Ÿ@¨ôÂa>p8~qáڟІ/رD"}¨*©Ü`àŒE¹ÉkYŒ«yÙïvy~Áл®¾‚¨¯¼}-ý!¢Bp³¦¬Ù°VÚ£7F——?öV‡Ï˜í×/¸ã×gÈy²’íën/l‰3ˆDÓ F(‘µ\XS¥7ÅêŒFcÞÖ%/­u=€Á“®˜ãë“sì|b‹T›!½„z½ïç ö“ý 9fÕ<©ióöô†Æ±R¦ò+5Û×3fA‹|*gs[³j1€KgÈ‘=[–©yCìMô¦X97é"§|àØÿw´ÞP?MÍË쀜7ü¸çË]Ï~ô·æÛ¶à9ÇõzBÍËÂM®Å*B”ýýóÝ𪾯ôç+?§ 9™iz&8¤úuÛ!ð)WÞç)È 0Í›QrgÙߟﰚ{ó³jž ¹‡*´›äõ†¬/gõßo÷8¶m>0}âÉÞžsnrÝãÎÍsžul \ÝXéàDVJ|³ý÷B?€¶õ ›j¿Öê¢ÿ,ÿœËT^+F¯œ10O´¾ª´†ÅÈâúuÛ*0d´àEÓ®½ÂÒ€ë Ñe _|µ3yaæ)€~©5×äa¢x~sã‚FÀæñü‚Ñ)|ĸb/"yæw¦óQËïÄYôÿÄ’œ îy´ùB6ÓÍÇaå4ãY¾¾ˆÞ­Ú4û¿nÜ[@¨1€ÇúöÈ+J®›÷]óíšñ1(mÚ¼ç"‹pn† ×þ„Ö³£6YÖPúríõm¯¢*¥òÎâ-¢æd»æÑÊw¬ŸX~ÞPAYÌŒÓ ­¾él· º¤üN(Ý@Õ¼Ü÷!4R¦|òAµî 83“ôq>дÔ쌂£gßt(øOá,ÆWX£c„™‘;Ó53ú4¯_ðÊê¸?aÀÓ¿hÚ„ßvuçþÂ>Ç >к~@?›ÏMf r@I‡ÿÀl¡¼rƒÇ{Iþ„¯”>ÀÓÄò­¶åtÄ-ýÀ’®æ¿:¬8¿Èp©¸Í«Ú1çl8‘ЋzUL“q“G9ãõLc%jnÖ[ið'¼êRš!]›à@‚¤¦p“1½)¶_¯‹üwû¿ß88ÂÁ“®:[öË“ùñÍ ‘¨‘Z¿À6NL LoˆTsƒÞ_úÀÊNð;ÆÍõõÍ9ËÖþ„ë ‘*3b¬¥^ßûù§³)ym°hÚÄ£Y,v…POõ (À97‹îozkëï>àhcVÍ“ê×ÿô¤•…Op®ÕGÊå¥óŸs4Y=fþŽ1š§ªyƒì¿Eö6ü°uÉ«·4ß¶ÈìŸû¤Çâà&ÓÞ+ªˆ€IDATµšè¿Êxq^Í?thùeGÕÇßWÕ¬Ùøj¯‹O‡Ģ±ÑŠúöùÀлÆÏñF‹êa3Fn-]°òS§§œÉî;EÊÆJ^5l„"ÞÊ÷×IF0r¬'/§-ýÀoN÷øÏn0]obÙ<çY×óD½òž¸¾à„H’ÎMen¬ªÁ®ox›¿°OkúóN ¦ÕE)[¸ÒµÿŒZ~ï€ñgX8¨Ïÿ8mÙÇœa6ù“R0tê„_ >½IÛU¶È}~ŒY5/—Pío˰.`ùí’‰óÞâ|ÀÖ¤ò"ñ+¿£(âcVÍóq=8¹áà´dϪM)2Álý€åOxÂ3j·Œ#aqÀªÍsþëZ?0fÕ<•ë¡?§?ÔãŸÍ¹ àk­…àËÆZU73¤Ý™£çz䀉ï<ÝCÔÌ%mÍ’|€çdôë1LæœÅçJVà=·^9ãFÀ°Ÿõ«eÖÜ//›Þ^²[Ü Nðjó8j+üÑ+f\¶ÕW# ÌëHe/ò ’ü$ÁÌNðbˆÔhàê’’‰sÒÔ¸?!…˜Ém~Aüw„«–\7ÇÍÙ³ù€La•ý\çÌÙE¨g*¡žÎð¡ õ2‹û ôá?ðÓfº†è,®ˆVÖå¶A·ÑŸPÉÉýâ39„|€Xþ{ËèæyO5Ū›~Q³3z ›ùÛ4òÙ? Ö=c ×°çÎ9càf,þ„·Âò¡4áO¸í‘WÞÖ›¢5-õ :uBò â|€·®h4æYY´„(Ùiñ˜c=9“ÖùÀÖ%«¾Ñj#[åÓªhlüTðiâ‡õ‡ã—®ë°häRªÐ¸iæUR€kf˜3~ ßyº÷xýÇéÄœ¶éÌ`ÒUÊYê JÀÛ­ä«'ÓtÓhŠíÓ¢Ï<¸ãÊÓ%¿2EÍÉÈo±£DM¦@³ú†ñàZ]°P–.XáΟ o»b¶¯OÎ9ÂJš Â*1¾‘ßÉ6dÓ77Þ€QËçd„vìf45]B}òñJÀÛÃn››ŒG÷7¾½õáWæ;€Ußpí3J¶UbÐâÑí’ê{x㬧=-3÷Çšzxºðö‡H¹Ðê#¥M›¢¿o>Yiñ ¨w À 1BìÖÒûŸs\ß09F,!g™s‘äU2ÍhÌ«Õ4ÒÚ¯6 Vs³ÚÒüæ$O¾ÿ,`š¡éAó/›ç=ëzžhw®vãÓóh"K¦šÛíÇ}o–Ôq“‘6ù¨ñ7Øb•zíáÒùËÝ– `]Cj.n1±j’:ªæšý>k±>0dÊÕ—«9 7Dw”-z¡Sú>ãÆ‘òíU7Æh+­—6r&Í+™8³Jð·­ƒä£ý…}“øåö‹QÅ;¯3@ßñGÿ„fuNB„z箽~~üâMø±tR¦š›Ùô¦hÕÆYOuêÔ^yïŸãë rSž]f`NR~Á—@Š~€pK?K£~ ú$ø@²~ॷô¦H-@,ýÀŒßü®«;÷ö9àº޾jM? ò ‘3¤tøÌOÎanð¸#p’~àå­6ü±uzºÚ v{Ÿ°}> ô´«ù@âþ{ð>‡ã„ëü­.8–ªtÀ %^êQ(‹a¦U t½’ùfê\s±”)_/ø@ûþ&czCd7°ªlÑ «jƒï¸êt9Û3U xóÐÌ{ÐÎ/€ÅäD}ÃD»zC¸Š›òßK,ï¸õŠY¾¾ÝÎÅ8¡±º`‹šk©×û~éügãÂG«¾aùQÚ† å,ï‰b6î˜Ý×øÞ–‡VÍq4«Ä ç)57s¨xŸkõáí’š¹xã¬'Ö;ùȆÝsCçú½jNÆ»ŸXUÓÆn£ŽûSñø{Ìv0ô®«ŸôŽÀ¹Éu#¨?±yÞòåN:nC&¿ÚÓÃÿ"QB;ª¿Ýþè·'o“Âu†N0ÏS€3͈°ùsg;€n#Z—qDÏr"Q"{«Fú û\Ñꊦ_²'?ó,„i†nÙ­g=éÚÀŽQËï=ÐîÏÓ½[eãÆÝá†w¶£PXœAó‘ÒË;%^€1/ÎF$s NdÏGÕŸþ8 ‰ü‚I)2åšËí+Woˆì(]ðÜKÑù1܈L¸0I‘?,™8÷±ÐΊo •„èIáT!WÃZFcDòÌítç/ÌÎÍÈTx¬³)¿U2qî“öûÍò ,>0jùL¿’ãë€k áªM³Ÿî$˜y7#S Šjòk%ç¦\À‚ ? ¥¾Ýt¾¸ÙÀlŠ­édç£}ˆ¥˜—_*™8·UwOBéGÖã|€Û|€x º؉ÎOô?Áú`€òTÉusÚk'U? y•ž¢3³°¯«+Ôò{OwÎõ¹’‰ívžì?@¥GRΘU ‘sWõ Ƽ0çH"7[rppå©’‰³fhý÷Ê„RKëá²zà€EFž(¹nŽ›Œ,¡HåÔ=ðM%Ô7µd¢«Îdÿ3¢í2‹,>p`8’ RGÑy>¯oXA9KD+kÎtÛ ÛH­_ m ¾>=>´ý ¥LåÔt øqÚ¿,>`å5ëÆéê\ðA’ô,Æž8c„›Ú”t )¿€·Æª%Û;¨hÚÄtå\$ŽþËVü´¹B?À倒ýŸ+aÃÜ`-ùÀÖ‡W}«} ëê”»˜Ü&ò @¨´(¼»2®¸jV¿`ã'ÙÇ jâ¦ôÜúÛêbý„ÿÀÞÃúÃñË ×ùáŸ÷Œ•|ÊHBÑ—HT!²D¸ÁbfD«"²¼!sP¿Õëþ¼°©K0øŽñçK>é·jž¿:æ¦^ÞËMòrÙ¢ç;,K×?áe§x{fM|ÀÞÞ287L$¾Ú"ꦆޮ6#æì-‹_ls ¢Íú†¾¾¸Ï×§Û¹v)j«~A¨Ú éÅÔë{¿iSã÷öRü-TjÖl9N«««äxG+YùvAn2«lz×1¸¶x ]÷ZÉSj^¦]ßkõár"yÜ<çiGÙ˜ÇÌýC‘©Gg)o?ûÌĪøÕ•'ßÜ\oœ2«²£ò´§ k¨uš™®ˆ>V¶på '7!S®™èéžq3‘%´ºÐÆÒÏÿ!y›”Ï-0Ô7ßSUL3"zƒñÇÎv[¿¸RÍïþ*‘¨€P•í/ì3.y›ø]4íºQJŽ÷fB ¸Á4®K·ož÷t§ô€õQfž=êOT!§J^OÄE3ª?ûjµ#WmRÈè¹\ øò­>¼½tþò;Õ3€1«æù£ ³»fi ’oÖöG_{¾>€ñ°žÓ˜œ¸¿³|æž\®Ggð¢óZpunñ5÷îRøiÆ2ú€Ö®üiÆcúÜG-¿¯Uø€ þC÷ž™%×ÍŠ?Ø4ã–~àÀ·›m £1êfý7qÚ_œ[H$}ˆ]énS™÷–LœYÛ|[Á [F¿žÃd>Ò~Ó“Ÿ÷ÛÎG¯˜5𛑸r8-&ª÷‘5—N7[ß#¥~Á0JU©—xÍüCŽpuúG-¿÷4ý¶DçÒuÿgsšÁm{l>À %GÊà–~€kýgÑ[`ß̸üfÉusV8”Ù‡øxe"Iö½¹ùÄúÔ•%×Ýç¢ü1Ï/ÐB‰K>0s¡ž»õÞU2ÑMçÀ³Ä×ËfDûÈÊ“Ìpýpü¿áÖÙVÖœá¶A·‘š_ m ¾>‚s‘_ðÿŽì ôž®Î„$™hl¥1µÈ_Ó5ÁTŒPúb|[—¬z35¿ ­|€´áO¨Í±ý”lÏM]Ë ý“Ð6øßÚXuÓÇ!„Ò.ÖDnKÒ,j[?ðu\?.>ðüaýÀáøÅ…«g€N ËvœKdzõÊG»V¶aF͈VÁù.0là]ʬù¢ï2ê“&ª9}¸É’ë¶ÜŸs¦í5ÃÆóáÝÆ«­9ò9À€?\:ÆÛ;û%àën7߇ÃäŒuĪ̛³eñóm>c´:€k‹—ÐoŸ_3ÇÛ+ûìD~åÚ`•Œ­‘ý™Ÿy{ö]g×/³jž/XºëW±Úú³•lßH%Ë—Ÿð'dL¯|ÔT™éÈŸ°Ï¸qÄ?Øó”'?0Ì>j­>¼ •Îÿ¯#ÿa3oÊMm¦š“ðˆU7müÕ¯ÇüŸ> >é)Èk=fe¥ –wjŠ^4í7×ÉåfªÊ¨onÚ¾)ùL¤|n™Õû’:aöçÎv¥<·‚*¾iD’tPs2Šˆ|àæämâ2ùš‘ž|ÿy¢siøséüÿvZ?XóE_ßÜ«=Ý»U‰zS˜4nÜqµ¿°oKý€œ¥Î|€ë ±¥›f?Ýiý`-ãɘðžD¦&õú6î{åKÓŒÆ|œ™©|`È” —È~owD« m/[¸²C¾×^Œ^yß¹ÜÔ¦ÅË‹sé{Ù—s»ÕÅÊj‚È@½’(1M¸äÍìt~ÁµÅKhùöJ(í äK®»ïÈè×óq"a,Uð9tÔò™~5;ãЛ"g=Þ)ýÀ˜UóÔòíuS@ Ñ9 @~¢dâ}ñj¯‚ØÓÇ“PZ·vÓ9bfS¬s|`Õ¼\®E炘B @‚ܤ J&Þ×b%PIðž“ѯç0™HÞ j÷nîùÀÊÙE\‹NáYV;tQ</™xOu»4Ï/PE~1óÆ rõµóÂì‘€>]tpi³ÈŸU<¾Íΰë’#enš°îˆ¦]»ÖYçsŽä,6ñ[ù“ƒº-{~ÌíNj„a­ ûd"Q§ER"ÉÀ”çK&Þ÷¦ €dÿ"ôDr3IðÏ]%ï{ÓåðmýÀÙŒê?(âŒIµ_m;‡$¿™°¦h•”›|½ý¦Vßx¦Û݆ìÏHö'\O}}ò“õ§¥{œ™â I}‚T7îÔìÌGÍú}ºõ§ˆ—É|€¯8áÌ$œëw¥k©úÂÿ­Ö›¢Õ"¿`@ÑŒnìêÎý…}“õk‚Ûö¤ò­&4Çö3¤.Ö ì0›D¸ÁZúlô•µ±êàG'„Ò.öˆÜžÐÈ ;àƒ¹Iž[ûC?»í¨­P»eõp"¡ÒÊÃ|àpüâÂ=زë\ps8UeQjºÕ+ÀñMæ€þl˜²Ø©q²Óü‚k/¡*™¨æ¶©H6)dZ]p¯^ùïö¿Úá:B»èÿûKGûúäܛĒƒYd•àr+›DoW›!cö–‡^èL}Ã+ç&é8¡”ÁhŒ}­ææ|îëÛëûµ×Ï Â2àí† Mc%¿:Ú“è‘Äx¬²ñÝÐN}Žc>9PyÜÛ3çûozSt;•¼‹6ÎZ¶ÞÉGvì‚[ŽÖƒMw'ó­.¸¹©4rSóA¤ àÚâ%ôû—‹Ÿ²—ð¹É4½!¶¬tÁòçœtÜ<ŠfÜp£âWnú«jü¡lÑ ÿ—¼MÊ¥²fy{f,ý7¤;6Ï}ÚõdÅŽš/6¬Ï;eÄ7„°±D¢’œéé‘uÔÀ^u%›âÅ×⿆ƒ']3ÚÓ#ë|ÀRNAóÏg.ÛÐÙÎíÈ*êŸëëS°—HÔ€HEõùÉ| þ“«d{îµZŒ±´t{ýä³jžÄuãF@;—ª Q»e×T¶®GýúmŠàwÆÏ@ámã/|Z}xûæyÏtZ?#Ÿ¹¯×´ûó<«nÙûXÍšoqÝ$?)E? û•ßÂzNïtý;F¯œ}"UÍÅ Ì®R ¨w¯½~ö;L7—Á2b£œ™€Žzv¦Oíæ?°øÀæ9OvZ72zåìK}²åÌNÐ-€zoÉÄ™»›`­.p*×ÿtnæ€îÂ@ëùô}êÁ_„õÎÁéu{ª¤Ò‡œ™§ÂÖPUŠ';«¹îýƼxÿnFþ À¾]‡ õ>V<ážâ6&«ß®Kcéä8P²s]Uî½böhn„gYs ŠH¾9Åî)nk¡°ù@?@†xaÚì×Ñ‘¿pÿ‘œE&ÛyäýQ tpÍ¥·;ù)¶ù€W&”Xê8Æì—ˆ$ÿò{V­¾#4Ÿ­ù:fÕ<Õé,>àB¨2¥d⬕.:þd3ªïÈ0ΘÚ¶ïxß8m¥xÂŒ}®NZ©oÈ ¾Î.„«©;Ómƒn#‰€Pºž*9Y€ÁÔC °ù,>`ù6ì5;£çQ³Ò­€à©úç¬Ñq0#šN>`ûòTýÀÃÿ[m倨9™…C§^÷»®î<• %0µÙ”lïéÑpmê–¼øM¬ºé ”tq~AôvÎXuê%G|`yô'JWæ‡ã®ý Í`äB€§ª|$õ(*7LÎqÓ¬e1óKS ¿µcÙÛŽ>ó"áZµ[f"Kí޸ɘVÛ´'VÓôøÎ§ßêð³c>Ð+ç^%»¥?! ¡T¶§ãÉmkµM€<¯ôgÝ×/2ùêû==²Ï¶Á¡ZC¨ÒlŠ}N3|÷8û¨í5¦k‹—ÐÞßü+ýÀ h†çO®¿··ü ëWo}xÕ êJ´Ã~ù]Î `éV·í9ÌÇ/+\=¿xJf¬ºúr¦ëÃ%}©OÉ „Pnò0‹é5fÔøÊ‡ßÜùäjlj“Ž0ô®ß\NdLP²3úÛ ²m…¥¦í5‚Ú3Û–®êPgØîþiÜÉjwÿÝjNfA‹%jšqN½ŠŒVò ´úP¥¥Êúó¶úhsCïšø€§ ë¬ämô¦H¥Ù[C32>¹Ñ®_0fÕ<©iÓîáz}ã%4Cù•š“Ù3i?Ù{à­­K^œëh×/¡ß¿²ö)O~ÖQöY5‚±FP›³eñ G‹šÇ.øËÑF¨é%;c Ý‡•_0ò÷NøÀsjNæ`ñyÆ´ÚпË­èÔísèÔë£æún±ý -ýÀÊÿ” ªçØãgy ²ÆX‡ÍÂLÇ›ç?Óiý@í—?üÚ ßƒ›çÆùÀ1…½k‹ú¬ÅЦÝ0ʓᅢPB˜fhúØ6Ïê ò  úÓï* 퇪Òà\’ÞAú~Wÿ]iìO¨’™62ÂÆÒ²EÏvª¾aó½rî9™ ®W»eÕ`,ªÑºâo²ß—`Ð-Wž¯|=p­¶iké+^èl‡vŒ|æ¾nT%·úp 5Ê4sÿÞ׿ìmãü…}‡·í)£ äø~!Õ‘Ù ¦cµ|öéTål¸U/& ½¾ç¥ÏoÑê…ÿ›òðG¦zX¤ñH$V×´¯tþòNëF,8Aþ°QÖ_8Àé>õ_%gl€Ì½‹~ºx:¦r°lÇùýò$œkÌe‰¸DŒ^9÷tÀ¼`~QéÕä7ˆJWŸŸ¦J?| ›È/ §BÜ”¬À»n;³êÙ\݉zhœìQ—–LœQÞÊ.¶tœX|À#÷°ÎLQ_G™TñÎ_˜"×›þ Çî>$*}¦xüŒVhE(í'SUñ Ü`F{Æ-;¿ÿHÎbEü«Ljù?%ïqrX3dŸÌM“à Ä%ˆ»ór€~Né©âñ÷Dî.ôL¢àˆ‘ˆäŽÌØE¨g ¡ž;K&Îú—‹ÎT>Ý¥æù‡¢ÕÇÁ•~ Ó|À/^VPpÿÞkuõ‡²¾!•ÖQ%'ð>7¹i½é9”| !¸íç-¶~@ð_£fý!Ýùâ¾C¾úåÖèL°X4þ„Ú­°ò ¡Ò ñl{äoÅýòüCOšpmWw.øÀ%Ö+²&¸íçTý€Ò@ð;O~à–4ðûù­ð-‹W|¡Õ?´üˆœ>P N}Û| fÍg3¸›ä¿ëo°«õ#óÃñ‹ —õ nñšá¦qD"# ‘>„ €pŽ׌jºÞÓ=gõS©ïÒMÿÝ8pã%'³Ÿ½,‚·ÒŽ©7Eö›MÚÊ-­<ØúN—³½Ó[É/ àÜàŒ7÷HNt€Þªä¦té‚§ÝÕ/°$þÞÞž9g'mÃõ¦H•Ò¾bšñúÈëNÞlOµÏøh¹RýùçÇê I™ž‘jNf/k?Ë2J« ~ÐT¼×Q~Á˜Uó¤úõ[þ«æ$û†¶Ê¥óŸtäWwÌÜ[†™zt¶¨oH@«möõ:â¦æÂÙ(švýr5Ï_pÓÔ´Úð#e‹–wj®8têõ¿Q»eü™ÈTô¦ÈæáŸ"bHù-(¼õª{¼½rOÕÃFØü}ÙÿýÌmÇvÔ~ùù£Ž-øùT‘É#çï]·»Íš ¶;[˜~ãÉž‚À„RbeVh¿/{à™ƒž¢×¬Y_sÜÐï%¯r‘¨$e¨²+*«ýú‡Ý@R~UÉ=à0‚úÒ²…ÿí>0fÕ<•k|„ Wju }.Ūjnx$:õ†+e¿Çò'¬ nÙ<ï©.±ô½rÞ¯¸f,1/‘|CÊô6·íÅïK ý…G$ûÐ âzd’/£Óõ Gýl®‡oŒ“—9©göTåßÌàȳé¨å üŠß'ô¡}g=Ö)ÿøQ¯˜w>×CKf«ö9 ÌMrdž)KÞˆ-|?•~Øx±§ ËÎ/ø²óÏï bÞ C%{À¥e%×Ý×£J?´jŸs‹pÆNwO¢ädwX›¶yŒX:CVs½Wú%ìÙ ½Fòj+3n;¿ÀÒ‰ØÅ;Žºq–‹£^yÿQ€~3`öJü•þD¨º¬x´V ³ >Ѐ$> L3 7+àÐgZ)@Á¥å%×ÝóiÇ{“ˆpèóÊÜ4­ó/IÁ¤/¸ÉžY{ý=N}ˆl> Sn˜akD:íÿxÀâÊ¢dN)™xï#k¯ŸåØ É|ÀÊ/ÀQ‘ê×ÿx, àI|4Îb5õ‡B?Ïê!TZO3û÷yÜâT¥‡ÂŸPðÒÜösÝ0åÁF½1¼ÔÜ@ï!S®?ê`:h/šù|$êØó5J$vwº`Fµ¸§i n ¾l#5¸'?{èàI×NìêθØzE>Oá{_}•3 ÷CÜ“=ù?§,àŒÉ‰pƒµä¥ ž|À®oØ¥|àŽ„~€.ï®h‹løHðg»–d%ø@§=®ÇáHK¸öïØ)À‡™ö¶§ê,¦G˜fTYþÎÓ=ÿ­§/ v銦ýö×D¥×*ßHšÌ´¦ÞÞÇbæ ÁmÁÿ”?aá­WŸ¦äfÞ-ø@ómM«2,@²Ë ¤lÖjLÝ_:ÿ)wúk‹—ÐïV­½_ð»a¦Õ6íg1c õz?ÉùÕ lëk‹—Ðu¯¯?Ö†/–³|£ÕœÌÞIm³XUã»Ám¡YŽøÀˆ¥3ähÕ¾g•€OdNƒkuÁ-àÒüÒœ™é5ëOE,ž¥æ í¿é áÍÃ/Þ~~pRX¡¼–~À0cZ]øŸe‹:çe?dòÄ jwÿ¶?¡ÞÝÔøãß&Ÿ‰”ß#¿ÇýjNƉ‹ê!£Éø¿²…ÁŠü)wôq_‚ ˆ,+’GΗ¼è_ûå­ò3ÔÜÌ?AÔ7Եߗýý™²ÎvnGÍšõÕaƒ¾‘3Õ‹… €ìã†nªýú‡Ÿ¤úT%Ó„.z}dQWñÈuô^%;Ë^²¥„ò¿ÙïÉàøµì÷åZ]pkÙ¢å¯vEÇÖ¼ÑwÀ.SsZ=o4CѬÐÎ}½ü…G nûÙÒP•Š%¨ê=h>£WÌ©æzÌ ¢¼=—32¶ì{ã ýÀweà̼äK§gšá›ìß<´~XØ‹ë±?ÆqâO@_),Ê^½ioÍ"gÀæá]{.±ø‡Ñý¼óÏóq_ÃõèbÂJ€ô‹+¾¹qFc ápfœÁÌ‘v浚›í´:_<úŒGúŽ?ñ\®›×€ðlñgÐMÜ$O­½þžÍvùN80"IGÉD¢"¿Ä@8@¿$Šgyñø»êîÎ`)idÊbº¥%¹|àNnÒ)%ïyØEç@3ÿ]Ž8­_¿é8ÒüRA[?@H¬¦öt· ºþ‚0Dò³ÅSøÀ\ÉÎì]4íÆ£¦ƒö"û˜ÂöA~$ò þ+N ÄïM×Ìhô6˜™ÂBå¡7ô¦p¢æd ðÀÓŸiu¡¬ÓC¤X]]ºüÚãë?Ê>fH=7ñßõ·/èJ> ôô¹ÃúÃñ‹ ×ù‘}•—PE:éMeÉÃ9çÜd®›5„Jßzû¬^ÛÂÆ.ÀµÅKèúÕ?^ Ê'(Œ¾oïþÀ0½)²ŸEŒÁmM«Š ž4ñl57sšäSóZyÛ`QÔ«¶š_ 7Eª¹ ÷|Àrñ÷?à)ÈJâ„ë ¡ýF0úUÕºüƒ½"fñ Ç™áÈE’ß3FÍ ô&YÀ´Úà{Me.ôßo}FÍõÇó ´úPLréO;»M»i0`ÌQóƒí>´úÐ&_¯>7¶«è3n ,Wó٦ǴºÐ?·,~®“|àºkÕîþÛ©ª('zCø§á—còÓwÊçæ/Ìœgu0M›1ü¡³À–‡VÁm»k2ön„å?ÐO¦ªì:ÃÉYl6—â¶ _sSZ±öú»;ò HÔ/€õÝtgN€3ÝæÈDò,/¾fꇻ›g\¡Ü`DòªòµÅKS ‘_p'@§”L¼gŽ‹ÎÛ2¨“¹ÉöÆ—~x¯lÇé]Ŧ¼ÿg<î7£×7\à¶A·Ñ‚øz¬¶õR¦'퀂3fóú8ÐB{@ÉÎìS4íÆ4ê s.øIÒDÿŠmK7ðÀZÄ~>>€Pyèu¡€ÚÍ?xð×^ÓÕ[|—ÙGß‚˜cD¾‘§ ëŽ.æ¹ÿ»(Äâ†Ù’”-üï§Z]ð}¢¾aWò˜Í@¨tG|à€•_pWóQ„JÏ·ý|˜Ž_V¸âÙšÙ]y g汄¢¯”áõ Üd!Ó«9ÃZO÷¼Õ]®2åúK©W¾AÍñ÷KZ²#¥Î!7™©×÷˜}ExwôåƒâC&_w¦ðN³&--Bð -ÿ#©fæ–Îr«Xß-ôdŸ™h˜0­¶a¿5¾ ªú^pkÃöÑX:CŽì­8Æ/³2NQsü)| VÕðvp[Ð…~ bÿ³J¶e®ÕKÍ>{ë’ç­'3ÿÖ"#ºOØÐ Î:ë¦æ Z-ôë^_ÿœšë/¦Q­.øðAð j÷À$ªÊ*èM‘?ÖÝЦ~@Ï-˜ïé°ë͈ñDz¿?óig:,ý@Þ©'”Âlj*’G)3h¿š5ë[ÑÌøÃéž<ÿŸ!êaã÷¥óŸ8h‹ÀšÏ¾«êvâ1ßQ…Ú|`PΈ£Êj¿\¿+>€>ãÆ_¯Œeö$%VÝtÙߟYs0§œ‰/×Wf]U²3Æ àìWjn¿M¥¥Öîœ5Nö{ó­ÎK·,îý€cV=Ø3o̱9’ÏÛ.û½j>= °ó Té:q=rªz»„Xÿ£7×µ«¹: ’’åo`1-+VÝ€Ú/× àcÁŽ8ô†ÐÞƒåVÇ‹Žàºv5×££.ù¾¬ìªùòÇú†¶Ë‹ì‰ó#;¨Ï}Ì‹ pC»†ë±’nD » •_þùÅâ¯~Üvgì8$ñQ¾‚J¶ûü½òÁÏMmOº%“rp饒ë¦Çü…GÆ¥ãD¢GÉD¢Â‡–³¬cþ¿öÎ;>ŠjýÿŸs¦ì&»›Ý$ôN„zQI¼ôz½×ŠŠ"н ¢€±k¤ÄH³QAüâµ{õ^EE(½lBﺛíÓÎï™ÙlBI6Ùøóž×‹Ivfž³g’Ù3ïù<Ÿ§m\d,çãi]˜ªŽä>ˆ½¨1²„ÿd݈‰§ô¸áz}8ƒ(qúLïÀÔÈk¨q1£nBù…ßÞ\Çî)Kâ¡1³¾ ®i7ôÌxÇÛ™FV¬9¹¾›†?!ãøjÿÊß^8“Ö—’¬ñôÁœåÓŸÀŸp(®ÑÇÖ0U= nË·»z¨·Mh#ø€Y_pœ2 Q> øƒ×Ä{Àxƒ·'ÿ 5ù@ój>ð§èbý Mý€?tˆò&Ö0£ŠƒÄèR”‘>ßT0ü þ†5ø€ÿ Ù,@Gr—ÌÜ‘w$:¹¡0ùÀªSë ÂÚüNL³%X?Ð%ÕàFÿ‚ÓòE?KþÐ$| 4&Æ ïl|àC?°¸ ø@¶ÁÎÕœ‹¿VÄY_ð¼#¸ÿà`€õA;ó–‹©,̵ŒiìäN­>Ûüx~0¡è6áÞ¨•»Ë¨/¨}ªáAÀTMUü¡Ãz}AUãê ºŽ¹cïLzÆà5A„¢* Äô8-PCR™Q_qç½×ý€cš¥…óJÄè$¥ÿ).¨ö7ÏYñªèÝv¸—âõ]Ç;¬Ù‚Ó^[?ð¯Èól½øÀ •K„’U¿| 8¬Y曕*|E`|ž{ê{õZ-eM¼¯+Ó”—-ÍÝ̲/´ÓÙ»Ó]µ¾§©/Øþ‘àHî €h’‘Ê|3Šg4䎼ÃÒ<å ÂQxƒÛªvTœ¥¾ Yë)¢Ë– €¨!ɯ†Õ{‹¦/n°Úº|íÖmiô.$”\MxNà¬BK>™œ™ˆi:`Š&©aõ^wÞ» ðØTâèž±ž·Y¯×ù€õ¼Ôó{ºËVo:Äüær"÷¬qJ˜T៺ëÕw}“jÆÞyÿ·=|¢òMý =#\’0Ù|Íð¸ç&.Yl0¢ëÞO(€ô‹ú~à@—li–™{× @Ô€©oF4.É–0>—¼–I8ܦ^hm™.EJ+À4†ð±“×ø‚?ÿ½WrEI;€@ª¨:êž²¸ÑÒÛ gÒ½»×,`„0Âó*SµÊòµÛR½Ûöt@yߎ¢k¬mÒ8£A£øÀ¥ß¾e•*=ÿÜ·/x5á˜Ñ5ÐpgaØÂ}s`ñ7Ij8ü€ô䎭{ð $†kŠ˜ê¬³7íé§yJ3BÙ©²ü ÀìDÈF _Þ6~'Ø»tˆÚÊÄøG6qýæç|<½3SÕ› KÈØElà~ðÕº“Jb÷Ñù@Û*€™þÕúøù€<zO½sC)÷’þ[S5qJý ÄëÓ=WõŽ|tý&ãpSטoòg ê?P­ <š’<0³¿a5ðï©ú\ñ‡JŒYèš™{WøÔÅ$íUŸbšíñ&â@‚LQ§š¯Åø,ø5Râ5õ ®/ešÖÒ˜úWÏÈÊ×l1ôX”x>@žãçâ/qê^H=rÓÔþDàÚBx€P*©ð ¦jëgÊ—;_šN躿çF"Ò;D—½3ô¥Wì­z¯™¢ªR¥ÿSÙ‡Åuë“ëð~‰à²='8mæ ·F0(L«á?pÊ#Ù<ÉT¼âÎ{/>ý€îOhŸjiî¼ªÚØ€h²×\ñ…VÊ}}þmíø('G€Û éÖÿ.é)+¿Ž·YsÄô”¶¨¡;¨úÎW䙇?áþE—­»ù®#¥^7}©(Q½nZ²&?xTåU1Ý‘…j>°ËÚ¢ÅÈ:ë Rz¦/œÉ†Ä_ K‚â‚÷ëôš<]t{çm–æ)¹TDýÉlp[ÕŽòúZõ)yÑäaɯ廚vÏüðcÅ/ݧ…¥ ÎäÞö.)gª/xðbKºã €@“”H¤´jdqþâ= MnFÙê%®~Ý7P‹p½î?ÔÕÙ+sgy¡îOÊ“aXíKi»g-ÝÛØäfÏX²5RZ5Ûä‚+ùÙ§ Û„{oÖõ:(.H<Ø=óÃ$/pÉ–™¹wÝÔÔ0½bRBùd/Ö Dû§&IL*¯Ô˜¦QèþŸó—L±‡ï€H¾#î)‹­€K¦9‡€©QÛêoT… êñÙ<[‹[ ¼gãÎk¬mRuÂÔhÝÈÀ%SzŽü L¹ bÍ?t²?°÷غãßür;S5§Ácb^Á™Ò@>`¼[¨W¬Þ¸ËÈÌX„+¸o׿ÛÞ¥C3¦i·á8³¾€€jižÈ^–ßPnÔ q Ä&‡ÀÈL~\?27JÏ >àà$”tà‰ ó¦hjíËäÙB¯/ké týnÝÎö»„®°Oæ !,êkGÄø Ǻ’Â÷…Þ¬–PÑ¡óC?Àñ·Ró®®0øÀXšTxÛSñ^1]Æÿ•¼&+ÇôÀmùvq/õîc‘ýÀ X>ð¯xoÔâ›(—”üUµ?!×ä‰1õ•þ=‡‹è®WßòIÞÀaÓRÚfæÞÓÄõ§ãay±ñCB­\N$ñ…ÎÌú.V?àû¢ÚÀÞ­ëØ;›ŠÜ`¾{ÿžCµüdö²É -ÍSžH<ÀôjÿÓò÷VKåUß@ðqÀYù@ÙêMMÄœÍ $”~àßs¸ÑÍœÏŹHhÄë?à Ÿ¬¸`ýÖV¿åÒ[Ði’Rß“Ú4ûbKnA aÐëÑÓ†‘Þ!:홦îeLÕTÙë?¤åvÏúðÓF  ëØ;ÿ.¦ÚŸá’-ÍQK¨@8NÑ$£¾@ày¦i¤öñdoà„Q_,Ê_tÆnâg¨/(¤ÿýÖë–®+L»8šäñSýáŸòmú%YnóSΊW¹ªíÇúHå×ñNÛEz}~•eª¦ENz¾,ž±ä…z @÷',]*8’bõ;ÁèkõÕôxá‘,-~YLKÉ4ê!•WmuÞ=uè éæÿ,üÈL®IJ8RâÉß=kiƒjÑ3Ǽ]l–ò¤)v‘.èlëÜ~ ¡T¿ñápèúʲ UøŽº§,L€œ3š3Yº`—0UjÏ'[˜,,9Ô@¨ tý@ñ5Ö6i<@˜’~mlÒK ’© ]Ê4å2&‡³ô ™N_ÂñG+Öý‘Uµk¿hêš—1ÕUgoÚÓ¿ÓW9¨ÖLS.‹ôc„˜®2 €Œ[w¿ña)ÓÔ•ú`¸î<ùVÆq4GVñò @½†Él §ŒF€ ÐM`ä"Ê……Ã&E¯€º~)„’N<(u@§Ür|ú‚L“¦éî<æ•Å ô"«Îr«nÔÀÊÒPý€b|úä$@~%”ÿ±pxîñzìí_À3E  Tä¹ð1š ëú‘â…š†ÿ©ä5Y= 'Ó¿åÛz¨WÇ q|`£ù¢âü þ¶Ú| 高ú‚?¨W_Vú÷ªÉ§½]ÖÄz5Uòš|€ü TóEÆ6\“êÆ Ú`Yt}UÑúÑeÏì:¶©ê p£ñíiø€¤¾bðÒD| ßèodŠ6Å|-ÆŸpÁ*©ÜÛT|ÀÔh„r¯?#øAç,Ñ|Àð ‹ÏéÎÅ_.âZôž2Ö.{ý×3U¹m¹$K¡”©a) Ir SÙZÛyßl~ü¥ÄÕ´:”8z4¿™päNÁ‘Ô§ï_PÍU•½ÃjX~÷Ì%uÞ_ÔÁîºRLµ™| v(j(¢B@^<]ÿC?ð²;ï3®¶ÏR_àœni‘zU5 šTî=ªÂ?sIÖ’;´ÞûŒ)kâƒ=ÕPèFÎn½8–P¥rß·¾¢Šúë¼[.œÕúÉãwC%¯¸§¾[/>ÐýùG2™yULO©®/ð·÷»þ¾;k/ùNõ'ÌJ[.¦9¢úH‰gÚîY6è^±Û„ûFŠiö1Õõ­U;ÊFžY?ÐÕõZ4yXö)AùΆ&€¢é —(Aéžjý€­½«kjì6±|à2KzÊSTIªð,š¶`wC“›Q¶ê÷G÷ó úž·%ç쓵£|íæSôÏë¿p R…ZqÁâF'7cï¼åÛ#¥Þ9Æ="ål–¨ë€¬IÜÂÛu«©¼ª¸(QÂü ÍØ=sÉû: Lp$·Ì̽»šŽ˜þ„µX›lMÈY¬3ÕUTäu>0pÉ{øDIG€ú 〩¼ç.A fFÊ=Ž8§­#týÀ®k­mÒ)@˜–ܱ£fÒimG.X6 u4óbF{r 9¼[ŠùäŽmzð D7¦ƒàr6ˆ:‚aªz1˜6„µ?MÜ@·Km?øúe5Ñë ¨À·„arëèÑ*.,7pÉ”N„ra™*·2òÅf€‘- ô7-ø}ý/FÀ–ÑvPÏÓŸ°’gªz @/ü–o?Œ“Œkhv6ÿߟáOX›X¿Œ©/¸¼©À4ÍäQ> W£| éõQÿŸ“H1õiB> Åèbø€w姆~–fÎîMÃ:ôØPã}þt Њ^_@±4w&ØŸ°K*À^¯æê©| hú‚Ÿ¥ ߀PÊ'¸Á¸êú‚³ò?8{eV0 7?‘—èþ†Ù„r‹ü{Óœ‹¿VÄ]_Q1ú_åS’_4_ÓùÀÄoÉ­@*¯**Ê_Øà²Ž3ÅžÙK—H¾b€Ap$·Ê̽'†ðä.ct—”ÜdžÕZX~zU'¥Ván ýç¼lSCžßÆÉÞÀá]¯¾sm¢\R (çJΔ•Ó$É @f »”ìÝs½µM3½¾ N€œgtaªr®;SÎÀRìHYEŠ&)ÂÉï {ú=—눿ËiÂÑóœ°^L¤ê¯7¿ú•œÐâŠßw¶ñï9ÄäJ_ž ¼nÛ 8z´ˆë7?gyA¦ª—‚ ÀÎTj6OŒy¤ï° ì÷ ÷LöØ2Úþ …P®#޳Sµ8ý :0M™N—g݃`l/ÝFþÈ8ï’¢ÓÜqP]_-FãQï¨U_àèV€nâí¶ ¿ ]œáv]ÀÌú‚ PQŒ³¾ šýtí¾º|‡jE5Ðdõ(€ÞLÓø-ß~g}Aƒù€Ãøö8ÈfóEÅü³ø€(°Dùµ —7õ˜¦ýÃH_Ë€èr´ë6þ>Ip¶0ø€ù&¢þòsVˆH›°4€„񴄿÷T~"û‚'¡ë²2sï¹³áiNµøÀÊSù@Hz†¨˜æh >Pã?p>¿pu¤Äó­1=‰æ†~€€PúÒù@ùšM` ÌZÈ!”[xŽœ‹¿\ÄY_ðŒSª¬¢Iro€µ7KºCX K'ò‡¥™ó‹Ä÷/w÷ΑtŸàHî„ÓëÌ``Ф ï!5$¿¿{V#ýºŽyïHš,8í­j¿ãOÈÇ †Ž´†)‚ì žd2{Ù=åí3®¶ÏX_ðÇÇóò­mš_e˜PªI•¾ãŠ?ôSµ¯÷Ìþ0ÖŸ«Üp ‡‰ÜÀÙ“.1ô¦äS“<þo};K&ÆÑ¿ l™à´Eûʾ`“µWÝSÞÙ\ŸS–5ñ¡®à0UtÙ3Ͳ/¸ÝÚ"ýκûöh¾Ü„𤄥2o~ñŒ÷èOxïbš#7ʼ-U;Jî<‹~ í5#9ÑÂ’_ñ‡ïhhr(.X´T¨wk’bêú:º¥çÅnÃF]fIOkò5¤Üå~ííF[–­ÚP’z~¯ TàM®Î^™ÛË ·TëÚJ8‘‹êäªÐÔ]¯ÎOX}AQþ‚Í‘’Ê™úwŒrޤhÁ GVó[¸dK+ݡϷË=å„óݳ–| •W‚ÃÖ*sÜÝC¢ÅHè¿gµ6Ýš0$¿cÕE“-÷=ÿ¼dÑiï²×dÇ ³6õµ#õ‚^^M’ËÑåèØ{ÊX;ïÛU|½µM:€©pƒ9kGÛ¡CIûá—wbªÔ =- `ö¤6-ÕHYÆ—üÃÔø””ëÚJÚÞtQ¡´Àzƒ°L¦FŒG´Õ@ÂÑ0SU„ŽœDÙ/¿'ñTZ×#%¥W˸¦à’×ÛÙz¬Àl@T¬Oªñ2“u‡Fº‹ptûÅ_ÌÒ$9…PÚž%v€)š?Ðf¢ÖÂV»$b0‚]LU·RkÊ®ÂaHæ¶Œv~Ô¬/h¨ÿ@´„# Ð"€ìèv"Ýu¼³¾@0ü ¨ 4D?ð8’:w¼h_}÷3Âäå¼&+‡Ò‹i¿õõ°¥¾G1ù@a™ >`$ž¨ÁdoÕŸå? ”«É¸$ñІº~QÍPéßsЬ/ðÌú‚‡›ÐŸ0ÓÀ|“?Õõ ÍYÑ^lª¨áðéù@qÁ¢Ïd_àˆi)Ý3sïm*>p“ñmM>LÖ^†ñ‡-¦9Æ6A}AÓ½¿ákæk1þïü"•WýMâO~’iZ+èÒ|à”Èw÷mY“ê—¨ä`Ëhw›-£ÝF{—O$ò¸çâ\$$âZœÿÞTWðÀÁÁZ$Òð\{óQ¾‘BLQK¨Eܔԡõç›}Ù—ÐtÿPš$Þ'º˜ªrgÛ©š*û‚‡”ªÀ{{føy£ÐuÌ]ƒx§íyÁ‘ËŒ.NИ¦)Æ1øÓÖxý'˜ŠçÝSÞ>c7ñ³Ô¤å[Z¸þ…ê«¥&•{¨¡ÈLcß]xÇè±úG·æ½ÔPèFÞi»DpØbê ˆ>Qþy`ŸçùzÖ̽۶~(8’kë^tO}»^ú¬É£º@U§ÅÖHÿÖ–¿ä®:úÒÍÿyÿÿ‡éO(‡#%ž©»g}Р{Ån)8m±ú­UÛŽ8KC6ULu\ ú€|gñë Þ¿à·[Ó/¹`-!¸ÎèoØ’³våk6®Á#—XÒSÆ LQ#JPºËýÚ[¾O,[µá¤³O÷uœUB8ÊñÉÖ.©ç÷ÚQ¶zcíþ†Ž÷©(ؤ2ïKESßmtº…›OÚ2:TZÒ—€2M»PLk÷AuÃ.i7Fë <¾â¢üuú‡Äûß[ñ±TYU èþ¶ × €é?`îÑ7cŒòÕÝjP2ù¥"/`ê‚Þµ àdoàЮWßjRïòîÏŽúŸ¡3R˜"\̼ÞÒÂÅ„$R?`FÎòY­™ªd `J0¤É•^"e%×ñLÓ²mŸâh0€œ³Ò˜¬eZW€uXg¦IŽØ« ' Šl¸ýGJÊÛóTZ÷òJßkîØµó¥ÙõOøñ¬ÎL‘‚ +€ &Kéuì!À»mwëÀþ#IáãeÄàST)ž;Üœå³:0U*Ðõ§ „Ã{/¸;wÌ>øQNŽfËh÷=€¶„ÒdÕŽ»qÖÈ1tœ0DzÀnÂqE –=±P¨q]í?0FE‘ÏYñ*W_JbðÑš¬¤dO¬ d=¢š0E=  7ÓTÁ»íx/ÄÏâÒÄè@NP¦±MæPš~€B¿ÛDy{Ê`L* &(÷ï9XDw¾4Ó/yý@LKi—™{_Ödº˜‰Õ|€IªY_@©È'Ü«Ö ƒ˜õ±úò˾ ÉzdæÞ×D|7ß®<ÿ€ùIEÄ4ǸÄò®©fý ýLQ£OMbüÞ^%•{¿šB?Šå/ÖÁî¹-kÒ¨~‰JDùÀ¦s|à\ü%#Îú‚çRÂÇJ†0E@8ږ𜌱“ÕR¦jk“Ú´þrKn^âü  kÒ¨¡D ÷þ„üYögLÕ˜ì ÔÂòû}•+×ßpì=—ñ)É/| F}á8U“dÕøš7Êjl£Ã¥jXyÞ=å­øôz½€+ßÒ<õêð É^ÿ1Åú‘³Ùþçê×{»¹äÒý ôRC¡ëy{Òebº³jô/ð~í+*Tÿþ†?­Y&8mÕ| ¢j'@^uOy»^«¥îÏ>–ŘòšèrÄø¶ö»þîuÖlúbáÇbZJO@7¿Œ”z¦,\^ŸÄµ#3÷¾;Å´”§ªý ý›};ÏR_ §aª¥™óÀà¾ðEùïþÜäP¾vÓÖÔ ú¬¢¬÷7[ñÉ|DzÕ|ʲ&?r™%Ý9FgG% tOm<(ÿí2gŸ¬uœÕ2¤Z?Ðm[ya-ÿ‘—ÌßdÅžêž2?aEð»g½¿%|¢ü ý;F8Gu‡ÝŸpüCM'yün÷Ô·,Û8S왽äÉã/`ÔÜwct4I¼Ï¸»aœhi2>ÀdõEœ‘Šü}@”T­•<¾Cî¼·›ôÞ û³üOpÚÛLf ÿ7>xððK —Ñý;üsS%¸$¿%áøNáã'2Mm>|âø5<Ó”0ž± Άëª4#é ÀÚè  À’–æi\ød©î!HIžŠbkCž¯ÆÍ–ÏhË46@GmÁ´ö ,ÉøHˆ}ºnüOá9 J¤´œ¯Ü´SæA‰M×)ñóM™¥ûBz©@ìÕ•¤ ‡p€püþ}ïüß»LÓÚJ5ƒ0€Zßä@l}Y€£`ì áøCLeûˆHœ®Ñ¢-£Y_ ðÂ@‹Œ=˜³|öhM7£Ö¤…ÃF{ã¿ ºj¢œgŠz¨Ú^ÒqÕ<Þ>'(ÓØFó¼)~ÿŸÐßÐ[_°±à’,P¯2¾¬¨æ•UÁioŸ5ñá&ô'Œò€jÿS?@AðbS @ ‡Ç"ÊH¬~`a¬~ G×±÷4‘ÿnÖß=~8U? ©/ ٖæ®Ü&âêÁXÔ<É4­µ~lîù:øÀ½ÃÏÚ·e´Û|Žœ‹¿dÄéO8Ñ)9y5Ṅç:RQ°J™*I&)'™Æ6X[6ÿzë„©ž„ kâÃ7‘¿Gp$w„Þ:*VÆ_óx ª\å?¤E”ü{Ê–7Št=òR!ÍñŠà°µD Û'€ª…%£V‹h”Ô5.Q%íywÞÜðNÎé––éׯ“ÅÞ`ÿظøË·R_¨-i¦µAK-ÁXK¦ªÍÂ'K¡ßªÓ xÂÑÖÆõHë{Í;ããsÚ1Mé°V`¬•‘¨™âÚAŒÏR]dB@x^%§1U¥’×çä©(Úé4éM˜×¢·Ñ_5oÙurxœC‰gÓ®á¥ÎÀ¡ãGy¦ªº÷@ƒûÿ3(J@èI'ÀÈ ÂÑãLÓŽirtýã"æ¾¶ŒöW̨À ñó9£¥@Nvî”}²þ3ȜЧ¥Òä}™ÆøøùÀè#Žõ¯1ˆ©/ Ž|@Ÿ.¾Ôê_°‘rIö/cøÀåM=¦i&(7ê fùäªÀAœöö™¹4±~€‰d%Pí?`ö/ T /7ÕÔpd,ªõFP”ÿî'²/pÄtWÏ®cïm>бÀ†ïþ{ÿžƒ5ù€’ž7jMˆ¥¹ë©Äó6Ãðœ–å¿ûk¤Ìó5Ð$þ¹Õ|€>Qž€€ãÉ5õ™¹÷ߤûR¹w§{jâùÀžÙï •{ÝÆ©hÓmüƒ7E@­âýÆvµ4~@‹È/À(N'5õþõ „—½¾»^×Ä|àÑïÝï@¦Ö¤4xðð`ÂM«0C E~6n^…à¾ÃCx¦i9æÕ³±õµ#gŬ$-ÌšZáh:€T5¦RE…~ý¡dOÞð`Jßknß¹ó¥YõO°|N;¦*=A € Œ¥ @“U át']£ÀÀ%‰„pœÊT•#”¶ç ÏGûÆÏä7ú“0L˜ŸW$öÚoz 00¦Ê^?çÝ^\bðZƒ:£Ú€˜d @¼`¬„xõ¾ð0U+§_É4Vp{ç´œiZ>ƒ€QQˆÓŸPçš,· ¢XÉ%ñ屯ˆg [F{—1Eå1|@å7}µ¤€zuìjòúFŒ~€@×hÍS¤…Ã×Çs°†o·]l~mò/ªý -W6üÐõ‹>På’×0ý nBÂL€+¡Oÿ÷@´¾@^`lC‰H_lª¨áÈ8œü[öúé³Ò#kòc$:yM>€Sù€Š˜ŸT„O¶ŒnýÀL¦1³Á«ækѼ÷K¤¤Âà$Ñþ±|`r|ྦàÃmíÏñsñ׌¸Ö}¦OtI•Uƒ™"õú-I EŽSAøÃÒ<íß ¯/è6þ¡¡4Ér¿àHÎÀ©þ„5šW1UUeo¿&«‹ûÊW_9îþ¿sޤ‡­uí¤F}¾Æ¯®/¨²/pœ©xÖ7'¾þ†F½À K‹ô˜þD“Ê+ky%„ÿ¥^Ø~‹ùt%gÅ«\EánZDºEHKdøpÕûy¾èã=“N·Ú:}Ãm'V›)ëÓ¤ ïVMRꯘüh¯‹.Gw3‡ìõovöm}{Ýú­?‰åáãe/ï™óAƒZ fŽ»ï˜úÿ¦ªdžŸÅŸ°y,ðIU·449ÏX¸Tö‡©¡ˆÎœöþö®-ÎÀ&>r‰¥YêxèÏ#Š/|{ÑôÆû–ÿö{™«oµœÕ2ÔðÈtöé±µ|íÆZý -|À8]tRõ²{ÊÜÄÕÌ\¸5tôäè|€çl–Wjœ‚ÌÜnâífÿÏŽ¢üÄûî÷á‡R…w&8l­3sˆås ¦rIIÏ$:¹j(ò"ŒU—dÑùÀÀ%3íáãÇ׃€—½þƒ»^{U£²ÔÝŸ}l¥^_…PþBêÙ¸í:ðºÿ@he£3ÔŠ/ø£á¡Ê»–‚’‹»ÙFûÔ—$[[·XãnšŠÂ@£¿!¥ï5·ïŠ›hj&@ì³°ƒi6v¢ÿ$Çü£ÉZ!|¢TeªÆ OxΚ¤ÄÉæv`š<gü^*XP»FθWÆi ’5é‘bš³¡TNêÜ;>—Æ9혦µC€„ù22²«êšI[Fûß¡{Ì癢ÐišàÛYÞäu5X¬åOxœ2ýaž/¹Ê÷gñ£Ê†n¤¼ÝþyŒ~àÏä±þ¾ 8²&>ÒÔþ„æªë ˜¤FõàÈ+ñº~QK?°0ÖåkþØ™–Ý÷fÎjIᬖ©û…Ê~]¿±¹N {—Ný¼Æ€ÿöªÀö"ªùÀãM ˜e” NËÜSçý,•{¿BISêž­ƒÜ?¼‰øÀös|à\ü%#îú%࿉)êp¤#!”2ÆÀ$9Èå$„MÉ:~ºéÑgìO8aÔD ˆ®£9VUOc0UÓd¯oŸ ¿»{Ö¢:ýÍêð¸ïJÁiQ=× ¦j* g%Bu@õ t>Àžsç͉¿¾ÀÞ¥ù–é×ÖèoXá=¤…¥|sþmn¯éOغ»â÷ßÄ;—‹.G{Ôô5ü¢ÿwO¬ÐûxþOpV×ȾÀN-$=_”ÿv½Ô–=_Îí¡I‘©‚Óž3[œ½[ÞV'HéÝîSN0¦¨‘H™gJqÁ»ËꓸvtÿÐ]bšóiÂs&ظëÕ9·ÅnSàÍAùbjÊeú¼É5¾£hÚ[ ¾[*_óÇ–´ýWB†þ­}²Ú–¯ÝøÃ)Èšøè%–f©å¡áî×æÖ Éœ-ÊVo(utïòoKJ8Žãí¶¬”žÝ6Wn:…LÑùÎöÎ[²-|¢lô{*8m5ýŠ»M5ÌøSc:x»iôŸx{r«ÌÜ«ûR«pŸ±ã’’&%:¹L’_„q VñA ç¿—ï+Ê7€NªðpO™ß´|àùǶvQ9›ãBêÛQt­ÎÑÂÒOM™ AÆöî¿–‚â}ZãSìMÊ€³%ÿæSoJ/ä© ´4^Óú^sûŽøõZ¦þ³J @’þ#$÷0&‚Æá“%SÕ|€h’g}ÁÜL“ç˜å!Æ jnDjÍÌŸ)8"ðVƒ€Ê5@?oU ¨I2S‚!x·'YùDLwõ#”(Išõ*ö¤Rß#| ŽF˜ªÉU‰@‚ ÂA0ªrv§\8쾨‚-£ýRò¯Éò!€õ»ØVß4L?Ð<±õÙƒÝ(þààLi\ÁÛ“/A””KJþ BEáÏàÿ4¾ŒÑxª€˜ælŸ™ûPSûšWÚÿQ> ¼küR‘Ï‹ÿÐõ C? Bÿ««Áv¥e÷»‰³ZR¸$kSòÁ,‰Î0E{ú*—ðÉÖ'š€¼ãOXóy`òÏWˆÎäDò§˜¦µAýô ÏšôX‚ù@‡á¶Œö;Îñsñ—Œ¸>ÏûÏ{Í>vâ&-é ‚NTx`ªfŠr’iXki–öeBë Œ;ß›‰Èß/:cü O¹7£Ê^ß>Å|{ÏìÅŸ5j]ÇޥിdÜ´ÔN¨0UÕUx‚Àת/0ž˜ûŽieBQþ[kã€îOØì k«fסúþQ•<¾Ãj øSÙWÍ.»vWá°a*`ê õRCá!¼Ó~…èJi»_¤´âßþÝ%ÏÔÓ`çÙüó Ñ•Ò×x7Ðõòäâ‚wëu¿Ø+o|– M]ó£È^ÿ¦~×ßqëYý uý@›OEWJoèwÉ¡HIÅ«Å3Þk?aÖÄGï\ö‰„ã,ú)ñÿQµãÈmgÔ8²Z¿.ºRú@·¨RáÛšÜSç} ¥Û4Iö€à´°wm9=v›˜ú‚lj©)O š$‡•`øVwÞìFߢ—­*,qduù·Y‡Žãy[R¦³O-åkÿ¨Y_@yšg ˆÉÿKî¼9 «/Ø;ïƒmáåÇÙ¬5Ÿ| 5DJ+·å7E}Áâ÷%o[›Ì܇ªûRQ0ë -Ü 5zŽPªTäGQ>Pñ;ᥠÏ~÷”yÿhl¢³E÷çŸøIpØÛP©UèÃÀÔPäǦLnÌÂOF½:ÜwtH¬~€ˆ©Î:¯Ý ÎfûÚÌJ.0ê À¨}þukÑŽÞ¨÷Ár–ÏiÏ4´¬îih…ñ.0ƒŒR¦Iá'U¦©…<áù€‘†éÔ¹†ôÇø©îoQͰYŒÒNcæW PÂÒ$ž©ªF¸¸ä±þ„ˆ¦@ÁÜÊx‘˜Ú‚Ò?-Qy!„ Ÿ³bg~ÂÕëFŒ>˜³|þ(¦ÊÝÎø©N¸$~"v›²_7ä©’$†[Ë3E;  /Ó4Þ·³0NýÀ# ð'lîä’­IÆÌ¢LÓ~ׇLj\U5$®óЀˆÑ˜õI_P¨ÕÒ¤! Ê€ ÿžQ>°])²&>ÖÄþ„ìŸÆ ÔàF}# ìտΨÅ>ˆ (ÿ­ÿ“}£˜æêÕm¨{Üà·ëïžü׿ç@-ÿpu}àt4…ÿÀlcå`Šuy¨ö˜þÖOR¹ç À¬/H$ˆÄðnÒÿ/>°ÓÞ¥ãØD÷\œ‹„DÜú¹Ê7”)ÊùÚQ‹ht 9M–O¤ÐÚ2-±þ„m‡%ެ¶·ŽÜ%8çA÷'jrj=ƒ&Wùö+þÐ;»g¾÷I£ÐuìýÿœŽ—y{rËÚÛŽS4IŠé_½¨E·‘}þ£LRžrOwF™áYø@ó7¬­š]oØððQC‘©Õò«_mfÿ½%aQoÅ[5„w:.ÓŸ ê·yLU5©Ü»Â¿çääzóï–_ÿOpÚÍ«!“xàø` J.5/|Š#!þ„g *Z¾Šù¹'m¡¿Dä”^s3ê}°œåoµcªÒ†pDfBD A¨LVC‘g·†kw÷€–ÿ¸£rã.OE¡#OE1`„)ªRß;c=ùÜL“æžiL¯ÿ—u@-áQ¥Ó@©Õà§Êòê ƒÄ~¸œ®¬°é_Å@ÑBøjBQ ñòì¥sXW€ °€Á®+*X2@¬’ } a ¦ñ’§*š_Ѿ]fÃþLcbÕö5=‡~`Ýp8ž™Óù@Ò&cÆ~á`Š?ðgÔ˜þ„„Pú‡Î“¡ëšTÄLÓL£•²j>PéÝbš«cfî¨&Ôd¹˜ø/í_ ¿c¶˜¡}­AG¯G¨áð“¬Ó¥Õ| ¸àOe¯ÿˆé©}ºuo¢“ë|€Ý®G¾;…¨¡ðdƒjÁÕ$|`ÓÀÇõT>P\ðÎ/‘’ŠÏÓŸ0¡|`<ÓX[èú‰ÁCGÏÆ‘5éñDó¶Œn{—NcyÜsq.q­²&KRýU×SQüáHGj±$ŒjŠZ¥…#ÇRhi–šxÂnã¹™ˆü}¢+%Õþµ:7™|€©r•Ÿ-,žñn}ëàüƒO±½"8ì­¢ ªCÕÂ!/î”G.DöúŽ2U›àž2ç·¸ ó3 >ÕÈ^ßQ5þpüW©^±-V?°éó%=ÔPøfÞi¿Âx.hrUªð~Öÿ†;'ÔÓ`çùãçÿÓ]ÌŸIžª­LRž.ÊŸ_¯çɽ^™Ð] ‡òEWJuÿ¯o£³ï¥·Ö^ò¦A›OÅtWL“ä°TVùR}Îåé"3÷ᑱ|@òTýîΛ=,v›ZõW¼ni–úwП*)ʦÍý¹!É |í[Óö[‚ÁTà-œÕÒ&õü>mËVo8]Ã1ƒ,éΉS”°âsçÍJ(qõé±F÷àx.ÉÚÝÙ§ÇæSôœÈ¿†(Ï ¼˜H>°{Ö‚-á¥zçÊÛ“k×êOè ü|À¬°á#e•×QPz©1-Dp9ë¬ klèú=Gs ÿ Š£Gv\¶&A%@½D žÓ1Øh1¨ÿ¶ÊEªÑ–°Žþ’x»#Óä¹ Œ7.ù`2½lN€€€@•þxT…ŽyÝüøÓÁ„ @žÜþVÂÑûDgJ†Ñ,5vÿm˜ª©REå>5™¿göÂÆú<øO15å.9©åi’ÉÆÓŽãP .bê ªŽ0E{Ú=uÎê¸p{a!Ýøéû³-ÍÓ®ÑQºèUöúŽ(¾À„’/‹g¼»ÅÜ~ÐÊ%‰ïÖôPÃá!¼-ùïbzjG¦EJ+?pÓ]õó´r‰P²j㿇-Z_)-ßÌTöLqÁ[õ*†ïñ“YLUßœÑúÈ^ߦ~×ß~s=ê Ú&ºRú€&IáHIÅs»g½×°þ¹£îÓœÏÆðõî¼7kðZý [M])ý(¾à MÅo} Ã7jáˆ])»Mxô úÉcYÒ]“`Ô¨aù&÷ko6¾Á¯ëJ}{üÆ'[o&”ò¼-)ËÙ+kSyá)õÜTTëžßõêŒF'7c÷Ì÷¶„O”½£Ÿ²àJ™Vãt›ðè-¼=¹qž¶åÏK¼~`Ö{‹¥rÏ.„K¶¶î6þ‘|àAc;Åñ‰NnÓ´g`úȉÂÀٿ $m Hžª}î¼7/oª@÷gǬœŽN‘™"÷£ýÇ®‡aï¢Ã?4òøu†Š®Lˆ”y®£»Ô|‘Oq4}}A’õókBi6O(5ubŠ¥¹5n> •&+%Ôʨ‹ @¿ë‡oÚñë× ^÷'@ˆ&IòÖñÓ⨼»#Ó”ùxÂÆd ÙËæz”ƒ±RZ ÆJ@H áh‰&I%ëG>QöQNŽÖ{Ê$•ðO>™‡¦‹¥ Ñ5?!]œ ä<]¥ ``ª Âq${Ù\ åáã'À4 Ð4J oAPQàãã£0•"”›`)þ `#€Ã  &´0ÿÖ„ÆÐ«x¦ª‡6€i"¥áˆ£¿áÙøÀ¥ß~d”•´"œØLkBZ¬¹‘ZEJʲÀqðï=ð;Ïu@† Šß?8žœ-~½æö0€Æ¿hØ»tºŽiÚ-Æiÿ‚&µký%tS ö'éLy¿Î¶ä¾T%y¼{BÄ4W§¬‰7a}A– ÀÕÆ·Õ|@ Ko?¤àèÔø]¿0ø@ô›Ô÷“¬ý}WZvÿ[ –©ûÊ~]×þy†?á7½« Àu2 „O¶æ6˜Ãjö3÷Ô9?Kå“$¸¾ 4iZ;cê'üÿâÅö.Æ%ò¸çâ\$$âìoø¢3|²d0² GÛé–ozë:5>F~]R‡6Ÿ%ÜŸ03wÔ \’õÁéˆÕ§ !t3½ªÏÿVà@éÇê_ÐuÌ—óNÇÁao{ÊŽ1õLý@)þÀqMQ'¸óf5ÄŸ°õÝŸ0zÿ¨É^ß!Åø³'Óðí›Ì[m½%áò^ªßgO¾Bt9;U›i‘ÒÊ‹¦Ï}º^è?g2. ~&8ì}ôד<¾­yÖ7s ê=^x*KSä×MÊ+×÷¿ñγûèïä£/ 0U GJ+^*.xki}׎ÌqÝni‘þ2áyTx ÝSfß»M ý€Ò<é 1Õyháp•â -ÊŸÛ`·¶òÂ?¶§]ØÿgÂs7ޏ$k{gŸ­Ê×þ~ÂÉc‰©ÎIÐ=ÊBrUàÆ¢isÐßp}‰³O_ùdë-„Rž·Ûz¦ôÌú½¢ðšþ„„#Sï™ìñ=W4}nqc“›±{æ;[#%zÿ€ò)¶¨ ƒÎÆ?z³ù§&Ux¶5(žñöBÉSµ‡½m渇bü -âÃÆvŒp|n¢“›¡úƒ“`ú&[ÒN¾M ù¶Œ—*<ûÜSf_ÞT€îÏŽýÕäÔjëE{w6ždC Gþý@p¥> ŒîÛ{ƒ©€>-ÉM¯pØÍBxþBžpœéC«¸ú]\ ̬÷Ár–¿ÕN“•–„£‡×x´¤>ûèúÝ ÀxÂsx"ð) Irôê|ÂQ²—Í ±ã ô;BŽ€á°’zhõàáÑöB«®)÷ž2I#<¯×Tó†ô7¬I $`±fˆ²¯ÙËæU‚áŽähèè1ý#ZÓxj4:E>gÅ ®¾X7bÔ"£ÌÃùÀqœê© è àŸ»×($LÕ<@| T÷7|æ5Zà§54A]q:>`øÌ3ü@ÄtW¿¬Éc› ¿aç~î4¾ýæ4þÒ3¨ö'lý›oðSÔÍ×büæü$•{>𢾠_>0¦)øÀîs|à\ü%#nÂСãC4Y¾€PÚ‰ˆ‚…¦¨AMVNP_/¦¥~¹uÂËž„ kÒ7%8ì]1 –Gú5Ú¨²Ï@ „æ̯SŸ\GÃQWrŽä)‚ÃÞ¦–ßcŠª‚Œ* Ó¢mbýŽiaiLÑô9ñûÚ»´™ci‘núêþ>ÿ!ÅëûžKJúÂWtx‹I?­\"”þ²¥·ìñáŽèºaB¦ªj¤´|yqÁ[õãºÿÀoŸ NG ;ÉãÝdðz=ÌèõÊÄîJÀÿº˜žÚÇL!yª6ô<ü–:ùÀ毗!8Sú LQƒá¥Ïîžõnƒî3Ç=Q/BÞòl¯Ü¸[ÀƒŽQ>ÀEÚ4ztœúù-ád/›_ `?@öd7¡dOáð‡Ž×ÞoÕ•#åÞS'+„ã"I<4M@@Hœõ,öÑ<Ð@ €e LË^6?†ýÛG8~/Ý) Pü'ô=uý BoÌ÷Ÿ3'.ý¡t€÷²ROÑf‹;z!LSŸdª<_Lã¾ g-«>ž©Úaà#¥ûãÒ¸ÆmxΊ“+:ÈÓº€NË€ÞLQŸ9UK2*°ŽòLQ× Š?Ð(ý€Á˜öÿ¢È/gÅÂ4&Eº8/tôøße7‘*=ŸñœÍò^Õ{ÐÚ®p÷þÂa÷U@oþ¸Î–ÑñoÆêª$°ïàφÿ€g"8lºMx¼‰ë ˜ Aªù€&ÉóR"4¥~ bòJ5ô†éúk«Ôýýe¿þ‘Èä:`Sôþä«SôZDžÆ >Ô|à-]L|LQ^4_«æùs~”Uü[ŸžDëÂO3MkÇÎÅ_/âô'|Á.Wy†2U½€|1½¬"R@“åãLUW'µi÷ͶI/%Úà±›h’õQƒðˆÕ¬@o¶ÌTUUü½ZDz·(n=ñê¨/xø‚Ó1U7U¯$¦¯¦á¨€ÖÜFçLVƹ§ÌŠßÀàƒÍû|€1©Ü³W ‡¿§¢øuê…ƒ¢þº*¿coÅ[5”wدÓ\ÕÇ&ªT^¹ÂWtø©zùb„ÏE—s€é3-y¼[˜¤L*ÊŸS¯ÅJÖÄ1]™ªÌ°´HïožÙëÛ`muÞ-µ¾§©/èø…èJ9 `Š =1iÏœ ’øwûÐí–æéy`R…g{ʬ›c·©U_Ðfºèržh’T¥„ƒšvÏ|ç#żÁ¨/ bš+'3÷‘3ÕŒ»Ô’žú ý€Tá½¾hjê V¯+I½ ïoTào&Çñ¶äžÎ^YkÔ´:”p¢P€¨~ jbqÁ¼ÝMnFQþÜM‘’r}­IÀq{Mý€½kÛa\r’®ðx·åÏ­Ó_4îÓ1ëRyåv€ú‡côb5 <ÿT¢“›¡†Ãa\¹8[ò£€É‚¾] „ÓùÀÌK—æìÑýÙq¿ ΔN¦ ' ñ¹˜ž:€Ì%5?/.Jòñ»LÕ.X€nÐÛ²¾SÚ…¶ ;CÇŽ?€Jå•…¼&+‡\@ˆ”ÆÙßð¶÷Øg~?pÉ[¨Àõ`šÚÓTG­ tÃDôbšÚ‘Õdù0M[à&èþ„Câ@íX?r”)høÎP²> ­ÀzèÆÅ„b`Šú#éþìx‡’´Ý0JÝçΛqIó×m‡%‘Òc x‡ýj¦(•'¿_Õ“+ûe”zA¿Á\’µ9gµ8}z|W¾ö÷Ò¦åá’*‰kGæ¸Q#Åfi/|€H•kÝSfÝ»M ý@ëëþþº¥Yú?2à*¥*0¸èõ9?7$9”þ¾5mà€ Ï %gá’’Ú»úõj]¾f}ô,¦ÁØK,ÍÓ^Õ$)¬Ã×»§Ìht‹Á²ÕëJRÏï·š³ˆ·Jx>9¹GJϬ 5ê ÚJ8«8ÃRLöú&¸óÞHXâüÙ›Â'J^À@/8Ñöqhw —œÜú/Ë–¢é³Œeλg½³H*¯Ü¼ÝÞ.sܨ>`µŒ2¶Ó¸¤ä&cújXz¦~ 9i4óß™‘,{ðL>àt<Û|àƒT1E=#X„r ®/?Í4­ƒ1õO9x¤©øÀþs|à\ü%#Îú‚7¡Ã‡†j’4€ŠbE»Ñ¿ÀË$é8€5ÖV­þ½%÷Ù@}YOýÀè›hRÒc¢3%“iª³oí‡`ª¦ÊÞªÝj04÷¬·W_ÐųËy§=ßhPÛè@1ú€Z-"ªoó¢“}þCLVÆ6ˆØ:µœamÓêVT_-™TáÙ«C?pvÛWI­3¶˜OW­\)”­þ¾¯ìñÞÄ9lƒ‡=ª`ªªFN–- 81©þ|à‹¾ÓR/4Þ+“*=›À0Þ=uæŽúœ2pscüˆä©ZÛð­7ÕƒtþZ×èý #%eOïžõvƒê ²&?yŸà°¿@8jô7ô¯«Ú¶÷ÆØ™¨Õß°Ý1É«_àš†&wÞ •`ðzC?ÁaÏvtëðzì61úÜË-鮦¨a5ºÖýZã%þe«Ö”¤ôìþ#—œt›Q_ÐÓÙ«ûå…¿×ÔPžFõ‘²ò§v½Z°ú‚=sÞÝ>Qò¼ù¦ù{t(8ºu¸™·Ûtý@yåæâ‚y †¼gö»ïKžª­ÀÛmí3Ç=R͈(>jlǨÅÒdŸÙL–'Àì_`µ<Tób}Y^µ×÷F“,ËÍèþlîZÁéèÌTMál¶Lêß½o¨Î´`è¿OqöPCºFp”84”2E1Þ1ƒàr&œ ÕΖü…ù5¡äJ¾@TGóãrÞ0ù@Û¡Cëý©ÚbÐÕÛ`òžïÌApŒ1UÄç?° #ÓÔw Çóí†]SÖî–kÖ(Ô¤À† ÷Ž‹œi¿UW^)÷žòœFx Ô¦«Üõˆ³¾ h‚k\KÅd){Ù;›ÁØZ"ZÖ»çÔÇÀ„蟺~`Ì—bzZ6ÀääN=;Æ3 ÙËÞí°¿d Þçð”7]i_`Í‘ßu=š÷lþíÓ4.RZþé6þñy–é7€âüsçKù º=¸ä­f„’‹’°þ D<Í`*”`h\é¹Â'JVðLQÖä&€A©j¸?áú‘£Ê|à‹ ͰP‹í0v1¹@š1;i”ãþ3S«Hï©/9 e;A/UTîqO™™Ð QÛ¡CIûá×g2Uý@r¤ŠŠËÕPØ¥I²œÜ¡]¦Î&?ù³èrv Iå•W¹§ÎLxÀ¬/ [’Ú·±*ÁÐ'e«ÖðÓ4º?¡¹6ˆõ'œù“Tîù0õÉ&õ ”ŽýÿÅžãçâ/q×DJJ¯#<÷7©E´€Ñ¿àµXÖ'uèðïM>™8Bý~1ãVÂчEgJ7£«uŒXY¿*ûüûµPxïX~:Çþz sÜ£ÿà¶éFQ4bèú ̰…ªmœÅ8ªIÒî)3ãë_ óV3cø ÊÞªCŠ?ð5-_¦^xÉvsõ4håJáä÷_uSÁ[y{ò?Ä´T“JøDɇÅs'ÔkýçÌáCÇ÷})ºœ?ÒdŸSµ§Ýyõ¬/— °7ÅôÔþfÉã]×ð­7ÔÉRzwùNpØû`LQB‘²ŠçŠ æ.©OâSOá##--šçžÓõžªµ¾ûÎÆÚÏ0“k’\%ûƒ×749Ϙ¿D®ò]«I²Ù¿ Ç–Ñfzì6Õ|`âØK-ÍÒ^@™¢FÔ`ðw^Aú–8²ºþÄÛ’o#'ð¶ä^Î>=7”¯ÝP«¿a’u&LÿoÕøDò½ól‹”–¿C?ÀÙ’ jœ‚ÌÜÇná’“Ú€T^¹Ñ=ufÂývÏœ¿PòTmÁaïÐmüã·DÀÙl£í4j›ì3[ †raö/àùÇ€(ðî©æ5Õ ûóã× {gÝŸÐÒ•úwïjê´pø»¦LªÏÔ0!°gÿà>ðv{Ó×8ª{$PQø¥Öjý@J¯ âRÎä,_Ôvà’·ë]ÎÞvÀà ¤3]O˜¢ÆéO¸ #Ó”÷Gùì¥ïœ!«˜ªü¸~ä#g……ÑzO}A%ÇAHâ Çé-ÿH¼õ1|€Vn#[ö²w±U„~*¼íÞ3Ulh#û¥˜ž–0%¹SöqÍÂÇ‹2˜ª\`t„Úq «ÏÿXxÛ½û gÅ|1x ä!RZ¾šdæ>6×ڪŭЎ¯Úõòôz9òÆFÛ¡CI»[®í ‚¿¸@³ÓlvÀªHiùQM’> Ÿ(ý˜KϹ w8®¹Òã)_»á—xàs»qôÓ¯JŽþû«uÐøORzfnƒ° $ÉØÌ  /åù«Õ`HÌ#} ^Kaª¼K¯/ð&ôBt{a!Ý`{_¦ár£]IªTQÙF …R¢Xš9:| w•ÉÂ'Nþ½¸`n½„‹ñfçš•—ywìZfmÕR+*×ì¿ð}§ªóÌ@©(¾ê& ‹rr4{—ÎWOÐ5B¹ñ@T?P¸=í¢ ‡sÑÉ%%5Èèàu£¾à³Sø€‡ÑoˆONz&±| {*ÀKúªÓò¢éoþ(•W| 0ß0‘| 4)F?0¦>ð般IO68|Žœ‹¿dÄÏÊÊŽ»Œu¤Ñü  «¡ÐÂñë’;uü$¡|ºâf" Ÿ"N£ˆcŠä­Ú§ú³vÏz«ÎǾõàö|ƒÔzÿY5èª`ô8¬¡1}þ#LVwOy£| £ílk«· úþQ•**÷«¡ð·|Šã;gïΛÍ&Z9+Vp•ëí©IÒ0Þ™r•¡0ÅŒj¤´|YÑôYOÖk:Øÿ¥èr4§Wª¨Ü IÊSųëõ1ÝýÙñÝ5)2ÓÒ¼Ù3äñ®í?xXÝ|ÀÑ#ád#,äIDATã;£¸i’’ÊÊŸ.ž1¯aõ¹£ïÓR_£¢`Õ߈gµÏ½è™ù@—ö3äЯ‘®nhr(.˜ó þS Gª@Ls]bïÒ¾ v›˜ú‚'/±4K{:ÉÞª«Ý¯4¾¾à×µ¥Î>=æ¬Ö[ Çñ|rROgŸž”¯Ýp Æ pVËlã{Mª¨|ªhú¬ÄùÎzkKøÄI} @ˆÀÙlµùÀè[¸ä¤v y¼[ŠòßlÂwIžÍ 8ìí³&ŽgK~†(ḱ‰Nn† šªMJx.Ö ¸„²·j÷®W_ob>0a½q˜¢fÒàÁÃ7š­ÞÔ@ð?M™ÜÈñ­ñ¥>Qr]­úW“×p6[T?@-⥆~ ;zô³¾`q»xù@‹AÿÜF(5 ì;ð„ã BUnX@8ŽÏ^¶à ÀþKëw…Ãî¬8Û~«®¼Rî=õE™p”'oã Çë×fßÚ@çÑOäŽbrøì¥ï®¡ÿ‘*BkÎl%`\‰5R¦( gÿ‚0UÆþÀo•‚€½,¦Y?É^öÞèœeÄî7håJp¼hŒ£ŠtÿÄ[–ÍoÔPø;žms<39+VˆLò p é‹êK¼ù¡S à;"ßWmßyo·¯€ð±ãKy¦¨« “½U×C¯ˆ+ ‡ “ û~Ÿ½ìݹŒý„˜˜2tc²üˆØ,]ÒÂaAøÍ¨/pìQèôzv¼8Sd/{¯€kÁØe $¤ŠÊ¶j(”ÆTM²¶tv2ê žüYLKí­w_*û{Ñô7Z_pé·Y¥ ÿåš,‰”–߀Ê^ïÖ]¯¾þwÓ¬r€ù¡„ãó‘`>`x”|gïÒyo·sÖÖ-žLýÀoëv¤e_0œ³Z\\RRëÔ|e¿®ý=‘ƒ0ø@ŽP©¼âÓÊ ßbÖj(4ŒÉ(Ÿœœ`ý@÷T ™ÆèþÏ™¯EP\0gU¤¬|9JÅ&à¡óÇëâw$žtºÃ–Ñ鈽KF“õJ:ç¢ÁÑ>Pq¡äbÝ€c²Ô"ÒBéjš,~îΛJè²&?5œ2Jp¦t àT6½ugŠ¢ÈþÀÕxs÷¬Fö/è:öÑ«gJ)zŽMH8ªh’l®xD£¿a}þCJ•ï‘Ý3çÆ5ƒ̱¶j9 1úÉã= Tù¾ä’¬ß ¸éö-æ­vÛ¡C‰½kÇ^j(t3o·ýKLKíj‹©*‹”–-..˜3¾^´r¥pòÇo¿]Î Í©•**Óžª¯Ì¯WÞóÝÕPh¶àLégæÊ+~sÿ·¡µ¾§áç}gŠ4I He‹gÔí5yºè6aì½bš+pœÑß°rµ{Ê7ÄnSK?Ða†‘œi’äUC‘kšЦÏ\¤øý×h’ä1-õ’ÌÜÇ߈ݦHeŠQ|kݯ½^¯’޳EÙ/kN¦^Ðÿg*à Çq\’µ·³W÷µ…¿×ìoHEqŽ1 &UT>éžRÐèäÕ31ksøÄÉg€pǧ¤¼Yãdæ>~#o·úŠ?š†¼½Xòx·º~ 3÷ñ£ ¢0ÖØŽñG“}f3I2ë …'€(í3Ê~÷¸ó·,?]tþé ‚ÃžÁTU¦ @8N:z=ešZ­HIiúþ†IV³¿!¨(^B© ´7¾Wú^sC\,s–/n—³bI‡xöqö¸ Qý:SpœÐù@]Ê·ZÉ;2M}ŸÉÒ‡ÙËÌÎ^úÞ•õqÿ/6LeŠ¢€®0eq­ jô/`ú€>bªµ,{ÙÂoˆ@¿:m]ÑúÆQ¦¨>è•ðBKéÙmô†Š€ @6¡ÜÍínº¡¥\鹂 BD †g“^y/¸¨ÀF© » \òNÂqCÁØ5 $Åø1“**Ú©¡° €lmÕ<ÃÐ<µZt9{@¯/¸Ü=õ„ÕèÕ)ÿ0”©jf¤¤4‹i•<Þmî¼×™ú¹æêSÆ ü+Q0J~¾ðU«k®z7©mëbZ*p óÇ×ýù§7^RLòxŸqç½þv¢DùÀGøÿì;ð [_ Ëcþà““'7Xd$÷2EyÖ|-ÆàU‘²ŠeHðgâà58fï’Ñd^Èçâ\48P_Pv=(ý¡ô<" VBaŠ`ªz‚iÚ*K³´ÏÞ¿ sÜcCirÒ˜ZúÔ4YÖ‹¤˜ªÉŠ?°[ çϘӸþ]F?t¹–:S¿DW7IÂQY“d £/0q¨n¶HÆàˆ¦¨»óòWÅ5´›kiÞl˜.LÐßœìóíWÁïx»ý?)½ün<'0,VôQ|þ›x§ãjÑåÐå[=9aLQ‘²ò ų?¬OâÚÑmÂØûgÊkTEè"†ßÜyù×ÇnSK?Ða†èJ¨¿mÉ«Iò¿šЦÏ\¨F¤já°`])w?fFì61| ÷1Õõ¡”j’T‚ÁízyZãùÀªÕ']ýúüÄ%'ßN(åùää^)={Vn¨Í„¹††I•cÜy¯7º¸ÁŒâs¶„Ÿx/8sjœ‚Ìq åíöX¤´ìâ‚ÙMп`þ{’Ç»x»½}æ¸Çbý ­¦'!‹ù:áÁ$ù)€þ„ÉOPüÁý„£‚ä©*vçå7-xv‚3%ƒ©ª,û<i`ïÁÇ ê÷ÿ | åZPJíè(¸\Ÿ5üÐõ Îf¯ÎAI6%Õ|@Né5 ~>°|qÇxöiqÅ?·BoÂ*Š]hT? ªJ|úÅ™¦}À4uIö²E3²—¾7°>û­ºòJ™)Š~{N©Y_Ä ªù B/È^¶p7>"¢ãdz¾B5šÆS¦(~@7¥ˆŸhø f²® xŽÉ¾åÙËÞ:pÉ[ɵ÷´r¥@^„^ËVI5Y6ûŠ[¾ý¢W<³°~ä{Ö¸ïy¦*w@/ýý[xŒPaEö²…嬸0ÍܧlõÝ l0M;B¡1³2Süþã:Ñq²5SÕdk«f¦~ ÷1-µ-RRzyQþ¬wyŒþsæð–fö2M°NLÕh¤¤´;Ó4Nòx7»óò/7û˜ŸN”p\Âúl=Z)~Ïެøên€L 8ÈçŸiáÈLã<èÑýù‰[ ó+„O”Œ-.xóýD ˆòï-ÍÒÎfû¾dåÏÕj:`’<†?¡˜æz­ øÀûLÓøpI©×¿{Ïãæk1þ?EJJ—¡ׄõ£ƒ‡Žœ8ãÆ™ãFß‘5驦àÇÏñsñ—Œ¸} ^µ…ŽJ(½ˆðB¦áÚM’LÕNø%¹Sû/6?>¾*¡Èšøä­DÇ{W€ˆµJ Œšèm¹"y¼ÅL’æåϪó¶®ÂG¯\ÎÙ¼ÝÖ®Vƒ$Æ$¦ifÿAo3ådŸÿSÕÑî¼üŸã€Þß°Ã\K‹æ·!Fœ(ûüûÕ@ðk*Š_¹doŒ]vu?¦» ߯;S®]Î c?@ Ÿ(YØw¸~ý ­\)”üô¿o§Ã¸A!Lª¨\JÆ»óòëUÙã…‰=´ˆ4[LO;ßü™TQ¹Æ5 gp}øÀE—+ÐÍ-"eåO¼ÙÀú‚'î±4KŸFxÞ ²Ï·¶j[Ñ5g©/è8SOΠ…Ã%¾²¡É ¸àÍÅJ ðOC?À‡#Ç–ÑþLúÜKÄÔÔ©„RÂ5¬øýÿrçMotåeÙ/¿tõí½’KNA(åy»½oJÏîkNáD0ùƒTéÉM¤~ xÆœ-á''›³Î§8æ˜nn}“àpt‚þ´ä¢é3–&*¹»gÎ}Oòx¶ ‚ÃÑÑ–Ñþ¦è¨Õ2ÖØŽq¢Øt|@VÆÀì_`µŒ¢| tpœ û|»w½<õ‚Æ¥9{è|ÀÙ€D­|,TŸÿ«¦Lj(lÖ0ˆÁ}‡‡RPz¹ù¢˜–Úäú*ŠÕ9(Í¡„ã¢õ½¯º.®ß|½¾à½Îñìã½Õ| ƒA0ê )~ý[B8îƒìe‹òs>^’UŸý ‡ “˜ªêJ’yBŒÏVBâô'Œê€¦*ÙÙË­!· ð¶»êê©çÔë T?tý@Ü|€pü#[‡jç‹™ª¾—½lÑ«9qºýrV¬«õš×ä €°ù?Ÿ÷Žg oé^7â¾\0í€m0A\ÎTuQöÒ…/ÖfH¾›Í¦L`ªzBÓÖ;B ‡Ä3€èlÜqÿ¶u#î{’©Ê#`ÌÔ¤s äJ¦±²—.|.{é‚ö {ªn5óQAøÅàÜ>ÝÀSìÎËoô…({ÙÂ>¹ÀTË=50ö?ÿž½Ã¸ääÎ$K³6í ýÀø5¢ËÕ €))”(>½la_0òú LUM>@%w«;oú¥ú/ªÍ6§ˆ– MxÊ©qß–uwÜû8¡ô €l–}¾– Z0øP“lŽŽ´HiYnÑô 5@çÖ¶mVºz÷äl -¹ôègŸEÿ–‘51÷ 1=íSœ&I¾ôœË:­ºòJ9ÉSzvOÕ"‘Ÿ™¦uàcŠz~ðÐá“@-> •W|˜þ„‡(ÔPh²‘„ÒQfòÓFò“çøÀ¹øKFÜ| RZ9T“ål*™„×Ëö˜¢5Y>ÆTõ'ÎæúÌ——¸ú‚¶C‡GÖy7AxRpØ3u>Äðó@¿Þ+²Ç»K  öÌ~«ÎÖ:üFÿCp¹fëM×ôGøFrÀ\Zca\Ô¢ƒ‚ì­ÚÏíΛþK\Ðý Û¾emÓúV@@(Ñ$oÕ~5øšZ­Ÿ»ú]¸-V?°ñÓå=µˆt;ït^-:S2˜ÆLý€)-{ß¿»žúþsæðᇿœ)9Æ4Ùçÿrô©/äÕ«oÏ—Ÿë©IÒ\Á™õ'”}þµý®½ášºýºeüWLOÏ@˜"¥JÏø¢é3>¨OâÚ‘51÷^ÁåœJ8>Ù@6««¶¹¯=;HOÏ1ù€ìõ]ÞÐäàžZ°Höx®Ò$© ŽKlíÏ ˜øÔ¥bZêTB §IrH …®tOÉO€?áÚ“©ôÿ‰³ZnÓù€­¯³Oïµåk×Õô'$¢0p¦øýcÝyÓ¦(š>cSøDÉ3æ›ælÉæ ̬/s‹à°w‚.:ýÝ=åõc™3Åî™sÈ^]? 8ì»ñ VËèŒñvû‰Nn†¦?•ÑB Ïéý .yÛ>^z„ ’ÇSäΛÞÄ|àéM‚3Åäí©gã¶! Tçþ¦çŠÏÿµq''öLA¹ËÍWjÓ÷7tÆøZ,—Qªû€É}¯§~àÃvgº =S´tÕ6B‰Y£Ö‰‚ãœÀ5N>ða¦)K™ª}½lñ”ú:¬ºòJY“ˆ 8(4áÔv€uÓ䨫è¥LV?Ì^¶øÉìe‹\õ>ˆ¦‚1ž»¾ £˜, à&˳—½gΊâéö3ø€^³ÈX—~QÎ%¼ÍÖ¢h×JZu¢~CŽ~úy 4òuJÏîdp –  ÉW·»éFÙçsW;ʤôÈìCEñLöx~¦LQÖ˜³*{=××7ytŸ}ÆÖ¸{¥µeû`Ú\€™vP-Að|»a7¼—³üýèŽâ÷ƒÙLÅbýÕð'dõF«Þâ]¯N;?ÞAÄÆÀ%ï8î!ÃPÓÅy5¸yÞm;?ŽnLU%kËv­ ýÀS¿‰ii} ³âËÜyÓ67fú¹^ÖŠÉÒîD´û³ÊÂ'Nö…î?°y׫Ó.¡ IòLc?à†$¬…ÃFœX7âž—Ç=`#È>_[˜8(~ÝLèþü¤í@¤¤tLQþŒ…‰ˆ™ã¿‹Z,³Åô4NöùöîzyJßè6~Üe–æÍ¾!¼&IþôœKÛ'˜ü ³˜žîÓÒrN|ûßš ’¢ü¿DÊÊ—0ü +©˜Ì4­3Ó4M*/ÈL~¦©º3kÒSâ8~aËè|§-£SÉ9>p.þ’× ßìÙÉ¡Ãû‡1U½PšA-–d`L iÁÐaPº:©MóÄ÷7ÌÌs#—”ô”àLé ½”¯öþÕw½Œ©r•¯HñùÞØ=kîòF  ë˜Ç®àιf Xì~„ã$M’ŒÞÕœÙß°ÆñdŸÿ“¤Qÿ×tý@§·--šGLCÙçÛ«‚_1Uý4ýâA;L>³bçÙü{/ÕïÎÙmW‹.WÄô/Ê+>ðí}¢^| gŠλmÓÿ‡Ý8³HiÙ:Bé8÷Ô×ëU_Ðë•ç{¨ižàL9ßxLöù×ô»vÈÕõàçýOLO»ºŸD RV>¶¸`Vƒ,2Ç=>Rl–þu3M©¢âgŸ{ïà³ðN3äÐ$©R ….ohr(ž1{‰â\¡…#†ÿ@Ú¶Œ5ÖÕ¸~ò„ˇãkÂqT“¤  JÔ-z×1õ³´hþ=Åd0&K•7º§¾þs ?ÏtÒ=Þ1‰ä»gÍÝ,•U<½@Dñ>0ÌàÊ+ÖåÏH8(žñ滒dz öΙ¹cbù€uŒ±£qtC“ÔLRÆÁ¸ ã’’Æðö¬Åë?dø»ó¦%t1R;º?ÿÌVßPælÖÔïÞ3¸Ú øE#_g¨€™Cðí½ž‚Ò+Ìÿÿ¤SüLŸ¥ï5ƒãÔ|Ønà’EqùX[µÛD(ÕÕT„t¦à8Ð >Бiê2ÂÑeÙKOÌY±ÄYŸý6­h²,3`7ù7ЈYâ‚ÁLÖ–g/{ÿÆ8nñ SUBÁX@@xNŒÜuÀ(n£î0`ã÷í+Zóñ’žgœ¹+8*z}ªVQ¦ª þÏmýßúÆ3 ëFܳ+#£Ûƒ{€©¢ìÆTí­ìeïO:-©Ú¾¹w´¾@UR¦(«a6HözÇ3@7Å_7âžO‰@‡ƒá+€iЋè¯#˳—-¾)vfeçfè*LJ¢IíZ¡×œÆ%%ÝïÌ(6Ò»îŽ{¦‚±‡ÀXôß €Ü}ûŠf/[Ü x§s°>ýŠìì3àƒŒ_#¦¥õ“<Þ‹ÝyÓân#·Ò}{ÝC@ÈCœÆkZ$R)+*y<ÝyÓ.5ë fÇ8g6Z?ðQN޶îŽ{>çíÖá¾4êË8%ºE/´p¤¨ÁžÙ)8 |âÄųƲ—-î.{«^Qü«¼Öˆõ' cÀˆ˜–65‘õ»ò¦(~cV÷’&¾Ý{"Š×{·ùZŒ?á¬U‘²²ÂÏÂÏ2Uëè+*b¥?þ|÷îYsÏüðKç㛀t.³wÉßø£‹s‘àˆ›„¼…©êÅ„ç3¢²Åqµètf0M3¯²šTQñϽgt<|à{Ááˆ@KÏz&ËcЦ¿Q/™_¯¼—ú¨¡ÐÁé<ßÌ!y<«“Z·¿¶¶õ©| «ËÅ´´‹¡ó TQñdQ~Ãág掹×Ò¬Yáy£¿¡g•ogñ™õ¶ŒŽ3Ä´´KM’*å*ï% MųÉUUƒÔPÈ€‰.×eö®gÇnS­˜À“**sOÉO`}ÁìÍ‘’Ò zŽçSókœ‚ÌܱÇ£3"UT®/ʣοßxc÷¬9 ¤òòÐK=:g掭öà’’ÌšˆÂã MRW0U ½¾Tõ¸d‰=|üðQCÖ[äΛ–P1cíèþü3[‡£«îO˜Ô†Vþ¾np´?Ðä|@ñV} èþ¡#o¤„çÿn¾hi–Þä|€wØ£|€ðüE”p4ê?Ðûªkâ2DËYþa»œÅÅZ\qÕfõ„çºP"ˆ©@Cê >ìÈ4í#&Ëe/ûà©K–$×g?Ã@”K¦Ðkñ£ep3¡Ú²ì¥ïÿ­^;Gý 5‘BUt¸õw }zÛ@€– ¤ {éâ/þòË”3í§ûÆBF.£š¬ì7^¶þï?ýâ™…ÂÛîÜB„¤‘[‚¨ï$ý—â¯\ž½ìƒ¿ŸnŸ²Õ?÷0ÚÓØ M3õ½U7Ô+sì † “Ö¸{ž.çgF’ /{éâ)Ù˧Çn/Wùn1Nƒ¦}O“ÚuüÜð¬µZãÕ§dd1’ï0`tq9@–e/]=.gKý÷MnùÏkL>0aÞ¿ªT^y‘{êôFùf/}¿=™À¼ª…‘òŠo˜ų̀/ØèΛz‰É Œ8€Ín`ÞêÙ¸ãîÃGV|ö˜6 `fƒÂÑÆR0IšeŽ ÐýùÉ»LE]øÄÉÑÅ3ÂrV,mÎde¼‘þ)+ë €Ê>ÿÞ]/çõjú>Ѝÿ@ê´DñÂaw”îÊ›:åðÿ}âTüÊEðˆùz‹O·ñOε´h~/S”ˆ­KV›ÂaÃê}ƒq¶°et.ð(¡”ñΔ‘ž?6Y³–9âö.çãçâ¯q­z¼ð‚UöV !w9¡ôw€àrþ`êBÇŽ]»{æì_kÌá¸ùÐWDšì­¨äP”_°1|âÄxúÁé|§Æ)Èš8áVÁáÈÉãýÝ=uzÂõ{fÏ[ y<%2sÇUópt¬±Fy~T¢“›Á$y,¡œ0P«åi ç¿÷žC®(=fð·;oj¿¦tvÒ6Áéì @¢V[+êÛµãz˜úÏ›29¨¡Yà ì½™¸ÊôœÓšžp6{t=H(Í¡„’6Æ÷rï«þ?Xþa»xöqöî» Q>Àw¥Dl `Ë™¦-Ï^öÁÃõé]þŠ¢  4™BêmŠtØy˜æ|/{Ùêµs5ˆú€ð¼_û€±GrÔR7€¼Ÿ½lÉ0Óää´3·b…HÁb̺‡j²å¾];úÄ3 ëî¸kSq@¾6~$ìÉv·Ü8+{Ùâ§Û§jûÖLÓxcQhÚo拲×÷íùú‘#ƒëFŒÌ0`cŠ/£K³—}ðÚÛ+~ßmˆúˆ?Öæ7Ç;€˜S²ŠIw(`š#¾š½ìƒ—.Yâ0·ãl¶ëŒ/#ŽnÝ¿0ü&®3ÌÕHIéEEù Ö´:”´vÓP0ö±èï–•ʽâß»O欖5:ðltçMý›Îªë (áè̆&Ì’‘ŸŽÞ  Èx„Ô‚iÚ,ÎjYõGò³¿ášµÛÓ.ʾ‹³X\\rr;gŸÞGÊ×nnÌ@Ž|ò©·ÅW~Í%Y8€ôÖ"‡œŠ?°ß=eÚh †?¡ô0 f(¦¥æ'‚l=ZY7â®ùÁC‡Ÿ:d^1UMQî3·‰þÝ—­^sÀÕ¯O[ÞfëÆ@“loY±B‰;ëi"°oߘª]îK˜,C®ªz~Ï›sÎÜ=sܘ;³&=ÝT|`B"{.ÎEB".>ÐgútWøäñÁ„£—€¡3µˆIŒ10Y h’t˜pÜ*Ûy]¿Øô裾ú³žý ' '':=™¦™| –Ñ2#Ð5‚ŠTQ¹S …¦í™=·‘|`ìãWñ)f}A-B0S?ËjSöVíÕ$éþ¢é¯ÇÇn/,¤ÿýoYZ´‰¨Ï Ñd¯w¯ }Mû¤xÆ¬Íæöm‡%®~}úK·òNç`C7¬CiUU¥òŠwý{ö©—~àöÂBºù?_¯Ž¿™® ’§r>´{æ›õê Þó¥z©’4?¦G"$÷W¿W×íOØ­Ëbzú¥SÕ€T^>¦(¿ aúqcî›5{“Š‚ Döù~©Ú¶ãª³ðN3Ìäš©”=ž¿549Ϙõ¾â÷_¬…#U 8—Ú»dÌ:í dMž4Ht9¿Ç9$UVfM/ˆ«û™¢ë˜ÇûYZ´ø™ŠB-tôØU»g¾¹ºÆ Ž{Ð5æR¥çáD%€Ý³foŸ8ñ¤¹åSRÞ­q t>`Ôx*×M½ úÎ](y*7èVöÎ5ù!¹Æß¶Æ''?šèäfhÁÐhèÒ”ŠâD ª8z„²ÏW´ëåWã2G‹7º?ûÌŽj>Ü‚z6oÕø|MÞ> ¦¾@ ì)¾Áàzð))ÿ×°ÃÖ?¨Õý| ¢x)%”Fù@ßk®‹ß N>àpÁv|„œG©Å’LQ"ñó|Ì4öÙK?¸¿¾OÞ BÓÀNcæÒ»!õúÓVBÚ·o÷¬œ+Òâ9T•P¨: ¢¿~€Ò1)7~”ͤÐ9Ë—žuI?håJÁB¨¢š,ï3Þ‘eëÿ¾‹«¾ pø:Œý¡Ï!iÎ4mNöÒî9¤(ýåçž0D‘Z$²ß䓽޸õëFŒ(Ï8/s4{ϱó ä‘vÃnš™½l™«ööŠß?ÜüšÂÏ”³9>3)Êt5ý]±*Œçê’ìeKjÌ*g³ †¾P‘Rº÷ü\ç'¬ÓÓûC÷'Ìn ÈY±¢9“B¯‚Ð~Æ/© ùGVü{IêúrVë:ƒüáΛ’£kýeyº9ÀØJ¸†Dá°a¥DLzL[lœ °ÇÚ »éu5yÇTߨþ@íþ†ÏŠ:))y¬(¿à½Æ ²—.ùy@ª 'EÊÊ»A¯/سëåW»1ë-~©ª €.×ôDðuwŒ\Бš$í’*=a؆iáp´¾ ÊÊ[s0u@ÿÖ¼Ívc4)¹ |àè¿ÿ¨Ú±ãrBéE¢Ë©¢bfñëoœ¹;D渱MżçøÀ¹øKF\k€óß{Ïå/vß@(½ @gC² ¦(A¦±cLU~rtïùù<àIèºj…§Œú NSW ƩҳC …^ß=sV#ýÆ>ñ/>%eŽaª^c¿Xÿ*¢YCˆjU‘½Þ}Œ±‡ÝyS~Škz}AÇùÖ6­ïEõåZ5ùµZ?ï?ø†?Ì5äí……tË·ßô—=ž[y§ózÁá賟>vl~àÀ¡'ëÍ6}þÙ÷bzÚ Œ!RVöy¤(¿~fyY'v´…bzz¶‘ƒDJËV¸éæúøfþ$¦ëõš$ù"%¥ížõfýÆÞ-6KŸcø0©¢ò'÷”©ÿŒÝ¦ÆCª6C®ŸgiÖìFÐÂá ©¼ò¢Ý3g­ªÊšQ^X¸%¥G÷OÏßAEÑÊ%%e¤ž? EÙêßL÷öØú‚Iƒ,éé3P¦ª!ż¤(?¿Ñ·èë7T8ûôþ–KJº›pÏ%'pö깺¼pÝà> ûEèõS¦Ø3{îöÐÑcf…?Ç9o™¯Qè6aüpC?@d¯wCÑôü%‰JnÆÞyóIÏŽŒn㟺5:Âqã ÿBª„îOtr3´`ðQèõ”Z,¹€ÉN+ HÏ.wÞ”¦åÏ?»Cp82È„òÍ©gó¦!0ì]þý€Î!xèà útóÏà\R’©Q Ô"^N ¥1ý ûÄÉ–·ËY¾<.>ÐâŠ+·JõÅ.Cç(Ð$)_Ã噦üÓ”O²—}xßÙž˜Ç†îOhøX,ÊŒçÆ„ãR_`ºõj7ìæ×rV¬HªßÞz*¦( PÕ@@…xë F`ªú43Å‹W2Yzwà’%mζ_Ίá¨h¼ Õd©``š&nýßÿâÒ¬y÷/„î°Ï˜—LB±,gù²Ëδo×®¾B˜,ï£ÐX¡9-reyüõÇa*{ úC B’™¦MË^ºä¶Óm/W–ß Ã””þHÅfÍW˜|€s8nwúLŒôYñÉ8s¡_é8’›½ìüK¿ýÖ»-Ÿ’åÎ^½MýÀ3¿‹.g?èÍ•º§LÙÜ@öÒ%ÿ!ÏB_; [™ªM\?rdY¯¼WúSQ\€Jïî¼×² ý€T`,\8PÒ(>°îŽ‘ÿ%œð +ÑÂúJÞÏ^¶¬§ σaAÍ$©¶?á³E‚Ãq@))y¤(ÿõw4#rV¬Hcrd€¾ E"b¤¬¼'¢|à•, –„BƒA—³ÑúÂaÃ*¤ Ï#ùŒ©*'Uz2¦**“•{Ííbü ~Ž”•½˜ý ï?  î˜ròßÓ"a ôõÆ\÷”)kϸS渱#³&MJ4™6ðB»a·ÌMäqÏŹHHĵè?o^jèÐÁÁLUÿ +E+!Z$âgšv û>9#ãó„×dM~æÂqc‡£jÔœzÿÏ65*Ø=«î¶tuÔŒ¹‚w¦¼cŠžSÑ­/` T…>ÝNöùö1U{À—×ÿŽó--[Þ#LPe¯w·|ÊÙìß´¸âŠ?L+Ù -²î+•—Ýbð̘ck‘’’ùþ={ë¯Øôùg?ˆééƒÌY•<žµPµGÝS§ÖËŸ°ûóÏgAS Ng´·ìõ®êwýàœ•@ÖħÖáLQREåè¢üü=Âï6~üý‚Ë9+êOèñüèÛ¹ëŸgÔdæ>ù¦˜ž~t8áQÁ¿549åç/½Ujápˆ.וö.çA?0iÒ¥bZêJèõ!%¼`׫¯ºãÌyÚè:vl_Kófk¨(ZÁ˜>~ì_Å3fý¶C‡"ð a<Í’**LTrØ=s橬ìIý-žs¤ÔôptëfÖ0Éã),ÊÏo™oÇð.™¹¹Õ|Í5N#„6`R´ª“RQxHÿ9slj0PBDÉãÙéÎ{-®æëñF÷çŸÛ)8YLU%04£ýûoÑÛÃháðçM™¯÷3@wo Ÿ81˜ì*—WÞîH¸v¤vðŽ”è›¤¢p)%”ý [š7‹Œ5„8ûöÝå„t¥ÔbIt>P» «Žä™¦®`šúIö²eõ¶”+6LÕ$©†~Àà\Cù°g²—-]_HBtÇMã(T5èÈ=¾ú‚ò€ ô»Ý»Û »%ïL} ¢3WÓŸ°‚j²¼ÇxG‚o×®øê FŒXM8þa¦ˆá*&EfŸÍÁ·sg/³¾Œ¦Yk~$È^Oü|à¶ÛÜ„r÷dŸ1½ç+~ß‚3‘©¢<Š˜Æ¾§ImÚüL“jµÞï pøðãLUcô LÒ‰pÜ¢œ?>Å*’w:‡Âø«sõë÷5Ý’›[%y½Û@t¥feMž—ŒÃŒõ#Gú¬­ZØ ƒ…4¦(og/[f.lÐóå—{ G7}¶«6¯92hzN3&…ƒ¦ÎiÈÁYñÉ‹Ñ[X–Ÿ½tém F tÍaZäÂçöꟈD‹””<\”Ÿß(ý@ÎòåC˜¦M ‘òŠZ8|'Àˆ®Y«Å˜¬ÜoÔšÁå|£Ñ|`øð/ ¥ãÀ4?SUŽÉ²þËǘÂäêú‚êþ†S¦ü)+OÿDæÂ ‡/$¼ð`¤´ÔÅTőҲ™î)S¢2ßžòß~ûÆÙ«×>¦ªS7?ñÄáÆŽ|òI… )„ã¯RƒÏû<Û×ä\œ‹ÿïñÿÎI¶Ã‘úHIEND®B`‚Carla-2.4.2/resources/bitmaps/dial_13d.png000066400000000000000000000011231420416754300203030ustar00rootroot00000000000000‰PNG  IHDR Ùs² pHYs  šœIDATHÇí”?KQGÏ{f £«²³÷9,6AYØÆRò‚X$YëTéR-ì1`‘Æ& `a\Rø%D›ÂB«ÿd-ÆÝ¹)FèfI_3Üûæœ÷Þ0\CûX²Uä‰fÀü2ßÍîá¢v/šû-oÒ¾æ%Ù;ís>D> ðGšoMù¦<¦ óøº¡Þ|;ü« ÿܼ§h˜M>FŸNãþÈPôÔ<Óô?õÕQ­íµ¥*‘¨ ó Ã}íÖ‡ûò .•HªíðŠ¨¨¸âJr **•» eQQÙñy þ ìˆŠºòm¼ ç¢nßË=„x9·/*ç®ðçøë¢r™ŸJ‚ä§äRTÖ¯÷—¦¨[JЏ%Qiºq° ótÑh-¦´iÐ¥óVꢲšUQ©c­7¦–V`j€ïMX[àSZALØ¢5cÀIp––Î83fé~¤ÞŸ+ª×jhþ“  š±œ‰þÀ{ɧVëÀP¶?-íg´ní6`º§Ó º§1`·m°§D³iÑ,hìY0`æFÒà£f.&-˜”ž°šFVéAÍÊU)k¢.ì<‹nÇ•\(*k7œ”B6 ^ÈÆ%çÝvÎH$*ËI²,*‘›‰+?‚-Sá‚ÝD7ØåÂT‚­4ßì:æ7|£¹û—2¨IEND®B`‚Carla-2.4.2/resources/bitmaps/kbd_down-blue.png000066400000000000000000000130611420416754300214430ustar00rootroot00000000000000‰PNG  IHDR¨:$åübKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEâ #"/gž¾IDATxÚíÏÇuÇ¿ïUUwÏîìîì.×$%‘e[d‹€ ["XSrÉ!ñƒ>†t1 SþN.¹æ‡É198‡œ ±! ˆ ¦@°£Ø¤"["wµ?æWw½ªª»º§gv¸ÓI jæÀ]ìÌ|_õ§~½÷êu“Ö¯õëWô¥Ã¾þ-<ñÜV3*G°-pÿî›xóoþ@}â@›î»JÄþ‹( À€œøYÍôØü¿²G ì¾QÚ=‡OÇí|áëßÂÕç¾ò¶äÿKÌGlwßzoüu÷öÎã¯à‹ßx 7?û¶7{0ZC)A3UFä…Å`°­~ðWßvÜx—>ñY˜Í> @+á;È Ÿ`zz‚÷ßþ!pvÁæ'?ÿ2öw¶ u†ñí´lïÀh…ï¯hïÎ7^ó/¼Œƒím°â惵@!EaQØ››/C{»çñ íìŠËÇ?÷öÛH´ªñ|ò¼è¬î|ã5<ûù—±?؆V\ã^Ó<Ç`kZuÓŸ¾ý›øØþ.ttm}<·Øö<5<}ëövúØìe0J‰Á `R®ÁÑ+M FÏ߯—qùÙ[ØØÞÅîÁ.667ݬ °[àìôi ž½…÷~ô€÷píÖm\¹´‹~/+m0ù‹ðuÖ £[·ý_.nïúó·qu[Y%ˆEQ¬XäEf¹uß_‚ˆ@Ý —ë·îàÊÞ.6ûTƒàStfï6®ìa#K¡˜jü±ŒÖݺÓI?\»r­Ô,XQÐÊâòÞ6ò[wÜÕ&E/1HE­ˆ¬DU£ `Lèä”ÙÄÞÁýí-ܼ~ZGÒ_ažOñÓÿúoãá@˜ Y‚455}vó¯t.D,Œ^Ýž16³ ™1u}"±«ÜàTZ¡( h“bY>ÁÆêíL‘e)R´ò/ùtÔFgØÈRd©iç@DÁŠ ñ®ìâÆ“ûlõ‡Ç'xçÞøàá ÎΆ(@å6 ´‚Q‰65}ò+Rp¾rm¡ZÙžÖ £&15}ñ?­ ›ƒ™a­ÅDow>E^tÂEkc4cZù>EÑ‘=£(FªM+ÿÀ'WE䊭Ö‰ÑçòÏw·u°O V ÅÌ3"7–`vŸu/2÷ß?ÆõOb\þãç:ò (@Vd î¿ 2€»HM¥)ÒòîVä‰XT¹Í]Üžbwm¬¸¦æ1YçÀ‹3ØûHËða­:ᢈ¡ˆ µò|\;º°G`­ÀÌ­üÅEÜI?(ï ,â¯=w]F‰"åO·µ’ûµæ”¸·Kß4 4,1À¤ ”V@gl^ì?£´ûŽŸ9‚j}â¨áÍðu{VÊK«ëûþÐrõ²YËðéŠ °ªM4‡OGö,¢ëoãø”rý°ÿ06t¼ÔŠË(ÐQ0Gó’¥Ì.ÅÀSL¢m*Ç^Ч˜‚Öþ³ UCEfõ¥`W±‚½X»¦/UC9 ñY¡‚ÚiÕ—íÅ‹E+ÿˆE7ý° ÿШÒŽ·Xç.ˆøÕ>’¬:Ï›P R0¹Ø7[Ê™dr!ÀPn\¤W4AGÿÚh¦6;b{爋•†>Õ ‰;£¡çò±Ýp±ÑàlãøHGö¤ ×eB´q¬nO–äï ÎnñˆW ©B}†ƒ|jA)äDPÆ€´©5TrBN乊ÝwAåýh¹ÿ~ù™UìɬKáþV»ÚÚÔnÝâçð±q9—?Õƒ‹•퉔}ÚÊß·ÆÖ\­Uú}9þµ-Þ»4°âb- K ³8Db[¶­6.Z#ygZÈ;lüg"?Eª™*Mg3ø!Ííg{¥´Ôô]3L<[vV¼¥= ŸUÛì[`¾¾H}wYÕ^³Zø ^(VìY‚à^ù Rÿ2ÄVËomdK5HƒÌÐ 9”Ϥ©èÓÊ2°öÎrÆJ ü¦/¿½Š=ë¶_˃·RMÛÜÒ–à#‘ó¿J;Ëheÿø¡{Ñ„lç/¥O.õƒ,Ñ*ñàù,U‡W­N¡Ëµ€”±ö3‰«3]±.½Ì¤4ľj¨Ì€!©_€'Ä öâåB—bcw¢e…Z†'Ú*\¢À¡ɧ+{‰K øta¯kÿ0itÓ €(ç“Ø˜Cs;`U (…•¯]q¿ü|c%ˆõÑ8j«ƒ¹¸½xe”Û‚*}#h ‚%øtÉEÊ“£ù|lœöY…KÄ¢mï´ÝôC¹…/àrš3ARØX$ÊS‘ßÖŽÁ|R7œÁ*Æä’Û¬ËéhAåûàêlYPÍ’XŸ)^¨Þñ+Ø‹ƒ¦>¤±bËü i.Ÿ®¸Xø½àS’Và­Zóø£é¬ØË𯯠5 J+ÔôÛâ4‘[º}â¶`†U ò U¸å=$j™#0³ÑqP90¥æböÄ;’³úm¹ÇY×ã<>]q‘Ø/láokF:á"‘E|:³÷üu9k¥‡|‡J4òI⬿o(È Z(´‹Ü\}®ú‡˜VcÀH«G— 0µ×¯¥È;.L(|Á–UÆnìšâß¡J7HËEÏ$j]±Š½ÖãÂjtÅ‘$¶—á#]q‰Z6—öb=ZÀ'^áVí‡eø(~6Ï& ç6»ŠjMÕ¨¹%ÜÚÐ~U›nyŸ&$®3 úþ|oÞÙðEí…னBHËñjóP|Ÿ¶{%.ÐÎ2Å4 Ÿ•ì…÷Ã<‡Oí€få~ sù‡@U׿–âêÁþgÔ(rù¹¶×´pÎûüµâ*æ%=˜¦~9kɽau{@COÂÂ'ŒýI‘´%ÆçótÃ¥dC˜Ë¿9éV±gkƒt–ɇ;ꊎkñ¯oñRføËŠù³Ñlƒ’„¿ [¹…NÝ[¹ljfȘ}Š;¨YE³‚=Ô´J?^ šUTåQì2|¨.s^ȧè\œK}‘ ¹|m¹¨½ÀùþÁ©Òs–5?ˆÈ'o©œ]µ­*=ÈóTÀdêïM) ¹«§vS£~˜oËôã-A±¢½x`Åm ‡fë –äÓ%‰øð>ÝÙóm'jçïù\-+؋݉EüÃàÕqU‰¿ë[Û¸iË]Pœ¢° XäyžL»7'Sؼy‹÷<ÍÓ¯à´m™µ'Dn¾SSŸÜJÉìªp¨:¥‘FÕÍ">¶+.ÁíáÅ|¤K{~—jçïø4]­•ú–áï¸ëÍ‹Pô7ò@Êm™›Õ¦®ªXŠy>}Ä–O@EŠ«“GS¿,‚$?»üÀZÕ^ØVlC¿–÷ [/ðaçðAG\l3Û°€`u{BTN®6þµ“$¢NúÝVÇcóù{V×}K.—|)0ªop£ìËZl¥ £ÑûÛ}ôzI梹ÉHc8e|ðpŒ­TáèÈÖÀˆ÷Û¤‘ꆿR­z·®VäfâFH¢Êqhf+ÎãÓ¬%½p;)ÚÂ[øStî >&ÍáSÏA­ÖË𑇮×6KÕÏÒŒ‚Àè)Âh<Á¿¼uèõA‰Ï‡M¦Hó3<‘=E8²ÅÌ='M}™qü9˜†=Ú覲‡á nnq‹=šÙ«šÔ¨["ÿ®Yu³˜O;—áx‚~ë¨Áe^;ëyIšËgY{L@1^`«Å¢àøµõã\Ÿ€ÇÝíüÃn¥Ûbñ'nC¥zš¦\Ñl† (r|ðð‰î2ÙŒŸb<œàÁpUä`¸ «:Û56ÖoÚr𢕢ÅÞd:Fª*{‹Ïfí†>Äû@Dç>¤j!nçòàá1Ò.sÛYníüK>Kڛ䉷÷ÁÃ3è{QTÝ¿âÓnïðè)§­××j/ÖYÀ¿v’dQùOÕ˜¹õ9*ø°‚áp Å›=,ùç÷°`œOQ`ŠÉp ·5Ô¢jjI¡ÌäçÛ›LÆØè™Ò 0·Ù£ÊÇi.ШÌ,7*êÏåC­\4§­\æµSˆÊm°¿´¥ûØO'ØL¸´7œ±ç¢#YÀßñ‰°•½É”°½ŸÎ½¾aÛõ-ÁÞçÖ͘ÔÛûß-üŸ°ÂžgïádŒþFX‚M5~ÙÒ!ÍÔÊ_"ÿ“ëöf˜BÎõµÛseùs3a[¶„â´•2Wæ%ÆwñîßÀ %ìmh 2Ænª0HƒÄý.Ó)¶3…¾¼{÷M`|7:â¢v}Š|EŽÜ³{˜N1H; c`ƒŒÛíùbˆýÒ§‹z€ZŠ<ÏáS+óíÜIAOµr íž7¸ØóùS£Nv=™L°›*l§ŒAOcÛ´õÏç_þŒ¶~ootzäyioÇ÷Ãb{Kò·øZoP” ÷d á(¢½¬‡þ3ŸÁÉOþ¸÷}üðïÏ€dîþèPn Ÿâþdœ‡?`Ñæ3ȲPTÍœN!¤ðéH¡×ËÚ»÷Ou{h±×ëõ|éWC߆mGfŽg–Ð|ˆi†Ë¿~w1—¶v&Æ€ÏåÚOŠg¸Ì³wo½,Ë@Lóù{>ÄŒ4MköÞ;uöüõmlöªb¿ªêzâ·ÚûUm[©–`&Æþ¥^øÚ«øÇ¿ø6Š_þ'pø:pˆ¥^êànù›ØÛÙ†RjF?TÉ„²/VŒ½½^üÊ+øÞwþøöžÆ‹_}û— Å¥ÏU–­1ÜýÚ!X¦fÓL‹øR«q¹t ·ï÷1Øñ‡œÃ?ðaÅØßßÅ‹_}ßûË rùÊ+¸tiàoÕhçø°ÒØÝíãö—¿‰ï}çO¿ÿÎ#Û{ák¯âÊå·ÅŸËõýâì]ÿs|øá©ÛZôAìrQÇÎ` O>qi–ú‡Õõçø¨‘n©t˜ÇG… =<ÿ¥ßÀîÍOáèÔY^»˜Ïoýáßb³ßÇÁ¥]ôz)Xë¹üÿÚ(dYŠÏ|ñ%ì=ý,ŽO\»ð|„í>ž¼zišÀ=—ࣕB–$øµÏ½ˆÁS†Ó“Ósù‡Á.–0ØÝÁëWÑÛè¹ú\þÔ6@÷Š *—*Ó@’°"ññ˜L&GÈ'S…uÅRÔø67{¸z°‡¬—B)u.ÿÐþ$5 &Ü|úÆ£ ÎNO1O`ó¼Æ?ðQF#I z½z›=(­¡=—Eü“¦žºz€Ñh÷ß}¿Ô¿råÀ?7•AZ•‚2 Ú8{&1‘{t>ÿ™‚媾/¾ÿU±i˜~ùÐZC+41ØÚìAr- Ø| [X φÈs—ûê÷7°Õï¡×ë5»â}Ýùv3˜ÓZ6²ó!¦¾8a«ßÇÞîv¤o<(»ëúb£` QIô(|´1€$‰AsÓÚ…|k/òÒüCûÑ€b$Jc3K[õòY’à£5ƒ)A‘èei©¿?سOµq³ÐPfrmÕ—ÊœÕ#]iùî¬Ç»Ö¼õѱ~$Ey> •°f@‘+Ø ‘‚(¡X ‹+Nµ… ˜N0ʧ óˆkýµþ£èsÛ© k®û@¡€¢\¦›ïù3&æÚlÀœS¡µþã§ŽõÑ8h ,ÉL4",‰OÚèÑþ«¥µþZY}Æúµ~ý ¿xÎJíÏü©áùJù°SŠ×D¥,ÀoÄU®D–üû$Í÷š%ÆíGÙkýÇWë×hãYèÔR˜Wž‚4ŸÅ'‘´Ýù·Ö_ë_\Ÿ›Ù«räKõ;ÇÏ#ñ?Y¬û{ˆ»Â옓[ë?îúèXß7^þã!Ìþ9Ô$Õù.ÃÝÉÇ~¹†øå:ž僵i²µþã­o;Ö·¾ö£Í½­ÏŠnÒ÷Ÿšyx¼€Ð,.ï>¯õ?}êXŸÚ£x÷A›ûGÕ JǶv«©ÿjј ÏmékÌË­õW}éX¿qÛq]M§9ò¢©Â0Äˬª Êç>Y °°ÖF¾ŽÌª­õg}t¬_[A› ý¬°RFf$¶jP™Ó’™ï¶†ykýÇW_:Ö÷ƒ]Àd2ÅÇŸz½¬|4IUòDejÙ¬ð?¶‰@¬4ŸÍ!֖ʧi†ŸßÿÖú ýO>}Íß’Þ>lŽ·ß¹çè‡Ç'xë'ï ÍTOóhy&(µå·¢èKªR‚ñh‚O°ÖÿhèÿøíŸVSì@ŸÄéj8:b8Á¶º­8.Û”-Áç¯P[Þƒs–öñd‚£Ó!Öú ý³³p{w7úAWÀñÑC Ç—‘[=C³z䟭 ÿÆ­RPôŸ0N§S¹[2éÛ™‹¨ësÍ7ùèéÿoóïJÿl4ª=dc>!Ïz|ôÐ Ð_Ü}'7®ƒ•®?ÉñæW‘Ô£E÷¤“¿¸û:Öú ýÃ›Ï It4(iÎcÊgã¶ÚQ¨o2qúåÓNú/þ’k· áÿº¡G«`A´4“Í1ùÙ¿áäõï–ï­õ×úÑ'‚õkýú}ý¨"ßM -¼YIEND®B`‚Carla-2.4.2/resources/bitmaps/kbd_down-green.png000066400000000000000000000126651420416754300216250ustar00rootroot00000000000000‰PNG  IHDR¨:$åübKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEâ $1äå°‡BIDATxÚí[s]EvÇÿ«»÷>Ý-Ù`É’/Ø€Ç6ŠP©¼¤RS•ª¤*03|£yËWÈ ÉK2O^&×bƦ006`ÀƲd]Îew¯<ôî½»÷圃Ξʔ9§J²,­µú×½V¯^Ý»E³×ìõ'úR°rr ¯¾yŸIûƒò¨e°¾üÝ×øåÛÿ…í»;±Ö6[ Ùß•¹ °ø;}˜û=ø:×/žI²ò=müô½Œõ‹OÒý -ÌÄhà‹ß}_¾ýŸØ¾»3–knœËFjgÀß}ùGä² LŸÏ£)}¶ßGóWðú[¯âì•-Ìw桤‚”D!ˆÈ¢aÀ°ÁÒâ"¤’øçŸý+p,Ââ³kX¿´‰hN"€$@"UdR#‡Àp?Á—swððƒ¯Cüù[¯âékg±4¿)…m„Pßbcú^ÁÓ×Îaeñˆ(ÔÇ f†1Zkh­Ñ½Ö…Rÿô³ËGÅ……Fì|ý­WñÔ §±¼°%UÀßÙ«ÆÒBs\.\;‹•ùcRü¾$I°°°ñ˜Vß³vÇ—ŽC8}†aØ@ËaÞêSpúÒ),Í/£ÛêX(‚ H@ÈF7¤ÿD*Âá%ë t²ƒSO£³ÔÁÊÒ"æºJOÚ?8ĶÚÅ©‹§±³½ ~0ÄÖ¥u¬.G·Õµ*ÈúPªÀ%ú—úè[[>Žn{.Мjb†a†a 6 m4„”8}É`>Ì‘Tè5bçV—×Ðç E¿ãÜêk¦N,Ÿ@»Õ‘ø;>ÌRJ hßæ¥uœ\]‡’2ä/,i$Œ0X]^ÃðÒÐÐ(VhÅ-ÄQ !%$‰¬@°–ƒÅÊÒ&ȎıÅ%ÌÏwqêø:”’¡I¢ñù½/ALøª7Úö‡Q¬ÐŽ[ˆã¨ ßú00 Ë©õ©X¡Óê Žã@>³ †Ñš „–hÅ:kç$|šâ¢b…VÔFG5ü]Œc¨¦ôÅm´âV%ÇG³nD_Kt;í‘ü6,ÅÊP¥””P*‚”"ºDòÃ\MERÚCФ!"ùnÇ—V±±r‹ÝÀîÁ#|±}÷â ×ƒ& Jgs%%T¤EQ ŸÈN¹Î“#“@I5µ>)%”RˆTÈw¹# „10d0Ôöý“òQ&iŽKª«Š¿ã£TSý  "¥¢JþŽÒÆúAAÊh,ÍÆrw®IB@È4¯¶ ¸t-{Ÿ¶Ñ°‰±Œ÷ö¾ÁÆ“O`ÈC|öðÀnú~€ QáÞÞ7剸Ó!D(ùTæÔžéõ‘ I©¬\¾ÍA6näïG¹&á#dSvZBÖðw|RGiBŸt¶Wðw|šl9ÇÁŸµm¯ W‰ †Ì¾rpìxw¢æVoFh@2„‚]™‰ÜPÖ$§ï· vúL Ÿ=öÃd›Ðç$çò?NµqEc4÷ÿéíô5•ùç|L¦qZ.&ý\ÍŸ~M´^ÛÆñW¾íNé/…¡Øa1ž7X)𛇍<ð¸XSb¿/‘yaq°¸ïd«HPÌú|—ðå“g…ñ>»÷NÊÇÿ´\Œ§¯È?Ï@½á;u?øú¨–7¢ÏxA©ž¿û¬B¯õ;QxFQ¾²óëqÖ{Tš“(R…rìÏHÙ÷f^–u… ä#ð_x5¾âà 3 MC1ªâÓ ®ÐVÅÇ Óês-ªâ¶¯ }˜ˆ–û'@qÂãiEÀŸþDj¬ i¨¨ÂP²?Т8`Âê¹:W8ÄQõeq8O©5&°Æ¦ùñ|šâ‚¬«ªù#`2½¾À*øSÖ[& Ó´iþ»ZŽ ÀƒÈßá¡0'Èò ¡C‚,òÐcˆÒ%}¯s:&S:ƒ3tZ}aÎë;[1…)ÇÐIø˜†¸Ùw%º´.L¦&•Å4úŒç “ð/ P—¼ áM¿Ånv†º\’¡Eì-Å#ìå"¨0'—O$ߟ¦×—{e!þ”¦oS;@ëù4ÉÅdŽPæŸç áVg-£Z>h@¼5Ì(þ¦z€úP„ÓoÖ1á”ëŒ% 0it…^SþsU¹©ž9>¸÷L£Škßp› S{]­ãà s)¥?>ì¦Ê)õ…a Š 5Ò& ^Íá-wR.–Z@œN©¡2÷šd¸òœ‘'¼Å)>JCÖ3…>öàp©ÓQÈêIµ|ˆáb@˜JUñ±ÎÀ pálVñÏø(¦ÕW Jõü+§x*•ªs‘ArNa¨7BƒƒU¾š3iÍÌ…z"”â Ñ*žÞ"a}~}­§®¼S7ÅWói† WÎ-e>A]r*}Ŷ¢’iXߤüÃJÆæjd­`JwÈMïi×ç¹”{ #ó\ÄH²+;çIz’q¡'Aiº0%L¡iîcó6¯3ÙJÙ¶¿œ L§9.éBŽL%¿Í õC–žTðw|à»äTý§ˆ£ù›|€"˩Ž1@PæÈ§ÏÏDn¬†ƒR©&4(7R¦nb€Â”™²é,EBž+>²¾´ñi;³ce®Š&&ˆWãø”¢ó‘íÌg©*þU«øiôгUò1 éók¼£øsê”*[YJ9åëgïØ—W•©s¤bȆz¡ÒC”þnú^/9:Õ;V–EOæÂÛú Ƕsù®… M)'ä“E³)í„·™PÍ?¬JL«/Û¼ ®áŸÆTj¦òëhþ6 x{ñY„ ´˜Dážp!òòHÃ@ÛŃt!\dQ ðtE¥¡|’¡RçÈú¬²|À°›ž×&Ø‹ˇРÊÓ‰JþùÙîòë(\0Ž¿å¤Sèsv.ïÅûp¬¹N˜=†EžW·2áımˆfƒdÔ#yDeù…}ç܈éôQ:‚ìábO$[ˆ†ÓHÂùÂ,,3áÓ—  ^ÅßñÉtNÉ%íSA5ü™ëÅ‘úÝ?Ö7‚?•ÊL&Ë€²óûDƒ³"RØÞƒ6d ¤†@áæ#”Ÿ*Ë'߇Ùûù”ú¼£|7SVC1Ùâ,\3áÓ¯fQÉß?ÀÜH?¸EX ÿ¼´DUÞt¤~ÈRÅ‘ü e&ÿd üü¡¢óHáN­X' hm@Ú€‡©* hüPjú;.¢UɇÿT qžëL©H£D…|;µæÆ„<&ãCh†‹:GñiJ  šë¯&ú!wŒQü9\Åg» ©Qê¹ä%WäòO¿=Y`!h­„!i¨OZ³[aÀß@È’ç‚ü0ªè #êËú³Ø!næ`¥ÞÂ'àcO¤7Ã%fTˇD3ý€,PP%ÿœO!ñ¢‚Ô¤ŽAÉOZCÐYÄôòO¢Brflˆ6Ú€‡:;Õ¢‡k b‘7ˆ 9hA¾¿Ûì¦øÂvБô9À‚DA¾÷t§×þtöÂÄ||gšŠK!žÕòñó¸)¹¤ýPÍ?åCÍ´/w„qüÙ_Åsþ, …^…Š)Þ¡a¶¡»#çÐ °:·„¶Œ ˜2AO ðí`9‡]³æÂà¤QÉ4‡SË4úP\TPVX·mâ¼Ý^9|R>MqÉ#(Fò!JœªPÎñ+øø†LÕ¾Iù§›B*Œf…¼„ÂŽ%¿÷òª2ZÔB8À¯¾ú5¨k £Ü“T¯…5<‰µ³TJ#¦øqúD—!"Î=÷@à¤Ø,ëó‚1`#=@K„›‹Ñ¾žÕØÙöñîW¿‚èrÀ¥ÎÎ`°S=*F´}B2äú¼è\Áßñ¡`1öÃwj_±ž[Ç?µAU•üÕcXJ—'¸/ ƃ½‡Pm‘$¬5"!ôClI”‡|ÏТ|«Ííõ|…>3H SÏ Á`û°BŸËx)”ŸV¡³ˆ42¨âãÏžÛ{;ˆÚQ‰Ë8;ëø‹Œ×74 ¢$†1ÀƒÃmPúüü³ŠƧ:};»ˆâêöUé êè£ø§ïQÅz[¾¨¨ïeyJn¨`‰þ Ú˜ƒ`éÜ;“GÐ #ô!X¶FP–ïèrðíZ}{ƒ´£9ï¢B?Ñ%}~Gøò)Ë5Éc€ z0 Ÿ:.Q\Í¥ÎÎ@wÿ¬êEìúƒ´E·^_˜P—øg|¨º4õ±OÞ¾ŒãþîKU.ž’mÂÂqŸ1<Bµ–å Ân¯g†>>‚ZĽdƒƒ!ÐçRy#ŸYÇ¥òM•¾ÝÁ:Æ ÄŠªõùÓ;å·gP–QÁÂ’Èh>äO]©QGaE.A—¸8;¿~Úé}ªä¯¢âÖ}»è´æ`ˆ$p?yXÁ…ªA*÷ƒhÙmÎu+ÛW­Ï¥/£ù;Ö¢ªf ÿ®$oåî¾fâv„ä£Üyï6æi‹j óbsrób1ûÚ y¹€.wðùû·‘|t€¸e¦å‡%ü$O>3„Õ%ÐóVw>”åS°* #'jjÚU|*¹` r±’‹³óp¯ÚéNwÕð§B7NŸæäæÄÔ"æ¸[âr¯áƒr?ôöûà™¾9‘~ŒÒ‡Éø»6ªªèBþ4 GB t:mœ¹º‰ÿý÷ßãÁ»_ãÞ;‹jqþ ìÃû&Þïß‚Ùe$¿íÁÜâÌ+çÐnµ³ÛÍÂÅWžcB´Û‘únÊ[>îSI_§Ó±ú(”Ïî8‡á'àCTæò‹Þ/Fr)Úyú•sˆTl/(«áïø!K\êô½¯oÖsiwlœ ’¿2A­¸…ÓW7ñQªo··±H¸Õº9Qûμrs¹`†¨ã_˜â‹u·0qöAI)°¶¼†ë?¹†Þ~w?ü½Ÿï`’WÔŽ°ue/¿ùV––Ók w±‘D ‰cKÇðò›WÑÛïáî‡÷¾£¾ \ÿÉ5¬.¯B¥ú|ù@q:¥š²Ëh>RI¬-¯áÆO_<—Íç×ñÒßÿ‹‹‹ÙµŽUü)V—WqýÇGï‡ë?¾ŠÕåcJäéªù)±´°Œ—ßxý#öß¾ˆ'ŸH¯¿Ãß_$ÉrqD B¤b´ÛÏ_¿„ƒÝC|vëNþ‹[üåÅG¼ûöM\{ó¹ìÿ›—Öñôµ hÇm{UA>ùfP‘BÛ´pñ¥g°·»Û¿ý!ß?]g.oâ¹ë?°ú¢¨$?+qdIzÅâa>‘Œ€6ãù—±ÿèøÍoA<šÏsó 6/®ãÜ•3è¶:BÖòwöG*B»ÕÆåëqðèŸÝ¼ã•nÆóÙº¼K/]D«Õ‚’Q-Ç'R íV ç_8‡½¿ÛþËß?7pöÊ®½vö\^_ž€¿ªêƒ°?ò)Æ hÅ-H!ñú^ÅùÜÅ'ïŠÝ{Ðï `ŒI/„58ìÙû+e$qbc g.oaãü:â(BGµò‰íÞ,¥K¼8ŠA ¼òW/aëü—øô7·±{ÿí>ÊÌí´Ûö~K"´Ú1/àüÏaý©“ÙmquòýK Ô×™ÆðiÅ-(¥ð?z _^ú ÿú÷ع¿‹a?É.Èõù ´Ý¼~öµó¸pù<:ívv£Þ(þÎþVÜ Âk}gŸ9ƒßû»÷w1è þŽOÔŽ±´º€sWÎàÔùuD*BEcù;>‘ŠÐi·ñâ_^ÅúÙ“øà>ÌäÏwçì¥j$ „MyâNŒåµE\¸úNž{2?1õø«ð¨CXÎðw{²²Gº±¯"!%Î>{[OoÂ$ÑÐ:Öû¸¿ý-Þ}û&^úÛ°¶²Šn· )%¤Tcå“w¬ DJ"BŒ­ §°qn=ãKò•”ö.Ï4ï'?¯Ý XE~W>öf…3ÏnaëéM€Ú˜Z>ÿýïáØÆŠ=x€¿³?V´8ýÌ&6žZ¯ä?ŠÏ¤ü› œØ\ƒ˜'¼óÿo¼ˆ'Ö!•lœ¿*G BŹ/Gqû¨(]3U®«UE¤™ü™üÉ嫪°G1¢(²^ ¼Z ÷ ‰10&=÷l ´6ŠG¦p3ù©|4,ß{ô)ÜÙI§*¹@árSO0ý×ýQ ¡™üÇX>–_ ã öá§E¢‰Ê3ù3ù“ʘ½f¯?á—ªüní] ×ÿi:žðÖÍäÏäO(?¼2€Ã'ÃÇ OèpñÍÁ[QuÇûLþã, Ë/P®lRöp½½u—í/³wI×x×?“ÿÊGÃòƒ)>8åÎéöïhf{ç#s¶•Æì=hÂ>.[<“?“DùÞsñ¨x0ß 8;yâïõ²óˆÒÍhUwôÎäÏäwùª*Fs–"pz[Dz¡åù³Ÿ[TyDý´0“?“?©|Q%Ý wN…e@áÿùÉ­µ'œk­ŸÉŸÉŸT¾*¯ôƒáZkÈDf'„ÊÏel8;™£Ó?eín¤«¯$Ìä?–ò¹aùì-’Š£Ù­¶Üiçül)…yG–ýpí—´òœc&ÿq—ïgŽMÈwr †lÜD§ÓÍŽE‰Â¨/z¡aœq4Ì0:ý{ëlЊ[¸ûÍ]ÌäOäol¥Ñ²ùFk|úùgv€>ÚÛÃ'·?A+nÏc£p›]v¿;^“–úƒ>íía&ÿû!ÿ£O?öÎ|N/ŸÙÊU°w°‡Ã~†wdß»æ¥î{£Á ÑÌŒþ`€½Û€™üïƒüÃð‰Ó)å3[¹ öw÷Ðïõ µönû¯x¨¼’‹Ûh.÷`$Ã!öwmfòù½Þ!òË8¦“ï öû»é½wk›ûPYº]cR\ØsM´Æ½[Û˜Éÿ~Èß9½›>;†ÂÅÊçð¼À`8À½[Ûv€~òóÛtžR`ÉþŒù‹FïÇúÎ@špøI‚ÛÿfŸü›ÉŸÉ?ª|±/0{Í^ÿï¯ÿë²¶Ì“Ÿ ®IEND®B`‚Carla-2.4.2/resources/bitmaps/kbd_down-orange.png000066400000000000000000000120101420416754300217600ustar00rootroot00000000000000‰PNG  IHDR¨:$åübKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEâ $ß‹O•IDATxÚí˯Çu‡çTuÏ̽wøâC$Å·(‰銦-ËYXN"ÉÞÅÈ*ˆiYg›¿ÁÃëd ^dãdc 1‚@R’ˆ-E4$EO —"y_3Ó]'‹ªî©î®žnÞé†4\çÎÜsª¾ª:uΩÇÁâ±xüŽ>4p7þâû×qõì!hªÿpbo¼ó)~ô“×ðþ'w§÷3.%¬ô¥L;FìOš Ö· ÞýÜ ×ùG×qõìAèìÄ+DNßgøÑO^íHßצu¤úŠ&[Ï¿·z›øtÎåû×qõÌ!h.)r|òòuÝ~Ý<>©^çÓîÛ©‘¿€¿üã§ñõÇ#î¡”+ˆÁÄYKDR|keX)üÕÿ ﮟۅ§.ÁÊR ­ÍrŠÅ#HR`}sŒÁòG0æ üvÍê|úÒà ÷‚Y!+*y&ÝHŠgr}ÿ8§¾oà›—Nay÷>¶åÅS(b b`Rc<½´f«·‰˜Ž¹<~ýá^(øgÅ5¶Ã7ðô¥SXÞµDªÀ?ãc’Ϭ ;k‡o]=‡å=ûA¬rE1ÆXþϬ Á¬l]}ä+{ÅKPJ˜A”ýø#P*ÂêùmÀ£‡ «a×®% wíAo° ×v® vô¶6Àú ¬^<†;wîà·k‚ÕóG0ÜsQ ä)!"ˆ‚ˆbÕó£Nô­ì=€¸¿\ "ö#©ƒ”‚•Âê#vÔ7ñ‘î¸\8Šå=÷–@¬*†žˆ FÀµÃQ ÷DÔ€ˆ ü§|Ji¬^è¦v?p¤t•?§`c`Dae÷~¬>2±´ih݃Ž"0+°R ÈYòà@ z‘,ÅÀ §°<Ü‹þò»…Ö:‡*$I‚;·>„Âx4ÂRlßëÅQ܇Žâ¢üÂŒ&V_ܾH#Žˆ¢¸ _0µ  “¦`±ÏY=[ñ1ÝqÑQÏr ñÏ ß‘¾È¶CÅAþ9Ÿ^Š^uÓýAÃÊrf ¥4”ŽÀÄvÊeÛ$4Ř(‚r¦Y1` #…þÒ2–÷Àʾ#è vF[w°¾öF_`<ÚÁ@±™Š5”ÖÐä;“d_ˆÀ¨Šugú”Ž òE!±ºŒ (5;½møˆN»áBÊéÒAþ££¼|óqQÐJCgîD‰ÆÇ¤ÜI»Ûú5ñ§4sÞAÄìà3˜ û;*L‡&±µåJ´bŒî~†èà™`sí=ly>  Š"Œî~­J9‰ÎgaEùD¶€™£ÎÄùÈžW;¿Ñ—ïpX¯žCD,WÏ6|˜»âbås ÿŒ“ÕÙ fç?Vùg|lÝ©“úQæ Ìà0³í V¤±Îƒ¸DvzEÙmÉ£IE€V&f€C ÎrJ°ï‘VE^DšËòÝr*Fó0ùûÝè3%ù™^)~ÆÓÛŠOW\à1 ñÏøt¨r&!þ˜–Åýzþv0Íü]ytþGF '@xZèl–ñÀ”"(0Rh¥ÀÊZY… (0R(eGù)%ñ¡šN)|®}yC@ªÆçÑ’y¿ .V^•¥.µƒ„ù;>” Ò®ô5ñwV—{0¹B@Ø$S'H¦–…Ùú#Z€J+럸²°) €Z¶3…\¶ ™5òG÷´Bséƒ?:KpòF1 Å–-{¯ór)[ä ŸNõ™ÒlPÃǽ줚øW,hVa# *M1åéÇ›ZXÙÂ*2PJÙÑâJ*"@*ö=&°’âTg ¿£@Á;З[k)ÉŸÖ‹D &ÐAÚðéŠKÁÒø×¸sq1þ€¤>&ŸšçÖÓš¿ö;å¾U&„Õð³ÚÆ~°Ž:¹•ÙJ¦vS‚]m ¢« ¦ ŸÈÁTôçÖSŸ¬$’[N ùÆM|:âR°ôþS>ꃱ\ü§)Ñi§·ÈH3”,(ùްû#’èÀ(²#„É™øÔFù®É˜†¤ðVT°h$3¶ <§>”;]f­tÐ E ÚȧS.’/þ·•Ü…ª¯[9çnÏï¬åïžuÐAÍGoÉ û$ìÚkæ0 C9#M SüLÁ](=ƒªQ¤ßóèó£Ãò È;¢ 8ë-ùtÊE >_OWúÊîD(Š/Š.Ú¡%]–}Õ‘åGÕäÀ™z&A–½gê³ÂRÅ× ¤$ìóΫ¯9H (-ùøQõå,Z”ÿå3—>3•Wæ?åÓm;´å¯ý€… y>Lå S.Ñ´°ÌðœeãÂq’hVÚ§”æªK_)áœË-MÓ­ùtÅeš‚ òÇ4Hê„ˬ4SOGíà/”´à¯+ùÆ q1ýì0”GoÖIÎFI†ÝHÊߟ¦"¦`¤(?åŽÕ…>?ÙN¥Y¦”Þ¡Rßȧ`aæå"ÅŽâÓe;ø¹×2©ÆséË:iKþ•)ž|߇JPü)ÈÛ×Jù³ƒr‡˜]âÕÿLŧËF®HÑJ»H¦¸4¹S}ä[ _¾ÈtƒD–‹›1ÅÏâÓã Ü2Ë:7—lV1&Ì?ã騼%ãüKA’ëÙ®1©ä¨“¸äm°± ÿ)äv® ©}¦ŸŸ‚ ­$Uפɛ vª¯èü×"¾UI3øH7\ŠAWˆÀ¢Í£¯ÐTÏÇŸ!æª_[þ¦$ù?äÖe %2©x*`ZHg]Éä»UˆÌ4O!ßG*' Èk©ñív¤Ïõ(Ÿ0)>-ÒL3øtÂ%·òþYPÖ•¾’¼Y|Hºk‡fþ(åAËéç;ºmî8…ò¼"imž Uùž‘&ªUuÿú(,¿h¬ÛFñ5|:àâ¯bùSÍ„3W;Ôó/iÒ];4ñ/$êýé–Ü-/¶Êì`÷ôIš@R +›}Øý~ÙæTAUÍèüTÑ;ÕG@Ý\3…•Yl^êœÉ§3.R-/Õ ´.ô•uPs'ø;:´7“*`¼“[~‡ñ²öÔƒ=Ï“L²×)Œs¾s«èxÁ“aR ]ê£Ò‰9ò§¹›EfñéŠKîÛ5ðñ¦ÍyôQ¨Ó×ðé´ù›RäÜraI‚>J±c¤)À,nÉËžÐs+ÙÅSÅ…Ñ[’Ÿ“RñïvªåˆÒ“ Íp¡MÍ3øtÄ%8˜|(°4¿S.vg=•µ“v üÅ;O¾e(Q S°¸”@¾Ç7¤“$ß4N&Ïï•i¡ÊÖ¢ÎíR…},)7–Ÿûl˧«rR¸1+| ®Ï|úˆfû ÕtìüíÞ–¿®taF à”-"—Ü-‹–ŒGè öû};9Éj È6’5P´Ù¼[ð}Âò}³P4óê«øsByǺúW‚‚6|:*'Zò ø óê 󯲴CKþ5¾Ha*#ñ~)¥Ô ª‡d2ÂÝþ Û=í®¨HÁ$Qø z#áSï[ ©‚©èÓЮI"R`p´ª/©ÒtŠ©­k>5åoãÎÿéÊIå$jâ_íL³ô“ÄÔs!?wÕŽO¹î§~­ù“7Å×FlR±öŠ‚IRŒÖ×+TÈ8S/‚Éd„tr&!ûÙºãË—°[Ò—¤Äq®Ï€0Ùè£ÒO¥Mê˜ÒjäSÇeã6bU¸Ô–³ä'ÏäÓBŸ˜©h«o} &áj;”AˆO¾ñÆD\S¿¾rÝøëгLÕ©¬mQÉQV˜LFЬ ½À ÃÓ+&Òt)RL&)ª8rƒòýY•õ¥É=¨Þ ×'Ú ÝWõU¦oê”býõ¹ßZ>••Siˆ®r©-g#ÿš)¾F_2¾Ž–­¾É“ɤªZðAX›z8 ×/¤¯’¥™ÍŸ1£1 #‡½)Þ½¿16·'˜LP4xá@=€z M (Ú…d’`skŒQ Ãøòó×ÞÈž¡/I¤ <ë+׉«yÌ™šøx¿ÏÊ™$)H‡¹d圌'U.møxYúÒÄxú†ávÀ,þUy;ŒÇ˜Œ'3ê7 ·Ã}ðç S^y–BE‚A?«ï&xíÀð2¸·  hq?ˆ†HŒ€â$4Àkoý/^}7Á Ù !ùÅe•½bÛ¡­¾Yüý)žfY ÛÙóͽ^O_z?û÷›ˆÞ\ÃhëçØ½Lˆ#{ƒ„¢©/’¦‚ñäîlþõ7 ÞþÌàÙ§N"Š{ö UI~y#nÔ÷‹’>SÔwí$â^¤ªò+>5Ð:>A.ÿÒÀÅT¸èØÞÿTÇš·¤—:}7frS-ÿœ"DQO?þ~ö™¾»Nß[íêwí$úý¥êr­„¹R%H Es¥Ô3ceï>¼üÝ˸·±ÿ~÷~ùÏÛ­‚‹A?Â×.ÁKÏ_Æò®= ¥ª‹î…H’@š±¼{/^z~‡ú=‚—¿{+{öå—qùò {©”ÒAM(àC¬æâríâüÙs—0XÞ•_¡â?í Œ•=ûðò ;çòÒó—±¼{¯m¦ ÿŒ3ci¸{Ú7wÖ»öð‚ÕfþºšV‘°Ÿå8±Òˆâ®=q/ÞÛÄ_XÙÅæÿÿÇ?} þÂcùH¹|î0ž|ütÜ+U‘OþÆ}”҈⫗Ïàw7pãíê宜?Ч®ž‡Ž{P‘®È¯f dvZ©†Ò„®=q/®[.@i×N Ÿ?ýöy\:ó ®^8¨×s÷†ùgåb­¡ãžºr/ÞÛÄ›¿ù°™¿÷¸rឺrQ܃ryºÿŒR:ŽqõâIüà÷×qã4óϦë+Žáë×CÜäIþ™üÝ{zæ® ûe*ŽAÌxîÙë8ö¼þ«pkí¶GcÀØUÁxÛŽ°^¤pøÐ~\}äNŸx*Š uT+?ÀY'cÄ`üÁï­âÌÉOðƯßÇ­µuÜ»·ž>îõóû-{ýöñÄ£'púø!VÐZ×Êo³S« Ç`¥ðÂw®ã¹Ïðú¯ÞÃçk÷°5Jmdëvõg|(µ‹×ßY=G/œBÔ›v–Yü³·tƒ˜ðÜ·¯áìéOñú/ßÃç·×±=øg|ú½û÷ ñÄ#Çqúäƒî¶?ÝÈ?·f‘½ðÙo^ÁÃÇãµ7ßÎßë–óÿÀv'}¯áàC\}ìaœ9~pGüu0¹G¡%©bžŒ•+àÜé‡pöÔ1 »I 1Ô`´½‰õ/Öð㟾…?ùÃ+XÙ³qoÖÊZˆùyÊ!»°JÙË\Ï>|gŽ.Èù{Oåkw¹¬¶7ãS£ü`J§.ù9ƒk …s§áÜéc.I-µ|~ø7pâð„qkþù P çOÃÙ“‡ƒükù(nÍ?ª•qòÈØ¿tý7¯âåï=‰½ƒˆ»ãÚD½vÕ-†v&5}'ÃBþB~{ù:”wS:‚Š´½I˜ýí]ä‘ÂÎ(c Òq“nÕO“ ù ù÷)ŸCZ²›tàÚ]§vênvâòòÛÊçÖæº.Hheöòòw&Ÿ±x,¿Ã®íõÅ5®Ú<^uX´t¢òò[Èçf%¥_×^jµÓ¿¿_´róµ7Jàfjñ”ÿ>XÀ…ü…üöò¹6WP.„Aá@=LÝ i³³¿ßN>W?P:”Z8³]\ žŽŽ€!uXÈÿRÊGÇòk-hC[øâ‹Ð7‰È|è…ü…üùù×þúW_ÿ‹ >„LWPõLšbzh´¨t!ÿK._:–ïÞÓÕÞ/H'˜4)÷5„þ¾ÇìÛp½ûå³]:VÌv¢òòïC>W¬ªÔ‘ŸFõ|ç\¿t ‹½¸”cz‚*M›í‡_ÄÂò2ç%þ-n–eX\Z7|L‹÷Ö+¯ {æLΟÁSZC+•eȲ Ý.„¹¾~þ<–—Ñž›ŒŒsȱr @& ^;8œ"•~ݹ9,÷z˜ït @Zçsg‘DGÏš™› )®u¡s%\kRÎ{0I1o…“•pÍïÓâÙ6å;m/žµí¯ËOC¼z†ø·ü4ɋŪâ¿)<—× þµyNDq•ö¶¿qó%œÏM¬¢Ì¼'œçc ÷Ë)¾¡4‚ç“ãéT‡Ÿ'ÁK„8Ãb£x!þ½ 1-žŽñá_”ë“ÃØ‘çÃŒIJSÆJÞ¢Ö 4…$ÂHëâ=íw‚%"Ñ^Ì!¼÷µ×iùqFƒiô,°bü[~ÂÓþÈqm£Z틉À—zmž,Œ+êu7¡`Æ“„çIdÞãÎócC™+?E›Ä‹¨3”E•:ü4ÅKÌ‘"¢5žÍ& ñÚ7ä:ü4Ä‹>Æßx?T§7÷˜oÿ:A}…«f£D‘c˜pï.yAë\Qãmn1·2J¸ß›Ä«ÊüÈ⤊Ÿ'¡gˆÿÀßX?„øŽFÚW“QJ\ýˆà ò‡x£Tá)Y2¿[¹Ì€¸ÏF#hh{RxUFæMzjñã¹ÓêëÈØ? žsÂ&Ûw þEÔzÝ$=4›u=ɮŦi^W³5/Sޱž&ŒgEgÕ±!þIáÅ"£ÿl~Bí¤zÚá4Æ“ýàæ}U)VÓýP“ÿñ2S,Yvž!'÷!ÇK(Ë ¥­'‘Ö…QUîScˆŸoÒl56‘ª9™h„—7>?O ¯jˆo&Ím<þEÐz­÷ÆJ@^rΜ#*¬^o² an¹!äA¡™^Sx±üÒŸ@Uå “øiBOW‡ÿ H#¼DÚ+/6Ò5ø•ùYÈ0ÝáÀ(j‹´¤TÉ“¸õ$ç™`Þ•ïz°™¦Á#_? Nâ`?Mñâêâ?0²LÍKhd ðCMö{Mþ«W’| '*‘çî²!³r@D|dEÞ³¥Nð'I¾Â^nwR¼‚àÈêHeûkðÓ/“ø/0šÂSêHV¤*c„µïüWO’œ±I ¹9F–å›/ƒ©‘¹ÏÖÊA#“²ãMÊíbCy]~Ò“&ñï¥Yó:ÝÐ$^Õĸr’äC¡ˆV¡ìÑ^ý,Ÿ½ÙÝ7ž2>)0»·²¤“÷þ‰ðŒ‘‘³†ˆ>¤ÃÇ´*ùi—*c!¿˜ßžóÝçÃ:)^¨ÏƒüM’¼$ÖÝÝAïs1²,_p¶kéHg#` ¥(bwvÇtL<ò Ì3.»q–ܵp¿&YÁ¹¥”xÙ äó_`U8Ò±xqd…øÇÓ´/"ßçŸÜ”À¿8ìTíóŒ4Æ´Z ãÎÑÜèP`·÷EÓ,ÃÈùŸòÓ}šóâ9ˆAÅÐåGÙ©ðüÝLFí–\bÞ<‰Ÿyñ'-¨Ú 4%^‰ßФÕðã>'nŸ?¹›À¿›!›ˆFNQ¦»“ÆQ’w:˜_^†hµòXÔh6`øð!x§µ·w¤l B‘wä@{ÞÖ"y›ìTñÓ/nD ñXꜜ:gˆj™ÓöÕàßb‰h-Êv„h¦°vÃÃCl¾ÿ>:CìPk ’tö,X» íwD '+x1†GsFC­ñ€8wn/pŽˆJM«Q¨¯à'ÆËàà›Ÿ~šëéðR¥§[ŒEP7Uâa¨T-¼ªÒU oxxˆÍßý®~û"£ƒ®,Ô»ÖëÖ²b‘Ãñ€Œ1¤Y†½‡Ñ’R' ‡È¶·‘2†Œ±²×ØÒ‹«½FðFi f<73 Ýá¹éIh6ñæcñÐs{­$ã%ªgÀqƒüx“²ž™£Ö{"弄WDç@ Î|¼GDÚ£XUÆk+ÆÊL‘BuhGŽ"` Ãá’1´:üæ ǶFÃ!2¥0LS€±üÜPxëÏÚÓ%„7ÚÙAÒ锌y”¦cxäOv¬üЉyÑj"?!=9òÓ3´ZâÇhUxÃðNÐišb8ŽñB^_Dù ´Ã!’……`ûªð&ò,3ùa=´’ã3p¦˜ãÝS§@ÆS”ã£ím$Ý.F÷ïãñh„QE¡|ÑæBxÃÌÕv¯¢ÖQ<fãîe)qMäÇ©[=;RBôz¹|«çðûïËzNà?Ä]Þ`{sN¾=N)Œ<(áQlÉÙã'Ôïm" MAóóÁö…ðŽËp’ä'ªÅïÎðÒ–_¤)žùê+üÕµkH––Š-îníÑÖ:‹‹Ð¸}ç¾È2´¥›=–äû%¥¢xí-ðn7_½°d• ã…JnÚ2i©s?>/ýÆÝn@(…GwïâöÖÖ‘žfóF¨ÆJþÅ^5ð†[[XèvÁµ†Ôz0(ñ¢ÝškˆÇ8}¼7VWÁïvó]KÎp ¯”šTð_ž$y9WpýÛÙ%ÝN\_[Ão>û >|ˆÃ_ý ]39’NGdÆÛ†~ˆG>U ÷µÆ_®¯£Õjå;°ý!ÕüM›E ÕjUãݾ]ÆÓºŒ·¶–ã9C;w*…F‡X㇈Æyùå/«yñõ\_‡rì:Ê? @Ûç%†wûv”—v’”—•=þ-?ŒI’àúú:~sçNŽ·³ƒ.€÷?þ¸^ûÖÖ0×nƒÌ²hÿ–wI%·³Ì5)½åe¼wõ*öñÉwßá¿G#Ôyµ¥ÄÆsÏáÝ t—–òëVÜÎ÷·“b–z=¼{íÚ‰ñÞ»z½¥¥Â!Ɗű /ŸN4/WŸ{ÿrís^"üÃá¥×ëáÖýpkc½ååü–ÿ–ƺÝ.ÞÝØÀþÁÁ‰ûáô©Sµø§±!Þ+Ÿ+näP ‚1´¤Ä[—.aw·——óGÜk;~~öÁ¸µ±QÈxye×/\@"%„¹üÊ•_x°9#„@K)ܸxö÷ñÑææÑ´€|¿lõÚê*~téZIiÏø8òíò­•¼B%ž?œs´¤Ä_X^z½ÒV¹*~þñå—ñÒê*®š‘…ÝBü[~„H’o]¾ŒÝƒÜÞܬſÕýÕÕUüèòe$R—…ø·üÓ¾^À?íïã[[ùw~½ßÇÛW® ÝjJMæ¬Ùiâ×ùùzœ1üýÍ›xéûïñ‡»wñýÞG£"ÔÍ}™’sôOŸÆkçÎáâÙ³ŒA 16c+r+C–6Æ ¥„f û書ôüóøÃÝ»¸¿·‡G{{G^:7WD›¶”8½°€µ5\8s‚±£NÈ-ÃÕÙ‰ãêŸH ÁþáÆ ¼º¾Žÿùê+ÜßÛÃaš7T»üd&½}ù2^½x­$0+TUü[ý)Áˆðw7nàŵ5|ðå—9ÞhTâßòÓ2¼\}þy\8{’sHËKÿ–!%Úþæ7ðB¿÷?ù¤ßYXÈS2³ìKDhK‰S xsm çÏœ)úç8ü ÊGEÍÓ+¹¿ sOæ•ÕU¼ØïCH•Bf6 < °ýà~öÁøçë×Ñ{ætLÞÉÝM'ùp”'"Hsaì¥ÕU\XY)É¿uóæ˜|ûE5å‡ṟï5øáæö¶+ý>.÷ûÅzuŒŸûýïÑ7£{ûÆ$þ­þ‚sps¡ìÅ•• ÿUüà˜üpsëܹS§°øÒKø×_ÿ·nÞij++ùä†ùcÃXèÞp·,`‡w‡MÝ×LþÓ+ß?»?­üP™ÉZ­L’âÆ2·Àª"Êw«˜¯Œ,ËJÃJlˆœÉŸÉ¯+Ÿ…&öbÔX>¸¡ÂœƒÆ„B÷LþS*ß5ª&ähÍùžªÂý ^3ù3ùþqêÙköú³}Û@5«ñ/ÇIÜgògò+䋺 Úû,#=IéI¿Ïä?]ò'æqåÇ õAAöƒìßìv)û¼¿JRuDu&&ÿòEÌŠíjG©ve‘šÒ€ÿìqB÷LþS&ß‹€SË7ï ×êµç¶Ê¯½t=“{®"3ù3ù'’o :>Ä›Ðk½ ´ãÄñí{NÝ!`&&¿†üò$Éù8eû1|ÚÛq÷CF=/Ȳ¬:©žÉzå;kD~l’£Ñ(ÿlFoSóò‰Ò 2[„0ÛÉú仑° ùºd Ž%á×ûLKr[÷³8Ú9¨Ý†Ìä?õòѰ|ûœ€ápˆ»ß½Y-p›`®5q/ Ðúè¦ ó•à»o¿ÅLþC~ÿüùÒÆiågZã«/¿Ì tw_~þ9Zö³ÔýëýBí½¼C{ž3±¿»‹™ü†ü/îÜ?ø6…|M„ýÝÝÜ@ö÷1 ›¤Fªê_%Ã4ÅÁþ>fòòcçö§‘¯‰p°¿ŸèÎÞ‘™¬Þ‹Y˜¾·é5R¥)vÌ‘Œ™ü†ü؉„“ÈvöörýèÞ=<¿·—b«:vëÏÜB‰¸ù9Í2|tïfòò×=‚²Ò8ƒC|ÄHÓÑÝ»—è~ñ†£.´ZàövÛ á1û{Æ> ð_æ¤áLþLþIåSÝeÜÙköúÿxý ÝsV€iIEND®B`‚Carla-2.4.2/resources/bitmaps/kbd_normal.png000066400000000000000000000025541420416754300210440ustar00rootroot00000000000000‰PNG  IHDR¨:ŽM pHYs × ×B(›xIDAThÞí™ínE…Ï»3ãõúkc;m“¦IJe­” µRQ‘ê%Ð AêUä’Œ„âÿ¨TQT Rhå8_Mb{?æåÇ®;3þˆUáXdþdý>gϜٵ'Àœ4¾¾ç$ÇúÅïÂQ,¥éÇi]Æ0‰'+åH¢%YʽÞ÷'—@Œè†¬•²pxòÕŠ€ã8 ˲Þõ±)-»€Â%“=¾)‰×Möͺë( ®I‰~FHArÇu,z~z‡b·D ížÔ±˜¯ä§{Î.6>X¬Ã8”õ®gM庯 ÒÙcƒÝ)9Ä`èÌ©Á>–‰¿ZkIx…œ’BàÙªWìÉ]À+åäh0{€¬n ñŸÔ<¿ ÁÌZE*òú|Le!/(ñ1Y)Ÿøsda©¤< ×Í*)íaµ\ɼý7ëbèÈ"§¸´VÁÞëæi¸Y¡™uE÷Ì'¶)b+sˆ¡™“åºþ‘+!¤’JH"€>^\\+cÿõ᱄TÉÔ³íÜêü€ÔBI3ÇIqæcQ )‰@ÄÊdR1˜­¬ë!'m{ùäêl›kDÄDÀѸÕd”r*fu"Õ±­ÿD?6çhå4Ì Š8©Ùr"LV„p|ÐQÊi˜%h ’?6›X ¿ˆÉ•Ó0KP®£öþÇGœ@9³yN0é(§`ò‚6W#:Ž]tD'X˜&PNÁlAã‹ÛÌ&èÜÜ£ÓvñŸvÒÞ˦~”ÍÜŒèeZž(¹&²ÉG±÷ã2ŒÍuÐp„M4qÐh:—aÌ êÖÇÑbïÇe(3ƒÚUO!líŽ,l1«¶w-lråTÌ êµbÙUïÈÂ~TóÆõZ[À¥×Úˆí¬=ä<#¨Ð»èì*ac ÀÂÎ+›.`W&,pÑÈXØ~ržÁÌ m*@S·…5‹Âö¸ m§Ø• kí¬]²ŸgœëÍr#°±fÖ_T}JUIÞvÖ,€wM†°& ÊÀÛO’.¶ZÛl»Ì >Ç`¸|ZNÿhüüê±í2£cöPuÊ`Áƒ:¥Ú+<ž|ø@­ØÝÚƒè²zZ¨•X›(Õ^á×¾BÍS=$¬žºô¦ØÉ×^¡Ùójåþl]¬=]ïÿ¼þt¥×…¸už­¹OÏ»¬~»ÔSŠÕá.jù<« Q·øeùmúNØ|®~”ÏôXþ¡ß `óY2M7î]{P·ø¸çl~·x»¤ÎØ£”m>À×ïz.ªp¿Ø¤Ôà›Ÿù}s?xæÄƒÓ£VGñèŽ_Ìzg,/îžþ¬©r~^É ääÃÖQ;ÖQÅ£Z+fú˜óÅÉ~+ˆw€•LÎ/º}.ß{÷𡣄TYßxž{êÝŒW‰£0>°Xñ¥êgФÐÆµ›~ºû7´¹™\…9õQƒ·—›Éúa|t}zp:%\[‘6sÒ’+ò\AHv–ÁºsØ¥—¨žŒèàó+,G3¯ÏÍÔ_½ zÙÛUÐÿyÐÁýž³-KTO^¡­ ý ˜9>;áÕçfê%N7ü³!׬c­Yû/fW³ÿ"Ñø9oæ?iÌ®¾eІDã(¶Ÿ0³ú° ïBãË:·³«ÂÒ/?Ϙõàåìêo<³ÞzI@uÁØJ ƒæå«ÏIûÉÞžä°æ‘¸IEND®B`‚Carla-2.4.2/resources/bitmaps/keyboard/000077500000000000000000000000001420416754300200205ustar00rootroot00000000000000Carla-2.4.2/resources/bitmaps/keyboard/black_hover.png000066400000000000000000000014751420416754300230140ustar00rootroot00000000000000‰PNG  IHDR©:a.±I pHYs × ×B(›xïIDATxÚíšÍNÛ@…¿±Sâ†"Š ‹Š'蚨ԗ©â%ú]©ÐV ÐÒH Áw‘b$Æ×ÓÛ2‹{fO¾ñ¹'wbK¶«1é* O»ýÞQVºº9²²wäöÿ—’—h.Ü¥ÙÑèÝë¬wïhÉ?þàßës)y‰åZ"uåÛ|Èþʱk.¹äcU÷ô¹”¼ÄrÁò\Aþ„Oy±ü‡ð|%g¹+ê©.—’—øÂ³ žŒuF<ç0áW\ãç³Se.%/Ñ5„#-À1æ [Lkl1än1«Ì¥ä%º†p¤9@ÅFãÆ`ƒjeV•KÉKt ¢K…o,ëÅ)Är)yéΉ"­æÍ¾ü$U,—’—îœu©:'¼GŒC'ÆÇõÒ•F»iu6ûãzéÊY—ªsÖ¥êœEªÎÙÆWç,RuÎ"Uç,RuÎ"Uç슯Ή"u_ÊI¿âRòÒ³.Uç¬KÕ9A¤óenÎĆb¹”¼Äp‚HŒyÅ= dÆ)~ ìÄr)y‰á‘ö9ç|ùÅ3vO¶Û¸Sö(AÈɽÈ×¼ãNØ‹âäçËÚ¾àðLé“/Æ S¼ ýo9\_Èuñ"]s•ƒœ>×bîªq> ×Ú¥93Fg¬Î9ï¸[öFĵ­¹Óð"[³É@ÉXÈÍç“p-‘ºªÌK†_f›ïÜàªZÈ­uàÚ¼x¶Ƕ9yYåÖ€¡°†ßÔKÿ¹ðƯ8þ\ ¨ñË1ÁÓç¤â8pöÂMðTTT®ÕËúŠ“ù¸yYoø¯ð"îü²u`°ËA~èf÷'Ü,?ä€]m.%/ñ5ßÜs/ÓgW´¢¸þ·—ø‚¿žrñàäÅËÆr)y‰¯Áµ],\Á&Eã2W1åg[0±\J^â¸ÖHM]Õz«oê*‹T]©º,RuY¤ê²HÕe‘ªË"U—Eª.‹T]©º,RuY¤ê²HÕe‘ªË"U—Eª.‹T]©º,RuY¤êú äd3§öYIEND®B`‚Carla-2.4.2/resources/bitmaps/keyboard/black_normal.png000066400000000000000000000017171420416754300231600ustar00rootroot00000000000000‰PNG  IHDR©:a.±I pHYs × ×B(›xIDATxÚíšÍnÓ@EÏØ)u•6N‹ ´ ±ê‚‡àxÙVB}àX ±j«"?µqâ1©‘™/Ó‰ëÅ\¯<£s}}mËn3ªÀË­ý´:霩*ê[vÎÔÉ&¸6e±æôwipÖ{w,÷žó=ÿý!¯ç^¥Ñ”kgÊbãÙ4g¨T¥oˆ½ÚÍœsÄ/YÑÑs;ôÙ©ŒÝ1âÎÀ™²Øx6ÍiOOE„Ûô‰èWFG„ !TQ1YÍ…ìÓåa9–qbªåLYl<›æ •ÃŒ}búl•C3"Æü˜ÏNVs]žñ’sÉ;2=gÈbåÙ4g¨4‚‚[8ิ½â†[Šrv5§¸æˆ)ßÊ!Å×(=gÈbåÙ4g¨4¸à9·|]ØN¹¨Ì®æ2 Ô<Åüúê8c Ϧ9¯Šœ¼f›“ [HkGN­štåÙ'zûf5Ûl8AmÏ…l=›ãD•Îj•ÎÄql/Å&<›ãD•æKߥëà^¶žMqÂÏnÛ‡ÖÍÃþ¸YÖå6\©¿KWÊߥrùJsÂJ›~ØÚ”¥e¾¯ôÑã´1‹¯ôÑ9ÿà;ç6|—ú7þ ©Z¥J‚<ˆkS–õ9_©sNXiZÛÛôi´£[NP©BUþí ,¨°åڔņTÚ%¡OÄ0c˜.qº$ì³]r C!· Ï&9A¥ Ÿ×f›#"Qœˆ„OP’Š×BNï9áãbOîyÏ)е¸díã+ È,~r†)C:¦u?nÆ“rDÆ™<‡ ?¹g•›ç°%䯵ãI8c¥! ŠîbDN"ø‘ó7Z°©ˆ3y•,RÏ*7Ï#çv×<ž¡R•¥aÀÓÊ›nDÌ/f¨¬q£JfΔ¥S[÷ðS”åž›ç)ˆ8Hk—PÂéïâŒóˬGŸx±A.Wçš?©*ÄôèK8c–½J’˜˜Q–½Jþ˜1»".ò8=)…fã·á©š.O¨ixÊ[]smÊbÚ•{*âX3}¥Y¢eÅéÔtûsÐ>øÅ„ÁÊÉÁjS[®MYìÏA™^*"&ZZ0al*Æ–kS;ÎX©×ºzØ··×ä+u._©sùJËWê\¾Rçò•:—¯Ô¹|¥Îå+u._©sùJËWê\¾Rçò•:—¯Ô¹|¥Îå+u._©sùJËWê\˳ÖPÑ/=õIEND®B`‚Carla-2.4.2/resources/bitmaps/keyboard/black_on_blue.png000066400000000000000000000033651420416754300233140ustar00rootroot00000000000000‰PNG  IHDR©:üù‰ðÍPLTEÿÿÿ  1:=@A <)@g-Ir-Mw-Pz-P|++Ae4NvC`…LjMl’Mn“3.FnD`„Om‘l‡¦o‹ªoŒ«5+FoFd‰[x›šµœ±Æª½Ð8,Jt/R}`¡{—´z™¶zš¸;,Mw-S`¤|š¸}»}Ÿ½,Oz-Uƒ\¥€Ÿ¼€¢À€£Á?-Q~-Y‡X€¦‚£À‚¦Ä‚¨Æ-T€-\ŠU§„¨Å…«É…­ËC-Vƒ-_Uƒ«‚¬Êƒ®Í E-X†-a‘U†®~¨È¬Ì®Ï"G-Zˆ.d”Vˆ±|¨É|­Î|°Ò#I-\‹.f—V‹´x¨Êx®Ñy±Ô$J-^.i™V¶t¨Ëu¯Óu³×%K-_.jœV¹q©Ír±ÕsµÛ&L-`/lžW‘»o©Ïp±Øp¸Þ.a’/mŸW’½l©Ïm³Únºâ'N.b’/n W“¾i©Ðj³Ük½æ.c’/n¡W”¿g¨Ðg³Üh¿éc¥Ïc±Ûe½èX”¾`£Í`®Ùa¸äY”¾] Ê^«Ö^³ßZ“¼YœÇ[¦Ò[­Ù/kœZ’»XšÄW¢ÍX§Ô:qŸS‹µdžÆlªÐq±ÖBt L„°0z®0‚¸1‡½6~°M…°1ƒ¸K„°/z®2ˆ½/\Š@qœ;u¤5y¬5´6…º0vª=v¥0~²1‚¸w¦2\‰8i–:s¡?}¬?ƒ³?†·/s¦0y¬;s¢0}±2m>-U€4d‘Hy¤I­I†²J‰µIz¥5e’-T/t§6e’3c‘0x«2b/PBj’W‚¨Wˆ¯XŒµXŽ·V¨@h‘/o¢WŽ·W‹´Ck’+X…V‡¯Ai‘.c“%H.V3]7a9dLRâ tRNS~úú#Xnvú­úA£/Íæ pHYs × ×B(›x¶IDAThÞí–ù3•Qƺ÷¾¡D ¢HId—vE›¥$û’H …HÖ”µöE í ­ -"´‡´/–RZ,CçÞ[3uÏû6ßfÎ4ÓÌûüúyÎç™{ï;ï=ý¯‘ë7pÒ`eåÁJƒö“ƒ3:øBýU† 6\Uuø°¡CTúà |!5õš#G©©1B] ÎèXà H ¥=ZgÌX]ݱctFkk  ŒŽ¾€pœÞx}ƒ †† ôÇëB |!‘‘±‰©™¹……¹™©‰±‘ÊèXà 1-'Mž2uÚ´©S&O²œÈ@ |w•¦Ï°šimcc=ÓjÆt%ÊèXà ¸;ËÖnö{û9³ílg1PFÇ_À]å¹óæ/Xèè¸pÁüys•(£c/ஓ³Ë"‡Å®®‹¹8;1PFÇ_ÀÝ%nKÝ=<½¼<=Ü—º-a ŒŽ¾€»Þ>¾~þË–øûùúx3PFÇ_ÀÝÀåAÁ+BV® Y´<2:øî® ]±fMDxØêÐU ”ѱÀpwmdTôº˜ØØ˜uÑQ‘k(£c/àîú¸ ñ ‰II‰ ñâÖ3PFÇ_w“S6¦nÚ¼ySêÆ”dY7£c/ànZzFfVö–-ÙY™éi ”ѱÀÄÝ­9¹yÛòó·ååæl•õp3:øÂîö;wîØÎîá`t,ðé÷¿k÷ž½{÷ìÞÅöÛp1:ø‚ô™Þ·ÿ@AÁýûØžw.FÇ_¾':|øPáA¶w£c/HÞ½EÅ%GŽ=RR\D¾—9 |Aòvìø‰“§NzÜØÔüäIsNËÓg’=Ǭ‰`„åE‹ÄÒÔò’´HØ«æ¦F–…×AÒs^@H4àÍÛw­míímQïß ‘ìC{çÇV‚–ORKkGi‘°;mŸ;¾¬ëkk[g' “P^á[wOo__oO÷7y!”ѱÀ0¿Eet,ðÅ_«ŠpFÇ_.¡HZ ÃèXà |øðáÇ>|øðáÇÏ?ÏwWi¹œ5C³IEND®B`‚Carla-2.4.2/resources/bitmaps/keyboard/black_on_green.png000066400000000000000000000033451420416754300234630ustar00rootroot00000000000000‰PNG  IHDR©:üù‰ðÁPLTEÿÿÿ 1:=@A<*g9/r=0w=1z=2|=+,e;5vDF…RQ[Q’[Q“[3/n>G„SS‘]o¦wsªzs«z5,o;I‰U_›g„µŠŸÆ£­Ð°8/t<4}?d¡l´…¶„¸„;/w<2®:D½:6Š>GœME¤GC¬?E´?Fº>>ª;G¥HA²;F¥GH¦I8‰A@–FD¡GK¬JM³IN·I<¦3€<<‘CP¤TT­TV²TWµTQ¥U<’D=§;=’E;‘B>«;:A8—<PH’O^¨c`¯baµac·b]¨bF‘M;¢;b·aI’P2…:_¯aG‘N7“<H V ] ad½FЍ tRNS~úú#Xnvú­úA£/Íæ pHYs × ×B(›x²IDAThÞí–ù3•QÆOº÷¾D²´R$” EvÒ&‘´D–J‰¬!´Ð" íYÊ’µ½P‰h/¤]YJ*Û_ѹ÷ÖL9ïk¾Íœi¦™÷ùõóœÏ3÷ÞwÞ{ú_3BFa´â%¥1Š£dFÀ |¡‘Ê*ªcÇ?n¬ªŠòH8£c/ 4aâ$5õÉS¦LVW›4qœÑ±À@CsªÖ4míiZS55PFÇ_@H¨;}†ÞÌY³gÏš©7cº®ÊèXà ‰ô çÌ5266š;ÇÐ@_et,ð„˜y&¦fæ––æf¦&ó(£c/஢•µÍ|Û lçÛX[)2PFÇ_ÀÝ…‹/±[jo¿ÔnÉâE (£c/à®Ò2ÇåN+V8-wtX¦Ä@ |w­W®²_½fÍjûU+­(£c/஋ëZ·uîë×»¯s[ëêÂ@ |w=<7xyûøúúx{mðô` ŒŽ¾€»7möÛ²Õßë¿Í›62PFÇ_ÀÝmÛƒ‚CB‚ƒ¶lc ŒŽ¾€»¡aá;""£¢"#v„‡…2PFÇ_ÀÝÑ1±»vïÙ³{WlLôNÊèXà âîÞ¸ø}ûØ¿/>nïP7£c/àîÁ„C‰I‡9œ”x(á et,ðI79%õè±cGSS’I'£c/üì?qòä‰ãìFÇ_~ÿ§N§¥§§>ÅöÛp1:ø‚ô™Î8“™••y&ƒíyçbt,ðé{"ûlNnnÎÙl¶w£c/HÞ½yùçΜ?—ŸG¾—9 |AòVXT|¡¤äBqQ!ù_ÇÉèXà ’;BiYyEeeÅÅK¥äý³Ë˜•Œ´\¹ZÁÚüÅ®q°2ŽsĆÇõ7«ªkjªoݾq}èLÌî`VE0.K‡¥ºæruU-»+=W;ü‚ø.[W¯¡ñþýÆ÷êë†ÞsÅì!f #-$–V‹˜=æ`O8ÎOŸ=ojnyñ¢%¹õ¥éS†d¯0k&ayÝ*±4·¾!-ö¶¥¹‰eáÝ{鹦áɶ}øØÞÑÙÙÞõ©MVD²ÏÝ~í#,_¤–ö®Ò"a:¾v}#YÏ÷öŽîn64B¹Q½}ýƒƒý}½£ä„PFÇ_@HÀü”ѱÀpä¯Êà |Aü¹„"iQ$ü £c/ðáÇ>|øðáÇ>ÿÇ”EÇ•G°8»‹@Ä’CË›IÑŸKÓ¢MÇ’;Í—<Ä“DÏš>ÂŽ<^9¦w3¶†<Å—PËRСTÓ£TÅ—Q·†<¦v2É“;·‡=¶…;Ì–<¶…:½ˆ7oJ´ˆGÇž^Í¢_ЦaÒ¨aÆ]³‡EÅ:Ð¥`´‰H«z1Ì¢^³‡F¹†7hAwL }Q €T ƒU Œy tRNS~úú#Xnvú­úA£/Íæ pHYs × ×B(›x´IDAThÞí–ùSQƺ÷[Üd‹R!iU$%ÊžJ¤Èš[´£%´Qiµ–¥²¥B$²D%ûÖbWô?8÷^fè¼oó5sÆŒ™÷ùõóœÏ3÷ÞwÎ}ú_ÓM¥·ZŸ¾Riß>j½UºÁ |!Uõ~ý 8 ¿F?uU8cc/ 4h°æ¡ZÚÚZC‡hgl,ð$¦£«7|„¾þˆázº:ÃDPÆÆ_@H00Œ11¬YYÃvvËwwÏww@00Ž22¯YYÅssÍttÓtt‘22±YYÆqqÐrrÖrrA’22²YYÇnnÑooÛppB„00“22´YYÇkkÓmmÞmm…00ÇhhÔjjákkÆeeÓffàggµZZÃbbÐccÛdd³[[Á__Ì``×aa²\\¾\\É]]Ð]]22±]]ºZZÄZZÊZZ’<<«VV¼ggÈnnÎss”DD¥NN¡22«22±33¤88¥OO«33¤MM¡11±44{22AA™== 77¨88­8822š??¦33™>>š@@{44Š;;•== AA¨BB¬BB˜22•>>¥33553r00„77˜JJ¡LL§LLªLL™KK…88q//›22…99„66ž22ƒ55Š11E…DDžYY¤ZZªZZ­ZZXX„BB•22©YY†EEv..¤YY„CC=KQVYpAv tRNS~ùù#Xnvú­ùAZ¸ã pHYs × ×B(›x²IDAThÞí–ùWŒQÆ/fæU¤¨„6%R¢,B)mh‘)ÒNÈD ZÒL‹­H–B´‡¢Ñf-–ìÿ†;3œÃÜ÷u¾Î¹Ç9ÎyŸ_?Ïý|ˆÝÃÁèXà Êï?çÈÑÜÜ£GrØ~.FÇ_P>ÓÇòŽŸ8q<ïÛóÎÅèXà Ê÷ÄÉSùù§N²½C¸ |Añî=}ælá¹s…gÏœ&ßËœŒŽ¾ ø?;_T\RZZR\tžü¯ãdt,ðÅ¡¬¼¢òÂ…Ê‹—ÊÈûfU˜UŒ´\¾RÉÚüÉ®r°rŽsÄF@õµë5µuuµ7n^«V½“ÉÙ-ÌjÆe©á°ÔÖUÕÖÔ³±ÛÊsõ^ßeï4465·´4·66ÜQ½çÊYfM#-w–&V‹œÝã`÷9Îm¶wtvuuJ»=ncHö³‚–§Ý KG÷3Ò¢`Ï;;ÚY^¼TžkÿóB¢á=¯^÷öõ÷÷żé."ÙÛ~É»^‚–÷JKïÀ iQ°Ö¾I6ØÛ'‘°0ÕÕÔ?}þòõÛ·¯_>RWB |!ó[PFÇ_ÀñkuœÑ±ÀäŸK(REBÁß0:ø>|øðáÇ>|øðáóÏóÌ|¤œi'IEND®B`‚Carla-2.4.2/resources/bitmaps/keyboard/bright_sprite.png000066400000000000000000000251241420416754300233770ustar00rootroot00000000000000‰PNG  IHDR©\³ýž1 pHYs × ×B(›x*IDATxÚí}[ÜÖ¹åÚ››dÝ/}owË-[’­ÄRdybœ —‡9HÎÁäiæIÀüæa€ùóæ%œÄÈË9bˆƒ±p2±ÇV䨥ֵ»ZÕÝUÅËž‡"©]l²Š]ÜUb•¿úRä·>®½öææ.ò+ö«_ýJ‚@(0„¥R ï¼óÖ××'îðôéS|ùå—èõz¹ˆ³rΛ/‰7˾ˮËëäBܸqo¿ý6666`š&8çàœƒ1)‡­”Žãàñãǰ, þóŸžçÁu]xžmc †a@Ã07nÜÀ;#ÍÍM! ¥Œ^Œ10Æàº®V¾«W¯FÇr„ۇܞçÁq¬®®F¼“ôÑ­ËÕ«W±µµ˲FôWs|òä‰6¾k×®acc#j‡P›PÏóðèÑ#­Ç·¹¹ ˲2é/„ØÝÝÅ¥K—Ðl6aFÔœóq|ßG©TB¯×ÃÝ»wá8\×€(‰qp]œs˜¦‰ÝÝ]\¾|Ífó\#¨U*œiã«×ë‘ÁÔWx|žçÁó<ضÁ`€»wïNÔ'ÔEgž­V †aŒè¾ \.kåk4Q;ĵ ýøšÍæH;ŒÓ_!P.—Q¯×Q­VG nÒ0P¹\c žçeJR…çy°, årÍfÕjõG\ ]|á1Æ!.’ïûÑqfÕG§.*W’IuëÒh4FÚ!IŸY_Vý…a°måråry¢IÇmÛð}ÿ‰†ð}¶m£T*¡\.5iØ«tòe1©ëº°mYõ™….ãL: ]Æ™tÇ—UÁ9‡a0 cd¾•fRÓ4£Óç|ªd¥”ŸišcM: ¾q&åœG žÚ³è3‹<Ç™t–í¤Ï¬ÛaœþÓ±„óÜwÞ|¯ƒktyí0µI „yLJ(<Ȥ„ƒLJ(<Ȥ„ƒLJ(<Ȥ„ƒLJ(<Ȥ„ƒLJ(<Ȥ„ƒLJ(<Ȥ„ƒLJ(<Ȥ„ƒLJ(<Ȥ„ƒLJ(<Ȥ„ƒLJ(<Ȥ„ƒLJ(<Ȥ„Âcj“Ú¶=5é4ûΛïupÙ¶}ágÓ¿ ípa“†F£½½½©“ÝÛÛ‹ŠeákµZ¹ùÆÔåaæ©K­Vƒiš™øšÍæ\ÛAÇñMÓâ¢DBlmmáöíÛp<€ã8™öµ, ;;;¸}û6¶¶¶2‹³½½›o{{B\øpç¢KXmîý÷ßÇööv&]tµCV>]í–ú¼¶m ˲P«Õðƒü•J>»ýÇŒ_þò—Ñß[[[¸víêõz¦Ó›mÛ¨×ë¸uëÊå2=z46~o¼ñ®^½ŠZ­6RïS7B]nܸ‘˜ç8}~þóŸcssW®\A³ÙÌ4’Z–éR­V±¿¿ŸIU—wÞyµZ-s;Ôj5¼÷Þ{(•Jxôècõ±½½«W¯¢Z­FuI³bª¡¥R©À4Mܾ}ׯ_G·ÛE¯×ƒã8QÙ>ß÷ñõ×_8çxï½÷Ðh4"³”J¥ ñqÎqûöm\½zN½^_~ùe´Í•+W¢"ba¹Æf³U§›¥AÕ< ÃÀûï¿wß}ÝnƒÁ¾ïG¹Ô×½{÷ „Àêê*¾ÿýïg>Õ«|B|ðÁx÷ÝwÑétpzz ×uGôõQu ¹.¢K¥Rc 7oÞÄ[o½…?ýéOQJUÆXT4ì¼år9*VvQL}þ³, Œ1T«U¬¯¯Ÿ+Ý×étÐívQ«Õ°¾¾ŽÕÕÕ¨pê4UÙlÛ†iš°m+++èt:èt:¨ÕjØÜÜŒŠÜŽ« 8ÄuI+mêS*•¢†›fÎlÛ6c(—ËXYYIÔ’>=>!ÇA«ÕBµZͬÿ´í@KP„Â#q$µm{ª‹ ß÷qrr2q;ŠOñ/?q$ö*8ëiœâSü‹Ä§Ó=¡ð “ 2)¡ð “ 2)¡ð “ 2)¡ð “ D“†_nzQxž—i;ŠOñ/?ñ£~¿ÇqÆ~m`Ú×fŧø‰O§{Bá! Ûíb{{;úÎóIPïTï“TwÝnŸâç/àñãÇøâ‹/P­V3‘dÁÉÉ ?~ ŠOñóÆppp€ÓÓÓè.k8==ÅÁÁ(>ÅÏ_À“'OpvvZˆ¤”8;;Ó'O@ñ)~ÞøÑœôÅ‹zîhz½ºÝ.ªÕ*ŧø¹â³;wîÈp’ztt”y™a8çhµZÑÃ^Ÿâç‰Ïîܹ3Ÿ'Ô„)!ž>}úºs ÆB!P*•ðî»ïbmmmâÏž=Ã_ÿúWôz½\ÄY9çÍ—Ä›eße×åuò !nÞ¼‰ïÿûxóÍ7Ç>¼ï8¾ýö[X–…Ï?ÿÀðóV×uáy^ê3ÕŒ1†!DôlùÍ›7qëÖ-\»v-•Óq|õÕWÚø²cÒqNÚW·.“òü®ñ !vvvpýúu´Z­±KRJT*t:|ñÅp'º™ Ka×u£Ê;;;¸uëÖDÃܺu Ïž=ӗ哎sÒ¾ºu™”çwOÄK¯L‚”årŒ1xžw᪞çÁ²,”Ëe´Z­LûèâËzŒêqfÕG§.Yòü®ð ! ÀmÛ(—˨T*É\×…mÛð}êRоïöíL|´ñe=Fõ8³ê£S—,y~Wø ÀàœG…¤²“2M†a@J9UM'`ØK.R¼J'_VÎð8³ê£[—Iy~Wø8çÓߪ—§Ø4ûΛïup-‚.¯£è~RBáA&%dRBáA&%dRBáA&%dRBáA&%dRBáA&%dRBáA&%dRBáA&%dRBáA&%dRBáA&%dRBáA&%dRBáA&%dRBá1µImÛžštš}çÍ÷:¸lÛ¾ð³éß…v¸°I ÃÀÚÚööö¦Nvoo™·ßØØÈÍ·¶¶6uy˜y겺ºš©ÊŠ.¾¬ºÌ›O…¸ÐÖ„xë­·ðÁÀqÀõë×3s^¿~=â™–ï­·Þ‚>ܹèbš&vwwqûöm¼ýöÛ™òÔÕYu™7ß÷Eöm4›Müä'?A£ÑÀýû÷ÇnÿñÇã—¿üeô÷[o½…þð‡h·Û™9Ûí6~ñ‹_ ÕjáÞ½{cãDZ··‡›7o¢ÙlÎô´Q]ÔüþóŸcoo7nÜÈ<’fåKÓ確¤ñMÒ_G;L5´T«U!ðÓŸþ·o߯ññ1úýþ¹/0ýãÿ`X¨ÿ׿þ5šÍæÔßPÑn·ñÿøèõzèt:èõzøøã£÷ô£E¿‡•ðF”ë<æ¥Yu ñé§ŸBÕÕUüøÇ?FµZ½Ð©p_¨¨O^]â|¿ýío££ªþºÛaêóŸmÛ°mÕj5q~y||Œ{÷î¡V«a}}›››ÓR T*EFßÜÜD­VÃææ&._¾œùkg‰IºÄõ)•JÑÈ9Íœ9OÕ_§>!ŸçyhµZ¨V«3ן– …™”PxI …™”PxI …™”PxI …™”PxI …™”PxI …™”PxI …™”Pxpèv»Úo³j4èv»ãÏjüYçOñ__|?Æýû÷µÞÜï÷ñøñc„ñ´Dw^ùSü×_ÀÁÁÇ™ú+¢“à8NdÌ0¾nÄãÏ:Šÿzâ xúô)NNNÀ‹È)%NNNðôéS„ñ»Ý®öž¦ÆŸuþÿõÅprr‚O>ù·oßÖb¤~¿Ï?ÿ'''(—Ë899Áþð|øá‡S?㤢×ëá³Ï>‰?ëü)þë‹Ïîܹ#ÇÁÉÉ ŽŽŽR» Èž1MŸâç‰Ïîܹs±’œ!Âó>PT!¶ØÝÅÕ*˜ïn¡Ô&òãÓS|²¿ã~?qöñ;;x£RK©$ÃCÍ|Û• xœ/6Ù—œãáÉ >yðÇýþD}´ç¹»ûJ—mfщº¨zœžFzhç› ¿Bà'—/ãíµ5ÔVV`Æð 10àU-)á¹.ê/^@ßó Àó<¸® ÏóR‹m1Æ`„ѳå?¹|W××Q[Y7ŒacH )eÄï{j/^@˜&~ÿõ×ùøööðöÚêí6 !†Ââ0Æ ƒc”R y…Àï¿þz¢>¾ë¾Ú^ƒ.WÖ×Q_Y!Ĉþa~¾ï£~x¨G—Ë—qem µv†aŒè™Ç÷Qþ<ÒCK;¬¬Àê LÒ_!p©ÝFkcåZ Œóh)3ì(¥„ô}ÓÄî`!Ç뺲6p]œs˜¦‰KV¶¶PªÕ‚68oR°lΰ7iá³+•áz^pŒáKJ €ôýáq Kž‡,úø¾Ó41Бg³ébp>¢¨0¬¯¤E—z}ÈW­FíuBeIIXÚ}7h‡¸–ãôBX¦ »RY*#D@úþ¨HžË4Áƒçy®ºáy,Ë‚iš(U«°‚r‡a|HõbÆ åð OŸ].—HbÀ‚Eh?8V?0žešÈ¬F]¬rv©”¨¤F]J• LÛNÔ?ÔÇ÷}˜Bäæ³‚v0m;³þ"ŽMË‚eY0lÅáá‹I ßq` ß÷§.¥°0M˜–5?ìÉ2ä÷<˜¦™›O3àSãGÇ D£"ø®¦²èãiÔÅ4ÍÈ€qýC}ü`”ÉÍgšQ;$é¾¼ /mÇ´C&ý9ç`œƒ3nÃQ"Ö)‡óÇà44íÇ`2è­†a ã)ñ%D=9œæåcœƒsc4R‡#¢Ú@Œì“Eƒs-º° G®w’>F—–và|˜‚þ¡>ºÚ¦F7‹þ"Ø{øòýa’AÂáieäåû¯D›ѾA¬sêÕžzºËÃòøþ¹øêß2¼zW¯¬³ê£Ajæ×FåÕÑiñãú¨scí z`‚þ¯LLXc£;ÆL$ÿóB5*P˜Oxñ¤‹OÍ]ôfU˜1³ê£+ÏX¥ê£[—øñÆõIYËÅ—Q šœ'&™ÖÛt%;¡'K|‰#)0üŸº²š‘UWfIµi#©š“ÎvPcMÐ_$î&™$P( ®dÓDŠw|ñ_Œ –&nš>:tIÓ=ét¯[—$ýuŸÑâÓ™ úŸ›“FÄM’ÖxyÅI‹L²µwŠxü´mR椩úèÒ%mNš¤î3L’þñít ä˨ÿÈœ4uâüºFR]\áqÄ{pø{8ç ·S;«>³êLiúè<ýÆ9ÒôÑq|ê¨Qÿä‘4.XœA«8IWÔIüyù’⇣u|›q#iR~ºG¶¤iDÒÅÓ,ø’ô™ÕT&ƒþ"ñMuž0à §¹ÏIU£ÅG‹ã– ²è£3Ï4ýç9'U§ºÏ õÑI½(>'’rxÐ,®*“–@Â^¦©1X¼!’¥“Fª 裥Óæ¤ºGÑP—qúÇÛKW;$ÍISôuuŸ”¤úÝ#F{ÜÈ,N£ñ5΄uºè½x®ãô™Õ͸9©®9â8ýg°Nz®-&èÿêt¯&¿ ×$KŠò†79Ìb¬žÒÔ9Q\¨øÏ1ú0¥ççÍ“ÅM“ 6]ÂãJ[Ì×y6S¹TƒNÐ?ýê>m>&%ò?˜ N;íê9'ÂFei‹ª£Gœ7£>Zt‰qí~¦Ã8Yô ©Ç”QÿóNáßÀÈ„™¯>uÐ}šQãüL=ÅÌ`$â«§šøÏ¤Žš¦Ï,–æ’ôõÑ<fR&ëê£y1?:dПŸ&>‚„#D ”–Þ‹Ñ¥ÆOü[ׄ=%þ¹ãOš~LÒG×é0áÊ>QM—eÐd”Õ€‹ên$zµQgqáŒ>LíUAÜ𔾯{ÄPㇷ¤Iå*UM.ªOÞTNƒiñuòE\)ú«7Ÿç¹*±2ê?bR¦4 S’‹÷&]=êœàiqu Ñý¡Ámx‰#U}´é¢6bÒ &ñãÑÀ7ndVõÑÁo‡,ú,AÉ`N”Õ•†ÐÖIòÕ¯a^:ƒ·Ûɤ÷‚ÑB¼#Ȩ¶<Óâ«æÕu4Qÿ0M`2az4A¡îÈwGA•ŸRNñ.š¬rúŒ?™Êƒ«=]+ #Â(ñ¡ü?j¤`{¦ü?‹>Zç¥1®¸>º®ÂcãHÖ$ƒÿéú§ÎIà exå§ù!ŠïûÃ+Ë`ÄÓ=r³X|©<=G¤j’QÝŸ…æ‘côѺêÎSôÑ:Í Û=£þ"|S=]…ϸœ»PÐ|ºg ñá)Yjþì^mx5¾ÚñÔž¬^(dÑGëÈ1“ôѶV=AõâMçÈœ4£þ"]meÈ•±«oísÒøÕ½’¼®Éúˆ8á¥ÒQOYÑ «>:sUM!Óô W>tèçHÑGë`ðfÑ?:݇C½úiÃL— b §Ru®ÏEWÍjü »’ŽÏa'ê£nŸS“ÎIúä…:¿M‰¯uÉK]½È¨ÿÈã#‘(ÊÕãÈ¢»îa?!~˜‡T·Ó|Õ<_]FŠé´š>ºt ¹Òô?gª¼í0IÁ£mžQÿóN sÑ‘Ð|•—±^¬CœØ)yäø±¢ÓM|äÈ¢Î[Ùâ£s’>³àKÐÿÜÙDŸ:5Ê ÿÈJÀȨò ߯Ŧ¦AŲ^j dIÓ€JP=d*>Ó]6št|)qÆéÆÍ« 4Hâ óÉÅgš#—ãŽ=w;L:¾ý¹ºR^ê)Á` åR ?h·§Nöí6*A­£x|õÆd†a%‹j¹œ›¯lÛÀ¹ø©ÇœÐhãôá¡.­ÖÔyÞl·Q²mˆØÍ5IúpÆPÑÕ _š> @¹TÂÍ<|­Ê¥R¸¤”YÍ Ì”«?ƒs4 |ØïÃwüŸãcô2– .›&Þ«×ñA£F«C¹,Œ/Õžäûàœ£Ùjá?ôûð_£Tt›È'n4ø°^G«ÙŒJɨñYPaOâü|5 iúÆ^éâºÒ¥$n4›¸Ýj¡è’¦¨` Íf?ì÷á¹.¾èt.Ô7êuü°Ñ@³Ý†PîÛ•)úŒ´ƒëân§s¡v¸Y¯ãÃzz}Xb'<® úŸ3©:açªãç(YÞÜØ€ àVxs@ð3þûÿ|ôÿe{;êF›°K%˜B —X”ø#&b Â0P*•ðææ&l)q3¨-š?>Çj5›Ø\_‡mÛaýM%~¸€<ò‰3ûJÑGJ–…K««(û>Þ†Z„?ÇèóŸ×ÖÐl4°¶¾ŽR¥2¬»¤ä”¤0 ض½ ”Ã-Î3éêÓj6±¹µÛ² „½1ASضõuüÀ !Î'êކ­Fkk°‚v—º²è?zg~•UH¨.h[–Ã0ðæ›oÂÙÞF¯ßÇÀuá7 xAoxòäIÀÉðÆî.Ê¥J–a°‚D“â«Ü`™&À.]¾Œµ~gggp\÷Õ˜I‰õa!/c0M•r–0‚¢\iñGŽ7¦ÇEô±, œ1\ºt ›[[8ë÷áy| z©ú<}ö BÔj5líîµQïMÑ?D)h‡K{{ØØÞÆY¯‡Þ`OÊýC} Æ`…ºXLÎ!‚Qmœþa>–eœc§TÂêæ&¾½w/š²©ú‡7ÇÎarÛ¶a›&xPøldñ>ƒþ#‹ùIŸM«£~<Ç„€` –m£ÚhÀ†lO‹¡žözèõû¨u»¨×ë¨Öj¨”JàÁLŠ­›½J˜æÐ€¦‰J­†Ó^§gg¨u»h4›h­®ŽÄ?ŽnHV;)þˆêÏ êcÕç,ÛF­^‡ ªí¥éS:>ŽŽÇW2è#‚MØ6*õz¢þ“ôÉ¢xÜ"¨øçú>*Õ*ªÕjvý•›t.¢?Ù uMKmè‘¿ãîO‰Gñ)þ´ñEBì°pit[ çEáœ'œõ&=^†¯g¤øÿ"ñ_­“*N6”/Zy/>'SÊäÛß(>ÅÏrÉÞØÜL½'ñãË‚âSü Ð÷µºÂŒ0٤ʣÎ#”¿Ç®)fŧøÀÕ`ˆïþOù)cCÙvdàŽ“S|Š?eüÄ«û8¹ú­©„Ó‚âSü ˆL*GH(·QEÛ+î— „ñé0ŧøÓÆÑ?µ+…HýD@/†ØpºUÂøÜƒâSüiâ uƒ‘¡X¢•^ &1rCƒJ¬&Jñ)~Îø‰sRÏ÷a(CtâJ–Jüô3®©Q|Š‘øçL*1üV]? ˆnÌH¨íÉ‚µB"?-!ŠOñsÄÎI7'«s <+¢cûF1)>ÅÏ_À ×C£ÝF¹Ty>ýÜcö_Êè[uáý‘>†‹®ÃÞ`ú>½(>ÅÏ_ÀËN¾ýVðçñàI÷QFWvJOP{Ô ßÇËNŸâç/àøèƒÁ 0Büx#€2$ 8>:*ŠOñsÅpôò%Á}|,!ðEH€aï8Ž^¾*ŠOñsÅðHJœt»pLsdxù} ÔIs4\;ûR|ŠŸ'>»sçŽD¿ÖÓ§¨=<{î:-¥'Œlüô ÝÕU­¯¶ ŠOñóÄš”@(0˜–bý ‘ëÎ|ÆØ5!ÄGœs—1&ǽ8ç®â#ÆØµEá[”<—ž/ÏHÊ9ÿ¨Ñhüóææ&ç|¼ß}ßÇãÇýãããñ}ÿ×yø¶¶¶¸ão…u‡Å#rñåÕe^y.;_.“2ÆÜï}ï{F©TB½^GšQ}ßÇË—/Ñëõð—¿üÅ“RN¾Ùz _¹\F«ÕB¹\NÜîìì GGG8;;ËÅ—W—yå¹ì|S7c¬À°m­V ¥R ­”ŠrGGG0 ‡‡‡`0ÆJRÊÞ4|†a Ýn£Z­bwwwøø¬ÏóðàÁ0ÆÂæ©øòê2¯<—ÈaRMpívÍf­V f¬^¦ã8(•Jèt:¯j ÷½h²Íðà9ç¨V«X__ÇÎΚÍ& Óé`‡‡‡8;;ƒ÷ªÊÜ4|¹t™cžËΗˤ%`x“Àéé)VVV°²²‚7Þxc$Ù‡âåË—8==…2µ(MËÇÃÁÁ¶··1 ðÍ7ߌlÄØ°XÙÁÁØ«u¸iøré2Ç<—/—I£ñýÁƒØØØÀéé)¾úê«sÉmW½žç¥&ëe¬@|QqÒVŠfÒy湌|ÚLê8NªI •Ø.ŠywŠEÉsù´™ÔêÛ§½7 ÉŒEÊsÙø´.rÏû4[¤Óz‘ò\6¾…6)¤ß ¾…6)¤ß >2éæ¹l|ZMºl§™EÍsÙøz$%“~7øh$]Â<—Lº„y.î—0Ïeã[è‘”®î¿|ÚLÊK5iÒQ‹Æ·(y.#™tÆXv]ΤiÃþ¢Š³ˆy.#Ÿ“†7;'ÝÜÌ9ç|X?]S!Šyó-JžËʧŤÕjý~?zj4|Ïqôz=t:T«Ut»]-â„|ív¶mðõû}jå[”<—•O‹IK¥úý>>ûì³s½Æ¶mloo£T*i'äûôÓO`„“1†½½=­|yòìõzøä“Oν7‹<“øÂ‘lV|ý~æÇ—Û¤œsø¾/^œ{œC=<<„“ªœLÃç8,ËÙF'_Þ<Ïå7‹<ÓøT}BÍtòu:ÔãÓÅ—Û¤†a ßïƒ1†jµzîý££#ø¾~¿Ÿú˜A¾£££s¼®ëjãË›gølztæ™Æ§ê3 ¾~¿Z­6ÓãËeRƘ纮Á9ÇêêjâÕÜÑÑšÍ&ž?ÇqÀó¦H'ñ%™€¾¼º!R«º„xúô©6]’øT}¤”xñâ…6>`hÄ´N¨‹/I=¿ÛßßÿÕ­[·Œ´ÆØßßG£Ñ@¯×Ã7ß|ãø]°¯¾ýý}4›Íh^ÎÁ4ðåÖåý÷ß7ÂBIRâïÿ;´è’Ä×'(ä …okkËàœGÅ@âm ‰oxš€M?3 ã7Œ±^}}dâ‹160 ã7~`³è|¤K1øä°¤ùÔC~ ÀSí <œ²PÖÜø¦Å²ëò:ÚaêË®€ìÅ»¾˜&Ñyó‘.Åà4”#zVÃbTi—q†ÕÔ:y 3o¾EÉs™ù¨f>¡ðx}«ÝBFI …™”PxI …™”PxI …™”PxI …™”PxI …™”PxI …™”PxI …™”PxI …™”PxI …™”PxI …™”PxI …G.“2Æ® !>✻Œ19îÅ9w…1Æ®- ߢä¹ô|yž»çœ´¶¶öÏ»»»\ˆñµÏ\×ŃügÏžý‹ïû¿^>Ò¥|¹J?J)ÿéÍ7ßäív;*I„°45çœ?}úôŸ…oQò\v¾©M”Y1LÓÄÚÚÊå2¶··ÏUõõ}=‚aaYjƒ1Vš²PÖÜøH—bðùFÒf˜LX]xmm [[[Qåßn·‹ƒƒ£ßï«ßPÑİFP‘ùH—bðå2i L}öì®\¹‚V«…^¯‡^ïU­V ív_~ù¥Z º´|¤K1ør™4ª¤æyêõzjÿz½ÿBªiŠ¨Ï›t)Ÿ¾oÄ ‡ÿ´÷tcÞ|‹’ç2òi3©çy©_Ó7‹oož7ߢ乌|4’ÎË®ËB¤³¡H|‹’ç²ñi5é¼O³E:­)Ïe㣑t ó\6>I—0Ïeã#“.ažËÆG§û%ÌsÙøÈ¤K˜ç²ñ‘I—0Ïeã#“.ažËÆG&]Â<—®î—0ÏeãÓfRÆXjJ»a‘ø%Ïe䣑t ó\6>IgŒe×eaFR5™xÂám\:š7ߢ乬|ZLZ©TðìÙ3ìììÀ²,„Ïb»®‹Á`€ýý}T*¼|ùR‹8óæ[”<—•O‹ImÛÆóçÏñüùsÄ‹<|ø©ÏfçåÛßßÇÞÞ^ôžëºÑ6¯ãt™EžI|÷ïßÇÞÞÞÜøfq|¹kA…s’^¯Û¶aÆÈËqôz=ø¾¯eèóá³m[+߬tÑg_¨mÛÑãÅ:ùŽSO_î‘Ô0 ¬­­¡TJ~bµR©àùóç‘hºù⼎ãhãË›çÆÆFª.:óÇþíº.ž={¦•o0¤Ÿ.¾\&eŒy®ë®ë¢Ýn§ö˜••<~üŽã€1æM[*ϲ¬™ðåÕÅ÷}´Z­ÔíVVV°¿¿¯M—4¾PŸv»­µÎÎÎ ¥<§]|yN÷€ßýíoó*• ¤”ð}ÿÜ«ÛíÂ÷}ضû÷ï{~ì«…/Œïy^ôÒÄ—[—jµš¨‰ú:<<Ô¦KŸªïû(•JÚøŽŽŽ¢øñ6ÐÈH)§zØð3Ã0~Ãã^Œ±a¿ð3›Eç#]ŠÁ'¥œ¾ôcP¸ê©vNY(kn|ÓbÙuyí0õé> {1Å®/¦ItÞ|¤K1ø€œEt¨g51,F•vçaXM­“×0óæ[”<—™/·I „Yƒ¾ØPxI …™”PxI …™”PxI …™”PxI …™”PxI …™”PxI …™”PxI …™”PxI …™”PxI …™”PxI …™”PxI …GÞ‚eÿ­%ÄÝÒ²˜ºž…Ä|)áp ßHú¡€yLÃ@µZÅÊÚVwvPi4§ÇÇx¾¿î‹èõz`ž úÀE“7éR ¾\&Ý0ƒ` /ðÆö6|ÇÁ‹{÷plàðƒmYxypÁŒáäzcøH—bðå2i‰Œù> )£dÂu-ÃyŠ!%˜ïC¼z¯´|¤K1øò]8ÁKàÕðo#Éòà=¡l¿(|‹’ç²óå2)˜Œ¹.çj¯ö()Á\&cp¤ÌõéÁ¼ù%ÏeçË7’ü€=Jç†}LœWs“…à[”<—/÷Hö*óýè!^âïoQò\v¾|‹*‰ÁЯ~<)‡É½N]ð]¾EÉsÙùr_8q%îy`ÁßÀpQ—KWÞ[¾EÉsÙùôŒ¤ág·® ÎXÔ£øð;x¢'‚¶(|‹’ç²óåž“†sÎØð“…XbRF=‰!ÿ\hž|‹’ç²ói¹p “ážÎXÔǰW…Ã5,}Ì“oQò\v¾ÜßÒÌh!—ùþH2ô(e›Eã[”<—™/÷œ4üÉ0ü„13˜›8Á܄Ŷ]¾EÉsÙùr›4|qð5( #ÚnÑø%ÏeæËeÒ0£RÁ ßGµÝ†°mÓ¾ï8àý>‡‡0*øÝn®„çÍ·(y.;_n“J¼T ×ÃþgŸ¡À æ&)Ñ·,°ÍMðR Rƒ8çøCø@÷@Jœ—.iáÓ‘gÿì û_}5ÌSÑEgžcùÃÀ÷gÆ7èõ°ÿé§3=¾ÜsRs¸ž‡îá!lÓ„ÇÜà}@0€wt—sxœçž Åù×z°‡áòlj&>yžÁ¶¬sºèÌsŸï8ð, RJtá†^¾ãcX)ǧ‹/—I=àƒÁ&ç°+@™,€3Àó} \à|¸F>§ÓU©( J8®«…OKž†‘¨‹Î<Çñ :• %\×Å`0ÐʇÁV­–x|ºør™Ôpæº(««`A ‡v À9:‚ÕhÀyþ§ŽG3ß ÓA90©Dp¯£”ZøòæY1MˆV ,h@U—0ÏÁÓ§ÚtIâë¡\© o­ó}8/^hã+1¸.Xµšx|ºøòÜ Ò»ïû΀Õë°šMƹ—@Ôë• îîïã¾ï;zºøŒF¼^¯×a4ºøòëR«ÁLÐ$|‰zǽž>]øB}Œzf£Y­jã{ÙïÕ2âRÛ@#_®‘ôÉsßÿèîÑÑìýÛ¿Y /˜L¼zÆÚCPþï‹/p àÿI9xîûÿÀ­|wïŽòI©ƒ/¿.ÿú¯ãuÑ“çd¾»wgÃ×éX Ÿýû¿Ïòø¦/ýÈ»à?Mµ3ð¿¦)”5O¾i±ìº¼Žv˜út}6Å®ŸM“è¼ùH—bð9‹èQÏúÃbTiµ~zõ¹ 3o¾EÉs™ùr›”@˜5è‹…™”PxI …™”PxI …™”PxI …™”PxI …™”PxI …™”PxI …™”PxI …™”PxI …™”PxI …™”PxI …ÇÿÕQn¿ŒÖ'IEND®B`‚Carla-2.4.2/resources/bitmaps/keyboard/export.sh000077500000000000000000000017471420416754300217110ustar00rootroot00000000000000#! /bin/bash # Export several areas in keyboard.svg to optimized PNG. # Dependencies: Inkscape, pngcrush. # IDs of target area rectangles in keyboard.svg: IDs=" white_bright_normal white_bright_hover white_bright_on_red white_bright_on_orange white_bright_on_green white_bright_on_blue white_dark_normal white_dark_hover white_dark_on_red white_dark_on_orange white_dark_on_green white_dark_on_blue black_normal black_hover black_on_red black_on_orange black_on_green black_on_blue " # Export images: for ID in $IDs; do inkscape keyboard.svg --export-id=$ID --export-png=$ID.png done # Optimize opaque images and remove their alpha channels. # pngcrush will not overwrite input files, so use a temp dir # and move/overwrite files afterwards. # pngcrush creates the dir given for -d, if necessary. pngcrush -c 2 -reduce -d crushed white_*.png # Optimize transparent images, keeping their alpha channels: pngcrush -c 6 -reduce -d crushed black_*.png # Cleanup: mv crushed/*.png . rmdir crushed Carla-2.4.2/resources/bitmaps/keyboard/join.sh000077500000000000000000000010351420416754300213150ustar00rootroot00000000000000#! /bin/bash # Join images vertically, to create a sprite sheet. # Dependencies: Imagemagick (convert) convert white_bright_normal.png \ white_bright_hover.png \ white_bright_on_red.png \ black_normal.png \ black_hover.png \ black_on_red.png \ -append bright_sprite.png # convert white_dark_normal.png \ # white_dark_hover.png \ # white_dark_on_red.png \ # black_normal.png \ # black_hover.png \ # black_on_red.png \ # -append dark_sprite.png Carla-2.4.2/resources/bitmaps/keyboard/keyboard.svg000066400000000000000000046541141420416754300223600ustar00rootroot00000000000000 image/svg+xml Hover Down External Workaround for https://bugs.launchpad.net/inkscape/+bug/180890.This text extends the area of this layer, which avoids rendering issues. Workaround for https://bugs.launchpad.net/inkscape/+bug/180890.This text extends the area of this layer, which avoids rendering issues. Workaround for https://bugs.launchpad.net/inkscape/+bug/180890.This text extends the area of this layer, which avoids rendering issues. Carla-2.4.2/resources/bitmaps/keyboard/white_bright_hover.png000066400000000000000000000013221420416754300244060ustar00rootroot00000000000000‰PNG  IHDR©:îL& pHYs × ×B(›x„IDAThÞí˜O‹Ú@ÆŸ8“ñkõ`©µP*¥".-H»—BK{éGØÏYü…m{ð°§¥ÙeŠªPbvzp“1ÉdvqØÀ¼§¼ïï™gžI‚µ¯ÈHQj¾ªùÍübÁÊ0¿Xí¡.w0J»¯Ÿé»Ö½Êàm=Ð%èö^î û'΂…p¯ò#¿¹øÊ‡0J›Š¶ÛçîÄ?Ò6§7{~˜Þ<Æ‚…`…Źߊ\|åC¥V¹èCfi^ àå­JÐÄ_fq&QÎ(%†UŽaÜìK#`ˆ3¾[ƒûl%Êá9¢û:a¹–‘€AÀ8Ô ÷Ñ%ÊÃY.ÌÀ$-“Jÿ‡‹t‡HÒG\*©Jš…RIUÒ,”Jª’f¡TR•4 ¥’ª¤Y(•4õ¤†¤5¤R™’ÝÓEºC()©µÂÚV_×£¬þoFâr¤'3î"cè>¢íc÷Ú Ú|ó¸Ãaç:ÂÚЏèOû/hòí{±hR£ü¡ty{=ü´ßV9¬~ªŒoçÐê–žÿ¾ 0üØzÃï)g;Ÿ}—óýc;„ï‹MOúËà ¹oe3«Ÿ×‹õÄ(Ù4ñEå.À/zôÞ&qv ¢.6=é×0D;Dž aØuXŽ‹O±¦‰F±ñ¼„;Êw–cS‰³åXäc^ÅNòÏì¯Ô#.•T%ÍB©¤*iJ%UI³P9¬DY¥VBý*YŸòœbz)ø$ÞL1ˆ’N“õ)Ï)&®à p'˜¸ÔD¢OwN1s4- ˜3Ãl%:Û,YŸòœÂùÙEÚŒËùñÎŒÎ׿+QŸò\;u¿^”Š­?¶¹vŠŒÔ? {x÷N÷ù«IEND®B`‚Carla-2.4.2/resources/bitmaps/keyboard/white_bright_normal.png000066400000000000000000000015531420416754300245610ustar00rootroot00000000000000‰PNG  IHDR©:îL& pHYs × ×B(›xIDAThÞí™ÛnÚ@†gödŒ MÔ$©š´ }ƒ^µ/‘ÍKT‘š«HQoÚæ$UErã^`Ö6·ªZÉ–1Ë¿uù&ÄÁ‹ ÉPx­N!šFȇƒÝ® "ÄiŽ6܈€DQ¸®Nç>y.Þ" ¢èfYÛÙ„ˆ]æ<×UÆ_ˆ­mŸ3ƈHÛ“³p |þ–¦Ln=óˆ¡ñ°¬5""é(²Ïæ>ÚΙls""'Gk!"BÞs>3þB8M—ÍHI;ñÔîGÊñ]""D„e­ébLªµ“øè¼IFDDy.-—õŠ„Ø_pËq椡¥Ó£Ú²˜4ÊÓ éÔJ|r]bÒ(?à ±¿`œË9©äÄ2³Ä¥ŒIsµ˜”iΟÜɘtEbABìŸÕ€ –T8ú/\ HK\5iMZ…ªIkÒ*TMZ“V¡jÒš´ U“Ö¤U¨šô¿“ZK«p´h’þÐ¥0!CÊ[O³³O}sÿÂÛ‹Z+{7SàâI£ù ­Â‘–Do~ ÍR=õŸþ¢Ö[ .rë¨ÏW'ô ºé„LšòÞ4¾Å¯OÞôvšæä¬æ¡s÷6‡žÊ¿ðQÞsiV'ïºßì©jº_?Àæ®—$xûö%ÎýúCW­"…†½ &¡ÖúØ~ËSvJc£áxr0`L8¾ÃÔª›©?Ú 5i­õg±þ*9|€†x»7¾Ÿê €p|O¦\øúùG„cȤò.Ó® '¨ÐíŽô8ð:ë~ö~Í’ÖÚxìu·ýønV•B·3»M¶„ÌçÙBg-ÒãÀø¤ŸaÛMü³ Õù–ší©•ÙZ}g6 D}–âW²ÏeêWçôkÒš´ U“Ö¤ÓL/2¯ÊÔŸýü ã gÿ.š™2õ«sú‚~ˬ4iÒš´ƒÒõ\r—ßÀÝuéú®îqY¹¿*]_ÀÍ,IôpSº¾€à» K5 ܲõñ8 ~èEµ=Y¶>CEêÌIžkLPE-IEND®B`‚Carla-2.4.2/resources/bitmaps/keyboard/white_bright_on_blue.png000066400000000000000000000073621420416754300247200ustar00rootroot00000000000000‰PNG  IHDR©:DEî• pHYs × ×B(›x¤IDATxÚí\Ë’Ç•=7óf=€Æ‹j±›bS”DK²e-dÉ#‹«‰±¹ÐÆŸÀ•×þÉÄü€ÞÛÞÛ6ámÉâCv£Ê;‹|TVáÑl;¡¨)u2ÏÉÌ›çÞª}þùç8ßʃ™¹Mï|ôŸÅëo @ºßP"—_=ùâw¿ºüæÙNÐöø¾%¿“Âëå—rÈ›xݸõ·l¿ñJþâw¿ü§`®êÃÌ|ï‡?™ž½?iÖ DD ˆišæëш™Ÿüú¿4M³\.›¦éM‘Öš™µÖîýð'·îo6iE"DXk¿ó0§÷¾; 5k‚#"@‘Ò,›§Ã¡CÞÄ«i–ÿÈlýÑìÞû·&#fõqß„ÑìÍïÍF¥uÔǽXkÿ13ë<•n‡Ì¼EfæÑéƒÛ·¦ÃºTäþˆ@l#†Íâòf^,Ëå€kcí±\.•RƘáÉ;§·fÃAe!"DD JS\Îs0On͆uépD „ bm#V¬an–¶ð²°†Íb÷ÖNß>=ž *õq¼¦ÈÀž¼sòÚtXWVÇ @Á|™¥üÉ­ÙѰr”7éÃÌlŠ¢®Šª,DDDP¤ÄMjhXk¹(ˆ¨iš-mÇ£iš¢(LQê²*ŒÇ„à»#µ˜Ý1¹(UQ&âQ«E VÄÅv^M•È‹².ËÒ˜Ž>— ‡‘)ŠaUVÆôôq¼,¬1ežJ•1Ûõa­µa.)˜•“RˆÜ ‹† ³µö:Í»ÃZkXl c"Žˆ›ÏD„Æ ç`²1\8V^&È÷ÖZ+Òk®âµhl#6F—Æôôq¼±Œ˜Ù0Æôôq¼LÓÖ7Ri³>¬”"å7 ·:Ù¸Ÿ ´bE$"J©kö@DH‘ÖJ)d‰ÄI­•VjgLE¤•ÖJG€¹Åg-…°¹—V*ƒ‘"°Ò0ÕÇñÊÅ$­µÖª§ã¥•¦l•´Ú®ÑÖ.:œ)‰S;°¼öáWD{ªÇ‰nÛ/˜1ãR‹8D@@¡ŸË¼r‰óLX£OØü30cg:ú8^­˜*‰lׇà €–D ¿Š0z×o¼Ó tqBªáZÜÔ;¬ÇEg®¥}ØÄ+‡Qà}ÊÄô»ÆŠ>Ž—Ýq2uTºJFœË"B !¡¤OY£žô ƒã¹Iûi&²HÄÈë%!–„O¶ñÊmWBÄYåu#¡VôIye¢õaÿn 8âB:x¹s ?©“©Kl¨„%rXåéàoäu“õ´¢¢J»Tg­ðÊ\!"¶¥·QÅI' ¿1¶;ƒSÛ\‡(a“¥>›â´›ˆ´ôÚ-x=/d1B®ÖòÊÙÅdƒ>7Y!©º›õáð]¿8 iŸÚY¹++»‚ñÝÉœOÓw¾S ‘3ØÍ¼l£¶·†W&â4êêÓᜫüv}Â~ŸŽ„(d®ˆ_ϧØ^p³`Mç®)S«EÇ &>å²…rU}Úðš¥R؇WyÙ̈ë^¯Ð'z½$o"g;>?Ó™¥f¸ ‘¸! í+·…—ÍedCY啇=ùÚ“ó²¡u*­Ñ‡C °E.¡è’’ü~÷öÛÊWô3múŠ<¥ÂÔâ$Íbûl=¯ì½H²ù¯L£Ÿ& èñÊÏû©ð}üºwU*+¾’6ñÈuHŒqœÛÚC`ÊÒ'0”°hcþf^™Ê“éêŵy^kôI¼üX²]ŸX×ó&ÓŠ(‚H[’ÜIÝnc‰›õó²³?¢' Ä«©X}]Ë+3yrôô‘BÞÄçwõ ›u¦ÑOœú„º^0Å®R ­ÉÉ\;E½¤fI '‡T[ "$ VâV^¹Œ kô‰È¦õútúŸ­ÒV}8m ›ª›»F“ýÂã ¼"RÍÂZ½¤±Cg ¯üqêëãxå­èÂzú8^¹+$îéÛôaÿ¿a#‚ˆød˜hu&îÊ*ÅñAˆ¢¼•ç*”îGyè6”E;»W£°B{ú´¼vÇ@â|h¢Ý`…x•ÜÁÍú(´‰xHçê„Ì,Óõ %?ÍVªC⨦u«Öæoã•×ú}¨]Rã$+8‘W¼ö˜ÓÏ«ô‰µÔRøûÚbo$^ØU:ZÞ}„»s”rº#Á_,íb\¶òÊa–ÌŠ>fyV(Ñ}ïˆÅÏÎ+ô ×rÚÐf!ºN$/@up˜‰û+ÓIãTŽÁßDm*†üM¼²ul-¯ÝòÃßÓ'¹î±{GƒJÛõá„MÒu·ý„Z IVÜ*‰8Pn0òý# ‘u÷L9!3E1éÒ^6üíéãxYw‹å®ŒŽQ_¡0~ù*m×G¡·£‡Zü}^®sYÆÈår N²ÚH(G)´6"Áií[‡Ë6^yŒº-öye­û8×èÈfô3ÆŒ-úŸO¡ Ó-ÍîèF«$Í%nöyJù}$>jà– .Àx±Âèoä•É(ä)ÒçÕÙbw#•¸Å.¯8f;ö3œ¸UŸ$¿wËÔßÜ–‘Üuß² 8I.$ȉfžXÌñZÓ4#é­û ¼2}™s*}}<¯™ÜYý¯c†òö{j#Ü}8ý ¶J>“àÕ³ߣ¥8áпÝ1)ZHjYùÚ´$·óÊËïC[Ñ'Ú«!AE¡à¯ÌèèS¡4†¬Ñ‡Ûo;7¼Œ„Hœ›Éôù1æ{œv÷Ê eéfp¢5‚Ͼ$ æy!“Öél?²vÆnÑ¢Ë+°M:¶êÃ@Ò$Úå(䧉'™åËœÃJp¯hí|(Š!?#ÉåDi:ÛVZ6ñRùŒÖéãû–µPj VxeÍQïŠh»>Êó…eL¬wé€òoƒáõ›/Ãó[€ ÚýL@»bJÜSœÜBÿ) lxÅN^¿õzWvOß@hgFÛô ­ìŒ³³­ú„§=¨(bÄvÆŠ©TÓ÷?¹~fï}<¨+R*ʼn>K¤Ô`XOßûøú˜Ó÷>®)âÄÁeŸî¦»iÁ¨* ­õª>®¤õ ®vfTפԪ>Þ’(U×ÕìÝ]0ßÿ¤Ô¤ô•ú´>?^²ie"rUL¥õt2šÿárÙ¼øýo–ç[Ú6õ`ôà£éŸM&c¥”ûm54Òj6ðÙrÙ¼øÃo¯ÆüÎG“N'cÅJ¨ÅñÎ-”n׿÷«¼”VÓÉhþáÃŲùæ*F\Õ“?˜~÷ÓÙt¬4­êãx)­&Óñù‡¯ËèÁGÓ>›NÇJ«¤vÞᥔšMÆüh¹lžÿá·Ëù•*ý`òáÃÉäH±’«ôi¯ßëK® ä³©*9¹w†â‘z÷Swß‚ÏÝ¿!ýŸ_œþôçnŸNG§·ë²dÃ6Ái‹*BlLUÉggÄ?æÿ±§­¢¦ÓÉéÉqYÌj^€DûâSšÎ½›x±áªªnŸÝóH½÷#w±k¯ãG?›ŒG'·_Ô•Ö¼ªãņ몺sv¦Ì#ýO·èãÎÍÆ§'ÇU]²1âw¡>/6\UÅÉ7 ÿ‹ßþ„›ôqÝtztrr\–%3_©£§”ûœBÅ*ì EYhÖo½y÷î×/ÎçËù¢i±b¥±ûòk tv÷v=¨Ê²ÔƘ¬â„e¡@o½ùÆó‹W¯.‹ÅûÊõäôõiRJë¢4u]¥VÌêt-ŽÑÖ['Öò*Ê‚´ºÿîËË‹‹¹]4¶±+D^_~ù”™GGõÙ׫ªT̲A×S¥èíûgoœÎÏÿ÷Õå|amõq¼4kSu]•U¥Œff»AÇ«( îß=9ymúÇ?ÿ…ˆR}üc­Zë”UQ…ÒJ+íжëé@D½ 2 ÍšY—¥ a¶‘ÆJcÏ_Ï/æ/ŽÆ£Áh8¨5i¥6á ¦ÆÌ– ÖGƒúüÕùù«ó—GGÓÑðx6‰8îÕ&õÁUI»½2ð›xif&”¥†$PÀ*¯U¥•@Ñv^lX…áÑ ê鳉®âÅFkEÍr9¬«ápxµ>r-}8Î5g‰)Y(a? ×L}ÊÙÞþÙÖ|ˆ8{‡Ö}:mYûQ‘ i" ¢D`…Ü­ŠKuÙ\ö/6pö'äxâ‚ÖmÖ×^]H®Å3I‡ùÕ3Wœ=ÁéþšC¯ÿV¼Û­0IÿÎ~á\÷—<Çÿ¿£“ã­›b€,:7¸cͤ;àìŽJ?ðÞ0€´n¾ö°æ ½æ8ûƒ³î~= '‰¿òé/û¥Ogõ¾pö'<‡ \û„'ÀÉ]î—8¡‰7ܸRAxÈ[8{‡Óz=ü¯q‰Ÿ8îäß?3µê@8û‚Ã}8A$\¬h/ù;Êb‰ÏŽ­íÖç߇;“b«´vs†ü-Ž"‰€ø0"ÖÒ›Jœ=Âa„*€{k±X*kAdÃ-½þ¹ððÓÎ$¤àžEnzçpö 'üÎVøÈÙÄpϰ·äîN£ðSŸ$ÉÏEÄLò€³W8 àb>¿59ªê*Þ0„ø¨ä~­O—BX4V‰tcs1Ÿpö‡<ûæå“¿ü½,‹öyòuÿžÅpÛL°Ž¾†0Ÿ_>ûæågïpÀ³ç/çó¹›2¶ê…Z,@ܯc>Ÿ?{þrxÀÙ7ðâÅóËÅþyéþÌ«‡ÛZ(<£{¹X¼xñ|ø-ÃÙôÔ„Ï»ö¡? €ž>yùê]s¹Oκ¯oxÒ@ì\%a±\ÒÓ'œýÃyüøñ…U/O¿Ò3 ŽfÁŸØ…K¦¨ó“PX7OoÏÿZ){ÀÙ/züø1Ç·òø?€eªrªØ~`IEND®B`‚Carla-2.4.2/resources/bitmaps/keyboard/white_bright_on_green.png000066400000000000000000000075421420416754300250710ustar00rootroot00000000000000‰PNG  IHDR©:DEî• pHYs × ×B(›xIDATxÚí\ÍrÉ‘þ²~ºHÐH $’³;t„/ž‡½cEø æö Ë>Ø>ɼ€÷è½Ùa‡-‡G²=#™Òˆ$@tæê§«@“(^†k”B‚Øl|UßWY™YÙÐ×_}û—lÆSg/žKQ"âîP¢.ß,ÿò›×‹÷Ë ËÃâôÅÓêiÁàίÔå·Ë¿üO.æqÁÔ`ˆÓ՛ū߼^¼_nãuŸÞÏ^<>-õiTz}F[Tºz½|uoå·écŒ1ç¿>›}6™Ž§ZiRD $(µªWïßZ­ÿÍ+u]¯V«º®Ý i#"­µ1Fk à³_Ÿ>>ŸNfJi""D×õÛƒ·Ö˜ßóç1Ofç“éxj´ȱ""gªÂ\sýîàÕöwßüi¯º^½¿µ&‡Ñ£óé£ñL#Í ©™ÿyð. óäÑùt2ž­£>Ž—ð½ÑÙ*ͬ¶=úcÌáéøÉäI5¨)Rä‹",l­]ž.1777«Õ €ëcc[­VJ)kíÁéèÉ츎@DÂÜ;bEQ.—7˜óÙ|XTJ)ˆ@Šf¶Æ®NW}¼„Ma7‹]{?<ÏŽGƒ‘R*êãx(Šb¹ÌQi>›Wƒ‘ÉëCD Œ±˜ãÓj>›c"Õ£1Æ…”ƒ@;«#R$±Aj©­µDT×uOß±Õu]…-L5¬EqB ‘@¬Õ»bkŰ,ˈãš„E ¨……‹ÂöóÊf4(eQvôq¼b “Áh8¨J[vô –ʦØ}œN%[öëc´Öژ®RH×½ˆbk«­aæ»tï3cŒ±ÆÚˆÓø4"+µ±vWLm5ÖM›ÃqvíÇÊ"Z )ôm¼òiǧ°}¯šë•¬[¶£ãµªoŒÑ»«d­±žøv}ŒRʹC¥•[Þî¼E³@H+wA)uÇ8Z+­tÄ÷hP* S‘&¥uÄq£…@ LìúUDý¼ò)"¥•Rº£ç¥•ÊQI)­µV}Üh•ÖD*CyÒ¤µê×ÇpÞ&I\ ]–€Õî>÷^vê@`s.¦€#(äñé˜ûyq6#¯ë# `»b²8)Úú8^œ5Nxå¥_Ÿ8÷ÜŠ7íû¼¾¹}~â9…"@wÅdqb—CØO9's¿•W6#†tô‰ñ¾³ñ»#fgœ)¯¼q†õÆýú˜x•Ánæ&5FÎeÕ1jÓ&ÎÂäàH"Ž*霬ûm¼òzO×ý:¯l̰´Zú8^ÙÊ;Ì~}üÜ£á€ÔŠ;^"C©ußHÉowÅDc‹‡·›¹ßÆ ùŒ¼¦²Æ ™ž¬Yô©>ì#cæ8#Á}âºçàH…ˆ„£—Î*w3D¨Á0A¢{[´Ç¤°–aôóÊe$ IGÇëž¾¤£ãu•ܯO“ë1Dy»óë#:¢*vgÅxÌŒŽÜ,5£ +›91ð^Î.wgÄÙÆ:¯lÌa¯{æ}ú4s0‡ƒ¶¯âloÆk¹ž«XåY4ü#ƒȹ\¾.û¼˜òü3b¶ÑÒB &Éó%B Z‡×=<®ËIûôi­{‚$… Gž”åyHR!‡O ÄÄÈÉ`Eˆ…8âÄÎOzVÖý:/g1jv›xeî†$æz‰>‘WŽ/!b7ë=ú„¹§&Fº¬8X\³¾«Ø1¼ã%g»b‚šô*àòÝÁsK¸lãÒÀÝyHë¼Ä…²19„ŒŽ>¤€¼r¿>&ÞêBŽÞçlGDÈûü,ëcçÐÿ¬Â¥^9öÄ~0q\Í*ä´izßÏ+/6K³\ã5ÝQ%˜×ô‰¼2ÆÉ`!f’~}Úu=W f÷œŠ3w/`bGÌ?ïò—Iˆ8‹õ=ŽqÜ5’¸âe·®·Æ+“ ÀBÒÑGZÛU%Ž‘1ÕÇñWàÙÓì×§Ùã¹ ·˜!Kr¦·Ó`‡3!¸x–·îYÀBq ¾Ø"€º{¼¼r3ͦX´Î˲2æÉgÄm}¯ìý½Ãì×'ÆûP[ ¸Ìˆ½¸u“k}-×LÈ[y §µD+(7rž‚’u¿…—P^lNâý¯ØoÆ<ºú8^™6Jpûõ1áW ðïtQÂDÎ’ä° Á÷ ×OV]Ï?Þ¤Ç%©O‹kh+/܃‘wôñ¼²0ý»6覬¹óÖ£Ïõ¸Ô ‚rîÁ¹QÌ•v¸¤8þàTfŠÿøItU;b Ù|Ìõ¶ñRYŒšÌqMrDB8ªÑÑ'¼æÌ}<Ò¯¯ò';¿ÌìÆ£ä°Š3åqTÈ·),Ü ¥@Hq‚PþQÖjº›y2 I ³‰åL>_Ñѧᕱè»~}LzIA…“>B&“˜¹FSAA¯p,-3õùÎ÷’;aâJWÍd÷ð"¨\ãÛ OðY˜ñœN[Ç+{ÕÅÖ£OÈóIÂ8¢{ô*y_”#SxfÞà$^-oå;n/4j‚€€“\o+¯,B©Knë–VÎ GêÚú´xåŒ4}óf}b¼—p6”‚‡»ÂhA»wÆaH3瀑3NvEªÁ!O‡.I¼ßÂ+דy³ëè¯çMR4ËTJîØ³qÔ}ú„ S¨'…ÔCÒ°‘Å+æ¾Çå±ÔÍT!‡ðàϸµÌ¼Éô¶ðr‡—wï?´ô ¼òâA)êèŸé9Ì>}ŒûÌž©=aâ &kêÑv u‹0ƒñyÕ® i l¼!¥ØmçÕ¬Û;O":¼9{¼Æitô ³˜¿o¼M§©y >M|¤ÎK`›Pq<¸$©gVó&,Á¸c3âãY‹É^yÖœì|Zú$rgbnЇ\ù O Ô¯ ¢G#qãÓ| ›1€`Æ'ñiÈ«ù‘4>?$ÇÒìE¿°•W£0U]}"¯Ì©RDª«O¨ªä©ráG58õ1HVEÔ˧DÞL²e¢Plê•!OÊ Y 58q쩱û«[yåmð¨áÔÖ'ÉvgÔJ;¼òÓüÖa³>ª=ò¸*C!7^$*«âîû›;8*5"Âî˜k8ÁŠCTO7[Ûy!‡‘ÄiØÈ ìŒIi[çEÈQ)JÑ« \›Iˆ9•ŒÒãaõäËéÝGðø‹é¨i¥SœdgOZ©ñhüø‹0Ÿ|9U•Ö:ÅIèE#O¸lᥴc4Û…Ñd8mÖõñÕ"­ÇÕh7•¾ *­éã^4©jX=þb²‹J³ñp¤µ¾UƒÄûz6Ñu‘O>µÑÓÉlþâzU¯¾ûíÅÍõª§ïbhg?;xòÕdz4qžŠ8i©P)=;šþðÕÇß|ÿÛ÷·b>úüpþ«Ùl23Ú} :‘˜76i-5ÿnäeŒžNfÇ/®WõÍ­ŒìÀÌ~vøèGÓÙ6j]ÇË==šÎuyS¯¾¿‹JŸÌ¿šN'3>b–êãx)­§G³Ëÿ¸¾©Woÿ÷N*¿˜MŽ&Æ)ß«il!xE·BBñ‹°¦äôÓçz@£_@ !"úïïþí¿>q&6=š=›?–Ua¬ Á¡äµv(Õɧϩ¤êK³'˜-ˆh6yôlþt8k‘àÄóÌÔá×ËË; ŸŸ=SC:øe ›y=ûÏ£ÉÑäøñ|4¬tøÜªãå0OœJ?7=ú8^¦³çóçÃrh­ÐÑÇñ*Œ–ƒã“9 ~®lÓÇý0›ÌžÍŸ–ÅÐX{«>¦c;I‰Š\*C€@Êr`Œ9?;?9>¹¼¾ZÞ,n–+A]¯˜…ßüýƒ={vVUÕ°Ú¢(Šb'ì’ ,K}vöï—WÇ/XÞ,¿}ó­Æüñ\‘ÒFieʲWã¢(µVÆ8™Z8¡¸Ö×Öy•å@+ýÙÙùòøäòêjUßpÍ,\¯8òúÛ?þfŒ9œŸ •1f›>®ÿÁ` ´>ÿô'ÏæÏ¸üx½¸®W«¨ãe´)Šr< Ë¡±Ö»MÇ«,Jœ=ÿôÉìÉ^ýÑÝõ!(¥µÕÆX[ †eY*¥´6wÑÇxÐd`HüeÜÊ€ˆŒ6FÛ²(ƇÂ\3¯êš¹¾¼üxu}=_Œªj¤”ÖZmÃ8_ *ŒÕJkmGÕèòòãÇËËñøúèpòÉô“ˆ£•RJ‡¼§yôòÈ»ð2ÖZ¢AQŽüg×x WÚ)­úõqãq®Î;ªÆ}¶òÚ®O§Òª^­FÕh4ݪÿ,÷mú´Ö}‹B”^AÄnÝ¿¾Èö8§ëó c6DáÓëaÓᑊˆ³ˆpÍ|U_mÕçàĹ÷î,î7ÂÕ`NÀørySøò"jÛÓçÁà¬}›µàýMápÕZ½½íq~ô8wý&}ûÿ×Úsßþ ’„ÿ3KçÊúÍ{œ‡c’7J‚áCˆ 1wHPzró`pºy~Ø „C ¾ÞE¡èåßÜc‹{œ‡‚£Ö€$ý+Þ”8|דs·K߀ö8?vã/†o eeÄÝ€Âûc½[‚óˆï’=΃ÃÙäóƒq?Ä Á‡ÄO·öµ=ÎG% ®WÁL¼ÿ¦!^„¹ö=t‡²Çy8&€øëËÕM͵Râ«>bħ˜™™#NtE{œ„c;Š6%Ÿ)ÆgÉBþüKò†®=îqŽp½¸šLªaÕœkޏF, –ðX@˜™µR5s±*®W{œ‡c\|¸xõúÕ (ýQa¢/9?òˆø·‰'Â×ËÅŇ €ö8 Çx÷þb±XxÛI¡ó0 ‰4ÊF""‹ÅâÝû‹“=ÎÃÂ1>\|X.—á_°!`Ë% ²\.?\|x„ÉçaáüWõá§7EË€¶c%ˆ‘årÉU{œ‡C/_¾\àúíôÍ?Çß±ò_MÓBˆxÉ3ø(V“>™½;.1Øã<,zùò%öí_²ýªˆ8[®~()IEND®B`‚Carla-2.4.2/resources/bitmaps/keyboard/white_bright_on_orange.png000066400000000000000000000073071420416754300252430ustar00rootroot00000000000000‰PNG  IHDR©:DEî• pHYs × ×B(›xyIDATxÚí]K“GÎÌÊêžž÷®½’VXÆ62B>šÀ°ð…€°øúœ9ñkü8à‹}´#àì0„yàH8kwg»+9Ô£«Ÿ»SÃÁ‹§b=ê™éþ*¿¯ª²²²«ÇøÎ;ïÀ¾|+ 3óá"ûé_:Ê @ì+¡?~¹ùÍïþñød³ôá"ûé«Ç/e„Ð.FèÓ/7ï%aþìÕã2…FêŒà§_ž¿÷Û<>Ù ñÚ¥v&ècyU»`¾züÒQ¦Ð}œò >ýâ|•ÈaöëÃÌüðõçïßY‹RŠ@Ęj>¬X½ûÁ_ ªª²,«ª‘V•ˆ¨”bf¥<|ýÎ+ÏN—„ DDÄ€Fªùâ k~÷ý?o‡ùÚs¯Ü9(J)D@@@ÆTÕlþ„Y¿ûþŸ†x™ª\Ìs £çïßYÏ–‡JqÐÇò1‹ùcf~÷ƒmÝyåÎzº<$¢ å%ÆÌç“Uš.Iñˆ>ÌÌw狃Ùd†H„HˆbÄ3ŠùîfÃÌeY€­£·”eIDZë»7g«ƒ[Y1u½YD@ÐМ§a.of“)¡ÅAD$cDÄ0ë»e9ÊË(¥Sj¿5[ÞšLçˆô±¼@qætyx+/f±>ˆˆÈœÝÝœ§©4)æ€cú03g¬uVè,G'%¢# ÖOJer͈XUÕHÝ¡TU•eY®u6™j×8bÉùœ09Ë ­³€ƒ€H$""bDŒÉXóÊ'U #ælR°ÎÛúX^"Ùö˜ë|R°ÎZúx^U¦ušJ¬³q}X)¥X³Î˜3×ßQD ˆ‘J1)6Æ\¥z[Œ1¤kfÛ¯‘¤ªˆ0™3g€ѵ€1`t¥Xó’R§0bÍŠ5ë–>–—¨Rm©+ÖZg-},¯ªÔ*U%­³q}˜ˆ¬(ŠÈ ûˆ *QŠ,["º¢"‚HD¤ˆ¸ 1-fÀAçüÁˆ"ˆØÇy!%×®,r¬å…DH´5&YS©¥å¥Òí$Dׇíù Ɔ->nu3ø)ÍNW¬\üc1M‚€àÝÐv˜ÎSã ‚ 7Ù¸WðK•A^&‰Q (m^bÐ[ªdŒ·YڼĤ«$f\¶§ûSÁU ®VßöÝ·[„@,êCØÄß3ˆpŒeÀ7Œ§s¯F Æýµõ@¬ëÝ³î‹ },¯$LŒíÖ§Ùöˆ`Wn\šHÄ­IyØ&x|cÔÐÜh&°8ÖòPé%¼L#ŒÇS—×.½ÙvÄ.¯ÄþuÛëã}¾MV°KÁà“½OóÆ¥´Ss|¸ñçíØÓ8O^ãwàWÛ‘Ïâ’Ê(nû¯TL0}ú8ï’4BL$ï >ìNµ4ÐŽïP·»MJ®çû`‡°2 SÐÍŽÄû´oqÃhW*£Øë´y¡©“}[blp“Ân*ê|¾©çE´‘K3–IdeÀ´Æ‡„¬¯KÁlá`ði>–©}þ¯4F.J2m}Z]|ËvêÕÇñÚQ¥Q}ZÓX] FQqRdäÈÔ8àV°6c™ ¾"hÕ·8í~- ‚n˜óJcÔp^b0Ñ;¬Ý~“×±ž óFô©c=o·  D쨭[qûvƒÒÄA ŒjÜV)Sã e@Bc7b½~^©3ŽuÑ=ú`j¬VCM}¯¤â0f\×ö¡ß!‚[FëWLVÊH#Ö ëWñëí1QL½¾·~̺å2Ôsä0¯Ä§1‰´×÷õ´½U1Á˜†>u¬—6ß;ÙÇô ¹ÎZŒØ­%[pŒùÅkòLæ{´Ã± /l®aêÜί´Ç-ºL[Ë+mŒºÕiëCùÙv\Ÿh}oëF78¢ÉÞ:¥´ˆÃN«‘«ñ¹¦h%¶-+ƒаåê/ç•À¨v-}LâÌhý"vôq¼Ò|‰Wi\†Ð¹üdƒö6¿óØuÌ |¿‰×¯væM_7†Ì"ÍÒ£'æ[è^ÉŒ Šéè#É™J/‘iëcy¥(Øìç°>q>?Ú]#ØL’¤93S;Ÿ:ÙµïM¶8B ((a¿I+Ÿ?À+QHsµõ‰¦˜Lñ±Ã+q„xSGõ ±ž ý}AoºÄ­ ð£Æi$)eÇBû z‰Ù¢ÙQ^‰ŒÂXoêcBöp{¡zõIW °†Ô§gW«‚~ˆ¦4¼¿6ÆicšRþfG uR;÷rúy¥•VR¨ÅËw€mÙÄ/m^‰qê!}سòK ûúê,hZócC”¦Y04#ûêÄ4‚£^‰:¬ Zúì ’½°á„b^i˜þ&ð¸>~ÜÛWŸPrú ÔîrVçrÓXEê øåøÓ¸±6È+YÓ0ãô蓌_Øá•"¼Wi\Ÿ(ŸN£ælqÞ‘UlV÷øê¤Z*Û]¨õ‡ÒÎç÷òJbí¡íã•:< Óö^u·Î€J£úXl©çà!ƒ’çÈbÿ3¥°c¹‹rGyíb 4¦ÄnÔëER}þ¥úøq ìa˜%w± ªÛóc&ºö}@u¥Ù{y%k:Ì+qt`g7b•.ÑÇ­ï10Á†5öÖ·$¿ãB´wÖÒÔá– bQÚ£¹=¶;¼ÒDmx²>^ItâЬW¢ò®ßèC j°ÆJä%­Ç'³¶c%  ž܇ÝKº¼’âçÕÖÇÚC»°}Ðû§´‚2 O}Š× êuƒyÉìß|š]½êy‘5ÖxNñhRDÚÕ1ƒMÄh4·ºÔ/HbâFR/¯–‘Wd¯;úxn¯R³±›úÔ PüÆRjć(€€HYQ¼youu Þ¼·Î‹ÃÍc”H,$šL§oþ`+ÌU6-È>c:‰ ËGyYFë«×þƽ•Î&й«OÀ̧۩ôƽU^¤¨«k¢¬(ÞØRù¬(H©KõáúõŠa½â4bš-WeùáïOžž•#uÏ&úGwçoÝ[ÎkRã¸,ƒ ¢éòà­{§eùÑ''OÏG1 ýÚÝùƒû«ùrL@5N(ý¡É/Rj¶\=¸VV~r £i®^{yùàåå|uà²-M},/Rj¶\?øÁÙUUzyþàÞr¶:@$€¶>¡íg‹õƒïŸ—eùÑﯨÒb¶\!S+ éêá8­:Ú!³†Iq|ûæÏ5¼ý¹Ü@sw̯~ý¯_þü{ùl¹ZÝÈŠB)òçn×”O1*ÖÙDnß>~Èðöw©'n¼Åj½:º©'fv79¡egôèRgnkñ"æ|Rß¾ù0ƒ·¿GnƯ_üd5[¬VÏeE¡Xuõq½™9›Ç·jüñ‹4¢½p¾^¯ngy®4»y$ÒÇ¥u6™ߺ¥³œ™÷€úôáèÛèRX »ÿ„óŒ”Êî¼ppãöæü¬Ú\TU •¨äÉ??D|öÖsù´Pù„5³Ö]œ8/£³œn|ç…Íáéæô´¼Ø<þâ3ûÕú™› ‘gY^L9ÓH¤˜]¬×Êïø•ÝØhˆçÞxî…‹›ÍÙ™)KcDĘÀëßÿú‚™'ÓùÁÍçòIŽÜt“^œeDtã΋‡G·Ïž>-7çÆ˜ åEL*ËòbšM&ÄJ1»Û},%ÖLñÙãç—7>ÿëí÷A DBbV¬ô¤ÐV%¥Ú+>}¸!4zÚÝ}nÔ)¥˜u–ó%1FLeИӧ§ççgóùy1_æ³E1-„ˆáH ¨˜‘)]Lç§OOÏNOçóóéb5[?pìôîîãŽÀ¤¿ñx)­€u6/œ³íðšLÎH1‘ŒêcíQZ+AÍY>·ôâ5¢åEŠRYVùt6›Í.ѧVà}¸«RC>j~Ýpƒé¾=εÀá˜b&¥€Ð¯ƒí¯€€Ûïcü¦#Dra·ŒÚã|óq¢ Ìöâ6|ÓFŸ×þ¤o=½Çùæãp Ó—°-ÆÿPcû"ì~´ÇùÆã¤å6÷åÿ¡0ôo¿F€z/5„“ÂŽø”=ÎuÁ¡Æ;w$ÓêtGóóðV:¨{œë€Óôùu*JÂÎf·©×_#õ~¿þ¸Ç¹.8Ü‚òÞCÜ/¸ã艨ÃBúãŽ=ÎõÀ¡R}jxæÂ/ ßŸŽQ¿ê·hóÍÇ¡ cÔÚc¸¿àUÂ?8`ÒçZàP«/T¦Šf çJ}¦TÆ4 Ùã\7®ß€€¹(…*D O0Ç}Ìÿ¸7‚¸ßnG{œëƒÃq?òOª×­Õ~ÂÇ þ'­÷{œë„Ãp±9›/×Ù¤°éÀö–4w™€ýv1F ‘‘J´®.6g{œk‡ÃðõÉW_þý/Yž×;yCf8)ì±½ëÍùù×'_àçzá0<=ùªÜlüîºömàØqØýZ_¹Ù<=ù `½Ç¹^8 '''e¹ÿœ[÷‘àºD†äMÊrsrr°Þã\/€ŸÐ _ÿÇm¯´»ˆÜ±»ºyàR†î¸¼¸øø íq®>zôˆåìîä³ïÐ?µÿßtF¯­Ò 5/„þfžýÃÙ­'{œë…ƒ=‚}ùV–ÿ#^®ÌÌ2IEND®B`‚Carla-2.4.2/resources/bitmaps/keyboard/white_bright_on_red.png000066400000000000000000000066031420416754300245400ustar00rootroot00000000000000‰PNG  IHDR©:DEî• pHYs × ×B(›x 5IDATxÚí\ÙrÜ6½÷b!»Õ«¬Í±d«’y;™%©<äòóäªù´ù|A^'óêLU*‰SIìH²c÷BópI›l5˜TY“F©ä¶š<À9¸vãçŸûö‡lRJ9I’OÏÏß;8@cªw¬å âó7o¾üî»›år'èI’|úàÁ{Ã!–P6â÷=0ï‡äc"VÈDßÿúë—ß~{³\¶ñêÕûùyÁ¨Nª§J!#ÇåÍæÒ ³E)¥üìòòý££Ñá¡,ßfmžeã—/¥”_|ý5äyžeYžç¶1VDBH)…ðÙå城G‡‡$X ÖZkßäùèåK©ÔÏží†ùèÑûGGãù\H ˆÌ -Oªµ9#Kùųgm¼L–b}p|<><R:}¸_cÌø—_b]^~pt4šÏ…NŸb¶Œ¿xÁ\bT:<Juè#¥”óùìäd0!"""!Z׌‘J¯VRÊõzep[–eD¤”º˜LÏÎÒшûõçt’¬—Ë8Ìd8$"ÀªYk €5Æ#¥¼Èó^Æ¥Ô*¢÷é” "'ó­u £ñøðì,=8€"$¡ãRëÕîÊŸO&‡gg>ñúH)¥V*Uš"ð Ö˜Š[žk¥1Ïó޾]Ëó\k­”Jt’8°Jn`­ŠÂLƒ$IÀÓ‰Àc­5Öc´R[xÅ2ÒƒA’¦>¯XFép¨’$Їyc””»bj¥’Á@%I·>’c…ÒZk äy7´Ö¬×JJcÌmºçƃ–J)­ÛµeüÜr)#TRžJ]ú" PÙœµŒa»&!€ÈZKD·µ…$„ñE~Fä¼+&µˆìÍN8žf¢n^‚(‚‘TŽ<à%ˆ0N%"AèüâT‰¨[É—3@"Áªc ž·nÅÅÆ€15(Wsº˜¹&£ãã¸×–ëyW„wóÚ‘e:Ü£OÊ!G¨ÔÄñy¹ª"B%7-ú”soŒ5«K½9³üz׿æÉ㾸܋Ãtƒq8ˆÀ>áÊ.‡ÜÁ+®wO¸ ¼ú0òÇìój,&wÃìÔG—͹išdŸyjصŠýž§Á½U®MºyE[³m÷û^Òô{×]´JîÆ}dx5÷cÂÑópóm+Ó·h5ì“lªÐäÁ¨©Lóû0 ôéýÜÔ®O-ßü¹iª¹+«&޵@ÔËž|œ¶YéæǨ™ï^}"Y ÿn´øúTù~C­ñûù} 4,š_p^„Ò®ëù~3¯þ–×äŸ}¨&¯ˆqº@Ò©OÃïƒiˆw¿,‡º GGÝ`0.„À6¿úíã£AÖʽž˜¯þ‰©]þÕ¥‡ß¢Öû]ò½›NßE¸m\ãuðŠî½©Ïožï]féq;õ‘ÅŸ£ó󙵨¿‚ Ö0lŒQJ¡/S°ãøß6^ñóÔÄéQ<âF}| ãT ò}CŸ²Îú†F>ëSþÑœ•Ô÷øËg๻?m¼ú¯6æû¸Ü¼QŸ~ëûšP-ú”1 +/ƲÂf~-ÃF³ £ËgPö¼06–bï½#ç!ž>ñ¡êq»>›êüf²´c†ú=6ëíë‹Í=]ç.Ð^ç×yÅ0òÝÀ§ÄLj©êЇ=dwE¨{y‹>õZJ_)« äMà蕆ó3o3](ëç÷Ž hþïÀ|›¼z®Z}À+D¢a¹×òê±·ƒ®ÎoÑÇËAäaÏ0ÙÛvoØÀ _ÇU1 œÚøƒüÒÆ+.–Ö‹üW”5c»>U0ˆ›>5¿w[íÕÜô©õŒAþñ8¬ñßûx‰ÃáO[†\ ü¾•×îóP·]ŸW| }Ü.;â…*uêSÍ=ºš¥ìÕ7½8뫉ÒDˆó’:Tq6o ³ªù_;¯HFNÓà,ÇÛî˜c†ãé«Ô¡OµÆ³Ö×NÓG©  *ࣕBc*÷GwÐ]_ãuðŠì½‰ã¬a÷æ÷¡>›˜\q··è#Ý¥XšIqùÛÚø‰e¼õü%~¸6ŽT ù+7·`K/ÿÒÁ+>å{€>¯¸ÂˆI }ª¾b½ŽüÿnÒgC¾ç·-Ÿ=*£âFÇ$cØ £c z8¶|ÑnË÷>¯>{p<[v¯ø• × ^ñÙ–•ïÔGBéÙ•p]°‹u@clý|'½Ãq¦éìÚÕG¼â}Ôóò€WäH‹>®œŒ€­ò}§>¼è–•ô¬ŒJ¿¯Â?.—ì+._K¥ »æa{ÓÁ+zP÷û/^¼D0ò¡¼â=ÄÚn}Š˜ÏÇm*ý6kO“DzQ/BÆ©Tb6y!À MŸì„9› Ò”×oÝúHÿ6 ¶>ÊúSM'“O–K³^ÿûæf‘ç}”úóxü·Éd2›‰ò’q¬³;cˆh:›ý}¹Ì×ë¯nnYÖ…)åãÉä“ñx6òÇ—4/Y­ÉK"Œ²l+£TÊÇÓé_g³él&ÜÆTƒ—DœN§/—y–}u}½U¥ÇãñÇ“Ét>—åÓ ¶Á«R)Ëþs}½U¥'ãñ'ãñd<D…òíúÔæÞU1œœÕH¢Të‡'' ÀG|0€hë/þõüù?ïßg›šL&§''Iš*)mp*UÌJ!Ò4}xzšXûDÊ8~.œM§§ÇÇI’Hþœz‰cݢ˖§´ÍÖà%…Hµ¾¸wo`Ì_,/ƒ[xýãèh:™§Ã¡Âuð’B$Iòèäd€øQ‡>Ìk6žž%ZK)Á÷x—’2I’ÇÇŸ<–ˆÚôaWžM&'GG:I$çA§>Þs;õ"AÝöˆÖZñðáÃõýû‹år•e™1 °?þø# â{ççƒ4Mµ–Bh!Üàüm(³£V /./–Ë·oß®³ì‡~à‘Ÿœ €ˆJ©á` ¥ˆ…Ó×qª1{\¶òÒZâÅÅÅéÙÙÛå2ÏsÀ?Ž×O?ÿ,¥Fgçç©ÖÒ=ìÜЧˆZ !.=:¹ÿíb±X­ø‹Xæ%53ÒZI¢6}¸/­5=HÓ{§§ßü÷¿œF>|°$‰Q’$‰R„(xâ·éSííûÞN5·s‰RJD$“‰A´¹µàÍb±X.G¯_ÇãƒÑh˜¦ Úq¬û¤€TJ¥†£Ñ›ÅâÍÛ·£×¯'ÓéìÞ=‡ÃÛÝPûnÄ©X@Uo奄@D$£ñØQ“WzsÃR’¿Xhç%¥"™$Ãñ8ЧW‡>ÿÏ ñ'‰”1«Åbsçp$¼º¾~þÍ7:Iüç@š'ß¶´(ÿ^-—¯®¯÷8wGÀÍÕÕjµâ*,ØôÀy.*,€ÕjusuÃáçnáH¸zõjµ^7{[±Ø¬VëõÕ«W0îqçÖþúúõZ)7ª›š+4в^?·vsçpðéÓ§°\Î~úiôâå9x ƒA;ªÞ#Äë{÷®Ž!Iö8w Ÿ>} ûö‡lÿv«vU"øIEND®B`‚Carla-2.4.2/resources/bitmaps/keyboard/white_dark_hover.png000066400000000000000000000016471420416754300240620ustar00rootroot00000000000000‰PNG  IHDR©:îL& pHYs × ×B(›xYIDAThÞí™ËnÓP†ÿ9>9ŽÝæNY@‹â".R)÷KA•XÀÃð]ôuú¬*^ ¬º‚*X¢RÚ†4ñvìØ>)QKž•5ÿô;_íȦ@VŠPY¹(ükþ°ÙMÄ••KôÛ Ð;›Ýço)Çezg³+±zoÁ çåFbvõéxp>=¼P`€™uÿŒÜq<åÁya0o¤ Κ2ò%®_¬Z$°¿%goÜ,`çæ×TvµF 0kíÙÝÇD¹\³@ °!»ZÚþnÈ(äKK®B€@l'?v¾)ÜtVoêi¯qL”ás´)#€ÖÆB¾„*:#SO%g•32…!sBÓŠ8JÑ L‡&J`jÌ"¾„%åÈÔ²’³– MÓ™%SÒÒŠ8Ò@‘©1 L¥ñ„/•ÊMsÓ,Tnš›f¡rÓÜ4 •›æ¦Y¨Ü47ÍB妹鍨§.ÿY†ã)ú_œ3µæ–â³Í¹èút"[šKí<dŠR—³¥S¡h4;Á‹s6ÄN¡×D¿ÓíWw\K`VŽgË/o•3÷¿¼ 9IÊÒËŲEÁÖ¨¨z)J°…e»˜8¡9kE|9f U}R_ ~n} ¼Ð¬Ea}µþ™€õ5»°XMm¼F”§!X}æZtOUõIÍÏÖ×ðüEUîWžQÀøÜbU=ÿ˜)\ëQïÇÏ¡Çz ´ZvbŸúóÃîÏ·@StÊNa‚(àÊLJûý!´ÇúªË3…ñìÑá^o¨·€¦,–gÔÅ¥»›@SÒ.%Nˆ›B)·ÎÚÓ{»¨7Rïû”n q¶ì'–RNÃß&îí¢ßª‚SóôÞnÈÏä 4ÆŸ·”O¥@°'{^˜ž ¾0ÜÙ讟¤~vž~nš›f¡rÓÜTÇzÚpõÿûþ_ӡᙣ¹“ÔÏÎÓ—è•f£û̬µÖ¬‡=ôÊH÷uoòü”ûíO³DDˆ¾»0ó~í”îs{òü”û£~:9ê Ó7™v&ÏO¹/Ñ9"™èƒ:ÊLš8?ݾDkû²J&Gï[hmݰ“ýþvkòü”ûûB)µc ­þIëÿÝãÔ/'Õ¼;¨o¨¬IEND®B`‚Carla-2.4.2/resources/bitmaps/keyboard/white_dark_normal.png000066400000000000000000000015731420416754300242250ustar00rootroot00000000000000‰PNG  IHDR©:îL& pHYs × ×B(›x-IDAThÞí™ËnÓ@†ÿñ;¶§)½ÒâÖM ´R%X°BØò$<@}ž¼k$°•¡T¢M›¤öÌaa;‰=“‚RjÉgeŸïäŸ/vnšU)ÅÛNz¬?¿ûUÂcxKi~ú¯)b„—{m)µFÝÒì˧k†Z5Ù³uk•Ä‹ÔÍsl“ûkž Û ëR0€xÅdÏ·dš¿L]Bg5r¥”€^žíÜj ÁÐÞ…Án·ëD%Ôéæ9Ü0'·Z$!tÃ\áNÓ †v{@ Ö ¹›.Á"G ¿üâð›AjÊl²(d0³V‰Jü©sr!"ͱ¬¦ù¬,+äùäƒày ")…€Ð^yÖkø™ibc©i"ÕÈ›ä(Ûdfje™il2?Ï—’(7%Yž•D™©•¥¦€ 9ɱLJÊLí+¤¦6–çCÂAUª6­M«PµimZ…ªMkÓ*TmZ›V¡jÓÚ´ U›Ö¦yqX¤!ÿÃÕ)ú¬P0ušûÅÙýg6kθæ¤O“â„e¶8}FÓ'rëµúx1yN{¯7Æ\Þ,³McwÆž²ûju<)7g§ÐZ™Ýiê-ì†"=>:/ÝÝ1 ù8:ðêÃcÇ+OÙ§Go—n5iždìè¯< Ç)n¸ýæ@dù¯ïDÓ·¿`Š@îúÃX)õâNÔlLmÎNÿlð ØÒõ[ÍÚöGJ+¥Ô´ïN?¥Ày|ñk«ïÀ†DMoŠù¼}þ¸ç”n#òD!µh ÏõÛ:IÔiŒíˆ Ôް¼e{ƒ3Ësƒ6s–ãß žÛˆuç9…œËËÒš_O©ôªùžH÷IÁúò,§×©Ÿ^Óâ»XZ޿ߝÎݯMkÓ*TmZ›ªB/]§~úm:Œó`™YOqúÕ¹û„A'ŸiÍZkÍ:ú<¿þ.̾þBïC£.zóë¿·]Ñ'}e‚ÁÉüúg°Ô ½~lü|çQo~}«i„ãŽk‚øx~ýŸ¾ÙC q¯eì1ˆÓ¯£ëÖGeê7;ÍJË  1IEND®B`‚Carla-2.4.2/resources/bitmaps/keyboard/white_dark_on_blue.png000066400000000000000000000075171420416754300243640ustar00rootroot00000000000000‰PNG  IHDR©:DEî• pHYs × ×B(›xIDATxÚíœMÇyÇŸ—ªîžÙwrwéåRRlÀ6ÙÈdIGÛ²/e$”sÉÅá{>¿€sò%0à‹/9E98kq.†} "”Z)´M.—;oUOõÚ3=#v¼0ãiÒjgú×õÿWÕSÏSݽ›ãõ@Ø»qú•o÷Æç_âü3qÿ±æì½_ýÛ»?~töA/ôÞÓ׺°Ÿ.»È?÷ÇÎ>Xªk«åÛß=þü«Hœüùý¸„bÍG¿þÕÏÿ~-æ ¼yïþ /¿¶3l33!"#ú³Œ•ÝÝVüO?ü~¯¼yïþg_yý`g›™‚ °Vvwv”âŸõd¾qïþç^}ýÚÎQ&JÄ X±ÆXcÍ`ø+þÙ¿¿L—»z™¢—¾ôÚÁî¶fŽþ8]ÆØ2—Þ¸wÿs¯¼~°»Ã„ÑwÌŒÙÝÞf.qé wÞ<<ØcôÎ[°ÖXc­1v{gÇù£àÖí»û;ÃaS+fB"BʵUZ¿x§×åàæí;G{[MíPˆ€a®X+Ši|»7óô‹wŽö·µû_o”ˆˆ+V¬1†ˆäöݺDD).PtzûîÑþÞpXsæÓet!óÎñµýA]aôÇékóøöÝ—n]g¦Ì2(,Ö²=Üۙݾ ”®­+­‘™‰}S”®û¶@ëzPWU¥#SœQª7SézX×µÒ‰ã»^ØZc™±JW«u9Tÿ«Wu]UJÏùãu¹¤T=¨«ºÒóþˆˆѺ*piP×þXfföþ€R¬”ÒŠ™ˆ‰‰‰ÃRŠ`Ū·Ÿù`fÅJ+9ˆ(~HÃÌX¥¸/S1)EºR‘ãL·"Ö"k­*åÈ+tc )f­X+5çÓelS±fª”šóÇéšÍŒâ—´æeþï11a’†à>èÝ÷ˆÌÈáDÄ´Þ‹b_&…#rœ@´À¿ƒ´Z1("$BdÆ9œ®2—Ñ5fΧ‹ û3Ú%þ8!àúÞ]-\SDP €Dz^@Â?‘ƒ±5ýi­–HÆÁؼô[ X¦«L‘¿¾Àœ?^W±KáÄ–?NW˜º%.-ñGBÕ»~h9ZƬ)…}”Z ÒâHûÓBòG¬S!’FÛ§­KÚcwNW¡iËYÐUÜÔeþD¨ _hM&D@†Mhq@Ò(.•$þHŒ¸LW–/wê*R´Ì§«Ì¥–æýÁðI—Vû í˜q¢$˜÷¾ýäMŽÌ!"ý¡©w“˜#K§_–û&šÄ,/Oõ–ê*œLqдýÁß ] ­Á.]eÇ âÈPщX¥¦b#Ó\'ÛçŬtФÀžÃSû!ë†åºŠ9>vé*¬Ç„´M+Џ#]‡?1¶r½P<û¡é÷Eý‚cä@Z#q=÷ó©’2{ ½=—ëuè*S$iðåþ8]ëäzþ” ¥6µÓŸö¼O ƒ¯+³ž)¬ñ:2½8i GT¬2Î\Ù=¹N]åõX—?éB%ÌV:·¨«ù þ(8 C‘xŸªt¬Uá¥E1O¿Kj<+)|ÅÌ-^)/hVè*ÎõâŽAËus½9b_Õ÷«ü‰ASµûÊ˲肈`yìɲtòÜöjy"#9AOì‹Ì.]å±Ô¿¶?X4ŽÃù±mùk̰ËýiÏû¸"SQ@‚8 šKTeM«l¼\¡õmŽûÉfõd„¯ÐUX;ÅœaÁŸbfÏo)"(þ¡¿!X˜……9p°CŠÜŸçH{,µ£år]er$¤{sþ`ylô#Æ­D ºŠ7!¦Ebx ¹ž€ˆXAADDÌ6‚ô·+œÞâøæ=6žëâ# ŠˆØ¹Äi¹.Âøl|ÁŸ–äžÀÐý-‚®"0l3wú¾åb~*Æœ°– ÉõõRÕæ`ô®xO7”åù bËÁ•ºŠ3ɰ‹ºJæ¨Í þ]¥Ñ—û㛩ÒW]„q¦ `JKÓ"7E2Nþ˜S!6ôY䀠„Ñé.—¸Ëtcb{یâ,#Æ'×UX‘à*b+Ó}¼øKW•ùûE¹4׋4÷Þ¦øXâ“‹«yhõi]0­=2Vê*QÛ>çÄ ­€‰~’ÌùöúÊ¢#Æõ~ÑŸ˜€g1? C' Ã2Yó} “8)=&?{Š˜Ù¸&7;$U’]]Õ¡«t³à᢮B&Æs±C×ZѱӟøAÕ³Äc^àaÅ9yÆi]˶ŒPÚ2B:1ÚÇq½BW™"ñÙø¼?1ù/‰ŽY×¥«Èö ­ÓŸ¸ +çCê'ô¡ 0&‡XRi„WzlHÒK¶×¼’œãJ¡°¢·6Z—ë*S”’•¶?NWŒp}]òÝ?çH®¢¿Qø‰þÄ·$c>º$¬aa°ËpwÿÙ¯=ÜÝ÷+ÍcN "ЛéîǶ8¡bÊ›µD@™"»ÔôO$”¹ÔåÏ.ÁJÂAÁ¡è”¯Bƒ€©©›—¿öö³·à寽]×P‹#aKN©iê¾Ì¦i¨ÅIR>EÚSfAöVôÕoi¥‰iÑ×äEu]#uùãÛIUU½üÕoõb†Í*Â8`øÓ?û«Á QZ‘{m‰B!Lî]Lno1ëGþs:­¸öpwÿËß|畯ÿÅáÑaÝTÈœ8þö‡Ÿ"J©Áá-RÏÈüΗ¿ñÎÑɱ®41åUVzZGDD¦3s9ÿâ§?Y¡Kû)úƽW¾þç×®×MEÌóþ„`£”žöPôÖ½ã“c­5Ïùãu ãÖÑ‹üÌÌ/}ó›·n*­–ù#"O..ñÓŸ ÜÿÛ¾v°× b"ÅD„L@±ÆCšL¦ãñèó‡çŸ¸›M~‡FÀí>ýÝ_¿ý—ón¬ ·7Ž®7ƒº®«9ˆ° “Ñd4}ôÑÃ'OžzZÆ K /Çwv·?sã°ª«ºÒs°VŒXkì̈µ—OG¿ùí£}ï­Õº¦33žL|øñùù… Ò­ë;?xw¸5¼~°76U]uúãÚ3OÇãÉÙÙÇç/»ýqºp{gë3LJu£«ªîôÇéF£Ñøã‡¿}zq¹ÌS@pwoçôæñ`ЬðÇÎ̃³ÿýÑ÷ÞÊöó}às°YíåéJ ^|ád:™Ž.dzÉÔ˜™+ÖÚ™}ôøððú~3¬›ºf­µR²Àq»‹‚‚ºÒˆxzrc<.Ç“Éôw¿{äš²¿»CŠˆ•R• ꪪYiµÈ õ+f*àuéJÓŸ¼t:LG£ñl:µÆ‚+&êzüø ‡Íñµýº©˜y™?®=ºÒHøÂ­“Éxzùôét2µÆDœ.Ö¬+Ý4M3hX1k-KüqºtU‰ÀÉñõñxröÑoçøè"23)VZ5M£´Š·–ù3w/¬1‹ÁX‡lVÌÌ•Ö[ƒFŒˆ1Ö̬±£Ë‘1¶¶[æiRDî/StqD|Ù©Å8¨«Ñåh6ÀöÖpo;pr˜gË9)„X†}².ÖŠE´VÃáÄÏE]L ˆ´Ú×¥iVúšãtëZéûRD¨ÍÌ4uå9»ÛD¼¦?1× Y†w-}5«@Zr´ªÿ”El8WÃ58žÐªï  ÒеB&` {$„èžD‹"`D¬˜ét|9묧7œç‚CiID@WÃd›þÙ8Ê~ DT<6œ«áÀœxÌÿMC²„&ìÏ`Ü—gØÛpþð9½ÿžÇæøsÌ÷½_Pâ­Pwëߊ=’}ºòØpþð9*!Äm»á¢†—²;ò1c˜'uù¬Á‰G:Ñ×ÿíÛ¼®Nt›S ¿Ï.(°áùÌÎæ "ª1™™Ù£µÖZžŒ”’ÿôíYÆK½9™$´þ•§o?øã{Û“%UÐÇÚ Þš$2zãÉýBŠ Å\,“ÉÄrŠù¹·ÞØÝÚBÀb6l´ÑZëɆÃTî¿¶µ±=**% $  ™Ê¦Çgƒšpt|pskwTŒˆ¬×YD`ŒQRŸ'`ÞÚÞ•cØøÁ ˜ ³a͆µÑBÊ{Çf/f“Iu–Òúݛ۷FùXŠHûs&ÕY’J{Û{eQ‰ åÅl¤”³ávìßšÓÇÙ.„$„ !„‚„ó@û©$h¨îªqì fÛÈPH‚¤Ž‡@Ì`A ÿø¦–ñ2­uBÙÑǾH!„HÀ”Ö˜¦>–W²d½³OÖ®‘àSÌ`–`†aç20¡Q¥_þb‡i{(†1Õb28Âa¸Ùøâ;zyÙ¿‡·n hëãy“ÄÈ€¦£¾ v¹Bß ì¬'0âÈÆaÒúÉû ³“ÉV3‰¬àí 8äÄr "«y…ï ï'‡ëcyuÜîò*LêòJê{ã‡\>Æs·}_'†aß$¹²3iÜû¡`¼0I¬âFíÑv›ˆ.â•ÉPr‹Wò¸·ýÑÒ'²3eܯÐ'Dqå;)¼ËÆ&ö-ͣãLáÐ+ 0cjûMdíR^iŒlë]}PÓ¹Bkêcy¥eF€™Vèc¬*nÞ€˜CLú†Ò-3™§v¦`A‚RƆk É !¯Gƒr/“ZmØAÕÑÇF²ä Æ0™Î`K!Æ;Ój}â¾·Õ@ø@]wab¾7‘õ!Ÿ!d á˜Îm#VÀnzú¾‡×ò½õ¤†>>ß'ö}”±>Áþ¤ød|ÅÓ£éëûÐÇ¢ÔNµ+Öù‡"?`$¨O¡à 8¡-çãÕ¼’ó}¨'b}꺌’Pñ-}ìgIþDðãªG4û¾!`ñ<•AÌ4¸Ÿânð$)’Œyø’ÃØdßR¤Ùͽµ^ƒ—³C[g_45õñ5DR?±©{…úx%ØÙž—õêÓ¨õ|j„¿“üÄ#Åû ±!kºÃ‰× RYÁ«¿WGÎÞZ¯‡%Í0‰½ç5ôq“rJ­`ÈÖ­uÀ”6BZC®_ŸvÌ÷á ^; µŠ‰ÂK=ÃGLiQ×4 …:Š éÚñJË͈ÇM‹Wê|,68nÊ*ŸŽy¡>Qß“a@ÄD rk0v³rx&³‰Ù¸Ù Ãmç…Z/e½ãÒª‹aKn&ÃÔÈ+x¥22p€ }ÜÞ[R¾¯ëü¦>Nø´ZÏçè%ú˜ºïára­šÂÆ¥Äh?Çóéï¬#1ß»Y¯Ûñ$—â¼^Å%¼Rg.¶ô¹JŠƒµx¥EܰÑ«¢˜O0Êrv‹ÝYf·R–aì4~Îê¶*\&H­Œ¼U޵¶ž¼r‹d+x%äð©Š;ú¸æÒú‰‰™¸£Ý-H[ù¶‹ýú0ŒÕGÀ…2ãC–aòÚLÃõ¦SïzI}ò[tÇÎgœå¡ž7ðò8ÑK"m}üÒù®Ž>äF‡»)Ñ*}B­æx˜se×åðÿOcæ78œh<2pžµ†"f 3Û³[T×t«x%1 r[Ë‹R†ˆHPGæôÒG}|¶ s<ãÒ¤ŽO%n,D8~ÄÚÔ–ÒùÑ·Ãa·¶n¡ì^ï—òJb仡­OˆD)*Ùš±£#”†2u¿>Í9žÿײ²7ÇX)£ÄÉCÍ÷\+L©¼D]Sàľ¥ˆË*^„ôHÖÕ':è4îë»Ú¼¢ñ;P{ww¯>ÑÏÎ[¬!ä’»§˜ ]`Œq¼èîÓ$é@Ý;¶”´$í©IŠÆý^$’2N=@©Ë‹Dš;Y8jéãy!IúÈeºú4ƽ=~ÔlÚu8ÝÒºŠb¿Wáb~Ú(±G§"¸bÖÛowE.à•M{ô g.R#ùJ¡­˜9­&õž´L·Vèb¾?Þ†à†q¿PRnvßsŸE‰Ñ,ºÍÖFö-ö¥—K˜«y¥1ò㾿Véf¸Ë¢ƒUóJŒ$«õ!Šc~-i¨\Ã[µ¢©P_ÌOÄôñ"à°ßñ“¤N©ÒÇë*—}ú‹›KëÔó-/J+‹še~[Ÿpüº¥lðêh:”")ùÜ"Sªü>q{[fùœÙØÃ+-˜†Š½¼Rk=Šº¾Åë ºT©ÍV}noxióV§/86qx#”3'àËî~&êšÿò^‰ŒxK7¿¿b„nèãx%¦ ~f­­OP^yNarYWvT+—ºjF³¾e2¦`†€o…bxÍ /åEQT¨)zô‰C@ #ªç-^‰1ù…¢}ÂjDt!„š…æ™1Þ]¾ùñÖÈU—N4™q›`)˜IQ@kŒøVuy%2Š—r;¼Â׆2Š”éðB’JX¥O0U 9˜üÁ{!EU•¿z|y ¿s\¥}´öéPh !ʲzüÎ̯WU%ìc7DÓÐzg9/¢ÁŒ½sœ©\IÕÕÇ©$ä`FïWeE]},!A¢È‹GUWãúÀ àËßz<ªFY–I!IiŸ^ HÀ™ÌÆûIñü/æçóÕ~÷ä/¿ðä½7÷övË¢´?[œx¥€™•TãýJHºæ{o¾õþ£;wî”y!¥h…lÃ`fæùb>=›þð»?ZÁ „\å£K¶þÅoüÑßýÂݲ(•T-}¼[±’Ùx¿—VéKï?ºsçvQäRÈ–>ö2Ì‚ÄäîXªËa¾÷æ—¿ùøèð5¥²eú6Ÿ¾üô‡ßýQ¨ó}ñ‹ø G0SyYš£×ÕSùùwß bx…ÙØþû§ÿø·ÿðM"bÆdc|{÷v™—Jª‡|Ë •©ÒGûoý5>÷õ?ðp5÷ÜÀÖdóàöA™—*Ëb7i¬€Å¬ûye2CÉG÷ä߈Ïã ²”ÐÏëý¿û‹Éh|ãÆQQI!»úX{2••Eyøú]õT<|÷­°»ú8^ŒÍÉä`ï ( %³®>–W¦TY»û·¾ôWoþá×> WŸ@~gkûèà°*Ç| }TK¥X®h*‹"/¤÷ïŸÏϧgÓÙl6_,´ÖÚh£õó[%voÞªŠªªFy–eyÖÅ!v30åYN £ƒÃÓétz6ŸÿÏÇÿkMØÞÜRJ!3¥ò<Wã¼(ì3°]—†»ý¾’W‘J©‡f‹Ùét:_ÌŒ6Úÿ€ƒåõñ'/Œ«Ñ­›{UYÚÇW{õ±öyA‚^íÞôüüåéËóÙùB/‚>–—TY™ç£jT•U¦²,Ë–écye*«ÊòÎÞþöÙôÙGÿeqönîZ}””RJ©Tže£j¤T&|w¡>®ÎÕ—›¸z/ Qˆ‰T¦„”yžª±1z±ÐZ/´6§§/ `c´1.Ç£ÑÈš³ ‡üŽ*ˆ¤’ò‘¨Šêôôål>0O¶'ÛGI)¤´?w° 'ZQ­ëØ y)©¤Ty‘ª1˜µ1½¼¤T¸gl—ëcíÉU¦…”J•EÙÂéåµZËKIE‹ù¼**‹³³¹Sw{ª>ªé  à2|,bØÔø ºÿ[ã¼8ª ‚<˳,SR !žù2ÆfØ_¶1s1;N[adsM8¸Ž¿DmÁF¶º(èYæ© ØoÆ%Äçqpœvß·3~Þ—è|Ðç‡kœWgðo„¬¯ÿ7Wçw|¸ï Ó÷ ÍêçjÖ8¿ó8¢¾%~Œ§>èjïp Í}ÂÓVÜhzs8¸N«ï¹e ;ÖÏ`ÿ—;ûÌÜñî1hóÛÅÁpü¥ 9Óü)^àNuÛ¿<š÷´Ø#ÿZã¼*8á|~Û#íoü‘ÿ9€1€!ÜŒZã¼B8Q­çßcÛ§YܪpØg ¥åSÍkóŠàˆ’1Ú×þyÉÖ³ÛÖ‰ZkÄ]‹Ö8¿û893Ïæs­µ\H·/Ý86î÷Êí~—}œ¶ãkœß>_Ç#) á ðGÛm¿ àÓL³‚ôLBŽYã\Ž€Ù|v´XUö‡îý3¡–ƒŒaÃÌÆ^ÌFkû›õE^<ûïgkœkŹ{DîÉÄÁ8FëŸÿò?\ßzròÁ‡yÍt{›Qæ¨Ý æóÙù§''kœëÄùéÏÖ›œž¬q®gZŸ¸ˆÃ ‹£¼üääüìLkN£Àôö~Bêñ.f^Ìç/?9Yã\'ÎÙÙÔð86Xà£?¿{øRÍdØô '=–a¹ÅfZôãçkœëÄyqï“<Ë뿨ïý4 Ìæ3‹£|ðoÎg‹êbYWŠîêÄÆ+ƒ4M?X|øï¿Zã¼r8ëë÷÷ú ÇnôkÕºbŸIEND®B`‚Carla-2.4.2/resources/bitmaps/keyboard/white_dark_on_orange.png000066400000000000000000000071171420416754300247040ustar00rootroot00000000000000‰PNG  IHDR©:DEî• pHYs × ×B(›xIDATxÚí\ÏÅ~ïUu÷Ìì.»‹w× (ˆcK+…àÀÅ %(§$R¸E剿"9pA7”K¤#äœDDŠ‚8!…Hãc{½;?ºßË¡ºª««»gwªƒÅ†)­Ç3ýãë÷}õêÕ«êêX–¯kA¸÷Ôú+Ï>váÁ“[ŽÈYÞÿðÊëoýíãO¯/}ï©õW~úØ…w4!€ˆ½&æ,ïøÙëo½…ùÝÒTl17xÿÃ+¯ÿþ½?½ÞÅ«£g»ð“š¼­"Õuû¨äŒ´¼ †|x¥—JJäë£àÏ]üÞù{ÓÁšRš! €Hñäê¤Ô«¯ýq! ~ñÜÅ‹Þ?\Û$RÆ0õÏR̤Œˆ´RZ鄈"Š5“D™è±HQ¤•Öš‡ˆ`üZ„U®ha¥ ¦Ò‰ÃAfF@QjFt/ÑE #TJi¥u áÅ:¡FJ+­M'âécxq¡)Fy¥”îÒ‹ÂØi4",ÿ"’ILð1¢Ñ¢˜K "ŠéÑ Û’µC1 ‰‚ ° ‰ˆá1ŸQ#"BjècxÚÍ‹2"BÂ@ÃË쌰‘ºô£ñS`1G {™™€H•¥½ˆ;Ñe0èá°ÝÉu{¤2RØCîæÇ,@Ã+K:>P^(ÒXØ¡­]ÊnŸ 0•¦öª{v8åFï☥RÕ¹â]K*.syaè= 0B õ©©’'‹Ç ûÆavéSzpÕî­: dÏ4ŸÙF±ÖîMƒ+÷Eú8çõˆ•’1Ky9g¯Êª5­ÅŒ:¯xLöRƒW„HXX×'l÷æ7 ¢ÓЗ;ªž€MwcbÝš¸VÂ^í–£ãgÂõº™Ã«oÔ©ëÓ§1Á ¤¡ؘÕî]´èÖǶ{ÓFQìi"nö„qqVhc¾Ãq©LÙõÆa‚ ³Ã1y1ŠÎ‘¦›W£*êÔõ±¼b1‘9ÐÇŽócZ=Š K§>Po÷èÒ A@@a” “Žl£írTvD©ï´~턪ÝwòŠgd,¯ëÓC%lí,^*Ùn¾EÛ꼘/¾S[?‰©'ï°–Çö‰ù=eMsÈ|^½² õé“çûHçG· ÏïÐG{GÛh ®¶ ¾wa 0쮼\¦çØ¡%דØ.^‘=´ëSæzQy¾S#Ч¼bŸøtˆ>ºmƒB5¯ÜoD$Žók„hL4ýˆÅ±aEÂjžË+vÔÊ¥7ú–LcꉑËs}},¯x•ÕGƒMÊlj&Pži/2>‡ã1o Óc&¤6ã!e.êÂxÅå^qŒÊk¨OÉ+¶…4Çx¯ýÈaú”y~%0 í±_=I}Œ'6u¨†F±#"cZ¨¾¼ö×Í+:’•ÎW×§WïÏ·`“W¬ò¡úÔb>ºž =J`c]+ãÑ⦉ÄÄ6àè1Û´ÅŽÔSK[ÌoåɈ­7ûú@eÀÂŒLcõ1¼ ÆŸlÇtˆ>~®Ç€BfjóV‹¿oÔ”¢ÇN•¾Ù0æzm¼¢“2{ƒB^ýÆ¡>ÕÜNœ©sô)¾1ÆC!;¥S.Zü~[¨ÚÛ^P-ߊŒfˆŽ“oî¯WT=±ÔÓ0Ó;·•WT );ôúøÞ¡ Y‘à“‰"† 5Aãð,”‡àâÈü<¿Ákq ܤa¨6BÛâœZyùÿE ¶ëS›ÛqÁ¥<íŸÅŠõi pjöE¨ßq"Úá–½‰ç†Ë¼"¹ö-¼â4ò¡°egdpfMK„jƒ?¬±²‘(ªžZpÀÛÒG)h±íP¦%æ7yÅ12"vñŠ ûuFMåû¨Ô®O­ÝCåÑ52ôC1¬(—A\§‹P-ζ8.(ÚYŸqkåŨ&kƒWŸ^¬\eS×ÇÍǨ„ÝúØŸvnëÞög±¥³¿ï‘ýb5ÅbS¥jn§‹W|0íЧg=5ô^)„Å›«Y³f=kllŒËÍZpœ@~X ³‰ƒh-'‡YŸÍîâ©è^ñ˜í¼úæóô!wpÕ2ªóÅþŽbVd¤Â-?¥—R œûáuMìÒ§GÜw•Ô¦O¯¾©K H­§ø]šg_lñq|´>í¾ƒ‡ëµêÓG¥9úDgÙGЇü£Kb䶸,1N§&ŽŸiÇzS3cì~¯>©EŸÿENÞÊ+ºAÝ*–ÇÇüŽ ÑŽ—ذ4;ñ¶cÇa­¼ ¶ªæðêS¨¡ov´ysõ©Ú}ÍÀë ds}tô«o®ÄyL³5« ¤¦‡ºvd;/„F,íúØkEªÔ,¯^˜­úØBàkÕ’¶ a– žêÜÑ-xþÒ¹$ÍÑÇñ½‘ÒE1Ÿ:—fTms…õ¦6ìæ1QŒtš©¦>æ ãaSŸò‹Â$Éž¿´æ`0š§­?ÿÑwÒÁP' ¡BDD…„@hU‰¾ok¦ê£Ë×Ǔٜko®^úáù.»skKgU8ÞT‘€(¥ïÛ¤ÙÑ0Ÿ9ÿâÓçNììh’R§Z! " ’ç³Ùøà·?˜ÃKtšÑÏ~ðí.}kcc3É22h¾>öÎ‰Ò `¾ôÌù.;±³­ÓŒ” ô±¼„PÝ¿3::æ‹OŸÛ9}7iÝ¥ˆŒoí½ñöÿÍK«ëw¦ƒ!)"­!¢é„óÙd6\ûìÓƒ›7Ä£êVœÀ¿üÃ_~ýcî`ee}k' “, pÄÎ5K>L'ã/®^ïí¹Wá@­ß­­mìœÒi–¤i€#"ÀÂEÁy!,“ƒý½ëŸï¾üæ|^œOgÓ鵫—nÞ4ÚUKÜê¼þü«F£µép˜dY«>Æž|:Í'ãkW¯ìÝ(uoêSÖ® ×Ö6¶N%Y¦³¬UÃk:OÇ7?ÿÏxÿ¶ëcƒùhíŽwI³á}˜‹kŸ]Þ}ùÍús£~ ¨wŸ*M‘hëôÙb:™N&ùtÆynç—‚oݸnbÉÚÆ‰t8H•$Z'M(½A¥i tâä™ÙÆx:>ȧ³½ë×Ì1+k먈ˆH+¤ép¨“µÒ¥;×pZìJ/•¦¤ÔΙ³ùt6›Ž‹é¬`f.ØñÚ¿q²ÁèŽÍí$Ë”ÖMߦH¸}úžÙd:Ùß/f³¢È>†i¥Ó, ’Á@im0[õ1E' ˆllŸšM&_\ýÔl\ßÜF…¤”UIëDëÁp!}t}kmhagÿÍò ¥IÖI:\B˜ ÎY žŒ÷¹(`°²’Fi6$­HQŽÙb¼R)…D*M‡“ñ~‘Ï`¸²:Z[/q4!jBD$ì©Be˜ ÎãEZ£(¥Ól´"¦}´ñRÚdš¯OéRJ )EIš œ^Šæëcl'¥¨ÈsóTýpeue}‘"õ ë¾,™œ ¨Ð5A¶Ä98^Ý#‚Ò‰J4)e¼Ü$ v½—]ìÅÀÌÅ4çâ %Ì.qŽ N0§‹-oy@¨­“rg*‚‹–8ǧëÝÞœ@Ë—£ß Yâ|uq~ïȲüß” îëóÈÒØì/¨í€%αán8oCËÓ‡‡–%ÎW‡êç¸y(q‹]k¹Õ¾Áñáµ—8Ç'ÌóË™HWØ:‘on*o-Kœc€Cõ}Î1ª—Wx÷€ÜS|õþCš×Xâ|É8Ð'¬û`—ýâžlñ ýPíe‰sp̳n#²{QÕˆ¸»B^‡ÁEaªÊ*–8· GzàØÞœ®€³Ey² öýÎRšïî úl–8ÇǾ…¾‚ ⃽ -sŽiD”%Η#=p¬hÈgÓ­“÷¤ƒay3̃¦%T‰ 敌ÀÌ"ÌÌ" À¬Ó¹¯¼Ä¹m8Ûwu·ìÅ‘«Ÿü«¬ûƒ[{Wþý‘N³ÚóJÍÉá¦+ ˆ@>ÜÚ[âÜNœËÿâp BY÷ãý[ÓéX„¡uUkP¼èa²†Ùl:Þ¿µÄ¹8³É91Ç ”u¿wso6sQTÏ5¨áJe&!Pä³½›{KœÛ‰3¸ú^Ç|78ÞýèÚÉÓûŠTÔ5äƒZ¸‚‹w?º¶Ä¹8wŸ¹©’¤j÷ÐÑôƒTQŠÙÌàhøíŸ>žåù…»tŠÜéAMD˜ ½9ÿÝ_?Yâ;œeùú–ÿ@ös‘7Ÿ]èIEND®B`‚Carla-2.4.2/resources/bitmaps/keyboard/white_dark_on_red.png000066400000000000000000000066601420416754300242050ustar00rootroot00000000000000‰PNG  IHDR©:DEî• pHYs × ×B(›x bIDATxÚí\ÏoÜÆ~oæ É]­¤UõÓ² +FŽäM€"@ü¸MÒ(4Aÿ¡ûôR#WçÐS¯¹ù–ôAR»pk V,gµ»ä¼†œ’Ãõr¨v³ƒ…°Úå~|ß7ï½y3C`Ù~© àÊpøÑ[oݸzUÖ¿gξzðàÎ_üûñãVÐ9ìþ¾Df÷« ÀÌÍÇÊÀW÷ïä&^s§³»€¯ cäðʘÿùàÁß:*߬À'·nýúúõþêªPJ ˆB@ÐY¶6’”Ÿ~þy+ >yûí7_}u0J)ÙRbÖzm}=suc €™µÖ™Ö:Mß\Y!¢OïÞmâ~ö[·~óò˫áTÊ=; ê4 Wé•WBJ«Aβlu}]}z÷n[ÌßÞ¸±¶½-„0˜:(˲l°¶fô!89:ll$½ž ˆBJDÄÂe@EÑñhÔêôp|íÚúÖV²²b¡Œˆ¨µ–DÇãqkÌÃÃáöv²²ˆÈÆ“˜™Yg™fÖY&¤<9:šÃ‹™%Ññùy0#!º!…È̤TˆJ‡‡Ã¸ßGD«å%¥ Sis_Uõ‘Rh=ÜÚ:™N€@)EE‘”RH‰(„í|€$‰”jkAD÷z*Šf86îX눨5¦Rq¯EÑ €™Yz:M•Róy1s£(I”RU} ¯^/S©¨×‹ŒJ®>̇b&Iâ×Gk-¥Ñ‡€ˆ$‘RJ!„@!L®ÈQi-¥lk$""RÊâXf¦²}ßK)‰ˆ¢ÈâXÇÖY¦5sJDô ^:MÃI"Rª¢áEY†©¤$¥*ú^Y¨J2ŠšôÑY–ë(„R Î4’™Mň©Q­e3hÒ¤2(´B4Æ`LQ`f!Xë¼ìÒZH™WͼD—³×ô1¼1­ye} /‰(jõÚ"vJSÙøôBÊÿ×:˜‘´Îa Cs@ÛÆ<;¥Áq ~æJñ¿ ¦1µŠSŸ`¬Ï+ˆQ~öŠ>†W0#èÕ' Óí¯š>\|Kž3YS;ÚŸßg½û&ÔŸªÒ»ëb5ñêȨ¦O®Rpß»D*Œ̬+ãÓ‡fF»Ä„€"§{»2A"Ýü‰›üÉùœ)yÙ„Ôöô^} ¯ Lv3YÍŸØ„i{POxT^¶ïKñdˆÙ_vP *9j¡ŒYïû"×Âh¯.1ZÑÂ#¤”HÀúm1}f}ÏZ£·ê9í¢”êhšs>»ž1‡W—LÖœó;©ÐØaa˜ úp½ïKvx‹Ž.¬ÀÉ+#o†t=ºBÇË«ãÙ+útÈù%›]}ì·­î>}liàÆ„ûË.9ßí‰JnìŽéíN§Ž›Ç+¸ïëÊvÌù. ÔÜ´{ÆmÖ§˜ãyk¢ V˜nʺ¨\R™À@Í'쯉W— Æ«O°JvߘØE¥géSžãÕ+Žâ+|Îs¾›Kê^뫤BÏkF]1½9¿=&6Ule}Êu¾ ŽúĬ +‹äÑÞ²åÏä£ug²oºŒb^Ã.°ÒòéSëûJou›MB³8Ö¯!0òÐµÇ å& M¼ÂY*útÈdXÏde^·’ê|R4¬ëÙ!ß+ dU©õ\;Bý Ù—9¼ö7ó cÔ¤yˆ©5z‹2£apÔ- OC­Wl–xwQªûš4Œ¸PËðóyuñæº>]†E¨÷•ÏÃë%vc­WÃJŒv1¢^è¬ä–EZØêŠpq®:¬ŸWGo.ëƒî²Ofñ×ÕgömûµOrõ©Özަ€f-¬ f^aJÙÎ@k–¹:%,òܾt:Ò\¡€v½Ý ÚÀ ™ƒsEŸ0´‚É_e}f§ jsô±ÊØ,4µÌ®Ké66Ïp\>æè; r%hà&^ÒéÌ}½¼B1+8ÜÖéà9úxj=¬„bXÜ#”;¸ûReA£TµU쯀7ñ ûJ˜–x]à8â8Vàlh}ÈR'Fóá§c”Øø¶8½.stØ‹œ¬îD ‰—€ ÿ+ËWá%Âúɦý²>\÷ã¶B5èSžã¹™57Ð+nÞžUU86À-ÐVGZ—èÍçÊÈö‡«té'«C¥.fænòL}œ:òE©…Yh7©Ú³rãÏ^ƒ \ç—ãž]ËÁߣ^^ŒlŒVôé°¦›çvS<:ú̾ R ›õ±€ÎxoE12Õ€B”*=3g †-_v‡³›×v|¼:-¼Wê!çîãHyNŽ Õääէ]JæÑfŠeÁëËm1ídÇ3G,×ÁŸÍ+tÄ©ë3‹û NB;itÇûP‰ <ÔÖõ)å|wÖ_ŽÛùR+çç³Q ‘CsɬÛ,Ž3™u¶ˆ¼‚Í¢¼¬OÇ >ån ÀlÔÇ3ÇsSM9+vÉfÕ>öN#Ôw™·4¸µØ3x…îåxõi$»Teœ*óê¸ï0_ŸÙ½îÉõeûùz¿¿øÙ×û}¨á ­5ŠÁ¬á ;—«)åçÂHkôécíáö˜ì,Ôys&ÌÕÇF‚pµp'ijü©µH¢èöññâÜ>9‰ãX8+h„+*Çq;Ìãã8ŽÍ4J¢RjÕÇû:/D `DJIg»¶ÂK$í%Q”¯–õ1§ˆQÝ>9i…ÙK’9ú@¡€ßx£×ë)"Dˆæî a‡"D ¢+I"‰¾?=O§sνÞï¿ÿúëïïlnFJI³,hçEEæaf©Ô••"úþñãE0?¸qcws32·Ã¹E,h0AÂi–FŸÝ»7‡0“R‹3úÃ͛l‡qI!êúFDt¥×#¥dôþk¯ímmÅD¹ñÙåÅBÊý•µ J7o~pãÆÁÞ5éÃÌOÏÎ>»w¯¼¦k{™y¯5 +umw÷cÄw¯]DFD`sßâŸïÜùëG™Eã•~{k+RŠÌ½‰Žqp˜‰(Öú`{ûÓ“ß½ôÔpÌO¬ç®;;;q)s­\cl--Ô×tk¼¤”±RG»»¼wx–Ž×_Þy§×ïÿjc#Žc)„8TxQE×vwÿ$ÄA(våWƒÝÝH)sgEc+I+µ·¹ùÇ““Ûׯƒ^}L&gæõµµ+{{IƒÖú­t§»ùã„)%…888˜¤éx<ž¤ijîwȘOOOÍa›[[q’ô☄PD•Â27Bks¹RŠ…Øßß?Gãñ$Mÿðƒ±dm8”ˆ€¤TD½$‰ˆHˆ\¦2»öûš—W¤ qxp¦éh2IÓ43iƒÙòúñôzýþæövE$ĬË}¼"¥âÕ«W·¦ÓÑh4IÓLk«áERFDIÇQ¤¤T†‘OC†”JvööÎ'“ÿ>|hp6wv€BD’’¤ìDZ4·š/¦¹'6ÄòìãVãÌÆ…”J©~¿¯R­3fÍüÓxœe¬ ÉÊJ?Ž¢´;@5[w"¢’{RƽÞOãq:À`0X]_·8æ…sqJõQåo3/)„"Š¢¤ß7AïåeNÚµ¼}Œ=$¥D$¥â$©àxyÁ¼¤”(Ä4ËÌ]õƒÁ`m8$€Žú8qÏÅ•bå„i÷Š ò³¦fKœKÀaö³ Ni]¯hȬ¢ÈŒ?vb ‹õÈÅ+CYvÞðØ’%Î SÌïí|¿üô€Ò~hÙwfÏð-Ó.q~^Û8ö·°@Ã9[^mV–8ÏNëg„,ÛÿM[¨ïyÎcdÚ< f‰ó\áPý£Šóhóùÿÿþùûýÿ¾êþ28<@u|u|58ÅèÿþýÿÿöñýÿþÌéþ>BÏÜ@DÃìÿþýÿûþÿóûÿ7<±¼8<ÿýÿþýÿžäþMRþÿýBL\býþÿX^[^HLIL¨çþóûÿ7< ª8<÷ÿþáÿùÏëÿDHž¨DHUXSXDHûÿûn×þõûÿýÿþÿýÿÿÿÿÿýÿþõÿ›îûàõþßõÿ™íý€îþ^ñþ^íþ—íý=Ýç|îþ€ëþ~îþiðý™êÿ›èÿ™èÿwîý«êÿ±æÿ³çÿ«èÿwòýRîøÃêÿÅçÿÌçþÌæþŸîýññÿ÷÷ÿtïúÃðÿÂîü=D¢šHtRNS3KTVI4#E3 ==1F‘ÚÜÞ‘ @»¨¹@(8ÀŒ'>×M3åMåãÕ×9ŒÌŠ9¶ÎÓããÕ% 3F%5J?™£î pHYs  ÒÝ~üËIDAT×c````dbfaecgdN.n^n>N_@PHXDTXLœS‚ARJZFÖÃÓËCVN^A’AQIYÅÛÇ×ÏÇ_EUIA]C3 00((08@SCAK['$4,,,<4DG[—AW[/"2*::*&VÈU×0ˆ‹OHLJˆ34’bP361MNIMMI653Wc°²´²NKÏH³¶²ZÄÀÏ)mfckgo"ÍÉr–ƒŸ#/¯£“³ ÄÑŒ®n¬¬ÌLî@&CÚ!^ÝíJTIEND®B`‚Carla-2.4.2/resources/bitmaps/led_calf_off.png000066400000000000000000000014501420416754300213110ustar00rootroot00000000000000‰PNG  IHDRó7uQtPLTE222---(((###Wj~Wk€WlWm‚Wm„Wi|McxMczMd|Me~MeMf€MavD[tD]vD^xD^zD_{Da}DaDZq:So:Uq:Ws:Xv:Zz:[|:\~:Sk1Mj1Nl1Pp1Sv1Uz1W~1X1Lf 'Ec'Fg'Jm'Ms'Py'R}'T'Ca=^@bCiGqJwM~P‚;Z$I(P,X0a5j9r A"C%L:=?769<> @435:;0/146-¬PÒ¦ pHYs  ÒÝ~üZIDAT(Ͻ[WqGO•BQTn‘ EHÈ¥†hÆm†.LbPcº Eõå›5½ü×J¯íǽ×ï¬uþfj2B™žŒP$ɯ;?N*•ÂŒL>;'2+—ÍÌ‹@¡PÀ¢R¥^P«”‹ Ë¢Ðh4 ]YÕé×Ö××ôºÕí†è Mf˦Õf³nZÌ&ã–èìv;lïì:œ®½=—Ó±»³½/:·Û ž¯Ïú}ÞÏ‘è‚Á „ÂÇ‘h,E#ÇáЉè~8ÅɳT::K&°Ósä3œÈdsùB!ŸËfœD U,]”+Õj¥|Q*R—H!q¢vu}ss}U&·H©7è»fâþ>Ѽ£õRÚLïFtñÓî!¥÷ðÈMS$óøÐc‘ÒçžZÏ/Ï­'®ÿŠ~ÀrÃ7!Çøw¤ŒÆüÇ'+ðùÁG_ðŸ|õNH¶ßª¾òIEND®B`‚Carla-2.4.2/resources/bitmaps/led_calf_on.png000066400000000000000000000015721420416754300211600ustar00rootroot00000000000000‰PNG  IHDRó7uQ¹PLTE222---(((###\šº^Ÿ¾`¤Âa¨Åb«Èc­Êc¯ËZ•µU›»W¡ÀY¦ÄZ«É[¯Ë\²Î\³ÏS”¶Nœ½P£ÃS©ÈT¯ÌV³ÐW¸ÓXºÔL•·G¾I¥ÅL¬ËN´ÑP»ÕQÀØRÄÚD”·@žÀC§ÇF±ÏHºÕKÄÚLÊßMÏá=”¸ 8žÀ;¨É?´ÑBÁØEÌàGÕåIÚè5“¸0Á4©Ê8·Ó;ÅÜ?ÓäAßëDçð-‘·‘¹ Ä±Î#ÂÙ(Òã,ãí/òö„¯¶À®Ê"¾Õ'Îß+ßè.íñ‚¬в˜»§Å!·Ï%Å×'Òß*Ûå~§„«µž¾¬Æ!¸Î$ÂÔ&Ç×y¢}¥ˆ­“µž½©Â ±È!µËr›tœ~¤‡«±˜·ž»¢¼ j“ k”t›{¡ƒ¦ˆ«®° bŒ b‹ i‘p–w›{Ÿ~£€£Z„X ^‡ d‹ jn“q•r—Q{NxT}Y ^… bˆ dŠ e‹GrWj{ pHYs  ÒÝ~ügIDAT(Ïc`À ±  v”affÆ0"ÆÂÂÂÀÊÆÎÁÉÅÍÍÅÉÁÎÆÊc`àååeàãàç‹10ˆ‰‰1ˆKHJIËÈÊÊHKIJˆËÅäåå•”UTÕÔTU”•ÔÁb  šZÚ:ºzúúzº:ÚZš`1CCC#cS3s s3Sc#K°ƒ••ƒµ­½ƒ££ƒ½­µX œ]\ÝÜ=<==ÜÝ\]œ½|æíãëçàïçëã„$…$Ÿ˜˜„$“œ’š–ž‘™™‘ž–š’œ…$““›—_PXXŸ—›“]„$S\RZV^QYYQ^VZR\…$S]S[WßÐØØP_W[SÝ„$ÓÜÒÚÖÞÑÙÙÑÞÖÚÒÜ…$ÓÝÓÛ×?aâÄ ý}½=Ý“è oÜR)¿ðˆIEND®B`‚Carla-2.4.2/resources/bitmaps/led_green.png000066400000000000000000000012641420416754300206550ustar00rootroot00000000000000‰PNG  IHDR(–Ýã;PLTEÿþùÿÿÿýÿþÿÿÿûÿûÿþýþûÿýþÿþÿýøÿõSÿW:>óÿöÿùüûÿü¾þÂ8 @|| 8ÅÿÎýÿÿÿñýþÿýÌþÔ B)Ü DÃÿÈýÿÿûÿûóÿô <#¼ <ýþÿýÿÿžþ Rÿþý Lbýÿþ^^LL¨þªóÿô < ª <úÿ÷îÿáÏÿ×H ¨HXXHÿþûnþqõÿ÷þÿýýþÿÿÿÿýþÿõùÿ§û›àþáßÿâ£ý™Žþ€xþ^tþ^¡ý—]ç=‹þ|‹þ€þ~‚ýižÿ™žÿ›œÿ™Šýw«ÿ«±ÿ·³ÿ¹«ÿ­ýwrøRÃÿÉÅÿÏÌþÖÌþبýŸñÿû÷ÿýŠútÃÿÃÂüÂ;¬{HtRNS3KTVI4#E3 ==1F‘ÚÜÞ‘ @»¨¹@(8ÀŒ'>×M3åMåãÕ×9ŒÌŠ9¶ÎÓããÕ% 3F%5J?™£î pHYs  ÒÝ~üËIDAT×c````dbfaecgdN.n^n>N_@PHXDTXLœS‚ARJZFÖÃÓËCVN^A’AQIYÅÛÇ×ÏÇ_EUIA]C3 00((08@SCAK['$4,,,<4DG[—AW[/"2*::*&VÈU×0ˆ‹OHLJˆ34’bP361MNIMMI653Wc°²´²NKÏH³¶²ZÄÀÏ)mfckgo"ÍÉr–ƒŸ#/¯£“³ ÄÑŒ®n¬¬ÌLî@&CÚ!^ÝíJTIEND®B`‚Carla-2.4.2/resources/bitmaps/led_off.png000066400000000000000000000012531420416754300203250ustar00rootroot00000000000000‰PNG  IHDR(–Ýã8PLTEñúÿÿþþÿþüÿÿþÿýÿöÿõýÿýÿýûÿôôÿ¨mÿùóýÿýÿøýÿýþÿÜÄÿÓÊþÿüÿàåÿüýÿàÊþÿüñúÿüÿþÿúöýÿýÿÌ©ÿüýÿþüþýÿÿþýýþÿÿÓ´ÿãÏùúÿÿùôÿˆm øúÿöÿöÿýÿÿùþekn‚‡Šejm\adMRUNTW9>@[ad^cg_cg9=@RWZinqjpsjorPUXX]`qvysy|v{~tz~sx{CJLy~}‚…„‡…ˆ{„DJLgmpŠ’Œ’•Š“Œ‘”SX[x}€¯–PDtRNS5KTI#F3:1E E‘áÑÔߎ@¹¡¡¼>)8Œ´´' ××>M31MäN?Ù‰¿·¿ä‰3=%KL]Ò pHYs  ÒÝ~üÉIDAT×c````dbfaaebcvN.nn.^v_@PHXDTLœC‚ARJZFÖÅÕÕMN^ZA‘AIYEÕÍÝÃÓÝEMEYAJCÓËÛÝÇ×ÛÝOKC›AGWÈ? 00(0 XHO‡A_Ï $4,<"24Ä@ÏÁÈØ$*:&6.>:ÁÄXA]ÙÔ,1)9%5QÞh”¢”¹…|Zzzš¥…9Ð" iS+kiˆ#míìí¹89 Žvdbeaqbr2º¬Èñqª=IEND®B`‚Carla-2.4.2/resources/bitmaps/led_red.png000066400000000000000000000012671420416754300203320ustar00rootroot00000000000000‰PNG  IHDR(–Ýã>PLTEÿùÿÿÿÿÿþýÿÿÿÿüûþýÿûÿþþÿýÿýþÿõ÷ÿgS:>ÿ÷óùûÿÿüûþȾ8@| | 8ÿÓÅþÿýñüÿÿýþþÙÌBÜDÿÍÃþÿýÿûûÿõó<¼<þÿýþÿýþ©žRþýÿLb ÿþý^ ^ LL þ²¨ÿõó<ª<ÿ÷ùÿáëÿÜÏH¨HX XHþûÿþnÿøõÿýþþÿýÿÿÿþÿýøÿõû›žþäàÿåßý™™þ€‚þ^iþ^eý——ç=Mþ|þ€€þ~ýitÿž™ÿ¢›ÿ¡™ýw~ÿ³«ÿ¾±ÿÀ³ÿµ«ýwøRbÿÏÃÿÔÅþÛÌþÜÌýŸŸÿýñÿý÷ÿþ÷út}ÿÉÃüÇÂ'ùNtHtRNS3KTVI4#E3 ==1F‘ÚÜÞ‘ @»¨¹@(8ÀŒ'>×M3åMåãÕ×9ŒÌŠ9¶ÎÓããÕ% 3F%5J?™£î pHYs  ÒÝ~üËIDAT×c````dbfaecgdN.n^n>N_@PHXDTXLœS‚ARJZFÖÃÓËCVN^A’AQIYÅÛÇ×ÏÇ_EUIA]C3 00((08@SCAK['$4,,,<4DG[—AW[/"2*::*&VÈU×0ˆ‹OHLJˆ34’bP361MNIMKI653Wc°²´²NÏÈL·¶²ZÄÀÏ)mfckgo"ÍÉr–ƒŸ#/¯£“³ ÄÑŒ®n¬¬ÌLî@&Dï!cVqÇIEND®B`‚Carla-2.4.2/resources/bitmaps/led_yellow.png000066400000000000000000000012641420416754300210700ustar00rootroot00000000000000‰PNG  IHDR(–Ýã;PLTEÿùùÿÿÿþÿýÿÿÿþÿûÿýþûüÿýÿþÿþýÿýõíÿS:8><ûÿóýùÿþÿûõþ¾85@9|o|o82òÿÅýÿýôñÿÿþýòþÌB;ÜÅD=õÿÃýÿýÿÿûýÿó<7¼¨<6ýÿþýÿýôþžRIÿýþLIbXþÿý^T^RLDLBõþ¨ýÿó<7ª˜<6ÿü÷ÿõáóÿÏH@¨–H@XMXOH@ÿûüïþnüÿõÿþýýÿþÿÿÿýÿþõÿüû÷›úþàúÿßýû™þú€þñ^þõ^ýû—çÕ=þú|þý€þú~ýðiûÿ™ùÿ›ùÿ™ýõwøÿ«óÿ±óÿ³öÿ«ýòwøæRôÿÃðÿÅïþÌîþÌýûŸôÿñùÿ÷úïtúÿÃøüÂyÏÏHtRNS3KTVI4#E3 ==1F‘ÚÜÞ‘ @»¨¹@(8ÀŒ'>×M3åMåãÕ×9ŒÌŠ9¶ÎÓããÕ% 3F%5J?™£î pHYs  ÒÝ~üËIDAT×c````dbfaecgdN.n^n>N_@PHXDTXLœS‚ARJZFÖÃÓËCVN^A’AQIYÅÛÇ×ÏÇ_EUIA]C3 00((08@SCAK['$4,,,<4DG[—AW[/"2*::*&VÈU×0ˆ‹OHLJˆ34’bP361MNIMMI653Wc°²´²NKÏH³¶²ZÄÀÏ)mfckgo"ÍÉr–ƒŸ#/¯£“³ ÄÑŒ®n¬¬ÌLî@&CÚ!^ÝíJTIEND®B`‚Carla-2.4.2/resources/bitmaps/logo_calf.png000066400000000000000000000023531420416754300206560ustar00rootroot00000000000000‰PNG  IHDRGÔ8Ë« pHYs × ×B(›xIDATXÃÕ×oŒ”WÇñÏ<3Ìn¡»B³DaÑõ,BSb·-¹]Ù¥ÿRƒhZc0VkÓ´¶©Q¬Š`}a%º*bb‹ZÚ5Ö(A1©éµ6ØZm7Eû ”Ún-È»ì̬/v:™ÝYf”¾ðÌ«{î¹÷|ïïœû<Ϥ4`qªÅz|Èû¥ô[^˜$¶U¯g¾Fö'U7ÊBŸòs5•Ö<¥7­µS·~ËjELl™ºP–ºÍr3Š y#² ÌV+ÙzÝÒZ'Ù31U³&‰œ¼¡ðïºpâ•>¯[ È9dþa£åþåx5‹Ý(-ïÁjmbÆ\¸Ð\ï6C“¬D^Þ@ünØz†bÅË}ÙRç€A{lµs,Aìpƒ¿…_Õ,Tþ¨7œ.ó/r+t:W2Á²‡Ã“¨;}Ý5EUÞð{›< oΆƒ6Ô<ÅW\†kß‚‰]Vë1½tü‚ÃFŒ(HKôۚŊӭµÊl𚾞>SQKkÛÝ$£àþðXÑÓj£ëœò^õ‚=úíwØ)9‰DaLõ pâ'­ñA Nø ¡¿^°Îa>^roc0d¼.ö§ I›¢Y“tĨ!ûµxé.+úòž×jŽNzØüÇüœ˜õi£~ÖØ·$6{Ò¨Ä4m春͹¦HP0äeÚàÖXa—ãòrŽyÒW]äsþì í® + ›†'³hֆö4 CŠxž[õh×"+/ç”×±ß^uÀÑ7ßã1c÷É{ѱ ›5?826kwרƒ-ÞêÊFïÔÿ‡ÅÕ Ä~ñlgOþ÷-ΦeâÍ¥ÑP¸[6ÞU6ÿ#«Bß[j„ïUÆW‡¾ê=þûqÆépw`Õ8V l¾T¬j߯å*ç3j U¡-«ÈAµÂeÅGúvØ$¨Ì™GZÝ;ÙøµÒ(7þ¤~òqUV¨ó¶[cŠ×õ§¸a„š½q&û×g§/AP”IEND®B`‚Carla-2.4.2/resources/bitmaps/meter_calf_off.png000066400000000000000000000021411420416754300216570ustar00rootroot00000000000000‰PNG  IHDRd £›èQ‘PLTE444''' (Fe(=S(((+Hb*>P.I_,?N1K\.AL4MX0BI8NU3CG;PR5DE>RO7ECASL9FADUH;G>GVE>HJ%08BK!29FM5:IO7<MQ:=QS=>TU??UM@:UB@2U7@+U+@#U @U@ 1 &  0 %!.#","#*!#(%&&$&"' ( !) #*!%+"',#)- #+."$-/#%/0%%11 && 1- &# 1' & 1! & 1 & 1 & 1 & "9 +#6 )$4(%2&'/$(-#)+ !*(! +&"!-###.!#%/$(0%*1!&,3#'/4$'15&(46')67)* 88 ++ 94 +' 9, +# 9% + 9 + 9 + 9 + @.j pHYsÄÄ•+vIDAT8Ëc`  `¤9ZÂDs´„™™™ÊaÃŒ€B,,,¬lìœ\Ü<¼|ü‚BÂ"¢bâ’RÒ2²rò ŠJÊ*ªjêšZÚ:ºzú†FÆ&¦fæ–V QÄjk[;{;G';g;W7;w;O/;o;_?;ÿ»À »à»Ð0»ð»È(»è»Ø8»ø»Ä$»ä»Ô4»ô »Ì,»ì»Ü<»üþ³.,*.)-.+/®¨,®ª.®©-®«/nh,nj.ni-nk/îè,îê.îé-îë/ž0±xÒäâ)S‹§M/ž1³xÖìâ9s‹çÍ/^°°xÑââ%KqX²lù ë•«¬W¯±^»Îzý뛬7o±ÞºÍzû뻬wï±Þ»Ïzÿ냇¬±>zÌúø ë“§¬OŸ±>{Îúüë‹—¬/_±¾zÍúú ë›·è“)FeUïv7u +©IEND®B`‚Carla-2.4.2/resources/bitmaps/meter_calf_on.png000066400000000000000000000020241420416754300215210ustar00rootroot00000000000000‰PNG  IHDRN·ù%|PLTE*‘ù*r»***5—î1v³?œä9z¬J¡Ù@~¥U§ÎH‚œ`¬ÃO…•j²¹W‰Žu·®_Œ‡€¼£f~‹Â˜m”w•ÇŽu˜p¡Ì‚}œh«Ñx„Ÿ`¶×mŒ£YÁÝb”§QÌáW›ªJÖçM¢®BáìBª²:ìò7²¶3÷÷,¹º,ùá*»ª*ùÁ*»”*ù¡*»}*ù€*»f*ù`*»O*ù?*»9* ù ]² ˆíb¨"Žáf /”Ô#k˜<šÇ-oŽH »5s†T§¯>x}a­¢G{um³–O€kz¹‰X…c†¿}a‰[“ÅpjQŸËdr‘I«ÒX{–@¸ØK„š7ÅÞ>Œž/Ñä2•£&Þê%ž§êñ§«ö÷ ¯° ùÞ ²ž ù¸ ²„ ù“ ²j ùm ²O ùH ²5 ù" ² }õY®„é^¤ŠÝbœ+Ðg”8–Ã)kŠDœ·1o‚P£«:ty]©žCwqi¯’K|gvµ…T_‚»y]…WÁlf‰M›Ç`nE§ÎTw’<´ÔG€–3ÁÚ:ˆš+Íà.‘Ÿ"Úæ!š£æí£§òó «¬õÚ®šõ´®€õ®fõi®KõD®1õ®mÕN—sÊ RxÀVˆ&}µZ1ƒª$^x<ˆŸ+aqFŽ•3ejQ“Š;hc\˜BlZgžtIpSq£jQtL}¨^YxD‡­T`{<’³Ih5¹>pƒ-¨½3w†&²Ã)~Š½È†ŽÈÎŽ’ÓÓ•–Õ½—†Õ—pÕ}—YÕ\—BÕ<—+Õ——œ-> pHYsÄÄ•+>IDATÓÁ#PÐ×µ)„¬È(£E›½eï™-}d–="#”²BB6Eˆ•½ò‡œ#HB’¤¤IF–ääIá"]R$%eº¬BªjtE44IK›®êî5ÒÓ'Cº~ƒŒŒÉÄ”nÞ¢ÛftÇœ,îÒ=K²º/ Ö6üÀ–íìÙÁ‘œÙÅ•ÝÜÙÓ½²·ûú±qp‡†qxGFqt ?ŠåÇqŸÀO9)™SR9-3žŠBæ3deãyró_€ÂxY„â”–¡¼•U¨~…šZ¼®C}ß ©-oñ®ï? ­èúˆîô~BßgQèÀà cdc㘘ÄÔW|›ÆÌwÌÎaþñs Ë+øµŠµßXßÀæþüÅ¿mììbo‡8:ÆÉ)þŸ‰çS/rKf¦EºIEND®B`‚Carla-2.4.2/resources/bitmaps/rack_interior_left.png000066400000000000000000000141131420416754300225730ustar00rootroot00000000000000‰PNG  IHDR<;ø6R †zTXtRaw profile type exifxÚ­™ir$É­„ÿç)t„ëqbA˜é:¾>$ÙìE|oFfb Y5•K ‡»#ûñýó>ÿàǬæ'—Öë¨5ñ“G:ùÐÓÏÿ|ÿøNR~ÿ¾?y“$ϯ¾>)ïÆ»}|ÙòçQûüþÇùõë}s@ÊØ×2úëÂm~~¯I‹hZÚéןþó÷ÞÓïõÝÍ\ICýØÔÇÏÛpâb×ö^Vy5~ ŸÛû¼zšiKN‡å¯-CT,]Ér™rÅåð¾ecVׯ»êV{¿ëÖtè¶db9^rµÙ°cÝÔ¶º™åÇô+y×ïz[:+áTn&\òÿ¾ž¿:áï¼î݉‰°{ùÄq©F$Òhñ—Ó(ˆÜϺ•7Á?^_?Ï/…5*XÞ4w68Óú¸Å*ò[öÀ8¯ðþ/i'ª¦/J2k‚£©Š©’šjɦM"W˺¨€”¢‡ 5ÓÔ¦ƒ#Öæš&ï¹Zôã{Z…ú«Ö¨Í°I±r.à§å†f±’K)µ´ÒË(ó©4\-µÖV£çf³–[iµµÖÛh³[ϽôÚ[ï}ô9t-YFmô1Æœ¬9ó3ËäêÉs.]¶ò*«®¶úknà³ó.»î¶û{=vò)§žvúgº8Pz<{ñêÍ»Ÿ¬]»ù–[o»ýŽ;¿ª&Ÿmûç뿨š|VMßJÅyí«j|ÛZÜè½…Ï”¨Ó,T¼E´FÍR—œ5*5KC銢Y¢6GÒ|¤RÂì¢åÊWí~Vîo×í!×U7ý;•{¢tÿƒÊéãöGݾ©Ú &|ûð³ #§Éè>Ž{ŸÚ'ÉÖ©ír}¥B㬛®Ûåľê`¯Þ®·ÙèßzÆ\|îëžšæbàhJ{noe¶$ÝÛ>,.ófÀ—Õæ:;_¯‘Çtvµé‰>Ü-ËÇá=ìŽÁöžqG“Óå<Õ×­~ר”Bé\V]#µ•­;´€—Úæa[sû¾~ÚŠ¸ÛXöT·U!NÒ\ì¬2óhe­ ”V“Al¦«>ß$ ïJ!OµAñX7?­HñYœ-uJdµ/—¶Ê1­TîBǶ.˜Ëu,РܺlñÞŽ®=k¤—mô‡Ê®z]gï{U% éJ™Å«»ßâiPÚä`ßZÒ²=§›¬Þ_pÛslˆŸâÜîÌ^œª8;\›SRõszŸ ×ÛiÝø¥¡<ò„ÚO´ݽÆA¬†íµ6ü-9B°±›ÝHm¾kï7­âÍ~j9€Å8:G©¤ò!UR?Î gNsïoÓûóýÖ|{.®é&/d·éSOºhž5gÐKÙ–yÙ½5¿¹G–hÇ¥6” ƒ’5n¯TEN½¥]p÷ô37œK¤k¶ÃÖ°ˆ/ ¤Ž÷t±^b}¢Í.]0xÀ±‹oy¼§u[Û.ËúYÝg&3È}aå‹0¨—8Ù|w“qmµ–iÇÔhXªû|—‰Ù`e»ø€¡§ÒÎj»O(@6ÕŒ9ñL ÆÝ²›("5'¹Ó,ƒß¬4+—ÝM¨R;~ã„·€ª£ÈÀÚP¼•Ó#Ôž=P²·Î¢I-_]p™³Õ¼Ì vÞCó­´<צâ˜8G0ÏCwmö b¥mCª­ÊsžÑÎ$&’]3P‡Ä =»®’~´[vÿÞò4±3ÊÖ²s%ûGêÑ‚›IçÜEáðM>×bÓéö9æ oîeéJ¿l­^%{r`%Š•\™lÒVØ*v¥jô×°v韦|·³a%öR¦wBB×v‘9 2÷®Úí6ÐÞX<— ¡ì[‚v ŠÌ)}¾ËÂU{„ÿ!; çÜZïÊ÷PÌ}˜= ¬eªªàY@u@ìôt¾âdŠÍþF„›:Cæk ­ÃµÜµÀ'7:V-¯×—r³r÷qœä…{Ÿ1¢«Áûüd †¦ÐFâ¼!v„DÏ,dq{näxí ‰Ù„*Xájð…‡Ü/ê.ú¤aWFœ.‚£ãö†ijш‡|°LmKÊ€Z¶‡“>©Oc¹šÑµ¢ÞB‚;å*Pxý?}C2˜ˆØÃÜ[§Q ʵ–Ù;L5?% µ° ,ýö]É%ŽÞ¶ÈWãpÖºÁuH™º[å$"W‘?p¨ Å&}Ðèn5#q-+é»HBÔO#HìÅ Óð²kÔË\ÉW|Žã*e'zõ"ŒFÓ’'Äkx’ d‘ÈÉUG» ó ¹¸-Ä`P ø ²î«ô¶íØ5|ΜÌ^âå0#ÛÏçŠö ‘àÄA3pèdÃSë J‰Z’ФƒD!_ˆ_ú )¨N¹6:A•h{ñA»ö~ó:6™`œ3±˜@Âßîîð© ä=vûàd2Šƒ¾ã¢ÞO)“éí n›§Â,9š|˜ mèÀc_9^®`ç7BbaU²z‘¼‰PWÒëž:}ã @KXF)ê ‚hbÍ00­à^÷f8>AÀiÇðJåÎPóZ:4vÛj5áO ¹üå›ßsŸ>ßÑl²9VÎ}…mM¯ZY˜ ÕsòäÐhdP7C¥ßpÐ÷s0†4‘TdbÒ臠;& ©;¬Ez í\æØ :5‚¤RнÃ]x¥–#Q˜Tà°‰€!ˆq޶3݇?Åî°9\Ú²¢Y86L¤ç/Õ^o7ă1õ4W¬z½íÜ´h)z žÒqu{½ñàà õ *Úð·GkH P’PÁMWvœvWv¿ η\ŸÌðÇÁ"ÊH4a 'æ™ï„°^`lo0(4Œ1ZØqt«¸güBXýí?è"h…;Sx˜!Œ¤9`e¹ÛG«/˜I1qÌ1’À¡jäÇ YžgÀÇ´IìŠÍ’ár”qCiüÛıÆwÜux.¢ ›ûEp]0¡C¯Íƒ} 5ˆ×§€4ÜUc.ålý=yÅ¡ËD¤Hö—þ y}8´go 7ðwaö™Q`0 $?”¤§Ëhq«OêoJ‚€³mdq{öÇO ³pÑÁîlBž§ÔÌýŸÚsðà«N0ÔF>fáù;ˆ9 Æ)‡“°|Á’PôA¸§]º`¶ G ¬hû»j ÄŸ’fúj*¡p£¾Ž0²¹ö½>ç¾?«ñüRŽ?ôäæp©™!Ì„Î7(;XH ŽÛ g†_ø(+8 pÀ;Üצ:÷%(:¢îCÌcžSô„ÎÒìip p~ßÃ] CÂ×é´fÀ —p„¼$6uU¶“µpƒcÒ÷DÛQ^nã•Ý<b…w±Ngòed8̱D06 R6°M~ÃÊEñašÄ˜0?gÆÈÌóÍð¸i8(´öÆÒŒÝ©ýˆ²NÝ>1þ uÐPˆðöÇã:<7Ý7†ˆÌôÂPûi˜>üQe G%±ìpÀ éw@G!ñ€b§yÛ³é Fjáøÿp¢€Ÿ9&­ÌlDR 7ĉ)¡£±1^GÞh+!Ôí×àE¬æ>FÒc;–JÔ#(J¯‘UløÙðªáѰ¾¨(§±Zˆo}ðõ% âòލ õÀÓï°Yö{ ós½xÆèkbcò½%)€^ðëOX>Ø'ÊDA¯·ñq f¨Láw°’9G”·/Óà—”£¥ÅÈAÊöa›]=,'F‹Î‰Á€‘7cBOžG<ÿ¦Òç kÍ‹± xØÊz`¢õˆ|–|3MŽiD/\K PÅa[÷}˜Ëp6™NBçÕÿj¿½S9ø›d£Øa€Ð%EƒVFŽöðƒŠbØÐX<ábï@†ŸxbH¹8;dݶ#-MÂl¸5C¼Ø€‹y¶c',Ü<º[ÅOÎÌ$V©Ášf ÿó1âÇáj8%'™Øc°éX… «2Þ}¿ÅEAƒù_ö‚ûJƒÙ´=¿r?ýüû‡¦ÿÂÿ™Íä3,k/"¢†Âóç&'ê¨Q›aôn$ƒ‘_Z‡¤<Șä/ƒ6è‰+˜ Ù¾™%?f ÌhƒÕâÁÉCc„h|H!àF¢°bø;Bg܃¯q+ ¤2Ë…Ó¯7ÄöµV[$™ùïQœ‰—ˆRÃ`õw‘Ž¦ß˜UHƒ 3ö•hb3âÉ_ï1@Í`øZâI“Êk–›ÀcÜ{ÃRÔÐëÃ>ïdk”_§B0ÌÜÈvLùx Rö·'’çGÃ"¹! >]°ËÀ²ä¾? JÏñƘÐR…MÑÅö‚1ÿÃÏ¥ E®®WLJ®:7‰ÑDsŒ* Ã`†eJrðÂ;“Eeþ`Ûå©"Ì~éÑ΄¼âŸPT éD4‰Uct!]gô`ÞìV™JJc\Ñôh†—^4J˜ezg ®' Ï•Þâ"VI±—ðò#xÑRrãOއ&X{䦟ØòŽÄ¿€+’øoƒÕ)-T’í­bKGDwww-nê pHYsÄÄ•+tIMEâ 62Ûûh FIDAThÞ­Y}T“×¾o 1F‘F@"¨t´kQ´U«µqs?fÝÚMj7»âj§ŒãÑmzü8Îs´®ºÕnvVjÇ jDl»Á™Z]ÕÂh¿Á¨|‹ M H»?Þç†Þk.¡Gߞܛ“÷ý广ûû=÷y%B!dæ:AÁ„ ޾¦ w”‚Ÿ)XëV°Ab]0´hhÑТ[§O:<éð$wG{N{N{9QSWSWSG>ªŽ­Ž­Ž%7H€K¥€Œ@È0àDàzÛØŸ{‚ì¡3ÃB‡… •~HÇããÆÇ#¾ñ„ú õêI¢hŒ€¤ÿa8ó[èoÈ l =_*¨SÃ~J¿éìèìèì?¢cÊóLñcDlàiL¿…ù$Ôl@Ú'D”k25™šLb0\4\4\$ÓõÅúb}11DÝŠºu‹„G$D$D$"†4ÀÉh†‚}c0¥P¿|ó`ÆåÅÒí7d2 žžzO½§ž|aϱçØsÈ9§Ùivš‰½ÅÔbj1‘vb%Vb%„Xmª6U›dè– +ÀþÿÞ2v¹JÁ…¿o–›åfyÇÉù1ócæÇ¬%™™™©?³Í±Í±Í!íæ­íI‡ÇáqxˆÍÇÇÐ,Ù.š‹À!lR‡X|î ~†]Ú¤ n$’¼èIW¬`VÚ´#ÓŽL;BÞ Ó„iÂ4d„`—‘O­ÀLø;6©ÇYŒZ„ù“A]êó4°¤¦¤¦¤&ÕU˜`—Éïc ªU+ؤñs·Cðäg”½†øôøôøôðÓפ¯I_ô‰¨ýˆ@úÒ¶0Ò«ïmÁÿ;8ÆR*ô¹ú\}®>YT‡–‚©?bü |­cjÀ’z~ vR-Ù$›dS·Šrè2bz˜©eo×<^Áë“Hì‰NZ‘´"iEl§;ßïο¯1ô} ˜èà ÕãØvUðäZKPXÝ/àý7]K\K\KÆfЙkÛ®m»¶Íu^À<ÿì—²9D cûßF²/QpºSÁ Ýí ·/ܾ`pz‰—xÉÔ¯4ÙšlM¶¡Ó¦µimÚ¦Êíó¶ÏÛ>OÎ0$ÍDøÇš,Œßå¶ïX¾´Žï(W`eeu)ÇUê*u•~¹È¸Å¸Å¸%Lî.í.í.m­¬œ[9·rnãÌMÆMÆMFÏ[¢^†J;ã:²¿õÝ|ô‡`fªšm3rè6äÇë1º]Œ®áÙ}5ûjöÕ¸ëy=D+³×ì5{ͤ¯ÍÚfm³Ò¦þ€’6ƒ‘Õ˜Ïæºý{çHPv{~{~{>±Ó¾ÛÓÁ"ÚeÖñ]$w‡ÿ%{ðB·O¤òÞbO±§ôw{‘üí2ºM÷³rDåÂ’•  $ùë¬@Ó¬´··×Üðäzr=¹Äþ° -¾„Æ–Ñd‡<ÏJXõŸY ëÙÏ3ÖuªëT×)r•gˆ~ïÓC†þ¤Ù‰%ã’Ž/”>·2Õ’jIµx¦Ð™Ù!³Cf“Çè˜×?"=DºÁ 3rD=pÑ%#¤jqÕâªÅšRž!ž~ÉÔÅêbu±/ß4y#’{+U}?`ÇTÂ"bˆÏ!>ghàÂ%zCèRÂ&5 ÒÓââw™hWñ Q A– e˜øˆFzQ™ë ÐjÁ¤ F©‰¦Ü:\ÁÓaŠd­ZÊg Œæ]JÐÚ69•‡€:Ù€tƇÕÔ4 š[tIisÝŠÀ ±»Nøo®aއÓÔ¯¯1—˜KÌ%Ò]šK‚’Ð%â$+¯a[ÇÃjêUŒZ£Ö¨•~K5µh—ÁD h¢Ç Z(CÃ7ÐÔ¬„“Τ3éÂß šZ´Ë¦HWr̽Í2¤ª  ©y¥T„4„4„4„Üåë èø@K™ì¨¦vßø}©¢o*µ•ÚJíÉÏÉQr”U¥ˆz-xÏa‰à‚xsýkêêX0ú±`iªDš:Ù”lJ6Å¥ÒÔFî,€TwÙêê¹_´¦.tº ÇvÊår¹\Þç  ©i3¥-„|Ž%[çÿ­P– —"P·¦ü]Á%1hêHM¤&Òa·ÇÛã›/L<˜x0Q.ᢅIýøß°½©¥w9‘àßÒë—°Š¦®ý0Æc±†dJ÷¤{Ò=ÕS½g{Ïöží »i¹i¹iqY6×o®ß\/¿Fà+5êN [$"q'XO˜‚_ãtâÀÒŽßw,/j-j-jýú“‰U«&VuËeee®¼ÂüÂüÂ|ËB,ÄBÈ!@hyhyh9Ñ·Ê­r«L¾â—  TŽ]ûEÊò¿dT1~cÆåuy]žQ4Ê„¨ûÓÖqŒ3?©{Ê¿ü Š±_ñ–ïö"A&:—ÑBgFÎÐÒíßAãr¿I?é÷ê÷ê÷JÓE.,ß*D#v]K©…•j˜œj‹M­« _¾,|yÖYã¬qÖÈç‚ÔAê 5ùìÊ¢+‹®,"‡H,‰%±ýR6CòvûË{ðàõl⣯àí§ç2Ê{­{­{m¿0¬ «âp†;YMdz>¸d===òU~ÉDÇ QAXøÔä<Õêls’æ_äeûìÉÚÉÚÉÒc"ã|N>)e-9/¶¿´‡ÛÜm¬“ßÏrÈà\í\í\-Ÿ%u 'Ÿš („Éhš h²£1ïÄ®»÷)[©;~…V{$ i#¼‚³;.]¸táÒªTÊ?O[(Mþ5ZN¬£aPy£ükê)°cb6ú×ÔüîÈ« îzUÑÔ]ïˆÞ©XÉJþ„dþ —SÄ¿¦NêXSëXM½î2¯©uûÓXÉ­¬ A·}üªG­©Ezî«LµrÆ'Ø]žûh4udHŸšê .­¤|R]}4šz¼1O­A ùª3ì·NS‹/ESŸ¹ȧþÛXBò’QlÕ–²šúÛ^ƒ×ÔE@eäŒ\ÊæPo¯ŸÚ«ØÉÿ†O}‡Ü!wdW Mý kœÓnO—’ ÌûÔÃÿÉúÔ?–|š:Øì ž:U“¥ÉÒd ϤOís]qÂÌÆ¾/£ÝÞƒnW˜ŸºìiŸO½§{O÷ž»/U.¨\P¹ içî¸Ýq»ã<‡é!T`2;R·s/_æLÏ¿Òæº|Ìò1ËÇÈ÷7DoˆÞÝqÞqÀqÀqÀ§‡^q$:‰ÄÖÛÛPùÌΰ/òäïúo®>æYz<Æ@Ý~{@$èAdêÀÆy°Zdzò#}ð õÁÑWÞÉšŸªSþ]Xºdý¯É1$j¦üx÷ä;]wÏÁÓÏZìóÜñy޶Γqi2nf|äß¾ÂºàŸ¼ÞÛ‘™±{ûÆëJI}0•Ñõ7—Ñ{ß}+Ÿÿzý|…¿4Öé`ù”¹³Á××-V±ßØòœë ß¿ðeí¨k郒̳ ‹1§±š«[JÍ,{ê4h²òä9-:`¥¤Ã"Sv¯ô¦ƒ#žÍgš}®M%}ýœQ¡?Å«7z3|Ò¬œ øi¹ƒ¡Y¼äRJ-­ô2Ê Õk®¥ÖÚªfn6o¹•V[k½6»÷ÜK¯½õÞGŸ# g$˨£>Ƙ“gÎf™|zrÅœ+-_y•UW[}57ðÙy—]wÛ}=O:~ò)§žvúg^»@)Ü|Ë­·Ý~Ǭ=ù•W_{ý7ºfßcûçëÿÐ5ûîZútJ×µŸ®ñÓÖt£Ï-LPRý‰”ø•W>ÔöfPŒ4möóõÎCYS™pB­wyc_哾o®¶¼V·6æmg²ácmûa; ‚ž%¼:÷½i¿[ÞhïÜâ»6¿ïŽÒmÒ(˜õÒŒçÊmWŸ¯Xá‡ízaigñßÚÁZ-7Ù'¯¾ûõ·NŽÆgŸÅëP¦“×xoð,ê2ÁÅêwÍB (ñ('µö}“ ߦ•ˆjÕ-Ñö.E¡]uúj'­1ײhÉI=òïObT”ÔgHzóÖ®5 :Jlø“ª½‘_ž½¾JÇà‰·Ðè”:S K®­äc«XºÆ9WuV9lðù^w¹8Ù ÎX7,žƒ”;åmŸë€®ýZY÷„”K}‰f¹õËå11Ô¨“§•þZYVÙÄm¹Ž”Ç4_)7«Ëììí=µÊ¢"¬˜rЈÿ³ó2ÓÙ™„˜™ŸÁªÙ‹Š<Êžy4K{n–ã¹ßÒoA»éÔ‰¯@}£}J½ÜŸÚ&8Ú‘KKR)€ª_*ìU¨Þ ]c'wåtVφÂ?G.¦æÐëΑÕ1Õ¡³.S~öË7ªžÕîeøvØmÐêGùýiÌÙ'u|6ßü|ÈoÌ Í)­[ê(<Šúe¾ÛãÎÅo¨¢×l0ÙmÞF›}Ã@¿exjïzœúò{ˆqìRšAG`uÅÊ5ì.ô3çpŸ00ùdõ8y¶ žýÍ÷JßùôêµÍZek@ÆJqóÁ=f_ ÛÂuÇgÓ¼äzñ L7Æ«£Zô°@Ï·/ªÌÀŽÅƒï†ØEË30©žÙ¾UüI™¥£Và“0ïíθSÑüÒe€_‹k­Yì•ÔåðQ?23›©bg曕Pp~ ÀœÖ Tbi»ç ÍÇ Ü'*23]é«ÏÉè3ÔìüÀ1?`­ Y½èÝÏÜ ÎÙjH!ª>”0ã×2|$0ݹvi7Þµ ˆ…n*òéPƒÁØl“¡É‹:Á+þ0ZŸÈÑRZ¼¹5³xD‹kÕìãÜÍ`ײ۹¬¾¾}©MéTµFï!2'pù€a¸'$ÍÓȦ ³xà–±‘¢½šh¶JþfÞ Ã,·£&)$í¼ãügEíFÂø€¸iIj©L.]b˜Œ{B™ß`Î4& û@ ÚßP…†É=ZýÖßµ-:Æ…+;†Šè„^ѶÔ$6`ª¡­D+‹nÃã©{Ph]6úÞ4¿CݹöÖ}›¿û™äÞ,S½ଠñkí…Œx²a¶Qû÷èfg–”{^f pÒ¯Ÿ66×L|6ªp`6{1ƒñ¼°žÓ›¥ 1Z`>yØä{ ðö·Å$LÝ.ï²å»×ÃuÜ:ÀM­¬)pu£Qó"W Ÿ%-ª‹ÀäEM{á‘a\ŠÙ/c Ì´—ö‚Òõ€¨bùC…õÍBþ*ïŠaõ"Tò .Îç(&Ô‘ÓºÎC¸í[¬è²CNƒ~&}@ÚÈjƒÒÚ§#á@Ð $%SIÆV¤#ë x†øfäJäSß…Òªžx–Åe‰F(PS¨¼2aƵ vêpâZi^· ¡C?:Go Cëî7\ÆGÛ­4‘QD霃aÚÓòêè‹fÀj€ÍQ}æ3Kÿ0ï.¦½/På¹øvp|½X“‰œJOÔ u÷¡¹ˆ9É7Àæ  Ü1`£tUvü‚Šô&vý¨gË =F°PRJé%L´FHwCSÈ+s—³h\fÑp0E?&áÛ#07C–pѸi5èѸäÌPÎ%Þ` 3ÏŽ¼é†óÛâÖ¶°&Œ£€ç‚x¾ÉuÙ¬µÚƒé¢nLR<¡çù°æ a{è×Bh$>µ…ÙgD“Ÿó÷ŒásÃZ͹#aˆ4ƒÌ1)ÀÕé\‰)D}nÍý@üŒÆ§Ø¥×»6cÈ©N¹”½ œèq¼Ãˆ^Á•ñN¬)ó€ªS«³æë½MÀà0)²˜ñm>§øˆjƒ …_ ¸¬ÝY[¥A· Åó¼« ›@º9ÏO„jh7‚Wí¼>)´N9ô­oè)¼ eî“zx£‹÷û:ñÉ“2nj•ŹÒZ™‚Áÿk·?8yØI&†E>’µ5¬BÔ.×]YYá-biá*â)j•áBjC,²Ój¾`>­ØI"4¨ŠQ ŒšáäÑ$ôˆª:È€¹±“Ð]ªžëFFr&AMjÌöe»pþqØÆ h_%²Ž(’ˆ0à–è6µƒk-«5âÞ¨r¾ ÂT À°ÈE qù>ž¼ñA# 3eoHX‹, 9ÀF Ö|‘ Ž ŽCUáLÊ”oXƘ¡¸(:`lá#ÐÓÆ+ŸQWî·’Pdî:å‡èS=¥ä…ƒD“e-`pT/ÅF#4±xSLðŠ¿*ôõ†ªdñÞ#b^]GJpr]ÛI¼À¹ XûCP —("Wãd´‰È r Ž;ž†©–b‹ý¯0"½L°\ç”Éc@€yºD÷£¿rÛ„¸ tî%""Ÿb!«ÑA œDyz¦œ@8b¨ÖäC œŸ¢!<Ä%Ñ~F­ßB!6;²ÝrE`wKÅ5’ïH0?mÃöðqŠpœ”P Kûa“õoú°™ù¨­áïw1ÊB³ØšÔìGØ{kš!/’K«Ð-f6a¯¨OUöT¸ ¤ŒUàeiÌ(nFedfÍAD ¤.“bTi)2pÈÀ¥w|hZ$Â@šFÌUì9¡ÕØ‚µŒ¦HÀK<Ų‚£G©ý+³ÓÙ"…SÁ\ažŸ;3¡S‰"D£,( †¾’ºèí'H=y"¸nŒ/€œ1PøÉ-&CïÝ®GDþÇÐ UÔk”=GŒ)µÅ’V 3nL¯\RU*Åàè„vmQá Ã̤.àH‹TO’ PÞZÆ‚ªŸA¤å:Ó•†“‚Á¦‘î€ò=¡¦HÛ5êpÈ=:Ë%1hà‰y<³Ðh=Œ² %¢.L5A¿g0é1X÷С†ÂžÒš¥`öF™ø¢L] pJ<>D°/ßÄÈ&»ïßKwÙ+\Â+ËÓø:ga7˜R%åPtxCpCžP:ÊP äQÑFÅÍ€ûeØ=´Xÿ <8¢ªžZ±9?t„ ‹‚¶ºu>ú5#n­ucÜ€—صc |®œv‰OTîÙ™ þˆØ ªß·ÔûãO~vüv'iåÀ=1Ú¿˜;®ÒÐaIth_DÊŠpœ#,a±r-¸k‚ÚBspi^÷ “+½¨:±úèýMu£¼+MErÑ„÷”Î|”#vtéν¸ÎSׇŠR.D¼tÜôtÌDØÃW’ÓP„]"³ÚÔ ¶ÀytGØtXW¤a_G®<„¯¤CÔ!C+qÈšÔíCã‡t .oòÂÇŽC5ÈÔ:ÈQÞÅõ“ôOCç²É1šKíôŽ<Ávô “ãrÉ;ÂFð¦+ú‡Ï|s €šÄýùI:ÿ€Bï4Øl˼]Â7ò¾#âå ΠBɯôMm¯C;)ý•¦÷³HЦr¿Ò´Âôú3LÃ(QE>q:ƒù­Pކ1|:½êÀF1 3•µí—bp3Øó­%é>‡TKÿ €pD„>¬žlTS'Òú!™·æÏ ŽŒBVeË&HÐ1Jˆýí°Q÷9ÌV'u¹Cz}W±<ü/‹-•-÷s:Ná¢öª¡“4@ð‹2Æî¢õä./bËüQÞ„1ÈX†B‘Œ"q( !×õä^C2÷Fp.¸l‚Ь<™yÉ7cY'”í.pšàæQ„Ý*v¼N1†û¨¬$¼g8rÕd§mXžþ¡~«+ùêPù7YW†‘zÑÙb‚™²Œ7Rä*õs²’æ zwF\{…ÿ[DOr4qbKGDwww-nê pHYsÄÄ•+tIMEâ 30‰¢nwIDAThÞ¥Y\U¿þž™ÙYØ]Xðm7AM` ATD~ô"©½H†Zrý•¨X™ú¾ ’Y]®?²+Š’z)ZÈ̤®i‘…$"òÉôª)&((‹ ÂÊþvwæÜ?ff½möyïùç|fwΙ™ï÷ûœç9ÏAìsìsìsËÁ|Àžx‰x‰x‰¸ó!íLÒ™¤3I^ë¬[°nÁÀµŸÃÿ9\V¼êª «.8²æ]™weÞY§²YÙ¬lÖYúûûƒ–9á «`&Ì„™#~+XÁª[ Np‚óÉÿ8à4@Á” 0O¤⃡ú¡zÎ]:wéÜ%Oµ!ÚmÀ|ý|ý|ýÀ5Ëó–ç-Ïd$f$f$:²¨L*“Ê 5´†Ö’¯‘¯‘¯AÉâtäZr-¹ 0S` Lÿ/w @Çÿ…a-„³svޏsa.ÌH˜”0)a³¼ûf÷Íî›÷t÷t÷tÊ e…²À·Á·Á·ÀYê,u–Øv£ÝØÖhk´5R:8à5ȱEl‘sšðB8 gá¬ý(ÿ\"îÀ¸Wzá…¢š  šànÞ ¼èà×â×â×⊈×b„öÖí­Û['+. / / —%ˆ÷QÙT6•íøJ6B6B6–¡ehUQQ¬´ -ý‚kb>BcøFHø5YOYOYOéþÙ Ùð×@k 5ÐÚiNŸŸ>?}>³ü+ÿ¯ü¿ò÷Šxýàë_?8p-ÎgŠ3•d%Y °mú¶éÛ¦#UÓM_4}ýÀùÀùÀ9Šs[CjPƒZ³Œ`£J%ÔÐ B •QpîÁ=ðx x x y'„'„'„3bÊæW̯˜_1p ( €ÈY•³*g•6²wEïŠÞ3L™¦LSfÄ+ ÑMðÚñï°–ÂR§ T@Λð&¼ Þ‚è€" ¼À ¼ð&°€,&Dˆ£ÐYt…M¬&V;Ø ]Ð]amamam7t7t7tŸµ|ÖòYKÊ—ÎqÎqÎqof`_ì‹}ÃO =hÚãáÇ×&'Ì;˜%P%W·á\‚KÚþÒ Ò€æ#ô@ô ½|„`¦0PM‘dY€ï8µN­S‹ ùƒþÆè£oŒ8¡?¡?¡MãžæžæžÞ`D‰(%NnFQ( EQ^x4GÃü|øm¾Wåû)í|_·Žˆ%b‰ØÎÉ\×Áu€ T °pîÂ]xIx¡aù"ù"ù"N#²ˆ," ‹¡öÜj55G@YËØC'tB'xTTT ĉ0OLL|ð,‘N¤éd#^×ãõì˜a"$ð+-Ä Õ )ûY¸¾(>@è¯ñ¦W³_³_³Ÿ¨"ä'…=a›f›f›FžÃù8ç£ GûŽöí{¸RC´A[- Ѐfð\†Ëp@(Æ èº…n8áf7¹»&¿(¿(¿Ø5\vQvQvp•~C¸ï8A¶“íd;V5&5&5&ý%]ºR{¥y¥y¥ÕŒå‹¹bL‚I0 ΉOÂÁ8‹U„NIR&¢yYâÊÄ•‰+•ïgú™~ á6܆Ûx·pƒ ö„ùóæ(bÂÄ 'L4º¦aŸŒ’Q2ê<ïÅz±^ì‡}Ô1êu¬ä{±/‘DHlûøÎÎLÖOÖOÖû‰666p_CèS±ú]°W–)Ë”eΩáwÅuH„½Ø‚ˆ "ˆh #ëÉz²þ-ÅæüÍù›ó× áÀ ^80¾~ƒßà·¨¼à‚à‚à‚žØiÚiÚiÚè²Þ¥½K{—jGœ¶ž¶ž¶ZóX%«d•ª1B ö ©wÁž’×Èkä5ÜÝæšæšæµfÃl˜ýödYAV„%…%…%Ù;ÇŒ `êu„:°'hOО _s{jzjzj¨Ã]=]=]=A+ë+ê+ê+Jê§ÕO«Ÿ¦’ÙÆÚÆÚÆbÅÜFeóøuÁþb z z ššðrÀË/0bD¾«þ®ú»jù?D¶¯Ä•¸Ó )Ûo<¶ñØÆcäÇûTûTûTƒ‰úr}¹¾œ¹ôKÎ/9¿äØ–ÚÌ6³ÍL¼'¤°ò±lï•ì•ì•ìüŠî¦»énÎ[„}Üȸ‘q#÷ˆ×ÓÑt4Ù­æ*s•¹êa*±ë±LÄiâ4qÚQ<„í¡Ù»<‡ÑSÇö„EmQ[Ôä6ö{½€<ňˆ);~üøñãÇéƒâ<ªUŠ*åá ß0~Ãø ÎP5²Ç,Ç,Ç,¸† q!.Ä6~ÝbïÁpÃv 4>B?=m¥­´•“™Æ˜Æ˜ÆÈtâƒDØ+s•¹Ê\‘«¤ªßQ¿£~ÕÌ-ç–sËa€2SfÊL£5h Zƒ<¡ê ŽôÀvWÊ‚ ‚°~ì-– KudXð†a v³ö\ÁÙSEÅxh硇vÊvº8¯]Û®m{®ëãú˜W„ÆÂXK>åú‚a0 †­Ð ­h—ö„Ï!ŸC>‡—a/ì…½pG'…½Ø^ÿñõ_ÿѱ^TŒÝ£ºGuF¬!ò y…¼B»\‡ëpÝ~Æ•²ûpîƒS`ûAᮇlïxŽÂQ©È—JØ‚éÓ ¦ËŠQ!*D….‘ï!NÖ²¥l)ÜuÍ ‘IŽ}4eÜUaýå–íq?îÇý°Z¤‘í¥°Ï®Ì®Ì®td½šòjÊ«)Žs‚Èg¸©ÜTnª,‹8H$RZ´mF›ÙÐ Ð@ª`Ì€ö_\5Ä/ŒCÙ^hÈù øHÊöƒ½ÐäbÊœ*§Ê©rÞÂy8ç‘Ûù²F8 'á$ÿP*…=ca, ¹Ël6{äJÙ^ ûw‹Þ-z·hDÚBÓBÓBÓütæææ•-mÆ\c®1wùÛŽXG¬#6h±ëÁÙ Ùlÿ}¡‹RØSJ¥‡Òƒ]Û²¥eKËŸ› ÷î'ÜgjEا§§§§§Û_)@¨¥|ÉÎeç²s×Å󩈼Ê%sÉ\²Ç“pŽÃqQSÛ­1óëmþº5DÐÔàJ $xÓØã2\†ËÀ?,',',§ÏS û’ª’ª’*ÿ÷]Ž.G×#ŽÀ8â™°vÂNßë¨ 5¡&O ?JyBËÅG5õ¤Ëä1òy fA„Ax ,°hߨ£ ”2 “\L.&c§öƒ9ƒ9ƒ9ËqŽÃqíÐ ÝÐM¾/*ÆGõK1N~TS¯ðÔyêAŸp67"þXäC„À„Ó5ýš~M¿ÌÌ`³(aöíííªÑRØS'©“ÔÉšxÞ†·Y›Ýˆ|±&Ÿu'òéMô&zSo3yžî–í•iÊ4e[ŽòQ>ʇ¤°-½9¶9¶96{çVÅVÅVEÿn—/´šZM­nš“'Ï“çÉë2“ôIú$½w`}u}u}õ€þäÖ“[OníõîQ÷¨{ÔøÇ±=ryŒBóoõoõo5<#úC¢ÈWSjJMð"`¸q¸q¸`EïŠÞ½2³ˆYÄ,Òu ñS!RŸºÁûBóÀ6°i6 þP*_C ƒ0ƒO|CX[[“OÜ4Ü4Ü4xïÙ^*òÝYz½ï÷¾ßû>D ëRŒ"Û‹­º¡Û^½Ð ½D˜Û½½âsÅçŠÏÙb)±”XŠË¥"ÿq¸FÐ?H-=)Ûó[cÇî!l/Š|©¥çnooÂ&lÂ2›ŸÌOæ'³vKÙ^”°â<´ŽÖѺ‡o"JXê u…º"ûhˆ ËËVÑs±½»½½g‡g‡gk²Í´Í´Í$ÇH÷öRtÑ¥E—]rd‰×ÆÍÆÍÆÍàm_g_g_õ¨5 ŠæmÜè²…; :þÈw··§ÎPg¨3ÜûÃvÛ=l·¹ƒ½;‘¯ÉÓäiòàOçÓù0Ãa8̸6 ®zd$îˆîí ¦ŸégúÉÆ%Æ%Æ%ò¤?+ò] (/ò1×εs펷ñ¼ï hWÊD‘ÿˆ¦vÕPß¶÷0x< lnff¦Ç|©È—µ(ò¥N>DQAȵÛ’²?éäS–NK§¥“:º:tuèj“BuBuBõC‘/’¬˜²ìøìøìxG–³ÒYé¬pLpLpLo¦’©d*©‰P…PHÙHoÒ›ôf‹YÌb“³%Nþ€koÏsbðBI„W‰W‰W‰³Ã¡p( ô)ÛK#´fÇškvŒH[`_`_`ÏüѲֲֲv»¡7º7º7úßN9J¥ŽÒ§²Ør¶œ-'gÁ*X«X'¯èÛÛÃ@ë@ë@kð2K¥ÀR k}2èÉ 'ƒ<õ¯½óÚ;¯½ƒ»»»üsÏIž“<'=wDÞ'ï“÷ýpŽ>D¢u|bP Šé´s÷<¾¿+°þÍ|Ÿ¯ç5õWQààQ}h ¾XÎ_‹"á·2ŠQ1*FEþ¦ÎUçªs{f'ÌN˜Íìa?`0ýÛìcícíc7¨‰©ÄTbêä6„F˜Bx…GAS«rÕÔ¾E¼¦nŸÅư1l 1™?JÀ¢ y{õNõNõN‡LûRØ[n[n[nO;Ì;ðípNÀ j¡K#þ¡¥'jê ÑÔîØ^Ø_%Šˆ"¢ò¥°ÇþØûGâ'P Üsîω|×koæ5µ§ŸOOO1F¨!vì‰gˆgˆgð‚%X‚ÅiR‘O¤iD1¯Ãëð:6ÿ_ù¢¦öŠÐj µ…ð­['ßk‰µÄ’o‰xR‘Ï“âOËQ9*GåÌÝUäËGÊGÊGþs YCÖ5dµ{¶?¢8¢8ÂÞÝ)ì}j}j}jOgB)”BéÉ,òÝ9ùœ"I—¤KÒù 7ÉL2“ŒÛãží&£É(ó…§áix@Êö\WÆ•Ù(·(·(·|ØG5QMTSñà~àçÿÇN¾‰_¿0~áþIØ‚-ØG   ×ܱ=2ŘbL1!/X¿¶~mýšÌãÍ7Þ|ãͦ1Ò#ÎÚýµûk÷ÓþZ£Ö¨5âÝ9ãrÆåŒsdˆ>5ÞŽ·ãí“ÿ¦SëÔ:u×ÌÀ3ð õÏ®³]g»ÎúõÕDÖDÖDþ%°GÙ£ìQjŸÚóm~¥¼-œ(n¦è[ô-ú'óXì±Øc1{•ÿò¡x¡¡¡öÎÈ%‘K"—@TB%T컿ïþ¾û¿æ¶ÇµÇµÇy8L?™~2ýäo«»Ww¯îÞƒ…õD=QO¨ ˜™™‡m¾³ÔÅöüyÙs.ØÓÑt4Íùò’…¸ùîà³>u}êúTrKñÜâ¹Åsû¿ý4ìÓ°O؃çMçMçMf³ŠY5 gà œócÙÞµ··6ÂÉRØKÏíû¢ú¢ú¢$lï²ôÈL2“Ì„‡&§èÂJmawçö.iZK×Òµ\ºösò¥–žs´s´s4Õ JP‚’͆,È‚,2Ô%òçäKMÏÿ¯¥GµQmT›3”?m&  Š¡˜mþ³lÿ¿Òxƒ±ÑýIEND®B`‚Carla-2.4.2/resources/bitmaps/rack_padding_left.png000066400000000000000000001525731420416754300223630ustar00rootroot00000000000000‰PNG  IHDRt†dNdzTXtRaw profile type exifxÚ­VmŽ,' üÏ)rŒ ÆÇáËRnã§LÏÎnVOy)fz†T•M§óןžþÀE•$IÕÞ¬µŒKL¬ üèùó:¯û3GYî÷óçuÇJ_¼Üw~&U^Où5ÿ±¾½ï0ô‹T¿mà·›òÕ±Ž×|Éå5Ë5½úçÇ}w÷ód7¤†ö$õ¸Hf°p%¾Û†âSñ[ï0ŒžG^$yç•'Æ"£Bœ„v¢AN‡6î‹b”rŠâ^Ê*|ç:k±²83±Ä /ÊÆ›;^å0³$.ïXèúµëoQ‡çMXZÆ[þu¤ß-øÉp_9]5ô' ®¨”àFŽo,!ä/Þêøc¼¯ô…XƒõÂÜ‘àÈó11+}j‹¯ë*î¾Hw°V®J¾+‚!¹Wj”µ%. D^XÊTkÙ²s7:‚oìQºkK-ÏmŽù,Yuµ¥«/[c—Í[vÝmëîÛö8t ¥täÔÓŽž~ì ‡Öœ]¼zsõîæãͽÊöûø¬Ñ‹µr™Šuúf ³ªaèš è358cEЩ²t Îr'‘ÌgÙ ª¢Yƒ›My$j P•êôæî“¹ó–€õïx+?a.uÿs%þÆÛ/XÛÑ ×eì©ÂÀ43ªoÓ–E~öLó4µœ‡Ãï3ï˜AQŸ Lj³ÇR¬d?uNØØÕ¥2rÓ‚i… IÎÂWîgzev'ŽMf|úÜEš^Óu ìVÝ ¡†÷}\ŒNÒ]ÕÛ5mæ:€$”š ϲ!"kÇ'Z¶áƒË ÀáØ‹?ܦ:½í튤·N £C:ÚoŸÃNá‚æ†ùÒ©G¯ŸáÈ|:Z³jÚ ‹ëAgŠ4ê¥nq}9XkÞ,½#A„‚¤:ÃE¹ëpôkR«õÌö/8Ȳ;²Y´¡{z«ûÊØ‚Ôn!874/¡<"oê;*Ó ­3¯#š2 ø‹}Ù(p<&p…ò¯, ÕÏÚ•ÄbFQ8p´O¤Ñù*ûÊ\¢¼LM˜Äš‘G ~qƒGœcG{¸›­~0ì‹¡€dd'^8‘ú@5ãǓǫ<”¯„ƒ¥uKk5EÁU.Ÿ[/(Á°Éí3{z6^ŒpÂ/E‹g²NDîMä’¡QI¥/´Eõ  v~5#Ô˜¶PW”iTçÀÀ¿‹êä¤Ð£n¸F›ÄcJÑôò¹ÂZÞ¤ôáO' fðrÑž\âÈ@š‚ð¢½<Ý!{zDþG€–.X>zé͒㨉:î;ڙ¼àpÂù‰ÝiŽÛ¿’)âè>+bKGDùC» pHYs.#.#x¥?vtIMEâ "5K ¤š IDATxÚ,›ù¿MõûþŸ÷ýZkï³Ï9Ž)sf2 © ‘’™”L¥H)¡L!e(’!)™§PÈô sÌ2“Ì3gpÎ>{¯µ^ßÞŸ?âº×u=¯[îüu+~+nížÉ{¾Ü3RÿHý5u 3ƒÁ\¯Ï ÒA:H[¿$U€T•Šò$ÈC¹)7Aëh­ ºDÖé ù%Ÿä©-Uä9b‘R xÂ`×°Ÿ·€müIÐÛºBÐ*šW·ÓŠRäªÜ‘• ·Y©µÀÍq:àæ¾[î;pæ½³UÎ-Í.--Ñ{ÑKÑK`7Û5v.˜Éf‚éÒDšJЩ:]§ƒ¼.]¤ H qñAîÊ]yò¯¤Ê)+7% tº~%S€¦´ )H¶¤H2H}K_©K=n‚>ÔlÍ3_0߃)gB¦˜.æ5çÐ:Ŭm¢UÁ9fò;_‚›×yÜýüYþ, hÄD’"ÉðgäXäè8ýZG@Ä‚›à¥xy Þo¨÷ øùýb~qðü|~>ˆ_ˆßŽß€ØÑXVìÄöÇÆ®ClWìDü(xY~/¼¼ÞE/ ¼÷½§½!¨c›ëÀ¯å?ã7ßñ“¼LðúÖ÷À?äŸò ­ak À^å5›üåvIPüÞA¡`˜Zæ%ó4¨Y®ku˜«æ¤¹î=÷¼[Üîxw„O‡÷„?…„ Ãå ᥄j Õ!\-\0\2þK¸‘â".D>мé‘Á‘î‘7!üWhyx„~ MWÝóî}pv:ëÜp~t¾s&6ÃL{О2T:ƒX¹%¥I|&#éÜØm03´¡¶CäzäêKW;X»sþÎïv΂¡ '.ƒ?ÇŸän÷I÷0³Í÷f𯜑3 ÷$[ÒÁìÒ?ôW0­œö¦ ˜¢šW-H;i¨]gxžÎ ¤< ’*;e'ÈC9)'A“ÕÓh+m¯½Ask\o€¹nnšU Ÿéxù¤µ\Ôºšåœpƒû½ܼ¿ö;xà(8ñŽñfñ›àÍòÆyÝÀ©ïwÚ–}H%i&H_yMƒü %eÈ%9%§tþbØ·ýiAUð®ì ¹R3è ¶‹mc_yBžš`ÏÚÃvŒa9ЖNÜ s‡Æ %¤ \󺧣€)L–éÀ÷L%ÌÇæó¤g¦7HŸq?^%Þœ¤-I’êCò{Éý’_›ßÆmzE}½ î;nw˜æ¦™yô3}N˃ÉgÊ™ò ô¤I—uÒ dŽÔÀì0é80M™)=´#Èdi!ƒ¼.]¥#ð)µyš­;õÐ+z[ÿ­$§¤èX½¡ÕAž×}:ÜmÎ{Î`à­m#HZœl’ ‚Ce¶r¤“ŒÔæ ¦ À¯æ×ð-ûƒíMÐü&¿®ù¾ôùBÆÊ°mÛt»þ§yAH[yd“Ú´¹´”À?¥?ȹ$ÿhL] RJÞ=¯çt#˜þfƒÙ:V?•ï@®ÉZ Ü ÎC'V|øTZmˆ'ÄïxQpÄ“n’ô€Fåsp ;¹œ±`>qz˜Åà´1/:WA{ëj’+r ¤–ÜÀ ”áqЙzNw —ž¬¹.½´è©ŸD%]¢@ŒL®´‘·èÒJ^ж 4E7îÐÍ24Ysë]ª’¬I ³˜Sà|é–sŠC8'üNx-˜‘ZVÍy.祜^ ÇboC¬qìÅØ1ˆ_ˆ=ôZƒ¯~²·ü‘þH¿Ä{{C¼Áû.¾2¶ â%âOÅ+C|B|RükˆßŒg{à•óªzO‚ÿªßÃïþ5?æÇÀÖ°uƒú`ûÙ÷ö =dBÐ ¨Ôƒ yPË> Á{Áûö=ð‹ùUýJà õ§øSÁ{ÃûÐÁïÁÖ`ØÝv¿½NäÙHþH.H(” á›a¾¶¤ÅÞ÷w´;œÚN5óÈ2Zgƒä–²ØÏhöƒ9jö™í í¤ª¹({d?Ø—l[x®¼v­]b?¾a:{!LV€ü 3d ØÍvS°‚H°]΂ˆÄ¥È)¶Êêd œåŽ=•RTvÉ_²LSÈcÍ=sL² œü`–˜Lè‡ÚÏ| ºNÿÐ gå¹ò¤””R@7ºÑ d¢L“ï@·êÙ¦I6¹À)à„pGºýÝ÷Àéê´p^„йÐ&÷¯}ª áßÃß&| Ÿ%ôŒ¼‘v‘ú‰OCÂÄHŸÈ;.އMÕÍf;HwÞ¤;8ñÜñBñ«kë ±oc«c›Á^·M[Çv RÀéë tz‚|"ce0H!‰HÈ é%ƒ!x*¨<4¥ ¢Tç= 3ƒ™z^ÓÕ KTª¥©JÐÎÚY–‚Þ’aZ ´©¾¦ŸBð›nÑY k9 ƒl“oehyRª‹8Î   é Ž-n«Ûšà ZûÀ{Ìw½]`ý`‚Ý2W&Ê °_Ûšö#ñÒ\Æ—¨N°KNËIp›$# FOêMºRIJƒ4“7äe°ÙµvØÝv]‘$l [L†½ÍA.‚ ìM»d#›lIàY¶7HQ)¨]@5ËÌbÐÑš&{€)Ï‹àƒ¶A/`–ÝÎ$òR_;ƒÐsö 8;T“ ÌLççèTé®×A²d•Ä@Ê8ÙÎËÎ"“æeSÖifYdjƒ””c‰sOä3-!¯ƒ|'_Ë0_åùôs¢_‚ÞÖËÒÌ]i¾‰ê}]ÚFªÊ/z?ÔÂÿ†û$ü æ¦i`V€“üSò¨äV¼7ù÷ä9Ü$éFÒY°/Ù ûÜŸœÕÎAЕf´I#ô;Æ®³Ïƒ”¶$ùùHÞ¦<ÛA»éMÍ#%8)u%ô9©'ÍA«˜[ÐArHÚƒ_Ú¯é‚hÏì—³?ÿÿ'ÿgpLÓÀTç¾unƒ[Í-îf2ž)ʺÊ}VŸÔò ge»l2‰¯ÑŒã ЯuŠv9$'¥?HŠ$Ê}ÂX µäˆœÛ]v#Ø—™Ã°;í:Û ‚9d²ä@0”5|¼üâÿö5)¦-AùcüÀó¼Bžàõàý /hlal]l)ÄóċNjƒ_Ø/ì—„àñ ¯µ—â5ÿ#ï5ïð¯ûwülö©`ïÙËö!Øsv޽ÁÞà›àOðgùÓ¼Áà¿å¿ ~ÌúþÌà·`1ØAö»` ؽoó#m7Û¨DnÒ@ÿŸÎ“é@OZJ1à;;Áv;‡Ÿù¨-¤!Hé/@îͺ¹sÍÚ=­÷ÔßÛRc©§Rÿ…à†Ÿêïç¼sÖYÆÏ< ÒTšI/<*šZYž’ò`2M†)Æ1‰ƒžþ?Û×t1½AêÊRèOg^©MÊí¤¾¼‘°)/-¤ è'ú­tñ¸!ûAè] á?C=BÓàVøv‡ÛàÄðWO\Çmá|àž†PcwކpþP¹P°“í{ÜGîN÷˜Ýf‹Ù²R>“E žÔ—úÀ·ô¥7È"Y €º 4He°lI»3è ¶©}Z~rŽ Cd­¬éÀ/Ì)„C “´‘r ›åk½"²X*€~­?ëëÒFÒÁ®²;ì|°yÙÊ<Œ iEÓžµvOá=/í)Ü~p'ØZ¶„­Î'Nçmpª8-œz ÛõOÝRSŠIÐûú¯^Óüiº€|%Ãe(Èm9%gÚ¼B}ÐÒEÞ)¯Fb ä5­²Yöð#ÈaÎI^½²QRA›k+­rCnIP ŸJà¼ât ÜØ|ó…àxÅýN|ïò m@NHº¬Ý­—e7Øê¶•L))U¥PÂæ¡$;‚ÜÁv¢RXR€­üɰì.»ôMí¦½@÷ÉFYROis°§å)yä‹å8ð ß üwüOƒé@)6Ñd¯ì—µ e‚4¿7hwi§oóe¶dƒ~¤¥u=Øy¶µ½l¥4eÁ ª ì4®?IàóÇkÁ~g‡X¬c7ÙÀ¶4ݬüA[Æ?ñ`†|ϧ OÈ*}ä¾xbëä' ÌW¦«i< ‚–p–ÀQÉç˜3Û9æ11˜ïu¦ŽÙjN˜þ cô;ƒ¶•n2Ìnó¾éš[ÏÊ*`>«l8{5øüþ=¿?øïú#üá`׳Žl0-ÌStºNу`ª›²¦˜õfŽù´»\Öv tìýR—븿ANÉ Ùœç š§YÏ~° 6°Èv²ô’þ«w@édýä˜\”}À&ö‚` =i+ƒŸæ·ô{A°Ûo\û¾…mà˜Ž¦’ Îg¹³ ÜFn_·Hn~Æ·U¨vè9ÐâšGæ’Éi)Ê š¤Ñ øƒš¤BðDP?¨¼Bwz°Š !É%›AŽË§t»Éþ @5{ÌÞ¿¼Ÿâç^ÖÒ4C‹h5âII<œ¤ Ø_ƒƒNàmð¿(Ø ö=ÛTªHWi ’) â…)Hað6û;ýí/¯¯ ñòñF±§!§}ì£ØG•h©hiÈê5:k,doÊ>½¢ÙÑ|ÑäŒÌù9g>xÛ½[à_ñÅŸ A» ·”§!MA¯hDoƒ™éŒs&‚»Êì΀P=·°[ÂeBCe!<"aL¸9D:GF&(¸ï„»ï‚öÔ·´+hÎðœ/rFBìdìFìÄ_‰ww„à‡àçàw ey  °yÀÿ)ø1X¶-aK€¼#¥ È(i µ@×èÇ2¤œ\À|Å8°­ƒP?ìÿ鯯—ßÁo ñ¥Þ:o#ÄãoÄ›C<ÿ(^âŸxßÇ[@ümïS¯'Ä«Æ{c!ž/ê} þË^S¯7Øõv] žþ"<B%B&äBh}h‰»Üónª»LKóœi¡ã¡í¡­ð |,|…™á(„{…»„ß‚ðµppuŸ»Þ~+< BuC)¡2à®] €ÐHw›»ܾn·„’CwB™N Ÿ _‡p½ð•ppë¸{BÏ€Sʉ:eÀéoÞ7=À42L%ÐUfŽ™²E6Ê6pbër¾ˆ­„œ9Ïå‚ìiÙK£I`·Ù¶)88ràŒvÆ;“@ûéÚÌJ³Óì¯ku5H)&Å€Y|ÍHRW<Ð…ú“|’)…t(H™%Ù ßÈ#9 ŒàfƒV’2Ò8(gå?à'ØU oK rEž“®<N[ >?>/> ‚ÊAõ 68Iå“[%…ä—’Û'? )SRÞJy lÛÖ¶÷·–[ÉD¦‚|(oÊPñòžŒ “‹{ st¹.]®£u4ècšOCÀö’R_êÊa°{í6» ˆ’ÎUàÛж¾7ä=’ô¥9Ø ”a48uMw3ä)ù@j€uW¸?ƒû˜{È=:Hgë2ÐìÙÙdo…(Ñ\Ñ<===±ü1‰=±Ü±R±JàÿäÿäÏ¿‚ŸßÛÞ“^¢7¼•Þo5Ä×ÅÿЇœ‚95rª@tcôhô$D;E‡G§Bvßì1Ù §^N»hˆçŽ•í¯´_ÍK‚ cÐ+xÈO¢àþãntó‰ÓÇéæÙl¶ƒ~c¦šoA^—nòðà Ž?ÊŸëÞ:®ÿ-Ä7ÇŸ? 6d›Ùj\ îÿ€éjÞ7ƒÿ¯T° qI“ H+Q0aSÜ í£=´9èJ])S@zÉ›: °d‘ä'…Z`+ÚÒö¿ø¿Ø¿ÀNµß°ì{Ð.¦?Ñd§¤Ê% )oÑœæñã½!çF´^4~ÿw8œ²ïó#0ÂfØø_ø=Übg Ø ‚!…¼ a-ªAêJwyä¾dÊmàqrãC°"Øì?¿’n C¤¶Ü=©õHw-¦+AIB /KH›‚4úŸä[™'ß‚ékÆiG:RD€¨Ü“4p‡8ýÑàTrº“AWhGCå+ÀfÙ–6˜@o[ä%i/ÕAÓÌ úH©«µÀþbר`/ÚÍvè[2K¶5õYí2œÿU¡kma[ ‚Vg dµÉ›52Ûd~œ92&fLÍ™÷3Og:ð¨Ã£ú^€hëh—huÈÙ•s.ö9øyüþ:àeQÌ“c6‚ÓÏéé”焳ÇÙ¦icZ€¹jþ5¿ÖÕ‚º¤£ q:rU|.ÒX[”•²b@¦Êw2d;;8’‚R¸É-\°ÓìD;$Ý<,ùð kw}¾kÓ®Åp°èÁìƒÓ€Ûì¶“Áê. µÙ()Òl’­`KýΖ¶·ØÎ`=«eHDóHnÐßäWùÄ—¨¤7¹Ã¿@>B¤ˆDå8Ø?íe›zD¿Õ¿ÁäÕ³: ÌC§ èYlÖƒü©¿h Íw»¸ÍáæÍ[Cn=§†žž~úoP¿ªŸâ? ¶ªÝeïme د ¸üg?‚ø—ñqñIàýî=ã…ÁþlóÙ› =´«6]oþ0ËÀq1[À:œazÕ-ãî7Ù½ë^„PÊá¯Â½Bo@hohYh$ ÓÖAxg¸ox„j‡ò†{€³Ü™ú œˆv†‚Ùkvš; Ïšú¦8Qç¶ù´„©jjƒÆ>‰ýûâƒâ ãßB<æUöJ€×Ðëçõ{ÏÞ±7€Š4á!¡ ;€é|Ë8»üÅ0a½¤Á|fÞ1oƒ~l¦˜e uµÖÍÐüꂎ×f81'ÛÉæU3Å SNh’ú²Ô)&y¤Ð@êS xD瀳ö¬=¶² ì3`‹Ù,M:–47i$ÞK¼•xkD’"y!qLb«Ä.œ–¼/9’‹&ç$¯†¤I[çCÂø„Á‘¹~^> îÌÐG¡Ñàtp^t†‚I3—L'0Uõ/u@ïêÝ :TËÛ Çd+|(9 7õ‘^÷Sg¾3ÂÃ'Â; r)aWd$æK¼Ÿx ’Ö'ýô-$N(iŽšÂp¢Ç£YÑ,ˆå•Õ‚Øw±Ö±wÁ–·1@@P/(:Cê°؆vXcwÙÿ@%—ÜsÞ´4½AÿÓbú/è2Ý+ €3,@îÉò>Èi c@J‹#ç@§êWº‚ž:W×_/(8` úUýÊ }ô©ò)Éà?éõNClOlY,ümþaÿÌÿðôI£ Ò(òBD!ajÂòðòÛàär.:À47#Ìs HY ƒ|,ÓdH)É–HE©#÷€×¨M _^ È«RC ƒL–I²äuS‚cöo»4ªYr ô”þkrƒŒ2ô)í.O=™$CANPŽI *we0Œ÷)ÒVšÈSà¤ïÍ2òAzvúÊŒÛq2ãhæß`+Û v¸'ÜñîBpŒó˜S¤‚6×V !F0t²ÎÔÅ`š™dó*è3*:´¦vÓ ·$oÐ$MDr¬••r¤U˜þjÛWæí¼io¼¯õµ ¡ ‰£`ïØ$Š‚úÒ èô?SéÝôFx½ÀÞ±Q{$+WfÑÌâÖî‰íIÛs ¾tðÕƒÍÁN·Cìpp¿qn;õA¿Ö‚zì7Œåk°­µ¥®v¾ÚT“õ?9&Û$ò‘˜,·¥ÈSÒ^:Q²í:`6c¤.Øcö_[$© zPwËW Í´‰^I”_åÈÎJp»†Ú…ÂwîÞ¹§ªî{z0hÎ’œÿ—³r&ä,ÊY9Ws2sbÍ—Ó"§!DÏäÌÏi±ñÞñîà•ó>õ>€`L@p üóö1›üÁ¢à4ømƒPàBPÓ^µ!H *¥ Øìþ ‘A%Ð{RMNƒd^7ýÀ)àäwBàôu:»£!ä„âá¶áÖ !´(t7TÌ-“lŠT•ÆòP›h Ž[Ã}Ü}BýB¯†Z‚ÛÂmìÖ[Þº6¡ÇB‡Bû@ëji- rF~“y çt³üò…t×>`v˜OÍ» ¿É2ä„ü*åA¾‘j¼Ä‹ÀLâ>ÈzJɰãí±àHH^Ö·@öê ùô%ýL õ™v)ëxd¯ü%@|yÀRÉrCF‚\ îià‡ü"~ÑÿüoÕ©IE°?؉ö[ê5‚FÀ; `iA†|X??x[½¿½ åšœ™$ $èGc”†R4E*H`¸|.#€ÞŠ€t2 ô¨£ HJÈ a©¤¥AÈ9¶±M±å€·í(¾»ÆÖµãÀ¡'½x H^ýJ?ÒÞ@÷ €‰ çSÐéúÎrÒÀ~jÇÚ‘À1Npôí¢íA[hC­ ÚL«i= ‡ÕA«j5}x‰*Ü‚ Sð™ôŠÞ7+A×è= 2PêÊK ƒdü¼AWnÉRƦ(ðŽŒ—ÂÀb¤‚ãœw;»ÁyÏ=àî“ÛL1kÁæµÖMV£A‡h zQoèUÐZS;kl';d‹V×Πi- ¦µi¡õÀδëù ´‹<ÒDÐc:Oöü¢“´<ð‡ýö2È*ݦé`JjDÍ¥¢CAç™çÍNˆÔêå^rwBfJ–—YœÂŽçàd_ŠæD«Avù,7+d]ôrVWجà¸nÌ­ÚC{ëÛ@^ ?H=™.•A‹èUÝ ºLo«€ÞÔåú;èZ½¢e@‹k)i2AÚéß uåž|rSÊIUàw.p4¯vÕ2`ú™¡ZÌ~ÓÒl¹"ï) ÷eƒTƒØw±[²2³†dÿi¡Ÿ NÒë‰Ï'æ‚Ä–‰uÃÔ#ùrÒÛ@?Þ°¥Át3í  ´­vùC¶ÈN %m’&*WA‡è2 ò†t—æ ä¸ü|ÁK0ÑŽ°_íM5žfs™ñ ­¤»t.“,µÀÖ´I¤ƒlÑ`X—&øÙò¼†àg¿Š_ìÛÐ^GŽÈŸrt¶NÒ£à´uê:uÀþcÚ÷ÁL4ÃÍ0•LÓÌ óù4K/ê&Ò›€˜]ÊçÀÒRÚƒ‘:’ìó¶•íå €Íìãkü²PŠ€Ì–¬Ó^«š}`J™_Íj0¿›“f=h3ÓV딕ˆV÷m·±Û͵œ²Îbçÿ{?6%ö5ÄvÇÎÄŽ@ôPôFô P”ÂVÀ43œ} …5SË€„¤²TyZ^—a@[^¥=˜À|iÎ&ê}ô„nÒµÀ)ns ¤¯|(‚Ü“‹rùÿ®P.GŒt?Ý ü`G3É {t¿Î¦Ù³öàU%¯Ah¢;Ü YY-³ê‚ßÚïäw'±vbVbIç“þJÚÉ¥“'=¶/Mè nm·˜[œ#ÎZg#HuQIŽÛùüzPSå$H;¬cA>“—!ÿï9 IDATå °—mš½ 8Üå*H%RùiK  ¥Ì¢HnbòP]òJaÐ2@Þy Ê>`=xÜcî w(„ú…’C¹@óê3Ú4~&'A|Z|q|%ä¼››Ñ+Ñ„è}È®”Ý!»2d ÏZ5 ²îgÉÊYOd½’õ"D³sŠDóAN³Xïbybc' ~,žþë^Ooø?ø+ý5àWôëùOCð…ýÌŽ›Díà!éü2U&É,°û9ÂQ¯tªNíb^6mA—ê\ZR5äY#k@íŸvgÐü‹Á Øjö¡MÝ&}d)˜½f©I3Æ|h¾ó´yÒTg³ÅÙÔ£/B09˜kûßÄǯ~_¢? ¼µþ»þ ¢An^°ÏÙÆàÿä òÆ€×Ý×φøU/Ë«^a¯rü_2‚ìÀƒ dùÁ–µ¥mͲQv=èM`)+YN¬XìÅøà½/ëƒøroŽ7H´{íð^ñ·ø3Ë™åL K )RZjKåMy ÔÕÕzäªr $Q*qhfûpxM¾•±ÀnƒcËÙ ÐÙú“Þ)"YR¤»Œ–C )ò¸ŒÙ ÉÚd&ƒè±î(w1d‡³÷do’ÿ? œPª[×}BÓB^h&„‡–…æƒ]csÛÂ`¾7uL;Ð:GG€¶Ñ®Úä[ùZæ€ùÆL6c@gÈ,Ù ÒT[é3 ãåY’K–ÈeÐ.2VF'å–é ¨Ò Rìÿ& ¡ @îêTÝ 2C²¸ksœîîÏ —‡ÁlÓ-ºÔuCÃBMÁÉç4p*€sÖ9îœ7Ÿ{Û͆„áŸCÂî„ K ¼=¼(¼î$JH…„=á9áï!auäTdDzF>¼ ‰ÇgD&@b‹Ä®‰õ!²;ñ÷Ä_!ñµHñH%H¼™Ÿ¸ Ï$NLl I&VK¼ I’®%Í…\å“Ï'_„äÍI_&ÿ É‹s Ïu rÿ˜òfÊ2HjŸ´7É€³Ú™ì|JŠQä É%eA†ÑƒÁ²ÓíLðüß½Àßçgûià=/¯ÑX´P´ dvz4öÑ(ȸ”ÊH„ô½é×ÒÓ -+­Dz9xØîᨇcááù‡惇]Òæ¤Í†‡É;?lSêÃ/ íbZJÚïÞ1㇌<¾=£wFqÈìþèûGàQôQÅGd|´ýÑ=(»PÖyðJxí½R \!‰4°lK[ü AË )øeüÂ~>°Ã‚ìûG°Ø*«e=8}Ì«¦5¸ ÝRn)}¡J¡Ò¡²öÂ7Âw!üJ¸f¸„.…RCÇÀ5nº{Ü'Bâfƒ“âtr ƒŽ1¿™‰ ]hM°Õƒ„ :ø¯ùÝýüyþ\¯xç½¼Ë<î¯ Ny¹J!p²G×E7BöÖìíÙ §SN½œ†`WØùv9P—Åôß3ƒD­rX.ƒì’rò8èßÒD0»5UO€”Ò#zô¢fj.®RGJ‚L”±2¸coÛ[@3©!E€˜}Úþ r]ïèEÐ):E'ƒ–Ð|Ù+©@uªd=™ vóøx‘ì Ír¸Ý áAˆ„eYéIï'µKj‰åã‰!y@Ò‹IoA®"¹nç:)Ñ”ý)@rÛäJÉOAÂÖÈ¢È"W =ºÎ gœ“ÎÎï¦>8—ÌI³œOÜ>î`p;;½àN}úB™¡{¡ÿ 4Àíë¾În'Õ̧¤SÄ}ÜNOw%¸÷Ýkîep¦9;œå Cd²ŒÉÊÊô…­ÝýûîÕ»~„ÔV©-S‚½fØ«àîr׸c@¬ü!•@æ0WæƒÔÐä_T̳T¿m§åMÐCò©ì}Ì Ðà )‘ö ›Y%ƒ¨Äå"ðP®Ë‰òæ@¶ËÓr¤«ö‘‰ µ4Å´‚pÿpÑpÜ\t³ôMŽéñvÇ›€:éÎ sBCÅB… !_Ø »Î~v!ai¸j¸D‘ü‘%II¬“pžOÈŸð8„›†÷‡}  ߇p,t:tÂwéámà|í|åî'ÅÉç–§°SÔ)Îw–û¸ÙnÔ}á¬p‹paˆŒN¼Ÿ¸’F'N INZ‰DZEZAä­„v ! = ˜÷Ì[f 8A ^PüÂ~Aÿ1ðŠû×ü«`Ë›ƒ#oÊÏ„@“‚«A`_px‡!,²¹l´”Ôn 7äš\jØT¢`³Hµ @­ §AŽK–¤Õÿô$Ѐ<} É ú²¾§ß‚4çMÆò¾<†Q6àžwg8ÃàÑîG͇øŽø©øp¼Ï¼©Þ\ˆµˆ½k±a±cÀM´¦!ð–ü$?ûN×ù ud¿\F3˜@j­æ‘ñM&hDÓk OëãR t´–Õ 9’!kE|#ς̥=ajú< 2J~ÖŠ cùœ/€…Ì$²T—ii#+%Üt§¿»œ²ÎJç"È]9#ÀIœ‘8"q $?—\$¹ äš–«[®jÀJ²Èç çˆsÌ[Æš\ m¤’4 ƒä}<ÒGßMÒ|šºW¿Ó… Õåeäc¦ I‘ Üþã4ãÁæ±ïÚ`kÒœe £dŒÜ=ff›Éàœpn9AvHª\i-µ¥$ ï …ôÊé{Ò?g†“æœɼš~(=ÓÚ=Ë÷ÚÓ ;ôÁÁ/Á®°ó8 N]§’SÔÕ°F@éA= ¦½¶Ñö ÉÒt‚ŒýXºI[qÚFۼī å¢ZS…š@:“¹¼ÆJڀܔÿ$ÚRIUÐÍ@Mû¿g‚û …máŸB]BÓàæù[z+Ž9ÞÿxUPž°që€u¬Ú í*°ím7ÛH±EíãÀz6°l%[ÙÖ{°#8 ~á ŠŸüF~3¿ øí‚ƒêà§øÝüò4 ²ƒl°¹ì{hNMj^Ö: èϺTòfhšþ2Hûj_°5lM›ø´ ÄrøU–ÉldnpP\’ÁIz”ë×\« 奔•)AJ›”–)€­\ÒÀÝíNwWƒ–1×Mø…]Ì›d“- ƒ¥™<=«ýtH?yRÚü(s™ò¬LÒù 7õ{¹D¸,Ÿ‚ÄXD#°éö”RA¿Òm`ž×¶Úô3B ‚ìf¯¬),¤„G…·†ß…ð« “ƒùÍl2É Ys=õ(2dÎÏœ™ÑÌ ™å!sÍ#÷Ñ-ÈJÊž”Õ ¢­£‹²#S+çÕœ ˆW7wo®·:¾ âMâsãCÁ[ìż àoò/ø§Á»àÝð.B¼MüMïuðÆy_y ÀûÒ_ï?‚ÀµCí=~ ÂÁûàò¯û¹Á[ßâýñ±Þ”x{ˆ•ŒWŒ… Ú9Ú.Úbbÿ圆À‚ãò2¼Lðgøãý©àuñ^õ^†à“`TÐìhûTð;èN-¨­µœ•m@rsXÅyJ€~¨tЇòôþµ»li°Ù U¤¿tMÕdôu] ?€VÒòú¿|ÓHªƒÖ•6Rôk³À ó‘Y¬­AÆI?] ¡ÜÙ^ÈÞ“ýitø§ýÎ~Ø™èÍè9k÷nÚ»dï7ppÂÁÏSÇ@P!Û§Á©bÆ:ÁYáÔ01Aº@ǂԔRR 4·&inpÊ9%œ0;Ì ó=HUI‘DŒäS°[ÙÃàU±…Àö±ÅmЋZÁä+‹X ü*[e˜}æÙ zUÿÝ …Ä“ŠÊçî „ë/ßè}£)yûhÅ£õÀ¡‡=ÍK`÷õìyn»í0 o“,–wì UöË·d }€$:Òüþ)ï'ðŸ÷[ú}A?”I2L¶¹b.ü«;t8EMqóÈýGwtáY€àg;9p@c2_žý†µÒ‚†~.ÿqðÇû‹yÈK˜¶ÀhçyˆÛ¿ ~²?Ô/NlŽ×9þÄ6ħÅÞ†xÿøŠø+`ïÙÖƒ ¯Ü$B0'hwƒ¶Ð®zäué+@šÊÛ2´…t”!®“µ/ØNþ‹þsÀ:ÿ7ÄÇ[ÅË>)*P—ž ÏÊ9 š¬ïêã ¦i%‰:G‚®Ö´ˆŠ'AÐ<ȶ,µlœãyö‚ã?æmðò‚ÌÿÅ{ü^þ@?ø”³œÿs9#Û@úOùÁN± ì\;rI.ƒYªFÛAð•vÔ~ ßÚëöW¹2•© •¤¤Ž9#ÇåÐ6´qÈY%[e1H)-¦e@ k~½rN¯è!0·Ìs ä9) >˜‚&Åœó´Yj–‚Ì’}²œpçбÐ>Hø7<)Ò "«²"'Á>‡µ¥À Ô¦Z m©ÿ‚=Jz»9Iú@g€ì•Rìömû%øåüòv7h!ÍÏv0/™¦¦È¹!ûÂd‘¤w(T±ÏÚ— ˜m'Ú¦ õ‚VA;΂…ÀûùÿgéÌÿm,»0þ]ë~öÞgŸcžgR‘1󜡄TBŠ"ó”T!$QæJ’!%¤2„Ì2DÆ2Ïræ³÷³Ÿû~èý Öëú\뺾ËM÷€ýÊ΂xj<¼ŃpÐÔoœHIü þ²Äeÿ'ð;&^òŸ¿·?‚Av„}l7ÈÝé(-åÐêkyÐöZN«‚ùÑ|«SÀX“a~ÓRëkMÐ1:Xßi&%ØÒYîç ‚RGó:]߸Â% -•i&Ý\69šéòVB¨E(#< BmBçCóÁkçóò^SôPoš7Ìë ÞAo7¼~Þ“žBhgh…×B‡…N‚·Ä|hJШüâKŽXà0»8 ¨ÛJ.©ta!Èoú›­¯MµЉrÜRwÜ=6-`#àV¹Ån1¸OYÍàg®°ì7vo0‚¶~làÙz@?Bü ac€ùÉ9ÙY‘Αڑzù#òSdD¾ …HíHÁH1ˆ&GoG¯@òÖèÂä™-½AdjäȈÌKÚ”´’ºDÛE›@ò#ÑýÑTˆž.Œ®„hRôJô!H>],R=%HI‡\kr/È=òtÈ]6wyÈ{M®SÒ7åv®n¼9yTÊ H'ßI> Ñ_“×F‡A¸_¸Y¸h=­¢UÀËx&£]Æs62mzÚOpïö½î½¶•ýЮï~o ×̳Ť‚×ßõhQ¤Àœ2‡Í 0ùLS¤Ž4”·€¹ÉÏ )2K²À47Í—`-¬ÓAvêy½tf$}A{ë ú¥œ“A êrÔÓ¯Liò¨Ôžwm\yHœLôôo‚sn«^¸Iø¥p'ˆü "!Z3Z8št¤-ÁÛãmñ¾-¢÷i%®ÒJ€\ƒ’ Ld i ïÉ4‰€¶—–âTײúHci*­A7éwò6Ha‰Èà$Ù®Ž;ÏëÀW®… ä’î²dº¬“<ÀwÖ-7Åw• x<è4ƒ„Ÿ($-a›Ù‘à…ƒû‚ |Ì f_Ï/æWûºímCðdð\ð<˜6æ1Óä?°8&ëd*°žm,½¡ßë;  µ—Ž5:Ogƒ¾¤/ê‹@k¢lWÛåuap;]~wt­îÖÊ •d©,è= &ÅûÓùZöë2Ð祴ÔÓÓ 2Û@.Ið™L% Ýèñ&Cy´·>¥#Lâ˜\&I-ªje¤Ÿ¼ÒI"’²J^»`^ÕÚ ä;½¢é ­´·´"yåOÐäQýÈæ1ž;ÞÝvë@¾—E²t§œ‘S êG:¤L—¢ oÊk²ø¨n%Óx \qW—\ÀfןA³ûd7ÊîÙšÎ.±c_Ç–BbSâ‡ÄÏ`GÛêöY^òu!ñiblâmH H¼’讎kì*}Ôív;Áö°gìŸà?áL¼þ?=Qb»â#âÏC|¶_Þ¿ Ö³j£š˜ ìû´}ή>çkû:Ðá„ÿß{, QU@¯hµ ßÈ·²¼‚[ -Ô ·(üdá¦P¨C¡…Š+ä깪àezù¼0 õ[lÉò.mü2]*Jc0Ó5®U@6hŽ–ùZÖÊJ` è2AªS Moy¤êtí* ¤+hL³´H i¯¯UPwä’¾¥Q`1óé áÇCECù r9Ü+ü¨§õðr†e§fÿ ™?džÌü 2ûe¶Ë|ÜQ·Ýݯ™WÓ«f¥ùÍùKJ} ?é2…zÔ-cŠéVÐA×V É²K|.%¥H>+>PNVËc 'ä l-­ å/ÐͲG/ Ñg´*HG Ë"Зõ²ü²žÏd;0ÌÕsÕÀ_âþ]³‚oÁ J¹‚B`ËØ–¶%ý‚WÀµsõ]KÐ5ºRW‚Ì…ò%È¿rWîÝyš>@KÆ1‚'í{ö)ONÊÐÎ:Yÿ}[“ôÈZÙ ›æî’Û Ô—×© Ìä'ù¤£ü$!Ðáòµ,ídN›E =§%@.Ë™–zRìjû—] ÌdKÁ3šñæ ˜&0q03ÌûæCpÿ¸n#xÍo;hÓ_;‚<&oÊHÐô‚îm¯õõ,h’^×Õ ku§îA:É“ÀhZ2ÈM&ù@®Jé ¦‚I61à]'î0p‡„€·¥“4ùEª²hã² Ï^©Î ²€çäI© x¼À0̦éÓŸtnO«=Oí©‡Úrh#¸&®¡«^Ø ¼ÄÿcGƒÜRd±|&«·Ü8>÷+»Ý6&´¡"pHŽÉÐG¤šÜÉ-ž´¹-—e H[m*»€)|, :H{éW ¹5—ü:BÇës2BÚƒ4‘z:"=ÃÏ… Âõàú€ëàèÑ?ËþÙäßýwNß¹èÜžÃ{Îì9+,u° ¸?Ü6·L#ÓÐÔ³Ýì4€®Ò¯tèIÙ¯:Uùäº^Р’)9 Éytº —¢ %¥‚ òJiinŒèÚs€ ݤ ýAé Ð=zR&€a«V¹$—±z'¹#¤tKy(¥:¤<–R&åÈu4×7¹~€”•)3Rf@ò“É-“äœä’¯B¤_䉤tˆôw O„î„¶‚7×|`ê‚0[æ¼ÙinV×RzhLC·‚1v¢í~Z"–È¿šß4Qüt?ÉÏÛͱM€MüÁ) <#σäH.QodŸü š¹ smæ&H“þUú HÛž¶7í4¤=‘V?­¤OËHHÚ5u,¤¦¥þ’šRã÷N§Vƒ´Ùi?¦‡ÔºiÃÒ&BjëÔÉ©› íþô'ÓWAúôé !c@Æ—Ë ËdÕÍê Ù­rFæ¼ ±ßc÷b ^0V9V b/ÅžŽ½ þ†øÈø"ˆ•Î)–S²eMÉê Y3Og,ƒ¬G²ºdõib]b-xÑ Ñ…ÑYy?ò DGöG¶G{ðŒç{ Ú@Ó ýå é z[Ÿ×ÙÃjЗô) R…üò0O“?–Ô"ˆH–d€T•벤?5ܯÀVi¦c@ßÐ}zLOó¦¾FMÄ\®ó­Ù%Ãe<„W††Ò r&²63\›iGðbsb+ãß‚¿Üßà?‰C‰‹XÄw É19H rRA¶%)à>=¯wÍ%ÐŽÚY¿i#3%dž¬Àžá)ÙÒNšKS  )œ§ƒA’qô¶²™}`çÛOÝ|à×ìЙº@/óÜ÷nßÚ‘v"Øw¬µÀ¥º¨‹€†6„¾õVBdOäÛÈ×NW‡ÐRO½`7›F Ù’!wÀ=ä–¹Ö`_^·‡ÀÿÌç ±!±z±ÎËÈy=¶b•r6ÅÎAül|ü Ä—Ä7Ç×_Ð/êW¯¿Ã/A¥ FPÜcöiû$¸‹î¼; Ìæ=7 l²]i/AP/ø'Cp`‚¸÷Ü»î 3è?¿¿9ÝrFç¼9kr’snAΣ±ŸcA|ülü,Ä_޽_׿ ñïý9þC¸žx(‘¶]jÇ«Æ*7$EŸÑÖ “d‰,wŸ+ïî[ÉÖ³¥À5·l!HL oAbRðQ0l³ }ÐlµÙ`“íH[ìO¶=Á¦à|p‚çƒÁ‰<à–ºÕnxÞý^Y¯$˜¶Þæ:hCMÓBà’‰º˜ßLS³ôþ¨?ƒü#—ä4È I•; u4·–“eîšÓ Vcz4] hx™þ49(d+ÈrùXÖƒÛî.¹¶`oÙÍö HwyB:€®ÕÒZ˜Âéò/ñ¸¥ò†,úÿÜ“ÀÚ˳ÀÚ24L Æ=¤Ûà:¹çÝóàÆØ·Ý$pU]÷èݦ›À,1ËÍZÐL½¤1`¡{ÇÍ[ÃÖ¶M ¸\ nÿµÿ™?g£ýkø,Ñ×/‰C‰³‰Ó`³mØÞ9!¥d7˜¹f§™ZËT7õ€Gœsãm²QJÎÔº4&ëäHw™/]@–Ê8ÙªŸikíºM;èЧÕ׊ ã´³ö™Ä©öiû‹@bâ•DHäI<˜XÁ8û–í nÛíö¹ˆ’ d—\‘ _2Aúƒ\’{ú"p‚ãì¾a)«Àö¶]ìLðOú'ýˆuŒ ޽ Á³öŒn¨ë‚ëíº»¨<@n¸Ò®½+rwËíïoïqnïâ½7÷n‡ß‡ú{?pûì2÷#„²BKB{AOê½rN©#ݤ=Hs)*ÅÁtÖ^Úäm¢ý@~”òÏí€þ©qÍíhzj}ÐÍÖ» qRtº¼'+A¶êýô~m«ùA¶ÈJùx”ûh¡Ñ^ ¯\rãôÃðç•Þ‰‡A]?÷Š®¯ËïÚ€<åÒ¥2ÈFY#€ÊŒ£ P—Ét÷[ﺂûÚ}cÛmaŸ³ ÀîwÇÜáÿÈ~»Ø.·+Àåe€kvš[m?à™ nÐ.±;qC£ÀöwƒÝ hÊaÀp™éàÖºÝv%¸ '®ð/ wd2ð;–ëà…G„†_ï‘Po¯4xφŽzm€{@AðN{K½_À»åe{é È ÙîAWו÷¸{Æýú±NÔA×è7ºt¬Ò@Šð ¸Î®•kn£Ûè6€ûÌ^´;À59²—þ~ N'îÛ¸Ã)&RT«€¶•ò)È1J°ëí«v ¸;.Ÿ+jÞ7#ÌTð¾2oyÀˆ¹jŽžÖ½Ò´™Öצ ûu›þæ~=§ ´<”:‘™‘¾‘M)y'@x_¸dx$x/zm½Öú#´;´"eÃ^؇$?éxÒH%MþR&7N® É‹“'§ü¹~Ê55wsÈÛ?O‹¼§!ߣùšåk y+æ·äž‘;+×rHz7©w¤˜Ãf—ù ¼ÌÌÌÜ™ù k{ÖÕ¬ »@vñìJÀC<êÚBhXèƒà:øý~¦&P™ïX üEUê€L”uò˜Ûf³ùô†‘C ­u„¶­© ´è2 Kž2B>Òäo¹šOòJIº@?™( å'¾rY~VÿG6s£]Ü-/ÃÛámÌ…™³v?ÈÓ¿^rçäÉ@r‡äû“ËA´H49ZÜ 7Õ ¯šWÜ ©mr™& ]å9í ,•U| c @è3ú8è© ¹AÎéVù¤²$iWjRRîûÿU·.ðÅH#×yô¤^Óg@+Ê= 2M¿ÒE %5®I í¤Œ”†Ð²ð/¡þLzãhmÕ Ýïå Zýƒ†T u (<T… MðdPl5ûÝö†Mµ{Áæq)6·Ûmp€ œâ°—n!8d÷Ø2¶–«®¤+çJ+çpeÁýë2ÝmpwqeÁn¶Ùõˆ'‰‡À/›¨—‰ý‰³‰Ë¸/Q+Qüb~y¿"ÄWǶŷ€Ÿð ú)`sÛ[6u—Ýw ìUû¯ Á`w0í¥}ÁOò ûƒÀïñD<_, âÇý¸ñoãÛã§À¿ÿË_ ‰¼~jb3Ø;6ÃF ˜|žø ‚^ÁËA°-m[Û \S×ÄÕ–Ég’ºXfê4ŽÒŠGÌÝ×ÃR± IDATv·=Á¶um]°_º¥n!¸|®”+ n‰ûãàe½”=%{#äÉ)”ý=ÄFƆÅÞWÅs—Áf[µa0-Í ¦?ÈI’@*2d®ü,߃ž”6RdºÎÐ! èãZx–*¼ ÒL:É@Ðb¢’yZk}3rUb ;å™×ú6˜ˆ¹b6‚”—Ælé"#õ™ò.oCÐ*X,g\yW$½\j‰ÔÚÎíó÷ûþ…ÃI‡íát ?]é^G¯× Lu­lz¿ÈVƒ|'ßÊLLñ%èE5FIdÅèNd¹|.+AÿÑ£z4¢Ùš º]6È*`¿’£ÀïçoÇhÇý 3ÌdÓä5†1Ü^ö^9ï–wn¤\Ÿ|} üÙøä˜“ÓÀó¾ô–yó@kj5- |ËÌ7Ѳã x4x<ø\}×Ѳ•Ú =ôu=RBòKQ +;é’"!®Ucºô.Ò(ïÆº:¼Œ ÆBPކ<”r'Üjú²VùJnI=Ð~v† º×ülN€\“s°Ê½êz£¤"ÛÁ=àæ¹Rà¥~z.õ$¤öKý4õ#H=—z"õ8¸NnŒKo§ç¼G@×™kæèHY(sA+jK­ò† ‘èKÚOO€Ô‘VÒäqé'ƒA絛!urF΃ü(ž\é%ãåH’2 t€­­¯êˆŸÕ:$­i;ƒ,•e²øÃå¸lð;ù%~[Ò6·oƒm-- Ѭhñh HNJ>‘|hC~ Bø­PÑP]0û¼Z^ÐdÝ­{A¯ëfÝ Ò›/ ÒM+êйòšŒi§3t P”BÜüÍMЙ*T©/UäpGè yDÚ€ÔЕº´ŒM¹ [d;ÈçLd x½¼¢^YõóòyÃAÔn:¼àµ`t0ük‰{‰›à¿í÷_Îr”Ó€ïv¹ƒÀ"ÿÈY/_‚,’)²´¬æ˜Ê «µ¹,ùJvË1JÒM†€,²dœ¼&ã@Èx¦ÏCh™Ée¢ _ÉVYDÉëî‚›Ä;Tù™ îH;ÚHÈuîà€òÌ“*àÖ²ž[àÙmöŒ= ÁÞ`R°³¯%†‚»ëþu®´{Ô=Á¦àl°´´ÖÑÎ Cd¤ÌÙ!ëå'µ²\†¾¤+õÐ;:RKƒü$G¤ HT± ³å ùH·ùì)àéT™,d*è==®@ІýR>Ñu ¥5,íA‡™<ú,èm.€>(×d¨o^4CÁëèuôƒpÙpípm— g†’ÞMz6©/$™¤«IÉIŠdER <6ô|èiðÞ÷zƒÀ;á]ñò€9k²Låÿªªz äM©!]AË’œà ÍeËÛk`sÛ¼¶0™Ôf,ÝÁUu ) Á³v íAàµívI°Úî»Òn´WÀžvœš’=7ûät‹u …œž9Cs^/§`NYÈ’Ý!{ä$嘜¼³ g]ÎZˆ‹?â7ã5ãÅ!ñabIb.$Z$Ú' C¢v¢Qâpî÷50˜6ô=£kt7˜uÚVg€Ù¬éd]ò¹¬).¤1ÈÇò¹Ô¦¸w¸銃æV¸%`7Ø®ðœëáz>nöÀ;hž7_Ég˜ãàð:¯C¨Z¨\¨èí£¿‚6ÐÒZØÇ¯ìúñ ¯‚ÖÒŠZ t³~«ƒÐfR˜& =e´ Wеpÿ‚«ÂbWdÕe#ÈX׎1ÀpÞ¡2P…¢îS0¼žZä¦Éß`âZÃT¯ƒ1æEÒrUþUÕŒ•‚Ø¡ØÆØv°Ãm'ûr©î&o“ƒ÷ ¸\ îAP=¨4÷Œ{ÎõÒ› ‹˜Î,à.§8 n›Ûf×›ãλÁÝpËWÍsÏ‚ûÇâY°oºen=Ø3Áf ϯ€í µWÁ®¾±g!f_·#Àµqum{`‹ ‘Ä…Ämð"÷"©""Í#‚t’nR‚–Aç ¸‚® +º^wêQþ2\^)-¥¥ È*Y/«AFÈr¹ ²L.ÊQàWNq̇æCSô´žR T¥)ù8I2’qLùK‡è8ò® † ‘¶Ö: Y“Ü@{V³ì?ö%û,ÄÊÆŽÍ¹(u¥3x'3²3r +3K²B+{"6ä/ù[6Ö1ô4hy½¢%AÎʹ ,gƒA®È )Æ7×ÍкXßí¡OKap[ÜVÆ1î`’ä§hGí¢OÏpˆí@1¦2èJOÚ‚{ØÕpÀÝïʺF B°ïÛl‚`Oâãà[pϹ=®)x¡”¡(HQ©¢•À¦Ú3v#ض¡í lf܇Þ+n"H+i.í€å± IâÉ~p]3Wt»îÐÜ ÷ô²ùU~•… {ôWÝ RFrä ù‰e £õ53ÌfóŽÙæ]¡Áüln›ÕÀ ¹$頃娇Ð7¡™¡ ½}ô\ôÐ:Z‚—ûÃÜ}s傼±¼^ž2wZÞfy¯€ûÕ s£Á›âí÷Þ½O_Ö@>ŠQXÆ(&Íøšq Se”| r\vËn‘„Üìd=¿‚$‹•0ð/·¹þOº8ãŒvq°< î„;âæƒ=æNºƒÀY P(è긚x*h4€ØÑØÐØã`wÙ/ì\K .\»p׹ݟí^³{|ò`½ƒµ€zÔ¤D–DfDföÓ¾ú"È—²DæÃÀ@à:×¹æÓÅ<rJË|ÐJR^bÀ=îÐdŠLÕõ ¥%(ÐTi,ɳ /Ééº\—êXI2MÞ3ÑŒ5³A¯êaÍ‚PØÛìm‡ënL¼ñ2œúìÌ®3ÇÀ ÅC†6Børø×ðfg‡Ë…ï÷¥ûÌÍ™ “ô5Ðô¼îjQÍš0ÍýAÞÓe !½¡@ªH1éüÀž]§«u 诺T/€ –nÒdº¼EKÐ$½g®L“aò>H yJêyÜ4ÕºÀ5NÊ\ ?‰ChˆWÄsššêºVþ’àÉÃ:C:3È$ dµt’nÀZ±D$·6rO ƒ¬cœÌþu©Ô[Å=`ËsIpäii/ƒTÖº’˜Nwþ»Îþä¶ò›}hD=ƒžÐë®hDËjè>ýY~Éa(¯¤éŸúàÿ“{Àuç]~÷‰+ï6’Ê%ðlûà Û‚Œ gàŸê¯OPÀs=€2\åi°×d–¬·Ó=á§)Î)pE\3×´§ŽÔT:Mú‚>'ãô>‰2Aþ%ËäGuò™¼ò‘¼"ƒ,’eÈ@*CAé ÞTSÖ´9®ÿèQºò”tƒÐ³ÞHo(ÄòĆÆ>{Þ¦Û$ðln›b#ä Jy!øÕæM\wè:×NÒÞ ó5¦€’6¢ µL}ÌQml¶Ž×AÚ$ª£5 æÝ€’•(èx5š úœl”  Ãµ—öšÿGô—ÃrPö“åc>9E ò?ÓQ¾ÉCrä_"/ƒ¤Êyù XÀÏìõyyõÀ[ú(ô5„G„:„߇ðÅðšð-=~(T "i‘‘L×'EÚ‚÷‹™å-£Ãõíÿ—…ç–”"ò èpí¯¯×Ô45À|b&™à½b^2mÀ«dŠ{Õ@ûë}¼N^G“BÉ!B¼ê^9ï!0M=“ ÒGúÈåÿÞ>¹?Às“Ýh 5irQ.³¤<Ê6ÂZJHnÉ'Q`œL–wÀeºÀåÛËö †AlKÙ Øb7ÙuÀmf«ø”… Ò]zËóÀßds\ j»Í`ÇØI6 ‚•ÁÁB®ãƒï!Q6q ‘‰#‰‰cXì ~›mCö°šÝÛ ý¥¿T),÷I0˜·yÈGÉ2®Ò hMKi øüÄqp¯º2. \!çÙQœ .Ù¥`ÇÙ v,ìJ¸ü´µOµÀ­p³ÜP‚ÿ?üÇýþðÇ›øÄÿŠgÆç@âÓÄ¡Äï`wÙ6ö؉ö†ýÜ!wÌí%!©ÚJ­v]ªSM}0+Ì|o4¸ËnË„ d E‚ôàA°9®ë nŒâÞÙ'$ ¼§¼½ï ’¹“4¢y’î&Õ‚è?ÑíÑÝœ<3y)D‡ßŠ„A»k/ ž=aÏÙÓà~s'Ýàš\•ŸAyجùN*IK ?ÃXî€Ûê5> ²§g'e_…Œ†™[2&@Ú”ô­iÍ!c_Fv†Aæ°Œ!cVFþŒ¤åJï‘6Ò.¥}ÚÒº¥6OM‚{?¥–K}2ge­Éʆ`l06˜ ž¹lŽ›à­7‹ÌR0ýÍys\EwŸ+ ¡¡‡CUA³4[3‚ÌæE`"y x‚X ÒH_gA;I3rEÚÊ¿ÀD&J*H;i&@2䬜™(CÈn˜D^NÒQº‚ÖЇ¤)p‡\œ,W5?¸,®ò˜yf‚ :Bê BQª€f·Êî“ݲŸÏy-g4ä M͆X(fc¥!篜…9' §@ދՇx¿ø{ñeàOò7ù¿Anq°«ƒQv;ƒ‚v*$¶&þ®C°;ø!ø‚P`‚0Ø6¶¯}ìY›éʗȲDÞ“A ard=È2Y§‚ÌÑÙú È9'ß,g&AúÊóÒ¤¼T• àÙvn°ëö•à«`6$*øžŸÜ÷î ÷ ¸Énœk¡R¡T*S]Ûƒ¤É- ƒ-b+Ú* h­zNÿÑÝ G$Kþ²y˜|€PYîé&½‚7€÷ÀS yÄju0ÕLcm:M×k&è?zŸæ†3̽ .Ë$ zWŽÊ9pUÝ%§@¤ x)’k&·‡”ù) Sž‡—â¥$À~e¿°AhQ¨oè#ÐßõsíìãG€WyÉ9à5†É)Çe€<RTÂí kY2S:ô‘6R(@„ ùÈϰ§\à–ux†M`‹Ø¼6ÈDÆ`‹Ø(þÒF_:È)Ù6f?±ýÀÝu¾ ÀK”MtN< Á€ YPì^»Â®÷¦›àæ€Ëçâ. d”Ì–_@ïê]½ RBrI+àÐôG]¡Ë@Ïê ]ÒKR¥4È«ò–ì¾b›@ÖÊ,ùÔÓšÒ䌨>ÚP‹êƒ •¤—t½);å8H#m¨ÁÍtCݧ`&™îf=„º‡Ú‡ž]¤;t/x®…;ä °šM|T¦¥iBsà%ºÒìuû·½ 鮃äH\nQ•|à¶»­n#Ø—ìÛôI K5žºOËöÖú*P™R<öšÍ '¸ .9Qt¬¼/AjLwVÕ&R dU𭔪Ë[Òô+ùDfÔ“±òІ1¼ž½jŸ·õ!14Ñ#Øþ;þx¿ ŸØ v2¸SκB ßêi<ÏLf€ì–½’3Ö|lF‚éeº›þ ½u¦Ž[RäÞög€™ÎB .S¤’‘ùà*»oÜ· k%—¡_è·`¦®ù8E„ñ ùd‚”7Þþi‚ÿ¯Ïß Ví=[¼‘‘©néÚIC’ŠDê€Ûá¶Ñ BSCãBãÀ¼j›×AËé ­ºPßѹÀpòð,è@©¨}A–ëc²ô¶ÞÔ‹ÀÇÌg:h.Ím*‚vÐür°Œ„_ù ÌX3Õô¨/h ÐuºM~Y"j;` oð!xÛ½…ÞHëŸ~+ý0…Í%3¼œ&95cS ~3vÉWð§úû?ƒÜ;’&b¬‰Ž(9`§ØOíD`žì–€#I ¯³‡Å@¦ó>¸yn¶›Rƒ6€Ñ@û‚žÑ¼Ò( GÀÕqUÜZ›Üã;W´šv-¥U4ÈãÒT:‚T§ÅÁ«éÝçMƒ¬²ÈÊ A‡ _0Ôw+ì`¿°¿GÁ/éWõ@lWìhì(ä¼36ç-ˆ­íŠí‚XR¬L¬$Ä®Æü˜ƒØäœy9ŸA¼`¼b¼ø+{üL~ ¾ƒ ¹­t;Ú¾e“ÁV°mÝIpí\?7´¾&}@ç˜%æ 0×õ€žͧQ- f¢™¢³ÀTðêš0Ox½M:¨èiÝrO2%4\3\6œ"Ç#›"ó ©cRͤ r4²#rÂýÃÝÃ]ÁÔ6µMsÐõ]ZY*K5ÐNZQk€WÕ;î„ðôPýp ÷€Èíð±¤G!¼!ôth4xLÓLTSõ ˜»æ’·¼“Þa¯x†¦…ºƒ÷…·À릳iï5ÓÛ¼à} ¡w½Á¡¿Áó½1ÞqÐt½¤ÁsgÜ-w\!WÅe€û玀L—βä{ùR@¨u¨i¨9H IAà çIi(M¥hC­«ÿ-¼N2äé&“@räñ€Æ4æUÀã.׌â5ü"ï/0„Þà~´óíL[¦µé´§=€_ØÊ°KÜ-wÜ-÷žëv­­`‡çOHôLLxÑXZ<Ä“c㟇8Ã_`³Sí`§Ú¯íÐSzRׂTÊ’ ²OHI§¥´©ªI!ÐrF«u¹Ì~1R¤–•j óôò¤t’Þ ÿJ¶d ÙÇ4p{¨æ–Ë\ ‡ü ×À]r™. 3sËÀy®”û ¼ÈÎððvHššt¢+¢?E€{Ù}ãú7Åë罨UµÐîtn‘Í àë¹æ3ÀtSÜ´4L.3ÔX°Kí*»¤²< Í€ûÉÇ}À8ÑäEyI^™%É4Ð1úšvÉÇ2pSÝ>y‚U¼ æ-SÏ”Ýibš 2C–Ë!;Ënýqëˆs;Zî|eç³ppûïs_ ìæSVC¨U¨S¨˜?Íis4E­î½£‡uÈ5ç*È*©§Q`¸¬æ "bÅ’ÉGyß刜Y)3Ò\ꈉ‰¯µ@ÕæÚÌ~³Ë¬SÌ1q0…LÄÔù[¶ð>x¥Ímo \ÿàF™ëà¸üéX ^öìÙç!Þ.Ö7ÖbãÇ×Ð^t%ÁMqï»w@µ>—ù²d ;9 Z]oëІÿ'M?³Ät=®›t H iÂ}À3t‘½ÀVösä>Éÿ'r>}AFóÌ.Éyv€’¹:\Çê|pÝ×.L[ݯc íó´ÏÓ·ƒÄ?ãå³\n7ËWÎÞ¦¸TwÑ¥C0*(< ?±$qmü ~ ð/ù9þBð³ýJ~Iˆ?êô{C¬fì±Xkȹš“–œgrнñÙ±Ññµà§ø¥ý ˜Ì >÷[ë~¢R€¢ ÷iyÌÓfŠ™ ×|šL’ÁäoThHh>˜^GoHsé&/ƒ&•Mz&©'DGŠG*BÒÓI¥Ã—!é|Ò¤±t0©dÒAˆ^ˆ–^†hɨŸôD·FM:ÑѱѡüHÒ/Ñ{í½-Ñ»ÑsÑã=ÕèYˆhRéˆÐ…П¡?À¨É1˜<&ɳÀÌ0CÀœ4G¼ñà%{gÌGàÝðöyëÀ[æMò¦‚÷®élzIÕcºD$IõŸL<ç?ÁŒ `° Ÿ9A¹# ø ˜,û•ýÖ~”££ürMih@?†€Öª’:FÞ“@÷é^ý¼¼·¼·!‰¤FÒ ©@R$)‘m‘Í‘ÏÁãðrÙe~Ôö Q] ªZ@×€¢¥4 &bª›"à}z¼ÞÞrÐ7õY}<.¹¿¹È I3Nš×ÀmÕ^üò…<$Õ?ØÉy°mU[Ü7I@Sj¸;_ÿ%~XÎ'̪Ó uuÆó3?€œ[âÀ\Ôiz¤¦62e@Ö—¥&ˆeÇÁÜ6—Ìà †å"ÀA)Ç.0MMOS²^Èž“5‘Ä÷‰–àÙCö€ýü÷ý¹~_ˆ/ˆ_®µkàž‚ ¾¹m2Àt1íL#0ÍHÓ´ –Òy Õ´–ýN÷èxЋÖË Ÿêëº ¤’8É øœåHéÏ£ 0]†€+Ìu>m®ªÓAÿÑ’Z4¤ù5X‡LŽò·À&n.‚þ+gÔµ°4ä,÷ÃåÅ_ç}Ý÷çy>ϰEÈÊhª$R”QF’U(TT*Š”¾ ¡IDZV©!%¢Ù{§eóÌϸ¯ïÜÿĹ¯ó>çu°øöøÜø7õmÖñÖU2ë߬ï +•Uœu âÏÆgÅGBæ™Ó3߀°|èC»Þj[ðsù’2àWù…> Ñg~Lôø_ÍW…èÉhHôø?ü~3DwEOúqz7}YúRH}º:U’‹SñÔHÕLµJBjI:+õ¤ç§/IÏ„h}T*Ú~—_ëC”ôÑ6ð¹\às!8qÕ‰ÛOt‡ÝO9ÕNfŸŠŸº´•u|±Å±}±­à¾v»Ý~°ŠVÍꂽeŸÙ»ÀUæQp‹l„»Ü òÝS¾¼ÿÕŸ=ÏëÝŒe#sÀ:Ø¥VTOqU;®>š–´ï­ ¸›ì?Ñ›Qø†þ ßø˜Áô×ÈJ¹§Á*ê›AìËØÆØ Ș{(Ö 2rbéX¸šÌ„pFlDìpmlƒ­ûÈfØ»`Kì{û”¶£š¶_¿Û°&V×b`MÝ${´_öj±<è^5S=°l¼•"ÊqTZTlÆi-èëe ôe0…7ôƒÎA;°”m·m@œ«h Avµì“Ù§ û³œ™9ŸAÖ²¬Ï³¦€?éúõ‡GÂÓàž³öh­¶iðÃÜMœ·€XKYÐlMçU †ïB]àˆž¤' IDATx‚¾Ôÿ¨ùkßiÀª3lˆýOÍAÛ´Åv‚ð'ùàWq'UÀõt·»‡Àmpyî0(A¸5Ñ>q;][t¸è?(ø¥pwá^ˆþŠ*EWCP+¨Ôð± °ÔR£õ(PŠN\ Þ<>´OWëZÐëf7uPÝ þŸéÏ‚œ;‚j½: j§ÁZ ê«êjcív°…zHÀöZÌ÷†+í½¤HGÁŠì?;ÅÝ‹Ÿ.~¢RÑ·¾"XÖ¥YY!d¿œÕ3«+dïÍZšõ5ä,Ïž”=r/ÌÍÏÝÙc²Ⱦrä\“S r÷ç~˜;J>T²vÉ‹ ô®Ò#J‚2=Jý^ú”¾¢ô°Òs¡ô=¥“¥K@©ò¥þ.uJn/9©äL(q[‰ü ¡Ä¹år  dýÜe¹ó ä™’‹Kþ%®(‘_b/d·ÌÎÈ.„¬RYgí…ìÙd¿'ë†x jºJ®2{ 2 âPðgANA¾VøTa?ðïû‰~ ¤Ö§ÿMŸ÷œ³iÀ,6r8Æ)Ž)ÕUp‡m˜5;d-utZ­ìj`*Ÿó0h¬Æëk°v»µûÊfØ4°£v—ö€þÖ2 Á*¸ã¶Ü,[íž«dU, ô‡þÐfp£\g×å[r ø~¾³ïAñÿ!ñoòLr$¢DÿDˆþŽˆé=éÍéÙà> o‚~Õkìñ«übP‘Îê4£ÃzÁrºên7h»ýI>Ø#ª¥®ÀÌfDû£ÑrðM|#ß |ÇŽeUÑÏmNïHßÑ8÷Pô5ØAÛnŸ€ÐiUßÙ›/É’“ï@TËwö7BPn[ÙwÊΆ²ëÊì+³ Êt*S¦Løë©ê‹ öG8?¬ ÁuÁàÐåºÝzm™Ç:Ðë\Ïõ@YµÓPЗ  ´’u@Cv¨ø‡ü=¾è-}¤õ`‘y+Æ3û÷©Ibo–è]} Xh%€Û¸Á—+´b›A¥ n0¬¿îQ3òtÊÿ r Þ…' Ç®¿Òwó u Œ¥ŽÖÈ^Vr†Õ@+ºQ \÷‘»”©‡4ô¹µR?°}:mëÁª¸ò¶´š’ço‹E*Ó\}Z¬­Úº^Mt%Ø·¶L/ƒ{ÏÍtË!z:Ír©ÊaÐEŠÿ³ßà?ÔõAG®úgð?Õ½_±eÅ+Ò°öµ£×~ 4ñ7‚lw_ƒåZÚέ*z_ïiÐnœ#e¾iϵU]ª"§sgåÖºô­¾ÑÀU“ üÃV€Zé%=:¤¸6‚Z¨¹’àr]Ý› @è°ßï¦\ûàVW þ«øß»ÿ ƒ]í^´ûw°äâÔüT](Ú[| ø*(š]t¢(‚Â5Å7åBq‡Ä½‰žPÜ=ñxâH´KÞì©)R» U%U!µ Ò·¥©²’º8u/¤×¦×¤‡tåô馭‰vDÛÀ7ñ}}-P)õÓf°ÖÍ2ÁUwÜ^Êéà7>> >ŒM>¶2ŸOÉ|²ŽÄwÆ7BFõŒ³àþvÜ2n5ŠU†ŒÜXíXeˆ][û¢\Ÿm‡ØEanX ¬¼]h•€Ñ|Äbiˆ^u´ö6‚Á®Ž» ìOûT·ƒRÕû×¶¸ßø\‹Aˆñ#pV™ì­Ó*™¿Òƒt˜ÎIŸ€h\ôZÔR£RÓR×$¨ ‰aî7 GúÂ:>‘> :±ìØ‘cG¼_ñêŠÑ+FúhÝ©ug€ãìe„5Âòa¸‰n¼{ 4Noë]ð5}U_ 8ÆYR Ó:¦Ð Ò&Ð -c<øIþþp˜ãÀVò+à8ÃQÐ}Ê; çôŠMûÛ¶Új°'Îu¿ê7mÖz‚[‚‰ŽŒ82v,ݹsçòró[çßgFœÍ8ÀéšgÊž‰_î—GŸB°ÈÍ F€»Õ½êž–i•þõåú‚®S;ÝÖÓµ¶`»µÃ.ÛhƒìàZuÓf°ª®ËA·ê*]¶Ë–Û*Ð ½¨·@Ô]ƒ-·ß¬÷ƒ‚ ±©É`WYk–eløf¾µ¿ü L¡±ÏÂÂæ±&¶:–±©a×pøÓ~ºÿ ܸà±`>¸Üs<_ý¤/4là9¿Iïë}ÍMÒPUíÕ‹úÔX—ërÐ MÒ`½ì{ TQ Õ8½’²•úŸžP+Ð^mb&Xži5è®RhÊ.vƒÿ&ú4š~µÇ¾»ï:ZëÈ‘¯ñ~Ù¸å%–€uÝ×u]Ûü×~šÂoÂOÂÁýívº- ê h‹¶h7h‘æh¸»\{× ìknÁyÞâq  %¹TY•ÕtL´´@³4hÊMÜ :©„ ‡u;¸®]*£²ª Ì`Œ¾„ð°WÐŽL;rá¿Ù°mÉöÛ‚¹åÁL7Â]ᬠ„Í˾>> v›]c7‚mµ•¶ö¼Òîs†ÅÀŠ­ÐΓ˜Êtà3føuà›û›üh ?xt…*«ØB›kŸƒý®oõ XskdWƒm°eö3ØÃÖ×zƒ&k¢½Z£Ÿí{PmUWU ÷«p ·Ó¸V )fum¹ ÎP€àܬŸ¶h“6€}a_Û|°®ÖÙîç]ä Ü}®£»Ür÷½[ AÛ ¥»l·ít[ÀÆÙ8 öµ}bÓA3õ™fŸì§úwÀ×òu}U`9kY|Æt>]®ª :«£:ÖÅî´Î`m­7ÃúÛ‹àRÖÝf€ZÓH HíN¯H¯‚Ô ©’©Îº=umªè_а›íf» ¢Ñþè0DOEÏGç²îßÕwò]Á½êÞs5@÷èA•êpWƒþU¨LÐ e(Õ¤1×+µ@_€¾SE•ëaÏÛ`°Ç­¿õ·Ä}çÞ›¯Ÿô+ÐCµÔL}õàù)¶FÕñ»ýNbUÂÌÐCx&öml¸0Xxˆ&¤Ç§_¨~Ô$ª*¥²Úî5÷º{lšM¶) \%•;iõ'h§Ž)TOµ¬3¨ŠrΕ•P1(â4Àz}¯_€–Ü@c +wÐØÍ^V@t_Ô7z t—ûÞýTòÍüM]¾1]¢Q“¨èîbI—,—,©W’ÓoAºQªFª&ø‡iÄÕÔÔE*>å½wêœê•zô žÔs „<Ø*ÛjσͲ¹6ô§6E °l„Þã Þ^' U¡ŠA·Ò® öç`áv¹]be ˜èîqÏ‚ÝênrNÜÈqpÍÜîQ°^v¿Ý |ÇC ÆºVõÁ}âÞuoCPÜ4ê°ŽÕkê¯5ô|¯/³@R¤,pcÜ+{ÛÆÚpØmÖ¬‡[ì¾Fó?^%ôµþޱVCÁçú<_Ôœô€è_öðDs£úQ]ˆúDWûvÀk¼F%PaãüFù ¼_¾nù®å›aÍÏk­ù¢Ñ…QÖ¿KÀ pOZýs‘<ë6_¯h#XGËpWƒÍ´ešZcù¶ìB+kÙÀY’”V±ŠíÀ1¶±4Lvp„#`‘åXØÃ®k JëŒöƒ=a÷Ú³ ¤Ž(b­ÃŒÐÃá‡o?\6¾¹yíæ=DգˣË!H_. QÿhHô<øÒþ˜wà ¢…~3DƒÕÊ? š£eQ9ˆÞâ÷F÷EAÓÈãjн£o@ïk˜ÆžŸ|ô‹Ök=hÓ˜ÊÔ!ýþeÞd"h¯ò0JÓ4´I[õX¾…VÔW#4—{ÜF(¨^¸£°+¤¿LÇÒ‚ +þ°øc(|©pJát(²¢JEÕ¡¸sñ°âÇ!™—º?y%¤ö¤Ê¦Î@ªyªcª9¤š¦Z¤n†äÉD~" ©+R7¦n„T©TÕTÒ5ÒW¦NA”•‹ !z4 †h_î—ƒž¦t•ÐE ù6Ãf-±™ö8X ¬?X?ë®* ÇÏÚ ZN %ä"à,{ø‚RcJÞ^²=”ýºì%ekCÙye'”|ÊÆ€«å¸Ã`œDdÏhhµò¬/EåÁNk®fƒõ¶C¶ìywÌÕæÒËžâRõŽsÝÀ«þÿøbo¾h•-´]à¶¹ŸÜApcÜaû Ü!ûÑýúO?i6¿„§Ã¡ ^Ø®° „µÃEa‚3¯]rv1œ¸çÄ_'öÂñÂãgŽÿwõœáôphø 茖ê[ÐÍzNÿ‚ýh,½ zì_«dåÁºØëÜÂÞÍÑ ] c$ï‚^ÐÃê,&AeÐ|}­Ÿ@•5Hÿ«aý¬%cƒîè1Ͱ÷@CèÃüž+CÞŒ¼y{ 9/µ:µ,øÄw!¼5¼!lÁMá5aCŽ;ƒ?!ôú@8=¾aé0;,î.×ÁÝ îQ7Ðõ÷‘ûÔ=î ;jËÀ­pÓÝlp«Ü}n,‚0¨aQ°&Ø ±—cýbwA˜þ¼ááÒð% ((kCÜH°?m›í«lÕ¬Xëcw‚–ÙJ-­f ÈÈÈHf¤ s~æ›™oAVãø£ñG!š5Ž:A0À5 ÚƒUq‡­¨¹*«:¨ƒÚ«0¡Œ«g‡¬Ø$ÍQ¸MU¬½dσþÔý |ÉK¼*T3urÙÍ¥`ÿÓõzìqË·ÀJØ]Ö(¢5—ÝU‹ÂDØ&öd¼ë‘Ñ ÜUî AbybSb$Ë$ó’|#ùqr!hˆÆi ð~p_P,Ð1m`¯Û+ö.ø ¾²/”áZêt?€ªèsò(Fàû†¾ pˆ?9Tåz‚– ÅÁϤkÀä9>„¨µoëO€j©¢þ_)íÿ…ô3©‹S!}múùôð‡ý:¿ã§1’?ÇȢÓÑoà¯öWùE@'n÷ƒõ·anÊyÛ¦!¨Ž"ín %/øU |¾#¸¯˜þž'šwŽL£j¬[Á~´¯lè. V°›¬³Ýê|þÅù¥mQ+°­…KƒÍ·…vÔ^óõ*¤†§*§CôrÔ6º‚ØÛ±1±a³Œ c% £gFéŒŠà«ø«|UÊa0‚Œà› ¸†vUm²|+ë`•¬>¸È­sÁp3ÜoàšZ%«LÖ>â¼ø‡±,mçq^ÍеÖTJ°h«çõ(X{M×k &6ЊAW«šî€Ø±üXòÉßœ¿šaÖ† Ù<ñWò2H¶OtK> ‰ eÿ_Í7öMÁŸòýÿ ™‘Üž<~‘×ç÷“æðÏù·}S°•vÂö‚m°3vìc+eØ,«bÙà:¹>® ¸}îR·ìŒ}lm€© ó£€7©¨+@Ûy} Ñ¶Ô.;fUõè¸*؃6 Ÿ‚Âì‚» ×@:;ÊŽ.ãŒÒ ¼üþˆÞ8—EŒˆÎBzjúöôË ñ:%ÁÊàÒàbˆÕˆeÇ*CfûÌ.™S sYæòŒÇ!£(cìY î «ae­"ø¾¿©>Éɇ Q9qA¢1$û%û¦v@ê²Ô—©eþ>µ‡(7Rô¤¥ÏFBjnê‡T6$^J~–|REéRÉ[ÀÿíŽ~‚€Á´á“×v°ô‘:€odU¬¸Õn«;n¾[î[bËlh—æëØ{šk`}ÝF{ \'·ÀîûË~v Aï«X€ö²€/€¡ºO]@—¨Œ²AOÓŸ;Aû­¿õûNS5 ¬{Å= ¶Jokh‡~Ö^6 +Aþº<Ë;A·àÎà°pS8?ì ]3êg¬Ìk3Élñ!ñ^ñõTüÆø¯—é2GBÆÈŒbG!<ž7ƒë|à[mgì (~¢Q©è Âѱ¥± óPf«Ì ^9žÏ~`6CF¯Œ}{Á=㖸ݠÓ:¢3@ˆ' ü ~²_꫇µèÎ$üâÛƒÕÓ& XWê,0Ÿ‰»^K­|;Jø! év…µWÕÊÚ Ð§6Ó¦úêkuvs¿¿¬Ž;c?¿Ò†§À_íoò­!Èÿ0Mþçò\žAÞßyKòV€åûû§ xzñœâ¥ ‘z]£@OИjÀ#çúƒ¼Á,µ·ß•tØA+gÍÁÞ±ßí>ÐUš¨Là:úÒüf_ÏW?/´“Áž°ö(XK[k[Á.°£úì¸=m—€:è9»t$!6;ÖàCÕÖ%`ÏXe»ø…9üvÄöØ>pu­šÅA mнüÇ&?ì?;à®mÐaÝt÷/ùëû´PÁêÙÅv1ØuÖÀÞûÀÖëJ $™*4¥7@Wè\*i<¦nüGu0`5¬ØT=­—Á2 +›hÏÛó`m-m5ÀM³–ÖÜmVÖ.õVµíÕŸÚä’Iøïø‘/'ï'‚ÿÛ7â~ˆúFÓ¢ŸÀ§|?ªm5µ l±-ÔDpÍ\¡[ áÁ`pp%Ä.•‹] ™_eLÌxâŸg.Ê|²Je?ŸÕâ{³ÚÇ ÀUtU\y?ÿ­iµºÎê aÝëîZ× xÓô/{;˜|V`X&¨²öè/ЭÑ&ÐBÕ)°¬·@ÏÙcÖì1}«—AG$Àïj«iÀ6?Õ/ß‹ÓÌú+}SÐ}6Ø=§çÕøEç\™JÊTeÐuÔ¦„ׇ„ÂÁ¾‡ÜÁû`]Ïõoo¸T°4oIÞï;ö›ývÖ–X[´6~£_îw‚ÛàÖ¸µàVºµn¨¤ª«ðïó>Pr`%­Èfƒ=h¨#()¬)¨Pj‚9Ûe!èMõ×@Ðj=è]M èÝiƒZ«£»ßzª5èJ@/jènç5‚6pxʑˎ‡­“¶Ù¶°ôÉta:‚ha´(ZQ˨]t'øïüjÿ ø­þ€ßQ˨stDM¢QðýÎ h´ ú2ÚéêéëÒŸC²A²yê܈ÝÉ>¬‘¬ž¬ Éÿ’e“@rxriòeH¶ItLԀĤĂd1$nJôLÌ„dÿäðä+ú=¹#µR%RS ½5½;½ ¢Qèh•6ê[`¬¦1TtOAׂžÞÿöæoÓ›릮³n$p'(‚ðÉ QÐtÈÊZÜUî6»Ü-®YpX¾Ò·`1Ëq—‚íÒm}k l&ø¿ü_|É6hC;ÐA}­€úäSôKõ¨ŸÍRp?¹eîÐ2ýÀ`…_Å_\A1>r¤÷‘N°é÷Í7AàÛù¶¾-0†1¼¾šÏöÙàWûÝ~7¤:§ç§_Ûïõý!*Œ2¢’h“蜬a9ïíéÌO \mÐVp¥­µÅ©*0Vg5ØIšU@ Ú°øœƒÄ@µ5M/€½gm4X–¥õp” –²K»!öHxyXŠÚu)ºÒ ÓAúzØËJ6?°†Ÿ2Ä €….V5UÛm;lX®ò•f¥­ °ˆ…,×Öµw­@}õ€Z€~PM•õ¡ÿ=£{Ô˜¤1zô&/²h¬+ØšËèuÒ¯ C:¨_ÁŠì¬í&j‡ò!v,ÌÏBÆ–ŒÀÍw{Üj|/ÿ´hF@ƒu·ºoó:ãÁRYn’íF>R–2Aót“nø«i úIi¸gÜ@ë6Åþµ$pÀWf7°@µ¬·žÑ@°ñ®§» ìfd;ÁZÚkV¬­nQ?`„†p'È+m¥@ÓŸ±+„¥!œL &ƒ¦ë7í/:VõXMïWöXqÿŠ»`Ýë~X·¼¼| \EWÞ•[ì¾·E`ïè {t­êê*`%«8j®ëôèM¥Б.šÚÄ>›iµí`¾¼>šžg; g;@y’j‚m´Ý6 ,nÎöý¬9úxC¯èk_ :­à¿àèG»ÁŽìuw6 ÓÁŸá~°÷Ý87¬‡Õ²`{ì ›n€}êbà2m¤[¶Hml8è}ݪA`WYM»Üv7ÈÕ×× öAðc°,¨ÁæðÝðp/[ƒ9„AaPÂbScG!ëÕø¨xdOÉŸµ²zfeŧB¼[|oübˆOÍêÄ7Åçdö„̲™ù™ë{ì¤ýgÇ È¸ #ŒyÈ{'Ö bßÄÞ '€Ÿêç‡à¬›ç6€íuûÜDP-ÕpPŽÞS ”¡@ûÀ=eã­*¨½µS…sÕX=|ÏaªWR–lГ\ÊÀ$Ò°¤ª<¨™æj:X½k¿=ïw ­úyQ6„ƒbwÅB¬w¸%œú^—éfŠ+×/nEÙEuŠºAQ“¢VÅÃÁ_ã¯òŸA˜ §AP&hÔµQGµÔ( ›hhøùnqð¸éâF€2tOÆó*€îZ¡ÝÀ(}«µ`=l™‚Í%|Ú_䚺Ñ6ðõyˆfàÛønþ[ ŸƒÄÁ×öÿr?oMœMTè«ètô™33GfŽ€ø–øÆøzȸ*£tF9H?žê’º \w“mõWm>ä–C40j5Ÿí[ë>Hßþ;qh»èH:£ß$㸠lª¶À&ØSö,¨—:j°”!\ÖÄ~°KÀ^ðCíFˆjDaTvÐÞ¶ÁÏŒ¾ð@²>·'«@:3Ý<]üvÌo„àôÉÓÕOW‡ÓÿœNžN@ÞŠ¼/ó¾æyÞƒ˜ÝÛnÛeƒ-±ìgÐI•V9ð×û~þv°oí¬µÔl½ VÓ2¬,Ø<ûÞVÂS ô/ûùìCÑrPwlû@5”¡ °m‚M÷šåF‚2ÕEï‡\-¿‚_ÝGAÁ[Á¤àÜÞîcê–]5[ÙdÏî—Ýâ_Æßˆ¿ñZñÒñâÄóãe!óõÌ2ûAæ¬Ì!™¯@|H¼müNÈ~-ûþì «iVvVduŽ·Œß™%3ëeV‚̧2ÿ—q2ïÉl™Y2;Çoˆß ±‚ØØd¸o‚ànpgÝàþ²µ¶lýh?.R¶š}§9¶\yWÂå‚5µÖ tF™ŠC¿4N\Ÿ)> â§ãâûÁÿäçøO!ü3Ø|VÇ vï‚>ÐtÍŽ‹)ùÙ~¶Ÿˆ8ð§|¾? äJßÒ‹Ó·ò `¬Ò$àfn¥5PšÇ¸èÃ+ÜÚ£ktü•j¦[ }Iôdt?X5ÕRS _‡›ìÚ¸¶ŒšFÍ€×9ÂN·;=äô pfÊ™»Ï ‡üºyɼºàï£uÁsÿºËAÛÔVÏW *ùË/>ä=îWÃU×ÑuuƒmÒez¸\_ê`8ê¢: v¹Õ³KÁª©ªn²©F% ¥Æéc°{­zS­§{ôe¨ ÑâôÆôǺ(õyjDD]¢ç H—N_—® ÉG’'“K¡(¯ø½âÇÀÏóqv5 IDAT'½A¬Y¬m¬%ûƒvA °é6ÇÀfVZÀqÖ® 9U ª]yˆšRŽñÀöòX-«h.íþr'ÁÚJ[ v­=¯¨–*é^P{u±žà¹™V4˜‡Õü~e èS›m_‚»Ü½lc@ƒÔUg!ˆŒu‰õ…̺Af Èœùyf_ð¥ý-¾:„©ð—ð8_Ó‚ñÀ*ŸßêLp7h¶æêu°C¶ÑvŠk7èµåjÐWj®¨²JÚå Kô2AïéÝÚJžjƒ-Ößö6X5×Ë‚»ßõv`gì:+ºƒjáç±þ±/ Ö;Ö#ã^°½Vh¯@k»:v%„›b»Â™90³ ónà/>¢"¸L'—›u>{2Wok ð$ýé6ÓÆJຩpI—vµÁ~·Inh˜>Ð ð ýu¾ xïô;Þ¾‚¯ºÕn¶é *Jê,h-+:« •úr­ãÙËë€ óp Miä‘ ,™•lìÉ©úɃPÔ°è¶¢«  fÁ¥M pyá†Â¸/ñTâ%H>–˜é ]*]Ò¹é ÑÌKJÕƒâqÅW'ž†DÏâeÅ5¡ø¾â>ÅOBjrêýÔ¥£:Q~, øü/ük~ˆŠ Ë7Ø=¼ ÁÛîG·‚»Ã¡á³ÆC…Ó‚iÁPkë¬:¤»¥¿L§ ¥Ê¤@Ô!ê5:К“`wÛ]:ÞùLÿ¤÷¦ÿKŸ‚è“hrô è1 ×+ êºF•Áº[ ] Q®>±]`ÓÝ“®?øëý ¾È”­Ú þzV_@ôB4:JÞÒ,= ê« –˜CEˆ>ùŽÀPJ°ÂÂpKX ξzö³Ã µ0Ù1µ,ë½økñ' ûî¬ZÙ] 뵬>Y£!þV|`üÈ|1³g|į‰çÆË@ÖKY=²ZC¼büTÜA|e|f¼#Ä¿Œ‡ÌXæÑ̈uÍx1ã'c‚ñül ¶B0Ìõv½ÀÅ­À¶@ à˜ áªð«  Äî o «CÌÅŽÄŽAÖò¬ñ)="»cvÈ)™½+g/dõˆ7‹7…`C°Öú¤;¤»E… éšÌ`5¬¦M«cµmè„þÔ~ð›XÆjÐEþ-ÿð´µµÖ`ÎN˜½®–KÛ`ËkkÎv­²¯5ìn7É= jÇu¼a­ð÷ 7¸§‚ÍÁ{`Ø4[AQ¼(V\ŠÖm.º ôuŽºDM\{‰,ðg#ùÝ÷Ò#@¢Ïì[°©Ñh%hg9TÀØéî©ÇSGÁ—ò³ý^’$פ$%ÉÉêž>Þ~©ÿÌ? z9ÕÁàoÃüàFºFÍAõ°ÒÀvîÅÀ½éºù`,n{@/i²ú‚^–éØö¶½ÚÇ"~N¨¾ê.ÕõºTO­tX»Û¦‚ûÐ}áö€–ëoí Ôp "–2’SRCR¿A”Š~ŽB»(÷™œ¡Pbe‰%nƒ’_—˜_âKˆ¦ùоXC[`¯ïVº% "mÔ2Pi•WEà2²8ÖÅ®µJ`_ÙÚ ÊÔ^zV/èq°Av£µ;mwÚÀ ´çÐý æ@5 ÕHÐ%Šë X®•·àfzq/0Äò“ 6 oðî`L0l¶aYXO÷¶›TeSÁ§hC7ÀÑ‚–àÒî;±#áòp%Ø—n…ûì ûÒ>ÝN-5BO€.VY&‚Ý šVü Ôá`´Ù_Ç—÷åÀ¿ã7ø•à¿ÐÍû\Û´´„uüúŒ%L+me­.è?}¢O!n 7AÐ7}¥#êAþ5yÎŽ€¼’yß- y%ó*äm?ÐäO€µWÏCîžqC@õµV+Ÿù†`9VÞ;b-¬!Ø‹úõ|Eµ»Ý©Ñšnˆ•wƒm°]ÚúØ^³·ÀÆÚ:û¬¬Õ³Ú`ìnk –«ñz´É6Û)Ðãz†ë Zãs£‡ yerhòð/ùwüSd¯Ïý1·=”jWê¢RÅPºké&¥›ב Áî`l0\Ow¥kê§ÞzÔ›\Ú¬AºTGw©¨–é(ÐCU ô©Ô£ 7y˜®‡Ut'm fSõº^Í×}vZkµ¬¹]iM ôæ}p¯ºá®7ý‚[ƒÇAúOÿAPôiAVák÷aÞ¼‚!¯8Ïòþ³–~Ž ÷€–eè°h/èv ×°3ö‘Û¦Z|¡)zXÌ6N‚=hÙ0°?ìa]\B;UÚ_è«S¸’¦ ®ìä7°]vŸµWÍe¸³ m‚½Â5 ‚°VŽ‚ämÉêÉÒ=uŒF‚.˜TØÓ±×î‡G® XýX…XcÈø86$fq4ãûXˆu]û‚bwØ­{Ù=ï^˳S6l­V'Wþ}Ë\U[b ì*¯ . .€Œê±Á±Q6cvÆ‹=ëÁãá=ÁM`4TƒÁŽZ}«n[Ø5¨îJ—媀zëz,U6¥BH,L|œøŠN-ú þ,°üW!ï÷¼â¼“W_+o$ä=•7'ÿ(x¶à£‚ (ü¦èÓ¢µ¨œˆ'@zDjdjìy¢Ìàçøõþ ø‘La8p˜3l?„—y¢§¢JÑFð2‰±`'õ‘V«ÝÁ%aí Ó¡a/ ªºîàR.ß& ²Ö}™z=5Ôû凗Ÿ]ž‚µEkO¬] þCÿv4ÂmÁúð2p×»«ƒÚÀÇšÇ,à$;8 z‡ç4ÜWnƒý Zh«mh¿ÖiÍùžIP+kkm€'éK`9Kø´NÛØ®ØÅ\&¸?ì7tݩ֠ڪeÍ@ÏÑ€>ÆÂ#ÿgéÌmªÞ8ü¼ïÚûœ{®ërM2“yÊœPÊ<%$•™"SJJ(IRß”(‘H¦2•92Ïc¦kvçsÎÞ{}Ð_°~\ë]Ÿ÷óf¶>¤…@×êf] âëg:¨üÀ$&o3šw€ÁRTJåx†ªÀrþe/H~q$èÛRYŸdž×ª o2š¯A*Éu¹¡)¡—Co‚;½ìî„àB'h NØ G P(\0œ¤§¬”Y” jø)¾ëƒà3™'‹@VÉo² ¤¿Ì_l‘ƒòè I“Ê uœ~2D6Êпt§ž©%ý¤PŸé¼ RQ|Qà(¹ú’ÎÖ™ Y2JŽ‚¬ ž×. i{i—lM†ØÞØ{±!û;¶?v¤Š–¨Ÿh` XnWÙ €%‹j U¤´i.Må˜æ]íÓkzX.«ä_îIhÜ4Óha}U‚ì–]ò×|•¦`ÕzVÀž·ûíò‚$$Yà¯ñWù Á¯4ñË€ÿ¡?Õ+Þ8ïs ĉ?¯ ±X,=&à=åÕ÷CP;¨< Ž?Ðî/âUðÊA|JüûøœÝXš€Þ”÷ô˜æfš¹ 2\ÆÈÇ «dürA.ÉuкZÜ ½ªG5 ROJJG•ò½,]+ódH3¢o€ÎŠ4wÍ]sœNæQó˜‘æ/§8˜f®.IÑÅú1è ðÆpÞpÄ?Ž¿ ¡j¡Y¡¯ÀI\´(i2$ÏKŸ<ò<š|"ùq°Iv†N;7ŸSô#ýÜb&`H–Ø%ööù'ýCL‚|/âÉ-ùhÈp{Ø÷̾*ûÊŸóSÀîöu‡€b†˜A ¥¥°©'õ¥6HI–|  šW×_tèy_>¹§ƒtÈRVÈE`|Î,ÐÕ:Kg€à(€d©"E ²íYZò¤$€ –ÁºÄ‘;’B/»…Ü\¿šÚ/õ8ÔàðÃoÃX¾ÁnÑ’  ¯ð %‚RàÏóøó÷y—  çôŠ^í¡Ý´/ØßìZ»x“á¼ ¶‰í`»CÐZ.ˆ€¦ÙÞvˆ+=eHqé.å@×È:Y¶®”“G€?ƒã6äš\ãÐOÌY QnÉày^äk&Ú¦¶ØKöM;ØÆ]²Á1Ùæ’é N.ç!çp?r[l [Þ¾N)“Ï”I×ú ÈÃÖÂú ïêpÙ|Åtyd¢|(¿Üb=¤»¤"èݤ½]ä‘å`ïØ‡mGZò vÑ$˜?À\6iê‚^6'ÌTÐÙ’OÞùŸVÐ+êjá^áíáå`Ž™+æ H–d$f°v{×í·w‡}©û.î; Á´`Dð*˜º¦®y´€”¼`oÇ©,•¥0Ÿ¯èzMohaÐ ÿåañÈùP>Ð& Ù—§ANËßr$¿Ü•ó ¤»ôݯûõè£Z[ ƒyÅLÕ^ Uä¾–ÙÇ>nƒûqèíP?H™z'5ŽüxôðÑà=‚îAWðóúeýà÷FzƒÀ޵£í(,™*7Aú˜j¦2è7Z^+~¬cõ]úRCºƒÉ2·Í%ÐÚGÿYýÀ.ä¼6™Áû2 !ÛèrNŽÈ`kY ‘¢R¤ ¢'øëüõÁ)ò‘­tá=ú‚ Ž÷o¬wÁ <<ö VˆDÂëãÄщ# ymî[¹ï€dËd™ îäÐôÐÐRšW ƒˆ\—» Så™Añ ¤ƒÜT9 ’!ÇeHÉK6èXé©O‚4«-¥,€Ä‡ÆõKAlJ¼UüCˆgÇ»ÅïœWÙ¯Þo®·üÅþfÿ3ðã~¿ø-ƒWüàïõÏúÿ€·Ç»àí†Ø£±Ö±ú[[[9sÆå¼ Yg³ü¬8¤§¤?Þî/M»˜vîU¿?ð~7H/’Þ-ýxŸxßzo€º/¹Ü6àLrF9£ÁÉåvtJ€ó¹SÎç g…óh }Në€^ײ´¦Qtƒ~£_€Ì•Yò˜r¦¼ÆÁT4Uôh{í¤ßy´4œ/œ×ià¾å–µƒPáÐPÂ#C¯„úC¸X8!œ á©áÑáj•ð\B-Hø;amÂbg„†7ÙyÔÙú°¦kipük¾çGÁ/àçöóƒ¿Õß‡Â” ÿ*P‡šô‰ÉY²G6É&°oØv4Ø{öº½6ÛÆm°É¶A~çíFÐòžž­ Ok ò§dÉaY&¯®ÑÚ WÌ÷fhT«ëEPW^–nÀAùL¾Wœ5Î HhiæŠibÚ‚2žá¼öºÍ±é`›Ùgl]æú‹ý÷Àkà=î?ÞsÞ¯/øýýaþ °·lÔf€| ïÉ;@~ò‘þA0b9±ÄX¢ËsfD AÖâì »(dŽÈÊÌ:™g²BY!³`æÓ™ƒ!£bæ÷™ŸAƱŒ2êAæ»™[2AÆåÌ„ÌüY8³sfÈü.ÓËÈ*’µ ëðFúS½¯Àq"Î ÎO`j›#æ0ÝMOÓ´ ÞW n¶ÓÒù´¬nVíZz@P9x"xü¾ø˜^f”¶½«Wµ00‹oå_à¼Ì’vÀ9z0 hØv`§Ñ——@öÉ V×9g{}Æ>mS!xÕ1ˆ‚¼¢=˜’#—$ ‚ËA«  ›ƒƒÁe°‹ƒþvHÚs÷šÝ{ÁÚí7¶—ßîÂôg\bœâ&˜FzØ §4IÓer} Û䢢­µ-˜ù¦·¦·v×& ãt¥ÎÙ" eH²ä—R 亜i!õ¥*Èi õ@Ó5¢kAS5S~ýEè_Àf{<`gó%»À=çnp·Bêë©g®‚Cý¿wd8f­Q³ôg¥;€ól`%Ømv•rHŸå2h“Wë‚43Rpñìy°ì=›¸äµ™`Ç’ŽÀ ;ž Ü&à:'ȲìaŽƒm.ãm[7#ß ì.û PŸöz ˆ’Ä]` ûe'…K ØÖ6ËVúÙuVÓ—/Á±õlÌ Vf‹A0:xÓ¿ ¶­mc›GØãÜÓê@+ºó0ˆ~ò†g¿­¿2XþçþëÁ°=í’ È*Ë~`‹ü# k%I¶Ýí>©Q¤´v–‰ [9Á. K¬Ü³ÞüfVƒ^×ÏupÀ>iû@¬]|q|*øü…þGàП ¼¦ºi©ãÁ©é”p{óí4þ™+¥tè¯z^ €Æu·æ­)H ·Xùœ ÎÎ_`Ru¤~rHZÈ:ÉÚ_¿ê0„O@:ˆJH y˜tÐZÚÆ¤€<$ã¤*H"ÜÚ‚¤J{i\¡ À©ç„œtpßw ¸}@óš Ú ™DˆV Ž¡%pˆ<ž³¯Ùq NÐNŠ‚ÿ—ÿ¿üvf|ºH} £d²üæÞ`oÈ]ªó@ÿ§oêç`fšeú7hA-m>-¤´ Èy9+5ÁkêU÷ŸùI¶È>Ð4é)G@Ÿ5m5ô¢^ÒK *ÙÒd¥ô”@Oèy5 •¸ !P{Ÿ< ÁÔ`­=~%¿NмuÞRo3x÷¼%ÞFð¦x/{UÀÏ_æ¿^Mš÷"øÖ·þ}ð[3ƒÖà'ø-ü|à]ð2=b©Ñh, ¢_D—GCÎÍœ‡rÂÓ §O΋[;»±†±®±· öR|r|Ä‹ÅÛx+Á[ßéÕ‚xÛøsÞ§scec… Þ?6+Ö‚ ¶|Ç+ïÕöþ…xW¯w<ü¦þ1$HGi-#AmªÁéìôq¦€žÑÃzt·®×@7{‘Î ¾L` ÈVýTž}Z«™M Åµµv9!wÅ íBû%ؽÒ]^‘Ý`Zk[í ²LÏhPâªÉOrÄ“bÒ äY €Gd•| ò Éç éY÷OܬÝùäξ;Ãþ'ö78Ð ˜iß·GÁ¤97Ë 7õºž Q‚¢ a)J "RUk3©L à»Y¤ò4…€¿Ùn÷t’všd¨´—V +tºà:9äP„¢ ÿþ·#¹A×OÁNf ³!ö1;œÀÙàl„ÔM7zßè'²O†OÇ¿èç’ >?¾ÝûbÃcÝb!ø*ø%øœ~]¿˜?Ís$õÁ—*[ØA{ÚV/€6“+² É-·@NÉ^þð¬-£É}\kË-ÖR^÷øàõM¥£A7?È õqSO«øFRA>¥ 1pGœsÞr&èPýH—‚Úž¶_Ђ|¶ˆm ¶¯íg'–r´²–ÓÊ ãe Œ.qƒ§¥™´ÙÆ—|rˆÝ|R@ƒ,”Y:ÌZ3ß|:F+Ji°…ƒ­ÁfðÊz¥¼xß{½uà}ß_ ^Ü+îeWÝkáÅÁßëŸð·ƒ¿6ø+ȶÃ8rD6Êß ÁÑ[òÉÜ?çþ’SsÎ}’§'?•Ü ìà|p4Õ´6mÀyÆéât) 7å>ð;Ÿ²lª=kã k%&Ù`ÚèB½f»9fòƒ~jrL$,M¥0†˜2Oöí¨›û M”¥—Ô–J  ÕÓèHy[V‚ôÖ:ÂwC?…>„œwsËž ÎËÎJ§8wÞ¸;üî§p»æí ·¿ƒ[oÕºUì9ªS܈›à&€Yjî™Û`*é= jµ¦^=©§¥#H–œÐ. ò »@%¯”ùXŠJ'<"úˆ‘ª2LŠéh~F&A¾Ó~Z t‹VРïèJ r˜sòÐÆ<fó³î¹óñÝ¢›Û ™Yy G$¾–ØçÚœ¸£‘‘? ògBË„—! ýúÜÊn·6˜^¦3ÌC&Ùyܸ{Á½¡¬Ððaß oI8 ¡¡%ásàövÛ¹CÁYä|çüÚHëè@ zJà!êQhE+^°—j` ò~‘^RdýXö$›YüIœu wɲFèLЗuŠÓØ”Ó; Õ4E7{íÌZq¼àìrûº¯ÛË5îyUšª© w/Þžx{“µ;FíHÛ±ööÝÛoï ‰A pÇ»cÝQ`Ú= ù뽨—@—êJ]rBÊ^p*›’ÐÞÚÏ< zKÏé0ƒôSSÌ=ç%óè<½ Û¸ÌY­T§ÈrUM§Çô8P„@ZJ+iùà‚•àVuÕÂÕ¼3ûÆì¿o0Øt›jo‚ÓЩáÔçkg¶3 4á?us%© U€Lg(’%×AþÒºô+¢€4—¸4ÂT¤&ÈùFÞ½!;äwKºRƒ)® õqÐêæYS4Ÿ>¤ä_¹..H‰È#à6s ¹×\«q­Yytî± b¥ºä… q00x‚ãDÁ~gwØ @.Hû³]iW@°6Øâÿ Þ%/Ý;þëþXÿu°³ø‚¹ 5¤ª”m¦í´ ˜®f½N³ÅÄÍ90×ô„^­nª›Ö £u³.ÖÉMÙÜ%fhkÚâà×÷›ùåÁ»êez— Þ1Þ-ÞüÿªŸýO×QÈeoÚã`ïrÌÞ­®?êúÒB€ö×9ú:¨h^½ ú­ŽÖ÷€RXʃŒ–c²ØÍ†WÈ¡!ÈÕ—ÿ¹|ÜÚíÿl¿¹ý쫲oÿ¾;À Û—ñà–ýâöSËl4÷A*H)2]æÊW 5ä'™:ÙŒ53Á|¦ïê0Ðüš¨ÇAr‹ÊÓ $¿Tý^Gê,Ч5¢ÙÀ;v‹mr›] ¥%¯8 “DµØ}ô±u²Ô¢18Ï;E’ú\êï©+àäÂÓ?ŸþÔéãvpÛChX¸s¸„ʆ*† ƒûEh½û ¸¥Ü×Gœ|N œïÌçC0‹M'ó:˜Ì`3ô˜ –J Ÿ“Ê<°Mìö3°7íŸö °7lÔ‡à¥à­ 4øµü¡þ5 ÙAؽö¤= v§XrVSø˜¹Z[¾ ™º ôs­Ã@Ëk!M¹Íî“]+«CV_Èø"cQÆ®½2š‚¼Lçc÷eçu0QqA+é}ôsùMªƒ ‘,ùôK½¬WA>”FRäy¹*c€ßägù 4õ¿Ùz¥L‘i yäžèOzPÿ“×3åAöÈaÙÚGï©g¡SÏÉ~¥m4R¸ þäà3ÿ} [i NJ×”<)E ¥uJþ¼AŠŸr7oI°ƒ¶ö1M ýzL%SÊté ½¤+H]9.û@þM²ä}&AräW9RM¦É^òÌí¢Ãõ ûô’‘ÀDéBo°Ól û°ž>| •­²´µ¾ õAfÊ$m a›Á9c¶šÅÞÚÊÚZÏèS ^wïe¯+øÝ¼žþšû]ƒù`;ØN¶=ÿG‚SàåñŠ{À{Òëê €xf<;Xj,=–b?ÆþˆõØœXjôqˆý+} ¢írºæXÈ”Ó'ç1ȉF¯ål…Øæh‡èaˆÛxÛØWà_ðËù+À±cí°=lwú€­i«Øº@JQX' eسö*ýÁ^³kíYpboÄ>‹ƒØâøêøo[››v‘ͱ?ŸåßñSÀ|i~5k@ÚÊsÒxFFÉ`Òâ&˜OÌ»¦ hnÍ«ù@“5…¥€¥¼ › Fpг|!›% $&ä,Øv,ÙŒ FSA_×7åy°Õl3–OЙ~àVtÔÉÑݱ'bÿ”Äß Žý‘5¬ù‘_ÙÔà! ™DOîÉ}0o›7ÌOõC™ ²ˆéÒä ä“Ž +ä¨î9¥!9ú–¾¤w€ÿ±˜AârO®.Õõkî›r ³¤¼äͯ·ôÈOò¹œySzË ;M RœDþ3Ûékpÿr¶9eAuõ8ñ·cSc º7:*º¢/E;F›€íÁúApÊž¶'Àëãíóvïp†1@>Ê€™ìTsƒ³Ú ý¯hG_ùZ¾“AcjÕ©'-¥5È=).W@:J]i Ò^úK4)"i ͤ³”MÒ<šÒìÁ ;S`Ä«kJA¼M|D<²¹ìÐHïHóH!HÚŸ”–4rÈ}3÷ ÈýjR‹¤Ç!×ï‰3gB./ב\g!)št,)’f'½–tƇ‡?‚ÐúðÁÐ(5 õrW€uq›‚“ßÉëX0‡Í6³´ˆ^Ñ‹`ªëI}dˆ´n …µ€¶ÓÐÔ1/‚;Äéî$ƒ{Ó™ë<Î§Ž“οÎVg-è.]®³Ar‰+Ôö·ýì«à÷_õ—ƒÿ›ÿ‹¼ùþþj4&3ƒ©T  ‚=açØéÀHûÀWe0¸a»°d¶ta<È6Ù#[AÚIgiZ[ŸÓ0¹M󘺦ÉçžsÎÙîu÷ˆ{Ü®¡WÝþºººáN¡Î¡¦^ZúBÍCuBU@ÖÈbYŽgßµ“À±e) Aëàéà_:£ƒÁà½Fsª1ø$¸ Ü·ulwrÆyRß×@Kèn} ô¦¤ê*Òt…Æ4ˆ#ù¤È Ù)õÀFÆÉ @o®±â½ãoÇ?§%µ€m8 Ü·ŽBÐÙŽ þj-}Òê¤-H›Þ(oº7”Vò¸< :MÇÉ0ë< n^7pð‘ðÊðŸx:²2² ’J&5Ì•‰ãsý›ë3HÈ“p/á_¯_ ÿ n›Ðw˜ÎÎI3 ¤‰´‘: žÜ•k ¥¥¸$‚œ—‹² ´¶ÔBàÎwg¹C |!üwx9$ä$ìOø r}‘t=×ÈÝ6÷¨ÜBòšÜ#sƒHNäpä4˜GM)SœœbÙ-³ÛCƞ̿2w@ÆÖ “~l^ûœ]Nu÷i§<˜rfžÓtšl¥ ´¥¾²”ô=dnê<Ð;:SƒdH~q@”I9"÷$¤–$KIÐtÍÑÈ"ùEv€ÿ›¿Ï?¦É­ Íµ…©ö’ml}ˆÜ•+¤ìA»È.{8‰Nâ­È HªžKr•„\Ù¹bIoho+‚sËéì< š£oèzÐ÷µ§>ÒCÆÉxà êÐä¾L—ÐÜѲ\È Ð·µ‡¼ |ÏÙRŸRTîÈÿ¤H å SÎÊÚzB©ÚP+›r ÉjY¶¯íjßJJUÊ-oGØFÀWö9Û4Þ/>ÚÛ±™±±ã/5Ö¢c£—¢!–/V7Vâ¿Ç÷Äÿ†œ£^Ô‡,Í*™U²¯f‡²}ÈéŸóaΛÓ!§^NyˆŒÞæ@tPtD¬?DS¢Õ£5!V8^+øÛüS^UòÚâ ö =kóƒí`_â`óì°ÝlWÛlcû„m Áä`ºýü=þÿØYökû¨u†8sÁ-çq¯€ÛÆ­à–÷w†;œWœ—œÀœ2›¿ÀÝè,pæCBž„XBn&H8 Õr'< çÜ„B>žÐ?ü®·Ÿ ôT¨P¸¸m܆¡¡ ¥Ÿ> 6Œ³W 8L~¿ßÝo Þiï’ ü/üŸýŸÀOôKù¥Á¾ô úäˆ+ |ÈÇÌǦØYö9ðÿõ+ø!ð ù×üÒ`ßd(£Îœåð!Ó˜òˆ” -´™<rÃrô%í®@ÚJ©ö-»ƒ5@éögÐWt¨¬I–D‰Sdºü2ÀV·]A2õˆ†@êWú-è£úˆæqåŽÜæó€3ÌùÍÙÎx³Ñl1ò¯\Ï/±ù±¥± +«kñÄx(žâÄkÆkCìT,5vr伟32½ÌÊYÕ!#'£tF9HOH¯ŸÞÒF§/M_ éÒ—§¯ƒŒ¿3üŒ!3wæS™M {Qö_Ù{!úkôÏ舾;›1'Ö*VâÙqâ)àµôZ{Á¿æ§û1ðËùùuÀßì~*Ä7ùzØQös;œ„ö åÊC$¹¹‘"¯F†€ýÆ–¶eÀMsp—€Ô“bò0¨§õ(è‡ú¬>r\^–Á /K+i ’#“¥/ha¬CÒ¤°äméÍ~àKúJd¹/i@EÊðð «ÉÖ²‚$à[Y¬cë@–ÊY ø x‚kÁÍàIAé (·ƒXûšb??Ñ/æƒøáxZ< b«bÛbÛ!þOüTü$Ä×ÇwÆw@tpt\ô3ˆu-‰-‚رØìx2Ä7ÆÏÄB,‹ÄâËâã­Á_ëoô‹­jëÚ*À_ì¶€a?¶S È BÐ.h´ëÙí>°;ƒõÁ WÝËÏ^îbíGd‡…}½÷µÞ× XÀÇL·¸[Ô-¦»ékúô‘ŽÒ¤’T’Ê||| RC*K15²Rºuh‰™'•å4àÒŽÁÀùKƒÞ”M²ô¤^ÓÛ`º›æÁ¬_\ÓA’Äã8“b`—Ù%ö8]œ"N)¸1þÆ¢¿Â™Ugƒ³×ÀÉy2畜~ùNÖè¬Ñq)sUæo`ï¿?€©mŠš Ô7µ@¾”OÈ ¬‘, Ô¤&˜BN)€9¨SLuÐmú½f”’Ÿdțۃ~«×µ=˜6&ÉD@=ÍÒlê'ƒDÐCò™¬b¢f*ÈP™ >ðÚƒFÿ­¿Îÿ‚¡Áí`Ø÷Álp’$韤§Eîiɇ!¥uÞáyŸÞ|Ô¸MÝšnep>tÂæàáOÆÚó¶9hªÌ×?ÀÜ0ï˜K`*›ë&Ì%³ßl®±…€Ô`?PŠb”" ÿ“wd ØÞv¡ 4£1˜?Ì“ò½L’¯@ZÐ@úƒ œræ0„2C½B­@Ÿ’FҚђ¶$ÚÅA¼‘Þvo(تõAoëmö¶½`%²Jö€,—Ïäs õyd€L•i eœ¼’OæÊ<ÐoõK¬æhgëÙ ÐzÌ ‚è’Xáh2¯½‚$pbScÇ>‡hÍèSÑ' úFtaôk°‰ö];¬ººþ"mÈjé!›>ôc&Ø—m†­6íMU03t¥ö³Á,Ö `Ã6™öÀ²]N‚–’t‰ƒ$Ëi¹:SWê· ¾dK°†Å¼øø Ù'›åØv‰ Û¤>ãA¢|%/³¨Ì p’r¢Ø%±ZbuÈU/Wé\%.´¥¸“ÜîhÐ:ÚS‚—«r d“ü)¿ƒ„õ]i%]Nƒ —L9ºK¿ÐÊ`ûØævÈ9'—A É{òè`ÓC+ƒ}ÃÎᨧ_èeÐ"zQËYfÖšZ`~4CÍt2P&9£;µd|’Y:s 8§œEÎ5p²ZdÈéGÓ §'AÚÖ´ƒi[!ØfÃ6 NsÌü ®‹'÷AoÉ!Ùd¡ìÙ"{$$CîKQá:L{‚)«eµ"ˆ#©’ f¼éjZAêÄÔ´ÔspæþÙ¬³.8N7§›ÓB'C_„¶BhrhRh4ИÍÔ·ºûˆ èR§ß‚t•åÒ¨‡ÚM ê*³ ´¦h![’k@*׸2LZÈ[@aSXIú~'¹´>0A^£ó|¢Ì-­íLY0šzdƒÌÖu ³åYοÎNg#„³ÃÃ.è1sÈü r'×­f·ž°v{Éíµ·?ûŠí3û"`ëØ¶08}þÎc`rÌ5c@â"RäcùHfƒ<€îÑ3º d­nAÏÊiÝâˆ/EAÒä‚8 «d¨Ì¹ÉSÌ9¨i{•òl/¯JÌ\ó­yl;ÛŽÅ`¯Ûm0µÍ-S®×½>ôú{pbñÉ '÷“v0=šžiçÓK{ Ò_Ho–>‚9vª½¦•î”K cu²ù¤¿ ‘1`w±#À»Ýþ òµ¶Ö@¦1Š¥@{ùZ"²¤´t‘! Ç´»>Z]] :κ´ªäÕÇ@–Éi¦éaò–Ðmú)È/²L~µ:Q+CF¯ŒåcÁ›ëMñ&‚“Ø"R9R"­ž‹¬„Èàˆ¼¨|&óÀÙhf;ƒóºóšy´´ÞÖ(È*!c@ž—dYN_§ŠcÀÔ3÷Ía0ߘ=f7ÈCRV1¦²hÊ&®‚l| F‘ö:XçƒÉz$Q[H h­¬É £y‡IÀ$ Ëip:;ÕÚß_ÿ®=½éõÀ‘¼Ì”Ý@^æ2 XÎ?¬ù‘¶Ô¡;¤ð7x‚+Á5ÿ>0™o$ì‹|`+ƒÓ/ã­i,ýt#˜‰æŒÙÒ_•: Åµˆ>ú™þ®ETb PÕö±…@Šj 9òµì×c`’Lnýè‚Ç9½Ñß øÑoLƒøÎX‹xüëA± êòöÆCðˆe‚÷WÅ« 9erÊäÔ¬EYã²–BN8'–Ó bùc•âÏA á¡àHxäZú•.Wº[»ýÇv‡ç÷ÿ².„_„Ÿ†SAß6³ý_™8™Æ‹<äq³`ûØûm0•M–Éóš™­£AúI}¤@ÎK`&³d…L“×@Œd‹’¸é¿t•~ZO­ÆÀ\0®æ‚”“4© ¤ºôÓû: šßòR,/œ*ºan3pb…ñ¬x$.[Wöx÷xŽ×d·’Ý`š›úHwîbÐÆ4VË|ùÜÎïÎ)ÐïtŽ.m¬èjÐ zQ0¹æ²¹.”¬%i ;t‡~õ¿¯smÀ¥U@6Ê'²t¹®ÔI ³e¤ô›fËÛ@Œ¿ æf7—Á‰™ ÎЮò°4‰.(Y]²ÒÚ]w]Ý•sÐI5©!µ€§xDf1®Øk ´‰6 NÛùY¶‚<.ëå9ÉÛòȹë’$Òù‹­@M|»äaé*rRU‚Ìã>)¯h>Зg¬¦£©g>©(íd3ØÉÌdh¢M¢O¢/Ä/ÅËÇo‚Xåh½h(=WZZ@i¬´FéD[Goh4šý ¢¯G{––‡håØm±Š›ÛÛñòñ¶e= ¾9~6~âßÄÏÆC´4z{¬”FJ{”v‡Øªè¶èQ(+,ËH| ‰Z‰öɃà½î-ö<ð×›‚u, æËÀú†€Ü,Ýô+01Sf΂<Ç‹<Nb@rBòyHÝú%µü=~ ÿ'›ÚGí Ð'µ£&¯d-g@ÇË ƒäJ±ÜÒEŽËGÀ@í.3™Hèv]¬‹@¾‘1Òô¸.ÐV 4OçƒÖ‘‰2d®×oAž”7¤;hm§ÕAï•6Ò 8!g%Øe·ÛïÁ‡ç‡†kÃ/€•\à08N®™kƒYl&›WÀ,3›Å`†ò#ÛÀì3ãMK05Ç º“F?°kØË7@ž­aÓ!ü!üÕþ ò®L€ÝjwJXÄ „• a)Øé¶öM¯ÿ]Èyr@çë»Úì£ö1[h¦3$RUž—Ó kåßr4fv™½à r¶:ÿuµ¡6±Ù~ÜßhíΗv-Úu^9xüà1°-l=› ÎßÌsè(3ÜüȦò.às˜ _jHÐy:ZgƒFg •fÛ€=Ê.͵Zly[` %¨üNŒ$ÐŒôY,+d.håÿC?”•²ÂéáÈðÐú\—B~ÃüoóÂï÷˜tâ9пŠkU„Â…W @Á¸‚ÏAá₎…ÿ‚u…ù…- (¯¨JQS(:SÒ¿än(~­¤VI(^^쟃â£Åí„’ü’1%û ôH´R´ ââmâ Ù=ù@rø'ýË~!yAaðØF¶¹ÍiLCÖÓ˜B5à09×ÊæÛ¿@Öƒºœ›æNu0•L¶©J®ÄAý±©éþàû~uÿvðú‹ü—!µÏ¿'%à_ö­oÀ»æ¥y^ƒdëdkHŽ÷žñf€·ëº1&é&oðæA2/KN/æ^]HUñ›¦ÚBêrJR.xý¼1^/ðÖy¼eàð ¼ü—·ÝsÀÛàò~/Ç;ãåBª†ßÄ¿ ü„Ÿæg@ Av`Á¶ ƒMÊÑ„4PóŽ3ÛY ¦®É2uA;è½Ú´³öÖ`˜MæèO:K—‚qM±‰‚û”3Æé‘‚ÈéÈLÈèQ7ãd­Éz-sdÍÍ‘y3d´N¿)£Dî‹4‹t†´oÓ>K; i=Òª¤Mw›s¿ûàq®9•ÁiíTpƒsÉ9g΀éjZ˜6 ?év=Ì´³ì*ŠýdÐìÿ…ï…_€cféÓ:œ%î îÓ)ŽäFŽl¿¾¾»o¹+Ü`¾7Sµ?ð6så°CíÃvØ‹6ÏN;ϾiƒÔ“©ýf`‡ØöÐ麦Dþ”Iü!…² t¾,•GÁ®g?Oþ¨ët ˜öf¿¾Ž˜«Îtà#‚p*ðƒü èV«S€;)µ{€vtãKÐDf¢Y¢>$ú”M,1oo ¥?–ž(̓âÛŠ, Å‹»”t‡’æ%cJ†Ø{± ±!1>ñÏÄtðF{¯x_Cp1ˆ/1 ôm}D_½¦Çô$è%ÍÕ, ¯t‘u ýi(£Á¾hGÙ‰, Þ ‚”õ³S//Aµ ?_ß[ |-x)˜¬æ}ÙŒ`#È))ãe(è RI*‚=¥ûô70Y&0!˜gÌóÈe9)ÇA6Ëùx•¼ 2VFË0•ò¡Ì«såÈ/kAêI{i¦h28PIDAT|ÇrÖ€ëaý ÌçêêjÐqf¼©z^þ”} «Ì 3ØÉvš•(¥Ü:Žã8`|sÞœ9$ûä8Î@'ùÒ^I›Ÿö¤ÍJ{%m"ØúvŒn÷N·ßt6@ZÉ£2¤¦dKð:Sydš<.Aþ)/Ó ¸›üÀeŽ€Ü(¡ÈLy^F€ çøl©½ßþáèp`Øè¥ô300•'AºëíLµËí7Àhi)M@¦IS© l#’Nj}ªw*’oz¼¯ÀéíõN­g‹l!ƒ§‚q ô¬&@¶ÈóòÈdy@-ÖÑZt‡Ð ŸÊ‰‚vÑ»µØyv=æW󠳜ZŽ1@FI aÛÞîöµƒ,ž º@ÐØ/ô+ãd´<v©õmf“égBbaâxâðÿ¸ûõà¤?Þ%cd<–>>²Ò›§§"MÁb¯1ô.í§w6×fÚä´œ• +äY Œ¡;CA~“¥LÒ%]&‘ I­¡QÐFRYë_òÀN +„ Ðöæ´¹æýAO^4Í 0ÕÍ`Ó ´¾¾ oƒÞ*¾xà6v_vÇA|yüh|3˜*¦¢)'¹6ùKbÄW•m,«ñÚen¢"°Ù~fOû’û‚;œÓNž“²L>‘¥ =ä!ºX?Õu kÌFm šK© ½KºHS5,”mÀ(63 d˜¼)ÿæ2–Á¶¶óíj‡Ÿ‡› l`;ÙöV o «\•jò.3 ÕÆ·~‰¯¹ ( zà˜Ç¾Î=àÖwš»­Àäš?LM°ã‘á Mò•|ŒçFí)¤È5Ù-'@þ.KåKàûÍÁ®¦¢Á À„W§Ž¹IK'ÒQ:ƒÁ#@eÛÈ6»³²´ž–é>0SÌkænàvº2x–þtýZêTƒÈc çô¸¦À´51s˜ÀÄŒú”~§+€!ÜËàtþî< ‘jé/FžSÏŒ0@å¼\?AŽÈ’ÒXêK=0›•æCpowë»uÁùÓÙåìç^§¡s;¤ÕI+M"#™‘*þJúƒéc!½mÆmé5 rOä‰H/póÜ÷HkšÖ ­¤¿”>1}6¤¿y0²Ò¤íHó!í~·£{¸'Üòn1¸SÜÁî0pv;8kÀicn4Á|mÞ7ËA›H#½Ï(Æ€ÒŠ®td,CE`§Úgí°¿Û{ì*»Ö®šSŸ6¬ Ö…Û Øü?åßàgƒoj°7x?zk½•ŠxK¼¥ú(õDjxí¼»¼;ÀÛ˜ú%õ]‚%~'ð‹ÂA ü‡üÉþð–y+¼/!õuê—©ê~ ¿-¤:§š¤:¿ÅŸé¯û§=fsÁ)û±lÙ!ˆŸ‰ß±É±Ñ±Q`—Ùív7$æ$¶$~§£ÛÙ½t’,‘~@-éÌ#`úé$³ LºqŒ€1&Í(H¶6–F@ yI>¾§õÀöµžõ lÜôpZxŸÌyFÜ0¤‚äIˆR‰L‘ò¤Œrˆl0Öt0å µ6•™Ú a4Ì]p2Çeȼ²Âìç²FCö”ì:ÙÃÁ&í9{ ÜÝÞn/ÐE:I_ݯ«t+è?uŒ^qå°¤€¡Œ¥è°ëã·|ªÍt œ R(d?Hm¹_†ƒ©ª¢’-ò°—<®q³¹À&¹]n§ØÉ5ç‹GyЫZÕôHIäj$&4)S4¼ÉV±õ€I¶ý€ãvß‚Ýk7°ìY{É^›aË[…à‘`RÐR%©Hjxu¼^KHmIý‘Êï…Ô{©ÏÀûÜûÞÛ^àÝàÝÉÿ&s’¿C²uò–dHìK®Lþ Éß?'ƒ·ÐûØ{‚»Âû‚" Ùö;OÛ=`kÛÜdÕ(†ò`§³Œ·@.T;7þÜÃÖî»ëé]=á`îÁ]wm¨Ípª9ÙNE0šæ0U^•7€¥öû0— m¨µ)èPí£ýA­ŠäÉII%$© ¡ ½@î½î²““rF.‚®Ðoô[ÐÊZMÓÀÌ7oèó@*J°·ÚÖ¶3˜#æ³.=uùÂ¥8É)çt9p²Ï•û¦Ü6(?¯|»ò½!û…ì®ÙÏCX/¬Vg‰ó®ó!8Qç‚“f¤¹ÍÔm¢_ë÷Àx‚A¾•ÈR6’+1P«Õ´̼ëoÈ\Y2ƒvÜ 2CòdpH ¤ ´Z z·Þ¬ÍÀdšÞ¦#h¡^Õ(P—óà,3³ÌtH|x q Òæ¹Ÿ»ËÀ)ø¶àrÁ¸R÷êWÇõq×f\› T¥<çÀéë q*”ÉEi¶½­fïÛ•žÜ:PÊ$ ¦ªédª‚ÖÔQÚô#}_ç€> _ë7 /ê¯zdÌAre§{¿­gk€üWÎJÈ?¤¿t5:J‡‚iûÚáÀ«<Ëp3\ãæ€É0ÆÜú‚þ]߉H¦ÄÁ®²Ëì&òâÊ! òµÌyS²ø/;ä&^ÒY”qˆ£ ÷š&¦ÈrŸÜú“æêiÐîÚMoíªí´è}ÒYú‚­G-Ú‚ñõœ‡‹K.eæ{plï±ß¿Ž½–Ø8„«Ã¡á7à—óû)k†¥aà,7ÑÂÕá¶ðg%ò½¼ÚA›Éqàvî‘`BSlÐú´F@ZI+ùø–õTjÓˆ&ÀþëU?{·íc»‚-¯Q°mOëƒÖùWX€ž`çš¼ÊLpª;sœÙàOK½í[û…%á0p¼~Þ@ïeH,Nþ•< Þ[Þ¯0šuÖ‰‰'¯C˜>.yJ:Ë3`ÏÁ· iÂHºUw€î–2 ´¥öÑ/@:È2$G.Ër`%W)©(Se: @鋺Ì[ú°¾ú­yÀ´ýNÿ­Õ@êýd¤Ô—@k^å9 U©NÆ„Œ»3ZB–föÌœY³~ÊZ6fëÛÑ ]t¨®}NŸÐ§A"RI2Aþ#—õ OÈ_r têÏ ³äšì]­ïê§@eþÍ$Ð :DïÓ^ú]©Š¥ 0SöÉN÷e«|ºYï–S ÕØ{ LÒéí´§¢“å¬5š¥­@9Âe.BØ6¬6„`I07Øþ%¿ÌÁœàµàŠ‚nÁ6§…÷ÿb«À޵ñ(p…<»èD7,З 4êIKj“™ÇT¶ÏÚÉæ…ùá%°]¸‹{€Ùöû,Ø[lÛl?Û›/ílåP_êK]•<Ës iò©ü 8ÆÏìõÕOóo¯ Õ*U¼FÞX¯¤ÞòWù Àδ¯Ù7δd#ب½d_‡àDðGp‚Œà_AèŸ èT÷_‚TõTuÿ(ø{ûýæúÉ{ÅûRSgR§ÀüˆäºäÖäàµM-K½~M‰?  aÅ0a£°qXÂ-áöp3Ø[m; ìû›m ¶‚md[‚S~Pùå+CÅË>¨ðTz£Rª’,á,Áè^qóÀŒÓžúØ#\àØþvžMvó&³@ åy ¤vÓ: {d‘tªð_ޏF5`<#˜ÚGn‘[€÷åe™ ò²´’n ]$&Y CÌ83ô‚^(ÐÛ.&æsgš3"C"e‘$˜=f£Ù]] %KK~-9Å7(¾ Š+…» ³ (ØQ˜]xµ/zо-*(*‚âŠ/ÅWJë•¶’º%ýJÆAIÿ’J¦Ctc”h±çcÅ>ƒø–ø¹øyˆFkFk@43zg´ÄvÄŠb…¯XÖ³¬;”m-Ë‹Ÿxåøe!þ^ÙʾDß²ieÓ!¹É;퇰[Ø7ìŽlº›ž`¦šæ90Ì0ÓÂ-vS¸Ìv³Òì÷5÷w$è_z»\î¡HÚyTcè$m¬Aî•ù7ÈLùˆF@%yDi3à;Ø’']¤3è­¡7‚4—îÒä4ÛØ üiÒºa“°7°“½ì…`Yx*ü‚ýåþ°Yö¼-'œ¾g@üL€`X0$ ög;Éþ+÷ëÁÞ`ï±WAŽ‹#•€QÔfÈ ãÀÔ3•õOÐ|½Þ‚î(ýdHeé.'@jJûOPjIEÐçt΄àxp2È)“#r ´–äKèesÙÄA³µ‚^i' ¤¸o8“œÞàÎpóÝ/À|mv›ó é»ÒWGVBæðÌ{2;AfV¦—éAf¿Ì®™= {@ÖgYS œ-ç— !»{vì¦9"³QæÍ±3c~Æ2È“14s>dTɨ‘qd$2ާ?éÃÓ«¥7†ô“éÿIßéý#5ÓCú˜Èé­ÒoH¿2Zg ϸ2K2keº%Y§2 !óöL'³dÜŸÞ&½#¤Mˆ Œ<Îç°s+HGé$ÃAbMK;–v´vGùµwT…_X}`Й:4wŒÛÊíæ˜)2'±Ìfð&ﲨ„C%0»Ív³äwùMž9${¸ dº¼®Ý÷ùˆ c¥’4ýPÏ›v@{®Úw€¹²CÖƒž×Cú8gãfH.'¥ØötàQ0Åúƒ~ æ?šßŽM;¾ëxþøÁûÇ›{{IEND®B`‚Carla-2.4.2/resources/bitmaps/rack_padding_right.png000066400000000000000000001544751420416754300225510ustar00rootroot00000000000000‰PNG  IHDRt†dNKzTXtRaw profile type exifxÚ­V[’ì(ýg³„$Ë᥈ÞÁ,ް+«ævÇôˆ6‘‰ƒç!g:ÿþÃÓ¿p‘´’D­Õ^kÆ%]z¸iùû:oÿŒQ–ûýüx{ü¦ôóÁç® gôü š¼Oùÿš_?=ýÅÒ_ðg›òscïxÉå¿2’ž5ÿ¼Ú÷Ç}7÷óœnH õ9Ô³Eú ƒ‰¡ø.«h†âÞnëh-¼HòÎ+O´E qvÚ‰9Úè-ä(åC_Ê*|Ç[éeqfb‰F^Œ;on\x•ÃÌ’¸|r¡»o¿û-jØy¦B0Â’ÿÙÒßMøæ¾rºjhN\Q)ÁŒߘBÈ_ÞôüÕ>WúA,ƒA½07päù„˜JßÚâ+ÆÇ‚|–,]uÙj«¯±Ëæ-[wݶÛî{:R:rôÔc§~†CkÎ.®^ݼy÷ña^ÛþÚþÖèe­\¦bž}XèYº!(êŒg`¬q  èœåF"%˜ Îr/p…$©Áͦ<UP(‡Š:}¸ûfî·yKÀúïx+¿Ã\ êþæJ:ü oÁÚŽJ¸.c ÓÌpßž1 wI¤ÍÆŽÓT¯ãô è·#ž¹7t’ù,‚Ž…$ÊÚºmö®™¹ÃלviÃ*¾²hCx ·é{ÓF*sÔÖ|ú™º¦7Ã/Píàûà|,Ú]“RìiäŠ:ØÝ¢(’p«ô‰ÈÍ!£yz,­1ÍË8f d$ …"Û(§|wXHMÔ׊-ÚFòmïÁQ0 íé< -bd]U%cOŸS[ësÇRèc-¤Âì8²uõ9B/DÕhuqŸ§Br«U{ÖŒôã âù¸ú} QGýÜÙŽ>ñçŸg´–9 ;Sò:âH ˜Ër˜Krùv Ÿ!(lbkG&“¸/‹¬Çi_:ˆÍ)EÖÒ#kH¦ê¬s"¾Šõ‹FeÁ‹ÈA¡‘ Ì‹ µCÇ6O Ra8&s´ê¦¥(³§{´»Ûùî}

öÓô¼~£9 u´„®Ý®×HUÃrJœd‘6‚ Œ¶½àøÆÁñ!°wľ:.uÛÜ·¢[£žQkàg¿œïA›h]=RIŠK>hé#@n’r;ȉ8²•ÍìùCÖÉv'GåÈdyJ^näfnIi®í)÷J? 1M9zN ô"˜÷õ=3L5šZ`ú˜;í· oè ó hkýKìvSʾA {Y°â·ã·ãAõm¡MÀf¬Øb I¹Nª€ë䚸û ZÿïØÆ{ãBˆ»Å×Ç£Áµˆos} suÔ4ªédºJº,¤O¥Ë¦‹Bæ`æDæ(D>ª•…¨DæH”ÑØ¸e<|ßÞ} q£¸y|#Ä6Ή.A|.öqñ¯ñî¸ø¾‘kþ0wúâê?vWB<È•sσidn57€Ô/Wo~½ÞW¼XñÝŠ¯C™Léþ¥AÛƒ²Vg›Õ’?'æ%·@8;ü$\v¾e?3Ç,43 ø8x)xÌßf¯Ùæ¬ùÏyPž”g@†KQ¹d›|% ÛYÌ`4 r³äHЗd„Ü2Y7ê› E¥¸\ òÌ”_ øÙN°ƒáô±ÓíNÿ;Û횷˃ÆÝ)wÒӤ߂LÉL¥LHµH J)¤Û¥ú¦—Bª U2Õ J}Ú ©÷S[RK 3+ú4z ¢'¢O¢ ‹ßG@tu\'ªñéøB| Ün…{ÜbwKÙ?ã_é(WK Ðú> ºÛXcÁ6·Õìe|¼c_‡ Uðoà!,Ü~ ÉÉÃÉ!¾?î÷ëwùþ[p9î*Wt½9l΂®1Ì# ÿÊ ¹ ¤™¶‘‡A‡Èdyäié¥Ý€ÕþV\M7Ü}ñúèÍø(ø¦þo?âAtˆÇ‚ü(ëd Є\Úr=_#Ë^à NѤ²”•ÀÜežÕ‰À ¦ËëÀL^¦(˜‡Í|S.\ºÐìÂë‰3u2½Aê=^/§^Qï+Ì-ß¶| (ݲÔÜR_CðW°78Ù#rúç´‚¬ÑÉòÉÆ®IìOü‰má‡áÇì þ öƒib®4kœùl9{Äî›±ÎÞZRV½^ªK™ú†¾ !‡¢ ^óô0hžžÔ5 óåcyô˜ÓH[­®½ 8gØ9pìÀñžÇZÂïm7ÛË‚% 40‹WùÜiß×7‡xF<"î ébé éäqùE¶A¼ß‰;™ú™á™¡`ÆêÚÌ£v£Ý ö SΔýZçé› õL=Ód[Ø ÒP&È ¿HiÉÚq#m@jH º_ÿÔå`†›efè3ú˜¼ rDªk-–Ùsöœ»æ\íó×A&™9‚¥ =è²Yþ•OÁ\nD7AÐ8ˆ‚!ì– ±6\Î…`XØ-ÁãvŒæû°ö ó¾ùL;³Ê,ÓÍ40WƒyÂL0ƒ¾£-µ)З®´yž‰Œ½GG‚îÓ²ºô]!oæj1= RWr5ä>b7Ø‚jörH¤C_ƒyR¯ÒË@}O×ÍÝq‡¸µ Ñâ̲¸8DG¢rQ#pãçâqoŠÇ¿Bôkd2[!s!S1S¢[2#3÷A´*Z}Q2*…ÕZD !ê ‹†@|4Žâ\#w½»ü0F0üVÿ›ß®™»Ö5w³käo7Âò# ®×kA4!ž¿ Qÿhl<Ü·Ò­¿Îoò'@êß]ïP½ÞW¼²âO‚ÒÝK¿QúQG½‚1½)ûÇì±ìšlŸ|ÂjaaØ‚ xpÌ%sÞœ„ eP<(v¤eî=+'õ PCªËõÀít¥pŽØlb3Á¿âgùe Ê»òÈ ùŽç@²¤ˆìÉHݬ”³`·ÓƒIpúŽÓßžš {¶íKüY,õ¤±Ô9!OËó`šhiíú”ö3€Ó:´žÓ@ßÕõ1šRG®¹EªI ý¹H‘‘—A*è窠Ok– %ÅŠ†3”áÀ‡”¤8È>ù–æ Ke¦ùN—胠;t¿þ ú‡n×ÿ€" ¦2˜J¦š©ºEW˜µ XÄ0å²Ëî.ûÇĉ9Oå´É½’%Ê%&=(/kÀ\0WèlÐL/Ó¤¯‘¿Aj°šÕ Ê×2¨O=Ú‚«áÛºšàÄ'Ý ˆÇÄÇ“ÁÕu]kð½|?ß Üî×üã~Š? þ¸Ä_ ,ò |'ð#|ÚŸ_Å_áßç7ø£ ÷J i—šåeòNÁé«Nßtú6°üÆ&6ƒ?Kowâá®Q|tY¼!ú¢yq“¸DQæ¯($%YR ü wÁí—å*ºk 8Hpì~öØm ÅÍq@¹“ÛÀðÝü`pm]G× $KJK1ðWøJ2ü¶r¼óÇý× ËùÎ_ä‘ïT”²ÚôK³Ð|:IÏËzào®æ°þNßÀ^„AVŠ sõý LlZší`ç¥Ílþµ¿Ú,n F€]a§Ø¥ ¿o„ YP/(öûdp Ôj9ZKßÐ4È8yJîý]7è/ä]y ôy}B_=©¥3˜ÉºÈ¼R¨gôcÐ.RWæCøh8*¼''ç‚9nš™ÏÀšâö “á°hØ ²e}•õ ÅŸÂ!¹$Ñ>q$Þ 'VCp!x6ØæV3Ô {Ø&m!h½Qß–ð óÁ­p߯Ið7ø&ò5ÄÏÅ+â€_ØÊZ  M¹8M.EAšI¹ 䔜– Ûµ§< àZi üé¿ñÁœ³íl{¸øÂÅýOC¦~¦EFÀ’Ç9|?Ä×ÉßçG€ÿÈMw¯ƒ?âÿ|uί_Ç7ö·Ê`é2M†ÉS U%)) ·ÒÂhßÈyÈc¨ƒ¡ÈFyCæ{I"@{î¦/ЇþÔ}PFê[À9.|ìó@þ’5²äKÞc0VªIuzGê©w·÷WW^a$”TúáÒBp>Üì©Yë³ÆAò¶¬ZY7C¢WØ5¼‚²A*ÈsÞ3çÀ¶´-l#°yö_{Ì}¦³¹L3s½iö]ÛËŽ3E‡jWf}¿}þ{•ß»•²]Ž€dK1)<'kd!ÐËÏñ¯ïF;Z‚»;žw‡øæøò¸#˜¡¦¹Ì*³Ð,úÑ“!Àt¦ЃÁ ¿ìï‚('ê]ñ ¤ 0Zî–þ ê׺´¼”•°KšH.hi*7ƒÖ1'  cäW¹â+ã†Ñn(Xp[ÁXˆo?ˆç‚4˜Ò ·A¶÷•ŠŸV\ e3e»”mal NBÎ/9?åì‡äáä†äD†Óƒ)ŒêØÚ`š5vØËíö°Íì­¦èƒ:Po©. }ä/9. ©Aà °¸šÚ8³’–R 䬤@DQÐy:_ƒ´’JÚ‚ív²}Žm;ÖùXØõÅž‚=¨ïÆ»ÇÀtÛÝ·àÖÅãeàFûÉþEˆ¯Ž·Å› >ÿ†¸©«êZA|Òå¹øËüü¿ÂƒøÏx¶Û ñÇñûñ4ˆŸˆŠÆ@œ‰£Ø€{Û-wŸ€ãÞt¯€ý_xÒ÷ó÷µ(ÆyÐÕ:[^ÒQ*oúç}Oðï0—׀뤥´.Ãe$˜ò½Ë7(_sâÄ"Éܹà Y>yo²øš¾¨? ’Ñíò"H;Ù#ý€ïýR®žò1Ï‚ßíÏûB ( éò™ü$§@Ûêškšë@ËjÍ-®ZÚB®’: euŠ.i¡Ëô$H–T“kAÈ&¹ äGÖJ5Ïõ ýÂ/ƒÁ‹Ppeá{…‹àÔG§~:õ3Xí.—I#0›«M{:Ùcv „Ó‰áO¬(šÉ3‰šI X ·Bðhp48 ö󊙦¤)0¿‚6ÑFZ8Æ·|þ°¿Ò¯WÒUrí@~—¿äq2M^Ï|Þ©L.å€^ÒEª¬—ô(ˆÈGRô%«‡@ŽJ¹þsÿƒ| V2,E¸†J@ÈU”ֲ޸Uìb&øÕ~’ ¨H5Ú‚Þ*ÏËК’”r`*›¿Í¿, ~ ¾ó˜éez©OèvzŸÞªêtÈTy@‚~ªoʧ¤»¬iÊ!‰A>‘Weèí¤õAŽÉ É*щI ·kYc@ûi;­r “‡ÀR"”†2™‡AòõEíúž,Ôý §d³ü~71ÜN7Ç=®®K¸ÜJ÷­›ñéxG¼øŒâ”ư•AÛò/‚> wëý ïÊGò-ð7ûåQˆŒ'»›€š|G{ ²I¾©êÎǃ@Hw½x_fIèCz¥.?Ûwö§€•\ÉU`ʯ,Ÿ(Ÿ;qb‘CE®/Rr†gdzDÊ=`þ2KÍç V¿Ô÷@ªÊårØÂßl¿Äæ¿÷‚›í^÷§»äò!.W‹¯?Ä?ìÇC”ŒŠDE ógæ|æ8¤ÿKÛt>øm~§÷À&¶’2š‡y äv=­Ó@Û˜U&fˆöÕ— X¼Œ‡¼ü¼µ—ž‚O~" ,ËYÍ<ð+|¿â[ãGâî`6˜÷M-`ci :´3!ø2x=ø«O'¦ApÂ>o÷€}ÎÖ ª€n?7ƒÀüdV˜9 ëäM™zT•†€ߌë}U-l“ƒ Kô¨^ùP§ëƒ Ûå/Ù|ÇFBp£ý.-ÄçãŽñ½àÖÅÝÝ?àGyX¦Â‘ò³Ë6qb±œbßû Šô-úHÑ÷!˜^ Ï@r]²H2ᆰgx9Ø]ö€= æ13ÒŒóƒ™b:ƒ,×[d3ÿ3«_Ë_ãk‹YÊBà4ú2àðm¾­¯ÍNðóqUÁ]îr\Yˆ'»’®|ßÕ××ßÝ庂k'â àgùN¾\¼t±Ú¥úpê‡Ó3NY°t^Ò¨Ã&Öƒoìgú¸ã;â[!JEyQ™ÂÌùLI ¢1¸gÝr÷1DÇ£3Q˜R¶‘)¦ˆþkZ€jæ˜ûÀž±gl6˜có2hw½WS ëe±ÜrHÑ“ õYú¹nÐÅ`žÔÕú,¨Ó´–yBûÈ ö6 Á†°Wðè:½Oëƒu¸~î~ˆÅµ‰kBüxt&ºÌezVËm9B¸?]1—·Ä=ëf‚¯å»ûZ@e²é :\jÐV:Jk€”—Ò’ÿ²Ü?î1×Úõ¿Ý­vŸƒ Ö›åJ d$È5Ò_n-ÔºÜ#f¦v=­LmºÒJú$©(å!¾-º)¾Žã«óô}¦¦þf:€ít F‚]oÛÚ±`^1ùæwo ›‡ý ¬ ³!ø<<¶³ílûAðIp"8æ”YjbÐ_åY:O–‰d¯¬fË{2¤¨Ü-äË ÐlݧGA›êq­’‘õÒd·“ª ÃÏ=`Zš æ èæó HsY.«Àº¡n„ qïøµx¤‹¥æ¤~ÿ—ûÛ­}ÓÜf.û%~ kÙ4 (•€¥¬cø·ü|ÿ-èݦ‡¹ L í$Å@çéûæ1P«)­zŸÜ'}@i) ÌâMYÚ@jI{`«ì“8ë?¹_*ëTCÒFú‚;ëv»ï!ó~fvf¸k]}wXó³Ùh¾…à­`uð#d/ÎöÙç lV@öáìCÙ'!ü=Ñ4QÂǃ©Á»î ï G€yÔÜa‚=e¶ëÀŽ·m'0GÌ#æ7ÐWuª9.å0‰µ®c$W·ú–~8𜠖ñ W0„›Á/£*“À61ÌÚò 4€ 0ø,˜ Aéà×`è¥ Áºî¼KCüB<*™ Ó:S äY}^gB¦bt(*[ÎÖ±µÀÒöšÑèèæÌNð}ä;¿è½¿q¸|è=£1È0yE惜•¿äH¡œ•% ÙéЪZO&€öÔ™æ.0÷˜È„à5»Ü.}DÔ} “¹é ß›—Ík K?é âq&õµ}m_Ü÷€{¢§¢ìhÈ[2A&Cz”}Ç.s¹>«ÕÏ ¾7̿ϰՃ$€³òÖÕêR äy]¦€`úhà#fË@>1 *¾˜oññ|ÿø·üÛ,¿×oõŸBüV<5~äGÙ"ÿ7qÁÞœy83RÇ ›fA\<^Ïå"9üÄ2_ÅFŽËH/ïÿð ^츭Žo‹û€›ïöÄï{(ž?ñq"6Ù™ù=Ú éªéJéÆ~"Ý.3â®q½x8ø î2W|1_Ƈ ¥íA2R()×d¶¼fˆ™¥ÓÀì3GÍa°jÿ³ç! &]ì ÐîÚSŸKEêqð‹˜tâ"G€_¥½(èrL‚Œ—»äàg¾g¸®µ›~”Ù/Êú´¹OÚÊ $5)®ƒ»Û ÿ ù~È-ô–à_÷“üCà ýWþ"èfýIK€¹Ú´ÒL5s¹Yú…¼¯ƒœ“NRÜMÁì`)Dç£mÑð¿ø<ïÁj )Áv³ƒmkH|>x‚ûÖ>h•¸²Z'‹$ï€Ä™ÄáÄ^Ÿ Ÿ ׃ieî0=ÁX{¥1`êèpS´ˆÑ2`?°ƒíÐlªC@OIY2AJK>ø:Ôðÿý/Ã釠¹ò‡ôi¯C´3È"ù^v±–u`ËÚì^H,¹Xêb t–NÐ'Áúƒþ„?®™kæz€Ûæ âÀÿæOÚÎྔ/®œîÚCtOT1j4¥!¹ tVS-ʘ^ d¢,ùMóôIÐ#zNo©&·Èí 5´‹öm¥-µ ¨ÕÛ4 ä¼8 ¢Rº ‹¥˜ìåùdªÜ-S Øh§Ú±Ú•º5UÜ ÷†{Ô5vÍ\[ˆÞŠfE«¡à–› GA~ƒüRùU ÞŠü¡`mÁÄ‚…PxCaÃÂfi‘é•¶7Š[Æ¿ÝOèsÌ|ÁÝAG[ìf»Ò®{«ídoó¯9 ß€6Ö2º¤§ iÆrXb>ÒJ;\%W‰yYÞ”Y kù_AB)+WÇ9Aþ?ÕÏ©²þ¸ú㽯x²âÌŠ3¡ÌÄR§KÍ„°d¸:ü ²×f¯Ï¾&¦%^›4›í Ð9¦ˆsÁì4ƒQã `¶šæ0æŒ9Z çô$ðØ”-°%Àt53Ì0Õt¤6¹Bo“ÿ*4šÉõTòHñ'°Ïïó;À_ëo¾’Ï÷ °f¡ùÀÌ…à`p™}’óéÄz»†ÝÂ9]7{gö\ÈšœõRòf*o…3ÁªÝ`Ì3Àô;Æ6³EÀ5 M5ÐcºÍtùYÆÓä¨äÊw d¬ ¹™:ò9ø’¬$z\óô˜ÇÌûf˜îö7û ˜ôg-ÒI;êßÞ ^ƒdÏä•YKÀª9fëκâ~ñ]ñ½ÍÆF/‚œ3²RŸ¥âTE@ÙÂHȼ™SÚ”3!صæg» ‚ÇžA 0«íSf˜mú±é ú¯Þ®IÐáúœ>r­\.È Ò\Jƒ¾¬Ÿê.puž®€¸©+ç,˜²qÝøZÁz»4yŒŸä=ˆkFû¢=^Ÿ^˜NA¼*þ-Þ jæè›:lnPÑæC0-Ü<A­`tp-Ø%Áò`„}ÂñaHVH>Ì…¬³weÍ„ì0ç¦ìŠ\—ü(9’Eë ìÖs!lV /ƒÄÑpS¸Â>aó°Ø\«öøÿ,fN€Ým³€ioî4·Ö6Ó´È@™¦ÿ ÕäJPJÊ9àQFQ¤¿´–Ú`£ÕñoñHïLGé¶P03bÁnˆ²ƒ_¢K@¾ì’æ@[ó]!^/“`WfÎÙÃU ^‰n ’áXŠ•í `:˜qÆ€ûÖãW»ä¹þ wézx™Á¼ ^üyü}î~d”^¯eÁ….‡màOù*‚”‘ë¥=ÐK")„èxôDt/øS¾ÐïipºÁ¸#¼¿l`¥³•ÎCÙ>e×–]a±°0¼Ù³ZgMƒD"qW¢4/c‚wÀ´7ÕMU0/é7æm°Kƒa¶ ˜f¡¾:V†ë0—õ´VÙ)y’ô¥å@vÈwŒÎÇt ¹t«®“AÛkký$[¾”ßAN±Oê@Ð7ìކS£O>uv×Û3dÏ8P?Â=胸x\3®™Yé%éMžžÚ™š©*ééYÙ©”)Ñ”ø`¼Ü7®œ; .öõ]sˆ[»_Üp•\qp×ûc®/¸”«ë®¿Úoñ[ò\¤&èRO÷€cî2€-cKÙìÛ;˜¡ 3‰Ñð‰ÎÉå~ž«9arM¥ÿ¯¾m€ëhÇM`å½I[ƒ¶5{ô7°=ì•vØfö¸- áª`Q0‚ƒ‘A_°ÿÙkíÕ<t ZC0-ؼÁà JP Ì›f´YFµœ:Чµ˜öK+é2VúË ç˜Á·àëû#¾HQ¹MG‚lÐcò*è­ú”X %×ó:øOø†[@6ÈO² $–³|2]ŽÉ“`yÂ?á'Ä•ó?+âr¿Ã;ÿ1øI´ó‚³nŽ›î‡8'¾ây:SG·r'Áÿíÿö{À5]µÈ~ùM×€ŽÒæ’í¡i­ 2V^О ‹e´¢ŠTé'*Oþ£œ.é*K;„ÔÒ+A6˲|+_ÔWî÷yüW¾‰¬ßÉßì~£9ý@æËQ9Ò]êJo– ‡@}F׃¶Ð,­LàU<ç( RZöÈfÐÚÝÌÛØV3w€ÔË´>h-­­Í€4ä6ðYþ´Û*šcžýJÇëÑÒDn#ód1П¾,[)RÕÿFE`¨L‘òÀ<Òl+—ä¤Í×,õ óÌæ+ÐÅ:CG‚|§oˇ Ãµ¡v3ß|a^py85\¦¬YeVgÇÛ.`ómi{ìt;ÎÞ ²H~—$hW=«4Òºt®þ-m€½þ/®Y¢?ëû`®Ð,´ˆŠNmÚšA²¤ì„ðÞàŸàG¸T4?ºÔlyYÖYg\9ˆ¦Ec¢·!µ¿0,LB¼>?²[ t%¸d|£» Ò5Ò÷§Û€Ýì·¿@°ß® "Š̓[Á|aÞ0ÓÁ³í Ý´©ÞZVÏhYÐVÒYÚƒTÑžú¿%òsAËk_­ f˜™ ×ƒÙd:šµ ‡d„rF–I=H?|\ ù—òÇT‚ø†xA¼¬™ª/ê“`W—ۣܔU9Y ÂÂðtx².$O%H–JŽJN€àƒàƒ`σwÁ–¶ïÙ2`ÇÚ¡ö>0¹&a"0ÛÍBó-ÈJÙÁkÀ|$_S˜Î4`ŽŸï·³d€ôé.÷É@à ¹Ò|CŸÃ`Œ¯èÞи@ÚJypsã:qyð“} ,u¥¦4--¹zLcfV€¯Ílc0O›Áæ&0_˜‰æMdžׇm œÎ Ÿ»Û~e?3Q›ë£  s³é:UßÑÇ@úË`É2e*È·²^¦< ¹2 ä[Éç˜;´®ùLó¥ù̳Ë,moºiS«$KëBpÐ*h yÛò'åo{•ýÈ®õ‹Üçîcˆ¯ŠÛÄ!³:ó]æuHoNŸN-„ôÅô•éŠ:™*’ ¡`CÁå• /•_/¯;ä-Ì;›W Fî.üRץ楦CÚ§+§+Aæhæbú8Ä#âññ8ˆKÆ¥ãŽo‰7Å!¶±uwAúBÚ¥k@þ¤‚ÙŸBÞƒù¯ä¿×\Øwñ\¨s¡Û…;áâr IDATÔ 3.¼ùó]~âÎq¯¸'¨>g4Bl v@òÆdÇdoÈ*ÌJg)äÜs&'Šì(²¾È2(²©È "3 h½Ü“EC(R¼ÈÁ"§!·enñܪ»)÷ÅÜ ·[Nåœ]*ëbö%ÈJ'%ÿ„dõdnHŒJtM´‡Ä±pcØ’Å’éäbȪŸU"«íSn ¸Ïâ∦0•O@W¸±îcЛÍfh}i-×Aœt®ð¦< A¸®î:Ðùz­ü zQ LGB)R µõJm ò,—€çÄÿîìZ\êføYþ3pß». ññ¾xdúDË£éP¸8•H„T2Õ"ÕR‹RûS µ"õ[j?džÊ|œ™QÕÌÎè~ˆˆ¾ŒJA¦R¦Yæ ¤{dFgz@jcêŸÔP°±0§ð¼Qxua¤–¥Ž¥Î@j_*?u-(œ”ú Ü_ð,ä7Ê¿'ÿ?È›}iÃ¥^pñË{.~ æ¼Që¸cܬŽÛ¤;˜ÛÌ~ó+‚ ˆ ¸:¸,¨ áKAã +‚™Ádš%‚Ë <þîƒà¦ JP‚ïm•àj0½ìm¦*˜¡ºW—ƒVÕŠz4KËjµ‹6y•̹KËõ@$“eHº0ä´¾¬@Þ,NûVìûC0'øï$®N$À¬Òïu%H£Q O5<ïýå‡.Ÿvùt¨p°|X>&–$æCN½ìÅÙ¿Ar_2'+ á˜Äãá=„Ç „ë•áb†÷ƒÀ{Lq™Ì\ó©YòŠL– ÉjYREjHЮrBfƒÄRK —K©æ{3Åd×ЮÀ™)û 1#¼.¼Žt9:ýè@ؼpKß-MA=Þ° ¡÷þò{.¿pùy¨ðmù å +l4‚¬VYå²ë@֫ɆÉv¼,>-Ô“&¦µ©«eÀn4;Í [̳´šVÑr '¤@M¨jôvi)׃l“¿eH޼"{@‹imú†ùÃLSÝÜfÊnÐçtH+¹FzC„›Ã¥p¼ëñÃǶÀï½·½¹ýqPòò&4åFp+Ü—îbü“Ûþ7Ý= ~­ÿÓo>eëÁÖ´UMÁ?ÁÞà_†…mÂ~a"Œ!q ±=ñ;$['®LÔ€ðÏp}ø >8œ† Z A>Ø¢¶·-:Ù,6SAúЙ.à뻤«ññ€ØA<;~7êÑþèè ¸ËâEnP‚Ôëò\Ê¥!jujCfUfcæuÍò™Ô„hG¼&z2Ÿg̤@î’ûä ;ýé>ßïôÇ€¿9ÄIðµ}cß üZ¿Â/ÓÈ´Òê ?I=]Ì£¹ ÏÈHz§|ä¨>©ÎÐ:´²–ÔȱlêS‡’ o0—Á¿ÁlÞnáG~+ƒôí¦ˆyË|‰Ž‰¯ó!Ñ)Ñ0Ñ ²M¶ÈZYé¬_³~ƒÄúÄg‰éx.ñ@¢/˜Eæ5³tþ©_–‘P¾©®K ²V¾ÑÚ ÷hOÙ2/%dŸÔ“…À×ò¢¬ýPÿÓAŸ–Gä> ú°ô,ÝtH_®£;5‚#ÁA°¯Øì§ ãe†¼Ò°Fƒù >ó¾RñJ3+= e¦” ÊüAÛàŽ dûì]Ù_BâíðÚðE†}ƒž†a«°>Øv¶º­ Eƒã`Û³¶(˜Úæ°© ¦ŠiþýN¿Ô HU)-u@ZIS©R\¬é\$8Âfµrƒì髃e*h#-j:Abx¢b"ŽxüÊãl×Ýw´+ù’’³ Íý‚TÐ?xÂÏ‚ÁSX>þÉ8y"ù„ÓöAo°+íCÁË`»›¦¦ Å‚2€5AY›“Ñý¶<È|mà ­¥¥)+¤$è‡:S(÷K0ùz»–j^2ËÁ¬5ãtÈ|æÊç d¹t‚ð÷°jX›ßïÁ 5÷™É ¾ƒïâ;ƒ¿ß ÷wCœˆkÅ >€èŸÌsÑNˆÖf&Gç #™d4Ò—ÒuÒ5!%évéjP8.µ4õ \^pGá@È¿(ï]È+–×,¿+ägå7Îo{ 2…P°¢à`ÁÈOçË/„¼³yYyÅ ï¶K#.½—¢K•óšÁ¥Vy£ò‡‹\:vé\¸üâØ ƒ o]žæÌ™Ý™C`}uªSâ[â“ñ!ˆGÍ£j ªûµÄ9.Ï7“I®øó… 7˃rèK:Yǃéiz˜^`/Ùvö20 Í3 ÌP3ÈT]¨³õSòó…Ü-‹@?×W¥ÈDY¨×€<ÃÓ<,à-2 ŸèB½ÄÈ"¹Á;<øìUv‘ý ä´ì• :@ûjLJ#ÃÝ ;/» älÈ~"» d7ÉÞ˜}²&κÙƒ²êf÷‡ì­Ù󳿄œF9AN5Èy%çÞœû gXvnv[ȉ³¯Í^ Y&ë㬠ëŠäY— k²IÖdH䆓ÿAÐ0(.„p~0%8‰íÉ’ç!ç£Üñ¹×@Î93sÎCNvÎ9 ÈÈ"Š<9/f¯Ï~¬µÙv˜ò×–?]þüĉ9õr&æ ƒ„$¶%>_ÛÏ÷üJ?n_Ù—ñW€ßâùßÁó‡ý!ˆkÅÕãº_7ŒÛCüj\/*Ñ·Qßh%d>ž‰Æ@¦y&732ç3?d>…ÌÞÌÐLÈt‰.Ë „L«h_ôDM2½2m S1óMº%¤÷¦O¦Û@ú@úHæaˆÿŽ:EÏÁÙ?Îýr®"ûïx‹ã@Ùîðk€¹¼Åûàû,üWî;· |sßÊWÖó«À7ñíüµàþsg×ÂõuÁÝáúÅ×B<2žâ:C\ÎÝ7×Ú:¾„ßàÿ:Pë@™ëT@çê'Rô¢ž×@Æè¾oèKcI'žÃÀ—²PfärŒc€ Öœ1—Û+ ¬– G@ÎÓٹٷAøoØ"¬Ù•²¯Êî É;“¯&_†ðްgØL7s‡ ö¬ÝlïƒàµàÖà0UÌZSô}Xó†ùÄä€îÓƒº ¤”¤äH ¸ü_è_©¡¯é:0mµ›}Ä<¡eAÖ±A¾)/=¤$&&V&€D×äôä80‹Íw&4çºÅ7CfYfgf7d+(ù[ z4†Ây…Ý #HÝ“Új©•©3©×!z)šÍ„hkôot 2#3¿g>‡huT6*„xs\èdt&s2½3ƒ3÷B453#ó!DÓâ¥q¸ÀOðgÀ-v 7 ¢_ã£q1ˆd¾æ@æ™hFæH_‘¹&BaïÂî…=!]#ýoj¸ØýæÖ€õ½ú"àF¸Ñî^ˆîwÇ€¼}š™þÿ·©ÂpˆVE¢HÏMïK¯ÛßµÕÁl°kìg`ÖÊ?’Ù%oÉ T–š mu¢üšÑÈ„ ÷h(h½Á´¹Rn’ú M¤‹Ô}ÉÌ3‚yÈ|¤Až•aú„í‚YQq(X_ðXá2ˆ÷Ľã>`ÍíÚEÛÝa›ÛÒì™H%"NS‚Èz1ùsÖûuuv©¬’Þ.GCÐ;h$ L„{ÃJþ¾¾ÁÝÁ° -˜wtŠ> Ò]Ïi |È>ð+™@_`¾¿ÓÿêôfóH'ùœ/å!y ÌFsÖl½F3’Y)3ä)_ ~wA^ÉüAùS!ü Üfõ{ø’]@9Æñø¾~¹ÿ (J€Ÿ$ý2à,Øò4ç µ˜ ÑúhW4üÿ»ÿ â™ñòhØÖ-À¬0'Ìy°MStž9h~fR•Và~ôÓ]ªò±Ô}•¯¥¸q‘ø2ˆ§ÄÑ(A‚nÀ$Ÿ¡-dIoÊœ†87žWë?÷ÿøï ^¯Ÿ…è©è¿èkªr´{KzwP2õíÍ™Þ gõ¢&°Fº‚}ÆŽ²?îÔ2zÜ7Ó§ þ)þ0¾n‹Ûï…è\ñ@G)%UZ\ï¶–_µh)}P/uz^kLÕwtèú‡vQ‰Ä‚sîfWüU4òø“¶lëoó×zßÖu]ÁUtÜ$pýp?Ü*ÿ½«ñ xiüÄÇâ>ñRˆêçºt“–Ð~à’®«»t´~­ÏƒoçoóÝA&Écºd³NÑm Û嘲°¾àˆ†~RS¯ÒZ åµ”žùSé¯`N˜f;H)#1˜²¦¨Ùæó‰ùämÙ(kAõMyD¾óŠjOCxUX3ì ‰GÃÇÃÁv sÂR6#Àö5½m Wk ¢z\_Y)•$üsþYÿ¸ßÜf÷ øÏü2¿ØÆ^6ƒLám&ƒdqVȽœ¢*0ÚWó·‚›ågù¹àšº®;dl¦JæÿXºï¿ëÿã×ëý>Žó<¯‹ËÊÞB"[ía„4”’PV%Dh(Y•ðA‰²i¡¤4DV”Bö–=²3¯ó<Ž÷ûûCßãq{¾î¯!ýVî;¹ý!÷‡ÜÙ¹K ýCzSú$ÄÅã0nê·ú„wàŒ«ç€hPüL<¢;ãºñ+à.Ä«â5àgùï}àšóè^Ý¢ÀÔм ˜¹æCÓÌisÜ,­¯7juÐÁÒMúÜ%Åøä!© ÓA h]½¸—yXÇQM¹‘&`.š#æcíû9w—Â4 ö“À6³Ål~ÐãŠ+Ûd“l]¢Çu'Ø·Íƒæ Ø*æ óØƒ†AU0L%sô˜þ®gA.J ãþ¨ãóQd¸i ÅÿÛ®k 󾹤3Ùn—ßä[oø‚~Èdf0X$;dÈüî¨;Ï_BúJ.H,5´>Ð;ù¸›7™ ÔåeÞ«çõÓÄÜišC{ƒ< Š@¸>XŒ†¤OÖM̃ð÷pXìK¶A0Ì8SÉÛÈ>eŸ{Þ¶3ÁÄ:KýÃ|a€–‘=R øS>“4ÈM’‘s _éG:ÌÚ^»€ŒÐ‰² èJE)<Çî™*³e„+Â…Á÷  Z­ªUÁÆgã£ñ~H•žœ¾—~º4àÒý`kØ¢ASˆž‹ºDK!·HnåÜKV»†ÿBX.¼5láëá£á_ »]A÷è.Ó´Þ/hk-¤Áì6wØ`6˜â&ú«~«G€Þ¼ÍÛ ô:MöIBÚ_vƒZmJƒt—û¤6ð”oâ+@´#êù¼÷k|°2DÿÛ^4#ÍÇ(–X”Øa¹°W"€TVª|J ±"9/ù%„>X~a…°XPt¿®ÕM t¯YöV[Ô¯CÌ\0-ôa}ôe󘹤—ôüoÏË>V‚?Ì0&³ýÝ~0GÚÊ2Ñòäý^?üÛ¾¸¿âæñƒñe¢q\ w§ë Ößã[Ð \mßÏÍ€èÑèËè+>ò¦4†ô‹éÌpÐ:ú·nùM¾7øQ¾±{Œ1eMüÃ>ÛÝîG7ÑNÛÑ~íÿ7G ir.Î×õÅ|Gð1×ù²  µ¾Ùzƒ|!³AzT÷‚ɶÛLa¹ò»Î}JJK]0Ló Èa錦È(B°T ¥A¦ð£l©+·È3 ?K^ @C-§ÐºôO-¯UAKè;ú%Ø9ös»lS[&xl}“× j1€y\³uhC}P[Ëe”Ìÿ£ïæÏ‚l”_ÐU²Gv¼§ïëk e´$ýd!°Ž÷©þsÞåuðÅýÍä–øgyÔÍt“Ý4ˆRÑ©è2dˆx´kãzßáÇùྋGÄ !>ïŒCük¼6þ܃®…k®ÛìöCü´;îCôdôvf¤?ˤ35!½!30Ó 2e*gþ8u)ˆzEoDƒ r1ñ¯àZ»'ÝBàc溗n¼HR^ŠKÉÿ/–ÿÝ·”Qò¥Ì—ÏÁ;‚ ð–º/Õò}–Ó<§0„MõÂï «SªsÖaHuK=žzÂóáŽ`Ø^æj0ì¡ »Í… ZP0(öFû]º\ûè  í¥©ôy^Ëjq=Œf"H}RŸ}FJJÝÿ?]*r·´Ð~@UÔï9¬¯k ˜Á$ºBØ<(ä‡Ä‘°cØÔêsÚ¬;ÿ¯„¨qÔ#êײ¯µ¼VÜ+®ºk 2\ùC¢Mq¾ønêØ§£&`eº˜;  ·5À^²—li0¥Í*;ôe=¦£@Ö+š©&÷HK’%W@Ëh#ÙºJ6è*žú¨Vi%¡Lí¢GäOEL‘åÀ ¾¾¯™™™8sâñøx>Xß”{i îaoüyp\× âµî€+ .Ÿ¯ï߃x™+o³)Þ—GÛé« ÏÉ“ò*dÖföÇ‚»àæû/ÁÎ6õýŸ`Ƙ:äqÝ®€{iFU~t °@ÖKd½|/è‹2W>}Ðì6ÓAºOK€‘3ò!°QêK%póÜN7Ëf•µLçkÐ¥ò¥LY£Wt3èßzJÏ‚I™˜_õ³ì¶­ö°½d×@X),\»ÊN >;ÛNµÏ€ùI—êï ÏéÚhB#m,5å0MÊÜ Î—iH^à-yPnY*Õ˜4á>Y ¼ÆK¼ Rƒ“\ž”‡äfÀÒž@j/®]·vïKõ-y©ä%(2ºÈ¥"W ü8ø_0RoeµÏj ÉïKïCx*œî„`jðuðèjýAwyÂÜcj€ÕÒš-­7jyлô&ýô«§@ZIS)ú–ô—˜) ¤èKú¬~ šWóÈbЗô5ýdŸ¼$-@n—ú:Â'ÃBp">ÑýÄ­°yó¶²ÛZú/Ý|7â[â>q+È™3E!=,3+ÓÒƒrg玄ôôôèôHïK_—®éã™ó™+àjº»ãýà‹ùºþ`8 ,ðcüÇÀE6±8ÏðÕ|ÿÄOº6î"ÄßÅcâÍŽÆGSÿS¥â±M¾ŠîƒhW&Šo€èÌç™Iž›Ù9 ÑõqøPÚWöu@j}R«R­¼/9¼Dñ%àº)×e]W ÂaA› ¤gõÎÉFÉ*I !á•°2„ÙÁ¥à±Ýb@p1<¶ƒ`IðE° Ìæ•iæ=3ÊÜÒ\ZÊH2’-÷fô¨þ7A¿IO9kN›ã O™GõNÆò€Ö_Зðµ $©á²àÕ`ßtâÖµ`Óm›mªÙêÕ‚]f§Ø÷!5#Ù;ù,¤ö§¦BÖÔŽÔ!Èj›º1Õ ²žHÕK‡T«TñTuH¸˜xåÃ<á½ì ÖÓÁ¾c_7åÀ¬4ßëy0ûÍrsÌMZB€ÜNCfA<Ð q!óo”]ƒLõÌQmÈ\Ì$3WÀÝ۟ø‹]@CyTž¹&yDA¾”ßä°îù¸<Ò_¤³Ò%áró+_© 2/gæ‚«ç«û9•ù óu ž‡`Jp*˜ ¦‘yÑŒ;ÑN²ÃÀv°Û¢ óuŽó§ék^ó²Y`v€fë4ý¤±Ü)—@ÖË© ZHn”: GµµvÓQëk]` 1) os=D3mҷÕw®¼peÚ\kèR®ÒK#Ѓú‹ž)Í~Þ–^\Ù'5ôCÐ×ô7ýL3H{ƒQ“0ǀ̗ «åEy ÂσFÁ¿Ø“X˜Èó¢Þ©­@jÍ®U³VMïKÔ.±µøoP8uÝÐÂ# 1.¬V,²lVR»R‡S ‰ƒ‰o] ø3Ì î‡°KP&,öI{‡­æ°¹l¶ƒS£1è&]®û@þ•b@æ0W¥ò½´ªPša kd•üREjŠýÅé;Ðeú§ùá¬;?è “ÃN=ùl¹°õ¦­õÁJE©,•Á”6›l›ìcA°ãÌE›¦žùÊ49.—¥øÇüÿ$¸%ÑAæg€›å–»µ ô:-Ú@ïÓª`–šÝfè|ݨû@ŠRŒ™ÀZY%%Á<¤ïj=ÐãZDË+ô' |ÄX?\=wÖÕêûn>¹^&ÀðÃý;À.¢`ý ÷†q•¨qô¤oLWL? þµ| 0W2½Ú[_×ò@S:S¼ñG|ðåèà?ºqýAn1 VËyàåið›|ß|QR ¸Ëð÷ƒ/ä?ñ¯ƒî÷ÛýU0wúþA6ò)W,ž‘ÊÀ÷þ:¿âŸâýñzˆßŸž¯¾ž Vr$!Iaú¢v}Aõ u´”Þf•>§_ƒ¶5­Í]`>4/™N`cû·=A*HÅ 8d›ÀbK[¦˜I˜ü Ïkgm ºZ~•ÃÀ5Ù&û€¼Ï›à²Ý.w¤­´–Ç@ji­¼MwyäžaøYÒ_¦ƒœ” ²èI i¥)ÁúR¾Œ/>/áÿ“ÿÝÿ¾²ÿÃíÿ8{(ÚI^–É Oj½ t¨ÖÕnÀI¿Éî=—vW!Þÿ/¿ØÏ÷Ÿ–·ùdª>g²A6Jsù4WCýä ””?Àl7«ÌvÐ::SϿŽâæ{ôG-ú°Œ‘å È>9ò´Ô–WAjÊ*ùT>•÷eÈRF³ ä{£ƒž–-z¤5{©n´+än‚¸büu<¢¢>QñX÷~«ÿͯ²H’Y.‡ä0I†hgcr^Úƒl—í²øÂÏôŸ{Ƶqc!³#³#“ ¹­rŸÏíq·ÇußËöÀwòm} %·P•È¿¾´oáË€Ô*Uó“š“½/q}‰­%¶Àuk ÝQè6°gƒÁu.klÖOÈ—ÈŸÈáëA¿ .(ûŒ-ao€`NðY0LsÓÔÜ ZT «)$+%óŠùÄŒ³@—é$Ð{LMS ¤òæ„N1ò5È2ýN§‚^¯MµÈÏò¹,î£<·CðнÛV‚=Oî>¹¶Ýn·×ë?b2sÇÙÉY %¥i2A&Ê— #èC¢æ(pšuô_Ñõü"ÿ½/¾Š¿Þ—_Ùï÷ þ'ÿ›? •!üÜ;n§«·Ð Üy·Æ]¢«ôG°û¼­öVFr?pŠ#l¿Ðÿêv ¨ ss"é.Ãd(p?¯1¬N‘Oåc­z“”3Ît2gÁÞ`Øò`o²;ínÿ7„W ˜¼¬ÓÐ>cëi­eôØì³ìÛvGsHÔÕ õ-±@wICð¥|i_ÜwÈ­ùÚýåvBt$º”ÙñŠxwtø…3ì¹]ŠjUЦrR&ƒl¡‘t·ÈõqÁŸñù}!0Å+îŠë!ùæätÊw òÜ—÷±¼ÍÀ2=ÌUw‡«Ã|L çC°9œƒð¥ààqo w…y!\TûÝbÌû¡éæ3Ï~v¥ýÂ~ AnpÀn„ uP#‰ÆaðvW‡·'ÎBrjòdKH IöMÝ©aYšU’ë“O'[BêXêTò~¸6éZë«wÀ?æŸò§¾ëîŠ[CfYÔ>j¹An»ÜûÀ/ôKüw`6Ù“¦#ÈËò¡œ·Í}χô‘ôÐô-`ß²wÙÛ ø4¸\û‘]l÷ƒ.кl[Í´-§%Ì`îÒU&‚ü#^n½"y¥ÈG:]g ‘Oä{®rDVóØÂVð¯ø´Ÿö’]i†ËŸ\.te5dzdeN€êóŠ ÁvŠÉ‚ ¥ Ñ4¼3œáéðT¢-$4q)Ñ’ƒ’}“à ëö¬'²fBê›Ôó©×!y9i’’[’qr;$—%g$?‡Ä©ð¯Än«„Â><´†`^0>vPÐÓž€`G°Ö> aå @pÂ?ÃÂé,™L'ÏCv³¬2Y¥!Onž¥Ù+!õhªJª6õ‚ëmPšùv¾9øïý·~>Ä?»î2Äë]Æ} ~”kæÊ‚»ÑÕwùÀvºÁõ[üð»ýQökÙÄtðI¸3à®w·»úàKp½¿|_ÙWÎ_ñgÁŸóêËû6^æA”ŽÂè&È”êG= ú=Ú¨|T'˜ä’ IDATº2Å22•!=/÷—ôω2…2ÙàòºS.õËø™_ÀÇ>¯ßnW<-î®l¼'¾" F·@¦a¦\æFÈÌÉŒÎ|éÇÒ]ÒÝ!s5“Îä…LÅL*s¢Z‘‰¶‚ó.íM‰¦ÇÓ î?ww¯oêÃ×æÊ¹:CÆê» ­ä^Ξ\|;×Öu×Ô7õMÀMó³ü'àóûR¾(ø™þO¶‚u³âyîGˆªE³£7!}[fyf.Ã}4ó­ÝnwƒNÑ*Z˜ÂÌø¾Äi7Õ•…¸r<°·Úçì²í]ö90·™>¦X©*å¥ èCÚH[Ãå¬ìÊŸôÿ€{ î? q¯û@ôA41š’–ðÿÛpF ‚Ñ/ðoGØÏO é÷2¤^0Sø“í_‡CœŒ}\(Åe΃ܬ=õ&ÙrJêƒvscÜXеæ³ä¸ì€/|ß  •Y¾¢ÿЗÕŒ[ÄÍ!÷«Ü2¹Ùpé®KC.u†°ràƒëÁ‹OÄ' ª ‰úB8'\~Aû 'x‚A; L'3Ȇ`"sÑ<f…ilÞsÁœ27‚.×Eú H!IrdÐ9HÖ0R¯½Ç<¡½Aëjm:^çé‡ 9®¶{d–̑Ͽü52fÞV€+éîroÕûµ‘Þ vœU› É É¾ÉW <v _…¬³î˪©ñ©ñ©~® '†C¸0œN»Ø±KÁ®·sm°¯šçÍ;`æiÓ¤’VЪÀff1d´¼!å@î“*d€¤÷’´Þ"M@jéç:´ŒÍ9(?ËrÂÛ`;Ú¢¶,Ýl~û"h}BŸëËú2¾¸¼î¸;Q·hTôèE]«!c23…@FË] ±sÍ]sˆÚÅÇ!, j€Íµ±Ý zV{›‚`^6µè4½ ô1í­½@ºÉSÒ¤ŒÔ•àÚºÁn"¨×=:ÌsÖüæ+¡£€Çä1yXC Z@°Þõr=!S :œÙ.íîq1X/Ód ÈZ@0Oé(mZOêÊà ½µ>¶“]iz‚­k·›ö`¶êqý¤³L•} å ¦¹¹[«ƒ~ ïé1Ðïtª>bë€ œá8èí¥íÁÜdªšÊ se™,RäógÁ¿É0ª‚üÀA¤MäÈ Îà |(UÁ/d§@ì‡úAà_w]Gˆ›¹Š®3Ä;ãìø4D©¨dtÒ£2ã2oCfUz}æ_ˆ4Ê„èrôOT¢o£éQ_ˆ~‰~Íüq÷xd¼¢uqWÜ^—t€Ÿè?ñãÁåqùÝNˆÏÄW⫻ǣÀ÷ðÕy¤‰4b+èq9¨ß€–65:ܼ«m@kj=ZEêJÊ>ù]vþ«Wõ*Øãæ¬9Á¹`Q°w„…Â(•8™°x.ñ@¢'…ƒÓö؇l#{Ø…ö{t2Å@Wëϲt°Ü$­ACrØÎvý‡‰ÇÇÁå¸üî:à9Æñ6P—Á´_Í7¢,ÄmÜsîYˆÅÝàfÆóÜjpŸ»ÝQp»ýAŸ©ñU"5ªx_¼V±¿‹Ÿ€B[ µ*X‚üAž ¤ª¦¥®BªXòbòõƒžAW°÷Ù⶘ö]û&ǃ¿ì`2÷Ø" ¥´ ü ¶ˆý"¨fŽî1È¿zJV6ó² (t™¡çt/h>mªE@'è;úø®·_ <$My‚ÞAÝàœˆN<{âiØ9d×g»¾Õn2L^©ÈhЖú¨öó»Yo~»Å¬0_ƒyÃ|`ƒ½j/Û?Á>ø'ýHÕÏT?ã}ÑBE7ýòÉ?$ÿ$°Åì{²º§Æ¦:A²Bòl²“Âþa?°ÖæØëÁ^4™ï!|!lÞöŒ½d¶‚®ÓoÌ 0£Ìó>¨ÓXÐEúŒurF÷€~`Æ™Á¬4kÍ0ßêg:Ì sÚÌNÊa¹ZH.KEêÙã-Nì;±¶Þ¶í®m]Áš‚¦€¹áˆDÏÄÈ>›}Ov'«WƒÝÚœj›5’u9üˆ½ö°™lw‚Yf>5#ÀÖ·õíý`f黃\ÕõšýQgë÷ Í¥µ<rŽÓœ*Êu”oü¸ñ§ñ ðÛý&? ܿïöR@!_Ï×†è‘øž¸!änÎí•ÛÜj7Õ}6:EQ1Èívmàµap©÷¥C—ÖCøb¸)˜ ¾_ê÷C\'Þ¥ ˆ‚£Áj°%mÊ^&2˜š`ß ÆýÀ3כ㠢Oi å{y´”–Ò¦ Gµ«¶Þçgº€kVƒ4”›µH¶üËvЕ:K;Ýy‰å ½µŸö½_ëka°£LYSäu= ›A’Wn„ -o ÃÉœzýóìÝ¿ïâ¾C`ý›¼Ê›àçøû}póâµñ(pªÕ;á?õcÁóSü[@?yWú€™k›˜ê~¼vû¼}À³Ù,3ß‚žÕZ$G"™¦ŸyÚ<z«Ò± sd‚¬>“êRÄK!ɆÊ8>ÙE-ò?ÐJ¦‚\’ òÈ9é)]@.È~ùøˆøTr$!Ù y5¥×­m‹‚ý2|Áp{¿íáùp_è!ü"x6øìPó€m ÒN”A ãeœ|RTòHÐgµ‹>¦©b*æ×\€nô¢x!9Àoþ¿D_ƒ)(5;Ò>ô‡Äc‰:‰[!±$œ΄àæàú ØÏìÇö+12JFƒÊfÙ"[@'ë$úƒY¤­ÀlЯôm0ï›Åf%hŽV˜<æØ/ì; ìQ{ÊžSÐ5{@ÚIg9¾‰Øo^åu©K}CrH~i(÷²¤°–’WòK xU†Ê0ð—}ìó€ëè:Ä/@œåJ¹Šÿì~rß§‰ |Ád>¥Å( x ÿí|]Ÿÿ“?â_'nŸ;q³ø`\ âqµøiˆÊÄ£<ŸÆÇÀåsE\|Å|FvÐg¤H~)+I ‡¼.€Š¼OyhÌ=ÒÈð=[Á÷ñe|üu޺Yà^uo¸Á@–/á @ÜÔµŽë€ÿÌ÷Aý ·x;îÊAfz´>ª™Ê™šÑzˆžŽ†ÇÀÝàÇøp_ø³nøsþˆAZHRJ€ÖÖ3z˜qæmStº5=ÁŸñ‹ü%ˆËÄ&N@\<¾WÕwõè{ú ¿IA¹ö;Î.€Ä•Ä™äkÊIžMÖÔÔòÔ*H-É›5 3Â×!h[í¨Ïƒ¥¿ïïý1¿ä~y_fƒîÓP>© {8ÒžÚœßÎ}@^ˆ»D£ãW!wŸÿ!½Üv×ǽqǸY\ lkû’ýOÿV–‚^4UÌ" <$UÁMv] ·4¡ø¾¨ ¢‰Ñ°h(°ƒC¬ÿ‡Ox ò ì“}`ÏÙR¶\¾p¹Øå¢·ˆ_ŽÛe’L’I ä¾TÙ#§ePˆ¹h+ŸH}à/>b)H¶Þ,½@W›,³ìN{ÆÛ4ø:hönÓÀ¤AþÔÒÌiµæ<èû:ZǼ&M¤%˜wu¯žÿ ¨ å%þ[lß&ÅÁ”1‡ÌJ‰2\öØÍAÐþú´¶3Þ¬6Ÿ<,·È# 5_®IMñ¾XïbyŠ•‡B?,Z0 ÁïvƒÝ©ìÔáԟܛܒ\ áua–†àÖঠØév¾ý ìÛ¶«í ¦‚Écþý]Wë@°3ì4›ô#m¥}A ê%ýL–Þª[ÁwâE–€n’ÿézÐ_Í×:‚B¶ƒýäS ÄÊv¹‚‘¶±­Ç~;ÖõX¶¬Úæ·Õ+ÙÊc”¡H[Y"c@‡ê4}$!Å`¨<'uÙÄAÀó:?‚ïìñÁmro¸ #éÈ]À¿ÍƒÜÏâ)ñkÀ$VsXÂ÷ŒFùq 3åª. õ}t¼¶Ö\0yL;í rXVÉn¼'ûÀ·åìMpyö•¯®lxpüG<¬,•%ò%èzY3`Úšéf4è~s¿iAÝÀù!øÂN²ÝÁÜbë˜k }µ¹.ýR§é+`¶šéf˜úfÙ ÚCëé] ýµ±¶=¦õ4È#Ò@n™LrÀ÷çù@ÚÈcò8h-½Iî·= ÏË1-þ Çh æCó†é ú’nÖ¯€E© ïsûÝqˆªG £[ Ý ýrº?dº¥ŸMwƒÜœÜùe!׿þ“ÛÒÒ53Í!ú%*U†¸Vì]=p+Ü$·âWããÉoˆ÷Æç Z­Œƒ8Û8 q³¸{ÜÜ~wÙU,‡É2SFHk²d± ÕQ u‚öÙ$ûdȧŒeHWyJÚ‚TjR ,0Åÿü_É¿q¾xW¼¢Ÿ$[~‡(Ýí;+x3ølK×Å WÛmsG nw‹Ú€´“±<¶˜}ÚÞ ÜG3ê*µ}aðÖ×rU@ÚI'é ¬c #AªIOù L=s¯iú®.ÒË ´¼æ/ò‚ïþŠ_O ô¬l–}à«ùÃ^"T¡*˜kŠ¿W"1dH¾óù¦æû rÊåý_Þ!‘“(“8 Y+³^ËZ É01:ñ“ÂQa7°«m-›v²eǃsÙ¤ÁT4j`çÚ>æ9°‘íg?SË”5Õ@çéT}ûÿcw+ãRXJ9Ëðwú:¾6ÈéKw@¸Dí²Q†‚Ö0SÍ$¸˜ºØóâ}pæøÙ¬³Ô_çóûÒàOú„ß ~º_â—€_ã?òWÁ'½ñÕ—äUùL7}^ß»Å.µgÁ~hÇÛ¯ _…ð¡°rxƒƒÜð†ýíÏL Æß@xWX.¼­ÃZáhHíMÝœz²e¯ÏÞynÈ“•'†ì²Veo…¬FYe³«Brl²WòYHhâLâmƒÁ“ Åµ Vë7ð-KÁ_ókü 'X<Á^š}yübwÉEà–¹¶îuˆWÄ+ãE u¥¾”„ø†8Oœ^fýÁÏòcü»`›¥¦;è½Ú€þ ïè«: \à/ùöàºØ½ ú–Œ”! 4WWƒVÓÛ¥Èñ|)Ô×¥-èlùŸŒ©/ƒeЄ´Ë?ɿӿãÇAT'~-Ìf Ó 38s>S´¯.ÕàW“f¸Ü4€_á×ùo@†É(™ ¼Àã<þFßÝw„ø7÷K¼ ´ªlÐzÀÿ˜Ë{@\~áK&,”BRtŒNÕù`Bs³ùØE‚×@òËRükn›Û ™s™ó™UàÔw7‚êWúµ~æ7³ÔŒ‚ð@ð{0[’‡“ó!Q(qwâ$w¥Ž¦ªAö™¬eÙä9ŸgnžMu(빬õl”Ü“,ÉÛ’e“5!놬Y²?Íz3ûcÈS5Oá<5 o³¼©¼• gRÎ39 ‡œ9;!ÿàüwäo ùŸÌçÈW!ß/9ë ÿÌümóO„|Ùùvå3wyÎ'9_AjLj~j˜qfœ™Ö•uù]=ˆÄõã½Ï‹wƒ¿×Á×õƒë¿·ƒè…¸XfHVæqÚ€ûØn¸³î¢û$¿¬_@n—§¥ÈýRJþ³ÐdioCRX'ˆ–ü;¦_òçYÒ[«ëॴªæi.wH+4¤8ØÚ¶¼}®|{¥â•¼?w‹{‚úi,äSð'}–Ï ñ“Q«h ¤ÛfZeZCúHúhîRHÏO/NÏô7¹ÒAnËÜA¹# wWn"×@úÞtt ˆ~‹¶E[!žÿ/ww|Güăâ7\^p•}¿|SßÍ¿ÚDûIgЉf¦™ æ„þ¡{AókJË‚bÞÖñ`*Ù›Í50-m'sTt·.9/—å"¨Žaò˜,“Ç‚`p8.|Â;‚ŽÁk`ï²ýƒî «Ís¤£6ÓŽ Å%)@ki¬ÅÀfÙv]‚’A a§ð‰°9„+µ!ü:l¾öwÓÝ4ÍÒózÌsÈ~úÿ–é­`ß Þ Ú‚j?²‚yØ´° Át2íí4†Û烿Áfì@»ô¢ÖC`YÌw|þ"ïð0ŒjÔ©#Ùr ô¢ó!í1{ÂAá„ðs°ÇlO;lAÛl°wØ ¶7˜ªÆó„fkzT‚4©ÒhF+š€l–¯äK¿d™ ºÒ—çÀ/v“ÜXS¦±é´à ÚKYÆp3ý)¿ü)?Â?n¡«ä^ëŽøCþ4¸Êqá¸.d>ÌäÏTù€$·€”ž‘žö¨jz€T“ÂR8OŠ_Àÿäçrüh?×W7Ímw{Áu0Œ€¼&»eèg:MÖ€89 #A7ê ÒKzÈ çäª\>á7Þ¿†ê~0Çw&ÚÉ·rüaÙ'!MŒæ€·¾”_V¿ÖEú˜•æ[{mà á׬†¯C¸.Ÿ˜A¿àd0ìE{Ân=löêÏ èq)¦•¹Óà`×À>n°-€ù,¦HŽ<(/OÐ’! yä´ò´t’—A&ËDùè@í§O€ˆägøQþg&ƒ´ä Þóº©o*€®2¹zdŒ|*@}=_ßß îÿ » ѵèj´¢¿¢åÑFˆ ºjqˆ_ŒÛÅ€[ç—ú% ñšLýI+éƒÀæ±â†qÛ¸#D÷Fm£'!žÏ×@Ü8~2~ Üon‡›þ]?Ýݾ€/êÏ+ùß@ Jq)æFSÖ–…ĺė‰ï!Ñ>Y%qQ¸/¬ ‰<¡†A_׎ÚL‘:E²‹ü;dHVÁ¬mY‚ÆA¯ ð+ËØf…NÑ9 ?üg½ù¾¼¯®¼+ížÿ­Oz >åoóy€fPªßÞwöuÀÇ^}~¹ÿÁï7Èõ÷å!>Gq~ˆßŽÆÄS ³$º7ódÎ<š¹2ó2k2›áZ—k¯æÖ…t¯ÜÓ¹õàì¤sMÏý §Ëž¹á̽`ù‡\Fùg|àˆ/â[‚Ÿï«ø-àzºnDý£[ã@ei/ÅÀ!Ç·.°˜ÇÁ½å_ñ=!>ꎹ¥­ŽÆEïƒ>«wêXÐJZS€ÖѦZÌ;æC3tƒnн )%EAËë© ÚD»š»AŠü÷{š$ìÛÓSËn±¿€£rTh Lcs¯) ÁÇaó°0$®ï 7AØ.±:1 ’¿&K%>…TÓd½Ä×,ž˜–¼’í’a2‚ÔßÉ.ÉI*Ÿœ›<©ßS‹S‹!¹2u.¹WEiö[‚ `Ä\5LŽIšâ`>2cLO0;Ì&ûØ,»Ç¼ö¤ýÍ~vŽ}ÓŽ;Ü ÷¹kçn†¨W4-Ód _ò!˜‹úÎs\Ïkh/IËE0¿›ßÍTÐÖZR>ƒ ›<æ'{ÀÌS×Îóº®{­µ7™çT¦¤"CÆ25’R)¿’T$)¡yV(Š•hJI’JfIÆ"dŒ=kÝ÷}=/zþ‡ós¾øÇ=+ûÔ-‰iªµ±žv˜b»BâÍÄÝÉlœÌMCòh2+Y‚Os‚Ñàæ¸Ý£ •U´°È/âðúÕÞÿ,žæ—•|#€ÜOñ“Áoñ›ü.ðüC~*D3£ £¦. / «@æ›0†ð¼°gXá·QVxDK¢&ш·Æã]à÷úÍþˆ3>ï_žj¾HÔK¤ç@P=( *B0ÎÝëî3ÌŽ1Àgp=ÀÖ±9ö2°µí ¶>0’$½AjÊeÒ¤HšHú”Ü*ƒ€>ÒP€^£7is0ï˜ïÌ`š“ºâ×ãé~Іóé n¾ën‡S/ž*=uöÕØßdËÿ’÷Ê]`v™¿Ìip+ÜWn ¸§ì{v¸¯í½v8q'Ý&pŸÚOì‹`§¹'Ü |ïÞ N‚[ìÞpÛÁÕ°m ØÉö5{ÿƒ ¿Õ‚47ƒ&˜›|5Q$f%NBÐ!¸=ÜN»Ýn3Ðt·­ ˜Üíú@p8ج7ÚÝàú‚>¤-´3p'—ÓT¿3Ȩ̈\í®v !¹?±!1ã’­g ˜–X–X‰ÁÁ³Ô â  ¸2‡k¦™ilFÎÓõ3ày]ž?ŠëýhðüXÿ$ОF4é*—Ó|UŸôðû¡ $! ºßì2¿ƒ½À6²5 ¸/¸=q$Ç$&n„ä®äÉ¥ì 2ÁД^¨åÁF?Gû¢CPúkÙ‘²JPð]áæÂ›Àž0ÇÌG¾¦lIúq(Ù–X’ø\Ò½í×Ðv·}ÁT0ÛÌV°Ï¸?Ý6°3LMÓÌ$s…6]cê@oÑ‹Í(ÐsäG© z­v“ó‘<,ÿQ;†ê ÐGôFmæ “cÚ‚œ–FRä™-sÀ²çÙPøUá–ÂíºpgxTGê0Áïî'÷d}õsê}È*Ⱦ2»/d½›½8ûCȳ+gçBö/Ùd¯…¬ YÏe‚ìß³?Ï^Y©M©Y|:ym²$.ŽÚÎ IDATI$¥˜<“˜A?×Öµ{­ko/;ÖÞéZëë:»`·Úõî07˜‡Ì0ÐѺQ?‰¥‘Ô®üDÉ&VóÈ é+¥ ßÊçò>hÜ4º(ê™ë32ã¡äÙ’µ¥ePöqé¢Ò•Τ³Ë^„Ì©ÌÑL)„÷d¦ež„ðépIø)d…„ Ö¸ 2\¦Hh©–7£@éyÚ Lʘ"°¿™e6Ì3¦—ùÌ3Ïì{®­`j€ýȾfç€ùÇ4E ÷êú"H®DR D%K.ùQ~Šà¿g›AõNs‹¹\_w©»RÉÔÇ©!U!eSg «sªIj¤j¦þHý ©Ó©ñ©Uœ›4ÉŽ(L|̇`e0À%Á¾así0Ÿ›Jæ70•Í>³L SÞD`î0cÌù [$[€ftàIžá1ÐÇu‚ÜúµÎÕž`O›ÇL-°l[Ì-¦i¦©m’ V”Ô¿ώ߃ð¾èùh:”.se ¤Wi»ÒñP\¥¸vI”l-9§$%R2®äf(Y]ú@IE(y¹øû’íPtsñšâ¡hCѼ¢ýPT£¸ ¸6Î)´…å  KÁS ð÷Âdá%P|mñÃÅ¿CÉé’š%­¡¸Wɘ’‡ ¨}ÑÅ“¡ø@qP<J_-«T6Ò¯¦ãt3(û¶ìdÙq(T6²ì.ˆ+Æ5} P}Ô$›%/IU€à§ ?°`{Øê¶:ØwÌh»ÌaÛÔt¢«uh¡.Òy ¿JY4šÒä {øÌãæn3 ˜Ê£LÞ¡)ÙÀQ^c:È·ò¦Ìµê4èC{h‰–é\°µlcû"èH¹Yº€F·Ç·ÇÝ |-35ó&”ÝWv²ì({¿´sÙ (™VòléPüjñ·ÅÛ¡0Yت°2æ¶(üŠÞ-¹±8ÅË?%ÇK(É@iIiåRéŸÓ;Ò;!Leªeª@æŸL˜ICÙÔ²OË>ƒÌðÌ£™G <JxâåñÑS@c:øˆgÅ_Æs .×ó‚¯ë›±ü¿Íß ~¢Ù/+ëd;@Ïj¬¯€Ýi«Ûlgû¦½Ì û®ö.û“M+r ]°Umm{ ˜òÆšÙ`.3W˜V`œÁÔ3Äô0Ý@{h+½äCyKæÜ&-¤/P×ÿI<Äu¼ œ¦"»Á/ñŸòø»üM¼ò£Œâ4pÔï£hI.²Ir d‚ú·þ®¿‚ŽÑ±z3ȲNv=(=Ò­Ò=ÓWCxkø`x?„MÂËÂ]uŒ:Bœ×ëïç¯ò=À¯e-«ÁÊ­:TûyÒ41-À.±ýÜPpoÙvî°oº!®ìIwÜM— N¸¼å&ËÁ¼b'ÛÙ`¯7ýÍ ÐÙ:TgÙg¾2ýAêoºô&í¬A/Òw´ È<™$Ô“&Òdœ< =AÈ€j©ü Ò‚K$:±—}࿌?Œç€ÿÕ¿á§i?È+Ÿñ4‹éÁå /h}­ fŽ9_Ÿ›m–™[Àm²+íç`'Úa®1˜r¦œîR{‘mvž½Åö{Ðn³ À³Û̳ ³ä/ò¬”ƒ Ùš§ù rÛeˆÜ RYD.™"Óe˜n¦¯6¹DêJCà ^”§Á½ê:ØËÁÍq5Ý— ßêv=VNÈQ9ÚÈÔпÀæš<ó1˜ûmÊ-Õ´)È4}@?].ŸÈTÐúA¿9¨ûtÈ52CÞjP“ð}}gV‚´“+xô"­¥u@~—5²$”åò%È.i+—‚<+¯Ê,²Y>yK¦éÒUnBNR¸ƒa28ˆ£p™´¡ (WË8¹(&‡¦@32\²ž·ùdŠÞ­cA«kB`æ›Eæ+0—šòæb0‹t¾Îs±imê‚ùѬ2ëAž“Wä9Ðeúž¾|Äo1›×†¾Ñÿ‘7³XÈ\æ4û¯…'rJŽ€Þ¨ýõÐíºI·‚y_Gêd0¡Ò÷A®¢­´ë/÷-}Kˆ³â\_ "‰ëÇU!ZŒ¯zù›ýàÄÇâõý­‰6Sež,‡xB<"¾âGâáñX0­LKÓ´µvÒ®5Œ.Юɓ ’i$¥#È»ò¥|ò»Ô* Ct‚Ž¥#u˜oÍ 3t‰¬–€!2M¾é"wËpˆ®ƒ¸-Äü>¿¬ô”vÒÌçÚMÇY ej@~¡%ò÷ŽÁŸòKýy 4•¾`³ÌÓÜÏ®ž»ÌZsYæÙm69eNëIÐË´ÄÜH€”Èi)Ù!«dЇ› eÀÿ÷Gð3Ä·ÅwÇ÷ 0ß™U@-ßÅw†øÒ¨Ct1Ä{âŽq+ ` ¨_ã·ømçÇq\¢çãñ›à×øÏü/@jÊíà¿ñ‹ýlˆž‹ÞAfCfOf+¤ŸIÏI¿a~˜f ¾> ™’°0̆pJøj8 ¢þÑàh „a˜Sž KÂ4D=Ãáˆ'ÅOÅ“€­láW°ýLÓ Ìlóº™f‡Yn–ƒébš™K@‡ê0 ¬`)_宦7È:i+—ƒYošu`vÙ”­A+×Òƒû>Xœ‚àvW͵û‹ýÆ®í§]´#˜ÇÌló6h …ú9Èü% @ZÉù¼þÿ² d¦L“i ²ŸAë5z-è&ýSw®ÔŸd3ð­\+o€/ôÃü [¹–ñÀíÒPΙ"¥ùWË?`ù˜øâWã¿ã­Ù’Ÿ~øÙ÷ö äv-ÐNçÅU}-ˆ~ ‰ƒ=åzYv¥¹Ç ‚ø®øÉø0/ÚGÍ]`ºê_¦°ŽuÓÜ44#@/Ò,Í3ÃÔ5u—ùˆÏATVÊ?Ài6ËDðå}¡¯ Ò•! øûùâOâ–qcˆïˆ/õ}xZ -[·XÑâsïkW­ýGíÅPMªö¬z3Ø%nû ²¦R© ±(ù}¢3$j…‰^঻{Ý»Œtçº>`ë¹®2˜¥fƒ™v¬gG€”'çãx˜) ×Ó‘ö Çå€ìJø¯ó[YÏaî0½A"É—ƒ è­:$#Ç¥W¹„ópl÷±~ÇZÂö×ÛüÛ~°þEžg&Äí}™/€xp|{Üü ÿ•ÿø5¾Ä€7~Ã/ƒøßøá¸:Dk¢s¢\ÈäÉ-Râ¶þ~;h¡VÓry.3t”ޯπ¬?dÈÙ)Û@ºÊ…ÒxÅ,y–WyxVæÈò»¬-R§•Aî–'åAH7³ûÍv(>·dwÉM-Ž‚¨&hÜ$n_Q—°nØ ÒµÒå3õ ³6ý]úGÈlÓa ˆ&D+£Î —‡CøR4fžýKwéAÐÚZ_€ŽÔ;´?Èú‹| ò+»ÙV¿Ôú=Ø&¶–Í‚D¿Äo‰í,vw»7 ¨øà0ý‚ÚÁÅÌ &cÀ–·wر`#›kƒsv¡ýLÛÖþÚT/Ój 7鳺ô/¨¯|,¯Ë« åuyhNš"Ð'är™:J‹ô{Р݀R®¢ 0H. —v½‚Cx*’ æsÄÜõOø ¿¿/…èùpI¸âÂxP|0Mvð`¨Hp\vÈ)ÐÛt€IH9©dËÕÒ¨É0²@êI^ÎRÄ~ð}{ß ü1ÿ§ÿ|yßηVÒËÀ/ „àog ¿Bü¶Ÿé×€ÿ‰ïY ñóñóþˆ ï GCÔ4:)øc~‹ß –nt¦#ø ~¸Ÿq'ßÏw†èÛèÁ¨2Ò]2oƒ~£OëÀwœ`0øüxoü2˜Í&³ÂëÃþáu êi=Ò_Šä[÷äm)¹J•É Uô”]£Gt/ÈòˆÜ ÚYk{¤¯t]¬;¥'èdíf"Ð%ú•¹Z–ÈsN k‡Ç ~*î_VçÈ\™¦§9j~W×5uÜ¢`„›Áÿ‚.Áûü3ñaò $Ú'âDMÒÁ9A¸jî.÷É ;øÜîk·ìX3ÛÌy]ê"£²DÖ‚ì¥;ÿ‰äSùä}i©·‚T”wùè-äЫe®¼ÒQGkÈ¥R_® ZP¤¡ˆ¢ßŠ‚;Ï9×l<Ã÷/BÜ-^ï€pofo¸t¾ˆ¬‡Ì>÷U¸ä·Ò›J{@x"܆PvgÙÆ²ÐÍz¸¾¶³»Ìl3żöCÛÉ^jt‰.ÛÚæØz`3¶‰½´DŽÊF`6r·d¨\ò3ùäy]©çƒžÖzrä_©®Ã!íº¸1P’]<¸dDÙqv|!(1õ8üK~­ÿ|ìÄ[!î?_ñº87> òü)v˜ýÄη8X| ‰³‰0ÙSÏ%êAbcâë ;ØëlÛL]­ •À?èGù1¹;s[f¤ëfªgÚCfdxWø„†‹Ã!ú.~1¾âò±ÄwBt4*ˆ‡CøIø}˜ é)™…™W!,*fºƒÿ;Þ¯+çS‘ åå¹d’þ(AWê`}Ìf¢“À 5-ÌVÐ×Íóè~Y,'ÁÞ£ UÀþe Í7`»¹¯m ØR{Ľ 𒛥?ÈvýPÞù„M²d¸.Ð7A^f$ýAŽé½t…Ì–gA{™§ÍC d†¼²[ÖÈ*pM]GW жja>ض¿½T.‘F2Ìý¦½y‚AýD~Jü”X É¿’_&?ƒÄʼn(1 ‚|·Áõ÷´›ãÆ‚ih¶m@V뿚 œC}þ/_ß‹ü·v¥\ |/käs,`)pZ–oA²˜ÏVK¤†4i$çÉùà»q5ýÁ'}5ß XÄWèÿßÖ_îoëó|ÆŸ„øýx]üd:dâL6ø£¾¼? :AVÉ ˆºÆwÅc ‘<ÝdrŸƒíco2}Àv±Ãì`ºšÛMcÐî:P§¶Ò õ+0•ÍA‚”ÎÒ|®§ è¹ò©Ì3Øv·]ÁL2íL+Ð󢫣«6¤© 4æV„øT<5ži—‘éñš8'®êñŸ€ïæ{ùëAîáúƒ™¯SuØ v³ý\ÒV³gÀT2…æ0CÌz9˜OÍóػѶ²]k#°Ù v7˜sµ®ÖÙ.ÇåOà*¹[†‚¼Å›¼ ñ>ÿ‡ß aë°WØÒEéÚéÃnVÖ¹ì//û„ç‚ÿÔçûßËd¦Œþ2 ÈÖô×ÎÚìã6¶%Ô ®N܉ý‰EÁ¬‘œ™\©ŸSóR‹ ø)ø6Xv«ýÄ~¶Ÿme›kêjº*`÷›¹æmЇ´­¹4©ßÊ(PwèÐeŠ< ò¹>¥ã@Þ”µ²äO9,§@v²‚E {uˆ>RNôž“JR‚gÝ(÷$%7%W9jv›`j¼QsSÍß'OÎþ-»svGHÔLôJ¬†øH44þU¹ï QÝxpÜÂ×ÂKÂún …¿AÔ1º6: Ñìhv´Â“Ñ›ÑTÈÔ ÿȤ!œ]m…°RxAXÂýшh D›Â…ÑjÈ\É\ÑwѶèwˆÅ«£éàOúœ¸7„]ÃÙáu¾’y0lñÁøhüäíÊ'o œ°'œ\V‡Èh¶‹]j7AboðIð 3ý¡œ)—)W’/$_NN‚àú j€Ûèž´€Yg6Øæ`z™OÌXÐ[õJ-ýUK{ЊêM%=²GNƒ4““¢ =å[)îc‡@æj+í ¦žVÖŸA>Ô:änY&7ûæ[ƒ62ùºø^Œ©ïì¯uˆÚEÝ =,Ý+‚’‘%ï—Ì‚puøi¸¤O1ÒdžÈÌ€ •;ãþ;Ôvµ˜s‘鮎k隃mf³,`§Ûå¦È«r·fƒ4øïtø”©<¾ÿÝÏ­¢oè WêNÝZMOÉ Ðõamr­<ª·a)]ƒÃ¿ gÿÇö\ºìÒ6—¶ô¾Ö®šãj>U†Tɯr‚á®È] Y7gÝÕ—&Û'»Cð‡Ûâ~ƒ`xÐ1è f¿ýËn‚àj×Ôµ[d‹ì~0M¾nÙΘf‰=tœîÖi ¡Š~f®™döÒú È/R )ó¥?§A*Éýä/II è0'3Aþ‘à!È`pÛ¶Ö(¼°è9ÈôÏtËÜ ê;ú®¾/øÈ{_/Œ‡x»¯á‹ÁãÛ{xf<6~âQñ¸øðãüD? âñæx;„ý›¢? Ó?sgf „׆CÂq^6Ë´ÌÙL­Œ…ô”ôšô³î•¾>ÝÒo¥—fÊ Ý9}KzdFf&ež†ð§Ìîp+„9a°:D¿Gû¢½7ˆÛÄõA6ÈvY¼,s˜VšËyÚ´Tsôa0Ãìx; ܶ²­Á 0‚§ƒ×‚û!aûCb|â¦DWp9.íÞ·Ç}è–}ÇÞn~ÓÀÔ2û†ä:‘”* É•2ä\É—2àz*£ sY'߀ÌÐò˜ÕfœyäG éüì± ìEÖÚ2°ŸÙ_m tŒÔÑ‹Á²…~+°› ®óíü ߎëB´!ú3:Ñàèºè*È\VÎä€Ͽ忂̦̊Ì9`¶›"s ÌSÝ´sŸyÔÜš­ªµAΗ¦rÈ_²D& éíCà3Túƒ4”9ò8èLݮσfi$ STç_`%{eÿsÍ\e(í[zci3ˆÚD6º,PBøMì`øRšñ0–bú²C¶‚>¦Ïë[`Òú©©¶…=i-ØS¶’­îwó`î7ƒÍp0SÍã:dœÜªO€ŽÖGtH(¹’2•©ìI_Æ€,eŸ¤@þ‘ëå£rD~-ÕÝL“ÝRÁiWä ±3±4q̳ßü Ò²^‹Y-Þñ¾vví¯k ÕzVûºÚ:ZºíîoÈjžÝ!»¤Ž&ÿH®‡àªD ¸öK÷cBs\sw¹+7ÌõµÀô0ýì= E²FŽƒ • òèz]¥+Àl2sÍRÐaz»ƒÓBmÚ[ºË½ÀDyŒ~ ^"­2…‘¼ î~×Ú5†æþSïŸs`ë;Û×mÿl´1>ïh\tNT2/gÞÏÜÒ_Ye£Ëê–€le'_@Çã*áÊ¢S`NšŒ©á#ᙪP6²l²zÐwÿ£úéoR^?ýÍ\o© ·àöùëwxŸBŒ$¥)h7¡¯nÑ:z?èùXÖsäiYî9ÛÊ6‡‚Z…×ö…ðù°qØT¯ÆÒ¤±´’«@ÿÒùúhW-§-Áü©Ì³`^Ò®f è«ÚS[ƒL“öò?Ð, Ô‚Y¯L L_sÀnó¥ýÆÖ³É¾h¯ó˜Ùf€[dχààíàd=—z&@öÛYS³¶@Ö-YY©Ù˜::R³³†¦R;R'odådQ2ÁƒÁÁгzROƒÊ8}ZsÄ7[Áµ·WÛ–`ëÚ^®9¸YnŽ[¶$8ߥÀÍ Lp‚¥‰s!±417ñ $%ú$NBòþäŒDyH¶ITL¼A bðŸÚ‘ãØlS[l+û£y 4£Ýu H;9*#@ï7u˜Ý¦¹I€.Ò-ª`›£&܃Á€ ¸~®9Èûò˜LˆoŠo†°}ô|ô¤¿IšžÞr1ÛÀNH1¯ƒYgkšê §ä´Ô™ÈÜ,õü,­&Içâ‡tH kX 2M^âf1ÜÏÅ wËW² ô#ùAƒÀoô»Á;_—Žàóhïß’»è¾—è—E!¾¡?Á0(û=]®ñq^|¬9W+h°›ÍI›75¸<¸ìSæ^3ôKÓK€,elVÒm?‰o†xn<&ž™éó2+ z<<õsV¿Ó¿A²ô%}t·æé¿ gt¤ÞZ¢×êuÀzŠ)½RÔ«@÷µÄ bƒïð¢ IDATѺ ü‚øs¿2-é—©Q2ê5ÿ‡?í·ƒ†=Ã;Â; }Iº[Y_(YVüCñ(»´¬ZÙÍÑÌá¹=¼3ü¢}Qߨ6ø=¾Ž/‚øÎx||°Šrä^.ïÊ} š;ͰÛ%v-h¤¡fƒ—ýò3èÜÿ&ØL'S×$AÏûÏÇ×÷ô56i+Ù`’æF³ìQwYÁkîQ7 lm;ËþrµÔ’ f½ùÜ|v§Ûi?€Ä•ÉvÉšè•èžì Éy‰™‰· yOâºÄ <”ü ¹R«RsR3 ëpÖ鬽ú#µ$õ ¤ÎÍ*Ÿª ÉÉŠÉRHÜš¸/±Rפ.O&!uM²ur¸¢àPÐ l`–ÙÁ´7¦˜CºYwƒnÑUº¤®dKÐò±îSÕä˜ò t´É—¤¤@µ›¶×ËÁõ·Í]WH|üLƒ vP.8 Áìà¥`‡ƒƒàʹÃî8˜ÈdÌ9 ¯é 8 üïýˆ‰ÛÄ- ^õˆe…Û¢w ìöŽúBts8*¼¢;âO¢ŸŒ[Äù5»ÄÝ!Ó$Ó!s9Dõöá$‹"¢+ ÷Šû@üLüL< ¸•ÿ1lxnÔ4ºÒ ÊÂt9(iQ²·ä ˆn‰æEC_d¯oaÏðÜpØçìj;ì>û“}LgÓÉL ~Ð:¸ ìT{³í æ_ílvtÑuò"è’ÿ·ž“Áò0h=¥Ï€Ô—å–4æ<àJyEæƒÞªwÈP`¶ÞbYÍ9œñ7Ñöh>„uÃOÃ!~7¾1~Ôw÷7úžÝ¯‹^ƒôÑÌ5™FPÖ/ýlÙtßÏT K!®Æ×Ÿñ 1ð¨¼,d¸\'OƒÑ¿è_…øl|I\QŸ¸I8¢mÑÁh Ä ãú±B ¹ Ëõ'ýÌe¦»®ÓÏ^a Ø›ìuöp\9WìX3ÂŒm¬Õµ.ȇºHƒYf&ë‹ -ÅH÷ÿ& ¦Ê,03m3Û‚¥Aõ 2o¹[ÝT !ØHð¸ÛÜÅ®ìB»Ä^ö»Ü‚ûÔ}åf9d6›• ŸÉ&94_OhsÐl=®e c¤íª<+ƒ—‡_@Ô!êõÈD9ñ%Ý>ýékÒÒÇ!==ýQz”Þ]öTé$(~¢ø¢šÿaÁæ‚ë oK^NÞ&È]’»37 ž+èUð„_e–…û@Í`½M‚ûʽà>ƒDÇäùÉë!ñSbm¢2$lb}b$k%?In‡ÔÌÔØÔͼ)y]òH^“lŸÜ ÉQÉÎÉ6Ü™\‘\‰îÁˆ 7ØgÜd÷<Ø}v“Ýæ1s› &a u'Xµ§ÌDpÜöFnvܹ˜àxp²Ög½Ÿz²ŸÌ¾.ûF(W!{o¹5$Õ%Õ ì6»Þnå)™'“AjH;4­Å²ôo]¥#AÈB¹ t¿V—7€s)ÏJˆ§ÇOÄ@Ü.nÍ€¸~Ü.þ|a|ü1öpøƒŸùxÇÏðÓ@zÓ›Þ 5´¢žîEûpð¸ÈæëíÚwA°Á- ZBʼnñôu­Ýp+ÜOö0cì6;t†ÎÔ7ÁÆÉ¸\œaë°Mx ”½UjʦC´)|2þ´¯–Óg€Ú2P ³ÛHB0ÙÝãî_ÝŸ5[(7­¸Hî 8ÃE@s0Ml_Õ[ï îïûû+æþÒø:ðé8åC<Õ¿= ²-^¨ËAgLJã_@öSÀQ :Ênˆ…£ÂSà+úEþ¨/öyÞAœŽËâ3½ïŽ7B¼É·ˆK!ì. ï‚Ìäpy¸2«ÒëÓG!½/}4½J¯/ý_é(ý³´bi”žSzaé9P6½liÙ‹PVZV±,†²'Ò³Ós¡ì“ôwéï¡ìÒÅ¥Cé×¥;K÷BiAiÍÒ~PÖ±lpz6dÞË|žùÒëÓ§@ztfRfdZf.Ï\™¿ÃÇÂâ-ñOñ)°¦©©jj@P)È *Bö’¬×²¦@°8¸5˜‰ÝÉñÉþj—웼‚‹ƒ¡A_p»–®-Øì0{=Økíu¶ØEö3LÊ`žyC^×Å`ŠÌA“f°¶ÕvÀé#W€Lf3ÆòŒ¼ÒDR’Z^«j9à †r+ð˜ÐÏû¼ë躃l_´ïƒ.R4 ¤Õ°ËN]ö÷uÆÔɯÔ¸ Æã5î‡D·`OBÖà¬Ç²‡ì]Ù‹²o…ä–ä¶ä1ö»ßÜß`[¹ ]#0ÅæŒ9&e2zÌ妑© 2Ÿ¹²¸JºÊ@ðoøÉ~PÝçø°Y¶Ë&Ð/u‰~ºK¶È÷  õ[ ZI+kc“²[bp+‚‘ÁƒpìØ±ÖÇ®€-[Gn½lT%ªåCæ®ÌàL(™]R«ÄBôOxOxDÃãâµ9n-£Šû÷»ÆÆ6 n‡«ãnÛÏ.¶ÃÀ°Û`ž×Ot1è4óœùÌÏæsèb=¤ ãô}ô=­{@kimZ]ë• åeª<²CÓ\Qò­!ÞäËÇwA¦yfb¦=ø)þ ?¤Õ°VMZ5ð¾Þ9u‡Ômµ&Ôz¥Öï(ßAÖ‘¬÷³~†Ô–TùÔþœÜn—û×­7ÈV°­Ál³‡íj°Ù¦ºÉ­®åÕ‚Šhy6Ò]jäÉNÙ ¼)/ÈF7™Å`¢L—×A–ÈR™:V! ´¹v¶1›%`›Iæv8vïñÇGÁÖíÛNnÛ6>=}™#™¹™YPÚ¹äÍ’;!î}m©(%²ü;þ ÿ"d®Î¬ ŸWÙUp•ÀÍqÙ/Áup7ºg@×è‹:ô ¹Tj‚e'Ù§@[é =²Y¾`!øBߟ“@ušÓä&ñ+è^½M¯Sß$LÈd}MßyŒ<î[Þ= ™>™s3• ¾/¾.~ä²¾-·´Üè}‡ê˜:@*5®ñ$î ºç@öìªÙ÷@²S²Nr<$®Nô nûëYaö¦² L TÔè*:bÙæ33ß*è)=«Í@·ÊrY ²K7êç`>Ò"í²XªÉ à2yW€VÕXþÿq¼Ìÿ²KöJ~NLJ<Çç/w¼ ¶Ú>gûLP_Î;/_w†ôžôæôoPš.­]ºŠ¿)®ZCñ#Åó‹@ÑóEË‹+Cñ%SJ–CióÒZ¥!Ý=}eú<ˆ>ŠÞ ßÊ3ü¢ø·øðOù7ý$àyìç)xL\+Þþfñ2èY™'@ÚI+í¶‰khÛ‚ã&ºVà.´õÌ 0¡)ÒY êýz#Èÿ±tÞ;W¾ßçœÏu]÷°·d¬Š2K4”H$*í¢DR’’’$•4„ŒddF’¬ÌlÙÛÍ}ß×u}>çûƒïÿpsÎk=fÜðæ C¼¿fú5í¯i¥Ú•ZTj*S‚á®d<’Q2s$þˆÿÿ‚CÁ_Á—`¯µåm[°…ì*{‚Zî!WÌt»Ð~ æ!m«-@ÞÑ—õmÐÍÕ {d3Ž<òAÎpYrÁˆ-` Y§KÍw è=r;HU©¢-A^¡! Áõu;ÿõ<ÚâhoØ”øûÆ¿oKš|’À\1¨ÆïydÈVvs?àø„/8×päY'SÛ¹žÛ€J”%leCÀ—ð=ý À5¾±Oƒ/à/ú …åw­r‹’ê ƒXÃû úùáÀç4ß3RæÙQ (ê‡Bô172¼ðùp,D½¢¢{£@™« •:¾!Dý£¦ÑMžŸþ,ݤ÷ò5˜av±½ô!­§7ƒÂ÷ñoCØ<<®ÓÚÞbŸ…ðlx!½ lyÛÆî[Ƕw÷ƒ®Ô*ZÌ ½Aïi*#¤&øbœö÷€Y§…Ì,Ð4¦wCôƒü%D7„¢ßÁ¿Ã`&‚|ÎzV6°àGøR¾3øký@ÿ!htKÔ4j Qý¨BÉf'3ÀT1Yæ<ØË¶€ÍsÆl7ìH{®«äšA¼s¬S¬1Ä/Å_ ñwcùñéL÷@°ÐMr­fº›À®°¥m9pÿº_ƒú 3ͳäMµúèëZÓ$@ûšÇ̰/š‡Íç`Å· ´zÛã¹Ù­Œ¾ŽfÕ•ºX—€)ln²Ó€»åE¹ QS¿×§!ú".ƒðd8- é©éÑé7@ÆÉw2¨Ã 4€ètt}Ô ÒÃaQ0¯›Bf3˜æ9ÒT:ilY+ý@šKSi äpË éûú:èyA¶ƒ,ˆºé= kµ“´II®€äúäðdH®KnLž©%¥$ê_cCÁ¿æñ÷IvÑ䜜•“ FjÉ|кÚ@Ó +t‘.™%ŸÉ<ËrNN€nÓššÍÒûõ:-ò«Áwð­h^}Ò[ðÿú¿£-‰ŠE™Ir!œÎ §BØ(jV‚pTøNº¤_M¾ ©j©j©zL&/%Ò·¦§›CtCT7jÖ—ô•| ˆˆÊG… \n §B8.=!=¢ªÑ7Ñ 3x¤“4“* HSiZU KUÐÇt€¶³Á¬6ÓÁ`Œ>:Y>ÕÏA¯¹º)§µ¿n¬uôm0…lA› ¶»ibó¼Yk˹ÞLÒïA ë÷ú>èIùA¾‡Ø’X¡XRï§H NðQ0¬ùÒ”4Y|»+¸ 2[e<ñ·gƒ #‘Q%£4$zÆ Å›› Þ[Ôv±ÕÁ~d7ØoÁ¶°wØÇÀd˜æ$˜ÚR÷‚\–cRxO~”1 ýéÈ=ÀLãgˆN‡ã‰Žžy;U6õ,HZNË/@&3ü|ÃBªçÉÛ—äÔÎ) ©2éa©‘`Ã:áÌp1ä¯ÈÛ–röåü—SÜ'ÁÛÁjˆ6GÏEAºazTúSú'‚àš»Yn7ØV¶œmîFÛÃv3Ã~b{]jv˜Y FÛêÛ ãô]r›Ì’_@Ïézùä9r8 ïʳ@'ºùGAêK+‰ƒô“ºÄJE© ÚAËu¾ö ïSô™Oƒ¥š?FÔá¥À?ɾø^Ñ{‘BørX#¬ÑÁè¿hDoF#£ñ5ŽjD :ý€ðhD´ H‡õÃ>À}üÁX0yôf8È#¾‡tŸ.Õ¹ Se¸ù ü=R…Ç?£ý>ä˜ãoÐÌ> €|NË& ò9DCý-¾:øCþEÿ4°Šsä‚Ê,¹Ì? [4­óÁÞdo¶çÀÕu-]po¹©îe0¥M]s ˜ f°yÌ)³Éìw·mggƒfú›Š`V›æG0ûÍï:Ìoúƒž»Úη=À¬6óÍRð§ýeŸÔã:®SÁĺ‹Î=bwºw xÞ]p!öi¬z¬=d¼žx4Ñb©Ø†Øÿçñ~ê?b$£Á¯õ;| ¢—ÃvÑ*‡Ãµžþn†ttãt6¤þKe¤Rœü$ù6äîÌ;—×ò3’’÷Bòx2•ŒAþ'ù'‚üÛ“óçCÞ3yÃóAþ¦üËùy|6õZj$ïH>œ| òO¾ÿ<ämÍÿ';äÌŸ”7ò®Í-¿äõË]û \ù wiî:È_‘,?€è¯h{”– LòÿÁŸö!|(šm=®wAôYtsØü3<ÁÝ µeŠLsÜ2ÿ‚U‹m ®  \y0÷™æ¦¨ÑP€ùÇì6 @I/i ’Å΀ì+°@n …¥’Té(}éáÂpQ4d¤¼ç«÷0œÇ@¤^J= éWÒÿ¦#ˆžnŽš‚ê-ÚÄ´»ÎýêVCƩľÄnÈýbv(8ª@Õ‚/@Á; ËÞ fxªÀ0Èþ*ë¡¬Ç ³yæ5™%!þRüÞx3ˆ¯ÏŒ‡xv<7~âOÄÛÇ@¢târâ$$Zd”ͨ‰ŸãŸClKl^lÄÊÄ4‡ÄžøÜÄBÈj•™È,Y.k{ÖAÈî—Õ1Ë@Öàì³–BìRlol;h'm£­@ê¿Xï|½KÞ—9Tæí2¯BñaÅw¿±Ú Câ¹ÄS‰aŸÿ*þ]ƒ®Ap£ƒÑÁ³`Kš FÁ–³U0Gtµ~ZØ”R€Ýì–B`™ZæÐÈ.Ð…òƒfƒôÒZÌjó·9æ´žÑm OšÇͽÀtæà/Þà'pçl/û4/z¢Ò‰ã°¥ÆÖ¶[»€2Ÿ¥,_ÌWñ×B4$ü<ìé=¡gCú•ð…°:¤v¥>Nï‚Ô‚Ô©¾œ”ß6¿6äoN&“’í“&»Cêžôsé' <œ>n‚hUt8úÂãa:<éédXR½ÓÏ¥Ö@zozoú ¤¶$¿M®†üÉ!ɾœšÿm~HKÖJî„Ô…TñTR5ÓÃÒ/CúÇô¼ôtˆÖG¿G• É5ªZLm[Á> öó¥YÁ!—ã¦@¬qìëàÝ!×ì%WÞ6;ÙÞæ^[Òn°À42•Mc0‹5Ô> ÝÔéE »Ô”éÀ(Æ0´¸äJ ¤Ÿ¾ 7‚|!¥%ÌÓæ7³l'ÛÞÐôŠYÀlþw“+é2! èÔ5ZF‹)9ºÔ¶R›†Íú>ëlÖHœŽw¿òœ’`§Ù)v,h?í­£€´»¶ù©4§äÉE)ò¡L•÷ÁO}Ê3å6iþ?ÂÞŸñ‡!‰öB(a±0¢?¢-Ñ6;…ÝÂÎ^’^—^ ùUó[åw€¼!ù%òkAòrjXª/œ»t®ã¹ípjÚ©ŸOm•"RD²A‹hL‹€É0•MÌnÓÄdþm0›AwêF-ºY¦ÉÐêÐ):X‚ŽÑô5ТZJóÀ\k®1A[i{ùLsÓÖ¤Ásϸ·!xÍUu (œ ò!ö|ðdÐbecñØ ˆ½{)V/Äï‹×‡øºø‚ø÷ˉMÍWÀ6°A¯ÑKZñj{º•o Ñ‚èE?¢Ÿ|%¿¢òþ>ß |­¨Qô$D_G÷Gø=~¾ÿ˜ÈX>?ÞòSÿßí] >Ó«/ðå}o Ë?,ƒžÕ“òè½MÛ€ Ëd0È Ù*ÀÒyÚ ô?óY š¯uõ ¨“>r?°YÆÉçàÄγ³ Þ$ñD¢˜ÿL Óáj[¡ 倎|æûƒ_íŽn2š…ôð‹p1Øg¶á1ˆ~¦EKÁ[_—y_>’w‚ „“ÃYá×ýU +Ë©/•@o–O´ ˆÑ|é ò¤dH; 8mh ZC¿Ñq ;ômfª§?ƒ‘ú'ÈwÒU:ƒeÓVàJ‡+S®ü éçÃ*é`%%Ûä0È:^^Í5+Í“`úš®¦5¸’f¹Ýö‚ýÙ¦A»é^=Q•轨¤Ú¤Ê¦Zùœgùÿ·Fïi--ô4PƒX ~/ù¾;°ÖßÄL`x ä¤ÄØç°ïþ.›?ÑSáƒQ>È“ú0äÉ!¹ё莨DË¢ÍÑðßG½ýG`£3¾¤_òç€u4f𢬖Íàç1×ß~„¿Ù¯?˜=ì]¦—´¸{\;w¸óîG·Üx;Î>f»‰›ã t¶®]¤?ëŸ m¤£Ü:_Szäé"/¦´°.=¤3åÐWtŠ®–ùÍ<þc&°\w7Á‚Ä ÄÞø0½Ìp#`ešü*sAšé{: ¨Â#Ü Ôò'}¤ –?A[ki½´ŠWr­>(1ðOP„Ë@f2 üc£ø}ìeH=Fúià?òƒýY —Ó¤ º-º>êò<¯È|`šßè?ÓIwùdq˜ÇFù¸‚£0øvþНôò Ù Ìå1&€åo¿Ðÿ¾›/嫃/•Š2ƒ­fçØu`j›²Æi£×i+%­å!] ¼>¼ dº,—  ¥‡l½ÛtÐ\ЃzH¨äJÙÒC¾Ý©Ô€\Ç¿€e¥ÿ×ïßÍCÂ~ÑãQWÒ_§§@¸9쎀°dX1\zXÏé­ ÏËz™òŽö£h±èö/[©Ñy¿ÀçAt)ÊŒè] ³AÏÉëÒäfí¡ƒ,’LÙr³Ü+ƒAѺLᨽ9f”öÐ^ÀT)c_|e*AªwòÙd-ˆNû*Qê³)àó!:m ß)j5ùóª ?«×•`þ3bjƒ+á.¸VÛ[ AI;9(v¡énÛ‚™cÆØ¶ÔʺŠÜ4ZC ’`§¸áîS0¿™¥æ0ÍM3ó'¸.¶ƒÍÛÈfÛ,ŽRNjËdºü RBÊJk»åqyø@þ”£ wÑT†ÔªÞ¡zg½/ónÙfe‹BÉ{Š/þ<Ë‚AHLLܨ ±Š±F±&à’.t‡Á†¶°MƒëêjºÇÁx£3@æè·:´Ž—À߬”µ ô¸Î]¯?Éw Gõws3p–|*Pä°XÙf±þªcÁ`$ý}SßldÛ%pbéÉGOv¹»b»Šƒúz´£9øk£¢QcHµO¿šž ÉªÉÆÉªÌLuI‡ÔØÔœÔxHUL•J‡T³títKHÕNµJ•€Ô¯éýéMî caÂùáÖh9øwü×~Ð~äÍé(g@þ‘#rä9™,Àœ7Isì²ÿC‹n¶Lk°]lG{/¸j®¡K‚«æÚºý`j˜Z¦èd¥?‚ò…ÿÔO_Îßàë?øþã²DfƒDü-µ€‡xŒ‡€“ì'iNC*_3‘ÏA6ÊF™âDd èd}Wß3ßLÒ± /I)¾´_é—Cºrºb:é)é%é…þ:µ<5Ò©t¹ôH×M·M§ \î ‡pA´6* ¾'9²M–È:HNÊI°¦¿ím„`eÐ/x2Ò%2²À}ì Î@bwœøYH|šœ Aó NPÜn;Æý:Èܦ/‚ùÆ|cÞWÏbO€íë¹&`ÿ6ÛÌ%âú±V™"È« 9¬'ÚÚŒ6ç@[h9- òˆÜ ×6Ñ´&AŸ—×e6È£ú„ع`z0 òÞÌkš; l;ÛV›žú>µr›åžÌÝ Æ_¨{áZp8HíJ©¼,žü‚&±§b ˜íNº#àN¹¡® ˜‹ö:“æh>­§ u8èO*:t–Ѓ …´‘vSÌÜe&€ ¤€LÓ^Út¹V×Y oèl鲕ý²èLsºù˾m„³¥Ï¾® $_MŽN®Õ¢ZE‹ûÙMps Þ(þo<€øþø?ñuk+äAP:(\÷¹f—½Ý–°·ƒÙjvšÜ^»Ð-†ØšØÌطߟ_ ±_bcÁõp·º^`¿µ“í"Ðfzƒ¾ Ô£‡Ü ”¤U€;¸ƒAÀ&ÖS|qºÑ|ä›ùR@'ßÉ7f1›-@D`¥›Þ§÷ƒ¦ô{ýlc7ß-…à]7Ì}±•Á‘XˆïŒ‰gCÐ*¸)øÜ[î wl`OÙ·À¶3×™~`Ô,57‚>aö™¿@¦ÊdY „\ä H¶\aè£ÒVÇ€Ãg4MÈSR$ƒ>à: IDATGOê>0o˜GMO²L ·Ò“>`ûÛmˆ•fß‚ü%W¤ØtÇTÏÔÃW)oxÞ'p¡Ë…ý6ƒ«åb®ä?—Üš|bÇòn‹ýAc§®Øj¶»v”}Ó>&×¶±Áþl&™—ÁÖ¶CÌ §õŒv=¯ÍÌdÐêú°.=.Ít.D|:úä˜ò ËunÓ]Ÿ×1 Ÿi ýtƒ®Ò=¼ä>sƒ ¿n²jþcEÀj5U-¶›­g[@|eìõØppKÜ6·‚ÖA»àyª»³Á *]]'°ÿØeö0j¼0lÚ&Á-¨z‡Þ¨-A3õ€ݪÓ54Ôóºt³n×Ê`¶Ê³t¥ÎÓ µƒ–ÛÆv1 Áo÷Y ¼ÉK| ¦ŠYlŽ€¼&ohe¡2Fæ‚Êú£~¦±i`‚¼´… {pC„xçØ£±ÚX‘‹ïƒDßÄC‰"™¸6‘ õ2Žg사ö+3ÿƒ¬_³ºd½ ™C3ŸËì™ 2}¦‡ŒM‰¹‰ï ~%~%~b&8dCì—XïØ‡k‹Å ěǫÄÎBP.8,ƒØúàË` Äî2ƒBàÖ‚÷ÀMw#Ý"Ùúƒ~¦TnÉïJÎ:4ó¶Ìj™…!~o¬h¬øNÜBoйr½´9KY4æ>ž¹O†ËWÀrZƒœ/ÝAšËãR¤®”“Ú`'˜æv°KÜ÷Øöy;ì2SÕt»Ì,4?‚éd·ÚÕ`Ö˜óöK,qzôA³Ç\SÒL4ãÁY—é.ÁåΗŸ»ÜN\wòÇ߀õC˜È§@³¨u•³+•¥¤”?‡M,ƒè:Ÿé³!œö ó!u9•JåAØ#l‚Ô¯ÉW’§%Åfÿ¤Šœ;ßT±@Þå)ÿ¯:EÚO_fñ5߃|*óä{Þ2Zj‚É0'ÍvÐ*ZVk¬”2ì»È~_½x÷Å!•𔾔ö¾‹¿¢âQñ¨¤«„MÒ·B:#}:­õ ƒ°,DSÃAáh`,C :VßÕ”js Ñ(qw"².fædm€dzǘY·diVYu²4Ë@ÖYŲNAæ’̧3 Cæ+2~…Œöû2r óÑŒòÕ ±8ñMb:Ä›Å*ÄjAÐ8¨Ô7Þ}à¾;Òµ_”—²R¬ŒÕwu,˜:æ{»‚Indl>¸ÊÁ0÷0§‚&Aepm‚A50Íb³ä¼~¬Ê' ü$œ.þfÛ7Ç»¾~ÎqIYЖZGë€Ì–I2˜M2@–\}{Eëå€Ìíó£Ñ —HÈrà ‘ß@Wë) !*ÕŽ®€¿è·ú$بQT7já¥èÚp¤¦[¦ª›$›yœi§Úê`ž2Í;`žÑ¢Z ü!Ò¯‡¨TT3ª ºN×èàÞapÆÿí7ƒ¾£Is#0M~g#ð+?ó3H%IÉPtžÓUo×¾ «M[S´ˆ–TRGŠ‹Ù. ©®¤+á‚­A2(²C~Ñu ÒüêL7úξ&øaѤhø‹~£ÏÊqŠૃ^Ñåèd´ Ò7†åÓÕ!ü,š}|õÿ³^÷ÿ^_ÓV Þe~Ñ7Á,5ùf?˜£f»9æz­«í@_Ôe: X(§d#pޤ? ¾†¯çËAØ8lV…ôÑôåô!HÝ™º?u/„…ãáà*ø2`Y'¿Ë:0MMÒ×&¸5¸‚îî.÷+‚åÁ ÒCúJЄ–Ы]àźt¹Ü%ÛîržÝ ÿjó˜OÌ+fø‡}w©Ô£–ïrEÎÊ!àM™* ÁñÂZðÇülÔ×÷õO@4*œ~©©é éåÀT~á HN7SÌç É“ò ПI|~¡?íÿÿ³ýÜ.Ù-çåi Wb2$[KÉÝ@œ$W?@>J€_éwûo!úTvHH *ûÀ÷öCÉ…èùèÙèÐAú¢t_Ç·fÐ’®ôWê-ù&[&߃ðÖp[¸,Ç9ïOÝé€jsT—nÒ$’a2 ÌûúöÓÔ”6‡Á´Uì=`~3ÌÇ =ô.]æUó6˜æSd¢|-w‚Œ—å 0?èf1˜ý¶œ©2KªHТzZ÷ƒL—OdÈ‹ò¨¬ºs ¯€”#ƒu`>¶ n­]e+ƒFêt7X?)šê0þæ@jUj|jpœ~-$KÛì ý´³–°LX1<ɉ)“ü‚+Á±›!x *Ýá7áØp4˜­æ YÆ™"¦ HSm¯]!¼Q„A†¥?”ç@:ÉãÒ $WJËEÖÒU*‚fiAÍi-=ep3Åi FÒ7š jŸz6|¦ªÝ´6w[ÐÃ5†ŒÏCƞĆŒU¨“ø/þ dLM<—è k2Çf…Ì­eF+3±ò >BP8Ö$xÜ1wÒ6›°‘ͳIWêjÐRzHÿ­£»tÈSÒVî-¥Å´=˜&¦¡y\ÛÝwÊN²·‚bÚ<°‡íJ»tþ¤ƒdŠR7U÷£º#¼/ýK©¶¥:@‘Œ"OùÜ1—á&CâþDñD'ˆßë{‚Á8pWÜwL–¹ÁÄÁV±³íŸ`n4ÍIлt˜6Í5Õt&hY)ªµ@†È}R ôí*¿É—ñ`z˜æk0ýL?Óì\»ÞÜ :_žÕ©@ ŠÒLuSÎÜ ÇW¨~"¶/Ú±}Ç)°dÿSù—ïÀßé ûõmˆV… ¬Ö {BjVú›ô³@SNQÂUásÑ§à ¸…öiˆîˆJEƒ¹ÍÄM]0½M9ó:ègQSL¦–ÔëAöÈA¹änyDΡ¤ õhêõÔÛÀÍÜN}  =»€ >ÁvˆºúW¢Ã ùZ_ß‚‹ /N¹ø%¤_HN¿–B¢(È\ùE¾3_ßÔÁ¾`çÙs,rcÜsø9~6žAF°$Xf©©fÖ~§µ,˜¶º) Z@ hÈí¬–ý ·ÈXù $-ëä(Hyi*Ù keެé!ý¤˜/ÍG¦?hU-¢ÏƒäÉÙf¼©l†q^à0i=í¹us'ä¾ ¦©`*ƒ¶DÿFÿ@rSê`*®”ÏMæ&ÁõL‡©M‰~ð# ýazDø©à¤ûl]÷”ë ¶¶)mê€=âÛÏÁ~hFÛ^ µµ¦Þš­eõZ]ú›%¥hŽ&5ò­ü,«!\n w€)a²5´¶5uÀòÍ}’sRä? Süfÿ­Ÿþi æe}N—vEíßx2Þ=~'$*ÇÏ%2!cvbXÆZH Êh”¨ ‰§2ú$º@ÆñÄ´Œ8™ñkÆß˜+1â&¾1^ëCßBâ‰DÇĽðññ#¿!žO@lFì“ØÃÛü,‡àr°/Xî&WÕ×ÄÕtUÀ¬5sͼ/y¬KWH…`†¥Fé‡À!/~>¤‹¦¶¥w€=eß·+Àž·+íF°«ìkæ°¹æu» ´œaž9"'å}¥2VzýÝÎ1µA i9u ›™­EÁwöÉÀDÞ÷ÓÀ÷ƒy|sßÒ7‡¨b4Ú¿ a‡ð·pøüç~<¨äÊv9ÚUKh#°)»Å†`'›¯íL°¿›æ3Ð^f˜é ¶žÍ°7Alx|`¼?Äž‹?ñâkãë 6-¶'þ/ËcíbÍÀMtÃÝ4 ²‚b´u‚§@úÈcz øDôª? Ñîht4Âöa÷°¤÷¤…»!Î §C˜V+‚0êõÉ' Œâ}Æ€õr”ýà‡ù•~DÙÑöh%D{}Â_>‹ïYÒî<ÒS;K%ЇäU¹tŸXI‚ü ãäcH²å(ðóXœã$›'y–þ Û4SVŒ¤‡|þ€o{4ªõ+ÐZM ‚89+ç€/ÎÛ`Úùv1Ø×Ìó;ˆ‘ÃrÔÿî7ø5– «‡5!ýVjxê Hébé>—.œ.ÉÏS‹Sk ¯YÞÍù·Â•W’WNAÎøË^^9ƒsfçÌ€K[/%/piNBÎñœR9)¸\úrÇ+àÊŒ+ë®lü…ù+ó×CòÍä¾äg´É;’5 •›"UÒ·§Û¥»Bx,¼&!¬6 B¸,ŒÂZ6H[ð/øOüÇ`µ€FêÁÖ¶•m:Äž=n¶;æ–B°È}æŽ@0!è´‡ $ƒ8S‚¡î°ÛÌ?¶3Ø+vŒ æ{³É,sÔ¬×ïAjJQùd¸<«óAòe…ô¹S®—†@*ñ)0žE¤Ì" ØÆJ¦ YÈBeŠ,ªQ…kA~g´,fK'™v•=}£¯þ€?æ‚ïݵ?6ú,š QßÁ_~Fô«_Ñ€pPx¤[§:§ÛBÒ&3“%!•“ÊI†Ô¾ÔéÔ.È’ÿ^r.$Mþšš©ƒ©/RE!¹,õojëU‡Hƒ6—"Räi!wƒÔ½zô ýNg€„’+W€y|Ïs@HÈ ²LŽßäÇq•“Âk ùL”¨É°êôœ¦À-qŸ»)ßÿ<±‚'Ý­®%dÔKÌè±;âÅcïCÐÓ t÷‚c}\g÷{Lóºé¦…™a¾ýBÿT¹_î• Ó¤¼Ü z@?Ö¹`zëÇú(ø)O¨Ñ/ôhi=¨UÀÌ0 L}0?˜f4Èãò„ ³WÿЛ çƒË/¿ v·ýÖ©S¬ö¢Ús¼/^¦øÒâk¡@,»gö½`sl{b[ã3â{ÁírkÜNp¥\g!xÀ=äú€ë4Zƒ¢¯è#`n3uM9°×Û–¶ hS]›>/ƒt,ÈÝROš€ÑŸu%èW:G¾b6?‚œ”‹²Ì83Ì ¦0…ùÀö£`Z›¢¦(œÚxºýé¦pࣣŒ+¥˜”³ÃL0?ƒkLvÃÁÝìj% ±;Q*QbÅbÙ±ÆÔvÜa0Û‡ `sl¶s`óÌ>ó+˜mæ”9ÚY+êk ßk3 RSöJ%k¥ž8ÐÚU›ýy† \””\2 ÿüß7©¬õQ+'ä2˜×̽æpCm+[ô‚ÎÔW“ØÅ¥$è›:NÇKÚñn;¸sîwwÜÛÙwÉNr3À.t«Ü"p›í_nCÜSî5ÖC‚_!X¼,…`c°#Ø î÷¾{\Q×È]îG÷žû\o›aƒ;í^q+!ØŒt н‰ñb±Í[û8ÖbbMc…!~8þG| Ärc'b‡Aw˜Õæ7PfÈ$™r›öÕî ´®^Ý'Çe%È}:Jû€þc²LOm£ýÁ1ÛMÐû´³6Ý«e0-ÍóØ“ö¼Ý n¶›ç&Bðið‚{‚õn¢›®„ûÐ퀠¿›l·Â廋`ËØÒf;Ør¶´ºTWê 0%0àëûоø-þÿ0Íô‚ —……[ ™È¿˜¿®Ô»rìÊv°­®®Æ¦}x)½’;“‰Ø>pçlŽË3Ë3G@šAf8Ø»Ìý¦-hC=¯×€t”|©úºÑŸAk mZDûh0=´Ž6ýLÑM  ´¶™!g¥ ˜æaSôZ]¥cA~–ò¨×¡ZrÉù)çHOJL«µÞv¡=gÏC¬h¼j¬›ÝÞØ!HìHì‰ÿñ†ñT¼>ŸÄîˆ çì'ຸê&ÜO®° Ü%wÚý ¶©-o ‚ùÇTÓ'€|+k@PQÚ\’‰¼ rJûê Ådþ’¡m¥0hi­©@^â †Ã$&{Àvµuí ú#5#õ7ëvü–〕–T¥>ðŽòàÇúïøøVªR¤¬fkw`!?Т»# ó \’yÀÍô‰vBtƒ¯á/BØ0¬¾¦¶Ýk¦©¡w˜;@o0÷šÍ óþ/Bì—š2 ¸Ãßë€TÒ†²äsÙ¨;Àd™lý¸‡4ûAÖKBçCôCØ.zR$Û¦bÊF °¾ˆ¯å«€¿™›é Qpn8’mó7å/ùLÞ”ÅÀ¿þ¼/~®_ï׃ïç2üÿ•r+ûu „Ò0¬þV—¿ ’‡üºÔe½b$ä iÖ|$3©|IÉ9*ïÉ¿ UôNæA3Ø\²OöÉP ÂÐÌõ¦›© ¹¿çË]aŸô«éGÁJ!),ûAgÉ,¹z¤í~p[]Ž+ñÇc÷ÇCüXütü4ÄŠÇ*Är!˜<´÷™-e ƒÉ6ÿkéÌ¿­ß?|Ý÷ó¼ß{ïsN¥I£ÕQJ¥Aiæ9!IÈø1f(÷̄ EæJ!•¡ 4 …::šçé {¿§çûĽÖkÝk]וg—ƒYmÛ™Ú`ëÚƒf˜a¦‰mêie­ r¬‘c ¢+åV Kcy´¯Ð `V›?Í÷ ±Ò• Gåù ¸Uî’Ñ`ëØÄ¬‚èû¨~Ôüöþßžñ RK*è% —™Af.ØÁ^OÛìrož÷$x±WèÕ3˾bZ€.Ô™z3°’,‡¸c2!¹¢ÛâÑ»þº° ² r+r ûIn}v=dŸÊ~ž}rSrósï@noöhP‚GsrC!wF®(—@n{îXö$äjçÚçZBùÊì‘ì1ȮΖdA¶Qö¢Ü‹kŸ’»’Mñ¯ÉaV Z]Ôê"çj¦jÌ­¹ªÌ«\pÚÏ`±§ìHÿ–›ÞþG©©ïÀÛh7Ø¥`Ÿ´ì èYÚ¼V^¡w lSÛÀžó°o^Ù«¿«Z["i ’e£ü ÒQ/ Õä\)­sthuZ f¯ñ´¤‚øRH-馧ÙcöÀþÖJ÷¯…íw4)j6™?O†hN|Eô?»EWFÛ@þÖyúpýø äqêr9p»r°TDÖ=f7ÛI`wÙvØiöz{=ß4Ö#`öÚív˜z®¹ämY*Þ©¿è0àtò° _ɇ2t†¾­ÿyBFHp¾«è¥üÃ00 M™9¶ÔÜd‹A»É(iÖöúxAfPºUºTÔ a¿©‰?ò“üÏó›Cú«ÌŸ™Sà/÷–{ýÁÞdoµMA¯üw+y_xs½À1Ef'èæóÈé(1HÙ,Í@>—©2´XÖÊÏ û¥–Ô©¬#ôZgå ytŸÎ×ù€Ow*mÿíîzó¼»½›!Ó:se¦7˜×Í æE°ÉɵÉ­‰’¨²ïåvæöC<$¾4VpsÝõ®ÂßB¢Æà÷ïñæ‚Ýâá­û·c./ðNóÎ3¨٠¦§Ù¨?Ë*™ºCÆé_ $”^ §K 2\®ôm-’/A?Їµ ´‡vÖ‘ =d±öL;nƒhxT‚Ü´Ü“¹× )Mâ$«ë 2ìjÛÁž ©©î©.Zç/÷߀Lß¼òªB¦b:Hÿt»_ ö9û”ýL Slš€õíV[ f’iFƒ×Z$+ÏÉ«`æ›ææáÒI,à¹î[ ŽŒcÈ(é&) RC‚<Ë|RQ/Óý@îv˜N¦ù¤ª´—ÅànçQ¦ƒ&§%5]=G„Ï„S ü´rSÞJ_.{¬l”µ)mPÚ J¿*›U¶Jk”6(-‡’Jê•T„ÒU¥«J—AÙî²:eÍ ¬{Ù]e¡ìϲJeU lmYRvJ(¹ ¤%œªtª÷©ÞPòaéªÒ­P~¬ûÝ~÷èz¡Ûžck©f LMDФ ÔípÜ pW$%]!z þ:zÂßâs¢F?}͆à£ðP¸ ‚ÁÁ6vEA Aƒ°jØ ‚ŽÁˆàÈUÍ<AAP-èa½°kØ Â£a*Ì@0(ô‚`~ðs0‚?‚£AGȽ¬ ,_›‚Ÿ!ØEÖŽÎŽšB”ü(±Ä±×’ŽÎ*p6>(J±ì,£åjйº\ÿSŸÔ9 ³ôB3LÍ×ö Ÿêóf%Øz¶†ušà?íw†Ì¾Ì²ôÃ7:¯[^cÈ×2/„týt”ŽÀïéúíÁ_àèo¿»_Í¿¼vˆ÷xCì[l[Å6{Àî6Å`º™–¦-è2]©?ºÇÝ»ŸˆrqKp/%/'ó@Z?ݺjëŒsµëÖšSëS8}võÕ Á_˜z.5òÊóþÉûÒ’^Ÿ>þPï:o0˜1f”¹ ´ƒÖ4… ’Ajk Ùò)ïÒèLIƒÞ£wè4Ðïu–< z@6èkà6°ŸF wë³:ÌV³^_+f¿ XbzßÈ7ƒ·Ô{Ã{ö=¼ïÔÞ5°­ýþy'ØÄO*$µ :UŒÎ‚ì÷Ù¿²Ç z>^Ï€¤Nr$þ ¢±a‡°ï¡àeàò~ô¶€}Ú¾k‹ÀûÂ[àm;Õ¦ìã` V~—_dh‘ž¡ÝAé­¦H12´Ÿœ'í6T &P@{@«ÉBùd„¼*/å|Äß¼” JúÝ.W’o“ë’Û@çëj]ò˜ —‘ Uä”w®»Èõ6³= =ä ¹ØÈfæ‚^,‡¥Üq÷ˆ»t§icªAî’\×Ü Üž,JÖ€e¾{ß½n7ÓxHÞ¥>Èžã*p/p7‚«ŽçŠ!Y™¬K|ߎ2ávˆÏHÞK΄¨uÜ4®v€)3•À¼bŠÍ¯`ϳwÚI¯·Å@Þ–92 t·®Ó9 NjI ôп4´igJMe0±)5ô6]¢3!ôæf°ìƒö.HÕL? ¦¹ÂÜJ¹Hι†>Ü J‘üz®:=ì•¶‹möZÓÝ^ö¤]eÿï&¤vùóüÏ Ó!J7„tœ6éà·ö‡ùÀnñöÛ à¦ê¦jAúþÔ˜ôH=˜žš~#•ƒ?Ôëäuﯢw¼;½ÁÞp°?Ú7í°mÍi¦*˜ÏÌT3ôl)Ô³€ÉhP*Oe S¨äÊÝQpòz®µóÀÍâk~רµtÝ!ù5ÙŸ”@|0.¢¦Q»è\džw‡wAøs¸<œaåà½p„³‚»ƒ;!è^œá¢pC¸ânñëQgˆŽ'ãRˆ®Šnn‚`z03˜ágá¦` „µ¢–Q;»„g‡!ú.z4šîo÷»+ú·,¶,þ™QݨdoÉîÉ~Q½¸sÜÜww23âoãE¿ç¿ì7sÊfM)ø½—ýÛJO°•ÿŸMÎ41Í@ZÉyÂ@îWîrn%Äíâóã‹!él—'Aî–‚¤2HÙ)%@ ÕÈ!·ÈÕÀ6QÆ™Ž¦„süðGHJ’LâÕçÍ#æðÏô®÷ !}(ó}fø ½^/Èë”×6ïlH¤Ö§òÁÓŸàÿþþIØqv«æ°Ùi¶ƒyÚÜ`&‚9hŠt3H™ì;@Hu½æ?p´º:M@6Êw²ä¿c?”¹RW,’VrضÈìAk Ó R'S‡S¥`šú <ážw/ûÛMcåuŽƒ[ÄnÖëëN§¸®®£Ë@òNòYò,„—G#Ã&ÞN ƒ°4Ô°"o„ ‚Õû:Øì†à´àŒ°&?Åë˜k’ë ¹ŸrïäÖ@î×ìÙͼ|Ü qפ_|¨@[ÉÖd‡[î טV@P (ÁPÜýLçYÐäu÷®› ñÁ¤0*ƒè«¨F´ âéÑíñë}mC|}ü|<¢¹ñ‚8 qŸhdü:„ £õá3O?ˆ×4iìšCÜå   îE÷œ{Ü:WîŠ!©œ\t„ä+÷«ûÜ·Æ•AÒ-¹Ø½ É–äϤ+D7EDAÐ;hô†`Q°:XÁ¸ðÅ` $¹DkÛ˜z¦>¤ªø-R×B^.sf¦;Ø'¼s¼þ5=3]™ÂÌðÌU®œž•~%—ÿ˜¿ÍLó˜¯M©™¦‰if½ÎÞez‚yÒ ±w´£²¤‘4—z ­äˆü“Hªƒ¶ÕXO^¢ µ˜<ÓÓt=¦‡µ¨Ç°ÓÍãæ~Ⱦ™½,{üg¼½é`ÃÇ¢ÉÑ4(“²å?ÉOdNìOüßü Ü^¬ƒìwÙ©Ù`&›]f9˜%f½YvºÝjwƒ×ʫ㕃=h‹í0¿˜ff,˜ÌÓ´“ÖÑà³u’Ω#å’7Ìuví@~”ƒ²äyé/@ŽÔaàF¸>îr`"cyì~3ÌôƒÃŸ‰Žœ€ÜþœË%`Í.Sdþ¿ºÿ—· 2Móºåµo±=nwBÞ·™§ò>€Ô£©Žé×À_í/öZ·ÂûŸ÷2˜¦if¦ýÒ.s›ŽÓA ÊP¹äf½Nî!¥zÈ8¹B†‚ –så,ñ2…óA{hs&hS ´˜oÍb³Tµ²Öé$ˆÛ̶·] ·6 ¯ž×Ò»¬lg#kA×êv±yÌ<v™w¾w:Ø¡Þßvxuü5Þ=àßáûþ'`³žõŠÁü¡/è °Ã¬±@Ÿ×Áz:è=¬û@§é#:ä,ùC2 J3if¬^in®«ä.ÐuŽýG7©€Þ ƒt h?i+€kÀ@Æ‚‰t·n}Ýäi²V¶Ê^05ÔlW³å#”l)Ø ©-iIWÙ#d;˜}ºÂŒ­9m RUªÈ ³°nð)¿ñ6È9_n­­Õõ8h m®¯‚Lûå/ŽÒEƒœ&‘Ä 2QBÐZO+µhE ${“òd-ÄŸÄŸÇ›!Å' î÷Ž€ëÏb>ƒSžpj5jx¸æá¦ -l™n™q®Æè…5Î*+*çWÞþxïUod>Í{*ïH¿—ªŸšÞ.ïoo˜¾æm3 L#ƒm6eu`ÇÚëÍy`zšvf?h m¡€Ô‘ºÒd«Ì—Å ½¤£´ªÒ…– 3õ f’ŽÒ~  5ç.ÑÙz1è<}Ko„×È« ûíþ‰ûïmçüÑô :Hûë¥à¥ìzodLwN€t—´—.„Ôp¿¹9øóü÷üWÀ¿Ò¿ÇïétúxÚ@&ÈIÿ “ù'ý!dþÊ,NOôÄô éÇ ½>]œ^ y#ózæu…üùI~Ç –,‡ Õ þ.øò“üuù«!35otÞõYœy'½Ò5Ò¹´ÿ¨·ÅûlÎæìA°•l¾]j4_PŽPN І \kˆŒŸI¾„xS¼$®qõ¸IÜâ¾ñ§ñ}à®u/º‡€˜ÍB`(½¸ØÎv–m@d°Œ¡)PÖœn¬›äÆ».¹'¹ ’’ƒÉp]éÊ¥Àn¼ îLר®¯ëÉ|`%Kù h$¤>ÈÛŒå_fÉ;ÀïüÀjP—ïWâ¾ñåq?ˆî>'C4&žßn*¯ò%ДŽ|.íÊ“Õ׌O[@|iœŠÏ†øÌ8Œó!º>*Œß„ð¬°u´ÂÛ­áy® ?`SXî€(‰ÒQ rórKsßBÐ.œ>Qèõh8$U’ªI ’¤YR’ï’•Ébpg¹^n8¸;Ý/®9¸*®ÐµkŸ4˜ñž–î’n•*VÚY©üN©&©žïòË_ésSÛR·Ð{Ù[¶‡©ios©i°·z m¦µ`*ƒ¾¯÷é0ã²Iv4—BIŒ–Òd¦L§@¾”‡åÿ“r!èR*ù CÌsè^Ý+%@O÷e`>¶÷Ù;!5$UžÊYc¾2_€Ç'ã#<L 6Aé¥MK+AP<Ü qat~4ruÒR Áû̾á-³ÍÞdcðÚÙ”mv’}Û>¦½íkÎó´šGA»i' ú˜Î×E µ%+¸“|É"üÿ”Ô«ôˆîSÕ\lºƒYjŽj1HWé¦]€‡øœ;Àëcï³÷CnYÐ>h ɤOÒ ”u²I6<«/éУZ¢@?Ñb}ôb3Æ o·åÍ…Ôשi~kHß•:þsþçþ}àçù'üð÷yŸûÏ€w“×ßûllØU`GÚ~v0˜Iö{?x}lÛ üÙþ«þTðÒÞ ï˜ºBè%-!i´M !Y¬MÖB<=ù ùâ·¢Ñp§Üw,³˜Ë‡àö$¯$¯BR?!I éœ4M y%~'®ápIø#0Ž)Tƒøª¤Ÿ;ìÓ¦Ìl7Ê]ãê‚;쎸|0=ÍÕf3h‘Ó¿Á-u_º• ›uŽÎ½W§ê£—Æ—ÅAùSŽƒÖý7Ù¬ÍASZ UôH{i,ç‚÷”ýŸí ÞÃÞ~o˜ÏÌfX=¨»t/ØîöRÛR^ºsª.ø¼%~2We–çõƒÌ¦Ìêô»àÕõyûÁL5ÌÅ`z˜¦6x/뵻ϲ߀٦Ÿë@~z‘nÙ(ïËB>RWƒÖÐ9zd­ô—Š ü«i7S´®z`Än7Ç€V´k€¡®­ëæc;ÐŽû«½Õ^ ÒI:Ëù`]C×È5„äûäëä/ˆ~×DÇ@Þ ôYˆnŒ Ã{!ÜV3ÿ7p-À-v'ÝNp'Ý —€T–UR|Êî!Hèû:d‚¼£W€vÑ‹ôÎ2^ž³FÇ›·€aä»O€e,¢×ê`w%j¦Œg²Lw¹ÌŒø›ø3›„׆m éï¾w%ðÿµÚ”Kê½IEND®B`‚Carla-2.4.2/resources/bitmaps/style/000077500000000000000000000000001420416754300173605ustar00rootroot00000000000000Carla-2.4.2/resources/bitmaps/style/arrow.png000066400000000000000000000004051420416754300212170ustar00rootroot00000000000000‰PNG  IHDR ÚQ†eBPLTEÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwrCêtRNS8‡,´¹!¯¸¨  •ˆux“µÙqÛ¶ pHYs””J©+GIDAT×MÈYÀÑ+\ž)dÚÿVCTŠþ; |©MaI=iPœý郔àcêl#Åμ¶±g TÎjÁÁµ×½ö¼ŠËQ ‹¾IEND®B`‚Carla-2.4.2/resources/bitmaps/style/groupbox.png000066400000000000000000000004321420416754300217320ustar00rootroot00000000000000‰PNG  IHDRb&•e†ÿ pHYs  šœÌIDATXÃíÙ!Â@…á7C!YÁÐrHð$‹¨Ár&D–{à+¸‚’ %%ÝE ð-ÉÎ’ùÔÊ÷gä’Cø"`6\LG0Ö÷”&J®:‡œ6Ëçy_À"¼£8דè¿vT¾÷4•Û„â ¾œ±üyø^Ò&`ß~A#¤Ð)4B B#¤Ð)4B B#¤Ð)4B B#¤ø£ò=£(9숒#àFiœ]Cý)ZÇ.9$ƒÕ¼W‡úgwÇñôk*&LåãIEND®B`‚Carla-2.4.2/resources/cursors/000077500000000000000000000000001420416754300162615ustar00rootroot00000000000000Carla-2.4.2/resources/cursors/cut_black.png000066400000000000000000000015371420416754300207240ustar00rootroot00000000000000‰PNG  IHDRJ~õsgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDª#2 pHYsÔÀÔÀ‘mtIMEâ 0–°-IDAT8ËÔ]H“Qðçœ×9Ûz¥æBtLÇrl1’°6„Ô(*¬ˆ¬´/ÁaÑ B¡/FxQAH]ÝÔE.0‚‚(à ,/ŒŒ\Œ…ÐZ1&},\5{÷žótñ6]ä>Îõóãùsžç"oŸÑ‰ÏÈ@…¬Þ{À· @° £g41Ëċ̌Šé‡Úö®¡fŠMt‰?—òzRµ(ä%‘ŽŠ€€€º©k}Iå!³[êŸ+°4záRb=ªrfé½,¤ÒDë¹ß„ê5þN}8 Õq÷ŸÍ¨ÉJHë\7©¼@T‰ýÞï»PÌBP;Ùa ,À¢ä¶û‘6¾|Q‚€À̷ΊÑL"¤ŸÛùŠl„&}ý5>ã;2Êu/ý‡yå¢óG@•ÔsŸ£À+„°UãcÇY5’ÿú(Á±.|Ô1ÒôØq—J ·¾]döÌù“4Š¿œÅe!Mƒ •§+ ÙÊ–›]Ôo@RŠIf(Óœýž½&1G[z,ek¨ôÓ­ç–ŽÂÌ?åóÑUÜ€MɃƒýç_-•O¡­³{îLµr]ÖkF@‚%Üvoj“P‚TÿÔßÉYŸ¥Âø²¯»ÝÖÆµ¸‘­};ÜÍl9öXÙÆß›=WÄèNŒá>^ø| Q%×{W‡ŽñrnöE\ù‰ Û†»m¯ “N³•ü-@°ê[c¢Ä8&þBà6½øºY%tEXtdate:create2018-10-01T12:08:48+05:00fÊw~%tEXtdate:modify2018-10-01T12:08:48+05:00—ÏÂtEXtSoftwarewww.inkscape.org›î<IEND®B`‚Carla-2.4.2/resources/cursors/cut_white.png000066400000000000000000000025511420416754300207650ustar00rootroot00000000000000‰PNG  IHDRàw=øgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYsÄÄ•+tIMEâ 1á·,˜3IDATHÇ­Õ[LUàÿ?gv˜]w³Üv \·l j)Qƒ"µ(^*ABh*J¬¶â"FMc &Æ1¦‰±A‰}1nÞ̈ˆ:BHŒ,IIOhÚJ¤, ü°Ñà'„úDñ¾dUõa[[&оÞÖVÏ÷N×Ò’Ç͘7À6|°Ž¬ý)$ètñi………i££KE±p—«¼Úã™5¹Ý7ùÉ“1òÍ65 |QYùíµùùß:›0¾©D[ŽRj!’”Gˆ1K§Kxáøñ·?«­ý²Ó绪«kàœà^ï¯~—«óœ,¿X,Iˆ"à½\„ÕÚ®H^Ÿb•åü2§ã›¶¶ Jii÷ûǹ¦ùƒcc}MÉÉŽ’ô`?íõ^½ÞÐШÎÍ ‡æç‡~2Ÿ9¶«÷ö6"½þ‘ÔììJÇôt_ûÒÒpO^^C§KIÜrL·ˆ„ ¥ò¾°°¤LD"#=ŒÍ ý. ˜4-VÆœ%tEXtdate:create2018-10-01T12:08:49+05:00À½|Ê%tEXtdate:modify2018-10-01T12:08:49+05:00±àÄvtEXtSoftwarewww.inkscape.org›î<IEND®B`‚Carla-2.4.2/resources/cursors/src/000077500000000000000000000000001420416754300170505ustar00rootroot00000000000000Carla-2.4.2/resources/cursors/src/cut.svg000066400000000000000000000157731420416754300204010ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/cursors/src/zoom-area.svg000066400000000000000000000175421420416754300214740ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/cursors/src/zoom-in.svg000066400000000000000000000202101420416754300211540ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/cursors/src/zoom-out.svg000066400000000000000000000167151420416754300213740ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/cursors/src/zoom.svg000066400000000000000000000146271420416754300205670ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/cursors/update-pixmaps.sh000077500000000000000000000023011420416754300215550ustar00rootroot00000000000000#!/bin/sh svgfiles="src/zoom-area.svg src/zoom.svg src/zoom-in.svg src/zoom-out.svg src/cut.svg" filter=Gaussian for svgfile in ${svgfiles} ; do filename=${svgfile/%.svg/} # Imagemagick with rsvg support convert -background none -density 1200 \ -define filter:blur=0.75 -filter ${filter} -resize 24x24 \ "${filename}.svg" "${filename}_black.png" convert -background none \ -resize 384x384 \ -channel red -negate \ -channel green -negate \ -channel blue -negate \ -define filter:blur=0.75 -filter ${filter} -resize 24x24 \ "${filename}.svg" "${filename}_white.png" # Imagemagick without rsvg support #rsvg-convert -w 24 -h 24 "${filename}.svg" "${filename}-black-hd.png" #convert \ # -channel red -negate \ # -channel green -negate \ # -channel blue -negate "${filename}-black-hd.png" "${filename}-white-hd.png" #convert -filter Sinc -background none -density 1200 -resize 24x24 "${filename}-black-hd.png" "${filename}-black.png" #convert -filter Sinc -background none -density 1200 -resize 24x24 "${filename}-white-hd.png" "${filename}-white.png" mv -f "${filename}_black.png" "${filename}_white.png" ./ done Carla-2.4.2/resources/cursors/zoom-area_black.png000066400000000000000000000015621420416754300220210ustar00rootroot00000000000000‰PNG  IHDRJ~õsgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDª#2 pHYsÔÀÔÀ‘mtIMEâ ,‚±@A@IDAT8Ë’MHTQÇÿ÷½7ïcÆÉ>^é¡HEÜE„••Òb†ÁnÂ6(AàÐ&¡M(HBm²¦(R“˜Å,#QyŽÉ Ídœ¹3Î;mRßm¦s8p¹çþîÿœ{.#@Ë6%ê–*,› T•Ôcò$Ò€=!Aûu¾7ø±™+Žó (¼-Òÿ¦r û¾”mê ¾?wõU˼˲'r„o¸ú)!²]f^ñš}ƒ¹FòæpO®±oÐkšä"{©K\i™—ÌÊô²bõߨïÙ“–Ìæ8W–Ë!9JÊ3ÀeÁ÷ŠÏåQ) ‡¥€–Z…N¤DÈÙÚ6}/-^X¯©ÉÑùƒQžÁ®&l.ni¡@B©K¹óõ©„òßTw¶î¦å°Î¿{ŒL\ÕyÿÛ’ 7ÔžÖq·?øÁ㎻»/^û—‚H@N€^:y&õl3ÖW¡åÀ¨¨J*|Âw²vÍD èÜmãhħð}¿±áôX[d¸8í“fêÁ¯OŽ_Óg yrà5ð(ðPu>¸¢®yN-ÌÊ p!K[ fG–Ë#beÞhÃ×?_ž£oTø±5A¹ ~’FeüôýÇÞäáßÔDwÞ {÷´»»·«W@°Åv ;@òb‡1ë?!_ó©GŸv"Å5XÞ(@j‹Uµ1¾-v ŰpöÝÓ!}ÆÝY ¥lSŘòν mÔ³’`–/Ñœ•Œ¨8ýl$o`ñg)%tEXtdate:create2018-10-01T12:08:44+05:00¡j %tEXtdate:modify2018-10-01T12:08:44+05:00Ð7¥¶tEXtSoftwarewww.inkscape.org›î<IEND®B`‚Carla-2.4.2/resources/cursors/zoom-area_white.png000066400000000000000000000026651420416754300220720ustar00rootroot00000000000000‰PNG  IHDRàw=øgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYsÄÄ•+tIMEâ -õ¶p×IDATHÇ–]l“UÇŸç9=/]ÙG[¤ÉÆË>XŰ(ŒÊØ…L0É&\€B@>âL;È.Œ‰\,² b–ì‚ða00Iˆ(KøºAm©•2ÚuéÚµtãmÏ9^t˜­Ãñ$'ÿ¼ÉyßßùŸçüO^` is5«UŸÏ˜¥Læ”"£ %cZTˆÔý¾¾àoéôÝ4€5Öt0iÚ+Ú´io¬hkûpÓ¢Eåo3¦4¥r„@£³3puýúïŽE£âb:íOˆ±VkÙü¶¶›/®¨¹pÁ{Þíîè ‡ÃJÉÑŸG]/Îkn~ϵ|yåÊöö²¾>ÚûïÀØ+p8>H¥Bñ3g.p8v,(*ZÀ-À€PD -Ðt}çÂsç.ŸN¥B}6ÛÚ÷)5äû¹AB6Æ”æv_èL¥~ùãÔ©éÁÁ VZú) øF¨aµÆÆF#ÿùw·»ãcj’iŒS¤”$¥Âáð@ÿ=±téb³±.)“[„ˆ‡k&»¿gÏ;<d>ìÈñ¦¬(PJ€RÌ™óUFÊþæPè¼ápÜp'“]"«=bî\ÑŒX(”2P)‘sÛG8xþÑëÝbòx67åç³Dâ¶Pª‰ÛÂn/æÏæ&¯w õÚ‹<+ ••ßd¤ì?˜L†Å”)U<íJÛí¥¼¯/œv:D,ÿ/€žoDˆøý&Ÿo×~]_ÅC¡#Mº¾–‡BGšfÌXÅ}¾]ûýþF†8 ÙP.^@$ € ëÅy……å¦ÖÖƒDV1ÿ(‘µd¸2f¹a÷i»½‚—•é–ìúHŽKp8R©PììÙK'u}ÇB»ýu 10ÀG(b³ÙœæY³¶½ÙÑqùûlÖ­/&!R÷;;Wëêœ+&r»M×L¦²IFœ:Õ6s÷îšÚÚÚŠW¯\ñ^”2Ñ5ÞqBÎ+¹Ý^U×Þ¾ñ£êêòÆÔ¤ìü±ßQ*CR2¼~ýïîúú¯Çã7Z„ ( J=wë!ÎÜbÑD–Òl2s…G"€,^½ºÊyèЊe--¿þØÚúÓDÓL¯e2‘‡R&¥}µ0ÌÞ;ã¢)¼ à­%Û¶}q4»—ˆFüÓÝí¹ãríýØlž§þ×ÈÕœ±¢"n³-?ÐÛûà±”i)åSñèQÀërí!P 'Él@)R&$bÆ÷ôé“©9MŸ^2ûäÉMŸTU­zWÓJKˆò 'ê`È6 r^^R]½wkOOÀ#¥!”’JJCD"]¾eË>ßž—÷ÚL¢BzYÙìÔ—,Ù7&¤¦fÿv“©bÆK²‚ÌÓ]®Ï¶öôî‡<~üçÍüüÚuìÁð ++FPW»KÙB7Êm?¬—Œ¾É{½¬@ùWs}—&Þî™õæ@`EˆøÌsà}¶YßslAT0PâÀ° te§îvæ±…í…0ªì¢õïàe¨`Bôƒ \ùpÌ#*û~£¬œ ƒ±ñpjÙ ½4“öÏõ<;zvÚ¹X‰ÑIàÉù’Þ£(ý±œÈŒ. +0¢¸»F€Tì^;´nÕˆµ8âÝ·]wñ ¥Ĺ¯ÿ.H ##™ª¢E9yÿ©ã—+çIÎ WܤuOõüzëàOTWª©„Ì; õ?¡Ò>3ìJ鑯=XÅ]…t4šªqÌ\á nåtdâ‘+ ©l@3ítq'éኗ5%@S=ßü%C{œûüvöLÞïP0%tEXtdate:create2018-10-01T12:08:46+05:006õ #%tEXtdate:modify2018-10-01T12:08:46+05:00G¨´ŸtEXtSoftwarewww.inkscape.org›î<IEND®B`‚Carla-2.4.2/resources/cursors/zoom-in_white.png000066400000000000000000000026551420416754300215670ustar00rootroot00000000000000‰PNG  IHDRàw=øgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYsÄÄ•+tIMEâ /¸ûwIDATHÇ–lSUÇ¿çÞ÷^ÛÙýè [&›…102„ ,Ju,& €É£˜š h aÒˆ!1òÇ”˜È¢&ÊA qºùC~ ˜6:d[XG÷FÛµ½÷øG§AhKÆINnòrßý¼ï9ï{r °¬ç¬’ß) ª•Jz˜YŒGƒ@DZJ+¢TìÆðpïÅTêj PàlÛ–5Ó*+{aykë†w.œþ’”l̹A)J†BÝíëÖþ2Q'S©® ²JJªç´¶®wÑ¢šú':‡úúúâÌúÑãIÀç«tíÝûj`éÒY+ÚÚÖ릦H8íúÙ¿¨¨Xóz,v+zôèOßTT¼?¯¸xžI䀀0a¯‚È)Š‹çY>ßó;õ],vkØãYû ó¸î‡R(•ôHÉV0x"‹ýr9íL1'4 ‰ÈýÖ¤I‹7¹ß4˜:½’ŒF¾ ï’J¥<È‚Y €¹¯¯/>2Ò¥€1€4¼Þ®p¸åS·{FæyÑèŸéÛ·ÃñLU´È02 ƒY9 ’¨èm¯w¾Ë²*38\®Š€Ãñ²ú=Î7²&Gñ†/ìÙ0óUyK»Ì¹f:S~š Ò¹4üôÄ”é8ã$S|ÕÍ>WY“ì¢Áå®äd×]u«·RÈ9B5¦Žà" ^ZŒV½K¥~Ÿ€LÇ·Õ´=€­ìËÝn$ ç×üt†uèØ·¹û‰RuXgÀUNð´¶€H€/@ñB0j*ì¨nÁ†`@çÒŽmÕÝÿ7Á*gsÀÙu1î4Ó¼K?>yqÑZm”åÉgÀÃË4^£ªý4NW'W• Èðö^€ yõ#[½œE,a. ß=uãõ•O¨˜KÂçÄHnúI:%Ü3ÓÌïƒu»T¸&)®žÚgÏ—;·AˆË-HkH©Ž'? úO„@¿ºe­ðHç,L6!C¶jA’ï«W…NHØ8÷üÉŒU¹š/¢[ü’,™•§ù ź €Ev-H‡Þˆÿ;IÈØª%tEXtdate:create2018-10-01T12:08:47+05:00‚—%tEXtdate:modify2018-10-01T12:08:47+05:00áß¿+tEXtSoftwarewww.inkscape.org›î<IEND®B`‚Carla-2.4.2/resources/cursors/zoom-out_white.png000066400000000000000000000025341420416754300217640ustar00rootroot00000000000000‰PNG  IHDRàw=øgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYsÄÄ•+tIMEâ 0–°&IDATHÇ–_lÓUÇ¿çÜþ~ëæþµ–%›csqCêaT·½0†AL6õŒÑ˜€ÒH41ò°HHL fa†ÈƒAp†„ˆnYxÙÀéÀmEF…Ž_ ]×öÞãC‡i¶v'9/÷wîùÜó7?lûq»´Ô·B©‚­a@0_Dd”²ÃZÇ®LM]H&/% ÉfÀeÛÙK–<ÙÑÓóÚÖÕ«—=«”Ø€H.@К£g6oþò‹pX÷%“#I@g”–Ö¬èéÙòÆš5µ-'OœƒÓ"f¾{bø|•ùû÷?ï_·®aCoïÓÙžpœ‘_‘ýE@EE×K±Ø¸sìØ÷_UTì\UR²Ê"r3 æ)‘›KJVÙ>ß[O?~êëXl|ÊãyùE@±ÈlÜs”µNx”;89‹ýxÑq†“"I#bŒˆÎPcD’Æq†ŽóÃoÀ‰~¥$Oë¤ ˆKÄ0  §#‘ Ì€"bœa*HçYkÇù#uíZýtúÌð‚€{—E4DR³Î‹_]´huŸa:›7Ž‹DŽˆ¤ ¢s¦= SeeOåò)s±ºwªu$Y^þήhôÌ}Þ`pëÖùxyù{ïÎ =?êÿú¿ )¹ b´HäH$r é¾Ï¬@†È¥ˆÔœïÙ…‰ØŸ¯2¿¸¸ÎX”‘9]$P°àõÖ[55¾‚t°Y{JìÛ×á/-}n…×Û`§_ÈŠHe(+"—òxêÜ^oóʽ{×ûµÆŒRvxÁi»200z¦½½qÃÁƒÌ€«ßåªÉ1ÉD‹{ªwíjikk«}âôéá>c¢W±@;‘e5X^oS{oï–×››—µ(%yiûìwDRlŒ¢³gÿžèìüì°ãüÒ­õx@dÎÖ#@Á²­‚_#sÁÒôdæC€©Ü´©©ñÀŽÖî;tèÔ_ÀÌÐ;cý©Tèš1wŒÌ_­ @Q¶ý3W™Ë¬¢¢gÖnßþñç·oÿ ‡ÇnNL ]ðûw¿év/÷11@ÿí"äZRÙ•(0—XOû‡áðXȘ¤1fF_¿>:ì÷ïÉ€0D î‘,€ˆ†1Qܺß½ˆY\^^UôèÖ·›š^XoÛK«˜ ™ˆ4‚Ù°AdY˪š›wo›œ2&¡EŒ“СÐÕË­­{wä篬f.懀¹ˆÝîFßÚµ{²BZZ>ØárÕ>úP€4„g!Ë}~ÿûÛ&'G/eBnÜøý\aaÛ+XƒÌy00æ®I$Æ&¿éëê:Ü GDR ±,W>«‡Ž W$¡ÐÈàÔÔ•‹7~´Ó²êê(×ïÆƒƒùf^RévW¯!bÓúŸÑ­£Ez Šª%tEXtdate:create2018-10-01T12:08:48+05:00fÊw~%tEXtdate:modify2018-10-01T12:08:48+05:00—ÏÂtEXtSoftwarewww.inkscape.org›î<IEND®B`‚Carla-2.4.2/resources/cursors/zoom_black.png000066400000000000000000000014101420416754300211030ustar00rootroot00000000000000‰PNG  IHDRJ~õsgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDª#2 pHYsÔÀÔÀ‘mtIMEâ -õ¶p×ÖIDAT8˵’MHTQÇÿ÷¾ïžB‚Ž3å<¡Àbp#.$Ʋ…´ q'´Éng©Ð.Á… *$µD ! $­"›…6ÒS›4j‚(úæÍ{§UrïÓÛtÎîœû»çãV±e·y¿&dŒSýq|]_Ã9 &TXGO3ÝÒž!½Áðº²oæn/âBŒ«Å–L÷“þ™Î-->_v&{€‰_úg"á3·/æø)²É’ÜöSC#1×í%ÄV÷k<£sKuq†sÉÏT7½íÕP¥–h!By4€€P!€ä08Ê+/ à¿TPð9¸ü„€ `’×Þ²Sj‚ AX°K÷³ŽáÕž $­5¾Þ•ì:¶QifÖ}I½k}¶ߌúÚð,ðöù˜)/Ò0OíöÂ𦾠Eº\3#À,>ܽwP-IĪbŸ¼n{µòâ;åVùK b¤E.É¢*ïÑèTüwâÈÉ- I§§ëýÖÏÁ;‡ „‰+Èu:^èurÿ!‚ƥĆŒT®Á‚diªx7Q$ùµð²âñ1€øÎãù÷ã‰<Ì3}7Ùß*É\,?)5³ ÀBg/í«w?*ßþf`ö8Žck!%tEXtdate:create2018-10-01T12:08:45+05:00¾%tEXtdate:modify2018-10-01T12:08:45+05:00v@®tEXtSoftwarewww.inkscape.org›î<IEND®B`‚Carla-2.4.2/resources/cursors/zoom_white.png000066400000000000000000000023701420416754300211550ustar00rootroot00000000000000‰PNG  IHDRàw=øgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYsÄÄ•+tIMEâ .l¿!mÂIDATHǽ–OH\WÆÏ9÷½—qꟙ)1Úgü“RM –H‰ã4Æš”H!¶]daÓB$)Ýd•¦%l²ª颤. i%Ø–†&8„ÖUšjØŽ3V–'ϘÑ̼{O϶VgF´ÐwùîýÝï|<`/>ŸÙ „·JÊ´Ÿ™ €ac! ¢°¤LM-,Ä~Îdîg$p6;h†±Ç(-}åðàà;ï8Pýšl0ç H‰éH$zëøñÏ?³,9’ÉLfdv€ÏWÕ08Øó^ssMëððÄ×áðH"‘XfVGÓ,/¸páõP{{Ý‘¡¡u옷íÉ»ýFeeÝo¦RÓöµkß|QVvº±¤¤QGô€Ø D•”4¦ùþþë׿û2•š^ðûßz@ójßëDR¦ýB°GR©Û¿ØöD†ÙQÌJ1Ë5RŠÙQ¶=ž¶íî…Ã7F…àRfü§ˆYs"‘X^\œ”0;Y:æÕu ¶ýÈ™™‰/»EùÚ?›%0;À,óùY"¬ú6+ÚÔñëÿ @ÔQäÝðon@$€`šåÅŵ€{ÀÆÍ¸º. xQ¯ª2½îýHå¸céóç‡|¾ƒ @(" ÷ù—Üw¿¿Ö÷õõu†¤„gBV>€&ej*‰Þêè¨?20@k£šV•c’wîôWž9ÓÚÖÖVóòÍ›#J=y y>'Ôõ:=hêê9 V· Á;\ö=Ì)ExçÎoñîî+¶ýã'RN¯°æu©‡t½^÷zÍz"ïnw2s BUÞÕµ¿îҥ΃ýý·¿½|ùû_ÓãKK±QÇIÎ(µ¤xc´Ì–?ëEô¼^TôjKoïÅO-ëÑ¢eÅ~ÇÇï†Bg{=ž½&QàßY¹B*»•è~ûÇ–K*•QJ=“³³Ñû¡Ð¹5fÜê ¹‘¢Ô…èÌ imý蔦ռ°-€ ¡UÈ^3:wrn.:±2?ÿp¬°°íím‡³¥žªt:ûj¤»ûJ2Èì(d]×<ˆ$¶ÝA®Næç'Ç,kêÞÑ£Oëzm-æúÝØJ!=GD¥åOe3"Š••ØORþýèliˆáfÞV%tEXtdate:create2018-10-01T12:08:46+05:006õ #%tEXtdate:modify2018-10-01T12:08:46+05:00G¨´ŸtEXtSoftwarewww.inkscape.org›î<IEND®B`‚Carla-2.4.2/resources/fonts/000077500000000000000000000000001420416754300157125ustar00rootroot00000000000000Carla-2.4.2/resources/fonts/uranium.ttf000066400000000000000000001073641420416754300201240ustar00rootroot00000000000000@ÀOS/2UsaèVPCLTBëµ²Ž@6cmap¼r̦u8¸cvt !aÌPfpgmƒ3ÂO<glyf§—e¤gXhdmx(ð½v} HheadÑðvŽx6hhea ŽÊް$hmtx³vQokernÿJÿé|ð®loca-5Ljümaxp(ŽÔ nameÒ?57 .postpnhs7prepƒìþ8h9&B!j ²”Ýú!cx¢ Òó B! j   ² ” Ý ú Copyright by dustBUST Fonts 2001.Copyright by dustBUST Fonts 2001.UraniumUraniumRegularRegularUraniumUraniumdustBUST UraniumdustBUST UraniumVersion 1.0Version 1.0UraniumUranium@,vE °%E#ah#h`D- ,ÈÈ,ÔXXZ]@ ¸ÿ…EhDEhDEhDEhDEhD³F+³F+±EhD±EhDQ9LV@ @ Fv/7?@@Fv/7/@         Fv/7?@         Fv/7?@@Fv/7?@         Fv/7?@@Fv/7/>à?Ì@fA>BBÆC²D.D¨EE¤FDFàGÈH®InJ.K,K,LLÄM†N"NüOÔOÔOÔPÌQÄR˜SlT~UvV~WXYYÖZæ[b[Ü\6\Ø\Ø]t^\_B``ÂaÀaÀb–cXdd¶efhfhgXŠQ  èèèèèèèèèèèèèèèèèèèèèèèèèèèèè,Xèèèè,¼¼è¼,¼,Xèèèèèèèèè,,¼¼¼èÜèèèèèèèèèèè@èèèèèèèèè@èèèôXôèè,èèèèèèèèèèè@èèèèèèèèè@èèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèè@èèèèèèèèèèèèèèèèèèèèèèèèèèèè@èèèèèèèèèèèèèèèèèèèèèèÿœ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a£„…½–膎‹©¤Šƒ“òóˆÞñžªõôö¢­ÉÇ®bcdËeÈÊÏÌÍÎéfÓÐѯgð‘ÖÔÕhëí‰jikmln oqprsutvwêxzy{}|¸¡~€ìîº overscoremu1middotääÈß!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿÔ~¬ÿɼ "ÿÿ ¡®É¼ "ÿÿÌâ„„„„ÿÿ!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ¯µ-·ª„C4ÿëF4ÿÛFJÿ0Fjÿ0L4þ?L7þ#LTÿ.LaÿæP7ÿÛTJÿKTjÿKc4ÿëf4ÿÛfJÿ0fjÿ0l4þ?l7þ#lTÿ.laÿæp7ÿÛr4ÿËrJÿ rjÿ t4þìt7ÿ#tTÿ>                                                                                                                                                                                                        ·ŽMºŽMMAPMACR@ ÿLÿ8dLÈ€  ` uUranium ÿÿÿÿ7ÿÿþURAR00<¶ôJ_<õ¶€9¶€9ÿ8ÜLLÿ8d@QÜ@ iÊCarla-2.4.2/resources/ico/000077500000000000000000000000001420416754300153335ustar00rootroot00000000000000Carla-2.4.2/resources/ico/carla-control.icns000066400000000000000000003425561420416754300207700ustar00rootroot00000000000000icnsÅnis32Žÿ>€27€:98€:>ÿÿ0€7€<0;ÿÿ0¿ÅvMXmiG=9;ÿÿ0$6;;=:<==5;ÿÿ;+./6€9 88986>ÿÿ8%((36 :;53<ÿÿ0!5‚:6> ;ÿÿ0ÇÑx@Pa]L<<6;ÿÿCÎo¹6OPKF=;';ÿÿ0•ÁVJQef@;6$;ÿÿ0€ 8>>?=;774<ÿÿ>‰2>ŽÿŽÿ>2116€98899:>ÿÿ0€7€ÿÿ8%$$03 9<53<ÿÿ05:7L[+;ÿÿ0sŒ?@Pa]LMTI;ÿÿ8Šoc6OPKFLJ-;ÿÿ0Ln/JQef@KH1(;ÿÿ0€ 8>>?=HKKA<ÿÿ>‰2>ŽÿŽÿ>2116€98899:>ÿÿ0€7€ÿÿ8%$$03 <@63<ÿÿ05:7eƒ8;ÿÿ0sŒ?@Pa]Ldwa;ÿÿ8Šoc6OPKF_`7;ÿÿ0Ln/JQef@`aC3;ÿÿ0€ 8>>?=[ffR<ÿÿ>‰2>Žÿs8mkËÓÔÔÖ×××××××ÖÌØÿÿÿÿÿÿÿÿÿÿÿÿÞØÿÿÿÿÿÿÿÿÿÿÿÿÞÝÿÿÿÿÿÿÿÿÿÿÿÿÞØÿÿÿÿÿÿÿÿÿÿÿÿÞØÿÿÿÿÿÿÿÿÿÿÿÿÞáûþþþþþþþþþþüãáûþÿÿÿÿÿÿÿÿþüãØÿÿÿÿÿÿÿÿÿÿÿÿÞØÿÿÿÿÿÿÿÿÿÿÿÿÞÝÿÿÿÿÿÿÿÿÿÿÿÿÞØÿÿÿÿÿÿÿÿÿÿÿÿÞØÿÿÿÿÿÿÿÿÿÿÿÿÞËÓÓÓÓÓÓÓÓÓÓÓÓËih32[‚ÿ3™+3…ÿ+"™!"+‚ÿ—€ÿ\(04669>GPX]\[YXXSNIEBGLQVWPHA:3.*%ÿ!.8FLLMMQX_ehgedb`\XSONQUY\]VPJC>;5+&+)Kedcaa`_]\ZYWVTSQPONNMLKKJIIHGEECCA3%(€#I€efeecb`_^\[ZYWVUTTSRQQP€O+NMLJFCA@33""&eegknpqpnmlkjigffeddccbba€`_^^[WPHB@>52"3€3dekPK†LŽKJILND?>7733$;cemK…†& …#HSD@=9;$3+#;adpL…,†:00€ *&JWD><9;!++!:`boL…,†:0)„&JWE=;9<!++!;^bnL#@D(,†:0*„(&JWD<::=!++!:]`mL6‰Ä¾‰C,:Xn\€Qwb:0*„(&JVC;::=!++!:[_kLoÑ¡Ÿ·{',:u:wrks::0)„(&JVB;9:>!++!9Z]jK/¸¬vr¢“F,:HnLmWda:00.)&JUB:8:>!++!9X\iK+£±}x¥†A,:9::9::9:0*(&ITA97;@!++!9WZhKb«­ªm!,k¨TkZb¬Y0)„(&IT@86;A!++!9UYgK+e†€k7,ƒŽS~˜YwšZ/+„(&IS?76;A!++!9SWeK+/,FL:DN;BO<0)„&IR>7564==<;::98876€5€3:22/+*(*RA"1<>?>><<;:99876654332100/.-.,-,,-,**()9S(€!'8==<;::9887655432210//.-,-+,+*+€)()2H<\+:<=>CIPW\ZYXWVSNIEBFJMPTNGA;51.+'#.;6ÿ -57?GPX^\[YXXSNIEBGKQVXPIA;30+'# &#€ÿ—‚ÿ+"™!"+…ÿ3™+3‚ÿ‚ÿ3™+3…ÿ+"™!"+‚ÿ—€ÿ7(02556=FPX]\[YXXSMGA>EIPVWPHA82.)#ÿ -7HO T[bilkjigfb]WRPUY]ab[TNGA>5+$+$Mlkkihhgfedcbaa``_^][ZYXWVTSRQPOLLI6#(€Jllkjihgfed€c+ba_^]\[ZXWWVUTSPNLIH52"""kllnppqqpoonm€l$kiihgffecbba`_][XSMJFD40"32kloPJ…KŠJƒIHLRIED7633$;kkpJ…†& …#HTIEC::$3+#;jjpK…,†:0?‰€ *&HUHDB:;!++!;ijpK…,†:0Iÿ€&HVHC@:;!++!;hioK!13%,†:0Fà€(&HUFA?:<!++!;ghnK*U–’Q3,:Xn\€Qwb:0EØ+Ñ&HSE@>:=!++!;fgnK<Ä¡Ÿ±>%,:u:wrks::0Iÿ+ø&HRE?=:=!++!;efmJ*„¬vr¢b9,:HnLmWda:0?ˆ.…)&HRD>;;>!++!75I!++! ;UW`I*ƒ­ws¢b8,:HnLmWda:0@Ž.‹(&FC2,*>I!++! ;TU_I)m°|w¥O8,:9::9::9:0Hèè~+&FB1+)?K!++! ;RT^I;–¬©‚9",i¢SiYa§[0Iÿÿˆ+&FA0+(@K!++!":QS]I';QP;/,ƒŽT~™Zw›Z/B——v€P)H&FA0*(@L!++!":PR\I+.,GN;EO:BQ;0Iƒÿè&FA/*'@M!++!#;OR[I…,†:0Iƒÿè&F@/)'AM!++!#:MOYH…(†5*1„94#E?-)'AP!++##:LNUGšD9-)%AO!+3$$:JKQMKL€M„L…K„JCIHE4+&%BM$33#6IIJMQRSQPONNMLJJIHGFFDCBBA@??>><93-&%%GJ3"!1GGF€GFDCBA@?==<;:976543210/+.,+&&%%QA"/?EDCBA@?>=<:987654210/.-,,+€* ))'&%%$7R(€'9@CB@?>=<;987654210/.-,**)€( ''&&%%$0H<\+:<>?CJQW][ZYWVRMGB?CGKPRLF?93/+)% -:6ÿ -46=FNX^\[YXXSMGA>EIPUXPHA:2.*&"& €ÿ—‚ÿ+"™!"+…ÿ3™+3‚ÿ‚ÿ3™+3…ÿ+"™!"+‚ÿ—€ÿ\(02356EKPRLE=71,("ÿ+5FKJJINU\bec`^\ZUOIDBGKPTTOHB=74/(#+!Ieba_][YVTRPNKIGECBBA@??>==<;;:9986+"&€Edcba`^[YWVTQOMLJHGFFEDDCBBA€@?=;865,/""€cefeedba_]\ZYWVUTT€SRQQPPOOMKHB;7431/"3-bbeNI€JƒIŽHGFIA8432333$5a`eI…†& …#FE85227$3+#5^^eI…,†:00€ *&GG83137!++!4\]eI…,†:0)„&GH82038!++!4ZZbI!13%,†:0*„(&GH81038!++!3WX`I*U–’Q3,:Xn\€Qwb:0*„(&GG71/3:!++!2UV_I<Ä¡Ÿ±>%,:u:wrks::0)„(&GF60.3;!++!2ST\I*„¬vr¢b9,:HnLmWda:00.)&GE6/-4;!++!2PR[I)j±}x¥N7,:9::9::9:0BÄÄj+&GE5.-4<!++!2NPYH;’­ª~9!,k¨TkZb¬Y0CÐÐo+&GE4.,4=!++!1LNWH&;OL=.,ƒŽS~˜YwšZ/=ww^€A);&FD4-+5=!++!1IKVH),,FL:DN;BO<0CƒÐ½&FD3,*5>!++!0GITH…,†:0CƒÐ½&FC2,*5>!++!0EGSH…'†3*/…3#FB1,)5@!++!/CFRIšGA1+(6A!++!/BERJE˜FEJA0*(6A!++!/AERH…†#…FA/)'6A!++!/AEQH…,†<12€#-&F@.)&7B!++!0@DPH…,†:0)„&F?.(%8C!++!/?CPH 02$,†:0*„(&F?-'%8C!++!/>COH)P–N2,:Xn\€Qwb:0*„(&F>,&$8E!++!0>BOH;Ä£ °<$,:u:wrks::0)„(&F>+E!++!0=AOG*ƒ­ws¢b8,:HnLmWda:00.(&F=+%"8F!++!0{{`€A);&F:*" :G!++!0:>LG+.,GN;EO:BQ;0CƒÐ½&E;(":H!++! 09>LG…,†:0CƒÐ½&E:(!:I!++! 09=<€;'::98861,%AF3" .55466766544322100/€.-,,+**)(''%$"L=".6€3%2110//.--,,++*))(''&%%$#"" !0M(€+&862100/..-,,+*))(''&%%$##"! *D9\+9:99EKPSLE=71,(% $ €ÿ—‚ÿ+"™!"+…ÿ3™+3‚ÿh8mk    "/8>@AAAAAAAAAAAAAAAAAAAAAAAAAA@>8/"  4]™»ÊÌÎÏÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÏÏÎÀœ]4  =˜öüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýù™= 4—ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ˜4 "Z÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø\" /™ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýœ/8¾ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÀ8>ÍÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎ>@ÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏ@AÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐAAÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐAAÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐAAÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐAAÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐAAÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐAAÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐAAÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐAAÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐAAÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐAAÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐAAÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐAAÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐAAÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐAAÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐAAÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐAAÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐAAÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐAAÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐAAÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÐAAÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÐAAÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþýÐAAÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþýýÐAAÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþüýÐAAÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþýüüÐAAÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþýûüÐA@ÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýýûûÏ@>ËÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýüúûÎ>8½ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþýýýüùúÀ8/—üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþýýýüûöüœ/ "Zôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýüüûøù÷\" 4•üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþýýüüûúúùöøþ—4 <”ôüýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþýýüüüûûùü÷—<  4Z—½ÍÏÏÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÏÏÍ¿™Z4  "/8>@AAAAAAAAAAAAAAAAAAAAAAAAAA@>8/"   it32y†ŽÿÛœÿŠÇ3Š–ÿ…+$$ €É€ $$+…’ÿ‚ 3+  Ç   +3‚ÿ‚ 3$ Ç  $3‚Œÿ‚+"Ã"+‚Šÿ3$Ç 3ˆÿ+ €Ç€ +†ÿ+ …€€ !‚ ˆƒ €!  +…ÿ€+€€Z&.47::;<<=>?@AABGKPSX\adimqrqppoonmmllkjjigec`^[YVSQNLOQSVXZ]_bdfikjgc_[XUQMJFB?;:8642/,("€+€„ÿq '/147:;;<==>??@AACGLPTX]adimqrqppoonmmllkjjigeb`][XVSQNLOQSVX[]_bdfikjfc_[XTQMJFB>;:7632/.+*(# ƒÿ€$€ ).047;€=>?>?@@AABCHLPTY]aein€qDpponnmmllkjjigeb_]ZXVSQNLOQTVY[]`bdfikifc_[WTPMIFB>;97531/-+*'&"€ €‚ÿ€+")+/35=MSW€YXW'XXYZ[\]]__`_^^]]\\[[ZZYXXWVUTSRQPOOMMLMM€N,OOPPQQRRQPONMLJIHFEDCAA@@>=:6.)'%#!"+€ÿ€;#&)-0<[feeddcbbaa``__^]]\\[[ZZYYXWWVVUUTTSRRQQPPOONNML€KJ€IHG€FE€DC€B=,%#!%)€€ÿ€$€ $'+.Jefefedcbba``_^^]]\\[[ZYYXXWWVVUUTSSRRQQP€ON€MLK€JIH€GF€DCCDDC€BA@2#!&+)€$€ÿÿ€€"$(3[€fe€d#ccbcbba``__^^]]\\[ZZYYXXWWVVUTTSSRRQ€PO€NML€KJI€H€GHGGF€EDCBCC€A@:%&+0#€€ÿÿ+"%)Zfgfeedededd€cbbaa``__^^]\\[[ZZYYXWWVUUT€SR€QPO€NML€KJIHH€GFDDCCABA€@9'+03€+ÿ€ €"%Ffgƒefefef€eddccbba``__^^]]\\[ZYYXWW€VU€TSR€QP„ONMMLKJKJHGFCCBAA€@?2+161€ ‚3  #1dffefgg…hggffedccbbaa`__^]\\€[Z€YX„WV€UTS RRQQPOOMKJGEDCA@A@??>/17: 3 + $Vef€effhikkl„mll€kjjiihh€gffeedd€c€ba€`_„^]€\[ƒZYXXWVTRPMJHFCBAA€? >:27<-+$!+eedeefghilnpqrsttss€rqqpponmllkj€i„hg€f…e€d„cb€a`^\ZVRNKGEBB@@?€> 38<8$ $!?e€d eehihdfhikklklk‚jii„hgg‡f„eˆd„c„ba`^][WUQNIFDA@@> 68<>$ "!HdedeegijdÎMPRLHDB@?€> =88=@"  "M€defgimeMAÊ48MRUNJEB@?>>==99=C €3"PcdbcegjnhM5Ê $MSWPKFB@?>€=$99>C33"PcbbdehkqhM5Ê $MT[RLFC@@€=%<99>C33"PbabceglpjM5”B•@A)0“<*@$MU]SMFB@?==<<9:>D33"O€addhlqjM5”D•:>0;“: D!$MU^TMFB@?=€<$9:?D33#Na`abegkrjM5”D•:>0;6ˆ† D!$MV]UMFB@?€<;9:?E33#N€`bdflqjM5”D•:>0;6‘6D!$MV^VMFB@><<;;9:@E33#N`_`acfkqjM5”D•:>0;6‘D!$MV_UMFB?><€;$9:@E33#N_^_`cfkpjM5”D•:>0;6‘ D!$MV^UMFA?>;9;@F33 #M€^`bfjpjM5”D•:>0;6‘ D!$MV^UMEA?=€;%:9;AF33 $L^]^_bejpjM5„*7GC5(…D•:>0;6‘+D!$MV^TLEA>=;;::90;8‘D!$MV^TLE@>=;€:$90;6‘ D!$MU^TLD@>=€:990;6‘D!$MU^TKD@><::€9#=BH33!$K\[[]_cgnhM5€Cb«ìÞÊ¿ººÂÍÀ‰f4D€: =ó?::¦\Ù‚E:Uà„:>0;6‘D!$MU^SKD@=<:97=CH33!%K[Z[]_bgmhM5,WéÛ°£Ÿ ¦µÈ·Œf €D€:Dæ€:‘˜:SžØy`Ê„:>0;6‘ D!$MU]SKC?=<98>CH33!%K€Z]^bgmhM5GrÉáÆ­œŠ‹“ ´Í†l7€D:äW::År€:WÊCðAƒ:>0;6‘ D!$MU]SJC?=;€9989>CI33!%JZYZ\^afmhM5U~ÞÕ¸Ÿ~wx‚’¥À°}xJ€D:sÜ“¿¼:}›€¼‹:ˆÖ• €:>0;6‘+D!$MU]RJC?<;99889>DI33!%J€Y\]`flhM5YÙͯ—ƒsilv‰ž¸½s€a€D‚:Nye::=h{O€:Pyk<€:>0;:Š#ƒ*/D!$MU\RJC><;987?DI33"%JYXY[\`elgM5&[˜ÐË­•€p_ft†œ¶Çd„k€D•:>0;:„&.‰/ 3D!$MU\RJB><:€8978?EI33"%JXWXZ\_ekgM5\‡Çϱ™…umox‹Ÿº³g€^€D•:>0;6‘+D!$MU\RIB>;:88778@EI33"%I€WZ[_dkgM5W|»Ñ»¢‘ƒ{|‡–¨Ä–ixH€D•:>0;6‘D!$MU\QIB=;:8€788@EJ33"%HWVWY[^dkfM5Gož¸Ë² •‘˜¤ºÇN€q6€D:9RkcG9::9KfbN: DckV=:>0;6‘ D!$MU[QIA=;:78@FJ33 "&H€VYZ^cjfM5&a‚¡ÃÈ·ª¥¥­¼Îrg}f€D9jÚξ§H9:TÓÅm±Z9:I½Öƶ{;>0;6‘ D!$MU[QIA=;9€7%68AFK33 #&HVUVXY^cjfM5€=fŒ‘©ÎÇÂÃÊÃcZ†s+DOƒœ½­9@¹Ñµc¡Ž>8‚ÕŵŸYC>0;6‘D!$MU[QIA=:97€68AGK33 #&H€UWY]cifM5€Xi……x‰ ’kKnƒsF‚D]ÍŠœŒ{;LÑÁ®“C<µÅ´£IpW;0;6‘ D!$MU[QIA<:96$7BGK33 #&GUTTWY]bifM5 Dhz„qp{„wo6ƒDT¼¬›‹{k7E¼°Ÿo<8𴣓ƒsG<0;8‘ D!$MU[QI@<:8€6%57BGL33 #>STVY\bheM5ƒ +]lnqqrpV!„D@“›ŠzjJ6:sŸŽ~nX5:V£“‚rb6>0;6‘+D!$MU[QH@<9866558BHL33!#'G€SVX[aheM5…+;8%‡D:AsziI5::?c~mT59:;Tq]88>0;6‘D!$MU[PH@;986€5$7CHM33!$'FSRSUW[`hdM5”D::9:67:99869€: 89:59:>0;6‘ D!$MTZPH@;98€547CIM33!$'F€RTWZ`gdM5”D•:>0;6‘6D!$MTZPG@;9755447CIM33!$'ERQQTVZ_gdM5”D•:>0;6‘D!$MTZOG@;875€4$7DIN33!$'FQPQSVY_gdM5”D•:>0;6‘ D!$MTYOG@;8747DIN33"$(E€PSUY_fdM5”D•:>0;“: D!$MTYOG?;86€4%37EIO33"$(DPOPRUX^fdM5”B•?@)3“?*C$MTYNF?;7644337EJO33"$(D€ORTX^fdM5Ê $MTYNF?:763$6EJO33"$(DONOQTX^edM5Ê $MTYNF>:75€326FJP33"%(D€NQTX^edM5Ê2$MTYNE>:6533227FKP33#%)CNMNQTW^ebMJÊE GMSYME>9653€2"7GKQ33#%)CMMNQSW^e\ÎMOXME=965€2%16GKQ33#%)CMMNPSW]edMCÊ72;MTXMD=96422116GLQ33#%)CMMNPSV]edM5Ê $MTXMD=9542€1$6HLR33#&)CMLNPRV]ecM5Ê $MTWMD=8541$6HMR33$&*CLLNORV]dcM5”–=>&/“= @$MTWMD<853€1%06IMR33$&*BLLMORV\dcM5”D•:>0;“:5D!$MTWMC<84311006IMS33$&*BLKMORV\dbM5”D•:>0;8ˆ† D!$MTVLC<7431€0$6INS33$&*BKKMOQV\cbM5”D•:>0;6‘ D!$MSVLC;743€0%/6INT33$'*BKKMNQV[cbM5”D•:>0;6‘6D!$MSVLB;74200//6IOT33$'+BKKLNQU[cbM5”D•:>0;6‘D!$MSVKB;7320€/$6JOT33$'+BJJLNPU[cbM5”D•:>0;6‘ D!$MSVKB:632/$6JOU33$'+AJJLMPU[bbM5„&2A=0"†D•:>0;6‘ D!$MSVKB:631€/%.6JPU 33%'+AJJKMPUZbbM5ƒ 1UW_nk`]V(„D•:>0;7‘6D!$MSVJB:621//..6KPV 33%(+AJIKMPTZbbM5 HX|§»ÍÀ¨”uaA‚D:;…¶£N::y²²b:<Š·¨^€:>0;7‘D!$MSUJB:521/€.$5KQV 33%(,AIIKLOTZbbM5€Qg—ßãÝÙÕÍ»¤…gK‚D:£¶P~ÞEa»FMW:º£RW€:>0;6‘ D!$MSUJB9521€.%-5LQV 33%(,AIIJLOTYbbM5€?`¦ìàÌÁ¼½ÄϺ‰f/D: óH::´…oÀP::Mí;ƒ:>0;6‘JD!$MSUJA9510..--5LQW 33%(,AIHJLOSYbbM5*V‰æÜIJ¥ ¡¨·Ê´}c€D€:Fâ€:›;‚ÏË^bÅ„:>0;6‘D!$MSUIA9410.€-85LRW 33&(,AHHJLNSYbaM5EpÆáÇ®’‹”¡¶ÍЇl6€D:ñJ::·€:hÄKï<ƒ:>0;6‘ D!$MSTIA8410-85MRX 33&),@HHJKNSYaaM5S}ÞÖ¹ Žwyƒ“¦Á¯}wI€D:–ÀaØ@hjO’¤:±¯^dŠ€:>0;6‘ D!$MSTI@841/-86MSX 33&),@HHIKNRYaaM5YŒÛͯ˜ƒsjlwŠž¹¼t€_€D‚:xª—G:Sš¬€D:;~«œS€:>0;:Šƒ& -D!$MSTI@840/-86MSX 33&),@HGIKMRYaaM5&[™ÑË­•€o^ft†œ¶Çc„l€D•:>0;:„0Š5 7D!$MSTI@830/-86NSX 33&),@GGIJMRY`aM5\‰Èΰ˜„tlnxŠŸ¹´f€`€D•:>0;6‘ D!$MSTI@730/€-9,4NTX 33')-?GGHJMRX`aM5W~»Ñº¡y{…•§Ã™iyJ€D•:>0;6‘JD!$MSTI?730/--,+4OTY 33'*-@GFHJMQX``M5Hr¢»É±Ÿ”Ž—£¸ÉQ}q8€D:9Pf_E9€:IbaK9€: B^fS<:>0;6‘JD!$MSTH?730/-,++5OUY 33'*-@FFHJLQX_`M5'a„¢ÆÇµ¨£¤«ºÍyei€D9b×Ï¿¢E::QÊÆm°T8:H¯×Ç·q;>0;6‘D!$MSSH?730/,€+$5OUY 33'*-?FFGILQW_`M5€@g“°ÎÅÀÁÈÆlW†s-DL„«¾®ž~9>±Ó¶d¢>9|ׯ¶¥fB>0;6‘ D!$MRSH?730.+$5PUZ 33'*-?FEGILPW_`M5€[l‡†}“¨›vMj„sK‚D]Ës‹}ƒDV½­Œ|l8F¾±¡€p>:žµ¥•„tI;0;8‘ D!$MRSH?62.-+$5QV[ 33(+.>EEGHKPW_`M5ƒ 0cmmtsqr]$„DBšœŒ{kM5:y o[59[¤”„sc6>0;6‘ D!$MRSH>61.-+$5QV[ 33(+.?EEFHKPV_`M5… 1C?,†D:Bz{kN5::?moX69:;\‚s`;8>0;6‘ D!$MRSG>51.-+$5QW[ 33(+.?EDFHKOV_`M5”D::9;96:9;959€: 9;;58:>0;6‘ D!$MRRG=51.-+$5RW\ 33(+.?DDFGKOV^`M5”D•:>0;6‘ D!$MRRF=51.-+$6RX\ 33)+/>DDEGKOU^`M5”D•:>0;6‘ D!$MRRF=51.-+$6SX\ 33)+/>DCEGKNV]_M5”D•:>0;6‘D!$MRQE=51.-+€*$6SX] 33)+/>CCEGJNU\^M5”D•:>0;:3468D!$MRPF<61.-+€*$6SX] 33)+/>CCEGINS[^M5”G•CE+7“A F $MQOE<50.,€*%)5TX^ 33),/>CCDFILRZ\M5Ê2$MPMC;40-,**))5TY^ 33*,0>CBCFGKQXZM5Ê $MOKB:3/,,*€)$5UY^ 33*,0>BCCDGKPUXM5Ê $MNH?82/,+)$6UY_ 33*,0=BCBCFIMQUMFÊ? AMLC<51.,*)6UZ_ 33*,0=€BDEFJNQÎMJ>93/-+*)6VZ^ 33*-0=€ACCEHJORWZ]_`aab„a`Œ_€^„]\„[ŒZ€YXVUROKF@:62/++*) 6V[^3€ +-1953/,€*) 8W[^  "*-1;€A @ABCEHHKMNOP‚Q€PO„NM€LK„JI€HG„F„EDDC BBA?>:852/-++*‚) ;W[Y" $)-18A@@€ABCCEFGH€IJJIH€GFE„D€CBA€@?>‡=<<‚; ::996531/-++**‚) BW\V$ $'-14‚@ABBCC…DC€BA@€?>€=<„;:9€8„766‚5€4 3320/.,++**ƒ) NX\M$+".04=@??@@??@A@@A@?€>=<€;:€987€65€43„211†0//..,€+**€)())3SX];+ 3 -147?>??>?‚>=<€;:9€87€654€32€10„/..†-,++*€)€( *ISX[ 3‚ €'036;??€>=€>€=<;€:9€876€54€321€0/„.--†,+*‚)(;NSXI€ €ÿ+.268=€>=€<;€:98€765€43€210€/.„-,,‡+€*†)(/INTR+ÿÿ€€!258;=>€=<;€:98€765€43€210€/.„-,,†+*ˆ)((.BIOS/€€ÿÿ€$+57:;<==<;€:98€765€43€210€/.„-,ˆ+€*Š)3@EJOB€$€€ÿ€ 189;ƒ<;€:98€76€543€21€0/.…-‰+**‰)+4;@FJI€ÿ€+.9:<<=>ƒ= >?@ABCDEGGIJII€H€GFFEE€D BAA@>>=<;:€9:€;3<==>?@@A@><;:876543200//.,,+*))(('&(,17;AE;+€‚ÿ€$€i#6;;=>??@AABFJNSV[_dgkprqqpoonnmllkkjihfca^\YWTROLNPSUWZ\_acfhjkgd`]YURNKGD@<:86420.,*(&%""(,27<=(€ €ƒÿq 0;<=>?@AABFJOSW[_dglprqppoonnmllkkjihfc`^[YVTROLNPSUXZ\_acfhjkgc`]YUQNJGC@<:86420.,*(&$"#(-271 „ÿ€3€€[+5;=?AABFKOSW[`dhlqrqppoonnmllkkjihfc`^[YVTQOLNQSVXZ\_acfhkkgc`\YUQMJGC@<:86420.,*(&$"#')&€€+€…ÿ+ €€ !‚ ˆƒ €! „€+†ÿ3 €Ç€ 3ˆÿ3$Ç$3Šÿ‚+"Ã"+‚Œÿ‚ 3$ Ç  $3‚ÿ‚ 3+  Ç   +3‚’ÿ…+$$ €É€ $$+…–ÿŠÇ3ŠœÿÛŽÿŽÿÛœÿŠÇ3Š–ÿ…+$$ €É€ $$+…’ÿ‚ 3+  Ç   +3‚ÿ‚ 3$ Ç  $3‚Œÿ‚+"Ã"+‚Šÿ3$Ç 3ˆÿ+ €Ç€ +†ÿ+ƒ€€ ! ‚€‚‚ €!  +…ÿ€+€%.37€:R;;<=>??@@EINRW[`dimqrqppoonmmllkjjigdb^\XVRPLJHJMPRUX[]`cehkjgb_[XTPMIEA>:97430-*&!€+€„ÿq &-036:;;<<==>>??@AEJNSW\`dimqrqppoonmmllkjjigda^[XUROLJHJMPSUX[]`cfhkjfb^[XTPLIEA=:96420.,*(&! ƒÿ€$€!&+.37:=>=>>?>??@?@AFJOSX\`eim€qDpponnmmllkjjigda^[XUROLIHKMPSVX[^`cfikifb^[WTPLHEA=:86420.,*(&$!€ €‚ÿ€+ %),25>OW\ƒ^‚] ^_`abceefg€hggf€e€d€c ba`_^]\[YXW€VWVWWXYYZZ€[$ZYXVUSRQPNMLJIHGGEC?9.(&#" +€ÿ€#&+.;`€l€k€j€i€h€g€f€e€d€c€b€a€`€_€^]]\\€[ZZYYXX€WVVUU€TSSRRQQ€POONN€MLLKKC,#!#'€€ÿ€$€  $(,Lkllmllk€j€i€h€g€f€e€d€c€b€a€`€_€^]]\\€[ZZYYXX€WVVUU€TSSRRQQ€POONNMMNMLKKJJI5!$)(€$€ÿÿ€ %1_mlmlklljkk€j€i€h€g€f€e€d€c€b€a€`__€^]]€\[[ZZYY€XWWVVUU€TSSRR€QPPOO€NMLKLJJ€I@$$*/#€€ÿÿ+!&_mlmkl€kl€kj€i€h€g€f€e€d€c€b€a``€_^^]]€\[[ZZ€YXXWWVV€UT€S RRQQPOONNML€JIIHH?%*/1€+ÿ€ €"G€l€klkllkkj€i€h€g€f€e€dƒcbb€a``__€^]]\\[[€ZYYXX‚WVV€UTTSSRRQQPNMLLJIJHHGG4*041€ ‚3 /jlmkk€lmllml€m€l€k€j€i€hƒg€fee€dccbb€a`__€^]]\\€[Z€Y!XXWWUVTTSQPNMKKJHHGGFE/059 3+Zlmkk€l mmnonoppoop€onn„m€l€k€j‚ihh€gff‚eddcc€ba``€_^^‚] \\ZZYXWVTRQMMJJIHGFFE?15;-+$(llkllklmmooqq„rƒqp‚o€nml€kj€ihh‚gffe€dcc‚baa``__^\ZWUROLKJHGFF€E 36;8$ $?lklmmkeff‚hi„hƒg‡fe„d‚c„baa†`€_^€]\[YWUSQOLIIFFEEDD96;=$ "JkllkklmneÎMPTPMJHGFE€D ;60;“:5D!$MS[TOJHECCBBA=8>C33SiijikmnqhM5”D•:>0;=‡áÚ†+D!$MS[TNKHDCBBAA<9>D33SiklorgM5”D•:>0;>‡ÿø†6D!$MSZTOIGDBBAA@<9?D33SihiijloqhM5”D•:>0;>‡ÿø†6D!$MTZTNIGCBAA@@<9?D33ShhihjlnqhM5”D•:>0;>‡ÿø†+D!$MSZSNIFCAA@@?<:?E33RhjknqgM5”D•:>0;>‡ÿø†6D!$MSZSNIFBA@@??<:@E33RgghhiknpgM5„*7CA5(…D•:>0;>‡ÿø†D!$MSZSMIEB@@€?$;;@F33QgghgikmpgM5‚ 7TQB48JYW-„D•:>0;:‡PM† D!$MSYSMHEA@€?>;;@F33RgikmogM5 #HK$[º¦m:/]D‚D:I¶ÌÑr:<¨¾Åy:P¼ÏÅ€:>0;=Šè‚ƒD!$MSYSLHDA@?€>$;;AF33 RffgfhklogM5€O7;ÔÛÝ×Ôδ€!QK‚D:À;PÞTt¡::@<Ør:;a€:>0;>Šÿƒ D!$MSYRLGDA@€>=;0;>ŠÿƒJD!$MSXRKGCA?>>==:0;>ŠÿƒJD!$MSXQKFC@?>==<:=BG33 QeefegjlnfM5C3—ÝÆ­œŠ‹“ ´Í†)Y7€D:äW::År€:WÊCðAƒ:>0;>Šÿƒ+D!$MSWQKFB@>==<<:=BH33 QegilnfM5P"ÒÕ¸Ÿ~wx‚’¥À¯FEI€D:sÜ“¿¼:}›€¼‹:ˆÖ• €:>0;>ŠÿƒJD!$MSWPKEB?>=<<;:=CH33!QedeefilnfM5YÕͯ—ƒsilv‰ž¸½Y2[€D‚:Nye::=h{O€:Pyk<€:>0;<ŠfKƒ*J/D!$MSWPJEA?><<;;9>CI33!QddedfiknfM5&X,ÈË­•€p_ft†œ¶ÇW'g€D•:>0;;„V2‰/+3D!$MRWOJDA?=<;;::>DI33!PdfhknfM5[Âϱ™…umox‹Ÿº³F8Y€D•:>0;>„ÿ‰JD!$MRVOID@>=;;::9?DI33!PdcddehkmfM5Q*©Ñ»¢‘ƒ{|‡–¨Ä”)LH€D•:>0;>„ÿ‰JD!$MRVOIC@><;::99?DJ33!PccdcehjmfM5D@U²Ë² •‘˜¤ºÇHf6€D:9RkcG9::9KfbN: DckV=:>0;>„ÿ‰D!$MRUOHC@=<::€9?EJ33"PcegjmeM5&_"ˆÂÈ·ª¥¥­¼Îl(Cb€D9jÚξ§H9:TÓÅm±Z9:I½Öƶ{;>0;>„ÿ‰6D!$MRUNHC?=;:9989@EK33"PcbccegjleM5€8‚ÕŵŸYC>0;>„ÿ‰6D!$MRUNHB?<;99889@FK33$PbbcbegileM5€TW"Sr€žbD3nE‚D]ÍŠœŒ{;LÑÁ®“C<µÅ´£IpW;0;>„ÿ‰D!$MRUMGB><:98AFK33$ObefildM5 Bf=$$0&$Tl6ƒDT¼¬›‹{k7E¼°Ÿo<8𴣓ƒsG<0;9„>ˆ8(D!$MRTMGA>;:€8%78AFL33$ObabbdfikdM5ƒ +Xkl]bqmS!„D@“›ŠzjJ6:sŸŽ~nX5:V£“‚rb6>0;>ÿ8¸D!$MRTMFA=;988778AGL33$OaabadehkdM5…+;8%‡D:AsziI5::?c~mT59:;Tq]88>0;>ÿ8¸D!$MRTLF@=:987768BGM33#Oa`aacehkdM5”D::9:67:99869€: 89:59:>0;>ÿ8¸D!$MRSLE@<:977668BHM33#O``a`cehkdM5”D•:>0;>ÿ-¸D!$MRSKE?<9876658BHM33$N`cdgkdM5”D•:>0;>ÿ8¸D!$MRRKE?;9866557CHN33 $N`_``bdgjdM5”D•:>0;>ÿ8¸D!$MRRKE>;9765547CIN33 $N__`_bdgjdM5”D•:>0;“:*D!$MRRKD>;8755446DIO33 $N_bcgidM5”B•?@)3“?5C$MQRJD>:8654437DJO33 $N_^__acfidM5Ê2$MQQJC>:7644337DJO33 &N^^_^acfhcM5Ê'$MQQIC>:7543326EJP33!&M^`cehcM5Ê2$MQPIC=:6533226EKP33!&M^]^]`beh`MJÊE GMPPIB=9643€26FKQ33"&M]_beh[ÎMNPHB<954€2%16FKQ33"&M]\]\_adhbMCÊ7';MPPHA<85322115FLQ33"'M\^adgbM5Ê $MQPGA;843€1%05GLQ33"'L\[\[^acgbM5Ê'$MQOG@;74211005GMQ33"'L[^`cfbM5”–=>&/“=5@$MQOG@:732100/5HMQ33#'L[Z[[]`bfaM5”D•:>0;“:*D!$MQNG?:63200//5HMR33#&L€Z[]_beaM5”D•:>0;>‡Òˆ 6D!$MPNF?96210//.5HNR33 #(KZYZ[\_beaM5”D•:>0;>‡ÿø†6D!$MPMF>9521//..4INS33 #(KYYZZ\^beaM5”D•:>0;>‡ÿø†+D!$MPME>8520/..-4IOS33 #)J€YZ[^ae`M5”D•:>0;>‡ÿø†6D!$MPME>8510..--4JOS33 $)JXXYY[]ad`M5”D•:>0;>‡ÿø†+D!$MPMD>741/.--,4JOT33 $)J€XYZ]`d`M5„&2?<0"†D•:>0;>‡ÿø†6D!$MPLD=740/--,,4JPT 33!$)JXWXXZ\`c`M5ƒ 1RUI9>P]R(„D•:>0;:‡`]†D!$MPLC=730.-€,3KPU 33!$)J€WXY\_c`M5 DN%M{­˜_16^?‚D:;…¶£N::y²²b:<Š·¨^€:>0;=ŠØyƒ D!$MPKC=63/.€,%+3KQU 33"$)IWVWWY[_c`M5€M<.ÆÜÛÙÕɵp!UH‚D:£¶P~ÞEa»FMW:º£RW€:>0;>Šÿƒ+D!$MPKC<62/-,,++3LQU 33"$)I€VWX[_c`M5€=DDåßÌÁ¼½Äϵ b/D: óH::´…oÀP::Mí;ƒ:>0;>ŠÿƒJD!$MPKC<52.-,++*3LQV 33"%)IVUVVX[^c_M5*SÙÜIJ¥ ¡¨·Ê°a2`€D€:Fâ€:›;‚ÏË^bÅ„:>0;>Šÿƒ+D!$MOKC;51.,++**3LQV 33"%)I€UVW[^b_M5B4ÝÇ®’‹”¡¶Í„&[6€D:ñJ::·€:hÄKï<ƒ:>0;>ŠÿƒD!$MOKB;41-,+€*83MQW 33"%)HUTUUW[^b^M5N$ÐÖ¹ Žwyƒ“¦Á®DFI€D:–ÀaØ@hjO’¤:±¯^dŠ€:>0;>Šÿƒ D!$MOJB:40-,*3MRW 33#%)H€TUWZ^a^M5YÖͯ˜ƒsjlwŠž¹¼Y4Z€D‚:xª—G:Sš¬€D:;~«œS€:>0;<ŠqPƒ& -D!$MOJA:30-+*83MRW 33#%+HTSTTWZ]a^M5&W.ÉË­•€o^ft†œ¶ÇW'h€D•:>0;:„H7‰5 7D!$MOIA93/,+€*)3NRX 33#&+H€STWY]`^M5\Ãΰ˜„tlnxŠŸ¹´G7[€D•:>0;>„ÿ‰JD!$MOI@93/,+**))3NSX 33#&+GSRSTVY\`^M5R'«Ñº¡y{…•§Ã˜+KI€D•:>0;>„ÿ‰D!$MOI@83/,+*€)83OSY 33#'*HRRSSVX\`^M5F=a¶É±Ÿ”Ž—£¸ÉKe8€D:9Pf_E9€:IbaK9€: B^fS<:>0;>„ÿ‰+D!$MOI?83/,+))((3OTY 33$'*G€RSUX[`^M5'^ ÆÇµ¨£¤«ºÍu,?e€D9b×Ï¿¢E::QÊÆm°T8:H¯×Ç·q;>0;>„ÿ‰D!$MOH?83/+*)€($3OTY 33$'+GQQRRUW[`]M5€?T&ˆ­ÎÅÀÁÈÆf; q-DL„«¾®ž~9>±Ó¶d¢>9|ׯ¶¥fB>0;>„ÿ‰ D!$MOH?83.+*(3PTZ 33$'+F€QRTWZ_]M5€WP ^w¨šoG%+jJ‚D]Ës‹}„ÿ‰ D!$MOH?82.+)($3PUZ 33$'+FQPQQTVZ_]M5 Ie6#(<. Mo>ƒDV½­Œ|l8F¾±¡€p>:žµ¥•„tI;0;9„5"‡ D!$MOH?82.*)(2QU[ 33$(+F€PQSVZ^]M5ƒ 0^mfSYmqY$„DBšœŒ{kM5:y o[59[¤”„sc6>0;>ÿ¸D!$MOH?82-*)€(%'3QU[ 33%(+FPOPPSVY^\M5… 1C?,†D:Bz{kN5::?moX69:;\‚s`;8>0;>ÿ-¸D!$MOG?81-*)((''3QV[ 33%(,F€OPRUY]\M5”D::9;96:9;959€: 9;;58:>0;>ÿ¸D!$MNG?71-*)(€'$3QV\ 33%(,EONOORUY]\M5”D•:>0;>ÿ¸D!$MNG>71-*)'3QW\ 33%(,E€NORTY]\M5”D•:>0;>ÿ¸D!$MNF>71-*('$3RW\ 33%),DNMNOQTX\[M5”D•:>0;>ÿ¸D!$MNF=71-)('$3RW] 33%),EMMNNQSW[[M5”D•:>0;:C?68D!$MNF=60,)('$3RX] 33&)-DMLNNOSV[[M5”G•CE+7“A F $MMD=5/,)('$3SX^ 33&)-DLLNLPQUYYM5Ê $MMC;4/+)(€'&3SY^ 33').C€LMNQSXXM5Ê'$ML@93.,((''&&3TY^ 33'*.CLNOSUWM5Ê $MK>72.+(('€&$3TY_ 33'*.CKLKKLOPSUMFÊ? AMI;51-*('&€%4TZ_ 33'*.C‚KMOQRÎMH72.+*('&€%+4UZ^ 33'*.CJJIJJLLNRSUWZZ[[\\‚[ƒZ€YX€WV„U‚TSS‚RQQP‡O‚NMLJIEC?:30-+('%&€% 3U[^3€ (*/AJIJIJIKLNQRTTV…WVVUU‚TSSR€QPP‚ONNMM‚LKKJJ‚IHH‚G‚F€E€D CBB?<:630.,)'&‚% 5V[^  "'*/?€I€HIJKMNN€PQP€ON€MLLKKJJ‚IHH€GFF‚EDDCCBB‚A@@€?>>‚=<==€< ;;:986420.+)€&‚% 9V[Y" $&+/;I€HGHGIIJJ€KLKKJJ€IHH‚GFFEEDD€CBBAA‚@??€>==<<;;€:9€877‚6€5ƒ4 3321/.-,)''&‚% $?V\V$ $%+/5HH€GF‚GI€HGFF‚EDDCC€BAA@@€?>>==€<;;::99‚877€65544€322‚1€0ƒ/ ..-.-,,+(&'&&% $$MW\M$+!+.3CGGFFGEFEFEEFEEDD‚CBBAA€@??>>==€<;;€:998877€6554433€211€0//‚.€-ƒ, ++*++**)''€&% $$/RW];+ 3 */38G€FEFEDCDDCBB€A@@??€>==<<;;€:9988€76655€4332211€0//..€-‚,€+ƒ*‚)(()(€&‚%$$%HRW[ 3‚ €%/26?FFEEDDCDDCBAA‚@??>>€=<<;;::€98877€65544€3221100€/..--€,‚+**„)…('&„%€$9NRXI€ €ÿ+,169CEEDD€CBBAA@@€?>>==<<€;::99€87766€5443322€100//€.--,,€+‚*))„(…'&…%€$+INSR+ÿÿ€€ 149>==<<€;::99€87766€5443322€100//€.--,,€+‚*))ƒ(†'&&„%€$*@IOR/€€ÿÿ€$*48;>==<<€;::99€87766€5443322€100//..€-,,€+‚*))ƒ(†'&&ƒ%€$%0?DJOA€$€€ÿ€189;;=@BBAA@@??€>==<<€;::99€8776655€43322€100//..€-,,++ƒ*€)‚(†'€&‚%€$'2:?EJI€ÿ€,+.9:;<<>?@?@??@ACCEEGGIIKLKKJIIHHGGFF€EEDCA@?><;:886678899::;<==>>=<:97654210/--,++*)((&&%$##%*05:@D;+€‚ÿ€$€i#6:;<==>>??@DHMQUZ^cgkprqqpoonnmllkkjiheb_\YVSPMJGILORTWZ]_begjkgd`\YURNJFC?;97531/-+)&%# &+15;<'€ €ƒÿq 0;;<=>>??@DHMQVZ^cglprqppoonnmllkkjiheb_\YVSPMJGJLORUWZ]_behjkgc`\XUQNIFB?;97531/,+)&%" !&,150 „ÿ€3€€[+5:<>??@DIMRVZ_chlqrqppoonnmllkkjiheb_\YVSPMJGJMORUWZ]`behkkgc`\XTQMIFB?;97531.,+(&$" !&(%€€+€…ÿ+ €€ ! ‚€‚‚ €! ƒ+†ÿ3 €Ç€ 3ˆÿ3$Ç$3Šÿ‚+"Ã"+‚Œÿ‚ 3$ Ç  $3‚ÿ‚ 3+  Ç   +3‚’ÿ…+$$ €É€ $$+…–ÿŠÇ3ŠœÿÛŽÿŽÿÛœÿŠÇ3Š–ÿ…+$$ €É€ $$+…’ÿ‚ 3+  Ç   +3‚ÿ‚ 3$ Ç  $3‚Œÿ‚+"Ã"+‚Šÿ3$Ç 3ˆÿ+ €Ç€ +†ÿ+„€€ ‹!ƒ ‚…‚… €+…ÿ€+€%-379€:;;<€= >>CHMQVZ_chl€q;76420.+(% €+€„ÿ $+/26::€;€<€=W>?CHMRV[_chlqqpponmlkjjihgfec`\YVSOLIFCACFILNRTWZ\_bed`]YVSOLHEA>:76420.,*(&%  ƒÿ€$€ $),15:=<ƒ=V>>=>?DHNRW[_dhmqqpoonmlkjiihgfec_\YVROLIFBADFILORTWZ]_bec`]YVROKHDA>:75420.,*(&$"€ €‚ÿ€+"&*/3=<:98876552/*&$"  +€ÿ€;#(+9Zedccba`__^]\[[ZYXWVVUTSRRQPONNMLKJIHHGFEDDCBBA@?>=€<;:9872'" "%€€ÿ€$€!%)Hee€d(ca`__^]\[[ZYXWVVUTSRQQPONMMLKJIHHGFEDDCBBA…@?>€=<;:98€7€6, #'&€$€ÿÿ€€".Zfee€c'b``__^]\[[ZYXWWVUTSRRQPONNMLKJIIHGFEDDCCB…A@€?>=<;::998651!#(,"€€>ÿÿ+"Yfeecdbbaa``_^]\\[ZYXXWVUTTSSRQPOONMLKKJIHGFFEEDCBA€@?>…= <<;;9:986776€5/$(,0€+ÿ€ €Bfed€c'bba`a``_^]]\[ZZYXWWVUUTSRQQPONMMLLKJIIHHGFE€DCBA…@??>>=<;:987665544+(-2.€ ‚3 *deeccdbbcbcbbaa€`_^]]\[ZZYYXWVUUTSSRRQPONMMƒLKJ€IHGF…EDCCBA@>=;:876654 +-36 3+Teecbdcbccee‚dccb€a`_^€]\[ZYYXXWVVUTTSSRRQ…P€ONM…LKJIIHGFEB@><:8765€4 31.38++ $#edƒcdffgghhgf€edc€ba``__^]]\\[[ZYYƒXWV„UT…SRQQPQONMIGEA=;985544€3 /484$$9dcbabbcdb^_`aa‚baa‚`_€^€]€\‚[€Z‰Y„X‰W„VUUTSROMKFA=:76443 0489$ "Dccbcd^ÎMLD?;8754€3 2149;"  Jbb€abcd_MAÊ48MMFA=97443322149> € 3Laa€`bdf`M5Ê $MNIC>:6443€214:>33K€`_`acfaM5Ê $MOJD?9754€2%114:>33K`_`_`adfaM5”B•@A)0“<@$MOME?:74322€15:?33K_^acfaM5”D•:>0;“: D!$MPNE@:74321#5;?33J^]]\_`cf`M5”D•:>0;6ˆ† D!$MPNF?:743106;@33J]€\^`cf`M5”D•:>0;6‘ D!$MPMG?:742€1%016<@33I\[\[]_beaM5”D•:>0;6‘6D!$MPNF?:732110016<@33H[Z[[\^ae`M5”D•:>0;6‘D!$MPMF?:6321€0170;6‘ D!$MPMF?9632€0/070;6‘,D!$MPMF>963100//080;8‘D!$MPME>96210€/180;6‘ D!$MPME>8521/08=B33FW€VX[^a^M5€O7;ÔÛÝ×Ôδ€!QK‚D:À;PÞTt¡::@<Ør:;a€:>0;6‘ D!$MPME>8520€/%.09=C33FVUUVWZ]`^M5€@APåÞÊ¿ººÂͼ‘`4D€: =ó?::¦\Ù‚E:Uà„:>0;6‘JD!$MPMD>8510//..09>C33EUTTUWY\`^M5,R"ÞÛ°£Ÿ ¦µÈ´g/c €D€:Dæ€:‘˜:SžØy`Ê„:>0;6‘D!$MPLD>8410/€.80:>C33DTSTTVX[`]M5C3—ÝÆ­œŠ‹“ ´Í†)Y7€D:äW::År€:WÊCðAƒ:>0;6‘ D!$MPLD>7410.0:>D33DSUWZ_]M5P"ÒÕ¸Ÿ~wx‚’¥À¯FEI€D:sÜ“¿¼:}›€¼‹:ˆÖ• €:>0;6‘ D!$MPLD=741/€.-0:?D33CS€RTVZ^\M5YÕͯ—ƒsilv‰ž¸½Y2[€D‚:Nye::=h{O€:Pyk<€:>0;:Š#ƒ*,/D!$MPLC=740/..--0;?E33CR€QSVY]\M5&X,ÈË­•€p_ft†œ¶ÇW'g€D•:>0;;„M1‰/3D!$MPKC=730/.€-/;@E33CQ€PSUY]\M5[Âϱ™…umox‹Ÿº³F8Y€D•:>0;=„Љ D!$MPKC=630/€-9,/<@E33BPOOPRTX\[M5Q*©Ñ»¢‘ƒ{|‡–¨Ä”)LH€D•:>0;=„ЉJD!$MPKC<63/.--,,/<@E33AONOOQSW[[M5D@U²Ë² •‘˜¤ºÇHf6€D:9RkcG9::9KfbN: DckV=:>0;=„ЉD!$MPKC<62/.-€,8/0;=„Љ D!$MOKC<52/.,$/8‚ÕŵŸYC>0;=„Љ D!$MOKC;52/-€,%+/KJKJLPTXYM5ƒ +Xkl]bqmS!„D@“›ŠzjJ6:sŸŽ~nX5:V£“‚rb6>0;=ЖD!$MOJB;41.-+$/=CG33>JIJILOSWYM5…+;8%‡D:AsziI5::?c~mT59:;Tq]88>0;=ЖD!$MOJB:41.,€+%*/>CH33>IHIIKNRWYM5”D::9:67:99869€: 89:59:>0;=Ð8–D!$MOJA:41-,++**/>DH33=HGHHJMQVYM5”D•:>0;=ЖD!$MOIA:40-,+€*$.>DH33 0;=ЖD!$MOIA:30-+€*%).?DI33 0;=Ð8–D!$MOIA930,+**))/?EI33!;FEFEHKPUXM5”D•:>0;“: D!$MOI@93/,+*€)$/@EJ33!;EDEDHKPUXM5”B•?@)3“? C$MOI@93/,+)$.@EJ33!;DCDDHKPUXM5Ê $MOI@83/,*€)%(.@EJ33!:CBDDGKPTWM5Ê2$MOI?83/+*))((.AEK33!:BBDCGKOTWM5Ê $MOH?83.+*)€($.AFK33"9BACCGJOTVMJÊE GMOH?82.+*(".BFL33"9AACCFJOTTÏMH?82.+)€(%'.BFL33"8AACBFJOTWMCÊ72;MNH?82.*)((''.BGL33#8AABBFJNTWM5Ê $MOG?82-*)'$-CGM33#8A@BBFINTWM5Ê $MNG?81-*(€'%&.CHM33#8@@BBEINTWM5”–=>&/“=5@$MNG>71-)(''&&.DHM33#8@@BBEINSWM5”D•:>0;“: D!$MNF>71,)('€&$.DHM33#8@@ABEIMSWM5”D•:>0;8ˆ† D!$MNF>70,)(&$-DIM33$8@@ABEHMSVM5”D•:>0;6‘ D!$MNF>60,)'€&%%-EIN33 $8?@AADHMRVM5”D•:>0;6‘6D!$MNF=60,('&&%%-EJN33 $8?@@ADHLRVM5”D•:>0;6‘D!$MNF=60+('&€%$-EJN33 $8??@ADGLRVM5”D•:>0;6‘ D!$MNF=6/+(&€%%$-EJO33 $8>?@ACGLRVM5„&2?<0"†D•:>0;6‘6D!$MNF=5/+'&%%$$-EKO33 %7>?@@CGLQVM5ƒ 1RUI9>P]R(„D•:>0;7‘D!$MNE<5/*'&%€$$-FKP33!%7>??@CGKQVM5 DN%M{­˜_16^?‚D:;…¶£N::y²²b:<Š·¨^€:>0;7‘ D!$MNE<5.*'&$$-FLP33!&7>>?@CFKQUM5€M<.ÆÜÛÙÕɵp!UH‚D:£¶P~ÞEa»FMW:º£RW€:>0;6‘ D!$MNE<4.*'%€$%#-GLP33!&7=>?@BFKQUM5€=DDåßÌÁ¼½Äϵ b/D: óH::´…oÀP::Mí;ƒ:>0;6‘JD!$MNE;4.*&%$$##-GLQ33"&7=>??BFKQUM5*SÙÜIJ¥ ¡¨·Ê°a2`€D€:Fâ€:›;‚ÏË^bÅ„:>0;6‘D!$MND;4.)&%$€#8-GMQ33"&7==>?BEKQUM5B4ÝÇ®’‹”¡¶Í„&[6€D:ñJ::·€:hÄKï<ƒ:>0;6‘ D!$MMD;4-)&%#8,HMR33"&7<=>?AEKQUM5N$ÐÖ¹ Žwyƒ“¦Á®DFI€D:–ÀaØ@hjO’¤:±¯^dŠ€:>0;6‘ D!$MMD;3-)&$€#9"-HMR33"&6<=>>AEKPUM5YÖͯ˜ƒsjlwŠž¹¼Y4Z€D‚:xª—G:Sš¬€D:;~«œS€:>0;:Šƒ&J-D!$MMD;3-)%$##""-HMR33"'6<==>AEJPUM5&W.ÉË­•€o^ft†œ¶ÇW'h€D•:>0;:„D7‰57D!$MMD;3-(%$#€"8-IMS33#'7<<=>ADJPUM5\Ãΰ˜„tlnxŠŸ¹´G7[€D•:>0;=„Љ D!$MMD;2,(%$€"9!,INS33 #(7;<=>@DJPUM5R'«Ñº¡y{…•§Ã˜+KI€D•:>0;=„ЉJD!$MMD:2,(%#""!!,JNT33 #(6;<==@DJOUM5F=a¶É±Ÿ”Ž—£¸ÉKe8€D:9Pf_E9€:IbaK9€: B^fS<:>0;=„ЉD!$MMC:2,'$#"€!8,JOT33 #(6;<<=@DIOUM5'^ ÆÇµ¨£¤«ºÍu,?e€D9b×Ï¿¢E::QÊÆm°T8:H¯×Ç·q;>0;=„Љ D!$MMC:2+'$#!$,JOT33 #(6;;<=@DIOTM5€?T&ˆ­ÎÅÀÁÈÆf; q-DL„«¾®ž~9>±Ó¶d¢>9|ׯ¶¥fB>0;=„Љ D!$MMC:1+'$"€!% ,KOU33 $(6:;<ƒDV½­Œ|l8F¾±¡€p>:žµ¥•„tI;0;9„+‡D!$MMB91+&#"!€ $,LPU33!%)5::;0;=ЖD!$MMB92*&#" $,LPU33"%)69:;<>CHOTM5… 1C?,†D:Bz{kN5::?moX69:;\‚s`;8>0;=ЖD!$MMB91*&#!€ %,LQU33"%*59:;;>CHNTM5”D::9;96:9;959€: 9;;58:>0;=Ð8–D!$MMB81*&"! ,MQV33"%*59::;>CGNTM5”D•:>0;=ЖD!$MMB81*&"! €$,MRV33"%*599:;>BGNTM5”D•:>0;=ЖD!$MMB81)&"!$+MRV33"&*589:;=BHMSM5”D•:>0;=ЖD!$MMA70)&" €%,MRW33"&*589::>AGLSM5”D•:>0;:@8=68D!$MMA7/*&! ,MSW33#&+5899:=AELRM5”G•CE+7“A F $ML>6/)%! €$,NSX33#'+58899AFMM5Ê'$MI80+&" ,OTY33#'+4€78::4,($" € +PUX3€  %(,46 789;=ACEGIJJKJ€KJ…IH„GFE…D€CB…A@€?>=<;:640,'%#!€ .QUX  "$(,3656 79:<>?AABCBBCCB…A€@?>=…<€;:9…876€4 31/-+(%#! 2QUT" $$),3€5 6556789:;;<=<;:„987654€3…210/.€- ,,+)(&%#! 9QVQ$ $"),1€545€67ƒ876€543210/€.-,…+*)( '&&%$#"  HRVI$ +),055…4€5445543€210/.-,„+*)('&%$€#!! € 'MRW8+ 3 (-03€433443223321€0/.-,+*€)('&%$#"€!" €BMRV 3‚ €$-04643223321€0/.-,+*)€('&%$#"! €€2IMSE€ €ÿ++0484€3210€/.-,+*)€('&%$#"! €#EINM+ÿÿ€€ 04895321€0/.-,+*)€('&%$#"! €#€$€€ÿ€189:;95€10/.-,+*€)('&%$#"!€ ‚ /7?@€BAA@@??€>=€>BGKPTY]bgkprqponmllkjihggfda^[WTQNJGCABEHKMQSVY[^adea^[WTPMIFB?;86430/-+)'%#!$).388&€ €ƒÿ 0:;;<€=_>>CGLPUY]bglpqqponmllkjihgffda^ZWTQMJGCACEHKNQSVY\^adea^[WTPMIFB?;86420.-+)'%#! $*.3. „ÿ€3€€+48;==>>CHLQUY^bgl€qEponmllkjihgffda]ZVTPMJFC@CFHKNQTVY\_aeea^[WTPMIFB?;86420.,+)'%#! $&$€€+€…ÿ+ € ‹!ƒ ‚…‚… ƒ‚+†ÿ3 €Ç€ 3ˆÿ3$Ç$3Šÿ‚+"Ã"+‚Œÿ‚ 3$ Ç  $3‚ÿ‚ 3+  Ç   +3‚’ÿ…+$$ €É€ $$+…–ÿŠÇ3ŠœÿÛŽÿt8mk@      "#%'()))**********************************************************************)))('%#"   %*.1479:;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;:9741.*%   !(/5;@EILNOPQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRQPONLIE@;5/(!  &/7@HOV[`ekmnooooppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppoooonmke`[VOH@8/&  "+5?JTbÁÜéöùùúûûüýýþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýñâÅ“bTJ?5+"  #.9FR`°òùøùúûüüüýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù²aRF9.#  #/°?]SäCã¯03θ»}²bm»%GÂZ>eKŸ:ß‚((ÙöB%Ž>B+òÌUäZ ¦‡oXX ªaT/ÄÀ#. zÅ-3gèAÎ}på6=ÅþÇ/"ñtØ‚Jäºï¹ß‚(*¹³P‘ÝZb]«µ „XOƸ†Ä5­ú–HPàÅ ÃÀ{8b_À1‘œÐŽÖdÊ¥¼¢¹ÄŒy"®ögf¬)·aóëßà ÉŒðTûŠH˜ûBÅ©§_5³0ðúÇýGƒ#3 ìSÛÓ Ð°øAаe.r}£†dSì> /ÏÀî~‘ø€6ëú’‡å?Oû+.ò%?«V.7¸ºÿX¨~Ô=Aögídƒ`¹P×r×ð8! ±¡WDcB“ÒVæ=Îeþ¶&f~K7ŒñÂ2:1ë9U•ÆÙÝP ïÕ¾K^Yšò/.޶ှµãÖeþ¨À&kÃïÌ»ÄÄϼ“Cᾋû„Šb¾z‹ ±oé5dW;)›kfUüiËmÔôâÀ/´åºÏÉÚéE¿ÏÁ~ñø €6¿ v'È¢r§I£tGfß ÌÏÀþ~‘ø6ëú‘‡>èBÿ l/#\' #ЉUyÌŽïýpVáÿA°¿žÉTe#󛩾ŽE’§«ý±ù· ÞÉ5Ñì#=Îe÷ÓÂÓLåÄõüK©IÅþKœ.¶×ræ#Õ­4qð)ï¹$µ´’ÛÚ7¢ò jß¹ù2ÑO¾ÖúãÌ»£ mÐìbŠc$­GýÍõr›5fìçܾٙ9¾A–þŸkãûÄðÙÅEÆ&YNÃp•%ayôKnàbßåe¨eã=Ü]Ë?|@Õj}Ë{ÁË„ãp`’ʰ€²bCf8"â„æã”AŸþ+ÔÈbï®Í#ßywU •žÙx<“Pük@«B÷nA'^ú»V/áÁ‰"ç›Îš—däÀ½vÎmÀ6ͯ_†‰™¯ú‘ŸT"³xeE@ü;ß]½Iâ_ÚQþ@ØhuêŒõÛž5&”Ð-ÁM+tfîÅÕ=¦¦Óê tcÊ–G/èÑvîF×õøâ,‚brݹ‰æì«K–”‹6“(VYƨø¸Øš=ýjÀqq½s4‘ `ð‡ñ@-aÚR#¬­•ôdôd °Úæ/3Šè¼¼|ßçÝ/lKÞ/V?Â30Lì\Y34L¾·ºE’§æh‰æ»Ð#²5mÀÔq9Òí Ó…6‚€,.ñãŠ÷?HU· £š.ਨnfINlIeë‚£´äfa–§9Ô"÷–ºB¥ë({žª˜\E|îV÷WÔ¶¢cg.7$ÿGj¢iFáöL¸.[Mbñ6‘mK/JOÏÂο;J~uØ^|Ø<ÈN*Ëh¼×qÂun©&ÊÆMF’¹êÄéü ¼.ÇÂ"otT$ùM™ùñ­Uœ¨f¯$q§r,Q©þNýˆŠdj&‚‰âíX¿ÉI¬y^­eA²-ûÐ8ú!è'riÜÀÉ öFÇ 3ö‡Š§9Õñ„ùôq&^ ÌŽ="ݫ͆X§I([¬×ûâæ¸$^x‚HÜÍ€m÷Ó`âŽß©¥VG«äð/½³ˆ™àǽ8÷6ü6߯çCà ÀÒ[ @Lƒã Sy W›&?‡~ØÝQ*¾È`€2å¢HÚ ¹Ì]F™C`Bû6FÁ8–À¨Z›|¯ }ïŠíq3û¹£p—߬éû&2JgýiLô)ñÓqßä—ÕŠµþ„r¢Æ°IhÀ²ÿJnDt ªÂS’¨IŸîæ:—Ü6ë¥ûå} q>‡Åªï— PnL†2øóƱ›Aؼõƒþ’A`Æ­ÈÅÝ“I'ȃ%®Gc¿r˜³^°>ËœŒ-­Äª©¯w³èÓ¥L.2þ=š}¯$bÂãdAKÅpQ>ÿ­•ôdô ´Úö2HØêÞ`6Ö´TîrÕ`Òy88öòhzT'SݹžÄ T…—ìžÎ4д‚¯öVõ#éfÊ':Ã+Y6''çØ8ãð‚UŸ$¯n&9( ¦Ý2TõZë -/b R»JÉʰR”Ž©‘õ ¿ƒÅ@+RŸ–Ê(¼\A!èÿ%l^¶@ž™I9¼´³é_S§µ_‚*[pÓŠx4rø ÄM+m Âôƹ`[ÆNÈØˆEÏÂÆŸ…›?:Ð^|Ø?™Ò‡¹Æ7«8xSê¯I¹×¿ ñ­2ا"`aŽé€‰èëvi=pB*…úÇ´Õ{Ñß.ÔA/Ù€¥á—êåc.ÉÌ4Íqáæ¾x&ù0צa[-O.æÿ[ BgÁe¯º ݦ^À\ÎÍ„ÔÔp¤!d.·%›¢‰ÂYBÃÑAR‚ŒíwLÊå©„¾·Ðú&TðÒ×:U©Àô²À‰3_ìÆÊ8TÛ£,DÏ—tã†ÝÝîhñMîÌ=Ø=a±8oO…Á´V{-ó¡†`\hZÙg€¾E ºê‘¿f;z¯ÑdEqü¨!Ihsí&ŽÝHÁìlQŒIú=Ë|_Žòdÿo^8åɳÃü² ]x«¥ …sŒ~Õk¨òÅZ¬™Šnõ-§Åóæ$ù09å& S  Æ[!%+t¼Í[:ˆäpiI…º^Ì@`T7˜¼°ýò±~©hÌ"ô#rÛ>º…ZŠqñÓè@ä’²n›®cv+ƒ}¨/Ó­D=fbߙɜ빭•ôdô J´ûˆÆL‘â«ñ ùŠ÷º·Ýe·‹9×ü*e]:u™o 0¢{¢s€§B ’4”U›–¡bAõ9ïG‰'þÊkM„%Æ|7\úRšj^7v>ž–?…nÜA8Ó"”€!ù>ã±AªË ,à[êð!Ñ¡!îì+F Q$d]Û…lKŽ{£Æn·G”œ$K(¤«-/ ¢çå “íÞ›/ž§9£æïÇÚ—jd~ ¼¿¾¯ ýÓîÝšµªø~«Ì 14ÄPŸdÅl,I}SÏcÌlrTR8·zšÅ[#¹xçÇ»ù¾k« «~¸0 g(ö¬Ý|ß‹°Á½ Žå/­8–Øf¹ÈR¿¢2Ð@÷¯Kµt¸uäÕsY®ñëNûx·PöT*̉YŽ-SV¶CH²Y‚8SOI„jÒá$gÁýâDÙükÑEëùÍ>ßWLhÁ:"?ÐÊpºj试^0üë9.S HYÎïËŽùX¿ßŸG—çÒ”ü÷ ‹›8V{Ûowâ›; ÀZ4yÑ„{‘âé çàä` ×5S¦ÿHšÝ´¼\3Ѥ Ȱ,žÖA¿jVÓÝ\ñùúl¹óÏ ¶ÎñÕßHè}Ãù柖#¦ÊþÂñ?¢wÒÙÙÌl2†±9H_ ŸU½ùN*ø Õ~y%qÛ||}‹Y8µÕà÷Ÿ†v*$¥\kô},+DrJ='ÀUBSÔÑ«ÖàDïFÓ4x‰p ,´ü®br£fØþ@~½oÍ–ûe’ú™?1:_mØd¸í˜…bp¶’²îA¡oŠ£±¯ÊGL>ˬD&u»ÅÈ/¢"H!] ‡7CÐСt5žÙP÷ 9$ê¦EÒæ2!ª <]™–.8ûfü‰OBÜ@zœ_%ÄùëŠSÅÔdØWÛ¢Xèk‹~t'Ä'#‹}ªvÕ¶ì\S‚ qpMâ”Ù¢å1w\ù~óà–8¶]àö§ª‰J ãø°¨.‰ÏU¾[éßô[ÒOžFæSßíV –ZÞæ3¶ß8%†Ô˜Óþе-S¸½Žp:y²@¦ŠÙ¡X¯ GyŸ‹ŸîãÍÛ.¯ñJ8‘9Ô +µÀ©ö’¼ùtèß ò¨ÝŒBrl¹ÈÌQæO悌g’ÊÓiH¡I\ôX³¸Lž ±î¥v÷ °ç".°}Ö‡§`xl‹¿à`|eX†â¦ï.‚õmêÙ2J”;‰ñA_2MäsD _­ØÏèËnµÚýž«¾ÏR¿—ÏR:H¡¨‹ÂUVl$-)gk~ ýjlbå¥è‡CNÒµ´¼ô1•4Rct„’±u>Ð¥Ó*4ÆÖ5YNõ­h/ºQà…= …›®9"øtºüˉÆpb9ç} ¶V‹ §,}Õ2ŽI <{Ñ•(Fì¼Æ ‘¹ž¡<³3@$CûŠ[Ö.Žøƒ&Hó ÎÔÁvþj˜h.££,ã%;9S Ño)¾µ)}Kíâ½ð0ío±,ñO•Ò¼(™Ähs$úy­%&Ç‹¾Î½!8)»oË©â¥^ý ê3O­uí¤Q¼äƒaÇ8Rܘ‚ó…4â@Ÿ‚ôÇŸUm}w Eñ;ãp6!m±Ãáâõ9%»N(¿ÿsZ"y2rÚðvdíþƒØlT¯Æí×ÿqE=<™ÞF<€ÅƒpョޏsHHË Ñ… ÁnËN§‚õ¨æSÄìffÎôâ Ÿ 3´qÊ›¸´Ýõ¢S]¤[–¼ ‹w¥K~„îäv`äþƒœ 1ôœ¬•ûKؘqƒZ*¦iFÐUUpטY˜”CMÐt«™H¾<·rýx€”àö˜‹‡É™çK²âúö‰ µ/ŸTÊh#©ÐÿhÉÓ¹¹ãµF"ز£U›ðJ§xe–´ˆšq«{NÒ¿Ó© ü¸ø7áÇИǰ7C™ÒɇÔM¢££L¬°dt£"‘~¹6ÂhåÔùK…üõëN2ÓìàA¯KšÚÑ3ˆ- jô¼ X¢çEÍJ\;Cv÷! ¡”¿ÔØê6DEm°áüSçÛ`ÿÌYP¸Ü§’ÃÇ•!†ò$º.²´CZÄ Ð[î½Ô„Uåh"[t®ü¿©üÉn"4à áéöÑäTZâÖѵSs|°‹kû¼ RJ:Sê€^ŽlÆQ‹ yý žßÿùZË×r°Øy¿¹7íÝÊ—r›<ºäŽúÉæ©ÝEL¿5»[QP™ÏÊ·pµ $ˆç¢«—OÛ[–núðNzìíûñÝu:¦>09¶H†õ\(m ŠÛñ¹:ŸßŸNçÔüú‹›8V{M¬®&5‡ˆ2"Xø¤?Œ.á8—7œ‹!þ·À³òÇµìØ‹» ÛSÊ™Dï¹Px\§…'Ü š¦€E@¥«Ä ·RMX†²àW%'ôta¸dàÿM÷¦Nkw/YKÖ˜©CÔàR°³À8ܽú¶OŒöV+a ç\«oûÞ-¢ÂDÑ,Ï™‚X÷÷5n‚4vèh®ºÂg5Q,~cŽœ­*ºñ{•¼¡@ÛÀ®^ù B81È\¡o¡ÀR¦­xAx1™ålI#¼›ÇâtŒoŠ“UðE5cMÌ5G¥qK$áÌäÚ«þm>6Ãfb"åÃÙ„Ó *‡tÎ©àØ“Ÿ¾¯êµˆ8¹diDá0žëwìǽ"éž¼öaå‹mŸoØ—Ò{ øG(A „Îóo6¿c;×SÅ#J·:Œ÷åý©üôœs¸»ŸÏ–Ø!¹ÍÆ;ñ°š#ïþ驎ðÛÐzå#]Z«ùÛ˜:6%{¬±1ÊT¦EœP7_ョޏsGò*AöÊï¥:Cc=˜ævIh`ôëY½"=½2ʵm­{]ñbò>ypÎÕìrêðÞYVý!´1þìºd±q!˜PýåJ~¦3-ŸpMó£ëìé_ì~éUåmn(¦5DÜqps ö´ÓÄDy‹¶ÖFT³Ëjh¾Q8VCŸ'½Y‰Ae 4üÄP ‘&Ô/“5÷úÌ~3?ðôE'ñ[û FýÄZgK'ÔUßµ%³]óQSÓÀ3%c­ º4vK®~wî0'q“²eAÍÌÁõ0Go’ÞÏÙÕ—Ø'kOHRµX©ŠR›‰«<̘ªžÒµðǵ‡ÜÍg£ öÅÞK;›ë®.[%ƒ<Õv iµ|0^)”aí„üÖ­ù¼×¯¦)D†‹ãµ4P59öïc£YðR\2ŠKjóº sd'RJSɦ4‡âÊDòöhœ¥5ÇÈ-#‰ä^xX\oóœB[_Ö·Öœ[ô8>òЗòCî΃r7ò)úA*‘¤‚¡å4£Óç pçzÞî¾|Xäˆ]¼2´„7#ÕƒR£þ·_ÿ$/)„õE0Ä&˜Mœ«2ÔÐJÇ`åÇWU:­ë—ÊGR»Ä=›UnÖ…ÔÙ./+WߟL7çÓ\üú‹›8V{Û,lð]wïå %ÿz|©ÃƒG÷ï>Ké¶IFŽ 0=€U“m°ïLÔ¶Al’n¯Þö0º *æý×\ÚÙQ=Z>m—Ÿq.7ˆ¡vs§~¹a °³[dHýJ »~¶dYíL¬Á·*eج*À'îðZ%Á&ù” eªI˜AݳʓȨÞråïh„=Ô„°%~|µÝòg¦×QvÚgyåkÑÅÃLì'•xW¸6&ìe«]ˆ–9˜>jÕÑR¼žÎPgŽd¢w߃øZæÞ±$FhŽ«}‚!`VR¯âEÀVøñs†þã1Ù9Iõåa¬xª‘Å–ðE7?(‡ûÅ kÀô8!’k: {‘Œïü«¡õÙóókýžgêul¯ÛO ¥½J‡*ý¢l!iôßá¦>Ñ#%—‡ï  ÙùÝ»ÙÙ%úåù’”é4H/~¦Ú«@=Lx‹xâÆÚM}ãÝ·Tºv\gÑý·ã*ó_øóTcdjªŒIžÑ^¥_¬Da»> »úDà€€Ê{Gê1DÜÏø7¸’/­8¾8¼âÈ¡Þðô×ÁョޏsGò*BY‹C:¸­³fÿ ~ýB¤$—" ßæržìˆŽK€„)æÔ3PÚ ^æ©m«Þmtœ2•õâþ ^Qãò0‰ì­Í/1èyU2‹Êp•õ¬é¬^…¡Á0#ø/+› ‹½™ùЦ»Ã(.t¿-‘8j»œ ÃÀüøPiþ”ÔÍmýdŠ«³76ù‘xÔh«7 Òp¹é꺲j­cçÑa!ÚÎý^FSìûlÁ]/kóPe$ë|8sì¥ÁÍÎ&ºi(µW´ ðW?¢¯¦d¢ø>“þ—-ÁBmBúJ‚È2ÂÑ!É)†”¿ûÑA÷!ç¡§—,=&”–Ȫ×v´ûm)þDu®å“éo” cÛ.ËúªŸÎÄ@…„ÔhEl&ó€7Îù$6ó\LýPíjãrßÝÂIòÄçMÞ«Ôaê?ÇFµš_(å­æˆ† ü{ñowµj*øcZ‰ìv‚ãœEÙ«!ü“„r]½*ÁѪ3Íð†©óqoª…&NŸÜÓ:Õß»g"T¦‚¤‚è™ýV´[ 4†1(vù¨P)r~ÿk±ÓîÓïÇ.«ŸMô’-é¬wNð-ì?ØFx‰r­éÍÖâôCƒ‰ l—ö¡˜ó‡ûõtËn^›¸Dj‰iZ°ÏÇÛUGÛQÇàÊŽWf|ú¯vÕ2s‘bþè e?5o °j)&,LÔÒƒ T7……£Ôê5dHv%áVA2ïl@WùˈÓÝxøî´èÛÍåŒÁH]×Íê[¤Ø¨÷äͧI“à¥a§´}-ÓIsE§“ËJë¶R‰äÎtµ)Øêê”FwÝ? Úí†Ÿî» ”4‹]¸þŠˆ•ÍèÊX‰hÅ3ûýc=Ö9š¦§'õnÅE»1(­OY#tõ¦Ê¢}È`HÂÅ-/zlz0í¨VŒ]Âh£²eDÒ—. µÔ®`<–Ø !OQ˜Ö]²eËоåë€ëÏÝ E¨+ÉTiÙ»D\Ž~%äýa;‹—-t0ŠOpÕuÆ?`Õ>o’zÌLã‰|d P8­þr²˜”w &”$™H“ØÚÌs œ@‚&TÚ0÷W_ˆgpGZ‹'šL<ìÝ„Û-HåÉúÖä3°ýyËWÚi…Ë—H'!Ͷtð!¦ø„g™oäïÎñ¥uA´cêã_ßA¶r)AgñR̀Ǹîaž‰"Mf<5,vL‹Ïߟ² ùûGáé´Ì}«„¬YYŸ« ÔNТ óÞp‡ ²¨ ž€Ï{Þâ¥ôÂ÷[Î&¢ë±Â¡M^ËC•@ö³y'8öD¸é9Ö {£4›WasuúZ<6»­{ÿy!¯÷˜‚ψ%Òˆ§mÁ\Æ]Ì©b߇ézÞ¥4× ÿ?‘÷h€5¿÷þb¹Oøñ¼áRI”‹Sÿ9¾ÒSA pwnuVÿª‡AO86pm×½´yxʈ-÷{ ½ª )Œ8"N¿ÆW¶!iß3}í~á%lšƒóëòÓßK}è’wµ5½³Fç#Žbb’òpþ³@ÃãÇ+݇NמʬZ`JHrËÞÞƒÉBÿ!»m·‘`Oüõ½í«°ŒvYœ»ó“O»†‘O½T /БY8ñîžÀCVJ@ê©î7´‹_Ìe=ƒQ^’ï¡¢6¨­c̾óOŒiMÛiïm”ÌS> н%Òš3Þ'ûÂëŸ%JÎÑ3WtJ!%(Oì¢ïšl›•Á‚…ÃBàÙeøïSãírø„ ¹å~ÝöÕ±í¨“_è_P$"Árb>6¸c,”;8–ý¾á=>'`^O¸¹§z5 þ/‰àó1yÝÿ¼£ï]³MMàÅáö“íZž>Œö¡oþkü ÆŠ.þ,Ôv]¿Çs > >Òå’i²€åÇÒ™&o֙¤&ù_Y]},Ñ¢OFOm`ÝÔƒú” ±7q4»±—í/ž9GÿaÎ(µ0•ÿ¡ÕÍlš@r¹I!°ö1Á”¢=…¢BsüV1!ÉÙ€¨»fÑë/Æ®Ôn35ôX ù#~›UvzÂMjÈt!x•ß…,˳{«~¶Ôb šLҵś 0 .bk'ò’®!WTÅÑoM*‘­Ž«\ÅG˜R&˜OXC,M¹WUª‹Ž¶Ë¶ú#}^(èãg1 F/<¶9GvŠ_õW÷ÿ,=´e£“‚æW²ÓN@áu°”j Q\~/ÃI@8­;Ù”LÿxnøBP"4õ˜Äª8%^2 ÔÞP¯#'Ãì¯ËmåÕÜɹ£ûšÂåZ‡Q€zð ^ÐøÜн*ijöNÌeYóB\™¢+©E«.(i»Šjˆ§6°,¼;†ÎéܯêŽw!˜/èx‚iâlR,§¶ÚQp3+F¢g.eÙœÊvFéÛà#ñ»h±ËgF¼¶z¦°Äq19¶àͰîF®:-oÕ׌K.ª¯LWË19àèûYZ&XzqÛ«bσ[9§¨ZXÓ¥ÉÍNo ºË!ü¶¤ÌΆ8'.*# áîak1ý<]À ´ù¶ ÜÏK0ÑM,’Ž$Õdê5v[ÈétÈà ß>’Žçð²§^õsYïFièk'MŠÒqÍøò…ŒyD÷ib3ÌÍJ# îUÜÀ33œ¡€ÜßJt¤s¡rú‹þLE­H Õ¡ã/Ñ*«xí3dÝ™À÷?)š?I¶M)®ÀœM¤cY{“§ºk„ApàR­¯ŽU#sÌ9‘Ã[¹+Òø¡¶}}PC.¹I8+Ì-5o„@sþbU7Wá¨øn¥Ûý(#t„e»“«—5ÝR¸CÞõt'GcÍ/Sˆ/£h[‚fÔÄša_áBŒkð)Hi¶Ë PÑã>àêùôµu§ <ù…þÎúQE NkìÀó] =†I¬äkè2?l{ÈT¿^‚cÆ–d”2¢7£ñËØ(HêÁŒ¼Û–Ñ%ï¼ šÂ)#“~*§ {7^ 4Vè<ËFV|‡Øeº=Tå,U(¾ìÏІEìt²DqÌ3zZw¿e´7Jk’¿tÓÕgH§sµô3t´²€Ñ[Ë·Ãgm‚žïe}ø‰¥¼÷]¢!Ô Nœ™ }=û¿øXXõ0oºŠIËÒÕ;ã<ìÊðßSfú’ñÑ0ƒ˜wž‘ EÝ«*î ­­íbkqº — E1òO¿”e¿âÙM¥X˜¯¶xXâ„@NŒ•5H^šÝ²p.ØÄÈ¡²Ðl¡‡Ç yhL”8Œ]'Öº¦ß`…+Aïæ#îäD!CÒ'«¡?‚~–m³›Ï$ÙÏÅ©5ânžNàæä¢E‹ð¯órùõõŸjQ£dVxäÞ¿i'ȇž6£‘/¸K’½v~ +JÑ Û¼¶ T™>]¦*,’^k¼õ;£r8Íèm)?Ö;¤å©œ,ígn®y¿ª¸kø[þ ¦é â…9fÑ}&EŽ åpX},fÛ;æ?ÿY÷' ËMV˜Ÿž+ý ã{Ÿ!8õfÆ;MD e-þ@']š“˜'Œf*KYä™»¢ ®±]+À÷x߯J:v±­+W!Íì†æ¼ﳺäÁM¢É`Ãy®g¥šèm&PG '¹!@åñécÒr¨[ǧ ,Ä8Œ¼ïí©’7øa-¨!‚Ò(¬›ÂêÛ&túÄ…´mˆ1[”\dáEùàhï3+öªáû’}H7èúüŒ›B8¯×§š}sö“–tñUZ¬‚J\áØâH” OÐÒ¨¹ê8 ¼f‘EaxŠÛ´…üñHO’¢v9ùrøL3f¡è[•´ä~—rÅ/ïØ~¶Îîèß •ZR¢eÊÍN…"œ„«òà4ò}°3ÜqvFðΫ„þ¨¯&H·‚¹ØÛ=ǃY–{ãUǼ'ÈCÝáÕÁC.<ú!:7dÚÉ–3²’pÿn·K®œzl½_@Òk=/нÖÐsЖ6³!à”¸ƒ©}eÐ%ŸòDäx×-ëX[uÙ]Û°b:!Ç=é Â4lmüwmº=7.A'Ñï6ë#uåÛ´‹å/Ü9NiöFGùJ;E'©Š2;´ñ+…Jîµâ3îLãdý}[&zÃ!à-9¿ÿz4qØy?NU+Ð-#Üá ñÏ~᥽t:#VlUPxNä%ûiëa»Tíè-Ø|¨YÅ]Λ¨©±¦NºJ[\kaIéôÔHi—Q2z±2_yš…ÿÌÈÐtüRôû *KH“²Ë?vú=1)fA때mñ±¶'Ý[`rÊØ|,Ela£ÚÔ=W$/Œß õñz¤˜Ül£¶0‘c¢Ô˜‹*f È±ÝØQ),Å$ó\¦{'º~ÛX˜o×eÑo›4êD Š1Žš¤½‡>½g†N-¯Â|2É0ðóÜ—rjÍÝhÈþ}Š*æVŸ#yºN0{ᣛ¿”¨CVÊŒæGæð±ô§*&Þ-HŠóƒ˜w°ë`ª‘1Ñ„‹Øÿ%}0ÌÂ}€”n’M²×:~!Rç…ÝÞNò3ӎ̯ö• 7¹YK}uEH’^¹¤öÈpT¨cvîáÞ³>¹Wð #zå'ðÚn‚P4*5ÑT:`*ZÍâ„"Û1ës!fSC^ý£1.;½üTöÏý„Z\Xäö¦{®1ó½ÊÃ.:„¥I#jûS°l)nNt!øm7àJbQoÈ ~ô0tËýüàjxûò³Aßg’†¬C‚yl ¯C—Šßx)׬ٔ"Q³âmS€ª|€'­I&fTxÝxrì¢ ‡Çí¦0%œoeÊß²&‹”Z;°t Ú©¸?â·Ÿ·—ý˜LŸüÌ\ @ΗDãñ²lŸb›,t5ß©¸ÛZÚÑ`Ô¥Øu(éÜlì…mü“ükHÈe–|­N’¨î¤þÆý&íhÎ\ñW·MÔÝòwUž–c¾Ôz|Š,µÿ­Š(±4j²Ej–”JØ'ìÚ5d£8JOI/¢l·b»ÍÒük˜j»ØCDn:ú‡®Ò•UUUWtÓ@ýÔÕ/ö  (°ó°?+©- ÇÓZGiAW*kü±Âp˜L=$Iç›…68ˆ¥¿‚œ¿ø‹ ®“hiäU¿($¦¢.4yßM¦O×rÖÔw禟LÆCúÜ™´™Úö IW¥,o¤O;$â;(§ v¾û–Tð" 7ÌüŠ?"õ@ä88cŸ´m‚±m.U;—ðç4ìˆ_ýô1ÕÛ§übÚPàŸšå¼}G1p‰ÙñO4¸˜ÝƲ­®cк—u,_m¢m”­_y!àm6 候ìÆõ"<Ùœ(¸Ê-ë>y©‹).ÓpÙ={?‹L  n{GνÂØªÒûõr‚.Y/&·Úë¶“#/¤ÒQCt‚ÐÝßþ·—,â0Ó 5V±ÄRq¼ 4GyÚ&‰,c…𙉳˜—’b'¡Î„£Ýõq£ µHú½Bâ‘ç:ç4ˆ™©ŠÂ1Ýœ”5îCd«ðDÖî3™¥™iZ¥œÕ9åHhÿ™Ae”Èxkd²9"YŽ× ZFKm¼) µF›ê9¬A±„‡Ö3L#«%#‡ ÇÌú¿~0c³?pÅqÿ=ê‚>{?wqîÉÍœ’$Ô`?t‰ø}HâpäÉ踗~-FWøæ²äv0ߤƒ¶-ñÝW‰Á ÑÈ¿îßáÏ›1Hä£ÌêÅRO”N«V€ ïýË©ƒx§=³(x=èfòœ„üÏÛK_°D¾“AŽ.,Êù_@ú3h¢ÎÑêAÜáé~Æ ‘½ Gd÷* µæ»sOƒþüG˜hÑðTèÿyÜùdü†¹¬-Ñnº¡X€QàÇΦofê^ FdþNåuê]»a¹íˆ'È\Õ^ý5ûw-V†€­€ª‰ýoâå“NŠEú0ï°‚ù“Ï­7ÚU#Š u`Q‘Âq#¾×À§óïvᣳƒðQ§9 UÎ;x¬;IK7ämèQuæ®m¤C~¹ÜssócL$‰~<=Ÿ0Ö*ªý/ª?Ôè´W»øõhÅ_ÍLL9ë)Åc“ôÑæJÙÃZ-ì‚”Œ+ îuyoèÛmÇÖ\·dÝ^N¹Ô(8må†ð².¼[6ny Ä00æq¢“Õ¦ú«íE1\j 4‰·Ä?S_žÙ妧ÎÁ8CÐÓ:!Ô:Ë¥FÀ "`Õì茭eü-ÂÏ”!ÌqÆåÌa€qëYäÈìj×ÂÄ{É ­/)¾]mÊ=ûÔzb´œ§K%+û!…‹u˜kðeBÛµnÙñ·J¬Õs!u‹7B–0é­ˆ¼ÙeÉ " <S›ÓÆcwÿ­ˆw)4t7 yŽÌ8í?x¡„¦àzõÔ–•ÏíŽJÁlÏ )?9õUrÏq ðã!*%9ûhõ þ¤û%#s>ô=½ÝÞ«§—ƽÚ×ÄU¿»¿*þ­&ä28ìi[‘Ò2óÑ“'spLŠ9§îÍíLª£ü{I¡rTŸ¹áü¿µŽêå[hրĺÅÝâxÐuj—}pŽDßhc†s¼¸ÿqìÜ"ü^/Ùé’:œ.Ïs[Õqù]Ú瀠9&ˆÐ=DSCˆÀ´DjR"ä/ÄŽ. 3îÔÒ.ÌHMÙƒŠs×üSߟµùûaGáêæÌ}«„¬YYŸª®¤›ÉÜõ¤ ùþïÝZJL«Ý—æ¦6×/Qz¢óúK[êÜ8Qm£V–·ïш‹b~`ÈŒ *¸±I bkÇ€šk^Bù‰6%xÙhæ­÷µ®ß¹p¡‡ªùÖ=›ñ²ù|Zg±ŒW•qà4œZ˧^ýøU_ðQŸœ×£¢ŒòŒÌ|¹,ý$ËeÌ@R7-­þ:í‘Ëßv! ±krꟚyPT×Nð1 Eº“!}Ô{ƒù@K‡t[8¬ÔŽ£„ì“”™öðÙü¡‰6&ãú†Øü«c¥û}—ÀøI¾ 4‚c¥¯»]ÂçÞw]Š_JÑÍß;‰®ÀÔÉã2nYÊ:ý/§è¨ñÇî¾< J5µi¿j~Wcðxhfû†à3¼ ÊbëH¢Â•ÒÏ’i!s£ð§ÚÆúwÕɃ ß Eˆ&À}DŒP)1)yóÅ®$ŒïR%Èa'H¯ ÜêÓh3Ï lN¾^3§w\*õ;ê±ØFNÛc2Gãïc&Ì?="¶UœÇEïI*#wæ |Ú³ ˜v;.i)•™ý.'Í›‚³ESBzý7èB[sJ”È Ð¯njòO•~~! `uÌ^²&PdIw¶øl¥„è[0ì#ŽŠ}ÓL ùZeˆ§îZŽõÆÀý'“#!8°™À«^u)F¬+á£j)]iÞ>¡<‚+ÁÓrZÔD?ëé¹ôGaÝ‚‚ã:zÁ”£š$‡?)x•|ÛìÅD°ƒÞX*ÂïâÍHãó^®^‰N!Œ¾¸ÔMˆF=Ø:ÒáñyVëZ=œ›X¾Áît¿ÓpÃD…ýd¤Š(tx‹ÐpbžKÿË‚}Ôw4NŸ ¡<‘NÙž}t»wp’æAíšiy¼4¡x¿–ç‡ ¿XTA0²á ¡¹ÎEÉ1/ÇÌ)K±Û 2í›:“ì˳{«1U¥¶½ÐRH4õ3¤ß@:5ר¶É䉅É+8bè·¦a%× ŸØ¥þ»;ŠX°i’©!ì5hCdETžŸÀ¦Ñuoôµ!…ÑÆï_61™'~äÿQÎùT[Ø2 MÈ„u°”iá/à›(Õd.ɯ’Ù¦ç͹¨~bMŒ#ͺ›ßºó}úU è¼é/Ï}|ª’OO‡ª(üÚFñÏç@0ž†3óYdÁw™ÇàŸ Üæm –—iɼî{ÃEýN„}îѺ§ ±Q‘e˜kÆZ}¦-ßÿFEÖ0‹ª{ÁVOrÏRØë5øL&üð4…ÍÌý†èÐÙ6èoâ˹v—¸ÕD&“õß~V‡†H!ð”îìwB&¦»’Xè‚Àøú6ø³Ö‚oÿ$¿MìÈ÷+áu†v“Bp œNÀ^ŽÀEƆŸêúD¢J‰'¬ÊôBy(½_&ôÇEÛfÌ:Ÿ½fðâ¨]NF&½‰ó)>ÌÈëñ¦ÛPb¯ÙÛëòO_‰©H$ڋدiLŒo¼LŽ‚¢`â`¯At!ø>{n †Uî-uªz~l¦÷Ê­‚†%;þ¬±\%½¥U¿Ó(*|%PvÏg>±iqX 0b–)ûâ(-ÃùŸ@ÁŽcGS¸÷®ebòprÉÇ5iU ¾³dÛ§kœô\µ rC@35‡åÌ”&bûšk=/нÖЋ“ùù¡{( d™vK €á0 € Ð6˜¾vã;#dê1ó%õwéÑ¡·nŽ+¶oØ3ÆE¸OhµÄ2º¬P'’ Ö7YŽWëC’Í#ALæ—xåjš,à]gì~“õ, áR»­xŒü½„[C?vkߣ-“ç©b<ˆhXö‹ܲª§ÿúå&ÝÓ—BšñÐ%é]ý»)ï>C…´[‚!Òs:íé•C®tõlºôR´:_RÚí|ßÝfí W꤅&Þ€uü‹ßÚèu{¬~>¾¨µ¼Ù°–&·ä867!+­þ5#ù·9ºÛ³-^©¹µŒ"@¥„>×VŸXz1 Pضíh‹¹–úé­Ÿî×’åïâŸÊ¬P>‚µ<¾!ïRS‰ƒ‰›ß '˜‚wsŒbo”Wd–Ì$H©tLåð/J¨Í?—ˆ[/ ‘¥ÄÁE—¶þnd3¸¥S ñ’¾£ä¹¦Ò஑ÏnI’¦(ÔŽj¶xœ-Ù×ìÕÄ&•é=g©êÖQ¿_4|R#Q=Âi€$«"šìòë|Úg2¾bš¹D*©É'óbÇ~Ü鹊F®rÙõæ"äƒG™äõìÏþ¹Ç? ¹*iu+²WnÍ™™—múŸ¿¡K>§A±¼]¢ ³g…CÕQ9§ÑøKö?¬š‡Æ6Éï”4À#3Ê båuÀfLBœú_öf4j¯O. Oƒ˜€GXœ4rCo~ Õǽ°oX.¡Ü%U§…Ú®e R.ý/pÿ \Å .­Hº^%áNbspß¿ÓNEq¯´®«LÿH–b§ëñ@ÌÎ ®X÷t©è D--øå4êP Z¡59Í2Tv_»r¿4~ûˆRë¯ÏX,gü6UJUê0doÜ’Û,3ýý¢‰ ŠaüOuçIé бη {#…¶D€æªL¥L¾Æ7ȸeÒ[»‰È¿Hn8¯¿ýÙv0=Çú$¾_ƒgÿ!, ‡ Í¿Û÷Ú¹|É[MçÓ'"¿&Z}ä,ìšY¸=Ÿï•!F>ëyX—‰ÍæW¬Áb ñôž›ºßë–`qî¿8-‡¡‰Vr¬fÿkêANWwQGV9Üôƒ9Ý ­Je¿rMz|áàwÌðvâ¨óv“úôï¡Ý]Ä~TïKígô]¥*ªª¸;¦š¶Úë C5µ¨$§<©ÅŸ K„ê¢ú!cE$Áéc²-†¤PG× 9œÌR†v¤9i¤µàhœŠK½Rˆ)LÆCúÜ™:VëÈùWÔJ„„¬rbÜo‹ctv  °z-8äfƾ•gDVMÙK [癸bbUP‘ë-)?Å("Ð=îÄôÒ°µÄסsKl3nH’u@EÕ §ùû+šíÅß·#£œà…—#’¹;c®ñJsH’DU{H\:ÍÉî¥Ç0ÚŠIÔò.©yèD”Z‘þ‹!ƒÐ ÞT›Ô~nThÆ~c1¦£óyÄ**€t0)nçÊ0\mtøèi€i>ù߸P#5•%fKÃåæËys†´´õ1&†a6f×/˜¼pj¬#Lc±t´õxOÊüŸƒ TûRbÄz@Ñ>'ˆaå†5 "é‡/ïzs±¥ÖÁ®³W}‡7n*ÃU‘÷™›líô™Ú”] Ëk‚d±60¥îdøTÕÂ^¤Ã3ïÄ£ŸÏÆÏ’æm^‡ë¾0;#Ù·mgŒsýHvGùÎp1ÀÓûŽQÐÓ_h¡ øŽ•vÊfûùI4¯³º ìøZs"ôuß ½š¨Ê‚¬ppæÈh·æføÕ+tÓÍ·¸hƒ°±-™^gPGç Ñ™¶o2(oßÚ±|F´L|òÓEë(B 4¯y-ô^F]Þ»£é{+ʆ$öÏ :Ÿ–Ž9\žªßºÚÎF(,ý‘ubÙF)"#!4À†QûolJÑÊ oB×¼ÞJì›Ö8û`ŽdêAóŽ.,Ë ù"3—M9ë›|Ú(Ê@¸!Á‚cNsoBrˆ ܧΩ|_šëØkEËÝ7–‰›ƒ…Fb¼âsºz44/„bÙ¹S{mÄÞ¨×vÿa….™†Ãõ<è¢%_º‚9®ÍIÙüçrBÀ3ůc·Õ\œÚ "Ö©—úë•zà¼U䎗êE Í Ë2îw?¯¬’8+Ë'ö6¾ë5tP‘œwR®&E†ë²Ñ[i$š¼ÕÍ´ý¢*‘úpnvŠ‹©RB¬'Žô(J¾ÉÂSdª¼1XR¦pÜzœ›lñÍb-˜ö-Ô¡mxoá õ’—ùÑ`Rköïy îj"³ÆÜ ®ët¾q­KƒšjQ脜éÐ?ÇU` ]NB—Mø²3[ã!íä[´EÍ^ó{GÓz‹-iñ•éÓtÄ~¼¯‚ ‡µAš?ÑK/pYonã}A‹œŒb¼s0Õ¼2ù `@'ÂÈø*I’ùô57®ˆÏQ@.|õÀ©›#,èÏm§]ª{·ýë’T![ª¼µðf«65·€Üõuq÷[ulWQÌb€aètŸÂ«aé3$:o’îİx¥Ò_é1k¯[ñ.ëʬ3”4¶!ã#2‚©±ðš×¶ÿCÎU¿Ü¶¥äýiµ¯;)oŒt÷¨-ú•ø£žûÄà‚s7ð„ÖÿBž–.’¿%Î'Ï’}£*”-_˜mZñvåÑ8­›Ê~›£Ê£¥› >ùô*¾z¾É—Îáß`wö ³¼0ŒEŸ<ãž\Ž·gùƒ,ýÑquÌ29˜L z’Ùµp >Æè,™Væøü[bÅ‚‘d$wöR[µ(z§ìjo%.Äžg‹Q}9 è·Qí÷S ¤SÚ˪JE]¡^´9çØfIŸÿŠe–(êì> ßSé^LZ‡8í‰c#Øžúvµ– hŽAwÊ›Íÿ1¿·—ǵeġۻ棌Ý:(#@ê;|sÑ~æÆy›c(½‘ƒc§ú8)Í <ÄdD¹L1–ÓÜE?âï!YÒð ŸéÀ–óþz-¨´.£f;š@Z˜ߟ³]ùû:Çáê(Ì}«„¬YYŸ« ÔNТ  «‘y>D[Ÿ"A²p›Šô×õÌ‚1µ»z?¯È¦ÏPãÇ®ñD·0Á­×¥°zâå¹ѱ(àfþ÷zÍ-¿–haÁÖ,÷j±‚1þ^Ö†‘%äV[èÛÊFÙøÛR¿®°Ö )GLŽ!W«V<æpÞæ!sšÔºzã/p¾!…®ˆ!…àT(i2=éI•0F] Wc6;Ò-O´”sQ×ÿ#ÝŒSŒëñʄÅ,«8ª)ÚjXKÅÌR¦ "þ ïfaJ…m#…4ÿ=þCÙ5O´!½H`ØP%Å„”<eŸ©GƒvªÜ ±LUÍͱXðKLqÛað¾Ë§™|é¿Âìü\WOÂsOÐk¢vŽ·ºÎ"EZ®ŸdKýØiHÕî˜0ÑÇtÕ´œ›à¹"e™táòû} RîC«J—*ŒÈò(…½?¦¾(¦ÂƒðÓ‚Ÿö¨]żÛþÏB$?x~)ž­¸÷}øD„wpÌÄËÄ”Mza¤á»Õ:íÓ,ëÕ"w—É{º­M=±A½WwÝ—ýšÝÉXæ—Ê… 7¤'©ÎXU$ÝØP¥/ãîs%¯÷ÄU#_‘K¿`? /ñe:¹l¶—`Ü•©QýÃÚ1:¶¾eA¢!XÀÇ}?Ië¿õ[&z™:­²ƒzCDŽ=yz49ªO·l¹¡;ß³+ôÿ+å_Ë÷<æ®Ët"6èWš¿êgý'8‡mÚõ ¤Çs1åP]‚~7.ik]…°@k/ â» Ï8Ú2º2M­ìLØÖý}|Jð¤ÈLË4YjƒBZ1Ì>çÉp„Ñæï>™ÙkÅM.°¶€ûv›C(ïV$eœY©–0ìÎV—#ôÚ£(Còjô%Móœû^ô+yÎÐ8B¹VÆ!?øXXõ0oºŠId&owL*Ã/œAÉÎ¥ŸJ?}áѯ‚ 䱤‡šõ¦O{J&fD(³Pó³(±ÞøV¸K½Öùäúz=E‚» ³Óòìäļ + syÉE„oñ–íóÕ%TŽñêJšÒ¶d}’ FD´\ô7ÓC3mŸþ-þhq2âQß“6ZQ?1ŠQñ ;øªi5—ø7þñ2‰M’ËÇõʤf<f—¯¾#hQÑçný‚§žaÀ¥W|ЀºüÀÄ&ˆ‰çÁ$üjÀízŽa¾†'¹£r›èÞ/lFÑ޶pÅ,» ñQ-Ã),ŠKZÐÛei—éÝp„ ämжX©ˆú²Xr~vÑ5·?wyuWƒÏÌÛ¿žz¤?f_  Þ…«8â[ñ©Óì.½ó`p­Äÿ%+Ó$óþKç±ÆÇ¢ê‘~ñŸXì¥]ù¨-ã\{ Ö Ÿko_%Éá¯;û3¿kyÁànñhL¢ç|ñšUÖfFÂà´„ÀNºà/’ýnŽÐäyÒ™Ÿ}Ù–<Àu)&m¼O4·ƒiùW;H¬¬ÃS­-îk3ŠrU ^ý$—q¢kEj‰¬¬ˆ”Ë8ñ|fÿ9ï5l¤ê!„ûí3¼Pn¡y­¡ŠÐÏ/”˽&ÑuGGËwÒhÿøëÛ1^Ø?èke3 ²7¯ô…¦‘>¤²LQåà]LÔ}¤~\ñ›Ç•ul߬¸¶cJ>…È+¶öÛWñ(»wDZôÂn{`v5cض©Èn4ä:fÔ²!‹ÎK³Fýî.<×<+A °Qüm—‹½í_ïìÉ @3€7~Þ7MÚDÎyoZk«»D†ìòðØš«0ê6Ek Áœ…àú²!žžÛ‡³Öðò_æHx?-°åÅ»E±d|¤dDYª²©V>úAP:l•U‡Ð“sÃzyBrl6Ô…ƒ‘™È«Ÿç]V/èð#®ÝÒƒ±z1!ÚGHÝd}ƧwåŸßÁ™Bz©Ö©I(Îþ!’\»:.Ñb-žµüY¶‡ôT*-€„®°»¼Æh°‰ðÄÍš7™÷ ˆ}oýÃÑõƒ íí–ªLäSјë‹·²6çƒ*Œ>»*¦ðámV³èGq†ñ¤ZÈb´Ùi=Ý0Îõöã;ÉûªÒþ.ÍEtLO™—g‰¾Š]î ö…‡¶Ofç~Ëñáðáöà¡C¡uÅèö¹” –ÜEf³4q`*Á%ÊÔã!r%°µñ’çÀA:†?ž.vžµ¨äôU©àÕñz}s6® ?³±€òVû I´‘XE.ßNsÅ4m]ß aF¢RiZ¤C4¹þeÛM¿šíòœÖØU´èÜj¢ƒ*F›K‚ºG=©f·˜ »š­ž'³ötäWÇRÛ>Öᥬãj=»A³‡ ævÇk,3‘Ð(„•K…ÁN^M9¡Óÿ'µÎ\Å5rˆUR#‡Oÿï„Ú FŠý…¸ý6³:õ>øÿqpC<ë#þßQf¿D\ÒJ>s]jH] ¬â`¹.)XdáqÃddåDš6P¾gó1ÈvÀãíö¥ûêÐqº^Á30½2‘ü8º¥šdº¦ãÜ=l’¥,  ê‚ðî_ªÚÕ*ï“ÀvUî„cSµ~MTY’yGh`=ÜâX_kCïÎódû8 #‘êq.Æ;_ëà¾B eRKLèo€~ćè-Y‘õF9æ9‚¾m«óÕ—ó º‹/ ¢+ÌvÍïWÖ/¨¶gâ¥Ç7׬”B(€]pý%(ÊrÞZRnÏŠ‘ Y‘("¢W~n*S–,zVÖ # Ò&©œž i¹tÂ"¤ú*i)Ÿlk*•¿9k0 óÀÐÌ$Né„2Т­jíHoÑ»d·úÑ<ƒÁLO|LÎYÔ=¿ƒ† 䨥õ狾ǡFVЧIS£$.›Ì¯!Fl}MÝoõË08õ¤F\a§`‹èƒ 7ˆŒ[;j™ÊßèÊf9ÈÂ_¹opÐ2rsc¶DR±IK¯Ñ¿Æžúö¢§@ ùU¨]Å14 —:~5<+˜|íWëÇ/+íï]Wwù$­$#ƒô:ÛzÄã•=ÉìB¤+XCÒN抔a^¸†q 6MÐÙÖŒPã‹Mf¼¬^1'ô㮞eþ®wL«Ô@7¯XR6uݘ)Þò ÒîÎÂ" dÿkÒŒõf¥Iɯú´*ì* Åõ†ˆ×{Õ@’#…$ Z›h†uÍ#4Cb:¯SÏb;Mß—äkJ”`ê¾RoMÍ\g† Ü/FV]Á9àl ™$3¯g»‹Á¥"+ÚAX†Ú 2¤Ykÿ#J$5¬ÏXpRˆµò,‰+Ùr4ÆÝyº •ø?ÄÐ!³ŠfÕ!†ÉȆ˜ Ä(âïÞº7vl³8N–éXÇQ{St2qÛStQ$÷ÆXnا&*œŠ‰v©bíÇ4_'ÌéXCP¤M"І]5£ŸIĤCñu£ 6!@2)Ågueåð8Õ’î{Sº•f~ê‘Lck. ‡Ë‚‹_£® É nëê¯åP)B¹Ô‚&ù“smù¬~JL¶²ÁvÛà[Ì›Íÿ.WËýo×Å~®­Êµ›“oñ€àå {#žwÛbÖ˜àY p{Ü'1õÊà(³>ž÷ÇU:X´îdOʺ¬û ì²9È+Y`€¾—Âë:ô¼QñMÑh‹»Ô°½Ù;²Š¶ð‰§ãŸ€ÁYÅ´ÕO-²o|ï83ReL¯Â DÛøÍ¤û¬w$Ö²sÿc¯ä‹;Cle¯8_ÿ"¿M±Î<šÌ#k¿ ¾Œ;ZÇàU3€“ÑÇ"ôbµqTÑÖmø|mìÔs*ØqX? Û¯›æù¾oœ ¢1ëK![Î(O±WÛßÚ9kÊ30t"¬iŸ}H £ßÓôý?QÊmK Žä~îŒ>T㇨EŒ§ô mŒ­Êq‰Ù×Xq¡‹vîg€?8´?Ú‚ŽÚ×/‚e%p‡Î›$ŒŸIg ”1Xï ˜L(" xpn{uTŽEZÃÉz*—$aöÓrkìfådÇõÿ5†w¢4=}bù—ÿÿj‚3$U, P'Ö=ûÒÐ>ëòõýƨ•úì>ÀôeBÃßRAìÙ +Œ[ó ª\›Y]*ßÿ[U7¡V ûN—®NÔü4ˆ;¤ï +HsE²óK¨.<ØŸaÕS„‹˜»É_m?ù45F Ëé÷³cá ôE2~iöçjæñ¨X!=u Tä¤ æœÊºÑ½ºCÁv/CŠ‚"+Qèνc”ùM·Ô™³Ãå=U_³þ¶|3¶¤ð‚âÅE4d¹ XåsLbpWð þýÿuÛÍê˜*ûì`RØ +j¥ÑĺÿG„¹°¯òïKjÁø¦uÿ|ˆßÓa6¼³Pß¿H©ý‡à\©qšó½óFLÕ* í#Ÿrft ÿ$ñŃ,5ÏpGÕH°Sá…‘dðâ[òdtæ©M…ñÆ~DÕU2²´B}‚t¿-KâÒìnêíÌÌ™Mvž¡ ëðôšþ}½ß‡£¯óíß_‡£½øwüý ¿Ÿnøþ·’‡h_äðÍR?‚®uÀvÊxªåGDuüïbÄ»ýšƒ¼²«‘o$.KÏ9«'q(óÚcû¬NŸºµ${E@õdzAC2f·Ç9Cí¥ŸP&ޓƹ^bfñ¡³$X4êG?/ÂÌÔ=ïO±Ë¦w\tS{a ´»¬"Sö–QÓèՃ䶧sw}9KæWj‚sÝUÚõ<‰|¢€h/:,KŃÚsƒàŸùPö¬ÆÈ>£I¾+µúBe“¦Và- Ãûçò5 &)åÞ r}>–‹ùÒëKôù"Ùñ„§‘&¸Nî3ž'ì#H ¿¬bv¹è0™þºyì uçx&w±0Ó¾Ódîãb¹1(táùñ5Á9¶Èßn‘H %áÐxìwʪ’ý ª:ž¥+HÐÝâ—Ü[¦?­yÆ”²ó‹¢XÒ‰ƒ-™ªôNq~Ïây‚Á÷ Á뀷™Œ[NíŒ@UšÿQ}ÌzUå¼>¯mºð$Þ(ÄIoé9´®aç˜jþ¸|é—íÅ:³I),j±²Ë—cÚ…zŽ×aÝ„oÅLæ^`|+±ëðUØúgʈΟ/ã‡×•téÕn˜z<‡3,DùRˈfàX¾ëœi—zm½Æ\!B¹ÂrHA¤qs¸»_@àzU»;ü3R E6*F1Ü®ÔÃlz´ùÀPËY)í—Û¨ZH7¹U ËpMzp\»4ZÚ&{2¢?¸¸B"£S~qÞ‰—ÞÐ0}Zøb©öáÀ·zÿl÷ãb_ ~2¹’޶¶õäg˜¨«ó6|e=œŠYæY~Ù[úàZ¿(,èöûĤ&]ʆÂXõjÅB|hß*Cˆ ÑÒÈäƒ;4ºtLÍop*ã+õFÇ2`éÈèì`m±·§;ãê¿×£±é(T÷GÇ¾Š˜`?Üø¿¥Á—×¥tÂxõœš-¯"ZNmøÇï/6½øá­àE:F< E4¶äߔܮGjè¥z¼t÷ÎÈþ§‡ÁÁ0¿Oi‹™iQî f|YM¡géáhÓ  €¯‡ƒa‚_Ú£øƒdŸ’××}߉›â¸‡ñPž¥{§GÄÏÏõP{#¹£yø#Óõ2ÜZ^^ëŒbD­×íÀÌå}UP'tPì^ÆÆÏìÔ dEé•C¤¼<ûXå©®-i…â)É pþVXj„Ña“ôdW¾¿Ã£òAµ|é"ɯŽr?þ‡VT±ºÎ&áeß4ÊÂsªþ'W\ÀUõDÒšº´â/jrpùrXͺ"qÕÍá`æ>.‹¸b‘éõ˜hHú.µøJõ*¼s·‡–\çF •1Ö>˜vlŸ55ί!ëÄÒµíR$­K¸Õ7n´è˜ÏÿØœÖàÛÇ^ª½Ý“ç±…Yu X¬x“ƒ† 5×@GÜÔ7²V“dÄôb©(¸@{èƒ%>µ’ãà;+’\¸b†v:±¾z"Œ6`‡‰1¡¿¢à˜ú¶tÚÒ± ÃS,åÿYÿD+üBÉÏò#d©Dg<Ö4ùëk¾³€»’¾›”нI0ªr:ÛGvAtt¯üì)7lê‡Ètê4"~dçÖ‡xÓ1»BI¥ë‚ꪪ¸šS5—‹¹)AM°oÒ\øhn½ï‰í’ X8öùîøßˆQÔ^UL‘yÿ<è.ÉN˵@ö˜O~"™óùñ= ½°­ø°Tg#ÏBH¡ä–ô`*N©E 0tåÒz%ÂT©¨ÅÌ #h/ä´Åë.å«£¿-qBÌ,Ý”¦¼ÆBÕOÒ‘æt±Eä «Z ã覿'×倿Wk”S´Ô­º&¨d½g» ìN~Ýf8/Üø›0fªBA‘YÑä:œKÚôú‚“ Ìî  Xy mÊIt°¯O®OL‘‹W\kAÆ'&RÙôŸºÉr9Ï£ôÀ °0ú¾QÃçg_®Ôø2Kè„,"9Z«‰»oçþ¬kž-ÉéoCDäK–(§ô¼X(¥Æ(ž´…ÖÇhÇf(§æ—ÿ¶ÉÔ=‡movÈg°PE<´‘·´cž½°ŸA¯'ŸÉûê½±e>ùŽ؃/l>›¥0WÉà|ë`F< À´´™!íÄqÂYÈŽ÷OÔX±Ê}· 4–®™ÛN‹™\‘¨—yí¯¤ôd@€wâÃÕν·^¥á{\ìiÃ|B×-¤”Ñ’dÜu§2~þ"67X=I{#)¼œêp}ø,§¶UˆQ—€hÑ_Ë*ñ "ppÏ1¤ìfG' yKõåþ©"ª§|3›å0ºîLÛRH–9åbÕLÈ0ܺ[×DT ¬˜‡ßµÂNÄ¡æâø|n•Lï³V ãJ'K„Ï^:úŒâ  †teþðzEÒ(é/> úv,Tzçà ÷rÖþüb– d>1Dß…6i•e0 O¨±j&ðè7¯ ï žÊ ŸHW&úî[íy4.ÅÎ<5,t+“<¼i=m-R2£Qò‡7ö&$âÂÀ'+šJ^%èV{Á ÿ&$x“ƒâŽzíú€´›)ó=ÿ^²¹{즵ž&̱¬ïþ³)N­‰Õ¤ëO„•"Žöžóßpe`múBæHU ÄÇ_ë¹ïw‚lÕ R% ®‹µ‚·Â…¼\ÛUËêÒ~‹zõºpO±½­\‡sÝ 4m47÷¡R½^f²éj©ì\ùH8³o¬úºtº&ñEU ˜ApbÀtYm†2’ö`çá!QŽôø^’ÚmÜXÐašŽºmc"ÖïÆtüå"ÂÊG8¿—)Q”ìçÊ-úÑð9‹%ÌÓnRF¹î­Ø曣¡ ܰé9»Ó*nõ%jôhB|†Éœ_•qregâÜÈU†üµN"|zt9ÒŒ'Ü)›ˆµˆ0e´»ñ“ÉMéÀçÚ $ä8Dá3¡¥ÂM¨(èã=ßÉ’½…M­$(ׇæM7ÖÏ‚·‹[–¹1kjôß0êM0I›û5Ì™d: ßÏÛ=:ŽywÄõ­­(6FÜnu´§ÇûUëüp$QD™ð/7–¡•1°ýÒZc žgZ|öTµÉ—ˆÚÒZthMx/t2:O°Ë¼÷QâÅåêúÑv]i`/ºa-QŒj7Œê}džw8EfOR”•\!còÅßoqÚök&5µžZö%•†j! ­@jÊ5õRèXË·0³àÜUržM$µ–ÿ,Og 9¦(Ê—ÐáYJÌwkp7rX;34ž…É2ÖZÖƒc¢4Ê8‚:hYO‡ÅÂ-çš4o)X=˜ ˜kYcÊÍI“«¤PXC(ÉØ„¶ªÒ8¦1Ã%ßÉnt»ð– Ùuq1̯YPÇÃ6wü:¡bfZÌ“|õ¿—G†ÚŸŒ÷ßí(J5x³vWûŽÄdßÄJè?;›j¯« oŒÁ³€àÝBm³·’HæäHT‹¶¤=ZGæŒtõb"DÍE€cäû¨õ¼äe2” ÎfWè¾,Ûý"²GÖ×hB>ðþ¡¢R\X  ¯VB6íòó‚’£ázíAù ÂEêKØ0Ä—Få ¾1Dh(cp¥¤ŒG4ì'¡¬l‚7úb‘å}ˆ¬Fÿ2ø?mbs£3h´ý˾Vs•ÿ/åà¯N¹ÐÁ`ßg÷Ǧ!ŸøÆ` Ëâ!cØ[<*1ÿ xä‰ÿäïˬ_“=`£è|4Ç´X‰E-ú$ñÏXzÎéw›´¦“EØæAl ìD?ðo¾{ÎÛjr'ã¦ëPš†]z™Ø0ùb›‡ýÉly‰¢…Æ(I£s|}æõwGU5:6°>ÁáÀ\®¯j6¸sQôTÈ«ÏçÓV“Œ@Ég,ÿÇ\k\ÊËu2£wAÄõ»ÃI—eƒÉa¹P¢^e}è’ ˆæ`¬&p^^PýKÒù0‹‚D37°Ÿ%gŸTŒ„)´!l8Efâ 7üGáæp%G¬µ…ØÔ/j¡´W˜x(‹P©ækžÒ›£4 Š‚ê¼ãKÅ´R²Qe3¿FƒôÊ)äp]hGõº,`ºlçÃEd“ÍoXĬ¡¯7Êúæ ‰†ß:ÔË€Âõ¡]±Xo ¥nzNÐ,߯wqÙGÃðထódöêýûô ¦ƒc Hhz#.¦<éëg®$´ÐJÙÌñFÁ=1,áaÞø¸‘ÖšâÉ@š¥RÀÕl€ûÚÔèY$CV‹¤þ&‰$ÔBnžÙV’*b¦!o­D3Ä[¤øBœ(…›Õ„£%ÄEW `,æ)"›ÁV_¼_FÒuüW“Y6cM‘·²«‚΄$ȺW*'çØÄ)/û­Þzp¼²²t·èèUI°”A‹IsäÖ„8V«£­Û@²{bºá›¡/žÞÕycH´¯N)ÈõM"Ðê²õ‚j>¨þšÝ\$LGh? Íµ4Ì<Å^'„ÛlyæâENv<Ó.Íã^Kb…6ªN-jÿ V%͉zZ%Ðc3rVTf&|· øâðÌt;[G{Þl_ îÌO×* ‘±*Z7V8Æv©¡&x+«üÃŽÛó\ x`ùIꯑ“Uè\:Ôr€j×Ù´X9õeXBÌýÉànˆ²/ÓÔ¾î, £ A (ÅJ"åÓÓûwJ³oA|FÆp™¾ %™[¥X©D<=%oÏÌ€x'ÁÆÿ_ïB¦+T†¶xíXÿmìA´L5·S$`#ÿ~AC#6|YÇØíóîë¶»ÛÊÓ4Üþ54Ú£{“Fµ±W*š4;_|rŒÑëj•ý¿áܶ¿‰[Ë!Ÿ–óÄÓ¨1 móÛ=}À1T¨BE$³<›ÀƒêX¹TyñHhìÆzœºAW¹øÓÑ=ÁçHI×Å–FR¹råÁí!ûîA¥ˆI«3É„ÁØ·'ÊÝ0¸§¾Ûð‹^£ëçzɹ¢öôetæë«Qcz©[Ý^â=ÇGuéƒþ†}Ÿ|'©]SÂTé…I4rÚ'Õ''< ¡8v/‡oe\Ïö#ÌõåÑs ÈDzðÇYƒ7t”GËÿP§Ôð$F-°¶yáŸï­ G">=º_8­bÃÃpªÁ¡„]Í«¸³ÝÜ@»bC¹éFç3ðdÊØÛ²6|‡l «,Ôµ,‚=Hº·K¦àÁší)UUUUU;µ áÆD¬1Ú>Òµrbò¯Î¤(VÐéêÀ‘C’l‡x·«k¿ýÊïh<Ü\äÍQ=æbÅE¹¾PZѬ×x‘—д2+¹jbŒµÿ>¾@±y›á1ªr.(wFTÒíHö¤>¼9ú\~}¸"`ôÓŒ"£ÙŸÖ´åêÕ–[l­oæê‚ŠÀÿÚ>õŒ4%\(a—ÔûJŒ¤ÅÉ®ÁkO£I´vÜCÞ ÿCB¿da“|Ç{½Ñ¢‚P¨¶IŒðŸ+HI§&t@%²ÅÙÁ Ñ®_h»’ôÛm¶Ûm¶Ûm¶Ûm¶§µR&+²g¤˜,[ó~jç¶ÛrÊçküŠÕtP’»ăh»œ˜ ²¦ÂT^Su]—55,$ÊN¿PuM¾þXØ}B…ÚdÒŒž£ü½–Wž¯ Ó(»&ÿ@ Ï»`Ý’0¨Âùö:xL™¢^_ÍGwrñî8Pý¯Ìå-øŒã!¼€Q"¶’?KŸ} ¦EùN-T—NjI÷ЦÚI„n‘ÃCPoð‘M¨GD"5E¶¿l·KÖ6âíÉ$’I$’I$’I¡þ,g”¼·¾µ™zߊQüÀ˜¹F‹îœ);ï`%·Û÷’Ìc ¬ÂròÛ*üÈd,‰~Õ ¯¢iê>[€oŸ¿=.[h4ùóª­uV!±”FÍi-ù.ÿKû£#°“‰}Ýo1…µH‘㺷ÒrI$’I$’I$’VçP`‘\¥aï$+QFýjŽ7œp¾­]Ô€9zÏÿ '¸£»LwÊ"íãÖCN.vÕ‹´UÃÉÎ2.h%ïœF‡Ÿ¿†L¤W(åÑJ ®M›ÚÞJDÀXÂù$û)…_;]wžr ¼nÍÎðw™ûh’"Žè`j‰A ·`c$,û‚í8&Ð4º£µ;Ü]ž˜ÒÜuÙu÷~Ø$Ö„€†“õX‚ ]Ÿ`eˆsË1¤ÍÕ?ÉJHZ/þŽJlJ ÁyCs§-Oû²Ñ)¯Q…Ü .ú³=dïR¼½ÒO«¨}è0'¯&åÀh뙪@@<Òdfߣbfï *e!Ü"ã*}¶GAÆðÄÿq0,.BO|ºÇïOaÅù"ÿQÐ(öÅÝ`ÑãDèåG:«kC§G'*Åá‚#†òFÔ'"ý4ŠÉö£ ÇñPl\J Kê 0& ÄR7ó—v„Ÿ)cWÅGú– êžøl«Ú~ üƒ$+‹æ÷^qÕÞÍ/FÍÛ­1¿Â*ŒS;vóÝÄJ&±ýMó®Ò•UU€äÝÁo ›I¡«HXë£Qgž;ô ÿ_Óx1YY±1h|Iû¿'ºQqjyÒË›T!âÐèy¨˜ŠZ}¯Öji`U:TBŠÈúzydÿU_×—št²Ëø™ÎƒÊ!¨4V¿9DcÏd¹ßß(1'¢ïr\ó1Å,[€¤#RbnC›„V;ÙZ þhr¬Œö“(Úš¢•ìØ«2ÓdA£ÖÈöÿ¾é}ä¯e¾åð¥ÒÄð8ÔÒÄX¢¼øþI6Ûm¶Ûm¶Ûm¶ÚmnrÖm™íþV5*èpïª}¸øX½µÕ\f®'8j.Ç¿’Œ¿2Ï#M2Ž$Fó³ïå/n1‘iüë$‘¹ d6Û/FÙÒ~†¼jqÈ5;Àk X,Q´º€.uÍ„ü—f­,)9&§? º°tÔcÀÃüÌ‘àbÉ$’I$’I$’I$’Aä2\A9¨XŽôÙ쫌›ŽÑ|ï»AŸàwtŸÐ`ùUC­~&§n9ÇŠð€ÛšåƒÀÓÁŸ¢éœ½òP5¿„Dv¢¤WYþ‰{¤‰ñ_B(«.!/¤%¨òeÞô…Ü’I$’I$’F¶„=Wš?`Ê’ïŧOÅŠg¦D*_³è º^6’‚€ÄdîRùEšT¦cž­>zOÿO¤"yŒè8ÅFÕo³õ‚^B rKmÒ‹Ò«]'z˜œNI˜cCoøcë/es‹°1OǨ¬#éÐMlÛôk#&~)7¤ÆºŸ˜‚bû† oÛ± F´¸d‘štä€...f£›’CÚÚ¼Ž>죃 ¯wÌÇo=ád·cp”Ra@쬈luå¾ð,1`&%"Éõ²NQµ}ÚÍ¢2ú ˆ©Œ‹Ò¢ÁHËfSÿ~Âú@ž(?á ̼¾t9½­$G²ÈJ€ÀK¿Ò·zvã(¿ñ|¶¸åƒño: ˆ©¬—iή ·hh^÷A;é î>BINÉ Ç}]À¹qó’ ¨‡ÿÿy‹óÊ3“þ8fóûäŒyþ]Q¥·„÷§‰yoûpH²ÙJ>¦13èðDpÒh[ §Ôæç"™·O$Âäîš'gÅéÌ|´ûdìl¨Ó¦ÿB–èpÞåʆi&q”U‡§o¦ðÚ«Èÿ 5p¶AæÞõÐ Os@v“{-ÆÒŸBb¿ip.𨮭E#µ¸^Ä—ŸYk­IÍ¥ƒ*x¢8ÈM‚óÖ˜ƒýÛOO /Œhÿ~èB¾eº ¼þïLó64˜t€Õ¯î4 a¶X²¸B`&¸“=Õ\I$’I$’I$’I$’h« C]/’æµ|×–wQzïY\O „¡YUáóU=Ï]¸îœ—¾8¸)=)•Ô¬i¼È‘¨ 4÷ a«å5ÓyÜç-&€­—õÃJ•1hóe ;úJ™?Æšè*÷A™êulZí!Èœˆ$¬æ£qʼΞÆˆW–éáHŽBk¿EÒ°0+:ðg§× ïõÃÊóß(Ùk° ó¬ååÀóþòõÔ7QÀðcÛO@î™Òu’I$’J;±Èqtõ¢5¨%î(Ãxoáßë$¿Äß ­NÏÿ~ÓaÀ1(í.spÀÊ*¹L;‡^=^AîJœnþ TX4X ¥‹0B•7fQ¶š(5%2Rw ®Xò$NÊ™<[‹}J,øƒè²QÄ[ôq—‚õs¦\’ouÃÖâ1wÑv$à; ~¾_Z¨Ç)Qñ{›Aî3ƒËßÏ$ H~"ž<õ¦è°þVãVZJ·¯"†8écüÇ¾Û ÿ+Ó4‰Xy¢#ö ÉxØor†7´øäµ°P戮g›•NxÊõ» ±Éò9˜ÿGÂñhj’,eœuÒ ¾wiÏ#!_`uiœç9Ïd)ê4tŽqË_ÎpŠàц ‡©tæ7#+óFCazÇ‹µèîÀѺÒÀlLñ󘊓Mh_,AØ S\þHnI$’I$’I$’,P ²~Ú¢zÁ0`æ.I®¤¢N‚úìIwqöa ýÏïþ¸#Ñž"cGç¤Q£ºW~oS°ÜG„죫*ï¬AÉFB•³Ò¶6Fô'ø†š±ÇË7* qwnÚ‘-±K(°ð»±+‹?¾Ë:#péW5!ö?žT!F›óöñ‚òmáêR¯ãZú—X§+þ2é:,‘üÅħ¹¶ö.)ë»}☼±6æ´oëÿVÿ0jã×WG‰÷i~@O½¢±8 j¡…-!ü|0´H©—²×`ØéšõØòœP .Mïç†Ã9€~ÒU÷3èœ[ÑÄÖMé©Ùži qw$Ñ„ÏØ¥=a-ä ¢Û`M˜¤3ÿD&â?¥º«ÐnyÅ7I×ÖÃnz…Àö9¬¢Ì„oú+B‚$àÚT‘šÄšgþþ‹‘•T@µÜ„–ó9©‚.Œÿ1‹,×ÉÛY­ÓÿSšü§%&RØg'Óü·'+¦ÒÇRP´ÒD¬ÁZê4_è·=qiK#]v'_Àô "åP,ü‰Z`7ú%®÷Þvhˆu›JäâNL°¨^w‚eÐs5~J€K‹ïÕ»üI±€±a«v*§Ísãˆn¾Œ‰ûÞ ã9ÛÑíƒá°Çœ³®@s«Þ=rx®/•ºmºB›56ãé]è¢ èí*&~èqfÉÏL0f&­Š5doÆ­ãcú”ÕK‰~¾PP#C'±i‹Ì{µ¥þòaSÁd!¥˜72”¼%°:í‚¿¶SCTx%ƒ"<ì FŠ#yšÒæK±"ðŸÕýŽç…~(ÂɳYg%[¦ÿ4É7øPœÛá Î.t±µò¥,£0ì‘æÖŒ9T+`t"Tz‘i™ÎK A¤èá^g­¥Ù^ò†gpÕ<1xC–E${ÐGìxc@G땉ÀIƒegˆ†åÑÆCøO¹uxBð2èZÇWx£ñ®eE}÷]±'UD#¡+éÌJéŽ(\WQ²Ò˜ýø¿Ã³,8Uè4pÄŒM-ª’\4æê‰Ôk í¼@š7=­‡½›‹ujjƒQÚÚà)áü1·ÄÖ§½­kÛº˜›cc¶Ñƒ‡$Ñë¢HÓË!ŸŸ‰°R;Þ8”Œ ±uœïÓ)‘Õi0áO8@Gµç*}+y×}öz¶K‚<‚‚ô𨴯m ¡Ñ‚ç$4M+uØ×®oꆇA¬À­L=ÿ,Sz9{3ÿ>Ê–áøžÊ½öt¡b쉇¿œæÒ ø3ÜŽš,ѱ٠¸ê¡@ö¹’‰G£bhÔ˜¬Ó¼Â¸–Õ ß³¦;ê¶×ÿh„S/féñÂú[è8.qæ1]ÁŽ£à <²<)C31,¸n´rþ=ÅûÞYµCy Ô½@æ±$¡‹vúŠ_æAÝ÷.‘À€Œ ³aºÙ>=A 5k±™È‡êø¿oOj€FÎüŸ]9Z..„ºÃ#3Zü5fmp”•Ob*¹‘KLK5ÿ;¢Ð+ZsÍÇÏÖã,>:ƒü Œ}›¦ ¬=îúXØãOqó³±9X%ò€çÚltJ~L­6 ÷ÝÎk¨c¿ºs>µÉ–ŒËâÈùËÌaÝž¼ÛáÕ5Ll÷Qo¬†ªPÔΧͺôLìO“¶à`Fͤ›}GŒ³¢[[Tªý¡6CÆ –8ß}输ý•–ån¬‡U¾±óÄ”S·ÊUS÷)Å%½ºú'u¬xQ¸³LÑ\dÁ’ø.“9ªrÇVðÿzŒ5™€2AòíŠýNqùË#¶Àæ¢RÚ"¤•.k?®±y®L¾Ž™pèF"!ÚuD?¢ ·­PŒ#¬kui ‹nŠÖ¢¨ôB¨—ׯ» *¹ý_ZYý žRY’p1ØO°Š«¹1ë¿I ?C×û¡“S >Qã¹Ük®Y¹1þ‘–Mï© ¨w%³ÐÆ6ÑõCV^oÖ‹Œ‹8˜³ÈìØé#M½„§ŒµaÛÓö˜œûete”f¾ê¨ˆO5Ÿˆ+rÖðç²9ð Éý³\›ŒØv€{_½Ÿ9wNª‰76 @dø$““âiPQtµ‡þ¤uÔŒßä±âéŒÖf92v£DðžUt= E}^ÿ‹M†ƒ^sçä³>Ç4ÞMˆ1»–šC”:9P‡Þ›½˜5~2àWÁŸÛt„ýÐì·¸MHÍ“‡t*y„×¾¡×´*ؤљ+1îúQç¢E [‹€¾À$ ,Lö#û ¿c ñ âÖm z>üðª¸`Qx\WìÉødÀjLÔ¨gg¬á«h]|ns0ÄÖE*Jê5í à­4 ‡¯›þd¸·Uè žõœºXˆè·Ð„]ÐM ÷w)2Wù“ög‚J;¿Ì®€â–9 ’‘øˆtædë熗%Ȳن.ÄÅ<¹K7wÔbÄÓú»;((Î0›Èq²+ñ:U¹W/ºÚZŸ¯ìZâR¢`ÑÖQŽ“+ #F%٤ʫHE'x„Ü+¡ÒîøÁ'z”7e¿°Ö¨b)ºØqÆ"æ@©õUªmt+¥ÿDSñ |›s%]Ϥ#bÄÞBjO<'ööRÛrë‡q‚ÜÁ“TÂ{ò6>W±µg„4âG/gA¸¸‡mʸÆ2̳ŠðW„®µî”“lÍýê•lä–t¤—tr gÈŠ]ÃNÁ8zpXaÂŒVç¹Ð,‰”vl|£°‰ŸûEf; Là}ð„æp­ë~äÄðrNÔÊMÅ #I(àyÓ’­óbL¾¯vÃI÷‰ÝEuìõtC iè)XW×Q³Â]Õžì]ð°¦ L¶|çï bßù&€×(«Râò¦³Ï[f°r.„Ê:ÖFI½WÓ…‘WCBÊP8Ž%%î¿\Á.â!·Ô”äŸ3BA©øß9SˆÇÀ³Ù¬Ä¿¢ÈبžM‰GkJÔLÇÈX±ƒøA÷ËnçûCëÿ®§œS?šýÂú÷1´ÜÉw›ë2T¢\{EÖ¿€ )tœ"³»oòv[4¢Ô†ëCÒ$OðÊóȈÞ’¤r”¦,1`–>÷ÊT¦€cÉcœä”E5.Ä„LãSÏ}t¦ØçBIXý† ãn¦ÿ9Eoˆ!öÀkÕüR˜8„5kxä13“G?£ÆÓ‰#4Ð5‡†|¨±umdšßÈß’”¶·â¥ÙUDƒX<̦˜ŠŒ]…]úM‚£äËšW¡ž Ø"Ð'­h—„sà&9~ O¡;× 8+# ‹U*| µø’Q œŒ¤(°nH6‡–^bÅ‚ ä—s* Ðü¬4åÊ1äëašuŠs‚;g ®³’ èJ‰Õz•“Ó³±ÐT›7æ>bÉSäv\Ó!4ºZñ!îÄBÝ‚šO±ýýbôf ôÁKåg$E×õE)úMXÒ±5$7D„ϵE=×KR¬¾¥HñcW¶ìl"ŸZÙ`Î(;ÑfŽ-r 9°Ç3ïiƒ9­}þ¢¾kƒö÷zÒèýð“7áÎ/‰3ëÄÜõ¤´ƒSMô?Õ­›[«è÷ÔŸ7g`Tþ*·Ñ OûëŠÇØðÔƒ|gÏz¸Ê7ë†r¹¡¿œÂnû {và’³Ö%"cÊ|‡×æÛHh¢!@ÝaïL÷ÿöÜßæüÄcžu‹”moŒ#×Àßw¥eg»$g¶²pÙ(Tê.ëüEYv}Q¢õºb¡ñuîõuiï?uïºÃÉ›|8ó©x¶®¿ šAÃØ$%Õ.P­6ˆpÆWº—† ˆUŸÁJØœ#‹H£¡-ùÑ ÝyíLÿ9Hæ êà’3©þ$çrÚ;\)’¤™H&t€½ðowsÜ»æ@,Т„@gTÉ­AÄ^¬£¦È·q‹Ÿ«‰a¸÷x:Gy,3¨ ­ù¡ï–ÊK\оRRå’«º»V[m—×:p÷v¨Lx(ìX1õŠY ßlø¯$*6X¨#qâCŠÉäbŠÅxÕq>(DÝ–w]UÀÿ1y34ðGtå Påþ¿%—Ô®¥Ôþºy³€ò¿±Ê¾)¦…àè~ý•¶GL°=c[®‹òò“U2Ê\¬s\0&wމÅîNmïHvÓØ7Tb`7í_A3À*^Icñí¢ TS̈ªyÅ^§öræAÖ7cëÞCä¸ú¢ ¨‡BúÉUü¨¯óÄ*Ÿé'qÑW¹LåX¸&aš{‚°¬xKOßï”:®û•«¼Çf±I8]þÔYûŽí»ÿQ`7گ͓öáëX-F£8*ÛôK ù˜;¦¦û]¯k%‘…TG-äçaw´æˆHu/<Öò=–`Âû¦Ýy`‚7uI¤'@:Kt<§‰6ZçÒŠË鈜­´dŽ­fâ¨|uNÕ‘î•à Or2¦j^ûuô ïHMÿëðô…þ}ç_‡¤ßóîë_‡£•øwÿ~~‰ϾÌ׿‡QöÿpéÔÍR?‚®uÀvÊxªåGDuû~/GÀ«êƒq<¡BöÛzB°ÊסÒ[CV[¦j%,:tŸÝÏòt˜Ô™rÊx4&·w¡ÍŠPΔy¤êë°Â-ÆojˆUpe_‡žÌ¹d,òt|`Ì+Þ7¦Àk—ÿOÀõ{b,âcÜPî=å³'¹Úô^ʺ u“|Zè}Äu™eo»Pãçé•Ú…›œ>Âlˆ'U*óuÕ3îg™Ì=cgc“2–¡—Ÿ×%…öBÞ~‰Ú û»‡aB¬YÆšrŸìyÕ´„vy í­5,¯¯¬ ‚T(N:¨íSÓ°=/¸Ÿ9Ї•]" $í_zá6Ÿ,Ê7(K5°z<·ôb<zÓ¶n¥Ž ‡Aâ½Õµö†¯HêkK§ãûÞ9ø¼!a\[—[W ÚÒêÙ»JÊMyfþqÎÀô+L‚ôt"LQ~©mý爬ÑašÄ‹ÈcÚ Jžš¥YòÎð¼#øú1[]¤^ÅŒé5Ïì\ ”?A4’Ö ÷š˜µEËža&©>2†K1~i—dpéΘ¸Í2¥žB‹g¾à„Ö)ãÁ×ü`i¬Ó€„þÛõQ~¾B‚&Û­ø—E"=ëÙéfR¯°ñÝç8ÌtYQ“LO(Ì<^X˵íÚºl(º¨žMj…ë Ñj€„õÓ5/¾ä“>Êá¾n[È{2 bôû[^“tm‡dÓŠÿiû¦u[mñ×4Özé„RÚ¶+©•^éÓ–éïQGÉŠøI6bt5œ%ø´‰dµ*ÖÒ pʲã|4!·hÚÌSbÛaøoÏT¾R7$ØìdÁ¶/‰RÜ,HS‚Q/r/!ÅþH¢@z0 öG•½Þ–5A-¶—˜Ä\‰”ÞS3l'ö²ó>!á(³¸C iýl–+,oÉC|iÀ2°5˜¤!˜bôÝ;hô·u1Sª/LÀÇZ¨½•žÖ4jåëÅ> Þa§![ÿp+«<Öj´£ÆQE×ñÓÆ®kÌŽƒ83[‚W$‰‘ÛŸt·í&|¢¶ßgf¾¢áƒp2ÿ|>?_RÉ!n#=2¦Y°¶ƒ¹1–c,áM‹ýîS‘?Z:èòžlòIØ•ú‹ [ù†ÛlWÜ· ‚/¸L>ôúåßç±…Yu X¬x“ƒ† 5×@GÜǯ—ìp‰»ðûZHbM5˜,z¨HIœ‹ÞÈ}öúo]“ó² ÊáÔiZѺõ£¨ëzFPx¶²f+I±u*ÔÌ ©Œ~‘ÞšÜó—vÜ Ó{ý"Á{˜@žþùå5´{L9‰áÚ;û}U¢ÓF­Jj£~ lÿÀ虯l.uöšX$ã<ÄÍ,¬„¬µKPðØV¼®¶6ß2AbûÓ¡* ¯;¡'•¨ Á9=J%X©æbë mUPKM<×{(Á¹š"‹?ÊžøŒ}ÄJK*1È Ÿ/9ñ¼IžÇVL]Œ(_÷™? LT´/œ\±)¢¹ÒÜw >ïå À²ÊÈ9”ß{ É~ÕÅRa™Öì¼o Œ6¢xˆ\Ä®3´œâ7ýãÇþÞílsJc7‰a¯£\~kŽ/Û–£*ê⺽¢ç™¾¸~ÀÌ2¨”S’;f b˜¥ÁJ¼÷à í]´¥Ò²i3áfî†e”º!ú,Ž~³wM@Uˆ•Ña˃ýk™ÚP-«÷¬“¢3 ‹œe¢pˆlIò;nä2(Á†ßl´ü“”‰%6¥K!ÚxH¼¨.z9îÞŠå~:€¸.=âäLD0(ðcáÁºiè>ê{ª,>ìÆ6›uC}ñ|®»Ÿó³}Áuƒí9Y4Ž™&…àM;ŸÁʼn|¡»2µšXz# Ä„ÈþKSw¨Êþ:“hµ-î³W’rZ°8wÆ4…ÇxœqY³OnQ®ÿp0¯Œ 9r„¥ŒZ‡xð+º!†ˆt˜„¼ÃL3 ,}€…lG½^~nMß+I†QO8^iE,Ü”X›g÷®®¼k±- šÞŸLk-R–ù¦¦*îÅðÓ>VþƒOüPaŒÎuÈÇfOALš‡.ÐK ±®=’]¿ >R<#ÄžÿK‰ÂÞþïœS Y>aÚ£¢qMç~ÄOèš.ëîÆ`06+ ‘ZQ{rz¼Sǯçˆr—q5h»>:“²|~[“8¯Võƒ?ÒFÕJlõôŸºÉr9Ï£ôÀ °$Me¸Ú!cÙò†s=™häÑzf¾Ç—ðêsQsð~ºCþZº/)oýѪpƒÄ’·H¯}ÕFpE#óæ¨@³¢›ºj†f q]îå+5$`)â¿@ÞKr2H¿éèõÑqYÜ—ãþaìD(_Ûmô¢“Ô«ÙNíW’ëežÁ?wùz<ñ¥{‘´oð&Þ]>À‡öŠÆ>¶V» ¿#˜“Ƭë¦Äh‡¦FµïU"ãFúø+±ÍVp×"(=÷á ˜ GæZ…3îÿlÚ(ÏÞŠ_îPL¤DU¨íœ'Ÿ;ËE–  BuD÷Ž €g9¦ŒRä0züx?8xCØ02j–µÛaÄÃuÎ|æ¡UfÇÏ0÷.!–…¹UwìÙFÇ{êÎî²–)?é¾)4âéž@%Îéu½äF?:T¬= 'šó÷!slɶEYón†9!í¶Çº9D„ˆ™ K&T¡°¥TËϹDBQð¤AÕRó`w"ÇÜȨ­ª#„µ±‹ï f›>²hN¥z÷{uPŽŠ*ý©îï®ÖÜéòéÄ6,ó=b\X·jdéo†"Ú_ż{¤@©ÆEÝ´· ƒÔ½“QCßP¶íð@æ£ È—­ßjE5ømæ#‹ A`‰}€ê\©Ú÷ÖG<ă}¼oöô·zÖ¿slù™O–†ð^$Š[%ˆöçéê*ÓdEª„(K5ˆZ“Üe¹ ÓÑÙƒVP’,E{µo†}‚¥¢¯_b‰W¥ŒÔxiȰ¬¿aБR|Á¿¼Ù{N ¯qõ2'0Þ56qé?ýn‰þž@´Ô–æ>.˜M6¨|\¶©¯XÅûB^e×òÕEøRC?#„ók󌧹*Mž¶·Ý¹~U† x¡ÙƒŽJ»-£$Ÿ‰Ê}-0`éûsöî¶¥)´ßQ”®Q'õ¦© ¡E(>ÉœìɸrävE4ÍŒj¢Û P;ËS’ëGHN4ðñËòl {ÉÜè¡ÉÿAcô‹Æ§˜Ç^Ê“èî&^Â*á<‰!97þetÒá\þV T7äX•Ý»ôŠnœêá7(EÈ^BÀE¸5öt¦©š ·c¼uI°cAvì’¡8jî™Æy,®°_ΓÒ?8Qä« å¿ # ¼Ðë7ŠÔ®Gk$PúaM$$î›`Ëì‘>o< ¼f´K­‘§>úÞm‹¥ØØ‹sL¼Ä|©úaþÙÉy'³0?Fö¨&{ªõe–fg+_7’¤×ÅÖ0¨æS¥¶ª”âÒèzßB`>Å_ »ç‰ÙÜù&ð¢ÃvÑT&â¿JíŒc:/·?à¸WÏ,­w uå¼Åĸbk]Bš?ªÔrÚ·VÕ^ S)]ä^àŽe Gu>ª)nq³Æú–Ù;ÐÐiü›“œÇéÛÕ¡:€DE‘DŽR‡Òj`NAÂ!‚‹0ô¤îŒV)4cöÛפ¢þ”ùibJ-c 6D1xêY½7ºUõ¿—G†ÚŸŒ¿‘‰Ëè­¿9KâÎ*»úPgKÜĺÍu„uÈi]„âÍÌ]ýª*<ñ›Uh0l|–?×ɵ/ïM6 Ó‡Ejԛź 9˜p©üILTÉÁ©M‡¢$Y”é>¯é†‘È¡ˆ’í¯JûÀ×å9cö³v™ÉãY$háóâúû®ê¡±oÕYzc¦¢`á“z“ÅÝÄAÕ™Zp·˜€¾HgoÐ3Ðø…f3'Ü/þ×0§š„Ñ<– «øcA$ÿAiêME›î”$‚TĻ즒aÇ40®vc5Ï0ˆrìWãdN6€Áo6PgÇüUºDä`ù]Mµ$6¯«ÅÚø°Ö‡þ)¸ ÿiŸ\žÆóÙ}ûO[Ø„à¢RÔ?emë/Ä%ÈãJ‘õ²ÚtÚ)üOæì°ÝŒeŒªý‚6É|¬†Ü£¿€¶ª<ËßyófÑAÍV‰ÉÔζ™¿U†ÂåÓŠæ"YD¥=ѧJ!%l›Rù?òåˆ?wÀx<‹ŸJÖØyóp°  –ðÄí[êc¬Â)Œ¯•1ªÐѰ˂µ¢‚/}=‘߃kìÚ×ÑrºO µ$¦ð8ðÂÇtÄ—^™GÄŠ&ÑUf¥ ù¡¸’~P¬žg¼Hù暇®Ò•UUUUe þ‡¡ù¢1.΀©OD&ÎÅgŽœ?¬óvò7?ª¿ùÏ f–u±êêKÔYÁtªƒç¾É.áÒ¸Ú,²¤BcAA‡÷ás0¬Ç÷Jhˆò¸ú£Ò‡€Š_ÚoV0ðŽÈrж*ß=‡Ü†V«ô8Uxù: *ÙWFømlÝPQXÿs[GÂ~ ±†„«…*`˜”³ûÿF†œØì:XŽ¥GYœ’¾ÅoB@u’I$’I$’I$’I$ŒÞfÜôñùçsK1Œ“gÔRûü*©*.z˜A ú!WfCÄiDÏóë‚o˜êUÌѸ#%©y ª[&Ý€$d Qirü÷cÒ®éIß;×%5v@ÀÜ’I$’I$’I$‘ÚãlA%é¸=ð°E¨ËÖö–”ü)–›È-aŒîê—¼Àx[ò äç¿À¢Ð^x¼W:à¸2nÑ?AJ5¨ÖNa›µí2÷ŽÏ5¹¢Q.Ãs3ìŠÃK@Òy©8Š‚ï+ã‚zDÕ‹áR$xî­ô…Ü’I$’I$’I$“ªêݼ-tn•TJpí½€Oá©JJ‚¯ T\™Ç¸ñMúþÞi–µ1N¤íž{Ó£× ×(L ½ÞM6E‰%|ä“áœF‡Ÿ¿†I©Zaa‚ÛÂM¦cLHB…8Éim3~w‚„oc=8ßRÀ_ ô_úÏ(ìëEŒ‰sÃÎãÄ@ª0MOH¤›¿¤KÿØÊ#t É]Û¶û2G°c»N]Fó‚0óܽ{I ï#ÅK»°®Çº*]HDä,‰Ò‹z3lpv rUHÒi³Ýf‰d CAÇ縛ÀAÁ6Ƃٳ+/1‚C§d+åP¦<ˆä/ntsê@öI‚` ƒ’T"7´WÇPÆî5}§å2Ò‡™6ÍgCX…LÿdÊÑ3ËÕ¦‚ØþÕL ™ºJfݪ²x…¤]ØÃGÛ|ŠÑ·×À¨4nÖ3²{$³Eôð'í{-àDŠA#¼Á2½òЦR69­½ë‡=á÷ÖäA7#‰1æº6k çïö‹¯Œe¤¶SÇ> 8LMª¤€H W¦™ ë‚¡â©ÞÝ|¡>}×iJª« ÐèM1ŽQ¼f“'Ê0!"žÐæ™ >ðüž h7iЮM%`]VRÀ+³$b¾x–¹-­ YFœÄY‚¢S®&Œß>ÁR£ÍÈïÂû¦Ùx=¶òJò@§sR˜¢º£?yTBŠø®WÜò'`ʧæŒÈŸü¤-GÜh X·HF¤ÄÜ÷- ([Ô¶šÂ ?=’þ³!ˆ•t4u’ðrXí•ÁÞršng“ŠŸà_{·V˜Z†è'4ΰGpD“ñ ÔѸX&jm¶Ûm¶Ûm¶Ûm¶ÓûýôaŠÀ°¯ng@ÑùÌœµuô)gþàÞÕp>zuT£æú–è•W!ïë zžÜð3ø£é"m@5¡a†×¼Ä`òÂÀM¢æÚëãôAìV†¨ ο·K÷ Õ÷!"Iv’Ž i9Åk«²^ Fo–AxŠ–Ò=¬ ‡,­ÎOþé/!/8m…¤&t¬+”ŸAÌÈRI$’I$’I$’I$…r@Þ²k¸ 0aœñ–ʸØÉ¸ë,J+$ ßw)¢¬šDö9låΕ©~âþëUl¾£±áL2z€äW“W¸2#A©o}àbˆäȉ&?ùC}·Qz%#,¡=­hχ¢1w¨p±èÙÒîÒrI$’I$’I¡Fâ%ÿßNtcZð¯Âù–|ÅUâg"Ú²I$áA¦/þºµ2Ÿ€iã-‚EB»sƒœ‡Óãæ<úA§×¸5‘éÞ‰dnˆBiJHíœtdž«oøcë/es‹°1OǨ¬#éÐK¨o‚F!Ç÷ë"~ óH;h“ƒó¿g»¿ñoqÒ/®È.¢ üí«ÅWâoüÌÒ JB\"„§D^ƒÈ!¡#Ú ¼ß"âä”õµµ‘:$–î:7M¨6nÌôÜ;îÖ”?Ö캢#’:1*¯xù-ö77Ì8ÆÙêÕæùž_ þòüd¹sC÷á–õ¼ª—ÎiÁ˦,:‘üf^H^ÔI\ÃÕEãªHPà˜×ááš''3Ok²ê¥qij¯ êY-­Â ]wcÙ3fÐÙEà¥À¼~ð¸S»ÿuhv5sûV±6wïœËbiÏ#o0:-jA9³êº×¢Í£`öÒ|ìó„G ò2±·2 h[úñ›¡°‚ûV3ª7Ô( ³mm"mN—J uÒ‘Wƒ]B+•öêâü·÷ÖCuÆŽ71Ê¢v FsF¨xÂA#ª÷´†Ï{®¬jU“{çš!éÙ D¨Q4KóÓd%¦fߨxI…‘S.¡ ååËËàþïã ¯£žcþÏ›–{.®Ô&VâX©#]Ç^h¥‹zJ›-¼‹ccV·*5»;ì’@êÜ\Ý\Åœ‰jõÞ²,eѲVû¢u)!µƒ‡=LE£C¬ s'ôB§¤­2uŸ‹£#@z†õòBr¢E…þÎÚc©ûÆ€'Í^N#±„mÍE)ó(}‡úF`Ûa3h¯¶ »½2ä4«ù¼ØÆ)ÑŒmýc,‚EA$“ø‚7jøzuJŸÝχzLGɼ¿}‘Åv¶ ÿx+t>­ @1ëý¤Ô2RHÂJ¹þDêpK¹s`ZïŽ]`ï}ˆþXæíHà“9mNÏÿNúWö힪¢²ô³¯v¥5ìºó¨Œµ «øm!Å.Œ ™¼rlßÜ"aaËC‰!tö’­k¸9òOCÔŒ[žpÎ¥”BnJ”àÌð—½e@JØî—.L½«ZeŠh6ŒQ£Úõò'ä±-AÌ'¥ªƒ“ˆXdªY6…I§ŠEïÕÒ®G¹“éªHjMTPí)ýÍ+ýàá×G\ !jÏÝ@8ÐïûR{[´Ø1Õ:Gx´NÇ5&0ÃÁ*pÒv©Å.a Ò\"5©….žcÔ6‡ßÚÄc(=Æ[Œ¾IDÑg&ëañÚÈ»IÏnÛž¡±J£ÅæË Èr=ü§ œtˆUÛm´òÄÙ¿üó5m±K™uï‰úéàÎu5p¾‡×\üɃ ¹2½§»g#S¾ù^›<­G$£µè‘7]€B¾›™Å…O!‘ÚÑÃàüeÐD&Ñ.ˆ&ä‡ÿx€„áÁ]eÙ^a:~D¾œÛn:®øºÀ,²$Fy?%j´ ß¡mú5’üÖóÔ ™½¾Ð“Çp—Q{a?´Ï¡.sãˆö|‰P¹nâDe¶è»÷­x ùvÕ‹)3ã’ñ),߇. ÏŸëÄ7Ñk+ÚÅgkš«ÀV7Ž&‚ßs˜o,‰>h«Ø:û5½Ø ´‘ȇð©Ðôê ðqÀÏUm¯ànb(½¨Êÿmû®T&@RCHöeUÛZÞ¼ÇÀÀIÍØ©Ž))+ÂR³´º‘©„¶áüh 5Ê3ˆo5<íñ!úCý|ížÅÆu2ˆ­£·Í†ÉÅÛÎãqLwru» Z+çx/w»§T¼F’×Wnsÿtʆ^Õ]ìÇ„¦%/ ãØA§ÒU3T¢_‰ä›f¨C~,@·­S<;6«¶pöYåxÊ“ õP}s Ñ@´D”P‹žDáŠØ$Ÿ’yà³'}Ì$ bŸ,È5%^ïNzàßNF‹çTSUË£wšS‹LŸM¨Z¬mCžT¦5ÇÏÈÜ’I$’I$’I$ ø6k]ÿ6‚RÀ°³Ü¿øTÉb33h?sðqÌFj™¸pŠkbø·ó°zbÜSÌÇmÿWåܱúh„)÷˜ëýK&®Šâ—侃ã½ÛËjøÈÑ=ªVFåãЫþg¶R¯ >~¾POò´+Ê3…êp|"e`LoHCã`Ònà\žOúJ´VB’G¯*3(Dê=ÐnJpYöŒ³³¶kHkè—ÞzýÐ+B?%7_½6j.Ø©AŠtU|òó¾ï§kPäÈ3²0µ¾*ÒÖóg){3Mûìæôrôë—:=“¦Œ¥¦¶5”lw\2/Ë)¨­s‡¯žŽ ðËZÁ»Lᓌ°óÎ*Bôs™swO˜w ï„TÈ“/ Bz\îàóëŒÊ?¼Âå “ã>à¹X9?«“»õ“w÷îë&@ûnÜÌh{¹æ3SÒ3#)F)Z/ˆ÷/Y8å°T‘õÓ­#ð0ÑË|'àÝj`–rñœW©[õQ~eüÛ¬f=rÞçt0ªn£mŸS¸”Ö«žŽ>”×3J.lò?6n}—º^½nï Û_tè;Ö`c j1ºM†ÚƒI,Y¼¿z"Úz8_NÉÙØ¨x±b7ióyUðW]ÃHídÞýs`*ÆZtÓ~ñ7øI#;}‡&ÿìQQ8wìÌ—‘# •Yã/í‰WÞºÚ¡jÜÚÅÍ0Ø×–¨¡7.´ üaÞÄö¿ïž åÿ24š VKãõÚ±] ƒ‡Åwòm6$|Yà«ìîÿc}žU’Ni%tÙ§c¢p܉3«:èÊÏåxìð„"§á-Áé܃Ôk‡½Èmø©r«Ëgäu*e0|fZœ…Ò;ß²ÛØ‘Ttu<ñÚïB\²vêÔ¾…lf:Fh¤;Áz·…¤Àø,¿œ¥h@nöᒟ㉉¯Y+µZ¨éßRI£5+n¢7©îÎmöVŠî KMý¥ vEðl­ø-¡À)AÔtR—¾¨ª¿{ỶÃ×,ôóƒ=ˆ=)s †…xwKåë‚“Y@¾Í'Àè‹A&n„¾x4€ÿ:Îò!_ÅÎV`ê@ÅÀ'‡ ûðFU¨„J‡¿¯ àÛ;àÒܺÈüû h'ñÃùÔëèt [GþÀYðÈÞ¶öÇa–Üå'þWp÷³?æŸrÆU·Éiõ]Ò–Íý®ýÍš0‡*-NDš|šŽy¡T²´<²jÕñC#'xÀèƒäö2µJV³ûË#‡îD‹uoµÞò߈M¡Ââ¼àû%ÿ[¢íÁ‡ù `¬ñˆ‹@ZŠË^‚:.•ÆgjI#5ðWàƒUgDB¸ï'J9˜ŽÒ¼WN/úw9ß¹æò;ɳÈ€ êFÄézë“Ýr¨­ÛÊíCÇpÔ‘#%V†Õe±'TÞ^©âUqm©¡›ªßU8¯œLQ+Vúÿ$rìùt³C¦|,sûØÈ^[A…àR—¬¹J8è üê„")é¨W({V)Xð–6MAê-‰‡¯¯ƒY@Ê%Úý5¶°99¸©<=ì5‹U.õÆè¿Z3øðÇÀ±Z•Ñ>Ѓíèû$^Ý{Ìœž¸Âm˯?ÿ8g¾úïîãqìÏÈôñŒw¤·Òíu:‡ÃwàA>;r{ÚI½§¾åü=²õÀ}ý½dEœU6#•A_uÃØ|‰,ØçÈ’:‘ÿëðô˜þ}½ß‡¢×óîc_‡¤µøwüý Ÿs8þΕ‡jæ@ÍR?‚®uÀvÊxªåGDuû~/GÀ«êƒq<¡BöÛzB°ÊסÒ[CV[¦j%,:tŸÝÏòt˜Ô™rÊx4&·w«sg1Z‹@)¼©)úÆã‰÷†',C¸ÿ0^|˜¼±äùÎw&YŒÓ<ƒˆ¨€xŠÚž¨êª^f"9i?ŪX0qpL-ª _7¯î€ã®2b)Ï>ž‚dçs+µ Np›››~‰1¾é«Â¬Cý©gëúÑŽ&< ýRu@ÑŸéO¾LÂæSÖrñ'–Q¾êxƒ¸×‰w´k´"ËMë^×Ê(¹Ž´ãNÎÔ E5 ‚²‡æ¡Í“åLj„gêÁŒÝáfÐï {z¶a]=1¢ JnÛ„sß°ƒpˆ^Š÷öר?º‘ÔÖ–Èè0!ª£¬žˆWöKÂ}?«e;þZy1 S¦Yê´4Ž,ÛOM»¯s.ôpTäÀï #V¶kCª ‡§'¦Ó‚Õ%͘äu¦$æx(B@a4O¹a(˘‰§ê7eŪPé6‘6]ªÛ‚`ðR\„¶Dìý<2‰ìzüÅo=Dw>ÌÕö™"ô)ÎE 6ÂÀcÅq} æfæD&Õ7n ôFh)^Š5Ï_Uæ,‚.SX“f³"d!±:*Ä2ÎåQ“ÒãUnJ'³Y]þ/>WöEõùÍÊãàÅRNU®çU(—ÑËYVôb¤ðFsøàÊð»íf¥ç5·%&P»S¡)!LJÐ^R)A#€Åù#-éÓU&Ü!^”«KŸJ{†×ν@Å]-z9¢|sËÚ=¬âŸ¤¤+Gíyä9ŠaU´œoþmvŸ¤&ìGbÁ¶ß S„.S°éo†ºd«x°‘K¸U‰ík–Šõ_ÿV†âÔ‰à̓ãßE<öË¿³¾˜°º¥ˆ@\°yÈí–7­¯2™¾¹Òµy¬¼²ãqÑ&XxÖ°Ýü!äMcføN§ó€F”x+9СIBÕY~D‚X»7býI¼›ÈMÒZ^Vâû¤-¿.“›¤¶î‚ì¶°k:3é(víä–6j²gŸiGáâx8žø -¸·Ô¡L2JÉ¢ƒÓç‘™|PL?ý |&EAðëŒzëS ˆ=fÏ•½U›p£<Þ”•äkyPIB~Š© >žn*öw¤:°(ÆuPAØfN¯'×._1L¯ò‚mOš3ä—Bâ¤dpÜMØ<:‡Ö3Ë«‹„»écr´Ä‘¶¦0!Gþî’fI퀳:º#~ÏÙÿz½WNX‚ðäÈÃæ°Øëß!JKqùÅ× S}žî­<ŸŸ‚P†u ÷æƒÃŧÕïÇez1r©gÑRµ¦6³ü–ÞˆXœ&' ¥- ²Í\Ø Ê!w­3)ÜÆ]*œØ{WÕüŸ/$Y©‹Éæá+°dýPBí)L‹ÓÏ éÖ— c?c×½—î¨7ÓH4¿h¤NµTb(×’Éʤ?¥‰òFi’ûèƒÝ¢Žo _ÉçëEç±…Yu X¬x“ƒ† 5×@GÜÔ7vÂöÿj÷ùÝÞˆ:Чˆ¾/FIKiTíY×Ðs_jgí~vŸ\¿6·‚ +Ö›g°ƒþú¥çz(* ¦¹±mù3#Ê®1lÖÆ;m¤XHúúA £ì†‚‚i[ŽÇ|y=ôh´¬¡N= œC>Ϩ4é ¬âþþܘÉÎeÈþÄŠ6( è—þfˆžî†þ–åÖ¾På”3›õ‹‡+D´lLåÅ÷Õ¨zŒ¤†ª¥íLÖú>ߢœt9æ€ú4›‘aŸœdšÛf% 2;Hàub¸t·à,šX§þÂ2…çÆŒÚ­ê|A¹“¸7]‹Ò5Êýèö}Cy`’­=óüePÎØ¶õ`j,Üø¥o‡­¤ƒ\Šεºúœ¦(§¦Yç¥ÏØg šÖ-½ö“¯|e73ìå>aut yp–ûünR])idUÿG“õ·:>I@V8®~–h.b)ƒr–Uo ié´¯v¡âH4Š´ç¶n‘¯v¯éï uŸÖA3± Ãe2æJ_íñïæ8Ïv¿ÕÖ6ɾa¹ç:3á‡ñOÝ,®IG·wDVòý K Ñë¡sÐǼ­›Ñq êÊ_ÐaãMö·ÛÊ¥5®®š´~Ë ‘È`WU´BÓ`&êÝ õ_ðñs¼—a)}ÔÀÅ-ËèT0„¬±âvPUõNÊŽáRà ­›½s1IôÞùnE%ƒ—$ôÏì÷r¹£/ÄsàâDã/† ôè÷}Cª=\£|XÍÌbˆÒª6+ yü¹,XÚè°vCë6s/uÛ§EûªÅse»nŸ€C,Œ³K¡ý{[6¥§£ÿ9Ñoà†¡ík6â‡.¾ÖãÉ%ÛZLœr¸nÃ>÷e\(è~—f°Ø{WÃÕJa0éÍ׳výp‘ÉŠQ"%ð·ŸÎØU¤ šƒÆÕmÂ@$Õè»¶AüâÐ7Ô>“@{•Ã5ñ&û‹º5ÂT É8Ö«–20Ç‘Sëí: ±Çlb*GÊ…MYþÃ59ÐI3 Õh’UV¡Üš‡%Hýé(á’ŸÆä¬³X|©wÙiUV©¬ bÖÇžŒZ`f„5î´T`Ç„r5ñ b¢&1¸?E"zm|$}\¼µôŸºÉr9Ï£ôÀ °$Me¸Ú!cÙò†s=™häÑzf¾Ç—ðêsQsð~ºCþZº/)oýѪpƒÄ’·H¯}ÕFpE#óæ¨@³¢›ºj†f q]îå+5$`)â¿@ÞKr2H¿éèõÑqYÜ—ãþaìD(_Ûmô¢“Ô«ÙNíW’ëežÁ?wùz<ñ¥{‘´oð&Þ]>À‡öŠÆ>¶É€ ì(IýO#ÑrO¬Œ Pjã^²•T´P"´G¢Nëý(±¡ ?±´ lì´$Üûucýë9áz‰h7¨5¯­@Æqz²M~uT’é"wúÕ`Mý‡‚öì&ö(N¡Qr Î_fÑùMn¢†wôRUçåcCè›Õh¥,À*5k„ò¸È¸j­„¹ç jËö¡úù(óOL¶ôŽ™bŠŠ~1ˆnå^±¢ÆÒgÎ==ÜÿÚ–Î/úaG”ÁU£mª*|]T!äŒY)ðР²ŸÀ0…ba˱–³ø4ýÖP©Ëí.ó WÎIø#i²¥›ëjyÍÀÌ5 «ýŸ Wa÷~† ÿbO¬‰—vGYHÕꊳóû¬aIÅßÇ Í ¸QfDßB`>Ã;ýveaÖ¤EiX‹òÒ1PŠòIÙgª±c2-jõ@€õ9Liá×}×;|ÅÑÆ›UëÓ®'‰$ª¿=¤Š´±*%+W+@z~£Äæò}Ï’˜ ui¦<Ыu #xOáµY*R=Šü pófÐÒRc¯mé:ØõŠ&±™n]nª2d]†+Ác}°xçlÜÆ“ò…L¸dP0ŒU/³yÅs§òe™‰U¶ñÿ‹$T(ˆh"ö;¨ì7Fõ/¸õ¿—G†ÚŸŒ÷ßíû)µ2Ç<‡›©¿IœˆÉw-õ‹C½ü£+Ñp€!™Ûx£÷˜Iîã©.DÉŒØé=3#ƒ^ë)¶Þ>îÍÈ ÝúýÒw¼'âGrƒ$›ëî RjƼçµÑ.0;–±UÐР} Á#¿ «týG”CÜ“_-¦÷D'WCuŸ·ÙûjRwá1XÏr1š[¦>,dŒ²á•×sé¦G`ôM¬4}óžo8¤«{?PI» òµ.šd"‘uéì!¿IÕ™¶…mõÑç]ƒøªK¨ëˆ‚‘³†œNPÖ»bwþ¾(&V&VB½emy¬[±J?ÎZŒ¬góX#ƒ/òYo3‰bþ¤|æo—KUäÖàœÏÑJÂËWu'ƒ«qy$w¨†‡»nT·M:Þ/UÛIm.D¿Ôá´ …à³´è\]º.í·ÊÁJzÔ`é˜r$â$„dSô#g‹ ëïpÔŸJi¡€¦g&Õ¡ã@äSÔQ( +36epžn³i“n…E¢jjÆU«¦6Ëi/Êxå_¹Ñ°*JXÊrûQ½ÍGT{Lß0ªò˜Sì;`Hfâ ÈæÎKèÿj…–ˆ um"ؼ“3þç(ÈþŸåå‘Tïaþ‚²ËÓ@W¤èÄV«å´ÀeòQÞJî2oì€_}KëW›Á¯Q%íÊñ§ÖÀh’D ÒÜ’aù—)[[ Ø覨WYù[kpý¾žßüÆ\ÞèšÂÍÑ øo`¼»xuN£jIc:|’âçb]¢6‡wDʽÆ]‹»S‘ÏVÖÅáSsÖÐ>[ßäøgÇ&¯ ’5N^5«^­ìulàrõÁT‚²¨†Òë[H‘' 3.I|m“ŠæA8°Òž¡#×¾µ ¤3·É0ЀÛp¸0¨QæËdÁ°~£PžzëD~,*¸*¨ä6’¡ë ³;öée4qrŠõóûØ` Ï9ì°±©Ä‚Ö@# @¹¯eÈcÿi†¬=ćÐnÑwÓ_ÞmhC€Ujº:Ý´­¼Ûßœ§-ì˜)ÖnRpæsJÀöË[xÑþa6öfVMôž#>‚–êh~6 ‡l?ààÚˆ¶L Wlb^ÇÑÿG*§É€ÚtÜC;”êÚd^Ž’‘8ÍÄ÷iìÀN/„¹ú³ÚÙT¡aÁ±v¥VI”ÚÂ%ù—è¹èÅ{ï«Þ­ »ï-dÀö³ÑÅe>´¥:m+’, (ï@¼j„B”º!ý]$D=(ûè/dxe®ÖÍÕ€ÿ5´|'ê hJ¸Ry|„8'÷ùP0cð"„š ©óHN¨Èoª*.F./˜ÀÐUT—üq¦‘0ZÕe¼ƒkÓÏú9Òùò¶t)¹ÎÄN’§Ö ¿#ÃE$Ûm¶Ûm¶Ûm¶Ûm¤J?MæH N-ùêìTÌ“‰Â±bh§š)}?y·p$äb?(À†¾å…âcÓ‚})FÕ„È —“ ª¿ö´¯l·²ŒÜ`äå:MY0Q²þ@Lö³¯mÄO«9êzr%ûçµ `”¬äà–Ä[ÖÓ0SȔŪ\5êÚEŒïÌØm1Ñ«£9kUqІ0<‡ÏÎîš%»rÖ+Bi˜åÝú&å‹7Åqˆ›On‡Ãk–9’ÄœZ{q‡[­ Ùˆ'ÉR‰)ŽTvºê]:AZŽ·ÞðXï@;Á͸»rI$’I$’I$’Gh‹å/-Áï…‚-@¦^¹CÞ¯Z™ÙV ªOŸ™êešŒ“|»·±&@oTÙÃ{ ÒÔ–šñãNPá¬Õo,G0ÍÚä˜Á{ÇgÆšÜÑ(—a¹™öEa‡¥ i<ÔœEAw•ñÁ="jÅ‹p© õi[í?~A´Ï ‹°c¨µ1ú VôlݺÐsý0¿Í”At#”ÑHiÌ9z?uò„ùô]¥*ª«øÜQ8½´z›£+å!4†‘¼ðÏAg¬çMd1ª÷cÅHßtÇ×· ™Kаž;»ãÄ×Ô)W7 ž= NÙ ‘#£2eªƒ×µàf²<ßq=vɯ¯GŠ Ž÷¹®y˜â–-ÀR©17¹D[‚٦&hÜ'ÒØ,_˜>)í]$i/ç´Áný£¾€.l1Gý¨¢5Êtè‡ɪF1m *©&Ûm¶Ûm¶Ûm¶ÛO‘~_fá)G7åÆ-j‘GÕ¾yÕ¶tϺB ºMš‡ÙN¿xNa‚c¬(Y‰x Có 07>8#«:¼!µ¹ !Óqß–v—åzfïÃ$nˆsÊÃ)è ¾Ö 97‘lnw·‰Û²…,×–eßo †F]¹ù®m1õwz|˜Z[>…÷ýmTWÞºVëÁq'0³n,*¢-Ç6—ª!;ôàÞÕå'–‘Ò* kÒ©ùhÝØê“_·&ÃA|ÑmÊtSiI C¢Õd@õÓ.£´€4ôi[f`PÿF=‹¬Et°ü®b^¢Ñwûn"@˜Ü|]K¶ˆç>tC1*,=š§$[‘ËÅËvåa¡ª§—¨wü³^ôƒÂ”¶lYЗû=Ê~æzL AáeæäVoÿ[ É|Щ\‚\IÊã7 ãkxd;"¨‹Iò0ÉP;J©¤“4xc“¸†´Ï¡.s㈅W˜ØàR¥,iüÅÈË/½»½bŽòõtFbqR1Òܯ/:Zi¬lV›ÚnøQ?÷¹5lŒó)N]ßn),¥ÏÞ †BZôµt`ðJ½#ˆ¢Dñ¾ŽÖ2ÉÝaÖŽW,lË{—½ø(ñu]µ­V䎻åpHJä(Z¼¶ÝÅŽ% Ъa‚â;üegÌ#6•-üæ7k Ÿ¤1×ÎÙáá \c¡³D%ŒùGgG÷:zu‰PºkkD¤Úa‡_ò†a¶ß¥0šé2¢ ´ZMndz¿ËŒÿ áÅmòrJq ö% YÞãõX6E[°²loúÌ )ÑY_g1?;(¾|Âø%îÓÌèÍø™cªu˜ÆtæüÞ?sÓ¹ößÿþH“½“vnG~bgérqÒÀ%Pv¨œÄD|Js!“oÁTíy%‹R9šàóTBËN]~G ^¥LêðÉ>ßà a˜ ¢Ï2úöîr6*%èpB˜´Á„âšu𝠄`s†SIÙXŒ§ÏÈÜ’I$’I$’I$õ>TjœçgàÞ€ÚG“9d›»klëõÌäô¿,ÆìÇ’é å¡›¼7Okj`Æ­Õ?Š8+²ç7x¶“è•;·þÜáÿv—Íko?iŠ1˜:‹ž¦Â‹Ê¯Ë0¬Æœæï©½W=ªVFåãЫþg¶R¯ >~¾POò´+Ê3…êp|"e`LoHCã`Ònà\žOúJ´VB’G¯*3(Dê=ÐnJpYöŒ³³¶kHkè—ÞzýÐ+B?%7_½6j.Ø©AŠtU|òó¾ï§kPäÈ3²0µ¾*ÒÖóg){3Mûìæôrôë™ÕB<2QÎHýÆ@àïUg oÉ{Ð]” Ìa2\…fe΋dý“¨×تîS›]+©l¦?'xÑÿ ?¤Š2¤€=±*±ó‹ÕåÍ_Ü”m^GääîýdÝýûºÉ>Û·2̃¤d¶ßÆVVdÖ—úyÔ–Cµ.PpÍß®Äq›«d¥³+ô<»LØÜ™Ìã-\ss˜ò{ö’%Togˆ`ZAšrZ™à™_Ÿ32}„}Ú5‰~÷ÓþlÜû/uP;…NûËD­ýzÌ t F7I°ÛPi%‹7—ïkÿJ^Ró¢—wc} nÜy¯)Žéwj³ +¸A+k¶®8”çKp/IÚl™C2&|ÔãmÒ¬Jð‚¥Ò…6ƒâ7v(ܱ5X¦ý‹ýD)&¦êãNö'°è5ÿ>xƒ¾Ü?ÃVôœ¨¦oly®ô_3TòæŠC÷gÿ8óoÞmŠ‘0|”¥.h­³þ 9àÞSÄ+÷¤ÏþÆ€óeH¼“ê|Šqs¨æÿü‡^—±6 ÇNÝT3^c9PoâŸæl¦zà@\ÉjDo‚k%-×]ÝjSع{Ç„ãås‚ˆvQ6­ "õmÀ‘2<­ÂxS¢ctÉN/ÍÆYÓפ]RÎtçÇ ­é$¼ÛöÂu`pI[¯‰jI¹|iqºVût ĤÝõܪâE²¡FaÑW¦*XiÚ.!¤ÓNÛk çñ}ÕRÇ=8á…>S€ïí—©¬ºàøXÜp½ bßÝð©ãN4&¼0úåF#¼Þ°Z Ú;ç¤ëýI~áü-°XËqJ}²ëåh™ø ý7Å‘ó—˜Ã»=y·Þ_4ci'µ‘Šž“®SÀ€ÀÒãê¥'³¼½v¥“oP»I6ÁjÏ0}ÑR„c¬ Æ:c‰l¼²\DT„V÷ev†••; O­ [i¶)›=¬TÚj׎!èØÅÃÁ´Û/ù¿å,®x H™ÚâÕQá\©„C//òÊÖÐ3¢ ·­PŒ#¬kui ‹nŠÖ¢¨ôB¨—ׯ» *¹ý_ZYý žRY’p1ØO°Š«¹1ë¿I]3ϤgáÂòõ‘—d4]Ø§ŠÆºå£Ê¼ïÝA4ýúN„ý ‡~RŽ~,F.¨€;g‹Êxé\kf ß„HÚ»²F%fµ@­´‹~óOžQº’Ô=iˆÝ׊?2`çâ~™²'9uúPuó‹ ôÝCKÕ2P;pÞ…™²Ñ÷ÛÔûÐ̵Ÿk‹TYjDC䤸šU0²Çÿ ñq#r±»A Wªê$‹ÍÍ‹t¥nÞ}H ÷¹þûÞ}\/„>~Æø®ó ±¢ùÝŽ—Ⱦ³OWä\ÿwŸ¢æÏį„7¶W\¥ô¯¸‹-F÷Ü´[º×·…âŠ(P’ÐÃ@}™2tƛ분ñÍK ˜NSmé Æô„Ž‹£cõ Å úóܰÃDÇ™Ûåé-U)ïÏ ytyи\aÁF’ÌŸv¡`¤›zÙÂK4¯“ˆÖw?ûfcTé“°wUÓX¯|þˆÓø®ƒáÏ}žÞ¬²ßÛ²€g R)׌n)i¸G6LmÀ¶!Ó›ÿ qupÌrÃåÇccnþaµ¶‰Cd{ ÿk£Á©›—jÃæNU 6YÕññ}éØ Í A™< ƒ‰-àÂù1afW¡øR+q & ñ+Ë÷ÄŽ>•i9+ã ú7Cèl’ç@OCóª4N/Q¨?m­p£×¡w0 I»¨}ù|yM/߯B^bZJg+/—?ööRÛrë‡q‚ÜÁ“TÂx§ï¥5Z°Ýß¶vp,ÞcKnúÁ¶.~EÞ—°\+Ýz(" ‰x5èUCéç`»*M¨œ«º·ìZy̱勫n'ó)]š ¤âþ-”„cÒ[Ë,šï4X%ì+®v¾³[yéEèÜJ X¼%a=)½¢jš|g©L¾WÏR¦côÿVycƒh°1#`ʹ¤&n*‚À›`ìçB½yógÏQ©`#x£ÅôQc*Z\pä , ëÌü¶›ÆDjéŸ(Daâ©CûÎxÅ’†¦ºEœÏ¶½VÑÿd%GDˆªVgÉçþx¹UôÍÝmÔ-™17LSß„4pë b ìZnÏ“¶ú×™v Vi;ù¤æ qÚP= ¸Ö5¨òÂn…uÈÁ’²èÄ 9AT×Ù¯²¶E$—RX;O—Åhnf]pkr”Õ¼%àDÛ• £Jmÿö›Â¸Fƒ'ðÌ3ÉúÞAŠ¡“Ǫ̈†W‚ð°1@Wºƒ€_¦½F²òW—¸Òø:"søs±Æ’¼²‚aM]¸—'´|’2¥ÿ5ŽNvÖÎOÇC$ߣ{‘d“šI]6iØèœ7"LÂ*κ2³ù^$;Ï^‡¶Nv–žýóª†qý`C´^ÈüÏñã¨mnŲsp40Bœš£ëKpþžÐøX_Õ(©)/ê Þ´ÙoJ€Î ×™_!I®GÁöžåÞÛt%½Pn$ôâo@Pßœ÷¾Èþ¯Î0TÄÀ¨´(2ÏeÙ~1Ô°+Òÿà 7×+©ãêdeÔ’ïøëk*G‚¿ÿ¢¬) 7ò"έ×Íó|ß7Íól5ĵ˜üeœœÓƒÝ´Çv¹4I|ÅÄ?Š€29½.Ö3Á|~äó•)#þ¾M†Îsÿ;³·ð·vÍaùC槸•ÉZl0–Qµsñy8v_øÑ)_è+¢Ð0ˆ& »7b2S¡`+^ëLM@¥x¢u .T#µ\Ȭ¯²ÏÿÞK:ŽºqÊ«³äø%h·°mÛ|2‚<׳ÌiT™iÃé»tE‚Õ×7t€8î¶œpòV»ŸR¢È= ëBe”º4Ê!Þp–Ëxñ—þ"H”|èÖ'ÖëMfÄۣܱÏà§ü‹£Ã¿áÖ#±.!kŒÈÙ×ulœ=À”ªÍ“!<œo°Þä~¢©µÑü…rü[¦_N“€m膢p/Ÿ9-ê*-´Ã(ÅùfþzQéÑçhùÁ-ŒÄnóðHjJÆ.ë¬XhV¦2=.°V—àg™mã7&«Îl_\Ë´†ëªÎ \QÐaBÕ>bsãžÔe&ß”; „[4þÆŤÀK"ÊÈf'@½ñÍ•:i' ê¼ö;S‡⿇_£Ã½½Â,ä+~H Ö¿&üB9MÔ:ÿrԡȬfpe‚ô—ΔØ?ÿö誳_ô¸ÄDAîÁ[MÝ']áÊÎU]P8¨û¹Â@3{'&påÄ£ >ìQ >èJñ€÷P´`2)  •‹xL‡UDË};j!dãÅÉ‘f8Q¥+£¯O‘6•ÑY”Û‡E´U§œ­ÈÙÈ8>2°±gl]r!׺4Ù¶æk¦öµëŸÜÌ´º¡Ð—ãÐ…‚ó^ƒ–rðÈ߈s˜9hºðÓˆúŸøì½}Ó“äéëqÉQLþ¦ßÕþ1² .Vf·Ï³™^§µ”©¶Í©ÒÖ:sþ7}éÝ»‹Õ|v‘l¢ægÿez<Í, ’§5ú•@ÿ~S]¬7Õÿ"?Ðs\.ˆËæ2°lÅJýƒ@:3КYÇØcIår^5ØpÏ@ð)g%É…ÏÃõe$2Ý‘{3Vè±Tt¥V`Q›°ŽnÓKF´Y6¯-d§»µ4eË†ÔøÞýÝð+*rdûOýÔH9n_q®¤OóýÄd‘ÅÕVW#n°ò<1V!2WE$ïâ°×I—n» ‚§I(Ti¸É xÖ$jbš&鞺žP•µV·lfÃv†ÞÑW¬HdõÃÃÚòVLÓ£ë¬Ú•)aÿ)B‘)QÞ£0Jg!¼ ¼´H’“æÉ²ªGç·zü,ã/Øt¿Õ¹ÞÊ«è B =Ðñ‚9Ceò2þámƒÀ …®ôÎOðú LsʤF°ô>>Ë222Ó222Ó222Ó222Ó222Ó222Ó222Ó222Ó222Ó222Ó222Ó222Ó>>>Ëÿÿÿÿÿÿ000Øÿÿÿ888ÿ>>>ÿ>>>ÿ???ÿ===ÿ[H;ÿfK7ÿfK7ÿRA4ÿ<<<Þÿÿÿÿÿÿ000ØLL•ÿnnÁÿ//VÿJJJÿQQQÿeeeÿfffÿ@@@ÿ`K;ÿaH6ÿC1$ÿ3(ÿ;;;Þÿÿÿÿÿÿ88CÝŠŠÎÿoooÿcc¹ÿ666ÿOOOÿPPPÿKKKÿFFFÿ_L=ÿ`J;ÿ7-'ÿÿ;;;Þÿÿÿÿÿÿ000ØssÇÿŒŒÑÿ??xÿ@@@ÿPPPÿaaaÿ]]]ÿLLLÿdM<ÿwT<ÿaI6ÿÿ;;;Þÿÿÿÿÿÿ000Øÿ!ÿÿ555ÿ:::ÿ:::ÿ:::ÿ:::ÿeL:ÿƒ[>ÿ8+ ÿÿ;;;Þÿÿÿÿÿÿ888á%%%û$$(þ$$(ÿ003ÿ336ÿ336ÿ336ÿ336ÿ<9:ÿ@<;ÿ655þ333ü<<<ãÿÿÿÿÿÿ;;;á+++û**.þ**/þ226þ559þ559þ559þ448þ448þ559þ558þ666ü>>>ãÿÿÿÿÿÿ000Øÿ""$ÿÿ666ÿ;;;ÿ;;;ÿ===ÿ:::ÿdM<ÿzV=ÿzV=ÿ\F5ÿ;;;Þÿÿÿÿÿÿ000Økk¿ÿÅÿ==vÿMMMÿXXXÿmmmÿiiiÿGGGÿdM=ÿbJ9ÿ) ÿÿ;;;Þÿÿÿÿÿÿ88CÝ‹‹Ïÿoooÿddºÿ;;;ÿSSSÿbbbÿWWWÿOOOÿaM>ÿeM<ÿK<0ÿÿ;;;Þÿÿÿÿÿÿ000ØPP™ÿ{{Îÿ..Uÿ;;;ÿMMMÿNNNÿPPPÿAAAÿbL<ÿmO9ÿU@0ÿÿ;;;Þÿÿÿÿÿÿ000Øÿÿÿ777ÿ<<<ÿ<<<ÿ<<<ÿ:::ÿ_J;ÿoP9ÿ9-%ÿÿ;;;Þÿÿÿÿÿÿ>>>Ë222Ó112Ô112Ô667Ö99:×99:×99:×889×888×99:×99:×:::Ö>>>Ìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€ÿÿ(0` ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ333++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ+++ """!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""" +++ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ "/8>@AAAAAAAAAAAAAAAAAAAAAAAAAA@>8/" ÿÿÿÿÿÿÿÿÿ 4 Z---—445½667Í;=?ÏEFGÏMNPÐXXXÐ]^^Ð\\\ÐY[[ÐXYYÐVXXÐUXXÐPSSÐIMNÐCGIÐBÐ>EGÐEIKÐKPQÐPUVÐSXXÐLPPÐEHIÐ=AAÐ7:;Ð123Ð,.0Ð(*+Ï%&'Ï "#Í ¿$&&™ #Z4 ÿÿÿ <+++”9::ô:<<ü9>=ý9?>ÿ:ÿ.=9ÿ.<8ÿ-;8ÿ,97ÿ,86ÿ+75ÿ*65ÿ)54ÿ)43ÿ(22ÿ'12ÿ'01ÿ&/0ÿ%./ÿ%-/ÿ$,.ÿ#*-ÿ#*,ÿ")-þ!(+þ (,ý (+ý'*ü'+ü&)û&)ú%)ú%(ù$)ö*02øDHHþ9<<—4 "Z./1ô6?<ÿ3E>ÿ3D?ÿ3C>ÿ2B>ÿ1A<ÿ1@<ÿ0?;ÿ/>:ÿ/=9ÿ.<9ÿ-:8ÿ-97ÿ,86ÿ,76ÿ+65ÿ+54ÿ*43ÿ)23ÿ)12ÿ(01ÿ'/0ÿ'.0ÿ&-/ÿ%,.ÿ%,-ÿ$+.ÿ#*,þ"*-þ"*,þ ),ý!)-ý',ý&*ü%*ü%(û$)ø079ùMRS÷(((\" """/ !#—.12ü5G@ÿ5G@ÿ4F@ÿ6GBÿ6GCÿ7GBÿ6FBÿ6DBÿ5CAÿ4B@ÿ4A?ÿ3@?ÿ2??ÿ2=>ÿ1==ÿ0<=ÿ0;<ÿ/:;ÿ.9:ÿ.7:ÿ.69ÿ-58ÿ,48ÿ,37ÿ+26ÿ*15ÿ*05ÿ)/5ÿ(/3þ'/3þ'/3þ%.2þ$,2ý"+/ý&+ý&*ü%(û%*öLQRü=AAœ/"""3338!#%½065ý5IAÿ6IBÿ9JEÿ=MJÿCQQÿDRSÿESTÿDQSÿDPSÿCORÿBNQÿBNPÿBMPÿALPÿAJOÿ@JNÿ?INÿ?HMÿ>GLÿ>FLÿ>FLÿ=DKÿGþ8>Fþ6 $'Ë1:8ÿ7JAÿ8KEÿ@QMÿHMMÿIKMÿJLNÿKMOÿKMOÿKMOÿKLOÿKLOÿJLNÿJLNÿJLNÿJLNÿJLNÿJKNÿJKNÿJKNÿJKNÿJKNÿJKNÿJKNÿJKMÿIJMÿIJMÿIJMÿIJMÿIJMÿIJMÿIJMÿHILÿGHJÿCEHÿ,4:ý"+/ý&*ü%)ú;BCûJMMÎ>$$$333+++###@ #%Ì0:8ÿ9LCÿ;NFÿEUUÿFGHÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDFÿ39Bþ$-2ý ),ý%*ûRJÿL[ZÿGIJÿÿÿÿÿÿÿÿÿ,,,ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ000ÿCI)ÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿ½èÿÿ&&&ÿEFHÿ:@Hþ(/4þ!)-ý'+ü:ABüIMMÐA!!!++++++!!!A"$Î0:7ÿ:PEÿ>RKÿL\\ÿGIJÿÿÿÿ++.ÿ..2ÿÿÿÿ,,,ÿGGGÿNNNÿ;;;ÿEEEÿOOOÿ:::ÿBBBÿQQQÿ;;;ÿ000ÿCI)ÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿ½èÿÿ&&&ÿEFHÿ;AKþ(/4þ"*,þ'+ü:@AýHMMÐA!!!++++++!!!A"$Î0:8ÿ;QFÿ?SKÿL]]ÿGIJÿÿ''-ÿ;;gÿQQ‡ÿPPƒÿ;;kÿ//9ÿÿ,,,ÿƒƒƒÿŽŽŽÿTTTÿ~~~ÿ™™™ÿZZZÿwwwÿ›››ÿZZZÿ///ÿ>B+ÿ{—ÿ{—ÿ`vÿAPÿAPÿAPÿ;Hÿÿ&&&ÿFFIÿ:AJÿ*06þ"*,þ (+ý:@AýGLLÐA!!!++++++!!!A $Î0;7ÿ;RGÿ@TLÿM^]ÿGIJÿÿ;;dÿ––­ÿ¬¬¬ÿ©©©ÿ‚‚’ÿ99nÿ"""ÿ,,,ÿiiiÿ¢¢¢ÿSSSÿiiiÿÿYYYÿaaaÿ§§§ÿ[[[ÿ000ÿCI)ÿÐÿÿÐÿÿoˆÿÿÿÿÿÿ&&&ÿFFIÿ?þFIIÐA!!!++++++!!!A #Î0;7ÿ>VIÿBXOÿOa_ÿHIJÿÿ;;nÿÄÄÒÿ£££ÿ   ÿ°°·ÿ<ELÿ+38ÿ&,/ÿ#*-ÿ8>?ÿEIIÐA!!!++++++!!!A#Î/<7ÿ>WJÿCYOÿOb`ÿHIJÿÿ))4ÿPPƒÿ––Äÿ½ÿNN„ÿ22Aÿÿ,,,ÿ:::ÿXXXÿnnnÿ\\\ÿ€€€ÿQQQÿwwwÿbbbÿ:::ÿ000ÿ*D*ÿÐÿÐÿÐÿÐÿÉÿÿÿÿ&&&ÿFGIÿ>EMÿ,58ÿ&-0ÿ$+.ÿ8=?ÿEHIÐA!!!++++++!!!A!Î/;8ÿ?YKÿCZPÿPc`ÿHIKÿÿÿ !ÿ00=ÿ22@ÿ$$&ÿÿÿ,,,ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ000ÿ*G*ÿèÿèÿèÿèÿÿÿÿÿ&&&ÿFGIÿ?FNÿ-69ÿ'/0ÿ%-/ÿ8=?ÿCGHÐA!!!++++++!!!A!Î0<8ÿ@ZLÿD\QÿPc`ÿHJKÿÿÿÿÿÿÿÿÿ,,,ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ000ÿ)I)ÿÿÿÿÿÿÿÿÿÿÿÿÿ&&&ÿFGIÿ?GOÿ.7:ÿ(01ÿ%./ÿ8=?ÿCGGÐA!!!++++++!!!A!Î/;7ÿA[LÿE]RÿQeaÿHJKÿÿÿÿÿÿÿÿÿ,,,ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ111ÿ2@2ÿ„ÿ„ÿ„ÿ„ÿ###ÿ###ÿ###ÿ---ÿ&&&ÿFGIÿ@HOÿ.8:ÿ)12ÿ&/0ÿ7<=ÿBFGÐA!!!++++++!!!A!Î/<8ÿA\MÿE^SÿRfbÿHJKÿÿÿÿÿÿÿÿÿÿ###ÿ###ÿ###ÿ###ÿ###ÿ###ÿ###ÿ###ÿ###ÿÿÿÿÿÿÿÿÿÿÿÿFGIÿAIOÿ/9:ÿ)23ÿ'01ÿ6<=ÿAEFÐA!!!++++++!!!A Î/<8ÿB]NÿE_SÿRgcÿJKLÿEFFÿFFGÿFFGÿFFGÿFFGÿFFGÿFFGÿFFGÿFFGÿFFGÿFFGÿFFGÿFFGÿFFGÿFFGÿFFGÿFFGÿFFGÿFFGÿFFGÿFFGÿFFGÿFFGÿFFGÿFFGÿFFGÿFFGÿFFGÿEEFÿJJKÿAJPÿ0:;ÿ*43ÿ(22ÿ6<=ÿAEEÐA!!!++++++!!!A Î/<8ÿC_OÿF`TÿRgcÿIJKÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿGHJÿAKQÿ1;<ÿ+54ÿ(33ÿ6<=ÿAEEÐA!!!++++++!!!AÎ0<8ÿE`PÿGaTÿSicÿHJKÿÿÿÿÿÿÿÿÿ'''ÿ333ÿ333ÿ333ÿ333ÿ333ÿ333ÿ333ÿ333ÿ333ÿ***ÿ///ÿ333ÿ333ÿ333ÿ333ÿ333ÿ333ÿ333ÿ333ÿ###ÿFGIÿBLRÿ1<=ÿ,65ÿ)43ÿ5<<ÿ@CCÐA!!!++++++!!!AÏ0<8ÿGaRÿIbUÿTjdÿHJKÿÿÿÿÿÿÿÿÿ,,,ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ000ÿCI)ÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿ½èÿÿ&&&ÿFGIÿCMRÿ2>>ÿ,76ÿ*54ÿ5<<ÿ>CCÐA!!!++++++!!!AÏ1<9ÿIbSÿKcWÿVjeÿHJKÿÿÿÿ))+ÿ,,/ÿÿÿÿ,,,ÿFFFÿLLLÿ:::ÿDDDÿNNNÿ;;;ÿBBBÿOOOÿ<<<ÿ000ÿCI)ÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿ½èÿÿ&&&ÿFHIÿDNRÿ3?>ÿ,97ÿ*75ÿ5;<ÿ>BBÐA!!!++++++!!!AÏ1;9ÿLcUÿNdYÿWkgÿHJKÿÿ&&+ÿ;;eÿOO†ÿLL€ÿ==kÿ..7ÿÿ,,,ÿƒƒƒÿŽŽŽÿSSSÿ~~~ÿ˜˜˜ÿYYYÿwwwÿšššÿZZZÿ///ÿ=A+ÿw’ÿw’ÿ^sÿAPÿAPÿAPÿ;Hÿÿ&&&ÿFHIÿDOSÿ4@?ÿ-:7ÿ+86ÿ5;;ÿ=AAÐA!!!++++++!!!AÏ2<9ÿNdWÿPeZÿYlhÿHJKÿÿ;;bÿ’’«ÿ­­­ÿªªªÿ~~ÿ99mÿ!!!ÿ,,,ÿkkkÿ¨¨¨ÿTTTÿkkkÿÿZZZÿbbbÿ¬¬¬ÿYYYÿ000ÿCI)ÿÐÿÿÐÿÿoˆÿÿÿÿÿÿ&&&ÿGHIÿEOTÿ4A@ÿ.;8ÿ,96ÿ4;;ÿ=AAÐA!!!++++++!!!AÏ2<9ÿPdXÿRf\ÿ[miÿIJKÿ))+ÿjj£ÿ±±±ÿ}}}ÿxxxÿ¥¥¥ÿNN†ÿ77Aÿ,,,ÿ:::ÿ999ÿ:::ÿ:::ÿ999ÿ:::ÿ:::ÿ999ÿ:::ÿ000ÿBH*ÿÄðÿÄðÿjÿÿÿÿÿÿ&&&ÿGHIÿEQTÿ5BAÿ.<9ÿ-:7ÿ4;;ÿ<@@ÐA!!!++++++!!!AÏ2;9ÿSeZÿTf]ÿ\mjÿIJKÿ**/ÿ„„¸ÿ¬¬¬ÿvvvÿrrrÿ¢¢¢ÿbb“ÿ99Fÿ,,,ÿ:::ÿHHHÿnnnÿLLLÿmmmÿWWWÿdddÿaaaÿ:::ÿ000ÿ0?0ÿˆÿˆÿˆÿˆÿ…ÿÿÿ)))ÿ&&&ÿGHJÿERUÿ6DBÿ/>:ÿ-;8ÿ4;:ÿ;>>ÐA!!!++++++!!!AÏ2;:ÿUf[ÿVg_ÿ_nkÿIKLÿÿ<>{ÿ%%'ÿ,,,ÿ:::ÿuuuÿ:::ÿwwwÿrrrÿkkkÿsssÿ:::ÿ:::ÿ000ÿ)I)ÿÿÿÿÿÿÿÿÿøÿÿÿÿ&&&ÿGHJÿFRVÿ6EBÿ0?;ÿ.=9ÿ3::ÿ;=>ÐA!!!++++++!!!AÏ3;:ÿWg]ÿXh`ÿ`nmÿIKLÿÿ**6ÿUU‰ÿ––Äÿ’’¾ÿQQ‰ÿ33Cÿÿ,,,ÿ:::ÿXXXÿnnnÿ\\\ÿ€€€ÿQQQÿwwwÿbbbÿ:::ÿ000ÿ*E*ÿØÿØÿØÿØÿÑÿÿÿÿ&&&ÿGHJÿGSVÿ7ECÿ1@;ÿ/>:ÿ3::ÿ:==ÐA!!!++++++!!!AÏ4;;ÿZh^ÿZibÿbonÿIKLÿÿÿ!!#ÿ11@ÿ33Dÿ%%(ÿÿÿ,,,ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ000ÿ*F*ÿàÿàÿàÿàÿÿÿÿÿ&&&ÿGHJÿHUWÿ8FDÿ1A<ÿ0?:ÿ3::ÿ8<=ÐA!!!++++++!!!AÏ4;:ÿ\i`ÿ]jbÿepoÿIKLÿÿÿÿÿÿÿÿÿ,,,ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ000ÿ)I)ÿÿÿÿÿÿÿÿÿÿÿÿÿ&&&ÿGHJÿHVWÿ8HEÿ2C=ÿ0@;ÿ3:9ÿ8;<ÐA!!!++++++###@Î5;;ÿ^jaÿ^jdÿeppÿIKLÿÿÿÿÿÿÿÿÿ,,,ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ000ÿ0?0ÿ‰ÿ‰ÿ‰ÿ‰ÿ ÿ ÿ ÿ***ÿ&&&ÿGHJÿGUWÿ8HDÿ3D>ÿ1B<ÿ3:9ÿ7;;Ï@!!!+++333$$$>Í5;;ÿakcÿ`keÿepmÿIJKÿÿÿÿÿÿÿÿÿÿ&&&ÿ&&&ÿ&&&ÿ&&&ÿ&&&ÿ&&&ÿ&&&ÿ&&&ÿ&&&ÿ ÿ ÿ###ÿ###ÿ###ÿ###ÿ###ÿ###ÿ###ÿ###ÿÿFHHÿETSÿ8IDÿ5E@ÿ2C=ÿ2:9ÿ7:;Î>$$$3333338¾-23ýbkdÿbleÿeokÿNPPÿIJKÿJKLÿJKLÿJKLÿIKLÿIKLÿIKLÿIKLÿIKLÿIJLÿHJKÿHJKÿHJKÿHJKÿHJKÿHJKÿHJKÿHJKÿHJKÿHJKÿHJKÿHJKÿHIKÿHIKÿHIKÿHIKÿHIKÿGIJÿFHIÿILLÿARNÿ8IDÿ4E?ÿ3D>ÿ277ý367À8333"""/™"&ýckeÿcleÿclgÿenkÿfpnÿeppÿeqqÿdqpÿbpnÿaomÿ_olÿ]nkÿ\mjÿZliÿYlgÿWlfÿVkfÿUieÿTidÿThdÿSgcÿSfcÿSfbÿRebÿQcaÿQb`ÿPb`ÿPa`ÿO`_ÿO_^ÿM]^ÿK[[ÿHXWÿBSPÿ;MHÿ7JBÿ4F@ÿ3D>ÿ145ý/02œ/""" "Z#÷EJIÿdleÿcleÿbkeÿakfÿ`keÿ^keÿ[jcÿYibÿWh`ÿVg_ÿTf^ÿQe\ÿOd[ÿMcZÿLcYÿJcWÿHbVÿGaUÿF_TÿF^TÿE]SÿD\RÿD[QÿCZQÿBXPÿBWOÿAWOÿ@VOÿ@UNÿ@TMÿ?SLÿ=PJÿ;NFÿ8LCÿ6IAÿ5H@ÿ,53ÿ/23ø"""\" 4—!$)ýIMKÿeleÿbkdÿakcÿ_iaÿ]haÿ[h`ÿYg_ÿVf]ÿTe\ÿRdZÿPcYÿNbWÿKaVÿIaTÿG`SÿE`QÿC_PÿB^OÿB]NÿA[Nÿ@ZMÿ?YLÿ?XKÿ>WKÿ=VJÿ=TIÿÿ4>;ÿ/55ý(++ý#$&ù™= ÿÿÿ 4](((™000»224Ê356Ì556Î669Ï<=>ÐEFGÐNPPÐXXXÐ]]]Ð\\\ÐY[[ÐXYYÐVXXÐUXXÐPSSÐIMNÐBGIÐBÐ>EGÐEILÐKPQÐPVVÐRWWÐLPPÐEHHÐ=AAÐ78:Ï123Ï,..Î()*À"#%œ]4 ÿÿÿÿÿÿÿÿÿ "/8>@AAAAAAAAAAAAAAAAAAAAAAAAAA@>8/" ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ+++ """!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""" +++ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ333++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþøððààààààààààààààààààààààààààààààààààððøþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ(€ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ+++$$$$$$                                                                              $$$$$$+++ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ333+++            +++333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ333$$$     $$$333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ+++ """"#%'()))**********************************************************************)))('%#"""" +++ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ333$$$   $).1479:;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;:9741.)$   $$$333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ333  !'/5;@EILNOPQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRQPONLIE@;5/'! 333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ+++ &/7?HOV[`ekmnoooop p p p !!p!!!p!!!p!!!p!!!p!!!p!!!p!!!p!!!p!!!p!!!p!!!p!!!p!!!p!!!p !!p !!p !!p !!p p p p p pppppppppppp p p p p p p !!p !!p !!p p p p pppppppppppppppoooonmke`[VOH?7/& +++ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ333 "+5?JTa+++‘455Â8:;ß;<=î=>?û=?Aþ>?Aÿ>@BÿCDFÿHIKÿLMOÿQRSÿUVWÿYZ[ÿ^_`ÿbcdÿghhÿlllÿqqqÿqrrÿqqqÿpppÿoppÿnooÿmooÿlnnÿlnnÿkmmÿjllÿillÿhkkÿgkkÿfjjÿfiiÿdhhÿaefÿ]bcÿZ_`ÿV\^ÿTY[ÿPVYÿMSVÿJPTÿFMQÿCJOÿ@GLÿCJNÿFMQÿHOSÿKRVÿNUXÿQWZÿTZ\ÿV]_ÿY`aÿ\bcÿ_efÿahhÿekkÿekkÿaggÿ^ccÿ[``ÿW\\ÿTXYÿPTUÿMQQÿIMMÿFIJÿBFGÿ?BCÿ;?@ÿ8;<ÿ69:ÿ478ÿ256ÿ034ÿ.12ÿ,.0ÿ+,.ÿ)+,ÿ'(*ÿ%&(ÿ#$&ÿ!"$ÿ "ý !#ñ$&'â&()Ä$%&“aTJ?5+" +++ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  #.9ER_000«:;;ò;;<ú;<=û<=>ü=>?ý=>@þ=?Aþ>?Aÿ>@BÿCDFÿGHJÿLMOÿPQSÿUVWÿYZ[ÿ]^_ÿbcdÿgggÿlllÿpppÿqrrÿqqqÿpppÿoppÿnooÿmooÿlnnÿlnnÿkmmÿjllÿillÿhkkÿgkkÿfjjÿfiiÿdhhÿaefÿ^bcÿZ_`ÿW\^ÿTY[ÿQVYÿMSVÿJPTÿGMRÿCJOÿAGLÿCJNÿELPÿHOSÿKRUÿNUXÿQWZÿSZ\ÿV]_ÿY_aÿ\bcÿ^efÿahhÿdjjÿekkÿaggÿ^ccÿ[``ÿW\]ÿTXYÿPUUÿMQQÿINNÿFIJÿBFGÿ?BCÿ;?@ÿ8;<ÿ69:ÿ478ÿ256ÿ034ÿ.12ÿ-/0ÿ+,.ÿ)+,ÿ')*ÿ%&(ÿ#%&ÿ!"$ÿ "ÿ !#ÿ$&(ÿ*,-ÿ.12ÿ357ù.01®_RF9.# ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$$$ #/;JX###|666Ú::;ù:;;û;<=ý<=>ÿ<=?ÿ=>?ÿ=>@ÿ=?Aÿ>?Aÿ>@BÿBDFÿGHJÿKMNÿPQSÿTUVÿYZ[ÿ]^_ÿbcdÿgggÿkkkÿpppÿrrrÿqqqÿpqqÿoppÿnooÿmooÿlnnÿlnnÿkmmÿjllÿillÿhkkÿgkkÿgjjÿfiiÿdhhÿaefÿ^bcÿ[_aÿW\^ÿTY\ÿQVYÿNSWÿJPTÿGMRÿCJOÿAGLÿBINÿELPÿHOSÿKRUÿMTWÿQWZÿSZ\ÿV]_ÿY_aÿ[bcÿ^efÿaghÿdjjÿekkÿaggÿ^ddÿ[``ÿW\]ÿTYYÿPUUÿMRRÿINNÿFJKÿBFGÿ?CDÿ;?@ÿ8;<ÿ69:ÿ478ÿ356ÿ034ÿ/12ÿ-/0ÿ+-.ÿ)+,ÿ')*ÿ%&(ÿ#%&ÿ!#%ÿ "ÿ "ÿ$&(ÿ)+,ÿ.12ÿ357ÿ8;<ÿ8<=à&'(}XJ</# ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ+++ !-;K\...ª999ó:::ù:;<ü;<<ÿ<<=ÿ;>>ÿ7?=ÿ6@=ÿ5?=ÿ4@=ÿ4?=ÿ4?=ÿ5@>ÿ6A?ÿ8C@ÿ8CAÿ:EBÿ;ECÿ=GDÿ>GEÿ?IGÿ@IGÿBKIÿBLJÿBKIÿAKIÿAJHÿ@IHÿ@IHÿ?HGÿ?HGÿ>GGÿ>GFÿ>FFÿ=FEÿ>ÿ4<>ÿ3;=ÿ2:<ÿ08;ÿ/8:ÿ.69ÿ.69ÿ/79ÿ08:ÿ18;ÿ19;ÿ29;ÿ3:<ÿ3:=ÿ4;=ÿ5<>ÿ6=?ÿ7=@þ6>@þ7>Aþ6=@þ4<>þ3:<þ29;ý17:ý068ý.57ü-46ü,25ü*14ü)03ü(/2ü'-0ü&-0û%,/û%+/û$+.ú#*,ú"),ú!(+ú!(*ú &)ú&)ù%(ù$(ø#'ø#&ø %(ú'*,ý-01ÿ357ÿ7:;ÿ<@Aÿ@DEû7;;®\K<." +++ÿÿÿÿÿÿÿÿÿÿÿÿ +9I\111Ð888÷999ù:;;þ;;<ÿ9=<ÿ5@<ÿ1B<ÿ1B<ÿ1A<ÿ0A;ÿ0@;ÿ0@;ÿ0?;ÿ/?:ÿ/>:ÿ/>:ÿ/>9ÿ.=9ÿ.=9ÿ.<9ÿ.<8ÿ-;8ÿ-;8ÿ-;8ÿ-:7ÿ,:7ÿ,97ÿ,96ÿ,86ÿ+86ÿ+86ÿ+75ÿ+75ÿ*65ÿ*64ÿ*54ÿ*54ÿ)44ÿ)43ÿ)43ÿ(33ÿ(33ÿ(22ÿ(22ÿ'12ÿ'11ÿ'11ÿ'01ÿ&01ÿ&/0ÿ&/0ÿ&.0ÿ%./ÿ%-/ÿ%-/ÿ%-/ÿ$,.ÿ$,.ÿ$+.ÿ$+.ÿ#*-ÿ#*-ÿ#*-ÿ#*-þ"*-þ"*-þ")-þ")-þ!)+ý!(+ý!(+ý!(+ý (+ü (+ü '+ü'+ü'+û'+û'+û'+û'*ú'*ú')ú&)ú&)ù&)ù%)ù%)ø%)ø%)ø%)÷$)ö$)ö$)ô '+ö/24ý7:;ÿ:ÿ/>9ÿ.=9ÿ.=9ÿ.<9ÿ.<8ÿ-;8ÿ-;8ÿ-;8ÿ-:7ÿ,:7ÿ,97ÿ,96ÿ,86ÿ+86ÿ+86ÿ+75ÿ+75ÿ*65ÿ*65ÿ*54ÿ*54ÿ)54ÿ)43ÿ)43ÿ(33ÿ(33ÿ(22ÿ(22ÿ'12ÿ'11ÿ'11ÿ'01ÿ&01ÿ&/0ÿ&/0ÿ&.0ÿ%.0ÿ%-/ÿ%-/ÿ%-/ÿ$,.ÿ$,.ÿ$+.ÿ$+.ÿ#+-ÿ#*-ÿ#*-ÿ#*-ÿ"*-þ"*-þ")-þ"),þ!(+þ!(+þ!(+ý!(+ý (+ý (+ý '+ý '+ü'+ü'+ü'+ü'*ü'*ü'*û')û&)û&)û%)ú%)ú%)ú%)ú%)ù%)ù$)ø$)÷$)ö%)ô*03ùAB®XF5& $$$ÿÿÿÿÿÿ!/?R !|012ô445ú898ÿ9<;ÿ5C=ÿ3D>ÿ2D=ÿ2C=ÿ2C=ÿ2B<ÿ1B<ÿ1B<ÿ1A<ÿ1A;ÿ0@;ÿ0@;ÿ0?;ÿ/?:ÿ/?:ÿ/>:ÿ/>9ÿ.=9ÿ.=9ÿ.<9ÿ.<8ÿ-;8ÿ-;8ÿ-;8ÿ-:7ÿ,:7ÿ,97ÿ,96ÿ,86ÿ+86ÿ+86ÿ+75ÿ+75ÿ*65ÿ*65ÿ*54ÿ*54ÿ)54ÿ)43ÿ)43ÿ)33ÿ(33ÿ(22ÿ(22ÿ'12ÿ'11ÿ'11ÿ'01ÿ&01ÿ&/0ÿ&/0ÿ&.0ÿ%.0ÿ%./ÿ%-/ÿ%-/ÿ$,.ÿ$,.ÿ$+.ÿ$+.ÿ#+-ÿ#*-ÿ#*-ÿ#*-ÿ"*-ÿ"*-þ")-þ"),þ!(,þ!(+þ!(+þ!(+þ (+ý (+ý '+ý '+ý'+ý'+ý'*ý'*ü'*ü'*ü')ü&)ü&)ü%)ü%)û%)û%)û%)ú%)ú%)ù$)ø$(÷$(õ#*.ö<@BýEIIÿJOOÿMRSû-//€R?/!ÿÿÿÿÿÿ+++ '8J_+,.Û012ù466þ898ÿ4C=ÿ3E>ÿ3E>ÿ3D>ÿ2D=ÿ2C=ÿ2C=ÿ2C=ÿ1B<ÿ1B<ÿ1A<ÿ1A;ÿ0@;ÿ0@;ÿ0?;ÿ0?:ÿ/?:ÿ/>:ÿ/>9ÿ.=9ÿ.=9ÿ.<9ÿ.<8ÿ-;8ÿ-;8ÿ-;8ÿ-:7ÿ,:7ÿ,97ÿ,96ÿ,86ÿ+86ÿ+86ÿ+75ÿ+75ÿ*65ÿ*65ÿ*54ÿ*54ÿ)54ÿ)43ÿ)43ÿ)33ÿ(33ÿ(22ÿ(22ÿ'12ÿ'11ÿ'11ÿ'01ÿ&01ÿ&/0ÿ&/0ÿ&.0ÿ%.0ÿ%./ÿ%-/ÿ%-/ÿ$,.ÿ$,.ÿ$+.ÿ$+.ÿ#+-ÿ#*-ÿ#*-ÿ#*-ÿ"*-ÿ"*-ÿ")-þ"),þ!(,þ!(+þ!(+þ!(+þ (+þ (+þ (+ý '+ý'+ý'+ý'+ý'*ý'*ý'*ý')ü&)ü%)ü%)ü%)ü%)ü%)û%)û%)ú%(ú$(ù$(÷$(õ#+/öEIIÿINNÿNSTÿMRRãaJ8( +++ÿÿÿ   /@T$%'¬-/0ú023ü466ÿ6?;ÿ4F?ÿ3F?ÿ3E>ÿ3E>ÿ3D>ÿ2D=ÿ2C>ÿ3D>ÿ3D>ÿ2C=ÿ2B=ÿ2A=ÿ2A<ÿ1@<ÿ1@<ÿ1@<ÿ1@;ÿ0@;ÿ0?;ÿ0?;ÿ/>:ÿ/>:ÿ/=:ÿ/=9ÿ.=9ÿ.<9ÿ.<9ÿ.;8ÿ-;8ÿ-:8ÿ-:7ÿ-97ÿ,97ÿ,97ÿ,86ÿ,86ÿ+76ÿ+76ÿ+65ÿ+65ÿ*65ÿ*54ÿ*54ÿ*44ÿ)44ÿ)33ÿ)33ÿ)33ÿ(22ÿ(22ÿ(12ÿ'12ÿ'01ÿ'01ÿ'/1ÿ&/1ÿ&/0ÿ&.0ÿ&.0ÿ%-/ÿ%-/ÿ%,/ÿ%,/ÿ$,.ÿ$+.ÿ$+.ÿ$+.ÿ#+.ÿ#+.ÿ#*.þ#*-þ")-þ"),þ"),þ"),þ!),þ!),þ!),þ!(,þ (,ý (,ý (+ý (+ý(+ý(+ý(*ý'*ý&*ý%*ü%)ü%)ü%)ü%)û%)û%(ú$(ù$(÷$(õ29;ùINNÿMRSÿSXXÿEII²T@/  333 %5Ha(*-ó-/1û034ÿ387ÿ4G?ÿ4F?ÿ4F?ÿ3F?ÿ3E>ÿ4F?ÿ4E?ÿ3D>ÿ3C?ÿ3D>ÿ3D>ÿ2C>ÿ2C>ÿ3C>ÿ3C=ÿ2B=ÿ2B=ÿ2A=ÿ2A<ÿ1A<ÿ1@<ÿ1@<ÿ1?;ÿ0?;ÿ0>;ÿ0>:ÿ/>:ÿ/=:ÿ/=:ÿ/<9ÿ.<9ÿ.;9ÿ.;9ÿ.:8ÿ-:8ÿ-:8ÿ-97ÿ-97ÿ,87ÿ,87ÿ,76ÿ,76ÿ+76ÿ+65ÿ+65ÿ+55ÿ*55ÿ*44ÿ*44ÿ*44ÿ)34ÿ)33ÿ)23ÿ(23ÿ(12ÿ(12ÿ(02ÿ'02ÿ'01ÿ'/1ÿ'/1ÿ&.0ÿ&.0ÿ&-0ÿ&-0ÿ%-/ÿ%,/ÿ%,/ÿ%,/ÿ$,/ÿ$,/ÿ$+/ÿ$+.þ#+.þ#*-þ#*-þ#*-þ"*-þ"*-þ"*-þ")-þ!)-þ!)-þ!),ý"),ý (,ý (,ý )+ý (+ý&*ý&*ý&*ü%*ü%)ü%)û%)û%(ú$(ù$(÷%*ôBHIýMRSÿRWXÿV[[øbH5% 333+++ *;O!"‘)+.ú,.0ý034ÿ5C=ÿ5G@ÿ4G?ÿ4F?ÿ4F@ÿ4G@ÿ4E?ÿ4F?ÿ4E@ÿ4F@ÿ5E@ÿ5E@ÿ5FAÿ4E@ÿ4E@ÿ5DAÿ5D@ÿ4C@ÿ4C@ÿ4C@ÿ4C?ÿ3C?ÿ3B?ÿ3B?ÿ3A>ÿ2A>ÿ2@>ÿ2@=ÿ1@=ÿ1?=ÿ1?=ÿ1><ÿ0><ÿ0=<ÿ0=<ÿ0<;ÿ/<;ÿ/<;ÿ/;:ÿ/;:ÿ.::ÿ.::ÿ.:9ÿ.99ÿ-99ÿ-88ÿ-88ÿ-78ÿ,78ÿ,67ÿ,67ÿ,67ÿ+57ÿ+56ÿ+46ÿ+46ÿ+35ÿ+35ÿ+25ÿ*25ÿ*24ÿ*14ÿ*14ÿ)03ÿ)03ÿ)03ÿ)/3ÿ(/2ÿ(.2ÿ(.2ÿ(.2ÿ'.2ÿ'.2ÿ'-2ÿ'-1þ&-1þ&,0þ&,0þ&,0þ%,0þ%,0þ%,0þ%+0þ$+0þ#*0þ#+/ý#+/ý!*.ý!*.ý ),ý '+ý'+ý&+ý&*ý&*ü%)ü%)û%)û%(ú$)ø$)ö'/3öMRSÿRWXÿW]]ÿ8;;“O;* +++$$$ .@V"%'Â)+-ú,/1þ154ÿ5H@ÿ5H@ÿ5G@ÿ4G@ÿ5G@ÿ5FAÿ5GAÿ5GAÿ6GAÿ6GBÿ6GBÿ7ICÿ8HCÿ8HDÿ8HDÿ8GDÿ8FDÿ8FDÿ7EDÿ7EDÿ7EDÿ7ECÿ6ECÿ6DCÿ6DCÿ6CBÿ5CBÿ5BBÿ5BAÿ4BAÿ4AAÿ4AAÿ4@@ÿ3@@ÿ3?@ÿ3?@ÿ3??ÿ2>?ÿ2>?ÿ2=>ÿ2=>ÿ1<>ÿ1<>ÿ1<=ÿ1;=ÿ0;=ÿ0:<ÿ0:<ÿ09<ÿ/9<ÿ/8;ÿ/8;ÿ/8;ÿ.8;ÿ.8;ÿ.7;ÿ-7;ÿ-6:ÿ-6:ÿ-6:ÿ,5:ÿ,59ÿ,49ÿ,49ÿ+39ÿ+38ÿ+38ÿ+28ÿ+27ÿ+17ÿ+17ÿ+17ÿ*17ÿ*17ÿ*07ÿ*06þ)06þ)/5þ)/5þ)/5þ(/5þ(/5þ(/4þ(.4þ'.4þ&-3þ&.3ý%-2ý$,0ý#,/ý"+.ý (,ý&+ý'+ý&*ý&*ü%)ü%)û%)û%)ù$)÷$)ôHMNþRWXÿV\\ÿIMMÅV@. $$$$$$ "1E[$&)ß)+-û,/1ÿ3;8ÿ5IAÿ5H@ÿ5H@ÿ6HAÿ5GAÿ5HAÿ6GBÿ7ICÿ8ICÿ9JEÿ:JFÿ;KGÿ;KHÿBÿ4>Bÿ4>Aÿ4=Aÿ4=Aÿ3ÿ29>ÿ29>ÿ18>ÿ18=ÿ18=ÿ17=ÿ07=ÿ06=ÿ06=ÿ06=ÿ/6=ÿ/6=ÿ/5=ÿ/5<þ.5<þ.4;þ.4;þ.4;þ-4;þ-4;þ-4:þ,3:þ,39þ+29þ)16ý(/5ý&.3ý%-1ý#,/ý!)-ý'+ý'+ý&*ý%*ü%)ü%)û%)ú%)ø$)ö9?BúQVWÿV\\ÿQVVâ[E1" $$$ """#4I`$'*í(*-ü,/1ÿ3?;ÿ6IAÿ5IAÿ6IAÿ6H@ÿ6HAÿ6HBÿ7ICÿ9JEÿ:KHÿNKÿ?NMÿAPNÿAPOÿBPPÿCQQÿBPQÿBPQÿCPQÿCPQÿBOPÿBOPÿBOPÿBNOÿANOÿANOÿANOÿAMNÿAMNÿAMNÿALNÿALNÿ@KNÿ@KNÿ@JMÿ?JMÿ?IMÿ?IMÿ?ILÿ>ILÿ>ILÿ>HKÿ>HKÿ=GKÿ=GKÿ=GJÿ=FJÿFÿ8>Eÿ8=Eÿ8=Eÿ8=Eÿ7=Eÿ7=Eÿ7þ-4:ý+28ý(05ý%.2ý#+/ý!)-ý&+ý&+ý&*ý%)ü%)ü%)ú%)ù%)÷29;ùQVWÿU[[ÿTYYñ`I4#"""  %7Le%(+ù(*-ü,/1ÿ4A<ÿ6JAÿ6IAÿ6JBÿ6IAÿ7JCÿ8IDÿ9KEÿ;LGÿ=NJÿAQOÿCRQÿETTÿGTWÿIVXÿJWYÿJWZÿKW[ÿJWZÿKW[ÿKW[ÿKW[ÿJWZÿJVZÿJVZÿJUZÿIUZÿITZÿITZÿITYÿITYÿITYÿISYÿISXÿHRXÿHRXÿHRWÿHRWÿGQWÿGQWÿGQWÿGPWÿGPWÿGOVÿGOVÿFOVÿFOVÿFOUÿFNUÿENUÿEMUÿEMTÿELTÿDLTÿDLTÿDLTÿDLTÿDKTÿDKSÿDJSÿDJSÿCIRÿCIRÿCIRÿBIRÿBIQÿBHQÿBHQÿAGQÿAGQÿAGQÿAGQÿAGPÿAFPÿAFPÿAFPÿ@FPÿ@FPÿ@EPÿ@EOþ?EOþ?DOþ?DNþ>DNþ=CMþý,39ý'05ý%.3ý#,/ý!),ý'*ý&*ý%*ü%)ü%)û%)ù%)÷.58ùQVWÿU[[ÿX^^ýeL7% 333'8Ml$'*û(*-ý,.0ÿ4C=ÿ6JAÿ6JAÿ7IAÿ6JCÿ8JCÿ:LEÿ;LHÿ=NJÿCROÿFSRÿJUWÿLWZÿOZ]ÿPZ_ÿR[`ÿR[aÿS\aÿS\bÿR[aÿR[aÿR[aÿR[aÿR[aÿRZaÿRZaÿRZ`ÿQZ`ÿQZ`ÿQZ`ÿQY_ÿPY_ÿPY_ÿPX_ÿPX_ÿPX_ÿPX_ÿPW_ÿPW_ÿOW_ÿOV_ÿOV_ÿOV_ÿOV_ÿOU_ÿOU^ÿOU^ÿOU^ÿOU]ÿOU]ÿNU]ÿNT]ÿNT]ÿNT]ÿNT]ÿNT\ÿNS\ÿNS\ÿMR\ÿMR[ÿMR[ÿMR[ÿLR[ÿLQ[ÿLQ[ÿLP[ÿLPZÿLPZÿLPZÿKOZÿKOZÿKOZÿKOZÿJOZÿJOZÿJOZÿJOZÿJOZÿJOZÿJNZÿJNZÿJNYþJNYþJNYþIMXþHLVþFJUþDIRþAEOþ>CKþ:?Fþ4:@ý,3:ý(06ý$-2ý"+/ý (+ý'+ý%*ü&)ü%)û%)ú%)ø+36øPUVÿU[[ÿX^^ÿlM8'333333(:On$'*û'*,ý,.0ÿ4C=ÿ6KBÿ7KBÿ7KBÿ8KDÿ8KEÿ;MFÿ=OJÿAQNÿHRQÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿFHJÿ07>ý+29ý&.3ý#+/ý!*-ý (+ý'*ý&)ü%)û%)ú%)ø+46ùPUVÿUZZÿX^^ÿ nO:(333333 );Pn#'*û'*,ý+.0ÿ4C=ÿ7KBÿ7LCÿ7KBÿ8KCÿ:LFÿÿ7LBÿ8LCÿ7LCÿ9LDÿ:NGÿ>OKÿASPÿFUUÿMWXÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$$$ÿMMMÿIKNÿ8>Hþ07?þ+28ý&.2ý"+/ý (,ý(+ý')ü&)ü&)û&)ù,36úOTUÿTYYÿY__ÿ oQ;) 333333 *<Qo#'*û'),ý+.0ÿ5C>ÿ7LCÿ8LBÿ8LCÿ8MFÿ;NGÿ?QKÿCSQÿHXXÿOXZÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$$$ÿMMMÿJLOÿ:@Kþ39Bþ,3:þ'.3ý$,/ý (,ý(,ý'*ý')ü&)û&)ù+35úOTUÿTYYÿX^^ÿ oQ<* 333333 *<Rp#&)û'),ý+-/ÿ5D>ÿ8LCÿ8LCÿ9NDÿ9LFÿÿ8MCÿ9LCÿ9NEÿ:NGÿ=OIÿASNÿEVSÿL[[ÿR[^ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿGGGÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿEEEÿ+++ÿÿ777ÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿFFFÿ ÿÿ$$$ÿMMMÿLMQÿ>DOþ6=Eþ/5<þ)/5þ%,0þ!).þ (,ý'*ý'*ü'*û')ú,35úNSTÿSXXÿX^^ÿ pR<* 333333 *<Rp"%)ü&)+ý*,/ÿ5E>ÿ8MCÿ9MCÿ:NEÿ:NGÿ>QJÿASNÿGWUÿL[\ÿS[^ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ:::ÿ@C3ÿ@C3ÿ@C3ÿ@C3ÿ@C3ÿ@C3ÿ@C3ÿ@C3ÿ@C3ÿ@C3ÿ@C3ÿ@C3ÿ@C3ÿ@C3ÿ@C3ÿ@C3ÿ@C3ÿ@C3ÿ=?4ÿ666ÿ888ÿDDDÿ!!!ÿÿ$$$ÿMMMÿMNRÿAFPþ7=Fþ/6<þ*06þ&,1þ!).þ (-ý'+ý'*ü'*ü'*ú,36úMRSÿSXXÿW]]ÿ pR<* 333333 *<Rp"%)ü&)+ý*,/ÿ5D>ÿ8NDÿ9MCÿ:NEÿ;OGÿ=QKÿBTNÿHXVÿM\]ÿS[_ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿ–¸ÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿMNRÿAFQþ7=Eþ07=þ)15þ&-1þ").þ (-ý'+ý'*ý'*ü'*ú,36ûMRSÿRWXÿW]]ÿ pR<* 333333 *<Rp"%)ü%(+ý*,/ÿ5E>ÿ9NDÿ9NDÿ:NEÿ;OGÿ>RKÿBTOÿGYUÿN]^ÿT\`ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿ–¸ÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿMNRÿBFRþ8>Fþ17=þ)15þ&-1þ"*.þ!(-þ'+ý'+ý'+ü'+û+36ûMRSÿRWXÿV\\ÿ pR<* 333333 *<Rp"%(ü%(+ý*,.ÿ5E?ÿ9ODÿ:NDÿ:OFÿ;OGÿ>RKÿCUOÿGYVÿN]^ÿT\`ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿ–¸ÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿMNRÿBGRþ8>Fþ17=þ*15þ&-1þ"*.þ!)-þ '+ý'+ý'+ü'+û,36ûMQRÿRWXÿV\\ÿ pR<* 333333 *<Rp"%(ü%(+ý*,.ÿ5F?ÿ9OEÿ:ODÿ;OFÿ;PHÿ>RKÿCUOÿHYVÿN]_ÿT\`ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ999ÿ;;;ÿ999ÿ666ÿ:::ÿ:::ÿ:::ÿ:::ÿ999ÿ;;;ÿ999ÿ555ÿ999ÿ:::ÿ:::ÿ:::ÿ999ÿ;;;ÿ;;;ÿ555ÿ888ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿ–¸ÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿMNRÿBGRþ8?Gþ17=þ*15þ&-1þ"*.þ!)-þ (+ý '+ý'+ü'+û,35üMQRÿQVWÿV\\ÿ pR<* 333333 *<Rp"%(ü%(+ý)+.ÿ6F?ÿ9PEÿ:OEÿ;PFÿSKÿCVPÿHYVÿO^_ÿT\`ÿMMMÿ555ÿÿÿÿÿÿÿÿÿ ÿ111ÿCCCÿ???ÿ,,,ÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿBBBÿzzzÿ{{{ÿkkkÿNNNÿ555ÿ:::ÿ:::ÿ???ÿmmmÿÿoooÿXXXÿ666ÿ999ÿ:::ÿ;;;ÿ\\\ÿ‚‚‚ÿsssÿ```ÿ;;;ÿ888ÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿ–¸ÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿMORÿBGSÿ9?Gþ18>þ*15þ&-1þ#*.þ!)-þ (+þ (+ý '+ý'+ü,35üLQQÿQVWÿU[[ÿ pR<* 333333 *<Rp!$(ü%(+ý)+.ÿ5F>ÿ:PEÿ:PEÿ;PGÿ>>ÿ000ÿÿ;;;ÿ=>6ÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿ–¸ÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿMORÿBHSÿ9?Hÿ28>þ*26þ&-1þ#*.þ")-þ (+þ (+ý (+ý '+ü,35üLQQÿPUVÿU[[ÿ pR<* 333333 *<Rp!$(ü$'*ý)+.ÿ5F?ÿ:QEÿ;PEÿ;QGÿ>>ÿÿÿÿÿÿÿDDDÿVVVÿ½½½ÿ­­­ÿÿŒŒŒÿ|||ÿlllÿ888ÿFFFÿ¾¾¾ÿ±±±ÿ¡¡¡ÿÿ€€€ÿpppÿ>>>ÿ:::ÿžžžÿµµµÿ¥¥¥ÿ•••ÿ„„„ÿtttÿIIIÿ;;;ÿ000ÿÿ;;;ÿ998ÿ+5ÿ+5ÿ+5ÿ+5ÿ+5ÿ+5ÿ+5ÿ"ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿMORÿBHSÿ9?Hÿ18?ÿ+26þ&.2þ#*.þ")-þ!(+þ (+ý (+ý (+ü,25üLQQÿPUVÿU[[ÿ pR<* 333333 *<Rp $'ü$'*ý(+-ÿ6F?ÿ:QFÿ;QEÿ6ÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿMORÿCHSÿ9?Hÿ18?ÿ+27ÿ'.2þ#+/þ")-þ!(+þ!(+þ (+ý (+ü,35üKPPÿPUVÿUZZÿ pR<* 333333 *<Rp $'ü#'*ý(+-ÿ6G?ÿ;QFÿ;QFÿ>>ÿ±±±ÿÓÓÓÿ¶¶¶ÿdddÿ¢¢¢ÿÿ>>>ÿ999ÿ|||ÿ×××ÿÆÆÆÿ¶¶¶ÿ¥¥¥ÿfffÿBBBÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿMORÿCHSÿ:?Hÿ18?ÿ+37ÿ'.3ÿ$+0ÿ"*.þ!(+þ!(+þ!(+ý (+ý,35üKPPÿOTUÿUZZÿ pR<* 333333 *<Rp $'ü#'*ý(*-ÿ6G@ÿ;RFÿ>>ÿ000ÿÿ;;;ÿ=>6ÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿMOSÿCHSÿ:?Hÿ28?ÿ+37ÿ'/3ÿ$+0ÿ#*/þ!),þ!(+þ!(+þ!(+ý,35ýJOOÿOTUÿTYYÿ pR<* 333333 *<Rp #'ü#'*ý(*-ÿ6H@ÿ;RGÿ>>ÿ000ÿÿ;;;ÿ=>6ÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿMOSÿCITÿ:?Hÿ28?ÿ,37ÿ'/3ÿ$,0ÿ#+/ÿ")-þ!),þ!(+þ!(+ý,35ýJOOÿOTUÿTYYÿ pR<* 333333 *<Rp #'ü#&)ý(+-ÿ7G?ÿ;SGÿTJÿ@VMÿDYRÿJ\XÿP``ÿU^aÿMMMÿ555ÿÿÿRRWÿ''~ÿ««»ÿÑÑÑÿºººÿ¡¡¡ÿÿÿyyyÿ{{{ÿ………ÿ•••ÿ§§§ÿÃÃÃÿ˜˜™ÿ++iÿKKyÿIIJÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿMOSÿDITÿ:@Iÿ28?ÿ,37ÿ(/3ÿ%,0ÿ#+/ÿ"*-þ")-þ!),þ!)+ý,34ýJOOÿNSTÿTYYÿ pR<* 333333 *<Rp#&ü#&)ý'+,ÿ7H@ÿTJÿAWMÿDYRÿJ]YÿP``ÿU^aÿMMMÿ555ÿÿÿ\\\ÿ‰ÿÃÃÈÿÎÎÎÿ°°°ÿ˜˜˜ÿ„„„ÿtttÿlllÿnnnÿxxxÿŠŠŠÿŸŸŸÿ¹¹¹ÿ´´´ÿGGfÿ77€ÿ[[`ÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿMOSÿDITÿ;@Iÿ29@ÿ,37ÿ(/3ÿ%,0ÿ$+/ÿ"*-ÿ"*-þ")-þ!),ý,34þINNÿNSTÿSXXÿ pR<* 333333 *<Rp#&ü"%)ý'+,ÿ6H@ÿTKÿAWMÿEZRÿJ]YÿPaaÿU^aÿMMMÿ555ÿÿ&&&ÿWW[ÿ..™ÿÉÉÑÿËËËÿ­­­ÿ•••ÿ€€€ÿoooÿ^^^ÿfffÿtttÿ†††ÿœœœÿ¶¶¶ÿÇÇÇÿWWcÿ''„ÿhhlÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ:::ÿDH0ÿDH0ÿDH0ÿDH0ÿDH0ÿDH0ÿDH0ÿ775ÿ555ÿ555ÿ555ÿ555ÿ555ÿ555ÿ555ÿ555ÿ555ÿ555ÿ555ÿ555ÿ777ÿDDDÿ!!!ÿÿ$$$ÿMMMÿMOSÿDITÿ;AIÿ39@ÿ-38ÿ(/3ÿ%,0ÿ$+/ÿ#*-ÿ"*-ÿ"*-þ")-þ-36þINNÿMRSÿSXXÿ pR<* 333333 *<Rp#&ü"%)ý&),ÿ6H@ÿTIÿ>UKÿAWNÿEZRÿK^YÿPaaÿU^aÿMMMÿ555ÿÿÿYYYÿŒÿÖÖÛÿÍÍÍÿ¯¯¯ÿ˜˜˜ÿƒƒƒÿsssÿjjjÿlllÿwwwÿŠŠŠÿžžžÿ¹¹¹ÿ¼¼¼ÿYYtÿ44€ÿZZ_ÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿxxxÿªªªÿ———ÿGGGÿ:::ÿSSSÿšššÿ¬¬¬ÿ€€€ÿDDDÿ:::ÿ;;;ÿ~~~ÿ«««ÿœœœÿSSSÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ:<:ÿqÿqÿqÿqÿqÿqÿqÿqÿqÿqÿqÿqÿqÿPÿ&&&ÿ&&&ÿ&&&ÿ&&&ÿ&&&ÿ&&&ÿ---ÿDDDÿ!!!ÿÿ$$$ÿMMMÿMOSÿDJTÿ;AIÿ3:@ÿ-38ÿ)04ÿ%-0ÿ$+/ÿ#*-ÿ#*-ÿ"*-þ"*-þ-36þHMMÿMRSÿRWXÿ pR<* 333333 *<Rp"&ü"%)ý&),ÿ7H@ÿUJÿ?UKÿAWNÿE[SÿK^YÿQbaÿU^aÿMMMÿ555ÿÿÿNNSÿ$$}ÿÐÐÞÿÖÖÖÿ¹¹¹ÿ   ÿŽŽŽÿÿwwwÿyyyÿƒƒƒÿ“““ÿ¦¦¦ÿÁÁÁÿ®®¯ÿDD}ÿFFwÿIIIÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ–––ÿÀÀÀÿaaaÿÿØØØÿ@@@ÿhhhÿjjjÿOOOÿ’’’ÿ¤¤¤ÿ:::ÿ±±±ÿ¯¯¯ÿ^^^ÿdddÿŠŠŠÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿMOSÿDJTÿ;BIÿ3:@ÿ-48ÿ)04ÿ&-1ÿ$,/ÿ#*-ÿ#*-ÿ#*-ÿ"*-þ-36þHMMÿMRSÿRWXÿ pR<* 333333 *<Rp"&ü"%(ý&),ÿ7IAÿ=UHÿ=UHÿ>UJÿ?VLÿBWNÿE[SÿK^YÿQbbÿU_aÿMMMÿ555ÿÿÿBBEÿ44pÿÆÿÝÝáÿÇÇÇÿ®®®ÿÿ’’’ÿ‹‹‹ÿÿ”””ÿ¡¡¡ÿ¶¶¶ÿÍÍÍÿ„„Šÿ&&‡ÿ[[lÿ666ÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿñññÿJJJÿ:::ÿ:::ÿ···ÿÿ:::ÿ:::ÿ:::ÿhhhÿÄÄÄÿKKKÿïïïÿ<<<ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿMOSÿDKTÿ;BIÿ4;Aÿ-48ÿ)14ÿ&-1ÿ%,0ÿ#+-ÿ#*-ÿ#*-ÿ#*-þ,35þHMMÿMQRÿRWXÿ pR<* 333333 *<Rp"%ü"%(ý&),ÿ7IAÿ=VIÿ>UHÿ?VJÿ?VLÿBXOÿF[SÿK^YÿQcbÿU_bÿMMMÿ555ÿÿÿ***ÿSSVÿ‰ÿÙÙæÿÜÜÜÿÄÄÄÿ²²²ÿ¥¥¥ÿ   ÿ¡¡¡ÿ¨¨¨ÿ···ÿÊÊÊÿ°°´ÿaaÿ22}ÿ``cÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿFFFÿâââÿ:::ÿ:::ÿ:::ÿÿ›››ÿ;;;ÿ‚‚‚ÿÏÏÏÿËËËÿ^^^ÿbbbÿÅÅÅÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿNOSÿDKUÿ;CIÿ4;Aÿ.59ÿ)14ÿ&.1ÿ%,0ÿ$+.ÿ#+-ÿ#*-ÿ#*-ÿ-35þGLLÿMQRÿQVWÿ pR<* 333333 *<Rp"%ü!$(ý&),ÿ7IAÿ=VIÿ>VIÿ?VJÿ@WLÿBXOÿF[TÿK_YÿQcbÿU`bÿMMMÿ555ÿÿÿÿ==?ÿDD`ÿDD¦ÿååìÿßßàÿÌÌÌÿÁÁÁÿ¼¼¼ÿ½½½ÿÄÄÄÿÏÏÏÿµµºÿÿ ‰ÿbbfÿ///ÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿóóóÿHHHÿ:::ÿ:::ÿ´´´ÿ………ÿoooÿÀÀÀÿPPPÿ:::ÿ:::ÿMMMÿíííÿ;;;ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿNPSÿEKUÿ;CJÿ4WIÿ>VIÿ?WKÿ@WLÿCYOÿF[TÿK_ZÿQcbÿU`bÿMMMÿ555ÿÿÿÿÿMMQÿ<>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿNPSÿEKUÿWJÿ?WIÿ?WKÿ@XMÿCYPÿG\TÿK_ZÿQcbÿV`bÿMMMÿ555ÿÿÿÿÿ ÿDDHÿNNXÿ%%|ÿMM§ÿ{{»ÿ­­Íÿ˜˜Àÿ__¨ÿ11”ÿ66uÿ^^aÿ??AÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ;;;ÿ………ÿ¶¶¶ÿ£££ÿNNNÿ:::ÿ:::ÿyyyÿ²²²ÿ²²²ÿbbbÿ:::ÿ<<<ÿŠŠŠÿ···ÿ¨¨¨ÿ^^^ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ7=7ÿØÿØÿØÿØÿØÿØÿØÿØÿØÿØÿØÿØÿØÿyÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿNPSÿEKUÿXJÿ?WJÿ@XKÿ@XMÿCZPÿG\UÿL`ZÿQcbÿV`bÿMMMÿ555ÿÿÿÿÿÿÿ111ÿRRUÿUUWÿII_ÿ99nÿ>>kÿPP`ÿ]]]ÿRRVÿ(((ÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ7:7ÿ`ÿ`ÿ`ÿ`ÿ`ÿ`ÿ`ÿ`ÿ`ÿ`ÿ]ÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿNPSÿELVÿXJÿ?XJÿ@XLÿAYMÿCZPÿG]UÿL`[ÿRdbÿV`bÿMMMÿ555ÿÿÿÿÿÿÿÿÿ&&&ÿ222ÿ??Aÿ<<=ÿ000ÿ"""ÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿNPSÿFLVÿ=DKÿ5=Bÿ/7:ÿ+46ÿ'03ÿ&/1ÿ%-/ÿ%-/ÿ$,/ÿ$,.ÿ-46ÿEJJÿKPPÿOTUÿ pR<* 333333 *<Rp $ý $'ý$)+ÿ8JBÿ?XJÿ?XJÿ@YLÿAYNÿD[PÿG]UÿLa[ÿRdcÿV`bÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿNPSÿFMVÿ=DKÿ6>Bÿ/7:ÿ+46ÿ(13ÿ&/2ÿ%./ÿ%-/ÿ%-/ÿ$,/ÿ-46ÿEJJÿJOOÿOTUÿpR<* 333333 *<Rp $ý #'þ$)+ÿ8JBÿ?YKÿ@YKÿ@YLÿAZNÿD[QÿH^UÿLa[ÿRecÿV`bÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿNPSÿFMVÿ=EKÿ6>Bÿ08;ÿ+57ÿ(13ÿ'02ÿ&.0ÿ%./ÿ%-/ÿ%-/ÿ-46ÿEJJÿJOOÿNSTÿpR<* 333333 *<Rp $ý #'þ$(*ÿ8KBÿ?YKÿ@YKÿAZMÿAZNÿD\QÿH^VÿMb[ÿRecÿVabÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿNPSÿFMVÿ=ELÿ6>Bÿ08;ÿ,57ÿ(24ÿ'02ÿ&/0ÿ&.0ÿ%./ÿ%-/ÿ-46ÿEIIÿJOOÿNSTÿpR<* 333333 *<Rp $ý#&þ$(*ÿ8KBÿ@ZKÿ@YKÿAZMÿB[OÿE\QÿH_VÿMb\ÿSecÿVabÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿNPSÿFMVÿ>FLÿ6>Cÿ09;ÿ,57ÿ)24ÿ'13ÿ&/0ÿ&/0ÿ&.0ÿ%./ÿ-46ÿEIIÿINNÿNSTÿpR<* 333333 *<Rp$ý#&þ#&*ÿ8LBÿ@ZLÿ@ZKÿAZMÿB[OÿE]RÿI_VÿMb\ÿSedÿWabÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ8>8ÿÒÿÒÿÒÿÒÿÒÿÒÿÒÿÒÿÒÿÒÿËÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿNPTÿFNVÿ>FLÿ7?Cÿ09<ÿ,67ÿ)24ÿ(13ÿ&01ÿ&/0ÿ&/0ÿ&.0ÿ-56ÿDHIÿINNÿMRSÿpR<* 333333 *<Rp$ý#&þ#'*ÿ8LBÿ@[Lÿ@ZLÿB[MÿB[OÿE]RÿI`VÿNb\ÿSfdÿWacÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿDDDÿ!!!ÿÿ$$$ÿMMMÿNQTÿFNWÿ>GMÿ7?Cÿ1:<ÿ,68ÿ)34ÿ(23ÿ'01ÿ&01ÿ&/0ÿ&/0ÿ.56ÿDHIÿHMMÿMRSÿpR<* 333333 *<Rp$ý"&þ#'*ÿ8LCÿ@[Lÿ@[LÿB[NÿB[OÿE^RÿI`VÿNc]ÿTfdÿWbcÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ>>>ÿ&&&ÿÿ///ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ@@@ÿÿÿ$$$ÿMMMÿNQTÿGOWÿ>GMÿ7@Dÿ1:<ÿ-78ÿ)35ÿ(23ÿ'11ÿ'01ÿ&01ÿ&/0ÿ.56ÿDHIÿHMMÿMQRÿpR<* 333333 *<Rp#ý"&þ#')ÿ8LCÿA\Mÿ@[LÿB\NÿB[PÿF^RÿIaVÿNc]ÿTgeÿWbcÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$$$ÿMMMÿNQTÿGOWÿ?GMÿ8@Dÿ1;=ÿ-78ÿ*45ÿ(24ÿ'11ÿ'11ÿ'01ÿ&01ÿ.56ÿCGHÿHMMÿMQRÿpR<* 333333 *<Rp#ý"%þ#')ÿ8MCÿA\MÿA\MÿB\NÿB\PÿF^SÿJaVÿNd]ÿTgeÿWbdÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$$$ÿMMMÿOQTÿGPXÿ?GMÿ8ADÿ2;=ÿ-89ÿ*45ÿ)34ÿ'12ÿ'11ÿ'11ÿ'01ÿ-56ÿCGHÿGLLÿMQRÿpR<* 333333 *<Rp#ý"%þ"&)ÿ8MCÿA]MÿA\MÿC]NÿB\PÿF_SÿJaWÿOd]ÿTheÿWbdÿMMMÿCCCÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ;;;ÿMMMÿNPTÿHPXÿ?HMÿ8ADÿ2<=ÿ.89ÿ*56ÿ)34ÿ(22ÿ(22ÿ'11ÿ'11ÿ.56ÿBFGÿGLLÿLQQÿpR<* 333333 *<Rp#ý"%þ"&)ÿ9MCÿA]MÿA]MÿC]NÿC]QÿF_SÿJbWÿOe^ÿTheÿT[\ÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMNOÿHPXÿ?HMÿ8BEÿ2<=ÿ.99ÿ+56ÿ)45ÿ(22ÿ(22ÿ(22ÿ'11ÿ.66ÿBFGÿFKKÿLQQÿpR<* 333333 *<Rp#ý!%þ"&)ÿ9MCÿB^NÿA]MÿC^NÿC]QÿG`TÿJbWÿOe^ÿTheÿV`bÿMMMÿJJJÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿGGGÿMMMÿOPSÿHPYÿ?IMÿ8BEÿ2=>ÿ.99ÿ+66ÿ*45ÿ(33ÿ(22ÿ(22ÿ(22ÿ.67ÿBFGÿFKKÿLQQÿpR<* 333333 *<Rp"ý!%þ!&(ÿ:MDÿB^NÿB^NÿD^NÿC^QÿG`TÿKcXÿOe^ÿTheÿWcdÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$$$ÿMMMÿOQTÿHPYÿ?INÿ8CEÿ3=>ÿ.::ÿ+66ÿ*55ÿ)33ÿ(33ÿ(22ÿ(22ÿ.67ÿAEFÿFKKÿKPPÿpR<* 333333 *<Rp"ý $þ!&(ÿ:NDÿC^OÿB^NÿD_OÿD^QÿGaTÿKcXÿPf^ÿTheÿWcdÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$$$ÿMMMÿOQTÿIQYÿ?INÿ8CFÿ3>>ÿ/::ÿ+77ÿ*55ÿ)43ÿ)33ÿ(33ÿ(22ÿ.66ÿAEFÿEJJÿKPPÿpR<* 333333 *<Rp"ý $þ!$(ÿ;NDÿD_OÿC^OÿD_OÿD_RÿHaTÿKcXÿPf^ÿUifÿXddÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$$$ÿMMMÿOQTÿIQYÿ@JNÿ8CFÿ3>?ÿ/::ÿ,77ÿ*66ÿ)43ÿ)43ÿ)33ÿ(33ÿ.76ÿ@DEÿEJJÿJOOÿpR<* 333333 *<Rp"ý $þ!$(ÿ;NDÿE_PÿD_OÿE_PÿD_RÿHbUÿKcXÿPg^ÿUifÿXddÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ@@@ÿ)))ÿÿ333ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿCCCÿÿÿ$$$ÿMMMÿOQTÿIRYÿ@JNÿ9DFÿ3>?ÿ/:;ÿ,87ÿ+66ÿ)54ÿ)44ÿ)43ÿ)33ÿ.77ÿ@DEÿEJJÿJOOÿpR<* 333333 *<Rp"ý $þ!$(ÿ;NEÿF_PÿE_PÿF`PÿE_SÿHbUÿKdYÿPg_ÿUjfÿXddÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿDDDÿ!!!ÿÿ$$$ÿMMMÿORTÿIRYÿ@KOÿ9DGÿ3>?ÿ/;;ÿ,88ÿ+76ÿ*54ÿ)54ÿ)44ÿ)43ÿ/67ÿ@DEÿEIIÿJOOÿpR<* 333333 *<Rp!ý $þ $'ÿ>>ÿ000ÿÿ;;;ÿ=>6ÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿ–¸ÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿORTÿIRYÿAKOÿ9EGÿ3>@ÿ0;;ÿ,98ÿ+77ÿ*64ÿ*54ÿ)54ÿ)44ÿ/77ÿ?CDÿEIIÿINNÿpR<* 333333 *<Rp!ý$þ $'ÿ>>ÿ000ÿÿ;;;ÿ=>6ÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿ–¸ÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿORTÿIRZÿAKOÿ:EGÿ3?@ÿ0;;ÿ-98ÿ+87ÿ*65ÿ*64ÿ*54ÿ)54ÿ.77ÿ?CDÿDHIÿINNÿpR<* 333333 *<Rp!ý$þ#'ÿ=OFÿH`RÿG`RÿHaRÿH`TÿJcWÿMeZÿQh`ÿVkgÿYddÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿ–¸ÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿORTÿISZÿAKPÿ:EGÿ4?@ÿ0<;ÿ-99ÿ,87ÿ+75ÿ*65ÿ*64ÿ*54ÿ.87ÿ>BCÿDHIÿHMMÿpR<* 333333 *<Rp!þ$þ#'ÿ>OFÿIaSÿH`RÿIaSÿIaUÿKcWÿNe[ÿRh`ÿWkhÿYddÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ999ÿ:::ÿ666ÿ777ÿ:::ÿ:::ÿ:::ÿ:::ÿ999ÿ999ÿ888ÿ666ÿ999ÿ:::ÿ:::ÿ:::ÿ888ÿ999ÿ:::ÿ555ÿ999ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿ–¸ÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿORTÿJSZÿALPÿ:EHÿ4@@ÿ1<;ÿ-:9ÿ,98ÿ+75ÿ+75ÿ*65ÿ*64ÿ/87ÿ>BCÿDHIÿHMMÿpR<* 333333 *<Rp!þ#þ$'ÿ>OGÿJaSÿIaSÿJbSÿIaVÿLdXÿOe[ÿShaÿWkhÿYdeÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿ+++ÿ;;;ÿ888ÿ%%%ÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿAAAÿsssÿzzzÿiiiÿIIIÿ555ÿ:::ÿ:::ÿ???ÿcccÿ~~~ÿmmmÿTTTÿ555ÿ999ÿ:::ÿ;;;ÿTTTÿÿqqqÿ]]]ÿ888ÿ888ÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿ–¸ÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿORUÿJT[ÿBLPÿ:FHÿ4@@ÿ1=;ÿ.:9ÿ,98ÿ+86ÿ+75ÿ+75ÿ*65ÿ/87ÿ>BCÿCGHÿHMMÿpR<* 333333 *<Rp þ#þ$&ÿ>OGÿKbTÿJaSÿKbTÿJbVÿLdYÿPf\ÿTibÿXkhÿYdeÿMMMÿ555ÿÿÿÿÿÿÿ+++ÿXX]ÿkklÿllnÿ]]qÿbbqÿqqrÿmmpÿSSVÿ!!!ÿÿÿÿÿÿÿÿDDDÿ@@@ÿ“““ÿ›››ÿŠŠŠÿzzzÿjjjÿJJJÿ666ÿ:::ÿsssÿŸŸŸÿŽŽŽÿ~~~ÿnnnÿXXXÿ555ÿ:::ÿVVVÿ£££ÿ“““ÿ‚‚‚ÿrrrÿbbbÿ666ÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿ–¸ÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿORUÿJT[ÿBMQÿ;FHÿ4A@ÿ1=<ÿ.;9ÿ-98ÿ+86ÿ+86ÿ+75ÿ+75ÿ/88ÿ=ABÿCGHÿGLLÿpR<* 333333 *<Rp þ#þ$&ÿ?OGÿLbUÿKbTÿLbTÿKbWÿMeYÿQf]ÿTibÿYliÿZdfÿMMMÿ555ÿÿÿÿÿÿBBDÿffhÿ==zÿ$$„ÿ$$ÿ00qÿ&&pÿ{ÿ$$„ÿTTwÿlloÿ666ÿÿÿÿÿÿÿDDDÿTTTÿ¼¼¼ÿ¬¬¬ÿ›››ÿ‹‹‹ÿ{{{ÿkkkÿ777ÿEEEÿ¼¼¼ÿ°°°ÿŸŸŸÿÿÿoooÿ<<<ÿ888ÿšššÿ´´´ÿ£££ÿ“““ÿƒƒƒÿsssÿGGGÿ<<<ÿ000ÿÿ;;;ÿ998ÿ3>ÿ3>ÿ3>ÿ3>ÿ3>ÿ3>ÿ3>ÿ.8ÿ.8ÿ.8ÿ.8ÿ.8ÿ.8ÿ.8ÿ.8ÿ.8ÿ.8ÿ.8ÿ!(ÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿORUÿJT[ÿBMQÿ;GIÿ5A@ÿ1><ÿ.;:ÿ-:8ÿ,86ÿ+86ÿ+86ÿ+75ÿ/87ÿ=ABÿBFGÿGLLÿpR<* 333333 *<Rp þ#þ$&ÿ@PHÿLbUÿLbUÿMcUÿLbWÿNeYÿQg]ÿUicÿZliÿZefÿMMMÿ555ÿÿÿÿÿTTXÿWWiÿ""…ÿSS…ÿrrxÿ€€‰ÿžž ÿ’ÿbbkÿDDKÿnÿ33ƒÿnnsÿEEFÿÿÿÿÿÿDDDÿ]]]ÿÍÍÍÿÿŠŠŠÿœœœÿŒŒŒÿ{{{ÿ;;;ÿLLLÿÑÑÑÿÁÁÁÿ®®®ÿ“““ÿÿÿCCCÿ<<<ÿµµµÿÅÅÅÿ´´´ÿ£££ÿIIIÿpppÿWWWÿ;;;ÿ000ÿÿ;;;ÿ=>6ÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿORUÿKU[ÿBMQÿ;GIÿ5BAÿ2><ÿ.<:ÿ-:9ÿ,96ÿ,86ÿ+86ÿ+86ÿ/87ÿ=ABÿBFGÿFKKÿpR<* 333333 *<Rp þ#þ"&ÿ@PHÿMcVÿMbUÿNcVÿMcXÿOeYÿRg^ÿUjcÿZljÿ[efÿMMMÿ555ÿÿÿÿ<<=ÿXXfÿ##Œÿƒƒ‘ÿ¥¥©ÿÎÎÎÿÇÇÇÿÂÂÂÿÃÃÃÿÊÊÊÿÃÃÃÿ\\cÿ66Zÿ$$†ÿqqsÿ+++ÿÿÿÿÿDDDÿOOOÿƒƒƒÿœœœÿ½½½ÿ­­­ÿÿÿ999ÿ@@@ÿ¹¹¹ÿÑÑÑÿµµµÿcccÿ¡¡¡ÿŽŽŽÿ>>>ÿ888ÿ‚‚‚ÿÕÕÕÿÅÅÅÿµµµÿŸŸŸÿYYYÿCCCÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿORUÿKU[ÿCNQÿ;HIÿ5BAÿ2?=ÿ/<:ÿ-;9ÿ,97ÿ,96ÿ,86ÿ+86ÿ/98ÿ<@AÿBFGÿFKKÿpR<* 333333 *<Rp þ"þ"&ÿAPHÿNcVÿMcVÿNcVÿNcYÿPeZÿSg^ÿVjcÿZmjÿ[efÿMMMÿ555ÿÿÿ&&&ÿ__aÿ""‚ÿˆˆ¡ÿÂÂÃÿÈÈÈÿ···ÿªªªÿ¥¥¥ÿ¥¥¥ÿ­­­ÿ¼¼¼ÿÎÎÎÿllrÿ((gÿCC}ÿbbfÿÿÿÿÿDDDÿ999ÿjjjÿÚÚÚÿÎÎÎÿ¾¾¾ÿ§§§ÿHHHÿ999ÿ:::ÿTTTÿÓÓÓÿÅÅÅÿmmmÿ±±±ÿZZZÿ999ÿ:::ÿIIIÿ½½½ÿÖÖÖÿÆÆÆÿ¶¶¶ÿ{{{ÿ;;;ÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿORUÿKU[ÿCNQÿ>>ÿ000ÿÿ;;;ÿ=>6ÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿPRUÿKU[ÿCOQÿ>>ÿ000ÿÿ;;;ÿ=>6ÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿPRUÿKV\ÿCOQÿ;ÿ.<:ÿ-;8ÿ-:7ÿ,:7ÿ,97ÿ/98ÿ>>ÿ000ÿÿ;;;ÿ=>6ÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿPRUÿKV\ÿCORÿ=IIÿ6DBÿ3@>ÿ0>;ÿ/=:ÿ-;8ÿ-;8ÿ-:7ÿ,:7ÿ/98ÿ>>ÿ000ÿÿ;;;ÿ;;:ÿMV&ÿMV&ÿMV&ÿMV&ÿMV&ÿMV&ÿMV&ÿ12.ÿ///ÿ///ÿ///ÿ///ÿ///ÿ///ÿ///ÿ///ÿ///ÿ///ÿ///ÿ///ÿ333ÿDDDÿ!!!ÿÿ$$$ÿMMMÿPRUÿKW\ÿCORÿ=JJÿ7DBÿ3A>ÿ0?<ÿ/=:ÿ.<8ÿ-;8ÿ-;8ÿ-:7ÿ/:8ÿ;>?ÿ@DEÿEIIÿpR<* 333333 *<Rpþ!þ!%ÿCQJÿSeYÿRdYÿReYÿRe\ÿTf]ÿVi`ÿZlfÿ^nlÿ\fhÿMMMÿ555ÿÿÿYYYÿÿÕÕÙÿÍÍÍÿ¯¯¯ÿ———ÿƒƒƒÿsssÿiiiÿlllÿvvvÿ‰‰‰ÿžžžÿ¸¸¸ÿ½½½ÿYYsÿ22€ÿ[[aÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿNNNÿyyyÿeeeÿ:::ÿ:::ÿ===ÿhhhÿ{{{ÿOOOÿ:::ÿ:::ÿ:::ÿPPPÿyyyÿkkkÿ<<<ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ:<:ÿfÿfÿfÿfÿfÿfÿfÿfÿfÿfÿfÿfÿfÿ#K#ÿ***ÿ***ÿ***ÿ***ÿ***ÿ***ÿ///ÿDDDÿ!!!ÿÿ$$$ÿMMMÿPSUÿLW\ÿCPRÿ=JJÿ7ECÿ4A>ÿ0?<ÿ/>;ÿ.<9ÿ.<8ÿ-;8ÿ-;8ÿ098ÿ;>?ÿ?CDÿEIIÿpR<* 333333 *<Rpþ!þ %ÿDQJÿSeZÿSeYÿSeZÿSe\ÿUg^ÿWiaÿZlfÿ_nmÿ]fhÿMMMÿ555ÿÿÿPPUÿ""~ÿÒÒÞÿÕÕÕÿ¸¸¸ÿŸŸŸÿÿ~~~ÿwwwÿxxxÿ‚‚‚ÿ’’’ÿ¥¥¥ÿÀÀÀÿ¯¯°ÿFF}ÿEExÿIIJÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿsssÿÜÜÜÿ“““ÿ¿¿¿ÿ¼¼¼ÿ:::ÿ}}}ÿ›››ÿ€€€ÿ¼¼¼ÿ‹‹‹ÿ:::ÿˆˆˆÿÖÖÖÿÿ•••ÿ   ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿPSUÿLW]ÿDPRÿ=KJÿ7ECÿ4B?ÿ1?<ÿ/>;ÿ.=9ÿ.<9ÿ.<8ÿ-;8ÿ0:9ÿ:=>ÿ?CDÿDHIÿpR<* 333333 *<Rpþ!þ %ÿDQKÿTeZÿSeZÿTfZÿTe]ÿVg^ÿXjbÿ[lgÿ`nmÿ]fhÿMMMÿ555ÿÿÿCCGÿ33rÿ——ÉÿÝÝáÿÆÆÆÿ­­­ÿœœœÿÿŠŠŠÿ‹‹‹ÿ“““ÿ   ÿ´´´ÿÍÍÍÿ††ÿ))†ÿYYlÿ777ÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿäääÿWWWÿ:::ÿ:::ÿÅÅÅÿrrrÿ:::ÿ:::ÿ:::ÿWWWÿÊÊÊÿCCCÿðððÿAAAÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿPSUÿLW]ÿDQSÿ>KJÿ7FCÿ4B?ÿ1@=ÿ0>;ÿ.=9ÿ.=9ÿ.<9ÿ.<8ÿ0:9ÿ:=>ÿ>BCÿDHIÿpR<* 333333 *<Rpþ!þ %ÿEQKÿUf[ÿTeZÿTf[ÿUf]ÿWg_ÿYjbÿ\lgÿ`nmÿ^fhÿMMMÿ555ÿÿÿ,,,ÿRRWÿ""ÿÞÞéÿÛÛÛÿÂÂÂÿ°°°ÿ£££ÿŸŸŸÿ   ÿ¦¦¦ÿµµµÿÈÈÈÿ´´·ÿggŒÿ//ÿccfÿ ÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿDDDÿæææÿ:::ÿ:::ÿ:::ÿ‘‘‘ÿ˜˜˜ÿ:::ÿSSSÿžžžÿØØØÿyyyÿ```ÿÊÊÊÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿPSUÿLX]ÿDQSÿ>KKÿ8FCÿ4C?ÿ1@=ÿ0?<ÿ/>9ÿ.=9ÿ.=9ÿ.<9ÿ0:8ÿ:=>ÿ>BCÿCGHÿpR<* 333333 *<Rpþ!þ $ÿFQKÿVf\ÿUf[ÿUf[ÿVf]ÿWh_ÿZjcÿ]lgÿ`onÿ^fhÿMMMÿ555ÿÿÿÿ@@CÿAAbÿPP«ÿååìÿÞÞÞÿÊÊÊÿ¿¿¿ÿºººÿºººÿÂÂÂÿÍÍÍÿ¼¼Àÿ‘‘ÿ‰ÿ``fÿ444ÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ===ÿóóóÿ???ÿ:::ÿ:::ÿ¦¦¦ÿÿ\\\ÿÙÙÙÿ‚‚‚ÿEEEÿ:::ÿUUUÿàààÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿPSUÿMX^ÿDRSÿ>KKÿ8GDÿ5C@ÿ1A=ÿ0?<ÿ/>:ÿ/>9ÿ.=9ÿ.=9ÿ0:9ÿ9<=ÿ>BCÿCGHÿpR<* 333333 *<Rpþ þ $ÿFRLÿWf\ÿVf\ÿVg\ÿVf]ÿXh`ÿ[kcÿ^lhÿaonÿ^giÿMMMÿ555ÿÿÿÿÿOOSÿ77kÿ;;ŸÿÔÔäÿÛÛâÿÝÝÝÿ×××ÿÔÔÔÿÎÎÐÿ´´»ÿ€€§ÿ!!‰ÿQQiÿKKNÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿÀÀÀÿÿ;;;ÿPPPÿÞÞÞÿTTTÿtttÿ¡¡¡ÿ:::ÿ:::ÿ@@@ÿ<<<ÿØØØÿrrrÿ:::ÿ;;;ÿaaaÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿPSUÿMY^ÿERTÿ>LKÿ8GDÿ5D@ÿ2A>ÿ0@<ÿ/>:ÿ/>:ÿ/>9ÿ.=9ÿ0;9ÿ9<=ÿ=ABÿCGHÿpR<* 333333 *<Rpþ þ$ÿFRLÿXg]ÿWg\ÿWg]ÿWg^ÿYiaÿ[kdÿ^mhÿbooÿ^giÿMMMÿ555ÿÿÿÿÿ###ÿHHLÿKKZÿ$$ƒÿ[[®ÿÂÿººÑÿ¦¦Äÿmm­ÿ::™ÿ//zÿ]]aÿDDGÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿIIIÿ¶¶¶ÿÌÌÌÿÑÑÑÿrrrÿ:::ÿ<<<ÿ¨¨¨ÿ¾¾¾ÿÅÅÅÿyyyÿ:::ÿPPPÿ¼¼¼ÿÏÏÏÿÅÅÅÿÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6=6ÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿ‚ÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿPSUÿMY^ÿESTÿ>LLÿ8HDÿ5D@ÿ2A>ÿ1@=ÿ/?:ÿ/>:ÿ/>:ÿ/>9ÿ0;9ÿ8;<ÿ=ABÿBFGÿpR<* 333333 *<Rpþ þ$ÿGQLÿYg]ÿXg]ÿXh]ÿXg_ÿYiaÿ\keÿ_miÿcpoÿ_gjÿMMMÿ555ÿÿÿÿÿÿÿ777ÿTTUÿQQYÿBBcÿ44rÿ88pÿJJdÿYY]ÿWWZÿ---ÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ8:8ÿPÿPÿPÿPÿPÿPÿPÿPÿPÿPÿMÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿPSVÿMY^ÿESTÿ>MLÿ9HEÿ6E@ÿ2A>ÿ1@=ÿ0?;ÿ/?:ÿ/?:ÿ/>:ÿ1;9ÿ8;<ÿ<@AÿBFGÿpR<* 333333 *<Rpþ þ$ÿGRLÿYg^ÿYg]ÿYh^ÿYh_ÿZibÿ\keÿ`njÿcppÿ`gjÿMMMÿ555ÿÿÿÿÿÿÿÿÿ***ÿ777ÿCCGÿAACÿ555ÿ(((ÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿPSVÿMZ^ÿFSTÿ>MLÿ9IEÿ6EAÿ3B>ÿ1@=ÿ0@;ÿ0?;ÿ/?:ÿ/?:ÿ0;9ÿ8;<ÿ<@AÿBFGÿpR<* 333333 *<Rpþ þ#ÿHRMÿZh^ÿZh^ÿZh^ÿZh`ÿ[jbÿ]kfÿanjÿdqpÿ`gjÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿPSVÿMZ^ÿFSUÿ?NMÿ9IEÿ6FAÿ3B?ÿ2A=ÿ0@;ÿ0@;ÿ0?;ÿ/?:ÿ0<9ÿ7:;ÿ<@AÿAEFÿpR<* 333333 *<Rpþþ#ÿHSNÿ[h_ÿZh^ÿ[i_ÿ[h`ÿ\jcÿ^lfÿankÿeqpÿ`hjÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿPSVÿMZ^ÿFSUÿ?NMÿ:IFÿ6FAÿ3C?ÿ2A>ÿ1A;ÿ0@;ÿ0@;ÿ0?;ÿ1<9ÿ7:;ÿ>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿPTVÿNZ_ÿFTUÿ?NMÿ:IFÿ7GBÿ3C?ÿ2B>ÿ1A<ÿ1A;ÿ0@;ÿ0@;ÿ1<9ÿ69:ÿ>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿPSVÿMZ^ÿGTVÿ?OMÿ:IFÿ7GBÿ4D@ÿ2B>ÿ1B<ÿ1A<ÿ1A;ÿ0@;ÿ1<9ÿ69:ÿ>>ÿ000ÿÿ;;;ÿ6=6ÿáÿáÿáÿáÿáÿáÿáÿáÿáÿáÿÚÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿPSVÿN[]ÿFTUÿ?NMÿ:KFÿ7HBÿ4D@ÿ3C?ÿ1B<ÿ1B<ÿ1A<ÿ1A;ÿ0<9ÿ69:ÿ;>?ÿ@DEÿoQ<* 333333 );Qoÿÿ"ÿKSOÿ_jaÿ^iaÿ^jaÿ^jdÿ^jdÿamhÿcolÿfqqÿahjÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿDDDÿ!!!ÿÿ$$$ÿMMMÿPSUÿN[^ÿETTÿ@OMÿ:JFÿ7HBÿ4E@ÿ3C?ÿ2C=ÿ1B<ÿ1B<ÿ1A<ÿ1=9ÿ58:ÿ;>?ÿ?CDÿoQ;) 333333 );Pnÿÿ"ÿKSPÿ`jbÿ_jaÿ`jbÿ_jcÿ`leÿalgÿdolÿfqpÿagjÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿAAAÿ)))ÿÿ000ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ@@@ÿÿÿ$$$ÿMMMÿOSUÿMZ]ÿETSÿ?OMÿ:KFÿ7GBÿ4F@ÿ3D?ÿ2C=ÿ2C=ÿ1B<ÿ1B<ÿ1=9ÿ58:ÿ:=>ÿ?CDÿnP;) 333333(:Onÿÿ"ÿKTPÿ`jcÿ`jbÿ`jbÿ_jdÿ`keÿamhÿcokÿfqqÿaghÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$$$ÿMMMÿOSTÿJY[ÿDSRÿ?OLÿ9JFÿ7HCÿ5F@ÿ4D@ÿ2D=ÿ2C=ÿ2C=ÿ1B<ÿ1=9ÿ479ÿ:=>ÿ>BCÿnO:(333333'8Mlþþ"ÿLTPÿakcÿakdÿ`jbÿ`kcÿ`keÿbmgÿdojÿfpnÿ`fhÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$$$ÿMMMÿNRSÿIWWÿCSPÿ>NKÿ:KFÿ6HBÿ4F@ÿ4D?ÿ3D>ÿ2D=ÿ2C=ÿ2C=ÿ1=9ÿ479ÿ:=>ÿ>BCÿlM8'333 %7Leýþ"ÿJPMÿbkdÿbldÿakdÿakeÿakfÿblgÿcniÿdomÿ_eeÿMMMÿAAAÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ888ÿMMMÿMQRÿFUUÿARNÿ=NJÿ9JEÿ7IBÿ4F@ÿ4F?ÿ3D>ÿ3D>ÿ2D=ÿ2C=ÿ1=9ÿ479ÿ9<=ÿ>BCýeL7%  """#4I`ñþ!ÿDJHÿckdÿcleÿbldÿbkeÿbkeÿblgÿcmiÿdnjÿ^edÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿLPPÿDTRÿ?PLÿ;MHÿ8JDÿ7HBÿ5G@ÿ4F?ÿ3E>ÿ3D>ÿ3D>ÿ2D=ÿ1;8ÿ468ÿ9<=ÿ;?@ñ`I4#""" $$$ "1E[âþ!ÿ9??ÿdleÿckdÿbkdÿakdÿbkeÿbleÿcmhÿdmiÿbkhÿ^edÿ_ffÿ`fhÿahiÿahkÿbhkÿbhlÿbhkÿbilÿbhlÿahlÿahlÿ`hkÿ`hkÿ`hkÿ`hkÿ`gjÿ_gjÿ^gjÿ^gjÿ^gjÿ]giÿ]fiÿ]fhÿ\fhÿ\fhÿ\fhÿ[fhÿ[fhÿ[fhÿ[fgÿ[fgÿZefÿZefÿZefÿYefÿYdfÿYdfÿYdfÿYdfÿYdfÿYdfÿYdeÿYceÿYceÿYceÿYceÿXceÿXbeÿXbdÿXbdÿXbdÿXbdÿXbdÿWbdÿWadÿWadÿW`dÿW`dÿW`dÿW`cÿW`cÿW`cÿW`cÿW`cÿW`cÿV_cÿV_bÿV_bÿV^bÿV^bÿV^bÿV^bÿU]bÿU]aÿT]`ÿS\^ÿR[]ÿOY[ÿMWWÿKUUÿFSQÿAQNÿ=OIÿ:LFÿ7IDÿ6IAÿ4F@ÿ4F@ÿ3E>ÿ3E>ÿ3D>ÿ3D>ÿ096ÿ468ÿ8;<ÿ9=>â[E1" $$$$$$ .@VÅþ!ÿ#(+ÿeleÿdleÿckdÿcleÿcleÿckfÿclgÿcmhÿdmiÿfolÿfonÿgqpÿgqqÿhrrÿhrsÿgrtÿgrtÿgrsÿgrsÿfrrÿeqrÿeqrÿeqqÿdqqÿcqpÿbqpÿbpoÿbpoÿapoÿ`poÿ`onÿ_omÿ_omÿ^omÿ]omÿ]nlÿ\nlÿ\nkÿ[mjÿ[mjÿZmjÿYmjÿYliÿXliÿXliÿXlhÿXkhÿXkhÿXkhÿWjhÿWjhÿWjhÿWjgÿVigÿVigÿVigÿVhfÿUhfÿUgfÿUgeÿUgeÿUgeÿUgeÿUfeÿTfeÿTeeÿTeeÿTedÿSedÿSddÿSdcÿSdcÿSccÿSccÿSbcÿSbcÿRbcÿRbbÿRbbÿRabÿQabÿQ`aÿP`aÿQ_aÿO_`ÿN^^ÿM\\ÿIZZÿGWVÿEURÿARNÿ=OKÿ;LGÿ9KEÿ8JBÿ5HBÿ5G@ÿ4F@ÿ4F?ÿ3E>ÿ3E>ÿ3E>ÿ/33ÿ468ÿ8;<ÿ488ÅV@. $$$+++ *;O“þ þ$ÿTZVÿeleÿemfÿckeÿbkeÿdleÿclfÿblfÿcmhÿcmiÿenkÿeokÿdnlÿdomÿdpmÿdpmÿdomÿcomÿcpmÿbomÿaolÿaolÿankÿ`nkÿ_mkÿ^mjÿ]mjÿ]miÿ]miÿ\mhÿ[mhÿZlgÿYlgÿYlgÿXkfÿXkfÿWkeÿVjeÿVjdÿUjdÿTicÿTicÿSicÿSibÿRibÿRhbÿQhaÿQgaÿQgaÿQgaÿPf`ÿPf`ÿPe`ÿPe_ÿPe_ÿPe_ÿPe_ÿPd^ÿOd^ÿOc^ÿOc^ÿNb^ÿNb^ÿNb^ÿNa]ÿMa]ÿMa]ÿMa]ÿM`\ÿL`\ÿL_\ÿL_[ÿL_[ÿL^[ÿL^[ÿL]ZÿL]ZÿK]ZÿK]ZÿK]ZÿK\ZÿJ\YÿIZXÿIZXÿHYWÿGXVÿFWTÿEVRÿBTPÿ@RMÿ>QJÿÿ1?:ÿ.12ÿ357ÿ8;<ÿ+--“O;* +++333 %5Ha÷ þ#ÿ*/1ÿdjdÿelfÿemfÿckeÿckeÿdleÿbleÿblfÿcmgÿbmgÿcmhÿbmhÿblhÿalhÿamhÿ`lhÿ`mhÿ`mhÿ_mgÿ^lgÿ]lfÿ]lfÿ\keÿ[kdÿZkdÿZjdÿYjdÿYjcÿXicÿWibÿVibÿUhaÿUhaÿTh`ÿSg_ÿSg_ÿRg^ÿRg^ÿQg^ÿPg^ÿOf]ÿNf\ÿMf\ÿMe[ÿLe[ÿLd[ÿLdZÿLdZÿLcZÿLcZÿKbYÿKbYÿKaYÿKaXÿJaXÿJ`XÿJ`XÿJ`WÿI`WÿI_WÿI_WÿH^WÿH^WÿH^WÿH]VÿG]VÿG\VÿG\VÿG[UÿF[UÿF[UÿFZTÿFZTÿEZTÿEZTÿEYSÿEYSÿEYSÿEXSÿEXRÿEWRÿDWQÿCUQÿCVPÿBTOÿATOÿ@SMÿ>QKÿ=PJÿ;NGÿ:MEÿ8KDÿ7KCÿ6JAÿ6H@ÿ5HAÿ4G@ÿ4G?ÿ4F?ÿ4E>ÿ+//ÿ-01ÿ357ÿ69:ùbH5% 333   /@T®þ"þ"%ÿBGFÿflfÿelgÿdleÿckeÿckeÿckeÿbleÿbleÿalfÿ`leÿakfÿ`leÿ`lfÿ_keÿ^keÿ]jeÿ]jdÿ\jdÿ[jcÿZicÿZibÿYibÿXhaÿWh`ÿWh`ÿVg_ÿUg_ÿUg^ÿTf^ÿSf]ÿRf]ÿQe\ÿQe\ÿPe[ÿOdZÿNdZÿMdZÿMcZÿLcYÿLcYÿKcXÿJcWÿIcWÿIbVÿHbVÿHaVÿGaUÿGaUÿG`UÿG`UÿF_TÿF_TÿF^TÿF^SÿE^SÿE]SÿE]SÿE\RÿD\RÿD[RÿD[RÿCZQÿCZQÿCZQÿCYPÿBYPÿBXPÿBXPÿBWOÿAWOÿAWOÿAWOÿAWOÿ@VOÿ@VOÿ@UNÿ@UNÿ@UNÿ@TNÿ@TMÿ@SMÿ?SLÿ?RKÿ>RJÿ>QKÿ=QJÿULÿ>ULÿ>TLÿ>TKÿ=TKÿ=TKÿ=SJÿ=SJÿ=SJÿ=RJÿ=RIÿ=QHÿVJÿ>UJÿ>UJÿ>TIÿ=TIÿ=TIÿ=SIÿ=SHÿVJÿ>VJÿ>UIÿ>UIÿ=TIÿ=TIÿ=THÿXJÿ>WJÿ>WJÿ>WIÿ=VIÿ=VIÿ=UHÿ=UHÿ=ÿLOMÿRWSÿV\WÿX^YÿX^YÿW^YÿV^XÿV^XÿU^XÿU]XÿT]WÿS]WÿS]WÿS]WÿT^XÿT_XÿU`YÿVaZÿVb[ÿWc\ÿXe]ÿYe]ÿYf_ÿZg_ÿ[h`ÿZh_ÿYh^ÿXg^ÿWg]ÿWf]ÿVe\ÿUe\ÿTe[ÿSd[ÿRdZÿRdZÿQcYÿPcXÿOcXÿNbWÿMaVÿL`UÿJ_TÿH^SÿG]RÿG\QÿE[PÿDYOÿCXOÿAWMÿAVMÿ@VLÿAVMÿAWMÿBVNÿCWNÿDWNÿDXOÿDYOÿEYPÿFZPÿFZQÿG[QÿG[RÿH[RÿGZQÿFYPÿEXOÿDVNÿBUMÿASLÿ@RJÿ?QIÿ>PHÿ=NFÿÿ5C=ÿ2?:ÿ/96ÿ*..ÿ&()ÿ$&'ÿ"#%ÿ "#ÿ!û "®\K<." +++ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$$$ #/<JX$&)ß)+.ú,.0û134ý577þ::;ÿ===ÿ<>=ÿ===ÿ=>>ÿ=>?ÿ=?>ÿ=>?ÿ=?@ÿ>?@ÿ>@Aÿ=?Aÿ>@Bÿ?ACÿDFHÿHJLÿNOPÿRSTÿWXYÿ[\]ÿ_`aÿdeeÿhiiÿmmnÿqqqÿqqqÿpqqÿoppÿoppÿnooÿmnnÿlnnÿkmmÿjmmÿillÿillÿhkkÿgjjÿfjjÿeiiÿcggÿ_deÿ\abÿY^_ÿV[]ÿRXZÿOUXÿLRVÿIOSÿFLQÿBINÿAHLÿDKOÿFMQÿIPTÿLSVÿOVYÿRX[ÿT[]ÿW^`ÿZ`bÿ]cdÿ_ffÿbiiÿekkÿciiÿ`ffÿ]bcÿY^_ÿV[[ÿRWWÿOTTÿKPPÿHLMÿDHIÿAEFÿ>ABÿ:=>ÿ7:;ÿ589ÿ467ÿ245ÿ023ÿ.01ÿ,./ÿ*,-ÿ(*+ÿ&(*ÿ$&'ÿ"$&ÿ!"ã€XJ</# ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  #.9FR`$&'°+-/ò/01ù234ø667ù:::ú:;;û;;;ü;<<ü;<=ü<==ý<=>ý<>?þ=>?þ=?@þ=?Aÿ>@Aÿ?ACÿCEGÿHJLÿMNPÿRSTÿVWXÿ[\]ÿ_`aÿcddÿhiiÿlmmÿqqqÿqrrÿpqqÿpppÿoppÿnooÿmooÿlnnÿkmmÿjmmÿjllÿillÿhkkÿgjjÿfjjÿeiiÿcggÿ`deÿ\abÿY^`ÿV[]ÿSX[ÿOUXÿLRVÿIOSÿFLQÿCJNÿAHLÿCJOÿFMQÿIPSÿLSVÿNUXÿRX[ÿT[]ÿW]_ÿZ`bÿ\cdÿ_ffÿbhiÿekkÿdjjÿ`ffÿ]bcÿY^_ÿV[[ÿSXXÿOTTÿLPQÿHLMÿEIJÿAEFÿ>ABÿ:=>ÿ7:;ÿ69:ÿ467ÿ246ÿ023ÿ.02ÿ,./ÿ*,.ÿ(*+ÿ&(*ÿ%&(ù !#²aRF9.# ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ+++ "+5?JTb%%&-..Á334Ü777é9::ö:::ù::;ù:;<ú;;<û;<=û<=>ü=>?ý=?@ý=?Aþ>@Aÿ>@BÿCEGÿHIKÿMNPÿQRSÿVWXÿZ[\ÿ_`aÿcddÿhiiÿlmmÿqqqÿqrrÿqqqÿpppÿoppÿnooÿmooÿlnnÿkmmÿkmmÿjllÿillÿhkkÿgjjÿfjjÿeiiÿcggÿ`deÿ]bcÿY^`ÿV\^ÿSX[ÿPVYÿLRVÿIPSÿFLQÿCJNÿAHLÿCJOÿFMQÿIPSÿKRVÿNUXÿQXZÿT[]ÿW]_ÿZ`bÿ\cdÿ_efÿbhiÿekkÿdjjÿaggÿ]bcÿZ__ÿV[[ÿSXXÿPTUÿLPQÿIMMÿEIJÿBEFÿ>ABÿ;>?ÿ7:;ÿ69:ÿ478ÿ246ÿ034ÿ.02ý+-/ñ(*,â%&(Å !"“bTJ?5+" +++ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ+++ &/7@HOV[`ekmnooooppppppppp p p p !!p!!!p!!!p!!!p!!!p!!!p!!!p!!!p!!!p!!!p!!!p!!!p!!!p!!!p!!!p !!p !!p !!p !!p p p p p pppppppppppp p p p p p p !!p !!p !!p p p p pppppppoooonmke`[VOH@8/& +++ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ+++  !(/5;@EILNOPQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRQPONLIE@;5/(! +++ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ333$$$   %*.1479:;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;:9741.*%   333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ+++ """"#%'()))**********************************************************************)))('%#"""" +++ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ333$$$     $$$333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ333+++            +++333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ+++$$$$$$                                                                              $$$$$$+++ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿ€ÿÿÿÿÿÿÿü?ÿÿøÿÿðÿÿðÿÿàÿÿÀÿÿÀÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿÀÿÿÀÿÿàÿÿðÿÿðÿÿøÿÿü?ÿÿÿÿÿÿ€ÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‰PNG  IHDR\r¨f IDATxœì½y”Gy7ü«êî»Ì}4ÒÌH#%[²%Ë‹äÅ `ˆ?pNà{ øË9'~!L0KHÈI€¶—yCïcY€@À›×ƒ6f‘,"ÛZlÙÖbíÍrç.½T}tUuUwß;wfî•fäû›sçvWWWW×íßó<õÔSÕ„sŽÅBYÈéM«HmÔÆ¼IÃáȹ®O„Ÿ ©Û ³¹¦nÞs-κ˜'ákÓ&|‹µH”–¾¨ÂYuˆOohëÖ­*¡R©´Ag¹\N‘gûöír3N¨¹î‡‰g‰˜-ó ½žN$Éu‚W«Uµíû~Ýëû¾ß m,¶m×%‰mÛj;›Íª¼R@á —Ácßñt3±…$m™¨A~’²­¾·nݪÈ.‰.I®“™1¦¶ƒ H%¹ž§6 Ji*Q,Ëâiy¤ÐÂA †\.Çc!M$®Õ*!Ðt0Wâoݺ•è¤× /IÚæœÀ$8çœôõõ%.Úm4iä?sæ ! òË4J)—ÂRÊuçT4MÌ‘øJÛKÒKÂKÎ#œs"¿ûúúÀS‚ .âÛih „6A-m/¡_'¼ü¦”r) (¥\~¡Å ‚1«à¬ ‚¦€ò×$þ¦M› mïû>ñ<Æ ßÓÓC$á9çÆ1àœ„ïèèHí"´ÑF³  †R©dIôr›RÊ'''y\ 8ŽÃtAO>ù¤³ ‚f €:äO%þÌÌ Ñµ½ø¦½½½Ä÷}%‚  ‚øàœ“ŽŽBM/ÈoXq `6‹ 6®ñõ}-]^¦W*&!„[–Å$ñmÛfܲ,&» q« Ž hªX˜…üF¿Z­’J¥¢ˆeŒ‘îînêû>•¤ZŸæóy“B€ê¤Ïd2j[Ö_#{‚ômAÐÆ|'¾€A~ANá®ërh€"IÏÊå2§”JÂ3B·m›MMM©4)r¹׺:ñ›.æ-bäOóè½ïº.•Ä‚€öôôHOƒ  ¹\Ž @9ç”1F³Ù¬.” @ÇÑ…€qý:„o ‚6A*)t¯ísB÷‚B¡Ð2!0gP‡üª¯¯k}Ïóhñ³Ù¬%ˆn9Žc1Æ(c̲m[¥ ¢ëB€ –eQøú}¤Õ/í®A@MS_GÂ'MÒAÀĶ"¿ïû² ˆý€RPJ™çyL·,+‚À¶í@v „P`º5ó ,XÌI4J~Ù×÷cÌ]?O%\× lÛ¤oÀqœ@÷ 4CÌ*ê‘?îì«V«V´³³Óò}ßò}Ÿf2[jz!˲ƘM)µcŽöípÎm¡ýmBˆ­“Ÿs®,J)±,+O)ÍÂìq÷$F}bÞBʽât"¿EZìXôí¦·a"-„¬Y¥Ôü©Gê–ÁMnìk{<ü§=AZrt IQ- íëMoÚÐL4Ú¼Þ}©ji÷¡?Ó³n«[Ñ n ðÐün›‹œœ3^ +1Ætó?ЈpÎ}!¤ ð(¥žr_ ϲ¬@Z®ëú¶m3Û¶i d³Ù †spÎBÀ®w°Ñê‘ßó<+“ÉØ¾ïÛ¶m;áýXç¢nÚ>ã¬F^q_ú¹•q.A˲BÐÝÝÍ‹Å"·,‹û¾Ï7mÚDDW qåZVÀl€Ñêr¸OFøuvvZb¨Ö †’Û9„äÏrÎsùlæ–Œcm Çðˆ.­µ¨@è8#)F‘7¥Ý2Rã²±.çãÄ®wnŒÆQß™Ûø±zåÔsñÄQŸ¼uÚvM¿¯z]•¹Xõ/Zç䯆×/vlëÃc÷y~ðý0‰¤_Ûæ™L†{žÇ !Vgg'fffäŘè ÄŸìÆ}$ùk ò›œœTcýr˜OŒóKo¿M)u„ÙïB²â“%]ùŒóÿÙ6½Ú¸F¨Ù-jQJ „EU!¥¶cÁqXNäY7‘´~â£07,¹M) -B@•w:î­& „„`„†ðp€²Px&> ƃ+%GžþÔ¡»ú£ú¾îÉÏ×¼Üàá`”ŒƒS„Ç©ÈÏÂ<*¿Ø]â€4Á®"IÏFh±OÔ8Â6!Â4c²M…%@¢6‘OÔ!ôÜ‹mY'qoLxèÁ#œr@ßçpPÆTù"²?[ãD´Wm¶ÂÑ„€!ðÃêYU© ”×ç2™•UÏ»‡s> ACŠApÛ¶eر „pß÷-ñÜòjµŠ­[·’´EJÓ¬€z€!‹+• ñ}Òé×ÕÕE]×µ2™Œ%Éïû¾æËBrBûçä!9J0”ËØlQ2€ËûŽOJ-»,`;6zúzÑÝ׎Baqgñ‡]þçq öR5ZÊp›².L¢©c*¿ ³>\;7àêt㚪Ø‚Ïüñv0jZë¾T‰m­É¹¥·ÄõãB$<¤[e*-jÙsåÉLÆEyúŽV'c¯FõyÔ‘¥æ¥¤MIxØçZ*¸®"jTS«c^5@µè¡2ã!ðƒä=¥€RrUG.;XqÝðýàB+@i~<Îã¶m–@WW/‹Üó<.‰㕮i@µúþ›6m¢Õj•”J%êy- ¶ëºv&“±\×u,ËÊø¾ïÈ>¾èóç!yò[flú'¥=¡ Ç€©eQJ,B,9&lŠe+1°b ˆÝ8i£4½K`<èê÷™hf9³‘?ö?®½£ÊÄ®;OòóX¹F}RŽ÷e ³ŒdÀ¸žq¸&AõÍJþXÙõÈo&Õ#²@óÔ˜(H\Š×8ÏÜHµê ¥߼Ї™I¥©ª?€D|eY°, „`²âzW­ºÏ(¨pÎ˶mW8çιË9¯Ø¶íAàf2ÏuÝ “Éø333¾œ<$"™¨ 7ª§=¬µ€þM/¼ðBª{ý;::lÏólÇqlÏó2–e)òk?  O –glòAJH2„PbÛ {Rô ,ê±Qä:ò©}œüòQ¿£F~áO\*äOZ4g“üi¬Ô/ÿ" êp‚4ùUL’¿FÙ€ï˜:UF¹X‰™À²(@È™âLé㾜@(Êœó2€ŠeYUÆX5Ïq×ó<ßq¿T*ù2\8—Ëñžž¶}ûv¦ÕLü”QÅgëÔòúÓ\.G]וB@7ýåŸüt:¿“‚ôAš"Âæ×¯”ïèÀº ¢ÐÝe´¨þ`AÚPN…=x1d64‰iOÑ'ÔK’…7Ÿü±c ¢Õ놜òÇï9ªêüÈçh"Ë|ÈŸàúY"?€Èì—ÎÈèÙJxÆ‹±*½l™lg,ôtÂ-eqæø4ÜjÔ5ˆ»Ý(¥}Ý]˜ú4ã\Í.D8Ï€qÎ9cŒ9ŽÃƒ `¹\ŽU«U«»»›é£¢+ìÃhP Eû«mß÷Õ2^ÂñG !–ã8–çy–eY!ÄF8¾¯Æû9ç¹ ewµÚŠÑü}ý¸hÓ% 5Z4l~Ùú…?âi”5Vvò6xó´câ¼$·y4 €°¸Me’?*Èä ®îÅ©#S¨]u8E\ÐÛ×ý‡ãã“_"áˆ#á'“l|ßcÌ÷}‚€‰÷hDƒ¸ ®;Ó\è2#Ùºu+ªÕªZ¸S,ãeÉi½Ú¬>KÌìscYù± »…\gl¸í FÖŒââÍ—&È6Šü§{}™:&ù#Ê290ñ#ÄAnúCÕüzj˜›ûò\£Ê½ºÈXÝA OÑ8…ìÎDBÝ8[K7óEek×ÒÒôáºß^üqÝ›žÈˆyX*§–G/Û(7½lðD)*qn¬l$ê(Ž1Ú ëÊÃVɪɈþá áãÅ8À X:ä—;„ ®ìAg_µ@cÛW÷÷õü6€ŒÆ+É3[Lª£AØÙlÖò}ßêééQkkV«Uùv-Ý0P· =ÿrõ^¹jor޾M)u(¥jRü&`k)ØmºŒQNjí†õ]©‘Pè8¥ ¡œ&Ñ 8gb˜†«¡iR„2L0µlô«èÃqJ󣆿iJÛAh~ÔÐüqkBóëåª:éåÊcrW³€ôûBÊ1mÇ8Œ|Ú¥¢kiiænR;jþ¤v66ëjþt‹q‹BË•›¬wMͯ—$†mALÍ/Y5;3®Évb„³huÔv4ý†¾å° gŽO‹óa€‚\.»-ŸÏí*•Ê{ø9æ1ãP¬¥Á'ƒ˜€”2˜ÖTâ[Nö‘«÷ŠÕz)çœ:ŽCÅbJû˱Yʃߑåi«n€`xõªºäWÚžC‡Z—ƒJÍO)¤.ãˆÈ%IMxh†ߑ¤8¨¸yÊC"P-€ƒò0-Òd’œÜÜ—Ûâ—Õó«cR£¹Y8D‹c€TEæ1-¤•„.“ÖÈdŽ¥ËcDÓzÉ45î¬4¢©ÍÔÙ4¿y^ãš¿†ÅPGóPPNÄïGÔ‡pb쇿·YRx®öû‹v ”( `ød[iJ)lRÎB«@ÏÁ$¿DWo]š%4Ezº:߈pt-Kq4+À²mÛ–ëfæóyÊ£Ò õR¹-ù˜Ö @õçû¾rþ É"×ô³‚ °åœ~ñq8ç¡ àþ&J°Ñ¸+ÝYï@?ÖnX¯‘?|ÐuòƒG Ñç—?›4×£A<èùM O“?1O^Ü ±¦“ò#Q q/)ä'ñ:&î%Vo#‚ð)†Ôê§a«3¨£?«Œ0@väoÎÄsÉ™l~CB4GtlØPìdr629¾&Äý…BÇÿsêôø#Â`óp‰<Bd2ùrÅYݱ^€º*c÷©cÿÒüïèè¦ËQ±”·¬€ ξJý òh¨›×nX¯‰é¨Lò³Èä"\8fC†Kn4º”ÈTZ  ¡DäâA¦ÑO®iOõ#¿æíO)äW÷¬?‰2~A¿& -”H;#*Gš«ñkhä®!…b×iKý2únÍŸdÈ’dSBËFñ± ä7¥“öh$ÊNjþ”ób‚¨už–YÃ$愃p†Ð9„¿“úeawA’=TPêþÕ³µWd䦓_¢£'ƒ©SU¤Á¶­¡Ž|~¤T.?+ȵI¸„˜z¯†tú¾Oz{{Õ’}É+‰2SÒ”ç1FzzzH¥R¡”RÊŽR¢/×mAt,î_i¤ý$+V$âú#©˜$?Õž+ bè r‡ŽùÀ i –-ûÿš‡ ’]ihÃ]«™„±>¿|òyšÙiµˆüH?NPíA‘‘Dƒ”i$Ôã"r˜šXÓm -k”Q“üfZrŸ×>/-rPݯVÁš$6ë]ü)W1.Q¯Þ\Ì| TA~1[P­rayrp±"ÂÙ \ ªºÒûÇdl¸”ó'ã±:黜Ãr(2y +ž€˜íéí¾b¦T:„»6çÜŠ½8GÅíèV€ˆ Ú»¤€­[·brr,öºniþ»®KE¯\¥×¦”Úl°à ý×Ñë>¼r òk7¶[˜Ê\£ =µ¢=5R‡?œt5* ,y-‘Œ†%¥¸f1èµQ•J'?Ñ]†ºæH#¸©á ¹o‘èxÂ^×òåÄ5cŒüq%,t‚šš?y.O-K?OdJ!¨Þnéu’iæµy"Sl/íVjZ ¦VVO¿ì¯[áqƵo‚pz±xgÊ:º”‡S¡A(0¡‡¢kI+6!Hõ]-¶ÃFÉõ¢óµórÙìe„!¶¦€•@vbÜÕ ú·ü# ŽãPÏó(„÷QH œuƒóuJuËZÀqôô÷šä—Ú_ä‰úÃ,ô¢’PóKI*‡›¨ÌK  Á„B€@!‡¨Fhˆ‘íë¿O{ܸöLFš7ùð™¢]/×ÌÆùõß0‰‹Ô¨Ÿ–ªùõüµÈŸ,ØLâ)—I;1…ü ^?½ÝRwk×"íz,–—sõ‹1ÎA…@ „œƒ„«ÓP²„k ÊÛÎAÑœÅz·Jt)d=ˆñ{‡—7÷í 5¦½‘%à8öÚLÆér]¯,˵ÄzÄqù^M®™ÀÔÛ¸}ßWE!‰\·=rHV.þf^39,ιE˜T\¤hˆåËõNäÃ-µs(±‰èók{"É6*%T-0AU£eS‰Ò°¦!@hóÅéI4“߸{¥•c^QžNæHó믌kþø5"ÍÒ7$Ü̧WˬI¸×ˆæOÓ¼ñ’R ¢Zf¢ XÒ¬}÷´ŠÌRïT’*4jÔÛŠ®ÁEßœ ’<Òü”q„€’h©qB(@98 ÈgPhz娠ºÆUe‚LìÛóSû:´¿¯÷ò£ÇNü'„æ·,‹BŒèj¼U…n+ò±.ÀM7Ý„“'OBFÿõöö’J¥Bb…©wô!êX„³•iµ€e+–k?‚ ?ù‰íA<šU "Væä·´  ŠP0H‰£G`pbAw¤É(·ÑFcʉª˜9/…«Éj‘J†šZüµòäRaš§Q3û£²’äOÃ|^n\Dš uô©šŸ«Y~âzÑ‚½$! T6X4Är¾```¶=—æ_ܘ™™Ñ_W èîî^²¿Y±XDÔ­WÈq ¹f…1€êÑä²¹?½ÿ/ÎÐÍÿøI©ž6-8m@õÒ¤ˆ¼(çœÔûqå!á‘g‡ÑT\±<ª–F€pš%Düâæ—>.¹ä’a–*lÛFµZÅ®]»Œô«®º “““ç¨VóG¡PÀO<ñññYr Ük(O½Z¹:ÄÉ_# ‚‹©œ”®PSÕ:!³ téëU !Ûa¾ÐSÊİJ(¨¢å²Î¿P  011q®«Ñd2d³ÙDz¥RÁéÓ§ÏA†Ùúàaÿ™$XªöX”2 T\+-ÑÜ­¡üR»ßi¨ÇåY} ‚X½âˆÆùc)ÇIÌÓ¢•nµ¸ÂÙ&À´ÑÆY‡4ûÅãI¢@}ª»ÂÈo8ÏãWmÀ®ãý7ÐP'Tïë#•áuº5É/úDá4`!IU¸ó¨U_¢‘š¶±Ál†_ý¯_5¿ài ãõM+nÍš5èîîž=£Ñç×g¡l¹?/òëÎôT'`‰)À³a¾^(Cp®Æ@ƒÚv=Í5B´ %!4õ¼ó¬ð¢CpU}‡Ú¼0 LOO7­¸´H¹Ù ŸQ²rø‰ýݼ2•§Iý‹«¸˜øµ´2Œ‘9Ì“! ÖAí §,|‘0û“ƒb9æhèO‹ò¶ hcCvô…of ðÑÏ…I~‰YÌýy_b¡À@íH@ý¦“K]EÞQS@1±RÚhcQ@†ª‹.@ÃÑ}2OòG—¨×Xš*€´ 6Nþ¸ãƒKšfÙF‹qÒÏ™üÆf:ùk]·YhºH"ê5¤ùõc<ÊÅoŸ6Ú8+ài¾­f‘?–Ôª8˜ €¤ “ß ‡L×üˆ¥µé߯RÄBÈßHÐBÑ4P«ÿ A~ý@*ùy!ð²Y”{{192‚©áa°lÃÃÃX±b>Œ§Ÿ~º½2ñ, >þà\×¢5˜ü¼1ò§‘b7[ 4½ `„-ŠoSh7l˜ýÑ4ÊÔhÂòõêÕz>ÂʧŸ†S­‚PŠå[¶ ÷’Kéï‡ÓÛ‹êô4Ê'O¢xø0ÆùKtïØ‚ñ5kpbãFC?üñ–[}}}øÝßý]¬_¿ÃÃÃ8pàvïÞï|ç;©×^¾|9î¸ã\tÑEèëëÃää$8€_þò—øÑ~”È?66†ßþíßÆØØ†††pòäI<ûì³øö·¿#GŽ,¨îÜáÀž17¼À©³x=ÚãÍë<· ‘_`ñ;ë"êÈ(7E‚šþ ysRós­æ'(¥Ø°aúûûAA×™3{â ä‹E†‡±åÝïÆÊW½ vo/<ÏK||߇[.ãôöí8vï½Àöíè;t§6lÀÉÑÓÓƒ—¾ô¥Ø±cGËø¸úê«ñ‘|Žãà±ÇÃOúS¬Y³o{ÛÛpë­·â/ÿò/ñÌ3Ϩü\p¾üå/ƒ1†]»váñÇGoo/6mÚ„n¸!!n¿ývÜy瘜œÄŽ;°gÏŒŒŒàúë¯Ç›Þô&Üu×]øõ¯=ïús ó>}î8W+­|®AþF5ì@«z­iª´e‹Ô§øbZ?j@"z óWÿëׯWä_~èÖ<ù$ç¸è¶ÛðÒ$ŸWD‚œsX–BˆZêªZ­¢cófŒ^|1NÿèG8ñµ¯að©§Ð1>Ž^òÐ\×\s yäÌÌÌÌ»®iÀßþíßâèÑ£¸ûî»qìØ1ãÞ>ó™ÏàŸøÞüæ7«—@ÜyçÈårø£?ú#ìÞ½Û(ollÌØéK_Šw½ë]xøá‡ññܨ?¥·ß~;2™”×>´a¢ä¯ Ø,pv"SÈü0s¢šÍþB°jß¾Pó÷ôàÕÿø¸éÿo|•J333˜žžÆôô4ŠÅ"ŠÅ"J¥\×…mÛÄòåË/{Vüõ_#³~= ÇŽaìG?‚U­Âq\}õÕM_èóÎ;ïD>ŸÇ§>õ)ƒü°oß>|éK_Âðð0n¿ýv•¾víZ:t(A~xþùçÕ¶mÛxÏ{Þƒññq|ô£M/Æþõ_ÿ>úhSïé|Ek4ÿŠL¯l3ÈÏÓÚ¦.úûû1:: BÂÈþýÚºÿïO~‚±[o…뺘žžÆÄĦ¦¦099™ú™ššÂÔÔ8çjÅÞÝ®w¾Ù[nAfz«y„stvvbË–-W²¼ìe/þ}û nJ<øàƒ(‹xÙË^¦ÒŽ?ŽÑÑQlݺµnÙcccX¹r%î»ï>”Ëå¦ÖûņºäÇ<È_£œ¥ ˜Öþ§’³¿1 @ÁÚµkAA÷ø8Æž|N¡€WéKÈ  \.c||˜žžV$¯%¦¦¦0==R©„ááa\xá…zÓM 6 ò$Vlß®†çÜTièììDOO¡µã‚/¼ð‚rpÀW¾ò¸®‹¿û»¿Ã7¾ñ Üu×]xÅ+^|Þ|}ãêÕ«lJ}_thÀìç˜?ùeJ‚ô‹m:pÜøOC:ù•¯²㋇D_«ÿááaär9P<ñç¸î/þÙ+P­VqæÌeêë@×øúGvd¡P(à’áyØk_ žÍ¢ç™gÐqü8àÒK/m¸®õ°lÙ2˜uyêÓ§O£§§–e_šú{¿÷{øîw¿ Û¶ñÆ7¾ûØÇpß}÷áÖ[oUçIA5ûò×mÔ‚AîØË5òK,­HÀ˜¨M~ÍÈÅKAõõb¡PˆJidú<ˆìÌ F^úRlxë[á¹.&''Q*•033ƒ™™”ËeT*•„#J),ËR!Áòjçááaì/•€W¾™À²ÇÇá×¾===Å¡C‡æÙ‚!Ž "ýµ°|ùrœ>}ÚW>tè>ó™Ï‰Û¶mÛÞô&|ðƒÄ°k×.åSh–ÅòbÃlf¿ž+üi‰sêé.ÍëÔœ Ô#-ÍŸl„Æš¥¿¿?Œðã#O? §£×úÓð|3¥J¥ÊårB”Ä1ù™™™1öËå2ŠÅ¢J/—˸ä’K`YÊ6À]½Ùñq™× A¹\ÆéÓ§±nݺšyr¹V­ZUWØœ>}÷Üs¾ð…/€‚n¸pàÀ¡Ó°ù ¶ÙolÅyÎÑùåH@ë–ÎÊlÀõÉoäL‘ŽËÄ@÷ø8œjën» ¹áa¸®‹R©„J¥¢_©TP­VQ.— ! I®[ò#óV*pÎqõÕWÃó·Ývr¹\jpOÏ>û,¨—x¯zÕ«àyž2ã]×EµZUä[:Ù+•JâÜjµŠ‘‘ttt ÒÓƒ £‡ƒpJ)†††Út¸çž{011|àؼy³qì†nÀÛßþv<óÌ3¸ï¾ûTú[ÞòÃ)ŽãàŽ;î5<ÈÃg?ûYtttàSŸú†‡‡s:;;ñ¡}HY mÔÁ,}þHéÏBþ”µï’‘€ ¬«†„×:›çÏI!&÷e@°˜0{— ‰\.Û¶AAω°óy,Úu]Cø¾¯¢ýä”ßx??î°, ¶m«2¤ß`ll GEqx=û÷#wò$ªCCÀaÑ%˜/ŠÅ"Þýîwã¯ÿú¯ñ…/|O?ý4<ˆuëÖaíڵعs'þæoþƘ°mÛ6¼ãïÀþýûqðàAtvvâ²Ë.C.—ÃÃ?Œþð‡*ïO<øÃ¸ûî»ñoÿöoxöÙgqäÈŒŒŒ`íÚµ˜™™Á½÷Þ» {8ïÁuÕ–NþTGvùk`I9“qòG.¾Ú䯽˜h-d³Y5É'[.£sÄ€1† àû¾"¾¾-É,ÓcŠð’ü¶mÃqužþçy˜éêB§X„Krb6áBñÌ3Ïàmo{n¾ùflذCCCøÅ/~¯~õ«øÉO~’˜ŒôÇüǸæškp饗bhh•J÷Þ{/}ôÑÔÞ‡~;wîÄ+^ñ ¬]»###xê©§ðÝï~=ôЂç9PFQøraAeÌ]]]ó"̼~/žØh"ù[¿F@­ÁÀͯ®p)b# ·ƒ Yu\à¹eËTx,cL ‚ BA~¤@)…ã8 ”ªcñsåv^„WDŸß.…óT;:š÷ÚªjµŠûï¿÷ßÿ¬y'''ñÐCᡇj¸üÉÉI|ï{ß[Hk‚2ŠËï¹¼%e§bP|Z õl6Ÿür6ü’r¦¾ºXßJôùMhÜÐOjþúV€´œj5Ü€1N6ªñ‘Ç%±Ïœ9£ÁlçrΑËåB œeV©BH"ð¦óéÏd=òsÌNþZXôÓuD•ÕÍ~mE CZÆ5¸J<Öˆ BÀ„&v‹ExžgDê«ýèûòC)Egg§š”–?^ŽìBd…àábu¡ù¼kî¼¥xîê‹æujá§;A§š;Áªº»»ç7ñÉ`ôìäöë‘_fÍ<‹{:0!I£=¦ùeÛȬµÉwÖGµZ ‰'4oåÄ Õ°, ”ÒÔ<&|”RÕï×Õ:¿( ñôAg'!íƒ|Jpô³ïžßÉWþ`ß¾æV¨.¾øbô÷÷/¼ &’_bI9“‘€:ù‰Ñ@iädHzߪ\× ³Ú6ÇAéØ1娓¡²’äò[wîI‡Ÿ´džL&ÇqÔyñÏ1qG̦ :; =ÁæE†T_µ°æL~ÞòWh¢˜]B ןj¥4o?1¬‚øšB³Aj\BJ°ŽÃÔ³ÏÂBww·"»$³ã8j`.Æî-ËR£”RµJ°~žžfÛ6~ó›ßÀó< ˆA¼ÁABP,çЂm,e¤šý‰AÞ0ùӰ耆å Ž7P½7ˆÕ1‹âðq@elLiÿÉÉÉ97™š ‚@Í=Ó‘s×uÁC¹\ÆÔÔ”øt6êðbBjk4Hþ:'Ù—Ôš€É—x'ûü\ òÇœ¢¯ ÏlÔxâÄ ¬_¿~.‡‰Õ«Ñ{àNÞw ¯y 8€ .¸@=Ü2€FšþŽã¨a?™.ý™L&aìÞ½<ò²¥.9v ܶQÚ.~7Ÿ@Ïó@Á[Þò¬]»«V­ÂÄÄöìÙƒ;vàW¿ú•êz¤AÞÓ¦M›póÍ7cùòåxöÙgÑßß}ûöáÁD¥R1–CO«¼õ­oźuë°jÕ*Œcï޽رc¶oß®ºO/v4¦ù“y"Ì•¾¤œ€É‘€¸Ã/Ôú$z1€t*ò›¡DH6t ”J%?~<\ÙöÒKÑsø0Æÿã?@/¹¥ôôô ··×ï­T*°m[EÊcò¸4ûu 1†¯ýÓ?Á÷<\{è,ÆP¼â °ŽA€½{÷Ωɂ ÀúõëñçþçÈ‹¥Ê*• r¹.¾øbŒaãÆøÆ7¾×uÃU2Xé®»îÂ7ÞˆJ¥‚Ý»wãŸø¾þõ¯£¯¯7nÄ÷¾÷=ìÚµ ù|>ñPÉ:|èC ç7ˆ:äóù†êð¢G³4ÿY4²šÙ¨[mc$ 1BRÏìO6âlxúé§Á9‡W(`ü¢‹À=ÿôOð\{vï†ëº( èììDgg'ºººÐÝÝ®®.•O—Ç …ÇÁ×¾ö5œÇ§Oc°XDÐÙ‰âå—ƒ‚½{÷¢Tjü­žç¡¿¿Ÿüä' òÇ'*­X±·ß~» nRí'‚˜>ô¡)òË KœsU†ïû¸ùæ›±nݺDwÀó<ôööâŸø„AþFëðâDŠCOßšù•»«ŽÏkÑ;kÕ/ü)¿ØMÇ×UoT”J%>|„œ¼ì2”á=÷J?þ1Ê• ~øa<ÿüó( ŠäÝÝÝèééQ¹/I!püøq|ô£ů~õ+tx6= nÛ8sË-@&ƒjµŠ'Ÿ|²Áš†ä ‚·ß~»Š»× ŸŽœÍfqÅW¨!O Ôþ›7oƵ×^kœ_­V•/@/ãºë®Sý|*ò/þâ/ÂˆÆØõãçW«Ul޼٨ˉsî䯱ÑÒ™€@«# Fþ¸Ù/³p’2ÿOõæî Ü»w/úûûÑÝÝ^þr¬ù¿ÿxàÓ§áÝtvî܉çŸ/yÉKÐÕÕeLJóX–…x?øÁàº.†¦§±åðaØŒaâU¯‚/Ö!øùÏ>§@ß÷±zõjtttàƒü pçwbÍš5©Z¸R©`ݺuؾ}»š¼B)ÅßøÆT¢J @??¬]»Ï=÷lÛFX½z5FFFeèŸàþûïÇŽ;ðæ7¿®ëªµ^´X Ù_ü­\¸‘€i‰É}úKBÂåÿã?}i0óÜF¶oߎ—¿üå ¹ß|3Fþë¿ýÅ/`=ó ª·Ü‚#¥¾ýïÿŽu^ˆ±±1¬Zµ ”RC?~»ví£>®ºãy¸ò…06>nY˜¸ùfTĤ;vì˜óÐc —\r‰ê[ç;ßÁûßÿ~¼ä%/Áïÿþï§Ñu]är9ø¾˲P*•°råÊD¾B¡€;î¸#•Ô"XI¯CÚµÊå2&''ñÅ/~{öìÁu×]‡÷¼ç=°, ¹\îÅÝ Hx!äOô‹ ´jRP‹"M¤‘’ü0-…亀æ¹sA¹\ÆöíÛqíµ×‚ 8üš×`Åc¡óÀþíßÀ·lÁÄ¥—bçÎøÕ¯~ÏóÔ`±XÄ©S§P.—ÕTáÞÉIl=t® V(àÌoý– úyúé§S×០¶mcttTiì›o¾W_}5öíÛ—ªýurÏÌÌ„o;Ó_ãù!±õc2*^‡4aÁ9ÇÆñ†7¼Áð)tttÌÉ×q> üXœü “Ÿ³ØûÍ-Œ82û¹xU¸<®½ Œ vÖü1>>ŽGy×\s :::püúë1½nvì@ç¯ü®](®\‰Éáaø8S,âxÀ÷¡‰ ô”ËàŽƒâ–-˜¹ürpáß±cǼÈ„Ú÷èÑ£ñ8ç­kŽ—ÄŒC9affF-lRKh蟩©)õ›¥Õ!^ÆæÍ›SË¡tv7u= í¼ÚÕ%àgH#|/Í—•æ÷ªóÐ/î׃Ç`ÌT[šÙ¯ô¼æ0úüZ—`c#SSSø¯ÿú/\uÕUDyåJ¼°r%:Ÿ…Ð}àzÄzy€oÛ°ÑÌ[¯¿Ó7¢´q#¸˜çïy~ö³ŸáèÑ£ó®ç{öìÁ7ÞX—°qB–J%tww‡ÓŸÏ=÷Ä;9bbB‘w¾u˜™™Aww÷ì÷H ðÛæÝF-Ã#;]O/¬Œoþ5væK~ž4÷t`Bb·²,-"ŽN¢m#8¨9p]>ú(FFF°iÓ&tvvbfíZ”Ö­ñ}äNœ€=3»T‚U.£â8`…‚Bþà ñ ±Âо}ûðÄO,ØnYöïß3gÎ@M²éŸ“'OªéÊ@è«Ø¾};®¿þúº„Õ?§NR‹}6£õÀmøâ‡ÔN-Á]Ÿ^¸ˆÁåZùk4g%0iösãÓM€œ•·/@GŽÁÑ£G•ÓoppÄqPY¹Ò˜ã߀™™>|{öìiZßײ,A€ï|ç;xÝë^7«é^*•pðàAÃûnY~üãcíÚµ( ³jñ^xžç)G ¬Ã·¿ýmÜzë­³žŸV‡6âäGúC;Gò§aÑ;SÊáópha¿"U.–Òh8çxî¹çðÜsÏÁq cÙ²eF˜oŠSSSxá…ZöúoÇq°gÏô÷÷ãâ‹/®©ÅK¥žþyµ\™„Üÿæ7¿‰mÛ¶©èÆ4-~úôiœ8q…B!Q‡½{÷bÙ²eذaCÝ®GZ^ô¨Cþùk~hÛ‹>¸N¹îÍ×L}NŒ4‘Õˆ$6–k®öãŸpÞÉ:üüç?Çž={°uëÖ9×áÅŠx—¶äO}Ô—’0œ ¤ å©I@Äô„½S Èc­ ÿb‚\\drr>ø €pQQIbIºzZ7›Í‚1†Ç\éHÁàû>ÇA§X­¨^&&&Rë`Y²Ùl[ó§¢ÎHÀ|ÉÏ[;h²0úÿFå#gŸ~w¦§?Z,ÚäÓRµFŒ €6Ú8—`<"z3ɯ·¤œ€õש¯ùg#NRmœ3¤ó‰¯DòÈ_‹Þ h„-Šï9“?á ·²™¥VÚÆù ;eÒ[*ùµ†É¯í$ãæ^×ZhŽ Ñ Å~aZÌá'òä;ñ†xê©§Ú‚mœ5ôôô`ÕªUQ‚z@~ΑHNy¤—À‹A4¤¾(¹KÒ4| €:ü®V«/î÷Ó·qVÑ!^ k"}(»™ä—XÔNÀº‘€s6û ¯Jm,R´’üáÎ’r6ªùgïó'Ïk˃6+šoöóšqp‹Þ h VÙÆ4?’B#>ÄÒF‹iC}šõÚ4ò·pRPë× Ñ ¿S~]Íâ\=ßËåΫ·îxžÏóŒ4Jé’}clA湓ŸëYXRNÀ¸? µ! ?Wû矸úê«Q­VÏu5š˲P,±k×.#ý•¯|%fffÎQ­æ|>;wb||¼±bloù“ºt1¯ ¨¿Ó;Ü5ȯ¼ýi®ÿó›üàû>Nœ8q®«Ñd2™Ô8ùR©´$W>êïïoÆ_ü\ÏhœØæKs"nn¥Á½P„§"uF_|3’©yÚhc1¡^ŸŸ£IäoñëÁZú^YY“üÚûôÔ4“ÇÐü­•„8ŽƒL&ƒL&ƒ àº.\×E-½vK1IP/À'¶ËÓ˜æ_ä‘€µ*g¼¶YãE <=˜ iÈçóèïïDzeËÐÕÕ¥¦çÊ&„€‚jµŠS§NáÔ©S8sæL{Â6"´˜üKj:pr°2iö+>7Jþ&¢··cccèììÕ%&éà •–Ëå0::ŠÑÑQA€ƒâÀmË AN€_´ àé”9Äìø¦’6`“p^ ¦AÜTMgŸÈÓ*ò Œ¡··W‘Þ©VÑwü8zNB¦\F¦Ríº`–/Ÿ‡—Ë¡ÔÛ‹©‘”úúà8Ö­[‡ÑÑQìß¿‡n^ÏS×ëZ´ ³“?Rviyj?­ nªÐ«WË0ÉŸ®ù‰™3^ļ088ˆ‹.¼D¬RÓ}æ VîÛ‡®3gÎÑ14„ÞË.CnùrdúûQœDùÄ Ì9‚é§ŸÆò§Ÿ†—ÏãÔ…b|Ý:d³YlÚ´ Ë–-î]»Zn PJqÅW`Æ Æ°{÷n<õÔS5óßpà X¿~=z{{155…`ûöí©ëd³Y\uÕU¸à‚ 044„“'ObÿþýxôÑG¼ò2·9ð½17ü€‰³q¡ÆÈ¯eå™ü­^äìXùÃÉ~ŒøÃxæ™gæ]N9ðúyŸ>wäÎޥ깃æO~nX ­\¤kj½—FÆøÅACóG;ñbæŒ .¸###€ÞÓ§qáΰ<Ã×\ƒ›>ÿy䆇Ñå:p”RØvØ4A€tu¡÷æ›QxùËqô›ßÄé{ïŪ_üã§OãÄ•W¢§§×]wy丮»€Ú&‘ÉdðÿøèîîÆûßÿ~<òÈ#êØë_ÿz¼÷½ïÅòåËñ'ò'*ýï|'.ºè"|ò“ŸÄý÷߯¬“ÞÞ^\ýõFùcccøâ¿ˆ£Gâío;öìÙ£Ž ãÏþìÏ0::º p¾"µ›^ÓÖ×ó4N~‰VM jQ$ ‰zäç Í_ãÜy`ùòå!+†_ÿBp݇?Œ[¿ó䆇áº.Êå2J¥ŠÅ"fffP*•àº.8çèèèÀŠ+Ð×ׇ€sô¼á úó?‡½búŸy£?ý)h ££W]uUÓú|ó›ßŒááa|úÓŸ6È÷Þ{/¾öµ¯áÊ+¯Ä+^ñ •~ùå—ãèÑ£øÁ~`tM&&&ðýïß(ã½ï}/8çxÏ{ÞcŽ=Š÷½ï}xì±ÇšzOç7bö7®ù›%š7¸Fj’ŸÇ“j¿‰š‚®®.\xá… „ ïÄ Œ=õzÖ¬Á|›ÿçÿ„ïû˜™™Á™3g099‰©©)LMMarrÒøLMM¡X,"“É`ÍØX¸öÝÊ•èùÀ¹î:ŽÃð/ Búûûq饗ι®õðú׿GÅüãÔãßúÖ·ày^ÿúÈÆ®T*jh³V­Z…­[·âþûïDZcÇjækU׿üC}òóyh~­è ´p6`|y_ ®×ðöÏ“ü°nÝ:PJ‘/±î7¿µ,¼æË_F÷úõ¨V«8313gÎ`zz:•ø’ü“““*ëºÊŸç oY¹]¢ÿ©§@Áš5kÐÛÛ;¯:Ç‘Íf±|ùrìÛ·¯¦#nzz‡Æèè¨Jûþ÷¿ÇqðÍo~øÀpã7¢¯¯/qîš5k{÷îmJ}_ܨןˆ1âZj“¿•A@@³}©ó!?IÊ‹¬ 888¨Æø×îÚêû¸ò®»Ð{ñÅ!ùÏœA©TB©TB¹\F¥Rëºð<A€sBˆòÈUoåñå˗ömìØ±|Û6àÿü,ûïÿFiåJ¸}}Ø´iSÂ\Ÿ†††@©«àرc¸öÚkaY‚ Àw¿û]T*ÜqÇضm¶mÛÆvî܉Ï}îsØ¿?(Çèlå·Qqir6O#š 9g{G 1Æ/¿´¨ÀÚŽ•¯/´0ôŸ8ÂÄú6lÀú§p]SSS(•J˜™™ÁÌÌ Êå2Êå2<σïûÆ !(¥°, ŽãÀu]ãøÀÀp¨T^ò8?ûG^õ* bhhhÁÄšœœtww×Í×ÝÝ™™£¿ÿÀàÀÐÐ6oÞŒmÛ¶aË–-øÒ—¾„·¾õ­8~ü8&&&*¿zhùk…-v'`êqgŸö¥6ët •½½½Èçó „`ÕÞ½ –…?ûYû²ÒÉ'@±XTB@Z2´ä±xú¥—^  ´e ‚ÁAäEÇñã"óz!˜˜˜@±X4Ìû8!Xµj:”züرcx衇ð®w½ _ùÊWÏçqë­·8æ+¯Û˜æK~>;ù ¢/þõêUp¾äOf€Î‰ äŠE¬½õVônÜÏó033ƒjµjZîÇÉ'{¥RQùä6¥WnÙ/0yíµáuŸ{.uX±¢)#Û·oǦM›pá…¦¿ñÆÑÓÓƒíÛ·ÏZÖÃ? Œ+€çŸãããxÝë^Çq\×-æAþÔójbñOÖ *»@ò×ܯåù€U¯z<ÏCµZ…뺨V«¨V«ªß_©TÔ~-M_©TT~™W–366†L&ƒ™eËÀ2t¼ðÛ¶±|ùòÆ*]_üâáû>î¾ûnôôôÇFFFðŽw¼gΜÁ׿þu•~ÅW¤ Ÿ×¼æ5"Í_­VñÿðÁ»Þõ.û ã–[nÁUW]µàû8oÑÈsºò/)'`Zÿ¿!ò§¸\˜]äóyd³YBÐsü8¬L+^þrxž§¦öê™®“Z:(§št Z–˲P­V•SÐó<¬^½ÛOžDqhÝ"{ú4ÜÁA .ØpèÐ!|ò“ŸÄûÞ÷>|õ«_Å~ô#:të֭ë_ýjpÎñWõWÆ;ø>øÁÂqüô§?ÅÁƒQ(°uëV\yå•8tè~ðƒ¨¼>ø Ö¯_7½éMزe ~ñ‹_àÈ‘#Áe—]†7âî»ï^Ð=¼hÐÍŸ Ì’r¦wÒ~¤†æç ò7†L&Íà›™Açºuà™ XÀ÷}õ‘?I`)tG $¼$¿mÛ°mŽãeA€U«Vá±ÇÃL?º„3= oùrttt4^ù:xà°{÷nÜqǸîºëpÛm·áÀøÏÿüOÜsÏ=8}ú´‘ÿsŸûn¸álÙ²¯}íkÁ9ÇÑ£GñÏÿüÏøÖ·¾…b±¨òrÎñùÏ?ü0n»í6\{íµƱcǰoß>|ö³ŸÅîÝ»TÊ)쟽yg…\¤wî¤YP7¨Î pÃÍÙäTò§úÄõz€)HúH`Œá©{sŒÈd2Çó@C~p¾ïƒsÆc„0Ûr_~Ë@ä 2~žü xž‡Šel¡óù|ÃuŸ Ï?ÿ<>ö±5”÷±Ç›sôÞÎ;±sgó_ß4 ¸æ#×´¤ìTŒˆÏÙB£äo´Ï/wuµhnpË^ R óíó7"¤ùïˆ×ngŒ)ä¶Ü׉íû>&''Ắò£Ÿ¯§åóùÐÏ úÐv©BHS@‹³ôù•lvòss7yÆâ~=xHšý‘­oŽxÖm±Úå sÂæ ³>͹¥#¾P&“I¬Ï«ob¡/&qË!dÁÓhÏ‚S+çðÊm Ùç‚V½æÖ§r¹,aÅ5†úÏèìlMò+,)'`=3Àtø™&‘iö›ãŸ|²@ÎÄó…æ-Ÿ8Ï InJ)¨X@úÈ4ô#ËcÒù§Ÿ÷ÿ·÷m±’i™ß‘™UçœêsúâöøÚfl¯ÓŒ™±fŒ˜ý0Ò¬VBŒü°À¬´hyDì㾬4+4Ã3 ñ#‹ÝÁ– X0KÓ»øÒîq»±ÛmŸ¶Ým÷¹ŸS•™ÿ>dDddfdVÕ¹´»íú¥ªÊŒŒˆŒŒŠïûÿøã’þñææfA4Ãâ˜Ê¼`r8<€bÞ€’Ksö_w—ø³¿¼pm¦*êSŸÂÑ£»#*M³2ðWN T.ÞPNÀV`Ýìo¿—®Ë¥ÑhThÞ8†Ž" (¥0 £(rÇôÖWÀY ¾ãÏOcýöøÊ•+Ȳ Ò¬ÉWƒˆhF'ñÚ÷”௹Z'×p¬ƒ"dö×' †À_,ÀÎá×.aëw@KK8tèâ8v l»°?ÔgG„n—`?­E^|ñEdY†#++€ÜÌEð½í3ùxÈfqÒþZeüL@÷4MÍ_‹Tž…4ÿÝ€Ñh„­­-Öo½påùç‘evvvx{½z½žw¿ßG¿ßÇÜÜ\å3??ï®ÙøþÖáI’@k^xHSÝØ@~ä”™°3[dóq’ñ‹zƘýö»uÄð†š z3Pü<üÓÉ•+W@DØ0»]ý‡@–eX^^FEÌý~ß‘ÿüü<æçç±°°€ùùù ظ–Dþú¯ÿÛÛÛ¸éý÷!˜±óc?涯ÏO"ZkŒF#h­+Û’Ù J&ßæ¥”r¿»)ƒ3±ß»ÝðRÄêôô7Àï%ñzþµQ€ƒìÿ9k…Ÿü4¥Ù_—+W®àî»ïF:`óæ›W^ÁÊßýz?ýÓxûí·qÛm·U†}g`Ç•™€¶¯oµ¾%k!¼ùæ›xæ™g@Ã!~by;÷ÝX^^ž®à€íÏýÜÏáSŸúîºë.¬­­áÕW_Å©S§ðÎ;ï I’VOµš\ZZÂW¾òœ8qY–ass?úÑðOÿôORºùãÊpÿý÷ãĉX]]ŹsçpêÔ)¼ûQ’™Œ›âÐúmàoií]×£@¸€m?Ô¼ý¡ÀúÑxY__Çêê*Ž=ŠË<€Á3Ïàò·¿›ï¾ïlocii óóó%¿vP}?K ½^¯b%H)ñíoišâso¿~žcû'~™ÿçΛ¢ÔÅPâââ"~ÿ÷wÜq‡[›pôèQÜzë­øÂ¾€çŸO=õ”ó?øbµöc=†_ûµ_Cžç8{ö,~ë·~ O<ñî¿ÿ~üìÏþ,¾ûÝïâ½÷ÞC¿ßÜ9S)…¥¥%üÞïýî¼óÎJn»í¶±eø8ÊxÍß8­‚z·¯pÍh¼âœÄìú &“×^{ 06|~~ù—‰ååeܲ¶†;VWÁ½6zD„×_Ý­µŸD²,CÇø£?ú#Ü~ûínµ¢]„d?'OžÄ/ÿò/c45ºJ)üæoþ&üqçó‡`f—>Iüê¯þ*n¾ùæ†9oçK|ó›ßÄwܱ«2|,e:ð{‡àç:µ\÷Ë}ó¿^Øêà.~S´µÕÕU\¾|D„÷zéâ"F/¼€S§°¹¹‰çž}+++€/..bii©ò±Ä°¸¸èâ¥iŠo|ãøÁ~€X)|fy ÂÊ/þ"x~J)¼øâ‹—•™¡”¯ÿú¯ãÂ… ÀY Z09r?þã?^p–e¸ýöÛñÕ¯~µ’Ööãë`þò—¿ìºA~~÷w× _†îoóX\\Ä}÷Ý7ó ´ÊžÀïbô;€œ h ¡ þ2¼Uó7†§¿ÿÙ³gqäÈôû}¼ý¥/á®§ŸFú¬­!ûÌgðüóÏãŽ;îÀƒ>èVöuí”$ NŸ>?ùîw±¾±ÁÎ>÷Ö[ègÖ~éw‚ˆ¦~?€R ·Ür ”Rxì±ÇðK¿ôKxüñÇ177×  È“'Oâìٳť(V->þøãnoŸ| À~„øä'?‰‹/¢ßï»2üäOþ¤»GèÞkkkxæ™gðôÓOãk_ûš[9_:ÁÏàÚ¼íÜï׃×r÷–þÕûôš¿JÁÈce8âôéÓ`­‘ XþùŸGÇà§žýÉŸ@ÇÖ“O>‰W_}ÕõëŸ~¿óçÏã›ßü&¾õ­oa}}÷^¹‚_8‡‡Cl~îsØ~àÎ;纓ŠR ÷ß?~øa<ùä“Râë_ÿ:žxâ‰V+@)…^¯ç¼ú[[[8qâD¸½^>úh«¯—¡ÍìߨØÀŸþéŸâw~çwpîÜ9|ýë_Ç]wÝåæPÌÄJë0(}iþwX×{•ýŸ ,_ü•%TÿÙø­¬­­á…_ă>ˆÑÑ£xëÑGqÛßÿ=zo¼ù?þcä_ü"VOœÀ³Ï>‹,Ë\¿ßï»-×——ÝžÉö6¾pñ"nÚÚGV¿ò ï¾D„wÞyÿò/ÿ2u£(ÂÝwßíúè¿ñ¿Gy/¿ür«&ÞÙÙÁ`0pÇq#NÇøò—¿Lßëõçy£ ~{l‡û·ƒÁ RÿDoi¿4øÇz¿¯»™€­ÂUÇ>Ã_ dCmWàÝÒÀ¥K— ”ƒ>šŸÇÛ>Š¥sçpô¥—°ô·‹¹cǰqÛmX½õV\ÙÙÁ¥K—*ãï4âï¿O¬¬àæ Hf ï¾?ó3PKK "œ?§NÚ•SLk••• àñàƒ¶Ò7剨²½Yˆ0ByØ Sme¨ûy䑆…¦éDQdy1§7òê…Ý¥»¦²gð7/ÕBn¬×ƒ¤Uó£ö¬!ðïÑÙüÞ{ïáùçŸÇç?ÿy,,,`ýþû±uÏ=X:{ o¾‰c/½„c/½i’ ‹cˆkþº(¥pîÜ9\¸p÷ÝwNœ8¹¹9ä‡cãða·dhî¦ò{g3gÎàÊ•+ûR&»ÇàSO=…/~ñ‹c5ðÎÎ.\¸P™È#„À÷¿ÿ}œ8qQÕà—/_Æöö¶{yŠ-Ã÷¿ÿýŠÏ ËqáÂ…Ù€/ÞêÄàôsÛ^÷NÀ#ÀˆQù“hþ@Òý’4MñòË/ãå—_Æ‘#Gpûí·ãèÑ£n¦_’$`f×çÝÜÜÄ¥K—péÒ%ç8ÛOI’?üáqìØ1Üzë­øâÅ‹PJUÀ.Sþó?ÿs|õ«_…Öº5ÕÕU,//»w'øeøçþg?~|WeøX‹…Š|o åÀí5¹æ'*™Qß òLýÏä:÷ª9†¿þî­.Æk¸`&`)˜Úöö—¯/N4]þf*êLP"¥ñé¯ý—» ‘k[=äΧÝã°\äcUVXQö-š?h´ÈA:¯ÝjÀúó1ÜÚ`kBÊÞ°„±4š2ôîõ™ÜÂŒCl|Ø¥ËÖ3v{]óSiTc–IÂ9u†Ü`3«§íà/—²®1$3´fç øhÁŸˆ>2»ê¶ÍBÜÏ8ñ BÐýYvKñš0¢€Ÿ-K\‹Nï>Î ŸÁ_sø¹®AYo`0X±Ø8[>JpùòåÔ̺˗/7®^½zC¾"Ýî­8^ÊMU˶\ÓüÌÐåYMš q‡ê´šëx*p!c 0û]P¡åÙ:ýˆ@Ì`X³ñ~tàüùóv\^yå•»* @Û;ß`]`¸ôf£©¾Ú5S»=i IDATËuûO<(<Xqø±u£°3© W)—>X;`&3¹~„5ƒµ.š¨.Á_\t£ùÅYe±Kå]àol³¿«T÷J €+ˆ*Å#¢ øýg$ŸA ÎÜ· ˬ¡gófr‰UJZÛnª¶Z vËš¿üNÚwÛÝ*vK7Oÿ <£Õî¶ÏoGIݸ*ZC1l;c€™\G¢5C+ 8UvÞÙè|_[³µ<©¾´¦Ú©cÕY‚»&‚‰€ˆØ~ZoÔ:° þª“¦o:LVû›á…üšÇí²2“™\[±mT3¶¨o%š×âõn½F”ŠLÐý÷q:‘Œ%!ÄÄ™µ9(œÀ6ÜÔÞâZ9nZF+¼§…æ·U:c€™\?ÂÌPºÐþÚ8°µiÈÖ‚eâ ÒKGa5§zÖö`·“€ˆˆ'Ánë(À¸Äž5ЊÌZ÷ßOóÀ¶Ó  & Å©5X4‡-€›nºéšmÛ5“™Ô‡m­öׯ¨¹0ü}eEžb#*šxÕ(6ZjáÃ\ŽL¤»°Ü €(Š8Ë267˜!d»7Ai.^oÆ&œJ‡ XPÁDvÿЂiY!*ùÝyçmŘÉL\4kh­Š_fÖvV 3`~B­Â«;¸zê¤îèÐüV·áh'iæÔÙ†kV€×ö,¸æÙ0@ˆbÜ_S1U@ƒ´†&i8¿ÀlMðL®Qš­#•ñþ3E‡€ŒÓs°üu¡BIŽY èúû5}ÜjDQÔŸØ X»1@)å`|פx(í†IèÒ4‚1ó¡IdÆUY3´égÍFfr=IáP¬mW€µ ,ç³ œ hº¬Ãkb+? Xþª3å&uV,€~¿Ï[[[•»ØŒjlã³Lqªeµf­èî°ÆLr@×(LfÈ  ‚ ‚¿„“ ayÓ,&²VWYyþå¸:ªºQôÖdc/M™I3ݘ &äÊð2þÚþË=9jCÕ½OyZ  ñ›t9£Ïôí¡bcî I±F–ŽX»ajmœ€º\Ñj‰ÀÙþöBk)+Š;} *¥*`·V93I ßïWÂ,4lk!ûà÷o`‡8‰Hk­9’²»ÅÀOfÂî[ôŒ_À&£Â* .¶é–i€@L‚$Øì#À† ‚pÏbwš™5Ô6¡6<[Ï’´¯Ë.”^™6]‹Ú‹f’*‚;:kgã–Ò…ó®w¦ ­öÜ øË¢4 U›·÷¶ÚÅø>PxøYO¿¿‚RJ+V† Üp Ö•¼4àÍfmÈÖ¬´ZU„úÿ{~7<@]£ `›£k–Ò´—‘MÄË,¤ÕÈ¥¯7ìús×´ŒÃ •à*Òh°  ×ZqˆÀÄ 6á$ ­¯€„Ñúb2v™ü©\rl¨Q&¿TÍêên -õ¿7`uŒk‘ƨ üSc+þÚI{u„ëÄ?ï&±biËÃBÿAQ<3£ßML3Úß>i°ÖP†”Ö…æ×&Å/ƒ‹,s1,¨MÃ&]öºKV9‘²4Ð}`fdYž›¸º>"g­ŸdUIÛc MS\½zóóóØÚÚ²Î&";BÀØX š™sfla€Óç6mü¦bÖÅ/±Y6© hó‡hƒW‚†6ï `"1ØÐ¬½d⺆3 Žà…‡@ÆkW¿qZÚc ˆ›ùN’¬-m øÃâ<жììÉîÁßíÙþÐ=ýÚhþŸ…F³·×p63Ù-ø E¤%à¼ýZ»®€fUÎdµS‚ Þ’]Ù.¤µÀ q…çÿ2§išŽˆ ÷¸ï‹‹ãØ)æ­­­ÊÖð¡eÛó À]ÿ?Ë2çl`fmÀ_°Piˆª¡Û:sÁÐEqAÀf/‰¦M­’~¡õ c«0ó•6×µ®¤õZËÂÕC>×~BÈœ\)M¤ù[ó­É;â¶°:=µäÝ þÝÊaSkþ2Ô%œhšˆ{ÆÒ~æÒÐZ›¡¾Ò2°ÝífÍÏÅ/•f§¹7o §½Ëc¢(®ûãy®Ömƒõ§iêLÿÚM¹åu·”at²ö­Þ Èúl·Ù€ßÖ@íÏS¬M_ߘøB€´‚.LSA…Éïò%rf?µšýÍ{JÜHW}˜jX;`LP‡z¯^Ú+ø»@4ü¤õÿ²Äâ¨Ä™ Ïß Þ0™û©ºÁÏv½N™ÜŒ<‘2à€›äS˜÷eß¿¼*ÁÏf8Ðö9[iª-Ðh£(ŽEhPžçkD¤ 6]€4M øXݰB‡âápÈÃáBžE!„FÑ›a"ÒJ)B(Ï¿V3²H [¤Â™NÄæWÃÌ,— ó„‚öW¦¶ÈŽ PiöÛ—’SÌëA5ñ< øCí­üÕóÀëàoå—½‚aÕ"†Óu¸ƒTLfü6ü]„Üž)ÀÎû:Nó7ë´}^våó€m™œO%Ð-]øà/,Üês–Ú?LÓž£—e‘”RëTq¨œB66Vy¿ ŒûyuN²Ý€öýöF´ÖZP̼8/`ysT¦ {"ˆÒ\± ð³ë35 ÏÌd!2®C&ž1óÍä¡ ù7u?- ½ë•§©Ÿ6‘[ýWw þ"›àoKç´‚À{‚€†²óº4ÿžÁß)á?ÃÚIÁïûŠ¢—;üø S­O H©ȵ7rнÇéÐ|z¯Â‹xó ƒÖ9:Y–¯«[×­qsÌ;;;œ$Ie ×ë5n^!€çž{'OžtÓWWWynnΚÚd¦Ø›+&ÒÌËeÍV»²C†º l«Ï:=0Z¾ðÐð·&¾í[i3´b- *íþ&ˆ\Ø>€¿ž÷>€?pƒ®¬ê·n„¯–÷õþI¦yu¿£l-éÉCyµììí¬ b¬£d÷0ϦÙëÖÖ[C°F] YÓÄZ\Š|óß7¶6·Þ ˆH jÏ pÝv"âÕÕUŽãØ*p<÷Üs•:ð €P}2Pm0‘βLÐQYí¯GiöR¿—(Ò{b•þ¯Á¸õKÀ8Q§Ø s« ÍÚýÅxœG·p<˜[عÎÄ3ßþ@Þ¡ÿ¾™Eü2róÚ”àÜ&\´@¹üS€7þ®ä«Ö0v{ú2ûMÍ”Ùx¤ à}‡¡ÖÞsðÉjà¯îP©&ª>¼Å‹IÍðžzëíK/Xð‘Îó\Ðq»îyhY°7 È…×'12ï‰gÓÇw#B¦©6¾¥”R´BiÍ›JëRÜg «a¦³TÈØ¿}Ù Šºe;Ö» °V»—§ c.suìã<º–üǯþ-þZ[häÝþ&‘ÀÈ{wà¯èF7úÃY²ke`שP{ÊÄ(íµ)÷vøÕÁß| Ë4eAxn~AÈ(2®¬j'vggøo;;ÃM"R¶û-„PÌÌY–é$IìÈœëÂK)Ù¬@ÃpúôiÜ{ï½nÀûuà7àVD¤Š9ÅG)ýb,q_yƒ²ðùˆ!ãÒ4¯7˜Àìú^E…z1tÇ›E;IÀþ1^ý†y˜çæ„ [ý•€ÀéA?„œ ˆàTâ?˜o³ÜͬCåA7øÛÓNþ– ²ͬY¥QnÀï¾PzíÀ/’4[|å K—^:z¬‚KŸÖÖ6^dæ@ND9¼®3ë4MuǺ†] l×%ää^¯ÇÃᄼ¶¶Æóóóz8ê8ŽöÏó\EQd}9€|4Ê^è÷zÁXWÆ_'@ºO ÙÞ` OªçÅ/üeõ !€®'¬þ7¤¶Û2‡ÐQo¡2U¾Z¢$ø9tëk þV‚ìÐücœ}×øË<¥«ß·ÛÀtà ktÛ<𙑽kœôûbqéHܶðÒ¥w_ ¢Ì¿Á¢ó­¯­8`£P­£Q±kì}´õ˜a@ ~%„È•ÖW´ÖoE‘Ј'(ðCKÞ»(;ÿ亣Š8üÌ㤅å¸ÚXCcõOe¨0³{îNðsü¾ö¿éø-îUEU' !M³K++«ïóßaÏø”ÑüzggG'I«««Üï÷9´ ØŠà&ñ™3g8Š"ׇˆ¢È²‰í(óÉ…Šˆ2Ó È†£ôeÍ2ÛQ; ð蜂õjh\äQ5¥ÌhŸÝGíòaû1ƒ!¥Û’ËAKï3ü6m­LÕ¨ÓßQðA‚¿v“øí¿1ø9üqÝl»DÇØ•q\ -[?»I@fšoüÞ¡øÙàjCwà·-xna æ‡Z•ò»ï¾÷7Ìœ1sFD™A!„²]t‹[¿8sæL½RÀÌ͵Vl7€ˆêÝåuró_J™Èw†£ÿ;7×»IqPx-Ù[›—ï’® ÂvõÁ]sòÌ~ò£ù–—糿g"ð·h¡½€¿å`Áï\oàçf%¶GöŠR9 þÖàP-Mß ll¡ôõö–OÓ €…8vó-ýzŽÖ Ò‹¯½öÆÿBd2¥”Ã^EÊú夔Z)źKó[i#F1ÀZk­”žSAgYf™'ˆ˜92s¼½=ü«ÅCƒÿ„ÒzW 3<¨ ùP"šScDí ¦Pa€–‡–2ü\ýjä]¶ƒ@C¹Àß9Æï¥ ‚¿–öÆðÆS‚¿zs %i§Ûâ;Üç·ÀM·ÜÞãDMÏ?áâÅ·¿§µQ ·D@çy®˜YEQ¤wvvØ:ã8ÖQq[ÿïÄàw¤”:Š"m~•×PZëÜ|2!D*„H‡£ôGy®^ñÆE•ßÐJ@/`œ°Áì ü^]\sð×þ‡øÃÚù6þ'?»Ïø·¦ç2}óæ 8…kÜ=ƒi°TMÉ0û_9v<™ŸÔ<ÿåñööΙ·ÞºtF‘Q¦µN-”2B¨(Š”Õšù¬ˆbœ¾6IÙþöz=Ž¢ˆ…¼¾¾®…zggG !T–e:ÏsÛÿÈ„™Ö:gæÀhk{ç¯À¬¨$bý²%\Bç LÐ`l¯­QÍ•ÃqàoI·_àñK onóÿí׋ô!ß ü¾h/p Þ}Ò@½; nk­¬ÃÏ‘Š!MÆ18´Z<’MÍoD¿ñÆÅï1óˆ™3‹7!„Êó<·NyƒMm°Êžö÷¤x<¤®=­Rʆ3PJi™'ÓZgÆ9‘Úßáhta4JŸ,ÜqfTPs^y²4‚΢‰ÁßÐòð:ý-ào)dK’ƒCêà¯7s“÷>ŸMôiÁ_nó^Að{ià ß³P»_ƒ||YŒ¹0ßáÇ ^:|,9|ô¸óúMÏÿ•+üÏ÷ßÿà [Ìœ‹;³Ú_J©|ŒÚÉ?fö_k¶àÓ§O£×ëÙÙDz}}]GQ¤F£‘2죔R+@1²Ÿµõg³,ûGïÁØXå2 &{k§vþ¦JÝø+µvàç@Ú@#n<^ •þFœ}R¦lä>x[ï_« º–†`¸v¶¤Ôuÿè]£ùÍ€•‡"¿ÃÇnîÏ»4?666ÿñì^û#WNû+¥r)¥’Ræ£ÑHEQ¤ÖÖÖÜ€^¯ÇfòO+ ”ó‹éƒn:°÷PÖÈJ)Ž¢Hk­uEJk­¤”*˲L!ˆH¢ i>âêÊꟿéØ'„÷˜ÊQ¬™IRìî­Çqæ¦^úÿJ7ø[TDü¡,:À_+@ Lá¼§°LÕ„Æm§•¼Ãàg?JkÞ{+ð9·€¿åî¡à®aÀ…îèbüjì¶ëåÊ ”Ó€r¬?Ž{baéh?Iz­Ö7a4JÏ¿|æÕï2ó@j?Ìœk­³8ŽU–e*IÅÌ®ïo´¿OLÕÇôúÑ] ˜°°°ÀI’hk!ôp8ÔRÊ<˲\J™I)3­ujL”€Š~ËÖÕ•Õo1óÞ ÍšSò BZ€G=p–,¼jž¿+âA€ŸÑ’¯IxààG»Æª=»W‚ <íß¼ÎE&qÐâ}šófÌÇì[ÏÍp@ Ñ¡£ýÁÒ±y)£&î<+@)õÁ^=ÿJ©M”81sªµN¥”©”23ØË‡Ã¡ëûœuÙݨ[_€õ2Ú®€ñ(¥T&¥Ì„©”2ÕZÛBò<eeõ™yÅ›¢£™‘µ ÓZiÈ@׊çý…û ~öÓÙ°kþ0Ø&è¯Ýð73(óÞø¹QâF…³ã¸ôõWkT*¢åZ³c9Z _w”4³©4,HH±”QÉH’”‚¤”R@ˆâXJ&„”PJ½þúëoþÁööÎefJ)‡††FZëQE™R*M’$F*I’|ssSÅq¬æææÔÂÂíïoÈǦ*åïÚˆáùúý>F£Åq¬µÖ´¹¹©æççi8RÇyžç$¥¤<Ï©p»wÈâÁÀÌȲìò;ï¼óO|â¿Òëõ>ïÝI1XATSûÒ€v:!Ãl·D>I“Ù x>A¢Ø&ܼ@„Dù¾"aÎ…(âAPñŽïZ™V{šðz›05ÛhÍ5 UB®ž†Òù µCuÚMK…}55›Ñ&Ön[jØjÝ»êìF–e|»ƒM±«ØÉ¢˜‰"`Ù¼`…„!gûÎ[G`âËÆfsi qû9š{Û 6ɼXÓ+S®íæš\½nÂÙîÔ[ŸºúÀ´}¶õî??üº(»ñ¸æO`?NQ”bc+BJ )HÊê`¾ß¢š{{燯¿þæ·•R¦ ]¿5ÿ£(Êò<Ï¢(ÊíÌ\3ëO›‰?!Ï+»5ÀsVŸ>}'Ožä<ÏaÖ!Ã8(MSÄqLyžSE "*Ö ¹<ýQ~÷ÝwŸ¸é¦›– ÿ…³ÐÖ§BA¢I®º`aX5Uüo@ ìB@ˆ‚y¥¨EÁ¾D a®ùq¥9·q­ŸÔ·|_EäÓ]k@ù«Í^ôlÑ8çæufóöZC\nsmã’†É#¼âWøaæX(ÃjA¬ÙR^Æ-ò0e"­5´ò¶ØÖeyݱ®^Óeé½ëÈ'øqäÈÞV^UR´¯ø*-#.I¡ø\lIß"!ÐÑ«këO^¼¸ü¿ Qöù-øGÌœI)S"Êò<Ï£(ÊÓ4Íã8V¶;îÏú;}ú´%€šaÛ´ÿƽÔ·pæÌ>yò$`¦Ú¯¯¯Ó`0°$'I‚<Ï!¥tš€Û\Äß¿ìƒ>xzkkëGGùZ'ø…-ˆÅ;¨ &..µþ)cã~R')ÖÎ;âNñœÝQëuÛ5Ø/1—=ޏ]WÐþo¿ë‘+Rǯ^«ÆMÓô¥÷?XùÞÆÆÖ›D4²ÎsfI)}ð´Ö©R*‹¢(3à×q«ÍÍM•$‰N’D{¦ÿÄ…@Í ¨dpæÌÜ{ï½”ç¹@ƒÁ@™BǤ”"°$@DE+¥Üf"Zkµ³³sayyçƒÁ¿;røð¿âèîúýŒå¥ Ôýõã" £â§òÞ@ßUï“_ëhï^­ŸK-ŸŽ;v’äTq©Ð*²- s>U}uD÷ùä²;B°’çêÂÕ««ß[Y];‹ð©b„bˆoEQêk~þ\Jék~µ¾¾n÷èh[ñç)ÕðÓNûzp•ÝE5lnnb0(úgY†8Ží›ƒa€o c7.4¾ØÕdccã•ÍÍÍó‡þìââ¡G")ïDÑžì}ˆË-»ÄÕö4Ú¼‹µÇ¨®1Å9éÐæÍ>9At+óZ}uñïœÙ ÖNæ«LœOg¶í—WÛc·´/VJ]ÜÚÜúß++k§ è3£õ3¦¿çO™9‹¢(UJeüY–e™¿uúÅq¬k^ÿ†éß%­°Üñ™3gôÉ“'­Yn‚H’„ó<±ÖšÍ…ÝFÜ’@¢µÎÌ'Ùêêê×ÖÖN÷’ä¦ÅÅÅÏôúý’8ºÅ{A+Ý‘t]lÂÁ›ûSµáérž<ã®^CG!¦³”:®Õêy`Wü"Siú)âvœ7¯M z¥”:Ÿ¦Ù ÛÛÃÿ7JÓ+R³›Oª”Ê̪¾ ¤RJ7Õ—ˆ2¥Tî™ýüRJíƒßÓþâ·i`ŒÐÒ  ô[@F£Š%¦)’$™=ÈJ)-¥ô·ÏäÌ› ÉÄ¢áh4Ú¹|ù="z&Š¢ÁáÃKŸNâø)å’bIH¹(‰…óä• 5’˜F›7ù¡2Y«—ö:kÊn»µ˜S5â]2OCÓwHCñïÎ*˜ªßIûúñq¤Ä¶Xg`]i½ÎÌ«œ«åáhô¢Rzƒ‹ ¿õô×Áï9ýê¦ÿþ€©€‰I Ë2‘e™\\\Y–É<Ïe¿ßY–EJ©(ŽãH)%¥”‘ÖÚA¤µŽM˜4D ™9B,)»@BWsÍ/g½Ü3™É$4È{G†6o5À·ûð+­µ¶à7ǹ9Îí"”Âöó•ÞÇq>íŸuø¹á¾ý?0!˜K£Ñˆ†Ã!eY&”RbqqQ¤i*ó<—J)Ñëõ¤R*ÒZË(Фµ ´ÖRk-¥”3K­u$¥´š>bfKBJIæ\ø÷·¤¢mýŒ f’600èò]÷•—å˜s»Q®=Væ\Ð+"*6Ï-WÐ:MŸç¹2Ëzýé½*Ieçø·ôùw ~` ¦#­5eY&–––Dš¦R)%¬5ç¹4$i­E üèÒžK)Š L3“¹.P~ôž%à—u&3™F8¨\ÈVék["°CÜdvÏ •RÚlšk À?·$à6Ö‰¢HY­oç÷oll(;Ô·ßà¦$S]$€“'OŠÑhDyž#MS‘e™`f2~¡µyž‹^¯'-øµÖ2ŽcwE‘ÓøZkaÎ…¯ù­%à—Á{–øg²_Òð4Úa=f5?©bþÏ4ÿL@‚–€Õþyž³%ß °[u™­º5é4Mµ”R‘Ž¢H™m¼8Š"å_Á~¿ßïûS|øüÀ. ÀTÄD$à[J)RJ ¥”XZZ"k(¥„Öšúý¾} üdÁoÁÇqðCD0“™ìI¨ú¶®A–e®Kà‘@ã•zv/ Q¾½GGQ¤íN>vI¯¯õ üÀhèøD`}–´Öd-fvaÌLý~_p±`D C€’$©ƒæwœó¯o&3qBW5Ä ð‡…™ˆ8MSGæÝîx8º÷õI)µ™ï6ð´À÷ûúðí½Àv~`Œ%ûK'Ož$¨í>|˜´Öä“Ñú`fšŸŸ'Köƒ€¶{ø™ìFB„à‡Õ­Oëóöö¶=U@/„àÕÕU·wŸ·é./,,0€Ðn>û~`è$ÿ¸Ayž#Ïs7b`4>13---‘.–|:Àk­àëZ~~¾Rw&3Ùæ%›V¶··Ö€=æ­¼– „yÉ®='óÒ zkêÀ¯ïüÀ>$ ƒzè!ø>K`-ŸŽ9K@ ðºvŸiû™¤Ô­ôöWÁ+++ðo5½ãߘúÀ„ÀöüÀ>€Ëp:"p> ´  ¨Ü×ò–$B2³f²©k}ÉYóIDAT+Ü¡x>!Ô{kZmèãû¿õã"`Ÿ»ïà2ž’àY@Aìb#˜ãŠö rh+à ø3Ùi# Øì¦Ï)gëíj ºûö|+Fî㉠~^!Ž€’¬øÑ&–8f2“id¢·ëFÕµÞ^vo>´¾~:/¤NîFa"Æ/Ú ž[rª1“™\+±Èñ þÐAïË5#wÃv"pQ& ë ŸÉL®¥´(Þ ¸k|+לOÀt@Ÿ‘ÂLR¦Ìظ×ðuùÐ  .BgûR™Ì$,{̇ øºüJüNÐaáIEND®B`‚Carla-2.4.2/resources/ico/carla-control.rc000066400000000000000000000000341420416754300204160ustar00rootroot00000000000000id ICON "carla-control.ico" Carla-2.4.2/resources/ico/carla.icns000066400000000000000000005673351420416754300173160ustar00rootroot00000000000000icnsîÝics#H?üþþÞþþþþþþþþþþ?üþþÞþþþþþþþþþþics8­‰‰‰‰‚‰‰‚‰­­ßAGÙÙÙÚÚÚÚkÛe­ÞG¬ýý¬¬¬¬¦ýˆÛ‰ÞÙ¬û¬üûüåâéˆÛ‰ÞÚûøûûûŸÄþˆÛˆ­Ú¬üýûûûŸ¼ÉÝ܈­Ú¬ýý¬¬¬¬üüˆÜˆ­Úýýý¬¬¬¦æþ¬Üˆ­kˆùüüûû â鬈­kˆVûûûŸÉþ¬‚­kýýýüüü¥¼ÃýÝ‚­ÛŽÝÝÝÝÝ݈¬ÞÞ‚­eÛÛÛÜÜÝÞ‰¬­­‰‰‚‰­‚‰­­­is32Ä ~š–«±Œ‰©‘r€d¿ÍÀ¼·±¦¢¤›‚zÈI+3@?@820[Œ“z½A]0BLJPˆ“z±l¬aPc_ P‚“z­G6!  (c+ ++*CO! h. )U-EOC×k0 K¥SQcV†n4 %A'SYMˆ´ts5'!%,-,5GI w9!33/a{z5< 6|=IZL‹Ù!> C”KWdXŠ}‚A!(!FJAw¶†‡E €$ŒU+   ?‘U8Kn‰ZM‚f>EhŽÿ„ÿ  &CA!    ÿ",,-% #&ÿ*U-EOM)ÿK¥SQcZR--ÿ&A'SYNx£b0ÿ(!%,-+8KD!4"334" 747|=IZV: D”KWd[lO> "(!FJBi¢rC €%FG #C#A(#ÿ„ÿÿ€s8mk c–˜˜˜˜˜˜˜™–d cÿÿÿÿÿÿÿÿÿÿÿÿd˜ÿÿÿÿÿÿÿÿÿÿÿÿ˜˜ÿÿÿÿÿÿÿÿÿÿÿÿ˜˜ÿÿÿÿÿÿÿÿÿÿÿÿ˜˜ÿÿÿÿÿÿÿÿÿÿÿÿ˜˜ÿÿÿÿÿÿÿÿÿÿÿÿ˜˜ÿÿÿÿÿÿÿÿÿÿÿÿ˜—ÿÿÿÿÿÿÿÿÿÿÿÿ˜—ÿÿÿÿÿÿÿÿÿÿÿÿ˜—ÿÿÿÿÿÿÿÿÿÿÿÿ˜—ÿÿÿÿÿÿÿÿÿÿÿÿ˜bÿÿÿÿÿÿÿÿÿÿÿÿd c–˜˜˜˜˜˜˜˜–d ICN#ÿÿðÿÿø?ÿÿü?ÿÿü?ÿÿü?ÿÿü?ÿðü?ÿñü?ÿÿü?ÿÿü?ÿñü?ÿÿü?ÿÿü?ÿÿü?ÿÿü?ÿÿü?ÿñü?ÿÿü?ÿÿü?ÿñü?ÿðü?ÿÿü?ÿÿü?ÿÿü?ÿÿü?ÿÿüÿÿøÿÿðÿÿðÿÿø?ÿÿü?ÿÿü?ÿÿü?ÿÿü?ÿðü?ÿñü?ÿÿü?ÿÿü?ÿñü?ÿÿü?ÿÿü?ÿÿü?ÿÿü?ÿÿü?ÿñü?ÿÿü?ÿÿü?ÿñü?ÿðü?ÿÿü?ÿÿü?ÿÿü?ÿÿü?ÿÿüÿÿøÿÿðicl8à­­­­­­‰ƒ‚‚‚ü­­¬‚‚‚­­­­àþ_;AAeeAA;::::ee^:::eeee_þ‰AGGGGGÙÙÙÚÚÚÚÚkkkkkkÛÛÜe_þþeGÙÚÚÚÚÚkkkkkkkkÛÛÛÛÛÛÛÛÜ^­­eGÚ¬ýýýýý¬¬¬¬¬¬ý¬¬¬¬¬ýˆÛÜ_‚­eGÚýþþþþý¬¬¬¬¬¬¬ä¿ÅþþýˆÛÜ^‚­eGÚýý¬¬ýýüü¬¬ü¬¬¿âãêýˆÛ^‚­eÙÚý÷øüýûûúú¬¿ááËýˆÛ^‚­eÙk¬øùV]ýüûûûû¬Ä¾ÅèþýˆÛ^‚­eÙk¬ùøVýûûûûûû¬»¼ýˆÛ^‚­eÙký¬¬ýúúúù¬¼¼ÉÉÊýˆÜ^‚­eÚkýþýýþýüüüüüü¬¼µµµ¼ýˆÜ^‚­eÚkýþþþþý¬¬¬¬¬¬ý¬¬¬¬¬ýˆÜÝ^‚­eÚk¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ˆÜÝ^‚­eÚkýýýýýý¬¬¬¬¬¬ý¬¬¬ýýýˆÜÝ^‚­ekkýþþþþý¬¬¬¬¬ü¬¿áãàýˆÜÝ^‚­ekÛýýûûýýüûüüüü¬ãâãéýˆÝ^‚­ekÛýù÷øýûúúúú¬¿á¹æýˆÞ^‚­ekÛ¬øùV]ýüûûüüü¬ÃÃçýþýˆÞ^‚­ekÛý]øVûýúú¬»¼ýˆÞ^‚­eÛÛýýüüýý¬¼»¼¼ÃýˆÞ^‚­eÛÛýþþþþý¬¬¬¬¬¬¬¼»»»ÂýˆÝ³^‚­eÛÛýýýýýýýýýýýýýýýýýýýˆÝ³^‚­eÛÛˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÝÞ³^‚­eÜÜÛÛÛÛÜÜÜÜÜÜÜÝÝÝÞ³ßXüà_eÜÜÜÝÝÝÝÝÝÝÞÞÞÞ³³³ß‰4þ­_eeeee_^^^^e‰e^^^e‰‰‰‰_Xýà­­­­‰‰‚‚‚‚­­¬‚‚‚‰­­­­­þil32 ŒÁ(t€lZbwŠ–¨¦Šmiƒœª–‚pqi+„IËͼ­°¼ÇÌÎÒ͸¢Ÿ¯¿Æ·§˜–™š]‚ ‡ÍÑÐÍÊľ¹³®©¥¤£ œ˜”’‘އ¨8I§Óé©§¤¢Ÿœ™—–”“’ŒŠ…„ƒw«…S°Ò©'!€"$*++'++€,%aŠt¤”S®Í©! :9:99:."aŠq£–U¬È¦!@; >D7:=9/  aˆn¢–W«Â£"yÀ³]]Zokpc, € a…k¡—Y©½ž6·†’’*GVfRZ\-$_ƒh¡™Z§¸œ.š£ x%YZVT\Z- !_€e ›\¥³› <{o3{o~m€n, € ^}b  ^£®˜#!?=>0€"]{^Ÿž`¢©—#€ƒ,%&€%&!\x[Ÿ a ¦”8€4541‚2ƒ31auXž¢c ¢“&!ƒ. ')(()*$[rU¤eŸŸ’#!;9;;:<0 #ZpR¥gŸœ!)la$EN=AG94.'[ÊD‚d«•‚ƒ£§¬«˜yˆ˜¢”‚rmlk‚¸y„,jce|™¢«¬’un„®ž‰vsv|{4ÁÁ(fjS@G_t‡š­­ƒVQu°‘oQOM'„7`TC3&,D7:=82Ååº &%U‰;'%]± D]Zokpb/Ïñöl&%V‹=(/¡Š•w%GVfRZ[/¥µ“K*%X>*+~£žZ#YZVT\Y0ÕÊ€'%Z@+%.bU){o~m€m/¹ÅvtQ#%\” B,&!?‚= 3Ôøÿÿ³!%]–D-&€ƒ,%?€C:&$_—E.;€4541‚2 3.--/06+`›G/)!ƒ.(9<8€)%bI0&!;9;;:;3Îð½(%d I1%"UK EN=AG;1¹×º"&%e¢K2'yµ«W_\rxo/Ñõÿv&%g¤M30¡…’w&@NPDJL0¤ªR.*%i§O5)g¤–J!olngtj/ÖÌ€&%k©P5%"BUX:0NZA&  ‚  &58" 09( “ € ‚ƒ‚0€ 0%€&'ƒ.*./-(5€ % :9::9;.($6€ %2. >D7:=9/ &%7€ %]± D]Zokpc,€&%;€ /¡Š•w%GVfRZ[.70*%=€ +~£žZ#YZVT\Y/¸°€'%!>€ %.bU){o~m€m/š£abC#%"@€  &!?‚= 2±ÐÔÛ•"%$D€ &€ƒ, %:>>?7&$%E€ ;€4541‚23016+'G€ )!ƒ. ')(()*)%(I€ &!;9;;:<0 (%*L€%"UK EN=AG-K\E)€†€   €¢l8mk  ?x’“““““““““““““““““y@eßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàe ?âÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿã? yÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’’ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’’ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’’ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’’ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’’ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’’ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’’ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’’ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’’ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’’ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’Žÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿxÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿy ?àÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿã? cÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàe?x’’’’’’’’’’’’’’’’’’x?  it32g°ÿÿÿÇ©€ É€   à ˜*Á *”‚Š’‹Š€‚”   ž©   ’k 3dŠš¤£ž™“‰ƒ~ytptz€‡Œ’˜ž¤ª¯³µ¸º½¿ÁÄÆÉËÍÐÓÕÒÊÁ¹±¨ ™ˆ€{€ˆŽ•œ¢ª±¸¿ÆÌÓÓÌÆÀº´®§¡œ•‰†‡‰Š‰‡€vY0 ^ J‰¦¸ÃÈÇÁ»µ¯©£œ—ІŒ“𢩰·¿ÅÍÔØÜßâåèêîðóöúýÿÿþôêßÕËÁ·¬£—“›£¬´½ÆÎÖßèðùÿÿøðèáÙÒÊ»´¬¤¡¢£¤¥€¦ ¢˜ƒL Žo  3{ ¯¶¾ÆÌÉü¶®§ š“Œ„€‡Ž•œ£«³¹ÁÈÏÓÖÙÜßâåèëîñô÷úýøîãÙÏÅ»±§“Ž—Ÿ§°¹ÁÊÒÚãëõüùòêãÛÔÍŽµ¯¨ žŸ ¡¢£¤¥§ª 8  Z  H‹£©±ºÂËÏÌÈÄ¿»·²­©¤ŸŸ¤§«®²¶¹½ÁÄÆÈÉÊËÍÎÏÐÑÓÔÕÖ×ÔÍÆÁºµ®©¢œ–”˜¢¦«¯´¹½ÂÆËÐÍÈÄ¿º¶²­¨£Ÿ›–‚•—›ž¤¥¥¨¬šS  ŒqQ£¬¶ÄÍÐÐÏÎÍÌÊÉÈÇÆÅÄÃÁÀ¿¾½»º¹·¶µ´³²°¯®¬«ª©¨§¥¤£¢ ŸŸžžœ››š™™˜—––•”“’’‘ŽŽŒŒ‹‹ŠŠ‰ˆˆ‡††……„†Œ—£§§­§e ŠsB†–œ¦¹ÌÒÑÐÏÍÌËÊÉÈÇÆÅÃÂÁÀ¿¾½¼ºº¸·¶µ´²±°¯®¬«ª©¨§¦¤£¢¡ ŸŸžœ››š™™˜——–••”“’’‘ŽŒ‹‹Š‰‰ˆ††……„ƒ‚‰›¨ªµ®X ‰s /z• ¹ÑÓÑÐÏÎÍÌÊÊÈÇÆÆÄÃÂÁÀ¾½¼»º¸¸·µ´³²±°¯­¬«ª©¨§¦¥£¢¢¡ ŸŸžœ››š™™˜——–••”““’‘‘ŽŽŒŒ‹ŠŠ‰ˆ‡††„ƒ‚‚€–ª±¼¬? ˆue‰—µÓÒÑÐÏÎÍÌËÊÉÈÇÆÅÄÃÁÀ¿¾½¼»º¹¸·¶µ³²±°¯®¬«ª©¨§¦¥¤£¢¢¡ ŸŸžžœ››š™™˜——–••”“’’‘ŽŽŒŒ‹Š‰ˆ‡†…„‚€€~~˜²¹Å–‡7<{‰¨ÐÓÑÐÏÎÍÌÌËÊÊÉÈÇÆÄÄÃÂÀ¿¿¾¼»º¹¸·¶µ´³²±¯®­¬«ª©¨§¦€¥:££¢¡¡  Ÿžžœœ››š™™˜——––•””“’’‘ŽŽŒ‹‰‡†„ƒ€€~~|£ºÂ¾X ‡ d„‰•ÅÓÐÐÏÎÍÍ€Ì"ËËÊÉÈÇÆÆÅÄÃÂÀ¿¾½½¼º¹¸·¶µµ³²±°¯®­¬««€©¨§¦¦€¥¤£¢¢¡¡ ŸŸžžœ››š™™˜——€–•”“‘ŽŒŠ‡…ƒ‚€~}|zˆ¶ÁΡ  †'r„‰«ÒÐÏÏΆÍ6ÌËÊÊÉÈÇÆÅÄÃÂÁÁ¿¾½½¼º¹¹¸·¶µ´³²±°°¯¯®®­­¬««ªª©©¨§§¦¦¥¥¤¤£€¢%¡¡ ŸŸžœ››š˜–”‘Ї„‚€~}|{z¢Â̾7… DyƒŒ¾ÒÏÎ΀ÍÎÑÒ‚ÓÒÒÑÐÐÎÍÍÌËÊÊÈÇÇÆÅÄÃÂÂÁÀ¿¾½¼»»ºº¹€¸·€¶µ´´€³²€±°°¯®®€­¬««ªª€©¨§¦¤¢Ÿœ˜”މ†ƒ€}|{zxÀÊÍo ƒ *W}ƒ•ÊÑÎÍÎʹ·¹ºº€»ºº¹¸¸·€¶µµ€³²±±°¯¯®®­¬¬««ªª‚©¨€§¦¦¥¤¤£€¢¡¡ Ÿžœ›š˜•’މŒˆƒ}{zzx¸ÊÔ— … ^~ƒœÏÎÍÍÌÌÍѺ`UWXWƒX”WVW¡VUTQw‘Š…|{yyxx±ËÕ§  „ e€„¢ÏÍÌËËÌÌѺWFÊ>DKw•Œ†~|zyxwvªËײ  ƒg„§ÎËËÊÊËÌÒ»Z>É.Lz˜Ž†‚~{yxwwu¥ÌØ·ƒg…§ÌÊÊÉÊËÌÒ¼Z>”˜•/L|›‡‚~{ywwvt¤ÍÙ¸ƒh‚…¦ËÉÈÈÉÉÌÒ¼Z>“0–3#(1’0./L~ˆ‚}zxwvut¤ÍÙ·ƒ i‚†¦ÊÈ€ÇÉËѼZ>“C•?D/9D’@C /Lž‘ˆ}zwvuts¤ÎÚ·ƒ iƒ†¦ÉÇ€ÆÈÊѼZ>“@•:@.87‡†)@ /LŸ‘ˆ|ywuttr¤ÎÚ¸ƒ iƒ‡¦Ç€ÅÆÇÊлZ>“@•:@.84‘A /LŸ‘ˆ{yvttsq¤ÏÛ¸ƒ i„ˆ¦Æ€ÄÅÆÈлZ>“@•:@.84 A /LŸ‘‡€{xutsrp¤ÏÛºƒi„ˆ¦ÅÃÂÃÃÅÈκZ>“@•:@.84 A /Lž†€zwusrrp¤Ðܺƒj…‰¦ÄÂÁÁÂÄÇͺZ>……@•:@.84 A /Lž†zwtrrqo¥Ðܺƒ j…‰¥Ã€ÀÁÃÆÍ¹Z>ƒ &0772(ƒ@:99‡:99ƒ:@.84 A /Lž…~yvsrqpn¤Ñݺƒl…Š¥ÁÀ¿¿ÀÂÅ̸Y> ,FWfmni^M2@::97=<7†:@?ƒ:@.85 A /L~…~xusqpon¤Ñݺƒm†Š¥À¿¾¾¿ÀÃË·Y>€€2?cŒÅåãÛØÓÀ¡ˆpK@:8™¤TZvC[t_9=U[]”„8ctV8:@.84 A /L~œƒ|wtqoonl¤ÒÞ¼ƒJm‡Œ¤½¼»»¼¾ÂɶY>5_“ÛçÓÅ¿¿ÆÎ¿‰pA@9HÄP476?„еsAâq”DŠ·]6@.84 A /L~›ƒ{wsponmk¤Óß¼ƒJmˆŒ¤¼»ºº»½ÁȵY>#RÎçÊ·ª£¢©·Ë·‹„d(@8R¿F8:9:c†²¦CÄQ.ƒ8oˆÂŒ3@.84 A /L}›Œ‚{vrpnmlk¤Ôß¼ƒJnˆ¤»º¹¹º½¿ÇµY>6f¬çÏ´¡•” µÉ™ƒxC@9CÂ]147]ºjŠ«G¶I2~r²_¥’2@.84 A /L}šŒ‚zurommlj¤Ô༃ nˆ¤º¸;»¾Æ´Y>GxËÞ¿¥’‚zz‚’¤Á·{X@:6·w}‹i½l¬¯G·J2‘~x³hÄ“2@.84 A /L}š‹yuqnmlki¤ÔགྷJn‰Ž¤¸··¶·º½Å´Y>N‡ÒÕ¶œˆvllu‡›¶Äy€d"@::9g‘Ž];tŽpd?k@6\V?ˆpZ7@.89‰‚"!/@ /L}™Š€ytpnlkji¤Õགྷ,o‰Ž£·¶µµ·¹½Å³Y>!SŒÎÒ³™„rccrƒ˜³Çr~k%@€:6557:€67:7::8895668:@.7<„/Š37@ /L}˜Š€xspmkkjh¥Õ⽃,oŠŽ£¶µ´´µ¸¼Ã²Y>Q†ÃÒ·œˆvllv‡œ·Àjg#@•:@.85ƒˆ#A /L|˜Šwroljjig¤Ö⾃2oŠ£µ´³³´¶ºÂ²Y>J{¯ÏÁ¦’ƒzzƒ‘¤Ä¨_ƒ\@::8458:8558: 9547::@.84 A /L|—‰~wqnkjihf¤Ö㾃 p‹‘£´€²<³µ¹Á±Y>9m—¹Ë¶¡•ŽŽ” ¶Çnn€G@:6JlfD6::6Cb^K7::8;cmS79@.84 A /L{—ˆ~vqmkihgf¤×ãÀƒ p‹‘£²€±<²´¹À°Y>$Zš¹Ë¹ª¤¤ª¹ÌŒY…m)@6aÇÓšM67O¸¶ƒª\78A£Ô˰o7@.84 A /L{—ˆ}upmjhhge¤ØãÀƒ o‹‘¢°<±´·À¯Y>;lˆ’§ÇÉÅÅÊ€T~|F?@„¢¼±£|99¡Þ¦nª‰@2‚Ýȶ™kB=.84 A /L{–‡|uolihgfd¤ØäÀƒJoŒ‘¢¯¯®¯¯³¶¾¯Y>Hq…ƒ†œ¨¤b^~U€Fk~€ulfgvƒxO €=R¸³œ}j9>­´¢’€pD7–º¥“‚xL<.85 A /Lz•†|tnkhffdc¤ÙåÁƒp“¢­¬«¬­°´½­Y> 2Ulx}|s]7@:Š¢Ž}nQ58x¥‘€qY75c¥•„u`:>.84 A /Lz”…{snjgfedb¤ÚæÁƒpŽ“¢¬«ª«¬¯³¼­Y>ƒ );DE=,ƒ@8EtyiP788=m{mV:8:9c|p[?6@.84 A /Lz”…zsmifedca¤ÚæÁƒrŽ”¡«ª©ª«­²»¬Y>„„@:88=:59::87<;68::96<<77:@.84 A /Ly“„yrlhfdcb`¤Ûçƒ r”¡ª€¨©¬±º«Y>“@€:99ƒ:99ƒ:99€:@.84 A /Ly’„yqkheccb`¤Ûçƒ s•¡¨€§¨«°¹«Y>“@•:@.84 A /Ly’ƒxpkgdcba_¤Ûèƒs•¡§¦¥¦§ª¯¹«X>“@•:@.84"A /Ly’‚wpjfdba`^¤ÝèÃs• ¦¤¤¥§©®¸ªX>“B•<B/8>‘59A /Lx‘woiecaa`^¤Ýéăt– ¥££¤¦©®·©X>“;>”=?(2?’>;/Lx‘voheba__]¤Þéă t‘– £€¢¥¨®¶©X>”–“/Lxumhdb__^\¤Þêăt’˜ ¢¡¡¢¤¨­¶©X>”—•/Lx€umgca_^][¤Þëău’˜€ ¡¡¤§¬µ¨X>É0Lxtlfc`^^][¤ßëău“˜ ŸŸ ¡£¦¬¶¥UHÊ?DLuŽtlfb_^]\Z¤ßëÆƒu“™Ÿ ¢¦«µ¡PMÊPOKo~skea_]\[Y¤àìÆƒ u”™Ÿ€žŸ¡¤ª´¦VFÊ7@Lu~sjda^\\[X¤áìǃw”šŸžžŸ ¤©³§X>É.Lw}rjc`][[YW¤áíǃx•›Ÿœœ £©²¦X>”˜”/LvŒ|qhb_\ZZYV¤âíȃ x•œ €œŸ£¨²¦X>“5•89&-8’75/Lv‹|phb^[ZYXV¤ãîȃz–œŸ›š›œž¢§²¦X>“C•>C/9A:†9:†;=C /Lv‹{oha][YXWV¤ãîȃz– šš››ž¡§²¥X>“@•:@.85 †…  &@ /LvŠzoga]ZXXWT¤äïɃz– š™š›¡§°¤X>“@•:@.84A /LuŠznf`\YXWVT¤äïɃ{—Ÿ™˜™šœ ¦°¤X>“@•:@.84 A /Lt‰ynf`[YWVUS¤åð˃{˜žŸ˜˜™™› ¥¯¤X>“@•:@.84 A /Mt‰yme_[XVVTR¤åñ˃{˜ŸŸ——˜˜›Ÿ¤®£X>„„@•:@.84 A /Mtˆxmd_ZWVUTQ¤åñ˃|™Ÿ —–—˜šž¤®£X>‚ -:?@<0!‚@:89‡:99ƒ:@.84 A /Mtˆxld^YVUTSQ¤æò̃|™  –•–—™ž¤­¢X> 4N_oyzreV;@::88FE8…:9DB9‚:@.85 A /Mt‡wkc]XVTSRP¤çò̃|™  ••––™£­¢X>€!C`€¬ÅËijœlN$€@:8G™¬¬‡=6569:761‰}4656::@.84 A /Mt‡vkb\XUSSRO¤çò̃J|š¡ •”•–˜œ£¬¢X>Ei™ÓèàÙÖÓŦuS!@99£™FLiBe…m<=_gi”ƒ9p…b9:@.84 A /Ms†vja\WTSRQO¤èó̃'}š¡Ÿ”“”•˜œ¢¬¢X>:eääÎÁº»ÁÌà‹sG€@8JÄL686?{y¯|AÊœf“C€|¶e6@.84 A /Ms†uia[VTRQPN¤èỗ }›¡Ÿ€“=”—›¡«¡X>&U†ÕãÆ³¦ŸŸ¥³È½Œ…h-@8QÀG8:9;pµ¨DÁM-‚;|Ä3@.84 A /Ms…ui`ZUSQPOM¤éô̓J~œ¢Ÿ“’““—š «¡X>9i³ç̱ž‘ŠŠ‘ž±ÊŸ{G@9@¿d15H{Íܽ£€xw€¢ÀºzZ@:6sº‰Ž‘d½}±¬F´J2}r¸yÆ2@.84Š‚!A /Mr„tg^XTQPOMJ¤êõ̓I~£Ÿ‘‘“•™Ÿ© W>OˆÒÔµ›‡uijt†šµÅw€f#@::8Z€~S9f€cY>`?8UP!S‹Íѳ™„rddrƒ™³Çq~k%@€:7448:6467:6::78:5467:@.8;+‚*+Š.5@ /Mrƒrf]WSPMLJH£ë÷΃,€ž¤Ÿ‘”˜ž©ŸW>P…ÁÒ·‰xnnxˆœ¹¾hf"@•:@.84ƒŠ!A /Mrƒre]VQNLKIF£ë÷σ2€ž¤ŸŽ‘“˜ž¨ŸW>Ix¬Í甆}}…“¦Æ ^„Y@::6457:7566: 85569:@.84 A /Mq‚qe\UPMKIHE¢ìøÏƒJŸ¥ŸŽŽ“—¨žW>6k”³Ë¹¤˜‘‘—¤ºÂcs~C@:6Wƒ{M6::6MuoW7::7Cv…`;8@.84 A /Mqpd[TOKIHGD¢íøÏƒJŸ¥ŸŽŽ’–§žW>"W~—²Ë¾¯¨§®¾É}^†i&@5mÔÔ£V66\ȶ{±f78HµØÉ¶z9?.84 A /MqpcZSNJHGEC¢íøÑƒJ‚ §ŸŒ‘•›¦žW>5g…ŽÀÌÉÉÌ·oXy??D†Ž²® ::ªÚ¥p¦‹C2ŒÜų‹`D=.84 A /Mq€obYQMIGFDA¢îùу‚¡§ŸŒ‹ŒŽ•›¦W>Alƒ„€–‘z\g„zL€<\¾ˆ‰žŒy=?¾Ãª“K9¦È´›\kT<.84 A /MpnaXPLHFEC@¢îùÒƒ‚¡¨ ‹‹Œ”š¥œW>€N²±œ‹{g8<§²Ÿ~mB6¸¢’‚uI<.85 A /Mp~m`VOJGDCB>¡ïúÒƒ‚¡¨ŸŠŠ‹Œ“š¤œW>‚ *Jcrz{viQ-@8ŸŒ{kL57l ~oS66ZŸ“‚r[9?.84 A /Mo}l^UNIECB@>¡ïûÒƒ‚¢¨ŸŠ‰ŠŒŽ“™¤œW>ƒ "/671$ƒ@9>fpaJ6€9^qeO88:7WqhT;7@.84 A /Mo|k^SLHDBA@<¡ðûÒƒƒ¢©Ÿ‰ˆŠ‹’™¤œW>…€…@:858769::968859€: 67958:@.84 A /Mn|j\RKGCA@>;¡ñûÒƒ„£©Ÿˆˆ‰Š‘™£›W>“@€:9…:9„:9€:@.84 A /Mn{h\RJFB@?=: ñüÔƒ„¤ªŸ‡‡ˆ‰Œ‘—¢šW>“@•:@.84A /Mmyh[PIDA>=;8 òýÓƒ„¤«Ÿ‡†‡‰‹–¡šW>“@•:@.86 Ž  %A /MlxfYOHC?=<:7 òýÔƒ„¤«Ÿ††‡ˆ‹– ˜W>“B•<B.9?89:<:96 óýÔƒ…¥¬Ÿ……†‡ŠŽ”ž—W>“7•;<&/=‘;<8/MisaULE@=:985 óþÔƒ…¥«Ÿ…„…†ˆ“œ•V>É/Mgo_SJD?<9873 ôþÓƒ …¥¬Ÿ€„…‡‹™’V>É/Mdj\PHB=;8752ŸôÿÔƒ ˆ¦¬Ÿ€ƒ„†‰Ž–ŽV@É1MaeWME@<97540ŸôÿÔƒˆ§­Ÿƒ‚‚ƒ„‡‹’ŠSHC‡B¼CGM[^SJB>:7543/ŸöÿÓƒˆ§­ž‚‚ƒ…ˆŽˆ^Y\€]‡^Œ]‹\[\…[Z[[ˆZ€YXXWUTQXWMF@;86431.žöÿÔƒ‰§¯Ÿ€‚ƒ…ˆŒ‹“–™›œ€œœ›€š™˜€—€–••””““’‘‘€Ž€Œ‹‹€Š‰‰€ˆ‡‡€†%…„ƒƒ‚€}zwrlf^WOGB=975320- öÿÕ„ „¨¯£€ ƒ…‡‹Ž’”–——€˜——–€•”““’’‘‘ŽŽŒŒ‹‹ŠŠ‰‰€ˆ‡†……„„ƒ‚€€~~}€|&{zyywvuutrqnkgb\UOHC>:75321/-®÷ÿÎ „ |¦¯¨€€€ƒ…‡‰Š€‹Œ‹‹ŠŠ‰‰ˆˆ‡‡†……„„ƒƒ‚€€~~}}|{{yxwwvuuttssrqqppo€n'mmkjihgffecb`^\YUQLGC?;864200.-¿øÿÀ ƒ * r¦¯®…ƒ~€‚ƒ ‚ƒ‚‚€€~~}€|{zzy€xvvuuttsrrqqpoonmml€k4jiihhgfeedccbba`^]\[ZYXWUTRPNLHEA>:86420/.*?Ò÷ý®…  V¤®¶|€}||}}|‚}| {zzyxwwvuutssr€qpoonnmlkkjjihhgfeeddc€b2a``_^]]\\[ZYXVUTSRQPONLKIHFDA?<:76420/.-%bëöö~… .𮏤}€|€{€z€y`xxwwvuuttsrrqqpoonmmlkkjiihggfeeddcbba``_^]]\[[ZYYXWWVUUSRQPONLKJIHGFECB@?=:975420/.-+)žòúæ?† …¯µºŒz{€zfyyxxwwvvuttsrrqpponnmllkjjihhgffeedcbbaa`__^]]\[[ZYYXWWVUUTSRQPONLKJIHGFDCBA@?=<:9765320/.-+%TÜðüà  ‡u I¨¶À°yzyxxwwvvuttsrrqpponnmllkjjihhgffeddcbba`__^^]\\ZZYYXWWVUUTSSRQPONMLJIHGFEDBA@?>=<:98654210/.-+'2­ëòêh ‡ †·½Æ¨z€xfwvvuttsrrqpponnmllkjjihhgffeddcbba`__^]]\[[ZYYXWWVVTTSRRQPPNMLKJIHGEDCB@?>=<:987653210/.-+(*Žäéö¸ ˆs6¦¿ÅÉ¥|vwvvuttsrrqpponnmlkkjjihhgffeddcbba`__^]]\[[ZYXXWVVUTTSRRQPPOMLKJIHGEDCA@?>=<:987653210/.,+%2ŒÚãï×F  ‰  R³ÅÈŪ†vtasrrqpoonmmlkjjihhgffeddcbbaa`_^^]\\[[ZYXXWVUUTSSRQQPONMLKIHGFECBA@?><;:98764321/.-*')M ×ÜçÜgŠq hºÈþ³›…ytsrqqponnmlkjjiiggfeedcbba``_^^]\\[[ZZYXXWWVUTSSRQPOONMKJIHFFDCBA@?>=<;987653210.-,,9U‡¿ÒÕá×|ŒS  X³Ã¼µ±©“‹„{|€„ˆŒ”˜œ ¤¨©«¬­¯°²³µ¶¸º»½¼¶°ª¤—‘‹…~xz„‰“—œ ¥ª¯³µ¯«¦¢œ˜“މ„zwvwvvwvvwwŒŸ¸ÄÉÑÛÆd o  <³µ°¨£–Šƒ…”›¢ª±¸¿ÇÎÔ×ÚÝàãåèëîòõøûþýôéßÕËÁ·­£™”¦®·¿ÈÐØáêóûþöïèàÙÑÊû³¬¥Ÿ ¡¢£¤¤¥¦§¨©ªª¯µ»ÅÍÆ¢@  Ž) MŒ ¥¡œ˜’Œ‡‰™ §®¶½ÄËÓØÛÞáäçêíðóöùü€ÿ@÷ìâØÎù¯¦›“˜¡©²»ÄÌÔÝåî÷ÿÿùòêãÛÔÍŽ¶®§¢¢£¤¥¦§§¨©ª«¬¬°¶¸²œW  k  1Xsy|ztptx~„Š‘—¡§®²´¶¸¼¾ÁÃÆÈÉÍÎÑÔÒɺ±©¡™’‰€{~†”›¡©¯¶½ÃËÒÓÌÆÀº´®§£•‘І‡‡ˆ‰‰ŠŠŒŒ‹‡b3  ’   „”‰ŒŠ   ” ƒ¿”*É*˜  ‚¿‚    É ªÅÿÿÿ‘ÿÿÿÇ©€ É€   à ˜*Á *” ƒ’ˆ…ƒ„ ”  …  ’k ,Liw~{vohb\UOIC>CJPV]cipv}ƒ‰”™Ÿ¤¨¯´¹¿ÄÊÏÓÐ÷ªœƒwj^PJR^hr}ˆ’ž¨²½ÇÒÐÆ½²¨Ÿ•ŠwldYSUVVXVRM>& m 7cyˆ’˜–Žˆzrkd]UMHNV^fov~‡Ž–ž¦¬²¹ÀÇÌÓÚáçíôûÿûìÜ̽­ž~n^Vbp}Š—¤±¾ËÙåóÿüïã×Ë¿³¦›Ž‚vicdefghhif`V5 Ž` (Un|‚‰˜”†yqjb\TMHOW^gow‡Ž–ž¥«²¸¿ÆÌÒÙßæíóúÿøéÙÊ»ª›‹}l]Wcp}Š—¥±¾ËÙåòþùíàÕȼ±¤™Œ€thbcdegh€i jlgU, o 2[msz„†yo_RMIEA=940,*.27;@DINRW[_cgknrvy}…ˆŒ”Ž…|tjbYPG>529AHPW_gnv}…Œ“ˆzsle^WPJC<99::HQá *•£«` ƒ *.AJE „ ͇ ƒ¥±‚ … 1BL=… BËJIJ ˆt§´‘  „  4DL6… HKÉ@?EP"ˆ g¨µ› ƒ 6DM0… H@É.O"ˆ ]©· ƒ 6EN0… H@”˜•/O"ˆ \ª· ƒ 6EN0… H@“0–3#(1†0/ˆ0./O"ˆ ]ª¸ ƒ 7EO1… H@“C•?D/9Cˆ>‡@C /O"ˆ ]«¹ ƒ 7FO1… H@“@•:@.5P²¹„¸¼–…)@ /O"ˆ ]¬º¡ƒ 7FP2… H@“@•:@.4[û†ÿÎ…A /O"ˆ _­»¡ƒ 7GQ2… H@“@•:@.4Zö†ÿÊ… A /O"ˆ _®¼£ƒ 9HQ2… H@“@•:@.4Zö†ÿÊ… A /O"ˆ _®½£ƒ :IR3… H@……@•:@.4Zö†ÿÊ… A /O"ˆ `¯¾¤ƒ :IR3… H@ƒ (4:;6*ƒ@:99‡:99ƒ:@.4[ú†ÿÍ… A /O"ˆ `±¿¥ƒ ;IS3… H@ .GG?<=BMO4@::97=<7†:@?ƒ:@.6H{€„‚e„ A /O"ˆ a±¿¥ƒ ;KS3… H@€?I/Fr‡‚e>2RH€ @:9B‹¨§{<656::771‚x5647::@.5O­´…³´¹½Iƒ A /O"ˆ a²À¦ƒ ;KT4… H@€2BB+‡ÜæßÛÕ¸e'LN@:8™¤TZvC[t_9=U[]”„8ctV8:@.4[ü‰ÿgƒ A /O"ˆ a³Á¦ƒ fR €=R¸³œ}j9>­´¢’€pD7–º¥“‚xL<.7BYZ[U6†2 4 A /O"ˆ h¾Ì¯ƒ BS\8… H@ 4W^SKLVd^:@:Š¢Ž}nQ58x¥‘€qY75c¥•„u`:>.4Wá‚éê‡î ð} A /O"ˆ i¿Í°ƒ BT\9… H@ƒ +>GH@-ƒ@8EtyiP788=m{mV:8:9c|p[?6@.4ZùŽÿ‡ A /O"ˆ iÀαƒ DT]9… H@„„@:88=:59::87<;68::96<<77:@.4ZöŽÿ† A /O"ˆ jÀϱƒ DU]:… H@“@€:99ƒ:99ƒ:99€:@.4ZöŽÿ† A /O"ˆ jÁϲƒ EV^:… H@“@•:@.4ZøŽÿ‡ A /O"ˆ jÂÑ´ƒ EV_:… H@“@•:@.4Xçð ò€!A /O"ˆ kÃÑ´ƒ EW_:… H@“B•<B/8CPQ RD49A /O"ˆ kÄÒµƒ FW_:… H@“;>”=?(2?:<>>;/O"ˆ lÅÔµƒ FX`;… H@”–“/O"ˆ lÅÔ¶ƒ GXa;… H@”—•/O"ˆ mÆÕ¶ƒ GYa<… H@É0O"ˆ mÇÖ·ƒ GYa<…IJÊ?DO%ˆ nÈ׸ƒ HZb<…KNÊPOO)ˆ oÉ׸ƒ H[b=…HHÊ7@O#ˆ oÊÙºƒ J[c=… H@É.O"ˆ pËÙºƒ J\d=… H@”˜”/O"ˆ pÌÚ¼ƒ J]e>… H@“5•89&-8ˆ5‡75/O"ˆ pÍÛ¼ƒ K]e>… H@“C•>C/9CE†FD†;=C /O"ˆ qÍܼƒ K^f>… H@“@•:@.5SÆÎ„ÍÐ¥ ƒ  &@ /O"ˆ qÎݽƒ K^g>… H@“@•:@.4[û†ÿÍ…A /O"ˆ rÏÞ½ƒ K_g?… H@“@•:@.4Zö†ÿÊ… A /O"ˆ sÐß¾ƒ K`h?… H@“@•:@.4Zö†ÿÊ… A /O"ˆ sÑßÀƒ L`h?… H@„„@•:@.4Z÷†ÿË… A /O"ˆ tÒáÀƒ L`i@… H@‚  0>CD@3"‚@:89‡:99ƒ:@.4Zôþ„ýÿÈ… A /O"ˆ tÓáÁƒ Nai@… H@ 7KB799:HS>@::88FE8…:9DB9‚:@.6Eko„nq[ƒ A /O"ˆ tÓâÁƒ NbjA… H@€!EC-^’£œ€N.KP%€@:8G™¬¬‡=6569:761‰}4656::@.5RÄ…ËÊÌÓ×Sƒ A /O"ˆ uÔムNbkA…8 H@G:8¦æäÜÙ×Ä{-DU"@99£™FLiBe…m<=_gi”ƒ9p…b9:@.4[ú‰ÿgƒ A /O"ˆ uÕãà ObkA… H@>?=ÎèÎÁº»ÁÍÇŽ,KK€@8JÄL686?{y¯|AÊœf“C€|¶e6@.4Zö‰ÿeƒ A /O"ˆ vÖåà OckA…8 H@'L'¬çƳ¦ŸŸ¥³ÈÁe$].@8QÀG8:9;pµ¨DÁM-‚;|Ä3@.4Zö‰ÿeƒ A /O"ˆ v×åà PdkA…8 H@<:cç̱ž‘ŠŠ‘ž±Ê 5EK@9@¿d15`?8UPN²±œ‹{g8<§²Ÿ~mB6¸¢’‚uI<.7C`bc`O†M O) A /O"ˆ |àï̃ UjrD… H@‚ +M_ZWX^dT.@8ŸŒ{kL57l ~oS66ZŸ“‚r[9?.4Zó‚ûü‡þ ÿ† A /O"ˆ |áð̃ UjrE… H@ƒ #2:;3$ƒ@9>fpaJ6€9^qeO88:7WqhT;7@.4Z÷Žÿ† A /O"ˆ }ãð̓ VksE… H@…€…@:858769::968859€: 67958:@.4ZöŽÿ† A /O"ˆ }ãñ̓ WltF… H@“@€:9…:9„:9€:@.4ZöŽÿ† A /O"ˆ ~äòσ WltF… H@“@•:@.4[úŽÿˆA /O"ˆ ~åôσ XmtF… H@“@•:@.5TÒÙ Ûw %A /O"ˆ åôσ XmuG… H@“B•<B.8AŽC D?9;B /O"ˆ çõу YnuG… H@“7•;<&/<:Ž9:;<8/O"ˆ €çöу ZnvG… H@É/O"ˆ èöσ ZovH… H@É/O"ˆ é÷σ [pwH… HAÉ1O"ˆ ‚êøÏƒ ZpwH… IMÊFIQ#ˆ ‚ëù΃ \qxH… ;ÌABˆ ‚ëúσ \qyJ…Έ „íúЄ ZrySã •íûÈ „ Uqz^á ©îù¼  ƒ *Oqzmá Àîøª… >qy'á ?Ýíð|… 'k{ƒSß ƒåñà<† ^|€ ß /Êãó¿  ‡ 8wƒ‹h Ý ’Úåãf ‡ b…‰’VÛ nÍ×é± ˆ -z’”SÙ iÀÍÝÌD  ‰ A‡•–‘b× %{¸ÂÒÌc ŠQ˜ŠyL# Ñ )\—¯·ÇÃsŒR  GŠ’Š€|r\L>4/+,16:?DHMRV[_cgkosw{~‚†ŠŽ‘•–Ž…{ri`WNE;36>FMU]emt|„‹“–ˆzsle]VOHA€;<€=>>?@@AHVlˆ˜¢®¼°\  o  2o„ƒ|rlf^WOHKS\cks{ƒ‹“›¢©¯¶¼ÃÉÐÖÝãêð÷þþðàÐÁ±¢’ƒsdU\kw„‘ž¬¹ÆÒàíúýòæÚζ©‘…ymccdefhhijklmnov€‹˜¥¦‹;  Žm =gqqkd^WOILT]dlt}„Œ•¤ª±¸¾ÄËÒØßåìóùÿÿðàÑÁ±¡’ƒscW^ly‡“¡­»ÈÔâðýÿóçÚ檑…ymddefghiijklmnovˆ‹J k 'BPONJD>BHNU]aiov|‚ˆ“˜£§®²·¼ÂÇÍÒÑ÷«Ÿ‘†xl_SIPZfq{†›¥°»ÆÏÑǽ´©Ÿ•Œ‚woeZTTUUWXYXYZ[]][\]L, ’ …‡Š‚ƒƒ†„ˆ ” ƒ¿ƒ ”*É*˜  ‚¿‚    É ªÅÿÿÿ‘ÿÿÿÇ©€ É€   à ˜*Á *” „½„ ” ‘Ž„ƒ€  ’X   #)17;AGMUY`eki`VMD:1'  %,4=ELS\dkibYQIA91(!ƒ   Y   !(/7?FMT\djrz~rfZOC7,   )2=FPZdmw€}si_UKB7-#†  ŽZ    !)07?FNU\dkrz€|pdYNB6+   *3=FPZdnx€|rh^SJ@6,"ˆ  Z     %(-15:>BFJG@:3,%  $)/5:@EJGA<50*$Š Œ × Š  Ú  ‰  Ü   ˆ Ý  #%‡ Þ  #,"‡ ß $// † á %05…  á %09*ƒ *„ ͇ !1<3… … BËJIJ ˆ2=8 „  … HKÉ@?EP"ˆ 3>< ƒ … H@É.O"ˆ 3?=ƒ … H@”˜•/O"ˆ 4@?ƒ … H@“0–3#(1’0./O"ˆ 5A>ƒ … H@“C•?D/9D’@C /O"ˆ 6A@ƒ … H@“@•:@.87‡†)@ /O"ˆ 6B@ƒ … H@“@•:@.84‘A /O"ˆ 7B@ƒ … H@“@•:@.84 A /O"ˆ 8CAƒ … H@“@•:@.84 A /O"ˆ 8DAƒ … H@……@•:@.84 A /O"ˆ 9EBƒ … H@ƒ (4:;6*ƒ@:99‡:99ƒ:@.84 A /O"ˆ :FCƒ … H@ .GG?<=BMO4@::97=<7†:@?ƒ:@.85 A /O"ˆ ;GCƒ … H@€?I/Fr‡‚e>2RH€@:9B‹¨§{<656::771‚x5647::@.85 A /O"ˆ JFƒ …8 H@9=VäÏ´¡•” µÊ—1JF@9CÂ]147]ºjŠ«G¶I2~r²_¥’2@.84 A /O"ˆ ?JFƒ …8 H@H,â¿¥’‚zz‚’¤Á»O2Y@:6·w}‹i½l¬¯G·J2‘~x³hÄ“2@.84 A /O"ˆ ?KGƒ …8 H@L-¹Ø¶œˆvllu‡›¶Æa*]$@::9g‘Ž];tŽpd?k@6\V?ˆpZ7@.88‚‚‚"!/@ /O"ˆ @KGƒ … H@"K3¹Ô³™„rccrƒ˜³Éa%_&@€:6557:€67:7::8895668:@.7AM‚NJ6‰37@ /O"ˆ !AMHƒ … H@N,©Ô·œˆvllv‡œ·ÃR)_$@•:@.5QºÁ€Àé‡#A /O"ˆ !BMIƒ … H@L/€ÒÁ¦’ƒzzƒ‘¤Ä­35]@::8458:8558: 9547::@.5SÍÕ€Ô׺‰ A /O"ˆ !BNIƒ …9 H@fR €=R¸³œ}j9>­´¢’€pD7–º¥“‚xL<.7?J‚KG-†* + A /O"ˆ $FRLƒ … H@ 4W^SKLVd^: @:Š¢Ž}nQ58x¥‘€qY75c¥•„u`:>.5PºÁÀÁ‡Ä Ég A /O"ˆ $GSMƒ … H@ƒ +>GH@-ƒ @8EtyiP788=m{mV:8:9c|p[?6@.5SÍÕŒÔ Ùo A /O"ˆ %HTNƒ … H@„„ @:88=:59::87<;68::96<<77:@.5SËÓŒÒ ×n A /O"ˆ %IUNƒ … H@“@€:99ƒ:99ƒ:99€:@.5SËÓŒÒ ×n A /O"ˆ %IUOƒ … H@“@•:@.5SÍÕŒÔ Ùo A /O"ˆ &JVOƒ … H@“@•:@.5Q¿ÇŒÆ Ëj!A /O"ˆ &KVOƒ … H@“B•<B/8BKL MA49A /O"ˆ &KWPƒ … H@“;>”=?(2?;<>>;/O"ˆ (LXPƒ … H@”–“/O"ˆ (MYRƒ … H@”—•/O"ˆ (NZRƒ … H@É0O"ˆ )O[Sƒ …IJÊ?DO%ˆ )P[Tƒ …KNÊPOO)ˆ *P[Tƒ …HHÊ7@O#ˆ *Q]Uƒ  … H@É.O"ˆ +Q^Uƒ  … H@”˜”/O"ˆ +R^Wƒ  … H@“5•89&-8’75/O"ˆ +S_Xƒ  … H@“C•>C/9A:†9:†;=C /O"ˆ ,T`Xƒ  … H@“@•:@.85 †…  &@ /O"ˆ ,UaYƒ  … H@“@•:@.84A /O"ˆ -UaYƒ  … H@“@•:@.84 A /O"ˆ -VbZƒ  … H@“@•:@.84 A /O"ˆ .WcZƒ  … H@„„@•:@.84 A /O"ˆ .WdZƒ  … H@‚  0>CD@3"‚@:89‡:99ƒ:@.84 A /O"ˆ .Ye[ƒ   … H@ 7KB799:HS>@::88FE8…:9DB9‚:@.85 A /O"ˆ /Yf[ƒ   … H@€!EC-^’£œ€N.KP%€@:8G™¬¬‡=6569:761‰}4656::@.84 A /O"ˆ /Zf]ƒ   …8 H@G:8¦æäÜÙ×Ä{-DU"@99£™FLiBe…m<=_gi”ƒ9p…b9:@.84 A /O"ˆ 0[f]ƒ   … H@>?=ÎèÎÁº»ÁÍÇŽ,KK€@8JÄL686?{y¯|AÊœf“C€|¶e6@.84 A /O"ˆ 0[h^ƒ   …8 H@'L'¬çƳ¦ŸŸ¥³ÈÁe$].@8QÀG8:9;pµ¨DÁM-‚;|Ä3@.84 A /O"ˆ 0\h_ƒ   …8 H@<:cç̱ž‘ŠŠ‘ž±Ê 5EK@9@¿d15`?8UPN²±œ‹{g8<§²Ÿ~mB6¸¢’‚uI<.7APR€QROA†@ A" A /O"ˆ 5dqeƒ  … H@‚ +M_ZWX^dT. @8ŸŒ{kL57l ~oS66ZŸ“‚r[9?.5SÈÐ‚Ï‡Ñ Ön A /O"ˆ 5erfƒ  … H@ƒ #2:;3$ƒ@9>fpaJ6€9^qeO88:7WqhT;7@.5SÌÔŒÓ Øn A /O"ˆ 6frfƒ  … H@…€…@:858769::968859€: 67958:@.5SËÓŒÒ ×n A /O"ˆ 7gsfƒ  … H@“@€:9…:9„:9€:@.5SËÓŒÒ ×n A /O"ˆ 7htiƒ  … H@“@•:@.5SÎ×ŒÖ ÛoA /O"ˆ 8iugƒ  … H@“@•:@.5O®µŒ´ ¸d %A /O"ˆ 8iuiƒ  … H@“B•<B.8A=9DJKF@:4/)# Š %.9DF. S   &-4IT{¹ßöûüþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýå¼|TI?3(  )6CMl´îþþýþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿò·mMC6)  (5CPÛÿþýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ߀PC6(  %3BPŒëÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíPB3%  !.>M~ëÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíM?.!  )9IlÜÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßmI9) "1BTµÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ·TC1# )9J{ñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿó|J9)   /ASºÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½SA/  $4FhãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåiF4$ '9J‰ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü‰J9'  +=Oªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬P=+  .AT»ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½TA.   0DXÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËXD0   "2F\ÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒ\F2"  #3H^ÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒ^H3#  $4I`ÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓ`I4$ $4JaÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓaJ4$%5JaÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓaJ5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5KbÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓbK5%%5JaÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓaJ5%$4JaÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓaJ4$ $4I`ÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓ`I4$  #3H^ÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒ^H3#  "2F\ÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑ\F2"   0DXÆÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËXD0   .@T¸ÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½TA.  +=P§ýþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬O=+  '9K‡÷ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü‰J9' $4FhßþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäiF4$  /AS·þþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼SA/   )9Jyìýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿò|J9) "1BT²ýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶TB1" )9Ik×üýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝlI9) !.?M|æýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿì~M>.!  %2BP‰æüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿì‹PC3%  (5CP|ÖüýþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝPC5(  )5BMj°ëþÿþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñµkMB5)  (3>ITy¶ß÷þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüãº{TI>3(  %/9BJSg‡¨¹ÇÐÒÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÒÑÉ»ª‰hSJB9/%  !)19@FKPTX\^`aabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaa`^\XTPKFA91)!  "(.49=ADFHHIJJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKJJJIHHFDA=94/("   $'+.0234555555555555555555555555555555555555555555555555555555555555555555555555554320.+'$    ""#$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$#""      ic08Ÿt jP ‡ ftypjp2 jp2 Ojp2hihdrcolr"cdefjp2cÿOÿQ2ÿR ÿ\ PXX`XX`XX`XXXPPXÿdKakadu-v5.2.1ÿ ž‡ÿ“ÏÁáK®Pš¿ÊA‚=¶[váÿ.vžGj¾ÞÆÀXÝdœ¸,ð’r×î@ûé|’Ê£Š¨¶òâÃ85ËAéRa¤T©aÏÀÔ-1P ‡·^2M:Kdôó€–eÊ •qdÀ‘H¿ô¬o‹oYXê+ÁJìfÕì\ËÏÁ${ŸGîñ£œÔ´)±/* Ê—ƒ:r蔃‚N_"w€ßêÎz˜œ2Hô¿ÿsÿI`/™YîÒš^ûž‰y¯?4Ôòxî:·Ô±£ÏÀô âF9ð=žDD0:,Û…Ìbaýß'·Í_·ÆMƒ:žö­6¸ºÊ^¢X{M7”ÞHØœæ’$N~gígÃí=‡ÚwÀøƒ7Q±!pel¨ÃSm ·öM~-gtsVTFRsÜGÑËòBê w-,ò˜ˆ³{ÎQßFþl^úÊ«iÀZ›?24Ì^<>0ˆ–p,¬ÍØ…ä [Ͳë;_„QÇ"ÉÓÃA»¿tBKo]« —-É{S\ ÍH%CL‘Çfš¼r>^Röùnöîä°vveSÄ%9Àà2†÷hfâ´è}ŒŸX[³ãbô7ŒšPÇàa¬?P(¼Qd׎ÌÃàñt^ñÓŽGG³iÂÊ_lµA[ ñþùÃQØq!¤/Ê F€+-²¨–×~ÚÜöäY#¿ g¦a£‚„aÞõð%¯¢aÕ£¨¥üœ>f·=mãï÷6´çš-0^ †m¤»©ö£L é¢O'XáhRh["r<=¢÷ð™Ä «†ªKwnŒÇà‚?À¨ƒxˆ° #ln}|3ý'ËP“顚ͺòË Š³‡ >°ŒŠùÙ%®9 ÞHJ©ª—˜qèÙܸRã?Üc’zë J»?oî0V)@3¿ñÄ÷=ùÄ´L­ !é0öà_ ,\¨NãA„DMWÁk¬s’¶Ì¶®£ ó˜3ïï"Ýà,ôÖùU8vãz@2~R]C%¿ü\7x'Óx"âØÁX?ÁËé’ôÎ?ɰ ˜‰Tx6iìíøU§;rÇàG$?€4+Ü%&Yéh‹hXܡЧ…âÎaØ4$mý|‚óˈøÄCƒp=ˆö ßsÑ»C!ðsuTˆb¦Ïƒ`ðéo¤p)¼0aêà}¨s Q¶èâ&þ^ÓT_m šÇádGádÁöÖÀŠÈ¿-Èž°ØJÀ&¯”µX'%þ¹‡M™"q÷ו'R~s"€(J9Jë*¼‰ï<˜q$£X¶ÚWx¡o³ÂH–glŽB² èjÁÔ<²üm¦A8Ö™‡~Ø5#S@ åjé¡ÉÍR”÷!Lv ßf!‹3|aˆ{¨ˆ”OfÄòZ…N2dÔú;놤±ñRh™e ùÔ±›,Hƒf`+ Ü Y.ÿ%ªBÃß} lÄÜÔ;]XO·_í‚FN*%Œ{÷N¿ÆŒ/Wl³ÛžfßH”†|ðJa6’¯ª§I¾/϶é/ õ3Þ‡òt3ú­dC» lÒnœU8¯ÊÇ5Ÿ¥½8uÊæ“V¥AiržÅz<@ pù³¬þÎ!)b?X£ |ëÛSóXCnä‚'`Q%j!šÈr~r&Íh~gÀ¿hC/0{ŸÒwJ`Õ@,•ðUµ&Çü,Ø! ¬:]|n"~-j`|ÖîãK”}^›,s¥ ¾vEi’sMz óÝÇ]ÛÖF¾˜ôbä§£„aû…‚{$JwÁH±‘Z<$²³(Mâjâ ¸\Î[óÄw|¾[f)Åa`×W:TŸà…µù/90™­¨•ÇáEÇáECðt†ÓÎÝ©:ÜÇ¿Y« 3-lPÙ[éxœIc¹Bóæôt|ö$8œ`û09uêÒ’â^XKUi6[K¶UëW â…º=`"_}"œð7ŽÂšWô’ì@D¹ÿmî"k§ÖèYÜQ»í™óz¶7ƒ[ÒS> 3®ë0û?-$tã5zÔ6†ÒçðÅ•õá1¿x0\ígô*aßÅ Zfï ¾FyƒìÆüK® ÷u逨ƒY®È¸–çöΜ }¨”w_©Âf.ɨñ¹nf|Í-½âìg÷Ðs™ÕáÐ*a ü÷…F¶#RÖ‹SÝìöŸxlÜTt7ò7‡Îk7†*<²Ì‹<}X‹ÔJpYžëÏÑx˜Ö&?&¥¦ý%òr•÷}k$¬=|.×Ô~›PÀW,æ ½áZã¦Ð0ýêñ¨ÔöG ÙÕêè¬+¬*åWÑeMଛ둟;I¨T#‹)˜Ë‹ŒÞ8ºÈ[‡˜ŒŒ:mäºâÑ\A¥Ãí¨gçUCð¤@óá¼ÉñG•uÄHÊ9oGƒ,|wÙ–DÔ¢ey c<±”<Ô(V ÎI­J¶`Vâ­*šôíÄKQ– þÉ_|/Ÿ£²Õ°ÙUbpî¹h|yؑ˓cA·ÙðRÆpé!Ÿ‘-¯I[Ÿ¿Io>þÀÇgN!Eùt¢×Ytº«¼&¤úú&Â`ÕÆì#‚M Jj?õÌþŒlâ>aLJo®†Y~?-À§RŽâ’‘Y¥qM×|îSrŸe·³?âÿ¤žÆÙpYÜw]š€å‹ÁÞ»¡{5< 7P×.¬½Ç6„Æøq›§xp ;¿òisðP`#ˆmË&œÅГ•S ò 8$¶÷‚âƒ,ÚùW‘ÕR·z±=Ù«èàð|œN»'(£ÍÞYy]ƒW=m01®ƒ\‡o—µ »+:çp~Žï£ÛOõÚ„æÄÎr7S@;ü,÷Ç,9'Ib]RŽnPòü]H (ŸIþÓøÔpò¸SŒÈïùrÏ@ÿxàñÃS‹H»z¢úçqÁsú©ûšÐtsSZ¯í7yÀþJ­å³~Úùœ uÔ€¾Mr¿Š+ùäÙàÒ+é|°JP*\vü¢ÃíM‡Ú“À´¼¿¾¯ ýÓ,KS,l‡±qUæû}UqOʲxÚêåšÛŽ7‚¹U5SÇà_/Z!rbâeŠ ±ÍêwXt™Ø†X5½ÉUÍV‰·ãÞé–âns~ŒäˆóˆÁoL|·M˜Í“ ¿Õ#GþkD-5¾ôÀ† .|€ æUÍ‹*$G'Ô×·³;KÔFÝC ·i{›Ä=%Âc &’òºÖ±Õ„áo·úÁMm’çn²ÿåþÇáÓ¤~1ÃðèÇç> [tí¤øû5ù•/87Bâ/„ûIA¦aÊбd9{Rç{»][5Q;öε}ƒ]¶÷߬³¡A3-žˆ³&½æFþËÁaLÊ“ áz¥µ¢yƒû9Ȧ‚ ýõÁZÿ!,ãÛmŸïèÓ5™Ƶ¬¢} -¬/«Q›êdý­§3ç ÎêNŽåBm)¬ÿóÆ0 Ö€;¼ûŽiQìAjo`ᔦ±óŒèÍÔ¢=W‡ û6ϯ¦–£2æŸ$yKЦþ®é.¯ å «Úô€“áù“ܲt‹l ¶B~Òû¦þIæ´'¹À㬶KxǺî¢4H›¿Î£šƒÃ¢¥,¤#^‰¥Äjö.c†®“iÅC ì'AÂÎxô+äEt#qW¼*×ij«sƒ ã±Xx¥ÐêŸÕ°€¢FNUi4~La(Û“8§4û?,Ëy‚ÙBêcj¦WØÏ,öYçÀ é;ì=Så£`Ó=©}?ƒn³´Ð¡k÷yÇ›éD§øz5Ó…ÈÙêÐ>IY^pªÊS6)zePá8’˱,A=›(Þ:Âv}ƒ|ܹަc`òyõ@dÔ˜@¡Û+¶E&ßÿ7Ê 4¡ønÌõŠv#Ö©Jé—Yî{U!Š‚mâÒ“Ž øàBº¤rçp$¤?"¤‚ÏÑ3ÑD ¥¯[_\Æc¯ÔVPVm-û.?s$”k#3j _Êÿƒ ⛫Xþ>5o -Õ|ÉÊ^ÜŠ9ñ»öûÕª°Ëu¿µS_f1wÑx¹.D©:úG¸x <^c='ðç}ökÈ;ì´ñRZW[ø!DŠ-­ È¤òÛèpT^œLö ÕísO#¡Ÿ Ö•-x!jØÚ¼âÐàz6öÀÝÅ_ €» <gò†·£±øv4°Í$cø–dѪ†jy½Xe®X|³I"^ÐDó|b‚ŒÞ­gÈx8‘È4Ê.]k§&S9Pv.Jð-Ü+Y;Îy~ ø™eMž¶…[îû¯]£äÉYk-Ÿ"ŸÃ“TƒUs~bé¬õ çN`G™¦¤Ê¹ùtê$.àR …ƾJ/£ôêG¡tżI3y[!dü¦°2Ô/#bm¶1Ví6X”ÅÔ6µ%àFÁäéß!`ÅQ»b…v5Œ£¦]SwäUåß(íË]7 æ¬ôíÊ¥¡»¨p;éJÞå´yÌnS/kbãÄ,KÇgÙ4f7SìŽ8©è¯Žòí;¤ý•kª ²[±ŸÃUÃa„485s[f@ï–tô×ë§ž·¤£âSk£¢*—+Ò´ÌoÊGÃQZù|ngœ«î;o9ñuøN5$þÔ-n‹}(^íë{=¨ `jÙ’Xªµzè0øÀÊ‹_hyœÕV½[;¹vª¼š­Pmgü*ÆÍþI0¦xøÎ)w/;Ö­Ó'ò&V»sê14ÕNäzFdà)[HV¿”+^H‘£‚()îr"×ÃàZS°êÊ3Új/î‘‚¯Â@…e¹üO„¸s¹\²fòÑm|i½(©O@œ½À®±ƒñe§ËnðÈ*^_Êx‰a<’êTG$P-kæsÄG¾Ì©âþ%"¾Ç*GorŸ¥åãòü‹’ܵ¥Ôi-‰3²mÕb•Xs3˜ì·ù¾Älñ.lSú<"NÒÝfåL-Ü|V¤áåy@dèÌ+ð!Ïò(ë©âR bœRS!ÁL_Ø¥©éø”6Òh:»ÃüÿKã<Òò.ó¶™®¹‘šüîÑŒ+R7¨Åb‡'[Rà:*Ðf™wŒãºÁG9ý7U¿5ä».p3uÐ-÷”´tü¨†41òdj©¼wC…ÓÂþ–z³-ììîˆ#­{výdøMÜÈ%È"y,p«#Nòoá‚vH<ûûW…Y^m=½L\R1Û5"lÝ ßÍnGa•)àʾ܅@Qzô°¹ -<ÛàúpºE&„?Ó…]'±~€©’}¨Õ0È[MÌòœNÈetÄT¯Ãº;T/¢ƒDs˜™Rˆ1Vž…f¨LÒP¢ÿn!ñ¾èà£tÆI½w€„UÛ¾[²—DP`yÞH,sÞ.¦Ñ‘\¼À¬Îöl’ßbo¡"MÂð4Äz¼pp̧Ã|„ó ¡ß¡½”Htßôw‡„•Œ†e–¯­¡"ÖÛoyÜÂÖ==šð–„íêòùg<ᙩé˜ÞÂht¨œß¨_/Æ -9D蜮§‚˜$¤½“ Gð÷ØÃ„îØ3v®z)6”)N Ä;Š•ÅœÓÐL¤71­¸•Ÿ'Ù ÍÇᤱøim¸À¦> £'·"ܰd yÍ[I7m]ÈTÌ#ÞItá•Í%²9A,Ì)ùaÍl3&ˆÚn͈ (–=Y™’u@7O¢õ â57|–‚‡ÛÌЄÙ)ñzß‚ü$™ø¨3Õ¥Á9u‰ biN¼¾Ñ×€¥œË ØÞxúTÌ~®÷g;žz‹ˆ¹(…–g ½*·­ÍFY*·8äRQ6Ä>ÒŠÀüÒÄ íÁ¼P+À÷ú$­ãaÕ·Hçñ/ˆª¬Í·X@Ó¾çK„rxé²D.¾¬÷£J•q“ýõYj¨r¾TÖÕhªs ™+š’ ªçÞÏú¥išÉ#1À±IE×Ïæð`˜Ó2Æ7Á‡dtÛ­6ŒisI°ÆcSˆvþiY‰”'¬L¯ÙaÔ”÷|†ØjÖ '69Ç¡T–I˜öSÞôN׆+‘-c1±DÕšx¿æR°¡âÉ_ý÷\};` @SâŸÀîºç×»Ös ç÷’–jôástÿ “xo®½ÀÒ«žô® žÆã&O6Zutƒ>èq’{Z=†Y}f÷Ô‰€¥¬”ÂäÎÖvŸ'¸ª>GΤM<éX•Ǥ@¸G9SLp€œQjˆQ¨…Éó}¡úU:««‡Ý’ÓTËd/[|ö/¨$†¬U8cìæÔ9#Q–êÈËÁ€?"ÈQø:¸BLk€œâ{UÈT^’#†w´ŽïâGAp?#|“¢v ú¬Öæ˜ ¹ŠWZ [æƒûí]•îÙ t.;ž2ì8HÍÚ¢+…²´r»‰!ƒ2î‡IàG|O¶üà>½æ§5·a*eÀÎ_æEŸÍ´›üÕ¨¿Ÿ`"ùÛ§86×é =Ÿ†ˆ?„Ôà{Kí»t"Á”aÏ/ä'œ½Šô}çÇá´óóܘ~ÌÀ¥4 ¸§-OàNÇìY2[êÇ„7ÇÈ~Ö$ÖIð?FYgINÏHê65™Øƒ &ÏÒÑ_‰Ã&¹‹/}%º6Þq£ôgä’ñfŸ¶-Eçº8¿U“+ö¯ˆä‡ÈÉK 7Pü÷áãI ¦öÚû©ê!†”þ[éÆnsß|ÎtY_ À˜}{˜øõ]÷xö™eú»;Á=W1Rsr‡î> 2ù\C÷0 øÜyì[=‘ê­x œ«ªü/žÄ ðK‘9uT$ÍrfûYc*O® ÏÊ4F1-~œa°:¤ùš¥À£î‹‚Õüˆ(´æ¹™C¤bÏñ¤Š))o`|ÊNÒîÚn)K6x©3dh~ŒJˆ55˜{ÈÊzŠzøAjëœYƒS4Õ#‡ófÊsÞÚVm¥i¢Sb–( µÙ¦Û}õ5Ýw}¶ÁÞxªBrÅ3ÔBæ+ù |±+‰üW@'ÀûîAU¢ç³3ÑpD€HÃ3’{´Ä1YŠ¥K"ŒpŽJ ºí :"r«ÑÍÍ(ÅjÎðh6ž»ŽŒÕÁ!@´ Õ™ÁÔœ!{É•šgÕõ÷«ÙÿZ‘_fËâE»ÆU€þ¸æ$Lô·ù "ìòSÞpߙۿ·ŽÏ€§ý‰ïlŸO;¤xË{YÉR×üJŒÒ§ª {„Ø]„ï:»#ì\±×ö.Ä•&8<å˜oÁ1’Èù ¬þÉ —°¿ ‘ù?)Òê#§G³²Ûªál§Mò(ºeª[±TµÒþ·=½§¶–¨ñÛØ†rÈ}®ÙÍ4t÷_ÿt ›¢þ«Ë,–»AOoä ºŽúYò¸]·hõDCÍÔÒ-ÀiŸõ\îkl½m’Ñú?›šÕ¹™àDºz‹T¥¶R´ƒ¼ÓŒ?ÈÒ÷Cuv)CòJTjô‰6¾øU|lê«BC.’p5ìÉëGƒ88Ò4ƒÖk—àI1òNÓÊC¢éœá²ÃÀ Xîgü%Ù›M·«3”b¼‰\Èš$ ;ã×ð)ß)mLÐ/ȪeJÙ¡<Ñã4O¯s4M¯òõ#¦´ì]|ãdø±ê½g,dï?ô{ر±žWó²ãšr´yæoKç¢àxNú‰O:÷‘½cÙ¨žm½½ÀǬnÄÓ{‘ÅÖA§ä1ÀÊOd­«tÆù”Œ¸¥\/úPÿsÓx^ù‚¢UAA|Éïñbö¶ÃÍÅr\ùÔ.Èêüj}ëz_bÛÙŸdÖÓQ’qB\«Ž1ÎX9IC•t•kWHhåùp@HØTj³æ´/äÜüÒém´ô šÒ¿|ÞÕÅ=5åÅy¡–êvPSS4½É™˜V±Ö‚§_ð-õÔ+Øu¿ž¶äd7/ôÐ耿² {n@> +Ý.,gj®Ÿ¿Åm`¾L(+7o·NÎ;š žc“i-ùÛþPèæ¹°+ T;Û¸⯠LéùÇÓ¥@,Ìýeê¾+åƒ<™Íΰ|°:’Ç`KéÄÀ“~¶.*ÍP>¸lìÝq¹ûŽkˆš)Æ¢‰3«½äÞãUÍzhçpõûÔmQ`»ñ;΂Xqøàz¿Q(Ot•<³Í £aCí‘ù‚À[KRÔ[S Â{%ð›¾CHä4€¡Ãí©áöÒÐü@ŽWXÂt‹?õÁ.C#ý‚ °«kë=9£‘Ðr¡JmÒ4±˜/M +SŠè¨lƒ/AßÀÉ‘Ûy¤Âj}žÕJJ Îæ+»R»ùÇ”í7&ªaè“ ¬§½ø¿î qÒÈB!6S¡6œãˆN¿£ ê«w.ßA|¨e4è[C~ŸÍ=à)\¿ºZºi)vö‰*Ž?Nö²c±ñîÓVZÊIJš–7ð: 'õnÅE»1(­O ù“ñ ÄÐOwPÛ¡ñzކ¬ó™Ïû…e‹ÔÆsóKG™O!¸¸»^%Û˜ª7û®'íâÕ=Õvøò½S6 g‘÷Šâ!{ú˜âFœ‹²Î ò¨üa5¯5w|²®”ŸæòðˆžÎë5pÒîpš*.4Ê¥ ^LC¥$’I$Ž” /m;Ž8î¯$"ñ?ðcPÿ«ëøæ4µß§ÇЋ”·õ\(€Õ  Öµ}qªPèù3! }+#`~Þ{„C?‡BJ9tùó`ïÃîÙÎô<-»J{,ÑÒöâ&üóY´[Çá퇴l~ `åƒg@©ÍÁÑTT¹nÕ¯»œä‡ÿÏêž8¤e?\ßž>ëüµIbÖ9Á€#ÌõË¥ŠÞ¤MmÉe1Î_Ò:âRuŒ1²/Ô`k¹¶\ M"ƒK­0å|1ÒÑ¢c®íd‡ÚŽ{n(ª~ÍÁˆvu!øÁG\Cº“I Î™é¼§¶v_oÊ$ƒ÷EŒ=^§Ý“LŠ%ûó .¤­FïöuïFUÝÙç{€7ÂD·Ë&òÜ5̘4a2c pdîÁ@Ð1#,é\€7Et^Á›¹Ð·Åißd$jê]߯¬å¦áÇ×C£&ädô›£ô˜ŠoäÙÈÄ5që§cƒã,”GP”‚™Í8 Óî¬Ý1ÓbáÈð¯tc%1 9Ù:iËugn€†uápÏßgãÒNK;õ5n—š×ÆyEhKÜ‘í ¥ŸIH‰zýÐnHpȳzO~„Ô|ÚóŒäàþ’‹ ¶ŠI9¬ý?*Ììë¨øNgoœ‹¯³ÌUàø»x80e†œØm?œv¡ûô`âbN3?¹I·TAiiO(\Esqêâ‹à?]’‚8[[ˆŠz|؈)Ä€p¾°–[7¹åy€ w‘Ô[û²AB˜ªøˆòBn3ñ¯‚Œx÷¥ét&á7!ÀÇ yTe•Wè}Ñu÷å­ˆÆ_ÄL[´—µ%’Ç4Ü¢¾òÿ'¨ÇàΆœãk>¥*pJd‡½•ðoÓ;7¦m*8l5 9 ›’K¹|ÛÍ©"›mO§Ç„_{M„ƒ$Ì𴲿ÁfŽ* óÜÔX:n%šõcÊ%m¹\С°='U7•ú³ÞëçQž:p¯¹§ÎNŸïŽÂ]•Ò“‚—|NY™3øUÔ°O´Ò—Ñ¿ÜÞÚÛ¡?ÿØ_š»W öüL=h;]=CIüErm¶Õ%'ŒY ÙÁ©›o+sPp8°Ù¢p2Êͦ`áÅÏÆã’»Iß+Ÿo$:áræ.ý‘×ÜçHèvÏ™qQTÌûd-¥oî~ÌóO?ËsV½·Ižúz'É;Bš¦>%àÀäIý(àn§ù©ûäHÿ‡ãl1»[õÒ°;rÇk.;^céa¶l}–÷Í}ëÞ!yeΆ¿ƒëdÖâÞç%ܺæÐLÆøf|Ò˜!Dõ>³q/&FX÷7gÐÖîí Ðá°#¾A¡ÔêÈ-fH9=guý‘3«ã‹c‡á4ÙÞ+> 5c½a1¬„?DæoÚ÷¹¾ìÝúØ¥“RWøzÉv¤Õòzå/Œi?†C×±7ÁH?*ÁQ|ˆ(…¾ážÖPŽX¿w» êþ¥‘Ô)ÐØ2±%²4dž„ßöä ¥ _·Å?óŒ45Ak2GÉ~BDŒ’õóhíݼ!8©—>ü?¿°×t*RPЧ“‹ cA°ÐiAoÉÙT–!.äéßqÞ3Ãý79.ç›-0 Œ4ÿ|@·â6åÝiø™Ù´FÝ6åC3œ|ZÒ¾vX‘“èÒÃó,²@mY°¢­õ¶ƒù¿ nÉ7Üz/tzeY<ÓQtš`â5?AÍàcÐè¬\ðÃA]n;ÑA%ià‡ÙîËQ9kãQx!ò AßÁ[‚!Úfaõ˜Õ>ŒÝ7‰ìÌßc¥€.ÝÞZ+>ÆÑ…À‹ÔJ®÷Ǿ3¾€!þRËÏi,~Æô=2XZ®…Ò] ¼”À?„) BiZÅ/q‚Öåí21+³d8A=KlËE‚)Núrt™w´[æmФðêTh-rH¦¥¬aXz‹jq£dikhœÐ„€§h È&Ç‹ûÕõÙŠyð "Ýg´@]û ý0ÁŽ PÂÖl!Á/'à…•¹Û7Þ¡÷êgç#E7¦B ×µèH_³(=hì™Åprc1ÕòpR– ö°ån@ ~,òÙaÝ78K“0\&;I5ÒЃÈ9>Ë%MÞ‚æ”|[«A Évp‹Ú ypŰbúë†SÅÁ­X]£`ÓÅ]ðC`êGœHcËßÝ•5,dͷž˜Ãˆ/fÎæ ȉõY‚H°Ù÷ÝUÃh¶K•¡\Øå¨P‘õŸ5Õ‚r†¦«³U þÚ½ªc†ÙÁukTךæî-²½þ ”6Ph™»÷h7ì?A×úćøJÿhvškeÙ†ŠqÀÌýJn}Œ?~ü4Œ5\jñ1¥í²¢‡R]>ÐÉþT¦aUؘ9мa®åy-Ï}p3QZŠUQMOž¯×¹äú…ûÕ&Êv)útYA(­XëxÊ’–[Étýãj¸V¢A?ûÂQ`ô}yIíX¸¥ö…'Ø»PÂ"„ulÁ¬ ½=ÑÆÄ,RÅŸ/UAc78,45{ >³(…ÙÐä çø·vk3Øãì tŠ ¦ D˸$ÞAQ•nxçoþ[-UÙJÇYH¸­"ŒL$làa÷­·"An¶okÏfZJŒh'#Ý8Gh¯?éI‘•Ñ3qitSTjBà‚ú"ö}þ󤪠ƒ¸´‡#I¹¦ü®Åìj¡l†±haZ^Ì-›3!2½ÀÆâÿq¿³Ü§ŽÝ„ÐVcBtÎÊ.jjYÀœÌO7DÃYlQħe !g'~†»ÃŮμÑÂx–ÖK”ñÀžU|¬Br×Òº·I̯»?¾\1ûñظ›p•N´É5ͳIIxŸpðFeãâ`Zi>÷*áÛ”ÅLt~A’Ñ¡'ñçóYº®8²üD—¿ âDËšòš Óø8Ó8¥êa-ªðI-YoeÃ9°í6¥›ÞãhòÓrçPÐ?7wÃW3°qæÀY@Yxò4ÊN8}§½xü…ê$ƒ0`žC}ê˜j|& wŠÿe‹ÖëÆ’XÁ3M/‘xG+ù5ç[Nn‘#Cy>=‘ÎôÒ·ÕyŠR>T³žOüÌŸ±ú¦x_î„6?«BxïÑŠ"€>âtó˰ªùùí<x@Á~éduÊò›ØÎŠ› )[ÖoIÚ¥])ó¹Ã(„Â3Ç(*U¬Nà¤C 5Ú!lƒà‹ Rq^Áo¹)¿÷sóÔBü!ÁÀ«ÝäÔû2P´ap[äÕ³Zi™–Øa}©Ó[ÓUh®ÿV Å¢¸yG’Ìæ8%id’KòFƒðrT[‘5)BãÚë`žù<þÀ莩p*»YƒzÞÂÝXÃPf¼4Æð%¿*ˆ¶ÝJ1DžHÙ ¨¤4¸ÏäŽ'¬8*j°\gÓˆUdŠl‘Þ€KQU€•=pÌÁ]‘Üct€©’Ø…kñâW\t—"ø½ê’½Ò§¾B˜°‹ÞœNép±¬!ë›”à²!;!pnIŒ¨D+¾MBUáX꤬ 9 µ.kËïXHýzáX `èÄɈ¯´ÕÝã!]7-¤zlš3蜒é um˜».*Õ\@¶;9Çû‹z+'=Hæ.wÈ¡ðÔŽ€ßàœ¾O^JŽŒ#´‡J—ÞOîùèàFŒ»Æ2½ j´çd¨'3ˆ1ÄöBHU4Ω!©‡éiÄ~ 0QI(†±?ýlN›UÔB–K•d&Ìs‹è Í˜×x3›ÖÛÌQD‘e pWÒ/ð*úÈ–O¹kÅÕÑ…ÊÆ'\ùfh¼‚Ý$d8–)1uüz.=²#„âAjé™ùüÕÇQÈ”˜g@#ä`^ý®û½F¡W–ÿf½3 á•T?3‘'•;Ö"fÚ]¾NZBùæ*õQG>l©nªD6ùæ°dÒ ·þ<`ÂPKœab³§†8̾œ¾W„¦w–|‘¹É@ÅX0퓃æQPf{ÖAøê>ó|,+¢’‚'SeÊ Ó÷Åì¹}b ‹½æxW=<ãn?ÉZþ,wBÉqjPÍÙ„î)Ll4¯)]Ò£ðxÖ¸9O9QôKR¼"5Ïþ6ª¦ìcÓ&-ƒÈ¤O U#lسÊDÕæØTÐVIsÆaÕ')¹çS!ý©M«¿‡>O2%Ëh¯/þ†HHƒð&T‰Öš:¶ùO¢0Å,%[®CB+a©M¡I·3ŠîzÍ®1'Á^¨+hRiWÕ¾þRR™.ðø¡ÅÆW(@"ÅþZž§äê¤Öé~ü¼õåfaEÖ%B3¾–>Žê¹7Ÿ"h¨0 cZø<ºÐhuFÕ¨<;* B™9„BÑÕ«mªè´Áþ¤ ž¾N¾ƒQ;.ÄGÜ @r‹I*_Uɰ¯ÉvZáì™3ª.KC*GëõŸ¥³]ê/âýtxu. 3Q2£zã:)Ir­£S‰®Bå9¢ú5놫¡B‘*›QX´ŠÊó9© y™œ±5z$8“0ö.}-£Lù¢±4Ìíö¼ó2ég½&Ͷ¸šTNž`ëŸI¦ŠwB0l%hÁ"Kêß vt‘Z®€QѼæÚc‡_¸gžÙûk Ä .Ì*4+kÁRÚ¼ :âgžž ušM,¦Eu½Oë Ù?ÖR|¼Mícx‘;Ü’t˜X½‡·…ßseäz¹æñY‡¤«zÃþsßÜ,ÅÖÆ1MÓÂP‹ÁOÝ>VÔ‹m@TßÀÑ瞌˜18ëªö6¿×_ÃHrv!f¸Þžò£Àþü Äåäa,-ugÁ؆µ/>2%ÿ$hÄ:…ÿˆX49‰IC¼B€á}–nK–‰T? IE¹£a8ÍJ‹ÃYX_A'Á„ˆí¦¡Ÿâ^«¦êëB¼Hï‚.ÆÒé ±‰úÕœ"Cè½Öòê–]š{j.UXyov³+Ë·+ å¿ýÔ’5õcšZ_ .<Þµ>^–åÞɱH'¿KºV?/1Ýcuo›6¥²=W&ä‘kkñ‡.E´®G¢¤Xë;é`}_P¤Ÿ(p`ï÷ýÃ;Ì6†ÕòÑ]uA`²F*ªžF¦ ÈJ ÎJ€,ðUÝnãsl•‚2ßKš*<.m:PŸ×gXK¼(OJdt¨[ÚR¨#{Öªƒ NvÂL¢&ñ:Rš Éñ å§âj¤G±±cÿp:/S|=š.­0Á;v¤*ú)îà ޖaöíÈâC0ɸcvƒ3x+´` óFræ&ª èI½%þU@²s.–p8šCgŸ:OÊ‚±ÇJ朜|#çzª%6ðD!|jŒÜ4'šî¼ŒD¸‘þ3" [涷㊸bÒfÄðpL)E• ‰E,‰ðÜ>£Ëíü—­FJ¡ƒ£,&ýîØ?å­—€X‚O¢lhà'¤¯¤³VM»ýÓå`¶à`·Ïê*9²YöšTû£ÊþÈ„¢GSQ¾”{Ò˜!zß5ÖÁ,YAy9¼Øò°MI×MV£O€ðÂBí‹ JÇ£š¶¤Ó«ˆÙˆÑGgðŽÿHŸ¨ê3eá6Ï'FjàKîå5澩¾JXk´a €$‹4Ð-´0Û@ÂRni¼šy5¤ˆ¨=uÿ]$ñTLSs‚åö"ØÖŽ}Éy?è¬QÛ™®'ÔÓßi³ õyúr"!¾A·ƒg¼Û}nlëN¸Ê˜pýâ™]¯Øa/E¸²½8)’¿MòÜUÃ<ïÓÙº-ë$‘PÿVéèyÓAþ¤° Am®*V¦š8˜åñç÷v9l5SÖ2\Pàÿ|n)Ô> BŠ%³*ÞÜùž^~Ä,YSác䲨`nç‚tû‚£Ex‡¸NC}€m¡ÔèÓMa©Œ¿½Yº[cÅ ¡ïØH·Vnj ÙíŽeÓeÛ|’}®ÞEnÿ†ÄÐ"ó¬o>ÑÅe;Äçˆô܆um¼¹ƒ4¿Hl™~µ$Gæê”`=Ø# |nçú÷E}~Áeº™!fã‡à3_vo-ES®XsXk‚Õˆv¨§«·½=]ÔÅÏ­ˆå³*1¢2æeK+)=²<”º»aúü–€ ÷Ó¬f©„Eõõ¾IëkŠ;ÁkV&_„s¶K¸þãsÚ`}؆2€àû7yY7}>É,騈©Ç]~­>§á@Èé5Õ ûŠ‘;ˆ c®µD&c¬¿ÖPæ‘ÂâæAõ•~I0M뛟^Tn…6mÎ,ÝÃBÛÑ…“ÿ}cÀ¹ð»€?h•îJX¬É3KŠ d‰´ÀâóU0½ß5›V}t'dÍòé¯f;Ôjñ Äß”˜PŸ&Ì^‡‡ýr]ý¾Äífè÷´l¡oÕ1,Ãe(M¹Í–ÌsãH@h+Ò©;<íë>vº7ŠC3Y_¼Ú#€¥“[T5fñ}~æ²JÀ‡–T[N[Õ*ô3òÕæÚ›EŒ_P'B tŠn\ǵôµ)«z4ÉVŸûö\#Ü7ˆSÆ1ŽìH` pKŒWˆñuøÉzGC£rrT d0è«?j@ÊY¡LCwxΪhÊ—ˆñ¿µ;ü„Z²F G/V½".~U£“ß~¬ž}âŒmdþ†^¸À5ÞR ——í«$"S$Ÿp^)Y„lü«FÆÆIÃ[<…0ú;}-uJJK=8è·¹á$"þxŸkˆ#’\"Õ“™ýÜz±„\ Y¹CiÐMƒþÖIY;–…›qþö 4P¢\G›Ê^—èîÔ~É i]o«a‹Põe»!¯—GC…Äôˆ#“„² +­’:ýA†GUÎïàÒ^kï"¡w•Ku/z/Í?D¤”ÙÚ¢¦-|IÐÜ6Æ&¶m(rÙQá÷¬äfƒÒð"¹XóÊK‚Úêm-‚]ϱUyüµ8§V{–y’Ùçë*Ò>`ÇECþÐשMÁ›¯ JñÓkýu<|·f´æÚ>v­ÿ…w-eÁ…˜/Aí2É×ûÑòW ,¹¨ª!n—î2 ܧÉý(ž%ö0“øGC‘¨ÍF|I[ºxX=m%rš ‰Ä4¦'³%lIJ·P"&B!ì ˆùdÞÓÛåü’“B¾ŠLv \é$G˜ŸM(A²MZí|Ãj NŠ@ ü~ÍC¤XR±x3/ŸB®ŒØXW並ôŸ¤.ñ`¨Cð!Èe+áò’›%3r \V{Õ×ú_]Š„žúàÁxœ ›ƒY^Vý\1ÑÆCáÒHë×nwÒow¥­ãÐý—·ÉsLègnCÏSéoæ0­Ö0&þï¥T¦¥qûs€³Í2õmìeò€ô&AN¨ï£'E¨Ÿéø%x©†ù‡‹9òÆÝ›gùhš+¦ã½©yöo—6;pp­“o²:Î(I´lëÕpâíÖ›âºéÊÇ!HÂb[T[‹v7ò•¥ÛGÜH¢îuÿ³öÇë6 󣌃œ=ƒÈ’䨄)Ôè ã¾øÿ Hž$ºŸpº+²$¢ûž¢Ã_Ð.ÎL£¿WéD¬D}@¹Qò[L“È ½àw»¼_†F¹NÝgÑMì² 5ï2Æ\oîv³}RG@¦¾¢äkÕ.ÿhfŽi&žOžâŽäM"¹uÿ ú'SÁâ¹×îáÆhŽGŒ.pbœk9‰ÁDdͤv*O‘»qJ®®âfû­JE“kØØLç\ý²f˯+f=uã0M»í(kÞ|y‡ê9¨>¦ä |óQjv©C[êš” Of±©²ÿ$‰á¬Â_l„¤Mv)ê»ÀŒDˆamx¢2”Y(7¬®N=yèuAÕÃ6@ áÙ •åœX>(,Û Z ø Ê$ŽÐW*L5‰ÉíLïòò ¨®âsñÝ»"®ÐjÅŽXbìšÌÎØ]Äò¬qH~«lÍ óà 9ó´¿ÚM#,ôÜx¼ì"ùÒpÔ¿6ë• ¿ªãظ½Ïfô«…]i!>üÒlßžq–J®G¡ ÜÞkJŽPmF©lg &³z$…ÖE³uÔ Iþ¾ˆy7íÔ2;ª ú¾}‡©T,ßë.ßÃöèû“ª(QR“Àñ4ÿã[,ÁüŽ÷=(Òâþ‘ÀVC ¨¼õò¼ë8Jÿ!ùL6’½GÞ™™µ[ò°6Kô뽘{9fÛî›)+[^¢H‡µmäîœë$WäÛ£ ÿi¿Až¼2CKcß|¢p_$5Ý~ÄîQ±M ®u IfLŒì$‚m‹ŠÍ.ÀÌ$© ä ÌÇs¡*­6G-‚R»±õpÆC1Ÿñî1ÂĘ‘K¡Ufe'ä¬WúÕÙ3>kÜÑÅFà &—8w¾ð™4è‰5›¤ÀË-Ær®9¾b»L©õ_–{ÆW€`WÕ:å”2Iµ:n_*ð ‹Iƒ kÙ¢˜Æ$zžÑ¹0´U:o(ˆÒ7`±Ç„²ÁHØì6!/«xvQ<kFIdþ×ÙyW”‰¨J„!ùO hcb j”xÚ-Qìul­­ìÏpÀíÇ4€;æŸXÜÉ®M('ð%xO™çàÉDÃÅj.¨+#æA’^‘D«Ýð3k!Öã}ò5.c¨B'“‡µ[ˆ"J?õžm¨ â#~àä H}˜8Ñ’GþÕ}Ù÷/@E\?¼ó0FÁ÷9x­‚ ˜û<ŒÔ)„ÉJ†R]§‚¥UC\7ÜÝ«¯ükiJ­£$àgòoî¨ëTØDTUÏü¼('‚XÐFCìÖùE™‹£0z_D³€ß[Œ° µ5vÑZèa5ß² Ú8JõÒV¬ÝΈ!ÉIÉ>¯èqp1ågYÏ}*´<Iƒé©äÔ¿žJìÎè²p»U•É(ZޤÍ+áôûÊárLú °]uÛ£ïØñœøŽ`l›a0ffø,ÒH››Ñ¿˜+˜¦z~eó,l˜¥Œ-J `ö½†¥,Hòq÷_MtÕe ÿçáÊL8è‘KÑÄ$F…T`Hži5vÏÄèèsIòœLYAZZ8npA ü‡G|ØÍp¤·ñkßKôÛ¯õ(ó\»)ÙOšKåÜ„DÔÁa'$¾|Ï­%ßÖõyBP ÀRŸ¶Ò>íkFÜ£Ú#ªFNf‡™…½M¥Lµ† à ëO¸SÂzcœSÖÂpg—|c[”U‹µÓ,Ë·†Oe|^ãt]X­¿Ì}/χÁÉ÷%®}t ˆ6én2–&¦Í"b3ý/=¸xVª«È8¬¨ä³Óqˆa6È©¿£aüÈIj6bÜ8va‹æb«BêSŽ#2©œÚ÷'ŒLðÚë¿l}Í&Éá¶|a ð—Q¤Ò`r Ÿ<ä°œ¬íLw)p™ ìÖÈØÏé­?¹ôá*s`F)ÞÄÿnðïgL°‰D³»îÃ|&°úP+ú:Ë?Fw43Oó«>,—ƒÀJÓ-…úƯB\þ}L3üU¥Q}’"ô?ê¥5g÷‡Ä}IÄåÉèú,8MŒÙO†Fdïc–ÙHlÁ-e’ù+o¯w‚."ùµäØÚE§™ô.Æ]DGÑÇ«£vk^ð*àçäϳÆeži±uà¹,7åäÄž6iÍ{Ñ–¤ Ð fL†Ô&"Ú}äá FÑ¡äx J•ò¹,´ùF#ŠF#M’f 8¯ç¯¼ˆ >²­ `ÂP*Šºƒ¡Æã?•±-V tyóÀÏ£%‹Ö)Ëãµhý|RШ†…ïÚ8†:¨f¦QͶ`%mI*}–ã¿‘J"67»Ôª¦ýIÜKy!ëí\øNi¡—¬”©?5ðÜ™œµå{R ¾NàüŽ ÔíÒfôXæ++¨”ý¶Ó4À@°ÑÚ«r¯ÛSkÕûAéJÞ¡lÔiz4«i)¬xgɃàþ;ÉV•¬²‡ã‚oõéƒYÆnXÕ̺L’+3E±å%*œd®¿®ÃíÔx}ºŸ¶áÜ ÷{…Y±jQ!ÿ}ÇÇ5Œ-;#z0Ô…ÿhŽÉæ$YF—Ð>檭}˜â†PyÜZóÝ} Ö ñ1#~@^F–±[¦nÿ]Ò7‹æèJ’—û÷lÉè¡ÿzÂh¹)¦Ö•òÂ$©"òòòòòòóa3åÈѵ+®ó´:s„B;Ï×Q“â ñí±¿ýón ¥­`9yØ”_ç’©Y=¨¿8˜ϲ޿ÜÜOJ{yÌÀvÜÀó õ•+ùa¡R¼xëÐpS¨”Óâ >Öüµ=¢3`º¾€ÿÿù‘µ2sGHË=‹ !²fxz»üxawJB KÔQ)[¿´üéÆ7dÏ©±ˆ°ø?oDP­måóç°/ìü³_ qŒtZ¸³rH)é°äh÷2¶é\v(ù'[õk‘£å6B‘‡Éý(L£šcô™˜÷­—Äž ‹¸û½æ`P̌ġ~ØYò@iÿXïª^Ä%·2Ñf)ßðÈMsã©smõî?dŸ„ÿn}ó<~J_=Ò;7YÍçH9–ÏýýfÃͲZ]û2Ú¢Ž2W(Ü%Isò7ü?ó[F¼s³ÿlÕÿh]ÓÑÿ!ÃŒÌA€Ù<Nó€Zý¿ÿ|j)¸ßäÒó«°ÊÉ=ôg§CnXKËϲ.+ÌjøñÙ˜{±\9ÿI”••(2Ó }šãH™…ÁX&ן3"”‚ÕëePj2…•O¼( †ìð˜o¨½ ç2±G ƒÎA•ÛKwEB áÛÇÏ6«è´ŽDL±°õ1J|p?¸Ã‡ú¸Fð3Y™™™™™™™™™™n#½8—æÂ/Dõ “ß”wøµ5ŽÆïE¬³þ*uI5ðkvQ¨AcGƒ*4‘šH5ú¿?$æÖɬY¾8 h&êQè[æøLÖÅÆþÊ›èP‡²„ÁÊ)òÀ†sþå(\'Ü:®Ð™ßJôŠc‹“[É‹`Aæ(g,ÇvB’i=æú|y¡ºVs TíúúZŒ˜Oœ—\Çõb#ãªA\T· íR•¥œÂe'H—•̯Öt3ûœaþß-Æû%„7øÑ§f‡¿3nÊ|Ž•Q²'ô3²*± {Qôë8•¾ú8›¹#v(dp>ãöú'~Þýÿ7Ñ“öú cöú&þß@?Ûègû{òÃöõÛûzW¾®À¯«§çÚA{FL±‰ñx`Ml>™Â ¬Z `9Š‹Ìö?AÑO?PÔ†]%XôsÝ&½ë }ééCJTsÜ ,gì–Ê"n€ñk‚anR€¿)6 E\Ó¿ˆDÌB⪬+‹Â¯¾&{〟‡±]ÃðWà 5RïþíßÕ ò~xd„ƒWm^ôüeoÇ–ä”bÜ`.ƒ¨÷0wúèÏÞ ¦-²ðqüÞW±.sÆOáö+g´“ñì©í×Ú²Îæ ËúàÚå+ÀžÔnòó¸ø$A6‹–¨áåð|FS<ÂÎNÍ…ê ÜöÒôƒ±•Œ’p÷„'7+.DU0„ö"›±†v±I`^]5ß<Å Q¡î„Àýér?=½Û-  ÿG ä[%©ïÔK½ Iv”G¢CÊã,OIIãôaá?geº…[=ãœ-$2?u-ÞxíOË¢˜**@ÿYô7q<˜ßRe×»mF‘#…RV‹ªÛ%yû;óµv›hã 4¾}™ ØÞtˆ>#R«ÀîQC2¢U•ƒ3B¿éœfòì¨뿬*3×?Ô2UôŠMÔ«!Èê Q}Î ÷N29?wßÁÒ’ûO’Ëc‚À?2g¸^ útr-uBðÄ ”e‚áîEáz^ˆÓHÓ¾²w¦7Ý0TZY[%D{Ù=‰Œ5€Ýwµk­SÁGÆgÜ—âî¢^bŽ”çÐlJýàÍ@.ˆõ/ˆ®^Î 7ÐlJaÁ~›Ç{9MCø¿9 †p”6cΓ~Ëiç½¼þj®ºí=;|N­«ŽžÂ$ ÿ6O=ß1%`¬€&nÖ->•„#iéßHû{ktv(*pT³=c±-©gtí á€Ä4ôÔu"¼74ÎÇŒ-qŒÚsCŸ'‡«å.ïñ÷Ø4DàjZSÞªÓŸõ­ü¡ƒ£`P.!@Ó=$Ùmæ÷µq dúb:̵¨bB U1—´~¤ŽÏï°¨kSѹQ‹2ãQÜ*ø ?” æ„ã©‚Ì}‘Àˆ.¿™†¢ë‰7¶Úxš?þZP~Ù’5­1´Ë=[˜ ‡Ï]5Î1zÂÞE?Ž‘„Þž»%P™-q0›øŠVtïÅÔõåe8R|ëë9ѶÌÀ&$!™gSåj#`sjŸæ³ÆßþªÐl@øõÂljnw2Ò˜| qZ6‹:V48§¢ÀPs¾óΑb`­¿×Ùõ*Y”Œ˜Ó»¿Îeu–žxE²ÞÓ9ºXK0É4e’ _á8"våÝf¥ò¢{NÓ¬á§BB¥•_í Ëb]ßÒ¢§î°°àÁ©G¬¸¸H€*JJaÞdê‚VL||¡8œ¤âºlÍþËp¢ØW»ËÂ% ý:åá€!@oØJ$P+ÿ"<È¡ÚGŸgî ‡—‹éc¯0ô?MX’v¼ÁèAK!?çNE*%)úÈÔ‚”,$ë”›ý³ZîŸÞÞpm°´"‹¢£ŒäÐsc^ J\ŒÄ yÊE/ƪð“:I4á5a¦5ê&ÿ‚çÚ;"tcï2¼ƒ"3"Ù:ìý›êï6é%󦱿ˆªµ¸Ä-OŒÒBà©qZ¼aéºðا•×V}´)Ó yÜ î’š^Ñ éwÆ8a±DðúZY Áý1BáîÇOÁ„,•äqŒŸÏWާ»3ÊÔŒÏZ6Í·‘ÈJ °+t~òü¸µÉli5¸»ƒ¹˜É@è𾿤…¸3zãyõÿL Œ!¢29ðŠzé¼Ì­WÑ®ÁiÜ]Í«ÓlÜ&²L']FöÞÆ£{¸uF>¶R½?‚­<ôl©‡ŸÒûfGá<õ^!w–4³”§ŽD©oEvƒW?GÎ —¯˜¡,Fz¥…^þTm$*ý-Øé|˜P:>{ Aó¸¢jê]¦G)ßcÑ(Âmþ•vc4/¬Äb…hÑTfÚ´¡EHã9  `ÊR8PÌr0‚Ä¥•Ò“‡>§Æù˜KáLΧÎedî)ŽÁ”µt[„é‚„ÚÈH´è nÔâ>¬''ýmÔKñ[¸ÞUòS@—`ƒ‘îyIâœáõ/ ÒÆ2|ÙSd–¬£IóWٵȴ #/Ï­絃†ÜOÔc’áHt*‘¤sð¦Ká&"}q‰¨ØªD·>@PÀÄ¢Ã\ï϶S |èzXµ¯ƒÑzc…•´9o)&­‰ÁŒ %­ðþY4Ó³ƒqÇþ5Ô.SrÑ/?8 <÷½7S¢žVè~"òËÇKHí逸†ˆ;Í‹Çâýž™k‡âX y“…1ŸÒW\-Ouæ9y¤HUÀl·o/6Ie-k¾:ݘ(õy9¿ã<êkxLôCe!½GË;~¾ÓâÛºJœ*ך‘!aˆ`¤ÌlÔIŽO°därNa-|ÐÒîæø°c?¸îнM<9QFiYZ ³5ëq·ÿ)–àx>„Ùwo“æÏƒ|3ÇTÝÿe‰_ÕDТº}}1a/Ýåå ¼3Ç÷ŒœÙ²‚Ãçv“WÿXÕÑÄ·ß«ß2ÂNçÊÛD5ÏÎ<Â0(ÞUÙq`ýÐx P¯>«d0å*4ž!P©¤¡X9ƒ’ÃLOy‡eŸŽ"t¥w¼êØe4ë9 µ5”B…:’WËL26~&Bà”)pNßìõ0>’º¹ñ ª³õ°®3úQô·9̺w¢C§Ãà(Ëÿe<Ë„e±[ñtàžS@}Ê¥¶x6å=û &jh·µ’×ÎèDrž»K¢Èt½å²$2K8¬Ø_ZhW§8p“ªÖ¥`¬1šIV²ž¦Vt^Q”gèžY~䳎v—/&-öã¡>Ñ…µÖí|Å/tx*¨ôiv!4íÏ 2owµÌ…±<6ŒøÂ¡,§°s–6Ìzù⛎(&1ê×zcÚÜ£¦ùŒ€&“lΠ«Ò´7Ó+¹ýœ£Ú±j0QÂÎEN)aŸCfOÑCµšn=£ïì¯%Ež Vƒs¼]1_Äù„¨ ŒØ×žëÕ*7ÕlÌ©&pø1÷H²‰¸¢ ˜Ó#–"4©©òÜ«"³naS='cú¢AKè˜ïošE$°ÐpÚTr•?¯0à_âvaŸfþödkÿ3&sMûNYh¹nº]KLÆ5Œ÷—"ÉuáKz1BGyÆ]ü3‡Yx†&J[ãÖK½w“/ªÛò¨‡µVè;pEh áƒÊqBï­ÃÑø×g•H—¦ØœÞŒÅ&˜T¦æÔ/'®ÔfðÌÏD—X6 œXý~´ÝM Zú8á3‹düAS®ÛÀÞLúú‡GS»ÅÅÙÂ;¼U”Xî{Ÿ(¼ÎгþV|'7®P:§jhCœ 5î|*õ¦ˆLA¨ªpvzõ¾í¦@W:²ÀN•3!zg4^´9bÞã¬(Y(£‘#§zP!…ª¬v&xWøT¶ õªô¸«C’.¬nÒ<«ª§oÜJÍÀL” ÐIõ¹Ëú I¢£ðÖ‘ Ì .^§Ì¿*О Ý5˜­’”ºmE9J¿X ÇwžƒzDS³Dš0¼î¾856¤U9Í¥`Úö®‡;ñ~á¾Ü,ÌRij-ÅQÐ{©pg{P xSþÖñÍanÀ™W@Ÿ~éH!Æ„Ã~Øtìëó{7T[‘™*Í:gz”ÇÉëå…YÌ+ä ÷% f×ð‘À†ÐîOJ±ïmžhéìwæÞ2x¸·®j·EnÁ©Í/ŠB0Üj¡;Nƒ(ZUL7i%Á "ORå¡CÔävNL ðÌu}ÇÛ®q,Ð$¢7§.îmT™—¤ ;ÃùðÎðxûâ@0G–ÀÀÛ1ä{²°’j„mvÏ·>—{PJèc¨¡àÙöØXã=­ÒJeô}ÇÓÍ÷á½°?Ðrý=6.–P0Êâ)!]ƒë#mzM\ñ¤<°Ó1ýnsGn`Ô5YÆȡ̻cçüZfB¦ÜO‘9íY6ѧ +*~!9€<5™;`|ø-$d 5¿0àVŽËaù~“k¦Ö!ÎôpfÂŒ«­,íš"1ÖB‹»l¸iWmd­Ç@É¢št`=ùJÝ‚véVà·ª%¾Ð"^{sëuëƒh™Å‡„†÷ÀÖ®EÝ7ßOï Njl’Ë?(YLÀjnlˆvxÃ.øÏk ×üŒ—áÌÞÁ69äžÜ}vÃ4°öÍÁýÍõ „-ÞU¿Í¥Œ*ÃÔ±V[ò„2†jô«°cy¼€d[±Å;p>ãù±ªÚ_{â – \ÕAr錇ÛŸ\‰+Ûeþ.ŠB™—® €Yš8{7Õ1±B @w§é‚ŸãUÌÙ¶Y¶“^ΊöŒÒ§Éeÿb °Ô«FBgkˆùÕÍ)mMâ N ÿAã24@æéýŽRS Ь)CFk9© p’˜÷kä&‰Üz]eµÍÈýË1C(d‰`ÄÄó{Á0Õ|O¨¿óÐp¯Ë}|>öuæÇ.mh| â®÷ÂH’¥Ì¡£+ d(&Š€ˆ0¸ _ügl+4*L£‘ú¼×u·ojhÀj‚ó2¥Fž<ò²Ê0ý½ô”0¡H´'Ò‰S6›1æÂQ½”Os°òÉËÖD¹xû>yRpä-õÏLb<*#Èw!£ÝX¾[ç­XBry&m\yÃ7Ymöš‹¸é;ø©?YFê€xå>Äœã"]þÁS¡èvÔΓšŠ$!­ÃW©CIÿ oò}˜S·"rA@,óõˆì)oÎKáÕg±µÛËMrô&0f%߯U“ê~³k¬ônÙÄõ™ÅÆñB2,lþë´¥UU„Cøì L qðÝ¡×/›CöãÛQ`n EžBÚû^S¡â°ß$˜˜G믈ü"Îðe8dn(‚ŸÄ¿ÕER:7ÓÈ jH'»?¼yäh6ä’I$’I$’I$Ÿ²9¹ÃcDá9œdÓo _óé|K޶=L\0eµ 1ñoõ! Mr•TH¡Æãn_|GøQ‚Mi]¢°|s¨Êj~ƒüGI•o¤uÎA3êø•“Ðw(¢M­ú›C_¥$ž¬.V„9q,¹Ä–/Òºâ$iT¤­‹çÚ/H×9,lÀ8¾ žR˜7k•ß,ú´tX.™{ŠƒnI$’I$’I$I!4¶T´éŽ!ª ®ÿxmâÇtû#U+eB¬¤ºùNnw{’}EÚjæ÷à“›ò½ôÎ¥S¾¦I<ɸ³'=Z¾;p…¬ô_I‚ß ’CöçõÎTvˆ¦÷@Hõ£G/ƒ¾ÉÆ\ÔŸ€’ì#N51>Üw\óÿÿÿÿÄG±#3»¡!¸J§µNmp iA…£Û¹ D7`y`v•Ót*îS⢧ˆŸ™tôx0 =Ýc<ϸlÑ g`õõr§¤Wü{Ìcæ]àâù\Y¸,7ßñtàò·Ú~ÝNó®9ãÀ§â&ùØe{85?ôƒd´ŸµT‡×—LÂ2PúºY «Pœe‡` &w,»¸û\”Ï&ÞÀUlè0#ÚbFîÈÆH ^Ÿl”†XòƒEí¤âÓñõoÿ;)Çž3BÃù[g4^‰NœúÙÙ¹LÁ˜ ߥº õš‰Âù»“ËF§97Äæìç°=a¡¼¸Š˜QH'¬“;¥‰Ž€Ù ¯£óÔG×=âÿ ²‚ìòâ R‡WºIx }-‡\`Ï ñÙµ…Cɳt,‹P‰õ2åU ‚eîs¹‰öãºçŸÿÿÿ~ø'œ²ÇƛЈeqAß›wç¿ÏÒO0Ë&ížñçD®\Ýe9²¶ÆD5F½ù§ýrJFpÔvE®ø«àä›Þ¥7Z¦îcšq˜¶#K‰e; ”Ú›%1ßXñÊÕ—}þäR?SŽY²6{ÈmJR (È>ÆNf“×&«šçg—íƒGzýÞá5¢’?êi4s>r“OPÿuö÷Ëk´÷#æÛJó²¦T(‡Ñec#•SNSÒ¾¶-FìNÅ‘ùá(f´ÚÁÅR kþÀžs_Xg8Às<~-Wæ:˜(⟙+¨ÊQf p/š*¾ßÿSd“‡¢sÿÿ Çtºp^®¢ð,A4BŽâ’Ïä‹¡Ïßé„Ù”Ì~c[¬‡ƒŽ2> òù}63cJ[›ùî6 `Ÿ{,A#Uçû|:ZQÕ>7,ч0è´ôIôÁÞÎëx©§Õ!ÔºžÓÒ§%wò¼ã“ÒÕù”AÄ›¶æ¡_«Ý<9¹žÕ68ªâdƒúÞ•oÍè˜òÙ \ßüÉ…—‡‡.ºSŠ%°¹„É1(BÃÓn(þíæiíQ ÖÛm¶Ûm¶Ûm¶Ûm¶ÙÑák¨ð3c LL ¥³Þ{L¶|£gãäA¾ö‰UßÿjÒa³–dÉSÁɶZ#d =ߘ¿»1ô1²—‡³º·ÈÊ«EA«uõlvì®E£ÞojŽ×]mÀ ÿNàOG+6ÁÔûû9,T¬2AksüM‰Ïq»å;,‘Ö*Fô¥ñq8¶ŠMÇó.¦=ö¤›œgÛsW…1‹µ¤¶)îÇT Q8ó"IÎI}2îH$9’I$’I)ûü@›c„^þ(,Æ({Úã,:7«htd@ ëCaj !]ƒéDTY5tI¶Ûm¶Ûm¶Ûm·#ˆ"÷f •ƒÆ«Ý:ý¦#úu¼–¨+-¶¡ÿOµH—‹’À¡®âW?;”kf‰=wAGáÚüýè€âχ¥_É:Æó=Ìj¢Od­¥¥b…%© ¯ï—#vÍ–j›j¾@_3!«ìDBeu\Õ¥N&X ›kaçâ₊ÂÐ>c¼Ô•—·ìs!U3KÉ»ƒNˆÃ*UÌúƒÂ=ì/ÿþGþ*Þ¨sÚl¤”©b >®xš£{Çù*}­Ï=¥0çÛ/ÿ)F@äJ·ßuJ¡µXqì©ùGHv0ãžjö ÏÛD jUóJpý£2ö2-œÏ!ò ¸ª© ªâXSœ(I½¿o¼û æý,oßù“ù•YÔŒ»\#ìðž;—G6:Kï!ÊMÔNXíÿ]$z²§ ÖFëäÌH=b4´û‰¿8DJØH`HwlǶú:#9èO;š8Å¡æä öø¹*æx¦îÊ"xÆë¥Èc°Ð€ðèÓ‹É3ÚâMñ9w¡×–N׉Lõ °!]¿G4‹…^«åÞÈ+"~°É%¯Ÿaœêã]F õhíäðM†À=$¾ÅPu·W¬ó#æ‹~ž?¼@RKchÃø›{pô_*Ö˼$‚ï‰]¡pèI~·l§y$XÙ¹´›öœÅ„<¶ë… ò¬ˆÄÿl×OOHFoû«ŸõO¤:áC78âZ2E´ºÏUûO_âa1)è1)iû—qtîuÔ š/jp$ü褿ctdU"ê6ª#2.æLó¸.ºÁê‰]¹~. þý+%VijPMÀžWMie݉Ín ÿ:l…å$"9±L8ëÏÿv[—Îú]2VYÅjÁš…V¢Ž.‘ÚZZÉKxtbæÙVĦL =Y¿Ã_Š \›ï5µ¨5+wWÅJnÔbÃtúÍÔÙÏ;èW7Õ }Ïz´ß»9OÕÞ_‹©: ž¬­»¸bF8ËzÉžÐ8WTä·æVýOÌ}6OÊNœI6Ûm¶Ûm¶Ûm¶Ú Ü-Ç[DƒøïñgâƒzA5q„¢PjfÔÌë:âˆýz&À.R5–ko÷,¤Tšº<·¼Œ«µ&ÐþÂpâBz4µåZà+ùgc(‚çl„šê¢‡Ý˜ã^xÇþs ÌÍdB´ƒzç5vÝÙ&jg$oß–C '/óÝO 2ú>šÒ!ÁybŸFØŽÓÈ¡4V•Ø$;…{qÞz¥I¹t U¥ªŸÜMu˜Ê1gû…¤Ù®5³¤\´‡&_.¹ú,=©ÿG_ï±|MS.̨yXm¬ÿ "N`4Á)‹ÂÙ-„¥n¸…ÿB43ËUúàLu-þmÒ6kkÚ$!|JZ¿…[6hMÇðÓPÚO¢ï´¶Mvh¹9%¬VÀ;)ž+–âû¹Ø»|LnmáYhXÛëCC —&tÏ-µà$Äg¨,SŸø—U`š˜\V ½ÌþxBçx?¯1Qص|‡þà¹ÌsF°þL}/÷ja€Ì­ÿ‡= ÙG‚” §4ìMäsÆ0LÀŽü­1Е=ÇÍ›dÉÛK €ðâÖ]…UP¯>>Vß;¸qÆ!ŽèNÃA³ši–úÙIô †s-GÒrB’”¯xìÞ4õæ´´¾ŽôÀHåC;rµ °Ê}$bþ¸I5%ad ãò0˜iUÝëuÉÛtÎ&^ó­”.® §UÓM8—oOÝC!ñO µl)ûL–¬L¯¤%¸nÒL/­jÞšE’ÄO º/˜rB5óh¯£ûíýNˆÚ©l­)¯Ãv Öð¤´\lwϳ¢„Áì…Q¢Ft­spûˆšU• òxLª5"‘r°*ŽiWöüî8ŒMI&Ã{W›NhbØâ)Jg7z×a rw •9¼Ý™5Þ¼²,,à) òíŸf}ÙÿvâfˆHåM0[ÊÖJu’þ.9$8G,1†ü °*y'  ° <µiKÌÕ®øÝþ÷©fŸ{uo¯C?ÄõÖ[_†Š¤%S°ãð%hËiyÚ«w.ìxtpÙS-Â.ç›Ü,’ÁÉ‘Jo}d,Ub›Q=hÁ$–`þ _D÷].6A¤„×9`:uÕ `VØÓkòu)Cœjœ£˜Á(` Á°x%ñÛêD›X**p 0•Ùyô*Xyág¯IVfb¾³˜K=93,Sèud‘Ø]š:0UgËcÍóÁðø"ÀÝ9“Ê­€F;†ÞEŠ!Œ>»ëò.ØlºÙÎ5ïÂ&ú- ¨»\˜æ­°ÞA°mÅγ7º2ÒÞ ªû«¸  tcxG+îè§ »eÔƒ&99óÏQëþsÕš4{·Q)Þ†f"ͺ+ÂJÚl$Ë=ˆr-gÓ¦üïXÉÛŸÞWÚݦ½‚Lt­þ5Ûì›à“EóO¡<=Íg¢Ê¯yÔýîYÊLã1AÚ¤nQ4¤Æí X†Ôàä-,MgDƦA®ã•ÞV œbòi ¸]º¸®x¥BrF®hûrÐ4;hEšôg|ûN¢¡Ý×ß’AâT•Å,?¤uHe®}†Ž(}’7æò÷lƒüZ ÉM}e€Cæ&ÙI\ñ³ù [’þ“br¨>‰úëRP¢¾‹KáMS)Ö€êÜ;M@™ €úqé“eògäÃÁ·Õd¦jí< æiàRÖ,)ä,hgéaMI°b]ûÅj¨*¢¾«‰ ï‘׿MRˆk'f ÂHÅ6ŶÕ/Wg!×™ÿC‰ma»Î¢Æ BÓïD4Ò 7Ù†p.‡okø‹Zs‰»Ü]&J|Lÿn¼¼yÉŒs_øcÊ\ü‹+½Ø¥­!ìwvô"¾Q^kø æ@×k9Bì é4y¦]õðÏ…?U³û s¾¥±[fu{RºïcR6 §mѬ8è9Îi4òìÁg? ¥Œ­h p¦çÛYÜ…Bª¬IijzÑ(¢m()QïØ‚'‚&Tªº„÷¡¥Á«_ÎdTðïŽTBb?Ôøþ=‰OéMwJ LWóJŸ=´Ê±ØÛòVεî„Lê¾í‹´<72½[ññ›õÁ½Ë@-èÙkÝá0#uM“]i|W†ŒÇ¦:Cõˆp‰…¶k7‰b‘ ìk|iÅ zÁyŽ«þ­=oô‚bæ`©—ùø 5ž‡v‹(•ýYpˆì)Ž;zÑ:7»æ3WúÇôíËP_1ŒŸõ‰*uˆ0£1åÈåéì@g₞yìòdç_.™¿nU¸í‚vžûÀÔÇÄ.lSú'à“åS'óð qs?–E„ÍO™ñœ+çŸÎoß¿h‹U(ðôW§Çýb|!MX=‘K¼Û#9“wÜ™óéÅTu …øªQ¼¶€?¢ÄšE—ãÙ7ê%¸T4IT;y™Ûz>´3Ÿ+ØßÒ ƒý‚–!æËò¢ô¦uC/í­ó;Å…hpFbIJ{çQIŒ+ó­ Ç±Ÿð]ëUC¼öºÛ„D,d®!%éªUµþCr_NBÄâäT¬]¬RŠÍ7(‹õ­ÝóÙÜØ}®ú㕹í™öÁQ lu®Fø7¹îñhÅ2 7i°©Æ•Ùçx“–N“AYØÌ—P]«Ø¾ßzØbL¾~Ç¢ }aêµÂÚ8Æ+d‰™2º¹øóîBÆÚ©m£s´±O”ªuÇÌ5sjs}P×ËcD¿¨‚ÝÖë‰*î ¶u/à ¢V CnIï“*ÊöïV„w‡cE¦*Ïër¿Áç2}¡y+#OÕ3­aD ÁÕ}µÛת›¤ãe™’ ™Ä8žcj§ÕŶH«NÞ‰ k Çtl¡c‹™"ôw–ÚÅ}å‘]²Õ =ð¾ÊòeÇ4lx¡{¬ÑÂö—Êä‰Þ»ÕN—’ÂÏãÕ&à®Ã%hø]3Ú´räb5: ))e5qgÇiÆ„f8È&ñM-”tWŒd žˆKM‰Árݰà:<ÄÒ4¨ÕÇ­“$®nÿK`[º}zÇn”ÎÊ|ˆÈ’!„ mKNy/󈪾4^›´¾{EREa÷äMï"Š>À y‰Ò´‰• ™{K"g;!©Û GoæÍ´Äç"̓ izºøø›g2³˜ûb5Ú.|Ä*4¦î,~HÅ¡â|ýý» }ZQûv'ÕuÿÈOªöþ+‚ùõ§êÐkçØß«AÀä9ü6T‘<˜?ÿþ –£xÅ¡¸×ÿi„\!Å(Bƒ tÁѹuï2óêi†PY‘÷v.5Á”xF¸ïõöÎU‹-"±ND2þþÙŸÓ…Äöu©Š§~Vv3Ø×x9fÿN`Lõ›èÂ?R!:(£]æìX§ç¥hùÚqÇÒþ cYX„[”šô^²Ç[˜xAÒ(.+µ<áÁe–:óBxHÀOeb¤jÛ'`œùž$*Ç+‰ž4^+„þ‚î¿“š›ÏQÊsÚ /hsgwCôZíAž—œ£ŸÛùÌ€R'Ë Ž½Õ<É™ ŒõU”û`žVS‡‘}§ÒLþ+áðDžÖ6+`ƒ, pýÂÁù µó‚§‚`î[:\_Ùźäz"t³}]tÌ[I[y°²Y¤|8ÖwüTöfc¥üÆ«(MÿV!ò²}óh ïoÈ“¯Àïù¿£«$Ä®uöÄ8FÄ$…$^ÆqÓKýFÓƒ€`y ²Ö âÙ“1ic†/$– ÅH×6OÝ`-,|^Eˆ-L1J1WÙJБ¹DKBTÆ{v’©9oñküš¶À„Æ×ëî(KtÔ0©í§vø¼ëg|–µ¢Qü‚CO]¥BdÙiyÜÕ`ö‰uÞ©T\¿î¬Áë$Juh²T#ÿœ’ð™êÉN³Q„agîš%Dô­)XÄf¾$ö«jiÁnïÖÚ¢jëg¸'Ç¿¤§„5hßl>u.”´fcôƒj)píºŸÀì+–µt!p˜.äELŽzæ±Ðeäø—îvSêAAɮߠ-tÓdÐêyÎRòb˜Inìºbds@ƒSUÔ£L«+À%ãðñW´‹ëx8â4Éÿ{]_ Oÿz¹˜ÉÑøgînW9ûW61<…®k?b,‡/Ö`!ØÌwÈ Â`B '†K{ß4 ™¹>^l¦Õö wÐ^Êxh©à„qƒœ<¥7ê§L"Aÿ9ÕPC vŒlè~ŠÅ/R"{Ò3ô˜#*î‚úïíþÆØ#l¡¨%âá𩎷n?¶¢{ú]ÅYlŠ]¬öô$lÐÿ1®æsCÀ„ gïCåÆ_$è`~ÀVþT©QUF(ô©b°± ¥©:¶ír™íìï†Ï2…84­›½fÜà!³WD.­¸ý¾’n(¬^‘Hbבçí·ò4øì«®.éïâAÿlôJžHÆOPîW'½gºÉ)¨“›®®ï ÍÔºñ¥yhÌv¨4ÀÇÌYüèRÞyPBŠòsR£ŸÖØŒCËÌ`´“˜FHe ÅŒ 6¡Ñ†¼){…™j ‚H¯…Çô~vf^³šÃ,lŠ4…±ne$_]eéò„‘ÔÏ!J8ÚõÈÞ*h! À|À3‡SMÕÆ}øx”pŽ•k®y…ÅMù˜MEÐQ»¥wÐP~Ë«ZØÿI<âÒZ¿"‹ Üµ,d†,¯‹¶aŃSDìªåöpVæ¢"ê†S7ÿ8HÂÏî¶{@ê9¯·éÿXÞ˼*Ÿî‚Tb©àÞýu°AÍx¥‹zŸ§à®Ý­Q·q‰h™kPeä?f^»K»=7P3Æã#®%#A¸§(†·ÁÈÞ¼ÏBÅ€‡ý(5Ú83î°‰nó³Ñ_ú·Fb`ÈÄîÈyú·šp•KØ9)ú%ô$±AÍØûèµq×$–Çè)Ï# µ0œÁiá¦ümnÕÓgYD•¥l—«©óž‚‡XëÆ$ëIº6O:¬K]]»ß÷U¨il—¤z}tŸl쌺œ“¿û8,ï9 SÕP;꺤„ÆMZÔP-Vé·¦2´61:™éZ¼eq—OŠSôý^RG@4ôÛû ɰ²žÑö"ÚJw¡Ð™ì÷3‘ íÏ ˆµp4¦Å°¥R2èih ÿ€–=ó&?Ócùo ,ÁW ¾œ{ʼ ¼ÖjI¹Þ¬ßuhŸÔo)†Ø(Kž"õK¶Pyo§Gêò¤|êþ¾øyáRèÂïÃ’=RTßùšým~È£¥`=\ÝÖq™§.×µ¯:{ ?$ØÀô!£ô!VsB|§6}Üo4T0$õ ¤ m1xL´ ó€7Ø/¤9 f£r6‹oL@úiÕY±8ÂG)çNÜY|½‚óÃ0wïÇ’aWùq¢Ó#ûëG"û>¶«bÝçe•|œ¯ÎøLz–ýáßêЄa?ó2)ÇÛÕâÈw»j †€ \KecèûLMgÅ}¢nþŽ÷,ÓíBç‹üc¢"Þr?KŽôߨ?PëÕîeÊòÎÞ9ïÅ2õR¹¦±§wWPöøÉÔ8ÄÁA¶%¤PzÐü›ArDÄ¡æÄþUZ':Y«´^Ð4%ÏWkS/‚óÖáüJQÜàªö-2ëñ¹sæâ$X®½¬ Zf׫âe%‘`²Èuì'6ŽŸ¦š]°[»o{ÁÚ¯›ÜADmAXÅÜ•IƒÉ!,²Þ94õðPÔøò©µÉšñêN ¿ŽŠû1 ¨II÷É«Ugöý Ý¿Úø¸§uðó$”¿íáH_Tþs»r¸Lú?V†>×K+õ¸¢Ä˜.«ÉÝ7§Îï)¾AgIzƒ”׫aÆktî‚þ©~<¹üüLX@¸Î ©Î%P¡’q×)Ûi@Ä`Ø·‘ÙW‰˜büè) 5§…6bÂ4]ÉVQ‚›’§‘iöàÊÿT¬]?ó, bïÉʘ\}"ÞÀ<æ fÐzT“„RýϯŒéË~àaŒÞ iwíhB(X2B Ÿäa\;V¤ Cº´Éâ!ºB9îjƒ˜MݺÞÕÔô™–ýµ‚¾ªA%®WeJ΂]óÆAi_ Ò4JnÅL© äô0æÌPéªafRÕ¢d]ÿñ+LÒ“ÑÈ嚬P„{D¹jÍä éú90ŽR­ùʦä$¦9îÖWr¯*»p¤J£ÄW™‡æñkÔÜ¥OEÆ¿!õ:T¢jrR¤…®+îþm)ùR±†ìK´v­SµÚÖ0¨“æ‡k­J-oGÉPž/­¼‘÷–Ã9Zæq°à¼I»ë?“#çÚs€J<oj©õh¬sûwÈîeÜãñHÚž]–=\l‡Eö:js(r SÈãE†>ãÚF7r¡p­“öö^W½uicLÚʹâ ,}t09±™N-êYQF=qÿYÝçÊC€3³%ÆdÀ“QÙÉvBþÇð²uün x;•‰§² u¤]pMªBÖCËw7Ð&ȉßÿRì¥NAÇ?gVh{—0[©¯¾Ô™ÍñÕ£Øñ,SÀËŠôÎ翨úPvþÚþqüÞJ¿mŠ™ð“5[²Ã¹d‰yûÓ`ÓŸö&T¦Qž¨öó«{§þ¤†»±ïG'™ùd7‚ø»¯| .å]Õ·Æ|÷°vî°¡TÍœð/È#…Ô00ÿYÕÀ­)(¬‘™V¹^ÕŒÆ>¿cLI´öf¨ƒî;ÐÙa¹»%Bà‹U_ãdÍU‚è ÛQ½D<`ëTêÊ[—b¯ÐØêÐÓõ/“Ê+`a¯²{Æ&ÏÔ0oÏù|±ZDÖ]È!º4@›‰È…T혱Lký¿åDhû(‘ vÇA:¨oO¯ïÊjÍ5¡}ÇE î<çKÒKÔx× /}êÊĬážã‰l-ša×t‰¦IÅ×nb=Ðõ‘•®°÷Þeî…ÕËqs»N ª®—OvTëký*í–7Ø%EÊØÈØ‹Ÿ/@lž†y±ž4§uDè5åºð·=©kÌU'Î ®“vgŠAT/ú#ëȈu¾èsçèU\ŽùIô˜lé j¶R|È<²×µBH›I&ï"ˆq¹Šç=ìÅX8«v™/ fâþ6;àoY¬½¬!Ø@âúºiý½!_WN?·¢¬¾ÞއK×ÛÑïðé_ó÷§õmµó÷§õn äy¡>Žë øIMµÙ}S˜Ë.}CZ”ä_ ²lÌëÿ]„ÐgXy¾oÆ‚ðÁ@ŒR‹ôÔ‹ŒBC‹›Ë”x ݼv ¬C3'·«ÏjÜ0Ô¦[;¡ìåü®I ýØ…˜`Å'å¨éRÜ¡Éi³Èƒ¼" æ'LQP5*éï4±E^c6äš0Mùúô…ÄE‚!G¬¸ºe&õ+³„:Õ~SfßÝxA¸òZ̆kã ‘SŸŽBC%¬‰öZK˜ µ§u)1GIZŒ\؆à (kR[K0ru鈱àSÄiíÕ!ç¥$‰PæöÇ{VñCv­ŽázÉk®pfÏߢáãóyhN0<½6«ÝÅÎéŸÇˆó«žb7 :ázeتõÑoàp¿”¿ê%4pÕ Y²OˆC$²šdÿ@ ¶ˆW|ˆK Vz9LA‰ÄØh“¨† «q)!UÈ#EVx­¥„ù$_ç*Ó‹¢ÿaÑÚiôjûöÿvéöÚJÂ3êäjÜ5za °Ôµßò)¢Âí+oñèêh£) qÔ¸~B§Û05E"´ñÅJ!Ám,L‚ç÷¬ BÚó£c©"o¿Ú-ßNÿ/󤜻ã„åokK»ì 7^k¯EM€Wgø6öþê9cP…-ôˆ“¾”êÍxýaë‹Çß ¸¸Ü¬:3È{è/€;‹~5íÉ‹çåM×ìýW`‚IUÍÐv$0‘#úæ!²æó>ˆ¤§ÅŽË]ÉÙ#mEsÒÊò¾'ëÕà2Pe 骼š‹ÙÓX0\¤Î6k:9„S|)Ž˜âðDžÖ6+`ƒ +Ž`íçòyn8¿a¨Åì?ƒ­¯¤<ŽŸLè9ÚenµˆB¼ì,ryòæ)óŽñ;°*­,H«§h9Sn­^ L¿ÐãÊ'ݘVügun¶üASHkL áLÀÒââÏ6Þ¤ƒ“¤5ë’Š£i 衪šÐ­ í²í„!Eõ—œ`ýìÏ¡SZµ—• îRd®‰«|Vªneˈu£¨ð7ã9‡Á!gÞDµ`£ƒ,Mfltö·)ÌË€SrŠ9Fm×5›ÓQw!*Wµ%MT¥IÚ{_@`¶+kËg $5%«½ŠŠL+-}¯á^÷yÊ R¿û8]Ùó²îԩ摾I¦év­V8G$Ÿwô¬[³f’% £zTþpâ=Wn¼ý;×"EÜû¼f,Ýào¤ö¾‹uÿwL7O¤æËy†Nµq¯t!·aK'Œ_]—ÑN­TÆ·^ï!p(Ýab^fÉÉ´·óL#G¤‚†ú!ýã«ì”ãÊâŒQÁ;\ûƒÜs¶ÕTΟêì}lMÃ/íºWhÔ, ;{R‹äiP‘Úá>B¡“… »Ò*"Ü« zÚRÉmò^ ocžè;”R}Tkˆ‘BW’5.טѹw½yÔ‘´ÚØùKÚÃVY*èn3ðŒ„Üîo‚ÂƒÐØ £‹Ë’!Aj©ˆ|CawA£~˜š"4=Ð?qá;ïç±õr òk°bûª$-^ójÇÒö­Kƒ×±òëºás=H8;ÇVh^ÜÎB¦¹óNWs‚õÀŽŠöÙšô£ƒõgÜÅCZJoq4°$£¸~¶¥ ÖþRÊE¼°Fy®ëæZc ¡bÔmüN²=Œ=ÏÎH@_‘pï9ŸXÔ!ñM9Õ20!n"çÓXJ´ê¤À‘ðHpàºñ¥=í†Ê—<$â¶Dè±/ΙS@ŠäcCAÐAékƒ4Z—’£wNÒ!hYÒ6ãO=«ÛcbØèÊÓnM×ò¶VSЇœïG¶-Qˆ¾vû€¬¶»Ùr†àü•A t6À«8 ÃùÛ-gòÃX ãYÇ$¾Ši¨–i—Vøf‚¯Ë¥âƒO—ÀµÖz N+ø´Ñ½è‹ÿ}Ù©–Œ,8ý:"hK9MGa$*h-6Óó¼ç.½Ùcð¬Z~‘LS^r¥—Yê­Rßu1ð½n"+ùË{ËéŽqA‚cŸæ=ÖŽí€k aPÏCt1[Œ þ ¡ Ÿnï¾£Z¢µâCk'þ4šÝ¨êùÅÉ‚<³¹tîÿüÝüÆ…»;÷W-ŠáÉa ¬®–ÍÒÕ:—t'(þW ¡šŽG–ÀAzŸá^ã{²v’Ù‰‰À÷K×/á?íµ/Ï}Ç[Fof'ì$úËGÒ¦Âcæ[Q!SuиâñJ†šêéeHä#5U?$þ•¦o| ¼q4”»U!´LH`¯‡Î'›â¡¥fÖøNfÐr;3âžÐ9×$ôSŒA Éz|®qGä€Ùiºñ¥yhÌv}bî§™Kdö»ÂèlšØCØÇ]±Ø…:(å[ˆ÷«®|x³°ÉL¦Bb”΋¦}ÁÐø„ä5éÂíÖï„Ũ†…Àäj 2¾œºlyú08ΣÁÙ'ôæV Õ°–‡²ê¯äfrA#d‚Òò©Ï'Ó+$¶Ñö°ŠÖÚ¹ó­A#+í0ú/áóa ½¼¿™Á>JÂý»8‹îžú°™}hKñ©ì·Eã'û¥Ô`£n&£Wr—õ)ÐogÚ]T,$}|&Dá©Ãj4Ô™‹ìÓ}+ïê>'ZLëm¢VêÿW™^«W]èûÚ†{‚AÖò³Ìk€õÑ£_güÙtf3Ÿ„¨È£ðíøÎm®uÃæ¡ÎÍv ÒX=‰ÄÆÎµƒã æë_ŸÎÛqýÍ Ôÿ_\Ý ÆœÛØ*W°+9—.(°žÔ/Ô"uvw¥kÅ“¯îcÄȽõsf>úsÊÊâðàõ}ç™W·‹ ˜ëg^€`orm±ôðÊ$1è@®W70nšÌÊ®{/·îÛ“ÆÛ•Nã¤S*ô˜PåÁòé½øŸÖA‰ŽG!±®øîй„3)$3b£0‡"•>›áâM›s# ¯ÉÊ/oÐ…Pî¿–ÌœCzFI³_óþW äÞÐ|˜ß w«2¯Cü¦1:þ eoƒòP]ÝðçŠìàÀ „›™éWEÇPÌKÑe ‚;{ë-'ʼnÂ}ΟO>?WãÊ4ô­¶^è0žð´1 ¡ÌÈ™©î-ãÈY)†¼•pùN‚ü¨!¯ØWíx¢J9íèž]\h¥°Ïf5?‘$`áQt#Í»Ëë“D§«#L’|o}—¦Bœ°§wâ˜äú;µ9ŒÜ§ T±:bR“ì_iÔ>QM.¼·1)½Ñ¯6û)ðÈœz‚Ó©oúA™`g³âˆ-Öç…”’d…÷tNàS®Œ;wžÆèºkNÖÂ=X&‰\"üÀ>‡ š@h¥Qd¾‹Ççfø¤L­z{ñtŠûn$ºhe°ê_7ÿ; Žî:J÷˜„í°­Ëª y2Bà7Ü„nÔàîÁ¹u*©Â֥ъŒ<ÓP–S|¶ÐDóŸ-îþI9¼µªP›‡#ÐТ€ø Á·šÌp'Wí¹N‰ŒÌ>o–uè ŒüÙò ¹›ñ¿PØfþ(^…P5ßä¹E]û¥)_Šš¸„ÓRÂÔéy¯O@Ádk+ÄO %iš©¬SYÞ\z(K©^~z#´«ü!¸Oæ¿L ½ûcØ—êΔ`ÍAágÚš0ÞÒÝ'@Û+#ZnãÅW¸ÌÎE*E—üò–ÖÑUEg„×B>¼¾K¤ßµÀÛÃÛ&:t¿©JJ-N^L3`m‚Ÿ‡hK=|ûrb„8R©„EÁs–F:ؾq4G_‡(Õjù½bÚDAô á$ä9ÀÕzXMѦ ‚ ã\õ³L§1}Á-3Nÿçáñá’RÅ’ªÎ£½ºÁDÉö&i›`\ð^ÕïOŠ£ªŽ8Rœ.ÎZ‰‹æOÐÕÛþtû•ºîQ ú]~Š mYi«) H±¤óÒqÁ•*všmš‚ÜOLömÁ hÖR\Òº©¡v—þD*Ù!ÿX¦×9[Èú1ª˜šZÒYÆ\Yˆîj|+íRäF¤XŠÊU * Ó )"–'sõÌ NM »Ä!Õ¢'§…Õ>Ö²ÅJ¨_=2è^3a0B™MfVe5¸¿z±„,¶Ú¢R3š‡KC±£ž/þ(Ÿ²¾ökc’§‡Â¢£î{aB…|ÏbÖÔ„µû—óë»ûJäSðŒª´7ÿxé3H|@fgEÜS]êLš/¯ãÑ Iý{¾Ü)¢ƒu Pù8-J€JSÛ½P@ª®4ØÜW'‹oþØ´j¦•{½õTPjÓÀAQ¬‰ÖùÖà 5—ÏaÖ÷‘¥ÑnhyVàJÞü-Lp¾VÇ0Y-¶XÃöâlw "¦FoQT Êÿ/„%ó i8€¯öë-c{{p¤ª—}4[uj"r¼Ç’¦¬G>Ì2¥ykãíƒ/×+™¹øÊ2ðJÉ«‚žã!cïðÜè-¯eÿ*tøÂ•gÑô4Þ:òo#uþpÅåÆnôø¾"´t9 všÎùÅß³|ýOoúÛ=Ìï¿…ß­×ÊõÏ@˜€´j}LbªX!ù¬hv ÃÏŸ^uT6µœUǤð>ŸN ª@‰êu_zLqiÝ—†ØQ…]}.°;®%E~Ï2.Ê‘…W¡æÀ_ÑÈ•ÈÒ<´îTèP®æ™)6Zëʈ¥ã7Ñ¥Œ@ëIÜ"á:ÚsìÄÊ庇#ÏͦZ냙3šÑ‹O5ÿµ¢go}oЄa?ó2)Q§*yï"1î–¾‚´™5í¾ƒÄ€sèBZ¥ÄÛäùí6½ô²›¤†ß®OHÒÌð„2GnéK†»ou†ñ€X#ÄÁA¶%IѵÂ/|•o‘v€Úd1nÍáÐñ÷¨‰Ð-·x.…á$Ì,oèþõ¯^×®ûSƒ,€I*#DD,ö ’ãý‰,!‡áŠk‚AöXàù‰ß#"?”Æý$‹>.5± 2’ûÞ) ›7:´,! º?»sMæ¹!ìXˆuø¾i4xEÊ‚ºyŠ’¿.â:[Œàw…·›¾n탆Y¶í}(ïã"ät½ëô·Û+¥«!K–æXªQ§ùZ0¶™ÔD­ú:´ïT˜\½2z^‡t0`VXEÜ)V4ÂÍúéüŠ.ÔŸâÛ£lq€NÌÚ)Âå,sZÍ"·@·pauaszq6Á{ïq.^nTÝ=oªm…ŸìÿUËná ÚJ:â. … Ï]çÈa§_ý›E<6bÅk¨ÏÓ ðÕ`¥ƒ¥Úï€rR3öRŒ¬»®zßñÈþ¯{Ã*Ç#‰T¨dœ<ŸÁO€†PGÈPv¿‘ÇaP½ÓzÀöÈ.ûÒ!ÃßIŒ<‹žP# qœnVH Ób(Ág TÓ‹jšd>Ç^so9gà‹<’ÙVhî¶kÿtk‘÷Ø'Hë§‚ƒJ{±¿Fd„½5ÇâVã8./?³ô&T>æ×üÜÔw &Ðu“IÕš¸b9ôÐ,§V—%súô)ʆþ…^+¾eWsâ}vþ›²¾—™aüAPs ö¥ z”ÑNò⎧&ÅÂ\`ñ†íTÕƒMaBÿDäQphjähà°OP–ò© ¯K‚K·h‰˜û­¤z@‘h}ÀÐMšÃŽ-h.ÇÇë1öç5h«Už,„!˳¯i°¯¾É@ª”ÎãÇù‰¯Cø\FÊûºCÊû6ï¡ý`—Øåy‚t¤"‰ìVim6´¬âPáTo‘ÿX+©†~"3#z^V#MfDv¯HЕ•ÖDY;©?§&µ›¬êK wž#¸ñ&DªÚE¥DTɈöWÜcrJÓSkÞ¤jÖRöGQÜÍq#Î7Á8øÐøß ³Q3Îm‚LOìQ6İ«vv¯oí¹ŽøM‚¸ø2zžÎýï úâ|#þñóõ‡+ éLÏòì ñ@ëm]ÐQrA÷úÅ¿k<µ­Wͨ‹4«S5Å·G.ß+‰bh/E[3LH83.rˆ ˜ì3 þHµ‡vuí$íwÝêú›œY®ª™_Å­~Í.°¶y[ˆF™ãáLU4Oxæ}’"ß°«(&©F'`±JîÝGZ²¯W¯Y€ñkÕiûß›ËîF몔1"›m~7#…×°cÙ?M·fY_ç(”QÙó«&—3`ùÃÑa†7úNïûMzÃ{ ýÑ©éÈ%íЫ3 eȲ‡"-R }©DM¿“N !=Ài±ƒiõ»B õ6”Y6Ó$oC íùåô¸+q–ÿD¡rÅ×]}¶+‘áÛpÒFpZñËzùî›ÆGÜÃ_7Ûi»O>r‹:vÂÙþ$g´Ù»ñlŽ»ž |Yh0¨˜åŒe %ÔÑ=ç«©™‹À³\Èýüïä_‡Ý)ÙŠÔÒgam R” Ð8NºÍ‘<(©«Ú~PÆ/]Uð鸳6YI%nÐcrÖ¶/úÏf rgÙi.„râl|œe ¼#|dާÁV|h, ˜1TEAA 8,’PMˆùyr†/E\_bᆵ/þóÙ9}ÎréQ=Ù`é†ÛB€9?™‰‡¡ïª¸ø3” ¨VUÁL"®çy#¨‰æ‹1’ñIÜðô&ç<)nå¹¼ÀI²*LïÑ>ïˆNFÔO1aË4 ú Ɔ~ÐZ¼hS;AجÕ"ùýSøÄ+â£à¢óŠÏ à®Ó_·3õ¿íþ¹ó}8ø… æôˆ­€N‡ _ Xg/Òc ©‚_¿þY.¶ÁÙ(öIh²gErNÓxñ‘Yï¬ Cª¬,Œì%—ËÍGýšQ&˜q/¿3ΉÌ#3Z?v‚o^µ~©_•´ÛÇ© rPÉ€ÌX§XNcÞï¡w0hù÷c <‹ÝLÞÞº÷—ÓR"ÁÅÃì4“èrï½!M2fÝÓÁR„ªG†ù?È5Òé\râ)Í>,…g„;¾–{áôÐmÖUºÏη¸3߉ž'¬c5 7 != ©)ƒÍíé€Ü¼ï‹¥Ê÷¸ù©îö‹y芯õWò>Ë΄ôv21]pnzÜãËŽé<]öøSŠš·o=½yÃ+š½}£‹«ÿx«°"]ëéëÌm$·„Všªƒ¬Ûz.έü4~°ÿ8 O )2&òö½» …JÄé‹EÝuǠˬ¡H˜!ê «ðñØ`¿vùŒúÖÖ³î&Û7ÙÓh¹Æ~í¿2ÌóFÑ(tEÿA³º¦›ª:½˜wÓÂÙÛ­ð“P»/<Æu{k}L¥¸ÔÔÏùÁö~ã¥v—}@kGrNbS`Þ )£ÌÜaĪföÞ+×o¤ù É£“´R‹n­VE`–>Gh¹èÏ}ïc+@¥X7·+þo›ùÿr< »²–”3ŸJ‡Ææ0Eãr!Å_WvÍíý¸È7z¨¡ðÛ 0LA¡¢¢~æÙâ_ ãvpÚØ+ÓqϵcÊç7îâ"ck¾”êpB—ÇиÃÅšýYL,ðÍèÆµ—$ήL¡¹&žó¤Ö‡c1F >2ÎÏ ï IõQC'G|7jïsØ8ô™°‚1‰VñTŠ4ýlËݰ²ÅÒÁD/Ð2—2¦[Ö>£Ä%n=°Yÿºás ð=þÀ8‰‰g³jàôÏ\ï»ÓÖh¶Ð,a˜ù¬1KèZäÒQÚçóþ£…vh¬Ò–D÷†Ò”ƒ¿X~L.VêÅE¶×‡GƒÇ2ÇdÅ‚p@áÚ.g=É&A~”°q}!}á&­ 1ìýÔTæ0ŽÅ ㈩°ŸrìZ8—ùb—j´ÞÃe¨$E‰ýœÜ94?:¬äõã|ªr™ÔÞÁš‚"¦Rè¤·à–¶¬lݺ»áú¬_Õ_~«CõX˜~«3õX?ªÊýV.çÑŸžõùôoç¿ä8ŸÞAG,SN‰û ÊÍ¢;ŸaÈ ¡H‡©Ë2ïu{Q›ÖmLE‰!E v>&ñ1-ÞȪkäÏâ–š#ð­ºäª»ð¢æ[]2ð K?~(µP¢@I Q ”Çe'Br"ŸZ”2Ñ”œÛÉ 0¢P®vÿä\oO‘Á¦Û ‚”¨ÞÁW–ÔÔ0,ªÐ¢Ö D;%•`®a *»$²a2™’ôI N»{šÎk]öÉg—!R¹’èæùˆ+r¾ïu¿énõâë4$9á„  Ž<4ú/¸¿§lÛâ„u–ù‰Q( z'ÿ~Ÿšæ÷ØãAó‰.ÿtQõi èA•?úA‘+NŠ}h(v½¯TȺeÑZnØf‹ÛZ°ÇÿýÖ–ÇÑÙù/«#ëº6J/ Bà‰šø>uÿ6Õêx2wßô'ãÃeóæß 1Þó÷ESWsñ\®Œ,1! (“3™cREÐü!Ûg8*…Kœþ.Rg;³·ð·]É1ÑàiFðûXZ,ò”ã¬a\›¦Óbj„Ìés1aý¾·OsÐæ<"ÇÉ>*Ö1ÈÁ1-°u’ª'…m×Íóy£šýwñ¶VxÐ/箟ho²õÌc‰Ì9óÂüg>B…ë‹ÍV¯©s[¶š[#Uh{Ù»SIf÷¹f ]Zs®8•¿bo£Z,ÜÎß$ÛŒóˆJíúpìÿùi¦;Ïšg½@‰Ì UÜ0¼_/ÌÁÄ‚Bi‰p@ód`r~&•q£Ü±Ïà§ßÚKI¦ÔUiF:÷1‘t“ŒshÒuŒÉ àç%žn …à ]]|0ÖWÛ{”Ùñ1¢®Ï–„`²’ŠÀ/ü\3 X6i™„ò’ÿ~eÌîlê+gXé,¯+‚-" bÐçQc €,Xñ1/#Ää=ŽŒ³Å_n‚Ú¹Yß· “mÙd­ TøZ,Ql3«¢×£4ÿÿcf$ÝÂl×ÌÙ€.{Phª¨ù®èîdºGªŠì×Ñ ×ªÑzó#®{šÿÿüµ3°ò#Ï[3³oÎÏæÔ Æ'H?uzc2{M5äÝ@¨ú2Tì­âq "­)¦ƒc 8Øt0rÊæ¹lCŽ”¢õ^Ú¸ÊåÛ:5Ãi•uBÎÔÚÙû×WÚ–9ÿn›°x½ 6’ø*`;µX•9Œ<7ÀÈÓú&=r‘“ŒT­¬_<|w½SP޼ûÿÿ~}Ô¯ªBf=¦M*‹ZHáö\fžH§éÐuÃÔY ÌÌ«z]}Dõ1øá½­¨H°ß¶ÅAßöd\X†±xÆÌÕŠ˜‰ù›æHÃ%@t´³~'«N݃ŠËˆ¨¡Râܬ²}2Ôeâ• ïE]Ž-¬õ%Ê=ð5¼FsŒ‘œ¸äuŠÇìôÙŒô¯]zêæŒ[#5FAý ÃüŸ€e½Õ¦&°gc„»ÿ~ѳ½Kò°8Ó7¥Ë"|¿8Q«Å*p/ð ÁZ /‡Î%¹¤Á÷2ääÏªÞ Xñ/X1îÑS·5­^@M°¬¨—R/pJs·%ª™m8Œmÿ%¦P\ ÕÆZJLÒ4ððù~ØM ©¹â“ƒ sµý m1 T²­Æ%Ñ“*žCÙ–3Õ1lĪÐñá|`Cbv''ÿ,Ó’(|À¿ÿ ¥ ÓêÛ`© =.d+QvøóM"J%Çå*ž@öTc=ñeúe× yÜŒ‘Å6®õ0Lxƾýˆ3LElÚ9ö誳^í8‰_Õ ¦ñѬÛùŒYèaŒ™h&S:m7&~œ« rSÐz˜*gu‹=ÒGñW—ïÐXáöÇôüMù¨ßÒÕ&5OVdGUÜ#%¤þmIKv/mµÑ÷9†3„ óS¤U­Ü]:umÿþÐÛo[ã> íAÝH9‘û–‡³á ‡%Œ/¶ˆçˆŒ#*ê½àŽ®Kµ0÷ÓŽ™*1`¤C4ß²;ÇzÿÍrÊä•PÐs,ºйzÓvæƒÈ…?p}Ðÿvæ™—`ë§—W¶4ñ–»´ë– bYql[t …Äæ°‰OýùÞ"éBÆ œl:q†~¼Å pböP€¨!X©kŠüÓB{wh²éœÅUo“p¾ú؈'ègà¶Ò£Íº RoDƃÊÑÿ¸0D²0@bÎâØÝþƒ‘‘­Ýë/NdÚ(ô$5™ª`R¬\ßAÌÕ†ûdýøØ_&›_Fá+ÃÞNág ‚l „ì™±«OކÃ÷«¬Y¦”Ë:_/K{rœ.¦=—Ä./‰Bd‡­gÓ_›@<÷> Gäb|$+\SÒ™õôþ³fš? dËÌdJ@mŸ¤°ä’<ÒÔV¹sí"Óí…™sMé‡â×a38‚4cµ3P[ZešBº™ÿOÊå7Í4>@1…k(¤‚pYEç­€ÿMÇ ]tt ¹Q6Ä%.xé†+ÇsÒ™Jž WÓ›\îŽý5³Ç_5>ï2*Cá•#ìc´´Ä‡®8um`÷ÿ,Tj0PÛG,“WÛñŒ=.$Gúžð±Æ’A›Ç¯Ëi!?*GiLb1 QÄdjÇxpnϦ ÍHëÑ`@|¥¹•(½ o;/鼈^À{ÞºA˜:¨Ñ€S­bM½Í@ë»þå wî5#+[,#õ¾ &ˆÇg¸ÙPUÁm­c† Þž/ÅîDa¤üã_‹÷¤7ª|÷"Ȱa`¤bú(rRÕFíԈ͗D%ÐEg5nÈ¥{ë§`6õ _^Ï8€@ðäC…´ü.ùšÕOÇácÇácCð®@›XJ §, ñ9.7 MëbD wŽœ³@%/•KnG剿qQðÿ_„aly@‰íÇ…GôF´e"-J'ÝeÚ¢‡ÉÉ~×C^¢wg›]1ëMŽ¢Èkì¼3Æœa:'^”/Œ"”„ QæM£ ïõ3Ä1ãšÍŸÑ¤F}µ§Ùb]©=¶zÇŠ\t©Àï ¡<šD‚Ús,Ed;sù^ÕNÎ^ÇýÓèê;üb—µÀÏgu‰\ |ÖÂ4‡~Ø5$*h,Ù¦xdDIåé¥5Ý4qa1\ÔÁ*À*ê£åš›>É%9‡ì΋ÉxBКUxõÚžhs~ÁéwCµ¡_›=§³Ö7þ´äÞ^2½¥ýñwXÄk§ÂNûyûZ¥Ú…†i_ë':ŸyèpQì”ǤtPw»0(¸õŒÊ‘÷›F¾k ÁvæÁ›&£Þèýû,°ÕFÄöR¶}<&!ÁS¡Ïþw÷—6Æ1ñ9†ÒèkXpwâu-ÒÖšã#¸ÅÚN…u©#QZ¬b)˜ÿmóÃC¨§„Œ­ß>Nšª[ÖæXÑ,&ì·âbÎéšÂ¼êVÙ³ǘ+FœÜ¹gá\ˆù´ëÑÖ>ó¢\©÷¿¦Å ÷AxD çê ŒÕ973ן‚U© 4wâ Y[­Zm4¯¬íÁH$7‚%v<ü4çŒMs¾u8$x%Fë£×BÉ‘5h&(Õ×¥óuìéØõ*¢£¼f%yêxdáH’©¡Àå²Ì ¦CÖ/çʼ¡»Aãqxg¬Tª| PÒˆ©¡E›o›²Ãí¨§çUAöÒ@óá¼ɵХêdF˜)›C72$ª?$§\Ow3Ô×ÐỔšb†Ò¥á†0”!Ïï«kÑ"ºÒsšGm¼±¸®Ù6Ð|ÔòUâòï8ÿt&U¡DˆÛñM`QvAÊažþ,=uB{“ñÛÒ°PPXžû¶u¨gLõú>·´øÝÅ }‡o®†Y}†¾/úy{âNµå€`Ï8R‹ "ó8¤gm\×ëapCr»­¾Fâl.ˆç×(V´$mœ›Pð1³_Ç5M•àVÌïG²šáFÈCwV³Üé=˜ØÑױݹ_@Ž!¼ÆqQt'êt u @1–¡×p©H:}lDÊÆaàÆÑ¹˜.’ª_¬>ëŽ>0²Ûkôm«ÕTð³SÑ9Y… Ê ü¨/¨ÉÙV±`ÊNxñÐ3Éq¿Þ½GŸ1,J N„àäOW“dé Ò–¥bÿL÷°.NMõ^ þM7ß$êÝwÅÂÑñ$tö7Ûóì鮨.øEZ½sºæW; IJþ“ÔB,±>\pºà'1Ey¥Ž=¤ºÏ\Àè $EJU|©ÂÃíI‡Ú‘À¤ÊÌœ¦ƒJ Ésk`Až+»Yƒå¼ bp³©¨»º1{kP&‡kE(‡Þ H<áò Ó‰W^ ˆ‹gØíÉÌý¸µ:S½ Žå/­8–Ødáô¢P½–‚èÐd è’¯¡LßxÝãŠLœåÁSzÏŠÔŒ¾ö…¨@Ǧ!šª ¡Â@ RNükÑF@qá­þ³âŸR­Â> ÂQƒÇFjÖŒàí,ïë¼ö~~›/¸»2ÇáÓÌ~6ÃðèÇçˆV “°è\׺NÅš-æ*¹ÈÓáÀã¨Ò³ K#ÍÍ”éÉŽ"¯²2H˜†Ü`m£Ø›ªk/d¾MG­ª„Z{éª~UÈRt†’‡%•uû|dhƒà±;ñ:Z^èãp%2Üî¶¡H—–‰Áá½Ò´¯qäÙÙB‡…1U÷r6 š™úƒÖ±„ }0$‘ë½»5оñ2|ñ¸GÅñ[hŸaÂÛYLËÕA;âßIãlƒ‚û«Ábn¸¶b«Ia¶™q¶wå{À5¨ËYÖZÚÿB)eg¯D"Ìcùï&o ±ê&ƒ|IèÆŽšè$‰ôè¯Ø¿ÝGiã⬻uýØ‘Rê£4'[×RnÖ;Tz·zÛoàAK´±óYòŒÍÚ`QudrG³Ÿ9»=€?ŸÖî3«ÜÛú• Œ˜•óvv?¥ï‹r61W£–r2l gÉvœX?{††›ÈÓèœjn2ã) F þd_H§Ž5?#íúS8=ròN!?¾íŽ}'ù’Íñ¬Z„WúNE,E«tFÔa7‚á_ÀÏH“ÇÄYI#„\^ˆ‘¿¼kÇù3JYIÅXæã½ÎïÎkN„OÇb¬ç6­PƒB|ó¡>ʾ QI)pÉã1ûnWÄ—>ñβFØS"[ÁÏ(ñð>á¾!~µ2m¨He[$ãfšªT‚½V~BIœ[I(]Á”¨Û,Á#Èîaï&þL¥óÎp×W1‘¬vá{Έ0®SÖ0¸g”YÁaió<ö ÉŒÂY¨b–­¨'?çu—e’:Ôp†Æ Je[ô+ªC÷o§chžÁ5‰PIg™‹R™ß ¦€øƒÐÙ(æòµþ4BD§LÜKÓZšö «È¢vÑò8>œ!÷SÄN)8”»égÏ‘ˆ´|®ìî×NÙLdè’õXÙ¤Òwd¹¶ñ¾†9‘¿vÕ¬ÚÃÄg¶?úä6pà`K J_]02«ÊµX+1¦•Ñó=b‚—ØZĸڰ¢²+þö„Ë¢Å6ºÙ޵-´•Ï$¼—Q<Ù6l_ ›æ$¿S?ᦠŠ^”ùˆ±<; …k¸bÖŸýä Ùµ 4wóص8‘_^¨1?ne­&@ÿ¹Gå)DL~æ¼ýSî¿Qkí?ñ^T<Ì¡t4šÓ›R´è´[ÞŒƒÄ{H7´ôãiü’à ²þ`ÙAåk.²óÛý|Ä4ÖžL1}LG‡ïí$Ê»–g08Kü‰ I8û±‡kH‰þû¿âÊwÂ8ÞÖÙ°ÛL!²mˆViñ£ËIC%Jèe¾Ü½Þ¬ŽPÆX _ ú›êÒÑD€ù{_Âc4WÅg¿…µºiÖ·`AuÖ¡©%[ "á'Ãôžâë)Î-êÉl«©[à^Ѽ_\¾u«ªK ENØ.ÕA3ó‘h¤Nc$ ™ubåÏŸê­–ùË*ïÑ,Ö¦éZ¹6j]|j/‹’©*~{åý?‚ò‘Êù©ý|ʾuœå©=)Ýýä:Î<Šw¢¬bÀñ"Cå;¥p§¹á…°C<ؼ‹³7‰ð‹½uQóó¼ ¯·kê0Qþ êMYLÊZ ~5Zô¥)Úö-5AžkÉV¸HÞ?),/W“QzÚ3•jõ##6ÉÍ!"KlÓpÛ·,K-F™æ£HpŸ»~öVÁ•z2;?‘žiÄóqZ´ÃL[#»†•³ò'=ŽÑÎ…Ò†z64Ó$ÞmbÞœâõxÿfâZ#=-t¢o}ú©JB˜ÈjÀ“Ã2inÐuPÊ¥¸ÂÚ 6(¢ Rå0F€¨cŒÐh&rà…¿WR¬m}Ï{ ‹t{vÉܪÔVìnØíÆI‘‡ã2z©j4öE–BRWè’+>—B8[ÿn÷ÁçeÜqÚhúêÌødÄHÌ?pa.ÍòËÜIIÔ£^¿¹pO¦kÜšu U‹æAÖ¤$4›<¹åñd~É™3²n”÷ÔÂN¡ê›á:”ªg=H‰!ô¯õ·h®G(ô½ä×db\=Z´€{dµúöð+ªÖZ”;£¶V8Tèû cJÏG”~§t໌MOf¢ç2{™˜Xø­Éú–g„ÀnCà—ÜÅâ÷ Z×–p·üà]K¤µ2â–Â3òߦ(Û§ÑGÚÞ 4}žcÜ:ˆ€jÂs„¢!cN'zc[òEm‡– AIb¦B¨{sää£Ãðùµ¢é¢‘3Sôðê±U°ºXÆ¡©L§1E*’ œUØ&ÖÏ J¾×~*Ô~ {ø¦ a”ÇᥑøimÄÀ¦> £'µ/…s©+ò®½\Š›”þÜK£T¥ 3 ¹äX`o4ÏYÃí“ð›»# ¥sºn-üN § ÏׯcÙ𭆧ÇRk1 Â!ßM¨µÛ“Óåf^–¼ùcï®Ä×9«¬em¦=‹eýMí»Ê!ͶH€îç-=›~p5¼}Ò×nŸ.!_êIObÉæ÷…@š¼U4‹`Äá×usç`AVï0b¤Î’ªvŒøY í>Õ2‚{Fà­›ŠU‡¯I+¸e:~¥åàž0œE¡^Ë]¡<<€è[Õ‡é¤Xɵª§ ®þâuIÁÊs‚ôö}èyèû$³2èÑÐo„ï³R;i‘W°{&kÿ;NZ—P*W¶²ý¸Í¸S{,Á j¥[ßJ-‡°´z÷ÈÇbžÀXÈÍ ?½ï’šG´Ü•¹ÚñËÊeIK¡êã1Z}aoÊ;fˆ…È;£¹™V«eŒY“WójŽU}_žRPå¡2 cTjûækšÉnjë¹äHœŸpFÍëk&Ï=­rkéß•KC–óÌ”©¬¿žÐ-äKÔsðû>BºŸgYY|ŠaLÓ:µ˜.1ÔÞu‡ä¡Ô3DP/@s.™ßèÀOIÁK£Íp¥Ë“P(°êIªƒâBáN Õ¶î\á_ã;=\—ú¿¨:&«HåÍõX¿1”ØóÞD¡¤ = ;âÍzåºÁð†òW¸Í$МöF±oøßî»`òn«„dÀ•rk€ˆQ¨JâèÈö¹J HË*Ó54ó];ál•Úå„×<'y¼›sû–² ðjý~{à+@‰°h«ª=pÿ½†ÔrŽNioùú—ÔÝe«@ÑíQ!òp¹œHÓÒ˜³_}»Hs,uFAÌ8r‘8m¾^­âA;8b˜„ z`t£#’óåöTî©™šÑ÷‡@UJNµI?*I²ÛèŸp>f½3=åËüúGrzÍ5¯y¦ŠÈËœpÞ’ßF¨þo¡TB)ùܤ•i`6’cárU·6½Þ'ƒb¸Ä®Ûg×^Çá·Sóܸ~äÀ¥4 ¸~-9GÓMWcæi&¯E÷>Œ2•ÚþË›ÌÜOÍ£½d}»‘©ê˜Èý5—£Y‹ Ái ÀõJŠ*- ¤ Ñ<Û{;­ò¹¸µAV+XÛ;iïÉé¬qvE¤¶ëSì;=f¨Ó<à ¶CÀVeòÏ9…htµD{¢lh£r(£ Ò‹;§’öž†Z£¢ëù¾Ëò’2\jæ7"qæ È‰ráB É™Rì‚%g³[­cO+?$=`BÇäl? )± ¢ú0d}{±7ä€9 ‡?¯àýú›Å|”&t<…C"%óG6·›~•íãšÿIñ‚Å'Žº/„ñ=Yúpà±}”Í«Ž7»—DRÏÈ!Ùo™õ7¿%Sš¸ A(f_µi+Œe™|ˆ½Õt–H^¨~õ¼l8¦¦yŒKkRñ‰,Ú18)”vÊPŒ:Öf”<GG˜zt±Æhù+ç3MÊœŽvdÚræE7ç 9’'Û&ðÜÅN¾xsÊU-é/GÝ\«c;q;¡§N·vsT+îÓ‘/ÜË‹}^ÁÔœ!|"š––&bö=¨w`P) ¤ìY×£œÍœ KMûªjÄ$Þßyïþý¼WAØ0ýXKÝBôÈÓæÅO˜Èƒ6æç°0µÀŸ¥“Ù9¤rìY‹(sC$öA4»;ABª¶x}I[ Ê#Ðóv ®md6ˆàcü Lƒ+üûHfÙΖª9Ì-³¯17©>âß®½_,R+èþÚp{ñv´!W„‚g$U„áÈÖ¸’ëØÃTÞЗÓ ÄC¯HMŽdMIÚ^éä¹jÊþfÛ&1üÄ}Tù =M\›ÖlN|¾„é t1D’5kJ„§]d3üP‚bë™i úÜ'—HbðqS˜ ¤³¿’¬ö¾(B C ]uØžfÑ|®Ç-ÏcŸjØ™}N®„Kâi‹>Áqi‹4žäêb =3ï–qQ,ÅkK9ÙÿmüjÆ9G1[Qþ¨¸Ð(ªúùëÓÝá¯Y â NÐå}™ò|ÚEBóŒ1Lܱ:=».ÏÅ< ÖÌ/ˆŽWÔò$iL%£Š½z÷t4VWùÚK–á”=DÖH P„~ MBÝÍ0ÀÊOd­«tÈRU{Ý÷"vŸ|º¹Ášÿôžä Š[Ì­ücá6‘扤-†VåÿV•£d/Ó™£“ð#öH$®T×IQ !¼¢×E#xsˆÁsäaXÀ’T¬ô™‹ŽQ:½<êcjããH{;`1ùóK Ü`î4=rX*ë5¦ 1@ÔÈz5a‘ôü¯¨i[Ûú"6ÐK‘Sàáæê»\hLŒôÆuÿ9ÏQ(¾Ë®îUzÉbä°wjÈñƒÚœ~l„s€ƒˆVF2-ÃÆ4¯ö¡ÞÉÓ3«æPÚ"Hèb88Å臂G£2 Ó4’L耜´U„8–g+ìoÙšíaç"ß©’”Bnm2ã­TÒ08?@?8+úÐl=šÝk´ E)ê¼,õÕ=‘iݯ½ˆ‡8W-¬cª²³èÑbNšbÍÂGBøÄ%·Jd*Œ¡Êz‰Qß‹¯0BÂ?”•c¼d†×ºaUيÕЙºÃíª!öÔ0ü€ŽWf|ünE‚­â¡Ð°Øk÷úã=±×Ñ'<ËËÎñ{Ÿ}Ç3£'þÓª67æpíÜ1.óDæ‹£ãf~‘ÉM®ÆÄûï-;vÙéýÑÙœÛ]r‰8†ìåPþõp´f¥d¡!)0]Þò#êô¥ª·žFzKÙÚçÆÄ-¥KùOŸÌf™®øI¡ëO²äP8ØíJ'[ç‡S®åõR„%˜nRÖ¸'õnÅE»Aü¹ßp¹ØaL`bèí¬• ‘„h‘]Ní’‚Q«ä/AB]Ú€gæc‹î0ákÛqÁ8æ\ü¤ŒKµõ˜® ·öÅËKzlZÊ@Âc]²_±gšeæçІ½¸§I=ŸÐ:aD'“@vúq[ÞÔ&â8äB[¡Ñ ‘¨ƒ@mÉ$’EFnCÍ ù‡M®)_]‹$"ñ;…–áã=fÍöõ×—¬W'3­òmó×ÕZaO·©eb„'ù+°·=F¾¥ôé˜ÀvÙä—ÀCát8ÆÈgö7íUgR-˜+ß­4 ÈJYhà7î0ç»t” ÇáíW‡µ¬?Sð僃¶Wwæp »FÂeJ-õÿkH$R+ÍäšHVŒv>é°0Ê=U€O.';ÿ7ÆÍØœŠ[³E¬ M±Lj%rêRŸˆçJšóWgbaT®²°¢çFA™'2âBIe­³#Gòˆöç`kž¸}PèÈU«XP¤KÐ!uJtuŽºc7â}ìa©ƒZÄ}Ïãk^ô«çÓ½>ÜUÒ_3f#BÅË”‘ÁdºAy›;qmM”Ž'G]A†t@˜Cê÷BÇQŸÑ°y”å!/âì­²ïBî-…罘ÐS£ž½ÞŸÕ@Æõ) ÆXqáð£W¿ò'FÑ;KõSEÝw§H NN8€«§R:HÖƒ§൰þá}’uÅÚnr¢ É&ëþ“ÙØ•9& ø|¦%‡*ñA:ùŸx@9ë^ÁÈùë`ò(‡£Ê{LušjQ¥0èKÑofÆ×µ*½`5~j(þ@Ýß1 O¼eOÛ®ùÐÞ1HŒ¼Å%¾™%,eû$‘•´ÔBˆæ¬§V”Ç 5’nvD«¡`AzC"lÒÙa„˜ÕÝL>agT×õæå©tðXÂ{~Óˆúm펬\ÐlhH–avß-†êé{•4ÈÞÄ¡%XQ:G0ž^¸üb°¾mD®žâò½U¸°)›N&e? êóŠ–žÿ]ÑAÐù27ڰݹ£2 @½hÜJ§Ë<Þ])áÿq0`[©tÈè×èÙÛŒíNŒ‡ie7B Æx¨P9^î.#'§z߆Îó¡2á»5¦Ø(ð4qü à¸ü—zæé9]áuúüœd@Dò•®Øñ’t^h~ÕÇâ¥Ü'x“Û.+"`搜-ÈMüZQä7²”™ê;{ßA²òÓœ‘U´¼·-bÕÕÔ#¿1*˜¬’-›2ô9D;s³D¹ƒ¡ ­VâþŽ_Î íÄð½-z½V•ù©ØÕø‹ˆÕuCâ3튠0ØÓDq,_i Ë~6Ä T*¸’¶P.Ž>wׯf9ÊšáJˆõš|sÓá&#éÁÑïSÛZ¯ˆâ¥rÐÜÃZ“¢õws¡r¡±¡‡q6˜\Jöåd¯Õjª¤Âì4{BaÜÿä¦k ËXNè·¥F,“‡ y¼ÎðGºþâ÷¤†òM 3½]zBoÓÕL¢‹‘özJÉcÛðŸKÜ^RÂ9çk´ûDèÓfJ£Ö{°\P@¹oé6®@é­¯ú§‚»"…ÑÖ-Ê)^…X“¦gÇ…,ê™M$ Cwsç¶Âôp—\îm?8\¤… Ý¿¨éÈ7È(|2"„7"•ß‚Vl è dCòµcPƒ¨O¼ìQPo/Õ‚4Ô¹hgm³qûÙÄá%&N_>‘´.Ò`™—»ûÕ‡i^2‡xñZ¸…pnÐÙ3Gˆósq ±¯ô C±G7p¡x;©FÄ@uO%§±<“»ï‡ë.„LedÂÆºÌ¢«ìÒ‹5ïÄÝoE¶½çsÙÉNѲ¿™åFÃï®Òü©»0°£·PzÜ¡bÙêcæ#uJrd\r[ùŽBþÍN\™/v8±ÍàN .ém,ð½ƒîgó/Í0«ðG4Ãôú±ŠÌ 7@¡š{ÿTÙ lôè¬Bëöë¾.”dÇ ûþ"´Ys|6Þ®eŽjÄç;[ÞˆgڬƽB¡‘@KÁ]èJnÀyU __¨žNqȾ·‡ Ðkù'œW!­ìÆÊnbSr¥¹¶F}§@"•ÆÊ Uª}ó:ýÑyÏTrbŸæ@$¢ëÙ}†)¡ýyí½eý[ë@Ï)c—=JïsÎe„Ø'س!u1SW‹¿ª¿…âláÒ—Ž¡œg×L`’?ìXÁ&Ên˜Œcá\~'xNX£ib_á¢6C131#l\Þj)hƒ/*XJ1µwäd<²±æº™‘JŠêø!†PßeJ&÷|:Ž6Wn¯ÿ[çªc*_01™j–;Àav Sˆ°_úžÌc‡n •©VéX«¨©Œïò ˜a;+…êrÇhÒÃ%×ÛÆò²[Ϫr}šý)?¢'7F5’D ”îîò­£UøsT4ß«á"Ï'Ú.BÜyG•wÇÒQŽä†Î# ¦R…ßN*Õ­¾<Šï‘¥ƒdoõÃÀQ[À|øBtë]u«ÒïIk}\"Â} Bäë–Óå¨.ÿ,(Ø3;à™•be.ú†ÚÉôœAs"ü¢)ùµÙdî[ýÏ=Š3ŽV9/iµ¶m³&yÚ‰ïS)Þþic­…“ý¡Jß× ™AjUÌ}» ¬]ÿþu†gž¥‚ þªfÀê~úÌuûÁ/³ Þ@g@ÞõaIRÿ){]/”n¦kü5‹Ê ?èÿ-$ØuÔg¼æÏ¹ \£lK\ã6’«—ó Yÿ'4*ªÝËÌA¥ß€ë͵qú:[‡œª°áý–€’ŒqÚÉlñO#k´2¹ò‡Æ*Ëvù]#·wØÖÇIØ]5üÓ á4»áWóÞ!®¢ÅT%×_0çt`ø86¥Ý³¯¹n•¿Nø¡ÒX®Ûe´ŸYpXÜ¿®é¶Òí5Í´qBºJ‡ÑüñXc¢«VhŒö$f‰'4Åx†§g›ød°ž¥×•®u8˜®Ã¦Gz\Æ?&IÙ…ß ÍJVÛw¿°a¸Ž`±‡¤ÉÖ!.Ù3¢Ý ™~·î$_‚cb/–¢H[äd¨AðJ’ÿR‹7Rv¿IÑ1ÞtÚKßT‡-êëÈW}ò“¸û²¼wuU?^ U šÔù¡sÒÉJÒÉkîqÿYʰ´Ê9•î%ˆÖ¦ÒaÃXҡМ*NÈ’Iª 1e‚÷°rg!-w%ñ€ó~eÁP9XT·¦7õf |önLY¯ÿ ~‰>¸tÉ” ¤’Nacè‡b˜=Ä·NÆ÷[‘ñôŠ+I¡èùàuO™=^ÝÈ-ç#)kºúõ2N(Í |¡ReÀéÈò²¦óbÐ@ÏT]ýÃt|{€xœß6|´-} óÈ1³—zÍÆükâgàÇÛ¯âJO¹•âZ8zN”RlÝìLoœ‹R<’3_²¦¤°$ÄObU@ o,¢Å§X‘yˆýWýùxQqøí8Åoó¹æÅ‹ÌùѪ£+dW@¢å£K¸m"á· Ò¼—_,ù·/`d!›š± +œÊ!m+}„q@‚§'1áÕÉYȺÂåu>J`¥¹y1ÍýøNÌ¶Æ {liG(tª§L94h±þ‡íÖMmúSÓî´¶ŸLaœÌ¹-Z–‚ã’8Ì•œÅL»ýrûŠtQ¿yÉÂ&ןÔs‘™æ4MxmwwPäá’¡+W‡*ÅLHýêjï'äº*h6„p­޼÷õ‘H꺠'ôdW bDšŸœ’I^Tº*ˈ­¤rL®±jÊ?f³óŽSôHCdîkPº…šÆh’;Üþã’Ű‚ßï÷J„NûBm÷¤~;‡Âú~ñ䈯Œ?i9ª¿p²Õ”NOQÛÅÐ^TãÒ¸kØÄi@,Q.vKh™²¹ŒÞ+]£žœä’‹{îqÿ€Ð£vQ+L/ÓC·ƒ!üµ ˆó>œÌgKiÀÖ IÚºô93š4rÉîÁí'þ[Ý…\êÌøéðtGX¤›ò×Ð)5]ùÒ4NÜîv {%äþ'œ²ú‚Lc›yœfLå^ÜÔcö(æ²'²|àåiy#~¦4ýM)¬<¢fþ yenã3ÈÉ \‰ç!³\_ §*=ë\´j$˜Š o‰e_ü**`_¡}á4-ƒï14Ü}„"AE¸bh˜zm·¶6(Ž4,ïð©Ý‰ לq;ï¼&ÂáC ’û#Ó“ öWÖD§¼­O?…,hh5±Buðdäz©m lÄ*’zÎK”³ñ§8kÇÍY3ÖãB^ ƒB÷”ºQu.¹"ý'Ÿ½:êâ˜C†|Á~O'²ìò8uc (áñ˜Â=ére]€µ?ÿxÀp—ó½x ÛRmIx±¶Â.‰Qw3£’é4$›õ09˜oò”¦¡‡yçZäMjÝKtqre[ÔwVúiÞàr²Éðu¹÷**Š»âfSª'Ž<ú}zÈèÆ?O’¢ß9ÕoF«ˆ…$ÝÁЯû<+AfÕæm¹fÆ\ËzÞÛNBïSŠi’Ãýã‹7ŠíoªL¼i•Ÿ¾Y!Žšzžheèdé+uðêc’È–œ“[ؽzÓ ²rÓd%Zø8^ŠVcr`S!'#¤•r¶æL ¸ŒDP6_¬³–»•“g6ä¡Þ:ëê*hd³Ù¿Òl_x6 q€É5= ÚÑKsùZÍJ~¢»x§é?®GJ~òÄé6çÿE„îúøœ1_—úyýßâ¯Ýžq‹ÎY‡r©pÅåÀ¤ÇŒ.÷ᅥ”’]¨WJÃÉ-ÒÚwíeBëÿr>ž“Qžá¯ŠðÐ Œ}÷nñzUñÌ€n¤o?ºÿAû»Å8ä,ö¤„à‚W½JAá&þ7Ûû@n¡-Y#[’uáIN»U`ñã?P vžz„ùì‚ô”¦ð ¯YhŒi¡Ò¼âˆ¢‡ÉÏïìkØÎ3ŸÌ4ª´ÎöÇ'zÞ’]zQ^ÇpyB2i€<@íé[Xκ¾/Cnˆ™A÷ý+‹ù™ ¡[’>–-¬k߸`×Fýólvz[)c’×V€~ÑÜSam¿ÏK1k‘ð•3\<0-Y)öÀÝ›)ð‹¤2Ž›ØçYµ¤ËRbàyá(REápøpgýÌñÝíªeˆÏùÑ\ñ!öMu·œ8×/agaƒˆDÞñÆ’ðàÔM õ…¥Àö¸gL¡â4Ôz™é ¨VïÙÕö 5ryë™hÌK¼´›¹¶üva–¬û±adÌ•ÈóGÛÉA=£~†aÌq«'Çàðý8ÀXHpõlÿLI•§@-N/~k„!YL€€^Kˆ¥å#êÔouNBs¸b@[­)àgS¶—ˆbÅKB›ÿ3T´^³06±\ñeöâù°ÜÍÎI™7Ö੾󯯀ã=èŠNqBˆ½²Ú–yÕ‹Æ‹ìÙvÎS@•'yÝüü(göóóùY¸7á°_+¯¼X#_š+¦h×nÄË%Ü›Œ‘Ž9QZ‹žO¬×0Ž6õ7®UÔr‰s^1JÉ©7F³o×ø«ŠD-g×÷Ó¡Ó§f‡T<—®1£ôd­Ò/ê5Ì«˜ÄBœUý€{¦8{¢“ûã­›‹râ™Y1­ß.<É`5ÂSa¿Õè÷,‘q*‰XÀ{ØÚáZª"Ç -âî”í$§a’#]Ç,ªªP’ƒ0ðoŽ+ñd>×gQµ_fóþTþW7«¼r9%QêÔ0ò¡òÈ/Òǹn£ZÖ7ƒ¯¾nµBQq`Íõ"Ç€»þIõ]C’íÛ~ÕÆ»ÍJvä]þàÑó¬‡SQ§> èÿLy*(lòflóžŽ@º~JçÌIt]\Çá臠ô?ÔÀâC0ÛÇ&±søëÃÚð/uÒz5ía2=xŒÏii&<;0?糄ø‘DQKùr;c¬éú¦\µõÉÐx¬³:“Ýnyµ,!DÇÙ¨¨KÜbÞ—X®Q –s¡.)¯-Ü)‘O>]ãŠÈ\A¦ UuWr‡š#_ÜßÌ €–‚SôhäŠDÍð]IÑ›—8· ßi?õ»gØnr'e‡Jò¡ðm“nAˆíVdåD "ƒí°‡_Ö)áÇOЪ³<£8¿®P>Â>cò ••ÄkÅéÏà3èuá Î÷(ûí-WSTO‡¯¦pôA¢ 2ügêž@Á´1­Ú¢¢ß‡ï娇Ðèc,;æÑ Eæ´…£éPù?•#~!¶§7¶4ª“‰5)å=NãlÓϺ­årYw(i0×ĺòk… ¸ÙÆk÷ù(KS•õØÄÙä9‡ã¤kˆªÝ ]äb× óaß(œvrÒ¶žmÑ.Á€EˆÿM2“°/ÀÂ#Õ#߸¶û<uKuNž²É9»‰0ñ·0Ý4`«Æè˜&þÏL‚ÅP“@çlJÊÔ{z¹Šê_ @…œKXCl·BÞ^të*t¹PÚäje–ÿX¨}µ8Àø’Y»¡É6„¸ò·-19“§±¤Ê™ÅTŒˆ`¬ÖÒ‰ÃD¹Â굘ya"älݳ;külä$}¨ÕÓ/çóë'wŒh†5¥|×W(­›ˆ<×Z`Æ5r9\PSÝ#nÑ•V/¶û¡ä2 Óc/„vmqÕ~¤¥kìFq`=8qÁ9®:—9}AS.y†3å³­lháœÐØó~Wf¼RnXXŽLs5ç¥è|IA‡çŠ{Ï*§”*DËöûƒÄvùjgþr*l„™õýˆªY¨ˆ@}Qiª’:Xd§K¢oØ›0µ˦’Tzô¶+ƒeÀ—Ã5¾/£ Ó_e©ŒV'ýöªøz»àA_ùÇtx“T?ª¯ì }øG´{žµÒ‚dœ—+Žr˜paÌ¡ã)ù©™À¦·¤´Š¤¹ÓÛÏ—jÛ½U‚r:ùÔ§YxÐáÃÞf¡p.˜«(#‘2‘­áV³'’*:z•¤L±@ëõŽNß!Ÿ|9ò6É›i.#÷E¾>”‡ÂÏå÷¡¡wɉï¯)#yë ™½ŽBïX‡y‰UÎ`µÓ›m7¶6+?ËÍ~7×CìböÓI רN3–¢ÞNƒ’’Éýpþ®õòJA$CÌ£ {ù0ûxÜ]Á¶;{ò²‰ŠÝ:ù,IÅì%˜Sé:è¾h±†¨¸‘°«U3"ÐMP©x[ôîv³}NžiÊf0³Û)|óeÌAîý9 …NØ'¨Ð†’n_ó,ŠF!¼SX—ˆdnõò [‡ê¦ VÅ»Þ[xñ¨B9;YÕÞ`lYPΩNžÍ´ ±æ–Œ$põÐç#ˆ$e“²L•<ŸWY"ÉàŒ™ÀVd`Øëi”d`¬¹(?íê0àÊ+7õcèF–C†XŽ“%ñËíƒø¥I@u—‚ÒÝg°ô0_¡û+óÃ'ÛñͯªgQÞqpXEÿn(‚²¸Ëú1™’Ò C¾S¶¬Â×Ç9M' ;©Ó·¢ƒ¯á(EU pV¥®¢’(HGÄþö‡/´ðRúðÆÈç´mà›ÜTÆZíS¸w¹ºoD«Ûõu`D)E “9¥3±ñXÄ·ÿ7Nšˆ²Ïö : ¥Ð£½L´~B+{zIŽ R½ú.­y=5ÉVýx—ß©Ï}ÃT­“«âÝ%?î´WÈäx´â«[öD¶ˆÃNY4@¶ößÔ>B}­Ú¹¸ó–”ÊŽàôþªØPŒøÝàí•7h —ÖuòV"nÊ]e¡ìÝØ¥a„—6²Á¹v¼¶ZA*ͤG 4ˬãÏÎÿýˆÁ G¶÷ù-[ÿS4IÉü!¾°ÈàMSSÆŽÿ:×­78Dûè/ȰjqcX†ÔY®¶¶²­¾9 –pµ½\OŒ”m4÷…þ8dýL24hžÕó€²jZ¢Oz­°ÚfR_ØÅï‹d@?£ÒYÂáÏ~‹ÍÕ‰wX\­S®&©Ia®Èqõ¡(ˆ­½ôÒÁ/u…J¤KeyžÀ#íªéÚJ_:ïAOÔ^£TõczŽôé$pƒ%^ÌihG#™»€”÷ÞéÏ).ÔCEa)l±¡‰ù×U+=b¾ZSÌO5‹—Úƒ‰qör) VØ^U†Ólƒ;ÁÔЉq-ÓY÷ÎÿnÒvl x:Ú•áö[0Á]¹WpX0/§IÇASÛ:Šû“~[ôI§éóL×¶°x’D–7ÆëmØ\+ÏÒê^¥.ï,ep‰eAÿ1µŸS×Ýû޽?÷‚YÐÛûŽxqT8zxe6š¤Ô3Û§ñ_–),RVI€üÅöc)áÐw~Ü…“ÊvÍÿx«×z¼¦[¾@š‹çvƒ÷ñêÌ‹^ÿ+Â\•ÊnÉœ|GïSÅ|LÎi¢¯²“½FÀ?o+X¶ 6EÎïmÚ›~s‡OÛ9n~ã¦5TÖ¡•0 !:²è³—ä%47ÐHðFkWvrîÇÄWì'à ?Ž•Äd+4ëxnÈÒ™ödîۂܹÁxò³sÎdïÔK®U¨{cÓÉzðȦÙ?\6)è²p»S¨ühhöòL?3“êW!zçú¶¯ñÜ„æ5hy]"¤âwŒ[ù¹°º¨Í¦L'«ø·å!ö£©Q Mr¸LG  E²~éÅ]Û Ñ0ÔUªù‡“$ìhóSÿIoì`µÄÞ3X§6Ì9¡†­H³0yWài7qQFyPà6'H Û™NÏœßãÅñ·zµi%ìÙYGcŽT;•l?nâ {Áɱ¹ÀwŽtõÎ-ßl1&6`‘•‚\òÄ Ç*­¹Lv˜¹[8ê -¯)èÿq´šl¼s±ñb¶,-'±¢8ª<Š„5È»5o‚¿5aEýë çÁk'/A¸›ª/ªw<Â:~ì½"Ûù<³-¹ŽÖ_,gK8œ ²ub£Ÿ6fòë538Ó£“I9`X2Å€;ô8§x1 dêÿDAÀ¢šxŒª˜B@+QuF™†ùEs£²Š$(Âr‰’~¸Íë(|}ûQÌyÕ #1ÛL»ý±$J|²é–¦Á¼±ÈS$8³°•Y¿Òsä™ (I ÂE¹”®F ŸZÐê–a&Õs?ZªŒ³ŒäCâ÷1Œ>‚<Ž´Ï/«D»FFÛ¿Ÿ­á韈µ‰]Òѳ㩃F‹ÄBÃíÔÈ}ºŸÛw€ÍÖÜ—±ýÈÓŸCâÏ_Ö=8rB¿ÿkƶòWì]rõ†Ê-êóèB{¸Ã2Ù“q@.0{àèJÈXa@Û l)*»Š?püÒïÎ’º3~ï Ó‡'¾¡?_&Ë!“3²œ2¢V·ëÛp9“o$Õ,:’ãóÙÝÊ8qÊcÉSóιêâC´&c ¶Ø:pâöEHá´ÖóÔLŠè×(~Cƒu6y“ÜdãC "ªLDÒ¯ª:DB·‰Ž#nØ´‘nSìIö[Éý(L!šŠÑór²•·¥íL‰åý!íÿ}svíjʺìßõÙBŠW§X¥J¦xÕ3>;ðÍ7ŵtCŠ_ƒÒûâ.R.7ûk®6Õ@;¾Uë¬=zm²VqÉíhG„ÑäãôäÍÔ«éËŽ0sÓ—$ë¿ø–ÍìE:É9Ra•Ôk]±4öÜl?¦t¶šçˆ£?ÿ8®oëf`¨Ç ±­ 6ÀMqÇ&†\¼ìy{ÁKR*9Æ1tÔøTLyª¥ê>þµJg! ¥<–¨i¡? /³z1 “ØÈAÜöUOà" D¸¹QÑbà_‘[-L|êZ³3GÆ è ý«MÞô dÙz°N„øÛ™¡oydªáP#¢±tQÊ¨Š©åí˜Ì䌴‚›õ²×X´:-ÂO2³þ•:ÌwBôW‰Û’ œ{$›Ð)µ;uÉÄÂzšÛö•¿.>JsT(›7Æ\‚ ±œõ±ŒäIÝþ…}$Q̹2€’³Ì4¶¾W~„/®o´øpSÒž:2èì«’¬ö¹%ç5·Ù›¼Ç£“ó½ pKE4vnÊGµ' ·¨Š]´h¥ôI{òK)¹a¾ï½NæŠgÖuùi_<ÂN†Hd1Øhþµ{-ILØþ[ÅqU”öaÝþ-óÿ@r¬‚ÛPÎÒÆ +‹ôW¬¸mÈÑà>'Ðú¹=¸§zðu–þ€»™?ŽÐáû}ÿ7ГöúFþßD Ioáèqü="ÿCÑ«ÛÚ7íêÃöö»ûzÇó4»sÕgç˜òkò«)ëœõ„à³ô?A¢n ˆ6£…{ñ EgvŒƒê¤—æ*¸>nŠçR±‰”oÙí5ú¡¹_²Orž¼¯ººáüñ;gõw£¾Ü ¡äUJ+±)îý8@Ÿ2ö×ï•ëo™ÁÞyÇîiJá¾$ýþ$,mLõqF¶×¸mÓ}*b›…žÇ¶öÈB*Ä/ëZO°âÐ/\¯¹š D IMrÉäÒ…É‚`;oÿ1;60wÉ·7FÞàµÌn&èÃn9˜IÄ[%”©8qæ.D«Æ¶TnA 1©øü€›òÏغ´6ÏLxm¡éú”ð…XG³,íN?Ü! Z&Süг6Cw¡¢^Ç÷F¡Þƒ'eÛÜá²n'Ë] K^·}7s¼ú‹Z­½ ñaRÜÔ¿RÏ\Å…\ò'M*ñåõ“Ójyã)ê§9Oõ s~ÖCG«” 4êìµU™Â°ÐH:„Cù®~s ]ûi;5zú?Œª3ʱ ƒöHAÁ×{šOmM:~`p7( úX ‚^_ ]&fz}ÙîJ>“in,$ éÚB=6ãZÓt…—8È­k÷Ù{G}‰gèïâêz>š©9RdA›ØkÚ¿OOdB|&î€Eºb sô%y{Ï*W˜w ¾NЧ3£úpWã‚Æ·e×r4¯ÙªÅ擉0#OÉ9e¸ê‡Aãàpëø/ ¤ ¯­š`ÌJñîM„¹`çTÑôɳ—ÍmŒ4¤Voçj$62AsH0üj¬§žg p‹¯„·aÅ>÷åBp:xÇåä~?{Ÿ„“-ñ|•WY>û}ÛÑÃnw'9¿ŸÐÞbÍ·zLœù›‡ÔІDšÎ±)JM4ŽþX8™¸ÛYqõècáóŠR½_Y¥éˆ« ¦úÑ£%t¾Ÿ=I¢å¾Ü~–)e£JyÈl¢ Vƒ’¡V°º®d¹À²ˆ­ù%²0>Ãl‹u ¤;p ]¸&6æU§ƒfж””±€.y!TæM¦„6⯹ ÿ'ð$g%¯¿ÀEhßxx'›µ~Þë‚jZ› ÁxŽ•!‰Z_èNhÈÓ´Ÿïµ5ÎàÄ<{Äã |9!DìÉ#¨àéÝÃ% gÞÖü•÷6Åúpxß‚¹?âýo¾1qÆ¡ F< …0dö/:±ï•B3å¾»Ujk¶å.ûâ›^A1þb&¶¹Ê™ÚV-*’ľ[V7Ìê@y)¾õ, 'Ј` 9^๸gÿ ¼w!óXÊÖcI·»‹‡ïï>|‹.Úd´nV5›°æ$åÇ ~ôË;#ù§»¯Â+ÙRZûʰ®ä¢;Õfõ?×ö«J gŸC(g.Ü“RŽÉ¤­ù_ÒgΜ¼@ju}C]Hê'BÌÖÆ €@BÓ0•ÔÁ9¤w:¬›z¦ÅT§xÿm̶‘‘Ü”õTcYsœòW;(×AdŸP<´18 ~ ùìOí9àC°K>¹Q‰×7mÒ|âÚ8I£;x¶—ÉÄ«`Qܤ,B#fUÿJœ‚ÍA¶ë8àeMñ·;@ ÐñÆÀÂz€}ù"aµ Á’³Fˆ”—…Ýû„Yûte }ÂjŸe,©'¸–m*ÆÝYèî85Ò=ÏG1ÝP ¥ЩRÒCç›»…«ÞiG÷G9ŠÓ¨NN0;|~m€ÆêpÕˆ[Ê¥QE#ß«w…‰Ü–0Dd^91ãàÌŽ§3hua‹û œÏÅ2lðÝÛýv®Ò¹Tæ.f~‘ðÒ°kõÜOd;Tƒ¾ìƒËšÐòûYè"Ð M ÕÞíO8ah1ýµ¡´‰¬N;ÈÕ3K0¡lç4½¼ßpµ;MµM]¾¦Þj ÐÐxwMaGus"#&H5ì$â¥NöªèIÅQ/qJ’]SâjQȹ¸NL-QZÏvC¶äÙsþú^Ü&Õôþù÷I—%¼Ãpž!+{#é1臿±&8CûÁÞ«¤jTd’­tà*·Ï!¡—ScÉF‰vŒö¶z 3=aÀ~œßŠxlºá‡¬š¼ŽÛŒ››®~üKöˆ¨_gÍx {[ž/n­e‘ûì¶ÏÆóô|¥_à—:` ï~áY‰3•­lh$¸lH¥»®àá¯q—›$ÙÔÈê˜0wI/#c~9<²·d’~Ü Û¤¿¯"nÔ<ДC[ý"ƒ ¬ÙsÃNΓ­c”mjÁ‰ð]Âû"Þj`¾Æ;6`í×È)#ÄógÌŒ‰ï¸  ¤À§üÆÞU¦@€Ÿçµ5Ñâh·ñ±à|"­Ò¦3ÿ'ƒe+G°dŠf~ûÔ­hSG¤ W¾s]¯àU¿™ŽU­ÓεŒFiÔRÔÝ ¢ËûPe»®nÉÉ…S|/…n]ت²@lúŠ<©½XàP+{±¾W5×ò|7 ‹H€b é”Äç['Kþkms˜§ÏO*Ž®‚‰8>{ú8¬’•"ôb½+Q”Ùжù¦³eC@Ûº! ¿T¨ÿºÛzˆÚ-¯S%Æi1·«¾jyš_nãºéS‰ˆt5Q7n.¶œ`Þ{Q”†u&>Mö<¦EB ºœãhÙ48©‡¤1^@|ÃÃÉ8‚««Le߃¿A‚¾%—õ0˰ººB³<§õ×éKmˆ)½^ù§™6|´Ö"Ãs ·â]DáY^i|]“æ‘(TH’÷™MþLÎyd„Ž_戹¢ ­ø+èÙAâAñ®’©2Ai†2y£§)ètÏH ƒ”|±n¬¡Ò_ªseOͪc;– ✭ÏÅwdsIEÄ yÓ3þà›•T !uvÁ(1äw¬Ïi¹:ÏSœPè…ߊr̨. ›ïÙi)•”¥ÙuÃyãñàQ/“ÅQa»]ç«}ý="üVÄQÝü7Ü^^=Z4Ö’{þ pÌÂL€²èŽVÙ@rËmUøé§2i ûc¾ ÜWþ¸æ ºLdž7þ’‚ÁzË$y“þLs,®D|»HG ®Á•å°Ý³»ç·¿ 4ˆ-€KÄF²V}æÐ ÐÌhˆÀÖ™âyi³C/¾À ¿Ÿ^?ÒlðU"UXn¸”¡–ÁÚM€?¸.1ÿ^Ó_Ú]4 WR÷ì…¹¦È©uüØÃõדúy¡%Í„vWéÍÕÖU\Æ|—Åp®’PêKÇ×Ýä»õe–I¡kûÀµîeê¬N-ܳûì uÿ>ÿ@ëMzD qÝû§'É-(ÐBF°vè®·B4~S¡#0Qþ,L%ܼéŸ;ú»ŠàU‰€›avH³M¼„m;ÔZ`ÍÏÛ?IçÞ¼BK6v'êÉøŒMãØ­h¤æºÙŠòbdtS’_ßT¢l΋o'–)߸ PV·WÞò}„=,œw}Wj¯þO“¹ÄS­xÔs]ñZø€”î+SªiŸ™¿Š¤…OKî÷Za›ßFK„-rw–°@¥LÔXo÷¼Áa /?vg§Ê$4Y>fþaÍbQéXuÉÅ*oÅÝ»X×…Õ];žÀL︻Ý‚de»´+…€óbÆ·Jã>Zi CkŶ³¢óUëaåv™!ê€^ë üzT!²Š±÷>¡"å`ë—|/=ÿ˜¨ c*h>š»go¹ž޶¦ÔÝ-lqFÉÿlSí-z’/…|¯:çÈÚzÊL¶üÏ*âìôgöÒñë–>¼¹LpwrÀ]¸’QFÊkð"xâêóVÚóªe)•àï¡û‘ò5y[2ÂË| œú2àɯÀ¿õøàJö†c-dÍ ¦£æß#d56ˆ”þ¬ÓÛ– ¸IÒèY°_h$6Ñäõö1{2—1Çü+£Ü°ý¸Õ¯á)Ê›…L¸ÔVÇÂ8…š»šN6¼Š+á [¡ &Çàá–<—:Z9¥}ñÜh2Ãz<6Ž^æ`¹^¡¿*™&?ypÒ0ß&PDZ—ÄQéÉb¤|Ì"Ù KÅ+cûÔGn¸SaèÊ­©_¨›_.^Pa ±ÆíÄñüq\41Q¸õPŒäoižøV¯«âå÷Œìíy©×ø¸hî«6_wÂý–O{Öd[>6Ž-Ó¿„-(¡üm¯\(üØ¡+¡LI`åágZáãj†]&1³ù»°]šÏþF¥¹Cs0"¡ þS³OYlûFg Û‰ ¬ì2t@Èÿ‹_ƒ€°ˆtÛwØšèoJvRaÔ/ˆìèDÁ“Øw3ë ²;PCÿc¹óV¿8—’8tw¬(‡f‡ìóÄôÎûÞ¾±”«]üÀ2°LA„¿‘øðêňà<®‰‘§sow—NÆ€¨“w=ŠŠ‹¸ Z+ÀRReyä»ÞË\,_þ€–Éhç+b˜€(¾•¼Û/b¸Ö…FOÉ®IQÏ,“&Š"aA¨‹¨ØyHÕx…ÚöÊxÂÚ…kh{Ndjvq‡jqBjŸCmZðê½È· ü1½ %³ø½»lSõݽŽk­´!t̃þìîpSJÑõµ€ïÁÓý1”W'Ø(ø˜7˜bþ`âDŽS‡örñÞ‰tx©¦ñµJ‡lpÇ;ùŠ2ƒ„DámÑÆE",f;^ç—˼kSpÁp˜ ÍÞ.»ª¸Æ»‡ÚÍ Wøf6\¯Ýµi˜iäúÈ À':2ÝÉ}ž1Ρ},”i\Êûæ '½S°váÛ¥©ŒÌ ¯ü2-Mú'=še‚ÑbGÚ¾)¸½]cÌ‹)„Ë’|î¡ýpX! Æ7¯ÖÀˆÎ8<±šõt{ £6ØíbP¿e༪£Òq­?"aRÛ½ÉpÅ›ÛÛßÚ¶|ڮɵt»SC€-‘«IžJû‰+863¥sÞpÖ ÐHÈàTA¥ˆ„ã SºW̓ocÜÏ“°Šxg5‰üR„ (ÅÂ"ãfò¤î¡¡©¶Å‰" ƒD­Ù3,²}õŠŽß!ß|(Zjg'TtH0ÄLŠUDìDC¼ß#»CÍo§öÀ‰Xb¢¨s(£]ÊF2@ä­#öÏ’,ü ÒèzCtëôÝ2JhŒØÇÜÒÖ‘"¨"7³îLʈñ/¾Ãy¢Ú"qÂö¥ÃµnäGµÂâÉÜÔ4Ã7m!#14μ«Ã4Æ„“–€ž"9~%å¬%0PÄÞ‘ïfΧÅÄ<Ì îbÌyÄ„E/X+¸÷1ô¹2 v\Ý‘YŒ±ºL9h›!þú ¥ kOŽ×FE,ãá¾ ©Ý ×ȵùã°ùú×I?žB÷­•„™‡P!ÒõQ4’¡]„á7«s…GcvÊP)ó\µ¹¨¢GÇÏu¹Rï »@\Žl 'ßvFÁ}VŒu?BVóå¡Þ¨²ÉÊ ’ÍÑÿΚáR4÷E02ì„$˜¿Ã‡³ƒ³øåõĬSÇøý@:îOM"ÓùCMÉ *yë¯PÄPX ]’åfÛ½¢ Î™n­‡PE³K2h‹xf'Kù Þ†ü–šK@»î™æzÁíuÿ'Îqòx/^øÏJº-Ád}Ö_êL^ü=P±Glj7T zuiœÏÿ"B-]S>$Ÿ¡$mv¹‰øŽá•  …¼ Ü… í^v g“èhãì?xA —…Ý79»Û[™b³S¿j·k”¶Aý §Î°Ä!ÞLþßuÆ*¡îQ¸ø©$‚]›q½TêL^fNuõÏÛÑþ(U±vÆêvÊ®€µâ´ì‡~?0<=jÿ~3ØÕ?‹Õúdª)®IVÞþºý«¸ÿgÌÃ(,hhVzuÑ番í>èËjL.=« Ä] ‡ü+¬{C5Ç °mÃ*”|£ø”ûà‡Aw…1x!8Ç•7ŽÃý5’§‰îNøx-o‰âתõ¡=J %ÙâãþFOSwJ¾ÃSÇ—êˆ;ÍOyC·»U-ãjÅŸq*Øü•[ˆLœwpoºdh6ä’I$’I$’I$™úI,¹Û™â]Bx?ìŽ7²0 )·ÿ`ðçG¤‘"&ô»`ó¨'ÚÇ¢”m£$3Åò«KÇdÿè†9þEœ^ý7QtCWüêöq¢þüãÿ4ŽIÜyk,.6ØÈêhkÅÛOæZȈËi*j=òø% KÅ9Fí;šÉmPÍô”P?Þ|ÞœÖõò~¼g`ä«„¢Ò‚éü:µ¹bý†3›‹SëmntL0 ¬¢äßæs-$ão„}  —ù;³îŽ"jÙs¾Ý)qÞ'ç OÜE[”ñÌØæ!×­¹ÉL² ;ÁýöçaX£²£@킆½²×R&iJ¢DÀü#LÙÀZ¹¯»eaâé£:”Ãu‹à)I˜ÄÈuüæ"ò.ŠLÈVÕ‘¤ÔV¿°ÂI$’I$’I $Áó_Ù•'Xke9à5Ï?.ÓßE¹9„3ôÛ&äT½­ñ‰æ'‹?ÕÈ[ì‘Ìá?‚` |ÀÁù<ÄðG¯èºí/¸6MͽÅ:ýÑ>ý9O¬$Ñ„º†¨ÊƒxNÍÑ©Œ*´¤xÇ;Ã)ב Éž*!·ghëc`«{¢<àL&Ûm¶Ûm¶ÛxIñ‰„x7êΤE@œ5+ñxÁaT¨­Ëklwd Ý Å¥ü›£Óª¹jcOm=Ðh€­V>^ç$ RÀvJ‡±w6òjæ}%±Î©ÙÉÄi˜Qã²[… ŸùI"z¿‰r»·‹Ü«5\úfCk%•T^›§hVc‡½dúŒmŠ´~ÊnÅ>ƒš‘»=íÍ#u7Tuk…„Œí«N½m$•ʉ·&YJú×ÌãÀ^J<"·!‡ŠvJx4cr· Ä ™E4‹´óƒ®‹6®^ÏÄA·¼‡Í/Qdefá¬0õÓoQÒÙ™„OÀº÷ nØË>‡£Á¥,Fáø ÷ªÍÔö¶ªæ[Ùôfk ýÛ°5ÓFv‘¿Ïræ¡ñi;ÇÝ»ùøvX‘͹‘~v!é–5ðêzirõ}Œ¤Îaèûäž+‚'¹þß%ÀÓ}<“+éÓ½$ì&y~Bl7ô=Äoçþ-z0cd³‘ûKŒŒ…e‰˜Âáñφ*m.OâádQ“ÅŸzŸk•!i3~EáÍseÞÆó{è¦=ÜínõÆ’…Óú¡I1E è†F²?ú;1P°ˆbþ†åA¬ 2}mcš};m~¡d¡9ÚÉ|Æ’,Ctîs~E0½1’ÍCTlàÒõ²\ër®øâ|kíÛ ö,Ü’I$’I$’I!«g!½Ê{”^àpúxÅ Š×hõýwnÌJ’Å…£Êªààš­`›ùÁuD^$â–púâÙq%óéÿro 9®¬çp–¤¨[ù¢§¡ä»¦ûÚMPâAú[nOoІe-†¢Ó©¹q}Ì‚¯ãðÊ~“ÐUüåëÿ{m`êz–ªÒ‚8€[ ·[µí'#æ÷´5æµ}óE“Z DF|ú_‰ì¨Wö© ƒÈj‘%^ ºRÂbilêx[ÿXõ¼ý“0©³Íl'õÇÔ“ ó[3¼¶û¾ˆŒ$@Ý8(6ä’I$’I$’I$‚xÐ*gÉCþ}˜!íèíÔ‡’\×&jí»óH׊ßþ‚ÕûYwz€#™Õo¨íç…?S£×¼hØé Ò*ÿkB´ µ‘ea9j4ÂäöÌN Ýõ:@„Ž!ǹgç’¹ø õF§öÍ ª0U9UŠQÎÄšzÓä×ö1GËgâ G }ùWÒ䇵"ðéOêûÅu$®– ˆðw¯€ê«µƒ6·pØvI$’I$’HÐ "¬V´k㇣M'N'`›³îR¸¥2fÔ¿Ê/ àÝ#e¼úÝÍ–«cÕÑË¥ øÝ³Hò»Ð°ªÜ?I—1Ñ7­!zUU¾ #¼çXõ7ðï9ê£LÒrÐ7Ãcv–ôef{\.}õä:ûóš—?FÂÇ^µù¬¿y©›ýÁÙ6Ûm¶Ûm½b‚ Uš-׳u*‘ÂËizòù=•Hâ_U,=Z\ ‘ÿGÎߺ~ ”ùê• •¹¤j„#Xôèe¨s÷&9 Ò´*Úœ@¦.~B• Yˆe·•ÇóžùOdŸ-87§-4Î dúþ -sØÙKhkí£ã/Ÿõu¦onßÊDd,?co¦ÐuE×ÚÆðš9[ ×BÇD5d³€<£EÛ(a¨š‘'M ã‘‹`# þ”ˆ¦éÜ‘lûÊxµÍe»ýHŽ×Êfô°]ýZì°yÐn(˜§¸l¸\À0 $ŽÙ$7¶åÉQEDZ<‡ÖÚ¸B½·~Hļ~LYá½?EÆÆÈˆ´]¦Ø3žè˜™ð(‹{ª¤ÙÙ­W@ì)í>£Ë[ûfU¥à@Å»Ë#Øÿp>0HG/ªñª—¹±ŸgÄÐÂg’Sâ9s› qûhWŒq™í¨Ìð²µTƒ¢¸¬fÒšÆwÿþƒØE€G5ËXŒØÆ.%è>võ³ÉÀ“MQÔþÊ6þ~Êo(Ÿ•.¹M°Rü{Œ±ÿ ®1Vcò°·s`Z«Q“óLÛ}vk©ft.8w¼¦#²Ž3 l˜h[ê¹xžw&‚²óÆ}Æ¢éǧC[Š9”oêýÐ$ß–<Œ\‚–ÿ"1°M¡•’dΟ0ߨ©rI$A·$’K«Êx…ñA=þ &æ=‹ÛŹÑ3ÑÕ÷fë´¥UUUV3ɽb”ö ™®Û¾—\ÁòšÛ›÷é<ÎúÁúƒíò¥‘*<€Nc…›M‡Aþí™Q2ÀJLš0vÍ6úχ¦»e=ï«•Žt|i±V2Óþº…£ÓLÙ‡%Ó™áZjüå$¯Ðó†fÆ[‚`…CŒú"B:hˆS{I ”C9DÎ~ÿb Dè¨S.ÊŸ%ž¢¦­M{ÙRïEQeœB/Ëd:X˜À«óñó\!Î÷eŒ®ËòÃ…6cºk+à$¼àv.òˆo”ÄH}:gãµuà7ãß.•8‘&¼Û†éSàÂËÞ·è!†ä’I$’I$’I$¡@ÂncjŒN<éä$lÓ¬ön›)) Ji.êI¼x ·”G£¡UBÏãÚÌÒ;Ò¶bØ·#\e~·(£'(ìÆl½xü-¡?<¯cÏroD>íúÌ_©eµì†YFØ·Õù(ÌŠWSŸ}UŸjòpn’Ï j KHì äÓÄ0zª•,rB–ª3íÕÊV<·PeæóSØÙý`a´³§¾€I ™Š†5Y´£È$þTè2SÑœ²< ö—å3íeÛÓY5#E1yÔÍ=6RI((ø¡_× ÖO¹ô&¦m¤“œæ[ б¨ˆ­CW»"îù(ÍCÈl(…ë»[àOkŸ6¼ó&²°QyžÓÿB­ô¥=cB?ÑÅo·sz—\’I$’I$’I$‘½I — ˜‚C­¦H¦ë?*5EüŸ6K?„Q;l+!I^ÖÞDšéÑŒ.¥§›Xe~óâT­ÐûuˆºÚ9Ê/õ¢l"&¾ýÌ¿…5‰rfwÞ‹ÚwÃÛ¢r H¤þHß/s~GFþ92OÊÔjšÁô§Á! iæ€5z¤R.ÊÔîÞ¾ÓR.ì¯Ñ™å´MG‰;çöàÛž`+ !9rB£apøupM‚ÿ=#¨xÖao¾T| h… ›þVÿJ8\.»'F*Cæ;•— ïÐþûNB*°¹WÇIÀZE•,,éÓ³øIz³ƒ‚ÔÆ—sÿ>D2<· oÄÀÉ{ ¶ÈhZ3ÌÿhT[ª Dl[]’áC A^–´Ü¹`æBa]x'XÊÊ;£L}…û-‡â/r,W%}¢î³.bÓq£ KùIÿ9³Ý®ýfóÖ?ú—h#uÌõµm2î`j8”Çíêv¥Òd:šûa§ m‘ûÒipÔ™mâ4|×V÷ˆ4ö!>õ‚}ãkpIÿZ.Ks u¦ä¡Â…)»±ˆå—‡‚Î”Ž¾¥ buîˆq°‡>Z·Ñ©ùƒºéÝÃ¥8ðÒ¥`¹Ò¡\ ÀQRþõäâ£õA/,U¤`PnÊ"ÞÓ¬êÿ6Ñja©aCn[±BOóåâéY%€[`=Îi#GΚP|[d]Óm¶Ûm¶Ûm´ÍI$upÀ<Ùÿ86+ÝX$4‡]UÑÚÑ X7xCÇÿÿ€BC“!ZÑr‘ÐU’w|O€Kèu¡oœÀa ¥·'v–¥}ô£«%´Ö Uþ„GTþ0{11âÇ|ó¼.ÐQQ(¦o>\¶úò¬”Íß± ¨¢dy”fdØÉAkᨱä³;4³\À͵©-ïCȹVµˆËA9ˆ6ìÚÊeÿ6âëÖ‹‡U˜ÚŽÊèŸ@Ü’I$’I$’I$’TUä(Âþš“ÄF‘·FòébÙZ¿5)\‹~Bîêß§—@ޝO=ë"ˆ&@¡€‹Ù£Fx!0²Ê‰gs]ÕÊ:™|&æ«)!…T]&H|Ò½(î–ß#‘«Ë6£1ãÞ™mVÃìÆ'î­“Ÿ^!x(4ÃÏø†3€ö¼Œb/xùoE–lê©jb–,j(B%¦Ž.J–Ø~N’Wà,†›ÁJ~ƒOÚp#%V›§ÇÜ%  m¯]#˜#6|Û’I#T¡?¬êªª¤ÐÆœ>¡7\­Ïix|µtÖáØç0k;J=eš‡^PKmG‹b/Rûï>klhð)ÊHâd (Ü Ñòî´Yˆ¯„³ [aMvD“m¶Ûm¶Ûm¶ÛmO*‰iYöq;³ÃŠNúÄÏV"Ü߀KcëÜ9ëíà{ßy¿¯¨ ©À–H–¶œUhä}0»M§ågÈ7ç§Ö¦D!®B ëEŒ1r†‰T_žT!¿û­µÕC>£kñ$¬y[ÿÒæôê†îŸ±e“„ºÊïÎÙz¤Ù-g¢Û•´K? Ww²áéãj9¨bÌÓÚ´Uõ¼êÙ·‘MÈ/6Ö¶B¤,Ž©d¢ƒ”CýG"Ë_í¿å²…;¾0ŸD¼x¢h4¼$¤G Á6ì²é ]LGýBÆÊ7ù›ðzÎm¹i¿1•nlés*…= NþEDq2 #¶ð Æ4Fç¶Ôãѧ«‹ÑÿUe²ôÁ»"ÌÉP”è]-¯¡^‰Û@u¡3òP—LòÕm%@K*y„ó„ø†‰4Ë!±<¤)Ý8žz>]bG:‘£ Uæó{÷Éà {yñ,Š®lßJ2¢É÷ nýnËŸkûŸ&Zef)&Â:RNð[jÍO5ö3¤€Ÿ¯<þ7GÀå#çÖœaŽ{ÑÃd@ñc¬Œò¸>þ±:¼‹YŸÆFvű•õlGë.$çòª÷Œ0¤÷`V>ÀUnÁQ_$&Ê6-:3“¤,9É;±á§–÷\„¥*¨–CmaV¢±r?ú[›eHþTš+{»Ð(Ää?,mÓ!;Û ¬Ÿâ0B#V¢= X½ß;¢? ·ì¾/ÕÏkq_¿Ê–¿ï/ô‹€ÎU#eÚiO‘˜‰š7îã~‚g2´^}§¶á?ˆV¬¸&G§ÛÚ™oÒP™îjŠÙ§fQ©©Ve:üΓaüû½…+UȰfjHDB“ÖÀ¬ªû>|ßin¨‘v+ðÂvõÿQ|A¶Î5Ò‡@²÷2”ªNó?ûá8鄆çf8µ²;±.Ÿ9Me„ wŒ$€C¬å>ÓYMòkKò‡ØMä<¬ìbň[ä§OúëXñ¬µÀëî·?"ÌÉÙü寇jò.վϧ¹b…,»z¥µ­ öCl5› ¼g̃Î6׿Zª¹õ: %´Rœl­×m†C’ðRay‡MÙÐ?3'œl–’uEè…kÕø3Æe öHõJrl}ó‘#õãÙÊ<ãì{x9«>¬ŽØÌmóŸ°åûåú#»X7ù]Àò¶#OJÆ'6½ ‰­m6mòê3?P£ñˆxðc€Á½ùmË õÓ»¿¶Oci.Û ÷`áDÜt OË}I ™.…hOíÏ~% æ²µ²*Óà-#GÎ@1ëìÞ–é«#Œm¶*hàÓ¾d‹çïÖÏ»Ì{^»nÕ2‘î¤.„ZdF3WGÊJwð“Eø(Ç]}áÍKc –øð‚Ô¥UH  auÛOéPå°J3ŽkXD+¨È H¡¸ì7æÍ¸ êÿ`£®£kuÌ—ÓÖ»øR¼nêÊŠ‘ó¦o!È^üÎ)ÝðÝbTŒÑ†ˆ'ýÝÅÅÎrãð»íãbY (+‰/£¨Å§á¤^!xÜcÈÑ`ßf.ÆyéÄ«±!ýy4N¶%Ùë<x\,¡§ÇNÁ‘iŒ˜å¢,:T.a¬××ó‹ÑÖ~ÞoêÊ nDn+•ÐÒÌwáz_ê¯sƒ…~ûØ‘­øÔ?p<í–Ì8é³ 7¤~.?„ÓùS);ì:W_êÌÍp Dnß%'’´ I¼Äè’ü“h·7ñª Î…væ>=bè$ÇôÕ¿º%¹ö19OêDGJuJ1ßÙ&JŠi I÷ž]åèšëÚ*‹HÎ'мdBÐÄ ”àúâı!±ämÀ¨#2“íwäArg+‡ïŒúy éá~í—š^t¾¶²]¸{šï2‰ì”ÇýÊ\uœÎ´µŽ€ˆ¡­,ðšÀ¦…Q^”Å4‰ƒ{"éâ’EÊ||8”Š+óð@g“0Žb +ô˜±Ál!„¦.†¯Œ>}¹ƒE¸ÄÃLÍ]ºvd©Ëì•ÄWf’‡,·–žûDƒØÎF{¬\gËpkê¾m/§$.š¶Fá’­8ŒÄh”ôŠ*wò>!áúü8H*v}ެ@/¶wíßßg±˜µs¼peiµí‰î „I¯>¡^”æi¤À"NÔ-ç§ŒCÂý¶³;À`êÚñ7à‡ôj¤~£ÜòóæÀÊS¢¤á†ÍÀ¹6J ?&5—Çn£ÇÅì™<2pHŸñÃ[Î2Iei›­y(áiQuyfîÔsöóÎóCÑ8´…cä¶GïI1"Ÿeð»'ⓨÖÛbƒÿ]äú _muìH›qÆ“vPú9Òy¼|‘ù€iûRÇÔ<Ÿ]ÁN’ €¼OôËüÂA癲cQË]>͵à ]À.Ÿ´Ø]×Al>âm ÈàÐÇàgäÄAÏ;?΀X-Ûõ‡Y¥ÃÅ0R.bg@—˜íxzøë¸:ù— ™Æj#a‘œ§ ßÒKJúÝz7„©ìšsÒ}mÜLÔ[аÙ#ÔÅB@õQ¿0ÒÉ@3ì¢àßN®L¡'ËC6•À† ´ÛÍG:ò'Bƒ¤'ãì$« ;ðm½ò°ù¯°Í`@žó8ôòJ^j>!rQ†QzÖbÞ¦zDŸúã…¥wÐ,Dñj ‚ÍÍ“½ýO Ýó²¶c)äA`çÛÉŒ´sÇj9É4|¨ ;Ž¡%Њ ®B¤|áíA[X ÜÜp…Ð̳HZ²èBÀÇŒãm(,MÁ%hý’ ã¡sò1 ©‹ùæc‰KMæI¢¢×N*Öæœ_DÒ‰–v1´¾†WƒdêT ê_oHNiÎÞ Oo¹a–ß÷Äÿ‹n>|ŒIõ³~^.\¢G`þ#îüÚçäæœz€Ó3úD9¿æ¤rlkcšÔ ¥Ö…Êê“ G®Ñ¥æ‘’2lc÷s5š·÷Üé(AôîLKÿ7*í ¤®„UšPžryAy{rGǽeƒ¦Ü« >îÒO@­ 4z3︴Du‡â4#¹v/g“þÀ®„¼¸{8±ls©w€´ñSìB[¨Ý7þWÄ”m“3‘s¥µˆ€m>–ðõ‡ÅŠ|.É .7y¨”-Ë^Æp£_žÁ È(Ô¶T”+VÔÞÇÉ ‰‰°Gk²ðÓí]ƒeÊÈ5­Ö$¶ž¼àº»ƒúv€…{c2ß8ƒf=â/¶ûþ>­þ9…õX_·F¯ªÎýºè‹Òü¢Âú‘@¶ ¡(úzÿõäEħi›cB󯵋IHY’ê­¤SøVÝK$09B<‰ØéW°Ò|ì ÅXaÌc±†6rËÏtÌñ+ü>Ï#ã·Kž°q±¤fÕ(0»ØËù¹mìÌ3š\9©*`Äš¼žê1r¤bb¤ï̓˜ûï4dü+P7Qß(ÿjÿÌJ†Èm–;àžÝ£»qµó…€tó{ñ??€Ü¯àþÞ¡$dá†OæžÃh w„rÄ øŽ„¥ºY+YÌ EŽí½ä¤<çLUˆá‡Ù&Hb?ª("ké“ï›Pr×IEê·QV¸^øÙq>í‹`×»Ö“ÊìX÷ ¤&ܺuqeQ_ÇÇðEó^[nT¬<忢BäÍßKä¬4±Ä; Fÿ'o“Ä4öè´aÇ«\È)Í›¤Bi5:°Üó9]*o!ñâ Fµ#²;S~ñLY ¬wDësÖt¢â^á·|„bhÔ¹<œ¯ˆ?€ˆ³)6Ùr¶c-Zb“ˆW-”SÙ­à’gÖX ê­¦,Ì­ì…]-l?ü.™ÙQ2Âê‹ë¥zŠàj™‡¢—|Ø88„7ëÁæ¤a|Å ÷ŠrëÏ~;ñ¾è÷°Xu#®ª86îUï«F9›á†©ªéílŸ2@q>¨•þã&Ëö^ÃQ"LŸ¡…¢éh·VÈ9+ÌŽµ gQÿvö›u%¥!wN{qÀoe×i‹æ˜ êLëйÌð%¡/RÜ8"Pƒ‡õJܳwÚõ¹8?©†¡s.Þ¿ªÞɤÊkùv²kÖ<Ú„eÛ-ô“¦‹uåN–=í|ïCD´3èžGäš¢ë µÊZʨÛ$€Y#Ã×1åü*h+jÙÑ }„Îñ~—–ƒÙ 9ÆáJãJ믑“Ú:¤aH“µLÏgzŠó„iÑ•™®MŒ Òb0†óe‰åh¦“æ4Þ¦Ò^"ÎQcY÷6Ëlù%¢^t]RêŸÅÝqŒ‘Ç>•ݲ1žR¬ñ`¶Ur]¼1v…¥r¡³àcù{ü ÓÀ«×àkR¥Ë’e1La'ú*ãµ|@‰¡OÃzhþrKОÇ2¥å.‚Ö9çÖø/ ˜´uþÓÚ%øÝ/ÓÔ‰¾f…ܧe©ôf¤µÂU´ƒE¹» ®Ê–”ØÚ*@£$‘lIÀü‡dÒ¿ ÿ tJÖ@¼ :Öíëüi8„7. \Û‘a‡ÓãÌü5þ±±; ºñ¥y-IÑð‹ÚM4s:ͺ>!`m¦ a¾wü?Ü$NW66âÖ¦*zÕ‹SØKPn¯ýX]Šõ¸×Q´Y§ p²ó¹&¢$Œ´ÞØèISß @ò‰£ ߉6Ëh-υȰˆϧ&=4:Å¡¸¹ÉñÓ=%ôæ>ŽE=ÑuÍÕºJÒ¤ã¨Ý°?{tÄ9Ö!fá»I†GŒP+áU£©VäçwK"× ì‰¸ÙWä§=[™öS–¦Æø¾²7Ify.QÓÑ;.*¡!i=M~‡J0|)|¿­XjF÷vãìíYtìçØÞÕÔ†Wõúl›)3a¯°ŠÆ´Ë8öa´¾­Þ¨âm7<x°_2 cc«þ÷C’|£#ž±Üšk»Ñ-.8Á þ–•–tFbØ´}G]UäRˆWaÿ6ê#LLrä¶„ ›{ϧy‚¼ÌžãË]_4M ë»²³: ”ÙâT5[û½wÒÖ[Zõ“ˆôLäc«cX&Þý^V«FK§ƒL›8å¹|õ]Î!ëÚO$•êiN­æÍ“aÂ"ßH¬ šUÈ?ÃbMæ 6`’LjÛãPÂ`êÖǹ …µeÉa£|‚4±žýˆq]©`ýWÿص†ÏУۂ±Av(>6«›ÁúË*7Œ å¡®ìÚ¡½6ÜÞ‰f¢±!q7eñ¬U?&ßdw8ÍY}¨©“5µ<ÞtÕüOű­*6 ô}‘¡Ÿ]Q¦ŒTúsA…€ùr좩SWâ2RÊUÂèZ  ÔGé-*mâ»Ø^ú“ìzQÊð‡!]§mñtŠûn$ºjAûÇA°í×øGPßx\à6̃9mDÙâæF¡ÍPÜ@µ3,zAÃO`Žê½ºWrL¿‘$°™„g`ÖŸØ`Ä¬Ò ܃áªc”Ⲭ ³¾¸Ÿ*>–šuÙâJ¦5%Ì_¿:B³À €0¨¢šwe”`@B¢ÕÛ¥R\]ùÓul;Šsd9ÿB+Xtˆþ¨Æ鯯P³ùW}éù]µ¶Œn£¨îZ*¤gû¡bß3Ó†BÕé”?ÔäÆLñ‘ö ö;v-Š#RÅ5?ûŽìRD´ËYæfx?l‚QõbVL\þãgBA<–bÀ5§çéfuü; ó0- ÒÊ;;Õ Wר3±ÿK(l/î–®"~ÝFsòÈ×—Š"E5ô ƒïˆàzI3W´¡Ý¶Ÿ«Ï¯•$Ä›fÅf ׸¢û;>džeøûÎE2áöy«˜;ï3äºqú]±¢'ŸÍúü4¿ë'ôÚòtQ‹ ~á{I¤t$"ýþÊ£ÙïúÈGÂ[X'PÂAÏGÃ&ìËb 7@ i0 a*@KyªMª Iƒ})ë\œ„ªGX‰½dbbÕ:£ûЄa?úP ¦b@²}ŸúË…ÕgDo4—h«ŒòÊhf„  ¼RU#—qü;ù<‰»ŽV"¤fÆý2I‰4€¸§&'ùá˜ó±\Jã8¾eˆ ®¢®™§-ó Å«³¢Žòæœm½&^ŠœZØ6?z**1ºu»Éú¹ú›(„¦1Çf¾>V Šª”™F31Šh‹—=ê?$}ü¿¹c¬Ë‚¶WœsK8:W*0'T“8“¸[Xâ–àOBxü8’€ºÖÁjpΗ>Ê+q¢º\÷à 7dR\Î úÅ€Ì=çÓ¾M¥ÎÕ¡ÃÐ9'Ž/UÄ›Áí8æp€BþIzs¨õkºÝ¤£! 'Âî°k«ºúê"ñíQ)<&ò5VÜ6Ó¹â %)OÀp‚2u"köL,ðÚnöª-G®]wj ˆ,öà¤ÉÙ•¯›öÙAñ6‰Ædû†±€«±D¢7¥jÈ9—¯Êrw‰” }_¨ÌCwG'k¬Ì7èÄÓsÃJ´6 xS"í£Ð{ûÄHMÿ,ä˜ñ[Óq´/WÅm4û‹GïÏ•aZ‘‡…xFƒž (p1Kæ ŠJ¹¿¶Úzi5 >·÷½Ác÷}Æ‹çÈ,0ƒíJ‡`Õxè½5aƒsÿÇ“[?ò“6ýj$# šz2J#e·¯»ÕZ£+æ»>ßZ¬ŒÜ'¾i’, ®Tåžc¾Ÿàú=t­IÅþjrñcQ‡yjß,o·@4Ní4˜*&¥Zö2[D=úžð ªñkÔð+×Ôó~1ýPµü×Cˆ=>wªÓ[~­tVû»Ø…ýhTbi=Ÿœ!Vcu@ŠŠ’»Ã‹1æ:¶Ùí~Ò(œ¬ûôpUŒLéû)ŽiIZë‰å=î”ìŠJ¼À¾YÑlO5ª][®›Í/—*üª´5yÚm„™‡tëá«(R”èÖ­/ð‚—ÊÚx—©»SH#µJôG¸â¶˜%’M+‚ÂÅ™àá—áØ¼ç]»¯ê‹RÂrÜÝDfçk"± èVÄ$Iù£KÁ ²½,­™ùÒ»|?$×é N•U€u¨T™Vu›¼¸|©_ÃìÑN‰#ïX®˜Nn©%CM2i㟔°Û‘O™™Xbfக‰ÆZtjkÅôàÎP·Úè3±«^RÝøçªÖð¹™óš ¤X¸yªÕƘhg–+§š€w¡Ù“õ®q¹i¾pÃAŽe…,ô72Él+™å3kAq9W¶ ”ãD,^q÷”ª*kY›cÝ{Ò.Ü=¬É1º£?y€¡e¯¸`Çog SF"ð›Ä`¶Ø³%r à …jưöУ]¨Áþ`Ý£È:GºÏùÁö×éÇZÕo}yˆ¸&–§QŸ8gŠA–AÒ ppç6UØØPŸG)JÐŽ¿òø>|;W± òË¥›œI²‹e4Îd¦*„*+BYBâlÃ`¬œÀÒ$D 1»7ûð‚—vwj©Ó­j±m'¨•aòu¾¢¼æ–œ²@gf)oôtàçªÈ'ȰüÌÑ€?X›Š…,“J\e£„5æ4ƒœÍ™+©ñ, ÜáªuŽÜrýÉmLëÐF€yÎRûÀ$àùΖ“XΗÒ-<ë$7ðõÊ]àuPýÖ— ÉQiõ¾ÿjËêê‰<•º‡Œ-üYH<õt€š$âûz‘þ3ßoRŸÃ¦|_oK_è;íéøu%…õtUûw¶úº ý½ €è‹Á…Д“bŠ„j+ûšP—þÇÉbU9Š3wֵн.zó˜>îºå}HGïÇæ:÷þ ó¬êñz¿Ö´w öÙ°mÎ?Q‹«ê5–‡,õÀ„ V™~úÄcy³ïúz&—¦nÿ:¢€aéâñ2ê4¤î~¨—p‰ ½(øûàÿ<»j±Þ~뿌`ûtôŒ~mÔ–ðÚ“çû&k9šgz™!É­Ak¬†1oíù~nà·AC a+lÛÚiP³ò‘:¶u8$ 5aÇR÷èöc“iYXÚ@H8D,á’ÄIáÒK¥õ£H@t"– ¸à0Á""·-Ë÷ͬN±_NÀ1øML²Ëx©—ð(¡ý‡´tO·> …‹¢X1¤8DÊWúiÓ¶ä%ÃC09mˆ}®­(ÄyŒúÅ6t£uà ½¤&j}ÄR"Èú+ ÞfK›Ù–(¡º€?vÈçŠÐ–ަ¸Ì}æ(t×L¨Æ¹å•÷am {ÏH"Mz;³¾- áJrz€M ïœYÎç9un€EÇмï+{³'9l´³,;q/½t²ÀjªâÜ-͉Ïîä —ñ#Ä0=tyzÒ q{n!å³ÈëºÉ NüRrnΧŸ¨&Îòï¸P è…»[‹×'ÂÖ1}(ñ#‡R‘|LS 5ÊF<‡¦øRµäÍ{@câüßø˜^˜}@ŸYüú_T]"f^ŽtKc ³w¸,arÆç™…#É }q§kAø&o`gf†ŒË.VŽÍPÆ4fíG²6¡”žÔE¨Gª8Ófk±( ~@2 2"ú[÷õ54­v%ÇhX˜¢`{õú4S8áhg6î‹”A'gèo{-?oÄ“ˆ¼/`ì ï7q2»Pä-ò¸š‰,Ùi™Áúõ3“‹¤³ÌÌL €£­¥ÛëÆQ쳋À"@¸çÍb"j&ã2êcS8U¼¢;ÌÑG¯Ã¢‚Î6v÷“"³OE¦Ò¾õ=SþÕª–uèǯ›´‡°©RlE!ÿ~ñtþ˜¸*g¸ùk¹ìoß«UîŒÁzäXƳ³‚qBg6#`Á{)Ž×àh7¤ùŠäzYVK è1z;Â¥ŠÓ¤Å"‘t×)^é¤ü¥GÊ…›»8a‡Œâ|AöîµÄ‰$W´l»¶Å¶áñe~Ü…µÅ\¬PG€~§³)Ùº_”Ôp!y`cÆwµošƒ]…±ˆï'Ì«<-]Ì^F5MlÉm£ÒEõ$àúÏ‘Qh-7>ÃvbH5ʘʪÁ.fó:BcF b½ß»á•%¤^ôK+9Ûžƒ%1¾È$ú®\Í8•OÖPæþ˜†3)½mž5/Ùzþ‘ðx£’°ÍŸŒ³~…ô¶ƒNç-S0­í=Y¦šrtÊldà%©IßÇKõ7½`VCI™Ÿ @³{Iì¶R9ð`±GÒ¦D—܃gHåN^pCFç²v÷oBlî{Èöï,áY .8BÇúÀv®ÛW°ÄfÆX««1Û96£¡½–âbØ^í°SG@§OÁÆÍp·¨ m1'h¸êŽzlÍ^Ç—¾ËÈë-Âä²ñlløžùràÿRU‹Iñÿã{д×Ë·¢Õ¶¢ÍnÂy¹æTvÈù%“û’ØRgd¹tÞ>ø‡˜ï–žh!<ýWƒ =VAà\!ü;m©'ǪQƒ·…-LfAºÈ´Ó[Û Žê©ÄÕ ”Aæÿ†„ÄÄM^üÒå lUÆþéôó>]sÙa`“-Vté¾èbùÓ89‘ûÙ\¿ˆ_ ñ4j‡°aÍDJ¶a×=Á¦5ËÑžZ’uÑV• ËÚ= £ô"­„¥8™ `¶©ð,î:ϸ‚¬àq˜ ¡,R¢Ì¼ ¥þèCk=ú@z+42Ê<ë”§ázÙà%ý]—™G:Q¯Ç÷MJ.AîÛã1SO5èÖ÷ Î7œ}SpÁ]Á_|]ß<Ú‰à¾Ó^órûÔPPôFï™´²M“nÌqÎ:Ë1Ïb¨GQ,¾ªè÷Áz=Óq\˜Låîõn;þUà¿aŦö<Ü>Þ àIè_QóÔ]Vsæ›%N¤3|¼OTV· XÔB *q)!Là@Ãi·=êxO2eÄÕIP¹í59Ë4t]d8 ËbÆÌYb½ªGÉÌ?°Øä;Ú®¤ù]Ñ2³7OÂàÀÄ· ïà²t³Bhq!ó%ÝÜÐh¶ ~&´·SŒðÌáa<ƒÝˆO3+³Is{ñW«7™r ªb«Õv)½Fê?ó¤b½¯è@äLýX¾{¥ .%ªo|¤aŸü<”É)‘|î™L Ñ†Ù/Ùð:?MuT¾fQü±`ñ‰/zI îºzôÒ(W6‰F‚a´Lîù¯è¯fcÿþGIZ[%–ÕI^jjp±ÐUÔ7OèFÞw#è„ù±WžOõйŒ)“ž ’çI€kþgûvذuð1}-Î17"¯~ß”c¿ê8E›$A¢¢ꉟ…oKé†lça|ƒë@sD+b0£‘½ •Þº4ú0gûœT<ÉA”2mqTmÃ7ö*cù2¾­1ù  {!Šžç èÅ2"_ î÷ëeò $p˜ÈšFq÷\Ä_ÆþöÈ2ûÉÛô€BŸõÿ Ü (%»ûµ–ð×ñÝÇ"Pj œˆ½H‹ÌF}Žeß @>ügϘ:JݳÕ)è^w{-&›!’4Þupíy‚2 ¡{ƒ§0=?@V~)ÄÒ“³ê tG\6kš9œ!蟵õQ²Ü;‚_¦z+P{ü¹û5“dçåóÜæ9ÿvÑžÝÕt«€&©îWyÅv+·ŽÍ”ÅföÆ=ÄÙ[ >7½xäР̀žÐ0æoù;@ƒÔ}•IaŠ‚T‡\ s滽=ÏhØqûTçtJÌ"7RòÛ¶™RJ*]«B[ñ–0¦ì§¬wRtØtTRW•ºGF7@yÕœëüRa{¨õr÷ tJ•O-Üù ž ¥hWd|ÔÊ{z¯·R¶õ} }à/ê´üæГ`Ñ¥>ù©ºŸ—fªOËÃ$´ùÖÝ$èY…[~JM±¹Ý4òŒnçà Ņ#P¼Ø8%Œ9ÜIö•R!Ít©Å‘8À ;"°˜é[µÚ çqsÍübÆSdm î×Ùü“šBÅöHáš…wÔ:"á#òÒMð$ïìnm,C ËŽŒý…†$OÁƒüc;!!@w :UÖ}F6‚ÎóQ@¿î¯\<6„ž¤È­°¼Ž¡ZâòcÉé ‘^)’Ÿ[Á•È.ÇCf×â †‹ÌãÚ¬˜I¨úmýï™é„ª·žM5?›Š#ú!e±±ê<ÙQ‚ÅuFÉk‘?¢!ƒi ×0–/ŸG<¸œk‹ÚÜèFV ¤Ä­ànoÒ3ÐVà…óÁw„ùÕòêÓ‹i+IÀŒæH&Éa;‘¶dœ!íWÔÜÄR±ŸV?ǯFûj!Íî øt¥ ˜¬Òš,Æç¸Åòs!Mb¤0ù‚*ÙZ,³Vs"0È9„åªpYÂçYJLqg{*‚ÍH©˜7Ñ"åÒí+±‡ ¾â–“]OßËŽ¬5«8“Y·Tž7øb4?MœJñi'Ð&ÑÔù$9ðo‹DÁà4ê"ê®:ýîþ^scÊ•¯˜~î´Áœÿ>7sÉAÅÏ1Aø<ŠÐ„a?úP ¦b9PMsºXhä.ÊÆzŸF›¾KMs€ò1L…5.(ëÔó]dO_€‰S%%4ÒAvºÒ J;;Q7U d¬ê›Û]0¾Dãô†mÕûÖdYJ DæÚÆ–[£°Ç½I µ'A‚$ÊÃÀ1…œÞn[añ¦î{tÏ©ŽJŠ Cì;ƒ^^Q^!²ÓT×R0/ô[–ÉølCÔ!Œ•…0pÄ ßÀÍX€z»æöã7 h+EžÚš°˜JâÔg$¯P•dÌÑ×9Míù4Æí Å4ßß ™!L¬ì,„þ@©$P^¹„£JãÚ‡ õYqjË_Ys!ËìwIp’·ÜĘ£jÉÐƧfL·@5ÿYƒŠ™>£¦\q @yõùp fà]‡6š×è8p`B Z22ü{ѦaúRyç"?Aª­ùJÊÕÙôôŒ.gD¿£èBw®©âï7µO‰J‚-¼;D—lÄšÓ‚]UšN"¢ |*¤ËÖUÙle{~©nÿs0n¹þ‰B×ɲ6‹¢Û¼ïº­óú« šÂ›6ɶÀÇY®·“×);ŒÙÛŒ÷Žê¬¥Ë”OWXyœsµéN0ôËŸTìýµ1ðžA`kØx¿ÇçÇ赈Àfmu$†,’Úž¬Þ×%‚Í2íG¬½Dü¾fv(ê·078c(ˆÉî@Úoê!.µnlªä!û,™ÇúxÊ%Ïîó=¥9«¸oØÔ’_g:4ÙI<¦Swù›Qí£S|¯oûÍÆpqo®»^¶ûÇ3u 3šÛXï511DZS C¥Y¥õŠõ–¡¼}úÔà…99¿½©PöØë³š–¿%šÙ ÿYÕ]°³Æ(.3áµp†»ú+­ÆE²P>ø=úŸ73Y ¶õþRÌe1ý‡_ÿ:m ¥ÛD"W•¥ß[k#åU„E©],ð…ãeŽ5Ü/žçþW£Ù§ò`+Ùa<¼¯ËAèâ&¼Ƕì“Ë›âh ©ðkÇÿ#9¿³Ü’ªœrÔå”ízzΓŒíq[‘,ñ«ðG×7áeÐG¶OsÎÐ0!ÙÆ¡Ò´H2ÎæÊaêž2šeÇTܱÐ÷ HA>rðúƒÃF¾5 #÷ÙPálÿ6J¡ƒ«–ÿ%pEÄnãBWC]Z-A³ˆ*]×.ñºÍ6´ ‘¿[wÏ\u¿qVúë.ÄæK¯n“Uu*m”:-U™ ʼf·OÜ|DŽ·z?ó.–¶¯ƒ6Y“×?¤Î'ñ‡ütÙü%ÍcøadXœf¼Eº9 $n׊ú†ˆX¿ÔƵ–„Z6+€µöX°]}ꊬ’m/Un”uÎ?–7'lwmÐ!L™Ù4¶ÞŸ\‹ñhIÌ'`G›.q”¨“W••‘j?r9’{€V(ûyf^·Øf@X¢%Þ¹SR@'?Â|¹´>´¥7ÌR'é\ 53­®¾ÍA7… Ÿ¸0Þ´à†>¶I‡¸8™kE?:¹×dsÚGU @].\àÑFùyöOšˆvmœyQñkÕiûs}õÙÉ<ºÛß™QÊó·žßy`íkïÐ脾S¯pC?ÛÛ8ÅöN¿KT•‚=w›Ýæë5XjU;ž7ЉKz(êJìÒ_2«3Dô‰®WðzÕbšÜœÍgX[zö顊0²KÍÌÏ}B ̹¼¨dd•‘7ðf‰oÚfÂdW©Ê×bRš·¿˜—ˆ–Fâ=øÚÚÏÑBOÏJƒæ'Òb ¤;e%tû‘VRá ã®M%kˆ7¾o”¹â)÷tZc"šÓÇÄT—h¯÷y>yMâá»è´á¨.(Yhç|…šÁĈùCHÌZþ1i`!$×wÜÖ›ù`߇Ž9Å çb•_5ó‰Oc?ØnÐù‹¥ŸíCÔˆ#­VYƒ6ôXø8ÆÑ9¥ÃÙM«%x ¦2ÑX™Žç‰9×ђĘœYdÏ#TTIoMLYsÒá·}’5ûÃîŽÄ~0Ö~HѰwäÓ>îŸ#ÓKƒâÐ öðÈdÐã—2~‚ÕÈV½Ì…§,Êúï„(Ö¦Lt˜¢!œ9„¢Ø3éï~C%b°{7“ë4V.ï¨@_¶¼æSœÆÈ„ªD7Õ³§g⯖˜9¬ÒG=(Ôš$À ”nõzB=¶²#ÁÙáNQ £Û-±?êWñ³N‰VOÕ룈*¡Ëû¹”оo†ƒ¹… >¡©%önNÌoˆÏ2Ö¢ºTÒõK1%…tiƒwGmtøäøuLáTYœ¦bõ%]ògZ½X'ß1p\{SßíP¨_þdè¶4™Î‹¹ª€RMºš 0ò¬Ý 3(nͼïA£ý ¸¹FÞ‰ò¿ ì,ÌE–Ÿ Ë-$ÿEPYžòÊÏßÜh…Ľ«mØ"͸£¿1C…ÿ-z…¶E Ò àñ–žÑçÖ òåáOúAmë{.U"×Ïp4\™%9Ý챂«4¸Ù Œ>!‰0r·Õùíà RïšÌ0pöuÂ6•¼ß¤¦­á–h²'ÅU°.ãx®Ô »æUqÿZC§Ê¢‡‹Ÿx{ȹ>@ -á[¶^¨©´9®›jÙGL{4äÙé‚;'¥¥ðŒ˜ Á©µ ’‚KÉ së¶¢á-e¡‰ÈÁ$Ò´Â ’g*Þ:Q¹j¦|]V~°)TÝùJ¨îü2ôg¸ñ×väeîâÅÎëÞéIRʵäÛXÍ4VŽÿEÖ§%^/ˆ'Í{Z@Æ?î?úùés„Ö^M=‹yiË]/²èó`¤¢»cU#ÜKç²  Òi¯û]CԾѳ0¼Å#R8bÊ[E©|aÒÒÂ/ÃU°N¹ÃÏùÁöØ1Jß/ø£ˆ,¹Z÷(xyªÄùéæÔ”š2 ×ßx8å©vøâÿÌñm-Õ’×Ù彞òÍ–ëá ”/,ט–laEsk-”§F»èC¹l(‘¨;@ýÕ±: ¢¨-;•éíqÇpHýsDM°YÁB{òG⽯:€¨Eº;÷Páb+â¾0Ú ÍìÀdHD{š:جÈx­§hÃûr3@ƽ±*·ð«•p2‹ï$ˆú6§)kß>¥ÚæÓö2«°j<Š›(_‘ŠS7;$zÝ«U~P‹ÿ}U"Õ:ÈŽxt¡›´Xö {˜ÕË‹Þx!@®aH¸š#|¸¨µ3·†Êù¤uÈ[åówëT‹ÂX„yºÈ>XñÆ)} ¨¬n=Š/ÖÁmpº„£´d´¯KE¼Uü€Ø½`ØÁ;%­9;UMêOg٣ʾ8ao­wä¶ÄšÂ¢y”’t³#yGnNLòX®a•&Øh¬q¾2žì[DtÎA=É3Þ^þ÷€ÿ/47³ó·âÂ_Ãy‹uÔ¡åž§¢:”©­@ ¨×ˆ8Ulc„óøªñRá²V¼C9vÎÔ”M¶†&µ‚>ŒW{r4g'ýŽo±J?|¯2”êëKpþžÐøXpt²Ýô’õ/Æ´%QGd\cJ}~yf¨HÍ ~™•@¦Dwõä—S£9èq¿›Šo’³€å+ƒv³· T™ÜÄAµÚJ;X‰ —Uðoÿe߸©><ì!‘‘UõbÝW=(Ò0òÀ¼²Ï§†²n|GfªÛUûuƆXäƒÍy¥J†éµGNjæöÿ^AÿZÜeˆÂ&_톕¾Ø—Ü-¦Ÿ6Ï µ—3õqdôÃØNkkôs#ã/ïR…ŒõŒÉŒ§ ݰ–fK;³·ð·vÍaùD8ªñI©¢¨&myú¿ KŒDnko—ÑÌ?÷!"P ɹݾùÙ[%€®zèáÅ[ÍÏMcG q~ JT9)ÿlµ ¤òNäøK²­²f^E|éæ­R]û*.1¡½b“^\Çè‹4.Yjg4ìÓ<ÀiKÛO¸é¤Ø&¼[!®¯¾ÊXKs:C%u½¿k:àU%÷SSC ðÞáHÐuRœ M’I;m7š5¦Žà~Š›û-;ŒduË÷Tê @ ã,º«n…=D齿£Ü±Ïà§üŒ\? ­y.ªöæM7Xš÷ÿmL.è~N‘©È6ƒ“|†ŠÉÉ}vâ‚ð"‡QêÍr½oÔ¢JúÞòj}Я17ûûÐt±žG¦àØNMæúMA(ާuß3ܤ¶ÃÚ³ÀÐæªp¯B0Â$ˆcämòÇjвûac„2°àl_ùîÌ0þÛc‘VåŒUjè_ðn·šq@h8ýþŸ®GÃayC%h!„¯¹‘h$'ææ8»oÿúõB½ê,}èH¡3esU]áÝÚ5" ãÑ{p³.¿‡þå¥EMžAò@(0+Ïa ƒ€ó£YÇŒPöy9º$Õ©=&W††—ç¤ÓÆÈ÷¶žèÈöÑ-wõu{.!ÞApw~É”“1#tóþ£„çÏv-,‹âMG'&ÜÙ‡0b8•¸OTÔärþ~6ÿ"|¢I¶QÑ*øRŸTöFùÝvÕ¿ÿ} ¡2’5÷l'par½fqûdò$þHÎ$ŒR<»Í‹4æÕIà_ÀÚµ §’`ýt‡'%±æÀ´¬ÀÐL’s¥õHÒRñZ|6Ì«z]}Oq4S½ß=ÜõKegñ ›bDøµ9cánÖ­ò®G+2­Í‰þJP0Ðè¬Æ•K¨ }¦AO¶_*˜Ù.*´”_"1‡*µŠñ— bóPd†‰ó—ûÿxHD¨@ñB3¼Z3Epomzc§öš°úoÿDâkl,¶]…!q…QU*‘´Û½n)½‰Ÿ¦Ç’#j~‰â+ÝvƒB .ÁmöGž·m¿×My²…g4tZ¾3ÿû‹ÄÃ2ïD*‡?ÿúùy·ÀpZCŒ÷V*¿X§Ä™¢²¹52fÈdê2L½#?ÇÝŠ”c-vŒ¾Æ¡x9ÒÚ‚çS'Rq0®ÞFÙ¼8»5a&[ŸÝ‡ 4‹»>0»D¬/Œ Y`¦Ø Sæµȸ @B`äuJTµ¹\¨ UŒô{ŠÕÅ?A£ƒ]Å. x!Ew_I)zaÕÄ9ðᄃìÖ06ÏÉ¥™$˜-³r‡¡ÇE6èeÉT¢ ‡1ÛÈ“º]ó½…Pù0غR¶ÒX#ܳٚñ‡¹öUÖôBrSJki[w³» e]ûù lË=­~Bïù½ Úù›®FÕ0ШcLÐÁÕ?ÝØèT‘v¶(CB\9«-yî$¡|K)X@Xz^àT–mÐ5Òä-y&*¾T°Áa:q°©þÖ;øN”¾¬ªÆ³N\KàÏ{F±#:gdÍ"ík 昤U¼ÕäÌb–*ö2$ôò¨äðhÀüiû¹Ð¾“ƒˆÜ–vfrh!⬰pR@V8á[M”-½·ey¯tPÒeWÆ1®uhO0bâJ¨wÙ„¾±Á4Ñsd”²±fœsް(þ´~eò«$˜ªkP8Ã$ýlúÌÄÜØ#"­1W]ýF~Oôû…^EĆŸ#15×4QõjB[ˆ Í#¡âõ*ˆDvÞÒ1ü呟Pšè`Sq_Y1û3Ä$Õ­>DŽéìŒ0I ⥌S™ÑŸ³;p"žuþŸ Æ#EÎþ’HêlÒ(!O·:‰m_ÎT‰|~¿:ö^¼«hùóz„EòæÒ³)“@WòKw¢_R}”¤‹Š?­?iÑmrï6nÚS{Ö• .д&á{Œg9[La8ÊG‘½N#Ših¡RŽ)>|¿Ò•Çÿ@C‡¸wZüýÆ”­f¢¤õø¶:ºù2W9”žï¾$i‚T3‡WÀ(QÜÿcÊaE«uÎRi¯ÿL*…“tõûr,ò­T~ã†Jða{}ÐÏ(fÞG\(w|ĉ<à.Ö¼SÁf}15³Û"tÒ ×åžé@TT_×géVèh€—%9ðT'NTêOJ„Ø@„p÷Þñ‰Éj¨Òo3é˜ÓCÛÈhY’y™?–þ¶p#r·}ÇÝXz ö!øÐ¸æ+ö£:³Òí#\ê^¥çˆ™|]®£Î*Dú¹Yà1õÁªx³"0<Ö_ë7äÄ+½{¨ëGÔP°(j¢câXH“2×€L;K'¦ZÚˆ O7mÎjiZ‰=¬dQçŽNÉ£ú{8…?¥ÖóÇÍ¢Râ6:L§ÌÂlƒÛÚÌÚÚ LœjJcÖ„¡3ïPVm`°-cñ~®ÛoŸwoÕ¦Ÿ«¼Õ×ßêôý]~®¬;êëÇöúoÕÒêë6ú»œŸ?B_«Ð#Œùý™ßVâwÕѽõvå}[ û} oOçܽõjGíïÓý½1ÏŸißWm×Õ¼·ÕÐõw•ÀþQ“áìÎ|=½ùýR_'[??­¿ÏÑyðöŸùú¥ùýlÿOÑ©ðößçõ“>õŸ¢ŸØ ó„ßDç/èQîàøˆ!³ÏcïßÊ,IRË|×ÎUýK>z¼QÜYÚž»NñÂÌ`è+Ëýi£(Ó@ÌŽCòÐku»á´b-]iÍÀ2œëpÛÜŽ@*¼Ùóèîe•ó=WñõŠ"6+_`CP¯¤Å`PÀ ^„i·ÉÂŒ‹ËÕJ«ý›QýµLO˜Ä t`ýä$c“0é¬Ò€cn@ž|p.½¼ïpUJ¬ÿ)…lë …QhíW÷û}jÑ ƒ}Àé5Ŭt/ܬʂµz®ÑwœøÓŒ]€[}Ž9¹*L"‡Ÿ„¶nMeæN—…ÒZNµÆ1~„óèZ*‚ñ¯,óõ̾2Ìý\Š—áôjø®r’+ðqÏèU]Üó^ø¹xzS=…'óUò&é'©>èÍ™¹Ñòoé§ä—\Y6Û=½Íͯ¸üö~—M~—ñ*u‚t,}—Ц3_(G;*˜³ÔY) èÓ̲i¾–Z"#ÿZÅÇB ò•PJRÉ:GÄ”v•Ê ‰1‹ãc=cKÔYžs(›Ïï·Ïc†ªÄ3îY$ %+Â&tk%A§q<…#›ÕÆÆ+õÐÚ9ËC¨ÈzóÐ1Yi<˜+¬ö"§a.KzáÄ|O©Ç—³¼y·Æ–u®H{ç¾n ¦Ä…¶r] ~!qº‘ÒmUc9ªÄñ1ÏÔ„@ϦÞY£fÐN+áæ]Ï=ìV< ê¼Tiô)ÜšŽIWUÚ å¨2îlB^W—Æðöh}ÄPÅø/©óê¼&;4áë\)çäË´øLz€»`UˆM%l/¤¦V‘–²þ³CŠ”*g ’4¦B奲ü‘%f6LÓ£Þ׈ŸÅÅ?#ÛXì-’þœÖ¬ŒZÄXsdQ{ïqd“€‚­ÕÞ3 ˜‰UúÊá¡!=×jáKeGƵ`o¾äÈMS5$dvù“ß*Šƒ’µ›c#CïµÞ6[EcÆZ–Ùf€hARE5 5¦âûF>øb~¦ ¿v…^á* sV¥£b‚7ÃÆr#\Pš~^{äìôž•­ÿH°Ñ2ȃ§Ä^0'·—>ö€ðªð®‡‹CÙCÚLÍ¡úJ~÷i…ø-âÇ壉Î0[Ø,nCZ}ΧQu™o/Á³h#ï>RBÛz=¬làë¡§Ø~Æ`8¨ðãcIÝ.}ôNŒÊЈ,ö8¢# úæž¶;´~ÂÛ›?õ’ý ø²k:ñ³Y’>œ¯7WõZetõz†Ð„Œ`ucúÔoÀN&õÂ!?Vû‘ Rƒ5í”ÕW3+$ÁÅR·àWS0|×08,rßÀ_`ÈÊÈçND vÒæz"ö÷ÀD~µ”°¸ŸdUÉPm Ê})ÛÏì²iz$?Π÷ŸZ­žŒ<Ógìvád±¹¿ø<°L¢>‡ŸÀ›»ü0çq$§zx¾Y¹Iæ ?æ»op5:Ì†Ž-ûQT9wYg9ê«ÀU’ŠäÄÞ|à'×ÒœÍö ŸÀ$)7öGå¾NTLß Ç1ñX¸w½NËßböL¦P;h Lß:l’½¹„HlrX¸ÿròÄï3/1r sÓ_G²D!wQóç(ëCîMZ!äMÞôB`|0#}Žºn“À|º3´JÁ9Ì~MVYé˜A¯?( ²~ë1åÏ 2Ï€ "=½.%òi 1Ýž„„2²@é€Td”,‹âäžT¸Š?™í$ÒÛÂoÜ2Ìì˜-@ææw…êcaÄ:F"¯Î’!ƒ9Ê ­’rz﹨ Ã?h¿Ë©Pi4†h½F½jQ¨j~4ÄÈ£d蘅Ë: «µ¥}ÂïýDv?RÂÏnÄ,$Âs(_D›Uiµf!n’àZ±%sÖ5ƒ´+·„TNKí…Æø„>×N//)ñ½Ä¤Þ39ËÌMºïÕµ¥}Ÿ†ôÁÖ`ÙîÖ›_DÈmŠP¯ÙŽ£ÿ[E»ØYu’œÝ†ùÔíáSÄÉÔEõ ?:¨ DëŽÃü:;þgYF$[F_žqæÚW›fN$¤Â5§{yX`Ô=û¿o k'`º˜»÷… § ¿š en÷w ÞEßYvm„è™§$gn£hp y|(ÙÙ¢´E›<ÐnO H`™¬œ(É thàÁEz‡ó¡âºö½ª—4HƒÏ‚ðË…©eÕõ}aÞÅ–I‚Ÿ‘¼ØèÏô½Ç'øU\i¶”Œ™Okýf¯i9¿hƒC¬H.JRÇ ˆÑâ6Êà²Ë×ÐÃÉŒÚÕ5 9D0Ã(ø¶GÒÓØ+u"›Š>bíÁ€ÒZÙÒß#Mµ=äÇ)3Oz˜«§¿Ë’Ê„ðy¼G_ {É67Ó~qÓˆé-‚ÿ€ÔìÁß"øÂ{Ó›ù AËJÚÕ(~mœ¼Å y`Ú[·c·ý†h$¶c}á2ñOK…¬Œ],ñ÷à];­9`ÞQ÷Ó"ð:¼$Ó+›Ö¬³„2ò_Açƒ÷'PÇ('”+ôÛÍljkQÙV­J¹ec¾¤èìµÙÍXê:ÕT þÉ*UVÖº©/ŠÎ¨ÈtàâMÐÂëÈÒÅÍNé 9k‹›ŸèÜò5#ÔbDcÑû5¡Õá®”g>LÜÜöYîébѹå«ýõYJdñ‚"‡Á÷LȈúõÍä5ÖÏœMЦ­Á Î!$÷~-EH[±´K€Uû#c-ùøÚT™Ñô¹àá“g  |]ƒû:N4¤iƒeùņB¸zÇ µú€š{â0e/õe1 äš‚1'ÊgQÀp´º6²–¹ÓÒ:ûÇXW7Öâ@±“’(ï»LÀFep×ÞoˆöLâÆrIïÞœd],ÒÕü=@zjˆ %mUNÔª?³ì z^¦ñÅ †/›ÙËŠIˆÀî-‡éÃ_Cœ5m>§üšÀy {‡“†W(W̾ý¼½’îlú‰úSž$ÒÀsÃë-ä«ßíOÏ5—OëÃ^óokd 1~/f¶¦ ßÖw’$7®Á+š~¶°Ù”†ü#)\öaÍ~€BƒvÒ{ä}ÌÄèJ)7þ"G¡q¦ô­ÓäÃ5¡.¼5_¤è?‰È»<â3¼¹LØv/º·³ §eÒÓ\mc{ñÒq“áÍ7Æç´ËY9Ûá: ¼FÍîÂ/½®uhtm€v"XùŸˆLyG”[ÓÑ(Ëý7lÙqh”˜ÞÅQ¬‡­8~Z"D|fŽ|[®­üñú`NZ2\@à=l_®_1óš ¥âÛj’T‚;›.§*0ÉI~Ì —cPü’>í„£‡¹È‘9÷Ï·á *#É…£l)˹ý?u[šÍ‹§³Ž ¯9€ú®…Ê”Í@¥Û¡hSÀ#,ôаúöW@As»ºOš˜ú:’ì`_Ô…Põh—*‹<¹³eêÛë$îÂ°Š“Üfˆðí»N‡a‰'d¥“㺩îN‚à2èM]›c|Ìž½µëp${nÎ8s² Èðô¼,’&Âi.CüØ™/ïôÆÑ_ˆût£vºªÆk~dwš 4é@s’þ>}{Þý ûÝ{,i‰t·…¨ªƒ ] òÙ)ŽÙ»7q5•íÇR"ŠÚS2"?}åð*C˜â£„HNâ³~ÏäÃùSÑÓå^Àβ¢‰¸ÄÑ|º{~6¿˜ç…Ûûû_LÓD«Ã^o+ü¨ß»ÆwÑŠé´ˆìtGz­DÕ: FWº²È(p”žÏï†1W˜p€™T5»©ÚÈd7cT@ pÓe¬|õ‹ÖnQvaÐ!“ëyöÜyMær7ÃmËKP‹-·*œh©•šÀy0¤üj¸îd¤Œ ã åš,Ë7XÀô«¼HúÅ.pô³§aA½î¦±- ×>awÂK•õ6Œ÷4ËÙŽ›\1Ù½£8šd•NR ),å5žò—JåCii&‹íº„W;B/$Už†â´6>w±øÀ‰Íúà˜žRœ-¶í*ró¶(yrTÔÏÿ†!Y†ü^ã$ÄÔX#ú{¨+‰_q÷qî×ðÛ<Ž÷‡åîßíäã©…ÿf~g8¦¤v#ŸÙÜHý$›Áõ˜óì‡ËÕÉÓ%MN˜¹¥Bt°g-3½=]¶/l$‚Ì|çR.*}m˜´­J#σh øúÓ”¢†úª;ܢa³–ÂæNf  1eâ:§7…×Ù±6•%½ƒˆrDÓ¥ï T©)ŽÙihgv¤Á¾'¶¿‹Ò‘&DÜ€,Ò… ýë¯j#G |üýH+\œ·#>ÌN<(Vûö±&¨5Äk^e1ø‡‰We·|§h áCÑeåQKFyÕªq"ò_ÑóŠy1¦œ$«ŒYý€:â@×"¯¦]f3ôGiµ`åÅ´‚õR‰ºI-^°R Ì *i ÊècïÏJñªZº‹˜%íF1d‡õ7 Ó‡ýXiÑÔÝÌSË54º¤Pòã¹ ½$cY|§^£ÁO…¬)Í\žOW-Š3ÎÒÁ"«“¸6K¡Ùàz2šH1Ïÿ$=Kêñœ®ýÉwƒ´}ºôöEñô M‡üs~v…DTEDTEC¦£ˆÂ¸Øá Ï·?ØÊAJD°ÞE~‡,›AøU|2©mxü€»/.!7<ñ3ÜÝÙý¸.K+Pºœ[ü^¿/9ÃÞÓñƒ}yªþú óUýôAæ«ûèƒÍW÷é2›wþ·° ïìB_(PE‹ M §¬ØùîÒ )ü„îÔÐWp"QÄ|k»t¤+¾õ¯)aܶ`¨d!åPÿhZi;ç×ì‘Sx€™ÇA·€I5ˆç Y7~F@T6°°jÐߊp¿¸‚« ü:xòk¤Â„µÆÃ}ä¡.ˆî†ÛÅ1Ãx·Ñ³^¼C. sÎ2´mà„¾Û üšå­ËÂ(ÈTJ6Í™a¥)¬Žbш¼¯ØkˆÂ[jvS“»ë¹ø.{‡¸fS à}ǰfheïBiàŸæâ2ÀðEü%tWiC¡!Þ<\~ƒ¹TÄiß‚Äü*ž‚K²ÄöUtÙ¶½Ö­C­Z‡ZµµH]q»Î݇4V[“h«ú=|gö’0Hw_€Ð•ú`î¾ðJÒ(4oh¬ª1›Z6Àðƒo¼ä|1šb†^ùO­u~’¡Z:ë¥Ä~DˆlûRAëmš,!$½kà&µ ER˜A›~¢úg;2Ĥ»Y[1[ÝT»ûî¾ê¿ƒr%­8Õàh!™Éo?‚O<#±¢oOçÜM…¼ õ­=3 .ß#@ß*åöŠu¼úOZ2®æ5I±Æuœ|£`H˜gœîz\—ð™-ó þßxŸ¦‰—f^V« ˆKÈA9†Éýl“EüH„†ÿ"}9ÃÅ•i½þ®&›ëYê#h0úºBz9Á2ÆÝ»Ì½Y¶B&'okK·5èI³ô8ßFN{Ê—Èm¡´Ø'Ï AnÚØÎVÙT†Ödòß•¦Y:6ÅŽeËߦ‡¿‡¥HêÎIoå¶t®!Õ6ùk¸>{YŸRŸ¢ÑO£/5÷¬I€žü*6Kº›B 1ŠËš¿Š|KÊC`¹‚5£ ÚýÖÊI†6v¿œì{~ šîxT/ÀJ£ê¿.Übyéê ´JI§M–¢.iÆ4ZŽ«˜*©:[&iÆŒœš!¹•óFÍ8Ó¹èeþôt¶ò€¨»_?u¶ë092>ýDvÞ-³ÖþoÄê[úШë Ý^Ž×c]êžÕË¿U Àê\ï;˜AÀ{ñÇgÄVá˜?²¤äâ(¢À`ÖeL‘žX¶U×$œE€ŒqÝŽj\Ü× µ…ü¸9TÈ3|ag<¾•÷nŽMxñ‰Ë9T’+ÃÑ þÜ}ag‰SiÍe\è‚+€Y0"]z ¨™±ÈZ]ÝÞ.òƒB[ö(½Ó†À}îcáÿªÁ‡Z;´g Ø+{5Wÿöê¶G€ ~‚ ×e³„ ,^pŒ„?Æ6«ì3ƒâÀ7Á¶Ù õ"_i4ç¸cBîÒÚnÕO$Ù³-ºq©°ÿ\èJ¯<¾í;DâÁâê†LÉ©PÚ;ÒØB§,k] MGÐÒKãõï©ô\`m]xLå³’ò›Ã7ú´m7–ìÃ\«7‘tÇ=/ÛYòg —u'>¦óKB7edí0Ç”Ë û£zx‹‡Rª¢™掋ÆÝ]U0$©¯¶pã}d@ªA©å“‰3G¯B”´Ü>Gn:RzcŒ ±ÃeQVc©fOßÈV}€åW¥ÎÐág³ÚfÚž õ¾^Ú¸0†ÀqQË$¤ ®y—|ú5aý¨?§Ãã~5ýÄä¤Ûr>°0fúÃábx‘ïÂ#À:+íÝ/pjIßµ¶¨&.Rº=²è½±¹5E%×Ó±ø‡Å¿)C °GkfO/ lQŽªbñɈ‚c‡¡]Ý9–Ð¥¿:P×dÎs‹î™wØ£Š¢ÛÉ¥жޯ(‰†N%±†îö@fÊ»ØÅÎ*«tÃÄÐö0ˆî™’Oµ›ý0¦\‚_5Ÿû©ãßþð>do8žß‡Õ›mm=àžA.~P—®¹ E8¡À©L\/ ó.ë±}ày‘ á9MÕ¨v;ŽÛybêeTŠP®åËÍܬ°Ãû³_œDžzxPTÏê-8O»®ÞàçœÏYÖ«†î‘žýÜ’šx-÷)“ 4 ¹Nì&¿ Ù,ÔÜX=adb‡DÉ KAÙ;„Z†"q¶zý¦Y~±ìânÊÙòÙF“¼èÚ^?Óùùü€œ6gó:'m³²IFPͪN¢5œõ¦‘Æáý€Í}[óè¯Ý’àè}Xœˆ?ˆMHg#Š#šŒîÈ(â¡;Õý}[ÏÂX´ÏõW6ã§J4C¾lô6B´Ô¯ö"ÏËÝ8¡!ÒÄÿ1#Âm(OB˜î‡k®Ø¼¤F„*™Wð7E~… q"£xÈíÂËø RayÉùÀ¿è±Ãpd~‡›ýÉ„šH1Ïö3À7‘ûó†bø:8GŒé—‚9ÃùÿNù,ø t©‹ÅÕ–mjÍš:Ú^ÑÞÈÞÕ ^1[¨º?ÉX‹|8E3/äÄ1ÅɰÖsýö‰wˆó0qÄD|ôUÌá„T|Þf|¹å|aÂ6áŒ8ï¡øpßÏ­Ÿ+V®Ö×±+÷¾$2vÐóf”ö§›4§µ=çå²nê–Ìôˆ=ègmm?¶ù‹Ê\a3áî>}ÁÚõzP¸Ûö6¹{’u€ªc%°Ã.<çõÖÀÌk¸’ÊÂiÆ @D»üÑÄ*Ä¥Ó B5.QCdHy44ªÄ´1{mÎE„xƒ(±+™Œ;¼:e™Úô² àd–ÂñÎI¯‘Þ!V%.—ˆ•ÿ=£—KÌ x!ò=a4nð!õx& ‰Û´æ¾¢Ÿgt$ñòcèä¿=/ü•ø—Rj·Ç²\ô¢Ul úÂx‹.ÊiÞwp<Çó(XRϵ-¸K,©îYÓR–ôa{˜,^µ.;T«Zýîãpû8X8Y(ü`àsØëe‰L‹9ýòüÝwÚ) øáùè5Bã,P;ü'Ñt«pIÒÑÜšÇB¬‚äæöv†Íf6º.óÊëC@GaeÜ{¢êʦE`GaeáÙ€€ p©ÎãÓÃCkâÑ2$Ó²p¶ÜÛëß'½ÄÑ“Hu›µà(BÙ¬ÚÈC…+ëæ(٬ȇŽÀƒ–úùжk1ÑðÞ‡ÔÍ7Ífºé{‡Îû}†)Î'±Ð¦Oõ}EèÓ¿Èìt)å$‹å97¨µ¹_’ù¼­ WÖÆ±ïœA_؉ҟ»V,ξ¾kZ sbÕ‰~Â0^B›°e¥RÿNÈþÇèéÙ uÄÝígd`)Ó‰c¹[¼Ö™oLòÂd"&ˆæ= É!ºgî·¥Tçà+èËh51åûöcTÊ×à—mÃ;èÉ“`ËÊËØÿ)ƒô,ˆÿ…z[˜Äœ·h¾Ó¢`¹Êº.Žöü¸öÚ(]åã ¤‚LξÎù5e½5~Jù„ÿlÿ3í’ŒÝá“ ©š€‹ðçVÀ1gч|ªê¢[kù’ð"Ü´,A2Âÿ_“&ʢ㣠ô²¬!03)Lîþ+³»¢«Ù'¿Ád%æ;/ýŸAÉ z{ŠMýÿ~EºÞÈ‘g|ËÅÛ‚™‘2W`<½"Gók‡Å´x™|‘À~,‰…ŽQo­ïîä Ðÿ5.ðÔyĈ´" YuŠÌo*SQ•øºé©3ª+µ¶(Ê ‘Ë®¯¶çbŠZ↠®ë†)§BxÎööü³liv{ö2?èºÆ‡z"íÖ’îáÙ"?¿ò“˜›&ü‚wÒdh?¿ìõ†Î:õKRãw³],7¥D+Ú{”]ž‰¿À¹Û}ö9é±D* ~./wþ‚ñX\À –1Ðÿ“JɈÀ‘)Äxvi*±ŽNÏ“96?гÃTÏL9A·¯%}«­@2Ì¢75×iŽããcß31þu»ñ"Jé©ËN ×ÖIÅS½ÛÐê'à ‚‚`8™'À`å}¤GGcMÙ™çUX„$ßÏu«Ò•fl]`eò¿ï¢çiÐ$¾š÷ùµ´&Êö~Vˆãèæ‘!D vëÌQŸsÊZÎ'šéƒÿor£l@è t×Ä|c¹ÐÉŠ½Í-Õ²eG—rÍØ¥XŸqâá0Læ÷L‘)"_7¹›L`z%8G”Þ bc÷Ïeæ‘j§%/Ö~žMò퀹H⣈²—æVL¹jn½;D?ÐVÄ«ÓRë7º¢„“O ìÏÜAu0@4þ ªä.™%F^Ý­xÒ©N*%˜/ù×Þá×ñ™¥±ÀLö+xHѤ£ž¶:бIÿ„¼äò yNVþç@rµ$ÊpWaLŸ‚…;©§OSRÜ£ ^M‹-‹Â&y‘MYT:Þß‚VJ%—ƒ‰á35îp_eDak?…_VàHôD ù6 Ü¢©y%ýñ™øÛz? ÊÏ_eǤFbh‡iêóµ%ÙqüSÆþp­Ê1†¢‘/8ú˜ØG8²fþÂîY3ÈC*†µ Šº¸N,*ÆH.ŵt×|ÿ8HÚkºì´!†bpSÒRbWðf±»ô;d!4jµÓÜCpðá›úfVÍj½½Å®¿Œq„Ýð²äb×jÞåhºTå.K’ÕçSQî‰>íôô×{þb¬ \&'h=n‰ÅbæîƒlXÇp†o [MžŽ–Rõ?÷HKO’m½Ï£—‹ÖOÒn8ø“®‹$Ÿï>Ë“¨ëDØïb&úŽZsvæíÊ}ÿ9Iù•AéúJmŒ!§vM9ïUÚ‡x ²1€;_‡ B Ê¥ïBµ_¸aÌ(³43Ý\ir+‡í™r'rdÈv‡ƒ)^´Ð?óȪ‘¤ù©ö®ƒÙ é…šJÁW´Zðùí(0d4zê+àYî<¹RŠ,ÿA$S(¥ƒ†ô©ÎŒƒv“­¤ÄL@TuÕ%³gDntké@ÙGM1–ïögâV@Ö"›… yr©Ä5›Ø2xŒäÆèÈYîÞ ÛN”ެ›O4L9ÍÂVejûîuxóYð°^gÕÙï® º’¨ô´’vg©_¯ó“Z!ýU.¼ùQ*ü,£ó!÷0»yÂiÖ~ŠÑx´^o+䧈ªý}Š<æ®°æ‡ p©²ny¶(ÎÊ%«BÓs& ­H{˜ó‚üQ„UœBDa™Ña¤ˆÍ“F 7¹­ÂÊòo÷}¦*ß|¥ƒ¡!À%/b R«*lY ¢<ÉÇGPŠ&4²!= U#Êÿ|Žü“:Z¸Z‘x$ª¹Ã£”«Áü¥÷cSœS>x¶‹û4ža¢–üñðAŒ ˜×ì÷š|Š.3 ÛÇb¬h5cèÌæ”UE)â Ë«\ ÷³q¾W^ ¬x¸çôíÌÌs–eßFˆ2ñ>s ±ðæ:¡Y“™Ì"¿“`ÿ'ñ#¨.¨t¶,Ùß›d¼ïkЯºác.N³dÞ-„gàÝ?¨z>épf¢¸¿/áËá*$ œÊ«Ç€~Y‘u¤4€S—¸³¤ËzÞ`9÷槉Ã*Õ*¥È2&ÚÔŒØ' Ù©Ík{²_ümiÃaŸ¡ [èÖŽBèöÅè¢X––;Øe—œ‰$õ!]äaÑèù. ,LÓtKæðqEaY­KçbºN¬SËž`9ÚâG´~ð°&ê»= D öL,¢ÕÇ;@“O”Oî›+Û}Ó–pw£aÂç­+ê_-Ž!ж(ï[}®?wž* B0néÚʰf$\q©ãñûYõ÷àó²àDéµ~G¦'t ›¼?ª­ƒÄvä¬.‘ ÿ@ùäïO¤›·)‡|=e:ó={Æ7T‹åîÿ7|“ù0M ”®<†®¬¶oƒC2<#wL÷jF&ÖÎÞ†U4ŒE#_a“´ægôÞ9¶ÎL¬Ý—P¼|ÊÉ€JàÉÙ¼èÜ@X¨­*ßÏ ÿ@‰gx‚ˆ~µ#}¬Š´ ÉÖšœ"oÒ ×KÞ)@ªg\;;ÖmW×E{á…Ï [Þ'~QÂìJëi:ùã%ÈêEßxû5KÒ¦fyÕ§“¥½õdﺫ_d!X ÃbGœá¼IÉûáY΄°ÇÙl+j²A…¢ÇˆlLz…)áÌ¿üH¾ßš×Κ“Šôk͛É óïпbKî{÷}OÃ*²÷tjœu€ño|O›ÿ+hÊræ ÊXvzÕ Û6صŽÙCIî}ù,q1â‰ßÝ{”9ì„æPö{Èýé([^ý€d‡:üÌè«E}ˆµu2q”ÈF>ÿjýJ¿„Ãþ,ƒk߇lÖõ¹ ÉÛKæ´³žŠ‘K²4èEIHÇ ‡Êâ+ ÒåÔà>ð€Â5¼ÓÂÁµk 3Ð{¿.]Tú¼|˜mÄ_”8¥*Öb•fÑÍ¿±¾ _Ꭰ0“‡£y'™Ž0KRL§wi‰- ;&K;áÎÓ, ÑOîŒqH,kä&œG—ÉKU„¦hÃda’ ý[ûäbRHj¨ lª† $ùç‰ÙFMÔFö®ÑJj»¬ô…‚X™45áã¯aI©Éb+$7“®€&#Ô̇õpÛ§~5ìÀëo­¦¹U§óìí–©™®ªGyl3°pÓ§y¿^q‡±ðHKÂH™àlŒ2TãY=-ê6Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶á¶k ³2¦%Þ}ÂÌZ5cè „dª|§æBòS9è7ÆPæ¡ÏÇžÅnêL™#C¬Km{gTJG4A|sKÇÿÕ<3öF*¹Zá9Ôöi). üñ¡õìÕzì'N8ì0!$Á'PÙÌ.û¬ ŽsýV‚6Ͱ¶ˆ1¶7æ/˜iÜåÉw«”[] ̶å<ž†Åv¼‡±¿Ô•_‡þ6ê ¤_f¦)BH‚šÒª¢á£o ÅmÀSR!êe0nų–'€û׳¶Zpɸ¯s}žþ ÂäNo$íMu"!|¿Ã@a!#¼×Žˆ±BþŠ=ab£hº'nºë¤k)Éj2×pÉ$’I$’¸6Ûm´2§üÂq<^}Ï¥0„?¿<¥²W|8,¾™œ‘GÝGb㘀Ùd¨DÿYñëð©ÈçrBtü Š¿ w‡l/±-{¥rð%ÐÍÎj½š¬—ˆ5ú;£t$÷=dÆ D¾üÝï×›ÒrI$RÉÉ$’=ªf»cc°8çÕli[oúöâ€è/zë2ºíž…ïH¨D8AKÙƒøKq³¾Ñ=Ý[z3ÅS–³æãKÓÑÙàlŒ2Tâ6fffffffffffffffffffffffffffffmC?f[{†OœèÁíaÍ) x@Èmuª[¸JÃÝeÔw:ÞË­¯ÕO_+5}ãîû÷Þ^ "·O?ìÜÕ;?â9@ ¶íù*8]• $’I$“þ‘’m¶ÏÄD/‚+lÊ¡»&xæ6ñ ‡ q­†!%O[¦;ڀȅúU-Ót€‚ƒuc WÀƒgƒ zù¥áG]5M—Tk·âñ•f÷ÁsË™SÃR}$IÀï†Ø;¡¶¥KÕ›>w­†6øKIgÊDá> -,ib‰U\¨äbYWMÇ"dì¦q±¯87‹$ß}’ì8I!»Àôÿ„œ}pQØ\''!sýd!Æcw ꚇšç\MýËø»S¬¤÷LšÁ×Ù=?[ÀæFÿjh¬[gÇ%ܻؗ¶a þÄÍkœï|Ì,M4œ‡Ó“#/uB­ g6¸é„¾ÐÈ+¿¶|O·n=;`Ÿõ¼ù埴®»m½ð6 9ë*9½¢;H-E¡Ö@ÿ rá¾ÍíòÁ Lfû*ª“5†‹Ÿ±jWSLšs²m ÖVÕ>ƒÇöB0!ðrÂäëüâ†ó{ªØ¨Œ¶9R‘- <ˆžk©ñ­Áç ŸDÒž]øN]&(6@!dzÒ¸¹6/x’1ûLŽOðõ!±Eº—óÜtÉmÏzÛ¶ŸkÝçJáp(OÇ4عýÉúWó7ÜÏUŒç`žò#4'5¨[iqî~Õ]¥ý9åg ¬X/c„<»[BNjͲàlÊ‘ÜDo/ÿQwùˆ¼VXã†lôTÈ‘,SlNèbXX*4ù§jĹILU¦µD!ùÌÔØaZ )J½ìF×Õ¿qìÖK©Ȇ†=.4›t °»ÅìLzPâgzÑÄ1³[r2˸œX;[äi‘çÒ?R¹l^“ȾÝò²·œ·©ñåÇ?r…J\+Ñ™byÄ;êQhd™xºtÍ#2Ìl£ZŽ0pæóä{ÛÓ›ê…#ÃéͶB®rpo|;Jêì…ÿ ˆ{ËГ<`S¹XIt¡®ï"?¾S mj˜>‘ö,z4G?©ý,’”ˆ—šú’ U1:ÑèÄârSNt[cuà'×h¯lêèRÝùö·¨x5¿“1À[•„¡L¨sÖn›‚àŸRP›}à’rBÑe×C^š®|%×»£RœjžN„[ÖÖE ÓRÏðUôËkrs÷€I'jé×å, ÷OžFÒŒ+ ¡½{³S!0­V±fyG ²Äˆ5óMˆòçµ°GÁþ‘òÙl‘àh‘-1‘i?ná‹õ=Õšg›lñ1 i»ß —ÊT—Nu„$YsN¤Ìu(°¶ÊŸþ»&LD ûCj¢~dÎ[ÂчZ¥ck²¤zXÜÅ% <ð¾<äÑ(–Óz„®£Æ5õA&„òjÿwld}²J ýuï…ƒ)yI ¨žæ4š ã0 àg–ï«é’mÓû|%™ˆl„pâU¾å”‡]…»í‡ÞJÁÔ(ã›0CLDô‚QGzÔïß„%Ud©“®32 ;9ªžºsÁSØš.ôTxßÄ0ŠpU×pšçìD´õÜ$E€;ë¸æ½®'á²ü2ÔX;S«áê ÊMqhû7Ÿãθöá¼×þüÙÕå“'¬o ©š…>‘ó²n mJé4’I$šbðØ»KèãŽÅO¼:ÙEÕ£úr¤œúP×1 áU¸är\{µ¶-@ó“ÒDéçÎz–é¼Ï¾#&Ø(î8ÉkO§ìÌ-ÞŠ1E!ü¥ÿ^ ?î>Œ2KÀ°ËÖÌ^ñº¸!9ÄWLñ.àÖ÷ñPç¡g,[#tâÁi“BŸl²^-â5Ýfd(CûC”5íÄiÖÀ”˜¤®RNϱÏ|à€¸ßUËh·­çÔ“+ ¾È ÒÖ0Jd£d6C彺K]úVÓuóür?ÈÀ{`0/VþpÔÔÞ~¨rŽægãᩃFu ¬ÁÞ%ð]]¶HÍ ÔòôìØ¨µ•›/¼Áç…B'•µerʱý­Ñ×l8›1׊¾«ô6L9ÊœÇ]8L‹tsÿh»ÍWâÄ“4Äg,^˜—«Ì¦3›sKÙv…wÂ[”ë*õõXü¥_¦áËGo—w¨ü;jìvŸÝÐ1"ª,lɤaáΔhüÁt¹´Z–Œðýk<šÆÑ JŸõ¢ý¡–55^ì³×¸œ•‘äsзÀ7sÅä™ ¸ác{M–æ\Öº&«1ð5(h/£àºgªãâùÇØÉýñßÂÙ–ŒÍ¦=áÛqY"=1ÛOôK/ ’ éPùI™ TßöÿW->ÓêN»ø8cî+fÏ?nìIŽÄM,Ê‘šÉ2~Fç%¢÷¦ž‰uî‰yiòÓ›äY-ëÔ8œ@Ít*ñέ§ª-»=æ5\Y ¦ÂH,Õ”Hª›+o˜?“è2F7²´V…Xß(»Ëd … ð|¬kUŽ…X nÆÃÿU`KÄ/éÎÕŸÊÃT)æ Ѓ,ܲëu ÷ó[&ÀTúÖX ËmšË2Déˆó/?Ô6|"¼å³2jn˜(ƒdÀ¹ +"*ÏŘãY¤²£)&'@y©;±tü.î'õA19ݷʪöZIû–£ kð¢¯ùp\_ÿ¨KÙ‘!vZ‹ëÀLgŽSq¤‚°»oÜ-!±U4ŠÏ΄Áí4ë»—ãKó¹6Dþû Ù1úÖ¿ÀF.ÐøfŽð×>ÓÕ{”B þ¡! ÒÌ5”PœCH-¢‡!Ò|‘A=s3Ôö†zÃõBn×j9‘$2wÀM8SƒIc~V²1Ú¾ÝBO¥v`Gu¡ùùô3±96“cÜÑi¿Mì“´,O£E[uu£Ú³ÙûÐ^X‡h:¸m ×^ME÷‹õÕ¶ÊBå¢*êÏ\\sjýŽÕÄ 1ºVþK¦èîç²uš©VèF|S‰«<&Ô ©ÌÀd™ÿ/l€c)kZ¤sîÉ4ëu «¾Û,^ø ^­þQ¸JE+9Í·$’I$’I$’J •Ÿÿÿÿÿÿÿÿ€œ«à>Âà×u%=Pã&ü¿¢Y¼ ½©÷ó®–_Q­IüŒÒw.ªç €Ô¾óy!²ÜÞ[ ²˜•–%ÐébcBTªÚDê£Gq³ä©K{ˆØd¼=‚—0gÐju`"*6ÓÌØ_Þmövå\a#+I^ón>è–Œkãhý8ËLÈî[QÚ¨xŒ0ã%§¢2&5­ *xJ¥žÕÒ  g· -˜ 5°`G ~j´bRPnûížüDÒáHbS„Z[ԛè–+…-ÉÁ¬"Ï„4Ü(Žoä-öï,´ýÎSñ!‘¨,ÓbÔH¨ç`@†_ì~æˆêh™ëŠÎóú”Ï ½ @‰û€`XDR'{³y$HPlåNÃ|7-4ß $%°¥mö$ `o*Ýi? ©©œÊe™Ðâš$â²£&Gt¢è¼ÍÝUòé,Ú?JbØ® üè×3èEï:¨×¶ê ‡À¬ÍâkË’SÞb'ä"EŸĒH«F_ÓNfqÐì2Øn=’ xƒ;Ë1d´P.Éœ õK $’I$’I$’I$Ÿmÿéÿ¾ÁâþÛžYØÇ  rÏò=ÝÀŠfó@?˜-têçƒ^g [üÁ~u›U°ñÍŠåL¼«¶ÂϲL„±B30ð™×ÿ|å®I#‚SûyB°˜®ýRÜä!ì¸ź><6£m¸|Ìet‰œ¥»^œ¤—Ó/þ Û’]»¼”€ޝŒªªªªªªªªªªªªª«çÔˆlïâô¤5jÕ¾=î»äΚóΜRLM,]ö·¦\/ [ÊÚdyLr N¿xËÀ˜5Ò ç{«}Á¥ób’ dÞ{»ðzW)4Ò…d;ä·FŽûhè¦}á î:~ÑIªá@ÆÖÁý±5þ8,“†9çQ$T°Œp g œ°6à5`ßTg¢ L ãV8dʼnîŸ×Ùbùî*|gÀhØŠlP>i<ò<•Ôc#åGà3º4‹¯=ž­“Wl}Kî0!¨û}Ö’Ìi7Õ?ðªï7¿Ì@Èq–dëßsï¼o-o|üÀÊß}Bd^ΗßçòÔ°¼ël¹³ŸvNUÌœƒE£4°“FÛ=IdŠàÛïŸ%%–‚7º¹íâóqrS-Ëh¿ã[jêÔë2Cµx*ÞáCˆ›—Á‹ì ©—ø|0~Ì,|G‡øÕh‹ØÂLøÁf1å¦x#Àßx¾t¼½nb+oºƒòi*l‘çzhl½f#¤hð À,VvèÒ ¤áÁÔö-:ß[Ùþ >\r¶Ùv÷¨aJ¸˜BØc«§ô‚‘GtzB Kó°«l"!©^>`N… δ(<’Wž•š×/ÅLÈžd+É$l} Y]Ìtç¦jîŽ ŒõDý-Ä|Ÿ7{!/MV^ä´GIÝ4•pŽ(¹ä‘¹ö¢]¼c.®¬[ù¦9õ“NÖ]êbcéq%+¡ó5Q7øœOT„¬¾†rW½BEÏúÉ$×PTJ\†=ƒM±¹W&J"™t”l׽Ϯ;Žë0%B#º†3´¤ÅyÔ<Ƽ¶³¾é  ѧRà9Š•{"ÀÜ!;=Vn(ÚᇠgÔKÊSùáQG¬*÷â.Y?7OOÇ|×$mÂ͈0.õ!YÄ^¦tÌß‹0¢òe÷õôá9땜nù4™¼c]öÈǧ"Õ„•3½±ó\¾Ã›cˆ€Ô¶ŽÛ‚žrP›[ˆ^Û *Ðby>_’bj íí÷Qd7J?9Z%i¾0ÆmÚüyTE«½zµ[/­ƒ1SVŸÿy¿VtsòÁ±Äh{ßË7$ýËÜ&» ÙG«Ô`67˜Ó_>•k ЕÚmj•¼z^ëPÙÏœ©»a¹Üøy4~£µARéØ0 {SÉ`êÈé¹…í@‚}L·¡ß7ìÝ$SÕ_ŠÉr€‡û–#u,ä岯B`JAŸÏKZî;&ÚÛúíûÒ²-G?%: Æ%oÐ ¼&W(£OÄãŽ@Ñ:¬h²N)~Wþùž¾fqce•k ?Š"ßÒ7%K;™­VÔ¼ùÆ!HÃB~·׳R b}zjœ‚l²æ¼9õ3Ç=ª&AÁûá¹z@æ9.Å|ðb=_h2ÇK!«§{üÖL…ä{’â&§¡Zl>àeWyª‚¼vÛ;ûçã*½+²”ŽK‘lÅ1g|)kÕ¬+Å3Àñ(Í*6íógÞ­ú¯ h ¤zÓs9r–àaóN1œÇ«šµ9ºvÖÐT p¦)Ü6–r›F;ˆ®Ví–q²2慎.®DOc7˜#ÌäÀ¼ÿÆhÚIœc‡¶v§Eâ¶ (-[õvx Cÿ9††gBC÷t³\ ò±8Êç'нµ›L¬T ß•ò¨­ßyH›­˜"mž¹’eCˆg?= Jë'Ôl©Ð¼ډ-žg(†ŽÏÍ2äËlhK7Ä'µö@kT@•.ìÄiચ"Œœ–•Ô`•Y¦Ö-Ÿ ³¼dIç§òéBÂMfxbWb'ezÓ]Š9b‰Ý)Öæt[ø–¬o‘;ËÅ„…V]{z©àï?ÝX™J¹¦àIyÂ}™%ííí»Ó¾éQU\d¦nNÌð ·¶)Jþ— àR„ÉŽúž_’~ûÔÈ i½Ò;5½\ÿ(¤Ç‚Rð;ã ^HÔ7g£Úac­kͲPT‘zu¹F³.AÿBAÕ±ÂÆÛÁ}e»o¡I{FEÑ"™wÆÂðQ‘dW#Þ_‘QåÌ‘0R³’GùçÛ5²I/жªá¿ÎíeºÇaªÑ4€_³€FÐßð¬ÓÃjäÔÃøN¸ ™ªÛ>߯‚v‚ß1§Lýýr1Y_è>¸6ùzþßKZÎQÌÓlêµÂ@œbe^Ƴ\P2¸ p¡ ‚´V ¶~ÀmnÞ M½Lu¿ü”ÕH ÊS1cŒRbÄŸ½Ëp· UDI­Ç§0“yAú–nÃz„2º@ë9Îsœç9Îs«„}f›UeCB"£çZ-ðôZ@i8UÑ)TáZI+{RyC· KyP†’8àfµÔ‚¹ÿ*“»‚Sø1Ñ[e@M/.xNýL¾ç¼‚0à2ÆxoúºÕ‰¯ž2âU’ª‡Ÿß’¡NIÀf·Tãß”[™Ù줢¼ÈqI$’I$’§UÐj¶_|nàÕ Ö4„ŠxÀ¥Q u•PŒÚ0NŽ9ÑïæSzI$ÓŒ€ 60¶€NÛáÇŸæÊ¸2u䟊ànLwM'mvÍVÒKSÚÃÏH.[΀˜qkf` ‹³†êÑÞO²R„W‡ì"\Áä’I$’I+€#m¶ÛLU§4;±þÄ•ÒÏÜ™üI4hôάŸJ*eº¼ðO¢4ÑÜ{¾®„¸Jªª«-êôƒÄâAË·r8ÎKE›)öÛpÓ5±N×a8ê`"í”À1®h±ÞÁD^'_N×’ðñk)ùÒÏÚâSow=‹¿3=Ùø›3KiŒ„§ìãæil§F”jbÊ7.$ôÝïa%&BUôß™G¡ýé /@0¨Ð Ð(^¡<¶ÈïÕ²÷œ¥ é[C‚rŽä7ËjÊCé¦6m¤„,ù²Ú—ôDáJ{¯®)Ó P”ˆéWœ…¢)î€-4‹Ñ‰£¡˜ÙOrŽê žšêr_L_¨Ò‚é—›+!E¦Aøœ"y vKâ^Ç„ÊÉònžt“uçó}Þ£³ÉÎ8^%eÊ:k³xñ60ßÇØ¿šáqÀ±bÑ£XÉÎn‚ ˆvÖ'•¯¤ ìÝ[B¤ÈfÖØ!BœŽuÓåòÈmvíä‹„œÇ½}·Õ‚¼_§[bG¢ÈnÆXþZô/ ±4òªI4ÉE3s¶äÀ¦K†*Î kq š¥Mú¯/#º;êC@ÜØ©Âš/p˜öÌ6òùHúêЃ?Þ\”\]7'ÍŒvamºÈ¬ä€Õûÿ9¿–;:üö#ŽU>žç¹~'#R–ðžöù`®ùI¸.Vƒ„@[‡·üLr°"T5ÑÏâË?Ï[¦ÉŽþÖæœ@Ñk±°‡s{é´Upa³Ê‡·0Ž–!‡!Ü9ÃWNµKÓ-}¨Ž•ÛébUœ}tÂSÄrI=gèÑ¡Ø,ºŽD£Ñš‡w†D9JLsî¥k´˜[·[žž—JŒUÎJŒWÙÛ…D8IÞïªZ¦9˜Tç|à•xœhÂÄS´} ùí.a¹Óöe`O” UÄSø4AC¥—üÇK¹sf¿²‚¿ÚR9%ÂhÈš³Zá!"1«êÝr®P ¯Ï{f€ °cÄ'Ü|ÓWÆUg"W#J0ò²ùnõ<+ÞhEKKŒëü€îîTD™>I~aÇù»wU|¤­Ì2!IF@a²­“·³ Ä,9.Þ/aÆ€C¨| RÕ¡…Óú9Ô\=,iòpÀìÜy̳eÒý''bît$ü„ø„Ïx©`kzó«GD\®ØÕö0~VkI²0ÍD±¼¢wÏÙóJÛ¤+ØVÊ ž=K’PjÔ\D¶ßÉLW/ècÝ< $U´8_­¡[a¹P;F$™ï+lG <úeÄM¢zè4ÍWòàÚà¯ñ@q«¨Ð=u‘°-׌M#Ïß„¨ñ2_…o|Šw %†·p1‡Ê‡!ò]! &ß ñ<34 ¹‹¾kª8ð94€ cjruu1˜4·ø$R9·§üžecJš9•kkJ–+£îË_!ð’ *ËX²Öè_)áÐØÝaÈ`Úì·稜8a5Àíãué¢èj>€fóä0ß>Ѭ ~;æ/Ô¹Pì*ù™®oË_-öê÷M•h§òáà¢ëßÊÝF©8øëÀ ›G†$%v³ß«j¦©nM”ó|ö²À'×Õ'hI˜ˆ#ÍeKkañ3*ª$ø&釹¢Ãº-‰<½î‡Q©.Àa!/ ôe‘¿J€Ë{{h k÷ üŠU©uzõÿO%“¤Bå[DÇ1ƒ…YÕ¦±Œ}Iyܘ@ó {à•ÿe†ºM5ë7¾NÂ~ɰ’þÚ– pæ°-9ýh¤.J€˜¤”®k©Ò‹ñ—•ra!)Ûë2v\.Þ-•SJz(`ÊârjÜ•‚ýÀÙ­$ñ´kŸ×$Ù$“0fU…ᤸŒ71²iÞ‘ÉBlþô@ ƒ§?SMú;LøuYV’I$’I$’I$’I$’I$’I$“.U<à4|A–F°ú.% ÓõÙOÊ\²¯(%yx‹"5#Gv-Œ`¾ïîgà߯ÀÕñÓ–ûý £¡¤DI™™™™™™™™™™™™™™™™™™™™™™™™™Ò vYÅì# ʉÉk8pX¶Û—¶ÚTÇw ƒ_Ž÷¿™ýéËóPx7§¤æ?ÀT[º?ˆ¬_z‰«¦ ÞTÛþTt_Å÷é@­Tëæ0–-$ÊrÛò´@;ŸDfQUðÜ»wó§ìD àŸ‹~4Ó”ñ>uw3fSÆttM›  ™iÚD«Z@0”ÃqáÏ~ # +WTØ¿Câ±îøD4ùQVq(»Ê)ocafØ@ðN²e7ºÃÆUw«æ3Ç™îákä9$Òm(¦—ÿAa> @©£:Z´·ÖW5¾±½«øI´Ü‘ Q°~•ÿx!•?OÿxUíÇæéðY«[j ‚T<*û¦ÆË2Ê¡?Ó]h§8ãB„h³›•3sÀßòÀ^§€€a!ªfÊ”ÔmB›a†”s¦Kýß°;øŸ¨`RXëØpé èÄ«Ú*g6¹ò²qõYº´ ‘¥ç¡5úñJ¿BÓ3um)UUUUSy³1t¢—7áÕeZI$’I$’I$’I$’I$’I$’º  §¢„ÈKô,`^¯¤|”#kæ|* :R€àÊaZo„L¢éÛGSjTª­þNÿbsMH­Ag²Ýÿÿÿÿÿÿÿÿÿ€×›C÷!6o±ÆYUsh •«Úã°éï™EýyÔ‡ˆÑ‹ócjòyãø;Õu0Øú{­y\DÊ>Y¹w¤ŒÁ>ÂR¶ñ¨µ_9ì4ÓRÑxuýÞ‹ˆ$@ D¼R{éˆ×©À‹¯Yn~ñ¹W$(÷*ÌLŸÑ휤síl!ƒúª¨½P?Êós »üƒâP|ñšã‰Xî…âfŸî“ð/â¾}4íjèÈ^£HÅÓ˜'µÙ²Õ##†Õç!•oqóüWÐÎõ¬î© áöE A‰¼¦¡«¥&1h¹`§ï&O¶  šŽI¨àÂÍ(@Ë6Ýßû¸«Ÿ9ÁÚ[è(Aàe8JºM.¢Ê´üÔöb•*äøù‡Pà’¡¦Á5<"ÇõóÄ«3h¼Í³}”Ü¿^(ÙfÜÊTÏ¿ÐÚ¯N!F’X¿P?^c:ÿ; _Ùò©hJàÇÒ›¬Ö|”} ëòPœ—÷4„`2EȠ뎖è,˜¸7œÊ×tv–£šxÿ8_Z ƒTõ+޾‡Ò.çŽ1H•×*.ù­zh‰1ÒB¡ì4.Ñ/„SÇtóR×X‡Ì9.¾Búü:ͦ%g©¥¦}tB6÷˜N\tÈ{mÜìolΗÛg•ÁŒzèBI¯AÞŽE&“fœñ0Ë{ìGw:º7S•}ßTøz õÖçâù3£óâDéªçæ¼á•n³{ 8MH>‡:‰‚,ê]>YSéjj“m¾SÊVÀU=JÊlih[¶øæÚÆ€û·hòŒ¼”¹ÆŽµËzGB´e*¹ÚBô‚}Ln#ÆWñõ¤úÌ5+Ä”Üveaø¡r@¡nWˆHOüa>‡<-&éªçy±øñ,ŠûZ0­žœ³ÊQqBoIÉß˃Ü7:‰Ë¦¡Î!›šNUU˜¨äctlPq£wØc»’Ò'Ùþ†À9,ÃDòö‰_%HuqGدhMy‚ûhÐ}m©BôéF”Û±åyã·”»Z —»›˜`;ñNŽƒ9n³ O6 KE¸vÆ’’à§µæv©†5ûl{J¢&¨¹iT ¿3P6„^€¼ VÕ[ìµ÷Ï3ÿ4Æ»$5Ù/g†Â×êãçÚ– ¦Õ‹¿&¾!ž"Ïæ&ƒ|Í×Ú2µj›U‰\ÌÑÛÝê5¢×«†ùoãt v A¢Ìú]XË@bjµ¹¢ÑÝDŠRTÂ0/ؾL¼PCŽa—uQýGî÷óÃ+WDW}f¢·\D*›'ÔÙn•zŒïN?Ï$%UN«_æ<ÄÅo7ˆ$ºc“Œtæ³»G a+¢û÷ß´r/qB¡È@õêä2N[s¦ß%öeçnbþ?ò¥ØXL xJk¥:<ÔçÛ@tú0âÓêF†J{Ö¿Ç;!H„?Ãäæ— ûY‘±0.'­?|j ဨÚû]èMÜ ÄŸNð-Y!¨‰ïFíYMš.G÷zbø„jÈè¬Vijºv%5˜„½iyž×ÐX«öô¶O3¢µxv/ Õ$uðÎG¢Ì×n|ƒymФ­ŠÚ›rÚ+O5 ¦ÿ\›Øœñ¤ ŽW†&0Y³q±²(«ôj‹šŸÛBGºIÓ|<ƒGJKº óŒÕÀÜÆÄ¡fwó¾†_øü]Óü2ébô^ÌvîS|·K,ØÇS*è_ZðN )ô/h‰ôo¼¢Ž‰Ó÷Hjݲ;;2)>]ß(âª÷kØYV\ü½mL´gÈ”çT#F;ú›ñImõ¾1ˆ8:ô¾€¯G@ÕTÖ-2ã†=iû‡XåBSº†å ¶YÕ‡0‚á ºSüOoºûwåÒct_•ç#-÷?±½¡x^n,»‘ã‚¥s…²fÏJ;ö´í8 ð£±†4k¾#Ö§G½u+/Ù¼îÔ›7…•ñYÇWgÓcõìzvöcM`°_ÿT¾ÄçL?ÞÅÇL2ÊT6ì¸-Õ2ÈYüÅçL­ðö!»÷KÔa,Ç¥[†™†SÇnýç¼n¤¬äNB¬+Év¨ÝÉZzª;•õ"`äkÊ‹ ÀÛ¬œ«(L2©³°®‘ƪ(7CU}•&#ºûÞþÆ( `ò;º‹S@1 RõŸÏŸÇ'ÅÎ&r,‹MY <«·è0Fo¢-Þ*5&Ç>á麎ңøÁÙ% K[Ú³Gš~„h ;мv=¾Ø›€§iÛ×àòÉGNdC¨~xÈT‰»¼¸Ä_ü[q¦¶Æ²-µ$ö hSu/–ÃÑRÚoíÿ Š'ÚÃÓ¼Ù>\cèô¸7<æ²Ø( %Ä¥QãgRtÞ*:¥3AÍèNcåiíÿcKZ¡tRгfM€0«9®ÿ}‡Ã¯ÏI CõQ‘rÏÄÍ5Tp;ËÆ ¤˜]@GÌ:@:åoÈÝIça,®Ló-ÜÐ×bhtL*œxÞcšI±šëS ›z1íÑbPü<¼ y5{™ ï;Ú¨_ÚiÐR(ß¼ ×–°-(…YþÕ^ó—Íí’_¥ñˆ^I÷’~êešyX’£…“‘K@íSžI±@4à–q6çûÕgÎ@]9×Ô$Öâ׌¯Á6áèÇÊʘL9Ž}‹šnWÊ8²Ì®ÍGr-D¹}rÉÛFäux˜ÊãÆXDCÌ?nF¯g¬·¹ò÷ñv›ßØŠNÕ@¦yȌؖ6ø§’ØBF}5´GøR,…¥É¦±Ð„+/nû5Ï:íÀÌJ#RÖ%õ‡wwWÌMö:÷/š. UÕǶ8 ¥|¢J¾š€¼õî¬FÇ–ÊO­ƒ©l,Ä:Ƽ…6Z¶ÈaÑãôð©KÕ/¼Ü¹K‡o[a(€ OLINÎì2˜Ž»ùpÞ?û1ë>¢‡JÓ_óJ‚…¤çs«åy¡ÐoO[fuDּѣ[’›ú„µ‘ÇŸÚv}ô[Á•ã·ß‘Äì Õ¯MæòLj¬r‘*‘UÍUùñµŽ·¥Ý-Í\ìÛbræÛU%ô7a°ª@T7iŸÒT÷‘—E=¬'ÈççMH|Ac±Ï“³c/ì+a•³¨½þÁžÜÔ‡Ô€–̘j:•¤à B¹—<¹í0P.ÞÎâ8ì°ÎX ±ö¸ýª#€4 ãÿ&O`N¹Q®Ökz ¹ƒòỶ%FðíA¯G,NÃðx7…ÇgоjJžÊAúL4¢@ ÜYõuâ…VáôÂäʉƒ6ia·K/ïKqP—u/C€¨Zn@÷=Ê åáâO`./)BŒ=a‚[nr§ŽqW7¸Ë2ÖޞЙéâ“êý‡ä¤v º; ¡ÐÎmv\E™:Ã蘫ÿLez¿Òt1”Alë–œÈÏ-·1Õ%çv¯x"vYSõzÍj¿p Æÿs%¹üJÞÓ F<…ÑÔo´cåÛT©,ùQ‡F¥-§÷ÈšÕ´ã0A»¸Jwx8Ž`9èã•GŽeÇd¬ÇF3ðÜ„4=ÁÄ݇âæO£Öω·!wÉã¯JÞ w‰Áóç¹Ð«Q&xb…"U‡òš]†ô–ZeªL‚«Ñ˜É‡4{' `¿'h%"Z–tÖI–CÄÿZ+zú%Ãߊvù¾•Ç<&/¦´Ýf a³~Py)°å+z࣠WÎXkpȾ#ìw­ã§¤c-¿é¦iô)UH]8cØâßeÖI‘Æ^¯÷J1^êaŠÜ‹qb² ìZwÎg­/‡´ê“h_¾¬À"}­«1ÕÖüÁ}”;ÕÐYE$õu?=´Ì¸¢fÛê¿Ú_jLq,0#8ïÅ0Á`=ó§>ÏsὨ•â­…Kày5ÿ$?%Ä1myúäQ ÿrÎ6{ëÚ›@á{FöÙÞ%ªB"`åÖÔV7•7ªƒ’´Dzàî§ù¢I”¸K{¨rëNñîÏ,HÕÜaåÔà¡ 4)R²·qD$äWC²ˆê2™Q¢!mò‚ ÚfwÁÄØüSÍBC'…»™¦™¢âù}'¤Ö]rÇUõÿ^oê¼BßC¹-¬b Pƒ½WÊ(1ÈâGïâ]$+¼ªÁðž´7ZÒv¦:T‘R™ÉñXVïô{h”KdQÞ ¿ –¬µ+<$!Ѹ.úãK®a6öÙ ¬©*„ ûûBSE¾ãÞ™>Š÷ç‡NØØÃýHx˜Ô‡Mn¢ÐW|ô¨ß’x*y QÊB•DšÙËj‡=ÈW "ëc'Þ #n+ˆŽi%C54”ûâV&“×!ëèû-\Vô\'ØjKl6RË™~]Ç¥”:oÙ¹Èunµsºì\Ì´|Šìe_Øâ€gß‚Y¥ÃQ\§ŠZ„–¤¾òá…XÒ9¦ñ3´ÎMZ}-Zª¬€À,Þ!Ú=Ù¼ƒY.«7úxow¹âë 9:3ï´iOû)¾m@\ᯀŜÁ.ð9è¨|ƒ¨×~çÑ<Õí8×â…“èñomÓA¼2·»ëƒ-Gqú ˜¬äZÒÞEË'ðÖ8Z–hIÉÞ8{E€‘_Òò +<÷úV ƒ ³8Cñfë\.e‹ŸU—/˜m]NZÇj’¸Œ¹o˜¥‘ý$›†ó:Aê“Q•S4‡~PãƒÆ=O×Qûb³Ç¤5lð)™îI‡ Ÿ·³ª,áDŠXºåûâGKóÛ2"ç“ùC€ ɱ ¸P…P/•{h`-æ=.)ãv>o2¼f¢ý ¥^ÛÞk ã³LŸŠI1³ìµ8ÂB§ô)“|ŒŒ“Ú*”¤½@Cñ¸ŸÙÇÖÌmq¨át)z9:^½¦ªy~ºø.XÛøùõ,ZÇpbåøÔ¯Š7Éô´trŬ…wÎæ!tsaÏè0¨ú“w¼AäÚÌü݇ê/qˆàºxœÓµ‰‰–D²^væ¥ëXâÓ\^ùT$»JB=—» ®CN¨V4X÷=i®mÏ1Òä_3<䟺@ü'ÒAW6•S¬´YZL‘á„ö¬aª.öœÒFnPÑJ[ž# UÙÒ«Öí 1R““°P¾M¹ƒ*«<ëEAƒ)dõ`[·I\~•Ïã“„Gªÿ`¤­”aÐÎkt&Ðɇ@à£Ny¨47¡?ÈE‘˜-Z<#êÁá–€‹7~ ØNžº¯6 ¿pÌT<¤kXèÅ˲CË©e‡}þ¿‚Å— [lÈ‹ÏèŒG²ÐÍÚþŒí“±…'x¥µ\6*ê 83/0%Á^Æ,ƒNDy´.Ë5- h;¢=‹Õ§äTø"íìù4‚h”UK¦Þ¢1rûÜ ”&‹´/œûÜm@rò"õ–5éÑùúC·5h§;¹Ð‰l†àipð­T>vªh…e¨÷ëuÒ½ßîä Ø'bD=ã’è ÐôùÃã}ã¥Í¹•Å&üùlçªYRÕ¨ò=ëù^ôç ¦±ó­K¤œ/Œì b7£JÏÌ'=è‚kˆk€“.ÅÀá5‹XVøSRAÖZÕ1}Ê"üׯLîêEƒ£l½`oØË°* }ÐÇê¬#]…„Õ[.ÝM#÷üQ1晸:¿8‡Z¬âîä·F“@lØ„sAÓq•-D-X&HºTqõe蟗õ|ÒÐN¡z-m,=®gêüøs¶Â!gäá¤ú@ˆ†ÐvQþtÓ_ ߺ¿Ðx›Mü=Z°\=7¨rI¡yõc%KÉ£GÑ^Z#sD]}3ÔÇZŒž#bA-þ9¡ ‡Ñ¯à‡ïåoh0¥=±‘Å<ÐÀÅI·° Ö««C‹ó‡ãÉlƒZó‘ be»G'^§›†‡N(çÁdÏ6ÑÕ„#Ÿ-Ðè[/Ãðä ^¥LL+áGë¦Ò®×›†[vŸA_Ù:Il©;$”Dõ.RÀP.|j¾wù€Ê,”“í:r®0K1*Õ¡õ’ü4'©ÔÿÜÁÅÆ™ó±uT¿áLþdmu‹ûZ0y8»¡ž ˆ’f¯ŠÊ£L¬Ï|OÌ­LF åqôŒÖ÷ü)¹ZµŒÕNa~—àÃ/¹·Ïc²Ïý•Ê2¯\AX¬UU¬Í!z¾ÙöÓLElÖâÎ-fZ¶7€ˆÖ‡PQùEh\ênpOª’Q`ÉëÉWy>¸Þ›‚J=D‰€G¾*B˜”GŽM8°1†ŒËn°Æc1”rj¼’+òo§³¿e¤FІÚͤ”CreaÊòb^2ÆD¶ &Œ^ƒÔâ‘h®±2UÍ ¬åy˜÷^s˜µ²!Ó Dì[±2^~XžµˆæÒ>^Y*éÞdÇctWɸœÒƒ!"œI#äeY)Ýh»M£àÞIödûôR,ÖupÂȹ~düû|'ò—ë N ãyÿ€”œŠf¸ªÞQ‰­x)WmìBbʉ#×EXvlàPÈ”_WR4‚_ñ’‡–Åá#T.—ÇÄ7BäÊo £´‡×JúÁ¶z͘i¶Èæçzçß–¯Åé|Ë—Ií±¬ÅÿO„ œ>µ3¨ðÝyO)†_›÷«’JS»#N¡–”JQuŠQ‰þ$¾f|ú»üÿ(‚;NPØ’7ìõ®eý„ìÌNS!îyˬ¥%ƒb*!£g&7#Èø‚;íÈ_8§‡ÄàlÜEDlw·¾ÞBçt´þw–bHÖy} –¶Eü=ž©Ø$O_ØMd… Ùv¾¿µÞÇÿeÓTeþ ææÏ¯º \Ö"ðC¡C‡‹|»â2 RÑÀü]]ØJjŸƒ¨Ó> Ÿy+ñ]NÉ­Y'-~_\0"^q,ÐÍ'‹ÕìÅ=ØH:ð ÆöI…XCDJúÆÓØ”îëÏ QÝÄ/½,¿/ã®ô²”¬€FxOéÎò ~$µ5¼‹äº÷D¤¬Åâï~ ð<}ÿ>bþШHa®¹lQÁB:¸ÐÔ^ùÖ½_2“ }v-áÌP ·!?¶–ZŸ±ÀoÙ*ä’!?„žuI7"p®Rð¬3:6ý=M–t8”Ò?JõxéJžP¯éвá'ƒ,4â2Òô×86“ÅÝÓ¯ÞRo1«ÿhs° +U@z€v\`O±à‚ÚwZè’œL,YoåjÅ æ!‘‚Úäßí”Ö*GãZþ­»Þ»]¤².ÅkÎ÷³Ôwª,° ÑAioÏ“× ,^o26q,p=4v_œÖJN8úå$¨y]lhÊ;ž«4D‡š´Êi²FòÂûÆáëUïšxÁS/~ìgÕÔ|:TC•PŠýÓj×Õ‹™þFb“‹_¼œjèuÁÖ© ò» ƒTRC쟎^óü²¹“à`¼/ªД0Љd{Ô%ƒ?bî9¡mü‘îJ² –6ZõuÛ[š-¨ÆÐ¸f»;•ßaƒõ±‘÷A‹Æù3”¸¯CÄÉ÷~Æ:!¢á¦$³0ÜÒ…qV)µLGÜï%ϼ‚ЃVŽìгÜF‘ÔxfˆWµgªÇW;,—‰Þ3/¾¦rà¥Mó(R96WĽÞâÒ6@ÞʧvÑj*é<.Õû;¹&}¤&^¦B\ÇØì3Ü÷Y1)wÞuðmÍŸþà- ÿ5uI{—#u}H%ÂþðœÔ{Scg#²ó³\Òúý{;B‚·¢¥*ÅnzÞÜÁ6µ&)ˆK‰&lЯn}ÒÂä!ëÜ×pB›Í}Dú+UÐp,t¹úà™åŸë“6y‡¿Éz$îÀœ:óùœË$¤ëå ¿ õTH‘N¤¶ÃQÞ©ï‹äÁ.$eþ¶$€âxÄdç â׸LãNP'öRm«*t¸9ñƒ@O­œuŸë-GørÐÑ`Ÿ^Ie>»x½tâ@ö©å¸¹E¢á·¯GR¼åÜ)¸§oý¸7Z%»­›¾‚a.€ÃÏ!2K ©0gËKóøgàwy”O&þ$ó6ËD¢ýà­¯Ûé2]I¥¿¬à ;£ºf@Úv¸`F?áA,E¬¢†×í¢A©A *ºï‡ÑžÚt«3– O²Týy6'¬À…ØŒ}1Åù`ß_zÂš›anìrÔ·ä°Éæ»"ªzš5Ni¥cÝ[ ¹_ýÜU@O@]ÓË#paåAýô#ä¡RDEó\VYÂèz2“ãî9«IW—œš«HUãçßã"Cô\ÙÉÅŽ©œ ø¾><ÞŽý»5F=ñ×Èp!ìy%•†x*Bߨ^ƒeàÍÚw¦T_kS¶ýÿ<´õìH«Y¿þ(öqÿa¥wÕ«@! «¤q° é¸+B(̯„ýKŽù›»ÉÎ#÷,[‰Yª•. ß/‚}®grÊŸÑô«3Ë@Gm¹…hÃל®`ÿZ´°vK÷?«çƒoíô¯Í‰\æ&8&È¡ð[…É¥/.’ NsχUXМ™©ò¦ÿSk¡ÎH]BÙÏòë´³U#†rŽÅRÒŸB’X›6k^<ž)Zø7âwç¤àÙ®ˆåÒF«/Çš–ggØ1ÊP·cÕAxîúyÄÿ(©AÃWBn)BŸ>@†E• „)0 ÷ñ??O#½!þÛfúµóëWí¤¯ªÇ×Ϫ_í©oª½ýZ™õ$>¢¾­HâýZ5|û[ýº>~ŠC¶oÛ^ÁÝKC·¯öÛðvÒùúUú«ûêµo«G8äÛ·ÃÑ_çÕ7ɶ§t×ç{Ótî˜ÿ“ ±ü›¾w£#½|›lé«„ÜÎtZ6žÂ¢ŸÉW#ù]z<¼ \±7Úê¨ò¸2^5 ¨í÷Û\kÉOJØáÚ`χª¿×b85–6â„ ˆWX?íæÃ¸‡|ü«!6aç•w¿ÒXwÐ%à®âÌ^#·ø€í‚eÒ}ø",œÊ‰õ¤ÁŠAZY¸Æ”±;®å“;˜+—àqp¥-$f…Êdr¿dà{2«Ð€r>ÿ$¢’Š…e‰ú <ÔÀسâ@®-CÉ3J²}0ARÀNx¿RsÔ1ÈײN«Ÿ”*ðÛô¹øã½élñHƒ­e2kdø2¼THÑÚ³n“Eñ2œn°ï¨>øÝÅÔÌJWy9nÚ ^ÛrU Ïð–´Z³\Ù'%S¸¶ldëEß¼!·mÐöLC’§AÜŠÕƒnb€ÂŠ¿[~ìÉ㺤9ï·FQ*9ª*E×q¤]|[]ãòx˜Õ×|µ\äŒ×‡;$ÇKp¿Ë;¥-›*,Á)¾æ0úã¨[<ɤHjò•jÿN±õŒ¶‚Aw„èmŒZÐ L}>r‘ND‡¸æÀœRÔ f”:ÝfU#L[<xmN€ÞñØ^¾‰oÄFs’bj+ŽfM®ø"Ÿ„ŠŸHr”Þ+¦·°yºmi×Ó®&ý-ú¤@,5vŽfÍûÓfˆ©±ÐL·ÕG|\þÓpò;gv¡éµJÔôzQòZç3ù_ûrâÃ:bâ?á, ­*âþÚ¾ä[»@¬(X Y¥ø¶0—<à×lH/OZÍ™EÈÏHÜR†À:õ“@Æx²W¶NI£¾ØrB”™Áò#…Hq8ók¡¥;šÆšÉîjŸ“˜P¬÷±/ÃÍ,uˆ½ÜÊm8܃ôv.‘[N.‰eˆ‚²V….èæ3ÛôCnü܉ìo°Hëwp|&Þë™hÂ;ùB޶ޭ{š¡Ö4¨­iÎ(’Ó&[}'ªÈ­µk—Õ‡4iÊøÿ íeo {qÒP­q'€èÓjƒÔ‚È΢þH;D z‘Ç¥¸û²”»Wƒ:'‹ßsˆ>Àm\TŠÆÜÍBô©íÎÀ©¤¹ëã¾IØ?T”s ËéJÈ«cC–E¶?DÉ¿¸1·µ‚ôš];?¬p¿æb&l°×\·š:uÈ÷/X4y]Õƒ½C«”f/QÉH:Õ+Û꯰_§PD“_´AÚ'^Q¨±ÀG7Ý?<¶ôü=©¯Í2ŸÂajq…È\Q”k"¦Y3…»‹õuJŨ…ÿdû°n"VàÔ âF Vzyðp -W—Û\A¹&†Uõ–µH‚ÿZbÊôìÅ¢Í5¼mpu0!ú½EMý²äg5lÀ½…ø_…ø`ÛÙ”‘o[Œ‹Þp‹{•?Úk&|–±£` ÙýK¯>¹õ¦ûµ1žit[ÌH<ÈFÒ…]5íÀÝ'Vþ9‡÷· –-%ê-IÄÒ…ÉËèhÑ·.¾hù»³e'¥Î‰„v³EÊMnϸN#9F@Pœd3¨À³8WüÊ ÖðE…¾?ÈRöx‘.¡ߨ޺Ʉý»?ø d 7ð;_!Ößþc·ê.ÝãBYW'z4‘bzFÝ^ožbËjþÃô'Èúÿ%3ˆ$—›ðÎÁ‰ÚÏ+²Íš1<ļFïî*qµ'‘ dûxß·ÍóT·½>„)ØWe ÏǼìÀ0$¯ö¦Ó†l t¥aÿ_ˆ&N-{Bá¢ÝÑIÏ*#ÿ?èÂnvN¶Ý%e‹ÿ\y¶{œZJëƭ׬M~‚dºQĬîô´NRÀ.1Ã(íÓúûþÏJ*#¾€–XäÓ˜QX¤ªÛ•êfébåVÉ@ÕV8`tðÁË]’» Ñåý™7®7#Ú‹3>ìÈ”íH&cw `°]ƒ:ÛùÄ"#¨ÅÒYñÆj¥•±’bWlÓdºÀfÄÇÑý¬OP°€Ä­¬¥ï-ꂎæñSmJ¼…>˜’™Z p6š1O »4ç«÷4¦3ôäëVE%®XÚ´šC˜íº 2ãǼd,~°žé—€¢4—köÐüMê…áY'öÚÞ¾f°ão­‘vtWÉoʨ:‹„#>à¢9QF" Á"(Zm[ûa©@Ä‘Å, iŸ×“„§Ø|áŽUX­ÂYyÈ{“-OªûÂà_Î,J½H¢Ñ3:mÌiŒ@s'ý†›«ì,r¨D—vÂq¥«[SÇå/QtL ÂgÁ}ÿ[›]ä'Ÿ˜.ð,‘È1.(²^áZ²#FÝÖ] )ÂU÷·ÍYï8LðN_ÉÉ[pÅÄ@å1c¢åmSžÙh€µ×\ÑcÎ\6H¦Â¾Å)näÙ9Ûõ‡°‰ÊáÈT' ?ý¬žÇ’®sǼ¹¬ƒõN§f¾4=íÁ–g‡T\T\T‰³j=°€€éõ¦]·•7ÑŒ¢Öõ…}ãß•cº3…ý;0ânŸu|Œ› N¨ZC|ð9ĉ•çP’E¥ð”ð:¸“#hi¿ŠÛ¦dWK{²/‹lç¶ ò?V#M9hí²t0å|PryShc‘U)*ebšNØQÊZKŠZÞæ-o¶v`˜1¼ö+¢ÒM/(ã ¸+#›M¢9%LMŒO?Ìâ(Ï©â0©J@ò…¤ÂøØý‰tìúÉ“ŠÄÇ+—)² .ËX½°>£&Š‚¹fÓû À.@w$êö/ò‹¸3êã¡o°D§gÔ]ž<®­«U$üN\U¸WÄŒ¢w ÔÜÅfucËmÔÑÓ6¶: ³cM¸§u›‡*ŒUxELÉ›sc­éO©J¼µ×.xcðvwê¹Èð뎑±ç2£Æ›ŠR?Ûî… õÈÏ:ùÑ‚…å¤(Ž®'Iúþ0–¤Ä=VíyuïÆ˜R[MCGÆ}3ä1ÖÝUs¸ÞÇÀ¯÷›ôI>[&q÷‡u­ÙÖ ÏçäæÑ«\é[È1ÿA2&h&Ì26G°ú3¬‰fç…Éðš×Õ5>™$s ÝS£­äæÌ5ÄXa©m'3]þ»üúGUj€Z™ N0‰@Õý§+ò¼Qš13A²‘—˺Na8º"™ZÿRÎ"L¾úä Þ¹Í;¼é1U$âó+‡0Ô,šc)X"ÈßÀ©óûꪵ$KþÑÐX{úÖšlÏØ˜ý¼I‹Ëäâ¡d.QÝP©ýúÊrø±(}¯àXìj ʉº=ðu"ôÄŸ|¹Åè‘ìÚòÕ(¸IPç$(ÑTÐ9«ÐCÇÙ,µc"ˆŽØ¹0Îê %¾’9í\ž4Lp©pï¾×Ɉ¸¾ÖÛìÇg'ßvbö-Ý€Ú¸˜D|œ2kü¯j‚•]6³P˜†äº.B”>¹Å†GOûʼnKÿ**§`ÂQ ¹À‡ØhQõCqiœ0WÕYì 8mÐM§R?kÌDêëwK•UÖÕ¿PÇ rðR_é¯äýQOj¬‚ Ùx ¹ÌŸâ¯ËjÈAz¸>:m†ØÈ‘_É3¦ð E¢åüž*Å“éâuòtCÁŸ;Iõÿ]8|ä{Ê÷c3+Pir§®¬dÂ,ƒ±m~Œ °[#™íåù½üàÈôáJ¿º®¹c%_ÿ`“,Qåp÷:¡ô!RaTF4@6GR93ûxY‘A] f€컦»bQºN)l\„JŒ!…íuz¿~õÑ¡ò`4¡ÿUˆkýÖ!HàHŠðè+Ÿ‡Õ‹ å FfcL,íK7‡ÆÞ=;»ñœàæ*ÀøÀ`þW‚Ì,AýPªE¡­&„‡ŽR§ùËœ¾7¹Šmç`Š.m-Aj¶{Û„CðÜš±,Lž»ý®CÉýDáÏÆˆC=âÝÛôêôäžPL§g;ܬÒ‰½ÏÔ¾¶AFã™HLÉäT©ã!¡"¼EP>—þ>T¡½šô@ÿ}ˆœPç–`§7ˆã;é¯@i¢!¢îÙ3“¨¸!k¬;@¤×‹Júçœ dЦŒçĬ¯TBÙðš-ô¯iïœ3Ï’CéøQ¥=¥qœÐˆ(µÇÛd“çøM<Ää¾äò¸npÚ UÚŠ²ÁCDDlð¸Îã)ß{ÆAÌå=Mš_ÝÂ*ÅDx áRíRŒÃöZ¯«Wü F[ ¬/Ü=zMÜl0'ÿl#î;»j$ aÒŠ5âÙuÓYNFßMN¤N½P$Õ?°¡ Ú¿Aoy€1¿ûóPU„j|}x¼¾¢(ÖÜPOT\Z{¬òÄä,‹†–XÀ¨¶šä7Måµ°G¾Ø3ÀqÝ3ì”3Êl$fÎFC±Bi¦ÅQ±Y2Žê,Â|a7‹”¤[9N¼¡…ÓKК%–{´ì4•ûýضš Á¼¤Â@éZ1P†Ü[·;¾ïùat Š•ºþ£ы¢Àïmñœ&ü®û±(z„Tm8™Fu Ûd¨*ÀkmÉ$’I$’=”¯2âx$Ûm™ †Ë×µ=uwföµFŠ¤Ç¾œçmñˆ×ÙòRcþ —þ7¦ïÁ&Ûm¶Ûm¶«)—™ÈÖˆ7¿€åÝ„–•¨ßNw>’¢•ˆys6©gFc0~€™÷:lꨚˆÅ:å4ú²Í º/}æ«Ñ~V6Š(F’À°3©W»ö‚6µº )€Ô¯HîJ$d‘¥øé‹__Ý‹ƒ=“inœmÁeö!þ ¥yÍV R4°C®3Û‰í%³L 1›³Ôýºb¸æˆçžé‚(K÷³MÏÂ]^¬—«ä¢+³6nu$- ónHª8K×$‹# n8# •èiK¬¼Ó߃-ט¨€>þE0×JäM̨cÂjw& Q#q„>'3.J©ú×m}œ˜‹gBò‘ï_µµpà ]™É›æ›EÇa„’LìŽko¤(6ä’I$›ýj"£€ÕU­ Åu¯ˆ«Rêý¼! 8Â@l-Äk t©kCÛs¤8mÉ$’I$’lÌ샂‡ÄÑדûÉ4a äõpŒ'|¨ û^ªŸ¦ÍÛÒ©9Žúèq’Ëí­áÈ¡#üëà i¯f»ÔO±»ýv¬(íµÂVÌȼO=âôƃßq7… ~ú[àÏ\اҬ­²°š’š©K±±I–%Ä ®Ñ¯”d*34‚cM¦pÿ£!îÌšÖ¤€ìÿt`R ‹Õãi10»r ôøŸ”…÷6~¤´ó”V|ß ÁO!)Á\Ѓspv…á\úA`uäýáÖu­û xÓôLë†rœ©`Û&„8 ×óZ¶£3oí*¡uy°ó~ðªM€Ëš Æ9 ¸ ­•j°÷8ö/È.­ê ™Ÿ‚”Ggr£•øŒ†nSwâÀ¥Ø ¿ûçÍ5çVÒ†¹>z©Kh‡­£mQ¥†¦Ì»Sq—çÁ> Èçå~{h+¡Ö[¤æy?ZW÷$³fµ9ô¸®²µ€­‰‘øûþüì/Åbθ•r"Ñ{§X@H Õ™p-ÿ”$šÔ`¹ûY1H]Ô'bêæy\=O4&ù!õŠIÉ2Ôêiqs*gßÿYFµåÚt±:£œï>&„ˆYørRjÀ6Gµ%~˜/&…E£'¾É»-¾»@7ü7zE}Û 7|àW•Ïøè4¼ aû] )÷Ç&!“}`δàdû\¯C¿[î UȨSõ> †Vñû/†Öp@ý)Þã¢ÅÞFÞ'wDå“€rbAVÛÖêã0ã „RÄ2+ õ iñ¨„7©eú£ÝóZD=žß²p$ L(iá“J»?¾Z2EÚ~û°òn2å.CÁ3Mo/²†M»ÛDê­äl=[9(@j£t¿Z¢¶‹¥;ãP¼g2s(Ø/Â[¤›ð~žDÐÂçezàUüT:ÃűÖpx Joá¼ÐOôµ*.ûâÅ¥mÔ(»‘íÝÛ•û[™ù_ò¯U…#At¤o*®îá‹.(T ‡˜kÈfx¦ö£AÜÆ±¦‘¶vüZ¦©‰µ0¨È -Bu$Z½µªiSubj-øá"ÙiÓY×÷ÜFª^ex÷`_Hæ_ó®…¦ÔÅpWm'ëöå–æShtsVµöYÛ$¯Û³èo↠ 2zã£^'p8Wðj&T-çU‚_¢\Á.iºöB˜àÏ\<¸““±›„´¦ŒˆÀ~|¹2“20X!šúùpôW¿‚ŠÁ¿_IÎÚ'6ˆ<ÑÂŽwÒþÚhU2·£¾òF€r¤Æû+çc.ð?Ê09‹S­_¡/,¸˜›œfWAB›Žø£'Š^&ÒWX2m@í¯žÌðª‰m¢rŒý FJÉGj"ÿ4û2n 5QÖ§€Ékçb!Þ¥‹Æö´e\±Z´ø¸˜c”q+Eƒ1Ž{ÏÛ™ÏkpÕG—4Ñb½æLЦ$k_R÷;´Ýϱ~ßžÔ%vih£#$V¬E<IA×Îb ,†;bÅ0ŽzÐMÈ&ŒŠ{N0á<ÖÁünq³º¼?=Ñ\¢–@k#˜‡EÊMÊ8…G|ðRñ9õøƒjý ¨W¼½½Ô<ßᙜJbJ`êiÏó¯Äoòõ°¶IÐwí¹½åœø$ÈCþT?Ss©ôX'¹~ò?!gÚ%À™8ý°<ý‚;Å92R\[´=¼‡EØ´Q;?àÆ<ê[NÂÕ õ"ó÷'ó˜ÉL 6!æ;ƒu´•›ÁÁm—Ÿáî .&lð4Û«(âNsÍ.IFÀ%Ù 6ó™S'Vr–ÍÜÑ ó#,%I÷Y½jà!Ÿ`è«Å&´aRà$<\ʃ’z1]=0€.ÔDvwºEÞ¡÷K´ß £^€ãr¾ëøX4T¡9÷åCÄôaÔTh»¥ìhI V¨Nnþ”s®ÿ=iٶܹPv“ëÙÄOù§øÕµ§ÿ¬w¸tZušž`cY¯I2¤›ñ¼aB4?·5¸i)†³49ã—#Ù»r¦Ú]Ñ ƒ—…jq[Vn‰qÈ»Ú:Áé©Gedîù›dV{^}’}×]¥X&éP›’Ù#]r“©ØÕé&r]²¾ÍxZ ÀÑ—6Qµ!ã°Š*Ôèú¢2ÞØ‚zïZU`òð$˜,-ÙÙY¬Üh'‡ÓóõD kSã­¼™Œ]ÅqûÀE”›õrü—[åïíÌë[(ùE¾a2?ñó´ëÝ Éõ&3ø¤EÆú6\"$†&1üëyl7ág¼’FÉ ZÈ"(Q¹/Ž @rÊg²Ö›+Ž„1j¦ä3"¦UÚ/&Î'ã6¿ …Pâ#ÄŸjð\lI ™ùtF^“ý¤k*žõ?ó„‡~03µ¦j½Kq·*ª[C'WѬˆqŠºæ£ínPFÎlµ{W˜©b…hvŽ ]¼á|Ëã¶“ók%ËÚý¨ú —w bäç\ªgQÿ,c|:÷^{Ráy-ÏéÎ=¦’™,a [í£JÌÊw<怔z–H¾pZ´pLò_mò]E´em(¤ õºÎ^ÕÛÍù@–›JXŠ ²¶’ÆzºÈ¡þm÷‡íçiˆ²GVéj“}Ò04ð™™os•/Õ2—éé@ßë' æ‘—¬°“FsÓÞ'·e4º|ßtmVÂI]'|kXA­¡¥ÏÕ^ û£|%‘]ü¨"æióÈD¿fäTÀ@ÖNÑ­²“Êåo³Û#sØ@¸îÕ;}çÂg/j>ó~KÜWme–Ná ‹&~5yóÕKÌÉÏT¯õ)-GÐèß}òXlRºX¿®¥)ú¤qQ²àWRÎÔ w¨Âö›wÛ›_Õ¿ñÖõ¤Õ©‰Ý Øóq¥i ÑÊce=öOÑO;º˜ùGv ’¶…òv.Ö¯4xšB„*²Žb…\ƒBÃÄ*ú.,§Ç8?î]ôE̯ÕQŸX]`UÙì‹5Gà»<ƒ•4òf®3µPâ±z¢ÒˆŠB Þ¹•d^óS9=*º‡IB†éæ Hó˜TÉ×™TÚÞ4OdïYžkäVœt@€Ý“Jyêq(ÙýáöàÈR&Ô;z%’l,®(CpyC†å"„÷AåÕ{¿ûÁiõüÖÌ‘"ì)mGü!ß*‚è‹îKaP´¾70A¿ÍbŽ¢ÅÿGŒ¬xëå{V€¨€h<"ëJ,ë‘à6°”°áÊ6EQ%t»‹0†b²Éø´0¬•Zã7ž ãµ%:i'Z‰(xzÄóÅ hQ¥ã¹å3–P)SË¥w üswÿl*åçkÅ,-rVÖ­f§þ‚Ë“¤ñ wµCvo¯B6 ZN²ATHl†Ö7Q—byGÛßÖñ x¹½>+òÐE Ë0lå¤oI`Â@ Îo¤ÙŠ\zmÔ Ðµ¿‚9ζI×»G/¹ïñ~®€£áõcýºÿ>®€WOªÓýµ•õoÎý]2~«WýµÅõoWêßw×9óöV|ýÑâý[×ú·ý»×}[Yú¶7õ\¶õ“ ;õi·ê·Û¢0ø}ý[¿ú·ÚúºŸ?o8äìï¦çêòußòuóòj_ÏNŽúu¿'Z¿&¥ÿ­ôŽø}–õ®|>·Ï‡Öàñ´ï“qdTøÃÜÌëOŠ!`ˆâÝZg@ˆ À ±Ãê¤äZDœ]„øÙV+ß:X›}c1 ^„ÁæÑ ƒñ/9_ñC{Q§&jœ†iŒ¤t4ÔäO’2ÔûCI8+t ƒœ9½:aNÎKçë‚Ô¦€§[¶‚煮3>¡R\ŒKW»þPÿ5ÌÅÊÕ:‘óÊS ŽÁ_©¥G?ÅCÝÀ)õÖÝûÆ ñ\?¶lËq àZxÇçüÿ9a+U2oª…©¶>{½BW@ƒT‚ÑŽ²-ÐTôVÍ'5ÞÀ¿Ûß#™ZÂ[r-uiÞ ¢Hæñ‡’fÙ»(6¦æùùþ´¤r¸é˜µÍYPRWÔhjºÉÜcWΤæÖ±°(…¬l³–ïx¢0?%¸íAz˜·FɿŒ˜·½Þ€Úñãfs&‰6†­Æòw§+ƒ›`ƒG‹úl"n÷É}=Àsù>‰‹I?%ˆ?kÝeIéU@{rÚÍ!·²Z™BAÒ©]8“pþíÇôE„ 6¨ÝiX£ÿt™´ÛG\õ¢XE™UGžðIó++Ö¶:O¸ZKRï-©ís\EàÜRḷàRžE² É;Å{b´Rl)bÖBž0E9èT…É™H”Æëz³ òä%å¤ú—uœw%h ÌÚžSŒ+™æÅo—\SC‘ŠO™M2ŸÇAP•4-2D×Ç}èG8ï˜ø(q¸4©‡Ö‹Ôá¤ñí½,n¼Àô*NÙúz¢üô•ˆß¦/Ðá„_EöYrž8ýjoü²îëÃ5tçK÷6pt+»ÎrŽ9¦Þwyì¸S%ñ¢øëÓ7åâäE`¼Á2–¢1›¦©>ñ3èbžÕ"]KØB2ôU9'"ðí¾(_®‹æg³á˜Íeÿjý±A‘;;0ͼ¿(õ¤bKÀã{sõÆ ;Õ»Ež­ÑVµ•éq5Ûs„ú.F‚æ§ÂH8Z ¥ÏéÃãÍÿ·­ÌG˜úlûë4_ Jm¢©bÛµš3òÇòƒdüÑT[öð´ò ÍÓuOzW«“TÂÄ“Oѹ„¶“¯ÒAO¼íÛ¥Ù#0YòÑÏ õm‘e%£•g _l[ §çø"Ÿ„ŠŸHr”Þ+¦·°yºmi×Ó®&ý-ú¤@,FÕRf(D™Æ&[¿ÝìœYâ~x»n>éo§«ìs&/J¾?Ä}ÂYëü TZ¶gKtªrôXÔ—‹~µõüžWú< ´Ðx‡ûå…rŠï g’ê„åFÛA/ÿLŒÇ—Z³(àmßÒÆX]aB i]jƒ=óÔ¿ÎØ,¯ÊXpòŸUX!_ÇÖ.ý°'Štp‰×%ÛŠ'V;§2ê ‡éŸSÖ»ò–zºûZ9¨ù6³ÏY4Œ3î܃j¸´ÒD•™Š•¾OÛDA;Z.•¥Ž×»Üø+Þ:êó÷†¶è¶CȪ«¼ˆZ’bf]Q=õq»WïÅA5¨ð·*zbâÛ•Ò'2&•¡ì³Ër«²ÕLw“µ÷ˆ~ä7g¿¤Cx­ZžÁ»ÅEË“^¨Áެ.ñt“ ¤xŸÒÄp&+¹]$’÷GJrÂÕ¾ªGM¸½M~è²)–SÌž½µS¶9ú¶´Lg‡˜lÕ·¾‡‘L+yêØûæF ŸüI2£~ÚV¥Zƒc²…®X„Km©.Š›‡k;ø€ËÔx°—#>·l÷247X[ýPaf d:iw™÷J?S¼v’Y ¤ÔÏ$KTñjhl@à•¦}bOeö2¦t›Š„.’3y~¡õkŠg,fp¸Ä9ኴۺA@­‚:G{}îQ4ÆIÊÙÜa¶d%¡囵¿w +’2o:*R ÚûzñùWâà×Ú¦{"ä9БûÜ–jÕWï\•|n!¦þØPŸ‡4^…ó#¢:ìöŒCꌲ­ÿ>!®®‡S…W¡³ mÓ)hzá+9­y>ÚT‹† e„‚SçLÝÞ—± F©r­c EÏàž•³xZ )]Þ›|^ÉÄu6xNßöM6 VQ_šAØžà5ib0ª?P7hˆën8ug]‰áîÍ ž­Æ!Ú]Ã$í¤ ëߨdnp=ö÷ Žƒ£åC–7z\›2Îâ/ÄmÒ˜à‚¿;¬8ÈBé¯ç¢­ø4„ÄÖm)7‡E‡8€ŽkUUvrʧk êŠuyh9—J~ÜfTØØ[®“¾ ©ð^gÓ^ž"GÝbÆñÏ•\8㘅6Bn‚üKyà¨Ô¾ÓòZœ/#%M°ê6½¾) ¯4í[æö÷õb× Ã¨^¿—¡”õ°ôúzØ|o‡HÄûWl'Ÿ)U¾¾Ñíñ¸¦°—¡4 nlv ~íâA'ÅçÇo±°’(«6@íJM[em\œNàP£{THä8é\º¯Ð¢v×ák›f#|=H7‚iÌåæDa½Ö&NçwÁ¡Ð#!¶…6‹€O“•Ô(¯0ئ_—¬çGT>ñÚÏ>ˆ»Òc=ýcª¬H  _½ºZJð{qˆ"Ž|ÚËæ+ÿföö ÂK¤Ü°dÌb9úõuÌ=<Ðú7˜Þ)aÏÜ…Ôœ|a@üüZ¿èƒeÔË£CHÕÁûßFJ_À_œdvscžrhÄ`ü)¹ð È¡ …½L#XÚ<‡‰Äp&乺›$ôw þì—¶¨Õ·¶ø Áî ïÃT!Z‘F.Ê5WMëŸ뿵-R¾4¹x‡›Á6ô ý_2 øXÞEOoƒj*J6‰%ê+gäÇGè#Ýšh;Œ¼guªè< É-ø¦%›š÷ò„9›@Áñê¿åÍô^¯$Eì커@+ŸÛ.E|À½ªR2YSØX‡ýÉ=ÒW»ÕY cÀÖëÂ<ìÇH”i ’™ÚdùëÄDrvÀá¯Ù.¬5;I !§ †»¦pÞÏÆ’ÃmNGñH%ŠR©à²oG§Rx}‘¿’JñªÑI2£©y !m'´´”0óyUµ|Ô"ŸÔÝQkÙ%Itü˜®›‚ê74ײ›Ü+Ë3„ý»?ø d 6‘{ý¥DžÛÝ6"¨W¯žfùªe©å¸= Ùd¬»_ JõC½‚Á¤Ã[Òd÷ŸÐôè%Ȭ6’ôCê;0fŒo¡n¬¬´Ú&@ÅÔ qíQÜæçdÄÕ7ù;Õè]¹½óuª£2A­TfMãh!¸î™=‰»¦ï‹t¸ g‰Ê¿ŸOæî·5j{¿‰X|O®¶ýj&ƒuvXhu€ –ÉÁYÙ³·û5UÒ³ròžôÛ€d?:.ß¹‘ím– õ¡z[?SµÕ>f¶WùqìK½Šþí?:±Ôëj³+BnU!7pÅqöÍäüdÁGK{{.„”ÈÌ Ú·éÝ Dªýaè5P™# UšÚ)ÿ /£Ô´Ù!VÈE HcOŠ2R¢V;Gc:SÀõ&9Ž£†¬ö0 ·.\‰):H<úœè‰Û?SÄêËÁRg]Š4âJ}îJôwî9‹vàÚÍñ§FËc‰Ê]2Õ&!Ñ/ yÆ¥«ÜÎË»éÔ¹ª$ úüÅŠÝ«àÀÞkh›^ŸÅ ÚO¹ý‚ _­8ütÞ@\",8ÙFžy‘>Ÿ5£¤M‹Aø’*¬ºfôLªý²ròæ¢ü¾~@l4. ÎwžÓÕ×z«5á‚ü—L}'ß¼Ð.ú۷䟅B)аšóÿOòþÛ«Õ»ÀÑb÷vg3! ©»‚ÛÞâÚ`\c½îÕâbú„€-h;ßb‘/G'ûðtí²ÍCÛÿH.Óô¶ ’à Âܵ›„,Jku`ê–Ù*{ ¦Åvɤ ‘¡ˆùËÂΨñ/7=4–ݞ‰ô=±³£ñ¡ÔM—±ÎeG„ð|ÒÁAêyCí‚rÌeɾ†Póm©¹¦ÃÂéöw,{PÆI»¢Öæág>‰üîýo+í–x}Wí –ÍÜëR­?!9w•!»’Öe©,Ó§ ü,¨·ý”Z½Ýõl@»åä{1 –{˜Žœ{ÞV-§fà ÔÔÆ•/Æèy¢sf‘ôDývY OŒ6'*Î O§V[jÈDW3ð–;¶g3X$“²ÎuB4®öåÕÊ䱊P›8 ùÑ®iŽÇ–óËÖ™Î.üÊì¥SÓü©©Ÿ.De¦ “oÏÄ­ä8{M9©Ð¶Ç><Æb8Ô¾é‰î¡'çå  S?)Ò›ìÖ$'ƒúЇà£ÂG`Rb'ÚCŽõKª|² f­ÿ,Ö‡÷ÓE=Ê8@u?íákij{±TºÿpGi €¶Aö!ÉÃkBzgcm¾]ÜF5ƒ3XKN0¦x“õè(Eœ×i édµ!å@™øó,YPղŅ Ô.¿Á߆öA¯NïV‰¹Ú„t4ÒÂÖ‚ò¾aÝBŠ¡<îA9Ô@½h_šðâá<¢zÕÿNÎÁÓ—º.3™Ÿk²I†Sã*²4 K½ ¼‡ÍÑLL +Ó:d7€8à©Qî f•V²;èwC•“é{ÞüÝë©ÈM& žø;2Û+èÓ~òž^ò½ló‹À?ç±¶ aЇ½5eG;šðZ÷[Z"›W¼c.:”ÝÕJNUGöázbH†(|7ùÙ"ôñëQ0I¶Òc#Tǵ7òÀWÇðgd³õ× 4µ¹À׸)èSߨ½à6Ú|ö±÷x".f7PoÕ•·¬~ƒ¯3 ¹è˜U™®Ö†ßqƒþö÷€í¾™Þo2ßS.’=]7΋mÙ8Ž­N^C€æ¥‚xÅ(ý º(˜¿ KÃß3éMui·2¥|ž³½9«\™;?F±J>NÓã<%£ =G…Mnˆsމ=u!·øÀåŒ óÙK7ôá¾oo{‘W'_Ý®së~ Q>/°¸.{pãk‹Ÿø>²ö‘Äîº&j6‹¼ô–ÓFeýÿUVŸÿ 2ŽuöE_Èñ[ØJO.E(ea(ZÀP|滑…©&È-ã»ÞX;dïÍÞ¸·mkb£¥—=ƧÖbñ¸i@÷S¯Ýà²`‘õIWâ|'¹<ª‚6È—+1jx:½ t¢l9ñjœÉ‰¶{lœüÔ¥ÑZ1‚Ûl^Çõ=>g³¬B‚Pj6ól¢`Ù+™c¼_­áIä•|þù]O°Ñ$ÿs­üï¢%ã&[ﵺ2‹]‚Rü)AßÿMÅ’,æ…É>óW€~ßvÅ÷\ÑFI]ò':¿Eõ³L1üÊX–^¡lÝÂrÁ 6È/Â_è ÝEâm—¤jfŽi˜ðFZß_õ†¸¸S²}òQ“°ÅmàªAjÓé½»UTÜ49Öãå;¥O¿#¸” o*òVÝËÎÕHï gø‚—&bñÞ‚˜Ùxê·]ÙRÌà3ÒQdXøyEµÿƒ± Ѽé=äPmû­Là‚ÈS‘#’<§MÈUä%0jà Óõr¤¬”çGdzÿˆx<B+e*½]Þzêɹ©?ô²²½¤cL’×0´“C›ö‚j qÙˆÖ'ë÷h¦xx”…ÁãkW’²°î-û»\ 1„ÛuF³J“x%aqø`šˆB¼é±yÓɘ‚º¹0¨’Þ±PíJíìûËx.UH9e½è¾•-ue L¹ÿk‡õj©@‹ìª~7ƒdHLÿ&Ь‹¾Sè-X³ÒŒþ‰l ÍuJÐ69ntŸýÂAìMž¹½¢(Ïî[«±ö‚½rï‘®:dû*šÒé·‰÷À,Ö øÎ»ä}Œ#½Ö¯Ø‘z Ô —±š:lÒ¡tø¹Î$‰QâC*êwóézï ‰C±óê7ËÆYló½³õÄ~Žþl™^Â)@~½¼‰ yê²¾.ûÅ{ƒ-èõ–ܽië©é݉tK+.p€X¥!ÂÛ*(º;5ÖnÍkàãš ÀéÜŸW£Òa2ãýcDYÎÓåqÌü9Xj׆Ò…J¯Éf彸÷±ó·áðÐä:°Í±~„Û–ÿLˆÿHð¿CSjÄ~-ÿ 4S†·]Y {²Ê‘t)r+‰­n¶\hYmE©Mê#úøoµÝûHŒ kq~‹µÙuÙ?—ÇÄ­%â„Ë“ñü²Êw>DäÒY™§AJìo™ È"<‹Ç;†×!¦°ñLjµ¶õË2o$óY´lèˆ[𥠲¼ÿcªX‹ØP&\^x5À"’äs³ò ä—cT‚’Ë(Ï-¸ žáa¤óð'‚#`ªšÉ5ކr–‚K8@Ÿc¥º}E’q!½ÚÓÒ`¸¦T6™ª¶,ðÐXØÝ¦iÿyFFëoÏ/Ø0H+Pió’ÊÒœËâ)’’|Ý=úÓ=`ïxøFþМCxøÛÉxÉÜ}åÛpDþ‡$â}²ÿ!í/]üo­D@ßÊ0ÝâÞ ´| àozýH¨ðH'öä} ü‹þŒ…©¿Ñô“ÓîÐ?YÙ³›ý92ºgŸ)aM„Ñ'ê¨Oêì¤Ç%MóîbàyG‰qœ.[rGÓ,ü ªÎ…pä€ð)e[r0*X]ê7Žîí® o,|¹-5EúUìÀLæàÜ‹®` îB½¸)®26¬^è_›8ÕÓZzò  ˜©¹[Õ¯/ªkómKm#Sšxâæ!íüp‹HÍåþÁøšYO…Á‹]V§éò¹ä{'[—¥ßn®µ–à|‰Ï4|DKE–ÙË€)ÓÝ0Ýk™ÀMa,rç‰3£}Ô±ÆZƒ»{¿óº¢Á„Æ` >”R¶·ô¤NÉàös°ËÖª4Ÿ3;ʹ6Ï6)ŸíûV5`R´"11£Ö„¢:~ÿLÿ n­Š-rÀéV‡ô­LðåN¡ |HÉ)¾= LNkU‰ÉÚ±ôÙ¹Ca¸žÊT4œ<ÒZ÷.AäõsÍE@õ€»'+o(N ïø÷Ö=‚om„VÈmQÂ)/A{ƒá›·Ï Kòÿ (XÙÖ¶ÀÅèôšÔJåå‹3î5Åò>…"©3ûÚî×:á“ÿ/h"Óô‹Rÿ Û3G¹(W·`ô ¹ÌŠ–=(IÚí(É<þ¼OUS´ i~ôþŒ§CÊÉdº^áÑÃNb^ˆ#Ø%±üyÑ¡6žcÅÁ#Ä'š%úÈ„é{¥ï^“6@‘]Jå"ú^ œjè´þ#Å÷ÂTxó>Ø6œzvcé&/¿²Éùò©ƒÑÏ;}AŽ">Ÿ`ùò|œëH.Føã¦Àœ¬Ùºßâì…ÅC/ÇöÊçgÔòߊWn·Û8†v7—Ri$óTâ-pÇ&³`£{I”» $®ðƒ*Ï#çîÞDß¶Gà9nç¾^g UWœ?†ÓÎi.2T^é1|›”¿gH7ûF¢JAf ;_$¥dÞØŒ›¨Í$l°Vbœ’‹1r9«0˜£É'Nê±ZwÁ‚íþŽoABÕB%ž•! F|` ’R»ÐÒuØH)­N5'w®A²äUç},ÈÅX}êb(G”n˜ ØÒôÓÜ‹'eÞ¿Œ°- sïÕä}8ÆVÓ¶‹ÑýóA·§Hf¶ãý•'h9ŸÝ|($žF%eüÑn0k >ýØ-ö«úæyá $ HGßi^Ë¿6G ==iãÂü ~½c*Ѱ Û·³ŸP$˜3W‹È›€¢ŽÃ—`@~W×Kjr#’T†[@ó|ªJ€Ugw^|Ù.# Suú$dÿ€GZV÷±wž‘þµŽ;ä,0]…E{ŠCÒê-c»‘¤C(…£ÀVãw-¬k[cé¦}çÁp ¸ÁÞ‚n1v’ׯ1{ê¬È52–ˆq¢E2Ô»}‘Ú„…į̀m„`m¼V9²5ÓàMºp8Ø…']áºá—¦È/©ý%²eíkH¯â‰KÈZG5•ôׯ”ñ÷h^pz±|¥P¬+^0ý¸Ïx×ù¨>|]Ó~Zc¯‘¤Å|²tüõå%}½gWmpww/ “»AB5ÒNzØÍZ‹™º1Ðx'Ÿ}$Ó†Y+(ýh«þYÛÁØæÐz·?Þ*T8ùN¿dsO}È•¤f\Fí«Ø$í=ú‚Ÿ'9nQê¬suÑ $ÞÈ#¸"† XäÐã5Y0ˆ¤ÂË •Ýé›î¾éÕâ{ÇðuÚSÜ÷ËÆ˜½™žL™}zŸÝ”`lˆµáHM)±q’„ð/ëfc¿q§½=5^¼˜w.¼ƒDmìD¼Î#GüÿdÌMeü4,Ñ´ñáê<„I‰þ´ø?9»nWO“!FMSCRÉà#MŽ"Aÿ)’9< ¦Q$‰Åøø"9_°Ì(‘˜ÔˆJ(õâ–‰ûÓà¿¡¾jÚ9¯ö¡Êç£ B|¦3öíoíïS}é½)g=G|¡¢Ä÷‹í¹ÝßÍhT|þ…óZ<ÚæWâðsš%ǪYµÝ­Xºèޝ6½¶Å-¼õmiþØ÷xˆÆ-˜øWK#õ°È´Kyõüµ÷´ þuyå'¥ÙÄ¥„ÍIР"ˆt˜ôÏòYÔ3x|u°öü¼o¼_v±\EûƼ‰Ikå¹-ïj^0ié˜L)µåŠ®¸mÕ0zN©†ê¶7I –ʧ0Šœexþ«ŒægfhD.—N=pHÇ Q¶·^èHøg“ûÛñ±™)ZéÁÝ pÝd6È=ÌÓ¥GEMâa‹8Î<Ĩ¼¨¹¾(IªI–Ý ö*äØ¿ž·$.ÔÌolß¶m©ç_Á“êk0°¯í.p8ì·CG’ ÚN[Ê„sË—ÿ*³¾u± Ë@˜„<["ûœš¤?û8À\¸pýßG˜ÌŠpb®m“3$Y4MP†àT¢Üæ—wäú‹¡£ý: xF¹ÖSš4¼U‡WÑå)6ˆÄøÎN¥\Iðç7¾¬:§]Zv\’Ã:~I’‘˜Éó¿ 0ŠÅNh«í ,t>‡Zà z@YùÇô—Ä”§%Sn+[ÏÉ€å•zI_QÞðYyòÓá´œbxŒüANeÄ>dæ¬á±ZÛÛÝÂ|a7… .kB‹œÂ ®s67ƒã§<9 _Oj"¦œù}¬Ÿ‚€¯¾-™ÒÜfgXÇiÈ cDJÉŠ„70ÆxØH'ÉP'úƒè×r©Ñ æÇn¯ ¾²+Ì$’1U Žaba! ï uoÜ¥ñYY„F3@HÄmÉ$’I$‘ðèVÉ$™ã(Û›1 -² !oü$²@³óÊäÕª ©[¨#ð”6q€NaDŠŒtÛm¶Ûm¶Ûj·Ù`í*ï™#AÇÆª€=F€{óß‹Ÿ@Cý9ø`ðxÍÜ”%/äˆ úäꪯCKWœëÌéA°,QU¶*ÒUòÂ$-b¦c¸öS‘iŽŠxízµÀ÷l0ÐòÐÝF^¢3$Ë?šzÞ–Ä,k¹TÇ¡ýX´dÒx_$}|´–‚‰DR²fXwòÄ Úd§XÈÁíJ£°M¢´÷4Ò°¸wr‚kF:níQbAÙ(Ô`®ÞYKUV= 2º<#s+³±{zûõÿé=‘9´3ཬÐènî8Áñ«»¹¤ˆÓ©èB.`‰gYÃ9Es§„S–Ô"6Bp¦º¼ølkòQ…X.ýã´ëá¨êšáii ;~—ø=ü:i9išcíF,‹'^o"­‰,¹¶ ¨ÓdEj,ßÜ\QʶP*'äû«¼ËÕ@†(AR¾0Ú¶Sišžã ÷›¯b÷Âã»w묩óÄN’`S‡@AÚ¦‡Ö1/‰°Pãn4Îp|\Ó]]Z]ü¢aŠÙ8ŽŠÿõ…O[ i$÷Y„»°QýFüŽœ¿wö´ñm§ÆÂ¢¥‡¯‘Òœ‚ƒÙn°<{¢\³|ó£÷cq Si“ºF¯ÄÌÆØœn¡­ jÙqùÿG4ïÚ™aõH˜'áö/ÈÁiÿHÁ-¥Î[=¸yÜv(u‹øÔÖŸ9z›â987y G%é9t|ãçAAà©Ðå¦%7ì{¡]Ø¥^1ˆ€%ãèA-g羚Ë5‘¤Õ¡·ôêA„ÅŽ¡È™ûàXXØÒ•†’ßT¼N‹Ûœ{3_Wj®õ€ Üê e<}Uf”°¿Ú»Æ`˜Ü5 "Ù:HðPÇâZ¸Fö«Ì쟬Y[ó(`|¯ Ë ê£gÀð£ WEóëOÌR;C>tL,ñ¾¢®m,¬§áW70ᓪ6oKf»N¡Á.üÝï±7õ+çà”©©m2­åWÅèŽfºÕ££¸£ ´ZÕ[âÛ(uäÃk+ÝTFyë[ƒ3EìQ©-ûT­‚&們Õuwa&«2œæÖ­Pª}¬jBø©úü„x«5ÎZhWŒdlÆWbåÎ+ÛídÓS+‰ŸþÁ­1 òÓèÉ¥»t dœ¦¬«?ßßÙqyÐL¡ù“˜,n5Þ ƒÒb—¡ ¸Žð;©¡ˆz¾6òþísW"OcÖJ[FPáú䑵¸8¨KoPz¢r>üȧ€yH±Æ±Íð îÐÖ(ߤñe.fè¾èGÀsøY <Štª`g')Õ±Úûº‰ú|ûì X™N&ÛtOîRÚhD¡1À·ùâÜd µ,‚ __?Œ¤öÝ£!ÿGÕ;]Œl`;ÞP ¢»7ûKÈYh]ÍkŒ‰¨ }ÈdÔº#ÿevŸg(dúA“SI…V† ˆ„.±¬ð唌V™™oå=ÞŽ«; ’‚ˆOƒ!ÇÔ‚gÍæ’“„Hzd퀀±[T¤Uq—D••CÊŸYÐö¢mœu©— «—ø&j|Ê, ŽÖyëqÏ&,OMªâÇÆSè ],Ûz0B¸n"bH¨è°ƒYî…ˆÅ6‘ýPµ¸»P"®+­8ÎúA]<%ÔÃTsb\[Êå.aìaÕz<9¬rD{G`ŒdÓ®x&‰ :xSuôó†ãìSE¼GÏÃRb8>}S¸ØmIÊr!þèpáû‡ÙüYYóà°š¦zƒøò&&}«ÛÙn¹È¹É’>!ftó×Ïh®?Ç —=/(°`îÀø›b¹VÖÔððÎö?.ºm¸M"Ãú jºÞiSãò%“"cý9â0ƒ³'tÒ,¶ŽbrôãA‘@a¹;¯ìÊ(VÌv 6¿xÊg¯¿ã×Ñ?BYÕ¨v]¨™ªŒîHDO ¤ƒäŽ**/Í(“—‰ò†IkÇVß ¸ð\ØY€sd¡Ë^»€~Ï»“Pº¿—0Ñ …ÄÖà>nËì-—¥hS!_øCM£yÖ/9ÑNIØ@Â%MêÀôÐp b”àn[rmf6¶ˆ½ÙEÆÉ>ô٤ήÒ«Y®¼ŠunhBšËÁ}þRYxKÂÁŒDêE£Qõv[Ú̽da'âº<3^ª(N+•žƒëwÁ_TW!ßâGüL <„EðÑDƒ&”gqÍ"ÊLaâ³wrŠoÒSÙßÊáµÛ¥ª=Çñ-v5†™n#Nÿ;6Äö&1UBàb-v‚Gw•v’u^.Za‘|*J<¡î&£ èóå œþ»…Usi¦åtX¥âq½£%u¶œM|·É”™„³²:ÉbðëÕãQÜÚ°xðYÀ~?h#ôÔrXåúuüQcŸ0Ülrg;Î;ŠŒ¾d2&,á›ið¤Ô¯‰¼§PÆÞ@5®¥ó3«6A;ó‰õô´Eó°œW6 â“Q7ƒ™Ù›õ¸uITžMÚ tˆAÚùlÔíBÓõ‡r ãX€V¾] %X)ÞÁLAT³‰ê«øl-nð¦ã;æ]:JHÝLäÂOH;Rwº6Ü›)ú·’äªo"¥•®õTßÔ¹+Í!¸v9ûçw!ýøéi- ÛC£tLÞ¶uÖÖÕX}òM©ÄާR ¿†AºØÚÜàãÑê¹Í•xH¼U5|¢úæ›/_®m.¹ûìÕ ð®c=² ¼‰<Ìö»ûÓ5%ÆX /|¬cçîäÅ·´š¸hѴijoåßuþnz/¶|ÌXÕ¬s6.ÒiÃO­pTãÈ4,kCÔ)ØXî(¸` §Ík¼i§"ÆÏ7h†¦äÃsƒyªrëWþ¾³ÇJ°¦3zÇhv¢ïŠÖ­±ÕVïùjªSšöã@ ÈÄ‚»¦©)èªÎª’=9Bñ£%ó>ÀHÈ ³7pÏ‚öá3îkɉÐ%es# H辰Tw*ˆœK²ëO<ÜÉ^Ù éŒ;K¤Öj¯q-QÚ(x²¯p${RpÂÔmKn°g2ÖD$su a%ϯ¹Ë꣑²£}—djæº"=ò"@žVÉúC'°¤<—÷ùûÜù¤:Oû!…=x¼ÑΤ’ÚÚ2ö¯Î_PV‚wc@©f¦é㪔U_GIÑõ&ûD(¡ˆ#:Dec£v yZÞôä“ ù»*m;/ÔqPÍß÷Y½jà!Ÿíä³bìF’´¡óÇ3ŠŒ0èäÛÀé%„΄4ÏIšÜÛ%O…&µgÞ«WÏfß­"‰ âýéwófvÄI“tº„jÔ_í>ÝYýPéƒM·`—×-ä@»jNã-+„•P{È,…&l:¬KQ Û =º3ÄWu¹ñ7®:ª“`Lç)Gp­š´H(ô­Ÿ#T׿Âz#èâ­,=Þ®7-Ɗϱ©^^‘EMR.º´ùø›¤tÎ¶Õ =š×  6½7n™¶ 13ß¶]`­V? ÆEi1—–0S‰—óðzy#4ù¦ —›îû] 25Z¶Pô+¦Iú¬æ:@‹F+EÚÁŠðÇkÿ$›´§ŽO'ˆà úOT€"t £Pf*%Ô-S–B8æî刖+)®Kqæ¦24¶æL_‘Ü‚d'»€£ü*Šºõ¬wîÆí&}k^ðó8©Ë¼XkÏ pvÞL”é´0ÀÑj¤£ ߎýmS‡´2ªÓítnŒ™Ú/M9wþ#v~ú>¯‚m?ÃÝX"+5p, _¨_4-Hè'†sèGÏýÉyÞ Úðþ±[µ ’j©S]$ÓB\šúxênÆM‘R^ðI åçÚÏuû8ô(rÆSp­8c·MN» %šŸ ëÓKG Ç ó~$Õ´,nF…S€Ùn-Lý…¢-†K’FµOÙåâ #È­y ¨G¦A%qßÊr¡KáI«·ï©íààÁŽ~ÖGS¦;™D(K•xEëEûK(¹ÐöÃÇDòµÎFå™}¹´ì]; ÿ=µVfðÍ7è ËäÉËMXr½[_hÌÉñãWÁ ·A—x¨”ü‰ú‘ðë5 æGÌ3åÜ?–æF> Æ“›"MPûÙš›.8‚Ayl(´L w[Sg,-gឤPYí%õHg. ý~—rê:ܿ٣o=8°1IFÿá‰E!Mð'¸¶Ù´àðS!ä0Õü»9áððåÉomÏÙêõ6ªÇ@œ<´œ ͹Ÿ›Nþý’üãKm¤¬½%¬€û…ŸØ¢nÁÿR3]RŽÍ¨}ÞrR">Ä%OETñsêá“‹-ñoaÂß@8ü.X¾ƒÉíåØŽaTâ+­©D…æž„Œ…zS X!àƒ–«Mô½#ÞÒ¯’Í ƒÝ¢zE‡o ,ý­r®¤‹‡MŽYÑtFÿˆüå¥ËBEf™‰4¬´¿Ÿ,1D‡„í¹®ÃyÒT<Ó°—]4ÏÝh „åk¶ „Ô¨+“88•Vþ_ï«Öÿ%Y48‚&‚ò?YȈ“ â)F&¬õ«xSÖhMN0Ÿó—wjú¼#³\Š­ën޳ÆÊ ûzS•ƒÁÑ”²|F¥ j’AaÏ‹­±P؇°øu‘…p¬”ï˜Í&ÿkÿ@°>ïÑAãý£Î‡il&?'oŽF@”µÎ0<¾Úbç_H ›H?~ë@sI©ü¼´Ià(l÷`à áóˆ@"ëÝÍ×9oL ÷âxdØ4+lù:©øÙ{1Xè̉JÓFa|×Û׊*0Q8q~uîšXÏ Q%ü{¥5‡àÈD~ ?E¶UgÖïù‡n7g¯Ý×ñPpfß2 íKÕQmö„ÁÀ•Hâ84R4sÌ·Ær!c°Wâ«t¢^2í} >8-E.ÓÚ"òU³9ýµHVÈÖ|±Ëк:bbO\íë”9Š’±½¸ŒAí mñÓØüñ~¬EkÅ’`Æ-ÃâùbSþlQ bõbeÌU Õ1¶!?žˆF_¿UÊ\ÿ#/b‹;‘§h»€½ ü¯þþ£3u‰ëI¾àMiÎrô²¸Z9Þð™ ÿLˆµ®é› 9¸üLRÄV$£ã’ý¢ö«J¸iÿSâú£xi.ƒ‹ò,šŠðÞa4zÚÈRˆŸly‡²>½×¼àç8ªTÃÜ{9fgtú—ÕaV–q)[3$‰n–å}`62CµõN`e"—éoë %.`9I¾f5› EweT°aú‘§ÁªïЯlÿACYÞ¾ï‹Âw!½šÓ:ªR%¤PnæëØÚ±r®·}»hÅÅy("¬º²€ Írä‘„ˆHÃB_õúsM´È08?¬Û†—î¼óúìHGitšÿzNŽü¼@'ô ˆ¯L;àfæ¿fZMuaà 'Gã™8×çÔê2.äW´ ŸDø!2 ÕÄ™UÇ>Ü2i·ó¦Ö^0ƒY6jM|ðJxÜíöÿ~kõ” Áô2;Éu§»:6Ásò¨q ¬Ú†§ÞÆ ÙjϤQí^Èî‡'S<­)ÿyoI±ÌRÙßß·hÉ"Œ„ e8Jÿ^µ(Do›Õ¢ÆÉ‘Åa<ûÁ†Ü¦BÐͲ¸=xl©˜”¨…¤\ǨϾ9ö;WʰÖÄTñ@šZšô¯lš7Å~F—r1d¶3ñ¥Oô^¾%žŠ3!‚2´œ‘ùxºÊ‡B§ìOF …Vº·&K›Êà4§»|hêy ³¤=›P0Èv¥«ïåÌ—ç£eÙr–Tc-³PYnƒ·Qbú™n&w/ñ Ð-Ý`ú*°xªle3D!eA™«Š»¦˜‰^7À¼“?40¾ƒÙDBˆ:ðþ­«_Õ»ªŠ?U þªaU ú·ˆý[ÉÃú¶§õ>©óõlüŽ ”ý[¹ú?©ÓõnOüSˆïäéÜT*SòuüþN¹€íÇŽ]¨nRïB•%T%Ø4ÆãÌi—> ãôžêÇy Öð(çì`¨ ?C³U\HÄšpcGñ^Ý•B\ âćүþõ×Ð¥Ô†¹O‹tÔt,/ p°˜ Ø|¸Ro›'ŸLš¬²n‰X='j8ï©BnüÝBÓ&ã…Gñ´ >.Žÿ^hŒö£äÛzžúz2²p"ÛÒ¯­"ΓW¨íŸ\`Ћ§kðÏýËR(@¨S1]>Ï_ÜE”!‹™äH:OÍËgž5pAÞ_?TC^Cn2qÕ5TvÊtƒâŒGH²¢ºä:~Ã$Rs=Áhó@ÅãˆG¾’û˜Q=wYE¤eZÇ!!HxU{qÙ“"­£]¢fdV™R­[ªW££Í²Ò@²æŒÙ€ã~r†ù/¢ë ¬™Uãr$1ËÃeVSÆÄ%¤45üWË5~Ü,¾Š_œ—4F;AÖG\{Îk‹BÛ~¸A»¯Ï™ÁXº‚ÞHL&AI+€k XÉå à½xO¹êÈÅä¾âeüÝ‚5C«l²Q°®‰ *ž\þ·®Žcëzèæ>·®Žcëzèæ>·®Žcëzèæ>·®Žcëzèæ>·®Žaã“>µšH1Ïÿ*" ´ÂB66Õ’ÜÏòYƒè|£›ß$p¬´§’¨eÜ<â¥f¶]µMÄ~‹%+s¤A©¹T~/’̼[ñ|–eâß‹ä³/ü_%™x·âù,ËÅ¿Éf^-ø¾K2ñoÅòY—‹~/’̼[ñ|–eâß‹ä:ñÀi<³µר#Joäb³!Pl„ÄǤ ˆ§Ûç=ŽÜ +²a6ö’)"\_ J'~¢ ô¶ôyßæÜ5ãm ÷O Y›é4¡s–¤rTj{j„ZÞÿ o97’'˜5ì;Œ £J5b&Õ—å»èá³ø' ̉֒—a õÙe?y‹c{9 ÙaRx‹°GaJ:bþ¹e¦î\´—>ß¹] ‚J¯Þ §­(Q俜_ÔÇTÛì$7·2ü«y€lԠ߯ólwÿR4š!Á—j/É%>%u¥ÎÙhÈѵ)ª=\ÚMhàAul}de/‡§ ¡»h0½éìrwM4[Ä}ÎÏ™0ÀÈ« ]1›¹—ªód“’ûQOõ¢-5ÆtY T¼ÿ6pŽÄÑn¡±â¬§ì«ÐÇ\VÄ¢´‚ß( 7ä{´ÙœÎҸנß8 ÈÛ'U4B/aÙ·’»á!×’÷TÕ5wUÖRí„òNº¸]öÅšÍê^<¨dR’4})›G6¦èp3‚£ê9QU\6ŽéÍKÛ$=s€ì¸9D¦tü‹ùÂÏ?q™š¥_K¾/CvDK¤“Ï?¢ÁòšH1Ê™HáÀ”[å?SyŒ1[tixÍ4žŸƒÕ´ƒ¶mŒïçD&¯V ßhB{—ÙwþÌ.æ°ª´†uDíÐŸÆ 3tøCEÇnNv1µ©òtÇ—HøfšŸ¨šA0€2b®ì÷ä1úC¥ô…Y{«rià§àCšóóóÉß n áÆ£½k¾£à÷L‘n‚ÿÂ×DÖ†ÐÓ»­ü–]7 Ó½qI…¾#D›…ZVŸí`Û¼7»`t”‘?|ÊQÇ‹ŸÔíýw…ªé^âå+t_ AmÖ•[¡w¼ï‚˜óYtIx×¶“<|3ç#ožC×xðUœGü“EØâÌ=B:úÖAM†%`#=Ð^ò+‡RËð cÈ’š¤O\ÿlQqª‡³°¾¿2ƒB6K0ÈuN·äb·Ìj@ñ†Jšº.©Ú!yE¤qRY‘}~7 Ú#Z“™8¶ t~‹%+O¨¸e16'ÿ×D¹55:Çž‰$üQXswW»³È¾û*qïÊM¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ý¬U@ €/‡ª÷ã–˜FÿeMgZAÿrÃYŸÆã°¨À­@;N‡¹ÿ$(6ä’I$’I$’I$’I$’I$’IcÏD’~(¬9»«ÝÙä_}•8÷å&Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶ÛnÖ*  "ËÞã–˜CÓî<uFÜ(øqh'λø¬ÕðÁÚ``i[·sEæÝ³Ë±Í 'Z¸Ž«¥IKœí ”þ˜Ïg%Þ+&GñûO5 HF±ÉlfÄ£‡LL‰/Ý:ߊuÐôöÛ±V‘^Ëyê éõÏ&6$-rÝJ÷Ó¼b¼‰&Sâ‘;ZæÏ#¥+d°˜.Û;=j&Þ¬Swýa+µv"àS–“¿¼Œ=Êgh{f² á¨Ðob=½=òRFy?NïÃaô7­pEÇœ5⃳~`Áñ÷ 3^81)0mMp&Ž^DZ]9Ï£\IöÊ,V¸4ì„løºÖ²Œöì³âÑ×iE8µ†,øaÚüxð;9<Ò44rŠo8ÈÅñ!w»Âp_Nû=Sää $#z%ÑW̤ J0/zè~N—¨ýd³ÅGÉ¿[çW™ÝâèuÇá3,rr"L_€!ÐÏ—¤†u >Whù]sdÍüà¯ä Åà –©Ö ;lՆ愑¡ ÏxôXq&ÆŒÜé ÷¤|IËÀ[„upZcîüòÑ5U—”ÇA³¨‚ ”ë<~6û¼ ¡‚K5 5ö]¾îõŸ,àù%¤SÙ(wX6•#‰\’ Ý<3ujÕ.Ãí4—QÀKuq+ï…=ÃH±¿u†ge+ym&)²²W/ªìÓϦ€>B{5¸ î‹‘·ðgßQºŠõWò§j¢Z‡Úu„ŒÒ7¿´pý¥ã®Ÿ•ÁVj9Šg—·šx^{˜Òh2Ü]¿ñ å˜EèŒÿ>ªÛ Æìÿ'‰š|’7²;.O¹è=E>'!Ë*îû@ôI@Í 0Ë*ÝpÉL °B$.ëàÆÙøÏH‰bÐ׆j} ’Á2ÂZ8[ið‰aq°rÕ’.ïÆ×]×Ô²ÿKµ…”ørþ [›Í_gþ Á2: h,¹ë_ÛÓ‡¦c ¼`³ú~0©tndï°K]u£¿qÊAF m­8Í*nbÁôªü¾ÖzGceÈ!8+%9]¨`ôu6Æìñå!^[>ÄÃýPŒF¸ù½‹¡n÷ÒÇä}½*1îºvŠ%º£×kšPÃËðK÷ì­©XR‚‹4i‚I „¿Cئ®ðTÍôZ,Ù»ßL¶#s‡ & mŠ¬Ã™}°Fí‹ñGhÀúÅôú¿×«^70’U$»#€üµF¹­RIy§¶ÌÓ]oæfªªªªªªªªªª¯Rit ïÞjfÿ8;&Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶õ%m¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Û’IdzÓtôú¿×«^70’U$»#€üµF¹­RIy§¶ÌÓ]oæfªªªªªªªªªª¯Rit ïÞjfÿ8;&Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶õ%m¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Û’IdzÓtòø‰‘£dyl}aèÜ\8ÆgW·kuˆ½œ8uØ«ªdñßnîFÊd͹(„ ½-”ÎV¿×r ¶ÄÝ!·½îK¼’Õa7$~{4iÓCÊã=´r½`Ýa19=üEÍnF¦v çSžÑ+ê‡H›{6­:U *ð¬þ‘@ì?¢®&0h•¸P3Þ MO€ÂžÎÞÕkÛ¯´zÞÆ>‰žžU-ÝBY«Tñ<½Í¡ßìw¶Â¼¥‰W#­ã…Ÿw¼ç£Ìd•¤~Ÿ–¹;&¹øæÌm+œÚ˜¦|²yÊܺìX8ÂGeë›9Žt¥Mî†K­vk•8”q*³ìj-OçÌxc1NçíDy´§?Ÿ”ãà&ÛÖø`ú^ïVçÞH¾þ.ĈôoL€S·jÙ6¼.~ìþlž+}%$§ßZ×å¿Ïõ<²¡ ý¿d§-U}Œ”µù‡E«~O„R&‡âfÿGô]õZQx;k"q¡G 8hŸ_÷—‹<|-a¼‰$ãÊWÔ¶âÑnƒ2ßËŒn<ޤíþ,·(Œ¹Â$– ˜¬ì0»ì8H¬ËºµŒ±þˆx³Š¥¸Ì±ò=7Vé;Çëw¦ÛV/ÞÛwCa¶"¶ì¾Z(7ù¡ý§þ¹ÔŒN ;ß®ó¯#Ÿ$ðÅÀÉÒm÷ÆX9}Ð÷mNµÃ>>Ë222Ó222Ó222Ó222Ó222Ó222Ó222Ó222Ó222Ó222Ó222Ó222Ó>>>Ëÿÿÿÿÿÿ000Øÿÿÿ888ÿ>>>ÿ>>>ÿ???ÿ===ÿ[H;ÿfK7ÿfK7ÿRA4ÿ<<<Þÿÿÿÿÿÿ000ØLL•ÿnnÁÿ//VÿJJJÿQQQÿeeeÿfffÿ@@@ÿ`K;ÿaH6ÿC1$ÿ3(ÿ;;;Þÿÿÿÿÿÿ88CÝŠŠÎÿoooÿcc¹ÿ666ÿOOOÿPPPÿKKKÿFFFÿ_L=ÿ`J;ÿ7-'ÿÿ;;;Þÿÿÿÿÿÿ000ØssÇÿŒŒÑÿ??xÿ@@@ÿPPPÿaaaÿ]]]ÿLLLÿdM<ÿwT<ÿaI6ÿÿ;;;Þÿÿÿÿÿÿ000Øÿ!ÿÿ555ÿ:::ÿ:::ÿ:::ÿ:::ÿeL:ÿƒ[>ÿ8+ ÿÿ;;;Þÿÿÿÿÿÿ888á%%%û$$(þ$$(ÿ003ÿ336ÿ336ÿ336ÿ336ÿ<9:ÿ@<;ÿ655þ333ü<<<ãÿÿÿÿÿÿ;;;á+++û**.þ**/þ226þ559þ559þ559þ448þ448þ559þ558þ666ü>>>ãÿÿÿÿÿÿ000Øÿ""$ÿÿ666ÿ;;;ÿ;;;ÿ===ÿ:::ÿdM<ÿzV=ÿzV=ÿ\F5ÿ;;;Þÿÿÿÿÿÿ000Økk¿ÿÅÿ==vÿMMMÿXXXÿmmmÿiiiÿGGGÿdM=ÿbJ9ÿ) ÿÿ;;;Þÿÿÿÿÿÿ88CÝ‹‹Ïÿoooÿddºÿ;;;ÿSSSÿbbbÿWWWÿOOOÿaM>ÿeM<ÿK<0ÿÿ;;;Þÿÿÿÿÿÿ000ØPP™ÿ{{Îÿ..Uÿ;;;ÿMMMÿNNNÿPPPÿAAAÿbL<ÿmO9ÿU@0ÿÿ;;;Þÿÿÿÿÿÿ000Øÿÿÿ777ÿ<<<ÿ<<<ÿ<<<ÿ:::ÿ_J;ÿoP9ÿ9-%ÿÿ;;;Þÿÿÿÿÿÿ>>>Ë222Ó112Ô112Ô667Ö99:×99:×99:×889×888×99:×99:×:::Ö>>>Ìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€ÿÿ(0` ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ333++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ+++ """!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""" +++ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ "/8>@AAAAAAAAAAAAAAAAAAAAAAAAAA@>8/" ÿÿÿÿÿÿÿÿÿ 41:ZMl— Mv½AoÍDqÏ S€ÏcÐsЂ¨Ð(®Ð7œ´ÐF©ºÐS¶¿ÐcÃÆÐ\·½ÐC–¨Ð-x”ÐX€Ð KwÐ fˆÐ2€˜ÐF™ªÐX³ºÐeÃÆÐPª¶Ð=“¨Ð({˜Ðc‰ÐQ€ÐRÐS‚ÏV…ÏY‡ÍXƒ¿[v™ 9?Z4 ÿÿÿ <`z”³ô m¥üGŽý1€ÿ2€ÿ=ŠÿK–ÿ X¡ÿd«ÿo¯ÿ'y²ÿ3„·ÿ?Ž»ÿK™ÀÿG’¹ÿ3w§ÿ!_–ÿE…ÿ7{ÿMˆÿ#a•ÿ3w¢ÿC‹¯ÿN›¸ÿ?ˆ«ÿ.tžÿ`ÿMƒÿyÿ?yÿAyÿCyÿP‡ýƒ±ý4¡Ãø;}Š—< 4Vq•”ÆüDšÿwÿtÿsÿqÿoÿmÿkÿjÿhÿfÿdÿbÿaÿ_ÿ]ÿ[ÿYÿXÿVÿTÿRÿPÿNÿKÿHÿDÿAÿ>ÿ;ÿ8ÿ5ÿ2ÿ.ÿ-ÿTzÿPÅÝÿHŒ’—4 ",7Z|¯ô J¢ÿzÿyÿwÿuÿuÿsÿqÿoÿmÿlÿjÿhÿfÿdÿcÿaÿ_ÿ]ÿ[ÿZÿXÿVÿTÿSÿPÿMÿJÿGÿCÿ@ÿ=ÿ:ÿ7ÿ3ÿ/ÿ+ÿ(d…ÿd×ãø-FI\" """/Hg—w°üÿ}ÿ|ÿ}ÿ}ÿ|ÿ|ÿzÿxÿvÿtÿsÿqÿpÿnÿmÿkÿiÿgÿeÿdÿbÿaÿ_ÿ]ÿ\ÿYÿVÿSÿQÿNÿIÿFÿ?ÿ8ÿ3ÿ/ÿ0ÿaÓáýO–›œ/"""3338T{½ \¤ý€ÿÿƒÿ‰ÿŽÿ‘ÿ‘ÿÿÿÿ‹ÿ‹ÿ‰ÿ‡ÿ†ÿ„ÿƒÿ‚ÿ€ÿÿ~ÿ|ÿ{ÿyÿxÿwÿuÿsÿpÿnÿkÿgÿ_ÿQÿCÿ8ÿ3ÿ/ÿK¥ºý]µ»À8333333$$$> XËM¡ÿ‚ÿ„ÿÿ00bÿ88Zÿ88\ÿ88]ÿ88]ÿ88\ÿ88\ÿ88\ÿ88\ÿ88[ÿ88[ÿ88[ÿ88[ÿ88[ÿ88Zÿ88Zÿ88Zÿ88Zÿ88Zÿ88Yÿ88Yÿ88Yÿ88Yÿ88Yÿ88Xÿ88Xÿ88Xÿ88Wÿ88Vÿ88Sÿ00SÿRÿ@ÿ8ÿ2ÿ?‹¦ÿbÂÇÎ>$$$333+++###@ VÌL ÿ„ÿˆÿ–ÿ99Rÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ99MÿaÿGÿ;ÿ6ÿ=‰¦ÿeÄÇÏ@!!!++++++!!!A T}ÎK ÿ†ÿ‹ÿœÿ99Tÿÿÿÿÿÿÿÿÿ(((ÿ555ÿ555ÿ555ÿ555ÿ555ÿ555ÿ555ÿ555ÿ555ÿ***ÿ110ÿ891ÿ891ÿ891ÿ891ÿ891ÿ891ÿ892ÿ444ÿ###ÿ99OÿjÿLÿ>ÿ9ÿ<ˆ¦ÿfÄÈÐA!!!++++++!!!A S}ÎJ¡ÿˆÿŽÿŸÿ99Tÿÿÿÿÿÿÿÿÿ,,,ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ000ÿCI)ÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿ¿èÿÿ&&&ÿ99PÿoÿPÿBÿ<ÿ;†§ÿbÂÆÐA!!!++++++!!!A S|ÎJ ÿŠÿÿ¡ÿ99Uÿÿÿÿ++.ÿ..2ÿÿÿÿ,,,ÿGGGÿNNNÿ;;;ÿEEEÿOOOÿ:::ÿBBBÿQQQÿ;;;ÿ000ÿCI)ÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿ¿èÿÿ&&&ÿ99PÿrÿSÿEÿ@ÿ:…§ÿaÁÆÐA!!!++++++!!!A Q{ÎH ÿŒÿ‘ÿ¢ÿ99Uÿÿ''-ÿ;;gÿQQ‡ÿPPƒÿ;;kÿ//9ÿÿ,,,ÿƒƒƒÿŽŽŽÿTTTÿ~~~ÿ™™™ÿZZZÿwwwÿ›››ÿZZZÿ///ÿ>B+ÿ}—ÿ}—ÿavÿBPÿBPÿBPÿ;Hÿÿ&&&ÿ99QÿuÿVÿHÿCÿ8„¨ÿ`¿ÄÐA!!!++++++!!!A Q{ÎH ÿŽÿ“ÿ¤ÿ99Uÿÿ;;dÿ––­ÿ¬¬¬ÿ©©©ÿ‚‚’ÿ99nÿ"""ÿ,,,ÿiiiÿ¢¢¢ÿSSSÿiiiÿÿYYYÿaaaÿ§§§ÿ[[[ÿ000ÿCI)ÿÒÿÿÒÿÿpˆÿÿÿÿÿÿ&&&ÿ99QÿxÿZÿKÿFÿ7ƒ¨ÿ^½ÃÐA!!!++++++!!!A OzÎG ÿÿ•ÿ¥ÿ99Uÿ)),ÿmm¦ÿ°°°ÿ|||ÿwwwÿ¥¥¥ÿOO‡ÿ88Bÿ,,,ÿ:::ÿ999ÿ:::ÿ:::ÿ999ÿ:::ÿ:::ÿ999ÿ:::ÿ000ÿCH+ÿ¿èÿ¿èÿh~ÿÿÿÿÿÿ&&&ÿ99Qÿyÿ\ÿOÿJÿ7©ÿ]ºÂÐA!!!++++++!!!A NxÎF ÿ‘ÿ—ÿ§ÿ99Uÿ**.ÿƒƒ·ÿ­­­ÿwwwÿsssÿ¢¢¢ÿbb”ÿ88Eÿ,,,ÿ<<<ÿmmmÿYYYÿrrrÿ___ÿMMMÿVVVÿpppÿ]]]ÿ000ÿ0@0ÿŽÿŽÿŽÿŽÿ‹ÿÿÿ(((ÿ&&&ÿ99Qÿ{ÿ^ÿRÿMÿ5€©ÿ\¹ÁÐA!!!++++++!!!A MwÎE ÿ“ÿ™ÿ¨ÿ99Uÿÿ;;nÿÄÄÒÿ£££ÿ   ÿ°°·ÿ<¡ÿ¤ÿ§ÿ´ÿ99Vÿÿÿÿÿÿÿÿÿ'''ÿ333ÿ333ÿ333ÿ333ÿ333ÿ333ÿ333ÿ333ÿ333ÿ***ÿ///ÿ333ÿ333ÿ333ÿ333ÿ333ÿ333ÿ333ÿ333ÿ###ÿ99Rÿˆÿnÿcÿ_ÿ)r©ÿNª¹ÐA!!!++++++!!!A AnÏ>¡ÿ§ÿ©ÿ¶ÿ99Wÿÿÿÿÿÿÿÿÿ,,,ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ000ÿCI)ÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿ¿èÿÿ&&&ÿ99SÿŠÿpÿeÿaÿ(q¨ÿM©·ÐA!!!++++++!!!A AmÏ<¡ÿªÿ¬ÿ¸ÿ99Wÿÿÿÿ))+ÿ,,/ÿÿÿÿ,,,ÿFFFÿLLLÿ:::ÿDDDÿNNNÿ;;;ÿBBBÿOOOÿ<<<ÿ000ÿCI)ÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿ¿èÿÿ&&&ÿ99Sÿ‹ÿrÿgÿcÿ'p¨ÿK¨·ÐA!!!++++++!!!A @kÏ<¢ÿ­ÿ¯ÿºÿ99Wÿÿ&&+ÿ;;eÿOO†ÿLL€ÿ==kÿ..7ÿÿ,,,ÿƒƒƒÿŽŽŽÿSSSÿ~~~ÿ˜˜˜ÿYYYÿwwwÿšššÿZZZÿ///ÿ=A+ÿx’ÿx’ÿ_sÿBPÿBPÿBPÿ;Hÿÿ&&&ÿ99SÿŒÿtÿiÿeÿ&n¨ÿI§¶ÐA!!!++++++!!!A >jÏ;¢ÿ±ÿ³ÿ½ÿ99Wÿÿ;;bÿ’’«ÿ­­­ÿªªªÿ~~ÿ99mÿ!!!ÿ,,,ÿkkkÿ¨¨¨ÿTTTÿkkkÿÿZZZÿbbbÿ¬¬¬ÿYYYÿ000ÿCI)ÿÒÿÿÒÿÿpˆÿÿÿÿÿÿ&&&ÿ99Sÿÿuÿkÿgÿ$m¨ÿI¤´ÐA!!!++++++!!!A =jÏ9¢ÿ´ÿ¶ÿÀÿ99Wÿ))+ÿjj£ÿ±±±ÿ}}}ÿxxxÿ¥¥¥ÿNN†ÿ77Aÿ,,,ÿ:::ÿ999ÿ:::ÿ:::ÿ999ÿ:::ÿ:::ÿ999ÿ:::ÿ000ÿCH*ÿÆðÿÆðÿkÿÿÿÿÿÿ&&&ÿ99Sÿÿvÿmÿiÿ$l¨ÿG£³ÐA!!!++++++!!!A >{ÿ%%'ÿ,,,ÿaaaÿPPPÿ<<<ÿyyyÿ}}}ÿpppÿrrrÿuuuÿwwwÿ000ÿ)I)ÿÿÿÿÿÿÿÿÿøÿÿÿÿ&&&ÿ99Sÿ’ÿzÿqÿmÿ!i¨ÿCž±ÐA!!!++++++!!!A:fÏ7£ÿ¾ÿ¿ÿÇÿ99Xÿÿ**6ÿUU‰ÿ––Äÿ’’¾ÿQQ‰ÿ33Cÿÿ,,,ÿBBBÿyyyÿWWWÿ___ÿ???ÿZZZÿkkkÿ]]]ÿ???ÿ000ÿ*E*ÿØÿØÿØÿØÿÑÿÿÿÿ&&&ÿ99Tÿ”ÿ|ÿrÿoÿ h¨ÿAœ¯ÐA!!!++++++!!!A9fÏ6£ÿÁÿÂÿÊÿ99Xÿÿÿ!!#ÿ11@ÿ33Dÿ%%(ÿÿÿ,,,ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ000ÿ*F*ÿàÿàÿàÿàÿÿÿÿÿ&&&ÿ99Tÿ•ÿ~ÿtÿqÿf§ÿ@›®ÐA!!!++++++!!!A7eÏ5¤ÿÄÿÄÿÌÿ99Yÿÿÿÿÿÿÿÿÿ,,,ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ000ÿ)I)ÿÿÿÿÿÿÿÿÿÿÿÿÿ&&&ÿ99Tÿ–ÿ€ÿvÿrÿe¨ÿ>™®ÐA!!!++++++###@6dÎ4¤ÿÇÿÇÿÎÿ99Yÿÿÿÿÿÿÿÿÿ,,,ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ000ÿ0?0ÿ‰ÿ‰ÿ‰ÿ‰ÿ ÿ ÿ ÿ***ÿ&&&ÿ99Tÿ—ÿÿxÿtÿd¨ÿ=™­Ï@!!!+++333$$$>5dÍ3¤ÿÊÿÊÿÏÿ99Xÿÿÿÿÿÿÿÿÿÿ&&&ÿ&&&ÿ&&&ÿ&&&ÿ&&&ÿ&&&ÿ&&&ÿ&&&ÿ&&&ÿ ÿ ÿ###ÿ###ÿ###ÿ###ÿ###ÿ###ÿ###ÿ###ÿÿ99Rÿ”ÿ‚ÿyÿvÿc§ÿ<—­Î>$$$33333383^¾;šýÍÿÌÿÎÿ::cÿ99Yÿ99Yÿ99Yÿ99Yÿ99Yÿ99Xÿ99Xÿ99Xÿ99Xÿ99Wÿ99Wÿ99Wÿ99Wÿ99Wÿ99Wÿ99Wÿ99Vÿ99Vÿ99Vÿ99Vÿ99Vÿ99Vÿ99Vÿ99Vÿ99Uÿ99Uÿ99Uÿ99Tÿ99Sÿ::Yÿÿÿ{ÿxÿq®ý9Ž£À8333"""/ -N™JŒýÏÿÎÿÍÿÎÿÐÿÏÿÎÿÌÿÊÿÇÿÄÿÃÿÀÿ½ÿ»ÿ¹ÿ·ÿ¶ÿ´ÿ³ÿ±ÿ±ÿ¯ÿ®ÿ¬ÿ«ÿªÿ¨ÿ§ÿ¥ÿ£ÿ¡ÿ›ÿ‘ÿ‡ÿ€ÿ}ÿ{ÿ&½ý2w‰œ/""" " .ZJ…÷1¹ÿÐÿÎÿÌÿËÿÈÿÆÿÃÿÀÿ¾ÿ»ÿ¸ÿµÿ³ÿ°ÿ¬ÿ©ÿ§ÿ¦ÿ¤ÿ¢ÿ¡ÿŸÿÿ›ÿšÿ˜ÿ—ÿ•ÿ“ÿ‘ÿÿÿˆÿƒÿ€ÿ~ÿ;•ÿ%»ø";D\" 4 6V—`™ý:ÁÿÑÿÍÿËÿÈÿÅÿÂÿ¿ÿ¼ÿ¹ÿ¶ÿ³ÿ°ÿ­ÿªÿ§ÿ¤ÿ¡ÿ ÿžÿœÿ›ÿ™ÿ—ÿ•ÿ“ÿ’ÿÿŽÿŒÿŠÿˆÿ†ÿƒÿ‚ÿ6“ÿt¬ÿ _w˜4 =A_˜ o§ö}¼ümÌü QÃÿG·ÿ:©ÿ.žÿ4¡ÿA«ÿN¶ÿ ZÀÿfÈÿqÌÿ)|Ðÿ5†ÓÿA×ÿM›ÛÿCŒÏÿ1t¾ÿZ¬ÿ Aœÿ;—ÿQ¥ÿ&f±ÿ7{¿ÿFËÿK—Ðÿ;„Äÿ+p·ÿ]ªÿ Iÿ=–ÿ>–ÿJ˜ýa ýf¢ùLn™= ÿÿÿ 40;]Zx™w™»o–Ê_ˆÌ O{Î@mÏErÐ S€ÐeÐsЃ¨Ð(®Ð8´ÐF©ºÐU·ÁÐcÃÆÐY´ºÐC–¨Ð,w“ÐX€Ð MxÐ!h‰Ð3™ÐGœªÐY´¼ÐcÁÄÐPª¶Ð<’§Ð({˜ÐaŠÏQ€ÏRÎQ|À Ikœ,:]4 ÿÿÿÿÿÿÿÿÿ "/8>@AAAAAAAAAAAAAAAAAAAAAAAAAA@>8/" ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ+++ """!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""" +++ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ333++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþøððààààààààààààààààààààààààààààààààààððøþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ(€ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ+++$$$$$$                                                                              $$$$$$+++ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ333+++            +++333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ333$$$     $$$333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ+++ """"#%'()))**********************************************************************)))('%#"""" +++ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ333$$$   $).1479:;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;:9741.)$   $$$333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ333  !'/5;@EILNOPQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRQPONLIE@;5/'! 333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ+++ &/7?HOV[`e#k!m!n#o#o $o $o!%p!%p"&p"&p#'p$'p$(p%(p%(p%)p&)p&)p')p')p(*p(*p)*p )*p )*p!*+p!*+p"++p"++p!)*p ()p')p&(p%'p$'p#&p"%p!%p $p#p $p!$p"%p"&p#&p$'p%'p&(p'(p ()p!)*p!**p"++p"++p!**p!)*p ()p')p&(p&(p%'p$'p#&p"&p"%p!%p $p $p $p $p %p %p %o %o %o!%o#n#m %ke`[VOH?7/& +++ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ333 "+5?JT!%aIb‘^†Â `‘ß^“î[“ûSŒþL‡ÿEÿL‡ÿTÿ[•ÿdÿ k£ÿ rªÿ {²ÿ‚¸ÿŠÀÿ‘ÆÿšÎÿ Òÿ §Õÿ'­Øÿ-²Úÿ5¹Ýÿ<¿àÿCÆãÿJÌæÿRÓéÿXÙìÿ`àïÿfåòÿmëôÿuò÷ÿ{øúÿ{õøÿqèïÿd×äÿZÉÛÿN¹ÐÿD«Çÿ7š¼ÿ-Œ³ÿ#ªÿn ÿ `—ÿQŒÿ \”ÿjÿv¤ÿ&ƒ®ÿ/µÿ8›½ÿB©ÆÿK´ÍÿUÂÖÿ^ÎÞÿhÜçÿqçïÿ{õøÿ|÷ùÿsíóÿiàëÿ`ÕäÿUÈÜÿM½ÕÿB±Îÿ9¦Çÿ/™¿ÿ&ޏÿƒ²ÿvªÿ l£ÿ`œÿaÿbžÿcŸÿd ÿd ÿe¡ÿf¢ÿg£ÿh¤ÿi¥ÿj¦ÿk§ÿl§ýl£ñr¢âo•ÄVl“$&aTJ?5+" +++ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  #.9ER_d…«}¯ò y­ú r¦û j übšý[”þSþL‡ÿEÿL‡ÿSŽÿ[•ÿbœÿ k£ÿ rªÿ y°ÿ‚¸ÿ‰¾ÿ‘Æÿ˜Íÿ Òÿ¦Ôÿ'­Øÿ-²Úÿ5¹Ýÿ<¿àÿBÅãÿJÌæÿPÒéÿXÙìÿ_Þîÿfåòÿmëôÿuò÷ÿ{øúÿ}øùÿqèïÿfÚæÿZÉÛÿP»ÒÿD«Çÿ9¾ÿ-Œ³ÿ#ªÿq¡ÿ `—ÿRŽÿ \”ÿh›ÿv¤ÿ%¬ÿ/µÿ8›½ÿ@¦ÄÿK´ÍÿSÀÕÿ^ÎÞÿfÙåÿqçïÿyóöÿ|÷ùÿsíóÿiàëÿ`ÕäÿWÊÝÿM½ÕÿD³Ïÿ9¦Çÿ0›Àÿ&ޏÿƒ²ÿvªÿ l£ÿaÿaÿbžÿcŸÿcŸÿd ÿe¡ÿf¢ÿg£ÿh¤ÿi¥ÿj¦ÿk§ÿk§ÿq«ÿ {±ÿˆ¹ÿ"’¿ÿ-œÃù.{’®_RF9.# ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$$$ #/;JX@N|ƒ­Úˆºù³û w­ý q¨ÿ h¡ÿb›ÿ[”ÿSŽÿL‡ÿEÿJ†ÿSŽÿZ”ÿbœÿ j¢ÿ rªÿ y°ÿ‚¸ÿ‰¾ÿÅÿ˜ÍÿŸÑÿ¦Ôÿ%«×ÿ-²Úÿ4¸Ýÿ<¿àÿBÅãÿIËåÿPÒéÿW×ëÿ_Þîÿeäñÿmëôÿtñ÷ÿ{øúÿ}øùÿsêðÿfÚæÿ\ÌÝÿP»ÒÿF­Éÿ9¾ÿ/µÿ#ªÿq¡ÿ `—ÿRŽÿZ’ÿh›ÿs£ÿ%¬ÿ-´ÿ8›½ÿ@¦ÄÿK´ÍÿSÀÕÿ\ËÜÿfÙåÿoåíÿyóöÿ~úûÿsíóÿkâìÿ`ÕäÿWÊÝÿNÀ×ÿD³Ïÿ;¨Èÿ0›Àÿ(ºÿƒ²ÿy«ÿ l£ÿaÿaÿbžÿcŸÿcŸÿd ÿe¡ÿf¢ÿg£ÿh¤ÿi¥ÿj¦ÿj¦ÿk§ÿoªÿ {±ÿ†·ÿ"’¿ÿ+Åÿ7ªÍÿ<¢¾à)MV}XJ</# ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ+++ !-;K\nŒª•ÃóÀù†ºü ~´ÿ x¯ÿ d£ÿ?ÿ-…ÿ"ÿzÿxÿuÿvÿxÿzÿ{ÿ!~ÿ#ÿ&ÿ(ƒÿ+„ÿ-†ÿ/ˆÿ2‰ÿ 3‰ÿ 6Šÿ8Šÿ:‹ÿ<Œÿ>Œÿ@ŒÿBÿCÿEÿ HŽÿ"IŽÿ$Lÿ&Mÿ'Nÿ$I‹ÿ Dˆÿ@„ÿ<ÿ6~ÿ2zÿ-vÿ (sÿ#oÿkÿhÿiÿ kÿ$mÿ (oÿ,qÿ0tÿ4vÿ8xÿÿ=ÿ<ÿ;ÿ:ÿ9ÿ8ÿ6ÿ5ÿ4ÿ3ÿ2ÿ0ÿ/ÿ.ÿ-ÿ,ÿ*ÿ$Nÿ#ƒ¬ÿ5¨Ìÿ>²ÒÿI¿ÚÿSÉàÿU¼Ì×\J9+ ÿÿÿÿÿÿÿÿÿ$$$ &4EXd„ªÀø•Æû“ÈÿŒÁÿ Kžÿyÿvÿvÿuÿtÿtÿsÿrÿrÿqÿpÿpÿoÿnÿmÿmÿlÿkÿkÿjÿjÿiÿhÿhÿgÿfÿfÿeÿdÿdÿcÿbÿaÿaÿ`ÿ_ÿ_ÿ^ÿ]ÿ]ÿ\ÿ[ÿ[ÿZÿYÿYÿXÿWÿWÿVÿUÿUÿTÿSÿSÿRÿQÿQÿPÿOÿNÿMÿLÿJÿIÿHÿGÿFÿDÿCÿBÿAÿ@ÿ>ÿ=ÿ<ÿ;ÿ:ÿ9ÿ8ÿ6ÿ5ÿ4ÿ3ÿ2ÿ1ÿ/ÿ.ÿ-ÿ,ÿ+ÿ.ÿ\‚ÿ>±ÑÿH½ØÿSÉàÿ\ÔæÿNŸ§®XF5& $$$ÿÿÿÿÿÿ!/?R9I|…¶ôÀú’ÇÿƒÀÿ"‹ÿxÿxÿwÿvÿvÿuÿtÿtÿsÿrÿrÿqÿpÿpÿoÿnÿnÿmÿlÿkÿkÿjÿjÿiÿhÿhÿgÿfÿfÿeÿdÿdÿcÿbÿbÿaÿ`ÿ_ÿ_ÿ^ÿ]ÿ]ÿ\ÿ[ÿ[ÿZÿYÿYÿXÿXÿWÿVÿVÿUÿTÿSÿSÿRÿQÿQÿPÿOÿNÿMÿLÿJÿIÿHÿGÿFÿDÿCÿBÿAÿ@ÿ?ÿ=ÿ<ÿ;ÿ:ÿ9ÿ8ÿ6ÿ5ÿ4ÿ3ÿ2ÿ1ÿ/ÿ.ÿ-ÿ,ÿ+ÿ)ÿ*Pÿ@§ÃÿQÇßÿ\ÔæÿeÜêû7_b€R?/!ÿÿÿÿÿÿ+++ '8J_s Û‡¸ù‹Àþ‘Çÿ!‹ÿzÿyÿxÿxÿwÿvÿvÿuÿtÿtÿsÿrÿrÿqÿpÿpÿoÿnÿnÿmÿlÿlÿkÿjÿjÿiÿhÿhÿgÿfÿfÿeÿdÿdÿcÿbÿbÿaÿ`ÿ`ÿ_ÿ^ÿ^ÿ]ÿ\ÿ[ÿ[ÿZÿYÿYÿXÿXÿWÿVÿVÿUÿTÿTÿSÿRÿQÿQÿPÿOÿNÿMÿLÿJÿIÿHÿGÿFÿEÿCÿBÿAÿ@ÿ?ÿ=ÿ<ÿ;ÿ:ÿ9ÿ8ÿ6ÿ5ÿ4ÿ3ÿ2ÿ1ÿ/ÿ.ÿ-ÿ,ÿ+ÿ*ÿ)NÿPÅÞÿZÒåÿfßíÿfÔÜã""aJ8( +++ÿÿÿ   /@TX{¬²ú„¸üŠÀÿ N¤ÿ{ÿzÿzÿyÿxÿyÿxÿwÿwÿvÿuÿuÿtÿsÿsÿrÿqÿqÿpÿoÿoÿnÿmÿmÿlÿkÿkÿjÿiÿiÿhÿgÿgÿfÿeÿeÿdÿcÿcÿbÿaÿaÿ`ÿ_ÿ_ÿ^ÿ]ÿ]ÿ\ÿ[ÿZÿZÿYÿYÿXÿWÿWÿVÿUÿUÿTÿSÿSÿRÿQÿPÿOÿNÿMÿKÿJÿIÿHÿGÿFÿEÿCÿBÿAÿAÿ@ÿ>ÿ=ÿ<ÿ;ÿ9ÿ7ÿ6ÿ5ÿ4ÿ2ÿ1ÿ/ÿ.ÿ-ÿ,ÿ+ÿ*ÿ,lŒÿZÒåÿdÝìÿoéóÿ\²µ²T@/  333 %5H $a t§ó~±ûƒ¹ÿt´ÿ~ÿ|ÿ{ÿzÿ{ÿzÿyÿyÿxÿxÿxÿwÿvÿwÿvÿuÿuÿtÿsÿsÿrÿqÿqÿpÿoÿoÿnÿmÿmÿlÿkÿkÿjÿiÿiÿhÿgÿgÿfÿeÿeÿdÿcÿcÿbÿaÿaÿ`ÿ_ÿ_ÿ^ÿ]ÿ]ÿ\ÿ[ÿ[ÿZÿYÿYÿXÿWÿWÿVÿUÿUÿTÿSÿRÿQÿPÿPÿNÿMÿLÿKÿJÿIÿHÿFÿEÿDÿCÿBÿAÿ>ÿ=ÿ<ÿ:ÿ9ÿ7ÿ6ÿ4ÿ3ÿ1ÿ/ÿ.ÿ-ÿ,ÿ+ÿ0ÿM³ÉÿdÝìÿmçòÿvïôø ()bH5% 333+++ *;OC^‘ vªú|±ýƒ¹ÿ$ÿ}ÿ|ÿ|ÿ|ÿ{ÿ{ÿ{ÿzÿ{ÿzÿzÿzÿzÿyÿyÿxÿxÿxÿwÿvÿvÿuÿtÿtÿsÿrÿrÿqÿpÿpÿoÿnÿnÿmÿlÿlÿkÿjÿjÿiÿhÿhÿgÿfÿfÿeÿdÿdÿcÿbÿbÿaÿ`ÿ`ÿ`ÿ_ÿ_ÿ^ÿ]ÿ]ÿ\ÿ[ÿ[ÿZÿYÿYÿXÿWÿVÿUÿTÿSÿRÿPÿOÿNÿMÿLÿKÿIÿHÿGÿGÿFÿDÿBÿ@ÿ>ÿ=ÿ:ÿ8ÿ6ÿ5ÿ3ÿ2ÿ0ÿ.ÿ-ÿ,ÿ+ÿ7[ÿdÝìÿmçòÿxôùÿH„ˆ“O;* +++$$$ .@V[„ u©ú{±þ s±ÿÿ~ÿ}ÿ~ÿ}ÿ|ÿ}ÿ}ÿ}ÿ}ÿ~ÿ~ÿ~ÿÿ~ÿ~ÿ~ÿ}ÿ}ÿ|ÿ{ÿ{ÿzÿyÿxÿxÿwÿvÿvÿuÿuÿuÿtÿsÿsÿrÿqÿqÿpÿoÿoÿnÿmÿmÿlÿkÿkÿjÿiÿiÿhÿhÿhÿgÿfÿfÿeÿdÿdÿcÿbÿbÿaÿ`ÿ`ÿ_ÿ^ÿ^ÿ]ÿ\ÿ[ÿZÿZÿYÿXÿVÿUÿTÿSÿRÿQÿOÿNÿMÿLÿKÿHÿGÿCÿAÿ>ÿ<ÿ9ÿ6ÿ5ÿ3ÿ1ÿ0ÿ.ÿ-ÿ,ÿ,ÿXÃÖÿmçòÿvòøÿa¿ÅÅV@. $$$$$$ "1E[ d“ß u©û y°ÿ M¡ÿÿÿÿ~ÿ~ÿ~ÿ~ÿ€ÿ€ÿÿƒÿ„ÿ„ÿ…ÿ…ÿ…ÿ„ÿ„ÿ„ÿ„ÿƒÿ‚ÿ‚ÿÿÿÿ€ÿÿÿ~ÿ}ÿ|ÿ|ÿ{ÿzÿzÿyÿyÿyÿxÿwÿwÿvÿuÿuÿtÿsÿsÿrÿrÿrÿqÿpÿpÿoÿnÿnÿmÿlÿlÿkÿkÿkÿjÿiÿiÿhÿgÿgÿfÿeÿeÿdÿcÿbÿaÿ`ÿ^ÿ]ÿ\ÿ\ÿZÿXÿWÿVÿTÿRÿNÿKÿGÿCÿ@ÿ<ÿ:ÿ7ÿ5ÿ3ÿ1ÿ0ÿ/ÿ-ÿ,ÿ:‚ÿkåñÿvòøÿnÛàâ[E1" $$$ """#4I` h›í s§ü y°ÿ:™ÿ€ÿÿ€ÿÿÿ€ÿÿ‚ÿ„ÿ‡ÿˆÿ‹ÿŒÿÿŽÿŽÿŽÿŽÿŽÿÿÿŒÿ‹ÿ‹ÿŠÿŠÿŠÿ‰ÿˆÿˆÿ‡ÿ†ÿ†ÿ…ÿ…ÿ„ÿ„ÿƒÿ‚ÿ‚ÿÿÿÿ€ÿÿÿ~ÿ~ÿ}ÿ|ÿ|ÿ|ÿ{ÿzÿzÿyÿxÿxÿxÿwÿwÿvÿuÿuÿtÿtÿtÿsÿrÿrÿqÿpÿpÿoÿnÿmÿlÿkÿkÿiÿhÿgÿfÿeÿbÿ_ÿ]ÿYÿUÿPÿJÿEÿAÿ<ÿ9ÿ7ÿ4ÿ2ÿ1ÿ0ÿ/ÿ.ÿ+aÿkåñÿuð÷ÿsçìñ`I4#"""  %7Le l¡ù r¨ü y°ÿ.”ÿÿ€ÿ€ÿÿÿ‚ÿ„ÿ†ÿ‰ÿÿÿ“ÿ–ÿ˜ÿ™ÿšÿšÿ™ÿšÿ™ÿ˜ÿ˜ÿ˜ÿ—ÿ—ÿ–ÿ•ÿ•ÿ•ÿ”ÿ”ÿ“ÿ’ÿ’ÿ’ÿ‘ÿ‘ÿÿÿÿÿŽÿÿÿÿŒÿŒÿ‹ÿ‹ÿŠÿŠÿŠÿ‰ÿˆÿˆÿ‡ÿ‡ÿ‡ÿ†ÿ…ÿ…ÿ…ÿ„ÿƒÿƒÿ‚ÿ‚ÿ‚ÿÿ€ÿ€ÿÿÿÿ}ÿ|ÿ|ÿ{ÿzÿzÿyÿwÿvÿtÿrÿoÿkÿfÿ`ÿYÿSÿKÿEÿ@ÿ<ÿ9ÿ7ÿ4ÿ2ÿ1ÿ0ÿ/ÿ"Mqÿkåñÿuð÷ÿyôùýeL7% 333'8M#l k û r¨ý x¯ÿ(’ÿÿÿÿÿƒÿ„ÿ†ÿ‹ÿ‹ÿ ˆÿ ÿ ÿ “ÿ –ÿ ˜ÿ ˜ÿ šÿ ™ÿ ™ÿ ™ÿ ˜ÿ ˜ÿ ˜ÿ —ÿ –ÿ –ÿ –ÿ •ÿ •ÿ •ÿ •ÿ •ÿ ”ÿ “ÿ “ÿ “ÿ ’ÿ ’ÿ ‘ÿ ‘ÿ ‘ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ Žÿ Žÿ ÿ ÿ ÿ Œÿ ‹ÿ ‹ÿ ‹ÿ Šÿ Šÿ Šÿ Šÿ Šÿ ‰ÿ ‰ÿ ˆÿ ˆÿ ‡ÿ ‡ÿ ‡ÿ †ÿ …ÿ …ÿ …ÿ …ÿ …ÿ „ÿ ƒÿ ƒÿ ‚ÿ ÿ ÿ €ÿ ÿ ~ÿ {ÿ xÿ uÿ oÿ hÿ aÿYÿSÿJÿDÿ>ÿ;ÿ8ÿ6ÿ3ÿ2ÿ1ÿ0ÿDiÿiãïÿuð÷ÿzõúÿ )*lM8'333333(:O $n k û q§ý x¯ÿ'“ÿ‚ÿÿ‚ÿ‚ÿ„ÿ‡ÿŠÿŽÿ}ÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿ55TÿZÿQÿIÿBÿ=ÿ9ÿ7ÿ5ÿ3ÿ2ÿ1ÿCjÿiãïÿsíöÿzõúÿ!*+nO:(333333 );P $n jŸû q§ý v®ÿ'“ÿƒÿ‚ÿ‚ÿ„ÿ…ÿˆÿÿ“ÿ€ÿMMMÿFFFÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿAAAÿMMMÿ55WÿbÿVÿMÿEÿ@ÿ;ÿ8ÿ6ÿ5ÿ4ÿ2ÿCjÿgáîÿsíöÿ|÷üÿ!*+nP;) 333333 );Q $o jŸû q§ý v®ÿ'“ÿ„ÿƒÿ„ÿ„ÿ‡ÿŠÿÿ—ÿƒÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$$$ÿMMMÿ55Zÿhÿ[ÿPÿGÿBÿ=ÿ;ÿ7ÿ6ÿ5ÿ4ÿClÿgáîÿqëôÿ|÷üÿ!*+oQ;) 333333 *<Q $o jŸû o¦ý v®ÿ'”ÿ„ÿ…ÿ…ÿ†ÿ‰ÿÿ’ÿšÿ†ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$$$ÿMMMÿ55\ÿnÿ`ÿSÿJÿDÿ?ÿ<ÿ9ÿ7ÿ6ÿ5ÿClÿgáîÿqëôÿzöûÿ!*+oQ<* 333333 *<R $p hžû o¦ý u¬ÿ'”ÿ…ÿ…ÿ†ÿ‡ÿ‰ÿÿ•ÿÿ‰ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$$$ÿMMMÿ55^ÿsÿcÿVÿLÿEÿ@ÿ=ÿ:ÿ9ÿ8ÿ6ÿCmÿfßíÿqëôÿzöûÿ!**pR<* 333333 *<R $p hžû n¤ý u¬ÿ'”ÿ†ÿ†ÿ†ÿˆÿ‹ÿÿ—ÿ ÿŠÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿGGGÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿCCCÿEEEÿ+++ÿÿ777ÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿAAAÿFFFÿ ÿÿ$$$ÿMMMÿ55_ÿvÿfÿYÿOÿFÿBÿ>ÿ;ÿ:ÿ9ÿ8ÿBmÿfßíÿoéóÿzöûÿ!*+pR<* 333333 *<R $p gœü n¤ý s¬ÿ'•ÿ†ÿ‡ÿ‡ÿ‰ÿŒÿ‘ÿ—ÿ¡ÿŒÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ:::ÿ@C3ÿ@C3ÿ@C3ÿ@C3ÿ@C3ÿ@C3ÿ@C3ÿ@C3ÿ@C3ÿ@C3ÿ@C3ÿ@C3ÿ@C3ÿ@C3ÿ@C3ÿ@C3ÿ@C3ÿ@C3ÿ=?4ÿ666ÿ888ÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55`ÿyÿhÿZÿPÿIÿDÿ?ÿ<ÿ;ÿ:ÿ9ÿBnÿdÝìÿoéóÿxôùÿ!*+pR<* 333333 *<R $p gœü n¤ý s¬ÿ&•ÿ‡ÿ‡ÿˆÿŠÿŒÿ’ÿ˜ÿ¢ÿÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿ˜¸ÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55aÿ{ÿjÿ[ÿRÿJÿDÿAÿ=ÿ<ÿ;ÿ:ÿBoÿdÝìÿmçòÿxôùÿ"*+pR<* 333333 *<R $p gœü m£ý s¬ÿ&•ÿˆÿˆÿˆÿ‹ÿÿ“ÿšÿ£ÿÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿ˜¸ÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55aÿ|ÿlÿ^ÿSÿKÿEÿAÿ?ÿ>ÿ<ÿ;ÿAoÿdÝìÿmçòÿvòøÿ"*+pR<* 333333 *<R $p e›ü m£ý r«ÿ&–ÿˆÿ‰ÿ‰ÿ‹ÿŽÿ“ÿ›ÿ¤ÿŽÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿ˜¸ÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55bÿ}ÿmÿ_ÿTÿMÿFÿBÿ@ÿ?ÿ>ÿ=ÿApÿbÚêÿmçòÿvòøÿ"*+pR<* 333333 *<R $p e›ü l¢ý r«ÿ&–ÿ‰ÿŠÿŠÿŒÿŽÿ”ÿ›ÿ¥ÿŽÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ999ÿ;;;ÿ999ÿ666ÿ:::ÿ:::ÿ:::ÿ:::ÿ999ÿ;;;ÿ999ÿ555ÿ999ÿ:::ÿ:::ÿ:::ÿ999ÿ;;;ÿ;;;ÿ555ÿ888ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿ˜¸ÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55bÿ~ÿmÿ`ÿUÿNÿHÿCÿAÿ@ÿ?ÿ>ÿAqÿbÚêÿkåñÿvòøÿ"*+pR<* 333333 *<R $p e›ü l¢ý q©ÿ&—ÿŠÿŠÿ‹ÿÿÿ•ÿ›ÿ¥ÿŽÿMMMÿ555ÿÿÿÿÿÿÿÿÿ ÿ111ÿCCCÿ???ÿ,,,ÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿBBBÿzzzÿ{{{ÿkkkÿNNNÿ555ÿ:::ÿ:::ÿ???ÿmmmÿÿoooÿXXXÿ666ÿ999ÿ:::ÿ;;;ÿ\\\ÿ‚‚‚ÿsssÿ```ÿ;;;ÿ888ÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿ˜¸ÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55bÿÿoÿ`ÿVÿOÿIÿEÿBÿAÿ@ÿ?ÿArÿ`Øéÿkåñÿuð÷ÿ"*+pR<* 333333 *<R $p dšü l¢ý q©ÿ&–ÿ‹ÿ‹ÿ‹ÿŽÿÿ•ÿœÿ¥ÿŽÿMMMÿ555ÿÿÿÿÿÿÿ000ÿ^^cÿmmmÿffmÿSStÿYYsÿmmqÿqqrÿYY]ÿ$$$ÿÿÿÿÿÿÿÿDDDÿBBBÿšššÿœœœÿŒŒŒÿ{{{ÿkkkÿMMMÿ555ÿ:::ÿyyyÿ   ÿÿÿoooÿ[[[ÿ555ÿ999ÿ[[[ÿ¤¤¤ÿ”””ÿ„„„ÿsssÿcccÿ666ÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿ˜¸ÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55cÿ€ÿpÿbÿWÿPÿJÿFÿDÿBÿAÿ@ÿArÿ`Øéÿiãïÿuð÷ÿ"++pR<* 333333 *<R #p dšü j ý q©ÿ&—ÿ‹ÿŒÿŒÿŽÿ‘ÿ–ÿœÿ¦ÿÿMMMÿ555ÿÿÿÿÿÿIILÿeehÿ66}ÿ##ƒÿ(({ÿ<>>ÿÿÿÿÿÿÿDDDÿVVVÿ½½½ÿ­­­ÿÿŒŒŒÿ|||ÿlllÿ888ÿFFFÿ¾¾¾ÿ±±±ÿ¡¡¡ÿÿ€€€ÿpppÿ>>>ÿ:::ÿžžžÿµµµÿ¥¥¥ÿ•••ÿ„„„ÿtttÿIIIÿ;;;ÿ000ÿÿ;;;ÿ998ÿ+5ÿ+5ÿ+5ÿ+5ÿ+5ÿ+5ÿ+5ÿ"ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55cÿÿqÿcÿYÿRÿKÿGÿEÿDÿCÿAÿ@sÿ`Øéÿiãïÿuð÷ÿ"++pR<* 333333 *<R #pb˜ü j ý p¨ÿ&˜ÿŒÿŒÿÿÿ‘ÿ–ÿÿ¦ÿÿMMMÿ555ÿÿÿÿÿWW[ÿPPlÿ ‡ÿ^^†ÿww}ÿ“ÿ¨¨¨ÿšš›ÿoovÿGGMÿ%%jÿ++„ÿjjsÿJJKÿÿÿÿÿÿDDDÿ]]]ÿËËËÿsssÿ‹‹‹ÿÿÿ}}}ÿ<<<ÿJJJÿÑÑÑÿÂÂÂÿ¯¯¯ÿÿ‘‘‘ÿÿBBBÿ<<<ÿ³³³ÿÆÆÆÿ¶¶¶ÿ¤¤¤ÿJJJÿiiiÿUUUÿ;;;ÿ000ÿÿ;;;ÿ=>6ÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55cÿÿqÿdÿZÿSÿMÿIÿFÿEÿDÿCÿ@tÿ^Öèÿiãïÿsíöÿ"++pR<* 333333 *<R #pb˜ü iŸý p¨ÿ%˜ÿÿÿÿÿ’ÿ–ÿžÿ§ÿÿMMMÿ555ÿÿÿÿ??@ÿTTgÿ&&ÿˆˆ“ÿ­­°ÿÎÎÎÿÅÅÅÿÀÀÀÿÁÁÁÿÈÈÈÿÆÆÆÿfflÿ;;Wÿ †ÿqqsÿ---ÿÿÿÿÿDDDÿLLLÿ„„„ÿ«««ÿ¾¾¾ÿ®®®ÿžžžÿ~~~ÿ999ÿ>>>ÿ±±±ÿÓÓÓÿ¶¶¶ÿdddÿ¢¢¢ÿÿ>>>ÿ999ÿ|||ÿ×××ÿÆÆÆÿ¶¶¶ÿ¥¥¥ÿfffÿBBBÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55cÿƒÿrÿeÿ[ÿSÿNÿJÿHÿFÿEÿDÿ?tÿ^Öèÿgáîÿsíöÿ"++pR<* 333333 *<R#pb˜ü iŸý n§ÿ%˜ÿŽÿŽÿŽÿ‘ÿ“ÿ—ÿŸÿ¨ÿÿMMMÿ555ÿÿÿ'''ÿ^^aÿ „ÿ¢ÿÆÆÆÿÇÇÇÿµµµÿ¨¨¨ÿ£££ÿ¤¤¤ÿ«««ÿºººÿÍÍÍÿuuyÿ,,eÿ??ÿeeiÿÿÿÿÿDDDÿ999ÿbbbÿ×××ÿÏÏÏÿ¿¿¿ÿ¢¢¢ÿEEEÿ:::ÿ:::ÿQQQÿÊÊÊÿÆÆÆÿmmmÿ°°°ÿTTTÿ888ÿ:::ÿHHHÿ¯¯¯ÿ×××ÿÇÇÇÿ···ÿqqqÿ;;;ÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55cÿƒÿtÿfÿ\ÿTÿOÿKÿIÿHÿFÿEÿ?uÿ\Ôæÿgáîÿqëôÿ"++pR<* 333333 *<R#pa—ü iŸý n§ÿ%™ÿŽÿÿÿ‘ÿ”ÿ˜ÿŸÿ¨ÿÿMMMÿ555ÿÿÿFFHÿ==rÿaa¢ÿ¶¶»ÿÉÉÉÿ±±±ÿŸŸŸÿ”””ÿŽŽŽÿÿ———ÿ£££ÿ¸¸¸ÿÉÉÉÿKKQÿ}ÿeeqÿ888ÿÿÿÿDDDÿ:::ÿ999ÿPPPÿfffÿ___ÿEEEÿ999ÿ:::ÿ:::ÿ:::ÿIIIÿbbbÿaaaÿKKKÿ999ÿ:::ÿ:::ÿ:::ÿBBBÿ^^^ÿfffÿSSSÿ<<<ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55cÿƒÿtÿgÿ]ÿUÿPÿLÿJÿIÿHÿFÿ?vÿ\Ôæÿgáîÿqëôÿ"++pR<* 333333 *<R#pa—ü gžý n§ÿ%™ÿÿÿÿ‘ÿ”ÿ™ÿŸÿ¨ÿÿMMMÿ555ÿÿÿRRWÿ''~ÿ««»ÿÑÑÑÿºººÿ¡¡¡ÿÿÿyyyÿ{{{ÿ………ÿ•••ÿ§§§ÿÃÃÃÿ˜˜™ÿ++iÿKKyÿIIJÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55cÿ„ÿtÿhÿ^ÿWÿRÿMÿKÿJÿIÿHÿ>vÿ\Ôæÿfßíÿqëôÿ"++pR<* 333333 *<R#p_•ü gžý m¥ÿ%™ÿÿÿÿ’ÿ•ÿ™ÿ ÿ©ÿÿMMMÿ555ÿÿÿ\\\ÿ‰ÿÃÃÈÿÎÎÎÿ°°°ÿ˜˜˜ÿ„„„ÿtttÿlllÿnnnÿxxxÿŠŠŠÿŸŸŸÿ¹¹¹ÿ´´´ÿGGfÿ77€ÿ[[`ÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55cÿ…ÿuÿhÿ_ÿXÿSÿOÿMÿKÿJÿIÿ>wÿZÒåÿfßíÿoéóÿ"++pR<* 333333 *<R#p_•ü fœý m¥ÿ$™ÿÿ‘ÿ‘ÿ’ÿ–ÿšÿ ÿªÿ‘ÿMMMÿ555ÿÿ&&&ÿWW[ÿ..™ÿÉÉÑÿËËËÿ­­­ÿ•••ÿ€€€ÿoooÿ^^^ÿfffÿtttÿ†††ÿœœœÿ¶¶¶ÿÇÇÇÿWWcÿ''„ÿhhlÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ:::ÿDH0ÿDH0ÿDH0ÿDH0ÿDH0ÿDH0ÿDH0ÿ775ÿ555ÿ555ÿ555ÿ555ÿ555ÿ555ÿ555ÿ555ÿ555ÿ555ÿ555ÿ555ÿ777ÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55dÿ…ÿvÿiÿ_ÿYÿTÿPÿNÿMÿKÿJÿ>xÿZÒåÿdÝìÿoéóÿ"++pR<* 333333 *<R#p_•ü fœý l¤ÿ$šÿ‘ÿ‘ÿ’ÿ“ÿ–ÿ›ÿ¡ÿªÿ’ÿMMMÿ555ÿÿÿYYYÿŒÿÖÖÛÿÍÍÍÿ¯¯¯ÿ˜˜˜ÿƒƒƒÿsssÿjjjÿlllÿwwwÿŠŠŠÿžžžÿ¹¹¹ÿ¼¼¼ÿYYtÿ44€ÿZZ_ÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿsssÿ¨¨¨ÿ¢¢¢ÿ\\\ÿ:::ÿzzzÿ¨¨¨ÿpppÿtttÿ:::ÿ„„„ÿ:::ÿ:::ÿdddÿZZZÿ;;;ÿ‡‡‡ÿ¦¦¦ÿqqqÿfffÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ:<:ÿqÿqÿqÿqÿqÿqÿqÿqÿqÿqÿqÿqÿqÿPÿ&&&ÿ&&&ÿ&&&ÿ&&&ÿ&&&ÿ&&&ÿ---ÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55dÿ†ÿvÿjÿ`ÿYÿUÿQÿOÿNÿMÿLÿ>xÿXÐäÿdÝìÿmçòÿ"++pR<* 333333 *<R#p^”ü fœý l¤ÿ$šÿ’ÿ’ÿ’ÿ”ÿ–ÿ›ÿ¢ÿ«ÿ’ÿMMMÿ555ÿÿÿNNSÿ$$}ÿÐÐÞÿÖÖÖÿ¹¹¹ÿ   ÿŽŽŽÿÿwwwÿyyyÿƒƒƒÿ“““ÿ¦¦¦ÿÁÁÁÿ®®¯ÿDD}ÿFFwÿIIIÿÿÿÿDDDÿ:::ÿ:::ÿ™™™ÿ½½½ÿfffÿ]]]ÿ’’’ÿRRRÿÁÁÁÿMMMÿ¶¶¶ÿ®®®ÿ:::ÿÎÎÎÿ:::ÿ:::ÿÿzzzÿkkkÿ¬¬¬ÿQQQÿÉÉÉÿ“““ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55dÿ†ÿwÿjÿaÿZÿUÿRÿPÿOÿNÿMÿ>zÿXÐäÿdÝìÿmçòÿ"*+pR<* 333333 *<R#p^”ü dœý l¤ÿ$›ÿ“ÿ“ÿ“ÿ”ÿ—ÿœÿ¢ÿ«ÿ’ÿMMMÿ555ÿÿÿBBEÿ44pÿÆÿÝÝáÿÇÇÇÿ®®®ÿÿ’’’ÿ‹‹‹ÿÿ”””ÿ¡¡¡ÿ¶¶¶ÿÍÍÍÿ„„Šÿ&&‡ÿ[[lÿ666ÿÿÿÿDDDÿ:::ÿ;;;ÿóóóÿGGGÿ:::ÿ:::ÿ:::ÿAAAÿÎÎÎÿvvvÿŠŠŠÿ®®®ÿ:::ÿÎÎÎÿ:::ÿ:::ÿÿzzzÿPPPÿÇÇÇÿrrrÿŸŸŸÿ“““ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55dÿ‡ÿxÿkÿbÿ[ÿVÿSÿQÿPÿOÿNÿ=zÿXÐäÿbÚêÿmçòÿ"*+pR<* 333333 *<R#p\“ü dœý k¤ÿ$›ÿ“ÿ”ÿ”ÿ•ÿ˜ÿÿ£ÿ¬ÿ’ÿMMMÿ555ÿÿÿ***ÿSSVÿ‰ÿÙÙæÿÜÜÜÿÄÄÄÿ²²²ÿ¥¥¥ÿ   ÿ¡¡¡ÿ¨¨¨ÿ···ÿÊÊÊÿ°°´ÿaaÿ22}ÿ``cÿÿÿÿÿDDDÿ:::ÿJJJÿÝÝÝÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿGGGÿuuuÿ¥¥¥ÿ•••ÿ:::ÿæææÿDDDÿ:::ÿÿzzzÿ:::ÿMMMÿyyyÿ¶¶¶ÿ{{{ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55dÿ‡ÿxÿlÿbÿ\ÿWÿSÿRÿQÿPÿOÿ={ÿWÎãÿbÚêÿkåñÿ"*+pR<* 333333 *<R#p\“ü c›ý k¤ÿ#›ÿ”ÿ”ÿ•ÿ–ÿ˜ÿžÿ¤ÿ¬ÿ“ÿMMMÿ555ÿÿÿÿ==?ÿDD`ÿDD¦ÿååìÿßßàÿÌÌÌÿÁÁÁÿ¼¼¼ÿ½½½ÿÄÄÄÿÏÏÏÿµµºÿÿ ‰ÿbbfÿ///ÿÿÿÿÿDDDÿ:::ÿ<<<ÿõõõÿEEEÿ:::ÿ:::ÿ:::ÿ:::ÿ¬¬¬ÿ   ÿÂÂÂÿVVVÿ:::ÿÚÚÚÿ»»»ÿÿÿzzzÿ@@@ÿ³³³ÿ¢¢¢ÿÃÃÃÿDDDÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55dÿˆÿxÿmÿcÿ\ÿXÿTÿRÿRÿQÿPÿ={ÿWÎãÿ`Øéÿkåñÿ!*+pR<* 333333 *<R#p\“ü c›ý k¤ÿ#›ÿ•ÿ•ÿ•ÿ—ÿ™ÿžÿ¤ÿ­ÿ“ÿMMMÿ555ÿÿÿÿÿMMQÿ<>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55dÿˆÿyÿmÿdÿ]ÿXÿUÿSÿRÿRÿQÿ=|ÿWÎãÿ`Øéÿiãïÿ!*+pR<* 333333 *<R#p[’ý c›ý i¢ÿ#œÿ•ÿ–ÿ–ÿ—ÿšÿžÿ¤ÿ­ÿ“ÿMMMÿ555ÿÿÿÿÿ ÿDDHÿNNXÿ%%|ÿMM§ÿ{{»ÿ­­Íÿ˜˜Àÿ__¨ÿ11”ÿ66uÿ^^aÿ??AÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ€€€ÿµµµÿ®®®ÿhhhÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ€€€ÿpppÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ7=7ÿØÿØÿØÿØÿØÿØÿØÿØÿØÿØÿØÿØÿØÿyÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55eÿˆÿzÿmÿdÿ^ÿYÿUÿTÿSÿRÿRÿ=|ÿUÌáÿ`Øéÿiãïÿ!*+pR<* 333333 *<R#p[’ýa™ý i¢ÿ#œÿ–ÿ–ÿ—ÿ˜ÿšÿŸÿ¥ÿ­ÿ”ÿMMMÿ555ÿÿÿÿÿÿÿ111ÿRRUÿUUWÿII_ÿ99nÿ>>kÿPP`ÿ]]]ÿRRVÿ(((ÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ7:7ÿ`ÿ`ÿ`ÿ`ÿ`ÿ`ÿ`ÿ`ÿ`ÿ`ÿ]ÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55eÿ‰ÿzÿnÿeÿ^ÿZÿVÿTÿTÿSÿRÿ<}ÿUÌáÿ^Öèÿiãïÿ!*+pR<* 333333 *<R#pY‘ýa™ý h¡ÿ#œÿ—ÿ—ÿ—ÿ™ÿ›ÿŸÿ¦ÿ®ÿ”ÿMMMÿ555ÿÿÿÿÿÿÿÿÿ&&&ÿ222ÿ??Aÿ<<=ÿ000ÿ"""ÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55eÿŠÿ{ÿnÿfÿ_ÿZÿWÿUÿTÿTÿSÿ<}ÿSÉàÿ^Öèÿgáîÿ!*+pR<* 333333 *<R#pY‘ýa™ý h¡ÿ#ÿ—ÿ˜ÿ˜ÿ™ÿœÿ ÿ¦ÿ¯ÿ”ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55eÿ‹ÿ|ÿoÿfÿ`ÿ[ÿWÿVÿUÿTÿTÿ<}ÿSÉàÿ\Ôæÿgáîÿ!*+pR<* 333333 *<R#pY‘ý`˜þ h¡ÿ#žÿ˜ÿ™ÿ™ÿšÿœÿ¡ÿ§ÿ¯ÿ”ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55eÿ‹ÿ|ÿpÿgÿaÿ\ÿXÿWÿVÿUÿTÿ;}ÿSÉàÿ\Ôæÿfßíÿ!*+pR<* 333333 *<R#pXý`˜þ f ÿ#žÿ™ÿ™ÿšÿ›ÿÿ¢ÿ¨ÿ°ÿ•ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55fÿ‹ÿ|ÿqÿhÿaÿ]ÿYÿWÿWÿVÿUÿ;~ÿQÇßÿ\Ôæÿfßíÿ!*+pR<* 333333 *<R#pXý_–þ f ÿ"žÿšÿšÿšÿœÿžÿ¢ÿ©ÿ°ÿ•ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55fÿŒÿ}ÿqÿiÿbÿ]ÿZÿXÿWÿWÿVÿ;~ÿQÇßÿZÒåÿfßíÿ!**pR<* 333333 *<R#pVŽý_–þ ežÿ"žÿšÿ›ÿ›ÿœÿŸÿ£ÿ©ÿ±ÿ•ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ8>8ÿÒÿÒÿÒÿÒÿÒÿÒÿÒÿÒÿÒÿÒÿËÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55fÿŒÿ~ÿrÿiÿcÿ^ÿZÿYÿXÿWÿWÿ;~ÿOÅÞÿZÒåÿdÝìÿ!**pR<* 333333 *<R#pVŽý_–þ ežÿ"Ÿÿ›ÿ›ÿœÿÿŸÿ¤ÿ©ÿ±ÿ•ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55fÿÿ~ÿsÿiÿcÿ_ÿ[ÿYÿYÿXÿWÿ;ÿOÅÞÿXÐäÿdÝìÿ!**pR<* 333333 *<R#pVŽý^•þ ežÿ"Ÿÿœÿœÿœÿžÿ ÿ¤ÿªÿ²ÿ•ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ>>>ÿ&&&ÿÿ///ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ===ÿ@@@ÿÿÿ$$$ÿMMMÿ55fÿÿÿsÿjÿdÿ_ÿ\ÿZÿYÿYÿXÿ:ÿOÅÞÿXÐäÿbÚêÿ!**pR<* 333333 *<R#pUý^•þ cÿ"Ÿÿœÿÿÿžÿ¡ÿ¥ÿ«ÿ³ÿ–ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$$$ÿMMMÿ55fÿÿ€ÿsÿjÿeÿ`ÿ\ÿ[ÿZÿYÿYÿ:€ÿMÃÜÿXÐäÿbÚêÿ!**pR<* 333333 *<R#pUý\”þ cÿ! ÿÿÿžÿŸÿ¡ÿ¥ÿ«ÿ³ÿ–ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$$$ÿMMMÿ55fÿŽÿ€ÿtÿkÿeÿaÿ]ÿ[ÿ[ÿZÿYÿ9€ÿMÃÜÿWÎãÿbÚêÿ!)*pR<* 333333 *<R#pUý\”þ bœÿ!¡ÿžÿžÿŸÿ ÿ¢ÿ¥ÿ¬ÿ³ÿ•ÿMMMÿCCCÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ777ÿ;;;ÿMMMÿ66eÿÿ€ÿuÿlÿfÿbÿ^ÿ\ÿ\ÿ[ÿZÿ9€ÿKÁÛÿWÎãÿ`Øéÿ!)*pR<* 333333 *<R#pTŒý\”þ bœÿ! ÿŸÿŸÿŸÿ¡ÿ£ÿ¦ÿ­ÿ´ÿ--~ÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿEEUÿÿÿuÿmÿgÿbÿ_ÿ]ÿ\ÿ\ÿ[ÿ9ÿKÁÛÿUÌáÿ`Øéÿ!)*pR<* 333333 *<R#pTŒý[’þ bœÿ!¡ÿŸÿ ÿ ÿ¡ÿ¤ÿ§ÿ­ÿµÿÿMMMÿJJJÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿEEEÿGGGÿMMMÿ::bÿÿ‚ÿvÿmÿgÿcÿ_ÿ^ÿ]ÿ\ÿ\ÿ8ÿKÁÛÿUÌáÿ`Øéÿ!)*pR<* 333333 *<R#pSŠý[’þ`šÿ!¡ÿ ÿ ÿ¡ÿ¢ÿ¤ÿ¨ÿ­ÿµÿ—ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$$$ÿMMMÿ55gÿÿ‚ÿwÿnÿgÿdÿ`ÿ^ÿ^ÿ]ÿ\ÿ8ÿI¿ÚÿUÌáÿ^Öèÿ!)*pR<* 333333 *<R#pSŠýY‘þ`šÿ!¢ÿ¡ÿ¡ÿ¡ÿ£ÿ¤ÿ¨ÿ®ÿ¶ÿ—ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$$$ÿMMMÿ55gÿ‘ÿƒÿwÿoÿhÿdÿaÿ_ÿ^ÿ^ÿ]ÿ8ÿI¿ÚÿSÉàÿ^Öèÿ )*pR<* 333333 *<R"pSŠýY‘þ`™ÿ!£ÿ£ÿ¢ÿ¢ÿ¤ÿ¥ÿ©ÿ®ÿ¶ÿ˜ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$$$ÿMMMÿ55gÿ‘ÿ„ÿxÿoÿiÿeÿbÿ`ÿ_ÿ^ÿ^ÿ8‚ÿH½ØÿSÉàÿ\Ôæÿ )*pR<* 333333 *<R"pQ‰ýY‘þ`™ÿ!¤ÿ¤ÿ¤ÿ¤ÿ¤ÿ¦ÿªÿ¯ÿ·ÿ™ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ@@@ÿ)))ÿÿ333ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿ???ÿCCCÿÿÿ$$$ÿMMMÿ55gÿ’ÿ„ÿyÿpÿiÿfÿbÿaÿ`ÿ_ÿ_ÿ8‚ÿH½ØÿSÉàÿ\Ôæÿ )*pR<* 333333 *<R"pQ‰ýXþ`™ÿ ¤ÿ¥ÿ¥ÿ¥ÿ¦ÿ¦ÿ«ÿ°ÿ·ÿ™ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55gÿ’ÿ„ÿzÿqÿjÿfÿcÿaÿaÿ`ÿ_ÿ7ƒÿH½ØÿQÇßÿ\Ôæÿ )*pR<* 333333 *<R"pPˆýXþ^—ÿ ¥ÿ¦ÿ¦ÿ¦ÿ§ÿ¨ÿ«ÿ±ÿ¸ÿ™ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿ˜¸ÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55gÿ“ÿ…ÿzÿrÿkÿgÿdÿbÿaÿaÿ`ÿ7ƒÿF»×ÿQÇßÿZÒåÿ )*pR<* 333333 *<R"pPˆýVŽþ^—ÿ ¦ÿ§ÿ§ÿ§ÿ¨ÿ©ÿ­ÿ±ÿ¹ÿ™ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿ˜¸ÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55gÿ“ÿ†ÿzÿrÿlÿhÿdÿcÿbÿaÿaÿ7ƒÿF»×ÿOÅÞÿZÒåÿ )*pR<* 333333 *<R"pPˆýVŽþ]–ÿ ¦ÿ©ÿ©ÿ¨ÿ©ÿªÿ­ÿ²ÿ¹ÿšÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿ˜¸ÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55hÿ”ÿ†ÿ{ÿsÿlÿiÿeÿcÿcÿbÿaÿ7„ÿD¹ÖÿOÅÞÿXÐäÿ )*pR<* 333333 *<R"pN†þVŽþ]—ÿ §ÿªÿªÿªÿ©ÿ«ÿ®ÿ³ÿºÿšÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ999ÿ:::ÿ666ÿ777ÿ:::ÿ:::ÿ:::ÿ:::ÿ999ÿ999ÿ888ÿ666ÿ999ÿ:::ÿ:::ÿ:::ÿ888ÿ999ÿ:::ÿ555ÿ999ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿ˜¸ÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55hÿ•ÿ‡ÿ{ÿtÿmÿiÿfÿdÿcÿcÿbÿ7„ÿD¹ÖÿOÅÞÿXÐäÿ )*pR<* 333333 *<R"pN†þUþ]—ÿ§ÿ«ÿ«ÿ«ÿ«ÿ¬ÿ¯ÿ´ÿ»ÿ›ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿ+++ÿ;;;ÿ888ÿ%%%ÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿAAAÿsssÿzzzÿiiiÿIIIÿ555ÿ:::ÿ:::ÿ???ÿcccÿ~~~ÿmmmÿTTTÿ555ÿ999ÿ:::ÿ;;;ÿTTTÿÿqqqÿ]]]ÿ888ÿ888ÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿ˜¸ÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55hÿ•ÿˆÿ|ÿtÿnÿjÿfÿeÿdÿcÿcÿ6„ÿD¹ÖÿMÃÜÿXÐäÿ )*pR<* 333333 *<R"pM…þUþ[–ÿ¨ÿ¬ÿ¬ÿ¬ÿ¬ÿ®ÿ°ÿµÿ¼ÿ›ÿMMMÿ555ÿÿÿÿÿÿÿ+++ÿXX]ÿkklÿllnÿ]]qÿbbqÿqqrÿmmpÿSSVÿ!!!ÿÿÿÿÿÿÿÿDDDÿ@@@ÿ“““ÿ›››ÿŠŠŠÿzzzÿjjjÿJJJÿ666ÿ:::ÿsssÿŸŸŸÿŽŽŽÿ~~~ÿnnnÿXXXÿ555ÿ:::ÿVVVÿ£££ÿ“““ÿ‚‚‚ÿrrrÿbbbÿ666ÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿ˜¸ÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55hÿ•ÿˆÿ}ÿtÿoÿkÿgÿfÿeÿdÿcÿ6…ÿB¶ÕÿMÃÜÿWÎãÿ )*pR<* 333333 *<R"pM…þSþ[–ÿ©ÿ®ÿ­ÿ­ÿ­ÿ¯ÿ²ÿ¶ÿ¼ÿ›ÿMMMÿ555ÿÿÿÿÿÿBBDÿffhÿ==zÿ$$„ÿ$$ÿ00qÿ&&pÿ{ÿ$$„ÿTTwÿlloÿ666ÿÿÿÿÿÿÿDDDÿTTTÿ¼¼¼ÿ¬¬¬ÿ›››ÿ‹‹‹ÿ{{{ÿkkkÿ777ÿEEEÿ¼¼¼ÿ°°°ÿŸŸŸÿÿÿoooÿ<<<ÿ888ÿšššÿ´´´ÿ£££ÿ“““ÿƒƒƒÿsssÿGGGÿ<<<ÿ000ÿÿ;;;ÿ998ÿ3>ÿ3>ÿ3>ÿ3>ÿ3>ÿ3>ÿ3>ÿ.8ÿ.8ÿ.8ÿ.8ÿ.8ÿ.8ÿ.8ÿ.8ÿ.8ÿ.8ÿ.8ÿ!(ÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55hÿ–ÿˆÿ~ÿuÿoÿlÿhÿfÿfÿeÿdÿ5…ÿB¶ÕÿKÁÛÿWÎãÿ )*pR<* 333333 *<R"pM…þSþ[–ÿªÿ¯ÿ¯ÿ¯ÿ®ÿ°ÿ³ÿ·ÿ¾ÿœÿMMMÿ555ÿÿÿÿÿTTXÿWWiÿ""…ÿSS…ÿrrxÿ€€‰ÿžž ÿ’ÿbbkÿDDKÿnÿ33ƒÿnnsÿEEFÿÿÿÿÿÿDDDÿ]]]ÿÍÍÍÿÿŠŠŠÿœœœÿŒŒŒÿ{{{ÿ;;;ÿLLLÿÑÑÑÿÁÁÁÿ®®®ÿ“““ÿÿÿCCCÿ<<<ÿµµµÿÅÅÅÿ´´´ÿ£££ÿIIIÿpppÿWWWÿ;;;ÿ000ÿÿ;;;ÿ=>6ÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55hÿ—ÿ‰ÿ~ÿvÿpÿlÿiÿgÿfÿfÿeÿ5…ÿB¶ÕÿKÁÛÿUÌáÿ )*pR<* 333333 *<R"pK„þSþZ”ÿ«ÿ°ÿ°ÿ°ÿ°ÿ±ÿ´ÿ¸ÿ¿ÿÿMMMÿ555ÿÿÿÿ<<=ÿXXfÿ##Œÿƒƒ‘ÿ¥¥©ÿÎÎÎÿÇÇÇÿÂÂÂÿÃÃÃÿÊÊÊÿÃÃÃÿ\\cÿ66Zÿ$$†ÿqqsÿ+++ÿÿÿÿÿDDDÿOOOÿƒƒƒÿœœœÿ½½½ÿ­­­ÿÿÿ999ÿ@@@ÿ¹¹¹ÿÑÑÑÿµµµÿcccÿ¡¡¡ÿŽŽŽÿ>>>ÿ888ÿ‚‚‚ÿÕÕÕÿÅÅÅÿµµµÿŸŸŸÿYYYÿCCCÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55hÿ—ÿŠÿÿvÿqÿmÿiÿhÿgÿfÿfÿ5†ÿ@´ÓÿKÁÛÿUÌáÿ (*pR<* 333333 *<R"pK„þR‹þZ”ÿ«ÿ±ÿ±ÿ±ÿ±ÿ²ÿµÿ¹ÿ¿ÿÿMMMÿ555ÿÿÿ&&&ÿ__aÿ""‚ÿˆˆ¡ÿÂÂÃÿÈÈÈÿ···ÿªªªÿ¥¥¥ÿ¥¥¥ÿ­­­ÿ¼¼¼ÿÎÎÎÿllrÿ((gÿCC}ÿbbfÿÿÿÿÿDDDÿ999ÿjjjÿÚÚÚÿÎÎÎÿ¾¾¾ÿ§§§ÿHHHÿ999ÿ:::ÿTTTÿÓÓÓÿÅÅÅÿmmmÿ±±±ÿZZZÿ999ÿ:::ÿIIIÿ½½½ÿÖÖÖÿÆÆÆÿ¶¶¶ÿ{{{ÿ;;;ÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55iÿ—ÿŠÿ€ÿwÿqÿnÿjÿhÿhÿgÿfÿ5†ÿ@´ÓÿI¿ÚÿUÌáÿ (*pR<* 333333 *<R"pI‚þR‹þX“ÿ¬ÿ²ÿ²ÿ²ÿ²ÿ³ÿ¶ÿºÿÀÿÿMMMÿ555ÿÿÿDDGÿ@@oÿUUžÿ²²¸ÿËËËÿ²²²ÿ   ÿ•••ÿÿ‘‘‘ÿ˜˜˜ÿ¤¤¤ÿºººÿÇÇÇÿHHNÿ€ÿffqÿ666ÿÿÿÿDDDÿ:::ÿ999ÿRRRÿkkkÿcccÿGGGÿ999ÿ:::ÿ:::ÿ999ÿKKKÿfffÿbbbÿNNNÿ:::ÿ:::ÿ:::ÿ:::ÿDDDÿcccÿkkkÿVVVÿ===ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55iÿ˜ÿ‹ÿ€ÿxÿrÿnÿkÿiÿhÿhÿgÿ5†ÿ>²ÒÿI¿ÚÿSÉàÿ (*pR<* 333333 *<R"pI‚þR‹þX“ÿ¬ÿ´ÿ´ÿ³ÿ³ÿ´ÿ·ÿ»ÿÁÿžÿMMMÿ555ÿÿÿQQWÿ**|ÿ©©»ÿÑÑÑÿ»»»ÿ¢¢¢ÿ‘‘‘ÿƒƒƒÿ{{{ÿ|||ÿ‡‡‡ÿ–––ÿ¨¨¨ÿÄÄÄÿ””–ÿ))iÿLLxÿHHHÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55iÿ˜ÿŒÿ€ÿxÿsÿnÿkÿjÿiÿhÿhÿ5‡ÿ>²ÒÿH½ØÿSÉàÿ (*pR<* 333333 *<R"pI‚þPŠþX“ÿ­ÿµÿµÿ´ÿ´ÿµÿ¸ÿ¼ÿÂÿŸÿMMMÿ555ÿÿÿ[[\ÿ‡ÿÂÂÇÿÏÏÏÿ±±±ÿ™™™ÿ………ÿuuuÿmmmÿoooÿxxxÿ‹‹‹ÿŸŸŸÿºººÿ³³³ÿFFgÿ88€ÿYY^ÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ=>6ÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55iÿ™ÿŒÿÿyÿsÿoÿlÿjÿjÿiÿhÿ4‡ÿ>²ÒÿH½ØÿQÇßÿ (*pR<* 333333 *<R"pH‚þPŠþW’ÿ®ÿ¶ÿ¶ÿµÿ¶ÿ¶ÿ¹ÿ½ÿÃÿŸÿMMMÿ555ÿÿ&&&ÿXX[ÿ,,˜ÿÈÈÐÿËËËÿ­­­ÿ•••ÿ€€€ÿpppÿ___ÿfffÿtttÿ†††ÿœœœÿ¶¶¶ÿÇÇÇÿWWdÿ''„ÿggkÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ;;:ÿNV&ÿNV&ÿNV&ÿNV&ÿNV&ÿNV&ÿNV&ÿ12.ÿ///ÿ///ÿ///ÿ///ÿ///ÿ///ÿ///ÿ///ÿ///ÿ///ÿ///ÿ///ÿ333ÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55iÿ™ÿŒÿ‚ÿzÿtÿpÿmÿkÿkÿjÿiÿ4‡ÿ<°ÑÿH½ØÿQÇßÿ (*pR<* 333333 *<R"pH‚þO‰þW’ÿ®ÿ·ÿ·ÿ¶ÿ·ÿ¸ÿºÿ¾ÿÄÿ ÿMMMÿ555ÿÿÿYYYÿÿÕÕÙÿÍÍÍÿ¯¯¯ÿ———ÿƒƒƒÿsssÿiiiÿlllÿvvvÿ‰‰‰ÿžžžÿ¸¸¸ÿ½½½ÿYYsÿ22€ÿ[[aÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿKKKÿwwwÿpppÿ???ÿ:::ÿOOOÿwwwÿNNNÿWWWÿ:::ÿ___ÿ:::ÿ:::ÿOOOÿIIIÿ:::ÿWWWÿuuuÿOOOÿPPPÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ:<:ÿfÿfÿfÿfÿfÿfÿfÿfÿfÿfÿfÿfÿfÿ#K#ÿ***ÿ***ÿ***ÿ***ÿ***ÿ***ÿ///ÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55iÿšÿÿ‚ÿ{ÿuÿpÿnÿlÿkÿkÿjÿ3‡ÿ<°ÑÿF»×ÿQÇßÿ ()pR<* 333333 *<R"pFþO‰þUÿ¯ÿ¹ÿ¸ÿ·ÿ¸ÿ¹ÿ¼ÿ¿ÿÄÿ ÿMMMÿ555ÿÿÿPPUÿ""~ÿÒÒÞÿÕÕÕÿ¸¸¸ÿŸŸŸÿÿ~~~ÿwwwÿxxxÿ‚‚‚ÿ’’’ÿ¥¥¥ÿÀÀÀÿ¯¯°ÿFF}ÿEExÿIIJÿÿÿÿDDDÿ:::ÿ:::ÿuuuÿÙÙÙÿ———ÿŽŽŽÿ¯¯¯ÿGGGÿÓÓÓÿÿÄÄÄÿ®®®ÿ:::ÿÎÎÎÿ:::ÿ:::ÿÿzzzÿ[[[ÿÉÉÉÿƒƒƒÿÑÑÑÿ“““ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55iÿšÿŽÿƒÿ{ÿvÿqÿnÿmÿlÿkÿkÿ3ˆÿ:®ÐÿF»×ÿOÅÞÿ ()pR<* 333333 *<R"pFþO‰þUÿ°ÿºÿºÿ¸ÿ¹ÿºÿ½ÿÀÿÆÿ¡ÿMMMÿ555ÿÿÿCCGÿ33rÿ——ÉÿÝÝáÿÆÆÆÿ­­­ÿœœœÿÿŠŠŠÿ‹‹‹ÿ“““ÿ   ÿ´´´ÿÍÍÍÿ††ÿ))†ÿYYlÿ777ÿÿÿÿDDDÿ:::ÿ:::ÿéééÿRRRÿ:::ÿ:::ÿ:::ÿMMMÿ¿¿¿ÿEEEÿrrrÿ®®®ÿ:::ÿÎÎÎÿ:::ÿ:::ÿÿzzzÿbbbÿ¬¬¬ÿBBBÿÿ“““ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55jÿ›ÿŽÿ„ÿ|ÿvÿrÿoÿmÿmÿlÿkÿ3ˆÿ:®ÐÿD¹ÖÿOÅÞÿ()pR<* 333333 *<R"pFþM‡þUÿ°ÿ»ÿ»ÿºÿºÿ»ÿ½ÿÁÿÇÿ¡ÿMMMÿ555ÿÿÿ,,,ÿRRWÿ""ÿÞÞéÿÛÛÛÿÂÂÂÿ°°°ÿ£££ÿŸŸŸÿ   ÿ¦¦¦ÿµµµÿÈÈÈÿ´´·ÿggŒÿ//ÿccfÿ ÿÿÿÿDDDÿ:::ÿHHHÿâââÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿoooÿ¥¥¥ÿÀÀÀÿ¡¡¡ÿ:::ÿßßßÿ===ÿ:::ÿÿzzzÿ:::ÿ{{{ÿ©©©ÿËËËÿ†††ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55jÿœÿÿ„ÿ}ÿwÿrÿpÿnÿmÿmÿlÿ3ˆÿ:®ÐÿD¹ÖÿMÃÜÿ()pR<* 333333 *<R"pEþM‡þTÿ±ÿ¼ÿ¼ÿ»ÿ¼ÿ¼ÿ¾ÿÂÿÇÿ¢ÿMMMÿ555ÿÿÿÿ@@CÿAAbÿPP«ÿååìÿÞÞÞÿÊÊÊÿ¿¿¿ÿºººÿºººÿÂÂÂÿÍÍÍÿ¼¼Àÿ‘‘ÿ‰ÿ``fÿ444ÿÿÿÿÿDDDÿ:::ÿ???ÿòòòÿ===ÿ:::ÿ:::ÿ:::ÿ:::ÿ†††ÿoooÿ¼¼¼ÿhhhÿ:::ÿáááÿ¥¥¥ÿhhhÿÿzzzÿ???ÿ‡‡‡ÿqqqÿÊÊÊÿOOOÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55jÿœÿÿ…ÿ}ÿxÿsÿpÿoÿnÿmÿmÿ3‰ÿ9¬ÎÿD¹ÖÿMÃÜÿ()pR<* 333333 *<R"pEþL†þTÿ²ÿ½ÿ½ÿ¼ÿ½ÿ¾ÿ¿ÿÃÿÈÿ¢ÿMMMÿ555ÿÿÿÿÿOOSÿ77kÿ;;ŸÿÔÔäÿÛÛâÿÝÝÝÿ×××ÿÔÔÔÿÎÎÐÿ´´»ÿ€€§ÿ!!‰ÿQQiÿKKNÿÿÿÿÿÿDDDÿ:::ÿ:::ÿÂÂÂÿ‰‰‰ÿ<<<ÿ:::ÿaaaÿ:::ÿdddÿ‚‚‚ÿPPPÿ:::ÿ:::ÿhhhÿZZZÿuuuÿÿzzzÿ;;;ÿmmmÿ€€€ÿJJJÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55jÿœÿÿ†ÿ~ÿxÿtÿqÿoÿoÿnÿmÿ2‰ÿ9¬ÎÿB¶ÕÿMÃÜÿ()pR<* 333333 *<R"pEþL†þSŽÿ³ÿ¿ÿ¿ÿ½ÿ¾ÿ¿ÿÁÿÅÿÉÿ£ÿMMMÿ555ÿÿÿÿÿ###ÿHHLÿKKZÿ$$ƒÿ[[®ÿÂÿººÑÿ¦¦Äÿmm­ÿ::™ÿ//zÿ]]aÿDDGÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿHHHÿ±±±ÿÑÑÑÿÅÅÅÿÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿÿzzzÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6=6ÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿ‚ÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55jÿÿÿ‡ÿÿyÿtÿrÿpÿoÿoÿnÿ2‰ÿ7ªÍÿB¶ÕÿKÁÛÿ()pR<* 333333 *<R"pC~þL†þSŽÿ³ÿÀÿÀÿ¿ÿ¿ÿÀÿÂÿÅÿÊÿ£ÿMMMÿ555ÿÿÿÿÿÿÿ777ÿTTUÿQQYÿBBcÿ44rÿ88pÿJJdÿYY]ÿWWZÿ---ÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿBBBÿ???ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ8:8ÿPÿPÿPÿPÿPÿPÿPÿPÿPÿPÿMÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55jÿžÿ‘ÿ‡ÿÿzÿuÿsÿqÿpÿpÿoÿ2Šÿ7ªÍÿ@´ÓÿKÁÛÿ()pR<* 333333 *<R"pC~þJ…þSŽÿ´ÿÁÿÀÿÀÿÁÿÀÿÃÿÆÿËÿ¤ÿMMMÿ555ÿÿÿÿÿÿÿÿÿ***ÿ777ÿCCGÿAACÿ555ÿ(((ÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55jÿžÿ’ÿ‡ÿÿ{ÿvÿsÿrÿqÿpÿpÿ 1Šÿ7ªÍÿ@´ÓÿKÁÛÿ()pR<* 333333 *<R"pB}þJ…þRŒÿ´ÿÂÿÁÿÁÿÂÿÂÿÄÿÇÿÌÿ¥ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55kÿžÿ’ÿˆÿ€ÿ{ÿwÿtÿrÿrÿqÿpÿ 1‹ÿ5¨Ìÿ@´ÓÿI¿Úÿ()pR<* 333333 *<R"pB}þHƒþRŒÿµÿÄÿÂÿÂÿÂÿÃÿÅÿÈÿÍÿ¥ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55kÿŸÿ“ÿˆÿÿ{ÿwÿuÿsÿrÿrÿqÿ 1Šÿ5¨Ìÿ>²ÒÿI¿Úÿ')pR<* 333333 *<R!pB}þHƒþP‹ÿ¶ÿÅÿÄÿÃÿÃÿÄÿÆÿÉÿÎÿ¥ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55kÿŸÿ”ÿ‰ÿÿ|ÿxÿuÿtÿsÿrÿrÿ 1‹ÿ3¦Ëÿ>²ÒÿH½Øÿ')pR<* 333333 *<R!p@{ÿHƒþP‹ÿ·ÿÆÿÅÿÅÿÄÿÅÿÇÿÊÿÏÿ¦ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6>6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55kÿŸÿ“ÿŠÿ‚ÿ|ÿyÿvÿtÿtÿsÿsÿ 1Œÿ3¦Ëÿ>²ÒÿH½Øÿ')pR<* 333333 *<Q"o@{ÿH‚ÿP‹ÿ·ÿÇÿÆÿÆÿÆÿÆÿÈÿËÿÏÿ¦ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ6=6ÿáÿáÿáÿáÿáÿáÿáÿáÿáÿáÿÚÿÿÿÿÿÿÿÿÿÿÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55kÿ ÿ“ÿ‰ÿƒÿ}ÿyÿwÿuÿtÿtÿsÿ 0Œÿ3¦Ëÿ<°ÑÿH½Øÿ')oQ<* 333333 );Q"o?zÿH‚ÿOŠÿ¸ÿÈÿÇÿÇÿÇÿÈÿÈÿËÿÏÿ¦ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDDDÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ>>>ÿ000ÿÿ;;;ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿ:::ÿDDDÿ!!!ÿÿ$$$ÿMMMÿ55jÿŸÿ”ÿŠÿ„ÿ~ÿzÿwÿvÿuÿtÿtÿ 0Œÿ1£Éÿ<°ÑÿF»×ÿ')oQ;) 333333 );P"n?zÿFÿOŠÿ¹ÿÊÿÈÿÈÿÈÿÈÿÊÿÌÿÏÿ¦ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿ@@@ÿAAAÿ)))ÿÿ000ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ<<<ÿ@@@ÿÿÿ$$$ÿMMMÿ55jÿÿ“ÿŠÿƒÿÿ{ÿxÿwÿvÿuÿuÿ /Œÿ1£Éÿ:®ÐÿF»×ÿ')nP;) 333333(:O"n?zÿFÿMˆÿ¹ÿËÿÊÿÉÿÉÿÉÿÊÿÍÿÐÿ¦ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$$$ÿMMMÿ55iÿœÿ‘ÿ‰ÿƒÿ~ÿ|ÿyÿwÿwÿvÿuÿ /ÿ/¡Èÿ:®ÐÿD¹Öÿ')nO:(333333'8M!l=yþFþMˆÿºÿÌÿËÿËÿÊÿÊÿËÿÍÿÐÿ¥ÿMMMÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$$$ÿMMMÿ55gÿšÿÿˆÿƒÿÿ|ÿzÿxÿwÿwÿvÿ /ÿ/¡Èÿ:®ÐÿD¹Öÿ'(lM8'333 %7Le=xýEþMˆÿ¸ÿÍÿÌÿÌÿËÿËÿËÿÌÿÏÿ¥ÿMMMÿAAAÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ444ÿ888ÿMMMÿ55fÿ•ÿŽÿ‡ÿ‚ÿÿ|ÿzÿyÿxÿwÿwÿ 5ÿ/¡Èÿ9¬ÎÿD¸ÕýeL7%  """#4I`:rñEþL‡ÿ&³ÿÏÿÍÿÍÿÌÿÌÿÌÿÌÿÎÿ£ÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿMMMÿ55eÿ’ÿ‹ÿ†ÿ‚ÿÿ}ÿ{ÿyÿyÿxÿwÿC˜ÿ-ŸÇÿ9¬Îÿ@®Ëñ`I4#""" $$$ "1E[8mâC~þL‡ÿ1©ÿÐÿÏÿÍÿÍÿÌÿÌÿÍÿÎÿ ¿ÿ£ÿ¥ÿ¥ÿ¦ÿ§ÿ§ÿ§ÿ§ÿ¦ÿ¦ÿ¦ÿ¦ÿ¥ÿ¥ÿ¤ÿ¤ÿ£ÿ£ÿ£ÿ¡ÿ¡ÿ¡ÿ¡ÿ ÿŸÿŸÿŸÿžÿÿÿÿœÿ›ÿ›ÿ›ÿ›ÿ›ÿšÿšÿšÿ™ÿ™ÿ™ÿ™ÿ˜ÿ˜ÿ˜ÿ—ÿ—ÿ—ÿ—ÿ—ÿ–ÿ•ÿ•ÿ•ÿ•ÿ•ÿ•ÿ”ÿ”ÿ”ÿ”ÿ”ÿ“ÿ“ÿ“ÿ’ÿ’ÿ’ÿ’ÿ‘ÿ‘ÿÿÿŽÿÿŠÿˆÿ„ÿ€ÿƒÿÿ‰ÿ„ÿ‚ÿÿ~ÿ|ÿzÿzÿyÿxÿV¢ÿ-ŸÇÿ7ªÍÿ>¥Áâ[E1" $$$$$$ .@V4bÅC~þL‡ÿJ–ÿÑÿÐÿÏÿÎÿÍÿÍÿÍÿÍÿÎÿÏÿÏÿÐÿÑÿÑÿÑÿÑÿÑÿÐÿÏÿÎÿÍÿÍÿÌÿËÿÊÿÉÿÈÿÈÿÇÿÆÿÅÿÄÿÃÿÃÿÂÿÁÿÁÿ¿ÿ¾ÿ¾ÿ½ÿ¼ÿ¼ÿ»ÿºÿ¹ÿ¹ÿ¹ÿ¸ÿ¸ÿ·ÿ·ÿ·ÿ¶ÿµÿµÿ´ÿ´ÿ´ÿ³ÿ²ÿ²ÿ±ÿ±ÿ±ÿ°ÿ¯ÿ¯ÿ¯ÿ®ÿ®ÿ­ÿ¬ÿ¬ÿ¬ÿ«ÿ«ÿªÿªÿªÿ©ÿ¨ÿ¨ÿ¦ÿ¥ÿ£ÿ¡ÿÿšÿ•ÿÿ‹ÿ‡ÿ„ÿÿÿ}ÿ}ÿ{ÿzÿzÿyÿ‚·ÿ-ŸÇÿ7ªÍÿ8’ªÅV@. $$$+++ *;O *H“C~þJ…þSŽÿÃÿÑÿÐÿÏÿÎÿÍÿÍÿÍÿÍÿÎÿÎÿÍÿÍÿÍÿÍÿÍÿÌÿÌÿËÿÉÿÈÿÈÿÇÿÆÿÄÿÄÿÃÿÂÿÁÿÀÿ¿ÿ¿ÿ½ÿ¼ÿ»ÿ»ÿºÿ¹ÿ·ÿ·ÿ¶ÿµÿ´ÿ³ÿ³ÿ²ÿ±ÿ±ÿ°ÿ¯ÿ¯ÿ¯ÿ®ÿ®ÿ­ÿ¬ÿ¬ÿ«ÿ«ÿ«ÿªÿ©ÿ©ÿ¨ÿ§ÿ§ÿ§ÿ¦ÿ¦ÿ¥ÿ¤ÿ¤ÿ£ÿ£ÿ£ÿ¢ÿ¡ÿ¡ÿ ÿŸÿŸÿŸÿžÿÿœÿšÿ˜ÿ•ÿ’ÿÿŒÿˆÿ…ÿƒÿÿ€ÿ~ÿ|ÿ|ÿ{ÿzÿ!‰ÿ"’¿ÿ+Åÿ7ªÍÿ-gv“O;* +++333 %5H!aAz÷K…þRŒÿKŸÿÑÿÑÿÐÿÏÿÏÿÍÿÍÿÍÿÍÿÍÿÌÿÌÿËÿÊÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÃÿÂÿÁÿÀÿ¿ÿ¾ÿ½ÿ¼ÿ»ÿºÿ¹ÿ¸ÿ·ÿ¶ÿµÿ´ÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿ«ÿ«ÿªÿ©ÿ©ÿ¨ÿ§ÿ§ÿ¦ÿ¦ÿ¥ÿ¤ÿ¤ÿ¤ÿ£ÿ¢ÿ¢ÿ¡ÿ ÿ ÿŸÿžÿžÿÿÿÿœÿ›ÿ›ÿšÿ™ÿ™ÿ˜ÿ—ÿ—ÿ—ÿ•ÿ•ÿ“ÿ’ÿÿŽÿ‹ÿ‰ÿ†ÿ„ÿ‚ÿÿÿÿ}ÿ|ÿ|ÿ|ÿp­ÿ ¾ÿ+Åÿ4¥Èù$&bH5% 333   /@T 5\®I‚þR‹þX“ÿ3µÿÒÿÑÿÐÿÐÿÏÿÍÿÍÿÌÿÌÿËÿËÿÊÿÉÿÇÿÇÿÆÿÅÿÄÿÃÿÁÿÀÿ¿ÿ¾ÿ¾ÿ½ÿ¼ÿºÿ¹ÿ¸ÿ·ÿ¶ÿµÿ´ÿ³ÿ²ÿ±ÿ°ÿ¯ÿ­ÿ¬ÿ«ÿªÿ©ÿ¨ÿ§ÿ§ÿ¦ÿ¦ÿ¥ÿ¤ÿ¤ÿ£ÿ¢ÿ¢ÿ¡ÿ¡ÿ ÿŸÿŸÿžÿÿœÿœÿ›ÿ›ÿ›ÿšÿ™ÿ™ÿ˜ÿ—ÿ—ÿ–ÿ•ÿ•ÿ”ÿ“ÿ“ÿ’ÿ‘ÿ‘ÿÿÿÿÿ‹ÿŠÿˆÿ†ÿ…ÿƒÿÿÿ€ÿÿ~ÿ}ÿ|ÿA˜ÿ„¶ÿ ¾ÿ*›Äÿ-}–²T@/  ÿÿÿ+++ '8J_CvßQ‰ýX“ÿ_›ÿÉÿÒÿÑÿÐÿÏÿÏÿÎÿÌÿËÿËÿÊÿÉÿÈÿÈÿÇÿÅÿÄÿÃÿÂÿÁÿ¿ÿ¾ÿ½ÿ¼ÿ»ÿºÿ¹ÿ·ÿ¶ÿµÿ´ÿ³ÿ²ÿ±ÿ±ÿ¯ÿ®ÿ­ÿ¬ÿ«ÿ©ÿ¨ÿ§ÿ¦ÿ¥ÿ¤ÿ£ÿ£ÿ¢ÿ¡ÿ ÿ ÿŸÿžÿžÿÿÿœÿ›ÿ›ÿ›ÿšÿšÿ™ÿ˜ÿ˜ÿ—ÿ–ÿ•ÿ•ÿ”ÿ“ÿ“ÿ’ÿ‘ÿ‘ÿÿÿÿŽÿÿÿŒÿ‹ÿŠÿ‰ÿ‡ÿ‡ÿ…ÿ„ÿƒÿ‚ÿ€ÿ€ÿÿ~ÿ~ÿ†ÿ x¯ÿ„¶ÿ޽ÿ(޲ã aJ8( +++ÿÿÿÿÿÿ!/?R(:}P‡ùXý`šÿY¨ÿÊÿÒÿÑÿÐÿÏÿÎÿÎÿÍÿËÿÊÿÉÿÈÿÇÿÆÿÅÿÃÿÂÿÁÿÁÿÀÿ¾ÿ½ÿ¼ÿ»ÿºÿ¹ÿ¸ÿ·ÿµÿ´ÿ³ÿ²ÿ±ÿ°ÿ¯ÿ­ÿ¬ÿ«ÿªÿ©ÿ¨ÿ¦ÿ¥ÿ¤ÿ£ÿ¢ÿ¡ÿ¡ÿ ÿŸÿŸÿžÿÿÿœÿ›ÿ›ÿšÿ™ÿ™ÿ˜ÿ—ÿ—ÿ—ÿ–ÿ–ÿ•ÿ”ÿ”ÿ“ÿ’ÿ‘ÿ‘ÿÿÿÿŽÿÿÿ‹ÿŠÿŠÿ‰ÿˆÿˆÿ‡ÿ†ÿ…ÿ„ÿ‚ÿ‚ÿÿ€ÿ€ÿÿ‡ÿ_£ÿ w¯ÿ„¶ÿŒ»ûDR€R?/!ÿÿÿÿÿÿ$$$ &4FX >d­Xüa˜ý f¡ÿ l¨ÿ?ÁÿÑÿÑÿÐÿÏÿÎÿÍÿÌÿÊÿÉÿÈÿÇÿÆÿÅÿÄÿÂÿÁÿÀÿÀÿ¿ÿ¾ÿ¼ÿ»ÿºÿ¹ÿ¸ÿ·ÿ¶ÿµÿ³ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ¬ÿ«ÿªÿ©ÿ¨ÿ§ÿ¦ÿ¤ÿ£ÿ¢ÿ¡ÿ ÿ ÿŸÿžÿžÿÿœÿœÿ›ÿšÿšÿ™ÿ˜ÿ˜ÿ—ÿ–ÿ–ÿ•ÿ”ÿ”ÿ“ÿ’ÿ’ÿ‘ÿÿÿÿŽÿŽÿÿŒÿ‹ÿ‹ÿŠÿ‰ÿ‰ÿˆÿ‡ÿ‡ÿ…ÿ…ÿ„ÿƒÿƒÿ‚ÿÿ‚ÿ7”ÿj§ÿl¨ÿ w¯ÿ‚µÿh‡®XF5& $$$ÿÿÿÿÿÿÿÿÿ +9I\ P€Õ_–ü gžü m§þ s¯ÿ g»ÿÍÿÑÿÐÿÏÿÎÿÍÿÌÿËÿÉÿÈÿÇÿÆÿÅÿÄÿÂÿÁÿÀÿ¿ÿ¾ÿ½ÿ¼ÿºÿ¹ÿ¸ÿ·ÿ¶ÿµÿ´ÿ²ÿ±ÿ°ÿ¯ÿ®ÿ­ÿ«ÿªÿ©ÿ¨ÿ§ÿ¦ÿ¥ÿ£ÿ¢ÿ¡ÿ ÿŸÿŸÿžÿÿÿœÿ›ÿ›ÿšÿ™ÿ™ÿ˜ÿ—ÿ—ÿ–ÿ•ÿ•ÿ”ÿ“ÿ“ÿ’ÿ‘ÿ‘ÿÿÿÿŽÿÿÿŒÿ‹ÿ‹ÿŠÿ‰ÿ‰ÿˆÿ‡ÿ†ÿ†ÿ…ÿ…ÿ„ÿƒÿƒÿ‰ÿVŸÿj¦ÿk§ÿl¨ÿu­ÿt¡Ø\J9+ ÿÿÿÿÿÿÿÿÿÿÿÿ+++ ".;K\Hl­ f›ø o£û u¬ý |¶ÿƒ½ÿxÅÿ UÍÿCÐÿ1Íÿ&Ëÿ$Èÿ"Åÿ ÃÿÀÿ½ÿºÿ¸ÿµÿ²ÿ°ÿ±ÿ³ÿ´ÿµÿ·ÿ!·ÿ#¹ÿ%ºÿ(»ÿ*¼ÿ,½ÿ.½ÿ /½ÿ 1¾ÿ3½ÿ5½ÿ6½ÿ8½ÿ:½ÿ<½ÿ>½ÿ@½ÿB½ÿ C½ÿ"E½ÿ$G½ÿ"D»ÿ@·ÿ;³ÿ7°ÿ3¬ÿ/©ÿ+¦ÿ &¢ÿ " ÿœÿ™ÿ˜ÿ™ÿ›ÿ "ÿ &žÿ* ÿ-£ÿ1¤ÿ4¦ÿ8¨ÿ;ªÿ?¬ÿ!C®ÿ#F¯ÿ"E®ÿ B¬ÿ>©ÿ;¦ÿ7¤ÿ4¡ÿ1Ÿÿ-ÿ *šÿ '—ÿ$•ÿ ’ÿÿŽÿŽÿÿŽÿÿ!Žÿ-’ÿ=–ÿZŸÿh¤ÿi¥ÿj¦ÿk§ÿk¦ûW|®\K<." +++ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$$$ #/<JX3D e•ß vªú}±û„»ý‰ÂþÊÿ•ÏÿÉÿˆÂÿ‚¼ÿ zµÿ t®ÿ l§ÿf¡ÿ_›ÿX“ÿQŒÿI„ÿF‚ÿOŠÿVÿ^˜ÿežÿ n¦ÿ u¬ÿ |³ÿ„»ÿŒÁÿ”Éÿ›Ïÿ¢Óÿ!¨Õÿ)¯Ùÿ0µÛÿ6ºÞÿ>ÁáÿEÇäÿLÎçÿSÔêÿ[Ûíÿaáïÿièóÿpíõÿvóøÿ~úûÿyóöÿmâëÿbÔâÿVÄ×ÿL¶Îÿ?¥Ãÿ5—ºÿ+бÿy§ÿkžÿ[“ÿSŽÿ a—ÿlžÿz§ÿ(†¯ÿ2”¸ÿ;ŸÀÿD«ÇÿN¹ÐÿWÄØÿaÒáÿjÞèÿtìòÿ}øùÿyó÷ÿpèðÿgÞéÿ]ÑáÿTÆÛÿI¹Óÿ@®Ìÿ6¡Äÿ-—¾ÿ"жÿ¯ÿt¨ÿg¡ÿ`œÿaÿbžÿcŸÿd ÿe¡ÿf¢ÿg£ÿg£ÿh¤ÿi¥ÿj¦ÿc˜ã5I€XJ</# ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ  #.9FR`Y}°|­ò„¶ù½ø“Äù™Êú’ÅûŒÀü„¸ü }³ü u«ý o¦ýfŸþ`™þX’þRŒÿJ†ÿF‚ÿMˆÿVÿ]—ÿežÿ l¥ÿ u¬ÿ |³ÿƒ¹ÿŒÁÿ“Çÿ›Ïÿ¡Òÿ!¨Õÿ(®Øÿ0µÛÿ6ºÞÿ=ÀáÿEÇäÿKÍæÿSÔêÿYÚìÿaáïÿhæòÿpíõÿvóøÿ~úûÿyóöÿoåíÿbÔâÿXÆÙÿL¶ÎÿA¨Åÿ5—ºÿ+бÿy§ÿkžÿ ]•ÿSŽÿ ^•ÿlžÿx¦ÿ(†¯ÿ1‘·ÿ;ŸÀÿD«ÇÿL·ÏÿWÄØÿ_ÐßÿjÞèÿrêðÿ}øùÿ{õøÿpèðÿgÞéÿ]ÑáÿTÆÛÿK»Ôÿ@®Ìÿ7¤Æÿ-—¾ÿ$Œ·ÿ¯ÿt¨ÿg¡ÿ`œÿaÿbžÿcŸÿd ÿe¡ÿf¢ÿf¢ÿg£ÿh¤ÿg¢ùR|²aRF9.# ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ+++ "+5?JT #bNgr˜Á‡²Ü”Áé”ÃöŽ¿ù†¸ù ±ú x¬û p¥ûiŸü`™ýY’ýRŒþJ†ÿEÿMˆÿTÿ]—ÿdÿ l¥ÿ s«ÿ |³ÿƒ¹ÿŒÁÿ“ÇÿšÎÿ¡Òÿ §Õÿ(®Øÿ.´Ûÿ6ºÞÿ=ÀáÿEÇäÿKÍæÿRÓéÿYÚìÿ`àïÿhæòÿnìõÿvóøÿ}ùûÿyóöÿoåíÿd×äÿXÆÙÿN¹ÐÿA¨Åÿ7š¼ÿ+бÿ!|©ÿkžÿ ]•ÿSŽÿ ^•ÿjÿx¦ÿ&ƒ®ÿ1‘·ÿ9¾ÿD«ÇÿL·ÏÿWÄØÿ_ÐßÿhÜçÿrêðÿ{õøÿ{õøÿrëñÿgÞéÿ^ÓãÿTÆÛÿK»ÔÿB±Îÿ7¤Æÿ/™¿ÿ$Œ·ÿ°ÿt¨ÿj¢ÿ`œÿaÿbžÿcŸÿd ÿe ýašñ^”âV„Å A_“#bTJ?5+" +++ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ+++ &/7@HOV[`e"&k!$m $n"%o!%o!$o $o#p#p#p"p#p#p $p $p!%p!%p"&p"&p#'p$'p$(p%(p%(p%)p&)p&)p')p')p(*p(*p)*p )*p )*p!*+p!*+p"++p"++p!)*p ()p')p&(p%'p$'p#&p"%p!%p $p#p $p!$p"%p"&p#&p$'p%'p&(p'(p ()p!)*p!**p"++p"++p!**p!)*p ()p')p&(p&(p%'p$'p#&p"&p"%o!%o $o $o#n#m $ke`[VOH@8/& +++ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ+++  !(/5;@EILNOPQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRQPONLIE@;5/(! +++ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ333$$$   %*.1479:;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<;:9741.*%   333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ+++ """"#%'()))**********************************************************************)))('%#"""" +++ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ333$$$     $$$333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ333+++            +++333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ+++$$$$$$                                                                              $$$$$$+++ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿ€ÿÿÿÿÿÿÿü?ÿÿøÿÿðÿÿðÿÿàÿÿÀÿÿÀÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿÀÿÿÀÿÿàÿÿðÿÿðÿÿøÿÿü?ÿÿÿÿÿÿ€ÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‰PNG  IHDR\r¨f IDATxœì½y˜Õy/ü;çTu÷t÷tf‘f$4hZ†Åh¡°ˆ7ø0ÄvŒ·ÃãÄ|ã¬6¶ÉwCˆc;ñMr½'¶¯ðrmò9Ø~pXŒE$#¬H„ÐHÖÑ2K¯Uuê|tšêêªêêéni$õïyzêÔ©sNª©ß{Þ÷=B`&BêÉÞ°Š´Ð‚?¦M1ÃGÎt}B¾R·@ §µ&0í™§]L“ð~yZ„oa&ÀD^ñ3J œ6@|w|¨ó•+WÚ…B¡%Z8íˆÅb6y6oÞ,ƒnBÕz^Š>.ÜAUUÓ)`ûöíRTu €ò{?›ÍgkoiGG1 ÜsjBÇ çœ¥–Þ"™àÖªi-´Îßy /ã …‚)!D0ÆLI|EQ̱±1Á3¥©àÖ AC…@]  ùËlüb±H …‚M|Î95M“¤R)j•¤·Z}ÚÖÖFLÓ”B€:I‰Dì°¬¿ƒì¤o ‚¦7ñ-”‘ߢ€ „MÓ€"IoæóyA)•„7 !BQsbbÂŽ“‚ ‹ ‡ià$~Ã…À´€‹ü^}â´ñ5M£’øœsšN§e‹O9ç4‹QKP!5M“F£Q§°¢ªªS”Ý?€ð-AÐBx’ÂÙâ;Î!Dèºî$¿lý¥Ô,‹‚RjBLJ©É3óù¼©(Š)…Âää¤i “1&"‘ˆéòjÓÓaÉ/Õ}iãsΩlñ Ã`¦i’¶¶6jBPÎ9‹D"eB@UUjßÖ¬zEQœ„w“¿‘CŒ[8÷Qžj?†!œÂÀ&!ÄÔuÝt’_Ó4“1Æåy±XäRPU•OLL˜Ò4>‚D"Ñ4!P³ ¿më;[}]שñ£Ñ(ãœ3‹èLUUfš&5M“)ŠbÇ[Dw  €0ƨƒøÎçðªŸ'Z¦A €¯ªïD…#Nªþ°HÏ97­°M~Ã0¤ À­sN)å”RS×u.ãc\ EQ¸4 ,¡`:µ—o n!P“K~iëëºNÛÛÛ™$¾Tõ­°"IÏ9W,Ò3‹ô”1fŸ[d§lM€1fkÎ:X/!¬ÐB aPÑúÃA~‚s.Õ~€I19ç&¥”0MÓ4¬VŸB¸aœ1fHaÀ3Eá…BÁdŒ™RLNNrUUM§o ‘B ´¨…üÎV_Ó4&ÉoµúŠªªŒsÎ,â+¦i*¦iRƘbš¦"„`”R&„`Œ1fš&ƒE~ÆqjVw\£Š+-e¾×Jç ”1+lšzAƒ^Ð`hôBZ^× h z^ƒVÐÀ5Z¡èJ뺖·®éô¼Â(˜Ê FU(ÑÔ¨ ¦P(Qª5>0­û94צ£/êhË/ºl^þöL‘zùPü?ÿc[ê!DÑÒ‚‹(ñ°€Zšr‘RJ(¥„1F¤& ëº®iš"…€5øÈ,‹R8Éo‡ƒ„@-&€­ú;ɯë:“j¿$¿eç+”ÒˆaBˆ›øöQ½v‰¾ü†åÚm)ÑϘÅeK– À²¶@€P \Á¼¤â©™€T„ÀKƒJ_·DLý|ºŒ¬îkþùjÑ  ®’ÆU ÿ´A¤w“!P@ S÷¡ZKPK_‹€p·Ð‚Oýk!}ɇ.­ÓYº65ç^½(s×ess¿·~oòߟݕ|CÉ (iÔ"¬ÔpΡª*t]× Ã`NMS¦€³V¡LOà£ú;=þpŽìÓ4ÍióÛäçœG !*!$fF„RE‰ø1Jid¨¯8ð¶‹‹·Ïé0—)L:ŦܬT€(‚PÕD Œ”H à©©(¸),BO©Dª–Ðëgº„cÀ7ìÁUXNê~е ­%HÝw“*ô®´Á¤÷κLÓÿ»•/Hݯk}ê´ÇÌùï\>ñÇW,Èí|jgûO¶ŒÄß@‰‹ 3 ƒÊq.œsÂP&©TJd2Á†aˆ¡¡!b™UMj@Ù+Ý}r„_2™dVWõ!„µÂ1”ÈBÄÞ»"ûöKçi·ªBI‰²%i%@ªrAŒ–ÿ#(œÿà ñ&\ÿ[çó»ÿïîÉŠ8¼æ]~Ím'×à(3H-åøÛÐnµüµhB)H@0ÿ´n- ô,Þ÷­GÝ›¯ÑèNK?°úÔç._xâ;/ÌúJ<õ$¾#,"‘ˆÐu]BX2™D6›•¯i™Î9P ¨èôkýW®\IÆÇÇ©5Á‡†Á‰Óu]QUÕvôYj¿$Ì11BH4¦ˆö­žüp'_ÍXÉÓÎXÉ{®B#%çvÉkN­xË+ÏTÅÌSæIæ˜ 3/`šÜ,‘˜›¥žÓD©wÀ,Ÿs€›¥î"6í´¥ë¦Õ=D¡%âSZúH%+ÅÛ×e%ÁD˜•žëZ)/!(…KAa¥#(± ”ÎkŒYÝ` ¥0¡´g§eV« ×5PÓà0tnà† ®0t\7`ryέs>6L†®sp]çf)¬¥°a€)¥eÄ 30U¥Ô:§Œ–®©¬td¥kSy©—XaæÎ«0˜Ü„É9¸ÁaFé¨spnÀ4øÔuC˜Ü ›¼tÍÎgðÒ7`¸ò¼tnšÞœ”© °8À€’ˆ:%«½,9Ï#ŽdãÿýõçÒßÉɤ¢ À+!Šò§(JÑ4Ms®+Š¢ëºn¨ªjd³Y®( F£<‹‰t:mºº}»ƒ4€2AP(ˆaN¿öövªi‹D"ÌêêS ÃÝ|^äõµ½ï¾tòcI1AhÉȧT1A&\·Ȥ€ºKƒòšú¦QC™ë邎µÅ ×±¶²Lù/{‘#(ivË@pÎ…išBQ”2M ½½]d2¡ëº°†KU8Ý(ÓüZÿ¡¡!Z,I.—£º®ÓD"¡hš¦D"¦išÊ‹†¡Jß²ùc„6Xä_Ú]\üŽ¥ÙOÄc"íì70BU Rê'/µ˜*’¯ˆ¿¤C6¦ê òØR…¹Vk™3‰üAqh…C‡Ý ªš—Ñ9@û2 µ¤tî§(‘”HºPÆ¿ÿBì+/î&¯È(!òŠ¢„!„&„((Š¢sεH$¢kšÆ#‘ˆ‘Íf 9yÈ)hbêßmWË©øy]ÊôúËùü†aPëÈ8çrh¯JQMÓŒpÎ#”Ò(!$J‰õ$ŒÙ7-ÎÜa"-š„ 0âjò“¯˜ý¯Y¤~š‡²ÿÜ%¿û¿â×Ìú¡®û½Ÿ0ä¯È+€ÂàØsÀð€ì>TE[”¤?|ÿÄÀlÒ#µhJi”s1M3B)UcªZ/{ß$'9çrlY¹r¥_W¾ÀÎ)X^Ã0ʼþ¦iÊ<äØ~UVP:þ`9ü"L$o]2qOL³`õ¸BÍ)'9¡@䤉yßÏ£ûÇy(£fÅ‹õ{ÑÍ$¿× ñ‹ózÓ~ÇZó5²L&gy¸žgñË뎫•ü^iäQ; ~8ðÿÚ©ò´îŽxŒÎúä­ä¾D IX<²Óˆl`9çªÅ=EΰM¥RrQb†\bßùH°ïìPÿ+¾Ã0ÊZ9½WÎ곜ŠìïwØm}¨=ÊÁrâZ-?u:§“{9ü èA^WK'ÏÃ5 ¹Î¤öÚt´œ%ázZã 2½òz }/¡àŒ¯¥Lù,ùÃÀþÇì~×½\B ³|æ}ê]°Lh'·œZ€å{céË´Wuí°ÓÔ2ÈÊ•+Q,í…;­e¼˜œÖë˜ÕǬ™}ªišQù{ëÀÄÛ{Û5΂©p  ç%óŸ(€hÞ7÷ÑùRýô›zÈt­^¢ºëé®{½ZA˜ô3¡õ®µ5ߨ2á 8Òø‘ß65àÀ/€“/{*˦sÈê?{oìÿqðJòL±&ÕQιF™a,NÛkkZf€×ãÙ4¤ç_®Þ+Wíåœ3Ó4çÜžÅg ø‰Èã…ÅE‹gn/»™uúçý—†Þ  j'P˜–Îy K ÷5¯¸é5¨~îãt…SPšAÔzˬ…äî2¦[&âý˜â,Óýþ½AÕ°Ž®ެsÜ£büÅê¥Ê­W_ª:¹EQåz‹ƒÌâ¤[ pšž(­œQ©þÀ^»ŸÈÕ{­Õz©‚ªªJ­Å<ìÖߪ`@tÕìÌïËrhégW‚R‚9Û t¿j”½¿;,ìçqœNë^¨A÷ó»”¾ÂÉ]ÏzTnw=)8üÊt§õ‹¯Gp„ Sx¯Æ¤Apbp|ËTLÅ<€üÁï¶½S~Õ¡0EQ¹nf[[5M“J-@:=^…Íy/ €¥QNçŸÓóïhýJ©ü©BÕ4MõâÎìPG_î|k^ uˆcþF½ìeøýÈë|"¯;]}xÔulÄ}¦#4üêã>Ê0 vÆ9ó»ï 0âýòºï¦Ž~õôJ3Ý2Ýÿ_Ç5¯ç¼¿Y7¼ÁáõozϬ$”¢·‹.ýýëã—š¦© !"”Ò¥”¹µg€\’Ï0 È=9\Õ¶ŸÏ öT_]×íe¹­M;¨ªªLQ¹ˆ§³õB"—tå~¿Tyˆ’J£åÚ&ŸÓAÌꪬ3ÎOp>ÕtHDw\Ø2ÝÇ0D­¥.~÷©Fþ øZHUk^ùc>i§®—äaÃðx÷Aÿ{÷w*¯™û~®#Ü{2¥·\ø}F‰œ[#WÓRä"ºªª2K °—Ò·L©T_>W „¤½½Ý¹v?³nÀcŠ5ö_B¨BeuO抄ÂØ7 å7|A‡RôaG<â$‚$kò{}8aIìu¿0ä +œª „ ûx=K½$÷#C˜2%ÙMøZÂî:ø…ýÊa>ñòÜùƒãè‡jæ/ ìÿeÁŽww vu(ó?zû¬«,-@¥”ªÿäâ¹”sÎd@{{»-‚êE]ö?Êûþ]?j­ÛϬŸb­â«B‘Eí¹·;»øˆãÝt4‘>bÖD~gíÝç^$s_w“¨ü§…%—_K6½_š †)ËïW+ù«ÉI /"M‡ða‰Zk8ì½”€¼Î<Îrà »æ>÷3 Üá‰ý§vkSå¸ü×­ˆ¿ÃÒT!„âä išöžN΀à (£ ±Hë Ù÷/Õÿxq•¦>ûŸÎ£g( /¤SJïÊems7ïÈ¿i-«XKˆÙûjHg a¤££Ã^²>¯ÒKØžCÓ4I:&…BRJ©iš%­Á¹\7 !”%éÜåS¥”·þ½ûL´ ûƒ>P?ò»m~ù תÜyÏj‚Á«Îî2üž+ˆ”nò×RV-÷sãLo&Ô!(,'—¹INa¯3cåBÁë{uƇ Ù£ŽnÉcÞU¥õÝ„Þú;é·ü÷k¹(qWB0ׯ9ö¸§ ‡;öà!V®\‰ññq˜®íº¥ú¯i¥%E®Ò«PJJOT{‹ó8§ÍÙ;5¼·ä/»G:gÚ ÂºËô#zP &×½k!¿_ý¼ÒøÝÓ/mØôõä=÷ª5¯›òçœIãÔ"9JÂBÎú”æ[ƒp–WKmÊaÞU)ûÜ)– D/%„¯E €2³Ø9øÇ*R¨ªJu]§ì-¼„¬]1RI•Ú‹gYy@ÕR£f¨+ ù«Ùó^"’W\µ–»Þ|µ–æZµðÙ˜¾Ùup ]/ [r 9éyêšÔ¤ ey™ƒÎó -`bXƒ‘`Ñ©x)æt©‹æ÷FÚGŽhyJ)%„0Ã0¢ªªÜW“!lžäª œÇ\âR…*wæ¥.•ƒ !Ø’TîRb™S”L­`]‡KKuÕJˆjä÷sÂTw;üä·ÉG©˜ G^÷}Ýß éˆw ¯úÈãè«9,¸¦³,Ô®æEÂâž$>¦xYÖ`Ïš5 “““¶#ðúë¯Ç¯ýk»ÌÀ5¥ ÑÖÖF4M#*„€µuP3íUYH«œÞë%ªµøë/ÆÞîîªD—לÿ¿§Â䫵왖¾å4ªÍ(3¬€ðû^åo`ϤOœ0% €ròËóZÈ'Þ( ðšL°´µz03M“:„€MüX,fã—yÂm” €ÉÉI»À©:Xa"oKXu2,BEºbU\J@9 jµ©²~êþ‘t¯÷ô¸Ÿ¡…Îæ8PÖ%…€³(×vÃv êY¦.À"•=É6–†5l1F8çe\m£“Ë“““eJ·‹²%H©!½ˆB‰DœZ7qÙT-irX‘}ÃhAøJÒjqnÐB 3 ÎÁBòÜÝxùµüaÂ…q§±1…DBI¹í}8¸‰DlÞ:¹ì÷ žèèè(ëBUUísLù¢Ra÷[85XÑÿE¸ãªu÷µÐÂL‚´…Gï%Pc¸8éØ×Ρ´ÅhJÞVÚÿ– €ÅQùƒôåù=C…ÀÑ]H$Òv B¢( qØIJÿU…¡Òe ’ž6·dt¾·—ßý/½ôRÍû¸µÐÂtÑÙÙ‰ .¸À>w7vw:Ôà.º4)F"]jôĘž%¥Qy±6ÿ°5D"ao"Tr[>C¿8çnû_nªQfÈpLAÄ]°ÔT½ººï~p§€ãðk¡…3ÛŽÊ^)žNË/¡eyŤ y‹1SZ€Û‰ÄÁ=g£\Êïà®ýOä3Øprä$?*Ÿ×ªUå‚Èï6ÜB â-´0Cà&€ó;­—ü÷¥°¶º”꿼ää©S H¸9îëtÂUT17/oúËØòW;¶ÐÂL…ÓçîÆÊ-j e÷ªØFÞñ•[üy‘ß ÓÙ¼ì&RñÛÿ±ZËï×âŸë&@WW¥–×?³‘ÍfÛUR©TàÆ¥3™Lœóªéü|TõÚÿ&u¹pªÿî[{¾t¯iÁ^½¶Íà%EäM…$èŸë¼TKËïXáŒÎ-°lÙ² œ­PÅbÛ¶m+‹_µjÆÇÇÏP­¦D"W_}'Ož Lçeÿ»AP>"°Ú@ ŠÞ÷ŽÒþ‹‹žœ”öàÛU[JHÖÇñ¥åõwúüúüýZ~§@8Á9ÇØØØ™®FC‰DF+â …NXCeÏ&¸Õé ¸aîk^ä÷ëtßÕæ…[ý/]¬&{lq¹ªRØ ZA­ƒ€$¼âZhálA-$÷‹÷õ³·ùC¬„ô8m}Ôª‰“ê}ÿ^6¿Û‘ÒÂÙ S1±émj|Á“@ü]!÷ß… "•JUOh!è{.ùý¾õ Ò{³°b p5L× U&„Ä©î{I¨jN@g:·@8—lÿó&LðUÕj5c˜œœlXq^#å‚àçÕ—pwq;ó…"¿ÇL@;­«gÓ¤I½&¶ïB@¸~@¥@pÇù¥i¡…™ ·ÃºɃÈhÿ—ߦ®ö±¡>6·ùOIu‚W»æ'-[háLÃËé'áõ­†A=UBÍh¸“Ýk$ 0=ò·L€f2ê!y-a7)SRC‰°šcÐ/} -Ì4b°Oµ°}¯·üM)Õo>€<†Q÷Ýñ-´0ÓÐlò»õ¸g6 +Ñk& Dò;ãÜ×[ha&£™‚Àg&`ÃÐX' {¾‚k"PXS È›7ãÈü°y3f8€ãK–`tùr¤Ói¬]»[¶liØW\qxà$ üö·¿Åúõë‘N§±dÉ<üðÃøÖ·¾…ï|ç; ¹×é€ XroxšVZ C~¯o>LÞÓe 4åU¹gÊc-N@wÞé⢋.²É?ûÀ,ܾD\xûíXûùσ´µÙDçœCÆ!öRWÅbñK.AÿÒ¥8ñÌ38öè£èyí5ÄOžÄÁ«®ÅpÅW`Æ Èf³uÔèîîÆßýÝßáðáøï¾ûpàÀ²ëW_}5êºG ÍA=$ål‚h˜ðš (á×â;š¸Òº…Ãt°`Átuu‚ù»wcîo ÖÑk¾øE Ür t]G¡P@¡P°…€išö’P”R(Š‚žž‹E>îù›˜˜ÀÄÄ„öŠ1"•Bû}÷!úö·#29‰ù6€d2‰+VL£¶SX»v-^~ùeìÚµ+Tú{ゥT [¶lÁÖ­[±xñbüó?ÿ3ÞñŽwT”ûŽw¼_ùÊWÐÓÓƒ­[·bbb³Ìîîn|ìcC.—Ãúõë122‚k®¹ßûÞ÷l?J Skï×J~/4Z 4ÕZ*í_PB­&€WÚ°‚€‚E‹‚ÔÉ“ؾj"ßû×E¤« ù|ãããÈår( (‹Ð4­Ì (Õ¿¤¨ªŠh4ŠX,†¾¾>$“Iìxí5Ðë¯Ù»m»vaÎæÍ8vÅèííEOOFGGk{Y(-žL&1<<:ÏG?úÑ2äW¾ò<üðø÷Þ{ñä“O–¥À_ÿõ_ãé§Ÿ,sttïz×»Êö•K¥RøéOŠ»ï¾>ø`èúëhɃÈ?ãG:áÖä2ß~N??ûAèëëC,pÁ«¯‚5<€èœ9(‹8uêr¹r¹òù< …4Mƒ®ëž&@$±¯sΑH$°lùrlܸæ;ß ìÛ‡ôë¯#³p!ò½½¸øâ‹ñÜsÏÕP㺻» ¦•t …c˜3gº»»ÁÃöíÛq饗¢«««¬¬ãÇW%?0µ4V,Coo/:::@Ák¯½† /¼°Æ§:wQ‹§:a'š18 #ýÔ}çÑüµ(½([õF4›Åܵk±äƒ„®ivËŸÍf‘ÍfmàvB@)cÌìÔ’É$úúúðF.Üp"O>‰î—^ÂÈ;߉t:þþ~O>²~öìÙ¡ó¼ãïÀ=÷܃îîn˜¦‰±±1D"¥½Z»»»Ë@Ø~~J)>ñ‰Oà¶ÛnC4…¦iÈd2ˆÇãeZA •hùKö¿Ÿ£ö[iœÐc& ~N@¿A@î|aÑÙÙYá'æîÙ5Ç5ÿðÐ YG«/…@>Ÿ· î6c`ŒAUUpÎmí@ ‡eË–aß¾}È,Ylߎèð0##Èõ÷cÁ‚5 éwX´hQ¨ôK–,Ág?ûY¬[·ßýîw±oß>‹EÜpà x衇*þaÉ{Çwà}ï{¾ño`ݺuišøô§?n¸¡¦g:×ÑHÂ{…›¹ÐèÙ€>R)¬0èZXAÐÕÕH< µXÄàí·#Ö×MÓl›_ iÿçóy;N §€=2¯ŒB`õêÕÐuã«V’û÷—´žžimýõôÓOcÙ²eXe•çÆàòË/¥ÿò/ÿ‚]»v¡X,k¾¯+W®ÄÁƒñ½ï}ÃÃÃöHÇÅ‹×Ufß 3:°µl êVù½âÂÜOvûu= ˜ãÐuÝnå5MC±X´Éï&¶S8É.ýμÅbsçÎE<G!Ç”RôööÖüξùÍobll <ð@E¥øÀð±} ì1ÎqýýýxÏ{ÞSó}ÈårèîîF2™´ãÞúÖ·bùòåu•{®âtj^çõ ñN@÷þÓÃNr"ŒˆÅbP„¤ƒÒÖ†n«…–N<§º/GûÉ)¿n;ßí`ŒAQ» é7ÀáÇ‘éëCú7E±·]]]©éýe2|ò“ŸÄç>÷9|å+_Áðð0öíÛ‡ŽŽ,^¼‘HÿôOÿxþùçññ>ø ^|ñEhš†5kÖ`ݺu¸ùæ›kº¯O<ñn¸á<úè£øío‹®®. â…^À%—\2írÏu4Ã)(ÑŒ™€@³œ€>k†qÖcÿG£Q{’O4ŸGrÉpB`š&8ç0 Ã&¾3,Éì $ /É/»e>çoîܹÐuÙöv¤¨™ 4B³fÖŠ×_ýèGqà 7à /ÄÀÀ:„õë×ã?ÿó?mÇÞøø8îºë.¼÷½ïÅ‚ pøða|úÓŸÆØØŽ=ŠãǧÄ?ñľ”~ò“Ÿ”9 7mÚ„üã¸ù曑J¥ðꫯâþápÁ`ëÖ­5?5)ßJÔœoºhooŸÖ®ÄÓýM2üÖ4›ì³& —jGØ‹üAã‚ ½ßª¦B ÖÝm;¾LÓ´tè9…‚üI-€R UUA)µ¯¹óÊp›5œ¸`ÙüJ®4O5Ÿþ¶Uœs<ýôÓU»íŽ=Н}íkñßþö·ËÎö³Ÿù–ñøãWĽòÊ+“ŽŽ=Š7ÖÇ Ô¤¸ì;—ÕœoÚè±~§ Ó%¹ûÛöJãVß虀@ƒ}~ ãüó‹ ŠwCjªå ‹Z@zïý~òº$ö©S§lAP-¯±X¬$,çËå@A[[[•·p¶£šÚïöaÕB~/4z<@SG- "µ¬T œsB`Z-±–É@×õ²íž«ý8ÏåRŠd2iOòJï.GšQKðku¡zæœS {WOoQâ¿¶‚NÔ7Á*,R©”­E†ÁtI†üNÀúš±@¹Ïê ð#}ò;Ó¡X,–ˆgµ¼…cÇl€1J©çO^“N>J©m÷;¯ùåÏX‚†æóžL‚ÒZ1È‚A ÿãŸN/óåìÞÝØ ù`éÒ¥èìì¬)OÇŸó<¨¥úÖÏ®éÀ.K šÚߨ4M+¥WpUEîÈÛ±—N§í=’ØŠ¢”9÷¤ÃÏ9HVUÕÎçþ±î£ZÝrÜê>Ë[¡…ó~ß÷´ÉèÈœa‹‚VsXúi^qaU~7d‹KA®« ìÈL¼ù&”Þ^¤R)›ì’̪ªÚ+ «ïž1f÷PJíU‚ùœqŠ¢àå—_†®ëè²Ñ{z@A&“™ÆS´p6¢Ék%ÿéÒš6˜ºì÷1(邠뺽_üD_àø† Ðu™LÆ&®{ ðX,†X,†¶¶6´µµ!—c±XYzgXÓ4lß¾$ŸGG&½§f"B:¢Öþpú.ÎT¨Ã¹Œz»üª‘¿™ƒ€€&”ÛƒåμZB-Ÿàèè(!˜œ;prÝ:èÅ"[dt’]Nñu“?#‘H” )Üç?þñQ(Ðwì€ÂÀ€Ýú×øÆ`wMrΑÉdÍfíîÉ0dB@Ó4˜¦‰|>‰‰‰²O§£ç ÂØÿ»=ÿ3zMÀŠ=ÓI%™ƒ<ÿõ. vìØ1\tÑE0b1Œ-X€Žýû1úÄH¼õ­Ø¿?.¸àûã–cܥꯪªçt`©ö»µ‚;v`Æ ˆærXvä„¢ ·¤´ø]­#’CÁ>ð,Z´óçÏÇØØvî܉-[¶`Ó¦M¶éáùLCCC¸é¦›0{öl¼ùæ›èììÄîÝ»ñË_þ…B¡l9t¯:À?øA bþüù8yò$víÚ…-[¶`óæÍ¶ùÔB &¼; Ìt' {ø¯«'À¯uwÛý^K…yåB.—ÃÑ£GÑÛÛ‹Ñ‹/Fzd'ÿýßA—-C®« éteÃ{ …E)[Lvó1Ælµß©!˜¦‰Gy†®ãÊÀL™·¼f<Îyè}$8ç¸è¢‹ðÙÏ~mmmöüƒX,†¥K—b``Ë—/ÇøChšVÑ]%+ýéŸþ)®»î: ìØ±_üâñÝï~³fÍÂòåËñÓŸþÛ¶mC[[[…uøÌg>Sšß`Õ¡­­-TÎw4šüAÓµaFãÄ ñæg Z¾Z±gÏ! '8yá…ºŽ±G®iعc4MC"‘@2™D2™D{{;R©ÚÛÛí8w¼¼–H$ ª*}ôQœ8yœ8žL<™Dæ²Ë@Á®]»Ë…ßµB×utvvâK_úRùÝ•æÌ™ƒ;î¸ÃÜd¿+kÓg>ó›ürÂ’Â.Ã0 ÜtÓM¬0t]GGG¾øÅ/–‘?lÎw4«åwbæ;‰3\¾2°—à>ú]s‡«!—Ëadd„Œ^z)ò==Ð÷îEîÙg‘/°nÝ:ìÛ·‰DÂ&y*•B:¶ò\^“BàèÑ£x衇°iÓ&ÄuC‡C( N½ýí@$‚b±ˆíÛ·‡®«œsÜqÇxúé§+瞎Fñ–·¼ÅîòJ­ÿ%—\‚+¯¼²,±X´}Î2Ö¬YcÛùì<ð€½PªóþîüÅb—\rIYÎg„ùN§¯4× xZF‘¾Úž^&AìÚµ H¥R8xõÕXøÔSÀ“O‚œ8ýúë±uëVìÛ·W]uÚÛÛW–ýÿO>ù$~þóŸCÓ4ôNNbÅÈÓÄØ7°Ö!xá…jh,X€x<Žûï¿]]]¸çž{°páBÏV¸P(`pp›7o¶'¯PJñž÷¼Ç“¨RpæçœcÑ¢EØ»w/Eç ,Àܹs+Êpþöïß_üâزe Þÿþ÷CÓ4D£ÑiüwΜû¿I3Ó°& „éÃlâΜslÞ¼W_}5h,†‘›nÂÜçŸGôÅÁ^Å·¿‡r9üäÇ?ÆàâÅÀüùóA)-GŶmÛð›ßü¦´Â®ãòƒ1pò$c»é&¬H·lÙRsןišX¶l™m[?þøãøÔ§>…«®º wÞy§'5MC,ƒa`Œ!—ËaÞ¼yé‰>ô¡y’Ú9×_ÖÁë^rÕ‡~;wîÄš5kð'ò'`Œ!‹µÌ Íî(Ûq«“‚š²=¸ÛÁ\Mý¯6xºOù|›7oÆ•W^ ’H`ä­oÅœ‘Ü¿‰ÿû!V¬ÀØÅcëÖ­Ø´it]·»3™ Ž?Ž|>oOîÇÊ×4˜‰N½ímö Ÿ={ö`ÇŽ5×QQô÷÷Û-öM7݄իWc÷îÝž­¿“ÜÙl¶´Û‘5ýÕŽRFlç59Ê]/a!„ÀòåËqÛm·•ùâñxM¾ŽsÍÒ¦3¥¹V4pwààÊú‘9h^@=&€ÄÉ“'±aÃ\qňÇã8zÍ5˜D×–-Hþ÷£mÛ6dæÍÃx_Œx§2冮ƒäóHd³˜uâzÇÆÎç!T™+½ì2Ë ¾eË–i‘(µ¾‡.#žýýýêxΚq(ç"d³Y{a?¡áüMLLؘWÜe\rÉ%žå„铦š´­žÖûAqæúÜßf#ÂAßz3VnšÀ=Pk5êÕ`bbÏ?ÿtb­0´{÷n¼úê«u{Âcxã7pêÔ)ð%›ó7::jOWJ-ÃæÍ›qÍ5×Öù;~ü¸½¸h#ê¡(ÀÃÔõžš‚?ýû† ‰ZI^-hÞ  Ó+y“ß¾Žpö=äwâСC8|ø°íôëééQUæÍ+›ãï¥E8GFF°sçΆپŒ1pÎñøããæ›o®ªºçr9 —yßcxöÙg±hÑ"$‰ª­øÁƒ¡ëºí”uøÉO~‚[n¹¥j~¯:œãøsž‡‰óÏèEAò‰@@u Ì¢ „{÷îÅÞ½{¡ª*úúúÐÝÝ]6Ì—snabblØößn¨ªŠ;w¢³³K—.õmÅs¹öíÛg/W&!Ï{ì1Üzë­öèF¯Vüĉ8vì‰DEvíÚ…îîn,Y²$ÐôðªC Þð#y5ò  Ì›>³‡#Üt`¯VÝ‹ü^y›]×1<<\Ó~|!Ñh7nÄÎ;±jÕª2çóy?~¥ÔsñÊH$‚\.‡ïÿûX¹r%æÌ™S¶ûq&“Áðð0&&&ÐÖÖVáP’uxá…°sçN¬\¹²æ:œ¯¨‹äUÂNÌèíÁÝ3ÝžüZ[þfi3 rq‘ññqüò—¿{+.émÅb­n4…išx饗ìA:R0†UU‘´V+ ªÃØØ˜gcˆF£­–ßF<ˆüÍœ 4X¸¿+b$ nà¹.$äZrx.cÌöö‡ÒŒ‘c¤ÃïtÔá|C3ÈÖ:ýF)USûƒœ€ç ùë ÖÙ¢ŸÉ:œëh6ù½ÐHДÿnÐÆ òXk\ -Ìdœ~-`¦­ è3ü×yÔ× 4×óßB §$¿»!ñÓ³'@oà|´ÿ[8»Ñ”–ß5ò¯‘€&. ø/ëD~w!â[háL V~ºö3¶“húîÀAö¼W—  --àœ3rRáfCÔêÓíœÑ‹‚º´(¨ß AáÎ>(ÜÄÚþøLWÃkÖÔ•½––?È´­®¸n…¬`4L””-Xà¨\5[ß&(¾…f*Â|Ë^éƒÂn–7ce æMè ô è¼îƹ&ä&¤çäÖjn(ŠrV>c­ÃœÃ´ü~é«¥iæ  ÑÓ+F–"ªiçãø²7ß|óœšMç5QjïÞ½u D:S˜œœ ½­[-ä¯U;ð3~QP¿úù=¬»åzaçêYDälÁÎtšŠj$²ëÃ’ß 3o$`ÐþÛƒÁqAáZ˜©ûýÖ"8$še 4¥Têᬥï¿EþÎ6„ý–kùöÝ~´fÌËhX‰~3%‚¤[K´p® ÑãšílðÎ@®n ë´Þ–¿Eþf*MxwØ¿=¸W÷_­ªO5Ïj -Ì4„ùf§ûí7s{°Ó0„"¿×h@¸Ò¸1oÞ¼:k×B áá×mÛ òWô–Íô5ðZ0ˆð~a7&¬õø%fÏž]G-[h¡>äâqt:ÎnT´ü1Ó8' ÏL@ q/&s œiáìGÞñ=6ËþoæL@ ‰ÛƒK4ËÒB 3§ÓØè®ÀÆ;©w¸–‡>ñ³ÇÇPÃZh Ò®ï±yZ€keàN j¾€siiç Çu¯xgz ŵõk¯½foåÝB ÍF:Æüùóísæ³5z­WÞ '`fÍr:l¿‡vû¼ö¬¦‹ÅÖþô-œ6Ä]Nh‰éj´UÉ´&àŒ[Àg& D-Ïï…µÐÂLC£Zxß–ÿl XËLÀ0ƒƒüò¶ÐÂL@#È–3~$`Yá®IAµ„ç-ò·0SÑ(’ñ`Æt*ûî®@¹=¸„{°OµA@ç*ùc±Ø9µëŽ®ëÐu½,ŽRzÖn'fšæ´ÌÍè hÖ·rZ¶—zÐóa0'V¯^b±x¦«Ñ0ÆÉd°mÛ¶²øn¸Ùlö ÕjúhkkÃÖ­[qòäÉPéýZø ôaÂî‘å-ÿŒÛˆ”ñ8h§ ó¹å—0 ÇŽ;ÓÕh"‘ˆç8ù\.wV®|ÔÙÙY=‘šÑòŸUN@?u¯ÞÕâ[háL£ä÷úÞgüš€NJ«;a¸Ò´pvÂd&¶Þ·µáå’Žü±cÈ:„É={0{Ïèmm8¾x1N"bhhÝÝÝØ¶m[S´Ë/¿ƒƒƒX°`&''122‚uëÖ!—Ë5ô>ßþö·ñúë¯ã _øBCË•Š~Ú”¢½ñc§ñ~4Z4s& ÐìéÀ˃×2ý·^¡000`o$+°`ÇÌ:zj"¡{ïEÿÛÞ†ôÒ¥08·—¶rþrÇŽáøúõ8òóŸCݶ Ýo¼£—\‚‰ ÐÛÛ‹D"-[¶ ŸoÌÌ´žžÜÿýX³f 2™ öíÛ‡t:yóæá“Ÿü$¾üå/ã™gžiȽ€Òr×±X¬aå¹!¨ÞÕ´â+ѼG©@3ZþJû¿y“‚š0°œÓ„Ônÿ7’ü\pæÎ è8q‹·nÓuô]q®ÿßÿ±¾>›èr8J)¥ôj8ç ííè¸é&$®¾‡{ 'þã?0ÿÅqòÄ »ür¤Ói¬Y³6l€¦iuÕ7‰àá‡F*•ƒ>ˆ§žzʾ–H$p÷Ýwcùòå -Lµ ü©7ìôüÏè¡À€ÿ¤ ZM€zÁìÙ³1wî\B0{x¯½¦ªXý¹Ïá’{îauõ hšÃ0l! }ñxÉdÙl‡Bú¶Û  áø7¿‰Î×_G4“ÁÁ«¯F<ǪU«°qãÆº6+ùð‡?Œ¾¾>üÕ_ý~õ«_•]Ëf³øêW¿Š¶¶6;.NãÊ+¯ÄÂ… ‹ÅpðàA<÷Üs8uêTYÞµkׂsŽ-[¶àÊ+¯ÄÐÐ^}õUlذÁ³ýýýX½z5úúú`ö®è´¯ IDATîÝ‹_ýêW0 cÚÏv®¢YZ= Óç ±%¸3Ö8]  ½½‹/!³ŽÃÀk¯!½p!ÞþþR]CבÍåÉd it]‡aàœ— EQ ( ¢Ñ( `ÿþýÈÍ›‡ô§?Éýظ}¿ý-ÿÎï ³³_|1^yå•iÖx×»Þe“ÍNSãßþíßL&1<<ŒX,†÷½ï}øÃ?üCüÅ_ü¶oßn§»ë®»À9Ç»ßýn,]ºGŽišž ··?üáqèÐ!:týýý˜3g>øÁâ¾ûîC&“™öóËh´ pûž 4ÑàÕÿ/ÃaM€zÔÿÁÁAPJÑ–É`ðå—AÃ[¿õ-¤.ºÅbÈf³( (‹¶à”R0ƉDP,‹Å000€x<Ž7Þxêm·A?píÃÃ(Κ…SCCX¸p!†‡‡16V»*‘H «« ›6m çóŸÿ<^}õU[ëèîîÆÃ?Œ¿üË¿ÄG>ò‘²´—\r {ì1ÜÿýZÊÄÄîºë.ìÞ½ÛŽ»ì²Ëðõ¯wÞy'¾þõ¯×ö`ç(šIxÛ ØÄ™€@“õ²ÿÝaø0èéé±ûømÛj¸üüt,]Šb±ˆS§Narr™L“““˜˜˜ÀÄÄÆÇÇ+~òÚää$&''‘Ëå0{öl,Y²ša@Üz+Àº_yѱ1B044TCm§ 7ž‚‹/¾]]]`ŒÙ×z{{ñúë¯Ûç í¤¼öÚkqÇw`áÂ…H§Ó¶pŸŽfs.£V’‡!5 xÆ;Õ "¿êuüuttØN²ù»v0†ëþñÁQ²³Ùl™Èår¶@ö˜¦i›Š¢Ø¦l9 !`Œáâ‹/ÆÈÈ®Xä®]h;|ñ£G‘ïíÅÂ… k£££( e[PaöìÙøÚ×¾†cÇŽáG?úÞ|óM9r«V­ÂŸýÙŸÙ=aÇ\{íµøÂ¾€çŸßüæ7ñæ›obll wß}7®ºêªšžé|Át5Ú ò;»ÿføPàÊݽPöpް—F0]û¿«« C,“Á¢w½ Ë—C×ud³Y‹E»ÕÏår(‹v/€®ë¶(íx£( "‘HYO¥R¸|Å <÷Üs¿òJtþüçHîÝ‹B_æÌ™JiM=BlÞ¼kÖ¬A?8˜~íÚµH¥RøÔ§>U¶+O½$}ÛÛÞ†ññq<øàƒ(¦VómooÜÜçª5fÓ!¿füt`'œ½~¦µwKÔjèêê²=ÿ0ÿÆ¡ëºíè+‹e¤—NÀB¡` ©är9äóy ;½L+Ë@$A¶»f$‚øÁƒ EÁìÙ³k¨y _ûÚ×`š&>ó™Ï`Ö¬Yׇ††pûí·€½s‹±H$‚Ûn»­æû:‰D`FY—ߢE‹°zõêºÊ=Ñ’{ÅËc3g 6‚Âu †I¶6D£QB>z,Áœ«¯†®ëöÔ^çOÆ;IíÖœ½Œ10ÆP,Fm³aÁ‚Ø<:ŠLo/RÃÈž8­§===5›ÃÃÃøÒ—¾„?ÿó?Çw¿û]¬[·Î ¸dɬY³?øÁ7nĽ÷Þ‹Ï~ö³øÙÏ~†b±ˆ÷¼ç=uïÇ·aì]»=ô~ýë_£«« wÜqöîÝ‹ÞÞÞºÊ>PKcD~»'àlrú]¨‡ða5€H$25ƒ/›Erp"ɹݢ†a;ü$¥p:%á%ùåxUUËÊâœcþüùظq#²H Cœ„>{6âñxÈš—ãÉ'ŸÄÖ­[ñá]t‘­’ïÝ»<ðžþyÀþýûñ¹Ï}wß}7>þñcÿþýxê©§ðÊ+¯àž{î)³ùwíÚåë|íµ×Ê&5=ñÄH§Ó¸å–[°bÅ ìܹŸÿüç1þ|\yå•5?ʳMu^†D,ÒQû UUëºïtzª‘ß 3Î è~Õe΋†×;0‰T]1M´õôÀ0 !lç·„ Ësy” €H NG Ì'‰Dº®£`yà«vŽØ«‡ÆßÿýßWM·~ýz¬_¿¾"þŸøDÙù—¿üeß2z衲sÓ4ñÈ#à‘G)‹ñÅñøãW­“”S\ñÿ^Qs¾ic®õk2¦cÎ:ÃAä@Yk:ãÎðßja¿rü ÕÕ²‰#]]ecü¥ ayî$¶a‡¦i¶Ð?g~g\[[[ÉÏ`yÝ•\„º@ gÕò ×57š1)¨‰#Ë+V ðJR]—ÎÃRëÝÝa~u•Ã#‘HÅê@î´Î0·f–Š-!¤®9çÁñy]ÓÊÝw´¨7¶>>ˆÅbeã( ‘äwÇ•¤ŸÑk†Ýlº&@5H×°ZÞü±cÐuݪ±ûö©µ&€è#ãä y]^“Î?g>g8“É”ÕeÆ­ &]hç3 F±û±¿^æËÿxygc+䃥K—¢³³³îrA~g¾fl &Ñx'à4·k„P,K-¯ªÂT,À9G2™´‰¬(Š–¤—¾¶Æàtü9óHÿ€ ŽŽB×u0Ë鯓IBZàÂß}œù+f6ÈÐÀÝË=ÿN4ÊX ÅbÙl„LôõFׯ‡®ëÈçó6y£Ñ(¢Ñ¨MîX,†X,†¶¶¶²Ÿ\)'‹ÙéK‡Ë‚/¿ü2 i蜜„1kx:  ¶I=-œÝðúfë!¿*Öœ]#¼1hX¡0:: B&­U€Nþ×A×u R(`ùÁƒ¥È_t€ÒÌ»Z!I{õÕWcéÒ¥X¸p!ÆÇDZk×.lÚ´ ‡F$ñõTË®Ét:ßýÝßÅ‚  ë:2™ vî܉^xÁ^ß L–-[† `ll »wïÆ¦M›päÈ‘²^’J˜Žƒ/Ì5 \Ìè^ üžv7‡O¼;oX `bbcccèììıK/EòÙgqìÑG1{Ñ"ÎåN§Ç+¦üÊ@^ ‚¨ªŠh4Z¦%0Æðè£BÓ4¬AÌ0[¾ÜVÿÝóé«sŽT*…¿ù›¿Áüùóí¹ èëëÚ5k°~ýzüâ¿°ýNÈVûÝï~7>ô¡Á0 ìØ±ŸøÄ'ð½ï}Ë–-ÃÚµkñýïGõ\”sŽt:¿þë¿FYæÎ[µç¨ýî¸ZÉï÷"!õ ùbÜg“P'ªÅ׊={ö ³fa¼¿f6‹Sßût]ÇöíÛÁC"‘@2™D2™D*•B*•²Ï“ɤ}½½½ÝþÉøx<ŽŸþô§8xð zÇÇ1l "ÅäÊ• „ØÓgÃB×u¨ªŠoûÛ˜7ož=[QNB’¿¡¡!¼÷½ïE±X¬08çø£?ú#Üyç¶Ï£P(@açD"xÿûßÙ³gW¨ór¼Ä7¿ùMÌŸ?Zu81Õ~:NÀŠåÁälÊîÀ^ZJ-ä¯Ezall ÇŽ!GW®„–J¡øòËÈoÚ„L&ƒ_[‹f: žJ¥N§Ë~R0¤R);¦iøêW¿Š§žz *çxËÁƒ!8uãñ88ç5­ („çýèG±oß¾ ÂI"J2Κ5«´‘ƒÀº®cÞ¼y¸ùæ›ËòJ;ÞMæë®»Î6ƒœu¸ÿþûíîK¯ûË2R©.ºè¢–OÀj=Ó"¿Kn†ÙÕ´‘€~Ûƒ»ã‚Ö¨§}Ù±cfÍš…X,†‘k¯ÅÂgžöãããÐßò¬_¿óçÏÇŠ+ì™}A+E"lÞ¼?øþ÷119‰d>U ¦ë˜¸ê*hýý „Ô¼?ç½½½ö‚7Ýtî¼óN´µµUIÈ¡¡!ìØ±ÃžÌÃwÞi¯uàN @þ(¥¸à‚ ì…De.¾øbû^÷dzÏ>‹gžy·Þz«=+ò|G5S VòŸN'`£·//<`aÐé†Ã¢P(`óæÍ¦ =™ÄÁ믇®ª¿øÈ~n9¶þýÿoïÛc-)Îü~_UuŸssï< Æ f†à c3ذã•Qìxe嬈iE,YrPœ(ä%EŠ•ÍCQ¤M´«(–‡c$+VŒCñf r¼, ›Ç\Ãf<03sïÜç9]¯üÑ]}ëÔéîóž{ÎwuÔÕUÕÕÕ}û÷½ªê«GÅ믿žÛ¿á¯^¯caaßúÖ·ðíoËËË8pþ<~sa; ¬~úÓX?tD„cÇŽåæG·¤µÆÍ7ߌ»îº >ú(8çxàðÈ#”jZkÔjµÜ«¿¶¶†}ûöµ·V«áþûï/•âaÊÔþ••|ï{ßÃÃ?ŒcÇŽáÀu×]—Ï¡ø0S¿Ò½[3¸ìœ€í¶I·#ÃÖ.^¼ˆ_z ‡Fs÷n¼uÿýøèÏ~†Ú‰˜üÎw î¹Kûöá©§ž‚”2·ñëõ:ÖÖÖ°¸¸ˆÓ§Oç1ãõuüÆ©S¸bm V,}îshìß"Â;#_üâ=÷Qýû÷ç6úW¾òÜwß}8zôh©$ÞØØÀôôt>Ñhjj QµÕ‰¢Ÿýìg ¯¯ÕjyÀ¿~—vC€=ô¦§§[ú0ìmÊ.'êGíïÅGPFÃ\4òEÚaÐϲô¨v>sæ ´Ö8|ø0hroß?fÃî—_ÆìŒ‰={°òÑbéê«q~cgΜi§Fyï=|dqW®¬€[‹ÆþýX¹ãè,XæÂžþù¾œbÆ,..¶nff‡.¤¯ÊQ[x³²Ÿß†›0UևЗpß}÷µiI’Tn ëˆI•Îéï‡^?Ñßu—ú•î½i£Ù$d4;  ”Õ„Ξ=‹Ÿÿüç¸óÎ;155…å›oÆÚ 7`öÕW1õë_cÏË/cÏË/Ã2†$Ž!£L)ÄI‘©¸6ŽÑ¸þz¬}ò“P{÷æm?ÿüó=ùùd­Å«¯¾Š»îº«°áo}}SSSù¤S§Navv¶ëëóùe}¨ºÞXÊ>UØÙg<Á;õw]7´p xûì@MŒüí‹ë¶³0Ü0ˆ è§;™êƒVVVðÔSOá†nÀÁƒAµ–n» K·Ý†xygÎ@¬®‚¯¯#ÚØ€c4§¦°>9 ¹w/’k®²e¾@:Ñç…^ÀÅ‹êço¼ñÖÖÖò…¤÷ââb¾‡!ªðGmÓªÚ¸páB~}¿}ºóL!€§¾9Ð{ ýÝü»G†ÒT‘jßKJŽ£žp5²íÁuë䵤ήcÇŽáäÉ“8xð öíÛ‡‰‰ ¨;±²sg¾dh¤ªòÙ³g1??óçÏ¡GÈc >ñĸçž{:Jà œ<þøã->ƒ*ÄÉ“'Ç#¾ºßɰ­ƒ‚­jË0¶ Óà$IpôèQ=z»víÂ5×\ƒÝ»wç3ýâ8†µ6·yWWWó}òF±9fÇxöÙg±gÏ\}õÕ•øÔ©SÐZ·0·Lùûßÿ>>ÿùÏÃSÚÆÒÒNŸ>‰‰‰S-Žc<÷ÜsØ»wo_}ø0R€Ã¼~G€ö•€Û.&` pÔ´¸¸Ø¶“®[|©fºjµžxâ Üpà 8tèPcГÂËËË8qâ”R…¡Æâ8Æûï¿ï~÷»¸÷Þ{±cÇŽ6)~úôé|p%ÉïÃpë­·Vö¡ß€§Dªý àw´í7i¡ û¿,í&RòwK[1¶íŒœù$8瘞žFÇùž†Œ1LOO—ª‘®'NœÀë¯¿Ž©©)ìØ±Íf³ë>|˜©W€w,£ÑI~GÃÛ¨b% Ðþ°E‹€F¿úö&"Ê—k­óõµZ­k‰ëé¸)ÀÝ¿ª‹‹‹¹v0–ú­4ˆtï¦ ¸Ü–S1ŽËeàïdG}ÐÉ߇ _rÑŒ¶²ªrÜ Â M!®F°ÐgXeCþyY~U1i»Ð($þP Ø~1«ˆ¨Ô6ƒL— ðN&€£QÍI«e³»qúçÛÁ!8¦1•Q•—ʺªîIá1aP 1(hÐð€AMIþ˜Æ´]hT’ßÏ»¼–—ˆþ^ÀÚ?cS`LÛüoÔd¿ð{ÞM^ {QÐH}½„/›ÐÉ6Óö'¡ nýâÃ[Ý6â×Ào¿=?ï5Æ¡ÿ}vzô˜ç¨m{°ªÝwz¤‘Çèwc"F0¦Ë”¬ÅŽ÷W¶ºÅ4Àz†2à‡i””WåùGà2› ØIòwš lÚ&déOD˜¨ºesc—å3ö²A¨ÏÊ$¿)ÈCEž;Ž*€OCc¡VÒíÆ ¹³£¤N7vÑåHçÎû@ͬ;wî\[Þ… .Ë-Ò]lÅNäÛ 3#Ý”ù ¶}PЪà0Ýj®žÓ\úƒÆ¶º #§W^ye«»0R²4ZÁï›Æ«» ÛÙCªÂl¦ý|wôó‹^œŸïçiLÛBЇj?ÐÊúÑ €vлpîàA€`‰(ï/±€u¸hÌ?|±ÕœqLcºÔjþ¯Š í /r váX1ܸ-vY1ËÒ!àCÛjLcÚ.ä¾MÇÂïèüeyU6µ/tÃËz¡®Y÷+»Qè°¬Š ¦‹l§±0¦íNüNpé"Û¿(¯[ÀQ+}œvE[dŒußXEkE*Ðþ EžT÷¢Ç4¦íDô Åê¨  ³*è% Ùn°[: ÐébO(Õ œ)Z¤®ƒM;÷Çÿg%ï|ÅWŒ7¨Ó%£pØÖ 7~€~´G!è6~ÕŽ¨ÂrBX)¥Úì ¸<[ºNsŠ$¿{9EàZU-Ÿ®½öÚê›iL#$…Íï4dE&,п P5üç„q^r&ÐË<€ÛØ@ È©jw`—®š ì^*G+#Ëú1m'r öÁ2" “9Üž½ÈãR­@Ñ–ßµ0¸1@k?OÕ´Ånœ€~¯}ªWcÓv!åý|' /ýýÑ€^À_„âŒmâ/ŤÇ;ºs¶hõzÝ®­­µÜÅ5p›Âçð‡ÿŠøAøýè@Æ;w/Ï_wü8®>}„T; ¤ŒaÓOà~(HWQ“*«ÓM;¦k«êvjgX}/ª_ärªå¾ ‡ø4Ú~vi ² , ~îØ ø‹Wnú´Ö-`wZ¹µ¶ Ôëõ–<Ç|M@j3øà÷oqKDÆS:ìÀ<ý£B3Àw :Ÿ€{‰ ÀäÒ¦‘‚Ÿ•üŠPÍzÿåP§êÃï÷^Ýuý鵿EוåÍWÛ‹@ï;¢YPî´€"û ð»Ý© ljÖŠ=‡Ç6  b4À)…08çE åýó¸Œ`W¶é®E“¬òŸVµˆÏò›cóŸ‚>dù3´]ÖŸ¢t7õ·¢ÍA9Š6ËêŒú]vþª²¢E=eÒßI|…vç_™ý_Æt:1†™›K•ý‘£ ÖÖ¥óAšpDŽˆj>¦ýÛ I\¸p“““X[[sÎKDn„À°™–`š JjZS@”@Lo¯ÓGõ… "Ôà‹$¿_%í ¨ƒHãa3‘K Ô²úƒô§Ûg­j¿ð­7ñ2ÈOçí¾*ßœMQߊú}ÅUŰHi’óïm4‰È°¾/.Š¢\0¯­­µ„†/Z¶]9 xnÿK)sgƒµÖ‘±ÖZ"2‰¦• Ø)°òâ¬å¡\:ahøu46AõêW©ý!#ðûPDÃù0¥q/àÖµýHïa0”Qß–Ô+cþL?Ÿ!TIþªI@@;c(ë÷ž+[ç8S`m].»Ë2&`²#¤”6Š"7BƘ]ZZ²e{D2g38?Ù$IrÕ?¸©µÖš†Äò,p•ë¿3¢éâ°àUé"F:]šyé"ðûé¢ÉDÃøð{@?×"9‡ ÈQ´Óm›ÝH÷*`ùé²á¹"™E? @AºS]Þž+' W®®Ê‹Dd2l¶™I’äLÀÇ2 ¨…ìØ±Ã6 Ûh4¨È³ÈËß ­µeŒi¦!ÙE"íp–]Ä$A­ÛŽÿüpÀoÌ—öÎ Ò>Ù ¬—sX E›½Þk+<ÌtxÂ>Õ3u|ð†Ì ›ŸmxŸðUÏ2»«†(N#…L`eE.#³<´Ö¹@v·Î´ò¿RŒûmUNrfÀÆÆ†õýþ³štq²^Oè"¨ÅY˜u˜Ý/ðÞQ™·[ö±øà/Ê÷¯õ™F(á«Tþ*ûÔ@íµÍ­ØVÞ7¼W/’³¬Ý°^Qýp¼¾åc÷Ònrš.¨Ó ÐËò}Æ)Óí´´ÔX²Ög†ÃÓÆ³´ÝØØ°q·ŒÔjµ¶WÜž~úiÌÍÍåÓ—––ìÄÄ„S%LÖ˜ànžû@ίðÓ©eÏ™À®›¢œ¸(ß•…‚òP¢—}Xe÷í5¿Ûº_ÆñAy§tÕûëX~›œt! Cpk¯2é_ôë¦wýæµ-’ß_ øú @‘Î0h<- 7Û‰È.--Ù(ŠœÇÓO? Ÿ|`P8(Xl‰ÈH) #„0´µÖñ6³ñó‘Æ˜I’Äd¾­µÖ cL/®³Õ «ìøU;íA F° ÄaæãKoª¶TÎ% ^Šoÿ·ôºâ¼ŠAøm^*Á9êô @ï¥"}Q 1„*ÒMýôÜ¡=ع» }%à©SËÇßz{u•ˆ´3¿cÚZk¥”&Žc72—›ðœsë ¶Ü¾ÍpäÈ8p ðŽ9ø3uC‘¶Ö*÷;õ¾xéªò €Tðôñ«>cñM•ŸwûAøœÉÏ/Fô넞^Òè¢Î8=º´;àƒ0†¢z>èËêu›WuÿÏù |òM_½ðÞKÖZ@‘‚g XkM’$&Š"`×)¶C*Z d³€1f/^¼h9ç¦Ñh˜Ì`ˆHk­µ§†("Rz<~±%&`66 ¹-ÆôÕ¼åAó/"|1e\¶Ì>4ùt›U>,iÿ†Ãmeyƒ”…ž{¿Ìï—¿Ð'tú¡à9ªòÂc˜wý;ñ¿p}éòßÿñè/‘Ì0§c‹9>3©oœäÀzå«…–sÞâPÈl £”2Ù0 6Æ(cŒ&"uê‚8qƒ½Å(“È Ú­"nüüD)Èmðóë„õ}n\”¿Ué~ǰÒ[ à~ßo^¿eá»+ÓËüoÎÿFýçªú–»¿ð·¾þÉ|¿ˆá½÷gþäOß}'Sÿµ1F9ð+¥´ÃçÆÆ†qÀLýo¾#æ-&ÎûeŒ‘Œ±„1–üìµøµw—Ø+y, Bn \q0Â-mªõ†ãtá‡2¬kÃÿ~§üA® Ûè6 š7hƒôûw¿z>sWëÌ?OÀ'Wæÿów^›÷¤âpÇSœsÅÓBíc5Pÿý[oÞ?@~¬ÕjVacvyyÙ0ÆÌÆÆ†aŒi)¥QJµhÆe­M4??f-4c”:9)`3œØþ¿PÇÇï­o9ض*Ý+P»m³èÚ^:ȵÝöw;Ð{ ÒÖ_þâµøÒ—¯€Â¸ÿÖÂüþ¾ôMkmÓZ+=鯕RJJ™;ÿc&êõ¤[·æ«bÚz½nݤ ÐÈ9wœGc|@Zk“#oò“Ͼ= ‚eé¬@›1œnùíI|âK“=›—2]ŒA®í¨Ãj³ rí¨Ào ÊɤÃê7ã„¿z#¾òÐÍð©eú/cøÑßþáþø­>¶¬µ2Ó¸¥“þ™o.Ǩ›ü“Íþ ÿÅ9Uùì‘#GP«ÕÜl"³¼¼l„ºÙlêŒû´ùcM÷û/?ŸZ8Þ–ñ³–“"o†Ðõ÷ÖpøÁiDÔò/eºWPuÛfѵ½‚mk{}Um+= Ð °Ãl«*orJàýÓOà/}áÅ!¿à¥ùÅgþÞ?þ³hz¸Ê¥¿ÖZeŽ?Õl6µB;‡=cÌÖj5›Mþ)eù Ì€<íæ8“ý´ãµ¢CĘyZÄ1X$ â {ÿwÿÎóÿâø‰•ó6¬µH™ACÑ4Æ4µÖ2Š¢DJ©¢(Rëëë*Š"E‘©×ëvaaÁ°È»ç3€²xAPç 0Æ!„±Öêf³IQ)Î9SJIÎ9Àˆˆ)¥¥!BéôöÞ7ÿ(úæ×þŠúêÌve-[ËIZc2MÄX`÷Ž™ë&qöe‰w_X~K#Ü}” ßàÿ ¥?¬àg 8pCwß=ƒ;c7¢ZÔâÝ/î[]W~ï÷ßøƒã'VÞ˴覵¶)„H2»ÔZK!„ šÍ¦Î†ûré_¯×‹†þÂÏ@ ÝiZk699)’$µZ'IsÎ#¥TÌ«QŒT ¨k­FPßw¥ÝûO~G>ø‘ݸÞÂ’’ ­,i¹–†ke¡•…Ö€Öé1Y7¸° °¸ ±ò¶jlö÷Rrm~ÐÓ£óvxQÞäáú Üú‰n¹e 3³5ðZ .Ré.jq*ù3©Ÿ–qˆ8Æ{ËöÍð{¯ü‡×¯ž³Ö648çÎhhcšB©µNâ8NšÍ¦ŽãX­®®ê(ŠôÄÄ„žšš²ÙÐ_¥ôª#YxZ@½^G&ñ1†VWWõää$5 Š¢H)¥ˆsNJ)bŒQÆHˆs­5¬µ8uŽÎ}ý?Æð¿)ÿúÁÙ;óÆ´åd¬Zg'²ˆ°ë&Ù8”²‰E²jÑ\¶HÖ t’2 c,ŒNµk,'8#0N`<]À³4gb~:-£àœeu˜H¹4Œƒ81žÎÙ¦ìœÀç1Ë~œ,-Oó²ë\;äg×€1°ìÄ`´†” Zj¥¡¤‚–*Kg牂ÖZJ(©¡¥‚VÙQê<ÝRW)pÁÁ8<âà‚ƒxzäYq!XÄÁ8K¯<â`Œe×±Häåa»ŒscÒ~( «5´Ö0RC+•–I•çc`Tö ÚÀ¨¬^pž·¥²ö”Ѻ0<Qöqe-yEa¥‚2EÀô°c˜¨OÆàй(vî…N?b ¯.¬>ûõo¼ößV×õŠóŸùàÏlÿD!•RR¡†‰¢H¯¬¬!„É4"Ï¡ô @¶–¸-tÞ‘#G077gUúO2DZ¶ÖR’$ˆ¢ˆ”R$„¥ó„ý6óPaö~;zä¡ßR§ï¹EÿU8–ÒŸ)#0–YopÐz&ñ4Ð(Õ±›Á( ­-”´²PÊÂZ@€ ç!"JŒ#=)cpi8O¯qyîZ8#ˆ0ˆ10!À¸ñ4åe|³LlÖ%.R@çe¼µ. μë6ËÀt¢4ÈF•(ÈF3=ßH ¤‚ÌÒI£YP7M'Mh™•mI#V@3ˆZqDµ¢!ʤ“;ç‘ðÊÒs—%uós‘]GP‰„V *‘PÍ$e`M •$PM¿LÂxi•$ÐRç×¥íèÅÌOžY|ôÿþÍ?Bjï;µß¿i­•œó„ˆ¤RJ !T’$*Š"çüÓþ¬¿#GŽ8Ðü¢M};mêk˜ŸŸ·sss@6=yy™¦§§PqC)Îy.ùäÁEüøeø¿¢'ÿdž½ö;ŸU_¼f—>dMÖYÊ4f5 ì¯åíYÓúU;„‡•øn_F¡H¨h§e”ສvz©–Ï’m“ ÎË®+ºÖ§Ð.­*«Ú±¶Í¾-˜äRÖ¿Ö²àÝC]Ÿª÷Ù…ãøeepêäåÿúØ;?øù‘å_QÓ·ù9ç>ø›Æ˜$³ýe~E‘^]]Õq›8ާúûTŽh- ÌÏÏãÀ¤”rshzzZ€Ó´ÖŽ ‘BX­uLÄ£¹ÀNþr!þæç©¿ðiù[;'í~‚·­@zbA)3·„l›"‹1l ”µ8­Xm-«ø† @ß=Xýóp»¤êvº¯[äA@_‹.,ë¥B ûý |UßCÆWÅ ¶‚ŠÞÁ{Kú䟾øƒÇ~ºô*RÀ'Œ±&€Äsøå’?¿âœû’_///›(ŠÂ)¿á@±ôzß@KtQ«««˜žN2H)E‘Û9ð]gܰD¾¿©Ÿ¾È_yê%±ð¥;’ÛþüMò¾™º½cV@ ÀZØ6¸g#¯é²+…p9ƒ`e ç=p“>Û©’üaY%ƒÊЦ¡–•ù@ïôa;UZKò^@߃rÖuYHEÞ}ö²9õÿ^^û¿ßùßËÏg —™Ô—HUÿ)H¬µR‘h­e~)¥”üÎéç†ü<¯›ê_E¥  @ ÈÓóóófnnÎ=¥s ¶08Ž­R Dd16¢paĈ12[J,ÿçsñ³=_;rý^uÅÝ7ÉO]·[Ú5¡ 4jïp<-Xe ´a¬ü?2ê†úT÷h§`›*Qœ^TøJÐeÖö§î‡} µ„–²Š÷3**b„ÖBŸ]² ÇϪú«Æ¯^;¥ÎH²P^‰ÖZ2Æ$RàK ç<ŸêKDRk­<µ??çÜøà÷¤¿£ŽÒè ”˜lú”R ›Íf‹&$ â8†Ö:Wÿ9ç~8q@Yk£ì…Hñæ9Þ<~–%ªÿd÷”™¾ûÆæ­{§ôÇjÌÌFdfcffÌ ÁNfßE£jSï{嵂 zò ¢îû`‚²a©û• ç¡öSå ¥œ÷¾Š%`!µ©ûU6¾.gƒh½PÁ¿ÓJMë‰b˲)–›Ë|¹iØÒ¹5vú'/Ù—Î.Ék“<„—µV"ýÖÛ~®Ì#…Úyû‹À_«Õ´súàïJõÏŸ§C¹?/h!äæ(¥¨Ùlr­5›žžæJ)®”bq ­µB­5×ZGœóÈÃc‘1&bŒ w´ÖFŒ1n­D$¬µÜZ˳<€[kcŒbnÅ„Ðu›ä™næ1²J- Wƒ¼|ÿë·Ôœ—{¯ÂsZäùäÎ o’åx×¶åÑfŸ7Mœ0ÖÂÚÌ b²´µyyšNGCòúÀæuèò4¥ÏC®îÜVÊžÅ?¢¬nÑ5›ï5í^ÖO XdGÛÞ×Ír›_çúîçµ¶´}×Ôrè‰\` "dé×Ñl(’ÙVÝiN“…ÉËç‘ '³e¼þÑÍí—œsÉ9×J©ÜæwžþüžÓ/Tý‡Ç²Ð5R2)%Ÿ™™aRJ®”âõzI)…ÖZDQ$´Öœs.Œ1ŽcL”åñŒpk­`Œ1 8Þ2ÄRñãò(ègØï1©*ô¦“·G†Im|‡_cŒ–VYZ¹E<ÐŒ1gçk)¥âœ«(ŠT£ÑpC|Îá—÷ ü@— {ðŽL ÙlR£Ñ )%ÓZ³™™–$ WJq­5«Õj\k-Œ1\Áf`ŒáÆÎ9ÖZnŒœs'é…µÖ1Æ9§ì¼eWpÇ€mê£e 3ƒ1QRekÓIѲYNvî庴vsÙfä^ÍSÞ Ú\Ò+¥Üâ:Õl6]`DZ^^^66ßàz`@oLÀCRJ6;;Ë’$áZkæ´¥Ϙ€0ưüèÜ»5ð)+gh~ è=MÀïë˜ÆÔ åàðâëµØÚŽ¸!î,|ž`´Ö& šë‡îvçŽ äu„ÚI}ÙgeeE»¡¾aƒè‘d/¢Š `nnŽ5›MRJ!I&¥dÖZÊüÌÔR¬V«q~c ¢(?BäßòsæK~§ ø}ðW9ôqLcê‡Ú<ënV«Ës’ž&@›áó­½RÊEÔ6RJ?´žÉÖóƘB_êÇql„ÈÀo¼¾ ~ ½€2&tûí·S£Ñhñ cÈ™J)§ÐÄÄSJqk-ÓZó8Ž™¾1†YkYE-Òßõ[Ѧþ%ÿ˜F@…š€“þJ)êÎߗϸP]lsC“$‰áœk"2B…ñ²nM¿>cÌúö~½^÷§ø¢àØ3ø>@ö"ºb¾6 µ&­5ÓZ³ÙÙYrÖšc¨^¯ç ÀOüìQ•¿ˆŒiLµ†Ø¶!#Ræ&ÇÚ¶ÔcŒ¹]¶\ä#„0.’[ÒëKýQ€mL(0 |Fà|ŽcÈiÖÚ<ÏZKõzYkÉÃPÆÅq‚Ù±“ó/¬7¦1åDãèû#þKD6I’œ °tÝ<Ýh4òýú8ç&›ŸðtÀ÷m}øîÞmÀú?0 :2w¤¹¹9€8Ó`çÎdŒ!ŸdRÖZšœœ$ÇÜÒ¾ÜcÀ©*b~^¨xRß®¯¯»sQ ècnÛ®<€§‹â;55e„óúQpLOðÀ ¨d~º(¥ ”ÊG 2‰OÖZš%cL è19àC©?99ÙÒWwLc±l“MGëëëmÚ€K³lW^Ç X¶É®;§lÓz§ê•ÀÓƒ ™PÁn¿ývø>ÇÀi>CصkC6J÷±´Ó()Ô |л#cÌ...¼“ô®ŽüLÕº>0ðCdyƒ½1‚ÜGlj Ð p_Ê;&QDcm`LýP(õ9pÕóBxð¥}ïÃtš1dÀä ÷Èài@Ê ¸ÅFÈÒ-ÒH™CYÆÀÓ0¨Œi°›°ž¿·éz»ô@µm?rà;ÈoЙ„ç- @΀MÆàÈgeäǘÆÔ ù@®¨ÓrîÅÊp±ùPø0]tžfޤ#gùŠÐyÑNá¹c@+ƒÓ˜.9€9ÈΠÞrÐûtÉ@~ÃrFWé2¯*Lcº”T¢¢üJÀ]*à;ºä  ­ÐÐÇLaL£¤^Ó±î¥|H[ÎBê’!T61”ŽŒiLÅ4`¶ð!ýៀ3I]IEND®B`‚Carla-2.4.2/resources/ico/carla.rc000066400000000000000000000000241420416754300167370ustar00rootroot00000000000000id ICON "carla.ico" Carla-2.4.2/resources/resources-theme.qrc000066400000000000000000000003661420416754300204070ustar00rootroot00000000000000 bitmaps/style/arrow.png bitmaps/style/groupbox.png scalable/carla.svg scalable/distrho.svg Carla-2.4.2/resources/resources.qrc000066400000000000000000000165641420416754300173160ustar00rootroot00000000000000 16x16/carla.png 16x16/carla-control.png 16x16/application-exit.svgz 16x16/arrow-right.svgz 16x16/bookmarks.svgz 16x16/configure.svgz 16x16/dialog-cancel.svgz 16x16/dialog-error.svgz 16x16/dialog-information.svgz 16x16/dialog-ok-apply.svgz 16x16/dialog-warning.svgz 16x16/document-new.svgz 16x16/document-open.svgz 16x16/document-save.svgz 16x16/document-save-as.svgz 16x16/edit-clear.svgz 16x16/edit-delete.svgz 16x16/edit-rename.svgz 16x16/list-add.svgz 16x16/list-remove.svgz 16x16/media-playback-pause.svgz 16x16/media-playback-start.svgz 16x16/media-playback-stop.svgz 16x16/media-seek-backward.svgz 16x16/media-seek-forward.svgz 16x16/network-connect.svgz 16x16/view-refresh.svgz 16x16/view-sort-ascending.svgz 16x16/window-close.svgz 16x16/zoom-fit-best.svgz 16x16/zoom-in.svgz 16x16/zoom-original.svgz 16x16/zoom-out.svgz 48x48/carla.png 48x48/carla-control.png 48x48/jack.png 48x48/juce.png scalable/carla.svg scalable/carla-control.svg scalable/canvas.svg scalable/folder.svgz scalable/osc.svgz scalable/warning.svgz scalable/wine.svgz bitmaps/carla_about_black.png bitmaps/carla_about_white.png bitmaps/background_3bandeq.png bitmaps/background_calf_black.png bitmaps/background_calf_blue.png bitmaps/background_nekobi.png bitmaps/background_nekobi_left.png bitmaps/background_nekobi_right.png bitmaps/background_noise1.png bitmaps/background_noise2.png bitmaps/background_zynfx.png bitmaps/button_calf1.png bitmaps/button_calf2.png bitmaps/button_calf3.png bitmaps/button_calf1_down.png bitmaps/button_calf2_down.png bitmaps/button_calf3_down.png bitmaps/button_calf1_hover.png bitmaps/button_calf2_hover.png bitmaps/button_distrho-black.png bitmaps/button_distrho-white.png bitmaps/button_distrho_down-black.png bitmaps/button_distrho_down-white.png bitmaps/button_distrho_hover-black.png bitmaps/button_distrho_hover-white.png scalable/button_edit-black.svg scalable/button_edit-white.svg scalable/button_edit_down-black.svg scalable/button_edit_down-white.svg scalable/button_edit_hover-black.svg scalable/button_edit_hover-white.svg bitmaps/button_file-black.png bitmaps/button_file-white.png bitmaps/button_file_down-black.png bitmaps/button_file_down-white.png bitmaps/button_file_hover-black.png bitmaps/button_file_hover-white.png bitmaps/button_gui-black.png scalable/button_gui-white.svg bitmaps/button_gui_down-black.png scalable/button_gui_down-white.svg bitmaps/button_gui_hover-black.png scalable/button_gui_hover-white.svg scalable/button_off.svg scalable/button_on.svg bitmaps/dial_02.png bitmaps/dial_02d.png scalable/dial_03.svg scalable/dial_03d.svg scalable/dial_04.svg scalable/dial_04d.svg bitmaps/dial_06.png bitmaps/dial_06d.png bitmaps/dial_07.png bitmaps/dial_07d.png bitmaps/dial_08.png bitmaps/dial_08d.png bitmaps/dial_09.png bitmaps/dial_09d.png bitmaps/dial_09s.png bitmaps/dial_10.png bitmaps/dial_10d.png bitmaps/dial_11.png bitmaps/dial_11d.png bitmaps/dial_11e.png bitmaps/dial_12.png bitmaps/dial_12d.png bitmaps/dial_13.png bitmaps/dial_13d.png bitmaps/kbd_normal.png bitmaps/kbd_down-blue.png bitmaps/kbd_down-green.png bitmaps/kbd_down-orange.png bitmaps/kbd_down-red.png scalable/led_off.svg scalable/led_red.svg scalable/led_green.svg scalable/led_blue.svg scalable/led_yellow.svg bitmaps/led_calf_off.png bitmaps/led_calf_on.png bitmaps/logo_calf.png bitmaps/meter_calf_off.png bitmaps/meter_calf_on.png bitmaps/rack_interior_left.png bitmaps/rack_interior_right.png bitmaps/rack_padding_left.png bitmaps/rack_padding_right.png bitmaps/canvas/frame_node_header.png bitmaps/canvas/frame_port_bg.png bitmaps/style/arrow.png bitmaps/style/groupbox.png scalable/pb_generic.svg scalable/pb_hardware.svg scalable/pb_plugin.svg scalable/pb_file.svg scalable/pb_configure.svg scalable/pb_audacious.svg scalable/pb_clementine.svg scalable/pb_distrho.svg scalable/pb_jamin.svg scalable/pb_mplayer.svg scalable/pb_vlc.svg cursors/zoom_white.png cursors/zoom_black.png cursors/zoom-in_white.png cursors/zoom-in_black.png cursors/zoom-out_white.png cursors/zoom-out_black.png cursors/zoom-area_white.png cursors/zoom-area_black.png cursors/cut_white.png cursors/cut_black.png fonts/uranium.ttf Carla-2.4.2/resources/scalable/000077500000000000000000000000001420416754300163275ustar00rootroot00000000000000Carla-2.4.2/resources/scalable/button_edit-black.svg000066400000000000000000000054701420416754300224500ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/button_edit-white.svg000066400000000000000000000054671420416754300225220ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/button_edit_down-black.svg000066400000000000000000000055071420416754300235000ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/button_edit_down-white.svg000066400000000000000000000055101420416754300235360ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/button_edit_hover-black.svg000066400000000000000000000054741420416754300236570ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/button_edit_hover-white.svg000066400000000000000000000066321420416754300237200ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/button_gui-white.svg000066400000000000000000000135231420416754300223510ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/button_gui_down-white.svg000066400000000000000000000135171420416754300234030ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/button_gui_hover-white.svg000066400000000000000000000157001420416754300235530ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/button_off.svg000066400000000000000000000116651420416754300212260ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/button_on.svg000066400000000000000000000116741420416754300210700ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/canvas.svg000066400000000000000000000365151420416754300203350ustar00rootroot00000000000000 image/svg+xml OUT IN Carla-2.4.2/resources/scalable/carla-control.svg000066400000000000000000000755111420416754300216210ustar00rootroot00000000000000 image/svg+xml OSC OSC Carla-2.4.2/resources/scalable/carla.svg000066400000000000000000000760501420416754300201420ustar00rootroot00000000000000 image/svg+xml Carla Carla Carla-2.4.2/resources/scalable/dial_03.svg000066400000000000000000000342071420416754300202710ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/dial_03d.svg000066400000000000000000000342101420416754300204270ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/dial_04.svg000066400000000000000000000106661420416754300202750ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/dial_04d.svg000066400000000000000000000106671420416754300204420ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/distrho.svg000066400000000000000000000057501420416754300205330ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/folder.svgz000066400000000000000000002541351420416754300205270ustar00rootroot00000000000000‹‘Ã^¼»×²´Jš%x_OÁœ¾é1æ$ZeUvZ2 àf M e ž~øOꪬ®<9efÛl‡«ÏYþ‰µœ½ÿí] |óyù ýï~B~ÿä}:dŸ¾üÝO/Oú™þ XÖ¸ÏâvèóßýÔ?ýïÿõ/ÿöýü3ÀÏy¼æ°Ö PûfIã1þgµ®ão!hß÷ß|þÐø›a.¡ÿøùçÿõ/ÿòoË·ün»ýòÛ,ýÝO˜0nsûËÀ,…ò6ïò~] ä7ôÓŸ‡§žþ°þùæéÐuC¿ü2³_þÇ_ ž³âO£ìfÇ~„0 Á(„¢?ß#~^Î~Ÿÿzê½Ç¿5…aºûþ<òïõÛ£½¡øO7óKï_Z¿áïŸ?MøcÃo–a›Ó¼¸gæ¿éó<áO?ÿÉÖì/–ù#úe÷¯Ž¤»|ã4_ ?¶ÿ2ÿdku{JÿòµÊ?eµþùû'ûÝO÷ó¡¿|ù ßA~ßû‡•~û§ø78ý˜Š„òÇ-ÿ6Ò{øÝOÅÐfùü›{Õë¯Éq˜×Ÿ‹O›ÿ~$T ]ŸþÞÕ<Ü¿¤ 4g™÷?ÒÛ {^'í=¦ýåÉþ°ôØ—så#o )þ›½ç_õ.ëÙÞ[È>˽öy|\þ¯÷Æns?'qÚ”ó°õÙoû|ÿéÝþ-Ë‹åÇÄßcöãþKÇÝõcj<Ësœ}nOÿý ¿°Ÿm›§7èq»ÇçòÓŸÜëüõTŒ&þ¸è½ì²ãÇþiÃ?¾WæßþÆ1:þ×_š†ûì?ëù[ä_úóœ¡(–ü6 ÿEÛ/'~ϸm‘?Ðÿ?kðß²†ümkôŸ¬ýô×ý†ñ? „SÄŸMü§(ÿ'öÇ Ý‹`ÿRƒâ—Ï¿Ãà7ÿÿÂñ_@õ÷šû×Ç_ïŽ8…¿ÂE0ütÇÛý«ÜñoYû»Ýÿ‘þi0’·¿þ³`$o·þçÁHÞ^ýσû5ÉñoÅί€ûuÉñ?‰Ô¿FìMŽÿŒ4ö+`Ì’yVYÇXWe¶º;‘ƒh‡U–eKõ÷ÖÿâÕ©ÄßÏͱ Ç~!‘Õ{¤z7½î6‘¿W–Ø]TvÉ›rì^úRɾ5G}J|Ø«Þ+Ô„H/{–ëø~ð$$òü‰dUÔehÆþMÈŽxo¸óßJã>Gú1È:~ RoCÆp\yïäÇDGħ*Š§ÈªµXørZ© Ø4Iû¤¡¿¹Zž~ö¿¯JEÛP̲ûýØ,/:Æ“hvFOžìç§>ç ^_Zª M{8‰8 tV­° ”<s›‰€rÆ’$ØNâ"à»1r¶Úæúv’%-€»ýqçQ¡3¡f7Ê#b³†Ô]x*~Çx¦ú¶Ç¤¨¡ÙÏÛ#N<Õ×öœÐEù~aÚ|˜Œ–M_”+‹–)ÙbØ}I)I¨ äÔ6Œ5S{Ň~b¥v·¹‡þx@ ‰‚J@ºR!OA¡ð °F©ãÛ¾U(VY–  Tö9™ôûù9‘ûþªm¤ë~ Þ¥T&_zZ'×C–ªì—š-í™ÕÒ3GD²w4]–µ»sÝn¥@@ý.\øùª×ª˜oÙ)¼^Y§¥FÔÏ5ëãˆK§ÍÓA¦Üq±óƒëÓ«9N-Ëö¸r_õÄ @³lz”zÎfT{§êþ8Š+XÃ(ÃŽ™æÅ¡ ÿ° õ‘×öc›é÷@ˆY°ÄUÄl¿€Äøj×±ñPcµ¥ùÖXº übíiS{VKüÔ ¤c飂ŽlCøJ‘lІÝ@ücQš-{½#<kåü’ØÔöRѯRW5¯}%êüH|ä½è.ç°)xB3³—4Ô÷¢Ù=?åH<¿WØPøÎ šìŠ^é¥ûdÏNéë>v]úÊÆ*Dœs>¤ý]›´v§Vk=…Šj¤¿§y~.®c*§|!™x (jP`>Eø|LÇrˆ&y¼i4õ—‚ÏðÔU{]7ØRÇJrW`üu MÖ5Ñ2jõi§qb8-z]ÿlÖH9/,{/*~«¥Ë‹Še×1Žv°ïµ=^fò Bç­«‘"ÜáÍr(R$þ»ö ˜?>†õ) ¬pˆ´+¡B±Ól“äÅ—Œ ²­t&–)«‹6ÐöD ÊD (+s&ìè*˜j{½Ü·5—8”ÑP©äN'ÐçÛ_$_~VÜæø=ݯW¤d!†€x0™°p±dMØ©¿×FO?_‘`E•¸CJ¶Ä.šMóBê™mÂ`Û‹Aì£LveiKt@‚IÞ"6À×Éã"%aÁÞºêÚóïN© ¢r¤§Èb&3ÍpÕkID†Ú †*œåš&Ý#°¸Ñt⨗ò©óª¯Ž}¼cxP^Ÿ·ht®V.\ÏÖ’»€qùo|ù<ĬEìÇlìÜÙs«<s¤T!íñþpì¢ NQePѵ¸«9e.Ð8ÁåNQ*Å”GéáÓP~ ˆk 44ªP»¯‡ÍýXÂúHþUŽaÈÊH4ìë`”Ž-(e-AZ.sï;/€ùK³»ÄílöÙHÛ×ÂÈ—Fþh2´´úšd$×uÛm×rÎlš­ÐáPws4å[†ß¼¾`ëp£‹vâ*{-sRÚÇì“øAjúÎé¢ói ©Ÿ-U«%Â[#’…_/q7 JG‹ä%î×pnwwÀ·ã*­µ1¦Œ?›ÿüZÉÔúÕ¤ÎÛAå7Nœ*ýÙÆM{Àµe¤))a9ªR G-¥àÄ·*á¯Ïd(èëÀ'û⌳DáW,Ü¿FןcÂSîHBq‹Žx&¬îÙø<Myc{ о™ê:Ñà3²¬}B@ÐÚ¹­A³Î„°w– Ö¶‚»S§¬y¼ê0Gv„¶N»ªg’Þœ »¼ ¿ôèS0I6”´Ë:C¨èÝ'=“í'xÝ[qv÷²YËÕ0.7L~ûJzÐ,}ʧƒ¬v$¦<ÎlÙòü´CmÖ¼f)çFïO/LK¦"üžÄ$jßuÓÕ´Ån`˜âì•Rªåáz§ ¼^g–ã®;ñ‡Ç¬MnÈìn¡sg ˆÚàI›h„:ƒPjYÖ1&ÞÑ);ûn°]{ÌÞsÎr¼Á‡ï:›¤%Á1åEBQOGjÂ)—‡xbú‘ØF'£¨ŸÙç“©<öïm"Wõ]qš)ë&¨_á b73 œ¬¹¢ohB¸ B©ò“j.+§Â”O=0ÞøÔ"_㺖;bzG4º×Åñ2è©ygßC/ÛO4fðÏÈÀäæª Kwqôœ/Ê«“ÝÄ¡vRS$·ÝÍwj€y'ÖG¥¡U‹ü"s÷<ÂíŒ,ªZéfhçLšÏ ê©0{§w™´GS˜å}É3úü¢m0Fz¤T”£™ p›!Rk»¯&4ŸB°WO,ô\ΛÁ^ëSs½è¡/¨À"Ⱦ¶ c§êÄlð¨F{¸ÎJV@*šv¨ÅJx&ïm…;’ñw˜)t^ f?´oóKœç„袟ÅÍŒA戢¯#»&ùx&7¿ë†àï@³%ÑQ H¸H—æDëó‰Œ1@{9!`%#cßOûþ}6Ç‚´îýÖ9c ˆŸv¬3Rà˜Ê:°Ž*FÕ”ö9eë"ØÃêég.°{¿~Nº7Òü67U ôWJd0U=Áœbµu ùÞÕàyI•ÿ|Ñ6SÂ(ÑÓ¶°Lòm,P~–ØUS!¢12”últ´¼Üd…¹Ey÷ßvÀ—@—¿íú5Û•ŸMc¡¾`ȧô­ê:© ˜©®Gªp}ÇòfßÊ¢[¨Ãêd *uºÈ_‡òõ¼]ßNß® cnâÑ¥XPÞÊ0x‰£eeñe•y*"Šxâiws3Æl©Pàž™áÓ´¶ ¾K~ä]—ñv2.máøX;n2oâŒq4¼â­Æ´9Ìùû٠ꃑŸÞcC´† °®_f»™êD'otPÛXÏuò«[… ã“éºÇ°é8àapDcÅN—Ò®_âFå”[Ç€Ž5âë†Cc)/úà—WS¼Òÿ89b@¨9Ã߇ЅÆgÎò°þC=ÁÇüD’½“ ÍŽÒÂÑ´Dv: S«¤¡óé_\<'6†Âó<­,ÑhÏê¦Ù79¯¾ŸtÉÂr(‡(âhG‡¼ Ö¤B Zî’!\$¼®‡i Rf'c$ᄹ”ö`4Ýb§÷c”_êìÞMu‡|º=¿º6…V 9Vâ‡aXÖ±h‹*„¬ô´Ghä«*Õ÷ íš)ocJ+m¶D“Ž~¢ôªaI!.¦¸¾Šùç§µŸìq,F`¡ªÈf‘õhw¾1cÙBnöÌEÖèÑà~¼²FÞDw"|Äü#›Žuu¢5]R1‡º¯§¬D,eçR26ûÔFÇ@¬¸ñc_"+g³èŽGk-?^ëËXÁðúâ@v««-ÿ<è9ÙïÌ<ç§¹ âßQŽ<îêˆË?‚@˜(ïp {×™ŠJAôv£ƒp›è“£Ä„ŽÆÖVâN€EåGO_Â~8Åâ‰yØ!„Ú4Ù©®L<û‡¹` Æ€Ô63›B~ÈÒå1sn÷3†'Öþ²Ò­^¹—tO]kþ™§ꉊûÛŠ²=-Ä>›–ËÎX½5ƒ^¬@oƒ*Œµº$ø³F‘J¾a0r(ކXRlÛ"kÞ¢¼Ÿ8‹ãªoGVß› ? Ũ?þû¯dš8µØ6—úƒx"Bx!ú“u‰ÑYa-@Ç?O½ÄóþŬL¬xì†}> é—Ú‡ÒÁrŒ&¿ƒÇUÌÍ[÷Ñ=¶–£#Þ‘°3nMÑÞïTتóek'—ÌYPŠ0¥ÐAuch/Y@Ó T“ftÀ–Š0Áí·¼£¶èÀPŒ[OzǪ´qûqî?öRËå7? Ø7ã‹—²,‹!/Ï4™Á<ô=íë~ÙY´wWM‘Î.§:÷sˆpÏi[7‡NT:Ï8猭² ¡n’ɼÆ#hð›_#ZCŽÖ¼¾%iu`oÀNWj÷4Mmý #x¶òçêzЇ°¸úõ¾ý’,(Mž°™„añÖk|F0´eàP~~ÆÓjm1"´ uzRúÂ3qûEÞàäQ¼=d;ÒÀæØ™…çNWßúg@Å\¾ùž\ é¶’”TM÷LTtƒA]‚rÔ™~†ÊÛìâl<î;©CŠÅâs»ÜãA®V/çFÏGn8Lt$£Ò9¤î)e“çmcàAí±~=%YàQ¯ òÁœ"—Ê'¥ š¶™6ZKTþ«)«÷”ïú‰½&¹ Ì÷C‰ʨ6i·kîÛpßuÚŠïã;ÑÚÛ'¡¶ïÅ0 {SºD™^-)Q CE³0#)_¾˃q*Ɇ6ï|¦œ!­Kì#2IçWçT„|—âQ=…¨ ñVf,â(i=Øü.Ä¢5yÆ2 :oŽr"Èm^màŒß&x‹„³ÞG€ô ›J×µøn×rAU›ô~ðÊ]®oRÁÜé[g ÓÛG°xãë[ÑH2ꓲn„Ÿ#¸bôYT8Ú)QŒ*s©­Ê®TMð ýÙE¸9Z b÷þœ HÕVÉgc¢i¸àLJ¸û³ÏÐÈN˜ Ø0}‡Ã(»c”t³—Äs ߊDÊþ }Ç3ËêÊðèé®hÆluSv­A„/kßÄ!@ojšÌLj¼löˆMǶ¹;?Ær½5ĪÊr·¿ADÓ–zHʽÁÕü+xfÍëxÍá—n“Zé¼Àð¹S7å³p™k¸2)g—[Ë«Vzñ&Ê ]8… Þõæ<gà¬0å:¼1ãÈÇ ÎP¿Äµ|™•6Ì4B'»¡Sí/‹ËLkŽOC=îf3ÜEÑÅ–7™™Ìõ”‚_*ɳà#  …V’D\Ée–¥¤0=Û-A;¾e‚/WµïV©KÈ,?V Ý‚¢Ä3¾ +<²´Ý·½ ¨\R¤«2{?Û6Ò†¦Î3Íz9r(7%¶ÅH—<(’ýê‘•ϼ˂¬|GÅ$Ý>¬kbùˆ#sŠ¡¨ —Q´A²éí‘e­d#xÿ%‹²û=C ,ã+8Š8´öïŒ ¥ λ0&K[:0¢T l®éì°½eÍB 4ÆÏYF”I /i<]½sÏW&± m÷x¡—2•%ôÍ%#¾/æ™Ô—}-ò@á°›´¸j‘Ãx5¿éé„3Pßö½#Lr¯gx°Ý”¦ê1/[ÞD~ƒ¢ ŽÊìž¹õ¹­€%䡨Óg puöcV¼Ýüt*‚½6Oø’ôɺ-M¦TC½Q§Âöþ[••Qî:Û«xN·í{eû„:bÛìëвAlcÉ@>ááÞBäã=+<Ô’¦{ËåRÿ‹¸þòÞþ4/ð„ ZÅC_B'¸—$äïPÓïäã9¥°( #±<~\Ÿa¦ý›¾ßú¯Pë=$ŒžytYwHç_ß:Ùv¹¥ÚÊ¢Òqa‚u6̘y¹§k,GK¾Xù|ïÝújä™ÀSá‚è5m‘)æ‹­ÀÝiMÅKì©y¯teæfÖkÝžÇq«8-}O´ÑÉCmV0ž‚ä<ÅZ; ‡o&¿÷R›Š¾pöò¤bìzŒÃôIî0âo:Ê÷«gŽ,e°×Í~"v‘Äó#bº€·‚“_HµÞZˆö¶lÔf^ZÖhú—Õ8”GÉ%Û%‘í; mC vÚ\á©¥ý362Ü£„X«ì½Ž$ÀQàZÙ‰M^¢Š¸lVÅ üélÚÍt)Ö(¦[W— Žþûè1Ì쾜†z¥¹á_•yaÙk6ÞÈZ[b«m0‰É+1MIÉÓÙ÷ãùÙb ÇÃ^Qî”P•æa=ÆÊè(þ]‰ÝqGÆ—Õ3ç%r¯tÛQ6Ñ8wÕ¨l•T>ÖeZAJsŠ£°½ˆ]æÈz]ö]’ÒžƒÄ?$}îèòvîÅàÑ¡žÝMwçe†GµNïRÔÑ»¾³^~5ÑSU±bT#dHSZa\Ѓ3õ<Ã~ïQYXÜÃ;er€YÞ5[näãöm®^SÞ5ícŸ¾qöôÒ—y21'®ã9¢°v$Ú¢]¢÷×®DPìUî vŸÎH#ê÷|lnç.I@¤Ü×|Ê¿6XOÏêÄlå±×«;âàMx„B¹ØòL°@çÀ½Ï> ®ùÀ©×ÃÐ`Áfº„O©E¼¶ªÖʨ}©“ñ£88îˆZF±"¶_©`uô±ñ(Rº¬| NDÏ·UJ±•†îI“¦ø·v; >ËÜIŸ›É+ñíÑJ…ž[LWÛÚQG½uišŠÚ©û‰«‰6@R¯dº§A}ÑkŸF>Œn$hj<Ìõ~àÔ!Á Òp9¿IlZã•>"3¬t ™®Íù.Æ7ŸÓP0ûNœœõ•£U=!N7VÞ7³D¯èh{¾£ÅúŠu„R¶¡•½UúC~=¸Ž^ÚoN[ÅxœÖ{c…Ǹ3]vz˜G~a°Œóþ3QáõÀ¿éÕó6Ü,Ð)åõ8‡£ymy OtÎFÇ]¨z+°Äíåí*¬ë ‘œÅ\&Ÿ«ü)›Ú™9Á‚—Ù¤©8i¨Ð £zå†rü8V™b]¸Dź¹áº¡ ÿÓJ+„–¶ dÆÎ|Qžê¾Œ5ƒÓDý½}BmÕÚ],Œ¹R¿«ÿ!Û x°7 „ý ›ÕÊ—žT—mC»Ô~x}¥zõäy¤5{Çžtþœ÷[ˆ‹Âöâœ#§u¯Tõs×7P‘K›dWOwv«;¢â`>SA(q‹MèRD#\&Ry F’M[öýâ·‚ð€î›ÞZ|5ûöf©)ôÀˆµvÂ8)h¶ `aˆæ>çaèŠ`×ÞØ‰¥Õ]¦‚O‚ý`F ÀNzh–‘*Ÿo#ÜÞOÙ¥ XâÞÛéRk:«ÆcXÏ ¹Cx ÅÙ_¡’òñr“©‘%³Lsõ,˜¾97éRüÙß ñ˸¾£)3^ï®&*Öƒ§! Ï7}¦£ÅËÂ]q,dÖ/5Ëݦ /Í~X’î }ðŸþ½+æ\(VéϵR CˆáÜɶ9ü©“èíþZ™æÕú V;ååkÞe} ^Ó™Åhè€ü¸§˜Éùy³D'¾£Ša *Cšå•Éá.‡¦eHhBd3Õ"r¸ÔR:x¥ŠY™Û¥Y‚%“¬O9Ú—òç¤N÷Õ›Dì œñï¶[·]ì»nÝì­:iµ÷'ˆKm‰zR÷äHæ*±ÁÀ™ƒ#ù@+oÖ¯Å=ôWƒÂÒ釭~šTK<ßûXÏè9ø5»¢é@Z3åáþr¢°§á„åïºâ9coÔûŒäht¶@ZWh;»+ˆ ùÞó+c§–Ÿ¸ÌÛV[ª<2+êàz´är5>—o¹tf.D‹J§`Q* ù!s([j»"Þ®¾h~ p¼£Uèicþaìä)E–‰Ü;ªFVŸÚß.µ#}k¡i5£ö-@»ÿ~wŸ-@ÆÕËÊ×9f-yî™f^áÐŽ”ÈP—æ]Ö ÉY+ÒOv7÷ ´|áæÞÁEQÐÍ,T÷ò2h®Æt›;™³˜O(†tdˆ.2 ¹þ~èBMb†,2tpË ;º=^]e„]Ömóáøb¦Ydè{ß.¬–P}Ju]¿%d­nI6š…8„ËI,‘£aÆŸÂC|zfܸ¤ÌëxËŠŒ-'°Å Þü8=×4ª{‰Ÿã,^¦ÄMpSuU¹°øxŽ”³~Ô Ø6X˜ð1„›»RSòpg¦Ü9kôª¼¯UO Ü—[è7ò^üM—û¦,Ý)2g÷Œâ»à4¼z~V}†° }K¹xªº§ôŒÛœ…t–’\5xp‰³ñçX*ay2lo:±£'‰6 ¹ùŒ9WþâøÆß5F”6DzÐvÏå!ìAF»^´à÷bÅPÜzÄ5Ûoòk]†E0¤îJ×,¡ŠÛÆ¢/¹#{ûé·”‚„M¸Ý¤Dtâ 5¤÷ç…Ú‘ Ì—‚v.üvoÚ V鑞Y1Ÿ#a ‚±„tÀ¶,Ä¢ŒP‘‚ …¡Ÿ@kxVR Bh¤6 ,`¨½–a_~¹ò[JØLB@ðÍæ¯’ÓœP̽£ê6d{ùÛöž& Ì2 7a©Í‡FÔ .„kûBô°æÅ@Þ§®´¡ÓGÒY‚*—jE7Ø{LÈu¯í¨˜Õ=Å]8ûed„ÎÖ‰tË\ßý"!Yݪ2‘è¼ÉÉvªÉ×’'œM™ûxÃ¥µ0T/9+ÇçÙ„8eíOç ¶pò"Ó˜$—r2„Ž„[ŸèÆë‰jo ~`cYÂó5‡ó*hoðyLj| ïªR_À×É®¶lXyã¢Ð· '`!œû¡îüõ4<û³4hvqÍŒì”?2‹=>)Dc‘i=Ñâš‹.Íɦtë–Zù'´ó+ß[%Ð.êÛ$B uUÉ ð°ïGµ vô¶š“ãÁ¢GøÍìò¸¦¹nêM•‘ä½YÐNZ-ÔÛÂ(7˜$À¼é)¬Š!<ÈâxìÕ||£kŸ}*xï˃_m'2Q<¥µ\œ!–µôø‚œÃ bí‚æ]).èØËS/yØÊYÒMPvñ€{í¸ÑÃó´Y¸Äµ^ãèk}8GÞ>¨ãàþÔø|3?d" }Ðõ)y—:>íÍ1šÓy$“ãè!°òµ‡ ©<>dM~o¹l°D•ÅVwžIE°&>†ÁtQÇuGå wQ¥éÒ˾Æy{¸pt‹‹@õ×¥)—°]%ÊOw%5û[êQȸTú,”FÚ–ÂÊ{ÊÙ¥U(L\óêûQ«y]kkă`Q;Ûçú²Í®1¶WE™V{W›GêIëø|ÐP“ÝãÙV“ÝIìÍâÅ!_©‰¶s¿œa T§Þ!< U8!’¾îÛôP/ Xž¦ÂÏ·j®;˜æ*å¡T2„+¾ÈÆ~ï'n*ÌŒù­‚»¾Ìbács†Œö ¸ö¸¥Tð"SŽó 2üæ[îÇ+¶.CL±¥Uú]Ú¨;Ú ãM®z8¶Ê”qgQ7^ÈžxtóŽ«2·‚8ú¼Ã7<øñÖn½5jq>.*7Rn_?2ýMš~ˆAvÇhz¶õNË(Ǧ¹™ê­?(km$‡{¬ŽË¼æFY¸ÝÐÀÁE¤µ¢&ã+äV#RóÐßIJgõ‡gmX†ì ò²¯òE;Ë&ÞcôOÈmC:z'¸¯Â ­ÞëuÕg³,#y©˜¶`Û‹xÀFÊ'–Ïo <ìqQ3 ùžŠö½Ø%÷a2Ê(%¡Ý½èë÷Í%'xuc¢áou¾½Iño!àT”¬Z}×ö,Aà+MsÑc+t}iÛÎO:`øHÇ4ð#I¡C–ÖÄCÝÞX.·(´»~¸4µ³ö/ÒTÚ!Ø\õ홳j²[–×Iy¤š¾t0ÔSL•S×ãÇWX¸OxWÑZûœ¶D\fHÍ•Ùà÷Q}ï) 'þüø›YƒT”, ùÕçÙi!M<¿5êi3SÍ9l¾‘ȾÊÚFª—Ó²£B!-ÝËéÊÉ-·ajë›ïšŸ£erU5MBܤ‰¸úÙ-Q²~Ÿƒd;øNT()-î„YþÍ"2ïDz°5 +¤Z0@„1Åå ¹ÒA´• ô¸ õA—u›…ö…š¨5ceEå®ÏàºFŸ«o¹øy~Þi|ƒ|±¸96¨wr7Ç7—~ÊwDßH?†”Œj¡€ª6êjúöò»E4ªxØQT½é¯"eæX7òw¥¡†òzgX@!k¿Ï~QÄiÒÜuæœÒÌY9çøC1NÔö–Áâ#0z„ÐOd,•í :Ú×X ZVpBõì?)j(ÖKA¾¬ÑEv'I¨#xÕÏ£†ˆJžezÒÊ‘.žu¥ˆì'Ì@†Õ?^’Ò{a‚j‚ñ"5}š.Ø›X¨4·÷ȉ§1CµMz±}úE¡°hÕ•LwáW‚lNÿ]Nð4BÁ% ¯:_#š¤ë>Bž:DŸó ‹ÿà«©Ô]–NwO¸ÕøbfÀ/Â9Ï/é çpL¸Tx‡ 02êo ¥U‰êÀŸ#yÝXÝZ&:ˆjz%å:!ãèºê¶%6*6ää,ØOK⯇¯Odõ‰ÄrùyØÞf‘„ÂNoeÅSsË#ná®/Eª{~òp”c¾ë€î~4ì>ŠRÉSM€Mï!«®009FCËû+_ÈëÎêIhë—s½½3›Sg}³GøèzGëWCàÏ?¾^Ÿ Ç‚€2ÛdÈÙžpŽÆJÇz3Zo'½³lºô ió+å[ᲚÏ&U³wµ§`¡ø:Sçƒ4£êê®…NØÜFd(ËZ“(ðÎt 1\ïvÝG©‹Ô¨YñIùÖ%ÓGßëQ×]äÜM‚P*]³ûÏIåSSí»¸³vÈ*Oÿ>MH0¾-{Ò³5½,X aïIv"n”\ ‹p‘ÂÚYcÉëò„Õsa»ôëÒ‹o% ×ofÄÚ]Øä¤þ¦»”ã_Â2O`Ú¦ŠŠ±®Ò{¢,ˆðPIš›óõI&D¢zo#¯¯f¬¹ˆIE ·ìô³Ø ƒ°÷´­êøo1²e2)ã¢h>³Pg¨µ+œ¾ö·ñÍcœ9žIìú†"³î¶,-Àmm¿Î£öUÖ˜éð·o~YÒYÉ„²'6qc'œá$ä’2”–Gp•8½wÆ÷0q¥€hJ§«-¡á•¨"n/슓¥ÖàÞ2{¤‰ÓXýU6zíÕ’ëtÌ0^—DÒc)¡èVN÷‰C(>¤åø˜PoÙØï–^,Q‘ YÀ)¾’æÙv®•êQß—ŽE!¸‹Cžþúö§ô™·TÁ`:;½Û¶áøÚî\)ã².«(ïÅÚB²oŒ8ûfÑÔô¾Ì˜©‡?bÐl'.§õ£Bo2_H€n4d6×íÎz–ÓOo¥“/ý¶C›Èö>z4„4!9é³'Ù­¯VfµvohÅ=ƒJ?\.´iï¢)î#¸_TÈÒÓsç•Å'~å¬+_‚0s6‹ºnÊtÃõvÐ;„ ‰Œ\p‰ÛDFHÕÓäBWÅUÎÆ÷˜ïýq޲Êêó9îé~Áâ´=Å ÍŽI‘x„ÁUJÜ`W4B±Û¥¨¨L‚9/¦Õélp~òç+“€,®^°4^kÃÒG³ºëÎ Þ½·M”yåÙó™ÉË~+”¹I Â:ʳ0NØ8ïÆ‘zƒ… 0íjK½ÇÑ›"-‘Ú>.|¯v²HE³I˜á Ç‚œ€ŠÙEeÞבXh«´‹îP!-7×¹îÍLb¨ÄLÞñ9–ìf¹•­ðzÌËG=¼È»/c‹ Û'7¹ó{¨k  91Ï:9õ}od.§èÑŽS_·  …v>¸edXçä¼vU±Tœuĺè ¼Ö¹dé¼y‹s—ø \u6¹·Ñ.Jõ*J0¤Ûã,G¢ß— ª‘v»ÔNηð·GäžÕsÐ(éŠP ˆˆÍÿ’9ú ø¸\ÂÍ;º}_Kƒîá€=/¼>ä7á? hY7Z™å{Y&ìÖåÑ9G¡•Eu+i©°)–%ßhäQaÝ ­â\ì^uÓ UÉ#þW4$ÍÞ¾;Q˜›ƒGBÄ>òQ%so¶½ÄHqÓWƒ³‡ý½eLJ=Hy 7+$c§SAb×ëqò3] ãu’»òçÕC†‘&lçªÐ }.ЇOT€ôë®!²èM~ˆe)€=VáácHm5OµŸ¢«¦ø%ª¾Uð!¶¯Eݺîû)má]HR˜ËÆÙ=N__›ŸèRUB§  ÀÄQišÜµlßxl#™µ¦]w^#ÆõÍ0Ï–ÂfÏ@ )àü²Ê¼¹ô¹€¹uC’œB|¾Éyãwßz¸Ã†ÄÀ3pÎwÐÓ»eN{K6óÅ/zà·8"€é¤_P¬r8?tãsÙöSòêìÒµ|ažLê|ëb`ÐØ|>’èmL²ýñöfe¼ˆàÇ›2ü¨6ƒp ®‰µbÀc?Panf¦œháÍäßrIæÎÝŠ¹6™È–”_ò§;Œ×s £0öf¼@œÆ ¿«3ØJ¿¬'7 ;ØLɲI°ÌqvaOÕ?N[\ŒZ쀃~N£”Ë_*Ö=9ËÊPá+š}šTö-Íç­ïG)‰T S|œ š-oî &ª²Q–sƒ¶Ÿ1HQBÁÌÄ·*#UÇ?PÄÑçª*YûvúµG3¿Šµ´™a1ЦQ.¼ëùÞÞÎë4Ç:yuëñ€U®ò¬¬;ù|?cjWÁÚ)¨‹ñã+K¢©”&ÊXmn£›eïÞ©ç‹hDu$ÆøîÜðBv¨s&Nëû=¤Óѧ?ò;êjU‘³0ÞD9káâíÙŽÉ/-SœØÈ9 Níä¢ Ó´RøÞù×è ôÖ„€öl-«ŸÛÅ·NÕá߯amÍ@,ÿk`ÂzV _§Ï²«Ä3оGJ!ïú‡Š…R” >~ÖZ©:&59Ð<Ìñ¯ùKwýù{Ôl© œÑÙ&ðh×Ç»'ÈÙµgãȬ(0ïÌ<{¦² ¾këK—ý‰   븿±SªŒxEzÅkDüiû[•È÷„Jý¸ŸÒ hg¹Òå‚‚¼öÈtü"q±$˜öÛD"O{|éïR÷ eùÆ!,•h¥¶€èäÍèÊ5ÒÐ+"X–ɳÇ{WdT4Ý<¯6SÏ7ÓÜâ6•v ¤f…¬X!b­L‚ üx1±#ŒÍ­ë­Žé$J;TlòÛ‘¬´`YóöÚ;kÜ üyõ+r?¹é³(Ï-¤}û™AP[¥ Îx.ÒMŸ{µNCôØg‰"ÅHä²I䆟Ëp¨âýuqå®ÐF*{úcÚ”ªàâ»`},ÀìŽøtŸïLÄ~Oæ‰#íìÙõúº?þËÏL1DÆtïÏOp%fѳޭÑჟ,fÙâ¡eO®*óÏWäm„jJ®¼ÓyS ØŒŽi›¿çøÅ…‹€”‚[åc'AÐ# ŸæB¹æs=`"áõIŒ—™G>GÆ{»Å a˜k`¶}-”Ø÷Åé¢*ì ,ƒ.4WBu¼:zR<ÜüÎ^œñžÆ[î¸p !ø “)~˜Ò¤ßoE'}Ú×[|}Üý¼Sí󜌇û:”cÖécw?ßB!Xè œ.zõ5,÷Ì¥oá¬)û_ ÞÓM|k$w¼¥I¸¾§ˆ„µ8õt·"”>¬!ÛK_¡ØòR}¢Oú‡³4w â hxqAƲ6nö2œõsU‘âµõ¯Cpv³o«l0Öb¼}& >e‰­ooV¨û€|xNp£ÅvysZfXo^ÑY¨Ýp4œ ñ·x¯É\ Ô|êwšz½ÑãÛ>プnkü˜ ‡¾ÉÞ/øŒ#q`+ ¡ÿÅûFQŽ=˜ ˆ‘ÿ<®:y¸çÆQ–¦ý82FŽ~T)a^¢VRÍñ¤,Ø]Í6:€y[¾·Xú´ì’²òCoâóÄé6¤ÛÀ¨pÆåµhTÄçõ@¶$>.÷­Ø1¾]z€:bŒð£‡HìÜ'[¥§_$ËŠ=‹­‘¼qm’cJ눦'2é||'ÈœãwîSO¿nÂ×-^áÃ7@<Ë#Ù[C î¾K{¤6€t‚ÃK«Ùç¢MÊê…¶]ZN"XHn«"¥¸Ï2¯-³¿9%ÙòµÉ3M>Õ8&EÍ‚ÑnX¡ ॻ.Çó!Xµí¨ˆ[+à,·ßd•ûñ/I_ÛÒ@ âyML˜ÃnÁèÂ~NÄ5©<ì>Œjâ⺀Ðå?)qz>Z×6ï%+β«\РÈRÄÕEi<·ŒSnmN4X™Â«ÛõpgÇo¯^·¬&5ë‘©¾!€1u„Ne8¡pÐhðÖåähŠpŒ‰7•ˆøEäáÓ ¼|ï»Fn;¾‹¨ ZƲy@¶)9Íéí7ñìÖ¾ç%/ï8¾«îX-Kµqͬ›»Ž·?HJá•I|MÞW£^C¦!zP/(* }¶ÞÁ”Îõÿ‘tÞjÎê`¾z L2P’ƒ‰&Ó‘s®þ°ÿy¶Ùb éÓÌ;F/ј¤BËÞŸªH;J)×|žåžA»±yQÈšÏg¦q¦ªé%æ÷“¡@ Æ…µÙ–˜ž .õSNç/_ÕY%/{ÃNm>L-¶¹Ü…X§«µ_Zžb©bȆÌq-K—á@$Æ#&ˆŠšªŽ°­¾nÌFT‘Wtõ·ì•ÃÀâŒW¾yÇ¾é €©ªF–­½ V_ÓÐ>òD^n§U3òïK{ì7§”ŒÕÎ;’…ð*Üòúä`¼†«¶#-±ó Ø{ y¥ÿúa·ÛËÞuÀ›GS+qn‚3c›™Jlô”é †9w€yš2ÃÇp˜œTÄ$À‚N[ƒ»9R}ÜùùZãºM·ä.ë²~xu†ŠV'eÉz¡• qºß!N¦Ÿ«fyDu»£Y€G˜ù¼¦ ä&~¾÷»«)vÊÎD3gcÏà—øÌªz4£© oœƒ8à·X¤,cÜ‚o7äAM— (28ë«ÙÕfhÍ7Ô$ß1SɈpçŒPÐÎU‰Npeç¹ÍˆE0oN¿3 ñJEB'ú†”u aýÝñòt™ÜÛqHýùúÒýäúbýv0é·£/êFfÞ}Q(5›ì÷{œçø¨] œã=‰š6o ÇmûCÍ€köþùÙB²D½ÆÒÃFQ´¸µÁ¬h:¯ÂSCV2ú´6Šѱ­’aŽ?€äµÒÕy¬é¨ 5Ž­rK­Ÿnu˜þ¹Èg:ÉX³Ù‚ûªå~EåÓ]š[ÞT»E&¤Æ)Œ yþˆ¸ê:;$fãåêWU[í[q¼T—E'ˆßÂAÙH32ÔÉ$þ•VŒŠœ¡R7mJÖÌ\ùÄCã¦dçè×3æÅ 4µ‘/ËLÍ+TîWÿ,dܧàÆË,…œÍa· ®Î5hŒÄùA&WI ä0ŸÐúã_¡Ž®À—‚ˆÍï—LÒ\›iûö±œw¢Éh]÷Ú¬ öaÙD°\|÷|Z9o;ôß¾6ÏèðMÛ$ s)´˜°ÝÓº” å»[ü–Ñw[ŠÛ:Ô>Âçži T›’“žéM Oµ/»Êé9'O×ÚðÆÁ»Ñ*Ø6.2¨ EBq,8 |¾ \.Ú÷玓»Ò“yC:„½Lãš°`áåE!äZÑ™•î}æ ’JÅhXÞ_ÒP‰U5íŸúƒ±ü]leßÐópáôäx‰ítNlߢ(%³k~5ÂxçîÑ ÊëçœVEÚæß«;>‚nõp…°˜næ£Ý¾1eZCš¡)Îü÷b˜ zš ¹Ò!™=ªoiº_²JãŽxçjžVOÎ\ÑcU%ñè¨nl¨_ªs+*ñ ¤zw؉ë‚j ÙßL4âöNÁ¹”rñP/äétiýK%í]NÌ?jŠa%žGFua ýHúžJ$Ï3ÉŽ­Â¾…d½ö;b#¨&™¸¸p.pL©[YPS­…Z^†XÁ;È\B;’W¹?¸GÏÈ^ÑVäí<õ è÷„¶'޼¡Õ‰çËyDlwV€é&zè?iýãbqÄíò€Ø=INdùÓÛÆÊ¢šd àbMïp(ÈJ²GÃi u- ÒZ½§µT ž)¯=%ÆäV¡'ÉBN0×?Éëzªîr ,ÅèK TÇghpnô;?N•Ï@þj(3Tü¬(õåm«ùu‡ÔÖcÒDá8úìðXâëÎü^õt6’ŒðuþÊ®'™PHe]¯‹#íœÇßÊÇ8Ƕ_¤ÏKÙ tk‡FbÉ"â!úJ9ÿ¹Ã ÓBe@ÎykwÊ*m™¬-)…õ• óâv/Y0 œqÒ×›…­w²¸€¢YDºÐ½Ö8‰=¦—¡&&î. ù#û$nèÓ€_[¶@´xš$k†æû™ùÅDü™ñ±Õ.ÁßTÖŠ¡=*R·qe„[ ¸Hé”^b ÿÈ1ÚŸZâhñmS4þØ ɦ¹A(¸éí»ùwìhp^/åe=¢ÈÙh‘ñð:æî¶ Ó„eÉÙ{ æ–…oãt—y'öQ¦¡•åpr¢›ëÃJðh ®Ãж~‚tÓ‚fħ`¤¾ŠäÚK¸ÂÐÑ+BË£0ޝ”p#jâžØzF,?lÓûK ¸pr •Úc™¯ñ¹vÕfõË»ó0ÛZm?Rd¦tp|é91#?Û„“?‚Lÿnª†BšC¢é¹Wâ¦â}¤Äý,S®ªÜÔ£[ˆ`ù¡àu…D«7j!z»‘¡ûA¢5ZÑ5aî4Ì¿Å6I"Ú"êŒ)pU³ Ÿ¸}¿LO{|U>—:åuQÄú±k?v‘"¯`w 㶇¥<¿/\p8‚‰’œÞ©ñZäÇ’]VÇLwmœ 1åáåì9ãñùÍ%ÖÞ"lÛÛ—Þ÷ tÈŒHÏÇÐßš„ !ó`fÖE´RA:YØ6É…ßI´šaY(û“â׳¾§­ÿ$V—a4Ö÷±¡ß=ë|ðžâ´kToËv8µ41¾N¦"Îûè[,…¿õõ’´ŒÒqŒFŽטG .¯åùg@O[ù¤Û«n¦öC$“LŠrr½n'~º>ÚžÝ8cRÞoµ÷'â ~..B[Í8–ð?š%¸wúëFGx¼òî½cäÐÇßæj[øQ²ÔÈ{Ø*8øRõzx£–àvTÏUì²s¸—²s HI®ÈEßùQÌO]ù‰ºbéÖÏ–.å«ó…ùx;w%£?dy!/ß™÷îK<°±ÈÙ(nç°ˆ{ñso9^‚‰øÊ˜¿CžP‹<Ô7Š(Âcç¤Ç›7‚}3Õ#Z— Ði\ÇlŠä¶É¶ý”sØÏG §»¤ˆhˆÚ¬ï×$vž†ƒO^WÂþ|sŽ¥õ^cÁ¨{Ê›õ °KÝ“áÝGXÿ ñ‚w@Þï×_3=š¬˜Kv¸µfÑ—Õ½„ák¯ÀÉGÕè|$¢»–ÓäÓ‡?¦—„k”|ä&/êHf6Êz¾²œÿ–±«\Z½ÁÜËêhKé´ú¾qî;ì{n­î Àëœ:æ?^+>¶Uñüjð„sÂD`ê_Uôp(1´¤#·÷r¼~‘ý©ùö€”ÄÎ(ÜB¸.¿R-=Û–¹VJð¾8øŒÕfÏ”-ÊÚ¼C(EU¤QÁžfoŒ½’Y çÔ|ˆÆÃ« ùŒضےõ:ý3Öy”¢„ƒ‹ƒy˜îaŸ@ŠØ}©¿ñ^µ¯·}¸Ö"¦=ižNb35´úŒµ&{?†bL5È»£ŠÆ3ôq†@)ÛmXqdá³êá·QýJño©¶cžëîìVçJnR†ááÍäA:2ÉN°„;k—´gã<\îÚãSøhföq±¤´1W èôb¢nUõ†|Û=D¤=Ä _ýÐhr$d Í4IDƒ{­U•+c¡Ú²j.Õÿ%^ÑùÍ72cÄÇôªè˜c4“œF¡)<¸ˆ™ç|eLr°ñ=ÂÙÁDÚéO8[ÒÉ[+gFHê ÜØþê6ë @š#ýš3+T(M mÐÅŒ¡kZ{åzèš6huÙí%EB ‰ïÑU“âv©°ëÃþÉTÜLvùÒ© Ð>–“þw§3i[+û%†d{f1€ãW¢ŸÈQÔ³]!ì cÜžÙÈ×GûH±ø§iWûV¥®6ãÓÕÉÓüÕÃE”ÃXÜ+’aÇt£—7¦>ÙPþêWàŒÝŠâ®PâÍA4¿æ¡I"—ð¦ùRÃB\/÷®uPÚ$Ïö˜ßɘfn…Fè#hô£O7ÜÙ…$½¨o>ß­³6%c†üe¼ßE¸»@ž ]š{+©js‡‡)æ×\|¾Oí_òqüñSø¢â¾# –Oö¨òÕ»QU ÷©¦‘Ó ¼¾²G¬“°U\:ÒÎk'Ç'Õ¯eJÛMÙø®ÛäJóoÝ#OnùšÊ€‡ŒÍÓ4/m J"‚¡[ó£ºÊ Xÿ–Æ4·03ð¯‰èÓÀŠz&zg&GçÛô5Ђ5ÒK¢òÓŒ´[H³»Â,ÙìÄy·J¨TJñÈ(î5À OEd%C·Ió‡Ñ]+RªßŸ§ E>åQýêÍÉ8+èšñÊ 3”>™1ïþ`; nXAmÕVi° ï\ D ó)ÑI!fÙ8èM\–Á‹ ‹5cË,_ñ–&a—ÚõKß×ÚVc‚Y=àùèÈXt™\&H¼и¦¸"q—ο¾žRitÎÃÆÛ:é}ÊÚÓ˜d±BU¾¦¹7rX„ìcéë¬n §‡1åÏ+Ùò;¤L±‹7cÔss^ði©Ê|wáÇ ½Ü-?ߎQa –{”Uï*NcÁSfÄr@e¸ mšBË__k\WØ#ä$ÿ;ñ° i“–.˰.B”৯Ç,ÙÙb¶ƒ`Ü©~IùöÆ»dì׊iü÷hÁ©ÈW69œJÇG€ÎØŒgâK ¦ôô…F i.b±—ŸuŸomo³ã–êõÓ”u^ç¥Ú¥väÏì0Ô‚ræÀ㇬@[’Uøð®—&‹štjÞuñc 3gpY‹®òרœˆÎÐyñ‰p¡ÔòS)Ûëµ>©]*?vû!dا=(ÿk{GKOç„ܯ+ýqN’‡Ÿ¼ÎH@Y#1Iz Ê÷Æ[Ûµž{¹Ìèë"ùVài.7óÄð—ŽÌ Ê ©sÕ¯)MÍ»Àü½pÈMè~¨Ÿ'ךÎ?‚ûÜ ÷µ½‡¨o,Û¢Ðçw÷N²ÙëOúp|Ó0h õ›Ö´ü(›Ú/àWó®ý à«ê§m±äº}S} Ë­m¼Lº}cÀb±/}ÇfŽC[Bó…ú3ÖŠEú¡)›ÒЬ^9#mì±v Ÿ_T ¯Ä†„b ôTmfQÑ PM.ãÆu£€K¸bqB°üTÇIŒR/¸1©VòŽp’Þ•(N€û[áã+aÐ ÀÒøéïú œëõ09{)èÑåðaÌ÷öcyŠw»=‹¥h;âRxT¤Zœèè—)?Ú’[S4ᇠ¸ú&§¨wÔnùlÆç­ *ÊDÃCïÚ9É£¤1¿‹”ãO è-çM¯Èpë,DgÚ_NQš£éOãÀ½«Èc×ÀÖì OúÏÇ7tod -™<áú[P`xœúC^jxlëðP=þ«’6Aý|rŸ(c=¡Lÿ;û,.£y Þ÷™‡÷—²DŽ[¸Â¯uôcŸ„r–úèÜ;®ú(.{c–œ¢Ä¿å_ÝkòÌô"Fil^ùG£BG²ÿ*%•>žoïníÓ!·i} äž®û«ù:]` æŽ6…!* :PgãfˆöW‘pS5®ñ[ߣJçHÒz¿»AË•aŸwž æ)GD{ œ8HR„áõ/iT,õ¹ y4~KÍgk¤Ú] 1«HÍ|ø×|‘™½h.©°I7ìb2. §¥, ˜ýû;æ‹h›¨æ“í ¥»k2õ|7‡Éj¿)ÕóùĤKò%i~mÑtˆéhìUÛ*Ÿ³÷OµÚ„­œ\¢®3ï|˜rÆAåÚhdûþ!~t ƒ™×_è˜ZM8ü°¥Éþõ™Sù€ud-³ä4_ŸT¨´d9üŸŽrèWQ"©€»8dJÁz÷ nCí¡õknç£é3¹Oö¤ ôr&ì‹ÃÂü2$¢z”ªZ“ÒÁögªæWžB(E<¢ÒÄ׋»Í?Où(¶çÎU²JY·µ#„¾û0—uV¿”¤=¼Ï\Qkìe¢ÙVi‡(B÷ÆæûÍHWJûÖ•Øùê¹í‰ÐÔ»a§A+²6`*ß§rˆC%æ"Rð®_ÆÁ/×l.ûûÜZô°ßâF²~fø‹§몤VXÝü)/ó31 ¬Ñþ3ò'‡ó­TCÅÍ Ç I/°eÞEþ¨PQ16 ì‡Hûü¾ð³+ªälqd^‹ô ¤¹îw±ç4XxÚ[6µóCì7®Ÿ’aC@,ûáÂûG^7µØJAœ•a†ü;˜.C= àSžø€ríãi;y€Ç¡:¹1Ñwx:•¤†îÁkî…iëŽÑß IÓ^Ñ®_µ¬ÓË  F6?õùh ë¾=—dÀPÿâEx¡©#Š=üV†)ˆ`è—Ù;,Ü+D~¾øÒT°½Úŵà®}žYÒ€ú¯FÂjçÍÔ|El|¹ÀI…¹Ã3Ôada¥ô6FZ²`YHøµñ/¡žleo•çß¼f¼h×—á]ÔÊ-=¨ÇÎ_‘)w5éVtBÒÐÈCeñ®»H~E_̼oó{/Æþ¦1í‰CÒy‚ßW¢Övk?Áu>Mo%­9ÖbÜ0>mÚrÏž$+9ª\¯íVüLìvNÖÃI—È¡`Êr>Ú ×#S}ÑÐË`®äZ6IùÙѼÙr8Â2ƒƒñ0Ë8T«ê75û„â_ûµ™œ¢É¨ä“þ9öŒuZ{…[u¼ALw™#qŸlºèÓG».R|ï 3Å’ÑæAƒ4úˆÍú‰ÖjvéžôpþÖª*õ*› Úñ2kÒÅr¬×Lü­èO£Ì€””ý°‰¾ö— ÐÜã"Ûßþhê0ÙßzG>Õ|ˆµ…°I±m5Œ§ªö/9uìþ>sø“¤Ô'vO´6TÙYô±£È0€Ã9Xöoµ\’ŒDi ‰é/‘7ðó‡NÆ‘™š…¨jç éô“‚ÞâUCÞ zU„ÿ«¼)KpBøtñòTæ§’>"fè%?U¡|~¿šà ˜Æ ´¼/QÖo_ð‹Ë^góq´l uûL 0âð^¼ðùß!^ÝÆ`‹“övAøóñõ Í­ø5aYä„äoqôN#ç{CÆ”ŽYø!Y˜£d32 XKC¥Ô1‰f »Ö&½ýˆ`uew™þh¼ñHsë[C…#ýPL·ì~ȼý·ãøQ˜ä†,¤Y;8žÏÞÚ!¯1„s®B楾•tA@¾Á˼C±gô,C ¿!ôuxzzx€}êÀ,Z@—!]ò‡CîS>~µë¿€Ù¡z¯ «ô‹°i†$‘‰Ûäu6g”µ«~p·Ó¯Wø›±üR þmu胢G¼àr6]‡êìÚà—×ê+}þZØJј¼0/„7Éó››(`0îu×Føþx­ŸÅ¢œ{ÈDf×Ó”½ †ÿÜq %uÓ²¤ê¹]cô”,Pƒ|?ÅxV‘õÒ’þöSL ·F>¼ܧÒ6ê½ììšÉ ÎЮƒRêŸéƒ¼&kಖX?´ñ&Ķ2ß4ýÄÙ©õä·B?ï”'m@å1bEE*žoT5y£)‰F·HU"æ‡Y=2M®\G8 ¢5úU¬F?1ä0Oˆ¤­ˆO“ôk¼1d6«-ÑHúúøÚbz"«hŒoà6mçú`Ï`7p¡"dIY"…FÍõ9’ábJ¦.²‘I™gÂ8 Ð# 5›=²q•@×0tÂìpTYv¬$JË›ùWÄYën÷óWè%€Eñ€4±û£“88–$³ùðA{„µö·ÄõbNä¨rkÉ%oʬtd bv}­/r“Zªc%nˆÕçb츕æëv`j ßÜÝ—ͨ—Ï®9/A›ß‡5r¼ˆiÞ‡…¨|BÞÖV?ü§Ò_¿­¥õ=Áj=rÙqÍC€P’¦­‚6bc~ F†Ì¶”d߯RÉÒô$IÏWcöŠ™‚¥³d­7¼… ™i+±ùæÌ ‚æ:aþß x8é^R ç»ïùFôY;p³òŒ?>7RÿŒA¡ „§}[«tO~£Émšð>à «z "¼–>ÑÀIW ·­ºA`ÀH«”q{ëaÄI8zµ%YÛGsþòŸ4q–ÜJ»þƆ¦>^£ä#²UyqŒ?Ôê¡'î¥âÝkŠBPü­I6à)(T€kâWòŠf>ñþü˜÷ƒm2}¶Ú­z‰>¤5#êàà'ðX[AGà ÿûŽó±(Úª©ì¥ÃˆîeíÌâWDìÜÖÏ¢^«ì÷d‰ä˜Ùç‘õ!l‰é?98Œ}ÊŠh(5‡„ ¥ú“»O‡YLýpDý惶ÍçH!<}sˆû3Îé}Znßy› ·Lp¿àÜö·î‘eI%÷æi ù4©õÐÌÍuÄ})}hü¸†8Š©r\ƒ¥}œƒ7%±MÝÈfØ÷Z¦§î¦žžûqMŸD)‡1.éê@ÇrØÃab¥íTþÂ4ÆÜŸóPÅ„£Ó1n¼tšáV£˜-Ï>e•#> Ará“Û,)H€o$ÎþøÒ:n’õÄõV½ þjB¥•â¹™á¬j`(.Å/¼<s*êñÆÞoöšµ[Æï_ôƒðÌ|I?<Ò<²Ù¯,<{¹HÄÞ›“ô…shöM&¬ÿ´L_• ¢~fƒ™àýs IÂÙWã'[¡lÏã@¿tt¦U÷ÂH,*_†µ—¾ý‹>†ô®Ùzj,’4ãEÒÊkiÈÝrz…f͆b’\Kºùâvˆ˜È£K…¿üètÒ?¬Ü®ýŽ‹taç¼ßq–m”½Á»Ö'þ‚EØÀgT“wËÚž—~ÕF£1V ;èõ–¦tì¬õ<-bЗ¸™Í_«dõ¾d=y&9ÿÉæë‰p¶óÚo‰-ý޳o>î(¬1‹03³fÀ7MôÎFvT´&b]Ìï•;Å„ð•ÿŽ[`‡ž¿jÈ"Yйº#öZº•—dÃùA£šÖóÁ’·IóD˜ËÓÌc¼E—pµšÙ©­·e«ÌÍ:nn?,QY~ ßáÑa”H¯iNÛü•¬º®``L(¢ù6I€¡À)FÊ)råBÑM¼<7¡*È*L© Í/Az/㘬ßG‘Ö×Áw&ó.Ý íi/_ëNY¦4¹'οÚ`$xŠ› TëÚÐð‡ýÿžÑaBC´:=æ—ö‰Ÿ”ž7Ï­pvܸÄÁ¬õðN7Û{Æ·%êÕo €Â›†eøïÔ~ú%xÝr(ˆjúïH•×ê­…¶ŠauZ°8 ·˜#çPá˜VU˜/k‘d‰¥ÀÉI°ß þñ±LȦ¿¿w´Êé† þ=Ç«¿SŒî@µ4-¶°ï,Ús¯cKTFR ÚY‹žä Ôbäu½pË1{ôý©DÖè$3Kú)½ã“IÙ0q`U>mzéÙ×1ùä“WÂÑx+Öšó&eâÛJµ/ƒˆBþÇÿíVäíYDåø*!kr-¾;»sÞ4 ÐSr¿W°ÙZ‘8í×§Xr`ޱ÷ãß·nuÉ„·™V–©ÌüZìæ<³vD'IäCæ¼Ã>ç•‘uyqrLÒüë½ÍYè¿‹M¬¥; Øí :+°Å”ñÒæ(ëe$‡•øßtã ¯ž9˜¶`EZòíóZ»dÉ®×¾<ñÀb™Z5ä—BP5bsÐz/¼K iÒ‰-ŽÐó ÚCþÀ_+Q„0ˆ—;›tƒõ”Šb8ˆË« ToÕE >:…)ˆ2B%ñ+*=®ðZ®æ ©¿½“Æ•êc²éÅÚ{ÿZýøº¾q'õeÙÔ¹²ù€L=SÚYJòU‚SÓÔíǾ̯Mí:ïï’Õ‹lì8š†H«£øeÓÂiªimN¨’–í¥KìwøªìùÆ·èj‹ò݉õÉ4–7Rm•(êfp]’ð1¨ÑS8iz£’oæ5äœû[[?؆ûVlŠî€ t°…tCGh;›I€„ÏLÚæ8Fhì[*²°½€Pugiu/'NŠTûÖ´ðΓ÷)Ò_ÕÚ5âM˜í½‚=’ ]Ëzë ¯HÂudDü5>Vƒ®6|O§žsgUrýà .ô\óÙœ"±È˜Bi3ÅÎLî(Š_šoÔXÒ‹—«Í›Ì”"h½¦ÏÜè9¿Ê\ádã⬪j"ÆÌŒm“X@l‘Ù°—ó]Züô‹MرÁ¡Còã«L”±Åü#–™·¾RØØþLNoÂpE†9üžfÓ%ë/–v ÀÛÓnŒ©jÝ'&1ò÷š Ó¢#NmTþ%Ö#NµÜ8ç¦o|³Õh“ú€`œs\½¢‘²ZE0;å­<ôýTÚz‰ÉÝý¡!<-Pi˜SÅ‚3žæ6¿EcôÐRÿ!•O[Z%¢ÌD†…gÈ´9àަ.óIú˜(+Ûµ­Ò”:¢vXšæqCóeb^+ì &rÕ«²««ŸMÑ C!ùÌ4TïaZ‡p8¤¯^—:é&ÜËŠRŠœß/«:˜›6ŽÀ¿Û¡ß÷¢±¾»M”þž8wÔp_; TX÷„'´W½R ‘ˆ©£Z˜!úŸûoaòÇ7Ï'’‘),Z޳B4êÒAG±ç}-Åù³óö(©5éÒH8g*ÿ$¹Ÿñµ?á9„.ŒÔà±âݧ¥–æhQÆ…½DÖv§m uÉŠX+“ÛéKNÄ,>¸Æ“^ÁGøö”Ý¿ÍHì!ÿ=þv>ÈÒkc9÷Éî±É’â·ºõªxÍ×w8½š8n}zœ“½9i Ž­N0=átñóPJ¸i±H&Þl:ïÉÉž„)årãfò±ý‰Ô ÇÐód‰ÉÐß–ÀÆ&.?w㬸œ5 ü ̆ô{á΄¿ά¼çœn:6†|€õaóµjEþ2˜9þ>Í`‰Ú—ý* ÊðË¥Õ}"½”|€qà?i‘>óVÅ¡Wé sÀv©€É®îW½î®jð@a`§A wŒ¤Ô„ǵ‡q¬o/æ¬Û–pê­8ÃíHnühÖ´U;‘)îê©òÅdEv{IVØ|éT¶£]+¸^«‹'ˆžø,Mìg­‘®GÌðè„nÈ5›€ñ°¸‘z!: w_"›qçJõDm YŒ—VO°SßùL-ï×ðf®¾4rP¿l~“…å`O §Haß^ œb–ûp® ­ú*Íéç búoê€à©­]auÓ$̧DJ>ú4k‹ ˆ‹îÅÁ¢dYHº©™2ü‡°6ç.|dÀ¼p½P[ Ũ,½—ÜPÁÐø¯à6w âOZÀg­×ÛK_`­Áfã3š 餤104ÀL-4í„1áÐ#ý8w¾c|†’Òþ¿ùim‰BD qré-6Ô$T¶SÆm¾Èïê4Š´Ù'þ½\DÕsŸig]½]ç³ïëÙ8"¬hÏ2©È9½cûKß’õ†- ²{xÍóÖG½KS°áÂ/tñ½5]Kö Ïùè„= @ì­ûÀ†&7S½=ÎÁyƒž ^sL„½„i3´³vøÔ&–‚&%#‘—¸òRT3űoÀÑ9wÙ‰©—|’ÂJõ ÷†ôpZïÝÈÏ|ðµ¹8¿ùWе„X>íB¸G䎄§FŽ%DzÄ6èüS_wE`æò ÕiK梦UM[Ñl64¯v!ü­T wTß Ùc/Z‚¥LøP/¹o~y­mû"÷iâ Ç…´§ìeÀ—.ʇ0ª,[ÓN+™$’hMy2û¬æÍA4£õÌ5;=ôðšÕÎZ@ÓŸáVEÉÓ|ü*"é2÷µþ–ˆ<þ#@ºø½Ì’‡æ¶Õ[¶)ñnŒ™'ÛÊÓƒ?<ÊŒsuº5f{ôi˜ÄUƒE—Kño~X£?½¹Èþö‚¾Uê,™Ó¦Pêöt²‘Û_ß1.Á×­î ûä€t1…šE^O*ˆ[ãÜmƒ:.E’ü½ÆŸ4Ñ4Õsœ`¯]­³ÝÔhq$ ù¤Ô¿êÐÙ¡õ’u 1ÿÚÔ3´ÌÍñgÉmSRÕ(P!t"ØöB3¯E`r‘éæ!QÿRUË9fÃÝU <4bÀõF»O¼ö-¤áiL¡Œ):÷íZU.uNfʤ›9Ó¢l.<=‚Mˆ‹å± ÀqÉ‘8dÒL7Q`Â3bªÏñ_(¤ÿ½?¥Jý%k¡;ÎlþîÅö„”3…øçC–aŒaTFªË­U-…œR?€LóÎôÈï¬î;:@úÀ©W;¹@5+/úx*¥ÄO%k*’¸3²VÉŠ¥ö1 üû+¶k–üb°k“DiV %nȹ"&_õKªR—$Ì–â¯{|D‹YO‚_kq4Ïß„«'bS™Š¶ðˆÖXSˆ`þNŠdhaŸ_ËG´;/Î1@ äBAdÝä:ã³H,\§,¦׆d·ЮQâªÕgлà mK²\ð¡^|ÝÚ†‹KSk~¡˜•Íf㓆M ©dÞÿ J3¢sôF"C»4¦‡®‰Ÿˆ3%¢ÀÕs–±t´8’êK†³šæ>¦Ó¢’›…ä0ýF¤uȹ#â³×®K…BªÕ!¼ éÐèÇjc,àRaCߺ%DîyöÜa¯ F.‘צðkMõñ÷¤dI¡•ƒä[Zw{âTææÎge©AA?’ÙÚï'ÕÓ³·—Õ©np.RzW;<Ÿ«r'õ Âd¤¶´ßüí7ÍU““,ý7»¤ææÃ¾º-¾'_ZÑBMdGD±z«z‰êÅèülOŒ"ú™Qkè?ûo¹Ý "vY…¸ ºjRÌùM¾rYàt&ákÕeQÏ dr½uM•Õ9ù~Ò'0?eÆçC’ÌLàÖÈh{öÔð?ýEÿ5Ìê žÓÛo>N٠Ѷi k|7B}ÝpÇrU®Æ\mBþâ誗çR7¶4bˆg¥…p–óæ(æ@É'ÞB‰IÊ‹îTQ[›Ï®ÑÚÒ‰,Õ¢̬ZðœÏhe&•æ ¬D[ á>®ï§SŠDÒƒ[4‡Ìʧ ÚËçè"˜àÝÁá*°HÏWé:ƒÔp[v¶­ŸfÞ“¿5ƒRMîp#}>£  š>h ¾Ë`†€ Þ¯AJÙ4á‹ B‰xbùÓëåA˜ô'´o}{]©~ø(#£[Ķú!Ý—|­]úרـ^½“x7uÑñÂl]Ü~°'‘CZ²vÞC+3ØžHJzà"º/2Ä»ÔÀÍìÅüpò÷½TË­î$ê þÙ}*O†ip—øÑDøÊq:ܳ|õ™K^ö€çßë„Li(ˆRXχ~``вÑi~+,€½# Ÿ09Ch Iyœý˜¼à:ôô0ãrhò;×8Ô\‰ f´°A bÑ4ŸÒÜ•ýe;ØÄŠu¾ƒˆæ"þ‚ʉÌQ%«¡¬Ì8‚w5Kú–bzº»þ;¤rûS ¿s½hjY'µíÓÉ‚|÷¨6N’¬±ØÏÓøbÔ½ÓUŒ´å’A¥Ÿ\ÞÉŸîbè¥áÁ#"îë§ÔºzˆÈòY²ídL@ZWç>ÙoPÝp[¥[bašRš'p7$p'~RÑÏùžøææ¨@!/݇ {Ú¶­ì@ˆW5#’5À¦¾ž pëâ4™Ž3¶”j]ú¬Æi™äÍßwç¥ÚA9Â|Ñ9ýž±vÖÖÿZ KÎ¥°^Ù—¢·ÀÝ{#‹Ân9ì.³Ç Už´}óöýÖtÓè›uDZjû–«Y²£$A.ësvœ 1Ù @ÉI¡šÏ–Ô9.10žÄj¼¼¸©HªÕf¥'4éö2\´p@bˆ%û©4/€(ôÙG¸³ <€ÙÌ2R¼îEž¦%Q~ÏmÈ4yhÓÕ¾í¤ˆJ×ò ÷õ§†„YÉTóù;<\'ãQ+~5{êEœ©wÁñûo L‘Í?ú—€éåù¾Fª¼cI›×BŽ‘á!¿¢=ßêÉ_¹F˜–Öߪ‰áÁ5ÐÇ´«­‡‘Jká‚êîÖTB 52 /ÑáÏ”Ã}ˆC&ÛzHRKEâZ³3S"žK…b Ù¸cóÉ¥žçmüÙ·“Õ>.ÿÊýäÜ—~Í[Ù3(sà²)—h™¡õJx¿Î/ƒð‚Í£!bØ[  »Ü–Å€‹Ù¸)oÆëá“æŸÈ! ð)â÷í¾¼€…ü³û9·*¢^ç{¹Ž÷oS¹ß6I{$K?J °´‰i±mØc’é71Øåg9´@S²®¾ø¯òUkõù<R{0ŽX˜Sï Sð ¢§××ÂÌŒI w›ÿÞ€½Uéœ\ÿ§ÇVÕs„s)ƒEܤ›'”þH:/(<Žcp²Q5™£tJì™’¿§éKÌÐêeLc;0°í4>ç6f ÈWÂ^L½µYµJU‡a¤TL»†Üla&ä±û-Ã^Oóö§Õ(ÅXêRþ»ÿÛ?¨¨u èKJej#v0XLm ä¦ñ­1šÀíô‚ͨ=­KJZÓÏᎠý¹)°(ËO9p¥Ì0ï¸9œ”68¸œ‚ˆ°ÃLjÂ:Üó©¤ëÁ¸¥·O›×c›e¡¹$N'~˜ÈM\ÙͧÊZ›nðwÚCq¼ÃìÛi-€|¶7m-rĺÈðÅÆÔwôòºö¾ácx¢øåã¨ç~ª¶¨´GH¹~Qñ«ŠµÜ…iÚçuu} L¿ÈôKÄ{Ö= %‹( 6=CÏQ󫬛Õâ¸õ#•’€ ùÉg˯ÒEfG÷c«çnoªÔéA#0Zs9Üëû¼u'Ò™à @'=ûÁÂfoŽ1–-ñ+Ê” ¥:„ÄiÉ?FìNî”^sE5Q¢àÉA/À‰²Ï™„]ûù~hŒß]Ú“®·µjRð§irj\ªŒVf»ìApŸº¥¿ү¦Z6hnYåÏ;Pe¾ÑƒM[ëÕ­Þ› ¿B*'‰P1eÞ}¤”ÿÞËš…¡ƒð­GOúÍZš›A-árYËQªk®Z[ò>gû¬ÿ­³ˆÏ‡±ŽqÎ×Ó"òùÙ‡–³ðæýÂ0CžäÈ2m‰22Ø¡Œ†‚Ö@¦8úðóÚ;M’vú»#ÿ7çÉ.3Þžµ‹jOìt”Y¸n—Ю[1”9ø$o¸ÉÒ{Ë+§Þ¸…ˆF‡ƒ™oS–…£Éß8b.©öýŽ)§êúÙ³©¿1hH‚â~¿\çúšN…CT!Êc£¼ßð²BÃ¥¼0ÐaW‘¹Ì0Ù†/ç ŽÙ nL´%z4P(æi)½ûâàˆ2a°Æ`ÆWzdn!#ÅéÁšv‘ù6LäæBi·Ÿ]ß½2L-+xߪÂT̤áû¹j; Ÿtù•?\Uû1õýâT³c)•yu Ì* )¼ÜÍa ûäÖï÷nác–¡IÖR—¿'ÿØX¤AÁ ÊŒaÅy‡Iû\9¦CžÒ”ŠòttÛ‚Ïtn ¢:ŒKÀNï*K–·ŸùeÀaÂDÌMvÇ<°E¾Ó„ 4eN—DÐ4Sªº ¿Nä壮Êi;½£©Èyxض*ë¯"‹§ÌJ!‡8ž24'ØXLçå~Tàs?f;Œÿ.ˆ¯l@$TÔ^g¼rUÒÊ" ãSH½»Pö4JN—¯Sßuº^Áç'ukGÂç Æ$,öۂש›>ŒÛÐ]°®›ù÷Žêáüi7ÄcEUaq6s©>|ßþÎa,ê‡ç(¼«o†Š¬ƒŒ µ/ØcVïåÇH°ë6¶ƒŠ²>A±fÁ`Ágx¼¶ÆsêÕÌ»%Ú°zï¦‡í§±±æÄL×Ó(!lÑ¡¥Ì‘_ùÃzFß³qóÚÙÁª+¸ZlþÏzÂÞŠˆùÒÿîYþ’ÒÜY”)DvrÓ¹7fò¬Ö+¤Ÿ«KÓ™ï·üç¾Ý•s¹sÆ”£}vÆ„åÁ‘Þ•Õå.‘!q®â×¡Ô ó£)Ë=ú#™ ¼á `ÍÒ31­æÙë}»XfÅå¤_Ëdá͘\—¨*ªwG'Ûɼ^÷ÆJîµ!6àÔËk/óÒ¸:»ヽbªg`g[¾qïî)ä#•¹HxîZ+ZgvQ}¢äP6[/ É#vÖ•èD¶” Yüí² È@;«¥Å[rüóz½×özŸÿÈŒlÒúçHOÑ[À-OɽŒù?ùe«9òaÞcŠêëÉ’ AA– o𖮨ó}™Ò%Gðudy©ß×—•Ã3f‹X±ê…_ƒ [à§¼^êúè¥`Q›ÊxôÆ‘PDBëíq^áiÒ[SF¡W¼½¼;oÅ”&×Éi˜Ùå[.Š@`ž¸~‚˜~:|qÎweÎ7owCP€:Ô8êidpû!ž[»´>‰¡©õÈ}&½èIÒÊûËiòóiË>õSWl¯_/„q=}²òÙá¨tÃäagb¨wy¬¢qPã×OjÅ"$ürx=é xÕ9íµ‰ÚîùÆ8/°ƒm·SŠ<ÇV™†Þ•;Ƹ•?Îù¤óVpS ¢ð«ÐS ’€’œ“Ètd"gžþ²¾^»q¡•`þ3çCˆ'…ªï ßYáêz™% »Õõ%ye &àbE,èâ£-ï¹L³ôà ±Ó¯¨Sp×C“K±/U±×­¹Ä~¹?F¸œ'}`_Mv3ÁÂß.@”Sü!Ý<· jæèBI!‹–^·ˆdÑõ÷-”z­ä½ 5Þ2mYÛU\ÉW®¬ué^þ¢è—Z‚ ·Ó'gÃ{c“§õ°r¯"·`2ØlÒ3KkG©2…hC4.O)Kˆ³›&ñ ÐÏ÷ÆäOª£ÈÌ ›¦µ+_zÊ  iY9ýÛ+GàçêãÞ ÿ$—¬-‡‡¢8IÝä ®óC.@˜,öª6€$çã˜Mx : éJ/– Þš{¦ÏMÆýÚq‚¾ncF/•Õ1ƒý;uA#¯¾Á¿(ç¾äÓRÏvqÀŒ›åÀø“)gPÞf˜í’[Uþ^IŠT?åËÝgei5¥á”à¦Vë.(ëMe׫#î,'7°ôÑelŠ4÷æ–Ø#O½áÔé©ïòº‹É;Xm}húŽ”µ(éDqùõ1þ1«âHzxKqp€2qËu7ßFF(Mïç9òo¶™ä^›û¬%¶Y‡Lº–¿ÉG.ôP´¤óåµ™7Ÿ*Ù¦–±QEªiéùu_œ®È›šwÊВзX?\DÒêï•ãBºþ.έóËÑ„­¯M™qðàñkã•5EŸ þ¢*1 ‡Æè›ÅÙÉM=¼Q(T¾M™b¦ä ‹ 0CnW¤qZ¶Óê_äåô9÷“cÚ¼J½Fl›à›†i÷~BÂ`%]‘ÙŽy¨éoJ÷ùCgÖÇO´ä<}]'ü&Œ/äµz„ôÆ0&¿!j—ãàÚGêÌ›='…çs"ã¼ß³C4­~-‚-‘¿žd²Zߟ:Oï‹?Öy÷Sõ¿ñ»›N©zv,@Ýrõ z[tfú&{-«(Ÿ"ºSžtpÔ!Ñ Ýžœ*Äq[7}Ïüj^9÷Gñ÷àȪm¾—­¶ul±Ød²¹âëAãQÖÝ"§§rº¦|€û¼ñ‘j½W=yˆ«Ò;Á^ÂÈÅݾœ7þ˜*‚ bߺT:@Yý[í•Ú3Ü-»´ð$´C´ûþë\¿ªœT•(^Ù½Va!·J˜ çðÚ&Çý·'¡‚ûòË%à˼Ï!1+”MƒøëO é‡´PA´ëˆûÔ½žØ«vI½´Ki”<ôצ(—R±Hº,‡/2X4ÀÆ]7 g‘k¦ÊRh=ÎíÐKxDdB¶Ê]#75òÔÁP`ÙjýA3/|Žþ†w$Óì!â « –È˵߳¾|ƒ~ˆ1‡ù‰ÅqÝ£ïâÞ©ø³IAz p¦ÇUºŠyHÿ6\Ì‹iïÑ@oT%´ +Âyä¨"Â꼆¥ _É/¢ÃçŒÚÚ–ñØ?,œbÊÞMÔÑqž?îeü¿€?SÖlb…³\c)2:÷‚¶qÁk+ãºþû²8(Q%U?éÛBå’CáÑe‡Fý&JŸ«¤J¶î¸îå(Ãh“6Ú¬”ee½p&ª¨¸„µujÊŒW$ŠAýc†¢¬Hã`ùä5là‹[Þ´k­¸7re’¥ÂmL <)t#>¡®×ÜGð²šÇÞϱj¤1įe§m$-tZú+’gËW'Šh8t ð…Nâõ“ž™iƒ²À2¡§}–ü“´”®Ÿ(ÇòV§3qÔ%»³ð,R$Â$+°<«’®¤ö}Ÿ Vø/Ìm ZúŽ€@ß´›|¥š²ù*9‹ýmÁtûé?.¾®^-Œç‚& iÅ58äÃ!,ò•½îßUÚTº§l¢E}Ü5 Ô!­e3;Qcð†Öõ:7Á‡›£VÍÙHfÓ rÒø›‚#Aé†Wô¿…2p=RÊ;;Œbò-˜¼é÷Ȱ2¿N¤´AKY›¬þ[ãôWcý©:;YobWW:Fþå—+y˜R7gÆÑí¢Bs~”u·Š?âñ7†þ›PoÜ7m÷§'WéëŒO&ì’n9wÁ~–°ÿÌP~Hˆ´žŸVgË>l®}Eä—ükYêkžWßh[rá{²Ñ{ éNúû%d"“Àƒ6 ç ¾È„‘Œqˆ»óEšÀ)Hâw‚doI zÌ´-AåÔ£õêcIÊv9NÞOW/hKûó@t#š2 á¼zqö„’ùŽiBQG°b}¶%z†#eÆc'õRïô‘!ª¡¹>ôûòÔe ƒeüoØy@ÿ|;ÞÒÃÊ-àPò–¯0¡Uþ¥h²Âníß ã­£‹bŽ££Õ]¨ }GäAåRU§:ùßD~’y^èSo=A9'^ƒÅ¢¡/Bš%³ Ý¿¯~§‹W…E櫨¾Q:º=ä•u ’IÿAHÿHñUN+§ú¾¦2ç-¬=íä²BæhMZðšûТü(°ìvªõ‘b)Rî*÷¿ÁâÙ|DøùÉÁ·¨$ÑjŸ¦—³&S$f›°í´»Æÿˆ×¯më@5ãZ+dŒâ ¾~30u`n²­ë¯¯)§; m2z¨+ùp«ð¯8?ßÔò°Æ¤ž©VgÅäÊÊÇÏ „X·W"ÖËß3ɘkÈÇEK´ÿ0WÅ<@Ø›g§§þ‚¯m¤M˜[ÓÚF"œ~«¼þÎ ˆù¡î^¬1¥Yä£Û!–f×ÐbïQu²¿"ty¾Q½¢¬‰ý¦¾Qµ“”¸7Úotæ)9ü-A÷Û¿õ»ì,*’âª×‚ÑvNrA ªL„­’2}.ÿFÎîr´™4gÔéQ) lzs–ê¡ù/K=‰½Íþ}—b?ne*-,D·î6L¤W†~–YO’þ:áhDSÖyŠVávý“Á´S#R¡¤ñýÐãŸ~Ùã5".ŽK·ù˜Ô›C£ëxî÷„ŸVàý›lKá|Uê7Õï|d¥@«Ú9›=WH[Ójðw_ºV•´Ýó{cƒ?ð$ÝùäÒà¶ø }—å°ìüzõíÁ÷T_ ' wö܇\ÌúêNÒ~A5yýµ‘Öe𠕦š¤ñ r{»éÑ3ƒvŒù׿¤#n§‚-Eý.´Ä~éxJƒ+þK¯yqS{yQ*‡ÐÑÂÂ&>wPÁW°`3ækø”1k€A!˜ù7¢ú[»¾NŸJg££éÓNže(œ÷=XÏb õ%¼ZÉö›÷(ÛGÂáBÖŸS€”(æ_K›6˜æ§"³1æ ®Ñ•áΟ¯°‰_2é1»ŠJ›é™0ñŸ“˜¿ßï6“Æ[x CšôÉ”· {ýÀ)ãVj‰2°–±þå]¥¬u*9ô ®ÔM9æJìTÖDù2y6Ÿ¨ª\L ¤yiº^XþB&ò¦C=Å!ûr…Qµˆ*.Àm}Áë_¡ð —ä¿‘¬Tw+0‚·N‚×ñð½Pk­h ‡ÐwÌÅÂGZŠÛ®ÞÈ' ¿=ÂPöü-ºO*ÎêÙUçõi7v}£6¦ CŒ´±Ó èĦ1˜JVóÇ`ìÕ¿â+PôJGhWž„å—DßôûåÄ”ÒCAF¢œ¦¥» ‚’hÇÄP % ,ü_YÃò•ýï;J¦Q-u·ŽvôÔí Î×¼â‚Êô[´òìï0sÄD_ 5¿˜l'iN?P®P.àNž·Û4w—¸ÒÆŒ*˜uí0¦™éîbïçZªá¡zާ£ËçïoüWéuh:¨¿ul\°›mlv®2¾j¦•¢Þ½-Û«¸LD"­a8‹{ðãgƒ‘›[a\ÓÙ ÑÌsI¬–vÃq_\ùîW‹ãPÁAñ»u ½Â?*ZŠ8‰Šˆ¿ŸÕeKf= š-ÑpUFgtàÚ¼” 9½$éŠKîÝnoq=×·ü+•ðw Ç(Žùëë²t1½Ñº†·ÃÄ¡ã)Úh^éëæ¾î‰Õã9èçøå+óÇÛÈW^›üÖ$ÂàØuÚQ|@K¸þÄõol¢ÈTåÒåƒ*hüû¥ZA{%ƒÌ“G*‡«Æ›:aE‡36×Öbˆà”‡·úÀ¥g®‰tyk…™>9ùììTHE°Éö’/cË´þ2gqmLj÷øÜNðž|Ìð~ï„“’ÏxS%[©¥M)6­únÉ t …,^òМ×'é\åZ:,¦Û}¸ˆ–AóS]Ï÷¤û.×ë[îo’m›¨ª}„Çû]+£ÂÈÕë¶5™™rCæÆÜ *Ba&¯k¶kþˆ¿Øß¥÷+à±=ãøó1¨Æ©[Ë—ð<ïáûâEéös*}·†e¦8Aˆ7ÓiÞÏzä O¶;~ÃBmºdù¶€š4Е;CX¹ôkå[—YL©®W“ô-1Ü“©öÊÒOî𕪒Iëê­ÐoúyI‹HÛO®g$Æ…†ÃûUw›áÀq®Ñ Tïáû-=rô¢þïHy|³1ŠeZ>Î#™LmHO>gþî.@‚´mÓ\ÓöÛVï.@¿IŒÚù:nôùÆU±¥PÖoñ’ݺ‰ú€}­ z‘š ã¯áooú@ðyı«8°ÖO¿eáÞžæ4ÿe¹Ë´ç/w@>šù}„ø|vC“È‹àß/Z±LÞx¾%ˆo+(kÅ«“Y @t0° ÜÃsXqÞÛ…R§oªKNñ€x,`jø¢GžN.úÏÒ Ú#>KYnjýÅW•jI¾‰¨hñzd¥–±?”õ`²† I×Ê•“ÆÇ4±RÒ3mxÊþ7C|§¦¬òáíù{=âó&¬Õ—4eõbë¯ãÜ æÕL—ª'Óõ‰c—Ô]„·ó§Î2a±µU/Ë2y ›:ú»h‡ÈrOu´X;lÄ5ûwbãš½ç’Âjä5o¤z¶°ûý)_H°‚ÎÓ•Il&I\^ÁËʸº8ÿ-"rôx…Ös².ó¤N<3K·¾ýõ‡ ïUFâã[É*"q¸z]† ðMÏA¨,g‰õ'ú„ͺÑ,'tá½b}ºj òt „üí܆]òiêHÖɹôÇ"€1‚ê„f¬¤ñ72Ô•[ª˜¿®¾²¿ãTÂó’y€óç7"]/mr¢ÆFŒ&öû²>6HfG}ë"sT÷ bü®Iõ³dV…` ZIPz÷0Un­I˜„8] eñëø|^|dŸó¼vÓýpQá(äÙÚ'yHÔštv÷ø[ã7ëb»Á@ø·èó¯%á"Îë T3õgÑá‰h÷a›~Ô¢¿ÙX7Iø¢Žsþ΋ŸJ/éH6ålðf&\Éx$15Æ  …f*:¥“m¶Ï/k`ä²0ª.Õ3K¾ðÝ$¤L=÷¤Uì9}ö¼¨Èå6îñ}¢a…$ TÎö„­©×3!Ì#»ÇöZä"“®¨æEm:nNÇeÃäÑô«¿¹fýn5ÖÞý«§™ï£BeAöjä˜ö·¦ï‹¯ör<ïT¾~AðUÛ/™:LMß¹wq™t±#NÆÈ /ñÖ G÷à/†*‹€¾-¸@°¯bÊY¾×šóÞs×Gy ³žˆØÃ=¥ËÙ^7ø——Ü÷¬sèãù±vBܸ_f0C·öq-Ñ~ÍsÀÒAs—}, ¿àr§e{¡y4o³aŽ@ƒ×KNGéÓÒJ2Ý‹VþŠŸ°ÍUJç¯DæA(Ëw«µ0gλyxcJR”‹ñõËb —P>ð³ïáS¿«Þ˜ïÇ” ‡ ž™bæI=r1Á–_ôæ;ûÑâ·¥€5ìè_šl{J¾t5m ›s¯$wlq×V_LÇë,j²®$Úú|$é°¶CVYÍ?Ö#Áo:V8)UpÙùuÁ2…ŠŠM;š€ ˜h¾J ÚÌ‘k&‡qØå ‚cP^ГÍméÆxæD*$¯6't?Ý<*WòtûWL¤y×ï.:µ, †×Gœ”6þØš¿ýhV5抽Сú:2kõCcÂÒ¥‰ef^®û\ÕKÖISµ¯ðŒµ+jo(Š#ŽÎüW÷åƒ;mÌá“wkMÈü^ ?º:œÊ òŠ1OâVŸ§Kk#Îö«ykZ°WN‰²þð¹þBŽbx9P™m”ëHgOjÛ™Îp8v{R¬˜ìß߄ÌËrj}kËRY¼ù­‡¯Â ÉGà Dm|ÿæ£<7x¨¥7}ʬ˜0—æ»fڃꛡœøˆ|"ÈAÞˆzVž¬_öðÍÕyÒå¡AÝçy.þ:ð£ž`Ì JÕÍçCY)|¼PXÞþgÌãT>â/GHœ Pl.ß=ŠÄ1úõ+—]¸a#!¯ÍàÌA>¨é¶Îô-€˜á¬¸eÕ§ü“ÜËŒ¾˜XF(§Hb%qš“6‡Q”–ûöµT¯=ã«ÏÊŽé*Š¡zõ7Ð’oËmKMÓ|ŸŸ÷›4­5¶÷UªG1A¡yWp Ùe¸âg»¿“ç1Ãi"Ï\)V§dÞžÔd—ØbX#ÝLüx ƒìÍÔ¼¯Š,)”@v‰‰À>Ç[láÛO"ÍÞ†ö²Ð~^5úü’l6FYÁÍÉ×¼g "+zueW4$ø'áKŠ““á¨tïÉ!ù,Ï~9L$bÂð× zAÆË)½7)Ó×D©‚ô8ÜÚrQ&:î2îż³+íæ•½ñm®ºÃB¤êoª¨Î yu Mû”–:Õ¸ûrK¶ù©ƒ±¿ñÀuÉÕ(€é&ÃýѦ‘‘‹wì>hŒ:åŽü°y‹/Oê»ÛùûY7GuDC?Ã;–k­ì¦q»Ôf :0_Фœ’—~¶âl›k2ßÉ™†Ôüü§WÔTŒßä çrŸ *›—{ñ§ºnatº¤o œ“‹D‹z|RÁ"ˇ/t+ÑôoÌ\îÍ̹ð@"_Úµ`s§òfîö[ÊŽ"ä¦` x²pÆÒý0~®¿œùDd“{%7²ƒ òMÁjG Ƹ¬ßnÏ…jáþ«ßTŽ>k=ÈdÌ…¦ §scó°q@µ&IÑ#1ÖCµ–Ü·!švð¬¢*àßÓ„\yr¶áq"Œ¿Oöžÿê_™Ÿƒ®«šH´9é”ïFXÊ¿¶pèaéôûµ ¤ïA©Ö–A3hÔÖ\wükl”þên3ghD+«ØÅŠìD#ïÆ,1›á¯ùþnø¬ŽͯNðjŽ nÕIÆæE<¹)ˆäkI$ÌJºïÇš]Ç5ì'ûaE!Ü_9———ö`K¶kÖ—Á¦=jH0Kø$9×3/Q8Ìò·Ž§¢¹Ø\d1O'ÑÂVÑÜCþúïWÁ ç ™N ÂÇ/~š¼Žè©¯m^ÍÕ§~HV)~ZÞÅ$ëaèe¹N´üôSš}a$XåVé&Å®iœù̬ c`¸œ8fó Ô8`÷š´'›æj[߯(’æ+ ÆD7vcÎìY×1J´®sXb ýÀ‹ "B[kÛó]5³¶”@¬™‘€™Þ÷”´¦¼…e»DñSv’ }Sÿìsæ×ñèß7b-[Ϲµ¦ÚŒm2C¢Lrrž ÿm~îœMÈœ}BýdÉv‘A‰ÐóïhŸÏû[Vÿ— Kv;=‰AO2ûı][ו†k–lNÝD ýkˆñhþzÒ$šr>Yzö!ãñudì­3ÞÏ2d'.Ì9"§i8Ø¿ðrÕ&Í«°j”9 å†9d€¥¿•ˆ<¦Cä)Fç_IM´Ðüðt½0$]>¢GÒ…3lÖ4òè}™7½v»('”‰©µ/RËn´ëÿ¡¨·ÄIß©‚é3•°ÂÙ ñ3K>ÞÆD"Ø¿R"€ˆ*Á´ÿ>»Ï¦à#×øVÖ'¦Rò/FÛp#(’˜‚1 `H—tg,ß~ën"d‘ÆJ¾•AÍ4¯‹/”m”^L&Ýß"ËUôÅŠiA oë/ÄaæJl$I7 À¿ÇöÁ ˜Q/“³˜½~Øï¯i[vH¦…÷H·aæ §m¢#1Qd»>.2> y]9{w'‹0á·úÀTÝ”#Ò†xñ0=H5_–.œ˵z;©ÒyÁ¨Qþù~ÀSÕ…¢²|‘åýÉ¢bLp˜MBøÛ—sZõçdD'j[‘–\ºOÝ¢d4y›ƒt9ü=Z_†¢0z“4®s»ö^ …èZ°|7zÃñþz1pÊ}jÞQ®7[âK×6ž·úAøy (Qм½²É©n÷$} )/¼:Ý÷Ï¦Š¶^}Ë.# < ú•—0Š=úI.Mí$‡ã$C§1ÜòçwÝþv] p^•»÷Píï¹3ã9Ê›÷r%HR/)& K`^ÊÌ—éôÞ®ðÔùõº¨ÓG6šªúXJûÞ1½¡‰ã¦'bÜM}h)òsÚn#çu¿7)Ÿú…zíøê Á«^Ò4K5!Ø™I²œ7YAßýÑé\,̓˜w$}¡‚žô¿R”T­Ô™Qet6¤7Ã~úJ§ÜLI]RÆŸ(ôßÅCp²Ø-­\]mTÆ [Aje¿ì˜Ñ™‡(þÆ©“åNûñølI³ÀÈô+“½…Ì ‘%Vò“™»õ!å‚B:B 8¢'·%*$˜âï¾~Tª‘¼¼€ÕÞGíõ~4¾idá1£bßÏb—<ÙºÍ8®E¯[¹ÐÒ‰žÍœÂQ;º3„U {ä›y´ "Ôà¥E‹†´éÝþ’ÆHú\3ì»9 áîyijØÊ!ô7Öâè©ù]$­^Óf4ûÊ9#£•`Ÿ”Pâ‘p0ã‹ ´àŒ_W(Ð\ŠQ \á[+ýk··:þTiµ‹+¯Û é“A@†Á 06Ý2Ÿ\³|\’ø@ (}$—zyºÀö!d 4Û¸´+üs±r…"WQ}äv¦—øy™¯+DLy£fêSdÁI߫ѿ#³µGÙ£o4‡è²l(‰\ÇØÍª~²µ"Ü—ÆŒEÚõrb\ª”[ªUØŽróýz&ÿûuYc0’ Æì+ Ó®ìãŽtÑCtµ`‘’ŠøŒí=L­·Xª|Àpù{ç1HˆõÐ*ß¿ƒ„ZÁ쪉|l=½'9pᤥ¨gê¼úå(‚p“Á€R¯^ äÑÐê¤ÜFŸL•®„Tæßt‰ñãSlE/£;µ~·ê<‘¤ã¨*—‘Ÿ}l£#ØÇ·}ìÉTÊd):$àa‚>ÙÙ¶zòïÑ* UšÉ¼›Íd>y–´ö–9qÙ©yÍÔ'±%Ñ(y3ªð9ÊW¬ëz{ëGz„¥_•6Ò¿µòtð(ô·oÕ.Ë1ý¨±=‚2¬¾¢6Ž6Ñ)Í‹ ò-Á*##pj»dܾ_C>Dvоm´q>Jã&@ËûèÓåçÔDÉzuzT9ö8qÆúÁìó6*ydœÐàMŸÒ¡2`’ɾ¹Fiž¡9}4îs¶;`¶öDð;¨m_§q1©˜U[Ú k¿]¹6«Þý>‘Oïf[L+*T䵩×ÔîϳøÏ‘źŸÊc:ŸwÔj¯¹¥âÔVß'ÈáÜèö;àæÓšjr™²×)Šî;{¿™Ò×Ó@SœÔÃÿš2>3—€$.…üïÁVy©^¶4´œÑÍÑš¦Ø‚æ]]f‰$¤iÓi«éaÙï_¦‰÷ÄL¨ºô@l˜Jþc3†}ÌÔ¿LNk=ÙÞ©øxìžÎ9¹ç®~Á²-ùiëÉö0FJýÉÇvŠaƆ·cá»à¤}Ò-]ûàÄ«ã[–!ÍÜDK \¿Z„›!¡†þ:h9ÁÆ87ˆ!K&í¥%™]âáPÿáwÂâ}}±,æàÈ¿'—šî¼Ì‰Bè}û>7þ\‡(᯴£T¡d=ü xìŒ1ä„èeq ¡yÜj%¡´ Ö šÈƒi‰CáÚÑV9èß\æmj¥aÅ‚áy¾_ʯ @‹g Æõ žTD¬uý¢Î̤Tˆî{Ñ·áÞâx O,±yŸ­îª“iøIå¤òJ°hFBÕ€^HÞô3lÒ9ŸüÛÐHÛ•™Hìæìç@÷H‡þVCÑ)³“i“SrˆèO™ä‚â"ÈÚ"ÉÍÉ;$ÞlùhBÍÆ FJuK®g†QeTè“‘RfŽ®ó=ÑÔᘢC/ ¡ÕÒ»@è¯}}Ú@Å3]/ÞäÕr,5MM ¨´i#S±Nà’¤Ö_ÝÅ,'¶ûÎ|Ùo*drýI›ãÀËʇ¯9ÚûΑíGÇ(öˆ]ï¿VgÅÌ{ÄqB£;Ÿ‰6þ ObÕ PàŠF´xˆ£}þ¶ÇÑqKl[Ð×ä8¦í¬å`Î"/ä¥357?äô'V$5é|°ØªRülqÌ-ñHš\l[¥RÒ@?ª€'z .` „Bö#@X1zQ›?qo=t =v>Þ˜Ù"Ð/I€PùÜÄÑ™³“ yýØ\ê¢!±±I)üdM½¸ÛÛüÜr)a©O/4É!g ‰±9Aü …YØu}.]~4:a$†»"aq©篺Wß·­òáY¦˜˜i‡÷D¿É\|<ÊÂÉ ‘±ÎgRLÓXÛB.∓«À¹à|Ÿ<[ï]*!½_X.WIfÑñ·äâÝm=0c¹t¾Ð!ÃŽe¹? {ã‹BD)ƒ1à»í®¥¯H’‡@©¶©ÃÃãÛ–Òœ+õªÛ‡7GqnùW¡ÉÀ“lÖªH¦|½ëˆ"”ÄÂsÛ“J² +ú‰^R޼?ÉRÊý•n¯€—œð^72úFø­Ýé¼8HŸ[ö0Öl¶ÏÝY—|”MfZ6-éÆhf¡Eiޡ؉dŒ¹¼§|G3§@î_–óÂo½Ìùå‘À›´|[Ķº¬b¶49ª ¾/caj]ÏŒêo àߌžú/"c!ŸÄ°ø*º<£6Ç©F}m`YwÈWAç—»b)=Sƒ/ÓžüãQEïÁÃÎÂ÷žÿ²¿o#vuÞpø˜¯âîa¤Ñ |Àù}–<0ZrjƱæÕe…{ÓòþÝ}âJ.ú¨&ÍáI<Ô¼:?_\ì¡ÝÏ'»—]¹ÃÙCfª/%S= ø:]eÏ­àFüí³'½E2ítÕâ–" 8§À¿Å(¦EŽñs~°·…§nôÝG)±_ØÎà­ °³vü7šHmï4Ù,£‘šÄì*´À4Œo"²rcËw›m—ùZ·X^3OJñ 3RËÌy1,`ó†¥ûUx3õ >'ÝB˜IÇc…SlÄ'î„ „¦¦Žpê¾ÔNÐFd›öHë6£‡õ‚ë»2mnà“f£äKáis›ð÷K~׫‰ñYªxÊ’7­1Ë#‹Œ¢ÆÜØÃ#ô(TÂb݆ãáú9VgEœö¡º3„h™©zø®nM•&=øÔ÷˜Ue@ôßDèÅ?þÈɳ—-üzuúk srö‹+)\&‰€ÄRI3¨"Áá­äÑñ‡#¥=ÞWi6ð¯ æ8Zw}ì´ûBfsIº4!¬!÷ÉÚ%\…ïDʸÇms±u‚Ò’ f•¥¨þ¸‘GB¹h ÑJФÙ_ :“rs¶’~ôdÃ#I]Î&ršÇ^ÐØ#ŽØ[õ.$=úA w˽S£ÍÝý·¼®?¸ù#ÞH~l_Î;·ðC&\=1¡´Yé“I¿eÏs?ª¾! œ“Š!èö®ñÔ Ù’Þ<žvšv(†.ph,ö/rhs­szŽO~ϾË9[fü&¤ü¢¶ã9!uHåþþ`eÿ+I¿ãI^¸_‹-óñLuÔƒsÐÖ¯*†ù‚]bzaÃü8n~ò€r‡ïñ‚/kôûò#cF3Æqï¥'\T€ëO÷”—bœ °Â€¿ê0NxW ñÂp\üþݼlE­òz ÇËõµÍG"Äá¾0R0¡&G½T²û,ƒH ¤x_ïÏăÆµe–=rŠ¿IrÒ]¨.fñHÃø ׎OÎXððä~là ÂmÕ#y’6^QÙúq"Lþ.ËÝQ’+.2ª’û†Sü–ç'ÏÂ9ª1M!ÅÚ6Š!\&rX`G:‡·Œ“E´õ¾<‘®Ò¨¾.NRØ_‘¢ó“ö¶€íÂóæ.~l®À«üœ™¦AQµî¯Çµ±R’ûèÖО%Ô µèÿmÆ¡f` 3|‡°á"^ }d¿5É!ª4Tc1¦áb]‹ËÝÝÁ#“^¢ð¸ý[Ô#á7f—&³\×ËC"ÒºÉÇ_‡äÆÂ¹ Äe9}µâKxþ*O'MÁõóÑIýæøI_ï{uáækoFúh Ó%×éŸø=FN®GnATbí5èVqK¨ŒŒÜ¹[¿(«fÉõ üãJõV3ű뇼iˆË Îj._Ó¸x0â8[T7EXi?—»ïËÄ^¦ö(z¶™æ… ŸåC³šŽ‰zÌŽ]9ÓÁýÍ)d€¯÷Ók3mëß„æ$˜t<«‹Ñ>)8¹%>Àè¥ –0*h†-™ØÌàB‹ëúT&"z\ÒÔ@04ïîáñ·ðÖ fþåûëë=ÉÍ(¢xèu?TÛ‹~Îáè#Ãü9YAëD ã*ˆÈç©Û¡ƒ4@Ó¼@—{9[†yÛ*öÁ—¥µåØ?f)®MT“ G×r5Rx©ã¦w΄m½ÈÔï*¡4èIä­És€‹¯åe·Žgô¥F_=\ñÂLŽ6lÔ·³"iõðÎ0í“yg ÇïTXV‰[¨ÌÑXÆaF­ª@Ü©¶qŸ™ϼس ]•Tnü7‚ÁÕí…ÆÌ ªÔ©«ep«xoL0øW™T0jZWîÅŠÀ´Ã$=§\L ›ûY‰–,2ùÑãe[Zånøö„Y$Xu‡5Ùe7^m}h•DëS×~Û9¾Ç±F<õ·Áyªbù§>± H­-Ë0ÓÑÑÒÅú£;‹x‰fšýà!xÈ1Äcm`÷:Š—%gñgpfÓ!ßú[*ø[Ì‚]úxqƒÖn¶ƒR?- ¢õŒA^¾·ñR¨Ê5¬Y ‡¿©zz^,k£ý«èô«U°ôñ¡ª¯Fº0‡±R„qæCÜf¦Æ!$ öT5í¹‡ùe k¼&®èÔ ¬ªgšîŒìÈëЄëú¦º„Ø+¼¢Ò0¤ø\zûۋ×â6ݾ)+B§GCP¿eyýÜܽ'¿gûW`Õ?:uÈ”wª·*¶b“š‹Ë¹¸âW’å¸8Hp±ŽcÒä‘úérzþá}RÂxdi<–t±þVU¢z‚ñÅÚT¸ù± þ>}ô,,¦M _Œ~xv(ôH ™|º¯/Óák«7+ð{‘ò©±1Ýh î‡ìªÕg5׉fÁ+ïÏù6]è`HÝëûoFÏ3 ½ŽoC{CÄaŒ1i=éÂ?·½Vœ_„|”âñ4üÙÚ+r¥–fÆæüךʩC',SNüaUfQi‚FblûiMÞ2<â°³ ;–.Ò¯†ðÝãR§°:”ÈT6i ï¤ù ¿Ø¿ý.xc—¬çäØì߸;nl½usÚ.:Q]£L\L¢éÈú#p#rÑ´àÁwMÑ:vAš(eæ¹\ª9ù.ù:ÊTK½®ôñW>” Ì Âk¦ŸÚ¿¥]HR |B–Úxs¢zc .Ê¢ûÌÀN\°ƒžè‡"s€±yÔ²†Fñ÷ iç¾ú 8{‘Õ÷¾~ß¡ªF.D«ÅCÂzÀ®¯„Æè žëKtüï1Z{Z¢jmœ?¼iX=yòöƒ|¢,ff= ­îq‡ÍýÛAtŽˆ¤ [oÈ= Ysȇýp;9€€8UÑvˆ3¬Wþ‹4ÐóÄÆŸk@ÿÕÍ­–ºQš}Î^‘š³ÑÓ °˜>ï‹ñá@yª]¥0KZç¥'…$-ͳ Ý¡l*;"–@Û*žk¾ôéŒ÷# °s}{ósE¿;'Ž¿äöߎWRD¸Õ˦‘Û¬3:R½œA|4Ì Ø~G¸Sñ•]'QWê`ÑÇø¿¯çUE¢¬<Œ¶sÿnÎ4Ó4ÇE•º4WχXÒX¶ øvõë–nÀóV¯²=ÈjŽ‹+/2‹)¬äï£?‡Î‡tqÅKY1«ƒ¢! ¯ÇC¨~· ˜­øˆÊíÍl;ê7Àôœ/}„{ÿ&ŠQÕÕ¦ØÝA¨¿Ç©Ÿ‹-µ7õ+þ’£ ì=™ÄðN"†éÂW—@¬†{ÖtRâ[hÞåëÀ¹ŠŽÔÝ13ÏÄ!„+2uჄ¦ˆ}ayðõõ}Â0kþÖðÕ ÎIÁ$_“z‘£L¨wK´ÛGDš"»”ž·*Aóú ܧ—ØBT1ÐÏÏÙ;ŸÌy¬T¦g«×« ä'n|yy²¤Šd:jIJ£çVÑžŸ¸„ 1c‹7ÅHœ¸xꇆ½ŽÞl¬tzär€|Ï1ÚfÒ'-ÔCrn¦Uˆã Ò Å<¥½ÊåÑG97î‘–É©¼Â^'œ÷ ߨ‹Ù’b˜Â’ÑîÐib"Z ¯.å(b]fà À:U¸˜[«-€€Ò ªhîo{‹~-Xá§âm3-¥QLäJ©È—JÇh/Ö¹œì\ˆÒ¤Ì_gΑuy|ñGQ>Àñ Í9Û_×OˆŽ¦i$´Ò09k“€3ï%Ûao¹U!'iJ]™–ûƉJþ5®q>z Ýçø:ücÿ*ú¯~ç|·qbȬ]žWõÙèù¸œµ~×+åiÚ…«+ýæö¹ïW=þ8IA²6]€æ±¾ñë§}uZÄ Òפ‘”§Çô€Á÷þØû0V4°‘ªVkÿÍ%f¬Ly2B;Séù"Ó7©¥;-€êÄMEuÚŠ‚&ª‘¯ýWN±ù°ÑOT¨8¸Ôés'#g{ÛÓÃ{h~3Ÿà÷E*+$¯ËûZô»‘àÞ»ÑÏ?†$” ™ûa¨ôCnˆ:µü”J¸`c|]1#L¡Ø›|>ØýÅü-ãÿ8:$G Š^…= ¼[b„ÞÃp sú¡'bÑju ²òÿ‡²2‹ú1GáG-69+¿lC-ŽÑjqA èÊ.¿RR½¡aýðìž7•šÙË,¶×Aá ™¸9m˜C×ûì!@Ü”æÏ&½h¸áëÿ†>@ ° ËrٮǚÂ,q]LŸ0kóçÎ¥P×™híçO `߯äX ´ v±¼ù䣖eJ–Hð3º8¿­ØÒ÷‘w%™ÚSœRþ1[/RšÉñêU°gÔ=AÖ„ÎøwX÷49'ŽcÖC رUG5rü³›¨¼Z§M¯ê£ùsÎd~/Úâ¼8ÔD-¹aYQvø›N37võfK›“F£Z¨î À!SòõæàÖÅjJ´N‰ø¾_¼'®Œ‘éèãNC+ù±œNðw¯¹";gÈ+¦2RÕ¢ôOê 6/zègæüð—0þ©“ìûèÒ*‹õ rïM]ÞÇ£²«}…î í‚i¿Öáê×`Ê9þ:¦`ÔÀ>šÏ’Ï›è´Í íʾ8$x5^\>y®+mÌ$®cæäª©ØŸÃ¨ÿÒåÂÜÎÿhÖÃ.§=„¾öv´û.^fJ¿ƒˆQÍ…Fp°9 Mí²/ÂÇúÐ`r§âeí›7Ó„NþÉæ;v5·WdÅÙ$°³£ÆÃB%¸õÒVÙ©ê &ŠaŠô±c™ -„*|–<—*Ó¹ÎñÇp­\9¨óަÁ_³„᯦˜ù5Mé;â†<3(ˆû9k±Fdl™uÓôilg+b=2º¸¢çof$#‰½•¶'Ä·BÏÐÇbÜÝÞåÛ“O$Öƒ,au°yžŠ1RŠ:?Â[ôVµ",p9°ä°KÚÐroaèš–€Ò7è¤ï¤nèÆC¶vZK¥X8:³qi¦”Uý†xÛ”:ÛòN|N’È”–4{—Ø2‹«ãÑY²LÎ’Ù1X®@»Zà:‡ð+Sœq G6¬¹R¦”–“(ùR qÄ—¢†D_mV?$ø&z 4óõ bGÉ?‚æ~¸0u®ÄÕW“›þ€±WZäË0Åç¾~›ÉÏá4ÞÞük‰¼xu ÓÝ·/Kyh"™™ú{tÀÃðfœ’DƒXíæÉÑ“­‘ZŸ>® w‹q{x¸:©¼ôÉ2x½9,OŸ$DŸg¶Öç ðñ™Lc±UåVíàb†NÖµÞ0=°²Ô}Üí/™C§Žçðœ¯7KX2Uhh“'ˆC"éónÓD/gAˆµ`¶0ûÀ£¥Ìlì…8.Z®j¶>¸D‡F °Ù\ŒõóOÑf¢Ùô1¹8…LJÎuˆ÷µÒê&-cÍ1ÍE7rl€¤â|E*Çn6‡W°u6lR¯æ»s¨þþöraMZʉÙÕ0ÙB@|ã‡ÍÆãvåꚃA#¶³lÁC`õì/ 7T§ÚgËÉÍÚ{8¹áÄ)zð.ûiNå ljøŒ$öh …Á¹ÞJ5 åIý—¶þ:?VG“>–*‘|(ê޶¯³¥9VYal%Ë»—k¯¬­R>¯óýq—I"ÞáÚõ2¨üCú i´¯ä5*ôgw¿õ•īɥ¯åmú{lH m’“XüúP¯÷5w‹*vÉDøòlfre”î™aûˆvÀpÕHýõÐhðDÐ{ߊ]t©ÿzmÈmuiʶSŠ.HùS÷/­È´aí\=(Ì€p/J²ÔøÏç_êf§õ×&“Å$ ËÍjuE¾>ìä µ¿Äð("J”‘W¿{tÕ­¤ÍK·¿áw& ]ŸÍ%3Â&ê&E,R/~Ô#Sì¡È㘫JOæ_gë™4÷mÞùõX6ל×tÞ-ô¯Žz"aâ~@ªåðÓâ8Ãs¤ƒñßikoéÚþ+ˆnÔòz+?Qƒ^ÞÛ…s+³@Z•”ûdtiîIèy–«)ñ­µä&7äO¹tzïûxõò]OðËù› k°¯ÞUêë{\9‡%ÞÑ%ö"•^ €UJ)pAnHbqá´wvŽÞ{ȘÃý•:ûì5¨š È­m/ Â× ·AâË Êè@1f +—Ïlóº9ÐÁÎö•Ñ´¦{JÖµ@1 ‡ úâ'³°üJùͬ½°d'¡T_˜¬ó¹É·ÂôpÞj˜æÃdÕ´i'ÔEþµ¦ºcZ¨ú»lPý×!w/ßTú®7^êŒñJϼ÷û‰š‹¹´:ޏkÚ•Ç ¢ÍË(?7cfTDkvg<à’}4¤¯‰ôíR£€ ;Éþ}¥k¡Š)ª2¹­Ç ©à=ФÆZÍ_Bp38åâš|¬¹ý@kÑ)å;(IÄÔøN׎Òå7d–çõ~§j>d–‚è”ptù&~<Ñõe,àÅ^žàÑÞ¬ª§­²ï·Þüµ#¬Vì¶ê—5r”îtú—F—îÔú;-)<âºi6áˆ^´P…KÙ¾CÍÇŒ5½K”{®a1ek)GcÝãˆ&@qZÊëМf°Ê›y0‘•Ù¢&ˆQR8xsbÀ[ ¥xä, …Sˆó‰!N ïyòV—´¦ ÜžÂÀõg¦p=¬öÙ¦3†’ÿ&0-çeDŸÑU&x£uÜM4ÓñïzìLBŽºÛ—þP–Õ ,øÒ#6l¨ÿ ÛH)Á€Êö„Ñß|0¡ëOÝÕÆ@{ç‹cg›êȦÏñ(èÍÃ:‡ùUÅ®íR§ëœîhÝÔz—ÊFmÈ¿®)ÏXf"Èh«ÖW®+ô£ÃûÃ)WÜr>–ê»yãäbPgú)/6f*:^Y&R$¸I©ÚšY4ûw\õSÿ0§‰#ý¼çßg°[m<;×ÞäȪ’š²!ëOg‡þ siÇNŠ:l\Å+Ö¸ÿŽcßP‰Õþ_"ÖÂhµÁl<Ò|J׈_òå°DÖ…]㥿ãŸÑ;GÂs]ú6q‹ûú\öÎzäšå@ æöÉ_þÆ>| ·Z¤_ÔÍ”+‹TN)%Ûīœ=Pÿ@ïç÷:õùxu™9”†þ}d¤6Zî´J¿?ö£Æy£Z‰Ü§dã›7ÇùX2Û¼ÀISšíUjJ›sw´Ü¶³©8TýA~Bêô¦Ò;p.Ž0óJ:¯p|ï…¿Ñ‚VCŸÂë˜ Æn=Øð¬,Ðÿºu’׃¸×|ªsC@VÆp¥¡GíÖØ€úµùl¢ºq,]r‚ÿï!†å¥ýÓ°MÙº’JÛßp²Ógbö%Ö43 Í ^Iõ×§UøQøÎU’ý¬\îé&Ù(êØ‚`š{à О&?5 g¬iã“‘g”Ñn?î#¤ÂO 9Xðy &Û߯4ô"~ùÆûñEJ´¦Ò’âÍ£åvâK±Qâ‚–%1dqÛjè¤âc)ó>W úÐ Äöû÷¦.—ÛQ?ü+u½]Ë=Žyæ ÛqÕýýx÷ñíØŸ×ûN‚Adì¡i¤oôKÛËEÓ˜ 8QÌûùËJBB"¯^7‹n$öÑ»)Šj}–?—¤)‰’5ôÅ7…ÕãÕ|Ñ3¡²Úg£C•”SPÓÀÕfGä!¥¥ºë½çèbÊüz„WÌùq}9t†p Üî! úká΢¦mÝ 21ëÇþvÿ¢ c"'²§&ˆÊÃú`|š6x’Ú—Ó—æ¤?f©mRBGðœgñKŸ½ª”¤`¨‚4BUm…ÝÓ}¡ióìÂqÜå3£ÊpÒPíæŽZÕZ/(z«bþ RM5TJK|¢OW28ñc…Z‚(Ž`LàœÒuº¼C£~¢52³=¡e‚ö(Í@ª?œ,Åiß'¸ÕMiM×ó„ƒãtô1)äS²&UÎÉ€T¥Jþ®úÚ?>ÉGŽIÇ_Ãô‡ìò_­v³òâQìktæÑ=&æ“5þ•(Y¹ogEQŸ„p¿ÌöRŒ×Š@‘mm¬{’îké_0ê#¼.ÑùÕõö²”ï/;5²–2¥CŠŠ £ÕÓaµB*­Ø£ãDH”R—ªyÝ…šîËÚH²°T”ÊÈ6L‹×c©¯§QºeàtÃj9úIkŠºN'cæ¿pœ^‚ЕßYia(Hl0x5ZˆøB-P¢.jj®¨„Ô2sÍwýaÉ…¿oÿ{Œ¶Ç+¹gªD,Kúð×Õµí¥%*åõn¡¯èŽ_ÇzÕï+V¨´6‰ó>QÊæ‡GŒaa6ºÞÐièR'ã“i (^`…Š®ZÝÔQ½AúV_ï¿s®’ŒÈðàh¶ÜÕ,9럜¡ùhÅêlañÚÿ5ÇQ¥/È¥À#Eú[ ã¿AÞ7T4?dU¼ ·Wlö'س¬›ïÂpPÄ:ýcLÔîÉì—–­«ªüa‡Øž7GÈêÄy#ùØ/â¶b>d{ŠîRVMÐ:_w‚üd¢oó'Ä%qС–ŒÁYùÆ…êàJ:?Ž,VP`€¼¤!l. ¼m³ –›Ü}L±öÄõ,>UH2B=ÛŒ0ª”>wùí£þØ¿J­ê†‚Á‰ºö=¢  â¤¬ ßtvÍ›–t¸1Þßk"lbª¼BóQ»gHŸQ“Õ1ãNœ=é"˜Ic ߬w·ÝŒ¸ SYoÀyÓáqdáÍPF†jy®µTÏÁ´„â ¸KÉ.27vBb"Sö/ãÀ7¼ÿÈJô+èsÜÍ V†I†_ìý³Ky쇎FVfpÛ¨év [)É,¨öƨ,Eöë6a–çJq$X¦5~o%,¼ü!Àì$@̃|Ë+G&ËÇÖ¬ˆS7—¶nUš,ˆH#ìrQøoILX?R¬w¬É¶ñ\|¶{¬Ù©¢VAÖ,Ë3û0ÆñûèAé Ÿ—¥,MÓ÷û:ûû7í©­Ê*^†œT)^©^áþé=3MÐÉ— ºj ¢ir¢ù²Æ1¶”,¢élNzÛðÞ¼¤íUr`ìRÑR V<"4´òüóJÐ{–L Ôy'ïþ^”‚Ž®¿^ÂÒûoÇÔq!^t* ܶ[Yw^ÉŸ?«ïƼ2¶bÿžžXŒ3Z®G: ®„:éõþDÌmì™Â»êÕåÞˆB/ùH1œ.¾Å ·üê”Ì”™úXEàdÍPÇ=ö¡²4;¿Ò/ذÎûÊw~á¾mØà‹ôýØ$îy-nCãqUj¼;R2¶wrðìßYˆ•¸Ë1„½'tØz>QÂZûEÁ‚ E-k—Ç™=;g]£øžÉmв‡1}KZ¢,˨䠕9ÓKù|˜—–ô{=¯ùð"ô·=Fœ[|ø˜íз44ßټؖã;YMË:˜°’C6…; …óE/<êÁêŽ|1÷"ÝÆ¤>¯ùJŒ×> ~mh²\°[Ìàñ!°éßÒŠãƒÀšîÒ8¤3äWš÷õ¥·wÇ)Ö ñÙ4¦.ùáHìK×Â*Á #tâo"×z֖܈ªÏýdÜ Q_÷{áSѶynðlÀ´D: #\~òlAn/}²i³<ëÌaM~d¾IÛ-¿àßCpŠx£àÅ‚šdd=¦™_ŒTºõ¼Ê ¨ºiÙ¿NÝHÚúY,’É·Ú£WÚ ¸" »LÔÎ0}¾¼ƒ£xÝ)çoà§¼6™b¾Ú"=üª9çΠ¹lWð_ÕP+<7^˜ª.¢âÝÇC}¯_³™Ò;±8Ä”E/I³›­ÇA):Iòî>}‰ï½äÊF'@ßÈËåγã»<$c”~ÞV&¢ç‹É?¿^¿RáÕÙ0‡Q[pÇn çÕ ¤U½Œ{-R[» 4‰ÓW¯ÁcºN¬•äM\YŽãx 86´=O¡?Žw:ªBçþÞµÃмìS”s~%„[©öû»ŽÏÀwJ<å j9¾_*Œ»}Ç]ç¾1þØÜMY[$»”Zz´ÞºÏ-wlWó‘ÿ]¼hÖ8ð—êŽË0òGàyßÇà=ØBù,kÂáËÖAµBK,‹^i’_•«ÙY_$Z´ᮓÿ5-°Av»ÞÐ>°€kõÿõëî%lÅêêÿPbIˆãB‹HÌUYQ(°ÔpËÍ·Òävؤ°˜{ëÆ×j‰ˆR保JØB{)b@ÎPÏ·¦^KÝ®tœœE=63 V"áƒ&ò«™Ôùšf.Ù!ÿبĤ¹¥ðù`ÚaJ#R!_Ú“²^ü¾˜Öhþ÷J›5¨BgõÛ‡‰ ΊÙo¸ B9eA–•pZWfξã«|²jß§&À®¤ ™ýÇôS8†Ò^«½ÊR/QøìSë¡¿µÏ;\(¯ÈE×êH‹ñK™„Dã%ò/à¢M¨å;y¢Ô€ühîtc ÝãJª¾ËýKà> œ³þž¦²š†Ô•fë+_‚† @u–îº"•õZË8„5ÿ¾ñëù3 ¸3Æ#2{ ÅHß­å+Kî’_y=LP¡B'‡Ž´up‰~ûôû†OþÁäð¯[´œSÓoåÌó&/ i`€CmP”úù»^l­3| 0ý«Ø=q/ ~-Å4'žç1ˆO`üLS^ÅÑ#÷Ë7‹õp=O *CPc£Oz‚Zf6±õ ‹ÀuIIwVq|ÂVº®Eüù7MœÐá¬4yï*¾:~'¶ï,˜*ÿedçë¿©KÓÛUl« S@XU¤é-÷"9ÏÈn§ˆ'„‰¨—4g›’I¤ýz3_®!_@î×R¡æ7×Xh³:/s÷cÑ*=ŠˆÓ󈪵G³p ¬ð&΂Êç¿ìrߌ;–¼ “læmèæ ¬ïßãÍÆÂ›„‡/• ­ºépK7 x©"#| ­ŠåÚ¦>dt Á¾¤E0{ÿUª O NŽs®ä Ò²|k—Dè5ó÷”|ÞŽœé²‘ðæXê¢ÙZèÆV wò¢ëg…Îò6‘ö–“Öp¬íöW8Â_ƒZû“Ćöç~¥Cÿ` _>ËäÓyûiñêɓúk¬ü7K˜‡X¡Cq4u%¤éŠáULŽ•÷ù]–OüÆ?·uµ”/#÷jß5"+ Ô…Ž™¯;<çMãåF"Qˆ“aƒÈù³ºDÝ„èÄ»Éeûõñë[ëÃL¾«ü¥=f˲׈O¸Ú46ŸÒ“ÝϾH¹ÅFMCHúùÑlMyà‹‘s/'[30ok@Fy“ï~)¬ ë¡;z¤p¦ÊÒ¤xhf&¡¤Ì­`fƒpÁ~Ÿ:ž•°W½v‡ ¾P&=7 S–Á­YðrFöWœxº¤vÊÏêN!hZ Ͽ¿"«¹äûŸ±Ï‹GµëÃTDmyjÓèÀßC"¸•ЂÎÅ­öЙµý¿(C"¤bO”3¨ý@V`¹ß±Þ×|ÇjÂsƒœGW±‡·¦Óò'¬^è>Ãyì<îØüxRª‚Êó¼?öϊcytê=ÚÔîÃLk½¿¸ÕkÉ~§cºBÜ|0Àhú@ÓSP.%7è•—w)é~v]_®œÈ§•ÀG2–X÷!È3¦Ñdçô‘F,‰ú üz!oË%£3þhimS§,Bêç|쾓›±P¬Žås0ºtÑAKìNm=ëõ¦I›DWx‚ ts½BDôG.ØÐ’Îeü²ºµFnÈv\ÿÛ‡¿qºÄ€hJlXKÜ¡PºƒcÊ¥¼ 3oçL?V.gt—/ë dá&¨á/LW©éãª5«U“ X×!T©-9Q–®I¤c7AQkcÞ®Ã2tÖ}ÉO’iŘrä×½˜$ ªÄQ¼h-n°•åñ´R¾Ð~¨eMQòóñï—éêÑEÞø*±÷Ë£•D/@%±S­[®½Å’7öVˆ_ ÂÃý1 WÛUgžú¡“¬§Ï÷þ:mJ}urÍTýâW/ìÅ—”5Ñ >PñJ|7ߺÜ}Aã þ³ÝàßÓê%‚™ñÓ€År)†é‚’º1!iBž}þ×ÐÁ ñŒ –ÀÙŒkäGJ êÜp§n;BÖ£J¢†6îcâ\dVâ­º¹ñ&)¶å§¿> ›dfFh ýIñÉ#7}ú‘¥’J_Óô5TS†%Ì~¬U}aRܾö¦[÷¸0^t_ gI;žm”¾©åŸ¾æ9¹uô<§€Âëeå!Jš²ŸµãTi™¿¤iëi“Cáž¾˜ÅI^j­ÝïcOë§ð1À·ÎÛFÄ÷^ú1L— ’¤Œ’ŸíÁ  µ  ýÎF 1åÐÅò‡ gÿÛ­-ÌOjؤ(³÷†ê87AI¶Ûš€2µ ŸÅr  ÅÊGªšâ<†cú”ÉØPˆ…èYç,ÅiÍøø ÑxöÒ²…?D <6ªj-ÛƒX£%ÁãoŽ“yLN–ö¶ü Ý@ÞåÄ°Ñæó¨¬D®ÓÁêÙº^ 9ËCèGúâü&lür¥÷:ÈGûh–©É_a»Îf~Üø–J3@.pì6›ýÐå`ê¯5†K¯)ßÎ<BN©­bÄ€üqÛ7Dd_!Àþ1(±–¡å;K7Ô¼v$†"zÄV³gz‹±Â)… /E}P)…‡é Dï©Ñ㥷°û¨ ÿ—Ú-¦l=»A^âÊö-çœ8Ž.ËcÉŒõ³~‹6¬òøÆ9J‘@xòè/y o]{£ö”®Ö¹£î Å,K•Å(g§abŸèvŸûU[¤­yxRÜ:E‹Ì/è€P›w0–©;Ÿã¬$ÖDÞ>8M (ôôVŽCnZèÂcDüAV®çï¿)K¾»W{H†ðiãkÀíã(Êf{åšFnúx³–+å]PMk"ˆ9¤t ,ï"éŽj8Jq¯ÿº  l¦YÖ¿¬¦gÇ­ËoŠ®ŸîÓ'Êo»xSÿu£˜²ªß+?ú£¨í N,8@Zz¾Ïg^g}TjK²=mRÂJ"«ý\Õ±”ʸÁ½DÚD¬>ú 2Ø6öȨ%ÿþªñiެ8àƒ‰+Ý Ô‚Ñëã)ÊåÒwª?ö`hú|,¤Ê «Öî|tŤ 4¾·ñÇ ¹]EBÿkwX¾NŽÌ¨ À,@'ÞщWóz¨ˆü‚NØ”›€W¹xÏ?hmŽ—efí 3˜ªâ¬@q?è£ lƒ,)á«K¦À‹Äx£=dm<ÌVÔ_8„>u;Žñ¹ÔpM~q%Djê+60mÕɨ]Ô(ËjB>˜÷7\îz5G©¡HšƒÔH5¡jy3V.;uà6ÁòÆÄ‹¼+V±bøwDOYÏ]7Â&Ð騑ÍaWrråνúwFLŒ ¿«\~òÈÏ!,ÁRì 5CLu}j+ "&!{;"íúc:=[&ŽD3„6¬×7±¿!û!+…îÀË3ˆàO¦ÕÁ†N’ß~®äáȲä:ò2y'~]¿¡U ”ž €_BŸUì?‘¹“¿è-YÂÒ™ñø,^®/ñŒ;¸Zã7þþ dZø+à劯Â9²›o­ˆØÂE¬n2ÖÈ=¶;#‹f_·W|õ–½B'$jçâ¿{¸É¹·Xù1ËìÇí@ú.ú¼1§¢­î.,­{Tpé4àêX”Û›‰PÝ{Q¸¸˜lóZ“Fo¿íúù¸øHåÙåz¥|ÃJ§ á&xµ}<:‡žU×ôÞƒ»1ˆpÑMûJ{Úûfic\g·,“³CÓ퇫ï׬Ká”ʆ]ø*oõ¡Ë/¯lõŽ0¡¤µr+Òqç²ý¯“X9ê$5=Téç·€=¡×°&ÉelÑ¿`.™Ü«C۪ƃ¥ÿ¤Ïpñ-^¨]Ziú¼ÙÚX¿ÍµUŸ÷üYEôÍ·Wúbê;àÓ† ZÑûÏaáå#`èɧ¦Nm1»X×ÏíÈ$Åb¥òÀçñ…ñdRׇ =Û™ruJq ïß ¨?zô½O«¢3§ëYß¼Æâþ샭 †fÀ¸Pv0¼ ARhª!*‘®¿üÂõB²º9ë+’åçBt¯æEڇ˿¾ê÷›dÂ0Á6ßV |Gʺ!°l'K`æØ0£Í‰fÓÝhE“8år!_kðBˆ¶3öMÍúÆàL ­Ó\Ç_æu—6‡·bó ¨:ñS`aú#6 <áÅ…îz¿C%Fý ¡gn«U‡é»²Hû+úm_lnŽK|`õ3sм»‚ØÓ• èã«WQëANæ)±ú½Ìg_Ñ´ßc’yqêR›8§öQðbrÌ™„6/qš_ÿ ¢H#V Nz˜ýï´V}ƒòÈÔ` sùûBñj Ìšr ÷ñ˜™¿mz‹2Õ!c»ÄC :ÏÀÍâÐ44Z)^Åï«BO€оÞ$õYɆ¤&…–ËUÈ*F'fÄ*³ˆž«¹Nðaó.³ôòõ5e­ì<‘]Wºz»7ç¿F]ržkÓæ•›ˆ¤fÏ{/û´oËKA7C)C}æuŒ‘¯ˆÆ:‡wr°…%2Y $!)è嫎úp³--)óY×ň·Û«yxïê[d¹’BiŸ“ ­MÜD]÷·R›IIPQ±ñïâ!€}îäˇõnQ„]úÞõ!!CrhÉ.G%ßh{ï_åb`ÕåŒÚµT §@Àú_ICéDz{$ÏZJBåߤ•Çå–šûvR6·~¦Hk“”ýçgª~ ²QÛþë?¾–0×Ͳ ”øYo)ÄÀ³l@9¬HƒPÆVú­öÌ:r[¸KSù¥4²rdûMÕ‹¯ó¼^†ý¾fX?6xi!ÞÕh8{Ø¥+£¬Hr¯‘s—øHçQšþvé}qÛýñæ³ç§•ú²¼ÇÿšÑAIø³E§ÏŠ¦Ã‚ë_w¾±ÿ†Å@åÄDZ¡F#BeîLíB¦ý}Ù «â¬dÎÔÛW‹Aˆ›Ö±ŒUê™=§.¡1(JÉ@c¿áÈ@Zjþ®]È…§†Ba¾ÒG)îgW Ÿ‹)$­Hñ-ïE› Õt$óø«ê’› } ÜÇ|ña›~xeöO:‚FßQј”¶†€ìÔ%-fl ½Ü4OkŽ‚¡‹+Y Êš¸AK¹°½â{dÇdGa8œ‡,Ì•½Çp`;gÁs÷j·žÿ˜|éý7ÂO1‰}WO2D!:%øÙ*^r#v@éå{¡"@³À*¤`艊SÃ#Y-œ€Ñ¥Å‘XÔ—Sfnm©ú‘WÿµG°Ãî³µ»:ª>L¹AÓXŒdf. Ðî_l+ùQ-ÅcŒj°Ê×Ö¡ù€¾Ã<íœËABß,jÏËJ‰!ÒWAä/ý³_ª!¡y>˜!…Ÿ3&€²ÜKÖ›xÞÕ›ã`䕹O®-÷õFqáÉ úÚ…PCÚx¯çÈ餋K}³÷< ›nܘÙÈqùÑX·öžUß\k~·ß Âï·r¦ÌJΑt¢ßXkðXç·˜I}ˆ\·¼‰o¯Ér]|7&ú«K,±¦á8ß@J±Ò÷k[Sr¸µYI˜Ù7ñ[þ’ÈOÖË^¾Õ_©ÌÒM_álùWL½ú힌}¤{STÜ‚Ë@Æ\Â_®×cQ]ŠïJlðõ¥¯Ë|™ÁÀx¼É?=¼ÅŽ£pE+Z«·`ëÁ¸uyïpqËŸ¥þ‘þ;XXy¾†eäçËl¸ò¯ þz/z€ÅØk)O_äMl“’Æ bp¿ÿWÍ`Âíã=ªT5m_˜ÑP^®0\ÕâBm8å…Š1$kˆ{80îf ÑZxKeÚ”iõÂ2ë;•s¥èBûoë Elø=þ ç¿¢”UB©o“µØyV>ä(Ön›ÿYw]#ÂÀIÉ-þaüÕ†t.Ïé8A‰mö1Òs0[ „v¸bêt;ŸìȈµe°êkY-¨‚]7lçûèH)DÜhr# J‰ 3w¥d3ßLÛ¿V×·ÅçÞà«í÷ÅÉËÝ~„#Öº¯'Ðûbw­é´V)dëÉs5u74U|⟌¡*m™Ü›@“#ØïJ æ­£ÚENÚ*Xàõzr&5W¿ÇÚLü©ÞéÛà}a ®nBväõy9)»ñ¶¶ÍÊ(–³¤ôËðÉ^ŒIr¼â¢Â(å¹5Þÿ{Á¿XÖ3®Ó°EwëÔ¼¸ÑyORu§/$Á±g‹×ð’üc£-®ÇÕмÐôR"¼ó‚–c@ÌÂ)J⊋͎“‘ ~—R„T8_È«·Ó­?S1Æ2{>Žr\J!ÅjÀkôÐ:Ɉû¯ë³ìÒúZµÙþ|ïÄo{’ÖNÙâ—ŸtSÇèÁ× •®ÓÞÏ<íýÐøãš6JWÎuIJé©(ÝcÕä%µ6(§ öÕaóº¯Xö,ÙMÛ æÇSIW}k}”—±æ6XCp=¿a߸{Á¹¥Ø:n|`áAÇX£”i«:!Ü£WlØ¿«^¿ºÑíûžúh©Ø©·~›Ú\òa?Zµf9¨m¯Ó£P¥TíÐ2S“¹øñÁë×4’:%!4³¾~¶^oFSªÁ4ƒ|âåô¥—ÛC¾úl‡ZWHiê÷Òä‰>¯ç›´t=ÎÊ´Œÿµ©ê†¿?¯êSuKÂ"U%%“}Z·Ð1ÞA&ãÔ$ÁB`Òe{‡©# t’r‰>>˜ñ:Ï¿BÔò‰¸—àÑS3Q6“Zi±©Íë³\ë<³Rˆ)ÇÙ–ÓÛ4àN 66y6ûídå˜Iëö§í;ª”øô‘T²ib&»–¸9m4ŸÒFa‹çú ß 6)\ÿ¬ïŸ¿ÔVÈþ˜]+Wb‹Q/lEJwÆvoÝ‚ì²ÊøŠu„é¡¡;PÊÈpúLÍ^‰C}bK‹¯ý±z(žXé.ýLUJu\ññ]ËÜ U³"ó( 7‰À‘q­ ’GoA]ÐvWÒʸšÖ>VW£©^Ì߀ÁàÃù›–åÈÁqìczL«Š÷wþ5~$_çh­‚ÂZD:Ïןj ößìGCo]0¾ÿ¬»ýͪ V`Ã’€DÛ:â93¤· %Gkõ¿µGé/·ŸÐ×øk’«n‡·M•Ö¢t® ÞV¾“ŽÖuÞÑBQ` Z›¡=%âõ¾”èàÔ-Q°2B-¶z‘ÇïˆççB_Û"È0I\à„:{û;‹ÎÃK¾lÐYŽršXê[LôÛ¹ÛÄèpçI}ë>¹6q™µáà?»q;¢s–¿•߸¡éŒT©w¬&Îݯ»-PÀä>Åà ¹8~ðý6ÚÓ qŒ™‘9êÇÏ&ª‰txNˆ—þàÑ.ÇêÐÓ'”î0ú ‘Ö Ü‚Ÿ ÜA°VÄ÷9/ „¾öší Ù°3£‡s\UóÂÊA“E"¢‰ˆÅ·ÒáûÔLùdï•ûŒ8iý ñfðä€{qÔ14âbëq#RuXÃ6'ø¿*2¶þ¡uá:6°FV¹çQæZÒнH÷tÉTHÁéóÂ{tú2þ$(>êî¹®s›ŽÁÝ ý¶C#\Dê|ÝxÐ#dôå:.pØÔÚþPM²¼ñv¾^†õãI÷«„Ü=2A@kž‡¬Ê ¹*1;rç(ˆÕ˜OUmÐßÖ ë3V˽%\+óŽí8¬X†ˆ"Û#¹EïbɪҪǴï÷O³®&A­½e{Е UV ¸²Lyt¬iÇ(PUòð²[öÔ7jòï97ôš&ÑYÊí=BË˰ý J0<¬¾ vKÕišWöPêÐ$tpœntS­ö¡¹ol) ˜îcˆ÷†zš~·~ïÍD)RÅR¸ìáÅl¿¡,9Ò[Jè+¶Tç¦ÖÃwÎ8Û ÜéÛÖÔ •”À¡mÓäÃâ¦1Ûyö…â³Æ‹FO(RÍû ƽºok`eI³~¾?'CÎ4ÛcRJÌs h‡0,ÝRC¿#j‡Xø¦>T—p´qâ•þØ'ž“s[8ëC^:±Rq}ÿƪ0dAý ï¬hÄIìÒP[ië>cyH¡ AUÜ¿”£H¬ÆõQåå{€K´F=!=Ó;Îá΃nR ˜ „¯ÕÿÆsä•@³ÿ5 ‰¦÷ cgߘ²ïÔ §'ÄÜTœÃ7/ŇœÇ3œµÃ犱ÇVÝûË–'Ï @¸]d§¿™½®™©Ž|‚ˆ¼K¾5f Ü Œ‰Ÿâ7ªoPÊ܇§rÐî^Ð*°•¹'©ª÷*3ÒojŸ»~ÞzÜÑòZü›Î–^!6NÑ”8TpÈóGþhÖWëaì•o3H Πʹdå#&¯—0Û{F>mÿ²d̵ë@‰_r'Ð%AÖé—f¬Š|íl”-F(’*áî®õ¢]²Vº÷ÔökX+÷ùÁ´ÖçٜΞÁ¹/QÃàx3Ž…9¸¿ðæ×@ùyÙ•–”´6n&Ò«kÏŸ±•ÖOÄÍ.A½®º>[(a]VfMýqC›”eB…Q§ØŽºEÅTØ3>˦ÏGåQjÙ– 3tØ W5‹]¦X[Æ[²ä¤KµØ‰»Gå-:€mj?ϸ_&º.*P“mÖî^zÜŸo ¯Ò9ŽÇ¥>²Â‘U!F|7Ç_nìpúÅïO±oa}¨ ß^Á4b¯ ëRx)G_›Î2„¿-©wÛ15+Ùßa†B!ð¸§V¿f&BÁ›=’NêÁÌZ¡©;씄õ4¥ ¸FŒ>]ÔSW¤VMÁI¶#4h¯rdÔf\i¡<²Eú–ÐJÒUÐz Гs.’©ú‚‰¾J5ð-¿åH÷²ž–Îô;#Þ©ˆÓ„ý ‰=+,¢á]°«LmÔ<6ÆXŒvè·|ödõ×7H¾¤»˜b°m_ TˆÜôÉ:7! Æß'¦TšòVð¯ïý/9ñ,0ëît¶gÐ(«MùqÃFˆ›jwÈßLy¥)=<åè½% Н}þãè¼ãÏã*Áz2É‘-ßÈV‚Ýk¼2çŒJÒà0˾޷ÏEÉ4î·G%—pV­Ð8 ‰¥´b –=bÃ…GW¹.U@ý3÷}=,_†¥KiRÎÚz ĺéZm]„t> Ý‘»%.¡Êå‹ù7̯½]è¼¥=NJP¦/˜¦~d¦ÔÂ}„œ‘×ñPlšil <ØVÄ%mç<¬ŽîCz¼´š¨ZÙZž ìnî)˜þ“Ï%·å©k›ñÙÜXÒ=8ù¯.1€ÿÆø½‡ŸI“yS™&ÜAŒ¢yö›ŒÏO”¯ 4ož)Ï¥žŽ¨¥ø±8F¤³Ñ« w¹¤?!XPjÙyVý1Àø!‰³™á¬M²¿DzWánÅ]!Xôáp§ó¾ËZö¿®¬êBØ£SÈtßÍ ´ùí ½‰ån†…å\Ôé€{_?Ÿ^Bêú*jÑöƒµáikÇß®'ô»×kËÜ…;PÚƒžðþ‡|-Àl½O‡Ç~ÉïáãeY{B?°³_‘¡×d©gZ„_~òȃx}Z¯Ü>oYäNµjÞæ†Ek!ÞòË`á1'Ç_žÚ?*Í2û%i õ<Œ?¥w õöòúîL“äÀÓ}rÏÄpáÅñèOY?>Ô<ëWêâ,Ÿ¤Tà9v760S‡‡iŒKdÁˆ“¦oITô®PŽ˜ã£ªc_ç¹+¦%µ¼w5y©±9¨ô€$m'…1üzÂvÊ|À“ó¿Z ã°8ÌŸ¤/Um Žþ]a¹0wœå¾.ÅHý˜wx?›Y,;œ¬ÛùsûêƒÐÐG•*âpß9+ç(÷+mÇšß©„|üò'‹çg‰´Úô`ÕcU:^†yÄUÏ‚I5rjø™¬` n”gñþ.ÆeCšvøYXsÄçÞ¹…EZ6òKÌUìiÊÏ\xÄõo y‹~9ì]ΔTœ„C¯¨,}8Eäƒ ÊBÑçrn3¾u\SJ1›tvÏLã׆›Õ¡‚MÅžàòaò_šúZ.iÄb*Ý%< ÷˜# ‹_Öc3m5&´È%³5!zÍW&Éѳ\òÆœ³ÚÝ=l¹ª`c±¢Ãð¥°<ã¯go6£Tê@p}K;öI@*ÛȯÏÎüþà†ñ=ö?sTEë}’!ƒ‰©æQ~ˆ3–Î#–·þ¢€4zMR È÷^f¹‡¾1<é͸qi é D(-5&_"Æì'óZfhë¶«ÚJ3ÄS6ç×®™–”Ÿd*MV ÂÏt*Õ¯èÇRL³üÍöà•óâ¾ìE:?ß–)äÓ†÷9íþºÁ„ÛÇOSpŸØ¦Û×ò{o 4áŠ0yà w*ï°Ý·l½žçÿ;O@ÅÍ›¯î•JóY3>?iøh3s’oq¤É¯7êË@‘öÍ ×z‘ÁºÿPQGÝÐÑc,@ò'+–“|tª~=VáÁ¯~ÏeÌžº|€yÈvFwÝܲ»ïm‚&?eÛÐé"à!úǯ„ýº®Ÿ¤¯E%ˆ~Ô?¦”TèDûÎB×ZÓª “ &Á0ï\{·ivåùl•Bò[ï“v#lY}󨮊Cs©Î¹˜‹8‚–¿´Œs~È4‚>{‹ Ç%ŠÖq·Òw “ž;‡N—À‰÷û LO]" ®=ußa<ÏWÕ"5¢´l…ƒÒRÚä:[­Z¥VB›G¨ñj倊óÞ8Œ¢š‘¿€¸ hpÄ¡aº¾ŠGY,LìèæVáŸõ¼û ql6̇F|Þ?Pùžß™{‹,”ší»ÑNàÔ½äüìéW5«–A(ü©»uO±ÃìgBa—ÇÕϬT |êýê£@æ>××ÊÅ¿Ot²˜ãËR8Ü]õù(7 ¨³oÉî:õ¤·ÉK\²X¼ö‘#¿Šö¨ñVàðpÿÞZFúûײÇÚO*«œˆÒ†×»€tê*¸‘ŠuùË¿ê#íöäҾɳ }Öp3¾Ô7!-X»~|Á6Rî²^½Ù“dDpeŠÔºU<Ðê«W6+“ìïu„dbe•6­ã7üˆÆ_ÿ=*dHk$´U½=°›2oÉL×;` QÑ¿!‰Q¬I²_ËceƒAÒæAmRÆK¿Éœ÷è¶äë$·”©Žæ•ÇÊØ—“|`¼·ËFÕüÃH|q&L`ËKp(gÁ…FL“ö•qÖ_×Ëo0Zš«ó“‰¢öúêøNÝQ V[a¿^wlŒLYØxªÖ0%h1é! K-èdXN•öô)í9zа*_Ô©j‰YqS×AÔ–DWæý‘bmê =h,‘òG'>L J!¥³U÷ #™ÅìBÇcj2×lƒÞ6¼¤)Õ¶ES¨YãKE/¨°äãÀ‹âò;p«ù‹ÃiøÚ_ýÉuÝÈÕç1½F¸þݻ̀A$Ê}¸t'øÈ0çb6± #ö m»œ¼þ¦³²Xô<(«X„]L¸£þ1¡jô¯%ˆ™Êœ¶r0&”ÅÅÇböegøHER—!ÃÚb¹¸«‹[_Úkv¢å¬trj‰ÔeïÈm7FBüG‘Êä“àbx.Ù¼ÂËÞì{žmÁkßýšÅ¸ŸEÃÆ˜D8Ëåy-ðñHU IæôŸKÊxwÊã=€lì( lÚôÜgéêë£>ŠrŸžŸhxýX{Aãʾ g½Á';OE‹bêáó{R¢ö3†`;:t¾TÐ.àÜô7À¡ÇLJÓ-›sÚ›úÉÉ®<Õ”A¢a½j)ó°ÉÜ +a©¾±ó¼»÷A_bü¾%ÚÆ1~t@óIjRwœ@sÆâz<'A4¤4HcH²d’Ü1–·†IåŠJÛ)Ù¶Š«¤ Ö;—ÞkÇ$£sÐÛКé÷¡Îäð3<èG£˜Ú™C÷ëe;°‚®Í5„ÛÝÅäÎí-/M1ÂLðéŽ+ËÌqPϤÝ=9_äg§,éüµB|9S•*}þtè ¤~KFxOeØúxdfôëÐ1ÊÛšÔs‹f—câ=á™l´_¢ÁQ¬*€¿‹äohµjg ´²4ˆ ?ÚÖ˜?Ñ?Ñ‹}x39T é‰ör¼¦]WTøRW,å_¼BE@L?Áâü:V0›Éú~®ÛßDÀ/¿ˆzC=¢½¿îŒÅÈFèœBÌÙ›Â"ŽØ-ÄÅ)»=©êH)P¼A0®+ÌØæ~y=É0§ãƒ ߨ.Ó.}éó»°¶„Zŧ¦ü¤:Þ?’šõ >|"ÓPÔ¿€ Z lS¸OÀÚz•ʦۺC›ú­‚u‡3¹¿fÏMûTt³*^÷ ýu£d–¶ÖO´_‰ºÅÊ lPùÁ§¹ Ï”Ä&•–q?|J]Režq–ôù¤‹•&žÂ¾S&˜OGúbW²ZÛ-• ꎯÑs¤!Aü×äùuQ‹PŠÏ:Ö”´I|ì'';CBÔ3f±£z²¦MjóGcäZÕ~@ÀËÏ çoõ!ÊŽz„Î Ó|¡¸ý†ÖD´§y–V4Ñ5ži¤È+†ý;ârÿŸ5#ð¬gÛÎLïã7[–bg‰ µïva~1´1R†;¤bXlK%êÐåú,éô§~fpŦ–ór°™ž‡ÙÿY‹X¥,TZL„•Ë;Gqõ›xDÞoñÇ}EmÍ’ƒE~»s}É ZZæuù!é¬Gй¨_S IÒÛ˜‡qzÓ)‡¸àEÁßF@àæÀñIËé_{ÞÓdt=³®ßíÇ|ÓÖzžo+ºÄµ Wš|ß7òu..‚éx¢ÖhKž #꾤`\Õ­nû݉ÊOýfZû+õIµk$U毹!Ölý^§½x*ì• 2bõºýbHav›×FÊÁ’ð>"Ï«¦WŒ`鈤? óBD-ËaææÌþ§2œzžŒžíí¢Ý¿tS1š…üoàì*}.„ã–4Ç%©‰ÞÀ¯ü“"ƒ ƒ ç,[¦'rð ô󌈥¸,‹é)P0‘òóD+ã/ø&D‘ˆyâÕ÷ûVÍPžJˆ|D>yýëѳá >ÑßA[G}·7Ó¦éqF©ùÁ¯®.ûîÑm¾þa¸‰ž™‚…=صB夢âŒ#>Sm³³óhNßÕÏIkýiº±Jhæ9 _8¥cayÊbO´Þ/â' -T¡‹¥°4VÕ´*XNï{Y&°HWÒµ·ö˳A¯î[€ü򯆦þópÿTÞ^jØ´ÓžùàxĈ¹ØÊ[v2Ø0š©ÙeOAå |0¸k²‘_—Õ†ñ`—4‘¼UxõF—tÏå7Ù–©/„#–Ÿæ¤ÚtúQâ'ÂðÕi´H<Á ‚’”¾×ü˜U¤ßR‚yhötsóªE"­÷ÕŸÕÏÄ “àC“~þ!t²éÙù„1âÈ&ÚÄñ÷&¨Úa‚wdÀ*Ùò…¸Ë>eòµÇ·_¯…}æN@Ã󲬕ðäÿ¿ïŸ¤Ý.ÅÛ³â) Š÷Þ   Ò¨îÃŽÂN¹ðæ°¤2­ß§P=A¢ÐÜrÜA˜\ê~–Lÿ岓:T`X \5îH^4ª©½ûÀúÖw¯G9Ðæái»0+w¡‘Ë P©º7éÏïYUÂ'‚íænÑýBºÎR± ô‹8ª‘®£r¬Z-õ«ŠŒ“Aò5ÊaV‰!0[zø•ýˆ2Ô„ l*V~¯S¬LñK¤&ªœ¾‘ZPàȲ8s]æ/ào0b_ß‘ÿ!2Ï?Î¥›‹µPý´=‰ßèøãa_0{£¨ƒÓz¢ OV»ì<½›Û¶E8MYèMÞ$ÿì^`‘|`ËŒà•M³%ÀÕ·ÑuCÃÈÆ¥g»¹ãÞ…,>~ÇW$v‰OArãŽÓ_ëbü&„ƒ<ÑbnÏ]-“ŸÒ÷ §Étc±ARm’õMÍÉ[_Aäc9ÁóoÖ/FÆ;&ˆ7ºµç ±ˆ¦Íu±3šÀ®eJU¶ÑKLJì};]f¶-YÑt\ͳ¬t‚wo„äòoXžjÿÅæ”Èûù(ð$øÙÁŒ¿Ó|œEv¼ßöû÷ƒd*`¾mªO¸ÆF¶Ww`¤Û®nëª8üŸ¼,ªœd$”ÁO×´ÝÎ"|Õ[aÁw“†þr¿/ãÓÓ^˜&Ÿ¡«n솄ýijðñõÒ©[Åë€Ôáöò”öImOc‚[ØrjLÊ;bÚOa6_Š` E–@^{=ám¤÷¼&„&Œhìa—ÀìÚ/ø)M/+T%iû‘Q%-ÔbDJw3ï– •Ü~)ûå• ¡ÒTn€úâðs˶9ýíâ4!{¨î7˜¨¡ÛŸÔÃù|›aSu~—üBXo-¤/ñÙ¦üT= ¾ïÃZÎ)Û—ý¥Þ‰H³•Lî,¢Ÿäoƒ¿Ê¤¹-Ú 2Ø{a¶÷->ttrªÙî‚ݽ°æùÉáÊÍ=pÇS OA%Ö«²h‹ï[EÜÆƒ¢oPU¹='ž5 J`ݬ°|§Í]‡ÝŠŸm$ã/Ñç8µÛò ˜Ëk áûÏZ^}¯4Äeû£7fó. ÉPüÑ©Ðæ±‡lŠô{Æ*šÞùQÿ5UW9 6"w™DI_0c~}ñŸaã×´ç¤þ?oé—¢j[ØìwîâälâÇ–e¾3ÍÁþñ+ÛÀ°Çcås7ÓaìÙ½å Ô‡¬|]Fq Ü(Bƒœ_{ª(eÏâI•¹„¢ìZ†‹9摯1X~20ÑÍy¢üZ¦ÜTsÈ­0G -ŽêÁÙ¢¡KíQå{g-s€*ÙñüÎaOQ¼”¬ôˆÔz`MÎBu¼øga­u.ã3¾‡‡?øíÕþ2çöJ´˜Tþ÷6v .cÒ@‡ÁsÏne÷Ó†¹2¶Åb_X&VVcúò?á}Ã…ñ¿òØ!Þ?UÛÞ°F àeÑC>*ܸtÔÆâQãT yÊŒçS–!†ûk¼Ç$^É‹ùfõâ~p–Kßræòc”Dt|—OŒmXžs¼$¥û’À êû¬¼ÏéDºú8¿ÄC®fjÇ‘ çó"<öUÞ+aæü¦ •Ò{{”ÕþÙÚz‹ì’Ü~!1áþºYQäó<=´£ b5FAkηhxñ)«›BP5*ÎÎ☲RehaÿήG0MÍ»”Œáþ¥55ÑR`})±æ\Î<Æl”€We\‚渺î9\+@ñOŒa Õ±}$î[6‚e|·­Lg˜4Ê9ƒÅ!atÜå¼°çXS/XçŠ0Lžã-Ñj+>äý€§º2Ð*?—ïÖîu aÞŒe÷P#A¾‹Ÿseì!Ô®¤»ìOÊ'º0xWè‘IÐ[ÔLÖL-UvRHW&K{zñô±çªÃ.=g o N í.Å$'•¯ !z‚ˆ?ë——IR”“ Šf¢óñÛf}îüM²íÊÓÝóxžÇÆ•aX…› fÕ÷lHìQ÷Yø —‘2 h·ë½,^¢"tÂ|ÔŠÜA$@ÁØ»q™xR 5¿_ÝðAºt*RE`ÊÂ/«æªV¬Ú.£ ÿÞx +»ö¦@¾’e[Äj1p¼ su+X+›ì¨þ߆xíò&^qîSDJnž¶¯"¤ó¯yÇñÛ7é<¿ªç€­íi³ÕhùnçÜs@=FÉË,»ýÜ_¥½ÿTÅ^Í4 +wõ–¶ÇŸ“ Ùgrk¸0Š35¾‡Å2Ÿ¸‹ŽcýœñØ·MñÖ§%z‹uÄÔf»õ…uÞèšëÆDOdßÚò¯~} ”··n›ü"Ó®bJõ×&õíØ"nõ:AॠވÜH»×Ù]9O|øMg;ÂÅ&I‡O¨ ~XÚŠ%æk§ëÖLJ¾Ü ¹§¡ç*lé¾Pø¡˜>†0À…%Ë3:¯ c©1mQ—)qû°¯—uí’ ve¸ÿRˆîÞn á!8N‚uÕzÈ}É„²Ð߬'\[D¬éÔ7°ñ‰M„Í&>Í^‚q†Ô.éö:çñʸ§¸Á*ØÙC6ZÒ4híZ³ÿÛI¤Sÿ‡¿Â •oR]vedq¨¾@{|XG›ãntªã²22@Öå¸8ÂY!=ÒË!x1 ,Ô×/E/¼·¡€A=• ³ï¶ÎÒ ­“¡€«Êʘ³ü¦™åU\¬Ï99¦åYjîá¶M˜.`õÛæ,L%S –³ÍíN?2>NTFzÚ” Fœ³x´­ls†¹rå­ºôÁñ˜ÜºŽ/=M•]âÊ”¡öão©¬™¦q¹%vÍò;Vû]%Ô’c?¦vð­¿×GΑþ²¿ÿ=nŽ'L êF憻*2'O~vOÚ³ÝÊÛeLù—sI$g]˜È¶–Ï XÚŸK¾¤rYb¸tÌ6IÐTÏ“beAFŸD­Çmd&è‘U†‰r¾þÆ¿„áŠL gjˆ?pÎB–ÍøøÂˆ˜^8õ“A[5à áA0jÛUgÈGÿ¾¤ÖnZ½‘–çü7k2ÈÏ8h{9 üÑöîýâEü+080j|”–€M·m€=e|ªtœ¿eÆ´‹“Ê¥$6ú[‹ã q­ÙPàñ7³>ðu5wÏ}ŒaÊ(ÎF?»”Ùç&:wár可Ñy)W"°;³˜öõ23Á¥ñƒÕm¶’›M2Üw±‹ 7W+§• ÷œäqî#V$ ˆóßá‚>áÅâF9fþâGLKéÖ{Ï+`*æoßø«Ëë BÔ =›â4ò:NSû°O怟…¯tΖ(y3ýÞ%‡£üd'¢iJïhõ(9ÅT1d7‚äù0h¥pŠtñ‘ò5v}÷éŽên^SDÇgø `ËhÛpȵ]r$éL’yðœ%°xoâªóÆÖÝßIóFPÀ:ëÏüwaˆuɬõŽ4pî• æòÙ¼Ù×s7³B@¿>Ë!jSI²@ ÅÖû´Ï~µ1að›¢v‡,'›ÁC”Rdž¾®ËïWçõNBDÆ8¾T^¬õ= ç{÷¹àP”‰VfIã îSNÊ-ì5ÛÄpœX¤ne6ó6^lÆ6 ò¤SŸ){Š]Êø TE'ÆÙŒÆ[‘cRý±Ô‘;… ÆŸuè»ßqdl°Þ°ÄZ´†¶ª•÷︷Tø0Õ¢5Íå4ÿ5`™Iíº"ÝOݘt‚í„aÈ‚¹s6¿üGÆë•q|üìÃûæÃ5^–R÷ü‚/Ô37èà&2²õЧ$R_P¿´I­m\¯hŒÙÐyZGž`”€ÂÚÙ6TÒ`¹ ŸßôO>dWuËÙA‘˜„_Ào %*ݘp¸Ë°nÕ‰¢ŸÉ¡Ú#§|®Ø'Ã( fÈ€]9‘ ¹2q œuØ´ÍüÍâütºþšÈý9ŒÖÍQ³›ÀÑý E'T3óÈ”Èõ!®åcåâ=,s1³ëtº +Z³DÉÖ£^*(ðw:TšP7sSY½e¾)ãë[}Óøñäã˜F‹Ð¨mÒd\f}dÃ9¢Ÿql–­ \HâA$)‚c€ÕXŒŽ†Œ {'ºJ N]Õ8rg ãYúó«n‘x°·Àú¸|\å©[‡D”û;ºÏ0ŽÏ^×bñù.é¨Oá–š ZÊ+|fC2F׆oï·£ºùÑf—Ç_ÇY¹±r.Á)¢NùÛRþþÅÿpt€´õaGT;µ¬âÑ/{ Þ’¡ª{X¥ý÷3Xaòù׉j® ¶¨ÿu­T\åÝe>A±øßW¬ À>i³¿.ü`Qže *ýcI—…>qççaT ¹¹êà=B{ÎaÙ»Ÿ×*”‹…!}B2T@Ólö†XÑ…¡X'"zSÍ-ÔÛ"´·@Á„‡,Ÿv ²£¸'8Rž )÷SÅ?âÏ:IŒ„œ@Nl»QxÓÊEæÍýË”Š¹ôb«ËEqñÞú:†kÚÎÅ7Û2IÉl©—tç¬kF± ØZÕIA«¤°7ŠeåØÉ¯‡è›òØÂÝ¿÷f¶;“øÑ1ï‘h-‹xÇÉUO›ð‡üX^$䣸_“Q”PÝX /6Œ^úÀÇìWq¸L„O¹]NÙº/Ú¶Ùä¼ÕÖö:†î#¼’nC:§ÞØÑ}:fŽ•áç+•C÷—^½5À:viΩy1Ÿ‰©ßqÐPÙ-½Š 6wQ ¶÷^‡¯þ5F¹¦i/*Cª$ôn–æj_dÆhQÎì`Æ--ŽT;OüuÝíÂ÷…",™Dg²+­F*G1Òcw݃ï¨ÊÐìÚŒ>án§¨é 0AÕ¯” £ü Ä·JJÄ#S¨÷#™(~>®3Ù¨s÷Q6>/)®Õß9-ö%’hb„h“ü]’nàÍ1ñÁ³Ï ®ísIlƒ Š\\\þ©·éÐoR$Ù¾ö`¨+Þtчv!¨‡Q©ÄØ]OójL-–(•VJþ›]øä=ÉzÔö²L¥æ‚þ ½EýÖÜy}kšîžÁ”}šÕã’PÇÜTƒñ=‰/‹õXãôÉ‚S#½^¼¨&Aÿ³%aíá}D8rj?á»þ}º=¡G‹„¨2?0¨¦7ŒÂ?Ïý%<¿—_ñåÄI-*È_ñl½œ›ú32m KRϯ5 cLnªYœäožHÅ|¨jjh›«Ic$61¶µ«ðò;ödrheøÏ¬…vL83椚B<ùˆ—ÅMðCR¥s×þ éxóbï`¼4áZs9<¬Ágo©SPóÈë“_\mÓ˜ÃÓpüê®7(ÍzÐ ïWõÒaDµf"oLõÃwx£V\ËšÐvûª€†i ‹À~¿ §rß{ ƒº9æ«7urÃS0 ¿cœØC”ë/r{ÔMò_ÎtHZ0ü“ï+³–”-/$O’vÆzpj ƒ†ÑJ~æ)þ±)sÏŠ : EV‡âÑ UƳ9,ŒtÏ£jHp)†µiVå.©5—šˆîË{È?_Ô©|´ñyñ íNÑòKy¤â–S8Ú›4aøšÈå7±©„G:’SP·ŸJâMÍ)x²d½˜¿¶1O”c\Äkµ^r#úò à'odp’?+¤Ýù—vD|ýcÂr6%6ãã·ÑóÇ“Éô7Ý©t} 4ÿeh6Ó¬ªØ˜_н'Ró÷‰3Û &‰ÚX¿-†;Víy7þm™ÃBªuжaø—lh¡¼Ñ. ¬gÍŒw`ÆQØËáá …ÝÈ»ú+š±Ïr(»¿±|ĺ¡ß!…¸}É):Ðëèz]ªÙa“êa>á¹Ô!cŒ]<É£¿ƒyhÿnúà¿!µ4ÜÚpéùIK©HÈþ+$𸳋™Þ½=°µmΟ`Ý~iªר]ˆ½Yͳl9S C)>~ €GïоÜ$I„$2Ðë§ÎD,ýFPœì]OˆQû°kѲf6õõvCÕöë%6ÍñûR>½g£Í‹’¾œH±ap„³ïꀬê±_ÎKe}…YSŸq‡­2ÿ’"[Á20n=û>kçNÞ€êÜÊ9"C^Îzå¹C z—Ž.µà6Á35x‡‘ñƒŠ}4Žêû`H¹{H—A¶¹“‚Dgµô 3q‹-›©ô$x•’©2HsÕú«ˆÏ…~Yhp´;þðáRã· z;k±j"Û"OôQÙgÞGCà}¼~Ѳú·`XNÁÔ2vQòuKÉ7ÓÎz…Ÿ¯f“HþH>63ƒœ’ò$wÛ½+ÏV2úe}Ú~«¾wàû)fXM_#LÕÆR÷Ê+’F¬+„–m'Ø~j¤©2ŽTu>JxÈàü‚ÁåCCžÕŒV™jºC À-zeP‰§ÞcN™²õkÔ‚cg͇Íoøhž}¥cˆü})›¢PŒŒ³?‚zÀÍþU~,r¿.1¬l6³IÞ¬ÖfªNv™‡ñAÚ¥b[>†Á³‘³04òdÙX#%~5Ã>5óQ‡¦a")øÊ<;=Ørƒb;¨&_ÿ‹Æ¯<¨¦¹ü芓¼ŒD¼™5M¥ßüÌc¨à‹s<´¤Yneój¿ÕYwõ½Át_3@Y½òÇè·ifžª¾š¬Â-â°~‚Eåß#'˜Ô¨oÁF-6a$NNÛìw%º£qȉQ £åýÞù 47 §%²tÔ¾>©ç&^ûÅàÛþÛ”ÄÉâÙ„Ñ„ím|løq¤/6uTë ÞF–K?‰þŽÂeJz”ÿ¨X¤¹õ¨³¡ó4Ú9sÍv²ýë ¦½ŒŠÑKªrYù´Œ[‰Cã+·ÝoùÔŠ­?;"Y~GÕáIÿ»ü*qVÅr¿2M僡0ÊŸ'*Á­È¯)Ï& gŠJ:ßÜ,Æ®s··ï™£ç'R©òã©Ãó÷Á©ÅÐ"ûý|ŠáI|±W•Ä •þåî¿IÓ «"HÚùšàÌßâZ˽[æI$ƒ~ލþÞc³×Ûsã%“ûýe0ýãœéÕàÖµœƒ¤†E^ E cY<`ÜßL3<ßD•ýØ@?ðË­7lQw~ 1o!ÆY?´P›ý])4@«Bbû/ˆÈ§½uÜg“W&™Àv…*4*Áß‘GIÌßDÃ89œ˜Ämþ¤.,á.!ûùÒXeí‚õ8??³3?¾È-`¤Í+´-Âvü®¿lŒ ¼+pÏó…ÕxmÕÏ;öIÃ'ûXóUEhó"™¶‹¸Þc¥\-ï—²l_‘·QjC™øc²=Ïå~Hšèb~%‚ù¦g¡øfZˆ9ÉH çK&R™‡ g1 ™ÞsËq&õJÛ':Ï©ßÔ×ýe„;®½‹z™ú`dªNrËól<¿˜Ñ~$Öy»ü_Ê·Ï¿Ëáƒ~5c{Š%X}]ACÏ¿½„eœw®ô“ÍäìÊ0ÐïE/ê“JÔÁh÷[ßê;çÜ÷_ø¤õzÇ'¹‹³ž7[¯N„óõ¥›ÃÆlRä >)ðÉ[Kà)³Âù»Ó¡÷2 cȘіàÓû.»>¼.³|ž‰”O`̧§ X8Žºê§UøIyôÏ×{~Р”¡ÍãxW»ðÕFJLûјxÍP±4S–èºÂö/* {ì“‚´Í?ý¡~/CÉ­Y“U?.b–HéòUŒpö{³?b‘Àƒ‚ã•éÓ[ƒƒ)Á£ðºÓ'Ù‡çt+‘Üs ÉOWkXnÂ{t¡H_c‰ù}÷«5äÖ‚R"¹i„~eDQ·Ÿ ß~oijá‚;´û´z,=r&³«û¤Y§à¡FÅ¥i௱zßxGe|ÉÒ;bØ”c³$X?6;en~ÔãÀ·Õ~! ì(739c%l'5Ÿ…þNÙ±ø CExp’î¥Ìõ^ZÄìì²M}Œdf’ üüÎÍê&Tý+àE’;¸Xê0áÒ8‡ìcB3(œgÛ|ôàF ±î3zP”&u!yó a×Ì,¥FJ^ý©‡’ØBIÎü(ðŒq©»ùÔ¡_z =êå ÙÒJoW_ÆwII¢ÖÄ_J´­•ª (ÍŸ²ÑBýžÏ1ƒd€Î,]£Âsÿñ þ9~s©üŽG]î Á<èO¨9«—Ø,ëíáÒ3êR)“r>˜„)É|eR7wBó À²¥{óù¼ óú,³H’ò1ù+øÇÒyk9Ë,QôUÈ ðB¼÷—á=#ažþg¾{ƒÉf´†îªSû î*ô6:ekM}˜°GÊ>´E²¼j³·„óàÇ`;ž"x=hÑéÜ”OĦ¦5ÈLÿuÅëo§Ò87ü ;„5|¡"ЇÖjÑxްZFûu/¨ËÝ#wÉ:ºé ï‘Ž'î_£ôé³Dø[}0‡h­ƒ¤5$V·O/=Ô7õa7{,ÚøÊ«=RQ¿º®¬ƒ™# €‘!šö|¤ŠØT0(ÒÜgWåïA-Ÿ²ÖÑ߇1»}Qõ€hÉ àì#ʱÂx»eýla[djf˜< ®‚z}}©¢ïKÛŽO>?¯2¤È«”\Cb×p¢»xÄDí–KIZ/Iì¥ááty–¶G½èyRYÇrB#LÁ¯bTƒEGÚgÓIƒ6Vß°„ölkË—Zo$ŽL©‘{«ûr µ‡º”má;•[òß›ÇTÔ’]ÜðãŒm¬ÒÖ¢"›¥ÁGq‚ëðÀw“?ö}û9ÚŸ£^«8ø/WMæ7uH {qWëdJ)Ùå;ôæ.+×X¹NRáxŠÙíàá¢/̽¦Ÿ¨ÚJtß–æf€•( Ú]=mE†º8D ¸V©bëUfP ©þݯ€6Z5Ø(?¾ ïßd'ŠßVXâ^W—ÁØùÿKã¶@^·³ÔñiKT†Ç—ÕçÛŽ¹JÐ6€¬²&½^…¦_OqçÇ…žìÇ–¢³W¼ª´6ýõV!ôROc0ÞG û»gœ/û2‘z©øOu¤ g>ZXd ‡Å™G3S¬ùÜsMß߯\8RÉ“ä MâcßQ‰þ:%4£µäbœ‡~Á‡MÊÊ)¥àƒ‡¢ðÕñ`ëÖñSö×>mÙöÍ8˜ŠCÖ¡…7x4Müóëæ×ÔõUj×ð‡Q¢3+€±ÿÓëÄÈú&¦²×ZŒ¬” !eÌ̹zž!y{¿ÁÝæbû=ïÔ4Š_iǒù,üúÍ SüŸ¿Ž»Sv˜(´­c«û·[à”P©˳ Â¼ä©œ á QÄV§·…éb·_—KÞüEý&QR_‘ºx3Úp=ãO_ºÎ×*IMÿÉ’›ž(7Nª†üs±O[m3 dNjݧÃî”Cn3Ô€Ʀ"ƒ$€z_Ö-I¹Ö—l%õ.-óM5¹+__9–GÚ(84ê?ò‚±GÂ+M¹°"劦V#ÍoªíÙ‚jÀšz›EKX’ÙüŽbu*áÑæ õˆ¶Þ,eXûpy¾HØ#}üÆMR‘ó¾¡Ú("@Äã•Áë·á÷ êý©[õÆlXTíZ§uû˜!_û@´¥Ý<šú*s^7|qNÌÄÂqë¼k™¶ÿÚ32Poíµtsw}êåc(ãyů¯û·&b„ìÍ8 0 טPWÆHiDT#Td€›´ç¢-„²ø^ØE¥—…šˆòq᎒ÞÕ ÄÃì f½‡ÿZcR9F1k2׋Gd)̤uzùí0¹•]+Ïo¢*…Ž× >è©ÆnuM60 ª~ØJ‡žv—F}åÈ,8¿5ûö†Qì b/0«Á HP)Ó+vmªï³ŠSB]y¡Ã±-iòAS C‡½5‹ƒñ¾G±ÿ^âPÉæ$›”ÎýjG)öõh_JÒîŒ5V¤›'ÿ@Ž H;Ýý©#¶üÉæ«ÝíË¿Âû²fpô¦¦¯OWœlÖ;9 À06­ÃyÛÆË«ÂFã'$Ä»U³¼…©9IÔäI|ÙXœ™,á¾3ÞØÛýÖÂâ‘iœ¡šëTïb=â~ÖmÿYÓ|…òð¸å+Êì¾½ª~«Çžz /WÒi£ë¯Ûõ²¸’¢‡úZY¾±ÚzÂ|BÙ´°úÉS ÖéAƒÈS4²·o¡~|_gHë´“þˆwü¶Æ—MÖŒ’Z¿“ 768~KaL©âü±Àù›Ç8õ sÈ0\ùË·òî¶YüN“3€H[/¨üá~3ÿs¤4/]A ár8ŠM}ŠñùÖä€à>ìS“LõEŠÉôÆÇR´0^¸gˆ· zô’©=îï{‚ÖÌ»9'’€1}Õ0Ëâ¬Ilûõ'¢Q‚G'þ^ ѵù‰Ç"/òN›‡D¸Ýý<âeZ£—T…\û»ïØ·; Íì.ív€/>uÝ‘ŠhÉÂݲ‚î°{MÐ11®Ë‡êïò­(IAæ×¸¯oü—«±6Ú…•å_³½ÎûbƒÂŠÖbοã9ö~—>Ÿ¡Ÿ·‡›Ž‹±d6—¨u‡Wôì Ë©$ÿû Rì'ˆ”j´ü½Ï7’†^lõ0–5Úᘸ`() <‡äåü…Ž«§7×@\ù°Wü—)(ÿ kŸI¥ã;¾¾8‹y“$ªí C9¹÷Ùä…i´­×¬ºÂײփ¬ê™+4§["WOâUáI`~ø`¸’„… -A·YCDP¨ÎzÀü–ÝYÆ›¼C´Áí¹(TLÕý4mÇŸ’››N׺è¶Û #"½¥¿Ï8‡È«îOn)ªŸäàóƒ˜V ÖB±@)ƒ“äÝ›hÃ)·@f°õ}ÓD˜õ©v£Ú/‹ëõTÞñðcš¦,Žì cE½Ùá¶z\ÈÇ=/ñ{ú‘*Ÿ¿ÞÃeñ˜ü0r5Íå8†V<Ï“aÉbøGÏΠSP‹.ˆ× ¡6ˆø@ eƒ=)oÇíøÎ_oñÞ9H%ŽyAà¦`FضÒ{Ò¬¬¨GèwñÐB’xô;—(¿_øèó0E‘eù³ü^ß¾™øª»ö„ÚE+§ýÙE“r?̃?¯«[[ ì‘Jîº%Åú<_s­#šfê‚Ëw¤’£¯ÿöœäòÄ/èÊé\nÉÆ sâi×®àø"#4 ¹êݹ â |cv‘BÒü¦eó~Øu”Ù»û½©™àâ}–DÜÒ<öÉw„gGùã*käí"RÖ¥ª›TÓóD€LD @rjÞÔ"Ùã‡"—ߟ[=¥}=eî›Ñ2,Pv3¹u½ÁH>Й;ìvåËhàµ2§þ½~Ç¡M†~õºó ¥°óõa$ž¼>ó^^QùˆHцIÒVRpjÍŠÉèV‘]}böɑՌú^~ÛH2¾ ؃{÷9lÑDñ'lØd¢rÏ,ëo((vkЦ'¡? `ÜÔ£›ÀÉ_wRjTAÁœô"æP‚HÝpº“ý’îlÓðçO Ö¿qùÞO´‚YçÕ$3Žú,> ð*†b|é;™uw)î1þSB7òX~ÂÜ÷g©k*ýy™²?$ñéi)Z°Š‡ý÷/2n¼Ê ÊxÓèd4Jë<9ÌHÅš$(¯ªßïàç hÔí×Ë”%:âßQ¬ ¦¾iÏ"f[¹Ñ_ÖNô÷h ‡ì!òÙ J#Äx•SÇ¢ÔSFa8e{³qûu°÷5Yëw_ Ä닳èB+kÙù¾<Žß ;9ÅD/V_VìfF*>k®ýÙêêtºÛdƧ¸açñ÷~%O,Çï}œ Ü«³;–œñbg7 Ù®kŒ’äãSQÃY¡˜*]– ê>ÎóìÌ¡ŒE&C"iÖB04?‰«7~}GÄTT"%åóN§“½‘¾Íg/¯}Š—#Lh‰HS†€Ù‡è ¿6]D?[ gù[œÞL ˜C†ûê×ëó+½nwoXš_÷Vß"¬­/ŽY¬$W’G¥vô& MA½nŽ)O ®ŒxŠ}»ø[@.*—ò}Š†à… Üv•·éÈî“æ5Ñ/Ç]!}‹lz}¯ÒÌ!7]ב}¬x†ø*bWºPwv}þQô ïâ}BÎ+ÞÈ~‘Ò'p ¿j†|†«Ùó`èà×鉸üØ'Í\àx¬£äm‹¢…€Õ “b‰hþÎꆠýì´y=‹cÒ»ÎlÏ¥‰Í)¸ý}­ò©ˆ[`mQÁZmöÅ߸lc¾àêÑÔŒ ÿ‘1šÝB4<•x뜈Ù{ìá¦÷’&´Yd洘ĶÍë÷¡)à×îõY7|à˜.·ØpP¡w©»«­Õôš#òÅowÊ—q-M÷†ýËóƒô2n¡î¼èæU/?Ð¥ÍvöX‹¬A"C1Z LŸ|ïç>ž"Zo–ª9ÙÄH,ËÄ+©,…Žüµü­fêK Ž®Gr`á7KÄV±s“éÖ2÷£ñC³ö¨Ø:AmU6d\wiZn›ïX}«˜6…¯°Ö•œt4qÌqù H7vO·~4 }wÂ8Ššf.Áu»òëgx+±«Á+z[a?&ÇÄTååŠr‘7T*÷%[0y욤ˆ®«B‹ÔQ<|ûŽ¥ºóÈÿÆùɳšìâʃ‡á_XJ$ú.¥¿súÿ×@†º|©–y¾ƒÒ2ÿœFdÓÁiWùÖ¡óiÀg—9)é‰ß8Œ}ÿ¬ Ô ÷ß{±Gõ{*ð³ÊKn9¤ô)a“ËÀL@í¸ÍB÷¶ö[~NÊÖøÆËŸšßÍ Í—hØD+©Îò6ÎCûàc™ìy±³Fæ,3¹¡éÆem‘>ˆ¢­ñ¿Ü9X{:øKF«c,Ûpb~`»Ù‰¸Ü½_r™  † ˜Qö—ø…©´$RÐ7ê9×.ªG5@sq'ñ3ö¾ýª÷6ǃåM05NŒÉZåå¿»€i^î¦iaW°›º·u|À Žz…¯)a×3a[DŸ3{p"ÚÙÇGÍa¤ïƒ¯žŸš»S®õ¬²Ï×,þ{‘ôâá1dýŸ ßÍôƒÕ Ùå¶Ð9Â5SŽ‚5êÑh¾~54ñéïMHÙ§î„»¶ïÇÓW7䯉©µXŸü=`‚:²ø¡ðpî{² I:bu`Ê~¶v¹ýüoìÇJ d~Qªþ'TV*µëÿM#þn?ð¡«kÖ¸ÜOò:”½E÷Ê6pt#¶O ¶´[î§ûî/Kðr¦„¦' |ȇËÐÏÎèfa(¢‚^J[N÷a°¬d:Ès—ܾF¦KfàO¤}Y•]R–…Ž$‹ ,‡Š‚cXÎXí ÙuZØ#üGTRÕ­ëËâ0¾¹EêŒo7×hoœä‘5¨Ë |0ç!îÛDoàÅ]Õ›¤~i%§lÑØD…ÙGƲ©×8•.~ãè ¥šÈrͶK‘ue%ݤûò ‘‰V G ßc M=V”F»4{ôÕ^ ß „Äßẹ{Ó®Ô[ ig]»]ÌÜ©#ت–ièÝ\Ö%…5¸® }Åå–?õïó¢ù-æÔq @µdÔ™>8Mné5@Ò][SÿöÑÇv´€+ôï2ÕÁ°¬}_X7—ülÝì.ëgfîÖwuŒ<Ö¹YºíÇÅ4=CáÔo ïc(÷Y¦ãQQ{¯Ÿ/´ÏñÁe?ûLRE%»Û¡i…¥šv–ÝiE—÷x– N¬° Sm3tçìÌ ùuY): B¢ g—¬ÐŸn(Éß)Y¡ù\¥'H¬d×ó– -š%#*)u²LWèýç´¼âdZ}}”·k"–íUá¿Ç<#<•´øÞŠÃ?®-»ˆFi2Ñ€;o7ÅôBNôøEŒM—œ;„q )ŸR[‹DÌÚ’tàã@¢”ÙK?“BÜ‘/¨öÖ±†è æ@,•…÷}Ëä©¿©ŒàiÅhޝÄß gU†§Öd}ˆGÀ­"j ·ë›îù<™ëQ—Š`ã1þ;ÇÉUacç/þß]˜Çgåàónùµ¿ºÈŠã$°‘¢ßRo?¥ÎÚp«gÏ<"yc©7Ï•±s>Æ®Œ ‘׊$Ð ;²ªÊ©UŠ9•†ûÞiy#êЦ½„üR*ôY§ºs®±C?WQ¾Š|xÍiZ¦¥¸Ž«êKbz1ÒH/ݧóSÚ+{Òå7ÕÇ{×å>%¢`'=sde—ï¶cˆþy0ql|<„QN˜†bP î™4KXZ=ÑÇóÃ,KEø˜¸Û„:)£víZа??ôCGØ¿ÜRŸ¯—ÍÖw'x £ÏþØÔ€Úø¿w™a¸Sá#µ½¥‘±!R„ZßÙ–ÑÁþ])ͰËô:Hg†³Tÿ£—ƒA‘˜™EŸ‹§Ü£Uòª|(êèŒáãzÒÚ^É¡ôÃiíçŸ7?ÐÁªå¬ÜÑÒ/©»{{Ÿ×<öƒó"SøÌLaï—¯89~ó­=Œ6v÷’äã[ì3b¿ÏîmëË9çdÞâOñ-µD„bÙðòøÐs¾in2IççO—ÙwsãËߥâõm'õh¾9>êX‡/†b˜WÚ¹@Ds)~¿áDx½d/ûn-"€¸]@¾+v±äö>êÚáÅ×|ö¦ùúâ¸iÁüÇïè£ º²ià .êî7¿ï*‡©Ì¡=H$ä©Y³m€”’½–löMƒ2gP gj' ”ðÉ&A%ñw“üloãúåÖ“˜‚:Ç9d_Î3<ïü.ȾSNs~úë,µyžŠ(çf7›Æ*i$€1O5Î%ä4V|à;jÐì »©g30Ñ+Ãò_6yJ\hk6ö“Y?2ÀT¿­)`"ö’Ô5ü•5õ.úQ«t_ï—0‰Iú5ÇScóP$õ$‡d:>G6"QŒã5ÿ¯%ÇçNÿp´T/\‘9½¡ `i6)ñ‹&däe¢Þ˜ —:¦ó­¾ÜÅ+e™'Cuü$@ªc’ }–‰9)vcA¹ûuD[Doí€æKS|Æ#‚ékÓ)˜a{ª>.ËÀ)£1åÜ4›ÃcšžPá $š³‹BÞ}cå2,aŽl?²%¨ï€>úz~zZïE ‡:/ë»(°Cœ £K¦0Høü¶'õ St£› 2«ñÁPG^½Xäá{ Æ'Ö-Œ.—ˆ„”†a£J]O¶ðJ4)ƒÃ]ô5˜‹ÎyÔ]“sù’pzø%¶± ÊÀmšCÉ ˜T<¢gì‹„=ä¬ KxOFTFiPb Ã8h-~#Ñß€Âæ þnè Y.*øW¹/8©INTâ†"’‚þÆ$_ný¼±A=ÿ"&ÀêÔ>l“«úà`ưÐ$Ð}³=NûóY—h¯-› ©Úe‹ž¾x:PEÑ\ØE­^Â*™¶½dº#Ôb^oªÅq(÷+Q2MåÛpŸ§œ]ñ–ij µL3‰à¥Ã–”w7i‡<ƒäU™Ÿs>Ëqã;ЂåÝ ù ÷ƒ½¾Õë T#‰ø‰‘(í^öLíØ""Ò:—™ÀúadßrO°ëµöâµ'+\ùkx´P:Ϋo{Ò‚ð>«!î<^Ê>›”²¡®æ¬tW÷>ÚˆØÕÕa¯´øDS°QÌÚìSp–Ü”rjbÈÞ)l;|\ÜÂèËÖÖï@×QL}ŸÓ|‘ÆÎÖÊŠåËNO•‚¦CÞ‹×"1Ql&Ëüý¤ggHj}ÖLáüCŸ½»äö߉ÌÅòÄåÃz‚!ø¤Ññès¿èa4ý’Tñ;z\MÏß¿WïÃè~àÞs‹Ýâ‹•.<õò7)0ZèÇ×¶ åÒK>Í$*æiž¤æ šcÚ,t†Úù…¢À´ðu|éÒølO·Ýo¸=¥·Îîš"³Sò¿V±ˆîÿ½ºµŠ¤¨³gépQÌã®…‘†œ''7–­S§Ób-´U~'ó®´ï÷˜ûzj(X0ý¡J”Òl¿ÁÂ#ßéü®¨ƒ:äÿšÈõ§íãWËSkm’…!ÏJ÷ìãÇ bœÓËôÃC†¿¿H,Çúø´­|S_¶¯ì¸¯n¼H)9æŽûàÁ‹³ëˆÏ/_@ü²¯jùèÅתKstÈ'ˆï¶Ä áœE2, ƒ«¨Ónš/7í­½á‡Åº„/¸Ä0²f8$‰®ÙŒ(áΈsbäêPÔ„rÍ®sú­PR]”·]ÉV.;ÂíådÙ-Êrî›D~¥o+ƒ|Ä®±v˜è­¸×:7B‡^¯­þFIòüìÑôŸý½œø|aó>Lí&è‰ëÚž^C>á½Ù¯~jôâ°XÔn4ðºwHgç>˜¦]ûUI gù.÷U–éÍ]¾&^r?uòÆz2À}ó'x—9z=fŠW ð{m3çÖ—j GŠ” Ï”Y%Yom—qØÉÏo¤ÇÇS?Þñ-@ Jž[ðûحŽ ýp KP ‰oJy4g¡‚žw,‡(Eð¡íænÒ ˜÷œÇTü˜ß£‹6í†h/)Ûeµîü7g…j©Ýì@äù±»xÂrßÅœ…TJMX¨$YB¡•Iãç>µ¼ŒáõµjöwصAÔåÎÞOYïV~“¿·è!ÐÛ‚£lHg·÷×aUÏqqq@n¸ø—#S£nJ÷g̾«âýšKKÎÛ†à¿Ã’•쯅ÉQ£[=4ÀaÌ{Þê’öGoù+ƒ ‰DÛ=z…-Y ÿ7¬èïµaÞ—šÏ§îVõÒb/ û~N¸EÔý"è5Œ¨ñй ¶Åw›ü3È[ë6{´^?ÿÝSæIö­®h,ÑhñÓ)VÅõ‡ªû¤åß 05Û¢ÆFÙ‰Zçh´ÏN=áM,mûf@âIlÍnOu{¤¿5‘óp‘à¤d†Ñ>u‚ñšoɲ­ˆû)êsq1±SË@*¶<à 4#+éùMxÇ ÔÅ·þ‰ùðopìh¿UÖ Ù¿ÇÇXˆ:Î8zÜ <à6…wsŠ?ÃGöšGMf+è}ÿÝ>e ¥‡ª½†ªRÄ×:°™CUóÑÕ\Jq÷Kˆö6d­Ï)°LÚ»éPz ,ež_+eó“Pá|þˆ$îìá¢#®ßòýâŽá»“ÌVùX¨ËÃôÈÜ N„ ^~W“zžñâ–йõj«bÈà= JjKI…ÈŽðß|x¦ú2 óâ"oÃéJ¶0Ô»x_ 8î%­Úˆy•§ø¢‚]r‚g u”ñ:‚"NQol áÆ¨Aü’dž|ü×8à¹OA9m–&t+$ï@–û”©ú¼¼ X†Ìò’Îo’€»¢#–seZð›FÏ…ÌåÑ…UL‹[0î|œ¾Á{%Þ«*f×Ûs=iÁ6sÏCW`Î7ü¸OÅgŠÝàS~Äyí§åƒKº¨ÿD½õK¨C¼‡°Óê•m8ߤ3¾ïèDÿhY\l|¼½³6¬`(KN;ÕˆPQgæ³áÙëò2ŒÝgÐüdªŸúrü7ˆ²Û¸Ç^Ø ª!ÄãT¼¼u³M¿cMΨÇåeýµ’•Ý>þqÜ5B¯t4VÔÐJòëåíWC!yÉßCRRˆ]¿ˆÞ{ómÎ:L(8*7¿?òò5búô’IRÙÆå6AŒ&SÖZëþn) µÑ¯º»Í½1Ϙêû3þ(;ø¬Q{ÓêŸÇöö\Õ ¤0¼rsÛ{òsÆòÏøE§…:AbSi!€Çctª"7%°‡²Î!M3_ÌòeÞ¯˜OZ(¹ßO¡Z; n9yƒœOò½îÈaº›7iÞ¿à•ÛÑ˘(‘FvöJtÛÊŠ_‘óyPž½“ké~ ¬Õ^¾UŒ/:òDEz+ÈLhÖÀæŽÐ£Ë¢{¡0.«ê#¬Xò\“ S_}{#”¦„––Y‰™¨[ûbg©©dæ×lårºâñE‘(SF±Ïò*y±}ÍfHïA³|ÃW?w_ñC ÅÞ…%¦ñ<1¯Ø¹·àqÃÛ_Åû¬î·Æ¸3ÁNn§¢_iiöïø¦i+†Î wÐ…ûýó±÷—ŠdÇôhh¹&Ab>ÙœGÑÚ BÛ¹Þ8ä{ÍËè«gT¬«ßò¥  ª8Xó#éÇ>`æoÍ«~ÝûGß^»„YákuÐlàí\‰y×/§-|¤Còñ"ûPG-oé.=ưëQÖýÃüb`áæ,“AÜ_ {‡5í™ÔlDv[ƒ.XÜôûÖ¸ƒ×cþÌÉÖ:İïÃØ.Ђ…G2(l“Ñ}„—±"¿´}Ui[+†;?»“ÓˆðŸÚ×u2PîÁ’ô<\Ï]‰\"ŸûÉóþ‹æå-Îå¸ãnںɫ~û›ð€Äß;XÝ\ zÿøðLÞ ëÆ´cÒF0Ž˜æ7 J†¾z%dJÒ³Ýcn6&EAo…Þ>!l;/èCÁRHÒÆ¡gøDP½!Žù‚óKfñ­uXª ívò•Ç@˜{lg›r$i¾‹’Î/YÌ8<À–û-Cƒ#FËO ÕjÓ“ÍbF²_~v±©*jn ü QËÛƒja-²6øºÉ»å%—âm5cÑÝ‘×@è§¿™íÕùwü”ÖÎ0åì¾ò}$a‘³À^‹òåž{9¿&cÉ…v"óGÀ¿uši ˜ÂøR02ë¯zýì¢\Û\f]YĈ&ß™†¶a=8OÒ)3IÚ¾µ%ì:@¥;ÔóÂÌø»jú£È7TÑõñšÈüÖäT‹(Sz7X—‡jàìÅV¦¿÷™û·B×,#JeD4õ^™Úÿm ‰}œ“scÖGÕËÔÝä#²`}ÜDkPÄžeuðUÍqáùI3r.:1ù';hÜù[»c¬ÝÚ$ðN’>ùkç5ßÃ#Ÿœf˜Š ;øÉüBß’CÚ2ùCµFøt† XÄEýÐÓ¾&ìÿTJêi> xŒeoÃ8íßFÞl¬G­GR¶ƒg•vã iÛïö…ÀèXr•ȪÒTz–Ò³™õh¡ï jŒhµ×v{­e²j!gçù¹½Œåk®†á¡+‘Î-{;WÃ|> ^Ò9ýx]›Éì|¼/ˆ×FWÀ£…½ìð±ú,_=Ÿs%BIêô¬eeÐ_ß[&Ío»ñÉœNPï^Oê]-è‚Vî©6Q*óÀþ5Л‹ÅÁ¿!‰ •[˜™uì‹l½Ë^ñÄ"•ÏÖ’4œi\xŸÆˆQ«åùu M)ómýHbüºŽ·þ6{w(ž,V~·Pð`™û 1ÙR½¨w-OyµíoÿJÍ”w¶ù0UR­–ú;IJÐ`)C¨²]cÅ‚M¥i¸Î²Øât/É2Ã>®.Q{CºÎãÀm†F#rq0 ^®GljûºTuØ™†C§R’aè1¾óc ѿþ.ÄX;Æœ1‡Y$ £É¹MΤ¢„BÇTÞ ÅBUÍ¿}œºêõɯ¦{û—ÝÍÐÑ—è¤ø¢ïl"Ø _I ²Î€õñºŒÊÐué‘§]@)†‘˜'ÒÈéÆ?ümjT¸À¦}ZhIü(]ܺ,±:•¢«ƒ'‡ÇÏó™Û.Do“ÌJq|n·Yg¨ÏÇ‚ÀÔ Åü ŒÎbÖÛ*á¼öÀ󯕻”ª!÷–*À-€—†U‚Ç1C4E†$špè%.,„ühNýVâïÀ™Üú“V"ê³S¨'½åð úH#m]ÿαô-ØÝ9~ÿuL©».Ûa?Ûà=šw7fóŽŸ&ûM‹q¾^/¾ ñï­½kzFÝÏŒDæCG<Ζêß±o>Ò¬¡ÃVË GIW´BÌãJõ묄¬²Í™¤*û¯¾ÄÒÒÅw1œþtå×P3œ}¢6½h­ xÐ~n¥—{´Õ Þ!åÝG±ÏßÛLAhUY™Û hðÉ4Ð~xÓ’àdxbßAÄyµl;g *ß"°ÙB¢KZ>?Þœî¿,÷IÁ¬ YT«ÌO«½}d¸ã‡ˆµ^5ßGB6æƒ9ÑV"üCˆÊ$8NÆ-ÍLæDrHÏÊóÜ|_î®Ã)n߉ê×vhAˆWs¬ØÌ0– íñ æþö˜a¬¶Cq´m±Ç> pÜI6xœ§¹„6ccùù8sz]ü³¤ÿÞRLm5»¿îYª )Ðùù:Ë ¯0vêŽWLq°…ïÏ¥§œäŒAJ2{àeç¿l[!É]ûM’¿sC B± Ö/üL‚>J-³fÂ~¤aÅËO*Çq†7fãõY­°¨cóü¨³‰¡ð Eda±’c™™Až;Oªbä_CSüX ¦ÛMô¾5Ð8Ê#~‡ºxÅÞ´‰¯C›méÇzÊXº¬âæ ?i ášÍèC”Ò=+¨üN˜k%¬`¬= ,bÍ¿.Ǽœ±3l2ůÆÐ¹ø©u¸('Rº¡iq\¦‚ü7ÌGŸz$ÛÜy1³Ú‹÷¢†m) À¥­áI¹Ù þJücøO¥1`zëJ'‘>VÉ3H¯Û-¢>&¬Š¥ëãHsԔв\l>÷>áø†%£ÎñËOÙ öÝ;Û·Š‰Hð·CÕ|Ć玽ȩæôÐ4 °¡ÞâU|Žð÷&ˆˆïà˜ä ~ŠYÅúL4w£  ¥‹Å/’êIä$Þ«ã<Î:ÉÞ{÷=ÒršSÀöæøµjñý;¥A¡³QÏÔ 7òËIèZ‹àlछ×Öï¡ïÉãXQ¡ƒ½<Ù+'3ßtÄ%T¥^ååó…œI ˆ[ofï—oŠExÒôcöÈ4QT½=ÔÓ›?HÕž VÛpŽ ß©B1C¼©ÖS¸I WÚuÐ ±.1çÈ:^PgùJ²¡çgÍ/?ƒð_ÜÙ™¿’¦Àgìq®:ì9¯Þ`¼6Hð™^%pù*³Ò‡í8°/*%l.y” 6'%c~à’C¾n„^ãÍbO€o§pÿú±ÞbXc—wQÎýdEˆs~ þ*Kï³Dµ\6Ë#\²ùºl5wß`ôÕy9áY —Y/æÑ·ÃŠŸùÝ]á’ôíDóß?p‘|ÚmáM2ù¶iÿh&¿Rg%à¥Õï¡?®Â”¤™Ä¿«: úÄÊ\;ü×yñwp;8™ýÆ{kÖsb¦*Ó¹Ö‡=†YøÊTZŠÎóÈf§uÑŸzòæ“â`Þ%ñ\+Ÿä”ñt}`£á¯GȲÝH^‚/×.~1¤aV¡Ð ¥:j¤û¦‚h|S â”—ø%EºßýîAÈI¿]y8ÏS@ó¥@쉩·D……ÑÁ-Ÿ›Ö^^Rö­£¾}Ó‰ìt´† ERv|Ì!¬‰:¿XžVìÇ’‡Q7µÆ^ý Û9k¯@ƒ'ÃhCë¢çÂÿe |XbŽöN†¾‘£™/Uy;_MÕ/Ñü1ñek´õ¿†ÞÚøzuk $ìkˆYœC=°ó0Û7ª‰¼·‰6å“‹¡>‰ï7ÏýòÛ &"Y~œ$¶«ì¿K L˜oXcóê©¿…fùöû¢ñ¦Í¹¹™.*§dú8ÝieÊ)£S]¼üʧ½]_çõˆSû€žþ.v[œŸübl’jŽWk( tó×Ä~߈"8MæÝ“&#MzªI2—ðþtI  ѲsÒéØÔjSî¬Öcøûëb™¬ÕGh™¾â3ísˉɗîSþ˜S}WúšZœø¸ì“ÿÚK™fbðÂuÅXOp]@§Ð‘…ÌóßÜe›„Àg«Õ|ig;~bLOÆ~Qò³m`9(âßÉM8’ŒÌlY¾‹BÁr:þ¾ßv‚Рæí8 &s8ÔŸxô<‚ÃM?ŽVNcZýu…ßšÚ`‚Ý]ègF tfïåüT‹4k?1×­%Ì‘NTMiŒ°%xi>>óEÇ|ÌLÔv½ìC[\ÊÛ×÷ ª'OèÙÝLÊ„(Æç¦B†*¬tŠÒømðHÅ+<}OxÞÇÅcëˆ}÷ƒqh{U8í™bô8wØCþkÍnÑÅŸjÅdv ½Ý¿C ööÂ×2•wGàHoø^Ⱦãhxk.ƒØyûõWE]Ècý¬­–*ÿÐf3B}»ã»*ùwü5&‘‡ã À=CŸñXôLMÙç-ûX›m\ÀL”¾lòk‘¼¬S*<ïså@=$·JÁŸÕ§…6|o¬¢Y×YEeE[^OŸ¢ºÀ(zÏÜý%],=åv³»¯Co]¿@ ¿Qbû›MÈÄ›d×<É-ù<èíw¹ö÷w„~;€†•C{³Ìã{„Šñ±‡%ëØÙçœ\gì».‘À&°-:‚¿Gá蟌¯ÏW#˜ÝÕº›‘$ÌT²½ÄÄ`“|ä-²W!h>Ž‚ýz²ž®äöÚæ“£Á~Ñk’qæ7Ûö1t¢øHÑaõûmóV©q4Ø›¶Â@ÕB9<7_‘››yÀiPãË áܼÍeÄ&ï›Ѽ$•–p?òôJ«÷`WÝ0 É{@ ö”o” sD‘q EúõÁšî±2x\×zIlÙ-ËED,—}~Z¨ÆÚ¸#Z™îuÄà^ø›æ¼ëòÈŸ>dúhÔJóÀc]JáØ–³WŠZþÆa½µx>T(¾Ì?b>?r"‹Ý×|À5H:ß™åí<Ö‹™q:óÏÖ^s òƒ†Ó7 *Uši÷Õ/¨‹U»´Bl# èñpæß`Ÿš%ûèF™ó7¾7^°w^ )Ó—ó]zêUô}‘@Å5±Ù#[ãèómël˜a~ˆ˜g٪ȷe_‚í¢ep[먽õá _êƒ _J¹s¡®9(cûñÂ@é÷k®ë|´ Ù0MÌÇ­þ×&’±°ƒš¾R®Ø?x¡s›AÝN¿ì^•üŒþ‡fû‰~ÈQ½üÞù–{Fgcëü´wÆkmó º”f´ôJ¾r‰y]AZÇc»}%ÏB-E„¾™Wñ}£¢m»ÐÎÃø @ñV7|)¡‡üÍ÷•7Ò£æË°¿oüä˜'_ S¨ôñÆIË1’Ï«{$<—ü£Ë†/hâùçí鞆Q ^no¨¤ÙÆÛb¦Ið›b¸ÇÇÿïªõ<*õØ+ÿu‹È4j¿\’2ÿÙ….xýPßúäû#Ie ƒÀ îUâs¢ï‡6Ê c;âæ×]Fi“eâGêr¢•oöF•ï¦4³v×]fð÷–J!Ôy®€T•2³ñ=ñòúàÉVVƒ07×vÖ-3£‰*SVûÃù9î–xŠ`W§€¶(öî=æ<]‹AôgÍN¡ag8Xº ÇŽ"h´YNQ‰ge"øäÕVMëÍ ¶.Xºö÷§Cµ`©Ì3èd Èø~Y-Rràÿ|Í.ׇç´(6æ5 Æëd]Ë/œ,úF¯aE° >^å‚ nEïû­~ ý”^yÕÇ«{k®ê è7}äht¶ x³­ÿ~³@{Í•`B‹û›OÅYZÖ]¬9\G7¶õ ÈÚ^D¹§¬àEýúpbn8‡ø;¤ïaÃ|äœ ç¦ŒøZîHœ¨G•~ë}ýšIK£×?qëÙI Ú¡ãW‹*w=7—>¡XÀÝ_íÌݼ¢Q¸8£áŒ¿‰]bóÔX‘ˆO¯«Yh s6Pw¨@{°ïhà…‡¿zqk’MýÛ\ó~£–jÚÇ–h€’ܦä¶K@ûQnÒJF×{kåî•Oz`üí›L!P¤s[Aïk˜XZ_œ†þ×Þ—u©$mßϯà¸o¦O L)•ÛsKAA±ïp'@€@H ‰bùõ_dŠª\vÛ3ó½gè¶‘R©\"#žx"C«ÂXëÒé~8^—æT}Z÷·Ë]mgtúÝeJ1Ûf;™ Ël»Ô©¾­ËËQoëN"A{`ƒz£¥Ìœ±æ•î²»«$‰eöú›qsÖÑykÛ[u7…îÙ w¼ ™\јäq¯œ]óm÷m¯ÍL§Yg—Ê8Ðßâk`"A{ìß²½¬o,È’xNÂhû‰E{ÐÜê“m[~bYI>L!.é£2Ù¡ 5œå´y!iæ57QάÁ0µ®Î;N{˜]”q¹±yy]^\e éx1pžj=WïÖ•DBë¬_’h4.O{óê<ÎÛé‚Ùɬ"«ÍDél̉SçE4ôÇ|õæW}’Û5‡óiŠÚoÞ«êfÂvš#{Y¬öì¢Û¬ö¹:ø¡j1§w‡ÅL<ˆLæ.š>/ÕÝÊÍÌ ¯ý•#ÕœUmÎê0¶ž=Z¬ªâßg^6 V /Þnšï%ž{«ºC6/•]rV-¤þ¨ñÌ)(m›­”‡Å¶7_é¶;÷–ÔŸ­SN{U‚Yl¥Ô¡6N=49"܉/Í·M²:)÷«™9‰/œ—œë§Ì8®|oòüÖJuÞª-z%Õ“Áª’öÚRok­QË!.õ6‰R¹ï÷6σuo@¹F¢=X7­ c¯ŒŠnÄ¡ÓÎzÞhx½Z­‹MÓž¥RÉd3³tY1SOóÙº¦Jí±—Ý ™~Öü„•i/;%'e•_Àµç9Ñs32ª…‰¥ª….qjíTv¨ç“8ŽÇÓÞTá-œ]õña"P+!25J¼ä·6Mæò©‹¶¯…•î¼U#µv¥ú:«‘·eâa>h43•â®ÈÒhÚj&”Ä—…Rw24ªÛ†_ÝÙh±5¼ÁsÂöÝÞ ê6³¦‹Ðnô,Õjä' e¼v™Á™–L´ºO<$¹¬Æãåf&U)ëÅYcö²™¦A ›¤¢<,I…oâ|XöC0l¿˜Z§G2ngÙ)úöå¥òìÃÈÓJ2åãRcT±4ԿѯO½R‡õÄ(¬5¼nïÐbÒÅ §õúFñ4òåÚsû-^mXS;wÈpà­N¤>~Í2¼›íöÓÌñ§‰NvËénñœHΦ~‡._nÑʃ¯´–¯¨Ùu…%—ë‘2š [ƒ¥M‹åørS›8 =’1¹LÉh’Á+Êwd¶Í~•;yºÞøŠÑ­óÉ H½½tço~ýy4ÏÒx¦ææúÉ×–ÝP¦¼Ò˜c ‘Je’¯y?Eœìö¥ˆï {÷Ö˜öÒþêa6ß¶kéb¹0¥ ½õr"köìÝÜîY/U¾+U´¹âO_íÞöµÓEx¢5.î¼rP^$êÀŠ­`ÑÜv&þK·—ïºZPݶ©1é–Ò‹ò<_œ/|ñ3Uóx¹ô0Úq½¹ ^ yÏcý¬³”žŒÚ³~®FfšBßU2ÛnõêªÅzϱ¶*¹Nû%&/‹Z¢;Õ¬êF„ëÃLÆÏ6zÑÈ;5æÒ¹ÞØuZ_?ì#Àì–µDp¢Ì6¾Po¡q/;èÌ߯ÏÞ2á$¦ëÕkeÉ4*M·4)˜EÖ¨Ÿ©ª©W#ß³/®íÙú­šé5_ߦ¥|âÁ’á”æ5íNŠùú;•Ö–¬‹-رH®¾vÐ`JíN~—\CˆXîu–9{1O–×5®’³Ezíôçˆôó€F6¿íÌx};¹~×·*ëFÕ—Röæ!B”‡ÍlœÎëÓ¤x0ìm<é—s¹\fþ–§E„ߦó¹Ú¬tšõ¹7_Ùù5ÊL]ñïÔsý Ïš†£˜‰zãU1Ó;7RM^Ù’¥–Åi?QίŒdnÕíùÆf"þµãÖK‘à7>x] m¸|Y•L=ŸÐK噞ßÅ{…›Íù&Õš´)Š´‘;Ü ›}¿:Ú6ýÑ<Á]§¼Jšzm™B¹%Ÿ½%ŒDǶjƳ5QX²ãûÝ$Ê ÆulV5µØÚn %éz3œÏ—ÚÆr§hÏñ}™ñl5­''—æÉe·£š,_•J½ZgñÊôU]öêz>†•oñ\kf•’VœpÕ\-s­¾å€ƒƒüvÙ±¾²Ý.æƒVH›¤XȲ`½¦¸á+óÜôýgãA©Ò–ÞMUYÉ Em¦ûK52ÛºMw–›¥™‘Û¢]Ã÷rí´å¶^ž‹³IÁ™Ó‡yºñœ(]Wž3o… i²Üó|3öÐÊw´gÕÛýJÞŠô{KãÕ˘¨ÏÛ£š ;·žì­â*UÀ»fzãÞ óÒÓì+쮚+ÔvõJ gPz’m;,§ìZ“~!ÒïôŠ<»êÌ[4gJµ‡4™_÷ʯ9QM©aͬ‚UßezÝ][ñ¬FM›¶{ãΑœmWkÍŠ³;ÛFÞëÕ…Ä£HÕ5 ©'Å9L2¦`Æ9?]ØÊTS€›Ó¬3G1ª3¬°“ŽIóˆZô¼pm#°\'Û¯e“§•™Ycåû–á$í•w¶ß›œXöaÚ|³dó ˜Â9ÄÚÕr^öpBÅÃQÝïQz„¢Ó¬³¾iªüäÜ“¶é OÃí‹Óo_×›öÍ4de˹Y˜eÒÌÆž»r†9á6Ï.ÏÝ¡)ÐÖÉt.nûö¥î®¼ ±˜Xƒ÷Dòë±J£„~€U°>ø“èò1¢ñO"Ú¡ÚQ¿aÊ‚Z|8eíb2g–$§‚µ;S9¯$f¦‰ÍŸÞïœ.U>œ.E—ÓU/gKy S„õ‹Ùª—«FTÀ/Ê~ØýŽÉ¢Õù|EBEÕ`èXÕ®&Mc)H¿ÒÖ›ºRe `±ŠéÃä±öáäUåbòäÒF‘¢Ò¸ |1kB®H‡Æ\±E-ÃþµÓå—4ë² ¸|æ„g?qÕøPÌ$yPN3]VÝ­äöŸ¡Öç0ñP«áŽ?òíËÜÏþ%Ÿaˆûoã‡ÍÜ{9^¸¨,ærj4lÖ3}™œùöe‹§x|±òì˜ë¡øn‰›âõÀ²í0ãsÊoïµÛ©lcÙcLÁ’Þ€^©¡6P!R”ðöP`ò4ÄÂÃà8Ñ”˜FEø2S8× ±SÎXÿÅ`,+\–Ø $R'¡°4g\'ŒòGácu* ¸@v’6èùñx™ƒ°@뱃XÖ‡áH…4¡çÃ9ŽIAÛbÚrb8¨­&+^œ*çĈ` à™5¸ܸyŒ‡B<›ÿI*b€6rTzIaÌ`êûêðM¤(ÏÖ@â´Ò‚)K¥Æ0\&«D÷ÇÑ‚ÂË/V›2*!×(„×R75¦žnžîWä–V¨wp|¦ŽBƒ@Kä CD“aµý÷©`wë¾ ;m1}žÔý= rÂŒðèð^ùnwˆÿx\ÇéS¢_BBüñø8 TJ±$8&<À|$€ËLAñÕƒ‡{ùg÷ªa…ˆ„ÙpYÉŽåý²íИÅß7îþìÁb êÐIÑ tžåG½(“‚õ/ÛPDŽQìír}ÿáò]Ö®±+Ö®‘ ‘G/¦*ôàk5…££×Ãà\ W9;z=íXâV5ñ´G¡«Ó` w*ž Ý{?‚b/|tªÍ zÙü©š§Lä5€IiÈ•®DHU™Î…0°ÁSuNïXœzþ¼Ìßµ£Kí¤FEß¾H±Ÿ? ûç'}óÞ5ëÇÏšF؇šö1C MC²3aGnvaX» /¢ïo¾oXáýQ5òÁ¢qçñÑŸŒ«ÂÅø¾}Q¤«ƒÑß 7D¾_ê V>Yø¾ZrM¿TKptÏfìžY÷‰/,,,F.r±Ý/¸„ãBR@P)ޡ֒Çà]…›´%UsSÁ# ï)x¶Žw¸ÖPS…Å«ÀC¤eÔ¡4(µ¶§ÖHE:“Î|O‚`<„òÓ9´"Ü£T + N£ˆ_fX?qís™„̘ú×%÷ȲŽ~•. ŽŸÖ×'Še»BizBiú”†EEW:$K:ÄÃê^‰˜x̨صa «ì DŒ…«G‹êÀÜB.¦‚òh` ¦Ò€î(”aàƒ@ÁUGìž„Aç1@@,4ÊàoÐ !÷Á3SÀ;q†|QFÿŽ«Ð«¸e*ü `"\ûÁ€é¨Tã‹]Z芼?†¯’xw)#„.ÊÇgä:AÔ·væÓÜZ«ù×°@\| Ÿ±KÞ Ï2œà¢l-÷Ð/Š`bf0˜ÊsD-g’yRÂ3öÆÎ“^ ÍëÉ SÈW„@÷Ûó‡flS¼­õÅôñ¡tízÃë2ÙâQaƒCK ‚hß¼¯}ÛÌ¢ Ï{¦ï‹Ò ÿuíY´Û´O¶…¢p°Î`âzûÑŠ<œ?±FÁÓáôëY ãêíŽÙwÂ1á3îùáitù<¸=MGb¿4Qá•"öÙ`Ó0Z=Œÿ€I}nÒÑ þnÎG¹ˆ‹ ƒ’âÁ*)òù^±Ë%4\c¥â z*Bvy,žá8î±=5EÇ€CÕ(Ûçc„609æyP)]ÍGµ¤9Z,C±,RÀÓG²).HnªÈ­6qN€ 2ÃÖK®Ô™#‰S”3žˆ½…ýHsý Z Á`4&6¨TÙÈþ6q×½„ç¿Êê±Ï;‚ãVËmÐ-ÖHáaüñ@aëú‡\è˜7îhüT&ãÃùˆÏ'ÕO˜ç9-»}íäó!²&öH/¼ @¸Œo>?Ê-ÄðP•ÔŠp5L•Ì…‹p—ÐãÆi¨1èp&ìƒÅä¤ òà4 Jä‰ ø,) ÃT¤Qˆ3¹e ý*Hª4)Ó°XÚ¾v~ØáM‹ -Lai>*¢4ÌŸííGl¢†F Y™uÅÂýˆª‹Ê:PYê îì…ž¿µöSÙ°[eU$þ}´]‡o_ïjˆxë x¢r•j‚g*ár À÷sAz¸püû³0®aªtAxv(ä;+rƒ=zª=µ·/Å2…­ã³óC¬tÞh4l5lT bä¬ú½½—KNûƧêòMª–ÝÆRï.‰°E³ž/Fh Bõ1V÷G¡w`JH¤¼dÕpTY#z¨=´"KÂÇ㽟¹h*¼!6%ë+ßü¯ÚüÜÝúÿÑQý@ÆâhäÚ•úN²\' Éýda }']ˆnÒ…êt!ûw§ Ù)]¨ÿît!»MÒûéBv›.T¯Ò…ê/Ožæ’ÊKºpŸÊ©ªä»ÙBá¿›0ä· Cö^ÂðæŽÛ·¸~vêã‚È7_ùûpÍîxÐOo¦CóG{LE˜p~`þìT(Ut!q¨ÆÎ>Ô8¤ÃbË$m¸|…ˆÌú#º_•{¢ºýé̾›0ÇW€?o7úÿq¶ü»ê«ýŠÄ#Ð|”þ,^Ógaéâ)t„%&`IiÊ•¨D%$‹Ôp ò$%-Ä5JL,äÕ# èì†Ãñîo¹š³÷éþv¦opð–§¿ü;›¸ï ]o ccwlû:æ¦:ûóôDÿ¹¡^Lóü×Àö>•bùX‡¬!MÓt°.Bš¨Â¸ØéZí¼(<⇓p—IødP7U’[«šxª*¶½ci*Ú' ¥ª‰½<}c(Çk€Ê—EjøŒ…–¬«ºxYq&³ÿ&ê©ÚF*QˆÆ?z0E¼'#Çá?(.’1ˆ24I¤Èî%r1$±õwQ¢ViûHq•„>ë²¶Ê´°¤†9*4vˆ Td¨ýI2 .ƒ‡ÌêÓȾ¶ÈØŠvgKø3.#ŸâÌ?XÅÇ׺ý=½Tpv¶­x»¹u|ÛR #¦ yOÓ?i»?%9¦|VrÒ²èÿ,ëÿcË:b&SÔ4ý…E˜J•/ _«ü/ÃôóWÂþ‡éÿ4ïg }ü$ÙßÁôó¤ÌÍÐrþÛþ´ÏŒä¸ÃÁ´Û_cÁ·?RsööÝÅïXÉ7ïØåovy?…*Ièóá®òsÁÛíÄËÏûˆÿ¼Î¨Øw~ ôó;ñ§„ÁÇ—¸`=ÿïQýëÿ{vq§¯ Carla-2.4.2/resources/scalable/led_blue.svg000066400000000000000000000220611420416754300206240ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/led_green.svg000066400000000000000000000220531420416754300207760ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/led_off.svg000066400000000000000000000220531420416754300204500ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/led_red.svg000066400000000000000000000220571420416754300204540ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/led_yellow.svg000066400000000000000000000220621420416754300212110ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/osc.svgz000066400000000000000000000162551420416754300200370ustar00rootroot00000000000000‹ƒ~uFconnection-established.svgzì}[sɕ滗~qÇ‚És¿ÈÝžp¸w&ѳžð%vß Jœ¦H-µ$ÿúÍ*„Š,±ÀHµH­êäý;_ž=þa¿¶¼}^×àÅ5÷ 0µAël?m‚:Dífs|1;š^Öz¾ºx=?<žþrz|ø_‹‹—óåòôð²øèâý­$µ15Éìâü|>[þs^‰~tvzùj~\j]»•¹x»|ó¶Æy¿œŸ¯êPÑØ@³ ®É6²ni¯ëÿNNç†åâí|ÿ5ðûãùÉeiOó„ Ù†ÕЪáùtñ‹éñi%u+û¸B³‹³³ù¬B<={7ýpÙ–¶Îª›TÀ¹Í´Íöryñf·Öoùá¬BÐjŽ‹GgÓÙÏ¿oUϧË/ð÷û›''—óZ,´²M™M ×ý½ÃÏ) úÊÂþ²üº¬ï»M¾Â>„Øà½{uºœDˆ n!Ô ¹/âÎ ¸ÏúAaupúýçê§°“J÷6¹io³Ñ n‚¥¹BÄ' ¶ K¢þÒuDé£hÉ#h9²g3°mÏÛßN±ùŽe.pÔ†(mŒ ðˆ0¢ÜÆŒæ;F´Ú°¥ƒcgFà^(AóØc $ F5J»ˆ3l¾#A¤´Ä¥‘ÒvF5JÑýÏ,LH3ï–øðÀL©Ø;ú ºïßÛq¸—†NÚÏh IîLCtÏ¥ùŽåq„Ôz(mJ¶3”4ã(‘6ß±(À6°~ÏrDÕjyѺâÚßÀû9 Ð~¶(ûK£œLº?äò3ù€¦ìAG-Ã¥e/#¬ÏîPB¼Og9n¾cý FÞ%Ì1¥ŸxÇ]fÔÝixÿ3¨bÁ¢L¶½z@o\d~Ì)%îàÁ(–SòÖ…‘rw¬#ÿ|Ö©k:o—?&ëÈ}wpi0d8Äd‡m(÷"2‚ˆ;„ëû Þ¯"7ßѤR}DSÆ:¢“Ž„‘ý1û&çîÈFˆÝ¥é¼ùŽu3ˆòɆþXS)&ÌS›Ñd#ÜÙÀlð¨(áÎP"Òû t$)4‰‘æ=/Žg³¼QÚ– Ù HÍÓôìÞ=²Ýp~ñj1¯ä¿íqi?F»[SúuðìýûÆ%‘r#ýPÛƒZ7Ò“W¥d²‹l¤½q}Ù¾¼ªÁßÓó˺þú‡ý×ÓåâôýïpÍ·`zÕŸI%;»•øç§Ëºgÿör¾ø[³ïý—ó\Î+È'ß'*çv•Ü /ÆJóôÉN`ðú*(ójB¼‰Ç5™W°:je)ænÜU«1"·ŽZ{âžôÆ­j/šŠé‹9é˜ î ó ¥"p¯ 9ϸ…×¼…W&YHšðJT!{dÌíA1'Í»1÷a%”ElÂ%•³ÒØ&Z’ÜQ[òCAõ˜D 6Ðë È% ¦cr*æÂà±·7îIoÜ 9'1l'ìþÓxÈñ Uáž¿ÇÚJ+ èb×ÒUʲ~Â7q©7.5ˆpjè–{Ùü<›.ç¿S.á˜2Á,¬dñÝÃÒÔï6ÇÊ»¤©Z5Ôü±–§V4˜";4¥,ì(ù,ij» E&7¶‘$¥E¼>¸Gû€…Ò¡ŽŽbÅÉq‚T€3ã»ê‹-ëÝØæ.±M‹fx‹vDëþ^Ç/ Î-¸A|Ü(’¡Fp¡¢‚¤uÑâLN|]S'ˇµàwZ £ÝÂÛò²h¢«^ W¶Ž±hÐ5q~’ÆýNB›îq.¶2‡ë(Èû­E”D1÷¡©¤cãM>'2Ý೪„<´“6àÛC› /˜g E"ì \v– FI× Û|†ŒŸ£H*#Q—Ï^Ø!":|¶âhéó™›²@@qF¼qßÝàg…(\°áq R`j€–’@ þP<Ã[Óa U;^À°‹yjQÐPê`®Y4QÁ7èöÆ=éÄíNE\L@s"½ÛjìåJ€®“(Á)æ-øPB˜µ¢ÌÅ#&ª…ÜÜ+Új^"o2œŠ¡+w-6ü˜Ë½qO:q; °ˆ¨`ßwMÍð>GQUE‘GuÁû9Òœ[Ž> B°³•G3¾JØ|G£dú˜çeÌw†( og2?Þyå^ Fì®ì %4‰!”ÐzQ±à=ŒšR/J#¼G€4`›;ÎÓBar7íxZ–1-7q±?n£UcÉ»Žû†ÑVPìdF¹mB0ó®‰T,²Êo8›ŒÙi–z1ðÝj,Cp lÆ/óh—Ò‹qÓ ´CZu,¢$¨DãADxĶ‹ìwnªòV¸ Ù\DzŠK X6kºÐ’`ÒüŸˆÜN¡è]¬"{9ïã[ß_<ÚgÎ#HÛ~ c ;M$'öÆŒ ã›É  Û£Dðð¶½3R‡¢Ù¡go¬F EC=Lì.†2âd(cú½zœ1½Ák´ 1CƸ+3UøLZNg°•£]H…Ø){qÏbŽ˜FC¶¤ÐÛsOìòGˆúYØg:m‡­ö5S„·j&õgÉU]w×Ñsγ/ôk˜ž”èÊ11(VD{‹DDVRêt pÿb™ îï¹æ‰õ”¶³Y“ïÁÕŽé|úxê3ëd‡¡û!Û_[Îv,¦mHÈŒ¿¶3«$ƒlêÅkd½‡K£¡T<Œ#vÙpÅ#.!ïíÊ IÂ0JI÷GIŽì$§Ÿeb¦'3:Î[ó† à$ú” ã.!}G·º§ð©ÁÖœåîV«ÚlLWJùÕ…aƒ£ø`gDÛ?ж p¤{@§€|¸Ç’Ó‚áÒ~}ÜMF)‰FXi¾Ÿe×rÚ|·›‘õ’7™îWàqóï«%oc9“FÐÀ›ï¸Î²ÓMW@¹k¹1ÃvxÈËÁbrõÃ&׿®Ã”Š"5'Á\%#¿»¹JËŒÒ==\ª ™;ë:jÅA »§a¢J‘ÍíAÏfÜ«À.Õ®±» §M6hVA'É-”nàj%ƒ:¸"D ÐÛ§2ÈÃ;¸"zI×ÄÅ•HïÆ•ÇáÚಢg”bØ5b$î¢FR"€oÀ†%ÄE»t„BÒ…m÷˦;ìåd.ë‹âBÚtk¤ ³°.ŒÄ…P¬»kRL$øÆ–A!R¿äraf5û²Pú.¡d PbqŠŠeÓ`zÂPæ.¡Ḡ%[CK-a*OKÅb‰”~K( È^±ŒÂü”¡äG»5  ó$¬€+ß…¢PŠ¢t°-éjéh›ÂB´; QA–R€Õ—0´¥Jh×#T-äÂBÆ÷Ä]IBíorwã}DãÉ a YWó^(ÙD:ï‰[¥Š…‚ÙøËj>Ÿ±æ Ÿ±æŸ³æõ k^Èîn¼‰)°¦à$¹˜ê­¥sá°i%Ä#´lOÜÕà*ž;™6eÀ’–cîvWó"`xÃ?a-ŒHÔaì&î6G) tõeÒÊ ë"!r§¢×±FœÓû¿ÿùÓŸü'ýspùup9úèd» æm–¨‡ÊJÞª¬Ác©•5õÅ÷ç9úïÊæuúÅüÿ½=]Ìÿ×úÝñ—÷þgZÍÔ¶nÔ¶yؼ{-ؼ}¿£šNå|£ Óo^žüu~RŸûº][ÁžnêõÏý# :Ùö^Ѹó% 'Ÿ|÷ƒKÑÔ×DÌÞ?î»î¸(B¶õ3†Œà\˜%ù¶0»ûI3¡Ú·Ió8ЄÏÖ&4x¶S'B£ç¬yyΚ·ç¬ùx¶“fB‡o“æ˜4:=‡IóãÛ*‚gQ(„¾û’ëN¦øèç,3ĵ9gIŽlü—L¿Û·ó€;ƒòÛyÀAùí<àΰ´oçw¥<îÐmPÀ=m"%ãiîkØs^ã4{ƳGsxÆšwzΚ—ç¬y{²šžþz<öò»K¡@ ²vÒ'9ÿ ø6ÿ}›ÿî Jù6ÿÝ”ömþ»3,ãÛüwGP棟I0/¡1AÊBžòN‡Ï$XÒcËY€Ùm‚N…² ,CñðLºy&’èÆÆM“U*ZØu\Ê/:ÏÈç<ÏH{Æ3ÌŒç«yx¾šw ç¬yy¾g&ì ¬-¸)¯ÖBžä™I‡øâÀ~•g&œïvÔù©„âÉ`Ñi¼kaaÈnwu.Hˆ]VE bÿ¢¬Bú¬ÒLò–U"·¼^5È.«š¨Avc-‹¦â°×ûø¬’Ý»ºKXÿBò Z±“ÞÅε€Q;‡‚!ÝÔ¼ ywõ,ŒDøe¡³€.©¨b;Ù‚üÀÐ}xl‚š&^6º<YHmÈ-ù‡›òùë7WA5Ÿ57_Ï—ÓãérºááZ‚Œ´¿¾^}|òâ¯?þûõ îÙìÅÿ¹Xü¼¹ÀÝD˜]¼­MkÓ\Å;ž½h:átù‡Óו]‡—¿¼üŸï_ŸÕ±èF^~x3¯‚N¶‹ùåÅÛÅl~}‡ýÍÛÅY¹X¼¬™Ôÿ^Ÿ6‰ÿ¶¬ÆÿÜrÕ²MMÏNgõüp¾³Å|º<ý¥ö¼×¯ëù¶ˆ«´—‡ÿñ_?RÚ{·Ê³‹ój_ŽÞÖ{ê«€MÁ|y}Q¿ÓÈÓåÙüyÿ¡ï-çÓ×-­´“Ãá&‹¬·Ä*¿ÒÈÇú©Ó¶jòO«6ãá~Ï7óEýrÏwó£²¶9Ïf‡¿Y\¿-ë[ *”»ËøÇÓ˔ތ¯^ˆ0.çÿ}±¬ˆì¶²óÅé/-ðÎ.w[ß¿½š.æ<;ýy¾ã|Û§?]7ùnˆ·!Z•µ’±¨kkÒ>½ÜX™ÖìßNΦGó³öj÷ð¶]¿xûæu­ÀUòµuz3]¾Z7i=¶¦¤ú"‹YÍ¥ó"ŽÍ«Ý9SYRmÇ‹jU~÷Ûîë˜Ò¿kC7¯éX=.ÞžÍ_œ_œÿ«¹¿¯Ì»ø¹}œ_ý^/`ýØø5µ /jÎ?þ÷ÅéyWZI5_œÖ¿^ÈZv<½¬J]L?tÊh¤í‹B617Õì¸U @L‘û·Pê}—Å&¸÷›àÅÝ©Mj*&˜®×Áµ>ÿ¹‡ä%H„ö®³ßûãÞu^{×Éö`ëw&ÛEìÍù_×…/{þI9dg»ÚF43¯?]Š0èG^nPí¸,½9CÉPR¦6g,@äÁQ1(¢ss@=¨]ïoJè°¹CÚ–¡W¾`—P\-ÜîÅÌ¢_š›2(”HòÌ  ¤ÔÜûé#) Ópñ*î‹ü¯½6Ë.á‰Ü>o\ïj@ªqh\½ÙlVuÛA~(AOA @7›DP0\&YB@öþ´‡ZXIÌ[.‹Ç^P‹ ²„JáàÄ ¥Jͼ—-Þ·¹ð æ¿ÌkÝ×Ú[¸Û÷_¾ë2C‹Bý`âC¤çÞÜt¯¶;>£«†š- *º:]Ôé´‰Ðv¶®Ò{îGŒ{†„Èû;^sÜĵ:-Ë[°¶Hööœ.ÑØ‹P‚å$©djí#‚Å<]p‚@Å Èi&r·ŽT¹¨³Ht2ðb.ä]!¦ îÕSþ¦7vº æª?t°öÓõ\uY¡GEüïP–~Öø]X±í _ÔXv±lРè¬gžÞL7ÃR÷í\%%‚‚:¡u g+f ÐÕO½“Š (vS4Ã~Ûã\ТÔ.-„3 ö«±×#Ø5±§ca¦[uÒBÀ‰x«^Ây í}°i! RûØ ûcùç_;ÿv×ó‰vÅ”^NqQˆ¾gWŒâb¡~‹ö^œ£·£@ºYHOW4Huߦ+"§H_ êšÎ7k……@óV3²D‚èŒX<ÄÁ?wŒíŒ†O¨3~ør›)ƒ·Ÿm›½Žßm9— ±0ö´|°ýðÜt°% R{£Z1ê7â^2M%'ÅÀM°úÝ82x\L,[™XPi%Üö<   È$¢¤±(®¼¦LUÄ ¢• B«YŠ—4 ’*Í&Y-^¤Ê3ª,Šï ãt¸Jm¢YS3ÕŽöb©ï$ÖàIfaŠvÛ Ïim"™kj¤BN : -™È˜{ˆ%™-hT24ÐÚÔfl9 (©ŒÄ+ß0CVÀ±6‰@·h¯å' SÓDÊ`•(U½õþÉW¢O¾f——#¦`ëd¿¹e0-{ˆBÌ2Q.ŠÂÂ+¢S5DQŠDª(x²tªR®R5±k™5Dqƒ\§Î/Z«,¹bŠK&x«k2P\1ŕѩe©“6h;W™—ÄPm˜¢‚²IL+¢8€e¶Da3Ö†(â®) Q€Ôb¥(YP[M½âI¨aË·ldÊîM …Ôש,€]±-PÉH[ã¦rÅ1cœ(V©JKCMYË úPïexšeòÀÆz¼É?‡Ï´;…uÛßSfö4²díó-8K¤d¯[â%=EкÞLß)«ÖýéÊêºL\²-éÖôh2è’m¢d?P£n†›>ŒZk£ÑY<-l‡V@¡°)ò¥(‹eØ ŠÑ rø6Á^CAOÔ–‡|¶¼ß t»lÂþg›bJ”’BâjßíÈpy¢ Júæ <–-OmËí9¬Ïì~Ïãq÷ð7t¼€‡Xk¡ <ÚíOÄ’(`ŒbÄYeQ€4«ŒK0¡ë’¤œ` Gã¾]×ᆕ>úm1‡dǽiÅA2&HQ<Õ¿ëÝ^ÞôêÝ5ãЯq×ox~ðå¶Qlmgk`çk`·¬³¿6¼>¼£×µ¶Êc­mÐ7Ïy ÅÓô{8T¶;è8°¿ÚÝØÂíÝöÐawk`çkp·¬»¿6Üöá½.Ø>º+Ú·®¸†"žjWÌÍÎ:m¯v÷c·pû7~»îëøM™®c·D÷’¤Þî¾ $ÁÕNYfL”Š$«\m´¹êD¡ˆ"b´"LŸˆtò6¥çD´ »³­·xh‚^HV;< ì8A-ÆL{A…2™‘p"á^H1²à6)›fÔ¤©Å!$'¤…0 iA ¥NXŠ;¹è" Ro*ãI¤+ßWJ¦HL$ B†E•ia¦Ð‰bATvlS3¶».(&µ)¡…•[¸ÌÜd‚ I„L‚ fŠyÓº´@]‰Ð¸èê¨=ñ½âž Åm½Ò„¯f×év§Š4 ("ëÝkVmú”:‘ëÕæuZàD[« ‚kQÓ§Ø@=Ö)¥¡1ǪO)šµ}*¬Íγ ™m‚Z…œ¬MŸ ¬"+dÒt)'[§4]u)5 nº”³„ì!Hñˆ” kWßC¤šŽMUB•xÝ£1±íQD‚ÑÊœMÚfÉ׉i¢\El~ÕŸÐŒ×P1_õ'ÌœU«s{F$åZ”=÷ns?Ðö÷§¬,°Ü$„PAtðh÷”Á ¨¶“¢H¤´BQ«šu(Ê l§’F!ÔêZ!2ÛAn)Wʉ*å"žJÖÈ «ÈŠ€­[HVˆ£“«®Ø¨’am}LQ|ÅFEG×Õ±‰lR ¦"µ2„íkÍ=·”“žÌ–r÷õ€XwørÇ6#´;V›YX"úm†ãþÓ$—óg+ž¹v68À“ \¿ª¡`Øft;·ïïÀ’¤T€jI( zµ$;$=]rå7?ã×0î§§U?þMçÂb^“Š[Ë*Ž‚Ä1Q/b`Iy¤Ë Ç!n¬>ŸÃúª‡Q1Ðví@¡Õ$%ljKQd·F;!…Äx¢Yܘ‘÷²†²E£7â=„(Šá>á,)¸²ˆT"B¸µ.ˆr½ÞnäáÍh¢ÙZ4³œ(”0VãÖº`£o*‘Fj­m¹²=MÝ%WÆ‚,¬½³&nÖšIÎF¦BÉÙ×ò~’ shÜ•³úé-‘¡GQž„¶ª®óúr˜»¢7À(£_-}{€{B*°]˸݋!çubhí=×Ïê —êD°°[¦7XGI2Gœ¸ÍúY) x]'Š+‡Å l‹F‘ k™K_‹î·òîøU]æo_ì+}¸@b¢¶Û+Îî~uÑX…Û ˆîbíDfQlï™ÓJJh†ð`‹ÕDàÿßȦH ÂPø*{ I|É3°÷?×FË 30¿ŠÔê××ÔRÐ3›¦è²œØŒµ |ò¹Ïf…Áž|1lÇÛ–ÐÍQ;È©fdÓ€ÀYôa¶;¨´MUBm%ÎàQQç?çjæÕt5õ¬„¸i™æN¯wSÿT`&¾yI½–0÷Cæfé?kª ªÝšx¶qRàð¦â ¶Œ„rÅ‘æŸX‹ÈQ&A*Ná½—pÝNƒ”J{J}ˆ†Õû†ýo–ŠÉ5 bš ÞùšºžÐè»gn¯ýµŽªßÞ#²A÷²É(òCarla-2.4.2/resources/scalable/pb_audacious.svg000066400000000000000000011376521420416754300215250ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/pb_clementine.svg000066400000000000000000000456641420416754300216730ustar00rootroot00000000000000 Clementine Music Player Logo image/svg+xml Clementine Music Player Logo may 28 2010 Carlos Jenkins Perez CC-BY-SA clementine music player logo Carla-2.4.2/resources/scalable/pb_configure.svg000066400000000000000000000056051420416754300215200ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/pb_configure_ref.svg000066400000000000000000000032261420416754300223510ustar00rootroot00000000000000 Carla-2.4.2/resources/scalable/pb_distrho.svg000066400000000000000000000045701420416754300212130ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/pb_distrho_12.svg000066400000000000000000000046141420416754300215140ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/pb_distrho_16.svg000066400000000000000000000045701420416754300215210ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/pb_distrho_ref.svg000066400000000000000000000057231420416754300220500ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/pb_file.svg000066400000000000000000000041101420416754300204440ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/pb_file_16.svg000066400000000000000000000041101420416754300207520ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/pb_file_ref.svg000066400000000000000000000014271420416754300213100ustar00rootroot00000000000000 Carla-2.4.2/resources/scalable/pb_generic.svg000066400000000000000000000206561420416754300211560ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/pb_generic_12.svg000066400000000000000000000212661420416754300214560ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/pb_generic_16.svg000066400000000000000000000206561420416754300214640ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/pb_generic_ref.svg000066400000000000000000000216421420416754300220060ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/pb_hardware.svg000066400000000000000000000135651420416754300213400ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/pb_hardware_12.svg000066400000000000000000000133311420416754300216310ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/pb_hardware_16.svg000066400000000000000000000135651420416754300216460ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/pb_hardware_ref.svg000066400000000000000000000132631420416754300221670ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/pb_jamin.svg000066400000000000000000000223021420416754300206260ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/pb_jamin_16.svg000066400000000000000000000223021420416754300211340ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/pb_jamin_ref.svg000066400000000000000000000223401420416754300214640ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/pb_mplayer.svg000066400000000000000000000203211420416754300212000ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/pb_mplayer_16.svg000066400000000000000000000203211420416754300215060ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/pb_mplayer_ref.svg000066400000000000000000000202241420416754300220360ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/pb_plugin.svg000066400000000000000000000045361420416754300210370ustar00rootroot00000000000000 Carla-2.4.2/resources/scalable/pb_vlc.svg000066400000000000000000000063041420416754300203200ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/pb_vlc_16.svg000066400000000000000000000063041420416754300206260ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/pb_vlc_ref.svg000066400000000000000000000060721420416754300211560ustar00rootroot00000000000000 image/svg+xml Carla-2.4.2/resources/scalable/warning.svgz000066400000000000000000000115661420416754300207200ustar00rootroot00000000000000‹í]moG’þ¾¿‚§ý²ÆI­®÷*%Þ.Á.Èá€Û]ÜÇ-ŽlmdR ©ØÎ¯¿îRá& ¥Ø²½8&fª«»«Ÿ~ªººgùöOïßÞL~j–«ëÅüå ¤|2iæ—‹ÙõüõË“üýÏg~2Y­§óÙôf1o^žÌ'úãï¾ý·³³ÉwËfºnf“w×ë7“¿Î\]No›Éެ׷ççïÞ½K×aZ,_Ÿ¿˜œ•š«Ÿ^ÿn2™”nç«‹ÙåË“þíÝò¦Õ›]ž77ÍÛf¾^C‚ó“^ý²W×¼JËfµ¸[^vÍ_^îj.gWEµ·äµJçÏÏŠÆÙêÃ|=}6_ý~§j1p¬*æœÏKY¯yœÖÅû›Ã/Ó–îö^ ¿-ÿÝWØ R7Ö«R³Ióf}þýß¿¿/<Ëi¶ží4³E¾63>óéÛfu;½lVç[y­_fs¶~S˜€ÞÞ¾i®_¿Y÷÷׳—'e|ØÞl»¿¸'PNÔmÛÜ-bIP |64[\¾š®ŠÙçoo›óÙô§ëÙù÷‹Ë»Ž‹÷^7óóõònþãyiÿfúê¦9/ü\ß­4TFXš]æ¾>{7]Î §S±ýç¡‹»õíÝú›÷ëfÞYUàé±êŠÛz÷ÂaÍûÛÅr}vu}ÓÔ.‡¶ïu;=Zùýì¶L9@B-ÿ°SþÇ¢ðí¬¹ZUÅnFê·¥¨0ª™.ÿ²œÎ® h­l·ÅËÅÍMsY¦tzónú¡ƒmÛΰ*qÎ]£µÙÕzq»¹®@¯?Ü”¡VáYiq±¼øýUùåüM+Zf]¯?\À7'}ÅÕÕª)wsÞ÷Zkg<™œÿ¶ÞòXo0Þß÷öíùpØF2{Œõ÷TÉâ‘0ÖßSa$‡g„ÃÆfJ¯ÀŸ #V6>¶·'ÈÏÉÆ¬b£5œúh³÷(>±³|4ˆŸDt|ˆÓK&€§rÉEáÌ?Et} Šã žüÈCÇ êñ1´ñ@g:Ôã;{>*2=ÊŸ/9ó©ÈÒ£xtoO ‹ aÏcV®Eš³åç[¤9>#Œò¸Õe&O]]8‹?ň§­.œõW—z$_=9aŒÞ¥ïíÉ c„=#ŒÏ–w‡Ñ3æÝaòŒ0 ÿV6¢èo'ãÑ Š´T'è#¤:AOLur~|ª4žê<~7ðŒLD~>‡F}N‡F>]éÙŽu\åu\íax\ª3{òFÚ…·ñc:ƒñÎ~uq©wÓ›GƒØv_¼Y6åpþ÷£´7eØ9Ç}ñåû—'JIÔ¼—~xyâ’‚´—^ê^ê._ž°§œ™Äî…¯7ü}9¯ÊéûÛ—'o§ëåõû?p<=ˉ‰Ä˜NsްSHŒ~z†I¸Õta/tðùõº[8À#på$b÷°|YîSt¿#@²ÄÈDŒ-HœH  H @Œ¢fš„DãȰý)¡ä,zJΊ(S%•ÚQÈØ#8ªu5Ôª°JŠL¨GÀê Ý É\PrA8 +3K¹ VÉâÜHDª§–"Pè«@Y?š›žbu6±%€õ‰gûÓâ¬~gÓC!EpæCÑ¡Wdv ÁMŽ™h#Ã`"&@;ôS J¬AÇ’õɹGO¡d°¸w¼þU¢„™Äû•¤UÏ’!zðú—0åÌ#¹ CÆO’Û˜++Ìm2?cnƒ‚ŸüÙG]†C.탓ÕK'ò}1È*D“ã0©@,BˆýŒ*²Ñ ©0K– É>e®Äẗa®ÄI…Ât8¬œ‚Âc¸ÝuL AbÃí.GÊòåï¢PòsÉ%Âwó¹ä¡)†›%qÈ´Ç$MŽŒÄÃÜ<'u ±‹BãOi 1šÒÁ@S5ž3Ð8ä‡ûp•SÎâj{›¨œ€Q‡›(‰Äèbûó"Îúù“(¢¬‡²~Ü?xŒúÓÁoƒÜeDéª* ROæÂè¨ü?г¨ÔŒ M]Ⱥ³FðSNèê ŵX8u^ž‚(üÅ—€2æƒ(ã~ •2 Úe”¢*ÖÃ:ª{5ª[ÓEìTå¨@ÆÙHkÂÀâÍžR"Ë`jõ&§PÉTàÖ"Jz*‰XLŸ)íbWÍÀ#yWa¦ý¼‹Iˆ•x$ïÊnYƒÆÂ!ñ§ ‡ÙTüp8$þ‚Â!‰7±Ÿ&hV$>ߨþ…Ç.‡Çþ÷Ó9E¸’Æ6MRÍÂqê‰  †šö X‰a/ãæ”‹8ÓNJJÌû§Üœ5x&AÌøyñ4ü¨x†ä<ÁP¹®—`AäPÑDôð¯Š&žÝà׉&™DÓi0,—Dá@8–cò,ža0,…„ʱ7,Ö!ÆGÎÒg òñ” ¯–r¨Y "I{VFu‹²$΂¿5!Îd# :€Û~BD™BÌa,!Òl:š…~’“(aú•„(|$!úTÙ;çƒÙ;gÝß#™ Žxb3£aæ>Ô»êõY{õ2†ä Ù²nn^žüPy2}_/w·o³fämùlˬ-p·Óõ›ß _Yì_'½*&o?joΆegË»›æ¢ù©™/f³ò^ãrñcsQÿ‡‡§üñbSÞñæ’cV‡­¼V)¶_Ëç³]á?×ó¡´@Ú,o®ËŸ ÞÊfÓâÄËåôÃÅ|1o6Ò¡½¥Rg]”ÜÇÕ‚ÌN”’ Ê)Hò¬.“ï&Úž†°S†°LÄ“#(ò)XbURšˆ%±Lä§¥””mòÃ4Y"ž†&`ôì¥MZ‹ƒNÓbb'3‘R?CÒà mízaEÆ âçO Çò'ªyI벘0³UeÇ,ܹq°J•iFw›H$s@is)2)¬,ŒB¯=!¸õE¥U­-¸Õ˜ÈK›’ÐÛô,çL:°c,È¿²ÐC8=x5Ü (¢ ^–8Ž ž!cf8ÀůoíÇê÷ˆ»10qµY¢+u7”\´H-eÊÌUIļÈ"q&¤p ò6àæ€.àš°À6à2Y ¸Œ¢!ƒ€KÙap‘P„È@:bû(YÆç¸×P¢RÛ 1€Òöì { h"0µ”V–YBzPºÈ­Á8( Z†]P =¬têA©M‡Qì-BmH{ˇŒ“Ú ÈÍô©¿Šðvd¶þðó·ß28ÿLɺ9 ÖÔ$«Rt‘š18s+u#ÁºíŬ¢Te ]ôQ=EL²Ùâ I·q•ÚP–n‹ë˜ƒ©Ý>š R'n›É¢ÙºÚ–ÕZ¶;€j­m ¨å;¨aÑô$ÆD\dXŒ‡bQ; ŠÀ*kùk)Bë]m%G!¬¯Ñú‡±ñnÃÕ¥ƒ†&&0çèÝÈ"K?¨Mmfî‡_W.+BgÚª[¼ „+¨¦íòåAYk 26K?Œ ÇÓw82}¿<׈‚‡³¢œR‡›t‰9ª"b»×4œÂý”¢”2†VY]È™ëH 1•‹¾Là‘=ªPH ÊB‘«¬¥«ÓêsÒðí½JRRFíj[¸W¬…»^Pºl7uf|WïÌ9T33“ä¶V({‡IðȰG²ÜE9¼]]ÿÜ\8%r5ˆÛ÷ßtòªs1¯Š7ä]{8ºÕ Ñ9ï0š ÎÔ>ÞÙ;Sãýxòên½~NÚ2’ßU«®¦o¯o>\üpýªY¶O¾&+ÉÑñ±g씢ع³dÈar>uc9º³ öÑè'Å…îÃ*´ed6arT™£¢[öÚZmˆÙò*|æ@ëŽ3"!9‰u2ƒ6"T7ç®Z"Û@ä° rìdP¤”B© r‹Œ«&פ¦ÞtÇzuÙ¢Wë"›€RßÜ&8ò°c¨Þ†®½­„˜úalêºÕ‘ÞG4«(ÜG2C¯8idåM c¤.YþÃànÄ…z/xúY3…æ=¿È)„UÀ>ãYsHî÷Jëñ˜î·Ø}šŽ’É©ýUCžx¶f_c¶B.ê0<À”2`•š²N4×+’6]‘ ìQeÙ%4N’;T'"N³šZN è)! ¤;-P)7Ö¨ý÷}Ar÷L²cBmPzë«,#¨z·rh WKƒˆ4ª7‘Jf«šÆ¤¤ÕßCÜú¾‹E‰„HOÕ“…Y=ÿi…Jì©(b+3¥N!ÒÊ\²ÛNíúŽv`únפœ˜9$zÓÛé¨Ñdl†F³’PÒö³¯Ÿ¿îõ³_ÑäÔ5aÍŠ$’»nnEÛ¢H亹 jõ¶w–x[ r®…]ƒÝM¥%ÞÞ[Þ©gy·IË}o›ZǨÁÙç«Õêò“’g<`RÀ~À<°S-Ý}úŒ§à“±|2’‚OöSðÉn >KÁ'#)ø¤OÁ'{)ød˜‚O¦à“‘|2LÁ'#)øäa >ÙIÁ7äŸ É?Ù!ÿd—ü“ù'òOvÉ?Ù#ÿ¤'_¯»éÉß÷¶­åÚ·8Jþuó~Mh~ì bwôl¿HXûZÏ#Dt»«Åމ.à­Ð 2UÂ;TYei·è³h@t›ì¬ÝRŽ&œ±.ål®¦¥MÆDYjboíëÉ)0„‹&&FrÖJˆ€ t/+µÛ:Ê´#tL!–ÍjƒÈfPùpª‘H;'³$Bƽy›ÌÙ‰Qº3€ì Õy™”»ÔY3Ù2ãÛý£Óȃ˜/ž9œ¨ a‚Îa%‰€f¨B„loEsã* “¨!ƪ?"¦.&E{Q¥m tLHfäÈ.Q @Œ®Ø=1s¸p±Õº ²S/dLž½­Š¡9bB²±Y£ ‡Þn›ãMs\MkH"k‘°t]¯œÍвlKp¯”©gl-E‰l0 ª&ʆ®ºÁÅû‡-ÎF-v¤d-WU @« `d.ƨJê÷¯¾.ÿבòºUùóFkÕ¼îdCarla-2.4.2/resources/scalable/wine.svgz000066400000000000000000000260531420416754300202120ustar00rootroot00000000000000‹üuFwine.svgzì}[oY’æûü ®ë¥ K…â~quõ`ÑY 0ƒvº±Ï”DÙÚ²%C’Ûåúõ{2E)•tši™ê.‹¬KòË8·È/NDœ“™úã¿þúöÍìïËË«³‹óŸ_à‹ÙòüøâäìüÕÏ/þö×;ȳ«ëÅùÉâÍÅùòçç/þõOÿòÇÿqp0ûóårq½<™}8»~=û÷ó_®Žï–³?¼¾¾~÷òððÇp¶áâòÕ᳃ƒVòêï¯þe6›µfϯ^žÿüb%ÿîýå›^îäøpùfùvy~}uH@‡/ñãAüÃò.—Wï/oª?>¾/yyrÚD‡ž|^ˆªêùù I\}<¿^üzp~õý¢­ƒSEÛ¹AòaR/}ÓÔðÙÎôgï·ÞTÿ®ý{Wà€›±ž¶’K8_^þ对;y€pr}r¯š[ÍwÕL_ŽóÅÛåÕ»ÅñòêðïË8;¹~ݘÀÙÿ|½<{õúzø}vòó‹6>Aµþ÷m^ÞqA¸?u[íýSªÝ©áÆÕœ\-®Z¿__¼]¾;;o=¸¼8\\^¸¸üåð¿~ýøjy~xýº1¤SôáâÝ»«OªhƒkU|8;_Bw1þÔÎÿñdyzÕÉÝŒ¡û%¨ÑŸkgß4ÙÅåÿ¾\œœ5æ5ìNr|&™ª/Ó—ºº¾xw+;kvòñMk¶Ž/Þ\\¾»þø’~z1”¸8=½Z6íb mv%’™^ÌGmMJåT…Æ¡Áúbëþõî>@œ MPîÚúãáXÏ+´ûµx³vYfµN¼Y·úo>,>^Ý5Ò[ÕË×—Ë6 ü0qï_ßqÉìw§ýùEAQfèÇŸ_„`:²§“²§“²— L()²|µêÁ_/çWÍÌßþüâíâúòì×?л/pª¥µCƒÂÐ?)ü·ó³ë61½¿Z^þwgÜÿuþ·«eSòˆå[©sÚ D#n^Ÿ]/w4ÑÄ6€íÚÚ‘‘¢Éûg¤häFŠ )(P’8f¤5”Õô÷&eODz# =…ùÁŒd`¬âj‡Ž ÂäAÉiƱҋ/L†Â*S´ÚyÜÜ–MÑjc[?œÒ)ŸÊ:=Ÿ€s¬´‰s¬1âAj„8§L •Â#Îq¨[òˆsJjzŸs” VöÎ!”q’Ì ÄÕ8–ÙxéÎØ~Äœ¨LxNÒPµvZCPlGZ>ªÊ)sÓŒÊ\ëäÐÝ(›Šr(û±¡Ên:Èr› ˆ@2ÕY¾‘5”l’r /ðƒvß]ýÕV~àô' Úà žŽ"±E6›ÓÁÍNsÇ€Bç9þøÄ,UÚ‚Y‹£î»s„¡²³j¹Eîc¨=EŒ±q¾Oq{4f!¨©aÌ ÂSÅ–Ò˜æ Xa¼<à9°ZÙ<È=õÇ‘·! @2çq„# •*ã‡4!ٸƎ˜•×( Q Ûe¦«mfºåby´<Þ•Œøøƒq2ñ³ÍÈñò„NÖ#Kbýi+C8’£8ZìjŒOlSå&CРG2„!J&é>]”¬ìš5¦» C¹è.á`*dŸôšÄ> ½l‚»¤Ý§{8Jè.tgâ-è~š§±<Ù™î¤[±î´}–¶3ëÈŸ"Ü&ÞÈ:¯Gf!°ØMn&å ©´Î:dNY é „¤|u¾¶°¡ì€Ä5 é¬a™µ=ë8K·awßYÇYþåI– yë„ò‡“£î»Ë²Ú0KŸv߇Œ Ò“úÀq²ûÛ™–V÷}@³4­ÒÜ¿iq–nŽlð#›À$çùCy õ9(gie—‚"”Óü€\€I¥e4PcÍú(Á•sœP39”›ê ÙÓ5Ù!Äa-ûk~´§5? ÙÛš†=A¦‡ATbñø¬Åî RˆU—Æ`Eí(°r-û‹t¶QòG ŽÊQòÇ!”qO¶C¥€¢l—èC(¿¸Ô'ŒÛÏ̼à$þª™ÙN%$43ÛÝ„õÁ½0o¿¸X,KùÔæöOn¡ÜLn}Ìd³ÙWäæRòFé (M¢ü(H¸Ô@ï«wmãúä?—ׯ/ZßÚºñÈ/X`¥#öKD&Ù/˜!#öK„‹îEl“j¦`ûìÅÄæÊ””O% =l3-Kvö¯2:9¥#:z˜ÑbZèôhsëÍÍ]ƒ¡ØïVÒÀÁÑ·q+®¥Vw·dWˆÐ? |Â××v8 2#ׇ2$>e@’¬£ÀG! mƒ«­’ÝS[Úrgƒ«m“Ýe.dÇØ†£6$»Û&gjÛhIONNtçäLãÓRZMN–¬›§¥%ûÂ_5-!9ùÎé’ÖS¤Kj›W"â‘W"ìûA&àèk© CÑÚ„@¬6^ýR@Žo-RñxõK,UœwY‡ÿª{|ðáD|ÑS7˜[uloþ/Ÿ‚Ýá›ÙmÇnHE¶¼M«´¤¼Å›.N2'f r}Ù™ Øe õ”èéHô‘¸^ø•\O–“¾0·šfO¤}wöEOAÄÂDåG ÄÒõ6¿#'08{¿•”öi –Á’c*j[­ÝÒ!&c.j‚KÐø6"«ª¨oz/’nÌ0%ŸvùD¸ „jmý$"ÃÖ6Ï9€KPƤÒJv›.ßÏBW=À â´ÿ Áðb~±uÿö·:ˆO2{ÔܘÑ) <<×w‹â—åÄ´~»a ¿©ñ A]–ö ·x¹6νò˜ËOìZâm>€°`‰þö0/+íŽ(±¸6E­h¹1ˆð§Á¬‘±`i®©š”3Ö^€H9R¸8„ˆê·ÙHÝצ@úþÌ>sÿf/˜º™¸ô­¼³•Üwj’à´–ªq88GÒ8WK ‘{Tœ”=”½l B HÒV¾nˆ¾èÈ'I¶-} Ý•­j{ÿ³û†2>ÄÅ2O»XÛa”ØÓzH»”“6µµen0·§ "ù{"¥¶Xï;>ruÝyj×Îô·mmçÉ]å)Ø&µ™möÄl“„(6±-À-ÖØ&P*c²±9x!ç.d3üª(N5ã‡Lk–Ó7Û°RXÊ.óÛã{ š >Eèb¸1ta~Ä…7MÒÒÆíª@¢›[oÌÄ»È% X£ñ\ƒ'î{çq-JP‚.ŸÜmÁlã»-EÀ‰Ö²M òØO${Š¡‰ìì'¦]n->År±N|(¤rŒÚnkeyºÔ£ÝŸÞ x ’ÍYûãßZ¬áÞ ´ÈÇd73À@ª5²'¨3ê@ëIÙÓIÙËB²¢†'deÉ4=ÖÜáÁÏ]W(øIž­çÜ|S:æ·¾)‘AͺèK‘ymN£@×Ö{-2j´gE ”zO–ïÉ~Ó¼Lxó#´ý0#`ußþaFId[_Ô1PG¦qžë”|?D”=ÉŽò\& ù—pî)ãÁ½e\"Œû©()ø˜[þ.,4?@ *®vÄàZ«Ô«¡Xe>w°PKŸ‡@PJ®h¬¨¸þŽJ[»ý*ÊÉt-@có^{£ŽfTø7alÚ¾›±?Æf=cÓ6O¢öè·øh¦·C„ ¢‡Ì¡ÆDÁöÉj’LcFŠ¥») ä&þMoTû‚wÇ'zälØ_ÓÆÒ±wWÊR[{¨, Ê™GÞ]“5C¿…mkÑ‹mãÎJvˆrw^ ¨'yáNÑ&ûæŠG%¤FXçˆ0“Ü;Gd`NYrã”ÔE;WEÄDÜøÊ@õÉ A%®Ý¬†^>Xû¤èéXt˜HÐê)g®Ç ¦§&Gõ›€-eï3À&·m–_ˆIHw6pïÎm[ÛÙÀŸÂÀ-7øã­*d‰DoÊ)Ò÷!¨»ÎHÅÔ;”ˆ•˜@÷ð%‡-\¼Tt0æIÙÓ‘ìèmCI®ñMSOß5}ƒ£¹2Ú‘z€³ÕzÐ)Qka|€2Fz›”=ËÚLÐRBÿ&‰§‰ï)Œ7ɽ…ñ¦îÔ:BÒïßP›†µ©õxÚ Ê.hJPŠþý= ie.Ý1‹J'aDÞ-Üy€P©­M© ¨hkÏ´°`Ð'oÇ­Ê]Éf±tNnˆÅO«óxÖùÞunÏ:ß»ÎåYç®óâÍ:§gï[çòìC÷¯ógº?ûÐýëüÙ‡î_çÏ>tï:çgº?ûÐýëüÙ‡î_çÏ>tÿ:ö¡{×9=ûÐýëüÙ‡î_çÏ>tÿ:ö¡û×ù³Ý»ÎñÙ‡î_çÏ>tÿ:ÿÞ}èƒïò³â/¾ÍJ·ÿÓ)ÇËžv´òíÿ” 1æï{2f>G{ß©ÇçHcß:—úÞ#‡ÏÀÁÛüMìÜùþÊþNðm[ÛùË𧘃73s‹xlgÞŒeOG²ÿx¶ú½GKO¡óç8`ÿ:Žö®óüÞ〧ÐùóŠÃþuþ½ûÐÇ»Á¾·x78÷ï†<ÅEÁ¾™™òèo%¶þ¢•àJºF¹(“ÒµŠúb!¹&eODzåL)eÊIlùwâ—';SNj+Ê-e)ÇG;SNé)('±‰rlü˜¯&7ÉjS@qÕêAVcVÍ9‚[ëü€0A-²1AEŘ—ŠHš5ž !-NÊžŽe^: #ÚÓºŸçÐvï:çÐvÿ:m÷¯óçÐö¡K¹†Û½2ƒ0w^ʵ®‡Û¶¶óRî†?ñ„Ì|^DÛó¦ äh¬d¦ã˜ŠPÓh@O'$OÇ’Ã8¹€R™m‹÷=’0YuI ›Ö¤F¯ËÆé“åéUtuqrö®ýûò|ñvyò÷³å‡†®”q´¸#ӻūeoZM…§ýguâèâòdyy{ÊûÏèÔÊúº Úè=¾b]­wçqúüÕëÅÉҦ§õ“¿]\4ÍØú‰þB±@Jy|r²µäbJ쟜|yÙTwðfñqÙ†Óÿï–ÀW¯/>¼ºìÔr}ù~¹^òäâøýÛ®èûµ¿ûu]¢+{pttñ먂g'ׯ»îæ]‰×˳W¯¯lTˇ³ó¦ƒU± ÿŒÀm%ö‰NI(ù™³]^ZuK—·ËëÅÉâz1Pãþ4Q3ϓӗÿç/ÿv7I¿ü¿—¿ ók'°8ºxßúÕ—YÉ¿l,oÿÓÙÛvÁ¯þþêþúöM#é퉱ðõÇwËŒª½\^]¼¿ÛX^¶‘œŸÜÿßÅÙùm:_^¾9kÿ{©·ØÉ¢™óååâ㪱íýñ 9ôw4=wšJ¦x±®®Þè+Š2sât#th¦£zú²•Ž„’"›:ÝJ3ƒºf “wëÏÎ !-gwµÏþ×쮪Ù]©Ψ}gYÜgë2X©~»ëÂõÔÛî° kx>‰ÎDµú—+—Iï1Æü\þúîâòú dÙ¼A£Úáë‹·ËÃwgçm:¹¼8üËj’»jÐñÕa3äË‹«®G‹7¯/®9YÎ^/Þ}œ]^¿>Y|<|%iïÎ_}¶±_OÞus x¨–VîãXn ^ÝçÇ+aæA;;½œÒ«}þɵÓéf4µŒMHHW&4YP “,çb Šâ<ûuT4£¡œŽ(ÒдjèŸg\ ÈÑ@OÐ"­„iÑ\’!£2zÌK±UY XDܰ ©¹rB„%5¬@ØZiõAë1ôj¥  Å»Ò=Ê:7@Ó†9pDXà ª,¼a†n­4 xêMÇÝA’9j@ÌÕJkö’57A «{X6ÌnK¨ ÅŒCÀRÓV]3A °VZÄ@Ü’îK:‚ªâP£ßa£¶G(ºaÍD‰[;¬Pb˜3¡>tÇ›qÛJçBÎåÔk(SHf‚ YŒu£I¢ÊÌPd¤óµ»wq„De¸ˆ=Æl"£ËÝ¡äj/d«–þóªßÑ:R* DÊ@ʺNà “‘ì$Ù›}zÓåØk¶?iã'y²ø Š(Ø>ô„uv85? £‰µl‰9~üªÁ?Ö¨7o<³­ˆAl«‹ílk¨D2à +è{ªdšéŠ—JtC_‹âþ&[1eØŠç¶â¹Vg¤)tcNîIsueå¼Áº†µÈV-c€$ Ï Dœªa¡EÞ0ìû-¨Ã¯¾UòHÁ˜Eúª¨í¿ßƒÕ®ÿáK‹ß—Õª‚0©Î ½0û´N€”¬¡¨å:ST¬^2‘$‰gJ sÊN®ˆ<´/ M™;”¥DÅLJ°:»c@«Lï0òâœS³ g3°®W ™S—Eõ“ƒ¤ö² UÊ”}'Ÿr ˆ.Y£™ÌZÐó»ä®þÎ4Ì´#AidO7(s§˜‡‚—ÉÌ"P]çQàBÉÔ¯)`ZØ<’¤¼ZÙM-ž§–šhW+;J'XÈZ7XˆwRTä·E=S“ûFغ6RͭdŸ“»r×c Œjžfb“¤å|À´ü=RöU·VÿÙÛ.Ó±309—÷Á„™EÇ$¡†"–Í™Á -b&!b‘s.ˆ”$¾‡‰–Jq+= ˆ‚>ØPŽÞ,Žù$ßÖŠÈà¨]– »*TžŸ³M'ÿŒ­8(Š|ÎVЃé“})æªÙ]õúwuÍn‹ ;+î`äó‡˜la³­„ÝÚ E·Xì Lóƒ0°Pÿ™Ê´=„)VŠ|þ‘-ÑM÷-ÿ¾lqëÉæ%)vÓü$­?z}ý‰…ôF±…l΀<£*×n™PÖ×m%mmÝ6M݆uÛV˜ œÄÂçâ"6“´›ç Ð…Z3N¦¦1÷,$éJWVZÅÜ0Í2f¥€NÞ§;¤UÒ'1\¬«$¦‚tµ,*â7ëÀžý:°kñÚ2pV*­/“’¢Í»5i!ÁbsLgÒê×q3‹|ÀVËì¥F²BÑû¥òp6î*ÔD.™Røô0}a±¡}¾Ÿ(LÑk˜£› Š*úùHS~üÇšW§çþ­=ÇØïlöZSžÎ>ïê…P‹’ÇÕp º?'@û±”a9uÌýT ©¹‡¡ö÷Š¥€Q¦u¨D† Ï’$´ÇÌÃ|–”BÑ Wrvé ”‰Ï9À+¸kE#„怌j:‹4Vó¹%h&µÂá`©<·‰ôY$„`ŠÎÁUIe…nasGw’j¥KÀ¼0s®æL­ ðh¨ÍYDcjпÍ6°ßúüJ=ç?Ó’æf7ñ]nÊ?Ïüià¤×'vŒ¨27 S±’CfOÞé–&!KF:7LT¨¬³c±Ð©h(WWØQ­3d- î-'sÝ’•IÖ-¹P¤ês–,ä>¶d•´\7dµ®“]3ÆEsf(AwŸõdŒT¦ßy²nœžiŸÏMÔå÷s»Wéç" ˜Žœ˜ œ˜>w‘ƒMl aë›E6»«°…†äaà ]6ß$²^Ë—òpLr^ŽRˆU-î5… —÷"d$ów‘ˆo`¹ˆ~ËÝ‘]%þ‘nå*6Ó9B›×ê~}Ô2»kjCsNÀ¦Šì3탢ÀjX‹"ÝÜb‚ÒÐR’>EM0¡TŸ30–ˆÎ$€H¤²AF^•Ö ÷)ŠRrC=0[+bNYÔ Ští0uɨ¹RôÑcCÑ-ÝJ™æÚ'ljŠ S—¬æ"$Òš¡éìâu¯Ft QÚn«S¶ÒC/”ÉÐcLÃ,Y=hvÃB\µ•ôc€*唃&D•u_ã¦XÖu|¸4U™%|ï:pb°øp¹ìæAL${hxÃT´/ÍA„5K !³ÖJx‘g­¢}ÓU‡µI:hxÚ½±d@–±ñhԙਆvO?Y@êQ2è±ÃL5*Foh)Gé½kSŒêlÃ5°ÑÕÐC†¶ï1mèåÀÉa4u‡aßãø~[H5¿g1IPæå4²­p(Or¬p¸€÷ÌuÚ´›ýÿö®mGn$ǾÏWóf@ÅæýÀ`¿`ÿ¢ÑØ÷íÅ>ÌׯJ§2kT.Wy1mgÊF£Õ§ÅÅå 2"ò–óBê!z™lìè¨KÜj­+Œ3KׯªTX-X—׿q•“Ylm‘H7°6Ò%÷¶ì3woõÍßûggÃÞ;kö¿å×>6;÷1Ü{Àíã}‘¢xgÛËýŸß_O¹ÿÌàÄ×–6&MlÒêÍÕåªao€Œ-‹Å˜Ë©É;Ö+‰ÌXj!æþæ@¡»`ÁºbÎÝ®÷ÒÊÙ›tÖ7;¸†´5Ltv²ÔlY!…[õ!]ÓeVD”´Ô»7Ìds7 É{i¤‡Ú&]©5'…w³ÕdMZ^3¨ÍJ|ì8NDÈãØö£¹•ÃoÐâ.æ$óìl¹b£1]áXëÞQ#vXxM¡TÃw®2aôÁp’šÑÏÓøEw…S ˜Ò®vٚɒ>ÀÒŠšÐd©¬±bé#&ê"+V­EMá@ÕlJQ3+±ŒÙƒJÜ ‚4Y4çp’ªô^¥º¸m Žž$’Ègç(ˆ¬\Ë,ÉTº‡'¥$ÙÜ9»§gÖp]",k6&nèQ«g³æ3ÚÕ¿ÊÆ|~+±ðÈS)Bël*²ŒÐ9‹<Â')33f(YVbU‚)§ìØæ²tãuPXic-¯¬Ytr#S޻ЭÉ:›1§,-c}Ö¾bJhÓÔ½îÛ¦q¤¦Ú ZAY¢Ü+Æ0n=jôñ4ö÷<­þùÏ'.£•Õß /?Ôa{~c[XDƒ¥ß8lïµ]qñFrŸJ‡ÛÂŽÎâöFU»út-~‰'_Ëš¾Š]#ËBê)>ŸÀQ ï&Ö™™Ä|ù;¿0©‹§.Zb…P„‚øüÒFýÀð?¿6ÛgœÛø=¿ßø'|•ö DŒ¸¯ j…$žøºËC£s­Ú2ayÆ}ϸï÷=ã¾gÜ÷'‰û~*Ç-õ«ç¸Ÿ}—‚ĹKátVŸÀY-&)«Ähxæv=£À椆ˆðeK²•u÷Š2§³z:«§³z:«§³úÓnRð87)|8$òXw?…Rër‘q—o— 6Ú¢oPwêjfQ¥l×±kÅ%qH`N)” 4È)‚ª¼VÙ°)…ºRj‡áT*ï ½}ÑÌ–yÁ¤}J§p+Á†…¬ß=Ð Ø&ÊKŽÒ ³fÏW˜„féU‚·bJ&鎎½'ûìøRg<㎮Ǣˆ…‰pl¿\ëb…8š} eœºb¦½a]†;ÈHÌÇ,¿ ÕÛíÀä dó6¡Û9|J#n‰ÛR¿.ξ¿iS3UX(öwì®êݾ1b¼‰êˆ¾´¥d`™‰ ÝͱùJœnå :¸Ö6dÊÍ}Ñźù³Í„•»vìè¶â„]Jd©£?$˜†œâÜ%r”È5}ó¤t'ë[·¦'HJ·¹n*öV"×îâWZ€‹ªÕ|º?ò²—²¦«Øõˆ+±cþ>£ÞIäF°¥ÎMÒ,¼èüTZXÿƒI,¹´‚ŒÝ1¿8ARX*Ÿûù­Æþ »NäÊ‘^‰âÜêHZ8¹°AY6¹’2Ãe2†×T¡¦9Pëˆ\%ÛW'I+¾êëôò˶V*sÖa~Z”{ fë¦ìÓLsr§R6Îaº:œÈPj.KÒê0Ÿ¢I\Úc|ލ¦®˜Yûx‰µUVé&çNÔhbÃE×ÀÀ\rÔg‡†Æ,ß½3ôÏór¶W¶(É•}Ê…6‰@ãØ‰‘K†å[÷D¨¦Ú+[$E…„O×âÓr-kºŠí'Z•Ø-1ŸÀQ ïÙ¢òäíŒë “yb~IrxÍÆNÄÓl"Zþl“õé`ÇgþKm-s6Eª”OÿyB ½ÑêlíêÈ…»Yê ¦6é˜Ï"pYP#pZÛ”A.n ¶fñ¹GØ\J.–5¤ƒ‚‡t¯¥³DMéÄ!ÌÂFž}‹I3F\ÿ-RSŽõ{XÌ´†wpõ£4³E°Ø" ¥”TÖ*kö&©€ú¦ë¥3¦l ÑæÜ4¸çZwRz±åV·¨ŒvkT¸,X’xÀï0'WíÑîe#G­%2‹[ÞöEŒÕüu¯µ°ßönBÜp3 j[þÊ>^ÛØÄ%ö¿Gï'G9¿z÷` ƒöÝkwþÿY»ŸÙécPR0j¿¨2,mö]îØ­2ÜÑSþ4Êp7ÆÕÿ€5?}˜­Û‚ÿ•¶•š¨µ¿Scdî@•¶\Q#N—êz‡Ø‚†“Š©n¼-½ã9‹Ô˜0‘#*¯®*˜¬÷‰²o´MW«ExA%DPcª6CbJ!ŽR³1¥³~‹‰̸é[ÔQ2ÖŒ"^郌Þ˜b-F­.T6ßV¡Be“ åb›"ÓÓ6Ú‚U¦H·¬ m9šÝÄ\¶Ñ6u4Ûº8.¬í4¹Ãœæ£Ù;ÊF®"cùœ¶wÅŠA’¥o;m žÒvÓ½‘Ôr3 atíãua]…ûˆß£÷“CRîæÆÁ4úöp%âˆo\§í§Wóóëö|ÛÑùÕ³¯§Æ<5æ¿IcìÓÏùp¦=P83ìí+ø¨ÊÐo„3 äʨãpf‘· ç©5!ac¼g&ÐÓµô%8y-jºJíÑÌ&«Îš¿Oà ‚÷NHvhØü"”® _“iJÈ–Î-±¦må ÐåI›øò$wyk©FÎE¥©Œ?^lnê–‘‡´KYÌ/æ$‚Êå)¨BD¿üLÃ2qÄ4ÿ€Ž9W-oHdHRü4$o«Î&kÈ«_ƒQnò^CÎÍR¾Dy¿7Ú óK©ûiFâˆgù §y0Š¡`ó ’!'GŽ8¢úŽœkö'pµä‘\-=]­O¹Zª¡óK6)3êËÉ‘;ŽH?GŒOŽ|Þ»È I5yîåH’µöü *œa­C_Ëô*æ k=\ìWá>¿¨5!ËO’Äù$9$Oàl=Ô‚ÄÏ$â'’ˆÜõ5mæ }î$"7I”.½¡IÐsÊ¡ù@‘û´#oGeGò´#ŸÓœšº¹à‘­gdëIâ¡HR'I>µNÕÜH¢dÆõôÞ–‰.OšJ•Ö§»u@µà(™sÙþ “¤Âô+IR²á ITHÛ×§UÊÛ:"Iñí™çó\ã3в~¨tã¹~¨¥*XqÊ Ö“Q_žÚÞHSIÊÚ KœNÙ¡½ÉÓ;gò9íÍCúŒ”}ÓÞdˆ³}U°•©9¿ˆ9µ ýdñà·¶¼ßFí>ºCH”ÏåM1­~Líœaç47”àŸ»)?cn’ªËS0yÔ—“6ïѦì‘hóæF}4!¬ý˜6aJ¢;¦Q³”Ó,ZÕ¯hSFË?Óµø…ײ¦«Ø•HRµÖùûŽjx‡6žñË!ÌLHÖîåAµÆåX^Bb³pTã)~ª޿7ô¯¥Ê'.¾E l>‹’1»ÙöˆÊÙÐuVmLÅdVí½bQ¨Sòl$V 0´.Ò%dÎl6‹“[¤Ù„¦Bˆ×,A6 N–Y@Rž‰õ7˜¬¨­T·X¿ÈÉ=á9K’w)tÅšE-ÖzÌ#½Úóú Öÿþã÷ÿ1X¼{ëïϽI*n«cÎs-r`Oª̸ž©–§tªÐäTµk‘+Xmê]ž¼(ÀþnÔ?~û¯ÿøÛ?~ûó—ý~´ªz>’Carla-2.4.2/resources/ui/000077500000000000000000000000001420416754300151765ustar00rootroot00000000000000Carla-2.4.2/resources/ui/carla_about.ui000066400000000000000000001451571420416754300200260ustar00rootroot00000000000000 CarlaAboutW 0 0 512 519 About Carla 0 About About text here Qt::Vertical 20 40 Qt::Horizontal 0 0 Qt::Horizontal 0 0 :/bitmaps/carla_about_white.png Qt::AlignCenter Qt::Vertical 20 40 Extended licensing here Qt::RichText true 1 1 Artwork 16 12 0 1 Qt::Horizontal 0 0 Using KDE Oxygen icon set, designed by Oxygen Team. true 71 30 71 30 :/bitmaps/logo_calf.png 40 40 40 40 :/bitmaps/dial_09s.png 32 32 32 32 :/bitmaps/dial_11e.png 0 0 Contains some knobs, backgrounds and other small artwork from Calf Studio Gear, OpenAV and OpenOctave projects. true 34 34 34 34 :/scalable/dial_03.svg true 22 22 22 22 :/scalable/button_on.svg true 22 22 22 22 :/scalable/button_gui_down-white.svg true 22 22 22 22 :/scalable/button_edit_down-white.svg true 22 22 22 22 :/bitmaps/button_file_down-white.png 48 48 48 48 Qt::PlainText :/scalable/folder.svgz true 48 48 48 48 Qt::PlainText :/scalable/warning.svgz true 48 48 48 48 Qt::PlainText :/scalable/wine.svgz true :/bitmaps/kbd_normal.png 0 1 Qt::Horizontal VST is a trademark of Steinberg Media Technologies GmbH. true Qt::Vertical 20 40 48 48 48 48 Qt::PlainText :/scalable/carla.svg true 48 48 48 48 Qt::PlainText :/scalable/carla-control.svg true 48 48 48 48 Qt::PlainText :/scalable/canvas.svg true 0 0 Special thanks to António Saraiva for a few extra icons and artwork! true The LV2 logo has been designed by Thorsten Wilms, based on a concept from Peter Shorthose. true 0 0 MIDI Keyboard designed by Thorsten Wilms. true 0 1 Qt::Horizontal 0 1 Qt::Horizontal 0 0 Carla, Carla-Control and Patchbay icons designed by DoosC. true 0 1 Qt::Horizontal Features AU/AudioUnit: Qt::PlainText Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing 0 1 Qt::Horizontal LADSPA: Qt::PlainText Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing 0 0 TextLabel Qt::RichText Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop Qt::Vertical 20 40 VST2: Qt::PlainText Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing DSSI: Qt::PlainText Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing 0 0 TextLabel Qt::PlainText Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop LV2: Qt::PlainText Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing 0 0 TextLabel Qt::RichText Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop 0 0 TextLabel Qt::PlainText Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop Qt::Horizontal QSizePolicy::Expanding 1 1 Qt::Horizontal QSizePolicy::Expanding 1 1 0 1 Qt::Horizontal 0 1 Qt::Horizontal 0 1 Qt::Horizontal 0 1 Qt::Horizontal VST3: Qt::PlainText Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing TextLabel Qt::PlainText Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop TextLabel Qt::PlainText Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop OSC Host URLs: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false true Valid commands: Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing valid osc commands here Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop Qt::TextSelectableByMouse Example: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter TextLabel TextLabel Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter Qt::Vertical 456 35 false true Qt::Vertical QSizePolicy::Fixed 20 5 License false GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the 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 a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE 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. END OF TERMS AND CONDITIONS Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse Qt::Horizontal QDialogButtonBox::Ok buttonBox accepted() CarlaAboutW accept() 248 254 157 274 buttonBox rejected() CarlaAboutW reject() 316 260 286 274 Carla-2.4.2/resources/ui/carla_about_juce.ui000066400000000000000000000115301420416754300210170ustar00rootroot00000000000000 JuceAboutW 0 0 463 244 About JUCE 48 48 48 48 :/48x48/juce.png Qt::Vertical 20 40 <b>About JUCE</b> Qt::Vertical QSizePolicy::Fixed 10 10 This program uses JUCE version 3.x.x. Qt::Vertical QSizePolicy::Fixed 10 10 JUCE (Jules' Utility Class Extensions) is an all-encompassing C++ class library for developing cross-platform software. It contains pretty much everything you're likely to need to create most applications, and is particularly well-suited for building highly-customised GUIs, and for handling graphics and sound. JUCE is licensed under the GNU Public Licence version 2.0. One module (juce_core) is permissively licensed under the ISC. Copyright (C) 2017 ROLI Ltd. true Qt::Vertical QSizePolicy::Expanding 0 0 Qt::Horizontal QDialogButtonBox::Ok buttonBox accepted() JuceAboutW accept() 248 254 157 274 buttonBox rejected() JuceAboutW reject() 316 260 286 274 Carla-2.4.2/resources/ui/carla_add_jack.ui000066400000000000000000000452561420416754300204330ustar00rootroot00000000000000 Dialog 0 0 458 546 Add JACK Application Note: Features not implemented yet are greyed out Application Qt::Horizontal QSizePolicy::Fixed 20 60 Name: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 Qt::Horizontal QSizePolicy::Fixed 20 60 Application: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false 0 0 From template 0 0 Custom true 1 0 Template: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 false 0 Command: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Setup Qt::Horizontal QSizePolicy::Fixed 20 1 Qt::Horizontal 40 20 Session Manager: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 None LADISH (SIGUSR1) NSM Qt::Horizontal 40 20 0 0 Audio inputs: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 64 Qt::Horizontal QSizePolicy::Fixed 20 1 0 1 Qt::Vertical Qt::Horizontal QSizePolicy::Fixed 20 1 MIDI inputs: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 1 Qt::Horizontal 1 1 Qt::Horizontal QSizePolicy::Fixed 20 1 0 0 Audio outputs: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 64 Qt::Horizontal QSizePolicy::Fixed 20 1 Qt::Horizontal QSizePolicy::Fixed 20 1 MIDI outputs: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 1 Qt::Horizontal 1 1 Take control of main application window Workarounds Wait for external application start (Advanced, for Debug only) false Capture only the first X11 Window Qt::Horizontal QSizePolicy::Fixed 20 1 Qt::Horizontal 135 1 Use previous client output buffer as input for the next client Simulate 16 JACK MIDI outputs, with MIDI channel as port index QFrame::StyledPanel QFrame::Raised 16 16 16 16 :/16x16/dialog-cancel.svgz true Error here Qt::Vertical 20 40 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() Dialog accept() 248 254 157 274 buttonBox rejected() Dialog reject() 316 260 286 274 Carla-2.4.2/resources/ui/carla_database.ui000066400000000000000000000663061420416754300204560ustar00rootroot00000000000000 PluginDatabaseW 0 0 1100 683 Carla - Add New Qt::Vertical 20 40 0 0 true 75 true Requirements With Custom GUI With CV Ports Real-time safe only Stereo only With Inline Display Favorites only (Number of Plugins go here) Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse Qt::Horizontal 40 20 &Add Plugin :/16x16/list-add.svgz:/16x16/list-add.svgz Cancel :/16x16/dialog-cancel.svgz:/16x16/dialog-cancel.svgz true Refresh :/16x16/view-refresh.svgz:/16x16/view-refresh.svgz Reset filters :/16x16/edit-clear.svgz:/16x16/edit-clear.svgz true Qt::Vertical 20 40 TextLabel Format: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Architecture: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter TextLabel Type: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter TextLabel Qt::Vertical 20 40 MIDI Ins: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Audio Ins: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter CV Outs: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter MIDI Outs: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Parameter Ins: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Parameter Outs: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Audio Outs: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter CV Ins: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter UniqueID: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Has Inline Display: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Has Custom GUI: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Is Synth: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Is Bridged: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter TextLabel TextLabel TextLabel TextLabel TextLabel TextLabel TextLabel TextLabel TextLabel TextLabel TextLabel TextLabel TextLabel 75 true Information 0 1 Qt::Horizontal 0 1 Qt::Horizontal 1 0 QAbstractItemView::NoEditTriggers false false true QAbstractItemView::SingleSelection QAbstractItemView::SelectRows false Qt::NoPen true false 24 true false 22 12 :/16x16/bookmarks.svgz:/16x16/bookmarks.svgz Name Label/URI Maker Binary/Filename 0 0 0 158 237 Format Internal LADSPA DSSI LV2 VST2 VST3 AU Sound Kits Qt::Vertical 20 40 0 0 158 156 Type Effects Instruments MIDI Plugins Other/Misc Qt::Vertical 20 40 Category All Delay Distortion Dynamics EQ Filter Modulator Synth Utility Other Qt::Vertical 20 23 0 0 158 130 Architecture Native Bridged Bridged (Wine) Qt::Vertical 20 40 Focus Text Search Ctrl+F lineEdit tableWidget b_add b_cancel b_refresh b_clear_filters ch_internal ch_ladspa ch_dssi ch_lv2 ch_vst ch_vst3 ch_au ch_kits ch_effects ch_instruments ch_midi ch_other ch_native ch_bridged ch_bridged_wine ch_inline_display ch_stereo ch_rtsafe ch_gui ch_cv tab_reqs tab_info Carla-2.4.2/resources/ui/carla_edit.ui000066400000000000000000000727031420416754300176350ustar00rootroot00000000000000 PluginEdit 0 0 537 525 Plugin Editor QTabWidget::South 0 Edit Control Qt::Horizontal 40 20 MIDI Control Channel: Qt::CustomContextMenu Qt::AlignCenter N 0 16 0 Qt::Horizontal 40 20 Qt::Horizontal 10 10 34 34 34 34 Qt::CustomContextMenu Output dry/wet (100%) 34 34 34 34 Qt::CustomContextMenu Output volume (100%) 16777215 42 0 0 0 0 0 0 0 26 26 26 26 Qt::CustomContextMenu Balance Left (0%) 26 26 26 26 Qt::CustomContextMenu Balance Right (0%) 0 0 0 0 0 26 26 26 26 Qt::CustomContextMenu Balance Right (0%) 0 Use Balance true Use Panning Qt::Horizontal 10 10 0 0 Settings Use Chunks 0 1 Qt::Horizontal 75 true Audio: Fixed-Size Buffer Force Stereo (needs reload) 0 1 Qt::Horizontal 75 true MIDI: Map Program Changes Send Notes Send Bank/Program Changes Send Control Changes Send Channel Pressure Send Note Aftertouch Send Pitchbend Send All Sound/Notes Off Qt::Horizontal QSizePolicy::Expanding 1 1 Plugin Name Qt::AlignCenter true Qt::Horizontal QSizePolicy::Expanding 1 1 0 0 0 1 2 2 2 2 Qt::Horizontal 1 1 0 0 Program: 150 0 2 2 2 2 Qt::Horizontal QSizePolicy::Expanding 1 1 0 0 MIDI Program: 150 0 Qt::NoFocus Save State :/16x16/document-save.png:/16x16/document-save.png Qt::NoFocus Load State :/16x16/document-open.png:/16x16/document-open.png Qt::Horizontal QSizePolicy::Expanding 1 1 0 0 Information false true Label/URI: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Name: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false true false true false true false true Type: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Maker: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Copyright: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Unique ID: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false true Qt::Vertical QSizePolicy::MinimumExpanding 1 1 ScalableDial QDial

widgets/scalabledial.h
Carla-2.4.2/resources/ui/carla_host.ui000066400000000000000000001502741420416754300176650ustar00rootroot00000000000000 CarlaHostW 0 0 1045 741 MainWindow 0 4 0 1 QTabWidget::North 0 Rack 0 0 0 0 1 QFrame::StyledPanel QFrame::Sunken 0 0 25 0 25 16777215 Qt::CustomContextMenu QFrame::NoFrame QFrame::Plain Qt::ScrollBarAlwaysOff Qt::ScrollBarAlwaysOff 25 0 25 16777215 Qt::Vertical Patchbay 0 0 0 1 1 QGraphicsView::AnchorUnderMouse Logs 1 0 0 0 1 DejaVu Sans Mono Qt::ScrollBarAsNeeded Qt::ScrollBarAsNeeded QPlainTextEdit::NoWrap Loading... Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse true 0 0 0 0 QLayout::SetDefaultConstraint 10 12 10 ArrowCursor false Qt::LeftToRight false Save :/16x16/document-save.svgz:/16x16/document-save.svgz 16 16 false false false Qt::Vertical 20 5 Clear :/16x16/edit-clear.svgz:/16x16/edit-clear.svgz 16 16 Ctrl+L Qt::Vertical 20 5 Auto-Scroll true 0 0 6 0 6 4 Buffer Size: 0 1 Qt::Vertical Sample Rate: 0 1 Qt::Vertical ? Xruns true 0 1 Qt::Vertical 0 Qt::AlignCenter DSP Load: %p% 0 0 1045 25 &File &Engine &Plugin Macros (all plugins) &Canvas Zoom &Settings &Help toolBar false Qt::NoToolBarArea Qt::ToolButtonTextBesideIcon TopToolBarArea false 0 10 QDockWidget::NoDockWidgetFeatures Qt::NoDockWidgetArea 1 0 1 5 0 1 Qt::Vertical 0 10 210 0 false QTabWidget::West 0 false Disk 1 0 0 0 1 Home :/16x16/list-add.svgz:/16x16/list-add.svgz false :/16x16/list-remove.svgz:/16x16/list-remove.svgz QAbstractItemView::NoEditTriggers true QAbstractItemView::DragOnly Transport Playback Controls :/16x16/media-playback-start.svgz:/16x16/media-playback-start.svgz true :/16x16/media-playback-stop.svgz:/16x16/media-playback-stop.svgz :/16x16/media-seek-backward.svgz:/16x16/media-seek-backward.svgz true :/16x16/media-seek-forward.svgz:/16x16/media-seek-forward.svgz true Time Information Frame: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter DejaVu Sans Mono 000'000'000 Qt::Horizontal QSizePolicy::Fixed 20 1 Time: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter DejaVu Sans Mono 00:00:00 Qt::Horizontal QSizePolicy::Fixed 20 1 BBT: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter DejaVu Sans Mono 000|00|0000 Qt::Horizontal QSizePolicy::Fixed 20 1 Settings BPM 1 20.000000000000000 999.000000000000000 Use JACK Transport Use Ableton Link Qt::Vertical 20 188 0 0 QTabWidget::West 0 false 0 0 0 QLayout::SetDefaultConstraint 0 0 0 1 0 0 210 162 false QFrame::StyledPanel QFrame::Sunken 1 :/16x16/document-new.svgz:/16x16/document-new.svgz &New Ctrl+N QAction::NoRole :/16x16/document-open.svgz:/16x16/document-open.svgz &Open... Open... Open... Ctrl+O QAction::NoRole :/16x16/document-save.svgz:/16x16/document-save.svgz &Save Ctrl+S QAction::NoRole :/16x16/document-save-as.svgz:/16x16/document-save-as.svgz Save &As... Save As... Save As... Ctrl+Shift+S QAction::NoRole :/16x16/application-exit.svgz:/16x16/application-exit.svgz &Quit Ctrl+Q QAction::NoRole :/16x16/media-playback-start.svgz:/16x16/media-playback-start.svgz &Start F5 QAction::NoRole :/16x16/media-playback-stop.svgz:/16x16/media-playback-stop.svgz St&op F6 QAction::NoRole :/16x16/list-add.svgz:/16x16/list-add.svgz &Add Plugin... Ctrl+A QAction::NoRole :/16x16/edit-delete.svgz:/16x16/edit-delete.svgz &Remove All QAction::NoRole Enable QAction::NoRole Disable QAction::NoRole 0% Wet (Bypass) QAction::NoRole 100% Wet QAction::NoRole 0% Volume (Mute) QAction::NoRole 100% Volume QAction::NoRole Center Balance QAction::NoRole true :/16x16/media-playback-start.svgz:/16x16/media-playback-start.svgz &Play Ctrl+Shift+P :/16x16/media-playback-stop.svgz:/16x16/media-playback-stop.svgz &Stop Ctrl+Shift+X :/16x16/media-seek-backward.svgz:/16x16/media-seek-backward.svgz &Backwards Ctrl+Shift+B :/16x16/media-seek-forward.svgz:/16x16/media-seek-forward.svgz &Forwards Ctrl+Shift+F :/16x16/view-sort-ascending.svgz:/16x16/view-sort-ascending.svgz &Arrange Ctrl+G QAction::NoRole :/16x16/view-refresh.svgz:/16x16/view-refresh.svgz &Refresh Ctrl+R QAction::NoRole Save &Image... QAction::NoRole :/16x16/zoom-fit-best.svgz:/16x16/zoom-fit-best.svgz Auto-Fit Home QAction::NoRole :/16x16/zoom-in.svgz:/16x16/zoom-in.svgz Zoom In Ctrl++ QAction::NoRole :/16x16/zoom-out.svgz:/16x16/zoom-out.svgz Zoom Out Ctrl+- QAction::NoRole :/16x16/zoom-original.svgz:/16x16/zoom-original.svgz Zoom 100% Ctrl+1 QAction::NoRole true Show &Toolbar QAction::NoRole :/16x16/configure.svgz:/16x16/configure.svgz &Configure Carla QAction::NoRole &About QAction::NoRole About &JUCE QAction::NoRole About &Qt QAction::NoRole true Show Canvas &Meters QAction::NoRole true Show Canvas &Keyboard QAction::NoRole true Show Internal QAction::NoRole true Show External QAction::NoRole true Show Time Panel true Show &Side Panel Ctrl+P QAction::NoRole :/16x16/network-connect.svgz:/16x16/network-connect.svgz &Connect... QAction::NoRole :/16x16/view-refresh.svgz:/16x16/view-refresh.svgz &Refresh QAction::NoRole Compact Slots QAction::NoRole Expand Slots QAction::NoRole Perform secret 1 Perform secret 2 Perform secret 3 Perform secret 4 Perform secret 5 :/16x16/list-add.svgz:/16x16/list-add.svgz Add &JACK Application... QAction::NoRole :/16x16/configure.svgz:/16x16/configure.svgz &Configure driver... QAction::NoRole :/16x16/dialog-warning.svgz:/16x16/dialog-warning.svgz Panic QAction::NoRole Open custom driver panel... Save Image... (2x zoom) Save Image... (4x zoom) Copy as Image to Clipboard Ctrl+Shift+C DigitalPeakMeter QWidget
widgets/digitalpeakmeter.h
1
CanvasPreviewFrame QFrame
widgets/canvaspreviewframe.h
1
RackListWidget QListWidget
widgets/racklistwidget.h
DraggableGraphicsView QGraphicsView
widgets/draggablegraphicsview.h
act_file_quit triggered() CarlaHostW close() -1 -1 189 34
Carla-2.4.2/resources/ui/carla_osc_connect.ui000066400000000000000000000103061420416754300211740ustar00rootroot00000000000000 Dialog 0 0 435 183 Carla Control - Connect Remote setup UDP Port: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Remote host: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 1024 32767 1024 32767 TCP Port: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Qt::Horizontal QSizePolicy::Fixed 20 60 Qt::Horizontal QSizePolicy::Fixed 20 60 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() Dialog accept() 248 254 157 274 buttonBox rejected() Dialog reject() 316 260 286 274 Carla-2.4.2/resources/ui/carla_parameter.ui000066400000000000000000000032671420416754300206670ustar00rootroot00000000000000 PluginParameter 0 0 369 33 Form 0 Parameter Name Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 Qt::CustomContextMenu TextLabel ... ParamSpinBox QWidget
widgets/paramspinbox.h
1
Carla-2.4.2/resources/ui/carla_plugin_calf.ui000066400000000000000000000253131420416754300211660ustar00rootroot00000000000000 PluginWidget 0 0 622 90 Qt::CustomContextMenu Frame 0 4 3 6 3 1 80 0 80 16777215 2 12 0 0 0 Enable true On/Off 0 20 16777215 20 0 1 Qt::Vertical Qt::Horizontal QSizePolicy::Fixed 8 1 75 true PluginName Qt::AlignCenter Qt::Horizontal 20 1 0 4 MIDI Qt::AlignBottom|Qt::AlignHCenter 25 25 25 25 25 25 true 0 AUDIO IN Qt::AlignBottom|Qt::AlignHCenter 150 0 0 AUDIO OUT Qt::AlignBottom|Qt::AlignHCenter 150 0 0 1 Qt::Horizontal 1 6 4 4 3 GUI true Edit true Remove Qt::Horizontal 40 20 0 0 2 4 0 4 0 71 30 71 30 :/bitmaps/logo_calf.png Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter DigitalPeakMeter QWidget
widgets/digitalpeakmeter.h
1
LEDButton QPushButton
widgets/ledbutton.h
ScalableButton QPushButton
widgets/scalablebutton.h
Carla-2.4.2/resources/ui/carla_plugin_classic.ui000066400000000000000000000221111420416754300216730ustar00rootroot00000000000000 PluginWidget 0 0 497 37 Qt::CustomContextMenu Frame 0 2 4 2 4 2 1 0 1 0 4 24 24 24 24 :/bitmaps/button_off.png:/bitmaps/button_off.png 24 24 true true 24 24 24 24 :/bitmaps/button_gui.png:/bitmaps/button_gui.png 24 24 true true 24 24 24 24 :/bitmaps/button_edit.png:/bitmaps/button_edit.png 24 24 true true Plugin Name Qt::Horizontal 40 20 1 4 4 0 1 14 14 14 14 true 14 14 14 14 true 14 14 14 14 true 14 14 14 14 true 6 150 0 150 16777215 150 0 150 16777215 DigitalPeakMeter QWidget
widgets/digitalpeakmeter.h
1
LEDButton QPushButton
widgets/ledbutton.h
ScalableButton QPushButton
widgets/scalablebutton.h
Carla-2.4.2/resources/ui/carla_plugin_compact.ui000066400000000000000000000243041420416754300217060ustar00rootroot00000000000000 PluginWidget 0 0 446 30 Qt::CustomContextMenu Frame 0 1 4 3 6 3 72 24 72 24 0 0 24 24 24 24 :/bitmaps/button_off.png:/bitmaps/button_off.png 24 24 true true 24 24 24 24 :/bitmaps/button_gui.png:/bitmaps/button_gui.png 24 24 true true 24 24 24 24 :/bitmaps/button_edit.png:/bitmaps/button_edit.png 24 24 true true Qt::Horizontal QSizePolicy::Fixed 6 1 0 20 16777215 20 0 1 Qt::Vertical Qt::Horizontal QSizePolicy::Fixed 8 1 PluginName Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter Qt::Horizontal 19 1 4 4 2 4 2 100 0 100 16777215 100 0 100 16777215 1 14 14 14 14 true 14 14 14 14 true 14 14 14 14 true 14 14 14 14 true DigitalPeakMeter QWidget
widgets/digitalpeakmeter.h
1
LEDButton QPushButton
widgets/ledbutton.h
ScalableButton QPushButton
widgets/scalablebutton.h
Carla-2.4.2/resources/ui/carla_plugin_default.ui000066400000000000000000000351541420416754300217110ustar00rootroot00000000000000 PluginWidget 0 0 552 60 Qt::CustomContextMenu Frame 0 0 4 3 6 3 1 72 24 72 24 0 0 0 0 0 24 24 24 24 ../scalable/button_off.svg../scalable/button_off.svg 24 24 true true 24 24 24 24 :/scalable/button_gui-black.svg:/scalable/button_gui-black.svg 24 24 true true 24 24 24 24 :/bitmaps/button_edit.png:/bitmaps/button_edit.png 24 24 true true Qt::Horizontal QSizePolicy::Fixed 6 1 0 20 16777215 20 0 1 Qt::Vertical Qt::Horizontal QSizePolicy::Fixed 8 1 PluginName Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter Qt::Horizontal 20 1 4 4 2 4 2 100 0 100 16777215 100 0 100 16777215 1 0 0 14 14 14 14 :/scalable/led_off.svg:/scalable/led_off.svg true 14 14 14 14 :/scalable/led_off.svg:/scalable/led_off.svg true 14 14 14 14 :/scalable/led_off.svg:/scalable/led_off.svg true true 14 14 14 14 :/scalable/led_off.svg:/scalable/led_off.svg true 0 1 Qt::Horizontal 1 12 4 12 0 0 0 0 0 0 Qt::Horizontal 40 20 0 12 0 0 0 DigitalPeakMeter QWidget
widgets/digitalpeakmeter.h
1
LEDButton QPushButton
widgets/ledbutton.h
ScalableButton QPushButton
widgets/scalablebutton.h
Carla-2.4.2/resources/ui/carla_plugin_presets.ui000066400000000000000000000334021420416754300217440ustar00rootroot00000000000000 PluginWidget 0 0 484 65 Qt::CustomContextMenu Frame 0 4 3 6 3 1 72 24 72 24 0 0 24 24 24 24 :/bitmaps/button_off.png:/bitmaps/button_off.png 24 24 true true 24 24 24 24 :/bitmaps/button_gui.png:/bitmaps/button_gui.png 24 24 true true 24 24 24 24 :/bitmaps/button_edit.png:/bitmaps/button_edit.png 24 24 true true Qt::Horizontal QSizePolicy::Fixed 6 1 0 20 16777215 20 0 1 Qt::Vertical Qt::Horizontal QSizePolicy::Fixed 8 1 PluginName Qt::PlainText Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Qt::Horizontal 20 1 4 4 4 Preset: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 125 0 1 14 14 14 14 true 14 14 14 14 true 14 14 14 14 true 14 14 14 14 true 0 1 Qt::Horizontal 1 12 4 12 0 Qt::Horizontal 40 20 0 12 0 0 0 4 4 0 4 2 150 0 150 16777215 150 0 150 16777215 DigitalPeakMeter QWidget
widgets/digitalpeakmeter.h
1
LEDButton QPushButton
widgets/ledbutton.h
ScalableButton QPushButton
widgets/scalablebutton.h
Carla-2.4.2/resources/ui/carla_refresh.ui000066400000000000000000000426321420416754300203440ustar00rootroot00000000000000 PluginRefreshW 0 0 613 369 Carla - Refresh Qt::Horizontal QSizePolicy::Preferred 30 20 Search for new... Qt::AlignCenter LADSPA DSSI LV2 VST2 VST3 AU 0 1 Qt::Horizontal SF2/3 SFZ Qt::Horizontal 40 5 Qt::Vertical 20 40 0 1 Qt::Vertical Native POSIX 32bit POSIX 64bit Windows 32bit Windows 64bit Qt::Vertical 20 40 Qt::Horizontal QSizePolicy::Fixed 20 20 Available tools: Qt::AlignCenter true 16 16 :/16x16/dialog-ok-apply.svgz true 16 16 :/16x16/dialog-ok-apply.svgz true python3-rdflib (LADSPA-RDF support) carla-discovery-win64 carla-discovery-native 16 16 :/16x16/dialog-ok-apply.svgz true 16 16 :/16x16/dialog-ok-apply.svgz true carla-discovery-posix32 16 16 :/16x16/dialog-ok-apply.svgz true 16 16 :/16x16/dialog-ok-apply.svgz true carla-discovery-posix64 carla-discovery-win32 Qt::Vertical 20 40 Options: Qt::AlignCenter true Carla will run small processing checks when scanning the plugins (to make sure they won't crash). You can disable these checks to get a faster scanning time (at your own risk). Run processing checks while scanning Qt::Vertical 20 40 Qt::Horizontal QSizePolicy::Preferred 30 20 Qt::Vertical 20 6 22 22 :/16x16/dialog-information.svgz true Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Restart Carla to list the new LV2 plugins 0 0 100 0 Press 'Scan' to begin the search Scan :/16x16/arrow-right.svgz:/16x16/arrow-right.svgz >> Skip Close :/16x16/window-close.svgz:/16x16/window-close.svgz b_close clicked() PluginRefreshW close() 426 231 236 125 Carla-2.4.2/resources/ui/carla_settings.ui000066400000000000000000003273641420416754300205560ustar00rootroot00000000000000 CarlaSettingsW 0 0 612 620 600 0 Settings QAbstractItemView::NoEditTriggers false false QAbstractItemView::SingleSelection QAbstractItemView::SelectRows 48 48 Qt::ElideMiddle false false false true false 52 main canvas engine osc file-paths plugin-paths wine experimental Widget Main 75 true :/scalable/carla.svg:/scalable/carla.svg ItemIsSelectable|ItemIsEnabled Canvas 75 true :/scalable/canvas.svg:/scalable/canvas.svg ItemIsSelectable|ItemIsEnabled Engine 75 true :/48x48/jack.png:/48x48/jack.png ItemIsSelectable|ItemIsEnabled OSC 75 true :/scalable/osc.svgz:/scalable/osc.svgz ItemIsSelectable|ItemIsEnabled File Paths 75 true :/scalable/folder.svgz:/scalable/folder.svgz ItemIsSelectable|ItemIsEnabled Plugin Paths 75 true :/scalable/folder.svgz:/scalable/folder.svgz ItemIsSelectable|ItemIsEnabled Wine 75 true :/scalable/wine.svgz:/scalable/wine.svgz ItemIsSelectable|ItemIsEnabled Experimental 75 true :/scalable/warning.svgz:/scalable/warning.svgz ItemIsSelectable|ItemIsEnabled 0 0 2 2 2 2 <b>Main</b> Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop Qt::Horizontal 40 20 48 48 :/scalable/carla.svg true Qt::AlignHCenter|Qt::AlignTop Paths Default project folder: 22 22 :/16x16/document-open.svgz:/16x16/document-open.svgz 16 16 Interface Qt::Horizontal QSizePolicy::Preferred 130 10 Use "Classic" as default rack skin Interface refresh interval: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter ms 10 1000 250 Show console output in Logs tab (needs engine restart) Show a confirmation dialog before quitting Theme Use Carla "PRO" theme (needs restart) false Color scheme: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false Black System Qt::Horizontal QSizePolicy::Preferred 130 10 Experimental Enable experimental features Qt::Vertical 20 40 2 2 2 2 <b>Canvas</b> Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop Qt::Horizontal 40 20 48 48 :/scalable/canvas.svg true Qt::AlignHCenter|Qt::AlignTop Theme Qt::Horizontal 40 20 Qt::Horizontal 80 20 Bezier Lines Theme: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Qt::Horizontal 40 20 Qt::Horizontal 40 20 Size: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 775x600 1550x1200 3100x2400 4650x3600 6200x4800 12400x9600 Qt::Horizontal 40 20 Options Auto-hide groups with no ports Auto-select items on hover Basic eye-candy (group shadows) Render Hints Anti-Aliasing true Full canvas repaints (slower, but prevents drawing issues) Qt::Vertical 20 40 2 2 2 2 <b>Engine</b> Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop Qt::Horizontal 40 20 :/48x48/jack.png Qt::AlignHCenter|Qt::AlignTop Core 0 0 1 QLayout::SetMinimumSize 0 0 0 0 0 Single Client Multiple Clients Continuous Rack Patchbay QLayout::SetMinimumSize 0 0 0 0 Continuous Rack Patchbay Audio driver: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Process mode: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Maximum number of parameters to allow in the built-in 'Edit' dialog Max Parameters: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Maximum number of parameters to allow in the built-in 'Edit' dialog 1000 ... Qt::Horizontal 40 20 Qt::Horizontal QSizePolicy::Fixed 100 20 Reset Xrun counter after project load Plugin UIs How much time to wait for OSC GUIs to ping back the host UI Bridge Timeout: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter How much time to wait for OSC GUIs to ping back the host ms 10000 Qt::Horizontal QSizePolicy::Fixed 100 10 Use OSC-GUI bridges when possible, this way separating the UI from DSP code Use UI bridges instead of direct handling when possible Make plugin UIs always-on-top Make plugin UIs appear on top of Carla (needs restart) NOTE: Plugin-bridge UIs cannot be managed by Carla on macOS 16777215 5 Qt::Horizontal 40 20 22 22 :/16x16/dialog-information.svgz true Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Restart the engine to load the new settings Qt::Horizontal 40 20 Qt::Vertical 20 300 2 2 2 2 <b>OSC</b> Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop Qt::Horizontal 40 20 48 48 :/scalable/osc.svgz true Qt::AlignHCenter|Qt::AlignTop Core Enable OSC Qt::Horizontal 40 20 Qt::Horizontal 40 20 Enable TCP port true Use specific port: Qt::Horizontal 40 20 22 22 :/16x16/dialog-information.svgz true Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Overridden by CARLA_OSC_TCP_PORT env var Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse Qt::Horizontal 40 20 Qt::Horizontal 40 20 Qt::Horizontal 40 20 false Maximum number of parameters to allow in the built-in 'Edit' dialog 1024 32767 Use randomly assigned port true Enable UDP port true Use specific port: Qt::Horizontal 40 20 Qt::Horizontal 40 20 false Maximum number of parameters to allow in the built-in 'Edit' dialog 1024 32767 Use randomly assigned port true Qt::Horizontal 40 20 22 22 :/16x16/dialog-information.svgz true Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Overridden by CARLA_OSC_UDP_PORT env var Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse Qt::Horizontal 40 20 16777215 5 Qt::Horizontal 40 20 22 22 :/16x16/dialog-information.svgz true Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Restart the engine to load the new settings Qt::Horizontal 40 20 Qt::Horizontal 40 20 22 22 :/16x16/dialog-warning.svgz true Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter DSSI UIs require OSC UDP port enabled Qt::Horizontal 40 20 Qt::Vertical 20 126 verticalSpacer_10 label_36 group_osc_tcp_port group_osc_udp_port group_osc_core 2 2 2 2 <b>File Paths</b> Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop Qt::Horizontal 40 20 48 48 :/scalable/folder.svgz true Qt::AlignHCenter|Qt::AlignTop true 120 0 Audio MIDI 0 0 0 0 0 0 0 0 Used for the "audiofile" plugin 0 0 0 0 0 Used for the "midifile" plugin Qt::Horizontal 20 20 0 0 0 0 0 0 0 0 0 0 0 Add... :/16x16/list-add.svgz:/16x16/list-add.svgz Remove :/16x16/list-remove.svgz:/16x16/list-remove.svgz Qt::Vertical QSizePolicy::Fixed 20 20 Change... :/16x16/edit-rename.svgz:/16x16/edit-rename.svgz Qt::Vertical 20 40 2 2 2 2 <b>Plugin Paths</b> Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop Qt::Horizontal 40 20 48 48 :/scalable/folder.svgz true Qt::AlignHCenter|Qt::AlignTop true 120 0 LADSPA DSSI LV2 VST2 VST3 SF2/3 SFZ Qt::Horizontal 20 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 22 22 :/16x16/dialog-information.svgz true Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Restart Carla to find new plugins 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Add... :/16x16/list-add.svgz:/16x16/list-add.svgz Remove :/16x16/list-remove.svgz:/16x16/list-remove.svgz Qt::Vertical QSizePolicy::Fixed 20 20 Change... :/16x16/edit-rename.svgz:/16x16/edit-rename.svgz Qt::Vertical 20 40 2 2 2 2 <b>Wine</b> Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop Qt::Horizontal 40 20 48 48 :/scalable/wine.svgz true Qt::AlignHCenter|Qt::AlignTop Executable Path to 'wine' binary: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Prefix Auto-detect Wine prefix based on plugin filename Fallback: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Note: WINEPREFIX env var is preferred over this fallback Qt::AlignCenter Realtime Priority true Qt::Horizontal 40 20 Qt::Horizontal 40 20 1 89 Base priority: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter WineServer priority: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 1 99 Qt::Horizontal 40 20 Qt::Horizontal 40 20 Qt::Horizontal 40 20 22 22 :/16x16/dialog-information.svgz true Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter These options are not available for Carla as plugin Qt::Horizontal 40 20 Qt::Vertical 20 96 16777215 5 2 2 2 2 <b>Experimental</b> Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop Qt::Horizontal 40 20 48 48 :/scalable/warning.svgz true Qt::AlignHCenter|Qt::AlignTop Qt::Horizontal 40 20 22 22 :/16x16/dialog-warning.svgz true Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter true Experimental options! Likely to be unstable! Qt::Horizontal 40 20 Main Enable plugin bridges false Enable Wine bridges Enable jack applications Export single plugins to LV2 Use system/desktop-theme icons (needs restart) Load Carla backend in global namespace (NOT RECOMMENDED) Canvas Fancy eye-candy (fade-in/out groups, glow connections) Use OpenGL for rendering (needs restart) false High Quality Anti-Aliasing (OpenGL only) Render Ardour-style "Inline Displays" Engine Force mono plugins as stereo by running 2 instances at the same time. This mode is not available for VST plugins. Force mono plugins as stereo When enabled, Carla will try to prevent plugins from doing things that might mess up the audio or cause xruns, such as fork(), gtk_init() and similar. Prevent unsafe calls from plugins (needs restart) false Run plugins in a separate process, so if they crash it does not affect Carla. Plugins get automatically deactivated in such cases. Reactvate them to start the process again, with the last saved state applied to it. Run plugins in bridge mode when possible Qt::Vertical 20 70 16777215 5 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::Reset buttonBox accepted() CarlaSettingsW accept() 254 458 157 274 buttonBox rejected() CarlaSettingsW reject() 254 458 286 274 lw_page currentCellChanged(int,int,int,int) stackedWidget setCurrentIndex(int) 113 17 170 27 ch_main_theme_pro toggled(bool) label_main_theme_color setEnabled(bool) 228 152 249 165 ch_main_theme_pro toggled(bool) cb_main_theme_color setEnabled(bool) 215 149 314 167 cb_paths currentIndexChanged(int) tw_paths setCurrentIndex(int) 323 82 323 244 cb_canvas_use_opengl toggled(bool) cb_canvas_render_hq_aa setEnabled(bool) 402 220 402 243 cb_exp_plugin_bridges toggled(bool) ch_exp_wine_bridges setEnabled(bool) 402 122 402 145 cb_exp_plugin_bridges toggled(bool) ch_engine_prefer_plugin_bridges setEnabled(bool) 402 145 402 433 rb_osc_tcp_port_specific toggled(bool) sb_osc_tcp_port_number setEnabled(bool) 368 174 467 174 rb_osc_udp_port_specific toggled(bool) sb_osc_udp_port_number setEnabled(bool) 368 282 467 282 cb_filepaths currentIndexChanged(int) tw_filepaths setCurrentIndex(int) 258 79 350 312 cb_filepaths currentIndexChanged(int) tw_filepaths_info setCurrentIndex(int) 258 79 409 79 Carla-2.4.2/resources/ui/carla_settings_driver.ui000066400000000000000000000203251420416754300221140ustar00rootroot00000000000000 DriverSettingsW 0 0 350 264 350 0 Driver Settings Qt::Horizontal 40 20 Qt::Horizontal 40 20 Qt::Horizontal 40 20 0 0 Device: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 Buffer size: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 Sample rate: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Qt::Horizontal 40 20 Triple buffer Qt::Horizontal 40 20 Qt::Horizontal QSizePolicy::Preferred 40 20 32 0 Show Driver Control Panel Qt::Horizontal QSizePolicy::Preferred 40 20 Qt::Horizontal 40 20 22 22 :/16x16/dialog-information.svgz true Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Restart the engine to load the new settings Qt::Horizontal 40 20 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() DriverSettingsW accept() 248 254 157 274 buttonBox rejected() DriverSettingsW reject() 316 260 286 274 Carla-2.4.2/resources/ui/inputdialog_value.ui000066400000000000000000000036471420416754300212620ustar00rootroot00000000000000 Dialog 0 0 269 183 Set value TextLabel Scale Points Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() Dialog accept() 248 254 157 274 buttonBox rejected() Dialog reject() 316 260 286 274 Carla-2.4.2/resources/ui/midipattern.ui000066400000000000000000000277711420416754300200730ustar00rootroot00000000000000 MidiPatternW 0 0 755 436 MIDI Pattern 30 20 30 20 Time Signature: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter true 0 1/4 2/4 3/4 4/4 5/4 6/4 Qt::Horizontal QSizePolicy::Fixed 5 5 Measures: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Qt::Horizontal QSizePolicy::Fixed 5 5 Default Length: 4 1/16 1/15 1/12 1/9 1/8 1/6 1/4 1/3 1/2 1 Qt::Horizontal QSizePolicy::Fixed 5 5 Quantize: 4 1/16 1/15 1/12 1/9 1/8 1/6 1/4 1/3 1/2 1 Qt::Horizontal QSizePolicy::Fixed 5 5 Qt::Horizontal Qt::Vertical 0 0 755 23 &File &Edit &Quit Esc true &Insert Mode F true &Velocity Mode D Select All A PianoRollView QGraphicsView
widgets/pianoroll.h
ModeIndicator QWidget
widgets/pianoroll.h
1
act_file_quit triggered() MidiPatternW close() -1 -1 377 217
Carla-2.4.2/resources/ui/xycontroller.ui000066400000000000000000000307341420416754300203100ustar00rootroot00000000000000 XYControllerW 0 0 588 523 XY Controller Qt::ScrollBarAlwaysOff Qt::ScrollBarAlwaysOff -100 100 Qt::Vertical QSizePolicy::Fixed 20 30 -100 100 0 1 Qt::Horizontal X Controls: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 1 Qt::Vertical Y Controls: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 1 Qt::Vertical Smooth Qt::Horizontal 40 20 0 0 Qt::ScrollBarAlwaysOff Qt::ScrollBarAlwaysOn Qt::AlignCenter 0 0 1440 69 0 0 1440 69 1440 69 0 0 0 0 0 0 0 1440 69 1440 69 0 0 588 27 &Settings Channels &File true Show MIDI &Keyboard (All) true 1 true 2 true 3 true 4 true 5 true 6 true 7 true 8 true 9 true 10 true 11 true 12 true 13 true 14 true 15 true 16 :/16x16/application-exit.png:/16x16/application-exit.png &Quit Esc (None) PixmapKeyboard QWidget
widgets/pixmapkeyboard
1
ScalableDial QDial
widgets/scalabledial
act_quit triggered() XYControllerW close() -1 -1 239 222
Carla-2.4.2/source/000077500000000000000000000000001420416754300140475ustar00rootroot00000000000000Carla-2.4.2/source/Makefile.deps.mk000066400000000000000000000415331420416754300170550ustar00rootroot00000000000000#!/usr/bin/make -f # Makefile for Carla C++ code # # --------------------------- # # Created by falkTX # # --------------------------------------------------------------------------------------------------------------------- # Auto-detect OS if not defined TARGET_MACHINE := $(shell $(CC) -dumpmachine) ifneq ($(BSD),true) ifneq ($(HAIKU),true) ifneq ($(HURD),true) ifneq ($(LINUX),true) ifneq ($(MACOS),true) ifneq ($(WIN32),true) ifneq (,$(findstring bsd,$(TARGET_MACHINE))) BSD=true endif ifneq (,$(findstring haiku,$(TARGET_MACHINE))) HAIKU=true endif ifneq (,$(findstring gnu,$(TARGET_MACHINE))) HURD=true endif ifneq (,$(findstring linux,$(TARGET_MACHINE))) LINUX=true endif ifneq (,$(findstring apple,$(TARGET_MACHINE))) MACOS=true endif ifneq (,$(findstring mingw,$(TARGET_MACHINE))) WIN32=true ifneq (,$(findstring x86_64,$(TARGET_MACHINE))) WIN64=true endif endif ifneq (,$(findstring msys,$(TARGET_MACHINE))) WIN32=true endif endif # WIN32 endif # MACOS endif # LINUX endif # HURD endif # HAIKU endif # BSD # --------------------------------------------------------------------------------------------------------------------- # Auto-detect the processor TARGET_PROCESSOR := $(firstword $(subst -, ,$(TARGET_MACHINE))) ifneq (,$(filter i%86,$(TARGET_PROCESSOR))) CPU_I386=true CPU_I386_OR_X86_64=true endif ifneq (,$(filter x86_64,$(TARGET_PROCESSOR))) CPU_X86_64=true CPU_I386_OR_X86_64=true endif ifneq (,$(filter arm%,$(TARGET_PROCESSOR))) CPU_ARM=true CPU_ARM_OR_AARCH64=true endif ifneq (,$(filter arm64%,$(TARGET_PROCESSOR))) CPU_ARM64=true CPU_ARM_OR_AARCH64=true endif ifneq (,$(filter aarch64%,$(TARGET_PROCESSOR))) CPU_AARCH64=true CPU_ARM_OR_AARCH64=true endif # --------------------------------------------------------------------------------------------------------------------- # Set wherever to build static binaries (Windows only) ifeq ($(WIN32),true) ifneq ($(MSYSTEM),MINGW32) ifneq ($(MSYSTEM),MINGW64) STATIC_BINARIES = true endif endif endif # --------------------------------------------------------------------------------------------------------------------- # Set PKG_CONFIG (can be overridden by environment variable) PKG_CONFIG ?= pkg-config ifeq ($(STATIC_BINARIES),true) PKG_CONFIG_FLAGS = --static endif # --------------------------------------------------------------------------------------------------------------------- # Set LINUX_OR_MACOS ifeq ($(LINUX),true) LINUX_OR_MACOS=true endif ifeq ($(MACOS),true) LINUX_OR_MACOS=true endif # --------------------------------------------------------------------------------------------------------------------- # Set MACOS_OR_WIN32 and HAIKU_OR_MACOS_OR_WINDOWS ifeq ($(HAIKU),true) HAIKU_OR_MACOS_OR_WIN32=true endif ifeq ($(MACOS),true) MACOS_OR_WIN32=true HAIKU_OR_MACOS_OR_WIN32=true endif ifeq ($(WIN32),true) MACOS_OR_WIN32=true HAIKU_OR_MACOS_OR_WIN32=true endif # --------------------------------------------------------------------------------------------------------------------- # Set UNIX ifeq ($(BSD),true) UNIX=true endif ifeq ($(HURD),true) UNIX=true endif ifeq ($(LINUX),true) UNIX=true endif ifeq ($(MACOS),true) UNIX=true endif # --------------------------------------------------------------------------------------------------------------------- # Check for optional libs (required by backend or bridges) ifeq ($(LINUX),true) HAVE_ALSA = $(shell $(PKG_CONFIG) --exists alsa && echo true) HAVE_HYLIA = true endif ifeq ($(MACOS),true) ifneq ($(MACOS_OLD),true) HAVE_HYLIA = true endif endif ifeq ($(WIN32),true) HAVE_HYLIA = true endif ifeq ($(MACOS_OR_WIN32),true) HAVE_DGL = true else HAVE_DGL = $(shell $(PKG_CONFIG) --exists gl x11 && echo true) HAVE_X11 = $(shell $(PKG_CONFIG) --exists x11 && echo true) endif ifeq ($(UNIX),true) ifneq ($(MACOS),true) HAVE_PULSEAUDIO = $(shell $(PKG_CONFIG) --exists libpulse-simple && echo true) endif endif # ffmpeg values taken from https://ffmpeg.org/download.html (v2.8.15 maximum) HAVE_FFMPEG = $(shell $(PKG_CONFIG) --max-version=56.60.100 libavcodec && \ $(PKG_CONFIG) --max-version=56.40.101 libavformat && \ $(PKG_CONFIG) --max-version=54.31.100 libavutil && echo true) HAVE_FLUIDSYNTH = $(shell $(PKG_CONFIG) --atleast-version=1.1.7 fluidsynth && echo true) HAVE_JACK = $(shell $(PKG_CONFIG) --exists jack && echo true) HAVE_LIBLO = $(shell $(PKG_CONFIG) --exists liblo && echo true) HAVE_QT4 = $(shell $(PKG_CONFIG) --exists QtCore QtGui && echo true) HAVE_QT5 = $(shell $(PKG_CONFIG) --exists Qt5Core Qt5Gui Qt5Widgets && \ $(PKG_CONFIG) --variable=qt_config Qt5Core | grep -q -v "static" && echo true) HAVE_QT5PKG = $(shell $(PKG_CONFIG) --silence-errors --variable=prefix Qt5OpenGLExtensions 1>/dev/null && echo true) HAVE_SNDFILE = $(shell $(PKG_CONFIG) --exists sndfile && echo true) ifeq ($(HAVE_FLUIDSYNTH),true) HAVE_FLUIDSYNTH_INSTPATCH = $(shell $(PKG_CONFIG) --atleast-version=2.1.0 fluidsynth && \ $(PKG_CONFIG) --atleast-version=1.1.4 libinstpatch-1.0 && echo true) endif ifeq ($(LINUX),true) # juce only supports the most common architectures ifneq (,$(findstring arm,$(TARGET_MACHINE))) HAVE_JUCE_SUPPORTED_ARCH = true endif ifneq (,$(findstring aarch64,$(TARGET_MACHINE))) HAVE_JUCE_SUPPORTED_ARCH = true endif ifneq (,$(findstring i486,$(TARGET_MACHINE))) HAVE_JUCE_SUPPORTED_ARCH = true endif ifneq (,$(findstring i586,$(TARGET_MACHINE))) HAVE_JUCE_SUPPORTED_ARCH = true endif ifneq (,$(findstring i686,$(TARGET_MACHINE))) HAVE_JUCE_SUPPORTED_ARCH = true endif ifneq (,$(findstring x86_64,$(TARGET_MACHINE))) HAVE_JUCE_SUPPORTED_ARCH = true endif ifeq ($(HAVE_JUCE_SUPPORTED_ARCH),true) HAVE_JUCE_LINUX_DEPS = $(shell $(PKG_CONFIG) --exists x11 xcursor xext freetype2 && echo true) endif endif # --------------------------------------------------------------------------------------------------------------------- # Check for optional libs (special non-pkgconfig tests) ifneq ($(WIN32),true) ifeq ($(shell $(PKG_CONFIG) --exists libmagic && echo true),true) HAVE_LIBMAGIC = true HAVE_LIBMAGICPKG = true else # old libmagic versions don't have a pkg-config file, so we need to call the compiler to test it CFLAGS_WITHOUT_ARCH = $(subst -arch arm64,,$(CFLAGS)) HAVE_LIBMAGIC = $(shell echo '\#include ' | $(CC) $(CFLAGS_WITHOUT_ARCH) -x c -w -c - -o /dev/null 2>/dev/null && echo true) endif endif # --------------------------------------------------------------------------------------------------------------------- # Set Qt tools ifeq ($(HAVE_QT4),true) MOC_QT4 ?= $(shell $(PKG_CONFIG) --variable=moc_location QtCore) RCC_QT4 ?= $(shell $(PKG_CONFIG) --variable=rcc_location QtCore) UIC_QT4 ?= $(shell $(PKG_CONFIG) --variable=uic_location QtCore) ifeq (,$(wildcard $(MOC_QT4))) HAVE_QT4=false endif ifeq (,$(wildcard $(RCC_QT4))) HAVE_QT4=false endif endif ifeq ($(HAVE_QT5),true) QT5_HOSTBINS = $(shell $(PKG_CONFIG) --variable=host_bins Qt5Core) MOC_QT5 ?= $(QT5_HOSTBINS)/moc RCC_QT5 ?= $(QT5_HOSTBINS)/rcc UIC_QT5 ?= $(QT5_HOSTBINS)/uic ifeq (,$(wildcard $(MOC_QT5))) HAVE_QT5=false endif ifeq (,$(wildcard $(RCC_QT5))) HAVE_QT5=false endif endif ifeq ($(HAVE_QT4),true) HAVE_QT=true endif ifeq ($(HAVE_QT5),true) HAVE_QT=true endif ifeq ($(WIN32),true) HAVE_QT=true endif # --------------------------------------------------------------------------------------------------------------------- # Set PyQt tools PYRCC5 ?= $(shell which pyrcc5 2>/dev/null) PYUIC5 ?= $(shell which pyuic5 2>/dev/null) ifneq ($(PYUIC5),) ifneq ($(PYRCC5),) HAVE_PYQT = true endif endif # --------------------------------------------------------------------------------------------------------------------- # Set PyQt tools, part2 PYRCC ?= $(PYRCC5) PYUIC ?= $(PYUIC5) ifeq ($(HAVE_QT5),true) HAVE_THEME = true # else # ifeq ($(MACOS),true) # ifneq ($(MACOS_OLD),true) # ifeq ($(HAVE_PYQT),true) # HAVE_THEME = true # MOC_QT5 ?= moc # RCC_QT5 ?= rcc # UIC_QT5 ?= uic # endif # endif # endif endif # --------------------------------------------------------------------------------------------------------------------- # Set USING_JUCE ifeq ($(MACOS_OR_WIN32),true) ifneq ($(MACOS_OLD),true) USING_JUCE = true USING_JUCE_AUDIO_DEVICES = true endif endif ifeq ($(HAVE_JUCE_LINUX_DEPS),true) USING_JUCE = true endif ifeq ($(USING_JUCE),true) ifeq ($(LINUX_OR_MACOS),true) USING_JUCE_GUI_EXTRA = true endif endif # --------------------------------------------------------------------------------------------------------------------- # Set USING_RTAUDIO ifneq ($(HAIKU),true) ifneq ($(USING_JUCE_AUDIO_DEVICES),true) USING_RTAUDIO = true endif endif # --------------------------------------------------------------------------------------------------------------------- # Set libs stuff (part 1) ifneq ($(HAIKU_OR_MACOS_OR_WIN32),true) LIBDL_LIBS = -ldl endif ifeq ($(HAVE_DGL),true) ifeq ($(MACOS),true) DGL_LIBS = -framework OpenGL -framework Cocoa endif ifeq ($(WIN32),true) DGL_LIBS = -lopengl32 -lgdi32 endif ifneq ($(MACOS_OR_WIN32),true) DGL_FLAGS = $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --cflags gl x11) DGL_LIBS = $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --libs gl x11) endif endif ifeq ($(HAVE_LIBLO),true) LIBLO_FLAGS = $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --cflags liblo) LIBLO_LIBS = $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --libs liblo) endif ifeq ($(HAVE_LIBMAGICPKG),true) MAGIC_FLAGS = $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --cflags libmagic) # this is missing in upstream pkg-config MAGIC_FLAGS += -I$(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --variable=includedir libmagic) MAGIC_LIBS = $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --libs libmagic) else ifeq ($(HAVE_LIBMAGIC),true) MAGIC_LIBS += -lmagic ifeq ($(LINUX_OR_MACOS),true) MAGIC_LIBS += -lz endif endif ifeq ($(HAVE_FFMPEG),true) FFMPEG_FLAGS = $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --cflags libavcodec libavformat libavutil) FFMPEG_LIBS = $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --libs libavcodec libavformat libavutil) endif ifeq ($(HAVE_FLUIDSYNTH),true) FLUIDSYNTH_FLAGS = $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --cflags fluidsynth) FLUIDSYNTH_LIBS = $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --libs fluidsynth) endif ifeq ($(HAVE_JACK),true) JACK_FLAGS = $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --cflags jack) JACK_LIBS = $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --libs jack) JACK_LIBDIR = $(shell $(PKG_CONFIG) --variable=libdir jack)/jack endif ifeq ($(HAVE_QT5),true) QT5_FLAGS = $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --cflags Qt5Core Qt5Gui Qt5Widgets) QT5_LIBS = $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --libs Qt5Core Qt5Gui Qt5Widgets) endif ifeq ($(HAVE_SNDFILE),true) SNDFILE_FLAGS = $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --cflags sndfile) SNDFILE_LIBS = $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --libs sndfile) endif ifeq ($(HAVE_X11),true) X11_FLAGS = $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --cflags x11) X11_LIBS = $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --libs x11) endif # --------------------------------------------------------------------------------------------------------------------- # Set libs stuff (part 2) ifeq ($(USING_RTAUDIO),true) RTAUDIO_FLAGS = -DHAVE_GETTIMEOFDAY RTMIDI_FLAGS = ifeq ($(DEBUG),true) RTAUDIO_FLAGS += -D__RTAUDIO_DEBUG__ RTMIDI_FLAGS += -D__RTMIDI_DEBUG__ endif ifeq ($(LINUX),true) ifeq ($(HAVE_ALSA),true) RTAUDIO_FLAGS += $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --cflags alsa) -D__LINUX_ALSA__ RTAUDIO_LIBS += $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --libs alsa) -pthread RTMIDI_FLAGS += $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --cflags alsa) -D__LINUX_ALSA__ RTMIDI_LIBS += $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --libs alsa) endif endif ifeq ($(MACOS),true) RTAUDIO_FLAGS += -D__MACOSX_CORE__ RTAUDIO_LIBS += -framework CoreAudio RTMIDI_FLAGS += -D__MACOSX_CORE__ RTMIDI_LIBS += -framework CoreMIDI endif ifeq ($(UNIX),true) RTAUDIO_FLAGS += -D__UNIX_JACK__ ifeq ($(HAVE_PULSEAUDIO),true) RTAUDIO_FLAGS += $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --cflags libpulse-simple) -D__UNIX_PULSE__ RTAUDIO_LIBS += $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --libs libpulse-simple) endif endif ifeq ($(WIN32),true) RTAUDIO_FLAGS += -D__WINDOWS_ASIO__ -D__WINDOWS_DS__ -D__WINDOWS_WASAPI__ RTAUDIO_LIBS += -ldsound -luuid -lksuser -lwinmm RTMIDI_FLAGS += -D__WINDOWS_MM__ endif endif # USING_RTAUDIO ifeq ($(BSD),true) JACKBRIDGE_LIBS = -pthread -lrt LILV_LIBS = -lm -lrt RTMEMPOOL_LIBS = -pthread WATER_LIBS = -pthread -lrt endif ifeq ($(HAIKU),true) JACKBRIDGE_LIBS = -lpthread LILV_LIBS = -lm RTMEMPOOL_LIBS = -lpthread WATER_LIBS = -lpthread endif ifeq ($(HURD),true) JACKBRIDGE_LIBS = -ldl -pthread -lrt LILV_LIBS = -ldl -lm -lrt RTMEMPOOL_LIBS = -pthread -lrt WATER_LIBS = -ldl -pthread -lrt endif ifeq ($(LINUX),true) HYLIA_FLAGS = -DLINK_PLATFORM_LINUX=1 JACKBRIDGE_LIBS = -ldl -pthread -lrt LILV_LIBS = -ldl -lm -lrt RTMEMPOOL_LIBS = -pthread -lrt WATER_LIBS = -ldl -pthread -lrt ifeq ($(USING_JUCE),true) JUCE_AUDIO_DEVICES_LIBS = $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --libs alsa) JUCE_CORE_LIBS = -ldl -pthread -lrt JUCE_EVENTS_LIBS = $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --libs x11) JUCE_GRAPHICS_LIBS = $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --libs freetype2) JUCE_GUI_BASICS_LIBS = $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --libs x11 xext) endif # USING_JUCE endif # LINUX ifeq ($(MACOS),true) HYLIA_FLAGS = -DLINK_PLATFORM_MACOSX=1 JACKBRIDGE_LIBS = -ldl -pthread LILV_LIBS = -ldl -lm RTMEMPOOL_LIBS = -pthread WATER_LIBS = -framework AppKit ifeq ($(USING_JUCE),true) JUCE_AUDIO_BASICS_LIBS = -framework Accelerate JUCE_AUDIO_DEVICES_LIBS = -framework AppKit -framework AudioToolbox -framework CoreAudio -framework CoreMIDI JUCE_AUDIO_FORMATS_LIBS = -framework AudioToolbox -framework CoreFoundation JUCE_AUDIO_PROCESSORS_LIBS = -framework AudioToolbox -framework AudioUnit -framework CoreAudio -framework CoreAudioKit -framework Cocoa -framework Carbon JUCE_CORE_LIBS = -framework AppKit JUCE_EVENTS_LIBS = -framework AppKit JUCE_GRAPHICS_LIBS = -framework Cocoa -framework QuartzCore JUCE_GUI_BASICS_LIBS = -framework Cocoa JUCE_GUI_EXTRA_LIBS = -framework IOKit endif # USING_JUCE endif # MACOS ifeq ($(WIN32),true) HYLIA_FLAGS = -DLINK_PLATFORM_WINDOWS=1 HYLIA_LIBS = -liphlpapi JACKBRIDGE_LIBS = -pthread LILV_LIBS = -lm RTMEMPOOL_LIBS = -pthread WATER_LIBS = -luuid -lwsock32 -lwininet -lversion -lole32 -lws2_32 -loleaut32 -limm32 -lcomdlg32 -lshlwapi -lrpcrt4 -lwinmm ifeq ($(USING_JUCE),true) JUCE_AUDIO_DEVICES_LIBS = -lwinmm -lole32 JUCE_CORE_LIBS = -luuid -lwsock32 -lwininet -lversion -lole32 -lws2_32 -loleaut32 -limm32 -lcomdlg32 -lshlwapi -lrpcrt4 -lwinmm JUCE_EVENTS_LIBS = -lole32 JUCE_GRAPHICS_LIBS = -lgdi32 JUCE_GUI_BASICS_LIBS = -lgdi32 -limm32 -lcomdlg32 -lole32 endif # USING_JUCE endif # WIN32 # --------------------------------------------------------------------------------------------------------------------- ifeq ($(STATIC_PLUGIN_TARGET),true) HAVE_ALSA = false HAVE_DGL = false HAVE_HYLIA = false HAVE_JACK = false HAVE_LIBLO = false HAVE_PYQT = false HAVE_QT4 = false HAVE_QT5 = false HAVE_QT5PKG = false HAVE_PULSEAUDIO = false USING_JUCE_AUDIO_DEVICES = false USING_RTAUDIO = false endif # --------------------------------------------------------------------------------------------------------------------- AUDIO_DECODER_LIBS = $(FFMPEG_LIBS) AUDIO_DECODER_LIBS += $(SNDFILE_LIBS) NATIVE_PLUGINS_LIBS += $(DGL_LIBS) NATIVE_PLUGINS_LIBS += $(FFMPEG_LIBS) NATIVE_PLUGINS_LIBS += $(SNDFILE_LIBS) STATIC_CARLA_PLUGIN_LIBS = $(AUDIO_DECODER_LIBS) STATIC_CARLA_PLUGIN_LIBS += $(NATIVE_PLUGINS_LIBS) STATIC_CARLA_PLUGIN_LIBS += $(FLUIDSYNTH_LIBS) STATIC_CARLA_PLUGIN_LIBS += $(HYLIA_LIBS) STATIC_CARLA_PLUGIN_LIBS += $(LIBLO_LIBS) STATIC_CARLA_PLUGIN_LIBS += $(LILV_LIBS) STATIC_CARLA_PLUGIN_LIBS += $(MAGIC_LIBS) STATIC_CARLA_PLUGIN_LIBS += $(RTMEMPOOL_LIBS) STATIC_CARLA_PLUGIN_LIBS += $(WATER_LIBS) ifeq ($(USING_JUCE),true) STATIC_CARLA_PLUGIN_LIBS += $(JUCE_AUDIO_BASICS_LIBS) STATIC_CARLA_PLUGIN_LIBS += $(JUCE_AUDIO_FORMATS_LIBS) STATIC_CARLA_PLUGIN_LIBS += $(JUCE_AUDIO_PROCESSORS_LIBS) STATIC_CARLA_PLUGIN_LIBS += $(JUCE_CORE_LIBS) STATIC_CARLA_PLUGIN_LIBS += $(JUCE_EVENTS_LIBS) STATIC_CARLA_PLUGIN_LIBS += $(JUCE_GRAPHICS_LIBS) STATIC_CARLA_PLUGIN_LIBS += $(JUCE_GUI_BASICS_LIBS) ifeq ($(USING_JUCE_GUI_EXTRA),true) STATIC_CARLA_PLUGIN_LIBS += $(JUCE_GUI_EXTRA_LIBS) endif endif ifeq ($(EXTERNAL_PLUGINS),true) ifneq ($(DEBUG),true) ifneq ($(TESTBUILD),true) ifeq ($(shell $(PKG_CONFIG) --exists liblo fftw3 mxml zlib && echo true),true) STATIC_CARLA_PLUGIN_LIBS += $(shell $(PKG_CONFIG) $(PKG_CONFIG_FLAGS) --libs liblo fftw3 mxml zlib) -pthread endif endif endif endif # --------------------------------------------------------------------------------------------------------------------- Carla-2.4.2/source/Makefile.mk000066400000000000000000000207001420416754300161140ustar00rootroot00000000000000#!/usr/bin/make -f # Makefile for Carla C++ code # # --------------------------- # # Created by falkTX # # --------------------------------------------------------------------------------------------------------------------- # Base environment vars AR ?= ar CC ?= gcc CXX ?= g++ WINECC ?= winegcc # --------------------------------------------------------------------------------------------------------------------- # Internationalization I18N_LANGUAGES := # --------------------------------------------------------------------------------------------------------------------- # Base definitions for dependencies and system type include $(CWD)/Makefile.deps.mk # --------------------------------------------------------------------------------------------------------------------- # Set build and link flags BASE_FLAGS = -Wall -Wextra -pipe -DBUILDING_CARLA -DREAL_BUILD -MD -MP -fno-common BASE_OPTS = -O3 -ffast-math -fdata-sections -ffunction-sections ifeq ($(CPU_I386_OR_X86_64),true) BASE_OPTS += -mtune=generic -msse -msse2 -mfpmath=sse endif ifeq ($(CPU_ARM),true) ifneq ($(CPU_ARM64),true) BASE_OPTS += -mfpu=neon-vfpv4 -mfloat-abi=hard endif endif ifeq ($(MACOS),true) # MacOS linker flags BASE_FLAGS += -Wno-deprecated-declarations LINK_OPTS = -fdata-sections -ffunction-sections -Wl,-dead_strip -Wl,-dead_strip_dylibs ifneq ($(SKIP_STRIPPING),true) LINK_OPTS += -Wl,-x endif else # Common linker flags LINK_OPTS = -fdata-sections -ffunction-sections -Wl,--gc-sections -Wl,-O1 -Wl,--as-needed ifneq ($(SKIP_STRIPPING),true) LINK_OPTS += -Wl,--strip-all endif endif ifeq ($(NOOPT),true) # No CPU-specific optimization flags BASE_OPTS = -O2 -ffast-math -fdata-sections -ffunction-sections -DBUILDING_CARLA_NOOPT endif ifeq ($(WIN32),true) # Assume we want posix BASE_FLAGS += -posix # Needed for windows, see https://github.com/falkTX/Carla/issues/855 BASE_FLAGS += -mstackrealign ifeq ($(BUILDING_FOR_WINE),true) BASE_FLAGS += -DBUILDING_CARLA_FOR_WINE endif else # Not needed for Windows BASE_FLAGS += -fPIC -DPIC endif ifeq ($(CLANG),true) BASE_FLAGS += -Wabsolute-value endif ifeq ($(DEBUG),true) BASE_FLAGS += -DDEBUG -O0 -g LINK_OPTS = else BASE_FLAGS += -DNDEBUG $(BASE_OPTS) -fvisibility=hidden CXXFLAGS += -fvisibility-inlines-hidden endif ifeq ($(WITH_LTO),true) BASE_FLAGS += -fno-strict-aliasing -flto endif 32BIT_FLAGS = -m32 64BIT_FLAGS = -m64 ARM32_FLAGS = -mcpu=cortex-a7 -mtune=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard -mvectorize-with-neon-quad BUILD_C_FLAGS = $(BASE_FLAGS) -std=gnu99 $(CFLAGS) BUILD_CXX_FLAGS = $(BASE_FLAGS) -std=gnu++11 $(CXXFLAGS) LINK_FLAGS = $(LINK_OPTS) $(LDFLAGS) ifneq ($(MACOS),true) # Not available on MacOS LINK_FLAGS += -Wl,--no-undefined endif ifeq ($(MACOS_OLD),true) BUILD_CXX_FLAGS = $(BASE_FLAGS) $(CXXFLAGS) -DHAVE_CPP11_SUPPORT=0 endif ifeq ($(STATIC_BINARIES),true) LINK_FLAGS += -static endif # --------------------------------------------------------------------------------------------------------------------- # Strict test build ifeq ($(TESTBUILD),true) BASE_FLAGS += -Werror -Wcast-qual -Wconversion -Wdisabled-optimization BASE_FLAGS += -Wdouble-promotion -Wfloat-equal -Wpointer-arith -Wsign-conversion BASE_FLAGS += -Wformat=2 -Woverlength-strings BASE_FLAGS += -Wmissing-declarations -Wredundant-decls BASE_FLAGS += -Wshadow -Wundef -Wuninitialized -Wunused BASE_FLAGS += -Wstrict-aliasing -fstrict-aliasing BASE_FLAGS += -Wstrict-overflow -fstrict-overflow BASE_FLAGS += -Wnull-dereference ifneq ($(CLANG),true) BASE_FLAGS += -Wabi=98 -Wclobbered -Wlogical-op BASE_FLAGS += -Wformat-truncation=2 -Wformat-overflow=2 BASE_FLAGS += -Wstringop-overflow=4 -Wstringop-truncation BASE_FLAGS += -Wduplicated-branches -Wduplicated-cond endif CFLAGS += -Winit-self -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wwrite-strings ifneq ($(CLANG),true) CFLAGS += -Wjump-misses-init endif CXXFLAGS += -Wc++0x-compat -Wc++11-compat CXXFLAGS += -Wnon-virtual-dtor -Woverloaded-virtual # CXXFLAGS += -Wold-style-cast -Wuseless-cast CXXFLAGS += -Wzero-as-null-pointer-constant ifneq ($(DEBUG),true) CXXFLAGS += -Weffc++ endif ifeq ($(LINUX),true) BASE_FLAGS += -isystem /opt/kxstudio/include endif ifeq ($(MACOS),true) CXXFLAGS += -isystem /System/Library/Frameworks endif ifeq ($(WIN32),true) BASE_FLAGS += -isystem /opt/mingw32/include endif ifeq ($(WIN64),true) BASE_FLAGS += -isystem /opt/mingw64/include endif # TODO ifeq ($(CLANG),true) BASE_FLAGS += -Wno-double-promotion BASE_FLAGS += -Wno-format-nonliteral BASE_FLAGS += -Wno-tautological-pointer-compare endif endif # --------------------------------------------------------------------------------------------------------------------- # Set base defines ifeq ($(JACKBRIDGE_DIRECT),true) ifeq ($(HAVE_JACK),true) BASE_FLAGS += -DJACKBRIDGE_DIRECT else $(error jackbridge direct mode requested, but jack not available) endif endif ifeq ($(HAVE_DGL),true) BASE_FLAGS += -DHAVE_DGL BASE_FLAGS += -DDGL_NAMESPACE=CarlaDGL -DDGL_FILE_BROWSER_DISABLED -DDGL_NO_SHARED_RESOURCES endif ifeq ($(HAVE_FLUIDSYNTH),true) BASE_FLAGS += -DHAVE_FLUIDSYNTH ifeq ($(HAVE_FLUIDSYNTH_INSTPATCH),true) BASE_FLAGS += -DHAVE_FLUIDSYNTH_INSTPATCH endif endif ifeq ($(HAVE_FFMPEG),true) BASE_FLAGS += -DHAVE_FFMPEG endif ifeq ($(HAVE_HYLIA),true) BASE_FLAGS += -DHAVE_HYLIA endif ifeq ($(HAVE_LIBLO),true) BASE_FLAGS += -DHAVE_LIBLO endif ifeq ($(HAVE_LIBMAGIC),true) BASE_FLAGS += -DHAVE_LIBMAGIC endif ifeq ($(HAVE_PYQT),true) BASE_FLAGS += -DHAVE_PYQT endif ifeq ($(HAVE_SNDFILE),true) BASE_FLAGS += -DHAVE_SNDFILE endif ifeq ($(HAVE_X11),true) BASE_FLAGS += -DHAVE_X11 endif ifeq ($(USING_JUCE),true) BASE_FLAGS += -DUSING_JUCE endif ifeq ($(USING_JUCE_AUDIO_DEVICES),true) BASE_FLAGS += -DUSING_JUCE_AUDIO_DEVICES endif ifeq ($(USING_JUCE_GUI_EXTRA),true) BASE_FLAGS += -DUSING_JUCE_GUI_EXTRA endif ifeq ($(USING_RTAUDIO),true) BASE_FLAGS += -DUSING_RTAUDIO endif ifeq ($(STATIC_PLUGIN_TARGET),true) BASE_FLAGS += -DSTATIC_PLUGIN_TARGET endif # --------------------------------------------------------------------------------------------------------------------- # Allow custom namespace ifneq ($(CARLA_BACKEND_NAMESPACE),) BASE_FLAGS += -DCARLA_BACKEND_NAMESPACE=$(CARLA_BACKEND_NAMESPACE) endif # --------------------------------------------------------------------------------------------------------------------- # Set app extension ifeq ($(WIN32),true) APP_EXT = .exe endif # --------------------------------------------------------------------------------------------------------------------- # Set shared lib extension LIB_EXT = .so ifeq ($(MACOS),true) LIB_EXT = .dylib endif ifeq ($(WIN32),true) LIB_EXT = .dll endif BASE_FLAGS += -DCARLA_LIB_EXT=\"$(LIB_EXT)\" # --------------------------------------------------------------------------------------------------------------------- # Set static libs start & end ifneq ($(MACOS),true) LIBS_START = -Wl,--start-group -Wl,--whole-archive LIBS_END = -Wl,--no-whole-archive -Wl,--end-group endif # --------------------------------------------------------------------------------------------------------------------- # Set shared library CLI arg ifeq ($(MACOS),true) SHARED = -dynamiclib else SHARED = -shared endif # --------------------------------------------------------------------------------------------------------------------- # Set arguments used for inline 'sed' ifeq ($(BSD),true) SED_ARGS=-i '' -e else SED_ARGS=-i -e endif # --------------------------------------------------------------------------------------------------------------------- # Set command used for file symlinking LINK := ln -sf # --------------------------------------------------------------------------------------------------------------------- # Check if we can generate ttl files ifneq ($(BUILDING_FOR_WINE),true) ifeq ($(CROSS_COMPILING),true) ifeq ($(WIN32),true) NEEDS_WINE = true endif endif endif ifneq ($(CROSS_COMPILING),true) CAN_GENERATE_LV2_TTL = true else ifeq ($(NEEDS_WINE),true) CAN_GENERATE_LV2_TTL = true endif # --------------------------------------------------------------------------------------------------------------------- # Check if we should build the external plugins ifeq ($(EXTERNAL_PLUGINS),true) ifneq ($(DEBUG),true) ifneq ($(TESTBUILD),true) ifneq (,$(wildcard $(CWD)/native-plugins/external/Makefile.mk)) BASE_FLAGS += -DHAVE_EXTERNAL_PLUGINS include $(CWD)/native-plugins/external/Makefile.mk endif endif endif endif # --------------------------------------------------------------------------------------------------------------------- Carla-2.4.2/source/backend/000077500000000000000000000000001420416754300154365ustar00rootroot00000000000000Carla-2.4.2/source/backend/CarlaBackend.doxygen000066400000000000000000000240601420416754300213310ustar00rootroot00000000000000# Doxyfile 1.7.6.1 #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = "Carla Backend" PROJECT_NUMBER = PROJECT_BRIEF = PROJECT_LOGO = OUTPUT_DIRECTORY = ../../doc/CarlaBackend CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English BRIEF_MEMBER_DESC = YES REPEAT_BRIEF = YES ABBREVIATE_BRIEF = ALWAYS_DETAILED_SEC = NO INLINE_INHERITED_MEMB = NO FULL_PATH_NAMES = YES STRIP_FROM_PATH = STRIP_FROM_INC_PATH = SHORT_NAMES = NO JAVADOC_AUTOBRIEF = NO QT_AUTOBRIEF = NO MULTILINE_CPP_IS_BRIEF = NO INHERIT_DOCS = YES SEPARATE_MEMBER_PAGES = NO TAB_SIZE = 4 ALIASES = TCL_SUBST = OPTIMIZE_OUTPUT_FOR_C = NO OPTIMIZE_OUTPUT_JAVA = NO OPTIMIZE_FOR_FORTRAN = NO OPTIMIZE_OUTPUT_VHDL = NO EXTENSION_MAPPING = BUILTIN_STL_SUPPORT = NO CPP_CLI_SUPPORT = NO SIP_SUPPORT = NO IDL_PROPERTY_SUPPORT = YES DISTRIBUTE_GROUP_DOC = NO SUBGROUPING = YES INLINE_GROUPED_CLASSES = NO INLINE_SIMPLE_STRUCTS = NO TYPEDEF_HIDES_STRUCT = YES SYMBOL_CACHE_SIZE = 0 LOOKUP_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- EXTRACT_ALL = YES EXTRACT_PRIVATE = NO EXTRACT_STATIC = YES EXTRACT_LOCAL_CLASSES = YES EXTRACT_LOCAL_METHODS = YES EXTRACT_ANON_NSPACES = NO HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_CLASSES = NO HIDE_FRIEND_COMPOUNDS = NO HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = NO CASE_SENSE_NAMES = YES HIDE_SCOPE_NAMES = NO SHOW_INCLUDE_FILES = YES FORCE_LOCAL_INCLUDES = NO INLINE_INFO = YES SORT_MEMBER_DOCS = NO SORT_BRIEF_DOCS = NO SORT_MEMBERS_CTORS_1ST = NO SORT_GROUP_NAMES = NO SORT_BY_SCOPE_NAME = NO STRICT_PROTO_MATCHING = NO GENERATE_TODOLIST = YES GENERATE_TESTLIST = YES GENERATE_BUGLIST = YES GENERATE_DEPRECATEDLIST= YES ENABLED_SECTIONS = MAX_INITIALIZER_LINES = 30 SHOW_USED_FILES = YES SHOW_DIRECTORIES = NO SHOW_FILES = YES SHOW_NAMESPACES = YES FILE_VERSION_FILTER = LAYOUT_FILE = CITE_BIB_FILES = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- QUIET = NO WARNINGS = YES WARN_IF_UNDOCUMENTED = YES WARN_IF_DOC_ERROR = YES WARN_NO_PARAMDOC = NO WARN_FORMAT = "$file:$line: $text" WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- INPUT = INPUT_ENCODING = UTF-8 FILE_PATTERNS = RECURSIVE = NO EXCLUDE = EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = EXCLUDE_SYMBOLS = EXAMPLE_PATH = EXAMPLE_PATTERNS = EXAMPLE_RECURSIVE = NO IMAGE_PATH = INPUT_FILTER = FILTER_PATTERNS = FILTER_SOURCE_FILES = NO FILTER_SOURCE_PATTERNS = #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- SOURCE_BROWSER = NO INLINE_SOURCES = NO STRIP_CODE_COMMENTS = YES REFERENCED_BY_RELATION = NO REFERENCES_RELATION = NO REFERENCES_LINK_SOURCE = YES USE_HTAGS = NO VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- ALPHABETICAL_INDEX = YES COLS_IN_ALPHA_INDEX = 5 IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- GENERATE_HTML = YES HTML_OUTPUT = . HTML_FILE_EXTENSION = .html HTML_HEADER = HTML_FOOTER = HTML_STYLESHEET = HTML_EXTRA_FILES = HTML_COLORSTYLE_HUE = 220 HTML_COLORSTYLE_SAT = 100 HTML_COLORSTYLE_GAMMA = 80 HTML_TIMESTAMP = YES HTML_ALIGN_MEMBERS = YES HTML_DYNAMIC_SECTIONS = NO GENERATE_DOCSET = NO DOCSET_FEEDNAME = "Doxygen generated docs" DOCSET_BUNDLE_ID = org.doxygen.Project DOCSET_PUBLISHER_ID = org.doxygen.Publisher DOCSET_PUBLISHER_NAME = Publisher GENERATE_HTMLHELP = NO CHM_FILE = HHC_LOCATION = GENERATE_CHI = NO CHM_INDEX_ENCODING = BINARY_TOC = NO TOC_EXPAND = NO GENERATE_QHP = NO QCH_FILE = QHP_NAMESPACE = org.doxygen.Project QHP_VIRTUAL_FOLDER = doc QHP_CUST_FILTER_NAME = QHP_CUST_FILTER_ATTRS = QHP_SECT_FILTER_ATTRS = QHG_LOCATION = GENERATE_ECLIPSEHELP = NO ECLIPSE_DOC_ID = org.doxygen.Project DISABLE_INDEX = NO GENERATE_TREEVIEW = NO ENUM_VALUES_PER_LINE = 4 USE_INLINE_TREES = NO TREEVIEW_WIDTH = 250 EXT_LINKS_IN_WINDOW = NO FORMULA_FONTSIZE = 10 FORMULA_TRANSPARENT = YES USE_MATHJAX = NO MATHJAX_RELPATH = http://www.mathjax.org/mathjax MATHJAX_EXTENSIONS = SEARCHENGINE = YES SERVER_BASED_SEARCH = NO #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- GENERATE_LATEX = NO LATEX_OUTPUT = latex LATEX_CMD_NAME = latex MAKEINDEX_CMD_NAME = makeindex COMPACT_LATEX = NO PAPER_TYPE = a4 EXTRA_PACKAGES = LATEX_HEADER = LATEX_FOOTER = PDF_HYPERLINKS = YES USE_PDFLATEX = YES LATEX_BATCHMODE = NO LATEX_HIDE_INDICES = NO LATEX_SOURCE_CODE = NO LATEX_BIB_STYLE = plain #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- GENERATE_RTF = NO RTF_OUTPUT = rtf COMPACT_RTF = NO RTF_HYPERLINKS = NO RTF_STYLESHEET_FILE = RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- GENERATE_MAN = NO MAN_OUTPUT = man MAN_EXTENSION = .3 MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- GENERATE_XML = NO XML_OUTPUT = xml XML_SCHEMA = XML_DTD = XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- GENERATE_PERLMOD = NO PERLMOD_LATEX = NO PERLMOD_PRETTY = YES PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- ENABLE_PREPROCESSING = YES MACRO_EXPANSION = YES EXPAND_ONLY_PREDEF = YES SEARCH_INCLUDES = YES INCLUDE_PATH = INCLUDE_FILE_PATTERNS = PREDEFINED = DOXYGEN \ BUILDING_CARLA REAL_BUILD \ HAVE_DGL HAVE_LIBLO HAVE_LIBMAGIC HAVE_FLUIDSYNTH HAVE_PROJECTM HAVE_X11 \ HAVE_ZYN_DEPS HAVE_ZYN_UI_DEPS EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- TAGFILES = GENERATE_TAGFILE = ALLEXTERNALS = NO EXTERNAL_GROUPS = YES PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- CLASS_DIAGRAMS = YES MSCGEN_PATH = HIDE_UNDOC_RELATIONS = YES HAVE_DOT = NO DOT_NUM_THREADS = 0 DOT_FONTNAME = Helvetica DOT_FONTSIZE = 10 DOT_FONTPATH = CLASS_GRAPH = YES COLLABORATION_GRAPH = YES GROUP_GRAPHS = YES UML_LOOK = NO TEMPLATE_RELATIONS = NO INCLUDE_GRAPH = YES INCLUDED_BY_GRAPH = YES CALL_GRAPH = NO CALLER_GRAPH = NO GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES DOT_IMAGE_FORMAT = png INTERACTIVE_SVG = NO DOT_PATH = DOTFILE_DIRS = MSCFILE_DIRS = DOT_GRAPH_MAX_NODES = 50 MAX_DOT_GRAPH_DEPTH = 0 DOT_TRANSPARENT = NO DOT_MULTI_TARGETS = YES GENERATE_LEGEND = YES DOT_CLEANUP = YES Carla-2.4.2/source/backend/CarlaBackend.h000066400000000000000000001307121420416754300201050ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2022 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #ifndef CARLA_BACKEND_H_INCLUDED #define CARLA_BACKEND_H_INCLUDED #include "CarlaDefines.h" #ifdef CARLA_PROPER_CPP11_SUPPORT # include #else # include #endif #define STR_MAX 0xFF #ifndef CARLA_BACKEND_NAMESPACE # define CARLA_BACKEND_NAMESPACE CarlaBackend #endif #ifdef __cplusplus # define CARLA_BACKEND_START_NAMESPACE namespace CARLA_BACKEND_NAMESPACE { # define CARLA_BACKEND_END_NAMESPACE } # define CARLA_BACKEND_USE_NAMESPACE using namespace CARLA_BACKEND_NAMESPACE; # include # include # include /* Start namespace */ CARLA_BACKEND_START_NAMESPACE #endif /*! * @defgroup CarlaBackendAPI Carla Backend API * * The Carla Backend API. * * These are the base definitions for everything in the Carla backend code. * @{ */ /* ------------------------------------------------------------------------------------------------------------ * Carla Backend API (base definitions) */ /*! * Maximum default number of loadable plugins. */ static const uint MAX_DEFAULT_PLUGINS = 512; /*! * Maximum number of loadable plugins in rack mode. */ static const uint MAX_RACK_PLUGINS = 64; /*! * Maximum number of loadable plugins in patchbay mode. */ static const uint MAX_PATCHBAY_PLUGINS = 255; /*! * Maximum default number of parameters allowed. * @see ENGINE_OPTION_MAX_PARAMETERS */ static const uint MAX_DEFAULT_PARAMETERS = 200; /*! * The "plugin Id" for the global Carla instance. * Currently only used for audio peaks. */ static const uint MAIN_CARLA_PLUGIN_ID = 0xFFFF; /* ------------------------------------------------------------------------------------------------------------ * Engine Driver Device Hints */ /*! * @defgroup EngineDriverHints Engine Driver Device Hints * * Various engine driver device hints. * @see CarlaEngine::getHints(), CarlaEngine::getDriverDeviceInfo() and carla_get_engine_driver_device_info() * @{ */ /*! * Engine driver device has custom control-panel. */ static const uint ENGINE_DRIVER_DEVICE_HAS_CONTROL_PANEL = 0x1; /*! * Engine driver device can use a triple-buffer (3 number of periods instead of the usual 2). * @see ENGINE_OPTION_AUDIO_NUM_PERIODS */ static const uint ENGINE_DRIVER_DEVICE_CAN_TRIPLE_BUFFER = 0x2; /*! * Engine driver device can change buffer-size on the fly. * @see ENGINE_OPTION_AUDIO_BUFFER_SIZE */ static const uint ENGINE_DRIVER_DEVICE_VARIABLE_BUFFER_SIZE = 0x4; /*! * Engine driver device can change sample-rate on the fly. * @see ENGINE_OPTION_AUDIO_SAMPLE_RATE */ static const uint ENGINE_DRIVER_DEVICE_VARIABLE_SAMPLE_RATE = 0x8; /** @} */ /* ------------------------------------------------------------------------------------------------------------ * Plugin Hints */ /*! * @defgroup PluginHints Plugin Hints * * Various plugin hints. * @see CarlaPlugin::getHints() and carla_get_plugin_info() * @{ */ /*! * Plugin is a bridge. * This hint is required because "bridge" itself is not a plugin type. */ static const uint PLUGIN_IS_BRIDGE = 0x001; /*! * Plugin is hard real-time safe. */ static const uint PLUGIN_IS_RTSAFE = 0x002; /*! * Plugin is a synth (produces sound). */ static const uint PLUGIN_IS_SYNTH = 0x004; /*! * Plugin has its own custom UI. * @see CarlaPlugin::showCustomUI() and carla_show_custom_ui() */ static const uint PLUGIN_HAS_CUSTOM_UI = 0x008; /*! * Plugin can use internal Dry/Wet control. */ static const uint PLUGIN_CAN_DRYWET = 0x010; /*! * Plugin can use internal Volume control. */ static const uint PLUGIN_CAN_VOLUME = 0x020; /*! * Plugin can use internal (Stereo) Balance controls. */ static const uint PLUGIN_CAN_BALANCE = 0x040; /*! * Plugin can use internal (Mono) Panning control. */ static const uint PLUGIN_CAN_PANNING = 0x080; /*! * Plugin needs a constant, fixed-size audio buffer. */ static const uint PLUGIN_NEEDS_FIXED_BUFFERS = 0x100; /*! * Plugin needs to receive all UI events in the main thread. */ static const uint PLUGIN_NEEDS_UI_MAIN_THREAD = 0x200; /*! * Plugin uses 1 program per MIDI channel. * @note: Only used in some internal plugins and sf2 files. */ static const uint PLUGIN_USES_MULTI_PROGS = 0x400; /*! * Plugin can make use of inline display API. */ static const uint PLUGIN_HAS_INLINE_DISPLAY = 0x800; /*! * Plugin has its own custom UI which can be embed into another Window. * @see CarlaPlugin::embedCustomUI() and carla_embed_custom_ui() * @note This is very experimental and subject to change at this point */ static const uint PLUGIN_HAS_CUSTOM_EMBED_UI = 0x1000; /** @} */ /* ------------------------------------------------------------------------------------------------------------ * Plugin Options */ /*! * @defgroup PluginOptions Plugin Options * * Various plugin options. * @note Do not modify these values, as they are saved as-is in project files. * @see CarlaPlugin::getOptionsAvailable(), CarlaPlugin::getOptionsEnabled(), carla_get_plugin_info() and carla_set_option() * @{ */ /*! * Use constant/fixed-size audio buffers. */ static const uint PLUGIN_OPTION_FIXED_BUFFERS = 0x001; /*! * Force mono plugin as stereo. */ static const uint PLUGIN_OPTION_FORCE_STEREO = 0x002; /*! * Map MIDI programs to plugin programs. */ static const uint PLUGIN_OPTION_MAP_PROGRAM_CHANGES = 0x004; /*! * Use chunks to save and restore data instead of parameter values. */ static const uint PLUGIN_OPTION_USE_CHUNKS = 0x008; /*! * Send MIDI control change events. */ static const uint PLUGIN_OPTION_SEND_CONTROL_CHANGES = 0x010; /*! * Send MIDI channel pressure events. */ static const uint PLUGIN_OPTION_SEND_CHANNEL_PRESSURE = 0x020; /*! * Send MIDI note after-touch events. */ static const uint PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH = 0x040; /*! * Send MIDI pitch-bend events. */ static const uint PLUGIN_OPTION_SEND_PITCHBEND = 0x080; /*! * Send MIDI all-sounds/notes-off events, single note-offs otherwise. */ static const uint PLUGIN_OPTION_SEND_ALL_SOUND_OFF = 0x100; /*! * Send MIDI bank/program changes. * @note: This option conflicts with PLUGIN_OPTION_MAP_PROGRAM_CHANGES and cannot be used at the same time. */ static const uint PLUGIN_OPTION_SEND_PROGRAM_CHANGES = 0x200; /*! * Skip sending MIDI note events. * This if off-by-default as a way to keep backwards compatibility. * We always want notes enabled by default, not the contrary. */ static const uint PLUGIN_OPTION_SKIP_SENDING_NOTES = 0x400; /*! * Special flag to indicate that plugin options are not yet set. * This flag exists because 0x0 as an option value is a valid one, so we need something else to indicate "null-ness". */ static const uint PLUGIN_OPTIONS_NULL = 0x10000; /** @} */ /* ------------------------------------------------------------------------------------------------------------ * Audio Port Hints */ /*! * @defgroup AudioPortHints Audio Port Hints * * Various audio port hints. * @see CarlaPlugin::getAudioPortHints() and carla_get_audio_port_hints() * @{ */ /*! * Audio port should be used as sidechan. */ static const uint AUDIO_PORT_IS_SIDECHAIN = 0x1; /** @} */ /* ------------------------------------------------------------------------------------------------------------ * Parameter Hints */ /*! * @defgroup ParameterHints Parameter Hints * * Various parameter hints. * @see CarlaPlugin::getParameterData() and carla_get_parameter_data() * @{ */ /*! * Parameter value is boolean. * It's always at either minimum or maximum value. */ static const uint PARAMETER_IS_BOOLEAN = 0x001; /*! * Parameter value is integer. */ static const uint PARAMETER_IS_INTEGER = 0x002; /*! * Parameter value is logarithmic. */ static const uint PARAMETER_IS_LOGARITHMIC = 0x004; /*! * Parameter is enabled. * It can be viewed, changed and stored. */ static const uint PARAMETER_IS_ENABLED = 0x010; /*! * Parameter is automatable (real-time safe). */ static const uint PARAMETER_IS_AUTOMATABLE = 0x020; // for backwards compatibility static const uint PARAMETER_IS_AUTOMABLE = PARAMETER_IS_AUTOMATABLE; /*! * Parameter is read-only. * It cannot be changed. */ static const uint PARAMETER_IS_READ_ONLY = 0x040; /*! * Parameter needs sample rate to work. * Value and ranges are multiplied by sample rate on usage and divided by sample rate on save. */ static const uint PARAMETER_USES_SAMPLERATE = 0x100; /*! * Parameter uses scale points to define internal values in a meaningful way. */ static const uint PARAMETER_USES_SCALEPOINTS = 0x200; /*! * Parameter uses custom text for displaying its value. * @see CarlaPlugin::getParameterText() and carla_get_parameter_text() */ static const uint PARAMETER_USES_CUSTOM_TEXT = 0x400; /*! * Parameter can be turned into a CV control. */ static const uint PARAMETER_CAN_BE_CV_CONTROLLED = 0x800; /*! * Parameter should not be saved as part of the project/session. * @note only valid for parameter inputs. */ static const uint PARAMETER_IS_NOT_SAVED = 0x1000; /** @} */ /* ------------------------------------------------------------------------------------------------------------ * Mapped Parameter Flags */ /*! * @defgroup MappedParameterFlags Mapped Parameter Flags * * Various flags for parameter mappings. * @see ParameterData::mappedFlags * @{ */ /*! * Parameter mapping uses delta value instead of full scale. * Only relevant for MIDI CC mappings. */ static const uint PARAMETER_MAPPING_MIDI_DELTA = 0x001; /** @} */ /* ------------------------------------------------------------------------------------------------------------ * Patchbay Port Hints */ /*! * @defgroup PatchbayPortHints Patchbay Port Hints * * Various patchbay port hints. * @{ */ /*! * Patchbay port is input. * When this hint is not set, port is assumed to be output. */ static const uint PATCHBAY_PORT_IS_INPUT = 0x01; /*! * Patchbay port is of Audio type. */ static const uint PATCHBAY_PORT_TYPE_AUDIO = 0x02; /*! * Patchbay port is of CV type (Control Voltage). */ static const uint PATCHBAY_PORT_TYPE_CV = 0x04; /*! * Patchbay port is of MIDI type. */ static const uint PATCHBAY_PORT_TYPE_MIDI = 0x08; /*! * Patchbay port is of OSC type. */ static const uint PATCHBAY_PORT_TYPE_OSC = 0x10; /** @} */ /* ------------------------------------------------------------------------------------------------------------ * Patchbay Port Group Hints */ /*! * @defgroup PatchbayPortGroupHints Patchbay Port Group Hints * * Various patchbay port group hints. * @{ */ /*! * Indicates that this group should be considered the "main" input. */ static const uint PATCHBAY_PORT_GROUP_MAIN_INPUT = 0x01; /*! * Indicates that this group should be considered the "main" output. */ static const uint PATCHBAY_PORT_GROUP_MAIN_OUTPUT = 0x02; /*! * A stereo port group, where the 1st port is left and the 2nd is right. */ static const uint PATCHBAY_PORT_GROUP_STEREO = 0x04; /*! * A mid-side stereo group, where the 1st port is center and the 2nd is side. */ static const uint PATCHBAY_PORT_GROUP_MID_SIDE = 0x08; /** @} */ /* ------------------------------------------------------------------------------------------------------------ * Custom Data Types */ /*! * @defgroup CustomDataTypes Custom Data Types * * These types define how the value in the CustomData struct is stored. * @see CustomData::type * @{ */ /*! * Boolean string type URI. * Only "true" and "false" are valid values. */ static const char* const CUSTOM_DATA_TYPE_BOOLEAN = "http://kxstudio.sf.net/ns/carla/boolean"; /*! * Chunk type URI. */ static const char* const CUSTOM_DATA_TYPE_CHUNK = "http://kxstudio.sf.net/ns/carla/chunk"; /*! * Path type URI. */ static const char* const CUSTOM_DATA_TYPE_PATH = "http://kxstudio.sf.net/ns/carla/path"; /*! * Property type URI. */ static const char* const CUSTOM_DATA_TYPE_PROPERTY = "http://kxstudio.sf.net/ns/carla/property"; /*! * String type URI. */ static const char* const CUSTOM_DATA_TYPE_STRING = "http://kxstudio.sf.net/ns/carla/string"; /** @} */ /* ------------------------------------------------------------------------------------------------------------ * Custom Data Keys */ /*! * @defgroup CustomDataKeys Custom Data Keys * * Pre-defined keys used internally in Carla. * @see CustomData::key * @{ */ /*! * UI position key. */ static const char* const CUSTOM_DATA_KEY_UI_POSITION = "CarlaUiPosition"; /*! * UI size key. */ static const char* const CUSTOM_DATA_KEY_UI_SIZE = "CarlaUiSize"; /*! * UI visible key. */ static const char* const CUSTOM_DATA_KEY_UI_VISIBLE = "CarlaUiVisible"; /** @} */ /* ------------------------------------------------------------------------------------------------------------ * Binary Type */ /*! * The binary type of a plugin. */ typedef enum { /*! * Null binary type. */ BINARY_NONE = 0, /*! * POSIX 32bit binary. */ BINARY_POSIX32 = 1, /*! * POSIX 64bit binary. */ BINARY_POSIX64 = 2, /*! * Windows 32bit binary. */ BINARY_WIN32 = 3, /*! * Windows 64bit binary. */ BINARY_WIN64 = 4, /*! * Other binary type. */ BINARY_OTHER = 5 } BinaryType; /* ------------------------------------------------------------------------------------------------------------ * File Type */ /*! * File type. */ typedef enum { /*! * Null file type. */ FILE_NONE = 0, /*! * Audio file. */ FILE_AUDIO = 1, /*! * MIDI file. */ FILE_MIDI = 2 } FileType; /* ------------------------------------------------------------------------------------------------------------ * Plugin Type */ /*! * Plugin type. * Some files are handled as if they were plugins. */ typedef enum { /*! * Null plugin type. */ PLUGIN_NONE = 0, /*! * Internal plugin. */ PLUGIN_INTERNAL = 1, /*! * LADSPA plugin. */ PLUGIN_LADSPA = 2, /*! * DSSI plugin. */ PLUGIN_DSSI = 3, /*! * LV2 plugin. */ PLUGIN_LV2 = 4, /*! * VST2 plugin. */ PLUGIN_VST2 = 5, /*! * VST3 plugin. * @note Windows and MacOS only */ PLUGIN_VST3 = 6, /*! * AU plugin. * @note MacOS only */ PLUGIN_AU = 7, /*! * DLS file. */ PLUGIN_DLS = 8, /*! * GIG file. */ PLUGIN_GIG = 9, /*! * SF2/3 file (SoundFont). */ PLUGIN_SF2 = 10, /*! * SFZ file. */ PLUGIN_SFZ = 11, /*! * JACK application. */ PLUGIN_JACK = 12, /*! * JSFX plugin. */ PLUGIN_JSFX = 13 } PluginType; /* ------------------------------------------------------------------------------------------------------------ * Plugin Category */ /*! * Plugin category, which describes the functionality of a plugin. */ typedef enum { /*! * Null plugin category. */ PLUGIN_CATEGORY_NONE = 0, /*! * A synthesizer or generator. */ PLUGIN_CATEGORY_SYNTH = 1, /*! * A delay or reverb. */ PLUGIN_CATEGORY_DELAY = 2, /*! * An equalizer. */ PLUGIN_CATEGORY_EQ = 3, /*! * A filter. */ PLUGIN_CATEGORY_FILTER = 4, /*! * A distortion plugin. */ PLUGIN_CATEGORY_DISTORTION = 5, /*! * A 'dynamic' plugin (amplifier, compressor, gate, etc). */ PLUGIN_CATEGORY_DYNAMICS = 6, /*! * A 'modulator' plugin (chorus, flanger, phaser, etc). */ PLUGIN_CATEGORY_MODULATOR = 7, /*! * An 'utility' plugin (analyzer, converter, mixer, etc). */ PLUGIN_CATEGORY_UTILITY = 8, /*! * Miscellaneous plugin (used to check if the plugin has a category). */ PLUGIN_CATEGORY_OTHER = 9 } PluginCategory; /* ------------------------------------------------------------------------------------------------------------ * Parameter Type */ /*! * Plugin parameter type. */ typedef enum { /*! * Null parameter type. */ PARAMETER_UNKNOWN = 0, /*! * Input parameter. */ PARAMETER_INPUT = 1, /*! * Output parameter. */ PARAMETER_OUTPUT = 2 } ParameterType; /* ------------------------------------------------------------------------------------------------------------ * Internal Parameter Index */ /*! * Special parameters used internally in Carla. * Plugins do not know about their existence. */ typedef enum { /*! * Null parameter. */ PARAMETER_NULL = -1, #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH /*! * Active parameter, boolean type. * Default is 'false'. */ PARAMETER_ACTIVE = -2, /*! * Dry/Wet parameter. * Range 0.0...1.0; default is 1.0. */ PARAMETER_DRYWET = -3, /*! * Volume parameter. * Range 0.0...1.27; default is 1.0. */ PARAMETER_VOLUME = -4, /*! * Stereo Balance-Left parameter. * Range -1.0...1.0; default is -1.0. */ PARAMETER_BALANCE_LEFT = -5, /*! * Stereo Balance-Right parameter. * Range -1.0...1.0; default is 1.0. */ PARAMETER_BALANCE_RIGHT = -6, /*! * Mono Panning parameter. * Range -1.0...1.0; default is 0.0. */ PARAMETER_PANNING = -7, /*! * MIDI Control channel, integer type. * Range -1...15 (-1 = off). */ PARAMETER_CTRL_CHANNEL = -8, #endif /*! * Max value, defined only for convenience. */ PARAMETER_MAX = -9 } InternalParameterIndex; /* ------------------------------------------------------------------------------------------------------------ * Special Mapped Control Index */ /*! * Specially designated mapped control indexes. * Values between 0 and 119 (0x77) are reserved for MIDI CC, which uses direct values. * @see ParameterData::mappedControlIndex */ typedef enum { /*! * Unused control index, meaning no mapping is enabled. */ CONTROL_INDEX_NONE = -1, /*! * CV control index, meaning the parameter is exposed as CV port. */ CONTROL_INDEX_CV = 130, /*! * Special value to indicate MIDI pitchbend. */ CONTROL_INDEX_MIDI_PITCHBEND = 131, /*! * Special value to indicate MIDI learn. */ CONTROL_INDEX_MIDI_LEARN = 132, /*! * Highest index allowed for mappings. */ CONTROL_INDEX_MAX_ALLOWED = CONTROL_INDEX_MIDI_LEARN } SpecialMappedControlIndex; /* ------------------------------------------------------------------------------------------------------------ * Engine Callback Opcode */ /*! * Engine callback opcodes. * Front-ends must never block indefinitely during a callback. * @see EngineCallbackFunc, CarlaEngine::setCallback() and carla_set_engine_callback() */ typedef enum { /*! * Debug. * This opcode is undefined and used only for testing purposes. */ ENGINE_CALLBACK_DEBUG = 0, /*! * A plugin has been added. * @a pluginId Plugin Id * @a value1 Plugin type * @a valueStr Plugin name */ ENGINE_CALLBACK_PLUGIN_ADDED = 1, /*! * A plugin has been removed. * @a pluginId Plugin Id */ ENGINE_CALLBACK_PLUGIN_REMOVED = 2, /*! * A plugin has been renamed. * @a pluginId Plugin Id * @a valueStr New plugin name */ ENGINE_CALLBACK_PLUGIN_RENAMED = 3, /*! * A plugin has become unavailable. * @a pluginId Plugin Id * @a valueStr Related error string */ ENGINE_CALLBACK_PLUGIN_UNAVAILABLE = 4, /*! * A parameter value has changed. * @a pluginId Plugin Id * @a value1 Parameter index * @a valuef New parameter value */ ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED = 5, /*! * A parameter default has changed. * @a pluginId Plugin Id * @a value1 Parameter index * @a valuef New default value */ ENGINE_CALLBACK_PARAMETER_DEFAULT_CHANGED = 6, #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH /*! * A parameter's mapped control index has changed. * @a pluginId Plugin Id * @a value1 Parameter index * @a value2 New control index */ ENGINE_CALLBACK_PARAMETER_MAPPED_CONTROL_INDEX_CHANGED = 7, /*! * A parameter's MIDI channel has changed. * @a pluginId Plugin Id * @a value1 Parameter index * @a value2 New MIDI channel */ ENGINE_CALLBACK_PARAMETER_MIDI_CHANNEL_CHANGED = 8, /*! * A plugin option has changed. * @a pluginId Plugin Id * @a value1 Option * @a value2 New on/off state (1 for on, 0 for off) * @see PluginOptions */ ENGINE_CALLBACK_OPTION_CHANGED = 9, #endif /*! * The current program of a plugin has changed. * @a pluginId Plugin Id * @a value1 New program index */ ENGINE_CALLBACK_PROGRAM_CHANGED = 10, /*! * The current MIDI program of a plugin has changed. * @a pluginId Plugin Id * @a value1 New MIDI program index */ ENGINE_CALLBACK_MIDI_PROGRAM_CHANGED = 11, /*! * A plugin's custom UI state has changed. * @a pluginId Plugin Id * @a value1 New state, as follows: * 0: UI is now hidden * 1: UI is now visible * -1: UI has crashed and should not be shown again */ ENGINE_CALLBACK_UI_STATE_CHANGED = 12, /*! * A note has been pressed. * @a pluginId Plugin Id * @a value1 Channel * @a value2 Note * @a value3 Velocity */ ENGINE_CALLBACK_NOTE_ON = 13, /*! * A note has been released. * @a pluginId Plugin Id * @a value1 Channel * @a value2 Note */ ENGINE_CALLBACK_NOTE_OFF = 14, /*! * A plugin needs update. * @a pluginId Plugin Id */ ENGINE_CALLBACK_UPDATE = 15, /*! * A plugin's data/information has changed. * @a pluginId Plugin Id */ ENGINE_CALLBACK_RELOAD_INFO = 16, /*! * A plugin's parameters have changed. * @a pluginId Plugin Id */ ENGINE_CALLBACK_RELOAD_PARAMETERS = 17, /*! * A plugin's programs have changed. * @a pluginId Plugin Id */ ENGINE_CALLBACK_RELOAD_PROGRAMS = 18, /*! * A plugin state has changed. * @a pluginId Plugin Id */ ENGINE_CALLBACK_RELOAD_ALL = 19, #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH /*! * A patchbay client has been added. * @a pluginId Client Id * @a value1 Client icon * @a value2 Plugin Id (-1 if not a plugin) * @a valueStr Client name * @see PatchbayIcon */ ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED = 20, /*! * A patchbay client has been removed. * @a pluginId Client Id */ ENGINE_CALLBACK_PATCHBAY_CLIENT_REMOVED = 21, /*! * A patchbay client has been renamed. * @a pluginId Client Id * @a valueStr New client name */ ENGINE_CALLBACK_PATCHBAY_CLIENT_RENAMED = 22, /*! * A patchbay client data has changed. * @a pluginId Client Id * @a value1 New icon * @a value2 New plugin Id (-1 if not a plugin) * @see PatchbayIcon */ ENGINE_CALLBACK_PATCHBAY_CLIENT_DATA_CHANGED = 23, /*! * A patchbay port has been added. * @a pluginId Client Id * @a value1 Port Id * @a value2 Port hints * @a value3 Port group Id (0 for none) * @a valueStr Port name * @see PatchbayPortHints */ ENGINE_CALLBACK_PATCHBAY_PORT_ADDED = 24, /*! * A patchbay port has been removed. * @a pluginId Client Id * @a value1 Port Id */ ENGINE_CALLBACK_PATCHBAY_PORT_REMOVED = 25, /*! * A patchbay port has changed (like the name or group Id). * @a pluginId Client Id * @a value1 Port Id * @a value2 Port hints * @a value3 Port group Id (0 for none) * @a valueStr Port name */ ENGINE_CALLBACK_PATCHBAY_PORT_CHANGED = 26, /*! * A patchbay connection has been added. * @a pluginId Connection Id * @a valueStr Out group and port plus in group and port, in "og:op:ig:ip" syntax. */ ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED = 27, /*! * A patchbay connection has been removed. * @a pluginId Connection Id */ ENGINE_CALLBACK_PATCHBAY_CONNECTION_REMOVED = 28, #endif /*! * Engine started. * @a pluginId How many plugins are known to be running * @a value1 Process mode * @a value2 Transport mode * @a value3 Buffer size * @a valuef Sample rate * @a valuestr Engine driver * @see EngineProcessMode * @see EngineTransportMode */ ENGINE_CALLBACK_ENGINE_STARTED = 29, /*! * Engine stopped. */ ENGINE_CALLBACK_ENGINE_STOPPED = 30, /*! * Engine process mode has changed. * @a value1 New process mode * @see EngineProcessMode */ ENGINE_CALLBACK_PROCESS_MODE_CHANGED = 31, /*! * Engine transport mode has changed. * @a value1 New transport mode * @a valueStr New transport features enabled * @see EngineTransportMode */ ENGINE_CALLBACK_TRANSPORT_MODE_CHANGED = 32, /*! * Engine buffer-size changed. * @a value1 New buffer size */ ENGINE_CALLBACK_BUFFER_SIZE_CHANGED = 33, /*! * Engine sample-rate changed. * @a valuef New sample rate */ ENGINE_CALLBACK_SAMPLE_RATE_CHANGED = 34, /*! * A cancelable action has been started or stopped. * @a pluginId Plugin Id the action relates to, -1 for none * @a value1 1 for action started, 0 for stopped * @a valueStr Action name */ ENGINE_CALLBACK_CANCELABLE_ACTION = 35, /*! * Project has finished loading. */ ENGINE_CALLBACK_PROJECT_LOAD_FINISHED = 36, /*! * NSM callback, to be handled by a frontend. * Frontend must call carla_nsm_ready() with opcode as parameter as a response * @a value1 NSM opcode * @a value2 Integer value * @a valueStr String value * @see NsmCallbackOpcode */ ENGINE_CALLBACK_NSM = 37, /*! * Idle frontend. * This is used by the engine during long operations that might block the frontend, * giving it the possibility to idle while the operation is still in place. */ ENGINE_CALLBACK_IDLE = 38, /*! * Show a message as information. * @a valueStr The message */ ENGINE_CALLBACK_INFO = 39, /*! * Show a message as an error. * @a valueStr The message */ ENGINE_CALLBACK_ERROR = 40, /*! * The engine has crashed or malfunctioned and will no longer work. */ ENGINE_CALLBACK_QUIT = 41, /*! * A plugin requested for its inline display to be redrawn. * @a pluginId Plugin Id to redraw */ ENGINE_CALLBACK_INLINE_DISPLAY_REDRAW = 42, /*! * A patchbay port group has been added. * @a pluginId Client Id * @a value1 Group Id (unique value within this client) * @a value2 Group hints * @a valueStr Group name * @see PatchbayPortGroupHints */ ENGINE_CALLBACK_PATCHBAY_PORT_GROUP_ADDED = 43, /*! * A patchbay port group has been removed. * @a pluginId Client Id * @a value1 Group Id */ ENGINE_CALLBACK_PATCHBAY_PORT_GROUP_REMOVED = 44, /*! * A patchbay port group has changed. * @a pluginId Client Id * @a value1 Group Id * @a value2 Group hints * @a valueStr Group name * @see PatchbayPortGroupHints */ ENGINE_CALLBACK_PATCHBAY_PORT_GROUP_CHANGED = 45, /*! * A parameter's mapped range has changed. * @a pluginId Plugin Id * @a value1 Parameter index * @a valueStr New mapped range as "%f:%f" syntax */ ENGINE_CALLBACK_PARAMETER_MAPPED_RANGE_CHANGED = 46, /*! * A patchbay client position has changed. * @a pluginId Client Id * @a value1 X position 1 * @a value2 Y position 1 * @a value3 X position 2 * @a valuef Y position 2 */ ENGINE_CALLBACK_PATCHBAY_CLIENT_POSITION_CHANGED = 47, /*! * A plugin embed UI has been resized. * @a pluginId Plugin Id to resize * @a value1 New width * @a value2 New height */ ENGINE_CALLBACK_EMBED_UI_RESIZED = 48 } EngineCallbackOpcode; /* ------------------------------------------------------------------------------------------------------------ * NSM Callback Opcode */ /*! * NSM callback opcodes. * @see ENGINE_CALLBACK_NSM */ typedef enum { /*! * NSM is available and initialized. */ NSM_CALLBACK_INIT = 0, /*! * Error from NSM side. * @a valueInt Error code * @a valueStr Error string */ NSM_CALLBACK_ERROR = 1, /*! * Announce message. * @a valueInt SM Flags (WIP, to be defined) * @a valueStr SM Name */ NSM_CALLBACK_ANNOUNCE = 2, /*! * Open message. * @a valueStr Project filename */ NSM_CALLBACK_OPEN = 3, /*! * Save message. */ NSM_CALLBACK_SAVE = 4, /*! * Session-is-loaded message. */ NSM_CALLBACK_SESSION_IS_LOADED = 5, /*! * Show-optional-gui message. */ NSM_CALLBACK_SHOW_OPTIONAL_GUI = 6, /*! * Hide-optional-gui message. */ NSM_CALLBACK_HIDE_OPTIONAL_GUI = 7, /*! * Set client name id message. */ NSM_CALLBACK_SET_CLIENT_NAME_ID = 8 } NsmCallbackOpcode; /* ------------------------------------------------------------------------------------------------------------ * Engine Option */ /*! * Engine options. * @see CarlaEngine::getOptions(), CarlaEngine::setOption() and carla_set_engine_option() */ typedef enum { /*! * Debug. * This option is undefined and used only for testing purposes. */ ENGINE_OPTION_DEBUG = 0, /*! * Set the engine processing mode. * Default is ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS on Linux and ENGINE_PROCESS_MODE_PATCHBAY for all other OSes. * @see EngineProcessMode */ ENGINE_OPTION_PROCESS_MODE = 1, /*! * Set the engine transport mode. * Default is ENGINE_TRANSPORT_MODE_JACK on Linux and ENGINE_TRANSPORT_MODE_INTERNAL for all other OSes. * @see EngineTransportMode */ ENGINE_OPTION_TRANSPORT_MODE = 2, /*! * Force mono plugins as stereo, by running 2 instances at the same time. * Default is false, but always true when process mode is ENGINE_PROCESS_MODE_CONTINUOUS_RACK. * @note Not supported by all plugins * @see PLUGIN_OPTION_FORCE_STEREO */ ENGINE_OPTION_FORCE_STEREO = 3, /*! * Use plugin bridges whenever possible. * Default is no, EXPERIMENTAL. */ ENGINE_OPTION_PREFER_PLUGIN_BRIDGES = 4, /*! * Use UI bridges whenever possible, otherwise UIs will be directly handled in the main backend thread. * Default is yes. */ ENGINE_OPTION_PREFER_UI_BRIDGES = 5, /*! * Make custom plugin UIs always-on-top. * Default is yes. */ ENGINE_OPTION_UIS_ALWAYS_ON_TOP = 6, /*! * Maximum number of parameters allowed. * Default is MAX_DEFAULT_PARAMETERS. */ ENGINE_OPTION_MAX_PARAMETERS = 7, /*! * Reset Xrun counter after project load. */ ENGINE_OPTION_RESET_XRUNS = 8, /*! * Timeout value for how much to wait for UI bridges to respond, in milliseconds. * Default is 4000 (4 seconds). */ ENGINE_OPTION_UI_BRIDGES_TIMEOUT = 9, /*! * Audio buffer size. * Default is 512. */ ENGINE_OPTION_AUDIO_BUFFER_SIZE = 10, /*! * Audio sample rate. * Default is 44100. */ ENGINE_OPTION_AUDIO_SAMPLE_RATE = 11, /*! * Wherever to use 3 audio periods instead of the default 2. * Default is false. */ ENGINE_OPTION_AUDIO_TRIPLE_BUFFER = 12, /*! * Audio driver. * Default depends on platform. */ ENGINE_OPTION_AUDIO_DRIVER = 13, /*! * Audio device (within a driver). * Default unset. */ ENGINE_OPTION_AUDIO_DEVICE = 14, #ifndef BUILD_BRIDGE /*! * Wherever to enable OSC support in the engine. */ ENGINE_OPTION_OSC_ENABLED = 15, /*! * The network TCP port to use for OSC. * A value of 0 means use a random port. * A value of < 0 means to not enable the TCP port for OSC. * @note Valid ports begin at 1024 and end at 32767 (inclusive) */ ENGINE_OPTION_OSC_PORT_TCP = 16, /*! * The network UDP port to use for OSC. * A value of 0 means use a random port. * A value of < 0 means to not enable the UDP port for OSC. * @note Disabling this option prevents DSSI UIs from working! * @note Valid ports begin at 1024 and end at 32767 (inclusive) */ ENGINE_OPTION_OSC_PORT_UDP = 17, #endif /*! * Set path used for a specific file type. * Uses value as the file format, valueStr as actual path. */ ENGINE_OPTION_FILE_PATH = 18, /*! * Set path used for a specific plugin type. * Uses value as the plugin format, valueStr as actual path. * @see PluginType */ ENGINE_OPTION_PLUGIN_PATH = 19, /*! * Set path to the binary files. * Default unset. * @note Must be set for plugin and UI bridges to work */ ENGINE_OPTION_PATH_BINARIES = 20, /*! * Set path to the resource files. * Default unset. * @note Must be set for some internal plugins to work */ ENGINE_OPTION_PATH_RESOURCES = 21, /*! * Prevent bad plugin and UI behaviour. * @note: Linux only */ ENGINE_OPTION_PREVENT_BAD_BEHAVIOUR = 22, /*! * Set background color used in the frontend, so backend can do the same for plugin UIs. */ ENGINE_OPTION_FRONTEND_BACKGROUND_COLOR = 23, /*! * Set foreground color used in the frontend, so backend can do the same for plugin UIs. */ ENGINE_OPTION_FRONTEND_FOREGROUND_COLOR = 24, /*! * Set UI scaling used in the frontend, so backend can do the same for plugin UIs. */ ENGINE_OPTION_FRONTEND_UI_SCALE = 25, /*! * Set frontend winId, used to define as parent window for plugin UIs. */ ENGINE_OPTION_FRONTEND_WIN_ID = 26, #if !defined(BUILD_BRIDGE_ALTERNATIVE_ARCH) && !defined(CARLA_OS_WIN) /*! * Set path to wine executable. */ ENGINE_OPTION_WINE_EXECUTABLE = 27, /*! * Enable automatic wineprefix detection. */ ENGINE_OPTION_WINE_AUTO_PREFIX = 28, /*! * Fallback wineprefix to use if automatic detection fails or is disabled, and WINEPREFIX is not set. */ ENGINE_OPTION_WINE_FALLBACK_PREFIX = 29, /*! * Enable realtime priority for Wine application and server threads. */ ENGINE_OPTION_WINE_RT_PRIO_ENABLED = 30, /*! * Base realtime priority for Wine threads. */ ENGINE_OPTION_WINE_BASE_RT_PRIO = 31, /*! * Wine server realtime priority. */ ENGINE_OPTION_WINE_SERVER_RT_PRIO = 32, #endif #ifndef BUILD_BRIDGE /*! * Capture console output into debug callbacks. */ ENGINE_OPTION_DEBUG_CONSOLE_OUTPUT = 33, #endif /*! * A prefix to give to all plugin clients created by Carla. * Mostly useful for JACK multi-client mode. * @note MUST include at least one "." (dot). */ ENGINE_OPTION_CLIENT_NAME_PREFIX = 34, /*! * Treat loaded plugins as standalone (that is, there is no host UI to manage them) */ ENGINE_OPTION_PLUGINS_ARE_STANDALONE = 35 } EngineOption; /* ------------------------------------------------------------------------------------------------------------ * Engine Process Mode */ /*! * Engine process mode. * @see ENGINE_OPTION_PROCESS_MODE */ typedef enum { /*! * Single client mode. * Inputs and outputs are added dynamically as needed by plugins. */ ENGINE_PROCESS_MODE_SINGLE_CLIENT = 0, /*! * Multiple client mode. * It has 1 master client + 1 client per plugin. */ ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS = 1, /*! * Single client, 'rack' mode. * Processes plugins in order of Id, with forced stereo always on. */ ENGINE_PROCESS_MODE_CONTINUOUS_RACK = 2, /*! * Single client, 'patchbay' mode. */ ENGINE_PROCESS_MODE_PATCHBAY = 3, /*! * Special mode, used in plugin-bridges only. */ ENGINE_PROCESS_MODE_BRIDGE = 4 } EngineProcessMode; /* ------------------------------------------------------------------------------------------------------------ * Engine Transport Mode */ /*! * Engine transport mode. * @see ENGINE_OPTION_TRANSPORT_MODE */ typedef enum { /*! * No transport. */ ENGINE_TRANSPORT_MODE_DISABLED = 0, /*! * Internal transport mode. */ ENGINE_TRANSPORT_MODE_INTERNAL = 1, /*! * Transport from JACK. * Only available if driver name is "JACK". */ ENGINE_TRANSPORT_MODE_JACK = 2, /*! * Transport from host, used when Carla is a plugin. */ ENGINE_TRANSPORT_MODE_PLUGIN = 3, /*! * Special mode, used in plugin-bridges only. */ ENGINE_TRANSPORT_MODE_BRIDGE = 4 } EngineTransportMode; /* ------------------------------------------------------------------------------------------------------------ * File Callback Opcode */ /*! * File callback opcodes. * Front-ends must always block-wait for user input. * @see FileCallbackFunc, CarlaEngine::setFileCallback() and carla_set_file_callback() */ typedef enum { /*! * Debug. * This opcode is undefined and used only for testing purposes. */ FILE_CALLBACK_DEBUG = 0, /*! * Open file or folder. */ FILE_CALLBACK_OPEN = 1, /*! * Save file or folder. */ FILE_CALLBACK_SAVE = 2 } FileCallbackOpcode; /* ------------------------------------------------------------------------------------------------------------ * Patchbay Icon */ /*! * The icon of a patchbay client/group. */ enum PatchbayIcon { /*! * Generic application icon. * Used for all non-plugin clients that don't have a specific icon. */ PATCHBAY_ICON_APPLICATION = 0, /*! * Plugin icon. * Used for all plugin clients that don't have a specific icon. */ PATCHBAY_ICON_PLUGIN = 1, /*! * Hardware icon. * Used for hardware (audio or MIDI) clients. */ PATCHBAY_ICON_HARDWARE = 2, /*! * Carla icon. * Used for the main app. */ PATCHBAY_ICON_CARLA = 3, /*! * DISTRHO icon. * Used for DISTRHO based plugins. */ PATCHBAY_ICON_DISTRHO = 4, /*! * File icon. * Used for file type plugins (like SF2 snd SFZ). */ PATCHBAY_ICON_FILE = 5 }; /* ------------------------------------------------------------------------------------------------------------ * Carla Backend API (C stuff) */ /*! * Engine callback function. * Front-ends must never block indefinitely during a callback. * @see EngineCallbackOpcode, CarlaEngine::setCallback() and carla_set_engine_callback() */ typedef void (*EngineCallbackFunc)(void* ptr, EngineCallbackOpcode action, uint pluginId, int value1, int value2, int value3, float valuef, const char* valueStr); /*! * File callback function. * @see FileCallbackOpcode */ typedef const char* (*FileCallbackFunc)(void* ptr, FileCallbackOpcode action, bool isDir, const char* title, const char* filter); /*! * Parameter data. */ typedef struct { /*! * This parameter type. */ ParameterType type; /*! * This parameter hints. * @see ParameterHints */ uint hints; /*! * Index as seen by Carla. */ int32_t index; /*! * Real index as seen by plugins. */ int32_t rindex; /*! * Currently mapped MIDI channel. * Counts from 0 to 15. */ uint8_t midiChannel; /*! * Currently mapped index. * @see SpecialMappedControlIndex */ int16_t mappedControlIndex; /*! * Minimum value that this parameter maps to. */ float mappedMinimum; /*! * Maximum value that this parameter maps to. */ float mappedMaximum; /*! * Flags related to the current mapping of this parameter. * @see MappedParameterFlags */ uint mappedFlags; } ParameterData; /*! * Parameter ranges. */ typedef struct _ParameterRanges { /*! * Default value. */ float def; /*! * Minimum value. */ float min; /*! * Maximum value. */ float max; /*! * Regular, single step value. */ float step; /*! * Small step value. */ float stepSmall; /*! * Large step value. */ float stepLarge; #ifdef __cplusplus /*! * Fix the default value within range. */ void fixDefault() noexcept { fixValue(def); } /*! * Fix a value within range. */ void fixValue(float& value) const noexcept { if (value < min) value = min; else if (value > max) value = max; } /*! * Get a fixed value within range. */ const float& getFixedValue(const float& value) const noexcept { if (value <= min) return min; if (value >= max) return max; return value; } /*! * Get a value normalized to 0.0<->1.0. */ float getNormalizedValue(const float& value) const noexcept { const float normValue((value - min) / (max - min)); if (normValue <= 0.0f) return 0.0f; if (normValue >= 1.0f) return 1.0f; return normValue; } /*! * Get a value normalized to 0.0<->1.0, fixed within range. */ float getFixedAndNormalizedValue(const float& value) const noexcept { if (value <= min) return 0.0f; if (value >= max) return 1.0f; const float normValue((value - min) / (max - min)); if (normValue <= 0.0f) return 0.0f; if (normValue >= 1.0f) return 1.0f; return normValue; } /*! * Get a proper value previously normalized to 0.0<->1.0. */ float getUnnormalizedValue(const float& value) const noexcept { if (value <= 0.0f) return min; if (value >= 1.0f) return max; return value * (max - min) + min; } /*! * Get a logarithmic value previously normalized to 0.0<->1.0. */ float getUnnormalizedLogValue(const float& value) const noexcept { if (value <= 0.0f) return min; if (value >= 1.0f) return max; float rmin = min; if (std::abs(min) < std::numeric_limits::epsilon()) rmin = 0.00001f; return rmin * std::pow(max/rmin, value); } #endif /* __cplusplus */ } ParameterRanges; /*! * MIDI Program data. */ typedef struct { /*! * MIDI bank. */ uint32_t bank; /*! * MIDI program. */ uint32_t program; /*! * MIDI program name. */ const char* name; } MidiProgramData; /*! * Custom data, used for saving key:value 'dictionaries'. */ typedef struct _CustomData { /*! * Value type, in URI form. * @see CustomDataTypes */ const char* type; /*! * Key. * @see CustomDataKeys */ const char* key; /*! * Value. */ const char* value; #ifdef __cplusplus /*! * Check if valid. */ bool isValid() const noexcept { if (type == nullptr || type[0] == '\0') return false; if (key == nullptr || key [0] == '\0') return false; if (value == nullptr) return false; return true; } #endif /* __cplusplus */ } CustomData; /*! * Engine driver device information. */ typedef struct { /*! * This driver device hints. * @see EngineDriverHints */ uint hints; /*! * Available buffer sizes. * Terminated with 0. */ const uint32_t* bufferSizes; /*! * Available sample rates. * Terminated with 0.0. */ const double* sampleRates; } EngineDriverDeviceInfo; /** @} */ #ifdef __cplusplus /* Forward declarations of commonly used Carla classes */ class CarlaEngine; class CarlaEngineClient; class CarlaEngineCVSourcePorts; class CarlaPlugin; /* End namespace */ CARLA_BACKEND_END_NAMESPACE #endif #endif /* CARLA_BACKEND_H_INCLUDED */ Carla-2.4.2/source/backend/CarlaEngine.hpp000066400000000000000000001065421420416754300203270ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2022 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #ifndef CARLA_ENGINE_HPP_INCLUDED #define CARLA_ENGINE_HPP_INCLUDED #include "CarlaBackend.h" #include "CarlaPluginPtr.hpp" namespace water { class MemoryOutputStream; class XmlDocument; } CARLA_BACKEND_START_NAMESPACE // ----------------------------------------------------------------------- /*! * @defgroup CarlaEngineAPI Carla Engine API * * The Carla Engine API. * @{ */ /*! * The type of an engine. */ enum EngineType { /*! * Null engine type. */ kEngineTypeNull = 0, /*! * JACK engine type. * Provides all processing modes. */ kEngineTypeJack = 1, /*! * JUCE engine type, used to provide Native Audio and MIDI support. */ kEngineTypeJuce = 2, /*! * RtAudio engine type, used to provide Native Audio and MIDI support. */ kEngineTypeRtAudio = 3, /*! * Plugin engine type, used to export the engine as a plugin. */ kEngineTypePlugin = 4, /*! * Bridge engine type, used in BridgePlugin class. */ kEngineTypeBridge = 5, /*! * Dummy engine type, does not send audio or MIDI anywhere. */ kEngineTypeDummy = 6 }; /*! * The type of an engine port. */ enum EnginePortType { /*! * Null port type. */ kEnginePortTypeNull = 0, /*! * Audio port type. * @see CarlaEngineAudioPort */ kEnginePortTypeAudio = 1, /*! * CV port type. * @see CarlaEngineCVPort */ kEnginePortTypeCV = 2, /*! * Event port type (Control or MIDI). * @see CarlaEngineEventPort */ kEnginePortTypeEvent = 3 }; /*! * The type of an engine event. */ enum EngineEventType { /*! * Null port type. */ kEngineEventTypeNull = 0, /*! * Control event type. * @see EngineControlEvent */ kEngineEventTypeControl = 1, /*! * MIDI event type. * @see EngineMidiEvent */ kEngineEventTypeMidi = 2 }; /*! * The type of an engine control event. */ enum EngineControlEventType { /*! * Null event type. */ kEngineControlEventTypeNull = 0, /*! * Parameter event type. * @note Value uses a normalized range of 0.0f<->1.0f. */ kEngineControlEventTypeParameter = 1, /*! * MIDI Bank event type. */ kEngineControlEventTypeMidiBank = 2, /*! * MIDI Program change event type. */ kEngineControlEventTypeMidiProgram = 3, /*! * All sound off event type. */ kEngineControlEventTypeAllSoundOff = 4, /*! * All notes off event type. */ kEngineControlEventTypeAllNotesOff = 5 }; /*! * Special value for EngineEvent channel field, indicating a non-midi parameter event. */ static const uint8_t kEngineEventNonMidiChannel = 0x30; // ----------------------------------------------------------------------- /*! * Engine control event. */ struct CARLA_API EngineControlEvent { EngineControlEventType type; //!< Control-Event type. uint16_t param; //!< Parameter Id, midi bank or midi program. int8_t midiValue; //!< Raw midi value, >= 0 if applicable, -1 otherwise. float normalizedValue; //!< Parameter value, normalized to 0.0f<->1.0f. bool handled; //!< Indicates that event was handled/received at least once. /*! * Convert this control event into MIDI data. * Returns size. */ uint8_t convertToMidiData(uint8_t channel, uint8_t data[3]) const noexcept; }; /*! * Engine MIDI event. */ struct CARLA_API EngineMidiEvent { static const uint8_t kDataSize = 4; //!< Size of internal data uint8_t port; //!< Port offset (usually 0) uint8_t size; //!< Number of bytes used /*! * MIDI data, without channel bit. * If size > kDataSize, dataExt is used (otherwise NULL). */ uint8_t data[kDataSize]; const uint8_t* dataExt; }; /*! * Engine event. */ struct CARLA_API EngineEvent { EngineEventType type; //!< Event Type; either Control or MIDI uint32_t time; //!< Time offset in frames uint8_t channel; //!< Channel, used for MIDI-related events /*! * Event specific data. */ union { EngineControlEvent ctrl; EngineMidiEvent midi; }; /*! * Fill this event from MIDI data. */ void fillFromMidiData(uint8_t size, const uint8_t* data, uint8_t midiPortOffset) noexcept; }; // ----------------------------------------------------------------------- /*! * Engine options. */ struct CARLA_API EngineOptions { EngineProcessMode processMode; EngineTransportMode transportMode; const char* transportExtra; bool forceStereo; bool resetXruns; bool preferPluginBridges; bool preferUiBridges; bool uisAlwaysOnTop; bool pluginsAreStandalone; uint bgColor; uint fgColor; float uiScale; uint maxParameters; uint uiBridgesTimeout; uint audioBufferSize; uint audioSampleRate; bool audioTripleBuffer; const char* audioDriver; const char* audioDevice; #ifndef BUILD_BRIDGE bool oscEnabled; int oscPortTCP; int oscPortUDP; #endif const char* pathAudio; const char* pathMIDI; const char* pathLADSPA; const char* pathDSSI; const char* pathLV2; const char* pathVST2; const char* pathVST3; const char* pathSF2; const char* pathSFZ; const char* pathJSFX; const char* binaryDir; const char* resourceDir; const char* clientNamePrefix; bool preventBadBehaviour; uintptr_t frontendWinId; #ifndef CARLA_OS_WIN struct Wine { const char* executable; bool autoPrefix; const char* fallbackPrefix; bool rtPrio; int baseRtPrio; int serverRtPrio; Wine() noexcept; ~Wine() noexcept; CARLA_DECLARE_NON_COPY_STRUCT(Wine) } wine; #endif #ifndef DOXYGEN EngineOptions() noexcept; ~EngineOptions() noexcept; CARLA_DECLARE_NON_COPY_STRUCT(EngineOptions) #endif }; /*! * Engine BBT Time information. */ struct CARLA_API EngineTimeInfoBBT { bool valid; int32_t bar; //!< current bar int32_t beat; //!< current beat-within-bar double tick; //!< current tick-within-beat double barStartTick; float beatsPerBar; //!< time signature "numerator" float beatType; //!< time signature "denominator" double ticksPerBeat; double beatsPerMinute; /*! * Clear. */ void clear() noexcept; #ifndef DOXYGEN EngineTimeInfoBBT() noexcept; EngineTimeInfoBBT(const EngineTimeInfoBBT&) noexcept; #endif }; /*! * Engine Time information. */ struct CARLA_API EngineTimeInfo { bool playing; uint64_t frame; uint64_t usecs; EngineTimeInfoBBT bbt; /*! * Clear. */ void clear() noexcept; #ifndef DOXYGEN EngineTimeInfo() noexcept; EngineTimeInfo(const EngineTimeInfo&) noexcept; EngineTimeInfo& operator=(const EngineTimeInfo&) noexcept; // fast comparison, doesn't check all values bool compareIgnoringRollingFrames(const EngineTimeInfo& timeInfo, uint32_t maxFrames) const noexcept; // quick operator, doesn't check all values bool operator==(const EngineTimeInfo& timeInfo) const noexcept; bool operator!=(const EngineTimeInfo& timeInfo) const noexcept; #endif }; // ----------------------------------------------------------------------- /*! * Carla Engine port (Abstract). * This is the base class for all Carla Engine ports. */ class CARLA_API CarlaEnginePort { protected: /*! * The constructor, protected. * All constructor parameters are constant and will never change in the lifetime of the port. */ CarlaEnginePort(const CarlaEngineClient& client, bool isInputPort, uint32_t indexOffset) noexcept; public: /*! * The destructor. */ virtual ~CarlaEnginePort() noexcept; /*! * Get the type of the port, as provided by the respective subclasses. */ virtual EnginePortType getType() const noexcept = 0; /*! * Initialize the port's internal buffer. */ virtual void initBuffer() noexcept = 0; /*! * Check if this port is an input. */ inline bool isInput() const noexcept { return kIsInput; } /*! * Get the index offset as passed in the constructor. */ inline uint32_t getIndexOffset() const noexcept { return kIndexOffset; } /*! * Get this ports' engine client. */ inline const CarlaEngineClient& getEngineClient() const noexcept { return kClient; } /*! * Set a meta-data property on this port. */ virtual void setMetaData(const char* key, const char* value, const char* type); #ifndef DOXYGEN protected: const CarlaEngineClient& kClient; const bool kIsInput; const uint32_t kIndexOffset; CARLA_DECLARE_NON_COPY_CLASS(CarlaEnginePort) #endif }; /*! * Carla Engine Audio port. */ class CARLA_API CarlaEngineAudioPort : public CarlaEnginePort { public: /*! * The constructor. * All constructor parameters are constant and will never change in the lifetime of the port. */ CarlaEngineAudioPort(const CarlaEngineClient& client, bool isInputPort, uint32_t indexOffset) noexcept; /*! * The destructor. */ ~CarlaEngineAudioPort() noexcept override; /*! * Get the type of the port, in this case kEnginePortTypeAudio. */ inline EnginePortType getType() const noexcept final { return kEnginePortTypeAudio; } /*! * Initialize the port's internal buffer. */ void initBuffer() noexcept override; /*! * Direct access to the port's audio buffer. * May be null. */ inline float* getBuffer() const noexcept { return fBuffer; } #ifndef DOXYGEN protected: float* fBuffer; CARLA_DECLARE_NON_COPY_CLASS(CarlaEngineAudioPort) #endif }; /*! * Carla Engine CV port. */ class CARLA_API CarlaEngineCVPort : public CarlaEnginePort { public: /*! * The constructor. * All constructor parameters are constant and will never change in the lifetime of the port. */ CarlaEngineCVPort(const CarlaEngineClient& client, bool isInputPort, uint32_t indexOffset) noexcept; /*! * The destructor. */ ~CarlaEngineCVPort() noexcept override; /*! * Get the type of the port, in this case kEnginePortTypeCV. */ inline EnginePortType getType() const noexcept final { return kEnginePortTypeCV; } /*! * Initialize the port's internal buffer. */ void initBuffer() noexcept override; /*! * Direct access to the port's CV buffer. * May be null. */ inline float* getBuffer() const noexcept { return fBuffer; } /*! * Get min/max range for this CV port. */ inline void getRange(float& min, float& max) const noexcept { min = fMinimum; max = fMaximum; } /*! * Set min/max range for this CV port. */ void setRange(float min, float max) noexcept; #ifndef DOXYGEN protected: float* fBuffer; float fMinimum, fMaximum; CARLA_DECLARE_NON_COPY_CLASS(CarlaEngineCVPort) #endif }; /*! * Carla Engine Event port. */ class CARLA_API CarlaEngineEventPort : public CarlaEnginePort { public: /*! * The constructor. * All constructor parameters are constant and will never change in the lifetime of the port. */ CarlaEngineEventPort(const CarlaEngineClient& client, bool isInputPort, uint32_t indexOffset) noexcept; /*! * The destructor. */ ~CarlaEngineEventPort() noexcept override; /*! * Get the type of the port, in this case kEnginePortTypeEvent. */ inline EnginePortType getType() const noexcept final { return kEnginePortTypeEvent; } /*! * Initialize the port's internal buffer for @a engine. */ void initBuffer() noexcept override; /*! * Get the number of events present in the buffer. * @note You must only call this for input ports. */ virtual uint32_t getEventCount() const noexcept; /*! * Get the event at @a index. * @note You must only call this for input ports. */ virtual EngineEvent& getEvent(uint32_t index) const noexcept; /*! * Get the event at @a index, faster unchecked version. */ virtual EngineEvent& getEventUnchecked(uint32_t index) const noexcept; /*! * Write a control event into the buffer. * @note You must only call this for output ports. */ bool writeControlEvent(uint32_t time, uint8_t channel, const EngineControlEvent& ctrl) noexcept; /*! * Write a control event into the buffer. * Arguments are the same as in the EngineControlEvent struct. * @note You must only call this for output ports. */ virtual bool writeControlEvent(uint32_t time, uint8_t channel, EngineControlEventType type, uint16_t param, int8_t midiValue, float normalizedValue) noexcept; /*! * Write a MIDI event into the buffer. * @note You must only call this for output ports. */ bool writeMidiEvent(uint32_t time, uint8_t size, const uint8_t* data) noexcept; /*! * Write a MIDI event into the buffer. * @note You must only call this for output ports. */ bool writeMidiEvent(uint32_t time, uint8_t channel, const EngineMidiEvent& midi) noexcept; /*! * Write a MIDI event into the buffer. * Arguments are the same as in the EngineMidiEvent struct. * @note You must only call this for output ports. */ virtual bool writeMidiEvent(uint32_t time, uint8_t channel, uint8_t size, const uint8_t* data) noexcept; #ifndef DOXYGEN protected: const EngineProcessMode kProcessMode; EngineEvent* fBuffer; friend class CarlaPluginInstance; friend class CarlaEngineCVSourcePorts; CARLA_DECLARE_NON_COPY_CLASS(CarlaEngineEventPort) #endif }; // ----------------------------------------------------------------------- /*! * Carla Engine Meta CV Port. * FIXME needs a better name... */ class CARLA_API CarlaEngineCVSourcePorts { public: /*! * The destructor. */ virtual ~CarlaEngineCVSourcePorts(); /*! * Add a CV port as a source of events. */ virtual bool addCVSource(CarlaEngineCVPort* port, uint32_t portIndexOffset, bool reconfigureNow); /*! * Remove a CV port as a source of events. */ virtual bool removeCVSource(uint32_t portIndexOffset); /*! * Get events and add them to an event port. * FIXME needs a better name... */ virtual void initPortBuffers(const float* const* buffers, uint32_t frames, bool sampleAccurate, CarlaEngineEventPort* eventPort); /*! * Set value range for a CV port. */ bool setCVSourceRange(uint32_t portIndexOffset, float minimum, float maximum); /*! * Destroy all ports. */ void cleanup(); #ifndef DOXYGEN protected: /** @internal */ struct ProtectedData; ProtectedData* const pData; /*! * The constructor, protected. */ CarlaEngineCVSourcePorts(); CARLA_DECLARE_NON_COPY_CLASS(CarlaEngineCVSourcePorts) #endif }; // ----------------------------------------------------------------------- /*! * Carla Engine Client. * Each plugin requires one client from the engine (created via CarlaEngine::addClient()). * @note This is a virtual class, some engine types provide custom functionality. */ class CARLA_API CarlaEngineClient { public: /*! * The destructor. */ virtual ~CarlaEngineClient() noexcept; /*! * Activate this client. * Client must be deactivated before calling this function. */ virtual void activate() noexcept; /*! * Deactivate this client. * Client must be activated before calling this function. */ virtual void deactivate(bool willClose) noexcept; /*! * Check if the client is activated. */ virtual bool isActive() const noexcept; /*! * Check if the client is ok. * Plugins will refuse to instantiate if this returns false. * @note This is always true in rack and patchbay processing modes. */ virtual bool isOk() const noexcept; /*! * Get the current latency, in samples. */ virtual uint32_t getLatency() const noexcept; /*! * Change the client's latency. */ virtual void setLatency(uint32_t samples) noexcept; /*! * Add a new port of type @a portType. * @note This function does nothing in rack processing mode since ports are static there. */ virtual CarlaEnginePort* addPort(EnginePortType portType, const char* name, bool isInput, uint32_t indexOffset); /*! * Remove a previously added port via addPort(). */ virtual bool removePort(EnginePortType portType, const char* name, bool isInput); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH /*! * Create an instance of CV source ports. * Must be called only once per client. */ virtual CarlaEngineCVSourcePorts* createCVSourcePorts(); #endif /*! * Get this client's engine. */ const CarlaEngine& getEngine() const noexcept; /*! * Get the engine's process mode. */ EngineProcessMode getProcessMode() const noexcept; /*! * Get port count for a type and mode. */ uint getPortCount(EnginePortType portType, bool isInput) const noexcept; /*! * Get an audio port name. */ const char* getAudioPortName(bool isInput, uint index) const noexcept; /*! * Get a CV port name. */ const char* getCVPortName(bool isInput, uint index) const noexcept; /*! * Get an event port name. */ const char* getEventPortName(bool isInput, uint index) const noexcept; #ifndef DOXYGEN protected: /** @internal */ struct ProtectedData; ProtectedData* const pData; /*! * The constructor, protected. */ CarlaEngineClient(ProtectedData* pData); CARLA_DECLARE_NON_COPY_CLASS(CarlaEngineClient) #endif }; // ----------------------------------------------------------------------- /*! * Carla Engine. * @note This is a virtual class for all available engine types available in Carla. */ class CARLA_API CarlaEngine { protected: /*! * The constructor, protected. * @note This only initializes engine data, it doesn't actually start the engine. */ CarlaEngine(); public: /*! * The destructor. * The engine must have been closed before this happens. */ virtual ~CarlaEngine(); // ------------------------------------------------------------------- // Static calls /*! * Get the number of available engine drivers. */ static uint getDriverCount(); /*! * Get the name of the engine driver at @a index. */ static const char* getDriverName(uint index); /*! * Get the device names of the driver at @a index. */ static const char* const* getDriverDeviceNames(uint index); /*! * Get device information about the driver at @a index and name @a driverName. */ static const EngineDriverDeviceInfo* getDriverDeviceInfo(uint index, const char* driverName); /*! * Show a device custom control panel. * @see ENGINE_DRIVER_DEVICE_HAS_CONTROL_PANEL */ static bool showDriverDeviceControlPanel(uint index, const char* deviceName); /*! * Create a new engine, using driver @a driverName. * Returned value must be deleted when no longer needed. * @note This only initializes engine data, it doesn't actually start the engine. */ static CarlaEngine* newDriverByName(const char* driverName); // ------------------------------------------------------------------- // Constant values /*! * Maximum client name size. */ virtual uint getMaxClientNameSize() const noexcept; /*! * Maximum port name size. */ virtual uint getMaxPortNameSize() const noexcept; /*! * Current number of plugins loaded. */ uint getCurrentPluginCount() const noexcept; /*! * Maximum number of loadable plugins allowed. * This function returns 0 if engine is not started. */ uint getMaxPluginNumber() const noexcept; // ------------------------------------------------------------------- // Virtual, per-engine type calls /*! * Initialize/start the engine, using @a clientName. * When the engine is initialized, you need to call idle() at regular intervals. */ virtual bool init(const char* clientName) = 0; /*! * Close engine. * This function always closes the engine even if it returns false. * In other words, even when something goes wrong when closing the engine it still be closed nonetheless. */ virtual bool close(); /*! * Idle engine. */ virtual void idle() noexcept; /*! * Check if engine is running. */ virtual bool isRunning() const noexcept = 0; /*! * Check if engine is running offline (aka freewheel mode). */ virtual bool isOffline() const noexcept = 0; /*! * Check if engine runs on a constant buffer size value. * Default implementation returns true. */ virtual bool usesConstantBufferSize() const noexcept; /*! * Get engine type. */ virtual EngineType getType() const noexcept = 0; /*! * Get the currently used driver name. */ virtual const char* getCurrentDriverName() const noexcept = 0; /*! * Add new engine client. * @note This function must only be called within a plugin class. */ virtual CarlaEngineClient* addClient(CarlaPluginPtr plugin); /*! * Get the current CPU load estimated by the engine. */ virtual float getDSPLoad() const noexcept; /*! * Get the total number of xruns so far. */ virtual uint32_t getTotalXruns() const noexcept; /*! * Clear the xrun count. */ virtual void clearXruns() const noexcept; /*! * Dynamically change buffer size and/or sample rate while engine is running. * @see ENGINE_DRIVER_DEVICE_VARIABLE_BUFFER_SIZE * @see ENGINE_DRIVER_DEVICE_VARIABLE_SAMPLE_RATE */ virtual bool setBufferSizeAndSampleRate(uint bufferSize, double sampleRate); /*! * Show the custom control panel for the current engine device. * @see ENGINE_DRIVER_DEVICE_HAS_CONTROL_PANEL */ virtual bool showDeviceControlPanel() const noexcept; // ------------------------------------------------------------------- // Plugin management /*! * Add new plugin. * @see ENGINE_CALLBACK_PLUGIN_ADDED */ bool addPlugin(BinaryType btype, PluginType ptype, const char* filename, const char* name, const char* label, int64_t uniqueId, const void* extra, uint options = PLUGIN_OPTIONS_NULL); /*! * Add new plugin, using native binary type. * @see ENGINE_CALLBACK_PLUGIN_ADDED */ bool addPlugin(PluginType ptype, const char* filename, const char* name, const char* label, int64_t uniqueId, const void* extra); /*! * Remove plugin with id @a id. * @see ENGINE_CALLBACK_PLUGIN_REMOVED */ virtual bool removePlugin(uint id); /*! * Remove all plugins. */ bool removeAllPlugins(); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH /*! * Rename plugin with id @a id to @a newName. * Returns the new name, or null if the operation failed. * Returned variable must be deleted if non-null. * @see ENGINE_CALLBACK_PLUGIN_RENAMED */ virtual bool renamePlugin(uint id, const char* newName); /*! * Clone plugin with id @a id. */ bool clonePlugin(uint id); /*! * Prepare replace of plugin with id @a id. * The next call to addPlugin() will use this id, replacing the selected plugin. * @note This function requires addPlugin() to be called afterwards, as soon as possible. */ bool replacePlugin(uint id) noexcept; /*! * Switch plugins with id @a idA and @a idB. */ virtual bool switchPlugins(uint idA, uint idB) noexcept; #endif /*! * Set a plugin's parameter in drag/touch mode. * Usually happens from a UI when the user is moving a parameter with a mouse or similar input. * * @param parameterId The parameter to update * @param touch The new state for the parameter */ virtual void touchPluginParameter(uint id, uint32_t parameterId, bool touch) noexcept; /*! * Get plugin with id @a id. */ CarlaPluginPtr getPlugin(uint id) const noexcept; /*! * Get plugin with id @a id, faster unchecked version. */ CarlaPluginPtr getPluginUnchecked(uint id) const noexcept; /*! * Get a unique plugin name within the engine. * Returned variable must be deleted if non-null. */ const char* getUniquePluginName(const char* name) const; // ------------------------------------------------------------------- // Project management /*! * Load a file of any type. * This will try to load a generic file as a plugin, * either by direct handling (SF2 and SFZ) or by using an internal plugin (like Audio and MIDI). */ bool loadFile(const char* filename); /*! * Load a project file. * @note Already loaded plugins are not removed; call removeAllPlugins() first if needed. */ bool loadProject(const char* filename, bool setAsCurrentProject); /*! * Save current project to a file. */ bool saveProject(const char* filename, bool setAsCurrentProject); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH /*! * Get the currently set project folder. * @note Valid for both standalone and plugin versions. */ virtual const char* getCurrentProjectFolder() const noexcept; /*! * Get the currently set project filename. * @note Valid only for both standalone version. */ const char* getCurrentProjectFilename() const noexcept; /*! * Clear the currently set project filename. */ void clearCurrentProjectFilename() noexcept; #endif // ------------------------------------------------------------------- // Information (base) /*! * Get the current buffer size. */ uint32_t getBufferSize() const noexcept; /*! * Get the current sample rate. */ double getSampleRate() const noexcept; /*! * Get the current engine name. */ const char* getName() const noexcept; /*! * Get the current engine process mode. */ EngineProcessMode getProccessMode() const noexcept; /*! * Get the current engine options (read-only). */ const EngineOptions& getOptions() const noexcept; /*! * Get the current Time information (read-only). */ virtual EngineTimeInfo getTimeInfo() const noexcept; // ------------------------------------------------------------------- // Information (peaks) /*! * Get a plugin's peak values. * @note not thread-safe if pluginId == MAIN_CARLA_PLUGIN_ID */ const float* getPeaks(uint pluginId) const noexcept; /*! * Get a plugin's input peak value. */ float getInputPeak(uint pluginId, bool isLeft) const noexcept; /*! * Get a plugin's output peak value. */ float getOutputPeak(uint pluginId, bool isLeft) const noexcept; // ------------------------------------------------------------------- // Callback /*! * Call the main engine callback, if set. * May be called by plugins. */ virtual void callback(bool sendHost, bool sendOSC, EngineCallbackOpcode action, uint pluginId, int value1, int value2, int value3, float valuef, const char* valueStr) noexcept; /*! * Set the main engine callback to @a func. */ void setCallback(EngineCallbackFunc func, void* ptr) noexcept; // ------------------------------------------------------------------- // Callback /*! * Call the file callback, if set. * May be called by plugins. */ virtual const char* runFileCallback(FileCallbackOpcode action, bool isDir, const char* title, const char* filter) noexcept; /*! * Set the file callback to @a func. */ void setFileCallback(FileCallbackFunc func, void* ptr) noexcept; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // ------------------------------------------------------------------- // Patchbay /*! * Connect two patchbay ports. */ virtual bool patchbayConnect(bool external, uint groupA, uint portA, uint groupB, uint portB); /*! * Remove a patchbay connection. */ virtual bool patchbayDisconnect(bool external, uint connectionId); /*! * Set the position of a group. */ virtual bool patchbaySetGroupPos(bool sendHost, bool sendOSC, bool external, uint groupId, int x1, int y1, int x2, int y2); /*! * Force the engine to resend all patchbay clients, ports and connections again. */ virtual bool patchbayRefresh(bool sendHost, bool sendOSC, bool external); #endif // ------------------------------------------------------------------- // Transport /*! * Start playback of the engine transport. */ virtual void transportPlay() noexcept; /*! * Pause the engine transport. */ virtual void transportPause() noexcept; /*! * Set the engine transport bpm to @a bpm. */ virtual void transportBPM(double bpm) noexcept; /*! * Relocate the engine transport to @a frames. */ virtual void transportRelocate(uint64_t frame) noexcept; // ------------------------------------------------------------------- // Error handling /*! * Get last error. */ const char* getLastError() const noexcept; /*! * Set last error. */ void setLastError(const char* error) const noexcept; // ------------------------------------------------------------------- // Misc /*! * Check if the engine is about to close. */ bool isAboutToClose() const noexcept; /*! * Tell the engine it's about to close. * This is used to prevent the engine thread(s) from reactivating. * Returns true if there's no pending engine events. */ bool setAboutToClose() noexcept; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH /*! * TODO. */ bool isLoadingProject() const noexcept; #endif /*! * Tell the engine to stop the current cancelable action. * @see ENGINE_CALLBACK_CANCELABLE_ACTION */ void setActionCanceled(bool canceled) noexcept; /*! * Check wherever the last cancelable action was indeed canceled or not. */ bool wasActionCanceled() const noexcept; // ------------------------------------------------------------------- // Options /*! * Set the engine option @a option to @a value or @a valueStr. */ virtual void setOption(EngineOption option, int value, const char* valueStr) noexcept; // ------------------------------------------------------------------- // OSC Stuff #ifndef BUILD_BRIDGE /*! * Check if OSC controller is registered. */ bool isOscControlRegistered() const noexcept; /*! * Get OSC TCP server path. */ const char* getOscServerPathTCP() const noexcept; /*! * Get OSC UDP server path. */ const char* getOscServerPathUDP() const noexcept; #endif // ------------------------------------------------------------------- protected: /*! * Internal data, for CarlaEngine subclasses and friends. */ struct ProtectedData; ProtectedData* const pData; /*! * Some internal classes read directly from pData or call protected functions. */ friend class CarlaEngineEventPort; friend class CarlaEngineOsc; friend class CarlaEngineThread; friend class CarlaPluginInstance; friend class EngineInternalGraph; friend class PendingRtEventsRunner; friend class ScopedActionLock; friend class ScopedEngineEnvironmentLocker; friend class ScopedThreadStopper; friend class PatchbayGraph; friend struct ExternalGraph; friend struct RackGraph; // ------------------------------------------------------------------- // Internal stuff /*! * Report to all plugins about buffer size change. */ void bufferSizeChanged(uint32_t newBufferSize); /*! * Report to all plugins about sample rate change. * This is not supported on all plugin types, in which case they will have to be re-initiated. */ void sampleRateChanged(double newSampleRate); /*! * Report to all plugins about offline mode change. */ void offlineModeChanged(bool isOffline); /*! * Set a plugin (stereo) peak values. * @note RT call */ void setPluginPeaksRT(uint pluginId, float const inPeaks[2], float const outPeaks[2]) noexcept; public: /*! * Common save project function for main engine and plugin. */ void saveProjectInternal(water::MemoryOutputStream& outStrm) const; /*! * Common load project function for main engine and plugin. */ bool loadProjectInternal(water::XmlDocument& xmlDoc, bool alwaysLoadConnections); protected: // ------------------------------------------------------------------- // Helper functions /*! * Return internal data, needed for EventPorts when used in Rack, Patchbay and Bridge modes. * @note RT call */ EngineEvent* getInternalEventBuffer(bool isInput) const noexcept; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // ------------------------------------------------------------------- // Patchbay stuff /*! * Virtual functions for handling patchbay state. * Do not free returned data. */ struct PatchbayPosition { const char* name; int x1, y1, x2, y2, pluginId; bool dealloc; }; virtual const char* const* getPatchbayConnections(bool external) const; virtual const PatchbayPosition* getPatchbayPositions(bool external, uint& count) const; virtual void restorePatchbayConnection(bool external, const char* sourcePort, const char* targetPort); // returns true if plugin name mapping found, ppos.name updated to its converted name virtual bool restorePatchbayGroupPosition(bool external, PatchbayPosition& ppos); /*! * Virtual functions for handling external graph ports. */ virtual bool connectExternalGraphPort(uint, uint, const char*); virtual bool disconnectExternalGraphPort(uint, uint, const char*); #endif // ------------------------------------------------------------------- CARLA_DECLARE_NON_COPY_CLASS(CarlaEngine) }; /**@}*/ // ----------------------------------------------------------------------- CARLA_BACKEND_END_NAMESPACE #endif // CARLA_ENGINE_HPP_INCLUDED Carla-2.4.2/source/backend/CarlaEngineInit.hpp000066400000000000000000000045271420416754300211530ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2020 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #ifndef CARLA_ENGINE_INIT_HPP_INCLUDED #define CARLA_ENGINE_INIT_HPP_INCLUDED #include "CarlaEngine.hpp" CARLA_BACKEND_START_NAMESPACE // ------------------------------------------------------------------- /*! * Native audio APIs. */ enum AudioApi { AUDIO_API_NULL, // common AUDIO_API_JACK, AUDIO_API_OSS, // linux AUDIO_API_ALSA, AUDIO_API_PULSEAUDIO, // macos AUDIO_API_COREAUDIO, // windows AUDIO_API_ASIO, AUDIO_API_DIRECTSOUND, AUDIO_API_WASAPI }; // ------------------------------------------------------------------- // Engine initializers namespace EngineInit { // JACK CarlaEngine* newJack(); // Dummy CarlaEngine* newDummy(); // Bridge CarlaEngine* newBridge(const char* audioPoolBaseName, const char* rtClientBaseName, const char* nonRtClientBaseName, const char* nonRtServerBaseName); // Juce CarlaEngine* newJuce(AudioApi api); uint getJuceApiCount(); const char* getJuceApiName(uint index); const char* const* getJuceApiDeviceNames(uint index); const EngineDriverDeviceInfo* getJuceDeviceInfo(uint index, const char* deviceName); bool showJuceDeviceControlPanel(uint index, const char* deviceName); // RtAudio CarlaEngine* newRtAudio(AudioApi api); uint getRtAudioApiCount(); const char* getRtAudioApiName(uint index); const char* const* getRtAudioApiDeviceNames(uint index); const EngineDriverDeviceInfo* getRtAudioDeviceInfo(uint index, const char* deviceName); } // ----------------------------------------------------------------------- CARLA_BACKEND_END_NAMESPACE #endif // CARLA_ENGINE_INIT_HPP_INCLUDED Carla-2.4.2/source/backend/CarlaHost.h000066400000000000000000001061441420416754300174750ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2022 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #ifndef CARLA_HOST_H_INCLUDED #define CARLA_HOST_H_INCLUDED #include "CarlaBackend.h" #ifdef __cplusplus using CARLA_BACKEND_NAMESPACE::BinaryType; using CARLA_BACKEND_NAMESPACE::PluginType; using CARLA_BACKEND_NAMESPACE::PluginCategory; using CARLA_BACKEND_NAMESPACE::InternalParameterIndex; using CARLA_BACKEND_NAMESPACE::EngineCallbackOpcode; using CARLA_BACKEND_NAMESPACE::NsmCallbackOpcode; using CARLA_BACKEND_NAMESPACE::EngineOption; using CARLA_BACKEND_NAMESPACE::EngineProcessMode; using CARLA_BACKEND_NAMESPACE::EngineTransportMode; using CARLA_BACKEND_NAMESPACE::FileCallbackOpcode; using CARLA_BACKEND_NAMESPACE::EngineCallbackFunc; using CARLA_BACKEND_NAMESPACE::FileCallbackFunc; using CARLA_BACKEND_NAMESPACE::ParameterData; using CARLA_BACKEND_NAMESPACE::ParameterRanges; using CARLA_BACKEND_NAMESPACE::MidiProgramData; using CARLA_BACKEND_NAMESPACE::CustomData; using CARLA_BACKEND_NAMESPACE::EngineDriverDeviceInfo; using CARLA_BACKEND_NAMESPACE::CarlaEngine; using CARLA_BACKEND_NAMESPACE::CarlaEngineClient; using CARLA_BACKEND_NAMESPACE::CarlaPlugin; #endif /*! * @defgroup CarlaHostAPI Carla Host API * * The Carla Host API. * * This API makes it possible to use the Carla Backend in a standalone host application.. * * None of the returned values in this API calls need to be deleted or free'd. * When a function fails (returns false or NULL), use carla_get_last_error() to find out what went wrong. * @{ */ /* ------------------------------------------------------------------------------------------------------------ * Carla Host API (C stuff) */ /*! * Information about a loaded plugin. * @see carla_get_plugin_info() */ typedef struct _CarlaPluginInfo { /*! * Plugin type. */ PluginType type; /*! * Plugin category. */ PluginCategory category; /*! * Plugin hints. * @see PluginHints */ uint hints; /*! * Plugin options available for the user to change. * @see PluginOptions */ uint optionsAvailable; /*! * Plugin options currently enabled. * Some options are enabled but not available, which means they will always be on. * @see PluginOptions */ uint optionsEnabled; /*! * Plugin filename. * This can be the plugin binary or resource file. */ const char* filename; /*! * Plugin name. * This name is unique within a Carla instance. * @see carla_get_real_plugin_name() */ const char* name; /*! * Plugin label or URI. */ const char* label; /*! * Plugin author/maker. */ const char* maker; /*! * Plugin copyright/license. */ const char* copyright; /*! * Icon name for this plugin, in lowercase. * Default is "plugin". */ const char* iconName; /*! * Plugin unique Id. * This Id is dependent on the plugin type and may sometimes be 0. */ int64_t uniqueId; #ifdef __cplusplus /*! * C++ constructor and destructor. */ CARLA_API _CarlaPluginInfo() noexcept; CARLA_API ~_CarlaPluginInfo() noexcept; CARLA_DECLARE_NON_COPY_STRUCT(_CarlaPluginInfo) #endif } CarlaPluginInfo; /*! * Port count information, used for Audio and MIDI ports and parameters. * @see carla_get_audio_port_count_info() * @see carla_get_midi_port_count_info() * @see carla_get_parameter_count_info() */ typedef struct _CarlaPortCountInfo { /*! * Number of inputs. */ uint32_t ins; /*! * Number of outputs. */ uint32_t outs; } CarlaPortCountInfo; /*! * Parameter information. * @see carla_get_parameter_info() */ typedef struct _CarlaParameterInfo { /*! * Parameter name. */ const char* name; /*! * Parameter symbol. */ const char* symbol; /*! * Parameter unit. */ const char* unit; /*! * Parameter comment / documentation. */ const char* comment; /*! * Parameter group name, prefixed by a unique symbol and ":". */ const char* groupName; /*! * Number of scale points. * @see CarlaScalePointInfo */ uint32_t scalePointCount; #ifdef __cplusplus /*! * C++ constructor and destructor. */ CARLA_API _CarlaParameterInfo() noexcept; CARLA_API ~_CarlaParameterInfo() noexcept; CARLA_DECLARE_NON_COPY_STRUCT(_CarlaParameterInfo) #endif } CarlaParameterInfo; /*! * Parameter scale point information. * @see carla_get_parameter_scalepoint_info() */ typedef struct _CarlaScalePointInfo { /*! * Scale point value. */ float value; /*! * Scale point label. */ const char* label; #ifdef __cplusplus /*! * C++ constructor and destructor. */ CARLA_API _CarlaScalePointInfo() noexcept; CARLA_API ~_CarlaScalePointInfo() noexcept; CARLA_DECLARE_NON_COPY_STRUCT(_CarlaScalePointInfo) #endif } CarlaScalePointInfo; /*! * Transport information. * @see carla_get_transport_info() */ typedef struct _CarlaTransportInfo { /*! * Wherever transport is playing. */ bool playing; /*! * Current transport frame. */ uint64_t frame; /*! * Bar. */ int32_t bar; /*! * Beat. */ int32_t beat; /*! * Tick. */ int32_t tick; /*! * Beats per minute. */ double bpm; #ifdef __cplusplus /*! * C++ constructor. */ CARLA_API _CarlaTransportInfo() noexcept; /*! * Clear struct contents. */ CARLA_API void clear() noexcept; #endif } CarlaTransportInfo; /*! * Runtime engine information. */ typedef struct _CarlaRuntimeEngineInfo { /*! * DSP load. */ float load; /*! * Number of xruns. */ uint32_t xruns; } CarlaRuntimeEngineInfo; /*! * Runtime engine driver device information. */ typedef struct { /*! * Name of the driver device. */ const char* name; /*! * This driver device hints. * @see EngineDriverHints */ uint hints; /*! * Current buffer size. */ uint bufferSize; /*! * Available buffer sizes. * Terminated with 0. */ const uint32_t* bufferSizes; /*! * Current sample rate. */ double sampleRate; /*! * Available sample rates. * Terminated with 0.0. */ const double* sampleRates; } CarlaRuntimeEngineDriverDeviceInfo; /*! * Image data for LV2 inline display API. * raw image pixmap format is ARGB32, */ typedef struct { unsigned char* data; int width; int height; int stride; } CarlaInlineDisplayImageSurface; /*! Opaque data type for CarlaHost API calls */ typedef struct _CarlaHostHandle* CarlaHostHandle; /* ------------------------------------------------------------------------------------------------------------ * Carla Host API (C functions) */ /*! * Get how many engine drivers are available. */ CARLA_EXPORT uint carla_get_engine_driver_count(void); /*! * Get an engine driver name. * @param index Driver index */ CARLA_EXPORT const char* carla_get_engine_driver_name(uint index); /*! * Get the device names of an engine driver. * @param index Driver index */ CARLA_EXPORT const char* const* carla_get_engine_driver_device_names(uint index); /*! * Get information about a device driver. * @param index Driver index * @param name Device name */ CARLA_EXPORT const EngineDriverDeviceInfo* carla_get_engine_driver_device_info(uint index, const char* name); /*! * Show a device custom control panel. * @see ENGINE_DRIVER_DEVICE_HAS_CONTROL_PANEL * @param index Driver index * @param name Device name */ CARLA_EXPORT bool carla_show_engine_driver_device_control_panel(uint index, const char* name); /*! * Create a global host handle for standalone application usage. */ CARLA_EXPORT CarlaHostHandle carla_standalone_host_init(void); #ifdef __cplusplus /*! * Get the currently used engine, may be NULL. * @note C++ only */ CARLA_EXPORT CarlaEngine* carla_get_engine_from_handle(CarlaHostHandle handle); #endif /*! * Initialize the engine. * Make sure to call carla_engine_idle() at regular intervals afterwards. * @param driverName Driver to use * @param clientName Engine master client name */ CARLA_EXPORT bool carla_engine_init(CarlaHostHandle handle, const char* driverName, const char* clientName); #ifdef BUILD_BRIDGE /*! * Initialize the engine in bridged mode. */ CARLA_EXPORT bool carla_engine_init_bridge(CarlaHostHandle handle, const char audioBaseName[6+1], const char rtClientBaseName[6+1], const char nonRtClientBaseName[6+1], const char nonRtServerBaseName[6+1], const char* clientName); #endif /*! * Close the engine. * This function always closes the engine even if it returns false. * In other words, even when something goes wrong when closing the engine it still be closed nonetheless. */ CARLA_EXPORT bool carla_engine_close(CarlaHostHandle handle); /*! * Idle the engine. * Do not call this if the engine is not running. */ CARLA_EXPORT void carla_engine_idle(CarlaHostHandle handle); /*! * Check if the engine is running. */ CARLA_EXPORT bool carla_is_engine_running(CarlaHostHandle handle); /*! * Get information about the currently running engine. */ CARLA_EXPORT const CarlaRuntimeEngineInfo* carla_get_runtime_engine_info(CarlaHostHandle handle); #ifndef BUILD_BRIDGE /*! * Get information about the currently running engine driver device. */ CARLA_EXPORT const CarlaRuntimeEngineDriverDeviceInfo* carla_get_runtime_engine_driver_device_info(CarlaHostHandle handle); /*! * Dynamically change buffer size and/or sample rate while engine is running. * @see ENGINE_DRIVER_DEVICE_VARIABLE_BUFFER_SIZE * @see ENGINE_DRIVER_DEVICE_VARIABLE_SAMPLE_RATE */ CARLA_EXPORT bool carla_set_engine_buffer_size_and_sample_rate(CarlaHostHandle handle, uint bufferSize, double sampleRate); /*! * Show the custom control panel for the current engine device. * @see ENGINE_DRIVER_DEVICE_HAS_CONTROL_PANEL */ CARLA_EXPORT bool carla_show_engine_device_control_panel(CarlaHostHandle handle); #endif /*! * Clear the xrun count on the engine, so that the next time carla_get_runtime_engine_info() is called, it returns 0. */ CARLA_EXPORT void carla_clear_engine_xruns(CarlaHostHandle handle); /*! * Tell the engine to stop the current cancelable action. * @see ENGINE_CALLBACK_CANCELABLE_ACTION */ CARLA_EXPORT void carla_cancel_engine_action(CarlaHostHandle handle); /*! * Tell the engine it's about to close. * This is used to prevent the engine thread(s) from reactivating. * Returns true if there's no pending engine events. */ CARLA_EXPORT bool carla_set_engine_about_to_close(CarlaHostHandle handle); /*! * Set the engine callback function. * @param func Callback function * @param ptr Callback pointer */ CARLA_EXPORT void carla_set_engine_callback(CarlaHostHandle handle, EngineCallbackFunc func, void* ptr); /*! * Set an engine option. * @param option Option * @param value Value as number * @param valueStr Value as string */ CARLA_EXPORT void carla_set_engine_option(CarlaHostHandle handle, EngineOption option, int value, const char* valueStr); /*! * Set the file callback function. * @param func Callback function * @param ptr Callback pointer */ CARLA_EXPORT void carla_set_file_callback(CarlaHostHandle handle, FileCallbackFunc func, void* ptr); /*! * Load a file of any type. * This will try to load a generic file as a plugin, * either by direct handling (SF2 and SFZ) or by using an internal plugin (like Audio and MIDI). * @see carla_get_supported_file_extensions() */ CARLA_EXPORT bool carla_load_file(CarlaHostHandle handle, const char* filename); /*! * Load a Carla project file. * @note Currently loaded plugins are not removed; call carla_remove_all_plugins() first if needed. */ CARLA_EXPORT bool carla_load_project(CarlaHostHandle handle, const char* filename); /*! * Save current project to a file. */ CARLA_EXPORT bool carla_save_project(CarlaHostHandle handle, const char* filename); #ifndef BUILD_BRIDGE /*! * Get the currently set project folder. * @note Valid for both standalone and plugin versions. */ CARLA_EXPORT const char* carla_get_current_project_folder(CarlaHostHandle handle); /*! * Get the currently set project filename. * @note Valid only for both standalone version. */ CARLA_EXPORT const char* carla_get_current_project_filename(CarlaHostHandle handle); /*! * Clear the currently set project filename. */ CARLA_EXPORT void carla_clear_project_filename(CarlaHostHandle handle); /*! * Connect two patchbay ports. * @param groupIdA Output (source) group * @param portIdA Output (source) port * @param groupIdB Input (target) group * @param portIdB Input (target) port * @note The group corresponds to the client Id received in the engine callback * for ENGINE_CALLBACK_PATCHBAY_PORT_ADDED. * @see ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED */ CARLA_EXPORT bool carla_patchbay_connect(CarlaHostHandle handle, bool external, uint groupIdA, uint portIdA, uint groupIdB, uint portIdB); /*! * Disconnect two patchbay ports. * @param connectionId Connection Id * @see ENGINE_CALLBACK_PATCHBAY_CONNECTION_REMOVED */ CARLA_EXPORT bool carla_patchbay_disconnect(CarlaHostHandle handle, bool external, uint connectionId); /*! * Set the position of a group. * This is purely cached and saved in the project file, Carla backend does nothing with the value. * When loading a project, callbacks are used to inform of the previously saved positions. * @see ENGINE_CALLBACK_PATCHBAY_CLIENT_POSITION_CHANGED */ CARLA_EXPORT bool carla_patchbay_set_group_pos(CarlaHostHandle handle, bool external, uint groupId, int x1, int y1, int x2, int y2); /*! * Force the engine to resend all patchbay clients, ports and connections again. * @param external Wherever to show external/hardware ports instead of internal ones. * Only valid in patchbay engine mode, other modes will ignore this. */ CARLA_EXPORT bool carla_patchbay_refresh(CarlaHostHandle handle, bool external); /*! * Start playback of the engine transport. */ CARLA_EXPORT void carla_transport_play(CarlaHostHandle handle); /*! * Pause the engine transport. */ CARLA_EXPORT void carla_transport_pause(CarlaHostHandle handle); /*! * Set the engine transport bpm. */ CARLA_EXPORT void carla_transport_bpm(CarlaHostHandle handle, double bpm); /*! * Relocate the engine transport to a specific frame. */ CARLA_EXPORT void carla_transport_relocate(CarlaHostHandle handle, uint64_t frame); /*! * Get the current transport frame. */ CARLA_EXPORT uint64_t carla_get_current_transport_frame(CarlaHostHandle handle); /*! * Get the engine transport information. */ CARLA_EXPORT const CarlaTransportInfo* carla_get_transport_info(CarlaHostHandle handle); #endif /*! * Current number of plugins loaded. */ CARLA_EXPORT uint32_t carla_get_current_plugin_count(CarlaHostHandle handle); /*! * Maximum number of loadable plugins allowed. * Returns 0 if engine is not started. */ CARLA_EXPORT uint32_t carla_get_max_plugin_number(CarlaHostHandle handle); /*! * Add a new plugin. * If you don't know the binary type use the BINARY_NATIVE macro. * @param btype Binary type * @param ptype Plugin type * @param filename Filename, if applicable * @param name Name of the plugin, can be NULL * @param label Plugin label, if applicable * @param uniqueId Plugin unique Id, if applicable * @param extraPtr Extra pointer, defined per plugin type * @param options Initial plugin options */ CARLA_EXPORT bool carla_add_plugin(CarlaHostHandle handle, BinaryType btype, PluginType ptype, const char* filename, const char* name, const char* label, int64_t uniqueId, const void* extraPtr, uint options); /*! * Remove one plugin. * @param pluginId Plugin to remove. */ CARLA_EXPORT bool carla_remove_plugin(CarlaHostHandle handle, uint pluginId); /*! * Remove all plugins. */ CARLA_EXPORT bool carla_remove_all_plugins(CarlaHostHandle handle); #ifndef BUILD_BRIDGE /*! * Rename a plugin. * Returns the new name, or NULL if the operation failed. * @param pluginId Plugin to rename * @param newName New plugin name */ CARLA_EXPORT bool carla_rename_plugin(CarlaHostHandle handle, uint pluginId, const char* newName); /*! * Clone a plugin. * @param pluginId Plugin to clone */ CARLA_EXPORT bool carla_clone_plugin(CarlaHostHandle handle, uint pluginId); /*! * Prepare replace of a plugin. * The next call to carla_add_plugin() will use this id, replacing the current plugin. * @param pluginId Plugin to replace * @note This function requires carla_add_plugin() to be called afterwards *as soon as possible*. */ CARLA_EXPORT bool carla_replace_plugin(CarlaHostHandle handle, uint pluginId); /*! * Switch two plugins positions. * @param pluginIdA Plugin A * @param pluginIdB Plugin B */ CARLA_EXPORT bool carla_switch_plugins(CarlaHostHandle handle, uint pluginIdA, uint pluginIdB); #endif /*! * Load a plugin state. * @param pluginId Plugin * @param filename Path to plugin state * @see carla_save_plugin_state() */ CARLA_EXPORT bool carla_load_plugin_state(CarlaHostHandle handle, uint pluginId, const char* filename); /*! * Save a plugin state. * @param pluginId Plugin * @param filename Path to plugin state * @see carla_load_plugin_state() */ CARLA_EXPORT bool carla_save_plugin_state(CarlaHostHandle handle, uint pluginId, const char* filename); /*! * Export plugin as LV2. * @param pluginId Plugin * @param lv2path Path to lv2 plugin folder */ CARLA_EXPORT bool carla_export_plugin_lv2(CarlaHostHandle handle, uint pluginId, const char* lv2path); /*! * Get information from a plugin. * @param pluginId Plugin */ CARLA_EXPORT const CarlaPluginInfo* carla_get_plugin_info(CarlaHostHandle handle, uint pluginId); /*! * Get audio port count information from a plugin. * @param pluginId Plugin */ CARLA_EXPORT const CarlaPortCountInfo* carla_get_audio_port_count_info(CarlaHostHandle handle, uint pluginId); /*! * Get MIDI port count information from a plugin. * @param pluginId Plugin */ CARLA_EXPORT const CarlaPortCountInfo* carla_get_midi_port_count_info(CarlaHostHandle handle, uint pluginId); /*! * Get parameter count information from a plugin. * @param pluginId Plugin */ CARLA_EXPORT const CarlaPortCountInfo* carla_get_parameter_count_info(CarlaHostHandle handle, uint pluginId); /*! * Get hints about an audio port. * @param pluginId Plugin * @param isOutput Whether port is output, input otherwise * @param portIndex Port index, related to input or output */ CARLA_EXPORT uint carla_get_audio_port_hints(CarlaHostHandle handle, uint pluginId, bool isOutput, uint32_t portIndex); /*! * Get parameter information from a plugin. * @param pluginId Plugin * @param parameterId Parameter index * @see carla_get_parameter_count() */ CARLA_EXPORT const CarlaParameterInfo* carla_get_parameter_info(CarlaHostHandle handle, uint pluginId, uint32_t parameterId); /*! * Get parameter scale point information from a plugin. * @param pluginId Plugin * @param parameterId Parameter index * @param scalePointId Parameter scale-point index * @see CarlaParameterInfo::scalePointCount */ CARLA_EXPORT const CarlaScalePointInfo* carla_get_parameter_scalepoint_info(CarlaHostHandle handle, uint pluginId, uint32_t parameterId, uint32_t scalePointId); /*! * Get a plugin's parameter data. * @param pluginId Plugin * @param parameterId Parameter index * @see carla_get_parameter_count() */ CARLA_EXPORT const ParameterData* carla_get_parameter_data(CarlaHostHandle handle, uint pluginId, uint32_t parameterId); /*! * Get a plugin's parameter ranges. * @param pluginId Plugin * @param parameterId Parameter index * @see carla_get_parameter_count() */ CARLA_EXPORT const ParameterRanges* carla_get_parameter_ranges(CarlaHostHandle handle, uint pluginId, uint32_t parameterId); /*! * Get a plugin's MIDI program data. * @param pluginId Plugin * @param midiProgramId MIDI Program index * @see carla_get_midi_program_count() */ CARLA_EXPORT const MidiProgramData* carla_get_midi_program_data(CarlaHostHandle handle, uint pluginId, uint32_t midiProgramId); /*! * Get a plugin's custom data, using index. * @param pluginId Plugin * @param customDataId Custom data index * @see carla_get_custom_data_count() */ CARLA_EXPORT const CustomData* carla_get_custom_data(CarlaHostHandle handle, uint pluginId, uint32_t customDataId); /*! * Get a plugin's custom data value, using type and key. * @param pluginId Plugin * @param type Custom data type * @param key Custom data key * @see carla_get_custom_data_count() */ CARLA_EXPORT const char* carla_get_custom_data_value(CarlaHostHandle handle, uint pluginId, const char* type, const char* key); /*! * Get a plugin's chunk data. * @param pluginId Plugin * @see PLUGIN_OPTION_USE_CHUNKS and carla_set_chunk_data() */ CARLA_EXPORT const char* carla_get_chunk_data(CarlaHostHandle handle, uint pluginId); /*! * Get how many parameters a plugin has. * @param pluginId Plugin */ CARLA_EXPORT uint32_t carla_get_parameter_count(CarlaHostHandle handle, uint pluginId); /*! * Get how many programs a plugin has. * @param pluginId Plugin * @see carla_get_program_name() */ CARLA_EXPORT uint32_t carla_get_program_count(CarlaHostHandle handle, uint pluginId); /*! * Get how many MIDI programs a plugin has. * @param pluginId Plugin * @see carla_get_midi_program_name() and carla_get_midi_program_data() */ CARLA_EXPORT uint32_t carla_get_midi_program_count(CarlaHostHandle handle, uint pluginId); /*! * Get how many custom data sets a plugin has. * @param pluginId Plugin * @see carla_get_custom_data() */ CARLA_EXPORT uint32_t carla_get_custom_data_count(CarlaHostHandle handle, uint pluginId); /*! * Get a plugin's parameter text (custom display of internal values). * @param pluginId Plugin * @param parameterId Parameter index * @see PARAMETER_USES_CUSTOM_TEXT */ CARLA_EXPORT const char* carla_get_parameter_text(CarlaHostHandle handle, uint pluginId, uint32_t parameterId); /*! * Get a plugin's program name. * @param pluginId Plugin * @param programId Program index * @see carla_get_program_count() */ CARLA_EXPORT const char* carla_get_program_name(CarlaHostHandle handle, uint pluginId, uint32_t programId); /*! * Get a plugin's MIDI program name. * @param pluginId Plugin * @param midiProgramId MIDI Program index * @see carla_get_midi_program_count() */ CARLA_EXPORT const char* carla_get_midi_program_name(CarlaHostHandle handle, uint pluginId, uint32_t midiProgramId); /*! * Get a plugin's real name. * This is the name the plugin uses to identify itself; may not be unique. * @param pluginId Plugin */ CARLA_EXPORT const char* carla_get_real_plugin_name(CarlaHostHandle handle, uint pluginId); /*! * Get a plugin's program index. * @param pluginId Plugin */ CARLA_EXPORT int32_t carla_get_current_program_index(CarlaHostHandle handle, uint pluginId); /*! * Get a plugin's midi program index. * @param pluginId Plugin */ CARLA_EXPORT int32_t carla_get_current_midi_program_index(CarlaHostHandle handle, uint pluginId); /*! * Get a plugin's default parameter value. * @param pluginId Plugin * @param parameterId Parameter index */ CARLA_EXPORT float carla_get_default_parameter_value(CarlaHostHandle handle, uint pluginId, uint32_t parameterId); /*! * Get a plugin's current parameter value. * @param pluginId Plugin * @param parameterId Parameter index */ CARLA_EXPORT float carla_get_current_parameter_value(CarlaHostHandle handle, uint pluginId, uint32_t parameterId); /*! * Get a plugin's internal parameter value. * @param pluginId Plugin * @param parameterId Parameter index, maybe be negative * @see InternalParameterIndex */ CARLA_EXPORT float carla_get_internal_parameter_value(CarlaHostHandle handle, uint pluginId, int32_t parameterId); /*! * Get a plugin's internal latency, in samples. * @param pluginId Plugin * @see InternalParameterIndex */ CARLA_EXPORT uint32_t carla_get_plugin_latency(CarlaHostHandle handle, uint pluginId); /*! * Get a plugin's peak values. * @param pluginId Plugin */ CARLA_EXPORT const float* carla_get_peak_values(CarlaHostHandle handle, uint pluginId); /*! * Get a plugin's input peak value. * @param pluginId Plugin * @param isLeft Wherever to get the left/mono value, otherwise right. */ CARLA_EXPORT float carla_get_input_peak_value(CarlaHostHandle handle, uint pluginId, bool isLeft); /*! * Get a plugin's output peak value. * @param pluginId Plugin * @param isLeft Wherever to get the left/mono value, otherwise right. */ CARLA_EXPORT float carla_get_output_peak_value(CarlaHostHandle handle, uint pluginId, bool isLeft); /*! * Render a plugin's inline display. * @param pluginId Plugin */ CARLA_EXPORT const CarlaInlineDisplayImageSurface* carla_render_inline_display(CarlaHostHandle handle, uint pluginId, uint32_t width, uint32_t height); /*! * Enable or disable a plugin. * @param pluginId Plugin * @param onOff New active state */ CARLA_EXPORT void carla_set_active(CarlaHostHandle handle, uint pluginId, bool onOff); #ifndef BUILD_BRIDGE /*! * Change a plugin's internal dry/wet. * @param pluginId Plugin * @param value New dry/wet value */ CARLA_EXPORT void carla_set_drywet(CarlaHostHandle handle, uint pluginId, float value); /*! * Change a plugin's internal volume. * @param pluginId Plugin * @param value New volume */ CARLA_EXPORT void carla_set_volume(CarlaHostHandle handle, uint pluginId, float value); /*! * Change a plugin's internal stereo balance, left channel. * @param pluginId Plugin * @param value New value */ CARLA_EXPORT void carla_set_balance_left(CarlaHostHandle handle, uint pluginId, float value); /*! * Change a plugin's internal stereo balance, right channel. * @param pluginId Plugin * @param value New value */ CARLA_EXPORT void carla_set_balance_right(CarlaHostHandle handle, uint pluginId, float value); /*! * Change a plugin's internal mono panning value. * @param pluginId Plugin * @param value New value */ CARLA_EXPORT void carla_set_panning(CarlaHostHandle handle, uint pluginId, float value); /*! * Change a plugin's internal control channel. * @param pluginId Plugin * @param channel New channel */ CARLA_EXPORT void carla_set_ctrl_channel(CarlaHostHandle handle, uint pluginId, int8_t channel); #endif /*! * Enable a plugin's option. * @param pluginId Plugin * @param option An option from PluginOptions * @param yesNo New enabled state */ CARLA_EXPORT void carla_set_option(CarlaHostHandle handle, uint pluginId, uint option, bool yesNo); /*! * Change a plugin's parameter value. * @param pluginId Plugin * @param parameterId Parameter index * @param value New value */ CARLA_EXPORT void carla_set_parameter_value(CarlaHostHandle handle, uint pluginId, uint32_t parameterId, float value); #ifndef BUILD_BRIDGE /*! * Change a plugin's parameter MIDI channel. * @param pluginId Plugin * @param parameterId Parameter index * @param channel New MIDI channel */ CARLA_EXPORT void carla_set_parameter_midi_channel(CarlaHostHandle handle, uint pluginId, uint32_t parameterId, uint8_t channel); /*! * Change a plugin's parameter mapped control index. * @param pluginId Plugin * @param parameterId Parameter index * @param cc New control index */ CARLA_EXPORT void carla_set_parameter_mapped_control_index(CarlaHostHandle handle, uint pluginId, uint32_t parameterId, int16_t index); /*! * Change a plugin's parameter mapped range. * @param pluginId Plugin * @param parameterId Parameter index * @param minimum New mapped minimum * @param maximum New mapped maximum */ CARLA_EXPORT void carla_set_parameter_mapped_range(CarlaHostHandle handle, uint pluginId, uint32_t parameterId, float minimum, float maximum); /*! * Change a plugin's parameter in drag/touch mode state. * Usually happens from a UI when the user is moving a parameter with a mouse or similar input. * @param pluginId Plugin * @param parameterId Parameter index * @param touch New state */ CARLA_EXPORT void carla_set_parameter_touch(CarlaHostHandle handle, uint pluginId, uint32_t parameterId, bool touch); #endif /*! * Change a plugin's current program. * @param pluginId Plugin * @param programId New program */ CARLA_EXPORT void carla_set_program(CarlaHostHandle handle, uint pluginId, uint32_t programId); /*! * Change a plugin's current MIDI program. * @param pluginId Plugin * @param midiProgramId New value */ CARLA_EXPORT void carla_set_midi_program(CarlaHostHandle handle, uint pluginId, uint32_t midiProgramId); /*! * Set a plugin's custom data set. * @param pluginId Plugin * @param type Type * @param key Key * @param value New value * @see CustomDataTypes and CustomDataKeys */ CARLA_EXPORT void carla_set_custom_data(CarlaHostHandle handle, uint pluginId, const char* type, const char* key, const char* value); /*! * Set a plugin's chunk data. * @param pluginId Plugin * @param chunkData New chunk data * @see PLUGIN_OPTION_USE_CHUNKS and carla_get_chunk_data() */ CARLA_EXPORT void carla_set_chunk_data(CarlaHostHandle handle, uint pluginId, const char* chunkData); /*! * Tell a plugin to prepare for save. * This should be called before saving custom data sets. * @param pluginId Plugin */ CARLA_EXPORT void carla_prepare_for_save(CarlaHostHandle handle, uint pluginId); /*! * Reset all plugin's parameters. * @param pluginId Plugin */ CARLA_EXPORT void carla_reset_parameters(CarlaHostHandle handle, uint pluginId); /*! * Randomize all plugin's parameters. * @param pluginId Plugin */ CARLA_EXPORT void carla_randomize_parameters(CarlaHostHandle handle, uint pluginId); #ifndef BUILD_BRIDGE /*! * Send a single note of a plugin. * If velocity is 0, note-off is sent; note-on otherwise. * @param pluginId Plugin * @param channel Note channel * @param note Note pitch * @param velocity Note velocity */ CARLA_EXPORT void carla_send_midi_note(CarlaHostHandle handle, uint pluginId, uint8_t channel, uint8_t note, uint8_t velocity); #endif /*! * Set a custom title for the plugin UI window created by Carla. */ CARLA_EXPORT void carla_set_custom_ui_title(CarlaHostHandle handle, uint pluginId, const char* title); /*! * Tell a plugin to show its own custom UI. * @param pluginId Plugin * @param yesNo New UI state, visible or not * @see PLUGIN_HAS_CUSTOM_UI */ CARLA_EXPORT void carla_show_custom_ui(CarlaHostHandle handle, uint pluginId, bool yesNo); /*! * Embed the plugin's custom UI to the system pointer @a ptr. * This function is always called from the main thread. * @note This is very experimental and subject to change at this point */ CARLA_EXPORT void* carla_embed_custom_ui(CarlaHostHandle handle, uint pluginId, void* ptr); /*! * Get the current engine buffer size. */ CARLA_EXPORT uint32_t carla_get_buffer_size(CarlaHostHandle handle); /*! * Get the current engine sample rate. */ CARLA_EXPORT double carla_get_sample_rate(CarlaHostHandle handle); /*! * Get the last error. */ CARLA_EXPORT const char* carla_get_last_error(CarlaHostHandle handle); /*! * Get the current engine OSC URL (TCP). */ CARLA_EXPORT const char* carla_get_host_osc_url_tcp(CarlaHostHandle handle); /*! * Get the current engine OSC URL (UDP). */ CARLA_EXPORT const char* carla_get_host_osc_url_udp(CarlaHostHandle handle); /*! * Initialize NSM (that is, announce ourselves to it). * Must be called as early as possible in the program's lifecycle. * Returns true if NSM is available and initialized correctly. */ CARLA_EXPORT bool carla_nsm_init(CarlaHostHandle handle, uint64_t pid, const char* executableName); /*! * Respond to an NSM callback. */ CARLA_EXPORT void carla_nsm_ready(CarlaHostHandle handle, NsmCallbackOpcode opcode); #ifndef CARLA_UTILS_H_INCLUDED /*! * Get the complete license text of used third-party code and features. * Returned string is in basic html format. */ CARLA_EXPORT const char* carla_get_complete_license_text(void); /*! * Get the juce version used in the current Carla build. */ CARLA_EXPORT const char* carla_get_juce_version(void); /*! * Get the list of supported file extensions in carla_load_file(). */ CARLA_EXPORT const char* const* carla_get_supported_file_extensions(void); /*! * Get the list of supported features in the current Carla build. */ CARLA_EXPORT const char* const* carla_get_supported_features(void); /*! * Get the absolute filename of this carla library. */ CARLA_EXPORT const char* carla_get_library_filename(void); /*! * Get the folder where this carla library resides. */ CARLA_EXPORT const char* carla_get_library_folder(void); #endif /** @} */ #endif /* CARLA_HOST_H_INCLUDED */ Carla-2.4.2/source/backend/CarlaHostImpl.hpp000066400000000000000000000051411420416754300206520ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2022 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #ifndef CARLA_HOST_IMPL_HPP_INCLUDED #define CARLA_HOST_IMPL_HPP_INCLUDED #include "CarlaHost.h" #include "CarlaUtils.h" #include "CarlaEngine.hpp" #ifdef BUILD_BRIDGE # include "CarlaString.hpp" #else # include "CarlaLogThread.hpp" #endif namespace CB = CARLA_BACKEND_NAMESPACE; using CB::EngineOptions; // -------------------------------------------------------------------------------------------------------------------- // Shared code, WIP typedef struct _CarlaHostHandle { // required pointers CarlaEngine* engine; // flags bool isStandalone : 1; bool isPlugin : 1; _CarlaHostHandle() noexcept : engine(nullptr), isStandalone(false), isPlugin(false) {} } CarlaHostHandleImpl; // -------------------------------------------------------------------------------------------------------------------- // Single, standalone engine struct CarlaHostStandalone : CarlaHostHandleImpl { EngineCallbackFunc engineCallback; void* engineCallbackPtr; FileCallbackFunc fileCallback; void* fileCallbackPtr; EngineOptions engineOptions; #ifndef BUILD_BRIDGE CarlaLogThread logThread; bool logThreadEnabled; #endif CarlaString lastError; CarlaHostStandalone() noexcept : CarlaHostHandleImpl(), engineCallback(nullptr), engineCallbackPtr(nullptr), fileCallback(nullptr), fileCallbackPtr(nullptr), engineOptions(), #ifndef BUILD_BRIDGE logThread(), logThreadEnabled(false), #endif lastError() { isStandalone = true; } ~CarlaHostStandalone() noexcept { CARLA_SAFE_ASSERT(engine == nullptr); } CARLA_PREVENT_HEAP_ALLOCATION CARLA_DECLARE_NON_COPY_STRUCT(CarlaHostStandalone) }; // -------------------------------------------------------------------------------------------------------------------- #endif // CARLA_HOST_IMPL_HPP_INCLUDED Carla-2.4.2/source/backend/CarlaPlugin.hpp000066400000000000000000000776321420416754300203670ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2022 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #ifndef CARLA_PLUGIN_HPP_INCLUDED #define CARLA_PLUGIN_HPP_INCLUDED #include "CarlaBackend.h" #include "CarlaPluginPtr.hpp" // ----------------------------------------------------------------------- // Avoid including extra libs here typedef void* lo_message; typedef struct _NativePluginDescriptor NativePluginDescriptor; struct LADSPA_RDF_Descriptor; // ----------------------------------------------------------------------- CARLA_BACKEND_START_NAMESPACE #if 0 } /* Fix editor indentation */ #endif // ----------------------------------------------------------------------- /*! * @defgroup CarlaPluginAPI Carla Plugin API * * The Carla Plugin API. * @{ */ class CarlaEngineAudioPort; class CarlaEngineCVPort; class CarlaEngineEventPort; class CarlaEngineCVSourcePorts; class CarlaEngineBridge; struct CarlaStateSave; struct EngineEvent; // ----------------------------------------------------------------------- /*! * Carla Backend base plugin class * * This is the base class for all available plugin types available in Carla Backend. * All virtual calls are implemented in this class as fallback (except reload and process), * so it's safe to only override needed calls. * * @see PluginType */ class CARLA_API CarlaPlugin { protected: /*! * This is the constructor of the base plugin class. * * @param engine The engine which this plugin belongs to, must not be null * @param id The 'id' of this plugin, must be between 0 and CarlaEngine::maxPluginNumber() */ CarlaPlugin(CarlaEngine* engine, uint id); public: /*! * This is the destructor of the base plugin class. */ virtual ~CarlaPlugin(); // ------------------------------------------------------------------- // Information (base) /*! * Get the plugin's type (a subclass of CarlaPlugin). * * @note Plugin bridges will return their respective plugin type, there is no plugin type such as "bridge". * To check if a plugin is a bridge use: * @code * if (getHints() & PLUGIN_IS_BRIDGE) * ... * @endcode */ virtual PluginType getType() const noexcept = 0; /*! * Get the plugin's id (as passed in the constructor). * * @see setId() */ uint getId() const noexcept; /*! * Get the plugin's hints. * * @see PluginHints */ uint getHints() const noexcept; /*! * Get the plugin's options (currently in use). * * @see PluginOptions, getOptionsAvailable() and setOption() */ uint getOptionsEnabled() const noexcept; /*! * Check if the plugin is enabled. * When a plugin is disabled, it will never be processed or managed in any way. * * @see setEnabled() */ bool isEnabled() const noexcept; /*! * Get the plugin's internal name. * This name is unique within all plugins in an engine. * * @see getRealName() and setName() */ const char* getName() const noexcept; /*! * Get the currently loaded DLL filename for this plugin. * (Sound kits return their exact filename). */ const char* getFilename() const noexcept; /*! * Get the plugins's icon name. */ const char* getIconName() const noexcept; /*! * Get the plugin's category (delay, filter, synth, etc). */ virtual PluginCategory getCategory() const noexcept; /*! * Get the plugin's native unique Id. * May return 0 on plugin types that don't support Ids. */ virtual int64_t getUniqueId() const noexcept; /*! * Get the plugin's latency, in sample frames. */ virtual uint32_t getLatencyInFrames() const noexcept; // ------------------------------------------------------------------- // Information (count) /*! * Get the number of audio inputs. */ uint32_t getAudioInCount() const noexcept; /*! * Get the number of audio outputs. */ uint32_t getAudioOutCount() const noexcept; /*! * Get the number of CV inputs. */ uint32_t getCVInCount() const noexcept; /*! * Get the number of CV outputs. */ uint32_t getCVOutCount() const noexcept; /*! * Get the number of MIDI inputs. */ virtual uint32_t getMidiInCount() const noexcept; /*! * Get the number of MIDI outputs. */ virtual uint32_t getMidiOutCount() const noexcept; /*! * Get the number of parameters. * To know the number of parameter inputs and outputs separately use getParameterCountInfo() instead. */ uint32_t getParameterCount() const noexcept; /*! * Get the number of scalepoints for parameter @a parameterId. */ virtual uint32_t getParameterScalePointCount(uint32_t parameterId) const noexcept; /*! * Get the number of programs. */ uint32_t getProgramCount() const noexcept; /*! * Get the number of MIDI programs. */ uint32_t getMidiProgramCount() const noexcept; /*! * Get the number of custom data sets. */ uint32_t getCustomDataCount() const noexcept; // ------------------------------------------------------------------- // Information (current data) /*! * Get the current program number (-1 if unset). * * @see setProgram() */ int32_t getCurrentProgram() const noexcept; /*! * Get the current MIDI program number (-1 if unset). * * @see setMidiProgram() * @see setMidiProgramById() */ int32_t getCurrentMidiProgram() const noexcept; /*! * Get hints about an audio port. */ virtual uint getAudioPortHints(bool isOutput, uint32_t portIndex) const noexcept; /*! * Get the parameter data of @a parameterId. */ const ParameterData& getParameterData(uint32_t parameterId) const noexcept; /*! * Get the parameter ranges of @a parameterId. */ const ParameterRanges& getParameterRanges(uint32_t parameterId) const noexcept; /*! * Check if parameter @a parameterId is of output type. */ bool isParameterOutput(uint32_t parameterId) const noexcept; /*! * Get the MIDI program at @a index. * * @see getMidiProgramName() */ const MidiProgramData& getMidiProgramData(uint32_t index) const noexcept; /*! * Get the custom data set at @a index. * * @see getCustomDataCount() and setCustomData() */ const CustomData& getCustomData(uint32_t index) const noexcept; /*! * Get the complete plugin chunk data into @a dataPtr. * * @note Make sure to verify the plugin supports chunks before calling this function! * @return The size of the chunk or 0 if invalid. * * @see setChunkData() */ virtual std::size_t getChunkData(void** dataPtr) noexcept; // ------------------------------------------------------------------- // Information (per-plugin data) /*! * Get the plugin available options. * * @see PluginOptions, getOptions() and setOption() */ virtual uint getOptionsAvailable() const noexcept; /*! * Get the current parameter value of @a parameterId. */ virtual float getParameterValue(uint32_t parameterId) const noexcept; /*! * Get the scalepoint @a scalePointId value of the parameter @a parameterId. */ virtual float getParameterScalePointValue(uint32_t parameterId, uint32_t scalePointId) const noexcept; /*! * Get the plugin's label (URI for LV2 plugins). */ __attribute__((warn_unused_result)) virtual bool getLabel(char* strBuf) const noexcept; /*! * Get the plugin's maker. */ __attribute__((warn_unused_result)) virtual bool getMaker(char* strBuf) const noexcept; /*! * Get the plugin's copyright/license. */ __attribute__((warn_unused_result)) virtual bool getCopyright(char* strBuf) const noexcept; /*! * Get the plugin's (real) name. * * @see getName() and setName() */ __attribute__((warn_unused_result)) virtual bool getRealName(char* strBuf) const noexcept; /*! * Get the name of the parameter @a parameterId. */ __attribute__((warn_unused_result)) virtual bool getParameterName(uint32_t parameterId, char* strBuf) const noexcept; /*! * Get the symbol of the parameter @a parameterId. */ __attribute__((warn_unused_result)) virtual bool getParameterSymbol(uint32_t parameterId, char* strBuf) const noexcept; /*! * Get the custom text of the parameter @a parameterId. * @see PARAMETER_USES_CUSTOM_TEXT */ __attribute__((warn_unused_result)) virtual bool getParameterText(uint32_t parameterId, char* strBuf) noexcept; /*! * Get the unit of the parameter @a parameterId. */ __attribute__((warn_unused_result)) virtual bool getParameterUnit(uint32_t parameterId, char* strBuf) const noexcept; /*! * Get the comment (documentation) of the parameter @a parameterId. */ __attribute__((warn_unused_result)) virtual bool getParameterComment(uint32_t parameterId, char* strBuf) const noexcept; /*! * Get the group name of the parameter @a parameterId. * @note The group name is prefixed by a unique symbol and ":". */ __attribute__((warn_unused_result)) virtual bool getParameterGroupName(uint32_t parameterId, char* strBuf) const noexcept; /*! * Get the scalepoint @a scalePointId label of the parameter @a parameterId. */ __attribute__((warn_unused_result)) virtual bool getParameterScalePointLabel(uint32_t parameterId, uint32_t scalePointId, char* strBuf) const noexcept; /*! * Get the current parameter value of @a parameterId. * @a parameterId can be negative to allow internal parameters. * @see InternalParametersIndex */ float getInternalParameterValue(int32_t parameterId) const noexcept; /*! * Get the name of the program at @a index. */ __attribute__((warn_unused_result)) bool getProgramName(uint32_t index, char* strBuf) const noexcept; /*! * Get the name of the MIDI program at @a index. * * @see getMidiProgramInfo() */ __attribute__((warn_unused_result)) bool getMidiProgramName(uint32_t index, char* strBuf) const noexcept; /*! * Get information about the plugin's parameter count. * This is used to check how many input, output and total parameters are available. * * @note Some parameters might not be input or output (ie, invalid). * * @see getParameterCount() */ void getParameterCountInfo(uint32_t& ins, uint32_t& outs) const noexcept; // ------------------------------------------------------------------- // Set data (state) /*! * Tell the plugin to prepare for save. * @param temporary Wherever we are saving into a temporary location * (for duplication, renaming or similar) */ virtual void prepareForSave(bool temporary); /*! * Reset all possible parameters. */ virtual void resetParameters() noexcept; /*! * Randomize all possible parameters. */ virtual void randomizeParameters() noexcept; /*! * Get the plugin's save state. * The plugin will automatically call prepareForSave() if requested. * * @see loadStateSave() */ const CarlaStateSave& getStateSave(bool callPrepareForSave = true); /*! * Get the plugin's save state. * * @see getStateSave() */ void loadStateSave(const CarlaStateSave& stateSave); /*! * Save the current plugin state to @a filename. * * @see loadStateFromFile() */ bool saveStateToFile(const char* filename); /*! * Save the plugin state from @a filename. * * @see saveStateToFile() */ bool loadStateFromFile(const char* filename); /*! * Export this plugin as its own LV2 plugin, using a carla wrapper around it for the LV2 functionality. */ bool exportAsLV2(const char* lv2path); // ------------------------------------------------------------------- // Set data (internal stuff) /*! * Set the plugin's id to @a newId. * * @see getId() * @note RT call */ virtual void setId(uint newId) noexcept; /*! * Set the plugin's name to @a newName. * * @see getName() and getRealName() */ virtual void setName(const char* newName); /*! * Set a plugin's option. * * @see getOptions() and getOptionsAvailable() */ virtual void setOption(uint option, bool yesNo, bool sendCallback); /*! * Enable or disable the plugin according to @a yesNo. * When a plugin is disabled, it will never be processed or managed in any way. * * @see isEnabled() */ void setEnabled(bool yesNo) noexcept; /*! * Set plugin as active according to @a active. * * @param sendOsc Send message change over OSC * @param sendCallback Send message change to registered callback */ void setActive(bool active, bool sendOsc, bool sendCallback) noexcept; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH /*! * Set the plugin's dry/wet signal value to @a value. * @a value must be between 0.0 and 1.0. * * @param sendOsc Send message change over OSC * @param sendCallback Send message change to registered callback */ void setDryWet(float value, bool sendOsc, bool sendCallback) noexcept; /*! * Set the plugin's output volume to @a value. * @a value must be between 0.0 and 1.27. * * @param sendOsc Send message change over OSC * @param sendCallback Send message change to registered callback */ void setVolume(float value, bool sendOsc, bool sendCallback) noexcept; /*! * Set the plugin's output left balance value to @a value. * @a value must be between -1.0 and 1.0. * * @param sendOsc Send message change over OSC * @param sendCallback Send message change to registered callback * * @note Pure-Stereo plugins only! */ void setBalanceLeft(float value, bool sendOsc, bool sendCallback) noexcept; /*! * Set the plugin's output right balance value to @a value. * @a value must be between -1.0 and 1.0. * * @param sendOsc Send message change over OSC * @param sendCallback Send message change to registered callback * * @note Pure-Stereo plugins only! */ void setBalanceRight(float value, bool sendOsc, bool sendCallback) noexcept; /*! * Set the plugin's output panning value to @a value. * @a value must be between -1.0 and 1.0. * * @param sendOsc Send message change over OSC * @param sendCallback Send message change to registered callback * * @note Force-Stereo plugins only! */ void setPanning(float value, bool sendOsc, bool sendCallback) noexcept; /*! * Overloaded functions, to be called from within RT context only. */ void setDryWetRT(float value, bool sendCallbackLater) noexcept; void setVolumeRT(float value, bool sendCallbackLater) noexcept; void setBalanceLeftRT(float value, bool sendCallbackLater) noexcept; void setBalanceRightRT(float value, bool sendCallbackLater) noexcept; void setPanningRT(float value, bool sendCallbackLater) noexcept; #endif // ! BUILD_BRIDGE_ALTERNATIVE_ARCH /*! * Set the plugin's midi control channel. * * @param sendOsc Send message change over OSC * @param sendCallback Send message change to registered callback */ virtual void setCtrlChannel(int8_t channel, bool sendOsc, bool sendCallback) noexcept; // ------------------------------------------------------------------- // Set data (plugin-specific stuff) /*! * Set a plugin's parameter value. * * @param parameterId The parameter to change * @param value The new parameter value, must be within the parameter's range * @param sendGui Send message change to plugin's custom GUI, if any * @param sendOsc Send message change over OSC * @param sendCallback Send message change to registered callback * * @see getParameterValue() */ virtual void setParameterValue(uint32_t parameterId, float value, bool sendGui, bool sendOsc, bool sendCallback) noexcept; /*! * Overloaded function, to be called from within RT context only. */ virtual void setParameterValueRT(uint32_t parameterId, float value, bool sendCallbackLater) noexcept; /*! * Set a plugin's parameter value, including internal parameters. * @a rindex can be negative to allow internal parameters change (as defined in InternalParametersIndex). * * @see setParameterValue() * @see setActive() * @see setDryWet() * @see setVolume() * @see setBalanceLeft() * @see setBalanceRight() */ void setParameterValueByRealIndex(int32_t rindex, float value, bool sendGui, bool sendOsc, bool sendCallback) noexcept; /*! * Set parameter's @a parameterId MIDI channel to @a channel. * @a channel must be between 0 and 15. */ virtual void setParameterMidiChannel(uint32_t parameterId, uint8_t channel, bool sendOsc, bool sendCallback) noexcept; /*! * Set parameter's @a parameterId mapped control index to @a index. * @see ParameterData::mappedControlIndex */ virtual void setParameterMappedControlIndex(uint32_t parameterId, int16_t index, bool sendOsc, bool sendCallback, bool reconfigureNow) noexcept; /*! * Set parameter's @a parameterId mapped range to @a minimum and @a maximum. */ virtual void setParameterMappedRange(uint32_t parameterId, float minimum, float maximum, bool sendOsc, bool sendCallback) noexcept; /*! * Add a custom data set. * If @a key already exists, its current value will be swapped with @a value. * * @param type Type of data used in @a value. * @param key A key identifying this data set. * @param value The value of the data set, of type @a type. * @param sendGui Send message change to plugin's custom GUI, if any * * @see getCustomDataCount() and getCustomData() */ virtual void setCustomData(const char* type, const char* key, const char* value, bool sendGui); /*! * Set the complete chunk data as @a data. * * @see getChunkData() * * @note Make sure to verify the plugin supports chunks before calling this function */ virtual void setChunkData(const void* data, std::size_t dataSize); /*! * Change the current plugin program to @a index. * * If @a index is negative the plugin's program will be considered unset. * The plugin's default parameter values will be updated when this function is called. * * @param index New program index to use * @param sendGui Send message change to plugin's custom GUI, if any * @param sendOsc Send message change over OSC * @param sendCallback Send message change to registered callback */ virtual void setProgram(int32_t index, bool sendGui, bool sendOsc, bool sendCallback, bool doingInit = false) noexcept; /*! * Change the current MIDI plugin program to @a index. * * If @a index is negative the plugin's program will be considered unset. * The plugin's default parameter values will be updated when this function is called. * * @param index New program index to use * @param sendGui Send message change to plugin's custom GUI, if any * @param sendOsc Send message change over OSC * @param sendCallback Send message change to registered callback */ virtual void setMidiProgram(int32_t index, bool sendGui, bool sendOsc, bool sendCallback, bool doingInit = false) noexcept; /*! * This is an overloaded call to setMidiProgram(). * It changes the current MIDI program using @a bank and @a program values instead of index. */ void setMidiProgramById(uint32_t bank, uint32_t program, bool sendGui, bool sendOsc, bool sendCallback) noexcept; /*! * Overloaded functions, to be called from within RT context only. */ virtual void setProgramRT(uint32_t index, bool sendCallbackLater) noexcept; virtual void setMidiProgramRT(uint32_t index, bool sendCallbackLater) noexcept; // ------------------------------------------------------------------- // Plugin state /*! * Reload the plugin's entire state (including programs). * The plugin will be disabled during this call. */ virtual void reload() = 0; /*! * Reload the plugin's programs state. */ virtual void reloadPrograms(bool doInit); // ------------------------------------------------------------------- // Plugin processing protected: /*! * Plugin activate call. */ virtual void activate() noexcept; /*! * Plugin activate call. */ virtual void deactivate() noexcept; public: /*! * Plugin process call. */ virtual void process(const float* const* audioIn, float** audioOut, const float* const* cvIn, float** cvOut, uint32_t frames) = 0; /*! * Tell the plugin the current buffer size changed. */ virtual void bufferSizeChanged(uint32_t newBufferSize); /*! * Tell the plugin the current sample rate changed. */ virtual void sampleRateChanged(double newSampleRate); /*! * Tell the plugin the current offline mode changed. */ virtual void offlineModeChanged(bool isOffline); // ------------------------------------------------------------------- // Misc /*! * Idle function (non-UI), called at regular intervals. * @note: This function is NOT called from the main thread. */ virtual void idle(); /*! * Try to lock the plugin's master mutex. * @param forcedOffline When true, always locks and returns true */ bool tryLock(bool forcedOffline) noexcept; /*! * Unlock the plugin's master mutex. */ void unlock() noexcept; // ------------------------------------------------------------------- // Plugin buffers /*! * Initialize all RT buffers of the plugin. */ virtual void initBuffers() const noexcept; /*! * Delete and clear all RT buffers. */ virtual void clearBuffers() noexcept; // ------------------------------------------------------------------- // OSC stuff /*! * Handle an OSC message. * FIXME */ virtual void handleOscMessage(const char* method, int argc, const void* argv, const char* types, lo_message msg); // ------------------------------------------------------------------- // MIDI events /*! * Send a single midi note to be processed in the next audio callback. * A note with 0 velocity means note-off. * @note Non-RT call */ void sendMidiSingleNote(uint8_t channel, uint8_t note, uint8_t velo, bool sendGui, bool sendOsc, bool sendCallback); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH /*! * Send all midi notes off to the host callback. * This doesn't send the actual MIDI All-Notes-Off event, but 128 note-offs instead (IFF ctrlChannel is valid). * @note RT call */ void postponeRtAllNotesOff(); #endif // ------------------------------------------------------------------- // UI Stuff /*! * Set a custom title for the plugin UI window created by Carla. */ virtual void setCustomUITitle(const char* title) noexcept; /*! * Show (or hide) the plugin's custom UI according to @a yesNo. * This function is always called from the main thread. */ virtual void showCustomUI(bool yesNo); /*! * Embed the plugin's custom UI to the system pointer @a ptr. * This function is always called from the main thread. * @note This is very experimental and subject to change at this point */ virtual void* embedCustomUI(void* ptr); /*! * UI idle function, called at regular intervals. * This function is only called from the main thread if PLUGIN_NEEDS_UI_MAIN_THREAD is set. * @note This function may sometimes be called even if the UI is not visible yet. */ virtual void uiIdle(); /*! * Tell the UI a parameter has changed. * @see uiIdle */ virtual void uiParameterChange(uint32_t index, float value) noexcept; /*! * Tell the UI the current program has changed. * @see uiIdle */ virtual void uiProgramChange(uint32_t index) noexcept; /*! * Tell the UI the current midi program has changed. * @see uiIdle */ virtual void uiMidiProgramChange(uint32_t index) noexcept; /*! * Tell the UI a note has been pressed. * @see uiIdle */ virtual void uiNoteOn(uint8_t channel, uint8_t note, uint8_t velo) noexcept; /*! * Tell the UI a note has been released. * @see uiIdle */ virtual void uiNoteOff(uint8_t channel, uint8_t note) noexcept; // ------------------------------------------------------------------- // Helper functions /*! * Get the plugin's engine, as passed in the constructor. */ CarlaEngine* getEngine() const noexcept; /*! * Get the plugin's engine client. */ CarlaEngineClient* getEngineClient() const noexcept; /*! * Get a plugin's audio input port. */ CarlaEngineAudioPort* getAudioInPort(uint32_t index) const noexcept; /*! * Get a plugin's audio output port. */ CarlaEngineAudioPort* getAudioOutPort(uint32_t index) const noexcept; /*! * Get a plugin's CV input port. */ CarlaEngineCVPort* getCVInPort(uint32_t index) const noexcept; /*! * Get a plugin's CV output port. */ CarlaEngineCVPort* getCVOutPort(uint32_t index) const noexcept; /*! * Get the plugin's default event input port. */ CarlaEngineEventPort* getDefaultEventInPort() const noexcept; /*! * Get the plugin's default event output port. */ CarlaEngineEventPort* getDefaultEventOutPort() const noexcept; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH /*! * Check if the plugin is interested on MIDI learn, and if so, map this event to the parameter that wants it. * Event MUST be of control type and not have been handled before. */ void checkForMidiLearn(EngineEvent& event) noexcept; #endif /*! * Get the plugin's type native handle. * This will be LADSPA_Handle, LV2_Handle, etc. */ virtual void* getNativeHandle() const noexcept; /*! * Get the plugin's type native descriptor. * This will be LADSPA_Descriptor, DSSI_Descriptor, LV2_Descriptor, AEffect, etc. */ virtual const void* getNativeDescriptor() const noexcept; /*! * Get the plugin UI bridge process Id. */ virtual uintptr_t getUiBridgeProcessId() const noexcept; // ------------------------------------------------------------------- /*! * Get the plugin's patchbay nodeId. * @see setPatchbayNodeId() */ uint32_t getPatchbayNodeId() const noexcept; /*! * Set the plugin's patchbay nodeId. * @see getPatchbayNodeId() */ void setPatchbayNodeId(uint32_t nodeId) noexcept; // ------------------------------------------------------------------- // Plugin initializers /*! * Get a plugin's binary type. * This is always BINARY_NATIVE unless the plugin is a bridge. */ virtual BinaryType getBinaryType() const noexcept { return BINARY_NATIVE; } /*! * Handy function required by CarlaEngine::clonePlugin(). */ virtual const void* getExtraStuff() const noexcept { return nullptr; } #ifndef DOXYGEN struct Initializer { CarlaEngine* const engine; const uint id; const char* const filename; const char* const name; const char* const label; const int64_t uniqueId; const uint options; // see PluginOptions }; static CarlaPluginPtr newNative(const Initializer& init); static CarlaPluginPtr newBridge(const Initializer& init, BinaryType btype, PluginType ptype, const char* binaryArchName, const char* bridgeBinary); static CarlaPluginPtr newLADSPA(const Initializer& init, const LADSPA_RDF_Descriptor* rdfDescriptor); static CarlaPluginPtr newDSSI(const Initializer& init); static CarlaPluginPtr newLV2(const Initializer& init); static CarlaPluginPtr newVST2(const Initializer& init); static CarlaPluginPtr newVST3(const Initializer& init); static CarlaPluginPtr newAU(const Initializer& init); static CarlaPluginPtr newJuce(const Initializer& init, const char* format); static CarlaPluginPtr newFluidSynth(const Initializer& init, PluginType ptype, bool use16Outs); static CarlaPluginPtr newSFZero(const Initializer& init); static CarlaPluginPtr newJackApp(const Initializer& init); #endif // ------------------------------------------------------------------- protected: /*! * Internal data, for CarlaPlugin subclasses only. */ struct ProtectedData; ProtectedData* const pData; // ------------------------------------------------------------------- // Internal helper functions protected: /*! * Clone/copy files from another LV2 plugin into this one.. */ virtual void cloneLV2Files(const CarlaPlugin& other); /*! * Call LV2 restore. * @param temporary Wherever we are saving into a temporary location * (for duplication, renaming or similar) */ virtual void restoreLV2State(bool temporary) noexcept; /*! * Allow engine to signal that plugin will be deleted soon. */ virtual void prepareForDeletion() noexcept; /*! * Give plugin bridges a change to update their custom data sets. */ virtual void waitForBridgeSaveSignal() noexcept; // ------------------------------------------------------------------- // Helper classes /*! * Fully disable plugin in scope and also its engine client. * May wait-block on constructor for plugin process to end. */ class ScopedDisabler { public: ScopedDisabler(CarlaPlugin* plugin) noexcept; ~ScopedDisabler() noexcept; private: CarlaPlugin* const fPlugin; bool fWasEnabled; CARLA_PREVENT_HEAP_ALLOCATION CARLA_DECLARE_NON_COPY_CLASS(ScopedDisabler) }; /*! * Lock the plugin's own run/process call. * Plugin will still work as normal, but output only silence. * On destructor needsReset flag might be set if the plugin might have missed some events. */ class ScopedSingleProcessLocker { public: ScopedSingleProcessLocker(CarlaPlugin* plugin, bool block) noexcept; ~ScopedSingleProcessLocker() noexcept; private: CarlaPlugin* const fPlugin; const bool fBlock; CARLA_PREVENT_HEAP_ALLOCATION CARLA_DECLARE_NON_COPY_CLASS(ScopedSingleProcessLocker) }; friend class CarlaEngine; friend class CarlaEngineBridge; CARLA_DECLARE_NON_COPY_CLASS(CarlaPlugin) }; /**@}*/ // ----------------------------------------------------------------------- CARLA_BACKEND_END_NAMESPACE #endif // CARLA_PLUGIN_HPP_INCLUDED Carla-2.4.2/source/backend/CarlaPluginPtr.hpp000066400000000000000000000141321420416754300210370ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2020 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #ifndef CARLA_CPP_COMPAT_HPP_INCLUDED #define CARLA_CPP_COMPAT_HPP_INCLUDED #include "CarlaDefines.h" #ifdef CARLA_PROPER_CPP11_SUPPORT # include #else # include # include "CarlaUtils.hpp" #endif // ----------------------------------------------------------------------- #ifndef CARLA_PROPER_CPP11_SUPPORT namespace std { /* This code is part of shared_ptr.hpp: * minimal implementation of smart pointer, a subset of the C++11 std::shared_ptr or boost::shared_ptr. * Copyright (c) 2013-2019 Sebastien Rombauts (sebastien.rombauts@gmail.com) * Distributed under the MIT License (MIT) */ class shared_ptr_count { public: shared_ptr_count() : pn(nullptr) {} shared_ptr_count(const shared_ptr_count& count) : pn(count.pn) {} void swap(shared_ptr_count& lhs) noexcept { std::swap(pn, lhs.pn); } long use_count(void) const noexcept { long count = 0; if (nullptr != pn) { count = *pn; } return count; } template void acquire(U* p) { if (nullptr != p) { if (nullptr == pn) { try { pn = new volatile long(1); } catch (std::bad_alloc&) { delete p; throw; } } else { ++(*pn); } } } template void release(U* p) noexcept { if (nullptr != pn) { --(*pn); if (0 == *pn) { delete p; delete pn; } pn = nullptr; } } public: volatile long* pn; }; template class shared_ptr { public: typedef T element_type; shared_ptr(void) noexcept : px(nullptr), pn() {} /*explicit*/ shared_ptr(T* p) : px(nullptr), pn() { acquire(p); } template shared_ptr(const shared_ptr& ptr, T* p) : px(nullptr), pn(ptr.pn) { acquire(p); } template shared_ptr(const shared_ptr& ptr) noexcept : px(nullptr), pn(ptr.pn) { CARLA_SAFE_ASSERT_RETURN(nullptr == ptr.px || 0 != ptr.pn.use_count(),); acquire(static_cast::element_type*>(ptr.px)); } shared_ptr(const shared_ptr& ptr) noexcept : px(nullptr), pn(ptr.pn) { CARLA_SAFE_ASSERT_RETURN(nullptr == ptr.px || 0 != ptr.pn.use_count(),); acquire(ptr.px); } shared_ptr& operator=(shared_ptr ptr) noexcept { swap(ptr); return *this; } ~shared_ptr(void) noexcept { release(); } void reset(void) noexcept { release(); } void swap(shared_ptr& lhs) noexcept { std::swap(px, lhs.px); pn.swap(lhs.pn); } operator bool() const noexcept { return (0 < pn.use_count()); } long use_count(void) const noexcept { return pn.use_count(); } // underlying pointer operations : T& operator*() const noexcept { return *px; } T* operator->() const noexcept { return px; } T* get(void) const noexcept { return px; } private: void acquire(T* p) { pn.acquire(p); px = p; } void release(void) noexcept { pn.release(px); px = nullptr; } private: template friend class shared_ptr; private: T* px; shared_ptr_count pn; }; template bool operator==(const shared_ptr& l, const shared_ptr& r) noexcept { return (l.get() == r.get()); } template bool operator!=(const shared_ptr& l, const shared_ptr& r) noexcept { return (l.get() != r.get()); } template bool operator<=(const shared_ptr& l, const shared_ptr& r) noexcept { return (l.get() <= r.get()); } template bool operator<(const shared_ptr& l, const shared_ptr& r) noexcept { return (l.get() < r.get()); } template bool operator>=(const shared_ptr& l, const shared_ptr& r) noexcept { return (l.get() >= r.get()); } template bool operator>(const shared_ptr& l, const shared_ptr& r) noexcept { return (l.get() > r.get()); } template shared_ptr static_pointer_cast(const shared_ptr& ptr) { return shared_ptr(ptr, static_cast::element_type*>(ptr.get())); } template shared_ptr dynamic_pointer_cast(const shared_ptr& ptr) { T* p = dynamic_cast::element_type*>(ptr.get()); if (nullptr != p) { return shared_ptr(ptr, p); } else { return shared_ptr(); } } template bool operator==(const shared_ptr& pointer1, T* const pointer2) noexcept { return static_cast(pointer1) == pointer2; } template bool operator!=(const shared_ptr& pointer1, T* const pointer2) noexcept { return static_cast(pointer1) != pointer2; } } // namespace std #endif // CARLA_PROPER_CPP11_SUPPORT CARLA_BACKEND_START_NAMESPACE typedef std::shared_ptr CarlaPluginPtr; CARLA_BACKEND_END_NAMESPACE // ----------------------------------------------------------------------- #endif // CARLA_CPP_COMPAT_HPP_INCLUDED Carla-2.4.2/source/backend/CarlaStandalone.cpp000066400000000000000000002542331420416754300212060ustar00rootroot00000000000000/* * Carla Standalone * Copyright (C) 2011-2022 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ // TODO: // Check carla_stderr2("Engine is not running"); <= prepend func name and args #include "CarlaHostImpl.hpp" #include "CarlaMIDI.h" #include "CarlaEngineInit.hpp" #include "CarlaPlugin.hpp" #include "CarlaBackendUtils.hpp" #include "CarlaBase64Utils.hpp" #include "ThreadSafeFFTW.hpp" #ifndef BUILD_BRIDGE # include "CarlaLogThread.hpp" #endif #include "water/files/File.h" #define CARLA_SAFE_ASSERT_WITH_LAST_ERROR_RETURN(cond, msg, ret) \ if (! (cond)) { \ carla_stderr2("%s: " msg, __FUNCTION__); \ if (handle->isStandalone) \ ((CarlaHostStandalone*)handle)->lastError = msg; \ return ret; \ } // -------------------------------------------------------------------------------------------------------------------- #ifdef USING_JUCE static void carla_standalone_juce_init(void); static void carla_standalone_juce_idle(void); static void carla_standalone_juce_cleanup(void); # define carla_juce_init carla_standalone_juce_init # define carla_juce_idle carla_standalone_juce_idle # define carla_juce_cleanup carla_standalone_juce_cleanup # include "utils/JUCE.cpp" # undef carla_juce_init # undef carla_juce_idle # undef carla_juce_cleanup #endif // ------------------------------------------------------------------------------------------------------------------- // Always return a valid string ptr for standalone functions static const char* const gNullCharPtr = ""; static void checkStringPtr(const char*& charPtr) noexcept { if (charPtr == nullptr) charPtr = gNullCharPtr; } // ------------------------------------------------------------------------------------------------------------------- // Constructors _CarlaPluginInfo::_CarlaPluginInfo() noexcept : type(CB::PLUGIN_NONE), category(CB::PLUGIN_CATEGORY_NONE), hints(0x0), optionsAvailable(0x0), optionsEnabled(0x0), filename(gNullCharPtr), name(gNullCharPtr), label(gNullCharPtr), maker(gNullCharPtr), copyright(gNullCharPtr), iconName(gNullCharPtr), uniqueId(0) {} _CarlaPluginInfo::~_CarlaPluginInfo() noexcept { if (label != gNullCharPtr) delete[] label; if (maker != gNullCharPtr) delete[] maker; if (copyright != gNullCharPtr) delete[] copyright; } _CarlaParameterInfo::_CarlaParameterInfo() noexcept : name(gNullCharPtr), symbol(gNullCharPtr), unit(gNullCharPtr), comment(gNullCharPtr), groupName(gNullCharPtr), scalePointCount(0) {} _CarlaParameterInfo::~_CarlaParameterInfo() noexcept { if (name != gNullCharPtr) delete[] name; if (symbol != gNullCharPtr) delete[] symbol; if (unit != gNullCharPtr) delete[] unit; if (comment != gNullCharPtr) delete[] comment; if (groupName != gNullCharPtr) delete[] groupName; } _CarlaScalePointInfo::_CarlaScalePointInfo() noexcept : value(0.0f), label(gNullCharPtr) {} _CarlaScalePointInfo::~_CarlaScalePointInfo() noexcept { if (label != gNullCharPtr) delete[] label; } _CarlaTransportInfo::_CarlaTransportInfo() noexcept : playing(false), frame(0), bar(0), beat(0), tick(0), bpm(0.0) {} void _CarlaTransportInfo::clear() noexcept { playing = false; frame = 0; bar = 0; beat = 0; tick = 0; bpm = 0.0; } // -------------------------------------------------------------------------------------------------------------------- using CARLA_BACKEND_NAMESPACE::CarlaPluginPtr; // -------------------------------------------------------------------------------------------------------------------- uint carla_get_engine_driver_count() { carla_debug("carla_get_engine_driver_count()"); return CarlaEngine::getDriverCount(); } const char* carla_get_engine_driver_name(uint index) { carla_debug("carla_get_engine_driver_name(%i)", index); return CarlaEngine::getDriverName(index); } const char* const* carla_get_engine_driver_device_names(uint index) { carla_debug("carla_get_engine_driver_device_names(%i)", index); return CarlaEngine::getDriverDeviceNames(index); } const EngineDriverDeviceInfo* carla_get_engine_driver_device_info(uint index, const char* name) { CARLA_SAFE_ASSERT_RETURN(name != nullptr, nullptr); static EngineDriverDeviceInfo retDevInfo; static const uint32_t nullBufferSizes[] = { 0 }; static const double nullSampleRates[] = { 0.0 }; carla_debug("carla_get_engine_driver_device_info(%i, \"%s\")", index, name); if (const EngineDriverDeviceInfo* const devInfo = CarlaEngine::getDriverDeviceInfo(index, name)) { retDevInfo.hints = devInfo->hints; retDevInfo.bufferSizes = (devInfo->bufferSizes != nullptr) ? devInfo->bufferSizes : nullBufferSizes; retDevInfo.sampleRates = (devInfo->sampleRates != nullptr) ? devInfo->sampleRates : nullSampleRates; } else { retDevInfo.hints = 0x0; retDevInfo.bufferSizes = nullBufferSizes; retDevInfo.sampleRates = nullSampleRates; } return &retDevInfo; } bool carla_show_engine_driver_device_control_panel(uint index, const char* name) { return CarlaEngine::showDriverDeviceControlPanel(index, name); } // -------------------------------------------------------------------------------------------------------------------- CarlaHostHandle carla_standalone_host_init(void) { #ifdef CARLA_OS_UNIX static const ThreadSafeFFTW sThreadSafeFFTW; #endif static CarlaHostStandalone gStandalone; return &gStandalone; } CarlaEngine* carla_get_engine_from_handle(CarlaHostHandle handle) { carla_debug("carla_get_engine(%p)", handle); return handle->engine; } // -------------------------------------------------------------------------------------------------------------------- static void carla_engine_init_common(const CarlaHostStandalone& standalone, CarlaEngine* const engine) { engine->setCallback(standalone.engineCallback, standalone.engineCallbackPtr); engine->setFileCallback(standalone.fileCallback, standalone.fileCallbackPtr); using water::File; const File waterBinaryDir(File::getSpecialLocation(File::currentExecutableFile).getParentDirectory()); #ifdef BUILD_BRIDGE /* if (const char* const forceStereo = std::getenv("ENGINE_OPTION_FORCE_STEREO")) engine->setOption(CB::ENGINE_OPTION_FORCE_STEREO, (std::strcmp(forceStereo, "true") == 0) ? 1 : 0, nullptr); if (const char* const preferPluginBridges = std::getenv("ENGINE_OPTION_PREFER_PLUGIN_BRIDGES")) engine->setOption(CB::ENGINE_OPTION_PREFER_PLUGIN_BRIDGES, (std::strcmp(preferPluginBridges, "true") == 0) ? 1 : 0, nullptr); if (const char* const preferUiBridges = std::getenv("ENGINE_OPTION_PREFER_UI_BRIDGES")) engine->setOption(CB::ENGINE_OPTION_PREFER_UI_BRIDGES, (std::strcmp(preferUiBridges, "true") == 0) ? 1 : 0, nullptr); */ if (const char* const uisAlwaysOnTop = std::getenv("ENGINE_OPTION_UIS_ALWAYS_ON_TOP")) engine->setOption(CB::ENGINE_OPTION_UIS_ALWAYS_ON_TOP, (std::strcmp(uisAlwaysOnTop, "true") == 0) ? 1 : 0, nullptr); if (const char* const maxParameters = std::getenv("ENGINE_OPTION_MAX_PARAMETERS")) engine->setOption(CB::ENGINE_OPTION_MAX_PARAMETERS, std::atoi(maxParameters), nullptr); if (const char* const resetXruns = std::getenv("ENGINE_OPTION_RESET_XRUNS")) engine->setOption(CB::ENGINE_OPTION_RESET_XRUNS, (std::strcmp(resetXruns, "true") == 0) ? 1 : 0, nullptr); if (const char* const uiBridgesTimeout = std::getenv("ENGINE_OPTION_UI_BRIDGES_TIMEOUT")) engine->setOption(CB::ENGINE_OPTION_UI_BRIDGES_TIMEOUT, std::atoi(uiBridgesTimeout), nullptr); if (const char* const pathAudio = std::getenv("ENGINE_OPTION_FILE_PATH_AUDIO")) engine->setOption(CB::ENGINE_OPTION_FILE_PATH, CB::FILE_AUDIO, pathAudio); if (const char* const pathMIDI = std::getenv("ENGINE_OPTION_FILE_PATH_MIDI")) engine->setOption(CB::ENGINE_OPTION_FILE_PATH, CB::FILE_MIDI, pathMIDI); if (const char* const pathLADSPA = std::getenv("ENGINE_OPTION_PLUGIN_PATH_LADSPA")) engine->setOption(CB::ENGINE_OPTION_PLUGIN_PATH, CB::PLUGIN_LADSPA, pathLADSPA); if (const char* const pathDSSI = std::getenv("ENGINE_OPTION_PLUGIN_PATH_DSSI")) engine->setOption(CB::ENGINE_OPTION_PLUGIN_PATH, CB::PLUGIN_DSSI, pathDSSI); if (const char* const pathLV2 = std::getenv("ENGINE_OPTION_PLUGIN_PATH_LV2")) engine->setOption(CB::ENGINE_OPTION_PLUGIN_PATH, CB::PLUGIN_LV2, pathLV2); if (const char* const pathVST2 = std::getenv("ENGINE_OPTION_PLUGIN_PATH_VST2")) engine->setOption(CB::ENGINE_OPTION_PLUGIN_PATH, CB::PLUGIN_VST2, pathVST2); if (const char* const pathVST3 = std::getenv("ENGINE_OPTION_PLUGIN_PATH_VST3")) engine->setOption(CB::ENGINE_OPTION_PLUGIN_PATH, CB::PLUGIN_VST3, pathVST3); if (const char* const pathSF2 = std::getenv("ENGINE_OPTION_PLUGIN_PATH_SF2")) engine->setOption(CB::ENGINE_OPTION_PLUGIN_PATH, CB::PLUGIN_SF2, pathSF2); if (const char* const pathSFZ = std::getenv("ENGINE_OPTION_PLUGIN_PATH_SFZ")) engine->setOption(CB::ENGINE_OPTION_PLUGIN_PATH, CB::PLUGIN_SFZ, pathSFZ); if (const char* const pathJSFX = std::getenv("ENGINE_OPTION_PLUGIN_PATH_JSFX")) engine->setOption(CB::ENGINE_OPTION_PLUGIN_PATH, CB::PLUGIN_JSFX, pathJSFX); if (const char* const binaryDir = std::getenv("ENGINE_OPTION_PATH_BINARIES")) engine->setOption(CB::ENGINE_OPTION_PATH_BINARIES, 0, binaryDir); else engine->setOption(CB::ENGINE_OPTION_PATH_BINARIES, 0, waterBinaryDir.getFullPathName().toRawUTF8()); if (const char* const resourceDir = std::getenv("ENGINE_OPTION_PATH_RESOURCES")) engine->setOption(CB::ENGINE_OPTION_PATH_RESOURCES, 0, resourceDir); else engine->setOption(CB::ENGINE_OPTION_PATH_RESOURCES, 0, waterBinaryDir.getChildFile("resources").getFullPathName().toRawUTF8()); if (const char* const preventBadBehaviour = std::getenv("ENGINE_OPTION_PREVENT_BAD_BEHAVIOUR")) engine->setOption(CB::ENGINE_OPTION_PREVENT_BAD_BEHAVIOUR, (std::strcmp(preventBadBehaviour, "true") == 0) ? 1 : 0, nullptr); if (const char* const frontendWinId = std::getenv("ENGINE_OPTION_FRONTEND_WIN_ID")) engine->setOption(CB::ENGINE_OPTION_FRONTEND_WIN_ID, 0, frontendWinId); #else engine->setOption(CB::ENGINE_OPTION_FORCE_STEREO, standalone.engineOptions.forceStereo ? 1 : 0, nullptr); engine->setOption(CB::ENGINE_OPTION_PREFER_PLUGIN_BRIDGES, standalone.engineOptions.preferPluginBridges ? 1 : 0, nullptr); engine->setOption(CB::ENGINE_OPTION_PREFER_UI_BRIDGES, standalone.engineOptions.preferUiBridges ? 1 : 0, nullptr); engine->setOption(CB::ENGINE_OPTION_UIS_ALWAYS_ON_TOP, standalone.engineOptions.uisAlwaysOnTop ? 1 : 0, nullptr); engine->setOption(CB::ENGINE_OPTION_MAX_PARAMETERS, static_cast(standalone.engineOptions.maxParameters), nullptr); engine->setOption(CB::ENGINE_OPTION_RESET_XRUNS, standalone.engineOptions.resetXruns ? 1 : 0, nullptr); engine->setOption(CB::ENGINE_OPTION_UI_BRIDGES_TIMEOUT, static_cast(standalone.engineOptions.uiBridgesTimeout), nullptr); engine->setOption(CB::ENGINE_OPTION_AUDIO_BUFFER_SIZE, static_cast(standalone.engineOptions.audioBufferSize), nullptr); engine->setOption(CB::ENGINE_OPTION_AUDIO_SAMPLE_RATE, static_cast(standalone.engineOptions.audioSampleRate), nullptr); engine->setOption(CB::ENGINE_OPTION_AUDIO_TRIPLE_BUFFER, standalone.engineOptions.audioTripleBuffer ? 1 : 0, nullptr); if (standalone.engineOptions.audioDriver != nullptr) engine->setOption(CB::ENGINE_OPTION_AUDIO_DRIVER, 0, standalone.engineOptions.audioDriver); if (standalone.engineOptions.audioDevice != nullptr) engine->setOption(CB::ENGINE_OPTION_AUDIO_DEVICE, 0, standalone.engineOptions.audioDevice); engine->setOption(CB::ENGINE_OPTION_OSC_ENABLED, standalone.engineOptions.oscEnabled, nullptr); engine->setOption(CB::ENGINE_OPTION_OSC_PORT_TCP, standalone.engineOptions.oscPortTCP, nullptr); engine->setOption(CB::ENGINE_OPTION_OSC_PORT_UDP, standalone.engineOptions.oscPortUDP, nullptr); if (standalone.engineOptions.pathAudio != nullptr) engine->setOption(CB::ENGINE_OPTION_FILE_PATH, CB::FILE_AUDIO, standalone.engineOptions.pathAudio); if (standalone.engineOptions.pathMIDI != nullptr) engine->setOption(CB::ENGINE_OPTION_FILE_PATH, CB::FILE_MIDI, standalone.engineOptions.pathMIDI); if (standalone.engineOptions.pathLADSPA != nullptr) engine->setOption(CB::ENGINE_OPTION_PLUGIN_PATH, CB::PLUGIN_LADSPA, standalone.engineOptions.pathLADSPA); if (standalone.engineOptions.pathDSSI != nullptr) engine->setOption(CB::ENGINE_OPTION_PLUGIN_PATH, CB::PLUGIN_DSSI, standalone.engineOptions.pathDSSI); if (standalone.engineOptions.pathLV2 != nullptr) engine->setOption(CB::ENGINE_OPTION_PLUGIN_PATH, CB::PLUGIN_LV2, standalone.engineOptions.pathLV2); if (standalone.engineOptions.pathVST2 != nullptr) engine->setOption(CB::ENGINE_OPTION_PLUGIN_PATH, CB::PLUGIN_VST2, standalone.engineOptions.pathVST2); if (standalone.engineOptions.pathVST3 != nullptr) engine->setOption(CB::ENGINE_OPTION_PLUGIN_PATH, CB::PLUGIN_VST3, standalone.engineOptions.pathVST3); if (standalone.engineOptions.pathSF2 != nullptr) engine->setOption(CB::ENGINE_OPTION_PLUGIN_PATH, CB::PLUGIN_SF2, standalone.engineOptions.pathSF2); if (standalone.engineOptions.pathSFZ != nullptr) engine->setOption(CB::ENGINE_OPTION_PLUGIN_PATH, CB::PLUGIN_SFZ, standalone.engineOptions.pathSFZ); if (standalone.engineOptions.pathJSFX != nullptr) engine->setOption(CB::ENGINE_OPTION_PLUGIN_PATH, CB::PLUGIN_JSFX, standalone.engineOptions.pathJSFX); if (standalone.engineOptions.binaryDir != nullptr && standalone.engineOptions.binaryDir[0] != '\0') engine->setOption(CB::ENGINE_OPTION_PATH_BINARIES, 0, standalone.engineOptions.binaryDir); else engine->setOption(CB::ENGINE_OPTION_PATH_BINARIES, 0, waterBinaryDir.getFullPathName().toRawUTF8()); if (standalone.engineOptions.resourceDir != nullptr && standalone.engineOptions.resourceDir[0] != '\0') engine->setOption(CB::ENGINE_OPTION_PATH_RESOURCES, 0, standalone.engineOptions.resourceDir); engine->setOption(CB::ENGINE_OPTION_PREVENT_BAD_BEHAVIOUR, standalone.engineOptions.preventBadBehaviour ? 1 : 0, nullptr); engine->setOption(CB::ENGINE_OPTION_FRONTEND_BACKGROUND_COLOR, static_cast(standalone.engineOptions.bgColor), nullptr); engine->setOption(CB::ENGINE_OPTION_FRONTEND_FOREGROUND_COLOR, static_cast(standalone.engineOptions.fgColor), nullptr); engine->setOption(CB::ENGINE_OPTION_FRONTEND_UI_SCALE, static_cast(standalone.engineOptions.uiScale * 1000.0f), nullptr); if (standalone.engineOptions.frontendWinId != 0) { char strBuf[STR_MAX+1]; strBuf[STR_MAX] = '\0'; std::snprintf(strBuf, STR_MAX, P_UINTPTR, standalone.engineOptions.frontendWinId); engine->setOption(CB::ENGINE_OPTION_FRONTEND_WIN_ID, 0, strBuf); } else { engine->setOption(CB::ENGINE_OPTION_FRONTEND_WIN_ID, 0, "0"); } # ifndef CARLA_OS_WIN if (standalone.engineOptions.wine.executable != nullptr && standalone.engineOptions.wine.executable[0] != '\0') engine->setOption(CB::ENGINE_OPTION_WINE_EXECUTABLE, 0, standalone.engineOptions.wine.executable); engine->setOption(CB::ENGINE_OPTION_WINE_AUTO_PREFIX, standalone.engineOptions.wine.autoPrefix ? 1 : 0, nullptr); if (standalone.engineOptions.wine.fallbackPrefix != nullptr && standalone.engineOptions.wine.fallbackPrefix[0] != '\0') engine->setOption(CB::ENGINE_OPTION_WINE_FALLBACK_PREFIX, 0, standalone.engineOptions.wine.fallbackPrefix); engine->setOption(CB::ENGINE_OPTION_WINE_RT_PRIO_ENABLED, standalone.engineOptions.wine.rtPrio ? 1 : 0, nullptr); engine->setOption(CB::ENGINE_OPTION_WINE_BASE_RT_PRIO, standalone.engineOptions.wine.baseRtPrio, nullptr); engine->setOption(CB::ENGINE_OPTION_WINE_SERVER_RT_PRIO, standalone.engineOptions.wine.serverRtPrio, nullptr); # endif engine->setOption(CB::ENGINE_OPTION_CLIENT_NAME_PREFIX, 0, standalone.engineOptions.clientNamePrefix); engine->setOption(CB::ENGINE_OPTION_PLUGINS_ARE_STANDALONE, standalone.engineOptions.pluginsAreStandalone, nullptr); #endif // BUILD_BRIDGE } bool carla_engine_init(CarlaHostHandle handle, const char* driverName, const char* clientName) { CARLA_SAFE_ASSERT_RETURN(driverName != nullptr && driverName[0] != '\0', false); CARLA_SAFE_ASSERT_RETURN(clientName != nullptr && clientName[0] != '\0', false); carla_debug("carla_engine_init(%p, \"%s\", \"%s\")", handle, driverName, clientName); CARLA_SAFE_ASSERT_WITH_LAST_ERROR_RETURN(handle->isStandalone, "Must be a standalone host handle", false); CARLA_SAFE_ASSERT_WITH_LAST_ERROR_RETURN(handle->engine == nullptr, "Engine is already initialized", false); #ifdef CARLA_OS_WIN carla_setenv("WINEASIO_CLIENT_NAME", clientName); #endif #ifdef USING_JUCE carla_standalone_juce_init(); #endif CarlaHostStandalone& shandle((CarlaHostStandalone&)*handle); CarlaEngine* const engine = CarlaEngine::newDriverByName(driverName); CARLA_SAFE_ASSERT_WITH_LAST_ERROR_RETURN(engine != nullptr, "The selected audio driver is not available", false); shandle.engine = engine; #ifdef BUILD_BRIDGE if (std::getenv("CARLA_BRIDGE_DUMMY") != nullptr) { // engine->setOption(CB::ENGINE_OPTION_PROCESS_MODE, CB::ENGINE_PROCESS_MODE_PATCHBAY, nullptr); engine->setOption(CB::ENGINE_OPTION_PROCESS_MODE, CB::ENGINE_PROCESS_MODE_CONTINUOUS_RACK, nullptr); engine->setOption(CB::ENGINE_OPTION_TRANSPORT_MODE, CB::ENGINE_TRANSPORT_MODE_INTERNAL, nullptr); engine->setOption(CB::ENGINE_OPTION_AUDIO_BUFFER_SIZE, 4096, nullptr); engine->setOption(CB::ENGINE_OPTION_AUDIO_SAMPLE_RATE, 48000, nullptr); } else { engine->setOption(CB::ENGINE_OPTION_PROCESS_MODE, CB::ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS, nullptr); engine->setOption(CB::ENGINE_OPTION_TRANSPORT_MODE, CB::ENGINE_TRANSPORT_MODE_JACK, nullptr); } engine->setOption(CB::ENGINE_OPTION_FORCE_STEREO, false, nullptr); engine->setOption(CB::ENGINE_OPTION_PREFER_PLUGIN_BRIDGES, false, nullptr); engine->setOption(CB::ENGINE_OPTION_PREFER_UI_BRIDGES, false, nullptr); #else engine->setOption(CB::ENGINE_OPTION_PROCESS_MODE, static_cast(shandle.engineOptions.processMode), nullptr); engine->setOption(CB::ENGINE_OPTION_TRANSPORT_MODE, static_cast(shandle.engineOptions.transportMode), shandle.engineOptions.transportExtra); #endif carla_engine_init_common(shandle, engine); if (engine->init(clientName)) { #ifndef BUILD_BRIDGE if (shandle.logThreadEnabled && std::getenv("CARLA_LOGS_DISABLED") == nullptr) shandle.logThread.init(); #endif shandle.lastError = "No error"; return true; } else { shandle.lastError = engine->getLastError(); shandle.engine = nullptr; delete engine; #ifdef USING_JUCE carla_standalone_juce_cleanup(); #endif return false; } } #ifdef BUILD_BRIDGE bool carla_engine_init_bridge(CarlaHostHandle handle, const char audioBaseName[6+1], const char rtClientBaseName[6+1], const char nonRtClientBaseName[6+1], const char nonRtServerBaseName[6+1], const char* const clientName) { CARLA_SAFE_ASSERT_RETURN(audioBaseName != nullptr && audioBaseName[0] != '\0', false); CARLA_SAFE_ASSERT_RETURN(rtClientBaseName != nullptr && rtClientBaseName[0] != '\0', false); CARLA_SAFE_ASSERT_RETURN(nonRtClientBaseName != nullptr && nonRtClientBaseName[0] != '\0', false); CARLA_SAFE_ASSERT_RETURN(nonRtServerBaseName != nullptr && nonRtServerBaseName[0] != '\0', false); CARLA_SAFE_ASSERT_RETURN(clientName != nullptr && clientName[0] != '\0', false); carla_debug("carla_engine_init_bridge(%p, \"%s\", \"%s\", \"%s\", \"%s\", \"%s\")", handle, audioBaseName, rtClientBaseName, nonRtClientBaseName, nonRtServerBaseName, clientName); CARLA_SAFE_ASSERT_WITH_LAST_ERROR_RETURN(handle->isStandalone, "Must be a standalone host handle", false); CARLA_SAFE_ASSERT_WITH_LAST_ERROR_RETURN(handle->engine == nullptr, "Engine is already initialized", false); CarlaScopedPointer engine(CB::EngineInit::newBridge(audioBaseName, rtClientBaseName, nonRtClientBaseName, nonRtServerBaseName)); CARLA_SAFE_ASSERT_WITH_LAST_ERROR_RETURN(engine != nullptr, "The selected audio driver is not available", false); engine->setOption(CB::ENGINE_OPTION_PROCESS_MODE, CB::ENGINE_PROCESS_MODE_BRIDGE, nullptr); engine->setOption(CB::ENGINE_OPTION_TRANSPORT_MODE, CB::ENGINE_TRANSPORT_MODE_BRIDGE, nullptr); CarlaHostStandalone& shandle((CarlaHostStandalone&)*handle); carla_engine_init_common(shandle, engine); if (engine->init(clientName)) { shandle.lastError = "No error"; shandle.engine = engine.release(); return true; } else { shandle.lastError = engine->getLastError(); return false; } } #endif bool carla_engine_close(CarlaHostHandle handle) { carla_debug("carla_engine_close(%p)", handle); CARLA_SAFE_ASSERT_WITH_LAST_ERROR_RETURN(handle->isStandalone, "Must be a standalone host handle", false); CARLA_SAFE_ASSERT_WITH_LAST_ERROR_RETURN(handle->engine != nullptr, "Engine is not initialized", false); CarlaHostStandalone& shandle((CarlaHostStandalone&)*handle); CarlaEngine* const engine = shandle.engine; engine->setAboutToClose(); engine->removeAllPlugins(); const bool closed = engine->close(); if (! closed) shandle.lastError = engine->getLastError(); #ifndef BUILD_BRIDGE shandle.logThread.stop(); #endif shandle.engine = nullptr; delete engine; #ifdef USING_JUCE carla_standalone_juce_cleanup(); #endif return closed; } void carla_engine_idle(CarlaHostHandle handle) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr && handle->isStandalone,); handle->engine->idle(); #ifdef USING_JUCE if (handle->isStandalone) carla_standalone_juce_idle(); #endif } bool carla_is_engine_running(CarlaHostHandle handle) { return (handle->engine != nullptr && handle->engine->isRunning()); } const CarlaRuntimeEngineInfo* carla_get_runtime_engine_info(CarlaHostHandle handle) { static CarlaRuntimeEngineInfo retInfo; // reset retInfo.load = 0.0f; retInfo.xruns = 0; CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, &retInfo); retInfo.load = handle->engine->getDSPLoad(); retInfo.xruns = handle->engine->getTotalXruns(); return &retInfo; } #ifndef BUILD_BRIDGE const CarlaRuntimeEngineDriverDeviceInfo* carla_get_runtime_engine_driver_device_info(CarlaHostHandle handle) { static CarlaRuntimeEngineDriverDeviceInfo retInfo; // reset retInfo.name = gNullCharPtr; retInfo.hints = 0x0; retInfo.bufferSize = 0; retInfo.bufferSizes = nullptr; retInfo.sampleRate = 0.0; retInfo.sampleRates = nullptr; const char* audioDriver; const char* audioDevice; if (CarlaEngine* const engine = handle->engine) { audioDriver = engine->getCurrentDriverName(); audioDevice = engine->getOptions().audioDevice; retInfo.bufferSize = engine->getBufferSize(); retInfo.sampleRate = engine->getSampleRate(); } else if (handle->isStandalone) { CarlaHostStandalone& shandle((CarlaHostStandalone&)*handle); audioDriver = shandle.engineOptions.audioDriver; audioDevice = shandle.engineOptions.audioDevice; retInfo.bufferSize = shandle.engineOptions.audioBufferSize; retInfo.sampleRate = shandle.engineOptions.audioSampleRate; } else { return &retInfo; } CARLA_SAFE_ASSERT_RETURN(audioDriver != nullptr, &retInfo); CARLA_SAFE_ASSERT_RETURN(audioDevice != nullptr, &retInfo); uint index = 0; uint count = CarlaEngine::getDriverCount(); for (; indexhints; retInfo.bufferSizes = devInfo->bufferSizes; retInfo.sampleRates = devInfo->sampleRates; return &retInfo; } bool carla_set_engine_buffer_size_and_sample_rate(CarlaHostHandle handle, uint bufferSize, double sampleRate) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, false); carla_debug("carla_set_engine_buffer_size_and_sample_rate(%p, %u, %f)", handle, bufferSize, sampleRate); return handle->engine->setBufferSizeAndSampleRate(bufferSize, sampleRate); } bool carla_show_engine_device_control_panel(CarlaHostHandle handle) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, false); carla_debug("carla_show_engine_device_control_panel(%p)", handle); return handle->engine->showDeviceControlPanel(); } #endif // BUILD_BRIDGE void carla_clear_engine_xruns(CarlaHostHandle handle) { if (handle->engine != nullptr) handle->engine->clearXruns(); } void carla_cancel_engine_action(CarlaHostHandle handle) { if (handle->engine != nullptr) handle->engine->setActionCanceled(true); } bool carla_set_engine_about_to_close(CarlaHostHandle handle) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, true); carla_debug("carla_set_engine_about_to_close(%p)", handle); return handle->engine->setAboutToClose(); } void carla_set_engine_callback(CarlaHostHandle handle, EngineCallbackFunc func, void* ptr) { carla_debug("carla_set_engine_callback(%p, %p, %p)", handle, func, ptr); if (handle->isStandalone) { CarlaHostStandalone& shandle((CarlaHostStandalone&)*handle); shandle.engineCallback = func; shandle.engineCallbackPtr = ptr; #ifndef BUILD_BRIDGE shandle.logThread.setCallback(func, ptr); #endif } if (handle->engine != nullptr) handle->engine->setCallback(func, ptr); } void carla_set_engine_option(CarlaHostHandle handle, EngineOption option, int value, const char* valueStr) { carla_debug("carla_set_engine_option(%p, %i:%s, %i, \"%s\")", handle, option, CB::EngineOption2Str(option), value, valueStr); if (handle->isStandalone) { CarlaHostStandalone& shandle((CarlaHostStandalone&)*handle); switch (option) { case CB::ENGINE_OPTION_DEBUG: break; case CB::ENGINE_OPTION_PROCESS_MODE: CARLA_SAFE_ASSERT_RETURN(value >= CB::ENGINE_PROCESS_MODE_SINGLE_CLIENT && value < CB::ENGINE_PROCESS_MODE_BRIDGE,); shandle.engineOptions.processMode = static_cast(value); break; case CB::ENGINE_OPTION_TRANSPORT_MODE: CARLA_SAFE_ASSERT_RETURN(value >= CB::ENGINE_TRANSPORT_MODE_DISABLED && value <= CB::ENGINE_TRANSPORT_MODE_BRIDGE,); // jack transport cannot be disabled in multi-client if (shandle.engineOptions.processMode == CB::ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS && value != CB::ENGINE_TRANSPORT_MODE_JACK) { shandle.engineOptions.transportMode = CB::ENGINE_TRANSPORT_MODE_JACK; if (shandle.engineCallback != nullptr) shandle.engineCallback(shandle.engineCallbackPtr, CB::ENGINE_CALLBACK_TRANSPORT_MODE_CHANGED, 0, CB::ENGINE_TRANSPORT_MODE_JACK, 0, 0, 0.0f, shandle.engineOptions.transportExtra); } else { shandle.engineOptions.transportMode = static_cast(value); } delete[] shandle.engineOptions.transportExtra; if (value != CB::ENGINE_TRANSPORT_MODE_DISABLED && valueStr != nullptr) shandle.engineOptions.transportExtra = carla_strdup_safe(valueStr); else shandle.engineOptions.transportExtra = nullptr; break; case CB::ENGINE_OPTION_FORCE_STEREO: CARLA_SAFE_ASSERT_RETURN(value == 0 || value == 1,); shandle.engineOptions.forceStereo = (value != 0); break; case CB::ENGINE_OPTION_PREFER_PLUGIN_BRIDGES: CARLA_SAFE_ASSERT_RETURN(value == 0 || value == 1,); shandle.engineOptions.preferPluginBridges = (value != 0); break; case CB::ENGINE_OPTION_PREFER_UI_BRIDGES: CARLA_SAFE_ASSERT_RETURN(value == 0 || value == 1,); shandle.engineOptions.preferUiBridges = (value != 0); break; case CB::ENGINE_OPTION_UIS_ALWAYS_ON_TOP: CARLA_SAFE_ASSERT_RETURN(value == 0 || value == 1,); shandle.engineOptions.uisAlwaysOnTop = (value != 0); break; case CB::ENGINE_OPTION_MAX_PARAMETERS: CARLA_SAFE_ASSERT_RETURN(value >= 0,); shandle.engineOptions.maxParameters = static_cast(value); break; case CB::ENGINE_OPTION_RESET_XRUNS: CARLA_SAFE_ASSERT_RETURN(value == 0 || value == 1,); shandle.engineOptions.resetXruns = (value != 0); break; case CB::ENGINE_OPTION_UI_BRIDGES_TIMEOUT: CARLA_SAFE_ASSERT_RETURN(value >= 0,); shandle.engineOptions.uiBridgesTimeout = static_cast(value); break; case CB::ENGINE_OPTION_AUDIO_BUFFER_SIZE: CARLA_SAFE_ASSERT_RETURN(value >= 8,); shandle.engineOptions.audioBufferSize = static_cast(value); break; case CB::ENGINE_OPTION_AUDIO_SAMPLE_RATE: CARLA_SAFE_ASSERT_RETURN(value >= 22050,); shandle.engineOptions.audioSampleRate = static_cast(value); break; case CB::ENGINE_OPTION_AUDIO_TRIPLE_BUFFER: CARLA_SAFE_ASSERT_RETURN(value == 0 || value == 1,); shandle.engineOptions.audioTripleBuffer = (value != 0); break; case CB::ENGINE_OPTION_AUDIO_DRIVER: CARLA_SAFE_ASSERT_RETURN(valueStr != nullptr,); if (shandle.engineOptions.audioDriver != nullptr) delete[] shandle.engineOptions.audioDriver; shandle.engineOptions.audioDriver = carla_strdup_safe(valueStr); break; case CB::ENGINE_OPTION_AUDIO_DEVICE: CARLA_SAFE_ASSERT_RETURN(valueStr != nullptr,); if (shandle.engineOptions.audioDevice != nullptr) delete[] shandle.engineOptions.audioDevice; shandle.engineOptions.audioDevice = carla_strdup_safe(valueStr); break; #ifndef BUILD_BRIDGE case CB::ENGINE_OPTION_OSC_ENABLED: CARLA_SAFE_ASSERT_RETURN(value == 0 || value == 1,); shandle.engineOptions.oscEnabled = (value != 0); break; case CB::ENGINE_OPTION_OSC_PORT_TCP: CARLA_SAFE_ASSERT_RETURN(value <= 0 || value >= 1024,); shandle.engineOptions.oscPortTCP = value; break; case CB::ENGINE_OPTION_OSC_PORT_UDP: CARLA_SAFE_ASSERT_RETURN(value <= 0 || value >= 1024,); shandle.engineOptions.oscPortUDP = value; break; #endif case CB::ENGINE_OPTION_FILE_PATH: CARLA_SAFE_ASSERT_RETURN(value > CB::FILE_NONE,); CARLA_SAFE_ASSERT_RETURN(value <= CB::FILE_MIDI,); CARLA_SAFE_ASSERT_RETURN(valueStr != nullptr,); switch (value) { case CB::FILE_AUDIO: if (shandle.engineOptions.pathAudio != nullptr) delete[] shandle.engineOptions.pathAudio; shandle.engineOptions.pathAudio = carla_strdup_safe(valueStr); break; case CB::FILE_MIDI: if (shandle.engineOptions.pathMIDI != nullptr) delete[] shandle.engineOptions.pathMIDI; shandle.engineOptions.pathMIDI = carla_strdup_safe(valueStr); break; } break; case CB::ENGINE_OPTION_PLUGIN_PATH: CARLA_SAFE_ASSERT_RETURN(value > CB::PLUGIN_NONE,); CARLA_SAFE_ASSERT_RETURN(value <= CB::PLUGIN_JSFX,); CARLA_SAFE_ASSERT_RETURN(valueStr != nullptr,); switch (value) { case CB::PLUGIN_LADSPA: if (shandle.engineOptions.pathLADSPA != nullptr) delete[] shandle.engineOptions.pathLADSPA; shandle.engineOptions.pathLADSPA = carla_strdup_safe(valueStr); break; case CB::PLUGIN_DSSI: if (shandle.engineOptions.pathDSSI != nullptr) delete[] shandle.engineOptions.pathDSSI; shandle.engineOptions.pathDSSI = carla_strdup_safe(valueStr); break; case CB::PLUGIN_LV2: if (shandle.engineOptions.pathLV2 != nullptr) delete[] shandle.engineOptions.pathLV2; shandle.engineOptions.pathLV2 = carla_strdup_safe(valueStr); break; case CB::PLUGIN_VST2: if (shandle.engineOptions.pathVST2 != nullptr) delete[] shandle.engineOptions.pathVST2; shandle.engineOptions.pathVST2 = carla_strdup_safe(valueStr); break; case CB::PLUGIN_VST3: if (shandle.engineOptions.pathVST3 != nullptr) delete[] shandle.engineOptions.pathVST3; shandle.engineOptions.pathVST3 = carla_strdup_safe(valueStr); break; case CB::PLUGIN_SF2: if (shandle.engineOptions.pathSF2 != nullptr) delete[] shandle.engineOptions.pathSF2; shandle.engineOptions.pathSF2 = carla_strdup_safe(valueStr); break; case CB::PLUGIN_SFZ: if (shandle.engineOptions.pathSFZ != nullptr) delete[] shandle.engineOptions.pathSFZ; shandle.engineOptions.pathSFZ = carla_strdup_safe(valueStr); break; case CB::PLUGIN_JSFX: if (shandle.engineOptions.pathJSFX != nullptr) delete[] shandle.engineOptions.pathJSFX; shandle.engineOptions.pathJSFX = carla_strdup_safe(valueStr); break; } break; case CB::ENGINE_OPTION_PATH_BINARIES: CARLA_SAFE_ASSERT_RETURN(valueStr != nullptr && valueStr[0] != '\0',); if (shandle.engineOptions.binaryDir != nullptr) delete[] shandle.engineOptions.binaryDir; shandle.engineOptions.binaryDir = carla_strdup_safe(valueStr); break; case CB::ENGINE_OPTION_PATH_RESOURCES: CARLA_SAFE_ASSERT_RETURN(valueStr != nullptr && valueStr[0] != '\0',); if (shandle.engineOptions.resourceDir != nullptr) delete[] shandle.engineOptions.resourceDir; shandle.engineOptions.resourceDir = carla_strdup_safe(valueStr); break; case CB::ENGINE_OPTION_PREVENT_BAD_BEHAVIOUR: CARLA_SAFE_ASSERT_RETURN(value == 0 || value == 1,); shandle.engineOptions.preventBadBehaviour = (value != 0); break; case CB::ENGINE_OPTION_FRONTEND_BACKGROUND_COLOR: shandle.engineOptions.bgColor = static_cast(value); break; case CB::ENGINE_OPTION_FRONTEND_FOREGROUND_COLOR: shandle.engineOptions.fgColor = static_cast(value); break; case CB::ENGINE_OPTION_FRONTEND_UI_SCALE: CARLA_SAFE_ASSERT_RETURN(value > 0,); shandle.engineOptions.uiScale = static_cast(value) / 1000; break; case CB::ENGINE_OPTION_FRONTEND_WIN_ID: { CARLA_SAFE_ASSERT_RETURN(valueStr != nullptr && valueStr[0] != '\0',); const long long winId(std::strtoll(valueStr, nullptr, 16)); CARLA_SAFE_ASSERT_RETURN(winId >= 0,); shandle.engineOptions.frontendWinId = static_cast(winId); } break; #if !defined(BUILD_BRIDGE_ALTERNATIVE_ARCH) && !defined(CARLA_OS_WIN) case CB::ENGINE_OPTION_WINE_EXECUTABLE: CARLA_SAFE_ASSERT_RETURN(valueStr != nullptr && valueStr[0] != '\0',); if (shandle.engineOptions.wine.executable != nullptr) delete[] shandle.engineOptions.wine.executable; shandle.engineOptions.wine.executable = carla_strdup_safe(valueStr); break; case CB::ENGINE_OPTION_WINE_AUTO_PREFIX: CARLA_SAFE_ASSERT_RETURN(value == 0 || value == 1,); shandle.engineOptions.wine.autoPrefix = (value != 0); break; case CB::ENGINE_OPTION_WINE_FALLBACK_PREFIX: CARLA_SAFE_ASSERT_RETURN(valueStr != nullptr && valueStr[0] != '\0',); if (shandle.engineOptions.wine.fallbackPrefix != nullptr) delete[] shandle.engineOptions.wine.fallbackPrefix; shandle.engineOptions.wine.fallbackPrefix = carla_strdup_safe(valueStr); break; case CB::ENGINE_OPTION_WINE_RT_PRIO_ENABLED: CARLA_SAFE_ASSERT_RETURN(value == 0 || value == 1,); shandle.engineOptions.wine.rtPrio = (value != 0); break; case CB::ENGINE_OPTION_WINE_BASE_RT_PRIO: CARLA_SAFE_ASSERT_RETURN(value >= 1 && value <= 89,); shandle.engineOptions.wine.baseRtPrio = value; break; case CB::ENGINE_OPTION_WINE_SERVER_RT_PRIO: CARLA_SAFE_ASSERT_RETURN(value >= 1 && value <= 99,); shandle.engineOptions.wine.serverRtPrio = value; break; #endif #ifndef BUILD_BRIDGE case CB::ENGINE_OPTION_DEBUG_CONSOLE_OUTPUT: shandle.logThreadEnabled = (value != 0); break; #endif case CB::ENGINE_OPTION_CLIENT_NAME_PREFIX: if (shandle.engineOptions.clientNamePrefix != nullptr) delete[] shandle.engineOptions.clientNamePrefix; shandle.engineOptions.clientNamePrefix = valueStr != nullptr && valueStr[0] != '\0' ? carla_strdup_safe(valueStr) : nullptr; break; case CB::ENGINE_OPTION_PLUGINS_ARE_STANDALONE: CARLA_SAFE_ASSERT_RETURN(value == 0 || value == 1,); shandle.engineOptions.pluginsAreStandalone = (value != 0); break; } } if (handle->engine != nullptr) handle->engine->setOption(option, value, valueStr); } void carla_set_file_callback(CarlaHostHandle handle, FileCallbackFunc func, void* ptr) { carla_debug("carla_set_file_callback(%p, %p, %p)", handle, func, ptr); if (handle->isStandalone) { CarlaHostStandalone& shandle((CarlaHostStandalone&)*handle); shandle.fileCallback = func; shandle.fileCallbackPtr = ptr; } if (handle->engine != nullptr) handle->engine->setFileCallback(func, ptr); } // -------------------------------------------------------------------------------------------------------------------- bool carla_load_file(CarlaHostHandle handle, const char* filename) { CARLA_SAFE_ASSERT_RETURN(filename != nullptr && filename[0] != '\0', false); CARLA_SAFE_ASSERT_WITH_LAST_ERROR_RETURN(handle->engine != nullptr, "Engine is not initialized", false); carla_debug("carla_load_file(%p, \"%s\")", handle, filename); return handle->engine->loadFile(filename); } bool carla_load_project(CarlaHostHandle handle, const char* filename) { CARLA_SAFE_ASSERT_RETURN(filename != nullptr && filename[0] != '\0', false); CARLA_SAFE_ASSERT_WITH_LAST_ERROR_RETURN(handle->engine != nullptr, "Engine is not initialized", false); carla_debug("carla_load_project(%p, \"%s\")", handle, filename); return handle->engine->loadProject(filename, true); } bool carla_save_project(CarlaHostHandle handle, const char* filename) { CARLA_SAFE_ASSERT_RETURN(filename != nullptr && filename[0] != '\0', false); CARLA_SAFE_ASSERT_WITH_LAST_ERROR_RETURN(handle->engine != nullptr, "Engine is not initialized", false); carla_debug("carla_save_project(%p, \"%s\")", handle, filename); return handle->engine->saveProject(filename, true); } #ifndef BUILD_BRIDGE const char* carla_get_current_project_folder(CarlaHostHandle handle) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, gNullCharPtr); carla_debug("carla_get_current_project_folder(%p)", handle); if (const char* const ret = handle->engine->getCurrentProjectFolder()) return ret; return gNullCharPtr; } const char* carla_get_current_project_filename(CarlaHostHandle handle) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr && handle->isStandalone, gNullCharPtr); carla_debug("carla_get_current_project_filename(%p)", handle); if (const char* const ret = handle->engine->getCurrentProjectFilename()) return ret; return gNullCharPtr; } void carla_clear_project_filename(CarlaHostHandle handle) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr,); carla_debug("carla_clear_project_filename(%p)", handle); handle->engine->clearCurrentProjectFilename(); } // -------------------------------------------------------------------------------------------------------------------- bool carla_patchbay_connect(CarlaHostHandle handle, bool external, uint groupIdA, uint portIdA, uint groupIdB, uint portIdB) { CARLA_SAFE_ASSERT_WITH_LAST_ERROR_RETURN(handle->engine != nullptr, "Engine is not initialized", false); carla_debug("carla_patchbay_connect(%p, %s, %u, %u, %u, %u)", handle, bool2str(external), groupIdA, portIdA, groupIdB, portIdB); return handle->engine->patchbayConnect(external, groupIdA, portIdA, groupIdB, portIdB); } bool carla_patchbay_disconnect(CarlaHostHandle handle, bool external, uint connectionId) { CARLA_SAFE_ASSERT_WITH_LAST_ERROR_RETURN(handle->engine != nullptr, "Engine is not initialized", false); carla_debug("carla_patchbay_disconnect(%p, %s, %i)", handle, bool2str(external), connectionId); return handle->engine->patchbayDisconnect(external, connectionId); } bool carla_patchbay_set_group_pos(CarlaHostHandle handle, bool external, uint groupId, int x1, int y1, int x2, int y2) { CARLA_SAFE_ASSERT_WITH_LAST_ERROR_RETURN(handle->engine != nullptr && handle->engine->isRunning(), "Engine is not running", false); carla_debug("carla_patchbay_set_group_pos(%p, %s, %u, %i, %i, %i, %i)", handle, bool2str(external), groupId, x1, y1, x2, y2); if (handle->engine->isAboutToClose()) return true; return handle->engine->patchbaySetGroupPos(false, true, external, groupId, x1, y1, x2, y2); } bool carla_patchbay_refresh(CarlaHostHandle handle, bool external) { CARLA_SAFE_ASSERT_WITH_LAST_ERROR_RETURN(handle->engine != nullptr, "Engine is not initialized", false); carla_debug("carla_patchbay_refresh(%p, %s)", handle, bool2str(external)); return handle->engine->patchbayRefresh(true, false, external); } // -------------------------------------------------------------------------------------------------------------------- void carla_transport_play(CarlaHostHandle handle) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr && handle->engine->isRunning(),); carla_debug("carla_transport_play(%p)", handle); handle->engine->transportPlay(); } void carla_transport_pause(CarlaHostHandle handle) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr && handle->engine->isRunning(),); carla_debug("carla_transport_pause(%p)", handle); handle->engine->transportPause(); } void carla_transport_bpm(CarlaHostHandle handle, double bpm) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr && handle->engine->isRunning(),); carla_debug("carla_transport_bpm(%p, %f)", handle, bpm); handle->engine->transportBPM(bpm); } void carla_transport_relocate(CarlaHostHandle handle, uint64_t frame) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr && handle->engine->isRunning(),); carla_debug("carla_transport_relocate(%p, %i)", handle, frame); handle->engine->transportRelocate(frame); } uint64_t carla_get_current_transport_frame(CarlaHostHandle handle) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr && handle->engine->isRunning(), 0); return handle->engine->getTimeInfo().frame; } const CarlaTransportInfo* carla_get_transport_info(CarlaHostHandle handle) { static CarlaTransportInfo retTransInfo; retTransInfo.clear(); CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr && handle->engine->isRunning(), &retTransInfo); const CB::EngineTimeInfo& timeInfo(handle->engine->getTimeInfo()); retTransInfo.playing = timeInfo.playing; retTransInfo.frame = timeInfo.frame; if (timeInfo.bbt.valid) { retTransInfo.bar = timeInfo.bbt.bar; retTransInfo.beat = timeInfo.bbt.beat; retTransInfo.tick = static_cast(timeInfo.bbt.tick + 0.5); retTransInfo.bpm = timeInfo.bbt.beatsPerMinute; } return &retTransInfo; } #endif // -------------------------------------------------------------------------------------------------------------------- uint32_t carla_get_current_plugin_count(CarlaHostHandle handle) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, 0); carla_debug("carla_get_current_plugin_count(%p)", handle); return handle->engine->getCurrentPluginCount(); } uint32_t carla_get_max_plugin_number(CarlaHostHandle handle) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, 0); carla_debug("carla_get_max_plugin_number(%p)", handle); return handle->engine->getMaxPluginNumber(); } // -------------------------------------------------------------------------------------------------------------------- bool carla_add_plugin(CarlaHostHandle handle, BinaryType btype, PluginType ptype, const char* filename, const char* name, const char* label, int64_t uniqueId, const void* extraPtr, uint options) { CARLA_SAFE_ASSERT_WITH_LAST_ERROR_RETURN(handle->engine != nullptr, "Engine is not initialized", false); carla_debug("carla_add_plugin(%p, %i:%s, %i:%s, \"%s\", \"%s\", \"%s\", " P_INT64 ", %p, %u)", handle, btype, CB::BinaryType2Str(btype), ptype, CB::PluginType2Str(ptype), filename, name, label, uniqueId, extraPtr, options); return handle->engine->addPlugin(btype, ptype, filename, name, label, uniqueId, extraPtr, options); } bool carla_remove_plugin(CarlaHostHandle handle, uint pluginId) { CARLA_SAFE_ASSERT_WITH_LAST_ERROR_RETURN(handle->engine != nullptr, "Engine is not initialized", false); carla_debug("carla_remove_plugin(%p, %i)", handle, pluginId); return handle->engine->removePlugin(pluginId); } bool carla_remove_all_plugins(CarlaHostHandle handle) { CARLA_SAFE_ASSERT_WITH_LAST_ERROR_RETURN(handle->engine != nullptr, "Engine is not initialized", false); carla_debug("carla_remove_all_plugins(%p)", handle); return handle->engine->removeAllPlugins(); } #ifndef BUILD_BRIDGE bool carla_rename_plugin(CarlaHostHandle handle, uint pluginId, const char* newName) { CARLA_SAFE_ASSERT_RETURN(newName != nullptr && newName[0] != '\0', false); CARLA_SAFE_ASSERT_WITH_LAST_ERROR_RETURN(handle->engine != nullptr, "Engine is not initialized", false); carla_debug("carla_rename_plugin(%p, %i, \"%s\")", handle, pluginId, newName); return handle->engine->renamePlugin(pluginId, newName); } bool carla_clone_plugin(CarlaHostHandle handle, uint pluginId) { CARLA_SAFE_ASSERT_WITH_LAST_ERROR_RETURN(handle->engine != nullptr, "Engine is not initialized", false); carla_debug("carla_clone_plugin(%p, %i)", handle, pluginId); return handle->engine->clonePlugin(pluginId); } bool carla_replace_plugin(CarlaHostHandle handle, uint pluginId) { CARLA_SAFE_ASSERT_WITH_LAST_ERROR_RETURN(handle->engine != nullptr, "Engine is not initialized", false); carla_debug("carla_replace_plugin(%p, %i)", handle, pluginId); return handle->engine->replacePlugin(pluginId); } bool carla_switch_plugins(CarlaHostHandle handle, uint pluginIdA, uint pluginIdB) { CARLA_SAFE_ASSERT_RETURN(pluginIdA != pluginIdB, false); CARLA_SAFE_ASSERT_WITH_LAST_ERROR_RETURN(handle->engine != nullptr, "Engine is not initialized", false); carla_debug("carla_switch_plugins(%p, %i, %i)", handle, pluginIdA, pluginIdB); return handle->engine->switchPlugins(pluginIdA, pluginIdB); } #endif // -------------------------------------------------------------------------------------------------------------------- bool carla_load_plugin_state(CarlaHostHandle handle, uint pluginId, const char* filename) { CARLA_SAFE_ASSERT_RETURN(filename != nullptr && filename[0] != '\0', false); CARLA_SAFE_ASSERT_WITH_LAST_ERROR_RETURN(handle->engine != nullptr && handle->engine->isRunning(), "Engine is not running", false); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) return plugin->loadStateFromFile(filename); return false; } bool carla_save_plugin_state(CarlaHostHandle handle, uint pluginId, const char* filename) { CARLA_SAFE_ASSERT_RETURN(filename != nullptr && filename[0] != '\0', false); CARLA_SAFE_ASSERT_WITH_LAST_ERROR_RETURN(handle->engine != nullptr, "Engine is not initialized", false); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) return plugin->saveStateToFile(filename); return false; } bool carla_export_plugin_lv2(CarlaHostHandle handle, uint pluginId, const char* lv2path) { CARLA_SAFE_ASSERT_RETURN(lv2path != nullptr && lv2path[0] != '\0', false); CARLA_SAFE_ASSERT_WITH_LAST_ERROR_RETURN(handle->engine != nullptr, "Engine is not initialized", false); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) return plugin->exportAsLV2(lv2path); return false; } // -------------------------------------------------------------------------------------------------------------------- const CarlaPluginInfo* carla_get_plugin_info(CarlaHostHandle handle, uint pluginId) { static CarlaPluginInfo retInfo; // reset retInfo.type = CB::PLUGIN_NONE; retInfo.category = CB::PLUGIN_CATEGORY_NONE; retInfo.hints = 0x0; retInfo.optionsAvailable = 0x0; retInfo.optionsEnabled = 0x0; retInfo.filename = gNullCharPtr; retInfo.name = gNullCharPtr; retInfo.iconName = gNullCharPtr; retInfo.uniqueId = 0; // cleanup if (retInfo.label != gNullCharPtr) { delete[] retInfo.label; retInfo.label = gNullCharPtr; } if (retInfo.maker != gNullCharPtr) { delete[] retInfo.maker; retInfo.maker = gNullCharPtr; } if (retInfo.copyright != gNullCharPtr) { delete[] retInfo.copyright; retInfo.copyright = gNullCharPtr; } CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, &retInfo); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) { char strBuf[STR_MAX+1]; carla_zeroChars(strBuf, STR_MAX+1); retInfo.type = plugin->getType(); retInfo.category = plugin->getCategory(); retInfo.hints = plugin->getHints(); retInfo.filename = plugin->getFilename(); retInfo.name = plugin->getName(); retInfo.iconName = plugin->getIconName(); retInfo.uniqueId = plugin->getUniqueId(); retInfo.optionsAvailable = plugin->getOptionsAvailable(); retInfo.optionsEnabled = plugin->getOptionsEnabled(); if (plugin->getLabel(strBuf)) retInfo.label = carla_strdup_safe(strBuf); if (plugin->getMaker(strBuf)) retInfo.maker = carla_strdup_safe(strBuf); if (plugin->getCopyright(strBuf)) retInfo.copyright = carla_strdup_safe(strBuf); checkStringPtr(retInfo.filename); checkStringPtr(retInfo.name); checkStringPtr(retInfo.iconName); checkStringPtr(retInfo.label); checkStringPtr(retInfo.maker); checkStringPtr(retInfo.copyright); } return &retInfo; } const CarlaPortCountInfo* carla_get_audio_port_count_info(CarlaHostHandle handle, uint pluginId) { static CarlaPortCountInfo retInfo; carla_zeroStruct(retInfo); CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, &retInfo); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) { retInfo.ins = plugin->getAudioInCount(); retInfo.outs = plugin->getAudioOutCount(); } return &retInfo; } const CarlaPortCountInfo* carla_get_midi_port_count_info(CarlaHostHandle handle, uint pluginId) { static CarlaPortCountInfo retInfo; carla_zeroStruct(retInfo); CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, &retInfo); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) { retInfo.ins = plugin->getMidiInCount(); retInfo.outs = plugin->getMidiOutCount(); } return &retInfo; } const CarlaPortCountInfo* carla_get_parameter_count_info(CarlaHostHandle handle, uint pluginId) { static CarlaPortCountInfo retInfo; carla_zeroStruct(retInfo); CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, &retInfo); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) plugin->getParameterCountInfo(retInfo.ins, retInfo.outs); return &retInfo; } const CarlaParameterInfo* carla_get_parameter_info(CarlaHostHandle handle, uint pluginId, uint32_t parameterId) { static CarlaParameterInfo retInfo; // reset retInfo.scalePointCount = 0; // cleanup if (retInfo.name != gNullCharPtr) { delete[] retInfo.name; retInfo.name = gNullCharPtr; } if (retInfo.symbol != gNullCharPtr) { delete[] retInfo.symbol; retInfo.symbol = gNullCharPtr; } if (retInfo.unit != gNullCharPtr) { delete[] retInfo.unit; retInfo.unit = gNullCharPtr; } if (retInfo.comment != gNullCharPtr) { delete[] retInfo.comment; retInfo.comment = gNullCharPtr; } if (retInfo.groupName != gNullCharPtr) { delete[] retInfo.groupName; retInfo.groupName = gNullCharPtr; } CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, &retInfo); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) { char strBuf[STR_MAX+1]; carla_zeroChars(strBuf, STR_MAX+1); retInfo.scalePointCount = plugin->getParameterScalePointCount(parameterId); if (plugin->getParameterName(parameterId, strBuf)) { retInfo.name = carla_strdup_safe(strBuf); carla_zeroChars(strBuf, STR_MAX+1); } if (plugin->getParameterSymbol(parameterId, strBuf)) { retInfo.symbol = carla_strdup_safe(strBuf); carla_zeroChars(strBuf, STR_MAX+1); } if (plugin->getParameterUnit(parameterId, strBuf)) { retInfo.unit = carla_strdup_safe(strBuf); carla_zeroChars(strBuf, STR_MAX+1); } if (plugin->getParameterComment(parameterId, strBuf)) { retInfo.comment = carla_strdup_safe(strBuf); carla_zeroChars(strBuf, STR_MAX+1); } if (plugin->getParameterGroupName(parameterId, strBuf)) { retInfo.groupName = carla_strdup_safe(strBuf); carla_zeroChars(strBuf, STR_MAX+1); } checkStringPtr(retInfo.name); checkStringPtr(retInfo.symbol); checkStringPtr(retInfo.unit); checkStringPtr(retInfo.comment); checkStringPtr(retInfo.groupName); } return &retInfo; } const CarlaScalePointInfo* carla_get_parameter_scalepoint_info(CarlaHostHandle handle, uint pluginId, uint32_t parameterId, uint32_t scalePointId) { CARLA_ASSERT(handle->engine != nullptr); static CarlaScalePointInfo retInfo; // reset retInfo.value = 0.0f; // cleanup if (retInfo.label != gNullCharPtr) { delete[] retInfo.label; retInfo.label = gNullCharPtr; } CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, &retInfo); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) { char strBuf[STR_MAX+1]; retInfo.value = plugin->getParameterScalePointValue(parameterId, scalePointId); carla_zeroChars(strBuf, STR_MAX+1); if (plugin->getParameterScalePointLabel(parameterId, scalePointId, strBuf)) retInfo.label = carla_strdup_safe(strBuf); checkStringPtr(retInfo.label); } return &retInfo; } // -------------------------------------------------------------------------------------------------------------------- uint carla_get_audio_port_hints(CarlaHostHandle handle, uint pluginId, bool isOutput, uint32_t portIndex) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, 0x0); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) { CARLA_SAFE_ASSERT_RETURN(portIndex < (isOutput ? plugin->getAudioOutCount() : plugin->getAudioInCount()), 0x0); return plugin->getAudioPortHints(isOutput, portIndex); } return 0x0; } // -------------------------------------------------------------------------------------------------------------------- const ParameterData* carla_get_parameter_data(CarlaHostHandle handle, uint pluginId, uint32_t parameterId) { static ParameterData retParamData; // reset retParamData.type = CB::PARAMETER_UNKNOWN; retParamData.hints = 0x0; retParamData.index = CB::PARAMETER_NULL; retParamData.rindex = -1; retParamData.midiChannel = 0; retParamData.mappedControlIndex = CB::CONTROL_INDEX_NONE; retParamData.mappedMinimum = 0.0f; retParamData.mappedMaximum = 0.0f; CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, &retParamData); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) { CARLA_SAFE_ASSERT_RETURN(parameterId < plugin->getParameterCount(), &retParamData); const ParameterData& pluginParamData(plugin->getParameterData(parameterId)); retParamData.type = pluginParamData.type; retParamData.hints = pluginParamData.hints; retParamData.index = pluginParamData.index; retParamData.rindex = pluginParamData.rindex; retParamData.midiChannel = pluginParamData.midiChannel; retParamData.mappedControlIndex = pluginParamData.mappedControlIndex; retParamData.mappedMinimum = pluginParamData.mappedMinimum; retParamData.mappedMaximum = pluginParamData.mappedMaximum; } return &retParamData; } const ParameterRanges* carla_get_parameter_ranges(CarlaHostHandle handle, uint pluginId, uint32_t parameterId) { static ParameterRanges retParamRanges; // reset retParamRanges.def = 0.0f; retParamRanges.min = 0.0f; retParamRanges.max = 1.0f; retParamRanges.step = 0.01f; retParamRanges.stepSmall = 0.0001f; retParamRanges.stepLarge = 0.1f; CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, &retParamRanges); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) { CARLA_SAFE_ASSERT_RETURN(parameterId < plugin->getParameterCount(), &retParamRanges); const ParameterRanges& pluginParamRanges(plugin->getParameterRanges(parameterId)); retParamRanges.def = pluginParamRanges.def; retParamRanges.min = pluginParamRanges.min; retParamRanges.max = pluginParamRanges.max; retParamRanges.step = pluginParamRanges.step; retParamRanges.stepSmall = pluginParamRanges.stepSmall; retParamRanges.stepLarge = pluginParamRanges.stepLarge; } return &retParamRanges; } const MidiProgramData* carla_get_midi_program_data(CarlaHostHandle handle, uint pluginId, uint32_t midiProgramId) { static MidiProgramData retMidiProgData = { 0, 0, gNullCharPtr }; // reset retMidiProgData.bank = 0; retMidiProgData.program = 0; if (retMidiProgData.name != gNullCharPtr) { delete[] retMidiProgData.name; retMidiProgData.name = gNullCharPtr; } CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, &retMidiProgData); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) { CARLA_SAFE_ASSERT_RETURN(midiProgramId < plugin->getMidiProgramCount(), &retMidiProgData); const MidiProgramData& pluginMidiProgData(plugin->getMidiProgramData(midiProgramId)); retMidiProgData.bank = pluginMidiProgData.bank; retMidiProgData.program = pluginMidiProgData.program; if (pluginMidiProgData.name != nullptr) { retMidiProgData.name = carla_strdup_safe(pluginMidiProgData.name); checkStringPtr(retMidiProgData.name); } else { retMidiProgData.name = gNullCharPtr; } } return &retMidiProgData; } const CustomData* carla_get_custom_data(CarlaHostHandle handle, uint pluginId, uint32_t customDataId) { static CustomData retCustomData = { gNullCharPtr, gNullCharPtr, gNullCharPtr }; // reset if (retCustomData.type != gNullCharPtr) { delete[] retCustomData.type; retCustomData.type = gNullCharPtr; } if (retCustomData.key != gNullCharPtr) { delete[] retCustomData.key; retCustomData.key = gNullCharPtr; } if (retCustomData.value != gNullCharPtr) { delete[] retCustomData.value; retCustomData.value = gNullCharPtr; } CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, &retCustomData); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) { CARLA_SAFE_ASSERT_RETURN(customDataId < plugin->getCustomDataCount(), &retCustomData) const CustomData& pluginCustomData(plugin->getCustomData(customDataId)); retCustomData.type = carla_strdup_safe(pluginCustomData.type); retCustomData.key = carla_strdup_safe(pluginCustomData.key); retCustomData.value = carla_strdup_safe(pluginCustomData.value); checkStringPtr(retCustomData.type); checkStringPtr(retCustomData.key); checkStringPtr(retCustomData.value); } return &retCustomData; } const char* carla_get_custom_data_value(CarlaHostHandle handle, uint pluginId, const char* type, const char* key) { CARLA_SAFE_ASSERT_RETURN(type != nullptr && type[0] != '\0', gNullCharPtr); CARLA_SAFE_ASSERT_RETURN(key != nullptr && key[0] != '\0', gNullCharPtr); CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, gNullCharPtr); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) { const uint32_t count = plugin->getCustomDataCount(); if (count == 0) return gNullCharPtr; static CarlaString customDataValue; for (uint32_t i=0; igetCustomData(i)); if (std::strcmp(pluginCustomData.type, type) != 0) continue; if (std::strcmp(pluginCustomData.key, key) != 0) continue; customDataValue = pluginCustomData.value; return customDataValue.buffer(); } } return gNullCharPtr; } const char* carla_get_chunk_data(CarlaHostHandle handle, uint pluginId) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, gNullCharPtr); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) { CARLA_SAFE_ASSERT_RETURN(plugin->getOptionsEnabled() & CB::PLUGIN_OPTION_USE_CHUNKS, gNullCharPtr); void* data = nullptr; const std::size_t dataSize(plugin->getChunkData(&data)); CARLA_SAFE_ASSERT_RETURN(data != nullptr && dataSize > 0, gNullCharPtr); static CarlaString chunkData; chunkData = CarlaString::asBase64(data, static_cast(dataSize)); return chunkData.buffer(); } return gNullCharPtr; } // -------------------------------------------------------------------------------------------------------------------- uint32_t carla_get_parameter_count(CarlaHostHandle handle, uint pluginId) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, 0); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) return plugin->getParameterCount(); return 0; } uint32_t carla_get_program_count(CarlaHostHandle handle, uint pluginId) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, 0); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) return plugin->getProgramCount(); return 0; } uint32_t carla_get_midi_program_count(CarlaHostHandle handle, uint pluginId) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, 0); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) return plugin->getMidiProgramCount(); return 0; } uint32_t carla_get_custom_data_count(CarlaHostHandle handle, uint pluginId) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, 0); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) return plugin->getCustomDataCount(); return 0; } // -------------------------------------------------------------------------------------------------------------------- const char* carla_get_parameter_text(CarlaHostHandle handle, uint pluginId, uint32_t parameterId) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, gNullCharPtr); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) { CARLA_SAFE_ASSERT_RETURN(parameterId < plugin->getParameterCount(), gNullCharPtr); static char textBuf[STR_MAX+1]; carla_zeroChars(textBuf, STR_MAX+1); if (! plugin->getParameterText(parameterId, textBuf)) textBuf[0] = '\0'; return textBuf; } return gNullCharPtr; } const char* carla_get_program_name(CarlaHostHandle handle, uint pluginId, uint32_t programId) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, nullptr); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) { CARLA_SAFE_ASSERT_RETURN(programId < plugin->getProgramCount(), gNullCharPtr); static char programName[STR_MAX+1]; carla_zeroChars(programName, STR_MAX+1); if (! plugin->getProgramName(programId, programName)) programName[0] = '\0'; return programName; } return gNullCharPtr; } const char* carla_get_midi_program_name(CarlaHostHandle handle, uint pluginId, uint32_t midiProgramId) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, gNullCharPtr); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) { CARLA_SAFE_ASSERT_RETURN(midiProgramId < plugin->getMidiProgramCount(), gNullCharPtr); static char midiProgramName[STR_MAX+1]; carla_zeroChars(midiProgramName, STR_MAX+1); if (! plugin->getMidiProgramName(midiProgramId, midiProgramName)) midiProgramName[0] = '\0'; return midiProgramName; } return gNullCharPtr; } const char* carla_get_real_plugin_name(CarlaHostHandle handle, uint pluginId) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, gNullCharPtr); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) { static char realPluginName[STR_MAX+1]; carla_zeroChars(realPluginName, STR_MAX+1); if (! plugin->getRealName(realPluginName)) realPluginName[0] = '\0'; return realPluginName; } return gNullCharPtr; } // -------------------------------------------------------------------------------------------------------------------- int32_t carla_get_current_program_index(CarlaHostHandle handle, uint pluginId) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, -1); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) return plugin->getCurrentProgram(); return -1; } int32_t carla_get_current_midi_program_index(CarlaHostHandle handle, uint pluginId) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, -1); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) return plugin->getCurrentMidiProgram(); return -1; } // -------------------------------------------------------------------------------------------------------------------- float carla_get_default_parameter_value(CarlaHostHandle handle, uint pluginId, uint32_t parameterId) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, 0.0f); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) { CARLA_SAFE_ASSERT_RETURN(parameterId < plugin->getParameterCount(), 0.0f); return plugin->getParameterRanges(parameterId).def; } return 0.0f; } float carla_get_current_parameter_value(CarlaHostHandle handle, uint pluginId, uint32_t parameterId) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, 0.0f); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) { CARLA_SAFE_ASSERT_RETURN(parameterId < plugin->getParameterCount(), 0.0f); return plugin->getParameterValue(parameterId); } return 0.0f; } float carla_get_internal_parameter_value(CarlaHostHandle handle, uint pluginId, int32_t parameterId) { #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, (parameterId == CB::PARAMETER_CTRL_CHANNEL) ? -1.0f : 0.0f); #else CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, 0.0f); #endif CARLA_SAFE_ASSERT_RETURN(parameterId != CB::PARAMETER_NULL && parameterId > CB::PARAMETER_MAX, 0.0f); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) return plugin->getInternalParameterValue(parameterId); return 0.0f; } // -------------------------------------------------------------------------------------------------------------------- uint32_t carla_get_plugin_latency(CarlaHostHandle handle, uint pluginId) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, 0); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) return plugin->getLatencyInFrames(); return 0; } // -------------------------------------------------------------------------------------------------------------------- const float* carla_get_peak_values(CarlaHostHandle handle, uint pluginId) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, nullptr); return handle->engine->getPeaks(pluginId); } float carla_get_input_peak_value(CarlaHostHandle handle, uint pluginId, bool isLeft) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, 0.0f); return handle->engine->getInputPeak(pluginId, isLeft); } float carla_get_output_peak_value(CarlaHostHandle handle, uint pluginId, bool isLeft) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, 0.0f); return handle->engine->getOutputPeak(pluginId, isLeft); } // -------------------------------------------------------------------------------------------------------------------- CARLA_BACKEND_START_NAMESPACE #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // defined in CarlaPluginInternal.cpp const void* carla_render_inline_display_internal(const CarlaPluginPtr& plugin, uint32_t width, uint32_t height); #endif // defined in CarlaPluginLV2.cpp const void* carla_render_inline_display_lv2(const CarlaPluginPtr& plugin, uint32_t width, uint32_t height); CARLA_BACKEND_END_NAMESPACE const CarlaInlineDisplayImageSurface* carla_render_inline_display(CarlaHostHandle handle, uint pluginId, uint32_t width, uint32_t height) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr && handle->engine->isRunning(), nullptr); if (handle->engine->isAboutToClose()) return nullptr; if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) { switch (plugin->getType()) { #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH case CB::PLUGIN_INTERNAL: return (const CarlaInlineDisplayImageSurface*)CB::carla_render_inline_display_internal(plugin, width, height); #endif case CB::PLUGIN_LV2: return (const CarlaInlineDisplayImageSurface*)CB::carla_render_inline_display_lv2(plugin, width, height); default: return nullptr; } } return nullptr; } // -------------------------------------------------------------------------------------------------------------------- void carla_set_active(CarlaHostHandle handle, uint pluginId, bool onOff) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr,); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) plugin->setActive(onOff, true, false); } #ifndef BUILD_BRIDGE void carla_set_drywet(CarlaHostHandle handle, uint pluginId, float value) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr,); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) plugin->setDryWet(value, true, false); } void carla_set_volume(CarlaHostHandle handle, uint pluginId, float value) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr,); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) plugin->setVolume(value, true, false); } void carla_set_balance_left(CarlaHostHandle handle, uint pluginId, float value) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr,); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) plugin->setBalanceLeft(value, true, false); } void carla_set_balance_right(CarlaHostHandle handle, uint pluginId, float value) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr,); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) plugin->setBalanceRight(value, true, false); } void carla_set_panning(CarlaHostHandle handle, uint pluginId, float value) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr,); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) plugin->setPanning(value, true, false); } void carla_set_ctrl_channel(CarlaHostHandle handle, uint pluginId, int8_t channel) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr,); CARLA_SAFE_ASSERT_RETURN(channel >= -1 && channel < MAX_MIDI_CHANNELS,); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) plugin->setCtrlChannel(channel, true, false); } #endif void carla_set_option(CarlaHostHandle handle, uint pluginId, uint option, bool yesNo) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr,); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) plugin->setOption(option, yesNo, false); } // -------------------------------------------------------------------------------------------------------------------- void carla_set_parameter_value(CarlaHostHandle handle, uint pluginId, uint32_t parameterId, float value) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr,); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) { CARLA_SAFE_ASSERT_RETURN(parameterId < plugin->getParameterCount(),); plugin->setParameterValue(parameterId, value, true, true, false); } } #ifndef BUILD_BRIDGE void carla_set_parameter_midi_channel(CarlaHostHandle handle, uint pluginId, uint32_t parameterId, uint8_t channel) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr,); CARLA_SAFE_ASSERT_RETURN(channel < MAX_MIDI_CHANNELS,); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) { CARLA_SAFE_ASSERT_RETURN(parameterId < plugin->getParameterCount(),); plugin->setParameterMidiChannel(parameterId, channel, true, false); } } void carla_set_parameter_mapped_control_index(CarlaHostHandle handle, uint pluginId, uint32_t parameterId, int16_t index) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr,); CARLA_SAFE_ASSERT_RETURN(index >= CB::CONTROL_INDEX_NONE && index <= CB::CONTROL_INDEX_MAX_ALLOWED,); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) { CARLA_SAFE_ASSERT_RETURN(parameterId < plugin->getParameterCount(),); plugin->setParameterMappedControlIndex(parameterId, index, true, false, true); } } void carla_set_parameter_mapped_range(CarlaHostHandle handle, uint pluginId, uint32_t parameterId, float minimum, float maximum) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr,); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) { CARLA_SAFE_ASSERT_RETURN(parameterId < plugin->getParameterCount(),); plugin->setParameterMappedRange(parameterId, minimum, maximum, true, false); } } void carla_set_parameter_touch(CarlaHostHandle handle, uint pluginId, uint32_t parameterId, bool touch) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr,); carla_debug("carla_set_parameter_touch(%p, %i, %i, %s)", handle, pluginId, parameterId, bool2str(touch)); return handle->engine->touchPluginParameter(pluginId, parameterId, touch); } #endif // -------------------------------------------------------------------------------------------------------------------- void carla_set_program(CarlaHostHandle handle, uint pluginId, uint32_t programId) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr,); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) { CARLA_SAFE_ASSERT_RETURN(programId < plugin->getProgramCount(),); plugin->setProgram(static_cast(programId), true, true, false); } } void carla_set_midi_program(CarlaHostHandle handle, uint pluginId, uint32_t midiProgramId) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr,); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) { CARLA_SAFE_ASSERT_RETURN(midiProgramId < plugin->getMidiProgramCount(),); plugin->setMidiProgram(static_cast(midiProgramId), true, true, false); } } // -------------------------------------------------------------------------------------------------------------------- void carla_set_custom_data(CarlaHostHandle handle, uint pluginId, const char* type, const char* key, const char* value) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr,); CARLA_SAFE_ASSERT_RETURN(type != nullptr && type[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(key != nullptr && key[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(value != nullptr,); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) plugin->setCustomData(type, key, value, true); } void carla_set_chunk_data(CarlaHostHandle handle, uint pluginId, const char* chunkData) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr,); CARLA_SAFE_ASSERT_RETURN(chunkData != nullptr && chunkData[0] != '\0',); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) { CARLA_SAFE_ASSERT_RETURN(plugin->getOptionsEnabled() & CB::PLUGIN_OPTION_USE_CHUNKS,); std::vector chunk(carla_getChunkFromBase64String(chunkData)); #ifdef CARLA_PROPER_CPP11_SUPPORT plugin->setChunkData(chunk.data(), chunk.size()); #else plugin->setChunkData(&chunk.front(), chunk.size()); #endif } } // -------------------------------------------------------------------------------------------------------------------- void carla_prepare_for_save(CarlaHostHandle handle, uint pluginId) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr,); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) plugin->prepareForSave(false); } void carla_reset_parameters(CarlaHostHandle handle, uint pluginId) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr,); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) plugin->resetParameters(); } void carla_randomize_parameters(CarlaHostHandle handle, uint pluginId) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr,); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) plugin->randomizeParameters(); } #ifndef BUILD_BRIDGE void carla_send_midi_note(CarlaHostHandle handle, uint pluginId, uint8_t channel, uint8_t note, uint8_t velocity) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr && handle->engine->isRunning(),); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) plugin->sendMidiSingleNote(channel, note, velocity, true, true, false); } #endif void carla_set_custom_ui_title(CarlaHostHandle handle, uint pluginId, const char* title) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr,); CARLA_SAFE_ASSERT_RETURN(title != nullptr,); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) plugin->setCustomUITitle(title); } void carla_show_custom_ui(CarlaHostHandle handle, uint pluginId, bool yesNo) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr,); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) plugin->showCustomUI(yesNo); } void* carla_embed_custom_ui(CarlaHostHandle handle, uint pluginId, void* ptr) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, nullptr); if (const CarlaPluginPtr plugin = handle->engine->getPlugin(pluginId)) return plugin->embedCustomUI(ptr); return nullptr; } // -------------------------------------------------------------------------------------------------------------------- uint32_t carla_get_buffer_size(CarlaHostHandle handle) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, 0); carla_debug("carla_get_buffer_size(%p)", handle); return handle->engine->getBufferSize(); } double carla_get_sample_rate(CarlaHostHandle handle) { CARLA_SAFE_ASSERT_RETURN(handle->engine != nullptr, 0.0); carla_debug("carla_get_sample_rate(%p)", handle); return handle->engine->getSampleRate(); } // -------------------------------------------------------------------------------------------------------------------- const char* carla_get_last_error(CarlaHostHandle handle) { carla_debug("carla_get_last_error(%p)", handle); if (handle->engine != nullptr) return handle->engine->getLastError(); return handle->isStandalone ? ((CarlaHostStandalone*)handle)->lastError.buffer() : gNullCharPtr; } const char* carla_get_host_osc_url_tcp(CarlaHostHandle handle) { carla_debug("carla_get_host_osc_url_tcp(%p)", handle); #if defined(HAVE_LIBLO) && !defined(BUILD_BRIDGE) if (handle->engine == nullptr) { carla_stderr2("carla_get_host_osc_url_tcp() failed, engine is not running"); if (handle->isStandalone) ((CarlaHostStandalone*)handle)->lastError = "Engine is not running"; return gNullCharPtr; } const char* const path = handle->engine->getOscServerPathTCP(); if (path != nullptr && path[0] != '\0') return path; static const char* const notAvailable = "(OSC TCP port not available)"; return notAvailable; #else return "(OSC support not available in this build)"; // unused (void)handle; #endif } const char* carla_get_host_osc_url_udp(CarlaHostHandle handle) { carla_debug("carla_get_host_osc_url_udp(%p)", handle); #if defined(HAVE_LIBLO) && !defined(BUILD_BRIDGE) if (handle->engine == nullptr) { carla_stderr2("carla_get_host_osc_url_udp() failed, engine is not running"); if (handle->isStandalone) ((CarlaHostStandalone*)handle)->lastError = "Engine is not running"; return gNullCharPtr; } const char* const path = handle->engine->getOscServerPathUDP(); if (path != nullptr && path[0] != '\0') return path; static const char* const notAvailable = "(OSC UDP port not available)"; return notAvailable; #else return "(OSC support not available in this build)"; // unused (void)handle; #endif } // -------------------------------------------------------------------------------------------------------------------- #ifndef CARLA_PLUGIN_EXPORT # define CARLA_PLUGIN_UI_CLASS_PREFIX Standalone # include "CarlaPluginUI.cpp" # undef CARLA_PLUGIN_UI_CLASS_PREFIX # include "CarlaDssiUtils.cpp" # include "CarlaMacUtils.cpp" # include "CarlaPatchbayUtils.cpp" # include "CarlaPipeUtils.cpp" # include "CarlaProcessUtils.cpp" # include "CarlaStateUtils.cpp" # include "utils/Information.cpp" # include "utils/Windows.cpp" #endif /* CARLA_PLUGIN_EXPORT */ // -------------------------------------------------------------------------------------------------------------------- Carla-2.4.2/source/backend/CarlaStandaloneNSM.cpp000066400000000000000000000567411420416754300215700ustar00rootroot00000000000000/* * Carla Standalone * Copyright (C) 2011-2020 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "CarlaHostImpl.hpp" #ifdef HAVE_LIBLO #define NSM_API_VERSION_MAJOR 1 #define NSM_API_VERSION_MINOR 2 // #define NSM_CLIENT_FEATURES ":switch:" #define NSM_CLIENT_FEATURES ":switch:optional-gui:" #include "CarlaOscUtils.hpp" #include "CarlaString.hpp" #include "water/files/File.h" // ------------------------------------------------------------------------------------------------------------------- class CarlaNSM { public: CarlaNSM(CarlaHostStandalone& shandle) noexcept : gStandalone(shandle), fReplyAddress(nullptr), fServer(nullptr), fServerThread(nullptr), fServerURL(nullptr), fClientNameId(), fProjectPath(), fHasBroadcast(false), fHasOptionalGui(false), fHasServerControl(false), fStarted(), fReadyActionOpen(true), fReadyActionSave(true) {} ~CarlaNSM() { CARLA_SAFE_ASSERT(fReadyActionOpen); CARLA_SAFE_ASSERT(fReadyActionSave); if (fServerThread != nullptr) { lo_server_thread_stop(fServerThread); lo_server_thread_free(fServerThread); fServerThread = nullptr; fServer = nullptr; } if (fServerURL != nullptr) { std::free(fServerURL); fServerURL = nullptr; } if (fReplyAddress != nullptr) { lo_address_free(fReplyAddress); fReplyAddress = nullptr; } } bool announce(const uint64_t pid, const char* const executableName) { CARLA_SAFE_ASSERT_RETURN(pid != 0, false); CARLA_SAFE_ASSERT_RETURN(executableName != nullptr && executableName[0] != '\0', false); const char* const NSM_URL(std::getenv("NSM_URL")); if (NSM_URL == nullptr) return false; const lo_address nsmAddress(lo_address_new_from_url(NSM_URL)); CARLA_SAFE_ASSERT_RETURN(nsmAddress != nullptr, false); const int proto = lo_address_get_protocol(nsmAddress); if (fServerThread == nullptr) { // create new OSC server fServerThread = lo_server_thread_new_with_proto(nullptr, proto, _osc_error_handler); CARLA_SAFE_ASSERT_RETURN(fServerThread != nullptr, false); // register message handlers lo_server_thread_add_method(fServerThread, "/error", "sis", _error_handler, this); lo_server_thread_add_method(fServerThread, "/reply", "ssss", _reply_handler, this); lo_server_thread_add_method(fServerThread, "/nsm/client/open", "sss", _open_handler, this); lo_server_thread_add_method(fServerThread, "/nsm/client/save", "", _save_handler, this); lo_server_thread_add_method(fServerThread, "/nsm/client/session_is_loaded", "", _loaded_handler, this); lo_server_thread_add_method(fServerThread, "/nsm/client/show_optional_gui", "", _show_gui_handler, this); lo_server_thread_add_method(fServerThread, "/nsm/client/hide_optional_gui", "", _hide_gui_handler, this); lo_server_thread_add_method(fServerThread, nullptr, nullptr, _broadcast_handler, this); fServer = lo_server_thread_get_server(fServerThread); fServerURL = lo_server_thread_get_url(fServerThread); } const char* appName = std::getenv("CARLA_NSM_NAME"); if (appName == nullptr) appName = "Carla"; lo_send_from(nsmAddress, fServer, LO_TT_IMMEDIATE, "/nsm/server/announce", "sssiii", appName, NSM_CLIENT_FEATURES, executableName, NSM_API_VERSION_MAJOR, NSM_API_VERSION_MINOR, pid); lo_address_free(nsmAddress); if (gStandalone.engineCallback != nullptr) { gStandalone.engineCallback(gStandalone.engineCallbackPtr, CB::ENGINE_CALLBACK_NSM, 0, CB::NSM_CALLBACK_INIT, 0, 0, 0.0f, nullptr); } return true; } void ready(const NsmCallbackOpcode action) { CARLA_SAFE_ASSERT_RETURN(fServerThread != nullptr,); switch (action) { case CB::NSM_CALLBACK_INIT: CARLA_SAFE_ASSERT_BREAK(! fStarted); fStarted = true; lo_server_thread_start(fServerThread); break; case CB::NSM_CALLBACK_ERROR: break; case CB::NSM_CALLBACK_ANNOUNCE: break; case CB::NSM_CALLBACK_OPEN: fReadyActionOpen = true; break; case CB::NSM_CALLBACK_SAVE: fReadyActionSave = true; break; case CB::NSM_CALLBACK_SESSION_IS_LOADED: break; case CB::NSM_CALLBACK_SHOW_OPTIONAL_GUI: CARLA_SAFE_ASSERT_BREAK(fReplyAddress != nullptr); CARLA_SAFE_ASSERT_BREAK(fServer != nullptr); { // NOTE: lo_send_from is a macro that creates local variables lo_send_from(fReplyAddress, fServer, LO_TT_IMMEDIATE, "/nsm/client/gui_is_shown", ""); } break; case CB::NSM_CALLBACK_HIDE_OPTIONAL_GUI: CARLA_SAFE_ASSERT_BREAK(fReplyAddress != nullptr); CARLA_SAFE_ASSERT_BREAK(fServer != nullptr); { // NOTE: lo_send_from is a macro that creates local variables lo_send_from(fReplyAddress, fServer, LO_TT_IMMEDIATE, "/nsm/client/gui_is_hidden", ""); } break; case CB::NSM_CALLBACK_SET_CLIENT_NAME_ID: break; } } static CarlaNSM& getInstance(CarlaHostStandalone& shandle) { static CarlaNSM sInstance(shandle); return sInstance; } protected: int handleError(const char* const method, const int code, const char* const message) { carla_stdout("CarlaNSM::handleError(\"%s\", %i, \"%s\")", method, code, message); if (gStandalone.engineCallback != nullptr) gStandalone.engineCallback(gStandalone.engineCallbackPtr, CB::ENGINE_CALLBACK_NSM, 0, CB::NSM_CALLBACK_ERROR, code, 0, 0.0f, message); return 0; // may be unused (void)method; } int handleReply(const char* const method, const char* const message, const char* const smName, const char* const features, const lo_message msg) { CARLA_SAFE_ASSERT_RETURN(fServerThread != nullptr, 1); carla_stdout("CarlaNSM::handleReply(\"%s\", \"%s\", \"%s\", \"%s\")", method, message, smName, features); if (std::strcmp(method, "/nsm/server/announce") == 0) { const lo_address msgAddress(lo_message_get_source(msg)); CARLA_SAFE_ASSERT_RETURN(msgAddress != nullptr, 0); char* const msgURL(lo_address_get_url(msgAddress)); CARLA_SAFE_ASSERT_RETURN(msgURL != nullptr, 0); if (fReplyAddress != nullptr) lo_address_free(fReplyAddress); fReplyAddress = lo_address_new_from_url(msgURL); CARLA_SAFE_ASSERT_RETURN(fReplyAddress != nullptr, 0); fHasBroadcast = std::strstr(features, ":broadcast:") != nullptr; fHasOptionalGui = std::strstr(features, ":optional-gui:") != nullptr; fHasServerControl = std::strstr(features, ":server-control:") != nullptr; // UI starts hidden if (fHasOptionalGui) { // NOTE: lo_send_from is a macro that creates local variables lo_send_from(fReplyAddress, fServer, LO_TT_IMMEDIATE, "/nsm/client/gui_is_hidden", ""); } carla_stdout("Carla started via '%s', message: %s", smName, message); if (gStandalone.engineCallback != nullptr) { int flags = 0; if (fHasBroadcast) flags |= 1 << 0; if (fHasOptionalGui) flags |= 1 << 1; if (fHasServerControl) flags |= 1 << 2; gStandalone.engineCallback(gStandalone.engineCallbackPtr, CB::ENGINE_CALLBACK_NSM, 0, CB::NSM_CALLBACK_ANNOUNCE, flags, 0, 0.0f, smName); } std::free(msgURL); } else { carla_stdout("Got unknown NSM reply method '%s'", method); } return 0; } int handleOpen(const char* const projectPath, const char* const displayName, const char* const clientNameId) { CARLA_SAFE_ASSERT_RETURN(fReplyAddress != nullptr, 1); CARLA_SAFE_ASSERT_RETURN(fServer != nullptr, 1); carla_stdout("CarlaNSM::handleOpen(\"%s\", \"%s\", \"%s\")", projectPath, displayName, clientNameId); const CarlaHostHandle handle = (CarlaHostHandle)&gStandalone; carla_set_engine_option(handle, CB::ENGINE_OPTION_CLIENT_NAME_PREFIX, 0, clientNameId); if (gStandalone.engineCallback != nullptr) { fReadyActionOpen = false; gStandalone.engineCallback(gStandalone.engineCallbackPtr, CB::ENGINE_CALLBACK_NSM, 0, CB::NSM_CALLBACK_SET_CLIENT_NAME_ID, 0, 0, 0.0f, clientNameId); gStandalone.engineCallback(gStandalone.engineCallbackPtr, CB::ENGINE_CALLBACK_NSM, 0, CB::NSM_CALLBACK_OPEN, 0, 0, 0.0f, projectPath); for (; ! fReadyActionOpen;) carla_msleep(10); } else { using namespace water; if (carla_is_engine_running(handle)) carla_engine_close(handle); // TODO send error if engine failed to initialize carla_engine_init(handle, "JACK", clientNameId); fProjectPath = projectPath; fProjectPath += ".carxp"; const String jfilename = String(CharPointer_UTF8(fProjectPath)); if (File(jfilename).existsAsFile()) carla_load_project(handle, fProjectPath); } fClientNameId = clientNameId; lo_send_from(fReplyAddress, fServer, LO_TT_IMMEDIATE, "/reply", "ss", "/nsm/client/open", "OK"); // Broadcast ourselves if (fHasBroadcast) { const char* appName = std::getenv("CARLA_NSM_NAME"); if (appName == nullptr) appName = "Carla"; lo_send_from(fReplyAddress, fServer, LO_TT_IMMEDIATE, "/nsm/server/broadcast", "sssss", "/non/hello", fServerURL, appName, CARLA_VERSION_STRING, fClientNameId.buffer()); } return 0; } int handleSave() { CARLA_SAFE_ASSERT_RETURN(fReplyAddress != nullptr, 1); CARLA_SAFE_ASSERT_RETURN(fServer != nullptr, 1); carla_stdout("CarlaNSM::handleSave()"); if (gStandalone.engineCallback != nullptr) { fReadyActionSave = false; gStandalone.engineCallback(gStandalone.engineCallbackPtr, CB::ENGINE_CALLBACK_NSM, 0, CB::NSM_CALLBACK_SAVE, 0, 0, 0.0f, nullptr); for (; ! fReadyActionSave;) carla_msleep(10); } else { CARLA_SAFE_ASSERT_RETURN(fProjectPath.isNotEmpty(), 0); const CarlaHostHandle handle = (CarlaHostHandle)&gStandalone; carla_save_project(handle, fProjectPath); } lo_send_from(fReplyAddress, fServer, LO_TT_IMMEDIATE, "/reply", "ss", "/nsm/client/save", "OK"); return 0; } int handleSessionIsLoaded() { CARLA_SAFE_ASSERT_RETURN(fReplyAddress != nullptr, 1); CARLA_SAFE_ASSERT_RETURN(fServer != nullptr, 1); carla_stdout("CarlaNSM::handleSessionIsLoaded()"); if (gStandalone.engineCallback != nullptr) gStandalone.engineCallback(gStandalone.engineCallbackPtr, CB::ENGINE_CALLBACK_NSM, 0, CB::NSM_CALLBACK_SESSION_IS_LOADED, 0, 0, 0.0f, nullptr); return 0; } int handleShowOptionalGui() { CARLA_SAFE_ASSERT_RETURN(fReplyAddress != nullptr, 1); CARLA_SAFE_ASSERT_RETURN(fServer != nullptr, 1); carla_stdout("CarlaNSM::handleShowOptionalGui()"); if (gStandalone.engineCallback != nullptr) gStandalone.engineCallback(gStandalone.engineCallbackPtr, CB::ENGINE_CALLBACK_NSM, 0, CB::NSM_CALLBACK_SHOW_OPTIONAL_GUI, 0, 0, 0.0f, nullptr); return 0; } int handleHideOptionalGui() { CARLA_SAFE_ASSERT_RETURN(fReplyAddress != nullptr, 1); CARLA_SAFE_ASSERT_RETURN(fServer != nullptr, 1); carla_stdout("CarlaNSM::handleHideOptionalGui()"); if (gStandalone.engineCallback != nullptr) gStandalone.engineCallback(gStandalone.engineCallbackPtr, CB::ENGINE_CALLBACK_NSM, 0, CB::NSM_CALLBACK_HIDE_OPTIONAL_GUI, 0, 0, 0.0f, nullptr); return 0; } int handleBroadcast(const char* const path, const char* const types, lo_arg** const argv, const int argc, const lo_message msg) { CARLA_SAFE_ASSERT_RETURN(fReplyAddress != nullptr, 1); CARLA_SAFE_ASSERT_RETURN(fServer != nullptr, 1); CARLA_SAFE_ASSERT_RETURN(argc >= 0, 0); carla_stdout("CarlaNSM::handleBroadcast(%s, %s, %p, %i)", path, types, argv, argc); #if 0 if (std::strcmp(path, "/non/hello") == 0) { CARLA_SAFE_ASSERT_RETURN(argc == 4, 0); CARLA_SAFE_ASSERT_RETURN(std::strcmp(types, "ssss") == 0, 0); const char* const url = &argv[0]->s; //const char* const name = &argv[1]->s; //const char* const version = &argv[2]->s; //const char* const clientId = &argv[3]->s; const lo_address targetAddress(lo_address_new_from_url(url)); CARLA_SAFE_ASSERT_RETURN(targetAddress != nullptr, 0); lo_send_from(targetAddress, fServer, LO_TT_IMMEDIATE, "/signal/hello", "ss", fClientNameId.buffer(), fServerURL); lo_address_free(targetAddress); return 0; } if (std::strcmp(path, "/signal/hello") == 0) { //const char* const name = &argv[0]->s; const char* const url = &argv[1]->s; const lo_address targetAddress(lo_address_new_from_url(url)); CARLA_SAFE_ASSERT_RETURN(targetAddress != nullptr, 0); lo_send_from(targetAddress, fServer, LO_TT_IMMEDIATE, "/signal/hello", "ss", fClientNameId.buffer(), fServerURL); lo_address_free(targetAddress); return 0; } if (std::strcmp(path, "/signal/list") == 0) { carla_stdout("CarlaNSM::handleBroadcast - got list"); CARLA_SAFE_ASSERT_RETURN(carla_is_engine_running(), 0); const char* prefix = nullptr; if (argc > 0) prefix = &argv[0]->s; const lo_address msgAddress(lo_message_get_source(msg)); CARLA_SAFE_ASSERT_RETURN(msgAddress != nullptr, 0); for (uint32_t i = 0, pluginCount = carla_get_current_plugin_count(); i < pluginCount; ++i) { const CarlaPluginInfo* const pluginInfo(carla_get_plugin_info(i)); CARLA_SAFE_ASSERT_CONTINUE(pluginInfo != nullptr); /*const*/ CarlaString pluginNameId(fClientNameId + "/" + CarlaString(pluginInfo->name).replace('/','_') + "/"); for (uint32_t j=0, paramCount = carla_get_parameter_count(i); j < paramCount; ++j) { const CarlaParameterInfo* const paramInfo(carla_get_parameter_info(i, j)); CARLA_SAFE_ASSERT_CONTINUE(paramInfo != nullptr); const ParameterData* const paramData(carla_get_parameter_data(i, j)); CARLA_SAFE_ASSERT_CONTINUE(paramData != nullptr); const ParameterRanges* const paramRanges(carla_get_parameter_ranges(i, j)); CARLA_SAFE_ASSERT_CONTINUE(paramRanges != nullptr); if (paramData->type != CB::PARAMETER_INPUT /*&& paramData->type != CB::PARAMETER_OUTPUT*/) continue; if ((paramData->hints & CB::PARAMETER_IS_ENABLED) == 0) continue; if ((paramData->hints & CB::PARAMETER_IS_AUTOMATABLE) == 0) continue; if (paramData->hints & CB::PARAMETER_IS_READ_ONLY) continue; const char* const dir = paramData->type == CB::PARAMETER_INPUT ? "in" : "out"; const CarlaString paramNameId = pluginNameId + CarlaString(paramInfo->name).replace('/','_'); const float defNorm = paramRanges->getNormalizedValue(paramRanges->def); if (prefix == nullptr || std::strncmp(paramNameId, prefix, std::strlen(prefix)) == 0) { lo_send_from(msgAddress, fServer, LO_TT_IMMEDIATE, "/reply", "sssfff", path, paramNameId.buffer(), dir, 0.0f, 1.0f, defNorm); } } } lo_send_from(msgAddress, fServer, LO_TT_IMMEDIATE, "/reply", "s", path); //return 0; } for (int i=0; is); #endif return 0; // unused (void)msg; } private: CarlaHostStandalone& gStandalone; lo_address fReplyAddress; lo_server fServer; lo_server_thread fServerThread; char* fServerURL; CarlaString fClientNameId; CarlaString fProjectPath; bool fHasBroadcast; bool fHasOptionalGui; bool fHasServerControl; bool fStarted; volatile bool fReadyActionOpen; volatile bool fReadyActionSave; #define handlePtr ((CarlaNSM*)data) static void _osc_error_handler(int num, const char* msg, const char* path) { carla_stderr2("CarlaNSM::_osc_error_handler(%i, \"%s\", \"%s\")", num, msg, path); } static int _error_handler(const char*, const char* types, lo_arg** argv, int argc, lo_message, void* data) { CARLA_SAFE_ASSERT_RETURN(argc == 3, 1); CARLA_SAFE_ASSERT_RETURN(std::strcmp(types, "sis") == 0, 1); const char* const method = &argv[0]->s; const int code = argv[1]->i; const char* const message = &argv[2]->s; return handlePtr->handleError(method, code, message); } static int _reply_handler(const char*, const char* types, lo_arg** argv, int argc, lo_message msg, void* data) { CARLA_SAFE_ASSERT_RETURN(argc == 4, 1); CARLA_SAFE_ASSERT_RETURN(std::strcmp(types, "ssss") == 0, 1); const char* const method = &argv[0]->s; const char* const message = &argv[1]->s; const char* const smName = &argv[2]->s; const char* const features = &argv[3]->s; return handlePtr->handleReply(method, message, smName, features, msg); } static int _open_handler(const char*, const char* types, lo_arg** argv, int argc, lo_message, void* data) { CARLA_SAFE_ASSERT_RETURN(argc == 3, 1); CARLA_SAFE_ASSERT_RETURN(std::strcmp(types, "sss") == 0, 1); const char* const projectPath = &argv[0]->s; const char* const displayName = &argv[1]->s; const char* const clientNameId = &argv[2]->s; return handlePtr->handleOpen(projectPath, displayName, clientNameId); } static int _save_handler(const char*, const char*, lo_arg**, int argc, lo_message, void* data) { CARLA_SAFE_ASSERT_RETURN(argc == 0, 1); return handlePtr->handleSave(); } static int _loaded_handler(const char*, const char*, lo_arg**, int argc, lo_message, void* data) { CARLA_SAFE_ASSERT_RETURN(argc == 0, 1); return handlePtr->handleSessionIsLoaded(); } static int _show_gui_handler(const char*, const char*, lo_arg**, int argc, lo_message, void* data) { CARLA_SAFE_ASSERT_RETURN(argc == 0, 1); return handlePtr->handleShowOptionalGui(); } static int _hide_gui_handler(const char*, const char*, lo_arg**, int argc, lo_message, void* data) { CARLA_SAFE_ASSERT_RETURN(argc == 0, 1); return handlePtr->handleHideOptionalGui(); } static int _broadcast_handler(const char* path, const char* types, lo_arg** argv, int argc, lo_message msg, void* data) { return handlePtr->handleBroadcast(path, types, argv, argc, msg); } #undef handlePtr CARLA_PREVENT_HEAP_ALLOCATION CARLA_DECLARE_NON_COPY_CLASS(CarlaNSM) }; #endif // HAVE_LIBLO // ------------------------------------------------------------------------------------------------------------------- bool carla_nsm_init(CarlaHostHandle handle, uint64_t pid, const char* executableName) { CARLA_SAFE_ASSERT_RETURN(handle->isStandalone, false); #ifdef HAVE_LIBLO return CarlaNSM::getInstance(*(CarlaHostStandalone*)handle).announce(pid, executableName); #else return false; // unused (void)pid; (void)executableName; #endif } void carla_nsm_ready(CarlaHostHandle handle, NsmCallbackOpcode action) { CARLA_SAFE_ASSERT_RETURN(handle->isStandalone,); #ifdef HAVE_LIBLO CarlaNSM::getInstance(*(CarlaHostStandalone*)handle).ready(action); #else // unused return; (void)action; #endif } // ------------------------------------------------------------------------------------------------------------------- Carla-2.4.2/source/backend/CarlaUtils.h000066400000000000000000000202001420416754300176440ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2022 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #ifndef CARLA_UTILS_H_INCLUDED #define CARLA_UTILS_H_INCLUDED #include "CarlaBackend.h" #ifdef __cplusplus using CARLA_BACKEND_NAMESPACE::PluginCategory; using CARLA_BACKEND_NAMESPACE::PluginType; #endif /*! * @defgroup CarlaUtilsAPI Carla Utils API * * The Carla Utils API. * * This API allows to call advanced features from Python. * @{ */ /*! * TODO. */ typedef void* CarlaPipeClientHandle; /*! * TODO. */ typedef void (*CarlaPipeCallbackFunc)(void* ptr, const char* msg); /*! * Information about a cached plugin. * @see carla_get_cached_plugin_info() */ typedef struct _CarlaCachedPluginInfo { /*! * Wherever the data in this struct is valid. * For performance reasons, plugins are only checked on request, * and as such, the count vs number of really valid plugins might not match. * Use this field to skip on plugins which cannot be loaded in Carla. */ bool valid; /*! * Plugin category. */ PluginCategory category; /*! * Plugin hints. * @see PluginHints */ uint hints; /*! * Number of audio inputs. */ uint32_t audioIns; /*! * Number of audio outputs. */ uint32_t audioOuts; /*! * Number of CV inputs. */ uint32_t cvIns; /*! * Number of CV outputs. */ uint32_t cvOuts; /*! * Number of MIDI inputs. */ uint32_t midiIns; /*! * Number of MIDI outputs. */ uint32_t midiOuts; /*! * Number of input parameters. */ uint32_t parameterIns; /*! * Number of output parameters. */ uint32_t parameterOuts; /*! * Plugin name. */ const char* name; /*! * Plugin label. */ const char* label; /*! * Plugin author/maker. */ const char* maker; /*! * Plugin copyright/license. */ const char* copyright; #ifdef __cplusplus /*! * C++ constructor. */ CARLA_API _CarlaCachedPluginInfo() noexcept; CARLA_DECLARE_NON_COPY_STRUCT(_CarlaCachedPluginInfo) #endif } CarlaCachedPluginInfo; /* -------------------------------------------------------------------------------------------------------------------- * cached plugins */ /*! * Get how many cached plugins are available. * Internal and LV2 plugin formats are cached and need to be discovered via this function. * Do not call this for any other plugin formats. * * @note if this carla build uses JUCE, then you must call carla_juce_init beforehand * @note for AU plugins, you cannot call this outside the main thread */ CARLA_EXPORT uint carla_get_cached_plugin_count(PluginType ptype, const char* pluginPath); /*! * Get information about a cached plugin. * * @note if this carla build uses JUCE, then you must call carla_juce_init beforehand * @note for AU plugins, you cannot call this outside the main thread */ CARLA_EXPORT const CarlaCachedPluginInfo* carla_get_cached_plugin_info(PluginType ptype, uint index); #ifndef CARLA_HOST_H_INCLUDED /* -------------------------------------------------------------------------------------------------------------------- * information */ /*! * Get the complete license text of used third-party code and features. * Returned string is in basic html format. */ CARLA_EXPORT const char* carla_get_complete_license_text(void); /*! * Get the juce version used in the current Carla build. */ CARLA_EXPORT const char* carla_get_juce_version(void); /*! * Get the list of supported file extensions in carla_load_file(). */ CARLA_EXPORT const char* const* carla_get_supported_file_extensions(void); /*! * Get the list of supported features in the current Carla build. */ CARLA_EXPORT const char* const* carla_get_supported_features(void); /*! * Get the absolute filename of this carla library. */ CARLA_EXPORT const char* carla_get_library_filename(void); /*! * Get the folder where this carla library resides. */ CARLA_EXPORT const char* carla_get_library_folder(void); #endif /* -------------------------------------------------------------------------------------------------------------------- * JUCE */ /*! * Initialize data structures and GUI support for JUCE. * This is only needed when carla builds use JUCE and you call cached-plugin related APIs. * * Idle must then be called at somewhat regular intervals, though in practice there is no reason for it yet. * * Make sure to call carla_juce_cleanup after you are done with APIs that need JUCE. */ CARLA_EXPORT void carla_juce_init(void); /*! * Give idle time to JUCE stuff. * Currently only used for Linux. */ CARLA_EXPORT void carla_juce_idle(void); /*! * Cleanup the JUCE stuff that was initialized by carla_juce_init. */ CARLA_EXPORT void carla_juce_cleanup(void); /* -------------------------------------------------------------------------------------------------------------------- * pipes */ /*! * TODO. */ CARLA_EXPORT CarlaPipeClientHandle carla_pipe_client_new(const char* argv[], CarlaPipeCallbackFunc callbackFunc, void* callbackPtr); /*! * TODO. */ CARLA_EXPORT void carla_pipe_client_idle(CarlaPipeClientHandle handle); /*! * TODO. */ CARLA_EXPORT bool carla_pipe_client_is_running(CarlaPipeClientHandle handle); /*! * TODO. */ CARLA_EXPORT void carla_pipe_client_lock(CarlaPipeClientHandle handle); /*! * TODO. */ CARLA_EXPORT void carla_pipe_client_unlock(CarlaPipeClientHandle handle); /*! * TODO. */ CARLA_EXPORT const char* carla_pipe_client_readlineblock(CarlaPipeClientHandle handle, uint timeout); /*! * Extras. * TODO. */ CARLA_EXPORT bool carla_pipe_client_readlineblock_bool(CarlaPipeClientHandle handle, uint timeout); CARLA_EXPORT int carla_pipe_client_readlineblock_int(CarlaPipeClientHandle handle, uint timeout); CARLA_EXPORT double carla_pipe_client_readlineblock_float(CarlaPipeClientHandle handle, uint timeout); /*! * TODO. */ CARLA_EXPORT bool carla_pipe_client_write_msg(CarlaPipeClientHandle handle, const char* msg); /*! * TODO. */ CARLA_EXPORT bool carla_pipe_client_write_and_fix_msg(CarlaPipeClientHandle handle, const char* msg); /*! * TODO. */ CARLA_EXPORT bool carla_pipe_client_flush(CarlaPipeClientHandle handle); /*! * TODO. */ CARLA_EXPORT bool carla_pipe_client_flush_and_unlock(CarlaPipeClientHandle handle); /*! * TODO. */ CARLA_EXPORT void carla_pipe_client_destroy(CarlaPipeClientHandle handle); /* -------------------------------------------------------------------------------------------------------------------- * system stuff */ /*! * Flush stdout or stderr. */ CARLA_EXPORT void carla_fflush(bool err); /*! * Print the string @a string to stdout or stderr. */ CARLA_EXPORT void carla_fputs(bool err, const char* string); /*! * Set the current process name to @a name. */ CARLA_EXPORT void carla_set_process_name(const char* name); /* -------------------------------------------------------------------------------------------------------------------- * window control */ /*! * Get the global/desktop scale factor. */ CARLA_EXPORT double carla_get_desktop_scale_factor(void); CARLA_EXPORT int carla_cocoa_get_window(void* nsViewPtr); CARLA_EXPORT void carla_cocoa_set_transient_window_for(void* nsViewChild, void* nsViewParent); CARLA_EXPORT void carla_x11_reparent_window(uintptr_t winId1, uintptr_t winId2); CARLA_EXPORT void carla_x11_move_window(uintptr_t winId, int x, int y); CARLA_EXPORT int* carla_x11_get_window_pos(uintptr_t winId); /* ----------------------------------------------------------------------------------------------------------------- */ /** @} */ #endif /* CARLA_UTILS_H_INCLUDED */ Carla-2.4.2/source/backend/Makefile000066400000000000000000000112531420416754300171000ustar00rootroot00000000000000#!/usr/bin/make -f # Makefile for carla-backend # # -------------------------- # # Created by falkTX # CWD=.. include Makefile.mk # --------------------------------------------------------------------------------------------------------------------- OBJS_standalone = \ $(OBJDIR)/CarlaStandalone.cpp.o \ $(OBJDIR)/CarlaStandaloneNSM.cpp.o ifneq ($(STATIC_PLUGIN_TARGET),true) TARGETS = \ $(BINDIR)/libcarla_standalone2$(LIB_EXT) endif # --------------------------------------------------------------------------------------------------------------------- BUILD_CXX_FLAGS += $(FLUIDSYNTH_FLAGS) # --------------------------------------------------------------------------------------------------------------------- STANDALONE_LIBS = $(MODULEDIR)/carla_engine.a STANDALONE_LIBS += $(MODULEDIR)/carla_plugin.a STANDALONE_LIBS += $(MODULEDIR)/jackbridge.a STANDALONE_LIBS += $(MODULEDIR)/audio_decoder.a STANDALONE_LIBS += $(MODULEDIR)/lilv.a STANDALONE_LIBS += $(MODULEDIR)/native-plugins.a STANDALONE_LIBS += $(MODULEDIR)/rtmempool.a STANDALONE_LIBS += $(MODULEDIR)/sfzero.a STANDALONE_LIBS += $(MODULEDIR)/water.a STANDALONE_LIBS += $(MODULEDIR)/zita-resampler.a ifeq ($(HAVE_DGL),true) STANDALONE_LIBS += $(MODULEDIR)/dgl.a endif ifeq ($(HAVE_HYLIA),true) STANDALONE_LIBS += $(MODULEDIR)/hylia.a endif ifeq ($(USING_JUCE),true) STANDALONE_LIBS += $(MODULEDIR)/juce_audio_basics.a ifeq ($(USING_JUCE_AUDIO_DEVICES),true) STANDALONE_LIBS += $(MODULEDIR)/juce_audio_devices.a endif STANDALONE_LIBS += $(MODULEDIR)/juce_audio_processors.a STANDALONE_LIBS += $(MODULEDIR)/juce_core.a STANDALONE_LIBS += $(MODULEDIR)/juce_data_structures.a STANDALONE_LIBS += $(MODULEDIR)/juce_events.a STANDALONE_LIBS += $(MODULEDIR)/juce_graphics.a STANDALONE_LIBS += $(MODULEDIR)/juce_gui_basics.a ifeq ($(USING_JUCE_GUI_EXTRA),true) STANDALONE_LIBS += $(MODULEDIR)/juce_gui_extra.a endif endif ifeq ($(USING_RTAUDIO),true) STANDALONE_LIBS += $(MODULEDIR)/rtaudio.a STANDALONE_LIBS += $(MODULEDIR)/rtmidi.a endif # --------------------------------------------------------------------------------------------------------------------- STANDALONE_LINK_FLAGS = $(HYLIA_LIBS) STANDALONE_LINK_FLAGS += $(JACKBRIDGE_LIBS) STANDALONE_LINK_FLAGS += $(LILV_LIBS) STANDALONE_LINK_FLAGS += $(NATIVE_PLUGINS_LIBS) STANDALONE_LINK_FLAGS += $(RTMEMPOOL_LIBS) STANDALONE_LINK_FLAGS += $(WATER_LIBS) STANDALONE_LINK_FLAGS += $(LIBLO_LIBS) STANDALONE_LINK_FLAGS += $(MAGIC_LIBS) STANDALONE_LINK_FLAGS += $(FLUIDSYNTH_LIBS) STANDALONE_LINK_FLAGS += $(X11_LIBS) ifeq ($(USING_JUCE),true) STANDALONE_LINK_FLAGS += $(JUCE_AUDIO_BASICS_LIBS) ifeq ($(USING_JUCE_AUDIO_DEVICES),true) STANDALONE_LINK_FLAGS += $(JUCE_AUDIO_DEVICES_LIBS) endif STANDALONE_LINK_FLAGS += $(JUCE_AUDIO_PROCESSORS_LIBS) STANDALONE_LINK_FLAGS += $(JUCE_CORE_LIBS) STANDALONE_LINK_FLAGS += $(JUCE_DATA_STRUCTURES_LIBS) STANDALONE_LINK_FLAGS += $(JUCE_EVENTS_LIBS) STANDALONE_LINK_FLAGS += $(JUCE_GRAPHICS_LIBS) STANDALONE_LINK_FLAGS += $(JUCE_GUI_BASICS_LIBS) ifeq ($(USING_JUCE_GUI_EXTRA),true) STANDALONE_LINK_FLAGS += $(JUCE_GUI_EXTRA_LIBS) endif endif ifeq ($(USING_RTAUDIO),true) STANDALONE_LINK_FLAGS += $(RTAUDIO_LIBS) STANDALONE_LINK_FLAGS += $(RTMIDI_LIBS) endif ifeq ($(JACKBRIDGE_DIRECT),true) STANDALONE_LINK_FLAGS += $(JACK_LIBS) endif # --------------------------------------------------------------------------------------------------------------------- all: $(TARGETS) $(MAKE) -C utils static: $(OBJS_standalone) # --------------------------------------------------------------------------------------------------------------------- clean: rm -f $(OBJS_standalone) $(TARGETS) $(MAKE) clean -C engine $(MAKE) clean -C plugin $(MAKE) clean -C utils debug: $(MAKE) DEBUG=true doxygen: CarlaBackend.doxygen doxygen $^ # --------------------------------------------------------------------------------------------------------------------- $(BINDIR)/libcarla_standalone2$(LIB_EXT): $(OBJS_standalone) $(STANDALONE_LIBS) -@mkdir -p $(BINDIR) @echo "Linking libcarla_standalone2$(LIB_EXT)" @$(CXX) $(OBJS_standalone) $(BUILD_CXX_FLAGS) $(LIBS_START) $(STANDALONE_LIBS) $(LIBS_END) $(LINK_FLAGS) $(STANDALONE_LINK_FLAGS) $(SHARED) -o $@ # --------------------------------------------------------------------------------------------------------------------- ifeq ($(MACOS),true) $(OBJDIR)/CarlaStandalone.cpp.o: CarlaStandalone.cpp -@mkdir -p $(OBJDIR) @echo "Compiling $<" @$(CXX) $< $(BUILD_CXX_FLAGS) -ObjC++ -c -o $@ endif $(OBJDIR)/%.cpp.o: %.cpp -@mkdir -p $(OBJDIR) @echo "Compiling $<" @$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ -include $(OBJS_standalone:%.o=%.d) # --------------------------------------------------------------------------------------------------------------------- Carla-2.4.2/source/backend/Makefile.mk000066400000000000000000000022341420416754300175050ustar00rootroot00000000000000#!/usr/bin/make -f # Makefile for carla-backend # # -------------------------- # # Created by falkTX # ifeq ($(CWD),) $(error CWD not defined) endif include $(CWD)/Makefile.mk # Workaround GCC bug ifeq ($(TESTBUILD),true) ifeq ($(USING_JUCE),true) BUILD_CXX_FLAGS += -Wno-undef endif endif # --------------------------------------------------------------------------------------------------------------------- BINDIR := $(CWD)/../bin ifeq ($(DEBUG),true) OBJDIR := $(CWD)/../build/backend/Debug MODULEDIR := $(CWD)/../build/modules/Debug else OBJDIR := $(CWD)/../build/backend/Release MODULEDIR := $(CWD)/../build/modules/Release endif # --------------------------------------------------------------------------------------------------------------------- BUILD_CXX_FLAGS += -I. -I.. -I$(CWD) -I$(CWD)/includes -I$(CWD)/modules -I$(CWD)/utils BUILD_CXX_FLAGS += $(LIBLO_FLAGS) # --------------------------------------------------------------------------------------------------------------------- BUILD_CXX_FLAGS += $(NATIVE_PLUGINS_FLAGS) # --------------------------------------------------------------------------------------------------------------------- Carla-2.4.2/source/backend/engine/000077500000000000000000000000001420416754300167035ustar00rootroot00000000000000Carla-2.4.2/source/backend/engine/.kdev_include_paths000066400000000000000000000000671420416754300225420ustar00rootroot00000000000000../ ../../ ../../includes/ ../../modules/ ../../utils/ Carla-2.4.2/source/backend/engine/CarlaEngine.cpp000066400000000000000000003572651420416754300216010ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2022 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ /* TODO: * - complete processRack(): carefully add to input, sorted events * - implement processPatchbay() * - implement oscSend_control_switch_plugins() * - something about the peaks? */ #include "CarlaEngineClient.hpp" #include "CarlaEngineInit.hpp" #include "CarlaEngineInternal.hpp" #include "CarlaPlugin.hpp" #include "CarlaBackendUtils.hpp" #include "CarlaBinaryUtils.hpp" #include "CarlaEngineUtils.hpp" #include "CarlaMathUtils.hpp" #include "CarlaPipeUtils.hpp" #include "CarlaProcessUtils.hpp" #include "CarlaScopeUtils.hpp" #include "CarlaStateUtils.hpp" #include "CarlaMIDI.h" #include "jackbridge/JackBridge.hpp" #include "water/files/File.h" #include "water/streams/MemoryOutputStream.h" #include "water/xml/XmlDocument.h" #include "water/xml/XmlElement.h" #ifdef CARLA_OS_MAC # include "CarlaMacUtils.hpp" # if defined(CARLA_OS_64BIT) && defined(HAVE_LIBMAGIC) && ! defined(BUILD_BRIDGE_ALTERNATIVE_ARCH) # define ADAPT_FOR_APPLE_SILLICON # endif #endif #include // FIXME Remove on 2.1 release #include "lv2/atom.h" using water::Array; using water::CharPointer_UTF8; using water::File; using water::MemoryOutputStream; using water::String; using water::StringArray; using water::XmlDocument; using water::XmlElement; // #define SFZ_FILES_USING_SFIZZ CARLA_BACKEND_START_NAMESPACE // ----------------------------------------------------------------------- // Carla Engine CarlaEngine::CarlaEngine() : pData(new ProtectedData(this)) { carla_debug("CarlaEngine::CarlaEngine()"); } CarlaEngine::~CarlaEngine() { carla_debug("CarlaEngine::~CarlaEngine()"); delete pData; } // ----------------------------------------------------------------------- // Static calls uint CarlaEngine::getDriverCount() { carla_debug("CarlaEngine::getDriverCount()"); using namespace EngineInit; uint count = 0; #ifndef STATIC_PLUGIN_TARGET if (jackbridge_is_ok()) count += 1; #endif #ifndef BUILD_BRIDGE # ifdef USING_JUCE_AUDIO_DEVICES count += getJuceApiCount(); # endif # ifdef USING_RTAUDIO count += getRtAudioApiCount(); # endif #endif return count; } const char* CarlaEngine::getDriverName(const uint index2) { carla_debug("CarlaEngine::getDriverName(%i)", index2); using namespace EngineInit; #ifndef STATIC_PLUGIN_TARGET uint index = index2; if (jackbridge_is_ok() && index-- == 0) return "JACK"; #endif #ifndef BUILD_BRIDGE # ifdef USING_JUCE_AUDIO_DEVICES if (const uint count = getJuceApiCount()) { if (index < count) return getJuceApiName(index); index -= count; } # endif # ifdef USING_RTAUDIO if (const uint count = getRtAudioApiCount()) { if (index < count) return getRtAudioApiName(index); } # endif #endif carla_stderr("CarlaEngine::getDriverName(%i) - invalid index", index2); return nullptr; } const char* const* CarlaEngine::getDriverDeviceNames(const uint index2) { carla_debug("CarlaEngine::getDriverDeviceNames(%i)", index2); using namespace EngineInit; #ifndef STATIC_PLUGIN_TARGET uint index = index2; if (jackbridge_is_ok() && index-- == 0) { static const char* ret[3] = { "Auto-Connect ON", "Auto-Connect OFF", nullptr }; return ret; } #endif #ifndef BUILD_BRIDGE # ifdef USING_JUCE_AUDIO_DEVICES if (const uint count = getJuceApiCount()) { if (index < count) return getJuceApiDeviceNames(index); index -= count; } # endif # ifdef USING_RTAUDIO if (const uint count = getRtAudioApiCount()) { if (index < count) return getRtAudioApiDeviceNames(index); } # endif #endif carla_stderr("CarlaEngine::getDriverDeviceNames(%i) - invalid index", index2); return nullptr; } const EngineDriverDeviceInfo* CarlaEngine::getDriverDeviceInfo(const uint index2, const char* const deviceName) { carla_debug("CarlaEngine::getDriverDeviceInfo(%i, \"%s\")", index2, deviceName); using namespace EngineInit; #ifndef STATIC_PLUGIN_TARGET uint index = index2; if (jackbridge_is_ok() && index-- == 0) { static EngineDriverDeviceInfo devInfo; devInfo.hints = ENGINE_DRIVER_DEVICE_VARIABLE_BUFFER_SIZE; devInfo.bufferSizes = nullptr; devInfo.sampleRates = nullptr; return &devInfo; } #endif #ifndef BUILD_BRIDGE # ifdef USING_JUCE_AUDIO_DEVICES if (const uint count = getJuceApiCount()) { if (index < count) return getJuceDeviceInfo(index, deviceName); index -= count; } # endif # ifdef USING_RTAUDIO if (const uint count = getRtAudioApiCount()) { if (index < count) return getRtAudioDeviceInfo(index, deviceName); } # endif #endif carla_stderr("CarlaEngine::getDriverDeviceNames(%i, \"%s\") - invalid index", index2, deviceName); return nullptr; } bool CarlaEngine::showDriverDeviceControlPanel(const uint index2, const char* const deviceName) { carla_debug("CarlaEngine::showDriverDeviceControlPanel(%i, \"%s\")", index2, deviceName); using namespace EngineInit; #ifndef STATIC_PLUGIN_TARGET uint index = index2; if (jackbridge_is_ok() && index-- == 0) { return false; } #endif #ifndef BUILD_BRIDGE # ifdef USING_JUCE_AUDIO_DEVICES if (const uint count = getJuceApiCount()) { if (index < count) return showJuceDeviceControlPanel(index, deviceName); index -= count; } # endif # ifdef USING_RTAUDIO if (const uint count = getRtAudioApiCount()) { if (index < count) return false; } # endif #endif carla_stderr("CarlaEngine::showDriverDeviceControlPanel(%i, \"%s\") - invalid index", index2, deviceName); return false; } CarlaEngine* CarlaEngine::newDriverByName(const char* const driverName) { CARLA_SAFE_ASSERT_RETURN(driverName != nullptr && driverName[0] != '\0', nullptr); carla_debug("CarlaEngine::newDriverByName(\"%s\")", driverName); using namespace EngineInit; if (std::strcmp(driverName, "JACK") == 0) return newJack(); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (std::strcmp(driverName, "Dummy") == 0) return newDummy(); #endif #ifndef BUILD_BRIDGE # ifdef USING_JUCE_AUDIO_DEVICES // ------------------------------------------------------------------- // linux if (std::strcmp(driverName, "ALSA") == 0) return newJuce(AUDIO_API_ALSA); // ------------------------------------------------------------------- // macos if (std::strcmp(driverName, "CoreAudio") == 0) return newJuce(AUDIO_API_COREAUDIO); // ------------------------------------------------------------------- // windows if (std::strcmp(driverName, "ASIO") == 0) return newJuce(AUDIO_API_ASIO); if (std::strcmp(driverName, "DirectSound") == 0) return newJuce(AUDIO_API_DIRECTSOUND); if (std::strcmp(driverName, "WASAPI") == 0 || std::strcmp(driverName, "Windows Audio") == 0) return newJuce(AUDIO_API_WASAPI); # endif # ifdef USING_RTAUDIO // ------------------------------------------------------------------- // common if (std::strncmp(driverName, "JACK ", 5) == 0) return newRtAudio(AUDIO_API_JACK); if (std::strcmp(driverName, "OSS") == 0) return newRtAudio(AUDIO_API_OSS); // ------------------------------------------------------------------- // linux if (std::strcmp(driverName, "ALSA") == 0) return newRtAudio(AUDIO_API_ALSA); if (std::strcmp(driverName, "PulseAudio") == 0) return newRtAudio(AUDIO_API_PULSEAUDIO); // ------------------------------------------------------------------- // macos if (std::strcmp(driverName, "CoreAudio") == 0) return newRtAudio(AUDIO_API_COREAUDIO); // ------------------------------------------------------------------- // windows if (std::strcmp(driverName, "ASIO") == 0) return newRtAudio(AUDIO_API_ASIO); if (std::strcmp(driverName, "DirectSound") == 0) return newRtAudio(AUDIO_API_DIRECTSOUND); if (std::strcmp(driverName, "WASAPI") == 0) return newRtAudio(AUDIO_API_WASAPI); # endif #endif carla_stderr("CarlaEngine::newDriverByName(\"%s\") - invalid driver name", driverName); return nullptr; } // ----------------------------------------------------------------------- // Constant values uint CarlaEngine::getMaxClientNameSize() const noexcept { return STR_MAX/2; } uint CarlaEngine::getMaxPortNameSize() const noexcept { return STR_MAX; } uint CarlaEngine::getCurrentPluginCount() const noexcept { return pData->curPluginCount; } uint CarlaEngine::getMaxPluginNumber() const noexcept { return pData->maxPluginNumber; } // ----------------------------------------------------------------------- // Virtual, per-engine type calls bool CarlaEngine::close() { carla_debug("CarlaEngine::close()"); if (pData->curPluginCount != 0) { pData->aboutToClose = true; removeAllPlugins(); } pData->close(); callback(true, true, ENGINE_CALLBACK_ENGINE_STOPPED, 0, 0, 0, 0, 0.0f, nullptr); return true; } bool CarlaEngine::usesConstantBufferSize() const noexcept { return true; } void CarlaEngine::idle() noexcept { CARLA_SAFE_ASSERT_RETURN(pData->nextAction.opcode == kEnginePostActionNull,); CARLA_SAFE_ASSERT_RETURN(pData->nextPluginId == pData->maxPluginNumber,); CARLA_SAFE_ASSERT_RETURN(getType() != kEngineTypePlugin,); const bool engineNotRunning = !isRunning(); for (uint i=0; i < pData->curPluginCount; ++i) { if (const CarlaPluginPtr plugin = pData->plugins[i].plugin) { if (plugin->isEnabled()) { const uint hints = plugin->getHints(); if (engineNotRunning) { try { plugin->idle(); } CARLA_SAFE_EXCEPTION_CONTINUE("Plugin idle"); if (hints & PLUGIN_HAS_CUSTOM_UI) { try { plugin->uiIdle(); } CARLA_SAFE_EXCEPTION_CONTINUE("Plugin uiIdle"); } } else if ((hints & PLUGIN_HAS_CUSTOM_UI) != 0 && (hints & PLUGIN_NEEDS_UI_MAIN_THREAD) != 0) { try { plugin->uiIdle(); } CARLA_SAFE_EXCEPTION_CONTINUE("Plugin uiIdle"); } } } } #if defined(HAVE_LIBLO) && !defined(BUILD_BRIDGE) pData->osc.idle(); #endif pData->deletePluginsAsNeeded(); } CarlaEngineClient* CarlaEngine::addClient(CarlaPluginPtr plugin) { #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH return new CarlaEngineClientForStandalone(*this, pData->graph, plugin); #else return new CarlaEngineClientForBridge(*this); // unused (void)plugin; #endif } float CarlaEngine::getDSPLoad() const noexcept { #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH return pData->dspLoad; #else return 0.0f; #endif } uint32_t CarlaEngine::getTotalXruns() const noexcept { #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH return pData->xruns; #else return 0; #endif } void CarlaEngine::clearXruns() const noexcept { #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH pData->xruns = 0; #endif } bool CarlaEngine::showDeviceControlPanel() const noexcept { return false; } bool CarlaEngine::setBufferSizeAndSampleRate(const uint, const double) { return false; } // ----------------------------------------------------------------------- // Plugin management bool CarlaEngine::addPlugin(const BinaryType btype, const PluginType ptype, const char* const filename, const char* const name, const char* const label, const int64_t uniqueId, const void* const extra, const uint options) { CARLA_SAFE_ASSERT_RETURN_ERR(pData->isIdling == 0, "An operation is still being processed, please wait for it to finish"); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH CARLA_SAFE_ASSERT_RETURN_ERR(pData->plugins != nullptr, "Invalid engine internal data"); CARLA_SAFE_ASSERT_RETURN_ERR(pData->nextPluginId <= pData->maxPluginNumber, "Invalid engine internal data"); #endif CARLA_SAFE_ASSERT_RETURN_ERR(pData->nextAction.opcode == kEnginePostActionNull, "Invalid engine internal data"); CARLA_SAFE_ASSERT_RETURN_ERR(btype != BINARY_NONE, "Invalid plugin binary mode"); CARLA_SAFE_ASSERT_RETURN_ERR(ptype != PLUGIN_NONE, "Invalid plugin type"); CARLA_SAFE_ASSERT_RETURN_ERR((filename != nullptr && filename[0] != '\0') || (label != nullptr && label[0] != '\0'), "Invalid plugin filename and label"); carla_debug("CarlaEngine::addPlugin(%i:%s, %i:%s, \"%s\", \"%s\", \"%s\", " P_INT64 ", %p, %u)", btype, BinaryType2Str(btype), ptype, PluginType2Str(ptype), filename, name, label, uniqueId, extra, options); #ifndef CARLA_OS_WIN if (ptype != PLUGIN_JACK && ptype != PLUGIN_LV2 && filename != nullptr && filename[0] != '\0') { CARLA_SAFE_ASSERT_RETURN_ERR(filename[0] == CARLA_OS_SEP || filename[0] == '.' || filename[0] == '~', "Invalid plugin filename"); } #endif uint id; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH CarlaPluginPtr oldPlugin; if (pData->nextPluginId < pData->curPluginCount) { id = pData->nextPluginId; pData->nextPluginId = pData->maxPluginNumber; oldPlugin = pData->plugins[id].plugin; CARLA_SAFE_ASSERT_RETURN_ERR(oldPlugin.get() != nullptr, "Invalid replace plugin Id"); } else #endif { id = pData->curPluginCount; if (id == pData->maxPluginNumber) { setLastError("Maximum number of plugins reached"); return false; } #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH CARLA_SAFE_ASSERT_RETURN_ERR(pData->plugins[id].plugin.get() == nullptr, "Invalid engine internal data"); #endif } CarlaPlugin::Initializer initializer = { this, id, filename, name, label, uniqueId, options }; CarlaPluginPtr plugin; CarlaString bridgeBinary(pData->options.binaryDir); if (bridgeBinary.isNotEmpty()) { #ifndef CARLA_OS_WIN if (btype == BINARY_NATIVE) { bridgeBinary += CARLA_OS_SEP_STR "carla-bridge-native"; } else #endif { switch (btype) { case BINARY_POSIX32: bridgeBinary += CARLA_OS_SEP_STR "carla-bridge-posix32"; break; case BINARY_POSIX64: bridgeBinary += CARLA_OS_SEP_STR "carla-bridge-posix64"; break; case BINARY_WIN32: #if defined(CARLA_OS_WIN) && !defined(CARLA_OS_64BIT) bridgeBinary += CARLA_OS_SEP_STR "carla-bridge-native.exe"; #else bridgeBinary += CARLA_OS_SEP_STR "carla-bridge-win32.exe"; #endif break; case BINARY_WIN64: #if defined(CARLA_OS_WIN) && defined(CARLA_OS_64BIT) bridgeBinary += CARLA_OS_SEP_STR "carla-bridge-native.exe"; #else bridgeBinary += CARLA_OS_SEP_STR "carla-bridge-win64.exe"; #endif break; default: bridgeBinary.clear(); break; } } if (! File(bridgeBinary.buffer()).existsAsFile()) bridgeBinary.clear(); } const bool canBeBridged = ptype != PLUGIN_INTERNAL && ptype != PLUGIN_DLS && ptype != PLUGIN_GIG && ptype != PLUGIN_SF2 && ptype != PLUGIN_SFZ && ptype != PLUGIN_JACK; // Prefer bridges for some specific plugins bool preferBridges = pData->options.preferPluginBridges; const char* needsArchBridge = nullptr; #ifdef CARLA_OS_MAC // Plugin might be in quarentine due to Apple stupid notarization rules, let's remove that if possible if (canBeBridged && ptype != PLUGIN_LV2 && ptype != PLUGIN_AU) removeFileFromQuarantine(filename); #endif #ifndef BUILD_BRIDGE if (canBeBridged && ! preferBridges) { # if 0 if (ptype == PLUGIN_LV2 && label != nullptr) { if (std::strncmp(label, "http://calf.sourceforge.net/plugins/", 36) == 0 || std::strcmp(label, "http://factorial.hu/plugins/lv2/ir") == 0 || std::strstr(label, "v1.sourceforge.net/lv2") != nullptr) { preferBridges = true; } } # endif # ifdef ADAPT_FOR_APPLE_SILLICON // see if this binary needs bridging if (ptype == PLUGIN_VST2 || ptype == PLUGIN_VST3) { if (const char* const vst2Binary = findBinaryInBundle(filename)) { const CarlaMagic magic; if (const char* const output = magic.getFileDescription(vst2Binary)) { carla_stdout("VST binary magic output is '%s'", output); # ifdef __aarch64__ if (std::strstr(output, "arm64") == nullptr && std::strstr(output, "x86_64") != nullptr) needsArchBridge = "x86_64"; # else if (std::strstr(output, "x86_64") == nullptr && std::strstr(output, "arm64") != nullptr) needsArchBridge = "arm64"; # endif } else { carla_stdout("VST binary magic output is null"); } } else { carla_stdout("Search for binary in VST bundle failed"); } } # endif } #endif // ! BUILD_BRIDGE if (canBeBridged && (needsArchBridge || btype != BINARY_NATIVE || (preferBridges && bridgeBinary.isNotEmpty()))) { if (bridgeBinary.isNotEmpty()) { plugin = CarlaPlugin::newBridge(initializer, btype, ptype, needsArchBridge, bridgeBinary); } else { setLastError("This Carla build cannot handle this binary"); return false; } } else { #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH bool use16Outs; #endif setLastError("Invalid or unsupported plugin type"); // Some stupid plugins mess up with global signals, err!! const CarlaSignalRestorer csr; switch (ptype) { case PLUGIN_NONE: break; case PLUGIN_LADSPA: plugin = CarlaPlugin::newLADSPA(initializer, (const LADSPA_RDF_Descriptor*)extra); break; case PLUGIN_DSSI: plugin = CarlaPlugin::newDSSI(initializer); break; case PLUGIN_LV2: plugin = CarlaPlugin::newLV2(initializer); break; case PLUGIN_VST2: plugin = CarlaPlugin::newVST2(initializer); break; case PLUGIN_VST3: plugin = CarlaPlugin::newVST3(initializer); break; case PLUGIN_AU: plugin = CarlaPlugin::newAU(initializer); break; case PLUGIN_JSFX: setLastError("Not implemented yet"); break; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH case PLUGIN_INTERNAL: plugin = CarlaPlugin::newNative(initializer); break; case PLUGIN_DLS: case PLUGIN_GIG: case PLUGIN_SF2: use16Outs = (extra != nullptr && std::strcmp((const char*)extra, "true") == 0); plugin = CarlaPlugin::newFluidSynth(initializer, ptype, use16Outs); break; case PLUGIN_SFZ: # ifdef SFZ_FILES_USING_SFIZZ { CarlaPlugin::Initializer sfizzInitializer = { this, id, name, "", "http://sfztools.github.io/sfizz", 0, options }; plugin = CarlaPlugin::newLV2(sfizzInitializer); } # else plugin = CarlaPlugin::newSFZero(initializer); # endif break; case PLUGIN_JACK: # ifndef STATIC_PLUGIN_TARGET plugin = CarlaPlugin::newJackApp(initializer); # else setLastError("Static plugin target does not support JACK applications"); # endif break; #else case PLUGIN_INTERNAL: case PLUGIN_DLS: case PLUGIN_GIG: case PLUGIN_SF2: case PLUGIN_SFZ: case PLUGIN_JACK: setLastError("Plugin bridges cannot handle this binary"); break; #endif } } if (plugin.get() == nullptr) return false; plugin->reload(); #ifdef SFZ_FILES_USING_SFIZZ if (ptype == PLUGIN_SFZ && plugin->getType() == PLUGIN_LV2) { plugin->setCustomData(LV2_ATOM__Path, "http://sfztools.github.io/sfizz:sfzfile", filename, false); plugin->restoreLV2State(true); } #endif bool canRun = true; if (pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY) { /**/ if (plugin->getMidiInCount() > 1 || plugin->getMidiOutCount() > 1) { setLastError("Carla's patchbay mode cannot work with plugins that have multiple MIDI ports, sorry!"); canRun = false; } } if (! canRun) { return false; } EnginePluginData& pluginData(pData->plugins[id]); pluginData.plugin = plugin; carla_zeroFloats(pluginData.peaks, 4); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (oldPlugin.get() != nullptr) { CARLA_SAFE_ASSERT(! pData->loadingProject); const ScopedThreadStopper sts(this); if (pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY) pData->graph.replacePlugin(oldPlugin, plugin); const bool wasActive = oldPlugin->getInternalParameterValue(PARAMETER_ACTIVE) >= 0.5f; const float oldDryWet = oldPlugin->getInternalParameterValue(PARAMETER_DRYWET); const float oldVolume = oldPlugin->getInternalParameterValue(PARAMETER_VOLUME); oldPlugin->prepareForDeletion(); pData->pluginsToDelete.push_back(oldPlugin); if (plugin->getHints() & PLUGIN_CAN_DRYWET) plugin->setDryWet(oldDryWet, true, true); if (plugin->getHints() & PLUGIN_CAN_VOLUME) plugin->setVolume(oldVolume, true, true); plugin->setActive(wasActive, true, true); plugin->setEnabled(true); callback(true, true, ENGINE_CALLBACK_RELOAD_ALL, id, 0, 0, 0, 0.0f, nullptr); } else if (! pData->loadingProject) #endif { plugin->setEnabled(true); ++pData->curPluginCount; callback(true, true, ENGINE_CALLBACK_PLUGIN_ADDED, id, plugin->getType(), 0, 0, 0.0f, plugin->getName()); if (getType() != kEngineTypeBridge) plugin->setActive(true, true, true); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY) pData->graph.addPlugin(plugin); #endif } return true; } bool CarlaEngine::addPlugin(const PluginType ptype, const char* const filename, const char* const name, const char* const label, const int64_t uniqueId, const void* const extra) { return addPlugin(BINARY_NATIVE, ptype, filename, name, label, uniqueId, extra, PLUGIN_OPTIONS_NULL); } bool CarlaEngine::removePlugin(const uint id) { CARLA_SAFE_ASSERT_RETURN_ERR(pData->isIdling == 0, "An operation is still being processed, please wait for it to finish"); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH CARLA_SAFE_ASSERT_RETURN_ERR(pData->plugins != nullptr, "Invalid engine internal data"); CARLA_SAFE_ASSERT_RETURN_ERR(pData->curPluginCount != 0, "Invalid engine internal data"); #else CARLA_SAFE_ASSERT_RETURN_ERR(id == 0, "Invalid engine internal data"); #endif CARLA_SAFE_ASSERT_RETURN_ERR(pData->nextAction.opcode == kEnginePostActionNull, "Invalid engine internal data"); CARLA_SAFE_ASSERT_RETURN_ERR(id < pData->curPluginCount, "Invalid plugin Id"); carla_debug("CarlaEngine::removePlugin(%i)", id); const CarlaPluginPtr plugin = pData->plugins[id].plugin; CARLA_SAFE_ASSERT_RETURN_ERR(plugin.get() != nullptr, "Could not find plugin to remove"); CARLA_SAFE_ASSERT_RETURN_ERR(plugin->getId() == id, "Invalid engine internal data"); const ScopedThreadStopper sts(this); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY) pData->graph.removePlugin(plugin); const ScopedActionLock sal(this, kEnginePostActionRemovePlugin, id, 0); /* for (uint i=id; i < pData->curPluginCount; ++i) { CarlaPlugin* const plugin2(pData->plugins[i].plugin); CARLA_SAFE_ASSERT_BREAK(plugin2 != nullptr); plugin2->updateOscURL(); } */ #else pData->curPluginCount = 0; pData->plugins[0].plugin = nullptr; carla_zeroStruct(pData->plugins[0].peaks); #endif plugin->prepareForDeletion(); pData->pluginsToDelete.push_back(plugin); callback(true, true, ENGINE_CALLBACK_PLUGIN_REMOVED, id, 0, 0, 0, 0.0f, nullptr); return true; } bool CarlaEngine::removeAllPlugins() { CARLA_SAFE_ASSERT_RETURN_ERR(pData->isIdling == 0, "An operation is still being processed, please wait for it to finish"); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH CARLA_SAFE_ASSERT_RETURN_ERR(pData->plugins != nullptr, "Invalid engine internal data"); CARLA_SAFE_ASSERT_RETURN_ERR(pData->nextPluginId == pData->maxPluginNumber, "Invalid engine internal data"); #endif CARLA_SAFE_ASSERT_RETURN_ERR(pData->nextAction.opcode == kEnginePostActionNull, "Invalid engine internal data"); carla_debug("CarlaEngine::removeAllPlugins()"); if (pData->curPluginCount == 0) return true; const ScopedThreadStopper sts(this); const uint curPluginCount = pData->curPluginCount; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY) pData->graph.removeAllPlugins(); #endif const ScopedActionLock sal(this, kEnginePostActionZeroCount, 0, 0); callback(true, false, ENGINE_CALLBACK_IDLE, 0, 0, 0, 0, 0.0f, nullptr); for (uint i=0; i < curPluginCount; ++i) { const uint id = curPluginCount - i - 1; EnginePluginData& pluginData(pData->plugins[id]); pluginData.plugin->prepareForDeletion(); pData->pluginsToDelete.push_back(pluginData.plugin); pluginData.plugin.reset(); carla_zeroStruct(pluginData.peaks); callback(true, true, ENGINE_CALLBACK_PLUGIN_REMOVED, id, 0, 0, 0, 0.0f, nullptr); callback(true, false, ENGINE_CALLBACK_IDLE, 0, 0, 0, 0, 0.0f, nullptr); } return true; } #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH bool CarlaEngine::renamePlugin(const uint id, const char* const newName) { CARLA_SAFE_ASSERT_RETURN_ERR(pData->isIdling == 0, "An operation is still being processed, please wait for it to finish"); CARLA_SAFE_ASSERT_RETURN_ERR(pData->plugins != nullptr, "Invalid engine internal data"); CARLA_SAFE_ASSERT_RETURN_ERR(pData->curPluginCount != 0, "Invalid engine internal data"); CARLA_SAFE_ASSERT_RETURN_ERR(pData->nextAction.opcode == kEnginePostActionNull, "Invalid engine internal data"); CARLA_SAFE_ASSERT_RETURN_ERR(id < pData->curPluginCount, "Invalid plugin Id"); CARLA_SAFE_ASSERT_RETURN_ERR(newName != nullptr && newName[0] != '\0', "Invalid plugin name"); carla_debug("CarlaEngine::renamePlugin(%i, \"%s\")", id, newName); const CarlaPluginPtr plugin = pData->plugins[id].plugin; CARLA_SAFE_ASSERT_RETURN_ERR(plugin.get() != nullptr, "Could not find plugin to rename"); CARLA_SAFE_ASSERT_RETURN_ERR(plugin->getId() == id, "Invalid engine internal data"); const char* const uniqueName(getUniquePluginName(newName)); CARLA_SAFE_ASSERT_RETURN_ERR(uniqueName != nullptr, "Unable to get new unique plugin name"); plugin->setName(uniqueName); if (pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY) pData->graph.renamePlugin(plugin, uniqueName); callback(true, true, ENGINE_CALLBACK_PLUGIN_RENAMED, id, 0, 0, 0, 0.0f, uniqueName); delete[] uniqueName; return true; } bool CarlaEngine::clonePlugin(const uint id) { CARLA_SAFE_ASSERT_RETURN_ERR(pData->isIdling == 0, "An operation is still being processed, please wait for it to finish"); CARLA_SAFE_ASSERT_RETURN_ERR(pData->plugins != nullptr, "Invalid engine internal data"); CARLA_SAFE_ASSERT_RETURN_ERR(pData->curPluginCount != 0, "Invalid engine internal data"); CARLA_SAFE_ASSERT_RETURN_ERR(pData->nextAction.opcode == kEnginePostActionNull, "Invalid engine internal data"); CARLA_SAFE_ASSERT_RETURN_ERR(id < pData->curPluginCount, "Invalid plugin Id"); carla_debug("CarlaEngine::clonePlugin(%i)", id); const CarlaPluginPtr plugin = pData->plugins[id].plugin; CARLA_SAFE_ASSERT_RETURN_ERR(plugin.get() != nullptr, "Could not find plugin to clone"); CARLA_SAFE_ASSERT_RETURN_ERR(plugin->getId() == id, "Invalid engine internal data"); char label[STR_MAX+1]; carla_zeroChars(label, STR_MAX+1); if (! plugin->getLabel(label)) label[0] = '\0'; const uint pluginCountBefore(pData->curPluginCount); if (! addPlugin(plugin->getBinaryType(), plugin->getType(), plugin->getFilename(), plugin->getName(), label, plugin->getUniqueId(), plugin->getExtraStuff(), plugin->getOptionsEnabled())) return false; CARLA_SAFE_ASSERT_RETURN_ERR(pluginCountBefore+1 == pData->curPluginCount, "No new plugin found"); if (const CarlaPluginPtr newPlugin = pData->plugins[pluginCountBefore].plugin) { if (newPlugin->getType() == PLUGIN_LV2) newPlugin->cloneLV2Files(*plugin); newPlugin->loadStateSave(plugin->getStateSave(true)); } return true; } bool CarlaEngine::replacePlugin(const uint id) noexcept { CARLA_SAFE_ASSERT_RETURN_ERR(pData->isIdling == 0, "An operation is still being processed, please wait for it to finish"); CARLA_SAFE_ASSERT_RETURN_ERR(pData->plugins != nullptr, "Invalid engine internal data"); CARLA_SAFE_ASSERT_RETURN_ERR(pData->curPluginCount != 0, "Invalid engine internal data"); CARLA_SAFE_ASSERT_RETURN_ERR(pData->nextAction.opcode == kEnginePostActionNull, "Invalid engine internal data"); carla_debug("CarlaEngine::replacePlugin(%i)", id); // might use this to reset if (id == pData->maxPluginNumber) { pData->nextPluginId = pData->maxPluginNumber; return true; } CARLA_SAFE_ASSERT_RETURN_ERR(id < pData->curPluginCount, "Invalid plugin Id"); const CarlaPluginPtr plugin = pData->plugins[id].plugin; CARLA_SAFE_ASSERT_RETURN_ERR(plugin.get() != nullptr, "Could not find plugin to replace"); CARLA_SAFE_ASSERT_RETURN_ERR(plugin->getId() == id, "Invalid engine internal data"); pData->nextPluginId = id; return true; } bool CarlaEngine::switchPlugins(const uint idA, const uint idB) noexcept { CARLA_SAFE_ASSERT_RETURN_ERR(pData->isIdling == 0, "An operation is still being processed, please wait for it to finish"); CARLA_SAFE_ASSERT_RETURN_ERR(pData->plugins != nullptr, "Invalid engine internal data"); CARLA_SAFE_ASSERT_RETURN_ERR(pData->curPluginCount >= 2, "Invalid engine internal data"); CARLA_SAFE_ASSERT_RETURN_ERR(pData->nextAction.opcode == kEnginePostActionNull, "Invalid engine internal data"); CARLA_SAFE_ASSERT_RETURN_ERR(idA != idB, "Invalid operation, cannot switch plugin with itself"); CARLA_SAFE_ASSERT_RETURN_ERR(idA < pData->curPluginCount, "Invalid plugin Id"); CARLA_SAFE_ASSERT_RETURN_ERR(idB < pData->curPluginCount, "Invalid plugin Id"); carla_debug("CarlaEngine::switchPlugins(%i)", idA, idB); const CarlaPluginPtr pluginA = pData->plugins[idA].plugin; const CarlaPluginPtr pluginB = pData->plugins[idB].plugin; CARLA_SAFE_ASSERT_RETURN_ERR(pluginA.get() != nullptr, "Could not find plugin to switch"); CARLA_SAFE_ASSERT_RETURN_ERR(pluginB.get() != nullptr, "Could not find plugin to switch"); CARLA_SAFE_ASSERT_RETURN_ERR(pluginA->getId() == idA, "Invalid engine internal data"); CARLA_SAFE_ASSERT_RETURN_ERR(pluginB->getId() == idB, "Invalid engine internal data"); const ScopedThreadStopper sts(this); if (pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY) pData->graph.switchPlugins(pluginA, pluginB); const ScopedActionLock sal(this, kEnginePostActionSwitchPlugins, idA, idB); // TODO /* pluginA->updateOscURL(); pluginB->updateOscURL(); if (isOscControlRegistered()) oscSend_control_switch_plugins(idA, idB); */ return true; } #endif void CarlaEngine::touchPluginParameter(const uint, const uint32_t, const bool) noexcept { } CarlaPluginPtr CarlaEngine::getPlugin(const uint id) const noexcept { #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH CARLA_SAFE_ASSERT_RETURN_ERRN(pData->plugins != nullptr, "Invalid engine internal data"); CARLA_SAFE_ASSERT_RETURN_ERRN(pData->curPluginCount != 0, "Invalid engine internal data"); #endif CARLA_SAFE_ASSERT_RETURN_ERRN(pData->nextAction.opcode == kEnginePostActionNull, "Invalid engine internal data"); CARLA_SAFE_ASSERT_RETURN_ERRN(id < pData->curPluginCount, "Invalid plugin Id"); return pData->plugins[id].plugin; } CarlaPluginPtr CarlaEngine::getPluginUnchecked(const uint id) const noexcept { return pData->plugins[id].plugin; } const char* CarlaEngine::getUniquePluginName(const char* const name) const { CARLA_SAFE_ASSERT_RETURN(pData->nextAction.opcode == kEnginePostActionNull, nullptr); CARLA_SAFE_ASSERT_RETURN(name != nullptr && name[0] != '\0', nullptr); carla_debug("CarlaEngine::getUniquePluginName(\"%s\")", name); CarlaString sname; sname = name; if (sname.isEmpty()) { sname = "(No name)"; return sname.dup(); } const std::size_t maxNameSize(carla_minConstrained(getMaxClientNameSize(), 0xff, 6U) - 6); // 6 = strlen(" (10)") + 1 if (maxNameSize == 0 || ! isRunning()) return sname.dup(); sname.truncate(maxNameSize); sname.replace(':', '.'); // ':' is used in JACK1 to split client/port names sname.replace('/', '.'); // '/' is used by us for client name prefix for (uint i=0; i < pData->curPluginCount; ++i) { const CarlaPluginPtr plugin = pData->plugins[i].plugin; CARLA_SAFE_ASSERT_BREAK(plugin.use_count() > 0); // Check if unique name doesn't exist if (const char* const pluginName = plugin->getName()) { if (sname != pluginName) continue; } // Check if string has already been modified { const std::size_t len(sname.length()); // 1 digit, ex: " (2)" if (len > 4 && sname[len-4] == ' ' && sname[len-3] == '(' && sname.isDigit(len-2) && sname[len-1] == ')') { const int number = sname[len-2] - '0'; if (number == 9) { // next number is 10, 2 digits sname.truncate(len-4); sname += " (10)"; //sname.replace(" (9)", " (10)"); } else sname[len-2] = char('0' + number + 1); continue; } // 2 digits, ex: " (11)" if (len > 5 && sname[len-5] == ' ' && sname[len-4] == '(' && sname.isDigit(len-3) && sname.isDigit(len-2) && sname[len-1] == ')') { char n2 = sname[len-2]; char n3 = sname[len-3]; if (n2 == '9') { n2 = '0'; n3 = static_cast(n3 + 1); } else n2 = static_cast(n2 + 1); sname[len-2] = n2; sname[len-3] = n3; continue; } } // Modify string if not sname += " (2)"; } return sname.dup(); } // ----------------------------------------------------------------------- // Project management bool CarlaEngine::loadFile(const char* const filename) { CARLA_SAFE_ASSERT_RETURN_ERR(pData->isIdling == 0, "An operation is still being processed, please wait for it to finish"); CARLA_SAFE_ASSERT_RETURN_ERR(filename != nullptr && filename[0] != '\0', "Invalid filename"); carla_debug("CarlaEngine::loadFile(\"%s\")", filename); const String jfilename = String(CharPointer_UTF8(filename)); File file(jfilename); CARLA_SAFE_ASSERT_RETURN_ERR(file.exists(), "Requested file does not exist or is not a readable"); CarlaString baseName(file.getFileNameWithoutExtension().toRawUTF8()); CarlaString extension(file.getFileExtension().replace(".","").toLowerCase().toRawUTF8()); const uint curPluginId(pData->nextPluginId < pData->curPluginCount ? pData->nextPluginId : pData->curPluginCount); // ------------------------------------------------------------------- // NOTE: please keep in sync with carla_get_supported_file_extensions!! if (extension == "carxp" || extension == "carxs") return loadProject(filename, false); // ------------------------------------------------------------------- if (extension == "dls") return addPlugin(PLUGIN_DLS, filename, baseName, baseName, 0, nullptr); if (extension == "gig") return addPlugin(PLUGIN_GIG, filename, baseName, baseName, 0, nullptr); if (extension == "sf2" || extension == "sf3") return addPlugin(PLUGIN_SF2, filename, baseName, baseName, 0, nullptr); if (extension == "sfz") return addPlugin(PLUGIN_SFZ, filename, baseName, baseName, 0, nullptr); if (extension == "jsfx") return addPlugin(PLUGIN_JSFX, filename, baseName, baseName, 0, nullptr); // ------------------------------------------------------------------- if ( extension == "mp3" || #ifdef HAVE_SNDFILE extension == "aif" || extension == "aifc" || extension == "aiff" || extension == "au" || extension == "bwf" || extension == "flac" || extension == "htk" || extension == "iff" || extension == "mat4" || extension == "mat5" || extension == "oga" || extension == "ogg" || extension == "opus" || extension == "paf" || extension == "pvf" || extension == "pvf5" || extension == "sd2" || extension == "sf" || extension == "snd" || extension == "svx" || extension == "vcc" || extension == "w64" || extension == "wav" || extension == "xi" || #endif #ifdef HAVE_FFMPEG extension == "3g2" || extension == "3gp" || extension == "aac" || extension == "ac3" || extension == "amr" || extension == "ape" || extension == "mp2" || extension == "mpc" || extension == "wma" || # ifndef HAVE_SNDFILE // FFmpeg without sndfile extension == "flac" || extension == "oga" || extension == "ogg" || extension == "w64" || extension == "wav" || # endif #endif false ) { if (addPlugin(PLUGIN_INTERNAL, nullptr, baseName, "audiofile", 0, nullptr)) { if (const CarlaPluginPtr plugin = getPlugin(curPluginId)) plugin->setCustomData(CUSTOM_DATA_TYPE_STRING, "file", filename, true); return true; } return false; } // ------------------------------------------------------------------- if (extension == "mid" || extension == "midi") { if (addPlugin(PLUGIN_INTERNAL, nullptr, baseName, "midifile", 0, nullptr)) { if (const CarlaPluginPtr plugin = getPlugin(curPluginId)) plugin->setCustomData(CUSTOM_DATA_TYPE_STRING, "file", filename, true); return true; } return false; } // ------------------------------------------------------------------- // ZynAddSubFX if (extension == "xmz" || extension == "xiz") { #ifdef HAVE_ZYN_DEPS CarlaString nicerName("Zyn - "); const std::size_t sep(baseName.find('-')+1); if (sep < baseName.length()) nicerName += baseName.buffer()+sep; else nicerName += baseName; if (addPlugin(PLUGIN_INTERNAL, nullptr, nicerName, "zynaddsubfx", 0, nullptr)) { callback(true, true, ENGINE_CALLBACK_UI_STATE_CHANGED, curPluginId, 0, 0, 0, 0.0f, nullptr); if (const CarlaPluginPtr plugin = getPlugin(curPluginId)) { const char* const ext = (extension == "xmz") ? "CarlaAlternateFile1" : "CarlaAlternateFile2"; plugin->setCustomData(CUSTOM_DATA_TYPE_STRING, ext, filename, true); } return true; } return false; #else setLastError("This Carla build does not have ZynAddSubFX support"); return false; #endif } // ------------------------------------------------------------------- // Direct plugin binaries #ifdef CARLA_OS_MAC if (extension == "vst") return addPlugin(PLUGIN_VST2, filename, nullptr, nullptr, 0, nullptr); #else if (extension == "dll" || extension == "so") return addPlugin(getBinaryTypeFromFile(filename), PLUGIN_VST2, filename, nullptr, nullptr, 0, nullptr); #endif #ifdef USING_JUCE if (extension == "vst3") return addPlugin(getBinaryTypeFromFile(filename), PLUGIN_VST3, filename, nullptr, nullptr, 0, nullptr); #endif // ------------------------------------------------------------------- setLastError("Unknown file extension"); return false; } bool CarlaEngine::loadProject(const char* const filename, const bool setAsCurrentProject) { CARLA_SAFE_ASSERT_RETURN_ERR(pData->isIdling == 0, "An operation is still being processed, please wait for it to finish"); CARLA_SAFE_ASSERT_RETURN_ERR(filename != nullptr && filename[0] != '\0', "Invalid filename"); carla_debug("CarlaEngine::loadProject(\"%s\")", filename); const String jfilename = String(CharPointer_UTF8(filename)); const File file(jfilename); CARLA_SAFE_ASSERT_RETURN_ERR(file.existsAsFile(), "Requested file does not exist or is not a readable file"); if (setAsCurrentProject) { #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (pData->currentProjectFilename != filename) { pData->currentProjectFilename = filename; bool found; const size_t r = pData->currentProjectFilename.rfind(CARLA_OS_SEP, &found); if (found) { pData->currentProjectFolder = filename; pData->currentProjectFolder[r] = '\0'; } else { pData->currentProjectFolder.clear(); } } #endif } XmlDocument xml(file); return loadProjectInternal(xml, !setAsCurrentProject); } bool CarlaEngine::saveProject(const char* const filename, const bool setAsCurrentProject) { CARLA_SAFE_ASSERT_RETURN_ERR(filename != nullptr && filename[0] != '\0', "Invalid filename"); carla_debug("CarlaEngine::saveProject(\"%s\")", filename); if (setAsCurrentProject) { #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (pData->currentProjectFilename != filename) { pData->currentProjectFilename = filename; bool found; const size_t r = pData->currentProjectFilename.rfind(CARLA_OS_SEP, &found); if (found) { pData->currentProjectFolder = filename; pData->currentProjectFolder[r] = '\0'; } else { pData->currentProjectFolder.clear(); } } #endif } MemoryOutputStream out; saveProjectInternal(out); const String jfilename = String(CharPointer_UTF8(filename)); File file(jfilename); if (file.replaceWithData(out.getData(), out.getDataSize())) return true; setLastError("Failed to write file"); return false; } #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH const char* CarlaEngine::getCurrentProjectFolder() const noexcept { return pData->currentProjectFolder.isNotEmpty() ? pData->currentProjectFolder.buffer() : nullptr; } const char* CarlaEngine::getCurrentProjectFilename() const noexcept { return pData->currentProjectFilename; } void CarlaEngine::clearCurrentProjectFilename() noexcept { pData->currentProjectFilename.clear(); pData->currentProjectFolder.clear(); } #endif // ----------------------------------------------------------------------- // Information (base) uint32_t CarlaEngine::getBufferSize() const noexcept { return pData->bufferSize; } double CarlaEngine::getSampleRate() const noexcept { return pData->sampleRate; } const char* CarlaEngine::getName() const noexcept { return pData->name; } EngineProcessMode CarlaEngine::getProccessMode() const noexcept { return pData->options.processMode; } const EngineOptions& CarlaEngine::getOptions() const noexcept { return pData->options; } EngineTimeInfo CarlaEngine::getTimeInfo() const noexcept { return pData->timeInfo; } // ----------------------------------------------------------------------- // Information (peaks) const float* CarlaEngine::getPeaks(const uint pluginId) const noexcept { static const float kFallback[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; if (pluginId == MAIN_CARLA_PLUGIN_ID) { // get peak from first plugin, if available if (const uint count = pData->curPluginCount) { pData->peaks[0] = pData->plugins[0].peaks[0]; pData->peaks[1] = pData->plugins[0].peaks[1]; pData->peaks[2] = pData->plugins[count-1].peaks[2]; pData->peaks[3] = pData->plugins[count-1].peaks[3]; } else { carla_zeroFloats(pData->peaks, 4); } return pData->peaks; } CARLA_SAFE_ASSERT_RETURN(pluginId < pData->curPluginCount, kFallback); return pData->plugins[pluginId].peaks; } float CarlaEngine::getInputPeak(const uint pluginId, const bool isLeft) const noexcept { if (pluginId == MAIN_CARLA_PLUGIN_ID) { // get peak from first plugin, if available if (pData->curPluginCount > 0) return pData->plugins[0].peaks[isLeft ? 0 : 1]; return 0.0f; } CARLA_SAFE_ASSERT_RETURN(pluginId < pData->curPluginCount, 0.0f); return pData->plugins[pluginId].peaks[isLeft ? 0 : 1]; } float CarlaEngine::getOutputPeak(const uint pluginId, const bool isLeft) const noexcept { if (pluginId == MAIN_CARLA_PLUGIN_ID) { // get peak from last plugin, if available if (pData->curPluginCount > 0) return pData->plugins[pData->curPluginCount-1].peaks[isLeft ? 2 : 3]; return 0.0f; } CARLA_SAFE_ASSERT_RETURN(pluginId < pData->curPluginCount, 0.0f); return pData->plugins[pluginId].peaks[isLeft ? 2 : 3]; } // ----------------------------------------------------------------------- // Callback void CarlaEngine::callback(const bool sendHost, const bool sendOSC, const EngineCallbackOpcode action, const uint pluginId, const int value1, const int value2, const int value3, const float valuef, const char* const valueStr) noexcept { #ifdef DEBUG if (pData->isIdling) carla_stdout("CarlaEngine::callback [while idling] (%s, %s, %i:%s, %i, %i, %i, %i, %f, \"%s\")", bool2str(sendHost), bool2str(sendOSC), action, EngineCallbackOpcode2Str(action), pluginId, value1, value2, value3, static_cast(valuef), valueStr); else if (action != ENGINE_CALLBACK_IDLE && action != ENGINE_CALLBACK_NOTE_ON && action != ENGINE_CALLBACK_NOTE_OFF) carla_debug("CarlaEngine::callback(%s, %s, %i:%s, %i, %i, %i, %i, %f, \"%s\")", bool2str(sendHost), bool2str(sendOSC), action, EngineCallbackOpcode2Str(action), pluginId, value1, value2, value3, static_cast(valuef), valueStr); #endif if (sendHost && pData->callback != nullptr) { if (action == ENGINE_CALLBACK_IDLE) ++pData->isIdling; try { pData->callback(pData->callbackPtr, action, pluginId, value1, value2, value3, valuef, valueStr); } CARLA_SAFE_EXCEPTION("callback") if (action == ENGINE_CALLBACK_IDLE) --pData->isIdling; } if (sendOSC) { #if defined(HAVE_LIBLO) && ! defined(BUILD_BRIDGE) if (pData->osc.isControlRegisteredForTCP()) { switch (action) { case ENGINE_CALLBACK_RELOAD_INFO: { CarlaPluginPtr plugin = pData->plugins[pluginId].plugin; CARLA_SAFE_ASSERT_BREAK(plugin != nullptr); pData->osc.sendPluginInfo(plugin); break; } case ENGINE_CALLBACK_RELOAD_PARAMETERS: { CarlaPluginPtr plugin = pData->plugins[pluginId].plugin; CARLA_SAFE_ASSERT_BREAK(plugin != nullptr); pData->osc.sendPluginPortCount(plugin); if (const uint32_t count = plugin->getParameterCount()) { for (uint32_t i=0; iosc.sendPluginParameterInfo(plugin, i); } break; } case ENGINE_CALLBACK_RELOAD_PROGRAMS: { CarlaPluginPtr plugin = pData->plugins[pluginId].plugin; CARLA_SAFE_ASSERT_BREAK(plugin != nullptr); pData->osc.sendPluginProgramCount(plugin); if (const uint32_t count = plugin->getProgramCount()) { for (uint32_t i=0; iosc.sendPluginProgram(plugin, i); } if (const uint32_t count = plugin->getMidiProgramCount()) { for (uint32_t i=0; iosc.sendPluginMidiProgram(plugin, i); } break; } case ENGINE_CALLBACK_PLUGIN_ADDED: case ENGINE_CALLBACK_RELOAD_ALL: { CarlaPluginPtr plugin = pData->plugins[pluginId].plugin; CARLA_SAFE_ASSERT_BREAK(plugin != nullptr); pData->osc.sendPluginInfo(plugin); pData->osc.sendPluginPortCount(plugin); pData->osc.sendPluginDataCount(plugin); if (const uint32_t count = plugin->getParameterCount()) { for (uint32_t i=0; iosc.sendPluginParameterInfo(plugin, i); } if (const uint32_t count = plugin->getProgramCount()) { for (uint32_t i=0; iosc.sendPluginProgram(plugin, i); } if (const uint32_t count = plugin->getMidiProgramCount()) { for (uint32_t i=0; iosc.sendPluginMidiProgram(plugin, i); } if (const uint32_t count = plugin->getCustomDataCount()) { for (uint32_t i=0; iosc.sendPluginCustomData(plugin, i); } pData->osc.sendPluginInternalParameterValues(plugin); break; } case ENGINE_CALLBACK_IDLE: return; default: break; } pData->osc.sendCallback(action, pluginId, value1, value2, value3, valuef, valueStr); } #endif } } void CarlaEngine::setCallback(const EngineCallbackFunc func, void* const ptr) noexcept { carla_debug("CarlaEngine::setCallback(%p, %p)", func, ptr); pData->callback = func; pData->callbackPtr = ptr; } // ----------------------------------------------------------------------- // File Callback const char* CarlaEngine::runFileCallback(const FileCallbackOpcode action, const bool isDir, const char* const title, const char* const filter) noexcept { CARLA_SAFE_ASSERT_RETURN(title != nullptr && title[0] != '\0', nullptr); CARLA_SAFE_ASSERT_RETURN(filter != nullptr, nullptr); carla_debug("CarlaEngine::runFileCallback(%i:%s, %s, \"%s\", \"%s\")", action, FileCallbackOpcode2Str(action), bool2str(isDir), title, filter); const char* ret = nullptr; if (pData->fileCallback != nullptr) { try { ret = pData->fileCallback(pData->fileCallbackPtr, action, isDir, title, filter); } CARLA_SAFE_EXCEPTION("runFileCallback"); } return ret; } void CarlaEngine::setFileCallback(const FileCallbackFunc func, void* const ptr) noexcept { carla_debug("CarlaEngine::setFileCallback(%p, %p)", func, ptr); pData->fileCallback = func; pData->fileCallbackPtr = ptr; } // ----------------------------------------------------------------------- // Transport void CarlaEngine::transportPlay() noexcept { pData->timeInfo.playing = true; pData->time.setNeedsReset(); } void CarlaEngine::transportPause() noexcept { if (pData->timeInfo.playing) pData->time.pause(); else pData->time.setNeedsReset(); } void CarlaEngine::transportBPM(const double bpm) noexcept { CARLA_SAFE_ASSERT_RETURN(bpm >= 20.0,) try { pData->time.setBPM(bpm); } CARLA_SAFE_EXCEPTION("CarlaEngine::transportBPM"); } void CarlaEngine::transportRelocate(const uint64_t frame) noexcept { pData->time.relocate(frame); } // ----------------------------------------------------------------------- // Error handling const char* CarlaEngine::getLastError() const noexcept { return pData->lastError; } void CarlaEngine::setLastError(const char* const error) const noexcept { pData->lastError = error; } // ----------------------------------------------------------------------- // Misc bool CarlaEngine::isAboutToClose() const noexcept { return pData->aboutToClose; } bool CarlaEngine::setAboutToClose() noexcept { carla_debug("CarlaEngine::setAboutToClose()"); pData->aboutToClose = true; return (pData->isIdling == 0); } #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH bool CarlaEngine::isLoadingProject() const noexcept { return pData->loadingProject; } #endif void CarlaEngine::setActionCanceled(const bool canceled) noexcept { pData->actionCanceled = canceled; } bool CarlaEngine::wasActionCanceled() const noexcept { return pData->actionCanceled; } // ----------------------------------------------------------------------- // Global options void CarlaEngine::setOption(const EngineOption option, const int value, const char* const valueStr) noexcept { carla_debug("CarlaEngine::setOption(%i:%s, %i, \"%s\")", option, EngineOption2Str(option), value, valueStr); if (isRunning()) { switch (option) { case ENGINE_OPTION_PROCESS_MODE: case ENGINE_OPTION_AUDIO_TRIPLE_BUFFER: case ENGINE_OPTION_AUDIO_DRIVER: case ENGINE_OPTION_AUDIO_DEVICE: return carla_stderr("CarlaEngine::setOption(%i:%s, %i, \"%s\") - Cannot set this option while engine is running!", option, EngineOption2Str(option), value, valueStr); default: break; } } // do not un-force stereo for rack mode if (pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK && option == ENGINE_OPTION_FORCE_STEREO && value != 0) return; switch (option) { case ENGINE_OPTION_DEBUG: break; case ENGINE_OPTION_PROCESS_MODE: CARLA_SAFE_ASSERT_RETURN(value >= ENGINE_PROCESS_MODE_SINGLE_CLIENT && value <= ENGINE_PROCESS_MODE_BRIDGE,); pData->options.processMode = static_cast(value); break; case ENGINE_OPTION_TRANSPORT_MODE: CARLA_SAFE_ASSERT_RETURN(value >= ENGINE_TRANSPORT_MODE_DISABLED && value <= ENGINE_TRANSPORT_MODE_BRIDGE,); CARLA_SAFE_ASSERT_RETURN(getType() == kEngineTypeJack || value != ENGINE_TRANSPORT_MODE_JACK,); pData->options.transportMode = static_cast(value); delete[] pData->options.transportExtra; if (value >= ENGINE_TRANSPORT_MODE_DISABLED && valueStr != nullptr) pData->options.transportExtra = carla_strdup_safe(valueStr); else pData->options.transportExtra = nullptr; pData->time.setNeedsReset(); #if defined(HAVE_HYLIA) && !defined(BUILD_BRIDGE) // enable link now if needed { const bool linkEnabled = pData->options.transportExtra != nullptr && std::strstr(pData->options.transportExtra, ":link:") != nullptr; pData->time.enableLink(linkEnabled); } #endif break; case ENGINE_OPTION_FORCE_STEREO: CARLA_SAFE_ASSERT_RETURN(value == 0 || value == 1,); pData->options.forceStereo = (value != 0); break; case ENGINE_OPTION_PREFER_PLUGIN_BRIDGES: #ifdef BUILD_BRIDGE_ALTERNATIVE_ARCH CARLA_SAFE_ASSERT_RETURN(value == 0,); #else CARLA_SAFE_ASSERT_RETURN(value == 0 || value == 1,); #endif pData->options.preferPluginBridges = (value != 0); break; case ENGINE_OPTION_PREFER_UI_BRIDGES: CARLA_SAFE_ASSERT_RETURN(value == 0 || value == 1,); pData->options.preferUiBridges = (value != 0); break; case ENGINE_OPTION_UIS_ALWAYS_ON_TOP: CARLA_SAFE_ASSERT_RETURN(value == 0 || value == 1,); pData->options.uisAlwaysOnTop = (value != 0); break; case ENGINE_OPTION_MAX_PARAMETERS: CARLA_SAFE_ASSERT_RETURN(value >= 0,); pData->options.maxParameters = static_cast(value); break; case ENGINE_OPTION_RESET_XRUNS: CARLA_SAFE_ASSERT_RETURN(value == 0 || value == 1,); pData->options.resetXruns = (value != 0); break; case ENGINE_OPTION_UI_BRIDGES_TIMEOUT: CARLA_SAFE_ASSERT_RETURN(value >= 0,); pData->options.uiBridgesTimeout = static_cast(value); break; case ENGINE_OPTION_AUDIO_BUFFER_SIZE: CARLA_SAFE_ASSERT_RETURN(value >= 8,); pData->options.audioBufferSize = static_cast(value); break; case ENGINE_OPTION_AUDIO_SAMPLE_RATE: CARLA_SAFE_ASSERT_RETURN(value >= 22050,); pData->options.audioSampleRate = static_cast(value); break; case ENGINE_OPTION_AUDIO_TRIPLE_BUFFER: CARLA_SAFE_ASSERT_RETURN(value == 0 || value == 1,); pData->options.audioTripleBuffer = (value != 0); break; case ENGINE_OPTION_AUDIO_DRIVER: CARLA_SAFE_ASSERT_RETURN(valueStr != nullptr,); if (pData->options.audioDriver != nullptr) delete[] pData->options.audioDriver; pData->options.audioDriver = carla_strdup_safe(valueStr); break; case ENGINE_OPTION_AUDIO_DEVICE: CARLA_SAFE_ASSERT_RETURN(valueStr != nullptr,); if (pData->options.audioDevice != nullptr) delete[] pData->options.audioDevice; pData->options.audioDevice = carla_strdup_safe(valueStr); break; #ifndef BUILD_BRIDGE case ENGINE_OPTION_OSC_ENABLED: CARLA_SAFE_ASSERT_RETURN(value == 0 || value == 1,); pData->options.oscEnabled = (value != 0); break; case ENGINE_OPTION_OSC_PORT_TCP: CARLA_SAFE_ASSERT_RETURN(value <= 0 || value >= 1024,); pData->options.oscPortTCP = value; break; case ENGINE_OPTION_OSC_PORT_UDP: CARLA_SAFE_ASSERT_RETURN(value <= 0 || value >= 1024,); pData->options.oscPortUDP = value; break; #endif case ENGINE_OPTION_FILE_PATH: CARLA_SAFE_ASSERT_RETURN(value > FILE_NONE,); CARLA_SAFE_ASSERT_RETURN(value <= FILE_MIDI,); switch (value) { case FILE_AUDIO: if (pData->options.pathAudio != nullptr) delete[] pData->options.pathAudio; if (valueStr != nullptr) pData->options.pathAudio = carla_strdup_safe(valueStr); else pData->options.pathAudio = nullptr; break; case FILE_MIDI: if (pData->options.pathMIDI != nullptr) delete[] pData->options.pathMIDI; if (valueStr != nullptr) pData->options.pathMIDI = carla_strdup_safe(valueStr); else pData->options.pathMIDI = nullptr; break; default: return carla_stderr("CarlaEngine::setOption(%i:%s, %i, \"%s\") - Invalid file type", option, EngineOption2Str(option), value, valueStr); break; } break; case ENGINE_OPTION_PLUGIN_PATH: CARLA_SAFE_ASSERT_RETURN(value > PLUGIN_NONE,); CARLA_SAFE_ASSERT_RETURN(value <= PLUGIN_JSFX,); switch (value) { case PLUGIN_LADSPA: if (pData->options.pathLADSPA != nullptr) delete[] pData->options.pathLADSPA; if (valueStr != nullptr) pData->options.pathLADSPA = carla_strdup_safe(valueStr); else pData->options.pathLADSPA = nullptr; break; case PLUGIN_DSSI: if (pData->options.pathDSSI != nullptr) delete[] pData->options.pathDSSI; if (valueStr != nullptr) pData->options.pathDSSI = carla_strdup_safe(valueStr); else pData->options.pathDSSI = nullptr; break; case PLUGIN_LV2: if (pData->options.pathLV2 != nullptr) delete[] pData->options.pathLV2; if (valueStr != nullptr) pData->options.pathLV2 = carla_strdup_safe(valueStr); else pData->options.pathLV2 = nullptr; break; case PLUGIN_VST2: if (pData->options.pathVST2 != nullptr) delete[] pData->options.pathVST2; if (valueStr != nullptr) pData->options.pathVST2 = carla_strdup_safe(valueStr); else pData->options.pathVST2 = nullptr; break; case PLUGIN_VST3: if (pData->options.pathVST3 != nullptr) delete[] pData->options.pathVST3; if (valueStr != nullptr) pData->options.pathVST3 = carla_strdup_safe(valueStr); else pData->options.pathVST3 = nullptr; break; case PLUGIN_SF2: if (pData->options.pathSF2 != nullptr) delete[] pData->options.pathSF2; if (valueStr != nullptr) pData->options.pathSF2 = carla_strdup_safe(valueStr); else pData->options.pathSF2 = nullptr; break; case PLUGIN_SFZ: if (pData->options.pathSFZ != nullptr) delete[] pData->options.pathSFZ; if (valueStr != nullptr) pData->options.pathSFZ = carla_strdup_safe(valueStr); else pData->options.pathSFZ = nullptr; break; case PLUGIN_JSFX: if (pData->options.pathJSFX != nullptr) delete[] pData->options.pathJSFX; if (valueStr != nullptr) pData->options.pathJSFX = carla_strdup_safe(valueStr); else pData->options.pathJSFX = nullptr; break; default: return carla_stderr("CarlaEngine::setOption(%i:%s, %i, \"%s\") - Invalid plugin type", option, EngineOption2Str(option), value, valueStr); break; } break; case ENGINE_OPTION_PATH_BINARIES: CARLA_SAFE_ASSERT_RETURN(valueStr != nullptr && valueStr[0] != '\0',); if (pData->options.binaryDir != nullptr) delete[] pData->options.binaryDir; pData->options.binaryDir = carla_strdup_safe(valueStr); break; case ENGINE_OPTION_PATH_RESOURCES: CARLA_SAFE_ASSERT_RETURN(valueStr != nullptr && valueStr[0] != '\0',); if (pData->options.resourceDir != nullptr) delete[] pData->options.resourceDir; pData->options.resourceDir = carla_strdup_safe(valueStr); break; case ENGINE_OPTION_PREVENT_BAD_BEHAVIOUR: { CARLA_SAFE_ASSERT_RETURN(pData->options.binaryDir != nullptr && pData->options.binaryDir[0] != '\0',); #ifdef CARLA_OS_LINUX const ScopedEngineEnvironmentLocker _seel(this); if (value != 0) { CarlaString interposerPath(CarlaString(pData->options.binaryDir) + "/libcarla_interposer-safe.so"); ::setenv("LD_PRELOAD", interposerPath.buffer(), 1); } else { ::unsetenv("LD_PRELOAD"); } #endif } break; case ENGINE_OPTION_FRONTEND_BACKGROUND_COLOR: pData->options.bgColor = static_cast(value); break; case ENGINE_OPTION_FRONTEND_FOREGROUND_COLOR: pData->options.fgColor = static_cast(value); break; case ENGINE_OPTION_FRONTEND_UI_SCALE: CARLA_SAFE_ASSERT_RETURN(value > 0,); pData->options.uiScale = static_cast(value) / 1000; break; case ENGINE_OPTION_FRONTEND_WIN_ID: { CARLA_SAFE_ASSERT_RETURN(valueStr != nullptr && valueStr[0] != '\0',); const long long winId(std::strtoll(valueStr, nullptr, 16)); CARLA_SAFE_ASSERT_RETURN(winId >= 0,); pData->options.frontendWinId = static_cast(winId); } break; #if !defined(BUILD_BRIDGE_ALTERNATIVE_ARCH) && !defined(CARLA_OS_WIN) case ENGINE_OPTION_WINE_EXECUTABLE: CARLA_SAFE_ASSERT_RETURN(valueStr != nullptr && valueStr[0] != '\0',); if (pData->options.wine.executable != nullptr) delete[] pData->options.wine.executable; pData->options.wine.executable = carla_strdup_safe(valueStr); break; case ENGINE_OPTION_WINE_AUTO_PREFIX: CARLA_SAFE_ASSERT_RETURN(value == 0 || value == 1,); pData->options.wine.autoPrefix = (value != 0); break; case ENGINE_OPTION_WINE_FALLBACK_PREFIX: CARLA_SAFE_ASSERT_RETURN(valueStr != nullptr && valueStr[0] != '\0',); if (pData->options.wine.fallbackPrefix != nullptr) delete[] pData->options.wine.fallbackPrefix; pData->options.wine.fallbackPrefix = carla_strdup_safe(valueStr); break; case ENGINE_OPTION_WINE_RT_PRIO_ENABLED: CARLA_SAFE_ASSERT_RETURN(value == 0 || value == 1,); pData->options.wine.rtPrio = (value != 0); break; case ENGINE_OPTION_WINE_BASE_RT_PRIO: CARLA_SAFE_ASSERT_RETURN(value >= 1 && value <= 89,); pData->options.wine.baseRtPrio = value; break; case ENGINE_OPTION_WINE_SERVER_RT_PRIO: CARLA_SAFE_ASSERT_RETURN(value >= 1 && value <= 99,); pData->options.wine.serverRtPrio = value; break; #endif #ifndef BUILD_BRIDGE case ENGINE_OPTION_DEBUG_CONSOLE_OUTPUT: break; #endif case ENGINE_OPTION_CLIENT_NAME_PREFIX: if (pData->options.clientNamePrefix != nullptr) delete[] pData->options.clientNamePrefix; pData->options.clientNamePrefix = valueStr != nullptr && valueStr[0] != '\0' ? carla_strdup_safe(valueStr) : nullptr; break; case ENGINE_OPTION_PLUGINS_ARE_STANDALONE: CARLA_SAFE_ASSERT_RETURN(value == 0 || value == 1,); pData->options.pluginsAreStandalone = (value != 0); break; } } #ifndef BUILD_BRIDGE // ----------------------------------------------------------------------- // OSC Stuff bool CarlaEngine::isOscControlRegistered() const noexcept { # ifdef HAVE_LIBLO return pData->osc.isControlRegisteredForTCP(); # else return false; # endif } const char* CarlaEngine::getOscServerPathTCP() const noexcept { # ifdef HAVE_LIBLO return pData->osc.getServerPathTCP(); # else return nullptr; # endif } const char* CarlaEngine::getOscServerPathUDP() const noexcept { # ifdef HAVE_LIBLO return pData->osc.getServerPathUDP(); # else return nullptr; # endif } #endif // ----------------------------------------------------------------------- // Internal stuff void CarlaEngine::bufferSizeChanged(const uint32_t newBufferSize) { carla_debug("CarlaEngine::bufferSizeChanged(%i)", newBufferSize); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK || pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY) { pData->graph.setBufferSize(newBufferSize); } #endif pData->time.updateAudioValues(newBufferSize, pData->sampleRate); for (uint i=0; i < pData->curPluginCount; ++i) { if (const CarlaPluginPtr plugin = pData->plugins[i].plugin) { if (plugin->isEnabled() && plugin->tryLock(true)) { plugin->bufferSizeChanged(newBufferSize); plugin->unlock(); } } } callback(true, true, ENGINE_CALLBACK_BUFFER_SIZE_CHANGED, 0, static_cast(newBufferSize), 0, 0, 0.0f, nullptr); } void CarlaEngine::sampleRateChanged(const double newSampleRate) { carla_debug("CarlaEngine::sampleRateChanged(%g)", newSampleRate); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK || pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY) { pData->graph.setSampleRate(newSampleRate); } #endif pData->time.updateAudioValues(pData->bufferSize, newSampleRate); for (uint i=0; i < pData->curPluginCount; ++i) { if (const CarlaPluginPtr plugin = pData->plugins[i].plugin) { if (plugin->isEnabled() && plugin->tryLock(true)) { plugin->sampleRateChanged(newSampleRate); plugin->unlock(); } } } callback(true, true, ENGINE_CALLBACK_SAMPLE_RATE_CHANGED, 0, 0, 0, 0, static_cast(newSampleRate), nullptr); } void CarlaEngine::offlineModeChanged(const bool isOfflineNow) { carla_debug("CarlaEngine::offlineModeChanged(%s)", bool2str(isOfflineNow)); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK || pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY) { pData->graph.setOffline(isOfflineNow); } #endif for (uint i=0; i < pData->curPluginCount; ++i) { if (const CarlaPluginPtr plugin = pData->plugins[i].plugin) if (plugin->isEnabled()) plugin->offlineModeChanged(isOfflineNow); } } void CarlaEngine::setPluginPeaksRT(const uint pluginId, float const inPeaks[2], float const outPeaks[2]) noexcept { EnginePluginData& pluginData(pData->plugins[pluginId]); pluginData.peaks[0] = inPeaks[0]; pluginData.peaks[1] = inPeaks[1]; pluginData.peaks[2] = outPeaks[0]; pluginData.peaks[3] = outPeaks[1]; } void CarlaEngine::saveProjectInternal(water::MemoryOutputStream& outStream) const { // send initial prepareForSave first, giving time for bridges to act for (uint i=0; i < pData->curPluginCount; ++i) { if (const CarlaPluginPtr plugin = pData->plugins[i].plugin) { if (plugin->isEnabled()) { #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // deactivate bridge client-side ping check, since some plugins block during save if (plugin->getHints() & PLUGIN_IS_BRIDGE) plugin->setCustomData(CUSTOM_DATA_TYPE_STRING, "__CarlaPingOnOff__", "false", false); #endif plugin->prepareForSave(false); } } } outStream << "\n"; outStream << "\n"; outStream << "ignoreClientPrefix) outStream << " IgnoreClientPrefix='true'"; #endif outStream << ">\n"; const bool isPlugin(getType() == kEngineTypePlugin); const EngineOptions& options(pData->options); { MemoryOutputStream outSettings(1024); outSettings << " \n"; outSettings << " " << bool2str(options.forceStereo) << "\n"; outSettings << " " << bool2str(options.preferPluginBridges) << "\n"; outSettings << " " << bool2str(options.preferUiBridges) << "\n"; outSettings << " " << bool2str(options.uisAlwaysOnTop) << "\n"; outSettings << " " << String(options.maxParameters) << "\n"; outSettings << " " << String(options.uiBridgesTimeout) << "\n"; if (isPlugin) { outSettings << " " << xmlSafeString(options.pathLADSPA, true) << "\n"; outSettings << " " << xmlSafeString(options.pathDSSI, true) << "\n"; outSettings << " " << xmlSafeString(options.pathLV2, true) << "\n"; outSettings << " " << xmlSafeString(options.pathVST2, true) << "\n"; outSettings << " " << xmlSafeString(options.pathVST3, true) << "\n"; outSettings << " " << xmlSafeString(options.pathSF2, true) << "\n"; outSettings << " " << xmlSafeString(options.pathSFZ, true) << "\n"; outSettings << " " << xmlSafeString(options.pathJSFX, true) << "\n"; } outSettings << " \n"; outStream << outSettings; } if (pData->timeInfo.bbt.valid && ! isPlugin) { MemoryOutputStream outTransport(128); outTransport << "\n \n"; // outTransport << " " << pData->timeInfo.bbt.beatsPerBar << "\n"; outTransport << " " << pData->timeInfo.bbt.beatsPerMinute << "\n"; outTransport << " \n"; outStream << outTransport; } char strBuf[STR_MAX+1]; carla_zeroChars(strBuf, STR_MAX+1); for (uint i=0; i < pData->curPluginCount; ++i) { if (const CarlaPluginPtr plugin = pData->plugins[i].plugin) { if (plugin->isEnabled()) { MemoryOutputStream outPlugin(4096), streamPlugin; plugin->getStateSave(false).dumpToMemoryStream(streamPlugin); outPlugin << "\n"; if (plugin->getRealName(strBuf)) outPlugin << " \n"; outPlugin << " \n"; outPlugin << streamPlugin; outPlugin << " \n"; outStream << outPlugin; } } } #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // tell bridges we're done saving for (uint i=0; i < pData->curPluginCount; ++i) { if (const CarlaPluginPtr plugin = pData->plugins[i].plugin) if (plugin->isEnabled() && (plugin->getHints() & PLUGIN_IS_BRIDGE) != 0) plugin->setCustomData(CUSTOM_DATA_TYPE_STRING, "__CarlaPingOnOff__", "true", false); } // save internal connections if (pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY) { uint posCount = 0; const char* const* const patchbayConns = getPatchbayConnections(false); const PatchbayPosition* const patchbayPos = getPatchbayPositions(false, posCount); if (patchbayConns != nullptr || patchbayPos != nullptr) { MemoryOutputStream outPatchbay(2048); outPatchbay << "\n \n"; if (patchbayConns != nullptr) { for (int i=0; patchbayConns[i] != nullptr && patchbayConns[i+1] != nullptr; ++i, ++i) { const char* const connSource(patchbayConns[i]); const char* const connTarget(patchbayConns[i+1]); CARLA_SAFE_ASSERT_CONTINUE(connSource != nullptr && connSource[0] != '\0'); CARLA_SAFE_ASSERT_CONTINUE(connTarget != nullptr && connTarget[0] != '\0'); outPatchbay << " \n"; outPatchbay << " " << xmlSafeString(connSource, true) << "\n"; outPatchbay << " " << xmlSafeString(connTarget, true) << "\n"; outPatchbay << " \n"; } } if (patchbayPos != nullptr && posCount != 0) { outPatchbay << " \n"; for (uint i=0; i= 0) outPatchbay << "\" pluginId=\"" << ppos.pluginId; outPatchbay << "\">\n"; outPatchbay << " " << xmlSafeString(ppos.name, true) << "\n"; outPatchbay << " \n"; if (ppos.dealloc) delete[] ppos.name; } outPatchbay << " \n"; } outPatchbay << " \n"; outStream << outPatchbay; delete[] patchbayPos; } } // if we're running inside some session-manager (and using JACK), let them handle the connections bool saveExternalConnections, saveExternalPositions = true; /**/ if (isPlugin) { saveExternalConnections = false; saveExternalPositions = false; } else if (std::strcmp(getCurrentDriverName(), "JACK") != 0) { saveExternalConnections = true; } else if (std::getenv("CARLA_DONT_MANAGE_CONNECTIONS") != nullptr) { saveExternalConnections = false; } else { saveExternalConnections = true; } if (saveExternalConnections || saveExternalPositions) { uint posCount = 0; const char* const* const patchbayConns = saveExternalConnections ? getPatchbayConnections(true) : nullptr; const PatchbayPosition* const patchbayPos = saveExternalPositions ? getPatchbayPositions(true, posCount) : nullptr; if (patchbayConns != nullptr || patchbayPos != nullptr) { MemoryOutputStream outPatchbay(2048); outPatchbay << "\n \n"; if (patchbayConns != nullptr) { for (int i=0; patchbayConns[i] != nullptr && patchbayConns[i+1] != nullptr; ++i, ++i ) { const char* const connSource(patchbayConns[i]); const char* const connTarget(patchbayConns[i+1]); CARLA_SAFE_ASSERT_CONTINUE(connSource != nullptr && connSource[0] != '\0'); CARLA_SAFE_ASSERT_CONTINUE(connTarget != nullptr && connTarget[0] != '\0'); outPatchbay << " \n"; outPatchbay << " " << xmlSafeString(connSource, true) << "\n"; outPatchbay << " " << xmlSafeString(connTarget, true) << "\n"; outPatchbay << " \n"; } } if (patchbayPos != nullptr && posCount != 0) { outPatchbay << " \n"; for (uint i=0; i= 0) outPatchbay << "\" pluginId=\"" << ppos.pluginId; outPatchbay << "\">\n"; outPatchbay << " " << xmlSafeString(ppos.name, true) << "\n"; outPatchbay << " \n"; if (ppos.dealloc) delete[] ppos.name; } outPatchbay << " \n"; } outPatchbay << " \n"; outStream << outPatchbay; } } #endif outStream << "\n"; } static String findBinaryInCustomPath(const char* const searchPath, const char* const binary) { const StringArray searchPaths(StringArray::fromTokens(searchPath, CARLA_OS_SPLIT_STR, "")); // try direct filename first String jbinary(binary); // adjust for current platform #ifdef CARLA_OS_WIN if (jbinary[0] == '/') jbinary = "C:" + jbinary.replaceCharacter('/', '\\'); #else if (jbinary[1] == ':' && (jbinary[2] == '\\' || jbinary[2] == '/')) jbinary = jbinary.substring(2).replaceCharacter('\\', '/'); #endif String filename = File(jbinary).getFileName(); int searchFlags = File::findFiles|File::ignoreHiddenFiles; if (filename.endsWithIgnoreCase(".vst3")) searchFlags |= File::findDirectories; #ifdef CARLA_OS_MAC else if (filename.endsWithIgnoreCase(".vst")) searchFlags |= File::findDirectories; #endif Array results; for (const String *it=searchPaths.begin(), *end=searchPaths.end(); it != end; ++it) { const File path(*it); results.clear(); path.findChildFiles(results, searchFlags, true, filename); if (results.size() > 0) return results.getFirst().getFullPathName(); } // try changing extension #if defined(CARLA_OS_MAC) if (filename.endsWithIgnoreCase(".dll") || filename.endsWithIgnoreCase(".so")) filename = File(jbinary).getFileNameWithoutExtension() + ".dylib"; #elif defined(CARLA_OS_WIN) if (filename.endsWithIgnoreCase(".dylib") || filename.endsWithIgnoreCase(".so")) filename = File(jbinary).getFileNameWithoutExtension() + ".dll"; #else if (filename.endsWithIgnoreCase(".dll") || filename.endsWithIgnoreCase(".dylib")) filename = File(jbinary).getFileNameWithoutExtension() + ".so"; #endif else return String(); for (const String *it=searchPaths.begin(), *end=searchPaths.end(); it != end; ++it) { const File path(*it); results.clear(); path.findChildFiles(results, searchFlags, true, filename); if (results.size() > 0) return results.getFirst().getFullPathName(); } return String(); } bool CarlaEngine::loadProjectInternal(water::XmlDocument& xmlDoc, const bool alwaysLoadConnections) { carla_debug("CarlaEngine::loadProjectInternal(%p, %s) - START", &xmlDoc, bool2str(alwaysLoadConnections)); CarlaScopedPointer xmlElement(xmlDoc.getDocumentElement(true)); CARLA_SAFE_ASSERT_RETURN_ERR(xmlElement != nullptr, "Failed to parse project file"); const String& xmlType(xmlElement->getTagName()); const bool isPreset(xmlType.equalsIgnoreCase("carla-preset")); if (! (xmlType.equalsIgnoreCase("carla-project") || isPreset)) { callback(true, true, ENGINE_CALLBACK_PROJECT_LOAD_FINISHED, 0, 0, 0, 0, 0.0f, nullptr); setLastError("Not a valid Carla project or preset file"); return false; } pData->actionCanceled = false; callback(true, true, ENGINE_CALLBACK_CANCELABLE_ACTION, 0, 1, 0, 0, 0.0f, "Loading project"); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (pData->options.clientNamePrefix != nullptr) { if (carla_isEqual(xmlElement->getDoubleAttribute("VERSION", 0.0), 2.0) || xmlElement->getBoolAttribute("IgnoreClientPrefix", false)) { carla_stdout("Loading project in compatibility mode, will ignore client name prefix"); pData->ignoreClientPrefix = true; setOption(ENGINE_OPTION_CLIENT_NAME_PREFIX, 0, ""); } } const CarlaScopedValueSetter csvs(pData->loadingProject, true, false); #endif // completely load file xmlElement = xmlDoc.getDocumentElement(false); CARLA_SAFE_ASSERT_RETURN_ERR(xmlElement != nullptr, "Failed to completely parse project file"); if (pData->aboutToClose) return true; if (pData->actionCanceled) { setLastError("Project load canceled"); return false; } callback(true, false, ENGINE_CALLBACK_IDLE, 0, 0, 0, 0, 0.0f, nullptr); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH const bool isMultiClient = pData->options.processMode == ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS; const bool isPatchbay = pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY; #endif const bool isPlugin = getType() == kEngineTypePlugin; // load engine settings first of all if (XmlElement* const elem = isPreset ? nullptr : xmlElement->getChildByName("EngineSettings")) { for (XmlElement* settElem = elem->getFirstChildElement(); settElem != nullptr; settElem = settElem->getNextElement()) { const String& tag(settElem->getTagName()); const String text(settElem->getAllSubText().trim()); /** some settings might be incorrect or require extra work, so we call setOption rather than modifying them direly */ int option = -1; int value = 0; const char* valueStr = nullptr; /**/ if (tag == "ForceStereo") { option = ENGINE_OPTION_FORCE_STEREO; value = text == "true" ? 1 : 0; } else if (tag == "PreferPluginBridges") { option = ENGINE_OPTION_PREFER_PLUGIN_BRIDGES; value = text == "true" ? 1 : 0; } else if (tag == "PreferUiBridges") { option = ENGINE_OPTION_PREFER_UI_BRIDGES; value = text == "true" ? 1 : 0; } else if (tag == "UIsAlwaysOnTop") { option = ENGINE_OPTION_UIS_ALWAYS_ON_TOP; value = text == "true" ? 1 : 0; } else if (tag == "MaxParameters") { option = ENGINE_OPTION_MAX_PARAMETERS; value = text.getIntValue(); } else if (tag == "UIBridgesTimeout") { option = ENGINE_OPTION_UI_BRIDGES_TIMEOUT; value = text.getIntValue(); } else if (isPlugin) { /**/ if (tag == "LADSPA_PATH") { option = ENGINE_OPTION_PLUGIN_PATH; value = PLUGIN_LADSPA; valueStr = text.toRawUTF8(); } else if (tag == "DSSI_PATH") { option = ENGINE_OPTION_PLUGIN_PATH; value = PLUGIN_DSSI; valueStr = text.toRawUTF8(); } else if (tag == "LV2_PATH") { option = ENGINE_OPTION_PLUGIN_PATH; value = PLUGIN_LV2; valueStr = text.toRawUTF8(); } else if (tag == "VST2_PATH") { option = ENGINE_OPTION_PLUGIN_PATH; value = PLUGIN_VST2; valueStr = text.toRawUTF8(); } else if (tag.equalsIgnoreCase("VST3_PATH")) { option = ENGINE_OPTION_PLUGIN_PATH; value = PLUGIN_VST3; valueStr = text.toRawUTF8(); } else if (tag == "SF2_PATH") { option = ENGINE_OPTION_PLUGIN_PATH; value = PLUGIN_SF2; valueStr = text.toRawUTF8(); } else if (tag == "SFZ_PATH") { option = ENGINE_OPTION_PLUGIN_PATH; value = PLUGIN_SFZ; valueStr = text.toRawUTF8(); } else if (tag == "JSFX_PATH") { option = ENGINE_OPTION_PLUGIN_PATH; value = PLUGIN_JSFX; valueStr = text.toRawUTF8(); } } if (option == -1) { // check old stuff, unhandled now if (tag == "GIG_PATH") continue; // ignored tags if (tag == "LADSPA_PATH" || tag == "DSSI_PATH" || tag == "LV2_PATH" || tag == "VST2_PATH") continue; if (tag == "VST3_PATH" || tag == "AU_PATH") continue; if (tag == "SF2_PATH" || tag == "SFZ_PATH" || tag == "JSFX_PATH") continue; // hmm something is wrong.. carla_stderr2("CarlaEngine::loadProjectInternal() - Unhandled option '%s'", tag.toRawUTF8()); continue; } setOption(static_cast(option), value, valueStr); } if (pData->aboutToClose) return true; if (pData->actionCanceled) { setLastError("Project load canceled"); return false; } } // now setup transport if (XmlElement* const elem = (isPreset || isPlugin) ? nullptr : xmlElement->getChildByName("Transport")) { if (XmlElement* const bpmElem = elem->getChildByName("BeatsPerMinute")) { const String bpmText(bpmElem->getAllSubText().trim()); const double bpm = bpmText.getDoubleValue(); // some sane limits if (bpm >= 20.0 && bpm < 400.0) pData->time.setBPM(bpm); if (pData->aboutToClose) return true; if (pData->actionCanceled) { setLastError("Project load canceled"); return false; } } } // and we handle plugins for (XmlElement* elem = xmlElement->getFirstChildElement(); elem != nullptr; elem = elem->getNextElement()) { const String& tagName(elem->getTagName()); if (isPreset || tagName == "Plugin") { CarlaStateSave stateSave; stateSave.fillFromXmlElement(isPreset ? xmlElement.get() : elem); if (pData->aboutToClose) return true; if (pData->actionCanceled) { setLastError("Project load canceled"); return false; } CARLA_SAFE_ASSERT_CONTINUE(stateSave.type != nullptr); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // compatibility code to load projects with GIG files // FIXME Remove on 2.1 release if (std::strcmp(stateSave.type, "GIG") == 0) { if (addPlugin(PLUGIN_LV2, "", stateSave.name, "http://linuxsampler.org/plugins/linuxsampler", 0, nullptr)) { const uint pluginId = pData->curPluginCount; if (const CarlaPluginPtr plugin = pData->plugins[pluginId].plugin) { if (pData->aboutToClose) return true; if (pData->actionCanceled) { setLastError("Project load canceled"); return false; } String lsState; lsState << "0.35\n"; lsState << "18 0 Chromatic\n"; lsState << "18 1 Drum Kits\n"; lsState << "20 0\n"; lsState << "0 1 " << stateSave.binary << "\n"; lsState << "0 0 0 0 1 0 GIG\n"; plugin->setCustomData(LV2_ATOM__String, "http://linuxsampler.org/schema#state-string", lsState.toRawUTF8(), true); plugin->restoreLV2State(true); plugin->setDryWet(stateSave.dryWet, true, true); plugin->setVolume(stateSave.volume, true, true); plugin->setBalanceLeft(stateSave.balanceLeft, true, true); plugin->setBalanceRight(stateSave.balanceRight, true, true); plugin->setPanning(stateSave.panning, true, true); plugin->setCtrlChannel(stateSave.ctrlChannel, true, true); plugin->setActive(stateSave.active, true, true); plugin->setEnabled(true); ++pData->curPluginCount; callback(true, true, ENGINE_CALLBACK_PLUGIN_ADDED, pluginId, plugin->getType(), 0, 0, 0.0f, plugin->getName()); if (isPatchbay) pData->graph.addPlugin(plugin); } else { carla_stderr2("Failed to get new plugin, state will not be restored correctly\n"); } } else { carla_stderr2("Failed to load a linuxsampler LV2 plugin, GIG file won't be loaded"); } callback(true, true, ENGINE_CALLBACK_IDLE, 0, 0, 0, 0, 0.0f, nullptr); continue; } # ifdef SFZ_FILES_USING_SFIZZ if (std::strcmp(stateSave.type, "SFZ") == 0) { if (addPlugin(PLUGIN_LV2, "", stateSave.name, "http://sfztools.github.io/sfizz", 0, nullptr)) { const uint pluginId = pData->curPluginCount; if (const CarlaPluginPtr plugin = pData->plugins[pluginId].plugin) { if (pData->aboutToClose) return true; if (pData->actionCanceled) { setLastError("Project load canceled"); return false; } plugin->setCustomData(LV2_ATOM__Path, "http://sfztools.github.io/sfizz:sfzfile", stateSave.binary, false); plugin->restoreLV2State(true); plugin->setDryWet(stateSave.dryWet, true, true); plugin->setVolume(stateSave.volume, true, true); plugin->setBalanceLeft(stateSave.balanceLeft, true, true); plugin->setBalanceRight(stateSave.balanceRight, true, true); plugin->setPanning(stateSave.panning, true, true); plugin->setCtrlChannel(stateSave.ctrlChannel, true, true); plugin->setActive(stateSave.active, true, true); plugin->setEnabled(true); ++pData->curPluginCount; callback(true, true, ENGINE_CALLBACK_PLUGIN_ADDED, pluginId, plugin->getType(), 0, 0, 0.0f, plugin->getName()); if (isPatchbay) pData->graph.addPlugin(plugin); } else { carla_stderr2("Failed to get new plugin, state will not be restored correctly\n"); } } else { carla_stderr2("Failed to load a sfizz LV2 plugin, SFZ file won't be loaded"); } callback(true, true, ENGINE_CALLBACK_IDLE, 0, 0, 0, 0, 0.0f, nullptr); continue; } # endif #endif const void* extraStuff = nullptr; static const char kTrue[] = "true"; const PluginType ptype(getPluginTypeFromString(stateSave.type)); switch (ptype) { case PLUGIN_SF2: if (CarlaString(stateSave.label).endsWith(" (16 outs)")) extraStuff = kTrue; // fall through case PLUGIN_LADSPA: case PLUGIN_DSSI: case PLUGIN_VST2: case PLUGIN_VST3: case PLUGIN_SFZ: case PLUGIN_JSFX: if (stateSave.binary != nullptr && stateSave.binary[0] != '\0' && ! (File::isAbsolutePath(stateSave.binary) && File(stateSave.binary).exists())) { const char* searchPath; switch (ptype) { case PLUGIN_LADSPA: searchPath = pData->options.pathLADSPA; break; case PLUGIN_DSSI: searchPath = pData->options.pathDSSI; break; case PLUGIN_VST2: searchPath = pData->options.pathVST2; break; case PLUGIN_VST3: searchPath = pData->options.pathVST3; break; case PLUGIN_SF2: searchPath = pData->options.pathSF2; break; case PLUGIN_SFZ: searchPath = pData->options.pathSFZ; break; case PLUGIN_JSFX: searchPath = pData->options.pathJSFX; break; default: searchPath = nullptr; break; } if (searchPath != nullptr && searchPath[0] != '\0') { carla_stderr("Plugin binary '%s' doesn't exist on this filesystem, let's look for it...", stateSave.binary); String result = findBinaryInCustomPath(searchPath, stateSave.binary); if (result.isEmpty()) { switch (ptype) { case PLUGIN_LADSPA: searchPath = std::getenv("LADSPA_PATH"); break; case PLUGIN_DSSI: searchPath = std::getenv("DSSI_PATH"); break; case PLUGIN_VST2: searchPath = std::getenv("VST_PATH"); break; case PLUGIN_VST3: searchPath = std::getenv("VST3_PATH"); break; case PLUGIN_SF2: searchPath = std::getenv("SF2_PATH"); break; case PLUGIN_SFZ: searchPath = std::getenv("SFZ_PATH"); break; case PLUGIN_JSFX: searchPath = std::getenv("JSFX_PATH"); break; default: searchPath = nullptr; break; } if (searchPath != nullptr && searchPath[0] != '\0') result = findBinaryInCustomPath(searchPath, stateSave.binary); } if (result.isNotEmpty()) { delete[] stateSave.binary; stateSave.binary = carla_strdup(result.toRawUTF8()); carla_stderr("Found it! :)"); } else { carla_stderr("Damn, we failed... :("); } callback(true, true, ENGINE_CALLBACK_IDLE, 0, 0, 0, 0, 0.0f, nullptr); } } break; default: break; } BinaryType btype; switch (ptype) { case PLUGIN_LADSPA: case PLUGIN_DSSI: case PLUGIN_LV2: case PLUGIN_VST2: case PLUGIN_VST3: btype = getBinaryTypeFromFile(stateSave.binary); break; default: btype = BINARY_NATIVE; break; } if (addPlugin(btype, ptype, stateSave.binary, stateSave.name, stateSave.label, stateSave.uniqueId, extraStuff, stateSave.options)) { #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH const uint pluginId = pData->curPluginCount; #else const uint pluginId = 0; #endif if (const CarlaPluginPtr plugin = pData->plugins[pluginId].plugin) { if (pData->aboutToClose) return true; if (pData->actionCanceled) { setLastError("Project load canceled"); return false; } // deactivate bridge client-side ping check, since some plugins block during load if ((plugin->getHints() & PLUGIN_IS_BRIDGE) != 0 && ! isPreset) plugin->setCustomData(CUSTOM_DATA_TYPE_STRING, "__CarlaPingOnOff__", "false", false); plugin->loadStateSave(stateSave); /* NOTE: The following code is the same as the end of addPlugin(). * When project is loading we do not enable the plugin right away, * as we want to load state first. */ plugin->setEnabled(true); ++pData->curPluginCount; callback(true, true, ENGINE_CALLBACK_PLUGIN_ADDED, pluginId, plugin->getType(), 0, 0, 0.0f, plugin->getName()); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (isPatchbay) pData->graph.addPlugin(plugin); #endif } else { carla_stderr2("Failed to get new plugin, state will not be restored correctly\n"); } } else { carla_stderr2("Failed to load a plugin '%s', error was:\n%s", stateSave.name, getLastError()); } if (! isPreset) callback(true, true, ENGINE_CALLBACK_IDLE, 0, 0, 0, 0, 0.0f, nullptr); } if (isPreset) { callback(true, true, ENGINE_CALLBACK_PROJECT_LOAD_FINISHED, 0, 0, 0, 0, 0.0f, nullptr); callback(true, true, ENGINE_CALLBACK_CANCELABLE_ACTION, 0, 0, 0, 0, 0.0f, "Loading project"); return true; } } #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // tell bridges we're done loading for (uint i=0; i < pData->curPluginCount; ++i) { if (const CarlaPluginPtr plugin = pData->plugins[i].plugin) if (plugin->isEnabled() && (plugin->getHints() & PLUGIN_IS_BRIDGE) != 0) plugin->setCustomData(CUSTOM_DATA_TYPE_STRING, "__CarlaPingOnOff__", "true", false); } if (pData->aboutToClose) return true; if (pData->actionCanceled) { setLastError("Project load canceled"); return false; } // now we handle positions bool loadingAsExternal; std::map mapGroupNamesInternal, mapGroupNamesExternal; bool hasInternalPositions = false; if (XmlElement* const elemPatchbay = xmlElement->getChildByName("Patchbay")) { hasInternalPositions = true; if (XmlElement* const elemPositions = elemPatchbay->getChildByName("Positions")) { String name; PatchbayPosition ppos = { nullptr, -1, 0, 0, 0, 0, false }; for (XmlElement* patchElem = elemPositions->getFirstChildElement(); patchElem != nullptr; patchElem = patchElem->getNextElement()) { const String& patchTag(patchElem->getTagName()); if (patchTag != "Position") continue; XmlElement* const patchName = patchElem->getChildByName("Name"); CARLA_SAFE_ASSERT_CONTINUE(patchName != nullptr); const String nameText(patchName->getAllSubText().trim()); name = xmlSafeString(nameText, false); ppos.name = name.toRawUTF8(); ppos.x1 = patchElem->getIntAttribute("x1"); ppos.y1 = patchElem->getIntAttribute("y1"); ppos.x2 = patchElem->getIntAttribute("x2"); ppos.y2 = patchElem->getIntAttribute("y2"); ppos.pluginId = patchElem->getIntAttribute("pluginId", -1); ppos.dealloc = false; loadingAsExternal = ppos.pluginId >= 0 && isMultiClient; if (name.isNotEmpty() && restorePatchbayGroupPosition(loadingAsExternal, ppos)) { if (name != ppos.name) { carla_stdout("Converted client name '%s' to '%s' for this session", name.toRawUTF8(), ppos.name); if (loadingAsExternal) mapGroupNamesExternal[name] = ppos.name; else mapGroupNamesInternal[name] = ppos.name; } if (ppos.dealloc) std::free(const_cast(ppos.name)); } } if (pData->aboutToClose) return true; if (pData->actionCanceled) { setLastError("Project load canceled"); return false; } } } if (XmlElement* const elemPatchbay = xmlElement->getChildByName("ExternalPatchbay")) { if (XmlElement* const elemPositions = elemPatchbay->getChildByName("Positions")) { String name; PatchbayPosition ppos = { nullptr, -1, 0, 0, 0, 0, false }; for (XmlElement* patchElem = elemPositions->getFirstChildElement(); patchElem != nullptr; patchElem = patchElem->getNextElement()) { const String& patchTag(patchElem->getTagName()); if (patchTag != "Position") continue; XmlElement* const patchName = patchElem->getChildByName("Name"); CARLA_SAFE_ASSERT_CONTINUE(patchName != nullptr); const String nameText(patchName->getAllSubText().trim()); name = xmlSafeString(nameText, false); ppos.name = name.toRawUTF8(); ppos.x1 = patchElem->getIntAttribute("x1"); ppos.y1 = patchElem->getIntAttribute("y1"); ppos.x2 = patchElem->getIntAttribute("x2"); ppos.y2 = patchElem->getIntAttribute("y2"); ppos.pluginId = patchElem->getIntAttribute("pluginId", -1); ppos.dealloc = false; loadingAsExternal = ppos.pluginId < 0 || hasInternalPositions || !isPatchbay; carla_debug("loadingAsExternal: %i because %i %i %i", loadingAsExternal, ppos.pluginId < 0, hasInternalPositions, !isPatchbay); if (name.isNotEmpty() && restorePatchbayGroupPosition(loadingAsExternal, ppos)) { if (name != ppos.name) { carla_stdout("Converted client name '%s' to '%s' for this session", name.toRawUTF8(), ppos.name); if (loadingAsExternal) mapGroupNamesExternal[name] = ppos.name; else mapGroupNamesInternal[name] = ppos.name; } if (ppos.dealloc) std::free(const_cast(ppos.name)); } } if (pData->aboutToClose) return true; if (pData->actionCanceled) { setLastError("Project load canceled"); return false; } } } bool hasInternalConnections = false; // and now we handle connections (internal) if (XmlElement* const elem = xmlElement->getChildByName("Patchbay")) { hasInternalConnections = true; if (isPatchbay) { water::String sourcePort, targetPort; for (XmlElement* patchElem = elem->getFirstChildElement(); patchElem != nullptr; patchElem = patchElem->getNextElement()) { const String& patchTag(patchElem->getTagName()); if (patchTag != "Connection") continue; sourcePort.clear(); targetPort.clear(); for (XmlElement* connElem = patchElem->getFirstChildElement(); connElem != nullptr; connElem = connElem->getNextElement()) { const String& tag(connElem->getTagName()); const String text(connElem->getAllSubText().trim()); /**/ if (tag == "Source") sourcePort = xmlSafeString(text, false); else if (tag == "Target") targetPort = xmlSafeString(text, false); } if (sourcePort.isNotEmpty() && targetPort.isNotEmpty()) { std::map& map(mapGroupNamesInternal); std::map::iterator it; if ((it = map.find(sourcePort.upToFirstOccurrenceOf(":", false, false))) != map.end()) sourcePort = it->second + sourcePort.fromFirstOccurrenceOf(":", true, false); if ((it = map.find(targetPort.upToFirstOccurrenceOf(":", false, false))) != map.end()) targetPort = it->second + targetPort.fromFirstOccurrenceOf(":", true, false); restorePatchbayConnection(false, sourcePort.toRawUTF8(), targetPort.toRawUTF8()); } } if (pData->aboutToClose) return true; if (pData->actionCanceled) { setLastError("Project load canceled"); return false; } } } // if we're running inside some session-manager (and using JACK), let them handle the external connections bool loadExternalConnections; if (alwaysLoadConnections) { loadExternalConnections = true; } else { /**/ if (std::strcmp(getCurrentDriverName(), "JACK") != 0) loadExternalConnections = true; else if (std::getenv("CARLA_DONT_MANAGE_CONNECTIONS") != nullptr) loadExternalConnections = false; else if (std::getenv("LADISH_APP_NAME") != nullptr) loadExternalConnections = false; else if (std::getenv("NSM_URL") != nullptr) loadExternalConnections = false; else loadExternalConnections = true; } // plus external connections too if (loadExternalConnections) { bool isExternal; loadingAsExternal = hasInternalConnections && (pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK || isPatchbay); for (XmlElement* elem = xmlElement->getFirstChildElement(); elem != nullptr; elem = elem->getNextElement()) { const String& tagName(elem->getTagName()); // check if we want to load patchbay-mode connections into an external (multi-client) graph if (tagName == "Patchbay") { if (isPatchbay) continue; isExternal = false; loadingAsExternal = true; } // or load external patchbay connections else if (tagName == "ExternalPatchbay") { if (! isPatchbay) loadingAsExternal = true; isExternal = true; } else { continue; } water::String sourcePort, targetPort; for (XmlElement* patchElem = elem->getFirstChildElement(); patchElem != nullptr; patchElem = patchElem->getNextElement()) { const String& patchTag(patchElem->getTagName()); if (patchTag != "Connection") continue; sourcePort.clear(); targetPort.clear(); for (XmlElement* connElem = patchElem->getFirstChildElement(); connElem != nullptr; connElem = connElem->getNextElement()) { const String& tag(connElem->getTagName()); const String text(connElem->getAllSubText().trim()); /**/ if (tag == "Source") sourcePort = xmlSafeString(text, false); else if (tag == "Target") targetPort = xmlSafeString(text, false); } if (sourcePort.isNotEmpty() && targetPort.isNotEmpty()) { std::map& map(loadingAsExternal ? mapGroupNamesExternal : mapGroupNamesInternal); std::map::iterator it; if (isExternal && isPatchbay && !loadingAsExternal && sourcePort.startsWith("system:capture_")) { water::String internalPort = sourcePort.trimCharactersAtStart("system:capture_"); if (pData->graph.getNumAudioOuts() < 3) { /**/ if (internalPort == "1") internalPort = "Audio Input:Left"; else if (internalPort == "2") internalPort = "Audio Input:Right"; else if (internalPort == "3") internalPort = "Audio Input:Sidechain"; else continue; } else { internalPort = "Audio Input:Capture " + internalPort; } carla_stdout("Converted port name '%s' to '%s' for this session", sourcePort.toRawUTF8(), internalPort.toRawUTF8()); sourcePort = internalPort; } else if (!isExternal && isMultiClient && sourcePort.startsWith("Audio Input:")) { water::String externalPort = sourcePort.trimCharactersAtStart("Audio Input:"); /**/ if (externalPort == "Left") externalPort = "system:capture_1"; else if (externalPort == "Right") externalPort = "system:capture_2"; else if (externalPort == "Sidechain") externalPort = "system:capture_3"; else externalPort = "system:capture_ " + externalPort.trimCharactersAtStart("Capture "); carla_stdout("Converted port name '%s' to '%s' for this session", sourcePort.toRawUTF8(), externalPort.toRawUTF8()); sourcePort = externalPort; } else if ((it = map.find(sourcePort.upToFirstOccurrenceOf(":", false, false))) != map.end()) { sourcePort = it->second + sourcePort.fromFirstOccurrenceOf(":", true, false); } if (isExternal && isPatchbay && !loadingAsExternal && targetPort.startsWith("system:playback_")) { water::String internalPort = targetPort.trimCharactersAtStart("system:playback_"); if (pData->graph.getNumAudioOuts() < 3) { /**/ if (internalPort == "1") internalPort = "Audio Output:Left"; else if (internalPort == "2") internalPort = "Audio Output:Right"; else continue; } else { internalPort = "Audio Input:Playback " + internalPort; } carla_stdout("Converted port name '%s' to '%s' for this session", targetPort.toRawUTF8(), internalPort.toRawUTF8()); targetPort = internalPort; } else if (!isExternal && isMultiClient && targetPort.startsWith("Audio Output:")) { water::String externalPort = targetPort.trimCharactersAtStart("Audio Output:"); /**/ if (externalPort == "Left") externalPort = "system:playback_1"; else if (externalPort == "Right") externalPort = "system:playback_2"; else externalPort = "system:playback_ " + externalPort.trimCharactersAtStart("Playback "); carla_stdout("Converted port name '%s' to '%s' for this session", targetPort.toRawUTF8(), externalPort.toRawUTF8()); targetPort = externalPort; } else if ((it = map.find(targetPort.upToFirstOccurrenceOf(":", false, false))) != map.end()) { targetPort = it->second + targetPort.fromFirstOccurrenceOf(":", true, false); } restorePatchbayConnection(loadingAsExternal, sourcePort.toRawUTF8(), targetPort.toRawUTF8()); } } break; } } #endif if (pData->options.resetXruns) clearXruns(); callback(true, true, ENGINE_CALLBACK_PROJECT_LOAD_FINISHED, 0, 0, 0, 0, 0.0f, nullptr); callback(true, true, ENGINE_CALLBACK_CANCELABLE_ACTION, 0, 0, 0, 0, 0.0f, "Loading project"); carla_debug("CarlaEngine::loadProjectInternal(%p, %s) - END", &xmlDoc, bool2str(alwaysLoadConnections)); return true; #ifdef BUILD_BRIDGE_ALTERNATIVE_ARCH // unused (void)alwaysLoadConnections; #endif } // ----------------------------------------------------------------------- CARLA_BACKEND_END_NAMESPACE Carla-2.4.2/source/backend/engine/CarlaEngineBridge.cpp000066400000000000000000002063551420416754300227070ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2022 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #ifndef BUILD_BRIDGE # error This file should not be compiled if not building bridge #endif // must be first so we can undef CARLA_SAFE_*_RETURN_ERR* macros #include "CarlaPluginInternal.hpp" #undef CARLA_SAFE_ASSERT_RETURN_ERR #undef CARLA_SAFE_ASSERT_RETURN_ERRN #undef CARLA_SAFE_EXCEPTION_RETURN_ERR #undef CARLA_SAFE_EXCEPTION_RETURN_ERRN #include "CarlaEngineClient.hpp" #include "CarlaEngineInit.hpp" #include "CarlaBackendUtils.hpp" #include "CarlaBase64Utils.hpp" #include "CarlaBridgeUtils.hpp" #include "CarlaMIDI.h" #ifdef __SSE2_MATH__ # include #endif #include "water/files/File.h" #include "water/misc/Time.h" // must be last #include "jackbridge/JackBridge.hpp" using water::File; using water::MemoryBlock; using water::String; using water::Time; CARLA_BACKEND_START_NAMESPACE // ----------------------------------------------------------------------- // Bridge Engine client struct LatencyChangedCallback { virtual ~LatencyChangedCallback() noexcept {} virtual void latencyChanged(const uint32_t samples) noexcept = 0; }; class CarlaEngineBridgeClient : public CarlaEngineClientForSubclassing { public: #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH CarlaEngineBridgeClient(const CarlaEngine& engine, EngineInternalGraph& egraph, const CarlaPluginPtr plugin, LatencyChangedCallback* const cb) : CarlaEngineClientForSubclassing(engine, egraph, plugin), fLatencyCallback(cb) {} #else CarlaEngineBridgeClient(const CarlaEngine& engine, LatencyChangedCallback* const cb) : CarlaEngineClientForSubclassing(engine), fLatencyCallback(cb) {} #endif protected: void setLatency(const uint32_t samples) noexcept override { if (getLatency() == samples) return; fLatencyCallback->latencyChanged(samples); CarlaEngineClient::setLatency(samples); } private: LatencyChangedCallback* const fLatencyCallback; CARLA_DECLARE_NON_COPY_CLASS(CarlaEngineBridgeClient) }; // ------------------------------------------------------------------- class CarlaEngineBridge : public CarlaEngine, private CarlaThread, private LatencyChangedCallback { public: CarlaEngineBridge(const char* const audioPoolBaseName, const char* const rtClientBaseName, const char* const nonRtClientBaseName, const char* const nonRtServerBaseName) : CarlaEngine(), CarlaThread("CarlaEngineBridge"), fShmAudioPool(), fShmRtClientControl(), fShmNonRtClientControl(), fShmNonRtServerControl(), fBaseNameAudioPool(audioPoolBaseName), fBaseNameRtClientControl(rtClientBaseName), fBaseNameNonRtClientControl(nonRtClientBaseName), fBaseNameNonRtServerControl(nonRtServerBaseName), fClosingDown(false), fIsOffline(false), fFirstIdle(true), fLastPingTime(-1) { carla_debug("CarlaEngineBridge::CarlaEngineBridge(\"%s\", \"%s\", \"%s\", \"%s\")", audioPoolBaseName, rtClientBaseName, nonRtClientBaseName, nonRtServerBaseName); } ~CarlaEngineBridge() noexcept override { carla_debug("CarlaEngineBridge::~CarlaEngineBridge()"); clear(); } // ------------------------------------- // CarlaEngine virtual calls bool init(const char* const clientName) override { carla_debug("CarlaEngineBridge::init(\"%s\")", clientName); if (! pData->init(clientName)) { setLastError("Failed to init internal data"); return false; } if (! fShmAudioPool.attachClient(fBaseNameAudioPool)) { pData->close(); setLastError("Failed to attach to audio pool shared memory"); return false; } if (! fShmRtClientControl.attachClient(fBaseNameRtClientControl)) { pData->close(); clear(); setLastError("Failed to attach to rt client control shared memory"); return false; } if (! fShmRtClientControl.mapData()) { pData->close(); clear(); setLastError("Failed to map rt client control shared memory"); return false; } if (! fShmNonRtClientControl.attachClient(fBaseNameNonRtClientControl)) { pData->close(); clear(); setLastError("Failed to attach to non-rt client control shared memory"); return false; } if (! fShmNonRtClientControl.mapData()) { pData->close(); clear(); setLastError("Failed to map non-rt control client shared memory"); return false; } if (! fShmNonRtServerControl.attachClient(fBaseNameNonRtServerControl)) { pData->close(); clear(); setLastError("Failed to attach to non-rt server control shared memory"); return false; } if (! fShmNonRtServerControl.mapData()) { pData->close(); clear(); setLastError("Failed to map non-rt control server shared memory"); return false; } PluginBridgeNonRtClientOpcode opcode; opcode = fShmNonRtClientControl.readOpcode(); CARLA_SAFE_ASSERT_RETURN(opcode == kPluginBridgeNonRtClientVersion, false); const uint32_t apiVersion = fShmNonRtClientControl.readUInt(); CARLA_SAFE_ASSERT_RETURN(apiVersion >= CARLA_PLUGIN_BRIDGE_API_VERSION_MINIMUM, false); const uint32_t shmRtClientDataSize = fShmNonRtClientControl.readUInt(); CARLA_SAFE_ASSERT_INT2(shmRtClientDataSize == sizeof(BridgeRtClientData), shmRtClientDataSize, sizeof(BridgeRtClientData)); const uint32_t shmNonRtClientDataSize = fShmNonRtClientControl.readUInt(); CARLA_SAFE_ASSERT_INT2(shmNonRtClientDataSize == sizeof(BridgeNonRtClientData), shmNonRtClientDataSize, sizeof(BridgeNonRtClientData)); const uint32_t shmNonRtServerDataSize = fShmNonRtClientControl.readUInt(); CARLA_SAFE_ASSERT_INT2(shmNonRtServerDataSize == sizeof(BridgeNonRtServerData), shmNonRtServerDataSize, sizeof(BridgeNonRtServerData)); if (shmRtClientDataSize != sizeof(BridgeRtClientData) || shmNonRtClientDataSize != sizeof(BridgeNonRtClientData) || shmNonRtServerDataSize != sizeof(BridgeNonRtServerData)) { pData->close(); clear(); setLastError("Shared memory data size mismatch"); return false; } opcode = fShmNonRtClientControl.readOpcode(); CARLA_SAFE_ASSERT_RETURN(opcode == kPluginBridgeNonRtClientInitialSetup, false); pData->bufferSize = fShmNonRtClientControl.readUInt(); pData->sampleRate = fShmNonRtClientControl.readDouble(); if (pData->bufferSize == 0 || carla_isZero(pData->sampleRate)) { pData->close(); clear(); setLastError("Shared memory has invalid data"); return false; } pData->initTime(nullptr); // tell backend we're live { const CarlaMutexLocker _cml(fShmNonRtServerControl.mutex); // kPluginBridgeNonRtServerVersion was added in API 7 if (apiVersion >= 7) { fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerVersion); fShmNonRtServerControl.writeUInt(CARLA_PLUGIN_BRIDGE_API_VERSION_CURRENT); } else { fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerPong); } fShmNonRtServerControl.commitWrite(); } startThread(true); return true; } bool close() override { carla_debug("CarlaEngineBridge::close()"); fLastPingTime = -1; CarlaEngine::close(); stopThread(5000); clear(); return true; } bool isRunning() const noexcept override { if (fClosingDown) return false; return isThreadRunning() || ! fFirstIdle; } bool isOffline() const noexcept override { return fIsOffline; } EngineType getType() const noexcept override { return kEngineTypeBridge; } const char* getCurrentDriverName() const noexcept override { return "Bridge"; } void touchPluginParameter(const uint id, const uint32_t parameterId, const bool touch) noexcept override { CARLA_SAFE_ASSERT_RETURN(id == 0,); const CarlaMutexLocker _cml(fShmNonRtServerControl.mutex); fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerParameterTouch); fShmNonRtServerControl.writeUInt(parameterId); fShmNonRtServerControl.writeBool(touch); fShmNonRtServerControl.commitWrite(); } CarlaEngineClient* addClient(const CarlaPluginPtr plugin) override { #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH return new CarlaEngineBridgeClient(*this, pData->graph, plugin, this); #else return new CarlaEngineBridgeClient(*this, this); // unused (void)plugin; #endif } void idle() noexcept override { const CarlaPluginPtr plugin = pData->plugins[0].plugin; if (plugin.get() == nullptr) { if (const uint32_t length = static_cast(pData->lastError.length())) { const CarlaMutexLocker _cml(fShmNonRtServerControl.mutex); fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerError); fShmNonRtServerControl.writeUInt(length); fShmNonRtServerControl.writeCustomData(pData->lastError.buffer(), length); fShmNonRtServerControl.commitWrite(); } signalThreadShouldExit(); callback(true, true, ENGINE_CALLBACK_QUIT, 0, 0, 0, 0, 0.0f, nullptr); return; } const bool wasFirstIdle(fFirstIdle); if (wasFirstIdle) { fFirstIdle = false; fLastPingTime = Time::currentTimeMillis(); CARLA_SAFE_ASSERT(fLastPingTime > 0); char bufStr[STR_MAX+1]; carla_zeroChars(bufStr, STR_MAX+1); uint32_t bufStrSize; const CarlaEngineClient* const client(plugin->getEngineClient()); const CarlaMutexLocker _cml(fShmNonRtServerControl.mutex); // kPluginBridgeNonRtServerPluginInfo1 { // uint/category, uint/hints, uint/optionsAvailable, uint/optionsEnabled, long/uniqueId fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerPluginInfo1); fShmNonRtServerControl.writeUInt(plugin->getCategory()); fShmNonRtServerControl.writeUInt(plugin->getHints()); fShmNonRtServerControl.writeUInt(plugin->getOptionsAvailable()); fShmNonRtServerControl.writeUInt(plugin->getOptionsEnabled()); fShmNonRtServerControl.writeLong(plugin->getUniqueId()); fShmNonRtServerControl.commitWrite(); } // kPluginBridgeNonRtServerPluginInfo2 { // uint/size, str[] (realName), uint/size, str[] (label), uint/size, str[] (maker), uint/size, str[] (copyright) fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerPluginInfo2); if (! plugin->getRealName(bufStr)) bufStr[0] = '\0'; bufStrSize = carla_fixedValue(1U, 64U, static_cast(std::strlen(bufStr))); fShmNonRtServerControl.writeUInt(bufStrSize); fShmNonRtServerControl.writeCustomData(bufStr, bufStrSize); if (! plugin->getLabel(bufStr)) bufStr[0] = '\0'; bufStrSize = carla_fixedValue(1U, 256U, static_cast(std::strlen(bufStr))); fShmNonRtServerControl.writeUInt(bufStrSize); fShmNonRtServerControl.writeCustomData(bufStr, bufStrSize); if (! plugin->getMaker(bufStr)) bufStr[0] = '\0'; bufStrSize = carla_fixedValue(1U, 64U, static_cast(std::strlen(bufStr))); fShmNonRtServerControl.writeUInt(bufStrSize); fShmNonRtServerControl.writeCustomData(bufStr, bufStrSize); if (! plugin->getCopyright(bufStr)) bufStr[0] = '\0'; bufStrSize = carla_fixedValue(1U, 64U, static_cast(std::strlen(bufStr))); fShmNonRtServerControl.writeUInt(bufStrSize); fShmNonRtServerControl.writeCustomData(bufStr, bufStrSize); fShmNonRtServerControl.commitWrite(); } // kPluginBridgeNonRtServerAudioCount { const uint32_t aIns = plugin->getAudioInCount(); const uint32_t aOuts = plugin->getAudioOutCount(); // uint/ins, uint/outs fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerAudioCount); fShmNonRtServerControl.writeUInt(aIns); fShmNonRtServerControl.writeUInt(aOuts); fShmNonRtServerControl.commitWrite(); // kPluginBridgeNonRtServerPortName for (uint32_t i=0; igetAudioPortName(true, i)); CARLA_SAFE_ASSERT_CONTINUE(portName != nullptr && portName[0] != '\0'); // byte/type, uint/index, uint/size, str[] (name) fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerPortName); fShmNonRtServerControl.writeByte(kPluginBridgePortAudioInput); fShmNonRtServerControl.writeUInt(i); bufStrSize = static_cast(std::strlen(portName)); fShmNonRtServerControl.writeUInt(bufStrSize); fShmNonRtServerControl.writeCustomData(portName, bufStrSize); } // kPluginBridgeNonRtServerPortName for (uint32_t i=0; igetAudioPortName(false, i)); CARLA_SAFE_ASSERT_CONTINUE(portName != nullptr && portName[0] != '\0'); // byte/type, uint/index, uint/size, str[] (name) fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerPortName); fShmNonRtServerControl.writeByte(kPluginBridgePortAudioOutput); fShmNonRtServerControl.writeUInt(i); bufStrSize = static_cast(std::strlen(portName)); fShmNonRtServerControl.writeUInt(bufStrSize); fShmNonRtServerControl.writeCustomData(portName, bufStrSize); } } fShmNonRtServerControl.waitIfDataIsReachingLimit(); // kPluginBridgeNonRtServerMidiCount { // uint/ins, uint/outs fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerMidiCount); fShmNonRtServerControl.writeUInt(plugin->getMidiInCount()); fShmNonRtServerControl.writeUInt(plugin->getMidiOutCount()); fShmNonRtServerControl.commitWrite(); } fShmNonRtServerControl.waitIfDataIsReachingLimit(); // kPluginBridgeNonRtServerCvCount { // uint/ins, uint/outs fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerCvCount); fShmNonRtServerControl.writeUInt(plugin->getCVInCount()); fShmNonRtServerControl.writeUInt(plugin->getCVOutCount()); fShmNonRtServerControl.commitWrite(); } fShmNonRtServerControl.waitIfDataIsReachingLimit(); // kPluginBridgeNonRtServerParameter* if (const uint32_t count = plugin->getParameterCount()) { // uint/count fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerParameterCount); fShmNonRtServerControl.writeUInt(count); fShmNonRtServerControl.commitWrite(); for (uint32_t i=0; igetParameterData(i)); if (paramData.type != PARAMETER_INPUT && paramData.type != PARAMETER_OUTPUT) continue; if ((paramData.hints & PARAMETER_IS_ENABLED) == 0) continue; // kPluginBridgeNonRtServerParameterData1 { // uint/index, int/rindex, uint/type, uint/hints, short/cc fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerParameterData1); fShmNonRtServerControl.writeUInt(i); fShmNonRtServerControl.writeInt(paramData.rindex); fShmNonRtServerControl.writeUInt(paramData.type); fShmNonRtServerControl.writeUInt(paramData.hints); fShmNonRtServerControl.writeShort(paramData.mappedControlIndex); fShmNonRtServerControl.commitWrite(); } // kPluginBridgeNonRtServerParameterData2 { // uint/index, uint/size, str[] (name), uint/size, str[] (symbol), uint/size, str[] (unit) fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerParameterData2); fShmNonRtServerControl.writeUInt(i); if (! plugin->getParameterName(i, bufStr)) std::snprintf(bufStr, STR_MAX, "Param %u", i+1); bufStrSize = carla_fixedValue(1U, 32U, static_cast(std::strlen(bufStr))); fShmNonRtServerControl.writeUInt(bufStrSize); fShmNonRtServerControl.writeCustomData(bufStr, bufStrSize); if (! plugin->getParameterSymbol(i, bufStr)) bufStr[0] = '\0'; bufStrSize = carla_fixedValue(1U, 64U, static_cast(std::strlen(bufStr))); fShmNonRtServerControl.writeUInt(bufStrSize); fShmNonRtServerControl.writeCustomData(bufStr, bufStrSize); if (! plugin->getParameterUnit(i, bufStr)) bufStr[0] = '\0'; bufStrSize = carla_fixedValue(1U, 32U, static_cast(std::strlen(bufStr))); fShmNonRtServerControl.writeUInt(bufStrSize); fShmNonRtServerControl.writeCustomData(bufStr, bufStrSize); fShmNonRtServerControl.commitWrite(); } // kPluginBridgeNonRtServerParameterRanges { const ParameterRanges& paramRanges(plugin->getParameterRanges(i)); // uint/index, float/def, float/min, float/max, float/step, float/stepSmall, float/stepLarge fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerParameterRanges); fShmNonRtServerControl.writeUInt(i); fShmNonRtServerControl.writeFloat(paramRanges.def); fShmNonRtServerControl.writeFloat(paramRanges.min); fShmNonRtServerControl.writeFloat(paramRanges.max); fShmNonRtServerControl.writeFloat(paramRanges.step); fShmNonRtServerControl.writeFloat(paramRanges.stepSmall); fShmNonRtServerControl.writeFloat(paramRanges.stepLarge); fShmNonRtServerControl.commitWrite(); } // kPluginBridgeNonRtServerParameterValue2 { // uint/index float/value (used for init/output parameters only, don't resend values) fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerParameterValue2); fShmNonRtServerControl.writeUInt(i); fShmNonRtServerControl.writeFloat(plugin->getParameterValue(i)); fShmNonRtServerControl.commitWrite(); } fShmNonRtServerControl.waitIfDataIsReachingLimit(); } } // kPluginBridgeNonRtServerProgram* if (const uint32_t count = plugin->getProgramCount()) { // uint/count fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerProgramCount); fShmNonRtServerControl.writeUInt(count); fShmNonRtServerControl.commitWrite(); for (uint32_t i=0; i < count; ++i) { // uint/index, uint/size, str[] (name) fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerProgramName); fShmNonRtServerControl.writeUInt(i); if (! plugin->getProgramName(i, bufStr)) bufStr[0] = '\0'; bufStrSize = carla_fixedValue(1U, 32U, static_cast(std::strlen(bufStr))); fShmNonRtServerControl.writeUInt(bufStrSize); fShmNonRtServerControl.writeCustomData(bufStr, bufStrSize); fShmNonRtServerControl.commitWrite(); fShmNonRtServerControl.waitIfDataIsReachingLimit(); } } // kPluginBridgeNonRtServerMidiProgram* if (const uint32_t count = plugin->getMidiProgramCount()) { // uint/count fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerMidiProgramCount); fShmNonRtServerControl.writeUInt(count); fShmNonRtServerControl.commitWrite(); for (uint32_t i=0; i < count; ++i) { const MidiProgramData& mpData(plugin->getMidiProgramData(i)); CARLA_SAFE_ASSERT_CONTINUE(mpData.name != nullptr); // uint/index, uint/bank, uint/program, uint/size, str[] (name) fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerMidiProgramData); fShmNonRtServerControl.writeUInt(i); fShmNonRtServerControl.writeUInt(mpData.bank); fShmNonRtServerControl.writeUInt(mpData.program); bufStrSize = carla_fixedValue(1U, 32U, static_cast(std::strlen(mpData.name))); fShmNonRtServerControl.writeUInt(bufStrSize); fShmNonRtServerControl.writeCustomData(mpData.name, bufStrSize); fShmNonRtServerControl.commitWrite(); fShmNonRtServerControl.waitIfDataIsReachingLimit(); } } if (const uint32_t latency = plugin->getLatencyInFrames()) { fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerSetLatency); fShmNonRtServerControl.writeUInt(latency); fShmNonRtServerControl.commitWrite(); } // ready! fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerReady); fShmNonRtServerControl.commitWrite(); fShmNonRtServerControl.waitIfDataIsReachingLimit(); carla_stdout("Carla Bridge Ready!"); fLastPingTime = Time::currentTimeMillis(); } // send parameter outputs if (const uint32_t count = plugin->getParameterCount()) { const CarlaMutexLocker _cml(fShmNonRtServerControl.mutex); for (uint32_t i=0; i < count; ++i) { if (! plugin->isParameterOutput(i)) continue; fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerParameterValue2); fShmNonRtServerControl.writeUInt(i); fShmNonRtServerControl.writeFloat(plugin->getParameterValue(i)); // parameter outputs are not that important, we can skip some if (! fShmNonRtServerControl.commitWrite()) break; } } CarlaEngine::idle(); try { handleNonRtData(); } CARLA_SAFE_EXCEPTION("handleNonRtData"); if (fLastPingTime > 0 && Time::currentTimeMillis() > fLastPingTime + 30000 && ! wasFirstIdle) { carla_stderr("Did not receive ping message from server for 30 secs, closing..."); signalThreadShouldExit(); callback(true, true, ENGINE_CALLBACK_QUIT, 0, 0, 0, 0, 0.0f, nullptr); } } void callback(const bool sendHost, const bool sendOsc, const EngineCallbackOpcode action, const uint pluginId, const int value1, const int value2, const int value3, const float valuef, const char* const valueStr) noexcept override { CarlaEngine::callback(sendHost, sendOsc, action, pluginId, value1, value2, value3, valuef, valueStr); if (fClosingDown || ! sendHost) return; switch (action) { // uint/index float/value case ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED: { CARLA_SAFE_ASSERT_BREAK(value1 >= 0); const CarlaMutexLocker _cml(fShmNonRtServerControl.mutex); fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerParameterValue); fShmNonRtServerControl.writeUInt(static_cast(value1)); fShmNonRtServerControl.writeFloat(valuef); fShmNonRtServerControl.commitWrite(); } break; // uint/index float/value case ENGINE_CALLBACK_PARAMETER_DEFAULT_CHANGED: { CARLA_SAFE_ASSERT_BREAK(value1 >= 0); const CarlaMutexLocker _cml(fShmNonRtServerControl.mutex); fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerDefaultValue); fShmNonRtServerControl.writeUInt(static_cast(value1)); fShmNonRtServerControl.writeFloat(valuef); fShmNonRtServerControl.commitWrite(); } break; // int/index case ENGINE_CALLBACK_PROGRAM_CHANGED: { CARLA_SAFE_ASSERT_BREAK(value1 >= -1); const CarlaMutexLocker _cml(fShmNonRtServerControl.mutex); fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerCurrentProgram); fShmNonRtServerControl.writeInt(value1); fShmNonRtServerControl.commitWrite(); } break; // int/index case ENGINE_CALLBACK_MIDI_PROGRAM_CHANGED: { CARLA_SAFE_ASSERT_BREAK(value1 >= -1); const CarlaMutexLocker _cml(fShmNonRtServerControl.mutex); fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerCurrentMidiProgram); fShmNonRtServerControl.writeInt(value1); fShmNonRtServerControl.commitWrite(); } break; case ENGINE_CALLBACK_UI_STATE_CHANGED: if (value1 != 1) { const CarlaMutexLocker _cml(fShmNonRtServerControl.mutex); fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerUiClosed); fShmNonRtServerControl.commitWrite(); } break; case ENGINE_CALLBACK_EMBED_UI_RESIZED: { CARLA_SAFE_ASSERT_BREAK(value1 > 1); CARLA_SAFE_ASSERT_BREAK(value2 > 1); const CarlaMutexLocker _cml(fShmNonRtServerControl.mutex); fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerResizeEmbedUI); fShmNonRtServerControl.writeUInt(static_cast(value1)); fShmNonRtServerControl.writeUInt(static_cast(value2)); fShmNonRtServerControl.commitWrite(); } break; case ENGINE_CALLBACK_RELOAD_PARAMETERS: if (const CarlaPluginPtr plugin = pData->plugins[0].plugin) { if (const uint32_t count = plugin->getParameterCount()) { const CarlaMutexLocker _cml(fShmNonRtServerControl.mutex); for (uint32_t i=0; igetParameterData(i)); if (paramData.type != PARAMETER_INPUT && paramData.type != PARAMETER_OUTPUT) continue; if ((paramData.hints & PARAMETER_IS_ENABLED) == 0) continue; fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerParameterValue); fShmNonRtServerControl.writeUInt(i); fShmNonRtServerControl.writeFloat(plugin->getParameterValue(i)); fShmNonRtServerControl.commitWrite(); fShmNonRtServerControl.waitIfDataIsReachingLimit(); } } } break; default: break; } } // ------------------------------------------------------------------- void clear() noexcept { fShmAudioPool.clear(); fShmRtClientControl.clear(); fShmNonRtClientControl.clear(); fShmNonRtServerControl.clear(); } void handleNonRtData() { const CarlaPluginPtr plugin = pData->plugins[0].plugin; CARLA_SAFE_ASSERT_RETURN(plugin.get() != nullptr,); for (; fShmNonRtClientControl.isDataAvailableForReading();) { const PluginBridgeNonRtClientOpcode opcode = fShmNonRtClientControl.readOpcode(); #ifdef DEBUG if (opcode != kPluginBridgeNonRtClientPing) { carla_debug("CarlaEngineBridge::handleNonRtData() - got opcode: %i:%s", opcode, PluginBridgeNonRtClientOpcode2str(opcode)); } #endif if (opcode != kPluginBridgeNonRtClientNull && opcode != kPluginBridgeNonRtClientPingOnOff && fLastPingTime > 0) fLastPingTime = Time::currentTimeMillis(); switch (opcode) { case kPluginBridgeNonRtClientNull: break; case kPluginBridgeNonRtClientVersion: { const uint apiVersion = fShmNonRtServerControl.readUInt(); CARLA_SAFE_ASSERT_UINT2(apiVersion >= CARLA_PLUGIN_BRIDGE_API_VERSION_MINIMUM, apiVersion, CARLA_PLUGIN_BRIDGE_API_VERSION_MINIMUM); } break; case kPluginBridgeNonRtClientPing: { const CarlaMutexLocker _cml(fShmNonRtServerControl.mutex); fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerPong); fShmNonRtServerControl.commitWrite(); } break; case kPluginBridgeNonRtClientPingOnOff: { const uint32_t onOff(fShmNonRtClientControl.readBool()); fLastPingTime = onOff ? Time::currentTimeMillis() : -1; } break; case kPluginBridgeNonRtClientActivate: if (plugin->isEnabled()) plugin->setActive(true, false, false); break; case kPluginBridgeNonRtClientDeactivate: if (plugin->isEnabled()) plugin->setActive(false, false, false); break; case kPluginBridgeNonRtClientInitialSetup: // should never happen!! fShmNonRtServerControl.readUInt(); fShmNonRtServerControl.readDouble(); break; case kPluginBridgeNonRtClientSetParameterValue: { const uint32_t index(fShmNonRtClientControl.readUInt()); const float value(fShmNonRtClientControl.readFloat()); if (plugin->isEnabled()) plugin->setParameterValue(index, value, false, false, false); break; } case kPluginBridgeNonRtClientSetParameterMidiChannel: { const uint32_t index(fShmNonRtClientControl.readUInt()); const uint8_t channel(fShmNonRtClientControl.readByte()); if (plugin->isEnabled()) plugin->setParameterMidiChannel(index, channel, false, false); break; } case kPluginBridgeNonRtClientSetParameterMappedControlIndex: { const uint32_t index(fShmNonRtClientControl.readUInt()); const int16_t ctrl(fShmNonRtClientControl.readShort()); if (plugin->isEnabled()) plugin->setParameterMappedControlIndex(index, ctrl, false, false, true); break; } case kPluginBridgeNonRtClientSetParameterMappedRange: { const uint32_t index = fShmNonRtClientControl.readUInt(); const float minimum = fShmNonRtClientControl.readFloat(); const float maximum = fShmNonRtClientControl.readFloat(); if (plugin->isEnabled()) plugin->setParameterMappedRange(index, minimum, maximum, false, false); break; } case kPluginBridgeNonRtClientSetProgram: { const int32_t index(fShmNonRtClientControl.readInt()); if (plugin->isEnabled()) plugin->setProgram(index, true, false, false); break; } case kPluginBridgeNonRtClientSetMidiProgram: { const int32_t index(fShmNonRtClientControl.readInt()); if (plugin->isEnabled()) plugin->setMidiProgram(index, true, false, false); break; } case kPluginBridgeNonRtClientSetCustomData: { // type const uint32_t typeSize = fShmNonRtClientControl.readUInt(); char typeStr[typeSize+1]; carla_zeroChars(typeStr, typeSize+1); fShmNonRtClientControl.readCustomData(typeStr, typeSize); // key const uint32_t keySize = fShmNonRtClientControl.readUInt(); char keyStr[keySize+1]; carla_zeroChars(keyStr, keySize+1); fShmNonRtClientControl.readCustomData(keyStr, keySize); // value const uint32_t valueSize = fShmNonRtClientControl.readUInt(); if (valueSize > 0) { if (valueSize > 16384) { const uint32_t bigValueFilePathSize = fShmNonRtClientControl.readUInt(); char bigValueFilePathTry[bigValueFilePathSize+1]; carla_zeroChars(bigValueFilePathTry, bigValueFilePathSize+1); fShmNonRtClientControl.readCustomData(bigValueFilePathTry, bigValueFilePathSize); CARLA_SAFE_ASSERT_BREAK(bigValueFilePathTry[0] != '\0'); if (! plugin->isEnabled()) break; String bigValueFilePath(bigValueFilePathTry); #ifdef CARLA_OS_WIN // check if running under Wine if (bigValueFilePath.startsWith("/")) bigValueFilePath = bigValueFilePath.replaceSection(0, 1, "Z:\\").replace("/", "\\"); #endif File bigValueFile(bigValueFilePath); CARLA_SAFE_ASSERT_BREAK(bigValueFile.existsAsFile()); plugin->setCustomData(typeStr, keyStr, bigValueFile.loadFileAsString().toRawUTF8(), true); bigValueFile.deleteFile(); } else { char valueStr[valueSize+1]; carla_zeroChars(valueStr, valueSize+1); fShmNonRtClientControl.readCustomData(valueStr, valueSize); if (plugin->isEnabled()) plugin->setCustomData(typeStr, keyStr, valueStr, true); } } else { if (plugin->isEnabled()) plugin->setCustomData(typeStr, keyStr, "", true); } break; } case kPluginBridgeNonRtClientSetChunkDataFile: { const uint32_t size(fShmNonRtClientControl.readUInt()); CARLA_SAFE_ASSERT_BREAK(size > 0); char chunkFilePathTry[size+1]; carla_zeroChars(chunkFilePathTry, size+1); fShmNonRtClientControl.readCustomData(chunkFilePathTry, size); CARLA_SAFE_ASSERT_BREAK(chunkFilePathTry[0] != '\0'); if (! plugin->isEnabled()) break; String chunkFilePath(chunkFilePathTry); #ifdef CARLA_OS_WIN // check if running under Wine if (chunkFilePath.startsWith("/")) chunkFilePath = chunkFilePath.replaceSection(0, 1, "Z:\\").replace("/", "\\"); #endif File chunkFile(chunkFilePath); CARLA_SAFE_ASSERT_BREAK(chunkFile.existsAsFile()); String chunkDataBase64(chunkFile.loadFileAsString()); chunkFile.deleteFile(); CARLA_SAFE_ASSERT_BREAK(chunkDataBase64.isNotEmpty()); std::vector chunk(carla_getChunkFromBase64String(chunkDataBase64.toRawUTF8())); #ifdef CARLA_PROPER_CPP11_SUPPORT plugin->setChunkData(chunk.data(), chunk.size()); #else plugin->setChunkData(&chunk.front(), chunk.size()); #endif break; } case kPluginBridgeNonRtClientSetCtrlChannel: { const int16_t channel(fShmNonRtClientControl.readShort()); CARLA_SAFE_ASSERT_BREAK(channel >= -1 && channel < MAX_MIDI_CHANNELS); if (plugin->isEnabled()) plugin->setCtrlChannel(static_cast(channel), false, false); break; } case kPluginBridgeNonRtClientSetOption: { const uint32_t option(fShmNonRtClientControl.readUInt()); const bool yesNo(fShmNonRtClientControl.readBool()); if (plugin->isEnabled()) plugin->setOption(option, yesNo, false); break; } case kPluginBridgeNonRtClientSetOptions: { const uint32_t options(fShmNonRtClientControl.readUInt()); plugin->pData->options = options; break; } case kPluginBridgeNonRtClientSetWindowTitle: { const uint32_t size = fShmNonRtClientControl.readUInt(); CARLA_SAFE_ASSERT_BREAK(size > 0); char title[size+1]; carla_zeroChars(title, size+1); fShmNonRtClientControl.readCustomData(title, size); plugin->setCustomUITitle(title); break; } case kPluginBridgeNonRtClientGetParameterText: { const int32_t index = fShmNonRtClientControl.readInt(); if (index >= 0 && plugin->isEnabled()) { char bufStr[STR_MAX+1]; carla_zeroChars(bufStr, STR_MAX+1); if (! plugin->getParameterText(static_cast(index), bufStr)) bufStr[0] = '\0'; const uint32_t bufStrLen = static_cast(std::strlen(bufStr)); const CarlaMutexLocker _cml(fShmNonRtServerControl.mutex); fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerSetParameterText); fShmNonRtServerControl.writeInt(index); fShmNonRtServerControl.writeUInt(bufStrLen); fShmNonRtServerControl.writeCustomData(bufStr, bufStrLen); fShmNonRtServerControl.commitWrite(); fShmNonRtServerControl.waitIfDataIsReachingLimit(); } else { const CarlaMutexLocker _cml(fShmNonRtServerControl.mutex); fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerSetParameterText); fShmNonRtServerControl.writeInt(index); fShmNonRtServerControl.writeUInt(0); fShmNonRtServerControl.commitWrite(); } break; } case kPluginBridgeNonRtClientPrepareForSave: { if (! plugin->isEnabled()) { const CarlaMutexLocker _cml(fShmNonRtServerControl.mutex); fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerSaved); fShmNonRtServerControl.commitWrite(); return; } plugin->prepareForSave(false); for (uint32_t i=0, count=plugin->getCustomDataCount(); igetCustomData(i)); if (std::strcmp(cdata.type, CUSTOM_DATA_TYPE_PROPERTY) == 0) continue; const uint32_t typeLen = static_cast(std::strlen(cdata.type)); const uint32_t keyLen = static_cast(std::strlen(cdata.key)); const uint32_t valueLen = static_cast(std::strlen(cdata.value)); if (valueLen > 16384) fShmNonRtServerControl.waitIfDataIsReachingLimit(); { const CarlaMutexLocker _cml(fShmNonRtServerControl.mutex); fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerSetCustomData); fShmNonRtServerControl.writeUInt(typeLen); fShmNonRtServerControl.writeCustomData(cdata.type, typeLen); fShmNonRtServerControl.writeUInt(keyLen); fShmNonRtServerControl.writeCustomData(cdata.key, keyLen); fShmNonRtServerControl.writeUInt(valueLen); if (valueLen > 0) { if (valueLen > 16384) { String filePath(File::getSpecialLocation(File::tempDirectory).getFullPathName()); filePath += CARLA_OS_SEP_STR ".CarlaCustomData_"; filePath += fShmAudioPool.getFilenameSuffix(); if (File(filePath).replaceWithText(cdata.value)) { const uint32_t ulength(static_cast(filePath.length())); fShmNonRtServerControl.writeUInt(ulength); fShmNonRtServerControl.writeCustomData(filePath.toRawUTF8(), ulength); } else { fShmNonRtServerControl.writeUInt(0); } } else { fShmNonRtServerControl.writeCustomData(cdata.value, valueLen); } } fShmNonRtServerControl.commitWrite(); } fShmNonRtServerControl.waitIfDataIsReachingLimit(); } if (plugin->getOptionsEnabled() & PLUGIN_OPTION_USE_CHUNKS) { void* data = nullptr; if (const std::size_t dataSize = plugin->getChunkData(&data)) { CARLA_SAFE_ASSERT_BREAK(data != nullptr); CarlaString dataBase64 = CarlaString::asBase64(data, dataSize); CARLA_SAFE_ASSERT_BREAK(dataBase64.length() > 0); String filePath(File::getSpecialLocation(File::tempDirectory).getFullPathName()); filePath += CARLA_OS_SEP_STR ".CarlaChunk_"; filePath += fShmAudioPool.getFilenameSuffix(); if (File(filePath).replaceWithText(dataBase64.buffer())) { const uint32_t ulength(static_cast(filePath.length())); const CarlaMutexLocker _cml(fShmNonRtServerControl.mutex); fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerSetChunkDataFile); fShmNonRtServerControl.writeUInt(ulength); fShmNonRtServerControl.writeCustomData(filePath.toRawUTF8(), ulength); fShmNonRtServerControl.commitWrite(); } } } { const CarlaMutexLocker _cml(fShmNonRtServerControl.mutex); fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerSaved); fShmNonRtServerControl.commitWrite(); } break; } case kPluginBridgeNonRtClientRestoreLV2State: if (plugin->isEnabled()) plugin->restoreLV2State(false); break; case kPluginBridgeNonRtClientShowUI: if (plugin->isEnabled()) plugin->showCustomUI(true); break; case kPluginBridgeNonRtClientHideUI: if (plugin->isEnabled()) plugin->showCustomUI(false); break; case kPluginBridgeNonRtClientEmbedUI: { const uint64_t winId = fShmNonRtClientControl.readULong(); uint64_t resp = 0; if (plugin->isEnabled()) resp = reinterpret_cast(plugin->embedCustomUI(reinterpret_cast(winId))); if (resp == 0) resp = 1; const CarlaMutexLocker _cml(fShmNonRtServerControl.mutex); fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerRespEmbedUI); fShmNonRtServerControl.writeULong(reinterpret_cast(resp)); fShmNonRtServerControl.commitWrite(); break; } case kPluginBridgeNonRtClientUiParameterChange: { const uint32_t index = fShmNonRtClientControl.readUInt(); const float value = fShmNonRtClientControl.readFloat(); if (plugin->isEnabled()) plugin->uiParameterChange(index, value); break; } case kPluginBridgeNonRtClientUiProgramChange: { const uint32_t index(fShmNonRtClientControl.readUInt()); if (plugin->isEnabled()) plugin->uiProgramChange(index); break; } case kPluginBridgeNonRtClientUiMidiProgramChange: { const uint32_t index(fShmNonRtClientControl.readUInt()); if (plugin->isEnabled()) plugin->uiMidiProgramChange(index); break; } case kPluginBridgeNonRtClientUiNoteOn: { const uint8_t chnl(fShmNonRtClientControl.readByte()); const uint8_t note(fShmNonRtClientControl.readByte()); const uint8_t velo(fShmNonRtClientControl.readByte()); if (plugin->isEnabled()) plugin->uiNoteOn(chnl, note, velo); break; } case kPluginBridgeNonRtClientUiNoteOff: { const uint8_t chnl(fShmNonRtClientControl.readByte()); const uint8_t note(fShmNonRtClientControl.readByte()); if (plugin->isEnabled()) plugin->uiNoteOff(chnl, note); break; } case kPluginBridgeNonRtClientQuit: fClosingDown = true; signalThreadShouldExit(); callback(true, true, ENGINE_CALLBACK_QUIT, 0, 0, 0, 0, 0.0f, nullptr); break; } } } // ------------------------------------------------------------------- protected: void run() override { #ifdef __SSE2_MATH__ // Set FTZ and DAZ flags _mm_setcsr(_mm_getcsr() | 0x8040); #endif bool quitReceived = false; for (; ! shouldThreadExit();) { const BridgeRtClientControl::WaitHelper helper(fShmRtClientControl); if (! helper.ok) continue; for (; fShmRtClientControl.isDataAvailableForReading();) { const PluginBridgeRtClientOpcode opcode(fShmRtClientControl.readOpcode()); const CarlaPluginPtr plugin = pData->plugins[0].plugin; #ifdef DEBUG if (opcode != kPluginBridgeRtClientProcess && opcode != kPluginBridgeRtClientMidiEvent) { carla_debug("CarlaEngineBridgeRtThread::run() - got opcode: %s", PluginBridgeRtClientOpcode2str(opcode)); } #endif switch (opcode) { case kPluginBridgeRtClientNull: break; case kPluginBridgeRtClientSetAudioPool: { if (fShmAudioPool.data != nullptr) { jackbridge_shm_unmap(fShmAudioPool.shm, fShmAudioPool.data); fShmAudioPool.data = nullptr; } const uint64_t poolSize(fShmRtClientControl.readULong()); CARLA_SAFE_ASSERT_BREAK(poolSize > 0); fShmAudioPool.data = (float*)jackbridge_shm_map(fShmAudioPool.shm, static_cast(poolSize)); break; } case kPluginBridgeRtClientSetBufferSize: { const uint32_t bufferSize(fShmRtClientControl.readUInt()); pData->bufferSize = bufferSize; bufferSizeChanged(bufferSize); break; } case kPluginBridgeRtClientSetSampleRate: { const double sampleRate(fShmRtClientControl.readDouble()); pData->sampleRate = sampleRate; sampleRateChanged(sampleRate); break; } case kPluginBridgeRtClientSetOnline: fIsOffline = fShmRtClientControl.readBool(); offlineModeChanged(fIsOffline); break; // NOTE this is never used case kPluginBridgeRtClientControlEventParameter: { const uint32_t time(fShmRtClientControl.readUInt()); const uint8_t channel(fShmRtClientControl.readByte()); const uint16_t param(fShmRtClientControl.readUShort()); const float value(fShmRtClientControl.readFloat()); if (EngineEvent* const event = getNextFreeInputEvent()) { event->type = kEngineEventTypeControl; event->time = time; event->channel = channel; event->ctrl.type = kEngineControlEventTypeParameter; event->ctrl.param = param; event->ctrl.midiValue = -1; event->ctrl.normalizedValue = value; event->ctrl.handled = true; } break; } case kPluginBridgeRtClientControlEventMidiBank: { const uint32_t time(fShmRtClientControl.readUInt()); const uint8_t channel(fShmRtClientControl.readByte()); const uint16_t index(fShmRtClientControl.readUShort()); if (EngineEvent* const event = getNextFreeInputEvent()) { event->type = kEngineEventTypeControl; event->time = time; event->channel = channel; event->ctrl.type = kEngineControlEventTypeMidiBank; event->ctrl.param = index; event->ctrl.midiValue = -1; event->ctrl.normalizedValue = 0.0f; event->ctrl.handled = true; } break; } case kPluginBridgeRtClientControlEventMidiProgram: { const uint32_t time(fShmRtClientControl.readUInt()); const uint8_t channel(fShmRtClientControl.readByte()); const uint16_t index(fShmRtClientControl.readUShort()); if (EngineEvent* const event = getNextFreeInputEvent()) { event->type = kEngineEventTypeControl; event->time = time; event->channel = channel; event->ctrl.type = kEngineControlEventTypeMidiProgram; event->ctrl.param = index; event->ctrl.midiValue = -1; event->ctrl.normalizedValue = 0.0f; event->ctrl.handled = true; } break; } case kPluginBridgeRtClientControlEventAllSoundOff: { const uint32_t time(fShmRtClientControl.readUInt()); const uint8_t channel(fShmRtClientControl.readByte()); if (EngineEvent* const event = getNextFreeInputEvent()) { event->type = kEngineEventTypeControl; event->time = time; event->channel = channel; event->ctrl.type = kEngineControlEventTypeAllSoundOff; event->ctrl.param = 0; event->ctrl.midiValue = -1; event->ctrl.normalizedValue = 0.0f; event->ctrl.handled = true; } } break; case kPluginBridgeRtClientControlEventAllNotesOff: { const uint32_t time(fShmRtClientControl.readUInt()); const uint8_t channel(fShmRtClientControl.readByte()); if (EngineEvent* const event = getNextFreeInputEvent()) { event->type = kEngineEventTypeControl; event->time = time; event->channel = channel; event->ctrl.type = kEngineControlEventTypeAllNotesOff; event->ctrl.param = 0; event->ctrl.midiValue = -1; event->ctrl.normalizedValue = 0.0f; event->ctrl.handled = true; } } break; case kPluginBridgeRtClientMidiEvent: { const uint32_t time(fShmRtClientControl.readUInt()); const uint8_t port(fShmRtClientControl.readByte()); const uint8_t size(fShmRtClientControl.readByte()); CARLA_SAFE_ASSERT_BREAK(size > 0); // FIXME variable-size stack uint8_t data[size]; for (uint8_t i=0; itype = kEngineEventTypeMidi; event->time = time; event->channel = MIDI_GET_CHANNEL_FROM_DATA(data); event->midi.port = port; event->midi.size = size; if (size > EngineMidiEvent::kDataSize) { event->midi.dataExt = data; std::memset(event->midi.data, 0, sizeof(uint8_t)*EngineMidiEvent::kDataSize); } else { event->midi.data[0] = MIDI_GET_STATUS_FROM_DATA(data); uint8_t i=1; for (; i < size; ++i) event->midi.data[i] = data[i]; for (; i < EngineMidiEvent::kDataSize; ++i) event->midi.data[i] = 0; event->midi.dataExt = nullptr; } } break; } case kPluginBridgeRtClientProcess: { const uint32_t frames(fShmRtClientControl.readUInt()); CARLA_SAFE_ASSERT_BREAK(fShmAudioPool.data != nullptr); if (plugin.get() != nullptr && plugin->isEnabled() && plugin->tryLock(fIsOffline)) { const BridgeTimeInfo& bridgeTimeInfo(fShmRtClientControl.data->timeInfo); const uint32_t audioInCount(plugin->getAudioInCount()); const uint32_t audioOutCount(plugin->getAudioOutCount()); const uint32_t cvInCount(plugin->getCVInCount()); const uint32_t cvOutCount(plugin->getCVOutCount()); const float* audioIn[audioInCount]; /* */ float* audioOut[audioOutCount]; const float* cvIn[cvInCount]; /* */ float* cvOut[cvOutCount]; float* fdata = fShmAudioPool.data; for (uint32_t i=0; i < audioInCount; ++i, fdata += pData->bufferSize) audioIn[i] = fdata; for (uint32_t i=0; i < audioOutCount; ++i, fdata += pData->bufferSize) audioOut[i] = fdata; for (uint32_t i=0; i < cvInCount; ++i, fdata += pData->bufferSize) cvIn[i] = fdata; for (uint32_t i=0; i < cvOutCount; ++i, fdata += pData->bufferSize) cvOut[i] = fdata; EngineTimeInfo& timeInfo(pData->timeInfo); timeInfo.playing = bridgeTimeInfo.playing; timeInfo.frame = bridgeTimeInfo.frame; timeInfo.usecs = bridgeTimeInfo.usecs; timeInfo.bbt.valid = (bridgeTimeInfo.validFlags & kPluginBridgeTimeInfoValidBBT) != 0; if (timeInfo.bbt.valid) { timeInfo.bbt.bar = bridgeTimeInfo.bar; timeInfo.bbt.beat = bridgeTimeInfo.beat; timeInfo.bbt.tick = bridgeTimeInfo.tick; timeInfo.bbt.beatsPerBar = bridgeTimeInfo.beatsPerBar; timeInfo.bbt.beatType = bridgeTimeInfo.beatType; timeInfo.bbt.ticksPerBeat = bridgeTimeInfo.ticksPerBeat; timeInfo.bbt.beatsPerMinute = bridgeTimeInfo.beatsPerMinute; timeInfo.bbt.barStartTick = bridgeTimeInfo.barStartTick; } plugin->initBuffers(); plugin->process(audioIn, audioOut, cvIn, cvOut, frames); plugin->unlock(); } uint8_t* midiData(fShmRtClientControl.data->midiOut); carla_zeroBytes(midiData, kBridgeBaseMidiOutHeaderSize); std::size_t curMidiDataPos = 0; if (pData->events.in[0].type != kEngineEventTypeNull) carla_zeroStructs(pData->events.in, kMaxEngineEventInternalCount); if (pData->events.out[0].type != kEngineEventTypeNull) { for (ushort i=0; i < kMaxEngineEventInternalCount; ++i) { const EngineEvent& event(pData->events.out[i]); if (event.type == kEngineEventTypeNull) break; if (event.type == kEngineEventTypeControl) { uint8_t data[3]; const uint8_t size = event.ctrl.convertToMidiData(event.channel, data); CARLA_SAFE_ASSERT_CONTINUE(size > 0 && size <= 3); if (curMidiDataPos + kBridgeBaseMidiOutHeaderSize + size >= kBridgeRtClientDataMidiOutSize) break; // set time *(uint32_t*)midiData = event.time; midiData = midiData + 4; curMidiDataPos += 4; // set port *midiData++ = 0; ++curMidiDataPos; // set size *midiData++ = size; ++curMidiDataPos; // set data for (uint8_t j=0; j= kBridgeRtClientDataMidiOutSize) break; const uint8_t* const _midiData(_midiEvent.dataExt != nullptr ? _midiEvent.dataExt : _midiEvent.data); // set time *(uint32_t*)midiData = event.time; midiData += 4; curMidiDataPos += 4; // set port *midiData++ = _midiEvent.port; ++curMidiDataPos; // set size *midiData++ = _midiEvent.size; ++curMidiDataPos; // set data *midiData++ = uint8_t(_midiData[0] | (event.channel & MIDI_CHANNEL_BIT)); for (uint8_t j=1; j<_midiEvent.size; ++j) *midiData++ = _midiData[j]; curMidiDataPos += _midiEvent.size; } } if (curMidiDataPos != 0 && curMidiDataPos + kBridgeBaseMidiOutHeaderSize < kBridgeRtClientDataMidiOutSize) carla_zeroBytes(midiData, kBridgeBaseMidiOutHeaderSize); carla_zeroStructs(pData->events.out, kMaxEngineEventInternalCount); } } break; case kPluginBridgeRtClientQuit: { quitReceived = true; fClosingDown = true; signalThreadShouldExit(); } break; } } } callback(true, true, ENGINE_CALLBACK_ENGINE_STOPPED, 0, 0, 0, 0, 0.0f, nullptr); if (! quitReceived) { const char* const message("Plugin bridge error, process thread has stopped"); const std::size_t messageSize(std::strlen(message)); const CarlaMutexLocker _cml(fShmNonRtServerControl.mutex); fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerError); fShmNonRtServerControl.writeUInt(messageSize); fShmNonRtServerControl.writeCustomData(message, messageSize); fShmNonRtServerControl.commitWrite(); } } // called from process thread above EngineEvent* getNextFreeInputEvent() const noexcept { for (ushort i=0; i < kMaxEngineEventInternalCount; ++i) { EngineEvent* const event(&pData->events.in[i]); if (event->type == kEngineEventTypeNull) return event; } return nullptr; } void latencyChanged(const uint32_t samples) noexcept override { const CarlaMutexLocker _cml(fShmNonRtServerControl.mutex); fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerSetLatency); fShmNonRtServerControl.writeUInt(samples); fShmNonRtServerControl.commitWrite(); } // ------------------------------------------------------------------- private: BridgeAudioPool fShmAudioPool; BridgeRtClientControl fShmRtClientControl; BridgeNonRtClientControl fShmNonRtClientControl; BridgeNonRtServerControl fShmNonRtServerControl; CarlaString fBaseNameAudioPool; CarlaString fBaseNameRtClientControl; CarlaString fBaseNameNonRtClientControl; CarlaString fBaseNameNonRtServerControl; bool fClosingDown; bool fIsOffline; bool fFirstIdle; int64_t fLastPingTime; CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaEngineBridge) }; // ----------------------------------------------------------------------- namespace EngineInit { CarlaEngine* newBridge(const char* const audioPoolBaseName, const char* const rtClientBaseName, const char* const nonRtClientBaseName, const char* const nonRtServerBaseName) { return new CarlaEngineBridge(audioPoolBaseName, rtClientBaseName, nonRtClientBaseName, nonRtServerBaseName); } } // ----------------------------------------------------------------------- CARLA_BACKEND_END_NAMESPACE // ----------------------------------------------------------------------- #include "CarlaBridgeUtils.cpp" // ----------------------------------------------------------------------- Carla-2.4.2/source/backend/engine/CarlaEngineClient.cpp000066400000000000000000000241711420416754300227230ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2020 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "CarlaEngineClient.hpp" #include "CarlaEngineUtils.hpp" #include "CarlaString.hpp" CARLA_BACKEND_START_NAMESPACE // ----------------------------------------------------------------------- static void _getUniquePortName(CarlaString& sname, const CarlaStringList& list) { for (CarlaStringList::Itenerator it = list.begin2(); it.valid(); it.next()) { const char* const portName(it.getValue(nullptr)); CARLA_SAFE_ASSERT_CONTINUE(portName != nullptr && portName[0] != '\0'); // Check if unique name doesn't exist if (sname != portName) continue; // Check if string has already been modified { const std::size_t len(sname.length()); // 1 digit, ex: " (2)" if (sname[len-4] == ' ' && sname[len-3] == '(' && sname.isDigit(len-2) && sname[len-1] == ')') { const int number = sname[len-2] - '0'; if (number == 9) { // next number is 10, 2 digits sname.truncate(len-4); sname += " (10)"; //sname.replace(" (9)", " (10)"); } else sname[len-2] = char('0' + number + 1); continue; } // 2 digits, ex: " (11)" if (sname[len-5] == ' ' && sname[len-4] == '(' && sname.isDigit(len-3) && sname.isDigit(len-2) && sname[len-1] == ')') { char n2 = sname[len-2]; char n3 = sname[len-3]; if (n2 == '9') { n2 = '0'; n3 = static_cast(n3 + 1); } else n2 = static_cast(n2 + 1); sname[len-2] = n2; sname[len-3] = n3; continue; } } // Modify string if not sname += " (2)"; } } // ----------------------------------------------------------------------- // Carla Engine Client #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH CarlaEngineClient::ProtectedData::ProtectedData(const CarlaEngine& eng, EngineInternalGraph& eg, const CarlaPluginPtr p) noexcept #else CarlaEngineClient::ProtectedData::ProtectedData(const CarlaEngine& eng) noexcept #endif : engine(eng), active(false), latency(0), #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH cvSourcePorts(), egraph(eg), plugin(p), #endif audioInList(), audioOutList(), cvInList(), cvOutList(), eventInList(), eventOutList() {} CarlaEngineClient::ProtectedData::~ProtectedData() { carla_debug("CarlaEngineClient::ProtectedData::~ProtectedData()"); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH CARLA_SAFE_ASSERT(plugin.get() == nullptr); #endif } void CarlaEngineClient::ProtectedData::addAudioPortName(const bool isInput, const char* const name) { CARLA_SAFE_ASSERT_RETURN(name != nullptr && name[0] != '\0',); CarlaStringList& portList(isInput ? audioInList : audioOutList); portList.append(name); } void CarlaEngineClient::ProtectedData::addCVPortName(const bool isInput, const char* const name) { CARLA_SAFE_ASSERT_RETURN(name != nullptr && name[0] != '\0',); CarlaStringList& portList(isInput ? cvInList : cvOutList); portList.append(name); } void CarlaEngineClient::ProtectedData::addEventPortName(const bool isInput, const char* const name) { CARLA_SAFE_ASSERT_RETURN(name != nullptr && name[0] != '\0',); CarlaStringList& portList(isInput ? eventInList : eventOutList); portList.append(name); } const char* CarlaEngineClient::ProtectedData::getUniquePortName(const char* const name) { CARLA_SAFE_ASSERT_RETURN(name != nullptr && name[0] != '\0', nullptr); CarlaString sname; sname = name; _getUniquePortName(sname, audioInList); _getUniquePortName(sname, audioOutList); _getUniquePortName(sname, cvInList); _getUniquePortName(sname, cvOutList); _getUniquePortName(sname, eventInList); _getUniquePortName(sname, eventOutList); return sname.dup(); } void CarlaEngineClient::ProtectedData::clearPorts() { audioInList.clear(); audioOutList.clear(); cvInList.clear(); cvOutList.clear(); eventInList.clear(); eventOutList.clear(); } // ----------------------------------------------------------------------- CarlaEngineClient::CarlaEngineClient(ProtectedData* const p) : pData(p) { carla_debug("CarlaEngineClient::CarlaEngineClient()"); } CarlaEngineClient::~CarlaEngineClient() noexcept { carla_debug("CarlaEngineClient::~CarlaEngineClient()"); } void CarlaEngineClient::activate() noexcept { CARLA_SAFE_ASSERT(! pData->active); carla_debug("CarlaEngineClient::activate()"); pData->active = true; } void CarlaEngineClient::deactivate(const bool willClose) noexcept { CARLA_SAFE_ASSERT(pData->active || willClose); carla_debug("CarlaEngineClient::deactivate(%s)", bool2str(willClose)); pData->active = false; if (willClose) { #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH pData->cvSourcePorts.resetGraphAndPlugin(); pData->plugin.reset(); #endif } } bool CarlaEngineClient::isActive() const noexcept { return pData->active; } bool CarlaEngineClient::isOk() const noexcept { return true; } uint32_t CarlaEngineClient::getLatency() const noexcept { return pData->latency; } void CarlaEngineClient::setLatency(const uint32_t samples) noexcept { pData->latency = samples; } CarlaEnginePort* CarlaEngineClient::addPort(const EnginePortType portType, const char* const name, const bool isInput, const uint32_t indexOffset) { CARLA_SAFE_ASSERT_RETURN(name != nullptr && name[0] != '\0', nullptr); carla_debug("CarlaEngineClient::addPort(%i:%s, \"%s\", %s, %u)", portType, EnginePortType2Str(portType), name, bool2str(isInput), indexOffset); switch (portType) { case kEnginePortTypeNull: break; case kEnginePortTypeAudio: pData->addAudioPortName(isInput, name); return new CarlaEngineAudioPort(*this, isInput, indexOffset); case kEnginePortTypeCV: pData->addCVPortName(isInput, name); return new CarlaEngineCVPort(*this, isInput, indexOffset); case kEnginePortTypeEvent: pData->addEventPortName(isInput, name); return new CarlaEngineEventPort(*this, isInput, indexOffset); } carla_stderr("CarlaEngineClient::addPort(%i, \"%s\", %s) - invalid type", portType, name, bool2str(isInput)); return nullptr; } bool CarlaEngineClient::removePort(const EnginePortType portType, const char* const name, const bool isInput) { CARLA_SAFE_ASSERT_RETURN(name != nullptr && name[0] != '\0', false); carla_debug("CarlaEngineClient::removePort(%i:%s, \"%s\", %s)", portType, EnginePortType2Str(portType), name, bool2str(isInput)); switch (portType) { case kEnginePortTypeNull: break; case kEnginePortTypeAudio: { CarlaStringList& portList(isInput ? pData->audioInList : pData->audioOutList); portList.append(name); return portList.removeOne(name); } case kEnginePortTypeCV: { CarlaStringList& portList(isInput ? pData->cvInList : pData->cvOutList); return portList.removeOne(name); } case kEnginePortTypeEvent: { CarlaStringList& portList(isInput ? pData->eventInList : pData->eventOutList); return portList.removeOne(name); } } return false; } #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH CarlaEngineCVSourcePorts* CarlaEngineClient::createCVSourcePorts() { pData->cvSourcePorts.setGraphAndPlugin(pData->egraph.getPatchbayGraphOrNull(), pData->plugin); return &pData->cvSourcePorts; } #endif const CarlaEngine& CarlaEngineClient::getEngine() const noexcept { return pData->engine; } EngineProcessMode CarlaEngineClient::getProcessMode() const noexcept { return pData->engine.getProccessMode(); } uint CarlaEngineClient::getPortCount(const EnginePortType portType, const bool isInput) const noexcept { size_t ret = 0; switch (portType) { case kEnginePortTypeNull: break; case kEnginePortTypeAudio: ret = isInput ? pData->audioInList.count() : pData->audioOutList.count(); break; case kEnginePortTypeCV: ret = isInput ? pData->cvInList.count() : pData->cvOutList.count(); break; case kEnginePortTypeEvent: ret = isInput ? pData->eventInList.count() : pData->eventOutList.count(); break; } return static_cast(ret); } const char* CarlaEngineClient::getAudioPortName(const bool isInput, const uint index) const noexcept { CarlaStringList& portList(isInput ? pData->audioInList : pData->audioOutList); CARLA_SAFE_ASSERT_RETURN(index < portList.count(), nullptr); return portList.getAt(index); } const char* CarlaEngineClient::getCVPortName(const bool isInput, const uint index) const noexcept { CarlaStringList& portList(isInput ? pData->cvInList : pData->cvOutList); CARLA_SAFE_ASSERT_RETURN(index < portList.count(), nullptr); return portList.getAt(index); } const char* CarlaEngineClient::getEventPortName(const bool isInput, const uint index) const noexcept { CarlaStringList& portList(isInput ? pData->eventInList : pData->eventOutList); CARLA_SAFE_ASSERT_RETURN(index < portList.count(), nullptr); return portList.getAt(index); } // ----------------------------------------------------------------------- CARLA_BACKEND_END_NAMESPACE Carla-2.4.2/source/backend/engine/CarlaEngineClient.hpp000066400000000000000000000072551420416754300227340ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2020 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #ifndef CARLA_ENGINE_CLIENT_HPP_INCLUDED #define CARLA_ENGINE_CLIENT_HPP_INCLUDED #include "CarlaEngine.hpp" #include "CarlaEnginePorts.hpp" #include "CarlaPlugin.hpp" #include "CarlaStringList.hpp" CARLA_BACKEND_START_NAMESPACE // ----------------------------------------------------------------------- // Carla Engine Client Protected Data struct CarlaEngineClient::ProtectedData { const CarlaEngine& engine; bool active; uint32_t latency; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH CarlaEngineCVSourcePortsForStandalone cvSourcePorts; EngineInternalGraph& egraph; CarlaPluginPtr plugin; #endif CarlaStringList audioInList; CarlaStringList audioOutList; CarlaStringList cvInList; CarlaStringList cvOutList; CarlaStringList eventInList; CarlaStringList eventOutList; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH ProtectedData(const CarlaEngine& eng, EngineInternalGraph& eg, CarlaPluginPtr p) noexcept; #else ProtectedData(const CarlaEngine& eng) noexcept; #endif ~ProtectedData(); void addAudioPortName(bool isInput, const char* name); void addCVPortName(bool isInput, const char* name); void addEventPortName(bool isInput, const char* name); void clearPorts(); const char* getUniquePortName(const char* name); #ifdef CARLA_PROPER_CPP11_SUPPORT ProtectedData() = delete; CARLA_DECLARE_NON_COPY_STRUCT(ProtectedData) #endif }; // ----------------------------------------------------------------------- // Carla Engine Client #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH class CarlaEngineClientForStandalone : public CarlaEngineClient { public: CarlaEngineClientForStandalone(const CarlaEngine& engine, EngineInternalGraph& egraph, const CarlaPluginPtr plugin) : CarlaEngineClient(new ProtectedData(engine, egraph, plugin)) {} ~CarlaEngineClientForStandalone() noexcept override { carla_debug("CarlaEngineClientForStandalone::~CarlaEngineClientForStandalone()"); delete pData; } protected: inline PatchbayGraph* getPatchbayGraphOrNull() const noexcept { return pData->egraph.getPatchbayGraphOrNull(); } inline CarlaPluginPtr getPlugin() const noexcept { return pData->plugin; } CARLA_DECLARE_NON_COPY_CLASS(CarlaEngineClientForStandalone) }; typedef CarlaEngineClientForStandalone CarlaEngineClientForSubclassing; #else class CarlaEngineClientForBridge : public CarlaEngineClient { public: CarlaEngineClientForBridge(const CarlaEngine& engine) : CarlaEngineClient(new ProtectedData(engine)) {} ~CarlaEngineClientForBridge() override { carla_debug("CarlaEngineClientForBridge::~CarlaEngineClientForBridge()"); delete pData; } CARLA_DECLARE_NON_COPY_CLASS(CarlaEngineClientForBridge) }; typedef CarlaEngineClientForBridge CarlaEngineClientForSubclassing; #endif // ----------------------------------------------------------------------- CARLA_BACKEND_END_NAMESPACE #endif // CARLA_ENGINE_CLIENT_HPP_INCLUDED Carla-2.4.2/source/backend/engine/CarlaEngineData.cpp000066400000000000000000000321251420416754300223540ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2021 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "CarlaEngine.hpp" #include "CarlaMathUtils.hpp" #include "CarlaMIDI.h" CARLA_BACKEND_START_NAMESPACE // ----------------------------------------------------------------------- // EngineControlEvent uint8_t EngineControlEvent::convertToMidiData(const uint8_t channel, uint8_t data[3]) const noexcept { switch (type) { case kEngineControlEventTypeNull: break; case kEngineControlEventTypeParameter: CARLA_SAFE_ASSERT_RETURN(param < MAX_MIDI_VALUE, 0); data[0] = static_cast(MIDI_STATUS_CONTROL_CHANGE | (channel & MIDI_CHANNEL_BIT)); if (MIDI_IS_CONTROL_BANK_SELECT(param)) { data[1] = MIDI_CONTROL_BANK_SELECT; if (midiValue >= 0) data[2] = uint8_t(midiValue); else data[2] = uint8_t(carla_fixedValue(0.0f, static_cast(MAX_MIDI_VALUE-1), normalizedValue)); } else { data[1] = static_cast(param); if (midiValue >= 0) data[2] = uint8_t(midiValue); else data[2] = uint8_t(carla_fixedValue(0.0f, 1.0f, normalizedValue) * static_cast(MAX_MIDI_VALUE-1)); } return 3; case kEngineControlEventTypeMidiBank: data[0] = static_cast(MIDI_STATUS_CONTROL_CHANGE | (channel & MIDI_CHANNEL_BIT)); data[1] = MIDI_CONTROL_BANK_SELECT; data[2] = uint8_t(carla_fixedValue(0, MAX_MIDI_VALUE-1, param)); return 3; case kEngineControlEventTypeMidiProgram: data[0] = static_cast(MIDI_STATUS_PROGRAM_CHANGE | (channel & MIDI_CHANNEL_BIT)); data[1] = uint8_t(carla_fixedValue(0, MAX_MIDI_VALUE-1, param)); return 2; case kEngineControlEventTypeAllSoundOff: data[0] = static_cast(MIDI_STATUS_CONTROL_CHANGE | (channel & MIDI_CHANNEL_BIT)); data[1] = MIDI_CONTROL_ALL_SOUND_OFF; return 2; case kEngineControlEventTypeAllNotesOff: data[0] = static_cast(MIDI_STATUS_CONTROL_CHANGE | (channel & MIDI_CHANNEL_BIT)); data[1] = MIDI_CONTROL_ALL_NOTES_OFF; return 2; } return 0; } // ----------------------------------------------------------------------- // EngineEvent void EngineEvent::fillFromMidiData(const uint8_t size, const uint8_t* const data, const uint8_t midiPortOffset) noexcept { if (size == 0 || data == nullptr || data[0] < MIDI_STATUS_NOTE_OFF) { type = kEngineEventTypeNull; channel = 0; return; } // get channel channel = uint8_t(MIDI_GET_CHANNEL_FROM_DATA(data)); // get status const uint8_t midiStatus(uint8_t(MIDI_GET_STATUS_FROM_DATA(data))); if (midiStatus == MIDI_STATUS_CONTROL_CHANGE) { CARLA_SAFE_ASSERT_RETURN(size >= 2,); type = kEngineEventTypeControl; const uint8_t midiControl(data[1]); if (MIDI_IS_CONTROL_BANK_SELECT(midiControl)) { CARLA_SAFE_ASSERT_RETURN(size >= 3,); const uint8_t midiBank(data[2]); ctrl.type = kEngineControlEventTypeMidiBank; ctrl.param = midiBank; ctrl.midiValue = -1; ctrl.normalizedValue = 0.0f; ctrl.handled = true; } else if (midiControl == MIDI_CONTROL_ALL_SOUND_OFF) { ctrl.type = kEngineControlEventTypeAllSoundOff; ctrl.param = 0; ctrl.midiValue = -1; ctrl.normalizedValue = 0.0f; ctrl.handled = true; } else if (midiControl == MIDI_CONTROL_ALL_NOTES_OFF) { ctrl.type = kEngineControlEventTypeAllNotesOff; ctrl.param = 0; ctrl.midiValue = -1; ctrl.normalizedValue = 0.0f; ctrl.handled = true; } else { CARLA_SAFE_ASSERT_RETURN(size >= 3,); // ensures 0.0<->1.0 value range const int8_t midiValue = static_cast(carla_fixedValue(0, 127, data[2])); ctrl.type = kEngineControlEventTypeParameter; ctrl.param = midiControl; ctrl.midiValue = midiValue; ctrl.normalizedValue = float(midiValue)/127.0f; ctrl.handled = false; } } else if (midiStatus == MIDI_STATUS_PROGRAM_CHANGE) { CARLA_SAFE_ASSERT_RETURN(size >= 2,); type = kEngineEventTypeControl; const uint8_t midiProgram(data[1]); ctrl.type = kEngineControlEventTypeMidiProgram; ctrl.param = midiProgram; ctrl.midiValue = -1; ctrl.normalizedValue = 0.0f; ctrl.handled = true; } else { type = kEngineEventTypeMidi; midi.port = midiPortOffset; midi.size = size; if (size > EngineMidiEvent::kDataSize) { midi.dataExt = data; std::memset(midi.data, 0, sizeof(uint8_t)*EngineMidiEvent::kDataSize); } else { midi.data[0] = midiStatus; uint8_t i=1; for (; i < size; ++i) midi.data[i] = data[i]; for (; i < EngineMidiEvent::kDataSize; ++i) midi.data[i] = 0; midi.dataExt = nullptr; } } } // ----------------------------------------------------------------------- // EngineOptions EngineOptions::EngineOptions() noexcept #ifdef CARLA_OS_LINUX : processMode(ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS), transportMode(ENGINE_TRANSPORT_MODE_JACK), #else : processMode(ENGINE_PROCESS_MODE_PATCHBAY), transportMode(ENGINE_TRANSPORT_MODE_INTERNAL), #endif transportExtra(nullptr), forceStereo(false), resetXruns(false), preferPluginBridges(false), #if defined(CARLA_OS_MAC) || defined(CARLA_OS_WIN) preferUiBridges(false), #else preferUiBridges(true), #endif uisAlwaysOnTop(true), pluginsAreStandalone(false), bgColor(0x000000ff), fgColor(0xffffffff), uiScale(1.0f), maxParameters(MAX_DEFAULT_PARAMETERS), uiBridgesTimeout(4000), audioBufferSize(512), audioSampleRate(44100), audioTripleBuffer(false), audioDriver(nullptr), audioDevice(nullptr), #ifndef BUILD_BRIDGE # ifdef CARLA_OS_WIN oscEnabled(false), # else oscEnabled(true), # endif oscPortTCP(22752), oscPortUDP(22752), #endif pathAudio(nullptr), pathMIDI(nullptr), pathLADSPA(nullptr), pathDSSI(nullptr), pathLV2(nullptr), pathVST2(nullptr), pathVST3(nullptr), pathSF2(nullptr), pathSFZ(nullptr), pathJSFX(nullptr), binaryDir(nullptr), resourceDir(nullptr), clientNamePrefix(nullptr), preventBadBehaviour(false), frontendWinId(0) #ifndef CARLA_OS_WIN , wine() #endif { } EngineOptions::~EngineOptions() noexcept { if (audioDriver != nullptr) { delete[] audioDriver; audioDriver = nullptr; } if (audioDevice != nullptr) { delete[] audioDevice; audioDevice = nullptr; } if (pathAudio != nullptr) { delete[] pathAudio; pathAudio = nullptr; } if (pathMIDI != nullptr) { delete[] pathMIDI; pathMIDI = nullptr; } if (pathLADSPA != nullptr) { delete[] pathLADSPA; pathLADSPA = nullptr; } if (pathDSSI != nullptr) { delete[] pathDSSI; pathDSSI = nullptr; } if (pathLV2 != nullptr) { delete[] pathLV2; pathLV2 = nullptr; } if (pathVST2 != nullptr) { delete[] pathVST2; pathVST2 = nullptr; } if (pathVST3 != nullptr) { delete[] pathVST3; pathVST3 = nullptr; } if (pathSF2 != nullptr) { delete[] pathSF2; pathSF2 = nullptr; } if (pathSFZ != nullptr) { delete[] pathSFZ; pathSFZ = nullptr; } if (pathJSFX != nullptr) { delete[] pathJSFX; pathJSFX = nullptr; } if (binaryDir != nullptr) { delete[] binaryDir; binaryDir = nullptr; } if (resourceDir != nullptr) { delete[] resourceDir; resourceDir = nullptr; } if (clientNamePrefix != nullptr) { delete[] clientNamePrefix; clientNamePrefix = nullptr; } } #ifndef CARLA_OS_WIN EngineOptions::Wine::Wine() noexcept : executable(nullptr), autoPrefix(true), fallbackPrefix(nullptr), rtPrio(true), baseRtPrio(15), serverRtPrio(10) {} EngineOptions::Wine::~Wine() noexcept { if (executable != nullptr) { delete[] executable; executable = nullptr; } if (fallbackPrefix != nullptr) { delete[] fallbackPrefix; fallbackPrefix = nullptr; } } #endif // ----------------------------------------------------------------------- // EngineTimeInfoBBT EngineTimeInfoBBT::EngineTimeInfoBBT() noexcept : valid(false), bar(0), beat(0), tick(0.0), barStartTick(0.0), beatsPerBar(0.0f), beatType(0.0f), ticksPerBeat(0.0), beatsPerMinute(0.0) {} EngineTimeInfoBBT::EngineTimeInfoBBT(const EngineTimeInfoBBT& bbt) noexcept : valid(bbt.valid), bar(bbt.bar), beat(bbt.beat), tick(bbt.tick), barStartTick(bbt.barStartTick), beatsPerBar(bbt.beatsPerBar), beatType(bbt.beatType), ticksPerBeat(bbt.ticksPerBeat), beatsPerMinute(bbt.beatsPerMinute) {} void EngineTimeInfoBBT::clear() noexcept { valid = false; bar = 0; beat = 0; tick = 0.0; barStartTick = 0.0; beatsPerBar = 0.0f; beatType = 0.0f; ticksPerBeat = 0.0; beatsPerMinute = 0.0; } // ----------------------------------------------------------------------- // EngineTimeInfo EngineTimeInfo::EngineTimeInfo() noexcept : playing(false), frame(0), usecs(0), bbt() {} void EngineTimeInfo::clear() noexcept { playing = false; frame = 0; usecs = 0; bbt.clear(); } EngineTimeInfo::EngineTimeInfo(const EngineTimeInfo& info) noexcept : playing(info.playing), frame(info.frame), usecs(info.usecs), bbt(info.bbt) {} EngineTimeInfo& EngineTimeInfo::operator=(const EngineTimeInfo& info) noexcept { playing = info.playing; frame = info.frame; usecs = info.usecs; bbt.valid = info.bbt.valid; bbt.bar = info.bbt.bar; bbt.beat = info.bbt.beat; bbt.tick = info.bbt.tick; bbt.barStartTick = info.bbt.barStartTick; bbt.beatsPerBar = info.bbt.beatsPerBar; bbt.beatType = info.bbt.beatType; bbt.ticksPerBeat = info.bbt.ticksPerBeat; bbt.beatsPerMinute = info.bbt.beatsPerMinute; return *this; } bool EngineTimeInfo::compareIgnoringRollingFrames(const EngineTimeInfo& timeInfo, const uint32_t maxFrames) const noexcept { if (timeInfo.playing != playing || timeInfo.bbt.valid != bbt.valid) return false; if (bbt.valid) { if (carla_isNotEqual(timeInfo.bbt.beatsPerBar, bbt.beatsPerBar)) return false; if (carla_isNotEqual(timeInfo.bbt.beatsPerMinute, bbt.beatsPerMinute)) return false; } // frame matches, nothing else to compare if (timeInfo.frame == frame) return true; // if we went back in time, so a case of reposition if (frame > timeInfo.frame) return false; // not playing, so don't bother checking transport // assume frame changed, likely playback has stopped if (! playing) return false; // if we are within expected bounds, assume we are rolling normally if (frame + maxFrames <= timeInfo.frame) return true; // out of bounds, another reposition return false; } bool EngineTimeInfo::operator==(const EngineTimeInfo& timeInfo) const noexcept { if (timeInfo.playing != playing || timeInfo.frame != frame || timeInfo.bbt.valid != bbt.valid) return false; if (! bbt.valid) return true; if (carla_isNotEqual(timeInfo.bbt.beatsPerBar, bbt.beatsPerBar)) return false; if (carla_isNotEqual(timeInfo.bbt.beatsPerMinute, bbt.beatsPerMinute)) return false; return true; } bool EngineTimeInfo::operator!=(const EngineTimeInfo& timeInfo) const noexcept { return !operator==(timeInfo); } // ----------------------------------------------------------------------- CARLA_BACKEND_END_NAMESPACE Carla-2.4.2/source/backend/engine/CarlaEngineDummy.cpp000066400000000000000000000213271420416754300226000ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2020 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the GPL.txt file */ #include "CarlaEngineGraph.hpp" #include "CarlaEngineInit.hpp" #include "CarlaEngineInternal.hpp" #include #include CARLA_BACKEND_START_NAMESPACE // ------------------------------------------------------------------------------------------------------------------- // Dummy Engine class CarlaEngineDummy : public CarlaEngine, public CarlaThread { public: CarlaEngineDummy() : CarlaEngine(), CarlaThread("CarlaEngineDummy"), fRunning(false) { carla_debug("CarlaEngineDummy::CarlaEngineDummy()"); // just to make sure pData->options.transportMode = ENGINE_TRANSPORT_MODE_INTERNAL; } ~CarlaEngineDummy() override { carla_debug("CarlaEngineDummy::~CarlaEngineDummy()"); } // ------------------------------------- bool init(const char* const clientName) override { CARLA_SAFE_ASSERT_RETURN(clientName != nullptr && clientName[0] != '\0', false); carla_debug("CarlaEngineDummy::init(\"%s\")", clientName); if (pData->options.processMode != ENGINE_PROCESS_MODE_CONTINUOUS_RACK) { setLastError("Invalid process mode"); return false; } fRunning = true; if (! pData->init(clientName)) { close(); setLastError("Failed to init internal data"); return false; } pData->bufferSize = pData->options.audioBufferSize; pData->sampleRate = pData->options.audioSampleRate; pData->initTime(pData->options.transportExtra); pData->graph.create(2, 2, 0, 0); if (! startThread(true)) { close(); setLastError("Failed to start dummy audio thread"); return false; } patchbayRefresh(true, false, false); callback(true, true, ENGINE_CALLBACK_ENGINE_STARTED, 0, pData->options.processMode, pData->options.transportMode, static_cast(pData->bufferSize), static_cast(pData->sampleRate), getCurrentDriverName()); return true; } bool close() override { carla_debug("CarlaEngineDummy::close()"); fRunning = false; stopThread(-1); CarlaEngine::close(); pData->graph.destroy(); return true; } bool isRunning() const noexcept override { return fRunning; } bool isOffline() const noexcept override { return false; } EngineType getType() const noexcept override { return kEngineTypeDummy; } const char* getCurrentDriverName() const noexcept override { return "Dummy"; } // ------------------------------------------------------------------- // Patchbay bool patchbayRefresh(const bool sendHost, const bool sendOSC, const bool) override { CARLA_SAFE_ASSERT_RETURN(pData->graph.isReady(), false); RackGraph* const graph = pData->graph.getRackGraph(); CARLA_SAFE_ASSERT_RETURN(graph != nullptr, false); ExternalGraph& extGraph(graph->extGraph); // --------------------------------------------------------------- // clear last ports extGraph.clear(); // --------------------------------------------------------------- // fill in new ones { PortNameToId portNameToId; portNameToId.setData(kExternalGraphGroupAudioIn, 1, "capture_1", ""); extGraph.audioPorts.ins.append(portNameToId); } { PortNameToId portNameToId; portNameToId.setData(kExternalGraphGroupAudioIn, 2, "capture_2", ""); extGraph.audioPorts.ins.append(portNameToId); } { PortNameToId portNameToId; portNameToId.setData(kExternalGraphGroupAudioOut, 1, "playback_1", ""); extGraph.audioPorts.outs.append(portNameToId); } { PortNameToId portNameToId; portNameToId.setData(kExternalGraphGroupAudioOut, 2, "playback_2", ""); extGraph.audioPorts.outs.append(portNameToId); } // --------------------------------------------------------------- // now refresh if (sendHost || sendOSC) graph->refresh(sendHost, sendOSC, false, "Dummy"); return true; } // ------------------------------------------------------------------- protected: static int64_t getTimeInMicroseconds() noexcept { #if defined(CARLA_OS_MAC) || defined(CARLA_OS_WIN) struct timeval tv; gettimeofday(&tv, nullptr); return (tv.tv_sec * 1000000) + tv.tv_usec; #else struct timespec ts; # ifdef CLOCK_MONOTONIC_RAW clock_gettime(CLOCK_MONOTONIC_RAW, &ts); # else clock_gettime(CLOCK_MONOTONIC, &ts); # endif return (ts.tv_sec * 1000000) + (ts.tv_nsec / 1000); #endif } void run() override { const uint32_t bufferSize = pData->bufferSize; const int64_t cycleTime = static_cast( static_cast(bufferSize) / pData->sampleRate * 1000000 + 0.5); int delay = 0; if (const char* const delaystr = std::getenv("CARLA_BRIDGE_DUMMY")) if ((delay = atoi(delaystr)) == 1) delay = 0; carla_stdout("CarlaEngineDummy audio thread started, cycle time: " P_INT64 "ms, delay %ds", cycleTime / 1000, delay); float* audioIns[2] = { (float*)std::malloc(sizeof(float)*bufferSize), (float*)std::malloc(sizeof(float)*bufferSize), }; CARLA_SAFE_ASSERT_RETURN(audioIns[0] != nullptr,); CARLA_SAFE_ASSERT_RETURN(audioIns[1] != nullptr,); float* audioOuts[2] = { (float*)std::malloc(sizeof(float)*bufferSize), (float*)std::malloc(sizeof(float)*bufferSize), }; CARLA_SAFE_ASSERT_RETURN(audioOuts[0] != nullptr,); CARLA_SAFE_ASSERT_RETURN(audioOuts[1] != nullptr,); carla_zeroFloats(audioIns[0], bufferSize); carla_zeroFloats(audioIns[1], bufferSize); carla_zeroStructs(pData->events.in, kMaxEngineEventInternalCount); int64_t oldTime, newTime; while (! shouldThreadExit()) { if (delay > 0) carla_sleep(static_cast(delay)); oldTime = getTimeInMicroseconds(); const PendingRtEventsRunner prt(this, bufferSize, true); carla_zeroFloats(audioOuts[0], bufferSize); carla_zeroFloats(audioOuts[1], bufferSize); carla_zeroStructs(pData->events.out, kMaxEngineEventInternalCount); pData->graph.process(pData, audioIns, audioOuts, bufferSize); newTime = getTimeInMicroseconds(); CARLA_SAFE_ASSERT_CONTINUE(newTime >= oldTime); const int64_t remainingTime = cycleTime - (newTime - oldTime); if (remainingTime <= 0) { ++pData->xruns; carla_stdout("XRUN! remaining time: " P_INT64 ", old: " P_INT64 ", new: " P_INT64 ")", remainingTime, oldTime, newTime); } else if (remainingTime >= 1000) { CARLA_SAFE_ASSERT_CONTINUE(remainingTime < 1000000); // 1 sec carla_msleep(static_cast(remainingTime / 1000)); } } std::free(audioIns[0]); std::free(audioIns[1]); std::free(audioOuts[0]); std::free(audioOuts[1]); carla_stdout("CarlaEngineDummy audio thread finished with %u Xruns", pData->xruns); } // ------------------------------------------------------------------- private: bool fRunning; CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaEngineDummy) }; // ----------------------------------------- namespace EngineInit { CarlaEngine* newDummy() { carla_debug("EngineInit::newDummy()"); return new CarlaEngineDummy(); } } // ----------------------------------------- CARLA_BACKEND_END_NAMESPACE Carla-2.4.2/source/backend/engine/CarlaEngineGraph.cpp000066400000000000000000003244141420416754300225510ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2020 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "CarlaEngineGraph.hpp" #include "CarlaEngineInternal.hpp" #include "CarlaPlugin.hpp" #include "CarlaMathUtils.hpp" #include "CarlaScopeUtils.hpp" #include "CarlaMIDI.h" using water::jmax; using water::jmin; using water::AudioProcessor; using water::MidiBuffer; using water::String; using water::StringArray; CARLA_BACKEND_START_NAMESPACE // ----------------------------------------------------------------------- // Fallback data static const PortNameToId kPortNameToIdFallback = { 0, 0, { '\0' }, { '\0' } }; static /* */ PortNameToId kPortNameToIdFallbackNC = { 0, 0, { '\0' }, { '\0' } }; // ----------------------------------------------------------------------- // External Graph stuff static inline uint getExternalGraphPortIdFromName(const char* const shortname) noexcept { if (std::strcmp(shortname, "AudioIn1") == 0 || std::strcmp(shortname, "audio-in1") == 0) return kExternalGraphCarlaPortAudioIn1; if (std::strcmp(shortname, "AudioIn2") == 0 || std::strcmp(shortname, "audio-in2") == 0) return kExternalGraphCarlaPortAudioIn2; if (std::strcmp(shortname, "AudioOut1") == 0 || std::strcmp(shortname, "audio-out1") == 0) return kExternalGraphCarlaPortAudioOut1; if (std::strcmp(shortname, "AudioOut2") == 0 || std::strcmp(shortname, "audio-out2") == 0) return kExternalGraphCarlaPortAudioOut2; if (std::strcmp(shortname, "MidiIn") == 0 || std::strcmp(shortname, "midi-in") == 0) return kExternalGraphCarlaPortMidiIn; if (std::strcmp(shortname, "MidiOut") == 0 || std::strcmp(shortname, "midi-out") == 0) return kExternalGraphCarlaPortMidiOut; carla_stderr("CarlaBackend::getExternalGraphPortIdFromName(%s) - invalid short name", shortname); return kExternalGraphCarlaPortNull; } static inline const char* getExternalGraphFullPortNameFromId(const /*RackGraphCarlaPortIds*/ uint portId) { switch (portId) { case kExternalGraphCarlaPortAudioIn1: return "Carla:AudioIn1"; case kExternalGraphCarlaPortAudioIn2: return "Carla:AudioIn2"; case kExternalGraphCarlaPortAudioOut1: return "Carla:AudioOut1"; case kExternalGraphCarlaPortAudioOut2: return "Carla:AudioOut2"; case kExternalGraphCarlaPortMidiIn: return "Carla:MidiIn"; case kExternalGraphCarlaPortMidiOut: return "Carla:MidiOut"; //case kExternalGraphCarlaPortNull: //case kExternalGraphCarlaPortMax: // break; } carla_stderr("CarlaBackend::getExternalGraphFullPortNameFromId(%i) - invalid port id", portId); return nullptr; } // ----------------------------------------------------------------------- ExternalGraphPorts::ExternalGraphPorts() noexcept : ins(), outs() {} const char* ExternalGraphPorts::getName(const bool isInput, const uint portId) const noexcept { for (LinkedList::Itenerator it = isInput ? ins.begin2() : outs.begin2(); it.valid(); it.next()) { const PortNameToId& portNameToId(it.getValue(kPortNameToIdFallback)); CARLA_SAFE_ASSERT_CONTINUE(portNameToId.group > 0); if (portNameToId.port == portId) return portNameToId.name; } return nullptr; } uint ExternalGraphPorts::getPortId(const bool isInput, const char portName[], bool* const ok) const noexcept { for (LinkedList::Itenerator it = isInput ? ins.begin2() : outs.begin2(); it.valid(); it.next()) { const PortNameToId& portNameToId(it.getValue(kPortNameToIdFallback)); CARLA_SAFE_ASSERT_CONTINUE(portNameToId.group > 0); if (std::strncmp(portNameToId.name, portName, STR_MAX) == 0) { if (ok != nullptr) *ok = true; return portNameToId.port; } } if (ok != nullptr) *ok = false; return 0; } // ----------------------------------------------------------------------- ExternalGraph::ExternalGraph(CarlaEngine* const engine) noexcept : connections(), audioPorts(), midiPorts(), positions(), retCon(), kEngine(engine) { carla_zeroStruct(positions); } void ExternalGraph::clear() noexcept { connections.clear(); audioPorts.ins.clear(); audioPorts.outs.clear(); midiPorts.ins.clear(); midiPorts.outs.clear(); } bool ExternalGraph::connect(const bool sendHost, const bool sendOSC, const uint groupA, const uint portA, const uint groupB, const uint portB) noexcept { uint otherGroup, otherPort, carlaPort; if (groupA == kExternalGraphGroupCarla) { CARLA_SAFE_ASSERT_RETURN(groupB != kExternalGraphGroupCarla, false); carlaPort = portA; otherGroup = groupB; otherPort = portB; } else { CARLA_SAFE_ASSERT_RETURN(groupB == kExternalGraphGroupCarla, false); carlaPort = portB; otherGroup = groupA; otherPort = portA; } CARLA_SAFE_ASSERT_RETURN(carlaPort > kExternalGraphCarlaPortNull && carlaPort < kExternalGraphCarlaPortMax, false); CARLA_SAFE_ASSERT_RETURN(otherGroup > kExternalGraphGroupCarla && otherGroup < kExternalGraphGroupMax, false); bool makeConnection = false; switch (carlaPort) { case kExternalGraphCarlaPortAudioIn1: CARLA_SAFE_ASSERT_RETURN(otherGroup == kExternalGraphGroupAudioIn, false); makeConnection = kEngine->connectExternalGraphPort(kExternalGraphConnectionAudioIn1, otherPort, nullptr); break; case kExternalGraphCarlaPortAudioIn2: CARLA_SAFE_ASSERT_RETURN(otherGroup == kExternalGraphGroupAudioIn, false); makeConnection = kEngine->connectExternalGraphPort(kExternalGraphConnectionAudioIn2, otherPort, nullptr); break; case kExternalGraphCarlaPortAudioOut1: CARLA_SAFE_ASSERT_RETURN(otherGroup == kExternalGraphGroupAudioOut, false); makeConnection = kEngine->connectExternalGraphPort(kExternalGraphConnectionAudioOut1, otherPort, nullptr); break; case kExternalGraphCarlaPortAudioOut2: CARLA_SAFE_ASSERT_RETURN(otherGroup == kExternalGraphGroupAudioOut, false); makeConnection = kEngine->connectExternalGraphPort(kExternalGraphConnectionAudioOut2, otherPort, nullptr); break; case kExternalGraphCarlaPortMidiIn: CARLA_SAFE_ASSERT_RETURN(otherGroup == kExternalGraphGroupMidiIn, false); if (const char* const portName = midiPorts.getName(true, otherPort)) makeConnection = kEngine->connectExternalGraphPort(kExternalGraphConnectionMidiInput, 0, portName); break; case kExternalGraphCarlaPortMidiOut: CARLA_SAFE_ASSERT_RETURN(otherGroup == kExternalGraphGroupMidiOut, false); if (const char* const portName = midiPorts.getName(false, otherPort)) makeConnection = kEngine->connectExternalGraphPort(kExternalGraphConnectionMidiOutput, 0, portName); break; } if (! makeConnection) { kEngine->setLastError("Invalid rack connection"); return false; } ConnectionToId connectionToId; connectionToId.setData(++connections.lastId, groupA, portA, groupB, portB); char strBuf[STR_MAX+1]; strBuf[STR_MAX] = '\0'; std::snprintf(strBuf, STR_MAX, "%u:%u:%u:%u", groupA, portA, groupB, portB); kEngine->callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, connectionToId.id, 0, 0, 0, 0.0f, strBuf); connections.list.append(connectionToId); return true; } bool ExternalGraph::disconnect(const bool sendHost, const bool sendOSC, const uint connectionId) noexcept { CARLA_SAFE_ASSERT_RETURN(connections.list.count() > 0, false); for (LinkedList::Itenerator it=connections.list.begin2(); it.valid(); it.next()) { static const ConnectionToId fallback = { 0, 0, 0, 0, 0 }; const ConnectionToId& connectionToId(it.getValue(fallback)); CARLA_SAFE_ASSERT_CONTINUE(connectionToId.id > 0); if (connectionToId.id != connectionId) continue; uint otherGroup, otherPort, carlaPort; if (connectionToId.groupA == kExternalGraphGroupCarla) { CARLA_SAFE_ASSERT_RETURN(connectionToId.groupB != kExternalGraphGroupCarla, false); carlaPort = connectionToId.portA; otherGroup = connectionToId.groupB; otherPort = connectionToId.portB; } else { CARLA_SAFE_ASSERT_RETURN(connectionToId.groupB == kExternalGraphGroupCarla, false); carlaPort = connectionToId.portB; otherGroup = connectionToId.groupA; otherPort = connectionToId.portA; } CARLA_SAFE_ASSERT_RETURN(carlaPort > kExternalGraphCarlaPortNull && carlaPort < kExternalGraphCarlaPortMax, false); CARLA_SAFE_ASSERT_RETURN(otherGroup > kExternalGraphGroupCarla && otherGroup < kExternalGraphGroupMax, false); bool makeDisconnection = false; switch (carlaPort) { case kExternalGraphCarlaPortAudioIn1: makeDisconnection = kEngine->disconnectExternalGraphPort(kExternalGraphConnectionAudioIn1, otherPort, nullptr); break; case kExternalGraphCarlaPortAudioIn2: makeDisconnection = kEngine->disconnectExternalGraphPort(kExternalGraphConnectionAudioIn2, otherPort, nullptr); break; case kExternalGraphCarlaPortAudioOut1: makeDisconnection = kEngine->disconnectExternalGraphPort(kExternalGraphConnectionAudioOut1, otherPort, nullptr); break; case kExternalGraphCarlaPortAudioOut2: makeDisconnection = kEngine->disconnectExternalGraphPort(kExternalGraphConnectionAudioOut2, otherPort, nullptr); break; case kExternalGraphCarlaPortMidiIn: if (const char* const portName = midiPorts.getName(true, otherPort)) makeDisconnection = kEngine->disconnectExternalGraphPort(kExternalGraphConnectionMidiInput, 0, portName); break; case kExternalGraphCarlaPortMidiOut: if (const char* const portName = midiPorts.getName(false, otherPort)) makeDisconnection = kEngine->disconnectExternalGraphPort(kExternalGraphConnectionMidiOutput, 0, portName); break; } if (! makeDisconnection) { kEngine->setLastError("Invalid rack connection"); return false; } kEngine->callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_CONNECTION_REMOVED, connectionToId.id, 0, 0, 0, 0.0f, nullptr); connections.list.remove(it); return true; } kEngine->setLastError("Failed to find connection"); return false; } void ExternalGraph::setGroupPos(const bool sendHost, const bool sendOSC, const uint groupId, const int x1, const int y1, const int x2, const int y2) { CARLA_SAFE_ASSERT_UINT_RETURN(groupId >= kExternalGraphGroupCarla && groupId < kExternalGraphGroupMax, groupId,); const PatchbayPosition ppos = { true, x1, y1, x2, y2 }; positions[groupId] = ppos; kEngine->callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_CLIENT_POSITION_CHANGED, groupId, x1, y1, x2, static_cast(y2), nullptr); } void ExternalGraph::refresh(const bool sendHost, const bool sendOSC, const char* const deviceName) { CARLA_SAFE_ASSERT_RETURN(deviceName != nullptr,); const bool isRack = kEngine->getOptions().processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK; // Main { kEngine->callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, kExternalGraphGroupCarla, PATCHBAY_ICON_CARLA, MAIN_CARLA_PLUGIN_ID, 0, 0.0f, kEngine->getName()); if (isRack) { kEngine->callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, kExternalGraphGroupCarla, kExternalGraphCarlaPortAudioIn1, PATCHBAY_PORT_TYPE_AUDIO|PATCHBAY_PORT_IS_INPUT, 0, 0.0f, "audio-in1"); kEngine->callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, kExternalGraphGroupCarla, kExternalGraphCarlaPortAudioIn2, PATCHBAY_PORT_TYPE_AUDIO|PATCHBAY_PORT_IS_INPUT, 0, 0.0f, "audio-in2"); kEngine->callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, kExternalGraphGroupCarla, kExternalGraphCarlaPortAudioOut1, PATCHBAY_PORT_TYPE_AUDIO, 0, 0.0f, "audio-out1"); kEngine->callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, kExternalGraphGroupCarla, kExternalGraphCarlaPortAudioOut2, PATCHBAY_PORT_TYPE_AUDIO, 0, 0.0f, "audio-out2"); } kEngine->callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, kExternalGraphGroupCarla, kExternalGraphCarlaPortMidiIn, PATCHBAY_PORT_TYPE_MIDI|PATCHBAY_PORT_IS_INPUT, 0, 0.0f, "midi-in"); kEngine->callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, kExternalGraphGroupCarla, kExternalGraphCarlaPortMidiOut, PATCHBAY_PORT_TYPE_MIDI, 0, 0.0f, "midi-out"); } char strBuf[STR_MAX+1]; strBuf[STR_MAX] = '\0'; if (isRack) { // Audio In if (deviceName[0] != '\0') std::snprintf(strBuf, STR_MAX, "Capture (%s)", deviceName); else std::strncpy(strBuf, "Capture", STR_MAX); kEngine->callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, kExternalGraphGroupAudioIn, PATCHBAY_ICON_HARDWARE, -1, 0, 0.0f, strBuf); const CarlaString groupNameIn(strBuf); int h = 0; for (LinkedList::Itenerator it = audioPorts.ins.begin2(); it.valid(); it.next()) { PortNameToId& portNameToId(it.getValue(kPortNameToIdFallbackNC)); CARLA_SAFE_ASSERT_CONTINUE(portNameToId.group > 0); portNameToId.setFullName(groupNameIn + portNameToId.name); kEngine->callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, kExternalGraphGroupAudioIn, ++h, PATCHBAY_PORT_TYPE_AUDIO, 0, 0.0f, portNameToId.name); } // Audio Out if (deviceName[0] != '\0') std::snprintf(strBuf, STR_MAX, "Playback (%s)", deviceName); else std::strncpy(strBuf, "Playback", STR_MAX); kEngine->callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, kExternalGraphGroupAudioOut, PATCHBAY_ICON_HARDWARE, -1, 0, 0.0f, strBuf); const CarlaString groupNameOut(strBuf); h = 0; for (LinkedList::Itenerator it = audioPorts.outs.begin2(); it.valid(); it.next()) { PortNameToId& portNameToId(it.getValue(kPortNameToIdFallbackNC)); CARLA_SAFE_ASSERT_CONTINUE(portNameToId.group > 0); portNameToId.setFullName(groupNameOut + portNameToId.name); kEngine->callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, kExternalGraphGroupAudioOut, ++h, PATCHBAY_PORT_TYPE_AUDIO|PATCHBAY_PORT_IS_INPUT, 0, 0.0f, portNameToId.name); } } // MIDI In { kEngine->callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, kExternalGraphGroupMidiIn, PATCHBAY_ICON_HARDWARE, -1, 0, 0.0f, "Readable MIDI ports"); const CarlaString groupNamePlus("Readable MIDI ports:"); int h = 0; for (LinkedList::Itenerator it = midiPorts.ins.begin2(); it.valid(); it.next()) { PortNameToId& portNameToId(it.getValue(kPortNameToIdFallbackNC)); CARLA_SAFE_ASSERT_CONTINUE(portNameToId.group > 0); portNameToId.setFullName(groupNamePlus + portNameToId.name); kEngine->callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, kExternalGraphGroupMidiIn, ++h, PATCHBAY_PORT_TYPE_MIDI, 0, 0.0f, portNameToId.name); } } // MIDI Out { kEngine->callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, kExternalGraphGroupMidiOut, PATCHBAY_ICON_HARDWARE, -1, 0, 0.0f, "Writable MIDI ports"); const CarlaString groupNamePlus("Writable MIDI ports:"); int h = 0; for (LinkedList::Itenerator it = midiPorts.outs.begin2(); it.valid(); it.next()) { PortNameToId& portNameToId(it.getValue(kPortNameToIdFallbackNC)); CARLA_SAFE_ASSERT_CONTINUE(portNameToId.group > 0); portNameToId.setFullName(groupNamePlus + portNameToId.name); kEngine->callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, kExternalGraphGroupMidiOut, ++h, PATCHBAY_PORT_TYPE_MIDI|PATCHBAY_PORT_IS_INPUT, 0, 0.0f, portNameToId.name); } } } const char* const* ExternalGraph::getConnections() const noexcept { if (connections.list.count() == 0) return nullptr; CarlaStringList connList; char strBuf[STR_MAX+1]; strBuf[STR_MAX] = '\0'; for (LinkedList::Itenerator it=connections.list.begin2(); it.valid(); it.next()) { static const ConnectionToId fallback = { 0, 0, 0, 0, 0 }; const ConnectionToId& connectionToId(it.getValue(fallback)); CARLA_SAFE_ASSERT_CONTINUE(connectionToId.id > 0); uint otherGroup, otherPort, carlaPort; if (connectionToId.groupA == kExternalGraphGroupCarla) { CARLA_SAFE_ASSERT_CONTINUE(connectionToId.groupB != kExternalGraphGroupCarla); carlaPort = connectionToId.portA; otherGroup = connectionToId.groupB; otherPort = connectionToId.portB; } else { CARLA_SAFE_ASSERT_CONTINUE(connectionToId.groupB == kExternalGraphGroupCarla); carlaPort = connectionToId.portB; otherGroup = connectionToId.groupA; otherPort = connectionToId.portA; } CARLA_SAFE_ASSERT_CONTINUE(carlaPort > kExternalGraphCarlaPortNull && carlaPort < kExternalGraphCarlaPortMax); CARLA_SAFE_ASSERT_CONTINUE(otherGroup > kExternalGraphGroupCarla && otherGroup < kExternalGraphGroupMax); switch (carlaPort) { case kExternalGraphCarlaPortAudioIn1: case kExternalGraphCarlaPortAudioIn2: std::snprintf(strBuf, STR_MAX, "AudioIn:%s", audioPorts.getName(true, otherPort)); connList.append(strBuf); connList.append(getExternalGraphFullPortNameFromId(carlaPort)); break; case kExternalGraphCarlaPortAudioOut1: case kExternalGraphCarlaPortAudioOut2: std::snprintf(strBuf, STR_MAX, "AudioOut:%s", audioPorts.getName(false, otherPort)); connList.append(getExternalGraphFullPortNameFromId(carlaPort)); connList.append(strBuf); break; case kExternalGraphCarlaPortMidiIn: std::snprintf(strBuf, STR_MAX, "MidiIn:%s", midiPorts.getName(true, otherPort)); connList.append(strBuf); connList.append(getExternalGraphFullPortNameFromId(carlaPort)); break; case kExternalGraphCarlaPortMidiOut: std::snprintf(strBuf, STR_MAX, "MidiOut:%s", midiPorts.getName(false, otherPort)); connList.append(getExternalGraphFullPortNameFromId(carlaPort)); connList.append(strBuf); break; } } if (connList.count() == 0) return nullptr; retCon = connList.toCharStringListPtr(); return retCon; } bool ExternalGraph::getGroupFromName(const char* groupName, uint& groupId) const noexcept { CARLA_SAFE_ASSERT_RETURN(groupName != nullptr && groupName[0] != '\0', false); if (std::strcmp(groupName, "Carla") == 0) { groupId = kExternalGraphGroupCarla; return true; } if (std::strcmp(groupName, "AudioIn") == 0) { groupId = kExternalGraphGroupAudioIn; return true; } if (std::strcmp(groupName, "AudioOut") == 0) { groupId = kExternalGraphGroupAudioOut; return true; } if (std::strcmp(groupName, "MidiIn") == 0) { groupId = kExternalGraphGroupMidiIn; return true; } if (std::strcmp(groupName, "MidiOut") == 0) { groupId = kExternalGraphGroupMidiOut; return true; } return false; } bool ExternalGraph::getGroupAndPortIdFromFullName(const char* const fullPortName, uint& groupId, uint& portId) const noexcept { CARLA_SAFE_ASSERT_RETURN(fullPortName != nullptr && fullPortName[0] != '\0', false); if (std::strncmp(fullPortName, "Carla:", 6) == 0) { groupId = kExternalGraphGroupCarla; portId = getExternalGraphPortIdFromName(fullPortName+6); if (portId > kExternalGraphCarlaPortNull && portId < kExternalGraphCarlaPortMax) return true; } else if (std::strncmp(fullPortName, "AudioIn:", 8) == 0) { groupId = kExternalGraphGroupAudioIn; if (const char* const portName = fullPortName+8) { bool ok; portId = audioPorts.getPortId(true, portName, &ok); return ok; } } else if (std::strncmp(fullPortName, "AudioOut:", 9) == 0) { groupId = kExternalGraphGroupAudioOut; if (const char* const portName = fullPortName+9) { bool ok; portId = audioPorts.getPortId(false, portName, &ok); return ok; } } else if (std::strncmp(fullPortName, "MidiIn:", 7) == 0) { groupId = kExternalGraphGroupMidiIn; if (const char* const portName = fullPortName+7) { bool ok; portId = midiPorts.getPortId(true, portName, &ok); return ok; } } else if (std::strncmp(fullPortName, "MidiOut:", 8) == 0) { groupId = kExternalGraphGroupMidiOut; if (const char* const portName = fullPortName+8) { bool ok; portId = midiPorts.getPortId(false, portName, &ok); return ok; } } return false; } // ----------------------------------------------------------------------- // RackGraph Buffers RackGraph::Buffers::Buffers() noexcept : mutex(), connectedIn1(), connectedIn2(), connectedOut1(), connectedOut2(), #ifdef CARLA_PROPER_CPP11_SUPPORT inBuf{nullptr, nullptr}, inBufTmp{nullptr, nullptr}, outBuf{nullptr, nullptr}, #endif unusedBuf(nullptr) { #ifndef CARLA_PROPER_CPP11_SUPPORT inBuf[0] = inBuf[1] = nullptr; inBufTmp[0] = inBufTmp[1] = nullptr; outBuf[0] = outBuf[1] = nullptr; #endif } RackGraph::Buffers::~Buffers() noexcept { const CarlaRecursiveMutexLocker cml(mutex); if (inBuf[0] != nullptr) { delete[] inBuf[0]; inBuf[0] = nullptr; } if (inBuf[1] != nullptr) { delete[] inBuf[1]; inBuf[1] = nullptr; } if (inBufTmp[0] != nullptr) { delete[] inBufTmp[0]; inBufTmp[0] = nullptr; } if (inBufTmp[1] != nullptr) { delete[] inBufTmp[1]; inBufTmp[1] = nullptr; } if (outBuf[0] != nullptr) { delete[] outBuf[0]; outBuf[0] = nullptr; } if (outBuf[1] != nullptr) { delete[] outBuf[1]; outBuf[1] = nullptr; } if (unusedBuf != nullptr) { delete[] unusedBuf; unusedBuf = nullptr; } connectedIn1.clear(); connectedIn2.clear(); connectedOut1.clear(); connectedOut2.clear(); } void RackGraph::Buffers::setBufferSize(const uint32_t bufferSize, const bool createBuffers) noexcept { const CarlaRecursiveMutexLocker cml(mutex); if (inBuf[0] != nullptr) { delete[] inBuf[0]; inBuf[0] = nullptr; } if (inBuf[1] != nullptr) { delete[] inBuf[1]; inBuf[1] = nullptr; } if (inBufTmp[0] != nullptr) { delete[] inBufTmp[0]; inBufTmp[0] = nullptr; } if (inBufTmp[1] != nullptr) { delete[] inBufTmp[1]; inBufTmp[1] = nullptr; } if (outBuf[0] != nullptr) { delete[] outBuf[0]; outBuf[0] = nullptr; } if (outBuf[1] != nullptr) { delete[] outBuf[1]; outBuf[1] = nullptr; } if (unusedBuf != nullptr) { delete[] unusedBuf; unusedBuf = nullptr; } CARLA_SAFE_ASSERT_RETURN(bufferSize > 0,); try { inBufTmp[0] = new float[bufferSize]; inBufTmp[1] = new float[bufferSize]; unusedBuf = new float[bufferSize]; if (createBuffers) { inBuf[0] = new float[bufferSize]; inBuf[1] = new float[bufferSize]; outBuf[0] = new float[bufferSize]; outBuf[1] = new float[bufferSize]; } } catch(...) { if (inBufTmp[0] != nullptr) { delete[] inBufTmp[0]; inBufTmp[0] = nullptr; } if (inBufTmp[1] != nullptr) { delete[] inBufTmp[1]; inBufTmp[1] = nullptr; } if (unusedBuf != nullptr) { delete[] unusedBuf; unusedBuf = nullptr; } if (createBuffers) { if (inBuf[0] != nullptr) { delete[] inBuf[0]; inBuf[0] = nullptr; } if (inBuf[1] != nullptr) { delete[] inBuf[1]; inBuf[1] = nullptr; } if (outBuf[0] != nullptr) { delete[] outBuf[0]; outBuf[0] = nullptr; } if (outBuf[1] != nullptr) { delete[] outBuf[1]; outBuf[1] = nullptr; } } return; } carla_zeroFloats(inBufTmp[0], bufferSize); carla_zeroFloats(inBufTmp[1], bufferSize); if (createBuffers) { carla_zeroFloats(inBuf[0], bufferSize); carla_zeroFloats(inBuf[1], bufferSize); carla_zeroFloats(outBuf[0], bufferSize); carla_zeroFloats(outBuf[1], bufferSize); } } // ----------------------------------------------------------------------- // RackGraph RackGraph::RackGraph(CarlaEngine* const engine, const uint32_t ins, const uint32_t outs) noexcept : extGraph(engine), inputs(ins), outputs(outs), isOffline(false), audioBuffers(), kEngine(engine) { setBufferSize(engine->getBufferSize()); } RackGraph::~RackGraph() noexcept { extGraph.clear(); } void RackGraph::setBufferSize(const uint32_t bufferSize) noexcept { audioBuffers.setBufferSize(bufferSize, (inputs > 0 || outputs > 0)); } void RackGraph::setOffline(const bool offline) noexcept { isOffline = offline; } bool RackGraph::connect(const uint groupA, const uint portA, const uint groupB, const uint portB) noexcept { return extGraph.connect(true, true, groupA, portA, groupB, portB); } bool RackGraph::disconnect(const uint connectionId) noexcept { return extGraph.disconnect(true, true, connectionId); } void RackGraph::refresh(const bool sendHost, const bool sendOSC, const bool, const char* const deviceName) { extGraph.refresh(sendHost, sendOSC, deviceName); char strBuf[STR_MAX+1]; strBuf[STR_MAX] = '\0'; // Connections const CarlaRecursiveMutexLocker cml(audioBuffers.mutex); for (LinkedList::Itenerator it = audioBuffers.connectedIn1.begin2(); it.valid(); it.next()) { const uint& portId(it.getValue(0)); CARLA_SAFE_ASSERT_CONTINUE(portId > 0); CARLA_SAFE_ASSERT_CONTINUE(portId <= extGraph.audioPorts.ins.count()); ConnectionToId connectionToId; connectionToId.setData(++(extGraph.connections.lastId), kExternalGraphGroupAudioIn, portId, kExternalGraphGroupCarla, kExternalGraphCarlaPortAudioIn1); std::snprintf(strBuf, STR_MAX, "%i:%i:%i:%i", connectionToId.groupA, connectionToId.portA, connectionToId.groupB, connectionToId.portB); kEngine->callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, connectionToId.id, 0, 0, 0, 0.0f, strBuf); extGraph.connections.list.append(connectionToId); } for (LinkedList::Itenerator it = audioBuffers.connectedIn2.begin2(); it.valid(); it.next()) { const uint& portId(it.getValue(0)); CARLA_SAFE_ASSERT_CONTINUE(portId > 0); CARLA_SAFE_ASSERT_CONTINUE(portId <= extGraph.audioPorts.ins.count()); ConnectionToId connectionToId; connectionToId.setData(++(extGraph.connections.lastId), kExternalGraphGroupAudioIn, portId, kExternalGraphGroupCarla, kExternalGraphCarlaPortAudioIn2); std::snprintf(strBuf, STR_MAX, "%i:%i:%i:%i", connectionToId.groupA, connectionToId.portA, connectionToId.groupB, connectionToId.portB); kEngine->callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, connectionToId.id, 0, 0, 0, 0.0f, strBuf); extGraph.connections.list.append(connectionToId); } for (LinkedList::Itenerator it = audioBuffers.connectedOut1.begin2(); it.valid(); it.next()) { const uint& portId(it.getValue(0)); CARLA_SAFE_ASSERT_CONTINUE(portId > 0); CARLA_SAFE_ASSERT_CONTINUE(portId <= extGraph.audioPorts.outs.count()); ConnectionToId connectionToId; connectionToId.setData(++(extGraph.connections.lastId), kExternalGraphGroupCarla, kExternalGraphCarlaPortAudioOut1, kExternalGraphGroupAudioOut, portId); std::snprintf(strBuf, STR_MAX, "%i:%i:%i:%i", connectionToId.groupA, connectionToId.portA, connectionToId.groupB, connectionToId.portB); kEngine->callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, connectionToId.id, 0, 0, 0, 0.0f, strBuf); extGraph.connections.list.append(connectionToId); } for (LinkedList::Itenerator it = audioBuffers.connectedOut2.begin2(); it.valid(); it.next()) { const uint& portId(it.getValue(0)); CARLA_SAFE_ASSERT_CONTINUE(portId > 0); CARLA_SAFE_ASSERT_CONTINUE(portId <= extGraph.audioPorts.outs.count()); ConnectionToId connectionToId; connectionToId.setData(++(extGraph.connections.lastId), kExternalGraphGroupCarla, kExternalGraphCarlaPortAudioOut2, kExternalGraphGroupAudioOut, portId); std::snprintf(strBuf, STR_MAX, "%i:%i:%i:%i", connectionToId.groupA, connectionToId.portA, connectionToId.groupB, connectionToId.portB); kEngine->callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, connectionToId.id, 0, 0, 0, 0.0f, strBuf); extGraph.connections.list.append(connectionToId); } } const char* const* RackGraph::getConnections() const noexcept { return extGraph.getConnections(); } bool RackGraph::getGroupAndPortIdFromFullName(const char* const fullPortName, uint& groupId, uint& portId) const noexcept { return extGraph.getGroupAndPortIdFromFullName(fullPortName, groupId, portId); } void RackGraph::process(CarlaEngine::ProtectedData* const data, const float* inBufReal[2], float* outBufReal[2], const uint32_t frames) { CARLA_SAFE_ASSERT_RETURN(data != nullptr,); CARLA_SAFE_ASSERT_RETURN(data->events.in != nullptr,); CARLA_SAFE_ASSERT_RETURN(data->events.out != nullptr,); // safe copy float* const dummyBuf = audioBuffers.unusedBuf; float* const inBuf0 = audioBuffers.inBufTmp[0]; float* const inBuf1 = audioBuffers.inBufTmp[1]; // initialize audio inputs carla_copyFloats(inBuf0, inBufReal[0], frames); carla_copyFloats(inBuf1, inBufReal[1], frames); // initialize audio outputs (zero) carla_zeroFloats(outBufReal[0], frames); carla_zeroFloats(outBufReal[1], frames); // initialize event outputs (zero) carla_zeroStructs(data->events.out, kMaxEngineEventInternalCount); uint32_t oldAudioInCount = 0; uint32_t oldAudioOutCount = 0; uint32_t oldMidiOutCount = 0; bool processed = false; // process plugins for (uint i=0; i < data->curPluginCount; ++i) { const CarlaPluginPtr plugin = data->plugins[i].plugin; if (plugin.get() == nullptr || ! plugin->isEnabled() || ! plugin->tryLock(isOffline)) continue; if (processed) { // initialize audio inputs (from previous outputs) carla_copyFloats(inBuf0, outBufReal[0], frames); carla_copyFloats(inBuf1, outBufReal[1], frames); // initialize audio outputs (zero) carla_zeroFloats(outBufReal[0], frames); carla_zeroFloats(outBufReal[1], frames); // if plugin has no midi out, add previous events if (oldMidiOutCount == 0 && data->events.in[0].type != kEngineEventTypeNull) { if (data->events.out[0].type != kEngineEventTypeNull) { // TODO: carefully add to input, sorted events //carla_stderr("TODO midi event mixing here %s", plugin->getName()); } // else nothing needed } else { // initialize event inputs from previous outputs carla_copyStructs(data->events.in, data->events.out, kMaxEngineEventInternalCount); // initialize event outputs (zero) carla_zeroStructs(data->events.out, kMaxEngineEventInternalCount); } } oldAudioInCount = plugin->getAudioInCount(); oldAudioOutCount = plugin->getAudioOutCount(); oldMidiOutCount = plugin->getMidiOutCount(); const uint32_t numInBufs = std::max(oldAudioInCount, 2U); const uint32_t numOutBufs = std::max(oldAudioOutCount, 2U); const uint32_t numCvBufs = std::max(plugin->getCVInCount(), plugin->getCVOutCount()); const float* inBuf[numInBufs]; inBuf[0] = inBuf0; inBuf[1] = inBuf1; float* outBuf[numOutBufs]; outBuf[0] = outBufReal[0]; outBuf[1] = outBufReal[1]; float* cvBuf[numCvBufs]; for (uint32_t j=0; j 2 || numOutBufs > 2 || numCvBufs != 0) { carla_zeroFloats(dummyBuf, frames); for (uint32_t j=2; jinitBuffers(); plugin->process(inBuf, outBuf, cvBuf, cvBuf, frames); plugin->unlock(); // if plugin has no audio inputs, add input buffer if (oldAudioInCount == 0) { carla_addFloats(outBufReal[0], inBuf0, frames); carla_addFloats(outBufReal[1], inBuf1, frames); } // if plugin only has 1 output, copy it to the 2nd if (oldAudioOutCount == 1) { carla_copyFloats(outBufReal[1], outBufReal[0], frames); } // set peaks { EnginePluginData& pluginData(data->plugins[i]); if (oldAudioInCount > 0) { pluginData.peaks[0] = carla_findMaxNormalizedFloat(inBuf0, frames); pluginData.peaks[1] = carla_findMaxNormalizedFloat(inBuf1, frames); } else { pluginData.peaks[0] = 0.0f; pluginData.peaks[1] = 0.0f; } if (oldAudioOutCount > 0) { pluginData.peaks[2] = carla_findMaxNormalizedFloat(outBufReal[0], frames); pluginData.peaks[3] = carla_findMaxNormalizedFloat(outBufReal[1], frames); } else { pluginData.peaks[2] = 0.0f; pluginData.peaks[3] = 0.0f; } } processed = true; } } void RackGraph::processHelper(CarlaEngine::ProtectedData* const data, const float* const* const inBuf, float* const* const outBuf, const uint32_t frames) { CARLA_SAFE_ASSERT_RETURN(audioBuffers.outBuf[1] != nullptr,); const CarlaRecursiveMutexLocker _cml(audioBuffers.mutex); if (inBuf != nullptr && inputs > 0) { bool noConnections = true; // connect input buffers for (LinkedList::Itenerator it = audioBuffers.connectedIn1.begin2(); it.valid(); it.next()) { const uint& port(it.getValue(0)); CARLA_SAFE_ASSERT_CONTINUE(port > 0); CARLA_SAFE_ASSERT_CONTINUE(port <= inputs); if (noConnections) { carla_copyFloats(audioBuffers.inBuf[0], inBuf[port], frames); noConnections = false; } else { carla_addFloats(audioBuffers.inBuf[0], inBuf[port], frames); } } if (noConnections) carla_zeroFloats(audioBuffers.inBuf[0], frames); noConnections = true; for (LinkedList::Itenerator it = audioBuffers.connectedIn2.begin2(); it.valid(); it.next()) { const uint& port(it.getValue(0)); CARLA_SAFE_ASSERT_CONTINUE(port > 0); CARLA_SAFE_ASSERT_CONTINUE(port <= inputs); if (noConnections) { carla_copyFloats(audioBuffers.inBuf[1], inBuf[port-1], frames); noConnections = false; } else { carla_addFloats(audioBuffers.inBuf[1], inBuf[port-1], frames); } } if (noConnections) carla_zeroFloats(audioBuffers.inBuf[1], frames); } else { carla_zeroFloats(audioBuffers.inBuf[0], frames); carla_zeroFloats(audioBuffers.inBuf[1], frames); } carla_zeroFloats(audioBuffers.outBuf[0], frames); carla_zeroFloats(audioBuffers.outBuf[1], frames); // process process(data, const_cast(audioBuffers.inBuf), audioBuffers.outBuf, frames); // connect output buffers if (audioBuffers.connectedOut1.count() != 0) { for (LinkedList::Itenerator it = audioBuffers.connectedOut1.begin2(); it.valid(); it.next()) { const uint& port(it.getValue(0)); CARLA_SAFE_ASSERT_CONTINUE(port > 0); CARLA_SAFE_ASSERT_CONTINUE(port <= outputs); carla_addFloats(outBuf[port-1], audioBuffers.outBuf[0], frames); } } if (audioBuffers.connectedOut2.count() != 0) { for (LinkedList::Itenerator it = audioBuffers.connectedOut2.begin2(); it.valid(); it.next()) { const uint& port(it.getValue(0)); CARLA_SAFE_ASSERT_CONTINUE(port > 0); CARLA_SAFE_ASSERT_CONTINUE(port <= outputs); carla_addFloats(outBuf[port-1], audioBuffers.outBuf[1], frames); } } } // ----------------------------------------------------------------------- // Patchbay Graph stuff static const uint32_t kMaxPortsPerPlugin = 255; static const uint32_t kAudioInputPortOffset = kMaxPortsPerPlugin*1; static const uint32_t kAudioOutputPortOffset = kMaxPortsPerPlugin*2; static const uint32_t kCVInputPortOffset = kMaxPortsPerPlugin*3; static const uint32_t kCVOutputPortOffset = kMaxPortsPerPlugin*4; static const uint32_t kMidiInputPortOffset = kMaxPortsPerPlugin*5; static const uint32_t kMidiOutputPortOffset = kMaxPortsPerPlugin*6; static const uint32_t kMaxPortOffset = kMaxPortsPerPlugin*7; static inline bool adjustPatchbayPortIdForWater(AudioProcessor::ChannelType& channelType, uint& portId) { CARLA_SAFE_ASSERT_RETURN(portId >= kAudioInputPortOffset, false); CARLA_SAFE_ASSERT_RETURN(portId < kMaxPortOffset, false); if (portId >= kMidiOutputPortOffset) { portId -= kMidiOutputPortOffset; channelType = AudioProcessor::ChannelTypeMIDI; return true; } if (portId >= kMidiInputPortOffset) { portId -= kMidiInputPortOffset; channelType = AudioProcessor::ChannelTypeMIDI; return true; } if (portId >= kCVOutputPortOffset) { portId -= kCVOutputPortOffset; channelType = AudioProcessor::ChannelTypeCV; return true; } if (portId >= kCVInputPortOffset) { portId -= kCVInputPortOffset; channelType = AudioProcessor::ChannelTypeCV; return true; } if (portId >= kAudioOutputPortOffset) { portId -= kAudioOutputPortOffset; channelType = AudioProcessor::ChannelTypeAudio; return true; } if (portId >= kAudioInputPortOffset) { portId -= kAudioInputPortOffset; channelType = AudioProcessor::ChannelTypeAudio; return true; } return false; } static inline const String getProcessorFullPortName(AudioProcessor* const proc, const uint32_t portId) { CARLA_SAFE_ASSERT_RETURN(proc != nullptr, String()); CARLA_SAFE_ASSERT_RETURN(portId >= kAudioInputPortOffset, String()); CARLA_SAFE_ASSERT_RETURN(portId < kMaxPortOffset, String()); String fullPortName(proc->getName()); /**/ if (portId >= kMidiOutputPortOffset) { CARLA_SAFE_ASSERT_RETURN(proc->getTotalNumOutputChannels(AudioProcessor::ChannelTypeMIDI) > 0, String()); fullPortName += ":" + proc->getOutputChannelName(AudioProcessor::ChannelTypeMIDI, portId-kMidiOutputPortOffset); } else if (portId >= kMidiInputPortOffset) { CARLA_SAFE_ASSERT_RETURN(proc->getTotalNumInputChannels(AudioProcessor::ChannelTypeMIDI) > 0, String()); fullPortName += ":" + proc->getInputChannelName(AudioProcessor::ChannelTypeMIDI, portId-kMidiInputPortOffset); } else if (portId >= kCVOutputPortOffset) { CARLA_SAFE_ASSERT_RETURN(proc->getTotalNumOutputChannels(AudioProcessor::ChannelTypeCV) > 0, String()); fullPortName += ":" + proc->getOutputChannelName(AudioProcessor::ChannelTypeCV, portId-kCVOutputPortOffset); } else if (portId >= kCVInputPortOffset) { CARLA_SAFE_ASSERT_RETURN(proc->getTotalNumInputChannels(AudioProcessor::ChannelTypeCV) > 0, String()); fullPortName += ":" + proc->getInputChannelName(AudioProcessor::ChannelTypeCV, portId-kCVInputPortOffset); } else if (portId >= kAudioOutputPortOffset) { CARLA_SAFE_ASSERT_RETURN(proc->getTotalNumOutputChannels(AudioProcessor::ChannelTypeAudio) > 0, String()); fullPortName += ":" + proc->getOutputChannelName(AudioProcessor::ChannelTypeAudio, portId-kAudioOutputPortOffset); } else if (portId >= kAudioInputPortOffset) { CARLA_SAFE_ASSERT_RETURN(proc->getTotalNumInputChannels(AudioProcessor::ChannelTypeAudio) > 0, String()); fullPortName += ":" + proc->getInputChannelName(AudioProcessor::ChannelTypeAudio, portId-kAudioInputPortOffset); } else { return String(); } return fullPortName; } static inline void addNodeToPatchbay(const bool sendHost, const bool sendOSC, CarlaEngine* const engine, AudioProcessorGraph::Node* const node, const int pluginId, const AudioProcessor* const proc) { CARLA_SAFE_ASSERT_RETURN(engine != nullptr,); CARLA_SAFE_ASSERT_RETURN(node != nullptr,); CARLA_SAFE_ASSERT_RETURN(proc != nullptr,); const uint groupId = node->nodeId; engine->callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, groupId, pluginId >= 0 ? PATCHBAY_ICON_PLUGIN : PATCHBAY_ICON_HARDWARE, pluginId, 0, 0.0f, proc->getName().toRawUTF8()); for (uint i=0, numInputs=proc->getTotalNumInputChannels(AudioProcessor::ChannelTypeAudio); icallback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, groupId, static_cast(kAudioInputPortOffset+i), PATCHBAY_PORT_TYPE_AUDIO|PATCHBAY_PORT_IS_INPUT, 0, 0.0f, proc->getInputChannelName(AudioProcessor::ChannelTypeAudio, i).toRawUTF8()); } for (uint i=0, numOutputs=proc->getTotalNumOutputChannels(AudioProcessor::ChannelTypeAudio); icallback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, groupId, static_cast(kAudioOutputPortOffset+i), PATCHBAY_PORT_TYPE_AUDIO, 0, 0.0f, proc->getOutputChannelName(AudioProcessor::ChannelTypeAudio, i).toRawUTF8()); } for (uint i=0, numInputs=proc->getTotalNumInputChannels(AudioProcessor::ChannelTypeCV); icallback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, groupId, static_cast(kCVInputPortOffset+i), PATCHBAY_PORT_TYPE_CV|PATCHBAY_PORT_IS_INPUT, 0, 0.0f, proc->getInputChannelName(AudioProcessor::ChannelTypeCV, i).toRawUTF8()); } for (uint i=0, numOutputs=proc->getTotalNumOutputChannels(AudioProcessor::ChannelTypeCV); icallback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, groupId, static_cast(kCVOutputPortOffset+i), PATCHBAY_PORT_TYPE_CV, 0, 0.0f, proc->getOutputChannelName(AudioProcessor::ChannelTypeCV, i).toRawUTF8()); } for (uint i=0, numInputs=proc->getTotalNumInputChannels(AudioProcessor::ChannelTypeMIDI); icallback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, groupId, static_cast(kMidiInputPortOffset+i), PATCHBAY_PORT_TYPE_MIDI|PATCHBAY_PORT_IS_INPUT, 0, 0.0f, proc->getInputChannelName(AudioProcessor::ChannelTypeMIDI, i).toRawUTF8()); } for (uint i=0, numOutputs=proc->getTotalNumOutputChannels(AudioProcessor::ChannelTypeMIDI); icallback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, groupId, static_cast(kMidiOutputPortOffset+i), PATCHBAY_PORT_TYPE_MIDI, 0, 0.0f, proc->getOutputChannelName(AudioProcessor::ChannelTypeMIDI, i).toRawUTF8()); } if (node->properties.contains("x1")) { engine->callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_CLIENT_POSITION_CHANGED, groupId, node->properties.getWithDefault("x1", 0), node->properties.getWithDefault("y1", 0), node->properties.getWithDefault("x2", 0), static_cast(node->properties.getWithDefault("y2", 0)), nullptr); } } static inline void removeNodeFromPatchbay(const bool sendHost, const bool sendOSC, CarlaEngine* const engine, const uint32_t groupId, const AudioProcessor* const proc) { CARLA_SAFE_ASSERT_RETURN(engine != nullptr,); CARLA_SAFE_ASSERT_RETURN(proc != nullptr,); for (uint i=0, numInputs=proc->getTotalNumInputChannels(AudioProcessor::ChannelTypeAudio); icallback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_PORT_REMOVED, groupId, static_cast(kAudioInputPortOffset+i), 0, 0, 0.0f, nullptr); } for (uint i=0, numOutputs=proc->getTotalNumOutputChannels(AudioProcessor::ChannelTypeAudio); icallback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_PORT_REMOVED, groupId, static_cast(kAudioOutputPortOffset+i), 0, 0, 0.0f, nullptr); } for (uint i=0, numInputs=proc->getTotalNumInputChannels(AudioProcessor::ChannelTypeCV); icallback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_PORT_REMOVED, groupId, static_cast(kCVInputPortOffset+i), 0, 0, 0.0f, nullptr); } for (uint i=0, numOutputs=proc->getTotalNumOutputChannels(AudioProcessor::ChannelTypeCV); icallback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_PORT_REMOVED, groupId, static_cast(kCVOutputPortOffset+i), 0, 0, 0.0f, nullptr); } for (uint i=0, numInputs=proc->getTotalNumInputChannels(AudioProcessor::ChannelTypeMIDI); icallback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_PORT_REMOVED, groupId, static_cast(kMidiInputPortOffset+i), 0, 0, 0.0f, nullptr); } for (uint i=0, numOutputs=proc->getTotalNumOutputChannels(AudioProcessor::ChannelTypeMIDI); icallback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_PORT_REMOVED, groupId, static_cast(kMidiOutputPortOffset+i), 0, 0, 0.0f, nullptr); } engine->callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_CLIENT_REMOVED, groupId, 0, 0, 0, 0.0f, nullptr); } // ----------------------------------------------------------------------- class CarlaPluginInstance : public AudioProcessor { public: CarlaPluginInstance(CarlaEngine* const engine, const CarlaPluginPtr plugin) : kEngine(engine), fPlugin(plugin) { CarlaEngineClient* const client = plugin->getEngineClient(); setPlayConfigDetails(client->getPortCount(kEnginePortTypeAudio, true), client->getPortCount(kEnginePortTypeAudio, false), client->getPortCount(kEnginePortTypeCV, true), client->getPortCount(kEnginePortTypeCV, false), client->getPortCount(kEnginePortTypeEvent, true), client->getPortCount(kEnginePortTypeEvent, false), getSampleRate(), getBlockSize()); } ~CarlaPluginInstance() override { } void reconfigure() override { CARLA_SAFE_ASSERT_RETURN(fPlugin.get() != nullptr,); CarlaEngineClient* const client = fPlugin->getEngineClient(); CARLA_SAFE_ASSERT_RETURN(client != nullptr,); carla_stdout("reconfigure called"); setPlayConfigDetails(client->getPortCount(kEnginePortTypeAudio, true), client->getPortCount(kEnginePortTypeAudio, false), client->getPortCount(kEnginePortTypeCV, true), client->getPortCount(kEnginePortTypeCV, false), client->getPortCount(kEnginePortTypeEvent, true), client->getPortCount(kEnginePortTypeEvent, false), getSampleRate(), getBlockSize()); } void invalidatePlugin() noexcept { fPlugin.reset(); } // ------------------------------------------------------------------- const String getName() const override { return fPlugin->getName(); } void processBlockWithCV(AudioSampleBuffer& audio, const AudioSampleBuffer& cvIn, AudioSampleBuffer& cvOut, MidiBuffer& midi) override { if (fPlugin.get() == nullptr || ! fPlugin->isEnabled() || ! fPlugin->tryLock(kEngine->isOffline())) { audio.clear(); cvOut.clear(); midi.clear(); return; } if (CarlaEngineEventPort* const port = fPlugin->getDefaultEventInPort()) { EngineEvent* const engineEvents(port->fBuffer); CARLA_SAFE_ASSERT_RETURN(engineEvents != nullptr,); carla_zeroStructs(engineEvents, kMaxEngineEventInternalCount); fillEngineEventsFromWaterMidiBuffer(engineEvents, midi); } midi.clear(); fPlugin->initBuffers(); const uint32_t numSamples = audio.getNumSamples(); const uint32_t numAudioChan = audio.getNumChannels(); const uint32_t numCVInChan = cvIn.getNumChannels(); const uint32_t numCVOutChan = cvOut.getNumChannels(); if (numAudioChan+numCVInChan+numCVOutChan == 0) { // nothing to process fPlugin->process(nullptr, nullptr, nullptr, nullptr, numSamples); } else if (numAudioChan != 0) { // processing audio, include code for peaks const uint32_t numChan2 = jmin(numAudioChan, 2U); if (fPlugin->getAudioInCount() == 0) audio.clear(); float* audioBuffers[numAudioChan]; float* cvOutBuffers[numCVOutChan]; const float* cvInBuffers[numCVInChan]; for (uint32_t i=0; igetAudioInCount(), numChan2); iprocess(const_cast(audioBuffers), audioBuffers, cvInBuffers, cvOutBuffers, numSamples); for (uint32_t i=0, count=jmin(fPlugin->getAudioOutCount(), numChan2); isetPluginPeaksRT(fPlugin->getId(), inPeaks, outPeaks); } else { // processing CV only, skip audiopeaks float* cvOutBuffers[numCVOutChan]; const float* cvInBuffers[numCVInChan]; for (uint32_t i=0; iprocess(nullptr, nullptr, cvInBuffers, cvOutBuffers, numSamples); } midi.clear(); if (CarlaEngineEventPort* const port = fPlugin->getDefaultEventOutPort()) { /*const*/ EngineEvent* const engineEvents(port->fBuffer); CARLA_SAFE_ASSERT_RETURN(engineEvents != nullptr,); fillWaterMidiBufferFromEngineEvents(midi, engineEvents); carla_zeroStructs(engineEvents, kMaxEngineEventInternalCount); } fPlugin->unlock(); } const String getInputChannelName(ChannelType t, uint i) const override { CarlaEngineClient* const client = fPlugin->getEngineClient(); switch (t) { case ChannelTypeAudio: return client->getAudioPortName(true, i); case ChannelTypeCV: return client->getCVPortName(true, i); case ChannelTypeMIDI: return client->getEventPortName(true, i); } return String(); } const String getOutputChannelName(ChannelType t, uint i) const override { CarlaEngineClient* const client(fPlugin->getEngineClient()); switch (t) { case ChannelTypeAudio: return client->getAudioPortName(false, i); case ChannelTypeCV: return client->getCVPortName(false, i); case ChannelTypeMIDI: return client->getEventPortName(false, i); } return String(); } void prepareToPlay(double, int) override {} void releaseResources() override {} bool acceptsMidi() const override { return fPlugin->getDefaultEventInPort() != nullptr; } bool producesMidi() const override { return fPlugin->getDefaultEventOutPort() != nullptr; } private: CarlaEngine* const kEngine; CarlaPluginPtr fPlugin; CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaPluginInstance) }; // ----------------------------------------------------------------------- // Patchbay Graph class NamedAudioGraphIOProcessor : public AudioProcessorGraph::AudioGraphIOProcessor { public: NamedAudioGraphIOProcessor(const IODeviceType iotype) : AudioProcessorGraph::AudioGraphIOProcessor(iotype), inputNames(), outputNames() {} const String getInputChannelName (ChannelType, uint _index) const override { const int index = static_cast(_index); // FIXME if (index < inputNames.size()) return inputNames[index]; return String("Playback ") + String(index+1); } const String getOutputChannelName (ChannelType, uint _index) const override { const int index = static_cast(_index); // FIXME if (index < outputNames.size()) return outputNames[index]; return String("Capture ") + String(index+1); } void setNames(const bool setInputNames, const StringArray& names) { if (setInputNames) inputNames = names; else outputNames = names; } private: StringArray inputNames; StringArray outputNames; }; PatchbayGraph::PatchbayGraph(CarlaEngine* const engine, const uint32_t audioIns, const uint32_t audioOuts, const uint32_t cvIns, const uint32_t cvOuts) : CarlaThread("PatchbayReorderThread"), connections(), graph(), audioBuffer(), cvInBuffer(), cvOutBuffer(), midiBuffer(), numAudioIns(carla_fixedValue(0U, 64U, audioIns)), numAudioOuts(carla_fixedValue(0U, 64U, audioOuts)), numCVIns(carla_fixedValue(0U, 32U, cvIns)), numCVOuts(carla_fixedValue(0U, 32U, cvOuts)), retCon(), usingExternalHost(false), usingExternalOSC(false), extGraph(engine), kEngine(engine) { const uint32_t bufferSize(engine->getBufferSize()); const double sampleRate(engine->getSampleRate()); graph.setPlayConfigDetails(numAudioIns, numAudioOuts, numCVIns, numCVOuts, 1, 1, sampleRate, static_cast(bufferSize)); graph.prepareToPlay(sampleRate, static_cast(bufferSize)); audioBuffer.setSize(jmax(numAudioIns, numAudioOuts), bufferSize); cvInBuffer.setSize(numCVIns, bufferSize); cvOutBuffer.setSize(numCVOuts, bufferSize); midiBuffer.ensureSize(kMaxEngineEventInternalCount*2); midiBuffer.clear(); StringArray channelNames; switch (numAudioIns) { case 2: channelNames.add("Left"); channelNames.add("Right"); break; case 3: channelNames.add("Left"); channelNames.add("Right"); channelNames.add("Sidechain"); break; } if (numAudioIns != 0) { NamedAudioGraphIOProcessor* const proc( new NamedAudioGraphIOProcessor(NamedAudioGraphIOProcessor::audioInputNode)); proc->setNames(false, channelNames); AudioProcessorGraph::Node* const node(graph.addNode(proc)); node->properties.set("isPlugin", false); node->properties.set("isOutput", false); node->properties.set("isAudio", true); node->properties.set("isCV", false); node->properties.set("isMIDI", false); node->properties.set("isOSC", false); } if (numAudioOuts != 0) { NamedAudioGraphIOProcessor* const proc( new NamedAudioGraphIOProcessor(NamedAudioGraphIOProcessor::audioOutputNode)); proc->setNames(true, channelNames); AudioProcessorGraph::Node* const node(graph.addNode(proc)); node->properties.set("isPlugin", false); node->properties.set("isOutput", false); node->properties.set("isAudio", true); node->properties.set("isCV", false); node->properties.set("isMIDI", false); node->properties.set("isOSC", false); } if (numCVIns != 0) { NamedAudioGraphIOProcessor* const proc( new NamedAudioGraphIOProcessor(NamedAudioGraphIOProcessor::cvInputNode)); // proc->setNames(false, channelNames); AudioProcessorGraph::Node* const node(graph.addNode(proc)); node->properties.set("isPlugin", false); node->properties.set("isOutput", false); node->properties.set("isAudio", false); node->properties.set("isCV", true); node->properties.set("isMIDI", false); node->properties.set("isOSC", false); } if (numCVOuts != 0) { NamedAudioGraphIOProcessor* const proc( new NamedAudioGraphIOProcessor(NamedAudioGraphIOProcessor::cvOutputNode)); // proc->setNames(true, channelNames); AudioProcessorGraph::Node* const node(graph.addNode(proc)); node->properties.set("isPlugin", false); node->properties.set("isOutput", false); node->properties.set("isAudio", false); node->properties.set("isCV", true); node->properties.set("isMIDI", false); node->properties.set("isOSC", false); } { NamedAudioGraphIOProcessor* const proc( new NamedAudioGraphIOProcessor(NamedAudioGraphIOProcessor::midiInputNode)); AudioProcessorGraph::Node* const node(graph.addNode(proc)); node->properties.set("isPlugin", false); node->properties.set("isOutput", false); node->properties.set("isAudio", false); node->properties.set("isCV", false); node->properties.set("isMIDI", true); node->properties.set("isOSC", false); } { NamedAudioGraphIOProcessor* const proc( new NamedAudioGraphIOProcessor(NamedAudioGraphIOProcessor::midiOutputNode)); AudioProcessorGraph::Node* const node(graph.addNode(proc)); node->properties.set("isPlugin", false); node->properties.set("isOutput", true); node->properties.set("isAudio", false); node->properties.set("isCV", false); node->properties.set("isMIDI", true); node->properties.set("isOSC", false); } startThread(); } PatchbayGraph::~PatchbayGraph() { stopThread(-1); connections.clear(); extGraph.clear(); graph.releaseResources(); graph.clear(); audioBuffer.clear(); cvInBuffer.clear(); cvOutBuffer.clear(); } void PatchbayGraph::setBufferSize(const uint32_t bufferSize) { const CarlaRecursiveMutexLocker cml1(graph.getReorderMutex()); graph.releaseResources(); graph.prepareToPlay(kEngine->getSampleRate(), static_cast(bufferSize)); audioBuffer.setSize(audioBuffer.getNumChannels(), bufferSize); cvInBuffer.setSize(numCVIns, bufferSize); cvOutBuffer.setSize(numCVOuts, bufferSize); } void PatchbayGraph::setSampleRate(const double sampleRate) { const CarlaRecursiveMutexLocker cml1(graph.getReorderMutex()); graph.releaseResources(); graph.prepareToPlay(sampleRate, static_cast(kEngine->getBufferSize())); } void PatchbayGraph::setOffline(const bool offline) { graph.setNonRealtime(offline); } void PatchbayGraph::addPlugin(const CarlaPluginPtr plugin) { CARLA_SAFE_ASSERT_RETURN(plugin.get() != nullptr,); carla_debug("PatchbayGraph::addPlugin(%p)", plugin.get()); CarlaPluginInstance* const instance(new CarlaPluginInstance(kEngine, plugin)); AudioProcessorGraph::Node* const node(graph.addNode(instance)); CARLA_SAFE_ASSERT_RETURN(node != nullptr,); const bool sendHost = !usingExternalHost; const bool sendOSC = !usingExternalOSC; plugin->setPatchbayNodeId(node->nodeId); node->properties.set("isPlugin", true); node->properties.set("pluginId", static_cast(plugin->getId())); addNodeToPatchbay(sendHost, sendOSC, kEngine, node, static_cast(plugin->getId()), instance); } void PatchbayGraph::replacePlugin(const CarlaPluginPtr oldPlugin, const CarlaPluginPtr newPlugin) { CARLA_SAFE_ASSERT_RETURN(oldPlugin.get() != nullptr,); CARLA_SAFE_ASSERT_RETURN(newPlugin.get() != nullptr,); CARLA_SAFE_ASSERT_RETURN(oldPlugin != newPlugin,); CARLA_SAFE_ASSERT_RETURN(oldPlugin->getId() == newPlugin->getId(),); AudioProcessorGraph::Node* const oldNode(graph.getNodeForId(oldPlugin->getPatchbayNodeId())); CARLA_SAFE_ASSERT_RETURN(oldNode != nullptr,); const bool sendHost = !usingExternalHost; const bool sendOSC = !usingExternalOSC; disconnectInternalGroup(oldNode->nodeId); removeNodeFromPatchbay(sendHost, sendOSC, kEngine, oldNode->nodeId, oldNode->getProcessor()); ((CarlaPluginInstance*)oldNode->getProcessor())->invalidatePlugin(); graph.removeNode(oldNode->nodeId); CarlaPluginInstance* const instance(new CarlaPluginInstance(kEngine, newPlugin)); AudioProcessorGraph::Node* const node(graph.addNode(instance)); CARLA_SAFE_ASSERT_RETURN(node != nullptr,); newPlugin->setPatchbayNodeId(node->nodeId); node->properties.set("isPlugin", true); node->properties.set("pluginId", static_cast(newPlugin->getId())); addNodeToPatchbay(sendHost, sendOSC, kEngine, node, static_cast(newPlugin->getId()), instance); } void PatchbayGraph::renamePlugin(const CarlaPluginPtr plugin, const char* const newName) { CARLA_SAFE_ASSERT_RETURN(plugin.get() != nullptr,); carla_debug("PatchbayGraph::renamePlugin(%p)", plugin.get(), newName); AudioProcessorGraph::Node* const node(graph.getNodeForId(plugin->getPatchbayNodeId())); CARLA_SAFE_ASSERT_RETURN(node != nullptr,); const bool sendHost = !usingExternalHost; const bool sendOSC = !usingExternalOSC; kEngine->callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_CLIENT_RENAMED, node->nodeId, 0, 0, 0, 0.0f, newName); } void PatchbayGraph::switchPlugins(CarlaPluginPtr pluginA, CarlaPluginPtr pluginB) { CARLA_SAFE_ASSERT_RETURN(pluginA.get() != nullptr,); CARLA_SAFE_ASSERT_RETURN(pluginB.get() != nullptr,); CARLA_SAFE_ASSERT_RETURN(pluginA != pluginB,); CARLA_SAFE_ASSERT_RETURN(pluginA->getId() != pluginB->getId(),); AudioProcessorGraph::Node* const nodeA(graph.getNodeForId(pluginA->getPatchbayNodeId())); CARLA_SAFE_ASSERT_RETURN(nodeA != nullptr,); AudioProcessorGraph::Node* const nodeB(graph.getNodeForId(pluginB->getPatchbayNodeId())); CARLA_SAFE_ASSERT_RETURN(nodeB != nullptr,); nodeA->properties.set("pluginId", static_cast(pluginB->getId())); nodeB->properties.set("pluginId", static_cast(pluginA->getId())); } void PatchbayGraph::reconfigureForCV(const CarlaPluginPtr plugin, const uint portIndex, bool added) { CARLA_SAFE_ASSERT_RETURN(plugin.get() != nullptr,); carla_debug("PatchbayGraph::reconfigureForCV(%p, %u, %s)", plugin.get(), portIndex, bool2str(added)); AudioProcessorGraph::Node* const node = graph.getNodeForId(plugin->getPatchbayNodeId()); CARLA_SAFE_ASSERT_RETURN(node != nullptr,); CarlaPluginInstance* const proc = dynamic_cast(node->getProcessor()); CARLA_SAFE_ASSERT_RETURN(proc != nullptr,); const bool sendHost = !usingExternalHost; const bool sendOSC = !usingExternalOSC; const uint oldCvIn = proc->getTotalNumInputChannels(AudioProcessor::ChannelTypeCV); // const uint oldCvOut = proc->getTotalNumOutputChannels(AudioProcessor::ChannelTypeCV); { const CarlaRecursiveMutexLocker crml(graph.getCallbackLock()); proc->reconfigure(); graph.buildRenderingSequence(); } const uint newCvIn = proc->getTotalNumInputChannels(AudioProcessor::ChannelTypeCV); // const uint newCvOut = proc->getTotalNumOutputChannels(AudioProcessor::ChannelTypeCV); if (added) { CARLA_SAFE_ASSERT_UINT2_RETURN(newCvIn > oldCvIn, newCvIn, oldCvIn,); // CARLA_SAFE_ASSERT_UINT2_RETURN(newCvOut >= oldCvOut, newCvOut, oldCvOut,); kEngine->callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, node->nodeId, static_cast(kCVInputPortOffset + plugin->getCVInCount() + portIndex), PATCHBAY_PORT_TYPE_CV|PATCHBAY_PORT_IS_INPUT, 0, 0.0f, proc->getInputChannelName(AudioProcessor::ChannelTypeCV, portIndex).toRawUTF8()); } else { CARLA_SAFE_ASSERT_UINT2_RETURN(newCvIn < oldCvIn, newCvIn, oldCvIn,); // CARLA_SAFE_ASSERT_UINT2_RETURN(newCvOut <= oldCvOut, newCvOut, oldCvOut,); kEngine->callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_PORT_REMOVED, node->nodeId, static_cast(kCVInputPortOffset + plugin->getCVInCount() + portIndex), 0, 0, 0.0f, nullptr); } } void PatchbayGraph::removePlugin(const CarlaPluginPtr plugin) { CARLA_SAFE_ASSERT_RETURN(plugin.get() != nullptr,); carla_debug("PatchbayGraph::removePlugin(%p)", plugin.get()); AudioProcessorGraph::Node* const node(graph.getNodeForId(plugin->getPatchbayNodeId())); CARLA_SAFE_ASSERT_RETURN(node != nullptr,); const bool sendHost = !usingExternalHost; const bool sendOSC = !usingExternalOSC; disconnectInternalGroup(node->nodeId); removeNodeFromPatchbay(sendHost, sendOSC, kEngine, node->nodeId, node->getProcessor()); ((CarlaPluginInstance*)node->getProcessor())->invalidatePlugin(); // Fix plugin Ids properties for (uint i=plugin->getId()+1, count=kEngine->getCurrentPluginCount(); igetPlugin(i); CARLA_SAFE_ASSERT_BREAK(plugin2.get() != nullptr); if (AudioProcessorGraph::Node* const node2 = graph.getNodeForId(plugin2->getPatchbayNodeId())) { CARLA_SAFE_ASSERT_CONTINUE(node2->properties.getWithDefault("pluginId", -1) != water::var(-1)); node2->properties.set("pluginId", static_cast(i-1)); } } CARLA_SAFE_ASSERT_RETURN(graph.removeNode(node->nodeId),); } void PatchbayGraph::removeAllPlugins() { carla_debug("PatchbayGraph::removeAllPlugins()"); const bool sendHost = !usingExternalHost; const bool sendOSC = !usingExternalOSC; for (uint i=0, count=kEngine->getCurrentPluginCount(); igetPlugin(i); CARLA_SAFE_ASSERT_CONTINUE(plugin.get() != nullptr); AudioProcessorGraph::Node* const node(graph.getNodeForId(plugin->getPatchbayNodeId())); CARLA_SAFE_ASSERT_CONTINUE(node != nullptr); disconnectInternalGroup(node->nodeId); removeNodeFromPatchbay(sendHost, sendOSC, kEngine, node->nodeId, node->getProcessor()); ((CarlaPluginInstance*)node->getProcessor())->invalidatePlugin(); graph.removeNode(node->nodeId); } } bool PatchbayGraph::connect(const bool external, const uint groupA, const uint portA, const uint groupB, const uint portB) { if (external) return extGraph.connect(usingExternalHost, usingExternalOSC, groupA, portA, groupB, portB); uint adjustedPortA = portA; uint adjustedPortB = portB; AudioProcessor::ChannelType channelType; if (! adjustPatchbayPortIdForWater(channelType, adjustedPortA)) return false; if (! adjustPatchbayPortIdForWater(channelType, adjustedPortB)) return false; if (! graph.addConnection(channelType, groupA, adjustedPortA, groupB, adjustedPortB)) { kEngine->setLastError("Failed from water"); return false; } ConnectionToId connectionToId; connectionToId.setData(++connections.lastId, groupA, portA, groupB, portB); char strBuf[STR_MAX+1]; strBuf[STR_MAX] = '\0'; std::snprintf(strBuf, STR_MAX, "%u:%u:%u:%u", groupA, portA, groupB, portB); kEngine->callback(!usingExternalHost, !usingExternalOSC, ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, connectionToId.id, 0, 0, 0, 0.0f, strBuf); connections.list.append(connectionToId); return true; } bool PatchbayGraph::disconnect(const bool external, const uint connectionId) { if (external) return extGraph.disconnect(usingExternalHost, usingExternalOSC, connectionId); for (LinkedList::Itenerator it=connections.list.begin2(); it.valid(); it.next()) { static const ConnectionToId fallback = { 0, 0, 0, 0, 0 }; const ConnectionToId& connectionToId(it.getValue(fallback)); CARLA_SAFE_ASSERT_CONTINUE(connectionToId.id > 0); if (connectionToId.id != connectionId) continue; uint adjustedPortA = connectionToId.portA; uint adjustedPortB = connectionToId.portB; AudioProcessor::ChannelType channelType; if (! adjustPatchbayPortIdForWater(channelType, adjustedPortA)) return false; if (! adjustPatchbayPortIdForWater(channelType, adjustedPortB)) return false; if (! graph.removeConnection(channelType, connectionToId.groupA, adjustedPortA, connectionToId.groupB, adjustedPortB)) return false; kEngine->callback(!usingExternalHost, !usingExternalOSC, ENGINE_CALLBACK_PATCHBAY_CONNECTION_REMOVED, connectionToId.id, 0, 0, 0, 0.0f, nullptr); connections.list.remove(it); return true; } kEngine->setLastError("Failed to find connection"); return false; } void PatchbayGraph::disconnectInternalGroup(const uint groupId) noexcept { for (LinkedList::Itenerator it=connections.list.begin2(); it.valid(); it.next()) { static const ConnectionToId fallback = { 0, 0, 0, 0, 0 }; const ConnectionToId& connectionToId(it.getValue(fallback)); CARLA_SAFE_ASSERT_CONTINUE(connectionToId.id > 0); if (connectionToId.groupA != groupId && connectionToId.groupB != groupId) continue; /* uint adjustedPortA = connectionToId.portA; uint adjustedPortB = connectionToId.portB; AudioProcessor::ChannelType channelType; if (! adjustPatchbayPortIdForWater(adjustedPortA)) return false; if (! adjustPatchbayPortIdForWater(adjustedPortB)) return false; graph.removeConnection(connectionToId.groupA, static_cast(adjustedPortA), connectionToId.groupB, static_cast(adjustedPortB)); */ kEngine->callback(!usingExternalHost, !usingExternalOSC, ENGINE_CALLBACK_PATCHBAY_CONNECTION_REMOVED, connectionToId.id, 0, 0, 0, 0.0f, nullptr); connections.list.remove(it); } } void PatchbayGraph::setGroupPos(const bool sendHost, const bool sendOSC, const bool external, uint groupId, int x1, int y1, int x2, int y2) { if (external) return extGraph.setGroupPos(sendHost, sendOSC, groupId, x1, y1, x2, y2); AudioProcessorGraph::Node* const node(graph.getNodeForId(groupId)); CARLA_SAFE_ASSERT_RETURN(node != nullptr,); node->properties.set("x1", x1); node->properties.set("y1", y1); node->properties.set("x2", x2); node->properties.set("y2", y2); kEngine->callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_CLIENT_POSITION_CHANGED, groupId, x1, y1, x2, static_cast(y2), nullptr); } void PatchbayGraph::refresh(const bool sendHost, const bool sendOSC, const bool external, const char* const deviceName) { if (external) return extGraph.refresh(sendHost, sendOSC, deviceName); CARLA_SAFE_ASSERT_RETURN(deviceName != nullptr,); connections.clear(); graph.removeIllegalConnections(); for (int i=0, count=graph.getNumNodes(); igetProcessor()); CARLA_SAFE_ASSERT_CONTINUE(proc != nullptr); int pluginId = -1; // plugin node if (node->properties.getWithDefault("isPlugin", false) == water::var(true)) pluginId = node->properties.getWithDefault("pluginId", -1); addNodeToPatchbay(sendHost, sendOSC, kEngine, node, pluginId, proc); } char strBuf[STR_MAX+1]; strBuf[STR_MAX] = '\0'; for (size_t i=0, count=graph.getNumConnections(); isourceNodeId; const uint groupB = conn->destNodeId; uint portA = conn->sourceChannelIndex; uint portB = conn->destChannelIndex; switch (conn->channelType) { case AudioProcessor::ChannelTypeAudio: portA += kAudioOutputPortOffset; portB += kAudioInputPortOffset; break; case AudioProcessor::ChannelTypeCV: portA += kCVOutputPortOffset; portB += kCVInputPortOffset; break; case AudioProcessor::ChannelTypeMIDI: portA += kMidiOutputPortOffset; portB += kMidiInputPortOffset; break; } ConnectionToId connectionToId; connectionToId.setData(++connections.lastId, groupA, portA, groupB, portB); std::snprintf(strBuf, STR_MAX, "%i:%i:%i:%i", groupA, portA, groupB, portB); kEngine->callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, connectionToId.id, 0, 0, 0, 0.0f, strBuf); connections.list.append(connectionToId); } } const char* const* PatchbayGraph::getConnections(const bool external) const { if (external) return extGraph.getConnections(); if (connections.list.count() == 0) return nullptr; CarlaStringList connList; for (LinkedList::Itenerator it=connections.list.begin2(); it.valid(); it.next()) { static const ConnectionToId fallback = { 0, 0, 0, 0, 0 }; const ConnectionToId& connectionToId(it.getValue(fallback)); CARLA_SAFE_ASSERT_CONTINUE(connectionToId.id > 0); AudioProcessorGraph::Node* const nodeA(graph.getNodeForId(connectionToId.groupA)); CARLA_SAFE_ASSERT_CONTINUE(nodeA != nullptr); AudioProcessorGraph::Node* const nodeB(graph.getNodeForId(connectionToId.groupB)); CARLA_SAFE_ASSERT_CONTINUE(nodeB != nullptr); AudioProcessor* const procA(nodeA->getProcessor()); CARLA_SAFE_ASSERT_CONTINUE(procA != nullptr); AudioProcessor* const procB(nodeB->getProcessor()); CARLA_SAFE_ASSERT_CONTINUE(procB != nullptr); String fullPortNameA(getProcessorFullPortName(procA, connectionToId.portA)); CARLA_SAFE_ASSERT_CONTINUE(fullPortNameA.isNotEmpty()); String fullPortNameB(getProcessorFullPortName(procB, connectionToId.portB)); CARLA_SAFE_ASSERT_CONTINUE(fullPortNameB.isNotEmpty()); connList.append(fullPortNameA.toRawUTF8()); connList.append(fullPortNameB.toRawUTF8()); } if (connList.count() == 0) return nullptr; retCon = connList.toCharStringListPtr(); return retCon; } const CarlaEngine::PatchbayPosition* PatchbayGraph::getPositions(bool external, uint& count) const { CarlaEngine::PatchbayPosition* ret; if (external) { try { ret = new CarlaEngine::PatchbayPosition[kExternalGraphGroupMax]; } CARLA_SAFE_EXCEPTION_RETURN("new CarlaEngine::PatchbayPosition", nullptr); count = 0; for (uint i=kExternalGraphGroupCarla; i 0, nullptr); try { ret = new CarlaEngine::PatchbayPosition[numNodes]; } CARLA_SAFE_EXCEPTION_RETURN("new CarlaEngine::PatchbayPosition", nullptr); count = 0; for (int i=numNodes; --i >= 0;) { AudioProcessorGraph::Node* const node(graph.getNode(i)); CARLA_SAFE_ASSERT_CONTINUE(node != nullptr); if (! node->properties.contains("x1")) continue; AudioProcessor* const proc(node->getProcessor()); CARLA_SAFE_ASSERT_CONTINUE(proc != nullptr); CarlaEngine::PatchbayPosition& ppos(ret[count++]); ppos.name = carla_strdup(proc->getName().toRawUTF8()); ppos.dealloc = true; ppos.pluginId = node->properties.getWithDefault("pluginId", -1); ppos.x1 = node->properties.getWithDefault("x1", 0); ppos.y1 = node->properties.getWithDefault("y1", 0); ppos.x2 = node->properties.getWithDefault("x2", 0); ppos.y2 = node->properties.getWithDefault("y2", 0); } return ret; } } bool PatchbayGraph::getGroupFromName(bool external, const char* groupName, uint& groupId) const { if (external) return extGraph.getGroupFromName(groupName, groupId); for (int i=0, count=graph.getNumNodes(); igetProcessor()); CARLA_SAFE_ASSERT_CONTINUE(proc != nullptr); if (proc->getName() != groupName) continue; groupId = node->nodeId; return true; } return false; } bool PatchbayGraph::getGroupAndPortIdFromFullName(const bool external, const char* const fullPortName, uint& groupId, uint& portId) const { if (external) return extGraph.getGroupAndPortIdFromFullName(fullPortName, groupId, portId); String groupName(String(fullPortName).upToFirstOccurrenceOf(":", false, false)); String portName(String(fullPortName).fromFirstOccurrenceOf(":", false, false)); for (int i=0, count=graph.getNumNodes(); igetProcessor()); CARLA_SAFE_ASSERT_CONTINUE(proc != nullptr); if (proc->getName() != groupName) continue; groupId = node->nodeId; for (uint j=0, numInputs=proc->getTotalNumInputChannels(AudioProcessor::ChannelTypeAudio); jgetInputChannelName(AudioProcessor::ChannelTypeAudio, j) != portName) continue; portId = kAudioInputPortOffset+j; return true; } for (uint j=0, numOutputs=proc->getTotalNumOutputChannels(AudioProcessor::ChannelTypeAudio); jgetOutputChannelName(AudioProcessor::ChannelTypeAudio, j) != portName) continue; portId = kAudioOutputPortOffset+j; return true; } for (uint j=0, numInputs=proc->getTotalNumInputChannels(AudioProcessor::ChannelTypeCV); jgetInputChannelName(AudioProcessor::ChannelTypeCV, j) != portName) continue; portId = kCVInputPortOffset+j; return true; } for (uint j=0, numOutputs=proc->getTotalNumOutputChannels(AudioProcessor::ChannelTypeCV); jgetOutputChannelName(AudioProcessor::ChannelTypeCV, j) != portName) continue; portId = kCVOutputPortOffset+j; return true; } for (uint j=0, numInputs=proc->getTotalNumInputChannels(AudioProcessor::ChannelTypeMIDI); jgetInputChannelName(AudioProcessor::ChannelTypeMIDI, j) != portName) continue; portId = kMidiInputPortOffset+j; return true; } for (uint j=0, numOutputs=proc->getTotalNumOutputChannels(AudioProcessor::ChannelTypeMIDI); jgetOutputChannelName(AudioProcessor::ChannelTypeMIDI, j) != portName) continue; portId = kMidiOutputPortOffset+j; return true; } } return false; } void PatchbayGraph::process(CarlaEngine::ProtectedData* const data, const float* const* const inBuf, float* const* const outBuf, const uint32_t frames) { CARLA_SAFE_ASSERT_RETURN(data != nullptr,); CARLA_SAFE_ASSERT_RETURN(data->events.in != nullptr,); CARLA_SAFE_ASSERT_RETURN(data->events.out != nullptr,); CARLA_SAFE_ASSERT_RETURN(frames > 0,); // put events in water buffer { midiBuffer.clear(); fillWaterMidiBufferFromEngineEvents(midiBuffer, data->events.in); } // set audio and cv buffer size, needed for water internals if (! audioBuffer.setSizeRT(frames)) return; if (! cvInBuffer.setSizeRT(frames)) return; if (! cvOutBuffer.setSizeRT(frames)) return; // put carla audio and cv in water buffer { uint32_t i=0; for (; i < numAudioIns; ++i) { CARLA_SAFE_ASSERT_BREAK(inBuf[i]); audioBuffer.copyFrom(i, 0, inBuf[i], frames); } for (uint32_t j=0; j < numCVIns; ++j, ++i) { CARLA_SAFE_ASSERT_BREAK(inBuf[i]); cvInBuffer.copyFrom(j, 0, inBuf[i], frames); } // clear remaining channels for (uint32_t j=numAudioIns, count=audioBuffer.getNumChannels(); j < count; ++j) audioBuffer.clear(j, 0, frames); for (uint32_t j=0; j < numCVOuts; ++j) cvOutBuffer.clear(j, 0, frames); } // ready to go! graph.processBlockWithCV(audioBuffer, cvInBuffer, cvOutBuffer, midiBuffer); // put water audio and cv in carla buffer { uint32_t i=0; for (; i < numAudioOuts; ++i) carla_copyFloats(outBuf[i], audioBuffer.getReadPointer(i), frames); for (uint32_t j=0; j < numCVOuts; ++j, ++i) carla_copyFloats(outBuf[i], cvOutBuffer.getReadPointer(j), frames); } // put water events in carla buffer { carla_zeroStructs(data->events.out, kMaxEngineEventInternalCount); fillEngineEventsFromWaterMidiBuffer(data->events.out, midiBuffer); midiBuffer.clear(); } } void PatchbayGraph::run() { while (! shouldThreadExit()) { carla_msleep(100); graph.reorderNowIfNeeded(); } } // ----------------------------------------------------------------------- // InternalGraph EngineInternalGraph::EngineInternalGraph(CarlaEngine* const engine) noexcept : fIsRack(false), fNumAudioOuts(0), fIsReady(false), fRack(nullptr), kEngine(engine) {} EngineInternalGraph::~EngineInternalGraph() noexcept { CARLA_SAFE_ASSERT(! fIsReady); CARLA_SAFE_ASSERT(fRack == nullptr); } void EngineInternalGraph::create(const uint32_t audioIns, const uint32_t audioOuts, const uint32_t cvIns, const uint32_t cvOuts) { fIsRack = (kEngine->getOptions().processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK); if (fIsRack) { CARLA_SAFE_ASSERT_RETURN(fRack == nullptr,); fRack = new RackGraph(kEngine, audioIns, audioOuts); } else { CARLA_SAFE_ASSERT_RETURN(fPatchbay == nullptr,); fPatchbay = new PatchbayGraph(kEngine, audioIns, audioOuts, cvIns, cvOuts); } fNumAudioOuts = audioOuts; fIsReady = true; } void EngineInternalGraph::destroy() noexcept { if (! fIsReady) { CARLA_SAFE_ASSERT(fRack == nullptr); return; } if (fIsRack) { CARLA_SAFE_ASSERT_RETURN(fRack != nullptr,); delete fRack; fRack = nullptr; } else { CARLA_SAFE_ASSERT_RETURN(fPatchbay != nullptr,); delete fPatchbay; fPatchbay = nullptr; } fIsReady = false; fNumAudioOuts = 0; } void EngineInternalGraph::setBufferSize(const uint32_t bufferSize) { CarlaScopedValueSetter svs(fIsReady, false, true); if (fIsRack) { CARLA_SAFE_ASSERT_RETURN(fRack != nullptr,); fRack->setBufferSize(bufferSize); } else { CARLA_SAFE_ASSERT_RETURN(fPatchbay != nullptr,); fPatchbay->setBufferSize(bufferSize); } } void EngineInternalGraph::setSampleRate(const double sampleRate) { CarlaScopedValueSetter svs(fIsReady, false, true); if (fIsRack) { CARLA_SAFE_ASSERT_RETURN(fRack != nullptr,); } else { CARLA_SAFE_ASSERT_RETURN(fPatchbay != nullptr,); fPatchbay->setSampleRate(sampleRate); } } void EngineInternalGraph::setOffline(const bool offline) { CarlaScopedValueSetter svs(fIsReady, false, true); if (fIsRack) { CARLA_SAFE_ASSERT_RETURN(fRack != nullptr,); fRack->setOffline(offline); } else { CARLA_SAFE_ASSERT_RETURN(fPatchbay != nullptr,); fPatchbay->setOffline(offline); } } RackGraph* EngineInternalGraph::getRackGraph() const noexcept { CARLA_SAFE_ASSERT_RETURN(fIsRack, nullptr); return fRack; } PatchbayGraph* EngineInternalGraph::getPatchbayGraph() const noexcept { CARLA_SAFE_ASSERT_RETURN(! fIsRack, nullptr); return fPatchbay; } PatchbayGraph* EngineInternalGraph::getPatchbayGraphOrNull() const noexcept { return fIsRack ? nullptr : fPatchbay; } void EngineInternalGraph::process(CarlaEngine::ProtectedData* const data, const float* const* const inBuf, float* const* const outBuf, const uint32_t frames) { if (fIsRack) { CARLA_SAFE_ASSERT_RETURN(fRack != nullptr,); fRack->processHelper(data, inBuf, outBuf, frames); } else { CARLA_SAFE_ASSERT_RETURN(fPatchbay != nullptr,); fPatchbay->process(data, inBuf, outBuf, frames); } } void EngineInternalGraph::processRack(CarlaEngine::ProtectedData* const data, const float* inBuf[2], float* outBuf[2], const uint32_t frames) { CARLA_SAFE_ASSERT_RETURN(fIsRack,); CARLA_SAFE_ASSERT_RETURN(fRack != nullptr,); fRack->process(data, inBuf, outBuf, frames); } // ----------------------------------------------------------------------- // used for internal patchbay mode void EngineInternalGraph::addPlugin(const CarlaPluginPtr plugin) { CARLA_SAFE_ASSERT_RETURN(fPatchbay != nullptr,); fPatchbay->addPlugin(plugin); } void EngineInternalGraph::replacePlugin(const CarlaPluginPtr oldPlugin, const CarlaPluginPtr newPlugin) { CARLA_SAFE_ASSERT_RETURN(fPatchbay != nullptr,); fPatchbay->replacePlugin(oldPlugin, newPlugin); } void EngineInternalGraph::renamePlugin(const CarlaPluginPtr plugin, const char* const newName) { CARLA_SAFE_ASSERT_RETURN(fPatchbay != nullptr,); fPatchbay->renamePlugin(plugin, newName); } void EngineInternalGraph::switchPlugins(CarlaPluginPtr pluginA, CarlaPluginPtr pluginB) { CARLA_SAFE_ASSERT_RETURN(fPatchbay != nullptr,); fPatchbay->switchPlugins(pluginA, pluginB); } void EngineInternalGraph::removePlugin(const CarlaPluginPtr plugin) { CARLA_SAFE_ASSERT_RETURN(fPatchbay != nullptr,); fPatchbay->removePlugin(plugin); } void EngineInternalGraph::removeAllPlugins() { CARLA_SAFE_ASSERT_RETURN(fPatchbay != nullptr,); fPatchbay->removeAllPlugins(); } bool EngineInternalGraph::isUsingExternalHost() const noexcept { if (fIsRack) return true; CARLA_SAFE_ASSERT_RETURN(fPatchbay != nullptr, false); return fPatchbay->usingExternalHost; } bool EngineInternalGraph::isUsingExternalOSC() const noexcept { if (fIsRack) return true; CARLA_SAFE_ASSERT_RETURN(fPatchbay != nullptr, false); return fPatchbay->usingExternalOSC; } void EngineInternalGraph::setUsingExternalHost(const bool usingExternal) noexcept { CARLA_SAFE_ASSERT_RETURN(! fIsRack,); CARLA_SAFE_ASSERT_RETURN(fPatchbay != nullptr,); fPatchbay->usingExternalHost = usingExternal; } void EngineInternalGraph::setUsingExternalOSC(const bool usingExternal) noexcept { CARLA_SAFE_ASSERT_RETURN(! fIsRack,); CARLA_SAFE_ASSERT_RETURN(fPatchbay != nullptr,); fPatchbay->usingExternalOSC = usingExternal; } // ----------------------------------------------------------------------- // CarlaEngine Patchbay stuff bool CarlaEngine::patchbayConnect(const bool external, const uint groupA, const uint portA, const uint groupB, const uint portB) { CARLA_SAFE_ASSERT_RETURN(pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK || pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY, false); CARLA_SAFE_ASSERT_RETURN(pData->graph.isReady(), false); carla_debug("CarlaEngine::patchbayConnect(%u, %u, %u, %u)", groupA, portA, groupB, portB); if (pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK) { RackGraph* const graph = pData->graph.getRackGraph(); CARLA_SAFE_ASSERT_RETURN(graph != nullptr, false); return graph->connect(groupA, portA, groupB, portB); } else { PatchbayGraph* const graph = pData->graph.getPatchbayGraph(); CARLA_SAFE_ASSERT_RETURN(graph != nullptr, false); return graph->connect(external, groupA, portA, groupB, portB); } } bool CarlaEngine::patchbayDisconnect(const bool external, const uint connectionId) { CARLA_SAFE_ASSERT_RETURN(pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK || pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY, false); CARLA_SAFE_ASSERT_RETURN(pData->graph.isReady(), false); carla_debug("CarlaEngine::patchbayDisconnect(%u)", connectionId); if (pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK) { RackGraph* const graph = pData->graph.getRackGraph(); CARLA_SAFE_ASSERT_RETURN(graph != nullptr, false); return graph->disconnect(connectionId); } else { PatchbayGraph* const graph = pData->graph.getPatchbayGraph(); CARLA_SAFE_ASSERT_RETURN(graph != nullptr, false); return graph->disconnect(external, connectionId); } } bool CarlaEngine::patchbaySetGroupPos(const bool sendHost, const bool sendOSC, const bool external, const uint groupId, const int x1, const int y1, const int x2, const int y2) { CARLA_SAFE_ASSERT_RETURN(pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK || pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY, false); CARLA_SAFE_ASSERT_RETURN(pData->graph.isReady(), false); carla_debug("CarlaEngine::patchbaySetGroupPos(%u, %i, %i, %i, %i)", groupId, x1, y1, x2, y2); if (pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK) { // we don't bother to save position in this case, there is only midi in/out return true; } else { PatchbayGraph* const graph = pData->graph.getPatchbayGraph(); CARLA_SAFE_ASSERT_RETURN(graph != nullptr, false); graph->setGroupPos(sendHost, sendOSC, external, groupId, x1, y1, x2, y2); return true; } } bool CarlaEngine::patchbayRefresh(const bool sendHost, const bool sendOSC, const bool external) { // subclasses should handle this CARLA_SAFE_ASSERT_RETURN(! external, false); if (pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK) { // This is implemented in engine subclasses setLastError("Unsupported operation"); return false; } if (pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY) { PatchbayGraph* const graph = pData->graph.getPatchbayGraph(); CARLA_SAFE_ASSERT_RETURN(graph != nullptr, false); graph->refresh(sendHost, sendOSC, external, ""); return true; } setLastError("Unsupported operation"); return false; } // ----------------------------------------------------------------------- // Patchbay stuff const char* const* CarlaEngine::getPatchbayConnections(const bool external) const { CARLA_SAFE_ASSERT_RETURN(pData->graph.isReady(), nullptr); carla_debug("CarlaEngine::getPatchbayConnections(%s)", bool2str(external)); if (pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK) { RackGraph* const graph = pData->graph.getRackGraph(); CARLA_SAFE_ASSERT_RETURN(graph != nullptr, nullptr); CARLA_SAFE_ASSERT_RETURN(external, nullptr); return graph->getConnections(); } else { PatchbayGraph* const graph = pData->graph.getPatchbayGraph(); CARLA_SAFE_ASSERT_RETURN(graph != nullptr, nullptr); return graph->getConnections(external); } return nullptr; } const CarlaEngine::PatchbayPosition* CarlaEngine::getPatchbayPositions(bool external, uint& count) const { CARLA_SAFE_ASSERT_RETURN(pData->graph.isReady(), nullptr); carla_debug("CarlaEngine::getPatchbayPositions(%s)", bool2str(external)); if (pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY) { PatchbayGraph* const graph = pData->graph.getPatchbayGraph(); CARLA_SAFE_ASSERT_RETURN(graph != nullptr, nullptr); return graph->getPositions(external, count); } return nullptr; } void CarlaEngine::restorePatchbayConnection(const bool external, const char* const sourcePort, const char* const targetPort) { CARLA_SAFE_ASSERT_RETURN(pData->graph.isReady(),); CARLA_SAFE_ASSERT_RETURN(sourcePort != nullptr && sourcePort[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(targetPort != nullptr && targetPort[0] != '\0',); carla_debug("CarlaEngine::restorePatchbayConnection(%s, \"%s\", \"%s\")", bool2str(external), sourcePort, targetPort); uint groupA, portA; uint groupB, portB; if (pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK) { RackGraph* const graph = pData->graph.getRackGraph(); CARLA_SAFE_ASSERT_RETURN(graph != nullptr,); CARLA_SAFE_ASSERT_RETURN(external,); if (! graph->getGroupAndPortIdFromFullName(sourcePort, groupA, portA)) return; if (! graph->getGroupAndPortIdFromFullName(targetPort, groupB, portB)) return; graph->connect(groupA, portA, groupB, portB); } else { PatchbayGraph* const graph = pData->graph.getPatchbayGraph(); CARLA_SAFE_ASSERT_RETURN(graph != nullptr,); if (! graph->getGroupAndPortIdFromFullName(external, sourcePort, groupA, portA)) return; if (! graph->getGroupAndPortIdFromFullName(external, targetPort, groupB, portB)) return; graph->connect(external, groupA, portA, groupB, portB); } } bool CarlaEngine::restorePatchbayGroupPosition(const bool external, PatchbayPosition& ppos) { CARLA_SAFE_ASSERT_RETURN(pData->graph.isReady(), false); CARLA_SAFE_ASSERT_RETURN(ppos.name != nullptr && ppos.name[0] != '\0', false); if (pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY) { PatchbayGraph* const graph = pData->graph.getPatchbayGraph(); CARLA_SAFE_ASSERT_RETURN(graph != nullptr, false); const char* const orig_name = ppos.name; // strip client name prefix if present if (ppos.pluginId >= 0) { if (const char* const rname2 = std::strstr(ppos.name, ".")) if (const char* const rname3 = std::strstr(rname2 + 1, "/")) ppos.name = rname3 + 1; } uint groupId; CARLA_SAFE_ASSERT_INT_RETURN(graph->getGroupFromName(external, ppos.name, groupId), external, false); graph->setGroupPos(true, true, external, groupId, ppos.x1, ppos.y1, ppos.x2, ppos.y2); return ppos.name != orig_name; } return false; } // ----------------------------------------------------------------------- bool CarlaEngine::connectExternalGraphPort(const uint connectionType, const uint portId, const char* const portName) { CARLA_SAFE_ASSERT_RETURN(connectionType != 0 || (portName != nullptr && portName[0] != '\0'), false); CARLA_SAFE_ASSERT_RETURN(pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK, false); RackGraph* const graph(pData->graph.getRackGraph()); CARLA_SAFE_ASSERT_RETURN(graph != nullptr, false); const CarlaRecursiveMutexLocker cml(graph->audioBuffers.mutex); switch (connectionType) { case kExternalGraphConnectionAudioIn1: return graph->audioBuffers.connectedIn1.append(portId); case kExternalGraphConnectionAudioIn2: return graph->audioBuffers.connectedIn2.append(portId); case kExternalGraphConnectionAudioOut1: return graph->audioBuffers.connectedOut1.append(portId); case kExternalGraphConnectionAudioOut2: return graph->audioBuffers.connectedOut2.append(portId); } return false; } bool CarlaEngine::disconnectExternalGraphPort(const uint connectionType, const uint portId, const char* const portName) { CARLA_SAFE_ASSERT_RETURN(connectionType != 0 || (portName != nullptr && portName[0] != '\0'), false); CARLA_SAFE_ASSERT_RETURN(pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK, false); RackGraph* const graph(pData->graph.getRackGraph()); CARLA_SAFE_ASSERT_RETURN(graph != nullptr, false); const CarlaRecursiveMutexLocker cml(graph->audioBuffers.mutex); switch (connectionType) { case kExternalGraphConnectionAudioIn1: return graph->audioBuffers.connectedIn1.removeOne(portId); case kExternalGraphConnectionAudioIn2: return graph->audioBuffers.connectedIn2.removeOne(portId); case kExternalGraphConnectionAudioOut1: return graph->audioBuffers.connectedOut1.removeOne(portId); case kExternalGraphConnectionAudioOut2: return graph->audioBuffers.connectedOut2.removeOne(portId); } return false; } // ----------------------------------------------------------------------- CARLA_BACKEND_END_NAMESPACE Carla-2.4.2/source/backend/engine/CarlaEngineGraph.hpp000066400000000000000000000176731420416754300225640ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2018 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #ifndef CARLA_ENGINE_GRAPH_HPP_INCLUDED #define CARLA_ENGINE_GRAPH_HPP_INCLUDED #include "CarlaEngine.hpp" #include "CarlaMutex.hpp" #include "CarlaPatchbayUtils.hpp" #include "CarlaStringList.hpp" #include "CarlaThread.hpp" #include "water/processors/AudioProcessorGraph.h" #include "water/text/StringArray.h" using water::AudioProcessorGraph; using water::AudioSampleBuffer; using water::MidiBuffer; CARLA_BACKEND_START_NAMESPACE // ----------------------------------------------------------------------- struct PatchbayPosition { bool active; int x1, y1, x2, y2; }; // ----------------------------------------------------------------------- // External Graph stuff enum ExternalGraphGroupIds { kExternalGraphGroupNull = 0, kExternalGraphGroupCarla = 1, kExternalGraphGroupAudioIn = 2, kExternalGraphGroupAudioOut = 3, kExternalGraphGroupMidiIn = 4, kExternalGraphGroupMidiOut = 5, kExternalGraphGroupMax = 6 }; enum ExternalGraphCarlaPortIds { kExternalGraphCarlaPortNull = 0, kExternalGraphCarlaPortAudioIn1 = 1, kExternalGraphCarlaPortAudioIn2 = 2, kExternalGraphCarlaPortAudioOut1 = 3, kExternalGraphCarlaPortAudioOut2 = 4, kExternalGraphCarlaPortMidiIn = 5, kExternalGraphCarlaPortMidiOut = 6, kExternalGraphCarlaPortMax = 7 }; enum ExternalGraphConnectionType { kExternalGraphConnectionNull = 0, kExternalGraphConnectionAudioIn1 = 1, kExternalGraphConnectionAudioIn2 = 2, kExternalGraphConnectionAudioOut1 = 3, kExternalGraphConnectionAudioOut2 = 4, kExternalGraphConnectionMidiInput = 5, kExternalGraphConnectionMidiOutput = 6 }; struct ExternalGraphPorts { LinkedList ins; LinkedList outs; const char* getName(bool isInput, uint portId) const noexcept; uint getPortId(bool isInput, const char portName[], bool* ok = nullptr) const noexcept; ExternalGraphPorts() noexcept; CARLA_PREVENT_HEAP_ALLOCATION CARLA_DECLARE_NON_COPY_CLASS(ExternalGraphPorts) }; struct ExternalGraph { PatchbayConnectionList connections; ExternalGraphPorts audioPorts, midiPorts; PatchbayPosition positions[kExternalGraphGroupMax]; mutable CharStringListPtr retCon; ExternalGraph(CarlaEngine* engine) noexcept; void clear() noexcept; bool connect(bool sendHost, bool sendOSC, uint groupA, uint portA, uint groupB, uint portB) noexcept; bool disconnect(bool sendHost, bool sendOSC, uint connectionId) noexcept; void setGroupPos(bool sendHost, bool sendOSC, uint groupId, int x1, int y1, int x2, int y2); void refresh(bool sendHost, bool sendOSC, const char* deviceName); const char* const* getConnections() const noexcept; bool getGroupFromName(const char* groupName, uint& groupId) const noexcept; bool getGroupAndPortIdFromFullName(const char* fullPortName, uint& groupId, uint& portId) const noexcept; CarlaEngine* const kEngine; CARLA_PREVENT_HEAP_ALLOCATION CARLA_DECLARE_NON_COPY_CLASS(ExternalGraph) }; // ----------------------------------------------------------------------- // RackGraph struct RackGraph { ExternalGraph extGraph; const uint32_t inputs; const uint32_t outputs; bool isOffline; struct Buffers { CarlaRecursiveMutex mutex; LinkedList connectedIn1; LinkedList connectedIn2; LinkedList connectedOut1; LinkedList connectedOut2; float* inBuf[2]; float* inBufTmp[2]; float* outBuf[2]; float* unusedBuf; Buffers() noexcept; ~Buffers() noexcept; void setBufferSize(uint32_t bufferSize, bool createBuffers) noexcept; CARLA_PREVENT_HEAP_ALLOCATION CARLA_DECLARE_NON_COPY_CLASS(Buffers) } audioBuffers; RackGraph(CarlaEngine* engine, uint32_t inputs, uint32_t outputs) noexcept; ~RackGraph() noexcept; void setBufferSize(uint32_t bufferSize) noexcept; void setOffline(bool offline) noexcept; bool connect(uint groupA, uint portA, uint groupB, uint portB) noexcept; bool disconnect(uint connectionId) noexcept; void refresh(bool sendHost, bool sendOsc, bool ignored, const char* deviceName); const char* const* getConnections() const noexcept; bool getGroupAndPortIdFromFullName(const char* fullPortName, uint& groupId, uint& portId) const noexcept; // the base, where plugins run void process(CarlaEngine::ProtectedData* data, const float* inBuf[2], float* outBuf[2], uint32_t frames); // extended, will call process() in the middle void processHelper(CarlaEngine::ProtectedData* data, const float* const* inBuf, float* const* outBuf, uint32_t frames); CarlaEngine* const kEngine; CARLA_DECLARE_NON_COPY_CLASS(RackGraph) }; // ----------------------------------------------------------------------- // PatchbayGraph class PatchbayGraph : private CarlaThread { public: PatchbayConnectionList connections; AudioProcessorGraph graph; AudioSampleBuffer audioBuffer; AudioSampleBuffer cvInBuffer; AudioSampleBuffer cvOutBuffer; MidiBuffer midiBuffer; const uint32_t numAudioIns; const uint32_t numAudioOuts; const uint32_t numCVIns; const uint32_t numCVOuts; mutable CharStringListPtr retCon; bool usingExternalHost; bool usingExternalOSC; ExternalGraph extGraph; PatchbayGraph(CarlaEngine* engine, uint32_t audioIns, uint32_t audioOuts, uint32_t cvIns, uint32_t cvOuts); ~PatchbayGraph(); void setBufferSize(uint32_t bufferSize); void setSampleRate(double sampleRate); void setOffline(bool offline); void addPlugin(CarlaPluginPtr plugin); void replacePlugin(CarlaPluginPtr oldPlugin, CarlaPluginPtr newPlugin); void renamePlugin(CarlaPluginPtr plugin, const char* newName); void switchPlugins(CarlaPluginPtr pluginA, CarlaPluginPtr pluginB); void reconfigureForCV(CarlaPluginPtr plugin, const uint portIndex, bool added); void reconfigurePlugin(CarlaPluginPtr plugin, bool portsAdded); void removePlugin(CarlaPluginPtr plugin); void removeAllPlugins(); bool connect(bool external, uint groupA, uint portA, uint groupB, uint portB); bool disconnect(bool external, uint connectionId); void disconnectInternalGroup(uint groupId) noexcept; void setGroupPos(bool sendHost, bool sendOsc, bool external, uint groupId, int x1, int y1, int x2, int y2); void refresh(bool sendHost, bool sendOsc, bool external, const char* deviceName); const char* const* getConnections(bool external) const; const CarlaEngine::PatchbayPosition* getPositions(bool external, uint& count) const; bool getGroupFromName(bool external, const char* groupName, uint& groupId) const; bool getGroupAndPortIdFromFullName(bool external, const char* fullPortName, uint& groupId, uint& portId) const; void process(CarlaEngine::ProtectedData* data, const float* const* inBuf, float* const* outBuf, uint32_t frames); private: void run() override; CarlaEngine* const kEngine; CARLA_DECLARE_NON_COPY_CLASS(PatchbayGraph) }; // ----------------------------------------------------------------------- CARLA_BACKEND_END_NAMESPACE #endif // CARLA_ENGINE_GRAPH_HPP_INCLUDED Carla-2.4.2/source/backend/engine/CarlaEngineInternal.cpp000066400000000000000000000563211420416754300232630ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2020 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "CarlaEngineInternal.hpp" #include "CarlaPlugin.hpp" #include "CarlaSemUtils.hpp" #include "jackbridge/JackBridge.hpp" #include #include CARLA_BACKEND_START_NAMESPACE // ----------------------------------------------------------------------- // Engine Internal helper macro, sets lastError and returns false/NULL #define CARLA_SAFE_ASSERT_RETURN_INTERNAL_ERR(cond, err) if (! (cond)) { carla_safe_assert(#cond, __FILE__, __LINE__); lastError = err; return false; } #define CARLA_SAFE_ASSERT_RETURN_INTERNAL_ERRN(cond, err) if (! (cond)) { carla_safe_assert(#cond, __FILE__, __LINE__); lastError = err; return nullptr; } // ----------------------------------------------------------------------- // InternalEvents EngineInternalEvents::EngineInternalEvents() noexcept : in(nullptr), out(nullptr) {} EngineInternalEvents::~EngineInternalEvents() noexcept { CARLA_SAFE_ASSERT(in == nullptr); CARLA_SAFE_ASSERT(out == nullptr); } void EngineInternalEvents::clear() noexcept { if (in != nullptr) { delete[] in; in = nullptr; } if (out != nullptr) { delete[] out; out = nullptr; } } // ----------------------------------------------------------------------- // InternalTime static const double kTicksPerBeat = 1920.0; #if defined(HAVE_HYLIA) && !defined(BUILD_BRIDGE) static uint32_t calculate_link_latency(const double bufferSize, const double sampleRate) noexcept { CARLA_SAFE_ASSERT_RETURN(carla_isNotZero(sampleRate), 0); const long long int latency = llround(1.0e6 * bufferSize / sampleRate); CARLA_SAFE_ASSERT_RETURN(latency >= 0 && latency < UINT32_MAX, 0); return static_cast(latency); } #endif EngineInternalTime::EngineInternalTime(EngineTimeInfo& ti, const EngineTransportMode& tm) noexcept : beatsPerBar(4.0), beatsPerMinute(120.0), bufferSize(0.0), sampleRate(0.0), needsReset(false), nextFrame(0), #ifndef BUILD_BRIDGE hylia(), #endif timeInfo(ti), transportMode(tm) {} void EngineInternalTime::init(const uint32_t bsize, const double srate) { bufferSize = bsize; sampleRate = srate; #if defined(HAVE_HYLIA) && !defined(BUILD_BRIDGE) if (hylia.instance != nullptr) { hylia_set_beats_per_bar(hylia.instance, beatsPerBar); hylia_set_beats_per_minute(hylia.instance, beatsPerMinute); hylia_set_output_latency(hylia.instance, calculate_link_latency(bsize, srate)); if (hylia.enabled) hylia_enable(hylia.instance, true); } #endif needsReset = true; } void EngineInternalTime::updateAudioValues(const uint32_t bsize, const double srate) { bufferSize = bsize; sampleRate = srate; #if defined(HAVE_HYLIA) && !defined(BUILD_BRIDGE) if (hylia.instance != nullptr) hylia_set_output_latency(hylia.instance, calculate_link_latency(bsize, srate)); #endif needsReset = true; } void EngineInternalTime::enableLink(const bool enable) { #if defined(HAVE_HYLIA) && !defined(BUILD_BRIDGE) if (hylia.enabled == enable) return; if (hylia.instance != nullptr) { hylia.enabled = enable; hylia_enable(hylia.instance, enable); } #else // unused (void)enable; #endif needsReset = true; } void EngineInternalTime::setBPM(const double bpm) { beatsPerMinute = bpm; #if defined(HAVE_HYLIA) && !defined(BUILD_BRIDGE) if (hylia.instance != nullptr) hylia_set_beats_per_minute(hylia.instance, bpm); #endif } void EngineInternalTime::setNeedsReset() noexcept { needsReset = true; } void EngineInternalTime::pause() noexcept { timeInfo.playing = false; nextFrame = timeInfo.frame; needsReset = true; } void EngineInternalTime::relocate(const uint64_t frame) noexcept { timeInfo.frame = frame; nextFrame = frame; needsReset = true; } void EngineInternalTime::fillEngineTimeInfo(const uint32_t newFrames) noexcept { CARLA_SAFE_ASSERT_RETURN(carla_isNotZero(sampleRate),); CARLA_SAFE_ASSERT_RETURN(newFrames > 0,); double ticktmp; if (transportMode == ENGINE_TRANSPORT_MODE_INTERNAL) { timeInfo.usecs = 0; timeInfo.frame = nextFrame; } if (needsReset) { timeInfo.bbt.valid = true; timeInfo.bbt.beatType = 4.0f; timeInfo.bbt.ticksPerBeat = kTicksPerBeat; double abs_beat, abs_tick; #if defined(HAVE_HYLIA) && !defined(BUILD_BRIDGE) if (hylia.enabled) { if (hylia.timeInfo.beat >= 0.0) { abs_beat = hylia.timeInfo.beat; abs_tick = abs_beat * kTicksPerBeat; } else { abs_beat = 0.0; abs_tick = 0.0; timeInfo.playing = false; } } else #endif { const double min = static_cast(timeInfo.frame) / (sampleRate * 60.0); abs_beat = min * beatsPerMinute; abs_tick = abs_beat * kTicksPerBeat; needsReset = false; } const double bar = std::floor(abs_beat / beatsPerBar); const double beat = std::floor(std::fmod(abs_beat, beatsPerBar)); timeInfo.bbt.bar = static_cast(bar) + 1; timeInfo.bbt.beat = static_cast(beat) + 1; timeInfo.bbt.barStartTick = ((bar * beatsPerBar) + beat) * kTicksPerBeat; ticktmp = abs_tick - timeInfo.bbt.barStartTick; } else if (timeInfo.playing) { ticktmp = timeInfo.bbt.tick + (newFrames * kTicksPerBeat * beatsPerMinute / (sampleRate * 60)); while (ticktmp >= kTicksPerBeat) { ticktmp -= kTicksPerBeat; if (++timeInfo.bbt.beat > beatsPerBar) { ++timeInfo.bbt.bar; timeInfo.bbt.beat = 1; timeInfo.bbt.barStartTick += beatsPerBar * kTicksPerBeat; } } } else { ticktmp = timeInfo.bbt.tick; } timeInfo.bbt.beatsPerBar = static_cast(beatsPerBar); timeInfo.bbt.beatsPerMinute = beatsPerMinute; timeInfo.bbt.tick = ticktmp; if (transportMode == ENGINE_TRANSPORT_MODE_INTERNAL && timeInfo.playing) nextFrame += newFrames; } void EngineInternalTime::fillJackTimeInfo(jack_position_t* const pos, const uint32_t newFrames) noexcept { CARLA_SAFE_ASSERT_RETURN(carla_isNotZero(sampleRate),); CARLA_SAFE_ASSERT_RETURN(newFrames > 0,); CARLA_SAFE_ASSERT(transportMode == ENGINE_TRANSPORT_MODE_JACK); fillEngineTimeInfo(newFrames); pos->bar = timeInfo.bbt.bar; pos->beat = timeInfo.bbt.beat; pos->tick = static_cast(timeInfo.bbt.tick + 0.5); pos->bar_start_tick = timeInfo.bbt.barStartTick; pos->beats_per_bar = timeInfo.bbt.beatsPerBar; pos->beat_type = timeInfo.bbt.beatType; pos->ticks_per_beat = kTicksPerBeat; pos->beats_per_minute = beatsPerMinute; #ifdef JACK_TICK_DOUBLE pos->tick_double = timeInfo.bbt.tick; pos->valid = static_cast(JackPositionBBT|JackTickDouble); #else pos->valid = JackPositionBBT; #endif } void EngineInternalTime::preProcess(const uint32_t numFrames) { #if defined(HAVE_HYLIA) && !defined(BUILD_BRIDGE) if (hylia.enabled) { hylia_process(hylia.instance, numFrames, &hylia.timeInfo); const double new_bpb = hylia.timeInfo.beatsPerBar; const double new_bpm = hylia.timeInfo.beatsPerMinute; if (new_bpb >= 1.0 && carla_isNotEqual(beatsPerBar, new_bpb)) { beatsPerBar = new_bpb; needsReset = true; } if (new_bpm > 0.0 && carla_isNotEqual(beatsPerMinute, new_bpm)) { beatsPerMinute = new_bpm; needsReset = true; } } #endif if (transportMode == ENGINE_TRANSPORT_MODE_INTERNAL) fillEngineTimeInfo(numFrames); } // ----------------------------------------------------------------------- // EngineInternalTime::Hylia #ifndef BUILD_BRIDGE EngineInternalTime::Hylia::Hylia() : enabled(false), instance(nullptr), timeInfo() { carla_zeroStruct(timeInfo); # ifdef HAVE_HYLIA instance = hylia_create(); # endif } EngineInternalTime::Hylia::~Hylia() { # ifdef HAVE_HYLIA hylia_cleanup(instance); # endif } #endif // ----------------------------------------------------------------------- // NextAction EngineNextAction::EngineNextAction() noexcept : opcode(kEnginePostActionNull), pluginId(0), value(0), mutex(), needsPost(false), postDone(false), sem(carla_sem_create(false)) {} EngineNextAction::~EngineNextAction() noexcept { CARLA_SAFE_ASSERT(opcode == kEnginePostActionNull); if (sem != nullptr) { carla_sem_destroy(sem); sem = nullptr; } } void EngineNextAction::clearAndReset() noexcept { mutex.lock(); CARLA_SAFE_ASSERT(opcode == kEnginePostActionNull); opcode = kEnginePostActionNull; pluginId = 0; value = 0; needsPost = false; postDone = false; mutex.unlock(); } // ----------------------------------------------------------------------- // Helper functions EngineEvent* CarlaEngine::getInternalEventBuffer(const bool isInput) const noexcept { return isInput ? pData->events.in : pData->events.out; } // ----------------------------------------------------------------------- // CarlaEngine::ProtectedData CarlaEngine::ProtectedData::ProtectedData(CarlaEngine* const engine) : thread(engine), #if defined(HAVE_LIBLO) && !defined(BUILD_BRIDGE) osc(engine), #endif callback(nullptr), callbackPtr(nullptr), fileCallback(nullptr), fileCallbackPtr(nullptr), actionCanceled(false), #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH loadingProject(false), ignoreClientPrefix(false), currentProjectFilename(), currentProjectFolder(), #endif bufferSize(0), sampleRate(0.0), aboutToClose(false), isIdling(0), curPluginCount(0), maxPluginNumber(0), nextPluginId(0), envMutex(), lastError(), name(), options(), timeInfo(), #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH plugins(nullptr), xruns(0), dspLoad(0.0f), #endif pluginsToDelete(), events(), #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH graph(engine), #endif time(timeInfo, options.transportMode), nextAction() { #ifdef BUILD_BRIDGE_ALTERNATIVE_ARCH plugins[0].plugin = nullptr; carla_zeroStructs(plugins[0].peaks, 1); #endif } CarlaEngine::ProtectedData::~ProtectedData() { CARLA_SAFE_ASSERT(curPluginCount == 0); CARLA_SAFE_ASSERT(maxPluginNumber == 0); CARLA_SAFE_ASSERT(nextPluginId == 0); CARLA_SAFE_ASSERT(isIdling == 0); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH CARLA_SAFE_ASSERT(plugins == nullptr); #endif if (pluginsToDelete.size() != 0) { for (std::vector::iterator it = pluginsToDelete.begin(); it != pluginsToDelete.end(); ++it) { carla_stderr2("Plugin not yet deleted, name: '%s', usage count: '%u'", (*it)->getName(), it->use_count()); } } pluginsToDelete.clear(); } // ----------------------------------------------------------------------- bool CarlaEngine::ProtectedData::init(const char* const clientName) { CARLA_SAFE_ASSERT_RETURN_INTERNAL_ERR(name.isEmpty(), "Invalid engine internal data (err #1)"); CARLA_SAFE_ASSERT_RETURN_INTERNAL_ERR(events.in == nullptr, "Invalid engine internal data (err #4)"); CARLA_SAFE_ASSERT_RETURN_INTERNAL_ERR(events.out == nullptr, "Invalid engine internal data (err #5)"); CARLA_SAFE_ASSERT_RETURN_INTERNAL_ERR(clientName != nullptr && clientName[0] != '\0', "Invalid client name"); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH CARLA_SAFE_ASSERT_RETURN_INTERNAL_ERR(plugins == nullptr, "Invalid engine internal data (err #3)"); #endif aboutToClose = false; curPluginCount = 0; nextPluginId = 0; switch (options.processMode) { case ENGINE_PROCESS_MODE_CONTINUOUS_RACK: maxPluginNumber = MAX_RACK_PLUGINS; options.forceStereo = true; break; case ENGINE_PROCESS_MODE_PATCHBAY: maxPluginNumber = MAX_PATCHBAY_PLUGINS; break; case ENGINE_PROCESS_MODE_BRIDGE: maxPluginNumber = 1; break; default: maxPluginNumber = MAX_DEFAULT_PLUGINS; break; } switch (options.processMode) { case ENGINE_PROCESS_MODE_CONTINUOUS_RACK: case ENGINE_PROCESS_MODE_PATCHBAY: case ENGINE_PROCESS_MODE_BRIDGE: events.in = new EngineEvent[kMaxEngineEventInternalCount]; events.out = new EngineEvent[kMaxEngineEventInternalCount]; carla_zeroStructs(events.in, kMaxEngineEventInternalCount); carla_zeroStructs(events.out, kMaxEngineEventInternalCount); break; default: break; } nextPluginId = maxPluginNumber; name = clientName; name.toBasic(); timeInfo.clear(); #if defined(HAVE_LIBLO) && !defined(BUILD_BRIDGE) if (options.oscEnabled) osc.init(clientName, options.oscPortTCP, options.oscPortUDP); #endif #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH plugins = new EnginePluginData[maxPluginNumber]; xruns = 0; dspLoad = 0.0f; #endif nextAction.clearAndReset(); thread.startThread(); return true; } void CarlaEngine::ProtectedData::close() { CARLA_SAFE_ASSERT(name.isNotEmpty()); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH CARLA_SAFE_ASSERT(plugins != nullptr); CARLA_SAFE_ASSERT(nextPluginId == maxPluginNumber); #endif aboutToClose = true; thread.stopThread(500); nextAction.clearAndReset(); #if defined(HAVE_LIBLO) && !defined(BUILD_BRIDGE) osc.close(); #endif aboutToClose = false; curPluginCount = 0; maxPluginNumber = 0; nextPluginId = 0; deletePluginsAsNeeded(); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (plugins != nullptr) { delete[] plugins; plugins = nullptr; } #endif events.clear(); name.clear(); } void CarlaEngine::ProtectedData::initTime(const char* const features) { time.init(bufferSize, sampleRate); #if defined(HAVE_HYLIA) && !defined(BUILD_BRIDGE) const bool linkEnabled = features != nullptr && std::strstr(features, ":link:") != nullptr; time.enableLink(linkEnabled); #else return; // unused (void)features; #endif } // ----------------------------------------------------------------------- void CarlaEngine::ProtectedData::deletePluginsAsNeeded() { for (bool stop;;) { stop = true; for (std::vector::iterator it = pluginsToDelete.begin(); it != pluginsToDelete.end(); ++it) { if (it->use_count() == 1) { stop = false; pluginsToDelete.erase(it); break; } } if (stop) break; } } // ----------------------------------------------------------------------- #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH void CarlaEngine::ProtectedData::doPluginRemove(const uint pluginId) noexcept { CARLA_SAFE_ASSERT_RETURN(curPluginCount > 0,); CARLA_SAFE_ASSERT_RETURN(pluginId < curPluginCount,); --curPluginCount; // move all plugins 1 spot backwards for (uint i=pluginId; i < curPluginCount; ++i) { const CarlaPluginPtr plugin = plugins[i+1].plugin; CARLA_SAFE_ASSERT_BREAK(plugin.get() != nullptr); plugin->setId(i); plugins[i].plugin = plugin; carla_zeroStruct(plugins[i].peaks); } const uint id = curPluginCount; // reset last plugin (now removed) plugins[id].plugin.reset(); carla_zeroFloats(plugins[id].peaks, 4); } void CarlaEngine::ProtectedData::doPluginsSwitch(const uint idA, const uint idB) noexcept { CARLA_SAFE_ASSERT_RETURN(curPluginCount >= 2,); CARLA_SAFE_ASSERT_RETURN(idA < curPluginCount,); CARLA_SAFE_ASSERT_RETURN(idB < curPluginCount,); const CarlaPluginPtr pluginA = plugins[idA].plugin; CARLA_SAFE_ASSERT_RETURN(pluginA.get() != nullptr,); const CarlaPluginPtr pluginB = plugins[idB].plugin; CARLA_SAFE_ASSERT_RETURN(pluginB.get() != nullptr,); pluginA->setId(idB); plugins[idA].plugin = pluginB; pluginB->setId(idA); plugins[idB].plugin = pluginA; } #endif void CarlaEngine::ProtectedData::doNextPluginAction() noexcept { if (! nextAction.mutex.tryLock()) return; const EnginePostAction opcode = nextAction.opcode; const bool needsPost = nextAction.needsPost; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH const uint pluginId = nextAction.pluginId; const uint value = nextAction.value; #endif nextAction.opcode = kEnginePostActionNull; nextAction.pluginId = 0; nextAction.value = 0; nextAction.needsPost = false; nextAction.mutex.unlock(); switch (opcode) { case kEnginePostActionNull: break; case kEnginePostActionZeroCount: curPluginCount = 0; break; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH case kEnginePostActionRemovePlugin: doPluginRemove(pluginId); break; case kEnginePostActionSwitchPlugins: doPluginsSwitch(pluginId, value); break; #endif } if (needsPost) { if (nextAction.sem != nullptr) carla_sem_post(*nextAction.sem); nextAction.postDone = true; } } // ----------------------------------------------------------------------- // PendingRtEventsRunner static int64_t getTimeInMicroseconds() noexcept { #if defined(CARLA_OS_MAC) || defined(CARLA_OS_WIN) struct timeval tv; gettimeofday(&tv, nullptr); return (tv.tv_sec * 1000000) + tv.tv_usec; #else struct timespec ts; # ifdef CLOCK_MONOTONIC_RAW clock_gettime(CLOCK_MONOTONIC_RAW, &ts); # else clock_gettime(CLOCK_MONOTONIC, &ts); # endif return (ts.tv_sec * 1000000) + (ts.tv_nsec / 1000); #endif } PendingRtEventsRunner::PendingRtEventsRunner(CarlaEngine* const engine, const uint32_t frames, const bool calcDSPLoad) noexcept : pData(engine->pData), prevTime(calcDSPLoad ? getTimeInMicroseconds() : 0) { pData->time.preProcess(frames); } PendingRtEventsRunner::~PendingRtEventsRunner() noexcept { pData->doNextPluginAction(); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (prevTime > 0) { const int64_t newTime = getTimeInMicroseconds(); if (newTime < prevTime) return; const double timeDiff = static_cast(newTime - prevTime) / 1000000.0; const double maxTime = pData->bufferSize / pData->sampleRate; const float dspLoad = static_cast(timeDiff / maxTime) * 100.0f; if (dspLoad > pData->dspLoad) pData->dspLoad = std::min(100.0f, dspLoad); else pData->dspLoad *= static_cast(1.0 - maxTime) + 1e-12f; } #endif } // ----------------------------------------------------------------------- // ScopedActionLock ScopedActionLock::ScopedActionLock(CarlaEngine* const engine, const EnginePostAction action, const uint pluginId, const uint value) noexcept : pData(engine->pData) { CARLA_SAFE_ASSERT_RETURN(action != kEnginePostActionNull,); { const CarlaMutexLocker cml(pData->nextAction.mutex); CARLA_SAFE_ASSERT_RETURN(pData->nextAction.opcode == kEnginePostActionNull,); pData->nextAction.opcode = action; pData->nextAction.pluginId = pluginId; pData->nextAction.value = value; pData->nextAction.needsPost = engine->isRunning(); pData->nextAction.postDone = false; } #ifdef BUILD_BRIDGE #define ACTION_MSG_PREFIX "Bridge: " #else #define ACTION_MSG_PREFIX "" #endif if (pData->nextAction.needsPost) { #if defined(DEBUG) || defined(BUILD_BRIDGE) // block wait for unlock on processing side carla_stdout(ACTION_MSG_PREFIX "ScopedPluginAction(%i) - blocking START", pluginId); #endif bool engineStoppedWhileWaiting = false; if (! pData->nextAction.postDone) { for (int i = 10; --i >= 0;) { if (pData->nextAction.sem != nullptr) { if (carla_sem_timedwait(*pData->nextAction.sem, 200)) break; } else { carla_msleep(200); } if (! engine->isRunning()) { engineStoppedWhileWaiting = true; break; } } } #if defined(DEBUG) || defined(BUILD_BRIDGE) carla_stdout(ACTION_MSG_PREFIX "ScopedPluginAction(%i) - blocking DONE", pluginId); #endif // check if anything went wrong... if (! pData->nextAction.postDone) { bool needsCorrection = false; { const CarlaMutexLocker cml(pData->nextAction.mutex); if (pData->nextAction.opcode != kEnginePostActionNull) { needsCorrection = true; pData->nextAction.needsPost = false; } } if (needsCorrection) { pData->doNextPluginAction(); if (! engineStoppedWhileWaiting) carla_stderr2(ACTION_MSG_PREFIX "Failed to wait for engine, is audio not running?"); } } } else { pData->doNextPluginAction(); } } ScopedActionLock::~ScopedActionLock() noexcept { CARLA_SAFE_ASSERT(pData->nextAction.opcode == kEnginePostActionNull); } // ----------------------------------------------------------------------- // ScopedThreadStopper ScopedThreadStopper::ScopedThreadStopper(CarlaEngine* const e) noexcept : engine(e), pData(e->pData) { pData->thread.stopThread(500); } ScopedThreadStopper::~ScopedThreadStopper() noexcept { if (engine->isRunning() && ! pData->aboutToClose) pData->thread.startThread(); } // ----------------------------------------------------------------------- // ScopedEngineEnvironmentLocker ScopedEngineEnvironmentLocker::ScopedEngineEnvironmentLocker(CarlaEngine* const engine) noexcept : pData(engine->pData) { pData->envMutex.lock(); } ScopedEngineEnvironmentLocker::~ScopedEngineEnvironmentLocker() noexcept { pData->envMutex.unlock(); } // ----------------------------------------------------------------------- CARLA_BACKEND_END_NAMESPACE Carla-2.4.2/source/backend/engine/CarlaEngineInternal.hpp000066400000000000000000000250461420416754300232700ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2020 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #ifndef CARLA_ENGINE_INTERNAL_HPP_INCLUDED #define CARLA_ENGINE_INTERNAL_HPP_INCLUDED #include "CarlaEngineThread.hpp" #include "CarlaEngineUtils.hpp" #include "CarlaPlugin.hpp" #include "LinkedList.hpp" #ifndef BUILD_BRIDGE # include "CarlaEngineOsc.hpp" # include "hylia/hylia.h" #endif #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH # include "water/processors/AudioProcessorGraph.h" # include "water/containers/Array.h" # include "water/memory/Atomic.h" #endif #include // FIXME only use CARLA_PREVENT_HEAP_ALLOCATION for structs // maybe separate macro typedef struct _jack_position jack_position_t; struct carla_sem_t; CARLA_BACKEND_START_NAMESPACE // ----------------------------------------------------------------------- // Engine helper macro, sets lastError and returns false/NULL #define CARLA_SAFE_ASSERT_RETURN_ERR(cond, err) if (! (cond)) { carla_safe_assert(#cond, __FILE__, __LINE__); setLastError(err); return false; } #define CARLA_SAFE_ASSERT_RETURN_ERRN(cond, err) if (! (cond)) { carla_safe_assert(#cond, __FILE__, __LINE__); setLastError(err); return nullptr; } #define CARLA_SAFE_EXCEPTION_RETURN_ERR(excptMsg, errMsg) catch(...) { carla_safe_exception(excptMsg, __FILE__, __LINE__); setLastError(errMsg); return false; } #define CARLA_SAFE_EXCEPTION_RETURN_ERRN(excptMsg, errMsg) catch(...) { carla_safe_exception(excptMsg, __FILE__, __LINE__); setLastError(errMsg); return nullptr; } // ----------------------------------------------------------------------- // InternalEvents struct EngineInternalEvents { EngineEvent* in; EngineEvent* out; EngineInternalEvents() noexcept; ~EngineInternalEvents() noexcept; void clear() noexcept; CARLA_DECLARE_NON_COPY_STRUCT(EngineInternalEvents) }; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // ----------------------------------------------------------------------- // InternalGraph struct RackGraph; class PatchbayGraph; class EngineInternalGraph { public: EngineInternalGraph(CarlaEngine* engine) noexcept; ~EngineInternalGraph() noexcept; void create(uint32_t audioIns, uint32_t audioOuts, uint32_t cvIns, uint32_t cvOuts); void destroy() noexcept; void setBufferSize(uint32_t bufferSize); void setSampleRate(double sampleRate); void setOffline(bool offline); bool isRack() const noexcept { return fIsRack; } bool isReady() const noexcept { return fIsReady; } uint32_t getNumAudioOuts() const noexcept { return fNumAudioOuts; } RackGraph* getRackGraph() const noexcept; PatchbayGraph* getPatchbayGraph() const noexcept; PatchbayGraph* getPatchbayGraphOrNull() const noexcept; void process(CarlaEngine::ProtectedData* data, const float* const* inBuf, float* const* outBuf, uint32_t frames); // special direct process with connections already handled, used in JACK and Plugin void processRack(CarlaEngine::ProtectedData* data, const float* inBuf[2], float* outBuf[2], uint32_t frames); // used for internal patchbay mode void addPlugin(CarlaPluginPtr plugin); void replacePlugin(CarlaPluginPtr oldPlugin, CarlaPluginPtr newPlugin); void renamePlugin(CarlaPluginPtr plugin, const char* newName); void switchPlugins(CarlaPluginPtr pluginA, CarlaPluginPtr pluginB); void removePlugin(CarlaPluginPtr plugin); void removeAllPlugins(); bool isUsingExternalHost() const noexcept; bool isUsingExternalOSC() const noexcept; void setUsingExternalHost(bool usingExternal) noexcept; void setUsingExternalOSC(bool usingExternal) noexcept; private: bool fIsRack; uint32_t fNumAudioOuts; volatile bool fIsReady; union { RackGraph* fRack; PatchbayGraph* fPatchbay; }; CarlaEngine* const kEngine; CARLA_PREVENT_HEAP_ALLOCATION CARLA_DECLARE_NON_COPY_STRUCT(EngineInternalGraph) }; #endif // BUILD_BRIDGE_ALTERNATIVE_ARCH // ----------------------------------------------------------------------- // InternalTime class EngineInternalTime { public: EngineInternalTime(EngineTimeInfo& timeInfo, const EngineTransportMode& transportMode) noexcept; void init(uint32_t bufferSize, double sampleRate); void updateAudioValues(uint32_t bufferSize, double sampleRate); void enableLink(bool enable); void setBPM(double bpm); void setNeedsReset() noexcept; void pause() noexcept; void relocate(uint64_t frame) noexcept; private: double beatsPerBar; double beatsPerMinute; double bufferSize; double sampleRate; bool needsReset; uint64_t nextFrame; #ifndef BUILD_BRIDGE struct Hylia { bool enabled; hylia_t* instance; hylia_time_info_t timeInfo; Hylia(); ~Hylia(); CARLA_DECLARE_NON_COPY_STRUCT(Hylia) } hylia; #endif EngineTimeInfo& timeInfo; const EngineTransportMode& transportMode; friend class PendingRtEventsRunner; void preProcess(uint32_t numFrames); void fillEngineTimeInfo(uint32_t newFrames) noexcept; friend class CarlaEngineJack; void fillJackTimeInfo(jack_position_t* pos, uint32_t newFrames) noexcept; CARLA_DECLARE_NON_COPY_STRUCT(EngineInternalTime) }; // ----------------------------------------------------------------------- // EngineNextAction enum EnginePostAction { kEnginePostActionNull = 0, kEnginePostActionZeroCount, // set curPluginCount to 0 #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH kEnginePostActionRemovePlugin, // remove a plugin kEnginePostActionSwitchPlugins // switch between 2 plugins #endif }; struct EngineNextAction { EnginePostAction opcode; uint pluginId; uint value; CarlaMutex mutex; bool needsPost; volatile bool postDone; carla_sem_t* sem; EngineNextAction() noexcept; ~EngineNextAction() noexcept; void clearAndReset() noexcept; CARLA_DECLARE_NON_COPY_STRUCT(EngineNextAction) }; // ----------------------------------------------------------------------- // EnginePluginData struct EnginePluginData { CarlaPluginPtr plugin; float peaks[4]; EnginePluginData() : plugin(nullptr), #ifdef CARLA_PROPER_CPP11_SUPPORT peaks{0.0f, 0.0f, 0.0f, 0.0f} {} #else peaks() { carla_zeroStruct(peaks); } #endif }; // ----------------------------------------------------------------------- // CarlaEngineProtectedData struct CarlaEngine::ProtectedData { CarlaEngineThread thread; #if defined(HAVE_LIBLO) && !defined(BUILD_BRIDGE) CarlaEngineOsc osc; #endif EngineCallbackFunc callback; void* callbackPtr; FileCallbackFunc fileCallback; void* fileCallbackPtr; bool actionCanceled; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH bool loadingProject; bool ignoreClientPrefix; // backwards compat only CarlaString currentProjectFilename; CarlaString currentProjectFolder; #endif uint32_t bufferSize; double sampleRate; bool aboutToClose; // don't re-activate thread if true int isIdling; // don't allow any operations while idling uint curPluginCount; // number of plugins loaded (0...max) uint maxPluginNumber; // number of plugins allowed (0, 16, 99 or 255) uint nextPluginId; // invalid if == maxPluginNumber CarlaMutex envMutex; CarlaString lastError; CarlaString name; EngineOptions options; EngineTimeInfo timeInfo; #ifdef BUILD_BRIDGE_ALTERNATIVE_ARCH EnginePluginData plugins[1]; #else EnginePluginData* plugins; uint32_t xruns; float dspLoad; #endif float peaks[4]; std::vector pluginsToDelete; EngineInternalEvents events; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH EngineInternalGraph graph; #endif EngineInternalTime time; EngineNextAction nextAction; // ------------------------------------------------------------------- ProtectedData(CarlaEngine* engine); ~ProtectedData(); // ------------------------------------------------------------------- bool init(const char* clientName); void close(); void initTime(const char* features); // ------------------------------------------------------------------- void deletePluginsAsNeeded(); // ------------------------------------------------------------------- void doPluginRemove(uint pluginId) noexcept; void doPluginsSwitch(uint idA, uint idB) noexcept; void doNextPluginAction() noexcept; // ------------------------------------------------------------------- #ifdef CARLA_PROPER_CPP11_SUPPORT ProtectedData() = delete; CARLA_DECLARE_NON_COPY_STRUCT(ProtectedData) #endif }; // ----------------------------------------------------------------------- class PendingRtEventsRunner { public: PendingRtEventsRunner(CarlaEngine* engine, uint32_t numFrames, bool calcDSPLoad = false) noexcept; ~PendingRtEventsRunner() noexcept; private: CarlaEngine::ProtectedData* const pData; int64_t prevTime; CARLA_PREVENT_HEAP_ALLOCATION CARLA_DECLARE_NON_COPY_CLASS(PendingRtEventsRunner) }; // ----------------------------------------------------------------------- class ScopedActionLock { public: ScopedActionLock(CarlaEngine* engine, EnginePostAction action, uint pluginId, uint value) noexcept; ~ScopedActionLock() noexcept; private: CarlaEngine::ProtectedData* const pData; CARLA_PREVENT_HEAP_ALLOCATION CARLA_DECLARE_NON_COPY_CLASS(ScopedActionLock) }; // ----------------------------------------------------------------------- class ScopedThreadStopper { public: ScopedThreadStopper(CarlaEngine* engine) noexcept; ~ScopedThreadStopper() noexcept; private: CarlaEngine* const engine; CarlaEngine::ProtectedData* const pData; CARLA_PREVENT_HEAP_ALLOCATION CARLA_DECLARE_NON_COPY_CLASS(ScopedThreadStopper) }; // ----------------------------------------------------------------------- CARLA_BACKEND_END_NAMESPACE #endif // CARLA_ENGINE_INTERNAL_HPP_INCLUDED Carla-2.4.2/source/backend/engine/CarlaEngineJack.cpp000066400000000000000000005140111420416754300223520ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2021 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "CarlaEngineClient.hpp" #include "CarlaEngineInit.hpp" #include "CarlaEngineInternal.hpp" #include "CarlaPlugin.hpp" #include "CarlaBackendUtils.hpp" #include "CarlaEngineUtils.hpp" #include "CarlaMathUtils.hpp" #include "CarlaMIDI.h" #include "CarlaPatchbayUtils.hpp" #include "CarlaStringList.hpp" #include "jackey.h" #ifdef USING_JUCE # if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wconversion" # pragma GCC diagnostic ignored "-Weffc++" # pragma GCC diagnostic ignored "-Wsign-conversion" # pragma GCC diagnostic ignored "-Wundef" # endif # include "AppConfig.h" # include "juce_events/juce_events.h" # if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) # pragma GCC diagnostic pop # endif #endif #ifdef __SSE2_MATH__ # include #endif // must be last #include "jackbridge/JackBridge.hpp" #ifdef JACKBRIDGE_DIRECT # define JackPortIsControlVoltage 0x100 #endif #define URI_CANVAS_ICON "http://kxstudio.sf.net/ns/canvas/icon" #define URI_MAIN_CLIENT_NAME "https://kx.studio/ns/carla/main-client-name" #define URI_POSITION "https://kx.studio/ns/carla/position" #define URI_PLUGIN_ICON "https://kx.studio/ns/carla/plugin-icon" #define URI_PLUGIN_ID "https://kx.studio/ns/carla/plugin-id" #define URI_TYPE_INTEGER "http://www.w3.org/2001/XMLSchema#integer" #define URI_TYPE_STRING "text/plain" CARLA_BACKEND_START_NAMESPACE class CarlaEngineJack; class CarlaEngineJackClient; #ifndef BUILD_BRIDGE struct CarlaJackPortHints { bool isHardware : 1; bool isInput : 1; bool isAudio : 1; bool isMIDI : 1; bool isCV : 1; bool isOSC : 1; // NOTE: assumes fThreadSafeMetadataMutex lock done from caller static CarlaJackPortHints fromPort(const jack_port_t* const jackPort) { CarlaJackPortHints ph = { false, false, false, false, false, false }; const int portFlags = jackbridge_port_flags(jackPort); const char* const portType = jackbridge_port_type(jackPort); ph.isHardware = portFlags & JackPortIsPhysical; ph.isInput = portFlags & JackPortIsInput; ph.isAudio = portType != nullptr && std::strcmp(portType, JACK_DEFAULT_AUDIO_TYPE) == 0; ph.isMIDI = portType != nullptr && std::strcmp(portType, JACK_DEFAULT_MIDI_TYPE) == 0; ph.isCV = false; ph.isOSC = false; if (ph.isAudio && portFlags & JackPortIsControlVoltage) { ph.isAudio = false; ph.isCV = true; } if (const jack_uuid_t uuid = jackbridge_port_uuid(jackPort)) { char* value = nullptr; char* type = nullptr; if (jackbridge_get_property(uuid, JACKEY_SIGNAL_TYPE, &value, &type) && value != nullptr && type != nullptr && std::strcmp(type, URI_TYPE_STRING) == 0) { ph.isCV = (std::strcmp(value, "CV") == 0); ph.isOSC = (std::strcmp(value, "OSC") == 0); if (ph.isCV) ph.isAudio = false; if (ph.isOSC) ph.isMIDI = false; jackbridge_free(value); jackbridge_free(type); } } return ph; } }; #endif // ----------------------------------------------------------------------- // Fallback data #ifndef BUILD_BRIDGE static const GroupNameToId kGroupNameToIdFallback = { 0, { '\0' } }; static /* */ PortNameToId kPortNameToIdFallbackNC = { 0, 0, { '\0' }, { '\0' } }; static const PortNameToId kPortNameToIdFallback = { 0, 0, { '\0' }, { '\0' } }; static const ConnectionToId kConnectionToIdFallback = { 0, 0, 0, 0, 0 }; #endif static EngineEvent kFallbackJackEngineEvent = { kEngineEventTypeNull, 0, 0, {{ kEngineControlEventTypeNull, 0, -1, 0.0f, true }} }; // ----------------------------------------------------------------------- // Carla Engine Port removal helper class CarlaEngineJackAudioPort; class CarlaEngineJackCVPort; class CarlaEngineJackEventPort; struct JackPortDeletionCallback { virtual ~JackPortDeletionCallback() noexcept {} virtual void jackAudioPortDeleted(CarlaEngineJackAudioPort* const) noexcept = 0; virtual void jackCVPortDeleted(CarlaEngineJackCVPort* const) noexcept = 0; virtual void jackEventPortDeleted(CarlaEngineJackEventPort* const) noexcept = 0; }; // ----------------------------------------------------------------------- // Carla Engine JACK-Audio port class CarlaEngineJackAudioPort : public CarlaEngineAudioPort { public: CarlaEngineJackAudioPort(const CarlaEngineClient& client, const bool isInputPort, const uint32_t indexOffset, jack_client_t* const jackClient, jack_port_t* const jackPort, CarlaRecursiveMutex& rmutex, JackPortDeletionCallback* const delCallback) noexcept : CarlaEngineAudioPort(client, isInputPort, indexOffset), fJackClient(jackClient), fJackPort(jackPort), fThreadSafeMetadataMutex(rmutex), kDeletionCallback(delCallback) { carla_debug("CarlaEngineJackAudioPort::CarlaEngineJackAudioPort(%s, %p, %p)", bool2str(isInputPort), jackClient, jackPort); switch (kClient.getEngine().getProccessMode()) { case ENGINE_PROCESS_MODE_SINGLE_CLIENT: case ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS: CARLA_SAFE_ASSERT_RETURN(jackClient != nullptr && jackPort != nullptr,); { const CarlaRecursiveMutexLocker crml(fThreadSafeMetadataMutex); if (const jack_uuid_t uuid = jackbridge_port_uuid(jackPort)) jackbridge_set_property(jackClient, uuid, JACKEY_SIGNAL_TYPE, "AUDIO", URI_TYPE_STRING); } break; default: CARLA_SAFE_ASSERT(jackClient == nullptr && jackPort == nullptr); break; } } ~CarlaEngineJackAudioPort() noexcept override { carla_debug("CarlaEngineJackAudioPort::~CarlaEngineJackAudioPort()"); if (fJackClient != nullptr && fJackPort != nullptr) { try { jackbridge_port_unregister(fJackClient, fJackPort); } CARLA_SAFE_EXCEPTION("Audio port unregister"); fJackClient = nullptr; fJackPort = nullptr; } if (kDeletionCallback != nullptr) kDeletionCallback->jackAudioPortDeleted(this); } void initBuffer() noexcept override { if (fJackPort == nullptr) return CarlaEngineAudioPort::initBuffer(); const uint32_t bufferSize(kClient.getEngine().getBufferSize()); try { fBuffer = (float*)jackbridge_port_get_buffer(fJackPort, bufferSize); } catch(...) { fBuffer = nullptr; return; } if (! kIsInput) carla_zeroFloats(fBuffer, bufferSize); } void invalidate() noexcept { fJackClient = nullptr; fJackPort = nullptr; } void setMetaData(const char* const key, const char* const value, const char* const type) override { if (fJackPort == nullptr) return CarlaEngineAudioPort::setMetaData(key, value, type); const CarlaRecursiveMutexLocker crml(fThreadSafeMetadataMutex); try { if (const jack_uuid_t uuid = jackbridge_port_uuid(fJackPort)) jackbridge_set_property(fJackClient, uuid, key, value, type); } CARLA_SAFE_EXCEPTION("Port setMetaData"); } private: jack_client_t* fJackClient; jack_port_t* fJackPort; CarlaRecursiveMutex& fThreadSafeMetadataMutex; JackPortDeletionCallback* const kDeletionCallback; friend class CarlaEngineJackClient; CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaEngineJackAudioPort) }; // ----------------------------------------------------------------------- // Carla Engine JACK-CV port class CarlaEngineJackCVPort : public CarlaEngineCVPort { public: CarlaEngineJackCVPort(const CarlaEngineClient& client, const bool isInputPort, const uint32_t indexOffset, jack_client_t* const jackClient, jack_port_t* const jackPort, CarlaRecursiveMutex& rmutex, JackPortDeletionCallback* const delCallback) noexcept : CarlaEngineCVPort(client, isInputPort, indexOffset), fJackClient(jackClient), fJackPort(jackPort), fThreadSafeMetadataMutex(rmutex), kDeletionCallback(delCallback) { carla_debug("CarlaEngineJackCVPort::CarlaEngineJackCVPort(%s, %p, %p)", bool2str(isInputPort), jackClient, jackPort); switch (kClient.getEngine().getProccessMode()) { case ENGINE_PROCESS_MODE_SINGLE_CLIENT: case ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS: CARLA_SAFE_ASSERT_RETURN(jackClient != nullptr && jackPort != nullptr,); { const CarlaRecursiveMutexLocker crml(fThreadSafeMetadataMutex); if (const jack_uuid_t uuid = jackbridge_port_uuid(jackPort)) jackbridge_set_property(jackClient, uuid, JACKEY_SIGNAL_TYPE, "CV", URI_TYPE_STRING); } break; default: CARLA_SAFE_ASSERT(jackClient == nullptr && jackPort == nullptr); break; } } ~CarlaEngineJackCVPort() noexcept override { carla_debug("CarlaEngineJackCVPort::~CarlaEngineJackCVPort()"); if (fJackClient != nullptr && fJackPort != nullptr) { try { jackbridge_port_unregister(fJackClient, fJackPort); } CARLA_SAFE_EXCEPTION("CV port unregister"); fJackClient = nullptr; fJackPort = nullptr; } if (kDeletionCallback != nullptr) kDeletionCallback->jackCVPortDeleted(this); } void initBuffer() noexcept override { if (fJackPort == nullptr) return CarlaEngineCVPort::initBuffer(); const uint32_t bufferSize(kClient.getEngine().getBufferSize()); try { fBuffer = (float*)jackbridge_port_get_buffer(fJackPort, bufferSize); } catch(...) { fBuffer = nullptr; return; } if (! kIsInput) carla_zeroFloats(fBuffer, bufferSize); } void invalidate() noexcept { fJackClient = nullptr; fJackPort = nullptr; } void setMetaData(const char* const key, const char* const value, const char* const type) override { if (fJackPort == nullptr) return CarlaEngineCVPort::setMetaData(key, value, type); const CarlaRecursiveMutexLocker crml(fThreadSafeMetadataMutex); try { if (const jack_uuid_t uuid = jackbridge_port_uuid(fJackPort)) jackbridge_set_property(fJackClient, uuid, key, value, type); } CARLA_SAFE_EXCEPTION("Port setMetaData"); } private: jack_client_t* fJackClient; jack_port_t* fJackPort; CarlaRecursiveMutex& fThreadSafeMetadataMutex; JackPortDeletionCallback* const kDeletionCallback; friend class CarlaEngineJackClient; CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaEngineJackCVPort) }; // ----------------------------------------------------------------------- // Carla Engine JACK-Event port class CarlaEngineJackEventPort : public CarlaEngineEventPort { public: CarlaEngineJackEventPort(const CarlaEngineClient& client, const bool isInputPort, const uint32_t indexOffset, jack_client_t* const jackClient, jack_port_t* const jackPort, CarlaRecursiveMutex& rmutex, JackPortDeletionCallback* const delCallback) noexcept : CarlaEngineEventPort(client, isInputPort, indexOffset), fJackClient(jackClient), fJackPort(jackPort), fJackBuffer(nullptr), fRetEvent(kFallbackJackEngineEvent), #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH fCvSourceEvents(nullptr), fCvSourceEventCount(0), #endif fThreadSafeMetadataMutex(rmutex), kDeletionCallback(delCallback) { carla_debug("CarlaEngineJackEventPort::CarlaEngineJackEventPort(%s, %p, %p)", bool2str(isInputPort), jackClient, jackPort); switch (kClient.getEngine().getProccessMode()) { case ENGINE_PROCESS_MODE_SINGLE_CLIENT: case ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS: CARLA_SAFE_ASSERT_RETURN(jackClient != nullptr && jackPort != nullptr,); break; default: CARLA_SAFE_ASSERT(jackClient == nullptr && jackPort == nullptr); break; } } ~CarlaEngineJackEventPort() noexcept override { carla_debug("CarlaEngineJackEventPort::~CarlaEngineJackEventPort()"); if (fJackClient != nullptr && fJackPort != nullptr) { try { jackbridge_port_unregister(fJackClient, fJackPort); } CARLA_SAFE_EXCEPTION("Event port unregister"); fJackClient = nullptr; fJackPort = nullptr; } if (kDeletionCallback != nullptr) kDeletionCallback->jackEventPortDeleted(this); } void initBuffer() noexcept override { if (fJackPort == nullptr) return CarlaEngineEventPort::initBuffer(); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH fCvSourceEvents = nullptr; fCvSourceEventCount = 0; #endif try { fJackBuffer = jackbridge_port_get_buffer(fJackPort, kClient.getEngine().getBufferSize()); } catch(...) { fJackBuffer = nullptr; return; } if (! kIsInput) jackbridge_midi_clear_buffer(fJackBuffer); } #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH void setCvSourceEvents(EngineEvent* const events, const uint32_t eventCount) noexcept { fCvSourceEvents = events; fCvSourceEventCount = eventCount; } #endif uint32_t getEventCount() const noexcept override { if (fJackPort == nullptr) return CarlaEngineEventPort::getEventCount(); CARLA_SAFE_ASSERT_RETURN(kIsInput, 0); CARLA_SAFE_ASSERT_RETURN(fJackBuffer != nullptr, 0); try { return jackbridge_midi_get_event_count(fJackBuffer) #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH + fCvSourceEventCount #endif ; } CARLA_SAFE_EXCEPTION_RETURN("jack_midi_get_event_count", 0); } EngineEvent& getEvent(const uint32_t index) const noexcept override { if (fJackPort == nullptr) return CarlaEngineEventPort::getEvent(index); CARLA_SAFE_ASSERT_RETURN(kIsInput, kFallbackJackEngineEvent); CARLA_SAFE_ASSERT_RETURN(fJackBuffer != nullptr, kFallbackJackEngineEvent); return getEventUnchecked(index); } EngineEvent& getEventUnchecked(uint32_t index) const noexcept override { #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (index < fCvSourceEventCount) return fCvSourceEvents[index]; index -= fCvSourceEventCount; #endif jack_midi_event_t jackEvent; bool test = false; try { test = jackbridge_midi_event_get(&jackEvent, fJackBuffer, index); } CARLA_SAFE_EXCEPTION_RETURN("jack_midi_event_get", kFallbackJackEngineEvent); if (! test) return kFallbackJackEngineEvent; CARLA_SAFE_ASSERT_RETURN(jackEvent.size < 0xFF /* uint8_t max */, kFallbackJackEngineEvent); uint8_t port; if (kIndexOffset < 0xFF /* uint8_t max */) { port = static_cast(kIndexOffset); } else { port = 0; carla_safe_assert_uint("kIndexOffset < 0xFF", __FILE__, __LINE__, kIndexOffset); } fRetEvent.time = jackEvent.time; fRetEvent.fillFromMidiData(static_cast(jackEvent.size), jackEvent.buffer, port); return fRetEvent; } bool writeControlEvent(const uint32_t time, const uint8_t channel, const EngineControlEventType type, const uint16_t param, const int8_t midiValue, const float value) noexcept override { if (fJackPort == nullptr) return CarlaEngineEventPort::writeControlEvent(time, channel, type, param, midiValue, value); CARLA_SAFE_ASSERT_RETURN(! kIsInput, false); CARLA_SAFE_ASSERT_RETURN(fJackBuffer != nullptr, false); CARLA_SAFE_ASSERT_RETURN(type != kEngineControlEventTypeNull, false); CARLA_SAFE_ASSERT_RETURN(channel < MAX_MIDI_CHANNELS, false); CARLA_SAFE_ASSERT_RETURN(param < MAX_MIDI_VALUE, false); CARLA_SAFE_ASSERT(value >= 0.0f && value <= 1.0f); if (type == kEngineControlEventTypeParameter) { CARLA_SAFE_ASSERT(! MIDI_IS_CONTROL_BANK_SELECT(param)); } uint8_t data[3] = { 0, 0, 0 }; EngineControlEvent ctrlEvent = { type, param, midiValue, value, false }; const uint8_t size = ctrlEvent.convertToMidiData(channel, data); if (size == 0) return false; try { return jackbridge_midi_event_write(fJackBuffer, time, data, size); } CARLA_SAFE_EXCEPTION_RETURN("jack_midi_event_write", false); } bool writeMidiEvent(const uint32_t time, const uint8_t channel, const uint8_t size, const uint8_t* const data) noexcept override { if (fJackPort == nullptr) return CarlaEngineEventPort::writeMidiEvent(time, channel, size, data); CARLA_SAFE_ASSERT_RETURN(! kIsInput, false); CARLA_SAFE_ASSERT_RETURN(fJackBuffer != nullptr, false); CARLA_SAFE_ASSERT_RETURN(channel < MAX_MIDI_CHANNELS, false); CARLA_SAFE_ASSERT_RETURN(size > 0, false); CARLA_SAFE_ASSERT_RETURN(data != nullptr, false); jack_midi_data_t jdata[size]; jdata[0] = static_cast(MIDI_GET_STATUS_FROM_DATA(data) + channel); for (uint8_t i=1; i < size; ++i) jdata[i] = data[i]; try { return jackbridge_midi_event_write(fJackBuffer, time, jdata, size); } CARLA_SAFE_EXCEPTION_RETURN("jack_midi_event_write", false); } void invalidate() noexcept { fJackClient = nullptr; fJackPort = nullptr; } void setMetaData(const char* const key, const char* const value, const char* const type) override { if (fJackPort == nullptr) return CarlaEngineEventPort::setMetaData(key, value, type); const CarlaRecursiveMutexLocker crml(fThreadSafeMetadataMutex); try { if (const jack_uuid_t uuid = jackbridge_port_uuid(fJackPort)) jackbridge_set_property(fJackClient, uuid, key, value, type); } CARLA_SAFE_EXCEPTION("Port setMetaData"); } private: jack_client_t* fJackClient; jack_port_t* fJackPort; void* fJackBuffer; mutable EngineEvent fRetEvent; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH EngineEvent* fCvSourceEvents; uint32_t fCvSourceEventCount; #endif CarlaRecursiveMutex& fThreadSafeMetadataMutex; JackPortDeletionCallback* const kDeletionCallback; friend class CarlaEngineJackClient; CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaEngineJackEventPort) }; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // ----------------------------------------------------------------------- // Jack Engine CV source ports class CarlaEngineJackCVSourcePorts : public CarlaEngineCVSourcePorts { public: CarlaEngineJackCVSourcePorts(const bool useClient) : CarlaEngineCVSourcePorts(), fUseClient(useClient), fBuffer(nullptr), fBufferToDeleteLater(nullptr) {} ~CarlaEngineJackCVSourcePorts() override { if (fBufferToDeleteLater != nullptr) { delete[] fBufferToDeleteLater; fBufferToDeleteLater = nullptr; } } bool addCVSource(CarlaEngineCVPort* const port, const uint32_t portIndexOffset, const bool reconfigureNow) override { if (! fUseClient) return CarlaEngineCVSourcePorts::addCVSource(port, portIndexOffset, reconfigureNow); const CarlaRecursiveMutexLocker crml(pData->rmutex); if (! CarlaEngineCVSourcePorts::addCVSource(port, portIndexOffset, reconfigureNow)) return false; if (pData->cvs.size() == 1 && fBuffer == nullptr) { EngineEvent* const buffer = new EngineEvent[kMaxEngineEventInternalCount]; carla_zeroStructs(buffer, kMaxEngineEventInternalCount); fBuffer = buffer; } return true; } bool removeCVSource(const uint32_t portIndexOffset) override { if (! fUseClient) return CarlaEngineCVSourcePorts::removeCVSource(portIndexOffset); const CarlaRecursiveMutexLocker crml(pData->rmutex); if (! CarlaEngineCVSourcePorts::removeCVSource(portIndexOffset)) return false; if (pData->cvs.size() == 0 && fBuffer != nullptr) { if (fBufferToDeleteLater != nullptr) delete[] fBufferToDeleteLater; fBufferToDeleteLater = fBuffer; fBuffer = nullptr; } return true; } void initPortBuffers(const float* const* const buffers, const uint32_t frames, const bool sampleAccurate, CarlaEngineEventPort* const eventPort) override { if (! fUseClient) return CarlaEngineCVSourcePorts::initPortBuffers(buffers, frames, sampleAccurate, eventPort); CARLA_SAFE_ASSERT_RETURN(buffers != nullptr,); CARLA_SAFE_ASSERT_RETURN(eventPort != nullptr,); const CarlaRecursiveMutexTryLocker crmtl(pData->rmutex); if (! crmtl.wasLocked()) return; const int numCVs = pData->cvs.size(); if (numCVs == 0) return; EngineEvent* const buffer = fBuffer; CARLA_SAFE_ASSERT_RETURN(buffer != nullptr,); uint32_t eventCount = 0; float v, min, max; for (int i = 0; i < numCVs && eventCount < kMaxEngineEventInternalCount; ++i) { CarlaEngineEventCV& ecv(pData->cvs.getReference(i)); CARLA_SAFE_ASSERT_CONTINUE(ecv.cvPort != nullptr); CARLA_SAFE_ASSERT_CONTINUE(buffers[i] != nullptr); float previousValue = ecv.previousValue; ecv.cvPort->getRange(min, max); v = buffers[i][0]; if (carla_isNotEqual(v, previousValue)) { previousValue = v; EngineEvent& event(buffer[eventCount++]); event.type = kEngineEventTypeControl; event.time = 0; event.channel = kEngineEventNonMidiChannel; event.ctrl.type = kEngineControlEventTypeParameter; event.ctrl.param = static_cast(ecv.indexOffset); event.ctrl.midiValue = -1; event.ctrl.normalizedValue = carla_fixedValue(0.0f, 1.0f, (v - min) / (max - min)); } ecv.previousValue = previousValue; } if (eventCount != 0) if (CarlaEngineJackEventPort* const jackEventPort = dynamic_cast(eventPort)) jackEventPort->setCvSourceEvents(buffer, eventCount); } CarlaRecursiveMutex& getMutex() const noexcept { return pData->rmutex; } uint32_t getPortCount() const noexcept { return static_cast(pData->cvs.size()); } CarlaEngineCVPort* getPort(const uint32_t portIndexOffset) const { const int ioffset = static_cast(portIndexOffset); return pData->cvs[ioffset].cvPort; } void resetGraphAndPlugin() noexcept { pData->graph = nullptr; pData->plugin.reset(); } void setGraphAndPlugin(PatchbayGraph* const graph, const CarlaPluginPtr plugin) noexcept { pData->graph = graph; pData->plugin = plugin; } private: const bool fUseClient; EngineEvent* fBuffer; EngineEvent* fBufferToDeleteLater; CARLA_DECLARE_NON_COPY_CLASS(CarlaEngineJackCVSourcePorts) }; #endif // ----------------------------------------------------------------------- // Jack Engine client class CarlaEngineJackClient : public CarlaEngineClientForSubclassing, private JackPortDeletionCallback { public: #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH CarlaEngineJackClient(const CarlaEngine& engine, EngineInternalGraph& egraph, CarlaRecursiveMutex& rmutex, const CarlaPluginPtr plugin, const CarlaString& mainClientName, jack_client_t* const jackClient) : CarlaEngineClientForSubclassing(engine, egraph, plugin), #else CarlaEngineJackClient(const CarlaEngine& engine, CarlaRecursiveMutex& rmutex, const CarlaString& mainClientName, jack_client_t* const jackClient) : CarlaEngineClientForSubclassing(engine), #endif fJackClient(jackClient), fUseClient(engine.getProccessMode() == ENGINE_PROCESS_MODE_SINGLE_CLIENT || engine.getProccessMode() == ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS), fAudioPorts(), fCVPorts(), fEventPorts(), #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH fCVSourcePorts(fUseClient), fPreRenameMutex(), fPreRenameConnections(), fPreRenamePluginId(), fPreRenamePluginIcon(), fReservedPluginPtr(), #endif fThreadSafeMetadataMutex(rmutex), fMainClientName(mainClientName) { carla_debug("CarlaEngineJackClient::CarlaEngineJackClient(%p)", jackClient); if (fUseClient) { CARLA_SAFE_ASSERT(jackClient != nullptr); } else { CARLA_SAFE_ASSERT(jackClient == nullptr); } } ~CarlaEngineJackClient() noexcept override { carla_debug("CarlaEngineJackClient::~CarlaEngineJackClient()"); if (getProcessMode() == ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS && fJackClient != nullptr) // FIXME jackbridge_client_close(fJackClient); // ports must have been deleted by now! //fAudioPorts.clear(); //fCVPorts.clear(); //fEventPorts.clear(); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH const CarlaMutexLocker cml(fPreRenameMutex); fPreRenameConnections.clear(); fPreRenamePluginId.clear(); fPreRenamePluginIcon.clear(); #endif } void activate() noexcept override { carla_debug("CarlaEngineJackClient::activate()"); if (getProcessMode() == ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS) { CARLA_SAFE_ASSERT_RETURN(fJackClient != nullptr && ! isActive(),); try { jackbridge_activate(fJackClient); } catch(...) {} } CarlaEngineClient::activate(); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH const CarlaMutexLocker cml(fPreRenameMutex); if (fJackClient != nullptr) { // restore pre-rename connections const char* portNameA = nullptr; const char* portNameB = nullptr; bool doConnection = false; for (CarlaStringList::Itenerator it = fPreRenameConnections.begin2(); it.valid(); it.next()) { const bool connectNow = doConnection; doConnection = !doConnection; if (connectNow) portNameB = it.getValue(nullptr); else portNameA = it.getValue(nullptr); if (! connectNow) continue; CARLA_SAFE_ASSERT_CONTINUE(portNameA != nullptr && portNameA[0] != '\0'); CARLA_SAFE_ASSERT_CONTINUE(portNameB != nullptr && portNameB[0] != '\0'); jackbridge_connect(fJackClient, portNameA, portNameB); } if (fPreRenamePluginId.isNotEmpty()) { const CarlaRecursiveMutexLocker crml(fThreadSafeMetadataMutex); if (char* const uuidstr = jackbridge_client_get_uuid(fJackClient)) { jack_uuid_t uuid; if (jackbridge_uuid_parse(uuidstr, &uuid)) { jackbridge_set_property(fJackClient, uuid, URI_MAIN_CLIENT_NAME, fMainClientName, URI_TYPE_STRING); jackbridge_set_property(fJackClient, uuid, URI_PLUGIN_ID, fPreRenamePluginId, URI_TYPE_INTEGER); if (fPreRenamePluginIcon.isNotEmpty()) jackbridge_set_property(fJackClient, uuid, URI_PLUGIN_ICON, fPreRenamePluginIcon, URI_TYPE_STRING); } jackbridge_free(uuidstr); } } } fPreRenameConnections.clear(); fPreRenamePluginId.clear(); fPreRenamePluginIcon.clear(); #endif } void deactivate(const bool willClose) noexcept override { carla_debug("CarlaEngineJackClient::deactivate(%s)", bool2str(willClose)); if (getProcessMode() == ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS) { if (fJackClient != nullptr && isActive()) { try { jackbridge_deactivate(fJackClient); } catch(...) {} } } #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (willClose) { fCVSourcePorts.resetGraphAndPlugin(); fReservedPluginPtr = nullptr; } #endif CarlaEngineClient::deactivate(willClose); } bool isOk() const noexcept override { if (fUseClient) return (fJackClient != nullptr); return CarlaEngineClient::isOk(); } CarlaEnginePort* addPort(const EnginePortType portType, const char* const name, const bool isInput, const uint32_t indexOffset) override { carla_debug("CarlaEngineJackClient::addPort(%i:%s, \"%s\", %s)", portType, EnginePortType2Str(portType), name, bool2str(isInput)); jack_port_t* jackPort = nullptr; const char* realName = name; // Create JACK port first, if needed if (fUseClient) { CARLA_SAFE_ASSERT_RETURN(fJackClient != nullptr, nullptr); realName = pData->getUniquePortName(name); switch (portType) { case kEnginePortTypeNull: break; case kEnginePortTypeAudio: jackPort = jackbridge_port_register(fJackClient, realName, JACK_DEFAULT_AUDIO_TYPE, isInput ? JackPortIsInput : JackPortIsOutput, 0); break; case kEnginePortTypeCV: jackPort = jackbridge_port_register(fJackClient, realName, JACK_DEFAULT_AUDIO_TYPE, static_cast(JackPortIsControlVoltage | (isInput ? JackPortIsInput : JackPortIsOutput)), 0); break; case kEnginePortTypeEvent: jackPort = jackbridge_port_register(fJackClient, realName, JACK_DEFAULT_MIDI_TYPE, isInput ? JackPortIsInput : JackPortIsOutput, 0); break; } CARLA_SAFE_ASSERT_RETURN(jackPort != nullptr, nullptr); } // Create Engine port switch (portType) { case kEnginePortTypeNull: break; case kEnginePortTypeAudio: { pData->addAudioPortName(isInput, realName); if (realName != name) delete[] realName; CarlaEngineJackAudioPort* const enginePort(new CarlaEngineJackAudioPort(*this, isInput, indexOffset, fJackClient, jackPort, fThreadSafeMetadataMutex, this)); fAudioPorts.append(enginePort); return enginePort; } case kEnginePortTypeCV: { pData->addCVPortName(isInput, realName); if (realName != name) delete[] realName; CarlaEngineJackCVPort* const enginePort(new CarlaEngineJackCVPort(*this, isInput, indexOffset, fJackClient, jackPort, fThreadSafeMetadataMutex, this)); fCVPorts.append(enginePort); return enginePort; } case kEnginePortTypeEvent: { pData->addEventPortName(isInput, realName); if (realName != name) delete[] realName; CarlaEngineJackEventPort* const enginePort(new CarlaEngineJackEventPort(*this, isInput, indexOffset, fJackClient, jackPort, fThreadSafeMetadataMutex, this)); fEventPorts.append(enginePort); return enginePort; } } carla_stderr("CarlaEngineJackClient::addPort(%i, \"%s\", %s) - invalid type", portType, name, bool2str(isInput)); return nullptr; } #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH CarlaEngineCVSourcePorts* createCVSourcePorts() override { fCVSourcePorts.setGraphAndPlugin(getPatchbayGraphOrNull(), getPlugin()); return &fCVSourcePorts; } CarlaEngineJackCVSourcePorts& getCVSourcePorts() noexcept { return fCVSourcePorts; } #endif void invalidate() noexcept { for (LinkedList::Itenerator it = fAudioPorts.begin2(); it.valid(); it.next()) { CarlaEngineJackAudioPort* const port(it.getValue(nullptr)); CARLA_SAFE_ASSERT_CONTINUE(port != nullptr); port->invalidate(); } for (LinkedList::Itenerator it = fCVPorts.begin2(); it.valid(); it.next()) { CarlaEngineJackCVPort* const port(it.getValue(nullptr)); CARLA_SAFE_ASSERT_CONTINUE(port != nullptr); port->invalidate(); } for (LinkedList::Itenerator it = fEventPorts.begin2(); it.valid(); it.next()) { CarlaEngineJackEventPort* const port(it.getValue(nullptr)); CARLA_SAFE_ASSERT_CONTINUE(port != nullptr); port->invalidate(); } fJackClient = nullptr; CarlaEngineClient::deactivate(true); } const char* getJackClientName() const noexcept { CARLA_SAFE_ASSERT_RETURN(fJackClient != nullptr, nullptr); try { return jackbridge_get_client_name(fJackClient); } CARLA_SAFE_EXCEPTION_RETURN("jack_get_client_name", nullptr); } void jackAudioPortDeleted(CarlaEngineJackAudioPort* const port) noexcept override { fAudioPorts.removeAll(port); } void jackCVPortDeleted(CarlaEngineJackCVPort* const port) noexcept override { fCVPorts.removeAll(port); } void jackEventPortDeleted(CarlaEngineJackEventPort* const port) noexcept override { fEventPorts.removeAll(port); } #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH bool renameInSingleClient(const CarlaString& newClientName) { const CarlaString clientNamePrefix(newClientName + ":"); return _renamePorts(fAudioPorts, clientNamePrefix) && _renamePorts(fCVPorts, clientNamePrefix) && _renamePorts(fEventPorts, clientNamePrefix); } void closeForRename(jack_client_t* const newClient, const CarlaString& newClientName) noexcept { if (fJackClient != nullptr) { if (isActive()) { { const CarlaString clientNamePrefix(newClientName + ":"); // store current client connections const CarlaMutexLocker cml(fPreRenameMutex); fPreRenameConnections.clear(); fPreRenamePluginId.clear(); fPreRenamePluginIcon.clear(); _savePortsConnections(fAudioPorts, clientNamePrefix); _savePortsConnections(fCVPorts, clientNamePrefix); _savePortsConnections(fEventPorts, clientNamePrefix); _saveProperties(); } try { jackbridge_deactivate(fJackClient); } catch(...) {} } try { jackbridge_client_close(fJackClient); } catch(...) {} invalidate(); } fAudioPorts.clear(); fCVPorts.clear(); fEventPorts.clear(); pData->clearPorts(); fJackClient = newClient; } void reservePluginPtr(CarlaPluginPtr* const pluginPtr) { fReservedPluginPtr = pluginPtr; } void setNewPluginId(const uint id) const { CARLA_SAFE_ASSERT_RETURN(fJackClient != nullptr,); // NOTE: no fThreadSafeMetadataMutex lock here, assumed done from caller if (char* const uuidstr = jackbridge_client_get_uuid(fJackClient)) { jack_uuid_t uuid; if (jackbridge_uuid_parse(uuidstr, &uuid)) { char buf[32]; std::snprintf(buf, 31, "%u", id); buf[31] = '\0'; jackbridge_set_property(fJackClient, uuid, URI_PLUGIN_ID, buf, URI_TYPE_INTEGER); } jackbridge_free(uuidstr); } } #endif private: jack_client_t* fJackClient; const bool fUseClient; LinkedList fAudioPorts; LinkedList fCVPorts; LinkedList fEventPorts; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH CarlaEngineJackCVSourcePorts fCVSourcePorts; CarlaMutex fPreRenameMutex; CarlaStringList fPreRenameConnections; CarlaString fPreRenamePluginId; CarlaString fPreRenamePluginIcon; CarlaScopedPointer fReservedPluginPtr; template bool _renamePorts(const LinkedList& t, const CarlaString& clientNamePrefix) { for (typename LinkedList::Itenerator it = t.begin2(); it.valid(); it.next()) { T* const port(it.getValue(nullptr)); CARLA_SAFE_ASSERT_CONTINUE(port != nullptr); CARLA_SAFE_ASSERT_CONTINUE(port->fJackPort != nullptr); const char* shortPortName(jackbridge_port_short_name(port->fJackPort)); CARLA_SAFE_ASSERT_CONTINUE(shortPortName != nullptr && shortPortName[0] != '\0'); const char* const oldClientNameSep(std::strstr(shortPortName, ":")); CARLA_SAFE_ASSERT_CONTINUE(oldClientNameSep != nullptr && oldClientNameSep[0] != '\0' && oldClientNameSep[1] != '\0'); shortPortName += oldClientNameSep-shortPortName + 1; const CarlaString newPortName(clientNamePrefix + shortPortName); if (! jackbridge_port_rename(fJackClient, port->fJackPort, newPortName)) return false; } return true; } template void _savePortsConnections(const LinkedList& t, const CarlaString& clientNamePrefix) { for (typename LinkedList::Itenerator it = t.begin2(); it.valid(); it.next()) { T* const port(it.getValue(nullptr)); CARLA_SAFE_ASSERT_CONTINUE(port != nullptr); CARLA_SAFE_ASSERT_CONTINUE(port->fJackPort != nullptr); const char* const shortPortName(jackbridge_port_short_name(port->fJackPort)); CARLA_SAFE_ASSERT_CONTINUE(shortPortName != nullptr && shortPortName[0] != '\0'); const CarlaString portName(clientNamePrefix + shortPortName); if (const char** const connections = jackbridge_port_get_all_connections(fJackClient, port->fJackPort)) { for (int i=0; connections[i] != nullptr; ++i) { if (port->kIsInput) { fPreRenameConnections.append(connections[i]); fPreRenameConnections.append(portName); } else { fPreRenameConnections.append(portName); fPreRenameConnections.append(connections[i]); } } jackbridge_free(connections); } } } void _saveProperties() { const CarlaRecursiveMutexLocker crml(fThreadSafeMetadataMutex); if (char* const uuidstr = jackbridge_client_get_uuid(fJackClient)) { jack_uuid_t uuid; const bool parsed = jackbridge_uuid_parse(uuidstr, &uuid); jackbridge_free(uuidstr); CARLA_CUSTOM_SAFE_ASSERT_ONCE_RETURN("JACK meta-data support unavailable", parsed,); char* value = nullptr; char* type = nullptr; CARLA_SAFE_ASSERT_RETURN(jackbridge_get_property(uuid, URI_PLUGIN_ID, &value, &type),); CARLA_SAFE_ASSERT_RETURN(type != nullptr,); CARLA_SAFE_ASSERT_RETURN(std::strcmp(type, URI_TYPE_INTEGER) == 0,); fPreRenamePluginId = value; jackbridge_free(value); jackbridge_free(type); value = type = nullptr; if (jackbridge_get_property(uuid, URI_PLUGIN_ICON, &value, &type)) { CARLA_SAFE_ASSERT_RETURN(type != nullptr,); CARLA_SAFE_ASSERT_RETURN(std::strcmp(type, URI_TYPE_STRING) == 0,); fPreRenamePluginIcon = value; jackbridge_free(value); jackbridge_free(type); } } } #endif // BUILD_BRIDGE_ALTERNATIVE_ARCH CarlaRecursiveMutex& fThreadSafeMetadataMutex; const CarlaString& fMainClientName; CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaEngineJackClient) }; // ----------------------------------------------------------------------- // Jack Engine class CarlaEngineJack : public CarlaEngine #ifndef BUILD_BRIDGE , private CarlaThread #endif { public: CarlaEngineJack() : CarlaEngine(), #ifndef BUILD_BRIDGE CarlaThread("CarlaEngineJackCallbacks"), #endif fClient(nullptr), fExternalPatchbayHost(true), fExternalPatchbayOsc(true), fFreewheel(false), fClientName(), fThreadSafeMetadataMutex(), #ifdef BUILD_BRIDGE fIsRunning(false) #else fClientNamePrefix(), fTimebaseMaster(false), fTimebaseRolling(false), fTimebaseUsecs(0), fUsedGroups(), fUsedPorts(), fUsedConnections(), fPatchbayProcThreadProtectionMutex(), fRetConns(), fLastPatchbaySetGroupPos(), fPostPonedEvents(), fPostPonedEventsMutex(), fPostPonedUUIDs(), fPostPonedUUIDsMutex(), fIsInternalClient(false) #endif { carla_debug("CarlaEngineJack::CarlaEngineJack()"); #ifdef BUILD_BRIDGE pData->options.processMode = ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS; #else carla_zeroPointers(fRackPorts, kRackPortCount); #endif } ~CarlaEngineJack() noexcept override { carla_debug("CarlaEngineJack::~CarlaEngineJack()"); CARLA_SAFE_ASSERT(fClient == nullptr); #ifndef BUILD_BRIDGE fUsedGroups.clear(); fUsedPorts.clear(); fUsedConnections.clear(); CARLA_SAFE_ASSERT(fPostPonedEvents.count() == 0); #endif } // ------------------------------------------------------------------- // Maximum values uint getMaxClientNameSize() const noexcept override { #ifndef BUILD_BRIDGE if (pData->options.processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT || pData->options.processMode == ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS) #endif { try { return static_cast(jackbridge_client_name_size()-1); } CARLA_SAFE_EXCEPTION_RETURN("jack_client_name_size", 32); } return CarlaEngine::getMaxClientNameSize(); } uint getMaxPortNameSize() const noexcept override { if (pData->options.processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT || pData->options.processMode == ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS) { try { return static_cast(jackbridge_port_name_size()-1); } CARLA_SAFE_EXCEPTION_RETURN("jack_port_name_size", 255); } return CarlaEngine::getMaxPortNameSize(); } // ------------------------------------------------------------------- // Virtual, per-engine type calls bool init(const char* const clientName) override { CARLA_SAFE_ASSERT_RETURN(fClient != nullptr || (clientName != nullptr && clientName[0] != '\0'), false); CARLA_SAFE_ASSERT_RETURN(jackbridge_is_ok(), false); carla_debug("CarlaEngineJack::init(\"%s\")", clientName); fFreewheel = false; fExternalPatchbayHost = true; fExternalPatchbayOsc = true; CarlaString truncatedClientName; if (fClient == nullptr && clientName != nullptr) { truncatedClientName = clientName; truncatedClientName.truncate(getMaxClientNameSize()); } #ifdef BUILD_BRIDGE fIsRunning = true; if (! pData->init(truncatedClientName)) { close(); setLastError("Failed to init internal data"); return false; } if (pData->bufferSize == 0 || carla_isEqual(pData->sampleRate, 0.0)) { // open temp client to get initial buffer-size and sample-rate values if (jack_client_t* const tmpClient = jackbridge_client_open(truncatedClientName, JackNoStartServer, nullptr)) { pData->bufferSize = jackbridge_get_buffer_size(tmpClient); pData->sampleRate = jackbridge_get_sample_rate(tmpClient); jackbridge_client_close(tmpClient); } else { close(); setLastError("Failed to init temporary jack client"); return false; } } return true; #else // BUILD_BRIDGE if (fClient == nullptr && clientName != nullptr) fClient = jackbridge_client_open(truncatedClientName, JackNoStartServer, nullptr); if (fClient == nullptr) { setLastError("Failed to create new JACK client"); return false; } const char* const jackClientName = jackbridge_get_client_name(fClient); if (! pData->init(jackClientName)) { jackbridge_client_close(fClient); fClient = nullptr; setLastError("Failed to init internal data"); return false; } // if main jack client does not match our requested one, setup client name prefix as needed if (truncatedClientName != jackClientName) { if (const char* const suffix = std::strrchr(jackClientName, '-')) { if (fClientNamePrefix.isNotEmpty()) { fClientNamePrefix.truncate(fClientNamePrefix.rfind('.') + 1); } else { fClientNamePrefix = truncatedClientName; fClientNamePrefix += "."; } fClientNamePrefix += suffix + 1; fClientNamePrefix += "/"; } } fClientName = jackClientName; const EngineOptions& opts(pData->options); pData->bufferSize = jackbridge_get_buffer_size(fClient); pData->sampleRate = jackbridge_get_sample_rate(fClient); pData->initTime(opts.transportExtra); jackbridge_set_thread_init_callback(fClient, carla_jack_thread_init_callback, nullptr); jackbridge_set_buffer_size_callback(fClient, carla_jack_bufsize_callback, this); jackbridge_set_sample_rate_callback(fClient, carla_jack_srate_callback, this); jackbridge_set_freewheel_callback(fClient, carla_jack_freewheel_callback, this); // jackbridge_set_latency_callback(fClient, carla_jack_latency_callback, this); jackbridge_set_process_callback(fClient, carla_jack_process_callback, this); jackbridge_on_shutdown(fClient, carla_jack_shutdown_callback, this); fTimebaseRolling = false; if (opts.transportMode == ENGINE_TRANSPORT_MODE_JACK) fTimebaseMaster = jackbridge_set_timebase_callback(fClient, true, carla_jack_timebase_callback, this); else fTimebaseMaster = false; initJackPatchbay(true, false, jackClientName, pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY); jackbridge_set_client_registration_callback(fClient, carla_jack_client_registration_callback, this); jackbridge_set_port_registration_callback(fClient, carla_jack_port_registration_callback, this); jackbridge_set_port_connect_callback(fClient, carla_jack_port_connect_callback, this); jackbridge_set_port_rename_callback(fClient, carla_jack_port_rename_callback, this); jackbridge_set_property_change_callback(fClient, carla_jack_property_change_callback, this); jackbridge_set_xrun_callback(fClient, carla_jack_xrun_callback, this); if (opts.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK || opts.processMode == ENGINE_PROCESS_MODE_PATCHBAY) { fRackPorts[kRackPortAudioIn1] = jackbridge_port_register(fClient, "audio-in1", JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0); fRackPorts[kRackPortAudioIn2] = jackbridge_port_register(fClient, "audio-in2", JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0); fRackPorts[kRackPortAudioOut1] = jackbridge_port_register(fClient, "audio-out1", JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0); fRackPorts[kRackPortAudioOut2] = jackbridge_port_register(fClient, "audio-out2", JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0); fRackPorts[kRackPortEventIn] = jackbridge_port_register(fClient, "events-in", JACK_DEFAULT_MIDI_TYPE, JackPortIsInput, 0); fRackPorts[kRackPortEventOut] = jackbridge_port_register(fClient, "events-out", JACK_DEFAULT_MIDI_TYPE, JackPortIsOutput, 0); if (opts.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK) { // FIXME? pData->graph.create(0, 0, 0, 0); } else { pData->graph.create(2, 2, 0, 0); // pData->graph.setUsingExternalHost(true); // pData->graph.setUsingExternalOSC(true); patchbayRefresh(true, false, false); } } # ifdef HAVE_LIBLO { const CarlaString& tcp(pData->osc.getServerPathTCP()); const CarlaString& udp(pData->osc.getServerPathUDP()); if (tcp.isNotEmpty() || udp.isNotEmpty()) { const CarlaRecursiveMutexLocker crml(fThreadSafeMetadataMutex); if (char* const uuidstr = jackbridge_client_get_uuid(fClient)) { jack_uuid_t uuid; if (jackbridge_uuid_parse(uuidstr, &uuid)) { if (tcp.isNotEmpty()) jackbridge_set_property(fClient, uuid, "https://kx.studio/ns/carla/osc-tcp", tcp, URI_TYPE_STRING); if (udp.isNotEmpty()) jackbridge_set_property(fClient, uuid, "https://kx.studio/ns/carla/osc-udp", udp, URI_TYPE_STRING); } jackbridge_free(uuidstr); } } } # endif if (jackbridge_activate(fClient)) { if (opts.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK || opts.processMode == ENGINE_PROCESS_MODE_PATCHBAY) { if (pData->options.audioDevice != nullptr && std::strcmp(pData->options.audioDevice, "Auto-Connect ON") == 0 && std::getenv("LADISH_APP_NAME") == nullptr && std::getenv("NSM_URL") == nullptr) { char strBuf[STR_MAX]; if (jackbridge_port_by_name(fClient, "system:capture_1") != nullptr) { std::snprintf(strBuf, STR_MAX, "%s:audio-in1", jackClientName); strBuf[STR_MAX-1] = '\0'; jackbridge_connect(fClient, "system:capture_1", strBuf); std::snprintf(strBuf, STR_MAX, "%s:audio-in2", jackClientName); strBuf[STR_MAX-1] = '\0'; if (jackbridge_port_by_name(fClient, "system:capture_2") != nullptr) jackbridge_connect(fClient, "system:capture_2", strBuf); else jackbridge_connect(fClient, "system:capture_1", strBuf); } if (jackbridge_port_by_name(fClient, "system:playback_1") != nullptr) { std::snprintf(strBuf, STR_MAX, "%s:audio-out1", jackClientName); strBuf[STR_MAX-1] = '\0'; jackbridge_connect(fClient, strBuf, "system:playback_1"); std::snprintf(strBuf, STR_MAX, "%s:audio-out2", jackClientName); strBuf[STR_MAX-1] = '\0'; if (jackbridge_port_by_name(fClient, "system:playback_2") != nullptr) jackbridge_connect(fClient, strBuf, "system:playback_2"); else jackbridge_connect(fClient, strBuf, "system:playback_1"); } } } startThread(); callback(true, true, ENGINE_CALLBACK_ENGINE_STARTED, 0, opts.processMode, opts.transportMode, static_cast(pData->bufferSize), static_cast(pData->sampleRate), getCurrentDriverName()); return true; } if (opts.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK || opts.processMode == ENGINE_PROCESS_MODE_PATCHBAY) { pData->graph.destroy(); } pData->close(); jackbridge_client_close(fClient); fClient = nullptr; setLastError("Failed to activate the JACK client"); return false; #endif // BUILD_BRIDGE } #ifndef BUILD_BRIDGE bool initInternal(jack_client_t* const client) { fClient = client; fIsInternalClient = true; return init(nullptr); } #endif bool close() override { carla_debug("CarlaEngineJack::close()"); #ifdef BUILD_BRIDGE fClient = nullptr; fIsRunning = false; CarlaEngine::close(); return true; #else stopThread(-1); // deactivate client ASAP if (fClient != nullptr) jackbridge_deactivate(fClient); // clear engine data CarlaEngine::close(); // now close client if (fClient != nullptr) { jackbridge_client_close(fClient); fClient = nullptr; } fClientName.clear(); fUsedGroups.clear(); fUsedPorts.clear(); fUsedConnections.clear(); fPostPonedEvents.clear(); fPostPonedUUIDs.clear(); // clear rack/patchbay stuff if (pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK || pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY) { carla_zeroPointers(fRackPorts, kRackPortCount); pData->graph.destroy(); } return true; #endif } bool isRunning() const noexcept override { #ifdef BUILD_BRIDGE return (fClient != nullptr || fIsRunning); #else return (fClient != nullptr); #endif } bool isOffline() const noexcept override { return fFreewheel; } EngineType getType() const noexcept override { return kEngineTypeJack; } const char* getCurrentDriverName() const noexcept override { return "JACK"; } #ifndef BUILD_BRIDGE float getDSPLoad() const noexcept override { CARLA_SAFE_ASSERT_RETURN(fClient != nullptr, 0.0f); return jackbridge_cpu_load(fClient); } void callback(const bool sendHost, const bool sendOsc, const EngineCallbackOpcode action, const uint pluginId, const int value1, const int value2, const int value3, const float valuef, const char* const valueStr) noexcept override { if (action == ENGINE_CALLBACK_PROJECT_LOAD_FINISHED) { if (fTimebaseMaster) { // project finished loading, need to set bpm here, so we force an update of timebase master transportRelocate(pData->timeInfo.frame); } } CarlaEngine::callback(sendHost, sendOsc, action, pluginId, value1, value2, value3, valuef, valueStr); } void idle() noexcept override { water::Array uuids; { const CarlaMutexLocker cml(fPostPonedUUIDsMutex); fPostPonedUUIDs.swapWith(uuids); } { const CarlaRecursiveMutexLocker crml(fThreadSafeMetadataMutex); for (int i=0; i(pos.y2), nullptr); } } } jackbridge_free(value); jackbridge_free(type); } } } } CarlaEngine::idle(); } #endif bool setBufferSizeAndSampleRate(const uint bufferSize, const double sampleRate) override { CARLA_SAFE_ASSERT_RETURN(carla_isEqual(pData->sampleRate, sampleRate), false); CARLA_SAFE_ASSERT_RETURN(fClient != nullptr, false); try { return jackbridge_set_buffer_size(fClient, bufferSize); } CARLA_SAFE_EXCEPTION_RETURN("setBufferSizeAndSampleRate", false); } EngineTimeInfo getTimeInfo() const noexcept override { if (pData->options.transportMode != ENGINE_TRANSPORT_MODE_JACK) return CarlaEngine::getTimeInfo(); if (pData->options.processMode != ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS) return CarlaEngine::getTimeInfo(); jack_position_t jpos; // invalidate jpos.unique_1 = 1; jpos.unique_2 = 2; EngineTimeInfo timeInfo; const bool playing = jackbridge_transport_query(fClient, &jpos) == JackTransportRolling; if (jpos.unique_1 != jpos.unique_2) { timeInfo.playing = false; timeInfo.frame = 0; timeInfo.usecs = 0; timeInfo.bbt.valid = false; return timeInfo; } timeInfo.playing = playing; timeInfo.frame = jpos.frame; timeInfo.usecs = jpos.usecs; if (jpos.valid & JackPositionBBT) { timeInfo.bbt.valid = true; timeInfo.bbt.bar = jpos.bar; timeInfo.bbt.beat = jpos.beat; #ifdef JACK_TICK_DOUBLE if (jpos.valid & JackTickDouble) timeInfo.bbt.tick = jpos.tick_double; else #endif timeInfo.bbt.tick = jpos.tick; timeInfo.bbt.barStartTick = jpos.bar_start_tick; timeInfo.bbt.beatsPerBar = jpos.beats_per_bar; timeInfo.bbt.beatType = jpos.beat_type; timeInfo.bbt.ticksPerBeat = jpos.ticks_per_beat; timeInfo.bbt.beatsPerMinute = jpos.beats_per_minute; } else { timeInfo.bbt.valid = false; } return timeInfo; } #ifndef BUILD_BRIDGE void setOption(const EngineOption option, const int value, const char* const valueStr) noexcept override { if (option == ENGINE_OPTION_TRANSPORT_MODE && fClient != nullptr) { CARLA_SAFE_ASSERT_INT_RETURN(value >= ENGINE_TRANSPORT_MODE_DISABLED && value <= ENGINE_TRANSPORT_MODE_JACK, value,); if (value == ENGINE_TRANSPORT_MODE_JACK) { fTimebaseMaster = jackbridge_set_timebase_callback(fClient, true, carla_jack_timebase_callback, this); } else { // jack transport cannot be disabled in multi-client callback(true, true, ENGINE_CALLBACK_TRANSPORT_MODE_CHANGED, 0, ENGINE_TRANSPORT_MODE_JACK, 0, 0, 0.0f, pData->options.transportExtra); CARLA_SAFE_ASSERT_RETURN(pData->options.processMode != ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS,); jackbridge_release_timebase(fClient); fTimebaseMaster = false; } } else if (option == ENGINE_OPTION_CLIENT_NAME_PREFIX) { fClientNamePrefix = valueStr; if (fClientNamePrefix.isNotEmpty()) { if (! fClientNamePrefix.contains('.')) fClientNamePrefix += ".0"; if (! fClientNamePrefix.endsWith('/')) fClientNamePrefix += "/"; } } CarlaEngine::setOption(option, value, valueStr); } #endif CarlaEngineClient* addClient(CarlaPluginPtr plugin) override { jack_client_t* client = nullptr; #ifndef BUILD_BRIDGE CARLA_CUSTOM_SAFE_ASSERT_RETURN("Not connected to JACK", fClient != nullptr, nullptr); CarlaPluginPtr* pluginReserve = nullptr; if (pData->options.processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { client = fClient; } else if (pData->options.processMode == ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS) #endif { #ifndef BUILD_BRIDGE if (fClientNamePrefix.isNotEmpty()) { client = jackbridge_client_open(fClientNamePrefix + plugin->getName(), JackNoStartServer, nullptr); } else #endif { client = jackbridge_client_open(plugin->getName(), JackNoStartServer, nullptr); } CARLA_CUSTOM_SAFE_ASSERT_RETURN("Failure to open client", client != nullptr, nullptr); jackbridge_set_thread_init_callback(client, carla_jack_thread_init_callback, nullptr); const CarlaRecursiveMutexLocker crml(fThreadSafeMetadataMutex); if (char* const uuidstr = jackbridge_client_get_uuid(client)) { jack_uuid_t uuid; if (jackbridge_uuid_parse(uuidstr, &uuid)) { char strBufId[24]; std::snprintf(strBufId, 23, "%u", plugin->getId()); strBufId[23] = '\0'; #ifndef BUILD_BRIDGE jackbridge_set_property(client, uuid, URI_MAIN_CLIENT_NAME, fClientName, URI_TYPE_STRING); jackbridge_set_property(client, uuid, URI_PLUGIN_ID, strBufId, URI_TYPE_INTEGER); #endif if (const char* const pluginIcon = plugin->getIconName()) jackbridge_set_property(client, uuid, URI_PLUGIN_ICON, pluginIcon, URI_TYPE_STRING); } jackbridge_free(uuidstr); } #ifndef BUILD_BRIDGE pluginReserve = new CarlaPluginPtr(plugin); /* jackbridge_set_buffer_size_callback(fClient, carla_jack_bufsize_callback_plugin, pluginReserve); jackbridge_set_sample_rate_callback(fClient, carla_jack_srate_callback_plugin, pluginReserve); */ // jackbridge_set_latency_callback(client, carla_jack_latency_callback_plugin, pluginReserve); jackbridge_set_process_callback(client, carla_jack_process_callback_plugin, pluginReserve); jackbridge_on_shutdown(client, carla_jack_shutdown_callback_plugin, pluginReserve); #else fClient = client; pData->bufferSize = jackbridge_get_buffer_size(client); pData->sampleRate = jackbridge_get_sample_rate(client); pData->initTime(nullptr); jackbridge_set_buffer_size_callback(client, carla_jack_bufsize_callback, this); jackbridge_set_sample_rate_callback(client, carla_jack_srate_callback, this); jackbridge_set_freewheel_callback(client, carla_jack_freewheel_callback, this); // jackbridge_set_latency_callback(client, carla_jack_latency_callback, this); jackbridge_set_process_callback(client, carla_jack_process_callback, this); jackbridge_on_shutdown(client, carla_jack_shutdown_callback, this); fClientName = jackbridge_get_client_name(client); #endif } #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH carla_debug("new CarlaEngineJackClient"); CarlaEngineJackClient* const jclient = new CarlaEngineJackClient(*this, pData->graph, fThreadSafeMetadataMutex, plugin, fClientName, client); # ifndef BUILD_BRIDGE if (pluginReserve != nullptr) jclient->reservePluginPtr(pluginReserve); # endif return jclient; #else return new CarlaEngineJackClient(*this, fThreadSafeMetadataMutex, fClientName, client); #endif } #ifndef BUILD_BRIDGE bool removePlugin(const uint id) override { if (! CarlaEngine::removePlugin(id)) return false; if (pData->options.processMode != ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS) return true; const CarlaRecursiveMutexLocker crml(fThreadSafeMetadataMutex); for (uint i=id; i < pData->curPluginCount; ++i) { const CarlaPluginPtr plugin = pData->plugins[i].plugin; CARLA_SAFE_ASSERT_BREAK(plugin.get() != nullptr); CarlaEngineJackClient* const client = dynamic_cast(plugin->getEngineClient()); CARLA_SAFE_ASSERT_BREAK(client != nullptr); client->setNewPluginId(i); } return true; } bool switchPlugins(const uint idA, const uint idB) noexcept override { if (! CarlaEngine::switchPlugins(idA, idB)) return false; if (pData->options.processMode != ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS) return true; CarlaPluginPtr newPluginA = pData->plugins[idA].plugin; CARLA_SAFE_ASSERT_RETURN(newPluginA.get() != nullptr, true); CarlaPluginPtr newPluginB = pData->plugins[idB].plugin; CARLA_SAFE_ASSERT_RETURN(newPluginB.get() != nullptr, true); CarlaEngineJackClient* const clientA = dynamic_cast(newPluginA->getEngineClient()); CARLA_SAFE_ASSERT_RETURN(clientA != nullptr, true); CarlaEngineJackClient* const clientB = dynamic_cast(newPluginB->getEngineClient()); CARLA_SAFE_ASSERT_RETURN(clientB != nullptr, true); { const CarlaRecursiveMutexLocker crml(fThreadSafeMetadataMutex); clientA->setNewPluginId(idA); clientB->setNewPluginId(idB); } return true; } bool renamePlugin(const uint id, const char* const newName) override { if (pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK || pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY) { return CarlaEngine::renamePlugin(id, newName); } CARLA_SAFE_ASSERT_RETURN(pData->plugins != nullptr, false); CARLA_SAFE_ASSERT_RETURN(pData->curPluginCount != 0, false); CARLA_SAFE_ASSERT_RETURN(id < pData->curPluginCount, false); CARLA_SAFE_ASSERT_RETURN(newName != nullptr && newName[0] != '\0', false); CarlaPluginPtr plugin = pData->plugins[id].plugin; CARLA_SAFE_ASSERT_RETURN_ERR(plugin.get() != nullptr, "Could not find plugin to rename"); CARLA_SAFE_ASSERT_RETURN_ERR(plugin->getId() == id, "Invalid engine internal data"); // before we stop the engine thread we might need to get the plugin data const bool needsReinit = (pData->options.processMode == ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS); const CarlaStateSave* saveStatePtr = nullptr; if (needsReinit) { const CarlaStateSave& saveState(plugin->getStateSave()); saveStatePtr = &saveState; } CarlaString uniqueName; try { const char* const tmpName = getUniquePluginName(newName); uniqueName = tmpName; delete[] tmpName; } CARLA_SAFE_EXCEPTION("JACK renamePlugin getUniquePluginName"); if (uniqueName.isEmpty()) { setLastError("Failed to request new unique plugin name"); return false; } const ScopedThreadStopper sts(this); // rename on client client mode, just rename the ports if (pData->options.processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { CarlaEngineJackClient* const client((CarlaEngineJackClient*)plugin->getEngineClient()); if (! client->renameInSingleClient(uniqueName)) { setLastError("Failed to rename some JACK ports, does your JACK version support proper port renaming?"); return false; } } // rename in multiple client mode else if (pData->options.processMode == ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS) { CarlaEngineJackClient* const client((CarlaEngineJackClient*)plugin->getEngineClient()); // we should not be able to do this, jack really needs to allow client rename if (jack_client_t* const jackClient = jackbridge_client_open(fClientNamePrefix + uniqueName, JackNoStartServer, nullptr)) { // get new client name fClientName = jackbridge_get_client_name(jackClient); if (fClientNamePrefix.isNotEmpty()) uniqueName = fClientName.buffer() + fClientNamePrefix.length(); else uniqueName = fClientName; // close client client->closeForRename(jackClient, fClientName); // disable plugin plugin->setEnabled(false); // set new client data CarlaPluginPtr* const pluginReserve = new CarlaPluginPtr(plugin); client->reservePluginPtr(pluginReserve); // jackbridge_set_latency_callback(jackClient, carla_jack_latency_callback_plugin, pluginReserve); jackbridge_set_process_callback(jackClient, carla_jack_process_callback_plugin, pluginReserve); jackbridge_on_shutdown(jackClient, carla_jack_shutdown_callback_plugin, pluginReserve); // NOTE: jack1 locks up here if (jackbridge_get_version_string() != nullptr) jackbridge_set_thread_init_callback(jackClient, carla_jack_thread_init_callback, nullptr); /* The following code is because of a tricky situation. We cannot lock or do jack operations during jack callbacks on jack1. jack2 events are asynchronous. When we close the client jack will trigger unregister-port callbacks, which we handle on a separate thread ASAP. But before that happens we already registered a new client with the same ports (the "renamed" one), and at this point the port we receive during that callback is actually the new one from the new client.. JACK2 seems to be reusing ports to save space, which is understandable. Anyway, this means we have to remove all our port-related data before the new client ports are created. (we also stop the separate jack-events thread to avoid any race conditions while modying our port data) */ stopThread(-1); LinkedList ports; LinkedList conns; { const CarlaMutexLocker cml1(fUsedGroups.mutex); if (const uint groupId = fUsedGroups.getGroupId(plugin->getName())) { const CarlaMutexLocker cml2(fUsedPorts.mutex); for (LinkedList::Itenerator it = fUsedPorts.list.begin2(); it.valid(); it.next()) { const PortNameToId& portNameToId(it.getValue(kPortNameToIdFallback)); CARLA_SAFE_ASSERT_CONTINUE(portNameToId.group != 0); if (portNameToId.group != groupId) continue; ports.append(portNameToId); fUsedPorts.list.remove(it); } const CarlaMutexLocker cml3(fUsedConnections.mutex); for (LinkedList::Itenerator it = fUsedConnections.list.begin2(); it.valid(); it.next()) { const ConnectionToId& connectionToId = it.getValue(kConnectionToIdFallback); CARLA_SAFE_ASSERT_CONTINUE(connectionToId.id != 0); if (connectionToId.groupA != groupId && connectionToId.groupB != groupId) continue; conns.append(connectionToId); fUsedConnections.list.remove(it); } } } for (LinkedList::Itenerator it = conns.begin2(); it.valid(); it.next()) { const ConnectionToId& connectionToId = it.getValue(kConnectionToIdFallback); CARLA_SAFE_ASSERT_CONTINUE(connectionToId.id != 0); callback(fExternalPatchbayHost, fExternalPatchbayOsc, ENGINE_CALLBACK_PATCHBAY_CONNECTION_REMOVED, connectionToId.id, 0, 0, 0, 0.0f, nullptr); } for (LinkedList::Itenerator it = ports.begin2(); it.valid(); it.next()) { const PortNameToId& portNameToId(it.getValue(kPortNameToIdFallback)); CARLA_SAFE_ASSERT_CONTINUE(portNameToId.group != 0); callback(fExternalPatchbayHost, fExternalPatchbayOsc, ENGINE_CALLBACK_PATCHBAY_PORT_REMOVED, portNameToId.group, static_cast(portNameToId.port), 0, 0, 0.0f, nullptr); } ports.clear(); conns.clear(); startThread(); } else { setLastError("Failed to create new JACK client"); return false; } } // Rename plugin->setName(uniqueName); if (needsReinit) { // reload plugin to recreate its ports plugin->reload(); plugin->loadStateSave(*saveStatePtr); plugin->setEnabled(true); } callback(true, true, ENGINE_CALLBACK_PLUGIN_RENAMED, id, 0, 0, 0, 0.0f, uniqueName); return true; } // ------------------------------------------------------------------- // Patchbay bool patchbayConnect(const bool external, const uint groupA, const uint portA, const uint groupB, const uint portB) override { CARLA_SAFE_ASSERT_RETURN(fClient != nullptr, false); if (pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY && ! external) return CarlaEngine::patchbayConnect(false, groupA, portA, groupB, portB); const CarlaMutexLocker cml(fUsedPorts.mutex); const char* const fullPortNameA = fUsedPorts.getFullPortName(groupA, portA); CARLA_SAFE_ASSERT_RETURN(fullPortNameA != nullptr && fullPortNameA[0] != '\0', false); const char* const fullPortNameB = fUsedPorts.getFullPortName(groupB, portB); CARLA_SAFE_ASSERT_RETURN(fullPortNameB != nullptr && fullPortNameB[0] != '\0', false); if (! jackbridge_connect(fClient, fullPortNameA, fullPortNameB)) { setLastError("JACK operation failed"); return false; } return true; } bool patchbayDisconnect(const bool external, const uint connectionId) override { CARLA_SAFE_ASSERT_RETURN(fClient != nullptr, false); if (pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY && ! external) return CarlaEngine::patchbayDisconnect(false, connectionId); ConnectionToId connectionToId = { 0, 0, 0, 0, 0 }; { const CarlaMutexLocker cml(fUsedConnections.mutex); for (LinkedList::Itenerator it = fUsedConnections.list.begin2(); it.valid(); it.next()) { connectionToId = it.getValue(kConnectionToIdFallback); CARLA_SAFE_ASSERT_CONTINUE(connectionToId.id != 0); if (connectionToId.id == connectionId) break; } } if (connectionToId.id == 0 || connectionToId.id != connectionId) { setLastError("Failed to find the requested connection"); return false; } const CarlaMutexLocker cml(fUsedPorts.mutex); const char* const fullPortNameA = fUsedPorts.getFullPortName(connectionToId.groupA, connectionToId.portA); CARLA_SAFE_ASSERT_RETURN(fullPortNameA != nullptr && fullPortNameA[0] != '\0', false); const char* const fullPortNameB = fUsedPorts.getFullPortName(connectionToId.groupB, connectionToId.portB); CARLA_SAFE_ASSERT_RETURN(fullPortNameB != nullptr && fullPortNameB[0] != '\0', false); if (! jackbridge_disconnect(fClient, fullPortNameA, fullPortNameB)) { setLastError("JACK operation failed"); return false; } return true; } bool patchbaySetGroupPos(const bool sendHost, const bool sendOSC, const bool external, const uint groupId, const int x1, const int y1, const int x2, const int y2) override { CARLA_SAFE_ASSERT_RETURN(fClient != nullptr, false); CARLA_SAFE_ASSERT_RETURN(! pData->loadingProject, false); carla_debug("CarlaEngineJack::patchbaySetGroupPos(%u, %i, %i, %i, %i)", groupId, x1, y1, x2, y2); if (pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY && ! external) return CarlaEngine::patchbaySetGroupPos(sendHost, sendOSC, false, groupId, x1, y1, x2, y2); const char* groupName; { const CarlaMutexLocker cml(fUsedGroups.mutex); groupName = fUsedGroups.getGroupName(groupId); CARLA_SAFE_ASSERT_RETURN(groupName != nullptr && groupName[0] != '\0', false); } bool ok; { const CarlaRecursiveMutexLocker crml(fThreadSafeMetadataMutex); jack_uuid_t uuid; { char* const uuidstr = jackbridge_get_uuid_for_client_name(fClient, groupName); CARLA_SAFE_ASSERT_RETURN(uuidstr != nullptr && uuidstr[0] != '\0', false); const bool parsed = jackbridge_uuid_parse(uuidstr, &uuid); jackbridge_free(uuidstr); /* if parsing fails, meta-data is not available.. this could be because JACK version is old, or perhaps this is an internal client */ if (! parsed) return false; } fLastPatchbaySetGroupPos.set(x1, y1, x2, y2); char valueStr[STR_MAX]; std::snprintf(valueStr, STR_MAX-1, "%i:%i:%i:%i", x1, y1, x2, y2); valueStr[STR_MAX-1] = '\0'; ok = jackbridge_set_property(fClient, uuid, URI_POSITION, valueStr, URI_TYPE_STRING); } callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_CLIENT_POSITION_CHANGED, groupId, x1, y1, x2, static_cast(y2), nullptr); return ok; } bool patchbayRefresh(const bool sendHost, const bool sendOSC, const bool external) override { CARLA_SAFE_ASSERT_RETURN(fClient != nullptr, false); carla_debug("patchbayRefresh(%s, %s, %s)", bool2str(sendHost), bool2str(sendOSC), bool2str(external)); if (pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY) { if (sendHost) { fExternalPatchbayHost = external; pData->graph.setUsingExternalHost(external); } if (sendOSC) { fExternalPatchbayOsc = external; pData->graph.setUsingExternalOSC(external); } if (! external) CarlaEngine::patchbayRefresh(sendHost, sendOSC, false); } initJackPatchbay(sendHost, sendOSC, jackbridge_get_client_name(fClient), pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY && !external); return true; } // ------------------------------------------------------------------- // Transport void transportPlay() noexcept override { if (pData->options.transportMode != ENGINE_TRANSPORT_MODE_JACK) return CarlaEngine::transportPlay(); if (fClient != nullptr) { if (! pData->timeInfo.bbt.valid) { // old timebase master no longer active, make ourselves master again pData->time.setNeedsReset(); fTimebaseMaster = jackbridge_set_timebase_callback(fClient, true, carla_jack_timebase_callback, this); } try { jackbridge_transport_start(fClient); } catch(...) {} } } void transportPause() noexcept override { if (pData->options.transportMode != ENGINE_TRANSPORT_MODE_JACK) return CarlaEngine::transportPause(); if (fClient != nullptr) { try { jackbridge_transport_stop(fClient); } catch(...) {} } } void transportBPM(const double bpm) noexcept override { if (pData->options.transportMode != ENGINE_TRANSPORT_MODE_JACK || fTimebaseMaster) return CarlaEngine::transportBPM(bpm); if (fClient == nullptr) return; jack_position_t jpos; // invalidate jpos.unique_1 = 1; jpos.unique_2 = 2; jackbridge_transport_query(fClient, &jpos); if (jpos.unique_1 == jpos.unique_2 && (jpos.valid & JackPositionBBT) != 0) { carla_stdout("NOTE: Changing BPM without being JACK timebase master"); jpos.beats_per_minute = bpm; try { jackbridge_transport_reposition(fClient, &jpos); } catch(...) {} } } void transportRelocate(const uint64_t frame) noexcept override { if (pData->options.transportMode != ENGINE_TRANSPORT_MODE_JACK) return CarlaEngine::transportRelocate(frame); if (fClient != nullptr) { try { jackbridge_transport_locate(fClient, static_cast(frame)); } catch(...) {} } } // ------------------------------------------------------------------- // Patchbay stuff const char* const* getPatchbayConnections(const bool external) const override { CARLA_CUSTOM_SAFE_ASSERT_RETURN("Not connected to JACK, will not save patchbay connections", fClient != nullptr, nullptr); carla_debug("CarlaEngineJack::getPatchbayConnections(%s)", bool2str(external)); if (pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY && ! external) return CarlaEngine::getPatchbayConnections(external); CarlaStringList connList; if (const char** const ports = jackbridge_get_ports(fClient, nullptr, nullptr, JackPortIsOutput)) { for (int i=0; ports[i] != nullptr; ++i) { const jack_port_t* const jackPort(jackbridge_port_by_name(fClient, ports[i])); const char* const fullPortName(ports[i]); CARLA_SAFE_ASSERT_CONTINUE(jackPort != nullptr); if (const char** const connections = jackbridge_port_get_all_connections(fClient, jackPort)) { for (int j=0; connections[j] != nullptr; ++j) { connList.append(fullPortName); connList.append(connections[j]); } jackbridge_free(connections); } } jackbridge_free(ports); } if (connList.count() == 0) return nullptr; fRetConns = connList.toCharStringListPtr(); return fRetConns; } const PatchbayPosition* getPatchbayPositions(const bool external, uint& count) const override { CARLA_CUSTOM_SAFE_ASSERT_RETURN("Not connected to JACK, will not save patchbay positions", fClient != nullptr, nullptr); carla_debug("CarlaEngineJack::getPatchbayPositions(%s)", bool2str(external)); if (pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY && ! external) return CarlaEngine::getPatchbayPositions(external, count); const CarlaMutexLocker cml(fUsedGroups.mutex); const CarlaRecursiveMutexLocker crml(fThreadSafeMetadataMutex); if (const std::size_t maxCount = fUsedGroups.list.count()) { PatchbayPosition* ret; try { ret = new CarlaEngine::PatchbayPosition[maxCount]; } CARLA_SAFE_EXCEPTION_RETURN("new CarlaEngine::PatchbayPosition", nullptr); count = 0; GroupNameToId groupNameToId; for (LinkedList::Itenerator it = fUsedGroups.list.begin2(); it.valid(); it.next()) { groupNameToId = it.getValue(kGroupNameToIdFallback); CARLA_SAFE_ASSERT_CONTINUE(groupNameToId.group != 0); jack_uuid_t uuid; { char* const uuidstr = jackbridge_get_uuid_for_client_name(fClient, groupNameToId.name); if (uuidstr == nullptr || uuidstr[0] == '\0') continue; const bool parsed = jackbridge_uuid_parse(uuidstr, &uuid); jackbridge_free(uuidstr); /* if parsing fails, meta-data is not available.. this could be because JACK version is old, or perhaps this is an internal client */ if (! parsed) continue; } char* value = nullptr; char* type = nullptr; if (jackbridge_get_property(uuid, URI_POSITION, &value, &type) && value != nullptr && type != nullptr && std::strcmp(type, URI_TYPE_STRING) == 0) { CarlaEngine::PatchbayPosition& ppos(ret[count++]); ppos.name = carla_strdup_safe(groupNameToId.name); ppos.dealloc = true; ppos.pluginId = -1; if (char* sep1 = std::strstr(value, ":")) { *sep1++ = '\0'; ppos.x1 = std::atoi(value); if (char* sep2 = std::strstr(sep1, ":")) { *sep2++ = '\0'; ppos.y1 = std::atoi(sep1); if (char* sep3 = std::strstr(sep2, ":")) { *sep3++ = '\0'; ppos.x2 = std::atoi(sep2); ppos.y2 = std::atoi(sep3); } } } jackbridge_free(value); jackbridge_free(type); value = type = nullptr; const bool clientBelongsToUs = (jackbridge_get_property(uuid, URI_MAIN_CLIENT_NAME, &value, &type) && value != nullptr && type != nullptr && std::strcmp(type, URI_TYPE_STRING) == 0 && fClientName == value); jackbridge_free(value); jackbridge_free(type); value = type = nullptr; if (! clientBelongsToUs) continue; if (jackbridge_get_property(uuid, URI_PLUGIN_ID, &value, &type) && value != nullptr && type != nullptr && std::strcmp(type, URI_TYPE_INTEGER) == 0) { ppos.pluginId = std::atoi(value); } jackbridge_free(value); jackbridge_free(type); } } return ret; } return nullptr; } void restorePatchbayConnection(const bool external, const char* const connSource, const char* const connTarget) override { CARLA_SAFE_ASSERT_RETURN(fClient != nullptr,); CARLA_SAFE_ASSERT_RETURN(connSource != nullptr && connSource[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(connTarget != nullptr && connTarget[0] != '\0',); carla_debug("CarlaEngineJack::restorePatchbayConnection(%s, \"%s\", \"%s\")", bool2str(external), connSource, connTarget); if (pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY && ! external) return CarlaEngine::restorePatchbayConnection(external, connSource, connTarget); if (const jack_port_t* const port = jackbridge_port_by_name(fClient, connSource)) { if (jackbridge_port_by_name(fClient, connTarget) == nullptr) return; if (! jackbridge_port_connected_to(port, connTarget)) jackbridge_connect(fClient, connSource, connTarget); } } bool restorePatchbayGroupPosition(const bool external, PatchbayPosition& ppos) override { CARLA_SAFE_ASSERT_RETURN(fClient != nullptr, false); carla_debug("CarlaEngineJack::restorePatchbayGroupPosition(%s, {%i, %i, %i, %i, %i, \"%s\"})", bool2str(external), ppos.pluginId, ppos.x1, ppos.y1, ppos.x2, ppos.y2, ppos.name); if (pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY && ! external) return CarlaEngine::restorePatchbayGroupPosition(external, ppos); uint groupId = 0; const char* const orig_name = ppos.name; /* NOTE: When loading a project, it might take a bit to receive plugins' jack client registration callbacks. * We try to wait a little for it, but not too much. */ if (ppos.pluginId >= 0) { // strip client name prefix if already in place if (const char* const rname2 = std::strstr(ppos.name, ".")) if (const char* const rname3 = std::strstr(rname2 + 1, "/")) ppos.name = rname3 + 1; if (pData->options.processMode == ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS) { if (fClientNamePrefix.isNotEmpty()) { char* nname = (char*)std::malloc(fClientNamePrefix.length() + std::strlen(ppos.name) + 1); std::strcpy(nname, fClientNamePrefix.buffer()); std::strcat(nname, ppos.name); ppos.name = nname; ppos.dealloc = true; } for (int i=20; --i >=0;) { { const CarlaMutexLocker cml(fUsedGroups.mutex); if (fUsedGroups.list.count() == 0) break; groupId = fUsedGroups.getGroupId(ppos.name); } if (groupId != 0) break; carla_msleep(100); callback(true, true, ENGINE_CALLBACK_IDLE, 0, 0, 0, 0, 0.0f, nullptr); } } } else { const CarlaMutexLocker cml(fUsedGroups.mutex); if (fUsedGroups.list.count() != 0) groupId = fUsedGroups.getGroupId(ppos.name); } if (groupId == 0) { if (ppos.pluginId < 0 || pData->options.processMode == ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS) carla_stdout("Previously saved client '%s' not found", ppos.name); } else { for (;;) { const CarlaRecursiveMutexLocker crml(fThreadSafeMetadataMutex); jack_uuid_t uuid; { char* const uuidstr = jackbridge_get_uuid_for_client_name(fClient, ppos.name); CARLA_SAFE_ASSERT_BREAK(uuidstr != nullptr && uuidstr[0] != '\0'); const bool parsed = jackbridge_uuid_parse(uuidstr, &uuid); jackbridge_free(uuidstr); CARLA_CUSTOM_SAFE_ASSERT_ONCE_BREAK("JACK meta-data support unavailable", parsed); } char valueStr[STR_MAX]; std::snprintf(valueStr, STR_MAX-1, "%i:%i:%i:%i", ppos.x1, ppos.y1, ppos.x2, ppos.y2); valueStr[STR_MAX-1] = '\0'; jackbridge_set_property(fClient, uuid, URI_POSITION, valueStr, URI_TYPE_STRING); break; } callback(true, true, ENGINE_CALLBACK_PATCHBAY_CLIENT_POSITION_CHANGED, groupId, ppos.x1, ppos.y1, ppos.x2, static_cast(ppos.y2), nullptr); } return ppos.name != orig_name; } #endif // ------------------------------------------------------------------- protected: void handleJackBufferSizeCallback(const uint32_t newBufferSize) { if (pData->bufferSize == newBufferSize) return; #ifndef BUILD_BRIDGE const CarlaMutexLocker cml(fPatchbayProcThreadProtectionMutex); #endif pData->bufferSize = newBufferSize; bufferSizeChanged(newBufferSize); } void handleJackSampleRateCallback(const double newSampleRate) { if (carla_isEqual(pData->sampleRate, newSampleRate)) return; #ifndef BUILD_BRIDGE const CarlaMutexLocker cml(fPatchbayProcThreadProtectionMutex); #endif pData->sampleRate = newSampleRate; sampleRateChanged(newSampleRate); } void handleJackFreewheelCallback(const bool isFreewheel) { if (fFreewheel == isFreewheel) return; #ifndef BUILD_BRIDGE const CarlaMutexLocker cml(fPatchbayProcThreadProtectionMutex); #endif fFreewheel = isFreewheel; offlineModeChanged(isFreewheel); } void handleJackProcessCallback(const uint32_t nframes) { const PendingRtEventsRunner prt(this, nframes); CARLA_SAFE_ASSERT_INT2_RETURN(nframes == pData->bufferSize, nframes, pData->bufferSize,); #ifdef BUILD_BRIDGE CarlaPluginPtr plugin = pData->plugins[0].plugin; if (plugin.get() != nullptr && plugin->isEnabled() && plugin->tryLock(fFreewheel)) { plugin->initBuffers(); processPlugin(plugin, nframes); plugin->unlock(); } #else if (pData->options.transportMode == ENGINE_TRANSPORT_MODE_JACK && !fTimebaseMaster) { jack_position_t jpos; // invalidate jpos.unique_1 = 1; jpos.unique_2 = 2; EngineTimeInfo timeInfo; const bool playing = jackbridge_transport_query(fClient, &jpos) == JackTransportRolling; if (jpos.unique_1 != jpos.unique_2) { timeInfo.playing = false; timeInfo.frame = 0; timeInfo.usecs = 0; timeInfo.bbt.valid = false; } else { timeInfo.playing = playing; timeInfo.frame = jpos.frame; timeInfo.usecs = jpos.usecs; if (jpos.valid & JackPositionBBT) { timeInfo.bbt.valid = true; timeInfo.bbt.bar = jpos.bar; timeInfo.bbt.beat = jpos.beat; #ifdef JACK_TICK_DOUBLE if (jpos.valid & JackTickDouble) timeInfo.bbt.tick = jpos.tick_double; else #endif timeInfo.bbt.tick = jpos.tick; timeInfo.bbt.barStartTick = jpos.bar_start_tick; timeInfo.bbt.beatsPerBar = jpos.beats_per_bar; timeInfo.bbt.beatType = jpos.beat_type; timeInfo.bbt.ticksPerBeat = jpos.ticks_per_beat; timeInfo.bbt.beatsPerMinute = jpos.beats_per_minute; } else { timeInfo.bbt.valid = false; } } pData->timeInfo = timeInfo; } if (pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK) { if (pData->aboutToClose) { if (float* const audioOut1 = (float*)jackbridge_port_get_buffer(fRackPorts[kRackPortAudioOut1], nframes)) carla_zeroFloats(audioOut1, nframes); if (float* const audioOut2 = (float*)jackbridge_port_get_buffer(fRackPorts[kRackPortAudioOut2], nframes)) carla_zeroFloats(audioOut2, nframes); } else if (pData->curPluginCount == 0) { float* const audioIn1 = (float*)jackbridge_port_get_buffer(fRackPorts[kRackPortAudioIn1], nframes); float* const audioIn2 = (float*)jackbridge_port_get_buffer(fRackPorts[kRackPortAudioIn2], nframes); float* const audioOut1 = (float*)jackbridge_port_get_buffer(fRackPorts[kRackPortAudioOut1], nframes); float* const audioOut2 = (float*)jackbridge_port_get_buffer(fRackPorts[kRackPortAudioOut2], nframes); // assert buffers CARLA_SAFE_ASSERT_RETURN(audioIn1 != nullptr,); CARLA_SAFE_ASSERT_RETURN(audioIn2 != nullptr,); CARLA_SAFE_ASSERT_RETURN(audioOut1 != nullptr,); CARLA_SAFE_ASSERT_RETURN(audioOut2 != nullptr,); // pass-through carla_copyFloats(audioOut1, audioIn1, nframes); carla_copyFloats(audioOut2, audioIn2, nframes); // TODO pass-through MIDI as well if (void* const eventOut = jackbridge_port_get_buffer(fRackPorts[kRackPortEventOut], nframes)) jackbridge_midi_clear_buffer(eventOut); return; } } if (pData->options.processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { for (uint i=0; i < pData->curPluginCount; ++i) { if (CarlaPluginPtr plugin = pData->plugins[i].plugin) { if (plugin->isEnabled() && plugin->tryLock(fFreewheel)) { plugin->initBuffers(); processPlugin(plugin, nframes); plugin->unlock(); } } } } else if (pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK || pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY) { CARLA_SAFE_ASSERT_RETURN(pData->events.in != nullptr,); CARLA_SAFE_ASSERT_RETURN(pData->events.out != nullptr,); // get buffers from jack float* const audioIn1 = (float*)jackbridge_port_get_buffer(fRackPorts[kRackPortAudioIn1], nframes); float* const audioIn2 = (float*)jackbridge_port_get_buffer(fRackPorts[kRackPortAudioIn2], nframes); float* const audioOut1 = (float*)jackbridge_port_get_buffer(fRackPorts[kRackPortAudioOut1], nframes); float* const audioOut2 = (float*)jackbridge_port_get_buffer(fRackPorts[kRackPortAudioOut2], nframes); void* const eventIn = jackbridge_port_get_buffer(fRackPorts[kRackPortEventIn], nframes); void* const eventOut = jackbridge_port_get_buffer(fRackPorts[kRackPortEventOut], nframes); // assert buffers CARLA_SAFE_ASSERT_RETURN(audioIn1 != nullptr,); CARLA_SAFE_ASSERT_RETURN(audioIn2 != nullptr,); CARLA_SAFE_ASSERT_RETURN(audioOut1 != nullptr,); CARLA_SAFE_ASSERT_RETURN(audioOut2 != nullptr,); // create audio buffers const float* inBuf[2] = { audioIn1, audioIn2 }; /**/ float* outBuf[2] = { audioOut1, audioOut2 }; // initialize events carla_zeroStructs(pData->events.in, kMaxEngineEventInternalCount); carla_zeroStructs(pData->events.out, kMaxEngineEventInternalCount); if (eventIn != nullptr) { ushort engineEventIndex = 0; jack_midi_event_t jackEvent; const uint32_t jackEventCount(jackbridge_midi_get_event_count(eventIn)); for (uint32_t jackEventIndex=0; jackEventIndex < jackEventCount; ++jackEventIndex) { if (! jackbridge_midi_event_get(&jackEvent, eventIn, jackEventIndex)) continue; CARLA_SAFE_ASSERT_CONTINUE(jackEvent.size < 0xFF /* uint8_t max */); EngineEvent& engineEvent(pData->events.in[engineEventIndex++]); engineEvent.time = jackEvent.time; engineEvent.fillFromMidiData(static_cast(jackEvent.size), jackEvent.buffer, 0); if (engineEventIndex >= kMaxEngineEventInternalCount) break; } } if (pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK) { pData->graph.processRack(pData, inBuf, outBuf, nframes); } else { const CarlaMutexLocker cml(fPatchbayProcThreadProtectionMutex); pData->graph.process(pData, inBuf, outBuf, nframes); } // output control if (eventOut != nullptr) { jackbridge_midi_clear_buffer(eventOut); uint8_t size = 0; uint8_t mdata[3] = { 0, 0, 0 }; uint8_t mdataTmp[EngineMidiEvent::kDataSize]; const uint8_t* mdataPtr; for (ushort i=0; i < kMaxEngineEventInternalCount; ++i) { const EngineEvent& engineEvent(pData->events.out[i]); /**/ if (engineEvent.type == kEngineEventTypeNull) { break; } else if (engineEvent.type == kEngineEventTypeControl) { const EngineControlEvent& ctrlEvent(engineEvent.ctrl); size = ctrlEvent.convertToMidiData(engineEvent.channel, mdata); mdataPtr = mdata; } else if (engineEvent.type == kEngineEventTypeMidi) { const EngineMidiEvent& midiEvent(engineEvent.midi); size = midiEvent.size; CARLA_SAFE_ASSERT_CONTINUE(size > 0); if (size > EngineMidiEvent::kDataSize) { CARLA_SAFE_ASSERT_CONTINUE(midiEvent.dataExt != nullptr); mdataPtr = midiEvent.dataExt; } else { // set first byte mdataTmp[0] = static_cast(midiEvent.data[0] | (engineEvent.channel & MIDI_CHANNEL_BIT)); if (size > 1) { // copy rest carla_copy(mdataTmp+1, midiEvent.data+1, size-1U); } // done mdataPtr = mdataTmp; } } else { continue; } if (size > 0) jackbridge_midi_event_write(eventOut, engineEvent.time, mdataPtr, size); } } } if (pData->options.transportMode == ENGINE_TRANSPORT_MODE_JACK) { if (fTimebaseMaster) { const bool playing = jackbridge_transport_query(fClient, nullptr) == JackTransportRolling; if (fTimebaseRolling != playing) { fTimebaseRolling = playing; pData->timeInfo.playing = playing; } // Check if we are no longer timebase master if (playing && fTimebaseUsecs != 0 && fTimebaseUsecs == pData->timeInfo.usecs) { carla_debug("No longer timerbase master"); fTimebaseMaster = false; } } fTimebaseUsecs = pData->timeInfo.usecs; } #endif // ! BUILD_BRIDGE } void handleJackLatencyCallback(const jack_latency_callback_mode_t /*mode*/) { // TODO } #ifndef BUILD_BRIDGE void handleJackTimebaseCallback(jack_nframes_t nframes, jack_position_t* const pos, const int new_pos) { if (new_pos) pData->time.setNeedsReset(); pData->timeInfo.playing = fTimebaseRolling; pData->timeInfo.frame = pos->frame; pData->timeInfo.usecs = pos->usecs; pData->time.fillJackTimeInfo(pos, nframes); } void handleJackClientUnregistrationCallback(const char* const name) { CARLA_SAFE_ASSERT_RETURN(name != nullptr && name[0] != '\0',); uint groupId; { const CarlaMutexLocker cml(fUsedGroups.mutex); groupId = fUsedGroups.getGroupId(name); // clients might have been registered without ports if (groupId == 0) return; GroupNameToId groupNameToId; groupNameToId.setData(groupId, name); fUsedGroups.list.removeOne(groupNameToId); } // ignore callback if on internal patchbay mode #if defined(HAVE_LIBLO) && !defined(BUILD_BRIDGE) if (! (fExternalPatchbayHost || (fExternalPatchbayOsc && pData->osc.isControlRegisteredForTCP()))) return; #else if (! fExternalPatchbayHost) return; #endif callback(fExternalPatchbayHost, fExternalPatchbayOsc, ENGINE_CALLBACK_PATCHBAY_CLIENT_REMOVED, groupId, 0, 0, 0, 0.0f, nullptr); } void handleJackClientPositionChangeCallback(const jack_uuid_t uuid) { // ignore this if on internal patchbay mode #if defined(HAVE_LIBLO) && !defined(BUILD_BRIDGE) if (! (fExternalPatchbayHost || (fExternalPatchbayOsc && pData->osc.isControlRegisteredForTCP()))) return; #else if (! fExternalPatchbayHost) return; #endif const CarlaMutexLocker cml(fPostPonedUUIDsMutex); fPostPonedUUIDs.addIfNotAlreadyThere(uuid); } void handleJackPortRegistrationCallback(const char* const portName, const char* const shortPortName, const CarlaJackPortHints& jackPortHints) { bool groupFound; CarlaString groupName(portName); groupName.truncate(groupName.rfind(shortPortName, &groupFound)-1); CARLA_SAFE_ASSERT_RETURN(groupFound,); groupFound = false; GroupToIdData groupData; PortToIdData portData; { const CarlaMutexLocker cml1(fUsedGroups.mutex); groupData.id = fUsedGroups.getGroupId(groupName); if (groupData.id == 0) { groupData.id = ++fUsedGroups.lastId; GroupNameToId groupNameToId; groupNameToId.setData(groupData.id, groupName); int pluginId = -1; PatchbayIcon icon = jackPortHints.isHardware ? PATCHBAY_ICON_HARDWARE : PATCHBAY_ICON_APPLICATION; findPluginIdAndIcon(groupName, pluginId, icon); fUsedGroups.list.append(groupNameToId); groupFound = true; groupData.icon = icon; groupData.pluginId = pluginId; std::strncpy(groupData.strVal, groupName, STR_MAX-1); groupData.strVal[STR_MAX-1] = '\0'; } } // ignore the rest if on internal patchbay mode #if defined(HAVE_LIBLO) && !defined(BUILD_BRIDGE) if (! (fExternalPatchbayHost || (fExternalPatchbayOsc && pData->osc.isControlRegisteredForTCP()))) return; #else if (! fExternalPatchbayHost) return; #endif { uint canvasPortFlags = 0x0; canvasPortFlags |= jackPortHints.isInput ? PATCHBAY_PORT_IS_INPUT : 0x0; /**/ if (jackPortHints.isCV) canvasPortFlags |= PATCHBAY_PORT_TYPE_CV; else if (jackPortHints.isOSC) canvasPortFlags |= PATCHBAY_PORT_TYPE_OSC; else if (jackPortHints.isAudio) canvasPortFlags |= PATCHBAY_PORT_TYPE_AUDIO; else if (jackPortHints.isMIDI) canvasPortFlags |= PATCHBAY_PORT_TYPE_MIDI; const CarlaMutexLocker cml2(fUsedPorts.mutex); portData.group = groupData.id; portData.port = ++fUsedPorts.lastId; portData.flags = canvasPortFlags; std::strncpy(portData.strVal, shortPortName, STR_MAX-1); portData.strVal[STR_MAX-1] = '\0'; PortNameToId portNameToId; portNameToId.setData(portData.group, portData.port, shortPortName, portName); fUsedPorts.list.append(portNameToId); } if (groupFound) { callback(fExternalPatchbayHost, fExternalPatchbayOsc, ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, groupData.id, groupData.icon, groupData.pluginId, 0, 0.0f, groupData.strVal); } callback(fExternalPatchbayHost, fExternalPatchbayOsc, ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, portData.group, static_cast(portData.port), static_cast(portData.flags), 0, 0.0f, portData.strVal); } void handleJackPortUnregistrationCallback(const char* const portName) { // ignore this if on internal patchbay mode #if defined(HAVE_LIBLO) && !defined(BUILD_BRIDGE) if (! (fExternalPatchbayHost || (fExternalPatchbayOsc && pData->osc.isControlRegisteredForTCP()))) return; #else if (! fExternalPatchbayHost) return; #endif uint groupId, portId; { const CarlaMutexLocker cml(fUsedPorts.mutex); const PortNameToId& portNameToId(fUsedPorts.getPortNameToId(portName)); /* NOTE: Due to JACK2 async behaviour the port we get here might be the same of a previous rename-plugin request. See the comment on CarlaEngineJack::renamePlugin() for more information. */ if (portNameToId.group <= 0 || portNameToId.port <= 0) return; groupId = portNameToId.group; portId = portNameToId.port; fUsedPorts.list.removeOne(portNameToId); } callback(fExternalPatchbayHost, fExternalPatchbayOsc, ENGINE_CALLBACK_PATCHBAY_PORT_REMOVED, groupId, static_cast(portId), 0, 0, 0.0f, nullptr); } void handleJackPortConnectCallback(const char* const portNameA, const char* const portNameB) { // ignore this if on internal patchbay mode #if defined(HAVE_LIBLO) && !defined(BUILD_BRIDGE) if (! (fExternalPatchbayHost || (fExternalPatchbayOsc && pData->osc.isControlRegisteredForTCP()))) return; #else if (! fExternalPatchbayHost) return; #endif char strBuf[STR_MAX]; uint connectionId; { const CarlaMutexLocker cml1(fUsedPorts.mutex); const PortNameToId& portNameToIdA(fUsedPorts.getPortNameToId(portNameA)); const PortNameToId& portNameToIdB(fUsedPorts.getPortNameToId(portNameB)); /* NOTE: Due to JACK2 async behaviour the port we get here might be the same of a previous rename-plugin request. See the comment on CarlaEngineJack::renamePlugin() for more information. */ if (portNameToIdA.group <= 0 || portNameToIdA.port <= 0) return; if (portNameToIdB.group <= 0 || portNameToIdB.port <= 0) return; const CarlaMutexLocker cml2(fUsedConnections.mutex); std::snprintf(strBuf, STR_MAX-1, "%i:%i:%i:%i", portNameToIdA.group, portNameToIdA.port, portNameToIdB.group, portNameToIdB.port); strBuf[STR_MAX-1] = '\0'; connectionId = ++fUsedConnections.lastId; ConnectionToId connectionToId; connectionToId.setData(connectionId, portNameToIdA.group, portNameToIdA.port, portNameToIdB.group, portNameToIdB.port); fUsedConnections.list.append(connectionToId); } callback(fExternalPatchbayHost, fExternalPatchbayOsc, ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, connectionId, 0, 0, 0, 0.0f, strBuf); } void handleJackPortDisconnectCallback(const char* const portNameA, const char* const portNameB) { // ignore this if on internal patchbay mode #if defined(HAVE_LIBLO) && !defined(BUILD_BRIDGE) if (! (fExternalPatchbayHost || (fExternalPatchbayOsc && pData->osc.isControlRegisteredForTCP()))) return; #else if (! fExternalPatchbayHost) return; #endif uint connectionId = 0; { const CarlaMutexLocker cml1(fUsedPorts.mutex); const PortNameToId& portNameToIdA(fUsedPorts.getPortNameToId(portNameA)); const PortNameToId& portNameToIdB(fUsedPorts.getPortNameToId(portNameB)); /* NOTE: Due to JACK2 async behaviour the port we get here might be the same of a previous rename-plugin request. See the comment on CarlaEngineJack::renamePlugin() for more information. */ if (portNameToIdA.group <= 0 || portNameToIdA.port <= 0) return; if (portNameToIdB.group <= 0 || portNameToIdB.port <= 0) return; const CarlaMutexLocker cml2(fUsedConnections.mutex); for (LinkedList::Itenerator it = fUsedConnections.list.begin2(); it.valid(); it.next()) { const ConnectionToId& connectionToId = it.getValue(kConnectionToIdFallback); CARLA_SAFE_ASSERT_CONTINUE(connectionToId.id != 0); if (connectionToId.groupA == portNameToIdA.group && connectionToId.portA == portNameToIdA.port && connectionToId.groupB == portNameToIdB.group && connectionToId.portB == portNameToIdB.port) { connectionId = connectionToId.id; fUsedConnections.list.remove(it); break; } } } if (connectionId != 0) { callback(fExternalPatchbayHost, fExternalPatchbayOsc, ENGINE_CALLBACK_PATCHBAY_CONNECTION_REMOVED, connectionId, 0, 0, 0, 0.0f, nullptr); } } void handleJackPortRenameCallback(const char* const oldFullName, const char* const newFullName, const char* const newShortName) { // ignore this if on internal patchbay mode #if defined(HAVE_LIBLO) && !defined(BUILD_BRIDGE) if (! (fExternalPatchbayHost || (fExternalPatchbayOsc && pData->osc.isControlRegisteredForTCP()))) return; #else if (! fExternalPatchbayHost) return; #endif CARLA_SAFE_ASSERT_RETURN(oldFullName != nullptr && oldFullName[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(newFullName != nullptr && newFullName[0] != '\0',); bool found; CarlaString groupName(newFullName); groupName.truncate(groupName.rfind(newShortName, &found)-1); CARLA_SAFE_ASSERT_RETURN(found,); uint groupId, portId = 0; char portName[STR_MAX]; found = false; { const CarlaMutexLocker cml1(fUsedGroups.mutex); groupId = fUsedGroups.getGroupId(groupName); CARLA_SAFE_ASSERT_RETURN(groupId != 0,); const CarlaMutexLocker cml2(fUsedPorts.mutex); for (LinkedList::Itenerator it = fUsedPorts.list.begin2(); it.valid(); it.next()) { PortNameToId& portNameToId(it.getValue(kPortNameToIdFallbackNC)); CARLA_SAFE_ASSERT_CONTINUE(portNameToId.group != 0); if (std::strncmp(portNameToId.fullName, oldFullName, STR_MAX) == 0) { CARLA_SAFE_ASSERT_CONTINUE(portNameToId.group == groupId); found = true; portId = portNameToId.port; std::strncpy(portName, newShortName, STR_MAX-1); portName[STR_MAX-1] = '\0'; portNameToId.rename(newShortName, newFullName); break; } } } if (found) { callback(fExternalPatchbayHost, fExternalPatchbayOsc, ENGINE_CALLBACK_PATCHBAY_PORT_CHANGED, groupId, static_cast(portId), 0, 0, 0.0f, portName); } } #endif void handleJackShutdownCallback() { #ifndef BUILD_BRIDGE stopThread(-1); #endif { const PendingRtEventsRunner prt(this, pData->bufferSize); for (uint i=0; i < pData->curPluginCount; ++i) { if (const CarlaPluginPtr plugin = pData->plugins[i].plugin) { plugin->tryLock(true); if (CarlaEngineJackClient* const client = (CarlaEngineJackClient*)plugin->getEngineClient()) client->invalidate(); plugin->unlock(); } } } pData->thread.stopThread(500); fClient = nullptr; #ifdef BUILD_BRIDGE fIsRunning = false; #else carla_zeroPointers(fRackPorts, kRackPortCount); #endif callback(true, true, ENGINE_CALLBACK_ERROR, 0, 0, 0, 0, 0.0f, "Carla has been killed by JACK, or JACK has stopped.\n" "You can still save if you want, but you will lose patchbay connections and positions."); } // ------------------------------------------------------------------- void handlePluginJackShutdownCallback(const CarlaPluginPtr plugin) { CarlaEngineJackClient* const engineClient((CarlaEngineJackClient*)plugin->getEngineClient()); CARLA_SAFE_ASSERT_RETURN(engineClient != nullptr,); plugin->tryLock(true); engineClient->invalidate(); plugin->unlock(); callback(true, true, ENGINE_CALLBACK_PLUGIN_UNAVAILABLE, plugin->getId(), 0, 0, 0, 0.0f, "Killed by JACK"); } // ------------------------------------------------------------------- private: jack_client_t* fClient; bool fExternalPatchbayHost; bool fExternalPatchbayOsc; bool fFreewheel; CarlaString fClientName; CarlaRecursiveMutex fThreadSafeMetadataMutex; // ------------------------------------------------------------------- #ifdef BUILD_BRIDGE bool fIsRunning; #else CarlaString fClientNamePrefix; enum RackPorts { kRackPortAudioIn1 = 0, kRackPortAudioIn2 = 1, kRackPortAudioOut1 = 2, kRackPortAudioOut2 = 3, kRackPortEventIn = 4, kRackPortEventOut = 5, kRackPortCount = 6 }; jack_port_t* fRackPorts[kRackPortCount]; bool fTimebaseMaster; bool fTimebaseRolling; uint64_t fTimebaseUsecs; PatchbayGroupList fUsedGroups; PatchbayPortList fUsedPorts; PatchbayConnectionList fUsedConnections; CarlaMutex fPatchbayProcThreadProtectionMutex; mutable CharStringListPtr fRetConns; void findPluginIdAndIcon(const char* const clientName, int& pluginId, PatchbayIcon& icon) const noexcept { carla_debug("CarlaEngineJack::findPluginIdAndIcon(\"%s\", ...)", clientName); // TODO - this currently only works in multi-client mode if (pData->options.processMode != ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS) return; const CarlaRecursiveMutexLocker crml(fThreadSafeMetadataMutex); jack_uuid_t uuid; { char* const uuidstr = jackbridge_get_uuid_for_client_name(fClient, clientName); CARLA_SAFE_ASSERT_RETURN(uuidstr != nullptr && uuidstr[0] != '\0',); const bool parsed = jackbridge_uuid_parse(uuidstr, &uuid); jackbridge_free(uuidstr); /* if parsing fails, meta-data is not available.. this could be because JACK version is old, or perhaps this is an internal client */ if (! parsed) return; } bool clientBelongsToUs; { char* value = nullptr; char* type = nullptr; if (! jackbridge_get_property(uuid, URI_MAIN_CLIENT_NAME, &value, &type)) return; CARLA_SAFE_ASSERT_RETURN(type != nullptr && type[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(value != nullptr && value[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(std::strcmp(type, URI_TYPE_STRING) == 0,); clientBelongsToUs = fClientName == value; jackbridge_free(value); jackbridge_free(type); } { char* value = nullptr; char* type = nullptr; if (! jackbridge_get_property(uuid, URI_PLUGIN_ID, &value, &type)) return; CARLA_SAFE_ASSERT_RETURN(type != nullptr && type[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(value != nullptr && value[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(std::strcmp(type, URI_TYPE_INTEGER) == 0,); if (clientBelongsToUs) pluginId = std::atoi(value); icon = PATCHBAY_ICON_PLUGIN; jackbridge_free(value); jackbridge_free(type); } { char* value = nullptr; char* type = nullptr; if (! jackbridge_get_property(uuid, URI_PLUGIN_ICON, &value, &type)) return; CARLA_SAFE_ASSERT_RETURN(type != nullptr && type[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(value != nullptr && value[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(std::strcmp(type, URI_TYPE_STRING) == 0,); /**/ if (std::strcmp(value, "app") == 0) icon = PATCHBAY_ICON_APPLICATION; else if (std::strcmp(value, "application") == 0) icon = PATCHBAY_ICON_APPLICATION; else if (std::strcmp(value, "plugin") == 0) icon = PATCHBAY_ICON_PLUGIN; else if (std::strcmp(value, "hardware") == 0) icon = PATCHBAY_ICON_HARDWARE; else if (std::strcmp(value, "carla") == 0) icon = PATCHBAY_ICON_CARLA; else if (std::strcmp(value, "distrho") == 0) icon = PATCHBAY_ICON_DISTRHO; else if (std::strcmp(value, "file") == 0) icon = PATCHBAY_ICON_FILE; jackbridge_free(value); jackbridge_free(type); } } // prevent recursion on patchbay group position changes struct LastPatchbaySetGroupPos { int x1, y1, x2, y2; LastPatchbaySetGroupPos() : x1(0), y1(0), x2(0), y2(0) {} void clear() noexcept { x1 = y1 = x2 = y2 = 0; } void set(const int _x1, const int _y1, const int _x2, const int _y2) noexcept { x1 = _x1; y1 = _y1; x2 = _x2; y2 = _y2; } bool operator!=(const LastPatchbaySetGroupPos& pos) const noexcept { return pos.x1 != x1 || pos.y1 != y1 || pos.x2 != x2 || pos.y2 != y2; } } fLastPatchbaySetGroupPos; // handy stuff only needed for initJackPatchbay struct GroupToIdData { uint id; PatchbayIcon icon; int pluginId; char strVal[STR_MAX]; }; struct PortToIdData { uint group; uint port; uint flags; char strVal[STR_MAX]; }; struct ConnectionToIdData { uint id; char strVal[STR_MAX]; }; void initJackPatchbay(const bool sendHost, const bool sendOSC, const char* const ourName, const bool groupsOnly) { CARLA_SAFE_ASSERT_RETURN(ourName != nullptr && ourName[0] != '\0',); fLastPatchbaySetGroupPos.clear(); uint id, carlaId; CarlaStringList parsedGroups; LinkedList groupCallbackData; LinkedList portsCallbackData; LinkedList connCallbackData; { const CarlaMutexLocker cml1(fUsedGroups.mutex); const CarlaMutexLocker cml2(fUsedPorts.mutex); const CarlaMutexLocker cml3(fUsedConnections.mutex); const CarlaMutexLocker cml4(fPostPonedEventsMutex); const CarlaMutexLocker cml5(fPostPonedUUIDsMutex); fUsedGroups.clear(); fUsedPorts.clear(); fUsedConnections.clear(); fPostPonedEvents.clear(); fPostPonedUUIDs.clear(); // add our client first { carlaId = ++fUsedGroups.lastId; parsedGroups.append(ourName); GroupNameToId groupNameToId; groupNameToId.setData(carlaId, ourName); fUsedGroups.list.append(groupNameToId); } // query all jack ports { const char** const ports = jackbridge_get_ports(fClient, nullptr, nullptr, 0); CARLA_SAFE_ASSERT_RETURN(ports != nullptr,); const CarlaRecursiveMutexLocker crml(fThreadSafeMetadataMutex); for (int i=0; ports[i] != nullptr; ++i) { const char* const fullPortName(ports[i]); CARLA_SAFE_ASSERT_CONTINUE(fullPortName != nullptr && fullPortName[0] != '\0'); const jack_port_t* const jackPort(jackbridge_port_by_name(fClient, fullPortName)); CARLA_SAFE_ASSERT_CONTINUE(jackPort != nullptr); const char* const shortPortName(jackbridge_port_short_name(jackPort)); CARLA_SAFE_ASSERT_CONTINUE(shortPortName != nullptr && shortPortName[0] != '\0'); const CarlaJackPortHints jackPortHints(CarlaJackPortHints::fromPort(jackPort)); uint groupId = 0; bool found; CarlaString groupName(fullPortName); groupName.truncate(groupName.rfind(shortPortName, &found)-1); CARLA_SAFE_ASSERT_CONTINUE(found); if (parsedGroups.contains(groupName)) { groupId = fUsedGroups.getGroupId(groupName); CARLA_SAFE_ASSERT_CONTINUE(groupId > 0); } else { groupId = ++fUsedGroups.lastId; parsedGroups.append(groupName); GroupNameToId groupNameToId; groupNameToId.setData(groupId, groupName); int pluginId = -1; PatchbayIcon icon = jackPortHints.isHardware ? PATCHBAY_ICON_HARDWARE : PATCHBAY_ICON_APPLICATION; findPluginIdAndIcon(groupName, pluginId, icon); fUsedGroups.list.append(groupNameToId); if (! groupsOnly) { GroupToIdData groupData; groupData.id = groupId; groupData.icon = icon; groupData.pluginId = pluginId; std::strncpy(groupData.strVal, groupName, STR_MAX-1); groupData.strVal[STR_MAX-1] = '\0'; groupCallbackData.append(groupData); } } if (groupsOnly) continue; uint canvasPortFlags = 0x0; canvasPortFlags |= jackPortHints.isInput ? PATCHBAY_PORT_IS_INPUT : 0x0; /**/ if (jackPortHints.isCV) canvasPortFlags |= PATCHBAY_PORT_TYPE_CV; else if (jackPortHints.isOSC) canvasPortFlags |= PATCHBAY_PORT_TYPE_OSC; else if (jackPortHints.isAudio) canvasPortFlags |= PATCHBAY_PORT_TYPE_AUDIO; else if (jackPortHints.isMIDI) canvasPortFlags |= PATCHBAY_PORT_TYPE_MIDI; id = ++fUsedPorts.lastId; PortNameToId portNameToId; portNameToId.setData(groupId, id, shortPortName, fullPortName); fUsedPorts.list.append(portNameToId); PortToIdData portData; portData.group = groupId; portData.port = id; portData.flags = canvasPortFlags; std::strncpy(portData.strVal, shortPortName, STR_MAX-1); portData.strVal[STR_MAX-1] = '\0'; portsCallbackData.append(portData); } jackbridge_free(ports); } if (groupsOnly) return; // query connections, after all ports are in place if (const char** const ports = jackbridge_get_ports(fClient, nullptr, nullptr, JackPortIsOutput)) { for (int i=0; ports[i] != nullptr; ++i) { const char* const fullPortName(ports[i]); CARLA_SAFE_ASSERT_CONTINUE(fullPortName != nullptr && fullPortName[0] != '\0'); const jack_port_t* const jackPort(jackbridge_port_by_name(fClient, fullPortName)); CARLA_SAFE_ASSERT_CONTINUE(jackPort != nullptr); const PortNameToId& thisPort(fUsedPorts.getPortNameToId(fullPortName)); CARLA_SAFE_ASSERT_CONTINUE(thisPort.group > 0); CARLA_SAFE_ASSERT_CONTINUE(thisPort.port > 0); if (const char** const connections = jackbridge_port_get_all_connections(fClient, jackPort)) { for (int j=0; connections[j] != nullptr; ++j) { const char* const connection(connections[j]); CARLA_SAFE_ASSERT_CONTINUE(connection != nullptr && connection[0] != '\0'); const PortNameToId& targetPort(fUsedPorts.getPortNameToId(connection)); CARLA_SAFE_ASSERT_CONTINUE(targetPort.group > 0); CARLA_SAFE_ASSERT_CONTINUE(targetPort.port > 0); id = ++fUsedConnections.lastId; ConnectionToId connectionToId; connectionToId.setData(id, thisPort.group, thisPort.port, targetPort.group, targetPort.port); fUsedConnections.list.append(connectionToId); ConnectionToIdData connData; connData.id = id; std::snprintf(connData.strVal, STR_MAX-1, "%i:%i:%i:%i", thisPort.group, thisPort.port, targetPort.group, targetPort.port); connData.strVal[STR_MAX-1] = '\0'; connCallbackData.append(connData); } jackbridge_free(connections); } } jackbridge_free(ports); } } const GroupToIdData groupFallback = { 0, PATCHBAY_ICON_PLUGIN, -1, { '\0' } }; const PortToIdData portFallback = { 0, 0, 0, { '\0' } }; const ConnectionToIdData connFallback = { 0, { '\0' } }; callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, carlaId, PATCHBAY_ICON_CARLA, MAIN_CARLA_PLUGIN_ID, 0, 0.0f, ourName); { const CarlaRecursiveMutexLocker crml(fThreadSafeMetadataMutex); for (LinkedList::Itenerator it = groupCallbackData.begin2(); it.valid(); it.next()) { const GroupToIdData& group(it.getValue(groupFallback)); callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED, group.id, group.icon, group.pluginId, 0, 0.0f, group.strVal); jack_uuid_t uuid; { char* const uuidstr = jackbridge_get_uuid_for_client_name(fClient, group.strVal); CARLA_SAFE_ASSERT_CONTINUE(uuidstr != nullptr && uuidstr[0] != '\0'); const bool parsed = jackbridge_uuid_parse(uuidstr, &uuid); jackbridge_free(uuidstr); /* if parsing fails, meta-data is not available.. this could be because JACK version is old, or perhaps this is an internal client */ if (! parsed) continue; } char* value = nullptr; char* type = nullptr; if (jackbridge_get_property(uuid, URI_POSITION, &value, &type) && value != nullptr && type != nullptr && std::strcmp(type, URI_TYPE_STRING) == 0) { if (char* sep1 = std::strstr(value, ":")) { int x1, y1 = 0, x2 = 0, y2 = 0; *sep1++ = '\0'; x1 = std::atoi(value); if (char* sep2 = std::strstr(sep1, ":")) { *sep2++ = '\0'; y1 = std::atoi(sep1); if (char* sep3 = std::strstr(sep2, ":")) { *sep3++ = '\0'; x2 = std::atoi(sep2); y2 = std::atoi(sep3); } } jackbridge_free(value); jackbridge_free(type); callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_CLIENT_POSITION_CHANGED, group.id, x1, y1, x2, static_cast(y2), nullptr); } } } } for (LinkedList::Itenerator it = portsCallbackData.begin2(); it.valid(); it.next()) { const PortToIdData& port(it.getValue(portFallback)); callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_PORT_ADDED, port.group, static_cast(port.port), static_cast(port.flags), 0, 0.0f, port.strVal); } for (LinkedList::Itenerator it = connCallbackData.begin2(); it.valid(); it.next()) { const ConnectionToIdData& conn(it.getValue(connFallback)); callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, conn.id, 0, 0, 0, 0.0f, conn.strVal); } groupCallbackData.clear(); portsCallbackData.clear(); connCallbackData.clear(); } #endif // ------------------------------------------------------------------- void processPlugin(CarlaPluginPtr& plugin, const uint32_t nframes) { #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH CarlaEngineJackClient* const client = (CarlaEngineJackClient*)plugin->getEngineClient(); CarlaEngineJackCVSourcePorts& cvSourcePorts(client->getCVSourcePorts()); const CarlaRecursiveMutexTryLocker crmtl(cvSourcePorts.getMutex(), fFreewheel); // const CarlaRecursiveMutexLocker crml(cvSourcePorts.getMutex()); #endif /* const uint32_t audioInCount = client->getPortCount(kEnginePortTypeAudio, true); const uint32_t audioOutCount = client->getPortCount(kEnginePortTypeAudio, false); const uint32_t cvInCount = client->getPortCount(kEnginePortTypeCV, true); const uint32_t cvOutCount = client->getPortCount(kEnginePortTypeCV, false); */ const uint32_t audioInCount = plugin->getAudioInCount(); const uint32_t audioOutCount = plugin->getAudioOutCount(); const uint32_t cvInCount = plugin->getCVInCount(); const uint32_t cvOutCount = plugin->getCVOutCount(); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH const uint32_t cvsInCount = crmtl.wasLocked() ? cvSourcePorts.getPortCount() : 0; #else const uint32_t cvsInCount = 0; #endif const float* audioIn[audioInCount]; /* */ float* audioOut[audioOutCount]; const float* cvIn[cvInCount+cvsInCount]; /* */ float* cvOut[cvOutCount]; for (uint32_t i=0; i < audioInCount; ++i) { if (CarlaEngineAudioPort* const port = plugin->getAudioInPort(i)) audioIn[i] = port->getBuffer(); else audioIn[i] = nullptr; } for (uint32_t i=0; i < audioOutCount; ++i) { if (CarlaEngineAudioPort* const port = plugin->getAudioOutPort(i)) audioOut[i] = port->getBuffer(); else audioOut[i] = nullptr; } for (uint32_t i=0; i < cvInCount; ++i) { if (CarlaEngineCVPort* const port = plugin->getCVInPort(i)) cvIn[i] = port->getBuffer(); else cvIn[i] = nullptr; } #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH for (uint32_t i=cvInCount, j=0; j < cvsInCount; ++i, ++j) { if (CarlaEngineCVPort* const port = cvSourcePorts.getPort(j)) { port->initBuffer(); cvIn[i] = port->getBuffer(); } else { cvIn[i] = nullptr; } } #endif for (uint32_t i=0; i < cvOutCount; ++i) { if (CarlaEngineCVPort* const port = plugin->getCVOutPort(i)) cvOut[i] = port->getBuffer(); else cvOut[i] = nullptr; } float inPeaks[2] = { 0.0f }; float outPeaks[2] = { 0.0f }; for (uint32_t i=0; i < audioInCount && i < 2; ++i) { for (uint32_t j=0; j < nframes; ++j) { const float absV(std::abs(audioIn[i][j])); if (absV > inPeaks[i]) inPeaks[i] = absV; } } plugin->process(audioIn, audioOut, cvIn, cvOut, nframes); for (uint32_t i=0; i < audioOutCount && i < 2; ++i) { for (uint32_t j=0; j < nframes; ++j) { const float absV(std::abs(audioOut[i][j])); if (absV > outPeaks[i]) outPeaks[i] = absV; } } setPluginPeaksRT(plugin->getId(), inPeaks, outPeaks); } #ifndef BUILD_BRIDGE // ------------------------------------------------------------------- struct PostPonedJackEvent { enum Type { kTypeNull = 0, kTypeClientRegister, kTypeClientUnregister, kTypeClientPositionChange, kTypePortRegister, kTypePortUnregister, kTypePortConnect, kTypePortDisconnect, kTypePortRename }; Type type; union { struct { char name[STR_MAX+1]; } clientRegister; struct { char name[STR_MAX+1]; } clientUnregister; struct { jack_uuid_t uuid; } clientPositionChange; struct { char shortName[STR_MAX+1]; char fullName[STR_MAX+1]; CarlaJackPortHints hints; } portRegister; struct { char fullName[STR_MAX+1]; } portUnregister; struct { char oldFullName[STR_MAX+1]; char newFullName[STR_MAX+1]; char newShortName[STR_MAX+1]; } portRename; struct { char portNameA[STR_MAX+1]; char portNameB[STR_MAX+1]; } portConnect; struct { char portNameA[STR_MAX+1]; char portNameB[STR_MAX+1]; } portDisconnect; }; }; LinkedList fPostPonedEvents; CarlaMutex fPostPonedEventsMutex; water::Array fPostPonedUUIDs; CarlaMutex fPostPonedUUIDsMutex; bool fIsInternalClient; void postPoneJackCallback(PostPonedJackEvent& ev) { const CarlaMutexLocker cml(fPostPonedEventsMutex); fPostPonedEvents.append(ev); } void run() override { LinkedList events; PostPonedJackEvent nullEvent; carla_zeroStruct(nullEvent); CarlaStringList clientsToIgnore, portsToIgnore; for (; ! shouldThreadExit();) { if (fIsInternalClient) idle(); { const CarlaMutexLocker cml(fPostPonedEventsMutex); if (fPostPonedEvents.count() > 0) fPostPonedEvents.moveTo(events); } if (fClient == nullptr) break; if (events.count() == 0) { carla_msleep(fIsInternalClient ? 50 : 200); continue; } // 1st iteration, fill in what things we ought to ignore and do unregistration clientsToIgnore.clear(); portsToIgnore.clear(); for (LinkedList::Itenerator it = events.begin2(); it.valid(); it.next()) { const PostPonedJackEvent& ev(it.getValue(nullEvent)); CARLA_SAFE_ASSERT_CONTINUE(ev.type != PostPonedJackEvent::kTypeNull); switch (ev.type) { case PostPonedJackEvent::kTypeClientRegister: clientsToIgnore.removeOne(ev.clientRegister.name); break; case PostPonedJackEvent::kTypeClientUnregister: clientsToIgnore.append(ev.clientUnregister.name); handleJackClientUnregistrationCallback(ev.clientUnregister.name); break; case PostPonedJackEvent::kTypePortRegister: portsToIgnore.removeOne(ev.portRegister.fullName); break; case PostPonedJackEvent::kTypePortUnregister: portsToIgnore.append(ev.portUnregister.fullName); handleJackPortUnregistrationCallback(ev.portUnregister.fullName); break; case PostPonedJackEvent::kTypePortDisconnect: handleJackPortDisconnectCallback(ev.portDisconnect.portNameA, ev.portDisconnect.portNameB); break; default: break; } } // 2nd iteration, go through all postponed events while ignoring some for (LinkedList::Itenerator it = events.begin2(); it.valid(); it.next()) { const PostPonedJackEvent& ev(it.getValue(nullEvent)); CARLA_SAFE_ASSERT_CONTINUE(ev.type != PostPonedJackEvent::kTypeNull); switch (ev.type) { case PostPonedJackEvent::kTypeNull: case PostPonedJackEvent::kTypeClientRegister: case PostPonedJackEvent::kTypeClientUnregister: case PostPonedJackEvent::kTypePortUnregister: case PostPonedJackEvent::kTypePortDisconnect: break; case PostPonedJackEvent::kTypeClientPositionChange: { char uuidstr[JACK_UUID_STRING_SIZE]; carla_zeroStruct(uuidstr); jackbridge_uuid_unparse(ev.clientPositionChange.uuid, uuidstr); if (clientsToIgnore.count() != 0) { const CarlaRecursiveMutexLocker crml(fThreadSafeMetadataMutex); const char* const clientname = jackbridge_get_client_name_by_uuid(fClient, uuidstr); CARLA_SAFE_ASSERT_CONTINUE(clientname != nullptr && clientname[0] != '\0'); if (clientsToIgnore.contains(clientname)) continue; } handleJackClientPositionChangeCallback(ev.clientPositionChange.uuid); break; } case PostPonedJackEvent::kTypePortRegister: if (portsToIgnore.contains(ev.portRegister.fullName)) continue; handleJackPortRegistrationCallback(ev.portRegister.fullName, ev.portRegister.shortName, ev.portRegister.hints); break; case PostPonedJackEvent::kTypePortConnect: if (portsToIgnore.contains(ev.portConnect.portNameA)) continue; if (portsToIgnore.contains(ev.portConnect.portNameB)) continue; handleJackPortConnectCallback(ev.portConnect.portNameA, ev.portConnect.portNameB); break; case PostPonedJackEvent::kTypePortRename: handleJackPortRenameCallback(ev.portRename.oldFullName, ev.portRename.newFullName, ev.portRename.newShortName); break; } } events.clear(); } events.clear(); clientsToIgnore.clear(); portsToIgnore.clear(); } #endif // BUILD_BRIDGE // ------------------------------------------------------------------- // disable -Wattributes warnings #if defined(__clang__) # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wattributes" #elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wattributes" #endif #define handlePtr ((CarlaEngineJack*)arg) static void JACKBRIDGE_API carla_jack_thread_init_callback(void*) { #ifdef __SSE2_MATH__ // Set FTZ and DAZ flags _mm_setcsr(_mm_getcsr() | 0x8040); #endif } static int JACKBRIDGE_API carla_jack_bufsize_callback(jack_nframes_t newBufferSize, void* arg) { handlePtr->handleJackBufferSizeCallback(newBufferSize); return 0; } static int JACKBRIDGE_API carla_jack_srate_callback(jack_nframes_t newSampleRate, void* arg) { handlePtr->handleJackSampleRateCallback(newSampleRate); return 0; } static void JACKBRIDGE_API carla_jack_freewheel_callback(int starting, void* arg) { handlePtr->handleJackFreewheelCallback(bool(starting)); } static void JACKBRIDGE_API carla_jack_latency_callback(jack_latency_callback_mode_t mode, void* arg) { handlePtr->handleJackLatencyCallback(mode); } static int JACKBRIDGE_API carla_jack_process_callback(jack_nframes_t nframes, void* arg) __attribute__((annotate("realtime"))) { handlePtr->handleJackProcessCallback(nframes); return 0; } #ifndef BUILD_BRIDGE static void JACKBRIDGE_API carla_jack_timebase_callback(jack_transport_state_t, jack_nframes_t nframes, jack_position_t* pos, int new_pos, void* arg) __attribute__((annotate("realtime"))) { handlePtr->handleJackTimebaseCallback(nframes, pos, new_pos); } static void JACKBRIDGE_API carla_jack_client_registration_callback(const char* name, int reg, void* arg) { PostPonedJackEvent ev; carla_zeroStruct(ev); if (reg != 0) { ev.type = PostPonedJackEvent::kTypeClientRegister; std::strncpy(ev.clientRegister.name, name, STR_MAX); } else { ev.type = PostPonedJackEvent::kTypeClientUnregister; std::strncpy(ev.clientUnregister.name, name, STR_MAX); } handlePtr->postPoneJackCallback(ev); } static void JACKBRIDGE_API carla_jack_port_registration_callback(jack_port_id_t port_id, int reg, void* arg) { const jack_port_t* const port = jackbridge_port_by_id(handlePtr->fClient, port_id); CARLA_SAFE_ASSERT_RETURN(port != nullptr,); const char* const fullName = jackbridge_port_name(port); CARLA_SAFE_ASSERT_RETURN(fullName != nullptr && fullName[0] != '\0',); PostPonedJackEvent ev; carla_zeroStruct(ev); if (reg != 0) { const char* const shortName = jackbridge_port_short_name(port); CARLA_SAFE_ASSERT_RETURN(shortName != nullptr && shortName[0] != '\0',); ev.type = PostPonedJackEvent::kTypePortRegister; std::strncpy(ev.portRegister.fullName, fullName, STR_MAX); std::strncpy(ev.portRegister.shortName, shortName, STR_MAX); const CarlaRecursiveMutexLocker crml(handlePtr->fThreadSafeMetadataMutex); ev.portRegister.hints = CarlaJackPortHints::fromPort(port); } else { ev.type = PostPonedJackEvent::kTypePortUnregister; std::strncpy(ev.portUnregister.fullName, fullName, STR_MAX); } handlePtr->postPoneJackCallback(ev); } static void JACKBRIDGE_API carla_jack_port_connect_callback(jack_port_id_t a, jack_port_id_t b, int connect, void* arg) { const jack_port_t* const portA = jackbridge_port_by_id(handlePtr->fClient, a); CARLA_SAFE_ASSERT_RETURN(portA != nullptr,); const jack_port_t* const portB = jackbridge_port_by_id(handlePtr->fClient, b); CARLA_SAFE_ASSERT_RETURN(portB != nullptr,); const char* const fullNameA = jackbridge_port_name(portA); CARLA_SAFE_ASSERT_RETURN(fullNameA != nullptr && fullNameA[0] != '\0',); const char* const fullNameB = jackbridge_port_name(portB); CARLA_SAFE_ASSERT_RETURN(fullNameB != nullptr && fullNameB[0] != '\0',); PostPonedJackEvent ev; carla_zeroStruct(ev); if (connect != 0) { ev.type = PostPonedJackEvent::kTypePortConnect; std::strncpy(ev.portConnect.portNameA, fullNameA, STR_MAX); std::strncpy(ev.portConnect.portNameB, fullNameB, STR_MAX); } else { ev.type = PostPonedJackEvent::kTypePortDisconnect; std::strncpy(ev.portDisconnect.portNameA, fullNameA, STR_MAX); std::strncpy(ev.portDisconnect.portNameB, fullNameB, STR_MAX); } handlePtr->postPoneJackCallback(ev); } static void JACKBRIDGE_API carla_jack_port_rename_callback(jack_port_id_t port_id, const char* oldName, const char* newName, void* arg) { const jack_port_t* const port = jackbridge_port_by_id(handlePtr->fClient, port_id); CARLA_SAFE_ASSERT_RETURN(port != nullptr,); const char* const shortName = jackbridge_port_short_name(port); CARLA_SAFE_ASSERT_RETURN(shortName != nullptr && shortName[0] != '\0',); PostPonedJackEvent ev; carla_zeroStruct(ev); ev.type = PostPonedJackEvent::kTypePortRename; std::strncpy(ev.portRename.oldFullName, oldName, STR_MAX); std::strncpy(ev.portRename.newFullName, newName, STR_MAX); std::strncpy(ev.portRename.newShortName, shortName, STR_MAX); handlePtr->postPoneJackCallback(ev); } static void carla_jack_property_change_callback(jack_uuid_t subject, const char* key, jack_property_change_t change, void* arg) { if (change != PropertyChanged) return; if (std::strcmp(key, URI_POSITION) != 0) return; PostPonedJackEvent ev; carla_zeroStruct(ev); ev.type = PostPonedJackEvent::kTypeClientPositionChange; ev.clientPositionChange.uuid = subject; handlePtr->postPoneJackCallback(ev); } static int JACKBRIDGE_API carla_jack_xrun_callback(void* arg) { ++(handlePtr->pData->xruns); return 0; } #endif static void JACKBRIDGE_API carla_jack_shutdown_callback(void* arg) { handlePtr->handleJackShutdownCallback(); } #undef handlePtr // ------------------------------------------------------------------- #ifndef BUILD_BRIDGE static int JACKBRIDGE_API carla_jack_process_callback_plugin(jack_nframes_t nframes, void* arg) __attribute__((annotate("realtime"))) { CarlaPluginPtr* const pluginPtr = static_cast(arg); CARLA_SAFE_ASSERT_RETURN(pluginPtr != nullptr, 0); CarlaPluginPtr plugin = *pluginPtr; CARLA_SAFE_ASSERT_RETURN(plugin.get() != nullptr && plugin->isEnabled(), 0); CarlaEngineJack* const engine((CarlaEngineJack*)plugin->getEngine()); CARLA_SAFE_ASSERT_RETURN(engine != nullptr, 0); if (plugin->tryLock(engine->fFreewheel)) { plugin->initBuffers(); engine->processPlugin(plugin, nframes); plugin->unlock(); } return 0; } /* static int JACKBRIDGE_API carla_jack_bufsize_callback_plugin(jack_nframes_t nframes, void* arg) { CarlaPlugin* const plugin((CarlaPlugin*)arg); CARLA_SAFE_ASSERT_RETURN(plugin != nullptr && plugin->isEnabled(), 0); plugin->bufferSizeChanged(nframes); return 1; } static int JACKBRIDGE_API carla_jack_srate_callback_plugin(jack_nframes_t nframes, void* arg) { CarlaPlugin* const plugin((CarlaPlugin*)arg); CARLA_SAFE_ASSERT_RETURN(plugin != nullptr && plugin->isEnabled(), 0); plugin->sampleRateChanged(nframes); return 1; } */ static void JACKBRIDGE_API carla_jack_latency_callback_plugin(jack_latency_callback_mode_t /*mode*/, void* /*arg*/) { // TODO } static void JACKBRIDGE_API carla_jack_shutdown_callback_plugin(void* arg) { CarlaPluginPtr* const pluginPtr = static_cast(arg); CARLA_SAFE_ASSERT_RETURN(pluginPtr != nullptr,); CarlaPluginPtr plugin = *pluginPtr; CARLA_SAFE_ASSERT_RETURN(plugin.get() != nullptr,); CarlaEngineJack* const engine((CarlaEngineJack*)plugin->getEngine()); CARLA_SAFE_ASSERT_RETURN(engine != nullptr,); engine->handlePluginJackShutdownCallback(plugin); } #endif // enable -Wattributes again #if defined(__clang__) # pragma clang diagnostic pop #elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) # pragma GCC diagnostic pop #endif CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaEngineJack) }; // ----------------------------------------------------------------------- namespace EngineInit { CarlaEngine* newJack() { carla_debug("EngineInit::newJack()"); return new CarlaEngineJack(); } } // ----------------------------------------------------------------------- CARLA_BACKEND_END_NAMESPACE #if defined(JACKBRIDGE_DIRECT) && !defined(BUILD_BRIDGE) // ----------------------------------------------------------------------- // internal jack client CARLA_EXPORT int jack_initialize(jack_client_t *client, const char *load_init); CARLA_EXPORT void jack_finish(void *arg); #ifdef CARLA_OS_UNIX # include "ThreadSafeFFTW.hpp" #endif // ----------------------------------------------------------------------- CARLA_EXPORT int jack_initialize(jack_client_t* const client, const char* const load_init) { CARLA_BACKEND_USE_NAMESPACE #ifdef CARLA_OS_UNIX static const ThreadSafeFFTW sThreadSafeFFTW; #endif EngineProcessMode mode; if (load_init != nullptr && std::strcmp(load_init, "rack") == 0) mode = ENGINE_PROCESS_MODE_CONTINUOUS_RACK; else mode = ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS; #ifdef USING_JUCE juce::initialiseJuce_GUI(); #endif CarlaEngineJack* const engine = new CarlaEngineJack(); engine->setOption(ENGINE_OPTION_FORCE_STEREO, 1, nullptr); engine->setOption(ENGINE_OPTION_AUDIO_DRIVER, 0, "JACK"); engine->setOption(ENGINE_OPTION_AUDIO_DEVICE, 0, "Auto-Connect ON"); engine->setOption(ENGINE_OPTION_OSC_ENABLED, 1, nullptr); engine->setOption(ENGINE_OPTION_OSC_PORT_TCP, 22752, nullptr); engine->setOption(ENGINE_OPTION_OSC_PORT_UDP, 22752, nullptr); engine->setOption(ENGINE_OPTION_PROCESS_MODE, mode, nullptr); engine->setOption(ENGINE_OPTION_TRANSPORT_MODE, ENGINE_TRANSPORT_MODE_JACK, nullptr); #ifdef __MOD_DEVICES__ engine->setOption(ENGINE_OPTION_FILE_PATH, FILE_AUDIO, "/data/user-files/Audio Loops:/data/user-files/Audio Tracks"); engine->setOption(ENGINE_OPTION_FILE_PATH, FILE_MIDI, "/data/user-files/MIDI Songs"); #endif // FIXME engine->setOption(ENGINE_OPTION_PATH_BINARIES, 0, "/usr/lib/carla"); engine->setOption(ENGINE_OPTION_PATH_RESOURCES, 0, "/usr/share/resources"); if (engine->initInternal(client)) return 0; delete engine; #ifdef USING_JUCE juce::shutdownJuce_GUI(); #endif return 1; } CARLA_EXPORT void jack_finish(void *arg) { CARLA_BACKEND_USE_NAMESPACE CarlaEngineJack* const engine = (CarlaEngineJack*)arg;; CARLA_SAFE_ASSERT_RETURN(engine != nullptr,); engine->setAboutToClose(); engine->removeAllPlugins(); engine->close(); delete engine; #ifdef USING_JUCE juce::shutdownJuce_GUI(); #endif } // ----------------------------------------------------------------------- #endif // defined(JACKBRIDGE_DIRECT) && !defined(BUILD_BRIDGE) Carla-2.4.2/source/backend/engine/CarlaEngineJuce.cpp000066400000000000000000001036541420416754300223770ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2020 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the GPL.txt file */ #include "CarlaEngineGraph.hpp" #include "CarlaEngineInit.hpp" #include "CarlaEngineInternal.hpp" #include "CarlaBackendUtils.hpp" #include "CarlaStringList.hpp" #include "RtLinkedList.hpp" #if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wdouble-promotion" # pragma GCC diagnostic ignored "-Weffc++" # pragma GCC diagnostic ignored "-Wfloat-equal" #endif #include "AppConfig.h" #include "juce_audio_devices/juce_audio_devices.h" #if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) # pragma GCC diagnostic pop #endif CARLA_BACKEND_START_NAMESPACE // ------------------------------------------------------------------------------------------------------------------- struct MidiInPort { juce::MidiInput* port; char name[STR_MAX+1]; }; struct MidiOutPort { juce::MidiOutput* port; char name[STR_MAX+1]; }; struct RtMidiEvent { uint64_t time; // needs to compare to internal time uint8_t size; uint8_t data[EngineMidiEvent::kDataSize]; }; // ------------------------------------------------------------------------------------------------------------------- // Fallback data static const MidiInPort kMidiInPortFallback = { nullptr, { '\0' } }; static /* */ MidiInPort kMidiInPortFallbackNC = { nullptr, { '\0' } }; static const MidiOutPort kMidiOutPortFallback = { nullptr, { '\0' } }; static /* */ MidiOutPort kMidiOutPortFallbackNC = { nullptr, { '\0' } }; static const RtMidiEvent kRtMidiEventFallback = { 0, 0, { 0 } }; // ------------------------------------------------------------------------------------------------------------------- // Global static data static CharStringListPtr gDeviceNames; static juce::OwnedArray gDeviceTypes; struct JuceCleanup : public juce::DeletedAtShutdown { JuceCleanup() noexcept {} ~JuceCleanup() { gDeviceTypes.clear(true); } }; // ------------------------------------------------------------------------------------------------------------------- // Cleanup struct AudioIODeviceTypeComparator { static int compareElements (const juce::AudioIODeviceType* d1, const juce::AudioIODeviceType* d2) noexcept { return d1->getTypeName().compareNatural (d2->getTypeName()); } }; static void initJuceDevicesIfNeeded() { static juce::AudioDeviceManager sDeviceManager; if (gDeviceTypes.size() != 0) return; sDeviceManager.createAudioDeviceTypes(gDeviceTypes); CARLA_SAFE_ASSERT_RETURN(gDeviceTypes.size() != 0,); new JuceCleanup(); // remove JACK from device list for (int i=0, count=gDeviceTypes.size(); i < count; ++i) { if (gDeviceTypes[i]->getTypeName() == "JACK") { gDeviceTypes.remove(i, true); break; } } AudioIODeviceTypeComparator comp; gDeviceTypes.sort(comp); } // ------------------------------------------------------------------------------------------------------------------- // Juce Engine class CarlaEngineJuce : public CarlaEngine, public juce::AudioIODeviceCallback, public juce::MidiInputCallback { public: CarlaEngineJuce(juce::AudioIODeviceType* const devType) : CarlaEngine(), juce::AudioIODeviceCallback(), fDevice(), fDeviceType(devType), fMidiIns(), fMidiInEvents(), fMidiOuts(), fMidiOutMutex() { carla_debug("CarlaEngineJuce::CarlaEngineJuce(%p)", devType); // just to make sure pData->options.transportMode = ENGINE_TRANSPORT_MODE_INTERNAL; } ~CarlaEngineJuce() override { carla_debug("CarlaEngineJuce::~CarlaEngineJuce()"); } // ------------------------------------- bool init(const char* const clientName) override { CARLA_SAFE_ASSERT_RETURN(clientName != nullptr && clientName[0] != '\0', false); carla_debug("CarlaEngineJuce::init(\"%s\")", clientName); if (pData->options.processMode != ENGINE_PROCESS_MODE_CONTINUOUS_RACK && pData->options.processMode != ENGINE_PROCESS_MODE_PATCHBAY) { setLastError("Invalid process mode"); return false; } juce::String deviceName; if (pData->options.audioDevice != nullptr && pData->options.audioDevice[0] != '\0') { deviceName = pData->options.audioDevice; } else { const int defaultIndex = fDeviceType->getDefaultDeviceIndex(false); juce::StringArray deviceNames(fDeviceType->getDeviceNames()); if (defaultIndex >= 0 && defaultIndex < deviceNames.size()) deviceName = deviceNames[defaultIndex]; } if (deviceName.isEmpty()) { setLastError("Audio device has not been selected yet and a default one is not available"); return false; } fDevice = fDeviceType->createDevice(deviceName, deviceName); if (fDevice == nullptr) { setLastError("Failed to create device"); return false; } juce::StringArray inputNames(fDevice->getInputChannelNames()); juce::StringArray outputNames(fDevice->getOutputChannelNames()); if (inputNames.size() < 0 || outputNames.size() <= 0) { setLastError("Selected device does not have any outputs"); return false; } juce::BigInteger inputChannels; inputChannels.setRange(0, inputNames.size(), true); juce::BigInteger outputChannels; outputChannels.setRange(0, outputNames.size(), true); juce::String error = fDevice->open(inputChannels, outputChannels, pData->options.audioSampleRate, static_cast(pData->options.audioBufferSize)); if (error.isNotEmpty()) { setLastError(error.toUTF8()); fDevice = nullptr; return false; } if (! pData->init(clientName)) { close(); setLastError("Failed to init internal data"); return false; } pData->bufferSize = static_cast(fDevice->getCurrentBufferSizeSamples()); pData->sampleRate = fDevice->getCurrentSampleRate(); pData->initTime(pData->options.transportExtra); pData->graph.create(static_cast(inputNames.size()), static_cast(outputNames.size()), 0, 0); fDevice->start(this); patchbayRefresh(true, false, false); if (pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY) refreshExternalGraphPorts(pData->graph.getPatchbayGraph(), false, false); callback(true, true, ENGINE_CALLBACK_ENGINE_STARTED, 0, pData->options.processMode, pData->options.transportMode, static_cast(pData->bufferSize), static_cast(pData->sampleRate), getCurrentDriverName()); return true; } bool close() override { carla_debug("CarlaEngineJuce::close()"); bool hasError = false; // stop stream first if (fDevice != nullptr && fDevice->isPlaying()) fDevice->stop(); // clear engine data CarlaEngine::close(); pData->graph.destroy(); for (LinkedList::Itenerator it = fMidiIns.begin2(); it.valid(); it.next()) { MidiInPort& inPort(it.getValue(kMidiInPortFallbackNC)); CARLA_SAFE_ASSERT_CONTINUE(inPort.port != nullptr); inPort.port->stop(); delete inPort.port; } fMidiIns.clear(); fMidiInEvents.clear(); fMidiOutMutex.lock(); for (LinkedList::Itenerator it = fMidiOuts.begin2(); it.valid(); it.next()) { MidiOutPort& outPort(it.getValue(kMidiOutPortFallbackNC)); CARLA_SAFE_ASSERT_CONTINUE(outPort.port != nullptr); outPort.port->stopBackgroundThread(); delete outPort.port; } fMidiOuts.clear(); fMidiOutMutex.unlock(); // close stream if (fDevice != nullptr) { if (fDevice->isOpen()) fDevice->close(); fDevice = nullptr; } return !hasError; } bool isRunning() const noexcept override { return fDevice != nullptr && fDevice->isOpen(); } bool isOffline() const noexcept override { return false; } EngineType getType() const noexcept override { return kEngineTypeJuce; } const char* getCurrentDriverName() const noexcept override { return fDeviceType->getTypeName().toRawUTF8(); } /* float getDSPLoad() const noexcept override { return 0.0f; } */ uint32_t getTotalXruns() const noexcept override { const int xruns = fDevice->getXRunCount(); if (xruns <= 0) return 0; const uint uxruns = static_cast(xruns); if (uxruns <= pData->xruns) return 0; return uxruns - pData->xruns; } void clearXruns() const noexcept override { const int xruns = fDevice->getXRunCount(); pData->xruns = xruns > 0 ? static_cast(xruns) : 0; } bool setBufferSizeAndSampleRate(const uint bufferSize, const double sampleRate) override { CARLA_SAFE_ASSERT_RETURN(fDevice != nullptr, false); juce::StringArray inputNames(fDevice->getInputChannelNames()); juce::StringArray outputNames(fDevice->getOutputChannelNames()); if (inputNames.size() < 0 || outputNames.size() <= 0) { setLastError("Selected device does not have any outputs"); return false; } juce::BigInteger inputChannels; inputChannels.setRange(0, inputNames.size(), true); juce::BigInteger outputChannels; outputChannels.setRange(0, outputNames.size(), true); // stop stream first if (fDevice->isPlaying()) fDevice->stop(); if (fDevice->isOpen()) fDevice->close(); juce::String error = fDevice->open(inputChannels, outputChannels, sampleRate, static_cast(bufferSize)); if (error.isNotEmpty()) { setLastError(error.toUTF8()); // try to roll back error = fDevice->open(inputChannels, outputChannels, pData->sampleRate, static_cast(pData->bufferSize)); // if we failed, we are screwed... if (error.isNotEmpty()) { fDevice = nullptr; close(); } return false; } const uint32_t newBufferSize = static_cast(fDevice->getCurrentBufferSizeSamples()); const double newSampleRate = fDevice->getCurrentSampleRate(); if (carla_isNotEqual(pData->sampleRate, newSampleRate)) { pData->sampleRate = newSampleRate; sampleRateChanged(newSampleRate); } if (pData->bufferSize != newBufferSize) { pData->bufferSize = newBufferSize; bufferSizeChanged(newBufferSize); } fDevice->start(this); return true; } bool showDeviceControlPanel() const noexcept override { try { return fDevice->showControlPanel(); } CARLA_SAFE_EXCEPTION_RETURN("showDeviceControlPanel", false); } // ------------------------------------------------------------------- // Patchbay template bool refreshExternalGraphPorts(Graph* const graph, const bool sendHost, const bool sendOSC) { CARLA_SAFE_ASSERT_RETURN(graph != nullptr, false); char strBuf[STR_MAX]; ExternalGraph& extGraph(graph->extGraph); // --------------------------------------------------------------- // clear last ports extGraph.clear(); // --------------------------------------------------------------- // fill in new ones // Audio In { juce::StringArray inputNames(fDevice->getInputChannelNames()); for (int i=0, count=inputNames.size(); igetOutputChannelNames()); for (int i=0, count=outputNames.size(); igetName()); if (deviceName.isNotEmpty()) deviceName = deviceName.dropLastCharacters(deviceName.fromFirstOccurrenceOf(", ", true, false).length()); graph->refresh(sendHost, sendOSC, true, deviceName.toRawUTF8()); } // --------------------------------------------------------------- // add midi connections for (LinkedList::Itenerator it=fMidiIns.begin2(); it.valid(); it.next()) { const MidiInPort& inPort(it.getValue(kMidiInPortFallback)); CARLA_SAFE_ASSERT_CONTINUE(inPort.port != nullptr); const uint portId(extGraph.midiPorts.getPortId(true, inPort.name)); CARLA_SAFE_ASSERT_CONTINUE(portId < extGraph.midiPorts.ins.count()); ConnectionToId connectionToId; connectionToId.setData(++(extGraph.connections.lastId), kExternalGraphGroupMidiIn, portId, kExternalGraphGroupCarla, kExternalGraphCarlaPortMidiIn); std::snprintf(strBuf, STR_MAX-1, "%i:%i:%i:%i", connectionToId.groupA, connectionToId.portA, connectionToId.groupB, connectionToId.portB); strBuf[STR_MAX-1] = '\0'; callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, connectionToId.id, 0, 0, 0, 0.0f, strBuf); extGraph.connections.list.append(connectionToId); } fMidiOutMutex.lock(); for (LinkedList::Itenerator it=fMidiOuts.begin2(); it.valid(); it.next()) { const MidiOutPort& outPort(it.getValue(kMidiOutPortFallback)); CARLA_SAFE_ASSERT_CONTINUE(outPort.port != nullptr); const uint portId(extGraph.midiPorts.getPortId(false, outPort.name)); CARLA_SAFE_ASSERT_CONTINUE(portId < extGraph.midiPorts.outs.count()); ConnectionToId connectionToId; connectionToId.setData(++(extGraph.connections.lastId), kExternalGraphGroupCarla, kExternalGraphCarlaPortMidiOut, kExternalGraphGroupMidiOut, portId); std::snprintf(strBuf, STR_MAX-1, "%i:%i:%i:%i", connectionToId.groupA, connectionToId.portA, connectionToId.groupB, connectionToId.portB); strBuf[STR_MAX-1] = '\0'; callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, connectionToId.id, 0, 0, 0, 0.0f, strBuf); extGraph.connections.list.append(connectionToId); } fMidiOutMutex.unlock(); return true; } bool patchbayRefresh(const bool sendHost, const bool sendOSC, const bool external) override { CARLA_SAFE_ASSERT_RETURN(pData->graph.isReady(), false); if (pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK) return refreshExternalGraphPorts(pData->graph.getRackGraph(), sendHost, sendOSC); if (sendHost) pData->graph.setUsingExternalHost(external); if (sendOSC) pData->graph.setUsingExternalOSC(external); if (external) return refreshExternalGraphPorts(pData->graph.getPatchbayGraph(), sendHost, sendOSC); return CarlaEngine::patchbayRefresh(sendHost, sendOSC, false); } // ------------------------------------------------------------------- protected: void audioDeviceIOCallback(const float** inputChannelData, int numInputChannels, float** outputChannelData, int numOutputChannels, int numSamples) override { CARLA_SAFE_ASSERT_RETURN(numSamples >= 0,); const uint32_t nframes(static_cast(numSamples)); const PendingRtEventsRunner prt(this, nframes, true); // FIXME remove dspCalc after updating juce // assert juce buffers CARLA_SAFE_ASSERT_RETURN(numInputChannels >= 0,); CARLA_SAFE_ASSERT_RETURN(numOutputChannels > 0,); CARLA_SAFE_ASSERT_RETURN(outputChannelData != nullptr,); CARLA_SAFE_ASSERT_RETURN(numSamples == static_cast(pData->bufferSize),); // initialize juce output for (int i=0; i < numOutputChannels; ++i) carla_zeroFloats(outputChannelData[i], nframes); // initialize events carla_zeroStructs(pData->events.in, kMaxEngineEventInternalCount); carla_zeroStructs(pData->events.out, kMaxEngineEventInternalCount); if (fMidiInEvents.mutex.tryLock()) { uint32_t engineEventIndex = 0; fMidiInEvents.splice(); for (LinkedList::Itenerator it = fMidiInEvents.data.begin2(); it.valid(); it.next()) { const RtMidiEvent& midiEvent(it.getValue(kRtMidiEventFallback)); CARLA_SAFE_ASSERT_CONTINUE(midiEvent.size > 0); EngineEvent& engineEvent(pData->events.in[engineEventIndex++]); if (midiEvent.time < pData->timeInfo.frame) { engineEvent.time = 0; } else if (midiEvent.time >= pData->timeInfo.frame + nframes) { carla_stderr("MIDI Event in the future!, %i vs %i", engineEvent.time, pData->timeInfo.frame); engineEvent.time = static_cast(pData->timeInfo.frame) + nframes - 1; } else engineEvent.time = static_cast(midiEvent.time - pData->timeInfo.frame); engineEvent.fillFromMidiData(midiEvent.size, midiEvent.data, 0); if (engineEventIndex >= kMaxEngineEventInternalCount) break; } fMidiInEvents.data.clear(); fMidiInEvents.mutex.unlock(); } pData->graph.process(pData, inputChannelData, outputChannelData, nframes); fMidiOutMutex.lock(); if (fMidiOuts.count() > 0) { uint8_t size = 0; uint8_t data[3] = { 0, 0, 0 }; const uint8_t* dataPtr = data; for (ushort i=0; i < kMaxEngineEventInternalCount; ++i) { const EngineEvent& engineEvent(pData->events.out[i]); if (engineEvent.type == kEngineEventTypeNull) break; else if (engineEvent.type == kEngineEventTypeControl) { const EngineControlEvent& ctrlEvent(engineEvent.ctrl); ctrlEvent.convertToMidiData(engineEvent.channel, data); dataPtr = data; } else if (engineEvent.type == kEngineEventTypeMidi) { const EngineMidiEvent& midiEvent(engineEvent.midi); size = midiEvent.size; if (size > EngineMidiEvent::kDataSize && midiEvent.dataExt != nullptr) dataPtr = midiEvent.dataExt; else dataPtr = midiEvent.data; } else { continue; } if (size > 0) { juce::MidiMessage message(static_cast(dataPtr), static_cast(size), static_cast(engineEvent.time)/nframes); for (LinkedList::Itenerator it=fMidiOuts.begin2(); it.valid(); it.next()) { MidiOutPort& outPort(it.getValue(kMidiOutPortFallbackNC)); CARLA_SAFE_ASSERT_CONTINUE(outPort.port != nullptr); outPort.port->sendMessageNow(message); } } } } fMidiOutMutex.unlock(); } void audioDeviceAboutToStart(juce::AudioIODevice* /*device*/) override { } void audioDeviceStopped() override { } void audioDeviceError(const juce::String& errorMessage) override { callback(true, true, ENGINE_CALLBACK_ERROR, 0, 0, 0, 0, 0.0f, errorMessage.toRawUTF8()); } // ------------------------------------------------------------------- void handleIncomingMidiMessage(juce::MidiInput* /*source*/, const juce::MidiMessage& message) override { const int messageSize(message.getRawDataSize()); if (messageSize <= 0 || messageSize > EngineMidiEvent::kDataSize) return; const uint8_t* const messageData(message.getRawData()); RtMidiEvent midiEvent; midiEvent.time = 0; // TODO midiEvent.size = static_cast(messageSize); int i=0; for (; i < messageSize; ++i) midiEvent.data[i] = messageData[i]; for (; i < EngineMidiEvent::kDataSize; ++i) midiEvent.data[i] = 0; fMidiInEvents.append(midiEvent); } // ------------------------------------------------------------------- bool connectExternalGraphPort(const uint connectionType, const uint portId, const char* const portName) override { CARLA_SAFE_ASSERT_RETURN(connectionType != 0 || (portName != nullptr && portName[0] != '\0'), false); carla_stdout("CarlaEngineJuce::connectExternalGraphPort(%u, %u, \"%s\")", connectionType, portId, portName); switch (connectionType) { case kExternalGraphConnectionAudioIn1: case kExternalGraphConnectionAudioIn2: case kExternalGraphConnectionAudioOut1: case kExternalGraphConnectionAudioOut2: return CarlaEngine::connectExternalGraphPort(connectionType, portId, portName); case kExternalGraphConnectionMidiInput: { juce::StringArray midiIns(juce::MidiInput::getDevices()); if (! midiIns.contains(portName)) return false; std::unique_ptr juceMidiIn(juce::MidiInput::openDevice(midiIns.indexOf(portName), this)); juceMidiIn->start(); MidiInPort midiPort; midiPort.port = juceMidiIn.release(); std::strncpy(midiPort.name, portName, STR_MAX); midiPort.name[STR_MAX] = '\0'; fMidiIns.append(midiPort); return true; } break; case kExternalGraphConnectionMidiOutput: { juce::StringArray midiOuts(juce::MidiOutput::getDevices()); if (! midiOuts.contains(portName)) return false; std::unique_ptr juceMidiOut(juce::MidiOutput::openDevice(midiOuts.indexOf(portName))); juceMidiOut->startBackgroundThread(); MidiOutPort midiPort; midiPort.port = juceMidiOut.release(); std::strncpy(midiPort.name, portName, STR_MAX); midiPort.name[STR_MAX] = '\0'; const CarlaMutexLocker cml(fMidiOutMutex); fMidiOuts.append(midiPort); return true; } break; } return false; } bool disconnectExternalGraphPort(const uint connectionType, const uint portId, const char* const portName) override { CARLA_SAFE_ASSERT_RETURN(connectionType != 0 || (portName != nullptr && portName[0] != '\0'), false); carla_debug("CarlaEngineJuce::disconnectExternalGraphPort(%u, %u, \"%s\")", connectionType, portId, portName); switch (connectionType) { case kExternalGraphConnectionAudioIn1: case kExternalGraphConnectionAudioIn2: case kExternalGraphConnectionAudioOut1: case kExternalGraphConnectionAudioOut2: return CarlaEngine::disconnectExternalGraphPort(connectionType, portId, portName); case kExternalGraphConnectionMidiInput: for (LinkedList::Itenerator it=fMidiIns.begin2(); it.valid(); it.next()) { MidiInPort& inPort(it.getValue(kMidiInPortFallbackNC)); CARLA_SAFE_ASSERT_CONTINUE(inPort.port != nullptr); if (std::strcmp(inPort.name, portName) != 0) continue; inPort.port->stop(); delete inPort.port; fMidiIns.remove(it); return true; } break; case kExternalGraphConnectionMidiOutput: { const CarlaMutexLocker cml(fMidiOutMutex); for (LinkedList::Itenerator it=fMidiOuts.begin2(); it.valid(); it.next()) { MidiOutPort& outPort(it.getValue(kMidiOutPortFallbackNC)); CARLA_SAFE_ASSERT_CONTINUE(outPort.port != nullptr); if (std::strcmp(outPort.name, portName) != 0) continue; outPort.port->stopBackgroundThread(); delete outPort.port; fMidiOuts.remove(it); return true; } } break; } return false; } // ------------------------------------- private: CarlaScopedPointer fDevice; juce::AudioIODeviceType* const fDeviceType; struct RtMidiEvents { CarlaMutex mutex; RtLinkedList::Pool dataPool; RtLinkedList data; RtLinkedList dataPending; RtMidiEvents() : mutex(), dataPool("RtMidiEvents", 512, 512), data(dataPool), dataPending(dataPool) {} ~RtMidiEvents() { clear(); } void append(const RtMidiEvent& event) { mutex.lock(); dataPending.append(event); mutex.unlock(); } void clear() { mutex.lock(); data.clear(); dataPending.clear(); mutex.unlock(); } void splice() { if (dataPending.count() > 0) dataPending.moveTo(data, true /* append */); } }; LinkedList fMidiIns; RtMidiEvents fMidiInEvents; LinkedList fMidiOuts; CarlaMutex fMidiOutMutex; CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaEngineJuce) }; // ----------------------------------------- namespace EngineInit { CarlaEngine* newJuce(const AudioApi api) { initJuceDevicesIfNeeded(); juce::String juceApi; switch (api) { case AUDIO_API_NULL: case AUDIO_API_OSS: case AUDIO_API_PULSEAUDIO: break; case AUDIO_API_JACK: juceApi = "JACK"; break; case AUDIO_API_ALSA: juceApi = "ALSA"; break; case AUDIO_API_COREAUDIO: juceApi = "CoreAudio"; break; case AUDIO_API_ASIO: juceApi = "ASIO"; break; case AUDIO_API_DIRECTSOUND: juceApi = "DirectSound"; break; case AUDIO_API_WASAPI: juceApi = "Windows Audio"; break; } if (juceApi.isEmpty()) return nullptr; juce::AudioIODeviceType* deviceType = nullptr; for (int i=0, count=gDeviceTypes.size(); i < count; ++i) { deviceType = gDeviceTypes[i]; if (deviceType == nullptr || deviceType->getTypeName() == juceApi) break; } if (deviceType == nullptr) return nullptr; deviceType->scanForDevices(); return new CarlaEngineJuce(deviceType); } uint getJuceApiCount() { initJuceDevicesIfNeeded(); return static_cast(gDeviceTypes.size()); } const char* getJuceApiName(const uint uindex) { initJuceDevicesIfNeeded(); const int index(static_cast(uindex)); CARLA_SAFE_ASSERT_RETURN(index < gDeviceTypes.size(), nullptr); juce::AudioIODeviceType* const deviceType(gDeviceTypes[index]); CARLA_SAFE_ASSERT_RETURN(deviceType != nullptr, nullptr); return deviceType->getTypeName().toRawUTF8(); } const char* const* getJuceApiDeviceNames(const uint uindex) { initJuceDevicesIfNeeded(); const int index(static_cast(uindex)); CARLA_SAFE_ASSERT_RETURN(index < gDeviceTypes.size(), nullptr); juce::AudioIODeviceType* const deviceType(gDeviceTypes[index]); CARLA_SAFE_ASSERT_RETURN(deviceType != nullptr, nullptr); deviceType->scanForDevices(); juce::StringArray juceDeviceNames(deviceType->getDeviceNames()); const int juceDeviceNameCount(juceDeviceNames.size()); if (juceDeviceNameCount <= 0) return nullptr; CarlaStringList devNames; for (int i=0; i < juceDeviceNameCount; ++i) devNames.append(juceDeviceNames[i].toRawUTF8()); gDeviceNames = devNames.toCharStringListPtr(); return gDeviceNames; } const EngineDriverDeviceInfo* getJuceDeviceInfo(const uint uindex, const char* const deviceName) { initJuceDevicesIfNeeded(); const int index(static_cast(uindex)); CARLA_SAFE_ASSERT_RETURN(index < gDeviceTypes.size(), nullptr); juce::AudioIODeviceType* const deviceType(gDeviceTypes[index]); CARLA_SAFE_ASSERT_RETURN(deviceType != nullptr, nullptr); deviceType->scanForDevices(); CarlaScopedPointer device(deviceType->createDevice(deviceName, deviceName)); if (device == nullptr) return nullptr; static EngineDriverDeviceInfo devInfo = { 0x0, nullptr, nullptr }; static uint32_t dummyBufferSizes[11] = { 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 0 }; static double dummySampleRates[14] = { 22050.0, 32000.0, 44100.0, 48000.0, 88200.0, 96000.0, 176400.0, 192000.0, 0.0 }; // reset devInfo.hints = ENGINE_DRIVER_DEVICE_VARIABLE_BUFFER_SIZE | ENGINE_DRIVER_DEVICE_VARIABLE_SAMPLE_RATE; // cleanup if (devInfo.bufferSizes != nullptr && devInfo.bufferSizes != dummyBufferSizes) { delete[] devInfo.bufferSizes; devInfo.bufferSizes = nullptr; } if (devInfo.sampleRates != nullptr && devInfo.sampleRates != dummySampleRates) { delete[] devInfo.sampleRates; devInfo.sampleRates = nullptr; } if (device->hasControlPanel()) devInfo.hints |= ENGINE_DRIVER_DEVICE_HAS_CONTROL_PANEL; juce::Array juceBufferSizes = device->getAvailableBufferSizes(); if (int bufferSizesCount = juceBufferSizes.size()) { uint32_t* const bufferSizes(new uint32_t[bufferSizesCount+1]); for (int i=0; i < bufferSizesCount; ++i) bufferSizes[i] = static_cast(juceBufferSizes[i]); bufferSizes[bufferSizesCount] = 0; devInfo.bufferSizes = bufferSizes; } else { devInfo.bufferSizes = dummyBufferSizes; } juce::Array juceSampleRates = device->getAvailableSampleRates(); if (int sampleRatesCount = juceSampleRates.size()) { double* const sampleRates(new double[sampleRatesCount+1]); for (int i=0; i < sampleRatesCount; ++i) sampleRates[i] = juceSampleRates[i]; sampleRates[sampleRatesCount] = 0.0; devInfo.sampleRates = sampleRates; } else { devInfo.sampleRates = dummySampleRates; } return &devInfo; } bool showJuceDeviceControlPanel(const uint uindex, const char* const deviceName) { const int index(static_cast(uindex)); CARLA_SAFE_ASSERT_RETURN(index < gDeviceTypes.size(), false); juce::AudioIODeviceType* const deviceType(gDeviceTypes[index]); CARLA_SAFE_ASSERT_RETURN(deviceType != nullptr, false); deviceType->scanForDevices(); CarlaScopedPointer device(deviceType->createDevice(deviceName, deviceName)); CARLA_SAFE_ASSERT_RETURN(device != nullptr, false); return device->showControlPanel(); } } // ----------------------------------------- CARLA_BACKEND_END_NAMESPACE Carla-2.4.2/source/backend/engine/CarlaEngineNative.cpp000066400000000000000000003256461420416754300227460ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2020 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "CarlaDefines.h" #ifdef BUILD_BRIDGE_ALTERNATIVE_ARCH # error This file should not be compiled if building alternative-arch bridges #endif #include "CarlaEngineInit.hpp" #include "CarlaEngineInternal.hpp" #include "CarlaPlugin.hpp" #include "CarlaBackendUtils.hpp" #include "CarlaBase64Utils.hpp" #include "CarlaBinaryUtils.hpp" #include "CarlaMathUtils.hpp" #include "CarlaStateUtils.hpp" #include "CarlaExternalUI.hpp" #include "CarlaHost.h" #include "CarlaNative.hpp" #include "CarlaNativePlugin.h" #if defined(USING_JUCE) && ! (defined(CARLA_OS_MAC) || defined(CARLA_OS_WIN)) # if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wconversion" # pragma GCC diagnostic ignored "-Weffc++" # pragma GCC diagnostic ignored "-Wsign-conversion" # pragma GCC diagnostic ignored "-Wundef" # pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant" # endif # include "AppConfig.h" # include "juce_events/juce_events.h" # define USE_REFCOUNTER_JUCE_MESSAGE_MANAGER # if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) # pragma GCC diagnostic pop # endif #endif #include "water/files/File.h" #include "water/streams/MemoryOutputStream.h" #include "water/xml/XmlDocument.h" #include "water/xml/XmlElement.h" using water::File; using water::MemoryOutputStream; using water::String; using water::XmlDocument; using water::XmlElement; CARLA_BACKEND_START_NAMESPACE static const uint32_t kNumInParams = 100; static const uint32_t kNumOutParams = 10; static const uint16_t kUiWidth = 1024; static const uint16_t kUiHeight = 712; // ----------------------------------------------------------------------- #ifdef USE_REFCOUNTER_JUCE_MESSAGE_MANAGER static int numScopedInitInstances = 0; struct ReferenceCountedJuceMessageMessager { ReferenceCountedJuceMessageMessager() { CARLA_SAFE_ASSERT(numScopedInitInstances == 0); } ~ReferenceCountedJuceMessageMessager() { CARLA_SAFE_ASSERT(numScopedInitInstances == 0); } void incRef() { if (numScopedInitInstances++ == 0) { juce::initialiseJuce_GUI(); juce::MessageManager::getInstance()->setCurrentThreadAsMessageThread(); } } void decRef() { if (--numScopedInitInstances == 0) { juce::shutdownJuce_GUI(); } } }; #endif // ----------------------------------------------------------------------- class CarlaEngineNative; class CarlaEngineNativeUI : public CarlaExternalUI { public: CarlaEngineNativeUI(CarlaEngineNative* const engine) : fEngine(engine) { carla_debug("CarlaEngineNativeUI::CarlaEngineNativeUI(%p)", engine); } ~CarlaEngineNativeUI() noexcept override { carla_debug("CarlaEngineNativeUI::~CarlaEngineNativeUI()"); } protected: bool msgReceived(const char* const msg) noexcept override; private: CarlaEngineNative* const fEngine; void _updateParamValues(const CarlaPluginPtr& plugin, uint32_t pluginId, bool sendCallback, bool sendPluginHost) const noexcept; CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaEngineNativeUI) }; // ----------------------------------------------------------------------- class CarlaEngineNative : public CarlaEngine { public: CarlaEngineNative(const NativeHostDescriptor* const host, const bool isPatchbay, const bool withMidiOut, const uint32_t inChan = 2, uint32_t outChan = 2, const uint32_t cvIns = 0, const uint32_t cvOuts = 0) : CarlaEngine(), pHost(host), #ifdef USE_REFCOUNTER_JUCE_MESSAGE_MANAGER // if not running inside Carla, we will have to run event loop ourselves kNeedsJuceEvents(host->dispatcher(pHost->handle, NATIVE_HOST_OPCODE_INTERNAL_PLUGIN, 0, 0, nullptr, 0.0f) == 0), fJuceMsgMgr(), fJuceMsgMutex(), #endif kIsPatchbay(isPatchbay), kHasMidiOut(withMidiOut), fIsActive(false), fIsRunning(false), fUsesEmbed(false), fUiServer(this), fLastScaleFactor(1.0f), fLastProjectFolder(), fPluginDeleterMutex(), fOptionsForced(false) { carla_debug("CarlaEngineNative::CarlaEngineNative()"); carla_zeroFloats(fParameters, kNumInParams+kNumOutParams); #ifdef USE_REFCOUNTER_JUCE_MESSAGE_MANAGER if (kNeedsJuceEvents) fJuceMsgMgr->incRef(); #endif pData->bufferSize = pHost->get_buffer_size(pHost->handle); pData->sampleRate = pHost->get_sample_rate(pHost->handle); pData->initTime(nullptr); #ifndef BUILD_BRIDGE // Forced OSC setup when running as plugin pData->options.oscEnabled = true; pData->options.oscPortTCP = -1; pData->options.oscPortUDP = 0; #endif if (outChan == 0) outChan = inChan; // set-up engine if (kIsPatchbay) { pData->options.processMode = ENGINE_PROCESS_MODE_PATCHBAY; pData->options.transportMode = ENGINE_TRANSPORT_MODE_PLUGIN; pData->options.forceStereo = false; pData->options.preferPluginBridges = false; pData->options.preferUiBridges = false; init("Carla-Patchbay"); pData->graph.create(inChan, outChan, cvIns, cvOuts); } else { CARLA_SAFE_ASSERT(inChan == 2); CARLA_SAFE_ASSERT(outChan == 2); pData->options.processMode = ENGINE_PROCESS_MODE_CONTINUOUS_RACK; pData->options.transportMode = ENGINE_TRANSPORT_MODE_PLUGIN; pData->options.forceStereo = true; pData->options.preferPluginBridges = false; pData->options.preferUiBridges = false; init("Carla-Rack"); pData->graph.create(0, 0, 0, 0); // FIXME? } if (pData->options.resourceDir != nullptr) delete[] pData->options.resourceDir; if (pData->options.binaryDir != nullptr) delete[] pData->options.binaryDir; const water::String binaryDir(File(File::getSpecialLocation(File::currentExecutableFile).getParentDirectory()).getFullPathName()); pData->options.resourceDir = carla_strdup(pHost->resourceDir); pData->options.binaryDir = carla_strdup(binaryDir.toRawUTF8()); } ~CarlaEngineNative() override { CARLA_SAFE_ASSERT(! fIsActive); carla_debug("CarlaEngineNative::~CarlaEngineNative() - START"); pData->aboutToClose = true; fIsRunning = false; { #ifdef USE_REFCOUNTER_JUCE_MESSAGE_MANAGER const ScopedJuceMessageThreadRunner sjmtr(*this, true); #endif removeAllPlugins(); //runPendingRtEvents(); close(); pData->graph.destroy(); } #ifdef USE_REFCOUNTER_JUCE_MESSAGE_MANAGER if (kNeedsJuceEvents) fJuceMsgMgr->decRef(); #endif carla_debug("CarlaEngineNative::~CarlaEngineNative() - END"); } // ------------------------------------- // CarlaEngine virtual calls bool init(const char* const clientName) override { carla_debug("CarlaEngineNative::init(\"%s\")", clientName); fIsRunning = true; if (! pData->init(clientName)) { close(); setLastError("Failed to init internal data"); return false; } pData->bufferSize = pHost->get_buffer_size(pHost->handle); pData->sampleRate = pHost->get_sample_rate(pHost->handle); return true; } bool close() override { fIsRunning = false; CarlaEngine::close(); return true; } bool isRunning() const noexcept override { return fIsRunning; } bool isOffline() const noexcept override { return pHost->is_offline(pHost->handle); } bool usesConstantBufferSize() const noexcept override { // TODO LV2 hosts can report this, till then we allow this return true; } EngineType getType() const noexcept override { return kEngineTypePlugin; } const char* getCurrentDriverName() const noexcept override { return "Plugin"; } const char* getCurrentProjectFolder() const noexcept override { CARLA_SAFE_ASSERT_RETURN(pHost != nullptr, nullptr); static char filetype[] = "carla\0"; try { return (const char*)(uintptr_t)pHost->dispatcher(pHost->handle, NATIVE_HOST_OPCODE_GET_FILE_PATH, 0, 0, (void*)filetype, 0.0f); } CARLA_SAFE_EXCEPTION_RETURN("get_file_path", nullptr); } void callback(const bool sendHost, const bool sendOsc, const EngineCallbackOpcode action, const uint pluginId, const int value1, const int value2, const int value3, const float valuef, const char* const valueStr) noexcept override { CarlaEngine::callback(sendHost, sendOsc, action, pluginId, value1, value2, value3, valuef, valueStr); if (sendHost) uiServerCallback(action, pluginId, value1, value2, value3, valuef, valueStr); switch (action) { case ENGINE_CALLBACK_IDLE: if (! pData->aboutToClose) pHost->dispatcher(pHost->handle, NATIVE_HOST_OPCODE_HOST_IDLE, 0, 0, nullptr, 0.0f); break; case ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED: if (sendHost && value1 >= 0) { uint32_t rindex = static_cast(value1); if (_getRealIndexForPluginParameter(pluginId, rindex)) { fParameters[rindex] = valuef; if (fUsesEmbed || fUiServer.isPipeRunning()) { pHost->ui_parameter_changed(pHost->handle, rindex, valuef); } else { static uint last_pluginId = pluginId; static int last_value1 = value1; static bool init = true; if (init || last_pluginId != pluginId || last_value1 != value1) { init = false; last_pluginId = pluginId; last_value1 = value1; carla_stdout("Plugin with id %d triggered parameter %d update while UI is hidden", pluginId, value1); } } } } break; default: break; } } const char* runFileCallback(FileCallbackOpcode action, bool isDir, const char* title, const char* filter) noexcept override { switch (action) { case FILE_CALLBACK_DEBUG: return nullptr; case FILE_CALLBACK_OPEN: return pHost->ui_open_file(pHost->handle, isDir, title, filter); case FILE_CALLBACK_SAVE: return pHost->ui_save_file(pHost->handle, isDir, title, filter); } return nullptr; } // ------------------------------------------------------------------- void touchPluginParameter(const uint id, const uint32_t parameterId, const bool touch) noexcept override { setParameterTouchFromUI(id, parameterId, touch); } // ------------------------------------------------------------------- void setParameterValueFromUI(const uint32_t pluginId, const uint32_t index, const float value) { uint32_t rindex = index; if (_getRealIndexForPluginParameter(pluginId, rindex)) { fParameters[rindex] = value; pHost->ui_parameter_changed(pHost->handle, rindex, value); } } void setParameterTouchFromUI(const uint32_t pluginId, const uint32_t index, const bool touch) { uint32_t rindex = index; if (_getRealIndexForPluginParameter(pluginId, rindex)) { pHost->dispatcher(pHost->handle, NATIVE_HOST_OPCODE_UI_TOUCH_PARAMETER, static_cast(rindex), touch ? 1 : 0, nullptr, 0.0f); } } void reloadFromUI() { carla_zeroFloats(fParameters, kNumInParams+kNumOutParams); pHost->dispatcher(pHost->handle, NATIVE_HOST_OPCODE_RELOAD_PARAMETERS, 0, 0, nullptr, 0.0f); } protected: // ------------------------------------------------------------------- void bufferSizeChanged(const uint32_t newBufferSize) { if (pData->bufferSize == newBufferSize) return; { const CarlaMutexLocker cml(fUiServer.getPipeLock()); if (fUiServer.writeMessage("buffer-size\n")) { char tmpBuf[STR_MAX+1]; carla_zeroChars(tmpBuf, STR_MAX+1); std::snprintf(tmpBuf, STR_MAX, "%i\n", newBufferSize); if (fUiServer.writeMessage(tmpBuf)) fUiServer.flushMessages(); } } pData->bufferSize = newBufferSize; CarlaEngine::bufferSizeChanged(newBufferSize); } void sampleRateChanged(const double newSampleRate) { if (carla_isEqual(pData->sampleRate, newSampleRate)) return; { const CarlaMutexLocker cml(fUiServer.getPipeLock()); if (fUiServer.writeMessage("sample-rate\n")) { char tmpBuf[STR_MAX+1]; carla_zeroChars(tmpBuf, STR_MAX+1); { const CarlaScopedLocale csl; std::snprintf(tmpBuf, STR_MAX, "%.12g\n", newSampleRate); } if (fUiServer.writeMessage(tmpBuf)) fUiServer.flushMessages(); } } pData->sampleRate = newSampleRate; CarlaEngine::sampleRateChanged(newSampleRate); } // ------------------------------------------------------------------- void uiServerSendPluginInfo(const CarlaPluginPtr& plugin) { char tmpBuf[STR_MAX+1]; carla_zeroChars(tmpBuf, STR_MAX+1); const CarlaMutexLocker cml(fUiServer.getPipeLock()); const uint pluginId(plugin->getId()); std::snprintf(tmpBuf, STR_MAX, "PLUGIN_INFO_%i\n", pluginId); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); std::snprintf(tmpBuf, STR_MAX, "%i:%i:%i:" P_INT64 ":%i:%i\n", plugin->getType(), plugin->getCategory(), plugin->getHints(), plugin->getUniqueId(), plugin->getOptionsAvailable(), plugin->getOptionsEnabled()); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); if (const char* const filename = plugin->getFilename()) { CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(filename),); } else { CARLA_SAFE_ASSERT_RETURN(fUiServer.writeEmptyMessage(),); } if (const char* const name = plugin->getName()) { CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(name),); } else { CARLA_SAFE_ASSERT_RETURN(fUiServer.writeEmptyMessage(),); } if (const char* const iconName = plugin->getIconName()) { CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(iconName),); } else { CARLA_SAFE_ASSERT_RETURN(fUiServer.writeEmptyMessage(),); } if (plugin->getRealName(tmpBuf)) { CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(tmpBuf),); } else { CARLA_SAFE_ASSERT_RETURN(fUiServer.writeEmptyMessage(),); } if (plugin->getLabel(tmpBuf)) { CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(tmpBuf),); } else { CARLA_SAFE_ASSERT_RETURN(fUiServer.writeEmptyMessage(),); } if (plugin->getMaker(tmpBuf)) { CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(tmpBuf),); } else { CARLA_SAFE_ASSERT_RETURN(fUiServer.writeEmptyMessage(),); } if (plugin->getCopyright(tmpBuf)) { CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(tmpBuf),); } else { CARLA_SAFE_ASSERT_RETURN(fUiServer.writeEmptyMessage(),); } std::snprintf(tmpBuf, STR_MAX, "AUDIO_COUNT_%i:%i:%i\n", pluginId, plugin->getAudioInCount(), plugin->getAudioOutCount()); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); std::snprintf(tmpBuf, STR_MAX, "MIDI_COUNT_%i:%i:%i\n", pluginId, plugin->getMidiInCount(), plugin->getMidiOutCount()); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); fUiServer.flushMessages(); } void uiServerSendPluginParameters(const CarlaPluginPtr& plugin) { char tmpBuf[STR_MAX+1]; carla_zeroChars(tmpBuf, STR_MAX+1); const CarlaMutexLocker cml(fUiServer.getPipeLock()); const CarlaScopedLocale csl; const uint pluginId(plugin->getId()); for (int32_t i=PARAMETER_ACTIVE; i>PARAMETER_MAX; --i) { std::snprintf(tmpBuf, STR_MAX, "PARAMVAL_%u:%i\n", pluginId, i); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); std::snprintf(tmpBuf, STR_MAX, "%.12g\n", static_cast(plugin->getInternalParameterValue(i))); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); fUiServer.flushMessages(); } uint32_t ins, outs, count; plugin->getParameterCountInfo(ins, outs); count = plugin->getParameterCount(); std::snprintf(tmpBuf, STR_MAX, "PARAMETER_COUNT_%i:%i:%i:%i\n", pluginId, ins, outs, count); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); for (uint32_t i=0; igetParameterData(i)); const ParameterRanges& paramRanges(plugin->getParameterRanges(i)); std::snprintf(tmpBuf, STR_MAX, "PARAMETER_DATA_%i:%i\n", pluginId, i); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); std::snprintf(tmpBuf, STR_MAX, "%i:%i:%i:%i\n", paramData.type, paramData.hints, paramData.mappedControlIndex, paramData.midiChannel); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); std::snprintf(tmpBuf, STR_MAX, "%.12g:%.12g\n", static_cast(paramData.mappedMinimum), static_cast(paramData.mappedMaximum)); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); if (plugin->getParameterName(i, tmpBuf)) { CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(tmpBuf),); } else { CARLA_SAFE_ASSERT_RETURN(fUiServer.writeEmptyMessage(),); } if (plugin->getParameterUnit(i, tmpBuf)) { CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(tmpBuf),); } else { CARLA_SAFE_ASSERT_RETURN(fUiServer.writeEmptyMessage(),); } if (plugin->getParameterComment(i, tmpBuf)) { CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(tmpBuf),); } else { CARLA_SAFE_ASSERT_RETURN(fUiServer.writeEmptyMessage(),); } if (plugin->getParameterGroupName(i, tmpBuf)) { CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(tmpBuf),); } else { CARLA_SAFE_ASSERT_RETURN(fUiServer.writeEmptyMessage(),); } std::snprintf(tmpBuf, STR_MAX, "PARAMETER_RANGES_%i:%i\n", pluginId, i); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); std::snprintf(tmpBuf, STR_MAX, "%.12g:%.12g:%.12g:%.12g:%.12g:%.12g\n", static_cast(paramRanges.def), static_cast(paramRanges.min), static_cast(paramRanges.max), static_cast(paramRanges.step), static_cast(paramRanges.stepSmall), static_cast(paramRanges.stepLarge)); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); std::snprintf(tmpBuf, STR_MAX, "PARAMVAL_%u:%u\n", pluginId, i); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); std::snprintf(tmpBuf, STR_MAX, "%.12g\n", static_cast(plugin->getParameterValue(i))); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); } fUiServer.flushMessages(); } void uiServerSendPluginPrograms(const CarlaPluginPtr& plugin) { char tmpBuf[STR_MAX+1]; carla_zeroChars(tmpBuf, STR_MAX+1); const CarlaMutexLocker cml(fUiServer.getPipeLock()); const uint pluginId(plugin->getId()); uint32_t count = plugin->getProgramCount(); std::snprintf(tmpBuf, STR_MAX, "PROGRAM_COUNT_%i:%i:%i\n", pluginId, count, plugin->getCurrentProgram()); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); for (uint32_t i=0; igetProgramName(i, tmpBuf)) { CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(tmpBuf),); } else { CARLA_SAFE_ASSERT_RETURN(fUiServer.writeEmptyMessage(),); } } fUiServer.flushMessages(); count = plugin->getMidiProgramCount(); std::snprintf(tmpBuf, STR_MAX, "MIDI_PROGRAM_COUNT_%i:%i:%i\n", pluginId, count, plugin->getCurrentMidiProgram()); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); for (uint32_t i=0; igetMidiProgramData(i)); std::snprintf(tmpBuf, STR_MAX, "%i:%i\n", mpData.bank, mpData.program); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(mpData.name),); } fUiServer.flushMessages(); } void uiServerSendPluginProperties(const CarlaPluginPtr& plugin) { char tmpBuf[STR_MAX+1]; carla_zeroChars(tmpBuf, STR_MAX+1); const CarlaMutexLocker cml(fUiServer.getPipeLock()); const uint pluginId(plugin->getId()); uint32_t count = plugin->getCustomDataCount(); std::snprintf(tmpBuf, STR_MAX, "CUSTOM_DATA_COUNT_%i:%i\n", pluginId, count); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); for (uint32_t i=0; igetCustomData(i)); CARLA_SAFE_ASSERT_CONTINUE(customData.isValid()); if (std::strcmp(customData.type, CUSTOM_DATA_TYPE_PROPERTY) != 0) continue; std::snprintf(tmpBuf, STR_MAX, "CUSTOM_DATA_%i:%i\n", pluginId, i); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(customData.type),); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(customData.key),); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(customData.value),); } fUiServer.flushMessages(); } void uiServerCallback(const EngineCallbackOpcode action, const uint pluginId, const int value1, const int value2, const int value3, const float valuef, const char* const valueStr) { if (! fIsRunning) return; if (! fUiServer.isPipeRunning()) return; switch (action) { case ENGINE_CALLBACK_UPDATE: if (const CarlaPluginPtr plugin = getPlugin(pluginId)) { if (plugin->isEnabled()) { CARLA_SAFE_ASSERT_BREAK(plugin->getId() == pluginId); uiServerSendPluginProperties(plugin); } } break; case ENGINE_CALLBACK_RELOAD_INFO: if (const CarlaPluginPtr plugin = getPlugin(pluginId)) { if (plugin->isEnabled()) { CARLA_SAFE_ASSERT_BREAK(plugin->getId() == pluginId); uiServerSendPluginInfo(plugin); } } break; case ENGINE_CALLBACK_RELOAD_PARAMETERS: if (const CarlaPluginPtr plugin = getPlugin(pluginId)) { if (plugin->isEnabled()) { CARLA_SAFE_ASSERT_BREAK(plugin->getId() == pluginId); uiServerSendPluginParameters(plugin); } } break; case ENGINE_CALLBACK_RELOAD_PROGRAMS: if (const CarlaPluginPtr plugin = getPlugin(pluginId)) { if (plugin->isEnabled()) { CARLA_SAFE_ASSERT_BREAK(plugin->getId() == pluginId); uiServerSendPluginPrograms(plugin); } } break; case ENGINE_CALLBACK_RELOAD_ALL: case ENGINE_CALLBACK_PLUGIN_ADDED: case ENGINE_CALLBACK_PLUGIN_RENAMED: if (const CarlaPluginPtr plugin = getPlugin(pluginId)) { if (plugin->isEnabled()) { CARLA_SAFE_ASSERT_BREAK(plugin->getId() == pluginId); uiServerSendPluginInfo(plugin); uiServerSendPluginParameters(plugin); uiServerSendPluginPrograms(plugin); uiServerSendPluginProperties(plugin); } } break; default: break; } char tmpBuf[STR_MAX+1]; carla_zeroChars(tmpBuf, STR_MAX+1); const CarlaMutexLocker cml(fUiServer.getPipeLock()); std::snprintf(tmpBuf, STR_MAX, "ENGINE_CALLBACK_%i\n", int(action)); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); std::snprintf(tmpBuf, STR_MAX, "%u\n", pluginId); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); std::snprintf(tmpBuf, STR_MAX, "%i\n", value1); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); std::snprintf(tmpBuf, STR_MAX, "%i\n", value2); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); std::snprintf(tmpBuf, STR_MAX, "%i\n", value3); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); { const CarlaScopedLocale csl; std::snprintf(tmpBuf, STR_MAX, "%.12g\n", static_cast(valuef)); } CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); if (valueStr != nullptr) { CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(valueStr),); } else { CARLA_SAFE_ASSERT_RETURN(fUiServer.writeEmptyMessage(),); } fUiServer.flushMessages(); } void uiServerInfo() { CARLA_SAFE_ASSERT_RETURN(fIsRunning,); CARLA_SAFE_ASSERT_RETURN(fUiServer.isPipeRunning(),); char tmpBuf[STR_MAX+1]; carla_zeroChars(tmpBuf, STR_MAX+1); const CarlaMutexLocker cml(fUiServer.getPipeLock()); #if defined(HAVE_LIBLO) && !defined(BUILD_BRIDGE) CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage("osc-urls\n"),); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(pData->osc.getServerPathTCP()),); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(pData->osc.getServerPathUDP()),); #endif CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage("max-plugin-number\n"),); std::snprintf(tmpBuf, STR_MAX, "%i\n", pData->maxPluginNumber); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage("buffer-size\n"),); std::snprintf(tmpBuf, STR_MAX, "%i\n", pData->bufferSize); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage("sample-rate\n"),); { const CarlaScopedLocale csl; std::snprintf(tmpBuf, STR_MAX, "%.12g\n", pData->sampleRate); } CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); fUiServer.flushMessages(); } void uiServerOptions() { CARLA_SAFE_ASSERT_RETURN(fIsRunning,); CARLA_SAFE_ASSERT_RETURN(fUiServer.isPipeRunning(),); char tmpBuf[STR_MAX+1]; carla_zeroChars(tmpBuf, STR_MAX+1); const EngineOptions& options(pData->options); const CarlaMutexLocker cml(fUiServer.getPipeLock()); const char* const optionsForcedStr(fOptionsForced ? "true\n" : "false\n"); const std::size_t optionsForcedStrSize(fOptionsForced ? 5 : 6); std::snprintf(tmpBuf, STR_MAX, "ENGINE_OPTION_%i\n", ENGINE_OPTION_PROCESS_MODE); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(optionsForcedStr, optionsForcedStrSize),); std::snprintf(tmpBuf, STR_MAX, "%i\n", options.processMode); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); fUiServer.flushMessages(); std::snprintf(tmpBuf, STR_MAX, "ENGINE_OPTION_%i\n", ENGINE_OPTION_TRANSPORT_MODE); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(optionsForcedStr, optionsForcedStrSize),); std::snprintf(tmpBuf, STR_MAX, "%i\n", options.transportMode); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); fUiServer.flushMessages(); std::snprintf(tmpBuf, STR_MAX, "ENGINE_OPTION_%i\n", ENGINE_OPTION_FORCE_STEREO); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(optionsForcedStr, optionsForcedStrSize),); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(options.forceStereo ? "true\n" : "false\n"),); fUiServer.flushMessages(); std::snprintf(tmpBuf, STR_MAX, "ENGINE_OPTION_%i\n", ENGINE_OPTION_PREFER_PLUGIN_BRIDGES); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(optionsForcedStr, optionsForcedStrSize),); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(options.preferPluginBridges ? "true\n" : "false\n"),); fUiServer.flushMessages(); std::snprintf(tmpBuf, STR_MAX, "ENGINE_OPTION_%i\n", ENGINE_OPTION_PREFER_UI_BRIDGES); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(optionsForcedStr, optionsForcedStrSize),); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(options.preferUiBridges ? "true\n" : "false\n"),); fUiServer.flushMessages(); std::snprintf(tmpBuf, STR_MAX, "ENGINE_OPTION_%i\n", ENGINE_OPTION_UIS_ALWAYS_ON_TOP); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(optionsForcedStr, optionsForcedStrSize),); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(options.uisAlwaysOnTop ? "true\n" : "false\n"),); fUiServer.flushMessages(); std::snprintf(tmpBuf, STR_MAX, "ENGINE_OPTION_%i\n", ENGINE_OPTION_MAX_PARAMETERS); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(optionsForcedStr, optionsForcedStrSize),); std::snprintf(tmpBuf, STR_MAX, "%i\n", options.maxParameters); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); fUiServer.flushMessages(); std::snprintf(tmpBuf, STR_MAX, "ENGINE_OPTION_%i\n", ENGINE_OPTION_UI_BRIDGES_TIMEOUT); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(optionsForcedStr, optionsForcedStrSize),); std::snprintf(tmpBuf, STR_MAX, "%i\n", options.uiBridgesTimeout); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); fUiServer.flushMessages(); std::snprintf(tmpBuf, STR_MAX, "ENGINE_OPTION_%i\n", ENGINE_OPTION_PATH_BINARIES); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage("true\n", 5),); std::snprintf(tmpBuf, STR_MAX, "%s\n", options.binaryDir); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); fUiServer.flushMessages(); std::snprintf(tmpBuf, STR_MAX, "ENGINE_OPTION_%i\n", ENGINE_OPTION_PATH_RESOURCES); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage("true\n", 5),); std::snprintf(tmpBuf, STR_MAX, "%s\n", options.resourceDir); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); fUiServer.flushMessages(); } // ------------------------------------------------------------------- // Plugin parameter calls uint32_t getParameterCount() const { return kNumInParams + kNumOutParams; } const NativeParameter* getParameterInfo(const uint32_t index) const { static NativeParameter param; static char strBufName[STR_MAX+1]; static char strBufUnit[STR_MAX+1]; static char strBufComment[STR_MAX+1]; static char strBufGroupName[STR_MAX+1]; carla_zeroChars(strBufName, STR_MAX+1); carla_zeroChars(strBufUnit, STR_MAX+1); carla_zeroChars(strBufComment, STR_MAX+1); carla_zeroChars(strBufGroupName, STR_MAX+1); uint32_t rindex = index; if (const CarlaPluginPtr plugin = _getPluginForParameterIndex(rindex)) { const ParameterData& paramData(plugin->getParameterData(rindex)); const ParameterRanges& paramRanges(plugin->getParameterRanges(rindex)); if (! plugin->getParameterName(rindex, strBufName)) strBufName[0] = '\0'; if (! plugin->getParameterUnit(rindex, strBufUnit)) strBufUnit[0] = '\0'; if (! plugin->getParameterComment(rindex, strBufComment)) strBufComment[0] = '\0'; if (! plugin->getParameterGroupName(rindex, strBufGroupName)) std::snprintf(strBufGroupName, STR_MAX, "%u:%s", plugin->getId(), plugin->getName()); uint hints = 0x0; if (paramData.hints & PARAMETER_IS_BOOLEAN) hints |= NATIVE_PARAMETER_IS_BOOLEAN; if (paramData.hints & PARAMETER_IS_INTEGER) hints |= NATIVE_PARAMETER_IS_INTEGER; if (paramData.hints & PARAMETER_IS_LOGARITHMIC) hints |= NATIVE_PARAMETER_IS_LOGARITHMIC; if (paramData.hints & PARAMETER_IS_AUTOMATABLE) hints |= NATIVE_PARAMETER_IS_AUTOMATABLE; if (paramData.hints & PARAMETER_USES_SAMPLERATE) hints |= NATIVE_PARAMETER_USES_SAMPLE_RATE; if (paramData.hints & PARAMETER_USES_SCALEPOINTS) hints |= NATIVE_PARAMETER_USES_SCALEPOINTS; if (paramData.type == PARAMETER_INPUT || paramData.type == PARAMETER_OUTPUT) { if (paramData.hints & PARAMETER_IS_ENABLED) hints |= NATIVE_PARAMETER_IS_ENABLED; if (paramData.type == PARAMETER_OUTPUT) hints |= NATIVE_PARAMETER_IS_OUTPUT; } param.hints = static_cast(hints); param.name = strBufName; param.unit = strBufUnit; param.comment = strBufComment; param.groupName = strBufGroupName; param.ranges.def = paramRanges.def; param.ranges.min = paramRanges.min; param.ranges.max = paramRanges.max; param.ranges.step = paramRanges.step; param.ranges.stepSmall = paramRanges.stepSmall; param.ranges.stepLarge = paramRanges.stepLarge; param.scalePointCount = 0; // TODO param.scalePoints = nullptr; return ¶m; } param.hints = index < kNumInParams ? static_cast(0x0) : NATIVE_PARAMETER_IS_OUTPUT; param.name = "Unused"; param.unit = ""; param.ranges.def = 0.0f; param.ranges.min = 0.0f; param.ranges.max = 1.0f; param.ranges.step = 0.01f; param.ranges.stepSmall = 0.001f; param.ranges.stepLarge = 0.1f; param.scalePointCount = 0; param.scalePoints = nullptr; return ¶m; } float getParameterValue(const uint32_t index) const { uint32_t rindex = index; if (const CarlaPluginPtr plugin = _getPluginForParameterIndex(rindex)) return plugin->getParameterValue(rindex); return fParameters[index]; } // ------------------------------------------------------------------- // Plugin state calls void setParameterValue(const uint32_t index, const float value) { uint32_t rindex = index; if (const CarlaPluginPtr plugin = _getPluginForParameterIndex(rindex)) plugin->setParameterValueRT(rindex, value, false); fParameters[index] = value; } // ------------------------------------------------------------------- // Plugin process calls void activate() { #if 0 for (uint i=0; i < pData->curPluginCount; ++i) { CarlaPluginPtr plugin = pData->plugins[i].plugin; if (plugin == nullptr || ! plugin->isEnabled()) continue; plugin->setActive(true, true, false); } #endif fIsActive = true; } void deactivate() { fIsActive = false; #if 0 for (uint i=0; i < pData->curPluginCount; ++i) { CarlaPluginPtr plugin = pData->plugins[i].plugin; if (plugin == nullptr || ! plugin->isEnabled()) continue; plugin->setActive(false, true, false); } #endif // just in case //runPendingRtEvents(); } void process(const float* const* const inBuffer, float** const outBuffer, const uint32_t frames, const NativeMidiEvent* const midiEvents, const uint32_t midiEventCount) { if (frames > pData->bufferSize) { carla_stderr2("Host is calling process with too high number of frames! %u vs %u", frames, pData->bufferSize); deactivate(); bufferSizeChanged(frames); activate(); } const PendingRtEventsRunner prt(this, frames, true); // --------------------------------------------------------------- // Time Info const NativeTimeInfo* const timeInfo(pHost->get_time_info(pHost->handle)); pData->timeInfo.playing = timeInfo->playing; pData->timeInfo.frame = timeInfo->frame; pData->timeInfo.usecs = timeInfo->usecs; pData->timeInfo.bbt.valid = timeInfo->bbt.valid; if (timeInfo->bbt.valid) { pData->timeInfo.bbt.bar = timeInfo->bbt.bar; pData->timeInfo.bbt.beat = timeInfo->bbt.beat; pData->timeInfo.bbt.tick = timeInfo->bbt.tick; pData->timeInfo.bbt.barStartTick = timeInfo->bbt.barStartTick; pData->timeInfo.bbt.beatsPerBar = timeInfo->bbt.beatsPerBar; pData->timeInfo.bbt.beatType = timeInfo->bbt.beatType; pData->timeInfo.bbt.ticksPerBeat = timeInfo->bbt.ticksPerBeat; pData->timeInfo.bbt.beatsPerMinute = timeInfo->bbt.beatsPerMinute; } // --------------------------------------------------------------- // Do nothing if no plugins and rack mode if (pData->curPluginCount == 0 && ! kIsPatchbay) { if (outBuffer[0] != inBuffer[0]) carla_copyFloats(outBuffer[0], inBuffer[0], frames); if (outBuffer[1] != inBuffer[1]) carla_copyFloats(outBuffer[1], inBuffer[1], frames); for (uint32_t i=0; i < midiEventCount; ++i) { if (! pHost->write_midi_event(pHost->handle, &midiEvents[i])) break; } return; } // --------------------------------------------------------------- // initialize events carla_zeroStructs(pData->events.in, kMaxEngineEventInternalCount); carla_zeroStructs(pData->events.out, kMaxEngineEventInternalCount); // --------------------------------------------------------------- // events input (before processing) { uint32_t engineEventIndex = 0; for (uint32_t i=0; i < midiEventCount && engineEventIndex < kMaxEngineEventInternalCount; ++i) { const NativeMidiEvent& midiEvent(midiEvents[i]); EngineEvent& engineEvent(pData->events.in[engineEventIndex++]); engineEvent.time = midiEvent.time; engineEvent.fillFromMidiData(midiEvent.size, midiEvent.data, 0); if (engineEventIndex >= kMaxEngineEventInternalCount) break; } } if (kIsPatchbay) { // ----------------------------------------------------------- // process pData->graph.process(pData, inBuffer, outBuffer, frames); } else { // ----------------------------------------------------------- // create audio buffers const float* inBuf[2] = { inBuffer[0], inBuffer[1] }; /* */ float* outBuf[2] = { outBuffer[0], outBuffer[1] }; // ----------------------------------------------------------- // process pData->graph.processRack(pData, inBuf, outBuf, frames); } // --------------------------------------------------------------- // events output (after processing) carla_zeroStructs(pData->events.in, kMaxEngineEventInternalCount); if (kHasMidiOut) { NativeMidiEvent midiEvent; for (uint32_t i=0; i < kMaxEngineEventInternalCount; ++i) { const EngineEvent& engineEvent(pData->events.out[i]); if (engineEvent.type == kEngineEventTypeNull) break; carla_zeroStruct(midiEvent); midiEvent.time = engineEvent.time; /**/ if (engineEvent.type == kEngineEventTypeControl) { midiEvent.port = 0; midiEvent.size = engineEvent.ctrl.convertToMidiData(engineEvent.channel, midiEvent.data); } else if (engineEvent.type == kEngineEventTypeMidi) { if (engineEvent.midi.size > 4) continue; midiEvent.port = engineEvent.midi.port; midiEvent.size = engineEvent.midi.size; midiEvent.data[0] = static_cast(engineEvent.midi.data[0] | (engineEvent.channel & MIDI_CHANNEL_BIT)); for (uint8_t j=1; j < midiEvent.size; ++j) midiEvent.data[j] = engineEvent.midi.data[j]; } else { continue; } if (midiEvent.size > 0) pHost->write_midi_event(pHost->handle, &midiEvent); } } } // ------------------------------------------------------------------- // Plugin UI calls void uiShow(const bool show) { if (show) { if (fUiServer.isPipeRunning()) { fUiServer.writeFocusMessage(); return; } CarlaString path(pHost->resourceDir); if (kIsPatchbay) path += CARLA_OS_SEP_STR "carla-plugin-patchbay"; else path += CARLA_OS_SEP_STR "carla-plugin"; #ifdef CARLA_OS_WIN path += ".exe"; #endif carla_stdout("Trying to start carla-plugin using \"%s\"", path.buffer()); fUiServer.setData(path, pData->sampleRate, pHost->uiName); if (! fUiServer.startPipeServer(false)) { pHost->dispatcher(pHost->handle, NATIVE_HOST_OPCODE_UI_UNAVAILABLE, 0, 0, nullptr, 0.0f); return; } uiServerInfo(); uiServerOptions(); uiServerCallback(ENGINE_CALLBACK_ENGINE_STARTED, pData->curPluginCount, pData->options.processMode, pData->options.transportMode, static_cast(pData->bufferSize), static_cast(pData->sampleRate), "Plugin"); fUiServer.writeShowMessage(); for (uint i=0; i < pData->curPluginCount; ++i) { if (const CarlaPluginPtr plugin = pData->plugins[i].plugin) if (plugin->isEnabled()) uiServerCallback(ENGINE_CALLBACK_PLUGIN_ADDED, i, plugin->getType(), 0, 0, 0.0f, plugin->getName()); } if (kIsPatchbay) patchbayRefresh(true, false, false); } else { fUiServer.stopPipeServer(2000); // hide all custom uis for (uint i=0; i < pData->curPluginCount; ++i) { if (const CarlaPluginPtr plugin = pData->plugins[i].plugin) { if (plugin->isEnabled()) { if (plugin->getHints() & PLUGIN_HAS_CUSTOM_UI) { try { plugin->showCustomUI(false); } CARLA_SAFE_EXCEPTION_CONTINUE("Plugin showCustomUI (hide)"); } } } } } } void uiIdle() { #ifdef USE_REFCOUNTER_JUCE_MESSAGE_MANAGER const ScopedJuceMessageThreadRunner sjmtr(*this, false); if (kNeedsJuceEvents && ! sjmtr.wasLocked) return; #endif for (uint i=0; i < pData->curPluginCount; ++i) { if (const CarlaPluginPtr plugin = pData->plugins[i].plugin) { if (plugin->isEnabled()) { const uint hints = plugin->getHints(); if ((hints & PLUGIN_HAS_CUSTOM_UI) != 0 && (hints & PLUGIN_NEEDS_UI_MAIN_THREAD) != 0) { try { plugin->uiIdle(); } CARLA_SAFE_EXCEPTION_CONTINUE("Plugin uiIdle"); } } } } idlePipe(); switch (fUiServer.getAndResetUiState()) { case CarlaExternalUI::UiNone: case CarlaExternalUI::UiShow: break; case CarlaExternalUI::UiCrashed: pHost->dispatcher(pHost->handle, NATIVE_HOST_OPCODE_UI_UNAVAILABLE, 0, 0, nullptr, 0.0f); break; case CarlaExternalUI::UiHide: pHost->ui_closed(pHost->handle); fUiServer.stopPipeServer(1000); break; } if (carla_isNotEqual(fLastScaleFactor, pData->options.uiScale)) { fLastScaleFactor = pData->options.uiScale; pHost->dispatcher(pHost->handle, NATIVE_HOST_OPCODE_UI_RESIZE, static_cast(kUiWidth * fLastScaleFactor + 0.5f), static_cast(kUiHeight * fLastScaleFactor + 0.5f), nullptr, 0.0f); } { const CarlaMutexLocker cml(fPluginDeleterMutex); pData->deletePluginsAsNeeded(); } } void uiSetParameterValue(const uint32_t index, const float value) { uint32_t rindex = index; if (const CarlaPluginPtr plugin = _getPluginForParameterIndex(rindex)) { if (plugin->getHints() & PLUGIN_HAS_CUSTOM_UI) plugin->uiParameterChange(rindex, value); if (index >= kNumInParams || ! fUiServer.isPipeRunning()) return; uiServerCallback(ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED, plugin->getId(), static_cast(rindex), 0, 0, value, nullptr); } } void idlePipe() { if (! fUiServer.isPipeRunning()) return; fUiServer.idlePipe(); if (! fUiServer.isPipeRunning()) return; char tmpBuf[STR_MAX+1]; carla_zeroChars(tmpBuf, STR_MAX+1); const CarlaMutexLocker cml(fUiServer.getPipeLock()); const CarlaScopedLocale csl; const EngineTimeInfo& timeInfo(pData->timeInfo); // ------------------------------------------------------------------------------------------------------------ // send engine info std::snprintf(tmpBuf, STR_MAX, "%.12g:0\n", static_cast(getDSPLoad())); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage("runtime-info\n"),); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); fUiServer.flushMessages(); if (const char* const projFolder = getCurrentProjectFolder()) { if (fLastProjectFolder != projFolder) { carla_stdout("Project folder changed to %s", projFolder); fLastProjectFolder = projFolder; CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage("project-folder\n"),); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeAndFixMessage(projFolder),); fUiServer.flushMessages(); } } // ------------------------------------------------------------------------------------------------------------ // send transport CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage("transport\n"),); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(timeInfo.playing ? "true\n" : "false\n"),); if (timeInfo.bbt.valid) { std::snprintf(tmpBuf, STR_MAX, P_UINT64 ":%i:%i:%i\n", timeInfo.frame, timeInfo.bbt.bar, timeInfo.bbt.beat, static_cast(timeInfo.bbt.tick + 0.5)); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); std::snprintf(tmpBuf, STR_MAX, "%.12g\n", timeInfo.bbt.beatsPerMinute); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); } else { std::snprintf(tmpBuf, STR_MAX, P_UINT64 ":0:0:0\n", timeInfo.frame); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage("0.0\n"),); } fUiServer.flushMessages(); // ------------------------------------------------------------------------------------------------------------ // send peaks and param outputs for all plugins for (uint i=0; i < pData->curPluginCount; ++i) { const EnginePluginData& plugData(pData->plugins[i]); const CarlaPluginPtr plugin = pData->plugins[i].plugin; std::snprintf(tmpBuf, STR_MAX, "PEAKS_%i\n", i); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); std::snprintf(tmpBuf, STR_MAX, "%.12g:%.12g:%.12g:%.12g\n", static_cast(plugData.peaks[0]), static_cast(plugData.peaks[1]), static_cast(plugData.peaks[2]), static_cast(plugData.peaks[3])); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); fUiServer.flushMessages(); for (uint32_t j=0, count=plugin->getParameterCount(); j < count; ++j) { if (! plugin->isParameterOutput(j)) continue; std::snprintf(tmpBuf, STR_MAX, "PARAMVAL_%u:%u\n", i, j); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); std::snprintf(tmpBuf, STR_MAX, "%.12g\n", static_cast(plugin->getParameterValue(j))); CARLA_SAFE_ASSERT_RETURN(fUiServer.writeMessage(tmpBuf),); fUiServer.flushMessages(); } } } // ------------------------------------------------------------------- // Plugin state calls char* getState() const { MemoryOutputStream out; saveProjectInternal(out); return strdup(out.toString().toRawUTF8()); } void setState(const char* const data) { #ifdef USE_REFCOUNTER_JUCE_MESSAGE_MANAGER const ScopedJuceMessageThreadRunner sjmtr(*this, true); #endif // remove all plugins from UI side for (uint i=0, count=pData->curPluginCount; i < count; ++i) CarlaEngine::callback(true, true, ENGINE_CALLBACK_PLUGIN_REMOVED, count-i-1, 0, 0, 0, 0.0f, nullptr); // remove all plugins from backend, no lock fIsRunning = false; removeAllPlugins(); fIsRunning = true; { const CarlaMutexLocker cml(fPluginDeleterMutex); pData->deletePluginsAsNeeded(); } // stopped during removeAllPlugins() if (! pData->thread.isThreadRunning()) pData->thread.startThread(); fOptionsForced = true; const String state(data); XmlDocument xml(state); loadProjectInternal(xml, true); reloadFromUI(); } // ------------------------------------------------------------------- public: #define handlePtr ((CarlaEngineNative*)handle) static NativePluginHandle _instantiateRack(const NativeHostDescriptor* host) { return new CarlaEngineNative(host, false, true); } static NativePluginHandle _instantiateRackNoMidiOut(const NativeHostDescriptor* host) { return new CarlaEngineNative(host, false, false); } static NativePluginHandle _instantiatePatchbay(const NativeHostDescriptor* host) { return new CarlaEngineNative(host, true, true); } static NativePluginHandle _instantiatePatchbay3s(const NativeHostDescriptor* host) { return new CarlaEngineNative(host, true, true, 3, 2); } static NativePluginHandle _instantiatePatchbay16(const NativeHostDescriptor* host) { return new CarlaEngineNative(host, true, true, 16, 16); } static NativePluginHandle _instantiatePatchbay32(const NativeHostDescriptor* host) { return new CarlaEngineNative(host, true, true, 32, 32); } static NativePluginHandle _instantiatePatchbay64(const NativeHostDescriptor* host) { return new CarlaEngineNative(host, true, true, 64, 64); } static NativePluginHandle _instantiatePatchbayCV(const NativeHostDescriptor* host) { return new CarlaEngineNative(host, true, true, 2, 2, 5, 5); } static NativePluginHandle _instantiatePatchbayCV8(const NativeHostDescriptor* host) { return new CarlaEngineNative(host, true, true, 2, 2, 8, 8); } static NativePluginHandle _instantiatePatchbayCV32(const NativeHostDescriptor* host) { return new CarlaEngineNative(host, true, true, 64, 64, 32, 32); } static void _cleanup(NativePluginHandle handle) { delete handlePtr; } static uint32_t _get_parameter_count(NativePluginHandle handle) { return handlePtr->getParameterCount(); } static const NativeParameter* _get_parameter_info(NativePluginHandle handle, uint32_t index) { return handlePtr->getParameterInfo(index); } static float _get_parameter_value(NativePluginHandle handle, uint32_t index) { return handlePtr->getParameterValue(index); } static void _set_parameter_value(NativePluginHandle handle, uint32_t index, float value) { handlePtr->setParameterValue(index, value); } static void _ui_show(NativePluginHandle handle, bool show) { handlePtr->uiShow(show); } static void _ui_idle(NativePluginHandle handle) { handlePtr->uiIdle(); } static void _ui_set_parameter_value(NativePluginHandle handle, uint32_t index, float value) { handlePtr->uiSetParameterValue(index, value); } static void _activate(NativePluginHandle handle) { handlePtr->activate(); } static void _deactivate(NativePluginHandle handle) { handlePtr->deactivate(); } // FIXME for v3.0, use const for the input buffer static void _process(NativePluginHandle handle, float** inBuffer, float** outBuffer, const uint32_t frames, const NativeMidiEvent* midiEvents, uint32_t midiEventCount) { handlePtr->process(inBuffer, outBuffer, frames, midiEvents, midiEventCount); } static char* _get_state(NativePluginHandle handle) { return handlePtr->getState(); } static void _set_state(NativePluginHandle handle, const char* data) { handlePtr->setState(data); } static intptr_t _dispatcher(NativePluginHandle handle, NativePluginDispatcherOpcode opcode, int32_t index, intptr_t value, void* ptr, float opt) { switch(opcode) { case NATIVE_PLUGIN_OPCODE_NULL: return 0; case NATIVE_PLUGIN_OPCODE_BUFFER_SIZE_CHANGED: CARLA_SAFE_ASSERT_RETURN(value > 0, 0); handlePtr->bufferSizeChanged(static_cast(value)); return 0; case NATIVE_PLUGIN_OPCODE_SAMPLE_RATE_CHANGED: CARLA_SAFE_ASSERT_RETURN(opt > 0.0f, 0); handlePtr->sampleRateChanged(static_cast(opt)); return 0; case NATIVE_PLUGIN_OPCODE_OFFLINE_CHANGED: handlePtr->offlineModeChanged(value != 0); return 0; case NATIVE_PLUGIN_OPCODE_UI_NAME_CHANGED: //handlePtr->uiNameChanged(static_cast(ptr)); return 0; case NATIVE_PLUGIN_OPCODE_GET_INTERNAL_HANDLE: { CarlaEngineNative* const engine = handlePtr; return (intptr_t)(CarlaEngine*)engine; } case NATIVE_PLUGIN_OPCODE_IDLE: //handlePtr->idle(); return 0; case NATIVE_PLUGIN_OPCODE_UI_MIDI_EVENT: return 0; case NATIVE_PLUGIN_OPCODE_HOST_USES_EMBED: handlePtr->fUsesEmbed = true; return 0; } return 0; // unused (void)index; (void)ptr; } // ------------------------------------------------------------------- #undef handlePtr private: const NativeHostDescriptor* const pHost; #ifdef USE_REFCOUNTER_JUCE_MESSAGE_MANAGER const bool kNeedsJuceEvents; const juce::SharedResourcePointer fJuceMsgMgr; CarlaMutex fJuceMsgMutex; struct ScopedJuceMessageThreadRunner { const CarlaMutexTryLocker cmtl; const bool wasLocked; juce::MessageManager* msgMgr; ScopedJuceMessageThreadRunner(CarlaEngineNative& self, const bool forceLock) noexcept : cmtl(self.fJuceMsgMutex, forceLock), wasLocked(cmtl.wasLocked()), msgMgr(nullptr) { if (! self.kNeedsJuceEvents) return; if (! wasLocked) return; juce::MessageManager* const msgMgr2 = juce::MessageManager::getInstanceWithoutCreating(); CARLA_SAFE_ASSERT_RETURN(msgMgr2 != nullptr,); if (! msgMgr2->isThisTheMessageThread()) { try { msgMgr2->setCurrentThreadAsMessageThread(); } CARLA_SAFE_EXCEPTION_RETURN("setCurrentThreadAsMessageThread",); } msgMgr = msgMgr2; } ~ScopedJuceMessageThreadRunner() { if (msgMgr == nullptr) return; const juce::MessageManagerLock mml; for (; msgMgr->dispatchNextMessageOnSystemQueue(true);) {} } CARLA_DECLARE_NON_COPY_STRUCT(ScopedJuceMessageThreadRunner) }; #endif const bool kIsPatchbay; // rack if false const bool kHasMidiOut; bool fIsActive, fIsRunning, fUsesEmbed; CarlaEngineNativeUI fUiServer; float fParameters[kNumInParams+kNumOutParams]; float fLastScaleFactor; CarlaString fLastProjectFolder; CarlaMutex fPluginDeleterMutex; bool fOptionsForced; CarlaPluginPtr _getPluginForParameterIndex(uint32_t& index) const noexcept { if (pData->curPluginCount == 0 || pData->plugins == nullptr) return nullptr; for (uint32_t i=0; icurPluginCount; ++i) { const CarlaPluginPtr plugin = pData->plugins[i].plugin; if (plugin.get() == nullptr || ! plugin->isEnabled()) break; if (const uint32_t paramCount = plugin->getParameterCount()) { if (index >= paramCount) { index -= paramCount; continue; } return plugin; } } return nullptr; } bool _getRealIndexForPluginParameter(const uint32_t pluginId, uint32_t& rindex) const noexcept { if (pData->curPluginCount == 0 || pluginId >= pData->curPluginCount || pData->plugins == nullptr) return false; for (uint32_t i=0; iplugins[i].plugin; if (plugin.get() == nullptr || ! plugin->isEnabled()) return false; rindex += plugin->getParameterCount(); } if (rindex >= kNumInParams) return false; return true; } CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaEngineNative) }; // ----------------------------------------------------------------------- bool CarlaEngineNativeUI::msgReceived(const char* const msg) noexcept { if (CarlaExternalUI::msgReceived(msg)) return true; bool ok = true; if (std::strcmp(msg, "set_engine_option") == 0) { uint32_t option; int32_t value; const char* valueStr = nullptr; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(option), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsInt(value), true); readNextLineAsString(valueStr, false); // can be null try { fEngine->setOption(static_cast(option), value, valueStr); } CARLA_SAFE_EXCEPTION("setOption"); } else if (std::strcmp(msg, "clear_engine_xruns") == 0) { fEngine->clearXruns(); } else if (std::strcmp(msg, "cancel_engine_action") == 0) { fEngine->setActionCanceled(true); } else if (std::strcmp(msg, "load_file") == 0) { const char* filename; CARLA_SAFE_ASSERT_RETURN(readNextLineAsString(filename, false), true); try { ok = fEngine->loadFile(filename); } CARLA_SAFE_EXCEPTION("loadFile"); fEngine->reloadFromUI(); } else if (std::strcmp(msg, "load_project") == 0) { const char* filename; CARLA_SAFE_ASSERT_RETURN(readNextLineAsString(filename, false), true); try { ok = fEngine->loadProject(filename, true); } CARLA_SAFE_EXCEPTION("loadProject"); fEngine->reloadFromUI(); } else if (std::strcmp(msg, "save_project") == 0) { const char* filename; CARLA_SAFE_ASSERT_RETURN(readNextLineAsString(filename, false), true); try { ok = fEngine->saveProject(filename, true); } CARLA_SAFE_EXCEPTION("saveProject"); } else if (std::strcmp(msg, "clear_project_filename") == 0) { fEngine->clearCurrentProjectFilename(); } else if (std::strcmp(msg, "patchbay_connect") == 0) { bool external; uint32_t groupA, portA, groupB, portB; CARLA_SAFE_ASSERT_RETURN(readNextLineAsBool(external), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(groupA), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(portA), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(groupB), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(portB), true); try { ok = fEngine->patchbayConnect(external, groupA, portA, groupB, portB); } CARLA_SAFE_EXCEPTION("patchbayConnect"); } else if (std::strcmp(msg, "patchbay_disconnect") == 0) { bool external; uint32_t connectionId; CARLA_SAFE_ASSERT_RETURN(readNextLineAsBool(external), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(connectionId), true); try { ok = fEngine->patchbayDisconnect(external, connectionId); } CARLA_SAFE_EXCEPTION("patchbayDisconnect"); } else if (std::strcmp(msg, "patchbay_set_group_pos") == 0) { bool external; uint32_t groupId; int x1, y1, x2, y2; CARLA_SAFE_ASSERT_RETURN(readNextLineAsBool(external), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(groupId), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsInt(x1), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsInt(y1), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsInt(x2), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsInt(y2), true); try { ok = fEngine->patchbaySetGroupPos(false, true, external, groupId, x1, y1, x2, y2); } CARLA_SAFE_EXCEPTION("patchbaySetGroupPos"); } else if (std::strcmp(msg, "patchbay_refresh") == 0) { bool external; CARLA_SAFE_ASSERT_RETURN(readNextLineAsBool(external), true); try { ok = fEngine->patchbayRefresh(true, false, external); } CARLA_SAFE_EXCEPTION("patchbayRefresh"); } else if (std::strcmp(msg, "transport_play") == 0) { fEngine->transportPlay(); } else if (std::strcmp(msg, "transport_pause") == 0) { fEngine->transportPause(); } else if (std::strcmp(msg, "transport_bpm") == 0) { double bpm; CARLA_SAFE_ASSERT_RETURN(readNextLineAsDouble(bpm), true); fEngine->transportBPM(bpm); } else if (std::strcmp(msg, "transport_relocate") == 0) { uint64_t frame; CARLA_SAFE_ASSERT_RETURN(readNextLineAsULong(frame), true); fEngine->transportRelocate(frame); } else if (std::strcmp(msg, "add_plugin") == 0) { uint32_t btype, ptype; const char* filename = nullptr; const char* name; const char* label; int64_t uniqueId; uint options; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(btype), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(ptype), true); readNextLineAsString(filename, true); // can be null CARLA_SAFE_ASSERT_RETURN(readNextLineAsString(name, true), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsString(label, true), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsLong(uniqueId), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(options), true); if (filename != nullptr && std::strcmp(filename, "(null)") == 0) { delete[] filename; filename = nullptr; } if (std::strcmp(name, "(null)") == 0) { delete[] name; name = nullptr; } ok = fEngine->addPlugin(static_cast(btype), static_cast(ptype), filename, name, label, uniqueId, nullptr, options); if (filename != nullptr) delete[] filename; if (name != nullptr) delete[] name; delete[] label; fEngine->reloadFromUI(); } else if (std::strcmp(msg, "remove_plugin") == 0) { uint32_t pluginId; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(pluginId), true); ok = fEngine->removePlugin(pluginId); fEngine->reloadFromUI(); } else if (std::strcmp(msg, "remove_all_plugins") == 0) { ok = fEngine->removeAllPlugins(); fEngine->reloadFromUI(); } else if (std::strcmp(msg, "rename_plugin") == 0) { uint32_t pluginId; const char* newName; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(pluginId), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsString(newName, false), true); ok = fEngine->renamePlugin(pluginId, newName); } else if (std::strcmp(msg, "clone_plugin") == 0) { uint32_t pluginId; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(pluginId), true); ok = fEngine->clonePlugin(pluginId); fEngine->reloadFromUI(); } else if (std::strcmp(msg, "replace_plugin") == 0) { uint32_t pluginId; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(pluginId), true); ok = fEngine->replacePlugin(pluginId); } else if (std::strcmp(msg, "switch_plugins") == 0) { uint32_t pluginIdA, pluginIdB; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(pluginIdA), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(pluginIdB), true); ok = fEngine->switchPlugins(pluginIdA, pluginIdB); fEngine->reloadFromUI(); } else if (std::strcmp(msg, "load_plugin_state") == 0) { uint32_t pluginId; const char* filename; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(pluginId), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsString(filename, false), true); if (const CarlaPluginPtr plugin = fEngine->getPlugin(pluginId)) { plugin->loadStateFromFile(filename); _updateParamValues(plugin, pluginId, false, true); } } else if (std::strcmp(msg, "save_plugin_state") == 0) { uint32_t pluginId; const char* filename; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(pluginId), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsString(filename, false), true); if (const CarlaPluginPtr plugin = fEngine->getPlugin(pluginId)) plugin->saveStateToFile(filename); } else if (std::strcmp(msg, "set_option") == 0) { uint32_t pluginId, option; bool yesNo; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(pluginId), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(option), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsBool(yesNo), true); if (const CarlaPluginPtr plugin = fEngine->getPlugin(pluginId)) plugin->setOption(option, yesNo, false); } else if (std::strcmp(msg, "set_active") == 0) { uint32_t pluginId; bool onOff; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(pluginId), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsBool(onOff), true); if (const CarlaPluginPtr plugin = fEngine->getPlugin(pluginId)) plugin->setActive(onOff, true, false); } else if (std::strcmp(msg, "set_drywet") == 0) { uint32_t pluginId; float value; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(pluginId), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsFloat(value), true); if (const CarlaPluginPtr plugin = fEngine->getPlugin(pluginId)) plugin->setDryWet(value, true, false); } else if (std::strcmp(msg, "set_volume") == 0) { uint32_t pluginId; float value; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(pluginId), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsFloat(value), true); if (const CarlaPluginPtr plugin = fEngine->getPlugin(pluginId)) plugin->setVolume(value, true, false); } else if (std::strcmp(msg, "set_balance_left") == 0) { uint32_t pluginId; float value; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(pluginId), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsFloat(value), true); if (const CarlaPluginPtr plugin = fEngine->getPlugin(pluginId)) plugin->setBalanceLeft(value, true, false); } else if (std::strcmp(msg, "set_balance_right") == 0) { uint32_t pluginId; float value; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(pluginId), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsFloat(value), true); if (const CarlaPluginPtr plugin = fEngine->getPlugin(pluginId)) plugin->setBalanceRight(value, true, false); } else if (std::strcmp(msg, "set_panning") == 0) { uint32_t pluginId; float value; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(pluginId), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsFloat(value), true); if (const CarlaPluginPtr plugin = fEngine->getPlugin(pluginId)) plugin->setPanning(value, true, false); } else if (std::strcmp(msg, "set_ctrl_channel") == 0) { uint32_t pluginId; int32_t channel; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(pluginId), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsInt(channel), true); CARLA_SAFE_ASSERT_RETURN(channel >= -1 && channel < MAX_MIDI_CHANNELS, true); if (const CarlaPluginPtr plugin = fEngine->getPlugin(pluginId)) plugin->setCtrlChannel(int8_t(channel), true, false); } else if (std::strcmp(msg, "set_parameter_value") == 0) { uint32_t pluginId, parameterId; float value; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(pluginId), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(parameterId), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsFloat(value), true); if (const CarlaPluginPtr plugin = fEngine->getPlugin(pluginId)) { plugin->setParameterValue(parameterId, value, true, true, false); fEngine->setParameterValueFromUI(pluginId, parameterId, value); } } else if (std::strcmp(msg, "set_parameter_midi_channel") == 0) { uint32_t pluginId, parameterId, channel; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(pluginId), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(parameterId), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(channel), true); CARLA_SAFE_ASSERT_RETURN(channel < MAX_MIDI_CHANNELS, true); if (const CarlaPluginPtr plugin = fEngine->getPlugin(pluginId)) plugin->setParameterMidiChannel(parameterId, static_cast(channel), true, false); } else if (std::strcmp(msg, "set_parameter_mapped_control_index") == 0) { uint32_t pluginId, parameterId; int32_t ctrl; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(pluginId), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(parameterId), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsInt(ctrl), true); CARLA_SAFE_ASSERT_RETURN(ctrl >= CONTROL_INDEX_NONE && ctrl <= CONTROL_INDEX_MAX_ALLOWED, true); if (const CarlaPluginPtr plugin = fEngine->getPlugin(pluginId)) plugin->setParameterMappedControlIndex(parameterId, static_cast(ctrl), true, false, true); } else if (std::strcmp(msg, "set_parameter_mapped_range") == 0) { uint32_t pluginId, parameterId; float minimum, maximum; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(pluginId), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(parameterId), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsFloat(minimum), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsFloat(maximum), true); if (const CarlaPluginPtr plugin = fEngine->getPlugin(pluginId)) plugin->setParameterMappedRange(parameterId, minimum, maximum, true, false); } else if (std::strcmp(msg, "set_parameter_touch") == 0) { uint32_t pluginId, parameterId; bool touching; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(pluginId), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(parameterId), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsBool(touching), true); if (fEngine->getPlugin(pluginId)) fEngine->setParameterTouchFromUI(pluginId, parameterId, touching); } else if (std::strcmp(msg, "set_program") == 0) { uint32_t pluginId; int32_t index; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(pluginId), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsInt(index), true); if (const CarlaPluginPtr plugin = fEngine->getPlugin(pluginId)) { plugin->setProgram(index, true, true, false); _updateParamValues(plugin, pluginId, true, true); } } else if (std::strcmp(msg, "set_midi_program") == 0) { uint32_t pluginId; int32_t index; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(pluginId), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsInt(index), true); if (const CarlaPluginPtr plugin = fEngine->getPlugin(pluginId)) { plugin->setMidiProgram(index, true, true, false); _updateParamValues(plugin, pluginId, true, true); } } else if (std::strcmp(msg, "set_custom_data") == 0) { uint32_t pluginId; const char* type; const char* key; const char* value; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(pluginId), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsString(type, true), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsString(key, true), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsString(value, false), true); if (const CarlaPluginPtr plugin = fEngine->getPlugin(pluginId)) plugin->setCustomData(type, key, value, true); delete[] type; delete[] key; } else if (std::strcmp(msg, "set_chunk_data") == 0) { uint32_t pluginId; const char* cdata; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(pluginId), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsString(cdata, false), true); if (const CarlaPluginPtr plugin = fEngine->getPlugin(pluginId)) { std::vector chunk(carla_getChunkFromBase64String(cdata)); #ifdef CARLA_PROPER_CPP11_SUPPORT plugin->setChunkData(chunk.data(), chunk.size()); #else plugin->setChunkData(&chunk.front(), chunk.size()); #endif _updateParamValues(plugin, pluginId, false, true); } } else if (std::strcmp(msg, "prepare_for_save") == 0) { uint32_t pluginId; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(pluginId), true); if (const CarlaPluginPtr plugin = fEngine->getPlugin(pluginId)) plugin->prepareForSave(false); } else if (std::strcmp(msg, "reset_parameters") == 0) { uint32_t pluginId; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(pluginId), true); if (const CarlaPluginPtr plugin = fEngine->getPlugin(pluginId)) { plugin->resetParameters(); _updateParamValues(plugin, pluginId, false, true); } } else if (std::strcmp(msg, "randomize_parameters") == 0) { uint32_t pluginId; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(pluginId), true); if (const CarlaPluginPtr plugin = fEngine->getPlugin(pluginId)) { plugin->randomizeParameters(); _updateParamValues(plugin, pluginId, false, true); } } else if (std::strcmp(msg, "send_midi_note") == 0) { uint32_t pluginId, channel, note, velocity; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(pluginId), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(channel), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(note), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(velocity), true); CARLA_SAFE_ASSERT_RETURN(channel < MAX_MIDI_CHANNELS, true); CARLA_SAFE_ASSERT_RETURN(note < MAX_MIDI_VALUE, true); CARLA_SAFE_ASSERT_RETURN(velocity < MAX_MIDI_VALUE, true); if (const CarlaPluginPtr plugin = fEngine->getPlugin(pluginId)) plugin->sendMidiSingleNote(static_cast(channel), static_cast(note), static_cast(velocity), true, true, false); } else if (std::strcmp(msg, "show_custom_ui") == 0) { uint32_t pluginId; bool yesNo; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(pluginId), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsBool(yesNo), true); if (const CarlaPluginPtr plugin = fEngine->getPlugin(pluginId)) plugin->showCustomUI(yesNo); } else { carla_stderr("CarlaEngineNativeUI::msgReceived : %s", msg); return false; } if (! ok) { const CarlaMutexLocker cml(getPipeLock()); if (writeMessage("error\n", 6) && writeAndFixMessage(fEngine->getLastError())) flushMessages(); } return true; } void CarlaEngineNativeUI::_updateParamValues(const CarlaPluginPtr& plugin, const uint32_t pluginId, const bool sendCallback, const bool sendPluginHost) const noexcept { float value; for (uint32_t i=0, count=plugin->getParameterCount(); igetParameterValue(i); if (sendCallback) { fEngine->callback(true, true, ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED, pluginId, static_cast(i), 0, 0, value, nullptr); } if (sendPluginHost) { carla_stdout("_updateParamValues"); fEngine->setParameterValueFromUI(pluginId, i, value); } } } // ----------------------------------------------------------------------- static const NativePluginDescriptor carlaRackDesc = { /* category */ NATIVE_PLUGIN_CATEGORY_OTHER, /* hints */ static_cast(NATIVE_PLUGIN_IS_SYNTH |NATIVE_PLUGIN_HAS_UI |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD |NATIVE_PLUGIN_USES_STATE |NATIVE_PLUGIN_USES_TIME |NATIVE_PLUGIN_USES_UI_SIZE), /* supports */ static_cast(NATIVE_PLUGIN_SUPPORTS_EVERYTHING), /* audioIns */ 2, /* audioOuts */ 2, /* midiIns */ 1, /* midiOuts */ 1, /* paramIns */ kNumInParams, /* paramOuts */ kNumOutParams, /* name */ "Carla-Rack", /* label */ "carlarack", /* maker */ "falkTX", /* copyright */ "GNU GPL v2+", CarlaEngineNative::_instantiateRack, CarlaEngineNative::_cleanup, CarlaEngineNative::_get_parameter_count, CarlaEngineNative::_get_parameter_info, CarlaEngineNative::_get_parameter_value, /* _get_midi_program_count */ nullptr, /* _get_midi_program_info */ nullptr, CarlaEngineNative::_set_parameter_value, /* _set_midi_program */ nullptr, /* _set_custom_data */ nullptr, CarlaEngineNative::_ui_show, CarlaEngineNative::_ui_idle, CarlaEngineNative::_ui_set_parameter_value, /* _ui_set_midi_program */ nullptr, /* _ui_set_custom_data */ nullptr, CarlaEngineNative::_activate, CarlaEngineNative::_deactivate, CarlaEngineNative::_process, CarlaEngineNative::_get_state, CarlaEngineNative::_set_state, CarlaEngineNative::_dispatcher, /* _render_inline_dsplay */ nullptr, /* cvIns */ 0, /* cvOuts */ 0, /* _get_buffer_port_name */ nullptr, /* _get_buffer_port_range */ nullptr, /* ui_width */ kUiWidth, /* ui_height */ kUiHeight }; static const NativePluginDescriptor carlaRackNoMidiOutDesc = { /* category */ NATIVE_PLUGIN_CATEGORY_OTHER, /* hints */ static_cast(NATIVE_PLUGIN_IS_SYNTH |NATIVE_PLUGIN_HAS_UI |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD |NATIVE_PLUGIN_USES_STATE |NATIVE_PLUGIN_USES_TIME |NATIVE_PLUGIN_USES_UI_SIZE), /* supports */ static_cast(NATIVE_PLUGIN_SUPPORTS_EVERYTHING), /* audioIns */ 2, /* audioOuts */ 2, /* midiIns */ 1, /* midiOuts */ 0, /* paramIns */ kNumInParams, /* paramOuts */ kNumOutParams, /* name */ "Carla-Rack (no midi out)", /* label */ "carlarack-nomidiout", /* maker */ "falkTX", /* copyright */ "GNU GPL v2+", CarlaEngineNative::_instantiateRackNoMidiOut, CarlaEngineNative::_cleanup, CarlaEngineNative::_get_parameter_count, CarlaEngineNative::_get_parameter_info, CarlaEngineNative::_get_parameter_value, /* _get_midi_program_count */ nullptr, /* _get_midi_program_info */ nullptr, CarlaEngineNative::_set_parameter_value, /* _set_midi_program */ nullptr, /* _set_custom_data */ nullptr, CarlaEngineNative::_ui_show, CarlaEngineNative::_ui_idle, CarlaEngineNative::_ui_set_parameter_value, /* _ui_set_midi_program */ nullptr, /* _ui_set_custom_data */ nullptr, CarlaEngineNative::_activate, CarlaEngineNative::_deactivate, CarlaEngineNative::_process, CarlaEngineNative::_get_state, CarlaEngineNative::_set_state, CarlaEngineNative::_dispatcher, /* _render_inline_dsplay */ nullptr, /* cvIns */ 0, /* cvOuts */ 0, /* _get_buffer_port_name */ nullptr, /* _get_buffer_port_range */ nullptr, /* ui_width */ kUiWidth, /* ui_height */ kUiHeight }; static const NativePluginDescriptor carlaPatchbayDesc = { /* category */ NATIVE_PLUGIN_CATEGORY_OTHER, /* hints */ static_cast(NATIVE_PLUGIN_IS_SYNTH |NATIVE_PLUGIN_HAS_UI |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD |NATIVE_PLUGIN_USES_STATE |NATIVE_PLUGIN_USES_TIME |NATIVE_PLUGIN_USES_UI_SIZE), /* supports */ static_cast(NATIVE_PLUGIN_SUPPORTS_EVERYTHING), /* audioIns */ 2, /* audioOuts */ 2, /* midiIns */ 1, /* midiOuts */ 1, /* paramIns */ kNumInParams, /* paramOuts */ kNumOutParams, /* name */ "Carla-Patchbay", /* label */ "carlapatchbay", /* maker */ "falkTX", /* copyright */ "GNU GPL v2+", CarlaEngineNative::_instantiatePatchbay, CarlaEngineNative::_cleanup, CarlaEngineNative::_get_parameter_count, CarlaEngineNative::_get_parameter_info, CarlaEngineNative::_get_parameter_value, /* _get_midi_program_count */ nullptr, /* _get_midi_program_info */ nullptr, CarlaEngineNative::_set_parameter_value, /* _set_midi_program */ nullptr, /* _set_custom_data */ nullptr, CarlaEngineNative::_ui_show, CarlaEngineNative::_ui_idle, CarlaEngineNative::_ui_set_parameter_value, /* _ui_set_midi_program */ nullptr, /* _ui_set_custom_data */ nullptr, CarlaEngineNative::_activate, CarlaEngineNative::_deactivate, CarlaEngineNative::_process, CarlaEngineNative::_get_state, CarlaEngineNative::_set_state, CarlaEngineNative::_dispatcher, /* _render_inline_dsplay */ nullptr, /* cvIns */ 0, /* cvOuts */ 0, /* _get_buffer_port_name */ nullptr, /* _get_buffer_port_range */ nullptr, /* ui_width */ kUiWidth, /* ui_height */ kUiHeight }; static const NativePluginDescriptor carlaPatchbay3sDesc = { /* category */ NATIVE_PLUGIN_CATEGORY_OTHER, /* hints */ static_cast(NATIVE_PLUGIN_IS_SYNTH |NATIVE_PLUGIN_HAS_UI |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD |NATIVE_PLUGIN_USES_STATE |NATIVE_PLUGIN_USES_TIME |NATIVE_PLUGIN_USES_UI_SIZE), /* supports */ static_cast(NATIVE_PLUGIN_SUPPORTS_EVERYTHING), /* audioIns */ 3, /* audioOuts */ 2, /* midiIns */ 1, /* midiOuts */ 1, /* paramIns */ kNumInParams, /* paramOuts */ kNumOutParams, /* name */ "Carla-Patchbay (sidechain)", /* label */ "carlapatchbay3s", /* maker */ "falkTX", /* copyright */ "GNU GPL v2+", CarlaEngineNative::_instantiatePatchbay3s, CarlaEngineNative::_cleanup, CarlaEngineNative::_get_parameter_count, CarlaEngineNative::_get_parameter_info, CarlaEngineNative::_get_parameter_value, /* _get_midi_program_count */ nullptr, /* _get_midi_program_info */ nullptr, CarlaEngineNative::_set_parameter_value, /* _set_midi_program */ nullptr, /* _set_custom_data */ nullptr, CarlaEngineNative::_ui_show, CarlaEngineNative::_ui_idle, CarlaEngineNative::_ui_set_parameter_value, /* _ui_set_midi_program */ nullptr, /* _ui_set_custom_data */ nullptr, CarlaEngineNative::_activate, CarlaEngineNative::_deactivate, CarlaEngineNative::_process, CarlaEngineNative::_get_state, CarlaEngineNative::_set_state, CarlaEngineNative::_dispatcher, /* _render_inline_dsplay */ nullptr, /* cvIns */ 0, /* cvOuts */ 0, /* _get_buffer_port_name */ nullptr, /* _get_buffer_port_range */ nullptr, /* ui_width */ kUiWidth, /* ui_height */ kUiHeight }; static const NativePluginDescriptor carlaPatchbay16Desc = { /* category */ NATIVE_PLUGIN_CATEGORY_OTHER, /* hints */ static_cast(NATIVE_PLUGIN_IS_SYNTH |NATIVE_PLUGIN_HAS_UI |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD |NATIVE_PLUGIN_USES_STATE |NATIVE_PLUGIN_USES_TIME |NATIVE_PLUGIN_USES_UI_SIZE), /* supports */ static_cast(NATIVE_PLUGIN_SUPPORTS_EVERYTHING), /* audioIns */ 16, /* audioOuts */ 16, /* midiIns */ 1, /* midiOuts */ 1, /* paramIns */ kNumInParams, /* paramOuts */ kNumOutParams, /* name */ "Carla-Patchbay (16chan)", /* label */ "carlapatchbay16", /* maker */ "falkTX", /* copyright */ "GNU GPL v2+", CarlaEngineNative::_instantiatePatchbay16, CarlaEngineNative::_cleanup, CarlaEngineNative::_get_parameter_count, CarlaEngineNative::_get_parameter_info, CarlaEngineNative::_get_parameter_value, /* _get_midi_program_count */ nullptr, /* _get_midi_program_info */ nullptr, CarlaEngineNative::_set_parameter_value, /* _set_midi_program */ nullptr, /* _set_custom_data */ nullptr, CarlaEngineNative::_ui_show, CarlaEngineNative::_ui_idle, CarlaEngineNative::_ui_set_parameter_value, /* _ui_set_midi_program */ nullptr, /* _ui_set_custom_data */ nullptr, CarlaEngineNative::_activate, CarlaEngineNative::_deactivate, CarlaEngineNative::_process, CarlaEngineNative::_get_state, CarlaEngineNative::_set_state, CarlaEngineNative::_dispatcher, /* _render_inline_dsplay */ nullptr, /* cvIns */ 0, /* cvOuts */ 0, /* _get_buffer_port_name */ nullptr, /* _get_buffer_port_range */ nullptr, /* ui_width */ kUiWidth, /* ui_height */ kUiHeight }; static const NativePluginDescriptor carlaPatchbay32Desc = { /* category */ NATIVE_PLUGIN_CATEGORY_OTHER, /* hints */ static_cast(NATIVE_PLUGIN_IS_SYNTH |NATIVE_PLUGIN_HAS_UI |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD |NATIVE_PLUGIN_USES_STATE |NATIVE_PLUGIN_USES_TIME |NATIVE_PLUGIN_USES_UI_SIZE), /* supports */ static_cast(NATIVE_PLUGIN_SUPPORTS_EVERYTHING), /* audioIns */ 32, /* audioOuts */ 32, /* midiIns */ 1, /* midiOuts */ 1, /* paramIns */ kNumInParams, /* paramOuts */ kNumOutParams, /* name */ "Carla-Patchbay (32chan)", /* label */ "carlapatchbay32", /* maker */ "falkTX", /* copyright */ "GNU GPL v2+", CarlaEngineNative::_instantiatePatchbay32, CarlaEngineNative::_cleanup, CarlaEngineNative::_get_parameter_count, CarlaEngineNative::_get_parameter_info, CarlaEngineNative::_get_parameter_value, /* _get_midi_program_count */ nullptr, /* _get_midi_program_info */ nullptr, CarlaEngineNative::_set_parameter_value, /* _set_midi_program */ nullptr, /* _set_custom_data */ nullptr, CarlaEngineNative::_ui_show, CarlaEngineNative::_ui_idle, CarlaEngineNative::_ui_set_parameter_value, /* _ui_set_midi_program */ nullptr, /* _ui_set_custom_data */ nullptr, CarlaEngineNative::_activate, CarlaEngineNative::_deactivate, CarlaEngineNative::_process, CarlaEngineNative::_get_state, CarlaEngineNative::_set_state, CarlaEngineNative::_dispatcher, /* _render_inline_dsplay */ nullptr, /* cvIns */ 0, /* cvOuts */ 0, /* _get_buffer_port_name */ nullptr, /* _get_buffer_port_range */ nullptr, /* ui_width */ kUiWidth, /* ui_height */ kUiHeight }; static const NativePluginDescriptor carlaPatchbay64Desc = { /* category */ NATIVE_PLUGIN_CATEGORY_OTHER, /* hints */ static_cast(NATIVE_PLUGIN_IS_SYNTH |NATIVE_PLUGIN_HAS_UI |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD |NATIVE_PLUGIN_USES_STATE |NATIVE_PLUGIN_USES_TIME |NATIVE_PLUGIN_USES_UI_SIZE), /* supports */ static_cast(NATIVE_PLUGIN_SUPPORTS_EVERYTHING), /* audioIns */ 64, /* audioOuts */ 64, /* midiIns */ 1, /* midiOuts */ 1, /* paramIns */ kNumInParams, /* paramOuts */ kNumOutParams, /* name */ "Carla-Patchbay (64chan)", /* label */ "carlapatchbay64", /* maker */ "falkTX", /* copyright */ "GNU GPL v2+", CarlaEngineNative::_instantiatePatchbay64, CarlaEngineNative::_cleanup, CarlaEngineNative::_get_parameter_count, CarlaEngineNative::_get_parameter_info, CarlaEngineNative::_get_parameter_value, /* _get_midi_program_count */ nullptr, /* _get_midi_program_info */ nullptr, CarlaEngineNative::_set_parameter_value, /* _set_midi_program */ nullptr, /* _set_custom_data */ nullptr, CarlaEngineNative::_ui_show, CarlaEngineNative::_ui_idle, CarlaEngineNative::_ui_set_parameter_value, /* _ui_set_midi_program */ nullptr, /* _ui_set_custom_data */ nullptr, CarlaEngineNative::_activate, CarlaEngineNative::_deactivate, CarlaEngineNative::_process, CarlaEngineNative::_get_state, CarlaEngineNative::_set_state, CarlaEngineNative::_dispatcher, /* _render_inline_dsplay */ nullptr, /* cvIns */ 0, /* cvOuts */ 0, /* _get_buffer_port_name */ nullptr, /* _get_buffer_port_range */ nullptr, /* ui_width */ kUiWidth, /* ui_height */ kUiHeight }; static const NativePluginDescriptor carlaPatchbayCVDesc = { /* category */ NATIVE_PLUGIN_CATEGORY_OTHER, /* hints */ static_cast(NATIVE_PLUGIN_IS_SYNTH |NATIVE_PLUGIN_HAS_UI |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD |NATIVE_PLUGIN_USES_CONTROL_VOLTAGE |NATIVE_PLUGIN_USES_STATE |NATIVE_PLUGIN_USES_TIME |NATIVE_PLUGIN_USES_UI_SIZE), /* supports */ static_cast(NATIVE_PLUGIN_SUPPORTS_EVERYTHING), /* audioIns */ 2, /* audioOuts */ 2, /* midiIns */ 1, /* midiOuts */ 1, /* paramIns */ kNumInParams, /* paramOuts */ kNumOutParams, /* name */ "Carla-Patchbay (CV)", /* label */ "carlapatchbaycv", /* maker */ "falkTX", /* copyright */ "GNU GPL v2+", CarlaEngineNative::_instantiatePatchbayCV, CarlaEngineNative::_cleanup, CarlaEngineNative::_get_parameter_count, CarlaEngineNative::_get_parameter_info, CarlaEngineNative::_get_parameter_value, /* _get_midi_program_count */ nullptr, /* _get_midi_program_info */ nullptr, CarlaEngineNative::_set_parameter_value, /* _set_midi_program */ nullptr, /* _set_custom_data */ nullptr, CarlaEngineNative::_ui_show, CarlaEngineNative::_ui_idle, CarlaEngineNative::_ui_set_parameter_value, /* _ui_set_midi_program */ nullptr, /* _ui_set_custom_data */ nullptr, CarlaEngineNative::_activate, CarlaEngineNative::_deactivate, CarlaEngineNative::_process, CarlaEngineNative::_get_state, CarlaEngineNative::_set_state, CarlaEngineNative::_dispatcher, /* _render_inline_dsplay */ nullptr, /* cvIns */ 5, /* cvOuts */ 5, /* _get_buffer_port_name */ nullptr, /* _get_buffer_port_range */ nullptr, /* ui_width */ kUiWidth, /* ui_height */ kUiHeight }; static const NativePluginDescriptor carlaPatchbayCV8Desc = { /* category */ NATIVE_PLUGIN_CATEGORY_OTHER, /* hints */ static_cast(NATIVE_PLUGIN_IS_SYNTH |NATIVE_PLUGIN_HAS_UI |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD |NATIVE_PLUGIN_USES_CONTROL_VOLTAGE |NATIVE_PLUGIN_USES_STATE |NATIVE_PLUGIN_USES_TIME |NATIVE_PLUGIN_USES_UI_SIZE), /* supports */ static_cast(NATIVE_PLUGIN_SUPPORTS_EVERYTHING), /* audioIns */ 2, /* audioOuts */ 2, /* midiIns */ 1, /* midiOuts */ 1, /* paramIns */ kNumInParams, /* paramOuts */ kNumOutParams, /* name */ "Carla-Patchbay (CV8)", /* label */ "carlapatchbaycv", /* maker */ "falkTX", /* copyright */ "GNU GPL v2+", CarlaEngineNative::_instantiatePatchbayCV8, CarlaEngineNative::_cleanup, CarlaEngineNative::_get_parameter_count, CarlaEngineNative::_get_parameter_info, CarlaEngineNative::_get_parameter_value, /* _get_midi_program_count */ nullptr, /* _get_midi_program_info */ nullptr, CarlaEngineNative::_set_parameter_value, /* _set_midi_program */ nullptr, /* _set_custom_data */ nullptr, CarlaEngineNative::_ui_show, CarlaEngineNative::_ui_idle, CarlaEngineNative::_ui_set_parameter_value, /* _ui_set_midi_program */ nullptr, /* _ui_set_custom_data */ nullptr, CarlaEngineNative::_activate, CarlaEngineNative::_deactivate, CarlaEngineNative::_process, CarlaEngineNative::_get_state, CarlaEngineNative::_set_state, CarlaEngineNative::_dispatcher, /* _render_inline_dsplay */ nullptr, /* cvIns */ 8, /* cvOuts */ 8, /* _get_buffer_port_name */ nullptr, /* _get_buffer_port_range */ nullptr, /* ui_width */ kUiWidth, /* ui_height */ kUiHeight }; static const NativePluginDescriptor carlaPatchbayCV32Desc = { /* category */ NATIVE_PLUGIN_CATEGORY_OTHER, /* hints */ static_cast(NATIVE_PLUGIN_IS_SYNTH |NATIVE_PLUGIN_HAS_UI |NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD |NATIVE_PLUGIN_USES_CONTROL_VOLTAGE |NATIVE_PLUGIN_USES_STATE |NATIVE_PLUGIN_USES_TIME |NATIVE_PLUGIN_USES_UI_SIZE), /* supports */ static_cast(NATIVE_PLUGIN_SUPPORTS_EVERYTHING), /* audioIns */ 64, /* audioOuts */ 64, /* midiIns */ 1, /* midiOuts */ 1, /* paramIns */ kNumInParams, /* paramOuts */ kNumOutParams, /* name */ "Carla-Patchbay (CV32)", /* label */ "carlapatchbaycv", /* maker */ "falkTX", /* copyright */ "GNU GPL v2+", CarlaEngineNative::_instantiatePatchbayCV32, CarlaEngineNative::_cleanup, CarlaEngineNative::_get_parameter_count, CarlaEngineNative::_get_parameter_info, CarlaEngineNative::_get_parameter_value, /* _get_midi_program_count */ nullptr, /* _get_midi_program_info */ nullptr, CarlaEngineNative::_set_parameter_value, /* _set_midi_program */ nullptr, /* _set_custom_data */ nullptr, CarlaEngineNative::_ui_show, CarlaEngineNative::_ui_idle, CarlaEngineNative::_ui_set_parameter_value, /* _ui_set_midi_program */ nullptr, /* _ui_set_custom_data */ nullptr, CarlaEngineNative::_activate, CarlaEngineNative::_deactivate, CarlaEngineNative::_process, CarlaEngineNative::_get_state, CarlaEngineNative::_set_state, CarlaEngineNative::_dispatcher, /* _render_inline_dsplay */ nullptr, /* cvIns */ 32, /* cvOuts */ 32, /* _get_buffer_port_name */ nullptr, /* _get_buffer_port_range */ nullptr, /* ui_width */ kUiWidth, /* ui_height */ kUiHeight }; CARLA_BACKEND_END_NAMESPACE // ----------------------------------------------------------------------- CARLA_EXPORT void carla_register_native_plugin_carla(); void carla_register_native_plugin_carla() { CARLA_BACKEND_USE_NAMESPACE; carla_register_native_plugin(&carlaRackDesc); carla_register_native_plugin(&carlaRackNoMidiOutDesc); carla_register_native_plugin(&carlaPatchbayDesc); carla_register_native_plugin(&carlaPatchbay3sDesc); carla_register_native_plugin(&carlaPatchbay16Desc); carla_register_native_plugin(&carlaPatchbay32Desc); carla_register_native_plugin(&carlaPatchbay64Desc); carla_register_native_plugin(&carlaPatchbayCVDesc); } // ----------------------------------------------------------------------- const NativePluginDescriptor* carla_get_native_rack_plugin() { CARLA_BACKEND_USE_NAMESPACE; return &carlaRackDesc; } const NativePluginDescriptor* carla_get_native_patchbay_plugin() { CARLA_BACKEND_USE_NAMESPACE; return &carlaPatchbayDesc; } const NativePluginDescriptor* carla_get_native_patchbay16_plugin() { CARLA_BACKEND_USE_NAMESPACE; return &carlaPatchbay16Desc; } const NativePluginDescriptor* carla_get_native_patchbay32_plugin() { CARLA_BACKEND_USE_NAMESPACE; return &carlaPatchbay32Desc; } const NativePluginDescriptor* carla_get_native_patchbay64_plugin() { CARLA_BACKEND_USE_NAMESPACE; return &carlaPatchbay64Desc; } const NativePluginDescriptor* carla_get_native_patchbay_cv_plugin() { CARLA_BACKEND_USE_NAMESPACE; return &carlaPatchbayCVDesc; } const NativePluginDescriptor* carla_get_native_patchbay_cv8_plugin() { CARLA_BACKEND_USE_NAMESPACE; return &carlaPatchbayCV8Desc; } const NativePluginDescriptor* carla_get_native_patchbay_cv32_plugin() { CARLA_BACKEND_USE_NAMESPACE; return &carlaPatchbayCV32Desc; } // ----------------------------------------------------------------------- // Extra stuff for linking purposes #ifdef CARLA_PLUGIN_EXPORT CARLA_BACKEND_START_NAMESPACE namespace EngineInit { CarlaEngine* newJack() { return nullptr; } #ifdef USING_JUCE_AUDIO_DEVICES CarlaEngine* newJuce(const AudioApi) { return nullptr; } uint getJuceApiCount() { return 0; } const char* getJuceApiName(const uint) { return nullptr; } const char* const* getJuceApiDeviceNames(const uint) { return nullptr; } const EngineDriverDeviceInfo* getJuceDeviceInfo(const uint, const char* const) { return nullptr; } bool showJuceDeviceControlPanel(const uint, const char* const) { return false; } #endif #ifdef USING_RTAUDIO CarlaEngine* newRtAudio(const AudioApi) { return nullptr; } uint getRtAudioApiCount() { return 0; } const char* getRtAudioApiName(const uint) { return nullptr; } const char* const* getRtAudioApiDeviceNames(const uint) { return nullptr; } const EngineDriverDeviceInfo* getRtAudioDeviceInfo(const uint, const char* const) { return nullptr; } #endif } CARLA_BACKEND_END_NAMESPACE #define CARLA_PLUGIN_UI_CLASS_PREFIX Plugin #include "CarlaPluginUI.cpp" # undef CARLA_PLUGIN_UI_CLASS_PREFIX #include "CarlaDssiUtils.cpp" #include "CarlaMacUtils.cpp" #include "CarlaPatchbayUtils.cpp" #include "CarlaPipeUtils.cpp" #include "CarlaProcessUtils.cpp" #include "CarlaStateUtils.cpp" #endif /* CARLA_PLUGIN_EXPORT */ // ----------------------------------------------------------------------- Carla-2.4.2/source/backend/engine/CarlaEngineOsc.cpp000066400000000000000000000143621420416754300222320ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2020 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "CarlaEngineOsc.hpp" #ifdef HAVE_LIBLO #include "CarlaEngine.hpp" CARLA_BACKEND_START_NAMESPACE // ----------------------------------------------------------------------- CarlaEngineOsc::CarlaEngineOsc(CarlaEngine* const engine) noexcept : fEngine(engine), fControlDataTCP(), fControlDataUDP(), fName(), fServerPathTCP(), fServerPathUDP(), fServerTCP(nullptr), fServerUDP(nullptr) { CARLA_SAFE_ASSERT(engine != nullptr); carla_debug("CarlaEngineOsc::CarlaEngineOsc(%p)", engine); } CarlaEngineOsc::~CarlaEngineOsc() noexcept { CARLA_SAFE_ASSERT(fName.isEmpty()); CARLA_SAFE_ASSERT(fServerPathTCP.isEmpty()); CARLA_SAFE_ASSERT(fServerPathUDP.isEmpty()); CARLA_SAFE_ASSERT(fServerTCP == nullptr); CARLA_SAFE_ASSERT(fServerUDP == nullptr); carla_debug("CarlaEngineOsc::~CarlaEngineOsc()"); } // ----------------------------------------------------------------------- void CarlaEngineOsc::init(const char* const name, int tcpPort, int udpPort) noexcept { CARLA_SAFE_ASSERT_RETURN(fName.isEmpty(),); CARLA_SAFE_ASSERT_RETURN(fServerPathTCP.isEmpty(),); CARLA_SAFE_ASSERT_RETURN(fServerPathUDP.isEmpty(),); CARLA_SAFE_ASSERT_RETURN(fServerTCP == nullptr,); CARLA_SAFE_ASSERT_RETURN(fServerUDP == nullptr,); CARLA_SAFE_ASSERT_RETURN(name != nullptr && name[0] != '\0',); carla_debug("CarlaEngineOsc::init(\"%s\")", name); fName = name; fName.toBasic(); if (fEngine->getType() != kEngineTypePlugin) { const char* const tcpPortEnv = std::getenv("CARLA_OSC_TCP_PORT"); const char* const udpPortEnv = std::getenv("CARLA_OSC_UDP_PORT"); if (tcpPortEnv != nullptr) tcpPort = std::atoi(tcpPortEnv); if (udpPortEnv != nullptr) udpPort = std::atoi(udpPortEnv); } // port == 0 means to pick a random one // port < 0 will get osc disabled static const int kRetryAttempts = 5; // ---------------------------------------------------------------------------------------------------------------- if (tcpPort == 0) { for (int i=0; i < kRetryAttempts && fServerTCP == nullptr; ++i) fServerTCP = lo_server_new_with_proto(nullptr, LO_TCP, osc_error_handler_TCP); } else if (tcpPort >= 1024) { char strBuf[0xff]; for (int i=0; i < kRetryAttempts && tcpPort < 32767 && fServerTCP == nullptr; ++i, ++tcpPort) { std::snprintf(strBuf, 0xff-1, "%d", tcpPort); strBuf[0xff-1] = '\0'; fServerTCP = lo_server_new_with_proto(strBuf, LO_TCP, osc_error_handler_TCP); } } if (fServerTCP != nullptr) { if (char* const tmpServerPathTCP = lo_server_get_url(fServerTCP)) { fServerPathTCP = tmpServerPathTCP; fServerPathTCP += fName; std::free(tmpServerPathTCP); } lo_server_add_method(fServerTCP, nullptr, nullptr, osc_message_handler_TCP, this); carla_debug("OSC TCP server running and listening at %s", fServerPathTCP.buffer()); } // ---------------------------------------------------------------------------------------------------------------- if (udpPort == 0) { for (int i=0; i < kRetryAttempts && fServerUDP == nullptr; ++i) fServerUDP = lo_server_new_with_proto(nullptr, LO_UDP, osc_error_handler_UDP); } else if (udpPort >= 1024) { char strBuf[0xff]; for (int i=0; i < kRetryAttempts && udpPort < 32768 && fServerUDP == nullptr; ++i, ++udpPort) { std::snprintf(strBuf, 0xff-1, "%d", udpPort); strBuf[0xff-1] = '\0'; fServerUDP = lo_server_new_with_proto(strBuf, LO_UDP, osc_error_handler_UDP); } } if (fServerUDP != nullptr) { if (char* const tmpServerPathUDP = lo_server_get_url(fServerUDP)) { fServerPathUDP = tmpServerPathUDP; fServerPathUDP += fName; std::free(tmpServerPathUDP); } lo_server_add_method(fServerUDP, nullptr, nullptr, osc_message_handler_UDP, this); carla_debug("OSC UDP server running and listening at %s", fServerPathUDP.buffer()); } // ---------------------------------------------------------------------------------------------------------------- CARLA_SAFE_ASSERT(fName.isNotEmpty()); } void CarlaEngineOsc::idle() const noexcept { if (fServerTCP != nullptr) { for (;;) { try { if (lo_server_recv_noblock(fServerTCP, 0) == 0) break; } CARLA_SAFE_EXCEPTION_CONTINUE("OSC idle TCP") } } if (fServerUDP != nullptr) { for (;;) { try { if (lo_server_recv_noblock(fServerUDP, 0) == 0) break; } CARLA_SAFE_EXCEPTION_CONTINUE("OSC idle UDP") } } } void CarlaEngineOsc::close() noexcept { carla_debug("CarlaEngineOsc::close()"); if (fControlDataTCP.target != nullptr) sendExit(); fName.clear(); if (fServerTCP != nullptr) { lo_server_del_method(fServerTCP, nullptr, nullptr); lo_server_free(fServerTCP); fServerTCP = nullptr; } if (fServerUDP != nullptr) { lo_server_del_method(fServerUDP, nullptr, nullptr); lo_server_free(fServerUDP); fServerUDP = nullptr; } fServerPathTCP.clear(); fServerPathUDP.clear(); fControlDataTCP.clear(); fControlDataUDP.clear(); } // ----------------------------------------------------------------------- CARLA_BACKEND_END_NAMESPACE #endif // HAVE_LIBLO Carla-2.4.2/source/backend/engine/CarlaEngineOsc.hpp000066400000000000000000000217761420416754300222460ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2020 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #ifndef CARLA_ENGINE_OSC_HPP_INCLUDED #define CARLA_ENGINE_OSC_HPP_INCLUDED #include "CarlaDefines.h" #ifdef HAVE_LIBLO #include "CarlaBackend.h" #include "CarlaJuceUtils.hpp" #include "CarlaPluginPtr.hpp" #include "CarlaOscUtils.hpp" #include "CarlaString.hpp" #define CARLA_ENGINE_OSC_HANDLE_ARGS const CarlaPluginPtr& plugin, \ const int argc, const lo_arg* const* const argv, const char* const types #define CARLA_ENGINE_OSC_CHECK_OSC_TYPES(/* argc, types, */ argcToCompare, typesToCompare) \ /* check argument count */ \ if (argc != argcToCompare) \ { \ carla_stderr("CarlaEngineOsc::%s() - argument count mismatch: %i != %i", __FUNCTION__, argc, argcToCompare); \ return 1; \ } \ if (argc > 0) \ { \ /* check for nullness */ \ if (types == nullptr || typesToCompare == nullptr) \ { \ carla_stderr("CarlaEngineOsc::%s() - argument types are null", __FUNCTION__); \ return 1; \ } \ /* check argument types */ \ if (std::strcmp(types, typesToCompare) != 0) \ { \ carla_stderr("CarlaEngineOsc::%s() - argument types mismatch: '%s' != '%s'", __FUNCTION__, types, typesToCompare); \ return 1; \ } \ } CARLA_BACKEND_START_NAMESPACE // ----------------------------------------------------------------------- class CarlaEngineOsc { public: CarlaEngineOsc(CarlaEngine* engine) noexcept; ~CarlaEngineOsc() noexcept; void init(const char* name, int tcpPort, int udpPort) noexcept; void idle() const noexcept; void close() noexcept; // ------------------------------------------------------------------- const CarlaString& getServerPathTCP() const noexcept { return fServerPathTCP; } const CarlaString& getServerPathUDP() const noexcept { return fServerPathUDP; } // ------------------------------------------------------------------- bool isControlRegisteredForTCP() const noexcept { return fControlDataTCP.target != nullptr; } bool isControlRegisteredForUDP() const noexcept { return fControlDataUDP.target != nullptr; } // ------------------------------------------------------------------- // TCP void sendCallback(EngineCallbackOpcode action, uint pluginId, int value1, int value2, int value3, float valuef, const char* valueStr) const noexcept; void sendPluginInfo(const CarlaPluginPtr& plugin) const noexcept; void sendPluginPortCount(const CarlaPluginPtr& plugin) const noexcept; void sendPluginParameterInfo(const CarlaPluginPtr& plugin, uint32_t index) const noexcept; void sendPluginDataCount(const CarlaPluginPtr& plugin) const noexcept; void sendPluginProgramCount(const CarlaPluginPtr& plugin) const noexcept; void sendPluginProgram(const CarlaPluginPtr& plugin, uint32_t index) const noexcept; void sendPluginMidiProgram(const CarlaPluginPtr& plugin, uint32_t index) const noexcept; void sendPluginCustomData(const CarlaPluginPtr& plugin, uint32_t index) const noexcept; void sendPluginInternalParameterValues(const CarlaPluginPtr& plugin) const noexcept; void sendPing() const noexcept; void sendResponse(int messageId, const char* error) const noexcept; void sendExit() const noexcept; // ------------------------------------------------------------------- // UDP void sendRuntimeInfo() const noexcept; void sendParameterValue(uint pluginId, uint32_t index, float value) const noexcept; void sendPeaks(uint pluginId, const float peaks[4]) const noexcept; // ------------------------------------------------------------------- private: CarlaEngine* const fEngine; // for carla-control CarlaOscData fControlDataTCP; CarlaOscData fControlDataUDP; CarlaString fName; CarlaString fServerPathTCP; CarlaString fServerPathUDP; lo_server fServerTCP; lo_server fServerUDP; // ------------------------------------------------------------------- int handleMessage(bool isTCP, const char* path, int argc, const lo_arg* const* argv, const char* types, lo_message msg); int handleMsgRegister(bool isTCP, int argc, const lo_arg* const* argv, const char* types, lo_address source); int handleMsgUnregister(bool isTCP, int argc, const lo_arg* const* argv, const char* types); int handleMsgControl(const char* method, int argc, const lo_arg* const* argv, const char* types); // Internal methods int handleMsgSetActive(CARLA_ENGINE_OSC_HANDLE_ARGS); int handleMsgSetDryWet(CARLA_ENGINE_OSC_HANDLE_ARGS); int handleMsgSetVolume(CARLA_ENGINE_OSC_HANDLE_ARGS); int handleMsgSetBalanceLeft(CARLA_ENGINE_OSC_HANDLE_ARGS); int handleMsgSetBalanceRight(CARLA_ENGINE_OSC_HANDLE_ARGS); int handleMsgSetPanning(CARLA_ENGINE_OSC_HANDLE_ARGS); int handleMsgSetParameterValue(CARLA_ENGINE_OSC_HANDLE_ARGS); int handleMsgSetParameterMappedControlIndex(CARLA_ENGINE_OSC_HANDLE_ARGS); int handleMsgSetParameterMappedRange(CARLA_ENGINE_OSC_HANDLE_ARGS); int handleMsgSetParameterMidiChannel(CARLA_ENGINE_OSC_HANDLE_ARGS); int handleMsgSetProgram(CARLA_ENGINE_OSC_HANDLE_ARGS); int handleMsgSetMidiProgram(CARLA_ENGINE_OSC_HANDLE_ARGS); int handleMsgNoteOn(CARLA_ENGINE_OSC_HANDLE_ARGS); int handleMsgNoteOff(CARLA_ENGINE_OSC_HANDLE_ARGS); // ----------------------------------------------------------------------- static void osc_error_handler_TCP(int num, const char* msg, const char* path) { carla_stderr("CarlaEngineOsc::osc_error_handler_TCP(%i, \"%s\", \"%s\")", num, msg, path); } static void osc_error_handler_UDP(int num, const char* msg, const char* path) { carla_stderr("CarlaEngineOsc::osc_error_handler_UDP(%i, \"%s\", \"%s\")", num, msg, path); } static int osc_message_handler_TCP(const char* path, const char* types, lo_arg** argv, int argc, lo_message msg, void* userData) { return ((CarlaEngineOsc*)userData)->handleMessage(true, path, argc, argv, types, msg); } static int osc_message_handler_UDP(const char* path, const char* types, lo_arg** argv, int argc, lo_message msg, void* userData) { return ((CarlaEngineOsc*)userData)->handleMessage(false, path, argc, argv, types, msg); } CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaEngineOsc) }; // ----------------------------------------------------------------------- CARLA_BACKEND_END_NAMESPACE #endif // HAVE_LIBLO #endif // CARLA_ENGINE_OSC_HPP_INCLUDED Carla-2.4.2/source/backend/engine/CarlaEngineOscHandlers.cpp000066400000000000000000000646641420416754300237250ustar00rootroot00000000000000 /* * Carla Plugin Host * Copyright (C) 2011-2019 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "CarlaEngineOsc.hpp" #ifdef HAVE_LIBLO #include "CarlaEngineInternal.hpp" #include "CarlaPlugin.hpp" #include "CarlaMIDI.h" #include CARLA_BACKEND_START_NAMESPACE // ----------------------------------------------------------------------- int CarlaEngineOsc::handleMessage(const bool isTCP, const char* const path, const int argc, const lo_arg* const* const argv, const char* const types, const lo_message msg) { CARLA_SAFE_ASSERT_RETURN(fName.isNotEmpty(), 1); CARLA_SAFE_ASSERT_RETURN(path != nullptr && path[0] != '\0', 1); CARLA_SAFE_ASSERT_RETURN(path[0] == '/', 1); #ifdef DEBUG if (std::strncmp(path, "/bridge_pong", 12) != 0) { carla_debug("CarlaEngineOsc::handleMessage(%s, \"%s\", %i, %p, \"%s\", %p)", bool2str(isTCP), path, argc, argv, types, msg); } #endif if (isTCP) { CARLA_SAFE_ASSERT_RETURN(fServerPathTCP.isNotEmpty(), 1); CARLA_SAFE_ASSERT_RETURN(fServerTCP != nullptr, 1); } else { CARLA_SAFE_ASSERT_RETURN(fServerPathUDP.isNotEmpty(), 1); CARLA_SAFE_ASSERT_RETURN(fServerUDP != nullptr, 1); } const lo_address source = lo_message_get_source(msg); // Initial path check if (std::strcmp(path, "/register") == 0) return handleMsgRegister(isTCP, argc, argv, types, source); if (std::strcmp(path, "/unregister") == 0) return handleMsgUnregister(isTCP, argc, argv, types); if (std::strncmp(path, "/ctrl/", 6) == 0) { CARLA_SAFE_ASSERT_RETURN(isTCP, 1); return handleMsgControl(path + 6, argc, argv, types); } // Check if message is for this client std::size_t bytesAfterName; if (fControlDataTCP.owner != nullptr && std::strcmp(lo_address_get_hostname(source), fControlDataTCP.owner) == 0) { if (const char* const slash = std::strchr(path+1, '/')) { bytesAfterName = static_cast(slash - path); } else { carla_stderr("CarlaEngineOsc::handleMessage() - message '%s' is invalid", path); return 1; } } else { bytesAfterName = fName.length(); if (std::strlen(path) <= bytesAfterName || std::strncmp(path+1, fName, bytesAfterName) != 0) { carla_stderr("CarlaEngineOsc::handleMessage() - message not for this client -> '%s' != '/%s/'", path, fName.buffer()); return 1; } ++bytesAfterName; } // Get plugin id from path, "/carla/23/method" -> 23 uint pluginId = 0; std::size_t offset; if (! std::isdigit(path[bytesAfterName+1])) { carla_stderr("CarlaEngineOsc::handleMessage() - invalid message '%s'", path); return 1; } if (std::isdigit(path[bytesAfterName+2])) { if (std::isdigit(path[bytesAfterName+4])) { carla_stderr2("CarlaEngineOsc::handleMessage() - invalid plugin id, over 999? (value: \"%s\")", path+bytesAfterName); return 1; } else if (std::isdigit(path[bytesAfterName+3])) { // 3 digits, /xyz/method offset = 5; pluginId += uint(path[bytesAfterName+1]-'0')*100; pluginId += uint(path[bytesAfterName+2]-'0')*10; pluginId += uint(path[bytesAfterName+3]-'0'); } else { // 2 digits, /xy/method offset = 4; pluginId += uint(path[bytesAfterName+1]-'0')*10; pluginId += uint(path[bytesAfterName+2]-'0'); } } else { // single digit, /x/method offset = 3; pluginId += uint(path[bytesAfterName+1]-'0'); } if (pluginId > fEngine->getCurrentPluginCount()) { carla_stderr("CarlaEngineOsc::handleMessage() - failed to get plugin, wrong id '%i'", pluginId); return 0; } // Get plugin const CarlaPluginPtr plugin = fEngine->getPluginUnchecked(pluginId); if (plugin == nullptr || plugin->getId() != pluginId) { carla_stderr("CarlaEngineOsc::handleMessage() - invalid plugin id '%i', probably has been removed (path: '%s')", pluginId, path); return 0; } // Get method from path, "/Carla/i/method" -> "method" char method[48]; std::strncpy(method, path + (bytesAfterName + offset), 47); method[47] = '\0'; if (method[0] == '\0') { carla_stderr("CarlaEngineOsc::handleMessage(%s, \"%s\", ...) - received message without method", bool2str(isTCP), path); return 0; } // Internal methods if (std::strcmp(method, "set_option") == 0) return 0; //handleMsgSetOption(plugin, argc, argv, types); // TODO if (std::strcmp(method, "set_active") == 0) return handleMsgSetActive(plugin, argc, argv, types); if (std::strcmp(method, "set_drywet") == 0) return handleMsgSetDryWet(plugin, argc, argv, types); if (std::strcmp(method, "set_volume") == 0) return handleMsgSetVolume(plugin, argc, argv, types); if (std::strcmp(method, "set_balance_left") == 0) return handleMsgSetBalanceLeft(plugin, argc, argv, types); if (std::strcmp(method, "set_balance_right") == 0) return handleMsgSetBalanceRight(plugin, argc, argv, types); if (std::strcmp(method, "set_panning") == 0) return handleMsgSetPanning(plugin, argc, argv, types); if (std::strcmp(method, "set_ctrl_channel") == 0) return 0; //handleMsgSetControlChannel(plugin, argc, argv, types); // TODO if (std::strcmp(method, "set_parameter_value") == 0) return handleMsgSetParameterValue(plugin, argc, argv, types); if (std::strcmp(method, "set_parameter_mapped_control_index") == 0) return handleMsgSetParameterMappedControlIndex(plugin, argc, argv, types); if (std::strcmp(method, "set_parameter_mapped_range") == 0) return handleMsgSetParameterMappedRange(plugin, argc, argv, types); if (std::strcmp(method, "set_parameter_midi_channel") == 0) return handleMsgSetParameterMidiChannel(plugin, argc, argv, types); if (std::strcmp(method, "set_program") == 0) return handleMsgSetProgram(plugin, argc, argv, types); if (std::strcmp(method, "set_midi_program") == 0) return handleMsgSetMidiProgram(plugin, argc, argv, types); if (std::strcmp(method, "set_custom_data") == 0) return 0; //handleMsgSetCustomData(plugin, argc, argv, types); // TODO if (std::strcmp(method, "set_chunk") == 0) return 0; //handleMsgSetChunk(plugin, argc, argv, types); // TODO if (std::strcmp(method, "note_on") == 0) return handleMsgNoteOn(plugin, argc, argv, types); if (std::strcmp(method, "note_off") == 0) return handleMsgNoteOff(plugin, argc, argv, types); // Send all other methods to plugins, TODO plugin->handleOscMessage(method, argc, argv, types, msg); return 0; } // ----------------------------------------------------------------------- int CarlaEngineOsc::handleMsgRegister(const bool isTCP, const int argc, const lo_arg* const* const argv, const char* const types, const lo_address source) { carla_debug("CarlaEngineOsc::handleMsgRegister()"); CARLA_ENGINE_OSC_CHECK_OSC_TYPES(1, "s"); const char* const url = &argv[0]->s; CarlaOscData& oscData(isTCP ? fControlDataTCP : fControlDataUDP); if (oscData.owner != nullptr) { carla_stderr("OSC backend already registered to %s", oscData.owner); char* const path = lo_url_get_path(url); const size_t pathlen = std::strlen(path); CARLA_SAFE_ASSERT_RETURN(pathlen < 32, 0); char targetPath[pathlen+12]; std::strcpy(targetPath, path); std::strcat(targetPath, "/exit-error"); lo_send_from(source, isTCP ? fServerTCP : fServerUDP, LO_TT_IMMEDIATE, targetPath, "s", "OSC already registered to another client"); free(path); } else { const char* const host = lo_address_get_hostname(source); /* */ char* const port = lo_url_get_port(url); // NOTE: lo_address_get_port is buggy against TCP const lo_address target = lo_address_new_with_proto(isTCP ? LO_TCP : LO_UDP, host, port); oscData.owner = carla_strdup_safe(host); oscData.path = carla_strdup_free(lo_url_get_path(url)); oscData.target = target; char* const targeturl = lo_address_get_url(target); carla_stdout("OSC %s backend registered to %s, path: %s, target: %s (host: %s, port: %s)", isTCP ? "TCP" : "UDP", url, oscData.path, targeturl, host, port); free(targeturl); free(port); if (isTCP) { const EngineOptions& opts(fEngine->getOptions()); fEngine->callback(false, true, ENGINE_CALLBACK_ENGINE_STARTED, fEngine->getCurrentPluginCount(), opts.processMode, opts.transportMode, static_cast(fEngine->getBufferSize()), static_cast(fEngine->getSampleRate()), fEngine->getCurrentDriverName()); for (uint i=0, count=fEngine->getCurrentPluginCount(); i < count; ++i) { const CarlaPluginPtr plugin = fEngine->getPluginUnchecked(i); CARLA_SAFE_ASSERT_CONTINUE(plugin != nullptr); fEngine->callback(false, true, ENGINE_CALLBACK_PLUGIN_ADDED, i, plugin->getType(), 0, 0, 0.0f, plugin->getName()); } fEngine->patchbayRefresh(false, true, fEngine->pData->graph.isUsingExternalOSC()); } } return 0; } int CarlaEngineOsc::handleMsgUnregister(const bool isTCP, const int argc, const lo_arg* const* const argv, const char* const types) { carla_debug("CarlaEngineOsc::handleMsgUnregister()"); CARLA_ENGINE_OSC_CHECK_OSC_TYPES(1, "s"); CarlaOscData& oscData(isTCP ? fControlDataTCP : fControlDataUDP); if (oscData.owner == nullptr) { carla_stderr("OSC backend is not registered yet, unregister failed"); return 0; } const char* const url = &argv[0]->s; if (std::strcmp(oscData.owner, url) == 0) { carla_stdout("OSC client %s unregistered", url); oscData.clear(); return 0; } carla_stderr("OSC backend unregister failed, current owner %s does not match requested %s", oscData.owner, url); return 0; } int CarlaEngineOsc::handleMsgControl(const char* const method, const int argc, const lo_arg* const* const argv, const char* const types) { carla_debug("CarlaEngineOsc::handleMsgControl()"); CARLA_SAFE_ASSERT_RETURN(method != nullptr && method[0] != '\0', 0); CARLA_SAFE_ASSERT_RETURN(types != nullptr, 0); CARLA_SAFE_ASSERT_RETURN(types[0] == 'i', 0); if (fControlDataTCP.owner == nullptr) { carla_stderr("OSC backend is not registered yet, control failed"); return 0; } const int32_t messageId = argv[0]->i; bool ok; #define CARLA_SAFE_ASSERT_RETURN_OSC_ERR(cond) \ if (! (cond)) { carla_safe_assert(#cond, __FILE__, __LINE__); sendResponse(messageId, #cond); return 0; } /**/ if (std::strcmp(method, "clear_engine_xruns") == 0) { ok = true; fEngine->clearXruns(); } else if (std::strcmp(method, "cancel_engine_action") == 0) { ok = true; fEngine->setActionCanceled(true); } else if (std::strcmp(method, "patchbay_connect") == 0) { CARLA_SAFE_ASSERT_RETURN_OSC_ERR(argc == 6); CARLA_SAFE_ASSERT_RETURN_OSC_ERR(types[1] == 'i'); CARLA_SAFE_ASSERT_RETURN_OSC_ERR(types[2] == 'i'); CARLA_SAFE_ASSERT_RETURN_OSC_ERR(types[3] == 'i'); CARLA_SAFE_ASSERT_RETURN_OSC_ERR(types[4] == 'i'); CARLA_SAFE_ASSERT_RETURN_OSC_ERR(types[5] == 'i'); const bool external = argv[1]->i != 0; const int32_t groupA = argv[2]->i; CARLA_SAFE_ASSERT_RETURN_OSC_ERR(groupA >= 0); const int32_t portA = argv[3]->i; CARLA_SAFE_ASSERT_RETURN_OSC_ERR(portA >= 0); const int32_t groupB = argv[4]->i; CARLA_SAFE_ASSERT_RETURN_OSC_ERR(groupB >= 0); const int32_t portB = argv[5]->i; CARLA_SAFE_ASSERT_RETURN_OSC_ERR(portB >= 0); ok = fEngine->patchbayConnect(external, static_cast(groupA), static_cast(portA), static_cast(groupB), static_cast(portB)); } else if (std::strcmp(method, "patchbay_disconnect") == 0) { CARLA_SAFE_ASSERT_RETURN_OSC_ERR(argc == 3); CARLA_SAFE_ASSERT_RETURN_OSC_ERR(types[1] == 'i'); CARLA_SAFE_ASSERT_RETURN_OSC_ERR(types[2] == 'i'); const bool external = argv[1]->i != 0; const int32_t connectionId = argv[2]->i; CARLA_SAFE_ASSERT_RETURN_OSC_ERR(connectionId >= 0); ok = fEngine->patchbayDisconnect(external, static_cast(connectionId)); } else if (std::strcmp(method, "patchbay_set_group_pos") == 0) { CARLA_SAFE_ASSERT_RETURN_OSC_ERR(argc == 7); CARLA_SAFE_ASSERT_RETURN_OSC_ERR(types[1] == 'i'); CARLA_SAFE_ASSERT_RETURN_OSC_ERR(types[2] == 'i'); CARLA_SAFE_ASSERT_RETURN_OSC_ERR(types[3] == 'i'); CARLA_SAFE_ASSERT_RETURN_OSC_ERR(types[4] == 'i'); CARLA_SAFE_ASSERT_RETURN_OSC_ERR(types[5] == 'i'); CARLA_SAFE_ASSERT_RETURN_OSC_ERR(types[6] == 'i'); const bool external = argv[1]->i != 0; const int32_t groupId = argv[2]->i; CARLA_SAFE_ASSERT_RETURN_OSC_ERR(groupId >= 0); ok = fEngine->patchbaySetGroupPos(true, false, external, static_cast(groupId), argv[3]->i, argv[4]->i, argv[5]->i, argv[6]->i); } else if (std::strcmp(method, "patchbay_refresh") == 0) { CARLA_SAFE_ASSERT_RETURN_OSC_ERR(argc == 2); CARLA_SAFE_ASSERT_RETURN_OSC_ERR(types[1] == 'i'); const bool external = argv[1]->i != 0; ok = fEngine->patchbayRefresh(false, true, external); } else if (std::strcmp(method, "transport_play") == 0) { ok = true; fEngine->transportPlay(); } else if (std::strcmp(method, "transport_pause") == 0) { ok = true; fEngine->transportPause(); } else if (std::strcmp(method, "transport_bpm") == 0) { CARLA_SAFE_ASSERT_RETURN_OSC_ERR(argc == 2); CARLA_SAFE_ASSERT_RETURN_OSC_ERR(types[1] == 'f'); const double bpm = argv[1]->f; CARLA_SAFE_ASSERT_RETURN_OSC_ERR(bpm >= 0.0); ok = true; fEngine->transportBPM(bpm); } else if (std::strcmp(method, "transport_relocate") == 0) { CARLA_SAFE_ASSERT_RETURN_OSC_ERR(argc == 2); uint64_t frame; /**/ if (types[1] == 'i') { const int32_t i = argv[1]->i; CARLA_SAFE_ASSERT_RETURN_OSC_ERR(i >= 0); frame = static_cast(i); } else if (types[1] == 'h') { const int64_t h = argv[1]->h; CARLA_SAFE_ASSERT_RETURN_OSC_ERR(h >= 0); frame = static_cast(h); } else { carla_stderr2("Wrong OSC type used for '%s'", method); sendResponse(messageId, "Wrong OSC type"); return 0; } ok = true; fEngine->transportRelocate(frame); } else if (std::strcmp(method, "add_plugin") == 0) { CARLA_SAFE_ASSERT_RETURN_OSC_ERR(argc == 8); CARLA_SAFE_ASSERT_RETURN_OSC_ERR(types[1] == 'i'); CARLA_SAFE_ASSERT_RETURN_OSC_ERR(types[2] == 'i'); CARLA_SAFE_ASSERT_RETURN_OSC_ERR(types[3] == 's'); CARLA_SAFE_ASSERT_RETURN_OSC_ERR(types[4] == 's'); CARLA_SAFE_ASSERT_RETURN_OSC_ERR(types[5] == 's'); CARLA_SAFE_ASSERT_RETURN_OSC_ERR(types[7] == 'i'); int32_t btype = argv[1]->i; CARLA_SAFE_ASSERT_RETURN_OSC_ERR(btype >= 0); const int32_t ptype = argv[2]->i; CARLA_SAFE_ASSERT_RETURN_OSC_ERR(ptype >= 0); // Force binary type to be native in some cases switch (ptype) { case PLUGIN_INTERNAL: case PLUGIN_LV2: case PLUGIN_SF2: case PLUGIN_SFZ: case PLUGIN_JACK: btype = BINARY_NATIVE; break; } const char* filename = &argv[3]->s; if (filename != nullptr && std::strcmp(filename, "(null)") == 0) filename = nullptr; const char* name = &argv[4]->s; if (name != nullptr && std::strcmp(name, "(null)") == 0) name = nullptr; const char* const label = &argv[5]->s; CARLA_SAFE_ASSERT_RETURN_OSC_ERR(label != nullptr && label[0] != '\0'); int64_t uniqueId; /**/ if (types[6] == 'i') { uniqueId = argv[6]->i; } else if (types[6] == 'h') { uniqueId = argv[6]->h; } else { carla_stderr2("Wrong OSC type used for '%s' uniqueId", method); sendResponse(messageId, "Wrong OSC type"); return 0; } const int32_t options = argv[7]->i; CARLA_SAFE_ASSERT_RETURN_OSC_ERR(options >= 0); ok = fEngine->addPlugin(static_cast(btype), static_cast(ptype), filename, name, label, uniqueId, nullptr, static_cast(options)); } else if (std::strcmp(method, "remove_plugin") == 0) { CARLA_SAFE_ASSERT_RETURN_OSC_ERR(argc == 2); CARLA_SAFE_ASSERT_RETURN_OSC_ERR(types[1] == 'i'); const int32_t id = argv[1]->i; CARLA_SAFE_ASSERT_RETURN_OSC_ERR(id >= 0); ok = fEngine->removePlugin(static_cast(id)); } else if (std::strcmp(method, "remove_all_plugins") == 0) { ok = fEngine->removeAllPlugins(); } else if (std::strcmp(method, "rename_plugin") == 0) { CARLA_SAFE_ASSERT_RETURN_OSC_ERR(argc == 3); CARLA_SAFE_ASSERT_RETURN_OSC_ERR(types[1] == 'i'); CARLA_SAFE_ASSERT_RETURN_OSC_ERR(types[2] == 's'); const int32_t id = argv[1]->i; CARLA_SAFE_ASSERT_RETURN_OSC_ERR(id >= 0); const char* const newName = &argv[2]->s; CARLA_SAFE_ASSERT_RETURN_OSC_ERR(newName != nullptr && newName[0] != '\0'); ok = fEngine->renamePlugin(static_cast(id), newName); } else if (std::strcmp(method, "clone_plugin") == 0) { CARLA_SAFE_ASSERT_RETURN_OSC_ERR(argc == 2); CARLA_SAFE_ASSERT_RETURN_OSC_ERR(types[1] == 'i'); const int32_t id = argv[1]->i; CARLA_SAFE_ASSERT_RETURN_OSC_ERR(id >= 0); ok = fEngine->clonePlugin(static_cast(id)); } else if (std::strcmp(method, "replace_plugin") == 0) { CARLA_SAFE_ASSERT_RETURN_OSC_ERR(argc == 2); CARLA_SAFE_ASSERT_RETURN_OSC_ERR(types[1] == 'i'); const int32_t id = argv[1]->i; CARLA_SAFE_ASSERT_RETURN_OSC_ERR(id >= 0); ok = fEngine->replacePlugin(static_cast(id)); } else if (std::strcmp(method, "switch_plugins") == 0) { CARLA_SAFE_ASSERT_RETURN_OSC_ERR(argc == 3); CARLA_SAFE_ASSERT_RETURN_OSC_ERR(types[1] == 'i'); CARLA_SAFE_ASSERT_RETURN_OSC_ERR(types[2] == 'i'); const int32_t idA = argv[1]->i; CARLA_SAFE_ASSERT_RETURN_OSC_ERR(idA >= 0); const int32_t idB = argv[2]->i; CARLA_SAFE_ASSERT_RETURN_OSC_ERR(idB >= 0); ok = fEngine->switchPlugins(static_cast(idA), static_cast(idB)); } else { carla_stderr2("Unhandled OSC control for '%s'", method); sendResponse(messageId, "Unhandled OSC control method"); return 0; } #undef CARLA_SAFE_ASSERT_RETURN_OSC_ERR sendResponse(messageId, ok ? "" : fEngine->getLastError()); return 0; } // ----------------------------------------------------------------------- int CarlaEngineOsc::handleMsgSetActive(CARLA_ENGINE_OSC_HANDLE_ARGS) { carla_debug("CarlaEngineOsc::handleMsgSetActive()"); CARLA_ENGINE_OSC_CHECK_OSC_TYPES(1, "i"); const bool active = (argv[0]->i != 0); plugin->setActive(active, false, true); return 0; } int CarlaEngineOsc::handleMsgSetDryWet(CARLA_ENGINE_OSC_HANDLE_ARGS) { carla_debug("CarlaEngineOsc::handleMsgSetDryWet()"); CARLA_ENGINE_OSC_CHECK_OSC_TYPES(1, "f"); const float value = argv[0]->f; plugin->setDryWet(value, false, true); return 0; } int CarlaEngineOsc::handleMsgSetVolume(CARLA_ENGINE_OSC_HANDLE_ARGS) { carla_debug("CarlaEngineOsc::handleMsgSetVolume()"); CARLA_ENGINE_OSC_CHECK_OSC_TYPES(1, "f"); const float value = argv[0]->f; plugin->setVolume(value, false, true); return 0; } int CarlaEngineOsc::handleMsgSetBalanceLeft(CARLA_ENGINE_OSC_HANDLE_ARGS) { carla_debug("CarlaEngineOsc::handleMsgSetBalanceLeft()"); CARLA_ENGINE_OSC_CHECK_OSC_TYPES(1, "f"); const float value = argv[0]->f; plugin->setBalanceLeft(value, false, true); return 0; } int CarlaEngineOsc::handleMsgSetBalanceRight(CARLA_ENGINE_OSC_HANDLE_ARGS) { carla_debug("CarlaEngineOsc::handleMsgSetBalanceRight()"); CARLA_ENGINE_OSC_CHECK_OSC_TYPES(1, "f"); const float value = argv[0]->f; plugin->setBalanceRight(value, false, true); return 0; } int CarlaEngineOsc::handleMsgSetPanning(CARLA_ENGINE_OSC_HANDLE_ARGS) { carla_debug("CarlaEngineOsc::handleMsgSetPanning()"); CARLA_ENGINE_OSC_CHECK_OSC_TYPES(1, "f"); const float value = argv[0]->f; plugin->setPanning(value, false, true); return 0; } int CarlaEngineOsc::handleMsgSetParameterValue(CARLA_ENGINE_OSC_HANDLE_ARGS) { carla_debug("CarlaEngineOsc::handleMsgSetParameterValue()"); CARLA_ENGINE_OSC_CHECK_OSC_TYPES(2, "if"); const int32_t index = argv[0]->i; const float value = argv[1]->f; CARLA_SAFE_ASSERT_RETURN(index >= 0, 0); plugin->setParameterValue(static_cast(index), value, true, false, true); return 0; } int CarlaEngineOsc::handleMsgSetParameterMappedControlIndex(CARLA_ENGINE_OSC_HANDLE_ARGS) { carla_debug("CarlaEngineOsc::handleMsgSetParameterMappedIndex()"); CARLA_ENGINE_OSC_CHECK_OSC_TYPES(2, "ii"); const int32_t index = argv[0]->i; const int32_t ctrl = argv[1]->i; CARLA_SAFE_ASSERT_RETURN(index >= 0, 0); CARLA_SAFE_ASSERT_RETURN(ctrl >= CONTROL_INDEX_NONE && ctrl <= CONTROL_INDEX_MAX_ALLOWED, 0); plugin->setParameterMappedControlIndex(static_cast(index), static_cast(ctrl), false, true, true); return 0; } int CarlaEngineOsc::handleMsgSetParameterMappedRange(CARLA_ENGINE_OSC_HANDLE_ARGS) { carla_debug("CarlaEngineOsc::handleMsgSetParameterMappedRange()"); CARLA_ENGINE_OSC_CHECK_OSC_TYPES(2, "iff"); const int32_t index = argv[0]->i; const float minimum = argv[1]->f; const float maximum = argv[2]->f; CARLA_SAFE_ASSERT_RETURN(index >= 0, 0); plugin->setParameterMappedRange(static_cast(index), minimum, maximum, false, true); return 0; } int CarlaEngineOsc::handleMsgSetParameterMidiChannel(CARLA_ENGINE_OSC_HANDLE_ARGS) { carla_debug("CarlaEngineOsc::handleMsgSetParameterMidiChannel()"); CARLA_ENGINE_OSC_CHECK_OSC_TYPES(2, "ii"); const int32_t index = argv[0]->i; const int32_t channel = argv[1]->i; CARLA_SAFE_ASSERT_RETURN(index >= 0, 0); CARLA_SAFE_ASSERT_RETURN(channel >= 0 && channel < MAX_MIDI_CHANNELS, 0); plugin->setParameterMidiChannel(static_cast(index), static_cast(channel), false, true); return 0; } int CarlaEngineOsc::handleMsgSetProgram(CARLA_ENGINE_OSC_HANDLE_ARGS) { carla_debug("CarlaEngineOsc::handleMsgSetProgram()"); CARLA_ENGINE_OSC_CHECK_OSC_TYPES(1, "i"); const int32_t index = argv[0]->i; CARLA_SAFE_ASSERT_RETURN(index >= -1, 0); plugin->setProgram(index, true, false, true); return 0; } int CarlaEngineOsc::handleMsgSetMidiProgram(CARLA_ENGINE_OSC_HANDLE_ARGS) { carla_debug("CarlaEngineOsc::handleMsgSetMidiProgram()"); CARLA_ENGINE_OSC_CHECK_OSC_TYPES(1, "i"); const int32_t index = argv[0]->i; CARLA_SAFE_ASSERT_RETURN(index >= -1, 0); plugin->setMidiProgram(index, true, false, true); return 0; } int CarlaEngineOsc::handleMsgNoteOn(CARLA_ENGINE_OSC_HANDLE_ARGS) { carla_debug("CarlaEngineOsc::handleMsgNoteOn()"); CARLA_ENGINE_OSC_CHECK_OSC_TYPES(3, "iii"); const int32_t channel = argv[0]->i; const int32_t note = argv[1]->i; const int32_t velo = argv[2]->i; CARLA_SAFE_ASSERT_RETURN(channel >= 0 && channel < MAX_MIDI_CHANNELS, 0); CARLA_SAFE_ASSERT_RETURN(note >= 0 && note < MAX_MIDI_NOTE, 0); CARLA_SAFE_ASSERT_RETURN(velo >= 0 && velo < MAX_MIDI_VALUE, 0); plugin->sendMidiSingleNote(static_cast(channel), static_cast(note), static_cast(velo), true, false, true); return 0; } int CarlaEngineOsc::handleMsgNoteOff(CARLA_ENGINE_OSC_HANDLE_ARGS) { carla_debug("CarlaEngineOsc::handleMsgNoteOff()"); CARLA_ENGINE_OSC_CHECK_OSC_TYPES(2, "ii"); const int32_t channel = argv[0]->i; const int32_t note = argv[1]->i; CARLA_SAFE_ASSERT_RETURN(channel >= 0 && channel < MAX_MIDI_CHANNELS, 0); CARLA_SAFE_ASSERT_RETURN(note >= 0 && note < MAX_MIDI_NOTE, 0); plugin->sendMidiSingleNote(static_cast(channel), static_cast(note), 0, true, false, true); return 0; } // ----------------------------------------------------------------------- CARLA_BACKEND_END_NAMESPACE #endif // HAVE_LIBLO Carla-2.4.2/source/backend/engine/CarlaEngineOscSend.cpp000066400000000000000000000424561420416754300230510ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2019 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "CarlaEngineOsc.hpp" #ifdef HAVE_LIBLO #include "CarlaBackendUtils.hpp" #include "CarlaEngine.hpp" #include "CarlaPlugin.hpp" CARLA_BACKEND_START_NAMESPACE static const char* const kNullString = ""; // ----------------------------------------------------------------------- void CarlaEngineOsc::sendCallback(const EngineCallbackOpcode action, const uint pluginId, const int value1, const int value2, const int value3, const float valuef, const char* const valueStr) const noexcept { CARLA_SAFE_ASSERT_RETURN(fControlDataTCP.path != nullptr && fControlDataTCP.path[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(fControlDataTCP.target != nullptr,); carla_stdout("CarlaEngineOsc::sendCallback(%i:%s, %i, %i, %i, %i, %f, \"%s\")", action, EngineCallbackOpcode2Str(action), pluginId, value1, value2, value3, static_cast(valuef), valueStr); char targetPath[std::strlen(fControlDataTCP.path)+4]; std::strcpy(targetPath, fControlDataTCP.path); std::strcat(targetPath, "/cb"); try_lo_send(fControlDataTCP.target, targetPath, "iiiiifs", action, pluginId, value1, value2, value3, static_cast(valuef), valueStr != nullptr ? valueStr : kNullString); } void CarlaEngineOsc::sendPluginInfo(const CarlaPluginPtr& plugin) const noexcept { CARLA_SAFE_ASSERT_RETURN(fControlDataTCP.path != nullptr && fControlDataTCP.path[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(fControlDataTCP.target != nullptr,); CARLA_SAFE_ASSERT_RETURN(plugin != nullptr,); carla_stdout("CarlaEngineOsc::sendPluginInfo(%p)", plugin.get()); char bufRealName[STR_MAX+1], bufLabel[STR_MAX+1], bufMaker[STR_MAX+1], bufCopyright[STR_MAX+1]; carla_zeroChars(bufRealName, STR_MAX+1); carla_zeroChars(bufLabel, STR_MAX+1); carla_zeroChars(bufMaker, STR_MAX+1); carla_zeroChars(bufCopyright, STR_MAX+1); if (! plugin->getRealName(bufRealName)) bufRealName[0] = '\0'; if (! plugin->getLabel(bufLabel)) bufLabel[0] = '\0'; if (! plugin->getMaker(bufMaker)) bufMaker[0] = '\0'; if (! plugin->getCopyright(bufCopyright)) bufCopyright[0] = '\0'; const char* name = plugin->getName(); const char* filename = plugin->getFilename(); const char* iconName = plugin->getIconName(); if (name == nullptr) name = kNullString; if (filename == nullptr) filename = kNullString; if (iconName == nullptr) iconName = kNullString; char targetPath[std::strlen(fControlDataTCP.path)+6]; std::strcpy(targetPath, fControlDataTCP.path); std::strcat(targetPath, "/info"); try_lo_send(fControlDataTCP.target, targetPath, "iiiihiisssssss", static_cast(plugin->getId()), static_cast(plugin->getType()), static_cast(plugin->getCategory()), static_cast(plugin->getHints()), static_cast(plugin->getUniqueId()), static_cast(plugin->getOptionsAvailable()), static_cast(plugin->getOptionsEnabled()), name, filename, iconName, bufRealName, bufLabel, bufMaker, bufCopyright); } void CarlaEngineOsc::sendPluginPortCount(const CarlaPluginPtr& plugin) const noexcept { CARLA_SAFE_ASSERT_RETURN(fControlDataTCP.path != nullptr && fControlDataTCP.path[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(fControlDataTCP.target != nullptr,); CARLA_SAFE_ASSERT_RETURN(plugin != nullptr,); carla_stdout("CarlaEngineOsc::sendPluginPortCount(%p)", plugin.get()); uint32_t paramIns, paramOuts; plugin->getParameterCountInfo(paramIns, paramOuts); if (paramIns > 49) paramIns = 49; if (paramOuts > 49) paramOuts = 49; char targetPath[std::strlen(fControlDataTCP.path)+7]; std::strcpy(targetPath, fControlDataTCP.path); std::strcat(targetPath, "/ports"); try_lo_send(fControlDataTCP.target, targetPath, "iiiiiiii", static_cast(plugin->getId()), static_cast(plugin->getAudioInCount()), static_cast(plugin->getAudioOutCount()), static_cast(plugin->getMidiInCount()), static_cast(plugin->getMidiOutCount()), static_cast(paramIns), static_cast(paramOuts), static_cast(plugin->getParameterCount())); } void CarlaEngineOsc::sendPluginParameterInfo(const CarlaPluginPtr& plugin, const uint32_t index) const noexcept { CARLA_SAFE_ASSERT_RETURN(fControlDataTCP.path != nullptr && fControlDataTCP.path[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(fControlDataTCP.target != nullptr,); CARLA_SAFE_ASSERT_RETURN(plugin != nullptr,); carla_debug("CarlaEngineOsc::sendPluginParameterInfo(%p, %u)", plugin.get(), index); char bufName[STR_MAX+1], bufUnit[STR_MAX+1], bufComment[STR_MAX+1], bufGroupName[STR_MAX+1]; carla_zeroChars(bufName, STR_MAX+1); carla_zeroChars(bufUnit, STR_MAX+1); carla_zeroChars(bufComment, STR_MAX+1); carla_zeroChars(bufGroupName, STR_MAX+1); if (! plugin->getParameterName(index, bufName)) bufName[0] = '\0'; if (! plugin->getParameterUnit(index, bufUnit)) bufUnit[0] = '\0'; if (! plugin->getParameterComment(index, bufComment)) bufComment[0] = '\0'; if (! plugin->getParameterGroupName(index, bufGroupName)) bufGroupName[0] = '\0'; const ParameterData& paramData(plugin->getParameterData(index)); const ParameterRanges& paramRanges(plugin->getParameterRanges(index)); const int32_t pluginId = static_cast(plugin->getId()); const int32_t paramId = static_cast(index); char targetPath[std::strlen(fControlDataTCP.path)+13]; std::strcpy(targetPath, fControlDataTCP.path); std::strcat(targetPath, "/paramInfo"); try_lo_send(fControlDataTCP.target, targetPath, "iissss", pluginId, paramId, bufName, bufUnit, bufComment, bufGroupName); std::strcpy(targetPath, fControlDataTCP.path); std::strcat(targetPath, "/paramData"); try_lo_send(fControlDataTCP.target, targetPath, "iiiiiifff", pluginId, paramId, static_cast(paramData.type), static_cast(paramData.hints), static_cast(paramData.midiChannel), static_cast(paramData.mappedControlIndex), static_cast(paramData.mappedMinimum), static_cast(paramData.mappedMaximum), static_cast(plugin->getParameterValue(index))); std::strcpy(targetPath, fControlDataTCP.path); std::strcat(targetPath, "/paramRanges"); try_lo_send(fControlDataTCP.target, targetPath, "iiffffff", pluginId, paramId, static_cast(paramRanges.def), static_cast(paramRanges.min), static_cast(paramRanges.max), static_cast(paramRanges.step), static_cast(paramRanges.stepSmall), static_cast(paramRanges.stepLarge)); } void CarlaEngineOsc::sendPluginDataCount(const CarlaPluginPtr& plugin) const noexcept { CARLA_SAFE_ASSERT_RETURN(fControlDataTCP.path != nullptr && fControlDataTCP.path[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(fControlDataTCP.target != nullptr,); CARLA_SAFE_ASSERT_RETURN(plugin != nullptr,); carla_stdout("CarlaEngineOsc::sendPluginDataCount(%p)", plugin.get()); char targetPath[std::strlen(fControlDataTCP.path)+7]; std::strcpy(targetPath, fControlDataTCP.path); std::strcat(targetPath, "/count"); try_lo_send(fControlDataTCP.target, targetPath, "iiiiii", static_cast(plugin->getId()), static_cast(plugin->getProgramCount()), static_cast(plugin->getMidiProgramCount()), static_cast(plugin->getCustomDataCount()), static_cast(plugin->getCurrentProgram()), static_cast(plugin->getCurrentMidiProgram())); } void CarlaEngineOsc::sendPluginProgramCount(const CarlaPluginPtr& plugin) const noexcept { CARLA_SAFE_ASSERT_RETURN(fControlDataTCP.path != nullptr && fControlDataTCP.path[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(fControlDataTCP.target != nullptr,); CARLA_SAFE_ASSERT_RETURN(plugin != nullptr,); carla_stdout("CarlaEngineOsc::sendPluginDataCount(%p)", plugin.get()); char targetPath[std::strlen(fControlDataTCP.path)+7]; std::strcpy(targetPath, fControlDataTCP.path); std::strcat(targetPath, "/pcount"); try_lo_send(fControlDataTCP.target, targetPath, "iii", static_cast(plugin->getId()), static_cast(plugin->getProgramCount()), static_cast(plugin->getMidiProgramCount())); } void CarlaEngineOsc::sendPluginProgram(const CarlaPluginPtr& plugin, const uint32_t index) const noexcept { CARLA_SAFE_ASSERT_RETURN(fControlDataTCP.path != nullptr && fControlDataTCP.path[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(fControlDataTCP.target != nullptr,); carla_stdout("CarlaEngineOsc::sendPluginProgram(%p, %u)", plugin.get(), index); char strBuf[STR_MAX+1]; carla_zeroChars(strBuf, STR_MAX+1); if (! plugin->getProgramName(index, strBuf)) strBuf[0] = '\0'; char targetPath[std::strlen(fControlDataTCP.path)+6]; std::strcpy(targetPath, fControlDataTCP.path); std::strcat(targetPath, "/prog"); try_lo_send(fControlDataTCP.target, targetPath, "iis", static_cast(plugin->getId()), static_cast(index), strBuf); } void CarlaEngineOsc::sendPluginMidiProgram(const CarlaPluginPtr& plugin, const uint32_t index) const noexcept { CARLA_SAFE_ASSERT_RETURN(fControlDataTCP.path != nullptr && fControlDataTCP.path[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(fControlDataTCP.target != nullptr,); carla_stdout("CarlaEngineOsc::sendPluginProgram(%p, %u)", plugin.get(), index); const MidiProgramData& mpdata(plugin->getMidiProgramData(index)); CARLA_SAFE_ASSERT_RETURN(mpdata.name != nullptr,); char targetPath[std::strlen(fControlDataTCP.path)+7]; std::strcpy(targetPath, fControlDataTCP.path); std::strcat(targetPath, "/mprog"); try_lo_send(fControlDataTCP.target, targetPath, "iiiis", static_cast(plugin->getId()), static_cast(index), static_cast(mpdata.bank), static_cast(mpdata.program), mpdata.name); } void CarlaEngineOsc::sendPluginCustomData(const CarlaPluginPtr& plugin, const uint32_t index) const noexcept { CARLA_SAFE_ASSERT_RETURN(fControlDataTCP.path != nullptr && fControlDataTCP.path[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(fControlDataTCP.target != nullptr,); carla_stdout("CarlaEngineOsc::sendPluginCustomData(%p, %u)", plugin.get(), index); const CustomData& cdata(plugin->getCustomData(index)); CARLA_SAFE_ASSERT_RETURN(cdata.isValid(),); char targetPath[std::strlen(fControlDataTCP.path)+7]; std::strcpy(targetPath, fControlDataTCP.path); std::strcat(targetPath, "/cdata"); try_lo_send(fControlDataTCP.target, targetPath, "iisss", static_cast(plugin->getId()), static_cast(index), cdata.type, cdata.key, cdata.value); } void CarlaEngineOsc::sendPluginInternalParameterValues(const CarlaPluginPtr& plugin) const noexcept { CARLA_SAFE_ASSERT_RETURN(fControlDataTCP.path != nullptr && fControlDataTCP.path[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(fControlDataTCP.target != nullptr,); CARLA_SAFE_ASSERT_RETURN(plugin != nullptr,); carla_debug("CarlaEngineOsc::sendPluginInternalParameterValues(%p)", plugin.get()); #ifdef CARLA_PROPER_CPP11_SUPPORT static_assert(PARAMETER_ACTIVE == -2 && PARAMETER_MAX == -9, "Incorrect data"); #endif double iparams[7]; for (int32_t i = 0; i < 7; ++i) iparams[i] = plugin->getInternalParameterValue(PARAMETER_ACTIVE - i); char targetPath[std::strlen(fControlDataTCP.path)+9]; std::strcpy(targetPath, fControlDataTCP.path); std::strcat(targetPath, "/iparams"); try_lo_send(fControlDataTCP.target, targetPath, "ifffffff", static_cast(plugin->getId()), iparams[0], // PARAMETER_ACTIVE iparams[1], // PARAMETER_DRYWET iparams[2], // PARAMETER_VOLUME iparams[3], // PARAMETER_BALANCE_LEFT iparams[4], // PARAMETER_BALANCE_RIGHT iparams[5], // PARAMETER_PANNING iparams[6] // PARAMETER_CTRL_CHANNEL ); } // ----------------------------------------------------------------------- void CarlaEngineOsc::sendPing() const noexcept { CARLA_SAFE_ASSERT_RETURN(fControlDataTCP.path != nullptr && fControlDataTCP.path[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(fControlDataTCP.target != nullptr,); char targetPath[std::strlen(fControlDataTCP.path)+6]; std::strcpy(targetPath, fControlDataTCP.path); std::strcat(targetPath, "/ping"); try_lo_send(fControlDataTCP.target, targetPath, ""); } void CarlaEngineOsc::sendResponse(const int messageId, const char* const error) const noexcept { CARLA_SAFE_ASSERT_RETURN(fControlDataTCP.path != nullptr && fControlDataTCP.path[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(fControlDataTCP.target != nullptr,); carla_debug("CarlaEngineOsc::sendResponse()"); char targetPath[std::strlen(fControlDataTCP.path)+6]; std::strcpy(targetPath, fControlDataTCP.path); std::strcat(targetPath, "/resp"); try_lo_send(fControlDataTCP.target, targetPath, "is", messageId, error); } void CarlaEngineOsc::sendExit() const noexcept { CARLA_SAFE_ASSERT_RETURN(fControlDataTCP.path != nullptr && fControlDataTCP.path[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(fControlDataTCP.target != nullptr,); carla_debug("CarlaEngineOsc::sendExit()"); char targetPath[std::strlen(fControlDataTCP.path)+6]; std::strcpy(targetPath, fControlDataTCP.path); std::strcat(targetPath, "/exit"); try_lo_send(fControlDataTCP.target, targetPath, ""); } // ----------------------------------------------------------------------- void CarlaEngineOsc::sendRuntimeInfo() const noexcept { CARLA_SAFE_ASSERT_RETURN(fControlDataUDP.path != nullptr && fControlDataUDP.path[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(fControlDataUDP.target != nullptr,); const EngineTimeInfo timeInfo(fEngine->getTimeInfo()); char targetPath[std::strlen(fControlDataUDP.path)+9]; std::strcpy(targetPath, fControlDataUDP.path); std::strcat(targetPath, "/runtime"); try_lo_send(fControlDataUDP.target, targetPath, "fiihiiif", static_cast(fEngine->getDSPLoad()), static_cast(fEngine->getTotalXruns()), timeInfo.playing ? 1 : 0, static_cast(timeInfo.frame), static_cast(timeInfo.bbt.bar), static_cast(timeInfo.bbt.beat), static_cast(timeInfo.bbt.tick), timeInfo.bbt.beatsPerMinute); } void CarlaEngineOsc::sendParameterValue(const uint pluginId, const uint32_t index, const float value) const noexcept { CARLA_SAFE_ASSERT_RETURN(fControlDataUDP.path != nullptr && fControlDataUDP.path[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(fControlDataUDP.target != nullptr,); char targetPath[std::strlen(fControlDataUDP.path)+7]; std::strcpy(targetPath, fControlDataUDP.path); std::strcat(targetPath, "/param"); try_lo_send(fControlDataUDP.target, targetPath, "iif", static_cast(pluginId), index, static_cast(value)); } void CarlaEngineOsc::sendPeaks(const uint pluginId, const float peaks[4]) const noexcept { CARLA_SAFE_ASSERT_RETURN(fControlDataUDP.path != nullptr && fControlDataUDP.path[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(fControlDataUDP.target != nullptr,); char targetPath[std::strlen(fControlDataUDP.path)+7]; std::strcpy(targetPath, fControlDataUDP.path); std::strcat(targetPath, "/peaks"); try_lo_send(fControlDataUDP.target, targetPath, "iffff", static_cast(pluginId), static_cast(peaks[0]), static_cast(peaks[1]), static_cast(peaks[2]), static_cast(peaks[3])); } // ----------------------------------------------------------------------- CARLA_BACKEND_END_NAMESPACE #endif // HAVE_LIBLO Carla-2.4.2/source/backend/engine/CarlaEnginePorts.cpp000066400000000000000000000441461420416754300226200ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2020 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "CarlaEnginePorts.hpp" #include "CarlaEngineUtils.hpp" #include "CarlaMathUtils.hpp" #include "CarlaMIDI.h" #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH #include "CarlaEngineGraph.hpp" #endif #include "lv2/lv2.h" CARLA_BACKEND_START_NAMESPACE // ----------------------------------------------------------------------- // Fallback data static EngineEvent kFallbackEngineEvent = { kEngineEventTypeNull, 0, 0, {{ kEngineControlEventTypeNull, 0, -1, 0.0f, true }} }; // ----------------------------------------------------------------------- // Carla Engine port (Abstract) CarlaEnginePort::CarlaEnginePort(const CarlaEngineClient& client, const bool isInputPort, const uint32_t indexOffset) noexcept : kClient(client), kIsInput(isInputPort), kIndexOffset(indexOffset) { carla_debug("CarlaEnginePort::CarlaEnginePort(%s)", bool2str(isInputPort)); } CarlaEnginePort::~CarlaEnginePort() noexcept { carla_debug("CarlaEnginePort::~CarlaEnginePort()"); } void CarlaEnginePort::setMetaData(const char*, const char*, const char*) { } // ----------------------------------------------------------------------- // Carla Engine Audio port CarlaEngineAudioPort::CarlaEngineAudioPort(const CarlaEngineClient& client, const bool isInputPort, const uint32_t indexOffset) noexcept : CarlaEnginePort(client, isInputPort, indexOffset), fBuffer(nullptr) { carla_debug("CarlaEngineAudioPort::CarlaEngineAudioPort(%s)", bool2str(isInputPort)); } CarlaEngineAudioPort::~CarlaEngineAudioPort() noexcept { carla_debug("CarlaEngineAudioPort::~CarlaEngineAudioPort()"); } void CarlaEngineAudioPort::initBuffer() noexcept { } // ----------------------------------------------------------------------- // Carla Engine CV port CarlaEngineCVPort::CarlaEngineCVPort(const CarlaEngineClient& client, const bool isInputPort, const uint32_t indexOffset) noexcept : CarlaEnginePort(client, isInputPort, indexOffset), fBuffer(nullptr), fMinimum(-1.0f), fMaximum(1.0f) { carla_debug("CarlaEngineCVPort::CarlaEngineCVPort(%s)", bool2str(isInputPort)); } CarlaEngineCVPort::~CarlaEngineCVPort() noexcept { carla_debug("CarlaEngineCVPort::~CarlaEngineCVPort()"); } void CarlaEngineCVPort::initBuffer() noexcept { } void CarlaEngineCVPort::setRange(const float min, const float max) noexcept { fMinimum = min; fMaximum = max; char strBufMin[STR_MAX]; char strBufMax[STR_MAX]; carla_zeroChars(strBufMin, STR_MAX); carla_zeroChars(strBufMax, STR_MAX); { const CarlaScopedLocale csl; std::snprintf(strBufMin, STR_MAX-1, "%.12g", static_cast(min)); std::snprintf(strBufMax, STR_MAX-1, "%.12g", static_cast(max)); } setMetaData(LV2_CORE__minimum, strBufMin, ""); setMetaData(LV2_CORE__maximum, strBufMax, ""); } // ----------------------------------------------------------------------- // Carla Engine Event port CarlaEngineEventPort::CarlaEngineEventPort(const CarlaEngineClient& client, const bool isInputPort, const uint32_t indexOffset) noexcept : CarlaEnginePort(client, isInputPort, indexOffset), kProcessMode(client.getEngine().getProccessMode()), fBuffer(nullptr) { carla_debug("CarlaEngineEventPort::CarlaEngineEventPort(%s)", bool2str(isInputPort)); if (kProcessMode == ENGINE_PROCESS_MODE_PATCHBAY) { fBuffer = new EngineEvent[kMaxEngineEventInternalCount]; carla_zeroStructs(fBuffer, kMaxEngineEventInternalCount); } } CarlaEngineEventPort::~CarlaEngineEventPort() noexcept { carla_debug("CarlaEngineEventPort::~CarlaEngineEventPort()"); if (kProcessMode == ENGINE_PROCESS_MODE_PATCHBAY) { CARLA_SAFE_ASSERT_RETURN(fBuffer != nullptr,); delete[] fBuffer; fBuffer = nullptr; } } void CarlaEngineEventPort::initBuffer() noexcept { if (kProcessMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK || kProcessMode == ENGINE_PROCESS_MODE_BRIDGE) fBuffer = kClient.getEngine().getInternalEventBuffer(kIsInput); else if (kProcessMode == ENGINE_PROCESS_MODE_PATCHBAY && ! kIsInput) carla_zeroStructs(fBuffer, kMaxEngineEventInternalCount); } uint32_t CarlaEngineEventPort::getEventCount() const noexcept { CARLA_SAFE_ASSERT_RETURN(kIsInput, 0); CARLA_SAFE_ASSERT_RETURN(fBuffer != nullptr, 0); CARLA_SAFE_ASSERT_RETURN(kProcessMode != ENGINE_PROCESS_MODE_SINGLE_CLIENT && kProcessMode != ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS, 0); uint32_t i=0; for (; i < kMaxEngineEventInternalCount; ++i) { if (fBuffer[i].type == kEngineEventTypeNull) break; } return i; } EngineEvent& CarlaEngineEventPort::getEvent(const uint32_t index) const noexcept { CARLA_SAFE_ASSERT_RETURN(kIsInput, kFallbackEngineEvent); CARLA_SAFE_ASSERT_RETURN(fBuffer != nullptr, kFallbackEngineEvent); CARLA_SAFE_ASSERT_RETURN(kProcessMode != ENGINE_PROCESS_MODE_SINGLE_CLIENT && kProcessMode != ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS, kFallbackEngineEvent); CARLA_SAFE_ASSERT_RETURN(index < kMaxEngineEventInternalCount, kFallbackEngineEvent); return fBuffer[index]; } EngineEvent& CarlaEngineEventPort::getEventUnchecked(const uint32_t index) const noexcept { return fBuffer[index]; } bool CarlaEngineEventPort::writeControlEvent(const uint32_t time, const uint8_t channel, const EngineControlEvent& ctrl) noexcept { return writeControlEvent(time, channel, ctrl.type, ctrl.param, ctrl.midiValue, ctrl.normalizedValue); } bool CarlaEngineEventPort::writeControlEvent(const uint32_t time, const uint8_t channel, const EngineControlEventType type, const uint16_t param, const int8_t midiValue, const float normalizedValue) noexcept { CARLA_SAFE_ASSERT_RETURN(! kIsInput, false); CARLA_SAFE_ASSERT_RETURN(fBuffer != nullptr, false); CARLA_SAFE_ASSERT_RETURN(kProcessMode != ENGINE_PROCESS_MODE_SINGLE_CLIENT && kProcessMode != ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS, false); CARLA_SAFE_ASSERT_RETURN(type != kEngineControlEventTypeNull, false); CARLA_SAFE_ASSERT_RETURN(channel < MAX_MIDI_CHANNELS, false); CARLA_SAFE_ASSERT(normalizedValue >= 0.0f && normalizedValue <= 1.0f); if (type == kEngineControlEventTypeParameter) { CARLA_SAFE_ASSERT(! MIDI_IS_CONTROL_BANK_SELECT(param)); } for (uint32_t i=0; i < kMaxEngineEventInternalCount; ++i) { EngineEvent& event(fBuffer[i]); if (event.type != kEngineEventTypeNull) continue; event.type = kEngineEventTypeControl; event.time = time; event.channel = channel; event.ctrl.type = type; event.ctrl.param = param; event.ctrl.midiValue = midiValue; event.ctrl.normalizedValue = carla_fixedValue(0.0f, 1.0f, normalizedValue); return true; } carla_stderr2("CarlaEngineEventPort::writeControlEvent() - buffer full"); return false; } bool CarlaEngineEventPort::writeMidiEvent(const uint32_t time, const uint8_t size, const uint8_t* const data) noexcept { return writeMidiEvent(time, uint8_t(MIDI_GET_CHANNEL_FROM_DATA(data)), size, data); } bool CarlaEngineEventPort::writeMidiEvent(const uint32_t time, const uint8_t channel, const EngineMidiEvent& midi) noexcept { CARLA_SAFE_ASSERT(midi.port == kIndexOffset); return writeMidiEvent(time, channel, midi.size, midi.data); } bool CarlaEngineEventPort::writeMidiEvent(const uint32_t time, const uint8_t channel, const uint8_t size, const uint8_t* const data) noexcept { CARLA_SAFE_ASSERT_RETURN(! kIsInput, false); CARLA_SAFE_ASSERT_RETURN(fBuffer != nullptr, false); CARLA_SAFE_ASSERT_RETURN(kProcessMode != ENGINE_PROCESS_MODE_SINGLE_CLIENT && kProcessMode != ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS, false); CARLA_SAFE_ASSERT_RETURN(channel < MAX_MIDI_CHANNELS, false); CARLA_SAFE_ASSERT_RETURN(size > 0 && size <= EngineMidiEvent::kDataSize, false); CARLA_SAFE_ASSERT_RETURN(data != nullptr, false); for (uint32_t i=0; i < kMaxEngineEventInternalCount; ++i) { EngineEvent& event(fBuffer[i]); if (event.type != kEngineEventTypeNull) continue; event.time = time; event.channel = channel; const uint8_t status(uint8_t(MIDI_GET_STATUS_FROM_DATA(data))); if (status == MIDI_STATUS_CONTROL_CHANGE) { CARLA_SAFE_ASSERT_RETURN(size >= 2, true); switch (data[1]) { case MIDI_CONTROL_BANK_SELECT: case MIDI_CONTROL_BANK_SELECT__LSB: CARLA_SAFE_ASSERT_RETURN(size >= 3, true); event.type = kEngineEventTypeControl; event.ctrl.type = kEngineControlEventTypeMidiBank; event.ctrl.param = data[2]; event.ctrl.midiValue = -1; event.ctrl.normalizedValue = 0.0f; event.ctrl.handled = true; return true; case MIDI_CONTROL_ALL_SOUND_OFF: event.type = kEngineEventTypeControl; event.ctrl.type = kEngineControlEventTypeAllSoundOff; event.ctrl.param = 0; event.ctrl.midiValue = -1; event.ctrl.normalizedValue = 0.0f; event.ctrl.handled = true; return true; case MIDI_CONTROL_ALL_NOTES_OFF: event.type = kEngineEventTypeControl; event.ctrl.type = kEngineControlEventTypeAllNotesOff; event.ctrl.param = 0; event.ctrl.midiValue = -1; event.ctrl.normalizedValue = 0.0f; event.ctrl.handled = true; return true; } } if (status == MIDI_STATUS_PROGRAM_CHANGE) { CARLA_SAFE_ASSERT_RETURN(size >= 2, true); event.type = kEngineEventTypeControl; event.ctrl.type = kEngineControlEventTypeMidiProgram; event.ctrl.param = data[1]; event.ctrl.midiValue = -1; event.ctrl.normalizedValue = 0.0f; event.ctrl.handled = true; return true; } event.type = kEngineEventTypeMidi; event.midi.size = size; if (kIndexOffset < 0xFF /* uint8_t max */) { event.midi.port = static_cast(kIndexOffset); } else { event.midi.port = 0; carla_safe_assert_uint("kIndexOffset < 0xFF", __FILE__, __LINE__, kIndexOffset); } event.midi.data[0] = status; uint8_t j=1; for (; j < size; ++j) event.midi.data[j] = data[j]; for (; j < EngineMidiEvent::kDataSize; ++j) event.midi.data[j] = 0; return true; } carla_stderr2("CarlaEngineEventPort::writeMidiEvent() - buffer full"); return false; } #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // ----------------------------------------------------------------------- // Carla Engine Meta CV port CarlaEngineCVSourcePorts::CarlaEngineCVSourcePorts() : pData(new ProtectedData()) { carla_debug("CarlaEngineCVSourcePorts::CarlaEngineCVSourcePorts()"); } CarlaEngineCVSourcePorts::~CarlaEngineCVSourcePorts() { carla_debug("CarlaEngineCVSourcePorts::~CarlaEngineCVSourcePorts()"); delete pData; } bool CarlaEngineCVSourcePorts::addCVSource(CarlaEngineCVPort* const port, const uint32_t portIndexOffset, const bool reconfigureNow) { CARLA_SAFE_ASSERT_RETURN(port != nullptr, false); CARLA_SAFE_ASSERT_RETURN(port->isInput(), false); carla_debug("CarlaEngineCVSourcePorts::addCVSource(%p, %u)", port, portIndexOffset); { const CarlaRecursiveMutexLocker crml(pData->rmutex); const CarlaEngineEventCV ecv = { port, portIndexOffset, 0.0f }; if (! pData->cvs.add(ecv)) return false; if (reconfigureNow && pData->graph != nullptr && pData->plugin.get() != nullptr) pData->graph->reconfigureForCV(pData->plugin, static_cast(pData->cvs.size()-1), true); } return true; } bool CarlaEngineCVSourcePorts::removeCVSource(const uint32_t portIndexOffset) { carla_debug("CarlaEngineCVSourcePorts::removeCVSource(%u)", portIndexOffset); { const CarlaRecursiveMutexLocker crml(pData->rmutex); for (int i = pData->cvs.size(); --i >= 0;) { const CarlaEngineEventCV& ecv(pData->cvs[i]); if (ecv.indexOffset == portIndexOffset) { delete ecv.cvPort; pData->cvs.remove(i); if (pData->graph != nullptr && pData->plugin.get() != nullptr) pData->graph->reconfigureForCV(pData->plugin, static_cast(i), false); carla_stdout("found cv source to remove %u", portIndexOffset); return true; } } } carla_stdout("did NOT found cv source to remove %u", portIndexOffset); return false; } void CarlaEngineCVSourcePorts::initPortBuffers(const float* const* const buffers, const uint32_t frames, const bool sampleAccurate, CarlaEngineEventPort* const eventPort) { CARLA_SAFE_ASSERT_RETURN(buffers != nullptr,); CARLA_SAFE_ASSERT_RETURN(eventPort != nullptr,); const CarlaRecursiveMutexTryLocker crmtl(pData->rmutex); if (! crmtl.wasLocked()) return; const int numCVs = pData->cvs.size(); if (numCVs == 0) return; EngineEvent* const buffer = eventPort->fBuffer; CARLA_SAFE_ASSERT_RETURN(buffer != nullptr,); uint32_t eventCount = 0; float v, min, max; for (; eventCount < kMaxEngineEventInternalCount; ++eventCount) { if (buffer[eventCount].type == kEngineEventTypeNull) break; } if (eventCount == kMaxEngineEventInternalCount) return; // TODO be sample accurate if (true || ! sampleAccurate) { const uint32_t eventFrame = eventCount == 0 ? 0 : std::min(buffer[eventCount-1].time, frames-1U); for (int i = 0; i < numCVs && eventCount < kMaxEngineEventInternalCount; ++i) { CarlaEngineEventCV& ecv(pData->cvs.getReference(i)); CARLA_SAFE_ASSERT_CONTINUE(ecv.cvPort != nullptr); CARLA_SAFE_ASSERT_CONTINUE(buffers[i] != nullptr); float previousValue = ecv.previousValue; ecv.cvPort->getRange(min, max); v = buffers[i][eventFrame]; if (carla_isNotEqual(v, previousValue)) { previousValue = v; EngineEvent& event(buffer[eventCount++]); event.type = kEngineEventTypeControl; event.time = eventFrame; event.channel = kEngineEventNonMidiChannel; event.ctrl.type = kEngineControlEventTypeParameter; event.ctrl.param = static_cast(ecv.indexOffset); event.ctrl.midiValue = -1; event.ctrl.normalizedValue = carla_fixedValue(0.0f, 1.0f, (v - min) / (max - min)); } ecv.previousValue = previousValue; } } } bool CarlaEngineCVSourcePorts::setCVSourceRange(const uint32_t portIndexOffset, const float minimum, const float maximum) { const CarlaRecursiveMutexLocker crml(pData->rmutex); for (int i = pData->cvs.size(); --i >= 0;) { CarlaEngineEventCV& ecv(pData->cvs.getReference(i)); if (ecv.indexOffset == portIndexOffset) { CARLA_SAFE_ASSERT_RETURN(ecv.cvPort != nullptr, false); ecv.cvPort->setRange(minimum, maximum); return true; } } return false; } void CarlaEngineCVSourcePorts::cleanup() { pData->cleanup(); } /* void CarlaEngineCVSourcePorts::mixWithCvBuffer(const float* const buffer, const uint32_t frames, const uint32_t indexOffset) noexcept { for (LinkedList::Itenerator it = pData->cvs.begin2(); it.valid(); it.next()) { CarlaEngineEventCV& ecv(it.getValue(kFallbackEngineEventCV)); if (ecv.indexOffset != indexOffset) continue; CARLA_SAFE_ASSERT_RETURN(ecv.cvPort != nullptr,); float previousValue = ecv.previousValue; ecv.cvPort->getRange(min, max); for (uint32_t i=0; ibuffer[eventIndex++]); event.type = kEngineEventTypeControl; event.time = i; event.channel = kEngineEventNonMidiChannel; event.ctrl.type = kEngineControlEventTypeParameter; event.ctrl.param = static_cast(indexOffset); event.ctrl.value = carla_fixedValue(0.0f, 1.0f, (v - min) / (max - min)); } } ecv.previousValue = previousValue; break; } } */ #endif // ----------------------------------------------------------------------- CARLA_BACKEND_END_NAMESPACE Carla-2.4.2/source/backend/engine/CarlaEnginePorts.hpp000066400000000000000000000050421420416754300226150ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2020 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #ifndef CARLA_ENGINE_PORTS_HPP_INCLUDED #define CARLA_ENGINE_PORTS_HPP_INCLUDED #include "CarlaEngine.hpp" #include "CarlaEngineInternal.hpp" CARLA_BACKEND_START_NAMESPACE // ----------------------------------------------------------------------- // Carla Engine Meta CV Port Protected Data struct CarlaEngineEventCV { CarlaEngineCVPort* cvPort; uint32_t indexOffset; float previousValue; }; struct CarlaEngineCVSourcePorts::ProtectedData { CarlaRecursiveMutex rmutex; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH PatchbayGraph* graph; CarlaPluginPtr plugin; #endif water::Array cvs; ProtectedData() noexcept : rmutex(), #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH graph(nullptr), plugin(nullptr), #endif cvs() {} ~ProtectedData() { CARLA_SAFE_ASSERT(cvs.size() == 0); } void cleanup() { const CarlaRecursiveMutexLocker crml(rmutex); for (int i = cvs.size(); --i >= 0;) delete cvs[i].cvPort; cvs.clear(); } CARLA_DECLARE_NON_COPY_STRUCT(ProtectedData) }; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // ----------------------------------------------------------------------- // Carla Engine Meta CV Port class CarlaEngineCVSourcePortsForStandalone : public CarlaEngineCVSourcePorts { public: CarlaEngineCVSourcePortsForStandalone() : CarlaEngineCVSourcePorts() {} ~CarlaEngineCVSourcePortsForStandalone() override {} inline void resetGraphAndPlugin() noexcept { pData->graph = nullptr; pData->plugin.reset(); } inline void setGraphAndPlugin(PatchbayGraph* const graph, const CarlaPluginPtr plugin) noexcept { pData->graph = graph; pData->plugin = plugin; } }; #endif // ----------------------------------------------------------------------- CARLA_BACKEND_END_NAMESPACE #endif // CARLA_ENGINE_PORTS_HPP_INCLUDED Carla-2.4.2/source/backend/engine/CarlaEngineRtAudio.cpp000066400000000000000000001210611420416754300230500ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2022 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "CarlaEngineGraph.hpp" #include "CarlaEngineInit.hpp" #include "CarlaEngineInternal.hpp" #include "CarlaBackendUtils.hpp" #include "CarlaMathUtils.hpp" #include "CarlaStringList.hpp" #include "RtLinkedList.hpp" #include "jackbridge/JackBridge.hpp" #if defined(__clang__) # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wconversion" # pragma clang diagnostic ignored "-Wdeprecated-copy" # pragma clang diagnostic ignored "-Weffc++" # pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" #elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wconversion" # pragma GCC diagnostic ignored "-Weffc++" # pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant" #endif #include "rtaudio/RtAudio.h" #include "rtmidi/RtMidi.h" #if defined(__clang__) # pragma clang diagnostic pop #elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) # pragma GCC diagnostic pop #endif CARLA_BACKEND_START_NAMESPACE // ------------------------------------------------------------------------------------------------------------------- // Global static data static CharStringListPtr gDeviceNames; static std::vector gRtAudioApis; // ------------------------------------------------------------------------------------------------------------------- static void initRtAudioAPIsIfNeeded() { static bool needsInit = true; if (! needsInit) return; needsInit = false; // get APIs in a local var, and pass wanted ones into gRtAudioApis std::vector apis; RtAudio::getCompiledApi(apis); for (std::vector::const_iterator it = apis.begin(), end=apis.end(); it != end; ++it) { const RtAudio::Api& api(*it); if (api == RtAudio::UNIX_JACK) { #if defined(CARLA_OS_LINUX) || defined(CARLA_OS_MAC) || defined(CARLA_OS_WIN) if ( ! jackbridge_is_ok()) continue; #else /* NOTE * RtMidi doesn't have a native MIDI backend for these OSes, * Using RtAudio JACK funcitonality is only useful when we need to access the native MIDI APIs. * (JACK audio + ALSA MIDI, or JACK audio + CoreMidi, or JACK audio + Windows MIDI) * Because RtMidi has no native MIDI support outside of win/mac/linux, we skip these RtAudio APIs. * Those OSes can use Carla's JACK support directly, which is much better than RtAudio classes. */ continue; #endif } gRtAudioApis.push_back(api); } } static const char* getRtAudioApiName(const RtAudio::Api api) noexcept { switch (api) { case RtAudio::UNSPECIFIED: return "Unspecified"; case RtAudio::LINUX_ALSA: return "ALSA"; case RtAudio::LINUX_OSS: return "OSS"; case RtAudio::UNIX_PULSE: return "PulseAudio"; case RtAudio::UNIX_JACK: #if defined(CARLA_OS_LINUX) && defined(__LINUX_ALSA__) return "JACK with ALSA-MIDI"; #elif defined(CARLA_OS_MAC) return "JACK with CoreMidi"; #elif defined(CARLA_OS_WIN) return "JACK with WinMM"; #else return "JACK (RtAudio)"; #endif case RtAudio::MACOSX_CORE: return "CoreAudio"; case RtAudio::WINDOWS_ASIO: return "ASIO"; case RtAudio::WINDOWS_DS: return "DirectSound"; case RtAudio::WINDOWS_WASAPI: return "WASAPI"; case RtAudio::RTAUDIO_DUMMY: return "Dummy"; } carla_stderr("CarlaBackend::getRtAudioApiName(%i) - invalid API", api); return nullptr; } static RtMidi::Api getMatchedAudioMidiAPI(const RtAudio::Api rtApi) noexcept { switch (rtApi) { case RtAudio::UNSPECIFIED: return RtMidi::UNSPECIFIED; case RtAudio::LINUX_ALSA: case RtAudio::LINUX_OSS: return RtMidi::LINUX_ALSA; case RtAudio::UNIX_PULSE: case RtAudio::UNIX_JACK: #if defined(CARLA_OS_LINUX) && defined(__LINUX_ALSA__) return RtMidi::LINUX_ALSA; #elif defined(CARLA_OS_MAC) return RtMidi::MACOSX_CORE; #elif defined(CARLA_OS_WIN) return RtMidi::WINDOWS_MM; #else return RtMidi::RTMIDI_DUMMY; #endif case RtAudio::MACOSX_CORE: return RtMidi::MACOSX_CORE; case RtAudio::WINDOWS_ASIO: case RtAudio::WINDOWS_DS: case RtAudio::WINDOWS_WASAPI: return RtMidi::WINDOWS_MM; case RtAudio::RTAUDIO_DUMMY: return RtMidi::RTMIDI_DUMMY; } return RtMidi::UNSPECIFIED; } // ------------------------------------------------------------------------------------------------------------------- // RtAudio Engine class CarlaEngineRtAudio : public CarlaEngine { public: CarlaEngineRtAudio(const RtAudio::Api api) : CarlaEngine(), fAudio(api), fAudioInterleaved(false), fAudioInCount(0), fAudioOutCount(0), fLastEventTime(0), fDeviceName(), fAudioIntBufIn(nullptr), fAudioIntBufOut(nullptr), fMidiIns(), fMidiInEvents(), fMidiOuts(), fMidiOutMutex(), fMidiOutVector(EngineMidiEvent::kDataSize) { carla_debug("CarlaEngineRtAudio::CarlaEngineRtAudio(%i)", api); // just to make sure pData->options.transportMode = ENGINE_TRANSPORT_MODE_INTERNAL; } ~CarlaEngineRtAudio() override { CARLA_SAFE_ASSERT(fAudioInCount == 0); CARLA_SAFE_ASSERT(fAudioOutCount == 0); CARLA_SAFE_ASSERT(fLastEventTime == 0); carla_debug("CarlaEngineRtAudio::~CarlaEngineRtAudio()"); } // ------------------------------------- bool init(const char* const clientName) override { CARLA_SAFE_ASSERT_RETURN(fAudioInCount == 0, false); CARLA_SAFE_ASSERT_RETURN(fAudioOutCount == 0, false); CARLA_SAFE_ASSERT_RETURN(fLastEventTime == 0, false); CARLA_SAFE_ASSERT_RETURN(clientName != nullptr && clientName[0] != '\0', false); carla_debug("CarlaEngineRtAudio::init(\"%s\")", clientName); if (pData->options.processMode != ENGINE_PROCESS_MODE_CONTINUOUS_RACK && pData->options.processMode != ENGINE_PROCESS_MODE_PATCHBAY) { setLastError("Invalid process mode"); return false; } const bool isDummy(fAudio.getCurrentApi() == RtAudio::RtAudio::RTAUDIO_DUMMY); bool deviceSet = false; RtAudio::StreamParameters iParams, oParams; if (isDummy) { if (pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK) { setLastError("Cannot use dummy driver in Rack mode"); return false; } fDeviceName = "Dummy"; } else { const uint devCount(fAudio.getDeviceCount()); if (devCount == 0) { setLastError("No audio devices available for this driver"); return false; } if (pData->options.audioDevice != nullptr && pData->options.audioDevice[0] != '\0') { for (uint i=0; i < devCount; ++i) { RtAudio::DeviceInfo devInfo(fAudio.getDeviceInfo(i)); if (devInfo.probed && devInfo.outputChannels > 0 && devInfo.name == pData->options.audioDevice) { deviceSet = true; fDeviceName = devInfo.name.c_str(); iParams.deviceId = i; oParams.deviceId = i; iParams.nChannels = devInfo.inputChannels; oParams.nChannels = devInfo.outputChannels; break; } } } if (! deviceSet) { iParams.deviceId = fAudio.getDefaultInputDevice(); oParams.deviceId = fAudio.getDefaultOutputDevice(); iParams.nChannels = fAudio.getDeviceInfo(iParams.deviceId).inputChannels; oParams.nChannels = fAudio.getDeviceInfo(oParams.deviceId).outputChannels; carla_stdout("No device set, using %i inputs and %i outputs", iParams.nChannels, oParams.nChannels); } if (oParams.nChannels == 0 && pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK) { setLastError("Current audio setup has no outputs, cannot continue"); return false; } iParams.nChannels = carla_fixedValue(0U, 128U, iParams.nChannels); oParams.nChannels = carla_fixedValue(0U, 128U, oParams.nChannels); fAudioInterleaved = fAudio.getCurrentApi() == RtAudio::UNIX_PULSE; } RtAudio::StreamOptions rtOptions; rtOptions.flags = RTAUDIO_MINIMIZE_LATENCY | RTAUDIO_SCHEDULE_REALTIME; rtOptions.numberOfBuffers = pData->options.audioTripleBuffer ? 3 : 2; rtOptions.streamName = clientName; rtOptions.priority = 85; if (fAudio.getCurrentApi() == RtAudio::LINUX_ALSA && ! deviceSet) rtOptions.flags |= RTAUDIO_ALSA_USE_DEFAULT; if (! fAudioInterleaved) rtOptions.flags |= RTAUDIO_NONINTERLEAVED; uint bufferFrames = pData->options.audioBufferSize; try { fAudio.openStream(oParams.nChannels > 0 ? &oParams : nullptr, iParams.nChannels > 0 ? &iParams : nullptr, RTAUDIO_FLOAT32, pData->options.audioSampleRate, &bufferFrames, carla_rtaudio_process_callback, this, &rtOptions, carla_rtaudio_buffer_size_callback); } catch (const RtAudioError& e) { setLastError(e.what()); return false; } if (! pData->init(clientName)) { close(); setLastError("Failed to init internal data"); return false; } pData->bufferSize = bufferFrames; pData->sampleRate = isDummy ? 44100.0 : fAudio.getStreamSampleRate(); pData->initTime(pData->options.transportExtra); fAudioInCount = iParams.nChannels; fAudioOutCount = oParams.nChannels; fLastEventTime = 0; if (fAudioInCount > 0) fAudioIntBufIn = new float[fAudioInCount*bufferFrames]; if (fAudioOutCount > 0) fAudioIntBufOut = new float[fAudioOutCount*bufferFrames]; pData->graph.create(fAudioInCount, fAudioOutCount, 0, 0); try { fAudio.startStream(); } catch (const RtAudioError& e) { close(); setLastError(e.what()); return false; } patchbayRefresh(true, false, false); if (pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY) refreshExternalGraphPorts(pData->graph.getPatchbayGraph(), false, false); callback(true, true, ENGINE_CALLBACK_ENGINE_STARTED, 0, pData->options.processMode, pData->options.transportMode, static_cast(pData->bufferSize), static_cast(pData->sampleRate), getCurrentDriverName()); return true; } bool close() override { carla_debug("CarlaEngineRtAudio::close()"); bool hasError = false; // stop stream first if (fAudio.isStreamOpen() && fAudio.isStreamRunning()) { try { fAudio.stopStream(); } catch (const RtAudioError& e) { setLastError(e.what()); hasError = true; } } // clear engine data CarlaEngine::close(); pData->graph.destroy(); for (LinkedList::Itenerator it = fMidiIns.begin2(); it.valid(); it.next()) { static MidiInPort fallback = { nullptr, { '\0' } }; MidiInPort& inPort(it.getValue(fallback)); CARLA_SAFE_ASSERT_CONTINUE(inPort.port != nullptr); inPort.port->cancelCallback(); inPort.port->closePort(); delete inPort.port; } fMidiIns.clear(); fMidiInEvents.clear(); fMidiOutMutex.lock(); for (LinkedList::Itenerator it = fMidiOuts.begin2(); it.valid(); it.next()) { static MidiOutPort fallback = { nullptr, { '\0' } }; MidiOutPort& outPort(it.getValue(fallback)); CARLA_SAFE_ASSERT_CONTINUE(outPort.port != nullptr); outPort.port->closePort(); delete outPort.port; } fMidiOuts.clear(); fMidiOutMutex.unlock(); fAudioInCount = 0; fAudioOutCount = 0; fLastEventTime = 0; fDeviceName.clear(); if (fAudioIntBufIn != nullptr) { delete[] fAudioIntBufIn; fAudioIntBufIn = nullptr; } if (fAudioIntBufOut != nullptr) { delete[] fAudioIntBufOut; fAudioIntBufOut = nullptr; } // close stream if (fAudio.isStreamOpen()) fAudio.closeStream(); return !hasError; } bool isRunning() const noexcept override { return fAudio.isStreamOpen(); } bool isOffline() const noexcept override { return false; } EngineType getType() const noexcept override { return kEngineTypeRtAudio; } const char* getCurrentDriverName() const noexcept override { return CARLA_BACKEND_NAMESPACE::getRtAudioApiName(fAudio.getCurrentApi()); } // ------------------------------------------------------------------- // Patchbay template bool refreshExternalGraphPorts(Graph* const graph, const bool sendHost, const bool sendOSC) { CARLA_SAFE_ASSERT_RETURN(graph != nullptr, false); char strBuf[STR_MAX+1U]; strBuf[STR_MAX] = '\0'; ExternalGraph& extGraph(graph->extGraph); // --------------------------------------------------------------- // clear last ports extGraph.clear(); // --------------------------------------------------------------- // fill in new ones // Audio In for (uint i=0; i < fAudioInCount; ++i) { std::snprintf(strBuf, STR_MAX, "capture_%i", i+1); PortNameToId portNameToId; portNameToId.setData(kExternalGraphGroupAudioIn, i+1, strBuf, ""); extGraph.audioPorts.ins.append(portNameToId); } // Audio Out for (uint i=0; i < fAudioOutCount; ++i) { std::snprintf(strBuf, STR_MAX, "playback_%i", i+1); PortNameToId portNameToId; portNameToId.setData(kExternalGraphGroupAudioOut, i+1, strBuf, ""); extGraph.audioPorts.outs.append(portNameToId); } // MIDI In try { RtMidiIn midiIn(getMatchedAudioMidiAPI(fAudio.getCurrentApi()), "carla-discovery-in"); for (uint i=0, count = midiIn.getPortCount(); i < count; ++i) { PortNameToId portNameToId; portNameToId.setData(kExternalGraphGroupMidiIn, i+1, midiIn.getPortName(i).c_str(), ""); extGraph.midiPorts.ins.append(portNameToId); } } CARLA_SAFE_EXCEPTION("RtMidiIn discovery"); // MIDI Out try { RtMidiOut midiOut(getMatchedAudioMidiAPI(fAudio.getCurrentApi()), "carla-discovery-out"); for (uint i=0, count = midiOut.getPortCount(); i < count; ++i) { PortNameToId portNameToId; portNameToId.setData(kExternalGraphGroupMidiOut, i+1, midiOut.getPortName(i).c_str(), ""); extGraph.midiPorts.outs.append(portNameToId); } } CARLA_SAFE_EXCEPTION("RtMidiOut discovery"); // --------------------------------------------------------------- // now refresh if (sendHost || sendOSC) graph->refresh(sendHost, sendOSC, true, fDeviceName.buffer()); // --------------------------------------------------------------- // add midi connections for (LinkedList::Itenerator it=fMidiIns.begin2(); it.valid(); it.next()) { static const MidiInPort fallback = { nullptr, { '\0' } }; const MidiInPort& inPort(it.getValue(fallback)); CARLA_SAFE_ASSERT_CONTINUE(inPort.port != nullptr); const uint portId(extGraph.midiPorts.getPortId(true, inPort.name)); CARLA_SAFE_ASSERT_CONTINUE(portId < extGraph.midiPorts.ins.count()); ConnectionToId connectionToId; connectionToId.setData(++(extGraph.connections.lastId), kExternalGraphGroupMidiIn, portId, kExternalGraphGroupCarla, kExternalGraphCarlaPortMidiIn); std::snprintf(strBuf, STR_MAX, "%i:%i:%i:%i", connectionToId.groupA, connectionToId.portA, connectionToId.groupB, connectionToId.portB); extGraph.connections.list.append(connectionToId); callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, connectionToId.id, 0, 0, 0, 0.0f, strBuf); } fMidiOutMutex.lock(); for (LinkedList::Itenerator it=fMidiOuts.begin2(); it.valid(); it.next()) { static const MidiOutPort fallback = { nullptr, { '\0' } }; const MidiOutPort& outPort(it.getValue(fallback)); CARLA_SAFE_ASSERT_CONTINUE(outPort.port != nullptr); const uint portId(extGraph.midiPorts.getPortId(false, outPort.name)); CARLA_SAFE_ASSERT_CONTINUE(portId < extGraph.midiPorts.outs.count()); ConnectionToId connectionToId; connectionToId.setData(++(extGraph.connections.lastId), kExternalGraphGroupCarla, kExternalGraphCarlaPortMidiOut, kExternalGraphGroupMidiOut, portId); std::snprintf(strBuf, STR_MAX, "%i:%i:%i:%i", connectionToId.groupA, connectionToId.portA, connectionToId.groupB, connectionToId.portB); extGraph.connections.list.append(connectionToId); callback(sendHost, sendOSC, ENGINE_CALLBACK_PATCHBAY_CONNECTION_ADDED, connectionToId.id, 0, 0, 0, 0.0f, strBuf); } fMidiOutMutex.unlock(); return true; } bool patchbayRefresh(const bool sendHost, const bool sendOSC, const bool external) override { CARLA_SAFE_ASSERT_RETURN(pData->graph.isReady(), false); if (pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK) return refreshExternalGraphPorts(pData->graph.getRackGraph(), sendHost, sendOSC); if (sendHost) pData->graph.setUsingExternalHost(external); if (sendOSC) pData->graph.setUsingExternalOSC(external); if (external) return refreshExternalGraphPorts(pData->graph.getPatchbayGraph(), sendHost, sendOSC); return CarlaEngine::patchbayRefresh(sendHost, sendOSC, false); } // ------------------------------------------------------------------- protected: void handleAudioProcessCallback(void* outputBuffer, void* inputBuffer, uint nframes, double streamTime, RtAudioStreamStatus status) { const PendingRtEventsRunner prt(this, nframes, true); if (status & RTAUDIO_INPUT_OVERFLOW) ++pData->xruns; if (status & RTAUDIO_OUTPUT_UNDERFLOW) ++pData->xruns; // get buffers from RtAudio const float* const insPtr = (const float*)inputBuffer; /* */ float* const outsPtr = (float*)outputBuffer; // assert rtaudio buffers CARLA_SAFE_ASSERT_RETURN(outputBuffer != nullptr,); // set rtaudio buffers as non-interleaved const float* inBuf[fAudioInCount]; /* */ float* outBuf[fAudioOutCount]; if (fAudioInterleaved) { // FIXME - this looks completely wrong! float* inBuf2[fAudioInCount]; for (uint i=0, count=fAudioInCount; ievents.in, kMaxEngineEventInternalCount); carla_zeroStructs(pData->events.out, kMaxEngineEventInternalCount); if (fMidiInEvents.mutex.tryLock()) { uint32_t engineEventIndex = 0; fMidiInEvents.splice(); for (LinkedList::Itenerator it = fMidiInEvents.data.begin2(); it.valid(); it.next()) { static const RtMidiEvent fallback = { 0, 0, { 0 } }; const RtMidiEvent& midiEvent(it.getValue(fallback)); CARLA_SAFE_ASSERT_CONTINUE(midiEvent.size > 0); EngineEvent& engineEvent(pData->events.in[engineEventIndex++]); if (midiEvent.time < pData->timeInfo.frame) { engineEvent.time = 0; } else if (midiEvent.time >= pData->timeInfo.frame + nframes) { carla_stderr("MIDI Event in the future!, %i vs %i", engineEvent.time, pData->timeInfo.frame); engineEvent.time = static_cast(pData->timeInfo.frame) + nframes - 1; } else engineEvent.time = static_cast(midiEvent.time - pData->timeInfo.frame); engineEvent.fillFromMidiData(midiEvent.size, midiEvent.data, 0); if (engineEventIndex >= kMaxEngineEventInternalCount) break; } fMidiInEvents.data.clear(); fMidiInEvents.mutex.unlock(); } pData->graph.process(pData, inBuf, outBuf, nframes); fMidiOutMutex.lock(); if (fMidiOuts.count() > 0) { uint8_t size = 0; uint8_t mdata[3] = { 0, 0, 0 }; uint8_t mdataTmp[EngineMidiEvent::kDataSize]; const uint8_t* mdataPtr; for (ushort i=0; i < kMaxEngineEventInternalCount; ++i) { const EngineEvent& engineEvent(pData->events.out[i]); /**/ if (engineEvent.type == kEngineEventTypeNull) { break; } else if (engineEvent.type == kEngineEventTypeControl) { const EngineControlEvent& ctrlEvent(engineEvent.ctrl); size = ctrlEvent.convertToMidiData(engineEvent.channel, mdata); mdataPtr = mdata; } else if (engineEvent.type == kEngineEventTypeMidi) { const EngineMidiEvent& midiEvent(engineEvent.midi); size = midiEvent.size; CARLA_SAFE_ASSERT_CONTINUE(size > 0); if (size > EngineMidiEvent::kDataSize) { CARLA_SAFE_ASSERT_CONTINUE(midiEvent.dataExt != nullptr); mdataPtr = midiEvent.dataExt; } else { // set first byte mdataTmp[0] = static_cast(midiEvent.data[0] | (engineEvent.channel & MIDI_CHANNEL_BIT)); // copy rest carla_copy(mdataTmp+1, midiEvent.data+1, size-1U); // done mdataPtr = mdataTmp; } } else { continue; } if (size > 0) { fMidiOutVector.assign(mdataPtr, mdataPtr + size); for (LinkedList::Itenerator it=fMidiOuts.begin2(); it.valid(); it.next()) { static MidiOutPort fallback = { nullptr, { '\0' } }; MidiOutPort& outPort(it.getValue(fallback)); CARLA_SAFE_ASSERT_CONTINUE(outPort.port != nullptr); outPort.port->sendMessage(&fMidiOutVector); } } } } fMidiOutMutex.unlock(); if (fAudioInterleaved) { for (uint i=0; i < nframes; ++i) for (uint j=0; jbufferSize, newBufferSize); if (pData->bufferSize == newBufferSize) return; if (fAudioInCount > 0) { delete[] fAudioIntBufIn; fAudioIntBufIn = new float[fAudioInCount*newBufferSize]; } if (fAudioOutCount > 0) { delete[] fAudioIntBufOut; fAudioIntBufOut = new float[fAudioOutCount*newBufferSize]; } pData->bufferSize = newBufferSize; bufferSizeChanged(newBufferSize); } void handleMidiCallback(double timeStamp, std::vector* const message) { const size_t messageSize(message->size()); if (messageSize == 0 || messageSize > EngineMidiEvent::kDataSize) return; timeStamp /= 2; if (timeStamp > 0.95) timeStamp = 0.95; else if (timeStamp < 0.0) timeStamp = 0.0; RtMidiEvent midiEvent; midiEvent.time = pData->timeInfo.frame + uint64_t(timeStamp * (double)pData->bufferSize); if (midiEvent.time < fLastEventTime) midiEvent.time = fLastEventTime; else fLastEventTime = midiEvent.time; midiEvent.size = static_cast(messageSize); size_t i=0; for (; i < messageSize; ++i) midiEvent.data[i] = message->at(i); for (; i < EngineMidiEvent::kDataSize; ++i) midiEvent.data[i] = 0; fMidiInEvents.append(midiEvent); } // ------------------------------------------------------------------- bool connectExternalGraphPort(const uint connectionType, const uint portId, const char* const portName) override { CARLA_SAFE_ASSERT_RETURN(connectionType != 0 || (portName != nullptr && portName[0] != '\0'), false); carla_debug("CarlaEngineRtAudio::connectExternalGraphPort(%u, %u, \"%s\")", connectionType, portId, portName); switch (connectionType) { case kExternalGraphConnectionAudioIn1: case kExternalGraphConnectionAudioIn2: case kExternalGraphConnectionAudioOut1: case kExternalGraphConnectionAudioOut2: return CarlaEngine::connectExternalGraphPort(connectionType, portId, portName); case kExternalGraphConnectionMidiInput: { CarlaString newRtMidiPortName; newRtMidiPortName += getName(); newRtMidiPortName += ":"; newRtMidiPortName += portName; RtMidiIn* rtMidiIn; try { rtMidiIn = new RtMidiIn(getMatchedAudioMidiAPI(fAudio.getCurrentApi()), newRtMidiPortName.buffer(), 512); } CARLA_SAFE_EXCEPTION_RETURN("new RtMidiIn", false); rtMidiIn->ignoreTypes(); rtMidiIn->setCallback(carla_rtmidi_callback, this); bool found = false; uint rtMidiPortIndex; for (uint i=0, count=rtMidiIn->getPortCount(); i < count; ++i) { if (rtMidiIn->getPortName(i) == portName) { found = true; rtMidiPortIndex = i; break; } } if (! found) { delete rtMidiIn; return false; } try { rtMidiIn->openPort(rtMidiPortIndex, portName); } catch(...) { delete rtMidiIn; return false; }; MidiInPort midiPort; midiPort.port = rtMidiIn; std::strncpy(midiPort.name, portName, STR_MAX); midiPort.name[STR_MAX] = '\0'; fMidiIns.append(midiPort); return true; } break; case kExternalGraphConnectionMidiOutput: { CarlaString newRtMidiPortName; newRtMidiPortName += getName(); newRtMidiPortName += ":"; newRtMidiPortName += portName; RtMidiOut* rtMidiOut; try { rtMidiOut = new RtMidiOut(getMatchedAudioMidiAPI(fAudio.getCurrentApi()), newRtMidiPortName.buffer()); } CARLA_SAFE_EXCEPTION_RETURN("new RtMidiOut", false); bool found = false; uint rtMidiPortIndex; for (uint i=0, count=rtMidiOut->getPortCount(); i < count; ++i) { if (rtMidiOut->getPortName(i) == portName) { found = true; rtMidiPortIndex = i; break; } } if (! found) { delete rtMidiOut; return false; } try { rtMidiOut->openPort(rtMidiPortIndex, portName); } catch(...) { delete rtMidiOut; return false; }; MidiOutPort midiPort; midiPort.port = rtMidiOut; std::strncpy(midiPort.name, portName, STR_MAX); midiPort.name[STR_MAX] = '\0'; const CarlaMutexLocker cml(fMidiOutMutex); fMidiOuts.append(midiPort); return true; } break; } return false; } bool disconnectExternalGraphPort(const uint connectionType, const uint portId, const char* const portName) override { CARLA_SAFE_ASSERT_RETURN(connectionType != 0 || (portName != nullptr && portName[0] != '\0'), false); carla_debug("CarlaEngineRtAudio::disconnectExternalGraphPort(%u, %u, \"%s\")", connectionType, portId, portName); switch (connectionType) { case kExternalGraphConnectionAudioIn1: case kExternalGraphConnectionAudioIn2: case kExternalGraphConnectionAudioOut1: case kExternalGraphConnectionAudioOut2: return CarlaEngine::disconnectExternalGraphPort(connectionType, portId, portName); case kExternalGraphConnectionMidiInput: for (LinkedList::Itenerator it=fMidiIns.begin2(); it.valid(); it.next()) { static MidiInPort fallback = { nullptr, { '\0' } }; MidiInPort& inPort(it.getValue(fallback)); CARLA_SAFE_ASSERT_CONTINUE(inPort.port != nullptr); if (std::strncmp(inPort.name, portName, STR_MAX) != 0) continue; inPort.port->cancelCallback(); inPort.port->closePort(); delete inPort.port; fMidiIns.remove(it); return true; } break; case kExternalGraphConnectionMidiOutput: { const CarlaMutexLocker cml(fMidiOutMutex); for (LinkedList::Itenerator it=fMidiOuts.begin2(); it.valid(); it.next()) { static MidiOutPort fallback = { nullptr, { '\0' } }; MidiOutPort& outPort(it.getValue(fallback)); CARLA_SAFE_ASSERT_CONTINUE(outPort.port != nullptr); if (std::strncmp(outPort.name, portName, STR_MAX) != 0) continue; outPort.port->closePort(); delete outPort.port; fMidiOuts.remove(it); return true; } } break; } return false; } // ------------------------------------------------------------------- private: RtAudio fAudio; // useful info bool fAudioInterleaved; uint fAudioInCount; uint fAudioOutCount; uint64_t fLastEventTime; // current device name CarlaString fDeviceName; // temp buffer for interleaved audio float* fAudioIntBufIn; float* fAudioIntBufOut; struct MidiInPort { RtMidiIn* port; char name[STR_MAX+1]; }; struct MidiOutPort { RtMidiOut* port; char name[STR_MAX+1]; }; struct RtMidiEvent { uint64_t time; // needs to compare to internal time uint8_t size; uint8_t data[EngineMidiEvent::kDataSize]; }; struct RtMidiEvents { CarlaMutex mutex; RtLinkedList::Pool dataPool; RtLinkedList data; RtLinkedList dataPending; RtMidiEvents() : mutex(), dataPool("RtMidiEvents", 512, 512), data(dataPool), dataPending(dataPool) {} ~RtMidiEvents() { clear(); } void append(const RtMidiEvent& event) { mutex.lock(); dataPending.append(event); mutex.unlock(); } void clear() { mutex.lock(); data.clear(); dataPending.clear(); mutex.unlock(); } void splice() { if (dataPending.count() > 0) dataPending.moveTo(data, true /* append */); } }; LinkedList fMidiIns; RtMidiEvents fMidiInEvents; LinkedList fMidiOuts; CarlaMutex fMidiOutMutex; std::vector fMidiOutVector; #define handlePtr ((CarlaEngineRtAudio*)userData) static int carla_rtaudio_process_callback(void* outputBuffer, void* inputBuffer, uint nframes, double streamTime, RtAudioStreamStatus status, void* userData) { handlePtr->handleAudioProcessCallback(outputBuffer, inputBuffer, nframes, streamTime, status); return 0; } static bool carla_rtaudio_buffer_size_callback(unsigned int bufferSize, void* userData) { handlePtr->handleBufferSizeCallback(bufferSize); return true; } static void carla_rtmidi_callback(double timeStamp, std::vector* message, void* userData) { handlePtr->handleMidiCallback(timeStamp, message); } #undef handlePtr CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaEngineRtAudio) }; // ----------------------------------------- namespace EngineInit { CarlaEngine* newRtAudio(const AudioApi api) { initRtAudioAPIsIfNeeded(); RtAudio::Api rtApi = RtAudio::UNSPECIFIED; switch (api) { case AUDIO_API_NULL: rtApi = RtAudio::RTAUDIO_DUMMY; break; case AUDIO_API_JACK: rtApi = RtAudio::UNIX_JACK; break; case AUDIO_API_OSS: rtApi = RtAudio::LINUX_OSS; break; case AUDIO_API_ALSA: rtApi = RtAudio::LINUX_ALSA; break; case AUDIO_API_PULSEAUDIO: rtApi = RtAudio::UNIX_PULSE; break; case AUDIO_API_COREAUDIO: rtApi = RtAudio::MACOSX_CORE; break; case AUDIO_API_ASIO: rtApi = RtAudio::WINDOWS_ASIO; break; case AUDIO_API_DIRECTSOUND: rtApi = RtAudio::WINDOWS_DS; break; case AUDIO_API_WASAPI: rtApi = RtAudio::WINDOWS_WASAPI; break; } return new CarlaEngineRtAudio(rtApi); } uint getRtAudioApiCount() { initRtAudioAPIsIfNeeded(); return static_cast(gRtAudioApis.size()); } const char* getRtAudioApiName(const uint index) { initRtAudioAPIsIfNeeded(); CARLA_SAFE_ASSERT_RETURN(index < gRtAudioApis.size(), nullptr); return CARLA_BACKEND_NAMESPACE::getRtAudioApiName(gRtAudioApis[index]); } const char* const* getRtAudioApiDeviceNames(const uint index) { initRtAudioAPIsIfNeeded(); if (index >= gRtAudioApis.size()) return nullptr; const RtAudio::Api& api(gRtAudioApis[index]); CarlaStringList devNames; try { RtAudio rtAudio(api); const uint devCount(rtAudio.getDeviceCount()); if (devCount == 0) return nullptr; for (uint i=0; i < devCount; ++i) { RtAudio::DeviceInfo devInfo(rtAudio.getDeviceInfo(i)); if (devInfo.probed && devInfo.outputChannels > 0 /*&& (devInfo.nativeFormats & RTAUDIO_FLOAT32) != 0*/) devNames.append(devInfo.name.c_str()); } } CARLA_SAFE_EXCEPTION_RETURN("RtAudio device names", nullptr); gDeviceNames = devNames.toCharStringListPtr(); return gDeviceNames; } const EngineDriverDeviceInfo* getRtAudioDeviceInfo(const uint index, const char* const deviceName) { initRtAudioAPIsIfNeeded(); if (index >= gRtAudioApis.size()) return nullptr; static EngineDriverDeviceInfo devInfo = { 0x0, nullptr, nullptr }; static uint32_t dummyBufferSizes[] = { 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 0 }; static double dummySampleRates[] = { 22050.0, 32000.0, 44100.0, 48000.0, 88200.0, 96000.0, 176400.0, 192000.0, 0.0 }; // reset devInfo.hints = 0x0; // cleanup if (devInfo.bufferSizes != nullptr && devInfo.bufferSizes != dummyBufferSizes) { delete[] devInfo.bufferSizes; devInfo.bufferSizes = nullptr; } if (devInfo.sampleRates != nullptr && devInfo.sampleRates != dummySampleRates) { delete[] devInfo.sampleRates; devInfo.sampleRates = nullptr; } const RtAudio::Api& api(gRtAudioApis[index]); if (api == RtAudio::UNIX_JACK) { devInfo.bufferSizes = nullptr; devInfo.sampleRates = nullptr; return &devInfo; } RtAudio::DeviceInfo rtAudioDevInfo; try { RtAudio rtAudio(api); const uint devCount(rtAudio.getDeviceCount()); if (devCount == 0) return nullptr; uint i; for (i=0; i < devCount; ++i) { rtAudioDevInfo = rtAudio.getDeviceInfo(i); if (rtAudioDevInfo.name == deviceName) break; } if (i == devCount) rtAudioDevInfo = rtAudio.getDeviceInfo(rtAudio.getDefaultOutputDevice()); } CARLA_SAFE_EXCEPTION_RETURN("RtAudio device discovery", nullptr); // a few APIs can do triple buffer switch (api) { case RtAudio::LINUX_ALSA: case RtAudio::LINUX_OSS: case RtAudio::WINDOWS_DS: devInfo.hints |= ENGINE_DRIVER_DEVICE_CAN_TRIPLE_BUFFER; break; default: break; } // always use default buffer sizes devInfo.bufferSizes = dummyBufferSizes; // valid sample rates if (const size_t sampleRatesCount = rtAudioDevInfo.sampleRates.size()) { double* const sampleRates(new double[sampleRatesCount+1]); for (size_t i=0; i < sampleRatesCount; ++i) sampleRates[i] = rtAudioDevInfo.sampleRates[i]; sampleRates[sampleRatesCount] = 0.0; devInfo.sampleRates = sampleRates; } else { devInfo.sampleRates = dummySampleRates; } return &devInfo; } } // ----------------------------------------- CARLA_BACKEND_END_NAMESPACE Carla-2.4.2/source/backend/engine/CarlaEngineThread.cpp000066400000000000000000000116451420416754300227160ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2020 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "CarlaEngineThread.hpp" #include "CarlaEngineInternal.hpp" #include "CarlaPlugin.hpp" #include "water/misc/Time.h" CARLA_BACKEND_START_NAMESPACE // ----------------------------------------------------------------------- CarlaEngineThread::CarlaEngineThread(CarlaEngine* const engine) noexcept : CarlaThread("CarlaEngineThread"), kEngine(engine) { CARLA_SAFE_ASSERT(engine != nullptr); carla_debug("CarlaEngineThread::CarlaEngineThread(%p)", engine); } CarlaEngineThread::~CarlaEngineThread() noexcept { carla_debug("CarlaEngineThread::~CarlaEngineThread()"); } // ----------------------------------------------------------------------- void CarlaEngineThread::run() noexcept { CARLA_SAFE_ASSERT_RETURN(kEngine != nullptr,); carla_debug("CarlaEngineThread::run()"); const bool kIsPlugin = kEngine->getType() == kEngineTypePlugin; const bool kIsAlwaysRunning = kEngine->getType() == kEngineTypeBridge || kIsPlugin; float value; #if defined(HAVE_LIBLO) && ! defined(BUILD_BRIDGE) // int64_t lastPingTime = 0; const CarlaEngineOsc& engineOsc(kEngine->pData->osc); #endif // thread must do something... CARLA_SAFE_ASSERT_RETURN(kIsAlwaysRunning || kEngine->isRunning(),); for (; (kIsAlwaysRunning || kEngine->isRunning()) && ! shouldThreadExit();) { #if defined(HAVE_LIBLO) && ! defined(BUILD_BRIDGE) const bool oscRegistedForUDP = engineOsc.isControlRegisteredForUDP(); #else const bool oscRegistedForUDP = false; #endif #if defined(HAVE_LIBLO) && !defined(BUILD_BRIDGE) if (kIsPlugin) engineOsc.idle(); #endif for (uint i=0, count = kEngine->getCurrentPluginCount(); i < count; ++i) { const CarlaPluginPtr plugin = kEngine->getPluginUnchecked(i); CARLA_SAFE_ASSERT_CONTINUE(plugin.get() != nullptr && plugin->isEnabled()); CARLA_SAFE_ASSERT_UINT2(i == plugin->getId(), i, plugin->getId()); const uint hints(plugin->getHints()); const bool updateUI((hints & PLUGIN_HAS_CUSTOM_UI) != 0 && (hints & PLUGIN_NEEDS_UI_MAIN_THREAD) == 0); // ----------------------------------------------------------- // DSP Idle try { plugin->idle(); } CARLA_SAFE_EXCEPTION("idle()") // ----------------------------------------------------------- // Post-poned events if (oscRegistedForUDP || updateUI) { // ------------------------------------------------------- // Update parameter outputs for (uint32_t j=0, pcount=plugin->getParameterCount(); j < pcount; ++j) { if (! plugin->isParameterOutput(j)) continue; value = plugin->getParameterValue(j); #if defined(HAVE_LIBLO) && ! defined(BUILD_BRIDGE) // Update OSC engine client if (oscRegistedForUDP) engineOsc.sendParameterValue(i, j, value); #endif // Update UI if (updateUI) plugin->uiParameterChange(j, value); } if (updateUI) { try { plugin->uiIdle(); } CARLA_SAFE_EXCEPTION("uiIdle()") } } #if defined(HAVE_LIBLO) && ! defined(BUILD_BRIDGE) // ----------------------------------------------------------- // Update OSC control client peaks if (oscRegistedForUDP) engineOsc.sendPeaks(i, kEngine->getPeaks(i)); #endif } #if defined(HAVE_LIBLO) && !defined(BUILD_BRIDGE) if (oscRegistedForUDP) engineOsc.sendRuntimeInfo(); /* if (engineOsc.isControlRegisteredForTCP()) { const int64_t timeNow = water::Time::currentTimeMillis(); if (timeNow - lastPingTime > 1000) { engineOsc.sendPing(); lastPingTime = timeNow; } } */ #endif carla_msleep(25); } carla_debug("CarlaEngineThread closed"); } // ----------------------------------------------------------------------- CARLA_BACKEND_END_NAMESPACE Carla-2.4.2/source/backend/engine/CarlaEngineThread.hpp000066400000000000000000000026101420416754300227130ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2014 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #ifndef CARLA_ENGINE_THREAD_HPP_INCLUDED #define CARLA_ENGINE_THREAD_HPP_INCLUDED #include "CarlaBackend.h" #include "CarlaThread.hpp" #include "CarlaJuceUtils.hpp" CARLA_BACKEND_START_NAMESPACE // ----------------------------------------------------------------------- // CarlaEngineThread class CarlaEngineThread : public CarlaThread { public: CarlaEngineThread(CarlaEngine* engine) noexcept; ~CarlaEngineThread() noexcept override; protected: void run() noexcept override; private: CarlaEngine* const kEngine; CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaEngineThread) }; // ----------------------------------------------------------------------- CARLA_BACKEND_END_NAMESPACE #endif // CARLA_ENGINE_THREAD_HPP_INCLUDED Carla-2.4.2/source/backend/engine/Makefile000066400000000000000000000062631420416754300203520ustar00rootroot00000000000000#!/usr/bin/make -f # Makefile for carla-engine # # ------------------------- # # Created by falkTX # CWD=../.. include ../Makefile.mk # Workaround GCC bug ifeq ($(TESTBUILD),true) ifeq ($(USING_JUCE_AUDIO_DEVICES),true) BUILD_CXX_FLAGS += -Wno-undef endif endif BUILD_CXX_FLAGS += $(MAGIC_FLAGS) # --------------------------------------------------------------------------------------------------------------------- OBJS = \ $(OBJDIR)/CarlaEngine.cpp.o \ $(OBJDIR)/CarlaEngineClient.cpp.o \ $(OBJDIR)/CarlaEngineData.cpp.o \ $(OBJDIR)/CarlaEngineDummy.cpp.o \ $(OBJDIR)/CarlaEngineGraph.cpp.o \ $(OBJDIR)/CarlaEngineInternal.cpp.o \ $(OBJDIR)/CarlaEnginePorts.cpp.o \ $(OBJDIR)/CarlaEngineThread.cpp.o ifeq ($(HAVE_LIBLO),true) OBJS += \ $(OBJDIR)/CarlaEngineOsc.cpp.o \ $(OBJDIR)/CarlaEngineOscHandlers.cpp.o \ $(OBJDIR)/CarlaEngineOscSend.cpp.o endif OBJSa = $(OBJS) \ $(OBJDIR)/CarlaEngineJack.cpp.o \ $(OBJDIR)/CarlaEngineNative.cpp.o ifeq ($(USING_JUCE_AUDIO_DEVICES),true) OBJSa += \ $(OBJDIR)/CarlaEngineJuce.cpp.o endif ifeq ($(USING_RTAUDIO),true) OBJSa += \ $(OBJDIR)/CarlaEngineRtAudio.cpp.o endif OBJSp = $(OBJS) \ $(OBJDIR)/CarlaEngineNative.cpp.exp.o TARGETS = \ $(MODULEDIR)/carla_engine.a \ $(MODULEDIR)/carla_engine_plugin.a # --------------------------------------------------------------------------------------------------------------------- all: $(TARGETS) # --------------------------------------------------------------------------------------------------------------------- clean: rm -f $(OBJSa) $(OBJSp) $(TARGETS) debug: $(MAKE) DEBUG=true # --------------------------------------------------------------------------------------------------------------------- $(MODULEDIR)/carla_engine.a: $(OBJSa) -@mkdir -p $(MODULEDIR) @echo "Creating carla_engine.a" @rm -f $@ @$(AR) crs $@ $^ $(MODULEDIR)/carla_engine_plugin.a: $(OBJSp) -@mkdir -p $(MODULEDIR) @echo "Creating carla_engine_plugin.a" @rm -f $@ @$(AR) crs $@ $^ # --------------------------------------------------------------------------------------------------------------------- $(OBJDIR)/CarlaEngineRtAudio.cpp.o: CarlaEngineRtAudio.cpp -@mkdir -p $(OBJDIR) @echo "Compiling CarlaEngineRtAudio.cpp" @$(CXX) $< $(BUILD_CXX_FLAGS) $(RTAUDIO_FLAGS) $(RTMIDI_FLAGS) -c -o $@ ifeq ($(MACOS),true) $(OBJDIR)/CarlaEngineNative.cpp.exp.o: CarlaEngineNative.cpp -@mkdir -p $(OBJDIR) @echo "Compiling CarlaEngineNative.cpp (plugin)" @$(CXX) $< $(BUILD_CXX_FLAGS) -DCARLA_PLUGIN_EXPORT -ObjC++ -c -o $@ else $(OBJDIR)/CarlaEngineNative.cpp.exp.o: CarlaEngineNative.cpp -@mkdir -p $(OBJDIR) @echo "Compiling CarlaEngineNative.cpp (plugin)" @$(CXX) $< $(BUILD_CXX_FLAGS) -DCARLA_PLUGIN_EXPORT -c -o $@ endif ifeq ($(JACKBRIDGE_DIRECT),true) $(OBJDIR)/CarlaEngineJack.cpp.o: CarlaEngineJack.cpp -@mkdir -p $(OBJDIR) @echo "Compiling CarlaEngineJack.cpp" @$(CXX) $< $(BUILD_CXX_FLAGS) $(JACK_FLAGS) -c -o $@ endif $(OBJDIR)/%.cpp.o: %.cpp -@mkdir -p $(OBJDIR) @echo "Compiling $<" @$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ -include $(OBJSa:%.o=%.d) -include $(OBJDIR)/CarlaEngineNative.cpp.exp.d # --------------------------------------------------------------------------------------------------------------------- Carla-2.4.2/source/backend/plugin/000077500000000000000000000000001420416754300167345ustar00rootroot00000000000000Carla-2.4.2/source/backend/plugin/.kdev_include_paths000066400000000000000000000000671420416754300225730ustar00rootroot00000000000000../ ../../ ../../includes/ ../../modules/ ../../utils/ Carla-2.4.2/source/backend/plugin/CarlaPlugin.cpp000066400000000000000000002635151420416754300216550ustar00rootroot00000000000000/* * Carla Plugin * Copyright (C) 2011-2022 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "CarlaPluginInternal.hpp" #include "CarlaEngine.hpp" #include "CarlaBackendUtils.hpp" #include "CarlaBase64Utils.hpp" #include "CarlaMathUtils.hpp" #include "CarlaMIDI.h" #include "CarlaPluginUI.hpp" #include "CarlaScopeUtils.hpp" #include "CarlaStringList.hpp" #include #include "water/files/File.h" #include "water/streams/MemoryOutputStream.h" #include "water/xml/XmlDocument.h" #include "water/xml/XmlElement.h" using water::CharPointer_UTF8; using water::File; using water::MemoryOutputStream; using water::Result; using water::String; using water::XmlDocument; using water::XmlElement; CARLA_BACKEND_START_NAMESPACE // ------------------------------------------------------------------------------------------------------------------- // Fallback data static const ParameterData kParameterDataNull = { PARAMETER_UNKNOWN, 0x0, PARAMETER_NULL, -1, 0, CONTROL_INDEX_NONE, 0.0f, 1.0f, 0x0 }; static const ParameterRanges kParameterRangesNull = { 0.0f, 0.0f, 1.0f, 0.01f, 0.0001f, 0.1f }; static const MidiProgramData kMidiProgramDataNull = { 0, 0, nullptr }; static const CustomData kCustomDataFallback = { nullptr, nullptr, nullptr }; static /* */ CustomData kCustomDataFallbackNC = { nullptr, nullptr, nullptr }; static const PluginPostRtEvent kPluginPostRtEventFallback = { kPluginPostRtEventNull, false, {} }; // ------------------------------------------------------------------------------------------------------------------- // ParamSymbol struct, needed for CarlaPlugin::loadStateSave() struct ParamSymbol { int32_t index; const char* symbol; ParamSymbol(const uint32_t i, const char* const s) : index(static_cast(i)), symbol(carla_strdup(s)) {} ~ParamSymbol() noexcept { CARLA_SAFE_ASSERT_RETURN(symbol != nullptr,) delete[] symbol; symbol = nullptr; } #ifdef CARLA_PROPER_CPP11_SUPPORT ParamSymbol() = delete; CARLA_DECLARE_NON_COPY_STRUCT(ParamSymbol) #endif }; // ------------------------------------------------------------------------------------------------------------------- // Constructor and destructor CarlaPlugin::CarlaPlugin(CarlaEngine* const engine, const uint id) : pData(new ProtectedData(engine, id)) { CARLA_SAFE_ASSERT_RETURN(engine != nullptr,); CARLA_SAFE_ASSERT(id < engine->getMaxPluginNumber()); carla_debug("CarlaPlugin::CarlaPlugin(%p, %i)", engine, id); switch (engine->getProccessMode()) { case ENGINE_PROCESS_MODE_SINGLE_CLIENT: case ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS: CARLA_SAFE_ASSERT(id < MAX_DEFAULT_PLUGINS); break; case ENGINE_PROCESS_MODE_CONTINUOUS_RACK: CARLA_SAFE_ASSERT(id < MAX_RACK_PLUGINS); break; case ENGINE_PROCESS_MODE_PATCHBAY: CARLA_SAFE_ASSERT(id < MAX_PATCHBAY_PLUGINS); break; case ENGINE_PROCESS_MODE_BRIDGE: CARLA_SAFE_ASSERT(id == 0); break; } } CarlaPlugin::~CarlaPlugin() { carla_debug("CarlaPlugin::~CarlaPlugin()"); delete pData; } // ------------------------------------------------------------------- // Information (base) uint CarlaPlugin::getId() const noexcept { return pData->id; } uint CarlaPlugin::getHints() const noexcept { return pData->hints; } uint CarlaPlugin::getOptionsEnabled() const noexcept { return pData->options; } bool CarlaPlugin::isEnabled() const noexcept { return pData->enabled; } const char* CarlaPlugin::getName() const noexcept { return pData->name; } const char* CarlaPlugin::getFilename() const noexcept { return pData->filename; } const char* CarlaPlugin::getIconName() const noexcept { return pData->iconName; } PluginCategory CarlaPlugin::getCategory() const noexcept { return getPluginCategoryFromName(pData->name); } int64_t CarlaPlugin::getUniqueId() const noexcept { return 0; } uint32_t CarlaPlugin::getLatencyInFrames() const noexcept { return 0; } // ------------------------------------------------------------------- // Information (count) uint32_t CarlaPlugin::getAudioInCount() const noexcept { return pData->audioIn.count; } uint32_t CarlaPlugin::getAudioOutCount() const noexcept { return pData->audioOut.count; } uint32_t CarlaPlugin::getCVInCount() const noexcept { return pData->cvIn.count; } uint32_t CarlaPlugin::getCVOutCount() const noexcept { return pData->cvOut.count; } uint32_t CarlaPlugin::getMidiInCount() const noexcept { return (pData->extraHints & PLUGIN_EXTRA_HINT_HAS_MIDI_IN) ? 1 : 0; } uint32_t CarlaPlugin::getMidiOutCount() const noexcept { return (pData->extraHints & PLUGIN_EXTRA_HINT_HAS_MIDI_OUT) ? 1 : 0; } uint32_t CarlaPlugin::getParameterCount() const noexcept { return pData->param.count; } uint32_t CarlaPlugin::getParameterScalePointCount(const uint32_t parameterId) const noexcept { CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, 0); return 0; } uint32_t CarlaPlugin::getProgramCount() const noexcept { return pData->prog.count; } uint32_t CarlaPlugin::getMidiProgramCount() const noexcept { return pData->midiprog.count; } uint32_t CarlaPlugin::getCustomDataCount() const noexcept { return static_cast(pData->custom.count()); } // ------------------------------------------------------------------- // Information (current data) int32_t CarlaPlugin::getCurrentProgram() const noexcept { return pData->prog.current; } int32_t CarlaPlugin::getCurrentMidiProgram() const noexcept { return pData->midiprog.current; } uint CarlaPlugin::getAudioPortHints(bool, uint32_t) const noexcept { return 0x0; } const ParameterData& CarlaPlugin::getParameterData(const uint32_t parameterId) const noexcept { CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, kParameterDataNull); return pData->param.data[parameterId]; } const ParameterRanges& CarlaPlugin::getParameterRanges(const uint32_t parameterId) const noexcept { CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, kParameterRangesNull); return pData->param.ranges[parameterId]; } bool CarlaPlugin::isParameterOutput(const uint32_t parameterId) const noexcept { CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false); return (pData->param.data[parameterId].type == PARAMETER_OUTPUT); } const MidiProgramData& CarlaPlugin::getMidiProgramData(const uint32_t index) const noexcept { CARLA_SAFE_ASSERT_RETURN(index < pData->midiprog.count, kMidiProgramDataNull); return pData->midiprog.data[index]; } const CustomData& CarlaPlugin::getCustomData(const uint32_t index) const noexcept { return pData->custom.getAt(index, kCustomDataFallback); } std::size_t CarlaPlugin::getChunkData(void** const dataPtr) noexcept { CARLA_SAFE_ASSERT_RETURN(dataPtr != nullptr, 0); CARLA_SAFE_ASSERT(false); // this should never happen return 0; } // ------------------------------------------------------------------- // Information (per-plugin data) uint CarlaPlugin::getOptionsAvailable() const noexcept { CARLA_SAFE_ASSERT(false); // this should never happen return 0x0; } float CarlaPlugin::getParameterValue(const uint32_t parameterId) const noexcept { CARLA_SAFE_ASSERT_RETURN(parameterId < getParameterCount(), 0.0f); CARLA_SAFE_ASSERT(false); // this should never happen return 0.0f; } float CarlaPlugin::getParameterScalePointValue(const uint32_t parameterId, const uint32_t scalePointId) const noexcept { CARLA_SAFE_ASSERT_RETURN(parameterId < getParameterCount(), 0.0f); CARLA_SAFE_ASSERT_RETURN(scalePointId < getParameterScalePointCount(parameterId), 0.0f); CARLA_SAFE_ASSERT(false); // this should never happen return 0.0f; } bool CarlaPlugin::getLabel(char* const strBuf) const noexcept { strBuf[0] = '\0'; return false; } bool CarlaPlugin::getMaker(char* const strBuf) const noexcept { strBuf[0] = '\0'; return false; } bool CarlaPlugin::getCopyright(char* const strBuf) const noexcept { strBuf[0] = '\0'; return false; } bool CarlaPlugin::getRealName(char* const strBuf) const noexcept { strBuf[0] = '\0'; return false; } bool CarlaPlugin::getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept { CARLA_SAFE_ASSERT_RETURN(parameterId < getParameterCount(), false); CARLA_SAFE_ASSERT(false); // this should never happen strBuf[0] = '\0'; return false; } bool CarlaPlugin::getParameterSymbol(const uint32_t parameterId, char* const strBuf) const noexcept { CARLA_SAFE_ASSERT_RETURN(parameterId < getParameterCount(), false); strBuf[0] = '\0'; return false; } bool CarlaPlugin::getParameterText(const uint32_t parameterId, char* const strBuf) noexcept { CARLA_SAFE_ASSERT_RETURN(parameterId < getParameterCount(), false); CARLA_SAFE_ASSERT(false); // this should never happen strBuf[0] = '\0'; return false; } bool CarlaPlugin::getParameterUnit(const uint32_t parameterId, char* const strBuf) const noexcept { CARLA_SAFE_ASSERT_RETURN(parameterId < getParameterCount(), false); strBuf[0] = '\0'; return false; } bool CarlaPlugin::getParameterComment(const uint32_t parameterId, char* const strBuf) const noexcept { CARLA_SAFE_ASSERT_RETURN(parameterId < getParameterCount(), false); strBuf[0] = '\0'; return false; } bool CarlaPlugin::getParameterGroupName(const uint32_t parameterId, char* const strBuf) const noexcept { CARLA_SAFE_ASSERT_RETURN(parameterId < getParameterCount(), false); strBuf[0] = '\0'; return false; } bool CarlaPlugin::getParameterScalePointLabel(const uint32_t parameterId, const uint32_t scalePointId, char* const strBuf) const noexcept { CARLA_SAFE_ASSERT_RETURN(parameterId < getParameterCount(), false); CARLA_SAFE_ASSERT_RETURN(scalePointId < getParameterScalePointCount(parameterId), false); CARLA_SAFE_ASSERT(false); // this should never happen strBuf[0] = '\0'; return false; } float CarlaPlugin::getInternalParameterValue(const int32_t parameterId) const noexcept { #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH CARLA_SAFE_ASSERT_RETURN(parameterId != PARAMETER_NULL && parameterId > PARAMETER_MAX, 0.0f); switch (parameterId) { case PARAMETER_ACTIVE: return pData->active; case PARAMETER_CTRL_CHANNEL: return pData->ctrlChannel; case PARAMETER_DRYWET: return pData->postProc.dryWet; case PARAMETER_VOLUME: return pData->postProc.volume; case PARAMETER_BALANCE_LEFT: return pData->postProc.balanceLeft; case PARAMETER_BALANCE_RIGHT: return pData->postProc.balanceRight; case PARAMETER_PANNING: return pData->postProc.panning; }; #endif CARLA_SAFE_ASSERT_RETURN(parameterId >= 0, 0.0f); return getParameterValue(static_cast(parameterId)); } bool CarlaPlugin::getProgramName(const uint32_t index, char* const strBuf) const noexcept { CARLA_SAFE_ASSERT_RETURN(index < pData->prog.count, false); CARLA_SAFE_ASSERT_RETURN(pData->prog.names[index] != nullptr, false); std::strncpy(strBuf, pData->prog.names[index], STR_MAX); return true; } bool CarlaPlugin::getMidiProgramName(const uint32_t index, char* const strBuf) const noexcept { CARLA_SAFE_ASSERT_RETURN(index < pData->midiprog.count, false); CARLA_SAFE_ASSERT_RETURN(pData->midiprog.data[index].name != nullptr, false); std::strncpy(strBuf, pData->midiprog.data[index].name, STR_MAX); return true; } void CarlaPlugin::getParameterCountInfo(uint32_t& ins, uint32_t& outs) const noexcept { ins = 0; outs = 0; for (uint32_t i=0; i < pData->param.count; ++i) { if (pData->param.data[i].type == PARAMETER_INPUT) ++ins; else if (pData->param.data[i].type == PARAMETER_OUTPUT) ++outs; } } // ------------------------------------------------------------------- // Set data (state) void CarlaPlugin::prepareForSave(bool) { } void CarlaPlugin::resetParameters() noexcept { for (uint i=0; i < pData->param.count; ++i) { const ParameterData& paramData(pData->param.data[i]); const ParameterRanges& paramRanges(pData->param.ranges[i]); if (paramData.type != PARAMETER_INPUT) continue; if ((paramData.hints & PARAMETER_IS_ENABLED) == 0) continue; setParameterValue(i, paramRanges.def, true, true, true); } } void CarlaPlugin::randomizeParameters() noexcept { float value, random; char strBuf[STR_MAX+1]; strBuf[STR_MAX] = '\0'; std::srand(static_cast(std::time(nullptr))); for (uint i=0; i < pData->param.count; ++i) { const ParameterData& paramData(pData->param.data[i]); if (paramData.type != PARAMETER_INPUT) continue; if ((paramData.hints & PARAMETER_IS_ENABLED) == 0) continue; if (! getParameterName(i, strBuf)) strBuf[0] = '\0'; if (std::strstr(strBuf, "olume") != nullptr) continue; if (std::strstr(strBuf, "Master") != nullptr) continue; const ParameterRanges& paramRanges(pData->param.ranges[i]); if (paramData.hints & PARAMETER_IS_BOOLEAN) { random = static_cast(std::rand()) / static_cast(RAND_MAX); value = random > 0.5f ? paramRanges.max : paramRanges.min; } else { random = static_cast(std::rand()) / static_cast(RAND_MAX); value = random * (paramRanges.max - paramRanges.min) + paramRanges.min; if (paramData.hints & PARAMETER_IS_INTEGER) value = std::rint(value); } setParameterValue(i, value, true, true, true); } } const CarlaStateSave& CarlaPlugin::getStateSave(const bool callPrepareForSave) { pData->stateSave.clear(); if (callPrepareForSave) { pData->stateSave.temporary = true; prepareForSave(true); } const PluginType pluginType(getType()); char strBuf[STR_MAX+1]; carla_zeroChars(strBuf, STR_MAX+1); // --------------------------------------------------------------- // Basic info if (! getLabel(strBuf)) strBuf[0] = '\0'; pData->stateSave.type = carla_strdup(getPluginTypeAsString(pluginType)); pData->stateSave.name = carla_strdup(pData->name); pData->stateSave.label = carla_strdup(strBuf); pData->stateSave.uniqueId = getUniqueId(); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH pData->stateSave.options = pData->options; #endif if (pData->filename != nullptr) pData->stateSave.binary = carla_strdup(pData->filename); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // --------------------------------------------------------------- // Internals pData->stateSave.active = pData->active; pData->stateSave.dryWet = pData->postProc.dryWet; pData->stateSave.volume = pData->postProc.volume; pData->stateSave.balanceLeft = pData->postProc.balanceLeft; pData->stateSave.balanceRight = pData->postProc.balanceRight; pData->stateSave.panning = pData->postProc.panning; pData->stateSave.ctrlChannel = pData->ctrlChannel; #endif if (pData->hints & PLUGIN_IS_BRIDGE) waitForBridgeSaveSignal(); // --------------------------------------------------------------- // Chunk bool usingChunk = false; if (pData->options & PLUGIN_OPTION_USE_CHUNKS) { void* data = nullptr; const std::size_t dataSize(getChunkData(&data)); if (data != nullptr && dataSize > 0) { pData->stateSave.chunk = CarlaString::asBase64(data, dataSize).dup(); if (pluginType != PLUGIN_INTERNAL) usingChunk = true; } } // --------------------------------------------------------------- // Current Program if (pData->prog.current >= 0 && pluginType != PLUGIN_LV2) { pData->stateSave.currentProgramIndex = pData->prog.current; pData->stateSave.currentProgramName = carla_strdup(pData->prog.names[pData->prog.current]); } // --------------------------------------------------------------- // Current MIDI Program if (pData->midiprog.current >= 0 && pluginType != PLUGIN_LV2 && pluginType != PLUGIN_SF2) { const MidiProgramData& mpData(pData->midiprog.getCurrent()); pData->stateSave.currentMidiBank = static_cast(mpData.bank); pData->stateSave.currentMidiProgram = static_cast(mpData.program); } // --------------------------------------------------------------- // Parameters const float sampleRate(static_cast(pData->engine->getSampleRate())); for (uint32_t i=0; i < pData->param.count; ++i) { const ParameterData& paramData(pData->param.data[i]); if ((paramData.hints & PARAMETER_IS_ENABLED) == 0) continue; if (paramData.hints & PARAMETER_IS_NOT_SAVED) continue; const bool dummy = paramData.type != PARAMETER_INPUT || usingChunk; if (dummy && paramData.mappedControlIndex <= CONTROL_INDEX_NONE) continue; CarlaStateSave::Parameter* const stateParameter(new CarlaStateSave::Parameter()); stateParameter->dummy = dummy; stateParameter->index = paramData.index; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (paramData.mappedControlIndex != CONTROL_INDEX_MIDI_LEARN) { stateParameter->mappedControlIndex = paramData.mappedControlIndex; stateParameter->midiChannel = paramData.midiChannel; if (paramData.hints & PARAMETER_MAPPED_RANGES_SET) { stateParameter->mappedMinimum = paramData.mappedMinimum; stateParameter->mappedMaximum = paramData.mappedMaximum; stateParameter->mappedRangeValid = true; if (paramData.hints & PARAMETER_USES_SAMPLERATE) { stateParameter->mappedMinimum /= sampleRate; stateParameter->mappedMaximum /= sampleRate; } } } #endif if (! getParameterName(i, strBuf)) strBuf[0] = '\0'; stateParameter->name = carla_strdup(strBuf); if (! getParameterSymbol(i, strBuf)) strBuf[0] = '\0'; stateParameter->symbol = carla_strdup(strBuf);; if (! dummy) { stateParameter->value = getParameterValue(i); if (paramData.hints & PARAMETER_USES_SAMPLERATE) stateParameter->value /= sampleRate; } pData->stateSave.parameters.append(stateParameter); } // --------------------------------------------------------------- // Custom Data for (LinkedList::Itenerator it = pData->custom.begin2(); it.valid(); it.next()) { const CustomData& cData(it.getValue(kCustomDataFallback)); CARLA_SAFE_ASSERT_CONTINUE(cData.isValid()); CarlaStateSave::CustomData* stateCustomData(new CarlaStateSave::CustomData()); stateCustomData->type = carla_strdup(cData.type); stateCustomData->key = carla_strdup(cData.key); stateCustomData->value = carla_strdup(cData.value); pData->stateSave.customData.append(stateCustomData); } return pData->stateSave; } void CarlaPlugin::loadStateSave(const CarlaStateSave& stateSave) { const bool usesMultiProgs(pData->hints & PLUGIN_USES_MULTI_PROGS); const PluginType pluginType(getType()); char strBuf[STR_MAX+1]; carla_zeroChars(strBuf, STR_MAX+1); // --------------------------------------------------------------- // Part 1 - PRE-set custom data (only those which reload programs) for (CarlaStateSave::CustomDataItenerator it = stateSave.customData.begin2(); it.valid(); it.next()) { const CarlaStateSave::CustomData* const stateCustomData(it.getValue(nullptr)); CARLA_SAFE_ASSERT_CONTINUE(stateCustomData != nullptr); CARLA_SAFE_ASSERT_CONTINUE(stateCustomData->isValid()); const char* const key(stateCustomData->key); /**/ if (pluginType == PLUGIN_DSSI && (std::strcmp (key, "reloadprograms") == 0 || std::strcmp (key, "load" ) == 0 || std::strncmp(key, "patches", 7) == 0 )) pass(); else if (usesMultiProgs && std::strcmp(key, "midiPrograms") == 0) pass(); else continue; setCustomData(stateCustomData->type, key, stateCustomData->value, true); } // --------------------------------------------------------------- // Part 2 - set program if (stateSave.currentProgramIndex >= 0 && stateSave.currentProgramName != nullptr) { int32_t programId = -1; // index < count if (stateSave.currentProgramIndex < static_cast(pData->prog.count)) { programId = stateSave.currentProgramIndex; } // index not valid, try to find by name else { for (uint32_t i=0; i < pData->prog.count; ++i) { if (getProgramName(i, strBuf) && std::strcmp(stateSave.currentProgramName, strBuf) == 0) { programId = static_cast(i); break; } } } // set program now, if valid if (programId >= 0) setProgram(programId, true, true, true); } // --------------------------------------------------------------- // Part 3 - set midi program if (stateSave.currentMidiBank >= 0 && stateSave.currentMidiProgram >= 0 && ! usesMultiProgs) setMidiProgramById(static_cast(stateSave.currentMidiBank), static_cast(stateSave.currentMidiProgram), true, true, true); // --------------------------------------------------------------- // Part 4a - get plugin parameter symbols LinkedList paramSymbols; if (pluginType == PLUGIN_LADSPA || pluginType == PLUGIN_LV2) { for (uint32_t i=0; i < pData->param.count; ++i) { if (pData->param.data[i].hints & PARAMETER_IS_NOT_SAVED) continue; if (getParameterSymbol(i, strBuf)) { ParamSymbol* const paramSymbol(new ParamSymbol(i, strBuf)); paramSymbols.append(paramSymbol); } } } // --------------------------------------------------------------- // Part 4b - set parameter values (carefully) const float sampleRate(static_cast(pData->engine->getSampleRate())); for (CarlaStateSave::ParameterItenerator it = stateSave.parameters.begin2(); it.valid(); it.next()) { CarlaStateSave::Parameter* const stateParameter(it.getValue(nullptr)); CARLA_SAFE_ASSERT_CONTINUE(stateParameter != nullptr); int32_t index = -1; if (pluginType == PLUGIN_LADSPA) { // Try to set by symbol, otherwise use index if (stateParameter->symbol != nullptr && stateParameter->symbol[0] != '\0') { for (LinkedList::Itenerator it2 = paramSymbols.begin2(); it2.valid(); it2.next()) { ParamSymbol* const paramSymbol(it2.getValue(nullptr)); CARLA_SAFE_ASSERT_CONTINUE(paramSymbol != nullptr); CARLA_SAFE_ASSERT_CONTINUE(paramSymbol->symbol != nullptr); if (std::strcmp(stateParameter->symbol, paramSymbol->symbol) == 0) { index = paramSymbol->index; break; } } if (index == -1) index = stateParameter->index; } else { index = stateParameter->index; } } else if (pluginType == PLUGIN_LV2) { // Symbol only if (stateParameter->symbol != nullptr && stateParameter->symbol[0] != '\0') { for (LinkedList::Itenerator it2 = paramSymbols.begin2(); it2.valid(); it2.next()) { ParamSymbol* const paramSymbol(it2.getValue(nullptr)); CARLA_SAFE_ASSERT_CONTINUE(paramSymbol != nullptr); CARLA_SAFE_ASSERT_CONTINUE(paramSymbol->symbol != nullptr); if (std::strcmp(stateParameter->symbol, paramSymbol->symbol) == 0) { index = paramSymbol->index; break; } } if (index == -1) carla_stderr("Failed to find LV2 parameter symbol '%s' for '%s'", stateParameter->symbol, pData->name); } else { carla_stderr("LV2 Plugin parameter '%s' has no symbol", stateParameter->name); } } else { // Index only index = stateParameter->index; } // Now set parameter if (index >= 0 && index < static_cast(pData->param.count)) { //CARLA_SAFE_ASSERT(stateParameter->isInput == (pData if (! stateParameter->dummy) { if (pData->param.data[index].hints & PARAMETER_USES_SAMPLERATE) stateParameter->value *= sampleRate; setParameterValue(static_cast(index), stateParameter->value, true, true, true); } #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (stateParameter->mappedRangeValid) { if (pData->param.data[index].hints & PARAMETER_USES_SAMPLERATE) { stateParameter->mappedMinimum *= sampleRate; stateParameter->mappedMaximum *= sampleRate; } setParameterMappedRange(static_cast(index), stateParameter->mappedMinimum, stateParameter->mappedMaximum, true, true); } setParameterMappedControlIndex(static_cast(index), stateParameter->mappedControlIndex, true, true, false); setParameterMidiChannel(static_cast(index), stateParameter->midiChannel, true, true); #endif } else carla_stderr("Could not set parameter '%s' value for '%s'", stateParameter->name, pData->name); } // --------------------------------------------------------------- // Part 4c - clear for (LinkedList::Itenerator it = paramSymbols.begin2(); it.valid(); it.next()) { ParamSymbol* const paramSymbol(it.getValue(nullptr)); delete paramSymbol; } paramSymbols.clear(); // --------------------------------------------------------------- // Part 5 - set custom data for (CarlaStateSave::CustomDataItenerator it = stateSave.customData.begin2(); it.valid(); it.next()) { const CarlaStateSave::CustomData* const stateCustomData(it.getValue(nullptr)); CARLA_SAFE_ASSERT_CONTINUE(stateCustomData != nullptr); CARLA_SAFE_ASSERT_CONTINUE(stateCustomData->isValid()); const char* const key(stateCustomData->key); if (pluginType == PLUGIN_DSSI && (std::strcmp (key, "reloadprograms") == 0 || std::strcmp (key, "load" ) == 0 || std::strncmp(key, "patches", 7) == 0 )) continue; if (usesMultiProgs && std::strcmp(key, "midiPrograms") == 0) continue; setCustomData(stateCustomData->type, key, stateCustomData->value, true); } // --------------------------------------------------------------- // Part 5x - set lv2 state if (pluginType == PLUGIN_LV2) { for (LinkedList::Itenerator it = pData->custom.begin2(); it.valid(); it.next()) { const CustomData& customData(it.getValue(kCustomDataFallback)); CARLA_SAFE_ASSERT_CONTINUE(customData.isValid()); if (std::strcmp(customData.type, CUSTOM_DATA_TYPE_PROPERTY) == 0) continue; restoreLV2State(stateSave.temporary); break; } } // --------------------------------------------------------------- // Part 6 - set chunk if (stateSave.chunk != nullptr && (pData->options & PLUGIN_OPTION_USE_CHUNKS) != 0) { std::vector chunk(carla_getChunkFromBase64String(stateSave.chunk)); #ifdef CARLA_PROPER_CPP11_SUPPORT setChunkData(chunk.data(), chunk.size()); #else setChunkData(&chunk.front(), chunk.size()); #endif } #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // --------------------------------------------------------------- // Part 6 - set internal stuff const uint availOptions(getOptionsAvailable()); for (uint i=0; i<10; ++i) // FIXME - get this value somehow... { const uint option(1u << i); if (availOptions & option) setOption(option, (stateSave.options & option) != 0, true); } setDryWet(stateSave.dryWet, true, true); setVolume(stateSave.volume, true, true); setBalanceLeft(stateSave.balanceLeft, true, true); setBalanceRight(stateSave.balanceRight, true, true); setPanning(stateSave.panning, true, true); setCtrlChannel(stateSave.ctrlChannel, true, true); setActive(stateSave.active, true, true); if (! pData->engine->isLoadingProject()) pData->engine->callback(true, true, ENGINE_CALLBACK_UPDATE, pData->id, 0, 0, 0, 0.0f, nullptr); #endif } bool CarlaPlugin::saveStateToFile(const char* const filename) { CARLA_SAFE_ASSERT_RETURN(filename != nullptr && filename[0] != '\0', false); carla_debug("CarlaPlugin::saveStateToFile(\"%s\")", filename); MemoryOutputStream out, streamState; getStateSave().dumpToMemoryStream(streamState); out << "\n"; out << "\n"; out << "\n"; out << streamState; out << "\n"; const String jfilename = String(CharPointer_UTF8(filename)); File file(jfilename); if (file.replaceWithData(out.getData(), out.getDataSize())) return true; pData->engine->setLastError("Failed to write file"); return false; } bool CarlaPlugin::loadStateFromFile(const char* const filename) { // TODO set errors CARLA_SAFE_ASSERT_RETURN(filename != nullptr && filename[0] != '\0', false); carla_debug("CarlaPlugin::loadStateFromFile(\"%s\")", filename); const String jfilename = String(CharPointer_UTF8(filename)); File file(jfilename); CARLA_SAFE_ASSERT_RETURN(file.existsAsFile(), false); XmlDocument xml(file); CarlaScopedPointer xmlElement(xml.getDocumentElement(true)); CARLA_SAFE_ASSERT_RETURN(xmlElement != nullptr, false); CARLA_SAFE_ASSERT_RETURN(xmlElement->getTagName().equalsIgnoreCase("carla-preset"), false); // completely load file xmlElement = xml.getDocumentElement(false); CARLA_SAFE_ASSERT_RETURN(xmlElement != nullptr, false); if (pData->stateSave.fillFromXmlElement(xmlElement)) { loadStateSave(pData->stateSave); return true; } return false; } bool CarlaPlugin::exportAsLV2(const char* const lv2path) { CARLA_SAFE_ASSERT_RETURN(lv2path != nullptr && lv2path[0] != '\0', false); carla_debug("CarlaPlugin::exportAsLV2(\"%s\")", lv2path); CarlaString bundlepath(lv2path); if (! bundlepath.endsWith(".lv2")) bundlepath += ".lv2"; const File bundlefolder(bundlepath.buffer()); if (bundlefolder.existsAsFile()) { pData->engine->setLastError("Requested filename already exists as file, use a folder instead"); return false; } if (! bundlefolder.exists()) { const Result res(bundlefolder.createDirectory()); if (res.failed()) { pData->engine->setLastError(res.getErrorMessage().toRawUTF8()); return false; } } CarlaString symbol(pData->name); symbol.toBasic(); { const CarlaString pluginFilename(bundlepath + CARLA_OS_SEP_STR + symbol + ".xml"); if (! saveStateToFile(pluginFilename)) return false; } { MemoryOutputStream manifestStream; manifestStream << "@prefix lv2: .\n"; manifestStream << "@prefix rdfs: .\n"; manifestStream << "@prefix ui: .\n"; manifestStream << "\n"; manifestStream << "<" << symbol.buffer() << ".ttl>\n"; manifestStream << " a lv2:Plugin ;\n"; manifestStream << " lv2:binary <" << symbol.buffer() << CARLA_LIB_EXT "> ;\n"; manifestStream << " rdfs:seeAlso <" << symbol.buffer() << ".ttl> .\n"; manifestStream << "\n"; manifestStream << "\n"; manifestStream << " a ;\n"; manifestStream << " ui:binary <" << symbol.buffer() << CARLA_LIB_EXT "> ;\n"; manifestStream << " lv2:extensionData ,\n"; manifestStream << " ;\n"; manifestStream << " lv2:requiredFeature .\n"; manifestStream << "\n"; const CarlaString manifestFilename(bundlepath + CARLA_OS_SEP_STR "manifest.ttl"); const File manifestFile(manifestFilename.buffer()); if (! manifestFile.replaceWithData(manifestStream.getData(), manifestStream.getDataSize())) { pData->engine->setLastError("Failed to write manifest.ttl file"); return false; } } { MemoryOutputStream mainStream; mainStream << "@prefix atom: .\n"; mainStream << "@prefix doap: .\n"; mainStream << "@prefix foaf: .\n"; mainStream << "@prefix lv2: .\n"; mainStream << "@prefix rdfs: .\n"; mainStream << "@prefix ui: .\n"; mainStream << "\n"; mainStream << "<>\n"; mainStream << " a lv2:Plugin ;\n"; mainStream << "\n"; mainStream << " lv2:requiredFeature ,\n"; mainStream << " ,\n"; mainStream << " ;\n"; mainStream << "\n"; if (pData->hints & PLUGIN_HAS_CUSTOM_UI) { mainStream << " ui:ui ;\n"; mainStream << "\n"; } const uint32_t midiIns = getMidiInCount(); const uint32_t midiOuts = getMidiOutCount(); int portIndex = 0; if (midiIns > 0) { mainStream << " lv2:port [\n"; mainStream << " a lv2:InputPort, atom:AtomPort ;\n"; mainStream << " lv2:index 0 ;\n"; mainStream << " lv2:symbol \"clv2_events_in\" ;\n"; mainStream << " lv2:name \"Events Input\" ;\n"; mainStream << " atom:bufferType atom:Sequence ;\n"; mainStream << " atom:supports ,\n"; mainStream << " ;\n"; mainStream << " ] ;\n"; ++portIndex; for (uint32_t i=1; i ;\n"; mainStream << " ] ;\n"; ++portIndex; } for (uint32_t i=0; i ;\n"; mainStream << " ] ;\n"; } mainStream << " lv2:port [\n"; mainStream << " a lv2:InputPort, lv2:ControlPort ;\n"; mainStream << " lv2:index " << String(portIndex++) << " ;\n"; mainStream << " lv2:name \"freewheel\" ;\n"; mainStream << " lv2:symbol \"clv2_freewheel\" ;\n"; mainStream << " lv2:default 0 ;\n"; mainStream << " lv2:minimum 0 ;\n"; mainStream << " lv2:maximum 1 ;\n"; mainStream << " lv2:designation lv2:freeWheeling ;\n"; mainStream << " lv2:portProperty lv2:toggled , lv2:integer ;\n"; mainStream << " lv2:portProperty ;\n"; mainStream << " ] ;\n"; for (uint32_t i=0; iaudioIn.count; ++i) { const String portIndexNum(portIndex++); const String portIndexLabel(i+1); mainStream << " lv2:port [\n"; mainStream << " a lv2:InputPort, lv2:AudioPort ;\n"; mainStream << " lv2:index " << portIndexNum << " ;\n"; mainStream << " lv2:symbol \"clv2_audio_in_" << portIndexLabel << "\" ;\n"; mainStream << " lv2:name \"Audio Input " << portIndexLabel << "\" ;\n"; mainStream << " ] ;\n"; } for (uint32_t i=0; iaudioOut.count; ++i) { const String portIndexNum(portIndex++); const String portIndexLabel(i+1); mainStream << " lv2:port [\n"; mainStream << " a lv2:OutputPort, lv2:AudioPort ;\n"; mainStream << " lv2:index " << portIndexNum << " ;\n"; mainStream << " lv2:symbol \"clv2_audio_out_" << portIndexLabel << "\" ;\n"; mainStream << " lv2:name \"Audio Output " << portIndexLabel << "\" ;\n"; mainStream << " ] ;\n"; } CarlaStringList uniqueSymbolNames; char strBufName[STR_MAX+1]; char strBufSymbol[STR_MAX+1]; carla_zeroChars(strBufName, STR_MAX+1); carla_zeroChars(strBufSymbol, STR_MAX+1); for (uint32_t i=0; iparam.count; ++i) { const ParameterData& paramData(pData->param.data[i]); const ParameterRanges& paramRanges(pData->param.ranges[i]); const String portIndexNum(portIndex++); mainStream << " lv2:port [\n"; if (paramData.type == PARAMETER_INPUT) mainStream << " a lv2:InputPort, lv2:ControlPort ;\n"; else mainStream << " a lv2:OutputPort, lv2:ControlPort ;\n"; if (paramData.hints & PARAMETER_IS_BOOLEAN) mainStream << " lv2:portProperty lv2:toggled ;\n"; if (paramData.hints & PARAMETER_IS_INTEGER) mainStream << " lv2:portProperty lv2:integer ;\n"; // TODO logarithmic, enabled (not on gui), automatable, samplerate, scalepoints if (! getParameterName(i, strBufName)) strBufName[0] = '\0'; if (! getParameterSymbol(i, strBufSymbol)) strBufSymbol[0] = '\0'; if (strBufSymbol[0] == '\0') { CarlaString s(strBufName); s.toBasic(); std::memcpy(strBufSymbol, s.buffer(), s.length()+1); if (strBufSymbol[0] >= '0' && strBufSymbol[0] <= '9') { const size_t len(std::strlen(strBufSymbol)); std::memmove(strBufSymbol+1, strBufSymbol, len); strBufSymbol[0] = '_'; strBufSymbol[len+1] = '\0'; } } if (uniqueSymbolNames.contains(strBufSymbol)) std::snprintf(strBufSymbol, STR_MAX, "clv2_param_%d", i+1); mainStream << " lv2:index " << portIndexNum << " ;\n"; mainStream << " lv2:symbol \"" << strBufSymbol << "\" ;\n"; mainStream << " lv2:name \"\"\"" << strBufName << "\"\"\" ;\n"; mainStream << " lv2:default " << String(paramRanges.def) << " ;\n"; mainStream << " lv2:minimum " << String(paramRanges.min) << " ;\n"; mainStream << " lv2:maximum " << String(paramRanges.max) << " ;\n"; // TODO midiCC, midiChannel mainStream << " ] ;\n"; } char strBuf[STR_MAX+1]; carla_zeroChars(strBuf, STR_MAX+1); if (! getMaker(strBuf)) strBuf[0] = '\0'; mainStream << " rdfs:comment \"Plugin generated using Carla LV2 export.\" ;\n"; mainStream << " doap:name \"\"\"" << getName() << "\"\"\" ;\n"; mainStream << " doap:maintainer [ foaf:name \"\"\"" << strBuf << "\"\"\" ] .\n"; mainStream << "\n"; const CarlaString mainFilename(bundlepath + CARLA_OS_SEP_STR + symbol + ".ttl"); const File mainFile(mainFilename.buffer()); if (! mainFile.replaceWithData(mainStream.getData(), mainStream.getDataSize())) { pData->engine->setLastError("Failed to write main plugin ttl file"); return false; } } const CarlaString binaryFilename(bundlepath + CARLA_OS_SEP_STR + symbol + CARLA_LIB_EXT); const File binaryFileSource(File::getSpecialLocation(File::currentExecutableFile).getSiblingFile("carla-bridge-lv2" CARLA_LIB_EXT)); const File binaryFileTarget(binaryFilename.buffer()); const EngineOptions& opts(pData->engine->getOptions()); const CarlaString binFolderTarget(bundlepath + CARLA_OS_SEP_STR + "bin"); const CarlaString resFolderTarget(bundlepath + CARLA_OS_SEP_STR + "res"); if (! binaryFileSource.copyFileTo(binaryFileTarget)) { pData->engine->setLastError("Failed to copy plugin binary"); return false; } #ifdef CARLA_OS_WIN File(opts.resourceDir).copyDirectoryTo(File(resFolderTarget.buffer())); // Copying all the binaries is pointless, just go through the expected needed bits const File binFolder1(opts.binaryDir); const File binFolder2(binFolderTarget.buffer()); binFolder2.createDirectory(); static const char* files[] = { "carla-bridge-native.exe", "carla-bridge-win32.exe", "carla-discovery-win32.exe", "carla-discovery-win64.exe", "libcarla_utils.dll" }; for (int i=0; i<5; ++i) binFolder1.getChildFile(files[i]).copyFileTo(binFolder2.getChildFile(files[i]));; #else File(opts.binaryDir).createSymbolicLink(File(binFolderTarget.buffer()), true); File(opts.resourceDir).createSymbolicLink(File(resFolderTarget.buffer()), true); #endif return true; } // ------------------------------------------------------------------- // Set data (internal stuff) void CarlaPlugin::setId(const uint newId) noexcept { pData->id = newId; } void CarlaPlugin::setName(const char* const newName) { CARLA_SAFE_ASSERT_RETURN(newName != nullptr && newName[0] != '\0',); if (pData->name != nullptr) delete[] pData->name; pData->name = carla_strdup(newName); } void CarlaPlugin::setOption(const uint option, const bool yesNo, const bool sendCallback) { CARLA_SAFE_ASSERT_UINT2_RETURN(getOptionsAvailable() & option, getOptionsAvailable(), option,); if (yesNo) pData->options |= option; else pData->options &= ~option; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (sendCallback) pData->engine->callback(true, true, ENGINE_CALLBACK_OPTION_CHANGED, pData->id, static_cast(option), yesNo ? 1 : 0, 0, 0.0f, nullptr); #else // unused return; (void)sendCallback; #endif } void CarlaPlugin::setEnabled(const bool yesNo) noexcept { if (pData->enabled == yesNo) return; pData->masterMutex.lock(); pData->enabled = yesNo; if (yesNo && ! pData->client->isActive()) pData->client->activate(); pData->masterMutex.unlock(); } void CarlaPlugin::setActive(const bool active, const bool sendOsc, const bool sendCallback) noexcept { if (pData->engineBridged) { CARLA_SAFE_ASSERT_RETURN(!sendOsc && !sendCallback,); } else if (pData->enginePlugin) { // nothing here } else { CARLA_SAFE_ASSERT_RETURN(sendOsc || sendCallback,); // never call this from RT } if (pData->active == active) return; { const ScopedSingleProcessLocker spl(this, true); if (active) activate(); else deactivate(); } pData->active = active; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH const float value = active ? 1.0f : 0.0f; pData->engine->callback(sendCallback, sendOsc, ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED, pData->id, PARAMETER_ACTIVE, 0, 0, value, nullptr); #endif } #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH void CarlaPlugin::setDryWet(const float value, const bool sendOsc, const bool sendCallback) noexcept { if (pData->engineBridged) { CARLA_SAFE_ASSERT_RETURN(!sendOsc && !sendCallback,); } else { CARLA_SAFE_ASSERT_RETURN(sendOsc || sendCallback,); // never call this from RT } CARLA_SAFE_ASSERT(value >= 0.0f && value <= 1.0f); const float fixedValue(carla_fixedValue(0.0f, 1.0f, value)); if (carla_isEqual(pData->postProc.dryWet, fixedValue)) return; pData->postProc.dryWet = fixedValue; pData->engine->callback(sendCallback, sendOsc, ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED, pData->id, PARAMETER_DRYWET, 0, 0, fixedValue, nullptr); } void CarlaPlugin::setVolume(const float value, const bool sendOsc, const bool sendCallback) noexcept { if (pData->engineBridged) { CARLA_SAFE_ASSERT_RETURN(!sendOsc && !sendCallback,); } else { CARLA_SAFE_ASSERT_RETURN(sendOsc || sendCallback,); // never call this from RT } CARLA_SAFE_ASSERT(value >= 0.0f && value <= 1.27f); const float fixedValue(carla_fixedValue(0.0f, 1.27f, value)); if (carla_isEqual(pData->postProc.volume, fixedValue)) return; pData->postProc.volume = fixedValue; pData->engine->callback(sendCallback, sendOsc, ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED, pData->id, PARAMETER_VOLUME, 0, 0, fixedValue, nullptr); } void CarlaPlugin::setBalanceLeft(const float value, const bool sendOsc, const bool sendCallback) noexcept { if (pData->engineBridged) { CARLA_SAFE_ASSERT_RETURN(!sendOsc && !sendCallback,); } else { CARLA_SAFE_ASSERT_RETURN(sendOsc || sendCallback,); // never call this from RT } CARLA_SAFE_ASSERT(value >= -1.0f && value <= 1.0f); const float fixedValue(carla_fixedValue(-1.0f, 1.0f, value)); if (carla_isEqual(pData->postProc.balanceLeft, fixedValue)) return; pData->postProc.balanceLeft = fixedValue; pData->engine->callback(sendCallback, sendOsc, ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED, pData->id, PARAMETER_BALANCE_LEFT, 0, 0, fixedValue, nullptr); } void CarlaPlugin::setBalanceRight(const float value, const bool sendOsc, const bool sendCallback) noexcept { if (pData->engineBridged) { CARLA_SAFE_ASSERT_RETURN(!sendOsc && !sendCallback,); } else { CARLA_SAFE_ASSERT_RETURN(sendOsc || sendCallback,); // never call this from RT } CARLA_SAFE_ASSERT(value >= -1.0f && value <= 1.0f); const float fixedValue(carla_fixedValue(-1.0f, 1.0f, value)); if (carla_isEqual(pData->postProc.balanceRight, fixedValue)) return; pData->postProc.balanceRight = fixedValue; pData->engine->callback(sendCallback, sendOsc, ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED, pData->id, PARAMETER_BALANCE_RIGHT, 0, 0, fixedValue, nullptr); } void CarlaPlugin::setPanning(const float value, const bool sendOsc, const bool sendCallback) noexcept { if (pData->engineBridged) { CARLA_SAFE_ASSERT_RETURN(!sendOsc && !sendCallback,); } else { CARLA_SAFE_ASSERT_RETURN(sendOsc || sendCallback,); // never call this from RT } CARLA_SAFE_ASSERT(value >= -1.0f && value <= 1.0f); const float fixedValue(carla_fixedValue(-1.0f, 1.0f, value)); if (carla_isEqual(pData->postProc.panning, fixedValue)) return; pData->postProc.panning = fixedValue; pData->engine->callback(sendCallback, sendOsc, ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED, pData->id, PARAMETER_PANNING, 0, 0, fixedValue, nullptr); } void CarlaPlugin::setDryWetRT(const float value, const bool sendCallbackLater) noexcept { CARLA_SAFE_ASSERT(value >= 0.0f && value <= 1.0f); const float fixedValue(carla_fixedValue(0.0f, 1.0f, value)); if (carla_isEqual(pData->postProc.dryWet, fixedValue)) return; pData->postProc.dryWet = fixedValue; pData->postponeParameterChangeRtEvent(sendCallbackLater, PARAMETER_DRYWET, fixedValue); } void CarlaPlugin::setVolumeRT(const float value, const bool sendCallbackLater) noexcept { CARLA_SAFE_ASSERT(value >= 0.0f && value <= 1.27f); const float fixedValue(carla_fixedValue(0.0f, 1.27f, value)); if (carla_isEqual(pData->postProc.volume, fixedValue)) return; pData->postProc.volume = fixedValue; pData->postponeParameterChangeRtEvent(sendCallbackLater, PARAMETER_VOLUME, fixedValue); } void CarlaPlugin::setBalanceLeftRT(const float value, const bool sendCallbackLater) noexcept { CARLA_SAFE_ASSERT(value >= -1.0f && value <= 1.0f); const float fixedValue(carla_fixedValue(-1.0f, 1.0f, value)); if (carla_isEqual(pData->postProc.balanceLeft, fixedValue)) return; pData->postProc.balanceLeft = fixedValue; pData->postponeParameterChangeRtEvent(sendCallbackLater, PARAMETER_BALANCE_LEFT, fixedValue); } void CarlaPlugin::setBalanceRightRT(const float value, const bool sendCallbackLater) noexcept { CARLA_SAFE_ASSERT(value >= -1.0f && value <= 1.0f); const float fixedValue(carla_fixedValue(-1.0f, 1.0f, value)); if (carla_isEqual(pData->postProc.balanceRight, fixedValue)) return; pData->postProc.balanceRight = fixedValue; pData->postponeParameterChangeRtEvent(sendCallbackLater, PARAMETER_BALANCE_RIGHT, fixedValue); } void CarlaPlugin::setPanningRT(const float value, const bool sendCallbackLater) noexcept { CARLA_SAFE_ASSERT(value >= -1.0f && value <= 1.0f); const float fixedValue(carla_fixedValue(-1.0f, 1.0f, value)); if (carla_isEqual(pData->postProc.panning, fixedValue)) return; pData->postProc.panning = fixedValue; pData->postponeParameterChangeRtEvent(sendCallbackLater, PARAMETER_PANNING, fixedValue); } #endif // ! BUILD_BRIDGE_ALTERNATIVE_ARCH void CarlaPlugin::setCtrlChannel(const int8_t channel, const bool sendOsc, const bool sendCallback) noexcept { if (pData->engineBridged) { CARLA_SAFE_ASSERT_RETURN(!sendOsc && !sendCallback,); } else { CARLA_SAFE_ASSERT_RETURN(sendOsc || sendCallback,); // never call this from RT } CARLA_SAFE_ASSERT_RETURN(channel >= -1 && channel < MAX_MIDI_CHANNELS,); if (pData->ctrlChannel == channel) return; pData->ctrlChannel = channel; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH const float channelf = static_cast(channel); pData->engine->callback(sendCallback, sendOsc, ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED, pData->id, PARAMETER_CTRL_CHANNEL, 0, 0, channelf, nullptr); #endif } // ------------------------------------------------------------------- // Set data (plugin-specific stuff) void CarlaPlugin::setParameterValue(const uint32_t parameterId, const float value, const bool sendGui, const bool sendOsc, const bool sendCallback) noexcept { if (pData->engineBridged) { // NOTE: some LV2 plugins feedback messages to UI on purpose CARLA_SAFE_ASSERT_RETURN(getType() == PLUGIN_LV2 || !sendGui,); } else if (pData->enginePlugin) { // nothing here } else { CARLA_SAFE_ASSERT_RETURN(sendGui || sendOsc || sendCallback,); // never call this from RT } CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,); if (sendGui && (pData->hints & PLUGIN_HAS_CUSTOM_UI) != 0) uiParameterChange(parameterId, value); pData->engine->callback(sendCallback, sendOsc, ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED, pData->id, static_cast(parameterId), 0, 0, value, nullptr); } void CarlaPlugin::setParameterValueRT(const uint32_t parameterId, const float value, const bool sendCallbackLater) noexcept { pData->postponeParameterChangeRtEvent(sendCallbackLater, static_cast(parameterId), value); } void CarlaPlugin::setParameterValueByRealIndex(const int32_t rindex, const float value, const bool sendGui, const bool sendOsc, const bool sendCallback) noexcept { #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH CARLA_SAFE_ASSERT_RETURN(rindex > PARAMETER_MAX && rindex != PARAMETER_NULL,); switch (rindex) { case PARAMETER_ACTIVE: return setActive((value > 0.0f), sendOsc, sendCallback); case PARAMETER_CTRL_CHANNEL: return setCtrlChannel(int8_t(value), sendOsc, sendCallback); case PARAMETER_DRYWET: return setDryWet(value, sendOsc, sendCallback); case PARAMETER_VOLUME: return setVolume(value, sendOsc, sendCallback); case PARAMETER_BALANCE_LEFT: return setBalanceLeft(value, sendOsc, sendCallback); case PARAMETER_BALANCE_RIGHT: return setBalanceRight(value, sendOsc, sendCallback); case PARAMETER_PANNING: return setPanning(value, sendOsc, sendCallback); } #endif CARLA_SAFE_ASSERT_RETURN(rindex >= 0,); for (uint32_t i=0; i < pData->param.count; ++i) { if (pData->param.data[i].rindex == rindex) { //if (carla_isNotEqual(getParameterValue(i), value)) setParameterValue(i, value, sendGui, sendOsc, sendCallback); break; } } } void CarlaPlugin::setParameterMidiChannel(const uint32_t parameterId, const uint8_t channel, const bool sendOsc, const bool sendCallback) noexcept { if (pData->engineBridged) { CARLA_SAFE_ASSERT_RETURN(!sendOsc && !sendCallback,); } else { CARLA_SAFE_ASSERT_RETURN(sendOsc || sendCallback,); // never call this from RT } CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,); CARLA_SAFE_ASSERT_RETURN(channel < MAX_MIDI_CHANNELS,); if (pData->param.data[parameterId].midiChannel == channel) return; pData->param.data[parameterId].midiChannel = channel; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH pData->engine->callback(sendCallback, sendOsc, ENGINE_CALLBACK_PARAMETER_MIDI_CHANNEL_CHANGED, pData->id, static_cast(parameterId), channel, 0, 0.0f, nullptr); #endif } void CarlaPlugin::setParameterMappedControlIndex(const uint32_t parameterId, const int16_t index, const bool sendOsc, const bool sendCallback, const bool reconfigureNow) noexcept { if (pData->engineBridged) { CARLA_SAFE_ASSERT_RETURN(!sendOsc && !sendCallback,); } else { CARLA_SAFE_ASSERT_RETURN(sendOsc || sendCallback,); // never call this from RT } CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,); CARLA_SAFE_ASSERT_RETURN(index >= CONTROL_INDEX_NONE && index <= CONTROL_INDEX_MAX_ALLOWED,); ParameterData& paramData(pData->param.data[parameterId]); if (paramData.mappedControlIndex == index) return; const ParameterRanges& paramRanges(pData->param.ranges[parameterId]); if ((paramData.hints & PARAMETER_MAPPED_RANGES_SET) == 0x0) setParameterMappedRange(parameterId, paramRanges.min, paramRanges.max, true, true); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH char strBuf[STR_MAX+1]; carla_zeroChars(strBuf, STR_MAX+1); if (! getParameterName(parameterId, strBuf)) std::snprintf(strBuf, STR_MAX, "Param %u", parameterId); const uint portNameSize = pData->engine->getMaxPortNameSize(); if (portNameSize < STR_MAX) strBuf[portNameSize] = '\0'; // was learning something else before, stop that first if (pData->midiLearnParameterIndex >= 0 && pData->midiLearnParameterIndex != static_cast(parameterId)) { const int32_t oldParameterId = pData->midiLearnParameterIndex; pData->midiLearnParameterIndex = -1; CARLA_SAFE_ASSERT_RETURN(oldParameterId < static_cast(pData->param.count),); pData->param.data[oldParameterId].mappedControlIndex = CONTROL_INDEX_NONE; pData->engine->callback(true, true, ENGINE_CALLBACK_PARAMETER_MAPPED_CONTROL_INDEX_CHANGED, pData->id, oldParameterId, CONTROL_INDEX_NONE, 0, 0.0f, nullptr); } // mapping new parameter to CV if (index == CONTROL_INDEX_CV) { CARLA_SAFE_ASSERT_RETURN(pData->event.cvSourcePorts != nullptr,); CARLA_SAFE_ASSERT_RETURN(paramData.type == PARAMETER_INPUT,); CARLA_SAFE_ASSERT_RETURN(paramData.hints & PARAMETER_CAN_BE_CV_CONTROLLED,); CarlaEngineCVPort* const cvPort = (CarlaEngineCVPort*)pData->client->addPort(kEnginePortTypeCV, strBuf, true, parameterId); cvPort->setRange(paramData.mappedMinimum, paramData.mappedMaximum); pData->event.cvSourcePorts->addCVSource(cvPort, parameterId, reconfigureNow); } // unmapping from CV else if (paramData.mappedControlIndex == CONTROL_INDEX_CV) { CARLA_SAFE_ASSERT_RETURN(pData->event.cvSourcePorts != nullptr,); CARLA_SAFE_ASSERT(pData->client->removePort(kEnginePortTypeCV, strBuf, true)); CARLA_SAFE_ASSERT(pData->event.cvSourcePorts->removeCVSource(parameterId)); } // mapping to something new else if (paramData.mappedControlIndex == CONTROL_INDEX_NONE) { // when doing MIDI CC mapping, ensure ranges are within bounds if (paramData.mappedMinimum < paramRanges.min || paramData.mappedMaximum > paramRanges.max) setParameterMappedRange(parameterId, std::max(paramData.mappedMinimum, paramRanges.min), std::min(paramData.mappedMaximum, paramRanges.max), true, true); } #endif paramData.mappedControlIndex = index; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (index == CONTROL_INDEX_MIDI_LEARN) pData->midiLearnParameterIndex = static_cast(parameterId); else pData->midiLearnParameterIndex = -1; pData->engine->callback(sendCallback, sendOsc, ENGINE_CALLBACK_PARAMETER_MAPPED_CONTROL_INDEX_CHANGED, pData->id, static_cast(parameterId), index, 0, 0.0f, nullptr); #else return; // unused (void)reconfigureNow; #endif } void CarlaPlugin::setParameterMappedRange(const uint32_t parameterId, const float minimum, const float maximum, const bool sendOsc, const bool sendCallback) noexcept { if (pData->engineBridged) { CARLA_SAFE_ASSERT_RETURN(!sendOsc && !sendCallback,); } else { CARLA_SAFE_ASSERT_RETURN(sendOsc || sendCallback,); // never call this from RT } CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,); ParameterData& paramData(pData->param.data[parameterId]); if (carla_isEqual(paramData.mappedMinimum, minimum) && carla_isEqual(paramData.mappedMaximum, maximum) && (paramData.hints & PARAMETER_MAPPED_RANGES_SET) != 0x0) return; if (paramData.mappedControlIndex != CONTROL_INDEX_NONE && paramData.mappedControlIndex != CONTROL_INDEX_CV) { const ParameterRanges& paramRanges(pData->param.ranges[parameterId]); CARLA_SAFE_ASSERT_RETURN(minimum >= paramRanges.min,); CARLA_SAFE_ASSERT_RETURN(maximum <= paramRanges.max,); } paramData.hints |= PARAMETER_MAPPED_RANGES_SET; paramData.mappedMinimum = minimum; paramData.mappedMaximum = maximum; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (pData->event.cvSourcePorts != nullptr && paramData.mappedControlIndex == CONTROL_INDEX_CV) pData->event.cvSourcePorts->setCVSourceRange(parameterId, minimum, maximum); char strBuf[STR_MAX+1]; carla_zeroChars(strBuf, STR_MAX+1); std::snprintf(strBuf, STR_MAX, "%.12g:%.12g", static_cast(minimum), static_cast(maximum)); pData->engine->callback(sendCallback, sendOsc, ENGINE_CALLBACK_PARAMETER_MAPPED_RANGE_CHANGED, pData->id, static_cast(parameterId), 0, 0, 0.0f, strBuf); #endif } void CarlaPlugin::setCustomData(const char* const type, const char* const key, const char* const value, const bool) { CARLA_SAFE_ASSERT_RETURN(type != nullptr && type[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(key != nullptr && key[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(value != nullptr,); // Ignore some keys if (std::strcmp(type, CUSTOM_DATA_TYPE_STRING) == 0) { const PluginType ptype = getType(); if ((ptype == PLUGIN_INTERNAL && std::strncmp(key, "CarlaAlternateFile", 18) == 0) || (ptype == PLUGIN_DSSI && std::strcmp (key, "guiVisible") == 0) || (ptype == PLUGIN_LV2 && std::strncmp(key, "OSC:", 4) == 0)) return; } // Check if we already have this key for (LinkedList::Itenerator it = pData->custom.begin2(); it.valid(); it.next()) { CustomData& customData(it.getValue(kCustomDataFallbackNC)); CARLA_SAFE_ASSERT_CONTINUE(customData.isValid()); if (std::strcmp(customData.key, key) == 0) { if (customData.value != nullptr) delete[] customData.value; customData.value = carla_strdup(value); return; } } // Otherwise store it CustomData customData; customData.type = carla_strdup(type); customData.key = carla_strdup(key); customData.value = carla_strdup(value); pData->custom.append(customData); } void CarlaPlugin::setChunkData(const void* const data, const std::size_t dataSize) { CARLA_SAFE_ASSERT_RETURN(data != nullptr,); CARLA_SAFE_ASSERT_RETURN(dataSize > 0,); CARLA_SAFE_ASSERT(false); // this should never happen } void CarlaPlugin::setProgram(const int32_t index, const bool sendGui, const bool sendOsc, const bool sendCallback, const bool) noexcept { CARLA_SAFE_ASSERT_RETURN(index >= -1 && index < static_cast(pData->prog.count),); pData->prog.current = index; pData->engine->callback(sendCallback, sendOsc, ENGINE_CALLBACK_PROGRAM_CHANGED, pData->id, index, 0, 0, 0.0f, nullptr); // Change default parameter values if (index >= 0) { if (sendGui && (pData->hints & PLUGIN_HAS_CUSTOM_UI) != 0) uiProgramChange(static_cast(index)); switch (getType()) { case PLUGIN_SF2: case PLUGIN_SFZ: break; default: pData->updateParameterValues(this, sendCallback, sendOsc, true); break; } } } void CarlaPlugin::setMidiProgram(const int32_t index, const bool sendGui, const bool sendOsc, const bool sendCallback, const bool) noexcept { CARLA_SAFE_ASSERT_RETURN(index >= -1 && index < static_cast(pData->midiprog.count),); pData->midiprog.current = index; pData->engine->callback(sendCallback, sendOsc, ENGINE_CALLBACK_MIDI_PROGRAM_CHANGED, pData->id, index, 0, 0, 0.0f, nullptr); // Change default parameter values if (index >= 0) { if (sendGui && (pData->hints & PLUGIN_HAS_CUSTOM_UI) != 0) uiMidiProgramChange(static_cast(index)); switch (getType()) { case PLUGIN_SF2: case PLUGIN_SFZ: break; default: pData->updateParameterValues(this, sendCallback, sendOsc, true); break; } } } void CarlaPlugin::setMidiProgramById(const uint32_t bank, const uint32_t program, const bool sendGui, const bool sendOsc, const bool sendCallback) noexcept { for (uint32_t i=0; i < pData->midiprog.count; ++i) { if (pData->midiprog.data[i].bank == bank && pData->midiprog.data[i].program == program) return setMidiProgram(static_cast(i), sendGui, sendOsc, sendCallback); } } void CarlaPlugin::setProgramRT(const uint32_t uindex, const bool sendCallbackLater) noexcept { CARLA_SAFE_ASSERT_RETURN(uindex < pData->prog.count,); const int32_t index = static_cast(uindex); pData->prog.current = index; // Change default parameter values switch (getType()) { case PLUGIN_SF2: case PLUGIN_SFZ: break; default: pData->updateDefaultParameterValues(this); break; } pData->postponeProgramChangeRtEvent(sendCallbackLater, uindex); } void CarlaPlugin::setMidiProgramRT(const uint32_t uindex, const bool sendCallbackLater) noexcept { CARLA_SAFE_ASSERT_RETURN(uindex < pData->midiprog.count,); const int32_t index = static_cast(uindex); pData->midiprog.current = index; // Change default parameter values switch (getType()) { case PLUGIN_SF2: case PLUGIN_SFZ: break; default: pData->updateDefaultParameterValues(this); break; } pData->postponeMidiProgramChangeRtEvent(sendCallbackLater, uindex); } // ------------------------------------------------------------------- // Plugin state void CarlaPlugin::reloadPrograms(const bool) { } // ------------------------------------------------------------------- // Plugin processing void CarlaPlugin::activate() noexcept { CARLA_SAFE_ASSERT(! pData->active); } void CarlaPlugin::deactivate() noexcept { CARLA_SAFE_ASSERT(pData->active); } void CarlaPlugin::bufferSizeChanged(const uint32_t) { } void CarlaPlugin::sampleRateChanged(const double) { } void CarlaPlugin::offlineModeChanged(const bool) { } // ------------------------------------------------------------------- // Misc void CarlaPlugin::idle() { if (! pData->enabled) return; const bool hasUI(pData->hints & PLUGIN_HAS_CUSTOM_UI); const bool needsUiMainThread(pData->hints & PLUGIN_NEEDS_UI_MAIN_THREAD); const uint32_t latency(getLatencyInFrames()); if (pData->latency.frames != latency) { carla_stdout("latency changed to %i samples", latency); const ScopedSingleProcessLocker sspl(this, true); pData->client->setLatency(latency); #ifndef BUILD_BRIDGE pData->latency.recreateBuffers(pData->latency.channels, latency); #else pData->latency.frames = latency; #endif } ProtectedData::PostRtEvents::Access rtEvents(pData->postRtEvents); if (rtEvents.isEmpty()) return; for (RtLinkedList::Itenerator it = rtEvents.getDataIterator(); it.valid(); it.next()) { const PluginPostRtEvent& event(it.getValue(kPluginPostRtEventFallback)); CARLA_SAFE_ASSERT_CONTINUE(event.type != kPluginPostRtEventNull); switch (event.type) { case kPluginPostRtEventNull: { } break; case kPluginPostRtEventParameterChange: { // Update UI if (event.parameter.index >= 0 && hasUI) { if (needsUiMainThread) pData->postUiEvents.append(event); else uiParameterChange(static_cast(event.parameter.index), event.parameter.value); } if (event.sendCallback) { // Update Host pData->engine->callback(true, true, ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED, pData->id, event.parameter.index, 0, 0, event.parameter.value, nullptr); } } break; case kPluginPostRtEventProgramChange: { // Update UI if (hasUI) { if (needsUiMainThread) pData->postUiEvents.append(event); else uiProgramChange(event.program.index); } // Update param values for (uint32_t j=0; j < pData->param.count; ++j) { const float paramDefault(pData->param.ranges[j].def); const float paramValue(getParameterValue(j)); pData->engine->callback(true, true, ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED, pData->id, static_cast(j), 0, 0, paramValue, nullptr); pData->engine->callback(true, true, ENGINE_CALLBACK_PARAMETER_DEFAULT_CHANGED, pData->id, static_cast(j), 0, 0, paramDefault, nullptr); } if (event.sendCallback) { // Update Host pData->engine->callback(true, true, ENGINE_CALLBACK_PROGRAM_CHANGED, pData->id, static_cast(event.program.index), 0, 0, 0.0f, nullptr); } } break; case kPluginPostRtEventMidiProgramChange: { // Update UI if (hasUI) { if (needsUiMainThread) pData->postUiEvents.append(event); else uiMidiProgramChange(event.program.index); } // Update param values for (uint32_t j=0; j < pData->param.count; ++j) { const float paramDefault(pData->param.ranges[j].def); const float paramValue(getParameterValue(j)); pData->engine->callback(true, true, ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED, pData->id, static_cast(j), 0, 0, paramValue, nullptr); pData->engine->callback(true, true, ENGINE_CALLBACK_PARAMETER_DEFAULT_CHANGED, pData->id, static_cast(j), 0, 0, paramDefault, nullptr); } if (event.sendCallback) { // Update Host pData->engine->callback(true, true, ENGINE_CALLBACK_MIDI_PROGRAM_CHANGED, pData->id, static_cast(event.program.index), 0, 0, 0.0f, nullptr); } } break; case kPluginPostRtEventNoteOn: { CARLA_SAFE_ASSERT_BREAK(event.note.channel < MAX_MIDI_CHANNELS); CARLA_SAFE_ASSERT_BREAK(event.note.note < MAX_MIDI_NOTE); CARLA_SAFE_ASSERT_BREAK(event.note.velocity < MAX_MIDI_VALUE); // Update UI if (hasUI) { if (needsUiMainThread) pData->postUiEvents.append(event); else uiNoteOn(event.note.channel, event.note.note, event.note.velocity); } if (event.sendCallback) { // Update Host pData->engine->callback(true, true, ENGINE_CALLBACK_NOTE_ON, pData->id, static_cast(event.note.channel), static_cast(event.note.note), static_cast(event.note.velocity), 0.0f, nullptr); } } break; case kPluginPostRtEventNoteOff: { CARLA_SAFE_ASSERT_BREAK(event.note.channel < MAX_MIDI_CHANNELS); CARLA_SAFE_ASSERT_BREAK(event.note.note < MAX_MIDI_NOTE); // Update UI if (hasUI) { if (needsUiMainThread) pData->postUiEvents.append(event); else uiNoteOff(event.note.channel, event.note.note); } if (event.sendCallback) { // Update Host pData->engine->callback(true, true, ENGINE_CALLBACK_NOTE_OFF, pData->id, static_cast(event.note.channel), static_cast(event.note.note), 0, 0.0f, nullptr); } } break; case kPluginPostRtEventMidiLearn: { CARLA_SAFE_ASSERT_BREAK(event.midiLearn.cc < MAX_MIDI_VALUE); CARLA_SAFE_ASSERT_BREAK(event.midiLearn.channel < MAX_MIDI_CHANNELS); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (event.sendCallback) { pData->engine->callback(true, true, ENGINE_CALLBACK_PARAMETER_MAPPED_CONTROL_INDEX_CHANGED, pData->id, static_cast(event.midiLearn.parameter), static_cast(event.midiLearn.cc), 0, 0.0f, nullptr); pData->engine->callback(true, true, ENGINE_CALLBACK_PARAMETER_MIDI_CHANNEL_CHANGED, pData->id, static_cast(event.midiLearn.parameter), static_cast(event.midiLearn.channel), 0, 0.0f, nullptr); } #endif } break; } } } bool CarlaPlugin::tryLock(const bool forcedOffline) noexcept { if (forcedOffline) { #ifndef STOAT_TEST_BUILD pData->masterMutex.lock(); return true; #endif } return pData->masterMutex.tryLock(); } void CarlaPlugin::unlock() noexcept { pData->masterMutex.unlock(); } // ------------------------------------------------------------------- // Plugin buffers void CarlaPlugin::initBuffers() const noexcept { pData->audioIn.initBuffers(); pData->audioOut.initBuffers(); pData->cvIn.initBuffers(); pData->cvOut.initBuffers(); pData->event.initBuffers(); } void CarlaPlugin::clearBuffers() noexcept { pData->clearBuffers(); } // ------------------------------------------------------------------- // OSC stuff // FIXME void CarlaPlugin::handleOscMessage(const char* const, const int, const void* const, const char* const, const lo_message) { // do nothing } // ------------------------------------------------------------------- // MIDI events void CarlaPlugin::sendMidiSingleNote(const uint8_t channel, const uint8_t note, const uint8_t velo, const bool sendGui, const bool sendOsc, const bool sendCallback) { CARLA_SAFE_ASSERT_RETURN(channel < MAX_MIDI_CHANNELS,); CARLA_SAFE_ASSERT_RETURN(note < MAX_MIDI_NOTE,); CARLA_SAFE_ASSERT_RETURN(velo < MAX_MIDI_VALUE,); if (! pData->active) return; ExternalMidiNote extNote; extNote.channel = static_cast(channel); extNote.note = note; extNote.velo = velo; pData->extNotes.appendNonRT(extNote); if (sendGui && (pData->hints & PLUGIN_HAS_CUSTOM_UI) != 0) { if (velo > 0) uiNoteOn(channel, note, velo); else uiNoteOff(channel, note); } pData->engine->callback(sendCallback, sendOsc, (velo > 0) ? ENGINE_CALLBACK_NOTE_ON : ENGINE_CALLBACK_NOTE_OFF, pData->id, channel, note, velo, 0.0f, nullptr); } #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH void CarlaPlugin::postponeRtAllNotesOff() { if (pData->ctrlChannel < 0 || pData->ctrlChannel >= MAX_MIDI_CHANNELS) return; PluginPostRtEvent postEvent = { kPluginPostRtEventNoteOff, true, {} }; postEvent.note.channel = static_cast(pData->ctrlChannel); for (uint8_t i=0; i < MAX_MIDI_NOTE; ++i) { postEvent.note.note = i; pData->postRtEvents.appendRT(postEvent); } } #endif // ------------------------------------------------------------------- // UI Stuff void CarlaPlugin::setCustomUITitle(const char* const title) noexcept { pData->uiTitle = title; } void CarlaPlugin::showCustomUI(const bool yesNo) { if (yesNo) { CARLA_SAFE_ASSERT(false); } } void* CarlaPlugin::embedCustomUI(void*) { return nullptr; } void CarlaPlugin::uiIdle() { if (pData->hints & PLUGIN_NEEDS_UI_MAIN_THREAD) { // Update parameter outputs for (uint32_t i=0; i < pData->param.count; ++i) { if (pData->param.data[i].type == PARAMETER_OUTPUT) uiParameterChange(i, getParameterValue(i)); } const CarlaMutexLocker sl(pData->postUiEvents.mutex); for (LinkedList::Itenerator it = pData->postUiEvents.data.begin2(); it.valid(); it.next()) { const PluginPostRtEvent& event(it.getValue(kPluginPostRtEventFallback)); CARLA_SAFE_ASSERT_CONTINUE(event.type != kPluginPostRtEventNull); switch (event.type) { case kPluginPostRtEventNull: case kPluginPostRtEventMidiLearn: break; case kPluginPostRtEventParameterChange: uiParameterChange(static_cast(event.parameter.index), event.parameter.value); break; case kPluginPostRtEventProgramChange: uiProgramChange(event.program.index); break; case kPluginPostRtEventMidiProgramChange: uiMidiProgramChange(event.program.index); break; case kPluginPostRtEventNoteOn: uiNoteOn(event.note.channel, event.note.note, event.note.velocity); break; case kPluginPostRtEventNoteOff: uiNoteOff(event.note.channel, event.note.note); break; } } pData->postUiEvents.data.clear(); } #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (pData->transientTryCounter == 0) return; if (++pData->transientTryCounter % 10 != 0) return; if (pData->transientTryCounter >= 200) return; carla_stdout("Trying to get window..."); CarlaString uiTitle; if (pData->uiTitle.isNotEmpty()) { uiTitle = pData->uiTitle; } else { uiTitle = pData->name; uiTitle += " (GUI)"; } if (CarlaPluginUI::tryTransientWinIdMatch(getUiBridgeProcessId(), uiTitle, pData->engine->getOptions().frontendWinId, pData->transientFirstTry)) { pData->transientTryCounter = 0; pData->transientFirstTry = false; } #endif } void CarlaPlugin::uiParameterChange(const uint32_t index, const float value) noexcept { CARLA_SAFE_ASSERT_RETURN(index < getParameterCount(),); return; // unused (void)value; } void CarlaPlugin::uiProgramChange(const uint32_t index) noexcept { CARLA_SAFE_ASSERT_RETURN(index < getProgramCount(),); } void CarlaPlugin::uiMidiProgramChange(const uint32_t index) noexcept { CARLA_SAFE_ASSERT_RETURN(index < getMidiProgramCount(),); } void CarlaPlugin::uiNoteOn(const uint8_t channel, const uint8_t note, const uint8_t velo) noexcept { CARLA_SAFE_ASSERT_RETURN(channel < MAX_MIDI_CHANNELS,); CARLA_SAFE_ASSERT_RETURN(note < MAX_MIDI_NOTE,); CARLA_SAFE_ASSERT_RETURN(velo > 0 && velo < MAX_MIDI_VALUE,); } void CarlaPlugin::uiNoteOff(const uint8_t channel, const uint8_t note) noexcept { CARLA_SAFE_ASSERT_RETURN(channel < MAX_MIDI_CHANNELS,); CARLA_SAFE_ASSERT_RETURN(note < MAX_MIDI_NOTE,); } CarlaEngine* CarlaPlugin::getEngine() const noexcept { return pData->engine; } CarlaEngineClient* CarlaPlugin::getEngineClient() const noexcept { return pData->client; } CarlaEngineAudioPort* CarlaPlugin::getAudioInPort(const uint32_t index) const noexcept { return pData->audioIn.ports[index].port; } CarlaEngineAudioPort* CarlaPlugin::getAudioOutPort(const uint32_t index) const noexcept { return pData->audioOut.ports[index].port; } CarlaEngineCVPort* CarlaPlugin::getCVInPort(const uint32_t index) const noexcept { return pData->cvIn.ports[index].port; } CarlaEngineCVPort* CarlaPlugin::getCVOutPort(const uint32_t index) const noexcept { return pData->cvOut.ports[index].port; } CarlaEngineEventPort* CarlaPlugin::getDefaultEventInPort() const noexcept { return pData->event.portIn; } CarlaEngineEventPort* CarlaPlugin::getDefaultEventOutPort() const noexcept { return pData->event.portOut; } #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH void CarlaPlugin::checkForMidiLearn(EngineEvent& event) noexcept { if (pData->midiLearnParameterIndex < 0) return; if (event.ctrl.param == MIDI_CONTROL_BANK_SELECT || event.ctrl.param == MIDI_CONTROL_BANK_SELECT__LSB) return; if (event.ctrl.param >= MAX_MIDI_CONTROL) return; const uint32_t parameterId = static_cast(pData->midiLearnParameterIndex); CARLA_SAFE_ASSERT_UINT2_RETURN(parameterId < pData->param.count, parameterId, pData->param.count,); ParameterData& paramData(pData->param.data[parameterId]); CARLA_SAFE_ASSERT_INT_RETURN(paramData.mappedControlIndex == CONTROL_INDEX_MIDI_LEARN, paramData.mappedControlIndex,); event.ctrl.handled = true; paramData.mappedControlIndex = static_cast(event.ctrl.param); paramData.midiChannel = event.channel; pData->postponeMidiLearnRtEvent(true, parameterId, static_cast(event.ctrl.param), event.channel); pData->midiLearnParameterIndex = -1; } #endif void* CarlaPlugin::getNativeHandle() const noexcept { return nullptr; } const void* CarlaPlugin::getNativeDescriptor() const noexcept { return nullptr; } uintptr_t CarlaPlugin::getUiBridgeProcessId() const noexcept { return 0; } // ------------------------------------------------------------------- uint32_t CarlaPlugin::getPatchbayNodeId() const noexcept { return pData->nodeId; } void CarlaPlugin::setPatchbayNodeId(const uint32_t nodeId) noexcept { pData->nodeId = nodeId; } // ------------------------------------------------------------------- void CarlaPlugin::cloneLV2Files(const CarlaPlugin&) { carla_stderr2("Warning: cloneLV2Files() called for non-implemented type"); } void CarlaPlugin::restoreLV2State(const bool temporary) noexcept { carla_stderr2("Warning: restoreLV2State(%s) called for non-implemented type", bool2str(temporary)); } void CarlaPlugin::prepareForDeletion() noexcept { carla_debug("CarlaPlugin::prepareForDeletion"); const CarlaMutexLocker cml(pData->masterMutex); pData->client->deactivate(true); } void CarlaPlugin::waitForBridgeSaveSignal() noexcept { } // ------------------------------------------------------------------- // Scoped Disabler CarlaPlugin::ScopedDisabler::ScopedDisabler(CarlaPlugin* const plugin) noexcept : fPlugin(plugin), fWasEnabled(false) { CARLA_SAFE_ASSERT_RETURN(plugin != nullptr,); CARLA_SAFE_ASSERT_RETURN(plugin->pData != nullptr,); CARLA_SAFE_ASSERT_RETURN(plugin->pData->client != nullptr,); carla_debug("CarlaPlugin::ScopedDisabler(%p)", plugin); plugin->pData->masterMutex.lock(); if (plugin->pData->enabled) { fWasEnabled = true; plugin->pData->enabled = false; if (plugin->pData->client->isActive()) plugin->pData->client->deactivate(false); } } CarlaPlugin::ScopedDisabler::~ScopedDisabler() noexcept { CARLA_SAFE_ASSERT_RETURN(fPlugin != nullptr,); CARLA_SAFE_ASSERT_RETURN(fPlugin->pData != nullptr,); CARLA_SAFE_ASSERT_RETURN(fPlugin->pData->client != nullptr,); carla_debug("CarlaPlugin::~ScopedDisabler()"); if (fWasEnabled) { fPlugin->pData->enabled = true; fPlugin->pData->client->activate(); } fPlugin->pData->masterMutex.unlock(); } // ------------------------------------------------------------------- // Scoped Process Locker CarlaPlugin::ScopedSingleProcessLocker::ScopedSingleProcessLocker(CarlaPlugin* const plugin, const bool block) noexcept : fPlugin(plugin), fBlock(block) { CARLA_SAFE_ASSERT_RETURN(fPlugin != nullptr,); CARLA_SAFE_ASSERT_RETURN(fPlugin->pData != nullptr,); carla_debug("CarlaPlugin::ScopedSingleProcessLocker(%p, %s)", plugin, bool2str(block)); if (! fBlock) return; plugin->pData->singleMutex.lock(); } CarlaPlugin::ScopedSingleProcessLocker::~ScopedSingleProcessLocker() noexcept { CARLA_SAFE_ASSERT_RETURN(fPlugin != nullptr,); CARLA_SAFE_ASSERT_RETURN(fPlugin->pData != nullptr,); carla_debug("CarlaPlugin::~ScopedSingleProcessLocker()"); if (! fBlock) return; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (fPlugin->pData->singleMutex.wasTryLockCalled()) fPlugin->pData->needsReset = true; #endif fPlugin->pData->singleMutex.unlock(); } // ------------------------------------------------------------------- CARLA_BACKEND_END_NAMESPACE Carla-2.4.2/source/backend/plugin/CarlaPluginAU.cpp000066400000000000000000000026071420416754300220740ustar00rootroot00000000000000/* * Carla AU Plugin * Copyright (C) 2014-2020 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "CarlaPlugin.hpp" #include "CarlaEngine.hpp" #include "CarlaUtils.hpp" CARLA_BACKEND_START_NAMESPACE // ------------------------------------------------------------------------------------------------------------------- CarlaPluginPtr CarlaPlugin::newAU(const Initializer& init) { carla_debug("CarlaPlugin::newAU({%p, \"%s\", \"%s\", \"%s\", " P_INT64 "})", init.engine, init.filename, init.name, init.label, init.uniqueId); #if defined(CARLA_OS_MAC) return newJuce(init, "AU"); #else init.engine->setLastError("AU support not available"); return nullptr; #endif } // ------------------------------------------------------------------------------------------------------------------- CARLA_BACKEND_END_NAMESPACE Carla-2.4.2/source/backend/plugin/CarlaPluginBridge.cpp000066400000000000000000003576351420416754300230010ustar00rootroot00000000000000/* * Carla Plugin Bridge * Copyright (C) 2011-2022 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "CarlaPluginInternal.hpp" #include "CarlaBackendUtils.hpp" #include "CarlaBase64Utils.hpp" #include "CarlaBridgeUtils.hpp" #include "CarlaEngineUtils.hpp" #include "CarlaMathUtils.hpp" #include "CarlaPipeUtils.hpp" #include "CarlaScopeUtils.hpp" #include "CarlaShmUtils.hpp" #include "CarlaThread.hpp" #include "jackbridge/JackBridge.hpp" #include #include "water/files/File.h" #include "water/misc/Time.h" #include "water/threads/ChildProcess.h" // --------------------------------------------------------------------------------------------------------------------- using water::ChildProcess; using water::File; using water::String; using water::StringArray; using water::Time; CARLA_BACKEND_START_NAMESPACE // --------------------------------------------------------------------------------------------------------------------- // Fallback data static const ExternalMidiNote kExternalMidiNoteFallback = { -1, 0, 0 }; // --------------------------------------------------------------------------------------------------------------------- static String findWinePrefix(const String filename, const int recursionLimit = 10) { if (recursionLimit == 0 || filename.length() < 5 || ! filename.contains("/")) return ""; const String path(filename.upToLastOccurrenceOf("/", false, false)); if (File(path + "/dosdevices").isDirectory()) return path; return findWinePrefix(path, recursionLimit-1); } // --------------------------------------------------------------------------------------------------------------------- struct BridgeParamInfo { float value; CarlaString name; CarlaString symbol; CarlaString unit; BridgeParamInfo() noexcept : value(0.0f), name(), symbol(), unit() {} CARLA_DECLARE_NON_COPY_STRUCT(BridgeParamInfo) }; // --------------------------------------------------------------------------------------------------------------------- class CarlaPluginBridgeThread : public CarlaThread { public: CarlaPluginBridgeThread(CarlaEngine* const engine, CarlaPlugin* const plugin) noexcept : CarlaThread("CarlaPluginBridgeThread"), kEngine(engine), kPlugin(plugin), fBinaryArchName(), fBridgeBinary(), fLabel(), fShmIds(), #ifndef CARLA_OS_WIN fWinePrefix(), #endif fProcess() {} void setData( #ifndef CARLA_OS_WIN const char* const winePrefix, #endif const char* const binaryArchName, const char* const bridgeBinary, const char* const label, const char* const shmIds) noexcept { CARLA_SAFE_ASSERT_RETURN(bridgeBinary != nullptr && bridgeBinary[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(shmIds != nullptr && shmIds[0] != '\0',); CARLA_SAFE_ASSERT(! isThreadRunning()); #ifndef CARLA_OS_WIN fWinePrefix = winePrefix; #endif fBinaryArchName = binaryArchName; fBridgeBinary = bridgeBinary; fShmIds = shmIds; if (label != nullptr) fLabel = label; if (fLabel.isEmpty()) fLabel = "(none)"; } uintptr_t getProcessPID() const noexcept { CARLA_SAFE_ASSERT_RETURN(fProcess != nullptr, 0); return (uintptr_t)fProcess->getPID(); } protected: void run() { if (fProcess == nullptr) { fProcess = new ChildProcess(); } else if (fProcess->isRunning()) { carla_stderr("CarlaPluginBridgeThread::run() - already running"); } char strBuf[STR_MAX+1]; strBuf[STR_MAX] = '\0'; const EngineOptions& options(kEngine->getOptions()); String filename(kPlugin->getFilename()); if (filename.isEmpty()) filename = "(none)"; StringArray arguments; #ifndef CARLA_OS_WIN // start with "wine" if needed if (fBridgeBinary.endsWithIgnoreCase(".exe")) { String wineCMD; if (options.wine.executable != nullptr && options.wine.executable[0] != '\0') { wineCMD = options.wine.executable; if (fBridgeBinary.endsWithIgnoreCase("64.exe") && options.wine.executable[0] == CARLA_OS_SEP && File(wineCMD + "64").existsAsFile()) wineCMD += "64"; } else { wineCMD = "wine"; } arguments.add(wineCMD); } #endif // setup binary arch ChildProcess::Type childType; #ifdef CARLA_OS_MAC if (fBinaryArchName == "arm64") childType = ChildProcess::TypeARM; else if (fBinaryArchName == "x86_64") childType = ChildProcess::TypeIntel; else #endif childType = ChildProcess::TypeAny; // bridge binary arguments.add(fBridgeBinary); // plugin type arguments.add(getPluginTypeAsString(kPlugin->getType())); // filename arguments.add(filename); // label arguments.add(fLabel); // uniqueId arguments.add(String(static_cast(kPlugin->getUniqueId()))); bool started; { const ScopedEngineEnvironmentLocker _seel(kEngine); #ifdef CARLA_OS_LINUX const CarlaScopedEnvVar sev1("LD_LIBRARY_PATH", nullptr); const CarlaScopedEnvVar sev2("LD_PRELOAD", nullptr); #endif carla_setenv("ENGINE_OPTION_FORCE_STEREO", bool2str(options.forceStereo)); carla_setenv("ENGINE_OPTION_PREFER_PLUGIN_BRIDGES", bool2str(options.preferPluginBridges)); carla_setenv("ENGINE_OPTION_PREFER_UI_BRIDGES", bool2str(options.preferUiBridges)); carla_setenv("ENGINE_OPTION_UIS_ALWAYS_ON_TOP", bool2str(options.uisAlwaysOnTop)); std::snprintf(strBuf, STR_MAX, "%u", options.maxParameters); carla_setenv("ENGINE_OPTION_MAX_PARAMETERS", strBuf); std::snprintf(strBuf, STR_MAX, "%u", options.uiBridgesTimeout); carla_setenv("ENGINE_OPTION_UI_BRIDGES_TIMEOUT",strBuf); if (options.pathLADSPA != nullptr) carla_setenv("ENGINE_OPTION_PLUGIN_PATH_LADSPA", options.pathLADSPA); else carla_setenv("ENGINE_OPTION_PLUGIN_PATH_LADSPA", ""); if (options.pathDSSI != nullptr) carla_setenv("ENGINE_OPTION_PLUGIN_PATH_DSSI", options.pathDSSI); else carla_setenv("ENGINE_OPTION_PLUGIN_PATH_DSSI", ""); if (options.pathLV2 != nullptr) carla_setenv("ENGINE_OPTION_PLUGIN_PATH_LV2", options.pathLV2); else carla_setenv("ENGINE_OPTION_PLUGIN_PATH_LV2", ""); if (options.pathVST2 != nullptr) carla_setenv("ENGINE_OPTION_PLUGIN_PATH_VST2", options.pathVST2); else carla_setenv("ENGINE_OPTION_PLUGIN_PATH_VST2", ""); if (options.pathVST3 != nullptr) carla_setenv("ENGINE_OPTION_PLUGIN_PATH_VST3", options.pathVST3); else carla_setenv("ENGINE_OPTION_PLUGIN_PATH_VST3", ""); if (options.pathSF2 != nullptr) carla_setenv("ENGINE_OPTION_PLUGIN_PATH_SF2", options.pathSF2); else carla_setenv("ENGINE_OPTION_PLUGIN_PATH_SF2", ""); if (options.pathSFZ != nullptr) carla_setenv("ENGINE_OPTION_PLUGIN_PATH_SFZ", options.pathSFZ); else carla_setenv("ENGINE_OPTION_PLUGIN_PATH_SFZ", ""); if (options.pathJSFX != nullptr) carla_setenv("ENGINE_OPTION_PLUGIN_PATH_JSFX", options.pathJSFX); else carla_setenv("ENGINE_OPTION_PLUGIN_PATH_JSFX", ""); if (options.binaryDir != nullptr) carla_setenv("ENGINE_OPTION_PATH_BINARIES", options.binaryDir); else carla_setenv("ENGINE_OPTION_PATH_BINARIES", ""); if (options.resourceDir != nullptr) carla_setenv("ENGINE_OPTION_PATH_RESOURCES", options.resourceDir); else carla_setenv("ENGINE_OPTION_PATH_RESOURCES", ""); carla_setenv("ENGINE_OPTION_PREVENT_BAD_BEHAVIOUR", bool2str(options.preventBadBehaviour)); std::snprintf(strBuf, STR_MAX, P_UINTPTR, options.frontendWinId); carla_setenv("ENGINE_OPTION_FRONTEND_WIN_ID", strBuf); carla_setenv("ENGINE_BRIDGE_SHM_IDS", fShmIds.toRawUTF8()); #ifndef CARLA_OS_WIN if (fWinePrefix.isNotEmpty()) { carla_setenv("WINEDEBUG", "-all"); carla_setenv("WINEPREFIX", fWinePrefix.toRawUTF8()); if (options.wine.rtPrio) { carla_setenv("STAGING_SHARED_MEMORY", "1"); carla_setenv("WINE_RT_POLICY", "FF"); std::snprintf(strBuf, STR_MAX, "%i", options.wine.baseRtPrio); carla_setenv("STAGING_RT_PRIORITY_BASE", strBuf); carla_setenv("WINE_RT", strBuf); carla_setenv("WINE_RT_PRIO", strBuf); std::snprintf(strBuf, STR_MAX, "%i", options.wine.serverRtPrio); carla_setenv("STAGING_RT_PRIORITY_SERVER", strBuf); carla_setenv("WINE_SVR_RT", strBuf); carla_stdout("Using WINEPREFIX '%s', with base RT prio %i and server RT prio %i", fWinePrefix.toRawUTF8(), options.wine.baseRtPrio, options.wine.serverRtPrio); } else { carla_unsetenv("STAGING_SHARED_MEMORY"); carla_unsetenv("WINE_RT_POLICY"); carla_unsetenv("STAGING_RT_PRIORITY_BASE"); carla_unsetenv("STAGING_RT_PRIORITY_SERVER"); carla_unsetenv("WINE_RT"); carla_unsetenv("WINE_RT_PRIO"); carla_unsetenv("WINE_SVR_RT"); carla_stdout("Using WINEPREFIX '%s', without RT priorities", fWinePrefix.toRawUTF8()); } } #endif carla_stdout("Starting plugin bridge, command is:\n%s \"%s\" \"%s\" \"%s\" " P_INT64, fBridgeBinary.toRawUTF8(), getPluginTypeAsString(kPlugin->getType()), filename.toRawUTF8(), fLabel.toRawUTF8(), kPlugin->getUniqueId()); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH const File projFolder(kEngine->getCurrentProjectFolder()); if (projFolder.isNotNull()) { const File oldFolder(File::getCurrentWorkingDirectory()); projFolder.setAsCurrentWorkingDirectory(); started = fProcess->start(arguments, childType); oldFolder.setAsCurrentWorkingDirectory(); } else #endif { started = fProcess->start(arguments, childType); } } if (! started) { carla_stdout("failed!"); fProcess = nullptr; return; } for (; fProcess->isRunning() && ! shouldThreadExit();) carla_sleep(1); // we only get here if bridge crashed or thread asked to exit if (fProcess->isRunning() && shouldThreadExit()) { fProcess->waitForProcessToFinish(2000); if (fProcess->isRunning()) { carla_stdout("CarlaPluginBridgeThread::run() - bridge refused to close, force kill now"); fProcess->kill(); } else { carla_stdout("CarlaPluginBridgeThread::run() - bridge auto-closed successfully"); } } else { // forced quit, may have crashed if (fProcess->getExitCodeAndClearPID() != 0) { carla_stderr("CarlaPluginBridgeThread::run() - bridge crashed"); CarlaString errorString("Plugin '" + CarlaString(kPlugin->getName()) + "' has crashed!\n" "Saving now will lose its current settings.\n" "Please remove this plugin, and not rely on it from this point."); kEngine->callback(true, true, ENGINE_CALLBACK_ERROR, kPlugin->getId(), 0, 0, 0, 0.0f, errorString); } } fProcess = nullptr; } private: CarlaEngine* const kEngine; CarlaPlugin* const kPlugin; String fBinaryArchName; String fBridgeBinary; String fLabel; String fShmIds; #ifndef CARLA_OS_WIN String fWinePrefix; #endif CarlaScopedPointer fProcess; CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaPluginBridgeThread) }; // --------------------------------------------------------------------------------------------------------------------- class CarlaPluginBridge : public CarlaPlugin { public: CarlaPluginBridge(CarlaEngine* const engine, const uint id, const BinaryType btype, const PluginType ptype) : CarlaPlugin(engine, id), fBinaryType(btype), fPluginType(ptype), fBridgeVersion(6), // before kPluginBridgeNonRtServerVersion was a thing, API was at 6 fInitiated(false), fInitError(false), fSaved(true), fTimedOut(false), fTimedError(false), fBufferSize(engine->getBufferSize()), fProcWaitTime(0), fPendingEmbedCustomUI(0), fBridgeBinary(), fBridgeThread(engine, this), fShmAudioPool(), fShmRtClientControl(), fShmNonRtClientControl(), fShmNonRtServerControl(), #ifndef CARLA_OS_WIN fWinePrefix(), #endif fReceivingParamText(), fInfo(), fUniqueId(0), fLatency(0), fParams(nullptr) { carla_debug("CarlaPluginBridge::CarlaPluginBridge(%p, %i, %s, %s)", engine, id, BinaryType2Str(btype), PluginType2Str(ptype)); pData->hints |= PLUGIN_IS_BRIDGE; } ~CarlaPluginBridge() override { carla_debug("CarlaPluginBridge::~CarlaPluginBridge()"); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // close UI if (pData->hints & PLUGIN_HAS_CUSTOM_UI) pData->transientTryCounter = 0; #endif pData->singleMutex.lock(); pData->masterMutex.lock(); if (pData->client != nullptr && pData->client->isActive()) pData->client->deactivate(true); if (pData->active) { deactivate(); pData->active = false; } if (fBridgeThread.isThreadRunning()) { fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientQuit); fShmNonRtClientControl.commitWrite(); fShmRtClientControl.writeOpcode(kPluginBridgeRtClientQuit); fShmRtClientControl.commitWrite(); if (! fTimedOut) waitForClient("stopping", 3000); } fBridgeThread.stopThread(3000); fShmNonRtServerControl.clear(); fShmNonRtClientControl.clear(); fShmRtClientControl.clear(); fShmAudioPool.clear(); clearBuffers(); fInfo.chunk.clear(); } // ------------------------------------------------------------------- // Information (base) BinaryType getBinaryType() const noexcept override { return fBinaryType; } PluginType getType() const noexcept override { return fPluginType; } PluginCategory getCategory() const noexcept override { return fInfo.category; } int64_t getUniqueId() const noexcept override { return fUniqueId; } uint32_t getLatencyInFrames() const noexcept override { return fLatency; } // ------------------------------------------------------------------- // Information (count) uint32_t getMidiInCount() const noexcept override { return fInfo.mIns; } uint32_t getMidiOutCount() const noexcept override { return fInfo.mOuts; } // ------------------------------------------------------------------- // Information (current data) std::size_t getChunkData(void** const dataPtr) noexcept override { CARLA_SAFE_ASSERT_RETURN(pData->options & PLUGIN_OPTION_USE_CHUNKS, 0); CARLA_SAFE_ASSERT_RETURN(dataPtr != nullptr, 0); waitForSaved(); CARLA_SAFE_ASSERT_RETURN(fInfo.chunk.size() > 0, 0); #ifdef CARLA_PROPER_CPP11_SUPPORT *dataPtr = fInfo.chunk.data(); #else *dataPtr = &fInfo.chunk.front(); #endif return fInfo.chunk.size(); } // ------------------------------------------------------------------- // Information (per-plugin data) uint getOptionsAvailable() const noexcept override { return fInfo.optionsAvailable; } float getParameterValue(const uint32_t parameterId) const noexcept override { CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, 0.0f); return fParams[parameterId].value; } bool getLabel(char* const strBuf) const noexcept override { std::strncpy(strBuf, fInfo.label, STR_MAX); return true; } bool getMaker(char* const strBuf) const noexcept override { std::strncpy(strBuf, fInfo.maker, STR_MAX); return true; } bool getCopyright(char* const strBuf) const noexcept override { std::strncpy(strBuf, fInfo.copyright, STR_MAX); return true; } bool getRealName(char* const strBuf) const noexcept override { std::strncpy(strBuf, fInfo.name, STR_MAX); return true; } bool getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false); std::strncpy(strBuf, fParams[parameterId].name.buffer(), STR_MAX); return true; } bool getParameterText(const uint32_t parameterId, char* const strBuf) noexcept override { CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false); CARLA_SAFE_ASSERT_RETURN(! fReceivingParamText.isCurrentlyWaitingData(), false); const int32_t parameterIdi = static_cast(parameterId); fReceivingParamText.setTargetData(parameterIdi, strBuf); { const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientGetParameterText); fShmNonRtClientControl.writeInt(parameterIdi); fShmNonRtClientControl.commitWrite(); } if (waitForParameterText()) return true; std::snprintf(strBuf, STR_MAX, "%.12g", static_cast(fParams[parameterId].value)); return false; } bool getParameterSymbol(const uint32_t parameterId, char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false); std::strncpy(strBuf, fParams[parameterId].symbol.buffer(), STR_MAX); return true; } bool getParameterUnit(const uint32_t parameterId, char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false); std::strncpy(strBuf, fParams[parameterId].unit.buffer(), STR_MAX); return true; } // ------------------------------------------------------------------- // Set data (state) void prepareForSave(bool) noexcept override { fSaved = false; { const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientPrepareForSave); fShmNonRtClientControl.commitWrite(); } } bool waitForParameterText() { bool success; if (fReceivingParamText.wasDataReceived(&success)) return success; const uint32_t timeoutEnd = Time::getMillisecondCounter() + 500; // 500 ms const bool needsEngineIdle = pData->engine->getType() != kEngineTypePlugin; for (; Time::getMillisecondCounter() < timeoutEnd && fBridgeThread.isThreadRunning();) { if (fReceivingParamText.wasDataReceived(&success)) return success; if (needsEngineIdle) pData->engine->idle(); carla_msleep(5); } if (! fBridgeThread.isThreadRunning()) { carla_stderr("CarlaPluginBridge::waitForParameterText() - Bridge is not running"); return false; } carla_stderr("CarlaPluginBridge::waitForParameterText() - Timeout while requesting text"); return false; } void waitForSaved() { if (fSaved) return; // TODO: only wait 1 minute for NI plugins const uint32_t timeoutEnd = Time::getMillisecondCounter() + 60*1000; // 60 secs, 1 minute const bool needsEngineIdle = pData->engine->getType() != kEngineTypePlugin; for (; Time::getMillisecondCounter() < timeoutEnd && fBridgeThread.isThreadRunning();) { pData->engine->callback(true, true, ENGINE_CALLBACK_IDLE, 0, 0, 0, 0, 0.0f, nullptr); if (needsEngineIdle) pData->engine->idle(); if (fSaved) break; carla_msleep(20); } if (! fBridgeThread.isThreadRunning()) return carla_stderr("CarlaPluginBridge::waitForSaved() - Bridge is not running"); if (! fSaved) return carla_stderr("CarlaPluginBridge::waitForSaved() - Timeout while requesting save state"); } // ------------------------------------------------------------------- // Set data (internal stuff) void setOption(const uint option, const bool yesNo, const bool sendCallback) override { { const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientSetOption); fShmNonRtClientControl.writeUInt(option); fShmNonRtClientControl.writeBool(yesNo); fShmNonRtClientControl.commitWrite(); } CarlaPlugin::setOption(option, yesNo, sendCallback); } void setCtrlChannel(const int8_t channel, const bool sendOsc, const bool sendCallback) noexcept override { CARLA_SAFE_ASSERT_RETURN(sendOsc || sendCallback,); { const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientSetCtrlChannel); fShmNonRtClientControl.writeShort(channel); fShmNonRtClientControl.commitWrite(); } CarlaPlugin::setCtrlChannel(channel, sendOsc, sendCallback); } void setName(const char* const newName) override { CarlaPlugin::setName(newName); if (pData->uiTitle.isEmpty() && fBridgeVersion >= 8) _setUiTitleFromName(); } // ------------------------------------------------------------------- // Set data (plugin-specific stuff) void setParameterValue(const uint32_t parameterId, const float value, const bool sendGui, const bool sendOsc, const bool sendCallback) noexcept override { CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,); CARLA_SAFE_ASSERT_RETURN(sendGui || sendOsc || sendCallback,); const float fixedValue(pData->param.getFixedValue(parameterId, value)); fParams[parameterId].value = fixedValue; { const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientSetParameterValue); fShmNonRtClientControl.writeUInt(parameterId); fShmNonRtClientControl.writeFloat(value); fShmNonRtClientControl.commitWrite(); fShmNonRtClientControl.waitIfDataIsReachingLimit(); } CarlaPlugin::setParameterValue(parameterId, fixedValue, sendGui, sendOsc, sendCallback); } void setParameterValueRT(const uint32_t parameterId, const float value, const bool sendCallbackLater) noexcept override { CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,); const float fixedValue(pData->param.getFixedValue(parameterId, value)); fParams[parameterId].value = fixedValue; { const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientSetParameterValue); fShmNonRtClientControl.writeUInt(parameterId); fShmNonRtClientControl.writeFloat(value); fShmNonRtClientControl.commitWrite(); fShmNonRtClientControl.waitIfDataIsReachingLimit(); } CarlaPlugin::setParameterValueRT(parameterId, fixedValue, sendCallbackLater); } void setParameterMidiChannel(const uint32_t parameterId, const uint8_t channel, const bool sendOsc, const bool sendCallback) noexcept override { CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,); CARLA_SAFE_ASSERT_RETURN(channel < MAX_MIDI_CHANNELS,); CARLA_SAFE_ASSERT_RETURN(sendOsc || sendCallback,); { const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientSetParameterMidiChannel); fShmNonRtClientControl.writeUInt(parameterId); fShmNonRtClientControl.writeByte(channel); fShmNonRtClientControl.commitWrite(); } CarlaPlugin::setParameterMidiChannel(parameterId, channel, sendOsc, sendCallback); } void setParameterMappedControlIndex(const uint32_t parameterId, const int16_t index, const bool sendOsc, const bool sendCallback, const bool reconfigureNow) noexcept override { CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,); CARLA_SAFE_ASSERT_RETURN(index >= CONTROL_INDEX_NONE && index <= CONTROL_INDEX_MAX_ALLOWED,); CARLA_SAFE_ASSERT_RETURN(sendOsc || sendCallback,); { const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientSetParameterMappedControlIndex); fShmNonRtClientControl.writeUInt(parameterId); fShmNonRtClientControl.writeShort(index); fShmNonRtClientControl.commitWrite(); } CarlaPlugin::setParameterMappedControlIndex(parameterId, index, sendOsc, sendCallback, reconfigureNow); } void setParameterMappedRange(const uint32_t parameterId, const float minimum, const float maximum, const bool sendOsc, const bool sendCallback) noexcept override { CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,); CARLA_SAFE_ASSERT_RETURN(sendOsc || sendCallback,); // kPluginBridgeNonRtClientSetParameterMappedRange was added in API 7 if (fBridgeVersion >= 7) { const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientSetParameterMappedRange); fShmNonRtClientControl.writeUInt(parameterId); fShmNonRtClientControl.writeFloat(minimum); fShmNonRtClientControl.writeFloat(maximum); fShmNonRtClientControl.commitWrite(); } CarlaPlugin::setParameterMappedRange(parameterId, minimum, maximum, sendOsc, sendCallback); } void setProgram(const int32_t index, const bool sendGui, const bool sendOsc, const bool sendCallback, const bool doingInit) noexcept override { CARLA_SAFE_ASSERT_RETURN(index >= -1 && index < static_cast(pData->prog.count),); CARLA_SAFE_ASSERT_RETURN(sendGui || sendOsc || sendCallback || doingInit,); { const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientSetProgram); fShmNonRtClientControl.writeInt(index); fShmNonRtClientControl.commitWrite(); } CarlaPlugin::setProgram(index, sendGui, sendOsc, sendCallback, doingInit); } void setProgramRT(const uint32_t index, const bool sendCallbackLater) noexcept override { CARLA_SAFE_ASSERT_RETURN(index < pData->prog.count,); { const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientSetProgram); fShmNonRtClientControl.writeInt(static_cast(index)); fShmNonRtClientControl.commitWrite(); } CarlaPlugin::setProgramRT(index, sendCallbackLater); } void setMidiProgram(const int32_t index, const bool sendGui, const bool sendOsc, const bool sendCallback, const bool doingInit) noexcept override { CARLA_SAFE_ASSERT_RETURN(index >= -1 && index < static_cast(pData->midiprog.count),); CARLA_SAFE_ASSERT_RETURN(sendGui || sendOsc || sendCallback || doingInit,); { const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientSetMidiProgram); fShmNonRtClientControl.writeInt(index); fShmNonRtClientControl.commitWrite(); } CarlaPlugin::setMidiProgram(index, sendGui, sendOsc, sendCallback, doingInit); } void setMidiProgramRT(const uint32_t uindex, const bool sendCallbackLater) noexcept override { CARLA_SAFE_ASSERT_RETURN(uindex < pData->midiprog.count,); { const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientSetMidiProgram); fShmNonRtClientControl.writeInt(static_cast(uindex)); fShmNonRtClientControl.commitWrite(); } CarlaPlugin::setMidiProgramRT(uindex, sendCallbackLater); } void setCustomData(const char* const type, const char* const key, const char* const value, const bool sendGui) override { CARLA_SAFE_ASSERT_RETURN(type != nullptr && type[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(key != nullptr && key[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(value != nullptr,); if (std::strcmp(type, CUSTOM_DATA_TYPE_PROPERTY) == 0) return CarlaPlugin::setCustomData(type, key, value, sendGui); if (std::strcmp(type, CUSTOM_DATA_TYPE_STRING) == 0 && std::strcmp(key, "__CarlaPingOnOff__") == 0) { const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientPingOnOff); fShmNonRtClientControl.writeBool(std::strcmp(value, "true") == 0); fShmNonRtClientControl.commitWrite(); return; } const uint32_t typeLen = static_cast(std::strlen(type)); const uint32_t keyLen = static_cast(std::strlen(key)); const uint32_t valueLen = static_cast(std::strlen(value)); /* if (valueLen > 16384) fShmNonRtClientControl.waitIfDataIsReachingLimit(); */ { const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientSetCustomData); fShmNonRtClientControl.writeUInt(typeLen); fShmNonRtClientControl.writeCustomData(type, typeLen); fShmNonRtClientControl.writeUInt(keyLen); fShmNonRtClientControl.writeCustomData(key, keyLen); fShmNonRtClientControl.writeUInt(valueLen); if (valueLen > 0) { if (valueLen > 16384) { String filePath(File::getSpecialLocation(File::tempDirectory).getFullPathName()); filePath += CARLA_OS_SEP_STR ".CarlaCustomData_"; filePath += fShmAudioPool.getFilenameSuffix(); if (File(filePath).replaceWithText(value)) { const uint32_t ulength = static_cast(filePath.length()); fShmNonRtClientControl.writeUInt(ulength); fShmNonRtClientControl.writeCustomData(filePath.toRawUTF8(), ulength); } else { fShmNonRtClientControl.writeUInt(0); } } else { fShmNonRtClientControl.writeCustomData(value, valueLen); } } fShmNonRtClientControl.commitWrite(); } CarlaPlugin::setCustomData(type, key, value, sendGui); } void setChunkData(const void* const data, const std::size_t dataSize) override { CARLA_SAFE_ASSERT_RETURN(pData->options & PLUGIN_OPTION_USE_CHUNKS,); CARLA_SAFE_ASSERT_RETURN(data != nullptr,); CARLA_SAFE_ASSERT_RETURN(dataSize > 0,); CarlaString dataBase64(CarlaString::asBase64(data, dataSize)); CARLA_SAFE_ASSERT_RETURN(dataBase64.length() > 0,); String filePath(File::getSpecialLocation(File::tempDirectory).getFullPathName()); filePath += CARLA_OS_SEP_STR ".CarlaChunk_"; filePath += fShmAudioPool.getFilenameSuffix(); if (File(filePath).replaceWithText(dataBase64.buffer())) { const uint32_t ulength = static_cast(filePath.length()); const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientSetChunkDataFile); fShmNonRtClientControl.writeUInt(ulength); fShmNonRtClientControl.writeCustomData(filePath.toRawUTF8(), ulength); fShmNonRtClientControl.commitWrite(); } // save data internally as well fInfo.chunk.resize(dataSize); #ifdef CARLA_PROPER_CPP11_SUPPORT std::memcpy(fInfo.chunk.data(), data, dataSize); #else std::memcpy(&fInfo.chunk.front(), data, dataSize); #endif } // ------------------------------------------------------------------- // Set ui stuff void setCustomUITitle(const char* const title) noexcept override { carla_debug("CarlaPluginBridge::setCustomUITitle(%s)", title); if (fBridgeVersion >= 8) { const uint32_t size = static_cast(std::strlen(title)); const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientSetWindowTitle); fShmNonRtClientControl.writeUInt(size); fShmNonRtClientControl.writeCustomData(title, size); fShmNonRtClientControl.commitWrite(); } CarlaPlugin::setCustomUITitle(title); } void showCustomUI(const bool yesNo) override { if (yesNo && pData->uiTitle.isEmpty() && fBridgeVersion >= 8) _setUiTitleFromName(); { const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(yesNo ? kPluginBridgeNonRtClientShowUI : kPluginBridgeNonRtClientHideUI); fShmNonRtClientControl.commitWrite(); } #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (yesNo) { pData->tryTransient(); } else { pData->transientTryCounter = 0; } #endif } void* embedCustomUI(void* const ptr) override { if (fBridgeVersion < 9) return nullptr; fPendingEmbedCustomUI = 0; { const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientEmbedUI); fShmNonRtClientControl.writeULong(reinterpret_cast(ptr)); fShmNonRtClientControl.commitWrite(); } const uint32_t timeoutEnd = Time::getMillisecondCounter() + 15*1000; // 15 secs const bool needsEngineIdle = pData->engine->getType() != kEngineTypePlugin; for (; Time::getMillisecondCounter() < timeoutEnd && fBridgeThread.isThreadRunning();) { pData->engine->callback(true, true, ENGINE_CALLBACK_IDLE, 0, 0, 0, 0, 0.0f, nullptr); if (needsEngineIdle) pData->engine->idle(); if (fPendingEmbedCustomUI != 0) { if (fPendingEmbedCustomUI == 1) fPendingEmbedCustomUI = 0; break; } carla_msleep(20); } return reinterpret_cast(fPendingEmbedCustomUI); } void idle() override { if (fBridgeThread.isThreadRunning()) { if (fInitiated && fTimedOut && pData->active) setActive(false, true, true); { const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientPing); fShmNonRtClientControl.commitWrite(); } try { handleNonRtData(); } CARLA_SAFE_EXCEPTION("handleNonRtData"); } else if (fInitiated) { fTimedOut = true; fTimedError = true; fInitiated = false; handleProcessStopped(); } CarlaPlugin::idle(); } // ------------------------------------------------------------------- // Plugin state void reload() override { CARLA_SAFE_ASSERT_RETURN(pData->engine != nullptr,); carla_debug("CarlaPluginBridge::reload() - start"); const EngineProcessMode processMode(pData->engine->getProccessMode()); // Safely disable plugin for reload const ScopedDisabler sd(this); // cleanup of previous data pData->audioIn.clear(); pData->audioOut.clear(); pData->cvIn.clear(); pData->cvOut.clear(); pData->event.clear(); bool needsCtrlIn, needsCtrlOut; needsCtrlIn = needsCtrlOut = false; if (fInfo.aIns > 0) { pData->audioIn.createNew(fInfo.aIns); } if (fInfo.aOuts > 0) { pData->audioOut.createNew(fInfo.aOuts); needsCtrlIn = true; } if (fInfo.cvIns > 0) { pData->cvIn.createNew(fInfo.cvIns); } if (fInfo.cvOuts > 0) { pData->cvOut.createNew(fInfo.cvOuts); } if (fInfo.mIns > 0) needsCtrlIn = true; if (fInfo.mOuts > 0) needsCtrlOut = true; const uint portNameSize(pData->engine->getMaxPortNameSize()); CarlaString portName; // Audio Ins for (uint32_t j=0; j < fInfo.aIns; ++j) { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } if (fInfo.aInNames != nullptr && fInfo.aInNames[j] != nullptr) { portName += fInfo.aInNames[j]; } else if (fInfo.aIns > 1) { portName += "input_"; portName += CarlaString(j+1); } else portName += "input"; portName.truncate(portNameSize); pData->audioIn.ports[j].port = (CarlaEngineAudioPort*)pData->client->addPort(kEnginePortTypeAudio, portName, true, j); pData->audioIn.ports[j].rindex = j; } // Audio Outs for (uint32_t j=0; j < fInfo.aOuts; ++j) { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } if (fInfo.aOutNames != nullptr && fInfo.aOutNames[j] != nullptr) { portName += fInfo.aOutNames[j]; } else if (fInfo.aOuts > 1) { portName += "output_"; portName += CarlaString(j+1); } else portName += "output"; portName.truncate(portNameSize); pData->audioOut.ports[j].port = (CarlaEngineAudioPort*)pData->client->addPort(kEnginePortTypeAudio, portName, false, j); pData->audioOut.ports[j].rindex = j; } // TODO - MIDI // CV Ins for (uint32_t j=0; j < fInfo.cvIns; ++j) { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } if (fInfo.cvInNames != nullptr && fInfo.cvInNames[j] != nullptr) { portName += fInfo.cvInNames[j]; } else if (fInfo.cvIns > 1) { portName += "cv_input_"; portName += CarlaString(j+1); } else portName += "cv_input"; portName.truncate(portNameSize); pData->cvIn.ports[j].port = (CarlaEngineCVPort*)pData->client->addPort(kEnginePortTypeCV, portName, true, j); pData->cvIn.ports[j].rindex = j; } // CV Outs for (uint32_t j=0; j < fInfo.cvOuts; ++j) { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } if (fInfo.cvOutNames != nullptr && fInfo.cvOutNames[j] != nullptr) { portName += fInfo.cvOutNames[j]; } else if (fInfo.cvOuts > 1) { portName += "cv_output_"; portName += CarlaString(j+1); } else portName += "cv_output"; portName.truncate(portNameSize); pData->cvOut.ports[j].port = (CarlaEngineCVPort*)pData->client->addPort(kEnginePortTypeCV, portName, false, j); pData->cvOut.ports[j].rindex = j; } if (needsCtrlIn) { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } portName += "event-in"; portName.truncate(portNameSize); pData->event.portIn = (CarlaEngineEventPort*)pData->client->addPort(kEnginePortTypeEvent, portName, true, 0); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH pData->event.cvSourcePorts = pData->client->createCVSourcePorts(); #endif } if (needsCtrlOut) { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } portName += "event-out"; portName.truncate(portNameSize); pData->event.portOut = (CarlaEngineEventPort*)pData->client->addPort(kEnginePortTypeEvent, portName, false, 0); } // extra plugin hints pData->extraHints = 0x0; if (fInfo.mIns > 0) pData->extraHints |= PLUGIN_EXTRA_HINT_HAS_MIDI_IN; if (fInfo.mOuts > 0) pData->extraHints |= PLUGIN_EXTRA_HINT_HAS_MIDI_OUT; bufferSizeChanged(pData->engine->getBufferSize()); reloadPrograms(true); carla_debug("CarlaPluginBridge::reload() - end"); } // ------------------------------------------------------------------- // Plugin processing void activate() noexcept override { if (! fBridgeThread.isThreadRunning()) { CARLA_SAFE_ASSERT_RETURN(restartBridgeThread(),); } { const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientActivate); fShmNonRtClientControl.commitWrite(); } fTimedOut = false; try { waitForClient("activate", 2000); } CARLA_SAFE_EXCEPTION("activate - waitForClient"); } void deactivate() noexcept override { CARLA_SAFE_ASSERT_RETURN(! fTimedError,); { const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientDeactivate); fShmNonRtClientControl.commitWrite(); } fTimedOut = false; try { waitForClient("deactivate", 2000); } CARLA_SAFE_EXCEPTION("deactivate - waitForClient"); } void process(const float* const* const audioIn, float** const audioOut, const float* const* const cvIn, float** const cvOut, const uint32_t frames) override { // -------------------------------------------------------------------------------------------------------- // Check if active if (fTimedOut || fTimedError || ! pData->active) { // disable any output sound for (uint32_t i=0; i < pData->audioOut.count; ++i) carla_zeroFloats(audioOut[i], frames); for (uint32_t i=0; i < pData->cvOut.count; ++i) carla_zeroFloats(cvOut[i], frames); return; } // -------------------------------------------------------------------------------------------------------- // Check if needs reset if (pData->needsReset) { // TODO pData->needsReset = false; } // -------------------------------------------------------------------------------------------------------- // Event Input if (pData->event.portIn != nullptr) { // ---------------------------------------------------------------------------------------------------- // MIDI Input (External) if (pData->extNotes.mutex.tryLock()) { for (RtLinkedList::Itenerator it = pData->extNotes.data.begin2(); it.valid(); it.next()) { const ExternalMidiNote& note(it.getValue(kExternalMidiNoteFallback)); CARLA_SAFE_ASSERT_CONTINUE(note.channel >= 0 && note.channel < MAX_MIDI_CHANNELS); uint8_t data1, data2, data3; data1 = uint8_t((note.velo > 0 ? MIDI_STATUS_NOTE_ON : MIDI_STATUS_NOTE_OFF) | (note.channel & MIDI_CHANNEL_BIT)); data2 = note.note; data3 = note.velo; fShmRtClientControl.writeOpcode(kPluginBridgeRtClientMidiEvent); fShmRtClientControl.writeUInt(0); // time fShmRtClientControl.writeByte(0); // port fShmRtClientControl.writeByte(3); // size fShmRtClientControl.writeByte(data1); fShmRtClientControl.writeByte(data2); fShmRtClientControl.writeByte(data3); fShmRtClientControl.commitWrite(); } pData->extNotes.data.clear(); pData->extNotes.mutex.unlock(); } // End of MIDI Input (External) // ---------------------------------------------------------------------------------------------------- // Event Input (System) #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH bool allNotesOffSent = false; if (cvIn != nullptr && pData->event.cvSourcePorts != nullptr) { const bool isSampleAccurate = (pData->options & PLUGIN_OPTION_FIXED_BUFFERS) == 0x0; pData->event.cvSourcePorts->initPortBuffers(cvIn + pData->cvIn.count, frames, isSampleAccurate, pData->event.portIn); } #endif for (uint32_t i=0, numEvents=pData->event.portIn->getEventCount(); i < numEvents; ++i) { EngineEvent& event(pData->event.portIn->getEvent(i)); // Control change switch (event.type) { case kEngineEventTypeNull: break; case kEngineEventTypeControl: { EngineControlEvent& ctrlEvent = event.ctrl; switch (ctrlEvent.type) { case kEngineControlEventTypeNull: break; case kEngineControlEventTypeParameter: { float value; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // non-midi if (event.channel == kEngineEventNonMidiChannel) { const uint32_t k = ctrlEvent.param; CARLA_SAFE_ASSERT_CONTINUE(k < pData->param.count); ctrlEvent.handled = true; value = pData->param.getFinalUnnormalizedValue(k, ctrlEvent.normalizedValue); setParameterValueRT(k, value, true); continue; } // Control backend stuff if (event.channel == pData->ctrlChannel) { if (MIDI_IS_CONTROL_BREATH_CONTROLLER(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_DRYWET) != 0) { ctrlEvent.handled = true; value = ctrlEvent.normalizedValue; setDryWetRT(value, true); } else if (MIDI_IS_CONTROL_CHANNEL_VOLUME(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_VOLUME) != 0) { ctrlEvent.handled = true; value = ctrlEvent.normalizedValue*127.0f/100.0f; setVolumeRT(value, true); } else if (MIDI_IS_CONTROL_BALANCE(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_BALANCE) != 0) { float left, right; value = ctrlEvent.normalizedValue/0.5f - 1.0f; if (value < 0.0f) { left = -1.0f; right = (value*2.0f)+1.0f; } else if (value > 0.0f) { left = (value*2.0f)-1.0f; right = 1.0f; } else { left = -1.0f; right = 1.0f; } ctrlEvent.handled = true; setBalanceLeftRT(left, true); setBalanceRightRT(right, true); } } #endif // Control plugin parameters for (uint32_t k=0; k < pData->param.count; ++k) { if (pData->param.data[k].midiChannel != event.channel) continue; if (pData->param.data[k].mappedControlIndex != ctrlEvent.param) continue; if (pData->param.data[k].type != PARAMETER_INPUT) continue; if ((pData->param.data[k].hints & PARAMETER_IS_AUTOMATABLE) == 0) continue; ctrlEvent.handled = true; value = pData->param.getFinalUnnormalizedValue(k, ctrlEvent.normalizedValue); setParameterValueRT(k, value, true); } #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (! ctrlEvent.handled) checkForMidiLearn(event); #endif if ((pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) != 0 && ctrlEvent.param < MAX_MIDI_VALUE) { fShmRtClientControl.writeOpcode(kPluginBridgeRtClientMidiEvent); fShmRtClientControl.writeUInt(event.time); fShmRtClientControl.writeByte(0); // port fShmRtClientControl.writeByte(3); // size fShmRtClientControl.writeByte(uint8_t(MIDI_STATUS_CONTROL_CHANGE | (event.channel & MIDI_CHANNEL_BIT))); fShmRtClientControl.writeByte(uint8_t(ctrlEvent.param)); fShmRtClientControl.writeByte(uint8_t(ctrlEvent.normalizedValue*127.0f)); } break; } case kEngineControlEventTypeMidiBank: if (pData->options & PLUGIN_OPTION_MAP_PROGRAM_CHANGES) { fShmRtClientControl.writeOpcode(kPluginBridgeRtClientControlEventMidiBank); fShmRtClientControl.writeUInt(event.time); fShmRtClientControl.writeByte(event.channel); fShmRtClientControl.writeUShort(event.ctrl.param); fShmRtClientControl.commitWrite(); } else if ((pData->options & PLUGIN_OPTION_SEND_PROGRAM_CHANGES) != 0) { // VST2's that use banks usually require both a MSB bank message and a LSB bank message. The MSB bank message can just be 0 fShmRtClientControl.writeOpcode(kPluginBridgeRtClientMidiEvent); fShmRtClientControl.writeUInt(event.time); fShmRtClientControl.writeByte(0); // port fShmRtClientControl.writeByte(3); // size fShmRtClientControl.writeByte(uint8_t(MIDI_STATUS_CONTROL_CHANGE | (event.channel & MIDI_CHANNEL_BIT))); fShmRtClientControl.writeByte(MIDI_CONTROL_BANK_SELECT); fShmRtClientControl.writeByte(0); fShmRtClientControl.commitWrite(); fShmRtClientControl.writeOpcode(kPluginBridgeRtClientMidiEvent); fShmRtClientControl.writeUInt(event.time); fShmRtClientControl.writeByte(0); // port fShmRtClientControl.writeByte(3); // size fShmRtClientControl.writeByte(uint8_t(MIDI_STATUS_CONTROL_CHANGE | (event.channel & MIDI_CHANNEL_BIT))); fShmRtClientControl.writeByte(MIDI_CONTROL_BANK_SELECT__LSB); fShmRtClientControl.writeByte(uint8_t(event.ctrl.param)); fShmRtClientControl.commitWrite(); } break; case kEngineControlEventTypeMidiProgram: if (pData->options & PLUGIN_OPTION_MAP_PROGRAM_CHANGES || pData->options & PLUGIN_OPTION_SEND_PROGRAM_CHANGES) { fShmRtClientControl.writeOpcode(kPluginBridgeRtClientControlEventMidiProgram); fShmRtClientControl.writeUInt(event.time); fShmRtClientControl.writeByte(event.channel); fShmRtClientControl.writeUShort(event.ctrl.param); fShmRtClientControl.commitWrite(); } break; case kEngineControlEventTypeAllSoundOff: if (pData->options & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) { fShmRtClientControl.writeOpcode(kPluginBridgeRtClientControlEventAllSoundOff); fShmRtClientControl.writeUInt(event.time); fShmRtClientControl.writeByte(event.channel); fShmRtClientControl.commitWrite(); } break; case kEngineControlEventTypeAllNotesOff: if (pData->options & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) { #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (event.channel == pData->ctrlChannel && ! allNotesOffSent) { allNotesOffSent = true; postponeRtAllNotesOff(); } #endif fShmRtClientControl.writeOpcode(kPluginBridgeRtClientControlEventAllNotesOff); fShmRtClientControl.writeUInt(event.time); fShmRtClientControl.writeByte(event.channel); fShmRtClientControl.commitWrite(); } break; } // switch (ctrlEvent.type) break; } // case kEngineEventTypeControl case kEngineEventTypeMidi: { const EngineMidiEvent& midiEvent(event.midi); if (midiEvent.size == 0 || midiEvent.size >= MAX_MIDI_VALUE) continue; const uint8_t* const midiData(midiEvent.size > EngineMidiEvent::kDataSize ? midiEvent.dataExt : midiEvent.data); uint8_t status = uint8_t(MIDI_GET_STATUS_FROM_DATA(midiData)); if ((status == MIDI_STATUS_NOTE_OFF || status == MIDI_STATUS_NOTE_ON) && (pData->options & PLUGIN_OPTION_SKIP_SENDING_NOTES)) continue; if (status == MIDI_STATUS_CHANNEL_PRESSURE && (pData->options & PLUGIN_OPTION_SEND_CHANNEL_PRESSURE) == 0) continue; if (status == MIDI_STATUS_CONTROL_CHANGE && (pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) == 0) continue; if (status == MIDI_STATUS_POLYPHONIC_AFTERTOUCH && (pData->options & PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH) == 0) continue; if (status == MIDI_STATUS_PITCH_WHEEL_CONTROL && (pData->options & PLUGIN_OPTION_SEND_PITCHBEND) == 0) continue; // Fix bad note-off if (status == MIDI_STATUS_NOTE_ON && midiData[2] == 0) status = MIDI_STATUS_NOTE_OFF; fShmRtClientControl.writeOpcode(kPluginBridgeRtClientMidiEvent); fShmRtClientControl.writeUInt(event.time); fShmRtClientControl.writeByte(midiEvent.port); fShmRtClientControl.writeByte(midiEvent.size); fShmRtClientControl.writeByte(uint8_t(midiData[0] | (event.channel & MIDI_CHANNEL_BIT))); for (uint8_t j=1; j < midiEvent.size; ++j) fShmRtClientControl.writeByte(midiData[j]); fShmRtClientControl.commitWrite(); if (status == MIDI_STATUS_NOTE_ON) { pData->postponeNoteOnRtEvent(true, event.channel, midiData[1], midiData[2]); } else if (status == MIDI_STATUS_NOTE_OFF) { pData->postponeNoteOffRtEvent(true, event.channel, midiData[1]); } } break; } } pData->postRtEvents.trySplice(); } // End of Event Input if (! processSingle(audioIn, audioOut, cvIn, cvOut, frames)) return; // -------------------------------------------------------------------------------------------------------- // Control and MIDI Output if (pData->event.portOut != nullptr) { float value; for (uint32_t k=0; k < pData->param.count; ++k) { if (pData->param.data[k].type != PARAMETER_OUTPUT) continue; if (pData->param.data[k].mappedControlIndex > 0) { value = pData->param.ranges[k].getNormalizedValue(fParams[k].value); pData->event.portOut->writeControlEvent(0, pData->param.data[k].midiChannel, kEngineControlEventTypeParameter, static_cast(pData->param.data[k].mappedControlIndex), -1, value); } } uint32_t time; uint8_t port, size; const uint8_t* midiData(fShmRtClientControl.data->midiOut); for (std::size_t read=0; readevent.portOut->writeMidiEvent(time, size, data); read += kBridgeBaseMidiOutHeaderSize + size; } // TODO (void)port; } // End of Control and MIDI Output } bool processSingle(const float* const* const audioIn, float** const audioOut, const float* const* const cvIn, float** const cvOut, const uint32_t frames) { CARLA_SAFE_ASSERT_RETURN(! fTimedError, false); CARLA_SAFE_ASSERT_RETURN(frames > 0, false); CARLA_SAFE_ASSERT_RETURN(frames <= fBufferSize, false); if (pData->audioIn.count > 0) { CARLA_SAFE_ASSERT_RETURN(audioIn != nullptr, false); } if (pData->audioOut.count > 0) { CARLA_SAFE_ASSERT_RETURN(audioOut != nullptr, false); } if (pData->cvIn.count > 0) { CARLA_SAFE_ASSERT_RETURN(cvIn != nullptr, false); } if (pData->cvOut.count > 0) { CARLA_SAFE_ASSERT_RETURN(cvOut != nullptr, false); } // -------------------------------------------------------------------------------------------------------- // Try lock, silence otherwise #ifndef STOAT_TEST_BUILD if (pData->engine->isOffline()) { pData->singleMutex.lock(); } else #endif if (! pData->singleMutex.tryLock()) { for (uint32_t i=0; i < pData->audioOut.count; ++i) carla_zeroFloats(audioOut[i], frames); for (uint32_t i=0; i < pData->cvOut.count; ++i) carla_zeroFloats(cvOut[i], frames); return false; } // -------------------------------------------------------------------------------------------------------- // Reset audio buffers for (uint32_t i=0; i < pData->audioIn.count; ++i) carla_copyFloats(fShmAudioPool.data + (i * fBufferSize), audioIn[i], frames); for (uint32_t i=0; i < pData->cvIn.count; ++i) carla_copyFloats(fShmAudioPool.data + ((pData->audioIn.count + pData->audioOut.count + i) * fBufferSize), cvIn[i], frames); // -------------------------------------------------------------------------------------------------------- // TimeInfo const EngineTimeInfo timeInfo(pData->engine->getTimeInfo()); BridgeTimeInfo& bridgeTimeInfo(fShmRtClientControl.data->timeInfo); bridgeTimeInfo.playing = timeInfo.playing; bridgeTimeInfo.frame = timeInfo.frame; bridgeTimeInfo.usecs = timeInfo.usecs; bridgeTimeInfo.validFlags = timeInfo.bbt.valid ? kPluginBridgeTimeInfoValidBBT : 0x0; if (timeInfo.bbt.valid) { bridgeTimeInfo.bar = timeInfo.bbt.bar; bridgeTimeInfo.beat = timeInfo.bbt.beat; bridgeTimeInfo.tick = timeInfo.bbt.tick; bridgeTimeInfo.beatsPerBar = timeInfo.bbt.beatsPerBar; bridgeTimeInfo.beatType = timeInfo.bbt.beatType; bridgeTimeInfo.ticksPerBeat = timeInfo.bbt.ticksPerBeat; bridgeTimeInfo.beatsPerMinute = timeInfo.bbt.beatsPerMinute; bridgeTimeInfo.barStartTick = timeInfo.bbt.barStartTick; } // -------------------------------------------------------------------------------------------------------- // Run plugin { fShmRtClientControl.writeOpcode(kPluginBridgeRtClientProcess); fShmRtClientControl.writeUInt(frames); fShmRtClientControl.commitWrite(); } waitForClient("process", fProcWaitTime); if (fTimedOut) { pData->singleMutex.unlock(); return false; } for (uint32_t i=0; i < pData->audioOut.count; ++i) carla_copyFloats(audioOut[i], fShmAudioPool.data + ((pData->audioIn.count + i) * fBufferSize), frames); for (uint32_t i=0; i < pData->cvOut.count; ++i) carla_copyFloats(cvOut[i], fShmAudioPool.data + ((pData->audioIn.count + pData->audioOut.count + pData->cvIn.count + i) * fBufferSize), frames); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // -------------------------------------------------------------------------------------------------------- // Post-processing (dry/wet, volume and balance) { const bool doVolume = (pData->hints & PLUGIN_CAN_VOLUME) != 0 && carla_isNotEqual(pData->postProc.volume, 1.0f); const bool doDryWet = (pData->hints & PLUGIN_CAN_DRYWET) != 0 && carla_isNotEqual(pData->postProc.dryWet, 1.0f); const bool doBalance = (pData->hints & PLUGIN_CAN_BALANCE) != 0 && ! (carla_isEqual(pData->postProc.balanceLeft, -1.0f) && carla_isEqual(pData->postProc.balanceRight, 1.0f)); const bool isMono = (pData->audioIn.count == 1); bool isPair; float bufValue, oldBufLeft[doBalance ? frames : 1]; for (uint32_t i=0; i < pData->audioOut.count; ++i) { // Dry/Wet if (doDryWet) { const uint32_t c = isMono ? 0 : i; for (uint32_t k=0; k < frames; ++k) { # ifndef BUILD_BRIDGE if (k < pData->latency.frames && pData->latency.buffers != nullptr) bufValue = pData->latency.buffers[c][k]; else if (pData->latency.frames < frames) bufValue = audioIn[c][k-pData->latency.frames]; else # endif bufValue = audioIn[c][k]; audioOut[i][k] = (audioOut[i][k] * pData->postProc.dryWet) + (bufValue * (1.0f - pData->postProc.dryWet)); } } // Balance if (doBalance) { isPair = (i % 2 == 0); if (isPair) { CARLA_ASSERT(i+1 < pData->audioOut.count); carla_copyFloats(oldBufLeft, audioOut[i], frames); } float balRangeL = (pData->postProc.balanceLeft + 1.0f)/2.0f; float balRangeR = (pData->postProc.balanceRight + 1.0f)/2.0f; for (uint32_t k=0; k < frames; ++k) { if (isPair) { // left audioOut[i][k] = oldBufLeft[k] * (1.0f - balRangeL); audioOut[i][k] += audioOut[i+1][k] * (1.0f - balRangeR); } else { // right audioOut[i][k] = audioOut[i][k] * balRangeR; audioOut[i][k] += oldBufLeft[k] * balRangeL; } } } // Volume (and buffer copy) if (doVolume) { for (uint32_t k=0; k < frames; ++k) audioOut[i][k] *= pData->postProc.volume; } } } // End of Post-processing # ifndef BUILD_BRIDGE // -------------------------------------------------------------------------------------------------------- // Save latency values for next callback if (pData->latency.frames != 0 && pData->latency.buffers != nullptr) { const uint32_t latframes = pData->latency.frames; if (latframes <= frames) { for (uint32_t i=0; i < pData->audioIn.count; ++i) carla_copyFloats(pData->latency.buffers[i], audioIn[i]+(frames-latframes), latframes); } else { const uint32_t diff = latframes - frames; for (uint32_t i=0, k; iaudioIn.count; ++i) { // push back buffer by 'frames' for (k=0; k < diff; ++k) pData->latency.buffers[i][k] = pData->latency.buffers[i][k+frames]; // put current input at the end for (uint32_t j=0; k < latframes; ++j, ++k) pData->latency.buffers[i][k] = audioIn[i][j]; } } } # endif #endif // BUILD_BRIDGE_ALTERNATIVE_ARCH // -------------------------------------------------------------------------------------------------------- pData->singleMutex.unlock(); return true; } void bufferSizeChanged(const uint32_t newBufferSize) override { fBufferSize = newBufferSize; resizeAudioPool(newBufferSize); { fShmRtClientControl.writeOpcode(kPluginBridgeRtClientSetBufferSize); fShmRtClientControl.writeUInt(newBufferSize); fShmRtClientControl.commitWrite(); } //fProcWaitTime = newBufferSize*1000/pData->engine->getSampleRate(); fProcWaitTime = 1000; waitForClient("buffersize", 1000); } void sampleRateChanged(const double newSampleRate) override { { fShmRtClientControl.writeOpcode(kPluginBridgeRtClientSetSampleRate); fShmRtClientControl.writeDouble(newSampleRate); fShmRtClientControl.commitWrite(); } //fProcWaitTime = pData->engine->getBufferSize()*1000/newSampleRate; fProcWaitTime = 1000; waitForClient("samplerate", 1000); } void offlineModeChanged(const bool isOffline) override { { fShmRtClientControl.writeOpcode(kPluginBridgeRtClientSetOnline); fShmRtClientControl.writeBool(isOffline); fShmRtClientControl.commitWrite(); } waitForClient("offline", 1000); } // ------------------------------------------------------------------- // Plugin buffers void clearBuffers() noexcept override { if (fParams != nullptr) { delete[] fParams; fParams = nullptr; } CarlaPlugin::clearBuffers(); } // ------------------------------------------------------------------- // Post-poned UI Stuff void uiParameterChange(const uint32_t index, const float value) noexcept override { CARLA_SAFE_ASSERT_RETURN(index < pData->param.count,); const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientUiParameterChange); fShmNonRtClientControl.writeUInt(index); fShmNonRtClientControl.writeFloat(value); fShmNonRtClientControl.commitWrite(); } void uiProgramChange(const uint32_t index) noexcept override { CARLA_SAFE_ASSERT_RETURN(index < pData->prog.count,); const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientUiProgramChange); fShmNonRtClientControl.writeUInt(index); fShmNonRtClientControl.commitWrite(); } void uiMidiProgramChange(const uint32_t index) noexcept override { CARLA_SAFE_ASSERT_RETURN(index < pData->midiprog.count,); const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientUiMidiProgramChange); fShmNonRtClientControl.writeUInt(index); fShmNonRtClientControl.commitWrite(); } void uiNoteOn(const uint8_t channel, const uint8_t note, const uint8_t velo) noexcept override { CARLA_SAFE_ASSERT_RETURN(channel < MAX_MIDI_CHANNELS,); CARLA_SAFE_ASSERT_RETURN(note < MAX_MIDI_NOTE,); CARLA_SAFE_ASSERT_RETURN(velo > 0 && velo < MAX_MIDI_VALUE,); const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientUiNoteOn); fShmNonRtClientControl.writeByte(channel); fShmNonRtClientControl.writeByte(note); fShmNonRtClientControl.writeByte(velo); fShmNonRtClientControl.commitWrite(); } void uiNoteOff(const uint8_t channel, const uint8_t note) noexcept override { CARLA_SAFE_ASSERT_RETURN(channel < MAX_MIDI_CHANNELS,); CARLA_SAFE_ASSERT_RETURN(note < MAX_MIDI_NOTE,); const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientUiNoteOff); fShmNonRtClientControl.writeByte(channel); fShmNonRtClientControl.writeByte(note); fShmNonRtClientControl.commitWrite(); } // ------------------------------------------------------------------- // Internal helper functions void restoreLV2State(bool) noexcept override { const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientRestoreLV2State); fShmNonRtClientControl.commitWrite(); } void waitForBridgeSaveSignal() noexcept override { // VSTs only save chunks, for which we already have a waitForSaved there if (fPluginType != PLUGIN_VST2) waitForSaved(); } // ------------------------------------------------------------------- void handleNonRtData() { for (; fShmNonRtServerControl.isDataAvailableForReading();) { const PluginBridgeNonRtServerOpcode opcode(fShmNonRtServerControl.readOpcode()); #ifdef DEBUG if (opcode != kPluginBridgeNonRtServerPong && opcode != kPluginBridgeNonRtServerParameterValue2) { carla_debug("CarlaPluginBridge::handleNonRtData() - got opcode: %s", PluginBridgeNonRtServerOpcode2str(opcode)); } #endif switch (opcode) { case kPluginBridgeNonRtServerNull: case kPluginBridgeNonRtServerPong: break; case kPluginBridgeNonRtServerVersion: fBridgeVersion = fShmNonRtServerControl.readUInt(); break; case kPluginBridgeNonRtServerPluginInfo1: { // uint/category, uint/hints, uint/optionsAvailable, uint/optionsEnabled, long/uniqueId const uint32_t category = fShmNonRtServerControl.readUInt(); const uint32_t hints = fShmNonRtServerControl.readUInt(); const uint32_t optionAv = fShmNonRtServerControl.readUInt(); const uint32_t optionEn = fShmNonRtServerControl.readUInt(); const int64_t uniqueId = fShmNonRtServerControl.readLong(); if (fUniqueId != 0) { CARLA_SAFE_ASSERT_INT2(fUniqueId == uniqueId, fUniqueId, uniqueId); } pData->hints = hints | PLUGIN_IS_BRIDGE; pData->options = optionEn; #ifdef HAVE_X11 if (fBridgeVersion < 9) #endif { pData->hints &= ~PLUGIN_HAS_CUSTOM_EMBED_UI; } fInfo.category = static_cast(category); fInfo.optionsAvailable = optionAv; } break; case kPluginBridgeNonRtServerPluginInfo2: { // uint/size, str[] (realName), uint/size, str[] (label), uint/size, str[] (maker), uint/size, str[] (copyright) // realName const uint32_t realNameSize(fShmNonRtServerControl.readUInt()); char realName[realNameSize+1]; carla_zeroChars(realName, realNameSize+1); fShmNonRtServerControl.readCustomData(realName, realNameSize); // label const uint32_t labelSize(fShmNonRtServerControl.readUInt()); char label[labelSize+1]; carla_zeroChars(label, labelSize+1); fShmNonRtServerControl.readCustomData(label, labelSize); // maker const uint32_t makerSize(fShmNonRtServerControl.readUInt()); char maker[makerSize+1]; carla_zeroChars(maker, makerSize+1); fShmNonRtServerControl.readCustomData(maker, makerSize); // copyright const uint32_t copyrightSize(fShmNonRtServerControl.readUInt()); char copyright[copyrightSize+1]; carla_zeroChars(copyright, copyrightSize+1); fShmNonRtServerControl.readCustomData(copyright, copyrightSize); fInfo.name = realName; fInfo.label = label; fInfo.maker = maker; fInfo.copyright = copyright; if (pData->name == nullptr) pData->name = pData->engine->getUniquePluginName(realName); } break; case kPluginBridgeNonRtServerAudioCount: { // uint/ins, uint/outs fInfo.clear(); fInfo.aIns = fShmNonRtServerControl.readUInt(); fInfo.aOuts = fShmNonRtServerControl.readUInt(); if (fInfo.aIns > 0) { fInfo.aInNames = new const char*[fInfo.aIns]; carla_zeroPointers(fInfo.aInNames, fInfo.aIns); } if (fInfo.aOuts > 0) { fInfo.aOutNames = new const char*[fInfo.aOuts]; carla_zeroPointers(fInfo.aOutNames, fInfo.aOuts); } } break; case kPluginBridgeNonRtServerMidiCount: { // uint/ins, uint/outs fInfo.mIns = fShmNonRtServerControl.readUInt(); fInfo.mOuts = fShmNonRtServerControl.readUInt(); } break; case kPluginBridgeNonRtServerCvCount: { // uint/ins, uint/outs fInfo.cvIns = fShmNonRtServerControl.readUInt(); fInfo.cvOuts = fShmNonRtServerControl.readUInt(); } break; case kPluginBridgeNonRtServerParameterCount: { // uint/count const uint32_t count = fShmNonRtServerControl.readUInt(); // delete old data pData->param.clear(); if (fParams != nullptr) { delete[] fParams; fParams = nullptr; } if (count > 0) { pData->param.createNew(count, false); fParams = new BridgeParamInfo[count]; // we might not receive all parameter data, so ensure range max is not 0 for (uint32_t i=0; iparam.ranges[i].def = 0.0f; pData->param.ranges[i].min = 0.0f; pData->param.ranges[i].max = 1.0f; pData->param.ranges[i].step = 0.001f; pData->param.ranges[i].stepSmall = 0.0001f; pData->param.ranges[i].stepLarge = 0.1f; } } } break; case kPluginBridgeNonRtServerProgramCount: { // uint/count pData->prog.clear(); if (const uint32_t count = fShmNonRtServerControl.readUInt()) pData->prog.createNew(count); } break; case kPluginBridgeNonRtServerMidiProgramCount: { // uint/count pData->midiprog.clear(); if (const uint32_t count = fShmNonRtServerControl.readUInt()) pData->midiprog.createNew(count); } break; case kPluginBridgeNonRtServerPortName: { // byte/type, uint/index, uint/size, str[] (name) const uint8_t portType = fShmNonRtServerControl.readByte(); const uint32_t index = fShmNonRtServerControl.readUInt(); // name const uint32_t nameSize(fShmNonRtServerControl.readUInt()); char* const name = new char[nameSize+1]; carla_zeroChars(name, nameSize+1); fShmNonRtServerControl.readCustomData(name, nameSize); CARLA_SAFE_ASSERT_BREAK(portType > kPluginBridgePortNull && portType < kPluginBridgePortTypeCount); switch (portType) { case kPluginBridgePortAudioInput: CARLA_SAFE_ASSERT_BREAK(index < fInfo.aIns); fInfo.aInNames[index] = name; break; case kPluginBridgePortAudioOutput: CARLA_SAFE_ASSERT_BREAK(index < fInfo.aOuts); fInfo.aOutNames[index] = name; break; } } break; case kPluginBridgeNonRtServerParameterData1: { // uint/index, int/rindex, uint/type, uint/hints, int/cc const uint32_t index = fShmNonRtServerControl.readUInt(); const int32_t rindex = fShmNonRtServerControl.readInt(); const uint32_t type = fShmNonRtServerControl.readUInt(); const uint32_t hints = fShmNonRtServerControl.readUInt(); const int16_t ctrl = fShmNonRtServerControl.readShort(); CARLA_SAFE_ASSERT_BREAK(ctrl >= CONTROL_INDEX_NONE && ctrl <= CONTROL_INDEX_MAX_ALLOWED); CARLA_SAFE_ASSERT_INT2(index < pData->param.count, index, pData->param.count); if (index < pData->param.count) { pData->param.data[index].type = static_cast(type); pData->param.data[index].index = static_cast(index); pData->param.data[index].rindex = rindex; pData->param.data[index].hints = hints; pData->param.data[index].mappedControlIndex = ctrl; } } break; case kPluginBridgeNonRtServerParameterData2: { // uint/index, uint/size, str[] (name), uint/size, str[] (unit) const uint32_t index = fShmNonRtServerControl.readUInt(); // name const uint32_t nameSize(fShmNonRtServerControl.readUInt()); char name[nameSize+1]; carla_zeroChars(name, nameSize+1); fShmNonRtServerControl.readCustomData(name, nameSize); // symbol const uint32_t symbolSize(fShmNonRtServerControl.readUInt()); char symbol[symbolSize+1]; carla_zeroChars(symbol, symbolSize+1); fShmNonRtServerControl.readCustomData(symbol, symbolSize); // unit const uint32_t unitSize(fShmNonRtServerControl.readUInt()); char unit[unitSize+1]; carla_zeroChars(unit, unitSize+1); fShmNonRtServerControl.readCustomData(unit, unitSize); CARLA_SAFE_ASSERT_INT2(index < pData->param.count, index, pData->param.count); if (index < pData->param.count) { fParams[index].name = name; fParams[index].symbol = symbol; fParams[index].unit = unit; } } break; case kPluginBridgeNonRtServerParameterRanges: { // uint/index, float/def, float/min, float/max, float/step, float/stepSmall, float/stepLarge const uint32_t index = fShmNonRtServerControl.readUInt(); const float def = fShmNonRtServerControl.readFloat(); const float min = fShmNonRtServerControl.readFloat(); const float max = fShmNonRtServerControl.readFloat(); const float step = fShmNonRtServerControl.readFloat(); const float stepSmall = fShmNonRtServerControl.readFloat(); const float stepLarge = fShmNonRtServerControl.readFloat(); CARLA_SAFE_ASSERT_BREAK(min < max); CARLA_SAFE_ASSERT_BREAK(def >= min); CARLA_SAFE_ASSERT_BREAK(def <= max); CARLA_SAFE_ASSERT_INT2(index < pData->param.count, index, pData->param.count); if (index < pData->param.count) { pData->param.ranges[index].def = def; pData->param.ranges[index].min = min; pData->param.ranges[index].max = max; pData->param.ranges[index].step = step; pData->param.ranges[index].stepSmall = stepSmall; pData->param.ranges[index].stepLarge = stepLarge; } } break; case kPluginBridgeNonRtServerParameterValue: { // uint/index, float/value const uint32_t index = fShmNonRtServerControl.readUInt(); const float value = fShmNonRtServerControl.readFloat(); if (index < pData->param.count) { const float fixedValue(pData->param.getFixedValue(index, value)); if (carla_isNotEqual(fParams[index].value, fixedValue)) { fParams[index].value = fixedValue; CarlaPlugin::setParameterValue(index, fixedValue, false, true, true); } } } break; case kPluginBridgeNonRtServerParameterValue2: { // uint/index, float/value const uint32_t index = fShmNonRtServerControl.readUInt(); const float value = fShmNonRtServerControl.readFloat(); if (index < pData->param.count) { const float fixedValue(pData->param.getFixedValue(index, value)); fParams[index].value = fixedValue; } } break; case kPluginBridgeNonRtServerParameterTouch: { // uint/index, bool/touch const uint32_t index = fShmNonRtServerControl.readUInt(); const bool touch = fShmNonRtServerControl.readBool(); pData->engine->touchPluginParameter(pData->id, index, touch); } break; case kPluginBridgeNonRtServerDefaultValue: { // uint/index, float/value const uint32_t index = fShmNonRtServerControl.readUInt(); const float value = fShmNonRtServerControl.readFloat(); if (index < pData->param.count) pData->param.ranges[index].def = value; } break; case kPluginBridgeNonRtServerCurrentProgram: { // int/index const int32_t index = fShmNonRtServerControl.readInt(); CARLA_SAFE_ASSERT_BREAK(index >= -1); CARLA_SAFE_ASSERT_INT2(index < static_cast(pData->prog.count), index, pData->prog.count); CarlaPlugin::setProgram(index, false, true, true); } break; case kPluginBridgeNonRtServerCurrentMidiProgram: { // int/index const int32_t index = fShmNonRtServerControl.readInt(); CARLA_SAFE_ASSERT_BREAK(index >= -1); CARLA_SAFE_ASSERT_INT2(index < static_cast(pData->midiprog.count), index, pData->midiprog.count); CarlaPlugin::setMidiProgram(index, false, true, true); } break; case kPluginBridgeNonRtServerProgramName: { // uint/index, uint/size, str[] (name) const uint32_t index = fShmNonRtServerControl.readUInt(); // name const uint32_t nameSize(fShmNonRtServerControl.readUInt()); char name[nameSize+1]; carla_zeroChars(name, nameSize+1); fShmNonRtServerControl.readCustomData(name, nameSize); CARLA_SAFE_ASSERT_INT2(index < pData->prog.count, index, pData->prog.count); if (index < pData->prog.count) { if (pData->prog.names[index] != nullptr) delete[] pData->prog.names[index]; pData->prog.names[index] = carla_strdup(name); } } break; case kPluginBridgeNonRtServerMidiProgramData: { // uint/index, uint/bank, uint/program, uint/size, str[] (name) const uint32_t index = fShmNonRtServerControl.readUInt(); const uint32_t bank = fShmNonRtServerControl.readUInt(); const uint32_t program = fShmNonRtServerControl.readUInt(); // name const uint32_t nameSize(fShmNonRtServerControl.readUInt()); char name[nameSize+1]; carla_zeroChars(name, nameSize+1); fShmNonRtServerControl.readCustomData(name, nameSize); CARLA_SAFE_ASSERT_INT2(index < pData->midiprog.count, index, pData->midiprog.count); if (index < pData->midiprog.count) { if (pData->midiprog.data[index].name != nullptr) delete[] pData->midiprog.data[index].name; pData->midiprog.data[index].bank = bank; pData->midiprog.data[index].program = program; pData->midiprog.data[index].name = carla_strdup(name); } } break; case kPluginBridgeNonRtServerSetCustomData: { // uint/size, str[], uint/size, str[], uint/size, str[] // type const uint32_t typeSize = fShmNonRtServerControl.readUInt(); char type[typeSize+1]; carla_zeroChars(type, typeSize+1); fShmNonRtServerControl.readCustomData(type, typeSize); // key const uint32_t keySize = fShmNonRtServerControl.readUInt(); char key[keySize+1]; carla_zeroChars(key, keySize+1); fShmNonRtServerControl.readCustomData(key, keySize); // value const uint32_t valueSize = fShmNonRtServerControl.readUInt(); // special case for big values if (valueSize > 16384) { const uint32_t bigValueFilePathSize = fShmNonRtServerControl.readUInt(); char bigValueFilePath[bigValueFilePathSize+1]; carla_zeroChars(bigValueFilePath, bigValueFilePathSize+1); fShmNonRtServerControl.readCustomData(bigValueFilePath, bigValueFilePathSize); String realBigValueFilePath(bigValueFilePath); #ifndef CARLA_OS_WIN // Using Wine, fix temp dir if (fBinaryType == BINARY_WIN32 || fBinaryType == BINARY_WIN64) { const StringArray driveLetterSplit(StringArray::fromTokens(realBigValueFilePath, ":/", "")); carla_stdout("big value save path BEFORE => %s", realBigValueFilePath.toRawUTF8()); realBigValueFilePath = fWinePrefix; realBigValueFilePath += "/drive_"; realBigValueFilePath += driveLetterSplit[0].toLowerCase(); realBigValueFilePath += driveLetterSplit[1]; realBigValueFilePath = realBigValueFilePath.replace("\\", "/"); carla_stdout("big value save path AFTER => %s", realBigValueFilePath.toRawUTF8()); } #endif const File bigValueFile(realBigValueFilePath); CARLA_SAFE_ASSERT_BREAK(bigValueFile.existsAsFile()); CarlaPlugin::setCustomData(type, key, bigValueFile.loadFileAsString().toRawUTF8(), false); bigValueFile.deleteFile(); } else { char value[valueSize+1]; carla_zeroChars(value, valueSize+1); if (valueSize > 0) fShmNonRtServerControl.readCustomData(value, valueSize); CarlaPlugin::setCustomData(type, key, value, false); } } break; case kPluginBridgeNonRtServerSetChunkDataFile: { // uint/size, str[] (filename) // chunkFilePath const uint32_t chunkFilePathSize = fShmNonRtServerControl.readUInt(); char chunkFilePath[chunkFilePathSize+1]; carla_zeroChars(chunkFilePath, chunkFilePathSize+1); fShmNonRtServerControl.readCustomData(chunkFilePath, chunkFilePathSize); String realChunkFilePath(chunkFilePath); #ifndef CARLA_OS_WIN // Using Wine, fix temp dir if (fBinaryType == BINARY_WIN32 || fBinaryType == BINARY_WIN64) { const StringArray driveLetterSplit(StringArray::fromTokens(realChunkFilePath, ":/", "")); carla_stdout("chunk save path BEFORE => %s", realChunkFilePath.toRawUTF8()); realChunkFilePath = fWinePrefix; realChunkFilePath += "/drive_"; realChunkFilePath += driveLetterSplit[0].toLowerCase(); realChunkFilePath += driveLetterSplit[1]; realChunkFilePath = realChunkFilePath.replace("\\", "/"); carla_stdout("chunk save path AFTER => %s", realChunkFilePath.toRawUTF8()); } #endif const File chunkFile(realChunkFilePath); CARLA_SAFE_ASSERT_BREAK(chunkFile.existsAsFile()); fInfo.chunk = carla_getChunkFromBase64String(chunkFile.loadFileAsString().toRawUTF8()); chunkFile.deleteFile(); } break; case kPluginBridgeNonRtServerSetLatency: // uint fLatency = fShmNonRtServerControl.readUInt(); #ifndef BUILD_BRIDGE if (! fInitiated) pData->latency.recreateBuffers(std::max(fInfo.aIns, fInfo.aOuts), fLatency); #endif break; case kPluginBridgeNonRtServerSetParameterText: { const int32_t index = fShmNonRtServerControl.readInt(); const uint32_t textSize(fShmNonRtServerControl.readUInt()); char text[textSize+1]; carla_zeroChars(text, textSize+1); fShmNonRtServerControl.readCustomData(text, textSize); fReceivingParamText.setReceivedData(index, text, textSize); } break; case kPluginBridgeNonRtServerReady: fInitiated = true; break; case kPluginBridgeNonRtServerSaved: fSaved = true; break; case kPluginBridgeNonRtServerRespEmbedUI: fPendingEmbedCustomUI = fShmNonRtServerControl.readULong(); break; case kPluginBridgeNonRtServerResizeEmbedUI: { const uint width = fShmNonRtServerControl.readUInt(); const uint height = fShmNonRtServerControl.readUInt(); pData->engine->callback(true, true, ENGINE_CALLBACK_EMBED_UI_RESIZED, pData->id, static_cast(width), static_cast(height), 0, 0.0f, nullptr); } break; case kPluginBridgeNonRtServerUiClosed: #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH pData->transientTryCounter = 0; #endif pData->engine->callback(true, true, ENGINE_CALLBACK_UI_STATE_CHANGED, pData->id, 0, 0, 0, 0.0f, nullptr); break; case kPluginBridgeNonRtServerError: { // error const uint32_t errorSize(fShmNonRtServerControl.readUInt()); char error[errorSize+1]; carla_zeroChars(error, errorSize+1); fShmNonRtServerControl.readCustomData(error, errorSize); if (fInitiated) { pData->engine->callback(true, true, ENGINE_CALLBACK_ERROR, pData->id, 0, 0, 0, 0.0f, error); // just in case pData->engine->setLastError(error); fInitError = true; } else { pData->engine->setLastError(error); fInitError = true; fInitiated = true; } } break; } } } // ------------------------------------------------------------------- uintptr_t getUiBridgeProcessId() const noexcept override { return fBridgeThread.getProcessPID(); } const void* getExtraStuff() const noexcept override { return fBridgeBinary.isNotEmpty() ? fBridgeBinary.buffer() : nullptr; } // ------------------------------------------------------------------- bool init(CarlaPluginPtr plugin, const char* const filename, const char* const name, const char* const label, const int64_t uniqueId, const uint options, const char* const binaryArchName, const char* const bridgeBinary) { CARLA_SAFE_ASSERT_RETURN(pData->engine != nullptr, false); // --------------------------------------------------------------- // first checks if (pData->client != nullptr) { pData->engine->setLastError("Plugin client is already registered"); return false; } if (bridgeBinary == nullptr || bridgeBinary[0] == '\0') { pData->engine->setLastError("null bridge binary"); return false; } // --------------------------------------------------------------- // set info if (name != nullptr && name[0] != '\0') pData->name = pData->engine->getUniquePluginName(name); if (filename != nullptr && filename[0] != '\0') pData->filename = carla_strdup(filename); else pData->filename = carla_strdup(""); fUniqueId = uniqueId; fBridgeBinary = bridgeBinary; std::srand(static_cast(std::time(nullptr))); // --------------------------------------------------------------- // init sem/shm if (! fShmAudioPool.initializeServer()) { carla_stderr("Failed to initialize shared memory audio pool"); return false; } if (! fShmRtClientControl.initializeServer()) { carla_stderr("Failed to initialize RT client control"); fShmAudioPool.clear(); return false; } if (! fShmNonRtClientControl.initializeServer()) { carla_stderr("Failed to initialize Non-RT client control"); fShmRtClientControl.clear(); fShmAudioPool.clear(); return false; } if (! fShmNonRtServerControl.initializeServer()) { carla_stderr("Failed to initialize Non-RT server control"); fShmNonRtClientControl.clear(); fShmRtClientControl.clear(); fShmAudioPool.clear(); return false; } #ifndef CARLA_OS_WIN // --------------------------------------------------------------- // set wine prefix if (fBridgeBinary.contains(".exe", true)) { const EngineOptions& engineOptions(pData->engine->getOptions()); if (engineOptions.wine.autoPrefix) fWinePrefix = findWinePrefix(pData->filename); if (fWinePrefix.isEmpty()) { const char* const envWinePrefix(std::getenv("WINEPREFIX")); if (envWinePrefix != nullptr && envWinePrefix[0] != '\0') fWinePrefix = envWinePrefix; else if (engineOptions.wine.fallbackPrefix != nullptr && engineOptions.wine.fallbackPrefix[0] != '\0') fWinePrefix = engineOptions.wine.fallbackPrefix; else fWinePrefix = File::getSpecialLocation(File::userHomeDirectory).getFullPathName() + "/.wine"; } } #endif // --------------------------------------------------------------- // init bridge thread { char shmIdsStr[6*4+1]; carla_zeroChars(shmIdsStr, 6*4+1); std::strncpy(shmIdsStr+6*0, &fShmAudioPool.filename[fShmAudioPool.filename.length()-6], 6); std::strncpy(shmIdsStr+6*1, &fShmRtClientControl.filename[fShmRtClientControl.filename.length()-6], 6); std::strncpy(shmIdsStr+6*2, &fShmNonRtClientControl.filename[fShmNonRtClientControl.filename.length()-6], 6); std::strncpy(shmIdsStr+6*3, &fShmNonRtServerControl.filename[fShmNonRtServerControl.filename.length()-6], 6); fBridgeThread.setData( #ifndef CARLA_OS_WIN fWinePrefix.toRawUTF8(), #endif binaryArchName, bridgeBinary, label, shmIdsStr); } if (! restartBridgeThread()) return false; // --------------------------------------------------------------- // register client if (pData->name == nullptr) { if (label != nullptr && label[0] != '\0') pData->name = pData->engine->getUniquePluginName(label); else pData->name = pData->engine->getUniquePluginName("unknown"); } pData->client = pData->engine->addClient(plugin); if (pData->client == nullptr || ! pData->client->isOk()) { pData->engine->setLastError("Failed to register plugin client"); return false; } // --------------------------------------------------------------- // set options pData->options = 0x0; if ((fInfo.optionsAvailable & PLUGIN_OPTION_FIXED_BUFFERS) == 0x0) pData->options |= PLUGIN_OPTION_FIXED_BUFFERS; else if (isPluginOptionEnabled(options, PLUGIN_OPTION_FIXED_BUFFERS)) pData->options |= PLUGIN_OPTION_FIXED_BUFFERS; if (pData->engine->getOptions().forceStereo) { pData->options |= PLUGIN_OPTION_FORCE_STEREO; } else if (fInfo.optionsAvailable & PLUGIN_OPTION_FORCE_STEREO) { if (options & PLUGIN_OPTION_FORCE_STEREO) pData->options |= PLUGIN_OPTION_FORCE_STEREO; } if (fInfo.optionsAvailable & PLUGIN_OPTION_USE_CHUNKS) if (isPluginOptionEnabled(options, PLUGIN_OPTION_USE_CHUNKS)) pData->options |= PLUGIN_OPTION_USE_CHUNKS; if (fInfo.optionsAvailable & PLUGIN_OPTION_SEND_CONTROL_CHANGES) if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_CONTROL_CHANGES)) pData->options |= PLUGIN_OPTION_SEND_CONTROL_CHANGES; if (fInfo.optionsAvailable & PLUGIN_OPTION_SEND_CHANNEL_PRESSURE) if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_CHANNEL_PRESSURE)) pData->options |= PLUGIN_OPTION_SEND_CHANNEL_PRESSURE; if (fInfo.optionsAvailable & PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH) if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH)) pData->options |= PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH; if (fInfo.optionsAvailable & PLUGIN_OPTION_SEND_PITCHBEND) if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_PITCHBEND)) pData->options |= PLUGIN_OPTION_SEND_PITCHBEND; if (fInfo.optionsAvailable & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_ALL_SOUND_OFF)) pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; if (fInfo.optionsAvailable & PLUGIN_OPTION_SKIP_SENDING_NOTES) if (isPluginOptionInverseEnabled(options, PLUGIN_OPTION_SKIP_SENDING_NOTES)) pData->options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; if (fInfo.optionsAvailable & PLUGIN_OPTION_SEND_PROGRAM_CHANGES) { if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_PROGRAM_CHANGES)) pData->options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; } else if (fInfo.optionsAvailable & PLUGIN_OPTION_MAP_PROGRAM_CHANGES) { if (isPluginOptionEnabled(options, PLUGIN_OPTION_MAP_PROGRAM_CHANGES)) pData->options |= PLUGIN_OPTION_MAP_PROGRAM_CHANGES; } // kPluginBridgeNonRtClientSetOptions was added in API 7 if (fBridgeVersion >= 7) { const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientSetOptions); fShmNonRtClientControl.writeUInt(pData->options); fShmNonRtClientControl.commitWrite(); } return true; } private: const BinaryType fBinaryType; const PluginType fPluginType; uint fBridgeVersion; bool fInitiated; bool fInitError; bool fSaved; bool fTimedOut; bool fTimedError; uint fBufferSize; uint fProcWaitTime; uint64_t fPendingEmbedCustomUI; CarlaString fBridgeBinary; CarlaPluginBridgeThread fBridgeThread; BridgeAudioPool fShmAudioPool; BridgeRtClientControl fShmRtClientControl; BridgeNonRtClientControl fShmNonRtClientControl; BridgeNonRtServerControl fShmNonRtServerControl; #ifndef CARLA_OS_WIN String fWinePrefix; #endif class ReceivingParamText { public: ReceivingParamText() noexcept : dataRecv(false), dataOk(false), index(-1), strBuf(nullptr), mutex() {} bool isCurrentlyWaitingData() const noexcept { return index >= 0; } bool wasDataReceived(bool* const success) const noexcept { *success = dataOk; return dataRecv; } void setTargetData(const int32_t i, char* const b) noexcept { const CarlaMutexLocker cml(mutex); dataOk = false; dataRecv = false; index = i; strBuf = b; } void setReceivedData(const int32_t i, const char* const b, const uint blen) noexcept { CarlaScopedValueSetter svs(dataRecv, false, true); const CarlaMutexLocker cml(mutex); // make backup and reset data const int32_t indexCopy = index; char* const strBufCopy = strBuf; index = -1; strBuf = nullptr; CARLA_SAFE_ASSERT_RETURN(indexCopy == i,); CARLA_SAFE_ASSERT_RETURN(strBufCopy != nullptr,); std::strncpy(strBufCopy, b, std::min(blen, STR_MAX-1U)); dataOk = true; } private: bool dataRecv; bool dataOk; int32_t index; char* strBuf; CarlaMutex mutex; CARLA_DECLARE_NON_COPY_CLASS(ReceivingParamText) } fReceivingParamText; struct Info { uint32_t aIns, aOuts; uint32_t cvIns, cvOuts; uint32_t mIns, mOuts; PluginCategory category; uint optionsAvailable; CarlaString name; CarlaString label; CarlaString maker; CarlaString copyright; const char** aInNames; const char** aOutNames; const char** cvInNames; const char** cvOutNames; std::vector chunk; Info() : aIns(0), aOuts(0), cvIns(0), cvOuts(0), mIns(0), mOuts(0), category(PLUGIN_CATEGORY_NONE), optionsAvailable(0), name(), label(), maker(), copyright(), aInNames(nullptr), aOutNames(nullptr), cvInNames(nullptr), cvOutNames(nullptr), chunk() {} ~Info() { clear(); } void clear() { if (aInNames != nullptr) { CARLA_SAFE_ASSERT_INT(aIns > 0, aIns); for (uint32_t i=0; i 0, aOuts); for (uint32_t i=0; i 0, cvIns); for (uint32_t i=0; i 0, cvOuts); for (uint32_t i=0; iactive; pData->active = false; if (wasActive) { #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH pData->engine->callback(true, true, ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED, pData->id, PARAMETER_ACTIVE, 0, 0, 0.0f, nullptr); #endif } if (pData->hints & PLUGIN_HAS_CUSTOM_UI) { pData->engine->callback(true, true, ENGINE_CALLBACK_UI_STATE_CHANGED, pData->id, 0, 0, 0, 0.0f, nullptr); } } void resizeAudioPool(const uint32_t bufferSize) { fShmAudioPool.resize(bufferSize, fInfo.aIns+fInfo.aOuts, fInfo.cvIns+fInfo.cvOuts); fShmRtClientControl.writeOpcode(kPluginBridgeRtClientSetAudioPool); fShmRtClientControl.writeULong(static_cast(fShmAudioPool.dataSize)); fShmRtClientControl.commitWrite(); waitForClient("resize-pool", 5000); } void waitForClient(const char* const action, const uint msecs) { CARLA_SAFE_ASSERT_RETURN(! fTimedOut,); CARLA_SAFE_ASSERT_RETURN(! fTimedError,); if (fShmRtClientControl.waitForClient(msecs)) return; fTimedOut = true; carla_stderr2("waitForClient(%s) timed out", action); } bool restartBridgeThread() { fInitiated = false; fInitError = false; fTimedError = false; // reset memory fShmRtClientControl.data->procFlags = 0; carla_zeroStruct(fShmRtClientControl.data->timeInfo); carla_zeroBytes(fShmRtClientControl.data->midiOut, kBridgeRtClientDataMidiOutSize); fShmRtClientControl.clearData(); fShmNonRtClientControl.clearData(); fShmNonRtServerControl.clearData(); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientVersion); fShmNonRtClientControl.writeUInt(CARLA_PLUGIN_BRIDGE_API_VERSION_CURRENT); fShmNonRtClientControl.writeUInt(static_cast(sizeof(BridgeRtClientData))); fShmNonRtClientControl.writeUInt(static_cast(sizeof(BridgeNonRtClientData))); fShmNonRtClientControl.writeUInt(static_cast(sizeof(BridgeNonRtServerData))); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientInitialSetup); fShmNonRtClientControl.writeUInt(pData->engine->getBufferSize()); fShmNonRtClientControl.writeDouble(pData->engine->getSampleRate()); fShmNonRtClientControl.commitWrite(); if (fShmAudioPool.dataSize != 0) { fShmRtClientControl.writeOpcode(kPluginBridgeRtClientSetAudioPool); fShmRtClientControl.writeULong(static_cast(fShmAudioPool.dataSize)); fShmRtClientControl.commitWrite(); } else { // testing dummy message fShmRtClientControl.writeOpcode(kPluginBridgeRtClientNull); fShmRtClientControl.commitWrite(); } fBridgeThread.startThread(); const bool needsEngineIdle = pData->engine->getType() != kEngineTypePlugin; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH const bool needsCancelableAction = ! pData->engine->isLoadingProject(); if (needsCancelableAction) { pData->engine->setActionCanceled(false); pData->engine->callback(true, true, ENGINE_CALLBACK_CANCELABLE_ACTION, pData->id, 1, 0, 0, 0.0f, "Loading plugin bridge"); } #endif for (;fBridgeThread.isThreadRunning();) { pData->engine->callback(true, true, ENGINE_CALLBACK_IDLE, 0, 0, 0, 0, 0.0f, nullptr); if (needsEngineIdle) pData->engine->idle(); idle(); if (fInitiated) break; if (pData->engine->isAboutToClose() || pData->engine->wasActionCanceled()) break; carla_msleep(5); } #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (needsCancelableAction) { pData->engine->callback(true, true, ENGINE_CALLBACK_CANCELABLE_ACTION, pData->id, 0, 0, 0, 0.0f, "Loading JACK application"); } #endif if (fInitError || ! fInitiated) { fBridgeThread.stopThread(6000); if (! fInitError) pData->engine->setLastError("Timeout while waiting for a response from plugin-bridge\n" "(or the plugin crashed on initialization?)"); return false; } if (const size_t dataSize = fInfo.chunk.size()) { #ifdef CARLA_PROPER_CPP11_SUPPORT void* data = fInfo.chunk.data(); #else void* data = &fInfo.chunk.front(); #endif CarlaString dataBase64(CarlaString::asBase64(data, dataSize)); CARLA_SAFE_ASSERT_RETURN(dataBase64.length() > 0, true); String filePath(File::getSpecialLocation(File::tempDirectory).getFullPathName()); filePath += CARLA_OS_SEP_STR ".CarlaChunk_"; filePath += fShmAudioPool.getFilenameSuffix(); if (File(filePath).replaceWithText(dataBase64.buffer())) { const uint32_t ulength(static_cast(filePath.length())); const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientSetChunkDataFile); fShmNonRtClientControl.writeUInt(ulength); fShmNonRtClientControl.writeCustomData(filePath.toRawUTF8(), ulength); fShmNonRtClientControl.commitWrite(); } } return true; } void _setUiTitleFromName() { CarlaString uiName(pData->name); uiName += " (GUI)"; const uint32_t size = static_cast(uiName.length()); const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientSetWindowTitle); fShmNonRtClientControl.writeUInt(size); fShmNonRtClientControl.writeCustomData(uiName.buffer(), size); fShmNonRtClientControl.commitWrite(); } CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaPluginBridge) }; CARLA_BACKEND_END_NAMESPACE // --------------------------------------------------------------------------------------------------------------------- CARLA_BACKEND_START_NAMESPACE CarlaPluginPtr CarlaPlugin::newBridge(const Initializer& init, const BinaryType btype, const PluginType ptype, const char* const binaryArchName, const char* bridgeBinary) { carla_debug("CarlaPlugin::newBridge({%p, \"%s\", \"%s\", \"%s\"}, %s, %s, \"%s\", \"%s\")", init.engine, init.filename, init.name, init.label, BinaryType2Str(btype), PluginType2Str(ptype), binaryArchName, bridgeBinary); if (bridgeBinary == nullptr || bridgeBinary[0] == '\0') { init.engine->setLastError("Bridge not possible, bridge-binary not found"); return nullptr; } #ifndef CARLA_OS_WIN // FIXME: somewhere, somehow, we end up with double slashes, wine doesn't like that. if (std::strncmp(bridgeBinary, "//", 2) == 0) ++bridgeBinary; #endif std::shared_ptr plugin(new CarlaPluginBridge(init.engine, init.id, btype, ptype)); if (! plugin->init(plugin, init.filename, init.name, init.label, init.uniqueId, init.options, binaryArchName, bridgeBinary)) return nullptr; return plugin; } CARLA_BACKEND_END_NAMESPACE // --------------------------------------------------------------------------------------------------------------------- #ifndef BUILD_BRIDGE # include "CarlaBridgeUtils.cpp" #endif // --------------------------------------------------------------------------------------------------------------------- Carla-2.4.2/source/backend/plugin/CarlaPluginFluidSynth.cpp000066400000000000000000002175551420416754300236720ustar00rootroot00000000000000/* * Carla FluidSynth Plugin * Copyright (C) 2011-2020 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "CarlaPluginInternal.hpp" #include "CarlaEngine.hpp" #ifdef HAVE_FLUIDSYNTH #include "CarlaBackendUtils.hpp" #include "CarlaMathUtils.hpp" #include "water/text/StringArray.h" #include #define FLUID_DEFAULT_POLYPHONY 64 using water::String; using water::StringArray; CARLA_BACKEND_START_NAMESPACE // ------------------------------------------------------------------------------------------------------------------- // Fallback data static const ExternalMidiNote kExternalMidiNoteFallback = { -1, 0, 0 }; // ------------------------------------------------------------------------------------------------------------------- class CarlaPluginFluidSynth : public CarlaPlugin { public: CarlaPluginFluidSynth(CarlaEngine* const engine, const uint id, const bool use16Outs) : CarlaPlugin(engine, id), kUse16Outs(use16Outs), fSettings(nullptr), fSynth(nullptr), fSynthId(0), fAudio16Buffers(nullptr), fLabel(nullptr) { carla_debug("CarlaPluginFluidSynth::CarlaPluginFluidSynth(%p, %i, %s)", engine, id, bool2str(use16Outs)); carla_zeroFloats(fParamBuffers, FluidSynthParametersMax); carla_fill(fCurMidiProgs, 0, MAX_MIDI_CHANNELS); // create settings fSettings = new_fluid_settings(); CARLA_SAFE_ASSERT_RETURN(fSettings != nullptr,); // define settings fluid_settings_setint(fSettings, "synth.audio-channels", use16Outs ? 16 : 1); fluid_settings_setint(fSettings, "synth.audio-groups", use16Outs ? 16 : 1); fluid_settings_setnum(fSettings, "synth.sample-rate", pData->engine->getSampleRate()); //fluid_settings_setnum(fSettings, "synth.cpu-cores", 2); fluid_settings_setint(fSettings, "synth.ladspa.active", 0); fluid_settings_setint(fSettings, "synth.lock-memory", 1); #if FLUIDSYNTH_VERSION_MAJOR < 2 fluid_settings_setint(fSettings, "synth.parallel-render", 1); #endif fluid_settings_setint(fSettings, "synth.threadsafe-api", 0); #ifdef DEBUG fluid_settings_setint(fSettings, "synth.verbose", 1); #endif // create synth fSynth = new_fluid_synth(fSettings); CARLA_SAFE_ASSERT_RETURN(fSynth != nullptr,); initializeFluidDefaultsIfNeeded(); #if FLUIDSYNTH_VERSION_MAJOR < 2 fluid_synth_set_sample_rate(fSynth, static_cast(pData->engine->getSampleRate())); #endif // set default values fluid_synth_set_reverb_on(fSynth, 1); fluid_synth_set_reverb(fSynth, sFluidDefaults[FluidSynthReverbRoomSize], sFluidDefaults[FluidSynthReverbDamp], sFluidDefaults[FluidSynthReverbWidth], sFluidDefaults[FluidSynthReverbLevel]); fluid_synth_set_chorus_on(fSynth, 1); fluid_synth_set_chorus(fSynth, static_cast(sFluidDefaults[FluidSynthChorusNr] + 0.5f), sFluidDefaults[FluidSynthChorusLevel], sFluidDefaults[FluidSynthChorusSpeedHz], sFluidDefaults[FluidSynthChorusDepthMs], static_cast(sFluidDefaults[FluidSynthChorusType] + 0.5f)); fluid_synth_set_polyphony(fSynth, FLUID_DEFAULT_POLYPHONY); fluid_synth_set_gain(fSynth, 1.0f); for (int i=0; i < MAX_MIDI_CHANNELS; ++i) fluid_synth_set_interp_method(fSynth, i, static_cast(sFluidDefaults[FluidSynthInterpolation] + 0.5f)); } ~CarlaPluginFluidSynth() override { carla_debug("CarlaPluginFluidSynth::~CarlaPluginFluidSynth()"); pData->singleMutex.lock(); pData->masterMutex.lock(); if (pData->client != nullptr && pData->client->isActive()) pData->client->deactivate(true); if (pData->active) { deactivate(); pData->active = false; } if (fSynth != nullptr) { delete_fluid_synth(fSynth); fSynth = nullptr; } if (fSettings != nullptr) { delete_fluid_settings(fSettings); fSettings = nullptr; } if (fLabel != nullptr) { delete[] fLabel; fLabel = nullptr; } clearBuffers(); } // ------------------------------------------------------------------- // Information (base) PluginType getType() const noexcept override { return PLUGIN_SF2; } PluginCategory getCategory() const noexcept override { return PLUGIN_CATEGORY_SYNTH; } // ------------------------------------------------------------------- // Information (count) uint32_t getParameterScalePointCount(const uint32_t parameterId) const noexcept override { switch (parameterId) { case FluidSynthChorusType: return 2; case FluidSynthInterpolation: return 4; default: return 0; } } // ------------------------------------------------------------------- // Information (current data) // nothing // ------------------------------------------------------------------- // Information (per-plugin data) uint getOptionsAvailable() const noexcept override { uint options = 0x0; options |= PLUGIN_OPTION_MAP_PROGRAM_CHANGES; options |= PLUGIN_OPTION_SEND_CONTROL_CHANGES; options |= PLUGIN_OPTION_SEND_CHANNEL_PRESSURE; options |= PLUGIN_OPTION_SEND_PITCHBEND; options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; #if FLUIDSYNTH_VERSION_MAJOR >= 2 options |= PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH; #endif return options; } float getParameterValue(const uint32_t parameterId) const noexcept override { CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, 0.0f); return fParamBuffers[parameterId]; } float getParameterScalePointValue(const uint32_t parameterId, const uint32_t scalePointId) const noexcept override { switch (parameterId) { case FluidSynthChorusType: switch (scalePointId) { case 0: return FLUID_CHORUS_MOD_SINE; case 1: return FLUID_CHORUS_MOD_TRIANGLE; default: return sFluidDefaults[FluidSynthChorusType]; } case FluidSynthInterpolation: switch (scalePointId) { case 0: return FLUID_INTERP_NONE; case 1: return FLUID_INTERP_LINEAR; case 2: return FLUID_INTERP_4THORDER; case 3: return FLUID_INTERP_7THORDER; default: return sFluidDefaults[FluidSynthInterpolation]; } default: return 0.0f; } } bool getLabel(char* const strBuf) const noexcept override { if (fLabel != nullptr) { std::strncpy(strBuf, fLabel, STR_MAX); return true; } return CarlaPlugin::getLabel(strBuf); } bool getMaker(char* const strBuf) const noexcept override { std::strncpy(strBuf, "FluidSynth SF2 engine", STR_MAX); return true; } bool getCopyright(char* const strBuf) const noexcept override { std::strncpy(strBuf, "GNU GPL v2+", STR_MAX); return true; } bool getRealName(char* const strBuf) const noexcept override { return getLabel(strBuf); } bool getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false); switch (parameterId) { case FluidSynthReverbOnOff: std::strncpy(strBuf, "Reverb On/Off", STR_MAX); return true; case FluidSynthReverbRoomSize: std::strncpy(strBuf, "Reverb Room Size", STR_MAX); return true; case FluidSynthReverbDamp: std::strncpy(strBuf, "Reverb Damp", STR_MAX); return true; case FluidSynthReverbLevel: std::strncpy(strBuf, "Reverb Level", STR_MAX); return true; case FluidSynthReverbWidth: std::strncpy(strBuf, "Reverb Width", STR_MAX); return true; case FluidSynthChorusOnOff: std::strncpy(strBuf, "Chorus On/Off", STR_MAX); return true; case FluidSynthChorusNr: std::strncpy(strBuf, "Chorus Voice Count", STR_MAX); return true; case FluidSynthChorusLevel: std::strncpy(strBuf, "Chorus Level", STR_MAX); return true; case FluidSynthChorusSpeedHz: std::strncpy(strBuf, "Chorus Speed", STR_MAX); return true; case FluidSynthChorusDepthMs: std::strncpy(strBuf, "Chorus Depth", STR_MAX); return true; case FluidSynthChorusType: std::strncpy(strBuf, "Chorus Type", STR_MAX); return true; case FluidSynthPolyphony: std::strncpy(strBuf, "Polyphony", STR_MAX); return true; case FluidSynthInterpolation: std::strncpy(strBuf, "Interpolation", STR_MAX); return true; case FluidSynthVoiceCount: std::strncpy(strBuf, "Voice Count", STR_MAX); return true; } return CarlaPlugin::getParameterName(parameterId, strBuf); } bool getParameterUnit(const uint32_t parameterId, char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false); switch (parameterId) { case FluidSynthChorusSpeedHz: std::strncpy(strBuf, "Hz", STR_MAX); return true; case FluidSynthChorusDepthMs: std::strncpy(strBuf, "ms", STR_MAX); return true; } return CarlaPlugin::getParameterUnit(parameterId, strBuf); } bool getParameterScalePointLabel(const uint32_t parameterId, const uint32_t scalePointId, char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false); CARLA_SAFE_ASSERT_RETURN(scalePointId < getParameterScalePointCount(parameterId), false); switch (parameterId) { case FluidSynthChorusType: switch (scalePointId) { case 0: std::strncpy(strBuf, "Sine wave", STR_MAX); return true; case 1: std::strncpy(strBuf, "Triangle wave", STR_MAX); return true; } break; case FluidSynthInterpolation: switch (scalePointId) { case 0: std::strncpy(strBuf, "None", STR_MAX); return true; case 1: std::strncpy(strBuf, "Straight-line", STR_MAX); return true; case 2: std::strncpy(strBuf, "Fourth-order", STR_MAX); return true; case 3: std::strncpy(strBuf, "Seventh-order", STR_MAX); return true; } break; } return CarlaPlugin::getParameterScalePointLabel(parameterId, scalePointId, strBuf); } // ------------------------------------------------------------------- // Set data (state) void prepareForSave(bool) override { char strBuf[STR_MAX+1]; std::snprintf(strBuf, STR_MAX, "%i:%i:%i:%i:%i:%i:%i:%i:%i:%i:%i:%i:%i:%i:%i:%i", fCurMidiProgs[0], fCurMidiProgs[1], fCurMidiProgs[2], fCurMidiProgs[3], fCurMidiProgs[4], fCurMidiProgs[5], fCurMidiProgs[6], fCurMidiProgs[7], fCurMidiProgs[8], fCurMidiProgs[9], fCurMidiProgs[10], fCurMidiProgs[11], fCurMidiProgs[12], fCurMidiProgs[13], fCurMidiProgs[14], fCurMidiProgs[15]); CarlaPlugin::setCustomData(CUSTOM_DATA_TYPE_STRING, "midiPrograms", strBuf, false); } // ------------------------------------------------------------------- // Set data (internal stuff) void setCtrlChannel(const int8_t channel, const bool sendOsc, const bool sendCallback) noexcept override { if (channel >= 0 && channel < MAX_MIDI_CHANNELS) pData->midiprog.current = fCurMidiProgs[channel]; CarlaPlugin::setCtrlChannel(channel, sendOsc, sendCallback); } // ------------------------------------------------------------------- // Set data (plugin-specific stuff) void setParameterValue(const uint32_t parameterId, const float value, const bool sendGui, const bool sendOsc, const bool sendCallback) noexcept override { CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,); CARLA_SAFE_ASSERT_RETURN(sendGui || sendOsc || sendCallback,); float fixedValue; { const ScopedSingleProcessLocker spl(this, (sendGui || sendOsc || sendCallback)); fixedValue = setParameterValueInFluidSynth(parameterId, value); } CarlaPlugin::setParameterValue(parameterId, fixedValue, sendGui, sendOsc, sendCallback); } void setParameterValueRT(const uint32_t parameterId, const float value, const bool sendCallbackLater) noexcept override { const float fixedValue = setParameterValueInFluidSynth(parameterId, value); CarlaPlugin::setParameterValueRT(parameterId, fixedValue, sendCallbackLater); } float setParameterValueInFluidSynth(const uint32_t parameterId, const float value) noexcept { CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, value); const float fixedValue(pData->param.getFixedValue(parameterId, value)); fParamBuffers[parameterId] = fixedValue; switch (parameterId) { case FluidSynthReverbOnOff: try { fluid_synth_set_reverb_on(fSynth, (fixedValue > 0.5f) ? 1 : 0); } CARLA_SAFE_EXCEPTION("fluid_synth_set_reverb_on") break; case FluidSynthReverbRoomSize: case FluidSynthReverbDamp: case FluidSynthReverbLevel: case FluidSynthReverbWidth: try { fluid_synth_set_reverb(fSynth, fParamBuffers[FluidSynthReverbRoomSize], fParamBuffers[FluidSynthReverbDamp], fParamBuffers[FluidSynthReverbWidth], fParamBuffers[FluidSynthReverbLevel]); } CARLA_SAFE_EXCEPTION("fluid_synth_set_reverb") break; case FluidSynthChorusOnOff: try { fluid_synth_set_chorus_on(fSynth, (value > 0.5f) ? 1 : 0); } CARLA_SAFE_EXCEPTION("fluid_synth_set_chorus_on") break; case FluidSynthChorusNr: case FluidSynthChorusLevel: case FluidSynthChorusSpeedHz: case FluidSynthChorusDepthMs: case FluidSynthChorusType: try { fluid_synth_set_chorus(fSynth, static_cast(fParamBuffers[FluidSynthChorusNr] + 0.5f), fParamBuffers[FluidSynthChorusLevel], fParamBuffers[FluidSynthChorusSpeedHz], fParamBuffers[FluidSynthChorusDepthMs], static_cast(fParamBuffers[FluidSynthChorusType] + 0.5f)); } CARLA_SAFE_EXCEPTION("fluid_synth_set_chorus") break; case FluidSynthPolyphony: try { fluid_synth_set_polyphony(fSynth, static_cast(value + 0.5f)); } CARLA_SAFE_EXCEPTION("fluid_synth_set_polyphony") break; case FluidSynthInterpolation: for (int i=0; i < MAX_MIDI_CHANNELS; ++i) { try { fluid_synth_set_interp_method(fSynth, i, static_cast(value + 0.5f)); } CARLA_SAFE_EXCEPTION_BREAK("fluid_synth_set_interp_method") } break; default: break; } return fixedValue; } void setCustomData(const char* const type, const char* const key, const char* const value, const bool sendGui) override { CARLA_SAFE_ASSERT_RETURN(fSynth != nullptr,); CARLA_SAFE_ASSERT_RETURN(type != nullptr && type[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(key != nullptr && key[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(value != nullptr && value[0] != '\0',); carla_debug("CarlaPluginFluidSynth::setCustomData(%s, \"%s\", \"%s\", %s)", type, key, value, bool2str(sendGui)); if (std::strcmp(type, CUSTOM_DATA_TYPE_PROPERTY) == 0) return CarlaPlugin::setCustomData(type, key, value, sendGui); if (std::strcmp(type, CUSTOM_DATA_TYPE_STRING) != 0) return carla_stderr2("CarlaPluginFluidSynth::setCustomData(\"%s\", \"%s\", \"%s\", %s) - type is not string", type, key, value, bool2str(sendGui)); if (std::strcmp(key, "midiPrograms") != 0) return carla_stderr2("CarlaPluginFluidSynth::setCustomData(\"%s\", \"%s\", \"%s\", %s) - type is not string", type, key, value, bool2str(sendGui)); StringArray midiProgramList(StringArray::fromTokens(value, ":", "")); if (midiProgramList.size() == MAX_MIDI_CHANNELS) { uint8_t channel = 0; for (String *it=midiProgramList.begin(), *end=midiProgramList.end(); it != end; ++it) { const int index(it->getIntValue()); if (index >= 0 && index < static_cast(pData->midiprog.count)) { const uint32_t bank = pData->midiprog.data[index].bank; const uint32_t program = pData->midiprog.data[index].program; #if FLUIDSYNTH_VERSION_MAJOR >= 2 fluid_synth_program_select(fSynth, static_cast(channel), fSynthId, static_cast(bank), static_cast(program)); #else fluid_synth_program_select(fSynth, channel, fSynthId, bank, program); #endif fCurMidiProgs[channel] = index; if (pData->ctrlChannel == static_cast(channel)) { pData->midiprog.current = index; pData->engine->callback(true, true, ENGINE_CALLBACK_MIDI_PROGRAM_CHANGED, pData->id, index, 0, 0, 0.0f, nullptr); } } ++channel; } CARLA_SAFE_ASSERT(channel == MAX_MIDI_CHANNELS); } CarlaPlugin::setCustomData(type, key, value, sendGui); } void setMidiProgram(const int32_t index, const bool sendGui, const bool sendOsc, const bool sendCallback, const bool doingInit) noexcept override { CARLA_SAFE_ASSERT_RETURN(fSynth != nullptr,); CARLA_SAFE_ASSERT_RETURN(index >= -1 && index < static_cast(pData->midiprog.count),); CARLA_SAFE_ASSERT_RETURN(sendGui || sendOsc || sendCallback || doingInit,); if (index >= 0 && pData->ctrlChannel >= 0 && pData->ctrlChannel < MAX_MIDI_CHANNELS) { const uint32_t bank = pData->midiprog.data[index].bank; const uint32_t program = pData->midiprog.data[index].program; const ScopedSingleProcessLocker spl(this, (sendGui || sendOsc || sendCallback)); try { #if FLUIDSYNTH_VERSION_MAJOR >= 2 fluid_synth_program_select(fSynth, pData->ctrlChannel, fSynthId, static_cast(bank), static_cast(program)); #else fluid_synth_program_select(fSynth, pData->ctrlChannel, fSynthId, bank, program); #endif } CARLA_SAFE_EXCEPTION("fluid_synth_program_select") fCurMidiProgs[pData->ctrlChannel] = index; } CarlaPlugin::setMidiProgram(index, sendGui, sendOsc, sendCallback, doingInit); } // FIXME: this is never used void setMidiProgramRT(const uint32_t uindex, const bool sendCallbackLater) noexcept override { CARLA_SAFE_ASSERT_RETURN(fSynth != nullptr,); CARLA_SAFE_ASSERT_RETURN(uindex < pData->midiprog.count,); if (pData->ctrlChannel >= 0 && pData->ctrlChannel < MAX_MIDI_CHANNELS) { const uint32_t bank = pData->midiprog.data[uindex].bank; const uint32_t program = pData->midiprog.data[uindex].program; try { #if FLUIDSYNTH_VERSION_MAJOR >= 2 fluid_synth_program_select(fSynth, pData->ctrlChannel, fSynthId, static_cast(bank), static_cast(program)); #else fluid_synth_program_select(fSynth, pData->ctrlChannel, fSynthId, bank, program); #endif } CARLA_SAFE_EXCEPTION("fluid_synth_program_select") fCurMidiProgs[pData->ctrlChannel] = static_cast(uindex); } CarlaPlugin::setMidiProgramRT(uindex, sendCallbackLater); } // ------------------------------------------------------------------- // Set ui stuff // nothing // ------------------------------------------------------------------- // Plugin state void reload() override { CARLA_SAFE_ASSERT_RETURN(pData->engine != nullptr,); CARLA_SAFE_ASSERT_RETURN(fSynth != nullptr,); carla_debug("CarlaPluginFluidSynth::reload() - start"); const EngineProcessMode processMode(pData->engine->getProccessMode()); // Safely disable plugin for reload const ScopedDisabler sd(this); if (pData->active) deactivate(); clearBuffers(); uint32_t aOuts, params; aOuts = kUse16Outs ? 32 : 2; params = FluidSynthParametersMax; pData->audioOut.createNew(aOuts); pData->param.createNew(params, false); const uint portNameSize(pData->engine->getMaxPortNameSize()); CarlaString portName; // --------------------------------------- // Audio Outputs if (kUse16Outs) { for (uint32_t i=0; i < 32; ++i) { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } portName += "out-"; if ((i+2)/2 < 9) portName += "0"; portName += CarlaString((i+2)/2); if (i % 2 == 0) portName += "L"; else portName += "R"; portName.truncate(portNameSize); pData->audioOut.ports[i].port = (CarlaEngineAudioPort*)pData->client->addPort(kEnginePortTypeAudio, portName, false, i); pData->audioOut.ports[i].rindex = i; } fAudio16Buffers = new float*[aOuts]; for (uint32_t i=0; i < aOuts; ++i) fAudio16Buffers[i] = nullptr; } else { // out-left portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } portName += "out-left"; portName.truncate(portNameSize); pData->audioOut.ports[0].port = (CarlaEngineAudioPort*)pData->client->addPort(kEnginePortTypeAudio, portName, false, 0); pData->audioOut.ports[0].rindex = 0; // out-right portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } portName += "out-right"; portName.truncate(portNameSize); pData->audioOut.ports[1].port = (CarlaEngineAudioPort*)pData->client->addPort(kEnginePortTypeAudio, portName, false, 1); pData->audioOut.ports[1].rindex = 1; } // --------------------------------------- // Event Input { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } portName += "events-in"; portName.truncate(portNameSize); pData->event.portIn = (CarlaEngineEventPort*)pData->client->addPort(kEnginePortTypeEvent, portName, true, 0); } // --------------------------------------- // Event Output { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } portName += "events-out"; portName.truncate(portNameSize); pData->event.portOut = (CarlaEngineEventPort*)pData->client->addPort(kEnginePortTypeEvent, portName, false, 0); } // --------------------------------------- // Parameters { int j; // ---------------------- j = FluidSynthReverbOnOff; pData->param.data[j].type = PARAMETER_INPUT; pData->param.data[j].hints = PARAMETER_IS_ENABLED /*| PARAMETER_IS_AUTOMATABLE*/ | PARAMETER_IS_BOOLEAN; pData->param.data[j].index = j; pData->param.data[j].rindex = j; pData->param.ranges[j].min = 0.0f; pData->param.ranges[j].max = 1.0f; pData->param.ranges[j].def = sFluidDefaults[j]; pData->param.ranges[j].step = 1.0f; pData->param.ranges[j].stepSmall = 1.0f; pData->param.ranges[j].stepLarge = 1.0f; // ---------------------- j = FluidSynthReverbRoomSize; pData->param.data[j].type = PARAMETER_INPUT; pData->param.data[j].hints = PARAMETER_IS_ENABLED /*| PARAMETER_IS_AUTOMATABLE*/; pData->param.data[j].index = j; pData->param.data[j].rindex = j; pData->param.ranges[j].min = 0.0f; pData->param.ranges[j].max = 1.0f; pData->param.ranges[j].def = sFluidDefaults[j]; pData->param.ranges[j].step = 0.01f; pData->param.ranges[j].stepSmall = 0.0001f; pData->param.ranges[j].stepLarge = 0.1f; // ---------------------- j = FluidSynthReverbDamp; pData->param.data[j].type = PARAMETER_INPUT; pData->param.data[j].hints = PARAMETER_IS_ENABLED /*| PARAMETER_IS_AUTOMATABLE*/; pData->param.data[j].index = j; pData->param.data[j].rindex = j; pData->param.ranges[j].min = 0.0f; pData->param.ranges[j].max = 1.0f; pData->param.ranges[j].def = sFluidDefaults[j]; pData->param.ranges[j].step = 0.01f; pData->param.ranges[j].stepSmall = 0.0001f; pData->param.ranges[j].stepLarge = 0.1f; // ---------------------- j = FluidSynthReverbLevel; pData->param.data[j].type = PARAMETER_INPUT; pData->param.data[j].hints = PARAMETER_IS_ENABLED /*| PARAMETER_IS_AUTOMATABLE*/; pData->param.data[j].index = j; pData->param.data[j].rindex = j; pData->param.data[j].mappedControlIndex = MIDI_CONTROL_REVERB_SEND_LEVEL; pData->param.ranges[j].min = 0.0f; pData->param.ranges[j].max = 1.0f; pData->param.ranges[j].def = sFluidDefaults[j]; pData->param.ranges[j].step = 0.01f; pData->param.ranges[j].stepSmall = 0.0001f; pData->param.ranges[j].stepLarge = 0.1f; // ---------------------- j = FluidSynthReverbWidth; pData->param.data[j].type = PARAMETER_INPUT; pData->param.data[j].hints = PARAMETER_IS_ENABLED /*| PARAMETER_IS_AUTOMATABLE*/; pData->param.data[j].index = j; pData->param.data[j].rindex = j; pData->param.ranges[j].min = 0.0f; pData->param.ranges[j].max = 10.0f; // should be 100, but that sounds too much pData->param.ranges[j].def = sFluidDefaults[j]; pData->param.ranges[j].step = 0.01f; pData->param.ranges[j].stepSmall = 0.0001f; pData->param.ranges[j].stepLarge = 0.1f; // ---------------------- j = FluidSynthChorusOnOff; pData->param.data[j].type = PARAMETER_INPUT; pData->param.data[j].hints = PARAMETER_IS_ENABLED | PARAMETER_IS_BOOLEAN; pData->param.data[j].index = j; pData->param.data[j].rindex = j; pData->param.ranges[j].min = 0.0f; pData->param.ranges[j].max = 1.0f; pData->param.ranges[j].def = sFluidDefaults[j]; pData->param.ranges[j].step = 1.0f; pData->param.ranges[j].stepSmall = 1.0f; pData->param.ranges[j].stepLarge = 1.0f; // ---------------------- j = FluidSynthChorusNr; pData->param.data[j].type = PARAMETER_INPUT; pData->param.data[j].hints = PARAMETER_IS_ENABLED | PARAMETER_IS_INTEGER; pData->param.data[j].index = j; pData->param.data[j].rindex = j; pData->param.ranges[j].min = 0.0f; pData->param.ranges[j].max = 99.0f; pData->param.ranges[j].def = sFluidDefaults[j]; pData->param.ranges[j].step = 1.0f; pData->param.ranges[j].stepSmall = 1.0f; pData->param.ranges[j].stepLarge = 10.0f; // ---------------------- j = FluidSynthChorusLevel; pData->param.data[j].type = PARAMETER_INPUT; pData->param.data[j].hints = PARAMETER_IS_ENABLED; pData->param.data[j].index = j; pData->param.data[j].rindex = j; pData->param.ranges[j].min = 0.0f; pData->param.ranges[j].max = 10.0f; pData->param.ranges[j].def = sFluidDefaults[j]; pData->param.ranges[j].step = 0.01f; pData->param.ranges[j].stepSmall = 0.0001f; pData->param.ranges[j].stepLarge = 0.1f; // ---------------------- j = FluidSynthChorusSpeedHz; pData->param.data[j].type = PARAMETER_INPUT; pData->param.data[j].hints = PARAMETER_IS_ENABLED; pData->param.data[j].index = j; pData->param.data[j].rindex = j; pData->param.ranges[j].min = 0.29f; pData->param.ranges[j].max = 5.0f; pData->param.ranges[j].def = sFluidDefaults[j]; pData->param.ranges[j].step = 0.01f; pData->param.ranges[j].stepSmall = 0.0001f; pData->param.ranges[j].stepLarge = 0.1f; // ---------------------- j = FluidSynthChorusDepthMs; pData->param.data[j].type = PARAMETER_INPUT; pData->param.data[j].hints = PARAMETER_IS_ENABLED; pData->param.data[j].index = j; pData->param.data[j].rindex = j; pData->param.ranges[j].min = 0.0f; #if FLUIDSYNTH_VERSION_MAJOR >= 2 pData->param.ranges[j].max = 256.0f; #else pData->param.ranges[j].max = float(2048.0 * 1000.0 / pData->engine->getSampleRate()); // FIXME? #endif pData->param.ranges[j].def = sFluidDefaults[j]; pData->param.ranges[j].step = 0.01f; pData->param.ranges[j].stepSmall = 0.0001f; pData->param.ranges[j].stepLarge = 0.1f; // ---------------------- j = FluidSynthChorusType; pData->param.data[j].type = PARAMETER_INPUT; pData->param.data[j].hints = PARAMETER_IS_ENABLED | PARAMETER_IS_INTEGER | PARAMETER_USES_SCALEPOINTS; pData->param.data[j].index = j; pData->param.data[j].rindex = j; pData->param.ranges[j].min = FLUID_CHORUS_MOD_SINE; pData->param.ranges[j].max = FLUID_CHORUS_MOD_TRIANGLE; pData->param.ranges[j].def = sFluidDefaults[j]; pData->param.ranges[j].step = 1.0f; pData->param.ranges[j].stepSmall = 1.0f; pData->param.ranges[j].stepLarge = 1.0f; // ---------------------- j = FluidSynthPolyphony; pData->param.data[j].type = PARAMETER_INPUT; pData->param.data[j].hints = PARAMETER_IS_ENABLED | PARAMETER_IS_INTEGER; pData->param.data[j].index = j; pData->param.data[j].rindex = j; pData->param.ranges[j].min = 1.0f; pData->param.ranges[j].max = 512.0f; // max theoric is 65535 pData->param.ranges[j].def = sFluidDefaults[j]; pData->param.ranges[j].step = 1.0f; pData->param.ranges[j].stepSmall = 1.0f; pData->param.ranges[j].stepLarge = 10.0f; // ---------------------- j = FluidSynthInterpolation; pData->param.data[j].type = PARAMETER_INPUT; pData->param.data[j].hints = PARAMETER_IS_ENABLED | PARAMETER_IS_INTEGER | PARAMETER_USES_SCALEPOINTS; pData->param.data[j].index = j; pData->param.data[j].rindex = j; pData->param.ranges[j].min = FLUID_INTERP_NONE; pData->param.ranges[j].max = FLUID_INTERP_HIGHEST; pData->param.ranges[j].def = sFluidDefaults[j]; pData->param.ranges[j].step = 1.0f; pData->param.ranges[j].stepSmall = 1.0f; pData->param.ranges[j].stepLarge = 1.0f; // ---------------------- j = FluidSynthVoiceCount; pData->param.data[j].type = PARAMETER_OUTPUT; pData->param.data[j].hints = PARAMETER_IS_ENABLED | PARAMETER_IS_AUTOMATABLE | PARAMETER_IS_INTEGER; pData->param.data[j].index = j; pData->param.data[j].rindex = j; pData->param.ranges[j].min = 0.0f; pData->param.ranges[j].max = 65535.0f; pData->param.ranges[j].def = 0.0f; pData->param.ranges[j].step = 1.0f; pData->param.ranges[j].stepSmall = 1.0f; pData->param.ranges[j].stepLarge = 1.0f; for (j=0; jparam.ranges[j].def; } // --------------------------------------- // plugin hints pData->hints = 0x0; pData->hints |= PLUGIN_IS_SYNTH; pData->hints |= PLUGIN_CAN_VOLUME; pData->hints |= PLUGIN_USES_MULTI_PROGS; if (! kUse16Outs) pData->hints |= PLUGIN_CAN_BALANCE; // extra plugin hints pData->extraHints = 0x0; pData->extraHints |= PLUGIN_EXTRA_HINT_HAS_MIDI_IN; bufferSizeChanged(pData->engine->getBufferSize()); reloadPrograms(true); if (pData->active) activate(); carla_debug("CarlaPluginFluidSynth::reload() - end"); } void reloadPrograms(const bool doInit) override { carla_debug("CarlaPluginFluidSynth::reloadPrograms(%s)", bool2str(doInit)); // save drum info in case we have one program for it bool hasDrums = false; uint32_t drumIndex, drumProg; drumIndex = drumProg = 0; // Delete old programs pData->midiprog.clear(); // Query new programs uint32_t count = 0; if (fluid_sfont_t* const f_sfont = fluid_synth_get_sfont_by_id(fSynth, fSynthId)) { #if FLUIDSYNTH_VERSION_MAJOR >= 2 fluid_preset_t* f_preset; // initial check to know how many midi-programs we have fluid_sfont_iteration_start(f_sfont); for (; fluid_sfont_iteration_next(f_sfont);) ++count; // sound kits must always have at least 1 midi-program CARLA_SAFE_ASSERT_RETURN(count > 0,); pData->midiprog.createNew(count); // Update data int tmp; uint32_t i = 0; fluid_sfont_iteration_start(f_sfont); for (; (f_preset = fluid_sfont_iteration_next(f_sfont));) { CARLA_SAFE_ASSERT_BREAK(i < count); tmp = fluid_preset_get_banknum(f_preset); pData->midiprog.data[i].bank = (tmp >= 0) ? static_cast(tmp) : 0; tmp = fluid_preset_get_num(f_preset); pData->midiprog.data[i].program = (tmp >= 0) ? static_cast(tmp) : 0; pData->midiprog.data[i].name = carla_strdup(fluid_preset_get_name(f_preset)); #else fluid_preset_t f_preset; // initial check to know how many midi-programs we have f_sfont->iteration_start(f_sfont); for (; f_sfont->iteration_next(f_sfont, &f_preset);) ++count; // sound kits must always have at least 1 midi-program CARLA_SAFE_ASSERT_RETURN(count > 0,); pData->midiprog.createNew(count); // Update data int tmp; uint32_t i = 0; f_sfont->iteration_start(f_sfont); for (; f_sfont->iteration_next(f_sfont, &f_preset);) { CARLA_SAFE_ASSERT_BREAK(i < count); tmp = f_preset.get_banknum(&f_preset); pData->midiprog.data[i].bank = (tmp >= 0) ? static_cast(tmp) : 0; tmp = f_preset.get_num(&f_preset); pData->midiprog.data[i].program = (tmp >= 0) ? static_cast(tmp) : 0; pData->midiprog.data[i].name = carla_strdup(f_preset.get_name(&f_preset)); #endif if (pData->midiprog.data[i].bank == 128 && ! hasDrums) { hasDrums = true; drumIndex = i; drumProg = pData->midiprog.data[i].program; } ++i; } } else { // failing means 0 midi-programs, it shouldn't happen! carla_safe_assert("fluid_sfont_t* const f_sfont = fluid_synth_get_sfont_by_id(fSynth, fSynthId)", __FILE__, __LINE__); return; } if (doInit) { fluid_synth_program_reset(fSynth); // select first program, or 128 for ch10 for (int i=0; i < MAX_MIDI_CHANNELS && i != 9; ++i) { fluid_synth_set_channel_type(fSynth, i, CHANNEL_TYPE_MELODIC); #if FLUIDSYNTH_VERSION_MAJOR >= 2 fluid_synth_program_select(fSynth, i, fSynthId, static_cast(pData->midiprog.data[0].bank), static_cast(pData->midiprog.data[0].program)); #else fluid_synth_program_select(fSynth, i, fSynthId, pData->midiprog.data[0].bank, pData->midiprog.data[0].program); #endif fCurMidiProgs[i] = 0; } if (hasDrums) { fluid_synth_set_channel_type(fSynth, 9, CHANNEL_TYPE_DRUM); #if FLUIDSYNTH_VERSION_MAJOR >= 2 fluid_synth_program_select(fSynth, 9, fSynthId, 128, static_cast(drumProg)); #else fluid_synth_program_select(fSynth, 9, fSynthId, 128, drumProg); #endif fCurMidiProgs[9] = static_cast(drumIndex); } else { fluid_synth_set_channel_type(fSynth, 9, CHANNEL_TYPE_MELODIC); #if FLUIDSYNTH_VERSION_MAJOR >= 2 fluid_synth_program_select(fSynth, 9, fSynthId, static_cast(pData->midiprog.data[0].bank), static_cast(pData->midiprog.data[0].program)); #else fluid_synth_program_select(fSynth, 9, fSynthId, pData->midiprog.data[0].bank, pData->midiprog.data[0].program); #endif fCurMidiProgs[9] = 0; } pData->midiprog.current = 0; } else { pData->engine->callback(true, true, ENGINE_CALLBACK_RELOAD_PROGRAMS, pData->id, 0, 0, 0, 0.0f, nullptr); } } // ------------------------------------------------------------------- // Plugin processing void process(const float* const* const, float** const audioOut, const float* const*, float**, const uint32_t frames) override { // -------------------------------------------------------------------------------------------------------- // Check if active if (! pData->active) { // disable any output sound for (uint32_t i=0; i < pData->audioOut.count; ++i) carla_zeroFloats(audioOut[i], frames); return; } // -------------------------------------------------------------------------------------------------------- // Check if needs reset if (pData->needsReset) { if (pData->options & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) { for (int i=0; i < MAX_MIDI_CHANNELS; ++i) { fluid_synth_all_notes_off(fSynth, i); fluid_synth_all_sounds_off(fSynth, i); } } else if (pData->ctrlChannel >= 0 && pData->ctrlChannel < MAX_MIDI_CHANNELS) { for (int i=0; i < MAX_MIDI_NOTE; ++i) fluid_synth_noteoff(fSynth, pData->ctrlChannel, i); } pData->needsReset = false; } // -------------------------------------------------------------------------------------------------------- // Event Input and Processing { // ---------------------------------------------------------------------------------------------------- // MIDI Input (External) if (pData->extNotes.mutex.tryLock()) { for (RtLinkedList::Itenerator it = pData->extNotes.data.begin2(); it.valid(); it.next()) { const ExternalMidiNote& note(it.getValue(kExternalMidiNoteFallback)); CARLA_SAFE_ASSERT_CONTINUE(note.channel >= 0 && note.channel < MAX_MIDI_CHANNELS); if (note.velo > 0) fluid_synth_noteon(fSynth, note.channel, note.note, note.velo); else fluid_synth_noteoff(fSynth,note.channel, note.note); } pData->extNotes.data.clear(); pData->extNotes.mutex.unlock(); } // End of MIDI Input (External) // ---------------------------------------------------------------------------------------------------- // Event Input (System) #ifndef BUILD_BRIDGE bool allNotesOffSent = false; #endif uint32_t timeOffset = 0; uint32_t nextBankIds[MAX_MIDI_CHANNELS] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0 }; if (pData->midiprog.current >= 0 && pData->midiprog.count > 0 && pData->ctrlChannel >= 0 && pData->ctrlChannel < MAX_MIDI_CHANNELS) nextBankIds[pData->ctrlChannel] = pData->midiprog.data[pData->midiprog.current].bank; for (uint32_t i=0, numEvents=pData->event.portIn->getEventCount(); i < numEvents; ++i) { const EngineEvent& event(pData->event.portIn->getEvent(i)); uint32_t eventTime = event.time; CARLA_SAFE_ASSERT_UINT2_CONTINUE(eventTime < frames, eventTime, frames); if (eventTime < timeOffset) { carla_stderr2("Timing error, eventTime:%u < timeOffset:%u for '%s'", eventTime, timeOffset, pData->name); eventTime = timeOffset; } else if (eventTime > timeOffset) { if (processSingle(audioOut, eventTime - timeOffset, timeOffset)) { timeOffset = eventTime; if (pData->midiprog.current >= 0 && pData->midiprog.count > 0 && pData->ctrlChannel >= 0 && pData->ctrlChannel < MAX_MIDI_CHANNELS) nextBankIds[pData->ctrlChannel] = pData->midiprog.data[pData->midiprog.current].bank; } } // Control change switch (event.type) { case kEngineEventTypeNull: break; case kEngineEventTypeControl: { const EngineControlEvent& ctrlEvent = event.ctrl; switch (ctrlEvent.type) { case kEngineControlEventTypeNull: break; case kEngineControlEventTypeParameter: { float value; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // Control backend stuff if (event.channel == pData->ctrlChannel) { if (MIDI_IS_CONTROL_BREATH_CONTROLLER(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_DRYWET) != 0) { value = ctrlEvent.normalizedValue; setDryWetRT(value, true); } if (MIDI_IS_CONTROL_CHANNEL_VOLUME(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_VOLUME) != 0) { value = ctrlEvent.normalizedValue*127.0f/100.0f; setVolumeRT(value, true); } if (MIDI_IS_CONTROL_BALANCE(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_BALANCE) != 0) { float left, right; value = ctrlEvent.normalizedValue/0.5f - 1.0f; if (value < 0.0f) { left = -1.0f; right = (value*2.0f)+1.0f; } else if (value > 0.0f) { left = (value*2.0f)-1.0f; right = 1.0f; } else { left = -1.0f; right = 1.0f; } setBalanceLeftRT(left, true); setBalanceRightRT(right, true); } } #endif // Control plugin parameters for (uint32_t k=0; k < pData->param.count; ++k) { if (pData->param.data[k].midiChannel != event.channel) continue; if (pData->param.data[k].mappedControlIndex != ctrlEvent.param) continue; if (pData->param.data[k].hints != PARAMETER_INPUT) continue; if ((pData->param.data[k].hints & PARAMETER_IS_AUTOMATABLE) == 0) continue; value = pData->param.getFinalUnnormalizedValue(k, ctrlEvent.normalizedValue); setParameterValueRT(k, value, true); } if ((pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) != 0 && ctrlEvent.param < MAX_MIDI_VALUE) { fluid_synth_cc(fSynth, event.channel, ctrlEvent.param, int(ctrlEvent.normalizedValue*127.0f)); } break; } case kEngineControlEventTypeMidiBank: if (event.channel < MAX_MIDI_CHANNELS && (pData->options & PLUGIN_OPTION_MAP_PROGRAM_CHANGES) != 0) nextBankIds[event.channel] = ctrlEvent.param; break; case kEngineControlEventTypeMidiProgram: if (event.channel < MAX_MIDI_CHANNELS && (pData->options & PLUGIN_OPTION_MAP_PROGRAM_CHANGES) != 0) { const uint32_t bankId(nextBankIds[event.channel]); const uint32_t progId(ctrlEvent.param); // TODO int32_t midiprog.find(bank, prog) for (uint32_t k=0; k < pData->midiprog.count; ++k) { if (pData->midiprog.data[k].bank == bankId && pData->midiprog.data[k].program == progId) { #if FLUIDSYNTH_VERSION_MAJOR >= 2 fluid_synth_program_select(fSynth, event.channel, fSynthId, static_cast(bankId), static_cast(progId)); #else fluid_synth_program_select(fSynth, event.channel, fSynthId, bankId, progId); #endif fCurMidiProgs[event.channel] = static_cast(k); if (event.channel == pData->ctrlChannel) { pData->postponeMidiProgramChangeRtEvent(true, k); } break; } } } break; case kEngineControlEventTypeAllSoundOff: if (pData->options & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) fluid_synth_all_sounds_off(fSynth, event.channel); break; case kEngineControlEventTypeAllNotesOff: if (pData->options & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) { #ifndef BUILD_BRIDGE if (event.channel == pData->ctrlChannel && ! allNotesOffSent) { allNotesOffSent = true; postponeRtAllNotesOff(); } #endif fluid_synth_all_notes_off(fSynth, event.channel); } break; } break; } case kEngineEventTypeMidi: { const EngineMidiEvent& midiEvent(event.midi); if (midiEvent.size > EngineMidiEvent::kDataSize) continue; uint8_t status = uint8_t(MIDI_GET_STATUS_FROM_DATA(midiEvent.data)); // Fix bad note-off if (status == MIDI_STATUS_NOTE_ON && midiEvent.data[2] == 0) status = MIDI_STATUS_NOTE_OFF; switch (status) { case MIDI_STATUS_NOTE_OFF: if ((pData->options & PLUGIN_OPTION_SKIP_SENDING_NOTES) == 0x0) { const uint8_t note = midiEvent.data[1]; fluid_synth_noteoff(fSynth, event.channel, note); pData->postponeNoteOffRtEvent(true, event.channel, note); } break; case MIDI_STATUS_NOTE_ON: if ((pData->options & PLUGIN_OPTION_SKIP_SENDING_NOTES) == 0x0) { const uint8_t note = midiEvent.data[1]; const uint8_t velo = midiEvent.data[2]; fluid_synth_noteon(fSynth, event.channel, note, velo); pData->postponeNoteOnRtEvent(true, event.channel, note, velo); } break; #if FLUIDSYNTH_VERSION_MAJOR >= 2 case MIDI_STATUS_POLYPHONIC_AFTERTOUCH: if (pData->options & PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH) { const uint8_t note = midiEvent.data[1]; const uint8_t pressure = midiEvent.data[2]; fluid_synth_key_pressure(fSynth, event.channel, note, pressure); } break; #endif case MIDI_STATUS_CONTROL_CHANGE: if (pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) { const uint8_t control = midiEvent.data[1]; const uint8_t value = midiEvent.data[2]; fluid_synth_cc(fSynth, event.channel, control, value); } break; case MIDI_STATUS_CHANNEL_PRESSURE: if (pData->options & PLUGIN_OPTION_SEND_CHANNEL_PRESSURE) { const uint8_t pressure = midiEvent.data[1]; fluid_synth_channel_pressure(fSynth, event.channel, pressure);; } break; case MIDI_STATUS_PITCH_WHEEL_CONTROL: if (pData->options & PLUGIN_OPTION_SEND_PITCHBEND) { const uint8_t lsb = midiEvent.data[1]; const uint8_t msb = midiEvent.data[2]; const int value = ((msb << 7) | lsb); fluid_synth_pitch_bend(fSynth, event.channel, value); } break; default: continue; break; } // switch (status) } break; } // switch (event.type) } pData->postRtEvents.trySplice(); if (frames > timeOffset) processSingle(audioOut, frames - timeOffset, timeOffset); } // End of Event Input and Processing #ifndef BUILD_BRIDGE // -------------------------------------------------------------------------------------------------------- // Control Output { uint32_t k = FluidSynthVoiceCount; fParamBuffers[k] = float(fluid_synth_get_active_voice_count(fSynth)); pData->param.ranges[k].fixValue(fParamBuffers[k]); if (pData->param.data[k].mappedControlIndex > 0) { float value(pData->param.ranges[k].getNormalizedValue(fParamBuffers[k])); pData->event.portOut->writeControlEvent(0, pData->param.data[k].midiChannel, kEngineControlEventTypeParameter, static_cast(pData->param.data[k].mappedControlIndex), -1, value); } } // End of Control Output #endif } bool processSingle(float** const outBuffer, const uint32_t frames, const uint32_t timeOffset) { CARLA_SAFE_ASSERT_RETURN(outBuffer != nullptr, false); CARLA_SAFE_ASSERT_RETURN(frames > 0, false); // -------------------------------------------------------------------------------------------------------- // Try lock, silence otherwise #ifndef STOAT_TEST_BUILD if (pData->engine->isOffline()) { pData->singleMutex.lock(); } else #endif if (! pData->singleMutex.tryLock()) { for (uint32_t i=0; i < pData->audioOut.count; ++i) { for (uint32_t k=0; k < frames; ++k) outBuffer[i][k+timeOffset] = 0.0f; } return false; } // -------------------------------------------------------------------------------------------------------- // Fill plugin buffers and Run plugin if (kUse16Outs) { for (uint32_t i=0; i < pData->audioOut.count; ++i) carla_zeroFloats(fAudio16Buffers[i], frames); // FIXME use '32' or '16' instead of outs fluid_synth_process(fSynth, static_cast(frames), 0, nullptr, static_cast(pData->audioOut.count), fAudio16Buffers); } else { fluid_synth_write_float(fSynth, static_cast(frames), outBuffer[0] + timeOffset, 0, 1, outBuffer[1] + timeOffset, 0, 1); } #ifndef BUILD_BRIDGE // -------------------------------------------------------------------------------------------------------- // Post-processing (volume and balance) { // note - balance not possible with kUse16Outs, so we can safely skip fAudioOutBuffers const bool doVolume = (pData->hints & PLUGIN_CAN_VOLUME) != 0 && carla_isNotEqual(pData->postProc.volume, 1.0f); const bool doBalance = (pData->hints & PLUGIN_CAN_BALANCE) != 0 && ! (carla_isEqual(pData->postProc.balanceLeft, -1.0f) && carla_isEqual(pData->postProc.balanceRight, 1.0f)); float oldBufLeft[doBalance ? frames : 1]; for (uint32_t i=0; i < pData->audioOut.count; ++i) { // Balance if (doBalance) { if (i % 2 == 0) carla_copyFloats(oldBufLeft, outBuffer[i]+timeOffset, frames); float balRangeL = (pData->postProc.balanceLeft + 1.0f)/2.0f; float balRangeR = (pData->postProc.balanceRight + 1.0f)/2.0f; for (uint32_t k=0; k < frames; ++k) { if (i % 2 == 0) { // left outBuffer[i][k+timeOffset] = oldBufLeft[k] * (1.0f - balRangeL); outBuffer[i][k+timeOffset] += outBuffer[i+1][k+timeOffset] * (1.0f - balRangeR); } else { // right outBuffer[i][k+timeOffset] = outBuffer[i][k+timeOffset] * balRangeR; outBuffer[i][k+timeOffset] += oldBufLeft[k] * balRangeL; } } } // Volume if (kUse16Outs) { for (uint32_t k=0; k < frames; ++k) outBuffer[i][k+timeOffset] = fAudio16Buffers[i][k] * pData->postProc.volume; } else if (doVolume) { for (uint32_t k=0; k < frames; ++k) outBuffer[i][k+timeOffset] *= pData->postProc.volume; } } } // End of Post-processing #else if (kUse16Outs) { for (uint32_t i=0; i < pData->audioOut.count; ++i) { for (uint32_t k=0; k < frames; ++k) outBuffer[i][k+timeOffset] = fAudio16Buffers[i][k]; } } #endif // -------------------------------------------------------------------------------------------------------- pData->singleMutex.unlock(); return true; } void bufferSizeChanged(const uint32_t newBufferSize) override { if (! kUse16Outs) return; for (uint32_t i=0; i < pData->audioOut.count; ++i) { if (fAudio16Buffers[i] != nullptr) delete[] fAudio16Buffers[i]; fAudio16Buffers[i] = new float[newBufferSize]; } } void sampleRateChanged(const double newSampleRate) override { CARLA_SAFE_ASSERT_RETURN(fSettings != nullptr,); fluid_settings_setnum(fSettings, "synth.sample-rate", newSampleRate); #if FLUIDSYNTH_VERSION_MAJOR < 2 CARLA_SAFE_ASSERT_RETURN(fSynth != nullptr,); fluid_synth_set_sample_rate(fSynth, static_cast(newSampleRate)); #endif } // ------------------------------------------------------------------- // Plugin buffers void clearBuffers() noexcept override { carla_debug("CarlaPluginFluidSynth::clearBuffers() - start"); if (fAudio16Buffers != nullptr) { for (uint32_t i=0; i < pData->audioOut.count; ++i) { if (fAudio16Buffers[i] != nullptr) { delete[] fAudio16Buffers[i]; fAudio16Buffers[i] = nullptr; } } delete[] fAudio16Buffers; fAudio16Buffers = nullptr; } CarlaPlugin::clearBuffers(); carla_debug("CarlaPluginFluidSynth::clearBuffers() - end"); } // ------------------------------------------------------------------- const void* getExtraStuff() const noexcept override { static const char xtrue[] = "true"; static const char xfalse[] = "false"; return kUse16Outs ? xtrue : xfalse; } // ------------------------------------------------------------------- bool init(const CarlaPluginPtr plugin, const char* const filename, const char* const name, const char* const label, const uint options) { CARLA_SAFE_ASSERT_RETURN(pData->engine != nullptr, false); // --------------------------------------------------------------- // first checks if (pData->client != nullptr) { pData->engine->setLastError("Plugin client is already registered"); return false; } if (fSynth == nullptr) { pData->engine->setLastError("null synth"); return false; } if (filename == nullptr || filename[0] == '\0') { pData->engine->setLastError("null filename"); return false; } if (label == nullptr || label[0] == '\0') { pData->engine->setLastError("null label"); return false; } // --------------------------------------------------------------- // open soundfont const int synthId = fluid_synth_sfload(fSynth, filename, 0); if (synthId < 0) { pData->engine->setLastError("Failed to load SoundFont file"); return false; } #if FLUIDSYNTH_VERSION_MAJOR >= 2 fSynthId = synthId; #else fSynthId = static_cast(synthId); #endif // --------------------------------------------------------------- // get info CarlaString label2(label); if (kUse16Outs && ! label2.endsWith(" (16 outs)")) label2 += " (16 outs)"; fLabel = label2.dup(); pData->filename = carla_strdup(filename); if (name != nullptr && name[0] != '\0') pData->name = pData->engine->getUniquePluginName(name); else pData->name = pData->engine->getUniquePluginName(label); // --------------------------------------------------------------- // register client pData->client = pData->engine->addClient(plugin); if (pData->client == nullptr || ! pData->client->isOk()) { pData->engine->setLastError("Failed to register plugin client"); return false; } // --------------------------------------------------------------- // set options pData->options = 0x0; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_CONTROL_CHANGES)) pData->options |= PLUGIN_OPTION_SEND_CONTROL_CHANGES; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_CHANNEL_PRESSURE)) pData->options |= PLUGIN_OPTION_SEND_CHANNEL_PRESSURE; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_PITCHBEND)) pData->options |= PLUGIN_OPTION_SEND_PITCHBEND; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_ALL_SOUND_OFF)) pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; if (isPluginOptionEnabled(options, PLUGIN_OPTION_MAP_PROGRAM_CHANGES)) pData->options |= PLUGIN_OPTION_MAP_PROGRAM_CHANGES; if (isPluginOptionInverseEnabled(options, PLUGIN_OPTION_SKIP_SENDING_NOTES)) pData->options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; #if FLUIDSYNTH_VERSION_MAJOR >= 2 if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH)) pData->options |= PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH; #endif return true; } private: void initializeFluidDefaultsIfNeeded() { if (sFluidDefaultsStored) return; sFluidDefaultsStored = true; // reverb defaults sFluidDefaults[FluidSynthReverbOnOff] = 1.0f; #if FLUIDSYNTH_VERSION_MAJOR >= 2 double reverbVal; reverbVal = 0.2; fluid_settings_getnum_default(fSettings, "synth.reverb.room-size", &reverbVal); sFluidDefaults[FluidSynthReverbRoomSize] = static_cast(reverbVal); reverbVal = 0.0; fluid_settings_getnum_default(fSettings, "synth.reverb.damp", &reverbVal); sFluidDefaults[FluidSynthReverbDamp] = static_cast(reverbVal); reverbVal = 0.9; fluid_settings_getnum_default(fSettings, "synth.reverb.level", &reverbVal); sFluidDefaults[FluidSynthReverbLevel] = static_cast(reverbVal); reverbVal = 0.5; fluid_settings_getnum_default(fSettings, "synth.reverb.width", &reverbVal); sFluidDefaults[FluidSynthReverbWidth] = static_cast(reverbVal); #else sFluidDefaults[FluidSynthReverbRoomSize] = FLUID_REVERB_DEFAULT_ROOMSIZE; sFluidDefaults[FluidSynthReverbDamp] = FLUID_REVERB_DEFAULT_DAMP; sFluidDefaults[FluidSynthReverbLevel] = FLUID_REVERB_DEFAULT_LEVEL; sFluidDefaults[FluidSynthReverbWidth] = FLUID_REVERB_DEFAULT_WIDTH; #endif // chorus defaults sFluidDefaults[FluidSynthChorusOnOff] = 1.0f; #if FLUIDSYNTH_VERSION_MAJOR >= 2 double chorusVal; chorusVal = 3.0; fluid_settings_getnum_default(fSettings, "synth.chorus.nr", &chorusVal); sFluidDefaults[FluidSynthChorusNr] = static_cast(chorusVal); chorusVal = 2.0; fluid_settings_getnum_default(fSettings, "synth.chorus.level", &chorusVal); sFluidDefaults[FluidSynthChorusLevel] = static_cast(chorusVal); chorusVal = 0.3; fluid_settings_getnum_default(fSettings, "synth.chorus.speed", &chorusVal); sFluidDefaults[FluidSynthChorusSpeedHz] = static_cast(chorusVal); chorusVal = 8.0; fluid_settings_getnum_default(fSettings, "synth.chorus.depth", &chorusVal); sFluidDefaults[FluidSynthChorusDepthMs] = static_cast(chorusVal); // There is no settings for chorus default type sFluidDefaults[FluidSynthChorusType] = static_cast(fluid_synth_get_chorus_type(fSynth)); #else sFluidDefaults[FluidSynthChorusNr] = FLUID_CHORUS_DEFAULT_N; sFluidDefaults[FluidSynthChorusLevel] = FLUID_CHORUS_DEFAULT_LEVEL; sFluidDefaults[FluidSynthChorusSpeedHz] = FLUID_CHORUS_DEFAULT_SPEED; sFluidDefaults[FluidSynthChorusDepthMs] = FLUID_CHORUS_DEFAULT_DEPTH; sFluidDefaults[FluidSynthChorusType] = FLUID_CHORUS_DEFAULT_TYPE; #endif // misc. defaults sFluidDefaults[FluidSynthInterpolation] = FLUID_INTERP_DEFAULT; sFluidDefaults[FluidSynthPolyphony] = FLUID_DEFAULT_POLYPHONY; } enum FluidSynthParameters { FluidSynthReverbOnOff = 0, FluidSynthReverbRoomSize = 1, FluidSynthReverbDamp = 2, FluidSynthReverbLevel = 3, FluidSynthReverbWidth = 4, FluidSynthChorusOnOff = 5, FluidSynthChorusNr = 6, FluidSynthChorusLevel = 7, FluidSynthChorusSpeedHz = 8, FluidSynthChorusDepthMs = 9, FluidSynthChorusType = 10, FluidSynthPolyphony = 11, FluidSynthInterpolation = 12, FluidSynthVoiceCount = 13, FluidSynthParametersMax = 14 }; const bool kUse16Outs; fluid_settings_t* fSettings; fluid_synth_t* fSynth; #if FLUIDSYNTH_VERSION_MAJOR >= 2 int fSynthId; #else uint fSynthId; #endif float** fAudio16Buffers; float fParamBuffers[FluidSynthParametersMax]; static bool sFluidDefaultsStored; static float sFluidDefaults[FluidSynthParametersMax]; int32_t fCurMidiProgs[MAX_MIDI_CHANNELS]; const char* fLabel; CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaPluginFluidSynth) }; bool CarlaPluginFluidSynth::sFluidDefaultsStored = false; float CarlaPluginFluidSynth::sFluidDefaults[FluidSynthParametersMax] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, }; CARLA_BACKEND_END_NAMESPACE #endif // HAVE_FLUIDSYNTH CARLA_BACKEND_START_NAMESPACE // ------------------------------------------------------------------------------------------------------------------- CarlaPluginPtr CarlaPlugin::newFluidSynth(const Initializer& init, PluginType ptype, bool use16Outs) { carla_debug("CarlaPlugin::newFluidSynth({%p, \"%s\", \"%s\", \"%s\", " P_INT64 "}, %s)", init.engine, init.filename, init.name, init.label, init.uniqueId, bool2str(use16Outs)); #ifdef HAVE_FLUIDSYNTH if (init.engine->getProccessMode() == ENGINE_PROCESS_MODE_CONTINUOUS_RACK) use16Outs = false; if (ptype == PLUGIN_SF2 && ! fluid_is_soundfont(init.filename)) { init.engine->setLastError("Requested file is not a valid SoundFont"); return nullptr; } #ifndef HAVE_FLUIDSYNTH_INSTPATCH if (ptype == PLUGIN_DLS) { init.engine->setLastError("DLS file support not available"); return nullptr; } if (ptype == PLUGIN_GIG) { init.engine->setLastError("GIG file support not available"); return nullptr; } #endif std::shared_ptr plugin(new CarlaPluginFluidSynth(init.engine, init.id, use16Outs)); if (! plugin->init(plugin, init.filename, init.name, init.label, init.options)) return nullptr; return plugin; #else init.engine->setLastError("fluidsynth support not available"); return nullptr; // unused (void)ptype; (void)use16Outs; #endif } // ------------------------------------------------------------------------------------------------------------------- CARLA_BACKEND_END_NAMESPACE Carla-2.4.2/source/backend/plugin/CarlaPluginInternal.cpp000066400000000000000000000653141420416754300233470ustar00rootroot00000000000000/* * Carla Plugin * Copyright (C) 2011-2020 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "CarlaPluginInternal.hpp" #include "CarlaEngine.hpp" #include "CarlaLibCounter.hpp" #include "CarlaMathUtils.hpp" #include "CarlaMIDI.h" CARLA_BACKEND_START_NAMESPACE // ------------------------------------------------------------------- // Fallback data static const MidiProgramData kMidiProgramDataNull = { 0, 0, nullptr }; static /* */ CustomData kCustomDataFallbackNC = { nullptr, nullptr, nullptr }; // ----------------------------------------------------------------------- // PluginAudioData PluginAudioData::PluginAudioData() noexcept : count(0), ports(nullptr) {} PluginAudioData::~PluginAudioData() noexcept { CARLA_SAFE_ASSERT_INT(count == 0, count); CARLA_SAFE_ASSERT(ports == nullptr); } void PluginAudioData::createNew(const uint32_t newCount) { CARLA_SAFE_ASSERT_INT(count == 0, count); CARLA_SAFE_ASSERT_RETURN(ports == nullptr,); CARLA_SAFE_ASSERT_RETURN(newCount > 0,); ports = new PluginAudioPort[newCount]; carla_zeroStructs(ports, newCount); count = newCount; } void PluginAudioData::clear() noexcept { if (ports != nullptr) { for (uint32_t i=0; i < count; ++i) { if (ports[i].port != nullptr) { delete ports[i].port; ports[i].port = nullptr; } } delete[] ports; ports = nullptr; } count = 0; } void PluginAudioData::initBuffers() const noexcept { for (uint32_t i=0; i < count; ++i) { if (ports[i].port != nullptr) ports[i].port->initBuffer(); } } // ----------------------------------------------------------------------- // PluginCVData PluginCVData::PluginCVData() noexcept : count(0), ports(nullptr) {} PluginCVData::~PluginCVData() noexcept { CARLA_SAFE_ASSERT_INT(count == 0, count); CARLA_SAFE_ASSERT(ports == nullptr); } void PluginCVData::createNew(const uint32_t newCount) { CARLA_SAFE_ASSERT_INT(count == 0, count); CARLA_SAFE_ASSERT_RETURN(ports == nullptr,); CARLA_SAFE_ASSERT_RETURN(newCount > 0,); ports = new PluginCVPort[newCount]; carla_zeroStructs(ports, newCount); count = newCount; } void PluginCVData::clear() noexcept { if (ports != nullptr) { for (uint32_t i=0; i < count; ++i) { if (ports[i].port != nullptr) { delete ports[i].port; ports[i].port = nullptr; } } delete[] ports; ports = nullptr; } count = 0; } void PluginCVData::initBuffers() const noexcept { for (uint32_t i=0; i < count; ++i) { if (ports[i].port != nullptr) ports[i].port->initBuffer(); } } // ----------------------------------------------------------------------- // PluginEventData PluginEventData::PluginEventData() noexcept : portIn(nullptr), portOut(nullptr) #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH , cvSourcePorts(nullptr) #endif { } PluginEventData::~PluginEventData() noexcept { CARLA_SAFE_ASSERT(portIn == nullptr); CARLA_SAFE_ASSERT(portOut == nullptr); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH CARLA_SAFE_ASSERT(cvSourcePorts == nullptr); #endif } void PluginEventData::clear() noexcept { if (portIn != nullptr) { delete portIn; portIn = nullptr; } if (portOut != nullptr) { delete portOut; portOut = nullptr; } #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (cvSourcePorts != nullptr) { cvSourcePorts->cleanup(); cvSourcePorts = nullptr; } #endif } void PluginEventData::initBuffers() const noexcept { if (portIn != nullptr) portIn->initBuffer(); if (portOut != nullptr) portOut->initBuffer(); } // ----------------------------------------------------------------------- // PluginParameterData PluginParameterData::PluginParameterData() noexcept : count(0), data(nullptr), ranges(nullptr), special(nullptr) {} PluginParameterData::~PluginParameterData() noexcept { CARLA_SAFE_ASSERT_INT(count == 0, count); CARLA_SAFE_ASSERT(data == nullptr); CARLA_SAFE_ASSERT(ranges == nullptr); CARLA_SAFE_ASSERT(special == nullptr); } void PluginParameterData::createNew(const uint32_t newCount, const bool withSpecial) { CARLA_SAFE_ASSERT_INT(count == 0, count); CARLA_SAFE_ASSERT_RETURN(data == nullptr,); CARLA_SAFE_ASSERT_RETURN(ranges == nullptr,); CARLA_SAFE_ASSERT_RETURN(special == nullptr,); CARLA_SAFE_ASSERT_RETURN(newCount > 0,); data = new ParameterData[newCount]; carla_zeroStructs(data, newCount); for (uint32_t i=0; i < newCount; ++i) { data[i].index = PARAMETER_NULL; data[i].rindex = PARAMETER_NULL; data[i].mappedControlIndex = CONTROL_INDEX_NONE; data[i].mappedMinimum = -1.0f; data[i].mappedMaximum = 1.0f; } ranges = new ParameterRanges[newCount]; carla_zeroStructs(ranges, newCount); if (withSpecial) { special = new SpecialParameterType[newCount]; carla_zeroStructs(special, newCount); } count = newCount; } void PluginParameterData::clear() noexcept { if (data != nullptr) { delete[] data; data = nullptr; } if (ranges != nullptr) { delete[] ranges; ranges = nullptr; } if (special != nullptr) { delete[] special; special = nullptr; } count = 0; } float PluginParameterData::getFixedValue(const uint32_t parameterId, float value) const noexcept { CARLA_SAFE_ASSERT_RETURN(parameterId < count, 0.0f); const uint paramHints (data[parameterId].hints); const ParameterRanges& paramRanges(ranges[parameterId]); // if boolean, return either min or max if (paramHints & PARAMETER_IS_BOOLEAN) { const float middlePoint = paramRanges.min + (paramRanges.max-paramRanges.min)/2.0f; return value >= middlePoint ? paramRanges.max : paramRanges.min; } // if integer, round first if (paramHints & PARAMETER_IS_INTEGER) return paramRanges.getFixedValue(std::round(value)); // normal mode return paramRanges.getFixedValue(value); } // copied from ParameterRanges::getUnnormalizedValue static float _getUnnormalizedValue(const float min, const float max, const float value) noexcept { if (value <= 0.0f) return min; if (value >= 1.0f) return max; return value * (max - min) + min; } // copied from ParameterRanges::getUnnormalizedLogValue static float _getUnnormalizedLogValue(const float min, const float max, const float value) noexcept { if (value <= 0.0f) return min; if (value >= 1.0f) return max; float rmin = min; if (std::abs(min) < std::numeric_limits::epsilon()) rmin = 0.00001f; return rmin * std::pow(max/rmin, value); } float PluginParameterData::getFinalUnnormalizedValue(const uint32_t parameterId, const float normalizedValue) const noexcept { float min, max, value; if (data[parameterId].mappedControlIndex != CONTROL_INDEX_CV && (data[parameterId].hints & PARAMETER_MAPPED_RANGES_SET) != 0x0) { min = data[parameterId].mappedMinimum; max = data[parameterId].mappedMaximum; } else { min = ranges[parameterId].min; max = ranges[parameterId].max; } if (data[parameterId].hints & PARAMETER_IS_BOOLEAN) { value = (normalizedValue < 0.5f) ? min : max; } else { if (data[parameterId].hints & PARAMETER_IS_LOGARITHMIC) value = _getUnnormalizedLogValue(min, max, normalizedValue); else value = _getUnnormalizedValue(min, max, normalizedValue); if (data[parameterId].hints & PARAMETER_IS_INTEGER) value = std::rint(value); } return value; } float PluginParameterData::getFinalValueWithMidiDelta(const uint32_t parameterId, float value, int8_t delta) const noexcept { if (delta < 0) return value; if (data[parameterId].mappedControlIndex <= 0 || data[parameterId].mappedControlIndex >= MAX_MIDI_CONTROL) return value; float min, max; if ((data[parameterId].hints & PARAMETER_MAPPED_RANGES_SET) != 0x0) { min = data[parameterId].mappedMinimum; max = data[parameterId].mappedMaximum; } else { min = ranges[parameterId].min; max = ranges[parameterId].max; } if (data[parameterId].hints & PARAMETER_IS_BOOLEAN) { value = delta > 63 ? min : max; } else { if (data[parameterId].hints & PARAMETER_IS_INTEGER) { if (delta > 63) value += delta - 128.0f; else value += delta; } else { if (delta > 63) delta = static_cast(delta - 128); value += (max - min) * (static_cast(delta) / 127.0f); } if (value < min) value = min; else if (value > max) value = max; } return value; } // ----------------------------------------------------------------------- // PluginProgramData PluginProgramData::PluginProgramData() noexcept : count(0), current(-1), names(nullptr) {} PluginProgramData::~PluginProgramData() noexcept { CARLA_SAFE_ASSERT_INT(count == 0, count); CARLA_SAFE_ASSERT_INT(current == -1, current); CARLA_SAFE_ASSERT(names == nullptr); } void PluginProgramData::createNew(const uint32_t newCount) { CARLA_SAFE_ASSERT_INT(count == 0, count); CARLA_SAFE_ASSERT_INT(current == -1, current); CARLA_SAFE_ASSERT_RETURN(names == nullptr,); CARLA_SAFE_ASSERT_RETURN(newCount > 0,); names = new ProgramName[newCount]; carla_zeroStructs(names, newCount); count = newCount; current = -1; } void PluginProgramData::clear() noexcept { if (names != nullptr) { for (uint32_t i=0; i < count; ++i) { if (names[i] != nullptr) { delete[] names[i]; names[i] = nullptr; } } delete[] names; names = nullptr; } count = 0; current = -1; } // ----------------------------------------------------------------------- // PluginMidiProgramData PluginMidiProgramData::PluginMidiProgramData() noexcept : count(0), current(-1), data(nullptr) {} PluginMidiProgramData::~PluginMidiProgramData() noexcept { CARLA_SAFE_ASSERT_INT(count == 0, count); CARLA_SAFE_ASSERT_INT(current == -1, current); CARLA_SAFE_ASSERT(data == nullptr); } void PluginMidiProgramData::createNew(const uint32_t newCount) { CARLA_SAFE_ASSERT_INT(count == 0, count); CARLA_SAFE_ASSERT_INT(current == -1, current); CARLA_SAFE_ASSERT_RETURN(data == nullptr,); CARLA_SAFE_ASSERT_RETURN(newCount > 0,); data = new MidiProgramData[newCount]; carla_zeroStructs(data, newCount); count = newCount; current = -1; } void PluginMidiProgramData::clear() noexcept { if (data != nullptr) { for (uint32_t i=0; i < count; ++i) { if (data[i].name != nullptr) { delete[] data[i].name; data[i].name = nullptr; } } delete[] data; data = nullptr; } count = 0; current = -1; } const MidiProgramData& PluginMidiProgramData::getCurrent() const noexcept { CARLA_SAFE_ASSERT_RETURN(current >= 0 && current < static_cast(count), kMidiProgramDataNull); return data[current]; } // ----------------------------------------------------------------------- // ProtectedData::ExternalNotes CarlaPlugin::ProtectedData::ExternalNotes::ExternalNotes() noexcept : mutex(), dataPool("CarlaPlugin::ProtectedData::ExternalNotes", 32, 152), data(dataPool) {} CarlaPlugin::ProtectedData::ExternalNotes::~ExternalNotes() noexcept { clear(); } void CarlaPlugin::ProtectedData::ExternalNotes::appendNonRT(const ExternalMidiNote& note) noexcept { mutex.lock(); data.append_sleepy(note); mutex.unlock(); } void CarlaPlugin::ProtectedData::ExternalNotes::clear() noexcept { mutex.lock(); data.clear(); mutex.unlock(); } // ----------------------------------------------------------------------- // ProtectedData::Latency CarlaPlugin::ProtectedData::Latency::Latency() noexcept #ifdef BUILD_BRIDGE : frames(0) {} #else : frames(0), channels(0), buffers(nullptr) {} #endif #ifndef BUILD_BRIDGE CarlaPlugin::ProtectedData::Latency::~Latency() noexcept { clearBuffers(); } void CarlaPlugin::ProtectedData::Latency::clearBuffers() noexcept { if (buffers != nullptr) { for (uint32_t i=0; i < channels; ++i) { CARLA_SAFE_ASSERT_CONTINUE(buffers[i] != nullptr); delete[] buffers[i]; buffers[i] = nullptr; } delete[] buffers; buffers = nullptr; } channels = 0; frames = 0; } void CarlaPlugin::ProtectedData::Latency::recreateBuffers(const uint32_t newChannels, const uint32_t newFrames) { CARLA_SAFE_ASSERT_RETURN(channels != newChannels || frames != newFrames,); const bool retrieveOldBuffer = (channels == newChannels && channels > 0 && frames > 0 && newFrames > 0); float** const oldBuffers = buffers; const uint32_t oldFrames = frames; channels = newChannels; frames = newFrames; if (channels > 0 && frames > 0) { buffers = new float*[channels]; for (uint32_t i=0; i < channels; ++i) { buffers[i] = new float[frames]; if (retrieveOldBuffer) { if (oldFrames > frames) { const uint32_t diff = oldFrames - frames; carla_copyFloats(buffers[i], oldBuffers[i] + diff, frames); } else { const uint32_t diff = frames - oldFrames; carla_zeroFloats(buffers[i], diff); carla_copyFloats(buffers[i] + diff, oldBuffers[i], oldFrames); } } else { carla_zeroFloats(buffers[i], frames); } } } else { buffers = nullptr; } // delete old buffer if (oldBuffers != nullptr) { for (uint32_t i=0; i < channels; ++i) { CARLA_SAFE_ASSERT_CONTINUE(oldBuffers[i] != nullptr); delete[] oldBuffers[i]; oldBuffers[i] = nullptr; } delete[] oldBuffers; } } #endif // ----------------------------------------------------------------------- // ProtectedData::PostRtEvents CarlaPlugin::ProtectedData::PostRtEvents::PostRtEvents() noexcept : dataPool("CarlaPlugin::ProtectedData::PostRtEvents", 512, 512), data(dataPool), dataPendingRT(dataPool), dataMutex(), dataPendingMutex(), poolMutex() {} CarlaPlugin::ProtectedData::PostRtEvents::~PostRtEvents() noexcept { const CarlaMutexLocker cml1(dataMutex); const CarlaMutexLocker cml2(dataPendingMutex); const CarlaMutexLocker cml3(poolMutex); data.clear(); dataPendingRT.clear(); } void CarlaPlugin::ProtectedData::PostRtEvents::appendRT(const PluginPostRtEvent& e) noexcept { CARLA_SAFE_ASSERT_INT_RETURN(dataPendingMutex.tryLock(), e.type,); { const CarlaMutexLocker cml(poolMutex); dataPendingRT.append(e); } dataPendingMutex.unlock(); } void CarlaPlugin::ProtectedData::PostRtEvents::trySplice() noexcept { const CarlaMutexTryLocker cmtl(dataPendingMutex); if (cmtl.wasLocked() && dataPendingRT.isNotEmpty() && dataMutex.tryLock()) { { const CarlaMutexLocker cml(poolMutex); dataPendingRT.moveTo(data, true); } dataMutex.unlock(); } } // ----------------------------------------------------------------------- // ProtectedData::PostUiEvents CarlaPlugin::ProtectedData::PostUiEvents::PostUiEvents() noexcept : mutex(), data() {} CarlaPlugin::ProtectedData::PostUiEvents::~PostUiEvents() noexcept { clear(); } void CarlaPlugin::ProtectedData::PostUiEvents::append(const PluginPostRtEvent& e) noexcept { mutex.lock(); data.append(e); mutex.unlock(); } void CarlaPlugin::ProtectedData::PostUiEvents::clear() noexcept { mutex.lock(); data.clear(); mutex.unlock(); } #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // ----------------------------------------------------------------------- // ProtectedData::PostProc CarlaPlugin::ProtectedData::PostProc::PostProc() noexcept : dryWet(1.0f), volume(1.0f), balanceLeft(-1.0f), balanceRight(1.0f), panning(0.0f) {} #endif // ----------------------------------------------------------------------- CarlaPlugin::ProtectedData::ProtectedData(CarlaEngine* const eng, const uint idx) noexcept : engine(eng), client(nullptr), id(idx), hints(0x0), options(0x0), nodeId(0), active(false), enabled(false), needsReset(false), engineBridged(eng->getType() == kEngineTypeBridge), enginePlugin(eng->getType() == kEngineTypePlugin), lib(nullptr), uiLib(nullptr), ctrlChannel(0), extraHints(0x0), #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH midiLearnParameterIndex(-1), transientTryCounter(0), transientFirstTry(true), #endif name(nullptr), filename(nullptr), iconName(nullptr), audioIn(), audioOut(), cvIn(), cvOut(), event(), param(), prog(), midiprog(), custom(), masterMutex(), singleMutex(), stateSave(), uiTitle(), extNotes(), latency(), postRtEvents(), postUiEvents() #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH , postProc() #endif {} CarlaPlugin::ProtectedData::~ProtectedData() noexcept { CARLA_SAFE_ASSERT(! (active && needsReset)); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH CARLA_SAFE_ASSERT(transientTryCounter == 0); #endif { // mutex MUST have been locked before const bool lockMaster(masterMutex.tryLock()); const bool lockSingle(singleMutex.tryLock()); CARLA_SAFE_ASSERT(! lockMaster); CARLA_SAFE_ASSERT(! lockSingle); } if (client != nullptr) { if (client->isActive()) { // must not happen carla_safe_assert("client->isActive()", __FILE__, __LINE__); client->deactivate(true); } clearBuffers(); delete client; client = nullptr; } if (name != nullptr) { delete[] name; name = nullptr; } if (filename != nullptr) { delete[] filename; filename = nullptr; } if (iconName != nullptr) { delete[] iconName; iconName = nullptr; } for (LinkedList::Itenerator it = custom.begin2(); it.valid(); it.next()) { CustomData& customData(it.getValue(kCustomDataFallbackNC)); //CARLA_SAFE_ASSERT_CONTINUE(customData.isValid()); if (customData.type != nullptr) { delete[] customData.type; customData.type = nullptr; } else carla_safe_assert("customData.type != nullptr", __FILE__, __LINE__); if (customData.key != nullptr) { delete[] customData.key; customData.key = nullptr; } else carla_safe_assert("customData.key != nullptr", __FILE__, __LINE__); if (customData.value != nullptr) { delete[] customData.value; customData.value = nullptr; } else carla_safe_assert("customData.value != nullptr", __FILE__, __LINE__); } prog.clear(); midiprog.clear(); custom.clear(); // MUST have been locked before masterMutex.unlock(); singleMutex.unlock(); CARLA_SAFE_ASSERT(uiLib == nullptr); if (lib != nullptr) libClose(); } // ----------------------------------------------------------------------- // Buffer functions void CarlaPlugin::ProtectedData::clearBuffers() noexcept { audioIn.clear(); audioOut.clear(); cvIn.clear(); cvOut.clear(); param.clear(); event.clear(); #ifndef BUILD_BRIDGE latency.clearBuffers(); #endif } // ----------------------------------------------------------------------- // Post-poned events void CarlaPlugin::ProtectedData::postponeRtEvent(const PluginPostRtEvent& rtEvent) noexcept { CARLA_SAFE_ASSERT_RETURN(rtEvent.type != kPluginPostRtEventNull,); postRtEvents.appendRT(rtEvent); } void CarlaPlugin::ProtectedData::postponeParameterChangeRtEvent(const bool sendCallbackLater, const int32_t index, const float value) noexcept { PluginPostRtEvent rtEvent = { kPluginPostRtEventParameterChange, sendCallbackLater, {} }; rtEvent.parameter.index = index; rtEvent.parameter.value = value; postRtEvents.appendRT(rtEvent); } void CarlaPlugin::ProtectedData::postponeProgramChangeRtEvent(const bool sendCallbackLater, const uint32_t index) noexcept { PluginPostRtEvent rtEvent = { kPluginPostRtEventProgramChange, sendCallbackLater, {} }; rtEvent.program.index = index; postRtEvents.appendRT(rtEvent); } void CarlaPlugin::ProtectedData::postponeMidiProgramChangeRtEvent(const bool sendCallbackLater, const uint32_t index) noexcept { PluginPostRtEvent rtEvent = { kPluginPostRtEventMidiProgramChange, sendCallbackLater, {} }; rtEvent.program.index = index; postRtEvents.appendRT(rtEvent); } void CarlaPlugin::ProtectedData::postponeNoteOnRtEvent(const bool sendCallbackLater, const uint8_t channel, const uint8_t note, const uint8_t velocity) noexcept { PluginPostRtEvent rtEvent = { kPluginPostRtEventNoteOn, sendCallbackLater, {} }; rtEvent.note.channel = channel; rtEvent.note.note = note; rtEvent.note.velocity = velocity; postRtEvents.appendRT(rtEvent); } void CarlaPlugin::ProtectedData::postponeNoteOffRtEvent(const bool sendCallbackLater, const uint8_t channel, const uint8_t note) noexcept { PluginPostRtEvent rtEvent = { kPluginPostRtEventNoteOff, sendCallbackLater, {} }; rtEvent.note.channel = channel; rtEvent.note.note = note; postRtEvents.appendRT(rtEvent); } void CarlaPlugin::ProtectedData::postponeMidiLearnRtEvent(const bool sendCallbackLater, const uint32_t parameter, const uint8_t cc, const uint8_t channel) noexcept { PluginPostRtEvent rtEvent = { kPluginPostRtEventMidiLearn, sendCallbackLater, {} }; rtEvent.midiLearn.parameter = parameter; rtEvent.midiLearn.cc = cc; rtEvent.midiLearn.channel = channel; postRtEvents.appendRT(rtEvent); } // ----------------------------------------------------------------------- // Library functions static LibCounter sLibCounter; const char* CarlaPlugin::ProtectedData::libError(const char* const fname) noexcept { return lib_error(fname); } bool CarlaPlugin::ProtectedData::libOpen(const char* const fname) noexcept { lib = sLibCounter.open(fname); return (lib != nullptr); } bool CarlaPlugin::ProtectedData::libClose() noexcept { const bool ret = sLibCounter.close(lib); lib = nullptr; return ret; } void CarlaPlugin::ProtectedData::setCanDeleteLib(const bool canDelete) noexcept { sLibCounter.setCanDelete(lib, canDelete); } bool CarlaPlugin::ProtectedData::uiLibOpen(const char* const fname, const bool canDelete) noexcept { uiLib = sLibCounter.open(fname, canDelete); return (uiLib != nullptr); } bool CarlaPlugin::ProtectedData::uiLibClose() noexcept { const bool ret = sLibCounter.close(uiLib); uiLib = nullptr; return ret; } // ----------------------------------------------------------------------- #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH void CarlaPlugin::ProtectedData::tryTransient() noexcept { if (engine->getOptions().frontendWinId != 0) transientTryCounter = 1; } #endif void CarlaPlugin::ProtectedData::updateParameterValues(CarlaPlugin* const plugin, const bool sendCallback, const bool sendOsc, const bool useDefault) noexcept { CARLA_SAFE_ASSERT_RETURN(sendOsc || sendCallback || useDefault,); for (uint32_t i=0; i < param.count; ++i) { const float value(param.ranges[i].getFixedValue(plugin->getParameterValue(i))); if (useDefault) param.ranges[i].def = value; if (useDefault) { engine->callback(sendCallback, sendOsc, ENGINE_CALLBACK_PARAMETER_DEFAULT_CHANGED, id, static_cast(i), 0, 0, value, nullptr); } engine->callback(sendCallback, sendOsc, ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED, id, static_cast(i), 0, 0, value, nullptr); } } void CarlaPlugin::ProtectedData::updateDefaultParameterValues(CarlaPlugin* const plugin) noexcept { for (uint32_t i=0; i < param.count; ++i) param.ranges[i].def = param.ranges[i].getFixedValue(plugin->getParameterValue(i)); } // ----------------------------------------------------------------------- CARLA_BACKEND_END_NAMESPACE Carla-2.4.2/source/backend/plugin/CarlaPluginInternal.hpp000066400000000000000000000322431420416754300233470ustar00rootroot00000000000000/* * Carla Plugin * Copyright (C) 2011-2019 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #ifndef CARLA_PLUGIN_INTERNAL_HPP_INCLUDED #define CARLA_PLUGIN_INTERNAL_HPP_INCLUDED #include "CarlaPlugin.hpp" #include "CarlaJuceUtils.hpp" #include "CarlaLibUtils.hpp" #include "CarlaStateUtils.hpp" #include "CarlaMIDI.h" #include "CarlaMutex.hpp" #include "CarlaString.hpp" #include "RtLinkedList.hpp" CARLA_BACKEND_START_NAMESPACE // ----------------------------------------------------------------------- // Engine helper macro, sets lastError and returns false/NULL #define CARLA_SAFE_ASSERT_RETURN_ERR(cond, err) if (! (cond)) { carla_safe_assert(#cond, __FILE__, __LINE__); pData->engine->setLastError(err); return false; } #define CARLA_SAFE_ASSERT_RETURN_ERRN(cond, err) if (! (cond)) { carla_safe_assert(#cond, __FILE__, __LINE__); pData->engine->setLastError(err); return nullptr; } #define CARLA_SAFE_EXCEPTION_RETURN_ERR(excptMsg, errMsg) catch(...) { carla_safe_exception(excptMsg, __FILE__, __LINE__); pData->engine->setLastError(errMsg); return false; } #define CARLA_SAFE_EXCEPTION_RETURN_ERRN(excptMsg, errMsg) catch(...) { carla_safe_exception(excptMsg, __FILE__, __LINE__); pData->engine->setLastError(errMsg); return nullptr; } // ----------------------------------------------------------------------- // Maximum pre-allocated events for some plugin types const ushort kPluginMaxMidiEvents = 512; // ----------------------------------------------------------------------- // Extra parameter hints, hidden from backend const uint PARAMETER_MAPPED_RANGES_SET = 0x10000; const uint PARAMETER_IS_STRICT_BOUNDS = 0x20000; const uint PARAMETER_IS_TRIGGER = 0x40000; // ----------------------------------------------------------------------- // Extra plugin hints, hidden from backend const uint PLUGIN_EXTRA_HINT_HAS_MIDI_IN = 0x01; const uint PLUGIN_EXTRA_HINT_HAS_MIDI_OUT = 0x02; // ----------------------------------------------------------------------- // Special parameters enum SpecialParameterType { PARAMETER_SPECIAL_NULL = 0, PARAMETER_SPECIAL_FREEWHEEL = 1, PARAMETER_SPECIAL_LATENCY = 2, PARAMETER_SPECIAL_SAMPLE_RATE = 3, PARAMETER_SPECIAL_TIME = 4 }; // ----------------------------------------------------------------------- /*! * Post-RT event type. * These are events postponned from within the process function, * * During process, we cannot lock, allocate memory or do UI stuff. * Events have to be postponned to be executed later, on a separate thread. * @see PluginPostRtEvent */ enum PluginPostRtEventType { kPluginPostRtEventNull = 0, kPluginPostRtEventParameterChange, kPluginPostRtEventProgramChange, kPluginPostRtEventMidiProgramChange, kPluginPostRtEventNoteOn, kPluginPostRtEventNoteOff, kPluginPostRtEventMidiLearn }; /*! * A Post-RT event. * @see PluginPostRtEventType */ struct PluginPostRtEvent { PluginPostRtEventType type; bool sendCallback; union { struct { int32_t index; float value; } parameter; struct { uint32_t index; } program; struct { uint8_t channel; uint8_t note; uint8_t velocity; } note; struct { uint32_t parameter; uint8_t cc; uint8_t channel; } midiLearn; }; }; // ----------------------------------------------------------------------- struct ExternalMidiNote { int8_t channel; // invalid if -1 uint8_t note; // 0 to 127 uint8_t velo; // 1 to 127, 0 for note-off }; // ----------------------------------------------------------------------- struct PluginAudioPort { uint32_t rindex; CarlaEngineAudioPort* port; }; struct PluginAudioData { uint32_t count; PluginAudioPort* ports; PluginAudioData() noexcept; ~PluginAudioData() noexcept; void createNew(uint32_t newCount); void clear() noexcept; void initBuffers() const noexcept; CARLA_DECLARE_NON_COPY_STRUCT(PluginAudioData) }; // ----------------------------------------------------------------------- struct PluginCVPort { uint32_t rindex; //uint32_t param; // FIXME is this needed? CarlaEngineCVPort* port; }; struct PluginCVData { uint32_t count; PluginCVPort* ports; PluginCVData() noexcept; ~PluginCVData() noexcept; void createNew(uint32_t newCount); void clear() noexcept; void initBuffers() const noexcept; CARLA_DECLARE_NON_COPY_STRUCT(PluginCVData) }; // ----------------------------------------------------------------------- struct PluginEventData { CarlaEngineEventPort* portIn; CarlaEngineEventPort* portOut; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH CarlaEngineCVSourcePorts* cvSourcePorts; #endif PluginEventData() noexcept; ~PluginEventData() noexcept; void clear() noexcept; void initBuffers() const noexcept; CARLA_DECLARE_NON_COPY_STRUCT(PluginEventData) }; // ----------------------------------------------------------------------- struct PluginParameterData { uint32_t count; ParameterData* data; ParameterRanges* ranges; SpecialParameterType* special; PluginParameterData() noexcept; ~PluginParameterData() noexcept; void createNew(uint32_t newCount, bool withSpecial); void clear() noexcept; float getFixedValue(uint32_t parameterId, float value) const noexcept; float getFinalUnnormalizedValue(uint32_t parameterId, float normalizedValue) const noexcept; float getFinalValueWithMidiDelta(uint32_t parameterId, float value, int8_t delta) const noexcept; CARLA_DECLARE_NON_COPY_STRUCT(PluginParameterData) }; // ----------------------------------------------------------------------- typedef const char* ProgramName; struct PluginProgramData { uint32_t count; int32_t current; ProgramName* names; PluginProgramData() noexcept; ~PluginProgramData() noexcept; void createNew(uint32_t newCount); void clear() noexcept; CARLA_DECLARE_NON_COPY_STRUCT(PluginProgramData) }; // ----------------------------------------------------------------------- struct PluginMidiProgramData { uint32_t count; int32_t current; MidiProgramData* data; PluginMidiProgramData() noexcept; ~PluginMidiProgramData() noexcept; void createNew(uint32_t newCount); void clear() noexcept; const MidiProgramData& getCurrent() const noexcept; CARLA_DECLARE_NON_COPY_STRUCT(PluginMidiProgramData) }; // ----------------------------------------------------------------------- struct CarlaPlugin::ProtectedData { CarlaEngine* const engine; CarlaEngineClient* client; uint id; uint hints; uint options; uint32_t nodeId; bool active; bool enabled; bool needsReset; bool engineBridged; bool enginePlugin; lib_t lib; lib_t uiLib; // misc int8_t ctrlChannel; uint extraHints; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH int32_t midiLearnParameterIndex; uint transientTryCounter; bool transientFirstTry; #endif // data 1 const char* name; const char* filename; const char* iconName; // data 2 PluginAudioData audioIn; PluginAudioData audioOut; PluginCVData cvIn; PluginCVData cvOut; PluginEventData event; PluginParameterData param; PluginProgramData prog; PluginMidiProgramData midiprog; LinkedList custom; CarlaMutex masterMutex; // global master lock CarlaMutex singleMutex; // small lock used only in processSingle() CarlaStateSave stateSave; CarlaString uiTitle; struct ExternalNotes { CarlaMutex mutex; RtLinkedList::Pool dataPool; RtLinkedList data; ExternalNotes() noexcept; ~ExternalNotes() noexcept; void appendNonRT(const ExternalMidiNote& note) noexcept; void clear() noexcept; CARLA_DECLARE_NON_COPY_STRUCT(ExternalNotes) } extNotes; struct Latency { uint32_t frames; #ifndef BUILD_BRIDGE uint32_t channels; float** buffers; #endif Latency() noexcept; #ifndef BUILD_BRIDGE ~Latency() noexcept; void clearBuffers() noexcept; void recreateBuffers(uint32_t newChannels, uint32_t newFrames); #endif CARLA_DECLARE_NON_COPY_STRUCT(Latency) } latency; class PostRtEvents { public: PostRtEvents() noexcept; ~PostRtEvents() noexcept; void appendRT(const PluginPostRtEvent& event) noexcept; void trySplice() noexcept; struct Access { Access(PostRtEvents& e) : data2(e.dataPool), poolMutex(e.poolMutex) { const CarlaMutexLocker cml1(e.dataMutex); const CarlaMutexLocker cml2(e.poolMutex); if (e.data.isNotEmpty()) e.data.moveTo(data2, true); } ~Access() { const CarlaMutexLocker cml(poolMutex); data2.clear(); } inline RtLinkedList::Itenerator getDataIterator() const noexcept { return data2.begin2(); } inline std::size_t isEmpty() const noexcept { return data2.isEmpty(); } private: RtLinkedList data2; CarlaMutex& poolMutex; }; private: RtLinkedList::Pool dataPool; RtLinkedList data, dataPendingRT; CarlaMutex dataMutex; CarlaMutex dataPendingMutex; CarlaMutex poolMutex; CARLA_DECLARE_NON_COPY_CLASS(PostRtEvents) } postRtEvents; struct PostUiEvents { CarlaMutex mutex; LinkedList data; PostUiEvents() noexcept; ~PostUiEvents() noexcept; void append(const PluginPostRtEvent& event) noexcept; void clear() noexcept; CARLA_DECLARE_NON_COPY_STRUCT(PostUiEvents) } postUiEvents; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH struct PostProc { float dryWet; float volume; float balanceLeft; float balanceRight; float panning; PostProc() noexcept; CARLA_DECLARE_NON_COPY_STRUCT(PostProc) } postProc; #endif ProtectedData(CarlaEngine* engine, uint idx) noexcept; ~ProtectedData() noexcept; // ------------------------------------------------------------------- // Buffer functions void clearBuffers() noexcept; // ------------------------------------------------------------------- // Post-poned events void postponeRtEvent(const PluginPostRtEvent& rtEvent) noexcept; void postponeParameterChangeRtEvent(bool sendCallbackLater, int32_t index, float value) noexcept; void postponeProgramChangeRtEvent(bool sendCallbackLater, uint32_t index) noexcept; void postponeMidiProgramChangeRtEvent(bool sendCallbackLater, uint32_t index) noexcept; void postponeNoteOnRtEvent(bool sendCallbackLater, uint8_t channel, uint8_t note, uint8_t velocity) noexcept; void postponeNoteOffRtEvent(bool sendCallbackLater, uint8_t channel, uint8_t note) noexcept; void postponeMidiLearnRtEvent(bool sendCallbackLater, uint32_t parameter, uint8_t cc, uint8_t channel) noexcept; // ------------------------------------------------------------------- // Library functions static const char* libError(const char* filename) noexcept; bool libOpen(const char* filename) noexcept; bool libClose() noexcept; void setCanDeleteLib(bool canDelete) noexcept; bool uiLibOpen(const char* filename, bool canDelete) noexcept; bool uiLibClose() noexcept; template Func libSymbol(const char* symbol) const noexcept { return lib_symbol(lib, symbol); } template Func uiLibSymbol(const char* symbol) const noexcept { return lib_symbol(uiLib, symbol); } // ------------------------------------------------------------------- // Misc #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH void tryTransient() noexcept; #endif void updateParameterValues(CarlaPlugin* plugin, bool sendCallback, bool sendOsc, bool useDefault) noexcept; void updateDefaultParameterValues(CarlaPlugin* plugin) noexcept; // ------------------------------------------------------------------- #ifdef CARLA_PROPER_CPP11_SUPPORT ProtectedData() = delete; CARLA_DECLARE_NON_COPY_STRUCT(ProtectedData); #endif CARLA_LEAK_DETECTOR(ProtectedData); }; CARLA_BACKEND_END_NAMESPACE #endif // CARLA_PLUGIN_INTERNAL_HPP_INCLUDED Carla-2.4.2/source/backend/plugin/CarlaPluginJack.cpp000066400000000000000000002134571420416754300224460ustar00rootroot00000000000000/* * Carla Plugin JACK * Copyright (C) 2016-2020 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "CarlaPluginInternal.hpp" #include "CarlaEngine.hpp" #ifdef CARLA_OS_LINUX #include "CarlaLibJackHints.h" #include "CarlaBackendUtils.hpp" #include "CarlaBridgeUtils.hpp" #include "CarlaEngineUtils.hpp" #include "CarlaMathUtils.hpp" #include "CarlaPipeUtils.hpp" #include "CarlaScopeUtils.hpp" #include "CarlaShmUtils.hpp" #include "CarlaThread.hpp" #ifdef HAVE_LIBLO # include "CarlaOscUtils.hpp" #else # warning No liblo support, NSM (session state) will not be available #endif #include "water/files/File.h" #include "water/misc/Time.h" #include "water/text/StringArray.h" #include "water/threads/ChildProcess.h" #include "jackbridge/JackBridge.hpp" #include #include // ------------------------------------------------------------------------------------------------------------------- using water::ChildProcess; using water::File; using water::String; using water::StringArray; using water::Time; CARLA_BACKEND_START_NAMESPACE static size_t safe_rand(const size_t limit) { const int r = std::rand(); CARLA_SAFE_ASSERT_RETURN(r >= 0, 0); return static_cast(r) % limit; } // ------------------------------------------------------------------------------------------------------------------- // Fallback data static const ExternalMidiNote kExternalMidiNoteFallback = { -1, 0, 0 }; // ------------------------------------------------------------------------------------------------------------------- struct Announcer { virtual ~Announcer() {} virtual void nsmAnnounced(bool hasGui) = 0; }; class CarlaPluginJackThread : public CarlaThread { public: CarlaPluginJackThread(Announcer* const ann, CarlaEngine* const engine, CarlaPlugin* const plugin) noexcept : CarlaThread("CarlaPluginJackThread"), kAnnouncer(ann), kEngine(engine), kPlugin(plugin), fShmIds(), fSetupLabel(), #ifdef HAVE_LIBLO fOscClientAddress(nullptr), fOscServer(nullptr), fHasOptionalGui(false), fProject(), #endif fProcess() {} void setData(const char* const shmIds, const char* const setupLabel) noexcept { CARLA_SAFE_ASSERT_RETURN(shmIds != nullptr && shmIds[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(setupLabel != nullptr && setupLabel[0] != '\0',); CARLA_SAFE_ASSERT(! isThreadRunning()); fShmIds = shmIds; fSetupLabel = setupLabel; } uintptr_t getProcessID() const noexcept { CARLA_SAFE_ASSERT_RETURN(fProcess != nullptr, 0); return (uintptr_t)fProcess->getPID(); } #ifdef HAVE_LIBLO void nsmSave(const char* const setupLabel) { if (fOscClientAddress == nullptr) return; if (fSetupLabel != setupLabel) fSetupLabel = setupLabel; maybeOpenFirstTime(false); lo_send_from(fOscClientAddress, fOscServer, LO_TT_IMMEDIATE, "/nsm/client/save", ""); } bool nsmShowGui(const bool yesNo) { if (fOscClientAddress == nullptr || ! fHasOptionalGui) return false; lo_send_from(fOscClientAddress, fOscServer, LO_TT_IMMEDIATE, yesNo ? "/nsm/client/show_optional_gui" : "/nsm/client/hide_optional_gui", ""); return true; } #endif char* getEnvVarsToExport() { const EngineOptions& options(kEngine->getOptions()); CarlaString binaryDir(options.binaryDir); #ifdef HAVE_LIBLO const int sessionManager = fSetupLabel[4U] - '0'; #endif CarlaString ret; ret += "export LD_LIBRARY_PATH=" + binaryDir + "/jack\n"; ret += "export LD_PRELOAD=" + binaryDir + "/libcarla_interposer-jack-x11.so\n"; #ifdef HAVE_LIBLO if (sessionManager == LIBJACK_SESSION_MANAGER_NSM) { for (int i=50; fOscServer == nullptr && --i>=0;) carla_msleep(100); ret += "export NSM_URL="; ret += lo_server_get_url(fOscServer); ret += "\n"; } #endif if (kPlugin->getHints() & PLUGIN_HAS_CUSTOM_UI) ret += "export CARLA_FRONTEND_WIN_ID=" + CarlaString(options.frontendWinId) + "\n"; ret += "export CARLA_LIBJACK_SETUP=" + fSetupLabel + "\n"; ret += "export CARLA_SHM_IDS=" + fShmIds + "\n"; return ret.releaseBufferPointer(); } protected: #ifdef HAVE_LIBLO static void _osc_error_handler(int num, const char* msg, const char* path) { carla_stderr2("CarlaPluginJackThread::_osc_error_handler(%i, \"%s\", \"%s\")", num, msg, path); } static int _broadcast_handler(const char* path, const char* types, lo_arg** argv, int argc, lo_message msg, void* data) { CARLA_SAFE_ASSERT_RETURN(data != nullptr, 0); carla_stdout("CarlaPluginJackThread::_broadcast_handler(%s, %s, %p, %i)", path, types, argv, argc); return ((CarlaPluginJackThread*)data)->handleBroadcast(path, types, argv, msg); } void maybeOpenFirstTime(const bool announced) { if (fSetupLabel.length() <= 6) return; if ((announced || fProject.path.isEmpty()) && fProject.init(kPlugin->getName(), kEngine->getCurrentProjectFolder(), &fSetupLabel[6U])) { carla_stdout("Sending open signal %s %s %s", fProject.path.buffer(), fProject.display.buffer(), fProject.clientName.buffer()); lo_send_from(fOscClientAddress, fOscServer, LO_TT_IMMEDIATE, "/nsm/client/open", "sss", fProject.path.buffer(), fProject.display.buffer(), fProject.clientName.buffer()); } } int handleBroadcast(const char* path, const char* types, lo_arg** argv, lo_message msg) { if (std::strcmp(path, "/nsm/server/announce") == 0) { CARLA_SAFE_ASSERT_RETURN(std::strcmp(types, "sssiii") == 0, 0); const lo_address msgAddress(lo_message_get_source(msg)); CARLA_SAFE_ASSERT_RETURN(msgAddress != nullptr, 0); char* const msgURL(lo_address_get_url(msgAddress)); CARLA_SAFE_ASSERT_RETURN(msgURL != nullptr, 0); if (fOscClientAddress != nullptr) lo_address_free(fOscClientAddress); fOscClientAddress = lo_address_new_from_url(msgURL); CARLA_SAFE_ASSERT_RETURN(fOscClientAddress != nullptr, 0); fProject.appName = &argv[0]->s; fHasOptionalGui = std::strstr(&argv[1]->s, ":optional-gui:") != nullptr; kAnnouncer->nsmAnnounced(fHasOptionalGui); static const char* const featuresG = ":server-control:optional-gui:"; static const char* const featuresN = ":server-control:"; static const char* const method = "/nsm/server/announce"; static const char* const message = "Howdy, what took you so long?"; static const char* const smName = "Carla"; const char* const features = ((fSetupLabel[5U] - '0') & LIBJACK_FLAG_CONTROL_WINDOW) ? featuresG : featuresN; lo_send_from(fOscClientAddress, fOscServer, LO_TT_IMMEDIATE, "/reply", "ssss", method, message, smName, features); maybeOpenFirstTime(true); return 0; } CARLA_SAFE_ASSERT_RETURN(fOscClientAddress != nullptr, 0); if (std::strcmp(path, "/reply") == 0) { CARLA_SAFE_ASSERT_RETURN(std::strcmp(types, "ss") == 0, 0); const char* const method = &argv[0]->s; const char* const message = &argv[1]->s; carla_stdout("Got reply of '%s' as '%s'", method, message); if (std::strcmp(method, "/nsm/client/open") == 0) { carla_stdout("Sending 'Session is loaded' to %s", fProject.appName.buffer()); lo_send_from(fOscClientAddress, fOscServer, LO_TT_IMMEDIATE, "/nsm/client/session_is_loaded", ""); } } else if (std::strcmp(path, "/nsm/client/gui_is_shown") == 0) { CARLA_SAFE_ASSERT_RETURN(std::strcmp(types, "") == 0, 0); kEngine->callback(true, true, ENGINE_CALLBACK_UI_STATE_CHANGED, kPlugin->getId(), 1, 0, 0, 0.0f, nullptr); } else if (std::strcmp(path, "/nsm/client/gui_is_hidden") == 0) { CARLA_SAFE_ASSERT_RETURN(std::strcmp(types, "") == 0, 0); kEngine->callback(true, true, ENGINE_CALLBACK_UI_STATE_CHANGED, kPlugin->getId(), 0, 0, 0, 0.0f, nullptr); } // special messages else if (std::strcmp(path, "/nsm/gui/client/save") == 0) { CARLA_SAFE_ASSERT_RETURN(std::strcmp(types, "s") == 0, 0); lo_send_from(fOscClientAddress, fOscServer, LO_TT_IMMEDIATE, "/nsm/client/save", ""); } else if (std::strcmp(path, "/nsm/server/stop") == 0) { CARLA_SAFE_ASSERT_RETURN(std::strcmp(types, "s") == 0, 0); lo_send_from(fOscClientAddress, fOscServer, LO_TT_IMMEDIATE, "/nsm/client/hide_optional_gui", ""); kEngine->callback(true, true, ENGINE_CALLBACK_UI_STATE_CHANGED, kPlugin->getId(), 0, 0, 0, 0.0f, nullptr); } return 0; } #endif void run() { #ifdef HAVE_LIBLO if (fOscClientAddress != nullptr) { lo_address_free(fOscClientAddress); fOscClientAddress = nullptr; } const int sessionManager = fSetupLabel[4U] - '0'; if (sessionManager == LIBJACK_SESSION_MANAGER_NSM) { // NSM support fOscServer = lo_server_new_with_proto(nullptr, LO_UDP, _osc_error_handler); CARLA_SAFE_ASSERT_RETURN(fOscServer != nullptr,); lo_server_add_method(fOscServer, nullptr, nullptr, _broadcast_handler, this); } #endif const bool externalProcess = ((fSetupLabel[5U] - '0') & LIBJACK_FLAG_EXTERNAL_START) && ! kEngine->isLoadingProject(); if (! externalProcess) { if (fProcess == nullptr) { fProcess = new ChildProcess(); } else if (fProcess->isRunning()) { carla_stderr("CarlaPluginJackThread::run() - already running"); } String name(kPlugin->getName()); String filename(kPlugin->getFilename()); if (name.isEmpty()) name = "(none)"; CARLA_SAFE_ASSERT_RETURN(filename.isNotEmpty(),); StringArray arguments; // binary arguments.addTokens(filename, true); const EngineOptions& options(kEngine->getOptions()); char winIdStr[STR_MAX+1]; std::snprintf(winIdStr, STR_MAX, P_UINTPTR, options.frontendWinId); winIdStr[STR_MAX] = '\0'; const CarlaString libjackdir(CarlaString(options.binaryDir) + "/jack"); const CarlaString ldpreload(CarlaString(options.binaryDir) + "/libcarla_interposer-jack-x11.so"); const ScopedEngineEnvironmentLocker _seel(kEngine); const CarlaScopedEnvVar sev2("LD_LIBRARY_PATH", libjackdir.buffer()); const CarlaScopedEnvVar sev1("LD_PRELOAD", ldpreload.isNotEmpty() ? ldpreload.buffer() : nullptr); #ifdef HAVE_LIBLO const CarlaScopedEnvVar sev3("NSM_URL", lo_server_get_url(fOscServer)); #endif if (kPlugin->getHints() & PLUGIN_HAS_CUSTOM_UI) carla_setenv("CARLA_FRONTEND_WIN_ID", winIdStr); else carla_unsetenv("CARLA_FRONTEND_WIN_ID"); carla_setenv("CARLA_LIBJACK_SETUP", fSetupLabel.buffer()); carla_setenv("CARLA_SHM_IDS", fShmIds.buffer()); if (! fProcess->start(arguments)) { carla_stdout("failed!"); fProcess = nullptr; return; } } for (; (externalProcess || fProcess->isRunning()) && ! shouldThreadExit();) { #ifdef HAVE_LIBLO if (sessionManager == LIBJACK_SESSION_MANAGER_NSM) { lo_server_recv_noblock(fOscServer, 50); } else #endif { carla_msleep(50); } } #ifdef HAVE_LIBLO if (sessionManager == LIBJACK_SESSION_MANAGER_NSM) { lo_server_free(fOscServer); fOscServer = nullptr; if (fOscClientAddress != nullptr) { lo_address_free(fOscClientAddress); fOscClientAddress = nullptr; } } #endif if (! externalProcess) { // we only get here if bridge crashed or thread asked to exit if (fProcess->isRunning() && shouldThreadExit()) { fProcess->waitForProcessToFinish(2000); if (fProcess->isRunning()) { carla_stdout("CarlaPluginJackThread::run() - application refused to close, force kill now"); fProcess->kill(); } } else { // forced quit, may have crashed if (fProcess->getExitCodeAndClearPID() != 0) { carla_stderr("CarlaPluginJackThread::run() - application crashed"); CarlaString errorString("Plugin '" + CarlaString(kPlugin->getName()) + "' has crashed!\n" "Saving now will lose its current settings.\n" "Please remove this plugin, and not rely on it from this point."); kEngine->callback(true, true, ENGINE_CALLBACK_ERROR, kPlugin->getId(), 0, 0, 0, 0.0f, errorString); } } } fProcess = nullptr; } private: Announcer* const kAnnouncer; CarlaEngine* const kEngine; CarlaPlugin* const kPlugin; CarlaString fShmIds; CarlaString fSetupLabel; #ifdef HAVE_LIBLO lo_address fOscClientAddress; lo_server fOscServer; bool fHasOptionalGui; struct ProjectData { CarlaString appName; CarlaString path; CarlaString display; CarlaString clientName; ProjectData() : appName(), path(), display(), clientName() {} bool init(const char* const pluginName, const char* const engineProjectFolder, const char* const uniqueCodeID) { CARLA_SAFE_ASSERT_RETURN(engineProjectFolder != nullptr && engineProjectFolder[0] != '\0', false); CARLA_SAFE_ASSERT_RETURN(uniqueCodeID != nullptr && uniqueCodeID[0] != '\0', false); CARLA_SAFE_ASSERT_RETURN(appName.isNotEmpty(), false); String child(pluginName); child += "."; child += uniqueCodeID; const File file(File(engineProjectFolder).getChildFile(child)); clientName = appName + "." + uniqueCodeID; path = file.getFullPathName().toRawUTF8(); display = file.getFileNameWithoutExtension().toRawUTF8(); return true; } CARLA_DECLARE_NON_COPY_STRUCT(ProjectData) } fProject; #endif CarlaScopedPointer fProcess; CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaPluginJackThread) }; // ------------------------------------------------------------------------------------------------------------------- class CarlaPluginJack : public CarlaPlugin, public Announcer { public: CarlaPluginJack(CarlaEngine* const engine, const uint id) : CarlaPlugin(engine, id), fInitiated(false), fInitError(false), fTimedOut(false), fTimedError(false), fProcCanceled(false), fBufferSize(engine->getBufferSize()), fProcWaitTime(0), fSetupHints(0x0), fBridgeThread(this, engine, this), fShmAudioPool(), fShmRtClientControl(), fShmNonRtClientControl(), fShmNonRtServerControl(), fInfo() { carla_debug("CarlaPluginJack::CarlaPluginJack(%p, %i)", engine, id); pData->hints |= PLUGIN_IS_BRIDGE; } ~CarlaPluginJack() override { carla_debug("CarlaPluginJack::~CarlaPluginJack()"); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // close UI if (pData->hints & PLUGIN_HAS_CUSTOM_UI) pData->transientTryCounter = 0; #endif pData->singleMutex.lock(); pData->masterMutex.lock(); if (pData->client != nullptr && pData->client->isActive()) pData->client->deactivate(true); if (pData->active) { deactivate(); pData->active = false; } if (fBridgeThread.isThreadRunning()) { fShmRtClientControl.writeOpcode(kPluginBridgeRtClientQuit); fShmRtClientControl.commitWrite(); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientQuit); fShmNonRtClientControl.commitWrite(); if (! fTimedOut) waitForClient("stopping", 3000); } fBridgeThread.stopThread(3000); fShmNonRtServerControl.clear(); fShmNonRtClientControl.clear(); fShmRtClientControl.clear(); fShmAudioPool.clear(); clearBuffers(); fInfo.chunk.clear(); } // ------------------------------------------------------------------- void nsmAnnounced(bool hasGui) override { if (hasGui || (pData->hints & PLUGIN_HAS_CUSTOM_UI) == 0x0) return; { const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientShowUI); fShmNonRtClientControl.commitWrite(); } pData->engine->callback(true, true, ENGINE_CALLBACK_UI_STATE_CHANGED, pData->id, 1, 0, 0, 0.0f, nullptr); } // ------------------------------------------------------------------- // Information (base) PluginType getType() const noexcept override { return PLUGIN_JACK; } PluginCategory getCategory() const noexcept override { return PLUGIN_CATEGORY_NONE; } // ------------------------------------------------------------------- // Information (count) uint32_t getMidiInCount() const noexcept override { return fInfo.mIns; } uint32_t getMidiOutCount() const noexcept override { return fInfo.mOuts; } // ------------------------------------------------------------------- // Information (current data) // ------------------------------------------------------------------- // Information (per-plugin data) uint getOptionsAvailable() const noexcept override { uint options = 0x0; if (fInfo.mIns > 0) { options |= PLUGIN_OPTION_SEND_CONTROL_CHANGES; options |= PLUGIN_OPTION_SEND_CHANNEL_PRESSURE; options |= PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH; options |= PLUGIN_OPTION_SEND_PITCHBEND; options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; } return options; } bool getLabel(char* const strBuf) const noexcept override { std::strncpy(strBuf, fInfo.setupLabel, STR_MAX); return true; } bool getMaker(char* const) const noexcept override { return false; } bool getCopyright(char* const) const noexcept override { return false; } bool getRealName(char* const strBuf) const noexcept override { // FIXME std::strncpy(strBuf, "Carla's libjack", STR_MAX); return true; } // ------------------------------------------------------------------- // Set data (state) void prepareForSave(bool) noexcept override { #ifdef HAVE_LIBLO if (fInfo.setupLabel.length() == 6) setupUniqueProjectID(); #endif { const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientPrepareForSave); fShmNonRtClientControl.commitWrite(); } #ifdef HAVE_LIBLO fBridgeThread.nsmSave(fInfo.setupLabel); #endif } // ------------------------------------------------------------------- // Set data (internal stuff) void setOption(const uint option, const bool yesNo, const bool sendCallback) override { { const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientSetOption); fShmNonRtClientControl.writeUInt(option); fShmNonRtClientControl.writeBool(yesNo); fShmNonRtClientControl.commitWrite(); } CarlaPlugin::setOption(option, yesNo, sendCallback); } void setCtrlChannel(const int8_t channel, const bool sendOsc, const bool sendCallback) noexcept override { CARLA_SAFE_ASSERT_RETURN(sendOsc || sendCallback,); // never call this from RT { const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientSetCtrlChannel); fShmNonRtClientControl.writeShort(channel); fShmNonRtClientControl.commitWrite(); } CarlaPlugin::setCtrlChannel(channel, sendOsc, sendCallback); } // ------------------------------------------------------------------- // Set data (plugin-specific stuff) void setCustomData(const char* const type, const char* const key, const char* const value, const bool sendGui) override { CARLA_SAFE_ASSERT_RETURN(type != nullptr && type[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(key != nullptr && key[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(value != nullptr,); if (std::strcmp(type, CUSTOM_DATA_TYPE_PROPERTY) == 0) return CarlaPlugin::setCustomData(type, key, value, sendGui); if (std::strcmp(type, CUSTOM_DATA_TYPE_STRING) == 0 && std::strcmp(key, "__CarlaPingOnOff__") == 0) { #if 0 const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientPingOnOff); fShmNonRtClientControl.writeBool(std::strcmp(value, "true") == 0); fShmNonRtClientControl.commitWrite(); #endif return; } CarlaPlugin::setCustomData(type, key, value, sendGui); } // ------------------------------------------------------------------- // Set ui stuff void showCustomUI(const bool yesNo) override { if (yesNo && ! fBridgeThread.isThreadRunning()) { CARLA_SAFE_ASSERT_RETURN(restartBridgeThread(),); } #ifdef HAVE_LIBLO if (! fBridgeThread.nsmShowGui(yesNo)) #endif { const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(yesNo ? kPluginBridgeNonRtClientShowUI : kPluginBridgeNonRtClientHideUI); fShmNonRtClientControl.commitWrite(); } } void idle() override { if (fBridgeThread.isThreadRunning()) { if (fInitiated && fTimedOut && pData->active) setActive(false, true, true); { const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientPing); fShmNonRtClientControl.commitWrite(); } try { handleNonRtData(); } CARLA_SAFE_EXCEPTION("handleNonRtData"); } else if (fInitiated) { fTimedOut = true; fTimedError = true; fInitiated = false; handleProcessStopped(); } else if (fProcCanceled) { handleProcessStopped(); fProcCanceled = false; } CarlaPlugin::idle(); } // ------------------------------------------------------------------- // Plugin state void reload() override { CARLA_SAFE_ASSERT_RETURN(pData->engine != nullptr,); carla_debug("CarlaPluginJack::reload() - start"); const EngineProcessMode processMode(pData->engine->getProccessMode()); // Safely disable plugin for reload const ScopedDisabler sd(this); // cleanup of previous data pData->audioIn.clear(); pData->audioOut.clear(); pData->event.clear(); bool needsCtrlIn, needsCtrlOut; needsCtrlIn = needsCtrlOut = false; if (fInfo.aIns > 0) { pData->audioIn.createNew(fInfo.aIns); } if (fInfo.aOuts > 0) { pData->audioOut.createNew(fInfo.aOuts); needsCtrlIn = true; } if (fInfo.mIns > 0) needsCtrlIn = true; if (fInfo.mOuts > 0) needsCtrlOut = true; const uint portNameSize(pData->engine->getMaxPortNameSize()); CarlaString portName; // Audio Ins for (uint8_t j=0; j < fInfo.aIns; ++j) { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } if (fInfo.aIns > 1) { portName += "audio_in_"; portName += CarlaString(j+1); } else { portName += "audio_in"; } portName.truncate(portNameSize); pData->audioIn.ports[j].port = (CarlaEngineAudioPort*)pData->client->addPort(kEnginePortTypeAudio, portName, true, j); pData->audioIn.ports[j].rindex = j; } // Audio Outs for (uint8_t j=0; j < fInfo.aOuts; ++j) { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } if (fInfo.aOuts > 1) { portName += "audio_out_"; portName += CarlaString(j+1); } else { portName += "audio_out"; } portName.truncate(portNameSize); pData->audioOut.ports[j].port = (CarlaEngineAudioPort*)pData->client->addPort(kEnginePortTypeAudio, portName, false, j); pData->audioOut.ports[j].rindex = j; } if (needsCtrlIn) { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } portName += "event-in"; portName.truncate(portNameSize); pData->event.portIn = (CarlaEngineEventPort*)pData->client->addPort(kEnginePortTypeEvent, portName, true, 0); } if (needsCtrlOut) { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } portName += "event-out"; portName.truncate(portNameSize); pData->event.portOut = (CarlaEngineEventPort*)pData->client->addPort(kEnginePortTypeEvent, portName, false, 0); } // extra plugin hints pData->extraHints = 0x0; if (fInfo.mIns > 0) pData->extraHints |= PLUGIN_EXTRA_HINT_HAS_MIDI_IN; if (fInfo.mOuts > 0) pData->extraHints |= PLUGIN_EXTRA_HINT_HAS_MIDI_OUT; bufferSizeChanged(pData->engine->getBufferSize()); reloadPrograms(true); carla_debug("CarlaPluginJack::reload() - end"); } // ------------------------------------------------------------------- // Plugin processing void activate() noexcept override { if (! fBridgeThread.isThreadRunning()) { CARLA_SAFE_ASSERT_RETURN(restartBridgeThread(),); } CARLA_SAFE_ASSERT_RETURN(! fTimedError,); { const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientActivate); fShmNonRtClientControl.commitWrite(); } fTimedOut = false; try { waitForClient("activate", 2000); } CARLA_SAFE_EXCEPTION("activate - waitForClient"); } void deactivate() noexcept override { if (! fBridgeThread.isThreadRunning()) return; CARLA_SAFE_ASSERT_RETURN(! fTimedError,); { const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientDeactivate); fShmNonRtClientControl.commitWrite(); } fTimedOut = false; try { waitForClient("deactivate", 2000); } CARLA_SAFE_EXCEPTION("deactivate - waitForClient"); } void process(const float* const* const audioIn, float** const audioOut, const float* const*, float**, const uint32_t frames) override { // -------------------------------------------------------------------------------------------------------- // Check if active if (fProcCanceled || fTimedOut || fTimedError || ! pData->active) { // disable any output sound for (uint32_t i=0; i < pData->audioOut.count; ++i) carla_zeroFloats(audioOut[i], frames); return; } // -------------------------------------------------------------------------------------------------------- // Check if needs reset if (pData->needsReset) { // TODO pData->needsReset = false; } // -------------------------------------------------------------------------------------------------------- // Event Input if (pData->event.portIn != nullptr) { // ---------------------------------------------------------------------------------------------------- // MIDI Input (External) if (pData->extNotes.mutex.tryLock()) { for (RtLinkedList::Itenerator it = pData->extNotes.data.begin2(); it.valid(); it.next()) { const ExternalMidiNote& note(it.getValue(kExternalMidiNoteFallback)); CARLA_SAFE_ASSERT_CONTINUE(note.channel >= 0 && note.channel < MAX_MIDI_CHANNELS); uint8_t data1, data2, data3; data1 = uint8_t((note.velo > 0 ? MIDI_STATUS_NOTE_ON : MIDI_STATUS_NOTE_OFF) | (note.channel & MIDI_CHANNEL_BIT)); data2 = note.note; data3 = note.velo; fShmRtClientControl.writeOpcode(kPluginBridgeRtClientMidiEvent); fShmRtClientControl.writeUInt(0); // time fShmRtClientControl.writeByte(0); // port fShmRtClientControl.writeByte(3); // size fShmRtClientControl.writeByte(data1); fShmRtClientControl.writeByte(data2); fShmRtClientControl.writeByte(data3); fShmRtClientControl.commitWrite(); } pData->extNotes.data.clear(); pData->extNotes.mutex.unlock(); } // End of MIDI Input (External) // ---------------------------------------------------------------------------------------------------- // Event Input (System) #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH bool allNotesOffSent = false; #endif for (uint32_t i=0, numEvents=pData->event.portIn->getEventCount(); i < numEvents; ++i) { const EngineEvent& event(pData->event.portIn->getEvent(i)); // Control change switch (event.type) { case kEngineEventTypeNull: break; case kEngineEventTypeControl: { const EngineControlEvent& ctrlEvent = event.ctrl; switch (ctrlEvent.type) { case kEngineControlEventTypeNull: break; case kEngineControlEventTypeParameter: #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // Control backend stuff if (event.channel == pData->ctrlChannel) { float value; if (MIDI_IS_CONTROL_BREATH_CONTROLLER(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_DRYWET) != 0) { value = ctrlEvent.normalizedValue; setDryWetRT(value, true); } if (MIDI_IS_CONTROL_CHANNEL_VOLUME(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_VOLUME) != 0) { value = ctrlEvent.normalizedValue*127.0f/100.0f; setVolumeRT(value, true); } if (MIDI_IS_CONTROL_BALANCE(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_BALANCE) != 0) { float left, right; value = ctrlEvent.normalizedValue/0.5f - 1.0f; if (value < 0.0f) { left = -1.0f; right = (value*2.0f)+1.0f; } else if (value > 0.0f) { left = (value*2.0f)-1.0f; right = 1.0f; } else { left = -1.0f; right = 1.0f; } setBalanceLeftRT(left, true); setBalanceRightRT(right, true); } } #endif if ((pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) != 0 && ctrlEvent.param < MAX_MIDI_VALUE) { fShmRtClientControl.writeOpcode(kPluginBridgeRtClientMidiEvent); fShmRtClientControl.writeUInt(event.time); fShmRtClientControl.writeByte(0); // port fShmRtClientControl.writeByte(3); // size fShmRtClientControl.writeByte(uint8_t(MIDI_STATUS_CONTROL_CHANGE | (event.channel & MIDI_CHANNEL_BIT))); fShmRtClientControl.writeByte(uint8_t(ctrlEvent.param)); fShmRtClientControl.writeByte(uint8_t(ctrlEvent.normalizedValue*127.0f)); } break; case kEngineControlEventTypeMidiBank: if (pData->options & PLUGIN_OPTION_MAP_PROGRAM_CHANGES) { fShmRtClientControl.writeOpcode(kPluginBridgeRtClientControlEventMidiBank); fShmRtClientControl.writeUInt(event.time); fShmRtClientControl.writeByte(event.channel); fShmRtClientControl.writeUShort(event.ctrl.param); fShmRtClientControl.commitWrite(); } break; case kEngineControlEventTypeMidiProgram: if (pData->options & PLUGIN_OPTION_MAP_PROGRAM_CHANGES) { fShmRtClientControl.writeOpcode(kPluginBridgeRtClientControlEventMidiProgram); fShmRtClientControl.writeUInt(event.time); fShmRtClientControl.writeByte(event.channel); fShmRtClientControl.writeUShort(event.ctrl.param); fShmRtClientControl.commitWrite(); } break; case kEngineControlEventTypeAllSoundOff: if (pData->options & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) { fShmRtClientControl.writeOpcode(kPluginBridgeRtClientControlEventAllSoundOff); fShmRtClientControl.writeUInt(event.time); fShmRtClientControl.writeByte(event.channel); fShmRtClientControl.commitWrite(); } break; case kEngineControlEventTypeAllNotesOff: if (pData->options & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) { #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (event.channel == pData->ctrlChannel && ! allNotesOffSent) { allNotesOffSent = true; postponeRtAllNotesOff(); } #endif fShmRtClientControl.writeOpcode(kPluginBridgeRtClientControlEventAllNotesOff); fShmRtClientControl.writeUInt(event.time); fShmRtClientControl.writeByte(event.channel); fShmRtClientControl.commitWrite(); } break; } // switch (ctrlEvent.type) break; } // case kEngineEventTypeControl case kEngineEventTypeMidi: { const EngineMidiEvent& midiEvent(event.midi); if (midiEvent.size == 0 || midiEvent.size >= MAX_MIDI_VALUE) continue; const uint8_t* const midiData(midiEvent.size > EngineMidiEvent::kDataSize ? midiEvent.dataExt : midiEvent.data); uint8_t status = uint8_t(MIDI_GET_STATUS_FROM_DATA(midiData)); if ((status == MIDI_STATUS_NOTE_OFF || status == MIDI_STATUS_NOTE_ON) && (pData->options & PLUGIN_OPTION_SKIP_SENDING_NOTES)) continue; if (status == MIDI_STATUS_CHANNEL_PRESSURE && (pData->options & PLUGIN_OPTION_SEND_CHANNEL_PRESSURE) == 0) continue; if (status == MIDI_STATUS_CONTROL_CHANGE && (pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) == 0) continue; if (status == MIDI_STATUS_POLYPHONIC_AFTERTOUCH && (pData->options & PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH) == 0) continue; if (status == MIDI_STATUS_PITCH_WHEEL_CONTROL && (pData->options & PLUGIN_OPTION_SEND_PITCHBEND) == 0) continue; // Fix bad note-off if (status == MIDI_STATUS_NOTE_ON && midiData[2] == 0) status = MIDI_STATUS_NOTE_OFF; fShmRtClientControl.writeOpcode(kPluginBridgeRtClientMidiEvent); fShmRtClientControl.writeUInt(event.time); fShmRtClientControl.writeByte(midiEvent.port); fShmRtClientControl.writeByte(midiEvent.size); fShmRtClientControl.writeByte(uint8_t(midiData[0] | (event.channel & MIDI_CHANNEL_BIT))); for (uint8_t j=1; j < midiEvent.size; ++j) fShmRtClientControl.writeByte(midiData[j]); fShmRtClientControl.commitWrite(); if (status == MIDI_STATUS_NOTE_ON) { pData->postponeNoteOnRtEvent(true, event.channel, midiData[1], midiData[2]); } else if (status == MIDI_STATUS_NOTE_OFF) { pData->postponeNoteOffRtEvent(true, event.channel, midiData[1]); } } break; } } pData->postRtEvents.trySplice(); } // End of Event Input if (! processSingle(audioIn, audioOut, frames)) return; // -------------------------------------------------------------------------------------------------------- // MIDI Output if (pData->event.portOut != nullptr) { uint32_t time; uint8_t port, size; const uint8_t* midiData(fShmRtClientControl.data->midiOut); for (std::size_t read=0; readevent.portOut->writeMidiEvent(time, size, data); read += kBridgeBaseMidiOutHeaderSize + size; } // TODO (void)port; } // End of Control and MIDI Output } bool processSingle(const float* const* const audioIn, float** const audioOut, const uint32_t frames) { CARLA_SAFE_ASSERT_RETURN(! fTimedError, false); CARLA_SAFE_ASSERT_RETURN(frames > 0, false); CARLA_SAFE_ASSERT_RETURN(frames <= fBufferSize, false); if (pData->audioIn.count > 0) { CARLA_SAFE_ASSERT_RETURN(audioIn != nullptr, false); } if (pData->audioOut.count > 0) { CARLA_SAFE_ASSERT_RETURN(audioOut != nullptr, false); } // -------------------------------------------------------------------------------------------------------- // Try lock, silence otherwise #ifndef STOAT_TEST_BUILD if (pData->engine->isOffline()) { pData->singleMutex.lock(); } else #endif if (! pData->singleMutex.tryLock()) { for (uint32_t i=0; i < pData->audioOut.count; ++i) carla_zeroFloats(audioOut[i], frames); return false; } // -------------------------------------------------------------------------------------------------------- // Reset audio buffers for (uint32_t i=0; i < fInfo.aIns; ++i) carla_copyFloats(fShmAudioPool.data + (i * fBufferSize), audioIn[i], frames); // -------------------------------------------------------------------------------------------------------- // TimeInfo const EngineTimeInfo timeInfo(pData->engine->getTimeInfo()); BridgeTimeInfo& bridgeTimeInfo(fShmRtClientControl.data->timeInfo); bridgeTimeInfo.playing = timeInfo.playing; bridgeTimeInfo.frame = timeInfo.frame; bridgeTimeInfo.usecs = timeInfo.usecs; bridgeTimeInfo.validFlags = timeInfo.bbt.valid ? kPluginBridgeTimeInfoValidBBT : 0x0; if (timeInfo.bbt.valid) { bridgeTimeInfo.bar = timeInfo.bbt.bar; bridgeTimeInfo.beat = timeInfo.bbt.beat; bridgeTimeInfo.tick = timeInfo.bbt.tick; bridgeTimeInfo.beatsPerBar = timeInfo.bbt.beatsPerBar; bridgeTimeInfo.beatType = timeInfo.bbt.beatType; bridgeTimeInfo.ticksPerBeat = timeInfo.bbt.ticksPerBeat; bridgeTimeInfo.beatsPerMinute = timeInfo.bbt.beatsPerMinute; bridgeTimeInfo.barStartTick = timeInfo.bbt.barStartTick; } // -------------------------------------------------------------------------------------------------------- // Run plugin { fShmRtClientControl.writeOpcode(kPluginBridgeRtClientProcess); fShmRtClientControl.writeUInt(frames); fShmRtClientControl.commitWrite(); } waitForClient("process", fProcWaitTime); if (fTimedOut) { pData->singleMutex.unlock(); return false; } if (fShmRtClientControl.data->procFlags) { fInitiated = false; fProcCanceled = true; } for (uint32_t i=0; i < fInfo.aOuts; ++i) carla_copyFloats(audioOut[i], fShmAudioPool.data + ((i + fInfo.aIns) * fBufferSize), frames); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // -------------------------------------------------------------------------------------------------------- // Post-processing (dry/wet, volume and balance) { const bool doVolume = (pData->hints & PLUGIN_CAN_VOLUME) != 0 && carla_isNotEqual(pData->postProc.volume, 1.0f); const bool doDryWet = (pData->hints & PLUGIN_CAN_DRYWET) != 0 && carla_isNotEqual(pData->postProc.dryWet, 1.0f); const bool doBalance = (pData->hints & PLUGIN_CAN_BALANCE) != 0 && ! (carla_isEqual(pData->postProc.balanceLeft, -1.0f) && carla_isEqual(pData->postProc.balanceRight, 1.0f)); const bool isMono = (pData->audioIn.count == 1); bool isPair; float bufValue, oldBufLeft[doBalance ? frames : 1]; for (uint32_t i=0; i < pData->audioOut.count; ++i) { // Dry/Wet if (doDryWet) { const uint32_t c = isMono ? 0 : i; for (uint32_t k=0; k < frames; ++k) { bufValue = audioIn[c][k]; audioOut[i][k] = (audioOut[i][k] * pData->postProc.dryWet) + (bufValue * (1.0f - pData->postProc.dryWet)); } } // Balance if (doBalance) { isPair = (i % 2 == 0); if (isPair) { CARLA_ASSERT(i+1 < pData->audioOut.count); carla_copyFloats(oldBufLeft, audioOut[i], frames); } float balRangeL = (pData->postProc.balanceLeft + 1.0f)/2.0f; float balRangeR = (pData->postProc.balanceRight + 1.0f)/2.0f; for (uint32_t k=0; k < frames; ++k) { if (isPair) { // left audioOut[i][k] = oldBufLeft[k] * (1.0f - balRangeL); audioOut[i][k] += audioOut[i+1][k] * (1.0f - balRangeR); } else { // right audioOut[i][k] = audioOut[i][k] * balRangeR; audioOut[i][k] += oldBufLeft[k] * balRangeL; } } } // Volume if (doVolume) { for (uint32_t k=0; k < frames; ++k) audioOut[i][k] *= pData->postProc.volume; } } } // End of Post-processing #endif // -------------------------------------------------------------------------------------------------------- pData->singleMutex.unlock(); return true; } void bufferSizeChanged(const uint32_t newBufferSize) override { fBufferSize = newBufferSize; resizeAudioPool(newBufferSize); { fShmRtClientControl.writeOpcode(kPluginBridgeRtClientSetBufferSize); fShmRtClientControl.writeUInt(newBufferSize); fShmRtClientControl.commitWrite(); } //fProcWaitTime = newBufferSize*1000/pData->engine->getSampleRate(); fProcWaitTime = 1000; waitForClient("buffersize", 1000); } void sampleRateChanged(const double newSampleRate) override { { fShmRtClientControl.writeOpcode(kPluginBridgeRtClientSetSampleRate); fShmRtClientControl.writeDouble(newSampleRate); fShmRtClientControl.commitWrite(); } //fProcWaitTime = pData->engine->getBufferSize()*1000/newSampleRate; fProcWaitTime = 1000; waitForClient("samplerate", 1000); } void offlineModeChanged(const bool isOffline) override { { fShmRtClientControl.writeOpcode(kPluginBridgeRtClientSetOnline); fShmRtClientControl.writeBool(isOffline); fShmRtClientControl.commitWrite(); } waitForClient("offline", 1000); } // ------------------------------------------------------------------- // Post-poned UI Stuff // ------------------------------------------------------------------- void handleNonRtData() { for (; fShmNonRtServerControl.isDataAvailableForReading();) { const PluginBridgeNonRtServerOpcode opcode(fShmNonRtServerControl.readOpcode()); //#ifdef DEBUG if (opcode != kPluginBridgeNonRtServerPong) { carla_debug("CarlaPluginJack::handleNonRtData() - got opcode: %s", PluginBridgeNonRtServerOpcode2str(opcode)); } //#endif switch (opcode) { case kPluginBridgeNonRtServerNull: case kPluginBridgeNonRtServerPong: case kPluginBridgeNonRtServerPluginInfo1: case kPluginBridgeNonRtServerPluginInfo2: case kPluginBridgeNonRtServerAudioCount: case kPluginBridgeNonRtServerMidiCount: case kPluginBridgeNonRtServerCvCount: case kPluginBridgeNonRtServerParameterCount: case kPluginBridgeNonRtServerProgramCount: case kPluginBridgeNonRtServerMidiProgramCount: case kPluginBridgeNonRtServerPortName: case kPluginBridgeNonRtServerParameterData1: case kPluginBridgeNonRtServerParameterData2: case kPluginBridgeNonRtServerParameterRanges: case kPluginBridgeNonRtServerParameterValue: case kPluginBridgeNonRtServerParameterValue2: case kPluginBridgeNonRtServerParameterTouch: case kPluginBridgeNonRtServerDefaultValue: case kPluginBridgeNonRtServerCurrentProgram: case kPluginBridgeNonRtServerCurrentMidiProgram: case kPluginBridgeNonRtServerProgramName: case kPluginBridgeNonRtServerMidiProgramData: case kPluginBridgeNonRtServerSetCustomData: case kPluginBridgeNonRtServerVersion: case kPluginBridgeNonRtServerRespEmbedUI: case kPluginBridgeNonRtServerResizeEmbedUI: break; case kPluginBridgeNonRtServerSetChunkDataFile: // uint/size, str[] (filename) if (const uint32_t chunkFilePathSize = fShmNonRtServerControl.readUInt()) { char chunkFilePath[chunkFilePathSize]; fShmNonRtServerControl.readCustomData(chunkFilePath, chunkFilePathSize); } break; case kPluginBridgeNonRtServerSetLatency: case kPluginBridgeNonRtServerSetParameterText: break; case kPluginBridgeNonRtServerReady: fInitiated = true; break; case kPluginBridgeNonRtServerSaved: break; case kPluginBridgeNonRtServerUiClosed: pData->engine->callback(true, true, ENGINE_CALLBACK_UI_STATE_CHANGED, pData->id, 0, 0, 0, 0.0f, nullptr); break; case kPluginBridgeNonRtServerError: { // error const uint32_t errorSize(fShmNonRtServerControl.readUInt()); char error[errorSize+1]; carla_zeroChars(error, errorSize+1); fShmNonRtServerControl.readCustomData(error, errorSize); if (fInitiated) { pData->engine->callback(true, true, ENGINE_CALLBACK_ERROR, pData->id, 0, 0, 0, 0.0f, error); // just in case pData->engine->setLastError(error); fInitError = true; } else { pData->engine->setLastError(error); fInitError = true; fInitiated = true; } } break; } } } // ------------------------------------------------------------------- uintptr_t getUiBridgeProcessId() const noexcept override { return fBridgeThread.getProcessID(); } // ------------------------------------------------------------------- bool init(const CarlaPluginPtr plugin, const char* const filename, const char* const name, const char* const label, const uint options) { CARLA_SAFE_ASSERT_RETURN(pData->engine != nullptr, false); // --------------------------------------------------------------- // first checks if (pData->client != nullptr) { pData->engine->setLastError("Plugin client is already registered"); return false; } if (filename == nullptr || filename[0] == '\0') { pData->engine->setLastError("null filename"); return false; } if (label == nullptr || label[0] == '\0') { pData->engine->setLastError("null label"); return false; } // --------------------------------------------------------------- // check setup if (std::strlen(label) < 6) { pData->engine->setLastError("invalid application setup received"); return false; } for (int i=4; --i >= 0;) { CARLA_SAFE_ASSERT_INT2_RETURN(label[i] >= '0' && label[i] <= '0'+64, i, label[i], false); } CARLA_SAFE_ASSERT_INT2_RETURN(label[4] >= '0' && label[4] < '0'+0x4f, 4, label[4], false); CARLA_SAFE_ASSERT_UINT2_RETURN(static_cast(label[5]) >= '0' && static_cast(label[5]) <= '0'+0x73, static_cast(label[5]), static_cast('0'+0x73), false); fInfo.aIns = static_cast(label[0] - '0'); fInfo.aOuts = static_cast(label[1] - '0'); fInfo.mIns = static_cast(carla_minPositive(label[2] - '0', 1)); fInfo.mOuts = static_cast(carla_minPositive(label[3] - '0', 1)); fInfo.setupLabel = label; // --------------------------------------------------------------- // set project unique id if (label[6] == '\0') setupUniqueProjectID(); // --------------------------------------------------------------- // set icon pData->iconName = carla_strdup_safe("application"); // --------------------------------------------------------------- // set info pData->filename = carla_strdup(filename); if (name != nullptr && name[0] != '\0') pData->name = pData->engine->getUniquePluginName(name); else pData->name = pData->engine->getUniquePluginName("Jack Application"); std::srand(static_cast(std::time(nullptr))); // --------------------------------------------------------------- // init sem/shm if (! fShmAudioPool.initializeServer()) { carla_stderr("Failed to initialize shared memory audio pool"); return false; } if (! fShmRtClientControl.initializeServer()) { carla_stderr("Failed to initialize RT client control"); fShmAudioPool.clear(); return false; } if (! fShmNonRtClientControl.initializeServer()) { carla_stderr("Failed to initialize Non-RT client control"); fShmRtClientControl.clear(); fShmAudioPool.clear(); return false; } if (! fShmNonRtServerControl.initializeServer()) { carla_stderr("Failed to initialize Non-RT server control"); fShmNonRtClientControl.clear(); fShmRtClientControl.clear(); fShmAudioPool.clear(); return false; } // --------------------------------------------------------------- // setup hints and options fSetupHints = static_cast(static_cast(label[5]) - '0'); // FIXME dryWet broken pData->hints = PLUGIN_IS_BRIDGE; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH pData->hints |= /*PLUGIN_CAN_DRYWET |*/ PLUGIN_CAN_VOLUME | PLUGIN_CAN_BALANCE; #endif if (fSetupHints & LIBJACK_FLAG_CONTROL_WINDOW) pData->hints |= PLUGIN_HAS_CUSTOM_UI; // --------------------------------------------------------------- // init bridge thread { char shmIdsStr[6*4+1]; carla_zeroChars(shmIdsStr, 6*4+1); std::strncpy(shmIdsStr+6*0, &fShmAudioPool.filename[fShmAudioPool.filename.length()-6], 6); std::strncpy(shmIdsStr+6*1, &fShmRtClientControl.filename[fShmRtClientControl.filename.length()-6], 6); std::strncpy(shmIdsStr+6*2, &fShmNonRtClientControl.filename[fShmNonRtClientControl.filename.length()-6], 6); std::strncpy(shmIdsStr+6*3, &fShmNonRtServerControl.filename[fShmNonRtServerControl.filename.length()-6], 6); fBridgeThread.setData(shmIdsStr, fInfo.setupLabel); } if (! restartBridgeThread()) return false; // --------------------------------------------------------------- // register client if (pData->name == nullptr) pData->name = pData->engine->getUniquePluginName("unknown"); pData->client = pData->engine->addClient(plugin); if (pData->client == nullptr || ! pData->client->isOk()) { pData->engine->setLastError("Failed to register plugin client"); return false; } // remove unprintable characters if needed if (fSetupHints & LIBJACK_FLAG_EXTERNAL_START) fInfo.setupLabel[5U] = static_cast('0' + (fSetupHints ^ LIBJACK_FLAG_EXTERNAL_START)); // --------------------------------------------------------------- // set options pData->options = PLUGIN_OPTION_FIXED_BUFFERS; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_CONTROL_CHANGES)) pData->options |= PLUGIN_OPTION_SEND_CONTROL_CHANGES; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_CHANNEL_PRESSURE)) pData->options |= PLUGIN_OPTION_SEND_CHANNEL_PRESSURE; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH)) pData->options |= PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_PITCHBEND)) pData->options |= PLUGIN_OPTION_SEND_PITCHBEND; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_ALL_SOUND_OFF)) pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_PROGRAM_CHANGES)) pData->options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; if (isPluginOptionInverseEnabled(options, PLUGIN_OPTION_SKIP_SENDING_NOTES)) pData->options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; return true; } private: bool fInitiated; bool fInitError; bool fTimedOut; bool fTimedError; bool fProcCanceled; uint fBufferSize; uint fProcWaitTime; uint fSetupHints; CarlaPluginJackThread fBridgeThread; BridgeAudioPool fShmAudioPool; BridgeRtClientControl fShmRtClientControl; BridgeNonRtClientControl fShmNonRtClientControl; BridgeNonRtServerControl fShmNonRtServerControl; struct Info { uint8_t aIns, aOuts; uint8_t mIns, mOuts; CarlaString setupLabel; std::vector chunk; Info() : aIns(0), aOuts(0), mIns(0), mOuts(0), setupLabel(), chunk() {} CARLA_DECLARE_NON_COPY_STRUCT(Info) } fInfo; void handleProcessStopped() noexcept { const bool wasActive = pData->active; pData->active = false; if (wasActive) { pData->engine->callback(true, true, ENGINE_CALLBACK_PARAMETER_VALUE_CHANGED, pData->id, PARAMETER_ACTIVE, 0, 0, 0.0f, nullptr); } if (pData->hints & PLUGIN_HAS_CUSTOM_UI) pData->engine->callback(true, true, ENGINE_CALLBACK_UI_STATE_CHANGED, pData->id, 0, 0, 0, 0.0f, nullptr); } void resizeAudioPool(const uint32_t bufferSize) { fShmAudioPool.resize(bufferSize, static_cast(fInfo.aIns+fInfo.aOuts), 0); fShmRtClientControl.writeOpcode(kPluginBridgeRtClientSetAudioPool); fShmRtClientControl.writeULong(static_cast(fShmAudioPool.dataSize)); fShmRtClientControl.commitWrite(); waitForClient("resize-pool", 5000); } void setupUniqueProjectID() { const char* const engineProjectFolder = pData->engine->getCurrentProjectFolder(); carla_stdout("setupUniqueProjectID %s", engineProjectFolder); if (engineProjectFolder == nullptr || engineProjectFolder[0] == '\0') return; const File file(engineProjectFolder); CARLA_SAFE_ASSERT_RETURN(file.exists(),); char code[6]; code[5] = '\0'; String child; for (;;) { static const char* const kValidChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "0123456789"; static const size_t kValidCharsLen(std::strlen(kValidChars)-1U); code[0] = kValidChars[safe_rand(kValidCharsLen)]; code[1] = kValidChars[safe_rand(kValidCharsLen)]; code[2] = kValidChars[safe_rand(kValidCharsLen)]; code[3] = kValidChars[safe_rand(kValidCharsLen)]; code[4] = kValidChars[safe_rand(kValidCharsLen)]; child = pData->name; child += "."; child += code; const File newFile(file.getChildFile(child)); if (newFile.existsAsFile()) continue; fInfo.setupLabel += code; carla_stdout("new label %s", fInfo.setupLabel.buffer()); break; } } bool restartBridgeThread() { fInitiated = false; fInitError = false; fTimedError = false; // reset memory fProcCanceled = false; fShmRtClientControl.data->procFlags = 0; carla_zeroStruct(fShmRtClientControl.data->timeInfo); carla_zeroBytes(fShmRtClientControl.data->midiOut, kBridgeRtClientDataMidiOutSize); fShmRtClientControl.clearData(); fShmNonRtClientControl.clearData(); fShmNonRtServerControl.clearData(); // initial values fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientVersion); fShmNonRtClientControl.writeUInt(CARLA_PLUGIN_BRIDGE_API_VERSION_CURRENT); fShmNonRtClientControl.writeUInt(static_cast(sizeof(BridgeRtClientData))); fShmNonRtClientControl.writeUInt(static_cast(sizeof(BridgeNonRtClientData))); fShmNonRtClientControl.writeUInt(static_cast(sizeof(BridgeNonRtServerData))); fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientInitialSetup); fShmNonRtClientControl.writeUInt(pData->engine->getBufferSize()); fShmNonRtClientControl.writeDouble(pData->engine->getSampleRate()); fShmNonRtClientControl.commitWrite(); if (fShmAudioPool.dataSize != 0) { fShmRtClientControl.writeOpcode(kPluginBridgeRtClientSetAudioPool); fShmRtClientControl.writeULong(static_cast(fShmAudioPool.dataSize)); fShmRtClientControl.commitWrite(); } else { // testing dummy message fShmRtClientControl.writeOpcode(kPluginBridgeRtClientNull); fShmRtClientControl.commitWrite(); } fBridgeThread.startThread(); const bool needsCancelableAction = ! pData->engine->isLoadingProject(); const bool needsEngineIdle = pData->engine->getType() != kEngineTypePlugin; CarlaString actionName; if (needsCancelableAction) { if (fSetupHints & LIBJACK_FLAG_EXTERNAL_START) { const EngineOptions& options(pData->engine->getOptions()); CarlaString binaryDir(options.binaryDir); char* const hwVars = fBridgeThread.getEnvVarsToExport(); actionName = "Waiting for external JACK application start, please use the following environment variables:\n"; actionName += hwVars; delete[] hwVars; } else { actionName = "Loading JACK application"; } pData->engine->setActionCanceled(false); pData->engine->callback(true, true, ENGINE_CALLBACK_CANCELABLE_ACTION, pData->id, 1, 0, 0, 0.0f, actionName.buffer()); } for (;fBridgeThread.isThreadRunning();) { pData->engine->callback(true, false, ENGINE_CALLBACK_IDLE, 0, 0, 0, 0, 0.0f, nullptr); if (needsEngineIdle) pData->engine->idle(); idle(); if (fInitiated) break; if (pData->engine->isAboutToClose() || pData->engine->wasActionCanceled()) break; carla_msleep(5); } if (needsCancelableAction) { pData->engine->callback(true, true, ENGINE_CALLBACK_CANCELABLE_ACTION, pData->id, 0, 0, 0, 0.0f, actionName.buffer()); } if (fInitError || ! fInitiated) { fBridgeThread.stopThread(6000); if (! fInitError) pData->engine->setLastError("Timeout while waiting for a response from plugin-bridge\n" "(or the plugin crashed on initialization?)"); return false; } return true; } void waitForClient(const char* const action, const uint msecs) { CARLA_SAFE_ASSERT_RETURN(! fTimedOut,); CARLA_SAFE_ASSERT_RETURN(! fTimedError,); if (fShmRtClientControl.waitForClient(msecs)) return; fTimedOut = true; carla_stderr2("waitForClient(%s) timed out", action); } CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaPluginJack) }; CARLA_BACKEND_END_NAMESPACE #endif // CARLA_OS_LINUX // ------------------------------------------------------------------------------------------------------------------- CARLA_BACKEND_START_NAMESPACE CarlaPluginPtr CarlaPlugin::newJackApp(const Initializer& init) { carla_debug("CarlaPlugin::newJackApp({%p, \"%s\", \"%s\", \"%s\"})", init.engine, init.filename, init.name, init.label); #ifdef CARLA_OS_LINUX std::shared_ptr plugin(new CarlaPluginJack(init.engine, init.id)); if (! plugin->init(plugin, init.filename, init.name, init.label, init.options)) return nullptr; return plugin; #else init.engine->setLastError("JACK Application support not available"); return nullptr; #endif } CARLA_BACKEND_END_NAMESPACE // ------------------------------------------------------------------------------------------------------------------- Carla-2.4.2/source/backend/plugin/CarlaPluginJuce.cpp000066400000000000000000002033241420416754300224540ustar00rootroot00000000000000/* * Carla Juce Plugin * Copyright (C) 2013-2021 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "CarlaPluginInternal.hpp" #include "CarlaEngine.hpp" #ifdef USING_JUCE #include "CarlaBackendUtils.hpp" #include "CarlaMathUtils.hpp" #include "CarlaProcessUtils.hpp" #include "CarlaScopeUtils.hpp" #include "CarlaVst2Utils.hpp" #include "CarlaVst3Utils.hpp" #if defined(__clang__) # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wfloat-equal" # pragma clang diagnostic ignored "-Wimplicit-int-float-conversion" #elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wconversion" # pragma GCC diagnostic ignored "-Wdouble-promotion" # pragma GCC diagnostic ignored "-Weffc++" # pragma GCC diagnostic ignored "-Wfloat-equal" #endif #define JUCE_GUI_BASICS_INCLUDE_XHEADERS 1 #include "AppConfig.h" #include "juce_audio_processors/juce_audio_processors.h" #include "juce_gui_basics/juce_gui_basics.h" #if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) # pragma GCC diagnostic pop #endif #include "JucePluginWindow.hpp" CARLA_BACKEND_START_NAMESPACE // ------------------------------------------------------------------------------------------------------------------- // Fallback data static const ExternalMidiNote kExternalMidiNoteFallback = { -1, 0, 0 }; // ------------------------------------------------------------------------------------------------------------------- // find all available plugin audio ports static void findMaxTotalChannels(juce::AudioProcessor* const filter, const bool isAU, uint32_t& maxTotalIns, uint32_t& maxTotalOuts) { filter->enableAllBuses(); if (isAU) { maxTotalIns = static_cast(juce::jmax(0, filter->getTotalNumInputChannels())); maxTotalOuts = static_cast(juce::jmax(0, filter->getTotalNumOutputChannels())); return; } const int numInputBuses = filter->getBusCount(true); const int numOutputBuses = filter->getBusCount(false); if (numInputBuses > 1 || numOutputBuses > 1) { maxTotalIns = maxTotalOuts = 0; for (int i = 0; i < numInputBuses; ++i) maxTotalIns += static_cast(juce::jmax(0, filter->getChannelCountOfBus(true, i))); for (int i = 0; i < numOutputBuses; ++i) maxTotalOuts += static_cast(juce::jmax(0, filter->getChannelCountOfBus(false, i))); } else { maxTotalIns = numInputBuses > 0 ? static_cast(juce::jmax(0, filter->getBus(true, 0)->getMaxSupportedChannels(64))) : 0; maxTotalOuts = numOutputBuses > 0 ? static_cast(juce::jmax(0, filter->getBus(false, 0)->getMaxSupportedChannels(64))) : 0; } } // ------------------------------------------------------------------------------------------------------------------- class CarlaPluginJuce : public CarlaPlugin, private juce::AudioPlayHead, private juce::AudioProcessorListener { public: CarlaPluginJuce(CarlaEngine* const engine, const uint id) : CarlaPlugin(engine, id), fDesc(), fFormatManager(), fInstance(), fAudioBuffer(), fMidiBuffer(), fPosInfo(), fChunk(), fFormatName(), fWindow() { carla_debug("CarlaPluginJuce::CarlaPluginJuce(%p, %i)", engine, id); fMidiBuffer.ensureSize(2048); fMidiBuffer.clear(); fPosInfo.resetToDefault(); } ~CarlaPluginJuce() override { carla_debug("CarlaPluginJuce::~CarlaPluginJuce()"); // close UI if (pData->hints & PLUGIN_HAS_CUSTOM_UI) showCustomUI(false); pData->singleMutex.lock(); pData->masterMutex.lock(); if (pData->client != nullptr && pData->client->isActive()) pData->client->deactivate(true); if (pData->active) { deactivate(); pData->active = false; } fInstance = nullptr; clearBuffers(); } // ------------------------------------------------------------------- // Information (base) PluginType getType() const noexcept override { return getPluginTypeFromString(fDesc.pluginFormatName.toRawUTF8()); } PluginCategory getCategory() const noexcept override { if (fDesc.isInstrument) return PLUGIN_CATEGORY_SYNTH; return getPluginCategoryFromName(fDesc.category.isNotEmpty() ? fDesc.category.toRawUTF8() : fDesc.name.toRawUTF8()); } int64_t getUniqueId() const noexcept override { return fDesc.uid; } // ------------------------------------------------------------------- // Information (count) // nothing // ------------------------------------------------------------------- // Information (current data) std::size_t getChunkData(void** const dataPtr) noexcept override { CARLA_SAFE_ASSERT_RETURN(pData->options & PLUGIN_OPTION_USE_CHUNKS, 0); CARLA_SAFE_ASSERT_RETURN(fInstance != nullptr, 0); CARLA_SAFE_ASSERT_RETURN(dataPtr != nullptr, 0); *dataPtr = nullptr; try { fChunk.reset(); fInstance->getStateInformation(fChunk); } CARLA_SAFE_EXCEPTION_RETURN("CarlaPluginJuce::getChunkData", 0); if (const std::size_t size = fChunk.getSize()) { *dataPtr = fChunk.getData(); return size; } return 0; } // ------------------------------------------------------------------- // Information (per-plugin data) uint getOptionsAvailable() const noexcept override { CARLA_SAFE_ASSERT_RETURN(fInstance != nullptr, 0x0); uint options = 0x0; options |= PLUGIN_OPTION_USE_CHUNKS; if (fInstance->getNumPrograms() > 1) options |= PLUGIN_OPTION_MAP_PROGRAM_CHANGES; if (fInstance->acceptsMidi()) { options |= PLUGIN_OPTION_SEND_CONTROL_CHANGES; options |= PLUGIN_OPTION_SEND_CHANNEL_PRESSURE; options |= PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH; options |= PLUGIN_OPTION_SEND_PITCHBEND; options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; } return options; } float getParameterValue(const uint32_t parameterId) const noexcept override { CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, 0.0f); CARLA_SAFE_ASSERT_RETURN(fInstance != nullptr, 0.0f); juce::AudioProcessorParameter* const parameter = fInstance->getParameters()[static_cast(parameterId)]; CARLA_SAFE_ASSERT_RETURN(parameter != nullptr, 0.0f); return parameter->getValue(); } bool getLabel(char* const strBuf) const noexcept override { if (fDesc.pluginFormatName == "AU" || fDesc.pluginFormatName == "AudioUnit") std::strncpy(strBuf, fDesc.fileOrIdentifier.toRawUTF8(), STR_MAX); else std::strncpy(strBuf, fDesc.name.toRawUTF8(), STR_MAX); return true; } bool getMaker(char* const strBuf) const noexcept override { std::strncpy(strBuf, fDesc.manufacturerName.toRawUTF8(), STR_MAX); return true; } bool getCopyright(char* const strBuf) const noexcept override { return getMaker(strBuf); } bool getRealName(char* const strBuf) const noexcept override { std::strncpy(strBuf, fDesc.descriptiveName.toRawUTF8(), STR_MAX); return true; } bool getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false); CARLA_SAFE_ASSERT_RETURN(fInstance != nullptr, false); juce::AudioProcessorParameter* const parameter = fInstance->getParameters()[static_cast(parameterId)]; CARLA_SAFE_ASSERT_RETURN(parameter != nullptr, false); std::strncpy(strBuf, parameter->getName(STR_MAX).toRawUTF8(), STR_MAX); return true; } bool getParameterText(const uint32_t parameterId, char* const strBuf) noexcept override { CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false); CARLA_SAFE_ASSERT_RETURN(fInstance != nullptr, false); juce::AudioProcessorParameter* const parameter = fInstance->getParameters()[static_cast(parameterId)]; CARLA_SAFE_ASSERT_RETURN(parameter != nullptr, false); std::strncpy(strBuf, parameter->getCurrentValueAsText().toRawUTF8(), STR_MAX); return true; } bool getParameterUnit(const uint32_t parameterId, char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false); CARLA_SAFE_ASSERT_RETURN(fInstance != nullptr, false); juce::AudioProcessorParameter* const parameter = fInstance->getParameters()[static_cast(parameterId)]; CARLA_SAFE_ASSERT_RETURN(parameter != nullptr, false); std::strncpy(strBuf, parameter->getLabel().toRawUTF8(), STR_MAX); return true; } bool getParameterGroupName(const uint32_t parameterId, char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false); CARLA_SAFE_ASSERT_RETURN(fInstance != nullptr, false); if (fDesc.pluginFormatName != "VST" && fDesc.pluginFormatName != "VST2") return false; AEffect* const effect = (AEffect*)fInstance->getPlatformSpecificData(); if (effect == nullptr) return false; VstParameterProperties prop; carla_zeroStruct(prop); if (effect->dispatcher(effect, effGetParameterProperties, static_cast(parameterId), 0, &prop, 0.0f) == 1 && prop.category != 0 && prop.categoryLabel[0] != '\0') { std::snprintf(strBuf, STR_MAX, "%d:%s", prop.category, prop.categoryLabel); return true; } return false; } // ------------------------------------------------------------------- // Set data (state) // nothing // ------------------------------------------------------------------- // Set data (internal stuff) void setName(const char* const newName) override { CarlaPlugin::setName(newName); if (fWindow == nullptr || pData->uiTitle.isNotEmpty()) return; juce::String uiName(pData->name); uiName += " (GUI)"; fWindow->setName(uiName); } // ------------------------------------------------------------------- // Set data (plugin-specific stuff) void setParameterValue(const uint32_t parameterId, const float value, const bool sendGui, const bool sendOsc, const bool sendCallback) noexcept override { CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,); CARLA_SAFE_ASSERT_RETURN(fInstance != nullptr,); juce::AudioProcessorParameter* const parameter = fInstance->getParameters()[static_cast(parameterId)]; CARLA_SAFE_ASSERT_RETURN(parameter != nullptr,); const float fixedValue = pData->param.getFixedValue(parameterId, value); try { parameter->setValue(value); } CARLA_SAFE_EXCEPTION("setValue"); CarlaPlugin::setParameterValue(parameterId, fixedValue, sendGui, sendOsc, sendCallback); } void setParameterValueRT(const uint32_t parameterId, const float value, const bool sendCallbackLater) noexcept override { CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,); CARLA_SAFE_ASSERT_RETURN(fInstance != nullptr,); juce::AudioProcessorParameter* const parameter = fInstance->getParameters()[static_cast(parameterId)]; CARLA_SAFE_ASSERT_RETURN(parameter != nullptr,); const float fixedValue = pData->param.getFixedValue(parameterId, value); try { parameter->setValue(value); } CARLA_SAFE_EXCEPTION("setValue(RT)"); CarlaPlugin::setParameterValueRT(parameterId, fixedValue, sendCallbackLater); } void setChunkData(const void* const data, const std::size_t dataSize) override { CARLA_SAFE_ASSERT_RETURN(pData->options & PLUGIN_OPTION_USE_CHUNKS,); CARLA_SAFE_ASSERT_RETURN(fInstance != nullptr,); CARLA_SAFE_ASSERT_RETURN(data != nullptr,); CARLA_SAFE_ASSERT_RETURN(dataSize > 0,); if (isJuceSaveFormat(data, dataSize)) { const ScopedSingleProcessLocker spl(this, true); fInstance->setStateInformation(data, static_cast(dataSize)); } else { uint8_t* const dataCompat = (uint8_t*)std::malloc(dataSize + 160); CARLA_SAFE_ASSERT_RETURN(dataCompat != nullptr,); carla_stdout("NOTE: Loading plugin state in Carla JUCE/VST2 compatibility mode"); std::memset(dataCompat, 0, 160); std::memcpy(dataCompat+160, data, dataSize); int32_t* const set = (int32_t*)dataCompat; set[0] = (int32_t)juce::ByteOrder::littleEndianInt("CcnK"); set[2] = (int32_t)juce::ByteOrder::littleEndianInt("FBCh"); set[3] = fxbSwap(1); set[39] = fxbSwap(static_cast(dataSize)); { const ScopedSingleProcessLocker spl(this, true); fInstance->setStateInformation(dataCompat, static_cast(dataSize+160)); } std::free(dataCompat); } pData->updateParameterValues(this, true, true, false); } void setProgram(const int32_t index, const bool sendGui, const bool sendOsc, const bool sendCallback, const bool doingInit) noexcept override { CARLA_SAFE_ASSERT_RETURN(fInstance != nullptr,); CARLA_SAFE_ASSERT_RETURN(index >= -1 && index < static_cast(pData->prog.count),); if (index >= 0) { const ScopedSingleProcessLocker spl(this, (sendGui || sendOsc || sendCallback)); try { fInstance->setCurrentProgram(index); } CARLA_SAFE_EXCEPTION("setCurrentProgram"); } CarlaPlugin::setProgram(index, sendGui, sendOsc, sendCallback, doingInit); } void setProgramRT(const uint32_t index, const bool sendCallbackLater) noexcept override { CARLA_SAFE_ASSERT_RETURN(fInstance != nullptr,); CARLA_SAFE_ASSERT_RETURN(index < pData->prog.count,); try { fInstance->setCurrentProgram(static_cast(index)); } CARLA_SAFE_EXCEPTION("setCurrentProgram"); CarlaPlugin::setProgramRT(index, sendCallbackLater); } // ------------------------------------------------------------------- // Set ui stuff void setCustomUITitle(const char* const title) noexcept override { if (fWindow != nullptr) { try { fWindow->setName(title); } CARLA_SAFE_EXCEPTION("set custom ui title"); } CarlaPlugin::setCustomUITitle(title); } void showCustomUI(const bool yesNo) override { CARLA_SAFE_ASSERT_RETURN(fInstance != nullptr,); carla_debug("CarlaPluginJuce::showCustomUI(%s)", bool2str(yesNo)); if (yesNo) { if (juce::AudioProcessorEditor* const editor = fInstance->createEditorIfNeeded()) { const EngineOptions& opts(pData->engine->getOptions()); #ifndef CARLA_OS_MAC editor->setScaleFactor(opts.uiScale); #endif if (fWindow == nullptr) { juce::String uiName; if (pData->uiTitle.isNotEmpty()) { uiName = pData->uiTitle.buffer(); } else { uiName = pData->name; uiName += " (GUI)"; } AEffect* const vst2effect = fDesc.pluginFormatName == "VST" || fDesc.pluginFormatName == "VST2" ? (AEffect*)fInstance->getPlatformSpecificData() : nullptr; v3_plugin_view** const vst3view = fDesc.pluginFormatName == "VST3" ? (v3_plugin_view**)editor->getPlatformSpecificData() : nullptr; fWindow = new JucePluginWindow(opts.frontendWinId, opts.pluginsAreStandalone, vst2effect, vst3view); fWindow->setName(uiName); } fWindow->show(editor); fWindow->toFront(true); } } else { if (juce::AudioProcessorEditor* const editor = fInstance->getActiveEditor()) delete editor; fWindow = nullptr; } } void uiIdle() override { if (fWindow != nullptr) { if (fWindow->wasClosedByUser()) { showCustomUI(false); pData->engine->callback(true, true, ENGINE_CALLBACK_UI_STATE_CHANGED, pData->id, 0, 0, 0, 0.0f, nullptr); } } CarlaPlugin::uiIdle(); } // ------------------------------------------------------------------- // Plugin state void reload() override { CARLA_SAFE_ASSERT_RETURN(pData->engine != nullptr,); CARLA_SAFE_ASSERT_RETURN(fInstance != nullptr,); carla_debug("CarlaPluginJuce::reload() - start"); const EngineProcessMode processMode(pData->engine->getProccessMode()); // Safely disable plugin for reload const ScopedDisabler sd(this); if (pData->active) deactivate(); clearBuffers(); uint32_t aIns, aOuts, mIns, mOuts, params; mIns = mOuts = 0; bool needsCtrlIn, needsCtrlOut; needsCtrlIn = needsCtrlOut = false; const bool isAU = fDesc.pluginFormatName == "AU" || fDesc.pluginFormatName == "AudioUnit"; const bool isVST2 = fDesc.pluginFormatName == "VST" || fDesc.pluginFormatName == "VST2"; const bool isVST3 = fDesc.pluginFormatName == "VST3"; findMaxTotalChannels(fInstance.get(), isAU, aIns, aOuts); fInstance->refreshParameterList(); const juce::Array& parameters(fInstance->getParameters()); params = static_cast(std::max(parameters.size(), 0)); if (fInstance->acceptsMidi()) { mIns = 1; needsCtrlIn = true; } if (fInstance->producesMidi()) { mOuts = 1; needsCtrlOut = true; } if (aIns > 0) { pData->audioIn.createNew(aIns); } if (aOuts > 0) { pData->audioOut.createNew(aOuts); needsCtrlIn = true; } if (params > 0) { pData->param.createNew(params, false); needsCtrlIn = true; } const uint portNameSize(pData->engine->getMaxPortNameSize()); CarlaString portName; // Audio Ins for (uint32_t j=0; j < aIns; ++j) { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } if (aIns > 1) { portName += "input_"; portName += CarlaString(j+1); } else portName += "input"; portName.truncate(portNameSize); pData->audioIn.ports[j].port = (CarlaEngineAudioPort*)pData->client->addPort(kEnginePortTypeAudio, portName, true, j); pData->audioIn.ports[j].rindex = j; } // Audio Outs for (uint32_t j=0; j < aOuts; ++j) { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } if (aOuts > 1) { portName += "output_"; portName += CarlaString(j+1); } else portName += "output"; portName.truncate(portNameSize); pData->audioOut.ports[j].port = (CarlaEngineAudioPort*)pData->client->addPort(kEnginePortTypeAudio, portName, false, j); pData->audioOut.ports[j].rindex = j; } for (uint32_t j=0; j < params; ++j) { const int32_t ij = static_cast(j); juce::AudioProcessorParameter* const parameter = parameters[ij]; CARLA_SAFE_ASSERT_CONTINUE(parameter != nullptr); pData->param.data[j].type = PARAMETER_INPUT; pData->param.data[j].index = static_cast(j); pData->param.data[j].rindex = static_cast(j); pData->param.data[j].hints |= PARAMETER_IS_ENABLED; pData->param.data[j].hints |= PARAMETER_USES_CUSTOM_TEXT; if (parameter->isAutomatable()) pData->param.data[j].hints |= PARAMETER_IS_AUTOMATABLE; const float min = 0.0f; const float max = 1.0f; float def, step, stepSmall, stepLarge; bool hasDetails = false; if (isVST2) { AEffect* const effect = (AEffect*)fInstance->getPlatformSpecificData(); VstParameterProperties prop; carla_zeroStruct(prop); if (effect != nullptr && effect->dispatcher(effect, effGetParameterProperties, ij, 0, &prop, 0.0f) == 1) { hasDetails = true; /**/ if (prop.flags & kVstParameterIsSwitch) { step = max - min; stepSmall = step; stepLarge = step; pData->param.data[j].hints |= PARAMETER_IS_BOOLEAN; } else if (prop.flags & kVstParameterUsesIntStep) { step = static_cast(prop.stepInteger); stepSmall = static_cast(prop.stepInteger)/10.0f; stepLarge = static_cast(prop.largeStepInteger); } else if (prop.flags & kVstParameterUsesFloatStep) { step = prop.stepFloat; stepSmall = prop.smallStepFloat; stepLarge = prop.largeStepFloat; } else { const float range = max - min; step = range/100.0f; stepSmall = range/1000.0f; stepLarge = range/10.0f; } if ((prop.flags & (kVstParameterIsSwitch|kVstParameterUsesIntStep)) == 0x0) pData->param.data[j].hints |= PARAMETER_CAN_BE_CV_CONTROLLED; if (prop.flags & kVstParameterCanRamp) pData->param.data[j].hints |= PARAMETER_IS_LOGARITHMIC; } } else if (isVST3) { v3_component** const component = (v3_component**)fInstance->getPlatformSpecificData(); v3_edit_controller** controller = nullptr; v3_cpp_obj_query_interface(component, v3_edit_controller_iid, &controller); if (controller != nullptr) { v3_param_info info; if (v3_cpp_obj(controller)->get_parameter_info(controller, static_cast(j), &info) == V3_OK) { hasDetails = true; if (info.step_count == 1) { step = stepSmall = stepLarge = 1; pData->param.data[j].hints |= PARAMETER_IS_BOOLEAN; } else if (info.step_count != 0) { step = 1.0f / static_cast(info.step_count); stepSmall = step/10.0f; stepLarge = std::min(1.0f, step*10.0f); } else { const float range = max - min; step = range/100.0f; stepSmall = range/1000.0f; stepLarge = range/10.0f; } if (info.flags & V3_PARAM_READ_ONLY) pData->param.data[j].type = PARAMETER_OUTPUT; // TODO V3_PARAM_IS_LIST if (info.flags & (V3_PARAM_IS_HIDDEN|V3_PARAM_PROGRAM_CHANGE)) pData->param.data[j].hints &= ~PARAMETER_IS_ENABLED; if ((info.flags & (V3_PARAM_IS_LIST|V3_PARAM_IS_HIDDEN|V3_PARAM_PROGRAM_CHANGE)) == 0x0) if (info.flags & V3_PARAM_CAN_AUTOMATE) pData->param.data[j].hints |= PARAMETER_CAN_BE_CV_CONTROLLED; } v3_cpp_obj_unref(controller); } } if (! hasDetails) { if (parameter->isBoolean()) { step = max - min; stepSmall = step; stepLarge = step; pData->param.data[j].hints |= PARAMETER_IS_BOOLEAN; } else { const float range = max - min; step = range/100.0f; stepSmall = range/1000.0f; stepLarge = range/10.0f; if (! parameter->isMetaParameter()) pData->param.data[j].hints |= PARAMETER_CAN_BE_CV_CONTROLLED; } } def = parameter->getDefaultValue(); if (def < min) def = min; else if (def > max) def = max; pData->param.ranges[j].min = min; pData->param.ranges[j].max = max; pData->param.ranges[j].def = def; pData->param.ranges[j].step = step; pData->param.ranges[j].stepSmall = stepSmall; pData->param.ranges[j].stepLarge = stepLarge; } if (needsCtrlIn) { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } portName += "events-in"; portName.truncate(portNameSize); pData->event.portIn = (CarlaEngineEventPort*)pData->client->addPort(kEnginePortTypeEvent, portName, true, 0); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH pData->event.cvSourcePorts = pData->client->createCVSourcePorts(); #endif } if (needsCtrlOut) { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } portName += "events-out"; portName.truncate(portNameSize); pData->event.portOut = (CarlaEngineEventPort*)pData->client->addPort(kEnginePortTypeEvent, portName, false, 0); } // plugin hints pData->hints = 0x0; pData->hints |= PLUGIN_NEEDS_FIXED_BUFFERS; if (fDesc.isInstrument) pData->hints |= PLUGIN_IS_SYNTH; if (fInstance->hasEditor()) { pData->hints |= PLUGIN_HAS_CUSTOM_UI; pData->hints |= PLUGIN_NEEDS_UI_MAIN_THREAD; } if (aOuts > 0 && (aIns == aOuts || aIns == 1)) pData->hints |= PLUGIN_CAN_DRYWET; if (aOuts > 0) pData->hints |= PLUGIN_CAN_VOLUME; if (aOuts >= 2 && aOuts % 2 == 0) pData->hints |= PLUGIN_CAN_BALANCE; // extra plugin hints pData->extraHints = 0x0; if (mIns > 0) pData->extraHints |= PLUGIN_EXTRA_HINT_HAS_MIDI_IN; if (mOuts > 0) pData->extraHints |= PLUGIN_EXTRA_HINT_HAS_MIDI_OUT; fInstance->setPlayConfigDetails(static_cast(aIns), static_cast(aOuts), pData->engine->getSampleRate(), static_cast(pData->engine->getBufferSize())); bufferSizeChanged(pData->engine->getBufferSize()); reloadPrograms(true); if (pData->active) activate(); carla_debug("CarlaPluginJuce::reload() - end"); } void reloadPrograms(const bool doInit) override { carla_debug("CarlaPluginJuce::reloadPrograms(%s)", bool2str(doInit)); const uint32_t oldCount = pData->prog.count; const int32_t current = pData->prog.current; // Delete old programs pData->prog.clear(); // Query new programs const uint32_t newCount = (fInstance->getNumPrograms() > 0) ? static_cast(fInstance->getNumPrograms()) : 0; if (newCount > 0) { pData->prog.createNew(newCount); // Update names for (uint32_t i=0; i < newCount; ++i) pData->prog.names[i] = carla_strdup(fInstance->getProgramName(static_cast(i)).toRawUTF8()); } if (doInit) { if (newCount > 0) setProgram(0, false, false, false, true); } else { // Check if current program is invalid bool programChanged = false; if (newCount == oldCount+1) { // one program added, probably created by user pData->prog.current = static_cast(oldCount); programChanged = true; } else if (current < 0 && newCount > 0) { // programs exist now, but not before pData->prog.current = 0; programChanged = true; } else if (current >= 0 && newCount == 0) { // programs existed before, but not anymore pData->prog.current = -1; programChanged = true; } else if (current >= static_cast(newCount)) { // current program > count pData->prog.current = 0; programChanged = true; } else { // no change pData->prog.current = current; } if (programChanged) { setProgram(pData->prog.current, true, true, true, false); } else { // Program was changed during update, re-set it if (pData->prog.current >= 0) fInstance->setCurrentProgram(pData->prog.current); } pData->engine->callback(true, true, ENGINE_CALLBACK_RELOAD_PROGRAMS, pData->id, 0, 0, 0, 0.0f, nullptr); } } // ------------------------------------------------------------------- // Plugin processing void activate() noexcept override { CARLA_SAFE_ASSERT_RETURN(fInstance != nullptr,); try { fInstance->prepareToPlay(pData->engine->getSampleRate(), static_cast(pData->engine->getBufferSize())); } catch(...) {} } void deactivate() noexcept override { CARLA_SAFE_ASSERT_RETURN(fInstance != nullptr,); try { fInstance->releaseResources(); } catch(...) {} } void process(const float* const* const audioIn, float** const audioOut, const float* const* const cvIn, float**, const uint32_t frames) override { // -------------------------------------------------------------------------------------------------------- // Check if active if (! pData->active) { // disable any output sound for (uint32_t i=0; i < pData->audioOut.count; ++i) carla_zeroFloats(audioOut[i], frames); return; } // -------------------------------------------------------------------------------------------------------- // Check if needs reset if (pData->needsReset) { fInstance->reset(); pData->needsReset = false; } // -------------------------------------------------------------------------------------------------------- // Event Input fMidiBuffer.clear(); if (pData->event.portIn != nullptr) { // ---------------------------------------------------------------------------------------------------- // MIDI Input (External) if (pData->extNotes.mutex.tryLock()) { for (RtLinkedList::Itenerator it = pData->extNotes.data.begin2(); it.valid(); it.next()) { const ExternalMidiNote& note(it.getValue(kExternalMidiNoteFallback)); CARLA_SAFE_ASSERT_CONTINUE(note.channel >= 0 && note.channel < MAX_MIDI_CHANNELS); uint8_t midiEvent[3]; midiEvent[0] = uint8_t((note.velo > 0 ? MIDI_STATUS_NOTE_ON : MIDI_STATUS_NOTE_OFF) | (note.channel & MIDI_CHANNEL_BIT)); midiEvent[1] = note.note; midiEvent[2] = note.velo; fMidiBuffer.addEvent(midiEvent, 3, 0); } pData->extNotes.data.clear(); pData->extNotes.mutex.unlock(); } // End of MIDI Input (External) // ---------------------------------------------------------------------------------------------------- // Event Input (System) #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH bool allNotesOffSent = false; if (cvIn != nullptr && pData->event.cvSourcePorts != nullptr) pData->event.cvSourcePorts->initPortBuffers(cvIn, frames, false, pData->event.portIn); #endif for (uint32_t i=0, numEvents=pData->event.portIn->getEventCount(); i < numEvents; ++i) { EngineEvent& event(pData->event.portIn->getEvent(i)); if (event.time >= frames) continue; switch (event.type) { case kEngineEventTypeNull: break; case kEngineEventTypeControl: { EngineControlEvent& ctrlEvent(event.ctrl); switch (ctrlEvent.type) { case kEngineControlEventTypeNull: break; case kEngineControlEventTypeParameter: { float value; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // non-midi if (event.channel == kEngineEventNonMidiChannel) { const uint32_t k = ctrlEvent.param; CARLA_SAFE_ASSERT_CONTINUE(k < pData->param.count); ctrlEvent.handled = true; value = pData->param.getFinalUnnormalizedValue(k, ctrlEvent.normalizedValue); setParameterValueRT(k, value, true); continue; } // Control backend stuff if (event.channel == pData->ctrlChannel) { if (MIDI_IS_CONTROL_BREATH_CONTROLLER(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_DRYWET) != 0) { ctrlEvent.handled = true; value = ctrlEvent.normalizedValue; setDryWetRT(value, true); } else if (MIDI_IS_CONTROL_CHANNEL_VOLUME(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_VOLUME) != 0) { ctrlEvent.handled = true; value = ctrlEvent.normalizedValue*127.0f/100.0f; setVolumeRT(value, true); } else if (MIDI_IS_CONTROL_BALANCE(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_BALANCE) != 0) { float left, right; value = ctrlEvent.normalizedValue/0.5f - 1.0f; if (value < 0.0f) { left = -1.0f; right = (value*2.0f)+1.0f; } else if (value > 0.0f) { left = (value*2.0f)-1.0f; right = 1.0f; } else { left = -1.0f; right = 1.0f; } ctrlEvent.handled = true; setBalanceLeftRT(left, true); setBalanceRightRT(right, true); } } #endif // Control plugin parameters uint32_t k; for (k=0; k < pData->param.count; ++k) { if (pData->param.data[k].midiChannel != event.channel) continue; if (pData->param.data[k].mappedControlIndex != ctrlEvent.param) continue; if (pData->param.data[k].type != PARAMETER_INPUT) continue; if ((pData->param.data[k].hints & PARAMETER_IS_AUTOMATABLE) == 0) continue; ctrlEvent.handled = true; value = pData->param.getFinalUnnormalizedValue(k, ctrlEvent.normalizedValue); setParameterValueRT(k, value, true); } if ((pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) != 0 && ctrlEvent.param < MAX_MIDI_VALUE) { uint8_t midiData[3]; midiData[0] = uint8_t(MIDI_STATUS_CONTROL_CHANGE | (event.channel & MIDI_CHANNEL_BIT)); midiData[1] = uint8_t(ctrlEvent.param); midiData[2] = uint8_t(ctrlEvent.normalizedValue*127.0f); fMidiBuffer.addEvent(midiData, 3, static_cast(event.time)); } #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (! ctrlEvent.handled) checkForMidiLearn(event); #endif break; } // case kEngineControlEventTypeParameter case kEngineControlEventTypeMidiBank: if ((pData->options & PLUGIN_OPTION_SEND_PROGRAM_CHANGES) != 0) { uint8_t midiData[3]; midiData[0] = uint8_t(MIDI_STATUS_CONTROL_CHANGE | (event.channel & MIDI_CHANNEL_BIT)); midiData[1] = MIDI_CONTROL_BANK_SELECT; midiData[2] = 0; fMidiBuffer.addEvent(midiData, 3, static_cast(event.time)); midiData[1] = MIDI_CONTROL_BANK_SELECT__LSB; midiData[2] = uint8_t(ctrlEvent.normalizedValue*127.0f); fMidiBuffer.addEvent(midiData, 3, static_cast(event.time)); } break; case kEngineControlEventTypeMidiProgram: if (event.channel == pData->ctrlChannel && (pData->options & PLUGIN_OPTION_MAP_PROGRAM_CHANGES) != 0) { if (ctrlEvent.param < pData->prog.count) { setProgramRT(ctrlEvent.param, true); } } else if ((pData->options & PLUGIN_OPTION_SEND_PROGRAM_CHANGES) != 0) { uint8_t midiData[3]; midiData[0] = uint8_t(MIDI_STATUS_PROGRAM_CHANGE | (event.channel & MIDI_CHANNEL_BIT)); midiData[1] = uint8_t(ctrlEvent.normalizedValue*127.0f); fMidiBuffer.addEvent(midiData, 2, static_cast(event.time)); } break; case kEngineControlEventTypeAllSoundOff: if (pData->options & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) { uint8_t midiData[3]; midiData[0] = uint8_t(MIDI_STATUS_CONTROL_CHANGE | (event.channel & MIDI_CHANNEL_BIT)); midiData[1] = MIDI_CONTROL_ALL_SOUND_OFF; midiData[2] = 0; fMidiBuffer.addEvent(midiData, 3, static_cast(event.time)); } break; case kEngineControlEventTypeAllNotesOff: if (pData->options & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) { #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (event.channel == pData->ctrlChannel && ! allNotesOffSent) { allNotesOffSent = true; postponeRtAllNotesOff(); } #endif uint8_t midiData[3]; midiData[0] = uint8_t(MIDI_STATUS_CONTROL_CHANGE | (event.channel & MIDI_CHANNEL_BIT)); midiData[1] = MIDI_CONTROL_ALL_NOTES_OFF; midiData[2] = 0; fMidiBuffer.addEvent(midiData, 3, static_cast(event.time)); } break; } // switch (ctrlEvent.type) break; } // case kEngineEventTypeControl case kEngineEventTypeMidi: { const EngineMidiEvent& midiEvent(event.midi); const uint8_t* const midiData(midiEvent.size > EngineMidiEvent::kDataSize ? midiEvent.dataExt : midiEvent.data); uint8_t status = uint8_t(MIDI_GET_STATUS_FROM_DATA(midiData)); if ((status == MIDI_STATUS_NOTE_OFF || status == MIDI_STATUS_NOTE_ON) && (pData->options & PLUGIN_OPTION_SKIP_SENDING_NOTES)) continue; if (status == MIDI_STATUS_CHANNEL_PRESSURE && (pData->options & PLUGIN_OPTION_SEND_CHANNEL_PRESSURE) == 0) continue; if (status == MIDI_STATUS_CONTROL_CHANGE && (pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) == 0) continue; if (status == MIDI_STATUS_POLYPHONIC_AFTERTOUCH && (pData->options & PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH) == 0) continue; if (status == MIDI_STATUS_PITCH_WHEEL_CONTROL && (pData->options & PLUGIN_OPTION_SEND_PITCHBEND) == 0) continue; // Fix bad note-off if (status == MIDI_STATUS_NOTE_ON && midiData[2] == 0) status = MIDI_STATUS_NOTE_OFF; // put back channel in data uint8_t midiData2[midiEvent.size]; midiData2[0] = uint8_t(status | (event.channel & MIDI_CHANNEL_BIT)); std::memcpy(midiData2+1, midiData+1, static_cast(midiEvent.size-1)); fMidiBuffer.addEvent(midiData2, midiEvent.size, static_cast(event.time)); if (status == MIDI_STATUS_NOTE_ON) { pData->postponeNoteOnRtEvent(true, event.channel, midiData[1], midiData[2]); } else if (status == MIDI_STATUS_NOTE_OFF) { pData->postponeNoteOffRtEvent(true, event.channel, midiData[1]); } } break; } // switch (event.type) } pData->postRtEvents.trySplice(); } // End of Event Input // -------------------------------------------------------------------------------------------------------- // Set TimeInfo const EngineTimeInfo& timeInfo(pData->engine->getTimeInfo()); fPosInfo.isPlaying = timeInfo.playing; if (timeInfo.bbt.valid) { CARLA_SAFE_ASSERT_INT(timeInfo.bbt.bar > 0, timeInfo.bbt.bar); CARLA_SAFE_ASSERT_INT(timeInfo.bbt.beat > 0, timeInfo.bbt.beat); const double ppqBar = static_cast(timeInfo.bbt.beatsPerBar) * (timeInfo.bbt.bar - 1); const double ppqBeat = static_cast(timeInfo.bbt.beat - 1); const double ppqTick = timeInfo.bbt.tick / timeInfo.bbt.ticksPerBeat; fPosInfo.bpm = timeInfo.bbt.beatsPerMinute; fPosInfo.timeSigNumerator = static_cast(timeInfo.bbt.beatsPerBar); fPosInfo.timeSigDenominator = static_cast(timeInfo.bbt.beatType); fPosInfo.timeInSamples = static_cast(timeInfo.frame); fPosInfo.timeInSeconds = static_cast(fPosInfo.timeInSamples)/pData->engine->getSampleRate(); fPosInfo.ppqPosition = ppqBar + ppqBeat + ppqTick; fPosInfo.ppqPositionOfLastBarStart = ppqBar; } // -------------------------------------------------------------------------------------------------------- // Process processSingle(audioIn, audioOut, frames); // -------------------------------------------------------------------------------------------------------- #ifdef BUILD_BRIDGE_ALTERNATIVE_ARCH return; // unused (void)cvIn; #endif } bool processSingle(const float* const* const inBuffer, float** const outBuffer, const uint32_t frames) { CARLA_SAFE_ASSERT_RETURN(frames > 0, false); if (pData->audioIn.count > 0) { CARLA_SAFE_ASSERT_RETURN(inBuffer != nullptr, false); } if (pData->audioOut.count > 0) { CARLA_SAFE_ASSERT_RETURN(outBuffer != nullptr, false); } // -------------------------------------------------------------------------------------------------------- // Try lock, silence otherwise if (pData->engine->isOffline()) { pData->singleMutex.lock(); } else if (! pData->singleMutex.tryLock()) { for (uint32_t i=0; i < pData->audioOut.count; ++i) carla_zeroFloats(outBuffer[i], frames); return false; } // -------------------------------------------------------------------------------------------------------- // Set audio in buffers for (uint32_t i=0; i < pData->audioIn.count; ++i) fAudioBuffer.copyFrom(static_cast(i), 0, inBuffer[i], static_cast(frames)); // -------------------------------------------------------------------------------------------------------- // Run plugin fInstance->processBlock(fAudioBuffer, fMidiBuffer); // -------------------------------------------------------------------------------------------------------- // Set audio out buffers for (uint32_t i=0; i < pData->audioOut.count; ++i) carla_copyFloats(outBuffer[i], fAudioBuffer.getReadPointer(static_cast(i)), frames); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // -------------------------------------------------------------------------------------------------------- // Post-processing (dry/wet, volume and balance) { const bool doVolume = (pData->hints & PLUGIN_CAN_VOLUME) != 0 && carla_isNotEqual(pData->postProc.volume, 1.0f); const bool doDryWet = (pData->hints & PLUGIN_CAN_DRYWET) != 0 && carla_isNotEqual(pData->postProc.dryWet, 1.0f); const bool doBalance = (pData->hints & PLUGIN_CAN_BALANCE) != 0 && ! (carla_isEqual(pData->postProc.balanceLeft, -1.0f) && carla_isEqual(pData->postProc.balanceRight, 1.0f)); const bool isMono = (pData->audioIn.count == 1); bool isPair; float bufValue, oldBufLeft[doBalance ? frames : 1]; for (uint32_t i=0; i < pData->audioOut.count; ++i) { // Dry/Wet if (doDryWet) { const uint32_t c = isMono ? 0 : i; for (uint32_t k=0; k < frames; ++k) { bufValue = inBuffer[c][k]; outBuffer[i][k] = (outBuffer[i][k] * pData->postProc.dryWet) + (bufValue * (1.0f - pData->postProc.dryWet)); } } // Balance if (doBalance) { isPair = (i % 2 == 0); if (isPair) { CARLA_ASSERT(i+1 < pData->audioOut.count); carla_copyFloats(oldBufLeft, outBuffer[i], frames); } float balRangeL = (pData->postProc.balanceLeft + 1.0f)/2.0f; float balRangeR = (pData->postProc.balanceRight + 1.0f)/2.0f; for (uint32_t k=0; k < frames; ++k) { if (isPair) { // left outBuffer[i][k] = oldBufLeft[k] * (1.0f - balRangeL); outBuffer[i][k] += outBuffer[i+1][k] * (1.0f - balRangeR); } else { // right outBuffer[i][k] = outBuffer[i][k] * balRangeR; outBuffer[i][k] += oldBufLeft[k] * balRangeL; } } } // Volume if (doVolume) { for (uint32_t k=0; k < frames; ++k) outBuffer[i][k] *= pData->postProc.volume; } } } // End of Post-processing #endif // -------------------------------------------------------------------------------------------------------- // Midi out if (! fMidiBuffer.isEmpty()) { if (pData->event.portOut != nullptr) { for (juce::MidiBufferIterator it = fMidiBuffer.cbegin(), end = fMidiBuffer.cend(); it != end; ++it) { const juce::MidiMessageMetadata metadata(*it); CARLA_SAFE_ASSERT_BREAK(metadata.samplePosition >= 0); CARLA_SAFE_ASSERT_BREAK(metadata.samplePosition < static_cast(frames)); CARLA_SAFE_ASSERT_BREAK(metadata.numBytes > 0); CARLA_SAFE_ASSERT_CONTINUE(metadata.numBytes <= 0xff); if (! pData->event.portOut->writeMidiEvent(static_cast(metadata.samplePosition), static_cast(metadata.numBytes), metadata.data)) break; } } fMidiBuffer.clear(); } // -------------------------------------------------------------------------------------------------------- pData->singleMutex.unlock(); return true; } void bufferSizeChanged(const uint32_t newBufferSize) override { CARLA_ASSERT_INT(newBufferSize > 0, newBufferSize); carla_debug("CarlaPluginJuce::bufferSizeChanged(%i)", newBufferSize); fAudioBuffer.setSize(static_cast(std::max(pData->audioIn.count, pData->audioOut.count)), static_cast(newBufferSize)); if (pData->active) { deactivate(); activate(); } } void sampleRateChanged(const double newSampleRate) override { CARLA_ASSERT_INT(newSampleRate > 0.0, newSampleRate); carla_debug("CarlaPluginJuce::sampleRateChanged(%g)", newSampleRate); if (pData->active) { deactivate(); activate(); } } // ------------------------------------------------------------------- // Plugin buffers // nothing // ------------------------------------------------------------------- // Post-poned UI Stuff // nothing // ------------------------------------------------------------------- void* getNativeHandle() const noexcept override { return (fInstance != nullptr) ? fInstance->getPlatformSpecificData() : nullptr; } // ------------------------------------------------------------------- protected: void audioProcessorParameterChanged(juce::AudioProcessor*, int index, float value) override { CARLA_SAFE_ASSERT_RETURN(index >= 0,); const uint32_t uindex(static_cast(index)); const float fixedValue(pData->param.getFixedValue(uindex, value)); CarlaPlugin::setParameterValue(static_cast(index), fixedValue, false, true, true); } void audioProcessorChanged(juce::AudioProcessor*) override { pData->engine->callback(true, true, ENGINE_CALLBACK_UPDATE, pData->id, 0, 0, 0, 0.0f, nullptr); } void audioProcessorParameterChangeGestureBegin(juce::AudioProcessor*, int index) override { CARLA_SAFE_ASSERT_RETURN(index >= 0,); pData->engine->touchPluginParameter(pData->id, static_cast(index), true); } void audioProcessorParameterChangeGestureEnd(juce::AudioProcessor*, int index) override { CARLA_SAFE_ASSERT_RETURN(index >= 0,); pData->engine->touchPluginParameter(pData->id, static_cast(index), false); } bool getCurrentPosition(CurrentPositionInfo& result) override { carla_copyStruct(result, fPosInfo); return true; } // ------------------------------------------------------------------- public: bool init(const CarlaPluginPtr plugin, const char* const filename, const char* const name, const char* const label, const int64_t uniqueId, const uint options, const char* const format) { CARLA_SAFE_ASSERT_RETURN(pData->engine != nullptr, false); // --------------------------------------------------------------- // first checks if (pData->client != nullptr) { pData->engine->setLastError("Plugin client is already registered"); return false; } if (format == nullptr || format[0] == '\0') { pData->engine->setLastError("null format"); return false; } // AU requires label if (std::strcmp(format, "AU") == 0) { if (label == nullptr || label[0] == '\0') { pData->engine->setLastError("null label"); return false; } } juce::String fileOrIdentifier; if (std::strcmp(format, "AU") == 0) { fileOrIdentifier = label; } else { // VST2 and VST3 require filename if (filename == nullptr || filename[0] == '\0') { pData->engine->setLastError("null filename"); return false; } juce::String jfilename(filename); #ifdef CARLA_OS_WIN // Fix for wine usage if (juce::File("Z:\\usr\\").isDirectory() && filename[0] == '/') { jfilename.replace("/", "\\"); jfilename = "Z:" + jfilename; } #endif fileOrIdentifier = jfilename; if (label != nullptr && label[0] != '\0') fDesc.name = label; } /**/ if (std::strcmp(format, "AU") == 0) { #if JUCE_PLUGINHOST_AU fFormatManager.addFormat(new juce::AudioUnitPluginFormat()); #endif } else if (std::strcmp(format, "VST2") == 0) { #if JUCE_PLUGINHOST_VST fFormatManager.addFormat(new juce::VSTPluginFormat()); #endif } else if (std::strcmp(format, "VST3") == 0) { #if JUCE_PLUGINHOST_VST3 fFormatManager.addFormat(new juce::VST3PluginFormat()); #endif } else { fFormatManager.addDefaultFormats(); } { juce::OwnedArray pluginDescriptions; juce::KnownPluginList plist; { const ScopedAbortCatcher sac; for (int i = 0; i < fFormatManager.getNumFormats(); ++i) { juce::AudioPluginFormat* const apformat = fFormatManager.getFormat(i); CARLA_SAFE_ASSERT_CONTINUE(apformat != nullptr); carla_debug("Trying to load '%s' plugin with format '%s'", fileOrIdentifier.toRawUTF8(), apformat->getName().toRawUTF8()); try { plist.scanAndAddFile(fileOrIdentifier, true, pluginDescriptions, *apformat); } CARLA_SAFE_EXCEPTION_CONTINUE("scanAndAddFile") if (sac.wasTriggered()) { carla_stderr("WARNING: Caught exception while scanning file, will not load this plugin"); pluginDescriptions.clearQuick(false); break; } } } if (pluginDescriptions.size() == 0) { pData->engine->setLastError("Failed to get plugin description"); return false; } fDesc = *pluginDescriptions[0]; } if (uniqueId != 0) fDesc.uid = static_cast(uniqueId); juce::String error; { const ScopedAbortCatcher sac; try { fInstance = fFormatManager.createPluginInstance(fDesc, pData->engine->getSampleRate(), static_cast(pData->engine->getBufferSize()), error); } CARLA_SAFE_EXCEPTION("createPluginInstance") if (sac.wasTriggered()) { fInstance = nullptr; carla_stderr("WARNING: Caught exception while instantiating, will not load this plugin"); } } if (fInstance == nullptr) { pData->engine->setLastError(error.toRawUTF8()); return false; } fInstance->fillInPluginDescription(fDesc); fInstance->setPlayHead(this); fInstance->addListener(this); fFormatName = format; // --------------------------------------------------------------- // get info if (name != nullptr && name[0] != '\0') pData->name = pData->engine->getUniquePluginName(name); else pData->name = pData->engine->getUniquePluginName(fInstance->getName().toRawUTF8()); if (filename != nullptr && filename[0] != '\0') pData->filename = carla_strdup(filename); // --------------------------------------------------------------- // register client pData->client = pData->engine->addClient(plugin); if (pData->client == nullptr || ! pData->client->isOk()) { pData->engine->setLastError("Failed to register plugin client"); return false; } // --------------------------------------------------------------- // set options pData->options = 0x0; pData->options |= PLUGIN_OPTION_FIXED_BUFFERS; pData->options |= PLUGIN_OPTION_USE_CHUNKS; if (fInstance->acceptsMidi()) { if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_CONTROL_CHANGES)) pData->options |= PLUGIN_OPTION_SEND_CONTROL_CHANGES; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_CHANNEL_PRESSURE)) pData->options |= PLUGIN_OPTION_SEND_CHANNEL_PRESSURE; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH)) pData->options |= PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_PITCHBEND)) pData->options |= PLUGIN_OPTION_SEND_PITCHBEND; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_ALL_SOUND_OFF)) pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_PROGRAM_CHANGES)) pData->options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; if (isPluginOptionInverseEnabled(options, PLUGIN_OPTION_SKIP_SENDING_NOTES)) pData->options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; } if (fInstance->getNumPrograms() > 1 && (pData->options & PLUGIN_OPTION_SEND_PROGRAM_CHANGES) == 0) if (isPluginOptionEnabled(options, PLUGIN_OPTION_MAP_PROGRAM_CHANGES)) pData->options |= PLUGIN_OPTION_MAP_PROGRAM_CHANGES; return true; } private: juce::PluginDescription fDesc; juce::AudioPluginFormatManager fFormatManager; std::unique_ptr fInstance; juce::AudioSampleBuffer fAudioBuffer; juce::MidiBuffer fMidiBuffer; CurrentPositionInfo fPosInfo; juce::MemoryBlock fChunk; juce::String fFormatName; CarlaScopedPointer fWindow; bool isJuceSaveFormat(const void* const data, const std::size_t dataSize) { if (fFormatName != "VST2") return true; if (dataSize < 160) return false; const int32_t* const set = (const int32_t*)data; // chunkMagic if (! compareMagic(set[0], "CcnK")) return false; // version if (fxbSwap(set[3]) > 1) return false; // fxMagic, data contents depend on this value if (compareMagic(set[2], "FBCh") || compareMagic(set[2], "FJuc")) { const int32_t chunkSize = fxbSwap(set[39]); return static_cast(chunkSize + 160) == dataSize; } if (compareMagic(set[2], "FxBk")) { const int32_t numPrograms = fxbSwap(set[6]); return numPrograms >= 1; } return false; } static bool compareMagic(int32_t magic, const char* name) noexcept { return magic == (int32_t)juce::ByteOrder::littleEndianInt (name) || magic == (int32_t)juce::ByteOrder::bigEndianInt (name); } static int32_t fxbSwap(const int32_t x) noexcept { return (int32_t)juce::ByteOrder::swapIfLittleEndian ((uint32_t) x); } CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaPluginJuce) }; CARLA_BACKEND_END_NAMESPACE #endif // USING_JUCE // ------------------------------------------------------------------------------------------------------------------- CARLA_BACKEND_START_NAMESPACE CarlaPluginPtr CarlaPlugin::newJuce(const Initializer& init, const char* const format) { carla_debug("CarlaPlugin::newJuce({%p, \"%s\", \"%s\", \"%s\", " P_INT64 "}, %s)", init.engine, init.filename, init.name, init.label, init.uniqueId, format); #ifdef USING_JUCE std::shared_ptr plugin(new CarlaPluginJuce(init.engine, init.id)); if (! plugin->init(plugin, init.filename, init.name, init.label, init.uniqueId, init.options, format)) return nullptr; return plugin; #else init.engine->setLastError("Juce-based plugin not available"); return nullptr; // unused (void)format; #endif } CARLA_BACKEND_END_NAMESPACE // ------------------------------------------------------------------------------------------------------------------- Carla-2.4.2/source/backend/plugin/CarlaPluginLADSPADSSI.cpp000066400000000000000000003506501420416754300232220ustar00rootroot00000000000000/* * Carla Plugin, LADSPA/DSSI implementation * Copyright (C) 2011-2020 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "CarlaPluginInternal.hpp" #include "CarlaEngineUtils.hpp" #include "CarlaBackendUtils.hpp" #include "CarlaLadspaUtils.hpp" #include "CarlaDssiUtils.hpp" #include "CarlaMathUtils.hpp" #if defined(HAVE_LIBLO) && !defined(BUILD_BRIDGE) # include "CarlaOscUtils.hpp" # include "CarlaScopeUtils.hpp" # include "CarlaThread.hpp" # include "water/threads/ChildProcess.h" using water::ChildProcess; #endif using water::String; using water::StringArray; #define CARLA_PLUGIN_DSSI_OSC_CHECK_OSC_TYPES(/* argc, types, */ argcToCompare, typesToCompare) \ /* check argument count */ \ if (argc != argcToCompare) \ { \ carla_stderr("CarlaPluginLADSPADSSI::%s() - argument count mismatch: %i != %i", \ __FUNCTION__, argc, argcToCompare); \ return; \ } \ if (argc > 0) \ { \ /* check for nullness */ \ if (types == nullptr || typesToCompare == nullptr) \ { \ carla_stderr("CarlaPluginLADSPADSSI::%s() - argument types are null", \ __FUNCTION__); \ return; \ } \ /* check argument types */ \ if (std::strcmp(types, typesToCompare) != 0) \ { \ carla_stderr("CarlaPluginLADSPADSSI::%s() - argument types mismatch: '%s' != '%s'", \ __FUNCTION__, types, typesToCompare); \ return; \ } \ } CARLA_BACKEND_START_NAMESPACE #if defined(HAVE_LIBLO) && !defined(BUILD_BRIDGE) // ------------------------------------------------------------------- // Fallback data static const CustomData kCustomDataFallback = { nullptr, nullptr, nullptr }; // ------------------------------------------------------------------- class CarlaThreadDSSIUI : public CarlaThread { public: CarlaThreadDSSIUI(CarlaEngine* const engine, CarlaPlugin* const plugin, const CarlaOscData& oscData) noexcept : CarlaThread("CarlaThreadDSSIUI"), kEngine(engine), kPlugin(plugin), fBinary(), fLabel(), fUiTitle(), fOscData(oscData), fProcess() {} void setData(const char* const binary, const char* const label, const char* const uiTitle) noexcept { CARLA_SAFE_ASSERT_RETURN(binary != nullptr && binary[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(label != nullptr,); CARLA_SAFE_ASSERT_RETURN(uiTitle != nullptr && uiTitle[0] != '\0',); CARLA_SAFE_ASSERT(! isThreadRunning()); fBinary = binary; fLabel = label; fUiTitle = uiTitle; if (fLabel.isEmpty()) fLabel = "\"\""; } void setUITitle(const char* const uiTitle) noexcept { CARLA_SAFE_ASSERT_RETURN(uiTitle != nullptr && uiTitle[0] != '\0',); fUiTitle = uiTitle; } uintptr_t getProcessId() const noexcept { CARLA_SAFE_ASSERT_RETURN(fProcess != nullptr, 0); return (uintptr_t)fProcess->getPID(); } void run() { carla_stdout("LADSPA/DSSI UI thread started"); if (fProcess == nullptr) { fProcess = new ChildProcess(); } else if (fProcess->isRunning()) { carla_stderr("CarlaThreadDSSI::run() - already running, giving up..."); fProcess->kill(); fProcess = nullptr; kEngine->callback(true, true, ENGINE_CALLBACK_UI_STATE_CHANGED, kPlugin->getId(), 0, 0, 0, 0.0f, nullptr); return; } String name(kPlugin->getName()); String filename(kPlugin->getFilename()); if (name.isEmpty()) name = "(none)"; if (filename.isEmpty()) filename = "\"\""; StringArray arguments; // binary arguments.add(fBinary.buffer()); // osc-url arguments.add(String(kEngine->getOscServerPathUDP()) + String("/") + String(kPlugin->getId())); // filename arguments.add(filename); // label arguments.add(fLabel.buffer()); // ui-title arguments.add(fUiTitle.buffer()); bool started; { #ifdef CARLA_OS_LINUX /* * If the frontend uses winId parent, set LD_PRELOAD to auto-map the DSSI UI. * If not, unset LD_PRELOAD. */ const uintptr_t winId(kEngine->getOptions().frontendWinId); // for CARLA_ENGINE_OPTION_FRONTEND_WIN_ID char winIdStr[STR_MAX+1]; winIdStr[STR_MAX] = '\0'; // for LD_PRELOAD CarlaString ldPreloadValue; if (winId != 0) { std::snprintf(winIdStr, STR_MAX, P_UINTPTR, winId); ldPreloadValue = (CarlaString(kEngine->getOptions().binaryDir) + "/libcarla_interposer-x11.so"); } else { winIdStr[0] = '\0'; } const ScopedEngineEnvironmentLocker _seel(kEngine); const CarlaScopedEnvVar _sev1("CARLA_ENGINE_OPTION_FRONTEND_WIN_ID", winIdStr[0] != '\0' ? winIdStr : nullptr); const CarlaScopedEnvVar _sev2("LD_PRELOAD", ldPreloadValue.isNotEmpty() ? ldPreloadValue.buffer() : nullptr); #endif // CARLA_OS_LINUX // start the DSSI UI application carla_stdout("starting DSSI UI..."); started = fProcess->start(arguments); } if (! started) { carla_stdout("failed!"); fProcess = nullptr; return; } if (waitForOscGuiShow()) { for (; fProcess->isRunning() && ! shouldThreadExit();) carla_sleep(1); // we only get here if UI was closed or thread asked to exit if (fProcess->isRunning() && shouldThreadExit()) { fProcess->waitForProcessToFinish(static_cast(kEngine->getOptions().uiBridgesTimeout)); if (fProcess->isRunning()) { carla_stdout("CarlaThreadDSSIUI::run() - UI refused to close, force kill now"); fProcess->kill(); } else { carla_stdout("CarlaThreadDSSIUI::run() - UI auto-closed successfully"); } } else if (fProcess->getExitCodeAndClearPID() != 0) carla_stderr("CarlaThreadDSSIUI::run() - UI crashed while running"); else carla_stdout("CarlaThreadDSSIUI::run() - UI closed cleanly"); } else { fProcess->kill(); carla_stdout("CarlaThreadDSSIUI::run() - GUI timeout"); } fProcess = nullptr; kEngine->callback(true, true, ENGINE_CALLBACK_UI_STATE_CHANGED, kPlugin->getId(), 0, 0, 0, 0.0f, nullptr); carla_stdout("LADSPA/DSSI UI thread finished"); } private: CarlaEngine* const kEngine; CarlaPlugin* const kPlugin; CarlaString fBinary; CarlaString fLabel; CarlaString fUiTitle; const CarlaOscData& fOscData; CarlaScopedPointer fProcess; bool waitForOscGuiShow() { carla_stdout("CarlaThreadDSSIUI::waitForOscGuiShow()"); const uint uiBridgesTimeout = kEngine->getOptions().uiBridgesTimeout; // wait for UI 'update' call for (uint i=0; i < uiBridgesTimeout/100; ++i) { if (fOscData.target != nullptr) { carla_stdout("CarlaThreadDSSIUI::waitForOscGuiShow() - got response, asking UI to show itself now"); osc_send_show(fOscData); return true; } if (fProcess != nullptr && fProcess->isRunning() && ! shouldThreadExit()) carla_msleep(100); else return false; } carla_stdout("CarlaThreadDSSIUI::waitForOscGuiShow() - Timeout while waiting for UI to respond" "(waited %u msecs)", uiBridgesTimeout); return false; } CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaThreadDSSIUI) }; #endif // ----------------------------------------------------- class CarlaPluginLADSPADSSI : public CarlaPlugin { public: CarlaPluginLADSPADSSI(CarlaEngine* const engine, const uint id) noexcept : CarlaPlugin(engine, id), fHandles(), fDescriptor(nullptr), fDssiDescriptor(nullptr), fRdfDescriptor(nullptr), fAudioInBuffers(nullptr), fAudioOutBuffers(nullptr), fExtraStereoBuffer(), fParamBuffers(nullptr), fLatencyIndex(-1), fForcedStereoIn(false), fForcedStereoOut(false), fNeedsFixedBuffers(false), fUsesCustomData(false) #if defined(HAVE_LIBLO) && !defined(BUILD_BRIDGE) , fOscData(), fThreadUI(engine, this, fOscData), fUiFilename(nullptr) #endif { carla_debug("CarlaPluginLADSPADSSI::CarlaPluginLADSPADSSI(%p, %i)", engine, id); carla_zeroPointers(fExtraStereoBuffer, 2); } ~CarlaPluginLADSPADSSI() noexcept override { carla_debug("CarlaPluginLADSPADSSI::~CarlaPluginLADSPADSSI()"); #if defined(HAVE_LIBLO) && !defined(BUILD_BRIDGE) // close UI if (fUiFilename != nullptr) { showCustomUI(false); delete[] fUiFilename; fUiFilename = nullptr; } #endif pData->singleMutex.lock(); pData->masterMutex.lock(); if (pData->client != nullptr && pData->client->isActive()) pData->client->deactivate(true); if (pData->active) { deactivate(); pData->active = false; } if (fDescriptor != nullptr) { if (fDescriptor->cleanup != nullptr) { for (LinkedList::Itenerator it = fHandles.begin2(); it.valid(); it.next()) { LADSPA_Handle const handle(it.getValue(nullptr)); CARLA_SAFE_ASSERT_CONTINUE(handle != nullptr); try { fDescriptor->cleanup(handle); } CARLA_SAFE_EXCEPTION("LADSPA/DSSI cleanup"); } } fHandles.clear(); fDescriptor = nullptr; fDssiDescriptor = nullptr; } if (fRdfDescriptor != nullptr) { delete fRdfDescriptor; fRdfDescriptor = nullptr; } clearBuffers(); } // ------------------------------------------------------------------- // Information (base) PluginType getType() const noexcept override { return fDssiDescriptor != nullptr ? PLUGIN_DSSI : PLUGIN_LADSPA; } PluginCategory getCategory() const noexcept override { if (fRdfDescriptor != nullptr) { const LADSPA_RDF_PluginType category = fRdfDescriptor->Type; // Specific Types if (category & (LADSPA_RDF_PLUGIN_DELAY|LADSPA_RDF_PLUGIN_REVERB)) return PLUGIN_CATEGORY_DELAY; if (category & (LADSPA_RDF_PLUGIN_PHASER|LADSPA_RDF_PLUGIN_FLANGER|LADSPA_RDF_PLUGIN_CHORUS)) return PLUGIN_CATEGORY_MODULATOR; if (category & (LADSPA_RDF_PLUGIN_AMPLIFIER)) return PLUGIN_CATEGORY_DYNAMICS; if (category & (LADSPA_RDF_PLUGIN_UTILITY|LADSPA_RDF_PLUGIN_SPECTRAL|LADSPA_RDF_PLUGIN_FREQUENCY_METER)) return PLUGIN_CATEGORY_UTILITY; // Pre-set LADSPA Types if (LADSPA_RDF_IS_PLUGIN_DYNAMICS(category)) return PLUGIN_CATEGORY_DYNAMICS; if (LADSPA_RDF_IS_PLUGIN_AMPLITUDE(category)) return PLUGIN_CATEGORY_MODULATOR; if (LADSPA_RDF_IS_PLUGIN_EQ(category)) return PLUGIN_CATEGORY_EQ; if (LADSPA_RDF_IS_PLUGIN_FILTER(category)) return PLUGIN_CATEGORY_FILTER; if (LADSPA_RDF_IS_PLUGIN_FREQUENCY(category)) return PLUGIN_CATEGORY_UTILITY; if (LADSPA_RDF_IS_PLUGIN_SIMULATOR(category)) return PLUGIN_CATEGORY_OTHER; if (LADSPA_RDF_IS_PLUGIN_TIME(category)) return PLUGIN_CATEGORY_DELAY; if (LADSPA_RDF_IS_PLUGIN_GENERATOR(category)) return PLUGIN_CATEGORY_SYNTH; } if (fDssiDescriptor != nullptr && fDssiDescriptor->run_synth != nullptr) if (pData->audioIn.count == 0 && pData->audioOut.count > 0) return PLUGIN_CATEGORY_SYNTH; return CarlaPlugin::getCategory(); } int64_t getUniqueId() const noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, 0); return static_cast(fDescriptor->UniqueID); } uint32_t getLatencyInFrames() const noexcept override { if (fLatencyIndex < 0 || fParamBuffers == nullptr) return 0; const float latency(fParamBuffers[fLatencyIndex]); CARLA_SAFE_ASSERT_RETURN(latency >= 0.0f, 0); return static_cast(latency); } // ------------------------------------------------------------------- // Information (count) uint32_t getParameterScalePointCount(const uint32_t parameterId) const noexcept override { CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, 0); if (fRdfDescriptor == nullptr) return 0; const int32_t rindex(pData->param.data[parameterId].rindex); CARLA_SAFE_ASSERT_RETURN(rindex >= 0, 0); if (rindex >= static_cast(fRdfDescriptor->PortCount)) return 0; const LADSPA_RDF_Port& port(fRdfDescriptor->Ports[rindex]); return static_cast(port.ScalePointCount); } // ------------------------------------------------------------------- // Information (current data) std::size_t getChunkData(void** const dataPtr) noexcept override { CARLA_SAFE_ASSERT_RETURN(fUsesCustomData, 0); CARLA_SAFE_ASSERT_RETURN(pData->options & PLUGIN_OPTION_USE_CHUNKS, 0); CARLA_SAFE_ASSERT_RETURN(fDssiDescriptor != nullptr, 0); CARLA_SAFE_ASSERT_RETURN(fDssiDescriptor->get_custom_data != nullptr, 0); CARLA_SAFE_ASSERT_RETURN(fHandles.count() > 0, 0); CARLA_SAFE_ASSERT_RETURN(dataPtr != nullptr, 0); *dataPtr = nullptr; int ret = 0; ulong dataSize = 0; try { ret = fDssiDescriptor->get_custom_data(fHandles.getFirst(nullptr), dataPtr, &dataSize); } CARLA_SAFE_EXCEPTION_RETURN("CarlaPluginLADSPADSSI::getChunkData", 0); return (ret != 0) ? dataSize : 0; } // ------------------------------------------------------------------- // Information (per-plugin data) uint getOptionsAvailable() const noexcept override { uint options = 0x0; // can't disable fixed buffers if using latency if (fLatencyIndex == -1 && ! fNeedsFixedBuffers) options |= PLUGIN_OPTION_FIXED_BUFFERS; // can't disable forced stereo if enabled in the engine if (pData->engine->getOptions().forceStereo) pass(); // if inputs or outputs are just 1, then yes we can force stereo else if (pData->audioIn.count == 1 || pData->audioOut.count == 1 || fForcedStereoIn || fForcedStereoOut) options |= PLUGIN_OPTION_FORCE_STEREO; if (fDssiDescriptor != nullptr) { if (fDssiDescriptor->get_program != nullptr && fDssiDescriptor->select_program != nullptr) options |= PLUGIN_OPTION_MAP_PROGRAM_CHANGES; if (fUsesCustomData) options |= PLUGIN_OPTION_USE_CHUNKS; if (fDssiDescriptor->run_synth != nullptr) { options |= PLUGIN_OPTION_SEND_CONTROL_CHANGES; options |= PLUGIN_OPTION_SEND_CHANNEL_PRESSURE; options |= PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH; options |= PLUGIN_OPTION_SEND_PITCHBEND; options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; } } return options; } float getParameterValue(const uint32_t parameterId) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fParamBuffers != nullptr, 0.0f); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, 0.0f); // bad plugins might have set output values out of bounds if (pData->param.data[parameterId].type == PARAMETER_OUTPUT) return pData->param.ranges[parameterId].getFixedValue(fParamBuffers[parameterId]); // not output, should be fine return fParamBuffers[parameterId]; } float getParameterScalePointValue(const uint32_t parameterId, const uint32_t scalePointId) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr, 0.0f); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, 0.0f); const int32_t rindex(pData->param.data[parameterId].rindex); CARLA_SAFE_ASSERT_RETURN(rindex >= 0, 0.0f); CARLA_SAFE_ASSERT_RETURN(rindex < static_cast(fRdfDescriptor->PortCount), 0.0f); const LADSPA_RDF_Port& port(fRdfDescriptor->Ports[rindex]); CARLA_SAFE_ASSERT_RETURN(scalePointId < port.ScalePointCount, 0.0f); const LADSPA_RDF_ScalePoint& scalePoint(port.ScalePoints[scalePointId]); return pData->param.ranges[parameterId].getFixedValue(scalePoint.Value); } bool getLabel(char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, false); CARLA_SAFE_ASSERT_RETURN(fDescriptor->Label != nullptr, false); std::strncpy(strBuf, fDescriptor->Label, STR_MAX); return true; } bool getMaker(char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, false); CARLA_SAFE_ASSERT_RETURN(fDescriptor->Maker != nullptr, false); if (fRdfDescriptor != nullptr && fRdfDescriptor->Creator != nullptr) std::strncpy(strBuf, fRdfDescriptor->Creator, STR_MAX); else std::strncpy(strBuf, fDescriptor->Maker, STR_MAX); return true; } bool getCopyright(char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, false); CARLA_SAFE_ASSERT_RETURN(fDescriptor->Copyright != nullptr, false); std::strncpy(strBuf, fDescriptor->Copyright, STR_MAX); return true; } bool getRealName(char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, false); CARLA_SAFE_ASSERT_RETURN(fDescriptor->Name != nullptr, false); if (fRdfDescriptor != nullptr && fRdfDescriptor->Title != nullptr) std::strncpy(strBuf, fRdfDescriptor->Title, STR_MAX); else std::strncpy(strBuf, fDescriptor->Name, STR_MAX); return true; } bool getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, false); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false); const int32_t rindex(pData->param.data[parameterId].rindex); CARLA_SAFE_ASSERT_RETURN(rindex >= 0, false); CARLA_SAFE_ASSERT_RETURN(rindex < static_cast(fDescriptor->PortCount), false); CARLA_SAFE_ASSERT_RETURN(fDescriptor->PortNames[rindex] != nullptr, false); if (! getSeparatedParameterNameOrUnit(fDescriptor->PortNames[rindex], strBuf, true)) std::strncpy(strBuf, fDescriptor->PortNames[rindex], STR_MAX); return true; } bool getParameterUnit(const uint32_t parameterId, char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false); const int32_t rindex(pData->param.data[parameterId].rindex); CARLA_SAFE_ASSERT_RETURN(rindex >= 0, false); if (fRdfDescriptor != nullptr && rindex < static_cast(fRdfDescriptor->PortCount)) { const LADSPA_RDF_Port& port(fRdfDescriptor->Ports[rindex]); if (LADSPA_RDF_PORT_HAS_UNIT(port.Hints)) { switch (port.Unit) { case LADSPA_RDF_UNIT_DB: std::strncpy(strBuf, "dB", STR_MAX); return true; case LADSPA_RDF_UNIT_COEF: std::strncpy(strBuf, "(coef)", STR_MAX); return true; case LADSPA_RDF_UNIT_HZ: std::strncpy(strBuf, "Hz", STR_MAX); return true; case LADSPA_RDF_UNIT_S: std::strncpy(strBuf, "s", STR_MAX); return true; case LADSPA_RDF_UNIT_MS: std::strncpy(strBuf, "ms", STR_MAX); return true; case LADSPA_RDF_UNIT_MIN: std::strncpy(strBuf, "min", STR_MAX); return true; } } } CARLA_SAFE_ASSERT_RETURN(rindex < static_cast(fDescriptor->PortCount), false); CARLA_SAFE_ASSERT_RETURN(fDescriptor->PortNames[rindex] != nullptr, false); return getSeparatedParameterNameOrUnit(fDescriptor->PortNames[rindex], strBuf, false); } bool getParameterSymbol(const uint32_t parameterId, char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false); if (fRdfDescriptor == nullptr) return false; const int32_t rindex(pData->param.data[parameterId].rindex); CARLA_SAFE_ASSERT_RETURN(rindex >= 0, false); if (rindex >= static_cast(fRdfDescriptor->PortCount)) return false; const LADSPA_RDF_Port& port(fRdfDescriptor->Ports[rindex]); if (! LADSPA_RDF_PORT_HAS_LABEL(port.Hints)) return false; CARLA_SAFE_ASSERT_RETURN(port.Label != nullptr, false); std::strncpy(strBuf, port.Label, STR_MAX); return true; } bool getParameterScalePointLabel(const uint32_t parameterId, const uint32_t scalePointId, char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr, false); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false); const int32_t rindex(pData->param.data[parameterId].rindex); CARLA_SAFE_ASSERT_RETURN(rindex >= 0, false); CARLA_SAFE_ASSERT_RETURN(rindex < static_cast(fRdfDescriptor->PortCount), false); const LADSPA_RDF_Port& port(fRdfDescriptor->Ports[rindex]); CARLA_SAFE_ASSERT_RETURN(scalePointId < port.ScalePointCount, false); const LADSPA_RDF_ScalePoint& scalePoint(port.ScalePoints[scalePointId]); CARLA_SAFE_ASSERT_RETURN(scalePoint.Label != nullptr, false); std::strncpy(strBuf, scalePoint.Label, STR_MAX); return true; } // ------------------------------------------------------------------- // Set data (state) // nothing // ------------------------------------------------------------------- // Set data (internal stuff) void setId(const uint newId) noexcept override { CarlaPlugin::setId(newId); // UI osc-url uses Id, so we need to close it when it changes // FIXME - must be RT safe showCustomUI(false); } // ------------------------------------------------------------------- // Set data (plugin-specific stuff) void setParameterValue(const uint32_t parameterId, const float value, const bool sendGui, const bool sendOsc, const bool sendCallback) noexcept override { CARLA_SAFE_ASSERT_RETURN(fParamBuffers != nullptr,); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,); const float fixedValue(pData->param.getFixedValue(parameterId, value)); fParamBuffers[parameterId] = fixedValue; CarlaPlugin::setParameterValue(parameterId, fixedValue, sendGui, sendOsc, sendCallback); } void setParameterValueRT(const uint32_t parameterId, const float value, const bool sendCallbackLater) noexcept override { CARLA_SAFE_ASSERT_RETURN(fParamBuffers != nullptr,); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,); const float fixedValue(pData->param.getFixedValue(parameterId, value)); fParamBuffers[parameterId] = fixedValue; CarlaPlugin::setParameterValueRT(parameterId, fixedValue, sendCallbackLater); } void setCustomData(const char* const type, const char* const key, const char* const value, const bool sendGui) override { CARLA_SAFE_ASSERT_RETURN(fDssiDescriptor != nullptr,); CARLA_SAFE_ASSERT_RETURN(type != nullptr && type[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(key != nullptr && key[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(value != nullptr,); carla_debug("CarlaPluginLADSPADSSI::setCustomData(%s, %s, %s, %s)", type, key, value, bool2str(sendGui)); if (std::strcmp(type, CUSTOM_DATA_TYPE_PROPERTY) == 0) return CarlaPlugin::setCustomData(type, key, value, sendGui); if (std::strcmp(type, CUSTOM_DATA_TYPE_STRING) != 0) return carla_stderr2("CarlaPluginLADSPADSSI::setCustomData(\"%s\", \"%s\", \"%s\", %s) - type is not string", type, key, value, bool2str(sendGui)); if (fDssiDescriptor->configure != nullptr && fHandles.count() > 0) { for (LinkedList::Itenerator it = fHandles.begin2(); it.valid(); it.next()) { LADSPA_Handle const handle(it.getValue(nullptr)); CARLA_SAFE_ASSERT_CONTINUE(handle != nullptr); try { fDssiDescriptor->configure(handle, key, value); } CARLA_SAFE_EXCEPTION("LADSPA/DSSI setCustomData"); } } #if defined(HAVE_LIBLO) && !defined(BUILD_BRIDGE) if (sendGui && fOscData.target != nullptr) osc_send_configure(fOscData, key, value); #endif if (std::strcmp(key, "reloadprograms") == 0 || std::strcmp(key, "load") == 0 || std::strncmp(key, "patches", 7) == 0) { const ScopedSingleProcessLocker spl(this, true); reloadPrograms(false); } CarlaPlugin::setCustomData(type, key, value, sendGui); } void setChunkData(const void* const data, const std::size_t dataSize) override { CARLA_SAFE_ASSERT_RETURN(fUsesCustomData,); CARLA_SAFE_ASSERT_RETURN(pData->options & PLUGIN_OPTION_USE_CHUNKS,); CARLA_SAFE_ASSERT_RETURN(fDssiDescriptor != nullptr,); CARLA_SAFE_ASSERT_RETURN(fDssiDescriptor->set_custom_data != nullptr,); CARLA_SAFE_ASSERT_RETURN(data != nullptr,); CARLA_SAFE_ASSERT_RETURN(dataSize > 0,); if (fHandles.count() > 0) { const ScopedSingleProcessLocker spl(this, true); for (LinkedList::Itenerator it = fHandles.begin2(); it.valid(); it.next()) { LADSPA_Handle const handle(it.getValue(nullptr)); CARLA_SAFE_ASSERT_CONTINUE(handle != nullptr); try { fDssiDescriptor->set_custom_data(handle, const_cast(data), static_cast(dataSize)); } CARLA_SAFE_EXCEPTION("CarlaPluginLADSPADSSI::setChunkData"); } } pData->updateParameterValues(this, true, true, false); } void setMidiProgram(const int32_t index, const bool sendGui, const bool sendOsc, const bool sendCallback, const bool doingInit) noexcept override { CARLA_SAFE_ASSERT_RETURN(fDssiDescriptor != nullptr,); CARLA_SAFE_ASSERT_RETURN(fDssiDescriptor->select_program != nullptr,); CARLA_SAFE_ASSERT_RETURN(index >= -1 && index < static_cast(pData->midiprog.count),); CARLA_SAFE_ASSERT_RETURN(sendGui || sendOsc || sendCallback || doingInit,); if (index >= 0 && fHandles.count() > 0) { const ScopedSingleProcessLocker spl(this, (sendGui || sendOsc || sendCallback)); setMidiProgramInDSSI(static_cast(index)); } CarlaPlugin::setMidiProgram(index, sendGui, sendOsc, sendCallback, doingInit); } void setMidiProgramRT(const uint32_t uindex, const bool sendCallbackLater) noexcept override { CARLA_SAFE_ASSERT_RETURN(fDssiDescriptor != nullptr,); CARLA_SAFE_ASSERT_RETURN(fDssiDescriptor->select_program != nullptr,); CARLA_SAFE_ASSERT_RETURN(uindex < pData->midiprog.count,); setMidiProgramInDSSI(uindex); CarlaPlugin::setMidiProgramRT(uindex, sendCallbackLater); } void setMidiProgramInDSSI(const uint32_t uindex) noexcept { const uint32_t bank(pData->midiprog.data[uindex].bank); const uint32_t program(pData->midiprog.data[uindex].program); for (LinkedList::Itenerator it = fHandles.begin2(); it.valid(); it.next()) { LADSPA_Handle const handle(it.getValue(nullptr)); CARLA_SAFE_ASSERT_CONTINUE(handle != nullptr); try { fDssiDescriptor->select_program(handle, bank, program); } CARLA_SAFE_EXCEPTION("LADSPA/DSSI setMidiProgram") } } #if defined(HAVE_LIBLO) && !defined(BUILD_BRIDGE) // ------------------------------------------------------------------- // Set ui stuff void setCustomUITitle(const char* title) noexcept override { fThreadUI.setUITitle(title); CarlaPlugin::setCustomUITitle(title); } void showCustomUI(const bool yesNo) override { if (yesNo) { fOscData.clear(); fThreadUI.startThread(); } else { #ifndef BUILD_BRIDGE pData->transientTryCounter = 0; #endif if (fOscData.target != nullptr) { osc_send_hide(fOscData); osc_send_quit(fOscData); fOscData.clear(); } fThreadUI.stopThread(static_cast(pData->engine->getOptions().uiBridgesTimeout * 2)); } } #endif // ------------------------------------------------------------------- // Plugin state void reload() override { CARLA_SAFE_ASSERT_RETURN(pData->engine != nullptr,); CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); CARLA_SAFE_ASSERT_RETURN(fHandles.count() > 0,); carla_debug("CarlaPluginLADSPADSSI::reload() - start"); const EngineProcessMode processMode(pData->engine->getProccessMode()); // Safely disable plugin for reload const ScopedDisabler sd(this); if (pData->active) deactivate(); clearBuffers(); const float sampleRate(static_cast(pData->engine->getSampleRate())); const uint32_t portCount(getSafePortCount()); uint32_t aIns, aOuts, mIns, params; aIns = aOuts = mIns = params = 0; bool forcedStereoIn, forcedStereoOut; forcedStereoIn = forcedStereoOut = false; bool needsCtrlIn, needsCtrlOut; needsCtrlIn = needsCtrlOut = false; for (uint32_t i=0; i < portCount; ++i) { const LADSPA_PortDescriptor portType(fDescriptor->PortDescriptors[i]); if (LADSPA_IS_PORT_AUDIO(portType)) { if (LADSPA_IS_PORT_INPUT(portType)) aIns += 1; else if (LADSPA_IS_PORT_OUTPUT(portType)) aOuts += 1; } else if (LADSPA_IS_PORT_CONTROL(portType)) params += 1; } if (pData->options & PLUGIN_OPTION_FORCE_STEREO) { if ((aIns == 1 || aOuts == 1) && fHandles.count() == 1 && addInstance()) { if (aIns == 1) { aIns = 2; forcedStereoIn = true; } if (aOuts == 1) { aOuts = 2; forcedStereoOut = true; } } } if (fDssiDescriptor != nullptr && fDssiDescriptor->run_synth != nullptr) { mIns = 1; needsCtrlIn = true; } if (aIns > 0) { pData->audioIn.createNew(aIns); fAudioInBuffers = new float*[aIns]; for (uint32_t i=0; i < aIns; ++i) fAudioInBuffers[i] = nullptr; } if (aOuts > 0) { pData->audioOut.createNew(aOuts); fAudioOutBuffers = new float*[aOuts]; needsCtrlIn = true; for (uint32_t i=0; i < aOuts; ++i) fAudioOutBuffers[i] = nullptr; } if (params > 0) { pData->param.createNew(params, true); fParamBuffers = new float[params]; carla_zeroFloats(fParamBuffers, params); } const uint portNameSize(pData->engine->getMaxPortNameSize()); CarlaString portName; for (uint32_t i=0, iAudioIn=0, iAudioOut=0, iCtrl=0; i < portCount; ++i) { const LADSPA_PortDescriptor portType = fDescriptor->PortDescriptors[i]; const LADSPA_PortRangeHint portRangeHints = fDescriptor->PortRangeHints[i]; const bool hasPortRDF = (fRdfDescriptor != nullptr && i < fRdfDescriptor->PortCount); if (LADSPA_IS_PORT_AUDIO(portType)) { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } if (fDescriptor->PortNames[i] != nullptr && fDescriptor->PortNames[i][0] != '\0') { portName += fDescriptor->PortNames[i]; } else { if (LADSPA_IS_PORT_INPUT(portType)) { if (aIns > 1) { portName += "audio-in_"; portName += CarlaString(iAudioIn+1); } else portName += "audio-in"; } else { if (aOuts > 1) { portName += "audio-out_"; portName += CarlaString(iAudioOut+1); } else portName += "audio-out"; } } portName.truncate(portNameSize); if (LADSPA_IS_PORT_INPUT(portType)) { const uint32_t j = iAudioIn++; pData->audioIn.ports[j].port = (CarlaEngineAudioPort*)pData->client->addPort(kEnginePortTypeAudio, portName, true, j); pData->audioIn.ports[j].rindex = i; if (forcedStereoIn) { portName += "_2"; pData->audioIn.ports[1].port = (CarlaEngineAudioPort*)pData->client->addPort(kEnginePortTypeAudio, portName, true, 1); pData->audioIn.ports[1].rindex = i; } } else if (LADSPA_IS_PORT_OUTPUT(portType)) { const uint32_t j = iAudioOut++; pData->audioOut.ports[j].port = (CarlaEngineAudioPort*)pData->client->addPort(kEnginePortTypeAudio, portName, false, j); pData->audioOut.ports[j].rindex = i; if (forcedStereoOut) { portName += "_2"; pData->audioOut.ports[1].port = (CarlaEngineAudioPort*)pData->client->addPort(kEnginePortTypeAudio, portName, false, 1); pData->audioOut.ports[1].rindex = i; } } else carla_stderr2("WARNING - Got a broken Port (Audio, but not input or output)"); } else if (LADSPA_IS_PORT_CONTROL(portType)) { const uint32_t j = iCtrl++; pData->param.data[j].index = static_cast(j); pData->param.data[j].rindex = static_cast(i); const char* const paramName(fDescriptor->PortNames[i] != nullptr ? fDescriptor->PortNames[i] : "unknown"); float min, max, def, step, stepSmall, stepLarge; // min value if (LADSPA_IS_HINT_BOUNDED_BELOW(portRangeHints.HintDescriptor)) min = portRangeHints.LowerBound; else min = 0.0f; // max value if (LADSPA_IS_HINT_BOUNDED_ABOVE(portRangeHints.HintDescriptor)) max = portRangeHints.UpperBound; else max = 1.0f; if (LADSPA_IS_HINT_SAMPLE_RATE(portRangeHints.HintDescriptor)) { min *= sampleRate; max *= sampleRate; pData->param.data[j].hints |= PARAMETER_USES_SAMPLERATE; } if (min >= max) { carla_stderr2("WARNING - Broken plugin parameter '%s': min >= max", paramName); max = min + 0.1f; } // default value if (hasPortRDF && LADSPA_RDF_PORT_HAS_DEFAULT(fRdfDescriptor->Ports[i].Hints)) def = fRdfDescriptor->Ports[i].Default; else def = get_default_ladspa_port_value(portRangeHints.HintDescriptor, min, max); if (def < min) def = min; else if (def > max) def = max; if (LADSPA_IS_HINT_TOGGLED(portRangeHints.HintDescriptor)) { step = max - min; stepSmall = step; stepLarge = step; pData->param.data[j].hints |= PARAMETER_IS_BOOLEAN; } else if (LADSPA_IS_HINT_INTEGER(portRangeHints.HintDescriptor)) { step = 1.0f; stepSmall = 1.0f; stepLarge = 10.0f; pData->param.data[j].hints |= PARAMETER_IS_INTEGER; } else { const float range = max - min; step = range/100.0f; stepSmall = range/1000.0f; stepLarge = range/10.0f; } if (LADSPA_IS_PORT_INPUT(portType)) { pData->param.data[j].type = PARAMETER_INPUT; pData->param.data[j].hints |= PARAMETER_IS_ENABLED; pData->param.data[j].hints |= PARAMETER_IS_AUTOMATABLE; pData->param.data[j].hints |= PARAMETER_CAN_BE_CV_CONTROLLED; needsCtrlIn = true; // MIDI CC value if (fDssiDescriptor != nullptr && fDssiDescriptor->get_midi_controller_for_port != nullptr) { const int ctrl = fDssiDescriptor->get_midi_controller_for_port(fHandles.getFirst(nullptr), i); if (DSSI_CONTROLLER_IS_SET(ctrl) && DSSI_IS_CC(ctrl)) { const int16_t cc = DSSI_CC_NUMBER(ctrl); if (cc < MAX_MIDI_CONTROL && ! MIDI_IS_CONTROL_BANK_SELECT(cc)) pData->param.data[j].mappedControlIndex = cc; } } } else if (LADSPA_IS_PORT_OUTPUT(portType)) { pData->param.data[j].type = PARAMETER_OUTPUT; if (std::strcmp(paramName, "latency") == 0 || std::strcmp(paramName, "_latency") == 0) { min = 0.0f; max = sampleRate; def = 0.0f; step = 1.0f; stepSmall = 1.0f; stepLarge = 1.0f; pData->param.special[j] = PARAMETER_SPECIAL_LATENCY; CARLA_SAFE_ASSERT_INT2(fLatencyIndex == static_cast(j), fLatencyIndex, j); } else { pData->param.data[j].hints |= PARAMETER_IS_ENABLED; pData->param.data[j].hints |= PARAMETER_IS_AUTOMATABLE; needsCtrlOut = true; } } else { carla_stderr2("WARNING - Got a broken Port (Control, but not input or output)"); } // extra parameter hints if (LADSPA_IS_HINT_LOGARITHMIC(portRangeHints.HintDescriptor)) pData->param.data[j].hints |= PARAMETER_IS_LOGARITHMIC; // check for scalepoints, require at least 2 to make it useful if (hasPortRDF && fRdfDescriptor->Ports[i].ScalePointCount >= 2) pData->param.data[j].hints |= PARAMETER_USES_SCALEPOINTS; pData->param.ranges[j].min = min; pData->param.ranges[j].max = max; pData->param.ranges[j].def = def; pData->param.ranges[j].step = step; pData->param.ranges[j].stepSmall = stepSmall; pData->param.ranges[j].stepLarge = stepLarge; // Start parameters in their default values fParamBuffers[j] = def; for (LinkedList::Itenerator it = fHandles.begin2(); it.valid(); it.next()) { LADSPA_Handle const handle(it.getValue(nullptr)); CARLA_SAFE_ASSERT_CONTINUE(handle != nullptr); try { fDescriptor->connect_port(handle, i, &fParamBuffers[j]); } CARLA_SAFE_EXCEPTION("LADSPA/DSSI connect_port (parameter)"); } } else { // Not Audio or Control carla_stderr2("ERROR - Got a broken Port (neither Audio or Control)"); for (LinkedList::Itenerator it = fHandles.begin2(); it.valid(); it.next()) { LADSPA_Handle const handle(it.getValue(nullptr)); CARLA_SAFE_ASSERT_CONTINUE(handle != nullptr); try { fDescriptor->connect_port(handle, i, nullptr); } CARLA_SAFE_EXCEPTION("LADSPA/DSSI connect_port (null)"); } } } if (needsCtrlIn) { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } portName += "events-in"; portName.truncate(portNameSize); pData->event.portIn = (CarlaEngineEventPort*)pData->client->addPort(kEnginePortTypeEvent, portName, true, 0); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH pData->event.cvSourcePorts = pData->client->createCVSourcePorts(); #endif } if (needsCtrlOut) { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } portName += "events-out"; portName.truncate(portNameSize); pData->event.portOut = (CarlaEngineEventPort*)pData->client->addPort(kEnginePortTypeEvent, portName, false, 0); } if (forcedStereoIn || forcedStereoOut) pData->options |= PLUGIN_OPTION_FORCE_STEREO; else pData->options &= ~PLUGIN_OPTION_FORCE_STEREO; // plugin hints pData->hints = 0x0; if (LADSPA_IS_HARD_RT_CAPABLE(fDescriptor->Properties)) pData->hints |= PLUGIN_IS_RTSAFE; #if defined(HAVE_LIBLO) && !defined(BUILD_BRIDGE) if (fUiFilename != nullptr) pData->hints |= PLUGIN_HAS_CUSTOM_UI; #endif #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (aOuts > 0 && (aIns == aOuts || aIns == 1)) pData->hints |= PLUGIN_CAN_DRYWET; if (aOuts > 0) pData->hints |= PLUGIN_CAN_VOLUME; if (aOuts >= 2 && aOuts % 2 == 0) pData->hints |= PLUGIN_CAN_BALANCE; #endif // extra plugin hints pData->extraHints = 0x0; if (mIns > 0) pData->extraHints |= PLUGIN_EXTRA_HINT_HAS_MIDI_IN; // check initial latency findInitialLatencyValue(aIns, aOuts); fForcedStereoIn = forcedStereoIn; fForcedStereoOut = forcedStereoOut; bufferSizeChanged(pData->engine->getBufferSize()); reloadPrograms(true); if (pData->active) activate(); carla_debug("CarlaPluginLADSPADSSI::reload() - end"); } void findInitialLatencyValue(const uint32_t aIns, const uint32_t aOuts) const { if (fLatencyIndex < 0 || fHandles.count() == 0) return; // we need to pre-run the plugin so it can update its latency control-port const LADSPA_Handle handle(fHandles.getFirst(nullptr)); CARLA_SAFE_ASSERT_RETURN(handle != nullptr,); float tmpIn [(aIns > 0) ? aIns : 1][2]; float tmpOut[(aOuts > 0) ? aOuts : 1][2]; for (uint32_t j=0; j < aIns; ++j) { tmpIn[j][0] = 0.0f; tmpIn[j][1] = 0.0f; try { fDescriptor->connect_port(handle, pData->audioIn.ports[j].rindex, tmpIn[j]); } CARLA_SAFE_EXCEPTION("LADSPA/DSSI connect_port (latency input)"); } for (uint32_t j=0; j < aOuts; ++j) { tmpOut[j][0] = 0.0f; tmpOut[j][1] = 0.0f; try { fDescriptor->connect_port(handle, pData->audioOut.ports[j].rindex, tmpOut[j]); } CARLA_SAFE_EXCEPTION("LADSPA/DSSI connect_port (latency output)"); } if (fDescriptor->activate != nullptr) { try { fDescriptor->activate(handle); } CARLA_SAFE_EXCEPTION("LADSPA/DSSI latency activate"); } try { fDescriptor->run(handle, 2); } CARLA_SAFE_EXCEPTION("LADSPA/DSSI latency run"); if (fDescriptor->deactivate != nullptr) { try { fDescriptor->deactivate(handle); } CARLA_SAFE_EXCEPTION("LADSPA/DSSI latency deactivate"); } // done, let's get the value if (const uint32_t latency = getLatencyInFrames()) { pData->client->setLatency(latency); #ifndef BUILD_BRIDGE pData->latency.recreateBuffers(std::max(aIns, aOuts), latency); #endif } } void reloadPrograms(const bool doInit) override { carla_debug("CarlaPluginLADSPADSSI::reloadPrograms(%s)", bool2str(doInit)); const LADSPA_Handle handle(fHandles.getFirst(nullptr)); CARLA_SAFE_ASSERT_RETURN(handle != nullptr,); const uint32_t oldCount = pData->midiprog.count; const int32_t current = pData->midiprog.current; // Delete old programs pData->midiprog.clear(); // nothing to do for simple LADSPA plugins (do we want to bother with lrdf presets?) if (fDssiDescriptor == nullptr) return; // Query new programs uint32_t newCount = 0; if (fDssiDescriptor->get_program != nullptr && fDssiDescriptor->select_program != nullptr) { for (; fDssiDescriptor->get_program(handle, newCount) != nullptr;) ++newCount; } if (newCount > 0) { pData->midiprog.createNew(newCount); // Update data for (uint32_t i=0; i < newCount; ++i) { const DSSI_Program_Descriptor* const pdesc(fDssiDescriptor->get_program(handle, i)); CARLA_SAFE_ASSERT_CONTINUE(pdesc != nullptr); CARLA_SAFE_ASSERT(pdesc->Name != nullptr); pData->midiprog.data[i].bank = static_cast(pdesc->Bank); pData->midiprog.data[i].program = static_cast(pdesc->Program); pData->midiprog.data[i].name = carla_strdup(pdesc->Name); } } if (doInit) { if (newCount > 0) setMidiProgram(0, false, false, false, true); } else { // Check if current program is invalid bool programChanged = false; if (newCount == oldCount+1) { // one midi program added, probably created by user pData->midiprog.current = static_cast(oldCount); programChanged = true; } else if (current < 0 && newCount > 0) { // programs exist now, but not before pData->midiprog.current = 0; programChanged = true; } else if (current >= 0 && newCount == 0) { // programs existed before, but not anymore pData->midiprog.current = -1; programChanged = true; } else if (current >= static_cast(newCount)) { // current midi program > count pData->midiprog.current = 0; programChanged = true; } else { // no change pData->midiprog.current = current; } if (programChanged) setMidiProgram(pData->midiprog.current, true, true, true, false); pData->engine->callback(true, true, ENGINE_CALLBACK_RELOAD_PROGRAMS, pData->id, 0, 0, 0, 0.0f, nullptr); } } // ------------------------------------------------------------------- // Plugin processing void activate() noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); if (fDescriptor->activate != nullptr) { for (LinkedList::Itenerator it = fHandles.begin2(); it.valid(); it.next()) { LADSPA_Handle const handle(it.getValue(nullptr)); CARLA_SAFE_ASSERT_CONTINUE(handle != nullptr); try { fDescriptor->activate(handle); } CARLA_SAFE_EXCEPTION("LADSPA/DSSI activate"); } } } void deactivate() noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); if (fDescriptor->deactivate != nullptr) { for (LinkedList::Itenerator it = fHandles.begin2(); it.valid(); it.next()) { LADSPA_Handle const handle(it.getValue(nullptr)); CARLA_SAFE_ASSERT_CONTINUE(handle != nullptr); try { fDescriptor->deactivate(handle); } CARLA_SAFE_EXCEPTION("LADSPA/DSSI deactivate"); } } } void process(const float* const* const audioIn, float** const audioOut, const float* const* const cvIn, float**, const uint32_t frames) override { // -------------------------------------------------------------------------------------------------------- // Check if active if (! pData->active) { // disable any output sound for (uint32_t i=0; i < pData->audioOut.count; ++i) carla_zeroFloats(audioOut[i], frames); return; } ulong midiEventCount = 0; carla_zeroStructs(fMidiEvents, kPluginMaxMidiEvents); // -------------------------------------------------------------------------------------------------------- // Check if needs reset if (pData->needsReset) { if (pData->options & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) { midiEventCount = MAX_MIDI_CHANNELS*2; for (uchar i=0, k=MAX_MIDI_CHANNELS; i < MAX_MIDI_CHANNELS; ++i) { fMidiEvents[i].type = SND_SEQ_EVENT_CONTROLLER; fMidiEvents[i].data.control.channel = i; fMidiEvents[i].data.control.param = MIDI_CONTROL_ALL_NOTES_OFF; fMidiEvents[k+i].type = SND_SEQ_EVENT_CONTROLLER; fMidiEvents[k+i].data.control.channel = i; fMidiEvents[k+i].data.control.param = MIDI_CONTROL_ALL_SOUND_OFF; } } else if (pData->ctrlChannel >= 0 && pData->ctrlChannel < MAX_MIDI_CHANNELS) { midiEventCount = MAX_MIDI_NOTE; for (uchar i=0; i < MAX_MIDI_NOTE; ++i) { fMidiEvents[i].type = SND_SEQ_EVENT_NOTEOFF; fMidiEvents[i].data.note.channel = static_cast(pData->ctrlChannel); fMidiEvents[i].data.note.note = i; } } pData->needsReset = false; } // -------------------------------------------------------------------------------------------------------- // Event Input and Processing if (pData->event.portIn != nullptr) { // ---------------------------------------------------------------------------------------------------- // MIDI Input (External) if (pData->extNotes.mutex.tryLock()) { ExternalMidiNote note = { 0, 0, 0 }; for (; midiEventCount < kPluginMaxMidiEvents && ! pData->extNotes.data.isEmpty();) { note = pData->extNotes.data.getFirst(note, true); CARLA_SAFE_ASSERT_CONTINUE(note.channel >= 0 && note.channel < MAX_MIDI_CHANNELS); snd_seq_event_t& seqEvent(fMidiEvents[midiEventCount++]); seqEvent.type = (note.velo > 0) ? SND_SEQ_EVENT_NOTEON : SND_SEQ_EVENT_NOTEOFF; seqEvent.data.note.channel = static_cast(note.channel); seqEvent.data.note.note = note.note; seqEvent.data.note.velocity = note.velo; } pData->extNotes.mutex.unlock(); } // End of MIDI Input (External) // ---------------------------------------------------------------------------------------------------- // Event Input (System) #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH bool allNotesOffSent = false; #endif const bool isSampleAccurate = (pData->options & PLUGIN_OPTION_FIXED_BUFFERS) == 0; uint32_t startTime = 0; uint32_t timeOffset = 0; uint32_t nextBankId; if (pData->midiprog.current >= 0 && pData->midiprog.count > 0) nextBankId = pData->midiprog.data[pData->midiprog.current].bank; else nextBankId = 0; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (cvIn != nullptr && pData->event.cvSourcePorts != nullptr) pData->event.cvSourcePorts->initPortBuffers(cvIn, frames, isSampleAccurate, pData->event.portIn); #endif for (uint32_t i=0, numEvents=pData->event.portIn->getEventCount(); i < numEvents; ++i) { EngineEvent& event(pData->event.portIn->getEvent(i)); uint32_t eventTime = event.time; CARLA_SAFE_ASSERT_UINT2_CONTINUE(eventTime < frames, eventTime, frames); if (eventTime < timeOffset) { carla_stderr2("Timing error, eventTime:%u < timeOffset:%u for '%s'", eventTime, timeOffset, pData->name); eventTime = timeOffset; } if (isSampleAccurate && eventTime > timeOffset) { if (processSingle(audioIn, audioOut, eventTime - timeOffset, timeOffset, midiEventCount)) { startTime = 0; timeOffset = eventTime; midiEventCount = 0; if (pData->midiprog.current >= 0 && pData->midiprog.count > 0) nextBankId = pData->midiprog.data[pData->midiprog.current].bank; else nextBankId = 0; } else startTime += timeOffset; } switch (event.type) { case kEngineEventTypeNull: break; case kEngineEventTypeControl: { EngineControlEvent& ctrlEvent(event.ctrl); switch (ctrlEvent.type) { case kEngineControlEventTypeNull: break; case kEngineControlEventTypeParameter: { float value; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // non-midi if (event.channel == kEngineEventNonMidiChannel) { const uint32_t k = ctrlEvent.param; CARLA_SAFE_ASSERT_CONTINUE(k < pData->param.count); ctrlEvent.handled = true; value = pData->param.getFinalUnnormalizedValue(k, ctrlEvent.normalizedValue); setParameterValueRT(k, value, true); continue; } // Control backend stuff if (event.channel == pData->ctrlChannel) { if (MIDI_IS_CONTROL_BREATH_CONTROLLER(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_DRYWET) != 0) { ctrlEvent.handled = true; value = ctrlEvent.normalizedValue; setDryWetRT(value, true); } else if (MIDI_IS_CONTROL_CHANNEL_VOLUME(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_VOLUME) != 0) { ctrlEvent.handled = true; value = ctrlEvent.normalizedValue*127.0f/100.0f; setVolumeRT(value, true); } else if (MIDI_IS_CONTROL_BALANCE(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_BALANCE) != 0) { float left, right; value = ctrlEvent.normalizedValue/0.5f - 1.0f; if (value < 0.0f) { left = -1.0f; right = (value*2.0f)+1.0f; } else if (value > 0.0f) { left = (value*2.0f)-1.0f; right = 1.0f; } else { left = -1.0f; right = 1.0f; } ctrlEvent.handled = true; setBalanceLeftRT(left, true); setBalanceRightRT(right, true); } } #endif // Control plugin parameters for (uint32_t k=0; k < pData->param.count; ++k) { if (pData->param.data[k].midiChannel != event.channel) continue; if (pData->param.data[k].mappedControlIndex != ctrlEvent.param) continue; if (pData->param.data[k].type != PARAMETER_INPUT) continue; if ((pData->param.data[k].hints & PARAMETER_IS_AUTOMATABLE) == 0) continue; ctrlEvent.handled = true; value = pData->param.getFinalUnnormalizedValue(k, ctrlEvent.normalizedValue); setParameterValueRT(k, value, true); } if ((pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) != 0 && ctrlEvent.param < MAX_MIDI_VALUE) { if (midiEventCount >= kPluginMaxMidiEvents) continue; snd_seq_event_t& seqEvent(fMidiEvents[midiEventCount++]); seqEvent.time.tick = isSampleAccurate ? startTime : eventTime; seqEvent.type = SND_SEQ_EVENT_CONTROLLER; seqEvent.data.control.channel = event.channel; seqEvent.data.control.param = ctrlEvent.param; seqEvent.data.control.value = int8_t(ctrlEvent.normalizedValue*127.0f); } #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (! ctrlEvent.handled) checkForMidiLearn(event); #endif break; } // case kEngineControlEventTypeParameter case kEngineControlEventTypeMidiBank: if (event.channel == pData->ctrlChannel && (pData->options & PLUGIN_OPTION_MAP_PROGRAM_CHANGES) != 0) nextBankId = ctrlEvent.param; break; case kEngineControlEventTypeMidiProgram: if (event.channel == pData->ctrlChannel && (pData->options & PLUGIN_OPTION_MAP_PROGRAM_CHANGES) != 0) { const uint32_t nextProgramId = ctrlEvent.param; for (uint32_t k=0; k < pData->midiprog.count; ++k) { if (pData->midiprog.data[k].bank == nextBankId && pData->midiprog.data[k].program == nextProgramId) { setMidiProgramRT(k, true); break; } } } break; case kEngineControlEventTypeAllSoundOff: if (pData->options & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) { if (midiEventCount >= kPluginMaxMidiEvents) continue; snd_seq_event_t& seqEvent(fMidiEvents[midiEventCount++]); seqEvent.time.tick = isSampleAccurate ? startTime : eventTime; seqEvent.type = SND_SEQ_EVENT_CONTROLLER; seqEvent.data.control.channel = event.channel; seqEvent.data.control.param = MIDI_CONTROL_ALL_SOUND_OFF; } break; case kEngineControlEventTypeAllNotesOff: if (pData->options & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) { #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (event.channel == pData->ctrlChannel && ! allNotesOffSent) { allNotesOffSent = true; postponeRtAllNotesOff(); } #endif if (midiEventCount >= kPluginMaxMidiEvents) continue; snd_seq_event_t& seqEvent(fMidiEvents[midiEventCount++]); seqEvent.time.tick = isSampleAccurate ? startTime : eventTime; seqEvent.type = SND_SEQ_EVENT_CONTROLLER; seqEvent.data.control.channel = event.channel; seqEvent.data.control.param = MIDI_CONTROL_ALL_NOTES_OFF; } break; } // switch (ctrlEvent.type) break; } // case kEngineEventTypeControl case kEngineEventTypeMidi: { if (midiEventCount >= kPluginMaxMidiEvents) continue; const EngineMidiEvent& midiEvent(event.midi); if (midiEvent.size > EngineMidiEvent::kDataSize) continue; uint8_t status = uint8_t(MIDI_GET_STATUS_FROM_DATA(midiEvent.data)); // Fix bad note-off (per DSSI spec) if (status == MIDI_STATUS_NOTE_ON && midiEvent.data[2] == 0) status = MIDI_STATUS_NOTE_OFF; snd_seq_event_t& seqEvent(fMidiEvents[midiEventCount++]); seqEvent.time.tick = isSampleAccurate ? startTime : eventTime; switch (status) { case MIDI_STATUS_NOTE_OFF: if ((pData->options & PLUGIN_OPTION_SKIP_SENDING_NOTES) == 0x0) { const uint8_t note = midiEvent.data[1]; seqEvent.type = SND_SEQ_EVENT_NOTEOFF; seqEvent.data.note.channel = event.channel; seqEvent.data.note.note = note; pData->postponeNoteOffRtEvent(true, event.channel, note); } break; case MIDI_STATUS_NOTE_ON: if ((pData->options & PLUGIN_OPTION_SKIP_SENDING_NOTES) == 0x0) { const uint8_t note = midiEvent.data[1]; const uint8_t velo = midiEvent.data[2]; seqEvent.type = SND_SEQ_EVENT_NOTEON; seqEvent.data.note.channel = event.channel; seqEvent.data.note.note = note; seqEvent.data.note.velocity = velo; pData->postponeNoteOnRtEvent(true, event.channel, note, velo); } break; case MIDI_STATUS_POLYPHONIC_AFTERTOUCH: if (pData->options & PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH) { const uint8_t note = midiEvent.data[1]; const uint8_t pressure = midiEvent.data[2]; seqEvent.type = SND_SEQ_EVENT_KEYPRESS; seqEvent.data.note.channel = event.channel; seqEvent.data.note.note = note; seqEvent.data.note.velocity = pressure; } break; case MIDI_STATUS_CONTROL_CHANGE: if (pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) { const uint8_t control = midiEvent.data[1]; const uint8_t value = midiEvent.data[2]; seqEvent.type = SND_SEQ_EVENT_CONTROLLER; seqEvent.data.control.channel = event.channel; seqEvent.data.control.param = control; seqEvent.data.control.value = value; } break; case MIDI_STATUS_CHANNEL_PRESSURE: if (pData->options & PLUGIN_OPTION_SEND_CHANNEL_PRESSURE) { const uint8_t pressure = midiEvent.data[1]; seqEvent.type = SND_SEQ_EVENT_CHANPRESS; seqEvent.data.control.channel = event.channel; seqEvent.data.control.value = pressure; } break; case MIDI_STATUS_PITCH_WHEEL_CONTROL: if (pData->options & PLUGIN_OPTION_SEND_PITCHBEND) { const uint8_t lsb = midiEvent.data[1]; const uint8_t msb = midiEvent.data[2]; seqEvent.type = SND_SEQ_EVENT_PITCHBEND; seqEvent.data.control.channel = event.channel; seqEvent.data.control.value = ((msb << 7) | lsb) - 8192; } break; default: --midiEventCount; break; } // switch (status) } break; } // switch (event.type) } pData->postRtEvents.trySplice(); if (frames > timeOffset) processSingle(audioIn, audioOut, frames - timeOffset, timeOffset, midiEventCount); } // End of Event Input and Processing // -------------------------------------------------------------------------------------------------------- // Plugin processing (no events) else { processSingle(audioIn, audioOut, frames, 0, midiEventCount); } // End of Plugin processing (no events) // -------------------------------------------------------------------------------------------------------- // Control Output if (pData->event.portOut != nullptr) { uint8_t channel; uint16_t param; float value; for (uint32_t k=0; k < pData->param.count; ++k) { if (pData->param.data[k].type != PARAMETER_OUTPUT) continue; pData->param.ranges[k].fixValue(fParamBuffers[k]); if (pData->param.data[k].mappedControlIndex > 0) { channel = pData->param.data[k].midiChannel; param = static_cast(pData->param.data[k].mappedControlIndex); value = pData->param.ranges[k].getNormalizedValue(fParamBuffers[k]); pData->event.portOut->writeControlEvent(0, channel, kEngineControlEventTypeParameter, param, -1, value); } } } // End of Control Output #ifdef BUILD_BRIDGE_ALTERNATIVE_ARCH return; // unused (void)cvIn; #endif } bool processSingle(const float* const* const audioIn, float** const audioOut, const uint32_t frames, const uint32_t timeOffset, const ulong midiEventCount) { CARLA_SAFE_ASSERT_RETURN(frames > 0, false); if (pData->audioIn.count > 0) { CARLA_SAFE_ASSERT_RETURN(audioIn != nullptr, false); } if (pData->audioOut.count > 0) { CARLA_SAFE_ASSERT_RETURN(audioOut != nullptr, false); } // -------------------------------------------------------------------------------------------------------- // Try lock, silence otherwise #ifndef STOAT_TEST_BUILD if (pData->engine->isOffline()) { pData->singleMutex.lock(); } else #endif if (! pData->singleMutex.tryLock()) { for (uint32_t i=0; i < pData->audioOut.count; ++i) { for (uint32_t k=0; k < frames; ++k) audioOut[i][k+timeOffset] = 0.0f; } return false; } // -------------------------------------------------------------------------------------------------------- // Set audio buffers const bool customMonoOut = pData->audioOut.count == 2 && fForcedStereoOut && ! fForcedStereoIn; const bool customStereoOut = pData->audioOut.count == 2 && fForcedStereoIn && ! fForcedStereoOut; if (! customMonoOut) { for (uint32_t i=0; i < pData->audioOut.count; ++i) carla_zeroFloats(fAudioOutBuffers[i], frames); } for (uint32_t i=0; i < pData->audioIn.count; ++i) carla_copyFloats(fAudioInBuffers[i], audioIn[i]+timeOffset, frames); // -------------------------------------------------------------------------------------------------------- // Run plugin uint instn = 0; for (LinkedList::Itenerator it = fHandles.begin2(); it.valid(); it.next(), ++instn) { LADSPA_Handle const handle(it.getValue(nullptr)); CARLA_SAFE_ASSERT_CONTINUE(handle != nullptr); // ---------------------------------------------------------------------------------------------------- // Mixdown for forced stereo if (customMonoOut) carla_zeroFloats(fAudioOutBuffers[instn], frames); // ---------------------------------------------------------------------------------------------------- // Run it if (fDssiDescriptor != nullptr && fDssiDescriptor->run_synth != nullptr) { try { fDssiDescriptor->run_synth(handle, frames, fMidiEvents, midiEventCount); } CARLA_SAFE_EXCEPTION("LADSPA/DSSI run_synth"); } else { try { fDescriptor->run(handle, frames); } CARLA_SAFE_EXCEPTION("LADSPA/DSSI run"); } // ---------------------------------------------------------------------------------------------------- // Mixdown for forced stereo if (customMonoOut) carla_multiply(fAudioOutBuffers[instn], 0.5f, frames); else if (customStereoOut) carla_copyFloats(fExtraStereoBuffer[instn], fAudioOutBuffers[instn], frames); } if (customStereoOut) { carla_copyFloats(fAudioOutBuffers[0], fExtraStereoBuffer[0], frames); carla_copyFloats(fAudioOutBuffers[1], fExtraStereoBuffer[1], frames); } #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // -------------------------------------------------------------------------------------------------------- // Post-processing (dry/wet, volume and balance) { const bool doDryWet = (pData->hints & PLUGIN_CAN_DRYWET) != 0 && carla_isNotEqual(pData->postProc.dryWet, 1.0f); const bool doBalance = (pData->hints & PLUGIN_CAN_BALANCE) != 0 && ! (carla_isEqual(pData->postProc.balanceLeft, -1.0f) && carla_isEqual(pData->postProc.balanceRight, 1.0f)); const bool isMono = (pData->audioIn.count == 1); bool isPair; float bufValue, oldBufLeft[doBalance ? frames : 1]; for (uint32_t i=0; i < pData->audioOut.count; ++i) { // Dry/Wet if (doDryWet) { const uint32_t c = isMono ? 0 : i; for (uint32_t k=0; k < frames; ++k) { # ifndef BUILD_BRIDGE if (k < pData->latency.frames && pData->latency.buffers != nullptr) bufValue = pData->latency.buffers[c][k]; else if (pData->latency.frames < frames) bufValue = fAudioInBuffers[c][k-pData->latency.frames]; else # endif bufValue = fAudioInBuffers[c][k]; fAudioOutBuffers[i][k] = (fAudioOutBuffers[i][k] * pData->postProc.dryWet) + (bufValue * (1.0f - pData->postProc.dryWet)); } } // Balance if (doBalance) { isPair = (i % 2 == 0); if (isPair) { CARLA_ASSERT(i+1 < pData->audioOut.count); carla_copyFloats(oldBufLeft, fAudioOutBuffers[i], frames); } float balRangeL = (pData->postProc.balanceLeft + 1.0f)/2.0f; float balRangeR = (pData->postProc.balanceRight + 1.0f)/2.0f; for (uint32_t k=0; k < frames; ++k) { if (isPair) { // left fAudioOutBuffers[i][k] = oldBufLeft[k] * (1.0f - balRangeL); fAudioOutBuffers[i][k] += fAudioOutBuffers[i+1][k] * (1.0f - balRangeR); } else { // right fAudioOutBuffers[i][k] = fAudioOutBuffers[i][k] * balRangeR; fAudioOutBuffers[i][k] += oldBufLeft[k] * balRangeL; } } } // Volume (and buffer copy) { for (uint32_t k=0; k < frames; ++k) audioOut[i][k+timeOffset] = fAudioOutBuffers[i][k] * pData->postProc.volume; } } } // End of Post-processing # ifndef BUILD_BRIDGE // -------------------------------------------------------------------------------------------------------- // Save latency values for next callback if (pData->latency.frames != 0 && pData->latency.buffers != nullptr) { CARLA_SAFE_ASSERT(timeOffset == 0); const uint32_t latframes = pData->latency.frames; if (latframes <= frames) { for (uint32_t i=0; i < pData->audioIn.count; ++i) carla_copyFloats(pData->latency.buffers[i], audioIn[i]+(frames-latframes), latframes); } else { const uint32_t diff = latframes - frames; for (uint32_t i=0, k; iaudioIn.count; ++i) { // push back buffer by 'frames' for (k=0; k < diff; ++k) pData->latency.buffers[i][k] = pData->latency.buffers[i][k+frames]; // put current input at the end for (uint32_t j=0; k < latframes; ++j, ++k) pData->latency.buffers[i][k] = audioIn[i][j]; } } } # endif #else // BUILD_BRIDGE_ALTERNATIVE_ARCH for (uint32_t i=0; i < pData->audioOut.count; ++i) { for (uint32_t k=0; k < frames; ++k) audioOut[i][k+timeOffset] = fAudioOutBuffers[i][k]; } #endif // -------------------------------------------------------------------------------------------------------- pData->singleMutex.unlock(); return true; } void bufferSizeChanged(const uint32_t newBufferSize) override { CARLA_ASSERT_INT(newBufferSize > 0, newBufferSize); carla_debug("CarlaPluginLADSPADSSI::bufferSizeChanged(%i) - start", newBufferSize); for (uint32_t i=0; i < pData->audioIn.count; ++i) { if (fAudioInBuffers[i] != nullptr) delete[] fAudioInBuffers[i]; fAudioInBuffers[i] = new float[newBufferSize]; carla_zeroFloats(fAudioInBuffers[i], newBufferSize); } for (uint32_t i=0; i < pData->audioOut.count; ++i) { if (fAudioOutBuffers[i] != nullptr) delete[] fAudioOutBuffers[i]; fAudioOutBuffers[i] = new float[newBufferSize]; carla_zeroFloats(fAudioOutBuffers[i], newBufferSize); } if (fExtraStereoBuffer[0] != nullptr) { delete[] fExtraStereoBuffer[0]; fExtraStereoBuffer[0] = nullptr; } if (fExtraStereoBuffer[1] != nullptr) { delete[] fExtraStereoBuffer[1]; fExtraStereoBuffer[1] = nullptr; } if (fForcedStereoIn && pData->audioOut.count == 2) { fExtraStereoBuffer[0] = new float[newBufferSize]; fExtraStereoBuffer[1] = new float[newBufferSize]; carla_zeroFloats(fExtraStereoBuffer[0], newBufferSize); carla_zeroFloats(fExtraStereoBuffer[1], newBufferSize); } reconnectAudioPorts(); carla_debug("CarlaPluginLADSPADSSI::bufferSizeChanged(%i) - end", newBufferSize); } void sampleRateChanged(const double newSampleRate) override { CARLA_ASSERT_INT(newSampleRate > 0.0, newSampleRate); carla_debug("CarlaPluginLADSPADSSI::sampleRateChanged(%g) - start", newSampleRate); // TODO - handle UI stuff if (pData->active) deactivate(); const std::size_t instanceCount(fHandles.count()); if (fDescriptor->cleanup != nullptr) { for (LinkedList::Itenerator it = fHandles.begin2(); it.valid(); it.next()) { LADSPA_Handle const handle(it.getValue(nullptr)); CARLA_SAFE_ASSERT_CONTINUE(handle != nullptr); try { fDescriptor->cleanup(handle); } CARLA_SAFE_EXCEPTION("LADSPA/DSSI cleanup"); } } fHandles.clear(); for (std::size_t i=0; iactive) activate(); carla_debug("CarlaPluginLADSPADSSI::sampleRateChanged(%g) - end", newSampleRate); } void reconnectAudioPorts() const noexcept { if (fForcedStereoIn) { if (LADSPA_Handle const handle = fHandles.getFirst(nullptr)) { try { fDescriptor->connect_port(handle, pData->audioIn.ports[0].rindex, fAudioInBuffers[0]); } CARLA_SAFE_EXCEPTION("LADSPA/DSSI connect_port (forced stereo input, first)"); } if (LADSPA_Handle const handle = fHandles.getLast(nullptr)) { try { fDescriptor->connect_port(handle, pData->audioIn.ports[1].rindex, fAudioInBuffers[1]); } CARLA_SAFE_EXCEPTION("LADSPA/DSSI connect_port (forced stereo input, last)"); } } else { for (LinkedList::Itenerator it = fHandles.begin2(); it.valid(); it.next()) { LADSPA_Handle const handle(it.getValue(nullptr)); CARLA_SAFE_ASSERT_CONTINUE(handle != nullptr); for (uint32_t i=0; i < pData->audioIn.count; ++i) { try { fDescriptor->connect_port(handle, pData->audioIn.ports[i].rindex, fAudioInBuffers[i]); } CARLA_SAFE_EXCEPTION("LADSPA/DSSI connect_port (audio input)"); } } } if (fForcedStereoOut) { if (LADSPA_Handle const handle = fHandles.getFirst(nullptr)) { try { fDescriptor->connect_port(handle, pData->audioOut.ports[0].rindex, fAudioOutBuffers[0]); } CARLA_SAFE_EXCEPTION("LADSPA/DSSI connect_port (forced stereo output, first)"); } if (LADSPA_Handle const handle = fHandles.getLast(nullptr)) { try { fDescriptor->connect_port(handle, pData->audioOut.ports[1].rindex, fAudioOutBuffers[1]); } CARLA_SAFE_EXCEPTION("LADSPA/DSSI connect_port (forced stereo output, last)"); } } else { for (LinkedList::Itenerator it = fHandles.begin2(); it.valid(); it.next()) { LADSPA_Handle const handle(it.getValue(nullptr)); CARLA_SAFE_ASSERT_CONTINUE(handle != nullptr); for (uint32_t i=0; i < pData->audioOut.count; ++i) { try { fDescriptor->connect_port(handle, pData->audioOut.ports[i].rindex, fAudioOutBuffers[i]); } CARLA_SAFE_EXCEPTION("LADSPA/DSSI connect_port (audio output)"); } } } } // ------------------------------------------------------------------- // Plugin buffers void clearBuffers() noexcept override { carla_debug("CarlaPluginLADSPADSSI::clearBuffers() - start"); if (fAudioInBuffers != nullptr) { for (uint32_t i=0; i < pData->audioIn.count; ++i) { if (fAudioInBuffers[i] != nullptr) { delete[] fAudioInBuffers[i]; fAudioInBuffers[i] = nullptr; } } delete[] fAudioInBuffers; fAudioInBuffers = nullptr; } if (fAudioOutBuffers != nullptr) { for (uint32_t i=0; i < pData->audioOut.count; ++i) { if (fAudioOutBuffers[i] != nullptr) { delete[] fAudioOutBuffers[i]; fAudioOutBuffers[i] = nullptr; } } delete[] fAudioOutBuffers; fAudioOutBuffers = nullptr; } if (fExtraStereoBuffer[0] != nullptr) { delete[] fExtraStereoBuffer[0]; fExtraStereoBuffer[0] = nullptr; } if (fExtraStereoBuffer[1] != nullptr) { delete[] fExtraStereoBuffer[1]; fExtraStereoBuffer[1] = nullptr; } if (fParamBuffers != nullptr) { delete[] fParamBuffers; fParamBuffers = nullptr; } CarlaPlugin::clearBuffers(); carla_debug("CarlaPluginLADSPADSSI::clearBuffers() - end"); } #if defined(HAVE_LIBLO) && !defined(BUILD_BRIDGE) // ------------------------------------------------------------------- // OSC stuff void handleOscMessage(const char* const method, const int argc, const void* const argvx, const char* const types, const lo_message msg) override { const lo_address source(lo_message_get_source(msg)); CARLA_SAFE_ASSERT_RETURN(source != nullptr,); // protocol for DSSI UIs *must* be UDP CARLA_SAFE_ASSERT_RETURN(lo_address_get_protocol(source) == LO_UDP,); if (fOscData.source == nullptr) { // if no UI is registered yet only "configure" and "update" messages are valid CARLA_SAFE_ASSERT_RETURN(std::strcmp(method, "configure") == 0 || std::strcmp(method, "update") == 0,) } else { // make sure message source is the DSSI UI const char* const msghost = lo_address_get_hostname(source); const char* const msgport = lo_address_get_port(source); const char* const ourhost = lo_address_get_hostname(fOscData.source); const char* const ourport = lo_address_get_port(fOscData.source); CARLA_SAFE_ASSERT_RETURN(std::strcmp(msghost, ourhost) == 0,); CARLA_SAFE_ASSERT_RETURN(std::strcmp(msgport, ourport) == 0,); } const lo_arg* const* const argv(static_cast(argvx)); if (std::strcmp(method, "configure") == 0) return handleOscMessageConfigure(argc, argv, types); if (std::strcmp(method, "control") == 0) return handleOscMessageControl(argc, argv, types); if (std::strcmp(method, "program") == 0) return handleOscMessageProgram(argc, argv, types); if (std::strcmp(method, "midi") == 0) return handleOscMessageMIDI(argc, argv, types); if (std::strcmp(method, "update") == 0) return handleOscMessageUpdate(argc, argv, types, lo_message_get_source(msg)); if (std::strcmp(method, "exiting") == 0) return handleOscMessageExiting(); carla_stdout("CarlaPluginLADSPADSSI::handleOscMessage() - unknown method '%s'", method); } void handleOscMessageConfigure(const int argc, const lo_arg* const* const argv, const char* const types) { carla_debug("CarlaPluginLADSPADSSI::handleMsgConfigure()"); CARLA_PLUGIN_DSSI_OSC_CHECK_OSC_TYPES(2, "ss"); const char* const key = (const char*)&argv[0]->s; const char* const value = (const char*)&argv[1]->s; setCustomData(CUSTOM_DATA_TYPE_STRING, key, value, false); } void handleOscMessageControl(const int argc, const lo_arg* const* const argv, const char* const types) { carla_debug("CarlaPluginLADSPADSSI::handleMsgControl()"); CARLA_PLUGIN_DSSI_OSC_CHECK_OSC_TYPES(2, "if"); const int32_t rindex = argv[0]->i; const float value = argv[1]->f; setParameterValueByRealIndex(rindex, value, false, true, true); } void handleOscMessageProgram(const int argc, const lo_arg* const* const argv, const char* const types) { carla_debug("CarlaPluginLADSPADSSI::handleMsgProgram()"); CARLA_PLUGIN_DSSI_OSC_CHECK_OSC_TYPES(2, "ii"); const int32_t bank = argv[0]->i; const int32_t program = argv[1]->i; CARLA_SAFE_ASSERT_RETURN(bank >= 0,); CARLA_SAFE_ASSERT_RETURN(program >= 0,); setMidiProgramById(static_cast(bank), static_cast(program), false, true, true); } void handleOscMessageMIDI(const int argc, const lo_arg* const* const argv, const char* const types) { carla_debug("CarlaPluginLADSPADSSI::handleMsgMidi()"); CARLA_PLUGIN_DSSI_OSC_CHECK_OSC_TYPES(1, "m"); if (getMidiInCount() == 0) { carla_stderr("CarlaPluginLADSPADSSI::handleMsgMidi() - received midi when plugin has no midi inputs"); return; } const uint8_t* const data = argv[0]->m; uint8_t status = data[1]; uint8_t channel = status & 0x0F; // Fix bad note-off if (MIDI_IS_STATUS_NOTE_ON(status) && data[3] == 0) status = MIDI_STATUS_NOTE_OFF; if (MIDI_IS_STATUS_NOTE_OFF(status)) { const uint8_t note = data[2]; CARLA_SAFE_ASSERT_RETURN(note < MAX_MIDI_NOTE,); sendMidiSingleNote(channel, note, 0, false, true, true); } else if (MIDI_IS_STATUS_NOTE_ON(status)) { const uint8_t note = data[2]; const uint8_t velo = data[3]; CARLA_SAFE_ASSERT_RETURN(note < MAX_MIDI_NOTE,); CARLA_SAFE_ASSERT_RETURN(velo < MAX_MIDI_VALUE,); sendMidiSingleNote(channel, note, velo, false, true, true); } } void handleOscMessageUpdate(const int argc, const lo_arg* const* const argv, const char* const types, const lo_address source) { carla_debug("CarlaPluginLADSPADSSI::handleMsgUpdate()"); CARLA_PLUGIN_DSSI_OSC_CHECK_OSC_TYPES(1, "s"); const char* const url = (const char*)&argv[0]->s; // FIXME - remove debug prints later carla_stdout("CarlaPluginLADSPADSSI::updateOscData(%p, \"%s\")", source, url); fOscData.clear(); const int proto = lo_address_get_protocol(source); { const char* host = lo_address_get_hostname(source); const char* port = lo_address_get_port(source); fOscData.source = lo_address_new_with_proto(proto, host, port); carla_stdout("CarlaPlugin::updateOscData() - source: host \"%s\", port \"%s\"", host, port); } { char* host = lo_url_get_hostname(url); char* port = lo_url_get_port(url); fOscData.path = carla_strdup_free(lo_url_get_path(url)); fOscData.target = lo_address_new_with_proto(proto, host, port); carla_stdout("CarlaPlugin::updateOscData() - target: host \"%s\", port \"%s\", path \"%s\"", host, port, fOscData.path); std::free(host); std::free(port); } osc_send_sample_rate(fOscData, static_cast(pData->engine->getSampleRate())); for (LinkedList::Itenerator it = pData->custom.begin2(); it.valid(); it.next()) { const CustomData& customData(it.getValue(kCustomDataFallback)); CARLA_SAFE_ASSERT_CONTINUE(customData.isValid()); if (std::strcmp(customData.type, CUSTOM_DATA_TYPE_STRING) == 0) osc_send_configure(fOscData, customData.key, customData.value); } if (pData->prog.current >= 0) osc_send_program(fOscData, static_cast(pData->prog.current)); if (pData->midiprog.current >= 0) { const MidiProgramData& curMidiProg(pData->midiprog.getCurrent()); osc_send_program(fOscData, curMidiProg.bank, curMidiProg.program); } for (uint32_t i=0; i < pData->param.count; ++i) osc_send_control(fOscData, pData->param.data[i].rindex, getParameterValue(i)); #ifndef BUILD_BRIDGE if (pData->engine->getOptions().frontendWinId != 0) pData->transientTryCounter = 1; #endif carla_stdout("CarlaPluginLADSPADSSI::updateOscData() - done"); } void handleOscMessageExiting() { carla_debug("CarlaPluginLADSPADSSI::handleMsgExiting()"); // hide UI showCustomUI(false); // tell frontend pData->engine->callback(true, true, ENGINE_CALLBACK_UI_STATE_CHANGED, pData->id, 0, 0, 0, 0.0f, nullptr); } // ------------------------------------------------------------------- // Post-poned UI Stuff void uiParameterChange(const uint32_t index, const float value) noexcept override { CARLA_SAFE_ASSERT_RETURN(index < pData->param.count,); if (fOscData.target == nullptr) return; osc_send_control(fOscData, pData->param.data[index].rindex, value); } void uiMidiProgramChange(const uint32_t index) noexcept override { CARLA_SAFE_ASSERT_RETURN(index < pData->midiprog.count,); if (fOscData.target == nullptr) return; osc_send_program(fOscData, pData->midiprog.data[index].bank, pData->midiprog.data[index].program); } void uiNoteOn(const uint8_t channel, const uint8_t note, const uint8_t velo) noexcept override { CARLA_SAFE_ASSERT_RETURN(channel < MAX_MIDI_CHANNELS,); CARLA_SAFE_ASSERT_RETURN(note < MAX_MIDI_NOTE,); CARLA_SAFE_ASSERT_RETURN(velo > 0 && velo < MAX_MIDI_VALUE,); if (fOscData.target == nullptr) return; #if 0 uint8_t midiData[4]; midiData[0] = 0; midiData[1] = uint8_t(MIDI_STATUS_NOTE_ON | (channel & MIDI_CHANNEL_BIT)); midiData[2] = note; midiData[3] = velo; osc_send_midi(fOscData, midiData); #endif } void uiNoteOff(const uint8_t channel, const uint8_t note) noexcept override { CARLA_SAFE_ASSERT_RETURN(channel < MAX_MIDI_CHANNELS,); CARLA_SAFE_ASSERT_RETURN(note < MAX_MIDI_NOTE,); if (fOscData.target == nullptr) return; #if 0 uint8_t midiData[4]; midiData[0] = 0; midiData[1] = uint8_t(MIDI_STATUS_NOTE_ON | (channel & MIDI_CHANNEL_BIT)); midiData[2] = note; midiData[3] = 0; osc_send_midi(fOscData, midiData); #endif } #endif // HAVE_LIBLO && !BUILD_BRIDGE // ------------------------------------------------------------------- const void* getNativeDescriptor() const noexcept override { return fDssiDescriptor != nullptr ? (const void*)fDssiDescriptor : (const void*)fDescriptor; } const void* getExtraStuff() const noexcept override { if (fDssiDescriptor != nullptr) { #if defined(HAVE_LIBLO) && !defined(BUILD_BRIDGE) return fUiFilename; #else return nullptr; #endif } return fRdfDescriptor; } #if defined(HAVE_LIBLO) && !defined(BUILD_BRIDGE) uintptr_t getUiBridgeProcessId() const noexcept override { return fThreadUI.getProcessId(); } #endif // ------------------------------------------------------------------- bool initLADSPA(const CarlaPluginPtr plugin, const char* const filename, const char* name, const char* const label, const uint options, const LADSPA_RDF_Descriptor* const rdfDescriptor) { CARLA_SAFE_ASSERT_RETURN(pData->engine != nullptr, false); // --------------------------------------------------------------- // first checks if (pData->client != nullptr) { pData->engine->setLastError("Plugin client is already registered"); return false; } if (filename == nullptr || filename[0] == '\0') { pData->engine->setLastError("null filename"); return false; } // --------------------------------------------------------------- // open DLL if (! pData->libOpen(filename)) { pData->engine->setLastError(pData->libError(filename)); return false; } // --------------------------------------------------------------- // get DLL main entry const LADSPA_Descriptor_Function descFn = pData->libSymbol("ladspa_descriptor"); if (descFn == nullptr) { pData->engine->setLastError("Could not find the LASDPA Descriptor in the plugin library"); return false; } // --------------------------------------------------------------- // get descriptor that matches label // if label is null, get first valid plugin const bool nullLabel = (label == nullptr || label[0] == '\0'); for (ulong d=0;; ++d) { try { fDescriptor = descFn(d); } catch(...) { carla_stderr2("Caught exception when trying to get LADSPA descriptor"); fDescriptor = nullptr; break; } if (fDescriptor == nullptr) break; if (fDescriptor->Label == nullptr || fDescriptor->Label[0] == '\0') { carla_stderr2("WARNING - Got an invalid label, will not use this plugin"); fDescriptor = nullptr; break; } if (fDescriptor->run == nullptr) { carla_stderr2("WARNING - Plugin has no run, cannot use it"); fDescriptor = nullptr; break; } if (nullLabel || std::strcmp(fDescriptor->Label, label) == 0) break; } if (fDescriptor == nullptr) { pData->engine->setLastError("Could not find the requested plugin label in the plugin library"); return false; } return init2(plugin, filename, name, options, rdfDescriptor); } bool initDSSI(const CarlaPluginPtr plugin, const char* const filename, const char* name, const char* const label, const uint options) { CARLA_SAFE_ASSERT_RETURN(pData->engine != nullptr, false); // --------------------------------------------------------------- // first checks if (pData->client != nullptr) { pData->engine->setLastError("Plugin client is already registered"); return false; } if (filename == nullptr || filename[0] == '\0') { pData->engine->setLastError("null filename"); return false; } // --------------------------------------------------------------- // open DLL if (! pData->libOpen(filename)) { pData->engine->setLastError(pData->libError(filename)); return false; } // --------------------------------------------------------------- // get DLL main entry const DSSI_Descriptor_Function descFn = pData->libSymbol("dssi_descriptor"); if (descFn == nullptr) { pData->engine->setLastError("Could not find the DSSI Descriptor in the plugin library"); return false; } // --------------------------------------------------------------- // get descriptor that matches label // if label is null, get first valid plugin const bool nullLabel = (label == nullptr || label[0] == '\0'); for (ulong d=0;; ++d) { try { fDssiDescriptor = descFn(d); } catch(...) { carla_stderr2("Caught exception when trying to get DSSI descriptor"); fDescriptor = nullptr; fDssiDescriptor = nullptr; break; } if (fDssiDescriptor == nullptr) break; fDescriptor = fDssiDescriptor->LADSPA_Plugin; if (fDescriptor == nullptr) { carla_stderr2("WARNING - Missing LADSPA interface, will not use this plugin"); fDssiDescriptor = nullptr; break; } if (fDescriptor->Label == nullptr || fDescriptor->Label[0] == '\0') { carla_stderr2("WARNING - Got an invalid label, will not use this plugin"); fDescriptor = nullptr; fDssiDescriptor = nullptr; break; } if (fDescriptor->run == nullptr) { carla_stderr2("WARNING - Plugin has no run, cannot use it"); fDescriptor = nullptr; fDssiDescriptor = nullptr; break; } if (nullLabel || std::strcmp(fDescriptor->Label, label) == 0) break; } if (fDescriptor == nullptr || fDssiDescriptor == nullptr) { pData->engine->setLastError("Could not find the requested plugin label in the plugin library"); return false; } // --------------------------------------------------------------- // check if uses global instance if (fDssiDescriptor->run_synth == nullptr && fDssiDescriptor->run_multiple_synths != nullptr) { pData->engine->setLastError("This plugin requires run_multiple_synths which is not supported"); return false; } return init2(plugin, filename, name, options, nullptr); } bool init2(const CarlaPluginPtr plugin, const char* const filename, const char* name, const uint options, const LADSPA_RDF_Descriptor* const rdfDescriptor) { // --------------------------------------------------------------- // check for fixed buffer size requirement fNeedsFixedBuffers = CarlaString(filename).contains("dssi-vst", true); if (fNeedsFixedBuffers && ! pData->engine->usesConstantBufferSize()) { pData->engine->setLastError("Cannot use this plugin under the current engine.\n" "The plugin requires a fixed block size which is not possible right now."); return false; } // --------------------------------------------------------------- // get info if (is_ladspa_rdf_descriptor_valid(rdfDescriptor, fDescriptor)) fRdfDescriptor = ladspa_rdf_dup(rdfDescriptor); if (name == nullptr || name[0] == '\0') { /**/ if (fRdfDescriptor != nullptr && fRdfDescriptor->Title != nullptr && fRdfDescriptor->Title[0] != '\0') name = fRdfDescriptor->Title; else if (fDescriptor->Name != nullptr && fDescriptor->Name[0] != '\0') name = fDescriptor->Name; else name = fDescriptor->Label; } pData->name = pData->engine->getUniquePluginName(name); pData->filename = carla_strdup(filename); // --------------------------------------------------------------- // register client pData->client = pData->engine->addClient(plugin); if (pData->client == nullptr || ! pData->client->isOk()) { pData->engine->setLastError("Failed to register plugin client"); return false; } // --------------------------------------------------------------- // initialize plugin if (! addInstance()) return false; // --------------------------------------------------------------- // find latency port index for (uint32_t i=0, iCtrl=0, count=getSafePortCount(); iPortDescriptors[i]); if (! LADSPA_IS_PORT_CONTROL(portType)) continue; const uint32_t index(iCtrl++); if (! LADSPA_IS_PORT_OUTPUT(portType)) continue; const char* const portName(fDescriptor->PortNames[i]); CARLA_SAFE_ASSERT_BREAK(portName != nullptr); if (std::strcmp(portName, "latency") == 0 || std::strcmp(portName, "_latency") == 0) { fLatencyIndex = static_cast(index); break; } } // --------------------------------------------------------------- // check for custom data extension if (fDssiDescriptor != nullptr && fDssiDescriptor->configure != nullptr) { if (char* const error = fDssiDescriptor->configure(fHandles.getFirst(nullptr), DSSI_CUSTOMDATA_EXTENSION_KEY, "")) { if (std::strcmp(error, "true") == 0 && fDssiDescriptor->get_custom_data != nullptr && fDssiDescriptor->set_custom_data != nullptr) fUsesCustomData = true; std::free(error); } } // --------------------------------------------------------------- // get engine options const EngineOptions& opts(pData->engine->getOptions()); #if defined(HAVE_LIBLO) && !defined(BUILD_BRIDGE) // --------------------------------------------------------------- // check for gui if (opts.oscEnabled && opts.oscPortUDP >= 0) { if (const char* const guiFilename = find_dssi_ui(filename, fDescriptor->Label)) { fUiFilename = guiFilename; CarlaString uiTitle; if (pData->uiTitle.isNotEmpty()) { uiTitle = pData->uiTitle; } else { uiTitle = pData->name; uiTitle += " (GUI)"; } fThreadUI.setData(guiFilename, fDescriptor->Label, uiTitle); } } #endif // --------------------------------------------------------------- // set options pData->options = 0x0; /**/ if (fLatencyIndex >= 0 || fNeedsFixedBuffers) pData->options |= PLUGIN_OPTION_FIXED_BUFFERS; else if (options & PLUGIN_OPTION_FIXED_BUFFERS) pData->options |= PLUGIN_OPTION_FIXED_BUFFERS; /**/ if (opts.forceStereo) pData->options |= PLUGIN_OPTION_FORCE_STEREO; else if (options & PLUGIN_OPTION_FORCE_STEREO) pData->options |= PLUGIN_OPTION_FORCE_STEREO; if (fDssiDescriptor != nullptr) { if (fDssiDescriptor->get_program != nullptr && fDssiDescriptor->select_program != nullptr) if (isPluginOptionEnabled(options, PLUGIN_OPTION_MAP_PROGRAM_CHANGES)) pData->options |= PLUGIN_OPTION_MAP_PROGRAM_CHANGES; if (fUsesCustomData) if (isPluginOptionEnabled(options, PLUGIN_OPTION_USE_CHUNKS)) pData->options |= PLUGIN_OPTION_USE_CHUNKS; if (fDssiDescriptor->run_synth != nullptr) { if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_CONTROL_CHANGES)) pData->options |= PLUGIN_OPTION_SEND_CONTROL_CHANGES; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_CHANNEL_PRESSURE)) pData->options |= PLUGIN_OPTION_SEND_CHANNEL_PRESSURE; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH)) pData->options |= PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_PITCHBEND)) pData->options |= PLUGIN_OPTION_SEND_PITCHBEND; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_ALL_SOUND_OFF)) pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; if (isPluginOptionInverseEnabled(options, PLUGIN_OPTION_SKIP_SENDING_NOTES)) pData->options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; } } return true; } // ------------------------------------------------------------------- private: LinkedList fHandles; const LADSPA_Descriptor* fDescriptor; const DSSI_Descriptor* fDssiDescriptor; const LADSPA_RDF_Descriptor* fRdfDescriptor; float** fAudioInBuffers; float** fAudioOutBuffers; float* fExtraStereoBuffer[2]; // used only if forcedStereoIn and audioOut == 2 float* fParamBuffers; snd_seq_event_t fMidiEvents[kPluginMaxMidiEvents]; int32_t fLatencyIndex; // -1 if invalid bool fForcedStereoIn; bool fForcedStereoOut; bool fNeedsFixedBuffers; bool fUsesCustomData; #if defined(HAVE_LIBLO) && !defined(BUILD_BRIDGE) CarlaOscData fOscData; CarlaThreadDSSIUI fThreadUI; const char* fUiFilename; #endif // ------------------------------------------------------------------- bool addInstance() { LADSPA_Handle handle; try { handle = fDescriptor->instantiate(fDescriptor, static_cast(pData->engine->getSampleRate())); } CARLA_SAFE_EXCEPTION_RETURN_ERR("LADSPA/DSSI instantiate", "Plugin failed to initialize"); for (uint32_t i=0, count=pData->param.count; iparam.data[i].rindex); CARLA_SAFE_ASSERT_CONTINUE(rindex >= 0); try { fDescriptor->connect_port(handle, static_cast(rindex), &fParamBuffers[i]); } CARLA_SAFE_EXCEPTION("LADSPA/DSSI connect_port"); } if (fHandles.append(handle)) return true; try { fDescriptor->cleanup(handle); } CARLA_SAFE_EXCEPTION("LADSPA/DSSI cleanup"); pData->engine->setLastError("Out of memory"); return false; } uint32_t getSafePortCount() const noexcept { if (fDescriptor->PortCount == 0) return 0; CARLA_SAFE_ASSERT_RETURN(fDescriptor->PortDescriptors != nullptr, 0); CARLA_SAFE_ASSERT_RETURN(fDescriptor->PortRangeHints != nullptr, 0); CARLA_SAFE_ASSERT_RETURN(fDescriptor->PortNames != nullptr, 0); return static_cast(fDescriptor->PortCount); } bool getSeparatedParameterNameOrUnit(const char* const paramName, char* const strBuf, const bool wantName) const noexcept { if (_getSeparatedParameterNameOrUnitImpl(paramName, strBuf, wantName, true)) return true; if (_getSeparatedParameterNameOrUnitImpl(paramName, strBuf, wantName, false)) return true; return false; } static bool _getSeparatedParameterNameOrUnitImpl(const char* const paramName, char* const strBuf, const bool wantName, const bool useBracket) noexcept { const char* const sepBracketStart = std::strstr(paramName, useBracket ? " [" : " ("); if (sepBracketStart == nullptr) return false; const char* const sepBracketEnd = std::strstr(sepBracketStart, useBracket ? "]" : ")"); if (sepBracketEnd == nullptr) return false; const std::size_t unitSize = static_cast(sepBracketEnd-sepBracketStart-2); if (unitSize > 7) // very unlikely to have such big unit return false; const std::size_t sepIndex = std::strlen(paramName)-unitSize-3; // just in case if (sepIndex > STR_MAX-3) return false; if (wantName) { std::strncpy(strBuf, paramName, sepIndex); strBuf[sepIndex] = '\0'; } else { std::strncpy(strBuf, paramName+(sepIndex+2), unitSize); strBuf[unitSize] = '\0'; } return true; } // ------------------------------------------------------------------- CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaPluginLADSPADSSI) }; // ------------------------------------------------------------------------------------------------------------------- CarlaPluginPtr CarlaPlugin::newLADSPA(const Initializer& init, const LADSPA_RDF_Descriptor* const rdfDescriptor) { carla_debug("CarlaPlugin::newLADSPA({%p, \"%s\", \"%s\", \"%s\", " P_INT64 ", %x}, %p)", init.engine, init.filename, init.name, init.label, init.uniqueId, init.options, rdfDescriptor); std::shared_ptr plugin(new CarlaPluginLADSPADSSI(init.engine, init.id)); if (! plugin->initLADSPA(plugin, init.filename, init.name, init.label, init.options, rdfDescriptor)) return nullptr; return plugin; } CarlaPluginPtr CarlaPlugin::newDSSI(const Initializer& init) { carla_debug("CarlaPlugin::newDSSI({%p, \"%s\", \"%s\", \"%s\", " P_INT64 ", %x})", init.engine, init.filename, init.name, init.label, init.uniqueId, init.options); std::shared_ptr plugin(new CarlaPluginLADSPADSSI(init.engine, init.id)); if (! plugin->initDSSI(plugin, init.filename, init.name, init.label, init.options)) return nullptr; return plugin; } // ------------------------------------------------------------------------------------------------------------------- CARLA_BACKEND_END_NAMESPACE Carla-2.4.2/source/backend/plugin/CarlaPluginLV2.cpp000066400000000000000000011366271420416754300222050ustar00rootroot00000000000000/* * Carla LV2 Plugin * Copyright (C) 2011-2022 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ // testing macros // #define LV2_UIS_ONLY_BRIDGES // #define LV2_UIS_ONLY_INPROCESS #include "CarlaPluginInternal.hpp" #include "CarlaEngine.hpp" #include "CarlaLv2Utils.hpp" #include "CarlaBackendUtils.hpp" #include "CarlaBase64Utils.hpp" #include "CarlaEngineUtils.hpp" #include "CarlaPipeUtils.hpp" #include "CarlaPluginUI.hpp" #include "CarlaScopeUtils.hpp" #include "Lv2AtomRingBuffer.hpp" #include "../modules/lilv/config/lilv_config.h" extern "C" { #include "rtmempool/rtmempool-lv2.h" } #include "water/files/File.h" #include "water/misc/Time.h" #ifdef CARLA_OS_MAC # include "CarlaMacUtils.hpp" # if defined(CARLA_OS_64BIT) && defined(HAVE_LIBMAGIC) && ! defined(BUILD_BRIDGE_ALTERNATIVE_ARCH) # define ADAPT_FOR_APPLE_SILLICON # include "CarlaBinaryUtils.hpp" # endif #endif #include #include using water::File; #define URI_CARLA_ATOM_WORKER_IN "http://kxstudio.sf.net/ns/carla/atomWorkerIn" #define URI_CARLA_ATOM_WORKER_RESP "http://kxstudio.sf.net/ns/carla/atomWorkerResp" #define URI_CARLA_PARAMETER_CHANGE "http://kxstudio.sf.net/ns/carla/parameterChange" CARLA_BACKEND_START_NAMESPACE // ------------------------------------------------------------------------------------------------------------------- // Fallback data static const CustomData kCustomDataFallback = { nullptr, nullptr, nullptr }; static /* */ CustomData kCustomDataFallbackNC = { nullptr, nullptr, nullptr }; static const ExternalMidiNote kExternalMidiNoteFallback = { -1, 0, 0 }; static const char* const kUnmapFallback = "urn:null"; // ------------------------------------------------------------------------------------------------------------------- // Maximum default buffer size const uint MAX_DEFAULT_BUFFER_SIZE = 8192; // 0x2000 // Extra Plugin Hints const uint PLUGIN_HAS_EXTENSION_OPTIONS = 0x01000; const uint PLUGIN_HAS_EXTENSION_PROGRAMS = 0x02000; const uint PLUGIN_HAS_EXTENSION_STATE = 0x04000; const uint PLUGIN_HAS_EXTENSION_WORKER = 0x08000; const uint PLUGIN_HAS_EXTENSION_INLINE_DISPLAY = 0x10000; const uint PLUGIN_HAS_EXTENSION_MIDNAM = 0x20000; // LV2 Event Data/Types const uint CARLA_EVENT_DATA_ATOM = 0x01; const uint CARLA_EVENT_DATA_EVENT = 0x02; const uint CARLA_EVENT_DATA_MIDI_LL = 0x04; const uint CARLA_EVENT_TYPE_MESSAGE = 0x10; // unused const uint CARLA_EVENT_TYPE_MIDI = 0x20; const uint CARLA_EVENT_TYPE_TIME = 0x40; // LV2 URI Map Ids enum CarlaLv2URIDs { kUridNull = 0, kUridAtomBlank, kUridAtomBool, kUridAtomChunk, kUridAtomDouble, kUridAtomEvent, kUridAtomFloat, kUridAtomInt, kUridAtomLiteral, kUridAtomLong, kUridAtomNumber, kUridAtomObject, kUridAtomPath, kUridAtomProperty, kUridAtomResource, kUridAtomSequence, kUridAtomSound, kUridAtomString, kUridAtomTuple, kUridAtomURI, kUridAtomURID, kUridAtomVector, kUridAtomTransferAtom, kUridAtomTransferEvent, kUridBufMaxLength, kUridBufMinLength, kUridBufNominalLength, kUridBufSequenceSize, kUridLogError, kUridLogNote, kUridLogTrace, kUridLogWarning, kUridPatchSet, kUridPatchProperty, kUridPatchSubject, kUridPatchValue, // time base type kUridTimePosition, // time values kUridTimeBar, kUridTimeBarBeat, kUridTimeBeat, kUridTimeBeatUnit, kUridTimeBeatsPerBar, kUridTimeBeatsPerMinute, kUridTimeFrame, kUridTimeFramesPerSecond, kUridTimeSpeed, kUridTimeTicksPerBeat, kUridMidiEvent, kUridParamSampleRate, // ui stuff kUridBackgroundColor, kUridForegroundColor, kUridScaleFactor, kUridWindowTitle, // custom carla props kUridCarlaAtomWorkerIn, kUridCarlaAtomWorkerResp, kUridCarlaParameterChange, kUridCarlaTransientWindowId, // count kUridCount }; // LV2 Feature Ids enum CarlaLv2Features { // DSP features kFeatureIdBufSizeBounded = 0, kFeatureIdBufSizeFixed, kFeatureIdBufSizePowerOf2, kFeatureIdEvent, kFeatureIdHardRtCapable, kFeatureIdInPlaceBroken, kFeatureIdIsLive, kFeatureIdLogs, kFeatureIdOptions, kFeatureIdPrograms, kFeatureIdResizePort, kFeatureIdRtMemPool, kFeatureIdRtMemPoolOld, kFeatureIdStateFreePath, kFeatureIdStateMakePath, kFeatureIdStateMapPath, kFeatureIdStrictBounds, kFeatureIdUriMap, kFeatureIdUridMap, kFeatureIdUridUnmap, kFeatureIdWorker, kFeatureIdInlineDisplay, kFeatureIdMidnam, kFeatureCountPlugin, // UI features kFeatureIdUiDataAccess = kFeatureCountPlugin, kFeatureIdUiInstanceAccess, kFeatureIdUiIdleInterface, kFeatureIdUiFixedSize, kFeatureIdUiMakeResident, kFeatureIdUiMakeResident2, kFeatureIdUiNoUserResize, kFeatureIdUiParent, kFeatureIdUiPortMap, kFeatureIdUiPortSubscribe, kFeatureIdUiResize, kFeatureIdUiRequestValue, kFeatureIdUiTouch, kFeatureIdExternalUi, kFeatureIdExternalUiOld, kFeatureCountAll }; // LV2 Feature Ids (special state handlers) enum CarlaLv2StateFeatures { kStateFeatureIdFreePath, kStateFeatureIdMakePath, kStateFeatureIdMapPath, kStateFeatureIdWorker, kStateFeatureCountAll }; // ------------------------------------------------------------------------------------------------------------------- struct Lv2EventData { uint32_t type; uint32_t rindex; CarlaEngineEventPort* port; union { LV2_Atom_Buffer* atom; LV2_Event_Buffer* event; LV2_MIDI midi; }; Lv2EventData() noexcept : type(0x0), rindex(0), port(nullptr) {} ~Lv2EventData() noexcept { if (port != nullptr) { delete port; port = nullptr; } const uint32_t rtype(type); type = 0x0; if (rtype & CARLA_EVENT_DATA_ATOM) { CARLA_SAFE_ASSERT_RETURN(atom != nullptr,); std::free(atom); atom = nullptr; } else if (rtype & CARLA_EVENT_DATA_EVENT) { CARLA_SAFE_ASSERT_RETURN(event != nullptr,); std::free(event); event = nullptr; } else if (rtype & CARLA_EVENT_DATA_MIDI_LL) { CARLA_SAFE_ASSERT_RETURN(midi.data != nullptr,); delete[] midi.data; midi.data = nullptr; } } CARLA_DECLARE_NON_COPY_STRUCT(Lv2EventData) }; struct CarlaPluginLV2EventData { uint32_t count; Lv2EventData* data; Lv2EventData* ctrl; // default port, either this->data[x] or pData->portIn/Out uint32_t ctrlIndex; CarlaPluginLV2EventData() noexcept : count(0), data(nullptr), ctrl(nullptr), ctrlIndex(0) {} ~CarlaPluginLV2EventData() noexcept { CARLA_SAFE_ASSERT_INT(count == 0, count); CARLA_SAFE_ASSERT(data == nullptr); CARLA_SAFE_ASSERT(ctrl == nullptr); CARLA_SAFE_ASSERT_INT(ctrlIndex == 0, ctrlIndex); } void createNew(const uint32_t newCount) { CARLA_SAFE_ASSERT_INT(count == 0, count); CARLA_SAFE_ASSERT_INT(ctrlIndex == 0, ctrlIndex); CARLA_SAFE_ASSERT_RETURN(data == nullptr,); CARLA_SAFE_ASSERT_RETURN(ctrl == nullptr,); CARLA_SAFE_ASSERT_RETURN(newCount > 0,); data = new Lv2EventData[newCount]; count = newCount; ctrl = nullptr; ctrlIndex = 0; } void clear(CarlaEngineEventPort* const portToIgnore) noexcept { if (data != nullptr) { for (uint32_t i=0; i < count; ++i) { if (data[i].port != nullptr) { if (data[i].port != portToIgnore) delete data[i].port; data[i].port = nullptr; } } delete[] data; data = nullptr; } count = 0; ctrl = nullptr; ctrlIndex = 0; } void initBuffers() const noexcept { for (uint32_t i=0; i < count; ++i) { if (data[i].port != nullptr && (ctrl == nullptr || data[i].port != ctrl->port)) data[i].port->initBuffer(); } } CARLA_DECLARE_NON_COPY_STRUCT(CarlaPluginLV2EventData) }; // ------------------------------------------------------------------------------------------------------------------- struct CarlaPluginLV2Options { enum OptIndex { MaxBlockLenth = 0, MinBlockLenth, NominalBlockLenth, SequenceSize, SampleRate, TransientWinId, BackgroundColor, ForegroundColor, ScaleFactor, WindowTitle, Null, Count }; int maxBufferSize; int minBufferSize; int nominalBufferSize; int sequenceSize; float sampleRate; int64_t transientWinId; uint32_t bgColor; uint32_t fgColor; float uiScale; const char* windowTitle; LV2_Options_Option opts[Count]; CarlaPluginLV2Options() noexcept : maxBufferSize(0), minBufferSize(0), nominalBufferSize(0), sequenceSize(MAX_DEFAULT_BUFFER_SIZE), sampleRate(0.0), transientWinId(0), bgColor(0x000000ff), fgColor(0xffffffff), uiScale(1.0f), windowTitle(nullptr) { LV2_Options_Option& optMaxBlockLenth(opts[MaxBlockLenth]); optMaxBlockLenth.context = LV2_OPTIONS_INSTANCE; optMaxBlockLenth.subject = 0; optMaxBlockLenth.key = kUridBufMaxLength; optMaxBlockLenth.size = sizeof(int); optMaxBlockLenth.type = kUridAtomInt; optMaxBlockLenth.value = &maxBufferSize; LV2_Options_Option& optMinBlockLenth(opts[MinBlockLenth]); optMinBlockLenth.context = LV2_OPTIONS_INSTANCE; optMinBlockLenth.subject = 0; optMinBlockLenth.key = kUridBufMinLength; optMinBlockLenth.size = sizeof(int); optMinBlockLenth.type = kUridAtomInt; optMinBlockLenth.value = &minBufferSize; LV2_Options_Option& optNominalBlockLenth(opts[NominalBlockLenth]); optNominalBlockLenth.context = LV2_OPTIONS_INSTANCE; optNominalBlockLenth.subject = 0; optNominalBlockLenth.key = kUridBufNominalLength; optNominalBlockLenth.size = sizeof(int); optNominalBlockLenth.type = kUridAtomInt; optNominalBlockLenth.value = &nominalBufferSize; LV2_Options_Option& optSequenceSize(opts[SequenceSize]); optSequenceSize.context = LV2_OPTIONS_INSTANCE; optSequenceSize.subject = 0; optSequenceSize.key = kUridBufSequenceSize; optSequenceSize.size = sizeof(int); optSequenceSize.type = kUridAtomInt; optSequenceSize.value = &sequenceSize; LV2_Options_Option& optBackgroundColor(opts[BackgroundColor]); optBackgroundColor.context = LV2_OPTIONS_INSTANCE; optBackgroundColor.subject = 0; optBackgroundColor.key = kUridBackgroundColor; optBackgroundColor.size = sizeof(int32_t); optBackgroundColor.type = kUridAtomInt; optBackgroundColor.value = &bgColor; LV2_Options_Option& optForegroundColor(opts[ForegroundColor]); optForegroundColor.context = LV2_OPTIONS_INSTANCE; optForegroundColor.subject = 0; optForegroundColor.key = kUridForegroundColor; optForegroundColor.size = sizeof(int32_t); optForegroundColor.type = kUridAtomInt; optForegroundColor.value = &fgColor; LV2_Options_Option& optScaleFactor(opts[ScaleFactor]); optScaleFactor.context = LV2_OPTIONS_INSTANCE; optScaleFactor.subject = 0; optScaleFactor.key = kUridScaleFactor; optScaleFactor.size = sizeof(float); optScaleFactor.type = kUridAtomFloat; optScaleFactor.value = &uiScale; LV2_Options_Option& optSampleRate(opts[SampleRate]); optSampleRate.context = LV2_OPTIONS_INSTANCE; optSampleRate.subject = 0; optSampleRate.key = kUridParamSampleRate; optSampleRate.size = sizeof(float); optSampleRate.type = kUridAtomFloat; optSampleRate.value = &sampleRate; LV2_Options_Option& optTransientWinId(opts[TransientWinId]); optTransientWinId.context = LV2_OPTIONS_INSTANCE; optTransientWinId.subject = 0; optTransientWinId.key = kUridCarlaTransientWindowId; optTransientWinId.size = sizeof(int64_t); optTransientWinId.type = kUridAtomLong; optTransientWinId.value = &transientWinId; LV2_Options_Option& optWindowTitle(opts[WindowTitle]); optWindowTitle.context = LV2_OPTIONS_INSTANCE; optWindowTitle.subject = 0; optWindowTitle.key = kUridWindowTitle; optWindowTitle.size = 0; optWindowTitle.type = kUridAtomString; optWindowTitle.value = nullptr; LV2_Options_Option& optNull(opts[Null]); optNull.context = LV2_OPTIONS_INSTANCE; optNull.subject = 0; optNull.key = kUridNull; optNull.size = 0; optNull.type = kUridNull; optNull.value = nullptr; } ~CarlaPluginLV2Options() noexcept { LV2_Options_Option& optWindowTitle(opts[WindowTitle]); optWindowTitle.size = 0; optWindowTitle.value = nullptr; if (windowTitle != nullptr) { std::free(const_cast(windowTitle)); windowTitle = nullptr; } } CARLA_DECLARE_NON_COPY_STRUCT(CarlaPluginLV2Options); }; // ------------------------------------------------------------------------------------------------------------------- class CarlaPluginLV2; class CarlaPipeServerLV2 : public CarlaPipeServer { public: enum UiState { UiNone = 0, UiHide, UiShow, UiCrashed }; CarlaPipeServerLV2(CarlaEngine* const engine, CarlaPluginLV2* const plugin) : kEngine(engine), kPlugin(plugin), fFilename(), fPluginURI(), fUiURI(), fUiState(UiNone) {} ~CarlaPipeServerLV2() noexcept override { CARLA_SAFE_ASSERT_INT(fUiState == UiNone, fUiState); } UiState getAndResetUiState() noexcept { const UiState uiState(fUiState); fUiState = UiNone; return uiState; } void setData(const char* const filename, const char* const pluginURI, const char* const uiURI) noexcept { fFilename = filename; fPluginURI = pluginURI; fUiURI = uiURI; } bool startPipeServer(const int size) noexcept { char sampleRateStr[32]; { const CarlaScopedLocale csl; std::snprintf(sampleRateStr, 31, "%.12g", kEngine->getSampleRate()); } sampleRateStr[31] = '\0'; const ScopedEngineEnvironmentLocker _seel(kEngine); const CarlaScopedEnvVar _sev1("LV2_PATH", kEngine->getOptions().pathLV2); #ifdef CARLA_OS_LINUX const CarlaScopedEnvVar _sev2("LD_PRELOAD", nullptr); #endif carla_setenv("CARLA_SAMPLE_RATE", sampleRateStr); return CarlaPipeServer::startPipeServer(fFilename, fPluginURI, fUiURI, size); } void writeUiTitleMessage(const char* const title) const noexcept { CARLA_SAFE_ASSERT_RETURN(title != nullptr && title[0] != '\0',); const CarlaMutexLocker cml(getPipeLock()); if (! _writeMsgBuffer("uiTitle\n", 8)) return; if (! writeAndFixMessage(title)) return; flushMessages(); } protected: // returns true if msg was handled bool msgReceived(const char* const msg) noexcept override; private: CarlaEngine* const kEngine; CarlaPluginLV2* const kPlugin; CarlaString fFilename; CarlaString fPluginURI; CarlaString fUiURI; UiState fUiState; CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaPipeServerLV2) }; // ------------------------------------------------------------------------------------------------------------------- static void initAtomForge(LV2_Atom_Forge& atomForge) noexcept { carla_zeroStruct(atomForge); atomForge.Bool = kUridAtomBool; atomForge.Chunk = kUridAtomChunk; atomForge.Double = kUridAtomDouble; atomForge.Float = kUridAtomFloat; atomForge.Int = kUridAtomInt; atomForge.Literal = kUridAtomLiteral; atomForge.Long = kUridAtomLong; atomForge.Object = kUridAtomObject; atomForge.Path = kUridAtomPath; atomForge.Property = kUridAtomProperty; atomForge.Sequence = kUridAtomSequence; atomForge.String = kUridAtomString; atomForge.Tuple = kUridAtomTuple; atomForge.URI = kUridAtomURI; atomForge.URID = kUridAtomURID; atomForge.Vector = kUridAtomVector; #if defined(__clang__) # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wdeprecated-declarations" #elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wdeprecated-declarations" #endif atomForge.Blank = kUridAtomBlank; atomForge.Resource = kUridAtomResource; #if defined(__clang__) # pragma clang diagnostic pop #elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) # pragma GCC diagnostic pop #endif } // ------------------------------------------------------------------------------------------------------------------- class CarlaPluginLV2 : public CarlaPlugin, private CarlaPluginUI::Callback { public: CarlaPluginLV2(CarlaEngine* const engine, const uint id) : CarlaPlugin(engine, id), fHandle(nullptr), fHandle2(nullptr), fDescriptor(nullptr), fRdfDescriptor(nullptr), fAudioInBuffers(nullptr), fAudioOutBuffers(nullptr), fCvInBuffers(nullptr), fCvOutBuffers(nullptr), fParamBuffers(nullptr), fHasLoadDefaultState(false), fHasThreadSafeRestore(false), fNeedsFixedBuffers(false), fNeedsUiClose(false), fInlineDisplayNeedsRedraw(false), fInlineDisplayLastRedrawTime(0), fLatencyIndex(-1), fStrictBounds(-1), fAtomBufferEvIn(), fAtomBufferUiOut(), fAtomBufferWorkerIn(), fAtomBufferWorkerResp(), fAtomBufferUiOutTmpData(nullptr), fAtomBufferWorkerInTmpData(nullptr), fEventsIn(), fEventsOut(), fLv2Options(), fPipeServer(engine, this), fCustomURIDs(kUridCount, std::string("urn:null")), fFirstActive(true), fLastStateChunk(nullptr), fLastTimeInfo(), fFilePathURI(), fExt(), fUI() { carla_debug("CarlaPluginLV2::CarlaPluginLV2(%p, %i)", engine, id); CARLA_SAFE_ASSERT(fCustomURIDs.size() == kUridCount); carla_zeroPointers(fFeatures, kFeatureCountAll+1); carla_zeroPointers(fStateFeatures, kStateFeatureCountAll+1); } ~CarlaPluginLV2() override { carla_debug("CarlaPluginLV2::~CarlaPluginLV2()"); fInlineDisplayNeedsRedraw = false; // close UI if (fUI.type != UI::TYPE_NULL) { showCustomUI(false); if (fUI.type == UI::TYPE_BRIDGE) { fPipeServer.stopPipeServer(pData->engine->getOptions().uiBridgesTimeout); } else { if (fFeatures[kFeatureIdUiDataAccess] != nullptr && fFeatures[kFeatureIdUiDataAccess]->data != nullptr) delete (LV2_Extension_Data_Feature*)fFeatures[kFeatureIdUiDataAccess]->data; if (fFeatures[kFeatureIdUiPortMap] != nullptr && fFeatures[kFeatureIdUiPortMap]->data != nullptr) delete (LV2UI_Port_Map*)fFeatures[kFeatureIdUiPortMap]->data; if (fFeatures[kFeatureIdUiRequestValue] != nullptr && fFeatures[kFeatureIdUiRequestValue]->data != nullptr) delete (LV2UI_Request_Value*)fFeatures[kFeatureIdUiRequestValue]->data; if (fFeatures[kFeatureIdUiResize] != nullptr && fFeatures[kFeatureIdUiResize]->data != nullptr) delete (LV2UI_Resize*)fFeatures[kFeatureIdUiResize]->data; if (fFeatures[kFeatureIdUiTouch] != nullptr && fFeatures[kFeatureIdUiTouch]->data != nullptr) delete (LV2UI_Touch*)fFeatures[kFeatureIdUiTouch]->data; if (fFeatures[kFeatureIdExternalUi] != nullptr && fFeatures[kFeatureIdExternalUi]->data != nullptr) delete (LV2_External_UI_Host*)fFeatures[kFeatureIdExternalUi]->data; fUI.descriptor = nullptr; pData->uiLibClose(); } #ifndef LV2_UIS_ONLY_BRIDGES if (fUI.window != nullptr) { delete fUI.window; fUI.window = nullptr; } #endif fUI.rdfDescriptor = nullptr; } pData->singleMutex.lock(); pData->masterMutex.lock(); if (pData->client != nullptr && pData->client->isActive()) pData->client->deactivate(true); if (pData->active) { deactivate(); pData->active = false; } if (fExt.state != nullptr) { const File tmpDir(handleStateMapToAbsolutePath(false, false, true, ".")); if (tmpDir.exists()) tmpDir.deleteRecursively(); } if (fDescriptor != nullptr) { if (fDescriptor->cleanup != nullptr) { if (fHandle != nullptr) fDescriptor->cleanup(fHandle); if (fHandle2 != nullptr) fDescriptor->cleanup(fHandle2); } fHandle = nullptr; fHandle2 = nullptr; fDescriptor = nullptr; } if (fRdfDescriptor != nullptr) { delete fRdfDescriptor; fRdfDescriptor = nullptr; } if (fFeatures[kFeatureIdEvent] != nullptr && fFeatures[kFeatureIdEvent]->data != nullptr) delete (LV2_Event_Feature*)fFeatures[kFeatureIdEvent]->data; if (fFeatures[kFeatureIdLogs] != nullptr && fFeatures[kFeatureIdLogs]->data != nullptr) delete (LV2_Log_Log*)fFeatures[kFeatureIdLogs]->data; if (fFeatures[kFeatureIdStateFreePath] != nullptr && fFeatures[kFeatureIdStateFreePath]->data != nullptr) delete (LV2_State_Free_Path*)fFeatures[kFeatureIdStateFreePath]->data; if (fFeatures[kFeatureIdStateMakePath] != nullptr && fFeatures[kFeatureIdStateMakePath]->data != nullptr) delete (LV2_State_Make_Path*)fFeatures[kFeatureIdStateMakePath]->data; if (fFeatures[kFeatureIdStateMapPath] != nullptr && fFeatures[kFeatureIdStateMapPath]->data != nullptr) delete (LV2_State_Map_Path*)fFeatures[kFeatureIdStateMapPath]->data; if (fFeatures[kFeatureIdPrograms] != nullptr && fFeatures[kFeatureIdPrograms]->data != nullptr) delete (LV2_Programs_Host*)fFeatures[kFeatureIdPrograms]->data; if (fFeatures[kFeatureIdResizePort] != nullptr && fFeatures[kFeatureIdResizePort]->data != nullptr) delete (LV2_Resize_Port_Resize*)fFeatures[kFeatureIdResizePort]->data; if (fFeatures[kFeatureIdRtMemPool] != nullptr && fFeatures[kFeatureIdRtMemPool]->data != nullptr) delete (LV2_RtMemPool_Pool*)fFeatures[kFeatureIdRtMemPool]->data; if (fFeatures[kFeatureIdRtMemPoolOld] != nullptr && fFeatures[kFeatureIdRtMemPoolOld]->data != nullptr) delete (LV2_RtMemPool_Pool_Deprecated*)fFeatures[kFeatureIdRtMemPoolOld]->data; if (fFeatures[kFeatureIdUriMap] != nullptr && fFeatures[kFeatureIdUriMap]->data != nullptr) delete (LV2_URI_Map_Feature*)fFeatures[kFeatureIdUriMap]->data; if (fFeatures[kFeatureIdUridMap] != nullptr && fFeatures[kFeatureIdUridMap]->data != nullptr) delete (LV2_URID_Map*)fFeatures[kFeatureIdUridMap]->data; if (fFeatures[kFeatureIdUridUnmap] != nullptr && fFeatures[kFeatureIdUridUnmap]->data != nullptr) delete (LV2_URID_Unmap*)fFeatures[kFeatureIdUridUnmap]->data; if (fFeatures[kFeatureIdWorker] != nullptr && fFeatures[kFeatureIdWorker]->data != nullptr) delete (LV2_Worker_Schedule*)fFeatures[kFeatureIdWorker]->data; if (fFeatures[kFeatureIdInlineDisplay] != nullptr && fFeatures[kFeatureIdInlineDisplay]->data != nullptr) delete (LV2_Inline_Display*)fFeatures[kFeatureIdInlineDisplay]->data; if (fFeatures[kFeatureIdMidnam] != nullptr && fFeatures[kFeatureIdMidnam]->data != nullptr) delete (LV2_Midnam*)fFeatures[kFeatureIdMidnam]->data; for (uint32_t i=0; i < kFeatureCountAll; ++i) { if (fFeatures[i] != nullptr) { delete fFeatures[i]; fFeatures[i] = nullptr; } } if (fStateFeatures[kStateFeatureIdMakePath] != nullptr && fStateFeatures[kStateFeatureIdMakePath]->data != nullptr) delete (LV2_State_Make_Path*)fStateFeatures[kStateFeatureIdMakePath]->data; if (fStateFeatures[kStateFeatureIdMapPath] != nullptr && fStateFeatures[kStateFeatureIdMapPath]->data != nullptr) delete (LV2_State_Map_Path*)fStateFeatures[kStateFeatureIdMapPath]->data; for (uint32_t i=0; i < kStateFeatureCountAll; ++i) { if (fStateFeatures[i] != nullptr) { delete fStateFeatures[i]; fStateFeatures[i] = nullptr; } } if (fLastStateChunk != nullptr) { std::free(fLastStateChunk); fLastStateChunk = nullptr; } if (fAtomBufferUiOutTmpData != nullptr) { delete[] fAtomBufferUiOutTmpData; fAtomBufferUiOutTmpData = nullptr; } if (fAtomBufferWorkerInTmpData != nullptr) { delete[] fAtomBufferWorkerInTmpData; fAtomBufferWorkerInTmpData = nullptr; } clearBuffers(); } // ------------------------------------------------------------------- // Information (base) PluginType getType() const noexcept override { return PLUGIN_LV2; } PluginCategory getCategory() const noexcept override { CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr, CarlaPlugin::getCategory()); const LV2_Property cat1(fRdfDescriptor->Type[0]); const LV2_Property cat2(fRdfDescriptor->Type[1]); if (LV2_IS_DELAY(cat1, cat2)) return PLUGIN_CATEGORY_DELAY; if (LV2_IS_DISTORTION(cat1, cat2)) return PLUGIN_CATEGORY_OTHER; if (LV2_IS_DYNAMICS(cat1, cat2)) return PLUGIN_CATEGORY_DYNAMICS; if (LV2_IS_EQ(cat1, cat2)) return PLUGIN_CATEGORY_EQ; if (LV2_IS_FILTER(cat1, cat2)) return PLUGIN_CATEGORY_FILTER; if (LV2_IS_GENERATOR(cat1, cat2)) return PLUGIN_CATEGORY_SYNTH; if (LV2_IS_MODULATOR(cat1, cat2)) return PLUGIN_CATEGORY_MODULATOR; if (LV2_IS_REVERB(cat1, cat2)) return PLUGIN_CATEGORY_DELAY; if (LV2_IS_SIMULATOR(cat1, cat2)) return PLUGIN_CATEGORY_OTHER; if (LV2_IS_SPATIAL(cat1, cat2)) return PLUGIN_CATEGORY_OTHER; if (LV2_IS_SPECTRAL(cat1, cat2)) return PLUGIN_CATEGORY_UTILITY; if (LV2_IS_UTILITY(cat1, cat2)) return PLUGIN_CATEGORY_UTILITY; return CarlaPlugin::getCategory(); } uint32_t getLatencyInFrames() const noexcept override { if (fLatencyIndex < 0 || fParamBuffers == nullptr) return 0; const float latency(fParamBuffers[fLatencyIndex]); CARLA_SAFE_ASSERT_RETURN(latency >= 0.0f, 0); return static_cast(latency); } // ------------------------------------------------------------------- // Information (count) uint32_t getMidiInCount() const noexcept override { CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr, 0); uint32_t count = 0; for (uint32_t i=0; i < fRdfDescriptor->PortCount; ++i) { const LV2_Property portTypes(fRdfDescriptor->Ports[i].Types); if (LV2_IS_PORT_INPUT(portTypes) && LV2_PORT_SUPPORTS_MIDI_EVENT(portTypes)) ++count; } return count; } uint32_t getMidiOutCount() const noexcept override { CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr, 0); uint32_t count = 0; for (uint32_t i=0; i < fRdfDescriptor->PortCount; ++i) { const LV2_Property portTypes(fRdfDescriptor->Ports[i].Types); if (LV2_IS_PORT_OUTPUT(portTypes) && LV2_PORT_SUPPORTS_MIDI_EVENT(portTypes)) ++count; } return count; } uint32_t getParameterScalePointCount(const uint32_t parameterId) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr, 0); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, 0); const int32_t rindex(pData->param.data[parameterId].rindex); if (rindex < static_cast(fRdfDescriptor->PortCount)) { const LV2_RDF_Port* const port(&fRdfDescriptor->Ports[rindex]); return port->ScalePointCount; } return 0; } // ------------------------------------------------------------------- // Information (current data) uint getAudioPortHints(bool isOutput, uint32_t portIndex) const noexcept override { uint hints = 0x0; for (uint32_t i=0, j=0; iPortCount; ++i) { LV2_RDF_Port& port(fRdfDescriptor->Ports[i]); if (! LV2_IS_PORT_AUDIO(port.Types)) continue; if (isOutput) { if (! LV2_IS_PORT_OUTPUT(port.Types)) continue; } else { if (! LV2_IS_PORT_INPUT(port.Types)) continue; } if (j++ != portIndex) continue; if (LV2_IS_PORT_SIDECHAIN(port.Properties)) hints |= AUDIO_PORT_IS_SIDECHAIN; break; } return hints; } // ------------------------------------------------------------------- // Information (per-plugin data) uint getOptionsAvailable() const noexcept override { uint options = 0x0; // can't disable fixed buffers if using latency or MIDI output if (fLatencyIndex == -1 && getMidiOutCount() == 0 && ! fNeedsFixedBuffers) options |= PLUGIN_OPTION_FIXED_BUFFERS; // can't disable forced stereo if enabled in the engine if (pData->engine->getOptions().forceStereo) pass(); // if there are event outputs, we can't force stereo else if (fEventsOut.count != 0) pass(); // if inputs or outputs are just 1, then yes we can force stereo else if ((pData->audioIn.count == 1 || pData->audioOut.count == 1) || fHandle2 != nullptr) options |= PLUGIN_OPTION_FORCE_STEREO; if (fExt.programs != nullptr) options |= PLUGIN_OPTION_MAP_PROGRAM_CHANGES; if (getMidiInCount() != 0) { options |= PLUGIN_OPTION_SEND_CONTROL_CHANGES; options |= PLUGIN_OPTION_SEND_CHANNEL_PRESSURE; options |= PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH; options |= PLUGIN_OPTION_SEND_PITCHBEND; options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; } return options; } float getParameterValue(const uint32_t parameterId) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fParamBuffers != nullptr, 0.0f); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, 0.0f); if (pData->param.data[parameterId].type == PARAMETER_INPUT) { if (pData->param.data[parameterId].hints & PARAMETER_IS_STRICT_BOUNDS) pData->param.ranges[parameterId].fixValue(fParamBuffers[parameterId]); } else { if (fStrictBounds >= 0 && (pData->param.data[parameterId].hints & PARAMETER_IS_STRICT_BOUNDS) == 0) pData->param.ranges[parameterId].fixValue(fParamBuffers[parameterId]); } return fParamBuffers[parameterId]; } float getParameterScalePointValue(const uint32_t parameterId, const uint32_t scalePointId) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr, 0.0f); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, 0.0f); const int32_t rindex(pData->param.data[parameterId].rindex); if (rindex < static_cast(fRdfDescriptor->PortCount)) { const LV2_RDF_Port* const port(&fRdfDescriptor->Ports[rindex]); CARLA_SAFE_ASSERT_RETURN(scalePointId < port->ScalePointCount, 0.0f); const LV2_RDF_PortScalePoint* const portScalePoint(&port->ScalePoints[scalePointId]); return portScalePoint->Value; } return 0.0f; } bool getLabel(char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr, false); CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor->URI != nullptr, false); std::strncpy(strBuf, fRdfDescriptor->URI, STR_MAX); return true; } bool getMaker(char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr, false); if (fRdfDescriptor->Author != nullptr) { std::strncpy(strBuf, fRdfDescriptor->Author, STR_MAX); return true; } return false; } bool getCopyright(char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr, false); if (fRdfDescriptor->License != nullptr) { std::strncpy(strBuf, fRdfDescriptor->License, STR_MAX); return true; } return false; } bool getRealName(char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr, false); if (fRdfDescriptor->Name != nullptr) { std::strncpy(strBuf, fRdfDescriptor->Name, STR_MAX); return true; } return false; } bool getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr, false); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false); int32_t rindex = pData->param.data[parameterId].rindex; CARLA_SAFE_ASSERT_RETURN(rindex >= 0, false); if (rindex < static_cast(fRdfDescriptor->PortCount)) { std::strncpy(strBuf, fRdfDescriptor->Ports[rindex].Name, STR_MAX); return true; } rindex -= static_cast(fRdfDescriptor->PortCount); if (rindex < static_cast(fRdfDescriptor->ParameterCount)) { std::strncpy(strBuf, fRdfDescriptor->Parameters[rindex].Label, STR_MAX); return true; } return CarlaPlugin::getParameterName(parameterId, strBuf); } bool getParameterSymbol(const uint32_t parameterId, char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr, false); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false); int32_t rindex = pData->param.data[parameterId].rindex; CARLA_SAFE_ASSERT_RETURN(rindex >= 0, false); if (rindex < static_cast(fRdfDescriptor->PortCount)) { std::strncpy(strBuf, fRdfDescriptor->Ports[rindex].Symbol, STR_MAX); return true; } rindex -= static_cast(fRdfDescriptor->PortCount); if (rindex < static_cast(fRdfDescriptor->ParameterCount)) { std::strncpy(strBuf, fRdfDescriptor->Parameters[rindex].URI, STR_MAX); return true; } return CarlaPlugin::getParameterSymbol(parameterId, strBuf); } bool getParameterUnit(const uint32_t parameterId, char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr, false); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false); LV2_RDF_PortUnit* portUnit = nullptr; int32_t rindex = pData->param.data[parameterId].rindex; CARLA_SAFE_ASSERT_RETURN(rindex >= 0, false); if (rindex < static_cast(fRdfDescriptor->PortCount)) { portUnit = &fRdfDescriptor->Ports[rindex].Unit; } else { rindex -= static_cast(fRdfDescriptor->PortCount); if (rindex < static_cast(fRdfDescriptor->ParameterCount)) { portUnit = &fRdfDescriptor->Parameters[rindex].Unit; } } if (portUnit != nullptr) { if (LV2_HAVE_PORT_UNIT_SYMBOL(portUnit->Hints) && portUnit->Symbol != nullptr) { std::strncpy(strBuf, portUnit->Symbol, STR_MAX); return true; } if (LV2_HAVE_PORT_UNIT_UNIT(portUnit->Hints)) { switch (portUnit->Unit) { case LV2_PORT_UNIT_BAR: std::strncpy(strBuf, "bars", STR_MAX); return true; case LV2_PORT_UNIT_BEAT: std::strncpy(strBuf, "beats", STR_MAX); return true; case LV2_PORT_UNIT_BPM: std::strncpy(strBuf, "BPM", STR_MAX); return true; case LV2_PORT_UNIT_CENT: std::strncpy(strBuf, "ct", STR_MAX); return true; case LV2_PORT_UNIT_CM: std::strncpy(strBuf, "cm", STR_MAX); return true; case LV2_PORT_UNIT_COEF: std::strncpy(strBuf, "(coef)", STR_MAX); return true; case LV2_PORT_UNIT_DB: std::strncpy(strBuf, "dB", STR_MAX); return true; case LV2_PORT_UNIT_DEGREE: std::strncpy(strBuf, "deg", STR_MAX); return true; case LV2_PORT_UNIT_FRAME: std::strncpy(strBuf, "frames", STR_MAX); return true; case LV2_PORT_UNIT_HZ: std::strncpy(strBuf, "Hz", STR_MAX); return true; case LV2_PORT_UNIT_INCH: std::strncpy(strBuf, "in", STR_MAX); return true; case LV2_PORT_UNIT_KHZ: std::strncpy(strBuf, "kHz", STR_MAX); return true; case LV2_PORT_UNIT_KM: std::strncpy(strBuf, "km", STR_MAX); return true; case LV2_PORT_UNIT_M: std::strncpy(strBuf, "m", STR_MAX); return true; case LV2_PORT_UNIT_MHZ: std::strncpy(strBuf, "MHz", STR_MAX); return true; case LV2_PORT_UNIT_MIDINOTE: std::strncpy(strBuf, "note", STR_MAX); return true; case LV2_PORT_UNIT_MILE: std::strncpy(strBuf, "mi", STR_MAX); return true; case LV2_PORT_UNIT_MIN: std::strncpy(strBuf, "min", STR_MAX); return true; case LV2_PORT_UNIT_MM: std::strncpy(strBuf, "mm", STR_MAX); return true; case LV2_PORT_UNIT_MS: std::strncpy(strBuf, "ms", STR_MAX); return true; case LV2_PORT_UNIT_OCT: std::strncpy(strBuf, "oct", STR_MAX); return true; case LV2_PORT_UNIT_PC: std::strncpy(strBuf, "%", STR_MAX); return true; case LV2_PORT_UNIT_S: std::strncpy(strBuf, "s", STR_MAX); return true; case LV2_PORT_UNIT_SEMITONE: std::strncpy(strBuf, "semi", STR_MAX); return true; } } } return CarlaPlugin::getParameterUnit(parameterId, strBuf); } bool getParameterComment(const uint32_t parameterId, char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr, false); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false); int32_t rindex = pData->param.data[parameterId].rindex; CARLA_SAFE_ASSERT_RETURN(rindex >= 0, false); if (rindex < static_cast(fRdfDescriptor->PortCount)) { if (const char* const comment = fRdfDescriptor->Ports[rindex].Comment) { std::strncpy(strBuf, comment, STR_MAX); return true; } return false; } rindex -= static_cast(fRdfDescriptor->PortCount); if (rindex < static_cast(fRdfDescriptor->ParameterCount)) { if (const char* const comment = fRdfDescriptor->Parameters[rindex].Comment) { std::strncpy(strBuf, comment, STR_MAX); return true; } return false; } return CarlaPlugin::getParameterComment(parameterId, strBuf); } bool getParameterGroupName(const uint32_t parameterId, char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr, false); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false); int32_t rindex = pData->param.data[parameterId].rindex; CARLA_SAFE_ASSERT_RETURN(rindex >= 0, false); const char* uri = nullptr; if (rindex < static_cast(fRdfDescriptor->PortCount)) { uri = fRdfDescriptor->Ports[rindex].GroupURI; } else { rindex -= static_cast(fRdfDescriptor->PortCount); if (rindex < static_cast(fRdfDescriptor->ParameterCount)) uri = fRdfDescriptor->Parameters[rindex].GroupURI; } if (uri == nullptr) return false; for (uint32_t i=0; iPortGroupCount; ++i) { if (std::strcmp(fRdfDescriptor->PortGroups[i].URI, uri) == 0) { const char* const name = fRdfDescriptor->PortGroups[i].Name; const char* const symbol = fRdfDescriptor->PortGroups[i].Symbol; if (name != nullptr && symbol != nullptr) { std::snprintf(strBuf, STR_MAX, "%s:%s", symbol, name); return true; } return false; } } return false; } bool getParameterScalePointLabel(const uint32_t parameterId, const uint32_t scalePointId, char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr, false); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false); const int32_t rindex(pData->param.data[parameterId].rindex); CARLA_SAFE_ASSERT_RETURN(rindex >= 0, false); if (rindex < static_cast(fRdfDescriptor->PortCount)) { const LV2_RDF_Port* const port(&fRdfDescriptor->Ports[rindex]); CARLA_SAFE_ASSERT_RETURN(scalePointId < port->ScalePointCount, false); const LV2_RDF_PortScalePoint* const portScalePoint(&port->ScalePoints[scalePointId]); if (portScalePoint->Label != nullptr) { std::strncpy(strBuf, portScalePoint->Label, STR_MAX); return true; } } return CarlaPlugin::getParameterScalePointLabel(parameterId, scalePointId, strBuf); } // ------------------------------------------------------------------- // Set data (state) void prepareForSave(const bool temporary) override { CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); if (fExt.state != nullptr && fExt.state->save != nullptr) { // move temporary stuff to main state dir on full save if (! temporary) { const File tmpDir(handleStateMapToAbsolutePath(false, false, true, ".")); if (tmpDir.exists()) { const File stateDir(handleStateMapToAbsolutePath(true, false, false, ".")); if (stateDir.isNotNull()) tmpDir.moveFileTo(stateDir); } } fExt.state->save(fHandle, carla_lv2_state_store, this, LV2_STATE_IS_POD, fStateFeatures); if (fHandle2 != nullptr) fExt.state->save(fHandle2, carla_lv2_state_store, this, LV2_STATE_IS_POD, fStateFeatures); } } // ------------------------------------------------------------------- // Set data (internal stuff) void setName(const char* const newName) override { const File tmpDir1(handleStateMapToAbsolutePath(false, false, true, ".")); CarlaPlugin::setName(newName); if (tmpDir1.exists()) { const File tmpDir2(handleStateMapToAbsolutePath(false, false, true, ".")); carla_stdout("dir1 %s, dir2 %s", tmpDir1.getFullPathName().toRawUTF8(), tmpDir2.getFullPathName().toRawUTF8()); if (tmpDir2.isNotNull()) { if (tmpDir2.exists()) tmpDir2.deleteRecursively(); tmpDir1.moveFileTo(tmpDir2); } } if (fLv2Options.windowTitle != nullptr && pData->uiTitle.isEmpty()) setWindowTitle(nullptr); } void setWindowTitle(const char* const title) noexcept { CarlaString uiTitle; if (title != nullptr) { uiTitle = title; } else { uiTitle = pData->name; uiTitle += " (GUI)"; } std::free(const_cast(fLv2Options.windowTitle)); fLv2Options.windowTitle = uiTitle.releaseBufferPointer(); fLv2Options.opts[CarlaPluginLV2Options::WindowTitle].size = (uint32_t)std::strlen(fLv2Options.windowTitle); fLv2Options.opts[CarlaPluginLV2Options::WindowTitle].value = fLv2Options.windowTitle; if (fFeatures[kFeatureIdExternalUi] != nullptr && fFeatures[kFeatureIdExternalUi]->data != nullptr) ((LV2_External_UI_Host*)fFeatures[kFeatureIdExternalUi]->data)->plugin_human_id = fLv2Options.windowTitle; if (fPipeServer.isPipeRunning()) fPipeServer.writeUiTitleMessage(fLv2Options.windowTitle); #ifndef LV2_UIS_ONLY_BRIDGES if (fUI.window != nullptr) { try { fUI.window->setTitle(fLv2Options.windowTitle); } CARLA_SAFE_EXCEPTION("set custom title"); } #endif } // ------------------------------------------------------------------- // Set data (plugin-specific stuff) float setParamterValueCommon(const uint32_t parameterId, const float value) noexcept { const float fixedValue(pData->param.getFixedValue(parameterId, value)); fParamBuffers[parameterId] = fixedValue; if (pData->param.data[parameterId].rindex >= static_cast(fRdfDescriptor->PortCount)) { const uint32_t rparamId = static_cast(pData->param.data[parameterId].rindex) - fRdfDescriptor->PortCount; CARLA_SAFE_ASSERT_UINT2_RETURN(rparamId < fRdfDescriptor->ParameterCount, rparamId, fRdfDescriptor->PortCount, fixedValue); uint8_t atomBuf[256]; LV2_Atom_Forge atomForge; initAtomForge(atomForge); lv2_atom_forge_set_buffer(&atomForge, atomBuf, sizeof(atomBuf)); LV2_Atom_Forge_Frame forgeFrame; lv2_atom_forge_object(&atomForge, &forgeFrame, kUridNull, kUridPatchSet); lv2_atom_forge_key(&atomForge, kUridCarlaParameterChange); lv2_atom_forge_bool(&atomForge, true); lv2_atom_forge_key(&atomForge, kUridPatchProperty); lv2_atom_forge_urid(&atomForge, getCustomURID(fRdfDescriptor->Parameters[rparamId].URI)); lv2_atom_forge_key(&atomForge, kUridPatchValue); switch (fRdfDescriptor->Parameters[rparamId].Type) { case LV2_PARAMETER_TYPE_BOOL: lv2_atom_forge_bool(&atomForge, fixedValue > 0.5f); break; case LV2_PARAMETER_TYPE_INT: lv2_atom_forge_int(&atomForge, static_cast(fixedValue + 0.5f)); break; case LV2_PARAMETER_TYPE_LONG: lv2_atom_forge_long(&atomForge, static_cast(fixedValue + 0.5f)); break; case LV2_PARAMETER_TYPE_FLOAT: lv2_atom_forge_float(&atomForge, fixedValue); break; case LV2_PARAMETER_TYPE_DOUBLE: lv2_atom_forge_double(&atomForge, fixedValue); break; default: carla_stderr2("setParameterValue called for invalid parameter, expect issues!"); break; } lv2_atom_forge_pop(&atomForge, &forgeFrame); LV2_Atom* const atom((LV2_Atom*)atomBuf); CARLA_SAFE_ASSERT(atom->size < sizeof(atomBuf)); fAtomBufferEvIn.put(atom, fEventsIn.ctrlIndex); } return fixedValue; } void setParameterValue(const uint32_t parameterId, const float value, const bool sendGui, const bool sendOsc, const bool sendCallback) noexcept override { CARLA_SAFE_ASSERT_RETURN(fParamBuffers != nullptr,); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,); const float fixedValue = setParamterValueCommon(parameterId, value); CarlaPlugin::setParameterValue(parameterId, fixedValue, sendGui, sendOsc, sendCallback); } void setParameterValueRT(const uint32_t parameterId, const float value, const bool sendCallbackLater) noexcept override { CARLA_SAFE_ASSERT_RETURN(fParamBuffers != nullptr,); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,); const float fixedValue = setParamterValueCommon(parameterId, value); CarlaPlugin::setParameterValueRT(parameterId, fixedValue, sendCallbackLater); } void setCustomData(const char* const type, const char* const key, const char* const value, const bool sendGui) override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); CARLA_SAFE_ASSERT_RETURN(type != nullptr && type[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(key != nullptr && key[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(value != nullptr,); carla_debug("CarlaPluginLV2::setCustomData(%s, %s, %s, %s)", type, key, value, bool2str(sendGui)); if (std::strcmp(type, CUSTOM_DATA_TYPE_PATH) == 0) { if (std::strcmp(key, "file") != 0) return; CARLA_SAFE_ASSERT_RETURN(fFilePathURI.isNotEmpty(),); CARLA_SAFE_ASSERT_RETURN(value[0] != '\0',); carla_stdout("LV2 file path to send: '%s'", value); writeAtomPath(value, getCustomURID(fFilePathURI)); return; } if (std::strcmp(type, CUSTOM_DATA_TYPE_PROPERTY) == 0) return CarlaPlugin::setCustomData(type, key, value, sendGui); // See if this key is from a parameter exposed by carla, apply value if yes for (uint32_t i=0; i < fRdfDescriptor->ParameterCount; ++i) { const LV2_RDF_Parameter& rdfParam(fRdfDescriptor->Parameters[i]); if (std::strcmp(rdfParam.URI, key) == 0) { uint32_t parameterId = UINT32_MAX; const int32_t rindex = static_cast(fRdfDescriptor->PortCount + i); switch (rdfParam.Type) { case LV2_PARAMETER_TYPE_BOOL: case LV2_PARAMETER_TYPE_INT: // case LV2_PARAMETER_TYPE_LONG: case LV2_PARAMETER_TYPE_FLOAT: case LV2_PARAMETER_TYPE_DOUBLE: for (uint32_t j=0; j < pData->param.count; ++j) { if (pData->param.data[j].rindex == rindex) { parameterId = j; break; } } break; } if (parameterId == UINT32_MAX) break; std::vector chunk(carla_getChunkFromBase64String(value)); CARLA_SAFE_ASSERT_RETURN(chunk.size() > 0,); #ifdef CARLA_PROPER_CPP11_SUPPORT const uint8_t* const valueptr = chunk.data(); #else const uint8_t* const valueptr = &chunk.front(); #endif float rvalue; switch (rdfParam.Type) { case LV2_PARAMETER_TYPE_BOOL: rvalue = *(const int32_t*)valueptr != 0 ? 1.0f : 0.0f; break; case LV2_PARAMETER_TYPE_INT: rvalue = static_cast(*(const int32_t*)valueptr); break; case LV2_PARAMETER_TYPE_FLOAT: rvalue = *(const float*)valueptr; break; case LV2_PARAMETER_TYPE_DOUBLE: rvalue = static_cast(*(const double*)valueptr); break; default: // making compilers happy rvalue = pData->param.ranges[parameterId].def; break; } fParamBuffers[parameterId] = pData->param.getFixedValue(parameterId, rvalue); break; } } CarlaPlugin::setCustomData(type, key, value, sendGui); } void setProgram(const int32_t index, const bool sendGui, const bool sendOsc, const bool sendCallback, const bool doingInit) noexcept override { CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); CARLA_SAFE_ASSERT_RETURN(index >= -1 && index < static_cast(pData->prog.count),); CARLA_SAFE_ASSERT_RETURN(sendGui || sendOsc || sendCallback,); if (index >= 0 && index < static_cast(fRdfDescriptor->PresetCount)) { const LV2_URID_Map* const uridMap = (const LV2_URID_Map*)fFeatures[kFeatureIdUridMap]->data; LilvState* const state = Lv2WorldClass::getInstance().getStateFromURI(fRdfDescriptor->Presets[index].URI, uridMap); CARLA_SAFE_ASSERT_RETURN(state != nullptr,); // invalidate midi-program selection CarlaPlugin::setMidiProgram(-1, false, false, sendCallback, false); if (fExt.state != nullptr) { const bool block = (sendGui || sendOsc || sendCallback) && !fHasThreadSafeRestore; const ScopedSingleProcessLocker spl(this, block); lilv_state_restore(state, fExt.state, fHandle, carla_lilv_set_port_value, this, 0, fFeatures); if (fHandle2 != nullptr) lilv_state_restore(state, fExt.state, fHandle2, carla_lilv_set_port_value, this, 0, fFeatures); } else { lilv_state_emit_port_values(state, carla_lilv_set_port_value, this); } lilv_state_free(state); } CarlaPlugin::setProgram(index, sendGui, sendOsc, sendCallback, doingInit); } void setMidiProgram(const int32_t index, const bool sendGui, const bool sendOsc, const bool sendCallback, const bool doingInit) noexcept override { CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); CARLA_SAFE_ASSERT_RETURN(index >= -1 && index < static_cast(pData->midiprog.count),); CARLA_SAFE_ASSERT_RETURN(sendGui || sendOsc || sendCallback || doingInit,); if (index >= 0 && fExt.programs != nullptr && fExt.programs->select_program != nullptr) { const uint32_t bank(pData->midiprog.data[index].bank); const uint32_t program(pData->midiprog.data[index].program); const ScopedSingleProcessLocker spl(this, (sendGui || sendOsc || sendCallback)); try { fExt.programs->select_program(fHandle, bank, program); } CARLA_SAFE_EXCEPTION("select program"); if (fHandle2 != nullptr) { try { fExt.programs->select_program(fHandle2, bank, program); } CARLA_SAFE_EXCEPTION("select program 2"); } } CarlaPlugin::setMidiProgram(index, sendGui, sendOsc, sendCallback, doingInit); } void setMidiProgramRT(const uint32_t uindex, const bool sendCallbackLater) noexcept override { CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); CARLA_SAFE_ASSERT_RETURN(uindex < pData->midiprog.count,); if (fExt.programs != nullptr && fExt.programs->select_program != nullptr) { const uint32_t bank(pData->midiprog.data[uindex].bank); const uint32_t program(pData->midiprog.data[uindex].program); try { fExt.programs->select_program(fHandle, bank, program); } CARLA_SAFE_EXCEPTION("select program RT"); if (fHandle2 != nullptr) { try { fExt.programs->select_program(fHandle2, bank, program); } CARLA_SAFE_EXCEPTION("select program RT 2"); } } CarlaPlugin::setMidiProgramRT(uindex, sendCallbackLater); } // ------------------------------------------------------------------- // Set ui stuff void setCustomUITitle(const char* const title) noexcept override { setWindowTitle(title); CarlaPlugin::setCustomUITitle(title); } void showCustomUI(const bool yesNo) override { if (fUI.type == UI::TYPE_NULL) { if (yesNo && fFilePathURI.isNotEmpty()) { const char* const path = pData->engine->runFileCallback(FILE_CALLBACK_OPEN, false, "Open File", ""); if (path != nullptr && path[0] != '\0') { carla_stdout("LV2 file path to send: '%s'", path); writeAtomPath(path, getCustomURID(fFilePathURI)); } } else { CARLA_SAFE_ASSERT(!yesNo); } pData->engine->callback(true, true, ENGINE_CALLBACK_UI_STATE_CHANGED, pData->id, 0, 0, 0, 0.0f, nullptr); return; } const uintptr_t frontendWinId = pData->engine->getOptions().frontendWinId; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (! yesNo) pData->transientTryCounter = 0; #endif if (fUI.type == UI::TYPE_BRIDGE) { if (yesNo) { if (fPipeServer.isPipeRunning()) { fPipeServer.writeFocusMessage(); return; } if (! fPipeServer.startPipeServer(std::min(fLv2Options.sequenceSize, 819200))) { pData->engine->callback(true, true, ENGINE_CALLBACK_UI_STATE_CHANGED, pData->id, 0, 0, 0, 0.0f, nullptr); return; } // manually write messages so we can take the lock for ourselves { char tmpBuf[0xff]; tmpBuf[0xfe] = '\0'; const CarlaMutexLocker cml(fPipeServer.getPipeLock()); const CarlaScopedLocale csl; // write URI mappings uint32_t u = 0; for (std::vector::iterator it=fCustomURIDs.begin(), end=fCustomURIDs.end(); it != end; ++it, ++u) { if (u < kUridCount) continue; const std::string& uri(*it); if (! fPipeServer.writeMessage("urid\n", 5)) return; std::snprintf(tmpBuf, 0xfe, "%u\n", u); if (! fPipeServer.writeMessage(tmpBuf)) return; std::snprintf(tmpBuf, 0xfe, "%lu\n", static_cast(uri.length())); if (! fPipeServer.writeMessage(tmpBuf)) return; if (! fPipeServer.writeAndFixMessage(uri.c_str())) return; } // write UI options if (! fPipeServer.writeMessage("uiOptions\n", 10)) return; const EngineOptions& opts(pData->engine->getOptions()); std::snprintf(tmpBuf, 0xff, "%g\n", pData->engine->getSampleRate()); if (! fPipeServer.writeMessage(tmpBuf)) return; std::snprintf(tmpBuf, 0xff, "%u\n", opts.bgColor); if (! fPipeServer.writeMessage(tmpBuf)) return; std::snprintf(tmpBuf, 0xff, "%u\n", opts.fgColor); if (! fPipeServer.writeMessage(tmpBuf)) return; std::snprintf(tmpBuf, 0xff, "%.12g\n", static_cast(opts.uiScale)); if (! fPipeServer.writeMessage(tmpBuf)) return; std::snprintf(tmpBuf, 0xff, "%s\n", bool2str(true)); // useTheme if (! fPipeServer.writeMessage(tmpBuf)) return; std::snprintf(tmpBuf, 0xff, "%s\n", bool2str(true)); // useThemeColors if (! fPipeServer.writeMessage(tmpBuf)) return; if (! fPipeServer.writeAndFixMessage(fLv2Options.windowTitle != nullptr ? fLv2Options.windowTitle : "")) return; std::snprintf(tmpBuf, 0xff, P_INTPTR "\n", frontendWinId); if (! fPipeServer.writeMessage(tmpBuf)) return; // write parameter values for (uint32_t i=0; i < pData->param.count; ++i) { ParameterData& pdata(pData->param.data[i]); if (pdata.hints & PARAMETER_IS_NOT_SAVED) { int32_t rindex = pdata.rindex; CARLA_SAFE_ASSERT_CONTINUE(rindex - static_cast(fRdfDescriptor->PortCount) >= 0); rindex -= static_cast(fRdfDescriptor->PortCount); CARLA_SAFE_ASSERT_CONTINUE(rindex < static_cast(fRdfDescriptor->ParameterCount)); if (! fPipeServer.writeLv2ParameterMessage(fRdfDescriptor->Parameters[rindex].URI, getParameterValue(i), false)) return; } else { if (! fPipeServer.writeControlMessage(static_cast(pData->param.data[i].rindex), getParameterValue(i), false)) return; } } // ready to show if (! fPipeServer.writeMessage("show\n", 5)) return; fPipeServer.flushMessages(); } #ifndef BUILD_BRIDGE if (fUI.rdfDescriptor->Type == LV2_UI_MOD) pData->tryTransient(); #endif } else { fPipeServer.stopPipeServer(pData->engine->getOptions().uiBridgesTimeout); } return; } // take some precautions CARLA_SAFE_ASSERT_RETURN(fUI.descriptor != nullptr,); CARLA_SAFE_ASSERT_RETURN(fUI.rdfDescriptor != nullptr,); if (yesNo) { CARLA_SAFE_ASSERT_RETURN(fUI.descriptor->instantiate != nullptr,); CARLA_SAFE_ASSERT_RETURN(fUI.descriptor->cleanup != nullptr,); } else { if (fUI.handle == nullptr) return; } if (yesNo) { if (fUI.handle == nullptr) { #ifndef LV2_UIS_ONLY_BRIDGES if (fUI.type == UI::TYPE_EMBED && fUI.rdfDescriptor->Type != LV2_UI_NONE && fUI.window == nullptr) { const char* msg = nullptr; const bool isStandalone = pData->engine->getOptions().pluginsAreStandalone; switch (fUI.rdfDescriptor->Type) { case LV2_UI_GTK2: case LV2_UI_GTK3: case LV2_UI_QT4: case LV2_UI_QT5: case LV2_UI_EXTERNAL: case LV2_UI_OLD_EXTERNAL: msg = "Invalid UI type"; break; case LV2_UI_COCOA: # ifdef CARLA_OS_MAC fUI.window = CarlaPluginUI::newCocoa(this, frontendWinId, isStandalone, isUiResizable()); # else msg = "UI is for MacOS only"; # endif break; case LV2_UI_WINDOWS: # ifdef CARLA_OS_WIN fUI.window = CarlaPluginUI::newWindows(this, frontendWinId, isStandalone, isUiResizable()); # else msg = "UI is for Windows only"; # endif break; case LV2_UI_X11: # ifdef HAVE_X11 fUI.window = CarlaPluginUI::newX11(this, frontendWinId, isStandalone, isUiResizable(), true); # else msg = "UI is only for systems with X11"; # endif break; default: msg = "Unknown UI type"; break; } if (fUI.window == nullptr && fExt.uishow == nullptr) return pData->engine->callback(true, true, ENGINE_CALLBACK_UI_STATE_CHANGED, pData->id, -1, 0, 0, 0.0f, msg); if (fUI.window != nullptr) fFeatures[kFeatureIdUiParent]->data = fUI.window->getPtr(); } #endif fUI.widget = nullptr; fUI.handle = fUI.descriptor->instantiate(fUI.descriptor, fRdfDescriptor->URI, fUI.rdfDescriptor->Bundle, carla_lv2_ui_write_function, this, &fUI.widget, fFeatures); if (fUI.window != nullptr) { if (fUI.widget != nullptr) fUI.window->setChildWindow(fUI.widget); fUI.window->setTitle(fLv2Options.windowTitle); } } CARLA_SAFE_ASSERT(fUI.handle != nullptr); CARLA_SAFE_ASSERT(fUI.type != UI::TYPE_EXTERNAL || fUI.widget != nullptr); if (fUI.handle == nullptr || (fUI.type == UI::TYPE_EXTERNAL && fUI.widget == nullptr)) { fUI.widget = nullptr; if (fUI.handle != nullptr) { fUI.descriptor->cleanup(fUI.handle); fUI.handle = nullptr; } return pData->engine->callback(true, true, ENGINE_CALLBACK_UI_STATE_CHANGED, pData->id, -1, 0, 0, 0.0f, "Plugin refused to open its own UI"); } updateUi(); #ifndef LV2_UIS_ONLY_BRIDGES if (fUI.type == UI::TYPE_EMBED) { if (fUI.window != nullptr) { fUI.window->show(); } else if (fExt.uishow != nullptr) { fExt.uishow->show(fUI.handle); # ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH pData->tryTransient(); # endif } } else #endif { LV2_EXTERNAL_UI_SHOW((LV2_External_UI_Widget*)fUI.widget); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH pData->tryTransient(); #endif } } else { #ifndef LV2_UIS_ONLY_BRIDGES if (fUI.type == UI::TYPE_EMBED) { if (fUI.window != nullptr) fUI.window->hide(); else if (fExt.uishow != nullptr) fExt.uishow->hide(fUI.handle); } else #endif { CARLA_SAFE_ASSERT(fUI.widget != nullptr); if (fUI.widget != nullptr) LV2_EXTERNAL_UI_HIDE((LV2_External_UI_Widget*)fUI.widget); } fUI.descriptor->cleanup(fUI.handle); fUI.handle = nullptr; fUI.widget = nullptr; if (fUI.type == UI::TYPE_EMBED && fUI.window != nullptr) { delete fUI.window; fUI.window = nullptr; } } } #ifndef LV2_UIS_ONLY_BRIDGES void* embedCustomUI(void* const ptr) override { CARLA_SAFE_ASSERT_RETURN(fUI.type == UI::TYPE_EMBED, nullptr); CARLA_SAFE_ASSERT_RETURN(fUI.descriptor != nullptr, nullptr); CARLA_SAFE_ASSERT_RETURN(fUI.descriptor->instantiate != nullptr, nullptr); CARLA_SAFE_ASSERT_RETURN(fUI.descriptor->cleanup != nullptr, nullptr); CARLA_SAFE_ASSERT_RETURN(fUI.rdfDescriptor->Type != LV2_UI_NONE, nullptr); CARLA_SAFE_ASSERT_RETURN(fUI.window == nullptr, nullptr); fFeatures[kFeatureIdUiParent]->data = ptr; fUI.embedded = true; fUI.widget = nullptr; fUI.handle = fUI.descriptor->instantiate(fUI.descriptor, fRdfDescriptor->URI, fUI.rdfDescriptor->Bundle, carla_lv2_ui_write_function, this, &fUI.widget, fFeatures); updateUi(); return fUI.widget; } #endif void idle() override { if (fAtomBufferWorkerIn.isDataAvailableForReading()) { Lv2AtomRingBuffer tmpRingBuffer(fAtomBufferWorkerIn, fAtomBufferWorkerInTmpData); CARLA_SAFE_ASSERT_RETURN(tmpRingBuffer.isDataAvailableForReading(),); CARLA_SAFE_ASSERT_RETURN(fExt.worker != nullptr && fExt.worker->work != nullptr,); uint32_t portIndex; const LV2_Atom* atom; for (; tmpRingBuffer.get(atom, portIndex);) { CARLA_SAFE_ASSERT_CONTINUE(atom->type == kUridCarlaAtomWorkerIn); fExt.worker->work(fHandle, carla_lv2_worker_respond, this, atom->size, LV2_ATOM_BODY_CONST(atom)); } } if (fInlineDisplayNeedsRedraw) { // TESTING CARLA_SAFE_ASSERT(pData->enabled) CARLA_SAFE_ASSERT(!pData->engine->isAboutToClose()); CARLA_SAFE_ASSERT(pData->client->isActive()); if (pData->enabled && !pData->engine->isAboutToClose() && pData->client->isActive()) { const int64_t timeNow = water::Time::currentTimeMillis(); if (timeNow - fInlineDisplayLastRedrawTime > (1000 / 30)) { fInlineDisplayNeedsRedraw = false; fInlineDisplayLastRedrawTime = timeNow; pData->engine->callback(true, true, ENGINE_CALLBACK_INLINE_DISPLAY_REDRAW, pData->id, 0, 0, 0, 0.0f, nullptr); } } else { fInlineDisplayNeedsRedraw = false; } } CarlaPlugin::idle(); } void uiIdle() override { if (const char* const fileNeededForURI = fUI.fileNeededForURI) { fUI.fileBrowserOpen = true; fUI.fileNeededForURI = nullptr; const char* const path = pData->engine->runFileCallback(FILE_CALLBACK_OPEN, /* isDir */ false, /* title */ "File open", /* filters */ ""); fUI.fileBrowserOpen = false; if (path != nullptr) { carla_stdout("LV2 requested path to send: '%s'", path); writeAtomPath(path, getCustomURID(fileNeededForURI)); } // this function will be called recursively, stop here return; } if (fAtomBufferUiOut.isDataAvailableForReading()) { Lv2AtomRingBuffer tmpRingBuffer(fAtomBufferUiOut, fAtomBufferUiOutTmpData); CARLA_SAFE_ASSERT(tmpRingBuffer.isDataAvailableForReading()); uint32_t portIndex; const LV2_Atom* atom; const bool hasPortEvent(fUI.handle != nullptr && fUI.descriptor != nullptr && fUI.descriptor->port_event != nullptr); for (; tmpRingBuffer.get(atom, portIndex);) { if (fUI.type == UI::TYPE_BRIDGE) { if (fPipeServer.isPipeRunning()) fPipeServer.writeLv2AtomMessage(portIndex, atom); } else { if (hasPortEvent && ! fNeedsUiClose) fUI.descriptor->port_event(fUI.handle, portIndex, lv2_atom_total_size(atom), kUridAtomTransferEvent, atom); } inspectAtomForParameterChange(atom); } } if (fPipeServer.isPipeRunning()) { fPipeServer.idlePipe(); switch (fPipeServer.getAndResetUiState()) { case CarlaPipeServerLV2::UiNone: case CarlaPipeServerLV2::UiShow: break; case CarlaPipeServerLV2::UiHide: fPipeServer.stopPipeServer(2000); // fall through case CarlaPipeServerLV2::UiCrashed: #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH pData->transientTryCounter = 0; #endif pData->engine->callback(true, true, ENGINE_CALLBACK_UI_STATE_CHANGED, pData->id, 0, 0, 0, 0.0f, nullptr); break; } } else { // TODO - detect if ui-bridge crashed } if (fNeedsUiClose) { fNeedsUiClose = false; showCustomUI(false); pData->engine->callback(true, true, ENGINE_CALLBACK_UI_STATE_CHANGED, pData->id, 0, 0, 0, 0.0f, nullptr); } else if (fUI.handle != nullptr && fUI.descriptor != nullptr) { if (fUI.type == UI::TYPE_EXTERNAL && fUI.widget != nullptr) LV2_EXTERNAL_UI_RUN((LV2_External_UI_Widget*)fUI.widget); #ifndef LV2_UIS_ONLY_BRIDGES else if (fUI.type == UI::TYPE_EMBED && fUI.window != nullptr) fUI.window->idle(); // note: UI might have been closed by window idle if (fNeedsUiClose) { pass(); } else if (fUI.handle != nullptr && fExt.uiidle != nullptr && fExt.uiidle->idle(fUI.handle) != 0) { showCustomUI(false); pData->engine->callback(true, true, ENGINE_CALLBACK_UI_STATE_CHANGED, pData->id, 0, 0, 0, 0.0f, nullptr); CARLA_SAFE_ASSERT(fUI.handle == nullptr); } #endif } CarlaPlugin::uiIdle(); } // ------------------------------------------------------------------- // Plugin state void reload() override { CARLA_SAFE_ASSERT_RETURN(pData->engine != nullptr,); CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr,); carla_debug("CarlaPluginLV2::reload() - start"); const EngineProcessMode processMode(pData->engine->getProccessMode()); // Safely disable plugin for reload const ScopedDisabler sd(this); if (pData->active) deactivate(); clearBuffers(); const float sampleRate(static_cast(pData->engine->getSampleRate())); const uint32_t portCount(fRdfDescriptor->PortCount); uint32_t aIns, aOuts, cvIns, cvOuts, params; aIns = aOuts = cvIns = cvOuts = params = 0; LinkedList evIns, evOuts; const uint32_t eventBufferSize = static_cast(fLv2Options.sequenceSize) + 0xff; bool forcedStereoIn, forcedStereoOut; forcedStereoIn = forcedStereoOut = false; bool needsCtrlIn, needsCtrlOut, hasPatchParameterOutputs; needsCtrlIn = needsCtrlOut = hasPatchParameterOutputs = false; for (uint32_t i=0; i < portCount; ++i) { const LV2_Property portTypes(fRdfDescriptor->Ports[i].Types); if (LV2_IS_PORT_AUDIO(portTypes)) { if (LV2_IS_PORT_INPUT(portTypes)) aIns += 1; else if (LV2_IS_PORT_OUTPUT(portTypes)) aOuts += 1; } else if (LV2_IS_PORT_CV(portTypes)) { if (LV2_IS_PORT_INPUT(portTypes)) cvIns += 1; else if (LV2_IS_PORT_OUTPUT(portTypes)) cvOuts += 1; } else if (LV2_IS_PORT_ATOM_SEQUENCE(portTypes)) { if (LV2_IS_PORT_INPUT(portTypes)) evIns.append(CARLA_EVENT_DATA_ATOM); else if (LV2_IS_PORT_OUTPUT(portTypes)) evOuts.append(CARLA_EVENT_DATA_ATOM); } else if (LV2_IS_PORT_EVENT(portTypes)) { if (LV2_IS_PORT_INPUT(portTypes)) evIns.append(CARLA_EVENT_DATA_EVENT); else if (LV2_IS_PORT_OUTPUT(portTypes)) evOuts.append(CARLA_EVENT_DATA_EVENT); } else if (LV2_IS_PORT_MIDI_LL(portTypes)) { if (LV2_IS_PORT_INPUT(portTypes)) evIns.append(CARLA_EVENT_DATA_MIDI_LL); else if (LV2_IS_PORT_OUTPUT(portTypes)) evOuts.append(CARLA_EVENT_DATA_MIDI_LL); } else if (LV2_IS_PORT_CONTROL(portTypes)) params += 1; } for (uint32_t i=0; i < fRdfDescriptor->ParameterCount; ++i) { switch (fRdfDescriptor->Parameters[i].Type) { case LV2_PARAMETER_TYPE_BOOL: case LV2_PARAMETER_TYPE_INT: // case LV2_PARAMETER_TYPE_LONG: case LV2_PARAMETER_TYPE_FLOAT: case LV2_PARAMETER_TYPE_DOUBLE: params += 1; break; case LV2_PARAMETER_TYPE_PATH: if (fFilePathURI.isEmpty()) fFilePathURI = fRdfDescriptor->Parameters[i].URI; break; } } if ((pData->options & PLUGIN_OPTION_FORCE_STEREO) != 0 && aIns <= 1 && aOuts <= 1 && evOuts.count() == 0 && fExt.state == nullptr && fExt.worker == nullptr) { if (fHandle2 == nullptr) { try { fHandle2 = fDescriptor->instantiate(fDescriptor, sampleRate, fRdfDescriptor->Bundle, fFeatures); } catch(...) {} } if (fHandle2 != nullptr) { if (aIns == 1) { aIns = 2; forcedStereoIn = true; } if (aOuts == 1) { aOuts = 2; forcedStereoOut = true; } } } if (aIns > 0) { pData->audioIn.createNew(aIns); fAudioInBuffers = new float*[aIns]; for (uint32_t i=0; i < aIns; ++i) fAudioInBuffers[i] = nullptr; } if (aOuts > 0) { pData->audioOut.createNew(aOuts); fAudioOutBuffers = new float*[aOuts]; needsCtrlIn = true; for (uint32_t i=0; i < aOuts; ++i) fAudioOutBuffers[i] = nullptr; } if (cvIns > 0) { pData->cvIn.createNew(cvIns); fCvInBuffers = new float*[cvIns]; for (uint32_t i=0; i < cvIns; ++i) fCvInBuffers[i] = nullptr; } if (cvOuts > 0) { pData->cvOut.createNew(cvOuts); fCvOutBuffers = new float*[cvOuts]; for (uint32_t i=0; i < cvOuts; ++i) fCvOutBuffers[i] = nullptr; } if (params > 0) { pData->param.createNew(params, true); fParamBuffers = new float[params]; carla_zeroFloats(fParamBuffers, params); } if (const uint32_t count = static_cast(evIns.count())) { fEventsIn.createNew(count); for (uint32_t i=0; i < count; ++i) { const uint32_t& type(evIns.getAt(i, 0x0)); if (type == CARLA_EVENT_DATA_ATOM) { fEventsIn.data[i].type = CARLA_EVENT_DATA_ATOM; fEventsIn.data[i].atom = lv2_atom_buffer_new(eventBufferSize, kUridNull, kUridAtomSequence, true); } else if (type == CARLA_EVENT_DATA_EVENT) { fEventsIn.data[i].type = CARLA_EVENT_DATA_EVENT; fEventsIn.data[i].event = lv2_event_buffer_new(eventBufferSize, LV2_EVENT_AUDIO_STAMP); } else if (type == CARLA_EVENT_DATA_MIDI_LL) { fEventsIn.data[i].type = CARLA_EVENT_DATA_MIDI_LL; fEventsIn.data[i].midi.capacity = eventBufferSize; fEventsIn.data[i].midi.data = new uchar[eventBufferSize]; } } } else { fEventsIn.createNew(1); fEventsIn.ctrl = &fEventsIn.data[0]; } if (const uint32_t count = static_cast(evOuts.count())) { fEventsOut.createNew(count); for (uint32_t i=0; i < count; ++i) { const uint32_t& type(evOuts.getAt(i, 0x0)); if (type == CARLA_EVENT_DATA_ATOM) { fEventsOut.data[i].type = CARLA_EVENT_DATA_ATOM; fEventsOut.data[i].atom = lv2_atom_buffer_new(eventBufferSize, kUridNull, kUridAtomSequence, false); } else if (type == CARLA_EVENT_DATA_EVENT) { fEventsOut.data[i].type = CARLA_EVENT_DATA_EVENT; fEventsOut.data[i].event = lv2_event_buffer_new(eventBufferSize, LV2_EVENT_AUDIO_STAMP); } else if (type == CARLA_EVENT_DATA_MIDI_LL) { fEventsOut.data[i].type = CARLA_EVENT_DATA_MIDI_LL; fEventsOut.data[i].midi.capacity = eventBufferSize; fEventsOut.data[i].midi.data = new uchar[eventBufferSize]; } } } const uint portNameSize(pData->engine->getMaxPortNameSize()); CarlaString portName; uint32_t iCtrl = 0; for (uint32_t i=0, iAudioIn=0, iAudioOut=0, iCvIn=0, iCvOut=0, iEvIn=0, iEvOut=0; i < portCount; ++i) { const LV2_Property portTypes(fRdfDescriptor->Ports[i].Types); portName.clear(); if (LV2_IS_PORT_AUDIO(portTypes) || LV2_IS_PORT_CV(portTypes) || LV2_IS_PORT_ATOM_SEQUENCE(portTypes) || LV2_IS_PORT_EVENT(portTypes) || LV2_IS_PORT_MIDI_LL(portTypes)) { if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } portName += fRdfDescriptor->Ports[i].Name; portName.truncate(portNameSize); } if (LV2_IS_PORT_AUDIO(portTypes)) { if (LV2_IS_PORT_INPUT(portTypes)) { const uint32_t j = iAudioIn++; pData->audioIn.ports[j].port = (CarlaEngineAudioPort*)pData->client->addPort(kEnginePortTypeAudio, portName, true, j); pData->audioIn.ports[j].rindex = i; if (forcedStereoIn) { portName += "_2"; pData->audioIn.ports[1].port = (CarlaEngineAudioPort*)pData->client->addPort(kEnginePortTypeAudio, portName, true, 1); pData->audioIn.ports[1].rindex = i; } } else if (LV2_IS_PORT_OUTPUT(portTypes)) { const uint32_t j = iAudioOut++; pData->audioOut.ports[j].port = (CarlaEngineAudioPort*)pData->client->addPort(kEnginePortTypeAudio, portName, false, j); pData->audioOut.ports[j].rindex = i; if (forcedStereoOut) { portName += "_2"; pData->audioOut.ports[1].port = (CarlaEngineAudioPort*)pData->client->addPort(kEnginePortTypeAudio, portName, false, 1); pData->audioOut.ports[1].rindex = i; } } else carla_stderr2("WARNING - Got a broken Port (Audio, but not input or output)"); } else if (LV2_IS_PORT_CV(portTypes)) { const LV2_RDF_PortPoints portPoints(fRdfDescriptor->Ports[i].Points); float min, max; // min value if (LV2_HAVE_MINIMUM_PORT_POINT(portPoints.Hints)) min = portPoints.Minimum; else min = -1.0f; // max value if (LV2_HAVE_MAXIMUM_PORT_POINT(portPoints.Hints)) max = portPoints.Maximum; else max = 1.0f; if (LV2_IS_PORT_INPUT(portTypes)) { const uint32_t j = iCvIn++; pData->cvIn.ports[j].port = (CarlaEngineCVPort*)pData->client->addPort(kEnginePortTypeCV, portName, true, j); pData->cvIn.ports[j].rindex = i; pData->cvIn.ports[j].port->setRange(min, max); } else if (LV2_IS_PORT_OUTPUT(portTypes)) { const uint32_t j = iCvOut++; pData->cvOut.ports[j].port = (CarlaEngineCVPort*)pData->client->addPort(kEnginePortTypeCV, portName, false, j); pData->cvOut.ports[j].rindex = i; pData->cvOut.ports[j].port->setRange(min, max); } else carla_stderr("WARNING - Got a broken Port (CV, but not input or output)"); } else if (LV2_IS_PORT_ATOM_SEQUENCE(portTypes)) { if (LV2_IS_PORT_INPUT(portTypes)) { const uint32_t j = iEvIn++; fDescriptor->connect_port(fHandle, i, &fEventsIn.data[j].atom->atoms); if (fHandle2 != nullptr) fDescriptor->connect_port(fHandle2, i, &fEventsIn.data[j].atom->atoms); fEventsIn.data[j].rindex = i; if (portTypes & LV2_PORT_DATA_MIDI_EVENT) fEventsIn.data[j].type |= CARLA_EVENT_TYPE_MIDI; if (portTypes & LV2_PORT_DATA_PATCH_MESSAGE) fEventsIn.data[j].type |= CARLA_EVENT_TYPE_MESSAGE; if (portTypes & LV2_PORT_DATA_TIME_POSITION) fEventsIn.data[j].type |= CARLA_EVENT_TYPE_TIME; if (evIns.count() == 1) { fEventsIn.ctrl = &fEventsIn.data[j]; fEventsIn.ctrlIndex = j; if (portTypes & LV2_PORT_DATA_MIDI_EVENT) needsCtrlIn = true; } else { if (portTypes & LV2_PORT_DATA_MIDI_EVENT) fEventsIn.data[j].port = (CarlaEngineEventPort*)pData->client->addPort(kEnginePortTypeEvent, portName, true, j); if (LV2_IS_PORT_DESIGNATION_CONTROL(fRdfDescriptor->Ports[i].Designation)) { fEventsIn.ctrl = &fEventsIn.data[j]; fEventsIn.ctrlIndex = j; } } } else if (LV2_IS_PORT_OUTPUT(portTypes)) { const uint32_t j = iEvOut++; fDescriptor->connect_port(fHandle, i, &fEventsOut.data[j].atom->atoms); if (fHandle2 != nullptr) fDescriptor->connect_port(fHandle2, i, &fEventsOut.data[j].atom->atoms); fEventsOut.data[j].rindex = i; if (portTypes & LV2_PORT_DATA_MIDI_EVENT) fEventsOut.data[j].type |= CARLA_EVENT_TYPE_MIDI; if (portTypes & LV2_PORT_DATA_PATCH_MESSAGE) fEventsOut.data[j].type |= CARLA_EVENT_TYPE_MESSAGE; if (portTypes & LV2_PORT_DATA_TIME_POSITION) fEventsOut.data[j].type |= CARLA_EVENT_TYPE_TIME; if (evOuts.count() == 1) { fEventsOut.ctrl = &fEventsOut.data[j]; fEventsOut.ctrlIndex = j; if (portTypes & LV2_PORT_DATA_MIDI_EVENT) needsCtrlOut = true; } else { if (portTypes & LV2_PORT_DATA_MIDI_EVENT) fEventsOut.data[j].port = (CarlaEngineEventPort*)pData->client->addPort(kEnginePortTypeEvent, portName, false, j); if (LV2_IS_PORT_DESIGNATION_CONTROL(fRdfDescriptor->Ports[i].Designation)) { fEventsOut.ctrl = &fEventsOut.data[j]; fEventsOut.ctrlIndex = j; } } } else carla_stderr2("WARNING - Got a broken Port (Atom-Sequence, but not input or output)"); } else if (LV2_IS_PORT_EVENT(portTypes)) { if (LV2_IS_PORT_INPUT(portTypes)) { const uint32_t j = iEvIn++; fDescriptor->connect_port(fHandle, i, fEventsIn.data[j].event); if (fHandle2 != nullptr) fDescriptor->connect_port(fHandle2, i, fEventsIn.data[j].event); fEventsIn.data[j].rindex = i; if (portTypes & LV2_PORT_DATA_MIDI_EVENT) fEventsIn.data[j].type |= CARLA_EVENT_TYPE_MIDI; if (portTypes & LV2_PORT_DATA_PATCH_MESSAGE) fEventsIn.data[j].type |= CARLA_EVENT_TYPE_MESSAGE; if (portTypes & LV2_PORT_DATA_TIME_POSITION) fEventsIn.data[j].type |= CARLA_EVENT_TYPE_TIME; if (evIns.count() == 1) { fEventsIn.ctrl = &fEventsIn.data[j]; fEventsIn.ctrlIndex = j; if (portTypes & LV2_PORT_DATA_MIDI_EVENT) needsCtrlIn = true; } else { if (portTypes & LV2_PORT_DATA_MIDI_EVENT) fEventsIn.data[j].port = (CarlaEngineEventPort*)pData->client->addPort(kEnginePortTypeEvent, portName, true, j); if (LV2_IS_PORT_DESIGNATION_CONTROL(fRdfDescriptor->Ports[i].Designation)) { fEventsIn.ctrl = &fEventsIn.data[j]; fEventsIn.ctrlIndex = j; } } } else if (LV2_IS_PORT_OUTPUT(portTypes)) { const uint32_t j = iEvOut++; fDescriptor->connect_port(fHandle, i, fEventsOut.data[j].event); if (fHandle2 != nullptr) fDescriptor->connect_port(fHandle2, i, fEventsOut.data[j].event); fEventsOut.data[j].rindex = i; if (portTypes & LV2_PORT_DATA_MIDI_EVENT) fEventsOut.data[j].type |= CARLA_EVENT_TYPE_MIDI; if (portTypes & LV2_PORT_DATA_PATCH_MESSAGE) fEventsOut.data[j].type |= CARLA_EVENT_TYPE_MESSAGE; if (portTypes & LV2_PORT_DATA_TIME_POSITION) fEventsOut.data[j].type |= CARLA_EVENT_TYPE_TIME; if (evOuts.count() == 1) { fEventsOut.ctrl = &fEventsOut.data[j]; fEventsOut.ctrlIndex = j; if (portTypes & LV2_PORT_DATA_MIDI_EVENT) needsCtrlOut = true; } else { if (portTypes & LV2_PORT_DATA_MIDI_EVENT) fEventsOut.data[j].port = (CarlaEngineEventPort*)pData->client->addPort(kEnginePortTypeEvent, portName, false, j); if (LV2_IS_PORT_DESIGNATION_CONTROL(fRdfDescriptor->Ports[i].Designation)) { fEventsOut.ctrl = &fEventsOut.data[j]; fEventsOut.ctrlIndex = j; } } } else carla_stderr2("WARNING - Got a broken Port (Event, but not input or output)"); } else if (LV2_IS_PORT_MIDI_LL(portTypes)) { if (LV2_IS_PORT_INPUT(portTypes)) { const uint32_t j = iEvIn++; fDescriptor->connect_port(fHandle, i, &fEventsIn.data[j].midi); if (fHandle2 != nullptr) fDescriptor->connect_port(fHandle2, i, &fEventsIn.data[j].midi); fEventsIn.data[j].type |= CARLA_EVENT_TYPE_MIDI; fEventsIn.data[j].rindex = i; if (evIns.count() == 1) { needsCtrlIn = true; fEventsIn.ctrl = &fEventsIn.data[j]; fEventsIn.ctrlIndex = j; } else { fEventsIn.data[j].port = (CarlaEngineEventPort*)pData->client->addPort(kEnginePortTypeEvent, portName, true, j); if (LV2_IS_PORT_DESIGNATION_CONTROL(fRdfDescriptor->Ports[i].Designation)) { fEventsIn.ctrl = &fEventsIn.data[j]; fEventsIn.ctrlIndex = j; } } } else if (LV2_IS_PORT_OUTPUT(portTypes)) { const uint32_t j = iEvOut++; fDescriptor->connect_port(fHandle, i, &fEventsOut.data[j].midi); if (fHandle2 != nullptr) fDescriptor->connect_port(fHandle2, i, &fEventsOut.data[j].midi); fEventsOut.data[j].type |= CARLA_EVENT_TYPE_MIDI; fEventsOut.data[j].rindex = i; if (evOuts.count() == 1) { needsCtrlOut = true; fEventsOut.ctrl = &fEventsOut.data[j]; fEventsOut.ctrlIndex = j; } else { fEventsOut.data[j].port = (CarlaEngineEventPort*)pData->client->addPort(kEnginePortTypeEvent, portName, false, j); if (LV2_IS_PORT_DESIGNATION_CONTROL(fRdfDescriptor->Ports[i].Designation)) { fEventsOut.ctrl = &fEventsOut.data[j]; fEventsOut.ctrlIndex = j; } } } else carla_stderr2("WARNING - Got a broken Port (MIDI, but not input or output)"); } else if (LV2_IS_PORT_CONTROL(portTypes)) { const LV2_Property portProps(fRdfDescriptor->Ports[i].Properties); const LV2_Property portDesignation(fRdfDescriptor->Ports[i].Designation); const LV2_RDF_PortPoints portPoints(fRdfDescriptor->Ports[i].Points); const uint32_t j = iCtrl++; pData->param.data[j].index = static_cast(j); pData->param.data[j].rindex = static_cast(i); float min, max, def, step, stepSmall, stepLarge; // min value if (LV2_HAVE_MINIMUM_PORT_POINT(portPoints.Hints)) min = portPoints.Minimum; else min = 0.0f; // max value if (LV2_HAVE_MAXIMUM_PORT_POINT(portPoints.Hints)) max = portPoints.Maximum; else max = 1.0f; if (LV2_IS_PORT_SAMPLE_RATE(portProps)) { min *= sampleRate; max *= sampleRate; pData->param.data[j].hints |= PARAMETER_USES_SAMPLERATE; } // stupid hack for ir.lv2 (broken plugin) if (std::strcmp(fRdfDescriptor->URI, "http://factorial.hu/plugins/lv2/ir") == 0 && std::strncmp(fRdfDescriptor->Ports[i].Name, "FileHash", 8) == 0) { min = 0.0f; max = (float)0xffffff; } if (min >= max) { carla_stderr2("WARNING - Broken plugin parameter '%s': min >= max", fRdfDescriptor->Ports[i].Name); max = min + 0.1f; } // default value if (LV2_HAVE_DEFAULT_PORT_POINT(portPoints.Hints)) { def = portPoints.Default; } else { // no default value if (min < 0.0f && max > 0.0f) def = 0.0f; else def = min; } if (def < min) def = min; else if (def > max) def = max; if (LV2_IS_PORT_TOGGLED(portProps)) { step = max - min; stepSmall = step; stepLarge = step; pData->param.data[j].hints |= PARAMETER_IS_BOOLEAN; } else if (LV2_IS_PORT_INTEGER(portProps)) { step = 1.0f; stepSmall = 1.0f; stepLarge = 10.0f; pData->param.data[j].hints |= PARAMETER_IS_INTEGER; } else { float range = max - min; step = range/100.0f; stepSmall = range/1000.0f; stepLarge = range/10.0f; } if (LV2_IS_PORT_INPUT(portTypes)) { pData->param.data[j].type = PARAMETER_INPUT; if (LV2_IS_PORT_DESIGNATION_LATENCY(portDesignation)) { carla_stderr("Plugin has latency input port, this should not happen!"); } else if (LV2_IS_PORT_DESIGNATION_SAMPLE_RATE(portDesignation)) { def = sampleRate; step = 1.0f; stepSmall = 1.0f; stepLarge = 1.0f; pData->param.special[j] = PARAMETER_SPECIAL_SAMPLE_RATE; } else if (LV2_IS_PORT_DESIGNATION_FREEWHEELING(portDesignation)) { pData->param.special[j] = PARAMETER_SPECIAL_FREEWHEEL; } else if (LV2_IS_PORT_DESIGNATION_TIME(portDesignation)) { pData->param.special[j] = PARAMETER_SPECIAL_TIME; } else { pData->param.data[j].hints |= PARAMETER_IS_ENABLED; pData->param.data[j].hints |= PARAMETER_IS_AUTOMATABLE; needsCtrlIn = true; if (! LV2_IS_PORT_CAUSES_ARTIFACTS(portProps) && ! LV2_IS_PORT_ENUMERATION(portProps) && ! LV2_IS_PORT_EXPENSIVE(portProps) && ! LV2_IS_PORT_NOT_AUTOMATIC(portProps) && ! LV2_IS_PORT_NOT_ON_GUI(portProps) && ! LV2_IS_PORT_TRIGGER(portProps)) { pData->param.data[j].hints |= PARAMETER_CAN_BE_CV_CONTROLLED; } } // MIDI CC value const LV2_RDF_PortMidiMap& portMidiMap(fRdfDescriptor->Ports[i].MidiMap); if (LV2_IS_PORT_MIDI_MAP_CC(portMidiMap.Type)) { if (portMidiMap.Number < MAX_MIDI_CONTROL && ! MIDI_IS_CONTROL_BANK_SELECT(portMidiMap.Number)) pData->param.data[j].mappedControlIndex = static_cast(portMidiMap.Number); } } else if (LV2_IS_PORT_OUTPUT(portTypes)) { pData->param.data[j].type = PARAMETER_OUTPUT; if (LV2_IS_PORT_DESIGNATION_LATENCY(portDesignation)) { min = 0.0f; max = sampleRate; def = 0.0f; step = 1.0f; stepSmall = 1.0f; stepLarge = 1.0f; pData->param.special[j] = PARAMETER_SPECIAL_LATENCY; CARLA_SAFE_ASSERT_INT2(fLatencyIndex == static_cast(j), fLatencyIndex, j); } else if (LV2_IS_PORT_DESIGNATION_SAMPLE_RATE(portDesignation)) { def = sampleRate; step = 1.0f; stepSmall = 1.0f; stepLarge = 1.0f; pData->param.special[j] = PARAMETER_SPECIAL_SAMPLE_RATE; } else if (LV2_IS_PORT_DESIGNATION_FREEWHEELING(portDesignation)) { carla_stderr("Plugin has freewheeling output port, this should not happen!"); } else if (LV2_IS_PORT_DESIGNATION_TIME(portDesignation)) { pData->param.special[j] = PARAMETER_SPECIAL_TIME; } else { pData->param.data[j].hints |= PARAMETER_IS_ENABLED; pData->param.data[j].hints |= PARAMETER_IS_AUTOMATABLE; needsCtrlOut = true; } } else { pData->param.data[j].type = PARAMETER_UNKNOWN; carla_stderr2("WARNING - Got a broken Port (Control, but not input or output)"); } // extra parameter hints if (LV2_IS_PORT_LOGARITHMIC(portProps)) pData->param.data[j].hints |= PARAMETER_IS_LOGARITHMIC; if (LV2_IS_PORT_TRIGGER(portProps)) pData->param.data[j].hints |= PARAMETER_IS_TRIGGER; if (LV2_IS_PORT_STRICT_BOUNDS(portProps)) pData->param.data[j].hints |= PARAMETER_IS_STRICT_BOUNDS; if (LV2_IS_PORT_ENUMERATION(portProps)) pData->param.data[j].hints |= PARAMETER_USES_SCALEPOINTS; // check if parameter is not enabled or automatable if (LV2_IS_PORT_NOT_ON_GUI(portProps)) pData->param.data[j].hints &= ~(PARAMETER_IS_ENABLED|PARAMETER_IS_AUTOMATABLE); else if (LV2_IS_PORT_CAUSES_ARTIFACTS(portProps) || LV2_IS_PORT_EXPENSIVE(portProps)) pData->param.data[j].hints &= ~PARAMETER_IS_AUTOMATABLE; else if (LV2_IS_PORT_NOT_AUTOMATIC(portProps) || LV2_IS_PORT_NON_AUTOMATABLE(portProps)) pData->param.data[j].hints &= ~PARAMETER_IS_AUTOMATABLE; pData->param.ranges[j].min = min; pData->param.ranges[j].max = max; pData->param.ranges[j].def = def; pData->param.ranges[j].step = step; pData->param.ranges[j].stepSmall = stepSmall; pData->param.ranges[j].stepLarge = stepLarge; // Start parameters in their default values (except freewheel, which is off by default) if (pData->param.data[j].type == PARAMETER_INPUT && pData->param.special[j] == PARAMETER_SPECIAL_FREEWHEEL) fParamBuffers[j] = min; else fParamBuffers[j] = def; fDescriptor->connect_port(fHandle, i, &fParamBuffers[j]); if (fHandle2 != nullptr) fDescriptor->connect_port(fHandle2, i, &fParamBuffers[j]); } else { // Port Type not supported, but it's optional anyway fDescriptor->connect_port(fHandle, i, nullptr); if (fHandle2 != nullptr) fDescriptor->connect_port(fHandle2, i, nullptr); } } for (uint32_t i=0; i < fRdfDescriptor->ParameterCount; ++i) { const LV2_RDF_Parameter& rdfParam(fRdfDescriptor->Parameters[i]); switch (rdfParam.Type) { case LV2_PARAMETER_TYPE_BOOL: case LV2_PARAMETER_TYPE_INT: // case LV2_PARAMETER_TYPE_LONG: case LV2_PARAMETER_TYPE_FLOAT: case LV2_PARAMETER_TYPE_DOUBLE: break; default: continue; } const LV2_RDF_PortPoints& portPoints(rdfParam.Points); const uint32_t j = iCtrl++; pData->param.data[j].index = static_cast(j); pData->param.data[j].rindex = static_cast(fRdfDescriptor->PortCount + i); float min, max, def, step, stepSmall, stepLarge; // min value if (LV2_HAVE_MINIMUM_PORT_POINT(portPoints.Hints)) min = portPoints.Minimum; else min = 0.0f; // max value if (LV2_HAVE_MAXIMUM_PORT_POINT(portPoints.Hints)) max = portPoints.Maximum; else max = 1.0f; if (min >= max) { carla_stderr2("WARNING - Broken plugin parameter '%s': min >= max", rdfParam.Label); max = min + 0.1f; } // default value if (LV2_HAVE_DEFAULT_PORT_POINT(portPoints.Hints)) { def = portPoints.Default; } else { // no default value if (min < 0.0f && max > 0.0f) def = 0.0f; else def = min; } if (def < min) def = min; else if (def > max) def = max; switch (rdfParam.Type) { case LV2_PARAMETER_TYPE_BOOL: step = max - min; stepSmall = step; stepLarge = step; pData->param.data[j].hints |= PARAMETER_IS_BOOLEAN; break; case LV2_PARAMETER_TYPE_INT: case LV2_PARAMETER_TYPE_LONG: step = 1.0f; stepSmall = 1.0f; stepLarge = 10.0f; pData->param.data[j].hints |= PARAMETER_IS_INTEGER; break; default: const float range = max - min; step = range/100.0f; stepSmall = range/1000.0f; stepLarge = range/10.0f; break; } if (rdfParam.Flags & LV2_PARAMETER_FLAG_INPUT) { pData->param.data[j].type = PARAMETER_INPUT; pData->param.data[j].hints |= PARAMETER_IS_ENABLED; pData->param.data[j].hints |= PARAMETER_IS_AUTOMATABLE; pData->param.data[j].hints |= PARAMETER_IS_NOT_SAVED; needsCtrlIn = true; if (rdfParam.Flags & LV2_PARAMETER_FLAG_OUTPUT) hasPatchParameterOutputs = true; if (LV2_IS_PORT_MIDI_MAP_CC(rdfParam.MidiMap.Type)) { if (rdfParam.MidiMap.Number < MAX_MIDI_CONTROL && ! MIDI_IS_CONTROL_BANK_SELECT(rdfParam.MidiMap.Number)) pData->param.data[j].mappedControlIndex = static_cast(rdfParam.MidiMap.Number); } } else if (rdfParam.Flags & LV2_PARAMETER_FLAG_OUTPUT) { pData->param.data[j].type = PARAMETER_OUTPUT; pData->param.data[j].hints |= PARAMETER_IS_ENABLED; pData->param.data[j].hints |= PARAMETER_IS_AUTOMATABLE; needsCtrlOut = true; hasPatchParameterOutputs = true; } pData->param.ranges[j].min = min; pData->param.ranges[j].max = max; pData->param.ranges[j].def = def; pData->param.ranges[j].step = step; pData->param.ranges[j].stepSmall = stepSmall; pData->param.ranges[j].stepLarge = stepLarge; fParamBuffers[j] = def; } if (needsCtrlIn) { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } portName += "events-in"; portName.truncate(portNameSize); pData->event.portIn = (CarlaEngineEventPort*)pData->client->addPort(kEnginePortTypeEvent, portName, true, 0); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH pData->event.cvSourcePorts = pData->client->createCVSourcePorts(); #endif } if (needsCtrlOut) { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } portName += "events-out"; portName.truncate(portNameSize); pData->event.portOut = (CarlaEngineEventPort*)pData->client->addPort(kEnginePortTypeEvent, portName, false, 0); } if (fExt.worker != nullptr && fEventsIn.ctrl != nullptr) { fAtomBufferWorkerIn.createBuffer(eventBufferSize); fAtomBufferWorkerResp.createBuffer(eventBufferSize); fAtomBufferWorkerInTmpData = new uint8_t[fAtomBufferWorkerIn.getSize()]; } if (fRdfDescriptor->ParameterCount > 0 || (fUI.type != UI::TYPE_NULL && fEventsIn.count > 0 && (fEventsIn.data[0].type & CARLA_EVENT_DATA_ATOM) != 0)) fAtomBufferEvIn.createBuffer(eventBufferSize); if (hasPatchParameterOutputs || (fUI.type != UI::TYPE_NULL && fEventsOut.count > 0 && (fEventsOut.data[0].type & CARLA_EVENT_DATA_ATOM) != 0)) { fAtomBufferUiOut.createBuffer(std::min(eventBufferSize*32, 1638400U)); fAtomBufferUiOutTmpData = new uint8_t[fAtomBufferUiOut.getSize()]; } if (fEventsIn.ctrl != nullptr && fEventsIn.ctrl->port == nullptr) fEventsIn.ctrl->port = pData->event.portIn; if (fEventsOut.ctrl != nullptr && fEventsOut.ctrl->port == nullptr) fEventsOut.ctrl->port = pData->event.portOut; if (fEventsIn.ctrl != nullptr && fExt.midnam != nullptr) { if (char* const midnam = fExt.midnam->midnam(fHandle)) { fEventsIn.ctrl->port->setMetaData("http://www.midi.org/dtds/MIDINameDocument10.dtd", midnam, "text/xml"); if (fExt.midnam->free != nullptr) fExt.midnam->free(midnam); } } if (forcedStereoIn || forcedStereoOut) pData->options |= PLUGIN_OPTION_FORCE_STEREO; else pData->options &= ~PLUGIN_OPTION_FORCE_STEREO; // plugin hints pData->hints = (pData->hints & PLUGIN_HAS_INLINE_DISPLAY) ? PLUGIN_HAS_INLINE_DISPLAY : 0 | (pData->hints & PLUGIN_NEEDS_UI_MAIN_THREAD) ? PLUGIN_NEEDS_UI_MAIN_THREAD : 0; if (isRealtimeSafe()) pData->hints |= PLUGIN_IS_RTSAFE; if (fUI.type != UI::TYPE_NULL || fFilePathURI.isNotEmpty()) { pData->hints |= PLUGIN_HAS_CUSTOM_UI; if (fUI.type == UI::TYPE_EMBED) { switch (fUI.rdfDescriptor->Type) { case LV2_UI_GTK2: case LV2_UI_GTK3: case LV2_UI_QT4: case LV2_UI_QT5: case LV2_UI_EXTERNAL: case LV2_UI_OLD_EXTERNAL: break; default: pData->hints |= PLUGIN_HAS_CUSTOM_EMBED_UI; break; } } if (fUI.type == UI::TYPE_EMBED || fUI.type == UI::TYPE_EXTERNAL) pData->hints |= PLUGIN_NEEDS_UI_MAIN_THREAD; } if (LV2_IS_GENERATOR(fRdfDescriptor->Type[0], fRdfDescriptor->Type[1])) pData->hints |= PLUGIN_IS_SYNTH; if (aOuts > 0 && (aIns == aOuts || aIns == 1)) pData->hints |= PLUGIN_CAN_DRYWET; if (aOuts > 0) pData->hints |= PLUGIN_CAN_VOLUME; if (aOuts >= 2 && aOuts % 2 == 0) pData->hints |= PLUGIN_CAN_BALANCE; // extra plugin hints pData->extraHints = 0x0; // check initial latency findInitialLatencyValue(aIns, cvIns, aOuts, cvOuts); bufferSizeChanged(pData->engine->getBufferSize()); reloadPrograms(true); evIns.clear(); evOuts.clear(); if (pData->active) activate(); carla_debug("CarlaPluginLV2::reload() - end"); } void findInitialLatencyValue(const uint32_t aIns, const uint32_t cvIns, const uint32_t aOuts, const uint32_t cvOuts) const { if (fLatencyIndex < 0) return; // we need to pre-run the plugin so it can update its latency control-port const uint32_t bufferSize = static_cast(fLv2Options.nominalBufferSize); float tmpIn [( aIns+cvIns > 0) ? aIns+cvIns : 1][bufferSize]; float tmpOut[(aOuts+cvOuts > 0) ? aOuts+cvOuts : 1][bufferSize]; { uint32_t i=0; for (; i < aIns; ++i) { carla_zeroFloats(tmpIn[i], bufferSize); try { fDescriptor->connect_port(fHandle, pData->audioIn.ports[i].rindex, tmpIn[i]); } CARLA_SAFE_EXCEPTION("LV2 connect_port latency audio input"); } for (uint32_t j=0; j < cvIns; ++i, ++j) { carla_zeroFloats(tmpIn[i], bufferSize); try { fDescriptor->connect_port(fHandle, pData->cvIn.ports[j].rindex, tmpIn[i]); } CARLA_SAFE_EXCEPTION("LV2 connect_port latency cv input"); } } { uint32_t i=0; for (; i < aOuts; ++i) { carla_zeroFloats(tmpOut[i], bufferSize); try { fDescriptor->connect_port(fHandle, pData->audioOut.ports[i].rindex, tmpOut[i]); } CARLA_SAFE_EXCEPTION("LV2 connect_port latency audio output"); } for (uint32_t j=0; j < cvOuts; ++i, ++j) { carla_zeroFloats(tmpOut[i], bufferSize); try { fDescriptor->connect_port(fHandle, pData->cvOut.ports[j].rindex, tmpOut[i]); } CARLA_SAFE_EXCEPTION("LV2 connect_port latency cv output"); } } if (fDescriptor->activate != nullptr) { try { fDescriptor->activate(fHandle); } CARLA_SAFE_EXCEPTION("LV2 latency activate"); } try { fDescriptor->run(fHandle, bufferSize); } CARLA_SAFE_EXCEPTION("LV2 latency run"); if (fDescriptor->deactivate != nullptr) { try { fDescriptor->deactivate(fHandle); } CARLA_SAFE_EXCEPTION("LV2 latency deactivate"); } // done, let's get the value if (const uint32_t latency = getLatencyInFrames()) { pData->client->setLatency(latency); #ifndef BUILD_BRIDGE pData->latency.recreateBuffers(std::max(aIns, aOuts), latency); #endif } } void reloadPrograms(const bool doInit) override { carla_debug("CarlaPluginLV2::reloadPrograms(%s)", bool2str(doInit)); const uint32_t oldCount = pData->midiprog.count; const int32_t current = pData->midiprog.current; // special LV2 programs handling if (doInit) { pData->prog.clear(); const uint32_t presetCount(fRdfDescriptor->PresetCount); if (presetCount > 0) { pData->prog.createNew(presetCount); for (uint32_t i=0; i < presetCount; ++i) pData->prog.names[i] = carla_strdup(fRdfDescriptor->Presets[i].Label); } } // Delete old programs pData->midiprog.clear(); // Query new programs uint32_t newCount = 0; if (fExt.programs != nullptr && fExt.programs->get_program != nullptr && fExt.programs->select_program != nullptr) { for (; fExt.programs->get_program(fHandle, newCount);) ++newCount; } if (newCount > 0) { pData->midiprog.createNew(newCount); // Update data for (uint32_t i=0; i < newCount; ++i) { const LV2_Program_Descriptor* const pdesc(fExt.programs->get_program(fHandle, i)); CARLA_SAFE_ASSERT_CONTINUE(pdesc != nullptr); CARLA_SAFE_ASSERT(pdesc->name != nullptr); pData->midiprog.data[i].bank = pdesc->bank; pData->midiprog.data[i].program = pdesc->program; pData->midiprog.data[i].name = carla_strdup(pdesc->name); } } if (doInit) { if (newCount > 0) { setMidiProgram(0, false, false, false, true); } else if (fHasLoadDefaultState) { // load default state if (LilvState* const state = Lv2WorldClass::getInstance().getStateFromURI(fDescriptor->URI, (const LV2_URID_Map*)fFeatures[kFeatureIdUridMap]->data)) { lilv_state_restore(state, fExt.state, fHandle, carla_lilv_set_port_value, this, 0, fFeatures); if (fHandle2 != nullptr) lilv_state_restore(state, fExt.state, fHandle2, carla_lilv_set_port_value, this, 0, fFeatures); lilv_state_free(state); } } } else { // Check if current program is invalid bool programChanged = false; if (newCount == oldCount+1) { // one midi program added, probably created by user pData->midiprog.current = static_cast(oldCount); programChanged = true; } else if (current < 0 && newCount > 0) { // programs exist now, but not before pData->midiprog.current = 0; programChanged = true; } else if (current >= 0 && newCount == 0) { // programs existed before, but not anymore pData->midiprog.current = -1; programChanged = true; } else if (current >= static_cast(newCount)) { // current midi program > count pData->midiprog.current = 0; programChanged = true; } else { // no change pData->midiprog.current = current; } if (programChanged) setMidiProgram(pData->midiprog.current, true, true, true, false); pData->engine->callback(true, true, ENGINE_CALLBACK_RELOAD_PROGRAMS, pData->id, 0, 0, 0, 0.0f, nullptr); } } // ------------------------------------------------------------------- // Plugin processing void activate() noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); if (fDescriptor->activate != nullptr) { try { fDescriptor->activate(fHandle); } CARLA_SAFE_EXCEPTION("LV2 activate"); if (fHandle2 != nullptr) { try { fDescriptor->activate(fHandle2); } CARLA_SAFE_EXCEPTION("LV2 activate #2"); } } fFirstActive = true; } void deactivate() noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); if (fDescriptor->deactivate != nullptr) { try { fDescriptor->deactivate(fHandle); } CARLA_SAFE_EXCEPTION("LV2 deactivate"); if (fHandle2 != nullptr) { try { fDescriptor->deactivate(fHandle2); } CARLA_SAFE_EXCEPTION("LV2 deactivate #2"); } } } void process(const float* const* const audioIn, float** const audioOut, const float* const* const cvIn, float** const cvOut, const uint32_t frames) override { // -------------------------------------------------------------------------------------------------------- // Check if active if (! pData->active) { // disable any output sound for (uint32_t i=0; i < pData->audioOut.count; ++i) carla_zeroFloats(audioOut[i], frames); for (uint32_t i=0; i < pData->cvOut.count; ++i) carla_zeroFloats(cvOut[i], frames); return; } // -------------------------------------------------------------------------------------------------------- // Event itenerators from different APIs (input) LV2_Atom_Buffer_Iterator evInAtomIters[fEventsIn.count]; LV2_Event_Iterator evInEventIters[fEventsIn.count]; LV2_MIDIState evInMidiStates[fEventsIn.count]; for (uint32_t i=0; i < fEventsIn.count; ++i) { if (fEventsIn.data[i].type & CARLA_EVENT_DATA_ATOM) { lv2_atom_buffer_reset(fEventsIn.data[i].atom, true); lv2_atom_buffer_begin(&evInAtomIters[i], fEventsIn.data[i].atom); } else if (fEventsIn.data[i].type & CARLA_EVENT_DATA_EVENT) { lv2_event_buffer_reset(fEventsIn.data[i].event, LV2_EVENT_AUDIO_STAMP, fEventsIn.data[i].event->data); lv2_event_begin(&evInEventIters[i], fEventsIn.data[i].event); } else if (fEventsIn.data[i].type & CARLA_EVENT_DATA_MIDI_LL) { fEventsIn.data[i].midi.event_count = 0; fEventsIn.data[i].midi.size = 0; evInMidiStates[i].midi = &fEventsIn.data[i].midi; evInMidiStates[i].frame_count = frames; evInMidiStates[i].position = 0; } } for (uint32_t i=0; i < fEventsOut.count; ++i) { if (fEventsOut.data[i].type & CARLA_EVENT_DATA_ATOM) { lv2_atom_buffer_reset(fEventsOut.data[i].atom, false); } else if (fEventsOut.data[i].type & CARLA_EVENT_DATA_EVENT) { lv2_event_buffer_reset(fEventsOut.data[i].event, LV2_EVENT_AUDIO_STAMP, fEventsOut.data[i].event->data); } else if (fEventsOut.data[i].type & CARLA_EVENT_DATA_MIDI_LL) { // not needed } } // -------------------------------------------------------------------------------------------------------- // Check if needs reset if (pData->needsReset) { if (fEventsIn.ctrl != nullptr && (fEventsIn.ctrl->type & CARLA_EVENT_TYPE_MIDI) != 0) { const uint32_t j = fEventsIn.ctrlIndex; CARLA_ASSERT(j < fEventsIn.count); uint8_t midiData[3] = { 0, 0, 0 }; if (pData->options & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) { for (uint8_t i=0; i < MAX_MIDI_CHANNELS; ++i) { midiData[0] = uint8_t(MIDI_STATUS_CONTROL_CHANGE | (i & MIDI_CHANNEL_BIT)); midiData[1] = MIDI_CONTROL_ALL_NOTES_OFF; if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_ATOM) lv2_atom_buffer_write(&evInAtomIters[j], 0, 0, kUridMidiEvent, 3, midiData); else if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_EVENT) lv2_event_write(&evInEventIters[j], 0, 0, kUridMidiEvent, 3, midiData); else if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_MIDI_LL) lv2midi_put_event(&evInMidiStates[j], 0.0, 3, midiData); midiData[0] = uint8_t(MIDI_STATUS_CONTROL_CHANGE | (i & MIDI_CHANNEL_BIT)); midiData[1] = MIDI_CONTROL_ALL_SOUND_OFF; if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_ATOM) lv2_atom_buffer_write(&evInAtomIters[j], 0, 0, kUridMidiEvent, 3, midiData); else if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_EVENT) lv2_event_write(&evInEventIters[j], 0, 0, kUridMidiEvent, 3, midiData); else if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_MIDI_LL) lv2midi_put_event(&evInMidiStates[j], 0.0, 3, midiData); } } else if (pData->ctrlChannel >= 0 && pData->ctrlChannel < MAX_MIDI_CHANNELS) { for (uint8_t k=0; k < MAX_MIDI_NOTE; ++k) { midiData[0] = uint8_t(MIDI_STATUS_NOTE_OFF | (pData->ctrlChannel & MIDI_CHANNEL_BIT)); midiData[1] = k; if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_ATOM) lv2_atom_buffer_write(&evInAtomIters[j], 0, 0, kUridMidiEvent, 3, midiData); else if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_EVENT) lv2_event_write(&evInEventIters[j], 0, 0, kUridMidiEvent, 3, midiData); else if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_MIDI_LL) lv2midi_put_event(&evInMidiStates[j], 0.0, 3, midiData); } } } pData->needsReset = false; } // -------------------------------------------------------------------------------------------------------- // TimeInfo const EngineTimeInfo timeInfo(pData->engine->getTimeInfo()); if (fFirstActive || fLastTimeInfo != timeInfo) { bool doPostRt; int32_t rindex; const double barBeat = static_cast(timeInfo.bbt.beat - 1) + (timeInfo.bbt.tick / timeInfo.bbt.ticksPerBeat); // update input ports for (uint32_t k=0; k < pData->param.count; ++k) { if (pData->param.data[k].type != PARAMETER_INPUT) continue; if (pData->param.special[k] != PARAMETER_SPECIAL_TIME) continue; doPostRt = false; rindex = pData->param.data[k].rindex; CARLA_SAFE_ASSERT_CONTINUE(rindex >= 0 && rindex < static_cast(fRdfDescriptor->PortCount)); switch (fRdfDescriptor->Ports[rindex].Designation) { // Non-BBT case LV2_PORT_DESIGNATION_TIME_SPEED: if (fLastTimeInfo.playing != timeInfo.playing) { fParamBuffers[k] = timeInfo.playing ? 1.0f : 0.0f; doPostRt = true; } break; case LV2_PORT_DESIGNATION_TIME_FRAME: if (fLastTimeInfo.frame != timeInfo.frame) { fParamBuffers[k] = static_cast(timeInfo.frame); doPostRt = true; } break; case LV2_PORT_DESIGNATION_TIME_FRAMES_PER_SECOND: break; // BBT case LV2_PORT_DESIGNATION_TIME_BAR: if (timeInfo.bbt.valid && fLastTimeInfo.bbt.bar != timeInfo.bbt.bar) { fParamBuffers[k] = static_cast(timeInfo.bbt.bar - 1); doPostRt = true; } break; case LV2_PORT_DESIGNATION_TIME_BAR_BEAT: if (timeInfo.bbt.valid && (carla_isNotEqual(fLastTimeInfo.bbt.tick, timeInfo.bbt.tick) || fLastTimeInfo.bbt.beat != timeInfo.bbt.beat)) { fParamBuffers[k] = static_cast(barBeat); doPostRt = true; } break; case LV2_PORT_DESIGNATION_TIME_BEAT: if (timeInfo.bbt.valid && fLastTimeInfo.bbt.beat != timeInfo.bbt.beat) { fParamBuffers[k] = static_cast(timeInfo.bbt.beat - 1); doPostRt = true; } break; case LV2_PORT_DESIGNATION_TIME_BEAT_UNIT: if (timeInfo.bbt.valid && carla_isNotEqual(fLastTimeInfo.bbt.beatType, timeInfo.bbt.beatType)) { fParamBuffers[k] = timeInfo.bbt.beatType; doPostRt = true; } break; case LV2_PORT_DESIGNATION_TIME_BEATS_PER_BAR: if (timeInfo.bbt.valid && carla_isNotEqual(fLastTimeInfo.bbt.beatsPerBar, timeInfo.bbt.beatsPerBar)) { fParamBuffers[k] = timeInfo.bbt.beatsPerBar; doPostRt = true; } break; case LV2_PORT_DESIGNATION_TIME_BEATS_PER_MINUTE: if (timeInfo.bbt.valid && carla_isNotEqual(fLastTimeInfo.bbt.beatsPerMinute, timeInfo.bbt.beatsPerMinute)) { fParamBuffers[k] = static_cast(timeInfo.bbt.beatsPerMinute); doPostRt = true; } break; case LV2_PORT_DESIGNATION_TIME_TICKS_PER_BEAT: if (timeInfo.bbt.valid && carla_isNotEqual(fLastTimeInfo.bbt.ticksPerBeat, timeInfo.bbt.ticksPerBeat)) { fParamBuffers[k] = static_cast(timeInfo.bbt.ticksPerBeat); doPostRt = true; } break; } if (doPostRt) pData->postponeParameterChangeRtEvent(true, static_cast(k), fParamBuffers[k]); } for (uint32_t i=0; i < fEventsIn.count; ++i) { if ((fEventsIn.data[i].type & CARLA_EVENT_DATA_ATOM) == 0 || (fEventsIn.data[i].type & CARLA_EVENT_TYPE_TIME) == 0) continue; uint8_t timeInfoBuf[256]; LV2_Atom_Forge atomForge; initAtomForge(atomForge); lv2_atom_forge_set_buffer(&atomForge, timeInfoBuf, sizeof(timeInfoBuf)); LV2_Atom_Forge_Frame forgeFrame; lv2_atom_forge_object(&atomForge, &forgeFrame, kUridNull, kUridTimePosition); lv2_atom_forge_key(&atomForge, kUridTimeSpeed); lv2_atom_forge_float(&atomForge, timeInfo.playing ? 1.0f : 0.0f); lv2_atom_forge_key(&atomForge, kUridTimeFrame); lv2_atom_forge_long(&atomForge, static_cast(timeInfo.frame)); if (timeInfo.bbt.valid) { lv2_atom_forge_key(&atomForge, kUridTimeBar); lv2_atom_forge_long(&atomForge, timeInfo.bbt.bar - 1); lv2_atom_forge_key(&atomForge, kUridTimeBarBeat); lv2_atom_forge_float(&atomForge, static_cast(barBeat)); lv2_atom_forge_key(&atomForge, kUridTimeBeat); lv2_atom_forge_double(&atomForge, timeInfo.bbt.beat - 1); lv2_atom_forge_key(&atomForge, kUridTimeBeatUnit); lv2_atom_forge_int(&atomForge, static_cast(timeInfo.bbt.beatType)); lv2_atom_forge_key(&atomForge, kUridTimeBeatsPerBar); lv2_atom_forge_float(&atomForge, timeInfo.bbt.beatsPerBar); lv2_atom_forge_key(&atomForge, kUridTimeBeatsPerMinute); lv2_atom_forge_float(&atomForge, static_cast(timeInfo.bbt.beatsPerMinute)); lv2_atom_forge_key(&atomForge, kUridTimeTicksPerBeat); lv2_atom_forge_double(&atomForge, timeInfo.bbt.ticksPerBeat); } lv2_atom_forge_pop(&atomForge, &forgeFrame); LV2_Atom* const atom((LV2_Atom*)timeInfoBuf); CARLA_SAFE_ASSERT_BREAK(atom->size < 256); // send only deprecated blank object for now lv2_atom_buffer_write(&evInAtomIters[i], 0, 0, kUridAtomBlank, atom->size, LV2_ATOM_BODY_CONST(atom)); // for atom:object //lv2_atom_buffer_write(&evInAtomIters[i], 0, 0, atom->type, atom->size, LV2_ATOM_BODY_CONST(atom)); } pData->postRtEvents.trySplice(); fLastTimeInfo = timeInfo; } // -------------------------------------------------------------------------------------------------------- // Event Input and Processing if (fEventsIn.ctrl != nullptr) { // ---------------------------------------------------------------------------------------------------- // Message Input if (fAtomBufferEvIn.tryLock()) { if (fAtomBufferEvIn.isDataAvailableForReading()) { const LV2_Atom* atom; uint32_t j, portIndex; for (; fAtomBufferEvIn.get(atom, portIndex);) { j = (portIndex < fEventsIn.count) ? portIndex : fEventsIn.ctrlIndex; if (! lv2_atom_buffer_write(&evInAtomIters[j], 0, 0, atom->type, atom->size, LV2_ATOM_BODY_CONST(atom))) { carla_stderr2("Event input buffer full, at least 1 message lost"); continue; } inspectAtomForParameterChange(atom); } } fAtomBufferEvIn.unlock(); } // ---------------------------------------------------------------------------------------------------- // MIDI Input (External) if (pData->extNotes.mutex.tryLock()) { if ((fEventsIn.ctrl->type & CARLA_EVENT_TYPE_MIDI) == 0) { // does not handle MIDI pData->extNotes.data.clear(); } else { const uint32_t j = fEventsIn.ctrlIndex; for (RtLinkedList::Itenerator it = pData->extNotes.data.begin2(); it.valid(); it.next()) { const ExternalMidiNote& note(it.getValue(kExternalMidiNoteFallback)); CARLA_SAFE_ASSERT_CONTINUE(note.channel >= 0 && note.channel < MAX_MIDI_CHANNELS); uint8_t midiEvent[3]; midiEvent[0] = uint8_t((note.velo > 0 ? MIDI_STATUS_NOTE_ON : MIDI_STATUS_NOTE_OFF) | (note.channel & MIDI_CHANNEL_BIT)); midiEvent[1] = note.note; midiEvent[2] = note.velo; if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_ATOM) lv2_atom_buffer_write(&evInAtomIters[j], 0, 0, kUridMidiEvent, 3, midiEvent); else if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_EVENT) lv2_event_write(&evInEventIters[j], 0, 0, kUridMidiEvent, 3, midiEvent); else if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_MIDI_LL) lv2midi_put_event(&evInMidiStates[j], 0.0, 3, midiEvent); } pData->extNotes.data.clear(); } pData->extNotes.mutex.unlock(); } // End of MIDI Input (External) // ---------------------------------------------------------------------------------------------------- // Event Input (System) #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH bool allNotesOffSent = false; #endif bool isSampleAccurate = (pData->options & PLUGIN_OPTION_FIXED_BUFFERS) == 0; uint32_t startTime = 0; uint32_t timeOffset = 0; uint32_t nextBankId; if (pData->midiprog.current >= 0 && pData->midiprog.count > 0) nextBankId = pData->midiprog.data[pData->midiprog.current].bank; else nextBankId = 0; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (cvIn != nullptr && pData->event.cvSourcePorts != nullptr) pData->event.cvSourcePorts->initPortBuffers(cvIn + pData->cvIn.count, frames, isSampleAccurate, pData->event.portIn); #endif const uint32_t numEvents = (fEventsIn.ctrl->port != nullptr) ? fEventsIn.ctrl->port->getEventCount() : 0; for (uint32_t i=0; i < numEvents; ++i) { EngineEvent& event(fEventsIn.ctrl->port->getEvent(i)); uint32_t eventTime = event.time; CARLA_SAFE_ASSERT_UINT2_CONTINUE(eventTime < frames, eventTime, frames); if (eventTime < timeOffset) { carla_stderr2("Timing error, eventTime:%u < timeOffset:%u for '%s'", eventTime, timeOffset, pData->name); eventTime = timeOffset; } if (isSampleAccurate && eventTime > timeOffset) { if (processSingle(audioIn, audioOut, cvIn, cvOut, eventTime - timeOffset, timeOffset)) { startTime = 0; timeOffset = eventTime; if (pData->midiprog.current >= 0 && pData->midiprog.count > 0) nextBankId = pData->midiprog.data[pData->midiprog.current].bank; else nextBankId = 0; for (uint32_t j=0; j < fEventsIn.count; ++j) { if (fEventsIn.data[j].type & CARLA_EVENT_DATA_ATOM) { lv2_atom_buffer_reset(fEventsIn.data[j].atom, true); lv2_atom_buffer_begin(&evInAtomIters[j], fEventsIn.data[j].atom); } else if (fEventsIn.data[j].type & CARLA_EVENT_DATA_EVENT) { lv2_event_buffer_reset(fEventsIn.data[j].event, LV2_EVENT_AUDIO_STAMP, fEventsIn.data[j].event->data); lv2_event_begin(&evInEventIters[j], fEventsIn.data[j].event); } else if (fEventsIn.data[j].type & CARLA_EVENT_DATA_MIDI_LL) { fEventsIn.data[j].midi.event_count = 0; fEventsIn.data[j].midi.size = 0; evInMidiStates[j].position = eventTime; } } for (uint32_t j=0; j < fEventsOut.count; ++j) { if (fEventsOut.data[j].type & CARLA_EVENT_DATA_ATOM) { lv2_atom_buffer_reset(fEventsOut.data[j].atom, false); } else if (fEventsOut.data[j].type & CARLA_EVENT_DATA_EVENT) { lv2_event_buffer_reset(fEventsOut.data[j].event, LV2_EVENT_AUDIO_STAMP, fEventsOut.data[j].event->data); } else if (fEventsOut.data[j].type & CARLA_EVENT_DATA_MIDI_LL) { // not needed } } } else { startTime += timeOffset; } } switch (event.type) { case kEngineEventTypeNull: break; case kEngineEventTypeControl: { EngineControlEvent& ctrlEvent(event.ctrl); switch (ctrlEvent.type) { case kEngineControlEventTypeNull: break; case kEngineControlEventTypeParameter: { float value; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // non-midi if (event.channel == kEngineEventNonMidiChannel) { const uint32_t k = ctrlEvent.param; CARLA_SAFE_ASSERT_CONTINUE(k < pData->param.count); ctrlEvent.handled = true; value = pData->param.getFinalUnnormalizedValue(k, ctrlEvent.normalizedValue); setParameterValueRT(k, value, true); continue; } // Control backend stuff if (event.channel == pData->ctrlChannel) { if (MIDI_IS_CONTROL_BREATH_CONTROLLER(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_DRYWET) != 0) { ctrlEvent.handled = true; value = ctrlEvent.normalizedValue; setDryWetRT(value, true); } else if (MIDI_IS_CONTROL_CHANNEL_VOLUME(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_VOLUME) != 0) { ctrlEvent.handled = true; value = ctrlEvent.normalizedValue*127.0f/100.0f; setVolumeRT(value, true); } else if (MIDI_IS_CONTROL_BALANCE(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_BALANCE) != 0) { float left, right; value = ctrlEvent.normalizedValue/0.5f - 1.0f; if (value < 0.0f) { left = -1.0f; right = (value*2.0f)+1.0f; } else if (value > 0.0f) { left = (value*2.0f)-1.0f; right = 1.0f; } else { left = -1.0f; right = 1.0f; } ctrlEvent.handled = true; setBalanceLeftRT(left, true); setBalanceRightRT(right, true); } } #endif // Control plugin parameters uint32_t k; for (k=0; k < pData->param.count; ++k) { if (pData->param.data[k].midiChannel != event.channel) continue; if (pData->param.data[k].mappedControlIndex != ctrlEvent.param) continue; if (pData->param.data[k].type != PARAMETER_INPUT) continue; if ((pData->param.data[k].hints & PARAMETER_IS_AUTOMATABLE) == 0) continue; ctrlEvent.handled = true; if (pData->param.data[k].mappedFlags & PARAMETER_MAPPING_MIDI_DELTA) value = pData->param.getFinalValueWithMidiDelta(k, fParamBuffers[k], ctrlEvent.midiValue); else value = pData->param.getFinalUnnormalizedValue(k, ctrlEvent.normalizedValue); setParameterValueRT(k, value, true); } if ((pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) != 0 && ctrlEvent.param < MAX_MIDI_VALUE) { uint8_t midiData[3]; midiData[0] = uint8_t(MIDI_STATUS_CONTROL_CHANGE | (event.channel & MIDI_CHANNEL_BIT)); midiData[1] = uint8_t(ctrlEvent.param); midiData[2] = uint8_t(ctrlEvent.normalizedValue*127.0f); const uint32_t mtime(isSampleAccurate ? startTime : eventTime); if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_ATOM) lv2_atom_buffer_write(&evInAtomIters[fEventsIn.ctrlIndex], mtime, 0, kUridMidiEvent, 3, midiData); else if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_EVENT) lv2_event_write(&evInEventIters[fEventsIn.ctrlIndex], mtime, 0, kUridMidiEvent, 3, midiData); else if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_MIDI_LL) lv2midi_put_event(&evInMidiStates[fEventsIn.ctrlIndex], mtime, 3, midiData); } #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (! ctrlEvent.handled) checkForMidiLearn(event); #endif break; } // case kEngineControlEventTypeParameter case kEngineControlEventTypeMidiBank: if (pData->options & PLUGIN_OPTION_MAP_PROGRAM_CHANGES) { if (event.channel == pData->ctrlChannel) nextBankId = ctrlEvent.param; } else if (pData->options & PLUGIN_OPTION_SEND_PROGRAM_CHANGES) { uint8_t midiData[3]; midiData[0] = uint8_t(MIDI_STATUS_CONTROL_CHANGE | (event.channel & MIDI_CHANNEL_BIT)); midiData[1] = MIDI_CONTROL_BANK_SELECT; midiData[2] = uint8_t(ctrlEvent.param); const uint32_t mtime(isSampleAccurate ? startTime : eventTime); if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_ATOM) lv2_atom_buffer_write(&evInAtomIters[fEventsIn.ctrlIndex], mtime, 0, kUridMidiEvent, 3, midiData); else if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_EVENT) lv2_event_write(&evInEventIters[fEventsIn.ctrlIndex], mtime, 0, kUridMidiEvent, 3, midiData); else if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_MIDI_LL) lv2midi_put_event(&evInMidiStates[fEventsIn.ctrlIndex], mtime, 3, midiData); } break; case kEngineControlEventTypeMidiProgram: if (pData->options & PLUGIN_OPTION_MAP_PROGRAM_CHANGES) { if (event.channel == pData->ctrlChannel) { const uint32_t nextProgramId(ctrlEvent.param); for (uint32_t k=0; k < pData->midiprog.count; ++k) { if (pData->midiprog.data[k].bank == nextBankId && pData->midiprog.data[k].program == nextProgramId) { setMidiProgramRT(k, true); break; } } } } else if (pData->options & PLUGIN_OPTION_SEND_PROGRAM_CHANGES) { uint8_t midiData[2]; midiData[0] = uint8_t(MIDI_STATUS_PROGRAM_CHANGE | (event.channel & MIDI_CHANNEL_BIT)); midiData[1] = uint8_t(ctrlEvent.param); const uint32_t mtime(isSampleAccurate ? startTime : eventTime); if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_ATOM) lv2_atom_buffer_write(&evInAtomIters[fEventsIn.ctrlIndex], mtime, 0, kUridMidiEvent, 2, midiData); else if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_EVENT) lv2_event_write(&evInEventIters[fEventsIn.ctrlIndex], mtime, 0, kUridMidiEvent, 2, midiData); else if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_MIDI_LL) lv2midi_put_event(&evInMidiStates[fEventsIn.ctrlIndex], mtime, 2, midiData); } break; case kEngineControlEventTypeAllSoundOff: if (pData->options & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) { const uint32_t mtime(isSampleAccurate ? startTime : eventTime); uint8_t midiData[3]; midiData[0] = uint8_t(MIDI_STATUS_CONTROL_CHANGE | (event.channel & MIDI_CHANNEL_BIT)); midiData[1] = MIDI_CONTROL_ALL_SOUND_OFF; midiData[2] = 0; if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_ATOM) lv2_atom_buffer_write(&evInAtomIters[fEventsIn.ctrlIndex], mtime, 0, kUridMidiEvent, 3, midiData); else if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_EVENT) lv2_event_write(&evInEventIters[fEventsIn.ctrlIndex], mtime, 0, kUridMidiEvent, 3, midiData); else if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_MIDI_LL) lv2midi_put_event(&evInMidiStates[fEventsIn.ctrlIndex], mtime, 3, midiData); } break; case kEngineControlEventTypeAllNotesOff: if (pData->options & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) { #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (event.channel == pData->ctrlChannel && ! allNotesOffSent) { allNotesOffSent = true; postponeRtAllNotesOff(); } #endif const uint32_t mtime(isSampleAccurate ? startTime : eventTime); uint8_t midiData[3]; midiData[0] = uint8_t(MIDI_STATUS_CONTROL_CHANGE | (event.channel & MIDI_CHANNEL_BIT)); midiData[1] = MIDI_CONTROL_ALL_NOTES_OFF; midiData[2] = 0; if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_ATOM) lv2_atom_buffer_write(&evInAtomIters[fEventsIn.ctrlIndex], mtime, 0, kUridMidiEvent, 3, midiData); else if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_EVENT) lv2_event_write(&evInEventIters[fEventsIn.ctrlIndex], mtime, 0, kUridMidiEvent, 3, midiData); else if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_MIDI_LL) lv2midi_put_event(&evInMidiStates[fEventsIn.ctrlIndex], mtime, 3, midiData); } break; } // switch (ctrlEvent.type) break; } // case kEngineEventTypeControl case kEngineEventTypeMidi: { const EngineMidiEvent& midiEvent(event.midi); const uint8_t* const midiData(midiEvent.size > EngineMidiEvent::kDataSize ? midiEvent.dataExt : midiEvent.data); uint8_t status = uint8_t(MIDI_GET_STATUS_FROM_DATA(midiData)); if ((status == MIDI_STATUS_NOTE_OFF || status == MIDI_STATUS_NOTE_ON) && (pData->options & PLUGIN_OPTION_SKIP_SENDING_NOTES)) continue; if (status == MIDI_STATUS_CHANNEL_PRESSURE && (pData->options & PLUGIN_OPTION_SEND_CHANNEL_PRESSURE) == 0) continue; if (status == MIDI_STATUS_CONTROL_CHANGE && (pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) == 0) continue; if (status == MIDI_STATUS_POLYPHONIC_AFTERTOUCH && (pData->options & PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH) == 0) continue; if (status == MIDI_STATUS_PITCH_WHEEL_CONTROL && (pData->options & PLUGIN_OPTION_SEND_PITCHBEND) == 0) continue; // Fix bad note-off (per LV2 spec) if (status == MIDI_STATUS_NOTE_ON && midiData[2] == 0) status = MIDI_STATUS_NOTE_OFF; const uint32_t j = fEventsIn.ctrlIndex; const uint32_t mtime = isSampleAccurate ? startTime : eventTime; // put back channel in data uint8_t midiData2[midiEvent.size]; midiData2[0] = uint8_t(status | (event.channel & MIDI_CHANNEL_BIT)); std::memcpy(midiData2+1, midiData+1, static_cast(midiEvent.size-1)); if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_ATOM) lv2_atom_buffer_write(&evInAtomIters[j], mtime, 0, kUridMidiEvent, midiEvent.size, midiData2); else if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_EVENT) lv2_event_write(&evInEventIters[j], mtime, 0, kUridMidiEvent, midiEvent.size, midiData2); else if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_MIDI_LL) lv2midi_put_event(&evInMidiStates[j], mtime, midiEvent.size, midiData2); if (status == MIDI_STATUS_NOTE_ON) { pData->postponeNoteOnRtEvent(true, event.channel, midiData[1], midiData[2]); } else if (status == MIDI_STATUS_NOTE_OFF) { pData->postponeNoteOffRtEvent(true, event.channel, midiData[1]); } } break; } // switch (event.type) } pData->postRtEvents.trySplice(); if (frames > timeOffset) processSingle(audioIn, audioOut, cvIn, cvOut, frames - timeOffset, timeOffset); } // End of Event Input and Processing // -------------------------------------------------------------------------------------------------------- // Plugin processing (no events) else { processSingle(audioIn, audioOut, cvIn, cvOut, frames, 0); } // End of Plugin processing (no events) // -------------------------------------------------------------------------------------------------------- // Final work if (fEventsIn.ctrl != nullptr && fExt.worker != nullptr && fAtomBufferWorkerResp.tryLock()) { if (fAtomBufferWorkerResp.isDataAvailableForReading()) { const LV2_Atom* atom; uint32_t portIndex; for (; fAtomBufferWorkerResp.get(atom, portIndex);) { CARLA_SAFE_ASSERT_CONTINUE(atom->type == kUridCarlaAtomWorkerResp); fExt.worker->work_response(fHandle, atom->size, LV2_ATOM_BODY_CONST(atom)); } } fAtomBufferWorkerResp.unlock(); } if (fExt.worker != nullptr && fExt.worker->end_run != nullptr) { fExt.worker->end_run(fHandle); if (fHandle2 != nullptr) fExt.worker->end_run(fHandle2); } // -------------------------------------------------------------------------------------------------------- // Events/MIDI Output for (uint32_t i=0; i < fEventsOut.count; ++i) { uint32_t lastFrame = 0; Lv2EventData& evData(fEventsOut.data[i]); if (evData.type & CARLA_EVENT_DATA_ATOM) { const LV2_Atom_Event* ev; LV2_Atom_Buffer_Iterator iter; uint8_t* data; lv2_atom_buffer_begin(&iter, evData.atom); for (;;) { data = nullptr; ev = lv2_atom_buffer_get(&iter, &data); if (ev == nullptr || ev->body.size == 0 || data == nullptr) break; if (ev->body.type == kUridMidiEvent) { if (evData.port != nullptr) { CARLA_SAFE_ASSERT_CONTINUE(ev->time.frames >= 0); CARLA_SAFE_ASSERT_CONTINUE(ev->body.size < 0xFF); uint32_t currentFrame = static_cast(ev->time.frames); if (currentFrame < lastFrame) currentFrame = lastFrame; else if (currentFrame >= frames) currentFrame = frames - 1; evData.port->writeMidiEvent(currentFrame, static_cast(ev->body.size), data); } } else if (fAtomBufferUiOutTmpData != nullptr) { fAtomBufferUiOut.put(&ev->body, evData.rindex); } lv2_atom_buffer_increment(&iter); } } else if ((evData.type & CARLA_EVENT_DATA_EVENT) != 0 && evData.port != nullptr) { const LV2_Event* ev; LV2_Event_Iterator iter; uint8_t* data; lv2_event_begin(&iter, evData.event); for (;;) { data = nullptr; ev = lv2_event_get(&iter, &data); if (ev == nullptr || data == nullptr) break; uint32_t currentFrame = ev->frames; if (currentFrame < lastFrame) currentFrame = lastFrame; else if (currentFrame >= frames) currentFrame = frames - 1; if (ev->type == kUridMidiEvent) { CARLA_SAFE_ASSERT_CONTINUE(ev->size < 0xFF); evData.port->writeMidiEvent(currentFrame, static_cast(ev->size), data); } lv2_event_increment(&iter); } } else if ((evData.type & CARLA_EVENT_DATA_MIDI_LL) != 0 && evData.port != nullptr) { LV2_MIDIState state = { &evData.midi, frames, 0 }; uint32_t eventSize; double eventTime; uchar* eventData; for (;;) { eventSize = 0; eventTime = 0.0; eventData = nullptr; lv2midi_get_event(&state, &eventTime, &eventSize, &eventData); if (eventData == nullptr || eventSize == 0) break; CARLA_SAFE_ASSERT_CONTINUE(eventSize < 0xFF); CARLA_SAFE_ASSERT_CONTINUE(eventTime >= 0.0); evData.port->writeMidiEvent(static_cast(eventTime), static_cast(eventSize), eventData); lv2midi_step(&state); } } } #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // -------------------------------------------------------------------------------------------------------- // Control Output if (pData->event.portOut != nullptr) { uint8_t channel; uint16_t param; float value; for (uint32_t k=0; k < pData->param.count; ++k) { if (pData->param.data[k].type != PARAMETER_OUTPUT) continue; if (fStrictBounds >= 0 && (pData->param.data[k].hints & PARAMETER_IS_STRICT_BOUNDS) != 0) // plugin is responsible to ensure correct bounds pData->param.ranges[k].fixValue(fParamBuffers[k]); if (pData->param.data[k].mappedControlIndex > 0) { channel = pData->param.data[k].midiChannel; param = static_cast(pData->param.data[k].mappedControlIndex); value = pData->param.ranges[k].getNormalizedValue(fParamBuffers[k]); pData->event.portOut->writeControlEvent(0, channel, kEngineControlEventTypeParameter, param, -1, value); } } } // End of Control Output #endif fFirstActive = false; // -------------------------------------------------------------------------------------------------------- } bool processSingle(const float* const* const audioIn, float** const audioOut, const float* const* const cvIn, float** const cvOut, const uint32_t frames, const uint32_t timeOffset) { CARLA_SAFE_ASSERT_RETURN(frames > 0, false); if (pData->audioIn.count > 0) { CARLA_SAFE_ASSERT_RETURN(audioIn != nullptr, false); CARLA_SAFE_ASSERT_RETURN(fAudioInBuffers != nullptr, false); } if (pData->audioOut.count > 0) { CARLA_SAFE_ASSERT_RETURN(audioOut != nullptr, false); CARLA_SAFE_ASSERT_RETURN(fAudioOutBuffers != nullptr, false); } if (pData->cvIn.count > 0) { CARLA_SAFE_ASSERT_RETURN(cvIn != nullptr, false); } if (pData->cvOut.count > 0) { CARLA_SAFE_ASSERT_RETURN(cvOut != nullptr, false); } // -------------------------------------------------------------------------------------------------------- // Try lock, silence otherwise #ifndef STOAT_TEST_BUILD if (pData->engine->isOffline()) { pData->singleMutex.lock(); } else #endif if (! pData->singleMutex.tryLock()) { for (uint32_t i=0; i < pData->audioOut.count; ++i) { for (uint32_t k=0; k < frames; ++k) audioOut[i][k+timeOffset] = 0.0f; } for (uint32_t i=0; i < pData->cvOut.count; ++i) { for (uint32_t k=0; k < frames; ++k) cvOut[i][k+timeOffset] = 0.0f; } return false; } // -------------------------------------------------------------------------------------------------------- // Set audio buffers for (uint32_t i=0; i < pData->audioIn.count; ++i) carla_copyFloats(fAudioInBuffers[i], audioIn[i]+timeOffset, frames); for (uint32_t i=0; i < pData->audioOut.count; ++i) carla_zeroFloats(fAudioOutBuffers[i], frames); // -------------------------------------------------------------------------------------------------------- // Set CV buffers for (uint32_t i=0; i < pData->cvIn.count; ++i) carla_copyFloats(fCvInBuffers[i], cvIn[i]+timeOffset, frames); for (uint32_t i=0; i < pData->cvOut.count; ++i) carla_zeroFloats(fCvOutBuffers[i], frames); // -------------------------------------------------------------------------------------------------------- // Run plugin fDescriptor->run(fHandle, frames); if (fHandle2 != nullptr) fDescriptor->run(fHandle2, frames); // -------------------------------------------------------------------------------------------------------- // Handle trigger parameters for (uint32_t k=0; k < pData->param.count; ++k) { if (pData->param.data[k].type != PARAMETER_INPUT) continue; if (pData->param.data[k].hints & PARAMETER_IS_TRIGGER) { if (carla_isNotEqual(fParamBuffers[k], pData->param.ranges[k].def)) { fParamBuffers[k] = pData->param.ranges[k].def; pData->postponeParameterChangeRtEvent(true, static_cast(k), fParamBuffers[k]); } } } pData->postRtEvents.trySplice(); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // -------------------------------------------------------------------------------------------------------- // Post-processing (dry/wet, volume and balance) { const bool doDryWet = (pData->hints & PLUGIN_CAN_DRYWET) != 0 && carla_isNotEqual(pData->postProc.dryWet, 1.0f); const bool doBalance = (pData->hints & PLUGIN_CAN_BALANCE) != 0 && ! (carla_isEqual(pData->postProc.balanceLeft, -1.0f) && carla_isEqual(pData->postProc.balanceRight, 1.0f)); const bool isMono = (pData->audioIn.count == 1); bool isPair; float bufValue, oldBufLeft[doBalance ? frames : 1]; for (uint32_t i=0; i < pData->audioOut.count; ++i) { // Dry/Wet if (doDryWet) { const uint32_t c = isMono ? 0 : i; for (uint32_t k=0; k < frames; ++k) { # ifndef BUILD_BRIDGE if (k < pData->latency.frames && pData->latency.buffers != nullptr) bufValue = pData->latency.buffers[c][k]; else if (pData->latency.frames < frames) bufValue = fAudioInBuffers[c][k-pData->latency.frames]; else # endif bufValue = fAudioInBuffers[c][k]; fAudioOutBuffers[i][k] = (fAudioOutBuffers[i][k] * pData->postProc.dryWet) + (bufValue * (1.0f - pData->postProc.dryWet)); } } // Balance if (doBalance) { isPair = (i % 2 == 0); if (isPair) { CARLA_ASSERT(i+1 < pData->audioOut.count); carla_copyFloats(oldBufLeft, fAudioOutBuffers[i], frames); } float balRangeL = (pData->postProc.balanceLeft + 1.0f)/2.0f; float balRangeR = (pData->postProc.balanceRight + 1.0f)/2.0f; for (uint32_t k=0; k < frames; ++k) { if (isPair) { // left fAudioOutBuffers[i][k] = oldBufLeft[k] * (1.0f - balRangeL); fAudioOutBuffers[i][k] += fAudioOutBuffers[i+1][k] * (1.0f - balRangeR); } else { // right fAudioOutBuffers[i][k] = fAudioOutBuffers[i][k] * balRangeR; fAudioOutBuffers[i][k] += oldBufLeft[k] * balRangeL; } } } // Volume (and buffer copy) { for (uint32_t k=0; k < frames; ++k) audioOut[i][k+timeOffset] = fAudioOutBuffers[i][k] * pData->postProc.volume; } } } // End of Post-processing # ifndef BUILD_BRIDGE // -------------------------------------------------------------------------------------------------------- // Save latency values for next callback if (pData->latency.frames != 0 && pData->latency.buffers != nullptr) { CARLA_SAFE_ASSERT(timeOffset == 0); const uint32_t latframes = pData->latency.frames; if (latframes <= frames) { for (uint32_t i=0; i < pData->audioIn.count; ++i) carla_copyFloats(pData->latency.buffers[i], audioIn[i]+(frames-latframes), latframes); } else { const uint32_t diff = latframes - frames; for (uint32_t i=0, k; iaudioIn.count; ++i) { // push back buffer by 'frames' for (k=0; k < diff; ++k) pData->latency.buffers[i][k] = pData->latency.buffers[i][k+frames]; // put current input at the end for (uint32_t j=0; k < latframes; ++j, ++k) pData->latency.buffers[i][k] = audioIn[i][j]; } } } # endif #else // BUILD_BRIDGE_ALTERNATIVE_ARCH for (uint32_t i=0; i < pData->audioOut.count; ++i) { for (uint32_t k=0; k < frames; ++k) audioOut[i][k+timeOffset] = fAudioOutBuffers[i][k]; } #endif for (uint32_t i=0; i < pData->cvOut.count; ++i) { for (uint32_t k=0; k < frames; ++k) cvOut[i][k+timeOffset] = fCvOutBuffers[i][k]; } // -------------------------------------------------------------------------------------------------------- pData->singleMutex.unlock(); return true; } void bufferSizeChanged(const uint32_t newBufferSize) override { CARLA_ASSERT_INT(newBufferSize > 0, newBufferSize); carla_debug("CarlaPluginLV2::bufferSizeChanged(%i) - start", newBufferSize); for (uint32_t i=0; i < pData->audioIn.count; ++i) { if (fAudioInBuffers[i] != nullptr) delete[] fAudioInBuffers[i]; fAudioInBuffers[i] = new float[newBufferSize]; } for (uint32_t i=0; i < pData->audioOut.count; ++i) { if (fAudioOutBuffers[i] != nullptr) delete[] fAudioOutBuffers[i]; fAudioOutBuffers[i] = new float[newBufferSize]; } if (fHandle2 == nullptr) { for (uint32_t i=0; i < pData->audioIn.count; ++i) { CARLA_ASSERT(fAudioInBuffers[i] != nullptr); fDescriptor->connect_port(fHandle, pData->audioIn.ports[i].rindex, fAudioInBuffers[i]); } for (uint32_t i=0; i < pData->audioOut.count; ++i) { CARLA_ASSERT(fAudioOutBuffers[i] != nullptr); fDescriptor->connect_port(fHandle, pData->audioOut.ports[i].rindex, fAudioOutBuffers[i]); } } else { if (pData->audioIn.count > 0) { CARLA_ASSERT(pData->audioIn.count == 2); CARLA_ASSERT(fAudioInBuffers[0] != nullptr); CARLA_ASSERT(fAudioInBuffers[1] != nullptr); fDescriptor->connect_port(fHandle, pData->audioIn.ports[0].rindex, fAudioInBuffers[0]); fDescriptor->connect_port(fHandle2, pData->audioIn.ports[1].rindex, fAudioInBuffers[1]); } if (pData->audioOut.count > 0) { CARLA_ASSERT(pData->audioOut.count == 2); CARLA_ASSERT(fAudioOutBuffers[0] != nullptr); CARLA_ASSERT(fAudioOutBuffers[1] != nullptr); fDescriptor->connect_port(fHandle, pData->audioOut.ports[0].rindex, fAudioOutBuffers[0]); fDescriptor->connect_port(fHandle2, pData->audioOut.ports[1].rindex, fAudioOutBuffers[1]); } } for (uint32_t i=0; i < pData->cvIn.count; ++i) { if (fCvInBuffers[i] != nullptr) delete[] fCvInBuffers[i]; fCvInBuffers[i] = new float[newBufferSize]; fDescriptor->connect_port(fHandle, pData->cvIn.ports[i].rindex, fCvInBuffers[i]); if (fHandle2 != nullptr) fDescriptor->connect_port(fHandle2, pData->cvIn.ports[i].rindex, fCvInBuffers[i]); } for (uint32_t i=0; i < pData->cvOut.count; ++i) { if (fCvOutBuffers[i] != nullptr) delete[] fCvOutBuffers[i]; fCvOutBuffers[i] = new float[newBufferSize]; fDescriptor->connect_port(fHandle, pData->cvOut.ports[i].rindex, fCvOutBuffers[i]); if (fHandle2 != nullptr) fDescriptor->connect_port(fHandle2, pData->cvOut.ports[i].rindex, fCvOutBuffers[i]); } const int newBufferSizeInt(static_cast(newBufferSize)); if (fLv2Options.maxBufferSize != newBufferSizeInt || (fLv2Options.minBufferSize != 1 && fLv2Options.minBufferSize != newBufferSizeInt)) { fLv2Options.maxBufferSize = fLv2Options.nominalBufferSize = newBufferSizeInt; if (fLv2Options.minBufferSize != 1) fLv2Options.minBufferSize = newBufferSizeInt; if (fExt.options != nullptr && fExt.options->set != nullptr) { LV2_Options_Option options[4]; carla_zeroStructs(options, 4); carla_copyStruct(options[0], fLv2Options.opts[CarlaPluginLV2Options::MaxBlockLenth]); carla_copyStruct(options[1], fLv2Options.opts[CarlaPluginLV2Options::NominalBlockLenth]); if (fLv2Options.minBufferSize != 1) carla_copyStruct(options[2], fLv2Options.opts[CarlaPluginLV2Options::MinBlockLenth]); fExt.options->set(fHandle, options); } } carla_debug("CarlaPluginLV2::bufferSizeChanged(%i) - end", newBufferSize); } void sampleRateChanged(const double newSampleRate) override { CARLA_ASSERT_INT(newSampleRate > 0.0, newSampleRate); carla_debug("CarlaPluginLV2::sampleRateChanged(%g) - start", newSampleRate); const float sampleRatef = static_cast(newSampleRate); if (carla_isNotEqual(fLv2Options.sampleRate, sampleRatef)) { fLv2Options.sampleRate = sampleRatef; if (fExt.options != nullptr && fExt.options->set != nullptr) { LV2_Options_Option options[2]; carla_copyStruct(options[0], fLv2Options.opts[CarlaPluginLV2Options::SampleRate]); carla_zeroStruct(options[1]); fExt.options->set(fHandle, options); } } for (uint32_t k=0; k < pData->param.count; ++k) { if (pData->param.data[k].type != PARAMETER_INPUT) continue; if (pData->param.special[k] != PARAMETER_SPECIAL_SAMPLE_RATE) continue; fParamBuffers[k] = sampleRatef; pData->postponeParameterChangeRtEvent(true, static_cast(k), fParamBuffers[k]); break; } carla_debug("CarlaPluginLV2::sampleRateChanged(%g) - end", newSampleRate); } void offlineModeChanged(const bool isOffline) override { for (uint32_t k=0; k < pData->param.count; ++k) { if (pData->param.data[k].type == PARAMETER_INPUT && pData->param.special[k] == PARAMETER_SPECIAL_FREEWHEEL) { fParamBuffers[k] = isOffline ? pData->param.ranges[k].max : pData->param.ranges[k].min; pData->postponeParameterChangeRtEvent(true, static_cast(k), fParamBuffers[k]); break; } } } // ------------------------------------------------------------------- // Plugin buffers void initBuffers() const noexcept override { fEventsIn.initBuffers(); fEventsOut.initBuffers(); CarlaPlugin::initBuffers(); } void clearBuffers() noexcept override { carla_debug("CarlaPluginLV2::clearBuffers() - start"); if (fAudioInBuffers != nullptr) { for (uint32_t i=0; i < pData->audioIn.count; ++i) { if (fAudioInBuffers[i] != nullptr) { delete[] fAudioInBuffers[i]; fAudioInBuffers[i] = nullptr; } } delete[] fAudioInBuffers; fAudioInBuffers = nullptr; } if (fAudioOutBuffers != nullptr) { for (uint32_t i=0; i < pData->audioOut.count; ++i) { if (fAudioOutBuffers[i] != nullptr) { delete[] fAudioOutBuffers[i]; fAudioOutBuffers[i] = nullptr; } } delete[] fAudioOutBuffers; fAudioOutBuffers = nullptr; } if (fCvInBuffers != nullptr) { for (uint32_t i=0; i < pData->cvIn.count; ++i) { if (fCvInBuffers[i] != nullptr) { delete[] fCvInBuffers[i]; fCvInBuffers[i] = nullptr; } } delete[] fCvInBuffers; fCvInBuffers = nullptr; } if (fCvOutBuffers != nullptr) { for (uint32_t i=0; i < pData->cvOut.count; ++i) { if (fCvOutBuffers[i] != nullptr) { delete[] fCvOutBuffers[i]; fCvOutBuffers[i] = nullptr; } } delete[] fCvOutBuffers; fCvOutBuffers = nullptr; } if (fParamBuffers != nullptr) { delete[] fParamBuffers; fParamBuffers = nullptr; } fEventsIn.clear(pData->event.portIn); fEventsOut.clear(pData->event.portOut); CarlaPlugin::clearBuffers(); carla_debug("CarlaPluginLV2::clearBuffers() - end"); } // ------------------------------------------------------------------- // Post-poned UI Stuff void uiParameterChange(const uint32_t index, const float value) noexcept override { CARLA_SAFE_ASSERT_RETURN(fUI.type != UI::TYPE_NULL || fFilePathURI.isNotEmpty(),); CARLA_SAFE_ASSERT_RETURN(index < pData->param.count,); CARLA_SAFE_ASSERT_RETURN(pData->param.data[index].rindex >= 0,); if (fUI.type == UI::TYPE_BRIDGE) { if (! fPipeServer.isPipeRunning()) return; } else { if (fUI.handle == nullptr) return; if (fUI.descriptor == nullptr || fUI.descriptor->port_event == nullptr) return; if (fNeedsUiClose) return; } ParameterData& pdata(pData->param.data[index]); if (pdata.hints & PARAMETER_IS_NOT_SAVED) { int32_t rindex = pdata.rindex; CARLA_SAFE_ASSERT_RETURN(rindex - static_cast(fRdfDescriptor->PortCount) >= 0,); rindex -= static_cast(fRdfDescriptor->PortCount); CARLA_SAFE_ASSERT_RETURN(rindex < static_cast(fRdfDescriptor->ParameterCount),); const char* const uri = fRdfDescriptor->Parameters[rindex].URI; if (fUI.type == UI::TYPE_BRIDGE) { fPipeServer.writeLv2ParameterMessage(uri, value); } else if (fEventsIn.ctrl != nullptr) { uint8_t atomBuf[256]; LV2_Atom_Forge atomForge; initAtomForge(atomForge); lv2_atom_forge_set_buffer(&atomForge, atomBuf, sizeof(atomBuf)); LV2_Atom_Forge_Frame forgeFrame; lv2_atom_forge_object(&atomForge, &forgeFrame, kUridNull, kUridPatchSet); lv2_atom_forge_key(&atomForge, kUridCarlaParameterChange); lv2_atom_forge_bool(&atomForge, true); lv2_atom_forge_key(&atomForge, kUridPatchProperty); lv2_atom_forge_urid(&atomForge, getCustomURID(uri)); lv2_atom_forge_key(&atomForge, kUridPatchValue); switch (fRdfDescriptor->Parameters[rindex].Type) { case LV2_PARAMETER_TYPE_BOOL: lv2_atom_forge_bool(&atomForge, value > 0.5f); break; case LV2_PARAMETER_TYPE_INT: lv2_atom_forge_int(&atomForge, static_cast(value + 0.5f)); break; case LV2_PARAMETER_TYPE_LONG: lv2_atom_forge_long(&atomForge, static_cast(value + 0.5f)); break; case LV2_PARAMETER_TYPE_FLOAT: lv2_atom_forge_float(&atomForge, value); break; case LV2_PARAMETER_TYPE_DOUBLE: lv2_atom_forge_double(&atomForge, value); break; default: carla_stderr2("uiParameterChange called for invalid parameter, abort!"); return; } lv2_atom_forge_pop(&atomForge, &forgeFrame); LV2_Atom* const atom((LV2_Atom*)atomBuf); CARLA_SAFE_ASSERT(atom->size < sizeof(atomBuf)); fUI.descriptor->port_event(fUI.handle, fEventsIn.ctrl->rindex, lv2_atom_total_size(atom), kUridAtomTransferEvent, atom); } } else { if (fUI.type == UI::TYPE_BRIDGE) { fPipeServer.writeControlMessage(static_cast(pData->param.data[index].rindex), value); } else { fUI.descriptor->port_event(fUI.handle, static_cast(pData->param.data[index].rindex), sizeof(float), kUridNull, &value); } } } void uiMidiProgramChange(const uint32_t index) noexcept override { CARLA_SAFE_ASSERT_RETURN(fUI.type != UI::TYPE_NULL || fFilePathURI.isNotEmpty(),); CARLA_SAFE_ASSERT_RETURN(index < pData->midiprog.count,); if (fUI.type == UI::TYPE_BRIDGE) { if (fPipeServer.isPipeRunning()) fPipeServer.writeMidiProgramMessage(pData->midiprog.data[index].bank, pData->midiprog.data[index].program); } else { if (fExt.uiprograms != nullptr && fExt.uiprograms->select_program != nullptr && ! fNeedsUiClose) fExt.uiprograms->select_program(fUI.handle, pData->midiprog.data[index].bank, pData->midiprog.data[index].program); } } void uiNoteOn(const uint8_t channel, const uint8_t note, const uint8_t velo) noexcept override { CARLA_SAFE_ASSERT_RETURN(fUI.type != UI::TYPE_NULL || fFilePathURI.isNotEmpty(),); CARLA_SAFE_ASSERT_RETURN(channel < MAX_MIDI_CHANNELS,); CARLA_SAFE_ASSERT_RETURN(note < MAX_MIDI_NOTE,); CARLA_SAFE_ASSERT_RETURN(velo > 0 && velo < MAX_MIDI_VALUE,); #if 0 if (fUI.type == UI::TYPE_BRIDGE) { if (fPipeServer.isPipeRunning()) fPipeServer.writeMidiNoteMessage(false, channel, note, velo); } else { if (fUI.handle != nullptr && fUI.descriptor != nullptr && fUI.descriptor->port_event != nullptr && fEventsIn.ctrl != nullptr && ! fNeedsUiClose) { LV2_Atom_MidiEvent midiEv; midiEv.atom.type = kUridMidiEvent; midiEv.atom.size = 3; midiEv.data[0] = uint8_t(MIDI_STATUS_NOTE_ON | (channel & MIDI_CHANNEL_BIT)); midiEv.data[1] = note; midiEv.data[2] = velo; fUI.descriptor->port_event(fUI.handle, fEventsIn.ctrl->rindex, lv2_atom_total_size(midiEv), kUridAtomTransferEvent, &midiEv); } } #endif } void uiNoteOff(const uint8_t channel, const uint8_t note) noexcept override { CARLA_SAFE_ASSERT_RETURN(fUI.type != UI::TYPE_NULL || fFilePathURI.isNotEmpty(),); CARLA_SAFE_ASSERT_RETURN(channel < MAX_MIDI_CHANNELS,); CARLA_SAFE_ASSERT_RETURN(note < MAX_MIDI_NOTE,); #if 0 if (fUI.type == UI::TYPE_BRIDGE) { if (fPipeServer.isPipeRunning()) fPipeServer.writeMidiNoteMessage(false, channel, note, 0); } else { if (fUI.handle != nullptr && fUI.descriptor != nullptr && fUI.descriptor->port_event != nullptr && fEventsIn.ctrl != nullptr && ! fNeedsUiClose) { LV2_Atom_MidiEvent midiEv; midiEv.atom.type = kUridMidiEvent; midiEv.atom.size = 3; midiEv.data[0] = uint8_t(MIDI_STATUS_NOTE_OFF | (channel & MIDI_CHANNEL_BIT)); midiEv.data[1] = note; midiEv.data[2] = 0; fUI.descriptor->port_event(fUI.handle, fEventsIn.ctrl->rindex, lv2_atom_total_size(midiEv), kUridAtomTransferEvent, &midiEv); } } #endif } // ------------------------------------------------------------------- // Internal helper functions void cloneLV2Files(const CarlaPlugin& other) override { CARLA_SAFE_ASSERT_RETURN(other.getType() == PLUGIN_LV2,); const CarlaPluginLV2& otherLV2((const CarlaPluginLV2&)other); const File tmpDir(handleStateMapToAbsolutePath(false, false, true, ".")); if (tmpDir.exists()) tmpDir.deleteRecursively(); const File otherStateDir(otherLV2.handleStateMapToAbsolutePath(false, false, false, ".")); if (otherStateDir.exists()) otherStateDir.copyDirectoryTo(tmpDir); const File otherTmpDir(otherLV2.handleStateMapToAbsolutePath(false, false, true, ".")); if (otherTmpDir.exists()) otherTmpDir.copyDirectoryTo(tmpDir); } void restoreLV2State(const bool temporary) noexcept override { if (fExt.state == nullptr || fExt.state->restore == nullptr) return; if (! temporary) { const File tmpDir(handleStateMapToAbsolutePath(false, false, true, ".")); if (tmpDir.exists()) tmpDir.deleteRecursively(); } LV2_State_Status status = LV2_STATE_ERR_UNKNOWN; { const ScopedSingleProcessLocker spl(this, !fHasThreadSafeRestore); try { status = fExt.state->restore(fHandle, carla_lv2_state_retrieve, this, LV2_STATE_IS_POD, temporary ? fFeatures : fStateFeatures); } catch(...) {} if (fHandle2 != nullptr) { try { fExt.state->restore(fHandle, carla_lv2_state_retrieve, this, LV2_STATE_IS_POD, temporary ? fFeatures : fStateFeatures); } catch(...) {} } } switch (status) { case LV2_STATE_SUCCESS: carla_debug("CarlaPluginLV2::updateLV2State() - success"); break; case LV2_STATE_ERR_UNKNOWN: carla_stderr("CarlaPluginLV2::updateLV2State() - unknown error"); break; case LV2_STATE_ERR_BAD_TYPE: carla_stderr("CarlaPluginLV2::updateLV2State() - error, bad type"); break; case LV2_STATE_ERR_BAD_FLAGS: carla_stderr("CarlaPluginLV2::updateLV2State() - error, bad flags"); break; case LV2_STATE_ERR_NO_FEATURE: carla_stderr("CarlaPluginLV2::updateLV2State() - error, missing feature"); break; case LV2_STATE_ERR_NO_PROPERTY: carla_stderr("CarlaPluginLV2::updateLV2State() - error, missing property"); break; case LV2_STATE_ERR_NO_SPACE: carla_stderr("CarlaPluginLV2::updateLV2State() - error, insufficient space"); break; } } // ------------------------------------------------------------------- bool isRealtimeSafe() const noexcept { CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr, false); for (uint32_t i=0; i < fRdfDescriptor->FeatureCount; ++i) { if (std::strcmp(fRdfDescriptor->Features[i].URI, LV2_CORE__hardRTCapable) == 0) return true; } return false; } // ------------------------------------------------------------------- bool isUiBridgeable(const uint32_t uiId) const noexcept { CARLA_SAFE_ASSERT_RETURN(uiId < fRdfDescriptor->UICount, false); #ifndef LV2_UIS_ONLY_INPROCESS const LV2_RDF_UI* const rdfUI(&fRdfDescriptor->UIs[uiId]); for (uint32_t i=0; i < rdfUI->FeatureCount; ++i) { const LV2_RDF_Feature& feat(rdfUI->Features[i]); if (! feat.Required) continue; if (std::strcmp(feat.URI, LV2_INSTANCE_ACCESS_URI) == 0) return false; if (std::strcmp(feat.URI, LV2_DATA_ACCESS_URI) == 0) return false; } // Calf UIs are mostly useless without their special graphs // but they can be crashy under certain conditions, so follow user preferences if (std::strstr(rdfUI->URI, "http://calf.sourceforge.net/plugins/gui/") != nullptr) return pData->engine->getOptions().preferUiBridges; // LSP-Plugins UIs make heavy use of URIDs, for which carla right now is very slow // FIXME after some optimization, remove this if (std::strstr(rdfUI->URI, "http://lsp-plug.in/ui/lv2/") != nullptr) return false; return true; #else return false; #endif } bool isUiResizable() const noexcept { CARLA_SAFE_ASSERT_RETURN(fUI.rdfDescriptor != nullptr, false); for (uint32_t i=0; i < fUI.rdfDescriptor->FeatureCount; ++i) { if (std::strcmp(fUI.rdfDescriptor->Features[i].URI, LV2_UI__fixedSize) == 0) return false; if (std::strcmp(fUI.rdfDescriptor->Features[i].URI, LV2_UI__noUserResize) == 0) return false; } return true; } const char* getUiBridgeBinary(const LV2_Property type) const { CarlaString bridgeBinary(pData->engine->getOptions().binaryDir); if (bridgeBinary.isEmpty()) return nullptr; switch (type) { case LV2_UI_GTK2: bridgeBinary += CARLA_OS_SEP_STR "carla-bridge-lv2-gtk2"; break; case LV2_UI_GTK3: bridgeBinary += CARLA_OS_SEP_STR "carla-bridge-lv2-gtk3"; break; case LV2_UI_QT4: bridgeBinary += CARLA_OS_SEP_STR "carla-bridge-lv2-qt4"; break; case LV2_UI_QT5: bridgeBinary += CARLA_OS_SEP_STR "carla-bridge-lv2-qt5"; break; case LV2_UI_COCOA: bridgeBinary += CARLA_OS_SEP_STR "carla-bridge-lv2-cocoa"; break; case LV2_UI_WINDOWS: bridgeBinary += CARLA_OS_SEP_STR "carla-bridge-lv2-windows"; break; case LV2_UI_X11: bridgeBinary += CARLA_OS_SEP_STR "carla-bridge-lv2-x11"; break; case LV2_UI_MOD: bridgeBinary += CARLA_OS_SEP_STR "carla-bridge-lv2-modgui"; break; #if 0 case LV2_UI_EXTERNAL: case LV2_UI_OLD_EXTERNAL: bridgeBinary += CARLA_OS_SEP_STR "carla-bridge-lv2-external"; break; #endif default: return nullptr; } #ifdef CARLA_OS_WIN bridgeBinary += ".exe"; #endif if (! File(bridgeBinary.buffer()).existsAsFile()) return nullptr; return bridgeBinary.dupSafe(); } // ------------------------------------------------------------------- void recheckExtensions() { CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr,); carla_debug("CarlaPluginLV2::recheckExtensions()"); fExt.options = nullptr; fExt.programs = nullptr; fExt.state = nullptr; fExt.worker = nullptr; fExt.inlineDisplay = nullptr; for (uint32_t i=0; i < fRdfDescriptor->ExtensionCount; ++i) { const char* const extension = fRdfDescriptor->Extensions[i]; CARLA_SAFE_ASSERT_CONTINUE(extension != nullptr); /**/ if (std::strcmp(extension, LV2_OPTIONS__interface) == 0) pData->hints |= PLUGIN_HAS_EXTENSION_OPTIONS; else if (std::strcmp(extension, LV2_PROGRAMS__Interface) == 0) pData->hints |= PLUGIN_HAS_EXTENSION_PROGRAMS; else if (std::strcmp(extension, LV2_STATE__interface) == 0) pData->hints |= PLUGIN_HAS_EXTENSION_STATE; else if (std::strcmp(extension, LV2_WORKER__interface) == 0) pData->hints |= PLUGIN_HAS_EXTENSION_WORKER; else if (std::strcmp(extension, LV2_INLINEDISPLAY__interface) == 0) pData->hints |= PLUGIN_HAS_EXTENSION_INLINE_DISPLAY; else if (std::strcmp(extension, LV2_MIDNAM__interface) == 0) pData->hints |= PLUGIN_HAS_EXTENSION_MIDNAM; else carla_stdout("Plugin '%s' has non-supported extension: '%s'", fRdfDescriptor->URI, extension); } // Fix for broken plugins, nasty! for (uint32_t i=0; i < fRdfDescriptor->FeatureCount; ++i) { const LV2_RDF_Feature& feature(fRdfDescriptor->Features[i]); if (std::strcmp(feature.URI, LV2_INLINEDISPLAY__queue_draw) == 0) { if (pData->hints & PLUGIN_HAS_EXTENSION_INLINE_DISPLAY) break; carla_stdout("Plugin '%s' uses inline-display but does not set extension data, nasty!", fRdfDescriptor->URI); pData->hints |= PLUGIN_HAS_EXTENSION_INLINE_DISPLAY; } else if (std::strcmp(feature.URI, LV2_MIDNAM__update) == 0) { if (pData->hints & PLUGIN_HAS_EXTENSION_MIDNAM) break; carla_stdout("Plugin '%s' uses midnam but does not set extension data, nasty!", fRdfDescriptor->URI); pData->hints |= PLUGIN_HAS_EXTENSION_MIDNAM; } } if (fDescriptor->extension_data != nullptr) { if (pData->hints & PLUGIN_HAS_EXTENSION_OPTIONS) fExt.options = (const LV2_Options_Interface*)fDescriptor->extension_data(LV2_OPTIONS__interface); if (pData->hints & PLUGIN_HAS_EXTENSION_PROGRAMS) fExt.programs = (const LV2_Programs_Interface*)fDescriptor->extension_data(LV2_PROGRAMS__Interface); if (pData->hints & PLUGIN_HAS_EXTENSION_STATE) fExt.state = (const LV2_State_Interface*)fDescriptor->extension_data(LV2_STATE__interface); if (pData->hints & PLUGIN_HAS_EXTENSION_WORKER) fExt.worker = (const LV2_Worker_Interface*)fDescriptor->extension_data(LV2_WORKER__interface); if (pData->hints & PLUGIN_HAS_EXTENSION_INLINE_DISPLAY) fExt.inlineDisplay = (const LV2_Inline_Display_Interface*)fDescriptor->extension_data(LV2_INLINEDISPLAY__interface); if (pData->hints & PLUGIN_HAS_EXTENSION_MIDNAM) fExt.midnam = (const LV2_Midnam_Interface*)fDescriptor->extension_data(LV2_MIDNAM__interface); // check if invalid if (fExt.options != nullptr && fExt.options->get == nullptr && fExt.options->set == nullptr) fExt.options = nullptr; if (fExt.programs != nullptr && (fExt.programs->get_program == nullptr || fExt.programs->select_program == nullptr)) fExt.programs = nullptr; if (fExt.state != nullptr && (fExt.state->save == nullptr || fExt.state->restore == nullptr)) fExt.state = nullptr; if (fExt.worker != nullptr && fExt.worker->work == nullptr) fExt.worker = nullptr; if (fExt.inlineDisplay != nullptr) { if (fExt.inlineDisplay->render != nullptr) { pData->hints |= PLUGIN_HAS_INLINE_DISPLAY; pData->setCanDeleteLib(false); } else { fExt.inlineDisplay = nullptr; } } if (fExt.midnam != nullptr && fExt.midnam->midnam == nullptr) fExt.midnam = nullptr; } CARLA_SAFE_ASSERT_RETURN(fLatencyIndex == -1,); int32_t iCtrl=0; for (uint32_t i=0, count=fRdfDescriptor->PortCount; iPorts[i].Types); if (! LV2_IS_PORT_CONTROL(portTypes)) continue; const CarlaScopedValueSetter svs(iCtrl, iCtrl, iCtrl+1); if (! LV2_IS_PORT_OUTPUT(portTypes)) continue; const LV2_Property portDesignation(fRdfDescriptor->Ports[i].Designation); if (! LV2_IS_PORT_DESIGNATION_LATENCY(portDesignation)) continue; fLatencyIndex = iCtrl; break; } } // ------------------------------------------------------------------- void updateUi() { CARLA_SAFE_ASSERT_RETURN(fUI.handle != nullptr,); CARLA_SAFE_ASSERT_RETURN(fUI.descriptor != nullptr,); carla_debug("CarlaPluginLV2::updateUi()"); // update midi program if (fExt.uiprograms != nullptr && pData->midiprog.count > 0 && pData->midiprog.current >= 0) { const MidiProgramData& curData(pData->midiprog.getCurrent()); fExt.uiprograms->select_program(fUI.handle, curData.bank, curData.program); } // update control ports if (fUI.descriptor->port_event != nullptr) { float value; for (uint32_t i=0; i < pData->param.count; ++i) { value = getParameterValue(i); fUI.descriptor->port_event(fUI.handle, static_cast(pData->param.data[i].rindex), sizeof(float), kUridNull, &value); } } } void inspectAtomForParameterChange(const LV2_Atom* const atom) { if (atom->type != kUridAtomBlank && atom->type != kUridAtomObject) return; const LV2_Atom_Object_Body* const objbody = (const LV2_Atom_Object_Body*)(atom + 1); if (objbody->otype != kUridPatchSet) return; const LV2_Atom_URID *property = NULL; const LV2_Atom_Bool *carlaParam = NULL; const LV2_Atom *value = NULL; lv2_atom_object_body_get(atom->size, objbody, kUridCarlaParameterChange, (const LV2_Atom**)&carlaParam, kUridPatchProperty, (const LV2_Atom**)&property, kUridPatchValue, &value, 0); if (carlaParam != nullptr && carlaParam->body != 0) return; if (property == nullptr || value == nullptr) return; switch (value->type) { case kUridAtomBool: case kUridAtomInt: //case kUridAtomLong: case kUridAtomFloat: case kUridAtomDouble: break; default: return; } uint32_t parameterId; if (! getParameterIndexForURID(property->body, parameterId)) return; const uint8_t* const vbody = (const uint8_t*)(value + 1); float rvalue; switch (value->type) { case kUridAtomBool: rvalue = *(const int32_t*)vbody != 0 ? 1.0f : 0.0f; break; case kUridAtomInt: rvalue = static_cast(*(const int32_t*)vbody); break; /* case kUridAtomLong: rvalue = *(int64_t*)vbody; break; */ case kUridAtomFloat: rvalue = *(const float*)vbody; break; case kUridAtomDouble: rvalue = static_cast(*(const double*)vbody); break; default: rvalue = 0.0f; break; } rvalue = pData->param.getFixedValue(parameterId, rvalue); fParamBuffers[parameterId] = rvalue; CarlaPlugin::setParameterValue(parameterId, rvalue, false, true, true); } bool getParameterIndexForURI(const char* const uri, uint32_t& parameterId) noexcept { parameterId = UINT32_MAX; for (uint32_t i=0; i < fRdfDescriptor->ParameterCount; ++i) { const LV2_RDF_Parameter& rdfParam(fRdfDescriptor->Parameters[i]); switch (rdfParam.Type) { case LV2_PARAMETER_TYPE_BOOL: case LV2_PARAMETER_TYPE_INT: // case LV2_PARAMETER_TYPE_LONG: case LV2_PARAMETER_TYPE_FLOAT: case LV2_PARAMETER_TYPE_DOUBLE: break; default: continue; } if (std::strcmp(rdfParam.URI, uri) == 0) { const int32_t rindex = static_cast(fRdfDescriptor->PortCount + i); for (uint32_t j=0; j < pData->param.count; ++j) { if (pData->param.data[j].rindex == rindex) { parameterId = j; break; } } break; } } return (parameterId != UINT32_MAX); } bool getParameterIndexForURID(const LV2_URID urid, uint32_t& parameterId) noexcept { parameterId = UINT32_MAX; if (urid >= fCustomURIDs.size()) return false; for (uint32_t i=0; i < fRdfDescriptor->ParameterCount; ++i) { const LV2_RDF_Parameter& rdfParam(fRdfDescriptor->Parameters[i]); switch (rdfParam.Type) { case LV2_PARAMETER_TYPE_BOOL: case LV2_PARAMETER_TYPE_INT: // case LV2_PARAMETER_TYPE_LONG: case LV2_PARAMETER_TYPE_FLOAT: case LV2_PARAMETER_TYPE_DOUBLE: break; default: continue; } const std::string& uri(fCustomURIDs[urid]); if (uri != rdfParam.URI) continue; const int32_t rindex = static_cast(fRdfDescriptor->PortCount + i); for (uint32_t j=0; j < pData->param.count; ++j) { if (pData->param.data[j].rindex == rindex) { parameterId = j; break; } } break; } return (parameterId != UINT32_MAX); } // ------------------------------------------------------------------- LV2_URID getCustomURID(const char* const uri) { CARLA_SAFE_ASSERT_RETURN(uri != nullptr && uri[0] != '\0', kUridNull); carla_debug("CarlaPluginLV2::getCustomURID(\"%s\")", uri); const std::string s_uri(uri); const std::ptrdiff_t s_pos(std::find(fCustomURIDs.begin(), fCustomURIDs.end(), s_uri) - fCustomURIDs.begin()); if (s_pos <= 0 || s_pos >= INT32_MAX) return kUridNull; const LV2_URID urid = static_cast(s_pos); const LV2_URID uriCount = static_cast(fCustomURIDs.size()); if (urid < uriCount) return urid; CARLA_SAFE_ASSERT(urid == uriCount); fCustomURIDs.push_back(uri); if (fUI.type == UI::TYPE_BRIDGE && fPipeServer.isPipeRunning()) fPipeServer.writeLv2UridMessage(urid, uri); return urid; } const char* getCustomURIDString(const LV2_URID urid) const noexcept { CARLA_SAFE_ASSERT_RETURN(urid != kUridNull, kUnmapFallback); CARLA_SAFE_ASSERT_RETURN(urid < fCustomURIDs.size(), kUnmapFallback); carla_debug("CarlaPluginLV2::getCustomURIString(%i)", urid); return fCustomURIDs[urid].c_str(); } // ------------------------------------------------------------------- void handleProgramChanged(const int32_t index) { CARLA_SAFE_ASSERT_RETURN(index >= -1,); carla_debug("CarlaPluginLV2::handleProgramChanged(%i)", index); if (index == -1) { const ScopedSingleProcessLocker spl(this, true); return reloadPrograms(false); } if (index < static_cast(pData->midiprog.count) && fExt.programs != nullptr && fExt.programs->get_program != nullptr) { if (const LV2_Program_Descriptor* const progDesc = fExt.programs->get_program(fHandle, static_cast(index))) { CARLA_SAFE_ASSERT_RETURN(progDesc->name != nullptr,); if (pData->midiprog.data[index].name != nullptr) delete[] pData->midiprog.data[index].name; pData->midiprog.data[index].name = carla_strdup(progDesc->name); if (index == pData->midiprog.current) pData->engine->callback(true, true, ENGINE_CALLBACK_UPDATE, pData->id, 0, 0, 0, 0.0, nullptr); else pData->engine->callback(true, true, ENGINE_CALLBACK_RELOAD_PROGRAMS, pData->id, 0, 0, 0, 0.0, nullptr); } } } // ------------------------------------------------------------------- LV2_Resize_Port_Status handleResizePort(const uint32_t index, const size_t size) { CARLA_SAFE_ASSERT_RETURN(size > 0, LV2_RESIZE_PORT_ERR_UNKNOWN); carla_debug("CarlaPluginLV2::handleResizePort(%i, " P_SIZE ")", index, size); // TODO return LV2_RESIZE_PORT_ERR_NO_SPACE; (void)index; } // ------------------------------------------------------------------- char* handleStateMapToAbstractPath(const bool temporary, const char* const absolutePath) const { // may already be an abstract path if (! File::isAbsolutePath(absolutePath)) return strdup(absolutePath); File projectDir, targetDir; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (const char* const projFolder = pData->engine->getCurrentProjectFolder()) projectDir = projFolder; else #endif projectDir = File::getCurrentWorkingDirectory(); if (projectDir.isNull()) { carla_stdout("Project directory not set, cannot map absolutePath %s", absolutePath); return nullptr; } water::String basedir(pData->engine->getName()); if (temporary) basedir += ".tmp"; targetDir = projectDir.getChildFile(basedir) .getChildFile(getName()); if (! targetDir.exists()) targetDir.createDirectory(); const File wabsolutePath(absolutePath); // we may be saving to non-tmp path, let's check if (! temporary) { const File tmpDir = projectDir.getChildFile(basedir + ".tmp") .getChildFile(getName()); if (wabsolutePath.getFullPathName().startsWith(tmpDir.getFullPathName())) { // gotcha, the temporary path is now the real one targetDir = tmpDir; } else if (! wabsolutePath.getFullPathName().startsWith(targetDir.getFullPathName())) { // seems like a normal save, let's be nice and put a symlink const water::String abstractFilename(wabsolutePath.getFileName()); const File targetPath(targetDir.getChildFile(abstractFilename)); wabsolutePath.createSymbolicLink(targetPath, true); carla_stdout("Creating symlink for '%s' in '%s'", absolutePath, targetDir.getFullPathName().toRawUTF8()); return strdup(abstractFilename.toRawUTF8()); } } carla_stdout("Mapping absolutePath '%s' relative to targetDir '%s'", absolutePath, targetDir.getFullPathName().toRawUTF8()); return strdup(wabsolutePath.getRelativePathFrom(targetDir).toRawUTF8()); } File handleStateMapToAbsolutePath(const bool createDirIfNeeded, const bool symlinkIfNeeded, const bool temporary, const char* const abstractPath) const { File targetDir, targetPath; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (const char* const projFolder = pData->engine->getCurrentProjectFolder()) targetDir = projFolder; else #endif targetDir = File::getCurrentWorkingDirectory(); if (targetDir.isNull()) { carla_stdout("Project directory not set, cannot map abstractPath '%s'", abstractPath); return File(); } water::String basedir(pData->engine->getName()); if (temporary) basedir += ".tmp"; targetDir = targetDir.getChildFile(basedir) .getChildFile(getName()); if (createDirIfNeeded && ! targetDir.exists()) targetDir.createDirectory(); if (File::isAbsolutePath(abstractPath)) { File wabstractPath(abstractPath); targetPath = targetDir.getChildFile(wabstractPath.getFileName()); if (symlinkIfNeeded) { carla_stdout("Creating symlink for '%s' in '%s'", abstractPath, targetDir.getFullPathName().toRawUTF8()); wabstractPath.createSymbolicLink(targetPath, true); } } else { targetPath = targetDir.getChildFile(abstractPath); targetDir = targetPath.getParentDirectory(); if (createDirIfNeeded && ! targetDir.exists()) targetDir.createDirectory(); } if (std::strcmp(abstractPath, ".") != 0) carla_stdout("Mapping abstractPath '%s' relative to targetDir '%s'", abstractPath, targetDir.getFullPathName().toRawUTF8()); return targetPath; } LV2_State_Status handleStateStore(const uint32_t key, const void* const value, const size_t size, const uint32_t type, const uint32_t flags) { CARLA_SAFE_ASSERT_RETURN(key != kUridNull, LV2_STATE_ERR_NO_PROPERTY); CARLA_SAFE_ASSERT_RETURN(value != nullptr, LV2_STATE_ERR_NO_PROPERTY); CARLA_SAFE_ASSERT_RETURN(size > 0, LV2_STATE_ERR_NO_PROPERTY); CARLA_SAFE_ASSERT_RETURN(type != kUridNull, LV2_STATE_ERR_BAD_TYPE); // FIXME linuxsampler does not set POD flag // CARLA_SAFE_ASSERT_RETURN(flags & LV2_STATE_IS_POD, LV2_STATE_ERR_BAD_FLAGS); carla_debug("CarlaPluginLV2::handleStateStore(%i:\"%s\", %p, " P_SIZE ", %i:\"%s\", %i)", key, carla_lv2_urid_unmap(this, key), value, size, type, carla_lv2_urid_unmap(this, type), flags); const char* const skey(carla_lv2_urid_unmap(this, key)); const char* const stype(carla_lv2_urid_unmap(this, type)); CARLA_SAFE_ASSERT_RETURN(skey != nullptr && skey != kUnmapFallback, LV2_STATE_ERR_BAD_TYPE); CARLA_SAFE_ASSERT_RETURN(stype != nullptr && stype != kUnmapFallback, LV2_STATE_ERR_BAD_TYPE); // Check if we already have this key for (LinkedList::Itenerator it = pData->custom.begin2(); it.valid(); it.next()) { CustomData& cData(it.getValue(kCustomDataFallbackNC)); CARLA_SAFE_ASSERT_CONTINUE(cData.isValid()); if (std::strcmp(cData.key, skey) == 0) { // found it delete[] cData.value; if (type == kUridAtomString || type == kUridAtomPath) cData.value = carla_strdup((const char*)value); else cData.value = CarlaString::asBase64(value, size).dup(); return LV2_STATE_SUCCESS; } } // Otherwise store it CustomData newData; newData.type = carla_strdup(stype); newData.key = carla_strdup(skey); if (type == kUridAtomString || type == kUridAtomPath) newData.value = carla_strdup((const char*)value); else newData.value = CarlaString::asBase64(value, size).dup(); pData->custom.append(newData); return LV2_STATE_SUCCESS; // unused (void)flags; } const void* handleStateRetrieve(const uint32_t key, size_t* const size, uint32_t* const type, uint32_t* const flags) { CARLA_SAFE_ASSERT_RETURN(key != kUridNull, nullptr); CARLA_SAFE_ASSERT_RETURN(size != nullptr, nullptr); CARLA_SAFE_ASSERT_RETURN(type != nullptr, nullptr); CARLA_SAFE_ASSERT_RETURN(flags != nullptr, nullptr); carla_debug("CarlaPluginLV2::handleStateRetrieve(%i, %p, %p, %p)", key, size, type, flags); const char* const skey(carla_lv2_urid_unmap(this, key)); CARLA_SAFE_ASSERT_RETURN(skey != nullptr && skey != kUnmapFallback, nullptr); const char* stype = nullptr; const char* stringData = nullptr; for (LinkedList::Itenerator it = pData->custom.begin2(); it.valid(); it.next()) { const CustomData& cData(it.getValue(kCustomDataFallback)); CARLA_SAFE_ASSERT_CONTINUE(cData.isValid()); if (std::strcmp(cData.key, skey) == 0) { stype = cData.type; stringData = cData.value; break; } } if (stype == nullptr || stringData == nullptr) { carla_stderr("Plugin requested value for '%s' which is not available", skey); *size = *type = *flags = 0; return nullptr; } *type = carla_lv2_urid_map(this, stype); *flags = LV2_STATE_IS_POD; if (*type == kUridAtomString || *type == kUridAtomPath) { *size = std::strlen(stringData); return stringData; } if (fLastStateChunk != nullptr) { std::free(fLastStateChunk); fLastStateChunk = nullptr; } std::vector chunk(carla_getChunkFromBase64String(stringData)); CARLA_SAFE_ASSERT_RETURN(chunk.size() > 0, nullptr); fLastStateChunk = std::malloc(chunk.size()); CARLA_SAFE_ASSERT_RETURN(fLastStateChunk != nullptr, nullptr); #ifdef CARLA_PROPER_CPP11_SUPPORT std::memcpy(fLastStateChunk, chunk.data(), chunk.size()); #else std::memcpy(fLastStateChunk, &chunk.front(), chunk.size()); #endif *size = chunk.size(); return fLastStateChunk; } // ------------------------------------------------------------------- LV2_Worker_Status handleWorkerSchedule(const uint32_t size, const void* const data) { CARLA_SAFE_ASSERT_RETURN(fExt.worker != nullptr && fExt.worker->work != nullptr, LV2_WORKER_ERR_UNKNOWN); CARLA_SAFE_ASSERT_RETURN(fEventsIn.ctrl != nullptr, LV2_WORKER_ERR_UNKNOWN); carla_debug("CarlaPluginLV2::handleWorkerSchedule(%i, %p)", size, data); if (pData->engine->isOffline()) { fExt.worker->work(fHandle, carla_lv2_worker_respond, this, size, data); return LV2_WORKER_SUCCESS; } LV2_Atom atom; atom.size = size; atom.type = kUridCarlaAtomWorkerIn; return fAtomBufferWorkerIn.putChunk(&atom, data, fEventsOut.ctrlIndex) ? LV2_WORKER_SUCCESS : LV2_WORKER_ERR_NO_SPACE; } LV2_Worker_Status handleWorkerRespond(const uint32_t size, const void* const data) { CARLA_SAFE_ASSERT_RETURN(fExt.worker != nullptr && fExt.worker->work_response != nullptr, LV2_WORKER_ERR_UNKNOWN); carla_debug("CarlaPluginLV2::handleWorkerRespond(%i, %p)", size, data); LV2_Atom atom; atom.size = size; atom.type = kUridCarlaAtomWorkerResp; return fAtomBufferWorkerResp.putChunk(&atom, data, fEventsIn.ctrlIndex) ? LV2_WORKER_SUCCESS : LV2_WORKER_ERR_NO_SPACE; } // ------------------------------------------------------------------- void handleInlineDisplayQueueRedraw() { switch (pData->engine->getProccessMode()) { case ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS: case ENGINE_PROCESS_MODE_PATCHBAY: fInlineDisplayNeedsRedraw = true; break; default: break; } } const LV2_Inline_Display_Image_Surface* renderInlineDisplay(const uint32_t width, const uint32_t height) const { CARLA_SAFE_ASSERT_RETURN(fExt.inlineDisplay != nullptr && fExt.inlineDisplay->render != nullptr, nullptr); CARLA_SAFE_ASSERT_RETURN(width > 0, nullptr); CARLA_SAFE_ASSERT_RETURN(height > 0, nullptr); return fExt.inlineDisplay->render(fHandle, width, height); } // ------------------------------------------------------------------- void handleMidnamUpdate() { CARLA_SAFE_ASSERT_RETURN(fExt.midnam != nullptr,); if (fEventsIn.ctrl == nullptr) return; char* const midnam = fExt.midnam->midnam(fHandle); CARLA_SAFE_ASSERT_RETURN(midnam != nullptr,); fEventsIn.ctrl->port->setMetaData("http://www.midi.org/dtds/MIDINameDocument10.dtd", midnam, "text/xml"); if (fExt.midnam->free != nullptr) fExt.midnam->free(midnam); } // ------------------------------------------------------------------- void handleExternalUIClosed() { CARLA_SAFE_ASSERT_RETURN(fUI.type == UI::TYPE_EXTERNAL,); carla_debug("CarlaPluginLV2::handleExternalUIClosed()"); fNeedsUiClose = true; } void handlePluginUIClosed() override { CARLA_SAFE_ASSERT_RETURN(fUI.type == UI::TYPE_EMBED,); CARLA_SAFE_ASSERT_RETURN(fUI.window != nullptr,); carla_debug("CarlaPluginLV2::handlePluginUIClosed()"); fNeedsUiClose = true; } void handlePluginUIResized(const uint width, const uint height) override { CARLA_SAFE_ASSERT_RETURN(fUI.type == UI::TYPE_EMBED,); CARLA_SAFE_ASSERT_RETURN(fUI.window != nullptr,); carla_debug("CarlaPluginLV2::handlePluginUIResized(%u, %u)", width, height); if (fUI.handle != nullptr && fExt.uiresize != nullptr) fExt.uiresize->ui_resize(fUI.handle, static_cast(width), static_cast(height)); } // ------------------------------------------------------------------- uint32_t handleUIPortMap(const char* const symbol) const noexcept { CARLA_SAFE_ASSERT_RETURN(symbol != nullptr && symbol[0] != '\0', LV2UI_INVALID_PORT_INDEX); carla_debug("CarlaPluginLV2::handleUIPortMap(\"%s\")", symbol); for (uint32_t i=0; i < fRdfDescriptor->PortCount; ++i) { if (std::strcmp(fRdfDescriptor->Ports[i].Symbol, symbol) == 0) return i; } return LV2UI_INVALID_PORT_INDEX; } LV2UI_Request_Value_Status handleUIRequestValue(const LV2_URID key, const LV2_URID type, const LV2_Feature* const* features) { CARLA_SAFE_ASSERT_RETURN(fUI.type != UI::TYPE_NULL, LV2UI_REQUEST_VALUE_ERR_UNKNOWN); carla_debug("CarlaPluginLV2::handleUIRequestValue(%u, %u, %p)", key, type, features); if (type != kUridAtomPath) return LV2UI_REQUEST_VALUE_ERR_UNSUPPORTED; const char* const uri = getCustomURIDString(key); CARLA_SAFE_ASSERT_RETURN(uri != nullptr && uri != kUnmapFallback, LV2UI_REQUEST_VALUE_ERR_UNKNOWN); // check if a file browser is already open if (fUI.fileNeededForURI != nullptr || fUI.fileBrowserOpen) return LV2UI_REQUEST_VALUE_BUSY; for (uint32_t i=0; i < fRdfDescriptor->ParameterCount; ++i) { if (fRdfDescriptor->Parameters[i].Type != LV2_PARAMETER_TYPE_PATH) continue; if (std::strcmp(fRdfDescriptor->Parameters[i].URI, uri) != 0) continue; // TODO file browser filters, also store label to use for title fUI.fileNeededForURI = uri; return LV2UI_REQUEST_VALUE_SUCCESS; } return LV2UI_REQUEST_VALUE_ERR_UNSUPPORTED; // may be unused (void)features; } int handleUIResize(const int width, const int height) { CARLA_SAFE_ASSERT_RETURN(width > 0, 1); CARLA_SAFE_ASSERT_RETURN(height > 0, 1); carla_debug("CarlaPluginLV2::handleUIResize(%i, %i)", width, height); if (fUI.embedded) { pData->engine->callback(true, true, ENGINE_CALLBACK_EMBED_UI_RESIZED, pData->id, width, height, 0, 0.0f, nullptr); } else { CARLA_SAFE_ASSERT_RETURN(fUI.window != nullptr, 1); fUI.window->setSize(static_cast(width), static_cast(height), true); } return 0; } void handleUITouch(const uint32_t rindex, const bool touch) { carla_debug("CarlaPluginLV2::handleUITouch(%u, %s)", rindex, bool2str(touch)); uint32_t index = LV2UI_INVALID_PORT_INDEX; for (uint32_t i=0; i < pData->param.count; ++i) { if (pData->param.data[i].rindex != static_cast(rindex)) continue; index = i; break; } CARLA_SAFE_ASSERT_RETURN(index != LV2UI_INVALID_PORT_INDEX,); pData->engine->touchPluginParameter(pData->id, index, touch); } void handleUIWrite(const uint32_t rindex, const uint32_t bufferSize, const uint32_t format, const void* const buffer) { CARLA_SAFE_ASSERT_RETURN(buffer != nullptr,); CARLA_SAFE_ASSERT_RETURN(bufferSize > 0,); carla_debug("CarlaPluginLV2::handleUIWrite(%i, %i, %i, %p)", rindex, bufferSize, format, buffer); uint32_t index = LV2UI_INVALID_PORT_INDEX; switch (format) { case kUridNull: { CARLA_SAFE_ASSERT_RETURN(rindex < fRdfDescriptor->PortCount,); CARLA_SAFE_ASSERT_RETURN(bufferSize == sizeof(float),); for (uint32_t i=0; i < pData->param.count; ++i) { if (pData->param.data[i].rindex != static_cast(rindex)) continue; index = i; break; } CARLA_SAFE_ASSERT_RETURN(index != LV2UI_INVALID_PORT_INDEX,); const float value(*(const float*)buffer); // check if we should feedback message back to UI bool sendGui = false; if (const uint32_t notifCount = fUI.rdfDescriptor->PortNotificationCount) { const char* const portSymbol = fRdfDescriptor->Ports[rindex].Symbol; for (uint32_t i=0; i < notifCount; ++i) { const LV2_RDF_UI_PortNotification& portNotif(fUI.rdfDescriptor->PortNotifications[i]); if (portNotif.Protocol != LV2_UI_PORT_PROTOCOL_FLOAT) continue; if (portNotif.Symbol != nullptr) { if (std::strcmp(portNotif.Symbol, portSymbol) != 0) continue; } else if (portNotif.Index != rindex) { continue; } sendGui = true; break; } } setParameterValue(index, value, sendGui, true, true); } break; case kUridAtomTransferAtom: case kUridAtomTransferEvent: { CARLA_SAFE_ASSERT_RETURN(bufferSize >= sizeof(LV2_Atom),); const LV2_Atom* const atom((const LV2_Atom*)buffer); // plugins sometimes fail on this, not good... const uint32_t totalSize = lv2_atom_total_size(atom); const uint32_t paddedSize = lv2_atom_pad_size(totalSize); if (bufferSize != totalSize && bufferSize != paddedSize) carla_stderr2("Warning: LV2 UI sending atom with invalid size %u! size: %u, padded-size: %u", bufferSize, totalSize, paddedSize); for (uint32_t i=0; i < fEventsIn.count; ++i) { if (fEventsIn.data[i].rindex != rindex) continue; index = i; break; } // for bad plugins if (index == LV2UI_INVALID_PORT_INDEX) { CARLA_SAFE_ASSERT(index != LV2UI_INVALID_PORT_INDEX); // FIXME index = fEventsIn.ctrlIndex; } fAtomBufferEvIn.put(atom, index); } break; default: carla_stdout("CarlaPluginLV2::handleUIWrite(%i, %i, %i:\"%s\", %p) - unknown format", rindex, bufferSize, format, carla_lv2_urid_unmap(this, format), buffer); break; } } void handleUIBridgeParameter(const char* const uri, const float value) { CARLA_SAFE_ASSERT_RETURN(uri != nullptr,); carla_debug("CarlaPluginLV2::handleUIBridgeParameter(%s, %f)", uri, static_cast(value)); uint32_t parameterId; if (getParameterIndexForURI(uri, parameterId)) setParameterValue(parameterId, value, false, true, true); } // ------------------------------------------------------------------- void handleLilvSetPortValue(const char* const portSymbol, const void* const value, const uint32_t size, const uint32_t type) { CARLA_SAFE_ASSERT_RETURN(portSymbol != nullptr && portSymbol[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(value != nullptr,); CARLA_SAFE_ASSERT_RETURN(size > 0,); CARLA_SAFE_ASSERT_RETURN(type != kUridNull,); carla_debug("CarlaPluginLV2::handleLilvSetPortValue(\"%s\", %p, %i, %i)", portSymbol, value, size, type); int32_t rindex = -1; for (uint32_t i=0; i < fRdfDescriptor->PortCount; ++i) { if (std::strcmp(fRdfDescriptor->Ports[i].Symbol, portSymbol) == 0) { rindex = static_cast(i); break; } } CARLA_SAFE_ASSERT_RETURN(rindex >= 0,); float paramValue; switch (type) { case kUridAtomBool: CARLA_SAFE_ASSERT_RETURN(size == sizeof(int32_t),); paramValue = *(const int32_t*)value != 0 ? 1.0f : 0.0f; break; case kUridAtomDouble: CARLA_SAFE_ASSERT_RETURN(size == sizeof(double),); paramValue = static_cast((*(const double*)value)); break; case kUridAtomFloat: CARLA_SAFE_ASSERT_RETURN(size == sizeof(float),); paramValue = *(const float*)value; break; case kUridAtomInt: CARLA_SAFE_ASSERT_RETURN(size == sizeof(int32_t),); paramValue = static_cast(*(const int32_t*)value); break; case kUridAtomLong: CARLA_SAFE_ASSERT_RETURN(size == sizeof(int64_t),); paramValue = static_cast(*(const int64_t*)value); break; default: carla_stdout("CarlaPluginLV2::handleLilvSetPortValue(\"%s\", %p, %i, %i:\"%s\") - unknown type", portSymbol, value, size, type, carla_lv2_urid_unmap(this, type)); return; } for (uint32_t i=0; i < pData->param.count; ++i) { if (pData->param.data[i].rindex == rindex) { setParameterValueRT(i, paramValue, true); break; } } } // ------------------------------------------------------------------- void* getNativeHandle() const noexcept override { return fHandle; } const void* getNativeDescriptor() const noexcept override { return fDescriptor; } uintptr_t getUiBridgeProcessId() const noexcept override { return fPipeServer.isPipeRunning() ? fPipeServer.getPID() : 0; } // ------------------------------------------------------------------- public: bool init(const CarlaPluginPtr plugin, const char* const name, const char* const uri, const uint options, const char*& needsArchBridge) { CARLA_SAFE_ASSERT_RETURN(pData->engine != nullptr, false); // --------------------------------------------------------------- // first checks if (pData->client != nullptr) { pData->engine->setLastError("Plugin client is already registered"); return false; } if (uri == nullptr || uri[0] == '\0') { pData->engine->setLastError("null uri"); return false; } const EngineOptions& opts(pData->engine->getOptions()); // --------------------------------------------------------------- // Init LV2 World if needed, sets LV2_PATH for lilv Lv2WorldClass& lv2World(Lv2WorldClass::getInstance()); if (opts.pathLV2 != nullptr && opts.pathLV2[0] != '\0') lv2World.initIfNeeded(opts.pathLV2); else if (const char* const LV2_PATH = std::getenv("LV2_PATH")) lv2World.initIfNeeded(LV2_PATH); else lv2World.initIfNeeded(LILV_DEFAULT_LV2_PATH); // --------------------------------------------------------------- // get plugin from lv2_rdf (lilv) fRdfDescriptor = lv2_rdf_new(uri, true); if (fRdfDescriptor == nullptr) { pData->engine->setLastError("Failed to find the requested plugin"); return false; } #ifdef ADAPT_FOR_APPLE_SILLICON // --------------------------------------------------------------- // check if we can open this binary, might need a bridge { const CarlaMagic magic; if (const char* const output = magic.getFileDescription(fRdfDescriptor->Binary)) { # ifdef __aarch64__ if (std::strstr(output, "arm64") == nullptr && std::strstr(output, "x86_64") != nullptr) needsArchBridge = "x86_64"; # else if (std::strstr(output, "x86_64") == nullptr && std::strstr(output, "arm64") != nullptr) needsArchBridge = "arm64"; # endif if (needsArchBridge != nullptr) return false; } } #endif // ADAPT_FOR_APPLE_SILLICON // --------------------------------------------------------------- // open DLL #ifdef CARLA_OS_MAC // Binary might be in quarentine due to Apple stupid notarization rules, let's remove that if possible removeFileFromQuarantine(fRdfDescriptor->Binary); #endif if (! pData->libOpen(fRdfDescriptor->Binary)) { pData->engine->setLastError(pData->libError(fRdfDescriptor->Binary)); return false; } // --------------------------------------------------------------- // try to get DLL main entry via new mode if (const LV2_Lib_Descriptor_Function libDescFn = pData->libSymbol("lv2_lib_descriptor")) { // ----------------------------------------------------------- // all ok, get lib descriptor const LV2_Lib_Descriptor* const libDesc = libDescFn(fRdfDescriptor->Bundle, nullptr); if (libDesc == nullptr) { pData->engine->setLastError("Could not find the LV2 Descriptor"); return false; } // ----------------------------------------------------------- // get descriptor that matches URI (new mode) uint32_t i = 0; while ((fDescriptor = libDesc->get_plugin(libDesc->handle, i++))) { if (std::strcmp(fDescriptor->URI, uri) == 0) break; } } else { // ----------------------------------------------------------- // get DLL main entry (old mode) const LV2_Descriptor_Function descFn = pData->libSymbol("lv2_descriptor"); if (descFn == nullptr) { pData->engine->setLastError("Could not find the LV2 Descriptor in the plugin library"); return false; } // ----------------------------------------------------------- // get descriptor that matches URI (old mode) uint32_t i = 0; while ((fDescriptor = descFn(i++))) { if (std::strcmp(fDescriptor->URI, uri) == 0) break; } } if (fDescriptor == nullptr) { pData->engine->setLastError("Could not find the requested plugin URI in the plugin library"); return false; } // --------------------------------------------------------------- // check supported port-types and features bool canContinue = true; // Check supported ports for (uint32_t j=0; j < fRdfDescriptor->PortCount; ++j) { const LV2_Property portTypes(fRdfDescriptor->Ports[j].Types); if (! is_lv2_port_supported(portTypes)) { if (! LV2_IS_PORT_OPTIONAL(fRdfDescriptor->Ports[j].Properties)) { pData->engine->setLastError("Plugin requires a port type that is not currently supported"); canContinue = false; break; } } } // Check supported features for (uint32_t j=0; j < fRdfDescriptor->FeatureCount && canContinue; ++j) { const LV2_RDF_Feature& feature(fRdfDescriptor->Features[j]); if (std::strcmp(feature.URI, LV2_DATA_ACCESS_URI) == 0 || std::strcmp(feature.URI, LV2_INSTANCE_ACCESS_URI) == 0) { carla_stderr("Plugin DSP wants UI feature '%s', ignoring this", feature.URI); } else if (std::strcmp(feature.URI, LV2_BUF_SIZE__fixedBlockLength) == 0) { fNeedsFixedBuffers = true; } else if (std::strcmp(feature.URI, LV2_PORT_PROPS__supportsStrictBounds) == 0) { fStrictBounds = feature.Required ? 1 : 0; } else if (std::strcmp(feature.URI, LV2_STATE__loadDefaultState) == 0) { fHasLoadDefaultState = true; } else if (std::strcmp(feature.URI, LV2_STATE__threadSafeRestore) == 0) { fHasThreadSafeRestore = true; } else if (feature.Required && ! is_lv2_feature_supported(feature.URI)) { CarlaString msg("Plugin wants a feature that is not supported:\n"); msg += feature.URI; canContinue = false; pData->engine->setLastError(msg); break; } } if (! canContinue) { // error already set return false; } if (fNeedsFixedBuffers && ! pData->engine->usesConstantBufferSize()) { pData->engine->setLastError("Cannot use this plugin under the current engine.\n" "The plugin requires a fixed block size which is not possible right now."); return false; } // --------------------------------------------------------------- // set icon if (std::strncmp(fDescriptor->URI, "http://distrho.sf.net/", 22) == 0) pData->iconName = carla_strdup_safe("distrho"); // --------------------------------------------------------------- // set info if (name != nullptr && name[0] != '\0') pData->name = pData->engine->getUniquePluginName(name); else pData->name = pData->engine->getUniquePluginName(fRdfDescriptor->Name); // --------------------------------------------------------------- // register client pData->client = pData->engine->addClient(plugin); if (pData->client == nullptr || ! pData->client->isOk()) { pData->engine->setLastError("Failed to register plugin client"); return false; } // --------------------------------------------------------------- // initialize options const int bufferSize = static_cast(pData->engine->getBufferSize()); fLv2Options.minBufferSize = fNeedsFixedBuffers ? bufferSize : 1; fLv2Options.maxBufferSize = bufferSize; fLv2Options.nominalBufferSize = bufferSize; fLv2Options.sampleRate = static_cast(pData->engine->getSampleRate()); fLv2Options.transientWinId = static_cast(opts.frontendWinId); uint32_t eventBufferSize = MAX_DEFAULT_BUFFER_SIZE; for (uint32_t j=0; j < fRdfDescriptor->PortCount; ++j) { const LV2_Property portTypes(fRdfDescriptor->Ports[j].Types); if (LV2_IS_PORT_ATOM_SEQUENCE(portTypes) || LV2_IS_PORT_EVENT(portTypes) || LV2_IS_PORT_MIDI_LL(portTypes)) { if (fRdfDescriptor->Ports[j].MinimumSize > eventBufferSize) eventBufferSize = fRdfDescriptor->Ports[j].MinimumSize; } } fLv2Options.sequenceSize = static_cast(eventBufferSize); fLv2Options.bgColor = opts.bgColor; fLv2Options.fgColor = opts.fgColor; fLv2Options.uiScale = opts.uiScale; // --------------------------------------------------------------- // initialize features (part 1) LV2_Event_Feature* const eventFt = new LV2_Event_Feature; eventFt->callback_data = this; eventFt->lv2_event_ref = carla_lv2_event_ref; eventFt->lv2_event_unref = carla_lv2_event_unref; LV2_Log_Log* const logFt = new LV2_Log_Log; logFt->handle = this; logFt->printf = carla_lv2_log_printf; logFt->vprintf = carla_lv2_log_vprintf; LV2_State_Free_Path* const stateFreePathFt = new LV2_State_Free_Path; stateFreePathFt->handle = this; stateFreePathFt->free_path = carla_lv2_state_free_path; LV2_State_Make_Path* const stateMakePathFt = new LV2_State_Make_Path; stateMakePathFt->handle = this; stateMakePathFt->path = carla_lv2_state_make_path_tmp; LV2_State_Map_Path* const stateMapPathFt = new LV2_State_Map_Path; stateMapPathFt->handle = this; stateMapPathFt->abstract_path = carla_lv2_state_map_to_abstract_path_tmp; stateMapPathFt->absolute_path = carla_lv2_state_map_to_absolute_path_tmp; LV2_Programs_Host* const programsFt = new LV2_Programs_Host; programsFt->handle = this; programsFt->program_changed = carla_lv2_program_changed; LV2_Resize_Port_Resize* const rsPortFt = new LV2_Resize_Port_Resize; rsPortFt->data = this; rsPortFt->resize = carla_lv2_resize_port; LV2_RtMemPool_Pool* const rtMemPoolFt = new LV2_RtMemPool_Pool; lv2_rtmempool_init(rtMemPoolFt); LV2_RtMemPool_Pool_Deprecated* const rtMemPoolOldFt = new LV2_RtMemPool_Pool_Deprecated; lv2_rtmempool_init_deprecated(rtMemPoolOldFt); LV2_URI_Map_Feature* const uriMapFt = new LV2_URI_Map_Feature; uriMapFt->callback_data = this; uriMapFt->uri_to_id = carla_lv2_uri_to_id; LV2_URID_Map* const uridMapFt = new LV2_URID_Map; uridMapFt->handle = this; uridMapFt->map = carla_lv2_urid_map; LV2_URID_Unmap* const uridUnmapFt = new LV2_URID_Unmap; uridUnmapFt->handle = this; uridUnmapFt->unmap = carla_lv2_urid_unmap; LV2_Worker_Schedule* const workerFt = new LV2_Worker_Schedule; workerFt->handle = this; workerFt->schedule_work = carla_lv2_worker_schedule; LV2_Inline_Display* const inlineDisplay = new LV2_Inline_Display; inlineDisplay->handle = this; inlineDisplay->queue_draw = carla_lv2_inline_display_queue_draw; LV2_Midnam* const midnam = new LV2_Midnam; midnam->handle = this; midnam->update = carla_lv2_midnam_update; // --------------------------------------------------------------- // initialize features (part 2) for (uint32_t j=0; j < kFeatureCountPlugin; ++j) fFeatures[j] = new LV2_Feature; fFeatures[kFeatureIdBufSizeBounded]->URI = LV2_BUF_SIZE__boundedBlockLength; fFeatures[kFeatureIdBufSizeBounded]->data = nullptr; fFeatures[kFeatureIdBufSizeFixed]->URI = fNeedsFixedBuffers ? LV2_BUF_SIZE__fixedBlockLength : LV2_BUF_SIZE__boundedBlockLength; fFeatures[kFeatureIdBufSizeFixed]->data = nullptr; fFeatures[kFeatureIdBufSizePowerOf2]->URI = LV2_BUF_SIZE__powerOf2BlockLength; fFeatures[kFeatureIdBufSizePowerOf2]->data = nullptr; fFeatures[kFeatureIdEvent]->URI = LV2_EVENT_URI; fFeatures[kFeatureIdEvent]->data = eventFt; fFeatures[kFeatureIdHardRtCapable]->URI = LV2_CORE__hardRTCapable; fFeatures[kFeatureIdHardRtCapable]->data = nullptr; fFeatures[kFeatureIdInPlaceBroken]->URI = LV2_CORE__inPlaceBroken; fFeatures[kFeatureIdInPlaceBroken]->data = nullptr; fFeatures[kFeatureIdIsLive]->URI = LV2_CORE__isLive; fFeatures[kFeatureIdIsLive]->data = nullptr; fFeatures[kFeatureIdLogs]->URI = LV2_LOG__log; fFeatures[kFeatureIdLogs]->data = logFt; fFeatures[kFeatureIdOptions]->URI = LV2_OPTIONS__options; fFeatures[kFeatureIdOptions]->data = fLv2Options.opts; fFeatures[kFeatureIdPrograms]->URI = LV2_PROGRAMS__Host; fFeatures[kFeatureIdPrograms]->data = programsFt; fFeatures[kFeatureIdResizePort]->URI = LV2_RESIZE_PORT__resize; fFeatures[kFeatureIdResizePort]->data = rsPortFt; fFeatures[kFeatureIdRtMemPool]->URI = LV2_RTSAFE_MEMORY_POOL__Pool; fFeatures[kFeatureIdRtMemPool]->data = rtMemPoolFt; fFeatures[kFeatureIdRtMemPoolOld]->URI = LV2_RTSAFE_MEMORY_POOL_DEPRECATED_URI; fFeatures[kFeatureIdRtMemPoolOld]->data = rtMemPoolOldFt; fFeatures[kFeatureIdStateFreePath]->URI = LV2_STATE__freePath; fFeatures[kFeatureIdStateFreePath]->data = stateFreePathFt; fFeatures[kFeatureIdStateMakePath]->URI = LV2_STATE__makePath; fFeatures[kFeatureIdStateMakePath]->data = stateMakePathFt; fFeatures[kFeatureIdStateMapPath]->URI = LV2_STATE__mapPath; fFeatures[kFeatureIdStateMapPath]->data = stateMapPathFt; fFeatures[kFeatureIdStrictBounds]->URI = LV2_PORT_PROPS__supportsStrictBounds; fFeatures[kFeatureIdStrictBounds]->data = nullptr; fFeatures[kFeatureIdUriMap]->URI = LV2_URI_MAP_URI; fFeatures[kFeatureIdUriMap]->data = uriMapFt; fFeatures[kFeatureIdUridMap]->URI = LV2_URID__map; fFeatures[kFeatureIdUridMap]->data = uridMapFt; fFeatures[kFeatureIdUridUnmap]->URI = LV2_URID__unmap; fFeatures[kFeatureIdUridUnmap]->data = uridUnmapFt; fFeatures[kFeatureIdWorker]->URI = LV2_WORKER__schedule; fFeatures[kFeatureIdWorker]->data = workerFt; fFeatures[kFeatureIdInlineDisplay]->URI = LV2_INLINEDISPLAY__queue_draw; fFeatures[kFeatureIdInlineDisplay]->data = inlineDisplay; fFeatures[kFeatureIdMidnam]->URI = LV2_MIDNAM__update; fFeatures[kFeatureIdMidnam]->data = midnam; // --------------------------------------------------------------- // initialize features (part 3) LV2_State_Make_Path* const stateMakePathFt2 = new LV2_State_Make_Path; stateMakePathFt2->handle = this; stateMakePathFt2->path = carla_lv2_state_make_path_real; LV2_State_Map_Path* const stateMapPathFt2 = new LV2_State_Map_Path; stateMapPathFt2->handle = this; stateMapPathFt2->abstract_path = carla_lv2_state_map_to_abstract_path_real; stateMapPathFt2->absolute_path = carla_lv2_state_map_to_absolute_path_real; for (uint32_t j=0; j < kStateFeatureCountAll; ++j) fStateFeatures[j] = new LV2_Feature; fStateFeatures[kStateFeatureIdFreePath]->URI = LV2_STATE__freePath; fStateFeatures[kStateFeatureIdFreePath]->data = stateFreePathFt; fStateFeatures[kStateFeatureIdMakePath]->URI = LV2_STATE__makePath; fStateFeatures[kStateFeatureIdMakePath]->data = stateMakePathFt2; fStateFeatures[kStateFeatureIdMapPath]->URI = LV2_STATE__mapPath; fStateFeatures[kStateFeatureIdMapPath]->data = stateMapPathFt2; fStateFeatures[kStateFeatureIdWorker]->URI = LV2_WORKER__schedule; fStateFeatures[kStateFeatureIdWorker]->data = workerFt; // --------------------------------------------------------------- // initialize plugin try { fHandle = fDescriptor->instantiate(fDescriptor, pData->engine->getSampleRate(), fRdfDescriptor->Bundle, fFeatures); } catch(...) {} if (fHandle == nullptr) { pData->engine->setLastError("Plugin failed to initialize"); return false; } recheckExtensions(); // --------------------------------------------------------------- // set options pData->options = 0x0; if (fLatencyIndex >= 0 || getMidiOutCount() != 0 || fNeedsFixedBuffers) pData->options |= PLUGIN_OPTION_FIXED_BUFFERS; else if (options & PLUGIN_OPTION_FIXED_BUFFERS) pData->options |= PLUGIN_OPTION_FIXED_BUFFERS; if (opts.forceStereo) pData->options |= PLUGIN_OPTION_FORCE_STEREO; else if (options & PLUGIN_OPTION_FORCE_STEREO) pData->options |= PLUGIN_OPTION_FORCE_STEREO; if (getMidiInCount() != 0) { if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_CONTROL_CHANGES)) pData->options |= PLUGIN_OPTION_SEND_CONTROL_CHANGES; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_CHANNEL_PRESSURE)) pData->options |= PLUGIN_OPTION_SEND_CHANNEL_PRESSURE; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH)) pData->options |= PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_PITCHBEND)) pData->options |= PLUGIN_OPTION_SEND_PITCHBEND; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_ALL_SOUND_OFF)) pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_PROGRAM_CHANGES)) pData->options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; if (isPluginOptionInverseEnabled(options, PLUGIN_OPTION_SKIP_SENDING_NOTES)) pData->options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; } if (fExt.programs != nullptr && (pData->options & PLUGIN_OPTION_SEND_PROGRAM_CHANGES) == 0) { if (isPluginOptionEnabled(options, PLUGIN_OPTION_MAP_PROGRAM_CHANGES)) pData->options |= PLUGIN_OPTION_MAP_PROGRAM_CHANGES; } // --------------------------------------------------------------- // gui stuff if (fRdfDescriptor->UICount != 0) initUi(); return true; // might be unused (void)needsArchBridge; } // ------------------------------------------------------------------- void initUi() { // --------------------------------------------------------------- // find the most appropriate ui int eQt4, eQt5, eGtk2, eGtk3, eCocoa, eWindows, eX11, eMod, iCocoa, iWindows, iX11, iExt, iFinal; eQt4 = eQt5 = eGtk2 = eGtk3 = eCocoa = eWindows = eX11 = eMod = iCocoa = iWindows = iX11 = iExt = iFinal = -1; #if defined(LV2_UIS_ONLY_BRIDGES) const bool preferUiBridges = true; #elif defined(BUILD_BRIDGE) const bool preferUiBridges = false; #else const bool preferUiBridges = pData->engine->getOptions().preferUiBridges; #endif bool hasShowInterface = false; for (uint32_t i=0; i < fRdfDescriptor->UICount; ++i) { CARLA_SAFE_ASSERT_CONTINUE(fRdfDescriptor->UIs[i].URI != nullptr); const int ii(static_cast(i)); switch (fRdfDescriptor->UIs[i].Type) { case LV2_UI_QT4: if (isUiBridgeable(i)) eQt4 = ii; break; case LV2_UI_QT5: if (isUiBridgeable(i)) eQt5 = ii; break; case LV2_UI_GTK2: if (isUiBridgeable(i)) eGtk2 = ii; break; case LV2_UI_GTK3: if (isUiBridgeable(i)) eGtk3 = ii; break; #ifdef CARLA_OS_MAC case LV2_UI_COCOA: if (isUiBridgeable(i) && preferUiBridges) eCocoa = ii; iCocoa = ii; break; #endif #ifdef CARLA_OS_WIN case LV2_UI_WINDOWS: if (isUiBridgeable(i) && preferUiBridges) eWindows = ii; iWindows = ii; break; #endif case LV2_UI_X11: if (isUiBridgeable(i) && preferUiBridges) eX11 = ii; iX11 = ii; break; case LV2_UI_EXTERNAL: case LV2_UI_OLD_EXTERNAL: iExt = ii; break; case LV2_UI_MOD: eMod = ii; break; default: break; } } /**/ if (eQt4 >= 0) iFinal = eQt4; else if (eQt5 >= 0) iFinal = eQt5; else if (eGtk2 >= 0) iFinal = eGtk2; else if (eGtk3 >= 0) iFinal = eGtk3; #ifdef CARLA_OS_MAC else if (eCocoa >= 0) iFinal = eCocoa; #endif #ifdef CARLA_OS_WIN else if (eWindows >= 0) iFinal = eWindows; #endif #ifdef HAVE_X11 else if (eX11 >= 0) iFinal = eX11; #endif #ifndef LV2_UIS_ONLY_BRIDGES # ifdef CARLA_OS_MAC else if (iCocoa >= 0) iFinal = iCocoa; # endif # ifdef CARLA_OS_WIN else if (iWindows >= 0) iFinal = iWindows; # endif # ifdef HAVE_X11 else if (iX11 >= 0) iFinal = iX11; # endif #endif else if (iExt >= 0) iFinal = iExt; #ifndef BUILD_BRIDGE if (iFinal < 0) #endif { // no suitable UI found, see if there's one which supports ui:showInterface for (uint32_t i=0; i < fRdfDescriptor->UICount && ! hasShowInterface; ++i) { LV2_RDF_UI* const ui(&fRdfDescriptor->UIs[i]); for (uint32_t j=0; j < ui->ExtensionCount; ++j) { CARLA_SAFE_ASSERT_CONTINUE(ui->Extensions[j] != nullptr); if (std::strcmp(ui->Extensions[j], LV2_UI__showInterface) != 0) continue; iFinal = static_cast(i); hasShowInterface = true; break; } } if (iFinal < 0) { if (eMod < 0) { carla_stderr("Failed to find an appropriate LV2 UI for this plugin"); return; } // use MODGUI as last resort iFinal = eMod; } } fUI.rdfDescriptor = &fRdfDescriptor->UIs[iFinal]; // --------------------------------------------------------------- // check supported ui features bool canContinue = true; bool canDelete = true; for (uint32_t i=0; i < fUI.rdfDescriptor->FeatureCount; ++i) { const char* const uri(fUI.rdfDescriptor->Features[i].URI); CARLA_SAFE_ASSERT_CONTINUE(uri != nullptr && uri[0] != '\0'); if (! is_lv2_ui_feature_supported(uri)) { if (fUI.rdfDescriptor->Features[i].Required) { carla_stderr("Plugin UI requires a feature that is not supported:\n%s", uri); canContinue = false; break; } carla_stderr("Plugin UI wants a feature that is not supported (ignored):\n%s", uri); } if (std::strcmp(uri, LV2_UI__makeResident) == 0 || std::strcmp(uri, LV2_UI__makeSONameResident) == 0) canDelete = false; else if (std::strcmp(uri, LV2_UI__requestValue) == 0) pData->hints |= PLUGIN_NEEDS_UI_MAIN_THREAD; } if (! canContinue) { fUI.rdfDescriptor = nullptr; return; } // --------------------------------------------------------------- // initialize ui according to type const LV2_Property uiType(fUI.rdfDescriptor->Type); if ( (iFinal == eQt4 || iFinal == eQt5 || iFinal == eGtk2 || iFinal == eGtk3 || iFinal == eCocoa || iFinal == eWindows || iFinal == eX11 || iFinal == eMod) #ifdef BUILD_BRIDGE && ! hasShowInterface #endif ) { // ----------------------------------------------------------- // initialize ui-bridge if (const char* const bridgeBinary = getUiBridgeBinary(uiType)) { carla_stdout("Will use UI-Bridge for '%s', binary: \"%s\"", pData->name, bridgeBinary); CarlaString uiTitle; if (pData->uiTitle.isNotEmpty()) { uiTitle = pData->uiTitle; } else { uiTitle = pData->name; uiTitle += " (GUI)"; } fLv2Options.windowTitle = uiTitle.releaseBufferPointer(); fUI.type = UI::TYPE_BRIDGE; fPipeServer.setData(bridgeBinary, fRdfDescriptor->URI, fUI.rdfDescriptor->URI); delete[] bridgeBinary; return; } if (iFinal == eQt4 || iFinal == eQt5 || iFinal == eGtk2 || iFinal == eGtk3 || iFinal == eMod) { carla_stderr2("Failed to find UI bridge binary for '%s', cannot use UI", pData->name); fUI.rdfDescriptor = nullptr; return; } } #ifdef LV2_UIS_ONLY_BRIDGES carla_stderr2("Failed to get an UI working, canBridge:%s", bool2str(isUiBridgeable(static_cast(iFinal)))); fUI.rdfDescriptor = nullptr; return; #endif // --------------------------------------------------------------- // open UI DLL #ifdef CARLA_OS_MAC // Binary might be in quarentine due to Apple stupid notarization rules, let's remove that if possible removeFileFromQuarantine(fUI.rdfDescriptor->Binary); #endif if (! pData->uiLibOpen(fUI.rdfDescriptor->Binary, canDelete)) { carla_stderr2("Could not load UI library, error was:\n%s", pData->libError(fUI.rdfDescriptor->Binary)); fUI.rdfDescriptor = nullptr; return; } // --------------------------------------------------------------- // get UI DLL main entry LV2UI_DescriptorFunction uiDescFn = pData->uiLibSymbol("lv2ui_descriptor"); if (uiDescFn == nullptr) { carla_stderr2("Could not find the LV2UI Descriptor in the UI library"); pData->uiLibClose(); fUI.rdfDescriptor = nullptr; return; } // --------------------------------------------------------------- // get UI descriptor that matches UI URI uint32_t i = 0; while ((fUI.descriptor = uiDescFn(i++))) { if (std::strcmp(fUI.descriptor->URI, fUI.rdfDescriptor->URI) == 0) break; } if (fUI.descriptor == nullptr) { carla_stderr2("Could not find the requested GUI in the plugin UI library"); pData->uiLibClose(); fUI.rdfDescriptor = nullptr; return; } // --------------------------------------------------------------- // check if ui is usable switch (uiType) { case LV2_UI_NONE: carla_stdout("Will use LV2 Show Interface for '%s'", pData->name); fUI.type = UI::TYPE_EMBED; break; case LV2_UI_QT4: carla_stdout("Will use LV2 Qt4 UI for '%s', NOT!", pData->name); fUI.type = UI::TYPE_EMBED; break; case LV2_UI_QT5: carla_stdout("Will use LV2 Qt5 UI for '%s', NOT!", pData->name); fUI.type = UI::TYPE_EMBED; break; case LV2_UI_GTK2: carla_stdout("Will use LV2 Gtk2 UI for '%s', NOT!", pData->name); fUI.type = UI::TYPE_EMBED; break; case LV2_UI_GTK3: carla_stdout("Will use LV2 Gtk3 UI for '%s', NOT!", pData->name); fUI.type = UI::TYPE_EMBED; break; #ifdef CARLA_OS_MAC case LV2_UI_COCOA: carla_stdout("Will use LV2 Cocoa UI for '%s'", pData->name); fUI.type = UI::TYPE_EMBED; break; #endif #ifdef CARLA_OS_WIN case LV2_UI_WINDOWS: carla_stdout("Will use LV2 Windows UI for '%s'", pData->name); fUI.type = UI::TYPE_EMBED; break; #endif case LV2_UI_X11: #ifdef HAVE_X11 carla_stdout("Will use LV2 X11 UI for '%s'", pData->name); #else carla_stdout("Will use LV2 X11 UI for '%s', NOT!", pData->name); #endif fUI.type = UI::TYPE_EMBED; break; case LV2_UI_EXTERNAL: case LV2_UI_OLD_EXTERNAL: carla_stdout("Will use LV2 External UI for '%s'", pData->name); fUI.type = UI::TYPE_EXTERNAL; break; } if (fUI.type == UI::TYPE_NULL) { pData->uiLibClose(); fUI.descriptor = nullptr; fUI.rdfDescriptor = nullptr; return; } // --------------------------------------------------------------- // initialize ui data { CarlaString uiTitle; if (pData->uiTitle.isNotEmpty()) { uiTitle = pData->uiTitle; } else { uiTitle = pData->name; uiTitle += " (GUI)"; } fLv2Options.windowTitle = uiTitle.releaseBufferPointer(); } fLv2Options.opts[CarlaPluginLV2Options::WindowTitle].size = (uint32_t)std::strlen(fLv2Options.windowTitle); fLv2Options.opts[CarlaPluginLV2Options::WindowTitle].value = fLv2Options.windowTitle; // --------------------------------------------------------------- // initialize ui features (part 1) LV2_Extension_Data_Feature* const uiDataFt = new LV2_Extension_Data_Feature; uiDataFt->data_access = fDescriptor->extension_data; LV2UI_Port_Map* const uiPortMapFt = new LV2UI_Port_Map; uiPortMapFt->handle = this; uiPortMapFt->port_index = carla_lv2_ui_port_map; LV2UI_Request_Value* const uiRequestValueFt = new LV2UI_Request_Value; uiRequestValueFt->handle = this; uiRequestValueFt->request = carla_lv2_ui_request_value; LV2UI_Resize* const uiResizeFt = new LV2UI_Resize; uiResizeFt->handle = this; uiResizeFt->ui_resize = carla_lv2_ui_resize; LV2UI_Touch* const uiTouchFt = new LV2UI_Touch; uiTouchFt->handle = this; uiTouchFt->touch = carla_lv2_ui_touch; LV2_External_UI_Host* const uiExternalHostFt = new LV2_External_UI_Host; uiExternalHostFt->ui_closed = carla_lv2_external_ui_closed; uiExternalHostFt->plugin_human_id = fLv2Options.windowTitle; // --------------------------------------------------------------- // initialize ui features (part 2) for (uint32_t j=kFeatureCountPlugin; j < kFeatureCountAll; ++j) fFeatures[j] = new LV2_Feature; fFeatures[kFeatureIdUiDataAccess]->URI = LV2_DATA_ACCESS_URI; fFeatures[kFeatureIdUiDataAccess]->data = uiDataFt; fFeatures[kFeatureIdUiInstanceAccess]->URI = LV2_INSTANCE_ACCESS_URI; fFeatures[kFeatureIdUiInstanceAccess]->data = fHandle; fFeatures[kFeatureIdUiIdleInterface]->URI = LV2_UI__idleInterface; fFeatures[kFeatureIdUiIdleInterface]->data = nullptr; fFeatures[kFeatureIdUiFixedSize]->URI = LV2_UI__fixedSize; fFeatures[kFeatureIdUiFixedSize]->data = nullptr; fFeatures[kFeatureIdUiMakeResident]->URI = LV2_UI__makeResident; fFeatures[kFeatureIdUiMakeResident]->data = nullptr; fFeatures[kFeatureIdUiMakeResident2]->URI = LV2_UI__makeSONameResident; fFeatures[kFeatureIdUiMakeResident2]->data = nullptr; fFeatures[kFeatureIdUiNoUserResize]->URI = LV2_UI__noUserResize; fFeatures[kFeatureIdUiNoUserResize]->data = nullptr; fFeatures[kFeatureIdUiParent]->URI = LV2_UI__parent; fFeatures[kFeatureIdUiParent]->data = nullptr; fFeatures[kFeatureIdUiPortMap]->URI = LV2_UI__portMap; fFeatures[kFeatureIdUiPortMap]->data = uiPortMapFt; fFeatures[kFeatureIdUiPortSubscribe]->URI = LV2_UI__portSubscribe; fFeatures[kFeatureIdUiPortSubscribe]->data = nullptr; fFeatures[kFeatureIdUiRequestValue]->URI = LV2_UI__requestValue; fFeatures[kFeatureIdUiRequestValue]->data = uiRequestValueFt; fFeatures[kFeatureIdUiResize]->URI = LV2_UI__resize; fFeatures[kFeatureIdUiResize]->data = uiResizeFt; fFeatures[kFeatureIdUiTouch]->URI = LV2_UI__touch; fFeatures[kFeatureIdUiTouch]->data = uiTouchFt; fFeatures[kFeatureIdExternalUi]->URI = LV2_EXTERNAL_UI__Host; fFeatures[kFeatureIdExternalUi]->data = uiExternalHostFt; fFeatures[kFeatureIdExternalUiOld]->URI = LV2_EXTERNAL_UI_DEPRECATED_URI; fFeatures[kFeatureIdExternalUiOld]->data = uiExternalHostFt; // --------------------------------------------------------------- // initialize ui extensions if (fUI.descriptor->extension_data == nullptr) return; fExt.uiidle = (const LV2UI_Idle_Interface*)fUI.descriptor->extension_data(LV2_UI__idleInterface); fExt.uishow = (const LV2UI_Show_Interface*)fUI.descriptor->extension_data(LV2_UI__showInterface); fExt.uiresize = (const LV2UI_Resize*)fUI.descriptor->extension_data(LV2_UI__resize); fExt.uiprograms = (const LV2_Programs_UI_Interface*)fUI.descriptor->extension_data(LV2_PROGRAMS__UIInterface); // check if invalid if (fExt.uiidle != nullptr && fExt.uiidle->idle == nullptr) fExt.uiidle = nullptr; if (fExt.uishow != nullptr && (fExt.uishow->show == nullptr || fExt.uishow->hide == nullptr)) fExt.uishow = nullptr; if (fExt.uiresize != nullptr && fExt.uiresize->ui_resize == nullptr) fExt.uiresize = nullptr; if (fExt.uiprograms != nullptr && fExt.uiprograms->select_program == nullptr) fExt.uiprograms = nullptr; // don't use uiidle if external if (fUI.type == UI::TYPE_EXTERNAL) fExt.uiidle = nullptr; } // ------------------------------------------------------------------- void handleTransferAtom(const uint32_t portIndex, const LV2_Atom* const atom) { CARLA_SAFE_ASSERT_RETURN(atom != nullptr,); carla_debug("CarlaPluginLV2::handleTransferAtom(%i, %p)", portIndex, atom); fAtomBufferEvIn.put(atom, portIndex); } void handleUridMap(const LV2_URID urid, const char* const uri) { CARLA_SAFE_ASSERT_RETURN(urid != kUridNull,); CARLA_SAFE_ASSERT_RETURN(uri != nullptr && uri[0] != '\0',); carla_debug("CarlaPluginLV2::handleUridMap(%i v " P_SIZE ", \"%s\")", urid, fCustomURIDs.size()-1, uri); const std::size_t uriCount(fCustomURIDs.size()); if (urid < uriCount) { const char* const ourURI(carla_lv2_urid_unmap(this, urid)); CARLA_SAFE_ASSERT_RETURN(ourURI != nullptr && ourURI != kUnmapFallback,); if (std::strcmp(ourURI, uri) != 0) { carla_stderr2("PLUGIN :: wrong URI '%s' vs '%s'", ourURI, uri); } } else { CARLA_SAFE_ASSERT_RETURN(urid == uriCount,); fCustomURIDs.push_back(uri); } } // ------------------------------------------------------------------- void writeAtomPath(const char* const path, const LV2_URID urid) { uint8_t atomBuf[4096]; LV2_Atom_Forge atomForge; initAtomForge(atomForge); lv2_atom_forge_set_buffer(&atomForge, atomBuf, sizeof(atomBuf)); LV2_Atom_Forge_Frame forgeFrame; lv2_atom_forge_object(&atomForge, &forgeFrame, kUridNull, kUridPatchSet); lv2_atom_forge_key(&atomForge, kUridCarlaParameterChange); lv2_atom_forge_bool(&atomForge, true); lv2_atom_forge_key(&atomForge, kUridPatchProperty); lv2_atom_forge_urid(&atomForge, urid); lv2_atom_forge_key(&atomForge, kUridPatchValue); lv2_atom_forge_path(&atomForge, path, static_cast(std::strlen(path))+1); lv2_atom_forge_pop(&atomForge, &forgeFrame); LV2_Atom* const atom((LV2_Atom*)atomBuf); CARLA_SAFE_ASSERT(atom->size < sizeof(atomBuf)); fAtomBufferEvIn.put(atom, fEventsIn.ctrlIndex); } // ------------------------------------------------------------------- private: LV2_Handle fHandle; LV2_Handle fHandle2; LV2_Feature* fFeatures[kFeatureCountAll+1]; LV2_Feature* fStateFeatures[kStateFeatureCountAll+1]; const LV2_Descriptor* fDescriptor; const LV2_RDF_Descriptor* fRdfDescriptor; float** fAudioInBuffers; float** fAudioOutBuffers; float** fCvInBuffers; float** fCvOutBuffers; float* fParamBuffers; bool fHasLoadDefaultState : 1; bool fHasThreadSafeRestore : 1; bool fNeedsFixedBuffers : 1; bool fNeedsUiClose : 1; bool fInlineDisplayNeedsRedraw : 1; int64_t fInlineDisplayLastRedrawTime; int32_t fLatencyIndex; // -1 if invalid int fStrictBounds; // -1 unsupported, 0 optional, 1 required Lv2AtomRingBuffer fAtomBufferEvIn; Lv2AtomRingBuffer fAtomBufferUiOut; Lv2AtomRingBuffer fAtomBufferWorkerIn; Lv2AtomRingBuffer fAtomBufferWorkerResp; uint8_t* fAtomBufferUiOutTmpData; uint8_t* fAtomBufferWorkerInTmpData; CarlaPluginLV2EventData fEventsIn; CarlaPluginLV2EventData fEventsOut; CarlaPluginLV2Options fLv2Options; CarlaPipeServerLV2 fPipeServer; std::vector fCustomURIDs; bool fFirstActive; // first process() call after activate() void* fLastStateChunk; EngineTimeInfo fLastTimeInfo; // if plugin provides path parameter, use it as fake "gui" CarlaString fFilePathURI; struct Extensions { const LV2_Options_Interface* options; const LV2_State_Interface* state; const LV2_Worker_Interface* worker; const LV2_Inline_Display_Interface* inlineDisplay; const LV2_Midnam_Interface* midnam; const LV2_Programs_Interface* programs; const LV2UI_Idle_Interface* uiidle; const LV2UI_Show_Interface* uishow; const LV2UI_Resize* uiresize; const LV2_Programs_UI_Interface* uiprograms; Extensions() : options(nullptr), state(nullptr), worker(nullptr), inlineDisplay(nullptr), midnam(nullptr), programs(nullptr), uiidle(nullptr), uishow(nullptr), uiresize(nullptr), uiprograms(nullptr) {} CARLA_DECLARE_NON_COPY_STRUCT(Extensions); } fExt; struct UI { enum Type { TYPE_NULL = 0, TYPE_BRIDGE, TYPE_EMBED, TYPE_EXTERNAL }; Type type; LV2UI_Handle handle; LV2UI_Widget widget; const LV2UI_Descriptor* descriptor; const LV2_RDF_UI* rdfDescriptor; bool embedded; bool fileBrowserOpen; const char* fileNeededForURI; CarlaPluginUI* window; UI() : type(TYPE_NULL), handle(nullptr), widget(nullptr), descriptor(nullptr), rdfDescriptor(nullptr), embedded(false), fileBrowserOpen(false), fileNeededForURI(nullptr), window(nullptr) {} ~UI() { CARLA_SAFE_ASSERT(handle == nullptr); CARLA_SAFE_ASSERT(widget == nullptr); CARLA_SAFE_ASSERT(descriptor == nullptr); CARLA_SAFE_ASSERT(rdfDescriptor == nullptr); CARLA_SAFE_ASSERT(! fileBrowserOpen); CARLA_SAFE_ASSERT(fileNeededForURI == nullptr); CARLA_SAFE_ASSERT(window == nullptr); } CARLA_DECLARE_NON_COPY_STRUCT(UI); } fUI; // ------------------------------------------------------------------- // Event Feature static uint32_t carla_lv2_event_ref(LV2_Event_Callback_Data callback_data, LV2_Event* event) { CARLA_SAFE_ASSERT_RETURN(callback_data != nullptr, 0); CARLA_SAFE_ASSERT_RETURN(event != nullptr, 0); carla_debug("carla_lv2_event_ref(%p, %p)", callback_data, event); return 0; } static uint32_t carla_lv2_event_unref(LV2_Event_Callback_Data callback_data, LV2_Event* event) { CARLA_SAFE_ASSERT_RETURN(callback_data != nullptr, 0); CARLA_SAFE_ASSERT_RETURN(event != nullptr, 0); carla_debug("carla_lv2_event_unref(%p, %p)", callback_data, event); return 0; } // ------------------------------------------------------------------- // Logs Feature static int carla_lv2_log_printf(LV2_Log_Handle handle, LV2_URID type, const char* fmt, ...) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr, 0); CARLA_SAFE_ASSERT_RETURN(type != kUridNull, 0); CARLA_SAFE_ASSERT_RETURN(fmt != nullptr, 0); #ifndef DEBUG if (type == kUridLogTrace) return 0; #endif va_list args; va_start(args, fmt); const int ret(carla_lv2_log_vprintf(handle, type, fmt, args)); va_end(args); return ret; } static int carla_lv2_log_vprintf(LV2_Log_Handle handle, LV2_URID type, const char* fmt, va_list ap) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr, 0); CARLA_SAFE_ASSERT_RETURN(type != kUridNull, 0); CARLA_SAFE_ASSERT_RETURN(fmt != nullptr, 0); int ret = 0; switch (type) { case kUridLogError: std::fprintf(stderr, "\x1b[31m"); ret = std::vfprintf(stderr, fmt, ap); std::fprintf(stderr, "\x1b[0m"); break; case kUridLogNote: ret = std::vfprintf(stdout, fmt, ap); break; case kUridLogTrace: #ifdef DEBUG std::fprintf(stdout, "\x1b[30;1m"); ret = std::vfprintf(stdout, fmt, ap); std::fprintf(stdout, "\x1b[0m"); #endif break; case kUridLogWarning: ret = std::vfprintf(stderr, fmt, ap); break; default: break; } return ret; } // ------------------------------------------------------------------- // Programs Feature static void carla_lv2_program_changed(LV2_Programs_Handle handle, int32_t index) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr,); carla_debug("carla_lv2_program_changed(%p, %i)", handle, index); ((CarlaPluginLV2*)handle)->handleProgramChanged(index); } // ------------------------------------------------------------------- // Resize Port Feature static LV2_Resize_Port_Status carla_lv2_resize_port(LV2_Resize_Port_Feature_Data data, uint32_t index, size_t size) { CARLA_SAFE_ASSERT_RETURN(data != nullptr, LV2_RESIZE_PORT_ERR_UNKNOWN); carla_debug("carla_lv2_program_changed(%p, %i, " P_SIZE ")", data, index, size); return ((CarlaPluginLV2*)data)->handleResizePort(index, size); } // ------------------------------------------------------------------- // State Feature static void carla_lv2_state_free_path(LV2_State_Free_Path_Handle handle, char* const path) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr,); carla_debug("carla_lv2_state_free_path(%p, \"%s\")", handle, path); std::free(path); } static char* carla_lv2_state_make_path_real(LV2_State_Make_Path_Handle handle, const char* const path) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr, nullptr); CARLA_SAFE_ASSERT_RETURN(path != nullptr && path[0] != '\0', nullptr); carla_debug("carla_lv2_state_make_path_real(%p, \"%s\")", handle, path); const File file(((CarlaPluginLV2*)handle)->handleStateMapToAbsolutePath(true, false, false, path)); return file.isNotNull() ? strdup(file.getFullPathName().toRawUTF8()) : nullptr; } static char* carla_lv2_state_make_path_tmp(LV2_State_Make_Path_Handle handle, const char* const path) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr, nullptr); CARLA_SAFE_ASSERT_RETURN(path != nullptr && path[0] != '\0', nullptr); carla_debug("carla_lv2_state_make_path_tmp(%p, \"%s\")", handle, path); const File file(((CarlaPluginLV2*)handle)->handleStateMapToAbsolutePath(true, false, true, path)); return file.isNotNull() ? strdup(file.getFullPathName().toRawUTF8()) : nullptr; } static char* carla_lv2_state_map_to_abstract_path_real(LV2_State_Map_Path_Handle handle, const char* const absolute_path) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr, nullptr); CARLA_SAFE_ASSERT_RETURN(absolute_path != nullptr && absolute_path[0] != '\0', nullptr); carla_debug("carla_lv2_state_map_to_abstract_path_real(%p, \"%s\")", handle, absolute_path); return ((CarlaPluginLV2*)handle)->handleStateMapToAbstractPath(false, absolute_path); } static char* carla_lv2_state_map_to_abstract_path_tmp(LV2_State_Map_Path_Handle handle, const char* const absolute_path) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr, nullptr); CARLA_SAFE_ASSERT_RETURN(absolute_path != nullptr && absolute_path[0] != '\0', nullptr); carla_debug("carla_lv2_state_map_to_abstract_path_tmp(%p, \"%s\")", handle, absolute_path); return ((CarlaPluginLV2*)handle)->handleStateMapToAbstractPath(true, absolute_path); } static char* carla_lv2_state_map_to_absolute_path_real(LV2_State_Map_Path_Handle handle, const char* const abstract_path) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr, nullptr); CARLA_SAFE_ASSERT_RETURN(abstract_path != nullptr && abstract_path[0] != '\0', nullptr); carla_debug("carla_lv2_state_map_to_absolute_path_real(%p, \"%s\")", handle, abstract_path); const File file(((CarlaPluginLV2*)handle)->handleStateMapToAbsolutePath(true, true, false, abstract_path)); return file.isNotNull() ? strdup(file.getFullPathName().toRawUTF8()) : nullptr; } static char* carla_lv2_state_map_to_absolute_path_tmp(LV2_State_Map_Path_Handle handle, const char* const abstract_path) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr, nullptr); CARLA_SAFE_ASSERT_RETURN(abstract_path != nullptr && abstract_path[0] != '\0', nullptr); carla_debug("carla_lv2_state_map_to_absolute_path_tmp(%p, \"%s\")", handle, abstract_path); const File file(((CarlaPluginLV2*)handle)->handleStateMapToAbsolutePath(true, true, true, abstract_path)); return file.isNotNull() ? strdup(file.getFullPathName().toRawUTF8()) : nullptr; } static LV2_State_Status carla_lv2_state_store(LV2_State_Handle handle, uint32_t key, const void* value, size_t size, uint32_t type, uint32_t flags) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr, LV2_STATE_ERR_UNKNOWN); carla_debug("carla_lv2_state_store(%p, %i, %p, " P_SIZE ", %i, %i)", handle, key, value, size, type, flags); return ((CarlaPluginLV2*)handle)->handleStateStore(key, value, size, type, flags); } static const void* carla_lv2_state_retrieve(LV2_State_Handle handle, uint32_t key, size_t* size, uint32_t* type, uint32_t* flags) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr, nullptr); carla_debug("carla_lv2_state_retrieve(%p, %i, %p, %p, %p)", handle, key, size, type, flags); return ((CarlaPluginLV2*)handle)->handleStateRetrieve(key, size, type, flags); } // ------------------------------------------------------------------- // URI-Map Feature static uint32_t carla_lv2_uri_to_id(LV2_URI_Map_Callback_Data data, const char* map, const char* uri) { carla_debug("carla_lv2_uri_to_id(%p, \"%s\", \"%s\")", data, map, uri); return carla_lv2_urid_map((LV2_URID_Map_Handle*)data, uri); // unused (void)map; } // ------------------------------------------------------------------- // URID Feature static LV2_URID carla_lv2_urid_map(LV2_URID_Map_Handle handle, const char* uri) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr, kUridNull); CARLA_SAFE_ASSERT_RETURN(uri != nullptr && uri[0] != '\0', kUridNull); carla_debug("carla_lv2_urid_map(%p, \"%s\")", handle, uri); // Atom types if (std::strcmp(uri, LV2_ATOM__Blank) == 0) return kUridAtomBlank; if (std::strcmp(uri, LV2_ATOM__Bool) == 0) return kUridAtomBool; if (std::strcmp(uri, LV2_ATOM__Chunk) == 0) return kUridAtomChunk; if (std::strcmp(uri, LV2_ATOM__Double) == 0) return kUridAtomDouble; if (std::strcmp(uri, LV2_ATOM__Event) == 0) return kUridAtomEvent; if (std::strcmp(uri, LV2_ATOM__Float) == 0) return kUridAtomFloat; if (std::strcmp(uri, LV2_ATOM__Int) == 0) return kUridAtomInt; if (std::strcmp(uri, LV2_ATOM__Literal) == 0) return kUridAtomLiteral; if (std::strcmp(uri, LV2_ATOM__Long) == 0) return kUridAtomLong; if (std::strcmp(uri, LV2_ATOM__Number) == 0) return kUridAtomNumber; if (std::strcmp(uri, LV2_ATOM__Object) == 0) return kUridAtomObject; if (std::strcmp(uri, LV2_ATOM__Path) == 0) return kUridAtomPath; if (std::strcmp(uri, LV2_ATOM__Property) == 0) return kUridAtomProperty; if (std::strcmp(uri, LV2_ATOM__Resource) == 0) return kUridAtomResource; if (std::strcmp(uri, LV2_ATOM__Sequence) == 0) return kUridAtomSequence; if (std::strcmp(uri, LV2_ATOM__Sound) == 0) return kUridAtomSound; if (std::strcmp(uri, LV2_ATOM__String) == 0) return kUridAtomString; if (std::strcmp(uri, LV2_ATOM__Tuple) == 0) return kUridAtomTuple; if (std::strcmp(uri, LV2_ATOM__URI) == 0) return kUridAtomURI; if (std::strcmp(uri, LV2_ATOM__URID) == 0) return kUridAtomURID; if (std::strcmp(uri, LV2_ATOM__Vector) == 0) return kUridAtomVector; if (std::strcmp(uri, LV2_ATOM__atomTransfer) == 0) return kUridAtomTransferAtom; if (std::strcmp(uri, LV2_ATOM__eventTransfer) == 0) return kUridAtomTransferEvent; // BufSize types if (std::strcmp(uri, LV2_BUF_SIZE__maxBlockLength) == 0) return kUridBufMaxLength; if (std::strcmp(uri, LV2_BUF_SIZE__minBlockLength) == 0) return kUridBufMinLength; if (std::strcmp(uri, LV2_BUF_SIZE__nominalBlockLength) == 0) return kUridBufNominalLength; if (std::strcmp(uri, LV2_BUF_SIZE__sequenceSize) == 0) return kUridBufSequenceSize; // Log types if (std::strcmp(uri, LV2_LOG__Error) == 0) return kUridLogError; if (std::strcmp(uri, LV2_LOG__Note) == 0) return kUridLogNote; if (std::strcmp(uri, LV2_LOG__Trace) == 0) return kUridLogTrace; if (std::strcmp(uri, LV2_LOG__Warning) == 0) return kUridLogWarning; // Patch types if (std::strcmp(uri, LV2_PATCH__Set) == 0) return kUridPatchSet; if (std::strcmp(uri, LV2_PATCH__property) == 0) return kUridPatchProperty; if (std::strcmp(uri, LV2_PATCH__subject) == 0) return kUridPatchSubject; if (std::strcmp(uri, LV2_PATCH__value) == 0) return kUridPatchValue; // Time types if (std::strcmp(uri, LV2_TIME__Position) == 0) return kUridTimePosition; if (std::strcmp(uri, LV2_TIME__bar) == 0) return kUridTimeBar; if (std::strcmp(uri, LV2_TIME__barBeat) == 0) return kUridTimeBarBeat; if (std::strcmp(uri, LV2_TIME__beat) == 0) return kUridTimeBeat; if (std::strcmp(uri, LV2_TIME__beatUnit) == 0) return kUridTimeBeatUnit; if (std::strcmp(uri, LV2_TIME__beatsPerBar) == 0) return kUridTimeBeatsPerBar; if (std::strcmp(uri, LV2_TIME__beatsPerMinute) == 0) return kUridTimeBeatsPerMinute; if (std::strcmp(uri, LV2_TIME__frame) == 0) return kUridTimeFrame; if (std::strcmp(uri, LV2_TIME__framesPerSecond) == 0) return kUridTimeFramesPerSecond; if (std::strcmp(uri, LV2_TIME__speed) == 0) return kUridTimeSpeed; if (std::strcmp(uri, LV2_KXSTUDIO_PROPERTIES__TimePositionTicksPerBeat) == 0) return kUridTimeTicksPerBeat; // Others if (std::strcmp(uri, LV2_MIDI__MidiEvent) == 0) return kUridMidiEvent; if (std::strcmp(uri, LV2_PARAMETERS__sampleRate) == 0) return kUridParamSampleRate; if (std::strcmp(uri, LV2_UI__backgroundColor) == 0) return kUridBackgroundColor; if (std::strcmp(uri, LV2_UI__foregroundColor) == 0) return kUridForegroundColor; if (std::strcmp(uri, LV2_UI__scaleFactor) == 0) return kUridScaleFactor; if (std::strcmp(uri, LV2_UI__windowTitle) == 0) return kUridWindowTitle; // Custom Carla types if (std::strcmp(uri, URI_CARLA_ATOM_WORKER_IN) == 0) return kUridCarlaAtomWorkerIn; if (std::strcmp(uri, URI_CARLA_ATOM_WORKER_RESP) == 0) return kUridCarlaAtomWorkerResp; if (std::strcmp(uri, URI_CARLA_PARAMETER_CHANGE) == 0) return kUridCarlaParameterChange; if (std::strcmp(uri, LV2_KXSTUDIO_PROPERTIES__TransientWindowId) == 0) return kUridCarlaTransientWindowId; // Custom plugin types return ((CarlaPluginLV2*)handle)->getCustomURID(uri); } static const char* carla_lv2_urid_unmap(LV2_URID_Map_Handle handle, LV2_URID urid) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr, nullptr); CARLA_SAFE_ASSERT_RETURN(urid != kUridNull, nullptr); carla_debug("carla_lv2_urid_unmap(%p, %i)", handle, urid); switch (urid) { // Atom types case kUridAtomBlank: return LV2_ATOM__Blank; case kUridAtomBool: return LV2_ATOM__Bool; case kUridAtomChunk: return LV2_ATOM__Chunk; case kUridAtomDouble: return LV2_ATOM__Double; case kUridAtomEvent: return LV2_ATOM__Event; case kUridAtomFloat: return LV2_ATOM__Float; case kUridAtomInt: return LV2_ATOM__Int; case kUridAtomLiteral: return LV2_ATOM__Literal; case kUridAtomLong: return LV2_ATOM__Long; case kUridAtomNumber: return LV2_ATOM__Number; case kUridAtomObject: return LV2_ATOM__Object; case kUridAtomPath: return LV2_ATOM__Path; case kUridAtomProperty: return LV2_ATOM__Property; case kUridAtomResource: return LV2_ATOM__Resource; case kUridAtomSequence: return LV2_ATOM__Sequence; case kUridAtomSound: return LV2_ATOM__Sound; case kUridAtomString: return LV2_ATOM__String; case kUridAtomTuple: return LV2_ATOM__Tuple; case kUridAtomURI: return LV2_ATOM__URI; case kUridAtomURID: return LV2_ATOM__URID; case kUridAtomVector: return LV2_ATOM__Vector; case kUridAtomTransferAtom: return LV2_ATOM__atomTransfer; case kUridAtomTransferEvent: return LV2_ATOM__eventTransfer; // BufSize types case kUridBufMaxLength: return LV2_BUF_SIZE__maxBlockLength; case kUridBufMinLength: return LV2_BUF_SIZE__minBlockLength; case kUridBufNominalLength: return LV2_BUF_SIZE__nominalBlockLength; case kUridBufSequenceSize: return LV2_BUF_SIZE__sequenceSize; // Log types case kUridLogError: return LV2_LOG__Error; case kUridLogNote: return LV2_LOG__Note; case kUridLogTrace: return LV2_LOG__Trace; case kUridLogWarning: return LV2_LOG__Warning; // Patch types case kUridPatchSet: return LV2_PATCH__Set; case kUridPatchProperty: return LV2_PATCH__property; case kUridPatchSubject: return LV2_PATCH__subject; case kUridPatchValue: return LV2_PATCH__value; // Time types case kUridTimePosition: return LV2_TIME__Position; case kUridTimeBar: return LV2_TIME__bar; case kUridTimeBarBeat: return LV2_TIME__barBeat; case kUridTimeBeat: return LV2_TIME__beat; case kUridTimeBeatUnit: return LV2_TIME__beatUnit; case kUridTimeBeatsPerBar: return LV2_TIME__beatsPerBar; case kUridTimeBeatsPerMinute: return LV2_TIME__beatsPerMinute; case kUridTimeFrame: return LV2_TIME__frame; case kUridTimeFramesPerSecond: return LV2_TIME__framesPerSecond; case kUridTimeSpeed: return LV2_TIME__speed; case kUridTimeTicksPerBeat: return LV2_KXSTUDIO_PROPERTIES__TimePositionTicksPerBeat; // Others case kUridMidiEvent: return LV2_MIDI__MidiEvent; case kUridParamSampleRate: return LV2_PARAMETERS__sampleRate; case kUridBackgroundColor: return LV2_UI__backgroundColor; case kUridForegroundColor: return LV2_UI__foregroundColor; case kUridScaleFactor: return LV2_UI__scaleFactor; case kUridWindowTitle: return LV2_UI__windowTitle; // Custom Carla types case kUridCarlaAtomWorkerIn: return URI_CARLA_ATOM_WORKER_IN; case kUridCarlaAtomWorkerResp: return URI_CARLA_ATOM_WORKER_RESP; case kUridCarlaParameterChange: return URI_CARLA_PARAMETER_CHANGE; case kUridCarlaTransientWindowId: return LV2_KXSTUDIO_PROPERTIES__TransientWindowId; } // Custom plugin types return ((CarlaPluginLV2*)handle)->getCustomURIDString(urid); } // ------------------------------------------------------------------- // Worker Feature static LV2_Worker_Status carla_lv2_worker_schedule(LV2_Worker_Schedule_Handle handle, uint32_t size, const void* data) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr, LV2_WORKER_ERR_UNKNOWN); carla_debug("carla_lv2_worker_schedule(%p, %i, %p)", handle, size, data); return ((CarlaPluginLV2*)handle)->handleWorkerSchedule(size, data); } static LV2_Worker_Status carla_lv2_worker_respond(LV2_Worker_Respond_Handle handle, uint32_t size, const void* data) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr, LV2_WORKER_ERR_UNKNOWN); carla_debug("carla_lv2_worker_respond(%p, %i, %p)", handle, size, data); return ((CarlaPluginLV2*)handle)->handleWorkerRespond(size, data); } // ------------------------------------------------------------------- // Inline Display Feature static void carla_lv2_inline_display_queue_draw(LV2_Inline_Display_Handle handle) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr,); // carla_debug("carla_lv2_inline_display_queue_draw(%p)", handle); ((CarlaPluginLV2*)handle)->handleInlineDisplayQueueRedraw(); } // ------------------------------------------------------------------- // Midnam Feature static void carla_lv2_midnam_update(LV2_Midnam_Handle handle) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr,); carla_stdout("carla_lv2_midnam_update(%p)", handle); ((CarlaPluginLV2*)handle)->handleMidnamUpdate(); } // ------------------------------------------------------------------- // External UI Feature static void carla_lv2_external_ui_closed(LV2UI_Controller controller) { CARLA_SAFE_ASSERT_RETURN(controller != nullptr,); carla_debug("carla_lv2_external_ui_closed(%p)", controller); ((CarlaPluginLV2*)controller)->handleExternalUIClosed(); } // ------------------------------------------------------------------- // UI Port-Map Feature static uint32_t carla_lv2_ui_port_map(LV2UI_Feature_Handle handle, const char* symbol) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr, LV2UI_INVALID_PORT_INDEX); carla_debug("carla_lv2_ui_port_map(%p, \"%s\")", handle, symbol); return ((CarlaPluginLV2*)handle)->handleUIPortMap(symbol); } // ---------------------------------------------------------------------------------------------------------------- // UI Request Parameter Feature static LV2UI_Request_Value_Status carla_lv2_ui_request_value(LV2UI_Feature_Handle handle, LV2_URID key, LV2_URID type, const LV2_Feature* const* features) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr, LV2UI_REQUEST_VALUE_ERR_UNKNOWN); carla_debug("carla_lv2_ui_request_value(%p, %u, %u, %p)", handle, key, type, features); return ((CarlaPluginLV2*)handle)->handleUIRequestValue(key, type, features); } // ------------------------------------------------------------------- // UI Resize Feature static int carla_lv2_ui_resize(LV2UI_Feature_Handle handle, int width, int height) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr, 1); carla_debug("carla_lv2_ui_resize(%p, %i, %i)", handle, width, height); return ((CarlaPluginLV2*)handle)->handleUIResize(width, height); } // ------------------------------------------------------------------- // UI Touch Feature static void carla_lv2_ui_touch(LV2UI_Feature_Handle handle, uint32_t port_index, bool touch) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr,); carla_debug("carla_lv2_ui_touch(%p, %u, %s)", handle, port_index, bool2str(touch)); ((CarlaPluginLV2*)handle)->handleUITouch(port_index, touch); } // ------------------------------------------------------------------- // UI Extension static void carla_lv2_ui_write_function(LV2UI_Controller controller, uint32_t port_index, uint32_t buffer_size, uint32_t format, const void* buffer) { CARLA_SAFE_ASSERT_RETURN(controller != nullptr,); carla_debug("carla_lv2_ui_write_function(%p, %i, %i, %i, %p)", controller, port_index, buffer_size, format, buffer); ((CarlaPluginLV2*)controller)->handleUIWrite(port_index, buffer_size, format, buffer); } // ------------------------------------------------------------------- // Lilv State static void carla_lilv_set_port_value(const char* port_symbol, void* user_data, const void* value, uint32_t size, uint32_t type) { CARLA_SAFE_ASSERT_RETURN(user_data != nullptr,); carla_debug("carla_lilv_set_port_value(\"%s\", %p, %p, %i, %i", port_symbol, user_data, value, size, type); ((CarlaPluginLV2*)user_data)->handleLilvSetPortValue(port_symbol, value, size, type); } // ------------------------------------------------------------------- CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaPluginLV2) }; // ------------------------------------------------------------------------------------------------------------------- bool CarlaPipeServerLV2::msgReceived(const char* const msg) noexcept { if (std::strcmp(msg, "exiting") == 0) { closePipeServer(); fUiState = UiHide; return true; } if (std::strcmp(msg, "control") == 0) { uint32_t index; float value; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(index), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsFloat(value), true); try { kPlugin->handleUIWrite(index, sizeof(float), kUridNull, &value); } CARLA_SAFE_EXCEPTION("magReceived control"); return true; } if (std::strcmp(msg, "pcontrol") == 0) { const char* uri; float value; CARLA_SAFE_ASSERT_RETURN(readNextLineAsString(uri, true), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsFloat(value), true); try { kPlugin->handleUIBridgeParameter(uri, value); } CARLA_SAFE_EXCEPTION("magReceived pcontrol"); return true; } if (std::strcmp(msg, "atom") == 0) { uint32_t index, atomTotalSize, base64Size; const char* base64atom; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(index), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(atomTotalSize), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(base64Size), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsString(base64atom, false, base64Size), true); std::vector chunk(carla_getChunkFromBase64String(base64atom)); CARLA_SAFE_ASSERT_UINT2_RETURN(chunk.size() >= sizeof(LV2_Atom), chunk.size(), sizeof(LV2_Atom), true); #ifdef CARLA_PROPER_CPP11_SUPPORT const LV2_Atom* const atom((const LV2_Atom*)chunk.data()); #else const LV2_Atom* const atom((const LV2_Atom*)&chunk.front()); #endif CARLA_SAFE_ASSERT_RETURN(lv2_atom_total_size(atom) == chunk.size(), true); try { kPlugin->handleUIWrite(index, lv2_atom_total_size(atom), kUridAtomTransferEvent, atom); } CARLA_SAFE_EXCEPTION("magReceived atom"); return true; } if (std::strcmp(msg, "program") == 0) { uint32_t index; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(index), true); try { kPlugin->setMidiProgram(static_cast(index), false, true, true, false); } CARLA_SAFE_EXCEPTION("msgReceived program"); return true; } if (std::strcmp(msg, "urid") == 0) { uint32_t urid, size; const char* uri; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(urid), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(size), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsString(uri, false, size), true); if (urid != 0) { try { kPlugin->handleUridMap(urid, uri); } CARLA_SAFE_EXCEPTION("msgReceived urid"); } return true; } if (std::strcmp(msg, "reloadprograms") == 0) { int32_t index; CARLA_SAFE_ASSERT_RETURN(readNextLineAsInt(index), true); try { kPlugin->handleProgramChanged(index); } CARLA_SAFE_EXCEPTION("handleProgramChanged"); return true; } if (std::strcmp(msg, "requestvalue") == 0) { uint32_t key, type; CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(key), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(type), true); if (key != 0) { try { kPlugin->handleUIRequestValue(key, type, nullptr); } CARLA_SAFE_EXCEPTION("msgReceived requestvalue"); } return true; } return false; } // ------------------------------------------------------------------------------------------------------------------- CarlaPluginPtr CarlaPlugin::newLV2(const Initializer& init) { carla_debug("CarlaPlugin::newLV2({%p, \"%s\", \"%s\"})", init.engine, init.name, init.label); std::shared_ptr plugin(new CarlaPluginLV2(init.engine, init.id)); const char* needsArchBridge = nullptr; if (plugin->init(plugin, init.name, init.label, init.options, needsArchBridge)) return plugin; if (needsArchBridge != nullptr) { CarlaString bridgeBinary(init.engine->getOptions().binaryDir); bridgeBinary += CARLA_OS_SEP_STR "carla-bridge-native"; return CarlaPlugin::newBridge(init, BINARY_NATIVE, PLUGIN_LV2, needsArchBridge, bridgeBinary); } return nullptr; } // used in CarlaStandalone.cpp const void* carla_render_inline_display_lv2(const CarlaPluginPtr& plugin, uint32_t width, uint32_t height); const void* carla_render_inline_display_lv2(const CarlaPluginPtr& plugin, uint32_t width, uint32_t height) { const std::shared_ptr& lv2Plugin((const std::shared_ptr&)plugin); return lv2Plugin->renderInlineDisplay(width, height); } // ------------------------------------------------------------------------------------------------------------------- CARLA_BACKEND_END_NAMESPACE Carla-2.4.2/source/backend/plugin/CarlaPluginNative.cpp000066400000000000000000003440271420416754300230220ustar00rootroot00000000000000/* * Carla Native Plugin * Copyright (C) 2012-2020 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "CarlaPluginInternal.hpp" #include "CarlaEngine.hpp" #include "CarlaBackendUtils.hpp" #include "CarlaMathUtils.hpp" #include "CarlaNative.h" #include "water/misc/Time.h" #include "water/text/StringArray.h" using water::jmax; using water::String; using water::StringArray; // ----------------------------------------------------------------------- // used in carla-base.cpp std::size_t carla_getNativePluginCount() noexcept; const NativePluginDescriptor* carla_getNativePluginDescriptor(const std::size_t index) noexcept; // ----------------------------------------------------------------------- static LinkedList gPluginDescriptors; void carla_register_native_plugin(const NativePluginDescriptor* desc) { gPluginDescriptors.append(desc); } // ----------------------------------------------------------------------- static class NativePluginInitializer { public: NativePluginInitializer() noexcept : fNeedsInit(true) {} ~NativePluginInitializer() noexcept { gPluginDescriptors.clear(); } void initIfNeeded() noexcept { if (! fNeedsInit) return; fNeedsInit = false; try { carla_register_all_native_plugins(); } CARLA_SAFE_EXCEPTION("carla_register_all_native_plugins") } private: bool fNeedsInit; } sPluginInitializer; // ----------------------------------------------------------------------- std::size_t carla_getNativePluginCount() noexcept { sPluginInitializer.initIfNeeded(); return gPluginDescriptors.count(); } const NativePluginDescriptor* carla_getNativePluginDescriptor(const std::size_t index) noexcept { sPluginInitializer.initIfNeeded(); return gPluginDescriptors.getAt(index, nullptr); } // ----------------------------------------------------------------------- CARLA_BACKEND_START_NAMESPACE // ------------------------------------------------------------------- // Fallback data static const CustomData kCustomDataFallback = { nullptr, nullptr, nullptr }; static EngineEvent kNullEngineEvent = { kEngineEventTypeNull, 0, 0, {{ kEngineControlEventTypeNull, 0, -1, 0.0f, true }} }; // ----------------------------------------------------------------------- struct NativePluginMidiOutData { uint32_t count; uint32_t* indexes; CarlaEngineEventPort** ports; NativePluginMidiOutData() noexcept : count(0), indexes(nullptr), ports(nullptr) {} ~NativePluginMidiOutData() noexcept { CARLA_SAFE_ASSERT_INT(count == 0, count); CARLA_SAFE_ASSERT(indexes == nullptr); CARLA_SAFE_ASSERT(ports == nullptr); } bool createNew(const uint32_t newCount) { CARLA_SAFE_ASSERT_INT(count == 0, count); CARLA_SAFE_ASSERT_RETURN(indexes == nullptr, false); CARLA_SAFE_ASSERT_RETURN(ports == nullptr, false); CARLA_SAFE_ASSERT_RETURN(newCount > 0, false); indexes = new uint32_t[newCount]; ports = new CarlaEngineEventPort*[newCount]; count = newCount; carla_zeroStructs(indexes, newCount); carla_zeroStructs(ports, newCount); return true; } void clear() noexcept { if (ports != nullptr) { for (uint32_t i=0; i < count; ++i) { if (ports[i] != nullptr) { delete ports[i]; ports[i] = nullptr; } } delete[] ports; ports = nullptr; } if (indexes != nullptr) { delete[] indexes; indexes = nullptr; } count = 0; } void initBuffers() const noexcept { for (uint32_t i=0; i < count; ++i) { if (ports[i] != nullptr) ports[i]->initBuffer(); } } CARLA_DECLARE_NON_COPY_STRUCT(NativePluginMidiOutData) }; struct NativePluginMidiInData : NativePluginMidiOutData { struct MultiPortData { uint32_t cachedEventCount; uint32_t usedIndex; }; MultiPortData* multiportData; NativePluginMidiInData() noexcept : NativePluginMidiOutData(), multiportData(nullptr) {} ~NativePluginMidiInData() noexcept { CARLA_SAFE_ASSERT(multiportData == nullptr); } bool createNew(const uint32_t newCount) { if (! NativePluginMidiOutData::createNew(newCount)) return false; multiportData = new MultiPortData[newCount]; carla_zeroStructs(multiportData, newCount); return true; } void clear() noexcept { if (multiportData != nullptr) { delete[] multiportData; multiportData = nullptr; } NativePluginMidiOutData::clear(); } void initBuffers(CarlaEngineEventPort* const port) const noexcept { if (count == 1) { CARLA_SAFE_ASSERT_RETURN(port != nullptr,); carla_zeroStruct(multiportData[0]); multiportData[0].cachedEventCount = port->getEventCount(); return; } for (uint32_t i=0; i < count; ++i) { carla_zeroStruct(multiportData[i]); if (ports[i] != nullptr) { ports[i]->initBuffer(); multiportData[i].cachedEventCount = ports[i]->getEventCount(); } } } CARLA_DECLARE_NON_COPY_STRUCT(NativePluginMidiInData) }; // ----------------------------------------------------- class CarlaPluginNative : public CarlaPlugin { public: CarlaPluginNative(CarlaEngine* const engine, const uint id) : CarlaPlugin(engine, id), fHandle(nullptr), fHandle2(nullptr), fHost(), fDescriptor(nullptr), fIsProcessing(false), fIsOffline(engine->isOffline()), fIsUiAvailable(false), fIsUiVisible(false), fNeedsIdle(false), fInlineDisplayNeedsRedraw(false), fInlineDisplayLastRedrawTime(0), fLastProjectFilename(), fLastProjectFolder(), fAudioAndCvInBuffers(nullptr), fAudioAndCvOutBuffers(nullptr), fMidiEventInCount(0), fMidiEventOutCount(0), fCurBufferSize(engine->getBufferSize()), fCurSampleRate(engine->getSampleRate()), fMidiIn(), fMidiOut(), fTimeInfo() { carla_debug("CarlaPluginNative::CarlaPluginNative(%p, %i)", engine, id); carla_fill(fCurMidiProgs, 0, MAX_MIDI_CHANNELS); carla_zeroStructs(fMidiInEvents, kPluginMaxMidiEvents); carla_zeroStructs(fMidiOutEvents, kPluginMaxMidiEvents); carla_zeroStruct(fTimeInfo); fHost.handle = this; fHost.resourceDir = carla_strdup(engine->getOptions().resourceDir); fHost.uiName = nullptr; fHost.uiParentId = engine->getOptions().frontendWinId; fHost.get_buffer_size = carla_host_get_buffer_size; fHost.get_sample_rate = carla_host_get_sample_rate; fHost.is_offline = carla_host_is_offline; fHost.get_time_info = carla_host_get_time_info; fHost.write_midi_event = carla_host_write_midi_event; fHost.ui_parameter_changed = carla_host_ui_parameter_changed; fHost.ui_custom_data_changed = carla_host_ui_custom_data_changed; fHost.ui_closed = carla_host_ui_closed; fHost.ui_open_file = carla_host_ui_open_file; fHost.ui_save_file = carla_host_ui_save_file; fHost.dispatcher = carla_host_dispatcher; } ~CarlaPluginNative() override { carla_debug("CarlaPluginNative::~CarlaPluginNative()"); fInlineDisplayNeedsRedraw = false; // close UI if (pData->hints & PLUGIN_HAS_CUSTOM_UI) { if (fIsUiVisible && fDescriptor != nullptr && fDescriptor->ui_show != nullptr && fHandle != nullptr) fDescriptor->ui_show(fHandle, false); #ifndef BUILD_BRIDGE pData->transientTryCounter = 0; #endif } pData->singleMutex.lock(); pData->masterMutex.lock(); if (pData->client != nullptr && pData->client->isActive()) pData->client->deactivate(true); CARLA_ASSERT(! fIsProcessing); if (pData->active) { deactivate(); pData->active = false; } if (fDescriptor != nullptr) { if (fDescriptor->cleanup != nullptr) { if (fHandle != nullptr) fDescriptor->cleanup(fHandle); if (fHandle2 != nullptr) fDescriptor->cleanup(fHandle2); } fHandle = nullptr; fHandle2 = nullptr; fDescriptor = nullptr; } if (fHost.resourceDir != nullptr) { delete[] fHost.resourceDir; fHost.resourceDir = nullptr; } if (fHost.uiName != nullptr) { std::free(const_cast(fHost.uiName)); fHost.uiName = nullptr; } clearBuffers(); } // ------------------------------------------------------------------- // Information (base) PluginType getType() const noexcept override { return PLUGIN_INTERNAL; } PluginCategory getCategory() const noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, PLUGIN_CATEGORY_NONE); return static_cast(fDescriptor->category); } // ------------------------------------------------------------------- // Information (count) uint32_t getMidiInCount() const noexcept override { return fMidiIn.count; } uint32_t getMidiOutCount() const noexcept override { return fMidiOut.count; } uint32_t getParameterScalePointCount(const uint32_t parameterId) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, 0); CARLA_SAFE_ASSERT_RETURN(fDescriptor->get_parameter_info != nullptr, 0); CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr, 0); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, 0); // FIXME - try if (const NativeParameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)) return param->scalePointCount; carla_safe_assert("const Parameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)", __FILE__, __LINE__); return 0; } // ------------------------------------------------------------------- // Information (current data) // nothing // ------------------------------------------------------------------- // Information (per-plugin data) uint getOptionsAvailable() const noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, 0x0); CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr, 0x0); bool hasMidiProgs = false; if (fDescriptor->get_midi_program_count != nullptr) { try { hasMidiProgs = fDescriptor->get_midi_program_count(fHandle) > 0; } catch (...) {} } uint options = 0x0; // can't disable fixed buffers if required by the plugin if ((fDescriptor->hints & NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS) == 0x0) options |= PLUGIN_OPTION_FIXED_BUFFERS; // can't disable forced stereo if enabled in the engine, or using CV if (pData->engine->getOptions().forceStereo || pData->cvIn.count != 0 || pData->cvOut.count != 0) pass(); // if inputs or outputs are just 1, then yes we can force stereo else if (pData->audioIn.count == 1 || pData->audioOut.count == 1 || fHandle2 != nullptr) options |= PLUGIN_OPTION_FORCE_STEREO; if (fDescriptor->supports & NATIVE_PLUGIN_SUPPORTS_CONTROL_CHANGES) options |= PLUGIN_OPTION_SEND_CONTROL_CHANGES; if (fDescriptor->supports & NATIVE_PLUGIN_SUPPORTS_CHANNEL_PRESSURE) options |= PLUGIN_OPTION_SEND_CHANNEL_PRESSURE; if (fDescriptor->supports & NATIVE_PLUGIN_SUPPORTS_NOTE_AFTERTOUCH) options |= PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH; if (fDescriptor->supports & NATIVE_PLUGIN_SUPPORTS_PITCHBEND) options |= PLUGIN_OPTION_SEND_PITCHBEND; if (fDescriptor->supports & NATIVE_PLUGIN_SUPPORTS_ALL_SOUND_OFF) options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; if (fDescriptor->midiIns > 0) options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; if (fDescriptor->supports & NATIVE_PLUGIN_SUPPORTS_PROGRAM_CHANGES) options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; else if (hasMidiProgs) options |= PLUGIN_OPTION_MAP_PROGRAM_CHANGES; return options; } float getParameterValue(const uint32_t parameterId) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, 0.0f); CARLA_SAFE_ASSERT_RETURN(fDescriptor->get_parameter_value != nullptr, 0.0f); CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr, 0.0f); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, 0.0f); // FIXME - try return fDescriptor->get_parameter_value(fHandle, parameterId); } float getParameterScalePointValue(const uint32_t parameterId, const uint32_t scalePointId) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, 0.0f); CARLA_SAFE_ASSERT_RETURN(fDescriptor->get_parameter_info != nullptr, 0.0f); CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr, 0.0f); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, 0.0f); // FIXME - try if (const NativeParameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)) { CARLA_SAFE_ASSERT_RETURN(scalePointId < param->scalePointCount, 0.0f); const NativeParameterScalePoint* scalePoint(¶m->scalePoints[scalePointId]); return scalePoint->value; } carla_safe_assert("const Parameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)", __FILE__, __LINE__); return 0.0f; } bool getLabel(char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, false); if (fDescriptor->label != nullptr) { std::strncpy(strBuf, fDescriptor->label, STR_MAX); return true; } return CarlaPlugin::getLabel(strBuf); } bool getMaker(char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, false); if (fDescriptor->maker != nullptr) { std::strncpy(strBuf, fDescriptor->maker, STR_MAX); return true; } return CarlaPlugin::getMaker(strBuf); } bool getCopyright(char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, false); if (fDescriptor->copyright != nullptr) { std::strncpy(strBuf, fDescriptor->copyright, STR_MAX); return true; } return CarlaPlugin::getCopyright(strBuf); } bool getRealName(char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, false); if (fDescriptor->name != nullptr) { std::strncpy(strBuf, fDescriptor->name, STR_MAX); return true; } return CarlaPlugin::getRealName(strBuf); } bool getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, false); CARLA_SAFE_ASSERT_RETURN(fDescriptor->get_parameter_info != nullptr, false); CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr, false); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false); // FIXME - try if (const NativeParameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)) { if (param->name != nullptr) { std::strncpy(strBuf, param->name, STR_MAX); return true; } carla_safe_assert("param->name != nullptr", __FILE__, __LINE__); return CarlaPlugin::getParameterName(parameterId, strBuf); } carla_safe_assert("const Parameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)", __FILE__, __LINE__); return CarlaPlugin::getParameterName(parameterId, strBuf); } bool getParameterUnit(const uint32_t parameterId, char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, false); CARLA_SAFE_ASSERT_RETURN(fDescriptor->get_parameter_info != nullptr, false); CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr, false); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false); // FIXME - try if (const NativeParameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)) { if (param->unit != nullptr) { std::strncpy(strBuf, param->unit, STR_MAX); return true; } return CarlaPlugin::getParameterUnit(parameterId, strBuf); } carla_safe_assert("const Parameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)", __FILE__, __LINE__); return CarlaPlugin::getParameterUnit(parameterId, strBuf); } bool getParameterComment(const uint32_t parameterId, char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, false); CARLA_SAFE_ASSERT_RETURN(fDescriptor->get_parameter_info != nullptr, false); CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr, false); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false); // FIXME - try if (const NativeParameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)) { if (param->comment != nullptr) { std::strncpy(strBuf, param->comment, STR_MAX); return true; } return CarlaPlugin::getParameterComment(parameterId, strBuf); } carla_safe_assert("const Parameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)", __FILE__, __LINE__); return CarlaPlugin::getParameterComment(parameterId, strBuf); } bool getParameterGroupName(const uint32_t parameterId, char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, false); CARLA_SAFE_ASSERT_RETURN(fDescriptor->get_parameter_info != nullptr, false); CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr, false); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false); // FIXME - try if (const NativeParameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)) { if (param->groupName != nullptr) { std::strncpy(strBuf, param->groupName, STR_MAX); return true; } return CarlaPlugin::getParameterGroupName(parameterId, strBuf); } carla_safe_assert("const Parameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)", __FILE__, __LINE__); return CarlaPlugin::getParameterGroupName(parameterId, strBuf); } bool getParameterScalePointLabel(const uint32_t parameterId, const uint32_t scalePointId, char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, false); CARLA_SAFE_ASSERT_RETURN(fDescriptor->get_parameter_info != nullptr, false); CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr, false); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false); // FIXME - try if (const NativeParameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)) { CARLA_SAFE_ASSERT_RETURN(scalePointId < param->scalePointCount, false); const NativeParameterScalePoint* scalePoint(¶m->scalePoints[scalePointId]); if (scalePoint->label != nullptr) { std::strncpy(strBuf, scalePoint->label, STR_MAX); return true; } carla_safe_assert("scalePoint->label != nullptr", __FILE__, __LINE__); return CarlaPlugin::getParameterScalePointLabel(parameterId, scalePointId, strBuf); } carla_safe_assert("const Parameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)", __FILE__, __LINE__); return CarlaPlugin::getParameterScalePointLabel(parameterId, scalePointId, strBuf); } // ------------------------------------------------------------------- // Set data (state) void prepareForSave(bool) override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); if (pData->midiprog.count > 0 && fDescriptor->category == NATIVE_PLUGIN_CATEGORY_SYNTH) { char strBuf[STR_MAX+1]; std::snprintf(strBuf, STR_MAX, "%i:%i:%i:%i:%i:%i:%i:%i:%i:%i:%i:%i:%i:%i:%i:%i", fCurMidiProgs[0], fCurMidiProgs[1], fCurMidiProgs[2], fCurMidiProgs[3], fCurMidiProgs[4], fCurMidiProgs[5], fCurMidiProgs[6], fCurMidiProgs[7], fCurMidiProgs[8], fCurMidiProgs[9], fCurMidiProgs[10], fCurMidiProgs[11], fCurMidiProgs[12], fCurMidiProgs[13], fCurMidiProgs[14], fCurMidiProgs[15]); strBuf[STR_MAX] = '\0'; CarlaPlugin::setCustomData(CUSTOM_DATA_TYPE_STRING, "midiPrograms", strBuf, false); } if (fDescriptor == nullptr || fDescriptor->get_state == nullptr || (fDescriptor->hints & NATIVE_PLUGIN_USES_STATE) == 0) return; if (char* data = fDescriptor->get_state(fHandle)) { CarlaPlugin::setCustomData(CUSTOM_DATA_TYPE_CHUNK, "State", data, false); std::free(data); } } // ------------------------------------------------------------------- // Set data (internal stuff) void setName(const char* const newName) override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); CARLA_SAFE_ASSERT_RETURN(newName != nullptr && newName[0] != '\0',); CarlaPlugin::setName(newName); if (pData->uiTitle.isEmpty()) setWindowTitle(nullptr); } void setCtrlChannel(const int8_t channel, const bool sendOsc, const bool sendCallback) noexcept override { if (channel >= 0 && channel < MAX_MIDI_CHANNELS && pData->midiprog.count > 0) pData->midiprog.current = fCurMidiProgs[channel]; CarlaPlugin::setCtrlChannel(channel, sendOsc, sendCallback); } void setWindowTitle(const char* const title) noexcept { CarlaString uiName; if (title != nullptr) { uiName = title; } else { uiName = pData->name; uiName += " (GUI)"; } std::free(const_cast(fHost.uiName)); fHost.uiName = uiName.releaseBufferPointer(); if (fDescriptor->dispatcher != nullptr && fIsUiVisible) { try { fDescriptor->dispatcher(fHandle, NATIVE_PLUGIN_OPCODE_UI_NAME_CHANGED, 0, 0, const_cast(fHost.uiName), 0.0f); } CARLA_SAFE_EXCEPTION("set custom ui title"); } } // ------------------------------------------------------------------- // Set data (plugin-specific stuff) void setParameterValue(const uint32_t parameterId, const float value, const bool sendGui, const bool sendOsc, const bool sendCallback) noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); CARLA_SAFE_ASSERT_RETURN(fDescriptor->set_parameter_value != nullptr,); CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,); const float fixedValue(pData->param.getFixedValue(parameterId, value)); // FIXME - try fDescriptor->set_parameter_value(fHandle, parameterId, fixedValue); if (fHandle2 != nullptr) fDescriptor->set_parameter_value(fHandle2, parameterId, fixedValue); CarlaPlugin::setParameterValue(parameterId, fixedValue, sendGui, sendOsc, sendCallback); } void setParameterValueRT(const uint32_t parameterId, const float value, const bool sendCallbackLater) noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); CARLA_SAFE_ASSERT_RETURN(fDescriptor->set_parameter_value != nullptr,); CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,); const float fixedValue(pData->param.getFixedValue(parameterId, value)); // FIXME - try fDescriptor->set_parameter_value(fHandle, parameterId, fixedValue); if (fHandle2 != nullptr) fDescriptor->set_parameter_value(fHandle2, parameterId, fixedValue); CarlaPlugin::setParameterValueRT(parameterId, fixedValue, sendCallbackLater); } void setCustomData(const char* const type, const char* const key, const char* const value, const bool sendGui) override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); CARLA_SAFE_ASSERT_RETURN(type != nullptr && type[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(key != nullptr && key[0] != '\0',); CARLA_SAFE_ASSERT_RETURN(value != nullptr,); carla_debug("CarlaPluginNative::setCustomData(%s, %s, ..., %s)", type, key, bool2str(sendGui)); if (std::strcmp(type, CUSTOM_DATA_TYPE_PROPERTY) == 0) return CarlaPlugin::setCustomData(type, key, value, sendGui); if (std::strcmp(type, CUSTOM_DATA_TYPE_PATH) == 0) { CARLA_SAFE_ASSERT_RETURN(std::strcmp(key, "file") == 0,); CARLA_SAFE_ASSERT_RETURN(value[0] != '\0',); } else if (std::strcmp(type, CUSTOM_DATA_TYPE_STRING) != 0 && std::strcmp(type, CUSTOM_DATA_TYPE_CHUNK) != 0) { return carla_stderr2("CarlaPluginNative::setCustomData(\"%s\", \"%s\", \"%s\", %s) - type is invalid xa", type, key, value, bool2str(sendGui)); } if (std::strcmp(type, CUSTOM_DATA_TYPE_CHUNK) == 0) { if (fDescriptor->set_state != nullptr && (fDescriptor->hints & NATIVE_PLUGIN_USES_STATE) != 0) { const ScopedSingleProcessLocker spl(this, true); fDescriptor->set_state(fHandle, value); if (fHandle2 != nullptr) fDescriptor->set_state(fHandle2, value); } } else if (std::strcmp(key, "midiPrograms") == 0 && fDescriptor->set_midi_program != nullptr) { StringArray midiProgramList(StringArray::fromTokens(value, ":", "")); if (midiProgramList.size() == MAX_MIDI_CHANNELS) { uint8_t channel = 0; for (String *it=midiProgramList.begin(), *end=midiProgramList.end(); it != end; ++it) { const int index(it->getIntValue()); if (index >= 0 && index < static_cast(pData->midiprog.count)) { const uint32_t bank = pData->midiprog.data[index].bank; const uint32_t program = pData->midiprog.data[index].program; fDescriptor->set_midi_program(fHandle, channel, bank, program); if (fHandle2 != nullptr) fDescriptor->set_midi_program(fHandle2, channel, bank, program); fCurMidiProgs[channel] = index; if (pData->ctrlChannel == static_cast(channel)) { pData->midiprog.current = index; pData->engine->callback(true, true, ENGINE_CALLBACK_MIDI_PROGRAM_CHANGED, pData->id, index, 0, 0, 0.0f, nullptr); } } ++channel; } CARLA_SAFE_ASSERT(channel == MAX_MIDI_CHANNELS); } } else { if (fDescriptor->set_custom_data != nullptr) { fDescriptor->set_custom_data(fHandle, key, value); if (fHandle2 != nullptr) fDescriptor->set_custom_data(fHandle2, key, value); } if (sendGui && fIsUiVisible && fDescriptor->ui_set_custom_data != nullptr) fDescriptor->ui_set_custom_data(fHandle, key, value); } CarlaPlugin::setCustomData(type, key, value, sendGui); } void setMidiProgram(const int32_t index, const bool sendGui, const bool sendOsc, const bool sendCallback, const bool doingInit) noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); CARLA_SAFE_ASSERT_RETURN(index >= -1 && index < static_cast(pData->midiprog.count),); CARLA_SAFE_ASSERT_RETURN(sendGui || sendOsc || sendCallback || doingInit,); // TODO, put into check below if ((pData->hints & PLUGIN_IS_SYNTH) != 0 && (pData->ctrlChannel < 0 || pData->ctrlChannel >= MAX_MIDI_CHANNELS)) return CarlaPlugin::setMidiProgram(index, sendGui, sendOsc, sendCallback, doingInit); if (index >= 0) { const uint8_t channel = uint8_t((pData->ctrlChannel >= 0 && pData->ctrlChannel < MAX_MIDI_CHANNELS) ? pData->ctrlChannel : 0); const uint32_t bank = pData->midiprog.data[index].bank; const uint32_t program = pData->midiprog.data[index].program; const ScopedSingleProcessLocker spl(this, (sendGui || sendOsc || sendCallback)); try { fDescriptor->set_midi_program(fHandle, channel, bank, program); } catch(...) {} if (fHandle2 != nullptr) { try { fDescriptor->set_midi_program(fHandle2, channel, bank, program); } catch(...) {} } fCurMidiProgs[channel] = index; } CarlaPlugin::setMidiProgram(index, sendGui, sendOsc, sendCallback, doingInit); } // FIXME: this is never used void setMidiProgramRT(const uint32_t index, const bool sendCallbackLater) noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); CARLA_SAFE_ASSERT_RETURN(index < pData->midiprog.count,); // TODO, put into check below if ((pData->hints & PLUGIN_IS_SYNTH) != 0 && (pData->ctrlChannel < 0 || pData->ctrlChannel >= MAX_MIDI_CHANNELS)) return CarlaPlugin::setMidiProgramRT(index, sendCallbackLater); const uint8_t channel = uint8_t((pData->ctrlChannel >= 0 && pData->ctrlChannel < MAX_MIDI_CHANNELS) ? pData->ctrlChannel : 0); const uint32_t bank = pData->midiprog.data[index].bank; const uint32_t program = pData->midiprog.data[index].program; try { fDescriptor->set_midi_program(fHandle, channel, bank, program); } catch(...) {} if (fHandle2 != nullptr) { try { fDescriptor->set_midi_program(fHandle2, channel, bank, program); } catch(...) {} } fCurMidiProgs[channel] = static_cast(index); CarlaPlugin::setMidiProgramRT(index, sendCallbackLater); } // ------------------------------------------------------------------- // Set ui stuff void setCustomUITitle(const char* const title) noexcept override { setWindowTitle(title); CarlaPlugin::setCustomUITitle(title); } void showCustomUI(const bool yesNo) override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); if (fDescriptor->ui_show == nullptr) return; fIsUiAvailable = true; fDescriptor->ui_show(fHandle, yesNo); // UI might not be available, see NATIVE_HOST_OPCODE_UI_UNAVAILABLE if (yesNo && ! fIsUiAvailable) return; fIsUiVisible = yesNo; if (! yesNo) { #ifndef BUILD_BRIDGE pData->transientTryCounter = 0; #endif return; } #ifndef BUILD_BRIDGE if ((fDescriptor->hints & NATIVE_PLUGIN_USES_PARENT_ID) == 0 && std::strstr(fDescriptor->label, "file") == nullptr) pData->tryTransient(); #endif if (fDescriptor->ui_set_custom_data != nullptr) { for (LinkedList::Itenerator it = pData->custom.begin2(); it.valid(); it.next()) { const CustomData& cData(it.getValue(kCustomDataFallback)); CARLA_SAFE_ASSERT_CONTINUE(cData.isValid()); if (std::strcmp(cData.type, CUSTOM_DATA_TYPE_STRING) == 0 && std::strcmp(cData.key, "midiPrograms") != 0) fDescriptor->ui_set_custom_data(fHandle, cData.key, cData.value); } } if (fDescriptor->ui_set_midi_program != nullptr && pData->midiprog.current >= 0 && pData->midiprog.count > 0) { const int32_t index = pData->midiprog.current; const uint8_t channel = uint8_t((pData->ctrlChannel >= 0 && pData->ctrlChannel < MAX_MIDI_CHANNELS) ? pData->ctrlChannel : 0); const uint32_t bank = pData->midiprog.data[index].bank; const uint32_t program = pData->midiprog.data[index].program; fDescriptor->ui_set_midi_program(fHandle, channel, bank, program); } if (fDescriptor->ui_set_parameter_value != nullptr) { for (uint32_t i=0; i < pData->param.count; ++i) fDescriptor->ui_set_parameter_value(fHandle, i, fDescriptor->get_parameter_value(fHandle, i)); } } void idle() override { if (fNeedsIdle) { fNeedsIdle = false; fDescriptor->dispatcher(fHandle, NATIVE_PLUGIN_OPCODE_IDLE, 0, 0, nullptr, 0.0f); } if (fInlineDisplayNeedsRedraw) { // TESTING CARLA_SAFE_ASSERT(pData->enabled) CARLA_SAFE_ASSERT(!pData->engine->isAboutToClose()); CARLA_SAFE_ASSERT(pData->client->isActive()); if (pData->enabled && !pData->engine->isAboutToClose() && pData->client->isActive()) { const int64_t timeNow = water::Time::currentTimeMillis(); if (timeNow - fInlineDisplayLastRedrawTime > (1000 / 30)) { fInlineDisplayNeedsRedraw = false; fInlineDisplayLastRedrawTime = timeNow; pData->engine->callback(true, true, ENGINE_CALLBACK_INLINE_DISPLAY_REDRAW, pData->id, 0, 0, 0, 0.0f, nullptr); } } else { fInlineDisplayNeedsRedraw = false; } } CarlaPlugin::idle(); } void uiIdle() override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); if (fIsUiVisible && fDescriptor->ui_idle != nullptr) fDescriptor->ui_idle(fHandle); CarlaPlugin::uiIdle(); } // ------------------------------------------------------------------- // Plugin state void reload() override { CARLA_SAFE_ASSERT_RETURN(pData->engine != nullptr,); CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); carla_debug("CarlaPluginNative::reload() - start"); const EngineProcessMode processMode(pData->engine->getProccessMode()); // Safely disable plugin for reload const ScopedDisabler sd(this); if (pData->active) deactivate(); clearBuffers(); uint32_t aIns, aOuts, cvIns, cvOuts, mIns, mOuts, j; bool forcedStereoIn, forcedStereoOut; forcedStereoIn = forcedStereoOut = false; bool needsCtrlIn, needsCtrlOut; needsCtrlIn = needsCtrlOut = false; aIns = fDescriptor->audioIns; aOuts = fDescriptor->audioOuts; cvIns = fDescriptor->cvIns; cvOuts = fDescriptor->cvOuts; mIns = fDescriptor->midiIns; mOuts = fDescriptor->midiOuts; if ((pData->options & PLUGIN_OPTION_FORCE_STEREO) != 0 && (aIns == 1 || aOuts == 1) && mIns <= 1 && mOuts <= 1) { if (fHandle2 == nullptr) fHandle2 = fDescriptor->instantiate(&fHost); if (fHandle2 != nullptr) { if (aIns == 1) { aIns = 2; forcedStereoIn = true; } if (aOuts == 1) { aOuts = 2; forcedStereoOut = true; } } } if (aIns > 0) { pData->audioIn.createNew(aIns); } if (aOuts > 0) { pData->audioOut.createNew(aOuts); needsCtrlIn = true; } if (cvIns > 0) { pData->cvIn.createNew(cvIns); } if (cvOuts > 0) { pData->cvOut.createNew(cvOuts); } if (const uint32_t acIns = aIns + cvIns) { fAudioAndCvInBuffers = new float*[acIns]; carla_zeroPointers(fAudioAndCvInBuffers, acIns); } if (const uint32_t acOuts = aOuts + cvOuts) { fAudioAndCvOutBuffers = new float*[acOuts]; carla_zeroPointers(fAudioAndCvOutBuffers, acOuts); } if (mIns > 0) { fMidiIn.createNew(mIns); needsCtrlIn = (mIns == 1); } if (mOuts > 0) { fMidiOut.createNew(mOuts); needsCtrlOut = (mOuts == 1); } const uint portNameSize(pData->engine->getMaxPortNameSize()); CarlaString portName; // Audio Ins for (j=0; j < aIns; ++j) { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } if (fDescriptor->get_buffer_port_name != nullptr) { portName += fDescriptor->get_buffer_port_name(fHandle, forcedStereoIn ? 0 : j, false); } else if (aIns > 1 && ! forcedStereoIn) { portName += "input_"; portName += CarlaString(j+1); } else portName += "input"; portName.truncate(portNameSize); pData->audioIn.ports[j].port = (CarlaEngineAudioPort*)pData->client->addPort(kEnginePortTypeAudio, portName, true, j); pData->audioIn.ports[j].rindex = j; if (forcedStereoIn) { portName += "_2"; pData->audioIn.ports[1].port = (CarlaEngineAudioPort*)pData->client->addPort(kEnginePortTypeAudio, portName, true, 1); pData->audioIn.ports[1].rindex = j; break; } } // Audio Outs for (j=0; j < aOuts; ++j) { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } if (fDescriptor->get_buffer_port_name != nullptr) { portName += fDescriptor->get_buffer_port_name(fHandle, forcedStereoOut ? 0 : j, true); } else if (aOuts > 1 && ! forcedStereoOut) { portName += "output_"; portName += CarlaString(j+1); } else portName += "output"; portName.truncate(portNameSize); pData->audioOut.ports[j].port = (CarlaEngineAudioPort*)pData->client->addPort(kEnginePortTypeAudio, portName, false, j); pData->audioOut.ports[j].rindex = j; if (forcedStereoOut) { portName += "_2"; pData->audioOut.ports[1].port = (CarlaEngineAudioPort*)pData->client->addPort(kEnginePortTypeAudio, portName, false, 1); pData->audioOut.ports[1].rindex = j; break; } } // CV Ins for (j=0; j < cvIns; ++j) { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } if (fDescriptor->get_buffer_port_name != nullptr) { portName += fDescriptor->get_buffer_port_name(fHandle, fDescriptor->audioIns + j, false); } else if (cvIns > 1) { portName += "cv_input_"; portName += CarlaString(j+1); } else portName += "cv_input"; portName.truncate(portNameSize); float min = -1.0f, max = 1.0f; if (fDescriptor->get_buffer_port_range != nullptr) { if (const NativePortRange* const range = fDescriptor->get_buffer_port_range(fHandle, fDescriptor->audioIns + j, false)) { min = range->minimum; max = range->maximum; } } pData->cvIn.ports[j].port = (CarlaEngineCVPort*)pData->client->addPort(kEnginePortTypeCV, portName, true, j); pData->cvIn.ports[j].rindex = j; pData->cvIn.ports[j].port->setRange(min, max); } // CV Outs for (j=0; j < cvOuts; ++j) { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } if (fDescriptor->get_buffer_port_name != nullptr) { portName += fDescriptor->get_buffer_port_name(fHandle, fDescriptor->audioOuts + j, true); } else if (cvOuts > 1) { portName += "cv_output_"; portName += CarlaString(j+1); } else portName += "cv_output"; portName.truncate(portNameSize); float min = -1.0f, max = 1.0f; if (fDescriptor->get_buffer_port_range != nullptr) { if (const NativePortRange* const range = fDescriptor->get_buffer_port_range(fHandle, fDescriptor->audioOuts + j, true)) { min = range->minimum; max = range->maximum; } } pData->cvOut.ports[j].port = (CarlaEngineCVPort*)pData->client->addPort(kEnginePortTypeCV, portName, false, j); pData->cvOut.ports[j].rindex = j; pData->cvOut.ports[j].port->setRange(min, max); } // MIDI Input (only if multiple) if (mIns > 1) { for (j=0; j < mIns; ++j) { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } portName += "midi-in_"; portName += CarlaString(j+1); portName.truncate(portNameSize); fMidiIn.ports[j] = (CarlaEngineEventPort*)pData->client->addPort(kEnginePortTypeEvent, portName, true, j); fMidiIn.indexes[j] = j; } pData->event.portIn = fMidiIn.ports[0]; } // MIDI Output (only if multiple) if (mOuts > 1) { for (j=0; j < mOuts; ++j) { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } portName += "midi-out_"; portName += CarlaString(j+1); portName.truncate(portNameSize); fMidiOut.ports[j] = (CarlaEngineEventPort*)pData->client->addPort(kEnginePortTypeEvent, portName, false, j); fMidiOut.indexes[j] = j; } pData->event.portOut = fMidiOut.ports[0]; } reloadParameters(&needsCtrlIn, &needsCtrlOut); if (needsCtrlIn || mIns == 1) { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } portName += "events-in"; portName.truncate(portNameSize); pData->event.portIn = (CarlaEngineEventPort*)pData->client->addPort(kEnginePortTypeEvent, portName, true, 0); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH pData->event.cvSourcePorts = pData->client->createCVSourcePorts(); #endif } if (needsCtrlOut || mOuts == 1) { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } portName += "events-out"; portName.truncate(portNameSize); pData->event.portOut = (CarlaEngineEventPort*)pData->client->addPort(kEnginePortTypeEvent, portName, false, 0); } if (forcedStereoIn || forcedStereoOut) pData->options |= PLUGIN_OPTION_FORCE_STEREO; else pData->options &= ~PLUGIN_OPTION_FORCE_STEREO; // plugin hints pData->hints = 0x0; if (aOuts > 0 && (aIns == aOuts || aIns == 1)) pData->hints |= PLUGIN_CAN_DRYWET; if (aOuts > 0) pData->hints |= PLUGIN_CAN_VOLUME; if (aOuts >= 2 && aOuts % 2 == 0) pData->hints |= PLUGIN_CAN_BALANCE; // native plugin hints if (fDescriptor->hints & NATIVE_PLUGIN_IS_RTSAFE) pData->hints |= PLUGIN_IS_RTSAFE; if (fDescriptor->hints & NATIVE_PLUGIN_IS_SYNTH) pData->hints |= PLUGIN_IS_SYNTH; if (fDescriptor->hints & NATIVE_PLUGIN_HAS_UI) pData->hints |= PLUGIN_HAS_CUSTOM_UI; if (fDescriptor->hints & NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS) pData->hints |= PLUGIN_NEEDS_FIXED_BUFFERS; if (fDescriptor->hints & NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD) pData->hints |= PLUGIN_NEEDS_UI_MAIN_THREAD; if (fDescriptor->hints & NATIVE_PLUGIN_USES_MULTI_PROGS) pData->hints |= PLUGIN_USES_MULTI_PROGS; if (fDescriptor->hints & NATIVE_PLUGIN_HAS_INLINE_DISPLAY) pData->hints |= PLUGIN_HAS_INLINE_DISPLAY; // extra plugin hints pData->extraHints = 0x0; bufferSizeChanged(pData->engine->getBufferSize()); reloadPrograms(true); if (pData->active) activate(); carla_debug("CarlaPluginNative::reload() - end"); } void reloadParameters(bool* const needsCtrlIn, bool* const needsCtrlOut) { carla_debug("CarlaPluginNative::reloadParameters() - start"); const float sampleRate = static_cast(pData->engine->getSampleRate()); const uint32_t params = (fDescriptor->get_parameter_count != nullptr && fDescriptor->get_parameter_info != nullptr) ? fDescriptor->get_parameter_count(fHandle) : 0; pData->param.clear(); if (params > 0) { pData->param.createNew(params, true); } for (uint32_t j=0; j < params; ++j) { const NativeParameter* const paramInfo(fDescriptor->get_parameter_info(fHandle, j)); CARLA_SAFE_ASSERT_CONTINUE(paramInfo != nullptr); pData->param.data[j].type = PARAMETER_UNKNOWN; pData->param.data[j].index = static_cast(j); pData->param.data[j].rindex = static_cast(j); float min, max, def, step, stepSmall, stepLarge; // min value min = paramInfo->ranges.min; // max value max = paramInfo->ranges.max; if (min > max) max = min; if (carla_isEqual(min, max)) { carla_stderr2("WARNING - Broken plugin parameter '%s': max == min", paramInfo->name); max = min + 0.1f; } // default value def = paramInfo->ranges.def; if (def < min) def = min; else if (def > max) def = max; if (paramInfo->hints & NATIVE_PARAMETER_USES_SAMPLE_RATE) { min *= sampleRate; max *= sampleRate; def *= sampleRate; pData->param.data[j].hints |= PARAMETER_USES_SAMPLERATE; } if (paramInfo->hints & NATIVE_PARAMETER_IS_BOOLEAN) { step = max - min; stepSmall = step; stepLarge = step; pData->param.data[j].hints |= PARAMETER_IS_BOOLEAN; } else if (paramInfo->hints & NATIVE_PARAMETER_IS_INTEGER) { step = 1.0f; stepSmall = 1.0f; stepLarge = 10.0f; pData->param.data[j].hints |= PARAMETER_IS_INTEGER; } else { float range = max - min; step = range/100.0f; stepSmall = range/1000.0f; stepLarge = range/10.0f; } if (paramInfo->hints & NATIVE_PARAMETER_IS_OUTPUT) { pData->param.data[j].type = PARAMETER_OUTPUT; if (needsCtrlOut != nullptr) *needsCtrlOut = true; } else { pData->param.data[j].type = PARAMETER_INPUT; if (needsCtrlIn != nullptr) *needsCtrlIn = true; } // extra parameter hints if (paramInfo->hints & NATIVE_PARAMETER_IS_ENABLED) { pData->param.data[j].hints |= PARAMETER_IS_ENABLED; if (paramInfo->hints & NATIVE_PARAMETER_IS_AUTOMATABLE) { pData->param.data[j].hints |= PARAMETER_IS_AUTOMATABLE; pData->param.data[j].hints |= PARAMETER_CAN_BE_CV_CONTROLLED; } } if (paramInfo->hints & NATIVE_PARAMETER_IS_LOGARITHMIC) pData->param.data[j].hints |= PARAMETER_IS_LOGARITHMIC; if (paramInfo->hints & NATIVE_PARAMETER_USES_SCALEPOINTS) pData->param.data[j].hints |= PARAMETER_USES_SCALEPOINTS; pData->param.ranges[j].min = min; pData->param.ranges[j].max = max; pData->param.ranges[j].def = def; pData->param.ranges[j].step = step; pData->param.ranges[j].stepSmall = stepSmall; pData->param.ranges[j].stepLarge = stepLarge; } carla_debug("CarlaPluginNative::reloadParameters() - end"); } void reloadPrograms(const bool doInit) override { carla_debug("CarlaPluginNative::reloadPrograms(%s)", bool2str(doInit)); uint32_t i, oldCount = pData->midiprog.count; const int32_t current = pData->midiprog.current; // Delete old programs pData->midiprog.clear(); // Query new programs uint32_t count = 0; if (fDescriptor->get_midi_program_count != nullptr && fDescriptor->get_midi_program_info != nullptr && fDescriptor->set_midi_program != nullptr) count = fDescriptor->get_midi_program_count(fHandle); if (count > 0) { pData->midiprog.createNew(count); // Update data for (i=0; i < count; ++i) { const NativeMidiProgram* const mpDesc(fDescriptor->get_midi_program_info(fHandle, i)); CARLA_SAFE_ASSERT_CONTINUE(mpDesc != nullptr); pData->midiprog.data[i].bank = mpDesc->bank; pData->midiprog.data[i].program = mpDesc->program; pData->midiprog.data[i].name = carla_strdup(mpDesc->name); } } if (doInit) { if (count > 0) setMidiProgram(0, false, false, false, true); } else { // Check if current program is invalid bool programChanged = false; if (count == oldCount+1) { // one midi program added, probably created by user pData->midiprog.current = static_cast(oldCount); programChanged = true; } else if (current < 0 && count > 0) { // programs exist now, but not before pData->midiprog.current = 0; programChanged = true; } else if (current >= 0 && count == 0) { // programs existed before, but not anymore pData->midiprog.current = -1; programChanged = true; } else if (current >= static_cast(count)) { // current midi program > count pData->midiprog.current = 0; programChanged = true; } else { // no change pData->midiprog.current = current; } if (programChanged) setMidiProgram(pData->midiprog.current, true, true, true, false); pData->engine->callback(true, true, ENGINE_CALLBACK_RELOAD_PROGRAMS, pData->id, 0, 0, 0, 0.0f, nullptr); } } // ------------------------------------------------------------------- // Plugin processing void activate() noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); if (fDescriptor->activate != nullptr) { try { fDescriptor->activate(fHandle); } catch(...) {} if (fHandle2 != nullptr) { try { fDescriptor->activate(fHandle2); } catch(...) {} } } } void deactivate() noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); if (fDescriptor->deactivate != nullptr) { try { fDescriptor->deactivate(fHandle); } catch(...) {} if (fHandle2 != nullptr) { try { fDescriptor->deactivate(fHandle2); } catch(...) {} } } } EngineEvent& findNextEvent() { if (fMidiIn.count == 1) { NativePluginMidiInData::MultiPortData& multiportData(fMidiIn.multiportData[0]); if (multiportData.usedIndex == multiportData.cachedEventCount) { const uint32_t eventCount = pData->event.portIn->getEventCount(); CARLA_SAFE_ASSERT_INT2(eventCount == multiportData.cachedEventCount, eventCount, multiportData.cachedEventCount); return kNullEngineEvent; } return pData->event.portIn->getEvent(multiportData.usedIndex++); } uint32_t lowestSampleTime = 9999999; uint32_t portMatching = 0; bool found = false; // process events in order for multiple ports for (uint32_t m=0; m < fMidiIn.count; ++m) { CarlaEngineEventPort* const eventPort(fMidiIn.ports[m]); NativePluginMidiInData::MultiPortData& multiportData(fMidiIn.multiportData[m]); if (multiportData.usedIndex == multiportData.cachedEventCount) continue; const EngineEvent& event(eventPort->getEventUnchecked(multiportData.usedIndex)); if (event.time < lowestSampleTime) { lowestSampleTime = event.time; portMatching = m; found = true; } } if (found) { CarlaEngineEventPort* const eventPort(fMidiIn.ports[portMatching]); NativePluginMidiInData::MultiPortData& multiportData(fMidiIn.multiportData[portMatching]); return eventPort->getEvent(multiportData.usedIndex++); } return kNullEngineEvent; } void process(const float* const* const audioIn, float** const audioOut, const float* const* const cvIn, float** const cvOut, const uint32_t frames) override { // -------------------------------------------------------------------------------------------------------- // Check if active if (! pData->active) { // disable any output sound for (uint32_t i=0; i < pData->audioOut.count; ++i) carla_zeroFloats(audioOut[i], frames); for (uint32_t i=0; i < pData->cvOut.count; ++i) carla_zeroFloats(cvOut[i], frames); return; } fMidiEventInCount = fMidiEventOutCount = 0; carla_zeroStructs(fMidiInEvents, kPluginMaxMidiEvents); carla_zeroStructs(fMidiOutEvents, kPluginMaxMidiEvents); // -------------------------------------------------------------------------------------------------------- // Check if needs reset if (pData->needsReset) { if (pData->options & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) { fMidiEventInCount = MAX_MIDI_CHANNELS*2; for (uint8_t k=0, i=MAX_MIDI_CHANNELS; k < MAX_MIDI_CHANNELS; ++k) { fMidiInEvents[k].data[0] = uint8_t(MIDI_STATUS_CONTROL_CHANGE | (k & MIDI_CHANNEL_BIT)); fMidiInEvents[k].data[1] = MIDI_CONTROL_ALL_NOTES_OFF; fMidiInEvents[k].data[2] = 0; fMidiInEvents[k].size = 3; fMidiInEvents[k+i].data[0] = uint8_t(MIDI_STATUS_CONTROL_CHANGE | (k & MIDI_CHANNEL_BIT)); fMidiInEvents[k+i].data[1] = MIDI_CONTROL_ALL_SOUND_OFF; fMidiInEvents[k+i].data[2] = 0; fMidiInEvents[k+i].size = 3; } } else if (pData->ctrlChannel >= 0 && pData->ctrlChannel < MAX_MIDI_CHANNELS) { fMidiEventInCount = MAX_MIDI_NOTE; for (uint8_t k=0; k < MAX_MIDI_NOTE; ++k) { fMidiInEvents[k].data[0] = uint8_t(MIDI_STATUS_NOTE_OFF | (pData->ctrlChannel & MIDI_CHANNEL_BIT)); fMidiInEvents[k].data[1] = k; fMidiInEvents[k].data[2] = 0; fMidiInEvents[k].size = 3; } } pData->needsReset = false; } // -------------------------------------------------------------------------------------------------------- // Set TimeInfo const EngineTimeInfo timeInfo(pData->engine->getTimeInfo()); fTimeInfo.playing = timeInfo.playing; fTimeInfo.frame = timeInfo.frame; fTimeInfo.usecs = timeInfo.usecs; if (timeInfo.bbt.valid) { fTimeInfo.bbt.valid = true; fTimeInfo.bbt.bar = timeInfo.bbt.bar; fTimeInfo.bbt.beat = timeInfo.bbt.beat; fTimeInfo.bbt.tick = timeInfo.bbt.tick; fTimeInfo.bbt.barStartTick = timeInfo.bbt.barStartTick; fTimeInfo.bbt.beatsPerBar = timeInfo.bbt.beatsPerBar; fTimeInfo.bbt.beatType = timeInfo.bbt.beatType; fTimeInfo.bbt.ticksPerBeat = timeInfo.bbt.ticksPerBeat; fTimeInfo.bbt.beatsPerMinute = timeInfo.bbt.beatsPerMinute; } else { fTimeInfo.bbt.valid = false; } #if 0 // This test code has proven to be quite useful // So I am leaving it behind, I might need it again.. if (pData->id == 1) { static int64_t last_frame = timeInfo.frame; static int64_t last_dev_frame = 0; static double last_val = timeInfo.bbt.barStartTick + ((timeInfo.bbt.beat-1) * timeInfo.bbt.ticksPerBeat) + timeInfo.bbt.tick; static double last_dev_val = 0.0; int64_t cur_frame = timeInfo.frame; int64_t cur_dev_frame = cur_frame - last_frame; double cur_val = timeInfo.bbt.barStartTick + ((timeInfo.bbt.beat-1) * timeInfo.bbt.ticksPerBeat) + timeInfo.bbt.tick; double cur_dev_val = cur_val - last_val; if (std::abs(last_dev_val - cur_dev_val) >= 0.0001 || last_dev_frame != cur_dev_frame) { carla_stdout("currently %u at %u => %f : DEV1: %li : DEV2: %f", frames, timeInfo.frame, cur_val, cur_dev_frame, cur_dev_val); } last_val = cur_val; last_dev_val = cur_dev_val; last_frame = cur_frame; last_dev_frame = cur_dev_frame; } #endif // -------------------------------------------------------------------------------------------------------- // Event Input and Processing if (pData->event.portIn != nullptr) { // ---------------------------------------------------------------------------------------------------- // MIDI Input (External) if (pData->extNotes.mutex.tryLock()) { ExternalMidiNote note = { 0, 0, 0 }; for (; fMidiEventInCount < kPluginMaxMidiEvents && ! pData->extNotes.data.isEmpty();) { note = pData->extNotes.data.getFirst(note, true); CARLA_SAFE_ASSERT_CONTINUE(note.channel >= 0 && note.channel < MAX_MIDI_CHANNELS); NativeMidiEvent& nativeEvent(fMidiInEvents[fMidiEventInCount++]); nativeEvent.data[0] = uint8_t((note.velo > 0 ? MIDI_STATUS_NOTE_ON : MIDI_STATUS_NOTE_OFF) | (note.channel & MIDI_CHANNEL_BIT)); nativeEvent.data[1] = note.note; nativeEvent.data[2] = note.velo; nativeEvent.size = 3; } pData->extNotes.mutex.unlock(); } // End of MIDI Input (External) // ---------------------------------------------------------------------------------------------------- // Event Input (System) #ifndef BUILD_BRIDGE bool allNotesOffSent = false; #endif const bool isSampleAccurate = (pData->options & PLUGIN_OPTION_FIXED_BUFFERS) == 0; uint32_t startTime = 0; uint32_t timeOffset = 0; uint32_t nextBankId; if (pData->midiprog.current >= 0 && pData->midiprog.count > 0) nextBankId = pData->midiprog.data[pData->midiprog.current].bank; else nextBankId = 0; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (cvIn != nullptr && pData->event.cvSourcePorts != nullptr) pData->event.cvSourcePorts->initPortBuffers(cvIn + pData->cvIn.count, frames, isSampleAccurate, pData->event.portIn); #endif for (;;) { EngineEvent& event(findNextEvent()); if (event.type == kEngineEventTypeNull) break; uint32_t eventTime = event.time; CARLA_SAFE_ASSERT_UINT2_CONTINUE(eventTime < frames, eventTime, frames); if (eventTime < timeOffset) { carla_stderr2("Timing error, eventTime:%u < timeOffset:%u for '%s'", eventTime, timeOffset, pData->name); eventTime = timeOffset; } if (isSampleAccurate && eventTime > timeOffset) { if (processSingle(audioIn, audioOut, cvIn, cvOut, eventTime - timeOffset, timeOffset)) { startTime = 0; timeOffset = eventTime; if (pData->midiprog.current >= 0 && pData->midiprog.count > 0) nextBankId = pData->midiprog.data[pData->midiprog.current].bank; else nextBankId = 0; if (fMidiEventInCount > 0) { carla_zeroStructs(fMidiInEvents, fMidiEventInCount); fMidiEventInCount = 0; } if (fMidiEventOutCount > 0) { carla_zeroStructs(fMidiOutEvents, fMidiEventOutCount); fMidiEventOutCount = 0; } } else startTime += timeOffset; } // Control change switch (event.type) { case kEngineEventTypeNull: break; case kEngineEventTypeControl: { EngineControlEvent& ctrlEvent(event.ctrl); switch (ctrlEvent.type) { case kEngineControlEventTypeNull: break; case kEngineControlEventTypeParameter: { float value; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // non-midi if (event.channel == kEngineEventNonMidiChannel) { const uint32_t k = ctrlEvent.param; CARLA_SAFE_ASSERT_CONTINUE(k < pData->param.count); ctrlEvent.handled = true; value = pData->param.getFinalUnnormalizedValue(k, ctrlEvent.normalizedValue); setParameterValueRT(k, value, true); continue; } // Control backend stuff if (event.channel == pData->ctrlChannel) { if (MIDI_IS_CONTROL_BREATH_CONTROLLER(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_DRYWET) > 0) { ctrlEvent.handled = true; value = ctrlEvent.normalizedValue; setDryWetRT(value, true); } else if (MIDI_IS_CONTROL_CHANNEL_VOLUME(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_VOLUME) > 0) { ctrlEvent.handled = true; value = ctrlEvent.normalizedValue*127.0f/100.0f; setVolumeRT(value, true); } else if (MIDI_IS_CONTROL_BALANCE(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_BALANCE) > 0) { float left, right; value = ctrlEvent.normalizedValue/0.5f - 1.0f; if (value < 0.0f) { left = -1.0f; right = (value*2.0f)+1.0f; } else if (value > 0.0f) { left = (value*2.0f)-1.0f; right = 1.0f; } else { left = -1.0f; right = 1.0f; } ctrlEvent.handled = true; setBalanceLeftRT(left, true); setBalanceRightRT(right, true); } } #endif // Control plugin parameters for (uint32_t k=0; k < pData->param.count; ++k) { if (pData->param.data[k].midiChannel != event.channel) continue; if (pData->param.data[k].mappedControlIndex != ctrlEvent.param) continue; if (pData->param.data[k].type != PARAMETER_INPUT) continue; if ((pData->param.data[k].hints & PARAMETER_IS_AUTOMATABLE) == 0) continue; ctrlEvent.handled = true; value = pData->param.getFinalUnnormalizedValue(k, ctrlEvent.normalizedValue); setParameterValueRT(k, value, true); } if ((pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) != 0 && ctrlEvent.param < MAX_MIDI_VALUE) { if (fMidiEventInCount >= kPluginMaxMidiEvents) continue; NativeMidiEvent& nativeEvent(fMidiInEvents[fMidiEventInCount++]); carla_zeroStruct(nativeEvent); nativeEvent.time = isSampleAccurate ? startTime : eventTime; nativeEvent.data[0] = uint8_t(MIDI_STATUS_CONTROL_CHANGE | (event.channel & MIDI_CHANNEL_BIT)); nativeEvent.data[1] = uint8_t(ctrlEvent.param); nativeEvent.data[2] = uint8_t(ctrlEvent.normalizedValue*127.0f); nativeEvent.size = 3; } #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (! ctrlEvent.handled) checkForMidiLearn(event); #endif break; } // case kEngineControlEventTypeParameter case kEngineControlEventTypeMidiBank: if (pData->options & PLUGIN_OPTION_MAP_PROGRAM_CHANGES) { if (event.channel == pData->ctrlChannel) nextBankId = ctrlEvent.param; } else if (pData->options & PLUGIN_OPTION_SEND_PROGRAM_CHANGES) { if (fMidiEventInCount >= kPluginMaxMidiEvents) continue; NativeMidiEvent& nativeEvent(fMidiInEvents[fMidiEventInCount++]); carla_zeroStruct(nativeEvent); nativeEvent.time = isSampleAccurate ? startTime : eventTime; nativeEvent.data[0] = uint8_t(MIDI_STATUS_CONTROL_CHANGE | (event.channel & MIDI_CHANNEL_BIT)); nativeEvent.data[1] = MIDI_CONTROL_BANK_SELECT; nativeEvent.data[2] = uint8_t(ctrlEvent.param); nativeEvent.size = 3; } break; case kEngineControlEventTypeMidiProgram: if (pData->options & PLUGIN_OPTION_MAP_PROGRAM_CHANGES) { if (event.channel < MAX_MIDI_CHANNELS) { const uint32_t nextProgramId(ctrlEvent.param); for (uint32_t k=0; k < pData->midiprog.count; ++k) { if (pData->midiprog.data[k].bank == nextBankId && pData->midiprog.data[k].program == nextProgramId) { fDescriptor->set_midi_program(fHandle, event.channel, nextBankId, nextProgramId); if (fHandle2 != nullptr) fDescriptor->set_midi_program(fHandle2, event.channel, nextBankId, nextProgramId); fCurMidiProgs[event.channel] = static_cast(k); if (event.channel == pData->ctrlChannel) { pData->postponeMidiProgramChangeRtEvent(true, k); } break; } } } } else if (pData->options & PLUGIN_OPTION_SEND_PROGRAM_CHANGES) { if (fMidiEventInCount >= kPluginMaxMidiEvents) continue; NativeMidiEvent& nativeEvent(fMidiInEvents[fMidiEventInCount++]); carla_zeroStruct(nativeEvent); nativeEvent.time = isSampleAccurate ? startTime : eventTime; nativeEvent.data[0] = uint8_t(MIDI_STATUS_PROGRAM_CHANGE | (event.channel & MIDI_CHANNEL_BIT)); nativeEvent.data[1] = uint8_t(ctrlEvent.param); nativeEvent.size = 2; } break; case kEngineControlEventTypeAllSoundOff: if (pData->options & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) { if (fMidiEventInCount >= kPluginMaxMidiEvents) continue; NativeMidiEvent& nativeEvent(fMidiInEvents[fMidiEventInCount++]); carla_zeroStruct(nativeEvent); nativeEvent.time = isSampleAccurate ? startTime : eventTime; nativeEvent.data[0] = uint8_t(MIDI_STATUS_CONTROL_CHANGE | (event.channel & MIDI_CHANNEL_BIT)); nativeEvent.data[1] = MIDI_CONTROL_ALL_SOUND_OFF; nativeEvent.data[2] = 0; nativeEvent.size = 3; } break; case kEngineControlEventTypeAllNotesOff: if (pData->options & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) { #ifndef BUILD_BRIDGE if (event.channel == pData->ctrlChannel && ! allNotesOffSent) { allNotesOffSent = true; postponeRtAllNotesOff(); } #endif if (fMidiEventInCount >= kPluginMaxMidiEvents) continue; NativeMidiEvent& nativeEvent(fMidiInEvents[fMidiEventInCount++]); carla_zeroStruct(nativeEvent); nativeEvent.time = isSampleAccurate ? startTime : eventTime; nativeEvent.data[0] = uint8_t(MIDI_STATUS_CONTROL_CHANGE | (event.channel & MIDI_CHANNEL_BIT)); nativeEvent.data[1] = MIDI_CONTROL_ALL_NOTES_OFF; nativeEvent.data[2] = 0; nativeEvent.size = 3; } break; } break; } case kEngineEventTypeMidi: { if (fMidiEventInCount >= kPluginMaxMidiEvents) continue; const EngineMidiEvent& midiEvent(event.midi); if (midiEvent.size > 4) continue; #ifdef CARLA_PROPER_CPP11_SUPPORT static_assert(4 <= EngineMidiEvent::kDataSize, "Incorrect data"); #endif uint8_t status = uint8_t(MIDI_GET_STATUS_FROM_DATA(midiEvent.data)); if ((status == MIDI_STATUS_NOTE_OFF || status == MIDI_STATUS_NOTE_ON) && (pData->options & PLUGIN_OPTION_SKIP_SENDING_NOTES)) continue; if (status == MIDI_STATUS_CHANNEL_PRESSURE && (pData->options & PLUGIN_OPTION_SEND_CHANNEL_PRESSURE) == 0) continue; if (status == MIDI_STATUS_CONTROL_CHANGE && (pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) == 0) continue; if (status == MIDI_STATUS_POLYPHONIC_AFTERTOUCH && (pData->options & PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH) == 0) continue; if (status == MIDI_STATUS_PITCH_WHEEL_CONTROL && (pData->options & PLUGIN_OPTION_SEND_PITCHBEND) == 0) continue; // Fix bad note-off if (status == MIDI_STATUS_NOTE_ON && midiEvent.data[2] == 0) status = MIDI_STATUS_NOTE_OFF; NativeMidiEvent& nativeEvent(fMidiInEvents[fMidiEventInCount++]); carla_zeroStruct(nativeEvent); nativeEvent.port = midiEvent.port; nativeEvent.time = isSampleAccurate ? startTime : eventTime; nativeEvent.size = midiEvent.size; nativeEvent.data[0] = uint8_t(status | (event.channel & MIDI_CHANNEL_BIT)); nativeEvent.data[1] = midiEvent.size >= 2 ? midiEvent.data[1] : 0; nativeEvent.data[2] = midiEvent.size >= 3 ? midiEvent.data[2] : 0; nativeEvent.data[3] = midiEvent.size == 4 ? midiEvent.data[3] : 0; if (status == MIDI_STATUS_NOTE_ON) { pData->postponeNoteOnRtEvent(true, event.channel, midiEvent.data[1], midiEvent.data[2]); } else if (status == MIDI_STATUS_NOTE_OFF) { pData->postponeNoteOffRtEvent(true, event.channel, midiEvent.data[1]); } } break; } // switch (event.type) } pData->postRtEvents.trySplice(); if (frames > timeOffset) processSingle(audioIn, audioOut, cvIn, cvOut, frames - timeOffset, timeOffset); } // End of Event Input and Processing // -------------------------------------------------------------------------------------------------------- // Plugin processing (no events) else { processSingle(audioIn, audioOut, cvIn, cvOut, frames, 0); } // End of Plugin processing (no events) #ifndef BUILD_BRIDGE // -------------------------------------------------------------------------------------------------------- // Control Output if (pData->event.portOut != nullptr) { float value, curValue; for (uint32_t k=0; k < pData->param.count; ++k) { if (pData->param.data[k].type != PARAMETER_OUTPUT) continue; curValue = fDescriptor->get_parameter_value(fHandle, k); pData->param.ranges[k].fixValue(curValue); if (pData->param.data[k].mappedControlIndex > 0) { value = pData->param.ranges[k].getNormalizedValue(curValue); pData->event.portOut->writeControlEvent(0, pData->param.data[k].midiChannel, kEngineControlEventTypeParameter, static_cast(pData->param.data[k].mappedControlIndex), -1, value); } } } // End of Control Output #endif } bool processSingle(const float* const* const audioIn, float** const audioOut, const float* const* const cvIn, float** const cvOut, const uint32_t frames, const uint32_t timeOffset) { CARLA_SAFE_ASSERT_RETURN(frames > 0, false); if (pData->audioIn.count > 0) { CARLA_SAFE_ASSERT_RETURN(audioIn != nullptr, false); } if (pData->audioOut.count > 0) { CARLA_SAFE_ASSERT_RETURN(audioOut != nullptr, false); } if (pData->cvIn.count > 0) { CARLA_SAFE_ASSERT_RETURN(cvIn != nullptr, false); } if (pData->cvOut.count > 0) { CARLA_SAFE_ASSERT_RETURN(cvOut != nullptr, false); } // -------------------------------------------------------------------------------------------------------- // Try lock, silence otherwise if (fIsOffline) { pData->singleMutex.lock(); } else if (! pData->singleMutex.tryLock()) { for (uint32_t i=0; i < pData->audioOut.count; ++i) { for (uint32_t k=0; k < frames; ++k) audioOut[i][k+timeOffset] = 0.0f; } for (uint32_t i=0; i < pData->cvOut.count; ++i) { for (uint32_t k=0; k < frames; ++k) cvOut[i][k+timeOffset] = 0.0f; } return false; } // -------------------------------------------------------------------------------------------------------- // Set audio buffers { for (uint32_t i=0; i < pData->audioIn.count; ++i) carla_copyFloats(fAudioAndCvInBuffers[i], audioIn[i]+timeOffset, frames); for (uint32_t i=0; i < pData->cvIn.count; ++i) carla_copyFloats(fAudioAndCvInBuffers[pData->audioIn.count+i], cvIn[i]+timeOffset, frames); for (uint32_t i=0; i < pData->audioOut.count; ++i) carla_zeroFloats(fAudioAndCvOutBuffers[i], frames); for (uint32_t i=0; i < pData->cvOut.count; ++i) carla_zeroFloats(fAudioAndCvOutBuffers[pData->audioOut.count+i], frames); } // -------------------------------------------------------------------------------------------------------- // Run plugin fIsProcessing = true; if (fHandle2 == nullptr) { fDescriptor->process(fHandle, fAudioAndCvInBuffers, fAudioAndCvOutBuffers, frames, fMidiInEvents, fMidiEventInCount); } else { fDescriptor->process(fHandle, (fAudioAndCvInBuffers != nullptr) ? &fAudioAndCvInBuffers[0] : nullptr, (fAudioAndCvOutBuffers != nullptr) ? &fAudioAndCvOutBuffers[0] : nullptr, frames, fMidiInEvents, fMidiEventInCount); fDescriptor->process(fHandle2, (fAudioAndCvInBuffers != nullptr) ? &fAudioAndCvInBuffers[1] : nullptr, (fAudioAndCvOutBuffers != nullptr) ? &fAudioAndCvOutBuffers[1] : nullptr, frames, fMidiInEvents, fMidiEventInCount); } fIsProcessing = false; if (fTimeInfo.playing) fTimeInfo.frame += frames; uint32_t i=0; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // -------------------------------------------------------------------------------------------------------- // Post-processing (dry/wet, volume and balance) { const bool doDryWet = (pData->hints & PLUGIN_CAN_DRYWET) != 0 && carla_isNotEqual(pData->postProc.dryWet, 1.0f); const bool doBalance = (pData->hints & PLUGIN_CAN_BALANCE) != 0 && ! (carla_isEqual(pData->postProc.balanceLeft, -1.0f) && carla_isEqual(pData->postProc.balanceRight, 1.0f)); bool isPair; float bufValue, oldBufLeft[doBalance ? frames : 1]; for (; i < pData->audioOut.count; ++i) { // Dry/Wet if (doDryWet) { for (uint32_t k=0; k < frames; ++k) { bufValue = fAudioAndCvInBuffers[(pData->audioIn.count == 1) ? 0 : i][k]; fAudioAndCvOutBuffers[i][k] = (fAudioAndCvOutBuffers[i][k] * pData->postProc.dryWet) + (bufValue * (1.0f - pData->postProc.dryWet)); } } // Balance if (doBalance) { isPair = (i % 2 == 0); if (isPair) { CARLA_ASSERT(i+1 < pData->audioOut.count); carla_copyFloats(oldBufLeft, fAudioAndCvOutBuffers[i], frames); } float balRangeL = (pData->postProc.balanceLeft + 1.0f)/2.0f; float balRangeR = (pData->postProc.balanceRight + 1.0f)/2.0f; for (uint32_t k=0; k < frames; ++k) { if (isPair) { // left fAudioAndCvOutBuffers[i][k] = oldBufLeft[k] * (1.0f - balRangeL); fAudioAndCvOutBuffers[i][k] += fAudioAndCvOutBuffers[i+1][k] * (1.0f - balRangeR); } else { // right fAudioAndCvOutBuffers[i][k] = fAudioAndCvOutBuffers[i][k] * balRangeR; fAudioAndCvOutBuffers[i][k] += oldBufLeft[k] * balRangeL; } } } // Volume (and buffer copy) { for (uint32_t k=0; k < frames; ++k) audioOut[i][k+timeOffset] = fAudioAndCvOutBuffers[i][k] * pData->postProc.volume; } } } // End of Post-processing #else for (; i < pData->audioOut.count; ++i) { for (uint32_t k=0; k < frames; ++k) audioOut[i][k+timeOffset] = fAudioAndCvOutBuffers[i][k]; } #endif // CV stuff too for (; i < pData->cvOut.count; ++i) { for (uint32_t k=0; k < frames; ++k) cvOut[i][k+timeOffset] = fAudioAndCvOutBuffers[pData->audioOut.count+i][k]; } // -------------------------------------------------------------------------------------------------------- // MIDI Output if (pData->event.portOut != nullptr) { for (uint32_t k = 0; k < fMidiEventOutCount; ++k) { const uint8_t channel = uint8_t(MIDI_GET_CHANNEL_FROM_DATA(fMidiOutEvents[k].data)); const uint8_t port = fMidiOutEvents[k].port; if (fMidiOut.count > 1 && port < fMidiOut.count) fMidiOut.ports[port]->writeMidiEvent(fMidiOutEvents[k].time+timeOffset, channel, fMidiOutEvents[k].size, fMidiOutEvents[k].data); else pData->event.portOut->writeMidiEvent(fMidiOutEvents[k].time+timeOffset, channel, fMidiOutEvents[k].size, fMidiOutEvents[k].data); } } // -------------------------------------------------------------------------------------------------------- pData->singleMutex.unlock(); return true; } void bufferSizeChanged(const uint32_t newBufferSize) override { CARLA_ASSERT_INT(newBufferSize > 0, newBufferSize); carla_debug("CarlaPluginNative::bufferSizeChanged(%i)", newBufferSize); for (uint32_t i=0; i < (pData->audioIn.count+pData->cvIn.count); ++i) { if (fAudioAndCvInBuffers[i] != nullptr) delete[] fAudioAndCvInBuffers[i]; fAudioAndCvInBuffers[i] = new float[newBufferSize]; } for (uint32_t i=0; i < (pData->audioOut.count+pData->cvOut.count); ++i) { if (fAudioAndCvOutBuffers[i] != nullptr) delete[] fAudioAndCvOutBuffers[i]; fAudioAndCvOutBuffers[i] = new float[newBufferSize]; } if (fCurBufferSize == newBufferSize) return; fCurBufferSize = newBufferSize; if (fDescriptor != nullptr && fDescriptor->dispatcher != nullptr) { fDescriptor->dispatcher(fHandle, NATIVE_PLUGIN_OPCODE_BUFFER_SIZE_CHANGED, 0, static_cast(newBufferSize), nullptr, 0.0f); if (fHandle2 != nullptr) fDescriptor->dispatcher(fHandle2, NATIVE_PLUGIN_OPCODE_BUFFER_SIZE_CHANGED, 0, static_cast(newBufferSize), nullptr, 0.0f); } } void sampleRateChanged(const double newSampleRate) override { CARLA_ASSERT_INT(newSampleRate > 0.0, newSampleRate); carla_debug("CarlaPluginNative::sampleRateChanged(%g)", newSampleRate); if (carla_isEqual(fCurSampleRate, newSampleRate)) return; fCurSampleRate = newSampleRate; if (fDescriptor != nullptr && fDescriptor->dispatcher != nullptr) { fDescriptor->dispatcher(fHandle, NATIVE_PLUGIN_OPCODE_SAMPLE_RATE_CHANGED, 0, 0, nullptr, float(newSampleRate)); if (fHandle2 != nullptr) fDescriptor->dispatcher(fHandle2, NATIVE_PLUGIN_OPCODE_SAMPLE_RATE_CHANGED, 0, 0, nullptr, float(newSampleRate)); } } void offlineModeChanged(const bool isOffline) override { if (fIsOffline == isOffline) return; fIsOffline = isOffline; if (fDescriptor != nullptr && fDescriptor->dispatcher != nullptr) { fDescriptor->dispatcher(fHandle, NATIVE_PLUGIN_OPCODE_OFFLINE_CHANGED, 0, isOffline ? 1 : 0, nullptr, 0.0f); if (fHandle2 != nullptr) fDescriptor->dispatcher(fHandle2, NATIVE_PLUGIN_OPCODE_OFFLINE_CHANGED, 0, isOffline ? 1 : 0, nullptr, 0.0f); } } // ------------------------------------------------------------------- // Plugin buffers void initBuffers() const noexcept override { CarlaPlugin::initBuffers(); fMidiIn.initBuffers(pData->event.portIn); fMidiOut.initBuffers(); } void clearBuffers() noexcept override { carla_debug("CarlaPluginNative::clearBuffers() - start"); if (fAudioAndCvInBuffers != nullptr) { for (uint32_t i=0; i < (pData->audioIn.count+pData->cvIn.count); ++i) { if (fAudioAndCvInBuffers[i] != nullptr) { delete[] fAudioAndCvInBuffers[i]; fAudioAndCvInBuffers[i] = nullptr; } } delete[] fAudioAndCvInBuffers; fAudioAndCvInBuffers = nullptr; } if (fAudioAndCvOutBuffers != nullptr) { for (uint32_t i=0; i < (pData->audioOut.count+pData->cvOut.count); ++i) { if (fAudioAndCvOutBuffers[i] != nullptr) { delete[] fAudioAndCvOutBuffers[i]; fAudioAndCvOutBuffers[i] = nullptr; } } delete[] fAudioAndCvOutBuffers; fAudioAndCvOutBuffers = nullptr; } if (fMidiIn.count > 1) pData->event.portIn = nullptr; if (fMidiOut.count > 1) pData->event.portOut = nullptr; fMidiIn.clear(); fMidiOut.clear(); CarlaPlugin::clearBuffers(); carla_debug("CarlaPluginNative::clearBuffers() - end"); } // ------------------------------------------------------------------- // Post-poned UI Stuff void uiParameterChange(const uint32_t index, const float value) noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); CARLA_SAFE_ASSERT_RETURN(index < pData->param.count,); if (! fIsUiVisible) return; if (fDescriptor->ui_set_parameter_value != nullptr) fDescriptor->ui_set_parameter_value(fHandle, index, value); } void uiMidiProgramChange(const uint32_t index) noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); CARLA_SAFE_ASSERT_RETURN(index < pData->midiprog.count,); if (! fIsUiVisible) return; if (index >= pData->midiprog.count) return; if (fDescriptor->ui_set_midi_program != nullptr) fDescriptor->ui_set_midi_program(fHandle, 0, pData->midiprog.data[index].bank, pData->midiprog.data[index].program); } void uiNoteOn(const uint8_t channel, const uint8_t note, const uint8_t velo) noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); CARLA_SAFE_ASSERT_RETURN(channel < MAX_MIDI_CHANNELS,); CARLA_SAFE_ASSERT_RETURN(note < MAX_MIDI_NOTE,); CARLA_SAFE_ASSERT_RETURN(velo > 0 && velo < MAX_MIDI_VALUE,); if (! fIsUiVisible) return; if (fDescriptor->dispatcher != nullptr) { uint8_t data[3] = { uint8_t(MIDI_STATUS_NOTE_ON | (channel & MIDI_CHANNEL_BIT)), note, velo }; fDescriptor->dispatcher(fHandle, NATIVE_PLUGIN_OPCODE_UI_MIDI_EVENT, 3, 0, data, 0.0f); } } void uiNoteOff(const uint8_t channel, const uint8_t note) noexcept override { CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,); CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,); CARLA_SAFE_ASSERT_RETURN(channel < MAX_MIDI_CHANNELS,); CARLA_SAFE_ASSERT_RETURN(note < MAX_MIDI_NOTE,); if (! fIsUiVisible) return; if (fDescriptor == nullptr || fHandle == nullptr) return; if (fDescriptor->dispatcher != nullptr) { uint8_t data[3] = { uint8_t(MIDI_STATUS_NOTE_OFF | (channel & MIDI_CHANNEL_BIT)), note, 0 }; fDescriptor->dispatcher(fHandle, NATIVE_PLUGIN_OPCODE_UI_MIDI_EVENT, 3, 0, data, 0.0f); } } // ------------------------------------------------------------------- const NativeInlineDisplayImageSurface* renderInlineDisplay(const uint32_t width, const uint32_t height) const { CARLA_SAFE_ASSERT_RETURN(fDescriptor->hints & NATIVE_PLUGIN_HAS_INLINE_DISPLAY, nullptr); CARLA_SAFE_ASSERT_RETURN(fDescriptor->render_inline_display, nullptr); CARLA_SAFE_ASSERT_RETURN(width > 0, nullptr); CARLA_SAFE_ASSERT_RETURN(height > 0, nullptr); return fDescriptor->render_inline_display(fHandle, width, height); } // ------------------------------------------------------------------- protected: const NativeTimeInfo* handleGetTimeInfo() const noexcept { CARLA_SAFE_ASSERT_RETURN(fIsProcessing, nullptr); return &fTimeInfo; } bool handleWriteMidiEvent(const NativeMidiEvent* const event) { CARLA_SAFE_ASSERT_RETURN(pData->enabled, false); CARLA_SAFE_ASSERT_RETURN(fIsProcessing, false); CARLA_SAFE_ASSERT_RETURN(fMidiOut.count > 0 || pData->event.portOut != nullptr, false); CARLA_SAFE_ASSERT_RETURN(event != nullptr, false); CARLA_SAFE_ASSERT_RETURN(event->data[0] != 0, false); if (fMidiEventOutCount == kPluginMaxMidiEvents) { carla_stdout("CarlaPluginNative::handleWriteMidiEvent(%p) - buffer full", event); return false; } std::memcpy(&fMidiOutEvents[fMidiEventOutCount++], event, sizeof(NativeMidiEvent)); return true; } void handleUiParameterChanged(const uint32_t index, const float value) { setParameterValue(index, value, false, true, true); } void handleUiCustomDataChanged(const char* const key, const char* const value) { setCustomData(CUSTOM_DATA_TYPE_STRING, key, value, false); } void handleUiClosed() { pData->engine->callback(true, true, ENGINE_CALLBACK_UI_STATE_CHANGED, pData->id, 0, 0, 0, 0.0f, nullptr); fIsUiVisible = false; } const char* handleUiOpenFile(const bool isDir, const char* const title, const char* const filter) { return pData->engine->runFileCallback(FILE_CALLBACK_OPEN, isDir, title, filter); } const char* handleUiSaveFile(const bool isDir, const char* const title, const char* const filter) { return pData->engine->runFileCallback(FILE_CALLBACK_SAVE, isDir, title, filter); } intptr_t handleDispatcher(const NativeHostDispatcherOpcode opcode, const int32_t index, const intptr_t value, void* const ptr, const float opt) { #ifdef DEBUG if (opcode != NATIVE_HOST_OPCODE_QUEUE_INLINE_DISPLAY && opcode != NATIVE_HOST_OPCODE_REQUEST_IDLE) { carla_debug("CarlaPluginNative::handleDispatcher(%i, %i, " P_INTPTR ", %p, %f)", opcode, index, value, ptr, static_cast(opt)); } #endif switch (opcode) { case NATIVE_HOST_OPCODE_NULL: break; case NATIVE_HOST_OPCODE_UPDATE_PARAMETER: // TODO pData->engine->callback(true, true, ENGINE_CALLBACK_UPDATE, pData->id, -1, 0, 0, 0.0f, nullptr); break; case NATIVE_HOST_OPCODE_UPDATE_MIDI_PROGRAM: // TODO pData->engine->callback(true, true, ENGINE_CALLBACK_UPDATE, pData->id, -1, 0, 0, 0.0f, nullptr); break; case NATIVE_HOST_OPCODE_RELOAD_PARAMETERS: reloadParameters(nullptr, nullptr); pData->engine->callback(true, true, ENGINE_CALLBACK_RELOAD_PARAMETERS, pData->id, -1, 0, 0, 0.0f, nullptr); break; case NATIVE_HOST_OPCODE_RELOAD_MIDI_PROGRAMS: reloadPrograms(false); pData->engine->callback(true, true, ENGINE_CALLBACK_RELOAD_PROGRAMS, pData->id, -1, 0, 0, 0.0f, nullptr); break; case NATIVE_HOST_OPCODE_RELOAD_ALL: reload(); pData->engine->callback(true, true, ENGINE_CALLBACK_RELOAD_ALL, pData->id, -1, 0, 0, 0.0f, nullptr); break; case NATIVE_HOST_OPCODE_UI_UNAVAILABLE: pData->engine->callback(true, true, ENGINE_CALLBACK_UI_STATE_CHANGED, pData->id, -1, 0, 0, 0.0f, nullptr); fIsUiAvailable = false; break; case NATIVE_HOST_OPCODE_HOST_IDLE: pData->engine->callback(true, false, ENGINE_CALLBACK_IDLE, 0, 0, 0, 0, 0.0f, nullptr); break; case NATIVE_HOST_OPCODE_INTERNAL_PLUGIN: return 1; case NATIVE_HOST_OPCODE_QUEUE_INLINE_DISPLAY: switch (pData->engine->getProccessMode()) { case ENGINE_PROCESS_MODE_MULTIPLE_CLIENTS: case ENGINE_PROCESS_MODE_PATCHBAY: fInlineDisplayNeedsRedraw = true; break; default: break; } break; case NATIVE_HOST_OPCODE_UI_TOUCH_PARAMETER: CARLA_SAFE_ASSERT_RETURN(index >= 0, 0); pData->engine->touchPluginParameter(pData->id, static_cast(index), value != 0); break; case NATIVE_HOST_OPCODE_REQUEST_IDLE: fNeedsIdle = true; break; case NATIVE_HOST_OPCODE_GET_FILE_PATH: CARLA_SAFE_ASSERT_RETURN(ptr != nullptr, 0); { const EngineOptions& opts(pData->engine->getOptions()); const char* const filetype = (const char*)ptr; const char* ret = nullptr; if (std::strcmp(filetype, "carla") == 0) { ret = pData->engine->getCurrentProjectFilename(); if (fLastProjectFilename != ret) { fLastProjectFilename = ret; bool found; const size_t r = fLastProjectFilename.rfind(CARLA_OS_SEP, &found); if (found) { fLastProjectFolder = ret; fLastProjectFolder[r] = '\0'; } else { fLastProjectFolder.clear(); } } ret = fLastProjectFolder.buffer(); } else if (std::strcmp(filetype, "audio") == 0) ret = opts.pathAudio; else if (std::strcmp(filetype, "midi") == 0) ret = opts.pathMIDI; return static_cast((uintptr_t)ret); } break; case NATIVE_HOST_OPCODE_UI_RESIZE: case NATIVE_HOST_OPCODE_PREVIEW_BUFFER_DATA: // unused here break; } return 0; // unused for now (void)opt; } // ------------------------------------------------------------------- public: void* getNativeHandle() const noexcept override { return fHandle; } const void* getNativeDescriptor() const noexcept override { return fDescriptor; } // ------------------------------------------------------------------- bool init(const CarlaPluginPtr plugin, const char* const name, const char* const label, const uint options) { CARLA_SAFE_ASSERT_RETURN(pData->engine != nullptr, false); // --------------------------------------------------------------- // first checks if (pData->client != nullptr) { pData->engine->setLastError("Plugin client is already registered"); return false; } if (label == nullptr || label[0] == '\0') { pData->engine->setLastError("null label"); return false; } // --------------------------------------------------------------- // get descriptor that matches label sPluginInitializer.initIfNeeded(); for (LinkedList::Itenerator it = gPluginDescriptors.begin2(); it.valid(); it.next()) { fDescriptor = it.getValue(nullptr); CARLA_SAFE_ASSERT_BREAK(fDescriptor != nullptr); carla_debug("Check vs \"%s\"", fDescriptor->label); if (fDescriptor->label != nullptr && std::strcmp(fDescriptor->label, label) == 0) break; fDescriptor = nullptr; } if (fDescriptor == nullptr) { pData->engine->setLastError("Invalid internal plugin"); return false; } // --------------------------------------------------------------- // set icon /**/ if (std::strcmp(fDescriptor->label, "audiofile") == 0) pData->iconName = carla_strdup_safe("file"); else if (std::strcmp(fDescriptor->label, "midifile") == 0) pData->iconName = carla_strdup_safe("file"); else if (std::strcmp(fDescriptor->label, "3bandeq") == 0) pData->iconName = carla_strdup_safe("distrho"); else if (std::strcmp(fDescriptor->label, "3bandsplitter") == 0) pData->iconName = carla_strdup_safe("distrho"); else if (std::strcmp(fDescriptor->label, "kars") == 0) pData->iconName = carla_strdup_safe("distrho"); else if (std::strcmp(fDescriptor->label, "nekobi") == 0) pData->iconName = carla_strdup_safe("distrho"); else if (std::strcmp(fDescriptor->label, "pingpongpan") == 0) pData->iconName = carla_strdup_safe("distrho"); // --------------------------------------------------------------- // set info if (name != nullptr && name[0] != '\0') pData->name = pData->engine->getUniquePluginName(name); else if (fDescriptor->name != nullptr && fDescriptor->name[0] != '\0') pData->name = pData->engine->getUniquePluginName(fDescriptor->name); else pData->name = pData->engine->getUniquePluginName(label); { CARLA_ASSERT(fHost.uiName == nullptr); CarlaString uiName; if (pData->uiTitle.isNotEmpty()) { uiName = pData->uiTitle; } else { uiName = pData->name; uiName += " (GUI)"; } fHost.uiName = uiName.releaseBufferPointer(); } // --------------------------------------------------------------- // register client pData->client = pData->engine->addClient(plugin); if (pData->client == nullptr || ! pData->client->isOk()) { pData->engine->setLastError("Failed to register plugin client"); return false; } // --------------------------------------------------------------- // initialize plugin fHandle = fDescriptor->instantiate(&fHost); if (fHandle == nullptr) { pData->engine->setLastError("Plugin failed to initialize"); return false; } // --------------------------------------------------------------- // set options bool hasMidiProgs = false; if (fDescriptor->get_midi_program_count != nullptr) { try { hasMidiProgs = fDescriptor->get_midi_program_count(fHandle) > 0; } catch (...) {} } pData->options = 0x0; if (fDescriptor->hints & NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS) pData->options |= PLUGIN_OPTION_FIXED_BUFFERS; else if (options & PLUGIN_OPTION_FIXED_BUFFERS) pData->options |= PLUGIN_OPTION_FIXED_BUFFERS; if (pData->engine->getOptions().forceStereo) pData->options |= PLUGIN_OPTION_FORCE_STEREO; else if (options & PLUGIN_OPTION_FORCE_STEREO) pData->options |= PLUGIN_OPTION_FORCE_STEREO; if (fDescriptor->supports & NATIVE_PLUGIN_SUPPORTS_CONTROL_CHANGES) if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_CONTROL_CHANGES)) pData->options |= PLUGIN_OPTION_SEND_CONTROL_CHANGES; if (fDescriptor->supports & NATIVE_PLUGIN_SUPPORTS_CHANNEL_PRESSURE) if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_CHANNEL_PRESSURE)) pData->options |= PLUGIN_OPTION_SEND_CHANNEL_PRESSURE; if (fDescriptor->supports & NATIVE_PLUGIN_SUPPORTS_NOTE_AFTERTOUCH) if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH)) pData->options |= PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH; if (fDescriptor->supports & NATIVE_PLUGIN_SUPPORTS_PITCHBEND) if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_PITCHBEND)) pData->options |= PLUGIN_OPTION_SEND_PITCHBEND; if (fDescriptor->supports & NATIVE_PLUGIN_SUPPORTS_ALL_SOUND_OFF) if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_ALL_SOUND_OFF)) pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; if (fDescriptor->midiIns > 0) if (isPluginOptionInverseEnabled(options, PLUGIN_OPTION_SKIP_SENDING_NOTES)) pData->options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; if (fDescriptor->supports & NATIVE_PLUGIN_SUPPORTS_PROGRAM_CHANGES) { if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_PROGRAM_CHANGES)) pData->options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; // makes no sense for a plugin to set program changes supported, but it has no midi programs CARLA_SAFE_ASSERT(! hasMidiProgs); } else if (hasMidiProgs) { if (isPluginOptionEnabled(options, PLUGIN_OPTION_MAP_PROGRAM_CHANGES)) pData->options |= PLUGIN_OPTION_MAP_PROGRAM_CHANGES; } return true; } private: NativePluginHandle fHandle; NativePluginHandle fHandle2; NativeHostDescriptor fHost; const NativePluginDescriptor* fDescriptor; bool fIsProcessing; bool fIsOffline; bool fIsUiAvailable; bool fIsUiVisible; volatile bool fNeedsIdle; bool fInlineDisplayNeedsRedraw; int64_t fInlineDisplayLastRedrawTime; CarlaString fLastProjectFilename; CarlaString fLastProjectFolder; float** fAudioAndCvInBuffers; float** fAudioAndCvOutBuffers; uint32_t fMidiEventInCount; uint32_t fMidiEventOutCount; NativeMidiEvent fMidiInEvents[kPluginMaxMidiEvents]; NativeMidiEvent fMidiOutEvents[kPluginMaxMidiEvents]; int32_t fCurMidiProgs[MAX_MIDI_CHANNELS]; uint32_t fCurBufferSize; double fCurSampleRate; NativePluginMidiInData fMidiIn; NativePluginMidiOutData fMidiOut; NativeTimeInfo fTimeInfo; // ------------------------------------------------------------------- #define handlePtr ((CarlaPluginNative*)handle) static uint32_t carla_host_get_buffer_size(NativeHostHandle handle) noexcept { return handlePtr->fCurBufferSize; } static double carla_host_get_sample_rate(NativeHostHandle handle) noexcept { return handlePtr->fCurSampleRate; } static bool carla_host_is_offline(NativeHostHandle handle) noexcept { return handlePtr->fIsOffline; } static const NativeTimeInfo* carla_host_get_time_info(NativeHostHandle handle) noexcept { return handlePtr->handleGetTimeInfo(); } static bool carla_host_write_midi_event(NativeHostHandle handle, const NativeMidiEvent* event) { return handlePtr->handleWriteMidiEvent(event); } static void carla_host_ui_parameter_changed(NativeHostHandle handle, uint32_t index, float value) { handlePtr->handleUiParameterChanged(index, value); } static void carla_host_ui_custom_data_changed(NativeHostHandle handle, const char* key, const char* value) { handlePtr->handleUiCustomDataChanged(key, value); } static void carla_host_ui_closed(NativeHostHandle handle) { handlePtr->handleUiClosed(); } static const char* carla_host_ui_open_file(NativeHostHandle handle, bool isDir, const char* title, const char* filter) { return handlePtr->handleUiOpenFile(isDir, title, filter); } static const char* carla_host_ui_save_file(NativeHostHandle handle, bool isDir, const char* title, const char* filter) { return handlePtr->handleUiSaveFile(isDir, title, filter); } static intptr_t carla_host_dispatcher(NativeHostHandle handle, NativeHostDispatcherOpcode opcode, int32_t index, intptr_t value, void* ptr, float opt) { return handlePtr->handleDispatcher(opcode, index, value, ptr, opt); } #undef handlePtr CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaPluginNative) }; // ----------------------------------------------------------------------- CarlaPluginPtr CarlaPlugin::newNative(const Initializer& init) { carla_debug("CarlaPlugin::newNative({%p, \"%s\", \"%s\", \"%s\", " P_INT64 "})", init.engine, init.filename, init.name, init.label, init.uniqueId); std::shared_ptr plugin(new CarlaPluginNative(init.engine, init.id)); if (! plugin->init(plugin, init.name, init.label, init.options)) return nullptr; return plugin; } // used in CarlaStandalone.cpp const void* carla_render_inline_display_internal(const CarlaPluginPtr& plugin, uint32_t width, uint32_t height); const void* carla_render_inline_display_internal(const CarlaPluginPtr& plugin, uint32_t width, uint32_t height) { const std::shared_ptr& nativePlugin((const std::shared_ptr&)plugin); return nativePlugin->renderInlineDisplay(width, height); } // ----------------------------------------------------------------------- CARLA_BACKEND_END_NAMESPACE Carla-2.4.2/source/backend/plugin/CarlaPluginSFZero.cpp000066400000000000000000000656611420416754300227500ustar00rootroot00000000000000/* * Carla SFZero Plugin * Copyright (C) 2018-2020 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "CarlaPluginInternal.hpp" #include "CarlaBackendUtils.hpp" #include "CarlaEngine.hpp" #include "sfzero/SFZero.h" #include "water/buffers/AudioSampleBuffer.h" #include "water/files/File.h" #include "water/midi/MidiMessage.h" using water::AudioSampleBuffer; using water::File; using water::MidiMessage; using water::String; // ----------------------------------------------------------------------- CARLA_BACKEND_START_NAMESPACE // ------------------------------------------------------------------------------------------------------------------- // Fallback data static const ExternalMidiNote kExternalMidiNoteFallback = { -1, 0, 0 }; static void loadingIdleCallbackFunction(void* ptr) { ((CarlaEngine*)ptr)->callback(true, false, ENGINE_CALLBACK_IDLE, 0, 0, 0, 0, 0.0f, nullptr); } // ------------------------------------------------------------------------------------------------------------------- class CarlaPluginSFZero : public CarlaPlugin { public: CarlaPluginSFZero(CarlaEngine* const engine, const uint id) : CarlaPlugin(engine, id), fSynth(), fNumVoices(0.0f), fLabel(nullptr), fRealName(nullptr) { carla_debug("CarlaPluginSFZero::CarlaPluginSFZero(%p, %i)", engine, id); } ~CarlaPluginSFZero() override { carla_debug("CarlaPluginSFZero::~CarlaPluginSFZero()"); pData->singleMutex.lock(); pData->masterMutex.lock(); if (pData->client != nullptr && pData->client->isActive()) pData->client->deactivate(true); if (pData->active) { deactivate(); pData->active = false; } if (fLabel != nullptr) { delete[] fLabel; fLabel = nullptr; } if (fRealName != nullptr) { delete[] fRealName; fRealName = nullptr; } clearBuffers(); } // ------------------------------------------------------------------- // Information (base) PluginType getType() const noexcept override { return PLUGIN_SFZ; } PluginCategory getCategory() const noexcept override { return PLUGIN_CATEGORY_SYNTH; } // ------------------------------------------------------------------- // Information (count) // nothing // ------------------------------------------------------------------- // Information (current data) // nothing // ------------------------------------------------------------------- // Information (per-plugin data) uint getOptionsAvailable() const noexcept override { uint options = 0x0; options |= PLUGIN_OPTION_SEND_CONTROL_CHANGES; options |= PLUGIN_OPTION_SEND_CHANNEL_PRESSURE; options |= PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH; options |= PLUGIN_OPTION_SEND_PITCHBEND; options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; return options; } float getParameterValue(const uint32_t parameterId) const noexcept override { CARLA_SAFE_ASSERT_RETURN(parameterId == 0, 0.0f); return fNumVoices; } bool getLabel(char* const strBuf) const noexcept override { if (fLabel != nullptr) { std::strncpy(strBuf, fLabel, STR_MAX); return true; } return CarlaPlugin::getLabel(strBuf); } bool getMaker(char* const strBuf) const noexcept override { std::strncpy(strBuf, "SFZero engine", STR_MAX); return true; } bool getCopyright(char* const strBuf) const noexcept override { std::strncpy(strBuf, "ISC", STR_MAX); return true; } bool getRealName(char* const strBuf) const noexcept override { if (fRealName != nullptr) { std::strncpy(strBuf, fRealName, STR_MAX); return true; } return CarlaPlugin::getRealName(strBuf); } bool getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(parameterId == 0, false); std::strncpy(strBuf, "Voice Count", STR_MAX); return true; } // ------------------------------------------------------------------- // Set data (state) // nothing // ------------------------------------------------------------------- // Set data (internal stuff) // nothing // ------------------------------------------------------------------- // Set data (plugin-specific stuff) // nothing // ------------------------------------------------------------------- // Set ui stuff // nothing // ------------------------------------------------------------------- // Plugin state void reload() override { CARLA_SAFE_ASSERT_RETURN(pData->engine != nullptr,); carla_debug("CarlaPluginSFZero::reload() - start"); const EngineProcessMode processMode(pData->engine->getProccessMode()); // Safely disable plugin for reload const ScopedDisabler sd(this); if (pData->active) deactivate(); clearBuffers(); pData->audioOut.createNew(2); pData->param.createNew(1, false); const uint portNameSize(pData->engine->getMaxPortNameSize()); CarlaString portName; // --------------------------------------- // Audio Outputs // out-left portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } portName += "out-left"; portName.truncate(portNameSize); pData->audioOut.ports[0].port = (CarlaEngineAudioPort*)pData->client->addPort(kEnginePortTypeAudio, portName, false, 0); pData->audioOut.ports[0].rindex = 0; // out-right portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } portName += "out-right"; portName.truncate(portNameSize); pData->audioOut.ports[1].port = (CarlaEngineAudioPort*)pData->client->addPort(kEnginePortTypeAudio, portName, false, 1); pData->audioOut.ports[1].rindex = 1; // --------------------------------------- // Event Input portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } portName += "events-in"; portName.truncate(portNameSize); pData->event.portIn = (CarlaEngineEventPort*)pData->client->addPort(kEnginePortTypeEvent, portName, true, 0); // --------------------------------------- // Parameters pData->param.data[0].type = PARAMETER_OUTPUT; pData->param.data[0].hints = PARAMETER_IS_ENABLED | PARAMETER_IS_AUTOMATABLE | PARAMETER_IS_INTEGER; pData->param.data[0].index = 0; pData->param.data[0].rindex = 0; pData->param.ranges[0].min = 0.0f; pData->param.ranges[0].max = 128; pData->param.ranges[0].def = 0.0f; pData->param.ranges[0].step = 1.0f; pData->param.ranges[0].stepSmall = 1.0f; pData->param.ranges[0].stepLarge = 1.0f; // --------------------------------------- // plugin hints pData->hints = 0x0; pData->hints |= PLUGIN_IS_SYNTH; pData->hints |= PLUGIN_CAN_VOLUME; pData->hints |= PLUGIN_CAN_BALANCE; // extra plugin hints pData->extraHints = 0x0; pData->extraHints |= PLUGIN_EXTRA_HINT_HAS_MIDI_IN; bufferSizeChanged(pData->engine->getBufferSize()); reloadPrograms(true); if (pData->active) activate(); carla_debug("CarlaPluginSFZero::reload() - end"); } // ------------------------------------------------------------------- // Plugin processing void process(const float* const* const, float** const audioOut, const float* const*, float**, const uint32_t frames) override { // -------------------------------------------------------------------------------------------------------- // Check if active if (! pData->active) { // disable any output sound for (uint32_t i=0; i < pData->audioOut.count; ++i) carla_zeroFloats(audioOut[i], frames); fNumVoices = 0.0f; return; } // -------------------------------------------------------------------------------------------------------- // Check if needs reset if (pData->needsReset) { fSynth.allNotesOff(0, false); pData->needsReset = false; } // -------------------------------------------------------------------------------------------------------- // Event Input and Processing { // ---------------------------------------------------------------------------------------------------- // Setup audio buffer AudioSampleBuffer audioOutBuffer(audioOut, 2, frames); // ---------------------------------------------------------------------------------------------------- // MIDI Input (External) if (pData->extNotes.mutex.tryLock()) { for (RtLinkedList::Itenerator it = pData->extNotes.data.begin2(); it.valid(); it.next()) { const ExternalMidiNote& note(it.getValue(kExternalMidiNoteFallback)); CARLA_SAFE_ASSERT_CONTINUE(note.channel >= 0 && note.channel < MAX_MIDI_CHANNELS); if (note.velo > 0) fSynth.noteOn(note.channel+1, note.note, static_cast(note.velo)/127.0f); else fSynth.noteOff(note.channel+1, note.note, static_cast(note.velo)/127.0f, true); } pData->extNotes.data.clear(); pData->extNotes.mutex.unlock(); } // End of MIDI Input (External) // ---------------------------------------------------------------------------------------------------- // Event Input (System) #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH bool allNotesOffSent = false; #endif uint32_t timeOffset = 0; for (uint32_t i=0, numEvents=pData->event.portIn->getEventCount(); i < numEvents; ++i) { const EngineEvent& event(pData->event.portIn->getEvent(i)); uint32_t eventTime = event.time; CARLA_SAFE_ASSERT_UINT2_CONTINUE(eventTime < frames, eventTime, frames); if (eventTime < timeOffset) { carla_stderr2("Timing error, eventTime:%u < timeOffset:%u for '%s'", eventTime, timeOffset, pData->name); eventTime = timeOffset; } else if (eventTime > timeOffset) { if (processSingle(audioOutBuffer, eventTime - timeOffset, timeOffset)) timeOffset = eventTime; } // Control change switch (event.type) { case kEngineEventTypeNull: break; case kEngineEventTypeControl: { const EngineControlEvent& ctrlEvent = event.ctrl; switch (ctrlEvent.type) { case kEngineControlEventTypeNull: break; case kEngineControlEventTypeParameter: { float value; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // Control backend stuff if (event.channel == pData->ctrlChannel) { if (MIDI_IS_CONTROL_BREATH_CONTROLLER(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_DRYWET) != 0) { value = ctrlEvent.normalizedValue; setDryWetRT(value, true); } if (MIDI_IS_CONTROL_CHANNEL_VOLUME(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_VOLUME) != 0) { value = ctrlEvent.normalizedValue*127.0f/100.0f; setVolumeRT(value, true); } if (MIDI_IS_CONTROL_BALANCE(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_BALANCE) != 0) { float left, right; value = ctrlEvent.normalizedValue/0.5f - 1.0f; if (value < 0.0f) { left = -1.0f; right = (value*2.0f)+1.0f; } else if (value > 0.0f) { left = (value*2.0f)-1.0f; right = 1.0f; } else { left = -1.0f; right = 1.0f; } setBalanceLeftRT(left, true); setBalanceRightRT(right, true); } } #endif // Control plugin parameters for (uint32_t k=0; k < pData->param.count; ++k) { if (pData->param.data[k].midiChannel != event.channel) continue; if (pData->param.data[k].mappedControlIndex != ctrlEvent.param) continue; if (pData->param.data[k].hints != PARAMETER_INPUT) continue; if ((pData->param.data[k].hints & PARAMETER_IS_AUTOMATABLE) == 0) continue; value = pData->param.getFinalUnnormalizedValue(k, ctrlEvent.normalizedValue); setParameterValueRT(k, value, true); } if ((pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) != 0 && ctrlEvent.param < MAX_MIDI_VALUE) { fSynth.handleController(event.channel+1, ctrlEvent.param, int(ctrlEvent.normalizedValue*127.0f)); } break; } case kEngineControlEventTypeMidiBank: case kEngineControlEventTypeMidiProgram: case kEngineControlEventTypeAllSoundOff: break; case kEngineControlEventTypeAllNotesOff: if (pData->options & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) { #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (event.channel == pData->ctrlChannel && ! allNotesOffSent) { allNotesOffSent = true; postponeRtAllNotesOff(); } #endif fSynth.allNotesOff(event.channel+1, true); } break; } break; } case kEngineEventTypeMidi: { const EngineMidiEvent& midiEvent(event.midi); const uint8_t* const midiData(midiEvent.size > EngineMidiEvent::kDataSize ? midiEvent.dataExt : midiEvent.data); uint8_t status = uint8_t(MIDI_GET_STATUS_FROM_DATA(midiData)); if ((status == MIDI_STATUS_NOTE_OFF || status == MIDI_STATUS_NOTE_ON) && (pData->options & PLUGIN_OPTION_SKIP_SENDING_NOTES)) continue; if (status == MIDI_STATUS_CHANNEL_PRESSURE && (pData->options & PLUGIN_OPTION_SEND_CHANNEL_PRESSURE) == 0) continue; if (status == MIDI_STATUS_CONTROL_CHANGE && (pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) == 0) continue; if (status == MIDI_STATUS_POLYPHONIC_AFTERTOUCH && (pData->options & PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH) == 0) continue; if (status == MIDI_STATUS_PITCH_WHEEL_CONTROL && (pData->options & PLUGIN_OPTION_SEND_PITCHBEND) == 0) continue; // Fix bad note-off if (status == MIDI_STATUS_NOTE_ON && midiData[2] == 0) status = MIDI_STATUS_NOTE_OFF; // put back channel in data uint8_t midiData2[midiEvent.size]; midiData2[0] = uint8_t(status | (event.channel & MIDI_CHANNEL_BIT)); std::memcpy(midiData2+1, midiData+1, static_cast(midiEvent.size-1)); const MidiMessage midiMessage(midiData2, static_cast(midiEvent.size), 0.0); fSynth.handleMidiEvent(midiMessage); if (status == MIDI_STATUS_NOTE_ON) { pData->postponeNoteOnRtEvent(true, event.channel, midiData[1], midiData[2]); } else if (status == MIDI_STATUS_NOTE_OFF) { pData->postponeNoteOffRtEvent(true, event.channel, midiData[1]); } } break; } } pData->postRtEvents.trySplice(); if (frames > timeOffset) processSingle(audioOutBuffer, frames - timeOffset, timeOffset); } // End of Event Input and Processing // -------------------------------------------------------------------------------------------------------- // Parameter outputs fNumVoices = static_cast(fSynth.numVoicesUsed()); } bool processSingle(AudioSampleBuffer& audioOutBuffer, const uint32_t frames, const uint32_t timeOffset) { CARLA_SAFE_ASSERT_RETURN(frames > 0, false); // -------------------------------------------------------------------------------------------------------- // Try lock, silence otherwise #ifndef STOAT_TEST_BUILD if (pData->engine->isOffline()) { pData->singleMutex.lock(); } else #endif if (! pData->singleMutex.tryLock()) { audioOutBuffer.clear(timeOffset, frames); return false; } // -------------------------------------------------------------------------------------------------------- // Run plugin fSynth.renderVoices(audioOutBuffer, static_cast(timeOffset), static_cast(frames)); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // -------------------------------------------------------------------------------------------------------- // Post-processing (dry/wet, volume and balance) { const bool doVolume = carla_isNotEqual(pData->postProc.volume, 1.0f); //const bool doBalance = carla_isNotEqual(pData->postProc.balanceLeft, -1.0f) || carla_isNotEqual(pData->postProc.balanceRight, 1.0f); float* outBufferL = audioOutBuffer.getWritePointer(0, timeOffset); float* outBufferR = audioOutBuffer.getWritePointer(1, timeOffset); #if 0 if (doBalance) { float oldBufLeft[frames]; // there was a loop here { if (i % 2 == 0) carla_copyFloats(oldBufLeft, outBuffer[i], frames); float balRangeL = (pData->postProc.balanceLeft + 1.0f)/2.0f; float balRangeR = (pData->postProc.balanceRight + 1.0f)/2.0f; for (uint32_t k=0; k < frames; ++k) { if (i % 2 == 0) { // left outBuffer[i][k] = oldBufLeft[k] * (1.0f - balRangeL); outBuffer[i][k] += outBuffer[i+1][k] * (1.0f - balRangeR); } else { // right outBuffer[i][k] = outBuffer[i][k] * balRangeR; outBuffer[i][k] += oldBufLeft[k] * balRangeL; } } } } #endif if (doVolume) { const float volume = pData->postProc.volume; for (uint32_t k=0; k < frames; ++k) { *outBufferL++ *= volume; *outBufferR++ *= volume; } } } // End of Post-processing #endif // -------------------------------------------------------------------------------------------------------- pData->singleMutex.unlock(); return true; } void sampleRateChanged(const double newSampleRate) override { fSynth.setCurrentPlaybackSampleRate(newSampleRate); } // ------------------------------------------------------------------- // Plugin buffers // nothing // ------------------------------------------------------------------- bool init(const CarlaPluginPtr plugin, const char* const filename, const char* const name, const char* const label, const uint options) { CARLA_SAFE_ASSERT_RETURN(pData->engine != nullptr, false); // --------------------------------------------------------------- // first checks if (pData->client != nullptr) { pData->engine->setLastError("Plugin client is already registered"); return false; } if (filename == nullptr || filename[0] == '\0') { pData->engine->setLastError("null filename"); return false; } for (int i = 128; --i >=0;) fSynth.addVoice(new sfzero::Voice()); // --------------------------------------------------------------- // Init SFZero stuff fSynth.setCurrentPlaybackSampleRate(pData->engine->getSampleRate()); File file(filename); sfzero::Sound* const sound = new sfzero::Sound(file); sfzero::Sound::LoadingIdleCallback cb = { loadingIdleCallbackFunction, pData->engine, }; sound->loadRegions(); sound->loadSamples(cb); if (fSynth.addSound(sound) == nullptr) { pData->engine->setLastError("Failed to allocate SFZ sounds in memory"); return false; } sound->dumpToConsole(); // --------------------------------------------------------------- const String basename(File(filename).getFileNameWithoutExtension()); CarlaString label2(label != nullptr ? label : basename.toRawUTF8()); fLabel = label2.dup(); fRealName = carla_strdup(basename.toRawUTF8()); pData->filename = carla_strdup(filename); if (name != nullptr && name[0] != '\0') pData->name = pData->engine->getUniquePluginName(name); else if (fRealName[0] != '\0') pData->name = pData->engine->getUniquePluginName(fRealName); else pData->name = pData->engine->getUniquePluginName(fLabel); // --------------------------------------------------------------- // register client pData->client = pData->engine->addClient(plugin); if (pData->client == nullptr || ! pData->client->isOk()) { pData->engine->setLastError("Failed to register plugin client"); return false; } // --------------------------------------------------------------- // set options pData->options = 0x0; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_CONTROL_CHANGES)) pData->options |= PLUGIN_OPTION_SEND_CONTROL_CHANGES; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_CHANNEL_PRESSURE)) pData->options |= PLUGIN_OPTION_SEND_CHANNEL_PRESSURE; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH)) pData->options |= PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_PITCHBEND)) pData->options |= PLUGIN_OPTION_SEND_PITCHBEND; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_ALL_SOUND_OFF)) pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; if (isPluginOptionInverseEnabled(options, PLUGIN_OPTION_SKIP_SENDING_NOTES)) pData->options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; return true; } // ------------------------------------------------------------------- private: sfzero::Synth fSynth; float fNumVoices; const char* fLabel; const char* fRealName; CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaPluginSFZero) }; // ------------------------------------------------------------------------------------------------------------------- CarlaPluginPtr CarlaPlugin::newSFZero(const Initializer& init) { carla_debug("CarlaPluginSFZero::newSFZero({%p, \"%s\", \"%s\", \"%s\", " P_INT64 "})", init.engine, init.filename, init.name, init.label, init.uniqueId); // ------------------------------------------------------------------- // Check if file exists if (! File(init.filename).existsAsFile()) { init.engine->setLastError("Requested file is not valid or does not exist"); return nullptr; } std::shared_ptr plugin(new CarlaPluginSFZero(init.engine, init.id)); if (! plugin->init(plugin, init.filename, init.name, init.label, init.options)) return nullptr; return plugin; } // ------------------------------------------------------------------------------------------------------------------- CARLA_BACKEND_END_NAMESPACE Carla-2.4.2/source/backend/plugin/CarlaPluginVST2.cpp000066400000000000000000003160421420416754300223260ustar00rootroot00000000000000/* * Carla VST Plugin * Copyright (C) 2011-2021 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "CarlaPluginInternal.hpp" #include "CarlaEngine.hpp" #include "AppConfig.h" #if defined(USING_JUCE) && JUCE_PLUGINHOST_VST # define USE_JUCE_FOR_VST2 #endif #include "CarlaBackendUtils.hpp" #include "CarlaMathUtils.hpp" #include "CarlaProcessUtils.hpp" #include "CarlaScopeUtils.hpp" #include "CarlaVst2Utils.hpp" #include "CarlaPluginUI.hpp" #ifdef CARLA_OS_MAC # import #endif #include #include "water/memory/ByteOrder.h" #undef VST_FORCE_DEPRECATED #define VST_FORCE_DEPRECATED 0 #undef kEffectMagic #define kEffectMagic (CCONST( 'V', 's', 't', 'P' )) using water::ByteOrder; CARLA_BACKEND_START_NAMESPACE // ----------------------------------------------------- const uint PLUGIN_CAN_PROCESS_REPLACING = 0x1000; const uint PLUGIN_HAS_COCKOS_EXTENSIONS = 0x2000; const uint PLUGIN_USES_OLD_VSTSDK = 0x4000; const uint PLUGIN_WANTS_MIDI_INPUT = 0x8000; static const int32_t kVstMidiEventSize = static_cast(sizeof(VstMidiEvent)); #ifdef PTW32_DLLPORT static const pthread_t kNullThread = {nullptr, 0}; #else static const pthread_t kNullThread = 0; #endif // -------------------------------------------------------------------------------------------------------------------- class CarlaPluginVST2 : public CarlaPlugin, private CarlaPluginUI::Callback { public: CarlaPluginVST2(CarlaEngine* const engine, const uint id) : CarlaPlugin(engine, id), fUnique1(1), fEffect(nullptr), fMidiEventCount(0), fTimeInfo(), fNeedIdle(false), fLastChunk(nullptr), fIsInitializing(true), fIsProcessing(false), fChangingValuesThread(kNullThread), fIdleThread(kNullThread), fMainThread(pthread_self()), fProcThread(kNullThread), #ifdef CARLA_OS_MAC fMacBundleRef(nullptr), fMacBundleRefNum(0), #endif fFirstActive(true), fBufferSize(engine->getBufferSize()), fAudioOutBuffers(nullptr), fLastTimeInfo(), fEvents(), fUI(), fUnique2(2) { carla_debug("CarlaPluginVST2::CarlaPluginVST2(%p, %i)", engine, id); carla_zeroStructs(fMidiEvents, kPluginMaxMidiEvents*2); carla_zeroStruct(fTimeInfo); for (ushort i=0; i < kPluginMaxMidiEvents*2; ++i) fEvents.data[i] = (VstEvent*)&fMidiEvents[i]; // make plugin valid srand(id); fUnique1 = fUnique2 = rand(); } ~CarlaPluginVST2() override { carla_debug("CarlaPluginVST2::~CarlaPluginVST2()"); // close UI if (pData->hints & PLUGIN_HAS_CUSTOM_UI) { if (! fUI.isEmbed) showCustomUI(false); if (fUI.isOpen) { fUI.isOpen = false; dispatcher(effEditClose); } } pData->singleMutex.lock(); pData->masterMutex.lock(); if (pData->client != nullptr && pData->client->isActive()) pData->client->deactivate(true); CARLA_ASSERT(! fIsProcessing); if (pData->active) { deactivate(); pData->active = false; } if (fEffect != nullptr) { dispatcher(effClose); fEffect = nullptr; } // make plugin invalid fUnique2 += 1; if (fLastChunk != nullptr) { std::free(fLastChunk); fLastChunk = nullptr; } clearBuffers(); #ifdef CARLA_OS_MAC if (fMacBundleRef != nullptr) { CFBundleCloseBundleResourceMap(fMacBundleRef, fMacBundleRefNum); if (CFGetRetainCount(fMacBundleRef) == 1) CFBundleUnloadExecutable(fMacBundleRef); if (CFGetRetainCount(fMacBundleRef) > 0) CFRelease(fMacBundleRef); fMacBundleRef = nullptr; } #endif } // ------------------------------------------------------------------- // Information (base) PluginType getType() const noexcept override { return PLUGIN_VST2; } PluginCategory getCategory() const noexcept override { CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr, CarlaPlugin::getCategory()); const intptr_t category = dispatcher(effGetPlugCategory); switch (category) { case kPlugCategSynth: return PLUGIN_CATEGORY_SYNTH; case kPlugCategAnalysis: return PLUGIN_CATEGORY_UTILITY; case kPlugCategMastering: return PLUGIN_CATEGORY_DYNAMICS; case kPlugCategRoomFx: return PLUGIN_CATEGORY_DELAY; case kPlugCategRestoration: return PLUGIN_CATEGORY_UTILITY; case kPlugCategGenerator: return PLUGIN_CATEGORY_SYNTH; } if (fEffect->flags & effFlagsIsSynth) return PLUGIN_CATEGORY_SYNTH; return CarlaPlugin::getCategory(); } int64_t getUniqueId() const noexcept override { CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr, 0); return static_cast(fEffect->uniqueID); } // ------------------------------------------------------------------- // Information (count) // nothing // ------------------------------------------------------------------- // Information (current data) std::size_t getChunkData(void** const dataPtr) noexcept override { CARLA_SAFE_ASSERT_RETURN(pData->options & PLUGIN_OPTION_USE_CHUNKS, 0); CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr, 0); CARLA_SAFE_ASSERT_RETURN(dataPtr != nullptr, 0); *dataPtr = nullptr; try { const intptr_t ret = dispatcher(effGetChunk, 0 /* bank */, 0, dataPtr); CARLA_SAFE_ASSERT_RETURN(ret >= 0, 0); return static_cast(ret); } CARLA_SAFE_EXCEPTION_RETURN("CarlaPluginVST2::getChunkData", 0); } // ------------------------------------------------------------------- // Information (per-plugin data) uint getOptionsAvailable() const noexcept override { CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr, 0); uint options = 0x0; // can't disable fixed buffers if using latency or MIDI output if (pData->latency.frames == 0 && ! hasMidiOutput()) options |= PLUGIN_OPTION_FIXED_BUFFERS; if (fEffect->numPrograms > 1) options |= PLUGIN_OPTION_MAP_PROGRAM_CHANGES; if (fEffect->flags & effFlagsProgramChunks) options |= PLUGIN_OPTION_USE_CHUNKS; if (hasMidiInput()) { options |= PLUGIN_OPTION_SEND_CONTROL_CHANGES; options |= PLUGIN_OPTION_SEND_CHANNEL_PRESSURE; options |= PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH; options |= PLUGIN_OPTION_SEND_PITCHBEND; options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; } return options; } float getParameterValue(const uint32_t parameterId) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr, 0.0f); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, 0.0f); return fEffect->getParameter(fEffect, static_cast(parameterId)); } bool getLabel(char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr, false); strBuf[0] = '\0'; dispatcher(effGetProductString, 0, 0, strBuf); return true; } bool getMaker(char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr, false); strBuf[0] = '\0'; dispatcher(effGetVendorString, 0, 0, strBuf); return true; } bool getCopyright(char* const strBuf) const noexcept override { return getMaker(strBuf); } bool getRealName(char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr, false); strBuf[0] = '\0'; dispatcher(effGetEffectName, 0, 0, strBuf); return true; } bool getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr, false); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false); strBuf[0] = '\0'; VstParameterProperties prop; carla_zeroStruct(prop); if (dispatcher(effGetParameterProperties, static_cast(parameterId), 0, &prop) == 1 && prop.label[0] != '\0') { std::strncpy(strBuf, prop.label, VestigeMaxLabelLen); strBuf[VestigeMaxLabelLen] = '\0'; return true; } strBuf[0] = '\0'; dispatcher(effGetParamName, static_cast(parameterId), 0, strBuf); return true; } bool getParameterText(const uint32_t parameterId, char* const strBuf) noexcept override { CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr, false); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false); strBuf[0] = '\0'; dispatcher(effGetParamDisplay, static_cast(parameterId), 0, strBuf); if (strBuf[0] == '\0') std::snprintf(strBuf, STR_MAX, "%.12g", static_cast(getParameterValue(parameterId))); return true; } bool getParameterUnit(const uint32_t parameterId, char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr, false); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false); strBuf[0] = '\0'; dispatcher(effGetParamLabel, static_cast(parameterId), 0, strBuf); return true; } bool getParameterGroupName(const uint32_t parameterId, char* const strBuf) const noexcept override { CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr, false); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false); strBuf[0] = '\0'; VstParameterProperties prop; carla_zeroStruct(prop); if (dispatcher(effGetParameterProperties, static_cast(parameterId), 0, &prop) == 1 && prop.category != 0 && prop.categoryLabel[0] != '\0') { std::snprintf(strBuf, STR_MAX, "%d:%s", prop.category, prop.categoryLabel); return true; } return false; } // ------------------------------------------------------------------- // Set data (state) // nothing // ------------------------------------------------------------------- // Set data (internal stuff) void setName(const char* const newName) override { CarlaPlugin::setName(newName); if (fUI.window == nullptr || pData->uiTitle.isNotEmpty()) return; CarlaString uiTitle(pData->name); uiTitle += " (GUI)"; fUI.window->setTitle(uiTitle.buffer()); } // ------------------------------------------------------------------- // Set data (plugin-specific stuff) void setParameterValue(const uint32_t parameterId, const float value, const bool sendGui, const bool sendOsc, const bool sendCallback) noexcept override { CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr,); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,); const float fixedValue(pData->param.getFixedValue(parameterId, value)); fEffect->setParameter(fEffect, static_cast(parameterId), fixedValue); CarlaPlugin::setParameterValue(parameterId, fixedValue, sendGui, sendOsc, sendCallback); } void setParameterValueRT(const uint32_t parameterId, const float value, const bool sendCallbackLater) noexcept override { CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr,); CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,); const float fixedValue(pData->param.getFixedValue(parameterId, value)); fEffect->setParameter(fEffect, static_cast(parameterId), fixedValue); CarlaPlugin::setParameterValueRT(parameterId, fixedValue, sendCallbackLater); } void setChunkData(const void* const data, const std::size_t dataSize) override { CARLA_SAFE_ASSERT_RETURN(pData->options & PLUGIN_OPTION_USE_CHUNKS,); CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr,); CARLA_SAFE_ASSERT_RETURN(data != nullptr,); CARLA_SAFE_ASSERT_RETURN(dataSize > 0,); if (loadJuceSaveFormat(data, dataSize)) return; if (fLastChunk != nullptr) std::free(fLastChunk); fLastChunk = std::malloc(dataSize); CARLA_SAFE_ASSERT_RETURN(fLastChunk != nullptr,); std::memcpy(fLastChunk, data, dataSize); { const ScopedSingleProcessLocker spl(this, true); const CarlaScopedValueSetter svs(fChangingValuesThread, pthread_self(), kNullThread); dispatcher(effSetChunk, 0 /* bank */, static_cast(dataSize), fLastChunk); } // simulate an updateDisplay callback handleAudioMasterCallback(audioMasterUpdateDisplay, 0, 0, nullptr, 0.0f); pData->updateParameterValues(this, true, true, false); } void setProgram(const int32_t index, const bool sendGui, const bool sendOsc, const bool sendCallback, const bool doingInit) noexcept override { CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr,); CARLA_SAFE_ASSERT_RETURN(index >= -1 && index < static_cast(pData->prog.count),); CARLA_SAFE_ASSERT_RETURN(sendGui || sendOsc || sendCallback || doingInit,); if (index >= 0) { try { dispatcher(effBeginSetProgram); } CARLA_SAFE_EXCEPTION_RETURN("effBeginSetProgram",); { const ScopedSingleProcessLocker spl(this, (sendGui || sendOsc || sendCallback)); const CarlaScopedValueSetter svs(fChangingValuesThread, pthread_self(), kNullThread); try { dispatcher(effSetProgram, 0, index); } CARLA_SAFE_EXCEPTION("effSetProgram"); } try { dispatcher(effEndSetProgram); } CARLA_SAFE_EXCEPTION("effEndSetProgram"); } CarlaPlugin::setProgram(index, sendGui, sendOsc, sendCallback, doingInit); } void setProgramRT(const uint32_t uindex, const bool sendCallbackLater) noexcept override { CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr,); CARLA_SAFE_ASSERT_RETURN(uindex < pData->prog.count,); try { dispatcher(effBeginSetProgram); } CARLA_SAFE_EXCEPTION_RETURN("effBeginSetProgram",); try { dispatcher(effSetProgram, 0, static_cast(uindex)); } CARLA_SAFE_EXCEPTION("effSetProgram"); try { dispatcher(effEndSetProgram); } CARLA_SAFE_EXCEPTION("effEndSetProgram"); CarlaPlugin::setProgramRT(uindex, sendCallbackLater); } // ------------------------------------------------------------------- // Set ui stuff void setCustomUITitle(const char* const title) noexcept override { if (fUI.window != nullptr) { try { fUI.window->setTitle(title); } CARLA_SAFE_EXCEPTION("set custom ui title"); } CarlaPlugin::setCustomUITitle(title); } void showCustomUI(const bool yesNo) override { if (fUI.isVisible == yesNo) return; if (yesNo) { CarlaString uiTitle; if (pData->uiTitle.isNotEmpty()) { uiTitle = pData->uiTitle; } else { uiTitle = pData->name; uiTitle += " (GUI)"; } intptr_t value = 0; if (fUI.window == nullptr) { const char* msg = nullptr; const EngineOptions& opts(pData->engine->getOptions()); #if defined(CARLA_OS_MAC) fUI.window = CarlaPluginUI::newCocoa(this, opts.frontendWinId, opts.pluginsAreStandalone, false); #elif defined(CARLA_OS_WIN) fUI.window = CarlaPluginUI::newWindows(this, opts.frontendWinId, opts.pluginsAreStandalone, false); #elif defined(HAVE_X11) fUI.window = CarlaPluginUI::newX11(this, opts.frontendWinId, opts.pluginsAreStandalone, false, false); #else msg = "Unsupported UI type"; #endif if (fUI.window == nullptr) return pData->engine->callback(true, true, ENGINE_CALLBACK_UI_STATE_CHANGED, pData->id, -1, 0, 0, 0.0f, msg); fUI.window->setTitle(uiTitle.buffer()); #ifdef HAVE_X11 value = (intptr_t)fUI.window->getDisplay(); #endif #ifndef CARLA_OS_MAC // inform plugin of what UI scale we use dispatcher(effVendorSpecific, CCONST('P', 'r', 'e', 'S'), CCONST('A', 'e', 'C', 's'), nullptr, opts.uiScale); #endif // NOTE: there are far too many broken VST2 plugins, don't bother checking return value if (dispatcher(effEditOpen, 0, value, fUI.window->getPtr()) != 0 || true) { fUI.isOpen = true; ERect* vstRect = nullptr; dispatcher(effEditGetRect, 0, 0, &vstRect); if (vstRect != nullptr) { const int width(vstRect->right - vstRect->left); const int height(vstRect->bottom - vstRect->top); CARLA_SAFE_ASSERT_INT2(width > 1 && height > 1, width, height); if (width > 1 && height > 1) fUI.window->setSize(static_cast(width), static_cast(height), true); } } else { delete fUI.window; fUI.window = nullptr; carla_stderr2("Plugin refused to open its own UI"); return pData->engine->callback(true, true, ENGINE_CALLBACK_UI_STATE_CHANGED, pData->id, -1, 0, 0, 0.0f, "Plugin refused to open its own UI"); } } fUI.window->show(); fUI.isVisible = true; } else { fUI.isVisible = false; CARLA_SAFE_ASSERT_RETURN(fUI.window != nullptr,); fUI.window->hide(); } } void* embedCustomUI(void* const ptr) override { CARLA_SAFE_ASSERT_RETURN(fUI.window == nullptr, nullptr); fUI.isEmbed = true; fUI.isOpen = true; fUI.isVisible = true; #ifndef CARLA_OS_MAC // inform plugin of what UI scale we use dispatcher(effVendorSpecific, CCONST('P', 'r', 'e', 'S'), CCONST('A', 'e', 'C', 's'), nullptr, pData->engine->getOptions().uiScale); #endif dispatcher(effEditOpen, 0, 0, ptr); ERect* vstRect = nullptr; dispatcher(effEditGetRect, 0, 0, &vstRect); if (vstRect != nullptr) { const int width = vstRect->right - vstRect->left; const int height = vstRect->bottom - vstRect->top; CARLA_SAFE_ASSERT_INT2(width > 1 && height > 1, width, height); if (width > 1 && height > 1) pData->engine->callback(true, true, ENGINE_CALLBACK_EMBED_UI_RESIZED, pData->id, width, height, 0, 0.0f, nullptr); } return nullptr; } void idle() override { if (fNeedIdle) { const CarlaScopedValueSetter svs(fIdleThread, pthread_self(), kNullThread); dispatcher(effIdle); } CarlaPlugin::idle(); } void uiIdle() override { if (fUI.window != nullptr) { fUI.window->idle(); if (fUI.isVisible) dispatcher(effEditIdle); } else if (fUI.isEmbed) { dispatcher(effEditIdle); } CarlaPlugin::uiIdle(); } // ------------------------------------------------------------------- // Plugin state void reload() override { CARLA_SAFE_ASSERT_RETURN(pData->engine != nullptr,); CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr,); carla_debug("CarlaPluginVST2::reload() - start"); const EngineProcessMode processMode(pData->engine->getProccessMode()); // Safely disable plugin for reload const ScopedDisabler sd(this); const CarlaScopedValueSetter svs(fIsInitializing, fIsInitializing, false); if (pData->active) deactivate(); clearBuffers(); uint32_t aIns, aOuts, mIns, mOuts, params; bool needsCtrlIn, needsCtrlOut; needsCtrlIn = needsCtrlOut = false; aIns = (fEffect->numInputs > 0) ? static_cast(fEffect->numInputs) : 0; aOuts = (fEffect->numOutputs > 0) ? static_cast(fEffect->numOutputs) : 0; params = (fEffect->numParams > 0) ? static_cast(fEffect->numParams) : 0; if (hasMidiInput()) { mIns = 1; needsCtrlIn = true; } else mIns = 0; if (hasMidiOutput()) { mOuts = 1; needsCtrlOut = true; } else mOuts = 0; if (aIns > 0) { pData->audioIn.createNew(aIns); } if (aOuts > 0) { pData->audioOut.createNew(aOuts); fAudioOutBuffers = new float*[aOuts]; needsCtrlIn = true; for (uint32_t i=0; i < aOuts; ++i) fAudioOutBuffers[i] = nullptr; } if (params > 0) { pData->param.createNew(params, false); needsCtrlIn = true; } const uint portNameSize(pData->engine->getMaxPortNameSize()); CarlaString portName; // Audio Ins for (uint32_t j=0; j < aIns; ++j) { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } if (aIns > 1) { portName += "input_"; portName += CarlaString(j+1); } else portName += "input"; portName.truncate(portNameSize); pData->audioIn.ports[j].port = (CarlaEngineAudioPort*)pData->client->addPort(kEnginePortTypeAudio, portName, true, j); pData->audioIn.ports[j].rindex = j; } // Audio Outs for (uint32_t j=0; j < aOuts; ++j) { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } if (aOuts > 1) { portName += "output_"; portName += CarlaString(j+1); } else portName += "output"; portName.truncate(portNameSize); pData->audioOut.ports[j].port = (CarlaEngineAudioPort*)pData->client->addPort(kEnginePortTypeAudio, portName, false, j); pData->audioOut.ports[j].rindex = j; } for (uint32_t j=0; j < params; ++j) { const int32_t ij = static_cast(j); pData->param.data[j].type = PARAMETER_INPUT; pData->param.data[j].index = ij; pData->param.data[j].rindex = ij; float min, max, def, step, stepSmall, stepLarge; VstParameterProperties prop; carla_zeroStruct(prop); if (pData->hints & PLUGIN_HAS_COCKOS_EXTENSIONS) { double vrange[2] = { 0.0, 1.0 }; bool isInteger = false; if (static_cast(dispatcher(effVendorSpecific, static_cast(0xdeadbef0), ij, vrange)) >= 0xbeef) { min = static_cast(vrange[0]); max = static_cast(vrange[1]); if (min > max) { carla_stderr2("WARNING - Broken plugin parameter min > max (with cockos extensions)"); min = max - 0.1f; } else if (carla_isEqual(min, max)) { carla_stderr2("WARNING - Broken plugin parameter min == max (with cockos extensions)"); max = min + 0.1f; } // only use values as integer if we have a proper range if (max - min >= 1.0f) isInteger = dispatcher(effVendorSpecific, kVstParameterUsesIntStep, ij) >= 0xbeef; } else { min = 0.0f; max = 1.0f; } if (isInteger) { step = 1.0f; stepSmall = 1.0f; stepLarge = 10.0f; } else { const float range = max - min; step = range/100.0f; stepSmall = range/1000.0f; stepLarge = range/10.0f; } } else if (dispatcher(effGetParameterProperties, ij, 0, &prop) == 1) { #if 0 if (prop.flags & kVstParameterUsesIntegerMinMax) { min = static_cast(prop.minInteger); max = static_cast(prop.maxInteger); if (min > max) { carla_stderr2("WARNING - Broken plugin parameter min > max"); min = max - 0.1f; } else if (carla_isEqual(min, max)) { carla_stderr2("WARNING - Broken plugin parameter min == max"); max = min + 0.1f; } } else #endif { min = 0.0f; max = 1.0f; } /**/ if (prop.flags & kVstParameterIsSwitch) { step = max - min; stepSmall = step; stepLarge = step; pData->param.data[j].hints |= PARAMETER_IS_BOOLEAN; } else if (prop.flags & kVstParameterUsesIntStep) { step = static_cast(prop.stepInteger); stepSmall = static_cast(prop.stepInteger)/10.0f; stepLarge = static_cast(prop.largeStepInteger); } else if (prop.flags & kVstParameterUsesFloatStep) { step = prop.stepFloat; stepSmall = prop.smallStepFloat; stepLarge = prop.largeStepFloat; } else { const float range = max - min; step = range/100.0f; stepSmall = range/1000.0f; stepLarge = range/10.0f; } if (prop.flags & kVstParameterCanRamp) pData->param.data[j].hints |= PARAMETER_IS_LOGARITHMIC; } else { min = 0.0f; max = 1.0f; step = 0.001f; stepSmall = 0.0001f; stepLarge = 0.1f; } pData->param.data[j].hints |= PARAMETER_IS_ENABLED; pData->param.data[j].hints |= PARAMETER_USES_CUSTOM_TEXT; if ((pData->hints & PLUGIN_USES_OLD_VSTSDK) != 0 || dispatcher(effCanBeAutomated, ij) == 1) { pData->param.data[j].hints |= PARAMETER_IS_AUTOMATABLE; if ((prop.flags & (kVstParameterIsSwitch|kVstParameterUsesIntStep)) == 0x0) pData->param.data[j].hints |= PARAMETER_CAN_BE_CV_CONTROLLED; } // no such thing as VST default parameters def = fEffect->getParameter(fEffect, ij); if (def < min) def = min; else if (def > max) def = max; pData->param.ranges[j].min = min; pData->param.ranges[j].max = max; pData->param.ranges[j].def = def; pData->param.ranges[j].step = step; pData->param.ranges[j].stepSmall = stepSmall; pData->param.ranges[j].stepLarge = stepLarge; } if (needsCtrlIn) { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } portName += "events-in"; portName.truncate(portNameSize); pData->event.portIn = (CarlaEngineEventPort*)pData->client->addPort(kEnginePortTypeEvent, portName, true, 0); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH pData->event.cvSourcePorts = pData->client->createCVSourcePorts(); #endif } if (needsCtrlOut) { portName.clear(); if (processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT) { portName = pData->name; portName += ":"; } portName += "events-out"; portName.truncate(portNameSize); pData->event.portOut = (CarlaEngineEventPort*)pData->client->addPort(kEnginePortTypeEvent, portName, false, 0); } // plugin hints const intptr_t vstCategory = dispatcher(effGetPlugCategory); pData->hints = 0x0; if (vstCategory == kPlugCategSynth || vstCategory == kPlugCategGenerator) pData->hints |= PLUGIN_IS_SYNTH; if (fEffect->flags & effFlagsHasEditor) { #if defined(CARLA_OS_MAC) && ! defined(CARLA_OS_64BIT) if (static_cast(dispatcher(effCanDo, 0, 0, const_cast("hasCockosViewAsConfig")) & 0xffff0000) == 0xbeef0000) #endif { pData->hints |= PLUGIN_HAS_CUSTOM_UI; pData->hints |= PLUGIN_HAS_CUSTOM_EMBED_UI; } pData->hints |= PLUGIN_NEEDS_UI_MAIN_THREAD; } if (dispatcher(effGetVstVersion) < kVstVersion) pData->hints |= PLUGIN_USES_OLD_VSTSDK; if ((fEffect->flags & effFlagsCanReplacing) != 0 && fEffect->processReplacing != fEffect->process) pData->hints |= PLUGIN_CAN_PROCESS_REPLACING; if (static_cast(dispatcher(effCanDo, 0, 0, const_cast("hasCockosExtensions"))) == 0xbeef0000) pData->hints |= PLUGIN_HAS_COCKOS_EXTENSIONS; if (aOuts > 0 && (aIns == aOuts || aIns == 1)) pData->hints |= PLUGIN_CAN_DRYWET; if (aOuts > 0) pData->hints |= PLUGIN_CAN_VOLUME; if (aOuts >= 2 && aOuts % 2 == 0) pData->hints |= PLUGIN_CAN_BALANCE; // extra plugin hints pData->extraHints = 0x0; if (mIns > 0) pData->extraHints |= PLUGIN_EXTRA_HINT_HAS_MIDI_IN; if (mOuts > 0) pData->extraHints |= PLUGIN_EXTRA_HINT_HAS_MIDI_OUT; // dummy pre-start to get latency and wantEvents() on old plugins { activate(); deactivate(); } // check initial latency const uint32_t latency = (fEffect->initialDelay > 0) ? static_cast(fEffect->initialDelay) : 0; if (latency != 0) { pData->client->setLatency(latency); #ifndef BUILD_BRIDGE pData->latency.recreateBuffers(std::max(aIns, aOuts), latency); #endif } bufferSizeChanged(pData->engine->getBufferSize()); reloadPrograms(true); if (pData->active) activate(); carla_debug("CarlaPluginVST2::reload() - end"); } void reloadPrograms(const bool doInit) override { carla_debug("CarlaPluginVST2::reloadPrograms(%s)", bool2str(doInit)); const uint32_t oldCount = pData->prog.count; const int32_t current = pData->prog.current; // Delete old programs pData->prog.clear(); // Query new programs uint32_t newCount = (fEffect->numPrograms > 0) ? static_cast(fEffect->numPrograms) : 0; if (newCount > 0) { pData->prog.createNew(newCount); // Update names for (int32_t i=0; i < fEffect->numPrograms; ++i) { char strBuf[STR_MAX+1] = { '\0' }; if (dispatcher(effGetProgramNameIndexed, i, 0, strBuf) != 1) { // program will be [re-]changed later dispatcher(effSetProgram, 0, i); dispatcher(effGetProgramName, 0, 0, strBuf); } pData->prog.names[i] = carla_strdup(strBuf); } } if (doInit) { if (newCount > 0) setProgram(0, false, false, false, true); else dispatcher(effSetProgram, 0, 0); } else { // Check if current program is invalid bool programChanged = false; if (newCount == oldCount+1) { // one program added, probably created by user pData->prog.current = static_cast(oldCount); programChanged = true; } else if (current < 0 && newCount > 0) { // programs exist now, but not before pData->prog.current = 0; programChanged = true; } else if (current >= 0 && newCount == 0) { // programs existed before, but not anymore pData->prog.current = -1; programChanged = true; } else if (current >= static_cast(newCount)) { // current program > count pData->prog.current = 0; programChanged = true; } else { // no change pData->prog.current = current; } if (programChanged) { setProgram(pData->prog.current, true, true, true, false); } else { // Program was changed during update, re-set it if (pData->prog.current >= 0) dispatcher(effSetProgram, 0, pData->prog.current); } pData->engine->callback(true, true, ENGINE_CALLBACK_RELOAD_PROGRAMS, pData->id, 0, 0, 0, 0.0f, nullptr); } } // ------------------------------------------------------------------- // Plugin processing void activate() noexcept override { CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr,); const int32_t iBufferSize = static_cast(fBufferSize); const float fSampleRate = static_cast(pData->engine->getSampleRate()); dispatcher(effSetProcessPrecision, 0, kVstProcessPrecision32); dispatcher(effSetBlockSizeAndSampleRate, 0, iBufferSize, nullptr, fSampleRate); dispatcher(effSetSampleRate, 0, 0, nullptr, fSampleRate); dispatcher(effSetBlockSize, 0, iBufferSize); try { dispatcher(effMainsChanged, 0, 1); } catch(...) {} try { dispatcher(effStartProcess, 0, 0); } catch(...) {} fFirstActive = true; } void deactivate() noexcept override { CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr,); try { dispatcher(effStopProcess); } catch(...) {} try { dispatcher(effMainsChanged); } catch(...) {} } void process(const float* const* const audioIn, float** const audioOut, const float* const* const cvIn, float** const, const uint32_t frames) override { const CarlaScopedValueSetter svs(fProcThread, pthread_self(), kNullThread); // -------------------------------------------------------------------------------------------------------- // Check if active if (! pData->active) { // disable any output sound for (uint32_t i=0; i < pData->audioOut.count; ++i) carla_zeroFloats(audioOut[i], frames); return; } fMidiEventCount = 0; carla_zeroStructs(fMidiEvents, kPluginMaxMidiEvents*2); // -------------------------------------------------------------------------------------------------------- // Check if needs reset if (pData->needsReset) { if (pData->options & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) { fMidiEventCount = MAX_MIDI_CHANNELS*2; for (uint8_t i=0, k=MAX_MIDI_CHANNELS; i < MAX_MIDI_CHANNELS; ++i) { fMidiEvents[k].type = kVstMidiType; fMidiEvents[k].byteSize = kVstMidiEventSize; fMidiEvents[k].midiData[0] = char(MIDI_STATUS_CONTROL_CHANGE | (k & MIDI_CHANNEL_BIT)); fMidiEvents[k].midiData[1] = MIDI_CONTROL_ALL_NOTES_OFF; fMidiEvents[k+i].type = kVstMidiType; fMidiEvents[k+i].byteSize = kVstMidiEventSize; fMidiEvents[k+i].midiData[0] = char(MIDI_STATUS_CONTROL_CHANGE | (k & MIDI_CHANNEL_BIT)); fMidiEvents[k+i].midiData[1] = MIDI_CONTROL_ALL_SOUND_OFF; } } else if (pData->ctrlChannel >= 0 && pData->ctrlChannel < MAX_MIDI_CHANNELS) { fMidiEventCount = MAX_MIDI_NOTE; for (uint8_t i=0; i < MAX_MIDI_NOTE; ++i) { fMidiEvents[i].type = kVstMidiType; fMidiEvents[i].byteSize = kVstMidiEventSize; fMidiEvents[i].midiData[0] = char(MIDI_STATUS_NOTE_OFF | (pData->ctrlChannel & MIDI_CHANNEL_BIT)); fMidiEvents[i].midiData[1] = char(i); } } pData->needsReset = false; } // -------------------------------------------------------------------------------------------------------- // Set TimeInfo const EngineTimeInfo timeInfo(pData->engine->getTimeInfo()); fTimeInfo.flags = 0; if (fFirstActive || ! fLastTimeInfo.compareIgnoringRollingFrames(timeInfo, fBufferSize)) { fTimeInfo.flags |= kVstTransportChanged; fLastTimeInfo = timeInfo; } if (timeInfo.playing) fTimeInfo.flags |= kVstTransportPlaying; fTimeInfo.samplePos = double(timeInfo.frame); fTimeInfo.sampleRate = pData->engine->getSampleRate(); if (timeInfo.usecs != 0) { fTimeInfo.nanoSeconds = double(timeInfo.usecs)/1000.0; fTimeInfo.flags |= kVstNanosValid; } if (timeInfo.bbt.valid) { CARLA_SAFE_ASSERT_INT(timeInfo.bbt.bar > 0, timeInfo.bbt.bar); CARLA_SAFE_ASSERT_INT(timeInfo.bbt.beat > 0, timeInfo.bbt.beat); const double ppqBar = static_cast(timeInfo.bbt.beatsPerBar) * (timeInfo.bbt.bar - 1); // const double ppqBeat = static_cast(timeInfo.bbt.beat - 1); // const double ppqTick = timeInfo.bbt.tick / timeInfo.bbt.ticksPerBeat; // PPQ Pos fTimeInfo.ppqPos = fTimeInfo.samplePos / (fTimeInfo.sampleRate * 60 / fTimeInfo.tempo); // fTimeInfo.ppqPos = ppqBar + ppqBeat + ppqTick; fTimeInfo.flags |= kVstPpqPosValid; // Tempo fTimeInfo.tempo = timeInfo.bbt.beatsPerMinute; fTimeInfo.flags |= kVstTempoValid; // Bars fTimeInfo.barStartPos = ppqBar; fTimeInfo.flags |= kVstBarsValid; // Time Signature fTimeInfo.timeSigNumerator = static_cast(timeInfo.bbt.beatsPerBar); fTimeInfo.timeSigDenominator = static_cast(timeInfo.bbt.beatType); fTimeInfo.flags |= kVstTimeSigValid; } else { // Tempo fTimeInfo.tempo = 120.0; fTimeInfo.flags |= kVstTempoValid; // Time Signature fTimeInfo.timeSigNumerator = 4; fTimeInfo.timeSigDenominator = 4; fTimeInfo.flags |= kVstTimeSigValid; // Missing info fTimeInfo.ppqPos = 0.0; fTimeInfo.barStartPos = 0.0; } // -------------------------------------------------------------------------------------------------------- // Event Input and Processing if (pData->event.portIn != nullptr) { // ---------------------------------------------------------------------------------------------------- // MIDI Input (External) if (pData->extNotes.mutex.tryLock()) { ExternalMidiNote note = { 0, 0, 0 }; for (; fMidiEventCount < kPluginMaxMidiEvents*2 && ! pData->extNotes.data.isEmpty();) { note = pData->extNotes.data.getFirst(note, true); CARLA_SAFE_ASSERT_CONTINUE(note.channel >= 0 && note.channel < MAX_MIDI_CHANNELS); VstMidiEvent& vstMidiEvent(fMidiEvents[fMidiEventCount++]); vstMidiEvent.type = kVstMidiType; vstMidiEvent.byteSize = kVstMidiEventSize; vstMidiEvent.midiData[0] = char((note.velo > 0 ? MIDI_STATUS_NOTE_ON : MIDI_STATUS_NOTE_OFF) | (note.channel & MIDI_CHANNEL_BIT)); vstMidiEvent.midiData[1] = char(note.note); vstMidiEvent.midiData[2] = char(note.velo); } pData->extNotes.mutex.unlock(); } // End of MIDI Input (External) // ---------------------------------------------------------------------------------------------------- // Event Input (System) #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH bool allNotesOffSent = false; #endif bool isSampleAccurate = (pData->options & PLUGIN_OPTION_FIXED_BUFFERS) == 0; uint32_t startTime = 0; uint32_t timeOffset = 0; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (cvIn != nullptr && pData->event.cvSourcePorts != nullptr) pData->event.cvSourcePorts->initPortBuffers(cvIn, frames, isSampleAccurate, pData->event.portIn); #endif for (uint32_t i=0, numEvents = pData->event.portIn->getEventCount(); i < numEvents; ++i) { EngineEvent& event(pData->event.portIn->getEvent(i)); uint32_t eventTime = event.time; CARLA_SAFE_ASSERT_UINT2_CONTINUE(eventTime < frames, eventTime, frames); if (eventTime < timeOffset) { carla_stderr2("Timing error, eventTime:%u < timeOffset:%u for '%s'", eventTime, timeOffset, pData->name); eventTime = timeOffset; } if (isSampleAccurate && eventTime > timeOffset) { if (processSingle(audioIn, audioOut, eventTime - timeOffset, timeOffset)) { startTime = 0; timeOffset = eventTime; if (fMidiEventCount > 0) { carla_zeroStructs(fMidiEvents, fMidiEventCount); fMidiEventCount = 0; } } else startTime += timeOffset; } switch (event.type) { case kEngineEventTypeNull: break; case kEngineEventTypeControl: { EngineControlEvent& ctrlEvent(event.ctrl); switch (ctrlEvent.type) { case kEngineControlEventTypeNull: break; case kEngineControlEventTypeParameter: { float value; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // non-midi if (event.channel == kEngineEventNonMidiChannel) { const uint32_t k = ctrlEvent.param; CARLA_SAFE_ASSERT_CONTINUE(k < pData->param.count); ctrlEvent.handled = true; value = pData->param.getFinalUnnormalizedValue(k, ctrlEvent.normalizedValue); setParameterValueRT(k, value, true); continue; } // Control backend stuff if (event.channel == pData->ctrlChannel) { if (MIDI_IS_CONTROL_BREATH_CONTROLLER(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_DRYWET) != 0) { ctrlEvent.handled = true; value = ctrlEvent.normalizedValue; setDryWetRT(value, true); } else if (MIDI_IS_CONTROL_CHANNEL_VOLUME(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_VOLUME) != 0) { ctrlEvent.handled = true; value = ctrlEvent.normalizedValue*127.0f/100.0f; setVolumeRT(value, true); } else if (MIDI_IS_CONTROL_BALANCE(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_BALANCE) != 0) { float left, right; value = ctrlEvent.normalizedValue/0.5f - 1.0f; if (value < 0.0f) { left = -1.0f; right = (value*2.0f)+1.0f; } else if (value > 0.0f) { left = (value*2.0f)-1.0f; right = 1.0f; } else { left = -1.0f; right = 1.0f; } ctrlEvent.handled = true; setBalanceLeftRT(left, true); setBalanceRightRT(right, true); } } #endif // Control plugin parameters uint32_t k; for (k=0; k < pData->param.count; ++k) { if (pData->param.data[k].midiChannel != event.channel) continue; if (pData->param.data[k].mappedControlIndex != ctrlEvent.param) continue; if (pData->param.data[k].type != PARAMETER_INPUT) continue; if ((pData->param.data[k].hints & PARAMETER_IS_AUTOMATABLE) == 0) continue; ctrlEvent.handled = true; value = pData->param.getFinalUnnormalizedValue(k, ctrlEvent.normalizedValue); setParameterValueRT(k, value, true); } if ((pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) != 0 && ctrlEvent.param < MAX_MIDI_VALUE) { if (fMidiEventCount >= kPluginMaxMidiEvents*2) continue; VstMidiEvent& vstMidiEvent(fMidiEvents[fMidiEventCount++]); carla_zeroStruct(vstMidiEvent); vstMidiEvent.type = kVstMidiType; vstMidiEvent.byteSize = kVstMidiEventSize; vstMidiEvent.deltaFrames = static_cast(isSampleAccurate ? startTime : eventTime); vstMidiEvent.midiData[0] = char(MIDI_STATUS_CONTROL_CHANGE | (event.channel & MIDI_CHANNEL_BIT)); vstMidiEvent.midiData[1] = char(ctrlEvent.param); vstMidiEvent.midiData[2] = char(ctrlEvent.normalizedValue*127.0f); } #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (! ctrlEvent.handled) checkForMidiLearn(event); #endif break; } // case kEngineControlEventTypeParameter case kEngineControlEventTypeMidiBank: if ((pData->options & PLUGIN_OPTION_SEND_PROGRAM_CHANGES) != 0) { if (fMidiEventCount >= kPluginMaxMidiEvents*2) continue; VstMidiEvent& vstMidiEvent_MSB(fMidiEvents[fMidiEventCount++]); carla_zeroStruct(vstMidiEvent_MSB); vstMidiEvent_MSB.type = kVstMidiType; vstMidiEvent_MSB.byteSize = kVstMidiEventSize; vstMidiEvent_MSB.deltaFrames = static_cast(isSampleAccurate ? startTime : event.time); vstMidiEvent_MSB.midiData[0] = char(MIDI_STATUS_CONTROL_CHANGE | (event.channel & MIDI_CHANNEL_BIT)); vstMidiEvent_MSB.midiData[1] = MIDI_CONTROL_BANK_SELECT; vstMidiEvent_MSB.midiData[2] = 0; VstMidiEvent& vstMidiEvent_LSB(fMidiEvents[fMidiEventCount++]); carla_zeroStruct(vstMidiEvent_LSB); vstMidiEvent_LSB.type = kVstMidiType; vstMidiEvent_LSB.byteSize = kVstMidiEventSize; vstMidiEvent_LSB.deltaFrames = static_cast(isSampleAccurate ? startTime : eventTime); vstMidiEvent_LSB.midiData[0] = char(MIDI_STATUS_CONTROL_CHANGE | (event.channel & MIDI_CHANNEL_BIT)); vstMidiEvent_LSB.midiData[1] = MIDI_CONTROL_BANK_SELECT__LSB; vstMidiEvent_LSB.midiData[2] = char(ctrlEvent.param); } break; case kEngineControlEventTypeMidiProgram: if (event.channel == pData->ctrlChannel && (pData->options & PLUGIN_OPTION_MAP_PROGRAM_CHANGES) != 0) { if (ctrlEvent.param < pData->prog.count) { setProgramRT(ctrlEvent.param, true); break; } } else if (pData->options & PLUGIN_OPTION_SEND_PROGRAM_CHANGES) { if (fMidiEventCount >= kPluginMaxMidiEvents*2) continue; VstMidiEvent& vstMidiEvent(fMidiEvents[fMidiEventCount++]); carla_zeroStruct(vstMidiEvent); vstMidiEvent.type = kVstMidiType; vstMidiEvent.byteSize = kVstMidiEventSize; vstMidiEvent.deltaFrames = static_cast(isSampleAccurate ? startTime : eventTime); vstMidiEvent.midiData[0] = char(MIDI_STATUS_PROGRAM_CHANGE | (event.channel & MIDI_CHANNEL_BIT)); vstMidiEvent.midiData[1] = char(ctrlEvent.param); } break; case kEngineControlEventTypeAllSoundOff: if (pData->options & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) { if (fMidiEventCount >= kPluginMaxMidiEvents*2) continue; VstMidiEvent& vstMidiEvent(fMidiEvents[fMidiEventCount++]); carla_zeroStruct(vstMidiEvent); vstMidiEvent.type = kVstMidiType; vstMidiEvent.byteSize = kVstMidiEventSize; vstMidiEvent.deltaFrames = static_cast(isSampleAccurate ? startTime : eventTime); vstMidiEvent.midiData[0] = char(MIDI_STATUS_CONTROL_CHANGE | (event.channel & MIDI_CHANNEL_BIT)); vstMidiEvent.midiData[1] = MIDI_CONTROL_ALL_SOUND_OFF; } break; case kEngineControlEventTypeAllNotesOff: if (pData->options & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) { #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH if (event.channel == pData->ctrlChannel && ! allNotesOffSent) { allNotesOffSent = true; postponeRtAllNotesOff(); } #endif if (fMidiEventCount >= kPluginMaxMidiEvents*2) continue; VstMidiEvent& vstMidiEvent(fMidiEvents[fMidiEventCount++]); carla_zeroStruct(vstMidiEvent); vstMidiEvent.type = kVstMidiType; vstMidiEvent.byteSize = kVstMidiEventSize; vstMidiEvent.deltaFrames = static_cast(isSampleAccurate ? startTime : eventTime); vstMidiEvent.midiData[0] = char(MIDI_STATUS_CONTROL_CHANGE | (event.channel & MIDI_CHANNEL_BIT)); vstMidiEvent.midiData[1] = MIDI_CONTROL_ALL_NOTES_OFF; } break; } // switch (ctrlEvent.type) break; } // case kEngineEventTypeControl case kEngineEventTypeMidi: { if (fMidiEventCount >= kPluginMaxMidiEvents*2) continue; const EngineMidiEvent& midiEvent(event.midi); if (midiEvent.size > 3) continue; #ifdef CARLA_PROPER_CPP11_SUPPORT static_assert(3 <= EngineMidiEvent::kDataSize, "Incorrect data"); #endif uint8_t status = uint8_t(MIDI_GET_STATUS_FROM_DATA(midiEvent.data)); if ((status == MIDI_STATUS_NOTE_OFF || status == MIDI_STATUS_NOTE_ON) && (pData->options & PLUGIN_OPTION_SKIP_SENDING_NOTES)) continue; if (status == MIDI_STATUS_CHANNEL_PRESSURE && (pData->options & PLUGIN_OPTION_SEND_CHANNEL_PRESSURE) == 0) continue; if (status == MIDI_STATUS_CONTROL_CHANGE && (pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) == 0) continue; if (status == MIDI_STATUS_POLYPHONIC_AFTERTOUCH && (pData->options & PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH) == 0) continue; if (status == MIDI_STATUS_PITCH_WHEEL_CONTROL && (pData->options & PLUGIN_OPTION_SEND_PITCHBEND) == 0) continue; // Fix bad note-off if (status == MIDI_STATUS_NOTE_ON && midiEvent.data[2] == 0) status = MIDI_STATUS_NOTE_OFF; VstMidiEvent& vstMidiEvent(fMidiEvents[fMidiEventCount++]); carla_zeroStruct(vstMidiEvent); vstMidiEvent.type = kVstMidiType; vstMidiEvent.byteSize = kVstMidiEventSize; vstMidiEvent.deltaFrames = static_cast(isSampleAccurate ? startTime : eventTime); vstMidiEvent.midiData[0] = char(status | (event.channel & MIDI_CHANNEL_BIT)); vstMidiEvent.midiData[1] = char(midiEvent.size >= 2 ? midiEvent.data[1] : 0); vstMidiEvent.midiData[2] = char(midiEvent.size >= 3 ? midiEvent.data[2] : 0); if (status == MIDI_STATUS_NOTE_ON) { pData->postponeNoteOnRtEvent(true, event.channel, midiEvent.data[1], midiEvent.data[2]); } else if (status == MIDI_STATUS_NOTE_OFF) { pData->postponeNoteOffRtEvent(true, event.channel, midiEvent.data[1]); } } break; } // switch (event.type) } pData->postRtEvents.trySplice(); if (frames > timeOffset) processSingle(audioIn, audioOut, frames - timeOffset, timeOffset); } // End of Event Input and Processing // -------------------------------------------------------------------------------------------------------- // Plugin processing (no events) else { processSingle(audioIn, audioOut, frames, 0); } // End of Plugin processing (no events) // -------------------------------------------------------------------------------------------------------- // MIDI Output if (pData->event.portOut != nullptr) { // reverse lookup MIDI events for (uint32_t k = (kPluginMaxMidiEvents*2)-1; k >= fMidiEventCount; --k) { if (fMidiEvents[k].type == 0) break; const VstMidiEvent& vstMidiEvent(fMidiEvents[k]); CARLA_SAFE_ASSERT_CONTINUE(vstMidiEvent.deltaFrames >= 0); CARLA_SAFE_ASSERT_CONTINUE(vstMidiEvent.midiData[0] != 0); uint8_t midiData[3]; midiData[0] = static_cast(vstMidiEvent.midiData[0]); midiData[1] = static_cast(vstMidiEvent.midiData[1]); midiData[2] = static_cast(vstMidiEvent.midiData[2]); if (! pData->event.portOut->writeMidiEvent(static_cast(vstMidiEvent.deltaFrames), 3, midiData)) break; } } // End of MIDI Output fFirstActive = false; // -------------------------------------------------------------------------------------------------------- #ifdef BUILD_BRIDGE_ALTERNATIVE_ARCH return; // unused (void)cvIn; #endif } bool processSingle(const float* const* const inBuffer, float** const outBuffer, const uint32_t frames, const uint32_t timeOffset) { CARLA_SAFE_ASSERT_RETURN(frames > 0, false); if (pData->audioIn.count > 0) { CARLA_SAFE_ASSERT_RETURN(inBuffer != nullptr, false); } if (pData->audioOut.count > 0) { CARLA_SAFE_ASSERT_RETURN(outBuffer != nullptr, false); CARLA_SAFE_ASSERT_RETURN(fAudioOutBuffers != nullptr, false); } // -------------------------------------------------------------------------------------------------------- // Try lock, silence otherwise #ifndef STOAT_TEST_BUILD if (pData->engine->isOffline()) { pData->singleMutex.lock(); } else #endif if (! pData->singleMutex.tryLock()) { for (uint32_t i=0; i < pData->audioOut.count; ++i) { for (uint32_t k=0; k < frames; ++k) outBuffer[i][k+timeOffset] = 0.0f; } return false; } // -------------------------------------------------------------------------------------------------------- // Set audio buffers float* vstInBuffer[pData->audioIn.count]; for (uint32_t i=0; i < pData->audioIn.count; ++i) vstInBuffer[i] = const_cast(inBuffer[i]+timeOffset); for (uint32_t i=0; i < pData->audioOut.count; ++i) carla_zeroFloats(fAudioOutBuffers[i], frames); // -------------------------------------------------------------------------------------------------------- // Set MIDI events fIsProcessing = true; if (fMidiEventCount > 0) { fEvents.numEvents = static_cast(fMidiEventCount); fEvents.reserved = 0; dispatcher(effProcessEvents, 0, 0, &fEvents, 0.0f); } // -------------------------------------------------------------------------------------------------------- // Run plugin if (pData->hints & PLUGIN_CAN_PROCESS_REPLACING) { fEffect->processReplacing(fEffect, (pData->audioIn.count > 0) ? vstInBuffer : nullptr, (pData->audioOut.count > 0) ? fAudioOutBuffers : nullptr, static_cast(frames)); } else { #if ! VST_FORCE_DEPRECATED fEffect->process(fEffect, (pData->audioIn.count > 0) ? vstInBuffer : nullptr, (pData->audioOut.count > 0) ? fAudioOutBuffers : nullptr, static_cast(frames)); #endif } fIsProcessing = false; fTimeInfo.samplePos += frames; #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // -------------------------------------------------------------------------------------------------------- // Post-processing (dry/wet, volume and balance) { const bool doDryWet = (pData->hints & PLUGIN_CAN_DRYWET) != 0 && carla_isNotEqual(pData->postProc.dryWet, 1.0f); const bool doBalance = (pData->hints & PLUGIN_CAN_BALANCE) != 0 && ! (carla_isEqual(pData->postProc.balanceLeft, -1.0f) && carla_isEqual(pData->postProc.balanceRight, 1.0f)); const bool isMono = (pData->audioIn.count == 1); bool isPair; float bufValue, oldBufLeft[doBalance ? frames : 1]; for (uint32_t i=0; i < pData->audioOut.count; ++i) { // Dry/Wet if (doDryWet) { const uint32_t c = isMono ? 0 : i; for (uint32_t k=0; k < frames; ++k) { bufValue = inBuffer[c][k+timeOffset]; fAudioOutBuffers[i][k] = (fAudioOutBuffers[i][k] * pData->postProc.dryWet) + (bufValue * (1.0f - pData->postProc.dryWet)); } } // Balance if (doBalance) { isPair = (i % 2 == 0); if (isPair) { CARLA_ASSERT(i+1 < pData->audioOut.count); carla_copyFloats(oldBufLeft, fAudioOutBuffers[i], frames); } float balRangeL = (pData->postProc.balanceLeft + 1.0f)/2.0f; float balRangeR = (pData->postProc.balanceRight + 1.0f)/2.0f; for (uint32_t k=0; k < frames; ++k) { if (isPair) { // left fAudioOutBuffers[i][k] = oldBufLeft[k] * (1.0f - balRangeL); fAudioOutBuffers[i][k] += fAudioOutBuffers[i+1][k] * (1.0f - balRangeR); } else { // right fAudioOutBuffers[i][k] = fAudioOutBuffers[i][k] * balRangeR; fAudioOutBuffers[i][k] += oldBufLeft[k] * balRangeL; } } } // Volume (and buffer copy) { for (uint32_t k=0; k < frames; ++k) outBuffer[i][k+timeOffset] = fAudioOutBuffers[i][k] * pData->postProc.volume; } } } // End of Post-processing #else // BUILD_BRIDGE_ALTERNATIVE_ARCH for (uint32_t i=0; i < pData->audioOut.count; ++i) { for (uint32_t k=0; k < frames; ++k) outBuffer[i][k+timeOffset] = fAudioOutBuffers[i][k]; } #endif // -------------------------------------------------------------------------------------------------------- pData->singleMutex.unlock(); return true; } void bufferSizeChanged(const uint32_t newBufferSize) override { CARLA_ASSERT_INT(newBufferSize > 0, newBufferSize); carla_debug("CarlaPluginVST2::bufferSizeChanged(%i)", newBufferSize); fBufferSize = pData->engine->getBufferSize(); if (pData->active) deactivate(); for (uint32_t i=0; i < pData->audioOut.count; ++i) { if (fAudioOutBuffers[i] != nullptr) delete[] fAudioOutBuffers[i]; fAudioOutBuffers[i] = new float[newBufferSize]; } #if ! VST_FORCE_DEPRECATED dispatcher(effSetBlockSizeAndSampleRate, 0, static_cast(newBufferSize), nullptr, static_cast(pData->engine->getSampleRate())); #endif dispatcher(effSetBlockSize, 0, static_cast(newBufferSize), nullptr, 0.0f); if (pData->active) activate(); } void sampleRateChanged(const double newSampleRate) override { CARLA_ASSERT_INT(newSampleRate > 0.0, newSampleRate); carla_debug("CarlaPluginVST2::sampleRateChanged(%g)", newSampleRate); if (pData->active) deactivate(); #if ! VST_FORCE_DEPRECATED dispatcher(effSetBlockSizeAndSampleRate, 0, static_cast(pData->engine->getBufferSize()), nullptr, static_cast(newSampleRate)); #endif dispatcher(effSetSampleRate, 0, 0, nullptr, static_cast(newSampleRate)); if (pData->active) activate(); } // ------------------------------------------------------------------- // Plugin buffers void clearBuffers() noexcept override { carla_debug("CarlaPluginVST2::clearBuffers() - start"); if (fAudioOutBuffers != nullptr) { for (uint32_t i=0; i < pData->audioOut.count; ++i) { if (fAudioOutBuffers[i] != nullptr) { delete[] fAudioOutBuffers[i]; fAudioOutBuffers[i] = nullptr; } } delete[] fAudioOutBuffers; fAudioOutBuffers = nullptr; } CarlaPlugin::clearBuffers(); carla_debug("CarlaPluginVST2::clearBuffers() - end"); } // ------------------------------------------------------------------- // Post-poned UI Stuff // nothing // ------------------------------------------------------------------- protected: void handlePluginUIClosed() override { CARLA_SAFE_ASSERT_RETURN(fUI.window != nullptr,); carla_debug("CarlaPluginVST2::handlePluginUIClosed()"); showCustomUI(false); pData->engine->callback(true, true, ENGINE_CALLBACK_UI_STATE_CHANGED, pData->id, 0, 0, 0, 0.0f, nullptr); } void handlePluginUIResized(const uint width, const uint height) override { CARLA_SAFE_ASSERT_RETURN(fUI.window != nullptr,); carla_debug("CarlaPluginVST2::handlePluginUIResized(%u, %u)", width, height); return; // unused (void)width; (void)height; } // ------------------------------------------------------------------- intptr_t dispatcher(int32_t opcode, int32_t index = 0, intptr_t value = 0, void* ptr = nullptr, float opt = 0.0f) const noexcept { CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr, 0); #ifdef DEBUG if (opcode != effIdle && opcode != effEditIdle && opcode != effProcessEvents) carla_debug("CarlaPluginVST2::dispatcher(%02i:%s, %i, " P_INTPTR ", %p, %f)", opcode, vstEffectOpcode2str(opcode), index, value, ptr, static_cast(opt)); #endif try { return fEffect->dispatcher(fEffect, opcode, index, value, ptr, opt); } CARLA_SAFE_EXCEPTION_RETURN("Vst dispatcher", 0); } intptr_t handleAudioMasterCallback(const int32_t opcode, const int32_t index, const intptr_t value, void* const ptr, const float opt) { #ifdef DEBUG if (opcode != audioMasterGetTime) carla_debug("CarlaPluginVST2::handleAudioMasterCallback(%02i:%s, %i, " P_INTPTR ", %p, %f)", opcode, vstMasterOpcode2str(opcode), index, value, ptr, static_cast(opt)); #endif intptr_t ret = 0; switch (opcode) { case audioMasterAutomate: { if (fIsInitializing) { // some plugins can be stupid... if (pData->param.count == 0) break; } else { CARLA_CUSTOM_SAFE_ASSERT_BREAK("audioMasterAutomate while disabled", pData->enabled); } // plugins should never do this: CARLA_SAFE_ASSERT_INT2_BREAK(index >= 0 && index < static_cast(pData->param.count), index, static_cast(pData->param.count)); const uint32_t uindex(static_cast(index)); const float fixedValue(pData->param.getFixedValue(uindex, opt)); const pthread_t thisThread = pthread_self(); if (pthread_equal(thisThread, kNullThread)) { carla_stderr("audioMasterAutomate called with null thread!?"); setParameterValue(uindex, fixedValue, false, true, true); } // Called from plugin process thread, nasty! (likely MIDI learn) else if (pthread_equal(thisThread, fProcThread)) { CARLA_SAFE_ASSERT(fIsProcessing); pData->postponeParameterChangeRtEvent(true, index, fixedValue); } // Called from effSetChunk or effSetProgram else if (pthread_equal(thisThread, fChangingValuesThread)) { carla_debug("audioMasterAutomate called while setting state"); pData->postponeParameterChangeRtEvent(true, index, fixedValue); } // Called from effIdle else if (pthread_equal(thisThread, fIdleThread)) { carla_debug("audioMasterAutomate called from idle thread"); pData->postponeParameterChangeRtEvent(true, index, fixedValue); } // Called from main thread, why? else if (pthread_equal(thisThread, fMainThread)) { if (fFirstActive) { carla_stdout("audioMasterAutomate called while loading, nasty!"); } else { carla_debug("audioMasterAutomate called from main thread"); } CarlaPlugin::setParameterValue(uindex, fixedValue, false, true, true); } // Called from UI? else if (fUI.isVisible) { carla_debug("audioMasterAutomate called while UI visible"); CarlaPlugin::setParameterValue(uindex, fixedValue, false, true, true); } // Unknown else { carla_stdout("audioMasterAutomate called from unknown source"); CarlaPlugin::setParameterValue(uindex, fixedValue, false, true, true); } break; } case audioMasterCurrentId: if (fEffect != nullptr) ret = fEffect->uniqueID; break; case audioMasterIdle: CARLA_SAFE_ASSERT_BREAK(pthread_equal(pthread_self(), fMainThread)); pData->engine->callback(true, false, ENGINE_CALLBACK_IDLE, 0, 0, 0, 0, 0.0f, nullptr); if (pData->engine->getType() != kEngineTypePlugin) pData->engine->idle(); break; #if ! VST_FORCE_DEPRECATED case audioMasterPinConnected: // Deprecated in VST SDK 2.4 // TODO break; case audioMasterWantMidi: // Deprecated in VST SDK 2.4 pData->hints |= PLUGIN_WANTS_MIDI_INPUT; break; #endif case audioMasterGetTime: ret = (intptr_t)&fTimeInfo; break; case audioMasterProcessEvents: CARLA_SAFE_ASSERT_RETURN(pData->enabled, 0); CARLA_SAFE_ASSERT_RETURN(fIsProcessing, 0); CARLA_SAFE_ASSERT_RETURN(pData->event.portOut != nullptr, 0); if (fMidiEventCount >= kPluginMaxMidiEvents*2-1) return 0; if (const VstEvents* const vstEvents = (const VstEvents*)ptr) { for (int32_t i=0; i < vstEvents->numEvents && i < kPluginMaxMidiEvents*2; ++i) { if (vstEvents->events[i] == nullptr) break; const VstMidiEvent* const vstMidiEvent((const VstMidiEvent*)vstEvents->events[i]); if (vstMidiEvent->type != kVstMidiType) continue; // reverse-find first free event, and put it there for (uint32_t j=(kPluginMaxMidiEvents*2)-1; j >= fMidiEventCount; --j) { if (fMidiEvents[j].type == 0) { std::memcpy(&fMidiEvents[j], vstMidiEvent, sizeof(VstMidiEvent)); break; } } } } ret = 1; break; #if ! VST_FORCE_DEPRECATED case audioMasterSetTime: // Deprecated in VST SDK 2.4 break; case audioMasterTempoAt: // Deprecated in VST SDK 2.4 ret = static_cast(fTimeInfo.tempo * 10000); break; case audioMasterGetNumAutomatableParameters: // Deprecated in VST SDK 2.4 ret = static_cast(pData->engine->getOptions().maxParameters); ret = carla_minPositive(ret, fEffect->numParams); break; case audioMasterGetParameterQuantization: // Deprecated in VST SDK 2.4 ret = 1; // full single float precision break; #endif #if 0 case audioMasterIOChanged: CARLA_ASSERT(pData->enabled); // TESTING if (! pData->enabled) { ret = 1; break; } if (x_engine->getOptions().processMode == PROCESS_MODE_CONTINUOUS_RACK) { carla_stderr2("CarlaPluginVST2::handleAudioMasterIOChanged() - plugin asked IO change, but it's not supported in rack mode"); return 0; } engineProcessLock(); m_enabled = false; engineProcessUnlock(); if (m_active) { effect->dispatcher(effect, effStopProcess); effect->dispatcher(effect, effMainsChanged, 0, 0); } reload(); if (m_active) { effect->dispatcher(effect, effMainsChanged, 0, 1, nullptr, 0.0f); effect->dispatcher(effect, effStartProcess); } x_engine->callback(CALLBACK_RELOAD_ALL, m_id, 0, 0, 0, 0.0, nullptr); ret = 1; break; #endif #if ! VST_FORCE_DEPRECATED case audioMasterNeedIdle: // Deprecated in VST SDK 2.4 fNeedIdle = true; ret = 1; break; #endif case audioMasterSizeWindow: CARLA_SAFE_ASSERT_BREAK(index > 0); CARLA_SAFE_ASSERT_BREAK(value > 0); if (fUI.isEmbed) { pData->engine->callback(true, true, ENGINE_CALLBACK_EMBED_UI_RESIZED, pData->id, index, static_cast(value), 0, 0.0f, nullptr); } else { CARLA_SAFE_ASSERT_BREAK(fUI.window != nullptr); fUI.window->setSize(static_cast(index), static_cast(value), true); } ret = 1; break; case audioMasterGetSampleRate: ret = static_cast(pData->engine->getSampleRate()); break; case audioMasterGetBlockSize: ret = static_cast(pData->engine->getBufferSize()); break; case audioMasterGetInputLatency: ret = 0; break; case audioMasterGetOutputLatency: ret = 0; break; #if ! VST_FORCE_DEPRECATED case audioMasterGetPreviousPlug: // Deprecated in VST SDK 2.4 // TODO break; case audioMasterGetNextPlug: // Deprecated in VST SDK 2.4 // TODO break; case audioMasterWillReplaceOrAccumulate: // Deprecated in VST SDK 2.4 ret = 1; // replace break; #endif case audioMasterGetCurrentProcessLevel: if (pthread_equal(pthread_self(), fProcThread)) { CARLA_SAFE_ASSERT(fIsProcessing); if (pData->engine->isOffline()) ret = kVstProcessLevelOffline; else ret = kVstProcessLevelRealtime; } else { ret = kVstProcessLevelUser; } break; case audioMasterGetAutomationState: ret = pData->active ? kVstAutomationReadWrite : kVstAutomationOff; break; case audioMasterOfflineStart: case audioMasterOfflineRead: case audioMasterOfflineWrite: case audioMasterOfflineGetCurrentPass: case audioMasterOfflineGetCurrentMetaPass: // TODO break; #if ! VST_FORCE_DEPRECATED case audioMasterSetOutputSampleRate: // Deprecated in VST SDK 2.4 break; case audioMasterGetOutputSpeakerArrangement: // Deprecated in VST SDK 2.4 // TODO break; #endif case audioMasterVendorSpecific: // TODO - cockos extensions break; #if ! VST_FORCE_DEPRECATED case audioMasterSetIcon: // Deprecated in VST SDK 2.4 break; #endif #if ! VST_FORCE_DEPRECATED case audioMasterOpenWindow: case audioMasterCloseWindow: // Deprecated in VST SDK 2.4 // TODO break; #endif case audioMasterGetDirectory: // TODO break; case audioMasterUpdateDisplay: { bool programNamesUpdated = false; // Update current program if (pData->prog.count > 1) { const int32_t current = static_cast(dispatcher(effGetProgram)); if (current >= 0 && current < static_cast(pData->prog.count)) { char strBuf[STR_MAX+1] = { '\0' }; dispatcher(effGetProgramName, 0, 0, strBuf); if (pData->prog.names[current] != nullptr) delete[] pData->prog.names[current]; pData->prog.names[current] = carla_strdup(strBuf); if (pData->prog.current != current) { pData->prog.current = current; pData->engine->callback(true, true, ENGINE_CALLBACK_PROGRAM_CHANGED, pData->id, current, 0, 0, 0.0f, nullptr); } } // Check for updated program names char strBuf[STR_MAX+1]; for (int32_t i=0; i < fEffect->numPrograms && i < static_cast(pData->prog.count); ++i) { carla_zeroStruct(strBuf); if (dispatcher(effGetProgramNameIndexed, i, 0, strBuf) != 1) { // stop here if plugin does not support indexed names break; } if (std::strcmp(pData->prog.names[i], strBuf) != 0) { const char* const old = pData->prog.names[i]; pData->prog.names[i] = carla_strdup(strBuf); delete[] old; programNamesUpdated = true; } } } if (! fIsInitializing) { if (programNamesUpdated) pData->engine->callback(true, true, ENGINE_CALLBACK_RELOAD_PROGRAMS, pData->id, 0, 0, 0, 0.0f, nullptr); pData->engine->callback(true, true, ENGINE_CALLBACK_RELOAD_PARAMETERS, pData->id, 0, 0, 0, 0.0f, nullptr); } ret = 1; break; } case audioMasterBeginEdit: CARLA_SAFE_ASSERT_BREAK(index >= 0); pData->engine->touchPluginParameter(pData->id, static_cast(index), true); break; case audioMasterEndEdit: CARLA_SAFE_ASSERT_BREAK(index >= 0); pData->engine->touchPluginParameter(pData->id, static_cast(index), false); break; case audioMasterOpenFileSelector: case audioMasterCloseFileSelector: // TODO break; #if ! VST_FORCE_DEPRECATED case audioMasterEditFile: // Deprecated in VST SDK 2.4 // TODO break; case audioMasterGetChunkFile: // Deprecated in VST SDK 2.4 // TODO break; case audioMasterGetInputSpeakerArrangement: // Deprecated in VST SDK 2.4 // TODO break; #endif default: carla_debug("CarlaPluginVST2::handleAudioMasterCallback(%02i:%s, %i, " P_INTPTR ", %p, %f) UNDEF", opcode, vstMasterOpcode2str(opcode), index, value, ptr, static_cast(opt)); break; } return ret; // unused (void)opt; } bool canDo(const char* const feature) const noexcept { try { return (dispatcher(effCanDo, 0, 0, const_cast(feature)) == 1); } CARLA_SAFE_EXCEPTION_RETURN("vstPluginCanDo", false); } bool hasMidiInput() const noexcept { return (fEffect->flags & effFlagsIsSynth) != 0 || (pData->hints & PLUGIN_WANTS_MIDI_INPUT) != 0 || canDo("receiveVstEvents") || canDo("receiveVstMidiEvent"); } bool hasMidiOutput() const noexcept { return canDo("sendVstEvents") || canDo("sendVstMidiEvent"); } // ------------------------------------------------------------------- const void* getNativeDescriptor() const noexcept override { return fEffect; } // ------------------------------------------------------------------- public: bool init(const CarlaPluginPtr plugin, const char* const filename, const char* const name, const int64_t uniqueId, const uint options) { CARLA_SAFE_ASSERT_RETURN(pData->engine != nullptr, false); // --------------------------------------------------------------- // first checks if (pData->client != nullptr) { pData->engine->setLastError("Plugin client is already registered"); return false; } if (filename == nullptr || filename[0] == '\0') { pData->engine->setLastError("null filename"); return false; } // --------------------------------------------------------------- VST_Function vstFn; #ifdef CARLA_OS_MAC CarlaString filenameCheck(filename); filenameCheck.toLower(); if (filenameCheck.endsWith(".vst") || filenameCheck.endsWith(".vst/")) { // FIXME assert returns, set engine error const CFURLRef urlRef = CFURLCreateFromFileSystemRepresentation(0, (const UInt8*)filename, (CFIndex)strlen(filename), true); CARLA_SAFE_ASSERT_RETURN(urlRef != nullptr, false); fMacBundleRef = CFBundleCreate(kCFAllocatorDefault, urlRef); CFRelease(urlRef); CARLA_SAFE_ASSERT_RETURN(fMacBundleRef != nullptr, false); if (! CFBundleLoadExecutable(fMacBundleRef)) { CFRelease(fMacBundleRef); fMacBundleRef = nullptr; pData->engine->setLastError("Failed to load VST bundle executable"); return false; } vstFn = (VST_Function)CFBundleGetFunctionPointerForName(fMacBundleRef, CFSTR("VSTPluginMain")); if (vstFn == nullptr) vstFn = (VST_Function)CFBundleGetFunctionPointerForName(fMacBundleRef, CFSTR("main_macho")); if (vstFn == nullptr) { CFBundleUnloadExecutable(fMacBundleRef); CFRelease(fMacBundleRef); fMacBundleRef = nullptr; pData->engine->setLastError("Not a VST plugin"); return false; } fMacBundleRefNum = CFBundleOpenBundleResourceMap(fMacBundleRef); } else #endif { // ----------------------------------------------------------- // open DLL if (! pData->libOpen(filename)) { pData->engine->setLastError(pData->libError(filename)); return false; } // ----------------------------------------------------------- // get DLL main entry vstFn = pData->libSymbol("VSTPluginMain"); if (vstFn == nullptr) { vstFn = pData->libSymbol("main"); if (vstFn == nullptr) { pData->engine->setLastError("Could not find the VST main entry in the plugin library"); return false; } } } // --------------------------------------------------------------- // initialize plugin (part 1) sCurrentUniqueId = static_cast(uniqueId); sLastCarlaPluginVST2 = this; bool wasTriggered, wasThrown = false; { const ScopedAbortCatcher sac; try { fEffect = vstFn(carla_vst_audioMasterCallback); } CARLA_CATCH_UNWIND catch(...) { wasThrown = true; } wasTriggered = sac.wasTriggered(); } // try again if plugin blows if (wasTriggered || wasThrown) { const ScopedAbortCatcher sac; try { fEffect = vstFn(carla_vst_audioMasterCallback); } CARLA_SAFE_EXCEPTION_RETURN("VST init 2nd attempt", false); } sLastCarlaPluginVST2 = nullptr; sCurrentUniqueId = 0; if (fEffect == nullptr) { pData->engine->setLastError("Plugin failed to initialize"); return false; } if (fEffect->magic != kEffectMagic) { pData->engine->setLastError("Plugin is not valid (wrong vst effect magic code)"); return false; } fEffect->ptr1 = this; const int32_t iBufferSize = static_cast(fBufferSize); const float fSampleRate = static_cast(pData->engine->getSampleRate()); dispatcher(effIdentify); dispatcher(effSetProcessPrecision, 0, kVstProcessPrecision32); dispatcher(effSetBlockSizeAndSampleRate, 0, iBufferSize, nullptr, fSampleRate); dispatcher(effSetSampleRate, 0, 0, nullptr, fSampleRate); dispatcher(effSetBlockSize, 0, iBufferSize); dispatcher(effOpen); const bool isShell = (dispatcher(effGetPlugCategory) == kPlugCategShell); if (uniqueId == 0 && isShell) { char strBuf[STR_MAX+1]; carla_zeroChars(strBuf, STR_MAX+1); sCurrentUniqueId = dispatcher(effShellGetNextPlugin, 0, 0, strBuf); dispatcher(effClose); fEffect = nullptr; sLastCarlaPluginVST2 = this; try { fEffect = vstFn(carla_vst_audioMasterCallback); } CARLA_SAFE_EXCEPTION_RETURN("Vst init", false); sLastCarlaPluginVST2 = nullptr; sCurrentUniqueId = 0; dispatcher(effIdentify); dispatcher(effSetProcessPrecision, 0, kVstProcessPrecision32); dispatcher(effSetBlockSizeAndSampleRate, 0, iBufferSize, nullptr, fSampleRate); dispatcher(effSetSampleRate, 0, 0, nullptr, fSampleRate); dispatcher(effSetBlockSize, 0, iBufferSize); dispatcher(effOpen); } if (fEffect->uniqueID == 0 && !isShell) { dispatcher(effClose); fEffect = nullptr; pData->engine->setLastError("Plugin is not valid (no unique ID after being open)"); return false; } // --------------------------------------------------------------- // get info if (name != nullptr && name[0] != '\0') { pData->name = pData->engine->getUniquePluginName(name); } else { char strBuf[STR_MAX+1]; carla_zeroChars(strBuf, STR_MAX+1); dispatcher(effGetEffectName, 0, 0, strBuf); if (strBuf[0] != '\0') pData->name = pData->engine->getUniquePluginName(strBuf); else if (const char* const shortname = std::strrchr(filename, CARLA_OS_SEP)) pData->name = pData->engine->getUniquePluginName(shortname+1); else pData->name = pData->engine->getUniquePluginName("unknown"); } pData->filename = carla_strdup(filename); // --------------------------------------------------------------- // register client pData->client = pData->engine->addClient(plugin); if (pData->client == nullptr || ! pData->client->isOk()) { pData->engine->setLastError("Failed to register plugin client"); return false; } // --------------------------------------------------------------- // initialize plugin (part 2) for (int i = fEffect->numInputs; --i >= 0;) dispatcher(effConnectInput, i, 1); for (int i = fEffect->numOutputs; --i >= 0;) dispatcher(effConnectOutput, i, 1); if (dispatcher(effGetVstVersion) < kVstVersion) pData->hints |= PLUGIN_USES_OLD_VSTSDK; static const char kHasCockosExtensions[] = "hasCockosExtensions"; if (static_cast(dispatcher(effCanDo, 0, 0, const_cast(kHasCockosExtensions))) == 0xbeef0000) pData->hints |= PLUGIN_HAS_COCKOS_EXTENSIONS; // --------------------------------------------------------------- // set default options pData->options = 0x0; if (pData->latency.frames != 0 || hasMidiOutput() || isPluginOptionEnabled(options, PLUGIN_OPTION_FIXED_BUFFERS)) pData->options |= PLUGIN_OPTION_FIXED_BUFFERS; if (fEffect->flags & effFlagsProgramChunks) if (isPluginOptionEnabled(options, PLUGIN_OPTION_USE_CHUNKS)) pData->options |= PLUGIN_OPTION_USE_CHUNKS; if (hasMidiInput()) { if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_CONTROL_CHANGES)) pData->options |= PLUGIN_OPTION_SEND_CONTROL_CHANGES; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_CHANNEL_PRESSURE)) pData->options |= PLUGIN_OPTION_SEND_CHANNEL_PRESSURE; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH)) pData->options |= PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_PITCHBEND)) pData->options |= PLUGIN_OPTION_SEND_PITCHBEND; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_ALL_SOUND_OFF)) pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF; if (isPluginOptionEnabled(options, PLUGIN_OPTION_SEND_PROGRAM_CHANGES)) pData->options |= PLUGIN_OPTION_SEND_PROGRAM_CHANGES; if (isPluginOptionInverseEnabled(options, PLUGIN_OPTION_SKIP_SENDING_NOTES)) pData->options |= PLUGIN_OPTION_SKIP_SENDING_NOTES; } if (fEffect->numPrograms > 1 && (pData->options & PLUGIN_OPTION_SEND_PROGRAM_CHANGES) == 0) if (isPluginOptionEnabled(options, PLUGIN_OPTION_MAP_PROGRAM_CHANGES)) pData->options |= PLUGIN_OPTION_MAP_PROGRAM_CHANGES; return true; } private: int fUnique1; AEffect* fEffect; uint32_t fMidiEventCount; VstMidiEvent fMidiEvents[kPluginMaxMidiEvents*2]; VstTimeInfo fTimeInfo; bool fNeedIdle; void* fLastChunk; bool fIsInitializing; bool fIsProcessing; pthread_t fChangingValuesThread; pthread_t fIdleThread; pthread_t fMainThread; pthread_t fProcThread; #ifdef CARLA_OS_MAC CFBundleRef fMacBundleRef; CFBundleRefNum fMacBundleRefNum; #endif bool fFirstActive; // first process() call after activate() uint32_t fBufferSize; float** fAudioOutBuffers; EngineTimeInfo fLastTimeInfo; struct FixedVstEvents { int32_t numEvents; intptr_t reserved; VstEvent* data[kPluginMaxMidiEvents*2]; FixedVstEvents() noexcept : numEvents(0), reserved(0) { carla_zeroPointers(data, kPluginMaxMidiEvents*2); } CARLA_DECLARE_NON_COPY_STRUCT(FixedVstEvents); } fEvents; struct UI { bool isEmbed; bool isOpen; bool isVisible; CarlaPluginUI* window; UI() noexcept : isEmbed(false), isOpen(false), isVisible(false), window(nullptr) {} ~UI() { CARLA_ASSERT(isEmbed || ! isVisible); if (window != nullptr) { delete window; window = nullptr; } } CARLA_DECLARE_NON_COPY_STRUCT(UI); } fUI; int fUnique2; static intptr_t sCurrentUniqueId; static CarlaPluginVST2* sLastCarlaPluginVST2; // ------------------------------------------------------------------- static bool compareMagic(int32_t magic, const char* name) noexcept { return magic == (int32_t)ByteOrder::littleEndianInt (name) || magic == (int32_t)ByteOrder::bigEndianInt (name); } static int32_t fxbSwap(const int32_t x) noexcept { return (int32_t)ByteOrder::swapIfLittleEndian ((uint32_t) x); } bool loadJuceSaveFormat(const void* const data, const std::size_t dataSize) { if (dataSize < 28) return false; const int32_t* const set = (const int32_t*)data; if (set[1] != 0) return false; if (! compareMagic(set[0], "CcnK")) return false; if (! compareMagic(set[2], "FBCh") && ! compareMagic(set[2], "FJuc")) return false; if (fxbSwap(set[3]) > 1) return false; const int32_t chunkSize = fxbSwap(set[39]); CARLA_SAFE_ASSERT_RETURN(chunkSize > 0, false); if (static_cast(chunkSize + 160) > dataSize) return false; carla_stdout("NOTE: Loading plugin state in VST2/JUCE compatibility mode"); setChunkData(&set[40], static_cast(chunkSize)); return true; } static intptr_t carla_vst_hostCanDo(const char* const feature) { carla_debug("carla_vst_hostCanDo(\"%s\")", feature); if (std::strcmp(feature, "supplyIdle") == 0) return 1; if (std::strcmp(feature, "sendVstEvents") == 0) return 1; if (std::strcmp(feature, "sendVstMidiEvent") == 0) return 1; if (std::strcmp(feature, "sendVstMidiEventFlagIsRealtime") == 0) return 1; if (std::strcmp(feature, "sendVstTimeInfo") == 0) return 1; if (std::strcmp(feature, "receiveVstEvents") == 0) return 1; if (std::strcmp(feature, "receiveVstMidiEvent") == 0) return 1; if (std::strcmp(feature, "receiveVstTimeInfo") == 0) return -1; if (std::strcmp(feature, "reportConnectionChanges") == 0) return -1; if (std::strcmp(feature, "acceptIOChanges") == 0) return 1; if (std::strcmp(feature, "sizeWindow") == 0) return 1; if (std::strcmp(feature, "offline") == 0) return -1; if (std::strcmp(feature, "openFileSelector") == 0) return -1; if (std::strcmp(feature, "closeFileSelector") == 0) return -1; if (std::strcmp(feature, "startStopProcess") == 0) return 1; if (std::strcmp(feature, "supportShell") == 0) return 1; if (std::strcmp(feature, "shellCategory") == 0) return 1; if (std::strcmp(feature, "NIMKPIVendorSpecificCallbacks") == 0) return -1; // unimplemented carla_stderr("carla_vst_hostCanDo(\"%s\") - unknown feature", feature); return 0; } static intptr_t VSTCALLBACK carla_vst_audioMasterCallback(AEffect* effect, int32_t opcode, int32_t index, intptr_t value, void* ptr, float opt) { #if defined(DEBUG) && ! defined(CARLA_OS_WIN) if (opcode != audioMasterGetTime && opcode != audioMasterProcessEvents && opcode != audioMasterGetCurrentProcessLevel && opcode != audioMasterGetOutputLatency) carla_debug("carla_vst_audioMasterCallback(%p, %02i:%s, %i, " P_INTPTR ", %p, %f)", effect, opcode, vstMasterOpcode2str(opcode), index, value, ptr, static_cast(opt)); #endif switch (opcode) { case audioMasterVersion: return kVstVersion; case audioMasterCurrentId: if (sCurrentUniqueId != 0) return sCurrentUniqueId; break; case audioMasterGetVendorString: CARLA_SAFE_ASSERT_RETURN(ptr != nullptr, 0); std::strcpy((char*)ptr, "falkTX"); return 1; case audioMasterGetProductString: CARLA_SAFE_ASSERT_RETURN(ptr != nullptr, 0); std::strcpy((char*)ptr, "Carla"); return 1; case audioMasterGetVendorVersion: return CARLA_VERSION_HEX; case audioMasterCanDo: CARLA_SAFE_ASSERT_RETURN(ptr != nullptr, 0); return carla_vst_hostCanDo((const char*)ptr); case audioMasterGetLanguage: return kVstLangEnglish; } // Check if 'resvd1' points to us, otherwise register ourselves if possible CarlaPluginVST2* self = nullptr; if (effect != nullptr) { if (effect->ptr1 != nullptr) { self = (CarlaPluginVST2*)effect->ptr1; if (self->fUnique1 != self->fUnique2) self = nullptr; } if (self != nullptr) { if (self->fEffect == nullptr) self->fEffect = effect; if (self->fEffect != effect) { carla_stderr2("carla_vst_audioMasterCallback() - host pointer mismatch: %p != %p", self->fEffect, effect); self = nullptr; } } else if (sLastCarlaPluginVST2 != nullptr) { effect->ptr1 = sLastCarlaPluginVST2; self = sLastCarlaPluginVST2; } } return (self != nullptr) ? self->handleAudioMasterCallback(opcode, index, value, ptr, opt) : 0; } CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaPluginVST2) }; intptr_t CarlaPluginVST2::sCurrentUniqueId = 0; CarlaPluginVST2* CarlaPluginVST2::sLastCarlaPluginVST2 = nullptr; CARLA_BACKEND_END_NAMESPACE // -------------------------------------------------------------------------------------------------------------------- CARLA_BACKEND_START_NAMESPACE CarlaPluginPtr CarlaPlugin::newVST2(const Initializer& init) { carla_debug("CarlaPlugin::newVST2({%p, \"%s\", \"%s\", " P_INT64 "})", init.engine, init.filename, init.name, init.uniqueId); #ifdef USE_JUCE_FOR_VST2 if (std::getenv("CARLA_DO_NOT_USE_JUCE_FOR_VST2") == nullptr) return newJuce(init, "VST2"); #endif std::shared_ptr plugin(new CarlaPluginVST2(init.engine, init.id)); if (! plugin->init(plugin, init.filename, init.name, init.uniqueId, init.options)) return nullptr; return plugin; } // -------------------------------------------------------------------------------------------------------------------- CARLA_BACKEND_END_NAMESPACE Carla-2.4.2/source/backend/plugin/CarlaPluginVST3.cpp000066400000000000000000000123351420416754300223250ustar00rootroot00000000000000/* * Carla VST3 Plugin * Copyright (C) 2014-2021 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "CarlaPluginInternal.hpp" #include "CarlaEngine.hpp" #include "AppConfig.h" #if defined(USING_JUCE) && JUCE_PLUGINHOST_VST3 # define USE_JUCE_FOR_VST3 #endif #include "CarlaVst3Utils.hpp" #include "CarlaPluginUI.hpp" CARLA_BACKEND_START_NAMESPACE // -------------------------------------------------------------------------------------------------------------------- class CarlaPluginVST3 : public CarlaPlugin, private CarlaPluginUI::Callback { public: CarlaPluginVST3(CarlaEngine* const engine, const uint id) : CarlaPlugin(engine, id), fUI() { carla_debug("CarlaPluginVST3::CarlaPluginVST3(%p, %i)", engine, id); } ~CarlaPluginVST3() override { carla_debug("CarlaPluginVST3::~CarlaPluginVST3()"); pData->singleMutex.lock(); pData->masterMutex.lock(); if (pData->client != nullptr && pData->client->isActive()) pData->client->deactivate(true); if (pData->active) { deactivate(); pData->active = false; } } // ------------------------------------------------------------------- // Information (base) PluginType getType() const noexcept override { return PLUGIN_VST3; } // ------------------------------------------------------------------- // Information (count) // nothing // ------------------------------------------------------------------- // Information (per-plugin data) // ------------------------------------------------------------------- // Set data (state) // nothing // ------------------------------------------------------------------- // Set data (internal stuff) // ------------------------------------------------------------------- // Set data (plugin-specific stuff) // ------------------------------------------------------------------- // Set ui stuff // ------------------------------------------------------------------- // Plugin state // ------------------------------------------------------------------- // Plugin processing // ------------------------------------------------------------------- // Plugin buffers // ------------------------------------------------------------------- // Post-poned UI Stuff // nothing // ------------------------------------------------------------------- protected: void handlePluginUIClosed() override { // CARLA_SAFE_ASSERT_RETURN(fUI.window != nullptr,); carla_debug("CarlaPluginVST3::handlePluginUIClosed()"); showCustomUI(false); pData->engine->callback(true, true, ENGINE_CALLBACK_UI_STATE_CHANGED, pData->id, 0, 0, 0, 0.0f, nullptr); } void handlePluginUIResized(const uint width, const uint height) override { // CARLA_SAFE_ASSERT_RETURN(fUI.window != nullptr,); carla_debug("CarlaPluginVST3::handlePluginUIResized(%u, %u)", width, height); return; // unused (void)width; (void)height; } private: struct UI { bool isEmbed; bool isOpen; bool isVisible; CarlaPluginUI* window; UI() noexcept : isEmbed(false), isOpen(false), isVisible(false), window(nullptr) {} ~UI() { CARLA_ASSERT(isEmbed || ! isVisible); if (window != nullptr) { delete window; window = nullptr; } } CARLA_DECLARE_NON_COPY_STRUCT(UI); } fUI; }; // -------------------------------------------------------------------------------------------------------------------- CarlaPluginPtr CarlaPlugin::newVST3(const Initializer& init) { carla_debug("CarlaPlugin::newVST3({%p, \"%s\", \"%s\", " P_INT64 "})", init.engine, init.filename, init.name, init.uniqueId); #ifdef USE_JUCE_FOR_VST3 if (std::getenv("CARLA_DO_NOT_USE_JUCE_FOR_VST3") == nullptr) return newJuce(init, "VST3"); #endif init.engine->setLastError("VST3 support not available"); return nullptr; /* std::shared_ptr plugin(new CarlaPluginVST2(init.engine, init.id)); if (! plugin->init(plugin, init.filename, init.name, init.uniqueId, init.options)) return nullptr; return plugin; */ } // ------------------------------------------------------------------------------------------------------------------- CARLA_BACKEND_END_NAMESPACE Carla-2.4.2/source/backend/plugin/Makefile000066400000000000000000000045511420416754300204010ustar00rootroot00000000000000#!/usr/bin/make -f # Makefile for carla-plugin # # ------------------------- # # Created by falkTX # CWD=../.. include ../Makefile.mk # Workaround GCC bug ifeq ($(TESTBUILD),true) ifeq ($(USING_JUCE),true) BUILD_CXX_FLAGS += -Wno-undef endif endif BUILD_CXX_FLAGS += $(MAGIC_FLAGS) # --------------------------------------------------------------------------------------------------------------------- OBJS = \ $(OBJDIR)/CarlaPlugin.cpp.o \ $(OBJDIR)/CarlaPluginInternal.cpp.o \ $(OBJDIR)/CarlaPluginNative.cpp.o \ $(OBJDIR)/CarlaPluginBridge.cpp.o \ $(OBJDIR)/CarlaPluginLADSPADSSI.cpp.o \ $(OBJDIR)/CarlaPluginLV2.cpp.o \ $(OBJDIR)/CarlaPluginVST2.cpp.o \ $(OBJDIR)/CarlaPluginVST3.cpp.o \ $(OBJDIR)/CarlaPluginAU.cpp.o \ $(OBJDIR)/CarlaPluginJuce.cpp.o \ $(OBJDIR)/CarlaPluginFluidSynth.cpp.o \ $(OBJDIR)/CarlaPluginSFZero.cpp.o ifneq ($(STATIC_PLUGIN_TARGET),true) OBJS += $(OBJDIR)/CarlaPluginJack.cpp.o endif TARGETS = \ $(MODULEDIR)/carla_plugin.a # --------------------------------------------------------------------------------------------------------------------- all: $(TARGETS) # --------------------------------------------------------------------------------------------------------------------- clean: rm -f $(OBJS) $(TARGETS) debug: $(MAKE) DEBUG=true # --------------------------------------------------------------------------------------------------------------------- $(MODULEDIR)/carla_plugin.a: $(OBJS) -@mkdir -p $(MODULEDIR) @echo "Creating carla_plugin.a" @rm -f $@ @$(AR) crs $@ $^ # --------------------------------------------------------------------------------------------------------------------- $(OBJDIR)/CarlaPluginFluidSynth.cpp.o: CarlaPluginFluidSynth.cpp -@mkdir -p $(OBJDIR) @echo "Compiling $<" @$(CXX) $< $(BUILD_CXX_FLAGS) $(FLUIDSYNTH_FLAGS) -c -o $@ ifeq ($(MACOS),true) $(OBJDIR)/CarlaPluginVST2.cpp.o: CarlaPluginVST2.cpp -@mkdir -p $(OBJDIR) @echo "Compiling $<" @$(CXX) $< $(BUILD_CXX_FLAGS) -ObjC++ -c -o $@ $(OBJDIR)/CarlaPluginJuce.cpp.o: CarlaPluginJuce.cpp -@mkdir -p $(OBJDIR) @echo "Compiling $<" @$(CXX) $< $(BUILD_CXX_FLAGS) -ObjC++ -c -o $@ endif $(OBJDIR)/%.cpp.o: %.cpp -@mkdir -p $(OBJDIR) @echo "Compiling $<" @$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ -include $(OBJS:%.o=%.d) # --------------------------------------------------------------------------------------------------------------------- Carla-2.4.2/source/backend/utils/000077500000000000000000000000001420416754300165765ustar00rootroot00000000000000Carla-2.4.2/source/backend/utils/.kdev_include_paths000066400000000000000000000000601420416754300224260ustar00rootroot00000000000000../ ../../includes/ ../../modules/ ../../utils/ Carla-2.4.2/source/backend/utils/CachedPlugins.cpp000066400000000000000000000625101420416754300220170ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2022 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "CarlaUtils.h" #include "CarlaNative.h" #include "CarlaString.hpp" #include "CarlaBackendUtils.hpp" #include "CarlaLv2Utils.hpp" #if defined(USING_JUCE) && defined(CARLA_OS_MAC) # include "AppConfig.h" # include "juce_audio_processors/juce_audio_processors.h" #endif #include "water/containers/Array.h" #include "water/files/File.h" namespace CB = CARLA_BACKEND_NAMESPACE; // ------------------------------------------------------------------------------------------------------------------- static const char* const gCachedPluginsNullCharPtr = ""; static bool isCachedPluginType(const CB::PluginType ptype) { switch (ptype) { case CB::PLUGIN_INTERNAL: case CB::PLUGIN_LV2: case CB::PLUGIN_AU: case CB::PLUGIN_SFZ: case CB::PLUGIN_JSFX: return true; default: return false; } } // ------------------------------------------------------------------------------------------------------------------- _CarlaCachedPluginInfo::_CarlaCachedPluginInfo() noexcept : valid(false), category(CB::PLUGIN_CATEGORY_NONE), hints(0x0), audioIns(0), audioOuts(0), cvIns(0), cvOuts(0), midiIns(0), midiOuts(0), parameterIns(0), parameterOuts(0), name(gCachedPluginsNullCharPtr), label(gCachedPluginsNullCharPtr), maker(gCachedPluginsNullCharPtr), copyright(gCachedPluginsNullCharPtr) {} // ------------------------------------------------------------------------------------------------------------------- static water::Array gSFZs; static void findSFZs(const char* const sfzPaths) { gSFZs.clearQuick(); CARLA_SAFE_ASSERT_RETURN(sfzPaths != nullptr,); if (sfzPaths[0] == '\0') return; const water::StringArray splitPaths(water::StringArray::fromTokens(sfzPaths, CARLA_OS_SPLIT_STR, "")); for (water::String *it = splitPaths.begin(), *end = splitPaths.end(); it != end; ++it) { water::Array results; if (water::File(*it).findChildFiles(results, water::File::findFiles|water::File::ignoreHiddenFiles, true, "*.sfz") > 0) gSFZs.addArray(results); } } // ------------------------------------------------------------------------------------------------------------------- static const CarlaCachedPluginInfo* get_cached_plugin_internal(const NativePluginDescriptor& desc) { static CarlaCachedPluginInfo info; info.category = static_cast(desc.category); info.hints = 0x0; if (desc.hints & NATIVE_PLUGIN_IS_RTSAFE) info.hints |= CB::PLUGIN_IS_RTSAFE; if (desc.hints & NATIVE_PLUGIN_IS_SYNTH) info.hints |= CB::PLUGIN_IS_SYNTH; if (desc.hints & NATIVE_PLUGIN_HAS_UI) info.hints |= CB::PLUGIN_HAS_CUSTOM_UI; if (desc.hints & NATIVE_PLUGIN_HAS_INLINE_DISPLAY) info.hints |= CB::PLUGIN_HAS_INLINE_DISPLAY; if (desc.hints & NATIVE_PLUGIN_NEEDS_FIXED_BUFFERS) info.hints |= CB::PLUGIN_NEEDS_FIXED_BUFFERS; if (desc.hints & NATIVE_PLUGIN_NEEDS_UI_MAIN_THREAD) info.hints |= CB::PLUGIN_NEEDS_UI_MAIN_THREAD; if (desc.hints & NATIVE_PLUGIN_USES_MULTI_PROGS) info.hints |= CB::PLUGIN_USES_MULTI_PROGS; info.valid = true; info.audioIns = desc.audioIns; info.audioOuts = desc.audioOuts; info.cvIns = desc.cvIns; info.cvOuts = desc.cvOuts; info.midiIns = desc.midiIns; info.midiOuts = desc.midiOuts; info.parameterIns = desc.paramIns; info.parameterOuts = desc.paramOuts; info.name = desc.name; info.label = desc.label; info.maker = desc.maker; info.copyright = desc.copyright; return &info; } // ------------------------------------------------------------------------------------------------------------------- static const CarlaCachedPluginInfo* get_cached_plugin_lv2(Lv2WorldClass& lv2World, Lilv::Plugin& lilvPlugin) { static CarlaCachedPluginInfo info; info.valid = false; bool supported = true; // ---------------------------------------------------------------------------------------------------------------- // text data { static CarlaString suri, sname, smaker, slicense; suri.clear(); sname.clear(); smaker.clear(); slicense.clear(); suri = lilvPlugin.get_uri().as_uri(); if (char* const bundle = lilv_file_uri_parse(lilvPlugin.get_bundle_uri().as_uri(), nullptr)) { water::File fbundle(bundle); lilv_free(bundle); suri = (fbundle.getFileName() + CARLA_OS_SEP).toRawUTF8() + suri; } else { suri = CARLA_OS_SEP_STR + suri; } #if 0 // def HAVE_FLUIDSYNTH // If we have fluidsynth support built-in, loading these plugins will lead to issues if (suri == "urn:ardour:a-fluidsynth") return &info; if (suri == "http://calf.sourceforge.net/plugins/Fluidsynth") return &info; #endif if (LilvNode* const nameNode = lilv_plugin_get_name(lilvPlugin.me)) { if (const char* const name = lilv_node_as_string(nameNode)) sname = name; lilv_node_free(nameNode); } if (LilvNode* const authorNode = lilv_plugin_get_author_name(lilvPlugin.me)) { if (const char* const author = lilv_node_as_string(authorNode)) smaker = author; lilv_node_free(authorNode); } Lilv::Nodes licenseNodes(lilvPlugin.get_value(lv2World.doap_license)); if (licenseNodes.size() > 0) { if (LilvNode* const licenseNode = lilv_nodes_get_first(licenseNodes.me)) { if (const char* const license = lilv_node_as_string(licenseNode)) slicense = license; // lilv_node_free(licenseNode); } } lilv_nodes_free(const_cast(licenseNodes.me)); info.name = sname.buffer(); info.label = suri.buffer(); info.maker = smaker.buffer(); info.copyright = slicense.buffer(); } // ---------------------------------------------------------------------------------------------------------------- // features info.hints = 0x0; { Lilv::UIs lilvUIs(lilvPlugin.get_uis()); if (lilvUIs.size() > 0) info.hints |= CB::PLUGIN_HAS_CUSTOM_UI; #ifdef CARLA_OS_LINUX else if (lilvPlugin.get_modgui_resources_directory().as_uri() != nullptr) info.hints |= CB::PLUGIN_HAS_CUSTOM_UI; #endif lilv_nodes_free(const_cast(lilvUIs.me)); } { Lilv::Nodes lilvRequiredFeatureNodes(lilvPlugin.get_required_features()); LILV_FOREACH(nodes, it, lilvRequiredFeatureNodes) { Lilv::Node lilvFeatureNode(lilvRequiredFeatureNodes.get(it)); const char* const featureURI(lilvFeatureNode.as_uri()); CARLA_SAFE_ASSERT_CONTINUE(featureURI != nullptr); if (! is_lv2_feature_supported(featureURI)) { if (std::strcmp(featureURI, LV2_DATA_ACCESS_URI) == 0 || std::strcmp(featureURI, LV2_INSTANCE_ACCESS_URI) == 0) { // we give a warning about this below continue; } supported = false; carla_stderr("LV2 plugin '%s' requires unsupported feature '%s'", info.label, featureURI); } } lilv_nodes_free(const_cast(lilvRequiredFeatureNodes.me)); } { Lilv::Nodes lilvSupportedFeatureNodes(lilvPlugin.get_supported_features()); LILV_FOREACH(nodes, it, lilvSupportedFeatureNodes) { Lilv::Node lilvFeatureNode(lilvSupportedFeatureNodes.get(it)); const char* const featureURI(lilvFeatureNode.as_uri()); CARLA_SAFE_ASSERT_CONTINUE(featureURI != nullptr); /**/ if (std::strcmp(featureURI, LV2_CORE__hardRTCapable) == 0) { info.hints |= CB::PLUGIN_IS_RTSAFE; } else if (std::strcmp(featureURI, LV2_INLINEDISPLAY__queue_draw) == 0) { info.hints |= CB::PLUGIN_HAS_INLINE_DISPLAY; } else if (std::strcmp(featureURI, LV2_DATA_ACCESS_URI) == 0 || std::strcmp(featureURI, LV2_INSTANCE_ACCESS_URI) == 0) { carla_stderr("LV2 plugin '%s' DSP wants UI feature '%s', ignoring this", info.label, featureURI); } } lilv_nodes_free(const_cast(lilvSupportedFeatureNodes.me)); } // ---------------------------------------------------------------------------------------------------------------- // category info.category = CB::PLUGIN_CATEGORY_NONE; { Lilv::Nodes typeNodes(lilvPlugin.get_value(lv2World.rdf_type)); if (typeNodes.size() > 0) { if (typeNodes.contains(lv2World.class_allpass)) info.category = CB::PLUGIN_CATEGORY_FILTER; if (typeNodes.contains(lv2World.class_amplifier)) info.category = CB::PLUGIN_CATEGORY_DYNAMICS; if (typeNodes.contains(lv2World.class_analyzer)) info.category = CB::PLUGIN_CATEGORY_UTILITY; if (typeNodes.contains(lv2World.class_bandpass)) info.category = CB::PLUGIN_CATEGORY_FILTER; if (typeNodes.contains(lv2World.class_chorus)) info.category = CB::PLUGIN_CATEGORY_MODULATOR; if (typeNodes.contains(lv2World.class_comb)) info.category = CB::PLUGIN_CATEGORY_FILTER; if (typeNodes.contains(lv2World.class_compressor)) info.category = CB::PLUGIN_CATEGORY_DYNAMICS; if (typeNodes.contains(lv2World.class_constant)) info.category = CB::PLUGIN_CATEGORY_OTHER; if (typeNodes.contains(lv2World.class_converter)) info.category = CB::PLUGIN_CATEGORY_UTILITY; if (typeNodes.contains(lv2World.class_delay)) info.category = CB::PLUGIN_CATEGORY_DELAY; if (typeNodes.contains(lv2World.class_distortion)) info.category = CB::PLUGIN_CATEGORY_DISTORTION; if (typeNodes.contains(lv2World.class_dynamics)) info.category = CB::PLUGIN_CATEGORY_DYNAMICS; if (typeNodes.contains(lv2World.class_eq)) info.category = CB::PLUGIN_CATEGORY_EQ; if (typeNodes.contains(lv2World.class_envelope)) info.category = CB::PLUGIN_CATEGORY_DYNAMICS; if (typeNodes.contains(lv2World.class_expander)) info.category = CB::PLUGIN_CATEGORY_DYNAMICS; if (typeNodes.contains(lv2World.class_filter)) info.category = CB::PLUGIN_CATEGORY_FILTER; if (typeNodes.contains(lv2World.class_flanger)) info.category = CB::PLUGIN_CATEGORY_MODULATOR; if (typeNodes.contains(lv2World.class_function)) info.category = CB::PLUGIN_CATEGORY_UTILITY; if (typeNodes.contains(lv2World.class_gate)) info.category = CB::PLUGIN_CATEGORY_DYNAMICS; if (typeNodes.contains(lv2World.class_generator)) info.category = CB::PLUGIN_CATEGORY_OTHER; if (typeNodes.contains(lv2World.class_highpass)) info.category = CB::PLUGIN_CATEGORY_FILTER; if (typeNodes.contains(lv2World.class_limiter)) info.category = CB::PLUGIN_CATEGORY_DYNAMICS; if (typeNodes.contains(lv2World.class_lowpass)) info.category = CB::PLUGIN_CATEGORY_FILTER; if (typeNodes.contains(lv2World.class_mixer)) info.category = CB::PLUGIN_CATEGORY_UTILITY; if (typeNodes.contains(lv2World.class_modulator)) info.category = CB::PLUGIN_CATEGORY_MODULATOR; if (typeNodes.contains(lv2World.class_multiEQ)) info.category = CB::PLUGIN_CATEGORY_EQ; if (typeNodes.contains(lv2World.class_oscillator)) info.category = CB::PLUGIN_CATEGORY_OTHER; if (typeNodes.contains(lv2World.class_paraEQ)) info.category = CB::PLUGIN_CATEGORY_EQ; if (typeNodes.contains(lv2World.class_phaser)) info.category = CB::PLUGIN_CATEGORY_MODULATOR; if (typeNodes.contains(lv2World.class_pitch)) info.category = CB::PLUGIN_CATEGORY_OTHER; if (typeNodes.contains(lv2World.class_reverb)) info.category = CB::PLUGIN_CATEGORY_DELAY; if (typeNodes.contains(lv2World.class_simulator)) info.category = CB::PLUGIN_CATEGORY_OTHER; if (typeNodes.contains(lv2World.class_spatial)) info.category = CB::PLUGIN_CATEGORY_OTHER; if (typeNodes.contains(lv2World.class_spectral)) info.category = CB::PLUGIN_CATEGORY_OTHER; if (typeNodes.contains(lv2World.class_utility)) info.category = CB::PLUGIN_CATEGORY_UTILITY; if (typeNodes.contains(lv2World.class_waveshaper)) info.category = CB::PLUGIN_CATEGORY_DISTORTION; if (typeNodes.contains(lv2World.class_instrument)) { info.category = CB::PLUGIN_CATEGORY_SYNTH; info.hints |= CB::PLUGIN_IS_SYNTH; } } lilv_nodes_free(const_cast(typeNodes.me)); } // ---------------------------------------------------------------------------------------------------------------- // number data info.audioIns = 0; info.audioOuts = 0; info.cvIns = 0; info.cvOuts = 0; info.midiIns = 0; info.midiOuts = 0; info.parameterIns = 0; info.parameterOuts = 0; for (uint i=0, count=lilvPlugin.get_num_ports(); i(supportNodes.me)); } else if (lilvPort.is_a(lv2World.port_event)) { if (lilvPort.supports_event(lv2World.midi_event)) { if (isInput) ++(info.midiIns); else ++(info.midiOuts); } } else if (lilvPort.is_a(lv2World.port_midi)) { if (isInput) ++(info.midiIns); else ++(info.midiOuts); } else { const LilvNode* const symbolNode = lilvPort.get_symbol(); CARLA_SAFE_ASSERT_CONTINUE(symbolNode != nullptr && lilv_node_is_string(symbolNode)); const char* const symbol = lilv_node_as_string(symbolNode); CARLA_SAFE_ASSERT_CONTINUE(symbol != nullptr); supported = false; carla_stderr("LV2 plugin '%s' port '%s' is required but has unsupported type", info.label, symbol); } } if (supported) info.valid = true; return &info; } // ------------------------------------------------------------------------------------------------------------------- #if defined(USING_JUCE) && defined(CARLA_OS_MAC) static juce::StringArray gCachedAuPluginResults; static void findAUs() { if (gCachedAuPluginResults.size() != 0) return; juce::AudioUnitPluginFormat auFormat; gCachedAuPluginResults = auFormat.searchPathsForPlugins(juce::FileSearchPath(), false, false); } static const CarlaCachedPluginInfo* get_cached_plugin_au(const juce::String pluginId) { static CarlaCachedPluginInfo info; static CarlaString sname, slabel, smaker; info.valid = false; juce::AudioUnitPluginFormat auFormat; juce::OwnedArray results; auFormat.findAllTypesForFile(results, pluginId); CARLA_SAFE_ASSERT_RETURN(results.size() > 0, &info); CARLA_SAFE_ASSERT(results.size() == 1); juce::PluginDescription* const desc(results[0]); CARLA_SAFE_ASSERT_RETURN(desc != nullptr, &info); info.category = CB::getPluginCategoryFromName(desc->category.toRawUTF8()); info.hints = 0x0; info.valid = true; if (desc->isInstrument) info.hints |= CB::PLUGIN_IS_SYNTH; if (true) info.hints |= CB::PLUGIN_HAS_CUSTOM_UI; info.audioIns = static_cast(desc->numInputChannels); info.audioOuts = static_cast(desc->numOutputChannels); info.cvIns = 0; info.cvOuts = 0; info.midiIns = desc->isInstrument ? 1 : 0; info.midiOuts = 0; info.parameterIns = 0; info.parameterOuts = 0; sname = desc->name.toRawUTF8(); slabel = desc->fileOrIdentifier.toRawUTF8(); smaker = desc->manufacturerName.toRawUTF8(); info.name = sname; info.label = slabel; info.maker = smaker; info.copyright = gCachedPluginsNullCharPtr; return &info; } #endif // ------------------------------------------------------------------------------------------------------------------- static const CarlaCachedPluginInfo* get_cached_plugin_sfz(const water::File& file) { static CarlaCachedPluginInfo info; static CarlaString name, filename; name = file.getFileNameWithoutExtension().toRawUTF8(); name.replace('_',' '); filename = file.getFullPathName().toRawUTF8(); info.category = CB::PLUGIN_CATEGORY_SYNTH; info.hints = CB::PLUGIN_IS_SYNTH; // CB::PLUGIN_IS_RTSAFE info.valid = true; info.audioIns = 0; info.audioOuts = 2; info.cvIns = 0; info.cvOuts = 0; info.midiIns = 1; info.midiOuts = 0; info.parameterIns = 0; info.parameterOuts = 1; info.name = name.buffer(); info.label = filename.buffer(); info.maker = gCachedPluginsNullCharPtr; info.copyright = gCachedPluginsNullCharPtr; return &info; } // ------------------------------------------------------------------------------------------------------------------- uint carla_get_cached_plugin_count(CB::PluginType ptype, const char* pluginPath) { CARLA_SAFE_ASSERT_RETURN(isCachedPluginType(ptype), 0); carla_debug("carla_get_cached_plugin_count(%i:%s, %s)", ptype, CB::PluginType2Str(ptype), pluginPath); switch (ptype) { case CB::PLUGIN_INTERNAL: { uint32_t count = 0; carla_get_native_plugins_data(&count); return count; } case CB::PLUGIN_LV2: { Lv2WorldClass& lv2World(Lv2WorldClass::getInstance()); lv2World.initIfNeeded(pluginPath); return lv2World.getPluginCount(); } #if defined(USING_JUCE) && defined(CARLA_OS_MAC) case CB::PLUGIN_AU: { findAUs(); return static_cast(gCachedAuPluginResults.size()); } #endif case CB::PLUGIN_SFZ: { findSFZs(pluginPath); return static_cast(gSFZs.size()); } default: return 0; } } const CarlaCachedPluginInfo* carla_get_cached_plugin_info(CB::PluginType ptype, uint index) { carla_debug("carla_get_cached_plugin_info(%i:%s, %i)", ptype, CB::PluginType2Str(ptype), index); switch (ptype) { case CB::PLUGIN_INTERNAL: { uint32_t count = 0; const NativePluginDescriptor* const descs(carla_get_native_plugins_data(&count)); CARLA_SAFE_ASSERT_BREAK(index < count); CARLA_SAFE_ASSERT_BREAK(descs != nullptr); const NativePluginDescriptor& desc(descs[index]); return get_cached_plugin_internal(desc); } case CB::PLUGIN_LV2: { Lv2WorldClass& lv2World(Lv2WorldClass::getInstance()); const LilvPlugin* const cPlugin(lv2World.getPluginFromIndex(index)); CARLA_SAFE_ASSERT_BREAK(cPlugin != nullptr); Lilv::Plugin lilvPlugin(cPlugin); CARLA_SAFE_ASSERT_BREAK(lilvPlugin.get_uri().is_uri()); return get_cached_plugin_lv2(lv2World, lilvPlugin); } #if defined(USING_JUCE) && defined(CARLA_OS_MAC) case CB::PLUGIN_AU: { CARLA_SAFE_ASSERT_BREAK(index < static_cast(gCachedAuPluginResults.size())); return get_cached_plugin_au(gCachedAuPluginResults.strings.getUnchecked(static_cast(index))); } #endif case CB::PLUGIN_SFZ: { CARLA_SAFE_ASSERT_BREAK(index < static_cast(gSFZs.size())); return get_cached_plugin_sfz(gSFZs.getUnchecked(static_cast(index))); } default: break; } static CarlaCachedPluginInfo info; return &info; } // ------------------------------------------------------------------------------------------------------------------- #ifndef CARLA_PLUGIN_EXPORT # include "../native-plugins/_data.cpp" #endif // ------------------------------------------------------------------------------------------------------------------- Carla-2.4.2/source/backend/utils/Information.cpp000066400000000000000000000155001420416754300215700ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2021 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "CarlaHost.h" #include "CarlaUtils.h" #include "CarlaString.hpp" #if defined(HAVE_FLUIDSYNTH) && !defined(BUILD_BRIDGE_ALTERNATIVE_ARCH) # include #endif #if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wconversion" # pragma GCC diagnostic ignored "-Weffc++" # pragma GCC diagnostic ignored "-Wsign-conversion" # pragma GCC diagnostic ignored "-Wundef" # pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant" #endif #ifdef USING_JUCE # include "AppConfig.h" # include "juce_core/juce_core.h" #endif #ifdef USING_RTAUDIO # include "rtaudio/RtAudio.h" # include "rtmidi/RtMidi.h" #endif #if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) # pragma GCC diagnostic pop #endif #include "water/files/File.h" // ------------------------------------------------------------------------------------------------------------------- const char* carla_get_complete_license_text() { carla_debug("carla_get_complete_license_text()"); static CarlaString retText; if (retText.isEmpty()) { retText = "

This current Carla build is using the following features and 3rd-party code:

" "
    " // Plugin formats "
  • LADSPA plugin support
  • " "
  • DSSI plugin support
  • " "
  • LV2 plugin support
  • " #if defined(USING_JUCE) && JUCE_PLUGINHOST_VST "
  • VST2 plugin support (using JUCE)
  • " #else "
  • VST2 plugin support (using VeSTige header by Javier Serrano Polo)
  • " #endif #if defined(USING_JUCE) && JUCE_PLUGINHOST_VST3 "
  • VST3 plugin support (using JUCE)
  • " #endif #if defined(USING_JUCE) && JUCE_PLUGINHOST_AU "
  • AU plugin support (using JUCE)
  • " #endif // Sample kit libraries #if defined(HAVE_FLUIDSYNTH) && !defined(BUILD_BRIDGE_ALTERNATIVE_ARCH) "
  • FluidSynth library v" FLUIDSYNTH_VERSION " for SF2/3 support
  • " #endif "
  • SFZero module for SFZ support
  • " // misc libs "
  • base64 utilities based on code by Ren\u00E9 Nyffenegger
  • " "
  • dr_mp3 for mp3 file support
  • " #ifdef HAVE_LIBLO "
  • liblo library for OSC support
  • " #endif #ifdef HAVE_SNDFILE "
  • libsndfile library for base audio file support
  • " #endif "
  • rtmempool library by Nedko Arnaudov" "
  • serd, sord, sratom and lilv libraries for LV2 discovery
  • " #ifdef USING_RTAUDIO "
  • RtAudio v" RTAUDIO_VERSION " and RtMidi v" RTMIDI_VERSION " for native Audio and MIDI support
  • " #endif "
  • zita-resampler for audio file sample rate resampling
  • " // Internal plugins "
  • MIDI Sequencer UI code by Perry Nguyen
  • " // External plugins #ifdef HAVE_EXTERNAL_PLUGINS "
  • Nekobi plugin code based on nekobee by Sean Bolton and others
  • " "
  • VectorJuice and WobbleJuice plugin code by Andre Sklenar
  • " # ifdef HAVE_ZYN_DEPS "
  • ZynAddSubFX plugin code by Mark McCurry and Nasca Octavian Paul
  • " # endif #endif // HAVE_EXTERNAL_PLUGINS // end "
"; } return retText; } const char* carla_get_juce_version() { carla_debug("carla_get_juce_version()"); static CarlaString retVersion; #ifdef USING_JUCE if (retVersion.isEmpty()) { if (const char* const version = juce::SystemStats::getJUCEVersion().toRawUTF8()) retVersion = version+6; else retVersion = "Unknown"; } #endif return retVersion; } const char* const* carla_get_supported_file_extensions() { carla_debug("carla_get_supported_file_extensions()"); // NOTE: please keep in sync with CarlaEngine::loadFile!! static const char* const extensions[] = { // Base types "carxp", "carxs", // plugin files and resources #ifdef HAVE_FLUIDSYNTH "sf2", "sf3", #endif #ifdef HAVE_FLUIDSYNTH_INSTPATCH "dls", "gig", #endif #ifdef HAVE_ZYN_DEPS "xmz", "xiz", #endif #ifdef CARLA_OS_MAC "vst", #else "dll", "so", #endif "vst3", // Audio files #ifdef HAVE_SNDFILE "aif", "aifc", "aiff", "au", "bwf", "flac", "htk", "iff", "mat4", "mat5", "oga", "ogg", "opus", "paf", "pvf", "pvf5", "sd2", "sf", "snd", "svx", "vcc", "w64", "wav", "xi", #endif #ifdef HAVE_FFMPEG "3g2", "3gp", "aac", "ac3", "amr", "ape", "mp2", "mp3", "mpc", "wma", # ifndef HAVE_SNDFILE // FFmpeg without sndfile "flac", "oga", "ogg", "w64", "wav", # endif #else // dr_mp3 "mp3", #endif // MIDI files "mid", "midi", // SFZ "sfz", // terminator nullptr }; return extensions; } const char* const* carla_get_supported_features() { carla_debug("carla_get_supported_features()"); static const char* const features[] = { #ifdef HAVE_FLUIDSYNTH "sf2", #endif #ifdef HAVE_FLUIDSYNTH_INSTPATCH "dls", "gig", #endif #ifdef HAVE_HYLIA "link", #endif #ifdef HAVE_LIBLO "osc", #endif #if defined(HAVE_LIBMAGIC) || defined(CARLA_OS_WIN) "bridges", #endif #ifdef HAVE_PYQT "gui", #endif #ifdef USING_JUCE "juce", "vst3", # if defined(CARLA_OS_MAC) "au", # endif #endif nullptr }; return features; } // ------------------------------------------------------------------------------------------------------------------- const char* carla_get_library_filename() { carla_debug("carla_get_library_filename()"); static CarlaString ret; if (ret.isEmpty()) { using water::File; ret = File(File::getSpecialLocation(File::currentExecutableFile)).getFullPathName().toRawUTF8(); } return ret; } const char* carla_get_library_folder() { carla_debug("carla_get_library_folder()"); static CarlaString ret; if (ret.isEmpty()) { using water::File; ret = File(File::getSpecialLocation(File::currentExecutableFile).getParentDirectory()).getFullPathName().toRawUTF8(); } return ret; } // ------------------------------------------------------------------------------------------------------------------- Carla-2.4.2/source/backend/utils/JUCE.cpp000066400000000000000000000046751420416754300200440ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2020 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "CarlaUtils.h" #include "CarlaUtils.hpp" #ifdef USING_JUCE // ------------------------------------------------------------------------------------------------------------------- #if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wconversion" # pragma GCC diagnostic ignored "-Weffc++" # pragma GCC diagnostic ignored "-Wsign-conversion" # pragma GCC diagnostic ignored "-Wundef" #endif #include "AppConfig.h" #include "juce_events/juce_events.h" #if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) # pragma GCC diagnostic pop #endif // ------------------------------------------------------------------------------------------------------------------- void carla_juce_init() { juce::initialiseJuce_GUI(); #if !(defined(CARLA_OS_MAC) || defined(CARLA_OS_WIN)) juce::MessageManager::getInstance()->setCurrentThreadAsMessageThread(); #endif } void carla_juce_idle() { #if !(defined(CARLA_OS_MAC) || defined(CARLA_OS_WIN)) const juce::MessageManager* const msgMgr(juce::MessageManager::getInstanceWithoutCreating()); CARLA_SAFE_ASSERT_RETURN(msgMgr != nullptr,); for (; msgMgr->dispatchNextMessageOnSystemQueue(true);) {} #endif } void carla_juce_cleanup() { juce::shutdownJuce_GUI(); } // ------------------------------------------------------------------------------------------------------------------- #else // USING_JUCE // ------------------------------------------------------------------------------------------------------------------- void carla_juce_init() {} void carla_juce_idle() {} void carla_juce_cleanup() {} // ------------------------------------------------------------------------------------------------------------------- #endif // USING_JUCE Carla-2.4.2/source/backend/utils/Makefile000066400000000000000000000056261420416754300202470ustar00rootroot00000000000000#!/usr/bin/make -f # Makefile for carla-plugin # # ------------------------- # # Created by falkTX # CWD=../.. include ../Makefile.mk # --------------------------------------------------------------------------------------------------------------------- BUILD_CXX_FLAGS += $(FLUIDSYNTH_FLAGS) # --------------------------------------------------------------------------------------------------------------------- OBJS = \ $(OBJDIR)/CachedPlugins.cpp.o \ $(OBJDIR)/Information.cpp.o \ $(OBJDIR)/JUCE.cpp.o \ $(OBJDIR)/PipeClient.cpp.o \ $(OBJDIR)/System.cpp.o \ $(OBJDIR)/Windows.cpp.o TARGETS = $(BINDIR)/libcarla_utils$(LIB_EXT) # --------------------------------------------------------------------------------------------------------------------- LIBS = $(MODULEDIR)/lilv.a LIBS += $(MODULEDIR)/water.files.a ifeq ($(USING_JUCE),true) LIBS += $(MODULEDIR)/juce_audio_basics.a LIBS += $(MODULEDIR)/juce_audio_processors.a LIBS += $(MODULEDIR)/juce_core.a LIBS += $(MODULEDIR)/juce_data_structures.a LIBS += $(MODULEDIR)/juce_events.a LIBS += $(MODULEDIR)/juce_graphics.a LIBS += $(MODULEDIR)/juce_gui_basics.a ifeq ($(USING_JUCE_GUI_EXTRA),true) LIBS += $(MODULEDIR)/juce_gui_extra.a endif endif LINK_FLAGS += $(LILV_LIBS) LINK_FLAGS += $(WATER_LIBS) ifeq ($(HAVE_X11),true) LINK_FLAGS += $(X11_LIBS) endif ifneq ($(HAIKU),true) LINK_FLAGS += -pthread endif ifeq ($(USING_JUCE),true) LINK_FLAGS += $(JUCE_AUDIO_BASICS_LIBS) LINK_FLAGS += $(JUCE_AUDIO_PROCESSORS_LIBS) LINK_FLAGS += $(JUCE_CORE_LIBS) LINK_FLAGS += $(JUCE_DATA_STRUCTURES_LIBS) LINK_FLAGS += $(JUCE_EVENTS_LIBS) LINK_FLAGS += $(JUCE_GRAPHICS_LIBS) LINK_FLAGS += $(JUCE_GUI_BASICS_LIBS) ifeq ($(USING_JUCE_GUI_EXTRA),true) LINK_FLAGS += $(JUCE_GUI_EXTRA_LIBS) endif endif # --------------------------------------------------------------------------------------------------------------------- all: $(TARGETS) # --------------------------------------------------------------------------------------------------------------------- clean: rm -f $(OBJS) $(TARGETS) debug: $(MAKE) DEBUG=true # --------------------------------------------------------------------------------------------------------------------- $(BINDIR)/libcarla_utils$(LIB_EXT): $(OBJS) $(LIBS) -@mkdir -p $(BINDIR) @echo "Linking libcarla_utils$(LIB_EXT)" @$(CXX) $(OBJS) $(BUILD_CXX_FLAGS) $(LIBS_START) $(LIBS) $(LIBS_END) $(LINK_FLAGS) $(LINK_FLAGS) $(SHARED) -o $@ # --------------------------------------------------------------------------------------------------------------------- ifeq ($(MACOS),true) $(OBJDIR)/Windows.cpp.o: Windows.cpp -@mkdir -p $(OBJDIR) @echo "Compiling $<" @$(CXX) $< $(BUILD_CXX_FLAGS) -ObjC++ -c -o $@ endif $(OBJDIR)/%.cpp.o: %.cpp -@mkdir -p $(OBJDIR) @echo "Compiling $<" @$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ -include $(OBJS:%.o=%.d) # --------------------------------------------------------------------------------------------------------------------- Carla-2.4.2/source/backend/utils/PipeClient.cpp000066400000000000000000000142151420416754300213410ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2022 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "CarlaUtils.h" #include "CarlaPipeUtils.hpp" namespace CB = CARLA_BACKEND_NAMESPACE; // ------------------------------------------------------------------------------------------------------------------- class ExposedCarlaPipeClient : public CarlaPipeClient { public: ExposedCarlaPipeClient(const CarlaPipeCallbackFunc callbackFunc, void* const callbackPtr) noexcept : CarlaPipeClient(), fCallbackFunc(callbackFunc), fCallbackPtr(callbackPtr), fLastReadLine(nullptr) { CARLA_SAFE_ASSERT(fCallbackFunc != nullptr); } ~ExposedCarlaPipeClient() override { if (fLastReadLine != nullptr) { delete[] fLastReadLine; fLastReadLine = nullptr; } } const char* readlineblock(const uint timeout) noexcept { delete[] fLastReadLine; fLastReadLine = CarlaPipeClient::_readlineblock(true, 0, timeout); return fLastReadLine; } bool readlineblock_bool(const uint timeout) noexcept { if (const char* const line = CarlaPipeClient::_readlineblock(false, 0, timeout)) return std::strcmp(line, "true") == 0; return false; } int readlineblock_int(const uint timeout) noexcept { if (const char* const line = CarlaPipeClient::_readlineblock(false, 0, timeout)) return std::atoi(line); return 0; } double readlineblock_float(const uint timeout) noexcept { if (const char* const line = CarlaPipeClient::_readlineblock(false, 0, timeout)) return std::atof(line); return 0.0; } bool msgReceived(const char* const msg) noexcept override { if (fCallbackFunc != nullptr) { try { fCallbackFunc(fCallbackPtr, msg); } CARLA_SAFE_EXCEPTION("msgReceived"); } return true; } private: const CarlaPipeCallbackFunc fCallbackFunc; void* const fCallbackPtr; const char* fLastReadLine; CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(ExposedCarlaPipeClient) }; CarlaPipeClientHandle carla_pipe_client_new(const char* argv[], CarlaPipeCallbackFunc callbackFunc, void* callbackPtr) { carla_debug("carla_pipe_client_new(%p, %p, %p)", argv, callbackFunc, callbackPtr); ExposedCarlaPipeClient* const pipe = new ExposedCarlaPipeClient(callbackFunc, callbackPtr); if (! pipe->initPipeClient(argv)) { delete pipe; return nullptr; } return pipe; } void carla_pipe_client_idle(CarlaPipeClientHandle handle) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr,); ((ExposedCarlaPipeClient*)handle)->idlePipe(); } bool carla_pipe_client_is_running(CarlaPipeClientHandle handle) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr, false); return ((ExposedCarlaPipeClient*)handle)->isPipeRunning(); } void carla_pipe_client_lock(CarlaPipeClientHandle handle) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr,); return ((ExposedCarlaPipeClient*)handle)->lockPipe(); } void carla_pipe_client_unlock(CarlaPipeClientHandle handle) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr,); return ((ExposedCarlaPipeClient*)handle)->unlockPipe(); } const char* carla_pipe_client_readlineblock(CarlaPipeClientHandle handle, uint timeout) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr, nullptr); return ((ExposedCarlaPipeClient*)handle)->readlineblock(timeout); } bool carla_pipe_client_readlineblock_bool(CarlaPipeClientHandle handle, uint timeout) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr, false); return ((ExposedCarlaPipeClient*)handle)->readlineblock_bool(timeout); } int carla_pipe_client_readlineblock_int(CarlaPipeClientHandle handle, uint timeout) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr, 0); return ((ExposedCarlaPipeClient*)handle)->readlineblock_int(timeout); } double carla_pipe_client_readlineblock_float(CarlaPipeClientHandle handle, uint timeout) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr, 0.0); return ((ExposedCarlaPipeClient*)handle)->readlineblock_float(timeout); } bool carla_pipe_client_write_msg(CarlaPipeClientHandle handle, const char* msg) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr, false); return ((ExposedCarlaPipeClient*)handle)->writeMessage(msg); } bool carla_pipe_client_write_and_fix_msg(CarlaPipeClientHandle handle, const char* msg) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr, false); return ((ExposedCarlaPipeClient*)handle)->writeAndFixMessage(msg); } bool carla_pipe_client_flush(CarlaPipeClientHandle handle) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr, false); return ((ExposedCarlaPipeClient*)handle)->flushMessages(); } bool carla_pipe_client_flush_and_unlock(CarlaPipeClientHandle handle) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr, false); ExposedCarlaPipeClient* const pipe = (ExposedCarlaPipeClient*)handle; const bool ret = pipe->flushMessages(); pipe->unlockPipe(); return ret; } void carla_pipe_client_destroy(CarlaPipeClientHandle handle) { CARLA_SAFE_ASSERT_RETURN(handle != nullptr,); carla_debug("carla_pipe_client_destroy(%p)", handle); ExposedCarlaPipeClient* const pipe = (ExposedCarlaPipeClient*)handle; pipe->closePipeClient(); delete pipe; } // ------------------------------------------------------------------------------------------------------------------- #ifndef CARLA_PLUGIN_EXPORT # include "CarlaPipeUtils.cpp" #endif // ------------------------------------------------------------------------------------------------------------------- Carla-2.4.2/source/backend/utils/System.cpp000066400000000000000000000023741420416754300205740ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2018 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "CarlaUtils.h" #include "CarlaThread.hpp" // ------------------------------------------------------------------------------------------------------------------- void carla_fflush(bool err) { std::fflush(err ? stderr : stdout); } void carla_fputs(bool err, const char* string) { std::fputs(string, err ? stderr : stdout); } void carla_set_process_name(const char* name) { carla_debug("carla_set_process_name(\"%s\")", name); CarlaThread::setCurrentThreadName(name); } // ------------------------------------------------------------------------------------------------------------------- Carla-2.4.2/source/backend/utils/Windows.cpp000066400000000000000000000112401420416754300207320ustar00rootroot00000000000000/* * Carla Plugin Host * Copyright (C) 2011-2022 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "CarlaUtils.h" #include "CarlaMathUtils.hpp" #if defined(CARLA_OS_MAC) && !defined(CARLA_PLUGIN_EXPORT) # import #endif #ifdef HAVE_X11 # include # include #endif namespace CB = CARLA_BACKEND_NAMESPACE; // ------------------------------------------------------------------------------------------------------------------- double carla_get_desktop_scale_factor() { // allow custom scale for testing if (const char* const scale = getenv("DPF_SCALE_FACTOR")) return std::max(1.0, std::atof(scale)); // Qt env var for the same if (const char* const scale = getenv("QT_SCALE_FACTOR")) return std::max(1.0, std::atof(scale)); #if defined(CARLA_OS_MAC) && !defined(CARLA_PLUGIN_EXPORT) return [NSScreen mainScreen].backingScaleFactor; #endif #ifdef HAVE_X11 if (::Display* const display = XOpenDisplay(nullptr)) { XrmInitialize(); if (char* const rms = XResourceManagerString(display)) { if (const XrmDatabase sdb = XrmGetStringDatabase(rms)) { char* type = nullptr; XrmValue ret; if (XrmGetResource(sdb, "Xft.dpi", "String", &type, &ret) && ret.addr != nullptr && type != nullptr && std::strncmp("String", type, 6) == 0) { const double dpi = std::atof(ret.addr); if (carla_isNotZero(dpi)) return dpi / 96; } } } XCloseDisplay(display); } #endif return 1.0; } // ------------------------------------------------------------------------------------------------------------------- int carla_cocoa_get_window(void* nsViewPtr) { CARLA_SAFE_ASSERT_RETURN(nsViewPtr != nullptr, 0); #if defined(CARLA_OS_MAC) && !defined(CARLA_PLUGIN_EXPORT) NSView* const nsView = (NSView*)nsViewPtr; return [[nsView window] windowNumber]; #else return 0; #endif } void carla_cocoa_set_transient_window_for(void* nsViewChildPtr, void* nsViewParentPtr) { CARLA_SAFE_ASSERT_RETURN(nsViewChildPtr != nullptr,); CARLA_SAFE_ASSERT_RETURN(nsViewParentPtr != nullptr,); #if defined(CARLA_OS_MAC) && !defined(CARLA_PLUGIN_EXPORT) NSView* const nsViewChild = (NSView*)nsViewChildPtr; NSView* const nsViewParent = (NSView*)nsViewParentPtr; [[nsViewParent window] addChildWindow:[nsViewChild window] ordered:NSWindowAbove]; #endif } void carla_x11_reparent_window(uintptr_t winId1, uintptr_t winId2) { CARLA_SAFE_ASSERT_RETURN(winId1 != 0,); CARLA_SAFE_ASSERT_RETURN(winId2 != 0,); #ifdef HAVE_X11 if (::Display* const disp = XOpenDisplay(nullptr)) { XReparentWindow(disp, winId1, winId2, 0, 0); XMapWindow(disp, winId1); XCloseDisplay(disp); } #endif } void carla_x11_move_window(uintptr_t winId, int x, int y) { CARLA_SAFE_ASSERT_RETURN(winId != 0,); #ifdef HAVE_X11 if (::Display* const disp = XOpenDisplay(nullptr)) { XMoveWindow(disp, winId, x, y); XCloseDisplay(disp); } #else // unused return; (void)x; (void)y; #endif } int* carla_x11_get_window_pos(uintptr_t winId) { static int pos[4]; if (winId == 0) { pos[0] = 0; pos[1] = 0; pos[2] = 0; pos[3] = 0; } #ifdef HAVE_X11 else if (::Display* const disp = XOpenDisplay(nullptr)) { int x, y; Window child; XWindowAttributes xwa; XTranslateCoordinates(disp, winId, XRootWindow(disp, 0), 0, 0, &x, &y, &child); XGetWindowAttributes(disp, winId, &xwa); XCloseDisplay(disp); pos[0] = x - xwa.x; pos[1] = y - xwa.y; pos[2] = xwa.x; pos[3] = xwa.y; } #endif else { pos[0] = 0; pos[1] = 0; pos[2] = 0; pos[3] = 0; } return pos; } // ------------------------------------------------------------------------------------------------------------------- Carla-2.4.2/source/bridges-plugin/000077500000000000000000000000001420416754300167625ustar00rootroot00000000000000Carla-2.4.2/source/bridges-plugin/.kdev_include_paths000066400000000000000000000000631420416754300226150ustar00rootroot00000000000000../ ../backend/ ../includes/ ../modules/ ../utils/ Carla-2.4.2/source/bridges-plugin/CarlaBridgePlugin.cpp000066400000000000000000000542131420416754300230110ustar00rootroot00000000000000/* * Carla Bridge Plugin * Copyright (C) 2012-2022 Filipe Coelho * * 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 2 of * the License, or 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. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #ifndef BUILD_BRIDGE # error This file should not be compiled if not building bridge #endif #include "CarlaEngine.hpp" #include "CarlaHost.h" #include "CarlaUtils.h" #include "CarlaBackendUtils.hpp" #include "CarlaJuceUtils.hpp" #include "CarlaMainLoop.hpp" #include "CarlaMIDI.h" #ifdef CARLA_OS_MAC # include "CarlaMacUtils.hpp" #endif #ifdef CARLA_OS_UNIX # include #endif #ifdef CARLA_OS_LINUX # include # define SCHED_RESET_ON_FORK 0x40000000 #endif #ifdef CARLA_OS_WIN # include # include #endif #ifdef HAVE_X11 # include #endif #ifdef USING_JUCE # if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wconversion" # pragma GCC diagnostic ignored "-Weffc++" # pragma GCC diagnostic ignored "-Wsign-conversion" # pragma GCC diagnostic ignored "-Wundef" # pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant" # endif # include "AppConfig.h" # if defined(CARLA_OS_MAC) || defined(CARLA_OS_WIN) # include "juce_gui_basics/juce_gui_basics.h" # else # include "juce_events/juce_events.h" # endif # if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) # pragma GCC diagnostic pop # endif #endif #include "jackbridge/JackBridge.hpp" #include "water/files/File.h" #include "water/misc/Time.h" using CARLA_BACKEND_NAMESPACE::CarlaEngine; using CARLA_BACKEND_NAMESPACE::EngineCallbackOpcode; using CARLA_BACKEND_NAMESPACE::EngineCallbackOpcode2Str; using CARLA_BACKEND_NAMESPACE::runMainLoopOnce; using water::CharPointer_UTF8; using water::File; using water::String; // ------------------------------------------------------------------------- static bool gIsInitiated = false; static volatile bool gCloseNow = false; static volatile bool gSaveNow = false; #if defined(CARLA_OS_UNIX) static void closeSignalHandler(int) noexcept { gCloseNow = true; } static void saveSignalHandler(int) noexcept { gSaveNow = true; } #elif defined(CARLA_OS_WIN) static BOOL WINAPI winSignalHandler(DWORD dwCtrlType) noexcept { if (dwCtrlType == CTRL_C_EVENT) { gCloseNow = true; return TRUE; } return FALSE; } #endif static void initSignalHandler() { #if defined(CARLA_OS_UNIX) struct sigaction sig; carla_zeroStruct(sig); sig.sa_handler = closeSignalHandler; sig.sa_flags = SA_RESTART; sigemptyset(&sig.sa_mask); sigaction(SIGTERM, &sig, nullptr); sigaction(SIGINT, &sig, nullptr); sig.sa_handler = saveSignalHandler; sig.sa_flags = SA_RESTART; sigemptyset(&sig.sa_mask); sigaction(SIGUSR1, &sig, nullptr); #elif defined(CARLA_OS_WIN) SetConsoleCtrlHandler(winSignalHandler, TRUE); #endif } // ------------------------------------------------------------------------- static String gProjectFilename; static CarlaHostHandle gHostHandle; static void gIdle() { carla_engine_idle(gHostHandle); if (gSaveNow) { gSaveNow = false; if (gProjectFilename.isNotEmpty()) { if (! carla_save_plugin_state(gHostHandle, 0, gProjectFilename.toRawUTF8())) carla_stderr("Plugin preset save failed, error was:\n%s", carla_get_last_error(gHostHandle)); } } } // ------------------------------------------------------------------------- #if defined(USING_JUCE) && (defined(CARLA_OS_MAC) || defined(CARLA_OS_WIN)) class CarlaJuceApp : public juce::JUCEApplication, private juce::Timer { public: CarlaJuceApp() {} ~CarlaJuceApp() {} void initialise(const juce::String&) override { startTimer(8); } void shutdown() override { gCloseNow = true; stopTimer(); } const juce::String getApplicationName() override { return "CarlaPlugin"; } const juce::String getApplicationVersion() override { return CARLA_VERSION_STRING; } void timerCallback() override { gIdle(); if (gCloseNow) { quit(); gCloseNow = false; } } }; static juce::JUCEApplicationBase* juce_CreateApplication() { return new CarlaJuceApp(); } #endif // ------------------------------------------------------------------------- class CarlaBridgePlugin { public: CarlaBridgePlugin(const bool useBridge, const char* const clientName, const char* const audioPoolBaseName, const char* const rtClientBaseName, const char* const nonRtClientBaseName, const char* const nonRtServerBaseName) : fEngine(nullptr), #ifdef USING_JUCE fJuceInitialiser(), #endif fUsingBridge(false), fUsingExec(false) { CARLA_ASSERT(clientName != nullptr && clientName[0] != '\0'); carla_debug("CarlaBridgePlugin::CarlaBridgePlugin(%s, \"%s\", %s, %s, %s, %s)", bool2str(useBridge), clientName, audioPoolBaseName, rtClientBaseName, nonRtClientBaseName, nonRtServerBaseName); carla_set_engine_callback(gHostHandle, callback, this); if (useBridge) { carla_engine_init_bridge(gHostHandle, audioPoolBaseName, rtClientBaseName, nonRtClientBaseName, nonRtServerBaseName, clientName); } else if (std::getenv("CARLA_BRIDGE_DUMMY") != nullptr) { carla_engine_init(gHostHandle, "Dummy", clientName); } else { carla_engine_init(gHostHandle, "JACK", clientName); } fEngine = carla_get_engine_from_handle(gHostHandle); } ~CarlaBridgePlugin() { carla_debug("CarlaBridgePlugin::~CarlaBridgePlugin()"); if (fEngine != nullptr && ! fUsingExec) carla_engine_close(gHostHandle); } bool isOk() const noexcept { return (fEngine != nullptr); } // --------------------------------------------------------------------- void exec(const bool useBridge) { fUsingBridge = useBridge; fUsingExec = true; const bool testing = std::getenv("CARLA_BRIDGE_TESTING") != nullptr; if (! useBridge && ! testing) { const CarlaPluginInfo* const pInfo = carla_get_plugin_info(gHostHandle, 0); CARLA_SAFE_ASSERT_RETURN(pInfo != nullptr,); gProjectFilename = CharPointer_UTF8(pInfo->name); gProjectFilename += ".carxs"; if (! File::isAbsolutePath(gProjectFilename)) gProjectFilename = File::getCurrentWorkingDirectory().getChildFile(gProjectFilename).getFullPathName(); if (File(gProjectFilename).existsAsFile()) { if (carla_load_plugin_state(gHostHandle, 0, gProjectFilename.toRawUTF8())) carla_stdout("Plugin state loaded successfully"); else carla_stderr("Plugin state load failed, error was:\n%s", carla_get_last_error(gHostHandle)); } else { carla_stdout("Previous plugin state in '%s' is non-existent, will start from default state", gProjectFilename.toRawUTF8()); } } gIsInitiated = true; #if defined(USING_JUCE) && (defined(CARLA_OS_MAC) || defined(CARLA_OS_WIN)) # ifndef CARLA_OS_WIN static const int argc = 0; static const char* argv[] = {}; # endif juce::JUCEApplicationBase::createInstance = &juce_CreateApplication; juce::JUCEApplicationBase::main(JUCE_MAIN_FUNCTION_ARGS); #else int64_t timeToEnd = 0; if (testing) { timeToEnd = water::Time::currentTimeMillis() + 5 * 1000; fEngine->transportPlay(); } for (; runMainLoopOnce() && ! gCloseNow;) { gIdle(); # if defined(CARLA_OS_MAC) || defined(CARLA_OS_WIN) // MacOS and Win32 have event-loops to run, so minimize sleep time carla_msleep(1); # else carla_msleep(5); # endif if (testing && timeToEnd - water::Time::currentTimeMillis() < 0) break; } #endif carla_engine_close(gHostHandle); } // --------------------------------------------------------------------- protected: void handleCallback(const EngineCallbackOpcode action, const int value1, const int, const int, const float, const char* const) { CARLA_BACKEND_USE_NAMESPACE; switch (action) { case ENGINE_CALLBACK_ENGINE_STOPPED: case ENGINE_CALLBACK_PLUGIN_REMOVED: case ENGINE_CALLBACK_QUIT: gCloseNow = true; break; case ENGINE_CALLBACK_UI_STATE_CHANGED: if (gIsInitiated && value1 != 1 && ! fUsingBridge) gCloseNow = true; break; default: break; } } private: CarlaEngine* fEngine; #ifdef USING_JUCE const juce::ScopedJuceInitialiser_GUI fJuceInitialiser; #endif bool fUsingBridge; bool fUsingExec; static void callback(void* ptr, EngineCallbackOpcode action, unsigned int pluginId, int value1, int value2, int value3, float valuef, const char* valueStr) { carla_debug("CarlaBridgePlugin::callback(%p, %i:%s, %i, %i, %i, %i, %f, \"%s\")", ptr, action, EngineCallbackOpcode2Str(action), pluginId, value1, value2, value3, static_cast(valuef), valueStr); // ptr must not be null CARLA_SAFE_ASSERT_RETURN(ptr != nullptr,); #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH // pluginId must be 0 (first), except for patchbay things if (action < CARLA_BACKEND_NAMESPACE::ENGINE_CALLBACK_PATCHBAY_CLIENT_ADDED || action > CARLA_BACKEND_NAMESPACE::ENGINE_CALLBACK_PATCHBAY_CONNECTION_REMOVED) #endif { CARLA_SAFE_ASSERT_UINT_RETURN(pluginId == 0, pluginId,); } return ((CarlaBridgePlugin*)ptr)->handleCallback(action, value1, value2, value3, valuef, valueStr); } CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaBridgePlugin) }; // ------------------------------------------------------------------------- int main(int argc, char* argv[]) { // --------------------------------------------------------------------- // Check argument count if (argc != 4 && argc != 5) { carla_stdout("usage: %s